@cardenelabs/cdl 0.39.0 → 0.40.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/CHANGELOG.md +23 -1
- package/SPEC.md +1 -0
- package/dist/index.cjs +19 -5
- 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 +19 -5
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +19 -5
- 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 +19 -5
- 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-waffle.tsx +32 -2
- package/src/render/nodes.tsx +10 -2
- package/src/types.ts +1 -0
- package/src/validate.ts +2 -0
|
@@ -2356,6 +2356,7 @@ type CdlPhase = {
|
|
|
2356
2356
|
* | `chart-gauge` | 9 時 | 弧が上を通って 3 時へ伸びる | 合計と内訳は最初から出る |
|
|
2357
2357
|
* | `chart-radial` | 12 時 | 各輪が時計回りに開く | 軌道と一覧は最初から出る |
|
|
2358
2358
|
* | `chart-stacked-bar` | 左端 | 帯が右へ伸びる | 区画の字はその区画が広がった時 |
|
|
2359
|
+
* | `chart-waffle` | 左上 | 印が読む向きに 1 個ずつ埋まる | 一覧は最初から出る |
|
|
2359
2360
|
*
|
|
2360
2361
|
* 対象種別の一覧は `validate.ts` の `DRAW_KINDS` が持つ。
|
|
2361
2362
|
*
|
|
@@ -2356,6 +2356,7 @@ type CdlPhase = {
|
|
|
2356
2356
|
* | `chart-gauge` | 9 時 | 弧が上を通って 3 時へ伸びる | 合計と内訳は最初から出る |
|
|
2357
2357
|
* | `chart-radial` | 12 時 | 各輪が時計回りに開く | 軌道と一覧は最初から出る |
|
|
2358
2358
|
* | `chart-stacked-bar` | 左端 | 帯が右へ伸びる | 区画の字はその区画が広がった時 |
|
|
2359
|
+
* | `chart-waffle` | 左上 | 印が読む向きに 1 個ずつ埋まる | 一覧は最初から出る |
|
|
2359
2360
|
*
|
|
2360
2361
|
* 対象種別の一覧は `validate.ts` の `DRAW_KINDS` が持つ。
|
|
2361
2362
|
*
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cardenelabs/cdl",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.40.0",
|
|
4
4
|
"description": "CDL (Chainome Diagram Language). Mermaid-like declarative DSL that compiles to animated SVG diagrams. Built for blockchain / Solidity flows, generic enough for sequence / flow / state / ER / topology diagrams.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "cardene777",
|
|
@@ -4,6 +4,7 @@ import { TONE, chartSeriesColor } from "../render/tone";
|
|
|
4
4
|
import { resolveChartData } from "../render/payload-binding";
|
|
5
5
|
import { textWidth } from "./text-width";
|
|
6
6
|
import { 実値表記 } from "./chart-number";
|
|
7
|
+
import { 進みを畳む } from "./draw-progress";
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* chart-waffle kind ... 100 個の印で割合を **数えて確かめられる** 図 (cdl#552)。
|
|
@@ -24,6 +25,16 @@ import { 実値表記 } from "./chart-number";
|
|
|
24
25
|
*
|
|
25
26
|
* `印の割付` が最大剰余法で配る = まず切り捨てで配り、余った分を小数部の大きい件から 1 個ずつ
|
|
26
27
|
* 足す。 合計は定義上ちょうど 100 になる。
|
|
28
|
+
*
|
|
29
|
+
* ## 段の `draw` では印が読む向きに埋まる (cdl#719)
|
|
30
|
+
*
|
|
31
|
+
* 印は上の行から左詰めで配るので、埋まる順もそのまま読む向きになる。
|
|
32
|
+
*
|
|
33
|
+
* **切り抜きでは表せない**。 弧の 3 種 (cdl#715) は切り抜きで隠したが、この図に当てると
|
|
34
|
+
* 升の途中が斜めや半分で切れる = 1 個 = 1% の印が半分だけ出て、数えられない図になる。
|
|
35
|
+
*
|
|
36
|
+
* 代わりに **塗りだけを変える**。 印は 100 個とも最初から描き、進みまで届いていない印を
|
|
37
|
+
* 持ち主のいない印と同じ地の色にする。 升の形も持ち主の欄も触らない。
|
|
27
38
|
*/
|
|
28
39
|
|
|
29
40
|
/** 印の総数。 1 個 = 1% にするための値で、変えると「数えれば分かる」 が成り立たない */
|
|
@@ -70,10 +81,16 @@ export function ChartWaffleNode({
|
|
|
70
81
|
node,
|
|
71
82
|
active,
|
|
72
83
|
stateValues = {},
|
|
84
|
+
drawing = false,
|
|
85
|
+
progress = 1,
|
|
73
86
|
}: {
|
|
74
87
|
node: LaidNode;
|
|
75
88
|
active: boolean;
|
|
76
89
|
stateValues?: Record<string, string>;
|
|
90
|
+
/** この phase の `draw` に載っているか (cdl#719) */
|
|
91
|
+
drawing?: boolean;
|
|
92
|
+
/** phase の進み (0→1)。 `drawing` が true の時だけ読む */
|
|
93
|
+
progress?: number;
|
|
77
94
|
}): JSX.Element {
|
|
78
95
|
const x0 = node.cx - node.w / 2;
|
|
79
96
|
const y0 = node.cy - node.h / 2;
|
|
@@ -112,6 +129,14 @@ export function ChartWaffleNode({
|
|
|
112
129
|
for (let k = 0; k < n; k++) 持ち主.push(idx);
|
|
113
130
|
});
|
|
114
131
|
|
|
132
|
+
/**
|
|
133
|
+
* 埋まった印の数 (cdl#719)。 畳み方は `draw-progress.ts` が持つ。
|
|
134
|
+
*
|
|
135
|
+
* **四捨五入する**。 切り捨てると進み 1 の手前で 1 個足りない図が続き、切り上げると
|
|
136
|
+
* 進み 0 の時点で 1 個埋まる。 どちらも「数えれば分かる」 が崩れる。
|
|
137
|
+
*/
|
|
138
|
+
const 埋まった = Math.round(進みを畳む(drawing, progress) * WAFFLE_TOTAL);
|
|
139
|
+
|
|
115
140
|
const 一覧の始まり = PAD + (使える高さ - 行の高さ * data.length) / 2 + 行の高さ / 2;
|
|
116
141
|
|
|
117
142
|
return (
|
|
@@ -136,6 +161,11 @@ export function ChartWaffleNode({
|
|
|
136
161
|
const 行 = Math.floor(k / WAFFLE_COLS);
|
|
137
162
|
const 列 = k % WAFFLE_COLS;
|
|
138
163
|
const owner = 持ち主[k];
|
|
164
|
+
/**
|
|
165
|
+
* 色を付けるか (cdl#719)。 **持ち主の欄は触らない** = 印から持ち主を読む利用側が、
|
|
166
|
+
* 進みの途中で別の値を読まないようにする (形を表す属性と同じ扱い)。
|
|
167
|
+
*/
|
|
168
|
+
const 埋まっている = owner !== undefined && k < 埋まった;
|
|
139
169
|
return (
|
|
140
170
|
<rect
|
|
141
171
|
key={`cell-${k}`}
|
|
@@ -146,8 +176,8 @@ export function ChartWaffleNode({
|
|
|
146
176
|
width={印}
|
|
147
177
|
height={印}
|
|
148
178
|
rx={2}
|
|
149
|
-
fill={owner
|
|
150
|
-
fillOpacity={
|
|
179
|
+
fill={埋まっている ? 印の色(data[owner]!.tone, owner) : "var(--cdl-divider, #d4d4d8)"}
|
|
180
|
+
fillOpacity={埋まっている ? 1 : 0.35}
|
|
151
181
|
/>
|
|
152
182
|
);
|
|
153
183
|
})}
|
package/src/render/nodes.tsx
CHANGED
|
@@ -228,8 +228,16 @@ export function CdlNodeView({
|
|
|
228
228
|
/>
|
|
229
229
|
);
|
|
230
230
|
case "chart-waffle":
|
|
231
|
-
// 1 個 = 1% の印を 100 個。
|
|
232
|
-
return
|
|
231
|
+
// 1 個 = 1% の印を 100 個。 段の進みでは読む向きに 1 個ずつ埋まる (cdl#719)
|
|
232
|
+
return (
|
|
233
|
+
<ChartWaffleNode
|
|
234
|
+
node={resolvedNode}
|
|
235
|
+
active={active}
|
|
236
|
+
stateValues={stateValues}
|
|
237
|
+
drawing={drawing}
|
|
238
|
+
progress={progress}
|
|
239
|
+
/>
|
|
240
|
+
);
|
|
233
241
|
case "chart-stat":
|
|
234
242
|
// 数値が主役で、弧は輪郭だけの補助。 段の進みで数値が動く演出は既存の tween が担う
|
|
235
243
|
return <ChartStatNode node={resolvedNode} active={active} stateValues={stateValues} />;
|
package/src/types.ts
CHANGED
|
@@ -2433,6 +2433,7 @@ export type CdlPhase = {
|
|
|
2433
2433
|
* | `chart-gauge` | 9 時 | 弧が上を通って 3 時へ伸びる | 合計と内訳は最初から出る |
|
|
2434
2434
|
* | `chart-radial` | 12 時 | 各輪が時計回りに開く | 軌道と一覧は最初から出る |
|
|
2435
2435
|
* | `chart-stacked-bar` | 左端 | 帯が右へ伸びる | 区画の字はその区画が広がった時 |
|
|
2436
|
+
* | `chart-waffle` | 左上 | 印が読む向きに 1 個ずつ埋まる | 一覧は最初から出る |
|
|
2436
2437
|
*
|
|
2437
2438
|
* 対象種別の一覧は `validate.ts` の `DRAW_KINDS` が持つ。
|
|
2438
2439
|
*
|
package/src/validate.ts
CHANGED
|
@@ -26,6 +26,7 @@ const TONES = new Set<string>(TONE_NAMES);
|
|
|
26
26
|
* | `chart-gauge` | 9 時 | 弧が上を通って 3 時へ伸びる |
|
|
27
27
|
* | `chart-radial` | 12 時 | 各輪が時計回りに開く |
|
|
28
28
|
* | `chart-stacked-bar` | 左端 | 帯が右へ伸びる |
|
|
29
|
+
* | `chart-waffle` | 左上 | 印が読む向きに 1 個ずつ埋まる |
|
|
29
30
|
*/
|
|
30
31
|
export const DRAW_KINDS: ReadonlySet<string> = new Set([
|
|
31
32
|
"chart-line",
|
|
@@ -40,6 +41,7 @@ export const DRAW_KINDS: ReadonlySet<string> = new Set([
|
|
|
40
41
|
"chart-gauge",
|
|
41
42
|
"chart-radial",
|
|
42
43
|
"chart-stacked-bar",
|
|
44
|
+
"chart-waffle",
|
|
43
45
|
]);
|
|
44
46
|
const KINDS = new Set<string>(NODE_KINDS);
|
|
45
47
|
const ENG_BANNED = /\b(FUNCTION|STORAGE|EVENT LOG|BALANCES MAPPING|READ|WRITE|EMIT|CALL)\b/;
|