stickyflow 0.2.0 → 0.4.0
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.
- package/CHANGELOG.md +38 -0
- package/README.md +1 -1
- package/dist/{chunk-KFJIFHXG.js → chunk-65IVT4GK.js} +475 -199
- package/dist/chunk-65IVT4GK.js.map +1 -0
- package/dist/{chunk-6JKNT2YC.js → chunk-BYMIYXP5.js} +17 -7
- package/dist/chunk-BYMIYXP5.js.map +1 -0
- package/dist/{chunk-N6WVHOUQ.js → chunk-CSXQD3ON.js} +28 -15
- package/dist/chunk-CSXQD3ON.js.map +1 -0
- package/dist/{chunk-YM3XFBI4.cjs → chunk-CXL254BT.cjs} +17 -6
- package/dist/chunk-CXL254BT.cjs.map +1 -0
- package/dist/{chunk-S5BVAAEF.cjs → chunk-DDCTNLLD.cjs} +989 -713
- package/dist/chunk-DDCTNLLD.cjs.map +1 -0
- package/dist/{chunk-34PK7HEU.cjs → chunk-HFOGKSNU.cjs} +18 -18
- package/dist/{chunk-34PK7HEU.cjs.map → chunk-HFOGKSNU.cjs.map} +1 -1
- package/dist/{chunk-IIOJFR73.cjs → chunk-UXDWH2JC.cjs} +56 -43
- package/dist/chunk-UXDWH2JC.cjs.map +1 -0
- package/dist/{chunk-6LQJUAD4.js → chunk-XEN5QIIJ.js} +6 -6
- package/dist/{chunk-6LQJUAD4.js.map → chunk-XEN5QIIJ.js.map} +1 -1
- package/dist/index.cjs +24 -24
- package/dist/index.d.cts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +4 -4
- package/dist/interaction/index.cjs +780 -382
- package/dist/interaction/index.cjs.map +1 -1
- package/dist/interaction/index.d.cts +12 -3
- package/dist/interaction/index.d.ts +12 -3
- package/dist/interaction/index.js +562 -165
- package/dist/interaction/index.js.map +1 -1
- package/dist/{render-r1GYvjNm.d.cts → render-C5X74hds.d.cts} +75 -4
- package/dist/{render-r1GYvjNm.d.ts → render-C5X74hds.d.ts} +75 -4
- package/dist/{runtimeTypes-ByiafBwg.d.ts → runtimeTypes-D8hPZ62T.d.ts} +1 -1
- package/dist/{runtimeTypes-DwLeD-em.d.cts → runtimeTypes-yTSAvtCn.d.cts} +1 -1
- package/dist/stickyflow-diagram.global.js +37 -35
- package/dist/stickyflow-diagram.global.js.map +1 -1
- package/dist/{types-T7W2yTQF.d.cts → types-BDKDf4zr.d.cts} +1 -1
- package/dist/{types-ndGA1kbl.d.ts → types-CdgGdtoD.d.ts} +1 -1
- package/dist/viewer/index.cjs +9 -9
- package/dist/viewer/index.d.cts +4 -4
- package/dist/viewer/index.d.ts +4 -4
- package/dist/viewer/index.js +4 -4
- package/dist/web-component/index.cjs +6 -6
- package/dist/web-component/index.d.cts +2 -2
- package/dist/web-component/index.d.ts +2 -2
- package/dist/web-component/index.js +4 -4
- package/package.json +1 -1
- package/dist/chunk-6JKNT2YC.js.map +0 -1
- package/dist/chunk-IIOJFR73.cjs.map +0 -1
- package/dist/chunk-KFJIFHXG.js.map +0 -1
- package/dist/chunk-N6WVHOUQ.js.map +0 -1
- package/dist/chunk-S5BVAAEF.cjs.map +0 -1
- package/dist/chunk-YM3XFBI4.cjs.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkCXL254BT_cjs = require('./chunk-CXL254BT.cjs');
|
|
4
4
|
|
|
5
5
|
// src/renderInput/styleDecoding/colorToken.ts
|
|
6
6
|
var COLOR_TOKEN_PATTERN = String.raw`rgba?\([^)]*\)|#[0-9a-fA-F]+|[a-zA-Z][\w-]*`;
|
|
@@ -341,17 +341,31 @@ function lineConfig(source, p) {
|
|
|
341
341
|
highlightLabelFormat: p.highlightLabelFormat
|
|
342
342
|
};
|
|
343
343
|
}
|
|
344
|
-
function scatterConfig(source) {
|
|
345
|
-
return {
|
|
344
|
+
function scatterConfig(source, p) {
|
|
345
|
+
return {
|
|
346
|
+
categories: source?.categories,
|
|
347
|
+
pointSize: numOf(p.pointSize),
|
|
348
|
+
pointOpacity: numOf(p.pointOpacity),
|
|
349
|
+
pointStrokeWidth: numOf(p.pointStrokeWidth),
|
|
350
|
+
pointStrokeColor: p.pointStrokeColor
|
|
351
|
+
};
|
|
346
352
|
}
|
|
347
|
-
function boxplotConfig(source) {
|
|
353
|
+
function boxplotConfig(source, p) {
|
|
348
354
|
return {
|
|
349
355
|
boxWidth: source?.boxWidth,
|
|
350
356
|
orientation: source?.orientation,
|
|
351
357
|
barCornerRadius: source?.barCornerRadius,
|
|
352
358
|
showBoxplotPoints: source?.showBoxplotPoints,
|
|
353
359
|
barBorderColor: source?.barBorderColor,
|
|
354
|
-
barBorderWidth: source?.barBorderWidth
|
|
360
|
+
barBorderWidth: source?.barBorderWidth,
|
|
361
|
+
boxWhiskerWidth: numOf(p.boxWhiskerWidth),
|
|
362
|
+
boxMedianWidth: numOf(p.boxMedianWidth),
|
|
363
|
+
boxMedianColor: p.boxMedianColor,
|
|
364
|
+
boxWhiskerColor: p.boxWhiskerColor,
|
|
365
|
+
boxCapSize: numOf(p.boxCapSize),
|
|
366
|
+
boxPointSize: numOf(p.boxPointSize),
|
|
367
|
+
boxPointOpacity: numOf(p.boxPointOpacity),
|
|
368
|
+
boxJitter: numOf(p.boxJitter)
|
|
355
369
|
};
|
|
356
370
|
}
|
|
357
371
|
function fieldConfig(source) {
|
|
@@ -362,26 +376,48 @@ function fieldConfig(source) {
|
|
|
362
376
|
isolines: source?.isolines
|
|
363
377
|
};
|
|
364
378
|
}
|
|
365
|
-
function heatmapConfig(source) {
|
|
379
|
+
function heatmapConfig(source, p) {
|
|
366
380
|
return {
|
|
367
381
|
categories: source?.categories,
|
|
368
382
|
zones: source?.zones,
|
|
369
383
|
cellGap: source?.cellGap,
|
|
370
384
|
showValues: source?.showValues,
|
|
371
385
|
squareCells: source?.squareCells,
|
|
372
|
-
barCornerRadius: source?.barCornerRadius
|
|
386
|
+
barCornerRadius: source?.barCornerRadius,
|
|
387
|
+
cellShape: p.cellShape === "circle" ? "circle" : p.cellShape === "square" ? "square" : void 0,
|
|
388
|
+
cellStrokeColor: p.cellStrokeColor,
|
|
389
|
+
cellStrokeWidth: numOf(p.cellStrokeWidth),
|
|
390
|
+
cellValueSize: numOf(p.cellValueSize),
|
|
391
|
+
cellValueColor: p.cellValueColor
|
|
373
392
|
};
|
|
374
393
|
}
|
|
375
|
-
function hexbinConfig(source) {
|
|
376
|
-
return {
|
|
394
|
+
function hexbinConfig(source, p) {
|
|
395
|
+
return {
|
|
396
|
+
hexRadius: source?.hexRadius,
|
|
397
|
+
scale: decodeRamp(source?.scale),
|
|
398
|
+
hexGap: numOf(p.hexGap),
|
|
399
|
+
hexStrokeWidth: numOf(p.hexStrokeWidth),
|
|
400
|
+
hexStrokeColor: p.hexStrokeColor,
|
|
401
|
+
hexMinOpacity: numOf(p.hexMinOpacity)
|
|
402
|
+
};
|
|
377
403
|
}
|
|
378
|
-
function mekkoConfig(source) {
|
|
404
|
+
function mekkoConfig(source, p) {
|
|
379
405
|
return {
|
|
380
406
|
categories: source?.categories,
|
|
381
407
|
barCornerRadius: source?.barCornerRadius,
|
|
382
408
|
mekkoVaryHeight: source?.mekkoVaryHeight,
|
|
383
409
|
tileGradient: source?.tileGradient,
|
|
384
|
-
showColumnBackdrop: source?.showColumnBackdrop
|
|
410
|
+
showColumnBackdrop: source?.showColumnBackdrop,
|
|
411
|
+
mekkoColumnGap: numOf(p.mekkoColumnGap),
|
|
412
|
+
mekkoSegmentGap: numOf(p.mekkoSegmentGap),
|
|
413
|
+
mekkoRoundAll: p.mekkoRoundAll === void 0 ? void 0 : String(p.mekkoRoundAll) !== "false",
|
|
414
|
+
mekkoSegmentStrokeColor: p.mekkoSegmentStrokeColor,
|
|
415
|
+
mekkoSegmentStrokeWidth: numOf(p.mekkoSegmentStrokeWidth),
|
|
416
|
+
mekkoLabelSize: numOf(p.mekkoLabelSize),
|
|
417
|
+
mekkoValueSize: numOf(p.mekkoValueSize),
|
|
418
|
+
mekkoTextColor: p.mekkoTextColor,
|
|
419
|
+
showMekkoTotals: p.showMekkoTotals === void 0 ? void 0 : String(p.showMekkoTotals) !== "false",
|
|
420
|
+
mekkoValueFormat: p.mekkoValueFormat === "percent" ? "percent" : p.mekkoValueFormat === "value" ? "value" : void 0
|
|
385
421
|
};
|
|
386
422
|
}
|
|
387
423
|
function pieConfig(source, p) {
|
|
@@ -403,57 +439,104 @@ function pieConfig(source, p) {
|
|
|
403
439
|
pieCenterColor: p.pieCenterColor
|
|
404
440
|
};
|
|
405
441
|
}
|
|
406
|
-
function polarAreaConfig(source) {
|
|
442
|
+
function polarAreaConfig(source, p) {
|
|
407
443
|
return {
|
|
408
444
|
innerRadius: source?.innerRadius,
|
|
409
445
|
pieCornerRadius: source?.pieCornerRadius,
|
|
410
|
-
pieSliceGap: source?.pieSliceGap
|
|
446
|
+
pieSliceGap: source?.pieSliceGap,
|
|
447
|
+
pieStartAngle: numOf(p.pieStartAngle),
|
|
448
|
+
pieStroke: p.pieStroke,
|
|
449
|
+
pieStrokeWidth: numOf(p.pieStrokeWidth),
|
|
450
|
+
polarTrackOpacity: numOf(p.polarTrackOpacity),
|
|
451
|
+
polarRings: p.polarRings === void 0 ? void 0 : String(p.polarRings) !== "false",
|
|
452
|
+
polarTrackStroke: p.polarTrackStroke,
|
|
453
|
+
polarTrackStrokeWidth: numOf(p.polarTrackStrokeWidth),
|
|
454
|
+
polarTrackDash: p.polarTrackDash,
|
|
455
|
+
polarValueSize: numOf(p.polarValueSize),
|
|
456
|
+
polarNameSize: numOf(p.polarNameSize),
|
|
457
|
+
polarValueFirst: p.polarValueFirst === void 0 ? void 0 : String(p.polarValueFirst) !== "false",
|
|
458
|
+
polarOutsideLabels: p.polarOutsideLabels === void 0 ? void 0 : String(p.polarOutsideLabels) !== "false"
|
|
411
459
|
};
|
|
412
460
|
}
|
|
413
|
-
function
|
|
461
|
+
function radarStyle(p) {
|
|
462
|
+
return {
|
|
463
|
+
radarStrokeWidth: numOf(p.radarStrokeWidth),
|
|
464
|
+
radarPointSize: numOf(p.radarPointSize),
|
|
465
|
+
radarTension: numOf(p.radarTension),
|
|
466
|
+
radarSpokes: p.radarSpokes === void 0 ? void 0 : String(p.radarSpokes) !== "false"
|
|
467
|
+
};
|
|
468
|
+
}
|
|
469
|
+
function radarConfig(source, p) {
|
|
414
470
|
return {
|
|
415
471
|
categories: source?.categories,
|
|
416
|
-
areaOpacity: source?.areaOpacity
|
|
472
|
+
areaOpacity: source?.areaOpacity,
|
|
473
|
+
...radarStyle(p)
|
|
417
474
|
};
|
|
418
475
|
}
|
|
419
|
-
function radialConfig(source) {
|
|
476
|
+
function radialConfig(source, p) {
|
|
420
477
|
return {
|
|
421
478
|
categories: source?.categories,
|
|
422
|
-
areaOpacity: source?.areaOpacity
|
|
479
|
+
areaOpacity: source?.areaOpacity,
|
|
480
|
+
...radarStyle(p)
|
|
423
481
|
};
|
|
424
482
|
}
|
|
425
|
-
function radialBarConfig(source) {
|
|
483
|
+
function radialBarConfig(source, p) {
|
|
426
484
|
return {
|
|
427
485
|
ringThickness: source?.ringThickness,
|
|
428
|
-
ringGap: source?.ringGap
|
|
486
|
+
ringGap: source?.ringGap,
|
|
487
|
+
ringTrackOpacity: numOf(p.ringTrackOpacity),
|
|
488
|
+
ringCap: p.ringCap === "butt" ? "butt" : p.ringCap === "round" ? "round" : void 0,
|
|
489
|
+
ringStartAngle: numOf(p.ringStartAngle),
|
|
490
|
+
ringSweep: numOf(p.ringSweep)
|
|
429
491
|
};
|
|
430
492
|
}
|
|
431
|
-
function sankeyConfig(source) {
|
|
493
|
+
function sankeyConfig(source, p) {
|
|
432
494
|
return {
|
|
433
495
|
zones: source?.zones,
|
|
434
496
|
barCornerRadius: source?.barCornerRadius,
|
|
435
497
|
labelPosition: source?.labelPosition,
|
|
436
498
|
labelOrientation: source?.labelOrientation,
|
|
437
499
|
labelColor: source?.labelColor,
|
|
438
|
-
linkGradient: source?.linkGradient
|
|
500
|
+
linkGradient: source?.linkGradient,
|
|
501
|
+
sankeyNodeWidth: numOf(p.sankeyNodeWidth),
|
|
502
|
+
sankeyNodeGap: numOf(p.sankeyNodeGap),
|
|
503
|
+
sankeyLinkOpacity: numOf(p.sankeyLinkOpacity),
|
|
504
|
+
sankeyLinkCurve: numOf(p.sankeyLinkCurve),
|
|
505
|
+
sankeyLabelSize: numOf(p.sankeyLabelSize)
|
|
439
506
|
};
|
|
440
507
|
}
|
|
441
|
-
function treemapConfig(source) {
|
|
508
|
+
function treemapConfig(source, p) {
|
|
442
509
|
return {
|
|
443
510
|
zones: source?.zones,
|
|
444
511
|
cellGap: source?.cellGap,
|
|
445
512
|
barCornerRadius: source?.barCornerRadius,
|
|
446
513
|
headerColor: source?.headerColor,
|
|
447
|
-
tileGradient: source?.tileGradient
|
|
514
|
+
tileGradient: source?.tileGradient,
|
|
515
|
+
tileStrokeColor: p.tileStrokeColor,
|
|
516
|
+
tileStrokeWidth: numOf(p.tileStrokeWidth),
|
|
517
|
+
tileLabelSize: numOf(p.tileLabelSize),
|
|
518
|
+
tileValueSize: numOf(p.tileValueSize),
|
|
519
|
+
tileTextColor: p.tileTextColor,
|
|
520
|
+
tileLabelPadding: numOf(p.tileLabelPadding),
|
|
521
|
+
showTileValues: p.showTileValues === void 0 ? void 0 : String(p.showTileValues) !== "false",
|
|
522
|
+
headerHeight: numOf(p.headerHeight)
|
|
448
523
|
};
|
|
449
524
|
}
|
|
450
|
-
function customConfig(source) {
|
|
525
|
+
function customConfig(source, p) {
|
|
451
526
|
return {
|
|
452
527
|
categories: source?.categories,
|
|
453
528
|
zones: source?.zones,
|
|
454
529
|
orientation: source?.orientation,
|
|
455
530
|
connectPoints: source?.connectPoints,
|
|
456
|
-
reverseComparison: source?.reverseComparison
|
|
531
|
+
reverseComparison: source?.reverseComparison,
|
|
532
|
+
customConnectorWidth: numOf(p.customConnectorWidth),
|
|
533
|
+
customConnectorOpacity: numOf(p.customConnectorOpacity),
|
|
534
|
+
customConnectorDash: p.customConnectorDash,
|
|
535
|
+
customBeforeFill: p.customBeforeFill,
|
|
536
|
+
customBeforeStroke: p.customBeforeStroke,
|
|
537
|
+
customBeforeStrokeWidth: numOf(p.customBeforeStrokeWidth),
|
|
538
|
+
customLabelSize: numOf(p.customLabelSize),
|
|
539
|
+
customLabelColor: p.customLabelColor
|
|
457
540
|
};
|
|
458
541
|
}
|
|
459
542
|
|
|
@@ -469,33 +552,33 @@ function chartObject(e) {
|
|
|
469
552
|
case "line":
|
|
470
553
|
return typedChart(base, chartType, lineConfig(source, p));
|
|
471
554
|
case "scatter":
|
|
472
|
-
return typedChart(base, chartType, scatterConfig(source));
|
|
555
|
+
return typedChart(base, chartType, scatterConfig(source, p));
|
|
473
556
|
case "boxplot":
|
|
474
|
-
return typedChart(base, chartType, boxplotConfig(source));
|
|
557
|
+
return typedChart(base, chartType, boxplotConfig(source, p));
|
|
475
558
|
case "field":
|
|
476
559
|
return typedChart(base, chartType, fieldConfig(source));
|
|
477
560
|
case "heatmap":
|
|
478
|
-
return typedChart(base, chartType, heatmapConfig(source));
|
|
561
|
+
return typedChart(base, chartType, heatmapConfig(source, p));
|
|
479
562
|
case "hexbin":
|
|
480
|
-
return typedChart(base, chartType, hexbinConfig(source));
|
|
563
|
+
return typedChart(base, chartType, hexbinConfig(source, p));
|
|
481
564
|
case "mekko":
|
|
482
|
-
return typedChart(base, chartType, mekkoConfig(source));
|
|
565
|
+
return typedChart(base, chartType, mekkoConfig(source, p));
|
|
483
566
|
case "pie":
|
|
484
567
|
return typedChart(base, chartType, pieConfig(source, p));
|
|
485
568
|
case "polarArea":
|
|
486
|
-
return typedChart(base, chartType, polarAreaConfig(source));
|
|
569
|
+
return typedChart(base, chartType, polarAreaConfig(source, p));
|
|
487
570
|
case "radar":
|
|
488
|
-
return typedChart(base, chartType, radarConfig(source));
|
|
571
|
+
return typedChart(base, chartType, radarConfig(source, p));
|
|
489
572
|
case "radial":
|
|
490
|
-
return typedChart(base, chartType, radialConfig(source));
|
|
573
|
+
return typedChart(base, chartType, radialConfig(source, p));
|
|
491
574
|
case "radialBar":
|
|
492
|
-
return typedChart(base, chartType, radialBarConfig(source));
|
|
575
|
+
return typedChart(base, chartType, radialBarConfig(source, p));
|
|
493
576
|
case "sankey":
|
|
494
|
-
return typedChart(base, chartType, sankeyConfig(source));
|
|
577
|
+
return typedChart(base, chartType, sankeyConfig(source, p));
|
|
495
578
|
case "treemap":
|
|
496
|
-
return typedChart(base, chartType, treemapConfig(source));
|
|
579
|
+
return typedChart(base, chartType, treemapConfig(source, p));
|
|
497
580
|
case "custom":
|
|
498
|
-
return typedChart(base, chartType, customConfig(source));
|
|
581
|
+
return typedChart(base, chartType, customConfig(source, p));
|
|
499
582
|
}
|
|
500
583
|
}
|
|
501
584
|
function typedChart(base, chartType, config) {
|
|
@@ -725,6 +808,10 @@ function variant(value) {
|
|
|
725
808
|
function motion(value) {
|
|
726
809
|
return value === "roll" || value === "fade" ? value : void 0;
|
|
727
810
|
}
|
|
811
|
+
function positiveNumber(value) {
|
|
812
|
+
const number = Number(value);
|
|
813
|
+
return value !== void 0 && Number.isFinite(number) && number > 0 ? number : void 0;
|
|
814
|
+
}
|
|
728
815
|
function fontWeight(value) {
|
|
729
816
|
return value && FONT_WEIGHT.test(value) ? value : void 0;
|
|
730
817
|
}
|
|
@@ -794,7 +881,7 @@ var RULER_NUMBERS = [
|
|
|
794
881
|
];
|
|
795
882
|
var RULER_COLORS = ["color", "accent", "glow"];
|
|
796
883
|
var RULER_DEFAULTS = { color: "#8f95c4", accent: "#d9f270", glow: "#3ddc84" };
|
|
797
|
-
var RULER_OPTIONAL_COLORS = ["core"];
|
|
884
|
+
var RULER_OPTIONAL_COLORS = ["core", "peak"];
|
|
798
885
|
function rulerObject(canvasObject) {
|
|
799
886
|
const properties = canvasObject.props;
|
|
800
887
|
const parameters = {};
|
|
@@ -873,7 +960,8 @@ function widgetObject(canvasObject) {
|
|
|
873
960
|
fontFamily: fontFamily(properties.fontFamily),
|
|
874
961
|
variant: variant(properties.variant),
|
|
875
962
|
motion: motion(properties.motion),
|
|
876
|
-
fontWeight: fontWeight(properties.fontWeight)
|
|
963
|
+
fontWeight: fontWeight(properties.fontWeight),
|
|
964
|
+
fontSize: positiveNumber(properties.fontSize)
|
|
877
965
|
}
|
|
878
966
|
};
|
|
879
967
|
}
|
|
@@ -887,7 +975,7 @@ function collectCanvasObjects(state) {
|
|
|
887
975
|
shapes: canvasObjects.filter((canvasObject) => canvasObject.objectType === "shape").map((shape) => shapeObject(shape, shaders)),
|
|
888
976
|
frames: canvasObjects.filter((canvasObject) => canvasObject.objectType === "frame").map(frameObject),
|
|
889
977
|
swimlanes: canvasObjects.filter((canvasObject) => canvasObject.objectType === "swimlane").map(swimlaneObject),
|
|
890
|
-
isometricObjects: canvasObjects.filter(
|
|
978
|
+
isometricObjects: canvasObjects.filter(chunkCXL254BT_cjs.isIsometricObject).map(isometricObject),
|
|
891
979
|
paths: canvasObjects.filter((canvasObject) => canvasObject.objectType === "path").map(pathObject),
|
|
892
980
|
charts: canvasObjects.filter((canvasObject) => canvasObject.objectType === "chart").map(chartObject),
|
|
893
981
|
widgets: canvasObjects.filter(
|
|
@@ -915,9 +1003,9 @@ function sidePoint(canvasObject, endpoint) {
|
|
|
915
1003
|
function namedPortPoint(canvasObject, endpoint) {
|
|
916
1004
|
const port = canvasObject.symbol?.ports?.find((candidate) => candidate.name === endpoint.port);
|
|
917
1005
|
if (!port) {
|
|
918
|
-
return
|
|
1006
|
+
return chunkCXL254BT_cjs.elementCenter(canvasObject);
|
|
919
1007
|
}
|
|
920
|
-
return
|
|
1008
|
+
return chunkCXL254BT_cjs.pointAtNormalizedPort(
|
|
921
1009
|
{
|
|
922
1010
|
x: canvasObject.x,
|
|
923
1011
|
y: canvasObject.y,
|
|
@@ -963,7 +1051,7 @@ function explicitAnchorPoint(canvasObject, endpoint) {
|
|
|
963
1051
|
return null;
|
|
964
1052
|
}
|
|
965
1053
|
function automaticEndpointPoint(canvasObject, opposite) {
|
|
966
|
-
return opposite ?
|
|
1054
|
+
return opposite ? chunkCXL254BT_cjs.edgePointToward(canvasObject, opposite) : chunkCXL254BT_cjs.elementCenter(canvasObject);
|
|
967
1055
|
}
|
|
968
1056
|
function findPositionedCanvasObject(canvasObjects, id) {
|
|
969
1057
|
return canvasObjects.find((candidate) => candidate.id === id);
|
|
@@ -981,7 +1069,7 @@ function positionedCanvasObjects(canvasObjects) {
|
|
|
981
1069
|
];
|
|
982
1070
|
}
|
|
983
1071
|
function connectionEndpointPoint(object, face) {
|
|
984
|
-
return object ?
|
|
1072
|
+
return object ? chunkCXL254BT_cjs.isometricFaceCenter(object, face) : { x: 0, y: 0 };
|
|
985
1073
|
}
|
|
986
1074
|
function isometricStackPosition(isometricObjects, id) {
|
|
987
1075
|
const index = isometricObjects.findIndex((object2) => object2.id === id);
|
|
@@ -996,8 +1084,8 @@ function connectionStack(isometricObjects, connection) {
|
|
|
996
1084
|
return { order: connection.order, sourceIndex: connection.sourceIndex };
|
|
997
1085
|
}
|
|
998
1086
|
const behind = [
|
|
999
|
-
|
|
1000
|
-
|
|
1087
|
+
chunkCXL254BT_cjs.VISIBLE_ISOMETRIC_FACES.has(connection.fromFace) ? void 0 : isometricStackPosition(isometricObjects, connection.fromId),
|
|
1088
|
+
chunkCXL254BT_cjs.VISIBLE_ISOMETRIC_FACES.has(connection.toFace) ? void 0 : isometricStackPosition(isometricObjects, connection.toId)
|
|
1001
1089
|
].filter((position) => position !== void 0);
|
|
1002
1090
|
if (!behind.length) {
|
|
1003
1091
|
return { sourceIndex: connection.sourceIndex };
|
|
@@ -1039,7 +1127,7 @@ function createRenderInputLinks(canvasObjects) {
|
|
|
1039
1127
|
|
|
1040
1128
|
// src/renderInput/fromSfl/index.ts
|
|
1041
1129
|
function sflToRenderInput(sfl) {
|
|
1042
|
-
const state =
|
|
1130
|
+
const state = chunkCXL254BT_cjs.sflToCanvasState(sfl);
|
|
1043
1131
|
const canvasObjects = collectCanvasObjects(state);
|
|
1044
1132
|
return {
|
|
1045
1133
|
shapes: canvasObjects.shapes,
|
|
@@ -1077,13 +1165,13 @@ function tabBox(input, thickness, length) {
|
|
|
1077
1165
|
y,
|
|
1078
1166
|
width: length,
|
|
1079
1167
|
height: thickness,
|
|
1080
|
-
path:
|
|
1168
|
+
path: chunkCXL254BT_cjs.bottomRoundedRectPath(x, y, length, thickness, TAB_RADIUS)
|
|
1081
1169
|
};
|
|
1082
1170
|
}
|
|
1083
1171
|
case "left": {
|
|
1084
1172
|
const x = input.x - thickness;
|
|
1085
1173
|
const y = input.y - inset;
|
|
1086
|
-
return { x, y, width: thickness, height: length, path:
|
|
1174
|
+
return { x, y, width: thickness, height: length, path: chunkCXL254BT_cjs.leftRoundedRectPath(x, y, thickness, length, TAB_RADIUS) };
|
|
1087
1175
|
}
|
|
1088
1176
|
case "right": {
|
|
1089
1177
|
const x = input.x + input.width;
|
|
@@ -1093,13 +1181,13 @@ function tabBox(input, thickness, length) {
|
|
|
1093
1181
|
y,
|
|
1094
1182
|
width: thickness,
|
|
1095
1183
|
height: length,
|
|
1096
|
-
path:
|
|
1184
|
+
path: chunkCXL254BT_cjs.rightRoundedRectPath(x, y, thickness, length, TAB_RADIUS)
|
|
1097
1185
|
};
|
|
1098
1186
|
}
|
|
1099
1187
|
default: {
|
|
1100
1188
|
const x = input.x - inset;
|
|
1101
1189
|
const y = input.y - thickness;
|
|
1102
|
-
return { x, y, width: length, height: thickness, path:
|
|
1190
|
+
return { x, y, width: length, height: thickness, path: chunkCXL254BT_cjs.topRoundedRectPath(x, y, length, thickness, TAB_RADIUS) };
|
|
1103
1191
|
}
|
|
1104
1192
|
}
|
|
1105
1193
|
}
|
|
@@ -1108,7 +1196,7 @@ function renderTitleTab(input) {
|
|
|
1108
1196
|
const padding = 16;
|
|
1109
1197
|
const length = Math.max(120, input.title.length * input.fontSize * 0.62 + padding * 2);
|
|
1110
1198
|
const box = tabBox(input, thickness, length);
|
|
1111
|
-
const bounds =
|
|
1199
|
+
const bounds = chunkCXL254BT_cjs.boxBounds(box, 6);
|
|
1112
1200
|
const vertical = input.labelPosition === "left" || input.labelPosition === "right";
|
|
1113
1201
|
return [
|
|
1114
1202
|
{
|
|
@@ -1136,7 +1224,7 @@ function horizontalTitleText(input, box, padding, bounds) {
|
|
|
1136
1224
|
width: Math.max(0, box.width - padding * 2),
|
|
1137
1225
|
height: box.height,
|
|
1138
1226
|
lines: [input.title],
|
|
1139
|
-
fontFamily: input.fontFamily ??
|
|
1227
|
+
fontFamily: input.fontFamily ?? chunkCXL254BT_cjs.DEFAULT_FONT,
|
|
1140
1228
|
fontSize: input.fontSize,
|
|
1141
1229
|
fontWeight: input.fontWeight,
|
|
1142
1230
|
color: input.textColor,
|
|
@@ -1160,7 +1248,7 @@ function verticalTitleText(input, box, padding, bounds) {
|
|
|
1160
1248
|
width: textLength,
|
|
1161
1249
|
height: textThickness,
|
|
1162
1250
|
lines: [input.title],
|
|
1163
|
-
fontFamily: input.fontFamily ??
|
|
1251
|
+
fontFamily: input.fontFamily ?? chunkCXL254BT_cjs.DEFAULT_FONT,
|
|
1164
1252
|
fontSize: input.fontSize,
|
|
1165
1253
|
fontWeight: input.fontWeight,
|
|
1166
1254
|
color: input.textColor,
|
|
@@ -1181,7 +1269,7 @@ var SQUARED_CORNER_BY_LABEL_POSITION = {
|
|
|
1181
1269
|
};
|
|
1182
1270
|
function frameBoundaryNode(frame, order, hasTab) {
|
|
1183
1271
|
const shadow = frame.shadow ?? true;
|
|
1184
|
-
const bounds =
|
|
1272
|
+
const bounds = chunkCXL254BT_cjs.boxBounds(
|
|
1185
1273
|
{ x: frame.x, y: frame.y, width: frame.width, height: frame.height },
|
|
1186
1274
|
frame.strokeWidth + (shadow ? 20 : 4)
|
|
1187
1275
|
);
|
|
@@ -1216,7 +1304,7 @@ function frameBoundaryNode(frame, order, hasTab) {
|
|
|
1216
1304
|
id: `frame-${frame.id}`,
|
|
1217
1305
|
order,
|
|
1218
1306
|
bounds,
|
|
1219
|
-
d:
|
|
1307
|
+
d: chunkCXL254BT_cjs.cornersRoundedRectPath(frame.x, frame.y, frame.width, frame.height, radii),
|
|
1220
1308
|
detail: { of: "frameBoundary", cornerRadius: frame.cornerRadius, squareCorner: squared },
|
|
1221
1309
|
style
|
|
1222
1310
|
};
|
|
@@ -1305,7 +1393,7 @@ function labelBase(context, lane, index) {
|
|
|
1305
1393
|
id: `swimlane-label-${context.swimlane.id}-${lane.id}`,
|
|
1306
1394
|
order: context.order + 0.5 + index / 100,
|
|
1307
1395
|
lines: [lane.label],
|
|
1308
|
-
fontFamily: context.swimlane.fontFamily ??
|
|
1396
|
+
fontFamily: context.swimlane.fontFamily ?? chunkCXL254BT_cjs.DEFAULT_FONT,
|
|
1309
1397
|
fontSize: context.swimlane.fontSize,
|
|
1310
1398
|
fontWeight: context.swimlane.fontWeight,
|
|
1311
1399
|
color: context.swimlane.textColor,
|
|
@@ -1321,7 +1409,7 @@ function horizontalLabel(context, lane, index) {
|
|
|
1321
1409
|
const y = centerY - thickness / 2;
|
|
1322
1410
|
return {
|
|
1323
1411
|
...labelBase(context, lane, index),
|
|
1324
|
-
bounds:
|
|
1412
|
+
bounds: chunkCXL254BT_cjs.rotatedBounds({ x, y, width, height: thickness }, -90, 12),
|
|
1325
1413
|
x,
|
|
1326
1414
|
y,
|
|
1327
1415
|
width,
|
|
@@ -1373,7 +1461,7 @@ function createSwimlaneRenderContext(swimlane, index) {
|
|
|
1373
1461
|
return {
|
|
1374
1462
|
swimlane,
|
|
1375
1463
|
order: 5e3 + index,
|
|
1376
|
-
bounds:
|
|
1464
|
+
bounds: chunkCXL254BT_cjs.boxBounds(
|
|
1377
1465
|
{ x: swimlane.x, y: swimlane.y, width: swimlane.width, height: swimlane.height },
|
|
1378
1466
|
swimlane.strokeWidth + 4
|
|
1379
1467
|
),
|
|
@@ -1412,17 +1500,17 @@ function buildSwimlane(swimlane, index) {
|
|
|
1412
1500
|
function buildContainers(input) {
|
|
1413
1501
|
return [
|
|
1414
1502
|
...input.frames.flatMap(
|
|
1415
|
-
(frame, index) =>
|
|
1503
|
+
(frame, index) => chunkCXL254BT_cjs.tag(buildFrame(frame, index), "frame", frame.id, void 0, frame.title ?? void 0)
|
|
1416
1504
|
),
|
|
1417
|
-
...input.swimlanes.flatMap((swimlane, index) =>
|
|
1505
|
+
...input.swimlanes.flatMap((swimlane, index) => chunkCXL254BT_cjs.tag(buildSwimlane(swimlane, index), "swimlane", swimlane.id))
|
|
1418
1506
|
];
|
|
1419
1507
|
}
|
|
1420
1508
|
|
|
1421
1509
|
// src/renderScene/artifacts/isometric.ts
|
|
1422
1510
|
function isometricContext(object, index) {
|
|
1423
|
-
const strokeWidth = Math.max(0,
|
|
1424
|
-
const rotation =
|
|
1425
|
-
const box =
|
|
1511
|
+
const strokeWidth = Math.max(0, chunkCXL254BT_cjs.finite(object.strokeWidth, 1));
|
|
1512
|
+
const rotation = chunkCXL254BT_cjs.finite(object.rotation, 0);
|
|
1513
|
+
const box = chunkCXL254BT_cjs.isometricBounds(object);
|
|
1426
1514
|
const rotationCenter = { x: box.x + box.width / 2, y: box.y + box.height / 2 };
|
|
1427
1515
|
return {
|
|
1428
1516
|
object,
|
|
@@ -1434,7 +1522,7 @@ function isometricContext(object, index) {
|
|
|
1434
1522
|
strokeWidth,
|
|
1435
1523
|
common: {
|
|
1436
1524
|
type: "path",
|
|
1437
|
-
bounds:
|
|
1525
|
+
bounds: chunkCXL254BT_cjs.rotatedBounds(box, rotation, strokeWidth + 2),
|
|
1438
1526
|
rotation,
|
|
1439
1527
|
rotationCenter,
|
|
1440
1528
|
style: {
|
|
@@ -1452,7 +1540,7 @@ function groundShadowNode(context, faces) {
|
|
|
1452
1540
|
}
|
|
1453
1541
|
const height = Math.max(0, object.height);
|
|
1454
1542
|
const heightFactor = 0.6 + Math.min(1, height / 150) * 0.7;
|
|
1455
|
-
const shadowDrop = height +
|
|
1543
|
+
const shadowDrop = height + chunkCXL254BT_cjs.finite(object.shadowStyle?.distance, 0);
|
|
1456
1544
|
const contactFootprint = faces.top.map((point) => ({ x: point.x, y: point.y + shadowDrop }));
|
|
1457
1545
|
const footprintCenter = {
|
|
1458
1546
|
x: contactFootprint.reduce((sum, point) => sum + point.x, 0) / contactFootprint.length,
|
|
@@ -1475,14 +1563,14 @@ function groundShadowNode(context, faces) {
|
|
|
1475
1563
|
maxX: Math.max(...footprintXs),
|
|
1476
1564
|
maxY: Math.max(...footprintYs)
|
|
1477
1565
|
},
|
|
1478
|
-
d:
|
|
1566
|
+
d: chunkCXL254BT_cjs.roundedPolygonPath(footprint, 0),
|
|
1479
1567
|
rotation,
|
|
1480
1568
|
rotationCenter,
|
|
1481
1569
|
style: {
|
|
1482
1570
|
fill: { kind: "solid", color: object.shadowStyle?.color ?? "#000000" },
|
|
1483
1571
|
stroke: { kind: "none" },
|
|
1484
1572
|
opacity: Math.min(1, (object.shadowStyle?.opacity ?? 0.18) * heightFactor),
|
|
1485
|
-
blur:
|
|
1573
|
+
blur: chunkCXL254BT_cjs.finite(object.shadowStyle?.blur, 8),
|
|
1486
1574
|
pointerEvents: "none"
|
|
1487
1575
|
}
|
|
1488
1576
|
};
|
|
@@ -1490,13 +1578,13 @@ function groundShadowNode(context, faces) {
|
|
|
1490
1578
|
function faceNodes(context, faces, hullClip) {
|
|
1491
1579
|
const { object, order, common } = context;
|
|
1492
1580
|
const noStroke = { ...common.style, stroke: { kind: "none" } };
|
|
1493
|
-
const faceFills =
|
|
1581
|
+
const faceFills = chunkCXL254BT_cjs.deriveFaceFills(object.fill ?? "#f8fafc");
|
|
1494
1582
|
const colorProp = { prop: "style.fill", propKind: "color", propSolidOnly: true };
|
|
1495
1583
|
const face = (name, offset, points, color2) => ({
|
|
1496
1584
|
...common,
|
|
1497
1585
|
id: `isometric-${object.id}-${name}`,
|
|
1498
1586
|
order: order + offset,
|
|
1499
|
-
d:
|
|
1587
|
+
d: chunkCXL254BT_cjs.roundedPolygonPath(points, 0),
|
|
1500
1588
|
style: { ...noStroke, fill: { kind: "solid", color: color2 }, clip: hullClip },
|
|
1501
1589
|
...colorProp
|
|
1502
1590
|
});
|
|
@@ -1536,8 +1624,8 @@ function hullNode(context, hullPath, cornerRadius) {
|
|
|
1536
1624
|
depth: Math.max(0, object.depth),
|
|
1537
1625
|
cornerRadius,
|
|
1538
1626
|
bounds: box,
|
|
1539
|
-
labelOffsetX:
|
|
1540
|
-
labelOffsetY:
|
|
1627
|
+
labelOffsetX: chunkCXL254BT_cjs.finite(object.labelOffsetX, 0),
|
|
1628
|
+
labelOffsetY: chunkCXL254BT_cjs.finite(object.labelOffsetY, 0)
|
|
1541
1629
|
},
|
|
1542
1630
|
style: { ...common.style, fill: { kind: "none" } }
|
|
1543
1631
|
};
|
|
@@ -1549,9 +1637,9 @@ var LABEL_PADDING_Y = 3;
|
|
|
1549
1637
|
var LABEL_CHAR_WIDTH = 6.5;
|
|
1550
1638
|
function labelPlacement(context) {
|
|
1551
1639
|
const { object } = context;
|
|
1552
|
-
const anchor =
|
|
1553
|
-
const bottomY = anchor.y - LABEL_GAP +
|
|
1554
|
-
return { anchor, centerX: anchor.x +
|
|
1640
|
+
const anchor = chunkCXL254BT_cjs.isometricTopFaceCenter(object);
|
|
1641
|
+
const bottomY = anchor.y - LABEL_GAP + chunkCXL254BT_cjs.finite(object.labelOffsetY, 0);
|
|
1642
|
+
return { anchor, centerX: anchor.x + chunkCXL254BT_cjs.finite(object.labelOffsetX, 0), topY: bottomY - LABEL_HEIGHT, bottomY };
|
|
1555
1643
|
}
|
|
1556
1644
|
function labelTextNode(context, placement, text) {
|
|
1557
1645
|
const { object, order, rotation, rotationCenter, box } = context;
|
|
@@ -1566,7 +1654,7 @@ function labelTextNode(context, placement, text) {
|
|
|
1566
1654
|
width: box.width,
|
|
1567
1655
|
height: LABEL_HEIGHT,
|
|
1568
1656
|
lines: [text],
|
|
1569
|
-
fontFamily:
|
|
1657
|
+
fontFamily: chunkCXL254BT_cjs.DEFAULT_FONT,
|
|
1570
1658
|
fontSize: 12,
|
|
1571
1659
|
fontWeight: "normal",
|
|
1572
1660
|
color: "#111827",
|
|
@@ -1639,10 +1727,10 @@ function labelNodes(context, text) {
|
|
|
1639
1727
|
}
|
|
1640
1728
|
function buildIsometricObject(object, index) {
|
|
1641
1729
|
const context = isometricContext(object, index);
|
|
1642
|
-
const faces =
|
|
1643
|
-
const cornerRadius = Math.max(0,
|
|
1730
|
+
const faces = chunkCXL254BT_cjs.isometricFaces(object);
|
|
1731
|
+
const cornerRadius = Math.max(0, chunkCXL254BT_cjs.finite(object.cornerRadius, 8));
|
|
1644
1732
|
const silhouette = [faces.top[0], faces.top[1], faces.right[2], faces.front[2], faces.front[3], faces.top[3]];
|
|
1645
|
-
const hullPath =
|
|
1733
|
+
const hullPath = chunkCXL254BT_cjs.roundedPolygonPath(silhouette, cornerRadius);
|
|
1646
1734
|
const hullClip = { type: "path", d: hullPath };
|
|
1647
1735
|
const groundShadow = groundShadowNode(context, faces);
|
|
1648
1736
|
const seams = seamsNode(context, faces, hullClip);
|
|
@@ -1653,7 +1741,7 @@ function buildIsometricObject(object, index) {
|
|
|
1653
1741
|
}
|
|
1654
1742
|
function buildIsometricObjects(objects) {
|
|
1655
1743
|
return objects.flatMap(
|
|
1656
|
-
(object, index) =>
|
|
1744
|
+
(object, index) => chunkCXL254BT_cjs.tag(
|
|
1657
1745
|
buildIsometricObject(object, index),
|
|
1658
1746
|
"isometric",
|
|
1659
1747
|
object.id,
|
|
@@ -1682,7 +1770,7 @@ function renderEndpointLabel(context, end, labelIndex) {
|
|
|
1682
1770
|
if (!label) {
|
|
1683
1771
|
return [];
|
|
1684
1772
|
}
|
|
1685
|
-
const fontSize =
|
|
1773
|
+
const fontSize = chunkCXL254BT_cjs.finite(context.link.style?.fontSize, 10);
|
|
1686
1774
|
const position = endpointLabelPosition(context.points, end);
|
|
1687
1775
|
const width = 90;
|
|
1688
1776
|
return [
|
|
@@ -1696,7 +1784,7 @@ function renderEndpointLabel(context, end, labelIndex) {
|
|
|
1696
1784
|
width,
|
|
1697
1785
|
height: fontSize * 2,
|
|
1698
1786
|
lines: [label],
|
|
1699
|
-
fontFamily: context.link.style?.fontFamily ??
|
|
1787
|
+
fontFamily: context.link.style?.fontFamily ?? chunkCXL254BT_cjs.DEFAULT_FONT,
|
|
1700
1788
|
fontSize,
|
|
1701
1789
|
fontWeight: "normal",
|
|
1702
1790
|
color: context.color,
|
|
@@ -1726,7 +1814,7 @@ function renderMainLabel(context) {
|
|
|
1726
1814
|
width: context.label.width,
|
|
1727
1815
|
height: context.label.fontSize * 2,
|
|
1728
1816
|
lines: context.label.lines,
|
|
1729
|
-
fontFamily: context.link.style?.fontFamily ??
|
|
1817
|
+
fontFamily: context.link.style?.fontFamily ?? chunkCXL254BT_cjs.DEFAULT_FONT,
|
|
1730
1818
|
fontSize: context.label.fontSize,
|
|
1731
1819
|
fontWeight: "normal",
|
|
1732
1820
|
color: context.color,
|
|
@@ -1780,10 +1868,10 @@ function linkBounds(points, padding) {
|
|
|
1780
1868
|
}
|
|
1781
1869
|
function labelLayout(link, measureText) {
|
|
1782
1870
|
const visible = Boolean(link.showText && link.text);
|
|
1783
|
-
const fontSize =
|
|
1871
|
+
const fontSize = chunkCXL254BT_cjs.finite(link.style?.fontSize, 10);
|
|
1784
1872
|
const width = Math.min(250, Math.max(fontSize * 2, (link.text?.length ?? 0) * fontSize * 0.65 + 10));
|
|
1785
|
-
const metrics = measureText?.(link.style?.fontFamily ??
|
|
1786
|
-
const lines = visible ?
|
|
1873
|
+
const metrics = measureText?.(link.style?.fontFamily ?? chunkCXL254BT_cjs.DEFAULT_FONT, fontSize);
|
|
1874
|
+
const lines = visible ? chunkCXL254BT_cjs.wrapText(link.text ?? "", width, fontSize, metrics) : [];
|
|
1787
1875
|
return { visible, fontSize, width, height: lines.length * fontSize * 1.4, lines };
|
|
1788
1876
|
}
|
|
1789
1877
|
function linkStyle(item, strokeWidth, color2, dash) {
|
|
@@ -1800,26 +1888,26 @@ function linkStyle(item, strokeWidth, color2, dash) {
|
|
|
1800
1888
|
dash,
|
|
1801
1889
|
lineCap: "round",
|
|
1802
1890
|
lineJoin: "round",
|
|
1803
|
-
opacity:
|
|
1891
|
+
opacity: chunkCXL254BT_cjs.finite(link.style?.opacity, 1),
|
|
1804
1892
|
shadow: resolveShadow(link.style?.shadow)
|
|
1805
1893
|
};
|
|
1806
1894
|
}
|
|
1807
1895
|
function createLinkRenderContext(item, index, measureText) {
|
|
1808
1896
|
const { link, from, to } = item;
|
|
1809
1897
|
const pathType = link.style?.pathType ?? "orthogonal";
|
|
1810
|
-
const { points, segments } =
|
|
1811
|
-
const strokeWidth =
|
|
1898
|
+
const { points, segments } = chunkCXL254BT_cjs.calculateLinkRoute(link, from, to, pathType);
|
|
1899
|
+
const strokeWidth = chunkCXL254BT_cjs.finite(link.style?.strokeWidth, 2);
|
|
1812
1900
|
const color2 = getLinkStrokeColor(link.style?.color) || "#64748b";
|
|
1813
1901
|
const label = labelLayout(link, measureText);
|
|
1814
1902
|
const contentDash = getDashArray(strokeWidth, link.style?.strokeStyle ?? "solid");
|
|
1815
|
-
const gap = label.visible && !contentDash ?
|
|
1903
|
+
const gap = label.visible && !contentDash ? chunkCXL254BT_cjs.labelGapDash(points, pathType, label.width, label.height) : null;
|
|
1816
1904
|
const dash = gap ? [gap.dashBefore, gap.gapLength, 1e6] : contentDash;
|
|
1817
1905
|
return {
|
|
1818
1906
|
link,
|
|
1819
1907
|
pathType,
|
|
1820
1908
|
points,
|
|
1821
1909
|
segments,
|
|
1822
|
-
midpoint:
|
|
1910
|
+
midpoint: chunkCXL254BT_cjs.getLineMidpoint(points, pathType, from, to),
|
|
1823
1911
|
strokeWidth,
|
|
1824
1912
|
bounds: linkBounds(points, strokeWidth + 14),
|
|
1825
1913
|
color: color2,
|
|
@@ -1865,7 +1953,7 @@ function pathData(points, pathType, segments, strokeWidth) {
|
|
|
1865
1953
|
return `M ${points[0]} ${points[1]} C ${points[2]} ${points[3]} ${points[4]} ${points[5]} ${points[6]} ${points[7]}`;
|
|
1866
1954
|
}
|
|
1867
1955
|
if (pathType === "orthogonal" && segments.length > 0) {
|
|
1868
|
-
return
|
|
1956
|
+
return chunkCXL254BT_cjs.roundedOrthogonalPathData(segments, Math.max(16, strokeWidth * 4));
|
|
1869
1957
|
}
|
|
1870
1958
|
return polylinePathData(points);
|
|
1871
1959
|
}
|
|
@@ -1969,7 +2057,7 @@ function buildLink(item, index, measureText) {
|
|
|
1969
2057
|
}
|
|
1970
2058
|
function buildLinks(links, measureText) {
|
|
1971
2059
|
return links.flatMap(
|
|
1972
|
-
(item, index) =>
|
|
2060
|
+
(item, index) => chunkCXL254BT_cjs.tag(
|
|
1973
2061
|
buildLink(item, index, measureText),
|
|
1974
2062
|
"link",
|
|
1975
2063
|
item.link.id,
|
|
@@ -1984,7 +2072,7 @@ function buildFreeformPath(path, index) {
|
|
|
1984
2072
|
if (path.isVisible === false || path.points.length < 2) {
|
|
1985
2073
|
return [];
|
|
1986
2074
|
}
|
|
1987
|
-
const strokeWidth =
|
|
2075
|
+
const strokeWidth = chunkCXL254BT_cjs.finite(path.strokeWidth, 2);
|
|
1988
2076
|
const extra = strokeWidth + 12;
|
|
1989
2077
|
const bounds = {
|
|
1990
2078
|
minX: Math.min(...path.points.map((point) => point.x)) - extra,
|
|
@@ -1992,7 +2080,7 @@ function buildFreeformPath(path, index) {
|
|
|
1992
2080
|
maxX: Math.max(...path.points.map((point) => point.x)) + extra,
|
|
1993
2081
|
maxY: Math.max(...path.points.map((point) => point.y)) + extra
|
|
1994
2082
|
};
|
|
1995
|
-
const tension =
|
|
2083
|
+
const tension = chunkCXL254BT_cjs.finite(path.tension, 0);
|
|
1996
2084
|
const closed = path.closed === true;
|
|
1997
2085
|
return [
|
|
1998
2086
|
{
|
|
@@ -2000,7 +2088,7 @@ function buildFreeformPath(path, index) {
|
|
|
2000
2088
|
id: `path-${path.id}`,
|
|
2001
2089
|
order: 3e4 + index,
|
|
2002
2090
|
bounds,
|
|
2003
|
-
d:
|
|
2091
|
+
d: chunkCXL254BT_cjs.freeformPathData({ points: path.points, tension, closed }),
|
|
2004
2092
|
markerStart: path.startMarker,
|
|
2005
2093
|
markerEnd: path.endMarker,
|
|
2006
2094
|
detail: {
|
|
@@ -2016,13 +2104,13 @@ function buildFreeformPath(path, index) {
|
|
|
2016
2104
|
dash: path.dash?.length ? path.dash : void 0,
|
|
2017
2105
|
lineCap: "round",
|
|
2018
2106
|
lineJoin: "round",
|
|
2019
|
-
opacity:
|
|
2107
|
+
opacity: chunkCXL254BT_cjs.finite(path.opacity, 1)
|
|
2020
2108
|
}
|
|
2021
2109
|
}
|
|
2022
2110
|
];
|
|
2023
2111
|
}
|
|
2024
2112
|
function buildFreeformPaths(paths) {
|
|
2025
|
-
return paths.flatMap((path, index) =>
|
|
2113
|
+
return paths.flatMap((path, index) => chunkCXL254BT_cjs.tag(buildFreeformPath(path, index), "path", path.id, "path", "Path"));
|
|
2026
2114
|
}
|
|
2027
2115
|
|
|
2028
2116
|
// src/renderScene/artifacts/shape/geometry/base.ts
|
|
@@ -2038,7 +2126,7 @@ function shapeNodeBase(context) {
|
|
|
2038
2126
|
|
|
2039
2127
|
// src/renderScene/artifacts/shape/geometry/simple.ts
|
|
2040
2128
|
function renderPath(context) {
|
|
2041
|
-
const path =
|
|
2129
|
+
const path = chunkCXL254BT_cjs.localShapePath(context.shape.shapeType, context.x, context.y, context.width, context.height);
|
|
2042
2130
|
if (!path) {
|
|
2043
2131
|
return [];
|
|
2044
2132
|
}
|
|
@@ -2054,7 +2142,7 @@ function renderBoundedPath(context) {
|
|
|
2054
2142
|
}));
|
|
2055
2143
|
}
|
|
2056
2144
|
function renderRectangle(context) {
|
|
2057
|
-
const rx = context.shape.shapeType === "pill" ?
|
|
2145
|
+
const rx = context.shape.shapeType === "pill" ? chunkCXL254BT_cjs.pillCornerRadius(context.width, context.height) : context.shape.shapeType === "rounded_rectangle" ? chunkCXL254BT_cjs.finite(context.shape.cornerRadius, 8) : 0;
|
|
2058
2146
|
return [
|
|
2059
2147
|
{
|
|
2060
2148
|
...shapeNodeBase(context),
|
|
@@ -2083,7 +2171,7 @@ function renderSymbol(context) {
|
|
|
2083
2171
|
if (!context.shape.symbol || context.shape.symbol.points.length < 2) {
|
|
2084
2172
|
return renderRectangle(context);
|
|
2085
2173
|
}
|
|
2086
|
-
const tension =
|
|
2174
|
+
const tension = chunkCXL254BT_cjs.finite(context.shape.symbol.tension, 0);
|
|
2087
2175
|
const points = context.shape.symbol.points.map(([x, y]) => ({
|
|
2088
2176
|
x: context.x + x * context.width,
|
|
2089
2177
|
y: context.y + y * context.height
|
|
@@ -2092,7 +2180,7 @@ function renderSymbol(context) {
|
|
|
2092
2180
|
{
|
|
2093
2181
|
...shapeNodeBase(context),
|
|
2094
2182
|
type: "path",
|
|
2095
|
-
d:
|
|
2183
|
+
d: chunkCXL254BT_cjs.freeformPathData({ points, tension, closed: true }),
|
|
2096
2184
|
rotationCenter: context.rotationCenter,
|
|
2097
2185
|
detail: {
|
|
2098
2186
|
of: "symbolGeometry",
|
|
@@ -2190,22 +2278,22 @@ function shapeDash(shape, strokeWidth) {
|
|
|
2190
2278
|
}
|
|
2191
2279
|
function shapeStyle(shape, diagnostics) {
|
|
2192
2280
|
const defaults = shapeDefaults(shape, diagnostics);
|
|
2193
|
-
const strokeWidth =
|
|
2281
|
+
const strokeWidth = chunkCXL254BT_cjs.finite(shape.strokeWidth, defaults.strokeWidth);
|
|
2194
2282
|
const shadow = shape.shadowStyle ?? (shape.hasShadow ? { enabled: true, color: "#000000", opacity: 0.25, blur: 10, angle: 45, distance: 5 } : void 0);
|
|
2195
|
-
const angle =
|
|
2283
|
+
const angle = chunkCXL254BT_cjs.finite(shadow?.angle, 45) * Math.PI / 180;
|
|
2196
2284
|
return {
|
|
2197
|
-
fill:
|
|
2198
|
-
stroke:
|
|
2285
|
+
fill: chunkCXL254BT_cjs.paint(shape.fillColor, diagnostics, shape.id),
|
|
2286
|
+
stroke: chunkCXL254BT_cjs.paint(shape.strokeColor, diagnostics, shape.id),
|
|
2199
2287
|
strokeWidth,
|
|
2200
2288
|
dash: shapeDash(shape, strokeWidth),
|
|
2201
2289
|
lineCap: shape.strokeStyle === "dotted" ? "round" : "butt",
|
|
2202
|
-
opacity:
|
|
2290
|
+
opacity: chunkCXL254BT_cjs.finite(shape.opacity, defaults.opacity),
|
|
2203
2291
|
shadow: shadow?.enabled ? {
|
|
2204
2292
|
color: shadow.color ?? "#000000",
|
|
2205
|
-
opacity:
|
|
2206
|
-
blur:
|
|
2207
|
-
dx: Math.cos(angle) *
|
|
2208
|
-
dy: Math.sin(angle) *
|
|
2293
|
+
opacity: chunkCXL254BT_cjs.finite(shadow.opacity, 0.25),
|
|
2294
|
+
blur: chunkCXL254BT_cjs.finite(shadow.blur, 10),
|
|
2295
|
+
dx: Math.cos(angle) * chunkCXL254BT_cjs.finite(shadow.distance, 5),
|
|
2296
|
+
dy: Math.sin(angle) * chunkCXL254BT_cjs.finite(shadow.distance, 5)
|
|
2209
2297
|
} : void 0
|
|
2210
2298
|
};
|
|
2211
2299
|
}
|
|
@@ -2281,11 +2369,11 @@ function renderShapeText(context, strokeWidth, measureText) {
|
|
|
2281
2369
|
if (!shape.text) {
|
|
2282
2370
|
return null;
|
|
2283
2371
|
}
|
|
2284
|
-
const fontSize =
|
|
2372
|
+
const fontSize = chunkCXL254BT_cjs.finite(shape.fontSize, shapeDefaults(shape, []).fontSize);
|
|
2285
2373
|
const padding = shape.isText ? 0 : Math.max(8, strokeWidth * 2);
|
|
2286
|
-
const area = shape.shapeType === "person" ?
|
|
2374
|
+
const area = shape.shapeType === "person" ? chunkCXL254BT_cjs.personLabelArea(x, y, width, height) : { x, y, width, height };
|
|
2287
2375
|
const textWidth = Math.max(0, area.width - padding * 2);
|
|
2288
|
-
const fontFamily2 = shape.fontFamily ||
|
|
2376
|
+
const fontFamily2 = shape.fontFamily || chunkCXL254BT_cjs.DEFAULT_FONT;
|
|
2289
2377
|
const metrics = measureText?.(fontFamily2, fontSize);
|
|
2290
2378
|
const textNode = {
|
|
2291
2379
|
type: "text",
|
|
@@ -2296,7 +2384,7 @@ function renderShapeText(context, strokeWidth, measureText) {
|
|
|
2296
2384
|
y: area.y + padding,
|
|
2297
2385
|
width: textWidth,
|
|
2298
2386
|
height: Math.max(0, area.height - padding * 2),
|
|
2299
|
-
lines:
|
|
2387
|
+
lines: chunkCXL254BT_cjs.wrapText(shape.text, textWidth, fontSize, metrics),
|
|
2300
2388
|
fontFamily: fontFamily2,
|
|
2301
2389
|
fontSize,
|
|
2302
2390
|
fontWeight: shape.fontWeight ?? "normal",
|
|
@@ -2304,12 +2392,12 @@ function renderShapeText(context, strokeWidth, measureText) {
|
|
|
2304
2392
|
color: shape.textColor || "#111827",
|
|
2305
2393
|
align: shape.textAlign ?? "center",
|
|
2306
2394
|
verticalAlign: shape.textVerticalAlign ?? "middle",
|
|
2307
|
-
lineHeight:
|
|
2395
|
+
lineHeight: chunkCXL254BT_cjs.finite(shape.lineHeight, 1.3),
|
|
2308
2396
|
rotation,
|
|
2309
2397
|
rotationCenter
|
|
2310
2398
|
};
|
|
2311
2399
|
if (hasBoldMarkup(shape.text)) {
|
|
2312
|
-
const { measure, spaceWidth } = metrics ??
|
|
2400
|
+
const { measure, spaceWidth } = metrics ?? chunkCXL254BT_cjs.heuristicRichMeasure(fontSize);
|
|
2313
2401
|
textNode.richLines = wrapRichText(shape.text, textWidth, measure, spaceWidth);
|
|
2314
2402
|
}
|
|
2315
2403
|
return textNode;
|
|
@@ -2348,19 +2436,19 @@ function renderDoubleStroke(context, strokeWidth) {
|
|
|
2348
2436
|
return nodes;
|
|
2349
2437
|
}
|
|
2350
2438
|
function createRenderContext(shape, index, diagnostics) {
|
|
2351
|
-
const x =
|
|
2352
|
-
const y =
|
|
2353
|
-
const width = Math.max(0,
|
|
2354
|
-
const height = Math.max(0,
|
|
2355
|
-
const rotation =
|
|
2356
|
-
const strokeWidth =
|
|
2439
|
+
const x = chunkCXL254BT_cjs.finite(shape.x, 0);
|
|
2440
|
+
const y = chunkCXL254BT_cjs.finite(shape.y, 0);
|
|
2441
|
+
const width = Math.max(0, chunkCXL254BT_cjs.finite(shape.width, 100));
|
|
2442
|
+
const height = Math.max(0, chunkCXL254BT_cjs.finite(shape.height, 100));
|
|
2443
|
+
const rotation = chunkCXL254BT_cjs.finite(shape.rotation, 0);
|
|
2444
|
+
const strokeWidth = chunkCXL254BT_cjs.finite(shape.strokeWidth, 2);
|
|
2357
2445
|
return {
|
|
2358
2446
|
strokeWidth,
|
|
2359
2447
|
context: {
|
|
2360
2448
|
shape,
|
|
2361
2449
|
id: `shape-${shape.id}`,
|
|
2362
2450
|
order: 1e4 + index,
|
|
2363
|
-
bounds:
|
|
2451
|
+
bounds: chunkCXL254BT_cjs.rotatedBounds({ x, y, width, height }, rotation, strokeWidth + (shape.hasShadow ? 20 : 2)),
|
|
2364
2452
|
rotation,
|
|
2365
2453
|
rotationCenter: { x: x + width / 2, y: y + height / 2 },
|
|
2366
2454
|
style: shapeStyle(shape, diagnostics),
|
|
@@ -2413,7 +2501,7 @@ function buildShape(shape, index, diagnostics, measureText) {
|
|
|
2413
2501
|
}
|
|
2414
2502
|
function buildShapes(shapes, diagnostics, measureText) {
|
|
2415
2503
|
return shapes.flatMap(
|
|
2416
|
-
(shape, index) =>
|
|
2504
|
+
(shape, index) => chunkCXL254BT_cjs.tag(
|
|
2417
2505
|
buildShape(shape, index, diagnostics, measureText),
|
|
2418
2506
|
"shape",
|
|
2419
2507
|
shape.id,
|
|
@@ -2445,7 +2533,8 @@ var DEFAULT_ROLLING_NUMBER_STYLE = {
|
|
|
2445
2533
|
fontFamily: "'Roboto Mono', 'SFMono-Regular', Consolas, monospace",
|
|
2446
2534
|
variant: "flip",
|
|
2447
2535
|
motion: "roll",
|
|
2448
|
-
fontWeight: "300"
|
|
2536
|
+
fontWeight: "300",
|
|
2537
|
+
fontSize: 0
|
|
2449
2538
|
};
|
|
2450
2539
|
function resolveRollingNumberStyle(style) {
|
|
2451
2540
|
return {
|
|
@@ -2456,23 +2545,24 @@ function resolveRollingNumberStyle(style) {
|
|
|
2456
2545
|
fontFamily: style.fontFamily ?? DEFAULT_ROLLING_NUMBER_STYLE.fontFamily,
|
|
2457
2546
|
variant: style.variant ?? DEFAULT_ROLLING_NUMBER_STYLE.variant,
|
|
2458
2547
|
motion: style.motion ?? DEFAULT_ROLLING_NUMBER_STYLE.motion,
|
|
2459
|
-
fontWeight: style.fontWeight ?? DEFAULT_ROLLING_NUMBER_STYLE.fontWeight
|
|
2548
|
+
fontWeight: style.fontWeight ?? DEFAULT_ROLLING_NUMBER_STYLE.fontWeight,
|
|
2549
|
+
fontSize: style.fontSize ?? DEFAULT_ROLLING_NUMBER_STYLE.fontSize
|
|
2460
2550
|
};
|
|
2461
2551
|
}
|
|
2462
2552
|
|
|
2463
2553
|
// src/renderScene/artifacts/widget.ts
|
|
2464
2554
|
function buildRollingNumber(widget, index) {
|
|
2465
|
-
const x =
|
|
2466
|
-
const y =
|
|
2467
|
-
const width = Math.max(0,
|
|
2468
|
-
const height = Math.max(0,
|
|
2469
|
-
const rotation =
|
|
2555
|
+
const x = chunkCXL254BT_cjs.finite(widget.x, 0);
|
|
2556
|
+
const y = chunkCXL254BT_cjs.finite(widget.y, 0);
|
|
2557
|
+
const width = Math.max(0, chunkCXL254BT_cjs.finite(widget.width, 160));
|
|
2558
|
+
const height = Math.max(0, chunkCXL254BT_cjs.finite(widget.height, 90));
|
|
2559
|
+
const rotation = chunkCXL254BT_cjs.finite(widget.rotation, 0);
|
|
2470
2560
|
return [
|
|
2471
2561
|
{
|
|
2472
2562
|
id: `widget-${widget.id}`,
|
|
2473
2563
|
type: "rolling-number",
|
|
2474
2564
|
order: 1e4 + index,
|
|
2475
|
-
bounds:
|
|
2565
|
+
bounds: chunkCXL254BT_cjs.rotatedBounds({ x, y, width, height }, rotation, 2),
|
|
2476
2566
|
x,
|
|
2477
2567
|
y,
|
|
2478
2568
|
width,
|
|
@@ -2480,26 +2570,26 @@ function buildRollingNumber(widget, index) {
|
|
|
2480
2570
|
rotation,
|
|
2481
2571
|
value: formatRollingNumber(widget.value, widget.digits),
|
|
2482
2572
|
digits: widget.digits,
|
|
2483
|
-
duration: Math.max(0,
|
|
2573
|
+
duration: Math.max(0, chunkCXL254BT_cjs.finite(widget.duration, 420)),
|
|
2484
2574
|
label: widget.label,
|
|
2485
2575
|
widgetStyle: resolveRollingNumberStyle(widget.style)
|
|
2486
2576
|
}
|
|
2487
2577
|
];
|
|
2488
2578
|
}
|
|
2489
2579
|
function buildTickScale(widget, index) {
|
|
2490
|
-
const x =
|
|
2491
|
-
const y =
|
|
2492
|
-
const width = Math.max(0,
|
|
2493
|
-
const height = Math.max(0,
|
|
2494
|
-
const rotation =
|
|
2495
|
-
const max =
|
|
2496
|
-
const progress = Math.min(1, Math.max(0,
|
|
2580
|
+
const x = chunkCXL254BT_cjs.finite(widget.x, 0);
|
|
2581
|
+
const y = chunkCXL254BT_cjs.finite(widget.y, 0);
|
|
2582
|
+
const width = Math.max(0, chunkCXL254BT_cjs.finite(widget.width, 200));
|
|
2583
|
+
const height = Math.max(0, chunkCXL254BT_cjs.finite(widget.height, 200));
|
|
2584
|
+
const rotation = chunkCXL254BT_cjs.finite(widget.rotation, 0);
|
|
2585
|
+
const max = chunkCXL254BT_cjs.finite(widget.max, 100) || 100;
|
|
2586
|
+
const progress = Math.min(1, Math.max(0, chunkCXL254BT_cjs.finite(Number(widget.value), 0) / max));
|
|
2497
2587
|
const nodes = [
|
|
2498
2588
|
{
|
|
2499
2589
|
id: `widget-${widget.id}`,
|
|
2500
2590
|
type: "shader-surface",
|
|
2501
2591
|
order: 1e4 + index,
|
|
2502
|
-
bounds:
|
|
2592
|
+
bounds: chunkCXL254BT_cjs.rotatedBounds({ x, y, width, height }, rotation, 2),
|
|
2503
2593
|
x,
|
|
2504
2594
|
y,
|
|
2505
2595
|
width,
|
|
@@ -2516,12 +2606,12 @@ function buildTickScale(widget, index) {
|
|
|
2516
2606
|
}
|
|
2517
2607
|
function buildTickLabels(widget, box) {
|
|
2518
2608
|
const labels = widget.labels ?? {};
|
|
2519
|
-
const ticks = Math.max(1,
|
|
2520
|
-
const major = Math.max(1,
|
|
2521
|
-
const start =
|
|
2522
|
-
const sweep =
|
|
2523
|
-
const radius =
|
|
2524
|
-
const fontSize =
|
|
2609
|
+
const ticks = Math.max(1, chunkCXL254BT_cjs.finite(Number(widget.parameters.ticks), 48));
|
|
2610
|
+
const major = Math.max(1, chunkCXL254BT_cjs.finite(Number(widget.parameters.major), 5));
|
|
2611
|
+
const start = chunkCXL254BT_cjs.finite(Number(widget.parameters.start), 225) * Math.PI / 180;
|
|
2612
|
+
const sweep = chunkCXL254BT_cjs.finite(Number(widget.parameters.sweep), 270) * Math.PI / 180;
|
|
2613
|
+
const radius = chunkCXL254BT_cjs.finite(Number(widget.parameters.radius), 0.9) + chunkCXL254BT_cjs.finite(labels.offset, 0.08);
|
|
2614
|
+
const fontSize = chunkCXL254BT_cjs.finite(labels.size, 12);
|
|
2525
2615
|
const centerX = box.x + box.width / 2;
|
|
2526
2616
|
const centerY = box.y + box.height / 2;
|
|
2527
2617
|
const count = Math.floor(ticks / major);
|
|
@@ -2536,10 +2626,10 @@ function buildTickLabels(widget, box) {
|
|
|
2536
2626
|
id: `widget-${widget.id}-label-${step}`,
|
|
2537
2627
|
type: "text",
|
|
2538
2628
|
order: box.order + 0.1,
|
|
2539
|
-
bounds:
|
|
2629
|
+
bounds: chunkCXL254BT_cjs.rotatedBounds(labelBox, 0, 2),
|
|
2540
2630
|
...labelBox,
|
|
2541
2631
|
lines: [String(Math.round(box.max * fraction * 10) / 10)],
|
|
2542
|
-
fontFamily: labels.fontFamily ||
|
|
2632
|
+
fontFamily: labels.fontFamily || chunkCXL254BT_cjs.DEFAULT_FONT,
|
|
2543
2633
|
fontSize,
|
|
2544
2634
|
fontWeight: labels.weight ?? "normal",
|
|
2545
2635
|
color: labels.color || "#8f95c4",
|
|
@@ -2551,20 +2641,20 @@ function buildTickLabels(widget, box) {
|
|
|
2551
2641
|
return nodes;
|
|
2552
2642
|
}
|
|
2553
2643
|
function buildRuler(widget, index) {
|
|
2554
|
-
const x =
|
|
2555
|
-
const y =
|
|
2556
|
-
const width = Math.max(0,
|
|
2557
|
-
const height = Math.max(0,
|
|
2558
|
-
const rotation =
|
|
2559
|
-
const min =
|
|
2560
|
-
const max =
|
|
2561
|
-
const progress = max === min ? 0 : Math.min(1, Math.max(0, (
|
|
2644
|
+
const x = chunkCXL254BT_cjs.finite(widget.x, 0);
|
|
2645
|
+
const y = chunkCXL254BT_cjs.finite(widget.y, 0);
|
|
2646
|
+
const width = Math.max(0, chunkCXL254BT_cjs.finite(widget.width, 120));
|
|
2647
|
+
const height = Math.max(0, chunkCXL254BT_cjs.finite(widget.height, 360));
|
|
2648
|
+
const rotation = chunkCXL254BT_cjs.finite(widget.rotation, 0);
|
|
2649
|
+
const min = chunkCXL254BT_cjs.finite(widget.min, 0);
|
|
2650
|
+
const max = chunkCXL254BT_cjs.finite(widget.max, 100);
|
|
2651
|
+
const progress = max === min ? 0 : Math.min(1, Math.max(0, (chunkCXL254BT_cjs.finite(Number(widget.value), min) - min) / (max - min)));
|
|
2562
2652
|
const nodes = [
|
|
2563
2653
|
{
|
|
2564
2654
|
id: `widget-${widget.id}`,
|
|
2565
2655
|
type: "shader-surface",
|
|
2566
2656
|
order: 1e4 + index,
|
|
2567
|
-
bounds:
|
|
2657
|
+
bounds: chunkCXL254BT_cjs.rotatedBounds({ x, y, width, height }, rotation, 2),
|
|
2568
2658
|
x,
|
|
2569
2659
|
y,
|
|
2570
2660
|
width,
|
|
@@ -2582,14 +2672,14 @@ function buildRuler(widget, index) {
|
|
|
2582
2672
|
function buildRulerLabels(widget, box) {
|
|
2583
2673
|
const labels = widget.labels ?? {};
|
|
2584
2674
|
const horizontal = widget.parameters.axis === "horizontal";
|
|
2585
|
-
const ticks = Math.max(1,
|
|
2586
|
-
const major = Math.max(1,
|
|
2587
|
-
const inset =
|
|
2588
|
-
const line =
|
|
2675
|
+
const ticks = Math.max(1, chunkCXL254BT_cjs.finite(Number(widget.parameters.ticks), 50));
|
|
2676
|
+
const major = Math.max(1, chunkCXL254BT_cjs.finite(Number(widget.parameters.major), 5));
|
|
2677
|
+
const inset = chunkCXL254BT_cjs.finite(Number(widget.parameters.inset), 0.05) > 0 ? chunkCXL254BT_cjs.finite(Number(widget.parameters.inset), 0.05) : 0.05;
|
|
2678
|
+
const line = chunkCXL254BT_cjs.finite(Number(widget.parameters.line), 0.7) > 0 ? chunkCXL254BT_cjs.finite(Number(widget.parameters.line), 0.7) : 0.7;
|
|
2589
2679
|
const across = horizontal ? box.height : box.width;
|
|
2590
|
-
const tickLength = (
|
|
2591
|
-
const edge = line * across - 0.12 * across - tickLength -
|
|
2592
|
-
const fontSize =
|
|
2680
|
+
const tickLength = (chunkCXL254BT_cjs.finite(Number(widget.parameters.length), 0.1) > 0 ? chunkCXL254BT_cjs.finite(Number(widget.parameters.length), 0.1) : 0.1) * across * 1.9;
|
|
2681
|
+
const edge = line * across - 0.12 * across - tickLength - chunkCXL254BT_cjs.finite(labels.offset, 0.04) * across;
|
|
2682
|
+
const fontSize = chunkCXL254BT_cjs.finite(labels.size, 12);
|
|
2593
2683
|
const count = Math.floor(ticks / major);
|
|
2594
2684
|
const nodes = [];
|
|
2595
2685
|
for (let step = 0; step <= count; step += 1) {
|
|
@@ -2600,10 +2690,10 @@ function buildRulerLabels(widget, box) {
|
|
|
2600
2690
|
id: `widget-${widget.id}-label-${step}`,
|
|
2601
2691
|
type: "text",
|
|
2602
2692
|
order: box.order + 0.1,
|
|
2603
|
-
bounds:
|
|
2693
|
+
bounds: chunkCXL254BT_cjs.rotatedBounds(labelBox, 0, 2),
|
|
2604
2694
|
...labelBox,
|
|
2605
2695
|
lines: [String(Math.round((box.min + (box.max - box.min) * fraction) * 10) / 10)],
|
|
2606
|
-
fontFamily: labels.fontFamily ||
|
|
2696
|
+
fontFamily: labels.fontFamily || chunkCXL254BT_cjs.DEFAULT_FONT,
|
|
2607
2697
|
fontSize,
|
|
2608
2698
|
fontWeight: labels.weight ?? "normal",
|
|
2609
2699
|
color: labels.color || "#8f95c4",
|
|
@@ -2616,7 +2706,7 @@ function buildRulerLabels(widget, box) {
|
|
|
2616
2706
|
}
|
|
2617
2707
|
function buildWidgets(widgets) {
|
|
2618
2708
|
return widgets.flatMap(
|
|
2619
|
-
(widget, index) =>
|
|
2709
|
+
(widget, index) => chunkCXL254BT_cjs.tag(
|
|
2620
2710
|
widget.type === "tickScale" ? buildTickScale(widget, index) : widget.type === "ruler" ? buildRuler(widget, index) : buildRollingNumber(widget, index),
|
|
2621
2711
|
"widget",
|
|
2622
2712
|
widget.id,
|
|
@@ -2633,7 +2723,7 @@ function buildXAxisLabel(chart, layout, order) {
|
|
|
2633
2723
|
return null;
|
|
2634
2724
|
}
|
|
2635
2725
|
return {
|
|
2636
|
-
...
|
|
2726
|
+
...chunkCXL254BT_cjs.chartText({
|
|
2637
2727
|
role: "axis",
|
|
2638
2728
|
id: `chart-x-label-${chart.id}`,
|
|
2639
2729
|
order,
|
|
@@ -2643,7 +2733,7 @@ function buildXAxisLabel(chart, layout, order) {
|
|
|
2643
2733
|
chart,
|
|
2644
2734
|
align: "center"
|
|
2645
2735
|
}),
|
|
2646
|
-
prop:
|
|
2736
|
+
prop: chunkCXL254BT_cjs.axisLabelProp("x")
|
|
2647
2737
|
};
|
|
2648
2738
|
}
|
|
2649
2739
|
function buildYAxisLabel(chart, layout, order) {
|
|
@@ -2651,7 +2741,7 @@ function buildYAxisLabel(chart, layout, order) {
|
|
|
2651
2741
|
return null;
|
|
2652
2742
|
}
|
|
2653
2743
|
return {
|
|
2654
|
-
...
|
|
2744
|
+
...chunkCXL254BT_cjs.chartText({
|
|
2655
2745
|
role: "axis",
|
|
2656
2746
|
id: `chart-y-label-${chart.id}`,
|
|
2657
2747
|
order,
|
|
@@ -2667,7 +2757,7 @@ function buildYAxisLabel(chart, layout, order) {
|
|
|
2667
2757
|
align: "center",
|
|
2668
2758
|
rotation: -90
|
|
2669
2759
|
}),
|
|
2670
|
-
prop:
|
|
2760
|
+
prop: chunkCXL254BT_cjs.axisLabelProp("y")
|
|
2671
2761
|
};
|
|
2672
2762
|
}
|
|
2673
2763
|
function buildAxisLabels(chart, layout, order) {
|
|
@@ -2690,7 +2780,7 @@ function buildBoxplotSeriesYAxisTicks(chart, layout, order) {
|
|
|
2690
2780
|
return chart.series.map((series, index) => {
|
|
2691
2781
|
const centerY = layout.plot.y + (index + 0.5) * slotWidth;
|
|
2692
2782
|
return {
|
|
2693
|
-
...
|
|
2783
|
+
...chunkCXL254BT_cjs.chartText({
|
|
2694
2784
|
role: "axis",
|
|
2695
2785
|
id: `chart-y-tick-${chart.id}-${index}`,
|
|
2696
2786
|
order: order + index,
|
|
@@ -2700,7 +2790,7 @@ function buildBoxplotSeriesYAxisTicks(chart, layout, order) {
|
|
|
2700
2790
|
chart,
|
|
2701
2791
|
align: "right"
|
|
2702
2792
|
}),
|
|
2703
|
-
prop:
|
|
2793
|
+
prop: chunkCXL254BT_cjs.seriesLabelProp(series.id)
|
|
2704
2794
|
};
|
|
2705
2795
|
});
|
|
2706
2796
|
}
|
|
@@ -2726,7 +2816,7 @@ function isStackedLegendPosition(position) {
|
|
|
2726
2816
|
return position === "bottomLeft" || position === "bottomRight";
|
|
2727
2817
|
}
|
|
2728
2818
|
function legendItemWidths(chart) {
|
|
2729
|
-
return legendSeries(chart).map((item) => Math.max(42, item.label.length *
|
|
2819
|
+
return legendSeries(chart).map((item) => Math.max(42, item.label.length * chunkCXL254BT_cjs.finite(chart.fontSize, 12) * 0.58 + 22));
|
|
2730
2820
|
}
|
|
2731
2821
|
function stackedLegendColumnWidth(chart) {
|
|
2732
2822
|
const widths = legendItemWidths(chart);
|
|
@@ -2779,9 +2869,9 @@ function renderLegendItem(render2, item) {
|
|
|
2779
2869
|
}
|
|
2780
2870
|
function createLegendSwatch(render2, item) {
|
|
2781
2871
|
const { chart, bounds, diagnostics } = render2;
|
|
2782
|
-
const fallback =
|
|
2872
|
+
const fallback = chunkCXL254BT_cjs.CHART_COLORS[item.seriesIndex % chunkCXL254BT_cjs.CHART_COLORS.length];
|
|
2783
2873
|
const solidOnly = chart.chartType === "line";
|
|
2784
|
-
const color2 = solidOnly ?
|
|
2874
|
+
const color2 = solidOnly ? chunkCXL254BT_cjs.representativeColor(item.series.color, fallback) : item.series.color ?? fallback;
|
|
2785
2875
|
return {
|
|
2786
2876
|
type: "rect",
|
|
2787
2877
|
id: `chart-legend-swatch-${chart.id}-${item.series.id}`,
|
|
@@ -2792,16 +2882,16 @@ function createLegendSwatch(render2, item) {
|
|
|
2792
2882
|
width: 10,
|
|
2793
2883
|
height: 10,
|
|
2794
2884
|
rx: 3,
|
|
2795
|
-
prop:
|
|
2885
|
+
prop: chunkCXL254BT_cjs.seriesColorProp(item.series.id),
|
|
2796
2886
|
propKind: "color",
|
|
2797
2887
|
propSolidOnly: solidOnly,
|
|
2798
|
-
style: { fill:
|
|
2888
|
+
style: { fill: chunkCXL254BT_cjs.paint(color2, diagnostics, chart.id) }
|
|
2799
2889
|
};
|
|
2800
2890
|
}
|
|
2801
2891
|
function createLegendLabel(render2, item) {
|
|
2802
2892
|
const { chart, bounds } = render2;
|
|
2803
2893
|
return {
|
|
2804
|
-
...
|
|
2894
|
+
...chunkCXL254BT_cjs.chartText({
|
|
2805
2895
|
role: "legend",
|
|
2806
2896
|
id: `chart-legend-${chart.id}-${item.series.id}`,
|
|
2807
2897
|
order: item.order + 1,
|
|
@@ -2810,7 +2900,7 @@ function createLegendLabel(render2, item) {
|
|
|
2810
2900
|
text: item.series.label,
|
|
2811
2901
|
chart
|
|
2812
2902
|
}),
|
|
2813
|
-
prop:
|
|
2903
|
+
prop: chunkCXL254BT_cjs.seriesLabelProp(item.series.id)
|
|
2814
2904
|
};
|
|
2815
2905
|
}
|
|
2816
2906
|
|
|
@@ -2829,13 +2919,13 @@ function hasCartesianDecorations(chart) {
|
|
|
2829
2919
|
return !CHARTS_WITHOUT_CARTESIAN_DECORATIONS.has(chart.chartType);
|
|
2830
2920
|
}
|
|
2831
2921
|
function tickOffset(chart) {
|
|
2832
|
-
return hasCartesianDecorations(chart) ? Math.max(0,
|
|
2922
|
+
return hasCartesianDecorations(chart) ? Math.max(0, chunkCXL254BT_cjs.finite(chart.tickLength, 0)) : 0;
|
|
2833
2923
|
}
|
|
2834
2924
|
function isHorizontalBoxplot(chart) {
|
|
2835
2925
|
return chart.chartType === "boxplot" && chart.config?.orientation === "horizontal";
|
|
2836
2926
|
}
|
|
2837
2927
|
function boxplotCategoryLabelWidth(chart) {
|
|
2838
|
-
const fontSize =
|
|
2928
|
+
const fontSize = chunkCXL254BT_cjs.finite(chart.fontSize, 12);
|
|
2839
2929
|
const longest = Math.max(0, ...chart.series.map((series) => (series.label || series.id).length));
|
|
2840
2930
|
return longest * fontSize * 0.58 + 16;
|
|
2841
2931
|
}
|
|
@@ -2847,7 +2937,7 @@ function treemapSideLegendSide(chart, showLegend) {
|
|
|
2847
2937
|
return chart.legendPosition === "left" ? "left" : chart.legendPosition === "right" ? "right" : null;
|
|
2848
2938
|
}
|
|
2849
2939
|
function barCategoryLabelWidth(chart) {
|
|
2850
|
-
const fontSize =
|
|
2940
|
+
const fontSize = chunkCXL254BT_cjs.finite(chart.axisFontSize ?? chart.fontSize, 12);
|
|
2851
2941
|
const categories = chart.config?.categories ?? [];
|
|
2852
2942
|
return Math.max(0, ...categories.map((category) => category.length)) * fontSize * 0.58 + 16;
|
|
2853
2943
|
}
|
|
@@ -2855,7 +2945,7 @@ function leftLabelWidth(chart) {
|
|
|
2855
2945
|
if (isHorizontalBoxplot(chart)) {
|
|
2856
2946
|
return boxplotCategoryLabelWidth(chart);
|
|
2857
2947
|
}
|
|
2858
|
-
if (
|
|
2948
|
+
if (chunkCXL254BT_cjs.isHorizontalBar(chart)) {
|
|
2859
2949
|
return chart.categoryAlign === "left" || chart.categoryAlign === "inside" ? 20 : barCategoryLabelWidth(chart);
|
|
2860
2950
|
}
|
|
2861
2951
|
if (chart.showValueAxis === false) {
|
|
@@ -2876,17 +2966,17 @@ function decorations(chart) {
|
|
|
2876
2966
|
const padLeft = tick + (showLabels ? leftLabelWidth(chart) : 12) + (legendPosition === "bottomLeft" ? sideColumnWidth : 0) + (treemapSide === "left" ? TREEMAP_SIDE_LEGEND_WIDTH : 0);
|
|
2877
2967
|
const padRight = 24 + (legendPosition === "bottomRight" ? sideColumnWidth : 0) + (treemapSide === "right" ? TREEMAP_SIDE_LEGEND_WIDTH : 0);
|
|
2878
2968
|
const valueRow = chart.chartType === "bar" && chart.config?.showBarLabels === true && chart.config.barLabelPosition === "axis";
|
|
2879
|
-
const horizontalValueAxis =
|
|
2880
|
-
const basePadBottom = showLabels ?
|
|
2969
|
+
const horizontalValueAxis = chunkCXL254BT_cjs.isHorizontalBar(chart) && chart.showValueAxis !== false;
|
|
2970
|
+
const basePadBottom = showLabels ? chunkCXL254BT_cjs.isHorizontalBar(chart) ? horizontalValueAxis ? 34 : 12 : (chart.axisX.label ? 52 : 34) + (valueRow ? 18 : 0) : 12;
|
|
2881
2971
|
const hasColorBar = chart.chartType === "field" && showLegend && Boolean(chart.config?.scale?.stops.length);
|
|
2882
2972
|
const legendAtBottomRow = hasLegendItems && !legendAtTop && !legendStacked;
|
|
2883
2973
|
const padBottom = tick + basePadBottom + (hasColorBar ? 44 : 0) + (legendAtBottomRow ? 16 + LEGEND_ROW_HEIGHT : 0);
|
|
2884
|
-
const titleHeight = chart.title ? Math.max(44, 20 +
|
|
2974
|
+
const titleHeight = chart.title ? Math.max(44, 20 + chunkCXL254BT_cjs.finite(chart.titleSize, 14) * 1.6) : 0;
|
|
2885
2975
|
const padTop = titleHeight || (legendAtTop && hasLegendItems ? 44 : 24);
|
|
2886
2976
|
return {
|
|
2887
|
-
bounds:
|
|
2977
|
+
bounds: chunkCXL254BT_cjs.boxBounds(
|
|
2888
2978
|
{ x: chart.x, y: chart.y, width: chart.width, height: chart.height },
|
|
2889
|
-
|
|
2979
|
+
chunkCXL254BT_cjs.finite(chart.strokeWidth, 1) + 2
|
|
2890
2980
|
),
|
|
2891
2981
|
plot: {
|
|
2892
2982
|
x: chart.x + padLeft,
|
|
@@ -2908,19 +2998,19 @@ function categoryLabels(chart, count) {
|
|
|
2908
2998
|
return Array.from({ length: count }, (_value, index) => String(index + 1));
|
|
2909
2999
|
}
|
|
2910
3000
|
function buildCategoricalXAxisTicks(chart, layout, order) {
|
|
2911
|
-
const count =
|
|
3001
|
+
const count = chunkCXL254BT_cjs.barCategoryCount(chart);
|
|
2912
3002
|
const slotWidth = layout.plot.width / count;
|
|
2913
3003
|
const labels = categoryLabels(chart, count);
|
|
2914
3004
|
const editable = Boolean(chart.config?.categories?.length);
|
|
2915
3005
|
const left = chart.categoryAlign === "left";
|
|
2916
3006
|
const groupGap = left ? Math.min(
|
|
2917
|
-
Math.max(0,
|
|
3007
|
+
Math.max(0, chunkCXL254BT_cjs.finite(chart.config?.barGroupGap, 8)),
|
|
2918
3008
|
Math.max(0, slotWidth - 1)
|
|
2919
3009
|
) : 0;
|
|
2920
3010
|
return Array.from({ length: count }, (_value, index) => {
|
|
2921
3011
|
const centerX = layout.plot.x + (index + 0.5) * slotWidth;
|
|
2922
3012
|
return {
|
|
2923
|
-
...
|
|
3013
|
+
...chunkCXL254BT_cjs.chartText({
|
|
2924
3014
|
role: "axis",
|
|
2925
3015
|
id: `chart-x-tick-${chart.id}-${index}`,
|
|
2926
3016
|
order: order + index,
|
|
@@ -2935,7 +3025,7 @@ function buildCategoricalXAxisTicks(chart, layout, order) {
|
|
|
2935
3025
|
chart,
|
|
2936
3026
|
align: left ? "left" : "center"
|
|
2937
3027
|
}),
|
|
2938
|
-
prop: editable ?
|
|
3028
|
+
prop: editable ? chunkCXL254BT_cjs.categoryProp(index) : void 0
|
|
2939
3029
|
};
|
|
2940
3030
|
});
|
|
2941
3031
|
}
|
|
@@ -2945,7 +3035,7 @@ function buildSeriesXAxisTicks(chart, layout, order) {
|
|
|
2945
3035
|
return chart.series.map((series, index) => {
|
|
2946
3036
|
const centerX = layout.plot.x + (index + 0.5) * slotWidth;
|
|
2947
3037
|
return {
|
|
2948
|
-
...
|
|
3038
|
+
...chunkCXL254BT_cjs.chartText({
|
|
2949
3039
|
role: "axis",
|
|
2950
3040
|
id: `chart-x-tick-${chart.id}-${index}`,
|
|
2951
3041
|
order: order + index,
|
|
@@ -2960,16 +3050,16 @@ function buildSeriesXAxisTicks(chart, layout, order) {
|
|
|
2960
3050
|
chart,
|
|
2961
3051
|
align: "center"
|
|
2962
3052
|
}),
|
|
2963
|
-
prop:
|
|
3053
|
+
prop: chunkCXL254BT_cjs.seriesLabelProp(series.id)
|
|
2964
3054
|
};
|
|
2965
3055
|
});
|
|
2966
3056
|
}
|
|
2967
3057
|
|
|
2968
3058
|
// src/renderScene/charts/decorations/numericXAxis.ts
|
|
2969
3059
|
function buildNumericXAxisTicks(chart, layout, order) {
|
|
2970
|
-
return
|
|
2971
|
-
const x = layout.plot.x +
|
|
2972
|
-
return
|
|
3060
|
+
return chunkCXL254BT_cjs.chartTicks(chart.axisX).map((tick, index) => {
|
|
3061
|
+
const x = layout.plot.x + chunkCXL254BT_cjs.mapChartValue(tick, chart.axisX, layout.plot.width);
|
|
3062
|
+
return chunkCXL254BT_cjs.chartText({
|
|
2973
3063
|
role: "axis",
|
|
2974
3064
|
id: `chart-x-tick-${chart.id}-${tick}`,
|
|
2975
3065
|
order: order + index,
|
|
@@ -2984,9 +3074,9 @@ function buildNumericXAxisTicks(chart, layout, order) {
|
|
|
2984
3074
|
|
|
2985
3075
|
// src/renderScene/charts/decorations/numericYAxis.ts
|
|
2986
3076
|
function buildNumericYAxisTicks(chart, layout, order) {
|
|
2987
|
-
return
|
|
2988
|
-
const y = layout.plot.y + layout.plot.height -
|
|
2989
|
-
return
|
|
3077
|
+
return chunkCXL254BT_cjs.chartTicks(chart.axisY).map((tick, index) => {
|
|
3078
|
+
const y = layout.plot.y + layout.plot.height - chunkCXL254BT_cjs.mapChartValue(tick, chart.axisY, layout.plot.height);
|
|
3079
|
+
return chunkCXL254BT_cjs.chartText({
|
|
2990
3080
|
role: "axis",
|
|
2991
3081
|
id: `chart-y-tick-${chart.id}-${tick}`,
|
|
2992
3082
|
order: order + index,
|
|
@@ -3021,10 +3111,10 @@ function buildYAxisTicks(chart, layout, order) {
|
|
|
3021
3111
|
function xTickPositions(chart, layout) {
|
|
3022
3112
|
const { plot } = layout;
|
|
3023
3113
|
if (chart.chartType === "bar") {
|
|
3024
|
-
const count =
|
|
3114
|
+
const count = chunkCXL254BT_cjs.barCategoryCount(chart);
|
|
3025
3115
|
return Array.from({ length: count }, (_value, index) => plot.x + (index + 0.5) * plot.width / count);
|
|
3026
3116
|
}
|
|
3027
|
-
return
|
|
3117
|
+
return chunkCXL254BT_cjs.chartTicks(chart.axisX).map((tick) => plot.x + chunkCXL254BT_cjs.mapChartValue(tick, chart.axisX, plot.width));
|
|
3028
3118
|
}
|
|
3029
3119
|
function axisLineDash(chart, width) {
|
|
3030
3120
|
if (chart.axisLineStyle === "dashed") {
|
|
@@ -3033,8 +3123,8 @@ function axisLineDash(chart, width) {
|
|
|
3033
3123
|
return chart.axisLineStyle === "dotted" ? { dash: [0.1, width * 3], lineCap: "round" } : {};
|
|
3034
3124
|
}
|
|
3035
3125
|
function buildAxisLines(chart, layout, order) {
|
|
3036
|
-
const lineWidth =
|
|
3037
|
-
const tickLength =
|
|
3126
|
+
const lineWidth = chunkCXL254BT_cjs.finite(chart.axisLineWidth, 0);
|
|
3127
|
+
const tickLength = chunkCXL254BT_cjs.finite(chart.tickLength, 0);
|
|
3038
3128
|
if (lineWidth <= 0 && tickLength <= 0) {
|
|
3039
3129
|
return [];
|
|
3040
3130
|
}
|
|
@@ -3055,20 +3145,20 @@ function buildAxisLines(chart, layout, order) {
|
|
|
3055
3145
|
}
|
|
3056
3146
|
add("line-x", `M ${plot.x} ${bottom} L ${plot.x + plot.width} ${bottom}`);
|
|
3057
3147
|
}
|
|
3058
|
-
if (tickLength > 0 &&
|
|
3059
|
-
|
|
3060
|
-
const x = plot.x +
|
|
3148
|
+
if (tickLength > 0 && chunkCXL254BT_cjs.isHorizontalBar(chart)) {
|
|
3149
|
+
chunkCXL254BT_cjs.chartTicks(chart.axisY).forEach((tick) => {
|
|
3150
|
+
const x = plot.x + chunkCXL254BT_cjs.mapChartValue(tick, chart.axisY, plot.width);
|
|
3061
3151
|
add(`tick-v-${tick}`, `M ${x} ${bottom} L ${x} ${bottom + tickLength}`);
|
|
3062
3152
|
});
|
|
3063
|
-
const rows =
|
|
3153
|
+
const rows = chunkCXL254BT_cjs.horizontalRows(chart, plot);
|
|
3064
3154
|
for (let index = 0; index < rows.count; index++) {
|
|
3065
|
-
const y =
|
|
3155
|
+
const y = chunkCXL254BT_cjs.rowTop(rows, plot, index) + rows.labelRow + rows.barsHeight / 2;
|
|
3066
3156
|
add(`tick-c-${index}`, `M ${plot.x - tickLength} ${y} L ${plot.x} ${y}`);
|
|
3067
3157
|
}
|
|
3068
3158
|
}
|
|
3069
|
-
if (tickLength > 0 && !isHorizontalBoxplot2(chart) && !
|
|
3070
|
-
|
|
3071
|
-
const y = bottom -
|
|
3159
|
+
if (tickLength > 0 && !isHorizontalBoxplot2(chart) && !chunkCXL254BT_cjs.isHorizontalBar(chart)) {
|
|
3160
|
+
chunkCXL254BT_cjs.chartTicks(chart.axisY).forEach((tick) => {
|
|
3161
|
+
const y = bottom - chunkCXL254BT_cjs.mapChartValue(tick, chart.axisY, plot.height);
|
|
3072
3162
|
add(`tick-y-${tick}`, `M ${plot.x - tickLength} ${y} L ${plot.x} ${y}`);
|
|
3073
3163
|
});
|
|
3074
3164
|
xTickPositions(chart, layout).forEach((x, index) => {
|
|
@@ -3083,14 +3173,14 @@ function categoryNames(chart, count) {
|
|
|
3083
3173
|
}
|
|
3084
3174
|
function buildHorizontalBarAxes(chart, layout, order) {
|
|
3085
3175
|
const { plot, bounds } = layout;
|
|
3086
|
-
const rows =
|
|
3176
|
+
const rows = chunkCXL254BT_cjs.horizontalRows(chart, plot);
|
|
3087
3177
|
const above = chart.categoryAlign === "left";
|
|
3088
3178
|
const inside = chart.categoryAlign === "inside";
|
|
3089
3179
|
const editable = Boolean(chart.config?.categories?.length);
|
|
3090
3180
|
const nodes = categoryNames(chart, rows.count).map((name, index) => {
|
|
3091
|
-
const top =
|
|
3181
|
+
const top = chunkCXL254BT_cjs.rowTop(rows, plot, index);
|
|
3092
3182
|
return {
|
|
3093
|
-
...
|
|
3183
|
+
...chunkCXL254BT_cjs.chartText({
|
|
3094
3184
|
role: "axis",
|
|
3095
3185
|
id: `chart-y-category-${chart.id}-${index}`,
|
|
3096
3186
|
order: order + index,
|
|
@@ -3100,19 +3190,19 @@ function buildHorizontalBarAxes(chart, layout, order) {
|
|
|
3100
3190
|
chart,
|
|
3101
3191
|
align: above || inside ? "left" : "right"
|
|
3102
3192
|
}),
|
|
3103
|
-
prop: editable ?
|
|
3193
|
+
prop: editable ? chunkCXL254BT_cjs.categoryProp(index) : void 0
|
|
3104
3194
|
};
|
|
3105
3195
|
});
|
|
3106
3196
|
if (chart.showValueAxis !== false) {
|
|
3107
|
-
|
|
3108
|
-
const x = plot.x +
|
|
3197
|
+
chunkCXL254BT_cjs.chartTicks(chart.axisY).forEach((tick, index) => {
|
|
3198
|
+
const x = plot.x + chunkCXL254BT_cjs.mapChartValue(tick, chart.axisY, plot.width);
|
|
3109
3199
|
nodes.push(
|
|
3110
|
-
|
|
3200
|
+
chunkCXL254BT_cjs.chartText({
|
|
3111
3201
|
role: "axis",
|
|
3112
3202
|
id: `chart-x-tick-${chart.id}-${tick}`,
|
|
3113
3203
|
order: order + rows.count + index,
|
|
3114
3204
|
bounds,
|
|
3115
|
-
frame: { x: x - 20, y: plot.y + plot.height + 4 +
|
|
3205
|
+
frame: { x: x - 20, y: plot.y + plot.height + 4 + chunkCXL254BT_cjs.finite(chart.tickLength, 0), width: 40, height: 18 },
|
|
3116
3206
|
text: String(tick),
|
|
3117
3207
|
chart,
|
|
3118
3208
|
align: "center"
|
|
@@ -3131,7 +3221,7 @@ function buildChartAxes(chart, layout, order) {
|
|
|
3131
3221
|
return lines;
|
|
3132
3222
|
}
|
|
3133
3223
|
order += lines.length;
|
|
3134
|
-
if (
|
|
3224
|
+
if (chunkCXL254BT_cjs.isHorizontalBar(chart)) {
|
|
3135
3225
|
return [...lines, ...buildHorizontalBarAxes(chart, layout, order)];
|
|
3136
3226
|
}
|
|
3137
3227
|
const xTicks = buildXAxisTicks(chart, layout, order);
|
|
@@ -3209,7 +3299,7 @@ function buildCircularChartGrid(chart, plot, bounds, order) {
|
|
|
3209
3299
|
const centerX = plot.x + plot.width / 2;
|
|
3210
3300
|
const centerY = plot.y + plot.height / 2;
|
|
3211
3301
|
const radius = Math.max(0, Math.min(plot.width, plot.height) / 2);
|
|
3212
|
-
const width =
|
|
3302
|
+
const width = chunkCXL254BT_cjs.finite(chart.gridWidth, 1);
|
|
3213
3303
|
if (chart.gridLineStyle === "dotted") {
|
|
3214
3304
|
return buildDottedCircularGrid(chart, bounds, order, centerX, centerY, radius, width);
|
|
3215
3305
|
}
|
|
@@ -3220,7 +3310,7 @@ function buildCircularChartGrid(chart, plot, bounds, order) {
|
|
|
3220
3310
|
...gridLineDashStyle(chart, width)
|
|
3221
3311
|
};
|
|
3222
3312
|
const nodes = [];
|
|
3223
|
-
|
|
3313
|
+
chunkCXL254BT_cjs.chartTicks(chart.axisY).filter((tick) => tick > chart.axisY.min).forEach((tick) => {
|
|
3224
3314
|
const ringRadius = radius * ringRatio(chart, tick);
|
|
3225
3315
|
nodes.push({
|
|
3226
3316
|
type: "ellipse",
|
|
@@ -3234,8 +3324,8 @@ function buildCircularChartGrid(chart, plot, bounds, order) {
|
|
|
3234
3324
|
style
|
|
3235
3325
|
});
|
|
3236
3326
|
});
|
|
3237
|
-
|
|
3238
|
-
const angle =
|
|
3327
|
+
chunkCXL254BT_cjs.chartTicks(chart.axisX).forEach((tick) => {
|
|
3328
|
+
const angle = chunkCXL254BT_cjs.angleForAxisValue(chart.axisX.min, chart.axisX.max, tick);
|
|
3239
3329
|
const edgeX = centerX + Math.cos(angle) * radius;
|
|
3240
3330
|
const edgeY = centerY + Math.sin(angle) * radius;
|
|
3241
3331
|
nodes.push({
|
|
@@ -3250,13 +3340,13 @@ function buildCircularChartGrid(chart, plot, bounds, order) {
|
|
|
3250
3340
|
return nodes;
|
|
3251
3341
|
}
|
|
3252
3342
|
function buildDottedCircularGrid(chart, bounds, order, centerX, centerY, radius, width) {
|
|
3253
|
-
const yTicks =
|
|
3254
|
-
const xTicks =
|
|
3343
|
+
const yTicks = chunkCXL254BT_cjs.chartTicks(chart.axisY).filter((tick) => tick > chart.axisY.min);
|
|
3344
|
+
const xTicks = chunkCXL254BT_cjs.chartTicks(chart.axisX);
|
|
3255
3345
|
const nodes = [];
|
|
3256
3346
|
yTicks.forEach((yTick) => {
|
|
3257
3347
|
const ringRadius = radius * ringRatio(chart, yTick);
|
|
3258
3348
|
xTicks.forEach((xTick) => {
|
|
3259
|
-
const angle =
|
|
3349
|
+
const angle = chunkCXL254BT_cjs.angleForAxisValue(chart.axisX.min, chart.axisX.max, xTick);
|
|
3260
3350
|
const x = centerX + Math.cos(angle) * ringRadius;
|
|
3261
3351
|
const y = centerY + Math.sin(angle) * ringRadius;
|
|
3262
3352
|
const id = `chart-grid-dot-${chart.id}-${xTick}-${yTick}`;
|
|
@@ -3278,8 +3368,8 @@ function buildChartGrid(chart, plot, bounds, order) {
|
|
|
3278
3368
|
if (chart.gridShape === "circle" && CIRCULAR_GRID_CHART_TYPES.has(chart.chartType)) {
|
|
3279
3369
|
return buildCircularChartGrid(chart, plot, bounds, order);
|
|
3280
3370
|
}
|
|
3281
|
-
const width =
|
|
3282
|
-
if (
|
|
3371
|
+
const width = chunkCXL254BT_cjs.finite(chart.gridWidth, 1);
|
|
3372
|
+
if (chunkCXL254BT_cjs.isHorizontalBar(chart)) {
|
|
3283
3373
|
return buildHorizontalBarGrid(chart, plot, bounds, order, width);
|
|
3284
3374
|
}
|
|
3285
3375
|
const clip = chart.chartType === "field" ? fieldSurfaceClip(chart, plot) : void 0;
|
|
@@ -3294,8 +3384,8 @@ function buildChartGrid(chart, plot, bounds, order) {
|
|
|
3294
3384
|
clip
|
|
3295
3385
|
};
|
|
3296
3386
|
const nodes = [];
|
|
3297
|
-
(chart.gridAxes === "y" ? [] :
|
|
3298
|
-
const x = plot.x +
|
|
3387
|
+
(chart.gridAxes === "y" ? [] : chunkCXL254BT_cjs.chartTicks(chart.axisX)).forEach((tick) => {
|
|
3388
|
+
const x = plot.x + chunkCXL254BT_cjs.mapChartValue(tick, chart.axisX, plot.width);
|
|
3299
3389
|
nodes.push({
|
|
3300
3390
|
type: "path",
|
|
3301
3391
|
id: `chart-grid-x-${chart.id}-${tick}`,
|
|
@@ -3305,8 +3395,8 @@ function buildChartGrid(chart, plot, bounds, order) {
|
|
|
3305
3395
|
style
|
|
3306
3396
|
});
|
|
3307
3397
|
});
|
|
3308
|
-
(chart.gridAxes === "x" ? [] :
|
|
3309
|
-
const y = plot.y + plot.height -
|
|
3398
|
+
(chart.gridAxes === "x" ? [] : chunkCXL254BT_cjs.chartTicks(chart.axisY)).forEach((tick) => {
|
|
3399
|
+
const y = plot.y + plot.height - chunkCXL254BT_cjs.mapChartValue(tick, chart.axisY, plot.height);
|
|
3310
3400
|
nodes.push({
|
|
3311
3401
|
type: "path",
|
|
3312
3402
|
id: `chart-grid-y-${chart.id}-${tick}`,
|
|
@@ -3328,8 +3418,8 @@ function buildHorizontalBarGrid(chart, plot, bounds, order, width) {
|
|
|
3328
3418
|
strokeWidth: width,
|
|
3329
3419
|
...chart.gridLineStyle === "dotted" ? { dash: [0.1, width * 3], lineCap: "round" } : gridLineDashStyle(chart, width)
|
|
3330
3420
|
};
|
|
3331
|
-
return
|
|
3332
|
-
const x = plot.x +
|
|
3421
|
+
return chunkCXL254BT_cjs.chartTicks(chart.axisY).map((tick, index) => {
|
|
3422
|
+
const x = plot.x + chunkCXL254BT_cjs.mapChartValue(tick, chart.axisY, plot.width);
|
|
3333
3423
|
return {
|
|
3334
3424
|
type: "path",
|
|
3335
3425
|
id: `chart-grid-x-${chart.id}-${tick}`,
|
|
@@ -3341,13 +3431,13 @@ function buildHorizontalBarGrid(chart, plot, bounds, order, width) {
|
|
|
3341
3431
|
});
|
|
3342
3432
|
}
|
|
3343
3433
|
function buildDottedRectGrid(chart, plot, bounds, order, width, clip) {
|
|
3344
|
-
const xTicks =
|
|
3345
|
-
const yTicks =
|
|
3434
|
+
const xTicks = chunkCXL254BT_cjs.chartTicks(chart.axisX);
|
|
3435
|
+
const yTicks = chunkCXL254BT_cjs.chartTicks(chart.axisY);
|
|
3346
3436
|
const nodes = [];
|
|
3347
3437
|
xTicks.forEach((xTick) => {
|
|
3348
|
-
const x = plot.x +
|
|
3438
|
+
const x = plot.x + chunkCXL254BT_cjs.mapChartValue(xTick, chart.axisX, plot.width);
|
|
3349
3439
|
yTicks.forEach((yTick) => {
|
|
3350
|
-
const y = plot.y + plot.height -
|
|
3440
|
+
const y = plot.y + plot.height - chunkCXL254BT_cjs.mapChartValue(yTick, chart.axisY, plot.height);
|
|
3351
3441
|
const id = `chart-grid-dot-${chart.id}-${xTick}-${yTick}`;
|
|
3352
3442
|
nodes.push(createGridDot(chart, id, order + nodes.length, bounds, x, y, width, clip));
|
|
3353
3443
|
});
|
|
@@ -3370,7 +3460,7 @@ function createChartRuleMarks(render2) {
|
|
|
3370
3460
|
return {
|
|
3371
3461
|
rule,
|
|
3372
3462
|
color: rule.color || render2.chart.strokeColor || "#475569",
|
|
3373
|
-
y: render2.plot.y + render2.plot.height -
|
|
3463
|
+
y: render2.plot.y + render2.plot.height - chunkCXL254BT_cjs.mapChartValue(rule.at, render2.chart.axisY, render2.plot.height),
|
|
3374
3464
|
lineOrder,
|
|
3375
3465
|
labelOrder
|
|
3376
3466
|
};
|
|
@@ -3390,7 +3480,7 @@ function createChartRuleLine(render2, mark) {
|
|
|
3390
3480
|
order: mark.lineOrder,
|
|
3391
3481
|
bounds: render2.bounds,
|
|
3392
3482
|
d: `M ${render2.plot.x} ${mark.y} L ${render2.plot.x + render2.plot.width} ${mark.y}`,
|
|
3393
|
-
prop:
|
|
3483
|
+
prop: chunkCXL254BT_cjs.ruleAtProp(mark.rule.id),
|
|
3394
3484
|
propKind: "value",
|
|
3395
3485
|
style: {
|
|
3396
3486
|
fill: { kind: "none" },
|
|
@@ -3401,9 +3491,9 @@ function createChartRuleLine(render2, mark) {
|
|
|
3401
3491
|
};
|
|
3402
3492
|
}
|
|
3403
3493
|
function createChartRuleLabel(render2, mark) {
|
|
3404
|
-
const fontSize = Math.max(9,
|
|
3494
|
+
const fontSize = Math.max(9, chunkCXL254BT_cjs.finite(render2.chart.fontSize, 12) - 2);
|
|
3405
3495
|
return {
|
|
3406
|
-
...
|
|
3496
|
+
...chunkCXL254BT_cjs.chartText({
|
|
3407
3497
|
id: `chart-rule-label-${render2.chart.id}-${mark.rule.id}`,
|
|
3408
3498
|
order: mark.labelOrder ?? mark.lineOrder + 1,
|
|
3409
3499
|
bounds: render2.bounds,
|
|
@@ -3412,19 +3502,19 @@ function createChartRuleLabel(render2, mark) {
|
|
|
3412
3502
|
chart: render2.chart
|
|
3413
3503
|
}),
|
|
3414
3504
|
color: mark.color,
|
|
3415
|
-
prop:
|
|
3505
|
+
prop: chunkCXL254BT_cjs.ruleTextProp(mark.rule.id)
|
|
3416
3506
|
};
|
|
3417
3507
|
}
|
|
3418
3508
|
|
|
3419
3509
|
// src/renderScene/charts/chartBackdrop.ts
|
|
3420
3510
|
function chartImageRect(chart) {
|
|
3421
|
-
const inset =
|
|
3511
|
+
const inset = chunkCXL254BT_cjs.finite(chart.strokeWidth, 1) / 2;
|
|
3422
3512
|
return {
|
|
3423
3513
|
x: chart.x + inset,
|
|
3424
3514
|
y: chart.y + inset,
|
|
3425
3515
|
width: Math.max(1, chart.width - inset * 2),
|
|
3426
3516
|
height: Math.max(1, chart.height - inset * 2),
|
|
3427
|
-
rx: Math.max(0,
|
|
3517
|
+
rx: Math.max(0, chunkCXL254BT_cjs.finite(chart.cornerRadius, 12) - inset)
|
|
3428
3518
|
};
|
|
3429
3519
|
}
|
|
3430
3520
|
function buildChartBackdrop(chart, bounds, order) {
|
|
@@ -3466,7 +3556,7 @@ function buildChartBackdrop(chart, bounds, order) {
|
|
|
3466
3556
|
// src/renderScene/charts/renderers/bar/glass.ts
|
|
3467
3557
|
function createGlassBackdropNodes(context, id, d) {
|
|
3468
3558
|
const { chart, bounds, nextOrder } = context;
|
|
3469
|
-
const blur =
|
|
3559
|
+
const blur = chunkCXL254BT_cjs.finite(chart.config?.barGlassBlur, 0);
|
|
3470
3560
|
if (blur <= 0 || !chart.fillImage) {
|
|
3471
3561
|
return [];
|
|
3472
3562
|
}
|
|
@@ -3484,7 +3574,7 @@ function createGlassBackdropNodes(context, id, d) {
|
|
|
3484
3574
|
href: chart.fillImage.url,
|
|
3485
3575
|
style: {
|
|
3486
3576
|
blur,
|
|
3487
|
-
saturate:
|
|
3577
|
+
saturate: chunkCXL254BT_cjs.finite(chart.config?.barGlassSaturation, 1),
|
|
3488
3578
|
clip: { type: "path", d },
|
|
3489
3579
|
pointerEvents: "none"
|
|
3490
3580
|
}
|
|
@@ -3535,8 +3625,8 @@ function createBarGlowNode(context, id, d, color2, glow, bounds = context.bounds
|
|
|
3535
3625
|
bounds,
|
|
3536
3626
|
d,
|
|
3537
3627
|
style: {
|
|
3538
|
-
fill:
|
|
3539
|
-
shadow: { color:
|
|
3628
|
+
fill: chunkCXL254BT_cjs.paint(color2, diagnostics, chart.id),
|
|
3629
|
+
shadow: { color: chunkCXL254BT_cjs.representativeColor(color2, "#ffffff"), opacity: 0.9, blur: glow, dx: 0, dy: 0 },
|
|
3540
3630
|
pointerEvents: "none"
|
|
3541
3631
|
}
|
|
3542
3632
|
};
|
|
@@ -3547,14 +3637,14 @@ function barLabelsEnabled(context) {
|
|
|
3547
3637
|
return context.chart.config?.showBarLabels === true;
|
|
3548
3638
|
}
|
|
3549
3639
|
function resolvePlacement(target, size) {
|
|
3550
|
-
const fits = target.frame.height >= size.height +
|
|
3640
|
+
const fits = target.frame.height >= size.height + chunkCXL254BT_cjs.BAR_LABEL.gap * 2;
|
|
3551
3641
|
return target.placement !== "outside" && !fits ? "outside" : target.placement;
|
|
3552
3642
|
}
|
|
3553
3643
|
function labelTop(placement, frame, height) {
|
|
3554
3644
|
if (placement === "outside") {
|
|
3555
|
-
return frame.y - height -
|
|
3645
|
+
return frame.y - height - chunkCXL254BT_cjs.BAR_LABEL.gap;
|
|
3556
3646
|
}
|
|
3557
|
-
return placement === "inside" ? frame.y +
|
|
3647
|
+
return placement === "inside" ? frame.y + chunkCXL254BT_cjs.BAR_LABEL.gap : frame.y + frame.height / 2 - height / 2;
|
|
3558
3648
|
}
|
|
3559
3649
|
function createPillNode(context, id, box, color2) {
|
|
3560
3650
|
const { chart, bounds, diagnostics, nextOrder } = context;
|
|
@@ -3564,11 +3654,11 @@ function createPillNode(context, id, box, color2) {
|
|
|
3564
3654
|
id: `${id}-pill`,
|
|
3565
3655
|
order: nextOrder(),
|
|
3566
3656
|
bounds,
|
|
3567
|
-
d:
|
|
3657
|
+
d: chunkCXL254BT_cjs.pillPath(box.left, box.top, box.width, box.height),
|
|
3568
3658
|
style: {
|
|
3569
|
-
fill: config?.barLabelPillColor ?
|
|
3570
|
-
stroke:
|
|
3571
|
-
strokeWidth:
|
|
3659
|
+
fill: config?.barLabelPillColor ? chunkCXL254BT_cjs.paint(config.barLabelPillColor, diagnostics, chart.id) : { kind: "none" },
|
|
3660
|
+
stroke: chunkCXL254BT_cjs.paint(config?.barLabelBorderColor ?? color2, diagnostics, chart.id),
|
|
3661
|
+
strokeWidth: chunkCXL254BT_cjs.finite(config?.barLabelBorderWidth, 1),
|
|
3572
3662
|
pointerEvents: "none"
|
|
3573
3663
|
}
|
|
3574
3664
|
};
|
|
@@ -3577,7 +3667,7 @@ function createTextNode(context, id, box, text, placement, fontSize, color2) {
|
|
|
3577
3667
|
const { chart, bounds, nextOrder } = context;
|
|
3578
3668
|
const config = chart.config;
|
|
3579
3669
|
return {
|
|
3580
|
-
...
|
|
3670
|
+
...chunkCXL254BT_cjs.chartText({
|
|
3581
3671
|
id,
|
|
3582
3672
|
order: nextOrder(),
|
|
3583
3673
|
bounds,
|
|
@@ -3598,7 +3688,7 @@ function createAxisValueNode(context, target, text, fontSize) {
|
|
|
3598
3688
|
const config = chart.config;
|
|
3599
3689
|
const top = plot.y + plot.height + 4 + 16 + Math.max(0, chart.tickLength ?? 0);
|
|
3600
3690
|
return {
|
|
3601
|
-
...
|
|
3691
|
+
...chunkCXL254BT_cjs.chartText({
|
|
3602
3692
|
id: target.id,
|
|
3603
3693
|
order: nextOrder(),
|
|
3604
3694
|
bounds,
|
|
@@ -3607,7 +3697,7 @@ function createAxisValueNode(context, target, text, fontSize) {
|
|
|
3607
3697
|
y: target.frame.y + target.frame.height / 2 - fontSize * 0.6,
|
|
3608
3698
|
width: plot.width - 14,
|
|
3609
3699
|
height: fontSize * 1.2
|
|
3610
|
-
} : { x: plot.x, y: target.frame.y -
|
|
3700
|
+
} : { x: plot.x, y: target.frame.y - chunkCXL254BT_cjs.CATEGORY_LABEL_ROW, width: plot.width, height: fontSize * 1.2 } : { x: target.frame.x, y: top, width: target.frame.width, height: fontSize * 1.2 },
|
|
3611
3701
|
text,
|
|
3612
3702
|
chart,
|
|
3613
3703
|
align: target.horizontal ? "right" : chart.categoryAlign === "left" ? "left" : "center"
|
|
@@ -3621,24 +3711,24 @@ function createAxisValueNode(context, target, text, fontSize) {
|
|
|
3621
3711
|
}
|
|
3622
3712
|
function horizontalPlacement(target, size) {
|
|
3623
3713
|
const requested = target.placement === "axis" ? "outside" : target.placement;
|
|
3624
|
-
const fits = target.frame.width >= size.width +
|
|
3714
|
+
const fits = target.frame.width >= size.width + chunkCXL254BT_cjs.BAR_LABEL.gap * 2;
|
|
3625
3715
|
return requested !== "outside" && !fits ? "outside" : requested;
|
|
3626
3716
|
}
|
|
3627
3717
|
function horizontalBox(target, size, placement) {
|
|
3628
3718
|
const { frame } = target;
|
|
3629
|
-
const left = placement === "outside" ? frame.x + frame.width +
|
|
3719
|
+
const left = placement === "outside" ? frame.x + frame.width + chunkCXL254BT_cjs.BAR_LABEL.gap : placement === "inside" ? frame.x + frame.width - size.width - chunkCXL254BT_cjs.BAR_LABEL.gap : frame.x + frame.width / 2 - size.width / 2;
|
|
3630
3720
|
return { ...size, left, top: frame.y + frame.height / 2 - size.height / 2 };
|
|
3631
3721
|
}
|
|
3632
3722
|
function createBarLabelNodes(context, target) {
|
|
3633
3723
|
const { chart } = context;
|
|
3634
3724
|
const config = chart.config;
|
|
3635
|
-
const fontSize = Math.max(8,
|
|
3636
|
-
const text =
|
|
3725
|
+
const fontSize = Math.max(8, chunkCXL254BT_cjs.finite(config?.barLabelFontSize, chunkCXL254BT_cjs.finite(chart.fontSize, 12)));
|
|
3726
|
+
const text = chunkCXL254BT_cjs.formatBarLabel(target.value, config?.barLabelFormat);
|
|
3637
3727
|
if (target.placement === "axis") {
|
|
3638
3728
|
return [createAxisValueNode(context, target, text, fontSize)];
|
|
3639
3729
|
}
|
|
3640
3730
|
const pill = config?.barLabelPill === true;
|
|
3641
|
-
const size =
|
|
3731
|
+
const size = chunkCXL254BT_cjs.barLabelSize(text, fontSize, pill);
|
|
3642
3732
|
const placement = target.horizontal ? horizontalPlacement(target, size) : resolvePlacement(target, size);
|
|
3643
3733
|
const box = target.horizontal ? horizontalBox(target, size, placement) : {
|
|
3644
3734
|
...size,
|
|
@@ -3679,7 +3769,7 @@ function barTrackClip(context, frame) {
|
|
|
3679
3769
|
}
|
|
3680
3770
|
return {
|
|
3681
3771
|
type: "path",
|
|
3682
|
-
d:
|
|
3772
|
+
d: chunkCXL254BT_cjs.roundedBarPath(frame.x, frame.y, frame.width, frame.height, context.chart.config?.barCornerRadius ?? 2)
|
|
3683
3773
|
};
|
|
3684
3774
|
}
|
|
3685
3775
|
function barTrackEnabled(context) {
|
|
@@ -3689,8 +3779,8 @@ function createBarTrackNodes(context, id, frame, orientation = "vertical") {
|
|
|
3689
3779
|
const { chart, bounds, diagnostics, nextOrder } = context;
|
|
3690
3780
|
const config = chart.config;
|
|
3691
3781
|
const radius = config?.barCornerRadius ?? 2;
|
|
3692
|
-
const segments =
|
|
3693
|
-
const d = segments > 0 ?
|
|
3782
|
+
const segments = chunkCXL254BT_cjs.finite(config?.barSegments, 0);
|
|
3783
|
+
const d = segments > 0 ? chunkCXL254BT_cjs.segmentedBarPath(frame, orientation, segments, chunkCXL254BT_cjs.finite(config?.barSegmentGap, 4), radius, 1, true) : chunkCXL254BT_cjs.roundedBarPath(frame.x, frame.y, frame.width, frame.height, radius);
|
|
3694
3784
|
const nodes = [
|
|
3695
3785
|
{
|
|
3696
3786
|
type: "path",
|
|
@@ -3699,7 +3789,7 @@ function createBarTrackNodes(context, id, frame, orientation = "vertical") {
|
|
|
3699
3789
|
bounds,
|
|
3700
3790
|
d,
|
|
3701
3791
|
style: {
|
|
3702
|
-
fill:
|
|
3792
|
+
fill: chunkCXL254BT_cjs.paint(config?.barTrackColor ?? chart.gridColor ?? "#e2e8f0", diagnostics, chart.id),
|
|
3703
3793
|
pointerEvents: "none"
|
|
3704
3794
|
}
|
|
3705
3795
|
}
|
|
@@ -3715,13 +3805,13 @@ function createBarTrackNodes(context, id, frame, orientation = "vertical") {
|
|
|
3715
3805
|
frame.y,
|
|
3716
3806
|
frame.width,
|
|
3717
3807
|
frame.height,
|
|
3718
|
-
|
|
3719
|
-
Math.max(MIN_HATCH_SPACING,
|
|
3808
|
+
chunkCXL254BT_cjs.finite(config.barTrackHatchAngle, DEFAULT_HATCH.angle),
|
|
3809
|
+
Math.max(MIN_HATCH_SPACING, chunkCXL254BT_cjs.finite(config.barTrackHatchSpacing, DEFAULT_HATCH.spacing))
|
|
3720
3810
|
),
|
|
3721
3811
|
style: {
|
|
3722
3812
|
fill: { kind: "none" },
|
|
3723
|
-
stroke:
|
|
3724
|
-
strokeWidth:
|
|
3813
|
+
stroke: chunkCXL254BT_cjs.paint(config.barTrackHatchColor ?? chart.gridColor ?? "#cbd5e1", diagnostics, chart.id),
|
|
3814
|
+
strokeWidth: chunkCXL254BT_cjs.finite(config.barTrackHatchWidth, DEFAULT_HATCH.width),
|
|
3725
3815
|
pointerEvents: "none",
|
|
3726
3816
|
clip: { type: "path", d }
|
|
3727
3817
|
}
|
|
@@ -3768,23 +3858,23 @@ function groupedShape(context, frame) {
|
|
|
3768
3858
|
const { chart, plot } = context;
|
|
3769
3859
|
const config = chart.config;
|
|
3770
3860
|
const radius = config?.barCornerRadius ?? 2;
|
|
3771
|
-
const segments =
|
|
3861
|
+
const segments = chunkCXL254BT_cjs.finite(config?.barSegments, 0);
|
|
3772
3862
|
if (segments > 0) {
|
|
3773
|
-
return
|
|
3863
|
+
return chunkCXL254BT_cjs.segmentedBarPath(
|
|
3774
3864
|
{ x: frame.x, y: plot.y, width: frame.width, height: plot.height },
|
|
3775
3865
|
"vertical",
|
|
3776
3866
|
segments,
|
|
3777
|
-
|
|
3867
|
+
chunkCXL254BT_cjs.finite(config?.barSegmentGap, 4),
|
|
3778
3868
|
radius,
|
|
3779
3869
|
frame.height / plot.height,
|
|
3780
3870
|
config?.barSegmentSnap !== false
|
|
3781
3871
|
);
|
|
3782
3872
|
}
|
|
3783
|
-
return
|
|
3873
|
+
return chunkCXL254BT_cjs.barPath(frame.x, frame.y, frame.width, frame.height, radius, config?.barRoundedBottom === true);
|
|
3784
3874
|
}
|
|
3785
3875
|
function createGroupedGlow(context, mark) {
|
|
3786
3876
|
const { chart } = context;
|
|
3787
|
-
const glow =
|
|
3877
|
+
const glow = chunkCXL254BT_cjs.finite(chart.config?.barGlow, 0);
|
|
3788
3878
|
if (glow <= 0 || mark.frame.height <= 0) {
|
|
3789
3879
|
return [];
|
|
3790
3880
|
}
|
|
@@ -3795,10 +3885,10 @@ function createGroupedGlow(context, mark) {
|
|
|
3795
3885
|
}
|
|
3796
3886
|
function createGroupedBarLayout(context) {
|
|
3797
3887
|
const { chart, plot } = context;
|
|
3798
|
-
const valueCount =
|
|
3888
|
+
const valueCount = chunkCXL254BT_cjs.barCategoryCount(chart);
|
|
3799
3889
|
const slotWidth = plot.width / valueCount;
|
|
3800
|
-
const groupGap = Math.min(Math.max(0,
|
|
3801
|
-
const barGap = Math.max(0,
|
|
3890
|
+
const groupGap = Math.min(Math.max(0, chunkCXL254BT_cjs.finite(chart.config?.barGroupGap, 8)), Math.max(0, slotWidth - 1));
|
|
3891
|
+
const barGap = Math.max(0, chunkCXL254BT_cjs.finite(chart.config?.barGap, 2));
|
|
3802
3892
|
return {
|
|
3803
3893
|
slotWidth,
|
|
3804
3894
|
seriesWidth: Math.max(1, (slotWidth - groupGap) / Math.max(1, chart.series.length)),
|
|
@@ -3808,10 +3898,10 @@ function createGroupedBarLayout(context) {
|
|
|
3808
3898
|
}
|
|
3809
3899
|
function createSeriesBarMarks(context, layout, series, seriesIndex) {
|
|
3810
3900
|
const { chart, plot } = context;
|
|
3811
|
-
const seriesColor2 = series.color ??
|
|
3901
|
+
const seriesColor2 = series.color ?? chunkCXL254BT_cjs.CHART_COLORS[seriesIndex % chunkCXL254BT_cjs.CHART_COLORS.length];
|
|
3812
3902
|
return series.values.map((value, valueIndex) => {
|
|
3813
3903
|
const numericValue = Array.isArray(value) ? value[1] : value;
|
|
3814
|
-
const height = Math.max(0,
|
|
3904
|
+
const height = Math.max(0, chunkCXL254BT_cjs.mapChartValue(numericValue, chart.axisY, plot.height));
|
|
3815
3905
|
return {
|
|
3816
3906
|
seriesId: series.id,
|
|
3817
3907
|
valueIndex,
|
|
@@ -3845,10 +3935,10 @@ function createGroupedBarNodes(context, mark) {
|
|
|
3845
3935
|
const radius = chart.config?.barCornerRadius ?? 2;
|
|
3846
3936
|
const { x, width } = mark.frame;
|
|
3847
3937
|
const path = groupedShape(context, mark.frame);
|
|
3848
|
-
const fill2 =
|
|
3849
|
-
const stroke =
|
|
3850
|
-
const strokeWidth =
|
|
3851
|
-
const shadow =
|
|
3938
|
+
const fill2 = chunkCXL254BT_cjs.paint(mark.color, diagnostics, chart.id);
|
|
3939
|
+
const stroke = chunkCXL254BT_cjs.paint(chart.config?.barBorderColor || "#000000", diagnostics, chart.id);
|
|
3940
|
+
const strokeWidth = chunkCXL254BT_cjs.finite(chart.config?.barBorderWidth, 0);
|
|
3941
|
+
const shadow = chunkCXL254BT_cjs.resolveChartShadow(chart.shadowStyle);
|
|
3852
3942
|
const shadowCaster = shadow ? {
|
|
3853
3943
|
type: "path",
|
|
3854
3944
|
id: `chart-bar-shadow-${chart.id}-${mark.seriesId}-${mark.valueIndex}`,
|
|
@@ -3878,10 +3968,10 @@ function createGroupedBarNodes(context, mark) {
|
|
|
3878
3968
|
valueIndex: mark.valueIndex,
|
|
3879
3969
|
mark: "bar",
|
|
3880
3970
|
radius,
|
|
3881
|
-
colorProp:
|
|
3971
|
+
colorProp: chunkCXL254BT_cjs.seriesValueColorProp(mark.seriesId, mark.valueIndex),
|
|
3882
3972
|
hasColorOverride: mark.hasColorOverride
|
|
3883
3973
|
},
|
|
3884
|
-
prop:
|
|
3974
|
+
prop: chunkCXL254BT_cjs.seriesValueProp(mark.seriesId, mark.valueIndex),
|
|
3885
3975
|
style: { fill: fill2, stroke, strokeWidth, innerShadow: shadow }
|
|
3886
3976
|
};
|
|
3887
3977
|
const glass = createGlassBackdropNodes(context, `${mark.seriesId}-${mark.valueIndex}`, path);
|
|
@@ -3892,15 +3982,15 @@ function createGroupedBarError(context, mark) {
|
|
|
3892
3982
|
return null;
|
|
3893
3983
|
}
|
|
3894
3984
|
const { chart, plot, bounds, nextOrder } = context;
|
|
3895
|
-
const [lower, upper] =
|
|
3896
|
-
return
|
|
3985
|
+
const [lower, upper] = chunkCXL254BT_cjs.errorBarRange(mark.value, mark.error);
|
|
3986
|
+
return chunkCXL254BT_cjs.createVerticalErrorWhiskerNode({
|
|
3897
3987
|
id: `chart-bar-error-${chart.id}-${mark.seriesId}-${mark.valueIndex}`,
|
|
3898
3988
|
order: nextOrder(),
|
|
3899
3989
|
bounds,
|
|
3900
3990
|
geometry: {
|
|
3901
3991
|
centerX: mark.frame.x + mark.frame.width / 2,
|
|
3902
|
-
startY: plot.y + plot.height -
|
|
3903
|
-
endY: plot.y + plot.height -
|
|
3992
|
+
startY: plot.y + plot.height - chunkCXL254BT_cjs.mapChartValue(lower, chart.axisY, plot.height),
|
|
3993
|
+
endY: plot.y + plot.height - chunkCXL254BT_cjs.mapChartValue(upper, chart.axisY, plot.height)
|
|
3904
3994
|
},
|
|
3905
3995
|
color: chart.textColor ?? "#0f172a",
|
|
3906
3996
|
valueReference: { seriesId: mark.seriesId, valueIndex: mark.valueIndex }
|
|
@@ -3910,9 +4000,9 @@ function createGroupedBarError(context, mark) {
|
|
|
3910
4000
|
// src/renderScene/charts/renderers/bar/horizontal.ts
|
|
3911
4001
|
function barFrame(context, rows, seriesIndex, valueIndex, value) {
|
|
3912
4002
|
const { chart, plot } = context;
|
|
3913
|
-
const top =
|
|
4003
|
+
const top = chunkCXL254BT_cjs.rowTop(rows, plot, valueIndex) + rows.labelRow;
|
|
3914
4004
|
if (context.stackedMode) {
|
|
3915
|
-
const segment =
|
|
4005
|
+
const segment = chunkCXL254BT_cjs.stackedSegment(chart, context.stackedMode, valueIndex, seriesIndex, plot.width);
|
|
3916
4006
|
const start = Math.min(segment.pixelStart, segment.pixelEnd);
|
|
3917
4007
|
return {
|
|
3918
4008
|
x: plot.x + start,
|
|
@@ -3921,27 +4011,27 @@ function barFrame(context, rows, seriesIndex, valueIndex, value) {
|
|
|
3921
4011
|
height: rows.barsHeight
|
|
3922
4012
|
};
|
|
3923
4013
|
}
|
|
3924
|
-
const barGap = Math.max(0,
|
|
4014
|
+
const barGap = Math.max(0, chunkCXL254BT_cjs.finite(chart.config?.barGap, 2));
|
|
3925
4015
|
const seriesHeight = rows.barsHeight / Math.max(1, chart.series.length);
|
|
3926
|
-
const width = Math.max(0,
|
|
4016
|
+
const width = Math.max(0, chunkCXL254BT_cjs.mapChartValue(value, chart.axisY, plot.width));
|
|
3927
4017
|
return { x: plot.x, y: top + seriesIndex * seriesHeight, width, height: Math.max(1, seriesHeight - barGap) };
|
|
3928
4018
|
}
|
|
3929
4019
|
function barPath2(context, frame) {
|
|
3930
4020
|
const { chart, plot } = context;
|
|
3931
4021
|
const config = chart.config;
|
|
3932
|
-
const segments = context.stackedMode && chart.series.length > 1 ? 0 :
|
|
4022
|
+
const segments = context.stackedMode && chart.series.length > 1 ? 0 : chunkCXL254BT_cjs.finite(config?.barSegments, 0);
|
|
3933
4023
|
if (segments > 0) {
|
|
3934
|
-
return
|
|
4024
|
+
return chunkCXL254BT_cjs.segmentedBarPath(
|
|
3935
4025
|
{ x: plot.x, y: frame.y, width: plot.width, height: frame.height },
|
|
3936
4026
|
"horizontal",
|
|
3937
4027
|
segments,
|
|
3938
|
-
|
|
4028
|
+
chunkCXL254BT_cjs.finite(config?.barSegmentGap, 4),
|
|
3939
4029
|
config?.barCornerRadius ?? 2,
|
|
3940
4030
|
frame.width / plot.width,
|
|
3941
4031
|
config?.barSegmentSnap !== false
|
|
3942
4032
|
);
|
|
3943
4033
|
}
|
|
3944
|
-
return
|
|
4034
|
+
return chunkCXL254BT_cjs.roundedBarPath(frame.x, frame.y, frame.width, frame.height, config?.barCornerRadius ?? 2);
|
|
3945
4035
|
}
|
|
3946
4036
|
function markOf(context, rows, series, seriesIndex, valueIndex, value) {
|
|
3947
4037
|
const { plot } = context;
|
|
@@ -3961,16 +4051,16 @@ function markOf(context, rows, series, seriesIndex, valueIndex, value) {
|
|
|
3961
4051
|
maxY: frame.y + frame.height
|
|
3962
4052
|
},
|
|
3963
4053
|
path: barPath2(context, frame),
|
|
3964
|
-
color: series.colors?.[valueIndex] ?? series.color ??
|
|
4054
|
+
color: series.colors?.[valueIndex] ?? series.color ?? chunkCXL254BT_cjs.CHART_COLORS[seriesIndex % chunkCXL254BT_cjs.CHART_COLORS.length]
|
|
3965
4055
|
};
|
|
3966
4056
|
}
|
|
3967
4057
|
function barNodes(context, mark) {
|
|
3968
4058
|
const { chart, diagnostics, nextOrder } = context;
|
|
3969
4059
|
const config = chart.config;
|
|
3970
|
-
const stroke =
|
|
3971
|
-
const strokeWidth =
|
|
3972
|
-
const shadow =
|
|
3973
|
-
const fill2 =
|
|
4060
|
+
const stroke = chunkCXL254BT_cjs.paint(config?.barBorderColor || "#000000", diagnostics, chart.id);
|
|
4061
|
+
const strokeWidth = chunkCXL254BT_cjs.finite(config?.barBorderWidth, 0);
|
|
4062
|
+
const shadow = chunkCXL254BT_cjs.resolveChartShadow(chart.shadowStyle);
|
|
4063
|
+
const fill2 = chunkCXL254BT_cjs.paint(mark.color, diagnostics, chart.id);
|
|
3974
4064
|
const nodes = [...createGlassBackdropNodes(context, mark.id, mark.path)];
|
|
3975
4065
|
if (shadow) {
|
|
3976
4066
|
nodes.push({
|
|
@@ -3994,7 +4084,7 @@ function barNodes(context, mark) {
|
|
|
3994
4084
|
valueIndex: mark.valueIndex,
|
|
3995
4085
|
mark: "bar",
|
|
3996
4086
|
radius: config?.barCornerRadius ?? 2,
|
|
3997
|
-
colorProp:
|
|
4087
|
+
colorProp: chunkCXL254BT_cjs.seriesValueColorProp(mark.series.id, mark.valueIndex),
|
|
3998
4088
|
hasColorOverride: mark.series.colors?.[mark.valueIndex] != null
|
|
3999
4089
|
},
|
|
4000
4090
|
style: { fill: fill2, stroke, strokeWidth, innerShadow: shadow }
|
|
@@ -4024,7 +4114,7 @@ function pushBar(context, rows, layers, series, seriesIndex, valueIndex, value,
|
|
|
4024
4114
|
layers.tracks.push(...createBarTrackNodes(context, mark.id, mark.trackFrame, "horizontal"));
|
|
4025
4115
|
}
|
|
4026
4116
|
layers.bars.push(...barNodes(context, mark));
|
|
4027
|
-
const glow =
|
|
4117
|
+
const glow = chunkCXL254BT_cjs.finite(chart.config?.barGlow, 0);
|
|
4028
4118
|
if (glow > 0 && mark.frame.width > 0) {
|
|
4029
4119
|
layers.glows.push(
|
|
4030
4120
|
createBarGlowNode(context, `chart-bar-glow-${chart.id}-${mark.id}`, mark.path, mark.color, glow, mark.bounds)
|
|
@@ -4033,7 +4123,7 @@ function pushBar(context, rows, layers, series, seriesIndex, valueIndex, value,
|
|
|
4033
4123
|
layers.labels.push(...labelNodes2(context, mark, highest));
|
|
4034
4124
|
}
|
|
4035
4125
|
function renderHorizontalBars(context) {
|
|
4036
|
-
const rows =
|
|
4126
|
+
const rows = chunkCXL254BT_cjs.horizontalRows(context.chart, context.plot);
|
|
4037
4127
|
const layers = { tracks: [], bars: [], glows: [], labels: [] };
|
|
4038
4128
|
context.chart.series.forEach((series, seriesIndex) => {
|
|
4039
4129
|
const numeric = series.values.map((value) => typeof value === "number" ? value : value[1]);
|
|
@@ -4048,8 +4138,8 @@ function renderHorizontalBars(context) {
|
|
|
4048
4138
|
// src/renderScene/charts/renderers/bar/stacked.ts
|
|
4049
4139
|
function slotOf(context, mode) {
|
|
4050
4140
|
const { chart, plot } = context;
|
|
4051
|
-
const slotWidth = plot.width /
|
|
4052
|
-
const groupGap = Math.min(Math.max(0,
|
|
4141
|
+
const slotWidth = plot.width / chunkCXL254BT_cjs.barCategoryCount(chart);
|
|
4142
|
+
const groupGap = Math.min(Math.max(0, chunkCXL254BT_cjs.finite(chart.config?.barGroupGap, 8)), Math.max(0, slotWidth - 1));
|
|
4053
4143
|
return {
|
|
4054
4144
|
slotWidth,
|
|
4055
4145
|
groupGap,
|
|
@@ -4060,19 +4150,19 @@ function slotOf(context, mode) {
|
|
|
4060
4150
|
}
|
|
4061
4151
|
function pathOf(context, x, y, height, slot, radius) {
|
|
4062
4152
|
const { chart, plot } = context;
|
|
4063
|
-
const segments = chart.series.length === 1 ?
|
|
4153
|
+
const segments = chart.series.length === 1 ? chunkCXL254BT_cjs.finite(chart.config?.barSegments, 0) : 0;
|
|
4064
4154
|
if (segments > 0) {
|
|
4065
|
-
return
|
|
4155
|
+
return chunkCXL254BT_cjs.segmentedBarPath(
|
|
4066
4156
|
{ x, y: plot.y, width: slot.barWidth, height: plot.height },
|
|
4067
4157
|
"vertical",
|
|
4068
4158
|
segments,
|
|
4069
|
-
|
|
4159
|
+
chunkCXL254BT_cjs.finite(chart.config?.barSegmentGap, 4),
|
|
4070
4160
|
radius,
|
|
4071
4161
|
height / plot.height,
|
|
4072
4162
|
chart.config?.barSegmentSnap !== false
|
|
4073
4163
|
);
|
|
4074
4164
|
}
|
|
4075
|
-
return
|
|
4165
|
+
return chunkCXL254BT_cjs.barPath(x, y, slot.barWidth, height, radius, chart.config?.barRoundedBottom === true);
|
|
4076
4166
|
}
|
|
4077
4167
|
function pushLabel(context, layers, series, seriesIndex, valueIndex, slot, frame) {
|
|
4078
4168
|
const { chart } = context;
|
|
@@ -4094,7 +4184,7 @@ function pushLabel(context, layers, series, seriesIndex, valueIndex, slot, frame
|
|
|
4094
4184
|
}
|
|
4095
4185
|
function markOf2(context, mode, slot, series, seriesIndex, valueIndex) {
|
|
4096
4186
|
const { chart, plot } = context;
|
|
4097
|
-
const segment =
|
|
4187
|
+
const segment = chunkCXL254BT_cjs.stackedSegment(chart, mode, valueIndex, seriesIndex, plot.height);
|
|
4098
4188
|
const radius = slot.outerSeriesIndex === null || seriesIndex === slot.outerSeriesIndex ? slot.cornerRadius : 0;
|
|
4099
4189
|
const x = plot.x + valueIndex * slot.slotWidth + slot.groupGap / 2;
|
|
4100
4190
|
const y = plot.y + plot.height - Math.max(segment.pixelStart, segment.pixelEnd);
|
|
@@ -4103,7 +4193,7 @@ function markOf2(context, mode, slot, series, seriesIndex, valueIndex) {
|
|
|
4103
4193
|
series,
|
|
4104
4194
|
valueIndex,
|
|
4105
4195
|
radius,
|
|
4106
|
-
color: series.colors?.[valueIndex] ?? series.color ??
|
|
4196
|
+
color: series.colors?.[valueIndex] ?? series.color ?? chunkCXL254BT_cjs.CHART_COLORS[seriesIndex % chunkCXL254BT_cjs.CHART_COLORS.length],
|
|
4107
4197
|
x,
|
|
4108
4198
|
y,
|
|
4109
4199
|
height,
|
|
@@ -4114,10 +4204,10 @@ function markOf2(context, mode, slot, series, seriesIndex, valueIndex) {
|
|
|
4114
4204
|
function segmentNodes(context, mark) {
|
|
4115
4205
|
const { chart, plot, bounds, diagnostics, nextOrder } = context;
|
|
4116
4206
|
const { series, valueIndex, path } = mark;
|
|
4117
|
-
const fill2 =
|
|
4118
|
-
const stroke =
|
|
4119
|
-
const strokeWidth =
|
|
4120
|
-
const shadow =
|
|
4207
|
+
const fill2 = chunkCXL254BT_cjs.paint(mark.color, diagnostics, chart.id);
|
|
4208
|
+
const stroke = chunkCXL254BT_cjs.paint(chart.config?.barBorderColor || "#000000", diagnostics, chart.id);
|
|
4209
|
+
const strokeWidth = chunkCXL254BT_cjs.finite(chart.config?.barBorderWidth, 0);
|
|
4210
|
+
const shadow = chunkCXL254BT_cjs.resolveChartShadow(chart.shadowStyle);
|
|
4121
4211
|
const nodes = [];
|
|
4122
4212
|
if (shadow) {
|
|
4123
4213
|
const plotClip = `M ${plot.x} ${plot.y} H ${plot.x + plot.width} V ${plot.y + plot.height} H ${plot.x} Z`;
|
|
@@ -4149,10 +4239,10 @@ function segmentNodes(context, mark) {
|
|
|
4149
4239
|
valueIndex,
|
|
4150
4240
|
mark: "bar",
|
|
4151
4241
|
radius: mark.radius,
|
|
4152
|
-
colorProp:
|
|
4242
|
+
colorProp: chunkCXL254BT_cjs.seriesValueColorProp(series.id, valueIndex),
|
|
4153
4243
|
hasColorOverride: series.colors?.[valueIndex] != null
|
|
4154
4244
|
},
|
|
4155
|
-
prop:
|
|
4245
|
+
prop: chunkCXL254BT_cjs.seriesValueProp(series.id, valueIndex),
|
|
4156
4246
|
style: { fill: fill2, stroke, strokeWidth, innerShadow: shadow }
|
|
4157
4247
|
});
|
|
4158
4248
|
return nodes;
|
|
@@ -4166,7 +4256,7 @@ function pushSegment(context, mode, layers, slot, series, seriesIndex, valueInde
|
|
|
4166
4256
|
layers.bars.push(...segmentNodes(context, mark));
|
|
4167
4257
|
const frame = { x: mark.x, y: mark.y, width: slot.barWidth, height: mark.height };
|
|
4168
4258
|
pushLabel(context, layers, series, seriesIndex, valueIndex, slot, frame);
|
|
4169
|
-
const glow =
|
|
4259
|
+
const glow = chunkCXL254BT_cjs.finite(chart.config?.barGlow, 0);
|
|
4170
4260
|
if (glow > 0) {
|
|
4171
4261
|
layers.glows.push(
|
|
4172
4262
|
createBarGlowNode(context, `chart-bar-glow-${chart.id}-${series.id}-${valueIndex}`, mark.path, mark.color, glow)
|
|
@@ -4177,7 +4267,7 @@ function renderStackedBars(context, mode) {
|
|
|
4177
4267
|
const { chart } = context;
|
|
4178
4268
|
const layers = { tracks: [], bars: [], glows: [], labels: [] };
|
|
4179
4269
|
const slot = slotOf(context, mode);
|
|
4180
|
-
const valueCount =
|
|
4270
|
+
const valueCount = chunkCXL254BT_cjs.barCategoryCount(chart);
|
|
4181
4271
|
for (let valueIndex = 0; valueIndex < valueCount; valueIndex++) {
|
|
4182
4272
|
chart.series.forEach((series, seriesIndex) => {
|
|
4183
4273
|
pushSegment(context, mode, layers, slot, series, seriesIndex, valueIndex);
|
|
@@ -4192,7 +4282,7 @@ function isSeriesMax2(values, index) {
|
|
|
4192
4282
|
|
|
4193
4283
|
// src/renderScene/charts/renderers/bar.ts
|
|
4194
4284
|
function renderBar(context) {
|
|
4195
|
-
if (
|
|
4285
|
+
if (chunkCXL254BT_cjs.isHorizontalBar(context.chart)) {
|
|
4196
4286
|
return renderHorizontalBars(context);
|
|
4197
4287
|
}
|
|
4198
4288
|
if (context.stackedMode) {
|
|
@@ -4207,6 +4297,7 @@ function createBoxplotLayout(context) {
|
|
|
4207
4297
|
const orientation = chart.config?.orientation ?? "vertical";
|
|
4208
4298
|
const boxCount = Math.max(1, chart.series.length);
|
|
4209
4299
|
const slotWidth = (orientation === "horizontal" ? plot.height : plot.width) / boxCount;
|
|
4300
|
+
const borderColor = chunkCXL254BT_cjs.representativeColor(chart.config?.barBorderColor, "#000000");
|
|
4210
4301
|
const widthFraction = Math.min(1, Math.max(0.05, chart.config?.boxWidth ?? 0.6));
|
|
4211
4302
|
return {
|
|
4212
4303
|
orientation,
|
|
@@ -4214,8 +4305,16 @@ function createBoxplotLayout(context) {
|
|
|
4214
4305
|
boxWidth: Math.max(4, slotWidth * widthFraction),
|
|
4215
4306
|
cornerRadius: chart.config?.barCornerRadius ?? 2,
|
|
4216
4307
|
showPoints: chart.config?.showBoxplotPoints ?? true,
|
|
4217
|
-
borderColor
|
|
4218
|
-
borderWidth:
|
|
4308
|
+
borderColor,
|
|
4309
|
+
borderWidth: chunkCXL254BT_cjs.finite(chart.config?.barBorderWidth, 1),
|
|
4310
|
+
whiskerWidth: Math.max(0, chunkCXL254BT_cjs.finite(chart.config?.boxWhiskerWidth, 1)),
|
|
4311
|
+
medianWidth: Math.max(0, chunkCXL254BT_cjs.finite(chart.config?.boxMedianWidth, 2)),
|
|
4312
|
+
medianColor: chart.config?.boxMedianColor ?? borderColor,
|
|
4313
|
+
whiskerColor: chart.config?.boxWhiskerColor,
|
|
4314
|
+
capSize: Math.max(0, chunkCXL254BT_cjs.finite(chart.config?.boxCapSize, 0.4)),
|
|
4315
|
+
pointSize: Math.max(0, chunkCXL254BT_cjs.finite(chart.config?.boxPointSize, 3)),
|
|
4316
|
+
pointOpacity: Math.min(1, Math.max(0, chunkCXL254BT_cjs.finite(chart.config?.boxPointOpacity, 0.7))),
|
|
4317
|
+
jitter: Math.max(0, chunkCXL254BT_cjs.finite(chart.config?.boxJitter, 1))
|
|
4219
4318
|
};
|
|
4220
4319
|
}
|
|
4221
4320
|
|
|
@@ -4226,7 +4325,7 @@ function boxplotPoint(orientation, center, value) {
|
|
|
4226
4325
|
function createBoxplotGeometry(context, layout, seriesIndex, stats) {
|
|
4227
4326
|
const { chart, plot } = context;
|
|
4228
4327
|
const { orientation } = layout;
|
|
4229
|
-
const valueAt = (value) => orientation === "horizontal" ? plot.x +
|
|
4328
|
+
const valueAt = (value) => orientation === "horizontal" ? plot.x + chunkCXL254BT_cjs.mapChartValue(value, chart.axisX, plot.width) : plot.y + plot.height - chunkCXL254BT_cjs.mapChartValue(value, chart.axisY, plot.height);
|
|
4230
4329
|
const center = plot[orientation === "horizontal" ? "y" : "x"] + seriesIndex * layout.slotWidth + layout.slotWidth / 2;
|
|
4231
4330
|
return {
|
|
4232
4331
|
center,
|
|
@@ -4241,9 +4340,12 @@ function createBoxplotGeometry(context, layout, seriesIndex, stats) {
|
|
|
4241
4340
|
// src/renderScene/charts/renderers/boxplot/points.ts
|
|
4242
4341
|
function renderSamplePoints(context, layout, mark) {
|
|
4243
4342
|
const { chart, plot, bounds, diagnostics, nextOrder } = context;
|
|
4244
|
-
const valueAt = (value) => layout.orientation === "horizontal" ? plot.x +
|
|
4343
|
+
const valueAt = (value) => layout.orientation === "horizontal" ? plot.x + chunkCXL254BT_cjs.mapChartValue(value, chart.axisX, plot.width) : plot.y + plot.height - chunkCXL254BT_cjs.mapChartValue(value, chart.axisY, plot.height);
|
|
4344
|
+
if (layout.pointSize <= 0) {
|
|
4345
|
+
return [];
|
|
4346
|
+
}
|
|
4245
4347
|
return mark.series.values.map((value, pointIndex) => {
|
|
4246
|
-
const center = mark.geometry.center + jitter(mark.seriesIndex * 1e4 + pointIndex) * layout.boxWidth;
|
|
4348
|
+
const center = mark.geometry.center + jitter(mark.seriesIndex * 1e4 + pointIndex) * layout.jitter * layout.boxWidth;
|
|
4247
4349
|
const { x, y } = boxplotPoint(layout.orientation, center, valueAt(value));
|
|
4248
4350
|
return {
|
|
4249
4351
|
type: "ellipse",
|
|
@@ -4252,9 +4354,9 @@ function renderSamplePoints(context, layout, mark) {
|
|
|
4252
4354
|
bounds,
|
|
4253
4355
|
cx: x,
|
|
4254
4356
|
cy: y,
|
|
4255
|
-
rx:
|
|
4256
|
-
ry:
|
|
4257
|
-
style: { fill:
|
|
4357
|
+
rx: layout.pointSize,
|
|
4358
|
+
ry: layout.pointSize,
|
|
4359
|
+
style: { fill: chunkCXL254BT_cjs.paint(mark.color, diagnostics, chart.id), opacity: layout.pointOpacity }
|
|
4258
4360
|
};
|
|
4259
4361
|
});
|
|
4260
4362
|
}
|
|
@@ -4265,22 +4367,30 @@ function jitter(seed) {
|
|
|
4265
4367
|
|
|
4266
4368
|
// src/renderScene/charts/renderers/boxplot/shapes.ts
|
|
4267
4369
|
function renderBoxAndWhiskers(context, layout, mark) {
|
|
4370
|
+
const whiskers = layout.whiskerWidth > 0 ? [lowerWhisker(layout, mark), upperWhisker(layout, mark)] : [];
|
|
4371
|
+
const caps = layout.whiskerWidth > 0 && layout.capSize > 0 ? [lowerWhiskerCap(layout, mark), upperWhiskerCap(layout, mark)] : [];
|
|
4372
|
+
const median = layout.medianWidth > 0 ? [medianLine(layout, mark)] : [];
|
|
4268
4373
|
return [
|
|
4269
|
-
|
|
4270
|
-
|
|
4271
|
-
|
|
4272
|
-
createBoxBorderLine(context, layout, upperWhiskerCap(layout, mark)),
|
|
4374
|
+
...[...whiskers, ...caps].map(
|
|
4375
|
+
(line) => createBoxBorderLine(context, layout, { ...line, color: whiskerColor(layout, mark) })
|
|
4376
|
+
),
|
|
4273
4377
|
createBoxNode(context, layout, mark),
|
|
4274
|
-
createBoxBorderLine(context, layout,
|
|
4378
|
+
...median.map((line) => createBoxBorderLine(context, layout, line))
|
|
4275
4379
|
];
|
|
4276
4380
|
}
|
|
4381
|
+
function whiskerColor(layout, mark) {
|
|
4382
|
+
if (layout.whiskerColor === "series") {
|
|
4383
|
+
return chunkCXL254BT_cjs.representativeColor(mark.color, layout.borderColor);
|
|
4384
|
+
}
|
|
4385
|
+
return layout.whiskerColor;
|
|
4386
|
+
}
|
|
4277
4387
|
function lowerWhisker(layout, mark) {
|
|
4278
4388
|
const { center, min, q1 } = mark.geometry;
|
|
4279
4389
|
return {
|
|
4280
4390
|
id: `chart-box-whisker-lo-${mark.id}`,
|
|
4281
4391
|
from: boxplotPoint(layout.orientation, center, min),
|
|
4282
4392
|
to: boxplotPoint(layout.orientation, center, q1),
|
|
4283
|
-
strokeWidth:
|
|
4393
|
+
strokeWidth: layout.whiskerWidth
|
|
4284
4394
|
};
|
|
4285
4395
|
}
|
|
4286
4396
|
function upperWhisker(layout, mark) {
|
|
@@ -4289,7 +4399,7 @@ function upperWhisker(layout, mark) {
|
|
|
4289
4399
|
id: `chart-box-whisker-hi-${mark.id}`,
|
|
4290
4400
|
from: boxplotPoint(layout.orientation, center, q3),
|
|
4291
4401
|
to: boxplotPoint(layout.orientation, center, max),
|
|
4292
|
-
strokeWidth:
|
|
4402
|
+
strokeWidth: layout.whiskerWidth
|
|
4293
4403
|
};
|
|
4294
4404
|
}
|
|
4295
4405
|
function lowerWhiskerCap(layout, mark) {
|
|
@@ -4299,12 +4409,12 @@ function upperWhiskerCap(layout, mark) {
|
|
|
4299
4409
|
return whiskerCap(`chart-box-cap-hi-${mark.id}`, layout, mark.geometry.center, mark.geometry.max);
|
|
4300
4410
|
}
|
|
4301
4411
|
function whiskerCap(id, layout, center, value) {
|
|
4302
|
-
const capHalf = layout.boxWidth *
|
|
4412
|
+
const capHalf = layout.boxWidth * layout.capSize / 2;
|
|
4303
4413
|
return {
|
|
4304
4414
|
id,
|
|
4305
4415
|
from: boxplotPoint(layout.orientation, center - capHalf, value),
|
|
4306
4416
|
to: boxplotPoint(layout.orientation, center + capHalf, value),
|
|
4307
|
-
strokeWidth:
|
|
4417
|
+
strokeWidth: layout.whiskerWidth
|
|
4308
4418
|
};
|
|
4309
4419
|
}
|
|
4310
4420
|
function medianLine(layout, mark) {
|
|
@@ -4313,7 +4423,8 @@ function medianLine(layout, mark) {
|
|
|
4313
4423
|
id: `chart-box-median-${mark.id}`,
|
|
4314
4424
|
from: boxplotPoint(layout.orientation, mark.geometry.center - half, mark.geometry.median),
|
|
4315
4425
|
to: boxplotPoint(layout.orientation, mark.geometry.center + half, mark.geometry.median),
|
|
4316
|
-
strokeWidth:
|
|
4426
|
+
strokeWidth: layout.medianWidth,
|
|
4427
|
+
color: layout.medianColor
|
|
4317
4428
|
};
|
|
4318
4429
|
}
|
|
4319
4430
|
function createBoxBorderLine(context, layout, line) {
|
|
@@ -4325,7 +4436,7 @@ function createBoxBorderLine(context, layout, line) {
|
|
|
4325
4436
|
d: `M ${line.from.x} ${line.from.y} L ${line.to.x} ${line.to.y}`,
|
|
4326
4437
|
style: {
|
|
4327
4438
|
fill: { kind: "none" },
|
|
4328
|
-
stroke: { kind: "solid", color: layout.borderColor },
|
|
4439
|
+
stroke: { kind: "solid", color: line.color ?? layout.borderColor },
|
|
4329
4440
|
strokeWidth: line.strokeWidth
|
|
4330
4441
|
}
|
|
4331
4442
|
};
|
|
@@ -4351,7 +4462,7 @@ function createBoxNode(context, layout, mark) {
|
|
|
4351
4462
|
height,
|
|
4352
4463
|
rx: layout.cornerRadius,
|
|
4353
4464
|
style: {
|
|
4354
|
-
fill:
|
|
4465
|
+
fill: chunkCXL254BT_cjs.paint(mark.color, diagnostics, chart.id),
|
|
4355
4466
|
stroke: { kind: "solid", color: layout.borderColor },
|
|
4356
4467
|
strokeWidth: layout.borderWidth
|
|
4357
4468
|
}
|
|
@@ -4360,12 +4471,12 @@ function createBoxNode(context, layout, mark) {
|
|
|
4360
4471
|
|
|
4361
4472
|
// src/renderScene/charts/renderers/boxplot/series.ts
|
|
4362
4473
|
function renderBoxplotSeries(context, layout, series, seriesIndex) {
|
|
4363
|
-
const stats =
|
|
4474
|
+
const stats = chunkCXL254BT_cjs.computeBoxplotStats(series.values);
|
|
4364
4475
|
if (!stats) {
|
|
4365
4476
|
return [];
|
|
4366
4477
|
}
|
|
4367
4478
|
const geometry = createBoxplotGeometry(context, layout, seriesIndex, stats);
|
|
4368
|
-
const color2 = series.color ??
|
|
4479
|
+
const color2 = series.color ?? chunkCXL254BT_cjs.CHART_COLORS[seriesIndex % chunkCXL254BT_cjs.CHART_COLORS.length];
|
|
4369
4480
|
const mark = {
|
|
4370
4481
|
id: `${context.chart.id}-${series.id}`,
|
|
4371
4482
|
series,
|
|
@@ -4427,21 +4538,21 @@ function metricComponent(chart, point) {
|
|
|
4427
4538
|
}
|
|
4428
4539
|
function customPointPosition(context, value) {
|
|
4429
4540
|
return {
|
|
4430
|
-
x: context.plot.x +
|
|
4431
|
-
y: context.plot.y + context.plot.height -
|
|
4541
|
+
x: context.plot.x + chunkCXL254BT_cjs.mapChartValue(value[0], context.chart.axisX, context.plot.width),
|
|
4542
|
+
y: context.plot.y + context.plot.height - chunkCXL254BT_cjs.mapChartValue(value[1], context.chart.axisY, context.plot.height)
|
|
4432
4543
|
};
|
|
4433
4544
|
}
|
|
4434
4545
|
function customSeriesStyle(context, series, seriesIndex) {
|
|
4435
|
-
const color2 = series.color ??
|
|
4546
|
+
const color2 = series.color ?? chunkCXL254BT_cjs.CHART_COLORS[seriesIndex % chunkCXL254BT_cjs.CHART_COLORS.length];
|
|
4436
4547
|
return {
|
|
4437
|
-
fill:
|
|
4548
|
+
fill: chunkCXL254BT_cjs.paint(color2, context.diagnostics, context.chart.id),
|
|
4438
4549
|
stroke: series.stroke ? { kind: "solid", color: series.stroke } : void 0,
|
|
4439
|
-
strokeWidth: series.stroke ?
|
|
4550
|
+
strokeWidth: series.stroke ? chunkCXL254BT_cjs.finite(series.strokeWidth, 1) : void 0
|
|
4440
4551
|
};
|
|
4441
4552
|
}
|
|
4442
4553
|
function createCustomSymbolMark(context, mark) {
|
|
4443
4554
|
const symbol = mark.series.symbol;
|
|
4444
|
-
const size =
|
|
4555
|
+
const size = chunkCXL254BT_cjs.finite(mark.series.size, 3);
|
|
4445
4556
|
const scale = symbol?.normalized ? size * 2 : 1;
|
|
4446
4557
|
const offset = symbol?.normalized ? 0.5 : 0;
|
|
4447
4558
|
const points = (symbol?.points ?? []).map(([x, y]) => ({
|
|
@@ -4453,12 +4564,12 @@ function createCustomSymbolMark(context, mark) {
|
|
|
4453
4564
|
id: customMarkId(context.chart, mark.series, mark.valueIndex),
|
|
4454
4565
|
order: context.nextOrder(),
|
|
4455
4566
|
bounds: context.bounds,
|
|
4456
|
-
d:
|
|
4567
|
+
d: chunkCXL254BT_cjs.freeformPathData({ points, tension: chunkCXL254BT_cjs.finite(symbol?.tension, 0), closed: true }),
|
|
4457
4568
|
style: mark.style
|
|
4458
4569
|
};
|
|
4459
4570
|
}
|
|
4460
4571
|
function createCustomPointMark(context, mark) {
|
|
4461
|
-
const radius =
|
|
4572
|
+
const radius = chunkCXL254BT_cjs.finite(mark.series.size, 3);
|
|
4462
4573
|
return {
|
|
4463
4574
|
type: "ellipse",
|
|
4464
4575
|
id: customMarkId(context.chart, mark.series, mark.valueIndex),
|
|
@@ -4482,7 +4593,7 @@ function renderConnectedPairs(context) {
|
|
|
4482
4593
|
const zones = chart.config?.zones ?? [];
|
|
4483
4594
|
const betterColor = zones[0]?.color ?? "#10b981";
|
|
4484
4595
|
const worseColor = zones[1]?.color ?? "#ec4899";
|
|
4485
|
-
const tieColor = zones[2]?.color ??
|
|
4596
|
+
const tieColor = zones[2]?.color ?? chunkCXL254BT_cjs.DEFAULT_ZONE_FILL;
|
|
4486
4597
|
const reverse = Boolean(chart.config?.reverseComparison);
|
|
4487
4598
|
const count = Math.min(beforeValues.length, afterValues.length);
|
|
4488
4599
|
const categories = chart.config?.categories ?? [];
|
|
@@ -4497,7 +4608,7 @@ function renderConnectedPairs(context) {
|
|
|
4497
4608
|
const better = reverse ? afterMetric < beforeMetric : afterMetric > beforeMetric;
|
|
4498
4609
|
const worse = reverse ? afterMetric > beforeMetric : afterMetric < beforeMetric;
|
|
4499
4610
|
const comparisonColor = better ? betterColor : worse ? worseColor : tieColor;
|
|
4500
|
-
const radius =
|
|
4611
|
+
const radius = chunkCXL254BT_cjs.finite(afterSeries.size, 3);
|
|
4501
4612
|
nodes.push(createConnectorLine(context, index, beforePoint, afterPoint, comparisonColor));
|
|
4502
4613
|
nodes.push(
|
|
4503
4614
|
createCustomPointMark(context, {
|
|
@@ -4505,9 +4616,9 @@ function renderConnectedPairs(context) {
|
|
|
4505
4616
|
valueIndex: index,
|
|
4506
4617
|
point: beforePoint,
|
|
4507
4618
|
style: {
|
|
4508
|
-
fill:
|
|
4509
|
-
stroke: { kind: "solid", color: HOLLOW_POINT_STROKE },
|
|
4510
|
-
strokeWidth: 1.5
|
|
4619
|
+
fill: chunkCXL254BT_cjs.paint(chart.config?.customBeforeFill ?? chart.gridColor ?? "#e2e8f0", context.diagnostics, chart.id),
|
|
4620
|
+
stroke: { kind: "solid", color: chart.config?.customBeforeStroke ?? HOLLOW_POINT_STROKE },
|
|
4621
|
+
strokeWidth: chunkCXL254BT_cjs.finite(chart.config?.customBeforeStrokeWidth, 1.5)
|
|
4511
4622
|
}
|
|
4512
4623
|
})
|
|
4513
4624
|
);
|
|
@@ -4517,7 +4628,7 @@ function renderConnectedPairs(context) {
|
|
|
4517
4628
|
valueIndex: index,
|
|
4518
4629
|
point: afterPoint,
|
|
4519
4630
|
style: {
|
|
4520
|
-
fill:
|
|
4631
|
+
fill: chunkCXL254BT_cjs.paint(comparisonColor, context.diagnostics, chart.id),
|
|
4521
4632
|
stroke: void 0,
|
|
4522
4633
|
strokeWidth: void 0
|
|
4523
4634
|
}
|
|
@@ -4529,6 +4640,10 @@ function renderConnectedPairs(context) {
|
|
|
4529
4640
|
}
|
|
4530
4641
|
return nodes;
|
|
4531
4642
|
}
|
|
4643
|
+
function connectorDash(text) {
|
|
4644
|
+
const parts = (text ?? "").split(/[ ,]+/).map(Number).filter((part) => Number.isFinite(part) && part > 0);
|
|
4645
|
+
return parts.length > 0 ? parts : void 0;
|
|
4646
|
+
}
|
|
4532
4647
|
function createConnectorLine(context, index, from, to, color2) {
|
|
4533
4648
|
const { chart } = context;
|
|
4534
4649
|
return {
|
|
@@ -4537,7 +4652,13 @@ function createConnectorLine(context, index, from, to, color2) {
|
|
|
4537
4652
|
order: context.nextOrder(),
|
|
4538
4653
|
bounds: context.bounds,
|
|
4539
4654
|
d: `M ${from.x} ${from.y} L ${to.x} ${to.y}`,
|
|
4540
|
-
style: {
|
|
4655
|
+
style: {
|
|
4656
|
+
fill: { kind: "none" },
|
|
4657
|
+
stroke: { kind: "solid", color: color2 },
|
|
4658
|
+
strokeWidth: chunkCXL254BT_cjs.finite(chart.config?.customConnectorWidth, 2),
|
|
4659
|
+
opacity: chart.config?.customConnectorOpacity,
|
|
4660
|
+
dash: connectorDash(chart.config?.customConnectorDash)
|
|
4661
|
+
}
|
|
4541
4662
|
};
|
|
4542
4663
|
}
|
|
4543
4664
|
function createConnectorLabel(context, index, beforePoint, afterPoint, radius, text) {
|
|
@@ -4555,7 +4676,7 @@ function createConnectorLabel(context, index, beforePoint, afterPoint, radius, t
|
|
|
4555
4676
|
height: 16
|
|
4556
4677
|
};
|
|
4557
4678
|
return {
|
|
4558
|
-
...
|
|
4679
|
+
...chunkCXL254BT_cjs.chartText({
|
|
4559
4680
|
id: `chart-custom-label-${chart.id}-${index}`,
|
|
4560
4681
|
order: nextOrder(),
|
|
4561
4682
|
bounds,
|
|
@@ -4564,7 +4685,8 @@ function createConnectorLabel(context, index, beforePoint, afterPoint, radius, t
|
|
|
4564
4685
|
chart,
|
|
4565
4686
|
align: horizontal ? "left" : "center"
|
|
4566
4687
|
}),
|
|
4567
|
-
fontSize: Math.max(9,
|
|
4688
|
+
fontSize: Math.max(6, chunkCXL254BT_cjs.finite(chart.config?.customLabelSize, Math.max(9, chunkCXL254BT_cjs.finite(chart.fontSize, 12)) - 2)),
|
|
4689
|
+
...chart.config?.customLabelColor ? { color: chart.config.customLabelColor } : {}
|
|
4568
4690
|
};
|
|
4569
4691
|
}
|
|
4570
4692
|
|
|
@@ -4575,8 +4697,8 @@ function classifyFieldData(context) {
|
|
|
4575
4697
|
const vectorSeries = chart.series.filter((series) => tupleSize(series.values[0]) === 4);
|
|
4576
4698
|
const scalarSamples = scalarSeries.flatMap(
|
|
4577
4699
|
(series) => series.values.map(([x, y, value]) => ({
|
|
4578
|
-
x:
|
|
4579
|
-
y: plot.height -
|
|
4700
|
+
x: chunkCXL254BT_cjs.mapChartValue(x, chart.axisX, plot.width),
|
|
4701
|
+
y: plot.height - chunkCXL254BT_cjs.mapChartValue(y, chart.axisY, plot.height),
|
|
4580
4702
|
value
|
|
4581
4703
|
}))
|
|
4582
4704
|
);
|
|
@@ -4640,20 +4762,20 @@ function createLegendLabels(context, minimum, maximum, geometry) {
|
|
|
4640
4762
|
const { chart, bounds, nextOrder } = context;
|
|
4641
4763
|
const y = geometry.y + geometry.height + 3;
|
|
4642
4764
|
return [
|
|
4643
|
-
|
|
4765
|
+
chunkCXL254BT_cjs.chartText({
|
|
4644
4766
|
id: `chart-field-colorbar-min-${chart.id}`,
|
|
4645
4767
|
order: nextOrder(),
|
|
4646
4768
|
bounds,
|
|
4647
4769
|
frame: { x: geometry.x, y, width: 80, height: 16 },
|
|
4648
|
-
text:
|
|
4770
|
+
text: chunkCXL254BT_cjs.formatFieldValue(minimum),
|
|
4649
4771
|
chart
|
|
4650
4772
|
}),
|
|
4651
|
-
|
|
4773
|
+
chunkCXL254BT_cjs.chartText({
|
|
4652
4774
|
id: `chart-field-colorbar-max-${chart.id}`,
|
|
4653
4775
|
order: nextOrder(),
|
|
4654
4776
|
bounds,
|
|
4655
4777
|
frame: { x: geometry.x + geometry.width - 80, y, width: 80, height: 16 },
|
|
4656
|
-
text:
|
|
4778
|
+
text: chunkCXL254BT_cjs.formatFieldValue(maximum),
|
|
4657
4779
|
chart,
|
|
4658
4780
|
align: "right"
|
|
4659
4781
|
})
|
|
@@ -4666,7 +4788,7 @@ function colorAtRamp(ramp, value) {
|
|
|
4666
4788
|
if (!ramp?.stops.length) {
|
|
4667
4789
|
return RAMP_FALLBACK_COLOR;
|
|
4668
4790
|
}
|
|
4669
|
-
return
|
|
4791
|
+
return chunkCXL254BT_cjs.interpolateHexColorStops(ramp.stops, value);
|
|
4670
4792
|
}
|
|
4671
4793
|
|
|
4672
4794
|
// src/renderScene/charts/field/isolines.ts
|
|
@@ -4876,7 +4998,7 @@ function createIsoline(context, grid, threshold, thresholdIndex) {
|
|
|
4876
4998
|
}
|
|
4877
4999
|
const chains = stitchIsolineSegments(segments);
|
|
4878
5000
|
const path = chains.map(
|
|
4879
|
-
(chain) =>
|
|
5001
|
+
(chain) => chunkCXL254BT_cjs.linePathData(
|
|
4880
5002
|
chain.map(([x, y]) => ({ x: plot.x + x, y: plot.y + y })),
|
|
4881
5003
|
ISOLINE_TENSION
|
|
4882
5004
|
)
|
|
@@ -4900,7 +5022,7 @@ function createIsoline(context, grid, threshold, thresholdIndex) {
|
|
|
4900
5022
|
function renderVectorField(context, seriesList) {
|
|
4901
5023
|
const nodes = [];
|
|
4902
5024
|
seriesList.forEach((series, seriesIndex) => {
|
|
4903
|
-
const color2 = series.color ??
|
|
5025
|
+
const color2 = series.color ?? chunkCXL254BT_cjs.CHART_COLORS[seriesIndex % chunkCXL254BT_cjs.CHART_COLORS.length];
|
|
4904
5026
|
series.values.forEach((vector, vectorIndex) => {
|
|
4905
5027
|
nodes.push(createVectorNode(context, series.id, vector, vectorIndex, color2));
|
|
4906
5028
|
});
|
|
@@ -4910,10 +5032,10 @@ function renderVectorField(context, seriesList) {
|
|
|
4910
5032
|
function createVectorNode(context, seriesId, vector, vectorIndex, color2) {
|
|
4911
5033
|
const { chart, plot, bounds, diagnostics, nextOrder } = context;
|
|
4912
5034
|
const [x, y, angle, magnitude] = vector;
|
|
4913
|
-
const startX = plot.x +
|
|
4914
|
-
const startY = plot.y + plot.height -
|
|
4915
|
-
const endX = plot.x +
|
|
4916
|
-
const endY = plot.y + plot.height -
|
|
5035
|
+
const startX = plot.x + chunkCXL254BT_cjs.mapChartValue(x, chart.axisX, plot.width);
|
|
5036
|
+
const startY = plot.y + plot.height - chunkCXL254BT_cjs.mapChartValue(y, chart.axisY, plot.height);
|
|
5037
|
+
const endX = plot.x + chunkCXL254BT_cjs.mapChartValue(x + Math.cos(angle) * magnitude, chart.axisX, plot.width);
|
|
5038
|
+
const endY = plot.y + plot.height - chunkCXL254BT_cjs.mapChartValue(y + Math.sin(angle) * magnitude, chart.axisY, plot.height);
|
|
4917
5039
|
return {
|
|
4918
5040
|
type: "path",
|
|
4919
5041
|
id: `chart-field-vector-${chart.id}-${seriesId}-${vectorIndex}`,
|
|
@@ -4923,7 +5045,7 @@ function createVectorNode(context, seriesId, vector, vectorIndex, color2) {
|
|
|
4923
5045
|
markerEnd: "filled_arrow",
|
|
4924
5046
|
style: {
|
|
4925
5047
|
fill: { kind: "none" },
|
|
4926
|
-
stroke:
|
|
5048
|
+
stroke: chunkCXL254BT_cjs.paint(color2, diagnostics, chart.id),
|
|
4927
5049
|
strokeWidth: 2
|
|
4928
5050
|
}
|
|
4929
5051
|
};
|
|
@@ -4970,7 +5092,7 @@ function createHeatmapCell(layout, series, rowIndex, columnIndex) {
|
|
|
4970
5092
|
};
|
|
4971
5093
|
}
|
|
4972
5094
|
function colorForValue(value, layout) {
|
|
4973
|
-
return
|
|
5095
|
+
return chunkCXL254BT_cjs.zoneColorAtValue(value, layout.bands, layout.zones);
|
|
4974
5096
|
}
|
|
4975
5097
|
function renderHeatmapCell(context, layout, cell) {
|
|
4976
5098
|
const background = createCellBackground(context, layout, cell);
|
|
@@ -4981,38 +5103,55 @@ function renderHeatmapCell(context, layout, cell) {
|
|
|
4981
5103
|
}
|
|
4982
5104
|
function createCellBackground(context, layout, cell) {
|
|
4983
5105
|
const { chart, bounds, nextOrder } = context;
|
|
5106
|
+
const id = `chart-heatmap-cell-${chart.id}-${cell.seriesId}-${cell.columnIndex}`;
|
|
5107
|
+
const style = {
|
|
5108
|
+
fill: { kind: "solid", color: cell.color },
|
|
5109
|
+
stroke: { kind: "solid", color: chart.config?.cellStrokeColor ?? chart.gridColor ?? "#e2e8f0" },
|
|
5110
|
+
strokeWidth: chunkCXL254BT_cjs.finite(chart.config?.cellStrokeWidth, chunkCXL254BT_cjs.finite(chart.gridWidth, 1))
|
|
5111
|
+
};
|
|
5112
|
+
if (chart.config?.cellShape === "circle") {
|
|
5113
|
+
return {
|
|
5114
|
+
type: "ellipse",
|
|
5115
|
+
id,
|
|
5116
|
+
order: nextOrder(),
|
|
5117
|
+
bounds,
|
|
5118
|
+
cx: cell.frame.x + cell.frame.width / 2,
|
|
5119
|
+
cy: cell.frame.y + cell.frame.height / 2,
|
|
5120
|
+
rx: cell.frame.width / 2,
|
|
5121
|
+
ry: cell.frame.height / 2,
|
|
5122
|
+
style
|
|
5123
|
+
};
|
|
5124
|
+
}
|
|
4984
5125
|
return {
|
|
4985
5126
|
type: "rect",
|
|
4986
|
-
id
|
|
5127
|
+
id,
|
|
4987
5128
|
order: nextOrder(),
|
|
4988
5129
|
bounds,
|
|
4989
5130
|
...cell.frame,
|
|
4990
5131
|
rx: layout.grid.cellRadius,
|
|
4991
|
-
style
|
|
4992
|
-
fill: { kind: "solid", color: cell.color },
|
|
4993
|
-
stroke: { kind: "solid", color: chart.gridColor ?? "#e2e8f0" },
|
|
4994
|
-
strokeWidth: chunkYM3XFBI4_cjs.finite(chart.gridWidth, 1)
|
|
4995
|
-
}
|
|
5132
|
+
style
|
|
4996
5133
|
};
|
|
4997
5134
|
}
|
|
4998
5135
|
function createCellValueLabel(context, layout, cell) {
|
|
4999
5136
|
const { chart, bounds, nextOrder } = context;
|
|
5137
|
+
const size = Math.max(6, chunkCXL254BT_cjs.finite(chart.config?.cellValueSize, layout.fontSize));
|
|
5000
5138
|
return {
|
|
5001
|
-
...
|
|
5139
|
+
...chunkCXL254BT_cjs.chartText({
|
|
5002
5140
|
id: `chart-heatmap-value-${chart.id}-${cell.seriesId}-${cell.columnIndex}`,
|
|
5003
5141
|
order: nextOrder(),
|
|
5004
5142
|
bounds,
|
|
5005
5143
|
frame: {
|
|
5006
5144
|
x: cell.frame.x,
|
|
5007
|
-
y: cell.frame.y + cell.frame.height / 2 -
|
|
5145
|
+
y: cell.frame.y + cell.frame.height / 2 - size / 2,
|
|
5008
5146
|
width: cell.frame.width,
|
|
5009
|
-
height:
|
|
5147
|
+
height: size + 2
|
|
5010
5148
|
},
|
|
5011
5149
|
text: String(cell.value),
|
|
5012
5150
|
chart,
|
|
5013
5151
|
align: "center"
|
|
5014
5152
|
}),
|
|
5015
|
-
|
|
5153
|
+
...chart.config?.cellValueSize === void 0 ? {} : { fontSize: size },
|
|
5154
|
+
color: chart.config?.cellValueColor ?? chunkCXL254BT_cjs.contrastTextColor(cell.color)
|
|
5016
5155
|
};
|
|
5017
5156
|
}
|
|
5018
5157
|
|
|
@@ -5028,7 +5167,7 @@ function renderRowHeaders(context, layout) {
|
|
|
5028
5167
|
}
|
|
5029
5168
|
function createRowHeader(context, layout, series, rowIndex) {
|
|
5030
5169
|
const { chart, plot, bounds, nextOrder } = context;
|
|
5031
|
-
return
|
|
5170
|
+
return chunkCXL254BT_cjs.chartText({
|
|
5032
5171
|
id: `chart-heatmap-row-${chart.id}-${series.id}`,
|
|
5033
5172
|
order: nextOrder(),
|
|
5034
5173
|
bounds,
|
|
@@ -5050,7 +5189,7 @@ function renderColumnHeaders(context, layout) {
|
|
|
5050
5189
|
}
|
|
5051
5190
|
function createColumnHeader(context, layout, label, columnIndex) {
|
|
5052
5191
|
const { chart, plot, bounds, nextOrder } = context;
|
|
5053
|
-
return
|
|
5192
|
+
return chunkCXL254BT_cjs.chartText({
|
|
5054
5193
|
id: `chart-heatmap-col-${chart.id}-${columnIndex}`,
|
|
5055
5194
|
order: nextOrder(),
|
|
5056
5195
|
bounds,
|
|
@@ -5074,9 +5213,9 @@ function createHeatmapLayout(context) {
|
|
|
5074
5213
|
return {
|
|
5075
5214
|
rows: chart.series,
|
|
5076
5215
|
columns,
|
|
5077
|
-
bands:
|
|
5078
|
-
zones: chart.config?.zones?.length ? chart.config.zones :
|
|
5079
|
-
fontSize: Math.max(9,
|
|
5216
|
+
bands: chunkCXL254BT_cjs.axisBands(chart.axisY),
|
|
5217
|
+
zones: chart.config?.zones?.length ? chart.config.zones : chunkCXL254BT_cjs.DEFAULT_HEATMAP_ZONES,
|
|
5218
|
+
fontSize: Math.max(9, chunkCXL254BT_cjs.finite(chart.fontSize, 12)),
|
|
5080
5219
|
reservedSpace,
|
|
5081
5220
|
grid: createHeatmapGrid(context, reservedSpace, columns.length)
|
|
5082
5221
|
};
|
|
@@ -5087,9 +5226,9 @@ function heatmapColumns(context) {
|
|
|
5087
5226
|
}
|
|
5088
5227
|
function heatmapReservedSpace(context) {
|
|
5089
5228
|
const { chart } = context;
|
|
5090
|
-
const fontSize = Math.max(9,
|
|
5229
|
+
const fontSize = Math.max(9, chunkCXL254BT_cjs.finite(chart.fontSize, 12));
|
|
5091
5230
|
const longestLabel = chart.series.reduce(
|
|
5092
|
-
(max, series) => Math.max(max,
|
|
5231
|
+
(max, series) => Math.max(max, chunkCXL254BT_cjs.estimateTextWidth(series.label ?? "", fontSize, false)),
|
|
5093
5232
|
0
|
|
5094
5233
|
);
|
|
5095
5234
|
return {
|
|
@@ -5103,7 +5242,7 @@ function createHeatmapGrid(context, reservedSpace, columnCount) {
|
|
|
5103
5242
|
const width = Math.max(1, context.plot.width - reservedSpace.rowHeaders);
|
|
5104
5243
|
const height = Math.max(1, context.plot.height - reservedSpace.columnHeaders - reservedSpace.legend);
|
|
5105
5244
|
const rowCount = chart.series.length;
|
|
5106
|
-
const cellGap = Math.max(0,
|
|
5245
|
+
const cellGap = Math.max(0, chunkCXL254BT_cjs.finite(chart.config?.cellGap, 0));
|
|
5107
5246
|
let cellWidth = columnCount ? width / columnCount : width;
|
|
5108
5247
|
let cellHeight = rowCount ? height / rowCount : height;
|
|
5109
5248
|
let gridWidth = width;
|
|
@@ -5123,7 +5262,7 @@ function createHeatmapGrid(context, reservedSpace, columnCount) {
|
|
|
5123
5262
|
cellWidth,
|
|
5124
5263
|
cellHeight,
|
|
5125
5264
|
cellGap,
|
|
5126
|
-
cellRadius: Math.max(0,
|
|
5265
|
+
cellRadius: Math.max(0, chunkCXL254BT_cjs.finite(chart.config?.barCornerRadius, cellGap))
|
|
5127
5266
|
};
|
|
5128
5267
|
}
|
|
5129
5268
|
|
|
@@ -5139,7 +5278,7 @@ function renderHeatmapLegend(context, layout) {
|
|
|
5139
5278
|
const barWidth = layout.grid.width;
|
|
5140
5279
|
const labelHeight = layout.fontSize + 2;
|
|
5141
5280
|
const barY = layout.grid.y + layout.grid.height + 6;
|
|
5142
|
-
const barBounds =
|
|
5281
|
+
const barBounds = chunkCXL254BT_cjs.boxBounds({ x: barX, y: barY, width: barWidth, height: BAR_HEIGHT });
|
|
5143
5282
|
return [
|
|
5144
5283
|
createGradientBar(context, layout, barX, barY, barWidth, barBounds),
|
|
5145
5284
|
...createBoundaryTicks(context, layout, barX, barY, barWidth, labelHeight)
|
|
@@ -5156,7 +5295,7 @@ function createGradientBar(context, layout, barX, barY, barWidth, barBounds) {
|
|
|
5156
5295
|
const zones = layout.zones.slice(0, bandCount);
|
|
5157
5296
|
const stops = zones.map((zone, index) => ({
|
|
5158
5297
|
offset: bandRatio(layout, layout.bands[index + 1] ?? layout.bands[layout.bands.length - 1]) * 100,
|
|
5159
|
-
color: zone.color ??
|
|
5298
|
+
color: zone.color ?? chunkCXL254BT_cjs.DEFAULT_ZONE_FILL
|
|
5160
5299
|
}));
|
|
5161
5300
|
return {
|
|
5162
5301
|
type: "rect",
|
|
@@ -5170,7 +5309,7 @@ function createGradientBar(context, layout, barX, barY, barWidth, barBounds) {
|
|
|
5170
5309
|
rx: 3,
|
|
5171
5310
|
zoneGradient: { axis: "y", min: chart.axisY.min, max: chart.axisY.max },
|
|
5172
5311
|
style: {
|
|
5173
|
-
fill: stops.length ? { kind: "linear-gradient", angle: 0, stops } : { kind: "solid", color:
|
|
5312
|
+
fill: stops.length ? { kind: "linear-gradient", angle: 0, stops } : { kind: "solid", color: chunkCXL254BT_cjs.DEFAULT_ZONE_FILL },
|
|
5174
5313
|
stroke: { kind: "solid", color: chart.gridColor ?? "#e2e8f0" },
|
|
5175
5314
|
strokeWidth: 1
|
|
5176
5315
|
}
|
|
@@ -5198,12 +5337,12 @@ function createBoundaryTicks(context, layout, barX, barY, barWidth, labelHeight)
|
|
|
5198
5337
|
const isLast = index === layout.bands.length - 1;
|
|
5199
5338
|
const align = isFirst ? "left" : isLast ? "right" : "center";
|
|
5200
5339
|
const frameX = isFirst ? x : isLast ? x - labelWidth : x - labelWidth / 2;
|
|
5201
|
-
const label =
|
|
5340
|
+
const label = chunkCXL254BT_cjs.chartText({
|
|
5202
5341
|
id: `chart-heatmap-legend-tick-label-${chart.id}-${index}`,
|
|
5203
5342
|
order: nextOrder(),
|
|
5204
5343
|
bounds,
|
|
5205
5344
|
frame: { x: frameX, y: labelY, width: labelWidth, height: labelHeight },
|
|
5206
|
-
text:
|
|
5345
|
+
text: chunkCXL254BT_cjs.formatFieldValue(value),
|
|
5207
5346
|
chart,
|
|
5208
5347
|
align
|
|
5209
5348
|
});
|
|
@@ -5275,6 +5414,10 @@ function groupSankeyColumns(ids, columns) {
|
|
|
5275
5414
|
return groups;
|
|
5276
5415
|
}
|
|
5277
5416
|
|
|
5417
|
+
// src/renderScene/charts/geometry/sankey/constants.ts
|
|
5418
|
+
var SANKEY_NODE_WIDTH = 18;
|
|
5419
|
+
var SANKEY_NODE_GAP = 8;
|
|
5420
|
+
|
|
5278
5421
|
// src/renderScene/charts/geometry/sankey/graph.ts
|
|
5279
5422
|
function createSankeyGraph(nodes, links) {
|
|
5280
5423
|
const ids = new Set(nodes.map((node) => node.id));
|
|
@@ -5298,10 +5441,6 @@ function createSankeyGraph(nodes, links) {
|
|
|
5298
5441
|
return { ids, links: validLinks, incoming, outgoing };
|
|
5299
5442
|
}
|
|
5300
5443
|
|
|
5301
|
-
// src/renderScene/charts/geometry/sankey/constants.ts
|
|
5302
|
-
var SANKEY_NODE_WIDTH = 18;
|
|
5303
|
-
var SANKEY_NODE_GAP = 8;
|
|
5304
|
-
|
|
5305
5444
|
// src/renderScene/charts/geometry/sankey/nodeGeometry.ts
|
|
5306
5445
|
function nodeValues(graph) {
|
|
5307
5446
|
const values = /* @__PURE__ */ new Map();
|
|
@@ -5312,11 +5451,11 @@ function nodeValues(graph) {
|
|
|
5312
5451
|
}
|
|
5313
5452
|
return values;
|
|
5314
5453
|
}
|
|
5315
|
-
function calculateValueScale(groups, values, height) {
|
|
5454
|
+
function calculateValueScale(groups, values, height, nodeGap) {
|
|
5316
5455
|
let scale = Infinity;
|
|
5317
5456
|
for (const ids of groups.values()) {
|
|
5318
5457
|
const total = ids.reduce((sum, id) => sum + (values.get(id) ?? 0), 0);
|
|
5319
|
-
const gaps = Math.max(0, ids.length - 1) *
|
|
5458
|
+
const gaps = Math.max(0, ids.length - 1) * nodeGap;
|
|
5320
5459
|
const usable = Math.max(1, height - gaps);
|
|
5321
5460
|
if (total > 0) {
|
|
5322
5461
|
scale = Math.min(scale, usable / total);
|
|
@@ -5327,16 +5466,16 @@ function calculateValueScale(groups, values, height) {
|
|
|
5327
5466
|
}
|
|
5328
5467
|
return scale;
|
|
5329
5468
|
}
|
|
5330
|
-
function sankeyNodeX(column, columnCount, width) {
|
|
5469
|
+
function sankeyNodeX(column, columnCount, width, nodeWidth = SANKEY_NODE_WIDTH) {
|
|
5331
5470
|
if (columnCount <= 1) {
|
|
5332
5471
|
return 0;
|
|
5333
5472
|
}
|
|
5334
|
-
return column * (width -
|
|
5473
|
+
return column * (width - nodeWidth) / (columnCount - 1);
|
|
5335
5474
|
}
|
|
5336
|
-
function calculateNodeGeometry(graph, columns, height) {
|
|
5475
|
+
function calculateNodeGeometry(graph, columns, height, nodeGap = SANKEY_NODE_GAP) {
|
|
5337
5476
|
const groups = groupSankeyColumns(graph.ids, columns);
|
|
5338
5477
|
const values = nodeValues(graph);
|
|
5339
|
-
const valueScale = calculateValueScale(groups, values, height);
|
|
5478
|
+
const valueScale = calculateValueScale(groups, values, height, nodeGap);
|
|
5340
5479
|
const y = /* @__PURE__ */ new Map();
|
|
5341
5480
|
const heights = /* @__PURE__ */ new Map();
|
|
5342
5481
|
for (const ids of groups.values()) {
|
|
@@ -5345,7 +5484,7 @@ function calculateNodeGeometry(graph, columns, height) {
|
|
|
5345
5484
|
const nodeHeight = Math.max(2, (values.get(id) ?? 0) * valueScale);
|
|
5346
5485
|
y.set(id, cursor);
|
|
5347
5486
|
heights.set(id, nodeHeight);
|
|
5348
|
-
cursor += nodeHeight +
|
|
5487
|
+
cursor += nodeHeight + nodeGap;
|
|
5349
5488
|
}
|
|
5350
5489
|
}
|
|
5351
5490
|
return {
|
|
@@ -5358,7 +5497,7 @@ function calculateNodeGeometry(graph, columns, height) {
|
|
|
5358
5497
|
}
|
|
5359
5498
|
|
|
5360
5499
|
// src/renderScene/charts/geometry/sankey/links.ts
|
|
5361
|
-
function layoutSankeyLinks(graph, geometry, width, offsets) {
|
|
5500
|
+
function layoutSankeyLinks(graph, geometry, width, offsets, nodeWidth = SANKEY_NODE_WIDTH) {
|
|
5362
5501
|
const outgoingOffsets = /* @__PURE__ */ new Map();
|
|
5363
5502
|
const incomingOffsets = /* @__PURE__ */ new Map();
|
|
5364
5503
|
for (const id of graph.ids) {
|
|
@@ -5380,8 +5519,8 @@ function layoutSankeyLinks(graph, geometry, width, offsets) {
|
|
|
5380
5519
|
target: link.target,
|
|
5381
5520
|
value: link.value,
|
|
5382
5521
|
color: link.color,
|
|
5383
|
-
x0: sankeyNodeX(geometry.columns.get(link.source) ?? 0, geometry.columnCount, width) +
|
|
5384
|
-
x1: sankeyNodeX(geometry.columns.get(link.target) ?? 0, geometry.columnCount, width) + (targetOffset?.x ?? 0),
|
|
5522
|
+
x0: sankeyNodeX(geometry.columns.get(link.source) ?? 0, geometry.columnCount, width, nodeWidth) + nodeWidth + (sourceOffset?.x ?? 0),
|
|
5523
|
+
x1: sankeyNodeX(geometry.columns.get(link.target) ?? 0, geometry.columnCount, width, nodeWidth) + (targetOffset?.x ?? 0),
|
|
5385
5524
|
sourceY0: sourceTop + sourceSlice,
|
|
5386
5525
|
sourceY1: sourceTop + sourceSlice + sliceHeight,
|
|
5387
5526
|
targetY0: targetTop + targetSlice,
|
|
@@ -5391,7 +5530,7 @@ function layoutSankeyLinks(graph, geometry, width, offsets) {
|
|
|
5391
5530
|
}
|
|
5392
5531
|
|
|
5393
5532
|
// src/renderScene/charts/geometry/sankey/nodes.ts
|
|
5394
|
-
function layoutSankeyNodes(inputs, graph, geometry, width, offsets) {
|
|
5533
|
+
function layoutSankeyNodes(inputs, graph, geometry, width, offsets, nodeWidth = SANKEY_NODE_WIDTH) {
|
|
5395
5534
|
return [...graph.ids].map((id) => {
|
|
5396
5535
|
const input = inputs.find((node) => node.id === id);
|
|
5397
5536
|
const column = geometry.columns.get(id) ?? 0;
|
|
@@ -5400,9 +5539,9 @@ function layoutSankeyNodes(inputs, graph, geometry, width, offsets) {
|
|
|
5400
5539
|
id,
|
|
5401
5540
|
label: input?.label ?? id,
|
|
5402
5541
|
color: input?.color,
|
|
5403
|
-
x: sankeyNodeX(column, geometry.columnCount, width) + (offset?.x ?? 0),
|
|
5542
|
+
x: sankeyNodeX(column, geometry.columnCount, width, nodeWidth) + (offset?.x ?? 0),
|
|
5404
5543
|
y: (geometry.y.get(id) ?? 0) + (offset?.y ?? 0),
|
|
5405
|
-
width:
|
|
5544
|
+
width: nodeWidth,
|
|
5406
5545
|
height: geometry.heights.get(id) ?? 2,
|
|
5407
5546
|
column
|
|
5408
5547
|
};
|
|
@@ -5419,17 +5558,17 @@ function collectOffsets(inputs) {
|
|
|
5419
5558
|
}
|
|
5420
5559
|
return offsets;
|
|
5421
5560
|
}
|
|
5422
|
-
function layoutSankey(nodeInputs, linkInputs, width, height) {
|
|
5561
|
+
function layoutSankey(nodeInputs, linkInputs, width, height, options = { nodeWidth: SANKEY_NODE_WIDTH, nodeGap: SANKEY_NODE_GAP }) {
|
|
5423
5562
|
const graph = createSankeyGraph(nodeInputs, linkInputs);
|
|
5424
5563
|
if (graph.ids.size === 0) {
|
|
5425
5564
|
return { nodes: [], links: [] };
|
|
5426
5565
|
}
|
|
5427
5566
|
const columns = assignSankeyColumns(graph);
|
|
5428
|
-
const geometry = calculateNodeGeometry(graph, columns, height);
|
|
5567
|
+
const geometry = calculateNodeGeometry(graph, columns, height, options.nodeGap);
|
|
5429
5568
|
const offsets = collectOffsets(nodeInputs);
|
|
5430
5569
|
return {
|
|
5431
|
-
nodes: layoutSankeyNodes(nodeInputs, graph, geometry, width, offsets),
|
|
5432
|
-
links: layoutSankeyLinks(graph, geometry, width, offsets)
|
|
5570
|
+
nodes: layoutSankeyNodes(nodeInputs, graph, geometry, width, offsets, options.nodeWidth),
|
|
5571
|
+
links: layoutSankeyLinks(graph, geometry, width, offsets, options.nodeWidth)
|
|
5433
5572
|
};
|
|
5434
5573
|
}
|
|
5435
5574
|
|
|
@@ -5531,6 +5670,8 @@ function placeHorizontalTreemapRow(row, bounds) {
|
|
|
5531
5670
|
}
|
|
5532
5671
|
|
|
5533
5672
|
// src/renderScene/charts/renderers/hexbin.ts
|
|
5673
|
+
var DEFAULT_MIN_OPACITY = 0.15;
|
|
5674
|
+
var GAP_TO_RADIUS = 1 / Math.sqrt(3);
|
|
5534
5675
|
function hexPath(cx, cy, radius) {
|
|
5535
5676
|
const points = [];
|
|
5536
5677
|
for (let corner = 0; corner < 6; corner++) {
|
|
@@ -5542,29 +5683,38 @@ function hexPath(cx, cy, radius) {
|
|
|
5542
5683
|
function renderHexbin(context) {
|
|
5543
5684
|
const { chart, plot, bounds, diagnostics, nextOrder } = context;
|
|
5544
5685
|
const nodes = [];
|
|
5545
|
-
const
|
|
5546
|
-
const
|
|
5686
|
+
const config = chart.config;
|
|
5687
|
+
const hexRadius = Math.max(1, config?.hexRadius ?? chunkCXL254BT_cjs.DEFAULT_HEX_RADIUS);
|
|
5688
|
+
const drawRadius = Math.max(0.5, hexRadius - Math.max(0, config?.hexGap ?? 0) * GAP_TO_RADIUS);
|
|
5689
|
+
const strokeWidth = config?.hexStrokeWidth ?? 0;
|
|
5690
|
+
const minOpacity = Math.min(1, Math.max(0, config?.hexMinOpacity ?? DEFAULT_MIN_OPACITY));
|
|
5691
|
+
const shadow = chunkCXL254BT_cjs.resolveChartShadow(chart.shadowStyle);
|
|
5547
5692
|
const clipPath = shadow ? `M ${plot.x} ${plot.y} H ${plot.x + plot.width} V ${plot.y + plot.height} H ${plot.x} Z` : void 0;
|
|
5548
5693
|
chart.series.forEach((series, seriesIndex) => {
|
|
5549
5694
|
const explicit = series.values.length > 0 && Array.isArray(series.values[0]);
|
|
5550
5695
|
const pairs = explicit ? series.values : series.values.map((y, i) => [chart.axisX.min + i * chart.axisX.step, y]);
|
|
5551
5696
|
const pixelPoints2 = pairs.map(([vx, vy]) => ({
|
|
5552
|
-
x:
|
|
5553
|
-
y: plot.height -
|
|
5697
|
+
x: chunkCXL254BT_cjs.mapChartValue(vx, chart.axisX, plot.width),
|
|
5698
|
+
y: plot.height - chunkCXL254BT_cjs.mapChartValue(vy, chart.axisY, plot.height)
|
|
5554
5699
|
}));
|
|
5555
5700
|
const bins = computeHexBins(pixelPoints2, hexRadius);
|
|
5556
5701
|
const maxCount = Math.max(1, ...bins.map((bin) => bin.count));
|
|
5557
|
-
const color2 = series.color ??
|
|
5702
|
+
const color2 = series.color ?? chunkCXL254BT_cjs.CHART_COLORS[seriesIndex % chunkCXL254BT_cjs.CHART_COLORS.length];
|
|
5703
|
+
const ramp = config?.scale;
|
|
5558
5704
|
bins.forEach((bin, i) => {
|
|
5705
|
+
const share = bin.count / maxCount;
|
|
5706
|
+
const fill2 = ramp ? colorAtRamp(ramp, share) : color2;
|
|
5559
5707
|
nodes.push({
|
|
5560
5708
|
type: "path",
|
|
5561
5709
|
id: `chart-hexbin-${chart.id}-${series.id}-${i}`,
|
|
5562
5710
|
order: nextOrder(),
|
|
5563
5711
|
bounds,
|
|
5564
|
-
d: hexPath(plot.x + bin.cx, plot.y + bin.cy,
|
|
5712
|
+
d: hexPath(plot.x + bin.cx, plot.y + bin.cy, drawRadius),
|
|
5565
5713
|
style: {
|
|
5566
|
-
fill:
|
|
5567
|
-
|
|
5714
|
+
fill: chunkCXL254BT_cjs.paint(fill2, diagnostics, chart.id),
|
|
5715
|
+
stroke: strokeWidth > 0 ? chunkCXL254BT_cjs.paint(config?.hexStrokeColor ?? fill2, diagnostics, chart.id) : void 0,
|
|
5716
|
+
strokeWidth: strokeWidth > 0 ? strokeWidth : void 0,
|
|
5717
|
+
opacity: ramp ? void 0 : Math.max(minOpacity, share),
|
|
5568
5718
|
shadow,
|
|
5569
5719
|
clip: clipPath ? { type: "path", d: clipPath } : void 0
|
|
5570
5720
|
}
|
|
@@ -5584,8 +5734,8 @@ function seriesValuePairs(chart, series) {
|
|
|
5584
5734
|
function pixelPoints(context, pairs) {
|
|
5585
5735
|
const { chart, plot } = context;
|
|
5586
5736
|
return pairs.map(([x, y]) => ({
|
|
5587
|
-
x: plot.x +
|
|
5588
|
-
y: plot.y + plot.height -
|
|
5737
|
+
x: plot.x + chunkCXL254BT_cjs.mapChartValue(x, chart.axisX, plot.width),
|
|
5738
|
+
y: plot.y + plot.height - chunkCXL254BT_cjs.mapChartValue(y, chart.axisY, plot.height)
|
|
5589
5739
|
}));
|
|
5590
5740
|
}
|
|
5591
5741
|
|
|
@@ -5595,7 +5745,7 @@ function createLineAreaFill(context, series, points, color2, tension, areaOpacit
|
|
|
5595
5745
|
const baselineY = plot.y + plot.height;
|
|
5596
5746
|
const first = points[0];
|
|
5597
5747
|
const last = points[points.length - 1];
|
|
5598
|
-
const d = `${
|
|
5748
|
+
const d = `${chunkCXL254BT_cjs.linePathData(points, tension)} L ${last.x} ${baselineY} L ${first.x} ${baselineY} Z`;
|
|
5599
5749
|
const top = Math.min(...points.map((point) => point.y));
|
|
5600
5750
|
const centerX = (Math.min(...points.map((point) => point.x)) + Math.max(...points.map((point) => point.x))) / 2;
|
|
5601
5751
|
const halfHeight = (baselineY - top) / 2;
|
|
@@ -5617,8 +5767,8 @@ function createLineAreaFill(context, series, points, color2, tension, areaOpacit
|
|
|
5617
5767
|
kind: "linear-gradient",
|
|
5618
5768
|
angle: 90,
|
|
5619
5769
|
stops: [
|
|
5620
|
-
{ offset: 0, color:
|
|
5621
|
-
{ offset: 100, color:
|
|
5770
|
+
{ offset: 0, color: chunkCXL254BT_cjs.colorWithAlpha(color2, areaOpacity) },
|
|
5771
|
+
{ offset: 100, color: chunkCXL254BT_cjs.colorWithAlpha(color2, 0) }
|
|
5622
5772
|
]
|
|
5623
5773
|
},
|
|
5624
5774
|
stroke: { kind: "none" },
|
|
@@ -5641,7 +5791,7 @@ function guideNode(context, mark) {
|
|
|
5641
5791
|
d: `M ${mark.point.x} ${mark.point.y} V ${plot.y + plot.height}`,
|
|
5642
5792
|
style: {
|
|
5643
5793
|
fill: { kind: "none" },
|
|
5644
|
-
stroke:
|
|
5794
|
+
stroke: chunkCXL254BT_cjs.paint(mark.color, diagnostics, chart.id),
|
|
5645
5795
|
strokeWidth: 1,
|
|
5646
5796
|
dash: [3, 4],
|
|
5647
5797
|
opacity: 0.55,
|
|
@@ -5662,7 +5812,7 @@ function dotNode(context, mark) {
|
|
|
5662
5812
|
rx: mark.radius,
|
|
5663
5813
|
ry: mark.radius,
|
|
5664
5814
|
style: {
|
|
5665
|
-
fill:
|
|
5815
|
+
fill: chunkCXL254BT_cjs.paint(mark.color, diagnostics, chart.id),
|
|
5666
5816
|
shadow: glow ? { color: mark.color, opacity: 0.9, blur: glow, dx: 0, dy: 0 } : void 0,
|
|
5667
5817
|
pointerEvents: "none"
|
|
5668
5818
|
}
|
|
@@ -5675,7 +5825,7 @@ function labelNode(context, mark, value) {
|
|
|
5675
5825
|
const text = formatHighlight(config?.highlightLabelFormat, config?.categories?.[mark.index] ?? "", value);
|
|
5676
5826
|
const width = Math.max(48, text.length * fontSize * 0.62);
|
|
5677
5827
|
return {
|
|
5678
|
-
...
|
|
5828
|
+
...chunkCXL254BT_cjs.chartText({
|
|
5679
5829
|
id: `chart-highlight-label-${mark.key}`,
|
|
5680
5830
|
order: nextOrder(),
|
|
5681
5831
|
bounds,
|
|
@@ -5755,15 +5905,15 @@ function createLineError(context, mark) {
|
|
|
5755
5905
|
return null;
|
|
5756
5906
|
}
|
|
5757
5907
|
const { chart, plot, bounds, nextOrder } = context;
|
|
5758
|
-
const [lower, upper] =
|
|
5759
|
-
return
|
|
5908
|
+
const [lower, upper] = chunkCXL254BT_cjs.errorBarRange(mark.value, mark.error);
|
|
5909
|
+
return chunkCXL254BT_cjs.createVerticalErrorWhiskerNode({
|
|
5760
5910
|
id: `chart-line-error-${chart.id}-${mark.seriesId}-${mark.valueIndex}`,
|
|
5761
5911
|
order: nextOrder(),
|
|
5762
5912
|
bounds,
|
|
5763
5913
|
geometry: {
|
|
5764
5914
|
centerX: mark.position.x,
|
|
5765
|
-
startY: plot.y + plot.height -
|
|
5766
|
-
endY: plot.y + plot.height -
|
|
5915
|
+
startY: plot.y + plot.height - chunkCXL254BT_cjs.mapChartValue(lower, chart.axisY, plot.height),
|
|
5916
|
+
endY: plot.y + plot.height - chunkCXL254BT_cjs.mapChartValue(upper, chart.axisY, plot.height)
|
|
5767
5917
|
},
|
|
5768
5918
|
color: mark.color,
|
|
5769
5919
|
valueReference: { seriesId: mark.seriesId, valueIndex: mark.valueIndex }
|
|
@@ -5787,8 +5937,8 @@ function createLinePoint(context, mark) {
|
|
|
5787
5937
|
ry: visible ? radius : 6,
|
|
5788
5938
|
detail: { of: "chartValue", series: mark.seriesId, valueIndex: mark.valueIndex },
|
|
5789
5939
|
style: {
|
|
5790
|
-
fill: visible ?
|
|
5791
|
-
stroke: visible && strokeWidth > 0 ?
|
|
5940
|
+
fill: visible ? chunkCXL254BT_cjs.paint(fill2, diagnostics, chart.id) : { kind: "none" },
|
|
5941
|
+
stroke: visible && strokeWidth > 0 ? chunkCXL254BT_cjs.paint(mark.color, diagnostics, chart.id) : void 0,
|
|
5792
5942
|
strokeWidth: visible && strokeWidth > 0 ? strokeWidth : void 0,
|
|
5793
5943
|
pointerEvents: visible ? void 0 : "all"
|
|
5794
5944
|
}
|
|
@@ -5808,22 +5958,22 @@ function createLinePath(context, series, points, color2, tension) {
|
|
|
5808
5958
|
order: nextOrder(),
|
|
5809
5959
|
bounds: gradient ? { minX: plot.x, maxX: plot.x + plot.width, minY: plot.y, maxY: plot.y + plot.height } : bounds,
|
|
5810
5960
|
detail: { of: "chartSeries", series: series.id, lineTension: tension || void 0 },
|
|
5811
|
-
d:
|
|
5961
|
+
d: chunkCXL254BT_cjs.linePathData(points, tension),
|
|
5812
5962
|
style: {
|
|
5813
5963
|
fill: { kind: "none" },
|
|
5814
|
-
stroke:
|
|
5964
|
+
stroke: chunkCXL254BT_cjs.paint(gradient ?? color2, diagnostics, chart.id),
|
|
5815
5965
|
strokeWidth: series.strokeWidth ?? config?.lineWidth ?? 2,
|
|
5816
5966
|
dash: series.dash,
|
|
5817
5967
|
lineCap: config?.lineWidth === void 0 ? void 0 : "round",
|
|
5818
5968
|
lineJoin: "round",
|
|
5819
|
-
shadow: glow ? { color: color2, opacity: 0.9, blur: glow, dx: 0, dy: 0 } :
|
|
5969
|
+
shadow: glow ? { color: color2, opacity: 0.9, blur: glow, dx: 0, dy: 0 } : chunkCXL254BT_cjs.resolveChartShadow(chart.shadowStyle)
|
|
5820
5970
|
}
|
|
5821
5971
|
};
|
|
5822
5972
|
}
|
|
5823
5973
|
|
|
5824
5974
|
// src/renderScene/charts/renderers/line/series.ts
|
|
5825
5975
|
function seriesColor(series, seriesIndex) {
|
|
5826
|
-
return
|
|
5976
|
+
return chunkCXL254BT_cjs.representativeColor(series.color, chunkCXL254BT_cjs.CHART_COLORS[seriesIndex % chunkCXL254BT_cjs.CHART_COLORS.length]);
|
|
5827
5977
|
}
|
|
5828
5978
|
function renderLineSeriesArea(context, series, seriesIndex) {
|
|
5829
5979
|
const areaOpacity = context.chart.config?.areaOpacity;
|
|
@@ -5887,7 +6037,7 @@ function renderGridLines(context, layout) {
|
|
|
5887
6037
|
style: {
|
|
5888
6038
|
fill: { kind: "none" },
|
|
5889
6039
|
stroke: { kind: "solid", color: chart.gridColor ?? "#e2e8f0" },
|
|
5890
|
-
strokeWidth:
|
|
6040
|
+
strokeWidth: chunkCXL254BT_cjs.finite(chart.gridWidth, 1)
|
|
5891
6041
|
}
|
|
5892
6042
|
};
|
|
5893
6043
|
});
|
|
@@ -5895,7 +6045,7 @@ function renderGridLines(context, layout) {
|
|
|
5895
6045
|
function renderPercentageLabels(context, layout) {
|
|
5896
6046
|
const { chart, plot, bounds, nextOrder } = context;
|
|
5897
6047
|
return PERCENT_TICKS.map((percent) => ({
|
|
5898
|
-
...
|
|
6048
|
+
...chunkCXL254BT_cjs.chartText({
|
|
5899
6049
|
id: `chart-mekko-pct-${chart.id}-${percent}`,
|
|
5900
6050
|
order: nextOrder(),
|
|
5901
6051
|
bounds,
|
|
@@ -5921,15 +6071,13 @@ function renderMekkoColumnLabels(context, layout, columnIndex, column) {
|
|
|
5921
6071
|
if (!context.showLabels) {
|
|
5922
6072
|
return [];
|
|
5923
6073
|
}
|
|
5924
|
-
|
|
5925
|
-
|
|
5926
|
-
createColumnLabel(context, layout, columnIndex, column)
|
|
5927
|
-
];
|
|
6074
|
+
const columnLabel = createColumnLabel(context, layout, columnIndex, column);
|
|
6075
|
+
return context.chart.config?.showMekkoTotals === false ? [columnLabel] : [createTotalLabel(context, layout, columnIndex, column), columnLabel];
|
|
5928
6076
|
}
|
|
5929
6077
|
function createTotalLabel(context, layout, columnIndex, column) {
|
|
5930
6078
|
const { chart, plot, bounds, nextOrder } = context;
|
|
5931
6079
|
return {
|
|
5932
|
-
...
|
|
6080
|
+
...chunkCXL254BT_cjs.chartText({
|
|
5933
6081
|
id: `chart-mekko-total-${chart.id}-${columnIndex}`,
|
|
5934
6082
|
order: nextOrder(),
|
|
5935
6083
|
bounds,
|
|
@@ -5950,7 +6098,7 @@ function createColumnLabel(context, layout, columnIndex, column) {
|
|
|
5950
6098
|
const { chart, bounds, nextOrder } = context;
|
|
5951
6099
|
const { label, width } = column;
|
|
5952
6100
|
return {
|
|
5953
|
-
...
|
|
6101
|
+
...chunkCXL254BT_cjs.chartText({
|
|
5954
6102
|
id: `chart-mekko-col-label-${chart.id}-${columnIndex}`,
|
|
5955
6103
|
order: nextOrder(),
|
|
5956
6104
|
bounds,
|
|
@@ -5964,23 +6112,27 @@ function createColumnLabel(context, layout, columnIndex, column) {
|
|
|
5964
6112
|
chart,
|
|
5965
6113
|
align: "center"
|
|
5966
6114
|
}),
|
|
5967
|
-
lines:
|
|
6115
|
+
lines: chunkCXL254BT_cjs.wrapText(label, width, layout.smallFontSize),
|
|
5968
6116
|
fontSize: layout.smallFontSize
|
|
5969
6117
|
};
|
|
5970
6118
|
}
|
|
5971
6119
|
|
|
5972
6120
|
// src/renderScene/charts/renderers/mekko/layout.ts
|
|
5973
|
-
var COLUMN_GAP = 4;
|
|
5974
6121
|
function createMekkoLayout(context) {
|
|
5975
6122
|
const labels = mekkoColumnLabels(context);
|
|
5976
6123
|
const labelGutterWidth = context.showLabels ? 30 : 0;
|
|
5977
6124
|
const grid = createMekkoGrid(context, labelGutterWidth);
|
|
5978
|
-
const fontSize = Math.max(9,
|
|
6125
|
+
const fontSize = Math.max(9, chunkCXL254BT_cjs.finite(context.chart.fontSize, 12));
|
|
6126
|
+
const columnGap = Math.max(0, chunkCXL254BT_cjs.finite(context.chart.config?.mekkoColumnGap, 4));
|
|
6127
|
+
const smallFontSize = Math.max(8, fontSize - 1);
|
|
5979
6128
|
return {
|
|
5980
|
-
columns: createMekkoColumns(context, grid, labels),
|
|
6129
|
+
columns: createMekkoColumns(context, grid, labels, columnGap),
|
|
5981
6130
|
fontSize,
|
|
5982
|
-
smallFontSize
|
|
6131
|
+
smallFontSize,
|
|
5983
6132
|
labelGutterWidth,
|
|
6133
|
+
columnGap,
|
|
6134
|
+
labelSize: Math.max(6, chunkCXL254BT_cjs.finite(context.chart.config?.mekkoLabelSize, smallFontSize)),
|
|
6135
|
+
valueSize: Math.max(6, chunkCXL254BT_cjs.finite(context.chart.config?.mekkoValueSize, smallFontSize)),
|
|
5984
6136
|
grid
|
|
5985
6137
|
};
|
|
5986
6138
|
}
|
|
@@ -5998,20 +6150,20 @@ function createMekkoGrid(context, labelGutterWidth) {
|
|
|
5998
6150
|
height: Math.max(1, context.plot.height - topGutter - bottomGutter)
|
|
5999
6151
|
};
|
|
6000
6152
|
}
|
|
6001
|
-
function createMekkoColumns(context, grid, labels) {
|
|
6153
|
+
function createMekkoColumns(context, grid, labels, columnGap) {
|
|
6002
6154
|
const totals = labels.map(
|
|
6003
6155
|
(_, columnIndex) => context.chart.series.reduce((sum, series) => sum + (series.values[columnIndex] ?? 0), 0)
|
|
6004
6156
|
);
|
|
6005
6157
|
const grandTotal = totals.reduce((sum, total) => sum + total, 0);
|
|
6006
6158
|
const maximumTotal = Math.max(1, ...totals);
|
|
6007
|
-
const availableWidth = Math.max(1, grid.width -
|
|
6159
|
+
const availableWidth = Math.max(1, grid.width - columnGap * Math.max(0, labels.length - 1));
|
|
6008
6160
|
let nextX = grid.x;
|
|
6009
6161
|
return labels.map((label, index) => {
|
|
6010
6162
|
const total = totals[index];
|
|
6011
6163
|
const width = grandTotal > 0 ? total / grandTotal * availableWidth : availableWidth / labels.length;
|
|
6012
6164
|
const height = context.chart.config?.mekkoVaryHeight ? grid.height * (total / maximumTotal) : grid.height;
|
|
6013
6165
|
const column = { label, total, x: nextX, y: grid.y + grid.height - height, width, height };
|
|
6014
|
-
nextX += width +
|
|
6166
|
+
nextX += width + columnGap;
|
|
6015
6167
|
return column;
|
|
6016
6168
|
});
|
|
6017
6169
|
}
|
|
@@ -6037,12 +6189,12 @@ function createColumnBackdrop(context, layout, columnIndex) {
|
|
|
6037
6189
|
id: `chart-mekko-column-backdrop-${chart.id}-${columnIndex}`,
|
|
6038
6190
|
order: nextOrder(),
|
|
6039
6191
|
bounds,
|
|
6040
|
-
d:
|
|
6041
|
-
style: { fill:
|
|
6192
|
+
d: chunkCXL254BT_cjs.barShapePath(column.x, layout.grid.y, column.width, layout.grid.height, cornerRadius),
|
|
6193
|
+
style: { fill: chunkCXL254BT_cjs.paint(chart.gridColor ?? "#e2e8f0", diagnostics, chart.id), opacity: BACKDROP_OPACITY }
|
|
6042
6194
|
};
|
|
6043
6195
|
}
|
|
6044
6196
|
function mekkoCornerRadius(context) {
|
|
6045
|
-
return Math.max(0,
|
|
6197
|
+
return Math.max(0, chunkCXL254BT_cjs.finite(context.chart.config?.barCornerRadius, 2));
|
|
6046
6198
|
}
|
|
6047
6199
|
function calculateColumnSegments(seriesList, layout, columnIndex) {
|
|
6048
6200
|
const segments = [];
|
|
@@ -6053,7 +6205,7 @@ function calculateColumnSegments(seriesList, layout, columnIndex) {
|
|
|
6053
6205
|
const height = (column.total > 0 ? value / column.total : 0) * column.height;
|
|
6054
6206
|
const y = column.y + cumulativeHeight;
|
|
6055
6207
|
cumulativeHeight += height;
|
|
6056
|
-
const color2 = series.color ??
|
|
6208
|
+
const color2 = series.color ?? chunkCXL254BT_cjs.CHART_COLORS[seriesIndex % chunkCXL254BT_cjs.CHART_COLORS.length];
|
|
6057
6209
|
segments.push({
|
|
6058
6210
|
columnIndex,
|
|
6059
6211
|
seriesId: series.id,
|
|
@@ -6076,10 +6228,12 @@ function renderSegment(context, layout, segment, nextColor) {
|
|
|
6076
6228
|
}
|
|
6077
6229
|
function createSegmentNode(context, segment, nextColor) {
|
|
6078
6230
|
const { chart, plot, bounds, diagnostics, nextOrder } = context;
|
|
6079
|
-
const shadow =
|
|
6231
|
+
const shadow = chunkCXL254BT_cjs.resolveChartShadow(chart.shadowStyle);
|
|
6080
6232
|
const clipPath = shadow ? `M ${plot.x} ${plot.y} H ${plot.x + plot.width} V ${plot.y + plot.height} H ${plot.x} Z` : void 0;
|
|
6081
|
-
const
|
|
6233
|
+
const config = chart.config;
|
|
6234
|
+
const radius = segment.isTop || config?.mekkoRoundAll ? mekkoCornerRadius(context) : 0;
|
|
6082
6235
|
const { x, y, width, height } = segment.frame;
|
|
6236
|
+
const segmentGap = Math.max(0, chunkCXL254BT_cjs.finite(config?.mekkoSegmentGap, 0));
|
|
6083
6237
|
const fallback = "#94a3b8";
|
|
6084
6238
|
const gradientBounds = {
|
|
6085
6239
|
minX: x + width / 2 - height / 2,
|
|
@@ -6091,20 +6245,20 @@ function createSegmentNode(context, segment, nextColor) {
|
|
|
6091
6245
|
kind: "linear-gradient",
|
|
6092
6246
|
angle: 90,
|
|
6093
6247
|
stops: [
|
|
6094
|
-
{ offset: 0, color:
|
|
6095
|
-
{ offset: 100, color:
|
|
6248
|
+
{ offset: 0, color: chunkCXL254BT_cjs.representativeColor(segment.color, fallback) },
|
|
6249
|
+
{ offset: 100, color: chunkCXL254BT_cjs.representativeColor(nextColor, fallback) }
|
|
6096
6250
|
]
|
|
6097
|
-
} :
|
|
6251
|
+
} : chunkCXL254BT_cjs.paint(segment.color, diagnostics, chart.id);
|
|
6098
6252
|
return {
|
|
6099
6253
|
type: "path",
|
|
6100
6254
|
id: `chart-mekko-seg-${chart.id}-${segment.columnIndex}-${segment.seriesId}`,
|
|
6101
6255
|
order: nextOrder(),
|
|
6102
6256
|
bounds: nextColor ? gradientBounds : bounds,
|
|
6103
|
-
d:
|
|
6257
|
+
d: chunkCXL254BT_cjs.barPath(x, y + segmentGap / 2, width, Math.max(0, height - segmentGap), radius, Boolean(config?.mekkoRoundAll)),
|
|
6104
6258
|
style: {
|
|
6105
6259
|
fill: fill2,
|
|
6106
|
-
stroke: { kind: "solid", color: chart.gridColor ?? "#e2e8f0" },
|
|
6107
|
-
strokeWidth:
|
|
6260
|
+
stroke: { kind: "solid", color: config?.mekkoSegmentStrokeColor ?? chart.gridColor ?? "#e2e8f0" },
|
|
6261
|
+
strokeWidth: chunkCXL254BT_cjs.finite(config?.mekkoSegmentStrokeWidth, chunkCXL254BT_cjs.finite(chart.gridWidth, 1)),
|
|
6108
6262
|
shadow,
|
|
6109
6263
|
clip: clipPath ? { type: "path", d: clipPath } : void 0
|
|
6110
6264
|
}
|
|
@@ -6118,14 +6272,19 @@ function createSegmentLabel(context, layout, segment) {
|
|
|
6118
6272
|
}
|
|
6119
6273
|
const innerWidth = Math.max(1, width - 8);
|
|
6120
6274
|
const innerHeight = Math.max(1, height - 6);
|
|
6121
|
-
const lineHeight = layout.
|
|
6122
|
-
const
|
|
6123
|
-
|
|
6275
|
+
const lineHeight = layout.labelSize * 1.2;
|
|
6276
|
+
const valueHeight = layout.valueSize * 1.2;
|
|
6277
|
+
const labelLines = chunkCXL254BT_cjs.wrapText(segment.seriesLabel, innerWidth, layout.labelSize).map(
|
|
6278
|
+
(line) => chunkCXL254BT_cjs.ellipsizeToWidth(line, innerWidth, layout.labelSize, true)
|
|
6279
|
+
);
|
|
6280
|
+
if (labelLines.length * lineHeight + valueHeight > innerHeight) {
|
|
6124
6281
|
return [];
|
|
6125
6282
|
}
|
|
6126
|
-
const textColor =
|
|
6283
|
+
const textColor = chart.config?.mekkoTextColor ?? chunkCXL254BT_cjs.contrastTextColor(chunkCXL254BT_cjs.representativeColor(segment.color, "#ffffff"));
|
|
6284
|
+
const columnTotal = layout.columns[segment.columnIndex]?.total ?? 0;
|
|
6285
|
+
const valueText = chart.config?.mekkoValueFormat === "percent" ? `${columnTotal > 0 ? Math.round(segment.value / columnTotal * 100) : 0}%` : String(segment.value);
|
|
6127
6286
|
const label = {
|
|
6128
|
-
...
|
|
6287
|
+
...chunkCXL254BT_cjs.chartText({
|
|
6129
6288
|
id: `chart-mekko-seg-label-${chart.id}-${segment.columnIndex}-${segment.seriesId}`,
|
|
6130
6289
|
order: nextOrder(),
|
|
6131
6290
|
bounds,
|
|
@@ -6134,12 +6293,12 @@ function createSegmentLabel(context, layout, segment) {
|
|
|
6134
6293
|
chart
|
|
6135
6294
|
}),
|
|
6136
6295
|
lines: labelLines,
|
|
6137
|
-
fontSize: layout.
|
|
6296
|
+
fontSize: layout.labelSize,
|
|
6138
6297
|
fontWeight: "bold",
|
|
6139
6298
|
color: textColor
|
|
6140
6299
|
};
|
|
6141
6300
|
const valueNode = {
|
|
6142
|
-
...
|
|
6301
|
+
...chunkCXL254BT_cjs.chartText({
|
|
6143
6302
|
id: `chart-mekko-seg-value-${chart.id}-${segment.columnIndex}-${segment.seriesId}`,
|
|
6144
6303
|
order: nextOrder(),
|
|
6145
6304
|
bounds,
|
|
@@ -6149,11 +6308,11 @@ function createSegmentLabel(context, layout, segment) {
|
|
|
6149
6308
|
width: innerWidth,
|
|
6150
6309
|
height: Math.max(1, innerHeight - labelLines.length * lineHeight)
|
|
6151
6310
|
},
|
|
6152
|
-
text:
|
|
6311
|
+
text: valueText,
|
|
6153
6312
|
chart
|
|
6154
6313
|
}),
|
|
6155
|
-
lines: [
|
|
6156
|
-
fontSize: layout.
|
|
6314
|
+
lines: [valueText],
|
|
6315
|
+
fontSize: layout.valueSize,
|
|
6157
6316
|
color: textColor
|
|
6158
6317
|
};
|
|
6159
6318
|
return [label, valueNode];
|
|
@@ -6172,7 +6331,7 @@ function renderMekko(context) {
|
|
|
6172
6331
|
|
|
6173
6332
|
// src/renderScene/charts/renderers/pie/center.ts
|
|
6174
6333
|
function fill(template, chart) {
|
|
6175
|
-
const values = chart.series.map((series) => Math.max(0,
|
|
6334
|
+
const values = chart.series.map((series) => Math.max(0, chunkCXL254BT_cjs.finite(series.values[0], 0)));
|
|
6176
6335
|
const total = values.reduce((sum, value) => sum + value, 0);
|
|
6177
6336
|
const first = values[0] ?? 0;
|
|
6178
6337
|
return template.replace(/\{total\}/g, String(Math.round(total * 100) / 100)).replace(/\{percent\}/g, String(total > 0 ? Math.round(first / total * 100) : 0)).replace(/\{label\}/g, chart.series[0]?.label ?? "");
|
|
@@ -6184,7 +6343,7 @@ function renderPieCenter(context, geometry) {
|
|
|
6184
6343
|
return [];
|
|
6185
6344
|
}
|
|
6186
6345
|
const lines = fill(template, chart).split(/\\n|\n/);
|
|
6187
|
-
const fontSize =
|
|
6346
|
+
const fontSize = chunkCXL254BT_cjs.finite(chart.config?.pieCenterSize, Math.max(14, Math.min(40, geometry.outerRadius * 0.3)));
|
|
6188
6347
|
const lineHeight = fontSize * 1.2;
|
|
6189
6348
|
const width = Math.max(40, (geometry.innerRadius > 0 ? geometry.innerRadius : geometry.outerRadius * 0.6) * 2);
|
|
6190
6349
|
const text = {
|
|
@@ -6197,7 +6356,7 @@ function renderPieCenter(context, geometry) {
|
|
|
6197
6356
|
width,
|
|
6198
6357
|
height: lineHeight * lines.length,
|
|
6199
6358
|
lines,
|
|
6200
|
-
fontFamily: chart.fontFamily ??
|
|
6359
|
+
fontFamily: chart.fontFamily ?? chunkCXL254BT_cjs.DEFAULT_FONT,
|
|
6201
6360
|
fontSize,
|
|
6202
6361
|
fontWeight: "bold",
|
|
6203
6362
|
align: "center",
|
|
@@ -6217,14 +6376,14 @@ var radians = (degrees) => degrees * Math.PI / 180;
|
|
|
6217
6376
|
function renderPieSlices(context, geometry) {
|
|
6218
6377
|
const config = context.chart.config;
|
|
6219
6378
|
const marks = createPieSliceMarks(context.chart.series, geometry.total, {
|
|
6220
|
-
start: TOP + radians(
|
|
6221
|
-
sweep: Math.min(FULL, Math.max(radians(1), radians(
|
|
6222
|
-
explode: Math.max(0,
|
|
6379
|
+
start: TOP + radians(chunkCXL254BT_cjs.finite(config?.pieStartAngle, 0)),
|
|
6380
|
+
sweep: Math.min(FULL, Math.max(radians(1), radians(chunkCXL254BT_cjs.finite(config?.pieSweep, 360)))),
|
|
6381
|
+
explode: Math.max(0, chunkCXL254BT_cjs.finite(config?.pieExplode, 0))
|
|
6223
6382
|
});
|
|
6224
6383
|
const gapPx = config?.pieSliceGap ?? 0;
|
|
6225
6384
|
return [
|
|
6226
6385
|
...marks.flatMap((mark) => createSliceNodes(context, shiftGeometry(geometry, mark), mark, gapPx)),
|
|
6227
|
-
...
|
|
6386
|
+
...chunkCXL254BT_cjs.renderPieLabels(
|
|
6228
6387
|
context,
|
|
6229
6388
|
geometry,
|
|
6230
6389
|
marks.map((mark) => ({
|
|
@@ -6256,20 +6415,20 @@ function createPieSliceMarks(seriesList, total, layout) {
|
|
|
6256
6415
|
const marks = [];
|
|
6257
6416
|
let angle = layout.start;
|
|
6258
6417
|
seriesList.forEach((series, seriesIndex) => {
|
|
6259
|
-
const value = Math.max(0,
|
|
6418
|
+
const value = Math.max(0, chunkCXL254BT_cjs.finite(series.values[0], 0));
|
|
6260
6419
|
const sweep = value / total * layout.sweep;
|
|
6261
6420
|
marks.push({
|
|
6262
6421
|
seriesId: series.id,
|
|
6263
6422
|
label: series.label,
|
|
6264
|
-
color: series.color ??
|
|
6423
|
+
color: series.color ?? chunkCXL254BT_cjs.CHART_COLORS[seriesIndex % chunkCXL254BT_cjs.CHART_COLORS.length],
|
|
6265
6424
|
stroke: series.stroke,
|
|
6266
6425
|
strokeWidth: series.strokeWidth,
|
|
6267
6426
|
value,
|
|
6268
6427
|
share: value / total,
|
|
6269
6428
|
angles: { start: angle, end: angle + Math.min(sweep, layout.sweep >= FULL ? MAXIMUM_SWEEP : layout.sweep) },
|
|
6270
|
-
explode: Math.max(0,
|
|
6271
|
-
labelOffsetX:
|
|
6272
|
-
labelOffsetY:
|
|
6429
|
+
explode: Math.max(0, chunkCXL254BT_cjs.finite(series.offset, layout.explode)),
|
|
6430
|
+
labelOffsetX: chunkCXL254BT_cjs.finite(series.labelOffsetX, 0),
|
|
6431
|
+
labelOffsetY: chunkCXL254BT_cjs.finite(series.labelOffsetY, 0)
|
|
6273
6432
|
});
|
|
6274
6433
|
angle += sweep;
|
|
6275
6434
|
});
|
|
@@ -6292,14 +6451,14 @@ function pieOuterShadow(shadow, gapPx) {
|
|
|
6292
6451
|
function sliceCornerRadius(geometry, mark, gapPx) {
|
|
6293
6452
|
const halfGap = Math.max(0, gapPx) / 2;
|
|
6294
6453
|
const rawSweep = mark.angles.end - mark.angles.start;
|
|
6295
|
-
const usesInnerArc =
|
|
6296
|
-
const gapSweep = 2 *
|
|
6454
|
+
const usesInnerArc = chunkCXL254BT_cjs.pieUsesInnerArc(geometry, mark.angles, gapPx);
|
|
6455
|
+
const gapSweep = 2 * chunkCXL254BT_cjs.gapInsetAngle(halfGap, geometry.outerRadius);
|
|
6297
6456
|
const availableSweep = Math.max(0, rawSweep - gapSweep);
|
|
6298
6457
|
return Math.min(
|
|
6299
6458
|
geometry.cornerRadius,
|
|
6300
|
-
usesInnerArc ?
|
|
6459
|
+
usesInnerArc ? chunkCXL254BT_cjs.maxPieCornerRadius(geometry.outerRadius, geometry.innerRadius, availableSweep) : chunkCXL254BT_cjs.maxApexCornerRadius(
|
|
6301
6460
|
geometry.outerRadius,
|
|
6302
|
-
|
|
6461
|
+
chunkCXL254BT_cjs.pieApexRadius(halfGap, rawSweep, geometry.outerRadius),
|
|
6303
6462
|
availableSweep
|
|
6304
6463
|
)
|
|
6305
6464
|
);
|
|
@@ -6312,14 +6471,14 @@ function sliceStroke(context, mark) {
|
|
|
6312
6471
|
}
|
|
6313
6472
|
return {
|
|
6314
6473
|
stroke: { kind: "solid", color: strokeColor },
|
|
6315
|
-
strokeWidth:
|
|
6474
|
+
strokeWidth: chunkCXL254BT_cjs.finite(mark.strokeWidth, chunkCXL254BT_cjs.finite(config?.pieStrokeWidth, 1))
|
|
6316
6475
|
};
|
|
6317
6476
|
}
|
|
6318
6477
|
function createSliceNodes(context, geometry, mark, gapPx) {
|
|
6319
6478
|
const { chart, bounds, diagnostics, nextOrder } = context;
|
|
6320
|
-
const fill2 =
|
|
6321
|
-
const slicePath =
|
|
6322
|
-
const shadow =
|
|
6479
|
+
const fill2 = chunkCXL254BT_cjs.paint(mark.color, diagnostics, chart.id);
|
|
6480
|
+
const slicePath = chunkCXL254BT_cjs.createPieSlicePath(geometry, mark.angles, sliceCornerRadius(geometry, mark, gapPx), gapPx);
|
|
6481
|
+
const shadow = chunkCXL254BT_cjs.resolveChartShadow(chart.shadowStyle);
|
|
6323
6482
|
const strokeStyle = sliceStroke(context, mark);
|
|
6324
6483
|
const glow = chart.config?.pieGlow;
|
|
6325
6484
|
const shadowCaster = shadow ? {
|
|
@@ -6350,12 +6509,12 @@ function createSliceNodes(context, geometry, mark, gapPx) {
|
|
|
6350
6509
|
pieEnd: mark.angles.end,
|
|
6351
6510
|
pieValue: mark.value
|
|
6352
6511
|
},
|
|
6353
|
-
prop:
|
|
6512
|
+
prop: chunkCXL254BT_cjs.seriesValueProp(mark.seriesId, 0),
|
|
6354
6513
|
style: {
|
|
6355
6514
|
fill: fill2,
|
|
6356
6515
|
...strokeStyle,
|
|
6357
6516
|
innerShadow: shadow,
|
|
6358
|
-
shadow: glow ? { color:
|
|
6517
|
+
shadow: glow ? { color: chunkCXL254BT_cjs.representativeColor(mark.color, "#ffffff"), opacity: 0.85, blur: glow, dx: 0, dy: 0 } : void 0
|
|
6359
6518
|
}
|
|
6360
6519
|
};
|
|
6361
6520
|
return shadowCaster ? [shadowCaster, slice] : [slice];
|
|
@@ -6363,12 +6522,12 @@ function createSliceNodes(context, geometry, mark, gapPx) {
|
|
|
6363
6522
|
|
|
6364
6523
|
// src/renderScene/charts/renderers/pie.ts
|
|
6365
6524
|
function renderPie(context) {
|
|
6366
|
-
const geometry =
|
|
6525
|
+
const geometry = chunkCXL254BT_cjs.createPieGeometry(context);
|
|
6367
6526
|
return [...renderPieSlices(context, geometry), ...renderPieCenter(context, geometry)];
|
|
6368
6527
|
}
|
|
6369
6528
|
|
|
6370
6529
|
// src/renderScene/charts/renderers/polarArea.ts
|
|
6371
|
-
var
|
|
6530
|
+
var TOP2 = -Math.PI / 2;
|
|
6372
6531
|
var TRACK_COLOR_FALLBACK = "#e2e8f0";
|
|
6373
6532
|
var MIN_LABEL_SWEEP = 14 * Math.PI / 180;
|
|
6374
6533
|
var LABEL_WIDTH = 80;
|
|
@@ -6380,17 +6539,18 @@ var OUTSIDE_FALLBACK_COLOR = "#334155";
|
|
|
6380
6539
|
function layoutOf(context) {
|
|
6381
6540
|
const { chart, plot } = context;
|
|
6382
6541
|
const maxRadius = Math.max(1, Math.min(plot.width, plot.height) / 2 - 4);
|
|
6383
|
-
const axisMin =
|
|
6542
|
+
const axisMin = chunkCXL254BT_cjs.finite(chart.axisY.min, 0);
|
|
6384
6543
|
return {
|
|
6385
6544
|
centerX: plot.x + plot.width / 2,
|
|
6386
6545
|
centerY: plot.y + plot.height / 2,
|
|
6387
6546
|
maxRadius,
|
|
6388
|
-
innerRadius: Math.max(0, Math.min(
|
|
6389
|
-
cornerRadius: Math.max(0,
|
|
6390
|
-
gapPx: Math.max(0,
|
|
6547
|
+
innerRadius: Math.max(0, Math.min(chunkCXL254BT_cjs.finite(chart.config?.innerRadius, 0), maxRadius - 1)),
|
|
6548
|
+
cornerRadius: Math.max(0, chunkCXL254BT_cjs.finite(chart.config?.pieCornerRadius, 0)),
|
|
6549
|
+
gapPx: Math.max(0, chunkCXL254BT_cjs.finite(chart.config?.pieSliceGap, 0)),
|
|
6391
6550
|
axisMin,
|
|
6392
|
-
range:
|
|
6393
|
-
sweep: chart.series.length > 0 ? Math.PI * 2 / chart.series.length : 0
|
|
6551
|
+
range: chunkCXL254BT_cjs.finite(chart.axisY.max, 100) - axisMin,
|
|
6552
|
+
sweep: chart.series.length > 0 ? Math.PI * 2 / chart.series.length : 0,
|
|
6553
|
+
start: TOP2 + chunkCXL254BT_cjs.finite(chart.config?.pieStartAngle, 0) * Math.PI / 180
|
|
6394
6554
|
};
|
|
6395
6555
|
}
|
|
6396
6556
|
function clampedCorner(layout, outerRadius, angles) {
|
|
@@ -6398,19 +6558,19 @@ function clampedCorner(layout, outerRadius, angles) {
|
|
|
6398
6558
|
const geometry = { centerX, centerY, outerRadius, innerRadius };
|
|
6399
6559
|
const halfGap = Math.max(0, gapPx) / 2;
|
|
6400
6560
|
const rawSweep = angles.end - angles.start;
|
|
6401
|
-
const availableSweep = Math.max(0, rawSweep - 2 *
|
|
6402
|
-
if (
|
|
6403
|
-
return Math.min(cornerRadius,
|
|
6561
|
+
const availableSweep = Math.max(0, rawSweep - 2 * chunkCXL254BT_cjs.gapInsetAngle(halfGap, outerRadius));
|
|
6562
|
+
if (chunkCXL254BT_cjs.pieUsesInnerArc(geometry, angles, gapPx)) {
|
|
6563
|
+
return Math.min(cornerRadius, chunkCXL254BT_cjs.maxPieCornerRadius(outerRadius, innerRadius, availableSweep));
|
|
6404
6564
|
}
|
|
6405
|
-
const apexRadius =
|
|
6406
|
-
return Math.min(cornerRadius,
|
|
6565
|
+
const apexRadius = chunkCXL254BT_cjs.pieApexRadius(halfGap, rawSweep, outerRadius);
|
|
6566
|
+
return Math.min(cornerRadius, chunkCXL254BT_cjs.maxApexCornerRadius(outerRadius, apexRadius, availableSweep));
|
|
6407
6567
|
}
|
|
6408
6568
|
function wedgeNodes(context, layout, series, angles, outerRadius, value, rawColor) {
|
|
6409
6569
|
const { chart, bounds, diagnostics, nextOrder } = context;
|
|
6410
6570
|
const { centerX, centerY, innerRadius, maxRadius, gapPx } = layout;
|
|
6411
|
-
const color2 =
|
|
6412
|
-
const shadow =
|
|
6413
|
-
const trackPath =
|
|
6571
|
+
const color2 = chunkCXL254BT_cjs.paint(rawColor, diagnostics, chart.id);
|
|
6572
|
+
const shadow = chunkCXL254BT_cjs.resolveChartShadow(chart.shadowStyle);
|
|
6573
|
+
const trackPath = chunkCXL254BT_cjs.createPieSlicePath(
|
|
6414
6574
|
{ centerX, centerY, outerRadius: maxRadius, innerRadius },
|
|
6415
6575
|
angles,
|
|
6416
6576
|
clampedCorner(layout, maxRadius, angles),
|
|
@@ -6422,9 +6582,13 @@ function wedgeNodes(context, layout, series, angles, outerRadius, value, rawColo
|
|
|
6422
6582
|
order: nextOrder(),
|
|
6423
6583
|
bounds,
|
|
6424
6584
|
d: trackPath,
|
|
6425
|
-
style: {
|
|
6585
|
+
style: {
|
|
6586
|
+
fill: chunkCXL254BT_cjs.paint(chart.gridColor ?? TRACK_COLOR_FALLBACK, diagnostics, chart.id),
|
|
6587
|
+
opacity: chart.config?.polarTrackOpacity,
|
|
6588
|
+
...trackStroke(context)
|
|
6589
|
+
}
|
|
6426
6590
|
};
|
|
6427
|
-
const wedgePath =
|
|
6591
|
+
const wedgePath = chunkCXL254BT_cjs.createPieSlicePath(
|
|
6428
6592
|
{ centerX, centerY, outerRadius, innerRadius },
|
|
6429
6593
|
angles,
|
|
6430
6594
|
clampedCorner(layout, outerRadius, angles),
|
|
@@ -6453,21 +6617,68 @@ function wedgeNodes(context, layout, series, angles, outerRadius, value, rawColo
|
|
|
6453
6617
|
pieEnd: angles.end,
|
|
6454
6618
|
pieValue: value
|
|
6455
6619
|
},
|
|
6456
|
-
prop:
|
|
6457
|
-
style: { fill: color2, innerShadow: shadow }
|
|
6620
|
+
prop: chunkCXL254BT_cjs.seriesValueProp(series.id, 0),
|
|
6621
|
+
style: { fill: color2, innerShadow: shadow, ...wedgeStroke(context) }
|
|
6458
6622
|
};
|
|
6459
6623
|
return shadowCaster ? [track, shadowCaster, wedge] : [track, wedge];
|
|
6460
6624
|
}
|
|
6625
|
+
function trackStroke(context) {
|
|
6626
|
+
const config = context.chart.config;
|
|
6627
|
+
if (!config?.polarTrackStroke) {
|
|
6628
|
+
return {};
|
|
6629
|
+
}
|
|
6630
|
+
const dash = (config.polarTrackDash ?? "").split(/[ ,]+/).map(Number).filter((part) => Number.isFinite(part) && part > 0);
|
|
6631
|
+
return {
|
|
6632
|
+
stroke: { kind: "solid", color: config.polarTrackStroke },
|
|
6633
|
+
strokeWidth: chunkCXL254BT_cjs.finite(config.polarTrackStrokeWidth, 1),
|
|
6634
|
+
dash: dash.length > 0 ? dash : void 0
|
|
6635
|
+
};
|
|
6636
|
+
}
|
|
6637
|
+
function wedgeStroke(context) {
|
|
6638
|
+
const config = context.chart.config;
|
|
6639
|
+
if (!config?.pieStroke) {
|
|
6640
|
+
return {};
|
|
6641
|
+
}
|
|
6642
|
+
return {
|
|
6643
|
+
stroke: { kind: "solid", color: config.pieStroke },
|
|
6644
|
+
strokeWidth: chunkCXL254BT_cjs.finite(config.pieStrokeWidth, 1)
|
|
6645
|
+
};
|
|
6646
|
+
}
|
|
6647
|
+
function ringNodes(context, layout) {
|
|
6648
|
+
const { chart, bounds, nextOrder } = context;
|
|
6649
|
+
if (!chart.config?.polarRings || layout.range <= 0) {
|
|
6650
|
+
return [];
|
|
6651
|
+
}
|
|
6652
|
+
return chunkCXL254BT_cjs.chartTicks(chart.axisY).filter((tick) => tick > layout.axisMin && tick < layout.axisMin + layout.range).map((tick) => {
|
|
6653
|
+
const radius = layout.innerRadius + (layout.maxRadius - layout.innerRadius) * (tick - layout.axisMin) / layout.range;
|
|
6654
|
+
return {
|
|
6655
|
+
type: "ellipse",
|
|
6656
|
+
id: `chart-polar-area-ring-${chart.id}-${tick}`,
|
|
6657
|
+
order: nextOrder(),
|
|
6658
|
+
bounds,
|
|
6659
|
+
cx: layout.centerX,
|
|
6660
|
+
cy: layout.centerY,
|
|
6661
|
+
rx: radius,
|
|
6662
|
+
ry: radius,
|
|
6663
|
+
style: {
|
|
6664
|
+
fill: { kind: "none" },
|
|
6665
|
+
stroke: { kind: "solid", color: chart.textColor ?? "#334155" },
|
|
6666
|
+
strokeWidth: chunkCXL254BT_cjs.finite(chart.gridWidth, 1),
|
|
6667
|
+
opacity: 0.25
|
|
6668
|
+
}
|
|
6669
|
+
};
|
|
6670
|
+
});
|
|
6671
|
+
}
|
|
6461
6672
|
function renderPolarArea(context) {
|
|
6462
6673
|
const layout = layoutOf(context);
|
|
6463
|
-
const { centerX, centerY, innerRadius, maxRadius, axisMin, range, sweep } = layout;
|
|
6674
|
+
const { centerX, centerY, innerRadius, maxRadius, axisMin, range, sweep, start } = layout;
|
|
6464
6675
|
const showLabels = context.showLabels && sweep >= MIN_LABEL_SWEEP;
|
|
6465
|
-
|
|
6466
|
-
const angles = { start:
|
|
6467
|
-
const value = Math.max(0,
|
|
6676
|
+
const wedges = context.chart.series.flatMap((series, index) => {
|
|
6677
|
+
const angles = { start: start + index * sweep, end: start + (index + 1) * sweep };
|
|
6678
|
+
const value = Math.max(0, chunkCXL254BT_cjs.finite(series.values[0], 0));
|
|
6468
6679
|
const fraction = range > 0 ? Math.min(1, Math.max(0, (value - axisMin) / range)) : 0;
|
|
6469
6680
|
const outerRadius = Math.max(innerRadius + 1, innerRadius + (maxRadius - innerRadius) * fraction);
|
|
6470
|
-
const rawColor = series.color ??
|
|
6681
|
+
const rawColor = series.color ?? chunkCXL254BT_cjs.CHART_COLORS[index % chunkCXL254BT_cjs.CHART_COLORS.length];
|
|
6471
6682
|
const nodes = wedgeNodes(context, layout, series, angles, outerRadius, value, rawColor);
|
|
6472
6683
|
if (!showLabels) {
|
|
6473
6684
|
return nodes;
|
|
@@ -6475,27 +6686,36 @@ function renderPolarArea(context) {
|
|
|
6475
6686
|
const geometry = { centerX, centerY, outerRadius, innerRadius };
|
|
6476
6687
|
return [...nodes, ...createWedgeLabel(context, geometry, angles, series, value, rawColor)];
|
|
6477
6688
|
});
|
|
6689
|
+
return [...wedges, ...ringNodes(context, layout)];
|
|
6690
|
+
}
|
|
6691
|
+
function labelSizes(chart) {
|
|
6692
|
+
const base = Math.max(9, chunkCXL254BT_cjs.finite(chart.fontSize, 12));
|
|
6693
|
+
return {
|
|
6694
|
+
nameSize: Math.max(6, chunkCXL254BT_cjs.finite(chart.config?.polarNameSize, base)),
|
|
6695
|
+
valueSize: Math.max(6, chunkCXL254BT_cjs.finite(chart.config?.polarValueSize, base))
|
|
6696
|
+
};
|
|
6478
6697
|
}
|
|
6479
6698
|
function labelPlacement2(context, geometry, angles, series, fillColor) {
|
|
6480
6699
|
const mid = (angles.start + angles.end) / 2;
|
|
6481
|
-
const
|
|
6482
|
-
const lineHeight =
|
|
6700
|
+
const { nameSize, valueSize } = labelSizes(context.chart);
|
|
6701
|
+
const lineHeight = (nameSize + valueSize) * 1.2 / 2;
|
|
6483
6702
|
const ringThickness = geometry.outerRadius - geometry.innerRadius;
|
|
6484
|
-
const labelOffsetX =
|
|
6485
|
-
const labelOffsetY =
|
|
6703
|
+
const labelOffsetX = chunkCXL254BT_cjs.finite(series.labelOffsetX, 0);
|
|
6704
|
+
const labelOffsetY = chunkCXL254BT_cjs.finite(series.labelOffsetY, 0);
|
|
6486
6705
|
const hasManualOffset = labelOffsetX !== 0 || labelOffsetY !== 0;
|
|
6487
6706
|
const tooThin = ringThickness < lineHeight * 2 + 6;
|
|
6488
6707
|
const chordWidth = 2 * geometry.outerRadius * Math.sin(Math.abs(angles.end - angles.start) / 2);
|
|
6489
6708
|
const fitsInline = !tooThin && chordWidth >= LABEL_WIDTH;
|
|
6490
|
-
|
|
6709
|
+
const outsideLabels = context.chart.config?.polarOutsideLabels ?? false;
|
|
6710
|
+
if (!fitsInline && !hasManualOffset && !outsideLabels) {
|
|
6491
6711
|
return void 0;
|
|
6492
6712
|
}
|
|
6493
6713
|
const outside = hasManualOffset || !fitsInline;
|
|
6494
|
-
const tickStart =
|
|
6495
|
-
const point = outside ? hasManualOffset ? addOffset(
|
|
6496
|
-
const color2 = outside ?
|
|
6497
|
-
|
|
6498
|
-
|
|
6714
|
+
const tickStart = chunkCXL254BT_cjs.pieArcPoint(geometry, mid, geometry.outerRadius + LEADER_INSET);
|
|
6715
|
+
const point = outside ? hasManualOffset ? addOffset(chunkCXL254BT_cjs.pieArcPoint(geometry, mid, geometry.outerRadius), labelOffsetX, labelOffsetY) : chunkCXL254BT_cjs.pieArcPoint(geometry, mid, geometry.outerRadius + OUTSIDE_GAP) : chunkCXL254BT_cjs.pieArcPoint(geometry, mid, geometry.innerRadius + ringThickness * LABEL_RADIUS_FRACTION);
|
|
6716
|
+
const color2 = outside ? outsideLabels && context.chart.textColor ? context.chart.textColor : chunkCXL254BT_cjs.sameHueTint(chunkCXL254BT_cjs.representativeColor(fillColor, OUTSIDE_FALLBACK_COLOR), OUTSIDE_TINT_LIGHTNESS) ?? OUTSIDE_FALLBACK_COLOR : chunkCXL254BT_cjs.sameHueContrastColor(
|
|
6717
|
+
chunkCXL254BT_cjs.representativeColor(fillColor, "#0f172a"),
|
|
6718
|
+
chunkCXL254BT_cjs.contrastTextColor(chunkCXL254BT_cjs.representativeColor(fillColor, "#0f172a"))
|
|
6499
6719
|
);
|
|
6500
6720
|
return { point, color: color2, outside, mid, tickStart };
|
|
6501
6721
|
}
|
|
@@ -6506,9 +6726,9 @@ function createWedgeLabel(context, geometry, angles, series, value, fillColor) {
|
|
|
6506
6726
|
}
|
|
6507
6727
|
const { chart, bounds, nextOrder } = context;
|
|
6508
6728
|
const { point, color: color2, outside, mid, tickStart } = placement;
|
|
6509
|
-
const
|
|
6510
|
-
const lineHeight =
|
|
6511
|
-
const tickEnd = outside ?
|
|
6729
|
+
const { nameSize, valueSize } = labelSizes(chart);
|
|
6730
|
+
const lineHeight = Math.max(nameSize, valueSize) * 1.2;
|
|
6731
|
+
const tickEnd = outside ? chunkCXL254BT_cjs.clipSegmentToRect(tickStart, point, LABEL_WIDTH / 2, lineHeight) : tickStart;
|
|
6512
6732
|
const tick = {
|
|
6513
6733
|
type: "path",
|
|
6514
6734
|
id: `chart-polar-area-label-tick-${chart.id}-${series.id}`,
|
|
@@ -6530,35 +6750,43 @@ function createWedgeLabel(context, geometry, angles, series, value, fillColor) {
|
|
|
6530
6750
|
bounds,
|
|
6531
6751
|
x: point.x - LABEL_WIDTH / 2,
|
|
6532
6752
|
width: LABEL_WIDTH,
|
|
6533
|
-
|
|
6534
|
-
fontFamily: chart.fontFamily ?? chunkYM3XFBI4_cjs.DEFAULT_FONT,
|
|
6535
|
-
fontSize,
|
|
6753
|
+
fontFamily: chart.fontFamily ?? chunkCXL254BT_cjs.DEFAULT_FONT,
|
|
6536
6754
|
align: "center",
|
|
6537
6755
|
verticalAlign: "middle",
|
|
6538
6756
|
lineHeight: 1.2,
|
|
6539
6757
|
color: color2
|
|
6540
6758
|
};
|
|
6759
|
+
const valueFirst = chart.config?.polarValueFirst ?? false;
|
|
6760
|
+
const nameHeight = nameSize * 1.2;
|
|
6761
|
+
const valueHeight = valueSize * 1.2;
|
|
6762
|
+
const top = point.y - (nameHeight + valueHeight) / 2;
|
|
6763
|
+
const nameY = valueFirst ? top + valueHeight : top;
|
|
6764
|
+
const valueY = valueFirst ? top : top + nameHeight;
|
|
6541
6765
|
const nameText = {
|
|
6542
6766
|
type: "text",
|
|
6543
6767
|
id: `chart-polar-area-label-name-${chart.id}-${series.id}`,
|
|
6544
6768
|
order: nextOrder(),
|
|
6545
6769
|
...base,
|
|
6546
|
-
y:
|
|
6770
|
+
y: nameY,
|
|
6771
|
+
height: nameSize * 1.2,
|
|
6772
|
+
fontSize: nameSize,
|
|
6547
6773
|
lines: [series.label],
|
|
6548
|
-
fontWeight: "bold",
|
|
6774
|
+
fontWeight: valueFirst ? "normal" : "bold",
|
|
6549
6775
|
detail,
|
|
6550
|
-
prop:
|
|
6776
|
+
prop: chunkCXL254BT_cjs.seriesLabelProp(series.id)
|
|
6551
6777
|
};
|
|
6552
6778
|
const valueText = {
|
|
6553
6779
|
type: "text",
|
|
6554
6780
|
id: `chart-polar-area-label-value-${chart.id}-${series.id}`,
|
|
6555
6781
|
order: nextOrder(),
|
|
6556
6782
|
...base,
|
|
6557
|
-
y:
|
|
6558
|
-
|
|
6559
|
-
|
|
6783
|
+
y: valueY,
|
|
6784
|
+
height: valueSize * 1.2,
|
|
6785
|
+
fontSize: valueSize,
|
|
6786
|
+
lines: [chunkCXL254BT_cjs.formatFieldValue(value)],
|
|
6787
|
+
fontWeight: valueFirst ? "bold" : "normal",
|
|
6560
6788
|
detail,
|
|
6561
|
-
prop:
|
|
6789
|
+
prop: chunkCXL254BT_cjs.seriesValueProp(series.id, 0),
|
|
6562
6790
|
propKind: "value"
|
|
6563
6791
|
};
|
|
6564
6792
|
return [tick, nameText, valueText];
|
|
@@ -6576,11 +6804,12 @@ function radarFrameFor(context) {
|
|
|
6576
6804
|
return {
|
|
6577
6805
|
centerX: plot.x + plot.width / 2,
|
|
6578
6806
|
centerY: plot.y + plot.height / 2,
|
|
6579
|
-
radius:
|
|
6807
|
+
radius: chunkCXL254BT_cjs.radarRadius(plot.width, plot.height, chunkCXL254BT_cjs.finite(chart.fontSize, 12), context.showLabels),
|
|
6580
6808
|
min: chart.axisY.min,
|
|
6581
6809
|
max: chart.axisY.max,
|
|
6582
|
-
count:
|
|
6583
|
-
curved: chart.chartType === "radial"
|
|
6810
|
+
count: chunkCXL254BT_cjs.radarCategoryCount(configuredCount, dataCount),
|
|
6811
|
+
curved: chart.chartType === "radial",
|
|
6812
|
+
tension: chart.config?.radarTension
|
|
6584
6813
|
};
|
|
6585
6814
|
}
|
|
6586
6815
|
function createRadarGeometry(context) {
|
|
@@ -6588,17 +6817,21 @@ function createRadarGeometry(context) {
|
|
|
6588
6817
|
const configuredCategories = chart.config?.categories?.filter(Boolean) ?? [];
|
|
6589
6818
|
const frame = radarFrameFor(context);
|
|
6590
6819
|
const categories = createCategories(configuredCategories, frame.count);
|
|
6591
|
-
const pointAt = (pointRadius, pointIndex) =>
|
|
6820
|
+
const pointAt = (pointRadius, pointIndex) => chunkCXL254BT_cjs.radarPointAt(frame, pointIndex, pointRadius);
|
|
6592
6821
|
return {
|
|
6593
6822
|
circular: frame.curved,
|
|
6594
6823
|
areaOpacity: Math.max(0, Math.min(1, chart.config?.areaOpacity ?? 0.16)),
|
|
6824
|
+
strokeWidth: Math.max(0, chart.config?.radarStrokeWidth ?? 2),
|
|
6825
|
+
tension: frame.tension,
|
|
6826
|
+
pointSize: Math.max(0, chart.config?.radarPointSize ?? 3),
|
|
6827
|
+
showSpokes: chart.config?.radarSpokes ?? true,
|
|
6595
6828
|
categories,
|
|
6596
6829
|
centerX: frame.centerX,
|
|
6597
6830
|
centerY: frame.centerY,
|
|
6598
6831
|
radius: frame.radius,
|
|
6599
|
-
radiusForValue: (value) =>
|
|
6832
|
+
radiusForValue: (value) => chunkCXL254BT_cjs.radarRadiusForValue(frame, value),
|
|
6600
6833
|
pointAt,
|
|
6601
|
-
polygonPath: (pointRadius) =>
|
|
6834
|
+
polygonPath: (pointRadius) => chunkCXL254BT_cjs.radarSeriesPath(
|
|
6602
6835
|
categories.map((_, index) => pointAt(pointRadius, index)),
|
|
6603
6836
|
false
|
|
6604
6837
|
)
|
|
@@ -6616,10 +6849,10 @@ function renderRadarGrid(context, geometry) {
|
|
|
6616
6849
|
if (context.chart.showGrid === false) {
|
|
6617
6850
|
return [];
|
|
6618
6851
|
}
|
|
6619
|
-
return [...renderRings(context, geometry), ...renderSpokes(context, geometry)];
|
|
6852
|
+
return [...renderRings(context, geometry), ...geometry.showSpokes ? renderSpokes(context, geometry) : []];
|
|
6620
6853
|
}
|
|
6621
6854
|
function renderRings(context, geometry) {
|
|
6622
|
-
return
|
|
6855
|
+
return chunkCXL254BT_cjs.chartTicks(context.chart.axisY).filter((tick) => tick > context.chart.axisY.min).map((tick) => createRingNode(context, geometry, tick));
|
|
6623
6856
|
}
|
|
6624
6857
|
function createRingNode(context, geometry, tick) {
|
|
6625
6858
|
const { chart, bounds, nextOrder } = context;
|
|
@@ -6627,7 +6860,7 @@ function createRingNode(context, geometry, tick) {
|
|
|
6627
6860
|
const style = {
|
|
6628
6861
|
fill: { kind: "none" },
|
|
6629
6862
|
stroke: { kind: "solid", color: chart.gridColor ?? "#e2e8f0" },
|
|
6630
|
-
strokeWidth:
|
|
6863
|
+
strokeWidth: chunkCXL254BT_cjs.finite(chart.gridWidth, 1)
|
|
6631
6864
|
};
|
|
6632
6865
|
if (geometry.circular) {
|
|
6633
6866
|
return {
|
|
@@ -6664,7 +6897,7 @@ function renderSpokes(context, geometry) {
|
|
|
6664
6897
|
style: {
|
|
6665
6898
|
fill: { kind: "none" },
|
|
6666
6899
|
stroke: { kind: "solid", color: chart.gridColor ?? "#e2e8f0" },
|
|
6667
|
-
strokeWidth:
|
|
6900
|
+
strokeWidth: chunkCXL254BT_cjs.finite(chart.gridWidth, 1)
|
|
6668
6901
|
}
|
|
6669
6902
|
};
|
|
6670
6903
|
});
|
|
@@ -6684,7 +6917,7 @@ function createCategoryLabel(context, geometry, category, categoryIndex) {
|
|
|
6684
6917
|
const labelPoint = geometry.pointAt(geometry.radius + 10, categoryIndex);
|
|
6685
6918
|
const horizontalOffset = labelPoint.x - geometry.centerX;
|
|
6686
6919
|
const width = Math.max(64, Math.min(120, plot.width / 3));
|
|
6687
|
-
return
|
|
6920
|
+
return chunkCXL254BT_cjs.chartText({
|
|
6688
6921
|
id: `chart-radar-label-${chart.id}-${categoryIndex}`,
|
|
6689
6922
|
order: nextOrder(),
|
|
6690
6923
|
bounds,
|
|
@@ -6722,13 +6955,13 @@ function renderRadarSeries(context, geometry) {
|
|
|
6722
6955
|
return nodes;
|
|
6723
6956
|
}
|
|
6724
6957
|
function renderSeries(context, geometry, series, seriesIndex) {
|
|
6725
|
-
const color2 = series.color ??
|
|
6958
|
+
const color2 = series.color ?? chunkCXL254BT_cjs.CHART_COLORS[seriesIndex % chunkCXL254BT_cjs.CHART_COLORS.length];
|
|
6726
6959
|
const points = seriesPoints(series, context, geometry);
|
|
6727
|
-
const path =
|
|
6960
|
+
const path = chunkCXL254BT_cjs.radarSeriesPath(points, geometry.circular, geometry.tension);
|
|
6728
6961
|
return [
|
|
6729
6962
|
createSeriesFill(context, geometry, series, path, color2),
|
|
6730
|
-
createSeriesStroke(context, series, path, color2),
|
|
6731
|
-
...createSeriesPoints(context, series, points, color2)
|
|
6963
|
+
...geometry.strokeWidth > 0 ? [createSeriesStroke(context, geometry, series, path, color2)] : [],
|
|
6964
|
+
...geometry.pointSize > 0 ? createSeriesPoints(context, geometry, series, points, color2) : []
|
|
6732
6965
|
];
|
|
6733
6966
|
}
|
|
6734
6967
|
function seriesPoints(series, context, geometry) {
|
|
@@ -6747,13 +6980,13 @@ function createSeriesFill(context, geometry, series, path, color2) {
|
|
|
6747
6980
|
d: path,
|
|
6748
6981
|
detail: { of: "chartSeries", series: series.id },
|
|
6749
6982
|
style: {
|
|
6750
|
-
fill:
|
|
6983
|
+
fill: chunkCXL254BT_cjs.paint(color2, diagnostics, chart.id),
|
|
6751
6984
|
stroke: { kind: "none" },
|
|
6752
6985
|
opacity: Math.max(0, Math.min(1, series.opacity ?? geometry.areaOpacity))
|
|
6753
6986
|
}
|
|
6754
6987
|
};
|
|
6755
6988
|
}
|
|
6756
|
-
function createSeriesStroke(context, series, path, color2) {
|
|
6989
|
+
function createSeriesStroke(context, geometry, series, path, color2) {
|
|
6757
6990
|
const { chart, bounds, diagnostics, nextOrder } = context;
|
|
6758
6991
|
return {
|
|
6759
6992
|
type: "path",
|
|
@@ -6764,14 +6997,14 @@ function createSeriesStroke(context, series, path, color2) {
|
|
|
6764
6997
|
detail: { of: "chartSeries", series: series.id },
|
|
6765
6998
|
style: {
|
|
6766
6999
|
fill: { kind: "none" },
|
|
6767
|
-
stroke:
|
|
6768
|
-
strokeWidth:
|
|
7000
|
+
stroke: chunkCXL254BT_cjs.paint(color2, diagnostics, chart.id),
|
|
7001
|
+
strokeWidth: geometry.strokeWidth,
|
|
6769
7002
|
lineJoin: "round",
|
|
6770
|
-
shadow:
|
|
7003
|
+
shadow: chunkCXL254BT_cjs.resolveChartShadow(chart.shadowStyle)
|
|
6771
7004
|
}
|
|
6772
7005
|
};
|
|
6773
7006
|
}
|
|
6774
|
-
function createSeriesPoints(context, series, points, color2) {
|
|
7007
|
+
function createSeriesPoints(context, geometry, series, points, color2) {
|
|
6775
7008
|
const { chart, bounds, diagnostics, nextOrder } = context;
|
|
6776
7009
|
return points.map((point, pointIndex) => ({
|
|
6777
7010
|
type: "ellipse",
|
|
@@ -6780,11 +7013,11 @@ function createSeriesPoints(context, series, points, color2) {
|
|
|
6780
7013
|
bounds,
|
|
6781
7014
|
cx: point.x,
|
|
6782
7015
|
cy: point.y,
|
|
6783
|
-
rx:
|
|
6784
|
-
ry:
|
|
7016
|
+
rx: geometry.pointSize,
|
|
7017
|
+
ry: geometry.pointSize,
|
|
6785
7018
|
detail: { of: "chartValue", series: series.id, valueIndex: pointIndex, mark: "radar-vertex" },
|
|
6786
|
-
prop:
|
|
6787
|
-
style: { fill:
|
|
7019
|
+
prop: chunkCXL254BT_cjs.seriesValueProp(series.id, pointIndex),
|
|
7020
|
+
style: { fill: chunkCXL254BT_cjs.paint(color2, diagnostics, chart.id) }
|
|
6788
7021
|
}));
|
|
6789
7022
|
}
|
|
6790
7023
|
|
|
@@ -6799,7 +7032,7 @@ function renderRadar(context) {
|
|
|
6799
7032
|
}
|
|
6800
7033
|
|
|
6801
7034
|
// src/renderScene/charts/renderers/radialBar.ts
|
|
6802
|
-
var
|
|
7035
|
+
var TOP3 = -Math.PI / 2;
|
|
6803
7036
|
var DEFAULT_RING_THICKNESS = 14;
|
|
6804
7037
|
var DEFAULT_RING_GAP = 4;
|
|
6805
7038
|
var TRACK_OPACITY = 0.18;
|
|
@@ -6825,34 +7058,38 @@ function ringShadow(shadow, ringThickness) {
|
|
|
6825
7058
|
const scale = distance > maxDistance ? maxDistance / distance : 1;
|
|
6826
7059
|
return { ...shadow, blur, dx: shadow.dx * scale, dy: shadow.dy * scale };
|
|
6827
7060
|
}
|
|
6828
|
-
function ringProgressPath(cx, cy, r, sweep) {
|
|
7061
|
+
function ringProgressPath(cx, cy, r, sweep, from) {
|
|
6829
7062
|
if (sweep >= Math.PI * 2 - FULL_SWEEP_EPSILON) {
|
|
6830
|
-
const start2 = arcPoint(cx, cy, r,
|
|
6831
|
-
const mid = arcPoint(cx, cy, r,
|
|
7063
|
+
const start2 = arcPoint(cx, cy, r, from);
|
|
7064
|
+
const mid = arcPoint(cx, cy, r, from + Math.PI);
|
|
6832
7065
|
return `M ${start2.x} ${start2.y} A ${r} ${r} 0 1 1 ${mid.x} ${mid.y} A ${r} ${r} 0 1 1 ${start2.x} ${start2.y}`;
|
|
6833
7066
|
}
|
|
6834
|
-
const start = arcPoint(cx, cy, r,
|
|
6835
|
-
const end = arcPoint(cx, cy, r,
|
|
7067
|
+
const start = arcPoint(cx, cy, r, from);
|
|
7068
|
+
const end = arcPoint(cx, cy, r, from + sweep);
|
|
6836
7069
|
const largeArc = sweep > Math.PI ? 1 : 0;
|
|
6837
7070
|
return `M ${start.x} ${start.y} A ${r} ${r} 0 ${largeArc} 1 ${end.x} ${end.y}`;
|
|
6838
7071
|
}
|
|
6839
7072
|
function layoutOf2(context) {
|
|
6840
7073
|
const { chart, plot } = context;
|
|
6841
|
-
const axisMin =
|
|
7074
|
+
const axisMin = chunkCXL254BT_cjs.finite(chart.axisY.min, 0);
|
|
6842
7075
|
return {
|
|
6843
7076
|
centerX: plot.x + plot.width / 2,
|
|
6844
7077
|
centerY: plot.y + plot.height / 2,
|
|
6845
7078
|
outerRadius: Math.max(1, Math.min(plot.width, plot.height) / 2 - 4),
|
|
6846
|
-
ringThickness: Math.max(1,
|
|
6847
|
-
ringGap: Math.max(0,
|
|
7079
|
+
ringThickness: Math.max(1, chunkCXL254BT_cjs.finite(chart.config?.ringThickness, DEFAULT_RING_THICKNESS)),
|
|
7080
|
+
ringGap: Math.max(0, chunkCXL254BT_cjs.finite(chart.config?.ringGap, DEFAULT_RING_GAP)),
|
|
6848
7081
|
axisMin,
|
|
6849
|
-
range:
|
|
7082
|
+
range: chunkCXL254BT_cjs.finite(chart.axisY.max, 100) - axisMin,
|
|
7083
|
+
start: TOP3 + chunkCXL254BT_cjs.finite(chart.config?.ringStartAngle, 0) * Math.PI / 180,
|
|
7084
|
+
total: Math.min(360, Math.max(1, chunkCXL254BT_cjs.finite(chart.config?.ringSweep, 360))) * Math.PI / 180,
|
|
7085
|
+
trackOpacity: Math.min(1, Math.max(0, chunkCXL254BT_cjs.finite(chart.config?.ringTrackOpacity, TRACK_OPACITY))),
|
|
7086
|
+
cap: chart.config?.ringCap ?? "round"
|
|
6850
7087
|
};
|
|
6851
7088
|
}
|
|
6852
7089
|
function ringEndShadows(context, layout, series, radius, sweep, color2) {
|
|
6853
7090
|
const { chart, bounds, nextOrder } = context;
|
|
6854
|
-
const { centerX, centerY, ringThickness } = layout;
|
|
6855
|
-
const shadow =
|
|
7091
|
+
const { centerX, centerY, ringThickness, start } = layout;
|
|
7092
|
+
const shadow = chunkCXL254BT_cjs.resolveChartShadow(chart.shadowStyle);
|
|
6856
7093
|
const isFullCircle = sweep >= Math.PI * 2 - FULL_SWEEP_EPSILON;
|
|
6857
7094
|
if (!shadow || isFullCircle) {
|
|
6858
7095
|
return [];
|
|
@@ -6860,8 +7097,8 @@ function ringEndShadows(context, layout, series, radius, sweep, color2) {
|
|
|
6860
7097
|
const clampedShadow = ringShadow(shadow, ringThickness);
|
|
6861
7098
|
const stubSweep = Math.min(sweep, ringThickness / radius);
|
|
6862
7099
|
return [
|
|
6863
|
-
[
|
|
6864
|
-
[
|
|
7100
|
+
[start, start + stubSweep],
|
|
7101
|
+
[start + sweep - stubSweep, start + sweep]
|
|
6865
7102
|
].map(
|
|
6866
7103
|
([from, to], endIndex) => ({
|
|
6867
7104
|
type: "path",
|
|
@@ -6873,7 +7110,7 @@ function ringEndShadows(context, layout, series, radius, sweep, color2) {
|
|
|
6873
7110
|
fill: { kind: "none" },
|
|
6874
7111
|
stroke: color2,
|
|
6875
7112
|
strokeWidth: ringThickness,
|
|
6876
|
-
lineCap:
|
|
7113
|
+
lineCap: layout.cap,
|
|
6877
7114
|
shadow: clampedShadow,
|
|
6878
7115
|
clip: {
|
|
6879
7116
|
type: "path",
|
|
@@ -6883,17 +7120,23 @@ function ringEndShadows(context, layout, series, radius, sweep, color2) {
|
|
|
6883
7120
|
})
|
|
6884
7121
|
);
|
|
6885
7122
|
}
|
|
6886
|
-
function
|
|
7123
|
+
function ringNodes2(context, layout, series, index) {
|
|
6887
7124
|
const { chart, bounds, diagnostics, nextOrder } = context;
|
|
6888
|
-
const { centerX, centerY, outerRadius, ringThickness, ringGap, axisMin, range } = layout;
|
|
7125
|
+
const { centerX, centerY, outerRadius, ringThickness, ringGap, axisMin, range, start, total, trackOpacity, cap } = layout;
|
|
6889
7126
|
const radius = outerRadius - index * (ringThickness + ringGap) - ringThickness / 2;
|
|
6890
7127
|
if (radius <= ringThickness / 2) {
|
|
6891
7128
|
return [];
|
|
6892
7129
|
}
|
|
6893
|
-
const color2 =
|
|
6894
|
-
const value = Math.max(0,
|
|
7130
|
+
const color2 = chunkCXL254BT_cjs.paint(series.color ?? chunkCXL254BT_cjs.CHART_COLORS[index % chunkCXL254BT_cjs.CHART_COLORS.length], diagnostics, chart.id);
|
|
7131
|
+
const value = Math.max(0, chunkCXL254BT_cjs.finite(series.values[0], 0));
|
|
6895
7132
|
const fraction = range > 0 ? Math.min(1, Math.max(0, (value - axisMin) / range)) : 0;
|
|
6896
|
-
const
|
|
7133
|
+
const trackStyle = {
|
|
7134
|
+
fill: { kind: "none" },
|
|
7135
|
+
stroke: color2,
|
|
7136
|
+
strokeWidth: ringThickness,
|
|
7137
|
+
opacity: trackOpacity
|
|
7138
|
+
};
|
|
7139
|
+
const track = total >= Math.PI * 2 - FULL_SWEEP_EPSILON ? {
|
|
6897
7140
|
type: "ellipse",
|
|
6898
7141
|
id: `chart-radial-bar-track-${chart.id}-${series.id}`,
|
|
6899
7142
|
order: nextOrder(),
|
|
@@ -6902,42 +7145,49 @@ function ringNodes(context, layout, series, index) {
|
|
|
6902
7145
|
cy: centerY,
|
|
6903
7146
|
rx: radius,
|
|
6904
7147
|
ry: radius,
|
|
6905
|
-
style:
|
|
7148
|
+
style: trackStyle
|
|
7149
|
+
} : {
|
|
7150
|
+
type: "path",
|
|
7151
|
+
id: `chart-radial-bar-track-${chart.id}-${series.id}`,
|
|
7152
|
+
order: nextOrder(),
|
|
7153
|
+
bounds,
|
|
7154
|
+
d: arcSegmentPath(centerX, centerY, radius, start, start + total),
|
|
7155
|
+
style: { ...trackStyle, lineCap: cap }
|
|
6906
7156
|
};
|
|
6907
7157
|
if (fraction <= 0) {
|
|
6908
7158
|
return [track];
|
|
6909
7159
|
}
|
|
6910
|
-
const sweep = fraction *
|
|
7160
|
+
const sweep = fraction * total;
|
|
6911
7161
|
const casters = ringEndShadows(context, layout, series, radius, sweep, color2);
|
|
6912
7162
|
const progress = {
|
|
6913
7163
|
type: "path",
|
|
6914
7164
|
id: `chart-radial-bar-ring-${chart.id}-${series.id}`,
|
|
6915
7165
|
order: nextOrder(),
|
|
6916
7166
|
bounds,
|
|
6917
|
-
d: ringProgressPath(centerX, centerY, radius, sweep),
|
|
7167
|
+
d: ringProgressPath(centerX, centerY, radius, sweep, start),
|
|
6918
7168
|
detail: { of: "chartValue", series: series.id, valueIndex: 0, mark: "radial-bar-ring" },
|
|
6919
|
-
prop:
|
|
6920
|
-
style: { fill: { kind: "none" }, stroke: color2, strokeWidth: ringThickness, lineCap:
|
|
7169
|
+
prop: chunkCXL254BT_cjs.seriesValueProp(series.id, 0),
|
|
7170
|
+
style: { fill: { kind: "none" }, stroke: color2, strokeWidth: ringThickness, lineCap: cap }
|
|
6921
7171
|
};
|
|
6922
7172
|
return [track, ...casters, progress];
|
|
6923
7173
|
}
|
|
6924
7174
|
function renderRadialBar(context) {
|
|
6925
7175
|
const layout = layoutOf2(context);
|
|
6926
|
-
return context.chart.series.flatMap((series, index) =>
|
|
7176
|
+
return context.chart.series.flatMap((series, index) => ringNodes2(context, layout, series, index));
|
|
6927
7177
|
}
|
|
6928
7178
|
|
|
6929
7179
|
// src/renderScene/charts/renderers/sankey/links.ts
|
|
6930
7180
|
function renderSankeyLinks(context, data) {
|
|
6931
|
-
const shadow =
|
|
7181
|
+
const shadow = chunkCXL254BT_cjs.resolveChartShadow(context.chart.shadowStyle);
|
|
6932
7182
|
const gradient = Boolean(context.chart.config?.linkGradient);
|
|
6933
7183
|
const { plot } = context;
|
|
6934
7184
|
const clipPath = shadow ? `M ${plot.x} ${plot.y} H ${plot.x + plot.width} V ${plot.y + plot.height} H ${plot.x} Z` : void 0;
|
|
6935
7185
|
return data.links.map((link, linkIndex) => {
|
|
6936
|
-
const ribbon = createSankeyLinkRibbon(data, link, linkIndex, gradient);
|
|
7186
|
+
const ribbon = createSankeyLinkRibbon(context, data, link, linkIndex, gradient);
|
|
6937
7187
|
return createSankeyRibbonNode(context, ribbon, shadow, clipPath, gradient);
|
|
6938
7188
|
});
|
|
6939
7189
|
}
|
|
6940
|
-
function createSankeyLinkRibbon(data, link, linkIndex, gradient) {
|
|
7190
|
+
function createSankeyLinkRibbon(context, data, link, linkIndex, gradient) {
|
|
6941
7191
|
const source = {
|
|
6942
7192
|
x: data.baseX + link.x0,
|
|
6943
7193
|
top: data.baseY + link.sourceY0,
|
|
@@ -6948,8 +7198,9 @@ function createSankeyLinkRibbon(data, link, linkIndex, gradient) {
|
|
|
6948
7198
|
top: data.baseY + link.targetY0,
|
|
6949
7199
|
bottom: data.baseY + link.targetY1
|
|
6950
7200
|
};
|
|
6951
|
-
const
|
|
6952
|
-
const
|
|
7201
|
+
const config = context.chart.config;
|
|
7202
|
+
const fromColor = link.color || data.nodeColors.get(link.source) || chunkCXL254BT_cjs.DEFAULT_ZONE_FILL;
|
|
7203
|
+
const toColor = data.nodeColors.get(link.target) || chunkCXL254BT_cjs.DEFAULT_ZONE_FILL;
|
|
6953
7204
|
const fill2 = gradient ? {
|
|
6954
7205
|
kind: "linear-gradient",
|
|
6955
7206
|
angle: 0,
|
|
@@ -6964,9 +7215,9 @@ function createSankeyLinkRibbon(data, link, linkIndex, gradient) {
|
|
|
6964
7215
|
toId: link.target,
|
|
6965
7216
|
source,
|
|
6966
7217
|
target,
|
|
6967
|
-
controlX:
|
|
7218
|
+
controlX: source.x + (target.x - source.x) * Math.min(1, Math.max(0, chunkCXL254BT_cjs.finite(config?.sankeyLinkCurve, 0.5))),
|
|
6968
7219
|
fill: fill2,
|
|
6969
|
-
opacity: link.color ? 0.85 : 0.45
|
|
7220
|
+
opacity: Math.min(1, Math.max(0, chunkCXL254BT_cjs.finite(config?.sankeyLinkOpacity, link.color ? 0.85 : 0.45)))
|
|
6970
7221
|
};
|
|
6971
7222
|
}
|
|
6972
7223
|
function createSankeyRibbonNode(context, ribbon, shadow, clipPath, gradient) {
|
|
@@ -7007,7 +7258,7 @@ function sankeyRibbonPath(ribbon) {
|
|
|
7007
7258
|
var OUTSIDE_LABEL_LIGHTNESS_ON_LIGHT_BG = 0.3;
|
|
7008
7259
|
var OUTSIDE_LABEL_LIGHTNESS_ON_DARK_BG = 0.78;
|
|
7009
7260
|
function renderSankeyNodes(context, data) {
|
|
7010
|
-
const cornerRadius = Math.max(0,
|
|
7261
|
+
const cornerRadius = Math.max(0, chunkCXL254BT_cjs.finite(context.chart.config?.barCornerRadius, 0));
|
|
7011
7262
|
const nodes = [];
|
|
7012
7263
|
data.nodes.forEach((node) => {
|
|
7013
7264
|
nodes.push(createNodeRect(context, data, node, cornerRadius));
|
|
@@ -7023,8 +7274,8 @@ function createNodeRect(context, data, node, cornerRadius) {
|
|
|
7023
7274
|
const x = data.baseX + node.x;
|
|
7024
7275
|
const y = data.baseY + node.y;
|
|
7025
7276
|
const style = {
|
|
7026
|
-
fill: { kind: "solid", color: node.color ||
|
|
7027
|
-
shadow:
|
|
7277
|
+
fill: { kind: "solid", color: node.color || chunkCXL254BT_cjs.DEFAULT_ZONE_FILL },
|
|
7278
|
+
shadow: chunkCXL254BT_cjs.resolveChartShadow(chart.shadowStyle)
|
|
7028
7279
|
};
|
|
7029
7280
|
const isFirstColumn = node.column === 0;
|
|
7030
7281
|
const isLastColumn = node.column === data.columnCount - 1;
|
|
@@ -7050,7 +7301,7 @@ function createNodeRect(context, data, node, cornerRadius) {
|
|
|
7050
7301
|
id: `chart-sankey-node-${chart.id}-${node.id}`,
|
|
7051
7302
|
order: nextOrder(),
|
|
7052
7303
|
bounds,
|
|
7053
|
-
d:
|
|
7304
|
+
d: chunkCXL254BT_cjs.leftRoundedRectPath(x, y, node.width, node.height, cornerRadius),
|
|
7054
7305
|
style,
|
|
7055
7306
|
detail
|
|
7056
7307
|
};
|
|
@@ -7061,7 +7312,7 @@ function createNodeRect(context, data, node, cornerRadius) {
|
|
|
7061
7312
|
id: `chart-sankey-node-${chart.id}-${node.id}`,
|
|
7062
7313
|
order: nextOrder(),
|
|
7063
7314
|
bounds,
|
|
7064
|
-
d:
|
|
7315
|
+
d: chunkCXL254BT_cjs.rightRoundedRectPath(x, y, node.width, node.height, cornerRadius),
|
|
7065
7316
|
style,
|
|
7066
7317
|
detail
|
|
7067
7318
|
};
|
|
@@ -7087,9 +7338,9 @@ function createNodeLabel(context, data, node) {
|
|
|
7087
7338
|
return void 0;
|
|
7088
7339
|
}
|
|
7089
7340
|
const fallback = chart.textColor ?? "#0f172a";
|
|
7090
|
-
const defaultColor = position === "inside" ?
|
|
7341
|
+
const defaultColor = position === "inside" ? chunkCXL254BT_cjs.contrastTextColor(node.color) : chunkCXL254BT_cjs.sameHueTint(
|
|
7091
7342
|
node.color,
|
|
7092
|
-
|
|
7343
|
+
chunkCXL254BT_cjs.isLightColor(fallback) ? OUTSIDE_LABEL_LIGHTNESS_ON_DARK_BG : OUTSIDE_LABEL_LIGHTNESS_ON_LIGHT_BG
|
|
7093
7344
|
) ?? fallback;
|
|
7094
7345
|
const color2 = chart.config?.labelColor ?? defaultColor;
|
|
7095
7346
|
return { ...label, color: color2, detail: { of: "chartSeries", series: node.id, mark: "sankey-node-label" } };
|
|
@@ -7101,7 +7352,7 @@ function createOutsideLabel(context, data, node) {
|
|
|
7101
7352
|
const y = data.baseY + node.y;
|
|
7102
7353
|
const labelX2 = isLastColumn ? x - data.labelGutter + 8 : x + node.width + 6;
|
|
7103
7354
|
return {
|
|
7104
|
-
...
|
|
7355
|
+
...chunkCXL254BT_cjs.chartText({
|
|
7105
7356
|
id: `chart-sankey-label-${chart.id}-${node.id}`,
|
|
7106
7357
|
order: nextOrder(),
|
|
7107
7358
|
bounds,
|
|
@@ -7110,7 +7361,7 @@ function createOutsideLabel(context, data, node) {
|
|
|
7110
7361
|
chart,
|
|
7111
7362
|
align: isLastColumn ? "right" : "left"
|
|
7112
7363
|
}),
|
|
7113
|
-
fontSize: data.
|
|
7364
|
+
fontSize: data.labelSize,
|
|
7114
7365
|
fontWeight: "bold",
|
|
7115
7366
|
verticalAlign: "middle"
|
|
7116
7367
|
};
|
|
@@ -7121,16 +7372,16 @@ function createInsideLabel(context, data, node, orientation) {
|
|
|
7121
7372
|
const y = data.baseY + node.y;
|
|
7122
7373
|
const centerX = x + node.width / 2;
|
|
7123
7374
|
const centerY = y + node.height / 2;
|
|
7124
|
-
const fontSize = data.
|
|
7375
|
+
const fontSize = data.labelSize;
|
|
7125
7376
|
const id = `chart-sankey-label-${chart.id}-${node.id}`;
|
|
7126
7377
|
if (orientation === "vertical") {
|
|
7127
7378
|
const thickness = fontSize * 1.4;
|
|
7128
7379
|
const width = Math.max(1, node.height - 8);
|
|
7129
|
-
if (
|
|
7380
|
+
if (chunkCXL254BT_cjs.estimateTextWidth(node.label, fontSize, false) > width) {
|
|
7130
7381
|
return void 0;
|
|
7131
7382
|
}
|
|
7132
7383
|
return {
|
|
7133
|
-
...
|
|
7384
|
+
...chunkCXL254BT_cjs.chartText({
|
|
7134
7385
|
id,
|
|
7135
7386
|
order: nextOrder(),
|
|
7136
7387
|
bounds,
|
|
@@ -7147,7 +7398,7 @@ function createInsideLabel(context, data, node, orientation) {
|
|
|
7147
7398
|
};
|
|
7148
7399
|
}
|
|
7149
7400
|
return {
|
|
7150
|
-
...
|
|
7401
|
+
...chunkCXL254BT_cjs.chartText({
|
|
7151
7402
|
id,
|
|
7152
7403
|
order: nextOrder(),
|
|
7153
7404
|
bounds,
|
|
@@ -7167,15 +7418,19 @@ function createSankeyRenderData(context) {
|
|
|
7167
7418
|
const { chart, plot, showLabels } = context;
|
|
7168
7419
|
const labelGutter = showLabels ? 92 : 0;
|
|
7169
7420
|
const availableWidth = Math.max(1, plot.width - labelGutter * 2);
|
|
7170
|
-
const layout = layoutSankey(createNodeInputs(context), createLinkInputs(context), availableWidth, plot.height
|
|
7421
|
+
const layout = layoutSankey(createNodeInputs(context), createLinkInputs(context), availableWidth, plot.height, {
|
|
7422
|
+
nodeWidth: Math.max(1, chunkCXL254BT_cjs.finite(chart.config?.sankeyNodeWidth, 18)),
|
|
7423
|
+
nodeGap: Math.max(0, chunkCXL254BT_cjs.finite(chart.config?.sankeyNodeGap, 8))
|
|
7424
|
+
});
|
|
7171
7425
|
return {
|
|
7172
7426
|
...layout,
|
|
7173
7427
|
baseX: plot.x + labelGutter,
|
|
7174
7428
|
baseY: plot.y,
|
|
7175
7429
|
labelGutter,
|
|
7176
|
-
fontSize: Math.max(9,
|
|
7430
|
+
fontSize: Math.max(9, chunkCXL254BT_cjs.finite(chart.fontSize, 12)),
|
|
7431
|
+
labelSize: Math.max(6, chunkCXL254BT_cjs.finite(chart.config?.sankeyLabelSize, Math.max(9, chunkCXL254BT_cjs.finite(chart.fontSize, 12)) - 2)),
|
|
7177
7432
|
columnCount: Math.max(1, ...layout.nodes.map((node) => node.column + 1)),
|
|
7178
|
-
nodeColors: new Map(layout.nodes.map((node) => [node.id, node.color ||
|
|
7433
|
+
nodeColors: new Map(layout.nodes.map((node) => [node.id, node.color || chunkCXL254BT_cjs.DEFAULT_ZONE_FILL]))
|
|
7179
7434
|
};
|
|
7180
7435
|
}
|
|
7181
7436
|
function createNodeInputs(context) {
|
|
@@ -7197,7 +7452,7 @@ function createLinkInputs(context) {
|
|
|
7197
7452
|
source: series.source,
|
|
7198
7453
|
target: series.target,
|
|
7199
7454
|
value: series.values[0] ?? 0,
|
|
7200
|
-
color: series.color ?
|
|
7455
|
+
color: series.color ? chunkCXL254BT_cjs.representativeColor(series.color, chunkCXL254BT_cjs.DEFAULT_ZONE_FILL) : void 0
|
|
7201
7456
|
});
|
|
7202
7457
|
});
|
|
7203
7458
|
return inputs;
|
|
@@ -7213,20 +7468,24 @@ function renderSankey(context) {
|
|
|
7213
7468
|
}
|
|
7214
7469
|
|
|
7215
7470
|
// src/renderScene/charts/renderers/scatter.ts
|
|
7216
|
-
|
|
7471
|
+
var DEFAULT_POINT_SIZE = 4;
|
|
7472
|
+
function renderScatter(context) {
|
|
7217
7473
|
const nodes = [];
|
|
7218
|
-
const shadow =
|
|
7474
|
+
const shadow = chunkCXL254BT_cjs.resolveChartShadow(context.chart.shadowStyle);
|
|
7219
7475
|
context.chart.series.forEach((series, seriesIndex) => {
|
|
7220
|
-
const color2 = series.color ??
|
|
7476
|
+
const color2 = series.color ?? chunkCXL254BT_cjs.CHART_COLORS[seriesIndex % chunkCXL254BT_cjs.CHART_COLORS.length];
|
|
7221
7477
|
const points = pixelPoints(context, seriesValuePairs(context.chart, series));
|
|
7222
7478
|
points.forEach((point, pointIndex) => {
|
|
7223
|
-
nodes.push(createScatterPoint(context, series, point, pointIndex, color2,
|
|
7479
|
+
nodes.push(createScatterPoint(context, series, point, pointIndex, color2, shadow));
|
|
7224
7480
|
});
|
|
7225
7481
|
});
|
|
7226
7482
|
return nodes;
|
|
7227
7483
|
}
|
|
7228
|
-
function createScatterPoint(context, series, point, pointIndex, color2,
|
|
7484
|
+
function createScatterPoint(context, series, point, pointIndex, color2, shadow) {
|
|
7229
7485
|
const { chart, bounds, diagnostics, nextOrder } = context;
|
|
7486
|
+
const config = chart.config;
|
|
7487
|
+
const radius = config?.pointSize ?? DEFAULT_POINT_SIZE;
|
|
7488
|
+
const strokeWidth = config?.pointStrokeWidth ?? 0;
|
|
7230
7489
|
return {
|
|
7231
7490
|
type: "ellipse",
|
|
7232
7491
|
id: `chart-point-${chart.id}-${series.id}-${pointIndex}`,
|
|
@@ -7237,21 +7496,27 @@ function createScatterPoint(context, series, point, pointIndex, color2, radius,
|
|
|
7237
7496
|
rx: radius,
|
|
7238
7497
|
ry: radius,
|
|
7239
7498
|
detail: { of: "chartValue", series: series.id, valueIndex: pointIndex },
|
|
7240
|
-
style: {
|
|
7499
|
+
style: {
|
|
7500
|
+
fill: chunkCXL254BT_cjs.paint(color2, diagnostics, chart.id),
|
|
7501
|
+
stroke: strokeWidth > 0 ? chunkCXL254BT_cjs.paint(config?.pointStrokeColor ?? color2, diagnostics, chart.id) : void 0,
|
|
7502
|
+
strokeWidth: strokeWidth > 0 ? strokeWidth : void 0,
|
|
7503
|
+
opacity: config?.pointOpacity,
|
|
7504
|
+
shadow
|
|
7505
|
+
}
|
|
7241
7506
|
};
|
|
7242
7507
|
}
|
|
7243
7508
|
|
|
7244
7509
|
// src/renderScene/charts/renderers/treemap/layout.ts
|
|
7245
7510
|
function createTreemapLayout(context) {
|
|
7246
7511
|
const { chart, plot, showLegend } = context;
|
|
7247
|
-
const fontSize = Math.max(9,
|
|
7512
|
+
const fontSize = Math.max(9, chunkCXL254BT_cjs.finite(chart.fontSize, 12));
|
|
7248
7513
|
const legendPosition = chart.legendPosition === "left" ? "left" : chart.legendPosition === "right" ? "right" : "bottom";
|
|
7249
7514
|
const legendHeight = showLegend && legendPosition === "bottom" ? 48 : 0;
|
|
7250
|
-
const cellGap = Math.max(0,
|
|
7515
|
+
const cellGap = Math.max(0, chunkCXL254BT_cjs.finite(chart.config?.cellGap, 0));
|
|
7251
7516
|
return {
|
|
7252
7517
|
leaves: chart.series,
|
|
7253
|
-
bands:
|
|
7254
|
-
zones: chart.config?.zones?.length ? chart.config.zones :
|
|
7518
|
+
bands: chunkCXL254BT_cjs.axisBands(chart.axisY),
|
|
7519
|
+
zones: chart.config?.zones?.length ? chart.config.zones : chunkCXL254BT_cjs.DEFAULT_HEATMAP_ZONES,
|
|
7255
7520
|
fontSize,
|
|
7256
7521
|
smallFontSize: Math.max(8, fontSize - 1),
|
|
7257
7522
|
legendPosition,
|
|
@@ -7259,14 +7524,18 @@ function createTreemapLayout(context) {
|
|
|
7259
7524
|
gridWidth: Math.max(1, plot.width),
|
|
7260
7525
|
gridHeight: Math.max(1, plot.height - legendHeight),
|
|
7261
7526
|
cellGap,
|
|
7262
|
-
cellRadius: Math.max(0,
|
|
7527
|
+
cellRadius: Math.max(0, chunkCXL254BT_cjs.finite(chart.config?.barCornerRadius, cellGap)),
|
|
7528
|
+
headerHeight: Math.max(0, chunkCXL254BT_cjs.finite(chart.config?.headerHeight, 20)),
|
|
7529
|
+
labelSize: Math.max(6, chunkCXL254BT_cjs.finite(chart.config?.tileLabelSize, Math.max(8, fontSize - 1))),
|
|
7530
|
+
valueSize: Math.max(6, chunkCXL254BT_cjs.finite(chart.config?.tileValueSize, Math.max(8, fontSize - 1))),
|
|
7531
|
+
labelPadding: Math.max(0, chunkCXL254BT_cjs.finite(chart.config?.tileLabelPadding, 4))
|
|
7263
7532
|
};
|
|
7264
7533
|
}
|
|
7265
7534
|
function treemapLeafValue(leaf) {
|
|
7266
7535
|
return leaf.values[0] ?? 0;
|
|
7267
7536
|
}
|
|
7268
7537
|
function treemapLeafColor(leaf, layout) {
|
|
7269
|
-
return leaf.color ??
|
|
7538
|
+
return leaf.color ?? chunkCXL254BT_cjs.zoneColorAtValue(treemapLeafValue(leaf), layout.bands, layout.zones);
|
|
7270
7539
|
}
|
|
7271
7540
|
|
|
7272
7541
|
// src/renderScene/charts/renderers/treemap/legend.ts
|
|
@@ -7291,7 +7560,7 @@ function bandStops(layout) {
|
|
|
7291
7560
|
const zones = layout.zones.slice(0, bandCount);
|
|
7292
7561
|
return zones.map((zone, index) => ({
|
|
7293
7562
|
offset: bandRatio2(layout, layout.bands[index + 1] ?? layout.bands[layout.bands.length - 1]) * 100,
|
|
7294
|
-
color: zone.color ??
|
|
7563
|
+
color: zone.color ?? chunkCXL254BT_cjs.DEFAULT_ZONE_FILL
|
|
7295
7564
|
}));
|
|
7296
7565
|
}
|
|
7297
7566
|
function renderBottomLegend(context, layout) {
|
|
@@ -7300,7 +7569,7 @@ function renderBottomLegend(context, layout) {
|
|
|
7300
7569
|
const barWidth = layout.gridWidth;
|
|
7301
7570
|
const labelHeight = layout.fontSize + 2;
|
|
7302
7571
|
const barY = plot.y + layout.gridHeight + CHART_GAP;
|
|
7303
|
-
const barBounds =
|
|
7572
|
+
const barBounds = chunkCXL254BT_cjs.boxBounds({ x: barX, y: barY, width: barWidth, height: BAR_THICKNESS });
|
|
7304
7573
|
const stops = bandStops(layout);
|
|
7305
7574
|
const bar = {
|
|
7306
7575
|
type: "rect",
|
|
@@ -7314,7 +7583,7 @@ function renderBottomLegend(context, layout) {
|
|
|
7314
7583
|
rx: 3,
|
|
7315
7584
|
zoneGradient: { axis: "y", min: chart.axisY.min, max: chart.axisY.max },
|
|
7316
7585
|
style: {
|
|
7317
|
-
fill: stops.length ? { kind: "linear-gradient", angle: 0, stops } : { kind: "solid", color:
|
|
7586
|
+
fill: stops.length ? { kind: "linear-gradient", angle: 0, stops } : { kind: "solid", color: chunkCXL254BT_cjs.DEFAULT_ZONE_FILL },
|
|
7318
7587
|
stroke: { kind: "solid", color: chart.gridColor ?? "#e2e8f0" },
|
|
7319
7588
|
strokeWidth: 1
|
|
7320
7589
|
}
|
|
@@ -7337,12 +7606,12 @@ function renderBottomLegend(context, layout) {
|
|
|
7337
7606
|
const isLast = index === layout.bands.length - 1;
|
|
7338
7607
|
const align = isFirst ? "left" : isLast ? "right" : "center";
|
|
7339
7608
|
const frameX = isFirst ? x : isLast ? x - LABEL_SIZE : x - LABEL_SIZE / 2;
|
|
7340
|
-
const label =
|
|
7609
|
+
const label = chunkCXL254BT_cjs.chartText({
|
|
7341
7610
|
id: `chart-treemap-legend-tick-label-${chart.id}-${index}`,
|
|
7342
7611
|
order: nextOrder(),
|
|
7343
7612
|
bounds,
|
|
7344
7613
|
frame: { x: frameX, y: barY + BAR_THICKNESS + TICK_LENGTH + ROW_GAP2, width: LABEL_SIZE, height: labelHeight },
|
|
7345
|
-
text:
|
|
7614
|
+
text: chunkCXL254BT_cjs.formatFieldValue(value),
|
|
7346
7615
|
chart,
|
|
7347
7616
|
align
|
|
7348
7617
|
});
|
|
@@ -7356,7 +7625,7 @@ function renderSideLegend(context, layout) {
|
|
|
7356
7625
|
const barTop = plot.y;
|
|
7357
7626
|
const barHeight = layout.gridHeight;
|
|
7358
7627
|
const barX = side === "left" ? plot.x - CHART_GAP - BAR_THICKNESS : plot.x + layout.gridWidth + CHART_GAP;
|
|
7359
|
-
const barBounds =
|
|
7628
|
+
const barBounds = chunkCXL254BT_cjs.boxBounds({ x: barX, y: barTop, width: BAR_THICKNESS, height: barHeight });
|
|
7360
7629
|
const stops = bandStops(layout);
|
|
7361
7630
|
const bar = {
|
|
7362
7631
|
type: "rect",
|
|
@@ -7370,7 +7639,7 @@ function renderSideLegend(context, layout) {
|
|
|
7370
7639
|
rx: 3,
|
|
7371
7640
|
zoneGradient: { axis: "y", min: chart.axisY.min, max: chart.axisY.max },
|
|
7372
7641
|
style: {
|
|
7373
|
-
fill: stops.length ? { kind: "linear-gradient", angle: 270, stops } : { kind: "solid", color:
|
|
7642
|
+
fill: stops.length ? { kind: "linear-gradient", angle: 270, stops } : { kind: "solid", color: chunkCXL254BT_cjs.DEFAULT_ZONE_FILL },
|
|
7374
7643
|
stroke: { kind: "solid", color: chart.gridColor ?? "#e2e8f0" },
|
|
7375
7644
|
strokeWidth: 1
|
|
7376
7645
|
}
|
|
@@ -7392,12 +7661,12 @@ function renderSideLegend(context, layout) {
|
|
|
7392
7661
|
strokeWidth: 1
|
|
7393
7662
|
}
|
|
7394
7663
|
};
|
|
7395
|
-
const label =
|
|
7664
|
+
const label = chunkCXL254BT_cjs.chartText({
|
|
7396
7665
|
id: `chart-treemap-legend-tick-label-${chart.id}-${index}`,
|
|
7397
7666
|
order: nextOrder(),
|
|
7398
7667
|
bounds,
|
|
7399
7668
|
frame: { x: labelX2, y: y - layout.fontSize / 2, width: LABEL_SIZE, height: layout.fontSize + 2 },
|
|
7400
|
-
text:
|
|
7669
|
+
text: chunkCXL254BT_cjs.formatFieldValue(value),
|
|
7401
7670
|
chart,
|
|
7402
7671
|
align: side === "left" ? "right" : "left"
|
|
7403
7672
|
});
|
|
@@ -7407,7 +7676,6 @@ function renderSideLegend(context, layout) {
|
|
|
7407
7676
|
}
|
|
7408
7677
|
|
|
7409
7678
|
// src/renderScene/charts/renderers/treemap/tiles.ts
|
|
7410
|
-
var HEADER_HEIGHT = 20;
|
|
7411
7679
|
function renderTreemapTiles(context, layout) {
|
|
7412
7680
|
const { tiles, headers } = layoutTreemapTiles(context, layout);
|
|
7413
7681
|
const nodes = [];
|
|
@@ -7446,7 +7714,7 @@ function layoutTreemapTiles(context, layout) {
|
|
|
7446
7714
|
const tiles = [];
|
|
7447
7715
|
const headers = [];
|
|
7448
7716
|
groupRects.forEach((groupRect) => {
|
|
7449
|
-
const headerHeight = context.showLabels ? Math.min(
|
|
7717
|
+
const headerHeight = context.showLabels ? Math.min(layout.headerHeight, groupRect.height) : 0;
|
|
7450
7718
|
if (context.showLabels) {
|
|
7451
7719
|
headers.push({
|
|
7452
7720
|
key: groupRect.item.key,
|
|
@@ -7480,19 +7748,19 @@ function renderTreemapHeader(context, layout, header, index) {
|
|
|
7480
7748
|
x: plot.x + header.x,
|
|
7481
7749
|
y: plot.y + header.y,
|
|
7482
7750
|
width: header.width,
|
|
7483
|
-
height:
|
|
7751
|
+
height: layout.headerHeight,
|
|
7484
7752
|
rx: layout.cellRadius,
|
|
7485
7753
|
style: { fill: { kind: "solid", color: fill2 } }
|
|
7486
7754
|
};
|
|
7487
7755
|
const smallFontSize = Math.max(8, Math.max(9, chart.fontSize ?? 12) - 1);
|
|
7488
7756
|
const label = {
|
|
7489
|
-
...
|
|
7757
|
+
...chunkCXL254BT_cjs.chartText({
|
|
7490
7758
|
id: `chart-treemap-header-label-${chart.id}-${index}`,
|
|
7491
7759
|
order: nextOrder(),
|
|
7492
7760
|
bounds,
|
|
7493
7761
|
frame: {
|
|
7494
7762
|
x: plot.x + header.x,
|
|
7495
|
-
y: plot.y + header.y + (
|
|
7763
|
+
y: plot.y + header.y + (layout.headerHeight - smallFontSize) / 2,
|
|
7496
7764
|
width: header.width,
|
|
7497
7765
|
height: smallFontSize + 2
|
|
7498
7766
|
},
|
|
@@ -7501,7 +7769,7 @@ function renderTreemapHeader(context, layout, header, index) {
|
|
|
7501
7769
|
align: "center"
|
|
7502
7770
|
}),
|
|
7503
7771
|
fontSize: smallFontSize,
|
|
7504
|
-
color:
|
|
7772
|
+
color: chunkCXL254BT_cjs.contrastTextColor(fill2)
|
|
7505
7773
|
};
|
|
7506
7774
|
return [background, label];
|
|
7507
7775
|
}
|
|
@@ -7517,7 +7785,7 @@ function renderTile(context, layout, tile, nextTile) {
|
|
|
7517
7785
|
function createTileNode(context, layout, tile, color2, nextColor) {
|
|
7518
7786
|
const { chart, plot, bounds, diagnostics, nextOrder } = context;
|
|
7519
7787
|
const gap = layout.cellGap;
|
|
7520
|
-
const shadow =
|
|
7788
|
+
const shadow = chunkCXL254BT_cjs.resolveChartShadow(chart.shadowStyle);
|
|
7521
7789
|
const clipPath = shadow ? `M ${plot.x} ${plot.y} H ${plot.x + plot.width} V ${plot.y + plot.height} H ${plot.x} Z` : void 0;
|
|
7522
7790
|
const tileX = plot.x + tile.x + gap / 2;
|
|
7523
7791
|
const tileY = plot.y + tile.y + gap / 2;
|
|
@@ -7534,10 +7802,10 @@ function createTileNode(context, layout, tile, color2, nextColor) {
|
|
|
7534
7802
|
kind: "linear-gradient",
|
|
7535
7803
|
angle: 0,
|
|
7536
7804
|
stops: [
|
|
7537
|
-
{ offset: 0, color:
|
|
7538
|
-
{ offset: 100, color:
|
|
7805
|
+
{ offset: 0, color: chunkCXL254BT_cjs.representativeColor(color2, fallback) },
|
|
7806
|
+
{ offset: 100, color: chunkCXL254BT_cjs.representativeColor(nextColor, fallback) }
|
|
7539
7807
|
]
|
|
7540
|
-
} :
|
|
7808
|
+
} : chunkCXL254BT_cjs.paint(color2, diagnostics, chart.id);
|
|
7541
7809
|
return {
|
|
7542
7810
|
type: "rect",
|
|
7543
7811
|
id: `chart-treemap-tile-${chart.id}-${tile.item.leaf.id}`,
|
|
@@ -7550,8 +7818,8 @@ function createTileNode(context, layout, tile, color2, nextColor) {
|
|
|
7550
7818
|
rx: layout.cellRadius,
|
|
7551
7819
|
style: {
|
|
7552
7820
|
fill: fill2,
|
|
7553
|
-
stroke: { kind: "solid", color: chart.gridColor ?? "#e2e8f0" },
|
|
7554
|
-
strokeWidth:
|
|
7821
|
+
stroke: { kind: "solid", color: chart.config?.tileStrokeColor ?? chart.gridColor ?? "#e2e8f0" },
|
|
7822
|
+
strokeWidth: chunkCXL254BT_cjs.finite(chart.config?.tileStrokeWidth, chunkCXL254BT_cjs.finite(chart.gridWidth, 1)),
|
|
7555
7823
|
shadow,
|
|
7556
7824
|
clip: clipPath ? { type: "path", d: clipPath } : void 0
|
|
7557
7825
|
}
|
|
@@ -7561,15 +7829,17 @@ function createTileLabel(context, layout, tile, color2) {
|
|
|
7561
7829
|
const { chart, plot, bounds, nextOrder } = context;
|
|
7562
7830
|
const { leaf, value } = tile.item;
|
|
7563
7831
|
const gap = layout.cellGap;
|
|
7564
|
-
const
|
|
7565
|
-
const
|
|
7566
|
-
const
|
|
7567
|
-
const
|
|
7568
|
-
const
|
|
7569
|
-
const
|
|
7570
|
-
const lineHeight = layout.
|
|
7832
|
+
const pad = layout.labelPadding;
|
|
7833
|
+
const width = Math.max(1, tile.width - gap - pad * 2);
|
|
7834
|
+
const height = Math.max(1, tile.height - gap - pad * 1.5);
|
|
7835
|
+
const x = plot.x + tile.x + gap / 2 + pad;
|
|
7836
|
+
const y = plot.y + tile.y + gap / 2 + pad * 0.75;
|
|
7837
|
+
const textColor = chart.config?.tileTextColor ?? chunkCXL254BT_cjs.contrastTextColor(chunkCXL254BT_cjs.representativeColor(color2, "#ffffff"));
|
|
7838
|
+
const lineHeight = layout.labelSize * 1.2;
|
|
7839
|
+
const maxLines = Math.max(1, Math.floor(height / lineHeight));
|
|
7840
|
+
const labelLines = chunkCXL254BT_cjs.wrapText(leaf.label, width, layout.labelSize).slice(0, maxLines).map((line) => chunkCXL254BT_cjs.ellipsizeToWidth(line, width, layout.labelSize, true));
|
|
7571
7841
|
const label = {
|
|
7572
|
-
...
|
|
7842
|
+
...chunkCXL254BT_cjs.chartText({
|
|
7573
7843
|
id: `chart-treemap-label-${chart.id}-${leaf.id}`,
|
|
7574
7844
|
order: nextOrder(),
|
|
7575
7845
|
bounds,
|
|
@@ -7578,12 +7848,17 @@ function createTileLabel(context, layout, tile, color2) {
|
|
|
7578
7848
|
chart
|
|
7579
7849
|
}),
|
|
7580
7850
|
lines: labelLines,
|
|
7581
|
-
fontSize: layout.
|
|
7851
|
+
fontSize: layout.labelSize,
|
|
7582
7852
|
fontWeight: "bold",
|
|
7583
7853
|
color: textColor
|
|
7584
7854
|
};
|
|
7855
|
+
const valueText = String(value);
|
|
7856
|
+
const valueFits = labelLines.length * lineHeight + layout.valueSize * 1.2 <= height + 2 && chunkCXL254BT_cjs.estimateTextWidth(valueText, layout.valueSize, false) <= width;
|
|
7857
|
+
if (chart.config?.showTileValues === false || !valueFits) {
|
|
7858
|
+
return [label];
|
|
7859
|
+
}
|
|
7585
7860
|
const valueNode = {
|
|
7586
|
-
...
|
|
7861
|
+
...chunkCXL254BT_cjs.chartText({
|
|
7587
7862
|
id: `chart-treemap-value-${chart.id}-${leaf.id}`,
|
|
7588
7863
|
order: nextOrder(),
|
|
7589
7864
|
bounds,
|
|
@@ -7597,7 +7872,7 @@ function createTileLabel(context, layout, tile, color2) {
|
|
|
7597
7872
|
chart
|
|
7598
7873
|
}),
|
|
7599
7874
|
lines: [String(value)],
|
|
7600
|
-
fontSize: layout.
|
|
7875
|
+
fontSize: layout.valueSize,
|
|
7601
7876
|
color: textColor
|
|
7602
7877
|
};
|
|
7603
7878
|
return [label, valueNode];
|
|
@@ -7660,7 +7935,7 @@ function buildCartesianChart(foundation) {
|
|
|
7660
7935
|
|
|
7661
7936
|
// src/renderScene/charts/chartFrame.ts
|
|
7662
7937
|
function scaleDetail(chart, plot) {
|
|
7663
|
-
const horizontal =
|
|
7938
|
+
const horizontal = chunkCXL254BT_cjs.isHorizontalBar(chart);
|
|
7664
7939
|
const range = horizontal ? `${plot.x},${plot.width}` : `${plot.y},${plot.height}`;
|
|
7665
7940
|
return {
|
|
7666
7941
|
of: "chartScale",
|
|
@@ -7668,7 +7943,7 @@ function scaleDetail(chart, plot) {
|
|
|
7668
7943
|
};
|
|
7669
7944
|
}
|
|
7670
7945
|
function pieDetail(chart, plot) {
|
|
7671
|
-
const { outerRadius, innerRadius, cornerRadius } =
|
|
7946
|
+
const { outerRadius, innerRadius, cornerRadius } = chunkCXL254BT_cjs.resolvePieRadii(
|
|
7672
7947
|
plot.width,
|
|
7673
7948
|
plot.height,
|
|
7674
7949
|
chart.config?.innerRadius,
|
|
@@ -7681,8 +7956,8 @@ function pieDetail(chart, plot) {
|
|
|
7681
7956
|
}
|
|
7682
7957
|
function polarAreaDetail(chart, plot) {
|
|
7683
7958
|
const maxRadius = Math.max(1, Math.min(plot.width, plot.height) / 2 - 4);
|
|
7684
|
-
const innerRadius = Math.max(0, Math.min(
|
|
7685
|
-
const cornerRadius = Math.max(0,
|
|
7959
|
+
const innerRadius = Math.max(0, Math.min(chunkCXL254BT_cjs.finite(chart.config?.innerRadius, 0), maxRadius - 1));
|
|
7960
|
+
const cornerRadius = Math.max(0, chunkCXL254BT_cjs.finite(chart.config?.pieCornerRadius, 0));
|
|
7686
7961
|
return {
|
|
7687
7962
|
of: "pieGeometry",
|
|
7688
7963
|
pieGeometry: `${plot.x + plot.width / 2},${plot.y + plot.height / 2},${maxRadius},${innerRadius},${cornerRadius}`
|
|
@@ -7691,14 +7966,15 @@ function polarAreaDetail(chart, plot) {
|
|
|
7691
7966
|
function radarDetail(chart, plot) {
|
|
7692
7967
|
const configuredCount = (chart.config?.categories?.filter(Boolean) ?? []).length;
|
|
7693
7968
|
const dataCount = Math.max(0, ...chart.series.map((series) => series.values.length));
|
|
7694
|
-
const count =
|
|
7695
|
-
const radius =
|
|
7969
|
+
const count = chunkCXL254BT_cjs.radarCategoryCount(configuredCount, dataCount);
|
|
7970
|
+
const radius = chunkCXL254BT_cjs.radarRadius(plot.width, plot.height, chunkCXL254BT_cjs.finite(chart.fontSize, 12), chart.showAxisLabels !== false);
|
|
7696
7971
|
const centerX = plot.x + plot.width / 2;
|
|
7697
7972
|
const centerY = plot.y + plot.height / 2;
|
|
7698
7973
|
const curved = chart.chartType === "radial" ? 1 : 0;
|
|
7974
|
+
const tension = chart.config?.radarTension;
|
|
7699
7975
|
return {
|
|
7700
7976
|
of: "radarGeometry",
|
|
7701
|
-
radarGeometry: `${centerX},${centerY},${radius},${chart.axisY.min},${chart.axisY.max},${count},${curved}`
|
|
7977
|
+
radarGeometry: `${centerX},${centerY},${radius},${chart.axisY.min},${chart.axisY.max},${count},${curved}${tension === void 0 ? "" : `,${tension}`}`
|
|
7702
7978
|
};
|
|
7703
7979
|
}
|
|
7704
7980
|
function frameDetail(chart, plot) {
|
|
@@ -7725,9 +8001,9 @@ function buildChartFrame(chart, bounds, plot, order) {
|
|
|
7725
8001
|
height: chart.height,
|
|
7726
8002
|
rx: chart.cornerRadius ?? 12,
|
|
7727
8003
|
style: {
|
|
7728
|
-
fill:
|
|
8004
|
+
fill: chunkCXL254BT_cjs.paint(chart.fillColor ?? "#ffffff", [], chart.id),
|
|
7729
8005
|
stroke: { kind: "solid", color: chart.strokeColor ?? "#475569" },
|
|
7730
|
-
strokeWidth:
|
|
8006
|
+
strokeWidth: chunkCXL254BT_cjs.finite(chart.strokeWidth, 1)
|
|
7731
8007
|
}
|
|
7732
8008
|
};
|
|
7733
8009
|
const detail = frameDetail(chart, plot);
|
|
@@ -7787,7 +8063,7 @@ function buildChartTitle(chart, bounds, plot, renderOrder) {
|
|
|
7787
8063
|
}
|
|
7788
8064
|
return [
|
|
7789
8065
|
{
|
|
7790
|
-
...
|
|
8066
|
+
...chunkCXL254BT_cjs.chartText({
|
|
7791
8067
|
id: `chart-title-${chart.id}`,
|
|
7792
8068
|
order: renderOrder.next(),
|
|
7793
8069
|
bounds,
|
|
@@ -7797,8 +8073,8 @@ function buildChartTitle(chart, bounds, plot, renderOrder) {
|
|
|
7797
8073
|
}),
|
|
7798
8074
|
...chart.titleColor ? { color: chart.titleColor } : {},
|
|
7799
8075
|
fontWeight: chart.titleWeight ?? "bold",
|
|
7800
|
-
fontSize:
|
|
7801
|
-
prop:
|
|
8076
|
+
fontSize: chunkCXL254BT_cjs.finite(chart.titleSize, Math.max(10, chunkCXL254BT_cjs.finite(chart.fontSize, 12)) + 2),
|
|
8077
|
+
prop: chunkCXL254BT_cjs.CHART_TITLE_PROP
|
|
7802
8078
|
}
|
|
7803
8079
|
];
|
|
7804
8080
|
}
|
|
@@ -7851,14 +8127,14 @@ function buildChart(chart, index, diagnostics) {
|
|
|
7851
8127
|
// src/renderScene/charts/artifacts.ts
|
|
7852
8128
|
function buildCharts(charts, diagnostics) {
|
|
7853
8129
|
return charts.flatMap(
|
|
7854
|
-
(chart, index) =>
|
|
8130
|
+
(chart, index) => chunkCXL254BT_cjs.tag(buildChart(chart, index, diagnostics), "chart", chart.id, chart.chartType, chart.title ?? "Chart")
|
|
7855
8131
|
);
|
|
7856
8132
|
}
|
|
7857
8133
|
|
|
7858
8134
|
// src/renderScene/scene/build.ts
|
|
7859
8135
|
function sceneBounds(nodes) {
|
|
7860
8136
|
if (!nodes.length) {
|
|
7861
|
-
return
|
|
8137
|
+
return chunkCXL254BT_cjs.EMPTY_BOUNDS;
|
|
7862
8138
|
}
|
|
7863
8139
|
return {
|
|
7864
8140
|
minX: Math.min(...nodes.map((n) => n.bounds.minX)),
|
|
@@ -7872,8 +8148,8 @@ function stackingOf(input) {
|
|
|
7872
8148
|
const add = (role, objects, legacyBase) => {
|
|
7873
8149
|
objects.forEach((object, index) => {
|
|
7874
8150
|
stacking.set(`${role}:${object.id}`, {
|
|
7875
|
-
rank:
|
|
7876
|
-
sequence:
|
|
8151
|
+
rank: chunkCXL254BT_cjs.stackRank(object),
|
|
8152
|
+
sequence: chunkCXL254BT_cjs.stackSequence(object, legacyBase + index)
|
|
7877
8153
|
});
|
|
7878
8154
|
});
|
|
7879
8155
|
};
|
|
@@ -8340,31 +8616,31 @@ function chartSeriesAttrs(detail) {
|
|
|
8340
8616
|
];
|
|
8341
8617
|
}
|
|
8342
8618
|
function frameBoundaryAttrs(detail) {
|
|
8343
|
-
return [`${
|
|
8619
|
+
return [`${chunkCXL254BT_cjs.CORNER_RADIUS_ATTR}="${num(detail.cornerRadius)}"`, `${chunkCXL254BT_cjs.SQUARE_CORNER_ATTR}="${detail.squareCorner}"`];
|
|
8344
8620
|
}
|
|
8345
8621
|
function declaredBoundsAttr(bounds) {
|
|
8346
|
-
return `${
|
|
8622
|
+
return `${chunkCXL254BT_cjs.SYMBOL_BOUNDS_ATTR}="${num(bounds.x)},${num(bounds.y)},${num(bounds.width)},${num(bounds.height)}"`;
|
|
8347
8623
|
}
|
|
8348
8624
|
function symbolGeometryAttrs(detail) {
|
|
8349
8625
|
return [
|
|
8350
|
-
`${
|
|
8351
|
-
`${
|
|
8626
|
+
`${chunkCXL254BT_cjs.SYMBOL_POINTS_ATTR}="${xml(JSON.stringify(detail.points))}"`,
|
|
8627
|
+
`${chunkCXL254BT_cjs.SYMBOL_TENSION_ATTR}="${num(detail.tension)}"`,
|
|
8352
8628
|
declaredBoundsAttr(detail.declaredBounds)
|
|
8353
8629
|
];
|
|
8354
8630
|
}
|
|
8355
8631
|
function pathGeometryAttrs(detail) {
|
|
8356
8632
|
return [
|
|
8357
|
-
`${
|
|
8358
|
-
`${
|
|
8359
|
-
`${
|
|
8633
|
+
`${chunkCXL254BT_cjs.PATH_POINTS_ATTR}="${xml(JSON.stringify(detail.points))}"`,
|
|
8634
|
+
`${chunkCXL254BT_cjs.PATH_TENSION_ATTR}="${num(detail.tension)}"`,
|
|
8635
|
+
`${chunkCXL254BT_cjs.PATH_CLOSED_ATTR}="${detail.closed}"`
|
|
8360
8636
|
];
|
|
8361
8637
|
}
|
|
8362
8638
|
function isometricGeometryAttrs(detail) {
|
|
8363
8639
|
return [
|
|
8364
|
-
`${
|
|
8365
|
-
`${
|
|
8640
|
+
`${chunkCXL254BT_cjs.ISOMETRIC_SIZE_ATTR}="${num(detail.width)},${num(detail.height)},${num(detail.depth)}"`,
|
|
8641
|
+
`${chunkCXL254BT_cjs.CORNER_RADIUS_ATTR}="${num(detail.cornerRadius)}"`,
|
|
8366
8642
|
declaredBoundsAttr(detail.bounds),
|
|
8367
|
-
`${
|
|
8643
|
+
`${chunkCXL254BT_cjs.ISOMETRIC_LABEL_OFFSET_ATTR}="${num(detail.labelOffsetX)},${num(detail.labelOffsetY)}"`
|
|
8368
8644
|
];
|
|
8369
8645
|
}
|
|
8370
8646
|
function linkDetailAttrs(detail) {
|
|
@@ -8460,7 +8736,7 @@ function shaderSurfaceSvg(node, defs) {
|
|
|
8460
8736
|
const rotation = transform(node.rotation, { x: node.x + node.width / 2, y: node.y + node.height / 2 });
|
|
8461
8737
|
const parameters = xml(JSON.stringify(node.shader.parameters));
|
|
8462
8738
|
const fillColor = node.fillColor ? ` data-sf-shader-fill="${xml(node.fillColor)}"` : "";
|
|
8463
|
-
return `<foreignObject id="${defs.elementId(node.id)}"${contractAttrs(node)} data-sf-shader="${xml(node.shader.program)}" data-sf-shader-name="${xml(node.shader.name)}" data-sf-shader-params="${parameters}" data-sf-shader-mask="${node.mask}"${fillColor} x="${num(node.x)}" y="${num(node.y)}" width="${num(node.width)}" height="${num(node.height)}"${rotation} pointer-events="${node.shader.program === "ruler" ? "all" : "none"}"><canvas xmlns="http://www.w3.org/1999/xhtml" data-sf-shader-canvas="true" style="display:block;width:100%;height:100%;pointer-events:none"></canvas></foreignObject>`;
|
|
8739
|
+
return `<foreignObject id="${defs.elementId(node.id)}"${contractAttrs(node)} data-sf-shader="${xml(node.shader.program)}" data-sf-shader-name="${xml(node.shader.name)}" data-sf-shader-params="${parameters}" data-sf-shader-mask="${node.mask}"${fillColor} x="${num(node.x)}" y="${num(node.y)}" width="${num(node.width)}" height="${num(node.height)}"${rotation} pointer-events="${node.shader.program === "ruler" || node.identity?.role === "widget" ? "all" : "none"}"><canvas xmlns="http://www.w3.org/1999/xhtml" data-sf-shader-canvas="true" style="display:block;width:100%;height:100%;pointer-events:none"></canvas></foreignObject>`;
|
|
8464
8740
|
}
|
|
8465
8741
|
function rollingDigitSvg(character, node) {
|
|
8466
8742
|
const style = node.widgetStyle;
|
|
@@ -8471,7 +8747,7 @@ function rollingDigitSvg(character, node) {
|
|
|
8471
8747
|
}
|
|
8472
8748
|
function rollingNumberSvg(node, defs) {
|
|
8473
8749
|
const rotation = transform(node.rotation, { x: node.x + node.width / 2, y: node.y + node.height / 2 });
|
|
8474
|
-
const fontSize = Math.max(1, Math.min(node.width, node.height) * 0.28);
|
|
8750
|
+
const fontSize = node.widgetStyle.fontSize > 0 ? node.widgetStyle.fontSize : Math.max(1, Math.min(node.width, node.height) * 0.28);
|
|
8475
8751
|
const label = node.label ? `<span xmlns="http://www.w3.org/1999/xhtml" style="margin-bottom:.14em;color:${xml(node.widgetStyle.labelColor)};font-size:.16em;font-weight:600;letter-spacing:.24em;line-height:1">${xml(node.label)}</span>` : "";
|
|
8476
8752
|
const digits = [...node.value].map((character) => rollingDigitSvg(character, node)).join("");
|
|
8477
8753
|
const widgetStyle = xml(JSON.stringify(node.widgetStyle));
|
|
@@ -8510,7 +8786,7 @@ function renderSvgDocument(scene, options = {}) {
|
|
|
8510
8786
|
const nodes = options.linkHitAreas ? withLinkHitAreas(scene.nodes) : scene.nodes;
|
|
8511
8787
|
const body = nodes.map((node) => nodeSvg(node, defs)).join("\n ");
|
|
8512
8788
|
const declaration = options.includeXmlDeclaration === false ? "" : '<?xml version="1.0" encoding="UTF-8"?>\n';
|
|
8513
|
-
const svg = `${declaration}<svg xmlns="http://www.w3.org/2000/svg" width="${num(width)}px" height="${num(height)}px" viewBox="${viewBox}" role="img" data-sf-contract="${
|
|
8789
|
+
const svg = `${declaration}<svg xmlns="http://www.w3.org/2000/svg" width="${num(width)}px" height="${num(height)}px" viewBox="${viewBox}" role="img" data-sf-contract="${chunkCXL254BT_cjs.DOM_CONTRACT_VERSION}">
|
|
8514
8790
|
<defs>${defs.entries.join("")}</defs>
|
|
8515
8791
|
${body}
|
|
8516
8792
|
</svg>`;
|
|
@@ -8564,5 +8840,5 @@ exports.formatRollingNumber = formatRollingNumber;
|
|
|
8564
8840
|
exports.render = render;
|
|
8565
8841
|
exports.renderCanvas = renderCanvas;
|
|
8566
8842
|
exports.sflToRenderInput = sflToRenderInput;
|
|
8567
|
-
//# sourceMappingURL=chunk-
|
|
8568
|
-
//# sourceMappingURL=chunk-
|
|
8843
|
+
//# sourceMappingURL=chunk-DDCTNLLD.cjs.map
|
|
8844
|
+
//# sourceMappingURL=chunk-DDCTNLLD.cjs.map
|