@cardenelabs/cdl 0.39.0 → 0.40.1
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 +44 -1
- package/SPEC.md +1 -0
- package/dist/index.cjs +67 -12
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +67 -12
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +67 -12
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +1 -1
- package/dist/react.d.ts +1 -1
- package/dist/react.js +67 -12
- package/dist/react.js.map +1 -1
- package/dist/{render-B1ArenZ7.d.cts → render-UGswDfAh.d.cts} +1 -0
- package/dist/{render-B1ArenZ7.d.ts → render-UGswDfAh.d.ts} +1 -0
- package/package.json +1 -1
- package/src/kinds/chart-slope.tsx +100 -8
- package/src/kinds/chart-waffle.tsx +32 -2
- package/src/render/nodes.tsx +10 -2
- package/src/types.ts +1 -0
- package/src/validate.ts +2 -0
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,47 @@ CDL (Chainome Diagram Language) の主要変更履歴。
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [0.40.1] - 2026-09-07
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- **傾き図で同じ値の系列の名札が重なって読めなくなるのを直した** (#723)
|
|
13
|
+
|
|
14
|
+
`chart-slope` は名札 (値と名前) を点と同じ縦の位置に置いていたので、値が同じ / 近い
|
|
15
|
+
系列が 2 件以上あると同じ場所に印字されていた。 実測で 59 と 59 の 2 件が完全に重なり、
|
|
16
|
+
値は太字が二重に乗った染み、名前は 2 つの語が重なった判読不能な塊になっていた。
|
|
17
|
+
完全一致でなくても起きる = 59 と 60 の差は 3.55 しかなく、字の高さ 14 に対して足りない。
|
|
18
|
+
|
|
19
|
+
**動かすのは名札だけ**。 点と線は真の位置に残す = 位置をずらすと、書いていない差を
|
|
20
|
+
絵が主張することになる (同順位を段でずらさない判断と同じ理由、#707)。 同じ値の点は
|
|
21
|
+
重なったままで、どの名札がどの系列かは名前の色が担う (#698)。
|
|
22
|
+
|
|
23
|
+
重なった連なりは **元の位置の平均を中心にして** 間隔ぶんずつ均等に置き直す。
|
|
24
|
+
上から順に押し下げるだけだと塊が片側へ寄り、点との対応が遠くなる。
|
|
25
|
+
|
|
26
|
+
枠に入り切らない件数の図では、どれか 1 つを枠の外へ出さず全部を等間隔に詰める。
|
|
27
|
+
|
|
28
|
+
## [0.40.0] - 2026-09-07
|
|
29
|
+
|
|
30
|
+
### Added
|
|
31
|
+
|
|
32
|
+
- **100 個の印も段の `draw` で 1 個ずつ埋まるようにした** (#719)
|
|
33
|
+
|
|
34
|
+
`chart-waffle` は上の行から左詰めで印を配る図なので、埋まる順もそのまま読む向きになる。
|
|
35
|
+
|
|
36
|
+
**切り抜きでは表せない**。 弧の 3 種 (#715) は切り抜きで隠したが、この図に当てると
|
|
37
|
+
升の途中が斜めや半分で切れる = 1 個 = 1% の印が半分だけ出て、数えられない図になる。
|
|
38
|
+
|
|
39
|
+
代わりに **塗りだけを変える**。 印は 100 個とも最初から描き、進みまで届いていない印を
|
|
40
|
+
持ち主のいない印と同じ地の色にする。 升の位置と大きさ、`data-cdl-waffle-owner` の
|
|
41
|
+
持ち主の欄はどちらも進みで変わらない。
|
|
42
|
+
|
|
43
|
+
左の一覧 (名前と印の数) は最初から全部出す。 この図は「数えて確かめられる」 ことが
|
|
44
|
+
存在理由で、一覧はその答え合わせの表になる。
|
|
45
|
+
|
|
46
|
+
これで図表で動きを持たないのは 指標 (`chart-stat`) と 四象限 (`quadrant-matrix`) の
|
|
47
|
+
2 つになった。 どちらも長さも順序も持たないため対象外のまま。
|
|
48
|
+
|
|
8
49
|
## [0.39.0] - 2026-09-07
|
|
9
50
|
|
|
10
51
|
### Added
|
|
@@ -1760,7 +1801,9 @@ Initial OSS release.
|
|
|
1760
1801
|
使わない = annotated tag を push しても GitHub Release は作られず、 Release を作っていない版で
|
|
1761
1802
|
行き止まりになる。
|
|
1762
1803
|
|
|
1763
|
-
[Unreleased]: https://github.com/cardene777/cdl/compare/v0.
|
|
1804
|
+
[Unreleased]: https://github.com/cardene777/cdl/compare/v0.40.1...HEAD
|
|
1805
|
+
[0.40.1]: https://github.com/cardene777/cdl/compare/v0.40.0...v0.40.1
|
|
1806
|
+
[0.40.0]: https://github.com/cardene777/cdl/compare/v0.39.0...v0.40.0
|
|
1764
1807
|
[0.39.0]: https://github.com/cardene777/cdl/compare/v0.38.0...v0.39.0
|
|
1765
1808
|
[0.38.0]: https://github.com/cardene777/cdl/compare/v0.37.0...v0.38.0
|
|
1766
1809
|
[0.37.0]: https://github.com/cardene777/cdl/compare/v0.36.0...v0.37.0
|
package/SPEC.md
CHANGED
|
@@ -149,6 +149,7 @@ phase でも線を引き直すことになる。
|
|
|
149
149
|
| `chart-gauge` | 9 時 | 弧が上を通って 3 時へ伸びる | 合計と内訳は最初から出る |
|
|
150
150
|
| `chart-radial` | 12 時 | 各輪が時計回りに開く | 軌道と一覧は最初から出る |
|
|
151
151
|
| `chart-stacked-bar` | 左端 | 帯が右へ伸びる | 区画の字はその区画が広がった時 |
|
|
152
|
+
| `chart-waffle` | 左上 | 印が読む向きに 1 個ずつ埋まる | 一覧は最初から出る |
|
|
152
153
|
|
|
153
154
|
対応種別の一覧は `validate.ts` の `DRAW_KINDS` が持ち、 知らせの文面もそこから組み立てる。
|
|
154
155
|
|
package/dist/index.cjs
CHANGED
|
@@ -20811,7 +20811,8 @@ var DRAW_KINDS = /* @__PURE__ */ new Set([
|
|
|
20811
20811
|
"funnel-stages",
|
|
20812
20812
|
"chart-gauge",
|
|
20813
20813
|
"chart-radial",
|
|
20814
|
-
"chart-stacked-bar"
|
|
20814
|
+
"chart-stacked-bar",
|
|
20815
|
+
"chart-waffle"
|
|
20815
20816
|
]);
|
|
20816
20817
|
var KINDS = new Set(NODE_KINDS);
|
|
20817
20818
|
var ENG_BANNED = /\b(FUNCTION|STORAGE|EVENT LOG|BALANCES MAPPING|READ|WRITE|EMIT|CALL)\b/;
|
|
@@ -25262,7 +25263,9 @@ function \u5370\u306E\u5272\u4ED8(\u5024) {
|
|
|
25262
25263
|
function ChartWaffleNode({
|
|
25263
25264
|
node,
|
|
25264
25265
|
active,
|
|
25265
|
-
stateValues = {}
|
|
25266
|
+
stateValues = {},
|
|
25267
|
+
drawing = false,
|
|
25268
|
+
progress = 1
|
|
25266
25269
|
}) {
|
|
25267
25270
|
const x0 = node.cx - node.w / 2;
|
|
25268
25271
|
const y0 = node.cy - node.h / 2;
|
|
@@ -25291,6 +25294,7 @@ function ChartWaffleNode({
|
|
|
25291
25294
|
\u914D\u5206.forEach((n, idx) => {
|
|
25292
25295
|
for (let k = 0; k < n; k++) \u6301\u3061\u4E3B.push(idx);
|
|
25293
25296
|
});
|
|
25297
|
+
const \u57CB\u307E\u3063\u305F = Math.round(\u9032\u307F\u3092\u7573\u3080(drawing, progress) * WAFFLE_TOTAL);
|
|
25294
25298
|
const \u4E00\u89A7\u306E\u59CB\u307E\u308A = PAD + (\u4F7F\u3048\u308B\u9AD8\u3055 - \u884C\u306E\u9AD8\u3055 * data.length) / 2 + \u884C\u306E\u9AD8\u3055 / 2;
|
|
25295
25299
|
return /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${x0} ${y0})`, children: [
|
|
25296
25300
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -25311,6 +25315,7 @@ function ChartWaffleNode({
|
|
|
25311
25315
|
const \u884C = Math.floor(k / WAFFLE_COLS);
|
|
25312
25316
|
const \u5217 = k % WAFFLE_COLS;
|
|
25313
25317
|
const owner = \u6301\u3061\u4E3B[k];
|
|
25318
|
+
const \u57CB\u307E\u3063\u3066\u3044\u308B = owner !== void 0 && k < \u57CB\u307E\u3063\u305F;
|
|
25314
25319
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
25315
25320
|
"rect",
|
|
25316
25321
|
{
|
|
@@ -25321,8 +25326,8 @@ function ChartWaffleNode({
|
|
|
25321
25326
|
width: \u5370,
|
|
25322
25327
|
height: \u5370,
|
|
25323
25328
|
rx: 2,
|
|
25324
|
-
fill:
|
|
25325
|
-
fillOpacity:
|
|
25329
|
+
fill: \u57CB\u307E\u3063\u3066\u3044\u308B ? \u5370\u306E\u82722(data[owner].tone, owner) : "var(--cdl-divider, #d4d4d8)",
|
|
25330
|
+
fillOpacity: \u57CB\u307E\u3063\u3066\u3044\u308B ? 1 : 0.35
|
|
25326
25331
|
},
|
|
25327
25332
|
`cell-${k}`
|
|
25328
25333
|
);
|
|
@@ -25523,6 +25528,36 @@ function \u4E00\u89A7\u306E\u4E26\u3073(data, \u5DE6, \u53F3\u7AEF, \u7D1A) {
|
|
|
25523
25528
|
return out;
|
|
25524
25529
|
}
|
|
25525
25530
|
var \u7DDA\u306E\u6700\u5C0F\u5E45 = 120;
|
|
25531
|
+
function \u540D\u672D\u306E\u6BB5\u3092\u307B\u3069\u304F(\u771F\u306Ey, \u9593\u9694, \u4E0A\u9650, \u4E0B\u9650) {
|
|
25532
|
+
const \u4EF6\u6570 = \u771F\u306Ey.length;
|
|
25533
|
+
if (\u4EF6\u6570 === 0) return [];
|
|
25534
|
+
const \u4E26\u3073 = \u771F\u306Ey.map((y, i) => ({ y, i })).sort((a, b) => a.y - b.y || a.i - b.i);
|
|
25535
|
+
const \u7D50\u679C = new Array(\u4EF6\u6570);
|
|
25536
|
+
if (\u9593\u9694 * (\u4EF6\u6570 - 1) > \u4E0B\u9650 - \u4E0A\u9650) {
|
|
25537
|
+
\u4E26\u3073.forEach((e, k) => {
|
|
25538
|
+
\u7D50\u679C[e.i] = \u4EF6\u6570 > 1 ? \u4E0A\u9650 + (\u4E0B\u9650 - \u4E0A\u9650) / (\u4EF6\u6570 - 1) * k : (\u4E0A\u9650 + \u4E0B\u9650) / 2;
|
|
25539
|
+
});
|
|
25540
|
+
return \u7D50\u679C;
|
|
25541
|
+
}
|
|
25542
|
+
const \u584A\u305F\u3061 = [];
|
|
25543
|
+
\u4E26\u3073.forEach((e, k) => {
|
|
25544
|
+
\u584A\u305F\u3061.push({ \u5408\u8A08: e.y - \u9593\u9694 * k, \u4EF6\u6570: 1 });
|
|
25545
|
+
while (\u584A\u305F\u3061.length >= 2) {
|
|
25546
|
+
const \u5F8C = \u584A\u305F\u3061[\u584A\u305F\u3061.length - 1];
|
|
25547
|
+
const \u524D = \u584A\u305F\u3061[\u584A\u305F\u3061.length - 2];
|
|
25548
|
+
if (\u524D.\u5408\u8A08 / \u524D.\u4EF6\u6570 <= \u5F8C.\u5408\u8A08 / \u5F8C.\u4EF6\u6570) break;
|
|
25549
|
+
\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 });
|
|
25550
|
+
}
|
|
25551
|
+
});
|
|
25552
|
+
const \u307B\u3069\u3044\u305F = [];
|
|
25553
|
+
\u584A\u305F\u3061.forEach((\u584A) => {
|
|
25554
|
+
const \u5E73\u5747 = \u584A.\u5408\u8A08 / \u584A.\u4EF6\u6570;
|
|
25555
|
+
for (let j = 0; j < \u584A.\u4EF6\u6570; j++) \u307B\u3069\u3044\u305F.push(\u5E73\u5747 + \u9593\u9694 * \u307B\u3069\u3044\u305F.length);
|
|
25556
|
+
});
|
|
25557
|
+
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);
|
|
25558
|
+
\u4E26\u3073.forEach((e, k) => \u7D50\u679C[e.i] = \u307B\u3069\u3044\u305F[k] + \u305A\u308C);
|
|
25559
|
+
return \u7D50\u679C;
|
|
25560
|
+
}
|
|
25526
25561
|
function ChartSlopeNode({
|
|
25527
25562
|
node,
|
|
25528
25563
|
active,
|
|
@@ -25588,6 +25623,15 @@ function ChartSlopeNode({
|
|
|
25588
25623
|
const \u53F3\u8EF8x = \u524D\u3042\u308A ? Math.min(node.w - PAD, Math.max(node.w - PAD - \u53F3\u306E\u4F59\u767D, node.w / 2 + \u7DDA\u306E\u6700\u5C0F\u5E45 / 2)) : \u5DE6\u8EF8x;
|
|
25589
25624
|
const \u4F38\u3073 = \u9032\u307F\u3092\u7573\u3080(drawing, progress);
|
|
25590
25625
|
const \u53F3\u3092\u51FA\u3059 = !drawing || \u4F38\u3073 >= 1;
|
|
25626
|
+
const \u5DE6\u306E\u70B9y = \u7CFB\u5217\u305F\u3061.map(
|
|
25627
|
+
(s, i) => \u5F62 === "rank" ? \u6BB5\u306Ey\u3092\u53D6\u308B(\u524D\u306E\u9806\u4F4D[i]) : y\u3092\u53D6\u308B(s.\u524D)
|
|
25628
|
+
);
|
|
25629
|
+
const \u53F3\u306E\u70B9y = \u7CFB\u5217\u305F\u3061.map(
|
|
25630
|
+
(s, i) => \u5F62 === "rank" ? \u6BB5\u306Ey\u3092\u53D6\u308B(\u4ECA\u306E\u9806\u4F4D[i]) : y\u3092\u53D6\u308B(s.\u4ECA)
|
|
25631
|
+
);
|
|
25632
|
+
const \u540D\u672D\u306E\u884C = Math.max(\u5024\u306E\u7D1A, \u540D\u524D\u306E\u7D1A) + 4;
|
|
25633
|
+
const \u5DE6\u306E\u540D\u672Dy = \u524D\u3042\u308A ? \u540D\u672D\u306E\u6BB5\u3092\u307B\u3069\u304F(\u5DE6\u306E\u70B9y, \u540D\u672D\u306E\u884C, \u4E0A\u7AEF, \u4E0B\u7AEF) : \u5DE6\u306E\u70B9y;
|
|
25634
|
+
const \u53F3\u306E\u540D\u672Dy = \u540D\u672D\u306E\u6BB5\u3092\u307B\u3069\u304F(\u53F3\u306E\u70B9y, \u540D\u672D\u306E\u884C, \u4E0A\u7AEF, \u4E0B\u7AEF);
|
|
25591
25635
|
return /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${x0} ${y0})`, children: [
|
|
25592
25636
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
25593
25637
|
"rect",
|
|
@@ -25645,8 +25689,10 @@ function ChartSlopeNode({
|
|
|
25645
25689
|
)
|
|
25646
25690
|
] }),
|
|
25647
25691
|
\u7CFB\u5217\u305F\u3061.map((s, i) => {
|
|
25648
|
-
const \u5DE6y = \
|
|
25649
|
-
const \u53F3y = \
|
|
25692
|
+
const \u5DE6y = \u5DE6\u306E\u70B9y[i];
|
|
25693
|
+
const \u53F3y = \u53F3\u306E\u70B9y[i];
|
|
25694
|
+
const \u5DE6\u672Dy = \u5DE6\u306E\u540D\u672Dy[i];
|
|
25695
|
+
const \u53F3\u672Dy = \u53F3\u306E\u540D\u672Dy[i];
|
|
25650
25696
|
const \u672A\u89E3\u6C7A = s.\u672A\u89E3\u6C7A ? "true" : void 0;
|
|
25651
25697
|
return /* @__PURE__ */ jsxRuntime.jsxs("g", { children: [
|
|
25652
25698
|
\u524D\u3042\u308A && /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -25690,7 +25736,7 @@ function ChartSlopeNode({
|
|
|
25690
25736
|
{
|
|
25691
25737
|
"data-cdl-role": "chart-slope-value",
|
|
25692
25738
|
x: \u5DE6\u8EF8x - \u8EF8\u304B\u3089\u5024\u307E\u3067,
|
|
25693
|
-
y: \
|
|
25739
|
+
y: \u5DE6\u672Dy + 5,
|
|
25694
25740
|
textAnchor: "end",
|
|
25695
25741
|
fontSize: \u5024\u306E\u7D1A,
|
|
25696
25742
|
fontWeight: 600,
|
|
@@ -25703,7 +25749,7 @@ function ChartSlopeNode({
|
|
|
25703
25749
|
{
|
|
25704
25750
|
"data-cdl-role": "chart-slope-name",
|
|
25705
25751
|
x: \u5DE6\u8EF8x - \u8EF8\u304B\u3089\u5024\u307E\u3067 - \u5DE6\u5024\u5E45 - \u5024\u304B\u3089\u540D\u524D\u307E\u3067,
|
|
25706
|
-
y: \
|
|
25752
|
+
y: \u5DE6\u672Dy + 5,
|
|
25707
25753
|
textAnchor: "end",
|
|
25708
25754
|
fontSize: \u540D\u524D\u306E\u7D1A,
|
|
25709
25755
|
fill: s.\u8272,
|
|
@@ -25715,7 +25761,7 @@ function ChartSlopeNode({
|
|
|
25715
25761
|
{
|
|
25716
25762
|
"data-cdl-role": "chart-slope-name",
|
|
25717
25763
|
x: \u5DE6\u8EF8x - \u8EF8\u304B\u3089\u5024\u307E\u3067,
|
|
25718
|
-
y: \
|
|
25764
|
+
y: \u53F3\u672Dy + 5,
|
|
25719
25765
|
textAnchor: "end",
|
|
25720
25766
|
fontSize: \u540D\u524D\u306E\u7D1A,
|
|
25721
25767
|
fill: s.\u8272,
|
|
@@ -25728,7 +25774,7 @@ function ChartSlopeNode({
|
|
|
25728
25774
|
{
|
|
25729
25775
|
"data-cdl-role": \u5F62 === "delta" ? "chart-slope-delta" : "chart-slope-value",
|
|
25730
25776
|
x: \u53F3\u8EF8x + \u8EF8\u304B\u3089\u5024\u307E\u3067,
|
|
25731
|
-
y: \
|
|
25777
|
+
y: \u53F3\u672Dy + 5,
|
|
25732
25778
|
fontSize: \u5024\u306E\u7D1A,
|
|
25733
25779
|
fontWeight: 600,
|
|
25734
25780
|
fill: "var(--cdl-text, #1a1f2a)",
|
|
@@ -25740,7 +25786,7 @@ function ChartSlopeNode({
|
|
|
25740
25786
|
{
|
|
25741
25787
|
"data-cdl-role": "chart-slope-name",
|
|
25742
25788
|
x: \u53F3\u8EF8x + \u8EF8\u304B\u3089\u5024\u307E\u3067 + \u53F3\u5024\u5E45 + \u5024\u304B\u3089\u540D\u524D\u307E\u3067,
|
|
25743
|
-
y: \
|
|
25789
|
+
y: \u53F3\u672Dy + 5,
|
|
25744
25790
|
fontSize: \u540D\u524D\u306E\u7D1A,
|
|
25745
25791
|
fill: s.\u8272,
|
|
25746
25792
|
children: s.\u540D\u524D
|
|
@@ -30470,7 +30516,16 @@ function CdlNodeView({
|
|
|
30470
30516
|
}
|
|
30471
30517
|
);
|
|
30472
30518
|
case "chart-waffle":
|
|
30473
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
30519
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
30520
|
+
ChartWaffleNode,
|
|
30521
|
+
{
|
|
30522
|
+
node: resolvedNode,
|
|
30523
|
+
active,
|
|
30524
|
+
stateValues,
|
|
30525
|
+
drawing,
|
|
30526
|
+
progress
|
|
30527
|
+
}
|
|
30528
|
+
);
|
|
30474
30529
|
case "chart-stat":
|
|
30475
30530
|
return /* @__PURE__ */ jsxRuntime.jsx(ChartStatNode, { node: resolvedNode, active, stateValues });
|
|
30476
30531
|
case "chart-radial":
|