@cardenelabs/cdl 0.40.10 → 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 +33 -1
- package/dist/index.cjs +90 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +90 -8
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +90 -8
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +90 -8
- 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/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,37 @@ CDL (Chainome Diagram Language) の主要変更履歴。
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [0.40.11] - 2026-09-09
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- **棒 / 弧 / 半円 が受け取った前の時点の値を描くようにした** (#767)
|
|
13
|
+
|
|
14
|
+
`previous` を読むのは円 / 内訳の帯 / 2 時点の線 / 数値ひとつの図の 4 種だけで、残る
|
|
15
|
+
3 種は **受け取っておきながら 1 度も読んでいなかった**。 数値ひとつの図で同じ抜けを
|
|
16
|
+
直したのが `#763` で、そちらは画面に出る文字の数の記録が落ちて初めて見つかっている。
|
|
17
|
+
|
|
18
|
+
下流の見本帳が 49 組を描き比べて残りを洗い出した。
|
|
19
|
+
|
|
20
|
+
| 種別 | 置き方 | 役割名 |
|
|
21
|
+
|---|---|---|
|
|
22
|
+
| 棒 | 棒の上に、前の高さを指す印を 1 本引く | `chart-bar-previous` |
|
|
23
|
+
| 弧 | 弧の帯を横切る印を、前の割合の角度に置く | `chart-radial-previous` |
|
|
24
|
+
| 半円 | 内側に前の内訳の輪を 1 本足す | `chart-gauge-previous` |
|
|
25
|
+
|
|
26
|
+
**薄い色で後ろに重ねる形は採らない**。 前が今より小さい件で今の形に完全に隠れ、1 px も
|
|
27
|
+
見えなくなる。 棒と弧は 1 件が 1 本なので印を引き、半円は件を積んで合計を出す図
|
|
28
|
+
(半分の円グラフ) なので円グラフ (`#679`) と同じく内側の輪にする。
|
|
29
|
+
|
|
30
|
+
棒は縦軸の天井を前の時点まで含めて決めるようにした。 含めないと、前が今より大きい件で
|
|
31
|
+
印が枠の外へ出る。
|
|
32
|
+
|
|
33
|
+
書かない図では役割を 1 つも出さず、半円の輪の太さも変わらない。
|
|
34
|
+
|
|
35
|
+
対象外が 4 つある。 折れ線の `previous` (横軸そのものが時の流れで、点ごとの前の時点は
|
|
36
|
+
線の中に既にある)、100 個の印の `previous` (印が 200 個になり 100 個で読む前提が崩れる)、
|
|
37
|
+
折れ線の `tone` (線は 1 本 1 色)、棒の `tone` (`#747` が 1 色 + 濃さと決めた形)。
|
|
38
|
+
|
|
8
39
|
## [0.40.10] - 2026-09-08
|
|
9
40
|
|
|
10
41
|
### Fixed
|
|
@@ -2032,7 +2063,8 @@ Initial OSS release.
|
|
|
2032
2063
|
使わない = annotated tag を push しても GitHub Release は作られず、 Release を作っていない版で
|
|
2033
2064
|
行き止まりになる。
|
|
2034
2065
|
|
|
2035
|
-
[Unreleased]: https://github.com/cardene777/cdl/compare/v0.40.
|
|
2066
|
+
[Unreleased]: https://github.com/cardene777/cdl/compare/v0.40.11...HEAD
|
|
2067
|
+
[0.40.11]: https://github.com/cardene777/cdl/compare/v0.40.10...v0.40.11
|
|
2036
2068
|
[0.40.10]: https://github.com/cardene777/cdl/compare/v0.40.9...v0.40.10
|
|
2037
2069
|
[0.40.9]: https://github.com/cardene777/cdl/compare/v0.40.8...v0.40.9
|
|
2038
2070
|
[0.40.8]: https://github.com/cardene777/cdl/compare/v0.40.7...v0.40.8
|
package/dist/index.cjs
CHANGED
|
@@ -24961,18 +24961,35 @@ function ChartGaugeNode({
|
|
|
24961
24961
|
const \u5185\u534A\u5F84 = radius * 0.62;
|
|
24962
24962
|
const cx = node.w / 2;
|
|
24963
24963
|
const cy = PAD_TOP2 + radius;
|
|
24964
|
+
const \u524D\u3042\u308A = \u51FA\u3059\u4EF6\u305F\u3061.some((d) => d.previous !== void 0);
|
|
24965
|
+
const \u524D\u306E\u5024 = \u51FA\u3059\u4EF6\u305F\u3061.map((d) => Math.max(0, d.previous ?? 0));
|
|
24966
|
+
const \u524D\u306E\u5408\u8A08 = \u524D\u306E\u5024.reduce((acc, v) => acc + v, 0);
|
|
24967
|
+
const \u5E2F = radius - \u5185\u534A\u5F84;
|
|
24968
|
+
const \u4ECA\u306E\u5185\u534A\u5F84 = \u524D\u3042\u308A ? \u5185\u534A\u5F84 + \u5E2F * 0.42 : \u5185\u534A\u5F84;
|
|
24969
|
+
const \u524D\u306E\u5185\u534A\u5F84 = \u5185\u534A\u5F84;
|
|
24970
|
+
const \u524D\u306E\u5916\u534A\u5F84 = \u5185\u534A\u5F84 + \u5E2F * 0.32;
|
|
24971
|
+
const \u6247\u306E\u9053 = (a0, a1, \u5185, \u5916) => {
|
|
24972
|
+
const \u59161 = \u6975(cx, cy, \u5916, a0);
|
|
24973
|
+
const \u59162 = \u6975(cx, cy, \u5916, a1);
|
|
24974
|
+
const \u51852 = \u6975(cx, cy, \u5185, a1);
|
|
24975
|
+
const \u51851 = \u6975(cx, cy, \u5185, a0);
|
|
24976
|
+
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`;
|
|
24977
|
+
};
|
|
24964
24978
|
let cumFrac = 0;
|
|
24965
24979
|
const slices = \u51FA\u3059\u4EF6\u305F\u3061.map((d) => {
|
|
24966
24980
|
const frac = d.value / total;
|
|
24967
24981
|
const a0 = Math.PI + cumFrac * Math.PI;
|
|
24968
24982
|
const a1 = a0 + frac * Math.PI;
|
|
24969
24983
|
cumFrac += frac;
|
|
24970
|
-
|
|
24971
|
-
|
|
24972
|
-
|
|
24973
|
-
|
|
24974
|
-
const
|
|
24975
|
-
|
|
24984
|
+
return { d, frac, path: \u6247\u306E\u9053(a0, a1, \u4ECA\u306E\u5185\u534A\u5F84, radius) };
|
|
24985
|
+
});
|
|
24986
|
+
let \u524D\u306Ecum = 0;
|
|
24987
|
+
const \u524D\u306E\u6247\u305F\u3061 = \u51FA\u3059\u4EF6\u305F\u3061.map((d, idx) => {
|
|
24988
|
+
const frac = \u524D\u306E\u5408\u8A08 > 0 ? (\u524D\u306E\u5024[idx] ?? 0) / \u524D\u306E\u5408\u8A08 : 0;
|
|
24989
|
+
const a0 = Math.PI + \u524D\u306Ecum * Math.PI;
|
|
24990
|
+
const a1 = a0 + frac * Math.PI;
|
|
24991
|
+
\u524D\u306Ecum += frac;
|
|
24992
|
+
return { d, frac, path: \u6247\u306E\u9053(a0, a1, \u524D\u306E\u5185\u534A\u5F84, \u524D\u306E\u5916\u534A\u5F84) };
|
|
24976
24993
|
});
|
|
24977
24994
|
const \u5408\u8A08\u306E\u6587\u5B57 = \u5B9F\u5024\u8868\u8A18(Math.round(total));
|
|
24978
24995
|
const \u5358\u4F4D\u5E45 = Math.max(textWidth(\u5408\u8A08\u306E\u6587\u5B57, 100), 1) / 100;
|
|
@@ -25001,6 +25018,20 @@ function ChartGaugeNode({
|
|
|
25001
25018
|
},
|
|
25002
25019
|
`arc-${idx}`
|
|
25003
25020
|
));
|
|
25021
|
+
const \u524D\u306E\u5F27\u305F\u3061 = \u524D\u3042\u308A ? \u524D\u306E\u6247\u305F\u3061.map((s, idx) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
25022
|
+
"path",
|
|
25023
|
+
{
|
|
25024
|
+
"data-cdl-role": "chart-gauge-previous",
|
|
25025
|
+
"data-cdl-unresolved": s.d.unresolved ? "true" : void 0,
|
|
25026
|
+
d: s.path,
|
|
25027
|
+
fill: arcColor(s.d.tone, idx),
|
|
25028
|
+
fillOpacity: 0.45,
|
|
25029
|
+
stroke: "var(--cdl-node-fill, #ffffff)",
|
|
25030
|
+
strokeWidth: 1.5,
|
|
25031
|
+
strokeLinejoin: "round"
|
|
25032
|
+
},
|
|
25033
|
+
`prev-arc-${idx}`
|
|
25034
|
+
)) : null;
|
|
25004
25035
|
return /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${x0} ${y0})`, children: [
|
|
25005
25036
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
25006
25037
|
"rect",
|
|
@@ -25017,7 +25048,13 @@ function ChartGaugeNode({
|
|
|
25017
25048
|
}
|
|
25018
25049
|
),
|
|
25019
25050
|
drawing && /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.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) }) }),
|
|
25020
|
-
drawing ? /* @__PURE__ */ jsxRuntime.
|
|
25051
|
+
drawing ? /* @__PURE__ */ jsxRuntime.jsxs("g", { clipPath: `url(#${\u5207\u308A\u629C\u304Did})`, children: [
|
|
25052
|
+
\u524D\u306E\u5F27\u305F\u3061,
|
|
25053
|
+
\u5F27\u305F\u3061
|
|
25054
|
+
] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
25055
|
+
\u524D\u306E\u5F27\u305F\u3061,
|
|
25056
|
+
\u5F27\u305F\u3061
|
|
25057
|
+
] }),
|
|
25021
25058
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
25022
25059
|
"text",
|
|
25023
25060
|
{
|
|
@@ -25126,9 +25163,11 @@ function ChartRadialNode({
|
|
|
25126
25163
|
const rings = data.map((d, idx) => {
|
|
25127
25164
|
const frac = d.value / total;
|
|
25128
25165
|
const \u4E2D\u5FC3\u534A\u5F84 = \u5916\u534A\u5F84 - \u5E2F1\u672C * idx - \u5E2F1\u672C / 2;
|
|
25166
|
+
const \u524D\u306E\u5272\u5408 = d.previous === void 0 ? null : Math.max(0, d.previous) / total;
|
|
25129
25167
|
return {
|
|
25130
25168
|
d,
|
|
25131
25169
|
frac,
|
|
25170
|
+
\u524D\u306E\u5272\u5408,
|
|
25132
25171
|
\u4E2D\u5FC3\u534A\u5F84,
|
|
25133
25172
|
// 軌道は全周。 1 周ちょうどは弧で表せないので、 わずかに欠かして描く
|
|
25134
25173
|
\u8ECC\u9053: \u5F27\u306E\u90532(\u5F27\u306Ecx, cy, \u4E2D\u5FC3\u534A\u5F84, \u5E2F\u306E\u5E45, 0.9999),
|
|
@@ -25177,6 +25216,20 @@ function ChartRadialNode({
|
|
|
25177
25216
|
)),
|
|
25178
25217
|
drawing && /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.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) }) }),
|
|
25179
25218
|
drawing ? /* @__PURE__ */ jsxRuntime.jsx("g", { clipPath: `url(#${\u5207\u308A\u629C\u304Did})`, children: \u53D6\u308A\u5206\u305F\u3061 }) : \u53D6\u308A\u5206\u305F\u3061,
|
|
25219
|
+
rings.map(
|
|
25220
|
+
(r, idx) => r.\u524D\u306E\u5272\u5408 === null ? null : /* @__PURE__ */ jsxRuntime.jsx(
|
|
25221
|
+
"line",
|
|
25222
|
+
{
|
|
25223
|
+
"data-cdl-role": "chart-radial-previous",
|
|
25224
|
+
"data-cdl-unresolved": r.d.unresolved ? "true" : void 0,
|
|
25225
|
+
...\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)),
|
|
25226
|
+
stroke: "var(--cdl-text-mute, #8a8678)",
|
|
25227
|
+
strokeWidth: 2,
|
|
25228
|
+
strokeLinecap: "round"
|
|
25229
|
+
},
|
|
25230
|
+
`prev-${idx}`
|
|
25231
|
+
)
|
|
25232
|
+
),
|
|
25180
25233
|
data.map((d, idx) => {
|
|
25181
25234
|
const y = \u4E00\u89A7\u306E\u59CB\u307E\u308A + \u884C\u306E\u9AD8\u3055 * idx;
|
|
25182
25235
|
return /* @__PURE__ */ jsxRuntime.jsxs("g", { "data-cdl-role": "chart-radial-item", children: [
|
|
@@ -25216,6 +25269,18 @@ function \u5F27\u306E\u90532(cx, cy, \u4E2D\u5FC3\u534A\u5F84, \u5E45, \u5272\u5
|
|
|
25216
25269
|
const p = (r, a) => `${cx + r * Math.cos(a)} ${cy + r * Math.sin(a)}`;
|
|
25217
25270
|
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`;
|
|
25218
25271
|
}
|
|
25272
|
+
function \u5E2F\u3092\u6A2A\u5207\u308B\u5370(cx, cy, \u4E2D\u5FC3\u534A\u5F84, \u5E45, \u5272\u5408) {
|
|
25273
|
+
const \u306F\u307F\u51FA\u3057 = Math.min(\u5E45 * 0.3, 5);
|
|
25274
|
+
const \u5916 = \u4E2D\u5FC3\u534A\u5F84 + \u5E45 / 2 + \u306F\u307F\u51FA\u3057;
|
|
25275
|
+
const \u5185 = Math.max(0.5, \u4E2D\u5FC3\u534A\u5F84 - \u5E45 / 2 - \u306F\u307F\u51FA\u3057);
|
|
25276
|
+
const a = -Math.PI / 2 + \u5272\u5408 * Math.PI * 2;
|
|
25277
|
+
return {
|
|
25278
|
+
x1: cx + \u5185 * Math.cos(a),
|
|
25279
|
+
y1: cy + \u5185 * Math.sin(a),
|
|
25280
|
+
x2: cx + \u5916 * Math.cos(a),
|
|
25281
|
+
y2: cy + \u5916 * Math.sin(a)
|
|
25282
|
+
};
|
|
25283
|
+
}
|
|
25219
25284
|
function arcColor2(tone, idx) {
|
|
25220
25285
|
if (tone) return TONE[tone];
|
|
25221
25286
|
return chartSeriesColor(idx);
|
|
@@ -25966,8 +26031,9 @@ function ChartBarNode({
|
|
|
25966
26031
|
const canvasW = node.w - PAD_LEFT2 - PAD_RIGHT2;
|
|
25967
26032
|
const canvasH = node.h - PAD_TOP2 - PAD_BOTTOM2;
|
|
25968
26033
|
const vMax = data.length > 0 ? Math.max(...data.map((d) => d.value)) : 1;
|
|
26034
|
+
const \u8EF8\u306E\u3082\u3068 = data.length > 0 ? Math.max(vMax, ...data.map((d) => d.previous ?? 0)) : vMax;
|
|
25969
26035
|
const \u76EE\u76DB\u308A\u306E\u76EE\u5B892 = 4;
|
|
25970
|
-
const \u5929\u4E95\u306E\u3082\u3068 =
|
|
26036
|
+
const \u5929\u4E95\u306E\u3082\u3068 = \u8EF8\u306E\u3082\u3068 > 0 ? \u8EF8\u306E\u3082\u3068 : 1;
|
|
25971
26037
|
const \u523B\u307F = \u76EE\u76DB\u308A\u306E\u523B\u307F(\u5929\u4E95\u306E\u3082\u3068, \u76EE\u76DB\u308A\u306E\u76EE\u5B892);
|
|
25972
26038
|
const \u523B\u307F\u306E\u6841 = \u5C0F\u6570\u306E\u6841(\u523B\u307F);
|
|
25973
26039
|
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);
|
|
@@ -26060,8 +26126,24 @@ function ChartBarNode({
|
|
|
26060
26126
|
fillOpacity: \u6FC3\u3055(d.value)
|
|
26061
26127
|
}
|
|
26062
26128
|
);
|
|
26129
|
+
const \u5370\u306E\u306F\u307F\u51FA\u3057 = Math.min(barW * 0.18, 8);
|
|
26130
|
+
const \u524D\u306E\u5370 = d.previous === void 0 ? null : /* @__PURE__ */ jsxRuntime.jsx(
|
|
26131
|
+
"line",
|
|
26132
|
+
{
|
|
26133
|
+
"data-cdl-role": "chart-bar-previous",
|
|
26134
|
+
"data-cdl-unresolved": d.unresolved ? "true" : void 0,
|
|
26135
|
+
x1: bx - \u5370\u306E\u306F\u307F\u51FA\u3057,
|
|
26136
|
+
y1: yAt(Math.max(0, d.previous)),
|
|
26137
|
+
x2: bx + barW + \u5370\u306E\u306F\u307F\u51FA\u3057,
|
|
26138
|
+
y2: yAt(Math.max(0, d.previous)),
|
|
26139
|
+
stroke: "var(--cdl-text-mute, #8a8678)",
|
|
26140
|
+
strokeWidth: 1.5,
|
|
26141
|
+
strokeDasharray: "5 3"
|
|
26142
|
+
}
|
|
26143
|
+
);
|
|
26063
26144
|
return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
|
|
26064
26145
|
drawing ? /* @__PURE__ */ jsxRuntime.jsx("g", { transform: `translate(0 ${\u6A2A\u8EF8\u306Ey}) scale(1 ${\u4F38\u3073}) translate(0 ${-\u6A2A\u8EF8\u306Ey})`, children: \u68D2 }) : \u68D2,
|
|
26146
|
+
\u524D\u306E\u5370,
|
|
26065
26147
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
26066
26148
|
"text",
|
|
26067
26149
|
{
|