@cardenelabs/cdl 0.110.0 → 0.112.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 +65 -1
- package/dist/index.cjs +6 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +6 -4
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +6 -4
- package/dist/react.js.map +1 -1
- package/package.json +1 -1
- package/src/kinds/mind-map.tsx +18 -3
- package/src/kinds/shape-blockchain.tsx +7 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cardenelabs/cdl",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.112.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/kinds/mind-map.tsx
CHANGED
|
@@ -43,8 +43,23 @@ export const 枝の太さ = (段: number): number => Math.max(1.2, 3.2 - 段 * 0
|
|
|
43
43
|
const BRANCH_BOX_H_MAX = 48;
|
|
44
44
|
const SUB_BOX_H_MAX = 40;
|
|
45
45
|
|
|
46
|
-
/**
|
|
47
|
-
|
|
46
|
+
/**
|
|
47
|
+
* 隣り合う枝の縦の間隔の上限 (cdl#913 / cdl#962)。
|
|
48
|
+
*
|
|
49
|
+
* 置かないと、枝の少ない図で枝が細長く伸びる。 枝が左右 2 本ずつの図では割り算の側が
|
|
50
|
+
* 432 になるため、上限を置かなければ枝が 432 離れ、中心から出る曲線がほぼ縦になる。
|
|
51
|
+
*
|
|
52
|
+
* **上限は px の定数ではなく、枝が横に伸びる量から出す** (cdl#962)。
|
|
53
|
+
* 定数 96 にしていた間、横に 230 伸びる図でも縦は 96 までしか開かず、枝の傾きが
|
|
54
|
+
* 12 度にしかならなかった。 札の縦は 4 分の 1 しか埋まらない
|
|
55
|
+
* (見本帳の実測で 3 図とも 23% から 43%)。
|
|
56
|
+
*
|
|
57
|
+
* 横の伸びを超えない範囲で開けば、隣り合う枝の傾きは 45 度を超えない。
|
|
58
|
+
* 「細長く伸びる」 を px ではなく角度で抑える形になる。
|
|
59
|
+
*
|
|
60
|
+
* 枝が多い図では割り算の側が先に効くため、この上限を上げても位置は変わらない。
|
|
61
|
+
*/
|
|
62
|
+
const 縦の間隔の上限 = (枝の横の伸び: number): number => 枝の横の伸び;
|
|
48
63
|
|
|
49
64
|
/**
|
|
50
65
|
* mind-map kind ... 1 node に mindData (rootId / rootTitle / branches) を保持し、
|
|
@@ -444,7 +459,7 @@ export function computeMindMapLayout(
|
|
|
444
459
|
const laneBandH = Math.max(0, canvasH - BRANCH_BOX_H_MAX);
|
|
445
460
|
const rowGap =
|
|
446
461
|
sideLaneCount > 1
|
|
447
|
-
? Math.min(laneBandH / (sideLaneCount - 1),
|
|
462
|
+
? Math.min(laneBandH / (sideLaneCount - 1), 縦の間隔の上限(layer1XOffset))
|
|
448
463
|
: subBranchH + 14;
|
|
449
464
|
// box 高は必ず rowGap の一定割合に収める。 加算的な floor を置くと、 leaf が多く rowGap が
|
|
450
465
|
// 小さいとき floor が rowGap を超えて縦重なりする。 rowGap の 70% にすれば規模によらず gap が残る。
|
|
@@ -141,11 +141,16 @@ function bottomLabel(node: LaidNode, cx: number, plan: ReturnType<typeof labelPl
|
|
|
141
141
|
// 下限を当てるのは題の行だけ (#957) = 補いの行に当てると、収まっている行を大きくしてから
|
|
142
142
|
// 切ることになる
|
|
143
143
|
const 収める = (t: string, 大きさ: number, 字間: number, 題か = false) => {
|
|
144
|
+
// **縮める時と切る時で同じ測り方を使う** (#959)。 絵の中の字は等幅の字送りと字形の
|
|
145
|
+
// 大きい方を採る (`絵の中の字の幅`) ので、`幅の倍率` の `textWidth` で倍率を出すと
|
|
146
|
+
// 「収まる」 と言った行を切る側が「はみ出す」 と判定する (実測 = 幅 140 の箱で 9 種)
|
|
144
147
|
const 測る = (u: string, f: number, ls: number) => 字の幅(u, f) + ls * [...u].length;
|
|
148
|
+
const 素の幅 = 測る(t, 大きさ, 字間);
|
|
149
|
+
const 収まる = 素の幅 > node.w && node.w > 0 ? node.w / 素の幅 : 1;
|
|
145
150
|
const 下限 = 題か ? 切って収まる下限(t, 大きさ, 字間, node.w, 測る) : 0;
|
|
146
|
-
const 倍率 = Math.max(
|
|
151
|
+
const 倍率 = Math.max(収まる, 下限);
|
|
147
152
|
const size = 大きさ * 倍率;
|
|
148
|
-
return { 倍率, text: 帯で切る(t, size, node.w, (u, f) =>
|
|
153
|
+
return { 倍率, text: 帯で切る(t, size, node.w, (u, f) => 測る(u, f, 字間 * 倍率)) };
|
|
149
154
|
};
|
|
150
155
|
const 肩 = node.eyebrow && plan.肩書 ? 収める(node.eyebrow, plan.肩書.size, 2) : { 倍率: 1, text: node.eyebrow ?? "" };
|
|
151
156
|
const 名 = 収める(node.title ?? "", plan.名前.size, 0, true);
|