cats-charts 0.0.91 → 0.0.92
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/fesm2022/cats-charts.mjs +42 -14
- package/fesm2022/cats-charts.mjs.map +1 -1
- package/index.d.ts +1 -1
- package/package.json +1 -1
package/fesm2022/cats-charts.mjs
CHANGED
|
@@ -1447,6 +1447,19 @@ class Charts {
|
|
|
1447
1447
|
return Math.max(...levelMap.values());
|
|
1448
1448
|
}
|
|
1449
1449
|
sankeyTooltipFormatter(params, config) {
|
|
1450
|
+
const showPercentage = config.styling?.labels?.showPercentage === true;
|
|
1451
|
+
const targetNames = new Set((config.links ?? []).map((link) => link.target));
|
|
1452
|
+
const sourceTotal = (config.links ?? [])
|
|
1453
|
+
.filter((link) => !targetNames.has(link.source))
|
|
1454
|
+
.reduce((sum, link) => sum + Number(link.value || 0), 0);
|
|
1455
|
+
const totalValue = sourceTotal || (config.links ?? []).reduce((sum, link) => sum + Number(link.value || 0), 0);
|
|
1456
|
+
const percentageRow = (item) => {
|
|
1457
|
+
const value = Number(item);
|
|
1458
|
+
if (!showPercentage || !Number.isFinite(value))
|
|
1459
|
+
return '';
|
|
1460
|
+
const percentage = totalValue ? ((value / totalValue) * 100).toFixed(1) : '0.0';
|
|
1461
|
+
return `${percentage}%`;
|
|
1462
|
+
};
|
|
1450
1463
|
if (params.dataType === 'edge') {
|
|
1451
1464
|
const { source, target, value, tooltip } = params.data;
|
|
1452
1465
|
const escape = (item) => String(item ?? '').replace(/[&<>"']/g, (char) => ({
|
|
@@ -1481,7 +1494,7 @@ class Charts {
|
|
|
1481
1494
|
/>
|
|
1482
1495
|
<span>${escape(target)}</span>
|
|
1483
1496
|
</div>
|
|
1484
|
-
<div style="font-size:12px;font-weight:600"
|
|
1497
|
+
<div style="font-size:12px;font-weight:600">${formatKey(config?.activeMetric ?? '') || 'Value'}: <span style="font-size:12px;font-weight:400">${showPercentage ? '(' : ''}${escape(typeof value === 'number' ? this.formatTooltipValue(value, config.tooltipCompactValue) : value)}${showPercentage ? ')' : ''} ${showPercentage ? percentageRow(value) : ''}</span></div>
|
|
1485
1498
|
${tooltipRows}
|
|
1486
1499
|
</div>
|
|
1487
1500
|
`;
|
|
@@ -1493,7 +1506,8 @@ class Charts {
|
|
|
1493
1506
|
border-radius: 8px;
|
|
1494
1507
|
box-shadow: 0 4px 10px rgba(0,0,0,0.15);
|
|
1495
1508
|
">
|
|
1496
|
-
${params.name}: <b>${typeof params.value === 'number' ? this.formatTooltipValue(params.value, config.tooltipCompactValue) : params.value}</b>
|
|
1509
|
+
${params.name}: <b>${showPercentage ? '(' : ''}${typeof params.value === 'number' ? this.formatTooltipValue(params.value, config.tooltipCompactValue) : params.value}${showPercentage ? ')' : ''}</b>
|
|
1510
|
+
${percentageRow(params.value)}
|
|
1497
1511
|
</div>
|
|
1498
1512
|
`;
|
|
1499
1513
|
}
|
|
@@ -4042,14 +4056,14 @@ class SankeyChart {
|
|
|
4042
4056
|
bottom: legendEnabled && legendConfig?.position === 'bottom' ? 32 : 16,
|
|
4043
4057
|
...this.config.seriesOption,
|
|
4044
4058
|
type: 'sankey',
|
|
4045
|
-
...(styling?.node?.thickness ?? this.config.seriesOption?.nodeWidth
|
|
4059
|
+
...((styling?.node?.thickness ?? this.config.seriesOption?.nodeWidth)
|
|
4046
4060
|
? {
|
|
4047
|
-
nodeWidth: this.clamp(styling?.node?.thickness ?? this.config.seriesOption?.nodeWidth, 1, 50)
|
|
4061
|
+
nodeWidth: this.clamp(styling?.node?.thickness ?? this.config.seriesOption?.nodeWidth, 1, 50),
|
|
4048
4062
|
}
|
|
4049
4063
|
: {}),
|
|
4050
|
-
...(styling?.node?.padding ?? this.config.seriesOption?.nodeGap
|
|
4064
|
+
...((styling?.node?.padding ?? this.config.seriesOption?.nodeGap)
|
|
4051
4065
|
? {
|
|
4052
|
-
nodeGap: this.clamp(styling?.node?.padding ?? this.config.seriesOption?.nodeGap, 0, 100)
|
|
4066
|
+
nodeGap: this.clamp(styling?.node?.padding ?? this.config.seriesOption?.nodeGap, 0, 100),
|
|
4053
4067
|
}
|
|
4054
4068
|
: {}),
|
|
4055
4069
|
data: visibleNodes.map((n, index) => {
|
|
@@ -4105,8 +4119,16 @@ class SankeyChart {
|
|
|
4105
4119
|
color: fontColor,
|
|
4106
4120
|
fontFamily: labelTypography?.reset ? undefined : labelTypography?.fontFamily,
|
|
4107
4121
|
fontSize: this.clamp(labelTypography?.reset ? undefined : labelTypography?.fontSize, 8, 40),
|
|
4108
|
-
fontWeight: labelTypography?.reset
|
|
4109
|
-
|
|
4122
|
+
fontWeight: labelTypography?.reset
|
|
4123
|
+
? undefined
|
|
4124
|
+
: labelTypography?.bold
|
|
4125
|
+
? 'bold'
|
|
4126
|
+
: undefined,
|
|
4127
|
+
fontStyle: labelTypography?.reset
|
|
4128
|
+
? undefined
|
|
4129
|
+
: labelTypography?.italic
|
|
4130
|
+
? 'italic'
|
|
4131
|
+
: undefined,
|
|
4110
4132
|
textDecoration: labelTypography?.reset
|
|
4111
4133
|
? undefined
|
|
4112
4134
|
: labelTypography?.underline
|
|
@@ -4287,8 +4309,8 @@ class SankeyChart {
|
|
|
4287
4309
|
? styling.individualColors?.source
|
|
4288
4310
|
: meta.role === 'destination'
|
|
4289
4311
|
? styling.individualColors?.destination
|
|
4290
|
-
: styling.individualColors?.middle?.[meta.depth] ??
|
|
4291
|
-
styling.individualColors?.middle?.[String(meta.depth)];
|
|
4312
|
+
: (styling.individualColors?.middle?.[meta.depth] ??
|
|
4313
|
+
styling.individualColors?.middle?.[String(meta.depth)]);
|
|
4292
4314
|
if (colorStop?.color) {
|
|
4293
4315
|
return this.withOpacity(colorStop.color, this.percentToRatio(colorStop.opacity, 100));
|
|
4294
4316
|
}
|
|
@@ -4302,9 +4324,13 @@ class SankeyChart {
|
|
|
4302
4324
|
return {
|
|
4303
4325
|
itemStyle: {
|
|
4304
4326
|
...(nodeStyle.color
|
|
4305
|
-
? {
|
|
4327
|
+
? {
|
|
4328
|
+
color: this.withOpacity(nodeStyle.color, this.percentToRatio(nodeStyle.opacity, 100)),
|
|
4329
|
+
}
|
|
4330
|
+
: {}),
|
|
4331
|
+
...(nodeStyle.opacity !== undefined
|
|
4332
|
+
? { opacity: this.percentToRatio(nodeStyle.opacity, 100) }
|
|
4306
4333
|
: {}),
|
|
4307
|
-
...(nodeStyle.opacity !== undefined ? { opacity: this.percentToRatio(nodeStyle.opacity, 100) } : {}),
|
|
4308
4334
|
...(nodeStyle.itemStyle || {}),
|
|
4309
4335
|
},
|
|
4310
4336
|
label: nodeStyle.label,
|
|
@@ -4348,14 +4374,16 @@ class SankeyChart {
|
|
|
4348
4374
|
const text = this.applyCase(name, labels?.typography?.reset ? 'none' : labels?.typography?.case);
|
|
4349
4375
|
const stats = [];
|
|
4350
4376
|
if (labels?.showNumbers)
|
|
4351
|
-
stats.push(String(meta?.value ?? 0));
|
|
4377
|
+
stats.push(String(`${labels?.showPercentage ? `(${meta?.value ?? 0})` : (meta?.value ?? 0)}`));
|
|
4352
4378
|
if (labels?.showPercentage) {
|
|
4353
4379
|
const percentage = totalValue ? (((meta?.value ?? 0) / totalValue) * 100).toFixed(1) : '0.0';
|
|
4354
4380
|
stats.push(`${percentage}%`);
|
|
4355
4381
|
}
|
|
4356
4382
|
if (!stats.length)
|
|
4357
4383
|
return text;
|
|
4358
|
-
return labels?.splitLabelsAndStats
|
|
4384
|
+
return labels?.splitLabelsAndStats
|
|
4385
|
+
? `${text}\n${stats.join(' ')}`
|
|
4386
|
+
: `${text} ${stats.join(' ')}`;
|
|
4359
4387
|
}
|
|
4360
4388
|
resolveLabelPosition() {
|
|
4361
4389
|
const alignment = this.config.styling?.labels?.alignment;
|