@visactor/vseed 0.1.4 → 0.1.6

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 (62) hide show
  1. package/dist/builder/builder/builder.d.ts +2 -2
  2. package/dist/index.cjs +851 -703
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.js +851 -703
  5. package/dist/index.js.map +1 -1
  6. package/dist/pipeline/advanced/chart/pipes/{init/autoDimensions.d.ts → default/defaultDimensions.d.ts} +1 -1
  7. package/dist/pipeline/advanced/chart/pipes/default/defaultMeasureName.d.ts +2 -0
  8. package/dist/pipeline/advanced/chart/pipes/default/defaultMeasures.d.ts +5 -0
  9. package/dist/pipeline/advanced/chart/pipes/default/index.d.ts +3 -0
  10. package/dist/pipeline/advanced/chart/pipes/encoding/column.d.ts +19 -0
  11. package/dist/pipeline/advanced/chart/pipes/encoding/line.d.ts +17 -0
  12. package/dist/pipeline/advanced/chart/pipes/index.d.ts +1 -0
  13. package/dist/pipeline/advanced/chart/pipes/init/index.d.ts +0 -2
  14. package/dist/pipeline/advanced/chart/pipes/measures/utils.d.ts +3 -18
  15. package/dist/pipeline/advanced/table/pipes/reshape/index.d.ts +1 -0
  16. package/dist/pipeline/advanced/table/pipes/reshape/reshapePivotTable.d.ts +2 -0
  17. package/dist/pipeline/spec/chart/pipes/color/colorCellStyleFill.d.ts +2 -0
  18. package/dist/pipeline/spec/chart/pipes/color/colorFunnelStyleFill.d.ts +2 -0
  19. package/dist/pipeline/spec/chart/pipes/color/colorPieStyleFill.d.ts +2 -0
  20. package/dist/pipeline/spec/chart/pipes/color/colorRoseStyleFill.d.ts +2 -0
  21. package/dist/pipeline/spec/chart/pipes/color/index.d.ts +4 -0
  22. package/dist/pipeline/spec/chart/pipes/markStyle/cellStyle.d.ts +2 -0
  23. package/dist/pipeline/spec/chart/pipes/markStyle/funnelStyle.d.ts +2 -0
  24. package/dist/pipeline/spec/chart/pipes/markStyle/index.d.ts +5 -1
  25. package/dist/pipeline/spec/chart/pipes/markStyle/pieStyle.d.ts +2 -0
  26. package/dist/pipeline/spec/chart/pipes/markStyle/roseStyle.d.ts +2 -0
  27. package/dist/types/advancedVSeed.d.ts +2 -0
  28. package/dist/types/chartType/area/area.d.ts +20 -3
  29. package/dist/types/chartType/area/zArea.d.ts +2 -0
  30. package/dist/types/chartType/areaPercent/areaPercent.d.ts +16 -0
  31. package/dist/types/chartType/areaPercent/zAreaPercent.d.ts +2 -0
  32. package/dist/types/chartType/bar/zBar.d.ts +2 -0
  33. package/dist/types/chartType/barParallel/zBarParallel.d.ts +2 -0
  34. package/dist/types/chartType/barPercent/zBarPercent.d.ts +2 -0
  35. package/dist/types/chartType/column/column.d.ts +17 -1
  36. package/dist/types/chartType/column/zColumn.d.ts +2 -0
  37. package/dist/types/chartType/columnParallel/columnParallel.d.ts +17 -0
  38. package/dist/types/chartType/columnParallel/zColumnParallel.d.ts +2 -0
  39. package/dist/types/chartType/columnPercent/columnPercent.d.ts +17 -1
  40. package/dist/types/chartType/columnPercent/zColumnPercent.d.ts +2 -0
  41. package/dist/types/chartType/donut/zDonut.d.ts +2 -0
  42. package/dist/types/chartType/dualAxis/zDualAxis.d.ts +10 -0
  43. package/dist/types/chartType/funnel/zFunnel.d.ts +2 -0
  44. package/dist/types/chartType/heatmap/zHeatmap.d.ts +2 -0
  45. package/dist/types/chartType/line/line.d.ts +16 -0
  46. package/dist/types/chartType/line/zLine.d.ts +2 -0
  47. package/dist/types/chartType/pie/zPie.d.ts +2 -0
  48. package/dist/types/chartType/pivotTable/zPivotTable.d.ts +2 -0
  49. package/dist/types/chartType/radar/zRadar.d.ts +2 -0
  50. package/dist/types/chartType/rose/zRose.d.ts +2 -0
  51. package/dist/types/chartType/roseParallel/zRoseParallel.d.ts +2 -0
  52. package/dist/types/chartType/scatter/zScatter.d.ts +10 -0
  53. package/dist/types/chartType/table/zTable.d.ts +2 -0
  54. package/dist/types/properties/measures/measures.d.ts +3 -1
  55. package/dist/types/properties/measures/zDualMeasures.d.ts +16 -0
  56. package/dist/types/properties/measures/zMeasures.d.ts +6 -0
  57. package/dist/types/properties/measures/zScatterMeasures.d.ts +16 -0
  58. package/dist/types/zVseed.d.ts +56 -0
  59. package/dist/umd/index.js +872 -724
  60. package/dist/umd/index.js.map +1 -1
  61. package/package.json +1 -1
  62. package/dist/pipeline/advanced/chart/pipes/init/utils.d.ts +0 -2
package/dist/umd/index.js CHANGED
@@ -514,7 +514,8 @@
514
514
  void 0
515
515
  ].includes(key)).map((measure)=>({
516
516
  id: measure,
517
- alias: measure
517
+ alias: measure,
518
+ encoding: 'column'
518
519
  }));
519
520
  return result;
520
521
  };
@@ -598,7 +599,7 @@
598
599
  ].includes(key) && !measures.some((measure)=>measure.id === key)).map((dim)=>({
599
600
  id: dim,
600
601
  alias: dim,
601
- location: 'dimension'
602
+ encoding: 'column'
602
603
  }));
603
604
  return result;
604
605
  };
@@ -1118,10 +1119,27 @@
1118
1119
  void 0
1119
1120
  ].includes(key)).map((measure)=>({
1120
1121
  id: measure,
1121
- alias: measure
1122
+ alias: measure,
1123
+ encoding: 'detail'
1122
1124
  }));
1123
1125
  return result;
1124
1126
  };
1127
+ const ORIGINAL_DATA = '__OriginalData__';
1128
+ const Separator = '-';
1129
+ const FoldMeasureName = '__MeaName__';
1130
+ const FoldMeasureId = '__MeaId__';
1131
+ const FoldMeasureValue = '__MeaValue__';
1132
+ const MeasureName = FoldMeasureName;
1133
+ const FoldPrimaryMeasureValue = '__MeaPrimaryValue__';
1134
+ const FoldSecondaryMeasureValue = '__MeaSecondaryValue__';
1135
+ const FoldXMeasureValue = '__MeaXValue__';
1136
+ const FoldYMeasureValue = '__MeaYValue__';
1137
+ const XEncoding = '__Dim_X__';
1138
+ const YEncoding = '__Dim_Y__';
1139
+ const AngleEncoding = '__Dim_Angle__';
1140
+ const DetailEncoding = '__Dim_Detail__';
1141
+ const ColorEncoding = '__Dim_Color__';
1142
+ const ColorIdEncoding = '__Dim_ColorId__';
1125
1143
  const findAllDimensions = (dimensions = [])=>{
1126
1144
  if (!dimensions) return [];
1127
1145
  const result = [];
@@ -1138,15 +1156,21 @@
1138
1156
  const { vseed } = context;
1139
1157
  const { dimensions, dataset } = vseed;
1140
1158
  const measures = findAllMeasures(advancedVSeed.measures);
1159
+ const MeaName = {
1160
+ id: MeasureName,
1161
+ alias: intl.i18n`指标名称`
1162
+ };
1141
1163
  if (!dataset) throw new Error('dataset is required');
1142
1164
  if (0 === dataset.length) return result;
1143
1165
  if (dimensions) {
1144
1166
  const newDimensions = findAllDimensions(dimensions);
1167
+ if (!newDimensions.some((dim)=>dim.id === MeasureName)) newDimensions.push(MeaName);
1145
1168
  result.dimensions = newDimensions.map((item, index)=>{
1169
+ if ('row' === item.encoding || 'column' === item.encoding) return item;
1146
1170
  if ('rowDimension' === item.location || 'columnDimension' === item.location) return item;
1147
1171
  return {
1148
1172
  ...item,
1149
- location: index % 2 === 0 ? 'columnDimension' : 'rowDimension'
1173
+ encoding: index % 2 === 0 ? 'column' : 'row'
1150
1174
  };
1151
1175
  });
1152
1176
  return result;
@@ -1156,15 +1180,19 @@
1156
1180
  ...prev,
1157
1181
  ...cur
1158
1182
  }), {});
1159
- let i = 0;
1160
- result.dimensions = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'string' == typeof item[key]) && ![
1183
+ const newDimensions = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'string' == typeof item[key]) && ![
1161
1184
  '',
1162
1185
  null,
1163
1186
  void 0
1164
- ].includes(key) && !measures.some((measure)=>measure.id === key)).map((dim)=>({
1187
+ ].includes(key) && !measures.some((measure)=>measure.id === key));
1188
+ result.dimensions = newDimensions.map((dim)=>({
1165
1189
  id: dim,
1166
- alias: dim,
1167
- location: i++ % 2 === 0 ? 'columnDimension' : 'rowDimension'
1190
+ alias: dim
1191
+ }));
1192
+ result.dimensions.push(MeaName);
1193
+ result.dimensions = result.dimensions.map((dim, index)=>({
1194
+ ...dim,
1195
+ encoding: index % 2 === 0 ? 'column' : 'row'
1168
1196
  }));
1169
1197
  return result;
1170
1198
  };
@@ -1195,11 +1223,110 @@
1195
1223
  };
1196
1224
  return result;
1197
1225
  };
1226
+ function chunk_AIG3BDKO_i(...e) {
1227
+ return chunk_WIMGWYZL_u(chunk_AIG3BDKO_n, e);
1228
+ }
1229
+ var chunk_AIG3BDKO_n = (e, r)=>e.length >= r;
1230
+ function chunk_KI5X74E2_y(...t) {
1231
+ return chunk_WIMGWYZL_u(chunk_KI5X74E2_f, t);
1232
+ }
1233
+ function chunk_KI5X74E2_f(t, e) {
1234
+ if (!chunk_AIG3BDKO_i(e, 1)) return {
1235
+ ...t
1236
+ };
1237
+ if (!chunk_AIG3BDKO_i(e, 2)) {
1238
+ let { [e[0]]: r, ...m } = t;
1239
+ return m;
1240
+ }
1241
+ let o = {
1242
+ ...t
1243
+ };
1244
+ for (let r of e)delete o[r];
1245
+ return o;
1246
+ }
1247
+ const foldMeasures = (dataset, measures, options)=>{
1248
+ const { measureId, measureName, measureValue, colorMeasureId } = options || {};
1249
+ const foldInfo = {
1250
+ measureId,
1251
+ measureName,
1252
+ measureValue,
1253
+ colorRange: [
1254
+ 0,
1255
+ 1
1256
+ ],
1257
+ measureRange: [
1258
+ 0,
1259
+ 1
1260
+ ],
1261
+ foldMap: {}
1262
+ };
1263
+ const result = new Array(dataset.length * measures.length);
1264
+ let index = 0;
1265
+ const ids = measures.map((d)=>d.id);
1266
+ for(let i = 0; i < dataset.length; i++)for(let j = 0; j < measures.length; j++){
1267
+ const datum = chunk_KI5X74E2_y({
1268
+ ...dataset[i]
1269
+ }, ids);
1270
+ datum[ORIGINAL_DATA] = dataset[i];
1271
+ const measure = measures[j];
1272
+ const { id, alias } = measure;
1273
+ datum[id] = dataset[i][id];
1274
+ datum[measureId] = id;
1275
+ datum[measureName] = alias || id;
1276
+ datum[measureValue] = dataset[i][id];
1277
+ if (colorMeasureId) {
1278
+ const value = datum[ORIGINAL_DATA][colorMeasureId];
1279
+ datum[ColorEncoding] = value;
1280
+ datum[ColorIdEncoding] = colorMeasureId;
1281
+ foldInfo.colorRange = [
1282
+ Math.min(foldInfo.colorRange[0] || 1 / 0, Number(value)),
1283
+ Math.max(foldInfo.colorRange[1] || -1 / 0, Number(value))
1284
+ ];
1285
+ }
1286
+ foldInfo.measureRange = [
1287
+ Math.min(foldInfo.measureRange[0] || 1 / 0, Number(datum[id])),
1288
+ Math.max(foldInfo.measureRange[1] || -1 / 0, Number(datum[id]))
1289
+ ];
1290
+ foldInfo.foldMap[id] = alias;
1291
+ result[index++] = datum;
1292
+ }
1293
+ return {
1294
+ dataset: result,
1295
+ foldInfo
1296
+ };
1297
+ };
1298
+ const reshapePivotTable = (advancedVSeed, context)=>{
1299
+ const result = {
1300
+ ...advancedVSeed
1301
+ };
1302
+ const { vseed } = context;
1303
+ const { dataset, chartType } = vseed;
1304
+ const { dimensions, measures } = advancedVSeed;
1305
+ const { dataset: newDatasets, foldInfo } = foldMeasures(dataset, findAllMeasures(measures), {
1306
+ measureId: FoldMeasureId,
1307
+ measureName: FoldMeasureName,
1308
+ measureValue: FoldMeasureValue
1309
+ });
1310
+ const datasetReshapeInfo = [
1311
+ {
1312
+ id: String(chartType),
1313
+ index: 0,
1314
+ foldInfo
1315
+ }
1316
+ ];
1317
+ return {
1318
+ ...result,
1319
+ dataset: newDatasets,
1320
+ datasetReshapeInfo: datasetReshapeInfo,
1321
+ dimensions,
1322
+ measures
1323
+ };
1324
+ };
1198
1325
  const pivotTableAdvancedPipeline = [
1199
1326
  initAdvancedVSeed,
1200
1327
  autoPivotMeasures,
1201
1328
  autoPivotDimensions,
1202
- records_records,
1329
+ reshapePivotTable,
1203
1330
  pivotTableConfig,
1204
1331
  theme_theme
1205
1332
  ];
@@ -1246,7 +1373,7 @@
1246
1373
  const pivotColumns = (spec, context)=>{
1247
1374
  const { advancedVSeed } = context;
1248
1375
  const dimensions = advancedVSeed.dimensions;
1249
- const columns = dimensions.filter((item)=>'columnDimension' === item['location']);
1376
+ const columns = dimensions.filter((item)=>'columnDimension' === item['location'] || 'column' === item['encoding']);
1250
1377
  return {
1251
1378
  ...spec,
1252
1379
  columns: columns.map((item)=>({
@@ -1259,7 +1386,7 @@
1259
1386
  const pivotRows = (spec, context)=>{
1260
1387
  const { advancedVSeed } = context;
1261
1388
  const dimensions = advancedVSeed.dimensions;
1262
- const rows = dimensions.filter((item)=>'rowDimension' === item['location']);
1389
+ const rows = dimensions.filter((item)=>'rowDimension' === item['location'] || 'row' === item['encoding']);
1263
1390
  return {
1264
1391
  ...spec,
1265
1392
  rows: rows.map((item)=>({
@@ -1271,25 +1398,31 @@
1271
1398
  };
1272
1399
  const pivotIndicators = (spec, context)=>{
1273
1400
  const { advancedVSeed } = context;
1274
- const { locale } = advancedVSeed;
1275
- const measures = advancedVSeed.measures;
1401
+ const { locale, measures, datasetReshapeInfo } = advancedVSeed;
1402
+ const { foldInfo } = datasetReshapeInfo[0];
1276
1403
  return {
1277
1404
  ...spec,
1278
1405
  indicatorsAsCol: true,
1279
1406
  indicatorTitle: intl.i18n`指标名称`,
1280
- indicators: measures.map((item)=>{
1281
- if (isMeasure(item)) return {
1407
+ hideIndicatorName: true,
1408
+ indicators: [
1409
+ {
1282
1410
  cellType: 'text',
1283
- indicatorKey: item.id,
1284
- title: item.alias || item.id,
1411
+ indicatorKey: foldInfo.measureValue,
1412
+ title: 'indicator',
1285
1413
  width: 'auto',
1286
- format: pivotIndicators_fieldFormat(item, locale)
1287
- };
1288
- return {};
1289
- })
1414
+ format: pivotIndicators_fieldFormat(measures, foldInfo, locale)
1415
+ }
1416
+ ]
1290
1417
  };
1291
1418
  };
1292
- const pivotIndicators_fieldFormat = (node, locale)=>(value)=>{
1419
+ const pivotIndicators_fieldFormat = (measures, foldInfo, locale)=>(value, col, row, table)=>{
1420
+ if (!chunk_6GTAPB47_e(col) || !chunk_6GTAPB47_e(row) || !table) return value;
1421
+ const datum = table.getCellOriginRecord(col, row);
1422
+ const { measureId: foldMeasureId } = foldInfo;
1423
+ const measureId = datum[0][foldMeasureId];
1424
+ const node = findMeasureById(measures, measureId);
1425
+ if (!node) return value;
1293
1426
  const { format = {}, autoFormat = true } = node;
1294
1427
  if (!chunk_VCYTMP4D_n(format)) {
1295
1428
  const formatter = createFormatter(format);
@@ -1445,95 +1578,81 @@
1445
1578
  locale: locale || 'zh-CN'
1446
1579
  };
1447
1580
  };
1448
- const ORIGINAL_DATA = '__OriginalData__';
1449
- const Separator = '-';
1450
- const FoldMeasureName = '__MeaName__';
1451
- const FoldMeasureId = '__MeaId__';
1452
- const FoldMeasureValue = '__MeaValue__';
1453
- const MeasureName = FoldMeasureName;
1454
- const FoldPrimaryMeasureValue = '__MeaPrimaryValue__';
1455
- const FoldSecondaryMeasureValue = '__MeaSecondaryValue__';
1456
- const FoldXMeasureValue = '__MeaXValue__';
1457
- const FoldYMeasureValue = '__MeaYValue__';
1458
- const XEncoding = '__Dim_X__';
1459
- const YEncoding = '__Dim_Y__';
1460
- const AngleEncoding = '__Dim_Angle__';
1461
- const DetailEncoding = '__Dim_Detail__';
1462
- const ColorEncoding = '__Dim_Color__';
1463
- const ColorIdEncoding = '__Dim_ColorId__';
1464
- const getBasicDimensions = (vseed)=>{
1465
- const { dimensions, dataset } = vseed;
1466
- const MeaName = {
1467
- id: MeasureName,
1468
- alias: intl.i18n`指标名称`,
1469
- encoding: 'detail'
1581
+ const defaultMeasures_defaultMeasures = (advancedVSeed, context)=>{
1582
+ const { vseed } = context;
1583
+ const { measures, dataset } = vseed;
1584
+ if (measures && measures.length > 0) return {
1585
+ ...advancedVSeed,
1586
+ measures
1470
1587
  };
1471
1588
  if (!dataset) throw new Error('dataset is required');
1472
- if (0 === dataset.length) return [];
1473
- if (dimensions) {
1474
- const basicDimensions = dimensions.map((dim)=>({
1475
- location: 'dimension',
1476
- ...dim
1477
- }));
1478
- if (basicDimensions.some((dim)=>dim.id === MeasureName)) return basicDimensions;
1479
- basicDimensions.push(MeaName);
1480
- return basicDimensions;
1481
- }
1589
+ if (0 === dataset.length) return {
1590
+ ...advancedVSeed,
1591
+ measures: []
1592
+ };
1482
1593
  const top100dataset = dataset.slice(0, 100);
1483
1594
  const sample = top100dataset.reduce((prev, cur)=>({
1484
1595
  ...prev,
1485
1596
  ...cur
1486
1597
  }), {});
1487
- const basicDimensions = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'string' == typeof item[key]) && ![
1598
+ const defaultMeasures = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
1488
1599
  '',
1489
1600
  null,
1490
1601
  void 0
1491
- ].includes(key)).map((dim)=>({
1492
- id: dim,
1493
- alias: dim,
1494
- location: 'dimension'
1602
+ ].includes(key)).map((measure)=>({
1603
+ id: measure,
1604
+ alias: measure
1495
1605
  }));
1496
- basicDimensions.push(MeaName);
1497
- return basicDimensions;
1498
- };
1499
- const getBasicMeasures = (vseed)=>{
1500
- const { dataset, measures } = vseed;
1501
- if (!measures || 0 === measures.length) return generateMeasuresByDataset(dataset);
1502
- return measures;
1606
+ return {
1607
+ ...advancedVSeed,
1608
+ measures: defaultMeasures
1609
+ };
1503
1610
  };
1504
- const generateMeasuresByDataset = (dataset)=>{
1611
+ const defaultDimensions = (advancedVSeed, context)=>{
1612
+ const result = {
1613
+ ...advancedVSeed
1614
+ };
1615
+ const { vseed } = context;
1616
+ const { dimensions, dataset } = vseed;
1617
+ if (dimensions && dimensions.length > 0) return {
1618
+ ...result,
1619
+ dimensions
1620
+ };
1505
1621
  if (!dataset) throw new Error('dataset is required');
1506
- if (0 === dataset.length) return [];
1622
+ if (0 === dataset.length) return result;
1623
+ const measures = findAllMeasures(advancedVSeed.measures);
1507
1624
  const top100dataset = dataset.slice(0, 100);
1508
1625
  const sample = top100dataset.reduce((prev, cur)=>({
1509
1626
  ...prev,
1510
1627
  ...cur
1511
1628
  }), {});
1512
- const basicMeasures = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'number' == typeof item[key]) && ![
1629
+ const newDimensions = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'string' == typeof item[key]) && ![
1513
1630
  '',
1514
1631
  null,
1515
1632
  void 0
1516
- ].includes(key)).map((measure)=>({
1517
- id: measure,
1518
- alias: measure
1633
+ ].includes(key) && !measures.some((measure)=>measure.id === key)).map((dim)=>({
1634
+ id: dim,
1635
+ alias: dim
1519
1636
  }));
1520
- return basicMeasures;
1521
- };
1522
- const isMeasureTreeWithChildren = (vseed)=>{
1523
- const { measures } = vseed;
1524
- if (!measures) return false;
1525
- return measures.some((measure)=>'children' in measure);
1637
+ return {
1638
+ ...result,
1639
+ dimensions: newDimensions
1640
+ };
1526
1641
  };
1527
- const isMeasureTreeWithParentId = (vseed)=>{
1528
- const { measures } = vseed;
1529
- if (!measures) return false;
1530
- return measures.some((measure)=>'parentId' in measure);
1642
+ const defaultMeasureName = (advancedVSeed)=>{
1643
+ const result = {
1644
+ ...advancedVSeed
1645
+ };
1646
+ const MeaName = {
1647
+ id: MeasureName,
1648
+ alias: intl.i18n`指标名称`
1649
+ };
1650
+ if (!result.dimensions?.some((dim)=>dim.id === MeasureName)) result.dimensions?.push(MeaName);
1651
+ return result;
1531
1652
  };
1532
- const encodingForLine = (advancedVSeed, context)=>{
1533
- const { vseed } = context;
1534
- const { measures: vseedMeasures = [] } = vseed;
1535
- const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
1536
- const dimensions = getBasicDimensions(vseed);
1653
+ const encodingForLine = (advancedVSeed)=>{
1654
+ const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
1655
+ const measures = findAllMeasures(vseedMeasures);
1537
1656
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
1538
1657
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
1539
1658
  const encoding = {};
@@ -1546,36 +1665,46 @@
1546
1665
  encoding
1547
1666
  };
1548
1667
  };
1549
- const generateDefaultMeasureEncoding = (measures, encoding)=>{
1550
- encoding.tooltip = chunk_QJLMYOTX_i(measures.map((item)=>item.id));
1551
- encoding.y = chunk_QJLMYOTX_i(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
1552
- };
1553
1668
  const generateDefaultDimensionEncoding = (dimensions, encoding)=>{
1554
- const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
1555
1669
  const uniqueDimIds = chunk_QJLMYOTX_i(dimensions.map((d)=>d.id));
1556
1670
  encoding.x = uniqueDimIds.slice(0, 1);
1557
- encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
1558
- encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
1671
+ encoding.color = uniqueDimIds.slice(1);
1559
1672
  encoding.tooltip = uniqueDimIds;
1673
+ encoding.detail = [];
1560
1674
  encoding.label = [];
1561
1675
  encoding.row = [];
1562
1676
  encoding.column = [];
1563
1677
  };
1564
- const generateMeasureEncoding = (measures, encoding)=>{
1565
- encoding.tooltip = measures.map((item)=>item.id);
1566
- encoding.y = chunk_QJLMYOTX_i(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
1567
- const color = chunk_QJLMYOTX_i(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
1568
- if (color.length > 0) encoding.color = color;
1569
- };
1570
1678
  const generateDimensionEncoding = (dimensions, encoding)=>{
1571
- encoding.x = chunk_QJLMYOTX_i(dimensions.filter((item)=>'xAxis' === item.encoding || !item.encoding).map((item)=>item.id));
1679
+ encoding.x = chunk_QJLMYOTX_i(dimensions.filter((item)=>'xAxis' === item.encoding).map((item)=>item.id));
1572
1680
  encoding.color = chunk_QJLMYOTX_i(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
1573
1681
  encoding.detail = chunk_QJLMYOTX_i(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
1574
1682
  if (0 === encoding.x.length) encoding.x = [
1575
1683
  dimensions[0].id
1576
1684
  ];
1577
- if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
1578
- if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
1685
+ if (0 === encoding.color.length) encoding.color = [
1686
+ MeasureName
1687
+ ];
1688
+ };
1689
+ const generateDefaultMeasureEncoding = (measures, encoding)=>{
1690
+ encoding.tooltip = chunk_QJLMYOTX_i(measures.map((item)=>item.id));
1691
+ encoding.y = chunk_QJLMYOTX_i(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
1692
+ };
1693
+ const generateMeasureEncoding = (measures, encoding)=>{
1694
+ encoding.tooltip = measures.map((item)=>item.id);
1695
+ encoding.y = chunk_QJLMYOTX_i(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
1696
+ const color = chunk_QJLMYOTX_i(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
1697
+ if (color.length > 0) encoding.color = color;
1698
+ };
1699
+ const isMeasureTreeWithChildren = (vseed)=>{
1700
+ const { measures } = vseed;
1701
+ if (!measures) return false;
1702
+ return measures.some((measure)=>'children' in measure);
1703
+ };
1704
+ const isMeasureTreeWithParentId = (vseed)=>{
1705
+ const { measures } = vseed;
1706
+ if (!measures) return false;
1707
+ return measures.some((measure)=>'parentId' in measure);
1579
1708
  };
1580
1709
  const measureDepth = (measures = [])=>{
1581
1710
  if (!measures) return 0;
@@ -1635,9 +1764,7 @@
1635
1764
  advancedVSeed.measures = generateMeasuresByParentId(vseed.measures);
1636
1765
  return advancedVSeed;
1637
1766
  }
1638
- const basicMeasures = getBasicMeasures(vseed);
1639
- if (isPivotChart(vseed)) advancedVSeed.measures = basicMeasuresToMeasureTree(basicMeasures);
1640
- else advancedVSeed.measures = basicMeasures;
1767
+ if (isPivotChart(vseed)) advancedVSeed.measures = basicMeasuresToMeasureTree(advancedVSeed.measures);
1641
1768
  return advancedVSeed;
1642
1769
  };
1643
1770
  const generateMeasuresByParentId = (measures)=>{
@@ -1668,45 +1795,6 @@
1668
1795
  }
1669
1796
  ];
1670
1797
  };
1671
- const autoDimensions_autoDimensions = (advancedVSeed, context)=>{
1672
- const result = {
1673
- ...advancedVSeed
1674
- };
1675
- const { vseed } = context;
1676
- const { dimensions, dataset } = vseed;
1677
- const measures = findAllMeasures(advancedVSeed.measures);
1678
- const MeaName = {
1679
- id: MeasureName,
1680
- alias: intl.i18n`指标名称`
1681
- };
1682
- if (!dataset) throw new Error('dataset is required');
1683
- if (0 === dataset.length) return result;
1684
- if (dimensions) {
1685
- result.dimensions = dimensions.map((dim)=>({
1686
- location: 'dimension',
1687
- ...dim
1688
- }));
1689
- if (result.dimensions.some((dim)=>dim.id === MeasureName)) return result;
1690
- result.dimensions.push(MeaName);
1691
- return result;
1692
- }
1693
- const top100dataset = dataset.slice(0, 100);
1694
- const sample = top100dataset.reduce((prev, cur)=>({
1695
- ...prev,
1696
- ...cur
1697
- }), {});
1698
- result.dimensions = Object.keys(sample).filter((key)=>top100dataset.some((item)=>'string' == typeof item[key]) && ![
1699
- '',
1700
- null,
1701
- void 0
1702
- ].includes(key) && !measures.some((measure)=>measure.id === key)).map((dim)=>({
1703
- id: dim,
1704
- alias: dim,
1705
- location: 'dimension'
1706
- }));
1707
- result.dimensions.push(MeaName);
1708
- return result;
1709
- };
1710
1798
  const pivotAdapter = (pipeline, pivotPipeline)=>(advancedVSeed, context)=>{
1711
1799
  const { vseed } = context;
1712
1800
  const usePivotChart = isPivotChart(vseed);
@@ -1727,78 +1815,6 @@
1727
1815
  });
1728
1816
  };
1729
1817
  }
1730
- function chunk_AIG3BDKO_i(...e) {
1731
- return chunk_WIMGWYZL_u(chunk_AIG3BDKO_n, e);
1732
- }
1733
- var chunk_AIG3BDKO_n = (e, r)=>e.length >= r;
1734
- function chunk_KI5X74E2_y(...t) {
1735
- return chunk_WIMGWYZL_u(chunk_KI5X74E2_f, t);
1736
- }
1737
- function chunk_KI5X74E2_f(t, e) {
1738
- if (!chunk_AIG3BDKO_i(e, 1)) return {
1739
- ...t
1740
- };
1741
- if (!chunk_AIG3BDKO_i(e, 2)) {
1742
- let { [e[0]]: r, ...m } = t;
1743
- return m;
1744
- }
1745
- let o = {
1746
- ...t
1747
- };
1748
- for (let r of e)delete o[r];
1749
- return o;
1750
- }
1751
- const foldMeasures = (dataset, measures, options)=>{
1752
- const { measureId, measureName, measureValue, colorMeasureId } = options || {};
1753
- const foldInfo = {
1754
- measureId,
1755
- measureName,
1756
- measureValue,
1757
- colorRange: [
1758
- 0,
1759
- 1
1760
- ],
1761
- measureRange: [
1762
- 0,
1763
- 1
1764
- ],
1765
- foldMap: {}
1766
- };
1767
- const result = new Array(dataset.length * measures.length);
1768
- let index = 0;
1769
- const ids = measures.map((d)=>d.id);
1770
- for(let i = 0; i < dataset.length; i++)for(let j = 0; j < measures.length; j++){
1771
- const datum = chunk_KI5X74E2_y({
1772
- ...dataset[i]
1773
- }, ids);
1774
- datum[ORIGINAL_DATA] = dataset[i];
1775
- const measure = measures[j];
1776
- const { id, alias } = measure;
1777
- datum[id] = dataset[i][id];
1778
- datum[measureId] = id;
1779
- datum[measureName] = alias || id;
1780
- datum[measureValue] = dataset[i][id];
1781
- if (colorMeasureId) {
1782
- const value = datum[ORIGINAL_DATA][colorMeasureId];
1783
- datum[ColorEncoding] = value;
1784
- datum[ColorIdEncoding] = colorMeasureId;
1785
- foldInfo.colorRange = [
1786
- Math.min(foldInfo.colorRange[0] || 1 / 0, Number(value)),
1787
- Math.max(foldInfo.colorRange[1] || -1 / 0, Number(value))
1788
- ];
1789
- }
1790
- foldInfo.measureRange = [
1791
- Math.min(foldInfo.measureRange[0] || 1 / 0, Number(datum[id])),
1792
- Math.max(foldInfo.measureRange[1] || -1 / 0, Number(datum[id]))
1793
- ];
1794
- foldInfo.foldMap[id] = alias;
1795
- result[index++] = datum;
1796
- }
1797
- return {
1798
- dataset: result,
1799
- foldInfo
1800
- };
1801
- };
1802
1818
  const unfoldDimensions = (dataset, dimensions, encoding, options)=>{
1803
1819
  const { foldMeasureId, separator, colorItemAsId } = options;
1804
1820
  const unfoldInfo = {
@@ -1893,7 +1909,9 @@
1893
1909
  const { dimensions, measures, encoding } = advancedVSeed;
1894
1910
  if (!measures || !dimensions || !dataset || !encoding) return result;
1895
1911
  if (0 === measures.length) throw new Error('measures can not be empty');
1912
+ const hasEncoding = (vseed.dimensions || []).some((item)=>item.encoding);
1896
1913
  const { dataset: newDatasets, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, T(dimensions, (item)=>item.id), T(findAllMeasures(measures), (item)=>item.id), encoding, {
1914
+ colorItemAsId: hasEncoding,
1897
1915
  colorMeasureId: getColorMeasureId(advancedVSeed)
1898
1916
  });
1899
1917
  return {
@@ -1924,6 +1942,7 @@
1924
1942
  if (measures) measures.forEach((measure)=>{
1925
1943
  if (measure.children && measure.children.length > 0) measureGroups.push(measure);
1926
1944
  });
1945
+ const hasEncoding = (vseed.dimensions || []).some((item)=>item.encoding);
1927
1946
  const datasets = [];
1928
1947
  const datasetReshapeInfo = [];
1929
1948
  measureGroups.forEach((measureGroup, index)=>{
@@ -1931,6 +1950,7 @@
1931
1950
  if (!measures) return;
1932
1951
  const groupId = measureGroup.id;
1933
1952
  const { dataset: newSubDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, T(dimensions, (item)=>item.id), T(measures, (item)=>item.id), encoding, {
1953
+ colorItemAsId: hasEncoding,
1934
1954
  foldMeasureValue: `${FoldMeasureValue}${groupId}`,
1935
1955
  colorMeasureId: getColorMeasureId(advancedVSeed)
1936
1956
  });
@@ -2148,9 +2168,11 @@
2148
2168
  };
2149
2169
  const lineAdvancedPipeline = [
2150
2170
  initAdvancedVSeed_initAdvancedVSeed,
2171
+ defaultMeasures_defaultMeasures,
2172
+ defaultDimensions,
2173
+ defaultMeasureName,
2151
2174
  encodingForLine,
2152
2175
  buildMeasures,
2153
- autoDimensions_autoDimensions,
2154
2176
  pivotAdapter([
2155
2177
  reshapeWithEncoding
2156
2178
  ], [
@@ -2497,129 +2519,18 @@
2497
2519
  domainLine: {
2498
2520
  visible: line?.visible,
2499
2521
  style: {
2500
- lineWidth: line?.lineWidth,
2501
- stroke: line?.lineColor
2502
- }
2503
- },
2504
- innerOffset: {
2505
- top: LINEAR_AXIS_INNER_OFFSET_TOP
2506
- }
2507
- };
2508
- result.axes = [
2509
- ...result.axes,
2510
- linearAxis
2511
- ];
2512
- return result;
2513
- };
2514
- const label_label = (spec, context)=>{
2515
- const result = {
2516
- ...spec
2517
- };
2518
- const { advancedVSeed } = context;
2519
- const { measures, datasetReshapeInfo, locale } = advancedVSeed;
2520
- const { chartType } = advancedVSeed;
2521
- const baseConfig = advancedVSeed.config[chartType];
2522
- if (!baseConfig || !baseConfig.label) return result;
2523
- const { measureId, measureValue } = datasetReshapeInfo[0].foldInfo;
2524
- const { label } = baseConfig;
2525
- const { enable } = label;
2526
- result.label = {
2527
- visible: enable,
2528
- formatMethod: (value, datum)=>{
2529
- const result = [];
2530
- const formatValue = (value)=>{
2531
- const id = datum[measureId];
2532
- const measure = findMeasureById(measures, id);
2533
- if (!measure) return value;
2534
- const { format = {}, autoFormat = true } = measure;
2535
- if (!chunk_VCYTMP4D_n(format)) {
2536
- const formatter = createFormatter(format);
2537
- return formatter(value);
2538
- }
2539
- if (autoFormat) return autoFormatter(value, locale);
2540
- return String(value);
2541
- };
2542
- result.push(formatValue(datum[measureValue]));
2543
- return result.join(' ');
2544
- }
2545
- };
2546
- return result;
2547
- };
2548
- const tooltip_tooltip = (spec, context)=>{
2549
- const result = {
2550
- ...spec
2551
- };
2552
- const { advancedVSeed } = context;
2553
- const { measures, datasetReshapeInfo, chartType, locale, dimensions } = advancedVSeed;
2554
- const baseConfig = advancedVSeed.config[chartType];
2555
- const { tooltip = {
2556
- enable: true
2557
- } } = baseConfig;
2558
- const { enable } = tooltip;
2559
- const { measureId, measureValue, measureName } = datasetReshapeInfo[0].foldInfo;
2560
- const { encodingColor: colorName } = datasetReshapeInfo[0].unfoldInfo;
2561
- result.tooltip = {
2562
- visible: enable,
2563
- mark: {
2564
- title: {
2565
- visible: true
2566
- },
2567
- content: [
2568
- ...dimensions.map((item)=>({
2569
- visible: true,
2570
- hasShape: true,
2571
- shapeType: 'rectRound',
2572
- key: (datum)=>{
2573
- if (item.alias || item.id) return item.alias || item.id;
2574
- return datum && datum[item.id];
2575
- },
2576
- value: (datum)=>datum && datum[item.id]
2577
- })),
2578
- {
2579
- visible: true,
2580
- hasShape: true,
2581
- key: (datum)=>datum && datum[measureName || colorName] || '',
2582
- value: (datum)=>{
2583
- if (!datum) return '';
2584
- const value = datum[measureValue];
2585
- const id = datum[measureId];
2586
- const measure = findMeasureById(measures, id);
2587
- if (!measure) return String(value);
2588
- const { format = {}, autoFormat = true } = measure;
2589
- if (!chunk_VCYTMP4D_n(format)) {
2590
- const formatter = createFormatter(format);
2591
- return formatter(value);
2592
- }
2593
- if (autoFormat) return autoFormatter(value, locale);
2594
- return String(value);
2595
- }
2596
- }
2597
- ]
2522
+ lineWidth: line?.lineWidth,
2523
+ stroke: line?.lineColor
2524
+ }
2598
2525
  },
2599
- dimension: {
2600
- content: [
2601
- {
2602
- visible: true,
2603
- key: (datum)=>datum && datum[colorName] || '',
2604
- value: (datum)=>{
2605
- if (!datum) return '';
2606
- const value = datum[measureValue];
2607
- const id = datum[measureId];
2608
- const measure = findMeasureById(measures, id);
2609
- if (!measure) return String(value);
2610
- const { format = {}, autoFormat = true } = measure;
2611
- if (!chunk_VCYTMP4D_n(format)) {
2612
- const formatter = createFormatter(format);
2613
- return formatter(value);
2614
- }
2615
- if (autoFormat) return autoFormatter(value, locale);
2616
- return String(value);
2617
- },
2618
- shapeType: 'rectRound'
2619
- }
2620
- ]
2526
+ innerOffset: {
2527
+ top: LINEAR_AXIS_INNER_OFFSET_TOP
2621
2528
  }
2622
2529
  };
2530
+ result.axes = [
2531
+ ...result.axes,
2532
+ linearAxis
2533
+ ];
2623
2534
  return result;
2624
2535
  };
2625
2536
  const verticalCrosshairLine = (spec, context)=>{
@@ -3146,6 +3057,117 @@
3146
3057
  }
3147
3058
  };
3148
3059
  };
3060
+ const label_label = (spec, context)=>{
3061
+ const result = {
3062
+ ...spec
3063
+ };
3064
+ const { advancedVSeed } = context;
3065
+ const { measures, datasetReshapeInfo, locale } = advancedVSeed;
3066
+ const { chartType } = advancedVSeed;
3067
+ const baseConfig = advancedVSeed.config[chartType];
3068
+ if (!baseConfig || !baseConfig.label) return result;
3069
+ const { measureId, measureValue } = datasetReshapeInfo[0].foldInfo;
3070
+ const { label } = baseConfig;
3071
+ const { enable } = label;
3072
+ result.label = {
3073
+ visible: enable,
3074
+ formatMethod: (value, datum)=>{
3075
+ const result = [];
3076
+ const formatValue = (value)=>{
3077
+ const id = datum[measureId];
3078
+ const measure = findMeasureById(measures, id);
3079
+ if (!measure) return value;
3080
+ const { format = {}, autoFormat = true } = measure;
3081
+ if (!chunk_VCYTMP4D_n(format)) {
3082
+ const formatter = createFormatter(format);
3083
+ return formatter(value);
3084
+ }
3085
+ if (autoFormat) return autoFormatter(value, locale);
3086
+ return String(value);
3087
+ };
3088
+ result.push(formatValue(datum[measureValue]));
3089
+ return result.join(' ');
3090
+ }
3091
+ };
3092
+ return result;
3093
+ };
3094
+ const tooltip_tooltip = (spec, context)=>{
3095
+ const result = {
3096
+ ...spec
3097
+ };
3098
+ const { advancedVSeed } = context;
3099
+ const { measures, datasetReshapeInfo, chartType, locale, dimensions } = advancedVSeed;
3100
+ const baseConfig = advancedVSeed.config[chartType];
3101
+ const { tooltip = {
3102
+ enable: true
3103
+ } } = baseConfig;
3104
+ const { enable } = tooltip;
3105
+ const { measureId, measureValue, measureName } = datasetReshapeInfo[0].foldInfo;
3106
+ const { encodingColor: colorName } = datasetReshapeInfo[0].unfoldInfo;
3107
+ result.tooltip = {
3108
+ visible: enable,
3109
+ mark: {
3110
+ title: {
3111
+ visible: true
3112
+ },
3113
+ content: [
3114
+ ...dimensions.map((item)=>({
3115
+ visible: true,
3116
+ hasShape: true,
3117
+ shapeType: 'rectRound',
3118
+ key: (datum)=>{
3119
+ if (item.alias || item.id) return item.alias || item.id;
3120
+ return datum && datum[item.id];
3121
+ },
3122
+ value: (datum)=>datum && datum[item.id]
3123
+ })),
3124
+ {
3125
+ visible: true,
3126
+ hasShape: true,
3127
+ key: (datum)=>datum && datum[measureName || colorName] || '',
3128
+ value: (datum)=>{
3129
+ if (!datum) return '';
3130
+ const value = datum[measureValue];
3131
+ const id = datum[measureId];
3132
+ const measure = findMeasureById(measures, id);
3133
+ if (!measure) return String(value);
3134
+ const { format = {}, autoFormat = true } = measure;
3135
+ if (!chunk_VCYTMP4D_n(format)) {
3136
+ const formatter = createFormatter(format);
3137
+ return formatter(value);
3138
+ }
3139
+ if (autoFormat) return autoFormatter(value, locale);
3140
+ return String(value);
3141
+ }
3142
+ }
3143
+ ]
3144
+ },
3145
+ dimension: {
3146
+ content: [
3147
+ {
3148
+ visible: true,
3149
+ key: (datum)=>datum && datum[colorName] || '',
3150
+ value: (datum)=>{
3151
+ if (!datum) return '';
3152
+ const value = datum[measureValue];
3153
+ const id = datum[measureId];
3154
+ const measure = findMeasureById(measures, id);
3155
+ if (!measure) return String(value);
3156
+ const { format = {}, autoFormat = true } = measure;
3157
+ if (!chunk_VCYTMP4D_n(format)) {
3158
+ const formatter = createFormatter(format);
3159
+ return formatter(value);
3160
+ }
3161
+ if (autoFormat) return autoFormatter(value, locale);
3162
+ return String(value);
3163
+ },
3164
+ shapeType: 'rectRound'
3165
+ }
3166
+ ]
3167
+ }
3168
+ };
3169
+ return result;
3170
+ };
3149
3171
  const isSubset = (sub, obj)=>Object.entries(sub).every(([key, value])=>{
3150
3172
  if ('string' == typeof value) return obj[key] === value;
3151
3173
  if ('number' == typeof value) return obj[key] === value;
@@ -3765,7 +3787,7 @@
3765
3787
  const { advancedVSeed } = context;
3766
3788
  const dimensions = advancedVSeed.dimensions;
3767
3789
  if (!dimensions) return result;
3768
- const rowDimensions = dimensions.filter((dim)=>'rowDimension' === dim.location);
3790
+ const rowDimensions = dimensions.filter((dim)=>'rowDimension' === dim.location || 'row' === dim.encoding);
3769
3791
  const rows = rowDimensions.map((dim)=>({
3770
3792
  dimensionKey: dim.id,
3771
3793
  title: dim.alias || dim.id
@@ -3782,17 +3804,132 @@
3782
3804
  const { advancedVSeed } = context;
3783
3805
  const dimensions = advancedVSeed.dimensions;
3784
3806
  if (!dimensions) return result;
3785
- const columnDimensions = dimensions.filter((dim)=>'columnDimension' === dim.location);
3807
+ const columnDimensions = dimensions.filter((dim)=>'columnDimension' === dim.location || 'column' === dim.encoding);
3786
3808
  const columns = columnDimensions.map((dim)=>({
3787
3809
  dimensionKey: dim.id,
3788
3810
  title: dim.alias || dim.id
3789
3811
  }));
3790
3812
  return {
3791
3813
  ...result,
3792
- columns: columns
3814
+ columns: columns
3815
+ };
3816
+ };
3817
+ const pivotDiscreteLegend = (spec, context)=>{
3818
+ const result = {
3819
+ ...spec
3820
+ };
3821
+ const { advancedVSeed } = context;
3822
+ const { chartType } = advancedVSeed;
3823
+ const baseConfig = advancedVSeed.config[chartType];
3824
+ if (!baseConfig || !baseConfig.legend) return result;
3825
+ const { datasetReshapeInfo } = advancedVSeed;
3826
+ const colorItems = chunk_QJLMYOTX_i(datasetReshapeInfo.flatMap((d)=>d.unfoldInfo.colorItems));
3827
+ const colorIdMap = datasetReshapeInfo.reduce((prev, cur)=>({
3828
+ ...prev,
3829
+ ...cur.unfoldInfo.colorIdMap
3830
+ }), {});
3831
+ const { legend, color } = baseConfig;
3832
+ const { colorScheme, colorMapping } = color;
3833
+ const colorSpecified = createSpecifiedForColorMapping(colorMapping, colorIdMap, colorItems);
3834
+ const { enable, position = 'bottom', labelFontColor, labelFontSize = 12, labelFontWeight = 400, maxSize = 1, border, shapeType = 'rectRound' } = legend || {};
3835
+ const orient = [
3836
+ 'bottom',
3837
+ 'bottomLeft',
3838
+ 'bottomRight',
3839
+ 'bl',
3840
+ 'br'
3841
+ ].includes(position) ? 'bottom' : [
3842
+ 'top',
3843
+ 'topLeft',
3844
+ 'topRight',
3845
+ 'tl',
3846
+ 'tr'
3847
+ ].includes(position) ? 'top' : [
3848
+ 'left',
3849
+ 'leftTop',
3850
+ 'leftBottom',
3851
+ 'lt',
3852
+ 'lb'
3853
+ ].includes(position) ? 'left' : 'right';
3854
+ const legendPosition = [
3855
+ 'topLeft',
3856
+ 'bottomLeft',
3857
+ 'leftTop',
3858
+ 'rightTop',
3859
+ 'lt',
3860
+ 'rt',
3861
+ 'tl',
3862
+ 'bl'
3863
+ ].includes(position) ? 'start' : [
3864
+ 'topRight',
3865
+ 'bottomRight',
3866
+ 'leftBottom',
3867
+ 'rightBottom',
3868
+ 'lb',
3869
+ 'rb',
3870
+ 'rt',
3871
+ 'br'
3872
+ ].includes(position) ? 'end' : 'middle';
3873
+ const legends = {
3874
+ visible: enable,
3875
+ type: 'discrete',
3876
+ orient,
3877
+ position: legendPosition,
3878
+ maxCol: Math.max(1, maxSize),
3879
+ maxRow: Math.max(1, maxSize),
3880
+ data: colorItems.map((d, index)=>{
3881
+ const color = colorSpecified?.[d] ?? colorScheme?.[index % colorScheme.length];
3882
+ return {
3883
+ label: d,
3884
+ shape: {
3885
+ outerBorder: border ? {
3886
+ stroke: color,
3887
+ distance: 3,
3888
+ lineWidth: 1
3889
+ } : void 0,
3890
+ fill: color
3891
+ }
3892
+ };
3893
+ }),
3894
+ item: {
3895
+ focus: true,
3896
+ maxWidth: '30%',
3897
+ focusIconStyle: {
3898
+ size: labelFontSize + 2,
3899
+ fill: labelFontColor,
3900
+ fontWeight: labelFontWeight
3901
+ },
3902
+ shape: {
3903
+ space: border ? 6 : 4,
3904
+ style: {
3905
+ symbolType: shapeType,
3906
+ size: border ? 8 : 10
3907
+ }
3908
+ },
3909
+ label: {
3910
+ formatMethod: (value)=>colorIdMap[value] ?? value,
3911
+ style: {
3912
+ fontSize: labelFontSize,
3913
+ fill: labelFontColor,
3914
+ fontWeight: labelFontWeight
3915
+ }
3916
+ },
3917
+ background: {
3918
+ state: {
3919
+ selectedHover: {
3920
+ fill: labelFontColor,
3921
+ fillOpacity: 0.05
3922
+ }
3923
+ }
3924
+ }
3925
+ }
3926
+ };
3927
+ return {
3928
+ ...result,
3929
+ legends
3793
3930
  };
3794
3931
  };
3795
- const pivotDiscreteLegend = (spec, context)=>{
3932
+ const pivotColorLegend = (spec, context)=>{
3796
3933
  const result = {
3797
3934
  ...spec
3798
3935
  };
@@ -3801,15 +3938,11 @@
3801
3938
  const baseConfig = advancedVSeed.config[chartType];
3802
3939
  if (!baseConfig || !baseConfig.legend) return result;
3803
3940
  const { datasetReshapeInfo } = advancedVSeed;
3804
- const colorItems = chunk_QJLMYOTX_i(datasetReshapeInfo.flatMap((d)=>d.unfoldInfo.colorItems));
3805
- const colorIdMap = datasetReshapeInfo.reduce((prev, cur)=>({
3806
- ...prev,
3807
- ...cur.unfoldInfo.colorIdMap
3808
- }), {});
3941
+ const max = Math.max(...datasetReshapeInfo.map((d)=>d.foldInfo.colorRange[1]));
3942
+ const min = Math.min(...datasetReshapeInfo.map((d)=>d.foldInfo.colorRange[0]));
3809
3943
  const { legend, color } = baseConfig;
3810
- const { colorScheme, colorMapping } = color;
3811
- const colorSpecified = createSpecifiedForColorMapping(colorMapping, colorIdMap, colorItems);
3812
- const { enable, position = 'bottom', labelFontColor, labelFontSize = 12, labelFontWeight = 400, maxSize = 1, border, shapeType = 'rectRound' } = legend || {};
3944
+ const { colorScheme, linearColorScheme } = color;
3945
+ const { enable, position = 'bottom', labelFontColor, labelFontSize = 12, labelFontWeight = 400 } = legend || {};
3813
3946
  const orient = [
3814
3947
  'bottom',
3815
3948
  'bottomLeft',
@@ -3850,55 +3983,31 @@
3850
3983
  ].includes(position) ? 'end' : 'middle';
3851
3984
  const legends = {
3852
3985
  visible: enable,
3853
- type: 'discrete',
3986
+ type: 'color',
3854
3987
  orient,
3855
3988
  position: legendPosition,
3856
- maxCol: Math.max(1, maxSize),
3857
- maxRow: Math.max(1, maxSize),
3858
- data: colorItems.map((d, index)=>{
3859
- const color = colorSpecified?.[d] ?? colorScheme?.[index % colorScheme.length];
3860
- return {
3861
- label: d,
3862
- shape: {
3863
- outerBorder: border ? {
3864
- stroke: color,
3865
- distance: 3,
3866
- lineWidth: 1
3867
- } : void 0,
3868
- fill: color
3869
- }
3870
- };
3871
- }),
3872
- item: {
3873
- focus: true,
3874
- maxWidth: '30%',
3875
- focusIconStyle: {
3876
- size: labelFontSize + 2,
3989
+ colors: linearColorScheme || colorScheme || [],
3990
+ value: [
3991
+ min,
3992
+ max
3993
+ ],
3994
+ min: min,
3995
+ max: max,
3996
+ maxWidth: '30%',
3997
+ startText: {
3998
+ visible: true,
3999
+ style: {
3877
4000
  fill: labelFontColor,
4001
+ fontSize: labelFontSize,
4002
+ fontWeight: labelFontWeight
4003
+ }
4004
+ },
4005
+ endText: {
4006
+ visible: true,
4007
+ style: {
4008
+ fill: labelFontColor,
4009
+ fontSize: labelFontSize,
3878
4010
  fontWeight: labelFontWeight
3879
- },
3880
- shape: {
3881
- space: border ? 6 : 4,
3882
- style: {
3883
- symbolType: shapeType,
3884
- size: border ? 8 : 10
3885
- }
3886
- },
3887
- label: {
3888
- formatMethod: (value)=>colorIdMap[value] ?? value,
3889
- style: {
3890
- fontSize: labelFontSize,
3891
- fill: labelFontColor,
3892
- fontWeight: labelFontWeight
3893
- }
3894
- },
3895
- background: {
3896
- state: {
3897
- selectedHover: {
3898
- fill: labelFontColor,
3899
- fillOpacity: 0.05
3900
- }
3901
- }
3902
4011
  }
3903
4012
  }
3904
4013
  };
@@ -3921,13 +4030,13 @@
3921
4030
  progressive,
3922
4031
  xBand,
3923
4032
  yLinear,
3924
- label_label,
3925
- tooltip_tooltip,
3926
4033
  verticalCrosshairLine,
3927
4034
  colorAdapter(discreteLegend, colorLegend),
3928
4035
  colorPointStyleFill(pointStyle_pointStyle),
3929
4036
  pointStateDimensionHover,
3930
4037
  colorLineStyleFill(lineStyle_lineStyle),
4038
+ label_label,
4039
+ tooltip_tooltip,
3931
4040
  annotationPoint_annotationPoint,
3932
4041
  annotationVerticalLine_annotationVerticalLine,
3933
4042
  annotationHorizontalLine_annotationHorizontalLine,
@@ -3940,18 +4049,18 @@
3940
4049
  datasetPivot,
3941
4050
  pivotIndicators_pivotIndicators([
3942
4051
  initLine,
3943
- color_color,
4052
+ colorAdapter(color_color, linearColor),
3944
4053
  background_backgroundColor,
3945
4054
  datasetXY,
3946
4055
  progressive,
3947
4056
  xBand,
3948
4057
  yLinear,
3949
- label_label,
3950
- tooltip_tooltip,
3951
4058
  verticalCrosshairLine,
3952
- pointStyle_pointStyle,
4059
+ colorPointStyleFill(pointStyle_pointStyle),
3953
4060
  pointStateDimensionHover,
3954
- lineStyle_lineStyle,
4061
+ colorLineStyleFill(lineStyle_lineStyle),
4062
+ label_label,
4063
+ tooltip_tooltip,
3955
4064
  annotationPoint_annotationPoint,
3956
4065
  annotationVerticalLine_annotationVerticalLine,
3957
4066
  annotationHorizontalLine_annotationHorizontalLine,
@@ -3959,7 +4068,7 @@
3959
4068
  ]),
3960
4069
  pivotRowDimensions,
3961
4070
  pivotColumnDimensions,
3962
- pivotDiscreteLegend
4071
+ colorAdapter(pivotDiscreteLegend, pivotColorLegend)
3963
4072
  ];
3964
4073
  const lineSpecPipeline = [
3965
4074
  pivotAdapter_pivotAdapter(line_line, pivotLine)
@@ -3968,11 +4077,9 @@
3968
4077
  Builder._advancedPipelineMap.line = lineAdvancedPipeline;
3969
4078
  Builder._specPipelineMap.line = lineSpecPipeline;
3970
4079
  };
3971
- const encodingForColumn = (advancedVSeed, context)=>{
3972
- const { vseed } = context;
3973
- const { measures: vseedMeasures = [] } = vseed;
3974
- const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
3975
- const dimensions = getBasicDimensions(vseed);
4080
+ const encodingForColumn = (advancedVSeed)=>{
4081
+ const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
4082
+ const measures = findAllMeasures(vseedMeasures);
3976
4083
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
3977
4084
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
3978
4085
  const encoding = {};
@@ -3985,10 +4092,6 @@
3985
4092
  encoding
3986
4093
  };
3987
4094
  };
3988
- const column_generateDefaultMeasureEncoding = (measures, encoding)=>{
3989
- encoding.tooltip = chunk_QJLMYOTX_i(measures.map((item)=>item.id));
3990
- encoding.y = chunk_QJLMYOTX_i(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
3991
- };
3992
4095
  const column_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
3993
4096
  const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
3994
4097
  const uniqueDimIds = chunk_QJLMYOTX_i(dimensions.map((d)=>d.id));
@@ -4000,28 +4103,35 @@
4000
4103
  encoding.row = [];
4001
4104
  encoding.column = [];
4002
4105
  };
4003
- const column_generateMeasureEncoding = (measures, encoding)=>{
4004
- encoding.tooltip = measures.map((item)=>item.id);
4005
- encoding.y = chunk_QJLMYOTX_i(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
4006
- const color = chunk_QJLMYOTX_i(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
4007
- if (color.length > 0) encoding.color = color;
4008
- return encoding;
4009
- };
4010
4106
  const column_generateDimensionEncoding = (dimensions, encoding)=>{
4011
- encoding.x = chunk_QJLMYOTX_i(dimensions.filter((item)=>'xAxis' === item.encoding || !item.encoding).map((item)=>item.id));
4107
+ encoding.x = chunk_QJLMYOTX_i(dimensions.filter((item)=>'xAxis' === item.encoding).map((item)=>item.id));
4012
4108
  encoding.color = chunk_QJLMYOTX_i(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
4013
4109
  encoding.detail = chunk_QJLMYOTX_i(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
4014
4110
  if (0 === encoding.x.length) encoding.x = [
4015
4111
  dimensions[0].id
4016
4112
  ];
4017
- if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
4018
- if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
4113
+ if (0 === encoding.color.length) encoding.color = [
4114
+ MeasureName
4115
+ ];
4116
+ };
4117
+ const column_generateDefaultMeasureEncoding = (measures, encoding)=>{
4118
+ encoding.tooltip = chunk_QJLMYOTX_i(measures.map((item)=>item.id));
4119
+ encoding.y = chunk_QJLMYOTX_i(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
4120
+ };
4121
+ const column_generateMeasureEncoding = (measures, encoding)=>{
4122
+ encoding.tooltip = measures.map((item)=>item.id);
4123
+ encoding.y = chunk_QJLMYOTX_i(measures.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
4124
+ const color = chunk_QJLMYOTX_i(measures.filter((item)=>'color' === item.encoding).map((item)=>item.id));
4125
+ if (color.length > 0) encoding.color = color;
4126
+ return encoding;
4019
4127
  };
4020
4128
  const columnAdvancedPipeline = [
4021
4129
  initAdvancedVSeed_initAdvancedVSeed,
4130
+ defaultMeasures_defaultMeasures,
4131
+ defaultDimensions,
4132
+ defaultMeasureName,
4022
4133
  encodingForColumn,
4023
4134
  buildMeasures,
4024
- autoDimensions_autoDimensions,
4025
4135
  pivotAdapter([
4026
4136
  reshapeWithEncoding
4027
4137
  ], [
@@ -4324,93 +4434,6 @@
4324
4434
  markArea: markArea
4325
4435
  };
4326
4436
  };
4327
- const pivotColorLegend = (spec, context)=>{
4328
- const result = {
4329
- ...spec
4330
- };
4331
- const { advancedVSeed } = context;
4332
- const { chartType } = advancedVSeed;
4333
- const baseConfig = advancedVSeed.config[chartType];
4334
- if (!baseConfig || !baseConfig.legend) return result;
4335
- const { datasetReshapeInfo } = advancedVSeed;
4336
- const max = Math.max(...datasetReshapeInfo.map((d)=>d.foldInfo.colorRange[1]));
4337
- const min = Math.min(...datasetReshapeInfo.map((d)=>d.foldInfo.colorRange[0]));
4338
- const { legend, color } = baseConfig;
4339
- const { colorScheme, linearColorScheme } = color;
4340
- const { enable, position = 'bottom', labelFontColor, labelFontSize = 12, labelFontWeight = 400 } = legend || {};
4341
- const orient = [
4342
- 'bottom',
4343
- 'bottomLeft',
4344
- 'bottomRight',
4345
- 'bl',
4346
- 'br'
4347
- ].includes(position) ? 'bottom' : [
4348
- 'top',
4349
- 'topLeft',
4350
- 'topRight',
4351
- 'tl',
4352
- 'tr'
4353
- ].includes(position) ? 'top' : [
4354
- 'left',
4355
- 'leftTop',
4356
- 'leftBottom',
4357
- 'lt',
4358
- 'lb'
4359
- ].includes(position) ? 'left' : 'right';
4360
- const legendPosition = [
4361
- 'topLeft',
4362
- 'bottomLeft',
4363
- 'leftTop',
4364
- 'rightTop',
4365
- 'lt',
4366
- 'rt',
4367
- 'tl',
4368
- 'bl'
4369
- ].includes(position) ? 'start' : [
4370
- 'topRight',
4371
- 'bottomRight',
4372
- 'leftBottom',
4373
- 'rightBottom',
4374
- 'lb',
4375
- 'rb',
4376
- 'rt',
4377
- 'br'
4378
- ].includes(position) ? 'end' : 'middle';
4379
- const legends = {
4380
- visible: enable,
4381
- type: 'color',
4382
- orient,
4383
- position: legendPosition,
4384
- colors: linearColorScheme || colorScheme || [],
4385
- value: [
4386
- min,
4387
- max
4388
- ],
4389
- min: min,
4390
- max: max,
4391
- maxWidth: '30%',
4392
- startText: {
4393
- visible: true,
4394
- style: {
4395
- fill: labelFontColor,
4396
- fontSize: labelFontSize,
4397
- fontWeight: labelFontWeight
4398
- }
4399
- },
4400
- endText: {
4401
- visible: true,
4402
- style: {
4403
- fill: labelFontColor,
4404
- fontSize: labelFontSize,
4405
- fontWeight: labelFontWeight
4406
- }
4407
- }
4408
- };
4409
- return {
4410
- ...result,
4411
- legends
4412
- };
4413
- };
4414
4437
  const column = [
4415
4438
  initColumn,
4416
4439
  stackCornerRadius_stackCornerRadius,
@@ -4468,9 +4491,11 @@
4468
4491
  };
4469
4492
  const columnParallelAdvancedPipeline = [
4470
4493
  initAdvancedVSeed_initAdvancedVSeed,
4494
+ defaultMeasures_defaultMeasures,
4495
+ defaultDimensions,
4496
+ defaultMeasureName,
4471
4497
  encodingForColumn,
4472
4498
  buildMeasures,
4473
- autoDimensions_autoDimensions,
4474
4499
  pivotAdapter([
4475
4500
  reshapeWithEncoding
4476
4501
  ], [
@@ -4565,9 +4590,11 @@
4565
4590
  };
4566
4591
  const columnPercentAdvancedPipeline = [
4567
4592
  initAdvancedVSeed_initAdvancedVSeed,
4593
+ defaultMeasures_defaultMeasures,
4594
+ defaultDimensions,
4595
+ defaultMeasureName,
4568
4596
  encodingForColumn,
4569
4597
  buildMeasures,
4570
- autoDimensions_autoDimensions,
4571
4598
  pivotAdapter([
4572
4599
  reshapeWithEncoding
4573
4600
  ], [
@@ -4644,11 +4671,9 @@
4644
4671
  Builder._advancedPipelineMap.columnPercent = columnPercentAdvancedPipeline;
4645
4672
  Builder._specPipelineMap.columnPercent = columnPercentSpecPipeline;
4646
4673
  };
4647
- const encodingForBar = (advancedVSeed, context)=>{
4648
- const { vseed } = context;
4649
- const { measures: vseedMeasures = [] } = vseed;
4650
- const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
4651
- const dimensions = getBasicDimensions(vseed);
4674
+ const encodingForBar = (advancedVSeed)=>{
4675
+ const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
4676
+ const measures = findAllMeasures(vseedMeasures);
4652
4677
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
4653
4678
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
4654
4679
  const encoding = {};
@@ -4684,13 +4709,15 @@
4684
4709
  return encoding;
4685
4710
  };
4686
4711
  const bar_generateDimensionEncoding = (dimensions, encoding)=>{
4687
- encoding.y = chunk_QJLMYOTX_i(dimensions.filter((item)=>'yAxis' === item.encoding || !item.encoding).map((item)=>item.id));
4712
+ encoding.y = chunk_QJLMYOTX_i(dimensions.filter((item)=>'yAxis' === item.encoding).map((item)=>item.id));
4688
4713
  encoding.color = chunk_QJLMYOTX_i(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
4689
4714
  encoding.detail = chunk_QJLMYOTX_i(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
4690
4715
  if (0 === encoding.y.length) encoding.y = [
4691
4716
  dimensions[0].id
4692
4717
  ];
4693
- if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.y?.includes(item.id)).map((item)=>item.id);
4718
+ if (0 === encoding.color.length) encoding.color = [
4719
+ MeasureName
4720
+ ];
4694
4721
  if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.y?.includes(item.id)).map((item)=>item.id);
4695
4722
  };
4696
4723
  const sortYBandAxis = (advancedVSeed, context)=>{
@@ -4711,9 +4738,11 @@
4711
4738
  };
4712
4739
  const barAdvancedPipeline = [
4713
4740
  initAdvancedVSeed_initAdvancedVSeed,
4741
+ defaultMeasures_defaultMeasures,
4742
+ defaultDimensions,
4743
+ defaultMeasureName,
4714
4744
  encodingForBar,
4715
4745
  buildMeasures,
4716
- autoDimensions_autoDimensions,
4717
4746
  pivotAdapter([
4718
4747
  reshapeWithEncoding
4719
4748
  ], [
@@ -5064,9 +5093,11 @@
5064
5093
  };
5065
5094
  const barParallelAdvancedPipeline = [
5066
5095
  initAdvancedVSeed_initAdvancedVSeed,
5067
- buildMeasures,
5068
- autoDimensions_autoDimensions,
5096
+ defaultMeasures_defaultMeasures,
5097
+ defaultDimensions,
5098
+ defaultMeasureName,
5069
5099
  encodingForBar,
5100
+ buildMeasures,
5070
5101
  pivotAdapter([
5071
5102
  reshapeWithEncoding
5072
5103
  ], [
@@ -5160,9 +5191,11 @@
5160
5191
  };
5161
5192
  const barPercentAdvancedPipeline = [
5162
5193
  initAdvancedVSeed_initAdvancedVSeed,
5163
- buildMeasures,
5164
- autoDimensions_autoDimensions,
5194
+ defaultMeasures_defaultMeasures,
5195
+ defaultDimensions,
5196
+ defaultMeasureName,
5165
5197
  encodingForBar,
5198
+ buildMeasures,
5166
5199
  pivotAdapter([
5167
5200
  reshapeWithEncoding
5168
5201
  ], [
@@ -5231,9 +5264,11 @@
5231
5264
  };
5232
5265
  const areaAdvancedPipeline = [
5233
5266
  initAdvancedVSeed_initAdvancedVSeed,
5234
- encodingForColumn,
5267
+ defaultMeasures_defaultMeasures,
5268
+ defaultDimensions,
5269
+ defaultMeasureName,
5270
+ encodingForLine,
5235
5271
  buildMeasures,
5236
- autoDimensions_autoDimensions,
5237
5272
  pivotAdapter([
5238
5273
  reshapeWithEncoding
5239
5274
  ], [
@@ -5389,9 +5424,11 @@
5389
5424
  };
5390
5425
  const areaPercentAdvancedPipeline = [
5391
5426
  initAdvancedVSeed_initAdvancedVSeed,
5392
- encodingForColumn,
5427
+ defaultMeasures_defaultMeasures,
5428
+ defaultDimensions,
5429
+ defaultMeasureName,
5430
+ encodingForLine,
5393
5431
  buildMeasures,
5394
- autoDimensions_autoDimensions,
5395
5432
  pivotAdapter([
5396
5433
  reshapeWithEncoding
5397
5434
  ], [
@@ -5465,11 +5502,9 @@
5465
5502
  Builder._advancedPipelineMap.areaPercent = areaPercentAdvancedPipeline;
5466
5503
  Builder._specPipelineMap.areaPercent = areaPercentSpecPipeline;
5467
5504
  };
5468
- const encodingForScatter = (advancedVSeed, context)=>{
5469
- const { vseed } = context;
5470
- const { measures: vseedMeasures = [] } = vseed;
5471
- const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
5472
- const dimensions = getBasicDimensions(vseed);
5505
+ const encodingForScatter = (advancedVSeed)=>{
5506
+ const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
5507
+ const measures = findAllMeasures(vseedMeasures);
5473
5508
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
5474
5509
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
5475
5510
  const encoding = {};
@@ -5505,7 +5540,9 @@
5505
5540
  const scatter_generateDimensionEncoding = (dimensions, encoding)=>{
5506
5541
  encoding.color = chunk_QJLMYOTX_i(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
5507
5542
  encoding.detail = chunk_QJLMYOTX_i(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
5508
- if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
5543
+ if (0 === encoding.color.length) encoding.color = [
5544
+ MeasureName
5545
+ ];
5509
5546
  if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
5510
5547
  };
5511
5548
  const buildMeasuresForScatter = (advancedVSeed, context)=>{
@@ -5518,8 +5555,7 @@
5518
5555
  advancedVSeed.measures = buildMeasuresForScatter_generateMeasuresByParentId(vseed.measures);
5519
5556
  return advancedVSeed;
5520
5557
  }
5521
- const basicMeasures = getBasicMeasures(vseed);
5522
- const scatterMeasures = vseed.scatterMeasures ? vseed.scatterMeasures : basicMeasuresToScatterMeasures(basicMeasures);
5558
+ const scatterMeasures = vseed.scatterMeasures ? vseed.scatterMeasures : basicMeasuresToScatterMeasures(advancedVSeed.measures || []);
5523
5559
  advancedVSeed.measures = scatterMeasuresToMeasureTree(scatterMeasures);
5524
5560
  return advancedVSeed;
5525
5561
  };
@@ -5738,9 +5774,11 @@
5738
5774
  };
5739
5775
  const scatterAdvancedPipeline = [
5740
5776
  initAdvancedVSeed_initAdvancedVSeed,
5777
+ defaultMeasures_defaultMeasures,
5778
+ defaultDimensions,
5779
+ defaultMeasureName,
5741
5780
  encodingForScatter,
5742
5781
  buildMeasuresForScatter,
5743
- autoDimensions_autoDimensions,
5744
5782
  pivotAdapter([
5745
5783
  reshapeWithScatterEncoding
5746
5784
  ], [
@@ -5876,7 +5914,7 @@
5876
5914
  ]),
5877
5915
  pivotRowDimensions,
5878
5916
  pivotColumnDimensions,
5879
- pivotDiscreteLegend
5917
+ colorAdapter(pivotDiscreteLegend, pivotColorLegend)
5880
5918
  ];
5881
5919
  const scatterSpecPipeline = [
5882
5920
  pivotAdapter_pivotAdapter(scatter, pivotScatter)
@@ -5885,11 +5923,9 @@
5885
5923
  Builder._advancedPipelineMap.scatter = scatterAdvancedPipeline;
5886
5924
  Builder._specPipelineMap.scatter = scatterSpecPipeline;
5887
5925
  };
5888
- const encodingForDualAxis = (advancedVSeed, context)=>{
5889
- const { vseed } = context;
5890
- const { measures: vseedMeasures = [] } = vseed;
5891
- const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
5892
- const dimensions = getBasicDimensions(vseed);
5926
+ const encodingForDualAxis = (advancedVSeed)=>{
5927
+ const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
5928
+ const measures = findAllMeasures(vseedMeasures);
5893
5929
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
5894
5930
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
5895
5931
  const encoding = {};
@@ -5925,13 +5961,15 @@
5925
5961
  return encoding;
5926
5962
  };
5927
5963
  const dualAxis_generateDimensionEncoding = (dimensions, encoding)=>{
5928
- encoding.x = chunk_QJLMYOTX_i(dimensions.filter((item)=>'xAxis' === item.encoding || !item.encoding).map((item)=>item.id));
5964
+ encoding.x = chunk_QJLMYOTX_i(dimensions.filter((item)=>'xAxis' === item.encoding).map((item)=>item.id));
5929
5965
  encoding.color = chunk_QJLMYOTX_i(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
5930
5966
  encoding.detail = chunk_QJLMYOTX_i(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
5931
5967
  if (0 === encoding.x.length) encoding.x = [
5932
5968
  dimensions[0].id
5933
5969
  ];
5934
- if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
5970
+ if (0 === encoding.color.length) encoding.color = [
5971
+ MeasureName
5972
+ ];
5935
5973
  if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
5936
5974
  };
5937
5975
  const buildMeasuresForDualAxis = (advancedVSeed, context)=>{
@@ -5944,8 +5982,7 @@
5944
5982
  advancedVSeed.measures = buildMeasuresForDualAxis_generateMeasuresByParentId(vseed.measures);
5945
5983
  return advancedVSeed;
5946
5984
  }
5947
- const basicMeasures = getBasicMeasures(vseed);
5948
- const dualMeasures = vseed.dualMeasures ? vseed.dualMeasures : basicMeasuresToDualMeasures(basicMeasures);
5985
+ const dualMeasures = vseed.dualMeasures ? vseed.dualMeasures : basicMeasuresToDualMeasures(advancedVSeed.measures || []);
5949
5986
  advancedVSeed.measures = dualMeasuresToMeasureTree(dualMeasures);
5950
5987
  return advancedVSeed;
5951
5988
  };
@@ -6049,8 +6086,10 @@
6049
6086
  const datasets = [];
6050
6087
  const primaryMeasures = measures[0];
6051
6088
  const secondaryMeasures = measures[1] || [];
6089
+ const hasEncoding = (vseed.dimensions || []).some((item)=>item.encoding);
6052
6090
  if (primaryMeasures && primaryMeasures.children) {
6053
6091
  const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, primaryMeasures.children, encoding, {
6092
+ colorItemAsId: hasEncoding,
6054
6093
  foldMeasureValue: FoldPrimaryMeasureValue,
6055
6094
  colorMeasureId: getColorMeasureId(advancedVSeed)
6056
6095
  });
@@ -6097,6 +6136,7 @@
6097
6136
  const { dataset } = vseed;
6098
6137
  const { dimensions, measures, encoding, chartType } = advancedVSeed;
6099
6138
  if (!measures || !dimensions || !dataset || !encoding) return result;
6139
+ const hasEncoding = (vseed.dimensions || []).some((item)=>item.encoding);
6100
6140
  const datasetList = [];
6101
6141
  const datasetReshapeInfo = [];
6102
6142
  const measureGroups = [];
@@ -6115,6 +6155,7 @@
6115
6155
  const secondaryMeasures = measures[1] || [];
6116
6156
  if (primaryMeasures && primaryMeasures.children) {
6117
6157
  const { dataset: newDataset, foldInfo, unfoldInfo } = dataReshapeByEncoding(dataset, dimensions, primaryMeasures.children, encoding, {
6158
+ colorItemAsId: hasEncoding,
6118
6159
  foldMeasureValue: `${FoldPrimaryMeasureValue}${index}`,
6119
6160
  colorMeasureId: getColorMeasureId(advancedVSeed)
6120
6161
  });
@@ -6183,9 +6224,11 @@
6183
6224
  };
6184
6225
  const dualAxisAdvancedPipeline = [
6185
6226
  initAdvancedVSeed_initAdvancedVSeed,
6227
+ defaultMeasures_defaultMeasures,
6228
+ defaultDimensions,
6229
+ defaultMeasureName,
6186
6230
  encodingForDualAxis,
6187
6231
  buildMeasuresForDualAxis,
6188
- autoDimensions_autoDimensions,
6189
6232
  pivotAdapter([
6190
6233
  reshapeWithDualEncoding
6191
6234
  ], [
@@ -7018,11 +7061,9 @@
7018
7061
  Builder._advancedPipelineMap.dualAxis = dualAxisAdvancedPipeline;
7019
7062
  Builder._specPipelineMap.dualAxis = dualAxisSpecPipeline;
7020
7063
  };
7021
- const encodingForPie = (advancedVSeed, context)=>{
7022
- const { vseed } = context;
7023
- const { measures: vseedMeasures = [] } = vseed;
7024
- const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
7025
- const dimensions = getBasicDimensions(vseed);
7064
+ const encodingForPie = (advancedVSeed)=>{
7065
+ const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
7066
+ const measures = findAllMeasures(vseedMeasures);
7026
7067
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7027
7068
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
7028
7069
  const encoding = {};
@@ -7057,14 +7098,18 @@
7057
7098
  const pie_generateDimensionEncoding = (dimensions, encoding)=>{
7058
7099
  encoding.color = chunk_QJLMYOTX_i(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7059
7100
  encoding.detail = chunk_QJLMYOTX_i(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
7060
- if (0 === encoding.color.length) encoding.color = dimensions.map((item)=>item.id);
7101
+ if (0 === encoding.color.length) encoding.color = [
7102
+ MeasureName
7103
+ ];
7061
7104
  if (0 === encoding.detail.length) encoding.detail = dimensions.map((item)=>item.id);
7062
7105
  };
7063
7106
  const pieAdvancedPipeline = [
7064
7107
  initAdvancedVSeed_initAdvancedVSeed,
7108
+ defaultMeasures_defaultMeasures,
7109
+ defaultDimensions,
7110
+ defaultMeasureName,
7065
7111
  encodingForPie,
7066
7112
  buildMeasures,
7067
- autoDimensions_autoDimensions,
7068
7113
  pivotAdapter([
7069
7114
  reshapeWithEncoding
7070
7115
  ], [
@@ -7079,44 +7124,70 @@
7079
7124
  ...spec
7080
7125
  };
7081
7126
  const { advancedVSeed } = context;
7082
- const { datasetReshapeInfo, dataset } = advancedVSeed;
7127
+ const { datasetReshapeInfo } = advancedVSeed;
7083
7128
  const { unfoldInfo, foldInfo } = datasetReshapeInfo[0];
7129
+ result.type = 'pie';
7130
+ result.outerRadius = 0.8;
7131
+ result.innerRadius = 0;
7132
+ result.valueField = foldInfo.measureValue;
7133
+ result.categoryField = unfoldInfo.encodingColorId;
7134
+ result.padding = 0;
7135
+ result.region = [
7136
+ {
7137
+ clip: true
7138
+ }
7139
+ ];
7140
+ result.animation = true;
7141
+ return result;
7142
+ };
7143
+ const colorPieStyleFill = (stylePipe)=>(spec, context)=>{
7144
+ const result = stylePipe(spec, context);
7145
+ const { advancedVSeed } = context;
7146
+ const { datasetReshapeInfo } = advancedVSeed;
7147
+ const { unfoldInfo } = datasetReshapeInfo[0];
7148
+ if (isLinearColor(advancedVSeed)) {
7149
+ if (result?.pie?.style) result.pie.style.fill = {
7150
+ field: unfoldInfo.encodingColor,
7151
+ scale: 'color'
7152
+ };
7153
+ }
7154
+ return result;
7155
+ };
7156
+ const pieStyle = (spec, context)=>{
7157
+ const { advancedVSeed } = context;
7158
+ const { dataset } = advancedVSeed;
7084
7159
  const showStroke = dataset.length <= 30;
7085
- result.type = 'pie';
7086
- result.outerRadius = 0.8;
7087
- result.innerRadius = 0;
7088
- result.valueField = foldInfo.measureValue;
7089
- result.categoryField = unfoldInfo.encodingColorId;
7090
- result.padding = 0;
7091
- result.region = [
7092
- {
7093
- clip: true
7160
+ const result = {
7161
+ ...spec,
7162
+ pie: {
7163
+ style: {}
7094
7164
  }
7095
- ];
7096
- result.pie = {
7097
- style: {
7098
- stroke: '#ffffff',
7099
- lineWidth: showStroke ? 1 : 0,
7100
- centerOffset: 0
7101
- },
7102
- state: {
7103
- hover: {
7104
- outerRadius: 1.1 * result.outerRadius
7165
+ };
7166
+ return {
7167
+ ...result,
7168
+ pie: {
7169
+ style: {
7170
+ stroke: '#ffffff',
7171
+ lineWidth: showStroke ? 1 : 0
7172
+ },
7173
+ state: {
7174
+ hover: {
7175
+ outerRadius: 1.1 * result.outerRadius
7176
+ }
7105
7177
  }
7106
7178
  }
7107
7179
  };
7108
- result.animation = true;
7109
- return result;
7110
7180
  };
7111
7181
  const pie = [
7112
7182
  initPie,
7113
- color_color,
7183
+ colorAdapter(color_color, linearColor),
7114
7184
  background_backgroundColor,
7115
7185
  datasetXY,
7116
7186
  progressive,
7187
+ colorPieStyleFill(pieStyle),
7188
+ colorAdapter(discreteLegend, colorLegend),
7117
7189
  label_label,
7118
7190
  tooltip_tooltip,
7119
- discreteLegend,
7120
7191
  annotationPoint_annotationPoint,
7121
7192
  annotationVerticalLine_annotationVerticalLine,
7122
7193
  annotationHorizontalLine_annotationHorizontalLine,
@@ -7129,10 +7200,11 @@
7129
7200
  datasetPivot,
7130
7201
  pivotIndicators_pivotIndicators([
7131
7202
  initPie,
7132
- color_color,
7203
+ colorAdapter(color_color, linearColor),
7133
7204
  background_backgroundColor,
7134
7205
  datasetXY,
7135
7206
  progressive,
7207
+ colorPieStyleFill(pieStyle),
7136
7208
  label_label,
7137
7209
  tooltip_tooltip,
7138
7210
  annotationPoint_annotationPoint,
@@ -7142,7 +7214,7 @@
7142
7214
  ]),
7143
7215
  pivotRowDimensions,
7144
7216
  pivotColumnDimensions,
7145
- pivotDiscreteLegend
7217
+ colorAdapter(pivotDiscreteLegend, pivotColorLegend)
7146
7218
  ];
7147
7219
  const pieSpecPipeline = [
7148
7220
  pivotAdapter_pivotAdapter(pie, pivotPie)
@@ -7153,8 +7225,10 @@
7153
7225
  };
7154
7226
  const donutAdvancedPipeline = [
7155
7227
  initAdvancedVSeed_initAdvancedVSeed,
7228
+ defaultMeasures_defaultMeasures,
7229
+ defaultDimensions,
7230
+ defaultMeasureName,
7156
7231
  buildMeasures,
7157
- autoDimensions_autoDimensions,
7158
7232
  encodingForPie,
7159
7233
  pivotAdapter([
7160
7234
  reshapeWithEncoding
@@ -7170,9 +7244,8 @@
7170
7244
  ...spec
7171
7245
  };
7172
7246
  const { advancedVSeed } = context;
7173
- const { datasetReshapeInfo, dataset } = advancedVSeed;
7247
+ const { datasetReshapeInfo } = advancedVSeed;
7174
7248
  const { foldInfo, unfoldInfo } = datasetReshapeInfo[0];
7175
- const showStroke = dataset.length <= 30;
7176
7249
  result.type = 'pie';
7177
7250
  result.outerRadius = 0.8;
7178
7251
  result.innerRadius = 0.8 * result.outerRadius;
@@ -7184,29 +7257,19 @@
7184
7257
  clip: true
7185
7258
  }
7186
7259
  ];
7187
- result.pie = {
7188
- style: {
7189
- stroke: '#ffffff',
7190
- lineWidth: showStroke ? 1 : 0
7191
- },
7192
- state: {
7193
- hover: {
7194
- outerRadius: 1.1 * result.outerRadius
7195
- }
7196
- }
7197
- };
7198
7260
  result.animation = true;
7199
7261
  return result;
7200
7262
  };
7201
7263
  const donut = [
7202
7264
  initDonut,
7203
- color_color,
7265
+ colorAdapter(color_color, linearColor),
7204
7266
  background_backgroundColor,
7205
7267
  datasetXY,
7206
7268
  progressive,
7207
7269
  label_label,
7270
+ colorPieStyleFill(pieStyle),
7271
+ colorAdapter(discreteLegend, colorLegend),
7208
7272
  tooltip_tooltip,
7209
- discreteLegend,
7210
7273
  annotationPoint_annotationPoint,
7211
7274
  annotationVerticalLine_annotationVerticalLine,
7212
7275
  annotationHorizontalLine_annotationHorizontalLine,
@@ -7219,11 +7282,12 @@
7219
7282
  datasetPivot,
7220
7283
  pivotIndicators_pivotIndicators([
7221
7284
  initDonut,
7222
- color_color,
7285
+ colorAdapter(color_color, linearColor),
7223
7286
  background_backgroundColor,
7224
7287
  datasetXY,
7225
7288
  progressive,
7226
7289
  label_label,
7290
+ colorPieStyleFill(pieStyle),
7227
7291
  tooltip_tooltip,
7228
7292
  annotationPoint_annotationPoint,
7229
7293
  annotationVerticalLine_annotationVerticalLine,
@@ -7232,7 +7296,7 @@
7232
7296
  ]),
7233
7297
  pivotRowDimensions,
7234
7298
  pivotColumnDimensions,
7235
- pivotDiscreteLegend
7299
+ colorAdapter(pivotDiscreteLegend, pivotColorLegend)
7236
7300
  ];
7237
7301
  const donutSpecPipeline = [
7238
7302
  pivotAdapter_pivotAdapter(donut, pivotDonut)
@@ -7241,11 +7305,9 @@
7241
7305
  Builder._advancedPipelineMap.donut = donutAdvancedPipeline;
7242
7306
  Builder._specPipelineMap.donut = donutSpecPipeline;
7243
7307
  };
7244
- const encodingForRose = (advancedVSeed, context)=>{
7245
- const { vseed } = context;
7246
- const { measures: vseedMeasures = [] } = vseed;
7247
- const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
7248
- const dimensions = getBasicDimensions(vseed);
7308
+ const encodingForRose = (advancedVSeed)=>{
7309
+ const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
7310
+ const measures = findAllMeasures(vseedMeasures);
7249
7311
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7250
7312
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
7251
7313
  const encoding = {};
@@ -7280,20 +7342,24 @@
7280
7342
  if (color.length > 0) encoding.color = color;
7281
7343
  };
7282
7344
  const rose_generateDimensionEncoding = (dimensions, encoding)=>{
7283
- encoding.angle = chunk_QJLMYOTX_i(dimensions.filter((item)=>'angle' === item.encoding || !item.encoding).map((item)=>item.id));
7345
+ encoding.angle = chunk_QJLMYOTX_i(dimensions.filter((item)=>'angle' === item.encoding).map((item)=>item.id));
7284
7346
  encoding.color = chunk_QJLMYOTX_i(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7285
7347
  encoding.detail = chunk_QJLMYOTX_i(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
7286
7348
  if (0 === encoding.angle.length) encoding.angle = [
7287
7349
  dimensions[0].id
7288
7350
  ];
7289
- if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.angle?.includes(item.id)).map((item)=>item.id);
7351
+ if (0 === encoding.color.length) encoding.color = [
7352
+ MeasureName
7353
+ ];
7290
7354
  if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.angle?.includes(item.id)).map((item)=>item.id);
7291
7355
  };
7292
7356
  const roseAdvancedPipeline = [
7293
7357
  initAdvancedVSeed_initAdvancedVSeed,
7358
+ defaultMeasures_defaultMeasures,
7359
+ defaultDimensions,
7360
+ defaultMeasureName,
7294
7361
  encodingForRose,
7295
7362
  buildMeasures,
7296
- autoDimensions_autoDimensions,
7297
7363
  pivotAdapter([
7298
7364
  reshapeWithEncoding
7299
7365
  ], [
@@ -7320,18 +7386,6 @@
7320
7386
  result.innerRadius = 0;
7321
7387
  const hasNegativeValue = dataset.flat().find((d)=>d[foldInfo.measureValue] < 0);
7322
7388
  if (hasNegativeValue) result.innerRadius = 0.05;
7323
- result.rose = {
7324
- style: {
7325
- stroke: '#ffffff',
7326
- lineWidth: 1
7327
- },
7328
- state: {
7329
- hover: {
7330
- lineWidth: 1,
7331
- fillOpacity: 0.6
7332
- }
7333
- }
7334
- };
7335
7389
  result.region = [
7336
7390
  {
7337
7391
  clip: true
@@ -7340,7 +7394,7 @@
7340
7394
  result.animation = true;
7341
7395
  return result;
7342
7396
  };
7343
- const radiusAxis = (spec, context)=>{
7397
+ const angleAxis = (spec, context)=>{
7344
7398
  const result = {
7345
7399
  ...spec
7346
7400
  };
@@ -7352,26 +7406,37 @@
7352
7406
  const showAxis = !(is0D || is1M1D);
7353
7407
  if (!result.axes) result.axes = [];
7354
7408
  result.axes.push({
7355
- orient: 'radius',
7409
+ orient: 'angle',
7356
7410
  visible: showAxis,
7357
7411
  zero: true,
7358
7412
  nice: !!showAxis,
7413
+ paddingInner: showAxis ? [
7414
+ 0.15,
7415
+ 0.1
7416
+ ] : [
7417
+ 0,
7418
+ 0
7419
+ ],
7420
+ paddingOuter: showAxis ? [
7421
+ 0.075,
7422
+ 0.1
7423
+ ] : [
7424
+ 0,
7425
+ 0
7426
+ ],
7359
7427
  grid: {
7360
7428
  visible: showAxis
7361
7429
  },
7362
- tick: {
7363
- visible: showAxis
7364
- },
7365
- label: {
7430
+ domainLine: {
7366
7431
  visible: showAxis
7367
7432
  },
7368
- domainLine: {
7433
+ tick: {
7369
7434
  visible: showAxis
7370
7435
  }
7371
7436
  });
7372
7437
  return result;
7373
7438
  };
7374
- const angleAxis = (spec, context)=>{
7439
+ const radiusAxis = (spec, context)=>{
7375
7440
  const result = {
7376
7441
  ...spec
7377
7442
  };
@@ -7383,50 +7448,79 @@
7383
7448
  const showAxis = !(is0D || is1M1D);
7384
7449
  if (!result.axes) result.axes = [];
7385
7450
  result.axes.push({
7386
- orient: 'angle',
7451
+ orient: 'radius',
7387
7452
  visible: showAxis,
7388
7453
  zero: true,
7389
7454
  nice: !!showAxis,
7390
- paddingInner: showAxis ? [
7391
- 0.15,
7392
- 0.1
7393
- ] : [
7394
- 0,
7395
- 0
7396
- ],
7397
- paddingOuter: showAxis ? [
7398
- 0.075,
7399
- 0.1
7400
- ] : [
7401
- 0,
7402
- 0
7403
- ],
7404
7455
  grid: {
7405
7456
  visible: showAxis
7406
7457
  },
7407
- domainLine: {
7458
+ tick: {
7408
7459
  visible: showAxis
7409
7460
  },
7410
- tick: {
7461
+ label: {
7462
+ visible: showAxis
7463
+ },
7464
+ domainLine: {
7411
7465
  visible: showAxis
7412
7466
  }
7413
7467
  });
7414
7468
  return result;
7415
7469
  };
7470
+ const colorRoseStyleFill = (stylePipe)=>(spec, context)=>{
7471
+ const result = stylePipe(spec, context);
7472
+ const { advancedVSeed } = context;
7473
+ const { datasetReshapeInfo } = advancedVSeed;
7474
+ const { unfoldInfo } = datasetReshapeInfo[0];
7475
+ if (isLinearColor(advancedVSeed)) {
7476
+ if (result?.rose?.style) result.rose.style.fill = {
7477
+ field: unfoldInfo.encodingColor,
7478
+ scale: 'color'
7479
+ };
7480
+ }
7481
+ return result;
7482
+ };
7483
+ const roseStyle = (spec, context)=>{
7484
+ const { advancedVSeed } = context;
7485
+ const { dataset } = advancedVSeed;
7486
+ const showStroke = dataset.length <= 30;
7487
+ const result = {
7488
+ ...spec,
7489
+ rose: {
7490
+ style: {}
7491
+ }
7492
+ };
7493
+ return {
7494
+ ...result,
7495
+ rose: {
7496
+ style: {
7497
+ stroke: '#ffffff',
7498
+ lineWidth: showStroke ? 1 : 0
7499
+ },
7500
+ state: {
7501
+ hover: {
7502
+ lineWidth: 1,
7503
+ fillOpacity: 0.6
7504
+ }
7505
+ }
7506
+ }
7507
+ };
7508
+ };
7416
7509
  const rose = [
7417
7510
  initRose,
7418
7511
  stackCornerRadius_stackCornerRadius,
7419
7512
  stackInverse,
7420
- color_color,
7513
+ colorAdapter(color_color, linearColor),
7421
7514
  background_backgroundColor,
7422
7515
  datasetXY,
7423
7516
  progressive,
7424
- radiusAxis,
7425
7517
  angleAxis,
7426
- label_label,
7427
- tooltip_tooltip,
7518
+ radiusAxis,
7428
7519
  verticalCrosshairRect,
7429
- discreteLegend
7520
+ colorRoseStyleFill(roseStyle),
7521
+ colorAdapter(discreteLegend, colorLegend),
7522
+ label_label,
7523
+ tooltip_tooltip
7430
7524
  ];
7431
7525
  const pivotRose = [
7432
7526
  initPivot,
@@ -7437,19 +7531,20 @@
7437
7531
  initRose,
7438
7532
  stackCornerRadius_stackCornerRadius,
7439
7533
  stackInverse,
7440
- color_color,
7534
+ colorAdapter(color_color, linearColor),
7441
7535
  background_backgroundColor,
7442
7536
  datasetXY,
7443
7537
  progressive,
7444
7538
  radiusAxis,
7445
7539
  angleAxis,
7540
+ verticalCrosshairRect,
7541
+ colorRoseStyleFill(roseStyle),
7446
7542
  label_label,
7447
- tooltip_tooltip,
7448
- verticalCrosshairRect
7543
+ tooltip_tooltip
7449
7544
  ]),
7450
7545
  pivotRowDimensions,
7451
7546
  pivotColumnDimensions,
7452
- pivotDiscreteLegend
7547
+ colorAdapter(pivotDiscreteLegend, pivotColorLegend)
7453
7548
  ];
7454
7549
  const roseSpecPipeline = [
7455
7550
  pivotAdapter_pivotAdapter(rose, pivotRose)
@@ -7460,9 +7555,11 @@
7460
7555
  };
7461
7556
  const roseParallelAdvancedPipeline = [
7462
7557
  initAdvancedVSeed_initAdvancedVSeed,
7558
+ defaultMeasures_defaultMeasures,
7559
+ defaultDimensions,
7560
+ defaultMeasureName,
7463
7561
  encodingForRose,
7464
7562
  buildMeasures,
7465
- autoDimensions_autoDimensions,
7466
7563
  pivotAdapter([
7467
7564
  reshapeWithEncoding
7468
7565
  ], [
@@ -7518,15 +7615,16 @@
7518
7615
  const roseParallel = [
7519
7616
  initRoseParallel,
7520
7617
  stackCornerRadius_stackCornerRadius,
7521
- color_color,
7618
+ colorAdapter(color_color, linearColor),
7522
7619
  background_backgroundColor,
7523
7620
  datasetXY,
7524
7621
  progressive,
7525
7622
  radiusAxis,
7526
7623
  angleAxis,
7624
+ colorRoseStyleFill(roseStyle),
7625
+ colorAdapter(discreteLegend, colorLegend),
7527
7626
  label_label,
7528
7627
  tooltip_tooltip,
7529
- discreteLegend,
7530
7628
  verticalCrosshairRect,
7531
7629
  annotationPoint_annotationPoint,
7532
7630
  annotationVerticalLine_annotationVerticalLine,
@@ -7541,15 +7639,16 @@
7541
7639
  pivotIndicators_pivotIndicators([
7542
7640
  initRoseParallel,
7543
7641
  stackCornerRadius_stackCornerRadius,
7544
- color_color,
7642
+ colorAdapter(color_color, linearColor),
7545
7643
  background_backgroundColor,
7546
7644
  datasetXY,
7547
7645
  progressive,
7548
7646
  radiusAxis,
7549
7647
  angleAxis,
7648
+ verticalCrosshairRect,
7649
+ colorRoseStyleFill(roseStyle),
7550
7650
  label_label,
7551
7651
  tooltip_tooltip,
7552
- verticalCrosshairRect,
7553
7652
  annotationPoint_annotationPoint,
7554
7653
  annotationVerticalLine_annotationVerticalLine,
7555
7654
  annotationHorizontalLine_annotationHorizontalLine,
@@ -7557,7 +7656,7 @@
7557
7656
  ]),
7558
7657
  pivotRowDimensions,
7559
7658
  pivotColumnDimensions,
7560
- pivotDiscreteLegend
7659
+ colorAdapter(pivotDiscreteLegend, pivotColorLegend)
7561
7660
  ];
7562
7661
  const roseParallelSpecPipeline = [
7563
7662
  pivotAdapter_pivotAdapter(roseParallel, pivotRoseParallel)
@@ -7566,11 +7665,9 @@
7566
7665
  Builder._advancedPipelineMap.roseParallel = roseParallelAdvancedPipeline;
7567
7666
  Builder._specPipelineMap.roseParallel = roseParallelSpecPipeline;
7568
7667
  };
7569
- const encodingForRadar = (advancedVSeed, context)=>{
7570
- const { vseed } = context;
7571
- const { measures: vseedMeasures = [] } = vseed;
7572
- const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
7573
- const dimensions = getBasicDimensions(vseed);
7668
+ const encodingForRadar = (advancedVSeed)=>{
7669
+ const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
7670
+ const measures = findAllMeasures(vseedMeasures);
7574
7671
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7575
7672
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
7576
7673
  const encoding = {};
@@ -7588,12 +7685,11 @@
7588
7685
  encoding.radius = chunk_QJLMYOTX_i(measures.filter((item)=>'radius' === item.encoding || !item.encoding).map((item)=>item.id));
7589
7686
  };
7590
7687
  const radar_generateDefaultDimensionEncoding = (dimensions, encoding)=>{
7591
- const onlyMeasureName = 1 === dimensions.length && dimensions.find((item)=>item.id === MeasureName);
7592
7688
  const uniqueDimIds = chunk_QJLMYOTX_i(dimensions.map((d)=>d.id));
7593
7689
  encoding.angle = uniqueDimIds.slice(0, 1);
7594
- encoding.color = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
7595
- encoding.detail = uniqueDimIds.slice(onlyMeasureName ? 0 : 1);
7690
+ encoding.color = uniqueDimIds.slice(1);
7596
7691
  encoding.tooltip = uniqueDimIds;
7692
+ encoding.detail = [];
7597
7693
  encoding.label = [];
7598
7694
  encoding.row = [];
7599
7695
  encoding.column = [];
@@ -7605,20 +7701,23 @@
7605
7701
  if (color.length > 0) encoding.color = color;
7606
7702
  };
7607
7703
  const radar_generateDimensionEncoding = (dimensions, encoding)=>{
7608
- encoding.angle = chunk_QJLMYOTX_i(dimensions.filter((item)=>'angle' === item.encoding || !item.encoding).map((item)=>item.id));
7704
+ encoding.angle = chunk_QJLMYOTX_i(dimensions.filter((item)=>'angle' === item.encoding).map((item)=>item.id));
7609
7705
  encoding.color = chunk_QJLMYOTX_i(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7610
- encoding.detail = chunk_QJLMYOTX_i(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
7706
+ encoding.detail = [];
7611
7707
  if (0 === encoding.angle.length) encoding.angle = [
7612
7708
  dimensions[0].id
7613
7709
  ];
7614
- if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.angle?.includes(item.id)).map((item)=>item.id);
7615
- if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.angle?.includes(item.id)).map((item)=>item.id);
7710
+ if (0 === encoding.color.length) encoding.color = [
7711
+ MeasureName
7712
+ ];
7616
7713
  };
7617
7714
  const radarAdvancedPipeline = [
7618
7715
  initAdvancedVSeed_initAdvancedVSeed,
7716
+ defaultMeasures_defaultMeasures,
7717
+ defaultDimensions,
7718
+ defaultMeasureName,
7619
7719
  encodingForRadar,
7620
7720
  buildMeasures,
7621
- autoDimensions_autoDimensions,
7622
7721
  pivotAdapter([
7623
7722
  reshapeWithEncoding
7624
7723
  ], [
@@ -7752,11 +7851,9 @@
7752
7851
  Builder._advancedPipelineMap.radar = radarAdvancedPipeline;
7753
7852
  Builder._specPipelineMap.radar = radarSpecPipeline;
7754
7853
  };
7755
- const encodingForFunnel = (advancedVSeed, context)=>{
7756
- const { vseed } = context;
7757
- const { measures: vseedMeasures = [] } = vseed;
7758
- const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
7759
- const dimensions = getBasicDimensions(vseed);
7854
+ const encodingForFunnel = (advancedVSeed)=>{
7855
+ const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
7856
+ const measures = findAllMeasures(vseedMeasures);
7760
7857
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7761
7858
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
7762
7859
  const encoding = {};
@@ -7791,14 +7888,18 @@
7791
7888
  const funnel_generateDimensionEncoding = (dimensions, encoding)=>{
7792
7889
  encoding.color = chunk_QJLMYOTX_i(dimensions.filter((item)=>'color' === item.encoding).map((item)=>item.id));
7793
7890
  encoding.detail = chunk_QJLMYOTX_i(dimensions.filter((item)=>'detail' === item.encoding).map((item)=>item.id));
7794
- if (0 === encoding.color.length) encoding.color = dimensions.map((item)=>item.id);
7891
+ if (0 === encoding.color.length) encoding.color = [
7892
+ MeasureName
7893
+ ];
7795
7894
  if (0 === encoding.detail.length) encoding.detail = dimensions.map((item)=>item.id);
7796
7895
  };
7797
7896
  const funnelAdvancedPipeline = [
7798
7897
  initAdvancedVSeed_initAdvancedVSeed,
7898
+ defaultMeasures_defaultMeasures,
7899
+ defaultDimensions,
7900
+ defaultMeasureName,
7799
7901
  encodingForFunnel,
7800
7902
  buildMeasures,
7801
- autoDimensions_autoDimensions,
7802
7903
  pivotAdapter([
7803
7904
  reshapeWithEncoding
7804
7905
  ], [
@@ -7828,34 +7929,55 @@
7828
7929
  clip: true
7829
7930
  }
7830
7931
  ];
7831
- result.funnel = {
7832
- style: {
7833
- cornerRadius: 4,
7834
- fill: {
7835
- field: unfoldInfo.encodingColorId,
7836
- scale: 'color'
7837
- }
7838
- },
7839
- state: {
7840
- hover: {
7841
- fillOpacity: 0.6
7842
- }
7843
- }
7844
- };
7845
7932
  result.transformLabel = {
7846
7933
  visible: true
7847
7934
  };
7848
7935
  result.animation = true;
7849
7936
  return result;
7850
7937
  };
7938
+ const colorFunnelStyleFill = (stylePipe)=>(spec, context)=>{
7939
+ const result = stylePipe(spec, context);
7940
+ const { advancedVSeed } = context;
7941
+ const { datasetReshapeInfo } = advancedVSeed;
7942
+ const { unfoldInfo } = datasetReshapeInfo[0];
7943
+ if (isLinearColor(advancedVSeed)) {
7944
+ if (result?.funnel?.style) result.funnel.style.fill = {
7945
+ field: unfoldInfo.encodingColor,
7946
+ scale: 'color'
7947
+ };
7948
+ }
7949
+ return result;
7950
+ };
7951
+ const funnelStyle = (spec)=>{
7952
+ const result = {
7953
+ ...spec,
7954
+ funnel: {
7955
+ style: {}
7956
+ }
7957
+ };
7958
+ return {
7959
+ ...result,
7960
+ funnel: {
7961
+ style: {
7962
+ cornerRadius: 4
7963
+ },
7964
+ state: {
7965
+ hover: {
7966
+ fillOpacity: 0.6
7967
+ }
7968
+ }
7969
+ }
7970
+ };
7971
+ };
7851
7972
  const funnel = [
7852
7973
  initFunnel,
7853
7974
  background_backgroundColor,
7854
7975
  datasetXY,
7855
- color_color,
7976
+ colorAdapter(color_color, linearColor),
7856
7977
  label_label,
7978
+ colorAdapter(discreteLegend, colorLegend),
7979
+ colorFunnelStyleFill(funnelStyle),
7857
7980
  tooltip_tooltip,
7858
- discreteLegend,
7859
7981
  annotationPoint_annotationPoint,
7860
7982
  annotationVerticalLine_annotationVerticalLine,
7861
7983
  annotationHorizontalLine_annotationHorizontalLine,
@@ -7870,17 +7992,18 @@
7870
7992
  initFunnel,
7871
7993
  background_backgroundColor,
7872
7994
  datasetXY,
7873
- color_color,
7995
+ colorAdapter(color_color, linearColor),
7874
7996
  label_label,
7875
7997
  tooltip_tooltip,
7876
- discreteLegend,
7998
+ colorFunnelStyleFill(funnelStyle),
7877
7999
  annotationPoint_annotationPoint,
7878
8000
  annotationVerticalLine_annotationVerticalLine,
7879
8001
  annotationHorizontalLine_annotationHorizontalLine,
7880
8002
  annotationArea_annotationArea
7881
8003
  ]),
7882
8004
  pivotRowDimensions,
7883
- pivotColumnDimensions
8005
+ pivotColumnDimensions,
8006
+ colorAdapter(pivotDiscreteLegend, pivotColorLegend)
7884
8007
  ];
7885
8008
  const funnelSpecPipeline = [
7886
8009
  pivotAdapter_pivotAdapter(funnel, pivotFunnel)
@@ -7889,11 +8012,9 @@
7889
8012
  Builder._advancedPipelineMap.funnel = funnelAdvancedPipeline;
7890
8013
  Builder._specPipelineMap.funnel = funnelSpecPipeline;
7891
8014
  };
7892
- const encodingForHeatmap = (advancedVSeed, context)=>{
7893
- const { vseed } = context;
7894
- const { measures: vseedMeasures = [] } = vseed;
7895
- const measures = vseedMeasures.length ? findAllMeasures(vseedMeasures) : getBasicMeasures(vseed);
7896
- const dimensions = getBasicDimensions(vseed);
8015
+ const encodingForHeatmap = (advancedVSeed)=>{
8016
+ const { measures: vseedMeasures = [], dimensions = [] } = advancedVSeed;
8017
+ const measures = findAllMeasures(vseedMeasures);
7897
8018
  const hasDimensionEncoding = dimensions.some((item)=>item.encoding);
7898
8019
  const hasMeasureEncoding = measures.some((item)=>item.encoding);
7899
8020
  const encoding = {};
@@ -7938,14 +8059,18 @@
7938
8059
  ];
7939
8060
  if (0 === encoding.y.length) if (dimensions.length > 1) encoding.y = dimensions.slice(1).map((item)=>item.id);
7940
8061
  else encoding.y = dimensions.slice(0).map((item)=>item.id);
7941
- if (0 === encoding.color.length) encoding.color = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
8062
+ if (0 === encoding.color.length) encoding.color = [
8063
+ MeasureName
8064
+ ];
7942
8065
  if (0 === encoding.detail.length) encoding.detail = dimensions.filter((item)=>!encoding.x?.includes(item.id)).map((item)=>item.id);
7943
8066
  };
7944
8067
  const heatmapAdvancedPipeline = [
7945
8068
  initAdvancedVSeed_initAdvancedVSeed,
8069
+ defaultMeasures_defaultMeasures,
8070
+ defaultDimensions,
8071
+ defaultMeasureName,
7946
8072
  encodingForHeatmap,
7947
8073
  buildMeasures,
7948
- autoDimensions_autoDimensions,
7949
8074
  pivotAdapter([
7950
8075
  reshapeWithEncoding
7951
8076
  ], [
@@ -7967,6 +8092,37 @@
7967
8092
  };
7968
8093
  return result;
7969
8094
  };
8095
+ const colorCellStyleFill = (stylePipe)=>(spec, context)=>{
8096
+ const result = stylePipe(spec, context);
8097
+ const { advancedVSeed } = context;
8098
+ const { datasetReshapeInfo } = advancedVSeed;
8099
+ const { unfoldInfo } = datasetReshapeInfo[0];
8100
+ if (isLinearColor(advancedVSeed)) {
8101
+ if (result?.cell?.style) result.cell.style.fill = {
8102
+ field: unfoldInfo.encodingColor,
8103
+ scale: 'color'
8104
+ };
8105
+ }
8106
+ return result;
8107
+ };
8108
+ const cellStyle = (spec)=>{
8109
+ const result = {
8110
+ ...spec,
8111
+ cell: {
8112
+ style: {}
8113
+ }
8114
+ };
8115
+ return {
8116
+ ...result,
8117
+ cell: {
8118
+ style: {
8119
+ shape: 'rect',
8120
+ stroke: '#ffffff',
8121
+ lineWidth: 1
8122
+ }
8123
+ }
8124
+ };
8125
+ };
7970
8126
  const initHeatmap = (spec, context)=>{
7971
8127
  const result = {
7972
8128
  ...spec
@@ -7981,13 +8137,6 @@
7981
8137
  result.seriesField = unfoldInfo.encodingColorId;
7982
8138
  result.valueField = foldInfo.measureValue;
7983
8139
  result.padding = 0;
7984
- result.cell = {
7985
- style: {
7986
- shape: 'rect',
7987
- stroke: '#ffffff',
7988
- lineWidth: 1
7989
- }
7990
- };
7991
8140
  result.axes = [
7992
8141
  {
7993
8142
  type: 'band',
@@ -8012,14 +8161,12 @@
8012
8161
  initHeatmap,
8013
8162
  background_backgroundColor,
8014
8163
  datasetXY,
8015
- color_color,
8164
+ colorAdapter(color_color, linearColor),
8016
8165
  label_label,
8017
8166
  labelColorInversion,
8018
- discreteLegend,
8167
+ colorAdapter(discreteLegend, colorLegend),
8168
+ colorCellStyleFill(cellStyle),
8019
8169
  tooltip_tooltip,
8020
- pointStyle_pointStyle,
8021
- pointStateDimensionHover,
8022
- lineStyle_lineStyle,
8023
8170
  annotationPoint_annotationPoint,
8024
8171
  annotationVerticalLine_annotationVerticalLine,
8025
8172
  annotationHorizontalLine_annotationHorizontalLine,
@@ -8034,21 +8181,20 @@
8034
8181
  initHeatmap,
8035
8182
  background_backgroundColor,
8036
8183
  datasetXY,
8037
- color_color,
8184
+ colorAdapter(color_color, linearColor),
8038
8185
  label_label,
8039
8186
  labelColorInversion,
8040
8187
  discreteLegend,
8041
8188
  tooltip_tooltip,
8042
- pointStyle_pointStyle,
8043
- pointStateDimensionHover,
8044
- lineStyle_lineStyle,
8189
+ colorCellStyleFill(cellStyle),
8045
8190
  annotationPoint_annotationPoint,
8046
8191
  annotationVerticalLine_annotationVerticalLine,
8047
8192
  annotationHorizontalLine_annotationHorizontalLine,
8048
8193
  annotationArea_annotationArea
8049
8194
  ]),
8050
8195
  pivotRowDimensions,
8051
- pivotColumnDimensions
8196
+ pivotColumnDimensions,
8197
+ colorAdapter(pivotDiscreteLegend, pivotColorLegend)
8052
8198
  ];
8053
8199
  const heatmapSpecPipeline = [
8054
8200
  pivotAdapter_pivotAdapter(heatmap, pivotHeatmap)
@@ -12115,7 +12261,9 @@
12115
12261
  'size',
12116
12262
  'color',
12117
12263
  'label',
12118
- 'tooltip'
12264
+ 'tooltip',
12265
+ 'detail',
12266
+ 'column'
12119
12267
  ]).optional(),
12120
12268
  parentId: schemas_string().optional()
12121
12269
  });