@ktnpm_devops/react-component 0.14.0 → 0.15.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/dist/charts/GroupedBarChartCard/GroupedBarChartCard.d.ts +7 -0
- package/dist/charts/GroupedBarChartCard/GroupedBarChartCard.d.ts.map +1 -0
- package/dist/charts/GroupedBarChartCard/GroupedBarChartCard.types.d.ts +38 -0
- package/dist/charts/GroupedBarChartCard/GroupedBarChartCard.types.d.ts.map +1 -0
- package/dist/charts/GroupedBarChartCard/buildGroupedBarOption.d.ts +69 -0
- package/dist/charts/GroupedBarChartCard/buildGroupedBarOption.d.ts.map +1 -0
- package/dist/charts/GroupedBarChartCard/buildGroupedBarOption.test.d.ts +2 -0
- package/dist/charts/GroupedBarChartCard/buildGroupedBarOption.test.d.ts.map +1 -0
- package/dist/charts/GroupedBarChartCard/defaultLabels.d.ts +5 -0
- package/dist/charts/GroupedBarChartCard/defaultLabels.d.ts.map +1 -0
- package/dist/charts/GroupedBarChartCard/index.d.ts +3 -0
- package/dist/charts/GroupedBarChartCard/index.d.ts.map +1 -0
- package/dist/charts/GroupedBarChartCard/pivotGroupedBars.d.ts +22 -0
- package/dist/charts/GroupedBarChartCard/pivotGroupedBars.d.ts.map +1 -0
- package/dist/charts/GroupedBarChartCard/pivotGroupedBars.test.d.ts +2 -0
- package/dist/charts/GroupedBarChartCard/pivotGroupedBars.test.d.ts.map +1 -0
- package/dist/constants.d.ts +28 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/index.cjs +29 -27
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -27
- package/dist/index.js.map +1 -1
- package/dist/index10.cjs +2 -2
- package/dist/index10.js +2 -2
- package/dist/index100.cjs +8 -50
- package/dist/index100.cjs.map +1 -1
- package/dist/index100.js +9 -51
- package/dist/index100.js.map +1 -1
- package/dist/index101.cjs +2 -17
- package/dist/index101.cjs.map +1 -1
- package/dist/index101.js +3 -18
- package/dist/index101.js.map +1 -1
- package/dist/index102.cjs +2 -50
- package/dist/index102.cjs.map +1 -1
- package/dist/index102.js +3 -51
- package/dist/index102.js.map +1 -1
- package/dist/index103.cjs +64 -13
- package/dist/index103.cjs.map +1 -1
- package/dist/index103.js +65 -14
- package/dist/index103.js.map +1 -1
- package/dist/index104.cjs +19 -4
- package/dist/index104.cjs.map +1 -1
- package/dist/index104.js +19 -4
- package/dist/index104.js.map +1 -1
- package/dist/index105.cjs +16 -10
- package/dist/index105.cjs.map +1 -1
- package/dist/index105.js +17 -11
- package/dist/index105.js.map +1 -1
- package/dist/index106.cjs +134 -34
- package/dist/index106.cjs.map +1 -1
- package/dist/index106.js +133 -33
- package/dist/index106.js.map +1 -1
- package/dist/index107.cjs +38 -50
- package/dist/index107.cjs.map +1 -1
- package/dist/index107.js +38 -50
- package/dist/index107.js.map +1 -1
- package/dist/index108.cjs +25 -28
- package/dist/index108.cjs.map +1 -1
- package/dist/index108.js +25 -28
- package/dist/index108.js.map +1 -1
- package/dist/index109.cjs +34 -19
- package/dist/index109.cjs.map +1 -1
- package/dist/index109.js +35 -20
- package/dist/index109.js.map +1 -1
- package/dist/index11.cjs +2 -2
- package/dist/index11.js +2 -2
- package/dist/index110.cjs +52 -16
- package/dist/index110.cjs.map +1 -1
- package/dist/index110.js +52 -16
- package/dist/index110.js.map +1 -1
- package/dist/index111.cjs +15 -6
- package/dist/index111.cjs.map +1 -1
- package/dist/index111.js +16 -7
- package/dist/index111.js.map +1 -1
- package/dist/index112.cjs +2 -17
- package/dist/index112.cjs.map +1 -1
- package/dist/index112.js +3 -18
- package/dist/index112.js.map +1 -1
- package/dist/index113.cjs +18 -33
- package/dist/index113.cjs.map +1 -1
- package/dist/index113.js +19 -34
- package/dist/index113.js.map +1 -1
- package/dist/index114.cjs +40 -116
- package/dist/index114.cjs.map +1 -1
- package/dist/index114.js +39 -115
- package/dist/index114.js.map +1 -1
- package/dist/index115.cjs +39 -42
- package/dist/index115.cjs.map +1 -1
- package/dist/index115.js +38 -41
- package/dist/index115.js.map +1 -1
- package/dist/index116.cjs +92 -30
- package/dist/index116.cjs.map +1 -1
- package/dist/index116.js +91 -29
- package/dist/index116.js.map +1 -1
- package/dist/index117.cjs +40 -1164
- package/dist/index117.cjs.map +1 -1
- package/dist/index117.js +38 -1163
- package/dist/index117.js.map +1 -1
- package/dist/index118.cjs +102 -1562
- package/dist/index118.cjs.map +1 -1
- package/dist/index118.js +101 -1562
- package/dist/index118.js.map +1 -1
- package/dist/index119.cjs +45 -0
- package/dist/index119.cjs.map +1 -0
- package/dist/index119.js +45 -0
- package/dist/index119.js.map +1 -0
- package/dist/index12.cjs +2 -2
- package/dist/index12.js +2 -2
- package/dist/index120.cjs +87 -0
- package/dist/index120.cjs.map +1 -0
- package/dist/index120.js +87 -0
- package/dist/index120.js.map +1 -0
- package/dist/index121.cjs +27 -0
- package/dist/index121.cjs.map +1 -0
- package/dist/index121.js +27 -0
- package/dist/index121.js.map +1 -0
- package/dist/index122.cjs +1166 -0
- package/dist/index122.cjs.map +1 -0
- package/dist/index122.js +1167 -0
- package/dist/index122.js.map +1 -0
- package/dist/index123.cjs +1578 -0
- package/dist/index123.cjs.map +1 -0
- package/dist/index123.js +1579 -0
- package/dist/index123.js.map +1 -0
- package/dist/index13.cjs +2 -2
- package/dist/index13.js +2 -2
- package/dist/index14.cjs +2 -2
- package/dist/index14.js +2 -2
- package/dist/index15.cjs +2 -2
- package/dist/index15.js +2 -2
- package/dist/index16.cjs +3 -3
- package/dist/index16.js +3 -3
- package/dist/index17.cjs +2 -2
- package/dist/index17.js +2 -2
- package/dist/index18.cjs +2 -2
- package/dist/index18.js +2 -2
- package/dist/index19.cjs +2 -2
- package/dist/index19.js +2 -2
- package/dist/index20.cjs +2 -2
- package/dist/index20.js +2 -2
- package/dist/index21.cjs +2 -2
- package/dist/index21.js +2 -2
- package/dist/index22.cjs +3 -3
- package/dist/index22.js +3 -3
- package/dist/index23.cjs +3 -3
- package/dist/index23.js +3 -3
- package/dist/index24.cjs +3 -3
- package/dist/index24.js +3 -3
- package/dist/index25.cjs +2 -2
- package/dist/index25.js +2 -2
- package/dist/index26.cjs +2 -2
- package/dist/index26.js +2 -2
- package/dist/index27.cjs +2 -2
- package/dist/index27.js +2 -2
- package/dist/index28.cjs +2 -2
- package/dist/index28.js +2 -2
- package/dist/index29.cjs +3 -3
- package/dist/index29.js +3 -3
- package/dist/index30.cjs +8 -8
- package/dist/index30.js +8 -8
- package/dist/index31.cjs +84 -76
- package/dist/index31.cjs.map +1 -1
- package/dist/index31.js +86 -78
- package/dist/index31.js.map +1 -1
- package/dist/index32.cjs +75 -6
- package/dist/index32.cjs.map +1 -1
- package/dist/index32.js +76 -7
- package/dist/index32.js.map +1 -1
- package/dist/index33.cjs +7 -130
- package/dist/index33.cjs.map +1 -1
- package/dist/index33.js +9 -132
- package/dist/index33.js.map +1 -1
- package/dist/index34.cjs +127 -52
- package/dist/index34.cjs.map +1 -1
- package/dist/index34.js +129 -54
- package/dist/index34.js.map +1 -1
- package/dist/index35.cjs +49 -13
- package/dist/index35.cjs.map +1 -1
- package/dist/index35.js +51 -15
- package/dist/index35.js.map +1 -1
- package/dist/index36.cjs +20 -38
- package/dist/index36.cjs.map +1 -1
- package/dist/index36.js +21 -39
- package/dist/index36.js.map +1 -1
- package/dist/index37.cjs +36 -224
- package/dist/index37.cjs.map +1 -1
- package/dist/index37.js +37 -225
- package/dist/index37.js.map +1 -1
- package/dist/index38.cjs +220 -28
- package/dist/index38.cjs.map +1 -1
- package/dist/index38.js +222 -30
- package/dist/index38.js.map +1 -1
- package/dist/index39.cjs +30 -106
- package/dist/index39.cjs.map +1 -1
- package/dist/index39.js +31 -107
- package/dist/index39.js.map +1 -1
- package/dist/index40.cjs +100 -58
- package/dist/index40.cjs.map +1 -1
- package/dist/index40.js +101 -59
- package/dist/index40.js.map +1 -1
- package/dist/index41.cjs +66 -76
- package/dist/index41.cjs.map +1 -1
- package/dist/index41.js +67 -77
- package/dist/index41.js.map +1 -1
- package/dist/index42.cjs +76 -57
- package/dist/index42.cjs.map +1 -1
- package/dist/index42.js +78 -59
- package/dist/index42.js.map +1 -1
- package/dist/index43.cjs +56 -150
- package/dist/index43.cjs.map +1 -1
- package/dist/index43.js +58 -152
- package/dist/index43.js.map +1 -1
- package/dist/index44.cjs +128 -73
- package/dist/index44.cjs.map +1 -1
- package/dist/index44.js +123 -68
- package/dist/index44.js.map +1 -1
- package/dist/index45.cjs +94 -68
- package/dist/index45.cjs.map +1 -1
- package/dist/index45.js +96 -70
- package/dist/index45.js.map +1 -1
- package/dist/index46.cjs +71 -7
- package/dist/index46.cjs.map +1 -1
- package/dist/index46.js +72 -8
- package/dist/index46.js.map +1 -1
- package/dist/index47.cjs +8 -17
- package/dist/index47.cjs.map +1 -1
- package/dist/index47.js +9 -18
- package/dist/index47.js.map +1 -1
- package/dist/index48.cjs +15 -75
- package/dist/index48.cjs.map +1 -1
- package/dist/index48.js +16 -76
- package/dist/index48.js.map +1 -1
- package/dist/index49.cjs +68 -134
- package/dist/index49.cjs.map +1 -1
- package/dist/index49.js +70 -136
- package/dist/index49.js.map +1 -1
- package/dist/index50.cjs +137 -58
- package/dist/index50.cjs.map +1 -1
- package/dist/index50.js +138 -59
- package/dist/index50.js.map +1 -1
- package/dist/index51.cjs +61 -102
- package/dist/index51.cjs.map +1 -1
- package/dist/index51.js +62 -103
- package/dist/index51.js.map +1 -1
- package/dist/index52.cjs +102 -44
- package/dist/index52.cjs.map +1 -1
- package/dist/index52.js +103 -45
- package/dist/index52.js.map +1 -1
- package/dist/index53.cjs +47 -6
- package/dist/index53.cjs.map +1 -1
- package/dist/index53.js +48 -7
- package/dist/index53.js.map +1 -1
- package/dist/index54.cjs +6 -147
- package/dist/index54.cjs.map +1 -1
- package/dist/index54.js +7 -148
- package/dist/index54.js.map +1 -1
- package/dist/index55.cjs +146 -7
- package/dist/index55.cjs.map +1 -1
- package/dist/index55.js +148 -9
- package/dist/index55.js.map +1 -1
- package/dist/index56.cjs +6 -15
- package/dist/index56.cjs.map +1 -1
- package/dist/index56.js +6 -15
- package/dist/index56.js.map +1 -1
- package/dist/index57.cjs +14 -63
- package/dist/index57.cjs.map +1 -1
- package/dist/index57.js +16 -65
- package/dist/index57.js.map +1 -1
- package/dist/index58.cjs +67 -15
- package/dist/index58.cjs.map +1 -1
- package/dist/index58.js +66 -14
- package/dist/index58.js.map +1 -1
- package/dist/index59.cjs +15 -18
- package/dist/index59.cjs.map +1 -1
- package/dist/index59.js +15 -18
- package/dist/index59.js.map +1 -1
- package/dist/index60.cjs +7 -16
- package/dist/index60.cjs.map +1 -1
- package/dist/index60.js +8 -17
- package/dist/index60.js.map +1 -1
- package/dist/index61.cjs +5 -23
- package/dist/index61.cjs.map +1 -1
- package/dist/index61.js +6 -24
- package/dist/index61.js.map +1 -1
- package/dist/index62.cjs +17 -27
- package/dist/index62.cjs.map +1 -1
- package/dist/index62.js +16 -26
- package/dist/index62.js.map +1 -1
- package/dist/index63.cjs +1 -1
- package/dist/index63.js +1 -1
- package/dist/index64.cjs +1 -1
- package/dist/index64.js +1 -1
- package/dist/index65.cjs +141 -22
- package/dist/index65.cjs.map +1 -1
- package/dist/index65.js +139 -20
- package/dist/index65.js.map +1 -1
- package/dist/index66.cjs +17 -2
- package/dist/index66.cjs.map +1 -1
- package/dist/index66.js +17 -2
- package/dist/index66.js.map +1 -1
- package/dist/index67.cjs +46 -10
- package/dist/index67.cjs.map +1 -1
- package/dist/index67.js +46 -10
- package/dist/index67.js.map +1 -1
- package/dist/index68.cjs +53 -2
- package/dist/index68.cjs.map +1 -1
- package/dist/index68.js +54 -3
- package/dist/index68.js.map +1 -1
- package/dist/index69.cjs +33 -17
- package/dist/index69.cjs.map +1 -1
- package/dist/index69.js +32 -16
- package/dist/index69.js.map +1 -1
- package/dist/index70.cjs +1 -1
- package/dist/index70.js +1 -1
- package/dist/index71.cjs +19 -116
- package/dist/index71.cjs.map +1 -1
- package/dist/index71.js +17 -114
- package/dist/index71.js.map +1 -1
- package/dist/index72.cjs +34 -28
- package/dist/index72.cjs.map +1 -1
- package/dist/index72.js +34 -28
- package/dist/index72.js.map +1 -1
- package/dist/index73.cjs +30 -18
- package/dist/index73.cjs.map +1 -1
- package/dist/index73.js +30 -18
- package/dist/index73.js.map +1 -1
- package/dist/index74.cjs +13 -19
- package/dist/index74.cjs.map +1 -1
- package/dist/index74.js +14 -20
- package/dist/index74.js.map +1 -1
- package/dist/index75.cjs +11 -5
- package/dist/index75.cjs.map +1 -1
- package/dist/index75.js +11 -5
- package/dist/index75.js.map +1 -1
- package/dist/index76.cjs +17 -2
- package/dist/index76.cjs.map +1 -1
- package/dist/index76.js +18 -3
- package/dist/index76.js.map +1 -1
- package/dist/index77.cjs +4 -64
- package/dist/index77.cjs.map +1 -1
- package/dist/index77.js +5 -65
- package/dist/index77.js.map +1 -1
- package/dist/index78.cjs +37 -19
- package/dist/index78.cjs.map +1 -1
- package/dist/index78.js +37 -19
- package/dist/index78.js.map +1 -1
- package/dist/index79.cjs +28 -13
- package/dist/index79.cjs.map +1 -1
- package/dist/index79.js +28 -13
- package/dist/index79.js.map +1 -1
- package/dist/index80.cjs +16 -19
- package/dist/index80.cjs.map +1 -1
- package/dist/index80.js +17 -20
- package/dist/index80.js.map +1 -1
- package/dist/index81.cjs +20 -33
- package/dist/index81.cjs.map +1 -1
- package/dist/index81.js +20 -33
- package/dist/index81.js.map +1 -1
- package/dist/index82.cjs +63 -37
- package/dist/index82.cjs.map +1 -1
- package/dist/index82.js +63 -37
- package/dist/index82.js.map +1 -1
- package/dist/index83.cjs +6 -23
- package/dist/index83.cjs.map +1 -1
- package/dist/index83.js +6 -23
- package/dist/index83.js.map +1 -1
- package/dist/index84.cjs +40 -20
- package/dist/index84.cjs.map +1 -1
- package/dist/index84.js +39 -19
- package/dist/index84.js.map +1 -1
- package/dist/index85.cjs +35 -13
- package/dist/index85.cjs.map +1 -1
- package/dist/index85.js +35 -13
- package/dist/index85.js.map +1 -1
- package/dist/index86.cjs +43 -60
- package/dist/index86.cjs.map +1 -1
- package/dist/index86.js +42 -59
- package/dist/index86.js.map +1 -1
- package/dist/index87.cjs +24 -51
- package/dist/index87.cjs.map +1 -1
- package/dist/index87.js +23 -50
- package/dist/index87.js.map +1 -1
- package/dist/index88.cjs +20 -40
- package/dist/index88.cjs.map +1 -1
- package/dist/index88.js +19 -39
- package/dist/index88.js.map +1 -1
- package/dist/index89.cjs +14 -85
- package/dist/index89.cjs.map +1 -1
- package/dist/index89.js +13 -84
- package/dist/index89.js.map +1 -1
- package/dist/index90.cjs +60 -39
- package/dist/index90.cjs.map +1 -1
- package/dist/index90.js +59 -38
- package/dist/index90.js.map +1 -1
- package/dist/index91.cjs +24 -92
- package/dist/index91.cjs.map +1 -1
- package/dist/index91.js +23 -91
- package/dist/index91.js.map +1 -1
- package/dist/index92.cjs +13 -34
- package/dist/index92.cjs.map +1 -1
- package/dist/index92.js +13 -34
- package/dist/index92.js.map +1 -1
- package/dist/index93.cjs +49 -13
- package/dist/index93.cjs.map +1 -1
- package/dist/index93.js +50 -14
- package/dist/index93.js.map +1 -1
- package/dist/index94.cjs +24 -36
- package/dist/index94.cjs.map +1 -1
- package/dist/index94.js +24 -36
- package/dist/index94.js.map +1 -1
- package/dist/index96.cjs +12 -36
- package/dist/index96.cjs.map +1 -1
- package/dist/index96.js +12 -36
- package/dist/index96.js.map +1 -1
- package/dist/index97.cjs +22 -16
- package/dist/index97.cjs.map +1 -1
- package/dist/index97.js +22 -16
- package/dist/index97.js.map +1 -1
- package/dist/index98.cjs +22 -134
- package/dist/index98.cjs.map +1 -1
- package/dist/index98.js +21 -133
- package/dist/index98.js.map +1 -1
- package/dist/index99.cjs +14 -38
- package/dist/index99.cjs.map +1 -1
- package/dist/index99.js +15 -39
- package/dist/index99.js.map +1 -1
- package/dist/style.css +111 -0
- package/dist/types/chart.types.d.ts +14 -0
- package/dist/types/chart.types.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index81.js
CHANGED
|
@@ -1,38 +1,25 @@
|
|
|
1
|
-
const
|
|
2
|
-
const
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const latitudes = points.map((p) => p.point.latitude);
|
|
12
|
-
const longitudes = points.map((p) => p.point.longitude);
|
|
13
|
-
return [
|
|
14
|
-
[Math.min(...latitudes), Math.min(...longitudes)],
|
|
15
|
-
[Math.max(...latitudes), Math.max(...longitudes)]
|
|
16
|
-
];
|
|
17
|
-
};
|
|
18
|
-
const normalizePoints = (points, maxPoints) => {
|
|
19
|
-
const usable = [];
|
|
20
|
-
points.forEach((point, sourceIndex) => {
|
|
21
|
-
if (hasUsableCoordinates(point)) usable.push({ point, sourceIndex });
|
|
22
|
-
});
|
|
23
|
-
const drawn = usable.length > maxPoints ? sample(usable, maxPoints) : usable;
|
|
24
|
-
return {
|
|
25
|
-
drawn,
|
|
26
|
-
bounds: boundsOf(drawn),
|
|
27
|
-
info: {
|
|
28
|
-
total: points.length,
|
|
29
|
-
drawn: drawn.length,
|
|
30
|
-
skipped: points.length - usable.length,
|
|
31
|
-
dropped: usable.length - drawn.length
|
|
1
|
+
const merge = (a, b) => a == null ? b : b == null ? a : a + b;
|
|
2
|
+
const pivotGroupedBars = (data) => {
|
|
3
|
+
const categories = /* @__PURE__ */ new Set();
|
|
4
|
+
const cells = /* @__PURE__ */ new Map();
|
|
5
|
+
for (const { category, series: series2, value } of data) {
|
|
6
|
+
categories.add(category);
|
|
7
|
+
let row = cells.get(series2);
|
|
8
|
+
if (!row) {
|
|
9
|
+
row = /* @__PURE__ */ new Map();
|
|
10
|
+
cells.set(series2, row);
|
|
32
11
|
}
|
|
33
|
-
|
|
12
|
+
row.set(category, row.has(category) ? merge(row.get(category) ?? null, value) : value);
|
|
13
|
+
}
|
|
14
|
+
const categoryList = [...categories];
|
|
15
|
+
const series = [...cells.entries()].map(([name, row]) => ({
|
|
16
|
+
name,
|
|
17
|
+
values: categoryList.map((category) => row.get(category) ?? null)
|
|
18
|
+
}));
|
|
19
|
+
const hasValues = series.some((s) => s.values.some((v) => v != null));
|
|
20
|
+
return { categories: categoryList, series, hasValues };
|
|
34
21
|
};
|
|
35
22
|
export {
|
|
36
|
-
|
|
23
|
+
pivotGroupedBars
|
|
37
24
|
};
|
|
38
25
|
//# sourceMappingURL=index81.js.map
|
package/dist/index81.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index81.js","sources":["../src/
|
|
1
|
+
{"version":3,"file":"index81.js","sources":["../src/charts/GroupedBarChartCard/pivotGroupedBars.ts"],"sourcesContent":["import type { GroupedBarPoint } from '../../types/chart.types';\n\n/** One series with its values aligned to `categories`; `null` is a gap. */\nexport interface PivotedSeries {\n name: string;\n values: (number | null)[];\n}\n\n/** Category × series matrix of a grouped bar chart. */\nexport interface GroupedBarPivot {\n /** First-seen order. */\n categories: string[];\n /** First-seen order. */\n series: PivotedSeries[];\n /** Whether any value is non-null — false means there is nothing to draw. */\n hasValues: boolean;\n}\n\n/** `null` adds nothing: only nulls stay a gap. */\nconst merge = (a: number | null, b: number | null) => (a == null ? b : b == null ? a : a + b);\n\n/**\n * Pivot points into a category × series matrix, keeping first-appearance order,\n * summing repeated pairs and filling missing pairs with `null` — never `0`.\n */\nexport const pivotGroupedBars = (data: GroupedBarPoint[]): GroupedBarPivot => {\n const categories = new Set<string>();\n const cells = new Map<string, Map<string, number | null>>();\n\n for (const { category, series, value } of data) {\n categories.add(category);\n let row = cells.get(series);\n if (!row) {\n row = new Map();\n cells.set(series, row);\n }\n row.set(category, row.has(category) ? merge(row.get(category) ?? null, value) : value);\n }\n\n const categoryList = [...categories];\n const series = [...cells.entries()].map(([name, row]) => ({\n name,\n values: categoryList.map((category) => row.get(category) ?? null),\n }));\n const hasValues = series.some((s) => s.values.some((v) => v != null));\n\n return { categories: categoryList, series, hasValues };\n};\n"],"names":["series"],"mappings":"AAmBA,MAAM,QAAQ,CAAC,GAAkB,MAAsB,KAAK,OAAO,IAAI,KAAK,OAAO,IAAI,IAAI;AAMpF,MAAM,mBAAmB,CAAC,SAA6C;AAC5E,QAAM,iCAAiB,IAAA;AACvB,QAAM,4BAAY,IAAA;AAElB,aAAW,EAAE,UAAU,QAAAA,SAAQ,MAAA,KAAW,MAAM;AAC9C,eAAW,IAAI,QAAQ;AACvB,QAAI,MAAM,MAAM,IAAIA,OAAM;AAC1B,QAAI,CAAC,KAAK;AACR,gCAAU,IAAA;AACV,YAAM,IAAIA,SAAQ,GAAG;AAAA,IACvB;AACA,QAAI,IAAI,UAAU,IAAI,IAAI,QAAQ,IAAI,MAAM,IAAI,IAAI,QAAQ,KAAK,MAAM,KAAK,IAAI,KAAK;AAAA,EACvF;AAEA,QAAM,eAAe,CAAC,GAAG,UAAU;AACnC,QAAM,SAAS,CAAC,GAAG,MAAM,QAAA,CAAS,EAAE,IAAI,CAAC,CAAC,MAAM,GAAG,OAAO;AAAA,IACxD;AAAA,IACA,QAAQ,aAAa,IAAI,CAAC,aAAa,IAAI,IAAI,QAAQ,KAAK,IAAI;AAAA,EAAA,EAChE;AACF,QAAM,YAAY,OAAO,KAAK,CAAC,MAAM,EAAE,OAAO,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC;AAEpE,SAAO,EAAE,YAAY,cAAc,QAAQ,UAAA;AAC7C;"}
|
package/dist/index82.cjs
CHANGED
|
@@ -1,46 +1,72 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const constants = require("./
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
const constants = require("./index65.cjs");
|
|
4
|
+
const { GRID_MARGIN, AXIS_NAME_GAP } = constants.GROUPED_BAR;
|
|
5
|
+
const escapeHtml = (value) => value.replace(/[&<>"]/g, (char) => `&#${char.charCodeAt(0)};`);
|
|
6
|
+
const colorFor = (name, index, seriesColors) => (seriesColors == null ? void 0 : seriesColors[name]) ?? constants.CHART_COLORS[index % constants.CHART_COLORS.length];
|
|
7
|
+
const markerFor = (color) => {
|
|
8
|
+
const { TOOLTIP_MARKER_SIZE: size, TOOLTIP_MARKER_GAP: gap } = constants.GROUPED_BAR;
|
|
9
|
+
return `<span style="display:inline-block;margin-right:${gap}px;border-radius:50%;width:${size}px;height:${size}px;background-color:${escapeHtml(color)};"></span>`;
|
|
8
10
|
};
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
const buildTooltipFormatter = (pivot, colors, noValueText) => (params) => {
|
|
12
|
+
const first = Array.isArray(params) ? params[0] : params;
|
|
13
|
+
const index = first == null ? void 0 : first.dataIndex;
|
|
14
|
+
if (index == null || index >= pivot.categories.length) return "";
|
|
15
|
+
const lines = [escapeHtml(pivot.categories[index])];
|
|
16
|
+
pivot.series.forEach((s, i) => {
|
|
17
|
+
const value = s.values[index];
|
|
18
|
+
const text = value == null ? escapeHtml(noValueText) : String(value);
|
|
19
|
+
lines.push(`${markerFor(colors[i])}${escapeHtml(s.name)}: ${text}`);
|
|
20
|
+
});
|
|
21
|
+
return lines.join("<br/>");
|
|
14
22
|
};
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const clamped = Math.min(Math.max(ratio, 0), 1);
|
|
26
|
-
const minArea = constants.GEO_MAP.MIN_MARKER_RADIUS ** 2;
|
|
27
|
-
const maxArea = constants.GEO_MAP.MAX_MARKER_RADIUS ** 2;
|
|
28
|
-
return Math.sqrt(minArea + clamped * (maxArea - minArea));
|
|
23
|
+
const buildGrid = (config) => {
|
|
24
|
+
const named = Boolean(config.valueLabel);
|
|
25
|
+
return {
|
|
26
|
+
left: GRID_MARGIN.BASE + (named && !config.invertAxis ? GRID_MARGIN.VALUE_NAME_Y : 0),
|
|
27
|
+
right: GRID_MARGIN.RIGHT,
|
|
28
|
+
top: GRID_MARGIN.TOP,
|
|
29
|
+
// Room for a horizontal value-axis name and the legend, each only when drawn.
|
|
30
|
+
bottom: GRID_MARGIN.BASE + (named && config.invertAxis ? GRID_MARGIN.VALUE_NAME_X : 0) + (config.hideLegend ? 0 : GRID_MARGIN.LEGEND),
|
|
31
|
+
containLabel: true
|
|
32
|
+
};
|
|
29
33
|
};
|
|
30
|
-
const
|
|
31
|
-
const
|
|
32
|
-
const
|
|
34
|
+
const buildGroupedBarOption = (pivot, config) => {
|
|
35
|
+
const colors = pivot.series.map((s, i) => colorFor(s.name, i, config.seriesColors));
|
|
36
|
+
const categoryAxis = {
|
|
37
|
+
type: "category",
|
|
38
|
+
data: pivot.categories,
|
|
39
|
+
// Horizontal bars read top-down, so the first category goes on top.
|
|
40
|
+
inverse: config.invertAxis
|
|
41
|
+
};
|
|
42
|
+
const valueAxis = {
|
|
43
|
+
type: "value",
|
|
44
|
+
name: config.valueLabel,
|
|
45
|
+
nameLocation: "middle",
|
|
46
|
+
nameGap: config.invertAxis ? AXIS_NAME_GAP.X : AXIS_NAME_GAP.Y,
|
|
47
|
+
// Without this a vertical axis name is drawn horizontally and eats the plot's width.
|
|
48
|
+
nameRotate: config.invertAxis ? 0 : 90,
|
|
49
|
+
minInterval: config.integerValues ? 1 : void 0
|
|
50
|
+
};
|
|
33
51
|
return {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
52
|
+
tooltip: {
|
|
53
|
+
trigger: "axis",
|
|
54
|
+
axisPointer: { type: "shadow" },
|
|
55
|
+
formatter: buildTooltipFormatter(pivot, colors, config.noValueText)
|
|
56
|
+
},
|
|
57
|
+
legend: { show: !config.hideLegend, bottom: 0, type: "scroll" },
|
|
58
|
+
grid: buildGrid(config),
|
|
59
|
+
xAxis: config.invertAxis ? valueAxis : categoryAxis,
|
|
60
|
+
yAxis: config.invertAxis ? categoryAxis : valueAxis,
|
|
61
|
+
series: pivot.series.map((s, i) => ({
|
|
62
|
+
name: s.name,
|
|
63
|
+
type: "bar",
|
|
64
|
+
data: s.values,
|
|
65
|
+
barMinHeight: constants.GROUPED_BAR.MIN_BAR_HEIGHT,
|
|
66
|
+
itemStyle: { color: colors[i] },
|
|
67
|
+
emphasis: { focus: "series" }
|
|
68
|
+
}))
|
|
39
69
|
};
|
|
40
70
|
};
|
|
41
|
-
|
|
42
|
-
exports.buildCategoryColors = buildCategoryColors;
|
|
43
|
-
exports.buildLegendItems = buildLegendItems;
|
|
44
|
-
exports.buildMarkerStyle = buildMarkerStyle;
|
|
45
|
-
exports.buildWeightScale = buildWeightScale;
|
|
71
|
+
exports.buildGroupedBarOption = buildGroupedBarOption;
|
|
46
72
|
//# sourceMappingURL=index82.cjs.map
|
package/dist/index82.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index82.cjs","sources":["../src/
|
|
1
|
+
{"version":3,"file":"index82.cjs","sources":["../src/charts/GroupedBarChartCard/buildGroupedBarOption.ts"],"sourcesContent":["import type { GroupedBarPivot } from './pivotGroupedBars';\nimport { CHART_COLORS, GROUPED_BAR } from '../../constants';\n\nexport interface GroupedBarOptionConfig {\n seriesColors?: Readonly<Record<string, string>>;\n invertAxis: boolean;\n hideLegend: boolean;\n integerValues: boolean;\n valueLabel?: string;\n /** Tooltip text for a gap. */\n noValueText: string;\n}\n\nconst { GRID_MARGIN, AXIS_NAME_GAP } = GROUPED_BAR;\n\n/** Category and series names come from consumer data and land in the tooltip's HTML. */\nconst escapeHtml = (value: string) =>\n value.replace(/[&<>\"]/g, (char) => `&#${char.charCodeAt(0)};`);\n\n/** Pinned colour first, else the palette by first-seen position. */\nconst colorFor = (name: string, index: number, seriesColors?: Readonly<Record<string, string>>) =>\n seriesColors?.[name] ?? CHART_COLORS[index % CHART_COLORS.length];\n\nconst markerFor = (color: string) => {\n const { TOOLTIP_MARKER_SIZE: size, TOOLTIP_MARKER_GAP: gap } = GROUPED_BAR;\n return `<span style=\"display:inline-block;margin-right:${gap}px;border-radius:50%;width:${size}px;height:${size}px;background-color:${escapeHtml(color)};\"></span>`;\n};\n\n/**\n * The tooltip is built from the pivot rather than from echarts' params, so every\n * series is listed in series order and a gap reads as `noValueText`, never `-`.\n */\nconst buildTooltipFormatter =\n (pivot: GroupedBarPivot, colors: string[], noValueText: string) => (params: unknown) => {\n const first = (Array.isArray(params) ? params[0] : params) as\n | { dataIndex?: number }\n | undefined;\n const index = first?.dataIndex;\n if (index == null || index >= pivot.categories.length) return '';\n\n const lines = [escapeHtml(pivot.categories[index])];\n pivot.series.forEach((s, i) => {\n const value = s.values[index];\n const text = value == null ? escapeHtml(noValueText) : String(value);\n lines.push(`${markerFor(colors[i])}${escapeHtml(s.name)}: ${text}`);\n });\n\n return lines.join('<br/>');\n };\n\nconst buildGrid = (config: GroupedBarOptionConfig) => {\n const named = Boolean(config.valueLabel);\n return {\n left: GRID_MARGIN.BASE + (named && !config.invertAxis ? GRID_MARGIN.VALUE_NAME_Y : 0),\n right: GRID_MARGIN.RIGHT,\n top: GRID_MARGIN.TOP,\n // Room for a horizontal value-axis name and the legend, each only when drawn.\n bottom:\n GRID_MARGIN.BASE +\n (named && config.invertAxis ? GRID_MARGIN.VALUE_NAME_X : 0) +\n (config.hideLegend ? 0 : GRID_MARGIN.LEGEND),\n containLabel: true,\n };\n};\n\nexport const buildGroupedBarOption = (pivot: GroupedBarPivot, config: GroupedBarOptionConfig) => {\n const colors = pivot.series.map((s, i) => colorFor(s.name, i, config.seriesColors));\n\n const categoryAxis = {\n type: 'category' as const,\n data: pivot.categories,\n // Horizontal bars read top-down, so the first category goes on top.\n inverse: config.invertAxis,\n };\n const valueAxis = {\n type: 'value' as const,\n name: config.valueLabel,\n nameLocation: 'middle' as const,\n nameGap: config.invertAxis ? AXIS_NAME_GAP.X : AXIS_NAME_GAP.Y,\n // Without this a vertical axis name is drawn horizontally and eats the plot's width.\n nameRotate: config.invertAxis ? 0 : 90,\n minInterval: config.integerValues ? 1 : undefined,\n };\n\n return {\n tooltip: {\n trigger: 'axis' as const,\n axisPointer: { type: 'shadow' as const },\n formatter: buildTooltipFormatter(pivot, colors, config.noValueText),\n },\n legend: { show: !config.hideLegend, bottom: 0, type: 'scroll' as const },\n grid: buildGrid(config),\n xAxis: config.invertAxis ? valueAxis : categoryAxis,\n yAxis: config.invertAxis ? categoryAxis : valueAxis,\n series: pivot.series.map((s, i) => ({\n name: s.name,\n type: 'bar' as const,\n data: s.values,\n barMinHeight: GROUPED_BAR.MIN_BAR_HEIGHT,\n itemStyle: { color: colors[i] },\n emphasis: { focus: 'series' as const },\n })),\n };\n};\n"],"names":["GROUPED_BAR","CHART_COLORS"],"mappings":";;;AAaA,MAAM,EAAE,aAAa,cAAA,IAAkBA,UAAAA;AAGvC,MAAM,aAAa,CAAC,UAClB,MAAM,QAAQ,WAAW,CAAC,SAAS,KAAK,KAAK,WAAW,CAAC,CAAC,GAAG;AAG/D,MAAM,WAAW,CAAC,MAAc,OAAe,kBAC7C,6CAAe,UAASC,UAAAA,aAAa,QAAQA,UAAAA,aAAa,MAAM;AAElE,MAAM,YAAY,CAAC,UAAkB;AACnC,QAAM,EAAE,qBAAqB,MAAM,oBAAoB,QAAQD,UAAAA;AAC/D,SAAO,kDAAkD,GAAG,8BAA8B,IAAI,aAAa,IAAI,uBAAuB,WAAW,KAAK,CAAC;AACzJ;AAMA,MAAM,wBACJ,CAAC,OAAwB,QAAkB,gBAAwB,CAAC,WAAoB;AACtF,QAAM,QAAS,MAAM,QAAQ,MAAM,IAAI,OAAO,CAAC,IAAI;AAGnD,QAAM,QAAQ,+BAAO;AACrB,MAAI,SAAS,QAAQ,SAAS,MAAM,WAAW,OAAQ,QAAO;AAE9D,QAAM,QAAQ,CAAC,WAAW,MAAM,WAAW,KAAK,CAAC,CAAC;AAClD,QAAM,OAAO,QAAQ,CAAC,GAAG,MAAM;AAC7B,UAAM,QAAQ,EAAE,OAAO,KAAK;AAC5B,UAAM,OAAO,SAAS,OAAO,WAAW,WAAW,IAAI,OAAO,KAAK;AACnE,UAAM,KAAK,GAAG,UAAU,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;AAAA,EACpE,CAAC;AAED,SAAO,MAAM,KAAK,OAAO;AAC3B;AAEF,MAAM,YAAY,CAAC,WAAmC;AACpD,QAAM,QAAQ,QAAQ,OAAO,UAAU;AACvC,SAAO;AAAA,IACL,MAAM,YAAY,QAAQ,SAAS,CAAC,OAAO,aAAa,YAAY,eAAe;AAAA,IACnF,OAAO,YAAY;AAAA,IACnB,KAAK,YAAY;AAAA;AAAA,IAEjB,QACE,YAAY,QACX,SAAS,OAAO,aAAa,YAAY,eAAe,MACxD,OAAO,aAAa,IAAI,YAAY;AAAA,IACvC,cAAc;AAAA,EAAA;AAElB;AAEO,MAAM,wBAAwB,CAAC,OAAwB,WAAmC;AAC/F,QAAM,SAAS,MAAM,OAAO,IAAI,CAAC,GAAG,MAAM,SAAS,EAAE,MAAM,GAAG,OAAO,YAAY,CAAC;AAElF,QAAM,eAAe;AAAA,IACnB,MAAM;AAAA,IACN,MAAM,MAAM;AAAA;AAAA,IAEZ,SAAS,OAAO;AAAA,EAAA;AAElB,QAAM,YAAY;AAAA,IAChB,MAAM;AAAA,IACN,MAAM,OAAO;AAAA,IACb,cAAc;AAAA,IACd,SAAS,OAAO,aAAa,cAAc,IAAI,cAAc;AAAA;AAAA,IAE7D,YAAY,OAAO,aAAa,IAAI;AAAA,IACpC,aAAa,OAAO,gBAAgB,IAAI;AAAA,EAAA;AAG1C,SAAO;AAAA,IACL,SAAS;AAAA,MACP,SAAS;AAAA,MACT,aAAa,EAAE,MAAM,SAAA;AAAA,MACrB,WAAW,sBAAsB,OAAO,QAAQ,OAAO,WAAW;AAAA,IAAA;AAAA,IAEpE,QAAQ,EAAE,MAAM,CAAC,OAAO,YAAY,QAAQ,GAAG,MAAM,SAAA;AAAA,IACrD,MAAM,UAAU,MAAM;AAAA,IACtB,OAAO,OAAO,aAAa,YAAY;AAAA,IACvC,OAAO,OAAO,aAAa,eAAe;AAAA,IAC1C,QAAQ,MAAM,OAAO,IAAI,CAAC,GAAG,OAAO;AAAA,MAClC,MAAM,EAAE;AAAA,MACR,MAAM;AAAA,MACN,MAAM,EAAE;AAAA,MACR,cAAcA,UAAAA,YAAY;AAAA,MAC1B,WAAW,EAAE,OAAO,OAAO,CAAC,EAAA;AAAA,MAC5B,UAAU,EAAE,OAAO,SAAA;AAAA,IAAkB,EACrC;AAAA,EAAA;AAEN;;"}
|
package/dist/index82.js
CHANGED
|
@@ -1,46 +1,72 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { GROUPED_BAR, CHART_COLORS } from "./index65.js";
|
|
2
|
+
const { GRID_MARGIN, AXIS_NAME_GAP } = GROUPED_BAR;
|
|
3
|
+
const escapeHtml = (value) => value.replace(/[&<>"]/g, (char) => `&#${char.charCodeAt(0)};`);
|
|
4
|
+
const colorFor = (name, index, seriesColors) => (seriesColors == null ? void 0 : seriesColors[name]) ?? CHART_COLORS[index % CHART_COLORS.length];
|
|
5
|
+
const markerFor = (color) => {
|
|
6
|
+
const { TOOLTIP_MARKER_SIZE: size, TOOLTIP_MARKER_GAP: gap } = GROUPED_BAR;
|
|
7
|
+
return `<span style="display:inline-block;margin-right:${gap}px;border-radius:50%;width:${size}px;height:${size}px;background-color:${escapeHtml(color)};"></span>`;
|
|
6
8
|
};
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
const buildTooltipFormatter = (pivot, colors, noValueText) => (params) => {
|
|
10
|
+
const first = Array.isArray(params) ? params[0] : params;
|
|
11
|
+
const index = first == null ? void 0 : first.dataIndex;
|
|
12
|
+
if (index == null || index >= pivot.categories.length) return "";
|
|
13
|
+
const lines = [escapeHtml(pivot.categories[index])];
|
|
14
|
+
pivot.series.forEach((s, i) => {
|
|
15
|
+
const value = s.values[index];
|
|
16
|
+
const text = value == null ? escapeHtml(noValueText) : String(value);
|
|
17
|
+
lines.push(`${markerFor(colors[i])}${escapeHtml(s.name)}: ${text}`);
|
|
18
|
+
});
|
|
19
|
+
return lines.join("<br/>");
|
|
12
20
|
};
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
const clamped = Math.min(Math.max(ratio, 0), 1);
|
|
24
|
-
const minArea = GEO_MAP.MIN_MARKER_RADIUS ** 2;
|
|
25
|
-
const maxArea = GEO_MAP.MAX_MARKER_RADIUS ** 2;
|
|
26
|
-
return Math.sqrt(minArea + clamped * (maxArea - minArea));
|
|
21
|
+
const buildGrid = (config) => {
|
|
22
|
+
const named = Boolean(config.valueLabel);
|
|
23
|
+
return {
|
|
24
|
+
left: GRID_MARGIN.BASE + (named && !config.invertAxis ? GRID_MARGIN.VALUE_NAME_Y : 0),
|
|
25
|
+
right: GRID_MARGIN.RIGHT,
|
|
26
|
+
top: GRID_MARGIN.TOP,
|
|
27
|
+
// Room for a horizontal value-axis name and the legend, each only when drawn.
|
|
28
|
+
bottom: GRID_MARGIN.BASE + (named && config.invertAxis ? GRID_MARGIN.VALUE_NAME_X : 0) + (config.hideLegend ? 0 : GRID_MARGIN.LEGEND),
|
|
29
|
+
containLabel: true
|
|
30
|
+
};
|
|
27
31
|
};
|
|
28
|
-
const
|
|
29
|
-
const
|
|
30
|
-
const
|
|
32
|
+
const buildGroupedBarOption = (pivot, config) => {
|
|
33
|
+
const colors = pivot.series.map((s, i) => colorFor(s.name, i, config.seriesColors));
|
|
34
|
+
const categoryAxis = {
|
|
35
|
+
type: "category",
|
|
36
|
+
data: pivot.categories,
|
|
37
|
+
// Horizontal bars read top-down, so the first category goes on top.
|
|
38
|
+
inverse: config.invertAxis
|
|
39
|
+
};
|
|
40
|
+
const valueAxis = {
|
|
41
|
+
type: "value",
|
|
42
|
+
name: config.valueLabel,
|
|
43
|
+
nameLocation: "middle",
|
|
44
|
+
nameGap: config.invertAxis ? AXIS_NAME_GAP.X : AXIS_NAME_GAP.Y,
|
|
45
|
+
// Without this a vertical axis name is drawn horizontally and eats the plot's width.
|
|
46
|
+
nameRotate: config.invertAxis ? 0 : 90,
|
|
47
|
+
minInterval: config.integerValues ? 1 : void 0
|
|
48
|
+
};
|
|
31
49
|
return {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
50
|
+
tooltip: {
|
|
51
|
+
trigger: "axis",
|
|
52
|
+
axisPointer: { type: "shadow" },
|
|
53
|
+
formatter: buildTooltipFormatter(pivot, colors, config.noValueText)
|
|
54
|
+
},
|
|
55
|
+
legend: { show: !config.hideLegend, bottom: 0, type: "scroll" },
|
|
56
|
+
grid: buildGrid(config),
|
|
57
|
+
xAxis: config.invertAxis ? valueAxis : categoryAxis,
|
|
58
|
+
yAxis: config.invertAxis ? categoryAxis : valueAxis,
|
|
59
|
+
series: pivot.series.map((s, i) => ({
|
|
60
|
+
name: s.name,
|
|
61
|
+
type: "bar",
|
|
62
|
+
data: s.values,
|
|
63
|
+
barMinHeight: GROUPED_BAR.MIN_BAR_HEIGHT,
|
|
64
|
+
itemStyle: { color: colors[i] },
|
|
65
|
+
emphasis: { focus: "series" }
|
|
66
|
+
}))
|
|
37
67
|
};
|
|
38
68
|
};
|
|
39
|
-
const buildLegendItems = (categoryColors) => [...categoryColors].map(([label, color]) => ({ label, color }));
|
|
40
69
|
export {
|
|
41
|
-
|
|
42
|
-
buildLegendItems,
|
|
43
|
-
buildMarkerStyle,
|
|
44
|
-
buildWeightScale
|
|
70
|
+
buildGroupedBarOption
|
|
45
71
|
};
|
|
46
72
|
//# sourceMappingURL=index82.js.map
|
package/dist/index82.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index82.js","sources":["../src/
|
|
1
|
+
{"version":3,"file":"index82.js","sources":["../src/charts/GroupedBarChartCard/buildGroupedBarOption.ts"],"sourcesContent":["import type { GroupedBarPivot } from './pivotGroupedBars';\nimport { CHART_COLORS, GROUPED_BAR } from '../../constants';\n\nexport interface GroupedBarOptionConfig {\n seriesColors?: Readonly<Record<string, string>>;\n invertAxis: boolean;\n hideLegend: boolean;\n integerValues: boolean;\n valueLabel?: string;\n /** Tooltip text for a gap. */\n noValueText: string;\n}\n\nconst { GRID_MARGIN, AXIS_NAME_GAP } = GROUPED_BAR;\n\n/** Category and series names come from consumer data and land in the tooltip's HTML. */\nconst escapeHtml = (value: string) =>\n value.replace(/[&<>\"]/g, (char) => `&#${char.charCodeAt(0)};`);\n\n/** Pinned colour first, else the palette by first-seen position. */\nconst colorFor = (name: string, index: number, seriesColors?: Readonly<Record<string, string>>) =>\n seriesColors?.[name] ?? CHART_COLORS[index % CHART_COLORS.length];\n\nconst markerFor = (color: string) => {\n const { TOOLTIP_MARKER_SIZE: size, TOOLTIP_MARKER_GAP: gap } = GROUPED_BAR;\n return `<span style=\"display:inline-block;margin-right:${gap}px;border-radius:50%;width:${size}px;height:${size}px;background-color:${escapeHtml(color)};\"></span>`;\n};\n\n/**\n * The tooltip is built from the pivot rather than from echarts' params, so every\n * series is listed in series order and a gap reads as `noValueText`, never `-`.\n */\nconst buildTooltipFormatter =\n (pivot: GroupedBarPivot, colors: string[], noValueText: string) => (params: unknown) => {\n const first = (Array.isArray(params) ? params[0] : params) as\n | { dataIndex?: number }\n | undefined;\n const index = first?.dataIndex;\n if (index == null || index >= pivot.categories.length) return '';\n\n const lines = [escapeHtml(pivot.categories[index])];\n pivot.series.forEach((s, i) => {\n const value = s.values[index];\n const text = value == null ? escapeHtml(noValueText) : String(value);\n lines.push(`${markerFor(colors[i])}${escapeHtml(s.name)}: ${text}`);\n });\n\n return lines.join('<br/>');\n };\n\nconst buildGrid = (config: GroupedBarOptionConfig) => {\n const named = Boolean(config.valueLabel);\n return {\n left: GRID_MARGIN.BASE + (named && !config.invertAxis ? GRID_MARGIN.VALUE_NAME_Y : 0),\n right: GRID_MARGIN.RIGHT,\n top: GRID_MARGIN.TOP,\n // Room for a horizontal value-axis name and the legend, each only when drawn.\n bottom:\n GRID_MARGIN.BASE +\n (named && config.invertAxis ? GRID_MARGIN.VALUE_NAME_X : 0) +\n (config.hideLegend ? 0 : GRID_MARGIN.LEGEND),\n containLabel: true,\n };\n};\n\nexport const buildGroupedBarOption = (pivot: GroupedBarPivot, config: GroupedBarOptionConfig) => {\n const colors = pivot.series.map((s, i) => colorFor(s.name, i, config.seriesColors));\n\n const categoryAxis = {\n type: 'category' as const,\n data: pivot.categories,\n // Horizontal bars read top-down, so the first category goes on top.\n inverse: config.invertAxis,\n };\n const valueAxis = {\n type: 'value' as const,\n name: config.valueLabel,\n nameLocation: 'middle' as const,\n nameGap: config.invertAxis ? AXIS_NAME_GAP.X : AXIS_NAME_GAP.Y,\n // Without this a vertical axis name is drawn horizontally and eats the plot's width.\n nameRotate: config.invertAxis ? 0 : 90,\n minInterval: config.integerValues ? 1 : undefined,\n };\n\n return {\n tooltip: {\n trigger: 'axis' as const,\n axisPointer: { type: 'shadow' as const },\n formatter: buildTooltipFormatter(pivot, colors, config.noValueText),\n },\n legend: { show: !config.hideLegend, bottom: 0, type: 'scroll' as const },\n grid: buildGrid(config),\n xAxis: config.invertAxis ? valueAxis : categoryAxis,\n yAxis: config.invertAxis ? categoryAxis : valueAxis,\n series: pivot.series.map((s, i) => ({\n name: s.name,\n type: 'bar' as const,\n data: s.values,\n barMinHeight: GROUPED_BAR.MIN_BAR_HEIGHT,\n itemStyle: { color: colors[i] },\n emphasis: { focus: 'series' as const },\n })),\n };\n};\n"],"names":[],"mappings":";AAaA,MAAM,EAAE,aAAa,cAAA,IAAkB;AAGvC,MAAM,aAAa,CAAC,UAClB,MAAM,QAAQ,WAAW,CAAC,SAAS,KAAK,KAAK,WAAW,CAAC,CAAC,GAAG;AAG/D,MAAM,WAAW,CAAC,MAAc,OAAe,kBAC7C,6CAAe,UAAS,aAAa,QAAQ,aAAa,MAAM;AAElE,MAAM,YAAY,CAAC,UAAkB;AACnC,QAAM,EAAE,qBAAqB,MAAM,oBAAoB,QAAQ;AAC/D,SAAO,kDAAkD,GAAG,8BAA8B,IAAI,aAAa,IAAI,uBAAuB,WAAW,KAAK,CAAC;AACzJ;AAMA,MAAM,wBACJ,CAAC,OAAwB,QAAkB,gBAAwB,CAAC,WAAoB;AACtF,QAAM,QAAS,MAAM,QAAQ,MAAM,IAAI,OAAO,CAAC,IAAI;AAGnD,QAAM,QAAQ,+BAAO;AACrB,MAAI,SAAS,QAAQ,SAAS,MAAM,WAAW,OAAQ,QAAO;AAE9D,QAAM,QAAQ,CAAC,WAAW,MAAM,WAAW,KAAK,CAAC,CAAC;AAClD,QAAM,OAAO,QAAQ,CAAC,GAAG,MAAM;AAC7B,UAAM,QAAQ,EAAE,OAAO,KAAK;AAC5B,UAAM,OAAO,SAAS,OAAO,WAAW,WAAW,IAAI,OAAO,KAAK;AACnE,UAAM,KAAK,GAAG,UAAU,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;AAAA,EACpE,CAAC;AAED,SAAO,MAAM,KAAK,OAAO;AAC3B;AAEF,MAAM,YAAY,CAAC,WAAmC;AACpD,QAAM,QAAQ,QAAQ,OAAO,UAAU;AACvC,SAAO;AAAA,IACL,MAAM,YAAY,QAAQ,SAAS,CAAC,OAAO,aAAa,YAAY,eAAe;AAAA,IACnF,OAAO,YAAY;AAAA,IACnB,KAAK,YAAY;AAAA;AAAA,IAEjB,QACE,YAAY,QACX,SAAS,OAAO,aAAa,YAAY,eAAe,MACxD,OAAO,aAAa,IAAI,YAAY;AAAA,IACvC,cAAc;AAAA,EAAA;AAElB;AAEO,MAAM,wBAAwB,CAAC,OAAwB,WAAmC;AAC/F,QAAM,SAAS,MAAM,OAAO,IAAI,CAAC,GAAG,MAAM,SAAS,EAAE,MAAM,GAAG,OAAO,YAAY,CAAC;AAElF,QAAM,eAAe;AAAA,IACnB,MAAM;AAAA,IACN,MAAM,MAAM;AAAA;AAAA,IAEZ,SAAS,OAAO;AAAA,EAAA;AAElB,QAAM,YAAY;AAAA,IAChB,MAAM;AAAA,IACN,MAAM,OAAO;AAAA,IACb,cAAc;AAAA,IACd,SAAS,OAAO,aAAa,cAAc,IAAI,cAAc;AAAA;AAAA,IAE7D,YAAY,OAAO,aAAa,IAAI;AAAA,IACpC,aAAa,OAAO,gBAAgB,IAAI;AAAA,EAAA;AAG1C,SAAO;AAAA,IACL,SAAS;AAAA,MACP,SAAS;AAAA,MACT,aAAa,EAAE,MAAM,SAAA;AAAA,MACrB,WAAW,sBAAsB,OAAO,QAAQ,OAAO,WAAW;AAAA,IAAA;AAAA,IAEpE,QAAQ,EAAE,MAAM,CAAC,OAAO,YAAY,QAAQ,GAAG,MAAM,SAAA;AAAA,IACrD,MAAM,UAAU,MAAM;AAAA,IACtB,OAAO,OAAO,aAAa,YAAY;AAAA,IACvC,OAAO,OAAO,aAAa,eAAe;AAAA,IAC1C,QAAQ,MAAM,OAAO,IAAI,CAAC,GAAG,OAAO;AAAA,MAClC,MAAM,EAAE;AAAA,MACR,MAAM;AAAA,MACN,MAAM,EAAE;AAAA,MACR,cAAc,YAAY;AAAA,MAC1B,WAAW,EAAE,OAAO,OAAO,CAAC,EAAA;AAAA,MAC5B,UAAU,EAAE,OAAO,SAAA;AAAA,IAAkB,EACrC;AAAA,EAAA;AAEN;"}
|
package/dist/index83.cjs
CHANGED
|
@@ -1,27 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const map = reactLeaflet.useMap();
|
|
9
|
-
const containerRef = react.useRef(null);
|
|
10
|
-
if (containerRef.current === null) containerRef.current = map.getContainer();
|
|
11
|
-
const { width, height } = useResizeObserver.useResizeObserver(containerRef);
|
|
12
|
-
react.useEffect(() => {
|
|
13
|
-
map.invalidateSize();
|
|
14
|
-
}, [map, width, height]);
|
|
15
|
-
react.useEffect(() => {
|
|
16
|
-
if (!fitBounds || bounds == null) return;
|
|
17
|
-
map.fitBounds(bounds, {
|
|
18
|
-
padding: [...constants.GEO_MAP.FIT_BOUNDS_PADDING],
|
|
19
|
-
// A single point makes `fitBounds` collapse to the maximum zoom level.
|
|
20
|
-
maxZoom: constants.GEO_MAP.SINGLE_POINT_ZOOM
|
|
21
|
-
});
|
|
22
|
-
}, [map, bounds, fitBounds]);
|
|
23
|
-
return null;
|
|
3
|
+
const DEFAULT_LABELS = {
|
|
4
|
+
loading: "Loading chart...",
|
|
5
|
+
empty: "No data available.",
|
|
6
|
+
retry: "Retry",
|
|
7
|
+
noValue: "No data"
|
|
24
8
|
};
|
|
25
|
-
|
|
26
|
-
exports.MapViewport = MapViewport;
|
|
9
|
+
exports.DEFAULT_LABELS = DEFAULT_LABELS;
|
|
27
10
|
//# sourceMappingURL=index83.cjs.map
|
package/dist/index83.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index83.cjs","sources":["../src/
|
|
1
|
+
{"version":3,"file":"index83.cjs","sources":["../src/charts/GroupedBarChartCard/defaultLabels.ts"],"sourcesContent":["import type { GroupedBarChartLabels } from './GroupedBarChartCard.types';\n\n/** English defaults, matching the texts of the other chart cards. */\nexport const DEFAULT_LABELS: GroupedBarChartLabels = {\n loading: 'Loading chart...',\n empty: 'No data available.',\n retry: 'Retry',\n noValue: 'No data',\n};\n"],"names":[],"mappings":";;AAGO,MAAM,iBAAwC;AAAA,EACnD,SAAS;AAAA,EACT,OAAO;AAAA,EACP,OAAO;AAAA,EACP,SAAS;AACX;;"}
|
package/dist/index83.js
CHANGED
|
@@ -1,27 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const map = useMap();
|
|
7
|
-
const containerRef = useRef(null);
|
|
8
|
-
if (containerRef.current === null) containerRef.current = map.getContainer();
|
|
9
|
-
const { width, height } = useResizeObserver(containerRef);
|
|
10
|
-
useEffect(() => {
|
|
11
|
-
map.invalidateSize();
|
|
12
|
-
}, [map, width, height]);
|
|
13
|
-
useEffect(() => {
|
|
14
|
-
if (!fitBounds || bounds == null) return;
|
|
15
|
-
map.fitBounds(bounds, {
|
|
16
|
-
padding: [...GEO_MAP.FIT_BOUNDS_PADDING],
|
|
17
|
-
// A single point makes `fitBounds` collapse to the maximum zoom level.
|
|
18
|
-
maxZoom: GEO_MAP.SINGLE_POINT_ZOOM
|
|
19
|
-
});
|
|
20
|
-
}, [map, bounds, fitBounds]);
|
|
21
|
-
return null;
|
|
1
|
+
const DEFAULT_LABELS = {
|
|
2
|
+
loading: "Loading chart...",
|
|
3
|
+
empty: "No data available.",
|
|
4
|
+
retry: "Retry",
|
|
5
|
+
noValue: "No data"
|
|
22
6
|
};
|
|
23
|
-
MapViewport.displayName = "MapViewport";
|
|
24
7
|
export {
|
|
25
|
-
|
|
8
|
+
DEFAULT_LABELS
|
|
26
9
|
};
|
|
27
10
|
//# sourceMappingURL=index83.js.map
|
package/dist/index83.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index83.js","sources":["../src/
|
|
1
|
+
{"version":3,"file":"index83.js","sources":["../src/charts/GroupedBarChartCard/defaultLabels.ts"],"sourcesContent":["import type { GroupedBarChartLabels } from './GroupedBarChartCard.types';\n\n/** English defaults, matching the texts of the other chart cards. */\nexport const DEFAULT_LABELS: GroupedBarChartLabels = {\n loading: 'Loading chart...',\n empty: 'No data available.',\n retry: 'Retry',\n noValue: 'No data',\n};\n"],"names":[],"mappings":"AAGO,MAAM,iBAAwC;AAAA,EACnD,SAAS;AAAA,EACT,OAAO;AAAA,EACP,OAAO;AAAA,EACP,SAAS;AACX;"}
|
package/dist/index84.cjs
CHANGED
|
@@ -1,22 +1,42 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const root = "krc-root-ij8wB";
|
|
4
|
+
const header = "krc-header-poY0R";
|
|
5
|
+
const headerText = "krc-headerText-ShzOl";
|
|
6
|
+
const title = "krc-title-H3VpM";
|
|
7
|
+
const subtitle = "krc-subtitle-n6tgG";
|
|
8
|
+
const headerActions = "krc-headerActions-WY-hn";
|
|
9
|
+
const toolbar = "krc-toolbar-lMVmb";
|
|
10
|
+
const chartContainer = "krc-chartContainer-nlbUx";
|
|
11
|
+
const loading = "krc-loading-xub77";
|
|
12
|
+
const empty = "krc-empty-vJ4UM";
|
|
13
|
+
const error = "krc-error-d-7n5";
|
|
14
|
+
const retryButton = "krc-retryButton-LT8qy";
|
|
15
|
+
const styles = {
|
|
16
|
+
root,
|
|
17
|
+
header,
|
|
18
|
+
headerText,
|
|
19
|
+
title,
|
|
20
|
+
subtitle,
|
|
21
|
+
headerActions,
|
|
22
|
+
toolbar,
|
|
23
|
+
chartContainer,
|
|
24
|
+
loading,
|
|
25
|
+
empty,
|
|
26
|
+
error,
|
|
27
|
+
retryButton
|
|
28
|
+
};
|
|
29
|
+
exports.chartContainer = chartContainer;
|
|
30
|
+
exports.default = styles;
|
|
31
|
+
exports.empty = empty;
|
|
32
|
+
exports.error = error;
|
|
33
|
+
exports.header = header;
|
|
34
|
+
exports.headerActions = headerActions;
|
|
35
|
+
exports.headerText = headerText;
|
|
36
|
+
exports.loading = loading;
|
|
37
|
+
exports.retryButton = retryButton;
|
|
38
|
+
exports.root = root;
|
|
39
|
+
exports.subtitle = subtitle;
|
|
40
|
+
exports.title = title;
|
|
41
|
+
exports.toolbar = toolbar;
|
|
22
42
|
//# sourceMappingURL=index84.cjs.map
|
package/dist/index84.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index84.cjs","sources":[
|
|
1
|
+
{"version":3,"file":"index84.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|