@cardenelabs/cdl 0.36.0 → 0.37.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/README.md +32 -9
- package/dist/index.cjs +8 -3
- 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 +8 -3
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +8 -3
- 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 +8 -3
- package/dist/react.js.map +1 -1
- package/dist/{render-R7v2bfyz.d.cts → render-BYdmSviQ.d.cts} +19 -8
- package/dist/{render-R7v2bfyz.d.ts → render-BYdmSviQ.d.ts} +19 -8
- package/package.json +1 -1
- package/src/kinds/chart-slope.tsx +52 -8
- package/src/types.ts +19 -8
|
@@ -424,18 +424,29 @@ type CdlNode = {
|
|
|
424
424
|
*/
|
|
425
425
|
chartPieForm?: ChartPieForm;
|
|
426
426
|
/**
|
|
427
|
-
* chart-slope の見せ方 (cdl#702)。
|
|
427
|
+
* chart-slope の見せ方 (cdl#702 / cdl#707)。
|
|
428
428
|
*
|
|
429
|
-
*
|
|
430
|
-
*
|
|
429
|
+
* | 値 | 縦の位置 | 左の列 | 右の列 |
|
|
430
|
+
* |---|---|---|---|
|
|
431
|
+
* | `values` | 値 | 前の値 | 今の値 |
|
|
432
|
+
* | `delta` | 値 | 前の値 | 増減 (`+40` / `-90`) |
|
|
433
|
+
* | `rank` | 順位の段 (等間隔) | 前の値 | 今の値 |
|
|
431
434
|
*
|
|
432
|
-
*
|
|
435
|
+
* `values` と `delta` は縦の位置が同じで、右の列の字だけが違う。
|
|
436
|
+
* `前 + 増減 = 今` なので、 `delta` でも今の値は足せば戻る。
|
|
433
437
|
* 3 つ目の数を足さないので、 名札の高さも線を引く幅も変わらない。
|
|
434
438
|
*
|
|
439
|
+
* `rank` は **縦の位置** を変える (cdl#707)。 段を等間隔に置くので、線の交差が
|
|
440
|
+
* 順位の入れ替わりと 1 対 1 になり、水平線が「順位が動かなかった」 を意味する。
|
|
441
|
+
* 字は値のままにして、量が図から消えないようにしている。
|
|
442
|
+
*
|
|
443
|
+
* `rank` では「線の傾きが動いた量」 という読み方が成立しない (`+40` と `+30` が
|
|
444
|
+
* どちらも水平線になる)。 書いた図だけに効く割り切りで、量は字を読む。
|
|
445
|
+
*
|
|
435
446
|
* 型の外の値は `values` として描く = 見せ方が決まらないより、既定の形が出る方がよい。
|
|
436
447
|
*
|
|
437
|
-
* 前の時点を持たない図 (`previous` が 1 件も無い)
|
|
438
|
-
* この欄を書いても絵は変わらない。
|
|
448
|
+
* 前の時点を持たない図 (`previous` が 1 件も無い) は軸が 1 本で並べ替える相手が
|
|
449
|
+
* いないため、 この欄を書いても絵は変わらない。
|
|
439
450
|
*/
|
|
440
451
|
chartSlopeForm?: ChartSlopeForm;
|
|
441
452
|
/**
|
|
@@ -493,8 +504,8 @@ type BoundEnum<T extends string> = T | (string & {});
|
|
|
493
504
|
/** Chart 系 kind の 1 datum payload。 label + value + optional tone (color) */
|
|
494
505
|
/** chart-pie の見せ方 (cdl#684)。 SSOT は `kinds/chart-pie.tsx` */
|
|
495
506
|
type ChartPieForm = "ring" | "arcs" | "table";
|
|
496
|
-
/** chart-slope の見せ方 (cdl#702)。 SSOT は `kinds/chart-slope.tsx` */
|
|
497
|
-
type ChartSlopeForm = "values" | "delta";
|
|
507
|
+
/** chart-slope の見せ方 (cdl#702 / cdl#707)。 SSOT は `kinds/chart-slope.tsx` */
|
|
508
|
+
type ChartSlopeForm = "values" | "delta" | "rank";
|
|
498
509
|
type ChartDatumPayload = {
|
|
499
510
|
label: string;
|
|
500
511
|
/** 棒 / 折れ線 / 扇の大きさ。 `{signal}` で状態に追随する */
|
|
@@ -424,18 +424,29 @@ type CdlNode = {
|
|
|
424
424
|
*/
|
|
425
425
|
chartPieForm?: ChartPieForm;
|
|
426
426
|
/**
|
|
427
|
-
* chart-slope の見せ方 (cdl#702)。
|
|
427
|
+
* chart-slope の見せ方 (cdl#702 / cdl#707)。
|
|
428
428
|
*
|
|
429
|
-
*
|
|
430
|
-
*
|
|
429
|
+
* | 値 | 縦の位置 | 左の列 | 右の列 |
|
|
430
|
+
* |---|---|---|---|
|
|
431
|
+
* | `values` | 値 | 前の値 | 今の値 |
|
|
432
|
+
* | `delta` | 値 | 前の値 | 増減 (`+40` / `-90`) |
|
|
433
|
+
* | `rank` | 順位の段 (等間隔) | 前の値 | 今の値 |
|
|
431
434
|
*
|
|
432
|
-
*
|
|
435
|
+
* `values` と `delta` は縦の位置が同じで、右の列の字だけが違う。
|
|
436
|
+
* `前 + 増減 = 今` なので、 `delta` でも今の値は足せば戻る。
|
|
433
437
|
* 3 つ目の数を足さないので、 名札の高さも線を引く幅も変わらない。
|
|
434
438
|
*
|
|
439
|
+
* `rank` は **縦の位置** を変える (cdl#707)。 段を等間隔に置くので、線の交差が
|
|
440
|
+
* 順位の入れ替わりと 1 対 1 になり、水平線が「順位が動かなかった」 を意味する。
|
|
441
|
+
* 字は値のままにして、量が図から消えないようにしている。
|
|
442
|
+
*
|
|
443
|
+
* `rank` では「線の傾きが動いた量」 という読み方が成立しない (`+40` と `+30` が
|
|
444
|
+
* どちらも水平線になる)。 書いた図だけに効く割り切りで、量は字を読む。
|
|
445
|
+
*
|
|
435
446
|
* 型の外の値は `values` として描く = 見せ方が決まらないより、既定の形が出る方がよい。
|
|
436
447
|
*
|
|
437
|
-
* 前の時点を持たない図 (`previous` が 1 件も無い)
|
|
438
|
-
* この欄を書いても絵は変わらない。
|
|
448
|
+
* 前の時点を持たない図 (`previous` が 1 件も無い) は軸が 1 本で並べ替える相手が
|
|
449
|
+
* いないため、 この欄を書いても絵は変わらない。
|
|
439
450
|
*/
|
|
440
451
|
chartSlopeForm?: ChartSlopeForm;
|
|
441
452
|
/**
|
|
@@ -493,8 +504,8 @@ type BoundEnum<T extends string> = T | (string & {});
|
|
|
493
504
|
/** Chart 系 kind の 1 datum payload。 label + value + optional tone (color) */
|
|
494
505
|
/** chart-pie の見せ方 (cdl#684)。 SSOT は `kinds/chart-pie.tsx` */
|
|
495
506
|
type ChartPieForm = "ring" | "arcs" | "table";
|
|
496
|
-
/** chart-slope の見せ方 (cdl#702)。 SSOT は `kinds/chart-slope.tsx` */
|
|
497
|
-
type ChartSlopeForm = "values" | "delta";
|
|
507
|
+
/** chart-slope の見せ方 (cdl#702 / cdl#707)。 SSOT は `kinds/chart-slope.tsx` */
|
|
508
|
+
type ChartSlopeForm = "values" | "delta" | "rank";
|
|
498
509
|
type ChartDatumPayload = {
|
|
499
510
|
label: string;
|
|
500
511
|
/** 棒 / 折れ線 / 扇の大きさ。 `{signal}` で状態に追随する */
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cardenelabs/cdl",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.37.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",
|
|
@@ -50,6 +50,24 @@ import { 進みを畳む, 伸ばすdash } from "./draw-progress";
|
|
|
50
50
|
*
|
|
51
51
|
* 色を持たせるのは **名前だけ**。 値は太字の濃い色のままにして、数の読み比べを保つ。
|
|
52
52
|
* identity は色が、量は字が担う。
|
|
53
|
+
*
|
|
54
|
+
* ## 順位で見せる形は縦の位置を変える (cdl#707)
|
|
55
|
+
*
|
|
56
|
+
* この図は「線の交差が順位の入れ替わり」 を読ませるが、縦の位置は値なので **交差点の
|
|
57
|
+
* 位置が順位と噛み合わない**。 どの交差が本当に順位を変えた交差なのかは、値を読み比べ
|
|
58
|
+
* ないと決まらない。
|
|
59
|
+
*
|
|
60
|
+
* `rank` は段を等間隔に置く。 交差が入れ替わりと 1 対 1 になり、水平線が「順位が
|
|
61
|
+
* 動かなかった」 を意味する。
|
|
62
|
+
*
|
|
63
|
+
* **字は値のままにする**。 字も順位にすると `380 → 420` と `60 → 90` がどちらも
|
|
64
|
+
* 同じ水平線になり、量が図から完全に消える。 位置が順位を、字が量を担う。
|
|
65
|
+
*
|
|
66
|
+
* 順位と値を **両方** 出す案は落とした = 3 つ目の数を足す形で、実物に当てると値の列が
|
|
67
|
+
* 伸びて名前と重なった (`delta` で落としたのと同じ形、cdl#702)。
|
|
68
|
+
*
|
|
69
|
+
* **この形では「線の傾きが動いた量」 が成立しない**。 `+40` と `+30` がどちらも水平線に
|
|
70
|
+
* なる。 書いた図だけに効く割り切りで、量は字を読む。
|
|
53
71
|
*/
|
|
54
72
|
|
|
55
73
|
/** 線を引くのに最低限要る横幅。 名札が長い図でもこれだけは残す */
|
|
@@ -113,14 +131,39 @@ export function ChartSlopeNode({
|
|
|
113
131
|
尺の幅 > 0 ? 下端 - ((v - 最小) / 尺の幅) * (下端 - 上端) : (上端 + 下端) / 2;
|
|
114
132
|
|
|
115
133
|
/**
|
|
116
|
-
* 見せ方 (cdl#702)。 **型の外の値は `values` に落とす** =
|
|
117
|
-
*
|
|
134
|
+
* 見せ方 (cdl#702 / cdl#707)。 **型の外の値は `values` に落とす** = 見せ方が
|
|
135
|
+
* 決まらないより、既定の形が出る方がよい (円グラフと同じ判断)。
|
|
136
|
+
*
|
|
137
|
+
* **前の時点を持たない図では `values` に落とす**。 `delta` は引く相手がいないので、
|
|
138
|
+
* 増減を出すと「0 から増えた」 という書いていない主張になる (前を持たない件を 0 から
|
|
139
|
+
* 立ち上げるのは線を引くための扱いで、前が 0 だったという意味ではない)。
|
|
140
|
+
* `rank` は軸が 1 本で並べ替える相手がいない。
|
|
141
|
+
*/
|
|
142
|
+
const 書いた形 = node.chartSlopeForm;
|
|
143
|
+
const 形: ChartSlopeForm =
|
|
144
|
+
前あり && (書いた形 === "delta" || 書いた形 === "rank") ? 書いた形 : "values";
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* 順位。 **自分より大きい値の件数 + 1** で決める。
|
|
148
|
+
*
|
|
149
|
+
* 同じ値なら同じ順位になり、段も重なる。 無理に 1 つずつずらすと、書いていない差を
|
|
150
|
+
* 絵が主張することになる。
|
|
151
|
+
*/
|
|
152
|
+
const 順位を取る = (v: number, 全部: number[]): number =>
|
|
153
|
+
全部.filter((x) => x > v).length + 1;
|
|
154
|
+
|
|
155
|
+
const 前の順位 = 系列たち.map((s) => 順位を取る(s.前, 系列たち.map((x) => x.前)));
|
|
156
|
+
const 今の順位 = 系列たち.map((s) => 順位を取る(s.今, 系列たち.map((x) => x.今)));
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* 段の y。 1 位を上端、系列の数を下端にして等間隔に置く。
|
|
118
160
|
*
|
|
119
|
-
*
|
|
120
|
-
* 「0 から増えた」 という書いていない主張になる (前を持たない件を 0 から立ち上げるのは
|
|
121
|
-
* 線を引くための扱いで、前が 0 だったという意味ではない)。
|
|
161
|
+
* **系列が 1 本の図では割り算ができない**ので縦の中央に置く (尺の幅が 0 の時と同じ扱い)。
|
|
122
162
|
*/
|
|
123
|
-
const
|
|
163
|
+
const 段のyを取る = (順位: number): number =>
|
|
164
|
+
系列たち.length > 1
|
|
165
|
+
? 上端 + ((順位 - 1) / (系列たち.length - 1)) * (下端 - 上端)
|
|
166
|
+
: (上端 + 下端) / 2;
|
|
124
167
|
|
|
125
168
|
/**
|
|
126
169
|
* 増減の表記。 符号を前に付ける。
|
|
@@ -233,8 +276,9 @@ export function ChartSlopeNode({
|
|
|
233
276
|
)}
|
|
234
277
|
|
|
235
278
|
{系列たち.map((s, i) => {
|
|
236
|
-
|
|
237
|
-
const
|
|
279
|
+
// `rank` は縦の位置を順位の段にする (cdl#707)。 値の尺は使わない
|
|
280
|
+
const 左y = 形 === "rank" ? 段のyを取る(前の順位[i]!) : yを取る(s.前);
|
|
281
|
+
const 右y = 形 === "rank" ? 段のyを取る(今の順位[i]!) : yを取る(s.今);
|
|
238
282
|
const 未解決 = s.未解決 ? "true" : undefined;
|
|
239
283
|
return (
|
|
240
284
|
<g key={`slope-${i}`}>
|
package/src/types.ts
CHANGED
|
@@ -483,18 +483,29 @@ export type CdlNode = {
|
|
|
483
483
|
*/
|
|
484
484
|
chartPieForm?: ChartPieForm;
|
|
485
485
|
/**
|
|
486
|
-
* chart-slope の見せ方 (cdl#702)。
|
|
486
|
+
* chart-slope の見せ方 (cdl#702 / cdl#707)。
|
|
487
487
|
*
|
|
488
|
-
*
|
|
489
|
-
*
|
|
488
|
+
* | 値 | 縦の位置 | 左の列 | 右の列 |
|
|
489
|
+
* |---|---|---|---|
|
|
490
|
+
* | `values` | 値 | 前の値 | 今の値 |
|
|
491
|
+
* | `delta` | 値 | 前の値 | 増減 (`+40` / `-90`) |
|
|
492
|
+
* | `rank` | 順位の段 (等間隔) | 前の値 | 今の値 |
|
|
490
493
|
*
|
|
491
|
-
*
|
|
494
|
+
* `values` と `delta` は縦の位置が同じで、右の列の字だけが違う。
|
|
495
|
+
* `前 + 増減 = 今` なので、 `delta` でも今の値は足せば戻る。
|
|
492
496
|
* 3 つ目の数を足さないので、 名札の高さも線を引く幅も変わらない。
|
|
493
497
|
*
|
|
498
|
+
* `rank` は **縦の位置** を変える (cdl#707)。 段を等間隔に置くので、線の交差が
|
|
499
|
+
* 順位の入れ替わりと 1 対 1 になり、水平線が「順位が動かなかった」 を意味する。
|
|
500
|
+
* 字は値のままにして、量が図から消えないようにしている。
|
|
501
|
+
*
|
|
502
|
+
* `rank` では「線の傾きが動いた量」 という読み方が成立しない (`+40` と `+30` が
|
|
503
|
+
* どちらも水平線になる)。 書いた図だけに効く割り切りで、量は字を読む。
|
|
504
|
+
*
|
|
494
505
|
* 型の外の値は `values` として描く = 見せ方が決まらないより、既定の形が出る方がよい。
|
|
495
506
|
*
|
|
496
|
-
* 前の時点を持たない図 (`previous` が 1 件も無い)
|
|
497
|
-
* この欄を書いても絵は変わらない。
|
|
507
|
+
* 前の時点を持たない図 (`previous` が 1 件も無い) は軸が 1 本で並べ替える相手が
|
|
508
|
+
* いないため、 この欄を書いても絵は変わらない。
|
|
498
509
|
*/
|
|
499
510
|
chartSlopeForm?: ChartSlopeForm;
|
|
500
511
|
/**
|
|
@@ -556,8 +567,8 @@ export type BoundEnum<T extends string> = T | (string & {});
|
|
|
556
567
|
/** chart-pie の見せ方 (cdl#684)。 SSOT は `kinds/chart-pie.tsx` */
|
|
557
568
|
export type ChartPieForm = "ring" | "arcs" | "table";
|
|
558
569
|
|
|
559
|
-
/** chart-slope の見せ方 (cdl#702)。 SSOT は `kinds/chart-slope.tsx` */
|
|
560
|
-
export type ChartSlopeForm = "values" | "delta";
|
|
570
|
+
/** chart-slope の見せ方 (cdl#702 / cdl#707)。 SSOT は `kinds/chart-slope.tsx` */
|
|
571
|
+
export type ChartSlopeForm = "values" | "delta" | "rank";
|
|
561
572
|
|
|
562
573
|
export type ChartDatumPayload = {
|
|
563
574
|
label: string;
|