@cardenelabs/cdl 0.21.0 → 0.21.1
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 +21 -1
- package/dist/index.cjs +47 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +47 -10
- package/dist/index.js.map +1 -1
- package/dist/react.cjs +47 -10
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +47 -10
- package/dist/react.js.map +1 -1
- package/package.json +1 -1
- package/src/layout/collisions.ts +72 -10
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,25 @@ CDL (Chainome Diagram Language) の主要変更履歴。
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [0.21.1] - 2026-08-29
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- **線の縦区間に張り付いた説明を離すようにした** (#594)
|
|
13
|
+
|
|
14
|
+
説明が別の線の縦区間の真下に居る形で、隙間が 0 のまま残っていた。
|
|
15
|
+
|
|
16
|
+
線の押し出しは発火している。 ただし安全判定 (`pathShiftIsSafe`) は「経路を壊さないか」
|
|
17
|
+
しか見ないので、**離れない向きへ動かして終わる**。 その時「線で逃がせた」 と数えるため、
|
|
18
|
+
cardene777/cdl#592 で入れた逃がし (説明の側を動かす) にも回らなかった。 繰り返しを 12 回まで
|
|
19
|
+
回しても隙間は 0 のままだと実測した。
|
|
20
|
+
|
|
21
|
+
押し出しは今までどおり出したまま、**離れなかった時は「逃がせた」 と数えない**。
|
|
22
|
+
出さない形にすると、離れないなりに効いていた押し出しが消えて別の 3 図が壊れる。
|
|
23
|
+
|
|
24
|
+
逃がす向きは **行き先を線ごとに確かめて** 選ぶ。 全体の最小距離だけで比べると、いま 0 の
|
|
25
|
+
線が離れるぶん別の線が 0 になっても「悪くなっていない」 と読める。
|
|
26
|
+
|
|
8
27
|
## [0.21.0] - 2026-08-29
|
|
9
28
|
|
|
10
29
|
### Fixed
|
|
@@ -1061,7 +1080,8 @@ Initial OSS release.
|
|
|
1061
1080
|
使わない = annotated tag を push しても GitHub Release は作られず、 Release を作っていない版で
|
|
1062
1081
|
行き止まりになる。
|
|
1063
1082
|
|
|
1064
|
-
[Unreleased]: https://github.com/cardene777/cdl/compare/v0.21.
|
|
1083
|
+
[Unreleased]: https://github.com/cardene777/cdl/compare/v0.21.1...HEAD
|
|
1084
|
+
[0.21.1]: https://github.com/cardene777/cdl/compare/v0.21.0...v0.21.1
|
|
1065
1085
|
[0.21.0]: https://github.com/cardene777/cdl/compare/v0.20.1...v0.21.0
|
|
1066
1086
|
[0.20.1]: https://github.com/cardene777/cdl/compare/v0.20.0...v0.20.1
|
|
1067
1087
|
[0.20.0]: https://github.com/cardene777/cdl/compare/v0.19.0...v0.20.0
|
package/dist/index.cjs
CHANGED
|
@@ -13092,8 +13092,12 @@ function resolveEdgeLabelOverlapsWithChainAndPropagate(edges, obstacles, minClea
|
|
|
13092
13092
|
for (const { p } of ordered) {
|
|
13093
13093
|
const axis = p.axis;
|
|
13094
13094
|
if (!pathShiftIsSafe(e.id, axis, p.sign, amount)) continue;
|
|
13095
|
+
const \u52D5\u304B\u3057\u305F\u5F8C = measurePathLabelGapSegs(
|
|
13096
|
+
simulateShiftedSegments(e, axis === "x" ? p.sign * amount : 0, axis === "y" ? p.sign * amount : 0),
|
|
13097
|
+
label
|
|
13098
|
+
);
|
|
13095
13099
|
out.push({ target: { kind: "edge-path", id: e.id }, axis, sign: p.sign, amount });
|
|
13096
|
-
\u7DDA\u3092\u52D5\u304B\u305B\u305F =
|
|
13100
|
+
\u7DDA\u3092\u52D5\u304B\u305B\u305F = \u52D5\u304B\u3057\u305F\u5F8C > gap;
|
|
13097
13101
|
break;
|
|
13098
13102
|
}
|
|
13099
13103
|
if (!\u7DDA\u3092\u52D5\u304B\u305B\u305F) {
|
|
@@ -13116,16 +13120,49 @@ function resolveEdgeLabelOverlapsWithChainAndPropagate(edges, obstacles, minClea
|
|
|
13116
13120
|
if (\u8FD1\u3044\u70B9) {
|
|
13117
13121
|
const dx = \u82AF.x - \u8FD1\u3044\u70B9.x;
|
|
13118
13122
|
const dy = \u82AF.y - \u8FD1\u3044\u70B9.y;
|
|
13119
|
-
const
|
|
13120
|
-
const \
|
|
13121
|
-
|
|
13122
|
-
|
|
13123
|
-
|
|
13124
|
-
axis,
|
|
13125
|
-
sign
|
|
13126
|
-
|
|
13127
|
-
|
|
13123
|
+
const \u91CF = pathLabelClearance - gap + NEAR_MISS_MARGIN;
|
|
13124
|
+
const \u5019\u88DC = Math.abs(dx) >= Math.abs(dy) ? [
|
|
13125
|
+
{ axis: "x", sign: dx >= 0 ? 1 : -1 },
|
|
13126
|
+
{ axis: "y", sign: dy >= 0 ? 1 : -1 }
|
|
13127
|
+
] : [
|
|
13128
|
+
{ axis: "y", sign: dy >= 0 ? 1 : -1 },
|
|
13129
|
+
{ axis: "x", sign: dx >= 0 ? 1 : -1 }
|
|
13130
|
+
];
|
|
13131
|
+
const \u52D5\u304B\u3057\u305F\u7BB1 = (axis, sign) => ({
|
|
13132
|
+
...label,
|
|
13133
|
+
x: label.x + (axis === "x" ? sign * \u91CF : 0),
|
|
13134
|
+
y: label.y + (axis === "y" ? sign * \u91CF : 0)
|
|
13128
13135
|
});
|
|
13136
|
+
const \u7DDA\u3054\u3068\u306E\u8DDD\u96E2 = (\u7BB1) => {
|
|
13137
|
+
const \u51FA = /* @__PURE__ */ new Map();
|
|
13138
|
+
for (const \u4ED6 of edges) {
|
|
13139
|
+
if (\u4ED6.id === label.id) continue;
|
|
13140
|
+
const segs2 = segmentsExcludingOwnPath(shiftedSegments(\u4ED6.id, \u4ED6.d), ownSegsOf(label.id));
|
|
13141
|
+
if (segs2.length === 0) continue;
|
|
13142
|
+
\u51FA.set(\u4ED6.id, measurePathLabelGapSegs(segs2, \u7BB1));
|
|
13143
|
+
}
|
|
13144
|
+
return \u51FA;
|
|
13145
|
+
};
|
|
13146
|
+
const \u3044\u307E\u306E\u8DDD\u96E2 = \u7DDA\u3054\u3068\u306E\u8DDD\u96E2(label);
|
|
13147
|
+
const \u60AA\u304F\u3059\u308B = (\u7BB1) => {
|
|
13148
|
+
const \u5F8C = \u7DDA\u3054\u3068\u306E\u8DDD\u96E2(\u7BB1);
|
|
13149
|
+
for (const [id, \u524D\u306E\u5024] of \u3044\u307E\u306E\u8DDD\u96E2) {
|
|
13150
|
+
const \u5F8C\u306E\u5024 = \u5F8C.get(id) ?? Infinity;
|
|
13151
|
+
if (\u5F8C\u306E\u5024 < Math.min(\u524D\u306E\u5024, pathLabelClearance)) return true;
|
|
13152
|
+
}
|
|
13153
|
+
return false;
|
|
13154
|
+
};
|
|
13155
|
+
for (const \u5019 of \u5019\u88DC) {
|
|
13156
|
+
if (\u60AA\u304F\u3059\u308B(\u52D5\u304B\u3057\u305F\u7BB1(\u5019.axis, \u5019.sign))) continue;
|
|
13157
|
+
out.push({
|
|
13158
|
+
target: { kind: "label", id: label.id },
|
|
13159
|
+
axis: \u5019.axis,
|
|
13160
|
+
sign: \u5019.sign,
|
|
13161
|
+
amount: \u91CF,
|
|
13162
|
+
chain: false
|
|
13163
|
+
});
|
|
13164
|
+
break;
|
|
13165
|
+
}
|
|
13129
13166
|
}
|
|
13130
13167
|
}
|
|
13131
13168
|
}
|