@cardenelabs/cdl 0.26.0 → 0.27.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 +37 -1
- package/dist/index.cjs +11 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -3
- package/dist/index.d.ts +7 -3
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +11 -1
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +11 -1
- package/dist/react.js.map +1 -1
- package/package.json +1 -1
- package/src/layout/nodes.ts +8 -4
- package/src/layout/spec.ts +31 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cardenelabs/cdl",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.27.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",
|
package/src/layout/nodes.ts
CHANGED
|
@@ -3,8 +3,9 @@ import type { CdlDiagram, LaidLane, LaidNode } from "../types";
|
|
|
3
3
|
import {
|
|
4
4
|
hasRenderedLabel,
|
|
5
5
|
labelPillH,
|
|
6
|
-
|
|
6
|
+
requiredMarkedRowsHeight,
|
|
7
7
|
requiredRowsHeight,
|
|
8
|
+
requiredVerticalLabelGap,
|
|
8
9
|
SUBTITLE_ROW_SHIFT,
|
|
9
10
|
中身から出す高さ,
|
|
10
11
|
目印なしの繰り上げ,
|
|
@@ -15,8 +16,8 @@ import { DEFAULT_NODE_GAP, HEADER_RESERVE, LANE_TOP_PAD, NODE_SIZE, STACK_GAP }
|
|
|
15
16
|
* kind=storage で rows[] を持つ node の自動 h を計算する。
|
|
16
17
|
*
|
|
17
18
|
* rows 数に応じて h が足りないと最後の rows が node 枠外にはみ出す (ER preset User entity 等)。
|
|
18
|
-
*
|
|
19
|
-
*
|
|
19
|
+
* 行頭の印を持たない箱は最終行の baseline、 持つ箱は最後の縞の帯から必要 h を出す。
|
|
20
|
+
* 描画側の式を SSOT にすることで、行送りを変えた時も字・帯・箱の下余白を一緒に動かす。
|
|
20
21
|
*
|
|
21
22
|
* 本関数が扱うのは `storage` だけ。 `GenericNode` 側の 21 種も rows を描くが、 そちらは
|
|
22
23
|
* 自動で h を伸ばさない (著者が指定した h をそのまま使う)。 行が枠外に出ていないかは
|
|
@@ -51,7 +52,10 @@ function autoStorageHeight(
|
|
|
51
52
|
// 下限を全体から外さないのは、印を持たない既存の図がすべて縮むため。 印を持つ行は
|
|
52
53
|
// 書き方そのものが変わる形なので、高さの決め方もそちらに寄せる
|
|
53
54
|
// 呼び名を出す箱は題の段が 1 行ぶん増える。 描き手 (`storage.tsx`) が行を下げる値と同じ
|
|
54
|
-
if (印あり)
|
|
55
|
+
if (印あり) {
|
|
56
|
+
const 帯から必要 = requiredMarkedRowsHeight("storage", n.rows.length) ?? defaultH;
|
|
57
|
+
return 帯から必要 + 呼び名の分;
|
|
58
|
+
}
|
|
55
59
|
return Math.max(defaultH, 必要);
|
|
56
60
|
}
|
|
57
61
|
|
package/src/layout/spec.ts
CHANGED
|
@@ -400,12 +400,24 @@ export function rowGlyphDepth(kind: string | undefined): number | null {
|
|
|
400
400
|
export const ROW_LAYOUT_BOTTOM_PAD = 20;
|
|
401
401
|
|
|
402
402
|
/**
|
|
403
|
-
*
|
|
403
|
+
* 行頭の印を持つ箱で、最後の縞の帯から枠の下端までに確保する余白。
|
|
404
|
+
*
|
|
405
|
+
* `kinds/storage.tsx` の枠の角の丸み (`rx={16}`) より大きくする。 角の丸みを下回ると、
|
|
406
|
+
* 縞の四角い角が丸みからはみ出して四隅に色が出る。
|
|
407
|
+
*/
|
|
408
|
+
export const ROW_STRIPE_BOTTOM_PAD = 24;
|
|
409
|
+
|
|
410
|
+
/**
|
|
411
|
+
* 行頭の印を **持たない** node に必要な高さ (SSOT)。
|
|
404
412
|
*
|
|
405
413
|
* 最終行の baseline から 1 行送りぶんとレイアウト余白を確保する。 行を描かない種別は `null`。
|
|
406
414
|
*
|
|
407
|
-
*
|
|
408
|
-
*
|
|
415
|
+
* **印を持つ箱はこの式で決まらない**。 そちらは縞の帯の下端を起点にする
|
|
416
|
+
* (`requiredMarkedRowsHeight`) = 帯を敷く箱では「行が終わる位置」 が帯の下端になるため、
|
|
417
|
+
* baseline から数えると帯の下に 1 行ぶんに近い余白が残る。
|
|
418
|
+
*
|
|
419
|
+
* 使うのは `layout/nodes.ts` の `autoStorageHeight` の印なし経路。 各所で式を写すと、
|
|
420
|
+
* 描画を変えた時に一部だけ古くなるので、下流も同じ形が要る時はここを引く。
|
|
409
421
|
*
|
|
410
422
|
* これは「そう置くとよい高さ」 で、 「これを下回ると破綻する高さ」 ではない。 後者は
|
|
411
423
|
* `rowBaselineY` + `rowGlyphDepth` で、 軸 16 はそちらを見る。
|
|
@@ -418,6 +430,22 @@ export function requiredRowsHeight(kind: string | undefined, rowCount: number):
|
|
|
418
430
|
return lastBaseline + pitch + ROW_LAYOUT_BOTTOM_PAD;
|
|
419
431
|
}
|
|
420
432
|
|
|
433
|
+
/**
|
|
434
|
+
* 行頭の印を持つ箱で、`rows` に必要な高さ。
|
|
435
|
+
*
|
|
436
|
+
* 最後の縞の帯の下端から `ROW_STRIPE_BOTTOM_PAD` を確保する。 帯と別の位置定数から
|
|
437
|
+
* 足し算すると、行送りを変えた時に字と帯だけが動いて下余白が取り残される。
|
|
438
|
+
*/
|
|
439
|
+
export function requiredMarkedRowsHeight(
|
|
440
|
+
kind: string | undefined,
|
|
441
|
+
rowCount: number,
|
|
442
|
+
): number | null {
|
|
443
|
+
if (rowCount <= 0) return null;
|
|
444
|
+
const lastBand = rowStripeBand(kind, rowCount - 1, 0);
|
|
445
|
+
if (lastBand === null) return null;
|
|
446
|
+
return lastBand.y + lastBand.h + ROW_STRIPE_BOTTOM_PAD;
|
|
447
|
+
}
|
|
448
|
+
|
|
421
449
|
/**
|
|
422
450
|
* その node が画面に出るか (SSOT)。
|
|
423
451
|
*
|