@cardenelabs/cdl 0.20.1 → 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/dist/react.js CHANGED
@@ -913,6 +913,7 @@ function footerShapeDrawTop(node) {
913
913
 
914
914
  // src/layout/collisions.ts
915
915
  var LANE_LABEL_CLEARANCE_MARGIN = 2;
916
+ var NEAR_MISS_MARGIN = LANE_LABEL_CLEARANCE_MARGIN;
916
917
  function collectBBoxes(lanes, nodes, edges) {
917
918
  const out = [];
918
919
  for (const lane of lanes) {
@@ -1582,8 +1583,8 @@ function resolveEdgeLabelOverlapsWithChainAndPropagate(edges, obstacles, minClea
1582
1583
  };
1583
1584
  const shift = computeOverlapShift(label, inflated);
1584
1585
  if (!shift) continue;
1585
- const amount = shift.amount - minClearance;
1586
- if (amount <= 0) continue;
1586
+ const amount = shift.amount - minClearance + NEAR_MISS_MARGIN;
1587
+ if (amount <= NEAR_MISS_MARGIN) continue;
1587
1588
  out.push({
1588
1589
  target: { kind: "label", id: label.id },
1589
1590
  axis: shift.axis,
@@ -1624,6 +1625,36 @@ function resolveEdgeLabelOverlapsWithChainAndPropagate(edges, obstacles, minClea
1624
1625
  out.push({ target: { kind: "label", id: moveBox.id }, ...shift });
1625
1626
  }
1626
1627
  }
1628
+ for (let i = 0; i < labels.length; i++) {
1629
+ for (let j = i + 1; j < labels.length; j++) {
1630
+ const a = labels[i];
1631
+ const b = labels[j];
1632
+ if (computeOverlapShift(a, b)) continue;
1633
+ const orderA = edgeOrder.get(a.id);
1634
+ const orderB = edgeOrder.get(b.id);
1635
+ const moveBox = orderA > orderB ? a : b;
1636
+ const staticBox = orderA > orderB ? b : a;
1637
+ const required = requiredNearClearance(moveBox.kind, staticBox.kind);
1638
+ const inflated = {
1639
+ ...staticBox,
1640
+ x: staticBox.x - required,
1641
+ y: staticBox.y - required,
1642
+ w: staticBox.w + required * 2,
1643
+ h: staticBox.h + required * 2
1644
+ };
1645
+ const shift = computeOverlapShift(moveBox, inflated);
1646
+ if (!shift) continue;
1647
+ const amount = shift.amount - minClearance + NEAR_MISS_MARGIN;
1648
+ if (amount <= NEAR_MISS_MARGIN) continue;
1649
+ out.push({
1650
+ target: { kind: "label", id: moveBox.id },
1651
+ axis: shift.axis,
1652
+ sign: shift.sign,
1653
+ amount,
1654
+ chain: false
1655
+ });
1656
+ }
1657
+ }
1627
1658
  for (const label of labels) {
1628
1659
  const currentShift = getLabelChainShift(label.id);
1629
1660
  if (currentShift.dx === 0 && currentShift.dy === 0) continue;
@@ -1719,12 +1750,83 @@ function resolveEdgeLabelOverlapsWithChainAndPropagate(edges, obstacles, minClea
1719
1750
  if (bestSideIdx < 0) continue;
1720
1751
  const amount = pathLabelClearance - gap + pathLabelClearance;
1721
1752
  const ordered = edgeProbes.map((p, idx) => ({ p, idx })).sort((a, b) => probeDist[a.idx] - probeDist[b.idx]);
1753
+ let \u7DDA\u3092\u52D5\u304B\u305B\u305F = false;
1722
1754
  for (const { p } of ordered) {
1723
1755
  const axis = p.axis;
1724
1756
  if (!pathShiftIsSafe(e.id, axis, p.sign, amount)) continue;
1757
+ const \u52D5\u304B\u3057\u305F\u5F8C = measurePathLabelGapSegs(
1758
+ simulateShiftedSegments(e, axis === "x" ? p.sign * amount : 0, axis === "y" ? p.sign * amount : 0),
1759
+ label
1760
+ );
1725
1761
  out.push({ target: { kind: "edge-path", id: e.id }, axis, sign: p.sign, amount });
1762
+ \u7DDA\u3092\u52D5\u304B\u305B\u305F = \u52D5\u304B\u3057\u305F\u5F8C > gap;
1726
1763
  break;
1727
1764
  }
1765
+ if (!\u7DDA\u3092\u52D5\u304B\u305B\u305F) {
1766
+ const \u82AF = { x: label.x + label.w / 2, y: label.y + label.h / 2 };
1767
+ let \u8FD1\u3044\u70B9 = null;
1768
+ let \u6700\u77ED = Infinity;
1769
+ for (const seg of segs) {
1770
+ for (const \u70B9 of [
1771
+ { x: seg.x1, y: seg.y1 },
1772
+ { x: seg.x2, y: seg.y2 },
1773
+ { x: (seg.x1 + seg.x2) / 2, y: (seg.y1 + seg.y2) / 2 }
1774
+ ]) {
1775
+ const d = Math.hypot(\u70B9.x - \u82AF.x, \u70B9.y - \u82AF.y);
1776
+ if (d < \u6700\u77ED) {
1777
+ \u6700\u77ED = d;
1778
+ \u8FD1\u3044\u70B9 = \u70B9;
1779
+ }
1780
+ }
1781
+ }
1782
+ if (\u8FD1\u3044\u70B9) {
1783
+ const dx = \u82AF.x - \u8FD1\u3044\u70B9.x;
1784
+ const dy = \u82AF.y - \u8FD1\u3044\u70B9.y;
1785
+ const \u91CF = pathLabelClearance - gap + NEAR_MISS_MARGIN;
1786
+ const \u5019\u88DC = Math.abs(dx) >= Math.abs(dy) ? [
1787
+ { axis: "x", sign: dx >= 0 ? 1 : -1 },
1788
+ { axis: "y", sign: dy >= 0 ? 1 : -1 }
1789
+ ] : [
1790
+ { axis: "y", sign: dy >= 0 ? 1 : -1 },
1791
+ { axis: "x", sign: dx >= 0 ? 1 : -1 }
1792
+ ];
1793
+ const \u52D5\u304B\u3057\u305F\u7BB1 = (axis, sign) => ({
1794
+ ...label,
1795
+ x: label.x + (axis === "x" ? sign * \u91CF : 0),
1796
+ y: label.y + (axis === "y" ? sign * \u91CF : 0)
1797
+ });
1798
+ const \u7DDA\u3054\u3068\u306E\u8DDD\u96E2 = (\u7BB1) => {
1799
+ const \u51FA = /* @__PURE__ */ new Map();
1800
+ for (const \u4ED6 of edges) {
1801
+ if (\u4ED6.id === label.id) continue;
1802
+ const segs2 = segmentsExcludingOwnPath(shiftedSegments(\u4ED6.id, \u4ED6.d), ownSegsOf(label.id));
1803
+ if (segs2.length === 0) continue;
1804
+ \u51FA.set(\u4ED6.id, measurePathLabelGapSegs(segs2, \u7BB1));
1805
+ }
1806
+ return \u51FA;
1807
+ };
1808
+ const \u3044\u307E\u306E\u8DDD\u96E2 = \u7DDA\u3054\u3068\u306E\u8DDD\u96E2(label);
1809
+ const \u60AA\u304F\u3059\u308B = (\u7BB1) => {
1810
+ const \u5F8C = \u7DDA\u3054\u3068\u306E\u8DDD\u96E2(\u7BB1);
1811
+ for (const [id, \u524D\u306E\u5024] of \u3044\u307E\u306E\u8DDD\u96E2) {
1812
+ const \u5F8C\u306E\u5024 = \u5F8C.get(id) ?? Infinity;
1813
+ if (\u5F8C\u306E\u5024 < Math.min(\u524D\u306E\u5024, pathLabelClearance)) return true;
1814
+ }
1815
+ return false;
1816
+ };
1817
+ for (const \u5019 of \u5019\u88DC) {
1818
+ if (\u60AA\u304F\u3059\u308B(\u52D5\u304B\u3057\u305F\u7BB1(\u5019.axis, \u5019.sign))) continue;
1819
+ out.push({
1820
+ target: { kind: "label", id: label.id },
1821
+ axis: \u5019.axis,
1822
+ sign: \u5019.sign,
1823
+ amount: \u91CF,
1824
+ chain: false
1825
+ });
1826
+ break;
1827
+ }
1828
+ }
1829
+ }
1728
1830
  }
1729
1831
  }
1730
1832
  for (const label of labels) {