@cardenelabs/cdl 0.40.1 → 0.40.3
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 +45 -1
- package/dist/index.cjs +87 -42
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +87 -42
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +87 -42
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +87 -42
- package/dist/react.js.map +1 -1
- package/package.json +1 -1
- package/src/kinds/chart-gauge.tsx +56 -11
- package/src/kinds/chart-pie.tsx +46 -4
- package/src/kinds/chart-slope.tsx +1 -65
- package/src/kinds/label-stack.ts +77 -0
package/dist/react.cjs
CHANGED
|
@@ -11859,6 +11859,38 @@ function interpolateColor(template, stateValues, fallback) {
|
|
|
11859
11859
|
if (!template) return fallback;
|
|
11860
11860
|
return interpolate(template, stateValues);
|
|
11861
11861
|
}
|
|
11862
|
+
|
|
11863
|
+
// src/kinds/label-stack.ts
|
|
11864
|
+
function \u540D\u672D\u306E\u6BB5\u3092\u307B\u3069\u304F(\u771F\u306Ey, \u9593\u9694, \u4E0A\u9650, \u4E0B\u9650) {
|
|
11865
|
+
const \u4EF6\u6570 = \u771F\u306Ey.length;
|
|
11866
|
+
if (\u4EF6\u6570 === 0) return [];
|
|
11867
|
+
const \u4E26\u3073 = \u771F\u306Ey.map((y, i) => ({ y, i })).sort((a, b) => a.y - b.y || a.i - b.i);
|
|
11868
|
+
const \u7D50\u679C = new Array(\u4EF6\u6570);
|
|
11869
|
+
if (\u9593\u9694 * (\u4EF6\u6570 - 1) > \u4E0B\u9650 - \u4E0A\u9650) {
|
|
11870
|
+
\u4E26\u3073.forEach((e, k) => {
|
|
11871
|
+
\u7D50\u679C[e.i] = \u4EF6\u6570 > 1 ? \u4E0A\u9650 + (\u4E0B\u9650 - \u4E0A\u9650) / (\u4EF6\u6570 - 1) * k : (\u4E0A\u9650 + \u4E0B\u9650) / 2;
|
|
11872
|
+
});
|
|
11873
|
+
return \u7D50\u679C;
|
|
11874
|
+
}
|
|
11875
|
+
const \u584A\u305F\u3061 = [];
|
|
11876
|
+
\u4E26\u3073.forEach((e, k) => {
|
|
11877
|
+
\u584A\u305F\u3061.push({ \u5408\u8A08: e.y - \u9593\u9694 * k, \u4EF6\u6570: 1 });
|
|
11878
|
+
while (\u584A\u305F\u3061.length >= 2) {
|
|
11879
|
+
const \u5F8C = \u584A\u305F\u3061[\u584A\u305F\u3061.length - 1];
|
|
11880
|
+
const \u524D = \u584A\u305F\u3061[\u584A\u305F\u3061.length - 2];
|
|
11881
|
+
if (\u524D.\u5408\u8A08 / \u524D.\u4EF6\u6570 <= \u5F8C.\u5408\u8A08 / \u5F8C.\u4EF6\u6570) break;
|
|
11882
|
+
\u584A\u305F\u3061.splice(\u584A\u305F\u3061.length - 2, 2, { \u5408\u8A08: \u524D.\u5408\u8A08 + \u5F8C.\u5408\u8A08, \u4EF6\u6570: \u524D.\u4EF6\u6570 + \u5F8C.\u4EF6\u6570 });
|
|
11883
|
+
}
|
|
11884
|
+
});
|
|
11885
|
+
const \u307B\u3069\u3044\u305F = [];
|
|
11886
|
+
\u584A\u305F\u3061.forEach((\u584A) => {
|
|
11887
|
+
const \u5E73\u5747 = \u584A.\u5408\u8A08 / \u584A.\u4EF6\u6570;
|
|
11888
|
+
for (let j = 0; j < \u584A.\u4EF6\u6570; j++) \u307B\u3069\u3044\u305F.push(\u5E73\u5747 + \u9593\u9694 * \u307B\u3069\u3044\u305F.length);
|
|
11889
|
+
});
|
|
11890
|
+
const \u305A\u308C = Math.max(0, \u4E0A\u9650 - \u307B\u3069\u3044\u305F[0]) - Math.max(0, \u307B\u3069\u3044\u305F[\u4EF6\u6570 - 1] - \u4E0B\u9650);
|
|
11891
|
+
\u4E26\u3073.forEach((e, k) => \u7D50\u679C[e.i] = \u307B\u3069\u3044\u305F[k] + \u305A\u308C);
|
|
11892
|
+
return \u7D50\u679C;
|
|
11893
|
+
}
|
|
11862
11894
|
function \u6247\u5F62\u306E\u5207\u308A\u629C\u304D(cx, cy, r, \u958B\u304D, \u8D77\u70B9 = -Math.PI / 2, \u5168\u5468 = Math.PI * 2) {
|
|
11863
11895
|
if (\u958B\u304D <= 0) return null;
|
|
11864
11896
|
if (\u958B\u304D >= 1 && \u5168\u5468 >= Math.PI * 2) return /* @__PURE__ */ jsxRuntime.jsx("circle", { cx, cy, r });
|
|
@@ -11939,6 +11971,26 @@ function ChartPieNode({
|
|
|
11939
11971
|
const \u5207\u308A\u629C\u304Did = `cdl-pie-draw-${instanceId}`;
|
|
11940
11972
|
const \u5F71id = `cdl-pie-shadow-${instanceId}`;
|
|
11941
11973
|
const \u958B\u304D\u59CB\u3081\u305F = (startFrac) => !drawing || \u958B\u304D > startFrac;
|
|
11974
|
+
const \u540D\u672D\u306E\u884C = \u5272\u5408\u306E\u7D1A + \u540D\u524D\u306E\u7D1A + 3;
|
|
11975
|
+
const \u540D\u672D\u306E\u5074 = slices.map((s) => Math.cos(s.\u4E2D\u592E\u89D2) >= 0);
|
|
11976
|
+
const \u540D\u672D\u306E\u771F\u306Ey = slices.map((s) => cy + (radius + \u5F15\u304D\u51FA\u3057) * Math.sin(s.\u4E2D\u592E\u89D2));
|
|
11977
|
+
const \u540D\u672D\u306Ey = (() => {
|
|
11978
|
+
const \u51FA\u3059 = [...\u540D\u672D\u306E\u771F\u306Ey];
|
|
11979
|
+
for (const \u5074 of [true, false]) {
|
|
11980
|
+
const \u756A\u53F7 = \u540D\u672D\u306E\u5074.flatMap((\u53F3, i) => \u53F3 === \u5074 ? [i] : []);
|
|
11981
|
+
if (\u756A\u53F7.length === 0) continue;
|
|
11982
|
+
const \u76F4\u3057\u305F = \u540D\u672D\u306E\u6BB5\u3092\u307B\u3069\u304F(
|
|
11983
|
+
\u756A\u53F7.map((i) => \u540D\u672D\u306E\u771F\u306Ey[i]),
|
|
11984
|
+
\u540D\u672D\u306E\u884C,
|
|
11985
|
+
PAD_TOP2 + \u540D\u672D\u306E\u7E26\u306E\u5F35\u308A\u51FA\u3057,
|
|
11986
|
+
node.h - PAD_BOTTOM2 - \u540D\u672D\u306E\u7E26\u306E\u5F35\u308A\u51FA\u3057
|
|
11987
|
+
);
|
|
11988
|
+
\u756A\u53F7.forEach((i, k) => \u51FA\u3059[i] = \u76F4\u3057\u305F[k]);
|
|
11989
|
+
}
|
|
11990
|
+
return \u51FA\u3059;
|
|
11991
|
+
})();
|
|
11992
|
+
const \u8098\u306Ex = (\u53F3) => cx + (\u53F3 ? 1 : -1) * (radius + \u5F15\u304D\u51FA\u3057);
|
|
11993
|
+
const \u5B57\u306Ex = (\u53F3) => \u8098\u306Ex(\u53F3) + (\u53F3 ? \u5B57\u307E\u3067\u306E\u9593 : -\u5B57\u307E\u3067\u306E\u9593);
|
|
11942
11994
|
return /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${x0} ${y0})`, children: [
|
|
11943
11995
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
11944
11996
|
"rect",
|
|
@@ -12011,12 +12063,12 @@ function ChartPieNode({
|
|
|
12011
12063
|
),
|
|
12012
12064
|
slices.map((s, idx) => {
|
|
12013
12065
|
if (!\u958B\u304D\u59CB\u3081\u305F(s.startFrac)) return null;
|
|
12014
|
-
const \u53F3 =
|
|
12066
|
+
const \u53F3 = \u540D\u672D\u306E\u5074[idx];
|
|
12015
12067
|
const \u7E01x = cx + radius * Math.cos(s.\u4E2D\u592E\u89D2);
|
|
12016
12068
|
const \u7E01y = cy + radius * Math.sin(s.\u4E2D\u592E\u89D2);
|
|
12017
|
-
const \u6298\u308Cx =
|
|
12018
|
-
const \u6298\u308Cy =
|
|
12019
|
-
const \u5B57x = \
|
|
12069
|
+
const \u6298\u308Cx = \u8098\u306Ex(\u53F3);
|
|
12070
|
+
const \u6298\u308Cy = \u540D\u672D\u306Ey[idx];
|
|
12071
|
+
const \u5B57x = \u5B57\u306Ex(\u53F3);
|
|
12020
12072
|
return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
|
|
12021
12073
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
12022
12074
|
"path",
|
|
@@ -12337,8 +12389,18 @@ function ChartGaugeNode({
|
|
|
12337
12389
|
const \u4F7F\u3048\u308B\u5E452 = node.w - PAD_SIDE * 2;
|
|
12338
12390
|
const \u540D\u524D\u306E\u7D1A = 14;
|
|
12339
12391
|
const \u6570\u5024\u306E\u7D1A = 13;
|
|
12340
|
-
const \
|
|
12392
|
+
const \u6BB5\u306E\u9AD8\u3055 = 56;
|
|
12341
12393
|
const \u5F27\u3068\u5185\u8A33\u306E\u9593 = 16;
|
|
12394
|
+
const \u5370\u306E\u5E452 = 30;
|
|
12395
|
+
const \u533A\u753B\u306E\u9593 = 12;
|
|
12396
|
+
const \u5185\u8A33\u306E\u6570\u5024 = data.map((d) => `${\u5B9F\u5024\u8868\u8A18(d.value)} ${\u5272\u5408\u8868\u8A18(d.value / total)}`);
|
|
12397
|
+
const \u4EF6\u306B\u8981\u308B\u5E45 = Math.max(\u5370\u306E\u5E452, ...\u5185\u8A33\u306E\u6570\u5024.map((t) => textWidth(t, \u6570\u5024\u306E\u7D1A))) + \u533A\u753B\u306E\u9593;
|
|
12398
|
+
const \u884C\u306E\u4EF6\u6570 = Math.min(
|
|
12399
|
+
Math.max(1, Math.floor(\u4F7F\u3048\u308B\u5E452 / Math.max(\u4EF6\u306B\u8981\u308B\u5E45, 1))),
|
|
12400
|
+
Math.max(data.length, 1)
|
|
12401
|
+
);
|
|
12402
|
+
const \u5185\u8A33\u306E\u6BB5\u6570 = Math.ceil(Math.max(data.length, 1) / \u884C\u306E\u4EF6\u6570);
|
|
12403
|
+
const \u5185\u8A33\u306E\u9AD8\u3055 = \u6BB5\u306E\u9AD8\u3055 * \u5185\u8A33\u306E\u6BB5\u6570;
|
|
12342
12404
|
const \u5F27\u306B\u4F7F\u3048\u308B\u9AD8\u3055 = \u4F7F\u3048\u308B\u9AD8\u3055 - \u5185\u8A33\u306E\u9AD8\u3055 - \u5F27\u3068\u5185\u8A33\u306E\u9593;
|
|
12343
12405
|
const radius = Math.max(24, Math.min(\u5F27\u306B\u4F7F\u3048\u308B\u9AD8\u3055, \u4F7F\u3048\u308B\u5E452 / 2));
|
|
12344
12406
|
const \u5185\u534A\u5F84 = radius * 0.62;
|
|
@@ -12367,7 +12429,7 @@ function ChartGaugeNode({
|
|
|
12367
12429
|
);
|
|
12368
12430
|
const \u5408\u8A08\u306E\u7D1A = Math.max(11, Math.round(\u7D1A\u306E\u5019\u88DC));
|
|
12369
12431
|
const \u898B\u51FA\u3057\u306E\u7D1A = Math.max(9, Math.round(\u5408\u8A08\u306E\u7D1A * 0.38));
|
|
12370
|
-
const \u5185\u8A33\u306E\u5E45 = \u4F7F\u3048\u308B\u5E452 /
|
|
12432
|
+
const \u5185\u8A33\u306E\u5E45 = \u4F7F\u3048\u308B\u5E452 / \u884C\u306E\u4EF6\u6570;
|
|
12371
12433
|
const \u5185\u8A33\u306Ey = cy + \u5F27\u3068\u5185\u8A33\u306E\u9593;
|
|
12372
12434
|
const \u4F38\u3073 = \u9032\u307F\u3092\u7573\u3080(drawing, progress);
|
|
12373
12435
|
const \u5207\u308A\u629C\u304Did = `cdl-gauge-draw-${react.useId().replace(/[^A-Za-z0-9_-]/g, "")}`;
|
|
@@ -12425,22 +12487,35 @@ function ChartGaugeNode({
|
|
|
12425
12487
|
}
|
|
12426
12488
|
),
|
|
12427
12489
|
data.map((d, idx) => {
|
|
12428
|
-
const
|
|
12429
|
-
const \
|
|
12490
|
+
const \u5217 = idx % \u884C\u306E\u4EF6\u6570;
|
|
12491
|
+
const \u6BB5 = Math.floor(idx / \u884C\u306E\u4EF6\u6570);
|
|
12492
|
+
const x = PAD_SIDE + \u5185\u8A33\u306E\u5E45 * \u5217;
|
|
12493
|
+
const y = \u5185\u8A33\u306Ey + \u6BB5\u306E\u9AD8\u3055 * \u6BB5;
|
|
12494
|
+
const \u53CE\u307E\u308B\u5E45 = \u5185\u8A33\u306E\u5E45 - \u533A\u753B\u306E\u9593;
|
|
12430
12495
|
return /* @__PURE__ */ jsxRuntime.jsxs("g", { "data-cdl-role": "chart-gauge-item", children: [
|
|
12431
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
12496
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
12497
|
+
"rect",
|
|
12498
|
+
{
|
|
12499
|
+
x,
|
|
12500
|
+
y,
|
|
12501
|
+
width: Math.max(4, Math.min(\u5370\u306E\u5E452, \u53CE\u307E\u308B\u5E45)),
|
|
12502
|
+
height: 4,
|
|
12503
|
+
rx: 2,
|
|
12504
|
+
fill: arcColor(d.tone, idx)
|
|
12505
|
+
}
|
|
12506
|
+
),
|
|
12432
12507
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
12433
12508
|
"text",
|
|
12434
12509
|
{
|
|
12435
12510
|
x,
|
|
12436
|
-
y:
|
|
12511
|
+
y: y + 26,
|
|
12437
12512
|
fontSize: \u540D\u524D\u306E\u7D1A,
|
|
12438
12513
|
fontWeight: 700,
|
|
12439
12514
|
fill: "var(--cdl-text, #1a1f2a)",
|
|
12440
|
-
children: \u5207\u308A\u8A70\u3081\u308B(d.label ?? "", \
|
|
12515
|
+
children: \u5207\u308A\u8A70\u3081\u308B(d.label ?? "", \u53CE\u307E\u308B\u5E45, \u540D\u524D\u306E\u7D1A)
|
|
12441
12516
|
}
|
|
12442
12517
|
),
|
|
12443
|
-
/* @__PURE__ */ jsxRuntime.jsx("text", { x, y:
|
|
12518
|
+
/* @__PURE__ */ jsxRuntime.jsx("text", { x, y: y + 46, fontSize: \u6570\u5024\u306E\u7D1A, fill: "var(--cdl-text-dim, #5a6270)", children: \u5207\u308A\u8A70\u3081\u308B(\u5185\u8A33\u306E\u6570\u5024[idx] ?? "", \u53CE\u307E\u308B\u5E45, \u6570\u5024\u306E\u7D1A) })
|
|
12444
12519
|
] }, `legend-${idx}`);
|
|
12445
12520
|
})
|
|
12446
12521
|
] });
|
|
@@ -13029,36 +13104,6 @@ function \u4E00\u89A7\u306E\u4E26\u3073(data, \u5DE6, \u53F3\u7AEF, \u7D1A) {
|
|
|
13029
13104
|
return out;
|
|
13030
13105
|
}
|
|
13031
13106
|
var \u7DDA\u306E\u6700\u5C0F\u5E45 = 120;
|
|
13032
|
-
function \u540D\u672D\u306E\u6BB5\u3092\u307B\u3069\u304F(\u771F\u306Ey, \u9593\u9694, \u4E0A\u9650, \u4E0B\u9650) {
|
|
13033
|
-
const \u4EF6\u6570 = \u771F\u306Ey.length;
|
|
13034
|
-
if (\u4EF6\u6570 === 0) return [];
|
|
13035
|
-
const \u4E26\u3073 = \u771F\u306Ey.map((y, i) => ({ y, i })).sort((a, b) => a.y - b.y || a.i - b.i);
|
|
13036
|
-
const \u7D50\u679C = new Array(\u4EF6\u6570);
|
|
13037
|
-
if (\u9593\u9694 * (\u4EF6\u6570 - 1) > \u4E0B\u9650 - \u4E0A\u9650) {
|
|
13038
|
-
\u4E26\u3073.forEach((e, k) => {
|
|
13039
|
-
\u7D50\u679C[e.i] = \u4EF6\u6570 > 1 ? \u4E0A\u9650 + (\u4E0B\u9650 - \u4E0A\u9650) / (\u4EF6\u6570 - 1) * k : (\u4E0A\u9650 + \u4E0B\u9650) / 2;
|
|
13040
|
-
});
|
|
13041
|
-
return \u7D50\u679C;
|
|
13042
|
-
}
|
|
13043
|
-
const \u584A\u305F\u3061 = [];
|
|
13044
|
-
\u4E26\u3073.forEach((e, k) => {
|
|
13045
|
-
\u584A\u305F\u3061.push({ \u5408\u8A08: e.y - \u9593\u9694 * k, \u4EF6\u6570: 1 });
|
|
13046
|
-
while (\u584A\u305F\u3061.length >= 2) {
|
|
13047
|
-
const \u5F8C = \u584A\u305F\u3061[\u584A\u305F\u3061.length - 1];
|
|
13048
|
-
const \u524D = \u584A\u305F\u3061[\u584A\u305F\u3061.length - 2];
|
|
13049
|
-
if (\u524D.\u5408\u8A08 / \u524D.\u4EF6\u6570 <= \u5F8C.\u5408\u8A08 / \u5F8C.\u4EF6\u6570) break;
|
|
13050
|
-
\u584A\u305F\u3061.splice(\u584A\u305F\u3061.length - 2, 2, { \u5408\u8A08: \u524D.\u5408\u8A08 + \u5F8C.\u5408\u8A08, \u4EF6\u6570: \u524D.\u4EF6\u6570 + \u5F8C.\u4EF6\u6570 });
|
|
13051
|
-
}
|
|
13052
|
-
});
|
|
13053
|
-
const \u307B\u3069\u3044\u305F = [];
|
|
13054
|
-
\u584A\u305F\u3061.forEach((\u584A) => {
|
|
13055
|
-
const \u5E73\u5747 = \u584A.\u5408\u8A08 / \u584A.\u4EF6\u6570;
|
|
13056
|
-
for (let j = 0; j < \u584A.\u4EF6\u6570; j++) \u307B\u3069\u3044\u305F.push(\u5E73\u5747 + \u9593\u9694 * \u307B\u3069\u3044\u305F.length);
|
|
13057
|
-
});
|
|
13058
|
-
const \u305A\u308C = Math.max(0, \u4E0A\u9650 - \u307B\u3069\u3044\u305F[0]) - Math.max(0, \u307B\u3069\u3044\u305F[\u4EF6\u6570 - 1] - \u4E0B\u9650);
|
|
13059
|
-
\u4E26\u3073.forEach((e, k) => \u7D50\u679C[e.i] = \u307B\u3069\u3044\u305F[k] + \u305A\u308C);
|
|
13060
|
-
return \u7D50\u679C;
|
|
13061
|
-
}
|
|
13062
13107
|
function ChartSlopeNode({
|
|
13063
13108
|
node,
|
|
13064
13109
|
active,
|