@cardenelabs/cdl 0.40.9 → 0.40.11
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 +62 -1
- package/dist/index.cjs +118 -12
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +118 -12
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +118 -12
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +118 -12
- package/dist/react.js.map +1 -1
- package/package.json +1 -1
- package/src/kinds/chart-bar.tsx +39 -1
- package/src/kinds/chart-gauge.tsx +81 -11
- package/src/kinds/chart-radial.tsx +59 -0
- package/src/kinds/chart-stat.tsx +56 -7
package/dist/react.js
CHANGED
|
@@ -12460,18 +12460,35 @@ function ChartGaugeNode({
|
|
|
12460
12460
|
const \u5185\u534A\u5F84 = radius * 0.62;
|
|
12461
12461
|
const cx = node.w / 2;
|
|
12462
12462
|
const cy = PAD_TOP2 + radius;
|
|
12463
|
+
const \u524D\u3042\u308A = \u51FA\u3059\u4EF6\u305F\u3061.some((d) => d.previous !== void 0);
|
|
12464
|
+
const \u524D\u306E\u5024 = \u51FA\u3059\u4EF6\u305F\u3061.map((d) => Math.max(0, d.previous ?? 0));
|
|
12465
|
+
const \u524D\u306E\u5408\u8A08 = \u524D\u306E\u5024.reduce((acc, v) => acc + v, 0);
|
|
12466
|
+
const \u5E2F = radius - \u5185\u534A\u5F84;
|
|
12467
|
+
const \u4ECA\u306E\u5185\u534A\u5F84 = \u524D\u3042\u308A ? \u5185\u534A\u5F84 + \u5E2F * 0.42 : \u5185\u534A\u5F84;
|
|
12468
|
+
const \u524D\u306E\u5185\u534A\u5F84 = \u5185\u534A\u5F84;
|
|
12469
|
+
const \u524D\u306E\u5916\u534A\u5F84 = \u5185\u534A\u5F84 + \u5E2F * 0.32;
|
|
12470
|
+
const \u6247\u306E\u9053 = (a0, a1, \u5185, \u5916) => {
|
|
12471
|
+
const \u59161 = \u6975(cx, cy, \u5916, a0);
|
|
12472
|
+
const \u59162 = \u6975(cx, cy, \u5916, a1);
|
|
12473
|
+
const \u51852 = \u6975(cx, cy, \u5185, a1);
|
|
12474
|
+
const \u51851 = \u6975(cx, cy, \u5185, a0);
|
|
12475
|
+
return `M ${\u59161.x} ${\u59161.y} A ${\u5916} ${\u5916} 0 0 1 ${\u59162.x} ${\u59162.y} L ${\u51852.x} ${\u51852.y} A ${\u5185} ${\u5185} 0 0 0 ${\u51851.x} ${\u51851.y} Z`;
|
|
12476
|
+
};
|
|
12463
12477
|
let cumFrac = 0;
|
|
12464
12478
|
const slices = \u51FA\u3059\u4EF6\u305F\u3061.map((d) => {
|
|
12465
12479
|
const frac = d.value / total;
|
|
12466
12480
|
const a0 = Math.PI + cumFrac * Math.PI;
|
|
12467
12481
|
const a1 = a0 + frac * Math.PI;
|
|
12468
12482
|
cumFrac += frac;
|
|
12469
|
-
|
|
12470
|
-
|
|
12471
|
-
|
|
12472
|
-
|
|
12473
|
-
const
|
|
12474
|
-
|
|
12483
|
+
return { d, frac, path: \u6247\u306E\u9053(a0, a1, \u4ECA\u306E\u5185\u534A\u5F84, radius) };
|
|
12484
|
+
});
|
|
12485
|
+
let \u524D\u306Ecum = 0;
|
|
12486
|
+
const \u524D\u306E\u6247\u305F\u3061 = \u51FA\u3059\u4EF6\u305F\u3061.map((d, idx) => {
|
|
12487
|
+
const frac = \u524D\u306E\u5408\u8A08 > 0 ? (\u524D\u306E\u5024[idx] ?? 0) / \u524D\u306E\u5408\u8A08 : 0;
|
|
12488
|
+
const a0 = Math.PI + \u524D\u306Ecum * Math.PI;
|
|
12489
|
+
const a1 = a0 + frac * Math.PI;
|
|
12490
|
+
\u524D\u306Ecum += frac;
|
|
12491
|
+
return { d, frac, path: \u6247\u306E\u9053(a0, a1, \u524D\u306E\u5185\u534A\u5F84, \u524D\u306E\u5916\u534A\u5F84) };
|
|
12475
12492
|
});
|
|
12476
12493
|
const \u5408\u8A08\u306E\u6587\u5B57 = \u5B9F\u5024\u8868\u8A18(Math.round(total));
|
|
12477
12494
|
const \u5358\u4F4D\u5E45 = Math.max(textWidth(\u5408\u8A08\u306E\u6587\u5B57, 100), 1) / 100;
|
|
@@ -12500,6 +12517,20 @@ function ChartGaugeNode({
|
|
|
12500
12517
|
},
|
|
12501
12518
|
`arc-${idx}`
|
|
12502
12519
|
));
|
|
12520
|
+
const \u524D\u306E\u5F27\u305F\u3061 = \u524D\u3042\u308A ? \u524D\u306E\u6247\u305F\u3061.map((s, idx) => /* @__PURE__ */ jsx(
|
|
12521
|
+
"path",
|
|
12522
|
+
{
|
|
12523
|
+
"data-cdl-role": "chart-gauge-previous",
|
|
12524
|
+
"data-cdl-unresolved": s.d.unresolved ? "true" : void 0,
|
|
12525
|
+
d: s.path,
|
|
12526
|
+
fill: arcColor(s.d.tone, idx),
|
|
12527
|
+
fillOpacity: 0.45,
|
|
12528
|
+
stroke: "var(--cdl-node-fill, #ffffff)",
|
|
12529
|
+
strokeWidth: 1.5,
|
|
12530
|
+
strokeLinejoin: "round"
|
|
12531
|
+
},
|
|
12532
|
+
`prev-arc-${idx}`
|
|
12533
|
+
)) : null;
|
|
12503
12534
|
return /* @__PURE__ */ jsxs("g", { transform: `translate(${x0} ${y0})`, children: [
|
|
12504
12535
|
/* @__PURE__ */ jsx(
|
|
12505
12536
|
"rect",
|
|
@@ -12516,7 +12547,13 @@ function ChartGaugeNode({
|
|
|
12516
12547
|
}
|
|
12517
12548
|
),
|
|
12518
12549
|
drawing && /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx("clipPath", { id: \u5207\u308A\u629C\u304Did, children: \u6247\u5F62\u306E\u5207\u308A\u629C\u304D(cx, cy, radius + 2, \u4F38\u3073, Math.PI, Math.PI) }) }),
|
|
12519
|
-
drawing ? /* @__PURE__ */
|
|
12550
|
+
drawing ? /* @__PURE__ */ jsxs("g", { clipPath: `url(#${\u5207\u308A\u629C\u304Did})`, children: [
|
|
12551
|
+
\u524D\u306E\u5F27\u305F\u3061,
|
|
12552
|
+
\u5F27\u305F\u3061
|
|
12553
|
+
] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
12554
|
+
\u524D\u306E\u5F27\u305F\u3061,
|
|
12555
|
+
\u5F27\u305F\u3061
|
|
12556
|
+
] }),
|
|
12520
12557
|
/* @__PURE__ */ jsx(
|
|
12521
12558
|
"text",
|
|
12522
12559
|
{
|
|
@@ -12625,9 +12662,11 @@ function ChartRadialNode({
|
|
|
12625
12662
|
const rings = data.map((d, idx) => {
|
|
12626
12663
|
const frac = d.value / total;
|
|
12627
12664
|
const \u4E2D\u5FC3\u534A\u5F84 = \u5916\u534A\u5F84 - \u5E2F1\u672C * idx - \u5E2F1\u672C / 2;
|
|
12665
|
+
const \u524D\u306E\u5272\u5408 = d.previous === void 0 ? null : Math.max(0, d.previous) / total;
|
|
12628
12666
|
return {
|
|
12629
12667
|
d,
|
|
12630
12668
|
frac,
|
|
12669
|
+
\u524D\u306E\u5272\u5408,
|
|
12631
12670
|
\u4E2D\u5FC3\u534A\u5F84,
|
|
12632
12671
|
// 軌道は全周。 1 周ちょうどは弧で表せないので、 わずかに欠かして描く
|
|
12633
12672
|
\u8ECC\u9053: \u5F27\u306E\u90532(\u5F27\u306Ecx, cy, \u4E2D\u5FC3\u534A\u5F84, \u5E2F\u306E\u5E45, 0.9999),
|
|
@@ -12676,6 +12715,20 @@ function ChartRadialNode({
|
|
|
12676
12715
|
)),
|
|
12677
12716
|
drawing && /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx("clipPath", { id: \u5207\u308A\u629C\u304Did, children: \u6247\u5F62\u306E\u5207\u308A\u629C\u304D(\u5F27\u306Ecx, cy, \u5916\u534A\u5F84 + \u5E2F\u306E\u5E45, \u958B\u304D) }) }),
|
|
12678
12717
|
drawing ? /* @__PURE__ */ jsx("g", { clipPath: `url(#${\u5207\u308A\u629C\u304Did})`, children: \u53D6\u308A\u5206\u305F\u3061 }) : \u53D6\u308A\u5206\u305F\u3061,
|
|
12718
|
+
rings.map(
|
|
12719
|
+
(r, idx) => r.\u524D\u306E\u5272\u5408 === null ? null : /* @__PURE__ */ jsx(
|
|
12720
|
+
"line",
|
|
12721
|
+
{
|
|
12722
|
+
"data-cdl-role": "chart-radial-previous",
|
|
12723
|
+
"data-cdl-unresolved": r.d.unresolved ? "true" : void 0,
|
|
12724
|
+
...\u5E2F\u3092\u6A2A\u5207\u308B\u5370(\u5F27\u306Ecx, cy, r.\u4E2D\u5FC3\u534A\u5F84, \u5E2F\u306E\u5E45, Math.min(r.\u524D\u306E\u5272\u5408, 0.9999)),
|
|
12725
|
+
stroke: "var(--cdl-text-mute, #8a8678)",
|
|
12726
|
+
strokeWidth: 2,
|
|
12727
|
+
strokeLinecap: "round"
|
|
12728
|
+
},
|
|
12729
|
+
`prev-${idx}`
|
|
12730
|
+
)
|
|
12731
|
+
),
|
|
12679
12732
|
data.map((d, idx) => {
|
|
12680
12733
|
const y = \u4E00\u89A7\u306E\u59CB\u307E\u308A + \u884C\u306E\u9AD8\u3055 * idx;
|
|
12681
12734
|
return /* @__PURE__ */ jsxs("g", { "data-cdl-role": "chart-radial-item", children: [
|
|
@@ -12715,6 +12768,18 @@ function \u5F27\u306E\u90532(cx, cy, \u4E2D\u5FC3\u534A\u5F84, \u5E45, \u5272\u5
|
|
|
12715
12768
|
const p = (r, a) => `${cx + r * Math.cos(a)} ${cy + r * Math.sin(a)}`;
|
|
12716
12769
|
return `M ${p(\u5916, a0)} A ${\u5916} ${\u5916} 0 ${large} 1 ${p(\u5916, a1)} L ${p(\u5185, a1)} A ${\u5185} ${\u5185} 0 ${large} 0 ${p(\u5185, a0)} Z`;
|
|
12717
12770
|
}
|
|
12771
|
+
function \u5E2F\u3092\u6A2A\u5207\u308B\u5370(cx, cy, \u4E2D\u5FC3\u534A\u5F84, \u5E45, \u5272\u5408) {
|
|
12772
|
+
const \u306F\u307F\u51FA\u3057 = Math.min(\u5E45 * 0.3, 5);
|
|
12773
|
+
const \u5916 = \u4E2D\u5FC3\u534A\u5F84 + \u5E45 / 2 + \u306F\u307F\u51FA\u3057;
|
|
12774
|
+
const \u5185 = Math.max(0.5, \u4E2D\u5FC3\u534A\u5F84 - \u5E45 / 2 - \u306F\u307F\u51FA\u3057);
|
|
12775
|
+
const a = -Math.PI / 2 + \u5272\u5408 * Math.PI * 2;
|
|
12776
|
+
return {
|
|
12777
|
+
x1: cx + \u5185 * Math.cos(a),
|
|
12778
|
+
y1: cy + \u5185 * Math.sin(a),
|
|
12779
|
+
x2: cx + \u5916 * Math.cos(a),
|
|
12780
|
+
y2: cy + \u5916 * Math.sin(a)
|
|
12781
|
+
};
|
|
12782
|
+
}
|
|
12718
12783
|
function arcColor2(tone, idx) {
|
|
12719
12784
|
if (tone) return TONE[tone];
|
|
12720
12785
|
return chartSeriesColor(idx);
|
|
@@ -12728,7 +12793,8 @@ function ChartStatNode({
|
|
|
12728
12793
|
const y0 = node.cy - node.h / 2;
|
|
12729
12794
|
const data = resolveChartData(node.chartData ?? [], stateValues);
|
|
12730
12795
|
const total = data.reduce((acc, d) => acc + d.value, 0) || 1;
|
|
12731
|
-
const \
|
|
12796
|
+
const \u524D\u3092\u51FA\u3059 = data.some((d) => d.previous !== void 0);
|
|
12797
|
+
const \u533A\u753B = \u533A\u753B\u306E\u5272\u4ED8(node.w, node.h, data.length, \u524D\u3092\u51FA\u3059);
|
|
12732
12798
|
const \u5272\u5408\u3092\u51FA\u3059 = data.length > 1;
|
|
12733
12799
|
return /* @__PURE__ */ jsxs("g", { transform: `translate(${x0} ${y0})`, children: [
|
|
12734
12800
|
/* @__PURE__ */ jsx(
|
|
@@ -12796,6 +12862,24 @@ function ChartStatNode({
|
|
|
12796
12862
|
children: \u6570\u5024
|
|
12797
12863
|
}
|
|
12798
12864
|
),
|
|
12865
|
+
d.previous !== void 0 && /* @__PURE__ */ jsx(
|
|
12866
|
+
"text",
|
|
12867
|
+
{
|
|
12868
|
+
"data-cdl-role": "chart-stat-previous",
|
|
12869
|
+
"data-cdl-unresolved": d.unresolved ? "true" : void 0,
|
|
12870
|
+
x: \u67A02.w / 2,
|
|
12871
|
+
y: \u533A\u753B.\u524D\u306Ey,
|
|
12872
|
+
fontSize: \u53CE\u3081\u308B\u7D1A(
|
|
12873
|
+
`\u524D ${\u5B9F\u5024\u8868\u8A18(d.previous)}`,
|
|
12874
|
+
\u67A02.w - \u533A\u753B.\u4F59\u767D * 2,
|
|
12875
|
+
\u533A\u753B.\u524D\u306E\u7D1A,
|
|
12876
|
+
8
|
|
12877
|
+
),
|
|
12878
|
+
textAnchor: "middle",
|
|
12879
|
+
fill: "var(--cdl-text-dim, #5a6270)",
|
|
12880
|
+
children: `\u524D ${\u5B9F\u5024\u8868\u8A18(d.previous)}`
|
|
12881
|
+
}
|
|
12882
|
+
),
|
|
12799
12883
|
\u5272\u5408\u3092\u51FA\u3059 && /* @__PURE__ */ jsx(
|
|
12800
12884
|
"circle",
|
|
12801
12885
|
{
|
|
@@ -12839,29 +12923,34 @@ function ChartStatNode({
|
|
|
12839
12923
|
})
|
|
12840
12924
|
] });
|
|
12841
12925
|
}
|
|
12842
|
-
function \u533A\u753B\u306E\u5272\u4ED8(w, h, \u4EF6\u6570) {
|
|
12926
|
+
function \u533A\u753B\u306E\u5272\u4ED8(w, h, \u4EF6\u6570, \u524D\u3092\u51FA\u3059) {
|
|
12843
12927
|
const \u4F59\u767D = 20;
|
|
12844
12928
|
const \u5E45 = \u4EF6\u6570 > 0 ? w / \u4EF6\u6570 : w;
|
|
12845
12929
|
const \u540D\u524D\u306E\u7D1A = 14;
|
|
12846
12930
|
const \u6570\u5024\u306E\u7D1A = 40;
|
|
12931
|
+
const \u524D\u306E\u7D1A = \u540D\u524D\u306E\u7D1A;
|
|
12847
12932
|
const \u5272\u5408\u306E\u7D1A = 12;
|
|
12848
12933
|
const \u5F27\u306E\u534A\u5F84 = 20;
|
|
12849
12934
|
const \u5F27\u306E\u592A\u3055 = 4;
|
|
12850
|
-
const \
|
|
12935
|
+
const \u524D\u306E\u9AD8\u3055 = \u524D\u3092\u51FA\u3059 ? 8 + \u524D\u306E\u7D1A : 0;
|
|
12936
|
+
const \u4E2D\u8EAB\u306E\u9AD8\u3055 = \u540D\u524D\u306E\u7D1A + 12 + \u6570\u5024\u306E\u7D1A + \u524D\u306E\u9AD8\u3055 + 16 + \u5F27\u306E\u534A\u5F84 * 2 + 8 + \u5272\u5408\u306E\u7D1A;
|
|
12851
12937
|
const \u4E0A\u7AEF = Math.max(\u4F59\u767D, (h - \u4E2D\u8EAB\u306E\u9AD8\u3055) / 2);
|
|
12852
12938
|
const \u540D\u524D\u306Ey = \u4E0A\u7AEF + \u540D\u524D\u306E\u7D1A;
|
|
12853
12939
|
const \u6570\u5024\u306Ey = \u540D\u524D\u306Ey + 12 + \u6570\u5024\u306E\u7D1A * 0.78;
|
|
12854
|
-
const \
|
|
12940
|
+
const \u524D\u306Ey = \u6570\u5024\u306Ey + 8 + \u524D\u306E\u7D1A;
|
|
12941
|
+
const \u5F27\u306Ey = \u6570\u5024\u306Ey + \u524D\u306E\u9AD8\u3055 + 16 + \u5F27\u306E\u534A\u5F84;
|
|
12855
12942
|
const \u5272\u5408\u306Ey = \u5F27\u306Ey + \u5F27\u306E\u534A\u5F84 + 8 + \u5272\u5408\u306E\u7D1A;
|
|
12856
12943
|
return {
|
|
12857
12944
|
\u4F59\u767D,
|
|
12858
12945
|
\u540D\u524D\u306E\u7D1A,
|
|
12859
12946
|
\u6570\u5024\u306E\u7D1A,
|
|
12947
|
+
\u524D\u306E\u7D1A,
|
|
12860
12948
|
\u5272\u5408\u306E\u7D1A,
|
|
12861
12949
|
\u5F27\u306E\u534A\u5F84,
|
|
12862
12950
|
\u5F27\u306E\u592A\u3055,
|
|
12863
12951
|
\u540D\u524D\u306Ey,
|
|
12864
12952
|
\u6570\u5024\u306Ey,
|
|
12953
|
+
\u524D\u306Ey,
|
|
12865
12954
|
\u5F27\u306Ey,
|
|
12866
12955
|
\u5272\u5408\u306Ey,
|
|
12867
12956
|
\u67A0: (idx) => ({ x: \u5E45 * idx, y: 0, w: \u5E45, h })
|
|
@@ -13441,8 +13530,9 @@ function ChartBarNode({
|
|
|
13441
13530
|
const canvasW = node.w - PAD_LEFT2 - PAD_RIGHT2;
|
|
13442
13531
|
const canvasH = node.h - PAD_TOP2 - PAD_BOTTOM2;
|
|
13443
13532
|
const vMax = data.length > 0 ? Math.max(...data.map((d) => d.value)) : 1;
|
|
13533
|
+
const \u8EF8\u306E\u3082\u3068 = data.length > 0 ? Math.max(vMax, ...data.map((d) => d.previous ?? 0)) : vMax;
|
|
13444
13534
|
const \u76EE\u76DB\u308A\u306E\u76EE\u5B892 = 4;
|
|
13445
|
-
const \u5929\u4E95\u306E\u3082\u3068 =
|
|
13535
|
+
const \u5929\u4E95\u306E\u3082\u3068 = \u8EF8\u306E\u3082\u3068 > 0 ? \u8EF8\u306E\u3082\u3068 : 1;
|
|
13446
13536
|
const \u523B\u307F = \u76EE\u76DB\u308A\u306E\u523B\u307F(\u5929\u4E95\u306E\u3082\u3068, \u76EE\u76DB\u308A\u306E\u76EE\u5B892);
|
|
13447
13537
|
const \u523B\u307F\u306E\u6841 = \u5C0F\u6570\u306E\u6841(\u523B\u307F);
|
|
13448
13538
|
const \u5929\u4E95 = \u6841\u3067\u4E38\u3081\u308B(Math.ceil(\u5929\u4E95\u306E\u3082\u3068 / \u523B\u307F - 1e-9) * \u523B\u307F, \u523B\u307F\u306E\u6841);
|
|
@@ -13535,8 +13625,24 @@ function ChartBarNode({
|
|
|
13535
13625
|
fillOpacity: \u6FC3\u3055(d.value)
|
|
13536
13626
|
}
|
|
13537
13627
|
);
|
|
13628
|
+
const \u5370\u306E\u306F\u307F\u51FA\u3057 = Math.min(barW * 0.18, 8);
|
|
13629
|
+
const \u524D\u306E\u5370 = d.previous === void 0 ? null : /* @__PURE__ */ jsx(
|
|
13630
|
+
"line",
|
|
13631
|
+
{
|
|
13632
|
+
"data-cdl-role": "chart-bar-previous",
|
|
13633
|
+
"data-cdl-unresolved": d.unresolved ? "true" : void 0,
|
|
13634
|
+
x1: bx - \u5370\u306E\u306F\u307F\u51FA\u3057,
|
|
13635
|
+
y1: yAt(Math.max(0, d.previous)),
|
|
13636
|
+
x2: bx + barW + \u5370\u306E\u306F\u307F\u51FA\u3057,
|
|
13637
|
+
y2: yAt(Math.max(0, d.previous)),
|
|
13638
|
+
stroke: "var(--cdl-text-mute, #8a8678)",
|
|
13639
|
+
strokeWidth: 1.5,
|
|
13640
|
+
strokeDasharray: "5 3"
|
|
13641
|
+
}
|
|
13642
|
+
);
|
|
13538
13643
|
return /* @__PURE__ */ jsxs("g", { children: [
|
|
13539
13644
|
drawing ? /* @__PURE__ */ jsx("g", { transform: `translate(0 ${\u6A2A\u8EF8\u306Ey}) scale(1 ${\u4F38\u3073}) translate(0 ${-\u6A2A\u8EF8\u306Ey})`, children: \u68D2 }) : \u68D2,
|
|
13645
|
+
\u524D\u306E\u5370,
|
|
13540
13646
|
/* @__PURE__ */ jsx(
|
|
13541
13647
|
"text",
|
|
13542
13648
|
{
|