@cardenelabs/cdl 0.45.0 → 0.46.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 +26 -1
- package/dist/index.cjs +7 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +7 -2
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +7 -2
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +7 -2
- package/dist/react.js.map +1 -1
- package/package.json +1 -1
- package/src/layout/edges.ts +27 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cardenelabs/cdl",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.46.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/edges.ts
CHANGED
|
@@ -32,6 +32,20 @@ import { DEFAULT_LABEL_MARGIN } from "./tokens";
|
|
|
32
32
|
const VERTICAL_DETOUR_GAP = 50;
|
|
33
33
|
/** 縦 detour の角の丸め半径 (world unit)。 */
|
|
34
34
|
const VERTICAL_DETOUR_CORNER = 14;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* 縦に進む区間の**進む向き** (下へ = 1、 上へ = -1)。 角の丸めの位置を決める時に使う。
|
|
38
|
+
*
|
|
39
|
+
* 角は「手前 14 で直線を止め、弧で 14 先へ抜ける」 形で作る。 手前と先がどちら側かは
|
|
40
|
+
* 進む向きで決まるので、下向きに固定すると上向きの辺で直線が角を通り過ぎ、
|
|
41
|
+
* 弧が戻る形になって角の外に突起が出る (`#801`)。
|
|
42
|
+
*
|
|
43
|
+
* `from === to` (縦に動かない) は下向きに倒す。 その時は縦の区間の長さが 0 で、
|
|
44
|
+
* どちらへ倒しても弧は同じ位置に出る。
|
|
45
|
+
*/
|
|
46
|
+
export function verticalCornerDir(from: number, to: number): 1 | -1 {
|
|
47
|
+
return to < from ? -1 : 1;
|
|
48
|
+
}
|
|
35
49
|
/** 縦 detour が source から曲がるまで直進する距離 (world unit)。 EDGE_STUB_OUT を上回る。 */
|
|
36
50
|
const VERTICAL_DETOUR_EXIT = 45;
|
|
37
51
|
|
|
@@ -2197,12 +2211,23 @@ function routePath(
|
|
|
2197
2211
|
// CAR-518 SSOT ... dotted-flow は 62 world (marker glow radius 分拡張) を labelInit で参照。
|
|
2198
2212
|
// fan-in / fan-out の分散は chain 伝搬 shift が担当。
|
|
2199
2213
|
const labelY = midY - labelInit;
|
|
2214
|
+
// **角の丸めは進む向きから決める** (`#801`)。 手前で止める位置と抜けた先の位置は
|
|
2215
|
+
// 「角の手前 14」「角の先 14」 であって、上下のどちらかに固定はできない。
|
|
2216
|
+
//
|
|
2217
|
+
// 固定していた間、`fromSide === "top"` の辺 (相手が上にある = 上向きに出る辺) は
|
|
2218
|
+
// 直線が角を 14 通り過ぎてから弧で戻る形になり、角の外側に 14 の突起が出ていた
|
|
2219
|
+
// (見本帳 `class-complex-demo` の `結ぶ` で実測)。
|
|
2220
|
+
//
|
|
2221
|
+
// 同じ誤りは `CAR-482` が別の分岐 (`cornerDirA` / `cornerDirB`) で 1 度直している。
|
|
2222
|
+
// ここはその時に見落とされた 2 つ目の分岐。
|
|
2223
|
+
const 縦の向きA = verticalCornerDir(A.y, midY);
|
|
2224
|
+
const 縦の向きB = verticalCornerDir(midY, B.y);
|
|
2200
2225
|
return {
|
|
2201
2226
|
d: `M ${A.x} ${A.y}
|
|
2202
|
-
L ${A.x} ${midY - corner}
|
|
2227
|
+
L ${A.x} ${midY - 縦の向きA * corner}
|
|
2203
2228
|
Q ${A.x} ${midY}, ${A.x + xDir * corner} ${midY}
|
|
2204
2229
|
L ${B.x - xDir * corner} ${midY}
|
|
2205
|
-
Q ${B.x} ${midY}, ${B.x} ${midY + corner}
|
|
2230
|
+
Q ${B.x} ${midY}, ${B.x} ${midY + 縦の向きB * corner}
|
|
2206
2231
|
L ${B.x} ${B.y}`,
|
|
2207
2232
|
labelX: (A.x + B.x) / 2,
|
|
2208
2233
|
labelY,
|