@aiquants/markdown 1.6.1 → 1.8.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.
Files changed (237) hide show
  1. package/dist/{abnfDiagram-VRR7QNED-DVICL1SS.cjs → abnfDiagram-VRR7QNED-BKvRUGcR.cjs} +2 -2
  2. package/dist/{abnfDiagram-VRR7QNED-DVICL1SS.cjs.map → abnfDiagram-VRR7QNED-BKvRUGcR.cjs.map} +1 -1
  3. package/dist/{abnfDiagram-VRR7QNED-RZnm_ZZC.js → abnfDiagram-VRR7QNED-C-27Yna6.js} +4 -4
  4. package/dist/{abnfDiagram-VRR7QNED-RZnm_ZZC.js.map → abnfDiagram-VRR7QNED-C-27Yna6.js.map} +1 -1
  5. package/dist/{arc-BmnitkkN.cjs → arc-CUOoCqkh.cjs} +2 -2
  6. package/dist/{arc-BmnitkkN.cjs.map → arc-CUOoCqkh.cjs.map} +1 -1
  7. package/dist/{arc-C-DBDbuo.js → arc-UxDDNW0x.js} +2 -2
  8. package/dist/{arc-C-DBDbuo.js.map → arc-UxDDNW0x.js.map} +1 -1
  9. package/dist/{architectureDiagram-ZJ3FMSHR-_FBgGrSC.js → architectureDiagram-ZJ3FMSHR-Ch5Nf0Ae.js} +3 -3
  10. package/dist/{architectureDiagram-ZJ3FMSHR-_FBgGrSC.js.map → architectureDiagram-ZJ3FMSHR-Ch5Nf0Ae.js.map} +1 -1
  11. package/dist/{architectureDiagram-ZJ3FMSHR-CCAJeMnU.cjs → architectureDiagram-ZJ3FMSHR-kO8dZQKK.cjs} +2 -2
  12. package/dist/{architectureDiagram-ZJ3FMSHR-CCAJeMnU.cjs.map → architectureDiagram-ZJ3FMSHR-kO8dZQKK.cjs.map} +1 -1
  13. package/dist/{blockDiagram-677ZJIJ3-W3Ryiu2c.cjs → blockDiagram-677ZJIJ3-BbjxBeAD.cjs} +2 -2
  14. package/dist/{blockDiagram-677ZJIJ3-W3Ryiu2c.cjs.map → blockDiagram-677ZJIJ3-BbjxBeAD.cjs.map} +1 -1
  15. package/dist/{blockDiagram-677ZJIJ3-CLkOcrVQ.js → blockDiagram-677ZJIJ3-CuCBVVNa.js} +4 -4
  16. package/dist/{blockDiagram-677ZJIJ3-CLkOcrVQ.js.map → blockDiagram-677ZJIJ3-CuCBVVNa.js.map} +1 -1
  17. package/dist/{c4Diagram-LMCZKHZV-FhSkJ7-q.js → c4Diagram-LMCZKHZV-BdJV5ivG.js} +3 -3
  18. package/dist/{c4Diagram-LMCZKHZV-FhSkJ7-q.js.map → c4Diagram-LMCZKHZV-BdJV5ivG.js.map} +1 -1
  19. package/dist/{c4Diagram-LMCZKHZV-B--cDHXw.cjs → c4Diagram-LMCZKHZV-BgTfc_W8.cjs} +2 -2
  20. package/dist/{c4Diagram-LMCZKHZV-B--cDHXw.cjs.map → c4Diagram-LMCZKHZV-BgTfc_W8.cjs.map} +1 -1
  21. package/dist/channel-BaZK7NhX.js +6 -0
  22. package/dist/{channel-B6gYWXtQ.js.map → channel-BaZK7NhX.js.map} +1 -1
  23. package/dist/channel-DcZBUEY6.cjs +2 -0
  24. package/dist/{channel-CZceKK2b.cjs.map → channel-DcZBUEY6.cjs.map} +1 -1
  25. package/dist/{chunk-2Q5K7J3B-CLA9LZQs.js → chunk-2Q5K7J3B-CSlHTmMh.js} +2 -2
  26. package/dist/{chunk-2Q5K7J3B-CLA9LZQs.js.map → chunk-2Q5K7J3B-CSlHTmMh.js.map} +1 -1
  27. package/dist/{chunk-2Q5K7J3B-UoZ4tiIj.cjs → chunk-2Q5K7J3B-D9s6eCoM.cjs} +2 -2
  28. package/dist/{chunk-2Q5K7J3B-UoZ4tiIj.cjs.map → chunk-2Q5K7J3B-D9s6eCoM.cjs.map} +1 -1
  29. package/dist/{chunk-32BRIVSS-CrDpazxa.js → chunk-32BRIVSS-CXH5EQUk.js} +2 -2
  30. package/dist/{chunk-32BRIVSS-CrDpazxa.js.map → chunk-32BRIVSS-CXH5EQUk.js.map} +1 -1
  31. package/dist/{chunk-32BRIVSS-CyUS1-2x.cjs → chunk-32BRIVSS-D2F2B9TZ.cjs} +2 -2
  32. package/dist/{chunk-32BRIVSS-CyUS1-2x.cjs.map → chunk-32BRIVSS-D2F2B9TZ.cjs.map} +1 -1
  33. package/dist/{chunk-5VM5RSS4-DnTlok-Z.js → chunk-5VM5RSS4-BhTMtA9l.js} +2 -2
  34. package/dist/{chunk-5VM5RSS4-DnTlok-Z.js.map → chunk-5VM5RSS4-BhTMtA9l.js.map} +1 -1
  35. package/dist/{chunk-5VM5RSS4-DCM2evxn.cjs → chunk-5VM5RSS4-CxjaLXsB.cjs} +2 -2
  36. package/dist/{chunk-5VM5RSS4-DCM2evxn.cjs.map → chunk-5VM5RSS4-CxjaLXsB.cjs.map} +1 -1
  37. package/dist/{chunk-EX3LRPZG-CDcYLfTb.cjs → chunk-EX3LRPZG-BCQ_eMbL.cjs} +2 -2
  38. package/dist/{chunk-EX3LRPZG-CDcYLfTb.cjs.map → chunk-EX3LRPZG-BCQ_eMbL.cjs.map} +1 -1
  39. package/dist/{chunk-EX3LRPZG-BXZN3BP6.js → chunk-EX3LRPZG-BOcBE4jP.js} +5 -5
  40. package/dist/{chunk-EX3LRPZG-BXZN3BP6.js.map → chunk-EX3LRPZG-BOcBE4jP.js.map} +1 -1
  41. package/dist/{chunk-JWPE2WC7-BOZsBb5v.js → chunk-JWPE2WC7-C20BXRVN.js} +2 -2
  42. package/dist/{chunk-JWPE2WC7-BOZsBb5v.js.map → chunk-JWPE2WC7-C20BXRVN.js.map} +1 -1
  43. package/dist/{chunk-JWPE2WC7-u2Y2E01t.cjs → chunk-JWPE2WC7-CLCAyxUO.cjs} +2 -2
  44. package/dist/{chunk-JWPE2WC7-u2Y2E01t.cjs.map → chunk-JWPE2WC7-CLCAyxUO.cjs.map} +1 -1
  45. package/dist/{chunk-MOJQB5TN-CODLoYka.js → chunk-MOJQB5TN-B_C5dwTy.js} +2 -2
  46. package/dist/{chunk-MOJQB5TN-CODLoYka.js.map → chunk-MOJQB5TN-B_C5dwTy.js.map} +1 -1
  47. package/dist/{chunk-MOJQB5TN-D9XmnzfN.cjs → chunk-MOJQB5TN-Bbpbi357.cjs} +2 -2
  48. package/dist/{chunk-MOJQB5TN-D9XmnzfN.cjs.map → chunk-MOJQB5TN-Bbpbi357.cjs.map} +1 -1
  49. package/dist/{chunk-PUDLZKDR-Vzafz0p_.js → chunk-PUDLZKDR-C0EKSRvH.js} +7 -7
  50. package/dist/{chunk-PUDLZKDR-Vzafz0p_.js.map → chunk-PUDLZKDR-C0EKSRvH.js.map} +1 -1
  51. package/dist/{chunk-PUDLZKDR-DIlJh7gW.cjs → chunk-PUDLZKDR-Cpp-nasK.cjs} +2 -2
  52. package/dist/{chunk-PUDLZKDR-DIlJh7gW.cjs.map → chunk-PUDLZKDR-Cpp-nasK.cjs.map} +1 -1
  53. package/dist/{chunk-RYQCIY6F-D7RgZ_ri.js → chunk-RYQCIY6F-BuIkG6A2.js} +2 -2
  54. package/dist/{chunk-RYQCIY6F-D7RgZ_ri.js.map → chunk-RYQCIY6F-BuIkG6A2.js.map} +1 -1
  55. package/dist/{chunk-RYQCIY6F-BgbNR_-2.cjs → chunk-RYQCIY6F-he5fUSYo.cjs} +2 -2
  56. package/dist/{chunk-RYQCIY6F-BgbNR_-2.cjs.map → chunk-RYQCIY6F-he5fUSYo.cjs.map} +1 -1
  57. package/dist/{chunk-V7JOEXUC-BtRbpCVo.cjs → chunk-V7JOEXUC-BcBXzffo.cjs} +2 -2
  58. package/dist/{chunk-V7JOEXUC-BtRbpCVo.cjs.map → chunk-V7JOEXUC-BcBXzffo.cjs.map} +1 -1
  59. package/dist/{chunk-V7JOEXUC-Csiot9oO.js → chunk-V7JOEXUC-DWnZRQBl.js} +6 -6
  60. package/dist/{chunk-V7JOEXUC-Csiot9oO.js.map → chunk-V7JOEXUC-DWnZRQBl.js.map} +1 -1
  61. package/dist/{chunk-VR4S4FIN-DH6f42Mu.js → chunk-VR4S4FIN-BWCLM0a0.js} +2 -2
  62. package/dist/{chunk-VR4S4FIN-DH6f42Mu.js.map → chunk-VR4S4FIN-BWCLM0a0.js.map} +1 -1
  63. package/dist/{chunk-VR4S4FIN-y0SDmoh2.cjs → chunk-VR4S4FIN-Bd3wwAe8.cjs} +2 -2
  64. package/dist/{chunk-VR4S4FIN-y0SDmoh2.cjs.map → chunk-VR4S4FIN-Bd3wwAe8.cjs.map} +1 -1
  65. package/dist/{chunk-XXDRQBXY-rC42S5QT.cjs → chunk-XXDRQBXY-C2UaLfce.cjs} +2 -2
  66. package/dist/{chunk-XXDRQBXY-rC42S5QT.cjs.map → chunk-XXDRQBXY-C2UaLfce.cjs.map} +1 -1
  67. package/dist/{chunk-XXDRQBXY-Csac6tCf.js → chunk-XXDRQBXY-qt9x9red.js} +2 -2
  68. package/dist/{chunk-XXDRQBXY-Csac6tCf.js.map → chunk-XXDRQBXY-qt9x9red.js.map} +1 -1
  69. package/dist/{classDiagram-OUVF2IWQ-Dd9EcDqY.js → classDiagram-OUVF2IWQ-B0lJPbAq.js} +3 -3
  70. package/dist/{classDiagram-OUVF2IWQ-Dd9EcDqY.js.map → classDiagram-OUVF2IWQ-B0lJPbAq.js.map} +1 -1
  71. package/dist/{classDiagram-OUVF2IWQ-Vq3KKBUy.cjs → classDiagram-OUVF2IWQ-BoGCNSIO.cjs} +2 -2
  72. package/dist/{classDiagram-OUVF2IWQ-Vq3KKBUy.cjs.map → classDiagram-OUVF2IWQ-BoGCNSIO.cjs.map} +1 -1
  73. package/dist/{classDiagram-v2-EOCWNBFH-Dd9EcDqY.js → classDiagram-v2-EOCWNBFH-B0lJPbAq.js} +3 -3
  74. package/dist/{classDiagram-v2-EOCWNBFH-Dd9EcDqY.js.map → classDiagram-v2-EOCWNBFH-B0lJPbAq.js.map} +1 -1
  75. package/dist/{classDiagram-v2-EOCWNBFH-Vq3KKBUy.cjs → classDiagram-v2-EOCWNBFH-BoGCNSIO.cjs} +2 -2
  76. package/dist/{classDiagram-v2-EOCWNBFH-Vq3KKBUy.cjs.map → classDiagram-v2-EOCWNBFH-BoGCNSIO.cjs.map} +1 -1
  77. package/dist/{cose-bilkent-JH36ORCC-BAYFBSur.js → cose-bilkent-JH36ORCC-BXH9dl_0.js} +2 -2
  78. package/dist/{cose-bilkent-JH36ORCC-BAYFBSur.js.map → cose-bilkent-JH36ORCC-BXH9dl_0.js.map} +1 -1
  79. package/dist/{cose-bilkent-JH36ORCC-CsHaaKi1.cjs → cose-bilkent-JH36ORCC-DRBzHIcA.cjs} +2 -2
  80. package/dist/{cose-bilkent-JH36ORCC-CsHaaKi1.cjs.map → cose-bilkent-JH36ORCC-DRBzHIcA.cjs.map} +1 -1
  81. package/dist/{cynefinDiagram-TSTJHNR4-CSZqIj_l.js → cynefinDiagram-TSTJHNR4-2jnqksgG.js} +3 -3
  82. package/dist/{cynefinDiagram-TSTJHNR4-CSZqIj_l.js.map → cynefinDiagram-TSTJHNR4-2jnqksgG.js.map} +1 -1
  83. package/dist/{cynefinDiagram-TSTJHNR4-BEPBV57_.cjs → cynefinDiagram-TSTJHNR4-Ge9B88rS.cjs} +2 -2
  84. package/dist/{cynefinDiagram-TSTJHNR4-BEPBV57_.cjs.map → cynefinDiagram-TSTJHNR4-Ge9B88rS.cjs.map} +1 -1
  85. package/dist/{dagre-VKFMJZFB-D9fBL_yM.js → dagre-VKFMJZFB-BqLynzOx.js} +3 -3
  86. package/dist/{dagre-VKFMJZFB-D9fBL_yM.js.map → dagre-VKFMJZFB-BqLynzOx.js.map} +1 -1
  87. package/dist/{dagre-VKFMJZFB-BlRE-U3S.cjs → dagre-VKFMJZFB-C7QheUvc.cjs} +2 -2
  88. package/dist/{dagre-VKFMJZFB-BlRE-U3S.cjs.map → dagre-VKFMJZFB-C7QheUvc.cjs.map} +1 -1
  89. package/dist/{diagram-FQU43EPY-Di26xB9f.cjs → diagram-FQU43EPY-CSPyECaU.cjs} +2 -2
  90. package/dist/{diagram-FQU43EPY-Di26xB9f.cjs.map → diagram-FQU43EPY-CSPyECaU.cjs.map} +1 -1
  91. package/dist/{diagram-FQU43EPY-DPR8KMs9.js → diagram-FQU43EPY-DUwsAw4u.js} +3 -3
  92. package/dist/{diagram-FQU43EPY-DPR8KMs9.js.map → diagram-FQU43EPY-DUwsAw4u.js.map} +1 -1
  93. package/dist/{diagram-G47NLZAW-71hjWkYs.cjs → diagram-G47NLZAW-BaP0Lyg0.cjs} +2 -2
  94. package/dist/{diagram-G47NLZAW-71hjWkYs.cjs.map → diagram-G47NLZAW-BaP0Lyg0.cjs.map} +1 -1
  95. package/dist/{diagram-G47NLZAW-BfL1Ut0H.js → diagram-G47NLZAW-h09HILJg.js} +4 -4
  96. package/dist/{diagram-G47NLZAW-BfL1Ut0H.js.map → diagram-G47NLZAW-h09HILJg.js.map} +1 -1
  97. package/dist/{diagram-NH7WQ7WH-BjJctDxT.js → diagram-NH7WQ7WH-BE3XRcGY.js} +3 -3
  98. package/dist/{diagram-NH7WQ7WH-BjJctDxT.js.map → diagram-NH7WQ7WH-BE3XRcGY.js.map} +1 -1
  99. package/dist/{diagram-NH7WQ7WH-B4uTamuE.cjs → diagram-NH7WQ7WH-DyJw7-Gl.cjs} +2 -2
  100. package/dist/{diagram-NH7WQ7WH-B4uTamuE.cjs.map → diagram-NH7WQ7WH-DyJw7-Gl.cjs.map} +1 -1
  101. package/dist/{diagram-OA4YK3LP-BoFOwiXF.js → diagram-OA4YK3LP-BfAM9MZv.js} +4 -4
  102. package/dist/{diagram-OA4YK3LP-BoFOwiXF.js.map → diagram-OA4YK3LP-BfAM9MZv.js.map} +1 -1
  103. package/dist/{diagram-OA4YK3LP-C1ORbLEL.cjs → diagram-OA4YK3LP-DqYpt5F6.cjs} +2 -2
  104. package/dist/{diagram-OA4YK3LP-C1ORbLEL.cjs.map → diagram-OA4YK3LP-DqYpt5F6.cjs.map} +1 -1
  105. package/dist/{diagram-WEI45ONY-COXEDGCZ.js → diagram-WEI45ONY-DtFOpBM4.js} +3 -3
  106. package/dist/{diagram-WEI45ONY-COXEDGCZ.js.map → diagram-WEI45ONY-DtFOpBM4.js.map} +1 -1
  107. package/dist/{diagram-WEI45ONY-BzuHWp9D.cjs → diagram-WEI45ONY-fz5dqgqy.cjs} +2 -2
  108. package/dist/{diagram-WEI45ONY-BzuHWp9D.cjs.map → diagram-WEI45ONY-fz5dqgqy.cjs.map} +1 -1
  109. package/dist/{ebnfDiagram-CCIWWBDH-N0w7QwtK.js → ebnfDiagram-CCIWWBDH-CyKVhKIb.js} +4 -4
  110. package/dist/{ebnfDiagram-CCIWWBDH-N0w7QwtK.js.map → ebnfDiagram-CCIWWBDH-CyKVhKIb.js.map} +1 -1
  111. package/dist/{ebnfDiagram-CCIWWBDH-DE7OPvSn.cjs → ebnfDiagram-CCIWWBDH-Haez4su4.cjs} +2 -2
  112. package/dist/{ebnfDiagram-CCIWWBDH-DE7OPvSn.cjs.map → ebnfDiagram-CCIWWBDH-Haez4su4.cjs.map} +1 -1
  113. package/dist/{erDiagram-Q63AITRT-CqsM_S0E.js → erDiagram-Q63AITRT-9hM3kPUW.js} +5 -5
  114. package/dist/{erDiagram-Q63AITRT-CqsM_S0E.js.map → erDiagram-Q63AITRT-9hM3kPUW.js.map} +1 -1
  115. package/dist/{erDiagram-Q63AITRT-KvBvwG4T.cjs → erDiagram-Q63AITRT-BGEWGa_b.cjs} +2 -2
  116. package/dist/{erDiagram-Q63AITRT-KvBvwG4T.cjs.map → erDiagram-Q63AITRT-BGEWGa_b.cjs.map} +1 -1
  117. package/dist/{extractHeadings-BiNpEj-K.js → extractHeadings-BH0T7P4n.js} +3834 -3824
  118. package/dist/{extractHeadings-BiNpEj-K.js.map → extractHeadings-BH0T7P4n.js.map} +1 -1
  119. package/dist/{extractHeadings-vnYM8Eet.cjs → extractHeadings-BsiIYa_e.cjs} +62 -62
  120. package/dist/{extractHeadings-vnYM8Eet.cjs.map → extractHeadings-BsiIYa_e.cjs.map} +1 -1
  121. package/dist/flowDiagram-23GEKE2U-B9LX4RXy.cjs +2 -0
  122. package/dist/flowDiagram-23GEKE2U-B9LX4RXy.cjs.map +1 -0
  123. package/dist/flowDiagram-23GEKE2U-Dk7STu-u.js +8 -0
  124. package/dist/flowDiagram-23GEKE2U-Dk7STu-u.js.map +1 -0
  125. package/dist/{ganttDiagram-NO4QXBWP-DvdToLYa.cjs → ganttDiagram-NO4QXBWP-4BbeHi64.cjs} +2 -2
  126. package/dist/{ganttDiagram-NO4QXBWP-DvdToLYa.cjs.map → ganttDiagram-NO4QXBWP-4BbeHi64.cjs.map} +1 -1
  127. package/dist/{ganttDiagram-NO4QXBWP-C2P9ON6O.js → ganttDiagram-NO4QXBWP-DtM5HL0C.js} +3 -3
  128. package/dist/{ganttDiagram-NO4QXBWP-C2P9ON6O.js.map → ganttDiagram-NO4QXBWP-DtM5HL0C.js.map} +1 -1
  129. package/dist/{gitGraphDiagram-IHSO6WYX-BkZsK9Hm.cjs → gitGraphDiagram-IHSO6WYX-D1NSh545.cjs} +2 -2
  130. package/dist/{gitGraphDiagram-IHSO6WYX-BkZsK9Hm.cjs.map → gitGraphDiagram-IHSO6WYX-D1NSh545.cjs.map} +1 -1
  131. package/dist/{gitGraphDiagram-IHSO6WYX-DVSslxqP.js → gitGraphDiagram-IHSO6WYX-DFSd1OPO.js} +4 -4
  132. package/dist/{gitGraphDiagram-IHSO6WYX-DVSslxqP.js.map → gitGraphDiagram-IHSO6WYX-DFSd1OPO.js.map} +1 -1
  133. package/dist/index.cjs +1 -1
  134. package/dist/index.client.cjs +1 -1
  135. package/dist/index.client.js +1 -1
  136. package/dist/index.js +1 -1
  137. package/dist/{infoDiagram-FWYZ7A6U-Cd3TPtAG.cjs → infoDiagram-FWYZ7A6U-4wrBBE6X.cjs} +2 -2
  138. package/dist/{infoDiagram-FWYZ7A6U-Cd3TPtAG.cjs.map → infoDiagram-FWYZ7A6U-4wrBBE6X.cjs.map} +1 -1
  139. package/dist/{infoDiagram-FWYZ7A6U-vPnKgn2w.js → infoDiagram-FWYZ7A6U-ZRUjO8nW.js} +2 -2
  140. package/dist/{infoDiagram-FWYZ7A6U-vPnKgn2w.js.map → infoDiagram-FWYZ7A6U-ZRUjO8nW.js.map} +1 -1
  141. package/dist/{ishikawaDiagram-FXEZZL3T-CR9ySQXh.cjs → ishikawaDiagram-FXEZZL3T-DE9GPbED.cjs} +2 -2
  142. package/dist/{ishikawaDiagram-FXEZZL3T-CR9ySQXh.cjs.map → ishikawaDiagram-FXEZZL3T-DE9GPbED.cjs.map} +1 -1
  143. package/dist/{ishikawaDiagram-FXEZZL3T-BkgUhFd7.js → ishikawaDiagram-FXEZZL3T-DNgqlFhZ.js} +2 -2
  144. package/dist/{ishikawaDiagram-FXEZZL3T-BkgUhFd7.js.map → ishikawaDiagram-FXEZZL3T-DNgqlFhZ.js.map} +1 -1
  145. package/dist/{journeyDiagram-5HDEW3XC-CeLukjGs.js → journeyDiagram-5HDEW3XC-BXlXmDhR.js} +5 -5
  146. package/dist/{journeyDiagram-5HDEW3XC-CeLukjGs.js.map → journeyDiagram-5HDEW3XC-BXlXmDhR.js.map} +1 -1
  147. package/dist/{journeyDiagram-5HDEW3XC-C_kouMqJ.cjs → journeyDiagram-5HDEW3XC-jcXDYbA9.cjs} +2 -2
  148. package/dist/{journeyDiagram-5HDEW3XC-C_kouMqJ.cjs.map → journeyDiagram-5HDEW3XC-jcXDYbA9.cjs.map} +1 -1
  149. package/dist/{kanban-definition-HUTT4EX6-B7sK7KKo.js → kanban-definition-HUTT4EX6-C9IdgWIg.js} +3 -3
  150. package/dist/{kanban-definition-HUTT4EX6-B7sK7KKo.js.map → kanban-definition-HUTT4EX6-C9IdgWIg.js.map} +1 -1
  151. package/dist/{kanban-definition-HUTT4EX6-C72m9SkW.cjs → kanban-definition-HUTT4EX6-D5_pDh9h.cjs} +2 -2
  152. package/dist/{kanban-definition-HUTT4EX6-C72m9SkW.cjs.map → kanban-definition-HUTT4EX6-D5_pDh9h.cjs.map} +1 -1
  153. package/dist/{linear-DA8CNisd.js → linear-CTibpBci.js} +2 -2
  154. package/dist/{linear-DA8CNisd.js.map → linear-CTibpBci.js.map} +1 -1
  155. package/dist/{linear-BgdXLHZt.cjs → linear-DDWdtbxq.cjs} +2 -2
  156. package/dist/{linear-BgdXLHZt.cjs.map → linear-DDWdtbxq.cjs.map} +1 -1
  157. package/dist/{mindmap-definition-LN4V7U3C-C7YrqUCf.js → mindmap-definition-LN4V7U3C-CXaKAu6n.js} +4 -4
  158. package/dist/{mindmap-definition-LN4V7U3C-C7YrqUCf.js.map → mindmap-definition-LN4V7U3C-CXaKAu6n.js.map} +1 -1
  159. package/dist/{mindmap-definition-LN4V7U3C-CirMzlY5.cjs → mindmap-definition-LN4V7U3C-gBn938NF.cjs} +2 -2
  160. package/dist/{mindmap-definition-LN4V7U3C-CirMzlY5.cjs.map → mindmap-definition-LN4V7U3C-gBn938NF.cjs.map} +1 -1
  161. package/dist/{pegDiagram-2B236MQR-DpzcFesN.js → pegDiagram-2B236MQR-BiQyejnD.js} +4 -4
  162. package/dist/{pegDiagram-2B236MQR-DpzcFesN.js.map → pegDiagram-2B236MQR-BiQyejnD.js.map} +1 -1
  163. package/dist/{pegDiagram-2B236MQR-BWo1kluM.cjs → pegDiagram-2B236MQR-fR_9AvHk.cjs} +2 -2
  164. package/dist/{pegDiagram-2B236MQR-BWo1kluM.cjs.map → pegDiagram-2B236MQR-fR_9AvHk.cjs.map} +1 -1
  165. package/dist/{pieDiagram-ENE6RG2P-iRoOiNc4.cjs → pieDiagram-ENE6RG2P-BZtqlfyU.cjs} +2 -2
  166. package/dist/{pieDiagram-ENE6RG2P-iRoOiNc4.cjs.map → pieDiagram-ENE6RG2P-BZtqlfyU.cjs.map} +1 -1
  167. package/dist/{pieDiagram-ENE6RG2P-B6RHvEHE.js → pieDiagram-ENE6RG2P-CZTZpVqy.js} +4 -4
  168. package/dist/{pieDiagram-ENE6RG2P-B6RHvEHE.js.map → pieDiagram-ENE6RG2P-CZTZpVqy.js.map} +1 -1
  169. package/dist/{quadrantDiagram-ABIIQ3AL-9Gb8LEQi.js → quadrantDiagram-ABIIQ3AL-ByHTxHrm.js} +3 -3
  170. package/dist/{quadrantDiagram-ABIIQ3AL-9Gb8LEQi.js.map → quadrantDiagram-ABIIQ3AL-ByHTxHrm.js.map} +1 -1
  171. package/dist/{quadrantDiagram-ABIIQ3AL-DKbTOjNz.cjs → quadrantDiagram-ABIIQ3AL-CC5w4CkE.cjs} +2 -2
  172. package/dist/{quadrantDiagram-ABIIQ3AL-DKbTOjNz.cjs.map → quadrantDiagram-ABIIQ3AL-CC5w4CkE.cjs.map} +1 -1
  173. package/dist/{railroadDiagram-RFXS5EU6-CXgCaCb_.js → railroadDiagram-RFXS5EU6-C99zfAzl.js} +4 -4
  174. package/dist/{railroadDiagram-RFXS5EU6-CXgCaCb_.js.map → railroadDiagram-RFXS5EU6-C99zfAzl.js.map} +1 -1
  175. package/dist/{railroadDiagram-RFXS5EU6-SOxzO7C3.cjs → railroadDiagram-RFXS5EU6-_YckPr2T.cjs} +2 -2
  176. package/dist/{railroadDiagram-RFXS5EU6-SOxzO7C3.cjs.map → railroadDiagram-RFXS5EU6-_YckPr2T.cjs.map} +1 -1
  177. package/dist/{requirementDiagram-TGXJPOKE-B6RQ9Kpp.cjs → requirementDiagram-TGXJPOKE-BCeWSLF4.cjs} +2 -2
  178. package/dist/{requirementDiagram-TGXJPOKE-B6RQ9Kpp.cjs.map → requirementDiagram-TGXJPOKE-BCeWSLF4.cjs.map} +1 -1
  179. package/dist/{requirementDiagram-TGXJPOKE-DbSm2ehr.js → requirementDiagram-TGXJPOKE-DBzuXzE9.js} +4 -4
  180. package/dist/{requirementDiagram-TGXJPOKE-DbSm2ehr.js.map → requirementDiagram-TGXJPOKE-DBzuXzE9.js.map} +1 -1
  181. package/dist/{sankeyDiagram-HTMAVEWB-BNqZ6R3H.js → sankeyDiagram-HTMAVEWB-ChQ2ozXn.js} +2 -2
  182. package/dist/{sankeyDiagram-HTMAVEWB-BNqZ6R3H.js.map → sankeyDiagram-HTMAVEWB-ChQ2ozXn.js.map} +1 -1
  183. package/dist/{sankeyDiagram-HTMAVEWB-DgGDy2eG.cjs → sankeyDiagram-HTMAVEWB-DQOfpr04.cjs} +2 -2
  184. package/dist/{sankeyDiagram-HTMAVEWB-DgGDy2eG.cjs.map → sankeyDiagram-HTMAVEWB-DQOfpr04.cjs.map} +1 -1
  185. package/dist/{sequenceDiagram-DBY2YBRQ-Bf3EtJcL.js → sequenceDiagram-DBY2YBRQ-CCzsdQ__.js} +4 -4
  186. package/dist/{sequenceDiagram-DBY2YBRQ-Bf3EtJcL.js.map → sequenceDiagram-DBY2YBRQ-CCzsdQ__.js.map} +1 -1
  187. package/dist/{sequenceDiagram-DBY2YBRQ-BuKDthxK.cjs → sequenceDiagram-DBY2YBRQ-D2R8WWiq.cjs} +2 -2
  188. package/dist/{sequenceDiagram-DBY2YBRQ-BuKDthxK.cjs.map → sequenceDiagram-DBY2YBRQ-D2R8WWiq.cjs.map} +1 -1
  189. package/dist/{sizeCapture-X5ZJPWSS-CNWx6elV.js → sizeCapture-X5ZJPWSS-9Q2RBacx.js} +2 -2
  190. package/dist/{sizeCapture-X5ZJPWSS-CNWx6elV.js.map → sizeCapture-X5ZJPWSS-9Q2RBacx.js.map} +1 -1
  191. package/dist/{sizeCapture-X5ZJPWSS-NRqA0pmT.cjs → sizeCapture-X5ZJPWSS-CedNWC9b.cjs} +2 -2
  192. package/dist/{sizeCapture-X5ZJPWSS-NRqA0pmT.cjs.map → sizeCapture-X5ZJPWSS-CedNWC9b.cjs.map} +1 -1
  193. package/dist/src/components/MarkdownRenderer.d.ts +31 -1
  194. package/dist/src/components/MarkdownRenderer.d.ts.map +1 -1
  195. package/dist/src/components/MarkdownViewer.d.ts +9 -1
  196. package/dist/src/components/MarkdownViewer.d.ts.map +1 -1
  197. package/dist/src/index.client.d.ts +1 -1
  198. package/dist/src/index.client.d.ts.map +1 -1
  199. package/dist/{stateDiagram-2N3HPSRC-DqhvonPY.cjs → stateDiagram-2N3HPSRC-BFjEDzN5.cjs} +2 -2
  200. package/dist/{stateDiagram-2N3HPSRC-DqhvonPY.cjs.map → stateDiagram-2N3HPSRC-BFjEDzN5.cjs.map} +1 -1
  201. package/dist/{stateDiagram-2N3HPSRC-Bdphi4r-.js → stateDiagram-2N3HPSRC-DVXBUdgS.js} +3 -3
  202. package/dist/{stateDiagram-2N3HPSRC-Bdphi4r-.js.map → stateDiagram-2N3HPSRC-DVXBUdgS.js.map} +1 -1
  203. package/dist/{stateDiagram-v2-6OUMAXLB-p9rvsC9-.cjs → stateDiagram-v2-6OUMAXLB-BpxIqbgw.cjs} +2 -2
  204. package/dist/{stateDiagram-v2-6OUMAXLB-p9rvsC9-.cjs.map → stateDiagram-v2-6OUMAXLB-BpxIqbgw.cjs.map} +1 -1
  205. package/dist/{stateDiagram-v2-6OUMAXLB-DdB47j1a.js → stateDiagram-v2-6OUMAXLB-etkgI8XE.js} +3 -3
  206. package/dist/{stateDiagram-v2-6OUMAXLB-DdB47j1a.js.map → stateDiagram-v2-6OUMAXLB-etkgI8XE.js.map} +1 -1
  207. package/dist/{swimlanes-5IMT3BWC-JZVn9oCR.cjs → swimlanes-5IMT3BWC-ByyaHYdJ.cjs} +2 -2
  208. package/dist/{swimlanes-5IMT3BWC-JZVn9oCR.cjs.map → swimlanes-5IMT3BWC-ByyaHYdJ.cjs.map} +1 -1
  209. package/dist/{swimlanes-5IMT3BWC-BMZk0Lp2.js → swimlanes-5IMT3BWC-CRF_hU5-.js} +4 -4
  210. package/dist/{swimlanes-5IMT3BWC-BMZk0Lp2.js.map → swimlanes-5IMT3BWC-CRF_hU5-.js.map} +1 -1
  211. package/dist/{swimlanesDiagram-G3AALYLV-DxEegQkl.cjs → swimlanesDiagram-G3AALYLV-DmAVTn1y.cjs} +2 -2
  212. package/dist/{swimlanesDiagram-G3AALYLV-DxEegQkl.cjs.map → swimlanesDiagram-G3AALYLV-DmAVTn1y.cjs.map} +1 -1
  213. package/dist/{swimlanesDiagram-G3AALYLV-DNhrqmqB.js → swimlanesDiagram-G3AALYLV-qE56wCfv.js} +3 -3
  214. package/dist/{swimlanesDiagram-G3AALYLV-DNhrqmqB.js.map → swimlanesDiagram-G3AALYLV-qE56wCfv.js.map} +1 -1
  215. package/dist/{timeline-definition-FHXFAJF6-BjxOaDZF.cjs → timeline-definition-FHXFAJF6-CYpydtqC.cjs} +2 -2
  216. package/dist/{timeline-definition-FHXFAJF6-BjxOaDZF.cjs.map → timeline-definition-FHXFAJF6-CYpydtqC.cjs.map} +1 -1
  217. package/dist/{timeline-definition-FHXFAJF6-C4kHuqGr.js → timeline-definition-FHXFAJF6-U6tU13YO.js} +3 -3
  218. package/dist/{timeline-definition-FHXFAJF6-C4kHuqGr.js.map → timeline-definition-FHXFAJF6-U6tU13YO.js.map} +1 -1
  219. package/dist/{vennDiagram-L72KCM5P-nQ40EeIj.cjs → vennDiagram-L72KCM5P-CfbVR5CF.cjs} +2 -2
  220. package/dist/{vennDiagram-L72KCM5P-nQ40EeIj.cjs.map → vennDiagram-L72KCM5P-CfbVR5CF.cjs.map} +1 -1
  221. package/dist/{vennDiagram-L72KCM5P-faE6oCYZ.js → vennDiagram-L72KCM5P-q79Xn7UV.js} +2 -2
  222. package/dist/{vennDiagram-L72KCM5P-faE6oCYZ.js.map → vennDiagram-L72KCM5P-q79Xn7UV.js.map} +1 -1
  223. package/dist/{wardleyDiagram-EHGQE667-COQa-JdJ.js → wardleyDiagram-EHGQE667-BG3W74MX.js} +3 -3
  224. package/dist/{wardleyDiagram-EHGQE667-COQa-JdJ.js.map → wardleyDiagram-EHGQE667-BG3W74MX.js.map} +1 -1
  225. package/dist/{wardleyDiagram-EHGQE667-ByYfznTT.cjs → wardleyDiagram-EHGQE667-CSJ22zfj.cjs} +2 -2
  226. package/dist/{wardleyDiagram-EHGQE667-ByYfznTT.cjs.map → wardleyDiagram-EHGQE667-CSJ22zfj.cjs.map} +1 -1
  227. package/dist/{xychartDiagram-FW5EYKEG-D7FhqNeM.js → xychartDiagram-FW5EYKEG-BISI4a7c.js} +3 -3
  228. package/dist/{xychartDiagram-FW5EYKEG-D7FhqNeM.js.map → xychartDiagram-FW5EYKEG-BISI4a7c.js.map} +1 -1
  229. package/dist/{xychartDiagram-FW5EYKEG-BHBIM0-w.cjs → xychartDiagram-FW5EYKEG-Df8hBgvh.cjs} +2 -2
  230. package/dist/{xychartDiagram-FW5EYKEG-BHBIM0-w.cjs.map → xychartDiagram-FW5EYKEG-Df8hBgvh.cjs.map} +1 -1
  231. package/package.json +1 -1
  232. package/dist/channel-B6gYWXtQ.js +0 -6
  233. package/dist/channel-CZceKK2b.cjs +0 -2
  234. package/dist/flowDiagram-23GEKE2U-BNIQEPQk.cjs +0 -2
  235. package/dist/flowDiagram-23GEKE2U-BNIQEPQk.cjs.map +0 -1
  236. package/dist/flowDiagram-23GEKE2U-Cu3z7Hd2.js +0 -8
  237. package/dist/flowDiagram-23GEKE2U-Cu3z7Hd2.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"swimlanes-5IMT3BWC-BMZk0Lp2.js","sources":["../../../node_modules/.pnpm/mermaid@11.16.0/node_modules/mermaid/dist/chunks/mermaid.core/swimlanes-5IMT3BWC.mjs"],"sourcesContent":["import {\n clear as clear4\n} from \"./chunk-RYQCIY6F.mjs\";\nimport {\n clear as clear2,\n edgeLabels,\n insertEdge,\n insertEdgeLabel,\n markers_default,\n terminalLabels\n} from \"./chunk-52WLFC77.mjs\";\nimport {\n clear,\n clear2 as clear3,\n insertCluster,\n insertNode,\n positionNode\n} from \"./chunk-ZGVPDNZ5.mjs\";\nimport \"./chunk-C7G6YPKG.mjs\";\nimport {\n markerOffsets\n} from \"./chunk-7BUUIJ7U.mjs\";\nimport {\n getSubGraphTitleMargins\n} from \"./chunk-OGEWGWER.mjs\";\nimport \"./chunk-Q4XR5HBZ.mjs\";\nimport \"./chunk-HOUHSVGY.mjs\";\nimport {\n utils_default\n} from \"./chunk-ICXQ74PX.mjs\";\nimport {\n getConfig,\n getConfig2\n} from \"./chunk-WYO6CB5R.mjs\";\nimport {\n log\n} from \"./chunk-X3CZISLH.mjs\";\nimport {\n __name\n} from \"./chunk-Y2CYZVJY.mjs\";\n\n// src/rendering-util/createGraph.ts\nimport * as graphlib from \"dagre-d3-es/src/graphlib/index.js\";\nasync function createGraphWithElements(element, data4Layout) {\n const graph = new graphlib.Graph({\n multigraph: true,\n compound: true\n });\n const edgesToProcess = [...data4Layout.edges];\n const config = getConfig2();\n const rootGroups = element.insert(\"g\").attr(\"class\", \"root\");\n const clusters = rootGroups.insert(\"g\").attr(\"class\", \"clusters\");\n const edgePaths = rootGroups.insert(\"g\").attr(\"class\", \"edges edgePath\");\n const edgeLabels2 = rootGroups.insert(\"g\").attr(\"class\", \"edgeLabels\");\n const nodesGroup = rootGroups.insert(\"g\").attr(\"class\", \"nodes\");\n const nodeElements = /* @__PURE__ */ new Map();\n const hasDom = element.node() != null;\n await Promise.all(\n data4Layout.nodes.map(async (node) => {\n if (node.isGroup) {\n graph.setNode(node.id, { ...node });\n } else {\n if (hasDom) {\n const childNodeEl = await insertNode(nodesGroup, node, { config, dir: node.dir });\n const boundingBox = childNodeEl.node()?.getBBox() ?? { width: 0, height: 0 };\n nodeElements.set(node.id, childNodeEl);\n node.width = boundingBox.width;\n node.height = boundingBox.height;\n }\n graph.setNode(node.id, { ...node });\n }\n })\n );\n for (const edge of edgesToProcess) {\n graph.setEdge(edge.start, edge.end, { ...edge }, edge.id);\n const edgeExists = data4Layout.edges.some((existingEdge) => existingEdge.id === edge.id);\n if (!edgeExists) {\n data4Layout.edges.push(edge);\n }\n }\n if (globalThis.mermaidCaptureSizes) {\n const { captureNodeSizes } = await import(\"./sizeCapture-X5ZJPWSS.mjs\");\n captureNodeSizes(element, data4Layout);\n }\n return {\n graph,\n groups: { clusters, edgePaths, edgeLabels: edgeLabels2, nodes: nodesGroup, rootGroups },\n nodeElements\n };\n}\n__name(createGraphWithElements, \"createGraphWithElements\");\n\n// src/rendering-util/rendering-elements/lineJump.ts\nvar ROUNDED_CORNER_RADIUS = 5;\nvar CORNER_EPSILON = 1e-5;\nvar ENDPOINT_EPSILON = 1e-6;\nfunction buildSegmentList(points) {\n const segments = [];\n for (let i = 0; i < points.length - 1; i++) {\n segments.push({ a: points[i], b: points[i + 1] });\n }\n return segments;\n}\n__name(buildSegmentList, \"buildSegmentList\");\nfunction segmentIntersection(a1, a2, b1, b2) {\n const dxA = a2.x - a1.x;\n const dyA = a2.y - a1.y;\n const dxB = b2.x - b1.x;\n const dyB = b2.y - b1.y;\n const denom = dxA * dyB - dyA * dxB;\n if (denom === 0) {\n return null;\n }\n const dx = b1.x - a1.x;\n const dy = b1.y - a1.y;\n const tA = (dx * dyB - dy * dxB) / denom;\n const tB = (dx * dyA - dy * dxA) / denom;\n if (tA <= ENDPOINT_EPSILON || tA >= 1 - ENDPOINT_EPSILON || tB <= ENDPOINT_EPSILON || tB >= 1 - ENDPOINT_EPSILON) {\n return null;\n }\n return {\n point: { x: a1.x + tA * dxA, y: a1.y + tA * dyA },\n tA,\n tB\n };\n}\n__name(segmentIntersection, \"segmentIntersection\");\nfunction isHorizontalSeg(seg) {\n return Math.abs(seg.b.x - seg.a.x) >= Math.abs(seg.b.y - seg.a.y);\n}\n__name(isHorizontalSeg, \"isHorizontalSeg\");\nfunction findEdgeIntersections(edges) {\n const crossings = [];\n for (let i = 0; i < edges.length; i++) {\n const edgeA = edges[i];\n const segmentsA = buildSegmentList(edgeA.points);\n for (let j = i + 1; j < edges.length; j++) {\n const edgeB = edges[j];\n const segmentsB = buildSegmentList(edgeB.points);\n for (const [si, segA] of segmentsA.entries()) {\n for (const [sj, segB] of segmentsB.entries()) {\n const hit = segmentIntersection(segA.a, segA.b, segB.a, segB.b);\n if (!hit) {\n continue;\n }\n const aHoriz = isHorizontalSeg(segA);\n const bHoriz = isHorizontalSeg(segB);\n const orthogonalPair = aHoriz !== bHoriz;\n const jumpOnA = orthogonalPair ? aHoriz : false;\n if (jumpOnA) {\n crossings.push({\n jumpEdgeId: edgeA.id,\n otherEdgeId: edgeB.id,\n segIndex: si,\n t: hit.tA,\n point: hit.point\n });\n } else {\n crossings.push({\n jumpEdgeId: edgeB.id,\n otherEdgeId: edgeA.id,\n segIndex: sj,\n t: hit.tB,\n point: hit.point\n });\n }\n }\n }\n }\n }\n return crossings;\n}\n__name(findEdgeIntersections, \"findEdgeIntersections\");\nfunction fmt(n) {\n const rounded = Math.round(n * 1e3) / 1e3;\n return Number.isInteger(rounded) ? `${rounded}` : `${rounded}`;\n}\n__name(fmt, \"fmt\");\nfunction pointToString(p) {\n return `${fmt(p.x)},${fmt(p.y)}`;\n}\n__name(pointToString, \"pointToString\");\nfunction getArcSweepFlag(seg) {\n const dx = seg.b.x - seg.a.x;\n const dy = seg.b.y - seg.a.y;\n if (Math.abs(dx) >= Math.abs(dy)) {\n return dx >= 0 ? 1 : 0;\n }\n return dy >= 0 ? 1 : 0;\n}\n__name(getArcSweepFlag, \"getArcSweepFlag\");\nvar MIN_JUMP_RADIUS = 1e-3;\nfunction applyMarkerOffsets(points, edge) {\n if (points.length < 2) {\n return points.map((p) => ({ ...p }));\n }\n const out = points.map((p) => ({ ...p }));\n const startOff = edge.arrowTypeStart && markerOffsets[edge.arrowTypeStart];\n if (startOff) {\n const a = points[0];\n const b = points[1];\n const ang = Math.atan2(b.y - a.y, b.x - a.x);\n out[0].x = a.x + startOff * Math.cos(ang);\n out[0].y = a.y + startOff * Math.sin(ang);\n }\n const endOff = edge.arrowTypeEnd && markerOffsets[edge.arrowTypeEnd];\n if (endOff) {\n const n = points.length;\n const a = points[n - 2];\n const b = points[n - 1];\n const ang = Math.atan2(b.y - a.y, b.x - a.x);\n out[n - 1].x = b.x - endOff * Math.cos(ang);\n out[n - 1].y = b.y - endOff * Math.sin(ang);\n }\n return out;\n}\n__name(applyMarkerOffsets, \"applyMarkerOffsets\");\nfunction emitJump(jump, ux, uy, sweep, style) {\n const cx = jump.point.x;\n const cy = jump.point.y;\n const pre = { x: cx - ux * jump.r, y: cy - uy * jump.r };\n const post = { x: cx + ux * jump.r, y: cy + uy * jump.r };\n const out = [`L${pointToString(pre)}`];\n if (style === \"arc\") {\n out.push(`A${fmt(jump.r)},${fmt(jump.r)} 0 0 ${sweep} ${pointToString(post)}`);\n } else {\n out.push(`M${pointToString(post)}`);\n }\n return out;\n}\n__name(emitJump, \"emitJump\");\nfunction computeRoundedCorner(prev, curr, next, radius) {\n const dx1 = curr.x - prev.x;\n const dy1 = curr.y - prev.y;\n const dx2 = next.x - curr.x;\n const dy2 = next.y - curr.y;\n const len1 = Math.hypot(dx1, dy1);\n const len2 = Math.hypot(dx2, dy2);\n if (len1 < CORNER_EPSILON || len2 < CORNER_EPSILON) {\n return null;\n }\n const nx1 = dx1 / len1;\n const ny1 = dy1 / len1;\n const nx2 = dx2 / len2;\n const ny2 = dy2 / len2;\n const dot = nx1 * nx2 + ny1 * ny2;\n const clamped = Math.max(-1, Math.min(1, dot));\n const angle = Math.acos(clamped);\n if (angle < CORNER_EPSILON || Math.abs(Math.PI - angle) < CORNER_EPSILON) {\n return null;\n }\n const cutLen = Math.min(radius / Math.sin(angle / 2), len1 / 2, len2 / 2);\n return {\n startX: curr.x - nx1 * cutLen,\n startY: curr.y - ny1 * cutLen,\n endX: curr.x + nx2 * cutLen,\n endY: curr.y + ny2 * cutLen,\n ctrlX: curr.x,\n ctrlY: curr.y,\n cutLen\n };\n}\n__name(computeRoundedCorner, \"computeRoundedCorner\");\nfunction rewriteEdgePath(edge, jumps, config) {\n const rawPoints = edge.points;\n if (rawPoints.length < 2) {\n return \"\";\n }\n const points = applyMarkerOffsets(rawPoints, edge);\n const rounded = edge.curve === \"rounded\";\n const segments = buildSegmentList(points);\n const bySeg = /* @__PURE__ */ new Map();\n for (const j of jumps) {\n const seg = segments[j.segIndex];\n if (!seg) {\n continue;\n }\n const segLen = Math.hypot(seg.b.x - seg.a.x, seg.b.y - seg.a.y);\n const list = bySeg.get(j.segIndex) ?? [];\n list.push({\n t: j.t,\n point: j.point,\n d: j.t * segLen,\n r: config.jumpRadius\n });\n bySeg.set(j.segIndex, list);\n }\n const parts = [`M${pointToString(points[0])}`];\n for (let i = 0; i < segments.length; i++) {\n const seg = segments[i];\n const segLen = Math.hypot(seg.b.x - seg.a.x, seg.b.y - seg.a.y);\n const ux = segLen === 0 ? 0 : (seg.b.x - seg.a.x) / segLen;\n const uy = segLen === 0 ? 0 : (seg.b.y - seg.a.y) / segLen;\n const sweep = getArcSweepFlag(seg);\n let segStartConsumed = 0;\n if (rounded && i > 0) {\n const corner = computeRoundedCorner(\n points[i - 1],\n points[i],\n points[i + 1] ?? points[i],\n ROUNDED_CORNER_RADIUS\n );\n if (corner) {\n segStartConsumed = corner.cutLen;\n }\n }\n let segEndStop = segLen;\n let upcomingCorner = null;\n if (rounded && i < segments.length - 1) {\n upcomingCorner = computeRoundedCorner(\n points[i],\n points[i + 1],\n points[i + 2] ?? points[i + 1],\n ROUNDED_CORNER_RADIUS\n );\n if (upcomingCorner) {\n segEndStop = segLen - upcomingCorner.cutLen;\n }\n }\n const segJumps = [...bySeg.get(i) ?? []].sort((a, b) => a.t - b.t);\n for (const j of segJumps) {\n j.r = Math.min(j.r, j.d - segStartConsumed, segEndStop - j.d);\n }\n for (let k = 0; k < segJumps.length - 1; k++) {\n const gap = segJumps[k + 1].d - segJumps[k].d;\n if (segJumps[k].r + segJumps[k + 1].r > gap) {\n const half = gap / 2;\n segJumps[k].r = Math.min(segJumps[k].r, half);\n segJumps[k + 1].r = Math.min(segJumps[k + 1].r, half);\n }\n }\n for (const j of segJumps) {\n if (j.r < MIN_JUMP_RADIUS) {\n continue;\n }\n parts.push(...emitJump(j, ux, uy, sweep, config.jumpStyle));\n }\n if (rounded && upcomingCorner) {\n parts.push(`L${fmt(upcomingCorner.startX)},${fmt(upcomingCorner.startY)}`);\n parts.push(\n `Q${fmt(upcomingCorner.ctrlX)},${fmt(upcomingCorner.ctrlY)} ${fmt(upcomingCorner.endX)},${fmt(upcomingCorner.endY)}`\n );\n } else {\n parts.push(`L${pointToString(seg.b)}`);\n }\n }\n return parts.join(\" \");\n}\n__name(rewriteEdgePath, \"rewriteEdgePath\");\nfunction isStraightPath(d) {\n return /^[\\d\\s+,.LMelm-]*$/.test(d);\n}\n__name(isStraightPath, \"isStraightPath\");\nfunction curveSupportsLineHops(curve) {\n if (!curve) {\n return true;\n }\n return curve === \"linear\" || curve === \"rounded\" || curve === \"step\" || curve === \"stepBefore\" || curve === \"stepAfter\";\n}\n__name(curveSupportsLineHops, \"curveSupportsLineHops\");\nfunction decodeDataPoints(raw) {\n if (!raw) {\n return null;\n }\n try {\n const json = typeof atob === \"function\" ? atob(raw) : Buffer.from(raw, \"base64\").toString();\n const parsed = JSON.parse(json);\n if (!Array.isArray(parsed)) {\n return null;\n }\n const pts = [];\n for (const p of parsed) {\n if (p && typeof p.x === \"number\" && typeof p.y === \"number\") {\n pts.push({ x: p.x, y: p.y });\n }\n }\n return pts.length >= 2 ? pts : null;\n } catch {\n return null;\n }\n}\n__name(decodeDataPoints, \"decodeDataPoints\");\nfunction applyLineJumpsToSvg(edgePathsGroup, edges, config) {\n if (!config.enabled) {\n return;\n }\n const groupNode = edgePathsGroup.node();\n if (!groupNode) {\n return;\n }\n const edgeMeta = /* @__PURE__ */ new Map();\n for (const e of edges) {\n edgeMeta.set(e.id, e);\n }\n const renderedEdges = [];\n const pathById = /* @__PURE__ */ new Map();\n for (const e of edges) {\n const escapedId = typeof CSS !== \"undefined\" && CSS.escape ? CSS.escape(e.id) : e.id;\n const pathEl = groupNode.querySelector(`path[data-id=\"${escapedId}\"]`);\n if (!pathEl) {\n continue;\n }\n pathById.set(e.id, pathEl);\n const decoded = decodeDataPoints(pathEl.getAttribute(\"data-points\"));\n const points = decoded ?? e.points;\n renderedEdges.push({ ...e, points });\n }\n const crossings = findEdgeIntersections(renderedEdges);\n if (crossings.length === 0) {\n return;\n }\n const jumpsByEdge = /* @__PURE__ */ new Map();\n for (const c of crossings) {\n const list = jumpsByEdge.get(c.jumpEdgeId) ?? [];\n list.push(c);\n jumpsByEdge.set(c.jumpEdgeId, list);\n }\n for (const renderedEdge of renderedEdges) {\n const jumps = jumpsByEdge.get(renderedEdge.id);\n if (!jumps || jumps.length === 0) {\n continue;\n }\n const meta = edgeMeta.get(renderedEdge.id);\n const curveHint = meta?.curve;\n if (curveHint !== void 0 && !curveSupportsLineHops(curveHint)) {\n continue;\n }\n const pathEl = pathById.get(renderedEdge.id);\n if (!pathEl) {\n continue;\n }\n if (curveHint === void 0) {\n const currentD = pathEl.getAttribute(\"d\") ?? \"\";\n if (!isStraightPath(currentD)) {\n continue;\n }\n }\n const originalStyle = pathEl.getAttribute(\"style\") ?? \"\";\n const dasharrayMatch = /stroke-dasharray\\s*:\\s*0\\s+([\\d.]+)\\s+[\\d.]+\\s+([\\d.]+)/.exec(\n originalStyle\n );\n const preservedOValueS = dasharrayMatch ? Number.parseFloat(dasharrayMatch[1]) : null;\n const preservedOValueE = dasharrayMatch ? Number.parseFloat(dasharrayMatch[2]) : null;\n const newD = rewriteEdgePath(renderedEdge, jumps, config);\n pathEl.setAttribute(\"d\", newD);\n if (preservedOValueS !== null && preservedOValueE !== null && typeof pathEl.getTotalLength === \"function\") {\n const newLen = pathEl.getTotalLength();\n const onLen = Math.max(0, newLen - preservedOValueS - preservedOValueE);\n const newDasharray = `0 ${preservedOValueS} ${onLen} ${preservedOValueE}`;\n const cleaned = originalStyle.replace(/stroke-dasharray\\s*:[^;]*;?/g, `stroke-dasharray: ${newDasharray};`).replace(/;\\s*;+/g, \";\");\n pathEl.setAttribute(\"style\", cleaned);\n }\n }\n}\n__name(applyLineJumpsToSvg, \"applyLineJumpsToSvg\");\n\n// src/rendering-util/layout-algorithms/swimlanes/adjustLayout.ts\nasync function adjustLayout(data4Layout, groups) {\n for (const node of data4Layout.nodes) {\n if (node.isGroup) {\n await insertCluster(groups.clusters, node);\n } else {\n positionNode(node);\n }\n }\n const nodeById = /* @__PURE__ */ new Map();\n for (const node of data4Layout.nodes) {\n if (node?.id) {\n nodeById.set(node.id, node);\n }\n }\n for (const edge of data4Layout.edges) {\n const startNode = edge.start ? nodeById.get(edge.start) ?? {} : {};\n const endNode = edge.end ? nodeById.get(edge.end) ?? {} : {};\n const paths = insertEdge(\n groups.edgePaths,\n { ...edge },\n {},\n data4Layout.type,\n startNode,\n endNode,\n data4Layout.diagramId\n );\n if (edge.label) {\n await insertEdgeLabel(groups.rootGroups, edge);\n }\n if (edge.label) {\n positionEdgeLabel(edge, paths);\n }\n }\n const lineHopsConfig = data4Layout.config?.swimlane?.lineHops;\n if (lineHopsConfig !== false) {\n const jumpStyle = lineHopsConfig === \"gap\" ? \"gap\" : \"arc\";\n const edgeGeometries = data4Layout.edges.filter((e) => Array.isArray(e.points) && e.points.length >= 2).map((e) => ({\n id: e.id,\n points: e.points,\n curve: e.curve,\n arrowTypeStart: e.arrowTypeStart,\n arrowTypeEnd: e.arrowTypeEnd\n }));\n applyLineJumpsToSvg(groups.edgePaths, edgeGeometries, {\n enabled: true,\n jumpRadius: 6,\n jumpStyle\n });\n }\n}\n__name(adjustLayout, \"adjustLayout\");\nfunction positionEdgeLabel(edge, paths) {\n const path = paths?.updatedPath ?? paths?.originalPath;\n const siteConfig = getConfig();\n const { subGraphTitleTotalMargin } = getSubGraphTitleMargins({\n flowchart: siteConfig.flowchart ?? {}\n });\n if (edge.label) {\n const el = edgeLabels.get(edge.id);\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils_default.calcLabelPosition(path);\n log.debug(\n \"Moving label \" + edge.label + \" from (\",\n x,\n \",\",\n y,\n \") to (\",\n pos.x,\n \",\",\n pos.y,\n \") abc88\"\n );\n if (paths) {\n x = pos.x;\n y = pos.y;\n }\n }\n el.attr(\"transform\", `translate(${x}, ${y + subGraphTitleTotalMargin / 2})`);\n }\n if (edge?.startLabelLeft) {\n const el = terminalLabels.get(edge.id).startLeft;\n let x = edge?.x;\n let y = edge?.y;\n if (path) {\n const pos = utils_default.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, \"start_left\", path);\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", `translate(${x}, ${y})`);\n }\n if (edge.startLabelRight) {\n const el = terminalLabels.get(edge.id).startRight;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils_default.calcTerminalLabelPosition(\n edge.arrowTypeStart ? 10 : 0,\n \"start_right\",\n path\n );\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", `translate(${x}, ${y})`);\n }\n if (edge.endLabelLeft) {\n const el = terminalLabels.get(edge.id).endLeft;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils_default.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, \"end_left\", path);\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", `translate(${x}, ${y})`);\n }\n if (edge.endLabelRight) {\n const el = terminalLabels.get(edge.id).endRight;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils_default.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, \"end_right\", path);\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", `translate(${x}, ${y})`);\n }\n}\n__name(positionEdgeLabel, \"positionEdgeLabel\");\n\n// src/rendering-util/layout-algorithms/swimlanes/helpers.ts\nvar DEFAULT_SWIMLANE_ID = \"__swimlane_default__\";\nvar TOP_LANE_TITLE_BAND_HEIGHT = 21;\nvar MIN_TOP_LANE_HORIZONTAL_PADDING = 20;\nfunction topLaneHorizontalPadding(lane) {\n return Math.max(lane.padding ?? MIN_TOP_LANE_HORIZONTAL_PADDING, MIN_TOP_LANE_HORIZONTAL_PADDING);\n}\n__name(topLaneHorizontalPadding, \"topLaneHorizontalPadding\");\nfunction assignTopLaneTitleRect(lane) {\n const { x, y, width, height } = lane;\n const contentTop = lane.swimlaneContentTop;\n if (typeof x !== \"number\" || typeof y !== \"number\" || typeof width !== \"number\" || typeof height !== \"number\" || typeof contentTop !== \"number\" || !Number.isFinite(x) || !Number.isFinite(y) || !Number.isFinite(width) || !Number.isFinite(height) || !Number.isFinite(contentTop) || width <= 0 || height <= 0) {\n delete lane.groupTitleRect;\n return;\n }\n const top = y - height / 2;\n const headerBottom = Math.min(contentTop, y + height / 2);\n const titleHeight = Math.min(TOP_LANE_TITLE_BAND_HEIGHT, Math.max(0, headerBottom - top));\n const bottom = top + titleHeight;\n if (bottom <= top) {\n delete lane.groupTitleRect;\n return;\n }\n lane.groupTitleRect = {\n left: x - width / 2,\n right: x + width / 2,\n top,\n bottom\n };\n}\n__name(assignTopLaneTitleRect, \"assignTopLaneTitleRect\");\nfunction prepareLayoutForSwimlanes(layout) {\n const direction = layout.direction;\n const nodes = layout.nodes ??= [];\n for (const node of layout.nodes ?? []) {\n if (node.isGroup && !node.parentId) {\n node.shape = \"swimlane\";\n if (direction) {\n node.direction = direction;\n }\n }\n }\n const looseNodes = nodes.filter((node) => !node.isGroup && !node.parentId);\n if (looseNodes.length === 0) {\n return;\n }\n let defaultLane = nodes.find((node) => node.id === DEFAULT_SWIMLANE_ID);\n if (!defaultLane) {\n defaultLane = {\n id: DEFAULT_SWIMLANE_ID,\n label: \"\",\n isGroup: true,\n shape: \"swimlane\",\n padding: 20,\n ...direction ? { direction } : {}\n };\n nodes.push(defaultLane);\n } else if (defaultLane.isGroup) {\n defaultLane.shape = \"swimlane\";\n if (direction) {\n defaultLane.direction = direction;\n }\n }\n for (const node of looseNodes) {\n node.parentId = DEFAULT_SWIMLANE_ID;\n }\n}\n__name(prepareLayoutForSwimlanes, \"prepareLayoutForSwimlanes\");\nfunction toGraphView(layout) {\n const nodeById = /* @__PURE__ */ new Map();\n for (const n of layout.nodes ?? []) {\n nodeById.set(n.id, n);\n }\n const edges = [];\n for (const e of layout.edges ?? []) {\n const src = typeof e.start === \"string\" ? e.start : void 0;\n const dst = typeof e.end === \"string\" ? e.end : void 0;\n if (!src || !dst) {\n continue;\n }\n if (e.labelNodeId) {\n continue;\n }\n edges.push({ id: e.id, src, dst, ref: e });\n }\n const allNodes = layout.nodes ?? [];\n const groupNodes = allNodes.filter((n) => n.isGroup);\n const nonGroupNodes = allNodes.filter((n) => !n.isGroup);\n const nodesInGroupOrder = [...groupNodes].reverse();\n const nodes = [...nodesInGroupOrder, ...nonGroupNodes].map((n) => n.id);\n return { nodes, edges, layout, nodeById };\n}\n__name(toGraphView, \"toGraphView\");\nfunction writeBackToLayoutData(g, ordered, coords, opts) {\n const { layout } = g;\n const nodeMap = g.nodeById;\n const layerGap = opts?.layerGap ?? 100;\n const nodeGap = opts?.nodeGap ?? 40;\n let layerIndex = 0;\n for (const layer of ordered.layers) {\n let orderIndex = 0;\n for (const id of layer) {\n const node = nodeMap.get(id);\n if (!node) {\n orderIndex++;\n continue;\n }\n node.layer = layerIndex;\n node.order = orderIndex;\n const x = coords.x[id] ?? orderIndex * nodeGap;\n const y = coords.y[id] ?? layerIndex * layerGap;\n node.x = x;\n node.y = y;\n orderIndex++;\n }\n layerIndex++;\n }\n const allNodes = layout.nodes ?? [];\n const groupBounds = /* @__PURE__ */ new Map();\n const topLevelGroups = [];\n for (const group of allNodes) {\n if (!group?.isGroup) {\n continue;\n }\n if (!group.parentId) {\n topLevelGroups.push(group);\n }\n const children = allNodes.filter((n) => n.parentId === group.id);\n let minX = Infinity;\n let maxX = -Infinity;\n let minY = Infinity;\n let maxY = -Infinity;\n for (const child of children) {\n const cx = child.x ?? coords.x[child.id];\n const cy = child.y ?? coords.y[child.id];\n const cw = child.width ?? 0;\n const ch = child.height ?? 0;\n if (cx != null && cy != null) {\n minX = Math.min(minX, cx - cw / 2);\n maxX = Math.max(maxX, cx + cw / 2);\n minY = Math.min(minY, cy - ch / 2);\n maxY = Math.max(maxY, cy + ch / 2);\n }\n }\n if (minX === Infinity || minY === Infinity) {\n group.x = group.x ?? 0;\n group.y = group.y ?? 0;\n group.width = group.width ?? 0;\n group.height = group.height ?? 0;\n } else {\n const pad = group.padding ?? 20;\n const horizontalPad = group.parentId ? pad : 2 * topLaneHorizontalPadding(group);\n const verticalPad = pad;\n const w = Math.max(0, maxX - minX) + horizontalPad;\n const h = Math.max(0, maxY - minY) + verticalPad;\n const cx = (minX + maxX) / 2;\n const cy = (minY + maxY) / 2;\n group.x = cx;\n group.y = cy;\n group.width = w;\n group.height = h;\n groupBounds.set(group.id, { minX, maxX, minY, maxY });\n }\n }\n if (topLevelGroups.length > 0 && groupBounds.size > 0) {\n let globalMinY = Infinity;\n let globalMaxY = -Infinity;\n let maxPad = 0;\n for (const lane of topLevelGroups) {\n const pad = lane.padding ?? 20;\n if (pad > maxPad) {\n maxPad = pad;\n }\n const b = groupBounds.get(lane.id);\n if (!b) {\n continue;\n }\n globalMinY = Math.min(globalMinY, b.minY);\n globalMaxY = Math.max(globalMaxY, b.maxY);\n }\n if (globalMinY !== Infinity && globalMaxY !== -Infinity) {\n const contentHeight = Math.max(0, globalMaxY - globalMinY);\n const minHeaderMargin = 36;\n const verticalMargin = Math.max(maxPad, minHeaderMargin);\n const laneHeight = contentHeight + 2 * verticalMargin;\n const centerY = (globalMinY + globalMaxY) / 2;\n for (const lane of topLevelGroups) {\n lane.y = centerY;\n lane.height = laneHeight;\n lane.swimlaneContentTop = globalMinY;\n }\n const sortedLanes = [...topLevelGroups].sort((a, b) => {\n const ax = a.x ?? 0;\n const bx = b.x ?? 0;\n return ax - bx;\n });\n const laneIds = [];\n const centers = [];\n const baseWidths = [];\n for (const lane of sortedLanes) {\n const b = groupBounds.get(lane.id);\n if (!b) {\n continue;\n }\n const contentWidth = Math.max(0, b.maxX - b.minX) + 2 * topLaneHorizontalPadding(lane);\n const cx = (b.minX + b.maxX) / 2;\n laneIds.push(lane.id);\n centers.push(cx);\n baseWidths.push(contentWidth);\n }\n const count = laneIds.length;\n if (count > 0) {\n const laneWidths = /* @__PURE__ */ new Map();\n if (count === 1) {\n laneWidths.set(laneIds[0], baseWidths[0]);\n } else {\n const d = [];\n for (let i = 0; i < count - 1; i++) {\n d.push(centers[i + 1] - centers[i]);\n }\n const u = new Array(count);\n u[0] = 0;\n for (let i = 0; i < count - 1; i++) {\n u[i + 1] = 2 * d[i] - u[i];\n }\n let lowerBound = 0;\n let upperBound = Number.POSITIVE_INFINITY;\n for (let i = 0; i < count; i++) {\n const baseW = baseWidths[i];\n if (i % 2 === 0) {\n lowerBound = Math.max(lowerBound, baseW - u[i]);\n } else {\n upperBound = Math.min(upperBound, u[i] - baseW);\n }\n }\n let x = lowerBound;\n if (lowerBound <= upperBound) {\n x = (lowerBound + upperBound) / 2;\n } else {\n x = lowerBound;\n }\n for (let i = 0; i < count; i++) {\n const w = u[i] + (i % 2 === 0 ? x : -x);\n const finalWidth = Math.max(baseWidths[i], w);\n laneWidths.set(laneIds[i], finalWidth);\n }\n }\n for (const lane of topLevelGroups) {\n const w = laneWidths.get(lane.id);\n if (w != null) {\n lane.width = w;\n }\n assignTopLaneTitleRect(lane);\n }\n }\n }\n }\n}\n__name(writeBackToLayoutData, \"writeBackToLayoutData\");\n\n// src/rendering-util/layout-algorithms/swimlanes/edgeLabelNodes.ts\nvar EDGE_LABEL_LOG_PREFIX = \"[EdgeLabelNodes]\";\nfunction createEdgeLabelNodes(data) {\n const nodesToAdd = [];\n const layoutOnlyEdges = [];\n const nodeById = /* @__PURE__ */ new Map();\n for (const node of data.nodes) {\n nodeById.set(node.id, node);\n }\n for (const edge of data.edges) {\n if (!edge.label || edge.label.length === 0) {\n continue;\n }\n if (edge.isLayoutOnly) {\n continue;\n }\n if (edge.labelNodeId) {\n continue;\n }\n const sourceNode = edge.start ? nodeById.get(edge.start) : void 0;\n const targetNode = edge.end ? nodeById.get(edge.end) : void 0;\n if (!sourceNode || !targetNode) {\n log.warn(EDGE_LABEL_LOG_PREFIX, `Edge ${edge.id} has missing source or target node`);\n continue;\n }\n const labelNodeId = `edge-label-${edge.start}-${edge.end}-${edge.id}`;\n const isCrossLane = sourceNode.parentId !== targetNode.parentId;\n const labelLane = isCrossLane ? targetNode.parentId : sourceNode.parentId;\n const labelNode = {\n id: labelNodeId,\n label: edge.label,\n edgeStart: edge.start ?? \"\",\n edgeEnd: edge.end ?? \"\",\n shape: \"labelRect\",\n width: 0,\n // populated when rendered / applied from fixture\n height: 0,\n isEdgeLabel: true,\n isDummy: true,\n parentId: labelLane,\n isGroup: false,\n labelStyle: Array.isArray(edge.labelStyle) ? edge.labelStyle[0] : edge.labelStyle ?? \"\",\n ...sourceNode.dir ? { dir: sourceNode.dir } : {}\n };\n nodesToAdd.push(labelNode);\n edge.labelNodeId = labelNodeId;\n edge.label = void 0;\n edge.text = void 0;\n const toLabelVirtual = {\n id: `${edge.id}-to-label`,\n start: edge.start,\n end: labelNodeId,\n type: \"normal\",\n isLayoutOnly: true\n };\n const fromLabelVirtual = {\n id: `${edge.id}-from-label`,\n start: labelNodeId,\n end: edge.end,\n type: \"normal\",\n isLayoutOnly: true\n };\n layoutOnlyEdges.push(toLabelVirtual, fromLabelVirtual);\n }\n const newNodes = [...data.nodes, ...nodesToAdd];\n const newEdges = [...data.edges, ...layoutOnlyEdges];\n return {\n ...data,\n nodes: newNodes,\n edges: newEdges\n };\n}\n__name(createEdgeLabelNodes, \"createEdgeLabelNodes\");\n\n// src/rendering-util/layout-algorithms/swimlanes/direction/geometry.ts\nvar EPS = 1e-3;\nfunction measuredNodeRect(node) {\n const cx = node.x ?? 0;\n const cy = node.y ?? 0;\n const width = node.width ?? 0;\n const height = node.height ?? 0;\n return width > 0 && height > 0 ? { cx, cy, rect: rectFromCenterSize(cx, cy, width, height) } : void 0;\n}\n__name(measuredNodeRect, \"measuredNodeRect\");\nfunction nodeBoundsInfoFor(node) {\n if (node.isGroup) {\n return void 0;\n }\n const measured = measuredNodeRect(node);\n if (!measured) {\n return void 0;\n }\n const id = String(node.id ?? \"\");\n return {\n id,\n cx: measured.cx,\n cy: measured.cy,\n rect: measured.rect\n };\n}\n__name(nodeBoundsInfoFor, \"nodeBoundsInfoFor\");\nfunction samePoint(a, b, epsilon = EPS) {\n return Math.abs(a.x - b.x) < epsilon && Math.abs(a.y - b.y) < epsilon;\n}\n__name(samePoint, \"samePoint\");\nfunction sameX(a, b, epsilon = EPS) {\n return Math.abs(a.x - b.x) < epsilon;\n}\n__name(sameX, \"sameX\");\nfunction sameY(a, b, epsilon = EPS) {\n return Math.abs(a.y - b.y) < epsilon;\n}\n__name(sameY, \"sameY\");\nfunction isHorizontalSegment(a, b, epsilon = EPS) {\n return sameY(a, b, epsilon) && Math.abs(a.x - b.x) > epsilon;\n}\n__name(isHorizontalSegment, \"isHorizontalSegment\");\nfunction isVerticalSegment(a, b, epsilon = EPS) {\n return sameX(a, b, epsilon) && Math.abs(a.y - b.y) > epsilon;\n}\n__name(isVerticalSegment, \"isVerticalSegment\");\nfunction overlapLength(a1, a2, b1, b2) {\n return Math.max(\n 0,\n Math.min(Math.max(a1, a2), Math.max(b1, b2)) - Math.max(Math.min(a1, a2), Math.min(b1, b2))\n );\n}\n__name(overlapLength, \"overlapLength\");\nfunction sameAxisSegmentOverlapLength(a, b, epsilon = EPS) {\n if (a.horizontal && b.horizontal && sameY(a.a, b.a, epsilon)) {\n return overlapLength(a.a.x, a.b.x, b.a.x, b.b.x);\n }\n if (a.vertical && b.vertical && sameX(a.a, b.a, epsilon)) {\n return overlapLength(a.a.y, a.b.y, b.a.y, b.b.y);\n }\n return 0;\n}\n__name(sameAxisSegmentOverlapLength, \"sameAxisSegmentOverlapLength\");\nfunction orthogonalSegmentsForPoints(points, epsilon = EPS) {\n const result = [];\n for (let i = 0; i < points.length - 1; i++) {\n const a = points[i];\n const b = points[i + 1];\n const horizontal = isHorizontalSegment(a, b, epsilon);\n const vertical = isVerticalSegment(a, b, epsilon);\n if (horizontal || vertical) {\n result.push({ index: i, a, b, horizontal, vertical });\n }\n }\n return result;\n}\n__name(orthogonalSegmentsForPoints, \"orthogonalSegmentsForPoints\");\nfunction countOrthogonalBends(points, epsilon = EPS) {\n const segments = orthogonalSegmentsForPoints(points, epsilon);\n let bends = 0;\n for (let i = 1; i < segments.length; i++) {\n if (segments[i - 1].horizontal !== segments[i].horizontal) {\n bends++;\n }\n }\n return bends;\n}\n__name(countOrthogonalBends, \"countOrthogonalBends\");\nfunction dedupeConsecutivePoints(points, epsilon = EPS) {\n const result = [];\n for (const point of points) {\n const last = result.length > 0 ? result[result.length - 1] : void 0;\n if (!last || !samePoint(last, point, epsilon)) {\n result.push({ x: point.x, y: point.y });\n }\n }\n return result;\n}\n__name(dedupeConsecutivePoints, \"dedupeConsecutivePoints\");\nfunction classifyThreeSegmentRoute(points, epsilon = EPS) {\n if (!points || points.length !== 4) {\n return void 0;\n }\n const [p0, p1, p2, p3] = points;\n const isHVH = isHorizontalSegment(p0, p1, epsilon) && isVerticalSegment(p1, p2, epsilon) && isHorizontalSegment(p2, p3, epsilon);\n if (isHVH) {\n return { kind: \"HVH\", p0, p1, p2, p3 };\n }\n const isVHV = isVerticalSegment(p0, p1, epsilon) && isHorizontalSegment(p1, p2, epsilon) && isVerticalSegment(p2, p3, epsilon);\n return isVHV ? { kind: \"VHV\", p0, p1, p2, p3 } : void 0;\n}\n__name(classifyThreeSegmentRoute, \"classifyThreeSegmentRoute\");\nfunction segmentBoundsOverlapRect(a, b, rect, buffer = 0) {\n const segMinX = Math.min(a.x, b.x);\n const segMaxX = Math.max(a.x, b.x);\n const segMinY = Math.min(a.y, b.y);\n const segMaxY = Math.max(a.y, b.y);\n return segMaxX > rect.left - buffer && segMinX < rect.right + buffer && segMaxY > rect.top - buffer && segMinY < rect.bottom + buffer;\n}\n__name(segmentBoundsOverlapRect, \"segmentBoundsOverlapRect\");\nfunction pointInsideRect(point, rect, buffer = 0) {\n return point.x > rect.left + buffer && point.x < rect.right - buffer && point.y > rect.top + buffer && point.y < rect.bottom - buffer;\n}\n__name(pointInsideRect, \"pointInsideRect\");\nfunction rectContainsRect(outer, inner) {\n return outer.left <= inner.left && outer.right >= inner.right && outer.top <= inner.top && outer.bottom >= inner.bottom;\n}\n__name(rectContainsRect, \"rectContainsRect\");\nfunction rectsOverlap(a, b) {\n return a.left < b.right && a.right > b.left && a.top < b.bottom && a.bottom > b.top;\n}\n__name(rectsOverlap, \"rectsOverlap\");\nfunction inflateRect(rect, margin) {\n return {\n left: rect.left - margin,\n right: rect.right + margin,\n top: rect.top - margin,\n bottom: rect.bottom + margin\n };\n}\n__name(inflateRect, \"inflateRect\");\nfunction rectFromCenterSize(cx, cy, width, height) {\n return {\n left: cx - width / 2,\n right: cx + width / 2,\n top: cy - height / 2,\n bottom: cy + height / 2\n };\n}\n__name(rectFromCenterSize, \"rectFromCenterSize\");\nfunction rectOfNodeBounds(node) {\n return measuredNodeRect(node)?.rect;\n}\n__name(rectOfNodeBounds, \"rectOfNodeBounds\");\nfunction portForRectSide(node, side) {\n switch (side) {\n case \"top\":\n return { x: node.cx, y: node.rect.top };\n case \"bottom\":\n return { x: node.cx, y: node.rect.bottom };\n case \"left\":\n return { x: node.rect.left, y: node.cy };\n case \"right\":\n return { x: node.rect.right, y: node.cy };\n }\n}\n__name(portForRectSide, \"portForRectSide\");\nfunction buildOrthogonalPortPath(src, srcSide, dst, dstSide, anchor, epsilon = EPS) {\n const srcH = srcSide === \"left\" || srcSide === \"right\";\n const dstH = dstSide === \"left\" || dstSide === \"right\";\n if (srcH && dstH) {\n const opposingDir = srcSide === \"right\" && dstSide === \"left\" && src.x < dst.x || srcSide === \"left\" && dstSide === \"right\" && src.x > dst.x;\n if (opposingDir) {\n if (sameY(src, dst, epsilon)) {\n return [src, dst];\n }\n const midX = (src.x + dst.x) / 2;\n return [src, { x: midX, y: src.y }, { x: midX, y: dst.y }, dst];\n }\n if (srcSide === dstSide) {\n if (sameY(src, dst, epsilon)) {\n return void 0;\n }\n const intX = srcSide === \"left\" ? Math.min(src.x, dst.x) - anchor : Math.max(src.x, dst.x) + anchor;\n return [src, { x: intX, y: src.y }, { x: intX, y: dst.y }, dst];\n }\n return void 0;\n }\n if (!srcH && !dstH) {\n if (srcSide === dstSide) {\n if (sameX(src, dst, epsilon)) {\n return void 0;\n }\n const intY = srcSide === \"top\" ? Math.min(src.y, dst.y) - anchor : Math.max(src.y, dst.y) + anchor;\n return [src, { x: src.x, y: intY }, { x: dst.x, y: intY }, dst];\n }\n const sameDir = srcSide === \"bottom\" && dstSide === \"top\" && src.y < dst.y || srcSide === \"top\" && dstSide === \"bottom\" && src.y > dst.y;\n if (!sameDir) {\n return void 0;\n }\n if (sameX(src, dst, epsilon)) {\n return [src, dst];\n }\n const midY = (src.y + dst.y) / 2;\n return [src, { x: src.x, y: midY }, { x: dst.x, y: midY }, dst];\n }\n if (srcH && !dstH) {\n const sameDirSrc2 = srcSide === \"right\" && dst.x > src.x || srcSide === \"left\" && dst.x < src.x;\n const sameDirDst2 = dstSide === \"top\" && src.y < dst.y || dstSide === \"bottom\" && src.y > dst.y;\n return sameDirSrc2 && sameDirDst2 ? [src, { x: dst.x, y: src.y }, dst] : void 0;\n }\n const sameDirSrc = srcSide === \"bottom\" && dst.y > src.y || srcSide === \"top\" && dst.y < src.y;\n const sameDirDst = dstSide === \"left\" && src.x < dst.x || dstSide === \"right\" && src.x > dst.x;\n return sameDirSrc && sameDirDst ? [src, { x: src.x, y: dst.y }, dst] : void 0;\n}\n__name(buildOrthogonalPortPath, \"buildOrthogonalPortPath\");\nfunction buildSameSideTrackPath(src, side, dst, track) {\n return side === \"left\" || side === \"right\" ? [src, { x: track, y: src.y }, { x: track, y: dst.y }, dst] : [src, { x: src.x, y: track }, { x: dst.x, y: track }, dst];\n}\n__name(buildSameSideTrackPath, \"buildSameSideTrackPath\");\nfunction collectRealNodeBounds(nodes) {\n const nodeInfoById = /* @__PURE__ */ new Map();\n const realNodeRects = [];\n for (const node of nodes) {\n if (node.isEdgeLabel) {\n continue;\n }\n const info = nodeBoundsInfoFor(node);\n if (!info) {\n continue;\n }\n nodeInfoById.set(info.id, info);\n realNodeRects.push({ id: info.id, rect: info.rect });\n }\n return { nodeInfoById, realNodeRects };\n}\n__name(collectRealNodeBounds, \"collectRealNodeBounds\");\nfunction collectNodeRectEntries(nodes) {\n const realNodeRects = [];\n const labelNodeRects = [];\n for (const node of nodes) {\n const info = nodeBoundsInfoFor(node);\n if (!info) {\n continue;\n }\n const entry = { id: info.id, rect: info.rect };\n if (node.isEdgeLabel) {\n labelNodeRects.push(entry);\n } else {\n realNodeRects.push(entry);\n }\n }\n return { realNodeRects, labelNodeRects };\n}\n__name(collectNodeRectEntries, \"collectNodeRectEntries\");\nfunction collectLayoutNodeRects(nodes, { includeEdgeLabels = true } = {}) {\n const result = [];\n for (const node of nodes) {\n if (node.isGroup || !includeEdgeLabels && node.isEdgeLabel) {\n continue;\n }\n const cx = node.x ?? 0;\n const cy = node.y ?? 0;\n const width = node.width ?? 0;\n const height = node.height ?? 0;\n result.push({\n nodeId: node.id,\n ...rectFromCenterSize(cx, cy, width, height)\n });\n }\n return result;\n}\n__name(collectLayoutNodeRects, \"collectLayoutNodeRects\");\nfunction getNodePairGeometry(edge, nodeInfoById, epsilon = EPS) {\n const srcId = edge.start;\n const dstId = edge.end;\n if (!srcId || !dstId) {\n return void 0;\n }\n const srcInfo = nodeInfoById.get(srcId);\n const dstInfo = nodeInfoById.get(dstId);\n if (!srcInfo || !dstInfo) {\n return void 0;\n }\n return {\n srcId,\n dstId,\n srcInfo,\n dstInfo,\n collinearX: Math.abs(srcInfo.cx - dstInfo.cx) < epsilon,\n collinearY: Math.abs(srcInfo.cy - dstInfo.cy) < epsilon\n };\n}\n__name(getNodePairGeometry, \"getNodePairGeometry\");\nfunction segmentHitsAnyRect(a, b, rects, excludeIds = [], shrink = 0) {\n for (const entry of rects) {\n if (excludeIds.includes(entry.id)) {\n continue;\n }\n if (segmentBoundsOverlapRect(a, b, entry.rect, -shrink)) {\n return true;\n }\n }\n return false;\n}\n__name(segmentHitsAnyRect, \"segmentHitsAnyRect\");\nfunction orthogonalSegmentsCross(a1, b1, a2, b2, epsilon = EPS, endpointTolerance = 1e-6) {\n const s1H = sameY(a1, b1, epsilon);\n const s1V = sameX(a1, b1, epsilon);\n const s2H = sameY(a2, b2, epsilon);\n const s2V = sameX(a2, b2, epsilon);\n if (s1H && s2H || s1V && s2V) {\n return false;\n }\n if (!(s1H || s1V) || !(s2H || s2V)) {\n return false;\n }\n const horiz = s1H ? { a: a1, b: b1 } : { a: a2, b: b2 };\n const vert = s1V ? { a: a1, b: b1 } : { a: a2, b: b2 };\n const hY = horiz.a.y;\n const hX1 = Math.min(horiz.a.x, horiz.b.x);\n const hX2 = Math.max(horiz.a.x, horiz.b.x);\n const vX = vert.a.x;\n const vY1 = Math.min(vert.a.y, vert.b.y);\n const vY2 = Math.max(vert.a.y, vert.b.y);\n if (vX < hX1 || vX > hX2 || hY < vY1 || hY > vY2) {\n return false;\n }\n const matchesHorizEndpoint = Math.abs(vX - horiz.a.x) < endpointTolerance && Math.abs(hY - horiz.a.y) < endpointTolerance || Math.abs(vX - horiz.b.x) < endpointTolerance && Math.abs(hY - horiz.b.y) < endpointTolerance;\n const matchesVertEndpoint = Math.abs(vX - vert.a.x) < endpointTolerance && Math.abs(hY - vert.a.y) < endpointTolerance || Math.abs(vX - vert.b.x) < endpointTolerance && Math.abs(hY - vert.b.y) < endpointTolerance;\n return !(matchesHorizEndpoint && matchesVertEndpoint);\n}\n__name(orthogonalSegmentsCross, \"orthogonalSegmentsCross\");\nfunction sameAxisSegmentsOverlap(a1, b1, a2, b2, epsilon = EPS) {\n const s1H = sameY(a1, b1, epsilon);\n const s1V = sameX(a1, b1, epsilon);\n const s2H = sameY(a2, b2, epsilon);\n const s2V = sameX(a2, b2, epsilon);\n if (s1V && s2V && sameX(a1, a2, epsilon)) {\n return overlapLength(a1.y, b1.y, a2.y, b2.y) > epsilon;\n }\n if (s1H && s2H && sameY(a1, a2, epsilon)) {\n return overlapLength(a1.x, b1.x, a2.x, b2.x) > epsilon;\n }\n return false;\n}\n__name(sameAxisSegmentsOverlap, \"sameAxisSegmentsOverlap\");\nfunction segmentConflictsWithAnyEdge(a, b, edges, excludeEdge, {\n epsilon = EPS,\n skipDegenerateOther = false\n} = {}) {\n for (const other of edges) {\n if (other === excludeEdge || other.isLayoutOnly) {\n continue;\n }\n const points = other.points;\n if (!points || points.length < 2) {\n continue;\n }\n for (let i = 0; i < points.length - 1; i++) {\n const oa = points[i];\n const ob = points[i + 1];\n if (skipDegenerateOther && samePoint(oa, ob, epsilon)) {\n continue;\n }\n if (orthogonalSegmentsCross(a, b, oa, ob, epsilon) || sameAxisSegmentsOverlap(a, b, oa, ob, epsilon)) {\n return true;\n }\n }\n }\n return false;\n}\n__name(segmentConflictsWithAnyEdge, \"segmentConflictsWithAnyEdge\");\nfunction orthogonalSegmentsStrictlyCross(a1, b1, a2, b2, epsilon = EPS) {\n const aHoriz = sameY(a1, b1, epsilon);\n const aVert = sameX(a1, b1, epsilon);\n const bHoriz = sameY(a2, b2, epsilon);\n const bVert = sameX(a2, b2, epsilon);\n if (!(aHoriz && bVert || aVert && bHoriz)) {\n return false;\n }\n const horiz = aHoriz ? { a: a1, b: b1 } : { a: a2, b: b2 };\n const vert = aHoriz ? { a: a2, b: b2 } : { a: a1, b: b1 };\n const hY = horiz.a.y;\n const hXmin = Math.min(horiz.a.x, horiz.b.x);\n const hXmax = Math.max(horiz.a.x, horiz.b.x);\n const vX = vert.a.x;\n const vYmin = Math.min(vert.a.y, vert.b.y);\n const vYmax = Math.max(vert.a.y, vert.b.y);\n return vX > hXmin + epsilon && vX < hXmax - epsilon && hY > vYmin + epsilon && hY < vYmax - epsilon;\n}\n__name(orthogonalSegmentsStrictlyCross, \"orthogonalSegmentsStrictlyCross\");\nfunction strictlyBetween(value, a, b) {\n const lo = Math.min(a, b);\n const hi = Math.max(a, b);\n return value > lo + EPS && value < hi - EPS;\n}\n__name(strictlyBetween, \"strictlyBetween\");\nfunction isCollinearIntermediate(prev, cur, next) {\n if (sameX(prev, cur) && sameX(cur, next)) {\n return strictlyBetween(cur.y, prev.y, next.y);\n }\n if (sameY(prev, cur) && sameY(cur, next)) {\n return strictlyBetween(cur.x, prev.x, next.x);\n }\n return false;\n}\n__name(isCollinearIntermediate, \"isCollinearIntermediate\");\nfunction simplifyPolylineOnce(points) {\n let changed = false;\n const out = [];\n for (let i = 0; i < points.length; i++) {\n const prev = out[out.length - 1];\n const cur = points[i];\n const next = i + 1 < points.length ? points[i + 1] : void 0;\n if (prev && next) {\n if (samePoint(prev, next)) {\n i++;\n changed = true;\n continue;\n }\n if (isCollinearIntermediate(prev, cur, next)) {\n changed = true;\n continue;\n }\n }\n out.push(cur);\n }\n return { points: out, changed };\n}\n__name(simplifyPolylineOnce, \"simplifyPolylineOnce\");\nfunction orthogonalizePolyline(pts) {\n const cleaned = [pts[0]];\n for (let i = 1; i < pts.length; i++) {\n const prev = cleaned[cleaned.length - 1];\n const curr = pts[i];\n if (!sameX(prev, curr) && !sameY(prev, curr)) {\n const prevPrev = cleaned.length >= 2 ? cleaned[cleaned.length - 2] : void 0;\n const incomingVertical = prevPrev ? sameX(prevPrev, prev) : false;\n const corner = incomingVertical ? { x: prev.x, y: curr.y } : { x: curr.x, y: prev.y };\n cleaned.push(corner);\n }\n cleaned.push(curr);\n }\n const deduped = [];\n for (const p of cleaned) {\n const last = deduped[deduped.length - 1];\n if (!last || !samePoint(last, p)) {\n deduped.push(p);\n }\n }\n return deduped;\n}\n__name(orthogonalizePolyline, \"orthogonalizePolyline\");\nfunction simplifyPolyline(pts) {\n if (pts.length < 3) {\n return pts;\n }\n let work = [...pts];\n for (let guard = 0; guard < 32; guard++) {\n const result = simplifyPolylineOnce(work);\n work = result.points;\n if (!result.changed) {\n break;\n }\n }\n return work;\n}\n__name(simplifyPolyline, \"simplifyPolyline\");\n\n// src/rendering-util/layout-algorithms/swimlanes/direction/endpointClip.ts\nvar EPS2 = 1e-3;\nvar INSIDE_EPS = 0.5;\nvar CORNER_CLEARANCE = 4;\nfunction endpointContextFor(edge, nodeByIdMap, minPoints) {\n const candidate = edge;\n if (candidate.isLayoutOnly || !candidate.points || candidate.points.length < minPoints) {\n return void 0;\n }\n const src = candidate.start ? nodeByIdMap.get(candidate.start) : void 0;\n const dst = candidate.end ? nodeByIdMap.get(candidate.end) : void 0;\n return {\n edge: candidate,\n points: candidate.points,\n srcRect: src ? rectOfNodeBounds(src) : void 0,\n dstRect: dst ? rectOfNodeBounds(dst) : void 0\n };\n}\n__name(endpointContextFor, \"endpointContextFor\");\nfunction segmentEnterPoint(outside, inside, r) {\n if (sameY(outside, inside, EPS2)) {\n const x = outside.x < r.left ? r.left : r.right;\n return { x, y: outside.y };\n }\n if (sameX(outside, inside, EPS2)) {\n const y = outside.y < r.top ? r.top : r.bottom;\n return { x: outside.x, y };\n }\n return {\n x: Math.min(r.right, Math.max(r.left, outside.x)),\n y: Math.min(r.bottom, Math.max(r.top, outside.y))\n };\n}\n__name(segmentEnterPoint, \"segmentEnterPoint\");\nfunction clipEndpoint(points, rect, atStart) {\n const step = atStart ? 1 : -1;\n let outsideIndex = atStart ? 0 : points.length - 1;\n while (outsideIndex >= 0 && outsideIndex < points.length && pointInsideRect(points[outsideIndex], rect, INSIDE_EPS)) {\n outsideIndex += step;\n }\n if (outsideIndex < 0 || outsideIndex >= points.length) {\n return points;\n }\n const insideIndex = outsideIndex - step;\n if (insideIndex < 0 || insideIndex >= points.length) {\n return points;\n }\n const entry = segmentEnterPoint(points[outsideIndex], points[insideIndex], rect);\n return atStart ? [entry, ...points.slice(outsideIndex)] : [...points.slice(0, outsideIndex + 1), entry];\n}\n__name(clipEndpoint, \"clipEndpoint\");\nfunction clipEdgeEndpointsToNodeBoundaries(edges, nodeByIdMap) {\n for (const edge of edges) {\n const context = endpointContextFor(edge, nodeByIdMap, 2);\n if (!context) {\n continue;\n }\n let next = [...context.points];\n if (context.srcRect) {\n next = clipEndpoint(next, context.srcRect, true);\n }\n if (context.dstRect) {\n next = clipEndpoint(next, context.dstRect, false);\n }\n next = simplifyPolyline(orthogonalizePolyline(next));\n next = clearStraightEndpointCornerConnections(next, context.srcRect, context.dstRect);\n context.edge.points = simplifyPolyline(orthogonalizePolyline(next));\n }\n}\n__name(clipEdgeEndpointsToNodeBoundaries, \"clipEdgeEndpointsToNodeBoundaries\");\nfunction snapEndpointToBoundary(inner, endpoint, r, useApproachSide = false) {\n if (sameY(inner, endpoint, EPS2)) {\n if (endpoint.y < r.top - EPS2 || endpoint.y > r.bottom + EPS2) {\n return endpoint;\n }\n if (useApproachSide) {\n if (inner.x < r.left - EPS2) {\n return { x: r.left, y: inner.y };\n }\n if (inner.x > r.right + EPS2) {\n return { x: r.right, y: inner.y };\n }\n }\n const toLeft = Math.abs(endpoint.x - r.left) <= Math.abs(endpoint.x - r.right);\n return { x: toLeft ? r.left : r.right, y: inner.y };\n }\n if (sameX(inner, endpoint, EPS2)) {\n if (endpoint.x < r.left - EPS2 || endpoint.x > r.right + EPS2) {\n return endpoint;\n }\n if (useApproachSide) {\n if (inner.y < r.top - EPS2) {\n return { x: inner.x, y: r.top };\n }\n if (inner.y > r.bottom + EPS2) {\n return { x: inner.x, y: r.bottom };\n }\n }\n const toTop = Math.abs(endpoint.y - r.top) <= Math.abs(endpoint.y - r.bottom);\n return { x: inner.x, y: toTop ? r.top : r.bottom };\n }\n return endpoint;\n}\n__name(snapEndpointToBoundary, \"snapEndpointToBoundary\");\nfunction firstDistinctAdjacent(points, endpointIndex, step) {\n const endpoint = points[endpointIndex];\n for (let index = endpointIndex + step; index >= 0 && index < points.length; index += step) {\n const candidate = points[index];\n if (!samePoint(candidate, endpoint, EPS2)) {\n return candidate;\n }\n }\n return points[endpointIndex + step];\n}\n__name(firstDistinctAdjacent, \"firstDistinctAdjacent\");\nfunction cornerClearanceRange(min, max) {\n const lo = min + CORNER_CLEARANCE;\n const hi = max - CORNER_CLEARANCE;\n return lo <= hi ? { lo, hi } : { lo: (min + max) / 2, hi: (min + max) / 2 };\n}\n__name(cornerClearanceRange, \"cornerClearanceRange\");\nfunction clampToCornerClearance(value, min, max) {\n const { lo, hi } = cornerClearanceRange(min, max);\n return Math.min(hi, Math.max(lo, value));\n}\n__name(clampToCornerClearance, \"clampToCornerClearance\");\nfunction intersectRanges(ranges) {\n const lo = Math.max(...ranges.map((range) => range.lo));\n const hi = Math.min(...ranges.map((range) => range.hi));\n if (lo > hi) {\n return void 0;\n }\n return { lo, hi };\n}\n__name(intersectRanges, \"intersectRanges\");\nfunction clearanceRangeForSide(r, side) {\n return side === \"left\" || side === \"right\" ? cornerClearanceRange(r.top, r.bottom) : cornerClearanceRange(r.left, r.right);\n}\n__name(clearanceRangeForSide, \"clearanceRangeForSide\");\nfunction terminalSideForSegment(endpoint, adjacent, r) {\n const yWithin = endpoint.y >= r.top - EPS2 && endpoint.y <= r.bottom + EPS2;\n const xWithin = endpoint.x >= r.left - EPS2 && endpoint.x <= r.right + EPS2;\n if (sameY(endpoint, adjacent, EPS2) && yWithin) {\n if (Math.abs(endpoint.x - r.left) < EPS2) {\n return \"left\";\n }\n if (Math.abs(endpoint.x - r.right) < EPS2) {\n return \"right\";\n }\n }\n if (sameX(endpoint, adjacent, EPS2) && xWithin) {\n if (Math.abs(endpoint.y - r.top) < EPS2) {\n return \"top\";\n }\n if (Math.abs(endpoint.y - r.bottom) < EPS2) {\n return \"bottom\";\n }\n }\n return void 0;\n}\n__name(terminalSideForSegment, \"terminalSideForSegment\");\nfunction isHorizontalSide(side) {\n return side === \"left\" || side === \"right\";\n}\n__name(isHorizontalSide, \"isHorizontalSide\");\nfunction straightClearanceRange(start, end, srcRect, dstRect, horizontal) {\n const ranges = [];\n const srcSide = srcRect ? terminalSideForSegment(start, end, srcRect) : void 0;\n const dstSide = dstRect ? terminalSideForSegment(end, start, dstRect) : void 0;\n if (srcRect && srcSide && isHorizontalSide(srcSide) === horizontal) {\n ranges.push(clearanceRangeForSide(srcRect, srcSide));\n }\n if (dstRect && dstSide && isHorizontalSide(dstSide) === horizontal) {\n ranges.push(clearanceRangeForSide(dstRect, dstSide));\n }\n return ranges.length > 0 ? intersectRanges(ranges) : void 0;\n}\n__name(straightClearanceRange, \"straightClearanceRange\");\nfunction clearStraightEndpointCornerAxis(start, end, srcRect, dstRect, horizontal) {\n const range = straightClearanceRange(start, end, srcRect, dstRect, horizontal);\n if (!range) {\n return void 0;\n }\n const current = horizontal ? start.y : start.x;\n const next = Math.min(range.hi, Math.max(range.lo, current));\n if (Math.abs(next - current) < EPS2) {\n return void 0;\n }\n return horizontal ? [\n { x: start.x, y: next },\n { x: end.x, y: next }\n ] : [\n { x: next, y: start.y },\n { x: next, y: end.y }\n ];\n}\n__name(clearStraightEndpointCornerAxis, \"clearStraightEndpointCornerAxis\");\nfunction clearStraightEndpointCornerConnections(points, srcRect, dstRect) {\n if (points.length !== 2) {\n return points;\n }\n const [start, end] = points;\n if (sameY(start, end, EPS2)) {\n return clearStraightEndpointCornerAxis(start, end, srcRect, dstRect, true) ?? points;\n }\n if (sameX(start, end, EPS2)) {\n return clearStraightEndpointCornerAxis(start, end, srcRect, dstRect, false) ?? points;\n }\n return points;\n}\n__name(clearStraightEndpointCornerConnections, \"clearStraightEndpointCornerConnections\");\nfunction cornerClearedEndpoint(endpoint, r, side) {\n return isHorizontalSide(side) ? { x: endpoint.x, y: clampToCornerClearance(endpoint.y, r.top, r.bottom) } : { x: clampToCornerClearance(endpoint.x, r.left, r.right), y: endpoint.y };\n}\n__name(cornerClearedEndpoint, \"cornerClearedEndpoint\");\nfunction moveCollinearEndpointRun(points, endpointIndex, step, endpoint, adjusted, horizontalTerminal) {\n const next = points.map((point) => ({ ...point }));\n for (let index = endpointIndex; index >= 0 && index < points.length; index += step) {\n const point = points[index];\n if (horizontalTerminal && !sameY(point, endpoint, EPS2)) {\n break;\n }\n if (!horizontalTerminal && !sameX(point, endpoint, EPS2)) {\n break;\n }\n if (horizontalTerminal) {\n next[index].y = adjusted.y;\n } else {\n next[index].x = adjusted.x;\n }\n }\n return next;\n}\n__name(moveCollinearEndpointRun, \"moveCollinearEndpointRun\");\nfunction clearEndpointCornerConnection(points, r, atStart) {\n if (points.length < 2) {\n return points;\n }\n const endpointIndex = atStart ? 0 : points.length - 1;\n const step = atStart ? 1 : -1;\n const endpoint = points[endpointIndex];\n const adjacent = firstDistinctAdjacent(points, endpointIndex, step);\n if (!adjacent) {\n return points;\n }\n const side = terminalSideForSegment(endpoint, adjacent, r);\n if (!side) {\n return points;\n }\n const horizontalTerminal = isHorizontalSide(side);\n const adjusted = cornerClearedEndpoint(endpoint, r, side);\n if (samePoint(endpoint, adjusted, EPS2)) {\n return points;\n }\n return moveCollinearEndpointRun(\n points,\n endpointIndex,\n step,\n endpoint,\n adjusted,\n horizontalTerminal\n );\n}\n__name(clearEndpointCornerConnection, \"clearEndpointCornerConnection\");\nfunction borderSideForSegment(a, b, r) {\n const xWithin = Math.min(a.x, b.x) >= r.left - EPS2 && Math.max(a.x, b.x) <= r.right + EPS2;\n const yWithin = Math.min(a.y, b.y) >= r.top - EPS2 && Math.max(a.y, b.y) <= r.bottom + EPS2;\n if (Math.abs(a.y - r.top) < EPS2 && Math.abs(b.y - r.top) < EPS2 && xWithin) {\n return \"top\";\n }\n if (Math.abs(a.y - r.bottom) < EPS2 && Math.abs(b.y - r.bottom) < EPS2 && xWithin) {\n return \"bottom\";\n }\n if (Math.abs(a.x - r.left) < EPS2 && Math.abs(b.x - r.left) < EPS2 && yWithin) {\n return \"left\";\n }\n if (Math.abs(a.x - r.right) < EPS2 && Math.abs(b.x - r.right) < EPS2 && yWithin) {\n return \"right\";\n }\n return void 0;\n}\n__name(borderSideForSegment, \"borderSideForSegment\");\nfunction leavesOutward(side, from, to, r) {\n switch (side) {\n case \"top\":\n return sameX(from, to, EPS2) && to.y < r.top - EPS2;\n case \"bottom\":\n return sameX(from, to, EPS2) && to.y > r.bottom + EPS2;\n case \"left\":\n return sameY(from, to, EPS2) && to.x < r.left - EPS2;\n case \"right\":\n return sameY(from, to, EPS2) && to.x > r.right + EPS2;\n }\n}\n__name(leavesOutward, \"leavesOutward\");\nfunction collapseOwnBorderStub(points, r, atStart) {\n if (points.length < 3) {\n return points;\n }\n if (atStart) {\n const side2 = borderSideForSegment(points[0], points[1], r);\n if (side2 && leavesOutward(side2, points[1], points[2], r)) {\n return points.slice(1);\n }\n return points;\n }\n const last = points.length - 1;\n const side = borderSideForSegment(points[last - 1], points[last], r);\n if (side && leavesOutward(side, points[last - 1], points[last - 2], r)) {\n return points.slice(0, last);\n }\n return points;\n}\n__name(collapseOwnBorderStub, \"collapseOwnBorderStub\");\nfunction snapAndCollapseEndpoints(points, srcRect, dstRect) {\n let next = points;\n if (srcRect) {\n const adjacent = firstDistinctAdjacent(next, 0, 1);\n if (adjacent) {\n const snapped = snapEndpointToBoundary(adjacent, next[0], srcRect);\n if (snapped !== next[0]) {\n next = [snapped, ...next.slice(1)];\n }\n }\n next = collapseOwnBorderStub(next, srcRect, true);\n }\n if (dstRect) {\n const last = next.length - 1;\n const adjacent = firstDistinctAdjacent(next, last, -1);\n if (adjacent) {\n const snapped = snapEndpointToBoundary(adjacent, next[last], dstRect, true);\n if (snapped !== next[last]) {\n next = [...next.slice(0, last), snapped];\n }\n }\n next = collapseOwnBorderStub(next, dstRect, false);\n }\n const straightCleared = clearStraightEndpointCornerConnections(next, srcRect, dstRect);\n if (straightCleared !== next || next.length === 2) {\n return straightCleared;\n }\n if (srcRect) {\n next = clearEndpointCornerConnection(next, srcRect, true);\n }\n if (dstRect) {\n next = clearEndpointCornerConnection(next, dstRect, false);\n }\n return next;\n}\n__name(snapAndCollapseEndpoints, \"snapAndCollapseEndpoints\");\nfunction prepareEdgeEndpointsForRenderer(edges, nodeByIdMap) {\n for (const edge of edges) {\n const context = endpointContextFor(edge, nodeByIdMap, 2);\n if (!context) {\n continue;\n }\n const input = dedupeConsecutivePoints(context.points, EPS2);\n const newPts = snapAndCollapseEndpoints(input, context.srcRect, context.dstRect);\n if (newPts.length < 3) {\n context.edge.points = newPts;\n continue;\n }\n const duplicated = [\n newPts[0],\n { ...newPts[0] },\n ...newPts.slice(1, -1),\n newPts[newPts.length - 1],\n { ...newPts[newPts.length - 1] }\n ];\n context.edge.points = duplicated;\n }\n}\n__name(prepareEdgeEndpointsForRenderer, \"prepareEdgeEndpointsForRenderer\");\n\n// src/rendering-util/layout-algorithms/swimlanes/direction/lrTransform.ts\nfunction buildNodeMap(nodes) {\n return new Map(nodes.map((node) => [node.id, node]));\n}\n__name(buildNodeMap, \"buildNodeMap\");\nfunction resolveTopLevelGroupId(node, nodeById) {\n let parentId = node.parentId;\n let topLevelGroupId = null;\n while (parentId) {\n const parent = nodeById.get(parentId);\n if (!parent?.isGroup) {\n break;\n }\n topLevelGroupId = parent.id;\n parentId = parent.parentId;\n }\n return topLevelGroupId;\n}\n__name(resolveTopLevelGroupId, \"resolveTopLevelGroupId\");\nfunction groupDepth(group, nodeById) {\n let depth = 0;\n let parentId = group.parentId;\n while (parentId) {\n const parent = nodeById.get(parentId);\n if (!parent?.isGroup) {\n break;\n }\n depth++;\n parentId = parent.parentId;\n }\n return depth;\n}\n__name(groupDepth, \"groupDepth\");\nfunction boundsForChildren(children) {\n let minX = Infinity;\n let maxX = -Infinity;\n let minY = Infinity;\n let maxY = -Infinity;\n for (const child of children) {\n const cx = child.x;\n const cy = child.y;\n if (typeof cx !== \"number\" || typeof cy !== \"number\") {\n continue;\n }\n const w = child.width ?? 0;\n const h = child.height ?? 0;\n minX = Math.min(minX, cx - w / 2);\n maxX = Math.max(maxX, cx + w / 2);\n minY = Math.min(minY, cy - h / 2);\n maxY = Math.max(maxY, cy + h / 2);\n }\n if (minX === Infinity || minY === Infinity) {\n return null;\n }\n return { minX, maxX, minY, maxY };\n}\n__name(boundsForChildren, \"boundsForChildren\");\nfunction applyGroupBounds(group, bounds) {\n const pad = group.padding ?? 20;\n group.x = (bounds.minX + bounds.maxX) / 2;\n group.y = (bounds.minY + bounds.maxY) / 2;\n group.width = Math.max(0, bounds.maxX - bounds.minX) + pad;\n group.height = Math.max(0, bounds.maxY - bounds.minY) + pad;\n}\n__name(applyGroupBounds, \"applyGroupBounds\");\nfunction recomputeNestedGroupBounds(nodes) {\n const nodeById = buildNodeMap(nodes);\n const groupsByDepth = nodes.filter((node) => node.isGroup && node.parentId).sort((a, b) => groupDepth(b, nodeById) - groupDepth(a, nodeById));\n for (const group of groupsByDepth) {\n const children = nodes.filter((node) => node.parentId === group.id);\n const bounds = boundsForChildren(children);\n if (bounds) {\n applyGroupBounds(group, bounds);\n }\n }\n}\n__name(recomputeNestedGroupBounds, \"recomputeNestedGroupBounds\");\nfunction mirrorAxis(layout, axis) {\n const nodes = layout.nodes ?? [];\n const edges = layout.edges ?? [];\n const contentNodes = nodes.filter((node) => !node.isGroup);\n let min = Infinity;\n let max = -Infinity;\n for (const node of contentNodes) {\n const value = node[axis];\n if (typeof value !== \"number\") {\n continue;\n }\n min = Math.min(min, value);\n max = Math.max(max, value);\n }\n if (!Number.isFinite(min) || !Number.isFinite(max)) {\n return false;\n }\n const mirror = /* @__PURE__ */ __name((value) => min + max - value, \"mirror\");\n for (const node of nodes) {\n const value = node[axis];\n if (typeof value === \"number\") {\n node[axis] = mirror(value);\n }\n const titleRect = node.groupTitleRect;\n if (titleRect) {\n node.groupTitleRect = axis === \"x\" ? {\n ...titleRect,\n left: mirror(titleRect.right),\n right: mirror(titleRect.left)\n } : {\n ...titleRect,\n top: mirror(titleRect.bottom),\n bottom: mirror(titleRect.top)\n };\n }\n }\n for (const edge of edges) {\n for (const point of edge.points ?? []) {\n point[axis] = mirror(point[axis]);\n }\n }\n return true;\n}\n__name(mirrorAxis, \"mirrorAxis\");\nfunction applyBtDirectionTransform(layout) {\n const nodes = layout.nodes ?? [];\n if (!nodes.some((node) => !node.isGroup)) {\n return true;\n }\n return mirrorAxis(layout, \"y\");\n}\n__name(applyBtDirectionTransform, \"applyBtDirectionTransform\");\nfunction applyLrDirectionTransform(layout, direction = \"LR\") {\n const nodes = layout.nodes ?? [];\n const edges = layout.edges ?? [];\n const contentNodes = nodes.filter((n) => !n.isGroup);\n let minX = Infinity;\n let minY = Infinity;\n for (const n of contentNodes) {\n const x0 = n.x ?? 0;\n const y0 = n.y ?? 0;\n if (x0 < minX) {\n minX = x0;\n }\n if (y0 < minY) {\n minY = y0;\n }\n }\n if (!Number.isFinite(minX) || !Number.isFinite(minY)) {\n return false;\n }\n const titleBandSize = 36;\n let totalWidth = 0;\n let totalHeight = 0;\n for (const n of contentNodes) {\n totalWidth += n.width ?? 0;\n totalHeight += n.height ?? 0;\n }\n const avgWidth = totalWidth / contentNodes.length;\n const avgHeight = totalHeight / contentNodes.length;\n const horizontalScaleFactor = avgHeight > 0 ? Math.max(1, avgWidth / avgHeight) : 1;\n for (const n of contentNodes) {\n const x0 = n.x ?? 0;\n const y0 = n.y ?? 0;\n const newX = (y0 - minY) * horizontalScaleFactor + titleBandSize;\n const newY = x0 - minX;\n n.x = newX;\n n.y = newY;\n }\n for (const e of edges) {\n if (!e.points) {\n continue;\n }\n for (const p of e.points) {\n const x0 = p.x;\n const y0 = p.y;\n const newX = (y0 - minY) * horizontalScaleFactor + titleBandSize;\n const newY = x0 - minX;\n p.x = newX;\n p.y = newY;\n }\n }\n recomputeNestedGroupBounds(nodes);\n const laneNodes = nodes.filter((n) => n.isGroup && !n.parentId);\n if (laneNodes.length === 0) {\n if (direction === \"RL\") {\n mirrorAxis(layout, \"x\");\n }\n return true;\n }\n const nodeById = buildNodeMap(nodes);\n const childrenByLane = /* @__PURE__ */ new Map();\n for (const n of nodes) {\n if (n.isGroup) {\n continue;\n }\n const laneId = resolveTopLevelGroupId(n, nodeById);\n if (!laneId) {\n continue;\n }\n const bucket = childrenByLane.get(laneId) ?? [];\n bucket.push(n);\n childrenByLane.set(laneId, bucket);\n }\n let maxPad = 0;\n for (const lane of laneNodes) {\n const pad = lane.padding ?? 0;\n if (pad > maxPad) {\n maxPad = pad;\n }\n }\n const laneBounds = [];\n let globalMinXChild = Infinity;\n let globalMaxXChild = -Infinity;\n for (const lane of laneNodes) {\n const children = childrenByLane.get(lane.id) ?? [];\n const bounds = boundsForChildren(children);\n if (!bounds) {\n continue;\n }\n globalMinXChild = Math.min(globalMinXChild, bounds.minX);\n globalMaxXChild = Math.max(globalMaxXChild, bounds.maxX);\n laneBounds.push({\n lane,\n contentTop: bounds.minY,\n contentBottom: bounds.maxY,\n centerY: (bounds.minY + bounds.maxY) / 2\n });\n }\n if (globalMinXChild === Infinity || globalMaxXChild === -Infinity) {\n return true;\n }\n const fullContentWidth = Math.max(0, globalMaxXChild - globalMinXChild);\n const horizontalMargin = Math.max(maxPad, 10);\n const bodyWidth = fullContentWidth + 2 * horizontalMargin;\n const laneWidth = titleBandSize + bodyWidth;\n const bodyCenter = (globalMinXChild + globalMaxXChild) / 2;\n const bodyLeft = bodyCenter - bodyWidth / 2;\n const laneLeft = bodyLeft - titleBandSize;\n const centerX = laneLeft + laneWidth / 2;\n const verticalMargin = Math.max(maxPad, titleBandSize);\n laneBounds.sort((a, b) => a.centerY - b.centerY);\n for (let i = 0; i < laneBounds.length; i++) {\n const curr = laneBounds[i];\n let laneTop;\n let laneBottom;\n if (i === 0) {\n laneTop = curr.contentTop - verticalMargin;\n } else {\n const prev = laneBounds[i - 1];\n laneTop = (prev.contentBottom + curr.contentTop) / 2;\n }\n if (i === laneBounds.length - 1) {\n laneBottom = curr.contentBottom + verticalMargin;\n } else {\n const next = laneBounds[i + 1];\n laneBottom = (curr.contentBottom + next.contentTop) / 2;\n }\n const laneHeight = Math.max(0, laneBottom - laneTop);\n const centerY = (laneTop + laneBottom) / 2;\n curr.lane.x = centerX;\n curr.lane.y = centerY;\n curr.lane.width = laneWidth;\n curr.lane.height = laneHeight;\n curr.lane.swimlaneContentTop = curr.contentTop;\n curr.lane.groupTitleRect = {\n left: laneLeft,\n right: laneLeft + titleBandSize,\n top: laneTop,\n bottom: laneBottom\n };\n }\n if (direction === \"RL\") {\n mirrorAxis(layout, \"x\");\n }\n return true;\n}\n__name(applyLrDirectionTransform, \"applyLrDirectionTransform\");\n\n// src/rendering-util/layout-algorithms/swimlanes/direction/portSwap.ts\nvar EPS3 = 1e-6;\nvar MIN_PORT_SPACING = 8;\nvar PORT_SHIFT = MIN_PORT_SPACING;\nvar TRY_DELTAS = [0, PORT_SHIFT, -PORT_SHIFT, 2 * PORT_SHIFT, -2 * PORT_SHIFT];\nfunction portSwapToLShape(edges, nodes) {\n const { nodeInfoById, realNodeRects } = collectRealNodeBounds(nodes);\n for (const edge of edges) {\n if (edge.isLayoutOnly) {\n continue;\n }\n const pts = edge.points;\n if (!pts || pts.length < 4) {\n continue;\n }\n const route = classifyThreeSegmentRoute(dedupeConsecutivePoints(pts, EPS3), EPS3);\n if (!route) {\n continue;\n }\n const { p3 } = route;\n const isHVH = route.kind === \"HVH\";\n const nodePair = getNodePairGeometry(edge, nodeInfoById, EPS3);\n if (!nodePair) {\n continue;\n }\n const { srcId, dstId, srcInfo, dstInfo, collinearX, collinearY } = nodePair;\n if (collinearX || collinearY) {\n continue;\n }\n let newPts;\n const srcRect = srcInfo.rect;\n for (const delta of TRY_DELTAS) {\n let np0;\n let np1;\n let np2;\n if (isHVH) {\n const dstBelow = dstInfo.cy > srcInfo.cy;\n const newSrcY = dstBelow ? srcRect.bottom : srcRect.top;\n const newSrcX = srcInfo.cx + delta;\n if (newSrcX <= srcRect.left + EPS3 || newSrcX >= srcRect.right - EPS3) {\n continue;\n }\n np0 = { x: newSrcX, y: newSrcY };\n np1 = { x: newSrcX, y: p3.y };\n np2 = { x: p3.x, y: p3.y };\n } else {\n const dstEast = dstInfo.cx > srcInfo.cx;\n const newSrcX = dstEast ? srcRect.right : srcRect.left;\n const newSrcY = srcInfo.cy + delta;\n if (newSrcY <= srcRect.top + EPS3 || newSrcY >= srcRect.bottom - EPS3) {\n continue;\n }\n np0 = { x: newSrcX, y: newSrcY };\n np1 = { x: p3.x, y: newSrcY };\n np2 = { x: p3.x, y: p3.y };\n }\n const firstSegDegenerate = samePoint(np0, np1, EPS3);\n const secondSegDegenerate = samePoint(np1, np2, EPS3);\n if (firstSegDegenerate && secondSegDegenerate) {\n continue;\n }\n if (!firstSegDegenerate && segmentHitsAnyRect(np0, np1, realNodeRects, [srcId], 1)) {\n continue;\n }\n if (!secondSegDegenerate && segmentHitsAnyRect(np1, np2, realNodeRects, [dstId], 1)) {\n continue;\n }\n const firstSegConflicts = !firstSegDegenerate && segmentConflictsWithAnyEdge(np0, np1, edges, edge, {\n epsilon: EPS3,\n skipDegenerateOther: true\n });\n const secondSegConflicts = !secondSegDegenerate && segmentConflictsWithAnyEdge(np1, np2, edges, edge, {\n epsilon: EPS3,\n skipDegenerateOther: true\n });\n if (firstSegConflicts || secondSegConflicts) {\n continue;\n }\n if (firstSegDegenerate) {\n newPts = [np1, np2];\n } else if (secondSegDegenerate) {\n newPts = [np0, np1];\n } else {\n newPts = [np0, np1, np2];\n }\n break;\n }\n if (newPts) {\n edge.points = newPts;\n }\n }\n}\n__name(portSwapToLShape, \"portSwapToLShape\");\n\n// src/rendering-util/layout-algorithms/swimlanes/direction/terminalStub.ts\nfunction collapseShortTerminalStub(edges, nodeByIdMap) {\n const MIN_STUB = 10;\n const EPS_LOCAL2 = 1e-3;\n const BUFFER = 2;\n const { realNodeRects, labelNodeRects: labelRects } = collectNodeRectEntries(\n nodeByIdMap.values()\n );\n for (const edge of edges) {\n if (edge.isLayoutOnly) {\n continue;\n }\n const rawPts = edge.points;\n if (!rawPts || rawPts.length < 4) {\n continue;\n }\n const pts = dedupeConsecutivePoints(rawPts, EPS_LOCAL2);\n if (pts.length < 4) {\n continue;\n }\n const nLast = pts.length - 1;\n const endPt = pts[nLast];\n const penultPt = pts[nLast - 1];\n const prevPt = pts[nLast - 2];\n const lastDx = endPt.x - penultPt.x;\n const lastDy = endPt.y - penultPt.y;\n const lastLen = Math.hypot(lastDx, lastDy);\n if (lastLen >= MIN_STUB || lastLen < EPS_LOCAL2) {\n continue;\n }\n const penultDx = penultPt.x - prevPt.x;\n const penultDy = penultPt.y - prevPt.y;\n const penultLen = Math.hypot(penultDx, penultDy);\n if (penultLen < EPS_LOCAL2) {\n continue;\n }\n const lastIsHoriz = isHorizontalSegment(penultPt, endPt, EPS_LOCAL2);\n const lastIsVert = isVerticalSegment(penultPt, endPt, EPS_LOCAL2);\n const penultIsHoriz = isHorizontalSegment(prevPt, penultPt, EPS_LOCAL2);\n const penultIsVert = isVerticalSegment(prevPt, penultPt, EPS_LOCAL2);\n if (!(lastIsHoriz && penultIsVert || lastIsVert && penultIsHoriz)) {\n continue;\n }\n const dstId = edge.end;\n const srcId = edge.start;\n const dst = dstId ? nodeByIdMap.get(dstId) : void 0;\n if (!dst) {\n continue;\n }\n const dstCx = dst.x ?? 0;\n const dstCy = dst.y ?? 0;\n const dstRect = rectOfNodeBounds(dst);\n if (!dstRect) {\n continue;\n }\n let newPrev;\n let newEnd;\n if (penultIsVert) {\n const approachFromBelow = penultDy < 0;\n newPrev = { x: dstCx, y: prevPt.y };\n newEnd = { x: dstCx, y: approachFromBelow ? dstRect.bottom : dstRect.top };\n } else {\n const approachFromLeft = penultDx > 0;\n newPrev = { x: prevPt.x, y: dstCy };\n newEnd = { x: approachFromLeft ? dstRect.right : dstRect.left, y: dstCy };\n }\n if (segmentHitsAnyRect(newPrev, newEnd, realNodeRects, dstId ? [dstId] : [], -BUFFER)) {\n continue;\n }\n if (segmentHitsAnyRect(newPrev, newEnd, labelRects, [], -BUFFER)) {\n continue;\n }\n if (srcId) {\n const src = nodeByIdMap.get(srcId);\n const srcRect = src ? rectOfNodeBounds(src) : void 0;\n if (srcRect && pointInsideRect(newPrev, srcRect, BUFFER)) {\n continue;\n }\n }\n const ownSegmentKey = /* @__PURE__ */ __name((a, b) => `${a.x.toFixed(3)},${a.y.toFixed(3)}|${b.x.toFixed(3)},${b.y.toFixed(3)}`, \"ownSegmentKey\");\n const selfSegments = /* @__PURE__ */ new Set();\n for (let i = 0; i < pts.length - 1; i++) {\n selfSegments.add(ownSegmentKey(pts[i], pts[i + 1]));\n }\n const segmentCrossesOtherEdge = /* @__PURE__ */ __name((from, to) => {\n for (const other of edges) {\n if (other === edge) {\n continue;\n }\n if (other.isLayoutOnly) {\n continue;\n }\n const oPts = other.points;\n if (!oPts || oPts.length < 2) {\n continue;\n }\n for (let i = 0; i < oPts.length - 1; i++) {\n const a = oPts[i];\n const b = oPts[i + 1];\n if (selfSegments.has(ownSegmentKey(a, b))) {\n continue;\n }\n if (orthogonalSegmentsStrictlyCross(from, to, a, b, EPS_LOCAL2)) {\n return true;\n }\n }\n }\n return false;\n }, \"segmentCrossesOtherEdge\");\n if (segmentCrossesOtherEdge(newPrev, newEnd)) {\n continue;\n }\n if (nLast - 3 >= 0) {\n const beforePrev = pts[nLast - 3];\n const endpointIds = [srcId, dstId].filter((id) => Boolean(id));\n if (segmentHitsAnyRect(beforePrev, newPrev, realNodeRects, endpointIds, -BUFFER)) {\n continue;\n }\n if (segmentCrossesOtherEdge(beforePrev, newPrev)) {\n continue;\n }\n }\n const head = pts.slice(0, nLast - 2);\n const newPts = [...head, newPrev, newEnd];\n edge.points = newPts;\n const labelId = edge.labelNodeId;\n if (labelId) {\n const labelNode = nodeByIdMap.get(labelId);\n if (labelNode) {\n const lw = labelNode.width ?? 0;\n const lh = labelNode.height ?? 0;\n if (lw > 0 && lh > 0) {\n let bestMidX;\n let bestMidY;\n let bestLen = -1;\n for (let i = 0; i < newPts.length - 1; i++) {\n const a = newPts[i];\n const b = newPts[i + 1];\n const segLen = Math.hypot(b.x - a.x, b.y - a.y);\n const isHoriz = sameY(a, b, EPS_LOCAL2);\n const isVert = sameX(a, b, EPS_LOCAL2);\n const fits = isHoriz && segLen >= lw + 2 || isVert && segLen >= lh + 2;\n if (!fits) {\n continue;\n }\n if (segLen > bestLen) {\n bestLen = segLen;\n bestMidX = (a.x + b.x) / 2;\n bestMidY = (a.y + b.y) / 2;\n }\n }\n if (bestMidX !== void 0 && bestMidY !== void 0) {\n labelNode.x = bestMidX;\n labelNode.y = bestMidY;\n }\n }\n }\n }\n }\n}\n__name(collapseShortTerminalStub, \"collapseShortTerminalStub\");\n\n// src/rendering-util/layout-algorithms/swimlanes/direction/materializedGeometry.ts\nvar EPS_LOCAL = 1e-3;\nvar MIN_SHARED = 8;\nvar segmentsFor = orthogonalSegmentsForPoints;\nvar orthogonallyAligned = /* @__PURE__ */ __name((a, b) => sameX(a, b, EPS_LOCAL) || sameY(a, b, EPS_LOCAL), \"orthogonallyAligned\");\nfunction separateSharedRenderedTerminalLanes(edges, nodeByIdMap) {\n const MIN_FACE_CLEARANCE = 16;\n const TRACK_SHIFT = 7;\n const rectIntersect = /* @__PURE__ */ __name((node, point) => {\n const x = node.x ?? 0;\n const y = node.y ?? 0;\n const dx = point.x - x;\n const dy = point.y - y;\n let w = (node.width ?? 0) / 2;\n let h = (node.height ?? 0) / 2;\n if (Math.abs(dy) * w > Math.abs(dx) * h) {\n if (dy < 0) {\n h = -h;\n }\n return { x: x + (dy === 0 ? 0 : h * dx / dy), y: y + h };\n }\n if (dx < 0) {\n w = -w;\n }\n return { x: x + w, y: y + (dx === 0 ? 0 : w * dy / dx) };\n }, \"rectIntersect\");\n const terminalLaneFor = /* @__PURE__ */ __name((edge, atStart) => {\n const points = dedupeConsecutivePoints(edge.points ?? []);\n if (points.length < 2) {\n return void 0;\n }\n const nodeId = atStart ? edge.start : edge.end;\n const node = nodeId ? nodeByIdMap.get(nodeId) : void 0;\n const rect = node ? rectOfNodeBounds(node) : void 0;\n if (!node || !nodeId || !rect) {\n return void 0;\n }\n const endpoint = atStart ? points[0] : points[points.length - 1];\n const adjacent = atStart ? points[1] : points[points.length - 2];\n const boundary = rectIntersect(node, endpoint);\n let railEnd = endpoint;\n if (orthogonallyAligned(adjacent, boundary)) {\n railEnd = adjacent;\n }\n if (sameX(boundary, railEnd, EPS_LOCAL)) {\n return {\n edge,\n edgeId: String(edge.id ?? \"\"),\n nodeId,\n atStart,\n orientation: \"V\",\n coord: boundary.x,\n min: Math.min(boundary.y, railEnd.y),\n max: Math.max(boundary.y, railEnd.y),\n boundary,\n railEnd,\n rect\n };\n }\n if (sameY(boundary, railEnd, EPS_LOCAL)) {\n return {\n edge,\n edgeId: String(edge.id ?? \"\"),\n nodeId,\n atStart,\n orientation: \"H\",\n coord: boundary.y,\n min: Math.min(boundary.x, railEnd.x),\n max: Math.max(boundary.x, railEnd.x),\n boundary,\n railEnd,\n rect\n };\n }\n return void 0;\n }, \"terminalLaneFor\");\n const projectedOverlapLength = /* @__PURE__ */ __name((a, b) => Math.max(0, Math.min(a.max, b.max) - Math.max(a.min, b.min)), \"projectedOverlapLength\");\n const sameTerminalFace = /* @__PURE__ */ __name((a, b) => {\n if (a.nodeId !== b.nodeId || a.orientation !== b.orientation) {\n return false;\n }\n if (a.orientation === \"H\") {\n const aOnHorizontalFace = Math.abs(a.boundary.x - a.rect.left) < 1 || Math.abs(a.boundary.x - a.rect.right) < 1;\n return aOnHorizontalFace && sameX(a.boundary, b.boundary, 1);\n }\n const aOnVerticalFace = Math.abs(a.boundary.y - a.rect.top) < 1 || Math.abs(a.boundary.y - a.rect.bottom) < 1;\n return aOnVerticalFace && sameY(a.boundary, b.boundary, 1);\n }, \"sameTerminalFace\");\n const exactTerminalLaneConflict = /* @__PURE__ */ __name((a, b) => {\n if (a.nodeId !== b.nodeId || a.orientation !== b.orientation) {\n return false;\n }\n const shared = projectedOverlapLength(a, b);\n return shared >= MIN_SHARED && Math.abs(a.coord - b.coord) < 0.5;\n }, \"exactTerminalLaneConflict\");\n const nearTerminalLaneConflict = /* @__PURE__ */ __name((a, b) => {\n if (a.nodeId !== b.nodeId || a.orientation !== b.orientation || a.orientation !== \"H\" || a.atStart === b.atStart) {\n return false;\n }\n const shared = projectedOverlapLength(a, b);\n if (shared < MIN_SHARED) {\n return false;\n }\n const faceSpan = a.rect.bottom - a.rect.top;\n if (shared < faceSpan || shared > 2 * faceSpan) {\n return false;\n }\n return sameTerminalFace(a, b) && Math.abs(a.coord - b.coord) < MIN_FACE_CLEARANCE;\n }, \"nearTerminalLaneConflict\");\n const shiftedCandidate = /* @__PURE__ */ __name((lane, shift) => {\n const points = dedupeConsecutivePoints(lane.edge.points ?? []);\n if (points.length < 2) {\n return void 0;\n }\n const shiftedBoundary = lane.orientation === \"V\" ? { x: lane.boundary.x + shift, y: lane.boundary.y } : { x: lane.boundary.x, y: lane.boundary.y + shift };\n const shiftedRailEnd = lane.orientation === \"V\" ? { x: lane.railEnd.x + shift, y: lane.railEnd.y } : { x: lane.railEnd.x, y: lane.railEnd.y + shift };\n const boundaryStaysOnSameFace = /* @__PURE__ */ __name(() => {\n if (Math.abs(lane.boundary.y - lane.rect.top) < 1 || Math.abs(lane.boundary.y - lane.rect.bottom) < 1) {\n return sameY(shiftedBoundary, lane.boundary, EPS_LOCAL) && shiftedBoundary.x >= lane.rect.left + 1 && shiftedBoundary.x <= lane.rect.right - 1;\n }\n if (Math.abs(lane.boundary.x - lane.rect.left) < 1 || Math.abs(lane.boundary.x - lane.rect.right) < 1) {\n return sameX(shiftedBoundary, lane.boundary, EPS_LOCAL) && shiftedBoundary.y >= lane.rect.top + 1 && shiftedBoundary.y <= lane.rect.bottom - 1;\n }\n return false;\n }, \"boundaryStaysOnSameFace\");\n if (!boundaryStaysOnSameFace()) {\n return void 0;\n }\n if (lane.atStart) {\n const railEndIsAdjacent2 = points.length > 1 && samePoint(points[1], lane.railEnd, EPS_LOCAL);\n const rest = points.slice(railEndIsAdjacent2 ? 2 : 1);\n const next = rest[0];\n if (next && !orthogonallyAligned(next, shiftedRailEnd)) {\n return void 0;\n }\n return [shiftedBoundary, shiftedRailEnd, ...rest];\n }\n const railEndIsAdjacent = points.length > 1 && samePoint(points[points.length - 2], lane.railEnd, EPS_LOCAL);\n const before = points.slice(0, railEndIsAdjacent ? -2 : -1);\n const previous = before[before.length - 1];\n if (previous && !orthogonallyAligned(previous, shiftedRailEnd)) {\n return void 0;\n }\n return [...before, shiftedRailEnd, shiftedBoundary];\n }, \"shiftedCandidate\");\n const laneIsStraightCollinearConnector = /* @__PURE__ */ __name((lane) => {\n const edge = lane.edge;\n const points = dedupeConsecutivePoints(edge.points ?? []);\n if (points.length !== 2) {\n return false;\n }\n const startId = edge.start;\n const endId = edge.end;\n const start = startId ? nodeByIdMap.get(startId) : void 0;\n const end = endId ? nodeByIdMap.get(endId) : void 0;\n if (!start || !end) {\n return false;\n }\n const startX = start.x ?? 0;\n const startY = start.y ?? 0;\n const endX = end.x ?? 0;\n const endY = end.y ?? 0;\n const [a, b] = points;\n return sameY(a, b, EPS_LOCAL) && Math.abs(startY - endY) < 1 && Math.abs(startX - endX) > 1 || sameX(a, b, EPS_LOCAL) && Math.abs(startX - endX) < 1 && Math.abs(startY - endY) > 1;\n }, \"laneIsStraightCollinearConnector\");\n const shifts = [\n -TRACK_SHIFT,\n TRACK_SHIFT,\n -2 * TRACK_SHIFT,\n 2 * TRACK_SHIFT,\n -3 * TRACK_SHIFT,\n 3 * TRACK_SHIFT\n ];\n for (let iteration = 0; iteration < 8; iteration++) {\n const lanes = edges.filter((edge) => !edge.isLayoutOnly).flatMap((edge) => [terminalLaneFor(edge, true), terminalLaneFor(edge, false)]).filter((lane) => Boolean(lane));\n let fixed = false;\n for (let i = 0; i < lanes.length && !fixed; i++) {\n for (let j = i + 1; j < lanes.length && !fixed; j++) {\n const first = lanes[i];\n const second = lanes[j];\n if (first.edge === second.edge || !(exactTerminalLaneConflict(first, second) || nearTerminalLaneConflict(first, second))) {\n continue;\n }\n const fixingNearConflict = !exactTerminalLaneConflict(first, second);\n const candidates = [first, second].sort((a, b) => {\n const aPreservesStraight = laneIsStraightCollinearConnector(a);\n const bPreservesStraight = laneIsStraightCollinearConnector(b);\n if (aPreservesStraight !== bPreservesStraight) {\n return Number(aPreservesStraight) - Number(bPreservesStraight);\n }\n return Number(!b.atStart) - Number(!a.atStart);\n });\n for (const lane of candidates) {\n for (const shift of shifts) {\n const candidate = shiftedCandidate(lane, shift);\n if (!candidate) {\n continue;\n }\n const nextLane = terminalLaneFor({ ...lane.edge, points: candidate }, lane.atStart);\n if (!nextLane || lanes.some(\n (other) => other.edge !== lane.edge && (exactTerminalLaneConflict(nextLane, other) || fixingNearConflict && nearTerminalLaneConflict(nextLane, other))\n )) {\n continue;\n }\n lane.edge.points = candidate;\n fixed = true;\n break;\n }\n if (fixed) {\n break;\n }\n }\n }\n }\n if (!fixed) {\n return;\n }\n }\n}\n__name(separateSharedRenderedTerminalLanes, \"separateSharedRenderedTerminalLanes\");\nfunction collapseRedundantRectangularDoglegs(edges, nodeByIdMap) {\n const BUFFER = 2;\n const MAX_ITERATIONS = 8;\n const { realNodeRects, labelNodeRects: labelRects } = collectNodeRectEntries(\n nodeByIdMap.values()\n );\n const candidateIsSafe = /* @__PURE__ */ __name((edge, candidate) => {\n const sourceId = edge.start;\n const targetId = edge.end;\n const candidateSegments = segmentsFor(candidate);\n if (candidateSegments.length !== candidate.length - 1) {\n return false;\n }\n const endpointIds = [sourceId, targetId].filter((id) => Boolean(id));\n for (const segment of candidateSegments) {\n if (segmentHitsAnyRect(segment.a, segment.b, realNodeRects, endpointIds, -BUFFER)) {\n return false;\n }\n if (segmentHitsAnyRect(segment.a, segment.b, labelRects, [], -BUFFER)) {\n return false;\n }\n }\n for (const other of edges) {\n if (other === edge || other.isLayoutOnly) {\n continue;\n }\n const otherPoints = other.points;\n if (!otherPoints || otherPoints.length < 2) {\n continue;\n }\n for (const candidateSegment of candidateSegments) {\n for (const otherSegment of segmentsFor(dedupeConsecutivePoints(otherPoints))) {\n if (sameAxisSegmentOverlapLength(candidateSegment, otherSegment, 0.5) >= MIN_SHARED) {\n return false;\n }\n if (orthogonalSegmentsStrictlyCross(\n candidateSegment.a,\n candidateSegment.b,\n otherSegment.a,\n otherSegment.b,\n EPS_LOCAL\n )) {\n return false;\n }\n }\n }\n }\n return true;\n }, \"candidateIsSafe\");\n const withoutDogleg = /* @__PURE__ */ __name((points, i) => {\n if (i + 4 >= points.length) {\n return void 0;\n }\n const p0 = points[i];\n const p1 = points[i + 1];\n const p2 = points[i + 2];\n const p3 = points[i + 3];\n const p4 = points[i + 4];\n const terminalVerticalDogleg = isHorizontalSegment(p0, p1) && isVerticalSegment(p1, p2) && isHorizontalSegment(p2, p3) && isVerticalSegment(p3, p4) && sameX(p0, p3, EPS_LOCAL) && sameX(p0, p4, EPS_LOCAL) && sameX(p1, p2, EPS_LOCAL) && (p1.x - p0.x) * (p3.x - p2.x) < 0;\n const terminalHorizontalDogleg = isVerticalSegment(p0, p1) && isHorizontalSegment(p1, p2) && isVerticalSegment(p2, p3) && isHorizontalSegment(p3, p4) && sameY(p0, p3, EPS_LOCAL) && sameY(p0, p4, EPS_LOCAL) && sameY(p1, p2, EPS_LOCAL) && (p1.y - p0.y) * (p3.y - p2.y) < 0;\n if (terminalVerticalDogleg || terminalHorizontalDogleg) {\n return dedupeConsecutivePoints([...points.slice(0, i + 1), p4, ...points.slice(i + 5)]);\n }\n if (i + 5 >= points.length) {\n return void 0;\n }\n const p5 = points[i + 5];\n const verticalDogleg = isVerticalSegment(p0, p1) && isHorizontalSegment(p1, p2) && isVerticalSegment(p2, p3) && isHorizontalSegment(p3, p4) && isVerticalSegment(p4, p5) && sameX(p0, p4, EPS_LOCAL) && sameX(p0, p5, EPS_LOCAL) && sameX(p2, p3, EPS_LOCAL) && (p2.x - p1.x) * (p4.x - p3.x) < 0;\n const horizontalDogleg = isHorizontalSegment(p0, p1) && isVerticalSegment(p1, p2) && isHorizontalSegment(p2, p3) && isVerticalSegment(p3, p4) && isHorizontalSegment(p4, p5) && sameY(p0, p4, EPS_LOCAL) && sameY(p0, p5, EPS_LOCAL) && sameY(p2, p3, EPS_LOCAL) && (p2.y - p1.y) * (p4.y - p3.y) < 0;\n if (!verticalDogleg && !horizontalDogleg) {\n return void 0;\n }\n return dedupeConsecutivePoints([...points.slice(0, i + 1), p5, ...points.slice(i + 6)]);\n }, \"withoutDogleg\");\n for (let iteration = 0; iteration < MAX_ITERATIONS; iteration++) {\n let fixed = false;\n for (const edge of edges) {\n if (edge.isLayoutOnly) {\n continue;\n }\n const points = dedupeConsecutivePoints(edge.points ?? []);\n for (let i = 0; i <= points.length - 5; i++) {\n const candidate = withoutDogleg(points, i);\n if (!candidate || !candidateIsSafe(edge, candidate)) {\n continue;\n }\n edge.points = candidate;\n fixed = true;\n break;\n }\n if (fixed) {\n break;\n }\n }\n if (!fixed) {\n return;\n }\n }\n}\n__name(collapseRedundantRectangularDoglegs, \"collapseRedundantRectangularDoglegs\");\nfunction liftObstacleHuggingSameSideRails(edges, nodeByIdMap) {\n const BUFFER = 2;\n const CLEARANCE = 20;\n const MAX_ITERATIONS = 8;\n const { realNodeRects, labelNodeRects: labelRects } = collectNodeRectEntries(\n nodeByIdMap.values()\n );\n const visibleEdges = edges.filter((edge) => !edge.isLayoutOnly);\n const pointsFor = /* @__PURE__ */ __name((edge, replacementEdge, replacement) => dedupeConsecutivePoints(\n edge === replacementEdge ? replacement ?? [] : edge.points ?? []\n ), \"pointsFor\");\n const strictCrossingCount = /* @__PURE__ */ __name((replacementEdge, replacement) => {\n let count = 0;\n for (let i = 0; i < visibleEdges.length; i++) {\n const firstSegments = segmentsFor(pointsFor(visibleEdges[i], replacementEdge, replacement));\n for (let j = i + 1; j < visibleEdges.length; j++) {\n const secondSegments = segmentsFor(\n pointsFor(visibleEdges[j], replacementEdge, replacement)\n );\n for (const firstSegment of firstSegments) {\n for (const secondSegment of secondSegments) {\n if (orthogonalSegmentsStrictlyCross(\n firstSegment.a,\n firstSegment.b,\n secondSegment.a,\n secondSegment.b,\n EPS_LOCAL\n )) {\n count++;\n }\n }\n }\n }\n }\n return count;\n }, \"strictCrossingCount\");\n const middleRail = /* @__PURE__ */ __name((points) => {\n const segments = segmentsFor(points);\n if (segments.length !== 3) {\n return void 0;\n }\n const middle = segments[1];\n if (segments[0].horizontal === middle.horizontal || segments[2].horizontal === middle.horizontal) {\n return void 0;\n }\n return {\n index: middle.index,\n horizontal: middle.horizontal,\n vertical: middle.vertical,\n segment: middle\n };\n }, \"middleRail\");\n const blockingRectsFor = /* @__PURE__ */ __name((edge, rail) => {\n const endpointIds = [edge.start, edge.end].filter(\n (id) => Boolean(id)\n );\n return realNodeRects.filter((entry) => {\n if (endpointIds.includes(entry.id)) {\n return false;\n }\n const rect = entry.rect;\n if (rail.horizontal) {\n const xOverlap = overlapLength(rail.a.x, rail.b.x, rect.left, rect.right);\n return xOverlap >= MIN_SHARED && rail.a.y >= rect.top - BUFFER && rail.a.y <= rect.bottom + BUFFER;\n }\n const yOverlap = overlapLength(rail.a.y, rail.b.y, rect.top, rect.bottom);\n return yOverlap >= MIN_SHARED && rail.a.x >= rect.left - BUFFER && rail.a.x <= rect.right + BUFFER;\n });\n }, \"blockingRectsFor\");\n const candidateByMovingRail = /* @__PURE__ */ __name((points, rail, coord) => {\n const candidate = points.map((point) => ({ ...point }));\n if (rail.horizontal) {\n candidate[rail.index].y = coord;\n candidate[rail.index + 1].y = coord;\n } else if (rail.vertical) {\n candidate[rail.index].x = coord;\n candidate[rail.index + 1].x = coord;\n } else {\n return void 0;\n }\n const simplified = simplifyPolyline(dedupeConsecutivePoints(candidate));\n return segmentsFor(simplified).length === simplified.length - 1 ? simplified : void 0;\n }, \"candidateByMovingRail\");\n const candidateIsSafe = /* @__PURE__ */ __name((edge, candidate, currentCrossings) => {\n const endpointIds = [edge.start, edge.end].filter(\n (id) => Boolean(id)\n );\n const candidateSegments = segmentsFor(candidate);\n if (candidateSegments.length !== candidate.length - 1) {\n return false;\n }\n for (const segment of candidateSegments) {\n if (segmentHitsAnyRect(segment.a, segment.b, realNodeRects, endpointIds, -BUFFER)) {\n return false;\n }\n if (segmentHitsAnyRect(segment.a, segment.b, labelRects, [], -BUFFER)) {\n return false;\n }\n }\n for (const other of visibleEdges) {\n if (other === edge) {\n continue;\n }\n for (const candidateSegment of candidateSegments) {\n for (const otherSegment of segmentsFor(pointsFor(other))) {\n if (sameAxisSegmentOverlapLength(candidateSegment, otherSegment, 0.5) >= MIN_SHARED) {\n return false;\n }\n }\n }\n }\n return strictCrossingCount(edge, candidate) <= currentCrossings;\n }, \"candidateIsSafe\");\n for (let iteration = 0; iteration < MAX_ITERATIONS; iteration++) {\n const currentCrossings = strictCrossingCount();\n let fixed = false;\n for (const edge of visibleEdges) {\n const points = pointsFor(edge);\n const rail = middleRail(points);\n if (!rail) {\n continue;\n }\n const blockers = blockingRectsFor(edge, rail.segment);\n if (blockers.length === 0) {\n continue;\n }\n const coords = rail.horizontal ? [\n Math.min(...blockers.map((entry) => entry.rect.top)) - CLEARANCE,\n Math.max(...blockers.map((entry) => entry.rect.bottom)) + CLEARANCE\n ] : [\n Math.min(...blockers.map((entry) => entry.rect.left)) - CLEARANCE,\n Math.max(...blockers.map((entry) => entry.rect.right)) + CLEARANCE\n ];\n for (const coord of coords) {\n const candidate = candidateByMovingRail(points, rail.segment, coord);\n if (!candidate || !candidateIsSafe(edge, candidate, currentCrossings)) {\n continue;\n }\n edge.points = candidate;\n fixed = true;\n break;\n }\n if (fixed) {\n break;\n }\n }\n if (!fixed) {\n return;\n }\n }\n}\n__name(liftObstacleHuggingSameSideRails, \"liftObstacleHuggingSameSideRails\");\nfunction liftTopLaneTitleBandsAboveRails(edges, nodeByIdMap) {\n const CLEARANCE = 4;\n const validTitleRect = /* @__PURE__ */ __name((node) => {\n const rect = node.groupTitleRect;\n if (!rect || typeof rect.left !== \"number\" || typeof rect.right !== \"number\" || typeof rect.top !== \"number\" || typeof rect.bottom !== \"number\" || !Number.isFinite(rect.left) || !Number.isFinite(rect.right) || !Number.isFinite(rect.top) || !Number.isFinite(rect.bottom) || rect.right <= rect.left || rect.bottom <= rect.top) {\n return void 0;\n }\n return { left: rect.left, right: rect.right, top: rect.top, bottom: rect.bottom };\n }, \"validTitleRect\");\n const topLaneTitleFor = /* @__PURE__ */ __name((node) => {\n if (!node.isGroup || node.parentId) {\n return void 0;\n }\n const rawDirection = node.direction;\n const direction = typeof rawDirection === \"string\" ? rawDirection.toUpperCase() : \"\";\n if (direction === \"LR\" || direction === \"RL\" || direction === \"BT\") {\n return void 0;\n }\n const rect = validTitleRect(node);\n const y = node.y;\n const height = node.height;\n if (!rect || typeof y !== \"number\" || typeof height !== \"number\" || !Number.isFinite(y) || !Number.isFinite(height) || height <= 0) {\n return void 0;\n }\n const titleWidth = rect.right - rect.left;\n const titleHeight = rect.bottom - rect.top;\n if (titleHeight <= 0 || titleWidth < titleHeight) {\n return void 0;\n }\n return { node, rect };\n }, \"topLaneTitleFor\");\n const horizontalSegmentIntersectsTitle = /* @__PURE__ */ __name((segment, rect) => {\n if (!segment.horizontal) {\n return false;\n }\n const y = segment.a.y;\n if (y <= rect.top + EPS_LOCAL || y >= rect.bottom - EPS_LOCAL) {\n return false;\n }\n return overlapLength(segment.a.x, segment.b.x, rect.left, rect.right) >= MIN_SHARED;\n }, \"horizontalSegmentIntersectsTitle\");\n const lanes = [...nodeByIdMap.values()].map(topLaneTitleFor).filter((lane) => Boolean(lane));\n if (lanes.length === 0) {\n return;\n }\n let topDelta = 0;\n for (const edge of edges) {\n if (edge.isLayoutOnly) {\n continue;\n }\n const points = dedupeConsecutivePoints(edge.points ?? []);\n for (const segment of segmentsFor(points)) {\n for (const lane of lanes) {\n if (!horizontalSegmentIntersectsTitle(segment, lane.rect)) {\n continue;\n }\n topDelta = Math.max(topDelta, lane.rect.bottom - segment.a.y + CLEARANCE);\n }\n }\n }\n if (topDelta <= EPS_LOCAL) {\n return;\n }\n for (const lane of lanes) {\n const y = lane.node.y;\n const height = lane.node.height;\n if (typeof y !== \"number\" || typeof height !== \"number\" || !Number.isFinite(y) || !Number.isFinite(height) || height <= 0) {\n continue;\n }\n lane.node.y = y - topDelta / 2;\n lane.node.height = height + topDelta;\n lane.node.groupTitleRect = {\n ...lane.rect,\n top: lane.rect.top - topDelta,\n bottom: lane.rect.bottom - topDelta\n };\n }\n}\n__name(liftTopLaneTitleBandsAboveRails, \"liftTopLaneTitleBandsAboveRails\");\nfunction shiftLeftLaneTitleBandsLeftOfRails(edges, nodeByIdMap) {\n const CLEARANCE = 4;\n const validTitleRect = /* @__PURE__ */ __name((node) => {\n const rect = node.groupTitleRect;\n if (!rect || typeof rect.left !== \"number\" || typeof rect.right !== \"number\" || typeof rect.top !== \"number\" || typeof rect.bottom !== \"number\" || !Number.isFinite(rect.left) || !Number.isFinite(rect.right) || !Number.isFinite(rect.top) || !Number.isFinite(rect.bottom) || rect.right <= rect.left || rect.bottom <= rect.top) {\n return void 0;\n }\n return { left: rect.left, right: rect.right, top: rect.top, bottom: rect.bottom };\n }, \"validTitleRect\");\n const leftLaneTitleFor = /* @__PURE__ */ __name((node) => {\n if (!node.isGroup || node.parentId) {\n return void 0;\n }\n const rawDirection = node.direction;\n if (rawDirection !== \"LR\") {\n return void 0;\n }\n const rect = validTitleRect(node);\n const x = node.x;\n const width = node.width;\n if (!rect || typeof x !== \"number\" || typeof width !== \"number\" || !Number.isFinite(x) || !Number.isFinite(width) || width <= 0) {\n return void 0;\n }\n const titleWidth = rect.right - rect.left;\n const titleHeight = rect.bottom - rect.top;\n if (titleWidth <= 0 || titleHeight < titleWidth) {\n return void 0;\n }\n return { node, rect };\n }, \"leftLaneTitleFor\");\n const verticalSegmentIntersectsTitle = /* @__PURE__ */ __name((segment, rect) => {\n if (!segment.vertical) {\n return false;\n }\n const x = segment.a.x;\n if (x <= rect.left + EPS_LOCAL || x >= rect.right - EPS_LOCAL) {\n return false;\n }\n return overlapLength(segment.a.y, segment.b.y, rect.top, rect.bottom) >= MIN_SHARED;\n }, \"verticalSegmentIntersectsTitle\");\n const horizontalSegmentIntersectsTitle = /* @__PURE__ */ __name((segment, rect) => {\n if (!segment.horizontal) {\n return false;\n }\n const y = segment.a.y;\n if (y <= rect.top + EPS_LOCAL || y >= rect.bottom - EPS_LOCAL) {\n return false;\n }\n return overlapLength(segment.a.x, segment.b.x, rect.left, rect.right) >= MIN_SHARED;\n }, \"horizontalSegmentIntersectsTitle\");\n const lanes = [...nodeByIdMap.values()].map(leftLaneTitleFor).filter((lane) => Boolean(lane));\n if (lanes.length === 0) {\n return;\n }\n let leftDelta = 0;\n for (const edge of edges) {\n if (edge.isLayoutOnly) {\n continue;\n }\n const points = dedupeConsecutivePoints(edge.points ?? []);\n for (const segment of segmentsFor(points)) {\n for (const lane of lanes) {\n if (verticalSegmentIntersectsTitle(segment, lane.rect)) {\n leftDelta = Math.max(leftDelta, lane.rect.right - segment.a.x + CLEARANCE);\n } else if (horizontalSegmentIntersectsTitle(segment, lane.rect)) {\n const segmentLeft = Math.min(segment.a.x, segment.b.x);\n leftDelta = Math.max(leftDelta, lane.rect.right - segmentLeft + CLEARANCE);\n }\n }\n }\n }\n if (leftDelta <= EPS_LOCAL) {\n return;\n }\n for (const lane of lanes) {\n const x = lane.node.x;\n const width = lane.node.width;\n if (typeof x !== \"number\" || typeof width !== \"number\" || !Number.isFinite(x) || !Number.isFinite(width) || width <= 0) {\n continue;\n }\n lane.node.x = x - leftDelta / 2;\n lane.node.width = width + leftDelta;\n lane.node.groupTitleRect = {\n ...lane.rect,\n left: lane.rect.left - leftDelta,\n right: lane.rect.right - leftDelta\n };\n }\n}\n__name(shiftLeftLaneTitleBandsLeftOfRails, \"shiftLeftLaneTitleBandsLeftOfRails\");\nfunction swapDestinationTerminalTailsToReduceCrossings(edges, nodeByIdMap) {\n const BUFFER = 2;\n const MAX_ITERATIONS = 4;\n const { realNodeRects } = collectNodeRectEntries(nodeByIdMap.values());\n const visibleEdges = edges.filter((edge) => !edge.isLayoutOnly);\n const replacementPointsFor = /* @__PURE__ */ __name((edge, replacements = /* @__PURE__ */ new Map()) => dedupeConsecutivePoints(\n replacements.get(edge) ?? edge.points ?? []\n ), \"replacementPointsFor\");\n const crossingCount = /* @__PURE__ */ __name((replacements = /* @__PURE__ */ new Map()) => {\n let count = 0;\n for (let i = 0; i < visibleEdges.length; i++) {\n const firstSegments = segmentsFor(replacementPointsFor(visibleEdges[i], replacements));\n for (let j = i + 1; j < visibleEdges.length; j++) {\n const secondSegments = segmentsFor(replacementPointsFor(visibleEdges[j], replacements));\n for (const firstSegment of firstSegments) {\n for (const secondSegment of secondSegments) {\n if (orthogonalSegmentsStrictlyCross(\n firstSegment.a,\n firstSegment.b,\n secondSegment.a,\n secondSegment.b,\n EPS_LOCAL\n )) {\n count++;\n }\n }\n }\n }\n }\n return count;\n }, \"crossingCount\");\n const totalBends = /* @__PURE__ */ __name((replacements = /* @__PURE__ */ new Map()) => visibleEdges.reduce(\n (sum, edge) => sum + countOrthogonalBends(replacementPointsFor(edge, replacements)),\n 0\n ), \"totalBends\");\n const terminalTailFor = /* @__PURE__ */ __name((edge) => {\n const points = replacementPointsFor(edge);\n if (points.length < 4) {\n return void 0;\n }\n const tailStart = points[points.length - 2];\n const terminal = points[points.length - 1];\n if (!isHorizontalSegment(tailStart, terminal, EPS_LOCAL) && !isVerticalSegment(tailStart, terminal, EPS_LOCAL)) {\n return void 0;\n }\n return { tailStart, terminal };\n }, \"terminalTailFor\");\n const candidateWithDestinationTail = /* @__PURE__ */ __name((edge, tail) => {\n const points = replacementPointsFor(edge);\n if (points.length < 3) {\n return void 0;\n }\n const start = points[0];\n const firstTurn = points[1];\n let connector;\n if (isHorizontalSegment(start, firstTurn, EPS_LOCAL)) {\n connector = { x: firstTurn.x, y: tail.tailStart.y };\n } else if (isVerticalSegment(start, firstTurn, EPS_LOCAL)) {\n connector = { x: tail.tailStart.x, y: firstTurn.y };\n } else {\n return void 0;\n }\n const candidate = simplifyPolyline(\n dedupeConsecutivePoints([start, firstTurn, connector, tail.tailStart, tail.terminal])\n );\n return segmentsFor(candidate).length === candidate.length - 1 ? candidate : void 0;\n }, \"candidateWithDestinationTail\");\n const pathHasNodeHit = /* @__PURE__ */ __name((edge, path) => {\n const endpointIds = [edge.start, edge.end].filter(\n (id) => Boolean(id)\n );\n for (const segment of segmentsFor(path)) {\n if (segmentHitsAnyRect(segment.a, segment.b, realNodeRects, endpointIds, -BUFFER)) {\n return true;\n }\n }\n return false;\n }, \"pathHasNodeHit\");\n const pathHasSharedTrack = /* @__PURE__ */ __name((edge, path, replacements) => {\n for (const other of visibleEdges) {\n if (other === edge) {\n continue;\n }\n for (const candidateSegment of segmentsFor(path)) {\n for (const otherSegment of segmentsFor(replacementPointsFor(other, replacements))) {\n if (sameAxisSegmentOverlapLength(candidateSegment, otherSegment, 0.5) >= MIN_SHARED) {\n return true;\n }\n }\n }\n }\n return false;\n }, \"pathHasSharedTrack\");\n const candidateIsSafe = /* @__PURE__ */ __name((edge, path, replacements) => !pathHasNodeHit(edge, path) && !pathHasSharedTrack(edge, path, replacements), \"candidateIsSafe\");\n const edgesByDestination = /* @__PURE__ */ __name(() => {\n const result = /* @__PURE__ */ new Map();\n for (const edge of visibleEdges) {\n const dstId = edge.end;\n if (!dstId || !nodeByIdMap.has(dstId)) {\n continue;\n }\n const points = replacementPointsFor(edge);\n if (points.length < 4) {\n continue;\n }\n const bucket = result.get(dstId) ?? [];\n bucket.push(edge);\n result.set(dstId, bucket);\n }\n return result;\n }, \"edgesByDestination\");\n for (let iteration = 0; iteration < MAX_ITERATIONS; iteration++) {\n const currentCrossings = crossingCount();\n if (currentCrossings === 0) {\n return;\n }\n const currentBends = totalBends();\n let bestReplacements;\n let bestCrossings = currentCrossings;\n let bestBends = currentBends;\n for (const destinationEdges of edgesByDestination().values()) {\n for (let i = 0; i < destinationEdges.length; i++) {\n for (let j = i + 1; j < destinationEdges.length; j++) {\n const first = destinationEdges[i];\n const second = destinationEdges[j];\n const firstTail = terminalTailFor(first);\n const secondTail = terminalTailFor(second);\n if (!firstTail || !secondTail) {\n continue;\n }\n const firstCandidate = candidateWithDestinationTail(first, secondTail);\n const secondCandidate = candidateWithDestinationTail(second, firstTail);\n if (!firstCandidate || !secondCandidate) {\n continue;\n }\n const replacements = /* @__PURE__ */ new Map([\n [first, firstCandidate],\n [second, secondCandidate]\n ]);\n if (!candidateIsSafe(first, firstCandidate, replacements) || !candidateIsSafe(second, secondCandidate, replacements)) {\n continue;\n }\n const candidateCrossings = crossingCount(replacements);\n const candidateBends = totalBends(replacements);\n if (candidateCrossings >= currentCrossings) {\n continue;\n }\n if (candidateCrossings > bestCrossings || candidateCrossings === bestCrossings && candidateBends >= bestBends) {\n continue;\n }\n bestReplacements = replacements;\n bestCrossings = candidateCrossings;\n bestBends = candidateBends;\n }\n }\n }\n if (!bestReplacements) {\n return;\n }\n for (const [edge, points] of bestReplacements) {\n edge.points = points;\n }\n }\n}\n__name(swapDestinationTerminalTailsToReduceCrossings, \"swapDestinationTerminalTailsToReduceCrossings\");\nfunction reassignCrossingExternalRailChannels(edges, nodeByIdMap) {\n const BUFFER = 2;\n const RAIL_CHANNEL_GAP = 12;\n const MAX_ITERATIONS = 4;\n const MAX_EXHAUSTIVE_COMPONENT = 6;\n const { realNodeRects, labelNodeRects: labelRects } = collectNodeRectEntries(\n nodeByIdMap.values()\n );\n const visibleEdges = edges.filter((edge) => !edge.isLayoutOnly);\n const replacementPointsFor = /* @__PURE__ */ __name((edge, replacements = /* @__PURE__ */ new Map()) => dedupeConsecutivePoints(\n replacements.get(edge) ?? edge.points ?? []\n ), \"replacementPointsFor\");\n const strictCrossingCount = /* @__PURE__ */ __name((replacements = /* @__PURE__ */ new Map()) => {\n let count = 0;\n for (let i = 0; i < visibleEdges.length; i++) {\n const firstSegments = segmentsFor(replacementPointsFor(visibleEdges[i], replacements));\n for (let j = i + 1; j < visibleEdges.length; j++) {\n const secondSegments = segmentsFor(replacementPointsFor(visibleEdges[j], replacements));\n for (const firstSegment of firstSegments) {\n for (const secondSegment of secondSegments) {\n if (orthogonalSegmentsStrictlyCross(\n firstSegment.a,\n firstSegment.b,\n secondSegment.a,\n secondSegment.b,\n EPS_LOCAL\n )) {\n count++;\n }\n }\n }\n }\n }\n return count;\n }, \"strictCrossingCount\");\n const totalBends = /* @__PURE__ */ __name((replacements = /* @__PURE__ */ new Map()) => visibleEdges.reduce(\n (sum, edge) => sum + countOrthogonalBends(replacementPointsFor(edge, replacements)),\n 0\n ), \"totalBends\");\n const endpointRectsFor = /* @__PURE__ */ __name((edge) => {\n const srcId = edge.start;\n const dstId = edge.end;\n const srcNode = srcId ? nodeByIdMap.get(srcId) : void 0;\n const dstNode = dstId ? nodeByIdMap.get(dstId) : void 0;\n const src = srcNode ? rectOfNodeBounds(srcNode) : void 0;\n const dst = dstNode ? rectOfNodeBounds(dstNode) : void 0;\n return src && dst ? { src, dst } : void 0;\n }, \"endpointRectsFor\");\n const externalRailForSegment = /* @__PURE__ */ __name((edge, points, segment) => {\n if (segment.index <= 0 || segment.index + 1 >= points.length - 1) {\n return void 0;\n }\n const endpointRects = endpointRectsFor(edge);\n if (!endpointRects) {\n return void 0;\n }\n if (segment.vertical) {\n const coord = segment.a.x;\n const leftBound = Math.min(endpointRects.src.left, endpointRects.dst.left);\n const rightBound = Math.max(endpointRects.src.right, endpointRects.dst.right);\n const side = coord < leftBound - EPS_LOCAL ? \"left\" : coord > rightBound + EPS_LOCAL ? \"right\" : void 0;\n if (!side) {\n return void 0;\n }\n return {\n edge,\n points,\n segmentIndex: segment.index,\n axis: \"vertical\",\n side,\n coord,\n min: Math.min(segment.a.y, segment.b.y),\n max: Math.max(segment.a.y, segment.b.y)\n };\n }\n if (segment.horizontal) {\n const coord = segment.a.y;\n const topBound = Math.min(endpointRects.src.top, endpointRects.dst.top);\n const bottomBound = Math.max(endpointRects.src.bottom, endpointRects.dst.bottom);\n const side = coord < topBound - EPS_LOCAL ? \"top\" : coord > bottomBound + EPS_LOCAL ? \"bottom\" : void 0;\n if (!side) {\n return void 0;\n }\n return {\n edge,\n points,\n segmentIndex: segment.index,\n axis: \"horizontal\",\n side,\n coord,\n min: Math.min(segment.a.x, segment.b.x),\n max: Math.max(segment.a.x, segment.b.x)\n };\n }\n return void 0;\n }, \"externalRailForSegment\");\n const collectExternalRails = /* @__PURE__ */ __name(() => {\n const rails = [];\n for (const edge of visibleEdges) {\n const points = replacementPointsFor(edge);\n for (const segment of segmentsFor(points)) {\n const rail = externalRailForSegment(edge, points, segment);\n if (rail) {\n rails.push(rail);\n }\n }\n }\n return rails;\n }, \"collectExternalRails\");\n const railsInteract = /* @__PURE__ */ __name((a, b) => a.edge !== b.edge && a.axis === b.axis && a.side === b.side && overlapLength(a.min, a.max, b.min, b.max) >= MIN_SHARED, \"railsInteract\");\n const connectedComponents = /* @__PURE__ */ __name((rails) => {\n const result = [];\n const seen = /* @__PURE__ */ new Set();\n for (const rail of rails) {\n if (seen.has(rail)) {\n continue;\n }\n const queue = [rail];\n const component = [];\n seen.add(rail);\n while (queue.length > 0) {\n const current = queue.pop();\n component.push(current);\n for (const next of rails) {\n if (!seen.has(next) && railsInteract(current, next)) {\n seen.add(next);\n queue.push(next);\n }\n }\n }\n if (component.length > 1) {\n result.push(component);\n }\n }\n return result;\n }, \"connectedComponents\");\n const uniqueCoordsFor = /* @__PURE__ */ __name((component) => {\n const coords = [];\n for (const rail of component) {\n if (!coords.some((coord) => Math.abs(coord - rail.coord) < EPS_LOCAL)) {\n coords.push(rail.coord);\n }\n }\n while (coords.length < component.length) {\n const min = Math.min(...coords);\n const max = Math.max(...coords);\n const side = component[0].side;\n coords.push(\n side === \"left\" || side === \"top\" ? min - RAIL_CHANNEL_GAP * (component.length - coords.length) : max + RAIL_CHANNEL_GAP * (component.length - coords.length)\n );\n }\n return coords;\n }, \"uniqueCoordsFor\");\n const coordinateAssignmentsFor = /* @__PURE__ */ __name((component) => {\n const current = component.map((rail) => rail.coord);\n const coords = uniqueCoordsFor(component);\n const assignments = [];\n if (component.length <= MAX_EXHAUSTIVE_COMPONENT) {\n const used = new Array(coords.length).fill(false);\n const next = [];\n const visit = /* @__PURE__ */ __name(() => {\n if (next.length === component.length) {\n if (next.some((coord, index) => Math.abs(coord - current[index]) >= EPS_LOCAL)) {\n assignments.push([...next]);\n }\n return;\n }\n for (const [i, coord] of coords.entries()) {\n if (used[i]) {\n continue;\n }\n used[i] = true;\n next.push(coord);\n visit();\n next.pop();\n used[i] = false;\n }\n }, \"visit\");\n visit();\n return assignments;\n }\n for (let i = 0; i < current.length; i++) {\n for (let j = i + 1; j < current.length; j++) {\n const assignment = [...current];\n [assignment[i], assignment[j]] = [assignment[j], assignment[i]];\n assignments.push(assignment);\n }\n }\n return assignments;\n }, \"coordinateAssignmentsFor\");\n const replacementsForAssignment = /* @__PURE__ */ __name((component, assignment) => {\n const draftByEdge = /* @__PURE__ */ new Map();\n for (const [i, rail] of component.entries()) {\n const coord = assignment[i];\n const points = draftByEdge.get(rail.edge) ?? rail.points.map((point) => ({ x: point.x, y: point.y }));\n if (rail.axis === \"vertical\") {\n points[rail.segmentIndex].x = coord;\n points[rail.segmentIndex + 1].x = coord;\n } else {\n points[rail.segmentIndex].y = coord;\n points[rail.segmentIndex + 1].y = coord;\n }\n draftByEdge.set(rail.edge, points);\n }\n const replacements = /* @__PURE__ */ new Map();\n for (const [edge, points] of draftByEdge) {\n const simplified = simplifyPolyline(dedupeConsecutivePoints(points));\n if (segmentsFor(simplified).length !== simplified.length - 1) {\n return void 0;\n }\n replacements.set(edge, simplified);\n }\n return replacements;\n }, \"replacementsForAssignment\");\n const candidateIsSafe = /* @__PURE__ */ __name((replacements) => {\n for (const [edge, points] of replacements) {\n const endpointIds = [\n edge.start,\n edge.end\n ].filter((id) => Boolean(id));\n for (const segment of segmentsFor(points)) {\n if (segmentHitsAnyRect(segment.a, segment.b, realNodeRects, endpointIds, -BUFFER)) {\n return false;\n }\n if (segmentHitsAnyRect(segment.a, segment.b, labelRects, [], -BUFFER)) {\n return false;\n }\n }\n }\n for (let i = 0; i < visibleEdges.length; i++) {\n const first = visibleEdges[i];\n const firstChanged = replacements.has(first);\n const firstSegments = segmentsFor(replacementPointsFor(first, replacements));\n for (let j = i + 1; j < visibleEdges.length; j++) {\n const second = visibleEdges[j];\n if (!firstChanged && !replacements.has(second)) {\n continue;\n }\n const secondSegments = segmentsFor(replacementPointsFor(second, replacements));\n for (const firstSegment of firstSegments) {\n for (const secondSegment of secondSegments) {\n if (sameAxisSegmentOverlapLength(firstSegment, secondSegment, 0.5) >= MIN_SHARED) {\n return false;\n }\n }\n }\n }\n }\n return true;\n }, \"candidateIsSafe\");\n for (let iteration = 0; iteration < MAX_ITERATIONS; iteration++) {\n const currentCrossings = strictCrossingCount();\n if (currentCrossings === 0) {\n return;\n }\n let bestReplacements;\n let bestCrossings = currentCrossings;\n let bestBends = totalBends();\n let bestDisplacement = Number.POSITIVE_INFINITY;\n for (const component of connectedComponents(collectExternalRails())) {\n for (const assignment of coordinateAssignmentsFor(component)) {\n const replacements = replacementsForAssignment(component, assignment);\n if (!replacements || !candidateIsSafe(replacements)) {\n continue;\n }\n const candidateCrossings = strictCrossingCount(replacements);\n if (candidateCrossings >= currentCrossings) {\n continue;\n }\n const candidateBends = totalBends(replacements);\n const candidateDisplacement = component.reduce(\n (sum, rail, index) => sum + Math.abs(assignment[index] - rail.coord),\n 0\n );\n if (candidateCrossings > bestCrossings || candidateCrossings === bestCrossings && (candidateBends > bestBends || candidateBends === bestBends && candidateDisplacement >= bestDisplacement)) {\n continue;\n }\n bestReplacements = replacements;\n bestCrossings = candidateCrossings;\n bestBends = candidateBends;\n bestDisplacement = candidateDisplacement;\n }\n }\n if (!bestReplacements) {\n return;\n }\n for (const [edge, points] of bestReplacements) {\n edge.points = points;\n }\n }\n}\n__name(reassignCrossingExternalRailChannels, \"reassignCrossingExternalRailChannels\");\nfunction shortcutRedundantOrthogonalJogs(edges, nodeByIdMap) {\n const BUFFER = 2;\n const MAX_ITERATIONS = 8;\n const { realNodeRects, labelNodeRects: labelRects } = collectNodeRectEntries(\n nodeByIdMap.values()\n );\n const visibleEdges = edges.filter((edge) => !edge.isLayoutOnly);\n const pointsFor = /* @__PURE__ */ __name((edge, replacementEdge, replacement) => dedupeConsecutivePoints(\n edge === replacementEdge ? replacement ?? [] : edge.points ?? []\n ), \"pointsFor\");\n const pathLength = /* @__PURE__ */ __name((points) => segmentsFor(points).reduce((sum, segment) => {\n const dx = segment.a.x - segment.b.x;\n const dy = segment.a.y - segment.b.y;\n return sum + Math.hypot(dx, dy);\n }, 0), \"pathLength\");\n const strictCrossingCount = /* @__PURE__ */ __name((replacementEdge, replacement) => {\n let count = 0;\n for (let i = 0; i < visibleEdges.length; i++) {\n const firstSegments = segmentsFor(pointsFor(visibleEdges[i], replacementEdge, replacement));\n for (let j = i + 1; j < visibleEdges.length; j++) {\n const secondSegments = segmentsFor(\n pointsFor(visibleEdges[j], replacementEdge, replacement)\n );\n for (const firstSegment of firstSegments) {\n for (const secondSegment of secondSegments) {\n if (orthogonalSegmentsStrictlyCross(\n firstSegment.a,\n firstSegment.b,\n secondSegment.a,\n secondSegment.b,\n EPS_LOCAL\n )) {\n count++;\n }\n }\n }\n }\n }\n return count;\n }, \"strictCrossingCount\");\n const segmentRunsAlongRectBorder = /* @__PURE__ */ __name((segment, rect) => {\n if (segment.horizontal) {\n const y = segment.a.y;\n const onBorder = Math.abs(y - rect.top) < 1 || Math.abs(y - rect.bottom) < 1;\n return onBorder && overlapLength(segment.a.x, segment.b.x, rect.left, rect.right) >= MIN_SHARED;\n }\n if (segment.vertical) {\n const x = segment.a.x;\n const onBorder = Math.abs(x - rect.left) < 1 || Math.abs(x - rect.right) < 1;\n return onBorder && overlapLength(segment.a.y, segment.b.y, rect.top, rect.bottom) >= MIN_SHARED;\n }\n return false;\n }, \"segmentRunsAlongRectBorder\");\n const endpointRectsFor = /* @__PURE__ */ __name((edge) => {\n const endpointIds = [edge.start, edge.end].filter(\n (id) => Boolean(id)\n );\n const rects = [];\n for (const id of endpointIds) {\n const node = nodeByIdMap.get(id);\n const rect = node ? rectOfNodeBounds(node) : void 0;\n if (rect) {\n rects.push(rect);\n }\n }\n return rects;\n }, \"endpointRectsFor\");\n const shortcutCandidatesAt = /* @__PURE__ */ __name((points, index) => {\n if (index + 3 >= points.length) {\n return [];\n }\n const p0 = points[index];\n const p1 = points[index + 1];\n const p2 = points[index + 2];\n const p3 = points[index + 3];\n const isHVH = isHorizontalSegment(p0, p1, EPS_LOCAL) && isVerticalSegment(p1, p2, EPS_LOCAL) && isHorizontalSegment(p2, p3, EPS_LOCAL);\n const isVHV = isVerticalSegment(p0, p1, EPS_LOCAL) && isHorizontalSegment(p1, p2, EPS_LOCAL) && isVerticalSegment(p2, p3, EPS_LOCAL);\n if (!isHVH && !isVHV) {\n return [];\n }\n const outerSegmentsOppose = isHVH ? Math.sign(p1.x - p0.x) !== Math.sign(p3.x - p2.x) : Math.sign(p1.y - p0.y) !== Math.sign(p3.y - p2.y);\n if (!outerSegmentsOppose) {\n return [];\n }\n const corners = sameX(p0, p3, EPS_LOCAL) || sameY(p0, p3, EPS_LOCAL) ? [] : [\n { x: p0.x, y: p3.y },\n { x: p3.x, y: p0.y }\n ];\n const rawCandidates = corners.length === 0 ? [[...points.slice(0, index + 1), ...points.slice(index + 3)]] : corners.map((corner) => [\n ...points.slice(0, index + 1),\n corner,\n ...points.slice(index + 3)\n ]);\n const seen = /* @__PURE__ */ new Set();\n return rawCandidates.map((candidate) => simplifyPolyline(dedupeConsecutivePoints(candidate))).filter((candidate) => {\n if (segmentsFor(candidate).length !== candidate.length - 1) {\n return false;\n }\n if (!candidate.some((point) => samePoint(point, p3, EPS_LOCAL))) {\n return false;\n }\n const key = candidate.map((point) => `${point.x.toFixed(3)},${point.y.toFixed(3)}`).join(\"|\");\n if (seen.has(key)) {\n return false;\n }\n seen.add(key);\n return true;\n });\n }, \"shortcutCandidatesAt\");\n const candidateIsSafe = /* @__PURE__ */ __name((edge, candidate, currentCrossings) => {\n const endpointIds = [edge.start, edge.end].filter(\n (id) => Boolean(id)\n );\n const endpointRects = endpointRectsFor(edge);\n for (const segment of segmentsFor(candidate)) {\n if (segmentHitsAnyRect(segment.a, segment.b, realNodeRects, endpointIds, -BUFFER)) {\n return false;\n }\n if (segmentHitsAnyRect(segment.a, segment.b, labelRects, [], -BUFFER)) {\n return false;\n }\n if (endpointRects.some((rect) => segmentRunsAlongRectBorder(segment, rect))) {\n return false;\n }\n }\n for (const other of visibleEdges) {\n if (other === edge) {\n continue;\n }\n for (const candidateSegment of segmentsFor(candidate)) {\n for (const otherSegment of segmentsFor(pointsFor(other))) {\n if (sameAxisSegmentOverlapLength(candidateSegment, otherSegment, 0.5) >= MIN_SHARED) {\n return false;\n }\n }\n }\n }\n return strictCrossingCount(edge, candidate) <= currentCrossings;\n }, \"candidateIsSafe\");\n for (let iteration = 0; iteration < MAX_ITERATIONS; iteration++) {\n const currentCrossings = strictCrossingCount();\n let bestEdge;\n let bestPath;\n let bestCrossings = currentCrossings;\n let bestBends = Number.POSITIVE_INFINITY;\n let bestLength = Number.POSITIVE_INFINITY;\n for (const edge of visibleEdges) {\n const currentPoints = pointsFor(edge);\n const currentBends = countOrthogonalBends(currentPoints, EPS_LOCAL);\n const currentLength = pathLength(currentPoints);\n for (let index = 0; index <= currentPoints.length - 4; index++) {\n for (const candidate of shortcutCandidatesAt(currentPoints, index)) {\n const candidateBends = countOrthogonalBends(candidate, EPS_LOCAL);\n const candidateLength = pathLength(candidate);\n const improvesShape = candidateBends < currentBends || candidateBends === currentBends && candidateLength < currentLength - EPS_LOCAL;\n if (!improvesShape || !candidateIsSafe(edge, candidate, currentCrossings)) {\n continue;\n }\n const candidateCrossings = strictCrossingCount(edge, candidate);\n if (candidateCrossings > bestCrossings || candidateCrossings === bestCrossings && (candidateBends > bestBends || candidateBends === bestBends && candidateLength >= bestLength)) {\n continue;\n }\n bestEdge = edge;\n bestPath = candidate;\n bestCrossings = candidateCrossings;\n bestBends = candidateBends;\n bestLength = candidateLength;\n }\n }\n }\n if (!bestEdge || !bestPath) {\n return;\n }\n bestEdge.points = bestPath;\n }\n}\n__name(shortcutRedundantOrthogonalJogs, \"shortcutRedundantOrthogonalJogs\");\nfunction resolveRenderedOrthogonalCrossings(edges, nodeByIdMap) {\n const ANCHOR = 20;\n const EXTRA_CHANNEL_COUNT = 2;\n const MAX_ITERATIONS = 4;\n const MAX_PAIR_CANDIDATES_PER_EDGE = 48;\n const realNodes = [];\n for (const node of nodeByIdMap.values()) {\n if (node.isGroup || node.isEdgeLabel) {\n continue;\n }\n const cx = node.x ?? 0;\n const cy = node.y ?? 0;\n const rect = rectOfNodeBounds(node);\n if (!rect) {\n continue;\n }\n realNodes.push({\n id: String(node.id ?? \"\"),\n cx,\n cy,\n rect\n });\n }\n if (realNodes.length === 0) {\n return;\n }\n const nodeInfoById = new Map(realNodes.map((node) => [node.id, node]));\n const realNodeRects = realNodes.map((node) => ({ id: node.id, rect: node.rect }));\n const sides = [\"top\", \"bottom\", \"left\", \"right\"];\n const outsideTracks = {\n top: Math.min(...realNodes.map((node) => node.rect.top)) - ANCHOR,\n bottom: Math.max(...realNodes.map((node) => node.rect.bottom)) + ANCHOR,\n left: Math.min(...realNodes.map((node) => node.rect.left)) - ANCHOR,\n right: Math.max(...realNodes.map((node) => node.rect.right)) + ANCHOR\n };\n const visibleEdges = edges.filter((edge) => !edge.isLayoutOnly);\n const edgeIndex = new Map(visibleEdges.map((edge, index) => [edge, index]));\n const outwardTracksForSide = /* @__PURE__ */ __name((side) => {\n const outward = side === \"left\" || side === \"top\" ? -1 : 1;\n const tracks = [];\n for (let channel = 0; channel <= EXTRA_CHANNEL_COUNT; channel++) {\n tracks.push(outsideTracks[side] + outward * ANCHOR * channel);\n }\n return tracks;\n }, \"outwardTracksForSide\");\n const replacementPointsFor = /* @__PURE__ */ __name((edge, replacements = /* @__PURE__ */ new Map()) => dedupeConsecutivePoints(\n replacements.get(edge) ?? edge.points ?? []\n ), \"replacementPointsFor\");\n const crossingCountBetweenSegments = /* @__PURE__ */ __name((firstSegments, secondSegments) => {\n let count = 0;\n for (const firstSegment of firstSegments) {\n for (const secondSegment of secondSegments) {\n if (orthogonalSegmentsStrictlyCross(\n firstSegment.a,\n firstSegment.b,\n secondSegment.a,\n secondSegment.b,\n EPS_LOCAL\n )) {\n count++;\n }\n }\n }\n return count;\n }, \"crossingCountBetweenSegments\");\n const crossingCountBetweenPaths = /* @__PURE__ */ __name((first, second) => crossingCountBetweenSegments(segmentsFor(first), segmentsFor(second)), \"crossingCountBetweenPaths\");\n const crossingSnapshot = /* @__PURE__ */ __name((replacements = /* @__PURE__ */ new Map()) => {\n let count = 0;\n const pairs = [];\n const edgeSet = /* @__PURE__ */ new Set();\n const edgeOrder = [];\n const addEdge = /* @__PURE__ */ __name((edge) => {\n if (!edgeSet.has(edge)) {\n edgeSet.add(edge);\n edgeOrder.push(edge);\n }\n }, \"addEdge\");\n for (let i = 0; i < visibleEdges.length; i++) {\n const first = visibleEdges[i];\n const firstPoints = replacementPointsFor(first, replacements);\n for (let j = i + 1; j < visibleEdges.length; j++) {\n const second = visibleEdges[j];\n const pairCount = crossingCountBetweenPaths(\n firstPoints,\n replacementPointsFor(second, replacements)\n );\n if (pairCount > 0) {\n count += pairCount;\n pairs.push({ first, second, count: pairCount });\n addEdge(first);\n addEdge(second);\n }\n }\n }\n edgeOrder.sort((a, b) => (edgeIndex.get(a) ?? 0) - (edgeIndex.get(b) ?? 0));\n return {\n count,\n pairs,\n edgeSet,\n edges: edgeOrder\n };\n }, \"crossingSnapshot\");\n const crossingCountWithReplacements = /* @__PURE__ */ __name((current, replacements) => {\n const changed = new Set(replacements.keys());\n if (changed.size === 0) {\n return current.count;\n }\n let currentAffected = 0;\n for (const pair of current.pairs) {\n if (changed.has(pair.first) || changed.has(pair.second)) {\n currentAffected += pair.count;\n }\n }\n let replacementAffected = 0;\n for (let i = 0; i < visibleEdges.length; i++) {\n const first = visibleEdges[i];\n const firstChanged = changed.has(first);\n const firstPoints = replacementPointsFor(first, replacements);\n for (let j = i + 1; j < visibleEdges.length; j++) {\n const second = visibleEdges[j];\n if (!firstChanged && !changed.has(second)) {\n continue;\n }\n replacementAffected += crossingCountBetweenPaths(\n firstPoints,\n replacementPointsFor(second, replacements)\n );\n }\n }\n return current.count - currentAffected + replacementAffected;\n }, \"crossingCountWithReplacements\");\n const crossingComponents = /* @__PURE__ */ __name((snapshot) => {\n const neighbors = /* @__PURE__ */ new Map();\n for (const pair of snapshot.pairs) {\n const firstNeighbors = neighbors.get(pair.first) ?? /* @__PURE__ */ new Set();\n firstNeighbors.add(pair.second);\n neighbors.set(pair.first, firstNeighbors);\n const secondNeighbors = neighbors.get(pair.second) ?? /* @__PURE__ */ new Set();\n secondNeighbors.add(pair.first);\n neighbors.set(pair.second, secondNeighbors);\n }\n const components = [];\n const seen = /* @__PURE__ */ new Set();\n for (const edge of snapshot.edges) {\n if (seen.has(edge)) {\n continue;\n }\n const queue = [edge];\n const component = [];\n seen.add(edge);\n while (queue.length > 0) {\n const current = queue.pop();\n component.push(current);\n for (const next of neighbors.get(current) ?? []) {\n if (!seen.has(next)) {\n seen.add(next);\n queue.push(next);\n }\n }\n }\n component.sort((a, b) => (edgeIndex.get(a) ?? 0) - (edgeIndex.get(b) ?? 0));\n if (component.length > 1) {\n components.push(component);\n }\n }\n return components;\n }, \"crossingComponents\");\n const endpointIdsFor = /* @__PURE__ */ __name((edge) => [edge.start, edge.end].filter(\n (id) => Boolean(id)\n ), \"endpointIdsFor\");\n const pairSearchGroups = /* @__PURE__ */ __name((snapshot) => {\n const groups = [];\n for (const component of crossingComponents(snapshot)) {\n const componentSet = new Set(component);\n const componentEndpointIds = new Set(component.flatMap((edge) => endpointIdsFor(edge)));\n const group = [...component];\n for (const edge of visibleEdges) {\n if (componentSet.has(edge)) {\n continue;\n }\n if (endpointIdsFor(edge).some((id) => componentEndpointIds.has(id))) {\n group.push(edge);\n }\n }\n group.sort((a, b) => (edgeIndex.get(a) ?? 0) - (edgeIndex.get(b) ?? 0));\n groups.push(group);\n }\n return groups;\n }, \"pairSearchGroups\");\n const crossingCountWithSingleReplacement = /* @__PURE__ */ __name((current, edge, replacement) => crossingCountWithReplacements(\n current,\n /* @__PURE__ */ new Map([[edge, replacement]])\n ), \"crossingCountWithSingleReplacement\");\n const currentCrossingsByEdge = /* @__PURE__ */ __name((current) => {\n const result = /* @__PURE__ */ new Map();\n for (const pair of current.pairs) {\n result.set(pair.first, (result.get(pair.first) ?? 0) + pair.count);\n result.set(pair.second, (result.get(pair.second) ?? 0) + pair.count);\n }\n return result;\n }, \"currentCrossingsByEdge\");\n const pathLength = /* @__PURE__ */ __name((points) => points.slice(1).reduce((sum, point, index) => {\n const previous = points[index];\n return sum + Math.abs(point.x - previous.x) + Math.abs(point.y - previous.y);\n }, 0), \"pathLength\");\n const totalBends = /* @__PURE__ */ __name((replacements = /* @__PURE__ */ new Map()) => visibleEdges.reduce(\n (sum, edge) => sum + countOrthogonalBends(replacementPointsFor(edge, replacements)),\n 0\n ), \"totalBends\");\n const totalLength = /* @__PURE__ */ __name((replacements = /* @__PURE__ */ new Map()) => visibleEdges.reduce(\n (sum, edge) => sum + pathLength(replacementPointsFor(edge, replacements)),\n 0\n ), \"totalLength\");\n const pathHasSegmentConflict = /* @__PURE__ */ __name((edge, path, replacements = /* @__PURE__ */ new Map()) => {\n const pathSegments = segmentsFor(path);\n for (const other of visibleEdges) {\n if (other === edge) {\n continue;\n }\n for (const candidateSegment of pathSegments) {\n for (const otherSegment of segmentsFor(replacementPointsFor(other, replacements))) {\n if (sameAxisSegmentOverlapLength(candidateSegment, otherSegment, 0.5) >= MIN_SHARED) {\n return true;\n }\n }\n }\n }\n return false;\n }, \"pathHasSegmentConflict\");\n const pathHitsNode = /* @__PURE__ */ __name((edge, path) => {\n const endpointIds = [edge.start, edge.end].filter(\n (id) => Boolean(id)\n );\n for (const segment of segmentsFor(path)) {\n if (segmentHitsAnyRect(segment.a, segment.b, realNodeRects, endpointIds, -2)) {\n return true;\n }\n }\n return false;\n }, \"pathHitsNode\");\n const pushOrthogonalCandidate = /* @__PURE__ */ __name((candidates, points) => {\n const candidate = simplifyPolyline(dedupeConsecutivePoints(points));\n if (segmentsFor(candidate).length === candidate.length - 1) {\n candidates.push(candidate);\n }\n }, \"pushOrthogonalCandidate\");\n const sideIsHorizontal = /* @__PURE__ */ __name((side) => side === \"left\" || side === \"right\", \"sideIsHorizontal\");\n const localTrackForSameSide = /* @__PURE__ */ __name((src, side, dst) => {\n switch (side) {\n case \"left\":\n return Math.min(src.x, dst.x) - ANCHOR;\n case \"right\":\n return Math.max(src.x, dst.x) + ANCHOR;\n case \"top\":\n return Math.min(src.y, dst.y) - ANCHOR;\n case \"bottom\":\n return Math.max(src.y, dst.y) + ANCHOR;\n }\n }, \"localTrackForSameSide\");\n const addSameSideCandidates = /* @__PURE__ */ __name((candidates, src, srcSide, dst) => {\n const outward = srcSide === \"left\" || srcSide === \"top\" ? -1 : 1;\n const trackSeeds = [localTrackForSameSide(src, srcSide, dst), outsideTracks[srcSide]];\n for (const seed of trackSeeds) {\n for (let channel = 0; channel <= EXTRA_CHANNEL_COUNT; channel++) {\n pushOrthogonalCandidate(\n candidates,\n buildSameSideTrackPath(src, srcSide, dst, seed + outward * ANCHOR * channel)\n );\n }\n }\n }, \"addSameSideCandidates\");\n const addHorizontalToVerticalCandidates = /* @__PURE__ */ __name((candidates, src, srcSide, dst, dstSide) => {\n for (const xTrack of outwardTracksForSide(srcSide)) {\n for (const yTrack of outwardTracksForSide(dstSide)) {\n pushOrthogonalCandidate(candidates, [\n src,\n { x: xTrack, y: src.y },\n { x: xTrack, y: yTrack },\n { x: dst.x, y: yTrack },\n dst\n ]);\n }\n }\n }, \"addHorizontalToVerticalCandidates\");\n const addVerticalToHorizontalCandidates = /* @__PURE__ */ __name((candidates, src, srcSide, dst, dstSide) => {\n for (const yTrack of outwardTracksForSide(srcSide)) {\n for (const xTrack of outwardTracksForSide(dstSide)) {\n pushOrthogonalCandidate(candidates, [\n src,\n { x: src.x, y: yTrack },\n { x: xTrack, y: yTrack },\n { x: xTrack, y: dst.y },\n dst\n ]);\n }\n }\n }, \"addVerticalToHorizontalCandidates\");\n const addHorizontalPairCandidates = /* @__PURE__ */ __name((candidates, src, srcSide, dst, dstSide) => {\n const yTracks = [...outwardTracksForSide(\"top\"), ...outwardTracksForSide(\"bottom\")];\n for (const srcTrack of outwardTracksForSide(srcSide)) {\n for (const dstTrack of outwardTracksForSide(dstSide)) {\n for (const yTrack of yTracks) {\n pushOrthogonalCandidate(candidates, [\n src,\n { x: srcTrack, y: src.y },\n { x: srcTrack, y: yTrack },\n { x: dstTrack, y: yTrack },\n { x: dstTrack, y: dst.y },\n dst\n ]);\n }\n }\n }\n }, \"addHorizontalPairCandidates\");\n const addVerticalPairCandidates = /* @__PURE__ */ __name((candidates, src, srcSide, dst, dstSide) => {\n const xTracks = [...outwardTracksForSide(\"left\"), ...outwardTracksForSide(\"right\")];\n for (const srcTrack of outwardTracksForSide(srcSide)) {\n for (const dstTrack of outwardTracksForSide(dstSide)) {\n for (const xTrack of xTracks) {\n pushOrthogonalCandidate(candidates, [\n src,\n { x: src.x, y: srcTrack },\n { x: xTrack, y: srcTrack },\n { x: xTrack, y: dstTrack },\n { x: dst.x, y: dstTrack },\n dst\n ]);\n }\n }\n }\n }, \"addVerticalPairCandidates\");\n const dedupeCandidatePaths = /* @__PURE__ */ __name((candidates) => {\n const seen = /* @__PURE__ */ new Set();\n return candidates.map((candidate) => dedupeConsecutivePoints(candidate)).filter((candidate) => {\n const key = candidate.map((point) => `${point.x.toFixed(3)},${point.y.toFixed(3)}`).join(\"|\");\n if (seen.has(key) || candidate.length < 2) {\n return false;\n }\n seen.add(key);\n return true;\n });\n }, \"dedupeCandidatePaths\");\n const buildCandidatesForSides = /* @__PURE__ */ __name((src, srcSide, dst, dstSide) => {\n const candidates = [];\n const base = buildOrthogonalPortPath(src, srcSide, dst, dstSide, ANCHOR, EPS_LOCAL);\n if (base) {\n pushOrthogonalCandidate(candidates, base);\n }\n if (srcSide === dstSide) {\n addSameSideCandidates(candidates, src, srcSide, dst);\n }\n const srcHorizontal = sideIsHorizontal(srcSide);\n const dstHorizontal = sideIsHorizontal(dstSide);\n if (srcHorizontal && !dstHorizontal) {\n addHorizontalToVerticalCandidates(candidates, src, srcSide, dst, dstSide);\n } else if (!srcHorizontal && dstHorizontal) {\n addVerticalToHorizontalCandidates(candidates, src, srcSide, dst, dstSide);\n } else if (srcHorizontal) {\n addHorizontalPairCandidates(candidates, src, srcSide, dst, dstSide);\n } else {\n addVerticalPairCandidates(candidates, src, srcSide, dst, dstSide);\n }\n return dedupeCandidatePaths(candidates);\n }, \"buildCandidatesForSides\");\n const addVerticalDepartureOuterTrackCandidates = /* @__PURE__ */ __name((candidates, first, departure, dstNode) => {\n const externalXTracks = [...outwardTracksForSide(\"left\"), ...outwardTracksForSide(\"right\")];\n const externalYTracks = [...outwardTracksForSide(\"top\"), ...outwardTracksForSide(\"bottom\")];\n for (const side of sides) {\n const dst = portForRectSide(dstNode, side);\n const targetYTracks = side === \"top\" || side === \"bottom\" ? outwardTracksForSide(side) : externalYTracks;\n for (const track of externalXTracks) {\n pushOrthogonalCandidate(candidates, [\n first,\n departure,\n { x: track, y: departure.y },\n { x: track, y: dst.y },\n dst\n ]);\n for (const targetTrack of targetYTracks) {\n pushOrthogonalCandidate(candidates, [\n first,\n departure,\n { x: track, y: departure.y },\n { x: track, y: targetTrack },\n { x: dst.x, y: targetTrack },\n dst\n ]);\n }\n }\n }\n }, \"addVerticalDepartureOuterTrackCandidates\");\n const addHorizontalDepartureOuterTrackCandidates = /* @__PURE__ */ __name((candidates, first, departure, dstNode) => {\n const externalXTracks = [...outwardTracksForSide(\"left\"), ...outwardTracksForSide(\"right\")];\n const externalYTracks = [...outwardTracksForSide(\"top\"), ...outwardTracksForSide(\"bottom\")];\n for (const side of sides) {\n const dst = portForRectSide(dstNode, side);\n const targetXTracks = side === \"left\" || side === \"right\" ? outwardTracksForSide(side) : externalXTracks;\n for (const track of externalYTracks) {\n pushOrthogonalCandidate(candidates, [\n first,\n departure,\n { x: departure.x, y: track },\n { x: dst.x, y: track },\n dst\n ]);\n for (const targetTrack of targetXTracks) {\n pushOrthogonalCandidate(candidates, [\n first,\n departure,\n { x: departure.x, y: track },\n { x: targetTrack, y: track },\n { x: targetTrack, y: dst.y },\n dst\n ]);\n }\n }\n }\n }, \"addHorizontalDepartureOuterTrackCandidates\");\n const terminalPreservingOuterTrackCandidates = /* @__PURE__ */ __name((edge) => {\n const srcId = edge.start;\n const dstId = edge.end;\n const dstNode = dstId ? nodeInfoById.get(dstId) : void 0;\n if (!srcId || !dstNode) {\n return [];\n }\n const points = dedupeConsecutivePoints(edge.points ?? []);\n if (points.length < 4) {\n return [];\n }\n const first = points[0];\n const departure = points[1];\n const candidates = [];\n if (isVerticalSegment(first, departure, EPS_LOCAL)) {\n addVerticalDepartureOuterTrackCandidates(candidates, first, departure, dstNode);\n } else if (isHorizontalSegment(first, departure, EPS_LOCAL)) {\n addHorizontalDepartureOuterTrackCandidates(candidates, first, departure, dstNode);\n }\n return candidates;\n }, \"terminalPreservingOuterTrackCandidates\");\n const candidatePathsFor = /* @__PURE__ */ __name((edge) => {\n const srcId = edge.start;\n const dstId = edge.end;\n const srcNode = srcId ? nodeInfoById.get(srcId) : void 0;\n const dstNode = dstId ? nodeInfoById.get(dstId) : void 0;\n if (!srcNode || !dstNode) {\n return [];\n }\n const candidates = [];\n for (const srcSide of sides) {\n const srcPort = portForRectSide(srcNode, srcSide);\n for (const dstSide of sides) {\n candidates.push(\n ...buildCandidatesForSides(srcPort, srcSide, portForRectSide(dstNode, dstSide), dstSide)\n );\n }\n }\n candidates.push(...terminalPreservingOuterTrackCandidates(edge));\n return candidates;\n }, \"candidatePathsFor\");\n const currentSegmentsByEdge = /* @__PURE__ */ __name(() => new Map(visibleEdges.map((edge) => [edge, segmentsFor(replacementPointsFor(edge))])), \"currentSegmentsByEdge\");\n const sharedTrackConflictsFor = /* @__PURE__ */ __name((edge, candidateSegments, baseSegments) => {\n const conflicts = /* @__PURE__ */ new Set();\n for (const other of visibleEdges) {\n if (other === edge) {\n continue;\n }\n const otherSegments = baseSegments.get(other) ?? segmentsFor(replacementPointsFor(other));\n if (candidateSegments.some(\n (candidateSegment) => otherSegments.some(\n (otherSegment) => sameAxisSegmentOverlapLength(candidateSegment, otherSegment, 0.5) >= MIN_SHARED\n )\n )) {\n conflicts.add(other);\n }\n }\n return conflicts;\n }, \"sharedTrackConflictsFor\");\n const pairCandidatesFor = /* @__PURE__ */ __name((edge, current, baseSegments, crossingCountByEdge) => {\n const seen = /* @__PURE__ */ new Set();\n const candidates = candidatePathsFor(edge).map((candidate) => simplifyPolyline(dedupeConsecutivePoints(candidate))).filter((candidate) => {\n if (pathHitsNode(edge, candidate)) {\n return false;\n }\n const key = candidate.map((point) => `${point.x.toFixed(3)},${point.y.toFixed(3)}`).join(\"|\");\n if (seen.has(key) || candidate.length < 2) {\n return false;\n }\n seen.add(key);\n return true;\n }).map((candidate) => {\n const candidateSegments = segmentsFor(candidate);\n let replacementAffected = 0;\n for (const other of visibleEdges) {\n if (other === edge) {\n continue;\n }\n replacementAffected += crossingCountBetweenSegments(\n candidateSegments,\n baseSegments.get(other) ?? segmentsFor(replacementPointsFor(other))\n );\n }\n return {\n candidate,\n candidateSegments,\n crossings: current.count - (crossingCountByEdge.get(edge) ?? 0) + replacementAffected,\n bends: countOrthogonalBends(candidate, EPS_LOCAL),\n totalBends: countOrthogonalBends(candidate),\n length: pathLength(candidate)\n };\n }).filter(({ crossings }) => crossings <= current.count).sort((a, b) => a.crossings - b.crossings || a.bends - b.bends || a.length - b.length);\n return candidates.slice(0, MAX_PAIR_CANDIDATES_PER_EDGE).map((candidate) => {\n return {\n path: candidate.candidate,\n segments: candidate.candidateSegments,\n sharedTrackConflicts: sharedTrackConflictsFor(\n edge,\n candidate.candidateSegments,\n baseSegments\n ),\n totalBends: candidate.totalBends,\n length: candidate.length\n };\n });\n }, \"pairCandidatesFor\");\n const pairCrossingCount = /* @__PURE__ */ __name((current, firstEdge, firstCandidate, secondEdge, secondCandidate, baseSegments) => {\n let currentAffected = 0;\n for (const pair of current.pairs) {\n if (pair.first === firstEdge || pair.second === firstEdge || pair.first === secondEdge || pair.second === secondEdge) {\n currentAffected += pair.count;\n }\n }\n let replacementAffected = crossingCountBetweenSegments(\n firstCandidate.segments,\n secondCandidate.segments\n );\n for (const other of visibleEdges) {\n if (other === firstEdge || other === secondEdge) {\n continue;\n }\n const otherSegments = baseSegments.get(other) ?? segmentsFor(replacementPointsFor(other));\n replacementAffected += crossingCountBetweenSegments(firstCandidate.segments, otherSegments) + crossingCountBetweenSegments(secondCandidate.segments, otherSegments);\n }\n return current.count - currentAffected + replacementAffected;\n }, \"pairCrossingCount\");\n const conflictsOnlyWith = /* @__PURE__ */ __name((candidate, edge) => {\n for (const conflict of candidate.sharedTrackConflicts) {\n if (conflict !== edge) {\n return false;\n }\n }\n return true;\n }, \"conflictsOnlyWith\");\n const candidatesShareTrack = /* @__PURE__ */ __name((firstCandidate, secondCandidate) => firstCandidate.segments.some(\n (firstSegment) => secondCandidate.segments.some(\n (secondSegment) => sameAxisSegmentOverlapLength(firstSegment, secondSegment, 0.5) >= MIN_SHARED\n )\n ), \"candidatesShareTrack\");\n const pairCandidatesAreCompatible = /* @__PURE__ */ __name((first, firstCandidate, second, secondCandidate) => conflictsOnlyWith(firstCandidate, second.edge) && conflictsOnlyWith(secondCandidate, first.edge) && !candidatesShareTrack(firstCandidate, secondCandidate), \"pairCandidatesAreCompatible\");\n const scorePairReplacement = /* @__PURE__ */ __name((context, first, firstCandidate, second, secondCandidate) => {\n const crossings = pairCrossingCount(\n context.current,\n first.edge,\n firstCandidate,\n second.edge,\n secondCandidate,\n context.baseSegments\n );\n if (crossings >= context.current.count) {\n return void 0;\n }\n return {\n replacements: /* @__PURE__ */ new Map([\n [first.edge, firstCandidate.path],\n [second.edge, secondCandidate.path]\n ]),\n crossings,\n bends: context.currentBends - (context.baseBendsByEdge.get(first.edge) ?? 0) - (context.baseBendsByEdge.get(second.edge) ?? 0) + firstCandidate.totalBends + secondCandidate.totalBends,\n length: context.currentLength - (context.baseLengthByEdge.get(first.edge) ?? 0) - (context.baseLengthByEdge.get(second.edge) ?? 0) + firstCandidate.length + secondCandidate.length\n };\n }, \"scorePairReplacement\");\n const pairScoreIsBetter = /* @__PURE__ */ __name((candidate, best) => candidate.crossings < best.crossings || candidate.crossings === best.crossings && (candidate.bends < best.bends || candidate.bends === best.bends && candidate.length < best.length), \"pairScoreIsBetter\");\n const bestScoreForOptionPair = /* @__PURE__ */ __name((context, first, second, best) => {\n let pairBest = best;\n for (const firstCandidate of first.candidates) {\n for (const secondCandidate of second.candidates) {\n if (!pairCandidatesAreCompatible(first, firstCandidate, second, secondCandidate)) {\n continue;\n }\n const score = scorePairReplacement(context, first, firstCandidate, second, secondCandidate);\n if (score && pairScoreIsBetter(score, pairBest)) {\n pairBest = score;\n }\n }\n }\n return pairBest;\n }, \"bestScoreForOptionPair\");\n const bestPairedReplacement = /* @__PURE__ */ __name((current) => {\n const currentBends = totalBends();\n const currentLength = totalLength();\n const baseSegments = currentSegmentsByEdge();\n const crossingCountByEdge = currentCrossingsByEdge(current);\n const baseBendsByEdge = new Map(\n visibleEdges.map((edge) => [edge, countOrthogonalBends(replacementPointsFor(edge))])\n );\n const baseLengthByEdge = new Map(\n visibleEdges.map((edge) => [edge, pathLength(replacementPointsFor(edge))])\n );\n const optionsByEdge = /* @__PURE__ */ new Map();\n const groups = pairSearchGroups(current);\n for (const group of groups) {\n for (const edge of group) {\n if (optionsByEdge.has(edge)) {\n continue;\n }\n const candidates = pairCandidatesFor(edge, current, baseSegments, crossingCountByEdge);\n if (candidates.length > 0) {\n optionsByEdge.set(edge, { edge, candidates });\n }\n }\n }\n let best = {\n replacements: /* @__PURE__ */ new Map(),\n crossings: current.count,\n bends: currentBends,\n length: currentLength\n };\n const scoringContext = {\n current,\n currentBends,\n currentLength,\n baseBendsByEdge,\n baseLengthByEdge,\n baseSegments\n };\n for (const group of groups) {\n const crossingEdgeSet = new Set(group.filter((edge) => current.edgeSet.has(edge)));\n const options = group.map((edge) => optionsByEdge.get(edge)).filter((option) => Boolean(option));\n for (let i = 0; i < options.length; i++) {\n const first = options[i];\n for (let j = i + 1; j < options.length; j++) {\n const second = options[j];\n if (!crossingEdgeSet.has(first.edge) && !crossingEdgeSet.has(second.edge)) {\n continue;\n }\n best = bestScoreForOptionPair(scoringContext, first, second, best);\n }\n }\n }\n return best.replacements.size > 0 ? best.replacements : void 0;\n }, \"bestPairedReplacement\");\n for (let iteration = 0; iteration < MAX_ITERATIONS; iteration++) {\n const current = crossingSnapshot();\n const currentCrossings = current.count;\n if (currentCrossings === 0) {\n return;\n }\n let bestEdge;\n let bestPath;\n let bestCrossings = currentCrossings;\n let bestBends = Number.POSITIVE_INFINITY;\n for (const edge of current.edges) {\n const currentEdgeBends = countOrthogonalBends(replacementPointsFor(edge), EPS_LOCAL);\n for (const candidate of candidatePathsFor(edge)) {\n const candidateHitsNode = pathHitsNode(edge, candidate);\n const candidateHasSegmentConflict = !candidateHitsNode && pathHasSegmentConflict(edge, candidate);\n const candidateCrossings = crossingCountWithSingleReplacement(current, edge, candidate);\n const candidateBends = countOrthogonalBends(candidate, EPS_LOCAL);\n if (candidateHitsNode || candidateHasSegmentConflict) {\n continue;\n }\n const improvesCurrentEdge = candidateCrossings < currentCrossings || candidateCrossings === currentCrossings && candidateBends < currentEdgeBends;\n if (!improvesCurrentEdge) {\n continue;\n }\n if (candidateCrossings > bestCrossings || candidateCrossings === bestCrossings && candidateBends >= bestBends) {\n continue;\n }\n bestEdge = edge;\n bestPath = candidate;\n bestCrossings = candidateCrossings;\n bestBends = candidateBends;\n }\n }\n if (bestEdge && bestPath) {\n bestEdge.points = bestPath;\n continue;\n }\n const pairedReplacement = bestPairedReplacement(current);\n if (!pairedReplacement) {\n return;\n }\n for (const [edge, points] of pairedReplacement) {\n edge.points = points;\n }\n }\n}\n__name(resolveRenderedOrthogonalCrossings, \"resolveRenderedOrthogonalCrossings\");\n\n// src/rendering-util/layout-algorithms/swimlanes/direction/detourSimplification.ts\nvar EPS4 = 1e-3;\nvar MIN_SHARED2 = 8;\nfunction simplifyDetouredEdges(edges, nodes) {\n const { nodeInfoById, realNodeRects } = collectRealNodeBounds(nodes);\n const sides = [\"top\", \"bottom\", \"left\", \"right\"];\n const ANCHOR = 20;\n const outsideTracks = {\n top: Math.min(...realNodeRects.map((node) => node.rect.top)) - ANCHOR,\n bottom: Math.max(...realNodeRects.map((node) => node.rect.bottom)) + ANCHOR,\n left: Math.min(...realNodeRects.map((node) => node.rect.left)) - ANCHOR,\n right: Math.max(...realNodeRects.map((node) => node.rect.right)) + ANCHOR\n };\n const buildOrthogonalPathCandidates = /* @__PURE__ */ __name((src, srcSide, dst, dstSide) => {\n const paths = [];\n const base = buildOrthogonalPortPath(src, srcSide, dst, dstSide, ANCHOR, EPS4);\n if (base) {\n paths.push(base);\n }\n if (srcSide === dstSide) {\n paths.push(buildSameSideTrackPath(src, srcSide, dst, outsideTracks[srcSide]));\n }\n return paths;\n }, \"buildOrthogonalPathCandidates\");\n const pathHitsNode = /* @__PURE__ */ __name((pts, excludeIds) => {\n for (let i = 0; i < pts.length - 1; i++) {\n const a = pts[i];\n const b = pts[i + 1];\n if (segmentHitsAnyRect(a, b, realNodeRects, excludeIds, 1)) {\n return true;\n }\n }\n return false;\n }, \"pathHitsNode\");\n const pathConflictCount = /* @__PURE__ */ __name((path, currentEdge, includeIncidentEdges = false) => {\n let conflicts = 0;\n const pathSegments = orthogonalSegmentsForPoints(path, EPS4);\n const currentStart = currentEdge.start;\n const currentEnd = currentEdge.end;\n for (const other of edges) {\n if (other === currentEdge || other.isLayoutOnly) {\n continue;\n }\n const otherStart = other.start;\n const otherEnd = other.end;\n if (!includeIncidentEdges && currentStart && currentEnd && (otherStart === currentStart || otherStart === currentEnd || otherEnd === currentStart || otherEnd === currentEnd)) {\n continue;\n }\n const otherPts = other.points;\n if (!otherPts || otherPts.length < 2) {\n continue;\n }\n for (const pathSegment of pathSegments) {\n for (const otherSegment of orthogonalSegmentsForPoints(otherPts, EPS4)) {\n if (orthogonalSegmentsCross(\n pathSegment.a,\n pathSegment.b,\n otherSegment.a,\n otherSegment.b,\n EPS4,\n EPS4\n )) {\n conflicts++;\n continue;\n }\n if (sameAxisSegmentOverlapLength(pathSegment, otherSegment, EPS4) >= MIN_SHARED2) {\n conflicts++;\n }\n }\n }\n }\n return conflicts;\n }, \"pathConflictCount\");\n const BEND_THRESHOLD = 4;\n const nearestSideOfRect = /* @__PURE__ */ __name((pt, info) => {\n const dTop = Math.abs(pt.y - info.rect.top);\n const dBottom = Math.abs(pt.y - info.rect.bottom);\n const dLeft = Math.abs(pt.x - info.rect.left);\n const dRight = Math.abs(pt.x - info.rect.right);\n let best = \"top\";\n let bestDist = dTop;\n if (dBottom < bestDist) {\n best = \"bottom\";\n bestDist = dBottom;\n }\n if (dLeft < bestDist) {\n best = \"left\";\n bestDist = dLeft;\n }\n if (dRight < bestDist) {\n best = \"right\";\n bestDist = dRight;\n }\n return best;\n }, \"nearestSideOfRect\");\n const faceClaims = /* @__PURE__ */ new Map();\n const addFaceClaim = /* @__PURE__ */ __name((nodeId, side, edgeId) => {\n const claims = faceClaims.get(nodeId) ?? [];\n claims.push({ side, edgeId });\n faceClaims.set(nodeId, claims);\n }, \"addFaceClaim\");\n for (const e of edges) {\n if (e.isLayoutOnly) {\n continue;\n }\n const pts = e.points ?? [];\n if (pts.length < 1) {\n continue;\n }\n const eId = e.id ?? \"\";\n const startId = e.start;\n const endId = e.end;\n if (startId) {\n const info = nodeInfoById.get(startId);\n if (info) {\n addFaceClaim(startId, nearestSideOfRect(pts[0], info), eId);\n }\n }\n if (endId) {\n const info = nodeInfoById.get(endId);\n if (info) {\n addFaceClaim(endId, nearestSideOfRect(pts[pts.length - 1], info), eId);\n }\n }\n }\n const faceIsClaimed = /* @__PURE__ */ __name((nodeId, side, ignoreEdgeId) => {\n return faceClaims.get(nodeId)?.some((c) => c.edgeId !== ignoreEdgeId && c.side === side) ?? false;\n }, \"faceIsClaimed\");\n for (const edge of edges) {\n if (edge.isLayoutOnly) {\n continue;\n }\n const pts = edge.points;\n if (!pts || pts.length < 2) {\n continue;\n }\n const currentBends = countOrthogonalBends(pts, EPS4);\n if (currentBends < BEND_THRESHOLD) {\n continue;\n }\n const srcId = edge.start;\n const dstId = edge.end;\n if (!srcId || !dstId) {\n continue;\n }\n const srcInfo = nodeInfoById.get(srcId);\n const dstInfo = nodeInfoById.get(dstId);\n if (!srcInfo || !dstInfo) {\n continue;\n }\n const edgeId = edge.id ?? \"\";\n const currentCrossingConflicts = pathConflictCount(pts, edge, true);\n const currentNonIncidentConflicts = pathConflictCount(pts, edge);\n let bestPath;\n let bestCrossingConflicts = currentCrossingConflicts;\n let bestBends = currentBends;\n for (const srcSide of sides) {\n if (faceIsClaimed(srcId, srcSide, edgeId)) {\n continue;\n }\n const srcPort = portForRectSide(srcInfo, srcSide);\n for (const dstSide of sides) {\n if (faceIsClaimed(dstId, dstSide, edgeId)) {\n continue;\n }\n const dstPort = portForRectSide(dstInfo, dstSide);\n for (const path of buildOrthogonalPathCandidates(srcPort, srcSide, dstPort, dstSide)) {\n if (pathHitsNode(path, [srcId, dstId])) {\n continue;\n }\n const pathBends = countOrthogonalBends(path, EPS4);\n if (currentCrossingConflicts > 0) {\n const pathCrossingConflicts = pathConflictCount(path, edge, true);\n if (pathCrossingConflicts > bestCrossingConflicts || pathCrossingConflicts === bestCrossingConflicts && pathBends >= bestBends) {\n continue;\n }\n bestCrossingConflicts = pathCrossingConflicts;\n bestBends = pathBends;\n bestPath = path;\n continue;\n }\n if (pathConflictCount(path, edge) > currentNonIncidentConflicts) {\n continue;\n }\n if (pathBends < bestBends) {\n bestBends = pathBends;\n bestPath = path;\n }\n }\n }\n }\n if (bestPath) {\n edge.points = bestPath;\n const refreshSrc = faceClaims.get(srcId);\n if (refreshSrc) {\n faceClaims.set(\n srcId,\n refreshSrc.filter((c) => c.edgeId !== edgeId)\n );\n }\n const refreshDst = faceClaims.get(dstId);\n if (refreshDst) {\n faceClaims.set(\n dstId,\n refreshDst.filter((c) => c.edgeId !== edgeId)\n );\n }\n addFaceClaim(srcId, nearestSideOfRect(bestPath[0], srcInfo), edgeId);\n addFaceClaim(dstId, nearestSideOfRect(bestPath[bestPath.length - 1], dstInfo), edgeId);\n }\n }\n}\n__name(simplifyDetouredEdges, \"simplifyDetouredEdges\");\n\n// src/rendering-util/layout-algorithms/swimlanes/direction/labelAnchoring.ts\nvar EPS5 = 1e-3;\nvar MARKER_CLEARANCE_LENGTH = 10;\nvar MARKER_CLEARANCE_HALF_WIDTH = 7;\nfunction markerClearanceRectFor(pts, atStart) {\n const terminalIndex = atStart ? 0 : pts.length - 1;\n const step = atStart ? 1 : -1;\n const tip = pts[terminalIndex];\n const inner = pts[terminalIndex + step];\n if (!tip || !inner) {\n return void 0;\n }\n const dx = inner.x - tip.x;\n const dy = inner.y - tip.y;\n const len = Math.abs(dx) + Math.abs(dy);\n if (len < EPS5) {\n return void 0;\n }\n if (Math.abs(dy) <= EPS5) {\n const x2 = tip.x + Math.sign(dx) * MARKER_CLEARANCE_LENGTH;\n return {\n left: Math.min(tip.x, x2),\n right: Math.max(tip.x, x2),\n top: tip.y - MARKER_CLEARANCE_HALF_WIDTH,\n bottom: tip.y + MARKER_CLEARANCE_HALF_WIDTH\n };\n }\n if (Math.abs(dx) <= EPS5) {\n const y2 = tip.y + Math.sign(dy) * MARKER_CLEARANCE_LENGTH;\n return {\n left: tip.x - MARKER_CLEARANCE_HALF_WIDTH,\n right: tip.x + MARKER_CLEARANCE_HALF_WIDTH,\n top: Math.min(tip.y, y2),\n bottom: Math.max(tip.y, y2)\n };\n }\n return {\n left: Math.min(tip.x, inner.x),\n right: Math.max(tip.x, inner.x),\n top: Math.min(tip.y, inner.y),\n bottom: Math.max(tip.y, inner.y)\n };\n}\n__name(markerClearanceRectFor, \"markerClearanceRectFor\");\nfunction normalizeRect(rect) {\n return {\n left: Math.min(rect.left, rect.right),\n right: Math.max(rect.left, rect.right),\n top: Math.min(rect.top, rect.bottom),\n bottom: Math.max(rect.top, rect.bottom)\n };\n}\n__name(normalizeRect, \"normalizeRect\");\nfunction labelOverlapsOwnMarker(rect, pts) {\n const visiblePts = dedupeConsecutivePoints(pts);\n const startMarker = markerClearanceRectFor(visiblePts, true);\n const endMarker = markerClearanceRectFor(visiblePts, false);\n return [startMarker, endMarker].some(\n (marker) => marker && rectsOverlap(rect, normalizeRect(marker))\n );\n}\n__name(labelOverlapsOwnMarker, \"labelOverlapsOwnMarker\");\nfunction anchorLabelsToPolyline(edges, nodeByIdMap) {\n const allEdgeSegments = [];\n for (const other of edges) {\n if (other.isLayoutOnly) {\n continue;\n }\n const pts = other.points;\n if (!pts || pts.length < 2) {\n continue;\n }\n for (let i = 0; i < pts.length - 1; i++) {\n allEdgeSegments.push({ edgeId: other.id, p1: pts[i], p2: pts[i + 1] });\n }\n }\n const foreignNodeRects = [];\n const laneGroups = [];\n for (const n of nodeByIdMap.values()) {\n const isGroup = n.isGroup;\n const parentId = n.parentId;\n if (isGroup && !parentId) {\n const rect2 = rectOfNodeBounds(n);\n if (rect2) {\n laneGroups.push({\n id: n.id,\n rect: rect2\n });\n }\n continue;\n }\n if (isGroup) {\n continue;\n }\n if (n.isEdgeLabel) {\n continue;\n }\n const rect = rectOfNodeBounds(n);\n if (!rect) {\n continue;\n }\n foreignNodeRects.push({\n nodeId: n.id,\n rect\n });\n }\n const LABEL_PLACEMENT_BUFFER = 3;\n const LABEL_LANE_MARGIN = 1;\n const LABEL_ENDPOINT_CLEARANCE = 12;\n const labelOverlapsForeignNode = /* @__PURE__ */ __name((labelId, rect) => {\n const buffered = inflateRect(rect, LABEL_PLACEMENT_BUFFER);\n for (const { nodeId, rect: nr } of foreignNodeRects) {\n if (nodeId === labelId) {\n continue;\n }\n if (rectsOverlap(buffered, nr)) {\n return true;\n }\n }\n return false;\n }, \"labelOverlapsForeignNode\");\n const labelOverlapsForeignEdge = /* @__PURE__ */ __name((edgeId, rect) => {\n const buffered = inflateRect(rect, LABEL_PLACEMENT_BUFFER);\n for (const s of allEdgeSegments) {\n if (s.edgeId === edgeId) {\n continue;\n }\n if (segmentBoundsOverlapRect(s.p1, s.p2, buffered)) {\n return true;\n }\n }\n return false;\n }, \"labelOverlapsForeignEdge\");\n const labelOverlapsAnything = /* @__PURE__ */ __name((labelId, edgeId, rect) => labelOverlapsForeignNode(labelId, rect) || labelOverlapsForeignEdge(edgeId, rect), \"labelOverlapsAnything\");\n const placedLabelRects = [];\n const findContainingLane = /* @__PURE__ */ __name((rect) => {\n for (const { id, rect: laneRect } of laneGroups) {\n if (rectContainsRect(laneRect, rect)) {\n return id;\n }\n }\n return void 0;\n }, \"findContainingLane\");\n const overlapsPlacedLabel = /* @__PURE__ */ __name((labelId, rect) => placedLabelRects.some(\n (placed) => placed.labelId !== labelId && rectsOverlap(rect, placed.rect)\n ), \"overlapsPlacedLabel\");\n for (const edge of edges) {\n if (edge.isLayoutOnly) {\n continue;\n }\n const labelId = edge.labelNodeId;\n if (!labelId) {\n continue;\n }\n const labelNode = nodeByIdMap.get(labelId);\n if (!labelNode) {\n continue;\n }\n const pts = edge.points;\n if (!pts || pts.length < 2) {\n continue;\n }\n const lw = labelNode.width ?? 0;\n const lh = labelNode.height ?? 0;\n if (lw <= 0 || lh <= 0) {\n continue;\n }\n const segments = [];\n for (let i = 0; i < pts.length - 1; i++) {\n const a = pts[i];\n const b = pts[i + 1];\n const dx = Math.abs(a.x - b.x);\n const dy = Math.abs(a.y - b.y);\n if (dx < EPS5 && dy < EPS5) {\n continue;\n }\n if (dx >= EPS5 && dy >= EPS5) {\n continue;\n }\n segments.push({\n idx: i,\n length: dx + dy,\n orientation: dx >= EPS5 ? \"horizontal\" : \"vertical\",\n midX: (a.x + b.x) / 2,\n midY: (a.y + b.y) / 2\n });\n }\n if (segments.length === 0) {\n continue;\n }\n const middleSegments = segments.length >= 3 ? segments.filter((s) => s.idx > 0 && s.idx < segments.length - 1) : segments;\n const poolBase = middleSegments.length > 0 ? middleSegments : segments;\n const labelLongAxis = lw >= lh ? \"horizontal\" : \"vertical\";\n const rankSegments = /* @__PURE__ */ __name((pool) => {\n return [...pool].sort((a, b) => {\n const aLongAxis = a.orientation === labelLongAxis;\n const bLongAxis = b.orientation === labelLongAxis;\n if (aLongAxis !== bLongAxis) {\n return aLongAxis ? -1 : 1;\n }\n const aFits = a.length >= (a.orientation === \"horizontal\" ? lw : lh) + 2;\n const bFits = b.length >= (b.orientation === \"horizontal\" ? lw : lh) + 2;\n if (aFits !== bFits) {\n return aFits ? -1 : 1;\n }\n return b.length - a.length;\n });\n }, \"rankSegments\");\n const firstVisibleSegment = segments[0];\n const lastVisibleSegment = segments[segments.length - 1];\n const ALONG_SEGMENT_TS = [0.5, 0.25, 0.75, 0.05, 0.95, 0.15, 0.85, 0.1, 0.9];\n const anchorAtT = /* @__PURE__ */ __name((seg, t) => {\n const a = pts[seg.idx];\n const b = pts[seg.idx + 1];\n return {\n midX: a.x + (b.x - a.x) * t,\n midY: a.y + (b.y - a.y) * t\n };\n }, \"anchorAtT\");\n const clamp = /* @__PURE__ */ __name((value, min, max) => Math.min(max, Math.max(min, value)), \"clamp\");\n const pointInsideRectInclusive = /* @__PURE__ */ __name((point, rect) => point.midX >= rect.left - EPS5 && point.midX <= rect.right + EPS5 && point.midY >= rect.top - EPS5 && point.midY <= rect.bottom + EPS5, \"pointInsideRectInclusive\");\n const placementForAnchor = /* @__PURE__ */ __name((anchor) => {\n const centeredRect = rectFromCenterSize(anchor.midX, anchor.midY, lw, lh);\n const centeredLane = findContainingLane(centeredRect);\n if (centeredLane) {\n return { laneId: centeredLane, anchor, rect: centeredRect };\n }\n const containingLane = laneGroups.find(({ rect }) => pointInsideRectInclusive(anchor, rect));\n if (!containingLane) {\n return void 0;\n }\n const minX = containingLane.rect.left + lw / 2 + LABEL_LANE_MARGIN;\n const maxX = containingLane.rect.right - lw / 2 - LABEL_LANE_MARGIN;\n const minY = containingLane.rect.top + lh / 2 + LABEL_LANE_MARGIN;\n const maxY = containingLane.rect.bottom - lh / 2 - LABEL_LANE_MARGIN;\n if (minX > maxX || minY > maxY) {\n return void 0;\n }\n const clampedAnchor = {\n midX: clamp(anchor.midX, minX, maxX),\n midY: clamp(anchor.midY, minY, maxY)\n };\n const clampedRect = rectFromCenterSize(clampedAnchor.midX, clampedAnchor.midY, lw, lh);\n return pointInsideRectInclusive(anchor, clampedRect) ? { laneId: containingLane.id, anchor: clampedAnchor, rect: clampedRect } : void 0;\n }, \"placementForAnchor\");\n const distanceAlongSegment = /* @__PURE__ */ __name((seg, anchor, endpoint) => seg.orientation === \"horizontal\" ? Math.abs(anchor.midX - endpoint.x) : Math.abs(anchor.midY - endpoint.y), \"distanceAlongSegment\");\n const labelClearsTerminalEndpoints = /* @__PURE__ */ __name((seg, anchor) => {\n const labelHalfExtent = seg.orientation === \"horizontal\" ? lw / 2 : lh / 2;\n const requiredDistance = labelHalfExtent + LABEL_ENDPOINT_CLEARANCE;\n if (seg === firstVisibleSegment) {\n const start = pts[seg.idx];\n if (distanceAlongSegment(seg, anchor, start) + EPS5 < requiredDistance) {\n return false;\n }\n }\n if (seg === lastVisibleSegment) {\n const end = pts[seg.idx + 1];\n if (distanceAlongSegment(seg, anchor, end) + EPS5 < requiredDistance) {\n return false;\n }\n }\n return true;\n }, \"labelClearsTerminalEndpoints\");\n const tryPool = /* @__PURE__ */ __name((pool) => {\n const rankedPool = rankSegments(pool);\n for (const seg of rankedPool) {\n for (const t of ALONG_SEGMENT_TS) {\n const anchor = anchorAtT(seg, t);\n if (!labelClearsTerminalEndpoints(seg, anchor)) {\n continue;\n }\n const placement = placementForAnchor(anchor);\n if (!placement) {\n continue;\n }\n if (labelOverlapsOwnMarker(placement.rect, pts)) {\n continue;\n }\n if (overlapsPlacedLabel(labelId, placement.rect)) {\n continue;\n }\n if (!labelOverlapsAnything(labelId, edge.id, placement.rect)) {\n return { laneId: placement.laneId, anchor: placement.anchor };\n }\n }\n }\n return void 0;\n }, \"tryPool\");\n const findLaneContainingFallback = /* @__PURE__ */ __name((pool, requireEndpointClearance, allowForeignEdgeOverlap = false) => {\n const rankedPool = rankSegments(pool);\n for (const seg of rankedPool) {\n const anchor = { midX: seg.midX, midY: seg.midY };\n if (requireEndpointClearance && !labelClearsTerminalEndpoints(seg, anchor)) {\n continue;\n }\n const placement = placementForAnchor(anchor);\n if (placement && !labelOverlapsOwnMarker(placement.rect, pts) && !overlapsPlacedLabel(labelId, placement.rect) && !labelOverlapsForeignNode(labelId, placement.rect) && (allowForeignEdgeOverlap || !labelOverlapsForeignEdge(edge.id, placement.rect))) {\n return { laneId: placement.laneId, anchor: placement.anchor };\n }\n }\n return void 0;\n }, \"findLaneContainingFallback\");\n const chosen = tryPool(poolBase) ?? (poolBase.length < segments.length ? tryPool(segments) : void 0) ?? findLaneContainingFallback(segments, true) ?? findLaneContainingFallback(segments, false) ?? findLaneContainingFallback(segments, false, true);\n if (chosen) {\n labelNode.x = chosen.anchor.midX;\n labelNode.y = chosen.anchor.midY;\n labelNode.parentId = chosen.laneId;\n const chosenRect = rectFromCenterSize(chosen.anchor.midX, chosen.anchor.midY, lw, lh);\n const priorIdx = placedLabelRects.findIndex((placed) => placed.labelId === labelId);\n if (priorIdx >= 0) {\n placedLabelRects[priorIdx] = { labelId, rect: chosenRect };\n } else {\n placedLabelRects.push({ labelId, rect: chosenRect });\n }\n }\n }\n}\n__name(anchorLabelsToPolyline, \"anchorLabelsToPolyline\");\n\n// src/rendering-util/layout-algorithms/swimlanes/direction/siblingSharedFaceRouting.ts\nvar EPS6 = 1e-6;\nvar MIN_PORT_SPACING2 = 8;\nvar PORT_SHIFT2 = MIN_PORT_SPACING2 / 2;\nvar LABEL_CLEARANCE_BUFFER = 3;\nfunction pairKey(a, b) {\n return a < b ? `${a}::${b}` : `${b}::${a}`;\n}\n__name(pairKey, \"pairKey\");\nfunction straightenCollinearSiblingDetours(edges, nodes) {\n const { nodeInfoById, realNodeRects } = collectRealNodeBounds(nodes);\n const labelDimById = /* @__PURE__ */ new Map();\n for (const n of nodes) {\n const id = n.id;\n if (n.isGroup) {\n continue;\n }\n if (n.isEdgeLabel) {\n labelDimById.set(id, {\n w: n.width ?? 0,\n h: n.height ?? 0\n });\n continue;\n }\n }\n const labelClearanceFor = /* @__PURE__ */ __name((thisEdge, thisSrcId, thisDstId, axis) => {\n const targetPair = pairKey(thisSrcId, thisDstId);\n let maxHalf = 0;\n const consider = /* @__PURE__ */ __name((labelId) => {\n if (!labelId) {\n return;\n }\n const dim = labelDimById.get(labelId);\n if (!dim) {\n return;\n }\n const half = axis === \"x\" ? dim.w / 2 : dim.h / 2;\n if (half > maxHalf) {\n maxHalf = half;\n }\n }, \"consider\");\n consider(thisEdge.labelNodeId);\n for (const other of edges) {\n if (other === thisEdge) {\n continue;\n }\n if (other.isLayoutOnly) {\n continue;\n }\n const oSrc = other.start;\n const oDst = other.end;\n if (!oSrc || !oDst) {\n continue;\n }\n if (pairKey(oSrc, oDst) !== targetPair) {\n continue;\n }\n consider(other.labelNodeId);\n }\n return maxHalf > 0 ? maxHalf + LABEL_CLEARANCE_BUFFER : 0;\n }, \"labelClearanceFor\");\n for (const edge of edges) {\n if (edge.isLayoutOnly) {\n continue;\n }\n const pts = edge.points;\n if (!classifyThreeSegmentRoute(pts, EPS6)) {\n continue;\n }\n const nodePair = getNodePairGeometry(edge, nodeInfoById, EPS6);\n if (!nodePair) {\n continue;\n }\n const { srcId, dstId, srcInfo, dstInfo, collinearX, collinearY } = nodePair;\n if (collinearX === collinearY) {\n continue;\n }\n let targetSrc;\n let targetDst;\n if (collinearX) {\n const dstBelow = dstInfo.cy > srcInfo.cy;\n targetSrc = { x: srcInfo.cx, y: dstBelow ? srcInfo.rect.bottom : srcInfo.rect.top };\n targetDst = { x: dstInfo.cx, y: dstBelow ? dstInfo.rect.top : dstInfo.rect.bottom };\n } else {\n const dstEast = dstInfo.cx > srcInfo.cx;\n targetSrc = { x: dstEast ? srcInfo.rect.right : srcInfo.rect.left, y: srcInfo.cy };\n targetDst = { x: dstEast ? dstInfo.rect.left : dstInfo.rect.right, y: dstInfo.cy };\n }\n if (segmentHitsAnyRect(targetSrc, targetDst, realNodeRects, [srcId, dstId], 1)) {\n continue;\n }\n const shiftAxis = collinearX ? \"x\" : \"y\";\n const labelShift = labelClearanceFor(edge, srcId, dstId, shiftAxis);\n const effectiveShift = labelShift > PORT_SHIFT2 ? labelShift : PORT_SHIFT2;\n const deltas = [0, effectiveShift, -effectiveShift];\n for (const delta of deltas) {\n const shiftedSrc = { ...targetSrc };\n const shiftedDst = { ...targetDst };\n if (collinearX) {\n shiftedSrc.x += delta;\n shiftedDst.x += delta;\n if (shiftedSrc.x <= srcInfo.rect.left || shiftedSrc.x >= srcInfo.rect.right) {\n continue;\n }\n if (shiftedDst.x <= dstInfo.rect.left || shiftedDst.x >= dstInfo.rect.right) {\n continue;\n }\n } else {\n shiftedSrc.y += delta;\n shiftedDst.y += delta;\n if (shiftedSrc.y <= srcInfo.rect.top || shiftedSrc.y >= srcInfo.rect.bottom) {\n continue;\n }\n if (shiftedDst.y <= dstInfo.rect.top || shiftedDst.y >= dstInfo.rect.bottom) {\n continue;\n }\n }\n if (segmentHitsAnyRect(shiftedSrc, shiftedDst, realNodeRects, [srcId, dstId], 1)) {\n continue;\n }\n if (segmentConflictsWithAnyEdge(shiftedSrc, shiftedDst, edges, edge, { epsilon: EPS6 })) {\n continue;\n }\n edge.points = [shiftedSrc, shiftedDst];\n break;\n }\n }\n}\n__name(straightenCollinearSiblingDetours, \"straightenCollinearSiblingDetours\");\n\n// src/rendering-util/layout-algorithms/swimlanes/direction/sharedTrackNudging.ts\nfunction nudgeSharedInteriorSubpaths(edges, nodeByIdMap) {\n const EPS_LOCAL2 = 1e-3;\n const MIN_SHARED3 = 8;\n const TRACK_SHIFT = 7;\n const MIN_TRACK_GAP = TRACK_SHIFT;\n const SOURCE_DETOUR_STUB = 20;\n const BUFFER = 2;\n const MAX_ITERATIONS = 12;\n const { realNodeRects, labelNodeRects: labelRects } = collectNodeRectEntries(\n nodeByIdMap.values()\n );\n const segmentsFor2 = /* @__PURE__ */ __name((edge, points) => {\n return orthogonalSegmentsForPoints(points, EPS_LOCAL2).map((segment) => ({\n ...segment,\n edge,\n interior: segment.index >= 1 && segment.index <= points.length - 3\n }));\n }, \"segmentsFor\");\n const allSegments = /* @__PURE__ */ __name(() => {\n const result = [];\n for (const edge of edges) {\n if (edge.isLayoutOnly) {\n continue;\n }\n const points = edge.points;\n if (!points || points.length < 2) {\n continue;\n }\n result.push(...segmentsFor2(edge, dedupeConsecutivePoints(points)));\n }\n return result;\n }, \"allSegments\");\n const hasCrowdedParallelTrack = /* @__PURE__ */ __name((a, b) => {\n if (a.horizontal && b.horizontal) {\n return overlapLength(a.a.x, a.b.x, b.a.x, b.b.x) >= MIN_SHARED3 && Math.abs(a.a.y - b.a.y) < MIN_TRACK_GAP;\n }\n if (a.vertical && b.vertical) {\n return overlapLength(a.a.y, a.b.y, b.a.y, b.b.y) >= MIN_SHARED3 && Math.abs(a.a.x - b.a.x) < MIN_TRACK_GAP;\n }\n return false;\n }, \"hasCrowdedParallelTrack\");\n const candidateIsSafe = /* @__PURE__ */ __name((edge, candidate) => {\n const sourceId = edge.start;\n const targetId = edge.end;\n const candidateSegments = segmentsFor2(edge, candidate);\n if (candidateSegments.length !== candidate.length - 1) {\n return false;\n }\n const endpointIds = [sourceId, targetId].filter((id) => Boolean(id));\n const ownLabelIds = edge.labelNodeId ? [edge.labelNodeId] : [];\n for (const segment of candidateSegments) {\n if (segmentHitsAnyRect(segment.a, segment.b, realNodeRects, endpointIds, -BUFFER)) {\n return false;\n }\n if (segmentHitsAnyRect(segment.a, segment.b, labelRects, ownLabelIds, -BUFFER)) {\n return false;\n }\n }\n for (const other of edges) {\n if (other === edge || other.isLayoutOnly) {\n continue;\n }\n const otherPoints = other.points;\n if (!otherPoints || otherPoints.length < 2) {\n continue;\n }\n for (const candidateSegment of candidateSegments) {\n for (const otherSegment of segmentsFor2(other, dedupeConsecutivePoints(otherPoints))) {\n if (hasCrowdedParallelTrack(candidateSegment, otherSegment)) {\n return false;\n }\n if (orthogonalSegmentsStrictlyCross(\n candidateSegment.a,\n candidateSegment.b,\n otherSegment.a,\n otherSegment.b,\n EPS_LOCAL2\n )) {\n return false;\n }\n }\n }\n }\n return true;\n }, \"candidateIsSafe\");\n const shiftedCandidate = /* @__PURE__ */ __name((segment, shift) => {\n const points = dedupeConsecutivePoints(segment.edge.points ?? []);\n if (points.length < 4 || segment.index >= points.length - 1) {\n return void 0;\n }\n const candidate = points.map((p) => ({ ...p }));\n if (segment.horizontal) {\n candidate[segment.index].y += shift;\n candidate[segment.index + 1].y += shift;\n } else if (segment.vertical) {\n candidate[segment.index].x += shift;\n candidate[segment.index + 1].x += shift;\n } else {\n return void 0;\n }\n return segmentsFor2(segment.edge, candidate).length === candidate.length - 1 ? candidate : void 0;\n }, \"shiftedCandidate\");\n const nodeCenter = /* @__PURE__ */ __name((node, rect) => ({\n x: node.x ?? (rect.left + rect.right) / 2,\n y: node.y ?? (rect.top + rect.bottom) / 2\n }), \"nodeCenter\");\n const sourceDetourContextFor = /* @__PURE__ */ __name((segment) => {\n const edge = segment.edge;\n const points = dedupeConsecutivePoints(edge.points ?? []);\n if (points.length !== 4 || segment.index !== 1) {\n return void 0;\n }\n const sourceNode = edge.start ? nodeByIdMap.get(edge.start) : void 0;\n const targetNode = edge.end ? nodeByIdMap.get(edge.end) : void 0;\n const sourceRect = sourceNode ? rectOfNodeBounds(sourceNode) : void 0;\n const targetRect = targetNode ? rectOfNodeBounds(targetNode) : void 0;\n const tail = points.slice(segment.index + 2);\n if (!sourceNode || !targetNode || !sourceRect || !targetRect || tail.length === 0) {\n return void 0;\n }\n return {\n sourceCenter: nodeCenter(sourceNode, sourceRect),\n targetCenter: nodeCenter(targetNode, targetRect),\n sourceRect,\n tail\n };\n }, \"sourceDetourContextFor\");\n const verticalSourceDetour = /* @__PURE__ */ __name((segment, shift, sourceCenter, targetCenter, sourceRect, tail) => {\n const targetBelow = targetCenter.y >= sourceCenter.y;\n const sourcePortY = targetBelow ? sourceRect.bottom : sourceRect.top;\n const stubY = sourcePortY + (targetBelow ? SOURCE_DETOUR_STUB : -SOURCE_DETOUR_STUB);\n if (targetBelow && segment.b.y <= stubY + EPS_LOCAL2 || !targetBelow && segment.b.y >= stubY - EPS_LOCAL2) {\n return void 0;\n }\n const railX = segment.a.x + shift;\n return dedupeConsecutivePoints(\n [\n { x: sourceCenter.x, y: sourcePortY },\n { x: sourceCenter.x, y: stubY },\n { x: railX, y: stubY },\n { x: railX, y: segment.b.y },\n ...tail\n ],\n EPS_LOCAL2\n );\n }, \"verticalSourceDetour\");\n const horizontalSourceDetour = /* @__PURE__ */ __name((segment, shift, sourceCenter, targetCenter, sourceRect, tail) => {\n const targetRight = targetCenter.x >= sourceCenter.x;\n const sourcePortX = targetRight ? sourceRect.right : sourceRect.left;\n const stubX = sourcePortX + (targetRight ? SOURCE_DETOUR_STUB : -SOURCE_DETOUR_STUB);\n if (targetRight && segment.b.x <= stubX + EPS_LOCAL2 || !targetRight && segment.b.x >= stubX - EPS_LOCAL2) {\n return void 0;\n }\n const railY = segment.a.y + shift;\n return dedupeConsecutivePoints(\n [\n { x: sourcePortX, y: sourceCenter.y },\n { x: stubX, y: sourceCenter.y },\n { x: stubX, y: railY },\n { x: segment.b.x, y: railY },\n ...tail\n ],\n EPS_LOCAL2\n );\n }, \"horizontalSourceDetour\");\n const sourceDetourCandidate = /* @__PURE__ */ __name((segment, shift) => {\n const context = sourceDetourContextFor(segment);\n if (!context) {\n return void 0;\n }\n if (segment.vertical) {\n return verticalSourceDetour(\n segment,\n shift,\n context.sourceCenter,\n context.targetCenter,\n context.sourceRect,\n context.tail\n );\n }\n if (segment.horizontal) {\n return horizontalSourceDetour(\n segment,\n shift,\n context.sourceCenter,\n context.targetCenter,\n context.sourceRect,\n context.tail\n );\n }\n return void 0;\n }, \"sourceDetourCandidate\");\n const shifts = [\n -TRACK_SHIFT,\n TRACK_SHIFT,\n -2 * TRACK_SHIFT,\n 2 * TRACK_SHIFT,\n -3 * TRACK_SHIFT,\n 3 * TRACK_SHIFT\n ];\n for (let iteration = 0; iteration < MAX_ITERATIONS; iteration++) {\n const segments = allSegments();\n let fixed = false;\n for (let i = 0; i < segments.length && !fixed; i++) {\n for (let j = i + 1; j < segments.length && !fixed; j++) {\n const first = segments[i];\n const second = segments[j];\n if (first.edge === second.edge || !hasCrowdedParallelTrack(first, second)) {\n continue;\n }\n const candidates = [first, second].filter((segment) => segment.interior);\n for (const segment of candidates) {\n for (const shift of shifts) {\n const direct = shiftedCandidate(segment, shift);\n if (direct && candidateIsSafe(segment.edge, direct)) {\n segment.edge.points = direct;\n fixed = true;\n break;\n }\n const detoured = sourceDetourCandidate(segment, shift);\n if (detoured && candidateIsSafe(segment.edge, detoured)) {\n segment.edge.points = detoured;\n fixed = true;\n break;\n }\n }\n if (fixed) {\n break;\n }\n }\n }\n }\n if (!fixed) {\n return;\n }\n }\n}\n__name(nudgeSharedInteriorSubpaths, \"nudgeSharedInteriorSubpaths\");\n\n// src/rendering-util/layout-algorithms/swimlanes/direction/validation.ts\nfunction segmentsIntersect(p1, p2, p3, p4) {\n const d1x = p2.x - p1.x;\n const d1y = p2.y - p1.y;\n const d2x = p4.x - p3.x;\n const d2y = p4.y - p3.y;\n const cross = d1x * d2y - d1y * d2x;\n if (Math.abs(cross) < 1e-10) {\n return false;\n }\n const dx = p3.x - p1.x;\n const dy = p3.y - p1.y;\n const t = (dx * d2y - dy * d2x) / cross;\n const u = (dx * d1y - dy * d1x) / cross;\n const eps = 0.01;\n return t > eps && t < 1 - eps && u > eps && u < 1 - eps;\n}\n__name(segmentsIntersect, \"segmentsIntersect\");\nfunction validateSwimlanesLayout(layout) {\n const nodes = layout.nodes ?? [];\n const edges = layout.edges ?? [];\n const issues = [];\n if (!edges.length || !nodes.length) {\n return issues;\n }\n const nodeRects = collectLayoutNodeRects(nodes);\n const epsilon = 1;\n const edgeSegments = [];\n for (const edge of edges) {\n if (edge.isLayoutOnly) {\n continue;\n }\n const points = edge.points;\n if (!points || points.length < 2) {\n continue;\n }\n const edgeStart = edge.start;\n const edgeEnd = edge.end;\n const ownLabelId = edge.labelNodeId;\n const edgeId = edge.id ?? `${edgeStart}->${edgeEnd}`;\n for (const rect of nodeRects) {\n if (rect.nodeId === edgeStart || rect.nodeId === edgeEnd) {\n continue;\n }\n if (ownLabelId && rect.nodeId === ownLabelId) {\n continue;\n }\n for (let i = 0; i < points.length - 1; i++) {\n if (segmentBoundsOverlapRect(points[i], points[i + 1], rect, -epsilon)) {\n issues.push({\n type: \"edge-node-overlap\",\n edgeId,\n targetId: rect.nodeId,\n detail: `segment ${i} passes through node \"${rect.nodeId}\"`\n });\n break;\n }\n }\n }\n for (let i = 0; i < points.length - 1; i++) {\n edgeSegments.push({\n edgeId,\n start: edgeStart,\n end: edgeEnd,\n p1: points[i],\n p2: points[i + 1]\n });\n }\n }\n const crossingPairs = /* @__PURE__ */ new Set();\n for (let i = 0; i < edgeSegments.length; i++) {\n for (let j = i + 1; j < edgeSegments.length; j++) {\n const a = edgeSegments[i];\n const b = edgeSegments[j];\n if (a.edgeId === b.edgeId) {\n continue;\n }\n if (a.start === b.start || a.start === b.end || a.end === b.start || a.end === b.end) {\n continue;\n }\n if (segmentsIntersect(a.p1, a.p2, b.p1, b.p2)) {\n const pairKey2 = a.edgeId < b.edgeId ? `${a.edgeId}|${b.edgeId}` : `${b.edgeId}|${a.edgeId}`;\n if (!crossingPairs.has(pairKey2)) {\n crossingPairs.add(pairKey2);\n issues.push({\n type: \"edge-edge-crossing\",\n edgeId: a.edgeId,\n targetId: b.edgeId,\n detail: `edges \"${a.edgeId}\" and \"${b.edgeId}\" cross`\n });\n }\n }\n }\n }\n if (issues.length > 0) {\n const overlaps = issues.filter((i) => i.type === \"edge-node-overlap\").length;\n const crossings = issues.filter((i) => i.type === \"edge-edge-crossing\").length;\n log.warn(\n `[SWIMLANE_VALIDATE] ${issues.length} issue(s) detected: ${overlaps} edge-node overlap(s), ${crossings} edge crossing(s)`\n );\n for (const issue of issues) {\n log.warn(`[SWIMLANE_VALIDATE] ${issue.type}: ${issue.detail}`);\n }\n }\n return issues;\n}\n__name(validateSwimlanesLayout, \"validateSwimlanesLayout\");\n\n// src/rendering-util/layout-algorithms/swimlanes/postProcessing.ts\nfunction postProcessSwimlaneLayout(layout, direction) {\n const nodes = layout.nodes ?? [];\n const edges = layout.edges ?? [];\n const contentNodes = nodes.filter((n) => !n.isGroup);\n if ((direction === \"LR\" || direction === \"RL\") && contentNodes.length > 0 && !applyLrDirectionTransform(layout, direction)) {\n return;\n }\n if (direction === \"BT\" && contentNodes.length > 0 && !applyBtDirectionTransform(layout)) {\n return;\n }\n for (const edge of edges) {\n if (edge.isLayoutOnly) {\n continue;\n }\n const pts = edge.points;\n if (!pts || pts.length < 2) {\n continue;\n }\n edge.points = simplifyPolyline(\n orthogonalizePolyline(pts)\n );\n }\n simplifyDetouredEdges(edges, nodes);\n straightenCollinearSiblingDetours(edges, nodes);\n portSwapToLShape(edges, nodes);\n const nodeByIdMap = /* @__PURE__ */ new Map();\n for (const n of nodes) {\n nodeByIdMap.set(String(n.id), n);\n }\n anchorLabelsToPolyline(edges, nodeByIdMap);\n clipEdgeEndpointsToNodeBoundaries(edges, nodeByIdMap);\n collapseShortTerminalStub(edges, nodeByIdMap);\n nudgeSharedInteriorSubpaths(edges, nodeByIdMap);\n separateSharedRenderedTerminalLanes(edges, nodeByIdMap);\n collapseRedundantRectangularDoglegs(edges, nodeByIdMap);\n liftObstacleHuggingSameSideRails(edges, nodeByIdMap);\n swapDestinationTerminalTailsToReduceCrossings(edges, nodeByIdMap);\n const finalizeRenderedEdges = /* @__PURE__ */ __name(() => {\n resolveRenderedOrthogonalCrossings(edges, nodeByIdMap);\n reassignCrossingExternalRailChannels(edges, nodeByIdMap);\n shortcutRedundantOrthogonalJogs(edges, nodeByIdMap);\n anchorLabelsToPolyline(edges, nodeByIdMap);\n prepareEdgeEndpointsForRenderer(edges, nodeByIdMap);\n liftObstacleHuggingSameSideRails(edges, nodeByIdMap);\n anchorLabelsToPolyline(edges, nodeByIdMap);\n prepareEdgeEndpointsForRenderer(edges, nodeByIdMap);\n }, \"finalizeRenderedEdges\");\n finalizeRenderedEdges();\n nudgeSharedInteriorSubpaths(edges, nodeByIdMap);\n finalizeRenderedEdges();\n liftTopLaneTitleBandsAboveRails(edges, nodeByIdMap);\n shiftLeftLaneTitleBandsLeftOfRails(edges, nodeByIdMap);\n liftTopLaneTitleBandsAboveRails(edges, nodeByIdMap);\n shiftLeftLaneTitleBandsLeftOfRails(edges, nodeByIdMap);\n}\n__name(postProcessSwimlaneLayout, \"postProcessSwimlaneLayout\");\n\n// src/rendering-util/layout-algorithms/swimlanes/phase0.helpers.ts\nfunction normalizeGraph(g) {\n const nodeById = new Map(g.nodeById);\n const seen = /* @__PURE__ */ new Set();\n const edges = [];\n for (const e of g.edges) {\n if (!nodeById.has(e.src) || !nodeById.has(e.dst)) {\n continue;\n }\n const key = `${e.id}:${e.src}->${e.dst}`;\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n edges.push(e);\n }\n const nodes = [...nodeById.keys()];\n return { nodes, edges, layout: g.layout, nodeById };\n}\n__name(normalizeGraph, \"normalizeGraph\");\nfunction incoming(g, v) {\n return g.edges.filter((e) => e.dst === v);\n}\n__name(incoming, \"incoming\");\nfunction buildSuccessorMap(g) {\n const succs = /* @__PURE__ */ new Map();\n for (const v of g.nodes) {\n succs.set(v, []);\n }\n for (const e of g.edges) {\n succs.get(e.src).push(e.dst);\n }\n return succs;\n}\n__name(buildSuccessorMap, \"buildSuccessorMap\");\nfunction buildSortedSuccessorMap(g) {\n const succs = buildSuccessorMap(g);\n for (const successors of succs.values()) {\n successors.sort((a, b) => a.localeCompare(b));\n }\n return succs;\n}\n__name(buildSortedSuccessorMap, \"buildSortedSuccessorMap\");\nfunction buildInDegreeMap(g) {\n const indeg = /* @__PURE__ */ new Map();\n for (const v of g.nodes) {\n indeg.set(v, 0);\n }\n for (const e of g.edges) {\n indeg.set(e.dst, (indeg.get(e.dst) ?? 0) + 1);\n }\n return indeg;\n}\n__name(buildInDegreeMap, \"buildInDegreeMap\");\nfunction sortedZeroInDegreeNodes(indeg) {\n return [...indeg.entries()].filter(([, degree]) => degree === 0).map(([id]) => id).sort((a, b) => a.localeCompare(b));\n}\n__name(sortedZeroInDegreeNodes, \"sortedZeroInDegreeNodes\");\nfunction buildPredecessorSuccessorMaps(g, includeEdge = () => true) {\n const preds = /* @__PURE__ */ new Map();\n const succs = /* @__PURE__ */ new Map();\n for (const v of g.nodes) {\n preds.set(v, []);\n succs.set(v, []);\n }\n for (const e of g.edges) {\n if (!includeEdge(e)) {\n continue;\n }\n succs.get(e.src).push(e.dst);\n preds.get(e.dst).push(e.src);\n }\n return { preds, succs };\n}\n__name(buildPredecessorSuccessorMaps, \"buildPredecessorSuccessorMaps\");\nfunction buildLayersFromRanks(g, order, rankOf, opts) {\n let maxRank = 0;\n for (const v of g.nodes) {\n if (opts?.skipGroups && g.nodeById.get(v)?.isGroup) {\n continue;\n }\n maxRank = Math.max(maxRank, rankOf[v] ?? 0);\n }\n const layers = Array.from({ length: maxRank + 1 }, () => []);\n for (const v of order) {\n if (opts?.skipGroups && g.nodeById.get(v)?.isGroup) {\n continue;\n }\n layers[Math.max(0, rankOf[v] ?? 0)].push(v);\n }\n return layers;\n}\n__name(buildLayersFromRanks, \"buildLayersFromRanks\");\nfunction topoSortIfAcyclic(g) {\n const indeg = buildInDegreeMap(g);\n const queue = sortedZeroInDegreeNodes(indeg);\n const order = [];\n const adj = buildSortedSuccessorMap(g);\n while (queue.length) {\n const u = queue.shift();\n order.push(u);\n for (const v of adj.get(u) ?? []) {\n indeg.set(v, (indeg.get(v) ?? 0) - 1);\n if ((indeg.get(v) ?? 0) === 0) {\n let i = 0;\n while (i < queue.length && queue[i] < v) {\n i++;\n }\n queue.splice(i, 0, v);\n }\n }\n }\n return order.length === g.nodes.length ? order : null;\n}\n__name(topoSortIfAcyclic, \"topoSortIfAcyclic\");\nfunction buildLayerIndex(layer) {\n const m = /* @__PURE__ */ new Map();\n let index = 0;\n for (const id of layer) {\n m.set(id, index);\n index++;\n }\n return m;\n}\n__name(buildLayerIndex, \"buildLayerIndex\");\nfunction countInversions(values) {\n const tmp = new Array(values.length);\n const count = /* @__PURE__ */ __name((left, right) => {\n if (right - left <= 1) {\n return 0;\n }\n const mid = left + right >> 1;\n let inversions = count(left, mid) + count(mid, right);\n let i = left;\n let j = mid;\n let k = left;\n while (i < mid || j < right) {\n if (j >= right || i < mid && values[i] <= values[j]) {\n tmp[k++] = values[i++];\n } else {\n tmp[k++] = values[j++];\n inversions += mid - i;\n }\n }\n for (let t = left; t < right; t++) {\n values[t] = tmp[t];\n }\n return inversions;\n }, \"count\");\n return count(0, values.length);\n}\n__name(countInversions, \"countInversions\");\n\n// src/rendering-util/layout-algorithms/swimlanes/phase1.cycles.ts\nfunction removeCycles_DFS(g) {\n const gn = normalizeGraph(g);\n const adj = /* @__PURE__ */ new Map();\n for (const v of gn.nodes) {\n adj.set(v, []);\n }\n for (const e of gn.edges) {\n adj.get(e.src).push(e);\n }\n for (const arr of adj.values()) {\n arr.sort((a, b) => a.dst === b.dst ? a.id.localeCompare(b.id) : a.dst.localeCompare(b.dst));\n }\n const color = /* @__PURE__ */ Object.create(null);\n for (const v of gn.nodes) {\n color[v] = 0;\n }\n const reversed = [];\n const dfs = /* @__PURE__ */ __name((u) => {\n color[u] = 1;\n for (const e of adj.get(u) ?? []) {\n const v = e.dst;\n if (color[v] === 0) {\n dfs(v);\n } else if (color[v] === 1) {\n reversed.push(e);\n }\n }\n color[u] = 2;\n }, \"dfs\");\n const nodesSorted = [...gn.nodes].sort((a, b) => a.localeCompare(b));\n for (const v of nodesSorted) {\n if (color[v] === 0) {\n dfs(v);\n }\n }\n const toReverse = new Set(reversed.map((e) => `${e.id}:${e.src}->${e.dst}`));\n const acycEdges = gn.edges.map(\n (e) => toReverse.has(`${e.id}:${e.src}->${e.dst}`) ? { id: e.id, src: e.dst, dst: e.src, weight: e.weight, ref: e.ref } : e\n );\n const acyclic = {\n nodes: [...gn.nodes],\n edges: acycEdges,\n layout: gn.layout,\n nodeById: new Map(gn.nodeById)\n };\n return { acyclic, reversed };\n}\n__name(removeCycles_DFS, \"removeCycles_DFS\");\n\n// src/rendering-util/layout-algorithms/swimlanes/phase2.options.ts\nfunction buildTopLaneMap(g) {\n const cache = /* @__PURE__ */ new Map();\n const resolve = /* @__PURE__ */ __name((id) => {\n if (cache.has(id)) {\n return cache.get(id);\n }\n const node = g.nodeById.get(id);\n if (!node) {\n cache.set(id, null);\n return null;\n }\n const parentId = node.parentId;\n if (!parentId) {\n cache.set(id, null);\n return null;\n }\n const parentLane = resolve(parentId);\n const lane = parentLane ?? parentId;\n cache.set(id, lane);\n return lane;\n }, \"resolve\");\n for (const id of g.nodes) {\n resolve(id);\n }\n return cache;\n}\n__name(buildTopLaneMap, \"buildTopLaneMap\");\nfunction createTopLaneResolver(g) {\n const topLaneMap = buildTopLaneMap(g);\n return (id) => topLaneMap.get(id) ?? null;\n}\n__name(createTopLaneResolver, \"createTopLaneResolver\");\nfunction buildTopLaneOrder(g) {\n const lanes = [];\n for (const node of g.layout.nodes ?? []) {\n if (node.isGroup && !node.parentId) {\n lanes.push(node.id);\n }\n }\n return [...new Set(lanes)].reverse();\n}\n__name(buildTopLaneOrder, \"buildTopLaneOrder\");\nfunction resolveTopLaneOrder(g, preferredOrder) {\n const sourceOrder = buildTopLaneOrder(g);\n if (!preferredOrder || preferredOrder.length === 0) {\n return sourceOrder;\n }\n const sourceLaneIds = new Set(sourceOrder);\n const seen = /* @__PURE__ */ new Set();\n const resolved = [];\n for (const laneId of preferredOrder) {\n if (!sourceLaneIds.has(laneId) || seen.has(laneId)) {\n continue;\n }\n seen.add(laneId);\n resolved.push(laneId);\n }\n for (const laneId of sourceOrder) {\n if (seen.has(laneId)) {\n continue;\n }\n resolved.push(laneId);\n }\n return resolved;\n}\n__name(resolveTopLaneOrder, \"resolveTopLaneOrder\");\n\n// src/rendering-util/layout-algorithms/swimlanes/config.ts\nvar PRECISION = {\n /** Epsilon for floating-point comparisons */\n EPSILON: 1e-6\n};\nvar LAYERING = {\n /** Default number of iterations for gravity-based layering */\n GRAVITY_ITERATIONS: 8,\n /** Maximum number of passes for crossing-based rank optimization */\n MAX_CROSSING_OPTIMIZATION_PASSES: 4,\n /** Whether to compact single-input nodes by default */\n DEFAULT_COMPACT_SINGLE_INPUT: true\n};\nvar COORDINATES = {\n /** Default vertical gap between layers (px) */\n DEFAULT_LAYER_GAP: 100,\n /** Default horizontal gap between nodes (px) */\n DEFAULT_NODE_GAP: 40\n};\n\n// src/rendering-util/layout-algorithms/swimlanes/driving-tree.ts\nfunction buildDrivingTree(graph, opts) {\n const g = normalizeGraph(graph);\n const laneOf = opts?.laneOf ?? (() => null);\n const rankHint = opts?.rankHint;\n const { preds } = buildPredecessorSuccessorMaps(g);\n for (const arr of preds.values()) {\n arr.sort((a, b) => a.localeCompare(b));\n }\n const topoOrder = topoSortIfAcyclic(g) ?? [...g.nodes].sort((a, b) => a.localeCompare(b));\n const topoIndex = /* @__PURE__ */ new Map();\n for (const [idx, id] of topoOrder.entries()) {\n topoIndex.set(id, idx);\n }\n const parent = /* @__PURE__ */ new Map();\n const children = /* @__PURE__ */ new Map();\n for (const node of g.nodes) {\n children.set(node, []);\n }\n for (const node of topoOrder) {\n const candidates = (preds.get(node) ?? []).filter((p) => parent.has(p));\n if (candidates.length > 0) {\n const chosen = chooseParent(node, candidates, {\n laneOf,\n rankHint,\n topoIndex\n });\n parent.set(node, chosen);\n children.get(chosen).push(node);\n } else if (!parent.has(node)) {\n parent.set(node, null);\n }\n }\n for (const node of g.nodes) {\n if (!parent.has(node)) {\n parent.set(node, null);\n }\n }\n const rootSet = /* @__PURE__ */ new Set();\n for (const node of g.nodes) {\n if ((parent.get(node) ?? null) === null) {\n rootSet.add(node);\n }\n }\n const roots = [...rootSet].sort((a, b) => {\n const ta = topoIndex.get(a) ?? 0;\n const tb = topoIndex.get(b) ?? 0;\n if (ta === tb) {\n return a.localeCompare(b);\n }\n return ta - tb;\n });\n const adjacency = buildAdjacency(g);\n const adjacencyList = /* @__PURE__ */ new Map();\n for (const [node, set] of adjacency.entries()) {\n adjacencyList.set(\n node,\n [...set].sort((a, b) => a.localeCompare(b))\n );\n }\n const componentOf = assignComponents(adjacencyList);\n const blocks = computeBlocks(adjacencyList);\n const nodeBlocks = /* @__PURE__ */ new Map();\n for (const node of g.nodes) {\n nodeBlocks.set(node, []);\n }\n for (const block of blocks) {\n for (const node of block.nodes) {\n const list = nodeBlocks.get(node);\n if (list) {\n list.push(block.id);\n } else {\n nodeBlocks.set(node, [block.id]);\n }\n }\n }\n const preorder = [];\n const postorder = [];\n const seen = /* @__PURE__ */ new Set();\n const walk = /* @__PURE__ */ __name((node) => {\n if (seen.has(node)) {\n return;\n }\n seen.add(node);\n preorder.push(node);\n for (const child of children.get(node) ?? []) {\n walk(child);\n }\n postorder.push(node);\n }, \"walk\");\n for (const root of roots) {\n walk(root);\n }\n for (const node of topoOrder) {\n walk(node);\n }\n return {\n parent,\n children,\n roots,\n componentOf,\n blocks,\n nodeBlocks,\n adjacency: adjacencyList,\n preorder,\n postorder,\n topologicalOrder: topoOrder\n };\n}\n__name(buildDrivingTree, \"buildDrivingTree\");\nfunction chooseParent(node, candidates, ctx) {\n const laneNode = ctx.laneOf(node);\n const sorted = [...candidates].sort((a, b) => {\n const laneA = ctx.laneOf(a);\n const laneB = ctx.laneOf(b);\n const sameLaneA = laneA != null && laneA === laneNode;\n const sameLaneB = laneB != null && laneB === laneNode;\n if (sameLaneA !== sameLaneB) {\n return sameLaneA ? -1 : 1;\n }\n const rankA = ctx.rankHint?.[a];\n const rankB = ctx.rankHint?.[b];\n if (rankA != null && rankB != null && rankA !== rankB) {\n return rankB - rankA;\n }\n const idxA = ctx.topoIndex.get(a) ?? 0;\n const idxB = ctx.topoIndex.get(b) ?? 0;\n if (idxA !== idxB) {\n return idxA - idxB;\n }\n return a.localeCompare(b);\n });\n return sorted[0];\n}\n__name(chooseParent, \"chooseParent\");\nfunction buildAdjacency(g) {\n const adjacency = /* @__PURE__ */ new Map();\n for (const node of g.nodes) {\n adjacency.set(node, /* @__PURE__ */ new Set());\n }\n for (const e of g.edges) {\n adjacency.get(e.src).add(e.dst);\n adjacency.get(e.dst).add(e.src);\n }\n return adjacency;\n}\n__name(buildAdjacency, \"buildAdjacency\");\nfunction assignComponents(adjacency) {\n const componentOf = /* @__PURE__ */ new Map();\n let componentId = 0;\n for (const node of adjacency.keys()) {\n if (componentOf.has(node)) {\n continue;\n }\n const stack = [node];\n while (stack.length > 0) {\n const cur = stack.pop();\n if (componentOf.has(cur)) {\n continue;\n }\n componentOf.set(cur, componentId);\n for (const next of adjacency.get(cur) ?? []) {\n if (!componentOf.has(next)) {\n stack.push(next);\n }\n }\n }\n componentId++;\n }\n return componentOf;\n}\n__name(assignComponents, \"assignComponents\");\nfunction computeBlocks(adjacency) {\n const discovery = /* @__PURE__ */ new Map();\n const low = /* @__PURE__ */ new Map();\n const edgeStack = [];\n const blocks = [];\n let time = 0;\n const visit = /* @__PURE__ */ __name((node, parent) => {\n discovery.set(node, ++time);\n low.set(node, time);\n for (const next of adjacency.get(node) ?? []) {\n if (next === parent) {\n continue;\n }\n if (!discovery.has(next)) {\n edgeStack.push([node, next]);\n visit(next, node);\n low.set(node, Math.min(low.get(node) ?? time, low.get(next) ?? time));\n if ((low.get(next) ?? 0) >= (discovery.get(node) ?? 0)) {\n blocks.push(popBlock(node, next, edgeStack, blocks.length));\n }\n } else if ((discovery.get(next) ?? 0) < (discovery.get(node) ?? 0)) {\n edgeStack.push([node, next]);\n low.set(node, Math.min(low.get(node) ?? time, discovery.get(next) ?? time));\n }\n }\n }, \"visit\");\n for (const node of adjacency.keys()) {\n if (!discovery.has(node)) {\n visit(node, null);\n }\n }\n return blocks;\n}\n__name(computeBlocks, \"computeBlocks\");\nfunction popBlock(u, v, stack, id) {\n const edges = [];\n const nodes = /* @__PURE__ */ new Set();\n while (stack.length > 0) {\n const edge = stack.pop();\n edges.push(edge);\n nodes.add(edge[0]);\n nodes.add(edge[1]);\n if (edge[0] === u && edge[1] === v || edge[0] === v && edge[1] === u) {\n break;\n }\n }\n return { id, edges, nodes: [...nodes] };\n}\n__name(popBlock, \"popBlock\");\n\n// src/rendering-util/layout-algorithms/swimlanes/phase2.crossCounts.ts\nfunction computeSubtreeCrossCounts(g, rankOf, tree) {\n const nodes = [...g.nodes];\n const indexOf = /* @__PURE__ */ new Map();\n for (const [i, node] of nodes.entries()) {\n indexOf.set(node, i);\n }\n const n = nodes.length;\n const parentIdx = new Array(n).fill(-1);\n const depth = new Array(n).fill(0);\n const queue = [];\n const seen = /* @__PURE__ */ new Set();\n for (const node of nodes) {\n const parentId = tree.parent.get(node) ?? null;\n const idx = indexOf.get(node);\n if (idx == null) {\n continue;\n }\n if (parentId == null) {\n parentIdx[idx] = -1;\n depth[idx] = 0;\n if (!seen.has(node)) {\n seen.add(node);\n queue.push(node);\n }\n }\n }\n while (queue.length > 0) {\n const current = queue.shift();\n const currentIdx = indexOf.get(current);\n if (currentIdx == null) {\n continue;\n }\n const childList = tree.children.get(current) ?? [];\n for (const child of childList) {\n if (seen.has(child)) {\n continue;\n }\n const childIdx = indexOf.get(child);\n if (childIdx == null) {\n continue;\n }\n parentIdx[childIdx] = currentIdx;\n depth[childIdx] = depth[currentIdx] + 1;\n seen.add(child);\n queue.push(child);\n }\n }\n for (const node of nodes) {\n if (seen.has(node)) {\n continue;\n }\n const idx = indexOf.get(node);\n if (idx == null) {\n continue;\n }\n parentIdx[idx] = -1;\n depth[idx] = 0;\n seen.add(node);\n }\n const maxLog = Math.max(1, Math.ceil(Math.log2(Math.max(1, n))) + 1);\n const up = Array.from({ length: maxLog }, () => new Array(n).fill(-1));\n for (let i = 0; i < n; i++) {\n up[0][i] = parentIdx[i];\n }\n for (let k = 1; k < maxLog; k++) {\n for (let i = 0; i < n; i++) {\n const prev = up[k - 1][i];\n up[k][i] = prev === -1 ? -1 : up[k - 1][prev];\n }\n }\n const lcaIndex = /* @__PURE__ */ __name((aIdx, bIdx) => {\n if (aIdx === -1 || bIdx === -1) {\n return -1;\n }\n if (depth[aIdx] < depth[bIdx]) {\n [aIdx, bIdx] = [bIdx, aIdx];\n }\n const diff = depth[aIdx] - depth[bIdx];\n for (let k = 0; k < maxLog; k++) {\n if (diff >> k & 1) {\n aIdx = up[k][aIdx];\n if (aIdx === -1) {\n return -1;\n }\n }\n }\n if (aIdx === bIdx) {\n return aIdx;\n }\n for (let k = maxLog - 1; k >= 0; k--) {\n const upA = up[k][aIdx];\n const upB = up[k][bIdx];\n if (upA === -1 || upB === -1) {\n continue;\n }\n if (upA !== upB) {\n aIdx = upA;\n bIdx = upB;\n }\n }\n return up[0][aIdx];\n }, \"lcaIndex\");\n const ownCounts = Array.from({ length: n }, () => /* @__PURE__ */ new Map());\n for (const edge of g.edges) {\n let src = edge.src;\n let dst = edge.dst;\n let ru = rankOf[src];\n let rv = rankOf[dst];\n if (ru == null || rv == null) {\n continue;\n }\n if (ru > rv) {\n [src, dst] = [dst, src];\n [ru, rv] = [rv, ru];\n }\n if (ru == null || rv == null || ru === rv) {\n continue;\n }\n const upperIdx = indexOf.get(src);\n const lowerIdx = indexOf.get(dst);\n if (upperIdx == null || lowerIdx == null) {\n continue;\n }\n const lca = lcaIndex(upperIdx, lowerIdx);\n if (lca === -1) {\n continue;\n }\n const bucket = ownCounts[lca];\n for (let layer = ru; layer < rv; layer++) {\n bucket.set(layer, (bucket.get(layer) ?? 0) + 1);\n }\n }\n const crossCounts = /* @__PURE__ */ new Map();\n const mergeInto = /* @__PURE__ */ __name((target, source) => {\n if (source.size === 0) {\n return;\n }\n for (const [layer, value] of source) {\n target.set(layer, (target.get(layer) ?? 0) + value);\n }\n }, \"mergeInto\");\n const visited = /* @__PURE__ */ new Set();\n const dfs = /* @__PURE__ */ __name((node) => {\n const idx = indexOf.get(node);\n visited.add(node);\n const base = idx == null ? void 0 : ownCounts[idx];\n const accumulator = base ? new Map(base) : /* @__PURE__ */ new Map();\n const childList = tree.children.get(node) ?? [];\n for (const child of childList) {\n const childMap = dfs(child);\n const parentLayer = rankOf[node];\n if (parentLayer != null) {\n let map = crossCounts.get(node);\n if (!map) {\n map = /* @__PURE__ */ new Map();\n crossCounts.set(node, map);\n }\n let value = childMap.get(parentLayer) ?? 0;\n const childLayer = rankOf[child];\n if (childLayer != null && childLayer > parentLayer) {\n value += 1;\n }\n map.set(child, value);\n }\n mergeInto(accumulator, childMap);\n }\n return accumulator;\n }, \"dfs\");\n for (const root of tree.roots) {\n if (!visited.has(root)) {\n dfs(root);\n }\n }\n for (const node of nodes) {\n if (!visited.has(node)) {\n dfs(node);\n }\n }\n return crossCounts;\n}\n__name(computeSubtreeCrossCounts, \"computeSubtreeCrossCounts\");\n\n// src/rendering-util/layout-algorithms/swimlanes/phase2.multitree.core.ts\nfunction annotateMinimumLayers(nodes, children, rankOf) {\n const minLayer = /* @__PURE__ */ new Map();\n const annotate = /* @__PURE__ */ __name((node) => {\n let minL = rankOf[node] ?? 0;\n const childList = [...children.get(node) ?? []];\n childList.sort(compareByRankThenId(rankOf));\n for (const child of childList) {\n annotate(child);\n const childMin = minLayer.get(child);\n if (childMin != null) {\n minL = Math.min(minL, childMin);\n }\n }\n minLayer.set(node, minL);\n }, \"annotate\");\n for (const node of nodes) {\n annotate(node);\n }\n return minLayer;\n}\n__name(annotateMinimumLayers, \"annotateMinimumLayers\");\nfunction compareByRankThenId(rankOf) {\n return (a, b) => {\n const ra = rankOf[a] ?? 0;\n const rb = rankOf[b] ?? 0;\n return ra === rb ? a.localeCompare(b) : ra - rb;\n };\n}\n__name(compareByRankThenId, \"compareByRankThenId\");\nfunction emitNodesInTreeOrder(roots, allNodes, rankOf, orderChildren) {\n let maxRank = 0;\n for (const node of allNodes) {\n const r = rankOf[node] ?? 0;\n if (r > maxRank) {\n maxRank = r;\n }\n }\n const layers = Array.from({ length: maxRank + 1 }, () => []);\n const emitted = /* @__PURE__ */ new Set();\n const emit = /* @__PURE__ */ __name((node) => {\n if (emitted.has(node)) {\n return;\n }\n emitted.add(node);\n const layer = rankOf[node] ?? 0;\n if (!layers[layer]) {\n layers[layer] = [];\n }\n layers[layer].push(node);\n for (const child of orderChildren(node)) {\n emit(child);\n }\n }, \"emit\");\n for (const root of roots) {\n emit(root);\n }\n for (const node of allNodes) {\n if (!emitted.has(node)) {\n const layer = rankOf[node] ?? 0;\n if (!layers[layer]) {\n layers[layer] = [];\n }\n layers[layer].push(node);\n emitted.add(node);\n }\n }\n return layers;\n}\n__name(emitNodesInTreeOrder, \"emitNodesInTreeOrder\");\nfunction deduplicateLayers(layers) {\n const result = [];\n for (const layer of layers) {\n const seen = /* @__PURE__ */ new Set();\n const deduped = [];\n for (const id of layer) {\n if (seen.has(id)) {\n continue;\n }\n seen.add(id);\n deduped.push(id);\n }\n result.push(deduped);\n }\n return result;\n}\n__name(deduplicateLayers, \"deduplicateLayers\");\n\n// src/rendering-util/layout-algorithms/swimlanes/phase2.multitree.order.ts\nfunction createChildOrderer(children, rankOf, crossCounts, minLayer) {\n return (node) => {\n const raw = children.get(node) ?? [];\n if (raw.length === 0) {\n return [];\n }\n const layer = rankOf[node] ?? 0;\n const future = [];\n const present = [];\n const crossMap = crossCounts.get(node);\n for (const child of raw) {\n const minL = minLayer.get(child) ?? layer;\n if (minL > layer) {\n future.push({ child, min: minL });\n } else {\n present.push(child);\n }\n }\n future.sort((a, b) => {\n if (a.min === b.min) {\n return a.child.localeCompare(b.child);\n }\n return a.min - b.min;\n });\n present.sort((a, b) => {\n const ca = crossMap?.get(a) ?? 0;\n const cb = crossMap?.get(b) ?? 0;\n if (ca !== cb) {\n return ca - cb;\n }\n const ma = minLayer.get(a) ?? layer;\n const mb = minLayer.get(b) ?? layer;\n if (ma !== mb) {\n return ma - mb;\n }\n return a.localeCompare(b);\n });\n return [...future.map((item) => item.child), ...present];\n };\n}\n__name(createChildOrderer, \"createChildOrderer\");\nfunction buildMultitreeLayerOrder(g, rankOf, laneOf) {\n const tree = buildDrivingTree(g, {\n rankHint: rankOf,\n laneOf\n });\n const { children, roots } = tree;\n for (const node of g.nodes) {\n if (!children.has(node)) {\n children.set(node, []);\n }\n }\n const crossCounts = computeSubtreeCrossCounts(g, rankOf, tree);\n const rootsSorted = [...roots].sort(compareByRankThenId(rankOf));\n const minLayer = annotateMinimumLayers(rootsSorted, children, rankOf);\n const orderChildren = createChildOrderer(children, rankOf, crossCounts, minLayer);\n let layers = emitNodesInTreeOrder(rootsSorted, g.nodes, rankOf, orderChildren);\n layers = deduplicateLayers(layers);\n return layers;\n}\n__name(buildMultitreeLayerOrder, \"buildMultitreeLayerOrder\");\n\n// src/rendering-util/layout-algorithms/swimlanes/phase2.crossOptimization.ts\nfunction countCrossingsBetweenAdjacent(upper, lower, edges) {\n const upperSet = new Set(upper);\n const lowerSet = new Set(lower);\n const li = buildLayerIndex(lower);\n const vs = [];\n for (const e of edges) {\n if (upperSet.has(e.src) && lowerSet.has(e.dst)) {\n vs.push(li.get(e.dst));\n }\n }\n return countInversions(vs);\n}\n__name(countCrossingsBetweenAdjacent, \"countCrossingsBetweenAdjacent\");\nfunction totalCrossings(layers, edges, rankOf) {\n const expanded = [];\n for (const e of edges) {\n const ru = rankOf[e.src];\n const rv = rankOf[e.dst];\n if (ru == null || rv == null || ru === rv) {\n continue;\n }\n let upper = e.src;\n let lower = e.dst;\n let rUpper = ru;\n let rLower = rv;\n if (ru > rv) {\n upper = e.dst;\n lower = e.src;\n rUpper = rv;\n rLower = ru;\n }\n for (let L = rUpper; L < rLower; L++) {\n expanded.push({ id: `${e.id}@${L}`, src: upper, dst: lower, ref: e.ref });\n }\n }\n let sum = 0;\n for (let i = 0; i + 1 < layers.length; i++) {\n sum += countCrossingsBetweenAdjacent(layers[i], layers[i + 1], expanded);\n }\n return sum;\n}\n__name(totalCrossings, \"totalCrossings\");\nfunction optimizeRanksByCrossings(g, initialRank) {\n const rankOf = { ...initialRank };\n const { preds } = buildPredecessorSuccessorMaps(g);\n const laneOf = createTopLaneResolver(g);\n const layers = buildMultitreeLayerOrder(g, rankOf, laneOf);\n let best = totalCrossings(layers, g.edges, rankOf);\n const maxPasses = LAYERING.MAX_CROSSING_OPTIMIZATION_PASSES;\n for (let pass = 0; pass < maxPasses; pass++) {\n let changed = false;\n const nodesByRank = [...g.nodes].sort((a, b) => (rankOf[b] ?? 0) - (rankOf[a] ?? 0));\n for (const v of nodesByRank) {\n const r = rankOf[v] ?? 0;\n if (r === 0) {\n continue;\n }\n let lb = 0;\n for (const u of preds.get(v) ?? []) {\n lb = Math.max(lb, (rankOf[u] ?? 0) + 1);\n }\n if (lb >= r) {\n continue;\n }\n const old = r;\n rankOf[v] = lb;\n const trialLayers = buildMultitreeLayerOrder(g, rankOf, laneOf);\n const score = totalCrossings(trialLayers, g.edges, rankOf);\n if (score < best) {\n best = score;\n changed = true;\n } else {\n rankOf[v] = old;\n }\n }\n if (!changed) {\n break;\n }\n }\n return rankOf;\n}\n__name(optimizeRanksByCrossings, \"optimizeRanksByCrossings\");\n\n// src/rendering-util/layout-algorithms/swimlanes/phase2.crossLaneAdjust.ts\nfunction adjustCrossLaneSources(g, rankOf) {\n const topLaneOf = createTopLaneResolver(g);\n const nodesByRank = [...g.nodes].sort(\n (a, b) => (rankOf[a] ?? 0) - (rankOf[b] ?? 0) || a.localeCompare(b)\n );\n for (const v of nodesByRank) {\n const laneV = topLaneOf(v);\n if (!laneV) {\n continue;\n }\n const outEdges = g.edges.filter((e) => e.src === v);\n if (outEdges.length === 0) {\n continue;\n }\n let hasSameLaneSucc = false;\n let crossLaneCount = 0;\n for (const e of outEdges) {\n const laneDst = topLaneOf(e.dst);\n if (laneDst == null || laneDst === laneV) {\n hasSameLaneSucc = true;\n } else {\n crossLaneCount++;\n }\n }\n if (crossLaneCount === 0 || hasSameLaneSucc) {\n continue;\n }\n let crossLaneIncoming = 0;\n let hasSameLanePred = false;\n for (const e of g.edges) {\n if (e.dst !== v) {\n continue;\n }\n const laneSrc = topLaneOf(e.src);\n if (!laneSrc) {\n continue;\n }\n if (laneSrc === laneV) {\n hasSameLanePred = true;\n } else {\n crossLaneIncoming++;\n }\n }\n if (crossLaneIncoming > 0 || !hasSameLanePred) {\n continue;\n }\n const current = rankOf[v] ?? 0;\n const target = current + crossLaneCount;\n let lb = 0;\n for (const e of g.edges) {\n if (e.dst === v) {\n lb = Math.max(lb, (rankOf[e.src] ?? 0) + 1);\n }\n }\n const newRank = Math.max(current, lb, target);\n if (newRank !== current) {\n rankOf[v] = newRank;\n }\n }\n}\n__name(adjustCrossLaneSources, \"adjustCrossLaneSources\");\n\n// src/rendering-util/layout-algorithms/swimlanes/phase2.longestPath.ts\nfunction assignLayers_LongestPath(gAcyclic, opts) {\n const g = normalizeGraph(gAcyclic);\n const order = topoSortIfAcyclic(g) ?? [...g.nodes].sort();\n const compact = opts?.compactSingleInput ?? false;\n const topLaneOf = createTopLaneResolver(g);\n let rankOf = /* @__PURE__ */ Object.create(null);\n for (const v of order) {\n const incAll = incoming(g, v);\n const inc = opts?.ignoreCrossLaneEdges ? incAll.filter((e) => {\n const laneSrc = topLaneOf(e.src);\n const laneDst = topLaneOf(v);\n if (!laneSrc || !laneDst) {\n return true;\n }\n return laneSrc === laneDst;\n }) : incAll;\n if (inc.length === 0) {\n rankOf[v] = 0;\n } else if (compact && inc.length === 1) {\n const u = inc[0].src;\n const laneU = topLaneOf(u);\n const laneV = topLaneOf(v);\n if (laneU !== laneV) {\n rankOf[v] = rankOf[u] ?? 0;\n } else {\n rankOf[v] = (rankOf[u] ?? 0) + 1;\n }\n } else {\n let mx = -Infinity;\n for (const e of inc) {\n mx = Math.max(mx, (rankOf[e.src] ?? 0) + 1);\n }\n rankOf[v] = mx === -Infinity ? 0 : mx;\n }\n }\n if (opts?.optimizeRanksByCrossings ?? false) {\n rankOf = optimizeRanksByCrossings(g, rankOf);\n }\n if (opts?.ignoreCrossLaneEdges) {\n adjustCrossLaneSources(g, rankOf);\n }\n const layers = buildMultitreeLayerOrder(g, rankOf, topLaneOf);\n return { layers, rankOf, dummy: /* @__PURE__ */ new Set() };\n}\n__name(assignLayers_LongestPath, \"assignLayers_LongestPath\");\n\n// src/rendering-util/layout-algorithms/swimlanes/phase2.gravity.ts\nfunction assignLayers_Gravity(gAcyclic, opts) {\n const g = normalizeGraph(gAcyclic);\n const base = assignLayers_LongestPath(g, {\n compactSingleInput: opts?.compactSingleInput,\n ignoreCrossLaneEdges: opts?.ignoreCrossLaneEdges,\n optimizeRanksByCrossings: opts?.optimizeRanksByCrossings\n });\n const rankOf = { ...base.rankOf };\n const topLaneOf = createTopLaneResolver(g);\n const { preds, succs } = buildPredecessorSuccessorMaps(g, (e) => {\n if (opts?.ignoreCrossLaneEdges) {\n const laneSrc = topLaneOf(e.src);\n const laneDst = topLaneOf(e.dst);\n if (laneSrc && laneDst && laneSrc !== laneDst) {\n return false;\n }\n }\n return true;\n });\n const order = topoSortIfAcyclic(g) ?? [...g.nodes];\n const revOrder = [...order].reverse();\n const clampFeasible = /* @__PURE__ */ __name((v, desired) => {\n let lb = 0;\n for (const u of preds.get(v) ?? []) {\n lb = Math.max(lb, (rankOf[u] ?? 0) + 1);\n }\n let ub = Number.POSITIVE_INFINITY;\n const s = succs.get(v) ?? [];\n if (s.length > 0) {\n ub = Math.min(...s.map((w) => (rankOf[w] ?? 0) - 1));\n }\n if (!Number.isFinite(ub)) {\n ub = Math.max(lb, desired);\n }\n return Math.min(Math.max(desired, lb), ub);\n }, \"clampFeasible\");\n const iters = LAYERING.GRAVITY_ITERATIONS;\n const relaxOrder = /* @__PURE__ */ __name((nodeOrder) => {\n let changed = false;\n for (const v of nodeOrder) {\n const ps = preds.get(v) ?? [];\n const ss = succs.get(v) ?? [];\n if (ps.length === 0 && ss.length === 0) {\n continue;\n }\n const predAvg = ps.length > 0 ? ps.reduce((a, u) => a + (rankOf[u] ?? 0) + 1, 0) / ps.length : rankOf[v] ?? 0;\n const succAvg = ss.length > 0 ? ss.reduce((a, w) => a + (rankOf[w] ?? 0) - 1, 0) / ss.length : rankOf[v] ?? 0;\n const desired = Math.round((predAvg + succAvg) / 2);\n const clamped = clampFeasible(v, desired);\n if (clamped !== rankOf[v]) {\n rankOf[v] = clamped;\n changed = true;\n }\n }\n return changed;\n }, \"relaxOrder\");\n for (let it = 0; it < iters; it++) {\n const forwardChanged = relaxOrder(order);\n const backwardChanged = relaxOrder(revOrder);\n if (!forwardChanged && !backwardChanged) {\n break;\n }\n }\n for (const v of order) {\n let lb = 0;\n for (const u of preds.get(v) ?? []) {\n lb = Math.max(lb, (rankOf[u] ?? 0) + 1);\n }\n if ((rankOf[v] ?? 0) < lb) {\n rankOf[v] = lb;\n }\n }\n for (const v of revOrder) {\n const s = succs.get(v) ?? [];\n if (s.length > 0) {\n const ub = Math.min(...s.map((w) => (rankOf[w] ?? 0) - 1));\n if ((rankOf[v] ?? 0) > ub) {\n rankOf[v] = ub;\n }\n }\n }\n const layers = buildLayersFromRanks(g, order, rankOf);\n return { layers, rankOf, dummy: /* @__PURE__ */ new Set() };\n}\n__name(assignLayers_Gravity, \"assignLayers_Gravity\");\n\n// src/rendering-util/layout-algorithms/swimlanes/phase2.laneAwareCompact.ts\nfunction topoSortByGenerationIfAcyclic(g) {\n const indeg = buildInDegreeMap(g);\n const adj = buildSortedSuccessorMap(g);\n let frontier = sortedZeroInDegreeNodes(indeg);\n const order = [];\n while (frontier.length > 0) {\n const nextFrontier = [];\n for (const u of frontier) {\n order.push(u);\n for (const v of adj.get(u) ?? []) {\n indeg.set(v, (indeg.get(v) ?? 0) - 1);\n if ((indeg.get(v) ?? 0) === 0) {\n nextFrontier.push(v);\n }\n }\n }\n frontier = nextFrontier.sort((a, b) => a.localeCompare(b));\n }\n return order.length === g.nodes.length ? order : null;\n}\n__name(topoSortByGenerationIfAcyclic, \"topoSortByGenerationIfAcyclic\");\nfunction assignLayers_LaneAwareCompact(gAcyclic, opts) {\n const g = normalizeGraph(gAcyclic);\n const order = opts?.direction === \"LR\" ? topoSortByGenerationIfAcyclic(g) ?? [...g.nodes].sort() : topoSortIfAcyclic(g) ?? [...g.nodes].sort();\n const topLaneOf = createTopLaneResolver(g);\n const laneOf = /* @__PURE__ */ __name((id) => topLaneOf(id) ?? id, \"laneOf\");\n const rankOf = /* @__PURE__ */ Object.create(null);\n const nextFree = /* @__PURE__ */ new Map();\n const edgeWeight = /* @__PURE__ */ __name((u, v) => {\n const ignoreCrossLane = opts?.ignoreCrossLaneEdges ?? true;\n if (ignoreCrossLane) {\n return laneOf(u) === laneOf(v) ? 1 : 0;\n }\n return 1;\n }, \"edgeWeight\");\n for (const v of order) {\n const node = g.nodeById.get(v);\n if (node?.isGroup) {\n continue;\n }\n const preds = incoming(g, v);\n let base = 0;\n if (preds.length > 0) {\n for (const e of preds) {\n const u = e.src;\n const ru = rankOf[u] ?? 0;\n base = Math.max(base, ru + edgeWeight(u, v));\n }\n }\n const lane = laneOf(v);\n const nf = nextFree.get(lane) ?? 0;\n const L = Math.max(base, nf);\n rankOf[v] = L;\n nextFree.set(lane, L + 1);\n }\n const layers = buildLayersFromRanks(g, order, rankOf, { skipGroups: true });\n return { layers, rankOf, dummy: /* @__PURE__ */ new Set() };\n}\n__name(assignLayers_LaneAwareCompact, \"assignLayers_LaneAwareCompact\");\n\n// src/rendering-util/layout-algorithms/swimlanes/phase2.dummies.ts\nfunction makeProperLayering(layering, gAcyclic) {\n const g = normalizeGraph(gAcyclic);\n const { rankOf } = layering;\n const layers = layering.layers.map((l) => [...l]);\n const dummy = new Set(layering.dummy ? [...layering.dummy] : []);\n let dummySeq = 0;\n const nodeById = new Map(g.nodeById);\n const addDummyAt = /* @__PURE__ */ __name((L) => {\n const id = `placeholder-${dummySeq++}`;\n const dn = { id, isGroup: false, isDummy: true, width: 0, height: 0 };\n nodeById.set(id, dn);\n dummy.add(id);\n while (layers.length <= L) {\n layers.push([]);\n }\n layers[L].push(id);\n rankOf[id] = L;\n return id;\n }, \"addDummyAt\");\n const edgesSorted = [...g.edges].sort(\n (a, b) => a.id === b.id ? a.src === b.src ? a.dst.localeCompare(b.dst) : a.src.localeCompare(b.src) : a.id.localeCompare(b.id)\n );\n const newEdges = [];\n for (const e of edgesSorted) {\n const rU = rankOf[e.src] ?? 0;\n const rV = rankOf[e.dst] ?? 0;\n if (rV - rU <= 1) {\n newEdges.push(e);\n continue;\n }\n let prev = e.src;\n for (let L = rU + 1, k = 0; L < rV; L++, k++) {\n const d = addDummyAt(L);\n newEdges.push({ id: `${e.id}#${k}`, src: prev, dst: d, weight: e.weight, ref: e.ref });\n prev = d;\n }\n const lastIndex = rV - rU - 2;\n newEdges.push({\n id: `${e.id}#${Math.max(lastIndex + 1, 0)}`,\n src: prev,\n dst: e.dst,\n weight: e.weight,\n ref: e.ref\n });\n }\n const nodes = [...g.nodes, ...[...dummy].filter((id) => !g.nodes.includes(id))];\n const graphWithDummies = { nodes, edges: newEdges, layout: g.layout, nodeById };\n return { layering: { layers, rankOf, dummy }, graphWithDummies };\n}\n__name(makeProperLayering, \"makeProperLayering\");\n\n// src/rendering-util/layout-algorithms/swimlanes/phase3.ordering.ts\nfunction median(values) {\n const n = values.length;\n if (n === 0) {\n return Number.POSITIVE_INFINITY;\n }\n const a = [...values].sort((x, y) => x - y);\n if (n % 2 === 1) {\n return a[(n - 1) / 2];\n }\n return 0.5 * (a[n / 2 - 1] + a[n / 2]);\n}\n__name(median, \"median\");\nfunction barycenter(values) {\n if (values.length === 0) {\n return Number.POSITIVE_INFINITY;\n }\n const s = values.reduce((acc, v) => acc + v, 0);\n return s / values.length;\n}\n__name(barycenter, \"barycenter\");\nfunction neighborPositionsFor(targetNodes, fixedIndex, edges, direction) {\n const neighborPositions = /* @__PURE__ */ new Map();\n for (const v of targetNodes) {\n neighborPositions.set(v, []);\n }\n for (const e of edges) {\n if (direction === \"down\") {\n if (fixedIndex.has(e.src) && neighborPositions.has(e.dst)) {\n neighborPositions.get(e.dst).push(fixedIndex.get(e.src));\n }\n } else if (fixedIndex.has(e.dst) && neighborPositions.has(e.src)) {\n neighborPositions.get(e.src).push(fixedIndex.get(e.dst));\n }\n }\n return neighborPositions;\n}\n__name(neighborPositionsFor, \"neighborPositionsFor\");\nfunction currentOrderTieBreak(a, b, currentLayerIndex) {\n const ia = currentLayerIndex.get(a) ?? 0;\n const ib = currentLayerIndex.get(b) ?? 0;\n return ia !== ib ? ia - ib : a.localeCompare(b);\n}\n__name(currentOrderTieBreak, \"currentOrderTieBreak\");\nfunction countCrossingsBetweenAdjacent2(upper, lower, edges) {\n const upperSet = new Set(upper);\n const lowerSet = new Set(lower);\n const upperIndex = buildLayerIndex(upper);\n const lowerIndex = buildLayerIndex(lower);\n const pairs = [];\n for (const e of edges) {\n if (upperSet.has(e.src) && lowerSet.has(e.dst)) {\n pairs.push({ u: upperIndex.get(e.src), v: lowerIndex.get(e.dst) });\n }\n }\n pairs.sort((a, b) => a.u === b.u ? a.v - b.v : a.u - b.u);\n const vs = pairs.map((p) => p.v);\n return countInversions(vs);\n}\n__name(countCrossingsBetweenAdjacent2, \"countCrossingsBetweenAdjacent\");\nfunction sortByHeuristic(nodes, neighborPositions, currentLayerIndex) {\n return [...nodes].sort((a, b) => {\n const sa = median(neighborPositions.get(a) ?? []);\n const sb = median(neighborPositions.get(b) ?? []);\n if (sa === sb) {\n return currentOrderTieBreak(a, b, currentLayerIndex);\n }\n if (!isFinite(sa)) {\n return 1;\n }\n if (!isFinite(sb)) {\n return -1;\n }\n return sa - sb;\n });\n}\n__name(sortByHeuristic, \"sortByHeuristic\");\nfunction reorderLayer(fixedLayer, targetLayer, edges, direction, topLaneOf, laneOrder) {\n const fixedIndex = buildLayerIndex(fixedLayer);\n const currIndex = buildLayerIndex(targetLayer);\n const neighborPositions = neighborPositionsFor(targetLayer, fixedIndex, edges, direction);\n if (!topLaneOf || !laneOrder || laneOrder.length === 0) {\n return sortByHeuristic(targetLayer, neighborPositions, currIndex);\n }\n const byLane = /* @__PURE__ */ new Map();\n for (const id of targetLayer) {\n const lane = topLaneOf(id);\n const arr = byLane.get(lane) ?? [];\n arr.push(id);\n byLane.set(lane, arr);\n }\n const result = [];\n for (const lane of laneOrder) {\n const nodesInLane = byLane.get(lane);\n if (!nodesInLane || nodesInLane.length === 0) {\n continue;\n }\n const sorted = sortByHeuristic(nodesInLane, neighborPositions, currIndex);\n result.push(...sorted);\n }\n const nullNodes = byLane.get(null);\n if (nullNodes && nullNodes.length > 0) {\n const sorted = sortByHeuristic(nullNodes, neighborPositions, currIndex);\n for (const nid of sorted) {\n const bc = barycenter(neighborPositions.get(nid) ?? []);\n let bestIdx = result.length;\n if (isFinite(bc)) {\n for (const [i, rid] of result.entries()) {\n const rBc = barycenter(neighborPositions.get(rid) ?? []);\n if (bc < rBc) {\n bestIdx = i;\n break;\n }\n }\n }\n result.splice(bestIdx, 0, nid);\n }\n }\n return result;\n}\n__name(reorderLayer, \"reorderLayer\");\nfunction transposeImprove(upper, current, edges, next, topLaneOf) {\n const best = [...current];\n const upperSet = new Set(upper);\n const layerSet = new Set(current);\n const nextSet = next ? new Set(next) : null;\n const edgesIn = edges.filter((e) => upperSet.has(e.src) && layerSet.has(e.dst));\n const edgesOut = nextSet ? edges.filter((e) => layerSet.has(e.src) && nextSet.has(e.dst)) : void 0;\n const crossingScore = /* @__PURE__ */ __name((order) => {\n let score = countCrossingsBetweenAdjacent2(upper, order, edgesIn);\n if (edgesOut && next) {\n score += countCrossingsBetweenAdjacent2(order, next, edgesOut);\n }\n return score;\n }, \"crossingScore\");\n const laneOf = topLaneOf ? /* @__PURE__ */ new Map() : null;\n if (topLaneOf && laneOf) {\n for (const id of current) {\n laneOf.set(id, topLaneOf(id));\n }\n }\n let improved = true;\n let bestScore = crossingScore(best);\n while (improved) {\n improved = false;\n for (let i = 0; i + 1 < best.length; i++) {\n if (laneOf) {\n const laneA = laneOf.get(best[i]);\n const laneB = laneOf.get(best[i + 1]);\n if (laneA !== laneB) {\n continue;\n }\n }\n const prev = bestScore;\n [best[i], best[i + 1]] = [best[i + 1], best[i]];\n const nextScore = crossingScore(best);\n if (nextScore < prev) {\n bestScore = nextScore;\n improved = true;\n } else {\n [best[i], best[i + 1]] = [best[i + 1], best[i]];\n }\n }\n }\n return best;\n}\n__name(transposeImprove, \"transposeImprove\");\nfunction orderLayers(layering, gWithDummies, opts) {\n const layers = layering.layers.map((l) => [...l]);\n const edges = gWithDummies.edges;\n const topLaneOf = createTopLaneResolver(gWithDummies);\n const laneOrder = resolveTopLaneOrder(gWithDummies, opts?.laneOrder);\n for (let s = 0; s < 3; s++) {\n for (let i = 1; i < layers.length; i++) {\n layers[i] = reorderLayer(layers[i - 1], layers[i], edges, \"down\", topLaneOf, laneOrder);\n layers[i] = transposeImprove(layers[i - 1], layers[i], edges, layers[i + 1], topLaneOf);\n }\n for (let i = layers.length - 2; i >= 0; i--) {\n layers[i] = reorderLayer(layers[i + 1], layers[i], edges, \"up\", topLaneOf, laneOrder);\n layers[i] = transposeImprove(layers[i + 1], layers[i], edges, layers[i - 1], topLaneOf);\n }\n }\n return { layers };\n}\n__name(orderLayers, \"orderLayers\");\n\n// src/rendering-util/layout-algorithms/swimlanes/phase4.coordinates.ts\nfunction assignCoordinates(ordered, gWithDummies, opts) {\n const layerGap = opts?.layerGap ?? COORDINATES.DEFAULT_LAYER_GAP;\n const nodeGap = opts?.nodeGap ?? COORDINATES.DEFAULT_NODE_GAP;\n const laneGap = opts?.laneGap ?? nodeGap * 2;\n const direction = opts?.direction ?? \"TB\";\n const isHorizontal = direction === \"LR\" || direction === \"RL\";\n const layers = ordered.layers;\n const x = /* @__PURE__ */ Object.create(null);\n const y = /* @__PURE__ */ Object.create(null);\n const getNode = /* @__PURE__ */ __name((id) => gWithDummies.nodeById.get(id), \"getNode\");\n const getWidth = /* @__PURE__ */ __name((id) => getNode(id)?.width ?? 0, \"getWidth\");\n const getHeight = /* @__PURE__ */ __name((id) => getNode(id)?.height ?? 0, \"getHeight\");\n const topLaneOf = createTopLaneResolver(gWithDummies);\n const laneOrderGlobal = resolveTopLaneOrder(gWithDummies, opts?.laneOrder);\n const layerHeights = layers.map(\n (layer) => layer.reduce((m, v) => Math.max(m, getHeight(v)), 0)\n );\n const extraLayerGaps = [];\n if (isHorizontal) {\n for (let i = 0; i + 1 < layers.length; i++) {\n const thisLayerMaxWidth = layers[i].reduce((m, v) => Math.max(m, getWidth(v)), 0);\n const nextLayerMaxWidth = layers[i + 1].reduce((m, v) => Math.max(m, getWidth(v)), 0);\n const thisLayerMaxHeight = layerHeights[i];\n const nextLayerMaxHeight = layerHeights[i + 1];\n const normalSpacing = thisLayerMaxHeight / 2 + nextLayerMaxHeight / 2;\n const requiredSpacing = (thisLayerMaxWidth + nextLayerMaxWidth) / 2;\n const extraNeeded = Math.max(0, requiredSpacing - normalSpacing - layerGap);\n extraLayerGaps.push(extraNeeded);\n }\n }\n const lanesUsedSet = /* @__PURE__ */ new Set();\n for (const layer of layers) {\n for (const id of layer) {\n lanesUsedSet.add(topLaneOf(id));\n }\n }\n const hasNullLane = lanesUsedSet.has(null);\n const lanesUsed = laneOrderGlobal.filter((L) => lanesUsedSet.has(L));\n const laneOrderColumns = [...hasNullLane ? [null] : [], ...lanesUsed];\n const laneWidth = /* @__PURE__ */ Object.create(null);\n for (const L of lanesUsed) {\n laneWidth[L] = 0;\n }\n if (hasNullLane) {\n laneWidth.null = 0;\n }\n for (const layer of layers) {\n const perLane = /* @__PURE__ */ Object.create(null);\n const nullIds = [];\n for (const id of layer) {\n const L = topLaneOf(id);\n if (L === null) {\n nullIds.push(id);\n } else {\n (perLane[L] ||= []).push(id);\n }\n }\n for (const [L, ids] of Object.entries(perLane)) {\n const total = ids.reduce((s, id) => s + getWidth(id), 0) + nodeGap * Math.max(0, ids.length - 1);\n laneWidth[L] = Math.max(laneWidth[L] ?? 0, total);\n }\n if (hasNullLane && nullIds.length) {\n const totalNull = nullIds.reduce((s, id) => s + getWidth(id), 0) + nodeGap * Math.max(0, nullIds.length - 1);\n laneWidth.null = Math.max(laneWidth.null ?? 0, totalNull);\n }\n }\n const centerX = /* @__PURE__ */ new Map();\n {\n const widths = laneOrderColumns.map(\n (L) => (L === null ? laneWidth.null : laneWidth[L]) ?? 0\n );\n const totalW = widths.reduce((a, b) => a + b, 0) + laneGap * Math.max(0, laneOrderColumns.length - 1);\n let cursor = -totalW / 2;\n for (let i = 0; i < laneOrderColumns.length; i++) {\n const L = laneOrderColumns[i];\n const w = widths[i] ?? 0;\n const cx = cursor + w / 2;\n centerX.set(L, cx);\n cursor += w;\n if (i < laneOrderColumns.length - 1) {\n cursor += laneGap;\n }\n }\n }\n let yOffset = 0;\n for (const [li, layer] of layers.entries()) {\n const layerH = layerHeights[li] ?? 0;\n const byLane = /* @__PURE__ */ new Map();\n for (const id of layer) {\n const laneId = topLaneOf(id);\n const arr = byLane.get(laneId) ?? [];\n arr.push(id);\n byLane.set(laneId, arr);\n }\n for (const L of laneOrderColumns) {\n const nodesInLane = byLane.get(L) ?? [];\n if (nodesInLane.length === 0) {\n continue;\n }\n const cx = centerX.get(L);\n if (nodesInLane.length === 1) {\n const id = nodesInLane[0];\n x[id] = cx;\n y[id] = yOffset + layerH / 2;\n } else {\n const widths = nodesInLane.map((id) => getWidth(id));\n const total = widths.reduce((a, b) => a + b, 0) + nodeGap * (nodesInLane.length - 1);\n let start = cx - total / 2;\n for (const [i, id] of nodesInLane.entries()) {\n const w = widths[i];\n x[id] = start + w / 2;\n y[id] = yOffset + layerH / 2;\n start += w + nodeGap;\n }\n }\n }\n const extraGap = extraLayerGaps[li] ?? 0;\n yOffset += layerH + layerGap + extraGap;\n }\n const byRef = /* @__PURE__ */ new Map();\n for (const e of gWithDummies.edges) {\n const rid = e.ref.id;\n if (!byRef.has(rid)) {\n byRef.set(rid, []);\n }\n byRef.get(rid).push(e);\n }\n for (const [, chainEdges] of byRef) {\n if (chainEdges.length === 0) {\n continue;\n }\n const ref = chainEdges[0].ref;\n const src = ref.start;\n const dst = ref.end;\n if (src == null || dst == null) {\n continue;\n }\n const midX = Math.round(((x[src] ?? 0) + (x[dst] ?? 0)) / 2);\n const involved = /* @__PURE__ */ new Set();\n for (const e of chainEdges) {\n involved.add(e.src);\n involved.add(e.dst);\n }\n for (const vid of involved) {\n if (vid === src || vid === dst) {\n continue;\n }\n const node = gWithDummies.nodeById.get(vid);\n if (node?.isDummy) {\n x[vid] = midX;\n }\n }\n }\n return { x, y };\n}\n__name(assignCoordinates, \"assignCoordinates\");\n\n// src/rendering-util/layout-algorithms/swimlanes/laneOrdering.ts\nvar AUTOMATIC_LANE_ORDERING_RESTARTS = 8;\nfunction hashString(input) {\n let hash = 2166136261;\n for (let i = 0; i < input.length; i++) {\n hash ^= input.charCodeAt(i);\n hash = Math.imul(hash, 16777619);\n }\n return hash >>> 0;\n}\n__name(hashString, \"hashString\");\nfunction mulberry32(seed) {\n let state = seed >>> 0;\n return () => {\n state += 1831565813;\n let t = state;\n t = Math.imul(t ^ t >>> 15, t | 1);\n t ^= t + Math.imul(t ^ t >>> 7, t | 61);\n return ((t ^ t >>> 14) >>> 0) / 4294967296;\n };\n}\n__name(mulberry32, \"mulberry32\");\nfunction deterministicShuffle(order, seed) {\n const shuffled = [...order];\n const random = mulberry32(seed);\n for (let i = shuffled.length - 1; i > 0; i--) {\n const j = Math.floor(random() * (i + 1));\n [shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];\n }\n return shuffled;\n}\n__name(deterministicShuffle, \"deterministicShuffle\");\nfunction sourceDistance(order, sourceIndex) {\n let distance = 0;\n for (const [index, laneId] of order.entries()) {\n distance += Math.abs(index - (sourceIndex.get(laneId) ?? index));\n }\n return distance;\n}\n__name(sourceDistance, \"sourceDistance\");\nfunction laneArrangementCost(order, weights) {\n const position = /* @__PURE__ */ new Map();\n for (const [index, laneId] of order.entries()) {\n position.set(laneId, index);\n }\n let cost = 0;\n for (const { a, b, weight } of weights) {\n const ai = position.get(a);\n const bi = position.get(b);\n if (ai == null || bi == null) {\n continue;\n }\n cost += weight * Math.abs(ai - bi);\n }\n return cost;\n}\n__name(laneArrangementCost, \"laneArrangementCost\");\nfunction buildWeightedLaneEdges(g) {\n const sourceOrder = buildTopLaneOrder(g);\n if (sourceOrder.length < 2) {\n return [];\n }\n const sourceIndex = new Map(sourceOrder.map((laneId, index) => [laneId, index]));\n const topLaneOf = createTopLaneResolver(g);\n const weights = /* @__PURE__ */ new Map();\n for (const edge of g.layout.edges ?? []) {\n if (edge.isLayoutOnly) {\n continue;\n }\n const src = typeof edge.start === \"string\" ? edge.start : void 0;\n const dst = typeof edge.end === \"string\" ? edge.end : void 0;\n if (!src || !dst || !g.nodeById.has(src) || !g.nodeById.has(dst)) {\n continue;\n }\n const laneA = topLaneOf(src);\n const laneB = topLaneOf(dst);\n if (!laneA || !laneB || laneA === laneB) {\n continue;\n }\n const ia = sourceIndex.get(laneA);\n const ib = sourceIndex.get(laneB);\n if (ia == null || ib == null) {\n continue;\n }\n const [a, b] = ia <= ib ? [laneA, laneB] : [laneB, laneA];\n const key = `${a}\\0${b}`;\n const existing = weights.get(key);\n if (existing) {\n existing.weight++;\n } else {\n weights.set(key, { a, b, weight: 1 });\n }\n }\n return [...weights.values()];\n}\n__name(buildWeightedLaneEdges, \"buildWeightedLaneEdges\");\nfunction greedySwitch(startOrder, weights, sourceIndex) {\n const order = [...startOrder];\n let cost = laneArrangementCost(order, weights);\n let changed = true;\n let sweeps = 0;\n const maxSweeps = Math.max(1, order.length);\n while (changed && sweeps < maxSweeps) {\n changed = false;\n sweeps++;\n for (let i = 0; i + 1 < order.length; i++) {\n [order[i], order[i + 1]] = [order[i + 1], order[i]];\n const nextCost = laneArrangementCost(order, weights);\n if (nextCost < cost) {\n cost = nextCost;\n changed = true;\n } else {\n [order[i], order[i + 1]] = [order[i + 1], order[i]];\n }\n }\n }\n return {\n order,\n cost,\n sourceDistance: sourceDistance(order, sourceIndex)\n };\n}\n__name(greedySwitch, \"greedySwitch\");\nfunction isBetterCandidate(candidate, best) {\n if (candidate.cost !== best.cost) {\n return candidate.cost < best.cost;\n }\n return candidate.sourceDistance < best.sourceDistance;\n}\n__name(isBetterCandidate, \"isBetterCandidate\");\nfunction seedForRestart(sourceOrder, weights, restartIndex) {\n const weightSignature = [...weights].sort((a, b) => a.a === b.a ? a.b.localeCompare(b.b) : a.a.localeCompare(b.a)).map(({ a, b, weight }) => `${a}:${b}:${weight}`).join(\"|\");\n return hashString(`${sourceOrder.join(\"|\")}#${weightSignature}#${restartIndex}`);\n}\n__name(seedForRestart, \"seedForRestart\");\nfunction optimizeTopLaneOrder(g, opts = {}) {\n const sourceOrder = buildTopLaneOrder(g);\n if (sourceOrder.length < 2) {\n return sourceOrder;\n }\n const weights = buildWeightedLaneEdges(g);\n if (weights.length === 0) {\n return sourceOrder;\n }\n const sourceIndex = new Map(sourceOrder.map((laneId, index) => [laneId, index]));\n let best = greedySwitch(sourceOrder, weights, sourceIndex);\n const restarts = Math.max(0, opts.restarts ?? AUTOMATIC_LANE_ORDERING_RESTARTS);\n for (let i = 0; i < restarts; i++) {\n const seed = seedForRestart(sourceOrder, weights, i);\n const start = deterministicShuffle(sourceOrder, seed);\n const candidate = greedySwitch(start, weights, sourceIndex);\n if (isBetterCandidate(candidate, best)) {\n best = candidate;\n }\n }\n return best.order;\n}\n__name(optimizeTopLaneOrder, \"optimizeTopLaneOrder\");\n\n// src/rendering-util/layout-algorithms/swimlanes/pipeline.ts\nfunction sugiyamaLayout(g, opts) {\n const ignoreCrossLaneEdges = opts?.ignoreCrossLaneEdges ?? true;\n const optimizeRanksByCrossings2 = opts?.optimizeRanksByCrossings ?? true;\n const g0 = normalizeGraph(g);\n const laneOrder = opts?.automaticLaneOrdering ? optimizeTopLaneOrder(g0, { restarts: AUTOMATIC_LANE_ORDERING_RESTARTS }) : void 0;\n const cycleRes = removeCycles_DFS(g0);\n const gAcyclic = cycleRes.acyclic;\n const layering = ignoreCrossLaneEdges ? assignLayers_LaneAwareCompact(gAcyclic, {\n compactSingleInput: opts?.compactSingleInput ?? LAYERING.DEFAULT_COMPACT_SINGLE_INPUT,\n ignoreCrossLaneEdges: true,\n direction: opts?.direction\n }) : assignLayers_Gravity(gAcyclic, {\n compactSingleInput: opts?.compactSingleInput ?? LAYERING.DEFAULT_COMPACT_SINGLE_INPUT,\n ignoreCrossLaneEdges: false,\n optimizeRanksByCrossings: optimizeRanksByCrossings2\n });\n const { layering: properLayering, graphWithDummies } = makeProperLayering(layering, gAcyclic);\n const ordered = orderLayers(properLayering, graphWithDummies, { laneOrder });\n const coordinates = assignCoordinates(ordered, graphWithDummies, {\n layerGap: opts?.layerGap,\n nodeGap: opts?.nodeGap,\n direction: opts?.direction,\n laneOrder\n });\n return {\n acyclic: gAcyclic,\n reversed: cycleRes.reversed,\n layering: properLayering,\n ordered,\n coordinates\n };\n}\n__name(sugiyamaLayout, \"sugiyamaLayout\");\n\n// src/rendering-util/layout-algorithms/swimlanes/orthogonalRouter/router.ts\nvar EPS7 = PRECISION.EPSILON;\nvar NODE_PADDING = 8;\nvar HORIZONTAL_PIPE_MARGIN = 15;\nvar VERTICAL_PIPE_MARGIN = 15;\nvar ROUTING_MARGIN = 25;\nvar ANCHOR_OFFSET = 20;\nvar TRACK_SPACING = 10;\nfunction chooseOrthogonalSide(node, target, fallback) {\n const cx = node.x ?? 0;\n const cy = node.y ?? 0;\n const dx = target.x - cx;\n const dy = target.y - cy;\n const absDx = Math.abs(dx);\n const absDy = Math.abs(dy);\n if (absDx < EPS7 && absDy < EPS7) {\n return fallback;\n }\n const verticalBias = 3;\n if (absDy > EPS7 && absDy * verticalBias >= absDx) {\n return dy > 0 ? \"bottom\" : \"top\";\n }\n if (absDx > EPS7) {\n return dx > 0 ? \"right\" : \"left\";\n }\n return fallback;\n}\n__name(chooseOrthogonalSide, \"chooseOrthogonalSide\");\nfunction sharedLineEndpointCoord(line, nextLine) {\n return Math.abs(line.to - nextLine.from) < EPS7 || Math.abs(line.to - nextLine.to) < EPS7 ? line.to : line.from;\n}\n__name(sharedLineEndpointCoord, \"sharedLineEndpointCoord\");\nfunction pointOnLine(line, along) {\n return line.orient === \"vertical\" ? { x: line.coord, y: along } : { x: along, y: line.coord };\n}\n__name(pointOnLine, \"pointOnLine\");\nfunction routeEdgesOrthogonal(data, direction) {\n const nodes = data.nodes ?? [];\n const originalEdges = data.edges ?? [];\n const edges = [];\n for (const oe of originalEdges) {\n if (oe.isLayoutOnly) {\n continue;\n }\n edges.push({\n ...oe,\n __originalEdge: oe\n });\n }\n const nodeById = /* @__PURE__ */ new Map();\n const laneByNodeId = /* @__PURE__ */ new Map();\n const pipes = [];\n const isLR = direction === \"LR\";\n for (const n of nodes) {\n nodeById.set(n.id, n);\n }\n const topLevelGroups = nodes.filter((n) => n.isGroup && !n.parentId);\n for (const group of topLevelGroups) {\n const lane = { id: group.id };\n const assignLane = /* @__PURE__ */ __name((n) => {\n laneByNodeId.set(n.id, lane);\n nodes.filter((child) => child.parentId === n.id).forEach(assignLane);\n }, \"assignLane\");\n assignLane(group);\n }\n const obstacles = nodes.filter((n) => !n.isGroup && !n.isEdgeLabel).map((n) => {\n const w = n.width ?? 10;\n const h = n.height ?? 10;\n const x = n.x ?? 0;\n const y = n.y ?? 0;\n const padding = NODE_PADDING;\n return {\n nodeId: n.id,\n minX: x - w / 2 - padding,\n maxX: x + w / 2 + padding,\n minY: y - h / 2 - padding,\n maxY: y + h / 2 + padding,\n // For LR: TB x becomes LR y, so visual Y extent should be based on height\n visualXHalfExtent: isLR ? h / 2 + padding : w / 2 + padding\n };\n });\n const getOrAddPipe = /* @__PURE__ */ __name((orientation, coord, spanMin, spanMax) => {\n let pipe = pipes.find((p) => p.orientation === orientation && Math.abs(p.coord - coord) < 1);\n if (!pipe) {\n pipe = {\n id: `pipe-${orientation}-${coord.toFixed(0)}`,\n orientation,\n coord,\n spanMin,\n spanMax,\n tracks: []\n };\n pipes.push(pipe);\n }\n pipe.spanMin = Math.min(pipe.spanMin, spanMin);\n pipe.spanMax = Math.max(pipe.spanMax, spanMax);\n return pipe;\n }, \"getOrAddPipe\");\n const portForSide = /* @__PURE__ */ __name((node, side) => {\n const w = node.width ?? 10;\n const h = node.height ?? 10;\n const cx = node.x ?? 0;\n const cy = node.y ?? 0;\n switch (side) {\n case \"top\":\n return { x: cx, y: cy - h / 2 };\n case \"bottom\":\n return { x: cx, y: cy + h / 2 };\n case \"left\":\n return { x: cx - w / 2, y: cy };\n case \"right\":\n return { x: cx + w / 2, y: cy };\n }\n }, \"portForSide\");\n const getOrthogonalPort = /* @__PURE__ */ __name((node, target, isSource) => portForSide(node, chooseOrthogonalSide(node, target, isSource ? \"bottom\" : \"top\")), \"getOrthogonalPort\");\n const allRoutedSegments = [];\n const edgeSegmentIndices = [];\n const straightIntraLaneEdges = /* @__PURE__ */ new Set();\n const CROSSING_PENALTY = 1e3;\n const crossingPenalty = /* @__PURE__ */ __name((edgeIdx, from, to) => {\n if (allRoutedSegments.length === 0) {\n return 0;\n }\n const isHorizontal = Math.abs(from.y - to.y) < EPS7;\n const isVertical = Math.abs(from.x - to.x) < EPS7;\n if (!isHorizontal && !isVertical) {\n return 0;\n }\n let penalties = 0;\n if (isHorizontal) {\n const y = from.y;\n const minX = Math.min(from.x, to.x) - EPS7;\n const maxX = Math.max(from.x, to.x) + EPS7;\n if (maxX <= minX) {\n return 0;\n }\n for (const seg of allRoutedSegments) {\n if (seg.edgeIndex === edgeIdx || seg.orientation !== \"vertical\") {\n continue;\n }\n if (seg.pipe.coord < minX || seg.pipe.coord > maxX) {\n continue;\n }\n if (seg.from - EPS7 <= y && seg.to + EPS7 >= y) {\n penalties += CROSSING_PENALTY;\n }\n }\n } else if (isVertical) {\n const x = from.x;\n const minY = Math.min(from.y, to.y) - EPS7;\n const maxY = Math.max(from.y, to.y) + EPS7;\n if (maxY <= minY) {\n return 0;\n }\n for (const seg of allRoutedSegments) {\n if (seg.edgeIndex === edgeIdx || seg.orientation !== \"horizontal\") {\n continue;\n }\n if (seg.pipe.coord < minY || seg.pipe.coord > maxY) {\n continue;\n }\n if (seg.from - EPS7 <= x && seg.to + EPS7 >= x) {\n penalties += CROSSING_PENALTY;\n }\n }\n }\n return penalties;\n }, \"crossingPenalty\");\n const routingOrder = edges.map((edge, idx) => {\n if (!edge.start || !edge.end) {\n return { idx, crossLane: 0, dx: 0, dy: 0 };\n }\n const srcNode = nodeById.get(edge.start);\n const dstNode = nodeById.get(edge.end);\n const srcLane = laneByNodeId.get(edge.start);\n const dstLane = laneByNodeId.get(edge.end);\n const crossLane = srcLane && dstLane && srcLane.id !== dstLane.id ? 1 : 0;\n const dx = srcNode && dstNode ? Math.abs((dstNode.x ?? 0) - (srcNode.x ?? 0)) : 0;\n const dy = srcNode && dstNode ? Math.abs((dstNode.y ?? 0) - (srcNode.y ?? 0)) : 0;\n return { idx, crossLane, dx, dy };\n }).sort((a, b) => {\n if (a.crossLane !== b.crossLane) {\n return b.crossLane - a.crossLane;\n }\n const aDist = a.dx + a.dy;\n const bDist = b.dx + b.dy;\n if (Math.abs(aDist - bDist) > 1) {\n return aDist - bDist;\n }\n return a.idx - b.idx;\n }).map((entry) => entry.idx);\n const isSegmentBlocked = /* @__PURE__ */ __name((p1, p2, excludeStart, excludeEnd) => {\n const segMinX = Math.min(p1.x, p2.x);\n const segMaxX = Math.max(p1.x, p2.x);\n const segMinY = Math.min(p1.y, p2.y);\n const segMaxY = Math.max(p1.y, p2.y);\n const blockingObs = obstacles.find((obs) => {\n if (excludeStart && obs.nodeId === excludeStart) {\n return false;\n }\n if (excludeEnd && obs.nodeId === excludeEnd) {\n return false;\n }\n if (Math.abs(p1.x - p2.x) > EPS7) {\n return obs.minY < p1.y && obs.maxY > p1.y && obs.maxX > segMinX && obs.minX < segMaxX;\n } else {\n return obs.minX < p1.x && obs.maxX > p1.x && obs.maxY > segMinY && obs.minY < segMaxY;\n }\n });\n return !!blockingObs;\n }, \"isSegmentBlocked\");\n const portGroups = /* @__PURE__ */ new Map();\n const incidentEdgeTotals = /* @__PURE__ */ new Map();\n for (const edge of edges) {\n if (!edge.start || !edge.end || edge.start === edge.end) {\n continue;\n }\n incidentEdgeTotals.set(edge.start, (incidentEdgeTotals.get(edge.start) ?? 0) + 1);\n incidentEdgeTotals.set(edge.end, (incidentEdgeTotals.get(edge.end) ?? 0) + 1);\n }\n const determineSide = /* @__PURE__ */ __name((node, target) => chooseOrthogonalSide(node, target, \"bottom\"), \"determineSide\");\n const sideInfoByIdx = /* @__PURE__ */ new Map();\n for (const [i, e] of edges.entries()) {\n if (!e.start || !e.end || e.start === e.end) {\n continue;\n }\n if (e.points && e.points.length > 0) {\n continue;\n }\n const src = nodeById.get(e.start);\n const dst = nodeById.get(e.end);\n if (!src || !dst) {\n continue;\n }\n const dx = (dst.x ?? 0) - (src.x ?? 0);\n const dy = (dst.y ?? 0) - (src.y ?? 0);\n sideInfoByIdx.set(i, {\n edgeIdx: i,\n srcId: e.start,\n dstId: e.end,\n srcSide: determineSide(src, { x: dst.x ?? 0, y: dst.y ?? 0 }),\n dstSide: determineSide(dst, { x: src.x ?? 0, y: src.y ?? 0 }),\n absDx: Math.abs(dx),\n absDy: Math.abs(dy),\n dxSign: Math.sign(dx),\n dySign: Math.sign(dy)\n });\n }\n const preferenceStrength = /* @__PURE__ */ __name((info) => {\n if (info.srcSide === \"top\" || info.srcSide === \"bottom\") {\n return info.absDx === 0 ? Infinity : info.absDy / info.absDx;\n }\n return info.absDy === 0 ? Infinity : info.absDx / info.absDy;\n }, \"preferenceStrength\");\n const secondarySide = /* @__PURE__ */ __name((info) => {\n if (info.srcSide === \"top\" || info.srcSide === \"bottom\") {\n return info.dxSign >= 0 ? \"right\" : \"left\";\n }\n return info.dySign >= 0 ? \"bottom\" : \"top\";\n }, \"secondarySide\");\n const sourceSideGroups = /* @__PURE__ */ new Map();\n for (const info of sideInfoByIdx.values()) {\n const key = `${info.srcId}:${info.srcSide}`;\n if (!sourceSideGroups.has(key)) {\n sourceSideGroups.set(key, []);\n }\n sourceSideGroups.get(key).push(info);\n }\n const sideLoad = /* @__PURE__ */ new Map();\n const loadKey = /* @__PURE__ */ __name((nodeId, side) => `${nodeId}:${side}`, \"loadKey\");\n for (const info of sideInfoByIdx.values()) {\n sideLoad.set(\n loadKey(info.srcId, info.srcSide),\n (sideLoad.get(loadKey(info.srcId, info.srcSide)) ?? 0) + 1\n );\n sideLoad.set(\n loadKey(info.dstId, info.dstSide),\n (sideLoad.get(loadKey(info.dstId, info.dstSide)) ?? 0) + 1\n );\n }\n for (const group of sourceSideGroups.values()) {\n if (group.length < 2) {\n continue;\n }\n group.sort((a, b) => {\n const sa = preferenceStrength(a);\n const sb = preferenceStrength(b);\n if (Math.abs(sa - sb) > 1e-9) {\n return sb - sa;\n }\n return a.edgeIdx - b.edgeIdx;\n });\n for (let g = 1; g < group.length; g++) {\n const info = group[g];\n const secondary = secondarySide(info);\n const primaryLoad = sideLoad.get(loadKey(info.srcId, info.srcSide)) ?? 0;\n const secondaryLoad = sideLoad.get(loadKey(info.srcId, secondary)) ?? 0;\n if (secondaryLoad >= primaryLoad) {\n continue;\n }\n sideLoad.set(loadKey(info.srcId, info.srcSide), primaryLoad - 1);\n sideLoad.set(loadKey(info.srcId, secondary), secondaryLoad + 1);\n info.srcSide = secondary;\n }\n }\n const isDiamondNode = /* @__PURE__ */ __name((node) => {\n const shape = node?.shape;\n return shape === \"question\" || shape === \"diamond\";\n }, \"isDiamondNode\");\n const inSidesByNode = /* @__PURE__ */ new Map();\n for (const info of sideInfoByIdx.values()) {\n if (!inSidesByNode.has(info.dstId)) {\n inSidesByNode.set(info.dstId, /* @__PURE__ */ new Set());\n }\n inSidesByNode.get(info.dstId).add(info.dstSide);\n }\n for (const info of sideInfoByIdx.values()) {\n if (!isDiamondNode(nodeById.get(info.srcId))) {\n continue;\n }\n const inSides = inSidesByNode.get(info.srcId);\n if (!inSides?.has(info.srcSide)) {\n continue;\n }\n const secondary = secondarySide(info);\n if (inSides.has(secondary) || (sideLoad.get(loadKey(info.srcId, secondary)) ?? 0) > 0) {\n continue;\n }\n const primaryLoad = sideLoad.get(loadKey(info.srcId, info.srcSide)) ?? 0;\n sideLoad.set(loadKey(info.srcId, info.srcSide), Math.max(0, primaryLoad - 1));\n sideLoad.set(loadKey(info.srcId, secondary), 1);\n info.srcSide = secondary;\n }\n for (const info of sideInfoByIdx.values()) {\n const { edgeIdx: i, srcId, dstId, srcSide, dstSide } = info;\n const src = nodeById.get(srcId);\n const dst = nodeById.get(dstId);\n const srcKey = `${srcId}:${srcSide}:src`;\n const dstCoord = srcSide === \"top\" || srcSide === \"bottom\" ? dst.x ?? 0 : dst.y ?? 0;\n if (!portGroups.has(srcKey)) {\n portGroups.set(srcKey, []);\n }\n portGroups.get(srcKey).push({ edgeIdx: i, oppositeCoord: dstCoord });\n const dstKey = `${dstId}:${dstSide}:dst`;\n const srcCoord = dstSide === \"top\" || dstSide === \"bottom\" ? src.x ?? 0 : src.y ?? 0;\n if (!portGroups.has(dstKey)) {\n portGroups.set(dstKey, []);\n }\n portGroups.get(dstKey).push({ edgeIdx: i, oppositeCoord: srcCoord });\n }\n const portOffsets = /* @__PURE__ */ new Map();\n const MIN_PORT_SPACING3 = 8;\n for (const [key, group] of portGroups) {\n if (group.length < 2) {\n continue;\n }\n group.sort((a, b) => a.oppositeCoord - b.oppositeCoord);\n const parts = key.split(\":\");\n const nodeId = parts.slice(0, -2).join(\":\");\n const side = parts[parts.length - 2];\n const role = parts[parts.length - 1];\n const node = nodeById.get(nodeId);\n if (!node) {\n continue;\n }\n const isVerticalSide = side === \"left\" || side === \"right\";\n const sideLength = isVerticalSide ? node.height ?? 10 : node.width ?? 10;\n const shape = node.shape;\n const isDiamond = shape === \"question\" || shape === \"diamond\";\n const effectiveLength = isDiamond ? sideLength * 0.3 : sideLength;\n const MAX_PORT_SPACING = 20;\n const spacing = Math.min(\n MAX_PORT_SPACING,\n Math.max(MIN_PORT_SPACING3, effectiveLength / (group.length + 1))\n );\n const totalSpan = spacing * (group.length - 1);\n const startOffset = -totalSpan / 2;\n for (const [j, element] of group.entries()) {\n const offset = startOffset + j * spacing;\n const offsetKey = `${element.edgeIdx}:${role}`;\n portOffsets.set(offsetKey, offset);\n }\n }\n const edgeHasLabelNode = /* @__PURE__ */ __name((edgeIdx) => Boolean(edges[edgeIdx]?.labelNodeId), \"edgeHasLabelNode\");\n const faceHasLabelNode = /* @__PURE__ */ __name((nodeId, side) => {\n if (!nodeId) {\n return false;\n }\n return (portGroups.get(`${nodeId}:${side}:src`) ?? []).some(\n ({ edgeIdx }) => edgeHasLabelNode(edgeIdx)\n ) || (portGroups.get(`${nodeId}:${side}:dst`) ?? []).some(\n ({ edgeIdx }) => edgeHasLabelNode(edgeIdx)\n );\n }, \"faceHasLabelNode\");\n const applyPortOffset = /* @__PURE__ */ __name((basePort, side, offset) => {\n if (side === \"top\" || side === \"bottom\") {\n return { x: basePort.x + offset, y: basePort.y };\n } else {\n return { x: basePort.x, y: basePort.y + offset };\n }\n }, \"applyPortOffset\");\n const portsForEdge = /* @__PURE__ */ __name((edgeIndex, src, dst) => {\n const sideInfo = sideInfoByIdx.get(edgeIndex);\n const srcTarget = { x: dst.x ?? 0, y: dst.y ?? 0 };\n const dstTarget = { x: src.x ?? 0, y: src.y ?? 0 };\n const srcSide = sideInfo?.srcSide ?? determineSide(src, srcTarget);\n const dstSide = sideInfo?.dstSide ?? determineSide(dst, dstTarget);\n let pSrcPort = sideInfo ? portForSide(src, sideInfo.srcSide) : getOrthogonalPort(src, srcTarget, true);\n let pDstPort = sideInfo ? portForSide(dst, sideInfo.dstSide) : getOrthogonalPort(dst, dstTarget, false);\n const srcOffset = portOffsets.get(`${edgeIndex}:src`);\n const dstOffset = portOffsets.get(`${edgeIndex}:dst`);\n if (srcOffset !== void 0) {\n pSrcPort = applyPortOffset(pSrcPort, srcSide, srcOffset);\n }\n if (dstOffset !== void 0) {\n pDstPort = applyPortOffset(pDstPort, dstSide, dstOffset);\n }\n return { pSrcPort, pDstPort, srcSide, dstSide };\n }, \"portsForEdge\");\n for (const i of routingOrder) {\n const e = edges[i];\n edgeSegmentIndices[i] = [];\n if (!e.start || !e.end) {\n continue;\n }\n if (e.points && e.points.length > 0) {\n continue;\n }\n if (e.start === e.end) {\n continue;\n }\n const src = nodeById.get(e.start);\n const dst = nodeById.get(e.end);\n if (!src || !dst) {\n continue;\n }\n const {\n pSrcPort,\n pDstPort,\n srcSide: srcPortSide,\n dstSide: dstPortSide\n } = portsForEdge(i, src, dst);\n const pSrcAnchor = { ...pSrcPort };\n const pDstAnchor = { ...pDstPort };\n const srcPortIsVertical = srcPortSide === \"top\" || srcPortSide === \"bottom\";\n const dstPortIsVertical = dstPortSide === \"top\" || dstPortSide === \"bottom\";\n if (srcPortIsVertical) {\n const isBottom = pSrcPort.y > (src.y ?? 0);\n pSrcAnchor.y = isBottom ? pSrcPort.y + ANCHOR_OFFSET : pSrcPort.y - ANCHOR_OFFSET;\n } else {\n const isRight = pSrcPort.x > (src.x ?? 0);\n pSrcAnchor.x = isRight ? pSrcPort.x + ANCHOR_OFFSET : pSrcPort.x - ANCHOR_OFFSET;\n }\n if (dstPortIsVertical) {\n const isBottom = pDstPort.y > (dst.y ?? 0);\n pDstAnchor.y = isBottom ? pDstPort.y + ANCHOR_OFFSET : pDstPort.y - ANCHOR_OFFSET;\n } else {\n const isRight = pDstPort.x > (dst.x ?? 0);\n pDstAnchor.x = isRight ? pDstPort.x + ANCHOR_OFFSET : pDstPort.x - ANCHOR_OFFSET;\n }\n const isPointInObstacle = /* @__PURE__ */ __name((pt, excludeNodeIds) => {\n for (const obs of obstacles) {\n if (excludeNodeIds.includes(obs.nodeId)) {\n continue;\n }\n if (pt.x > obs.minX && pt.x < obs.maxX && pt.y > obs.minY && pt.y < obs.maxY) {\n return { inside: true, obstacle: obs };\n }\n }\n return { inside: false };\n }, \"isPointInObstacle\");\n const obstacleDetour = /* @__PURE__ */ __name((port, node, opposite, obs, portIsVertical) => {\n if (portIsVertical) {\n const leavesPositiveSide2 = port.y > (node.y ?? 0);\n const goRight = (opposite.x ?? 0) >= port.x;\n return {\n x: goRight ? obs.maxX + HORIZONTAL_PIPE_MARGIN : obs.minX - HORIZONTAL_PIPE_MARGIN,\n y: leavesPositiveSide2 ? obs.maxY + VERTICAL_PIPE_MARGIN : obs.minY - VERTICAL_PIPE_MARGIN,\n leavesPositiveSide: leavesPositiveSide2\n };\n }\n const leavesPositiveSide = port.x > (node.x ?? 0);\n const goDown = (opposite.y ?? 0) >= port.y;\n return {\n x: leavesPositiveSide ? obs.maxX + HORIZONTAL_PIPE_MARGIN : obs.minX - HORIZONTAL_PIPE_MARGIN,\n y: goDown ? obs.maxY + VERTICAL_PIPE_MARGIN : obs.minY - VERTICAL_PIPE_MARGIN,\n leavesPositiveSide\n };\n }, \"obstacleDetour\");\n let srcHandleWaypoints = [];\n const endpointIds = [e.start, e.end];\n const srcCheck = isPointInObstacle(pSrcAnchor, endpointIds);\n if (srcCheck.inside && srcCheck.obstacle) {\n const obs = srcCheck.obstacle;\n if (srcPortIsVertical) {\n const detour = obstacleDetour(pSrcPort, src, dst, obs, true);\n pSrcAnchor.x = detour.x;\n pSrcAnchor.y = detour.y;\n const gapY = detour.leavesPositiveSide ? Math.min(obs.minY - 2, pSrcPort.y + ANCHOR_OFFSET) : Math.max(obs.maxY + 2, pSrcPort.y - ANCHOR_OFFSET);\n srcHandleWaypoints = [\n { x: pSrcPort.x, y: gapY },\n // Orthogonal step in the gap\n { x: detour.x, y: gapY },\n // Horizontal detour\n { x: detour.x, y: detour.y }\n // Down past obstacle\n ];\n } else {\n const detour = obstacleDetour(pSrcPort, src, dst, obs, false);\n const gapX = detour.leavesPositiveSide ? Math.min(obs.minX - 2, pSrcPort.x + ANCHOR_OFFSET) : Math.max(obs.maxX + 2, pSrcPort.x - ANCHOR_OFFSET);\n pSrcAnchor.x = detour.x;\n pSrcAnchor.y = detour.y;\n srcHandleWaypoints = [\n { x: gapX, y: pSrcPort.y },\n // Orthogonal step in the gap\n { x: gapX, y: detour.y },\n // Vertical detour\n { x: detour.x, y: detour.y }\n // Horizontal past obstacle\n ];\n }\n }\n let dstHandleWaypoints = [];\n const dstCheck = isPointInObstacle(pDstAnchor, endpointIds);\n if (dstCheck.inside && dstCheck.obstacle) {\n const obs = dstCheck.obstacle;\n if (dstPortIsVertical) {\n const detour = obstacleDetour(pDstPort, dst, src, obs, true);\n pDstAnchor.x = detour.x;\n pDstAnchor.y = detour.y;\n dstHandleWaypoints = [\n { x: detour.x, y: detour.y },\n // From anchor position\n { x: pDstPort.x, y: detour.y }\n // Go sideways to port's X\n // Then orthogonally to port\n ];\n } else {\n const detour = obstacleDetour(pDstPort, dst, src, obs, false);\n pDstAnchor.x = detour.x;\n pDstAnchor.y = detour.y;\n dstHandleWaypoints = [\n { x: detour.x, y: detour.y },\n // From anchor position\n { x: detour.x, y: pDstPort.y }\n // Go vertically to port's Y\n ];\n }\n }\n if (srcHandleWaypoints.length === 0 && dstHandleWaypoints.length === 0) {\n const hpMargin = HORIZONTAL_PIPE_MARGIN;\n const anchorsSameX = Math.abs(pSrcAnchor.x - pDstAnchor.x) < hpMargin;\n const anchorsSameY = Math.abs(pSrcAnchor.y - pDstAnchor.y) < hpMargin;\n const hasPortOffset = portOffsets.get(`${i}:src`) !== void 0 || portOffsets.get(`${i}:dst`) !== void 0;\n const srcFaceTotal = (portGroups.get(`${e.start ?? \"\"}:${srcPortSide}:src`)?.length ?? 0) + (portGroups.get(`${e.start ?? \"\"}:${srcPortSide}:dst`)?.length ?? 0);\n const dstFaceTotal = (portGroups.get(`${e.end ?? \"\"}:${dstPortSide}:src`)?.length ?? 0) + (portGroups.get(`${e.end ?? \"\"}:${dstPortSide}:dst`)?.length ?? 0);\n const faceContested = srcFaceTotal > 1 || dstFaceTotal > 1;\n const srcIncidentTotal = incidentEdgeTotals.get(e.start ?? \"\") ?? 0;\n const dstIncidentTotal = incidentEdgeTotals.get(e.end ?? \"\") ?? 0;\n const contestedFaceHasLabel = srcFaceTotal > 1 && faceHasLabelNode(e.start, srcPortSide) || dstFaceTotal > 1 && faceHasLabelNode(e.end, dstPortSide);\n const srcContestAllowsCenteredStraight = srcFaceTotal <= 1 || srcIncidentTotal <= 2;\n const dstContestAllowsCenteredStraight = dstFaceTotal <= 1 || dstIncidentTotal <= 2;\n const canPreserveSimpleContestedStraight = faceContested && !contestedFaceHasLabel && srcContestAllowsCenteredStraight && dstContestAllowsCenteredStraight;\n if ((anchorsSameX || anchorsSameY) && !hasPortOffset && (!faceContested || canPreserveSimpleContestedStraight)) {\n const directBlocked = isSegmentBlocked(pSrcPort, pDstPort, e.start, e.end);\n if (!directBlocked) {\n e.points = [{ ...pSrcPort }, { ...pSrcAnchor }, { ...pDstAnchor }, { ...pDstPort }];\n straightIntraLaneEdges.add(i);\n const fastPathOrientation = anchorsSameY ? \"horizontal\" : \"vertical\";\n const fastPathCoord = anchorsSameY ? pSrcPort.y : pSrcPort.x;\n const fastPathFrom = anchorsSameY ? Math.min(pSrcPort.x, pDstPort.x) : Math.min(pSrcPort.y, pDstPort.y);\n const fastPathTo = anchorsSameY ? Math.max(pSrcPort.x, pDstPort.x) : Math.max(pSrcPort.y, pDstPort.y);\n const fastPathPipe = {\n id: `fast-path-${fastPathOrientation}-${fastPathCoord.toFixed(0)}-${i}`,\n orientation: fastPathOrientation,\n coord: fastPathCoord,\n spanMin: fastPathFrom,\n spanMax: fastPathTo,\n tracks: []\n };\n allRoutedSegments.push({\n edgeIndex: i,\n segmentIndex: 0,\n orientation: fastPathOrientation,\n pipe: fastPathPipe,\n trackIndex: 0,\n from: fastPathFrom,\n to: fastPathTo\n });\n continue;\n }\n }\n }\n const srcPipe = getOrAddPipe(\"vertical\", pSrcAnchor.x, pSrcAnchor.y, pSrcAnchor.y);\n pSrcAnchor.x = srcPipe.coord;\n const dstPipe = getOrAddPipe(\"vertical\", pDstAnchor.x, pDstAnchor.y, pDstAnchor.y);\n pDstAnchor.x = dstPipe.coord;\n let bbMinX = Math.min(pSrcAnchor.x, pDstAnchor.x) - 50;\n let bbMaxX = Math.max(pSrcAnchor.x, pDstAnchor.x) + 50;\n let bbMinY = Math.min(pSrcAnchor.y, pDstAnchor.y) - 50;\n let bbMaxY = Math.max(pSrcAnchor.y, pDstAnchor.y) + 50;\n for (const obs of obstacles) {\n const pathMinX = Math.min(pSrcAnchor.x, pDstAnchor.x);\n const pathMaxX = Math.max(pSrcAnchor.x, pDstAnchor.x);\n const pathMinY = Math.min(pSrcAnchor.y, pDstAnchor.y);\n const pathMaxY = Math.max(pSrcAnchor.y, pDstAnchor.y);\n const obsBlocksPath = obs.minX < pathMaxX && obs.maxX > pathMinX && obs.minY < pathMaxY && obs.maxY > pathMinY;\n if (obsBlocksPath) {\n bbMinX = Math.min(bbMinX, obs.minX - ROUTING_MARGIN);\n bbMaxX = Math.max(bbMaxX, obs.maxX + ROUTING_MARGIN);\n bbMinY = Math.min(bbMinY, obs.minY - ROUTING_MARGIN);\n bbMaxY = Math.max(bbMaxY, obs.maxY + ROUTING_MARGIN);\n }\n }\n for (const obs of obstacles) {\n if (obs.maxX < bbMinX || obs.minX > bbMaxX || obs.maxY < bbMinY || obs.minY > bbMaxY) {\n continue;\n }\n const hMargin = HORIZONTAL_PIPE_MARGIN;\n getOrAddPipe(\"horizontal\", obs.minY - hMargin, bbMinX, bbMaxX);\n getOrAddPipe(\"horizontal\", obs.maxY + hMargin, bbMinX, bbMaxX);\n const vMargin = VERTICAL_PIPE_MARGIN;\n getOrAddPipe(\"vertical\", obs.minX - vMargin, bbMinY, bbMaxY);\n getOrAddPipe(\"vertical\", obs.maxX + vMargin, bbMinY, bbMaxY);\n }\n getOrAddPipe(\"horizontal\", pSrcAnchor.y, bbMinX, bbMaxX);\n getOrAddPipe(\"horizontal\", pDstAnchor.y, bbMinX, bbMaxX);\n const hPipes = pipes.filter(\n (p) => p.orientation === \"horizontal\" && p.coord >= bbMinY && p.coord <= bbMaxY\n );\n const vPipes = pipes.filter(\n (p) => p.orientation === \"vertical\" && p.coord >= bbMinX && p.coord <= bbMaxX\n );\n const getKey = /* @__PURE__ */ __name((x, y) => `${x.toFixed(1)},${y.toFixed(1)}`, \"getKey\");\n const startKey = getKey(pSrcAnchor.x, pSrcAnchor.y);\n const endKey = getKey(pDstAnchor.x, pDstAnchor.y);\n const gScore = /* @__PURE__ */ new Map();\n const cameFrom = /* @__PURE__ */ new Map();\n const arrivalDir = /* @__PURE__ */ new Map();\n const openSet = /* @__PURE__ */ new Set();\n const openList = [];\n gScore.set(startKey, 0);\n arrivalDir.set(startKey, \"n\");\n openList.push({\n key: startKey,\n f: Math.hypot(pDstAnchor.x - pSrcAnchor.x, pDstAnchor.y - pSrcAnchor.y),\n pt: pSrcAnchor\n });\n openSet.add(startKey);\n let foundPath = [];\n const checkSegmentBlocked = /* @__PURE__ */ __name((p1, p2) => {\n return isSegmentBlocked(p1, p2, e.start, e.end);\n }, \"checkSegmentBlocked\");\n const cornerHV = { x: pDstAnchor.x, y: pSrcAnchor.y };\n const seg1HV_blocked = checkSegmentBlocked(pSrcAnchor, cornerHV);\n const seg2HV_blocked = checkSegmentBlocked(cornerHV, pDstAnchor);\n const pathHV_blocked = seg1HV_blocked || seg2HV_blocked;\n const cornerVH = { x: pSrcAnchor.x, y: pDstAnchor.y };\n const seg1VH_blocked = checkSegmentBlocked(pSrcAnchor, cornerVH);\n const seg2VH_blocked = checkSegmentBlocked(cornerVH, pDstAnchor);\n const pathVH_blocked = seg1VH_blocked || seg2VH_blocked;\n if (!pathHV_blocked) {\n if (Math.abs(pSrcAnchor.y - pDstAnchor.y) < EPS7 || Math.abs(pSrcAnchor.x - pDstAnchor.x) < EPS7) {\n foundPath = [pSrcAnchor, pDstAnchor];\n } else {\n foundPath = [pSrcAnchor, cornerHV, pDstAnchor];\n }\n } else if (!pathVH_blocked) {\n if (Math.abs(pSrcAnchor.x - pDstAnchor.x) < EPS7) {\n foundPath = [pSrcAnchor, pDstAnchor];\n } else {\n foundPath = [pSrcAnchor, cornerVH, pDstAnchor];\n }\n }\n if (foundPath.length === 0) {\n while (openList.length > 0) {\n openList.sort((a, b) => a.f - b.f);\n const current = openList.shift();\n openSet.delete(current.key);\n if (current.key === endKey) {\n let currKey = endKey;\n let currPt = pDstAnchor;\n foundPath = [currPt];\n while (cameFrom.has(currKey)) {\n const prev = cameFrom.get(currKey);\n foundPath.unshift(prev);\n currPt = prev;\n currKey = getKey(prev.x, prev.y);\n }\n break;\n }\n const cx = current.pt.x;\n const cy = current.pt.y;\n const sortedVPipes = vPipes.sort((a, b) => a.coord - b.coord);\n const vIdx = sortedVPipes.findIndex((p) => Math.abs(p.coord - cx) < 1);\n const hPipesSorted = hPipes.sort((a, b) => a.coord - b.coord);\n const hIdx = hPipesSorted.findIndex((p) => Math.abs(p.coord - cy) < 1);\n const neighbors = [];\n if (vIdx > 0) {\n neighbors.push({ x: sortedVPipes[vIdx - 1].coord, y: cy });\n }\n if (vIdx >= 0 && vIdx < sortedVPipes.length - 1) {\n neighbors.push({ x: sortedVPipes[vIdx + 1].coord, y: cy });\n }\n if (hIdx > 0) {\n neighbors.push({ x: cx, y: hPipesSorted[hIdx - 1].coord });\n }\n if (hIdx >= 0 && hIdx < hPipesSorted.length - 1) {\n neighbors.push({ x: cx, y: hPipesSorted[hIdx + 1].coord });\n }\n for (const neighbor of neighbors) {\n const minX = Math.min(cx, neighbor.x);\n const maxX = Math.max(cx, neighbor.x);\n const minY = Math.min(cy, neighbor.y);\n const maxY = Math.max(cy, neighbor.y);\n const blocked = obstacles.some((obs) => {\n if (obs.nodeId === e.start || obs.nodeId === e.end) {\n return false;\n }\n if (minX !== maxX) {\n return obs.minY < cy && obs.maxY > cy && obs.maxX > minX && obs.minX < maxX;\n } else {\n return obs.minX < cx && obs.maxX > cx && obs.maxY > minY && obs.minY < maxY;\n }\n });\n if (blocked) {\n continue;\n }\n const nKey = getKey(neighbor.x, neighbor.y);\n const dist = Math.abs(neighbor.x - cx) + Math.abs(neighbor.y - cy);\n const penalty = crossingPenalty(i, current.pt, neighbor);\n let dirPenalty = 0;\n const destDx = pDstAnchor.x - pSrcAnchor.x;\n const destDy = pDstAnchor.y - pSrcAnchor.y;\n const moveDx = neighbor.x - cx;\n const moveDy = neighbor.y - cy;\n if (destDy > 10 && moveDy < -5 || destDy < -10 && moveDy > 5) {\n dirPenalty = Math.abs(moveDy) * 100;\n }\n if (destDx > 10 && moveDx < -5 || destDx < -10 && moveDx > 5) {\n dirPenalty += Math.abs(moveDx) * 50;\n }\n let bendPenalty = 0;\n const currentDir = arrivalDir.get(current.key) ?? \"n\";\n const moveDir = Math.abs(moveDx) > EPS7 ? \"h\" : \"v\";\n if (currentDir !== \"n\" && currentDir !== moveDir) {\n bendPenalty = 50;\n }\n const stepCost = dist + penalty + dirPenalty + bendPenalty;\n const tentativeG = (gScore.get(current.key) ?? Infinity) + stepCost;\n const h = Math.abs(pDstAnchor.x - neighbor.x) + Math.abs(pDstAnchor.y - neighbor.y);\n if (tentativeG < (gScore.get(nKey) ?? Infinity)) {\n cameFrom.set(nKey, current.pt);\n gScore.set(nKey, tentativeG);\n arrivalDir.set(nKey, moveDir);\n if (!openSet.has(nKey)) {\n openList.push({ key: nKey, f: tentativeG + h, pt: neighbor });\n openSet.add(nKey);\n } else {\n const idx = openList.findIndex((x) => x.key === nKey);\n if (idx !== -1) {\n openList[idx].f = tentativeG + h;\n }\n }\n }\n }\n }\n }\n if (foundPath.length === 0) {\n foundPath = [pSrcAnchor, { x: pSrcAnchor.x, y: pDstAnchor.y }, pDstAnchor];\n }\n if (foundPath.length > 4) {\n const start = foundPath[0];\n const end = foundPath[foundPath.length - 1];\n let minX = Math.min(start.x, end.x);\n let maxX = Math.max(start.x, end.x);\n let minY = Math.min(start.y, end.y);\n let maxY = Math.max(start.y, end.y);\n for (const pt of foundPath) {\n minX = Math.min(minX, pt.x);\n maxX = Math.max(maxX, pt.x);\n minY = Math.min(minY, pt.y);\n maxY = Math.max(maxY, pt.y);\n }\n const wentRight = maxX > Math.max(start.x, end.x);\n const wentLeft = minX < Math.min(start.x, end.x);\n if (isLR) {\n const margin = VERTICAL_PIPE_MARGIN;\n if (wentRight) {\n const pathX = Math.max(start.x, end.x);\n const pathMinY = Math.min(start.y, end.y);\n const pathMaxY = Math.max(start.y, end.y);\n const detourObstacles = obstacles.filter(\n (obs) => obs.minX < pathX && obs.maxX > pathX && // obstacle's x-range contains the path x\n obs.minY < pathMaxY && obs.maxY > pathMinY\n // obstacle's y-range overlaps with path y-range\n );\n if (detourObstacles.length > 0) {\n let visualMaxX = Math.max(start.x, end.x);\n for (const obs of detourObstacles) {\n const obsCenterX = (obs.minX + obs.maxX) / 2;\n if (obs.visualXHalfExtent === void 0 || isNaN(obs.visualXHalfExtent)) {\n continue;\n }\n const visualRight = obsCenterX + obs.visualXHalfExtent + margin;\n visualMaxX = Math.max(visualMaxX, visualRight);\n }\n if (!isNaN(visualMaxX)) {\n maxX = visualMaxX;\n }\n }\n }\n if (wentLeft) {\n const detourObstacles = obstacles.filter(\n (obs) => obs.minX < Math.min(start.x, end.x) + margin && // obstacle extends past the direct path\n obs.minY < Math.max(start.y, end.y) && obs.maxY > Math.min(start.y, end.y)\n // obstacle is in Y range\n );\n if (detourObstacles.length > 0) {\n let visualMinX = Math.min(start.x, end.x);\n for (const obs of detourObstacles) {\n const obsCenterX = (obs.minX + obs.maxX) / 2;\n const visualLeft = obsCenterX - obs.visualXHalfExtent - margin;\n visualMinX = Math.min(visualMinX, visualLeft);\n }\n minX = visualMinX;\n }\n }\n }\n const findBestReturnY = /* @__PURE__ */ __name((detourX) => {\n const goingDown = end.y > start.y;\n const relevantObs = obstacles.filter((obs) => {\n const obsInXRange = Math.min(start.x, end.x) < obs.maxX && Math.max(start.x, end.x) > obs.minX;\n const obsInYRange = Math.min(start.y, end.y) < obs.maxY && Math.max(start.y, end.y) > obs.minY;\n return obsInXRange && obsInYRange;\n });\n let filteredObs = relevantObs;\n if (isLR && relevantObs.length > 0) {\n const obsAtDetourX = relevantObs.filter(\n (obs) => obs.minX < detourX && obs.maxX > detourX\n );\n if (obsAtDetourX.length > 0) {\n filteredObs = obsAtDetourX;\n }\n }\n if (filteredObs.length === 0) {\n return end.y;\n }\n const margin = HORIZONTAL_PIPE_MARGIN;\n if (goingDown) {\n const lowestObsBottom = Math.max(...filteredObs.map((obs) => obs.maxY));\n const bestY = lowestObsBottom + margin;\n if (bestY < end.y - EPS7) {\n return bestY;\n }\n } else {\n const highestObsTop = Math.min(...filteredObs.map((obs) => obs.minY));\n const bestY = highestObsTop - margin;\n if (bestY > end.y + EPS7) {\n return bestY;\n }\n }\n return end.y;\n }, \"findBestReturnY\");\n const trySimplifyWithDetourX = /* @__PURE__ */ __name((detourX) => {\n const bestY = findBestReturnY(detourX);\n const corner1 = { x: detourX, y: start.y };\n const corner2 = { x: detourX, y: bestY };\n const corner3 = { x: end.x, y: bestY };\n const seg1Blocked = checkSegmentBlocked(start, corner1);\n const seg2Blocked = checkSegmentBlocked(corner1, corner2);\n const seg3Blocked = checkSegmentBlocked(corner2, corner3);\n const seg4Blocked = bestY !== end.y ? checkSegmentBlocked(corner3, end) : false;\n if (!seg1Blocked && !seg2Blocked && !seg3Blocked && !seg4Blocked) {\n if (Math.abs(bestY - end.y) < EPS7) {\n return [start, corner1, corner2, end];\n }\n return [start, corner1, corner2, corner3, end];\n }\n return null;\n }, \"trySimplifyWithDetourX\");\n const simplified2 = wentRight && !wentLeft ? trySimplifyWithDetourX(maxX) : wentLeft && !wentRight ? trySimplifyWithDetourX(minX) : null;\n if (simplified2) {\n foundPath = simplified2;\n }\n }\n const fullPoints = [\n pSrcPort,\n ...srcHandleWaypoints,\n ...foundPath,\n ...dstHandleWaypoints.reverse(),\n // Reverse because they're stored anchor->waypoint->port\n pDstPort\n ];\n if (fullPoints.length >= 3) {\n const C = fullPoints[fullPoints.length - 1];\n const B = fullPoints[fullPoints.length - 2];\n const A = fullPoints[fullPoints.length - 3];\n const isHoriz = Math.abs(A.y - B.y) < EPS7 && Math.abs(B.y - C.y) < EPS7;\n const isVert = Math.abs(A.x - B.x) < EPS7 && Math.abs(B.x - C.x) < EPS7;\n if (isHoriz) {\n const signAB = Math.sign(B.x - A.x);\n const signAC = Math.sign(C.x - A.x);\n if (signAB !== 0 && signAB === signAC && Math.abs(B.x - A.x) > Math.abs(C.x - A.x)) {\n fullPoints.splice(-2, 1);\n }\n } else if (isVert) {\n const signAB = Math.sign(B.y - A.y);\n const signAC = Math.sign(C.y - A.y);\n if (signAB !== 0 && signAB === signAC && Math.abs(B.y - A.y) > Math.abs(C.y - A.y)) {\n fullPoints.splice(-2, 1);\n }\n }\n }\n const simplified = [fullPoints[0]];\n for (let k = 1; k < fullPoints.length - 1; k++) {\n if (k === 1) {\n simplified.push(fullPoints[k]);\n continue;\n }\n const prev = simplified[simplified.length - 1];\n const curr = fullPoints[k];\n const next = fullPoints[k + 1];\n if (Math.abs(prev.y - curr.y) < EPS7 && Math.abs(curr.y - next.y) < EPS7) {\n const dir1 = curr.x > prev.x;\n const dir2 = next.x > curr.x;\n if (dir1 !== dir2) {\n simplified.push(curr);\n continue;\n }\n continue;\n }\n if (Math.abs(prev.x - curr.x) < EPS7 && Math.abs(curr.x - next.x) < EPS7) {\n const dir1 = curr.y > prev.y;\n const dir2 = next.y > curr.y;\n if (dir1 !== dir2) {\n simplified.push(curr);\n continue;\n }\n continue;\n }\n simplified.push(curr);\n }\n simplified.push(fullPoints[fullPoints.length - 1]);\n for (let k = 0; k < simplified.length - 1; k++) {\n const p1 = simplified[k];\n const p2 = simplified[k + 1];\n const orientation = Math.abs(p1.x - p2.x) < EPS7 ? \"vertical\" : \"horizontal\";\n const coord = orientation === \"vertical\" ? p1.x : p1.y;\n const from = orientation === \"vertical\" ? Math.min(p1.y, p2.y) : Math.min(p1.x, p2.x);\n const to = orientation === \"vertical\" ? Math.max(p1.y, p2.y) : Math.max(p1.x, p2.x);\n const pipe = getOrAddPipe(orientation, coord, from, to);\n const rSeg = {\n edgeIndex: i,\n segmentIndex: k,\n orientation,\n pipe,\n trackIndex: 0,\n // Initial track\n from,\n to\n };\n allRoutedSegments.push(rSeg);\n edgeSegmentIndices[i].push(allRoutedSegments.length - 1);\n if (!pipe.tracks[0]) {\n pipe.tracks[0] = { index: 0, coord: pipe.coord, segments: [] };\n }\n pipe.tracks[0].segments.push({\n edgeIndex: i,\n segmentIndex: k,\n from,\n to\n });\n }\n }\n const segmentsOverlap = /* @__PURE__ */ __name((s1, s2) => {\n return s1.from < s2.to && s2.from < s1.to;\n }, \"segmentsOverlap\");\n const trySwapSegmentsAcrossTracks = /* @__PURE__ */ __name((s1, s2, t1, t2) => {\n const canS1GoT2 = !t2.segments.some(\n (r) => (r.edgeIndex !== s2.edgeIndex || r.segmentIndex !== s2.segmentIndex) && segmentsOverlap(r, s1)\n );\n const canS2GoT1 = !t1.segments.some(\n (r) => (r.edgeIndex !== s1.edgeIndex || r.segmentIndex !== s1.segmentIndex) && segmentsOverlap(r, s2)\n );\n if (canS1GoT2 && canS2GoT1) {\n s1.trackIndex = t2.index;\n s2.trackIndex = t1.index;\n t1.segments = [\n ...t1.segments.filter(\n (r) => r.edgeIndex !== s1.edgeIndex || r.segmentIndex !== s1.segmentIndex\n ),\n {\n edgeIndex: s2.edgeIndex,\n segmentIndex: s2.segmentIndex,\n from: s2.from,\n to: s2.to\n }\n ];\n t2.segments = [\n ...t2.segments.filter(\n (r) => r.edgeIndex !== s2.edgeIndex || r.segmentIndex !== s2.segmentIndex\n ),\n {\n edgeIndex: s1.edgeIndex,\n segmentIndex: s1.segmentIndex,\n from: s1.from,\n to: s1.to\n }\n ];\n return true;\n }\n return false;\n }, \"trySwapSegmentsAcrossTracks\");\n const createNewTrack = /* @__PURE__ */ __name((pipe) => {\n const idx = pipe.tracks.length;\n pipe.tracks[idx] = { index: idx, coord: pipe.coord, segments: [] };\n return idx;\n }, \"createNewTrack\");\n const moveSegmentToTrack = /* @__PURE__ */ __name((seg, trackIdx) => {\n const oldTrack = seg.pipe.tracks[seg.trackIndex];\n oldTrack.segments = oldTrack.segments.filter(\n (r) => r.edgeIndex !== seg.edgeIndex || r.segmentIndex !== seg.segmentIndex\n );\n seg.trackIndex = trackIdx;\n const newTrack = seg.pipe.tracks[trackIdx];\n newTrack.segments.push({\n edgeIndex: seg.edgeIndex,\n segmentIndex: seg.segmentIndex,\n from: seg.from,\n to: seg.to\n });\n }, \"moveSegmentToTrack\");\n const moveSegmentChainToTrack = /* @__PURE__ */ __name((seg, trackIdx) => {\n const indices = edgeSegmentIndices[seg.edgeIndex];\n for (const idx of indices) {\n const s = allRoutedSegments[idx];\n if (s.pipe === seg.pipe) {\n moveSegmentToTrack(s, trackIdx);\n }\n }\n }, \"moveSegmentChainToTrack\");\n const getAdjacentSegmentsAlongEdge = /* @__PURE__ */ __name((seg) => {\n const indices = edgeSegmentIndices[seg.edgeIndex];\n const idxInList = indices.indexOf(allRoutedSegments.indexOf(seg));\n const adj = [];\n if (idxInList > 0) {\n adj.push(allRoutedSegments[indices[idxInList - 1]]);\n }\n if (idxInList < indices.length - 1) {\n adj.push(allRoutedSegments[indices[idxInList + 1]]);\n }\n return adj;\n }, \"getAdjacentSegmentsAlongEdge\");\n const haveAnyCrossing = /* @__PURE__ */ __name((segA, segB) => {\n if (segA.orientation === segB.orientation) {\n return false;\n }\n const h = segA.orientation === \"horizontal\" ? segA : segB;\n const v = segA.orientation === \"horizontal\" ? segB : segA;\n return v.pipe.coord > h.from && v.pipe.coord < h.to && h.pipe.coord > v.from && h.pipe.coord < v.to;\n }, \"haveAnyCrossing\");\n const findAvailableTrack = /* @__PURE__ */ __name((pipe, seg) => {\n for (const track of pipe.tracks) {\n const overlap = track.segments.some(\n (r) => (r.edgeIndex !== seg.edgeIndex || r.segmentIndex !== seg.segmentIndex) && segmentsOverlap(r, seg)\n );\n if (!overlap) {\n return track.index;\n }\n }\n return -1;\n }, \"findAvailableTrack\");\n const segmentsConflict = /* @__PURE__ */ __name((s1, s2) => {\n if (s1.trackIndex === s2.trackIndex) {\n return segmentsOverlap(s1, s2);\n }\n const adj1 = getAdjacentSegmentsAlongEdge(s1);\n const adj2 = getAdjacentSegmentsAlongEdge(s2);\n return adj1.some((a1) => adj2.some((a2) => haveAnyCrossing(a1, a2)));\n }, \"segmentsConflict\");\n const resolveTrackConflict = /* @__PURE__ */ __name((s1, s2, move) => {\n if (trySwapSegmentsAcrossTracks(\n s1,\n s2,\n s1.pipe.tracks[s1.trackIndex],\n s2.pipe.tracks[s2.trackIndex]\n )) {\n return;\n }\n const avail = findAvailableTrack(s1.pipe, s2);\n move(s2, avail !== -1 ? avail : createNewTrack(s1.pipe));\n }, \"resolveTrackConflict\");\n const resolveHandleConflicts = /* @__PURE__ */ __name((handles) => {\n let crossings = 0;\n for (let i = 0; i < handles.length; i++) {\n for (let j = i + 1; j < handles.length; j++) {\n const h1 = handles[i];\n const h2 = handles[j];\n if (h1.pipe !== h2.pipe) {\n continue;\n }\n if (segmentsConflict(h1, h2)) {\n crossings++;\n resolveTrackConflict(h1, h2, moveSegmentChainToTrack);\n }\n }\n }\n return crossings;\n }, \"resolveHandleConflicts\");\n const destInfoCache = /* @__PURE__ */ new Map();\n const getDestInfo = /* @__PURE__ */ __name((edgeIdx) => {\n if (destInfoCache.has(edgeIdx)) {\n return destInfoCache.get(edgeIdx);\n }\n const indices = edgeSegmentIndices[edgeIdx];\n if (indices.length === 0) {\n const info2 = { dest: 0, deviation: 0, base: 0, delta: 0 };\n destInfoCache.set(edgeIdx, info2);\n return info2;\n }\n const firstSeg = allRoutedSegments[indices[0]];\n const base = firstSeg.pipe.coord;\n let dest = base;\n for (let idx = 1; idx < indices.length; idx++) {\n const seg = allRoutedSegments[indices[idx]];\n if (seg.orientation === \"horizontal\") {\n const candidateA = seg.from;\n const candidateB = seg.to;\n dest = Math.abs(candidateA - base) > Math.abs(candidateB - base) ? candidateA : candidateB;\n break;\n }\n }\n const deviation = Math.abs(dest - base);\n const info = { dest, deviation, base, delta: dest - base };\n destInfoCache.set(edgeIdx, info);\n return info;\n }, \"getDestInfo\");\n const fixSourceHandleCrossings = /* @__PURE__ */ __name(() => {\n let crossings = 0;\n const edgesBySource = /* @__PURE__ */ new Map();\n for (const [i, e] of edges.entries()) {\n if (edgeSegmentIndices[i].length === 0) {\n continue;\n }\n if (!e.start) {\n continue;\n }\n if (!edgesBySource.has(e.start)) {\n edgesBySource.set(e.start, []);\n }\n edgesBySource.get(e.start).push(i);\n }\n const getEdgeDistance = /* @__PURE__ */ __name((edgeIdx) => {\n const edge = edges[edgeIdx];\n if (!edge.start || !edge.end) {\n return 0;\n }\n const srcNode = nodeById.get(edge.start);\n const dstNode = nodeById.get(edge.end);\n if (!srcNode || !dstNode) {\n return 0;\n }\n const dx = (dstNode.x ?? 0) - (srcNode.x ?? 0);\n const dy = (dstNode.y ?? 0) - (srcNode.y ?? 0);\n return Math.abs(dx) + Math.abs(dy);\n }, \"getEdgeDistance\");\n for (const grp of edgesBySource.values()) {\n grp.sort((a, b) => {\n const infoA = getDestInfo(a);\n const infoB = getDestInfo(b);\n if (Math.abs(infoA.deviation - infoB.deviation) > 1) {\n return infoA.deviation - infoB.deviation;\n }\n if (Math.abs(infoA.dest - infoB.dest) > 1) {\n return infoA.dest - infoB.dest;\n }\n const distA = getEdgeDistance(a);\n const distB = getEdgeDistance(b);\n if (Math.abs(distA - distB) > 1) {\n return distB - distA;\n }\n const lenA = edgeSegmentIndices[a].length;\n const lenB = edgeSegmentIndices[b].length;\n if (lenA !== lenB) {\n return lenA - lenB;\n }\n if (lenA === 1) {\n const idxA = edgeSegmentIndices[a][0];\n const idxB = edgeSegmentIndices[b][0];\n if (allRoutedSegments[idxA] && allRoutedSegments[idxB]) {\n const segA = allRoutedSegments[idxA];\n const segB = allRoutedSegments[idxB];\n const distA2 = Math.abs(segA.to - segA.from);\n const distB2 = Math.abs(segB.to - segB.from);\n if (Math.abs(distA2 - distB2) > 1) {\n return distA2 - distB2;\n }\n }\n }\n return 0;\n });\n const handles = grp.map((ei) => allRoutedSegments[edgeSegmentIndices[ei][0]]);\n crossings += resolveHandleConflicts(handles);\n }\n return crossings;\n }, \"fixSourceHandleCrossings\");\n const fixTargetHandleCrossings = /* @__PURE__ */ __name(() => {\n let crossings = 0;\n const edgesByTarget = /* @__PURE__ */ new Map();\n for (const [i, e] of edges.entries()) {\n const indices = edgeSegmentIndices[i];\n if (indices.length === 0) {\n continue;\n }\n if (!e.end) {\n continue;\n }\n if (!edgesByTarget.has(e.end)) {\n edgesByTarget.set(e.end, []);\n }\n edgesByTarget.get(e.end).push(i);\n }\n for (const grp of edgesByTarget.values()) {\n grp.sort((a, b) => {\n const getDist = /* @__PURE__ */ __name((edgeIdx) => {\n const indices = edgeSegmentIndices[edgeIdx];\n if (indices.length < 2) {\n return 0;\n }\n const prev = allRoutedSegments[indices[indices.length - 2]];\n return Math.abs(prev.to - prev.from);\n }, \"getDist\");\n const scoreA = getDist(a);\n const scoreB = getDist(b);\n if (Math.abs(scoreA - scoreB) > 0.1) {\n return scoreA - scoreB;\n }\n return a - b;\n });\n const handles = grp.map(\n (ei) => allRoutedSegments[edgeSegmentIndices[ei][edgeSegmentIndices[ei].length - 1]]\n );\n crossings += resolveHandleConflicts(handles);\n }\n return crossings;\n }, \"fixTargetHandleCrossings\");\n const fixPipeCrossings = /* @__PURE__ */ __name(() => {\n let crossings = 0;\n for (const pipe of pipes) {\n const pipeSegments = [];\n for (const t of pipe.tracks) {\n for (const ref of t.segments) {\n const idx = edgeSegmentIndices[ref.edgeIndex].find(\n (ix) => allRoutedSegments[ix].segmentIndex === ref.segmentIndex\n );\n if (idx !== void 0) {\n pipeSegments.push(allRoutedSegments[idx]);\n }\n }\n }\n pipeSegments.sort((a, b) => a.edgeIndex - b.edgeIndex || a.segmentIndex - b.segmentIndex);\n for (let i = 0; i < pipeSegments.length; i++) {\n for (let j = i + 1; j < pipeSegments.length; j++) {\n const s1 = pipeSegments[i];\n const s2 = pipeSegments[j];\n if (segmentsConflict(s1, s2)) {\n crossings++;\n resolveTrackConflict(s1, s2, moveSegmentToTrack);\n }\n }\n }\n }\n return crossings;\n }, \"fixPipeCrossings\");\n let iterations = 0;\n const MAX_ITER = 10;\n while (iterations < MAX_ITER) {\n let changed = 0;\n changed += fixSourceHandleCrossings();\n changed += fixTargetHandleCrossings();\n changed += fixPipeCrossings();\n if (changed === 0) {\n break;\n }\n iterations++;\n }\n const segmentCoords = /* @__PURE__ */ new Map();\n for (const pipe of pipes) {\n const segments = [];\n pipe.tracks.forEach((t) => {\n t.segments.forEach((s) => {\n segments.push({\n edgeIndex: s.edgeIndex,\n segmentIndex: s.segmentIndex,\n trackIndex: t.index,\n from: s.from,\n to: s.to\n });\n });\n });\n segments.sort((a, b) => a.from - b.from);\n const clusters = [];\n if (segments.length > 0) {\n let currentCluster = [segments[0]];\n let clusterEnd = segments[0].to;\n for (let k = 1; k < segments.length; k++) {\n const s = segments[k];\n if (s.from < clusterEnd) {\n currentCluster.push(s);\n clusterEnd = Math.max(clusterEnd, s.to);\n } else {\n clusters.push(currentCluster);\n currentCluster = [s];\n clusterEnd = s.to;\n }\n }\n clusters.push(currentCluster);\n }\n for (const cluster of clusters) {\n const usedTracks = /* @__PURE__ */ new Set();\n cluster.forEach((s) => usedTracks.add(s.trackIndex));\n const trackScores = /* @__PURE__ */ new Map();\n cluster.forEach((s) => {\n const info = getDestInfo(s.edgeIndex);\n trackScores.set(s.trackIndex, (trackScores.get(s.trackIndex) ?? 0) + info.delta);\n });\n const leftTracks = [...usedTracks].filter((t) => (trackScores.get(t) ?? 0) < -1);\n const rightTracks = [...usedTracks].filter((t) => (trackScores.get(t) ?? 0) > 1);\n const neutralTracks = [...usedTracks].filter((t) => Math.abs(trackScores.get(t) ?? 0) <= 1);\n leftTracks.sort((a, b) => (trackScores.get(b) ?? 0) - (trackScores.get(a) ?? 0));\n rightTracks.sort((a, b) => (trackScores.get(a) ?? 0) - (trackScores.get(b) ?? 0));\n const assignCoord = /* @__PURE__ */ __name((trackIndex, coord) => {\n cluster.filter((s) => s.trackIndex === trackIndex).forEach((s) => {\n const effectiveCoord = straightIntraLaneEdges.has(s.edgeIndex) ? pipe.coord : coord;\n segmentCoords.set(`${s.edgeIndex}-${s.segmentIndex}`, effectiveCoord);\n });\n }, \"assignCoord\");\n let leftCount = 0;\n for (const trackIndex of leftTracks) {\n leftCount++;\n assignCoord(trackIndex, pipe.coord - leftCount * TRACK_SPACING);\n }\n if (neutralTracks.length === 0 && usedTracks.size > 0) {\n const bestTrack = [...usedTracks].sort(\n (a, b) => Math.abs(trackScores.get(a) ?? 0) - Math.abs(trackScores.get(b) ?? 0)\n )[0];\n const leftIdx = leftTracks.indexOf(bestTrack);\n if (leftIdx !== -1) {\n leftTracks.splice(leftIdx, 1);\n }\n const rightIdx = rightTracks.indexOf(bestTrack);\n if (rightIdx !== -1) {\n rightTracks.splice(rightIdx, 1);\n }\n neutralTracks.push(bestTrack);\n }\n let neutralAssigned = 0;\n for (const trackIndex of neutralTracks) {\n if (neutralAssigned === 0) {\n assignCoord(trackIndex, pipe.coord);\n } else {\n const dir = neutralAssigned % 2 === 1 ? 1 : -1;\n const magnitude = Math.ceil(neutralAssigned / 2);\n assignCoord(trackIndex, pipe.coord + dir * magnitude * TRACK_SPACING * 0.5);\n }\n neutralAssigned++;\n }\n let rightCount = 0;\n for (const trackIndex of rightTracks) {\n rightCount++;\n assignCoord(trackIndex, pipe.coord + rightCount * TRACK_SPACING);\n }\n }\n }\n for (const [i, e] of edges.entries()) {\n const indices = edgeSegmentIndices[i] ?? [];\n if (indices.length === 0) {\n continue;\n }\n const newPoints = [];\n const src = nodeById.get(e.start);\n const dst = nodeById.get(e.end);\n const { pSrcPort, pDstPort } = portsForEdge(i, src, dst);\n const lines = indices.map((idx) => {\n const s = allRoutedSegments[idx];\n const coord = segmentCoords.get(`${s.edgeIndex}-${s.segmentIndex}`) ?? s.pipe.coord;\n return {\n orient: s.orientation,\n coord,\n from: s.from,\n to: s.to\n };\n });\n newPoints.push(pSrcPort);\n for (let k = 0; k < lines.length; k++) {\n const line = lines[k];\n const prevPt = newPoints[newPoints.length - 1];\n const prevAlong = line.orient === \"vertical\" ? prevPt.y : prevPt.x;\n const prevTrackCoord = line.orient === \"vertical\" ? prevPt.x : prevPt.y;\n const nextLine = lines[k + 1];\n const hasNextLine = k < lines.length - 1;\n if (Math.abs(prevTrackCoord - line.coord) > EPS7) {\n newPoints.push(pointOnLine(line, prevAlong));\n }\n if (hasNextLine && nextLine.orient === line.orient) {\n if (Math.abs(line.coord - nextLine.coord) > EPS7) {\n const junction = line.orient === \"vertical\" ? (prevAlong + nextLine.from) / 2 : sharedLineEndpointCoord(line, nextLine);\n newPoints.push(pointOnLine(line, junction), pointOnLine(nextLine, junction));\n } else if (k === 0 || k === lines.length - 2) {\n newPoints.push(pointOnLine(line, sharedLineEndpointCoord(line, nextLine)));\n }\n } else if (hasNextLine) {\n newPoints.push(pointOnLine(line, nextLine.coord));\n } else {\n const endAlong = Math.abs(line.from - prevAlong) < Math.abs(line.to - prevAlong) ? line.to : line.from;\n newPoints.push(pointOnLine(line, endAlong));\n }\n }\n const last = newPoints[newPoints.length - 1];\n if (Math.abs(last.x - pDstPort.x) > EPS7 || Math.abs(last.y - pDstPort.y) > EPS7) {\n newPoints.push(pDstPort);\n }\n const filtered = [];\n if (newPoints.length > 0) {\n filtered.push(newPoints[0]);\n }\n for (let k = 1; k < newPoints.length; k++) {\n const p = newPoints[k];\n const prev = filtered[filtered.length - 1];\n if (Math.abs(p.x - prev.x) > EPS7 || Math.abs(p.y - prev.y) > EPS7) {\n filtered.push(p);\n }\n }\n e.points = filtered;\n }\n for (const re of edges) {\n const orig = re.__originalEdge;\n if (orig && re.points) {\n orig.points = re.points;\n }\n }\n data.edges = (data.edges ?? []).filter((e) => !e.isLayoutOnly);\n const nodeBoundaryClamp = /* @__PURE__ */ __name((p, node) => {\n const cx = node.x ?? 0;\n const cy = node.y ?? 0;\n const w = node.width ?? 0;\n const h = node.height ?? 0;\n if (w <= 0 || h <= 0) {\n return p;\n }\n const left = cx - w / 2;\n const right = cx + w / 2;\n const top = cy - h / 2;\n const bottom = cy + h / 2;\n if (p.x < left || p.x > right || p.y < top || p.y > bottom) {\n return p;\n }\n const dLeft = p.x - left;\n const dRight = right - p.x;\n const dTop = p.y - top;\n const dBottom = bottom - p.y;\n const minD = Math.min(dLeft, dRight, dTop, dBottom);\n if (minD === dLeft) {\n return { x: left, y: p.y };\n }\n if (minD === dRight) {\n return { x: right, y: p.y };\n }\n if (minD === dTop) {\n return { x: p.x, y: top };\n }\n return { x: p.x, y: bottom };\n }, \"nodeBoundaryClamp\");\n for (const edge of data.edges) {\n const pts = edge.points;\n if (!pts || pts.length < 2) {\n continue;\n }\n const srcId = edge.start;\n const dstId = edge.end;\n const src = srcId ? nodeById.get(srcId) : void 0;\n const dst = dstId ? nodeById.get(dstId) : void 0;\n if (src) {\n pts[0] = nodeBoundaryClamp(pts[0], src);\n }\n if (dst) {\n pts[pts.length - 1] = nodeBoundaryClamp(pts[pts.length - 1], dst);\n }\n }\n return data;\n}\n__name(routeEdgesOrthogonal, \"routeEdgesOrthogonal\");\n\n// src/rendering-util/layout-algorithms/swimlanes/layoutCore.ts\nfunction getSwimlaneDirection(data4Layout) {\n return data4Layout.direction ?? \"TB\";\n}\n__name(getSwimlaneDirection, \"getSwimlaneDirection\");\nfunction runSwimlaneLayoutCore(data4Layout) {\n const g = toGraphView(data4Layout);\n const nodeGap = data4Layout.config.flowchart?.nodeSpacing ?? 40;\n const layerGap = data4Layout.config.flowchart?.rankSpacing ?? 100;\n const ignoreCrossLaneEdges = data4Layout.config.swimlane?.ignoreCrossLaneEdges ?? true;\n const optimizeRanksByCrossings2 = data4Layout.config.swimlane?.optimizeRanksByCrossings ?? true;\n const automaticLaneOrdering = data4Layout.config.swimlane?.automaticLaneOrdering ?? false;\n const direction = getSwimlaneDirection(data4Layout);\n const { ordered, coordinates } = sugiyamaLayout(g, {\n nodeGap,\n layerGap,\n ignoreCrossLaneEdges,\n optimizeRanksByCrossings: optimizeRanksByCrossings2,\n automaticLaneOrdering,\n direction\n });\n writeBackToLayoutData(g, ordered, coordinates, { nodeGap, layerGap });\n for (const edge of data4Layout.edges ?? []) {\n delete edge.points;\n }\n routeEdgesOrthogonal(data4Layout, direction);\n for (const edge of data4Layout.edges ?? []) {\n if (!edge.curve || edge.curve === \"basis\") {\n edge.curve = \"rounded\";\n }\n }\n postProcessSwimlaneLayout(data4Layout, direction);\n validateSwimlanesLayout(data4Layout);\n return direction;\n}\n__name(runSwimlaneLayoutCore, \"runSwimlaneLayoutCore\");\n\n// src/rendering-util/layout-algorithms/swimlanes/index.ts\nasync function render(data4Layout, svg) {\n const element = svg.select(\"g\");\n markers_default(element, data4Layout.markers, data4Layout.type, data4Layout.diagramId);\n clear3();\n clear2();\n clear();\n clear4();\n prepareLayoutForSwimlanes(data4Layout);\n const transformedData = createEdgeLabelNodes(data4Layout);\n data4Layout.nodes = transformedData.nodes;\n data4Layout.edges = transformedData.edges;\n const { groups } = await createGraphWithElements(element, data4Layout);\n runSwimlaneLayoutCore(data4Layout);\n await adjustLayout(data4Layout, groups);\n}\n__name(render, \"render\");\nexport {\n render\n};\n"],"names":["createGraphWithElements","element","data4Layout","graph","graphlib.Graph","edgesToProcess","config","getConfig2","rootGroups","clusters","edgePaths","edgeLabels2","nodesGroup","nodeElements","hasDom","node","childNodeEl","insertNode","boundingBox","edge","existingEdge","captureNodeSizes","__name","ROUNDED_CORNER_RADIUS","CORNER_EPSILON","ENDPOINT_EPSILON","buildSegmentList","points","segments","i","segmentIntersection","a1","a2","b1","b2","dxA","dyA","dxB","dyB","denom","dx","dy","tA","tB","isHorizontalSeg","seg","findEdgeIntersections","edges","crossings","edgeA","segmentsA","j","edgeB","segmentsB","si","segA","sj","segB","hit","aHoriz","bHoriz","fmt","n","rounded","pointToString","p","getArcSweepFlag","MIN_JUMP_RADIUS","applyMarkerOffsets","out","startOff","markerOffsets","a","b","ang","endOff","emitJump","jump","ux","uy","sweep","style","cx","cy","pre","post","computeRoundedCorner","prev","curr","next","radius","dx1","dy1","dx2","dy2","len1","len2","nx1","ny1","nx2","ny2","dot","clamped","angle","cutLen","rewriteEdgePath","jumps","rawPoints","bySeg","segLen","list","parts","segStartConsumed","corner","segEndStop","upcomingCorner","segJumps","k","gap","half","isStraightPath","d","curveSupportsLineHops","curve","decodeDataPoints","raw","json","parsed","pts","applyLineJumpsToSvg","edgePathsGroup","groupNode","edgeMeta","e","renderedEdges","pathById","escapedId","pathEl","jumpsByEdge","c","renderedEdge","curveHint","currentD","originalStyle","dasharrayMatch","preservedOValueS","preservedOValueE","newD","newLen","onLen","newDasharray","cleaned","adjustLayout","groups","insertCluster","positionNode","nodeById","startNode","endNode","paths","insertEdge","insertEdgeLabel","positionEdgeLabel","lineHopsConfig","jumpStyle","edgeGeometries","path","siteConfig","getConfig","subGraphTitleTotalMargin","getSubGraphTitleMargins","el","edgeLabels","x","y","pos","utils_default","log","terminalLabels","DEFAULT_SWIMLANE_ID","TOP_LANE_TITLE_BAND_HEIGHT","MIN_TOP_LANE_HORIZONTAL_PADDING","topLaneHorizontalPadding","lane","assignTopLaneTitleRect","width","height","contentTop","top","headerBottom","titleHeight","bottom","prepareLayoutForSwimlanes","layout","direction","nodes","looseNodes","defaultLane","toGraphView","src","dst","allNodes","groupNodes","nonGroupNodes","writeBackToLayoutData","g","ordered","coords","opts","nodeMap","layerGap","nodeGap","layerIndex","layer","orderIndex","id","groupBounds","topLevelGroups","group","children","minX","maxX","minY","maxY","child","cw","ch","pad","horizontalPad","verticalPad","w","h","globalMinY","globalMaxY","maxPad","contentHeight","verticalMargin","laneHeight","centerY","sortedLanes","ax","bx","laneIds","centers","baseWidths","contentWidth","count","laneWidths","u","lowerBound","upperBound","baseW","finalWidth","EDGE_LABEL_LOG_PREFIX","createEdgeLabelNodes","data","nodesToAdd","layoutOnlyEdges","sourceNode","targetNode","labelNodeId","labelLane","labelNode","toLabelVirtual","fromLabelVirtual","newNodes","newEdges","EPS","measuredNodeRect","rectFromCenterSize","nodeBoundsInfoFor","measured","samePoint","epsilon","sameX","sameY","isHorizontalSegment","isVerticalSegment","overlapLength","sameAxisSegmentOverlapLength","orthogonalSegmentsForPoints","result","horizontal","vertical","countOrthogonalBends","bends","dedupeConsecutivePoints","point","last","classifyThreeSegmentRoute","p0","p1","p2","p3","segmentBoundsOverlapRect","rect","buffer","segMinX","segMaxX","segMinY","segMaxY","pointInsideRect","rectContainsRect","outer","inner","rectsOverlap","inflateRect","margin","rectOfNodeBounds","portForRectSide","side","buildOrthogonalPortPath","srcSide","dstSide","anchor","srcH","dstH","midX","intX","intY","midY","sameDirSrc2","sameDirDst2","sameDirSrc","sameDirDst","buildSameSideTrackPath","track","collectRealNodeBounds","nodeInfoById","realNodeRects","info","collectNodeRectEntries","labelNodeRects","entry","collectLayoutNodeRects","includeEdgeLabels","getNodePairGeometry","srcId","dstId","srcInfo","dstInfo","segmentHitsAnyRect","rects","excludeIds","shrink","orthogonalSegmentsCross","endpointTolerance","s1H","s1V","s2H","s2V","horiz","vert","hY","hX1","hX2","vX","vY1","vY2","matchesHorizEndpoint","matchesVertEndpoint","sameAxisSegmentsOverlap","segmentConflictsWithAnyEdge","excludeEdge","skipDegenerateOther","other","oa","ob","orthogonalSegmentsStrictlyCross","aVert","bVert","hXmin","hXmax","vYmin","vYmax","strictlyBetween","value","lo","hi","isCollinearIntermediate","cur","simplifyPolylineOnce","changed","orthogonalizePolyline","prevPrev","deduped","simplifyPolyline","work","guard","EPS2","INSIDE_EPS","CORNER_CLEARANCE","endpointContextFor","nodeByIdMap","minPoints","candidate","segmentEnterPoint","outside","inside","r","clipEndpoint","atStart","step","outsideIndex","insideIndex","clipEdgeEndpointsToNodeBoundaries","context","clearStraightEndpointCornerConnections","snapEndpointToBoundary","endpoint","useApproachSide","toTop","firstDistinctAdjacent","endpointIndex","index","cornerClearanceRange","min","max","clampToCornerClearance","intersectRanges","ranges","range","clearanceRangeForSide","terminalSideForSegment","adjacent","yWithin","xWithin","isHorizontalSide","straightClearanceRange","start","end","srcRect","dstRect","clearStraightEndpointCornerAxis","current","cornerClearedEndpoint","moveCollinearEndpointRun","adjusted","horizontalTerminal","clearEndpointCornerConnection","borderSideForSegment","leavesOutward","from","to","collapseOwnBorderStub","side2","snapAndCollapseEndpoints","snapped","straightCleared","prepareEdgeEndpointsForRenderer","input","newPts","duplicated","buildNodeMap","resolveTopLevelGroupId","parentId","topLevelGroupId","parent","groupDepth","depth","boundsForChildren","applyGroupBounds","bounds","recomputeNestedGroupBounds","groupsByDepth","mirrorAxis","axis","contentNodes","mirror","titleRect","applyBtDirectionTransform","applyLrDirectionTransform","x0","y0","titleBandSize","totalWidth","totalHeight","avgWidth","avgHeight","horizontalScaleFactor","newX","newY","laneNodes","childrenByLane","laneId","bucket","laneBounds","globalMinXChild","globalMaxXChild","fullContentWidth","horizontalMargin","bodyWidth","laneWidth","laneLeft","centerX","laneTop","laneBottom","EPS3","MIN_PORT_SPACING","PORT_SHIFT","TRY_DELTAS","portSwapToLShape","route","isHVH","nodePair","collinearX","collinearY","delta","np0","np1","np2","newSrcY","newSrcX","firstSegDegenerate","secondSegDegenerate","firstSegConflicts","secondSegConflicts","collapseShortTerminalStub","labelRects","rawPts","nLast","endPt","penultPt","prevPt","lastDx","lastDy","lastLen","penultDx","penultDy","lastIsHoriz","lastIsVert","penultIsHoriz","penultIsVert","dstCx","dstCy","newPrev","newEnd","approachFromBelow","approachFromLeft","ownSegmentKey","selfSegments","segmentCrossesOtherEdge","oPts","beforePrev","endpointIds","labelId","lw","lh","bestMidX","bestMidY","bestLen","isHoriz","isVert","EPS_LOCAL","MIN_SHARED","segmentsFor","orthogonallyAligned","separateSharedRenderedTerminalLanes","rectIntersect","terminalLaneFor","nodeId","boundary","railEnd","projectedOverlapLength","sameTerminalFace","exactTerminalLaneConflict","nearTerminalLaneConflict","shared","faceSpan","shiftedCandidate","shift","shiftedBoundary","shiftedRailEnd","railEndIsAdjacent2","rest","railEndIsAdjacent","before","previous","laneIsStraightCollinearConnector","startId","endId","startX","startY","endX","endY","shifts","iteration","lanes","fixed","first","second","fixingNearConflict","candidates","aPreservesStraight","bPreservesStraight","nextLane","collapseRedundantRectangularDoglegs","candidateIsSafe","sourceId","targetId","candidateSegments","segment","otherPoints","candidateSegment","otherSegment","withoutDogleg","p4","terminalVerticalDogleg","terminalHorizontalDogleg","p5","verticalDogleg","horizontalDogleg","liftObstacleHuggingSameSideRails","visibleEdges","pointsFor","replacementEdge","replacement","strictCrossingCount","firstSegments","secondSegments","firstSegment","secondSegment","middleRail","middle","blockingRectsFor","rail","candidateByMovingRail","coord","simplified","currentCrossings","blockers","liftTopLaneTitleBandsAboveRails","validTitleRect","topLaneTitleFor","rawDirection","titleWidth","horizontalSegmentIntersectsTitle","topDelta","shiftLeftLaneTitleBandsLeftOfRails","leftLaneTitleFor","verticalSegmentIntersectsTitle","leftDelta","segmentLeft","swapDestinationTerminalTailsToReduceCrossings","replacementPointsFor","replacements","crossingCount","totalBends","sum","terminalTailFor","tailStart","terminal","candidateWithDestinationTail","tail","firstTurn","connector","pathHasNodeHit","pathHasSharedTrack","edgesByDestination","currentBends","bestReplacements","bestCrossings","bestBends","destinationEdges","firstTail","secondTail","firstCandidate","secondCandidate","candidateCrossings","candidateBends","reassignCrossingExternalRailChannels","endpointRectsFor","srcNode","dstNode","externalRailForSegment","endpointRects","leftBound","rightBound","topBound","bottomBound","collectExternalRails","rails","railsInteract","connectedComponents","seen","queue","component","uniqueCoordsFor","coordinateAssignmentsFor","assignments","used","visit","assignment","replacementsForAssignment","draftByEdge","firstChanged","bestDisplacement","candidateDisplacement","shortcutRedundantOrthogonalJogs","pathLength","segmentRunsAlongRectBorder","shortcutCandidatesAt","isVHV","corners","rawCandidates","key","bestEdge","bestPath","bestLength","currentPoints","currentLength","candidateLength","resolveRenderedOrthogonalCrossings","realNodes","sides","outsideTracks","edgeIndex","outwardTracksForSide","outward","tracks","channel","crossingCountBetweenSegments","crossingCountBetweenPaths","crossingSnapshot","pairs","edgeSet","edgeOrder","addEdge","firstPoints","pairCount","crossingCountWithReplacements","currentAffected","pair","replacementAffected","crossingComponents","snapshot","neighbors","firstNeighbors","secondNeighbors","components","endpointIdsFor","pairSearchGroups","componentSet","componentEndpointIds","crossingCountWithSingleReplacement","currentCrossingsByEdge","totalLength","pathHasSegmentConflict","pathSegments","pathHitsNode","pushOrthogonalCandidate","sideIsHorizontal","localTrackForSameSide","addSameSideCandidates","trackSeeds","seed","addHorizontalToVerticalCandidates","xTrack","yTrack","addVerticalToHorizontalCandidates","addHorizontalPairCandidates","yTracks","srcTrack","dstTrack","addVerticalPairCandidates","xTracks","dedupeCandidatePaths","buildCandidatesForSides","base","srcHorizontal","dstHorizontal","addVerticalDepartureOuterTrackCandidates","departure","externalXTracks","externalYTracks","targetYTracks","targetTrack","addHorizontalDepartureOuterTrackCandidates","targetXTracks","terminalPreservingOuterTrackCandidates","candidatePathsFor","srcPort","currentSegmentsByEdge","sharedTrackConflictsFor","baseSegments","conflicts","otherSegments","pairCandidatesFor","crossingCountByEdge","pairCrossingCount","firstEdge","secondEdge","conflictsOnlyWith","conflict","candidatesShareTrack","pairCandidatesAreCompatible","scorePairReplacement","pairScoreIsBetter","best","bestScoreForOptionPair","pairBest","score","bestPairedReplacement","baseBendsByEdge","baseLengthByEdge","optionsByEdge","scoringContext","crossingEdgeSet","options","option","currentEdgeBends","candidateHitsNode","candidateHasSegmentConflict","pairedReplacement","EPS4","MIN_SHARED2","simplifyDetouredEdges","ANCHOR","buildOrthogonalPathCandidates","pathConflictCount","currentEdge","includeIncidentEdges","currentStart","currentEnd","otherStart","otherEnd","otherPts","pathSegment","BEND_THRESHOLD","nearestSideOfRect","pt","dTop","dBottom","dLeft","dRight","bestDist","faceClaims","addFaceClaim","edgeId","claims","eId","faceIsClaimed","ignoreEdgeId","currentCrossingConflicts","currentNonIncidentConflicts","bestCrossingConflicts","dstPort","pathBends","pathCrossingConflicts","refreshSrc","refreshDst","EPS5","MARKER_CLEARANCE_LENGTH","MARKER_CLEARANCE_HALF_WIDTH","markerClearanceRectFor","terminalIndex","tip","x2","y2","normalizeRect","labelOverlapsOwnMarker","visiblePts","startMarker","endMarker","marker","anchorLabelsToPolyline","allEdgeSegments","foreignNodeRects","laneGroups","isGroup","rect2","LABEL_PLACEMENT_BUFFER","LABEL_LANE_MARGIN","LABEL_ENDPOINT_CLEARANCE","labelOverlapsForeignNode","buffered","nr","labelOverlapsForeignEdge","s","labelOverlapsAnything","placedLabelRects","findContainingLane","laneRect","overlapsPlacedLabel","placed","middleSegments","poolBase","labelLongAxis","rankSegments","pool","aLongAxis","bLongAxis","aFits","bFits","firstVisibleSegment","lastVisibleSegment","ALONG_SEGMENT_TS","anchorAtT","t","clamp","pointInsideRectInclusive","placementForAnchor","centeredRect","centeredLane","containingLane","clampedAnchor","clampedRect","distanceAlongSegment","labelClearsTerminalEndpoints","requiredDistance","tryPool","rankedPool","placement","findLaneContainingFallback","requireEndpointClearance","allowForeignEdgeOverlap","chosen","chosenRect","priorIdx","EPS6","MIN_PORT_SPACING2","PORT_SHIFT2","LABEL_CLEARANCE_BUFFER","pairKey","straightenCollinearSiblingDetours","labelDimById","labelClearanceFor","thisEdge","thisSrcId","thisDstId","targetPair","maxHalf","consider","dim","oSrc","oDst","targetSrc","targetDst","dstBelow","dstEast","labelShift","effectiveShift","deltas","shiftedSrc","shiftedDst","nudgeSharedInteriorSubpaths","segmentsFor2","allSegments","hasCrowdedParallelTrack","ownLabelIds","nodeCenter","sourceDetourContextFor","sourceRect","targetRect","verticalSourceDetour","sourceCenter","targetCenter","targetBelow","sourcePortY","stubY","railX","horizontalSourceDetour","targetRight","sourcePortX","stubX","railY","sourceDetourCandidate","direct","detoured","segmentsIntersect","d1x","d1y","d2x","d2y","cross","eps","validateSwimlanesLayout","issues","nodeRects","edgeSegments","edgeStart","edgeEnd","ownLabelId","crossingPairs","pairKey2","overlaps","issue","postProcessSwimlaneLayout","finalizeRenderedEdges","normalizeGraph","incoming","v","buildSuccessorMap","succs","buildSortedSuccessorMap","successors","buildInDegreeMap","indeg","sortedZeroInDegreeNodes","degree","buildPredecessorSuccessorMaps","includeEdge","preds","buildLayersFromRanks","order","rankOf","maxRank","layers","topoSortIfAcyclic","adj","buildLayerIndex","m","countInversions","values","tmp","left","right","mid","inversions","removeCycles_DFS","gn","arr","color","reversed","dfs","nodesSorted","toReverse","acycEdges","buildTopLaneMap","cache","resolve","createTopLaneResolver","topLaneMap","buildTopLaneOrder","resolveTopLaneOrder","preferredOrder","sourceOrder","sourceLaneIds","resolved","PRECISION","LAYERING","COORDINATES","buildDrivingTree","laneOf","rankHint","topoOrder","topoIndex","idx","chooseParent","rootSet","roots","ta","tb","adjacency","buildAdjacency","adjacencyList","set","componentOf","assignComponents","blocks","computeBlocks","nodeBlocks","block","preorder","postorder","walk","root","ctx","laneNode","laneA","laneB","sameLaneA","sameLaneB","rankA","rankB","idxA","idxB","componentId","stack","discovery","low","edgeStack","time","popBlock","computeSubtreeCrossCounts","tree","indexOf","parentIdx","currentIdx","childList","childIdx","maxLog","up","lcaIndex","aIdx","bIdx","diff","upA","upB","ownCounts","ru","rv","upperIdx","lowerIdx","lca","crossCounts","mergeInto","target","source","visited","accumulator","childMap","parentLayer","map","childLayer","annotateMinimumLayers","minLayer","annotate","minL","compareByRankThenId","childMin","ra","rb","emitNodesInTreeOrder","orderChildren","emitted","emit","deduplicateLayers","createChildOrderer","future","present","crossMap","ca","cb","ma","mb","item","buildMultitreeLayerOrder","rootsSorted","countCrossingsBetweenAdjacent","upper","lower","upperSet","lowerSet","li","vs","totalCrossings","expanded","rUpper","rLower","L","optimizeRanksByCrossings","initialRank","maxPasses","pass","nodesByRank","lb","old","trialLayers","adjustCrossLaneSources","topLaneOf","laneV","outEdges","hasSameLaneSucc","crossLaneCount","laneDst","crossLaneIncoming","hasSameLanePred","laneSrc","newRank","assignLayers_LongestPath","gAcyclic","compact","incAll","inc","laneU","mx","assignLayers_Gravity","revOrder","clampFeasible","desired","ub","iters","relaxOrder","nodeOrder","ps","ss","predAvg","succAvg","it","forwardChanged","backwardChanged","topoSortByGenerationIfAcyclic","frontier","nextFrontier","assignLayers_LaneAwareCompact","nextFree","edgeWeight","nf","makeProperLayering","layering","l","dummy","dummySeq","addDummyAt","dn","edgesSorted","rU","rV","lastIndex","graphWithDummies","median","barycenter","acc","neighborPositionsFor","targetNodes","fixedIndex","neighborPositions","currentOrderTieBreak","currentLayerIndex","ia","ib","countCrossingsBetweenAdjacent2","upperIndex","lowerIndex","sortByHeuristic","sa","sb","reorderLayer","fixedLayer","targetLayer","laneOrder","currIndex","byLane","nodesInLane","sorted","nullNodes","nid","bc","bestIdx","rid","rBc","transposeImprove","layerSet","nextSet","edgesIn","edgesOut","crossingScore","improved","bestScore","nextScore","orderLayers","gWithDummies","assignCoordinates","laneGap","isHorizontal","getNode","getWidth","getHeight","laneOrderGlobal","layerHeights","extraLayerGaps","thisLayerMaxWidth","nextLayerMaxWidth","thisLayerMaxHeight","nextLayerMaxHeight","normalSpacing","requiredSpacing","extraNeeded","lanesUsedSet","hasNullLane","lanesUsed","laneOrderColumns","perLane","nullIds","ids","total","totalNull","widths","cursor","yOffset","layerH","extraGap","byRef","chainEdges","ref","involved","vid","AUTOMATIC_LANE_ORDERING_RESTARTS","hashString","hash","mulberry32","state","deterministicShuffle","shuffled","random","sourceDistance","sourceIndex","distance","laneArrangementCost","weights","position","cost","weight","ai","bi","buildWeightedLaneEdges","existing","greedySwitch","startOrder","sweeps","maxSweeps","nextCost","isBetterCandidate","seedForRestart","restartIndex","weightSignature","optimizeTopLaneOrder","restarts","sugiyamaLayout","ignoreCrossLaneEdges","optimizeRanksByCrossings2","g0","cycleRes","properLayering","coordinates","EPS7","NODE_PADDING","HORIZONTAL_PIPE_MARGIN","VERTICAL_PIPE_MARGIN","ROUTING_MARGIN","ANCHOR_OFFSET","TRACK_SPACING","chooseOrthogonalSide","fallback","absDx","absDy","sharedLineEndpointCoord","line","nextLine","pointOnLine","along","routeEdgesOrthogonal","originalEdges","oe","laneByNodeId","pipes","isLR","assignLane","obstacles","padding","getOrAddPipe","orientation","spanMin","spanMax","pipe","portForSide","getOrthogonalPort","isSource","allRoutedSegments","edgeSegmentIndices","straightIntraLaneEdges","CROSSING_PENALTY","crossingPenalty","edgeIdx","isVertical","penalties","routingOrder","srcLane","dstLane","crossLane","aDist","bDist","isSegmentBlocked","excludeStart","excludeEnd","obs","portGroups","incidentEdgeTotals","determineSide","sideInfoByIdx","preferenceStrength","secondarySide","sourceSideGroups","sideLoad","loadKey","secondary","primaryLoad","secondaryLoad","isDiamondNode","shape","inSidesByNode","inSides","srcKey","dstCoord","dstKey","srcCoord","portOffsets","MIN_PORT_SPACING3","role","sideLength","effectiveLength","spacing","startOffset","offset","offsetKey","edgeHasLabelNode","faceHasLabelNode","applyPortOffset","basePort","portsForEdge","sideInfo","srcTarget","dstTarget","pSrcPort","pDstPort","srcOffset","dstOffset","srcPortSide","dstPortSide","pSrcAnchor","pDstAnchor","srcPortIsVertical","dstPortIsVertical","isBottom","isRight","isPointInObstacle","excludeNodeIds","obstacleDetour","port","opposite","portIsVertical","leavesPositiveSide2","leavesPositiveSide","goDown","srcHandleWaypoints","srcCheck","detour","gapY","gapX","dstHandleWaypoints","dstCheck","hpMargin","anchorsSameX","anchorsSameY","hasPortOffset","srcFaceTotal","dstFaceTotal","faceContested","srcIncidentTotal","dstIncidentTotal","contestedFaceHasLabel","srcContestAllowsCenteredStraight","dstContestAllowsCenteredStraight","fastPathOrientation","fastPathCoord","fastPathFrom","fastPathTo","fastPathPipe","srcPipe","dstPipe","bbMinX","bbMaxX","bbMinY","bbMaxY","pathMinX","pathMaxX","pathMinY","pathMaxY","hMargin","vMargin","hPipes","vPipes","getKey","startKey","endKey","gScore","cameFrom","arrivalDir","openSet","openList","foundPath","checkSegmentBlocked","cornerHV","seg1HV_blocked","seg2HV_blocked","pathHV_blocked","cornerVH","seg1VH_blocked","seg2VH_blocked","currKey","currPt","sortedVPipes","vIdx","hPipesSorted","hIdx","neighbor","nKey","dist","penalty","dirPenalty","destDx","destDy","moveDx","moveDy","bendPenalty","currentDir","moveDir","stepCost","tentativeG","wentRight","wentLeft","pathX","detourObstacles","visualMaxX","obsCenterX","visualRight","visualMinX","visualLeft","findBestReturnY","detourX","goingDown","relevantObs","obsInXRange","obsInYRange","filteredObs","obsAtDetourX","bestY","trySimplifyWithDetourX","corner1","corner2","corner3","seg1Blocked","seg2Blocked","seg3Blocked","seg4Blocked","simplified2","fullPoints","C","B","A","signAB","signAC","dir1","dir2","rSeg","segmentsOverlap","s1","s2","trySwapSegmentsAcrossTracks","t1","t2","canS1GoT2","canS2GoT1","createNewTrack","moveSegmentToTrack","trackIdx","oldTrack","moveSegmentChainToTrack","indices","getAdjacentSegmentsAlongEdge","idxInList","haveAnyCrossing","findAvailableTrack","segmentsConflict","adj1","adj2","resolveTrackConflict","move","avail","resolveHandleConflicts","handles","h1","h2","destInfoCache","getDestInfo","info2","dest","candidateA","candidateB","deviation","fixSourceHandleCrossings","edgesBySource","getEdgeDistance","grp","infoA","infoB","distA","distB","lenA","lenB","distA2","distB2","ei","fixTargetHandleCrossings","edgesByTarget","getDist","scoreA","scoreB","fixPipeCrossings","pipeSegments","ix","iterations","MAX_ITER","segmentCoords","currentCluster","clusterEnd","cluster","usedTracks","trackScores","leftTracks","rightTracks","neutralTracks","assignCoord","trackIndex","effectiveCoord","leftCount","bestTrack","leftIdx","rightIdx","neutralAssigned","dir","magnitude","rightCount","newPoints","lines","prevAlong","prevTrackCoord","hasNextLine","junction","endAlong","filtered","re","orig","nodeBoundaryClamp","minD","getSwimlaneDirection","runSwimlaneLayoutCore","automaticLaneOrdering","render","svg","markers_default","clear3","clear2","clear","clear4","transformedData"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"swimlanes-5IMT3BWC-CRF_hU5-.js","sources":["../../../node_modules/.pnpm/mermaid@11.16.0/node_modules/mermaid/dist/chunks/mermaid.core/swimlanes-5IMT3BWC.mjs"],"sourcesContent":["import {\n clear as clear4\n} from \"./chunk-RYQCIY6F.mjs\";\nimport {\n clear as clear2,\n edgeLabels,\n insertEdge,\n insertEdgeLabel,\n markers_default,\n terminalLabels\n} from \"./chunk-52WLFC77.mjs\";\nimport {\n clear,\n clear2 as clear3,\n insertCluster,\n insertNode,\n positionNode\n} from \"./chunk-ZGVPDNZ5.mjs\";\nimport \"./chunk-C7G6YPKG.mjs\";\nimport {\n markerOffsets\n} from \"./chunk-7BUUIJ7U.mjs\";\nimport {\n getSubGraphTitleMargins\n} from \"./chunk-OGEWGWER.mjs\";\nimport \"./chunk-Q4XR5HBZ.mjs\";\nimport \"./chunk-HOUHSVGY.mjs\";\nimport {\n utils_default\n} from \"./chunk-ICXQ74PX.mjs\";\nimport {\n getConfig,\n getConfig2\n} from \"./chunk-WYO6CB5R.mjs\";\nimport {\n log\n} from \"./chunk-X3CZISLH.mjs\";\nimport {\n __name\n} from \"./chunk-Y2CYZVJY.mjs\";\n\n// src/rendering-util/createGraph.ts\nimport * as graphlib from \"dagre-d3-es/src/graphlib/index.js\";\nasync function createGraphWithElements(element, data4Layout) {\n const graph = new graphlib.Graph({\n multigraph: true,\n compound: true\n });\n const edgesToProcess = [...data4Layout.edges];\n const config = getConfig2();\n const rootGroups = element.insert(\"g\").attr(\"class\", \"root\");\n const clusters = rootGroups.insert(\"g\").attr(\"class\", \"clusters\");\n const edgePaths = rootGroups.insert(\"g\").attr(\"class\", \"edges edgePath\");\n const edgeLabels2 = rootGroups.insert(\"g\").attr(\"class\", \"edgeLabels\");\n const nodesGroup = rootGroups.insert(\"g\").attr(\"class\", \"nodes\");\n const nodeElements = /* @__PURE__ */ new Map();\n const hasDom = element.node() != null;\n await Promise.all(\n data4Layout.nodes.map(async (node) => {\n if (node.isGroup) {\n graph.setNode(node.id, { ...node });\n } else {\n if (hasDom) {\n const childNodeEl = await insertNode(nodesGroup, node, { config, dir: node.dir });\n const boundingBox = childNodeEl.node()?.getBBox() ?? { width: 0, height: 0 };\n nodeElements.set(node.id, childNodeEl);\n node.width = boundingBox.width;\n node.height = boundingBox.height;\n }\n graph.setNode(node.id, { ...node });\n }\n })\n );\n for (const edge of edgesToProcess) {\n graph.setEdge(edge.start, edge.end, { ...edge }, edge.id);\n const edgeExists = data4Layout.edges.some((existingEdge) => existingEdge.id === edge.id);\n if (!edgeExists) {\n data4Layout.edges.push(edge);\n }\n }\n if (globalThis.mermaidCaptureSizes) {\n const { captureNodeSizes } = await import(\"./sizeCapture-X5ZJPWSS.mjs\");\n captureNodeSizes(element, data4Layout);\n }\n return {\n graph,\n groups: { clusters, edgePaths, edgeLabels: edgeLabels2, nodes: nodesGroup, rootGroups },\n nodeElements\n };\n}\n__name(createGraphWithElements, \"createGraphWithElements\");\n\n// src/rendering-util/rendering-elements/lineJump.ts\nvar ROUNDED_CORNER_RADIUS = 5;\nvar CORNER_EPSILON = 1e-5;\nvar ENDPOINT_EPSILON = 1e-6;\nfunction buildSegmentList(points) {\n const segments = [];\n for (let i = 0; i < points.length - 1; i++) {\n segments.push({ a: points[i], b: points[i + 1] });\n }\n return segments;\n}\n__name(buildSegmentList, \"buildSegmentList\");\nfunction segmentIntersection(a1, a2, b1, b2) {\n const dxA = a2.x - a1.x;\n const dyA = a2.y - a1.y;\n const dxB = b2.x - b1.x;\n const dyB = b2.y - b1.y;\n const denom = dxA * dyB - dyA * dxB;\n if (denom === 0) {\n return null;\n }\n const dx = b1.x - a1.x;\n const dy = b1.y - a1.y;\n const tA = (dx * dyB - dy * dxB) / denom;\n const tB = (dx * dyA - dy * dxA) / denom;\n if (tA <= ENDPOINT_EPSILON || tA >= 1 - ENDPOINT_EPSILON || tB <= ENDPOINT_EPSILON || tB >= 1 - ENDPOINT_EPSILON) {\n return null;\n }\n return {\n point: { x: a1.x + tA * dxA, y: a1.y + tA * dyA },\n tA,\n tB\n };\n}\n__name(segmentIntersection, \"segmentIntersection\");\nfunction isHorizontalSeg(seg) {\n return Math.abs(seg.b.x - seg.a.x) >= Math.abs(seg.b.y - seg.a.y);\n}\n__name(isHorizontalSeg, \"isHorizontalSeg\");\nfunction findEdgeIntersections(edges) {\n const crossings = [];\n for (let i = 0; i < edges.length; i++) {\n const edgeA = edges[i];\n const segmentsA = buildSegmentList(edgeA.points);\n for (let j = i + 1; j < edges.length; j++) {\n const edgeB = edges[j];\n const segmentsB = buildSegmentList(edgeB.points);\n for (const [si, segA] of segmentsA.entries()) {\n for (const [sj, segB] of segmentsB.entries()) {\n const hit = segmentIntersection(segA.a, segA.b, segB.a, segB.b);\n if (!hit) {\n continue;\n }\n const aHoriz = isHorizontalSeg(segA);\n const bHoriz = isHorizontalSeg(segB);\n const orthogonalPair = aHoriz !== bHoriz;\n const jumpOnA = orthogonalPair ? aHoriz : false;\n if (jumpOnA) {\n crossings.push({\n jumpEdgeId: edgeA.id,\n otherEdgeId: edgeB.id,\n segIndex: si,\n t: hit.tA,\n point: hit.point\n });\n } else {\n crossings.push({\n jumpEdgeId: edgeB.id,\n otherEdgeId: edgeA.id,\n segIndex: sj,\n t: hit.tB,\n point: hit.point\n });\n }\n }\n }\n }\n }\n return crossings;\n}\n__name(findEdgeIntersections, \"findEdgeIntersections\");\nfunction fmt(n) {\n const rounded = Math.round(n * 1e3) / 1e3;\n return Number.isInteger(rounded) ? `${rounded}` : `${rounded}`;\n}\n__name(fmt, \"fmt\");\nfunction pointToString(p) {\n return `${fmt(p.x)},${fmt(p.y)}`;\n}\n__name(pointToString, \"pointToString\");\nfunction getArcSweepFlag(seg) {\n const dx = seg.b.x - seg.a.x;\n const dy = seg.b.y - seg.a.y;\n if (Math.abs(dx) >= Math.abs(dy)) {\n return dx >= 0 ? 1 : 0;\n }\n return dy >= 0 ? 1 : 0;\n}\n__name(getArcSweepFlag, \"getArcSweepFlag\");\nvar MIN_JUMP_RADIUS = 1e-3;\nfunction applyMarkerOffsets(points, edge) {\n if (points.length < 2) {\n return points.map((p) => ({ ...p }));\n }\n const out = points.map((p) => ({ ...p }));\n const startOff = edge.arrowTypeStart && markerOffsets[edge.arrowTypeStart];\n if (startOff) {\n const a = points[0];\n const b = points[1];\n const ang = Math.atan2(b.y - a.y, b.x - a.x);\n out[0].x = a.x + startOff * Math.cos(ang);\n out[0].y = a.y + startOff * Math.sin(ang);\n }\n const endOff = edge.arrowTypeEnd && markerOffsets[edge.arrowTypeEnd];\n if (endOff) {\n const n = points.length;\n const a = points[n - 2];\n const b = points[n - 1];\n const ang = Math.atan2(b.y - a.y, b.x - a.x);\n out[n - 1].x = b.x - endOff * Math.cos(ang);\n out[n - 1].y = b.y - endOff * Math.sin(ang);\n }\n return out;\n}\n__name(applyMarkerOffsets, \"applyMarkerOffsets\");\nfunction emitJump(jump, ux, uy, sweep, style) {\n const cx = jump.point.x;\n const cy = jump.point.y;\n const pre = { x: cx - ux * jump.r, y: cy - uy * jump.r };\n const post = { x: cx + ux * jump.r, y: cy + uy * jump.r };\n const out = [`L${pointToString(pre)}`];\n if (style === \"arc\") {\n out.push(`A${fmt(jump.r)},${fmt(jump.r)} 0 0 ${sweep} ${pointToString(post)}`);\n } else {\n out.push(`M${pointToString(post)}`);\n }\n return out;\n}\n__name(emitJump, \"emitJump\");\nfunction computeRoundedCorner(prev, curr, next, radius) {\n const dx1 = curr.x - prev.x;\n const dy1 = curr.y - prev.y;\n const dx2 = next.x - curr.x;\n const dy2 = next.y - curr.y;\n const len1 = Math.hypot(dx1, dy1);\n const len2 = Math.hypot(dx2, dy2);\n if (len1 < CORNER_EPSILON || len2 < CORNER_EPSILON) {\n return null;\n }\n const nx1 = dx1 / len1;\n const ny1 = dy1 / len1;\n const nx2 = dx2 / len2;\n const ny2 = dy2 / len2;\n const dot = nx1 * nx2 + ny1 * ny2;\n const clamped = Math.max(-1, Math.min(1, dot));\n const angle = Math.acos(clamped);\n if (angle < CORNER_EPSILON || Math.abs(Math.PI - angle) < CORNER_EPSILON) {\n return null;\n }\n const cutLen = Math.min(radius / Math.sin(angle / 2), len1 / 2, len2 / 2);\n return {\n startX: curr.x - nx1 * cutLen,\n startY: curr.y - ny1 * cutLen,\n endX: curr.x + nx2 * cutLen,\n endY: curr.y + ny2 * cutLen,\n ctrlX: curr.x,\n ctrlY: curr.y,\n cutLen\n };\n}\n__name(computeRoundedCorner, \"computeRoundedCorner\");\nfunction rewriteEdgePath(edge, jumps, config) {\n const rawPoints = edge.points;\n if (rawPoints.length < 2) {\n return \"\";\n }\n const points = applyMarkerOffsets(rawPoints, edge);\n const rounded = edge.curve === \"rounded\";\n const segments = buildSegmentList(points);\n const bySeg = /* @__PURE__ */ new Map();\n for (const j of jumps) {\n const seg = segments[j.segIndex];\n if (!seg) {\n continue;\n }\n const segLen = Math.hypot(seg.b.x - seg.a.x, seg.b.y - seg.a.y);\n const list = bySeg.get(j.segIndex) ?? [];\n list.push({\n t: j.t,\n point: j.point,\n d: j.t * segLen,\n r: config.jumpRadius\n });\n bySeg.set(j.segIndex, list);\n }\n const parts = [`M${pointToString(points[0])}`];\n for (let i = 0; i < segments.length; i++) {\n const seg = segments[i];\n const segLen = Math.hypot(seg.b.x - seg.a.x, seg.b.y - seg.a.y);\n const ux = segLen === 0 ? 0 : (seg.b.x - seg.a.x) / segLen;\n const uy = segLen === 0 ? 0 : (seg.b.y - seg.a.y) / segLen;\n const sweep = getArcSweepFlag(seg);\n let segStartConsumed = 0;\n if (rounded && i > 0) {\n const corner = computeRoundedCorner(\n points[i - 1],\n points[i],\n points[i + 1] ?? points[i],\n ROUNDED_CORNER_RADIUS\n );\n if (corner) {\n segStartConsumed = corner.cutLen;\n }\n }\n let segEndStop = segLen;\n let upcomingCorner = null;\n if (rounded && i < segments.length - 1) {\n upcomingCorner = computeRoundedCorner(\n points[i],\n points[i + 1],\n points[i + 2] ?? points[i + 1],\n ROUNDED_CORNER_RADIUS\n );\n if (upcomingCorner) {\n segEndStop = segLen - upcomingCorner.cutLen;\n }\n }\n const segJumps = [...bySeg.get(i) ?? []].sort((a, b) => a.t - b.t);\n for (const j of segJumps) {\n j.r = Math.min(j.r, j.d - segStartConsumed, segEndStop - j.d);\n }\n for (let k = 0; k < segJumps.length - 1; k++) {\n const gap = segJumps[k + 1].d - segJumps[k].d;\n if (segJumps[k].r + segJumps[k + 1].r > gap) {\n const half = gap / 2;\n segJumps[k].r = Math.min(segJumps[k].r, half);\n segJumps[k + 1].r = Math.min(segJumps[k + 1].r, half);\n }\n }\n for (const j of segJumps) {\n if (j.r < MIN_JUMP_RADIUS) {\n continue;\n }\n parts.push(...emitJump(j, ux, uy, sweep, config.jumpStyle));\n }\n if (rounded && upcomingCorner) {\n parts.push(`L${fmt(upcomingCorner.startX)},${fmt(upcomingCorner.startY)}`);\n parts.push(\n `Q${fmt(upcomingCorner.ctrlX)},${fmt(upcomingCorner.ctrlY)} ${fmt(upcomingCorner.endX)},${fmt(upcomingCorner.endY)}`\n );\n } else {\n parts.push(`L${pointToString(seg.b)}`);\n }\n }\n return parts.join(\" \");\n}\n__name(rewriteEdgePath, \"rewriteEdgePath\");\nfunction isStraightPath(d) {\n return /^[\\d\\s+,.LMelm-]*$/.test(d);\n}\n__name(isStraightPath, \"isStraightPath\");\nfunction curveSupportsLineHops(curve) {\n if (!curve) {\n return true;\n }\n return curve === \"linear\" || curve === \"rounded\" || curve === \"step\" || curve === \"stepBefore\" || curve === \"stepAfter\";\n}\n__name(curveSupportsLineHops, \"curveSupportsLineHops\");\nfunction decodeDataPoints(raw) {\n if (!raw) {\n return null;\n }\n try {\n const json = typeof atob === \"function\" ? atob(raw) : Buffer.from(raw, \"base64\").toString();\n const parsed = JSON.parse(json);\n if (!Array.isArray(parsed)) {\n return null;\n }\n const pts = [];\n for (const p of parsed) {\n if (p && typeof p.x === \"number\" && typeof p.y === \"number\") {\n pts.push({ x: p.x, y: p.y });\n }\n }\n return pts.length >= 2 ? pts : null;\n } catch {\n return null;\n }\n}\n__name(decodeDataPoints, \"decodeDataPoints\");\nfunction applyLineJumpsToSvg(edgePathsGroup, edges, config) {\n if (!config.enabled) {\n return;\n }\n const groupNode = edgePathsGroup.node();\n if (!groupNode) {\n return;\n }\n const edgeMeta = /* @__PURE__ */ new Map();\n for (const e of edges) {\n edgeMeta.set(e.id, e);\n }\n const renderedEdges = [];\n const pathById = /* @__PURE__ */ new Map();\n for (const e of edges) {\n const escapedId = typeof CSS !== \"undefined\" && CSS.escape ? CSS.escape(e.id) : e.id;\n const pathEl = groupNode.querySelector(`path[data-id=\"${escapedId}\"]`);\n if (!pathEl) {\n continue;\n }\n pathById.set(e.id, pathEl);\n const decoded = decodeDataPoints(pathEl.getAttribute(\"data-points\"));\n const points = decoded ?? e.points;\n renderedEdges.push({ ...e, points });\n }\n const crossings = findEdgeIntersections(renderedEdges);\n if (crossings.length === 0) {\n return;\n }\n const jumpsByEdge = /* @__PURE__ */ new Map();\n for (const c of crossings) {\n const list = jumpsByEdge.get(c.jumpEdgeId) ?? [];\n list.push(c);\n jumpsByEdge.set(c.jumpEdgeId, list);\n }\n for (const renderedEdge of renderedEdges) {\n const jumps = jumpsByEdge.get(renderedEdge.id);\n if (!jumps || jumps.length === 0) {\n continue;\n }\n const meta = edgeMeta.get(renderedEdge.id);\n const curveHint = meta?.curve;\n if (curveHint !== void 0 && !curveSupportsLineHops(curveHint)) {\n continue;\n }\n const pathEl = pathById.get(renderedEdge.id);\n if (!pathEl) {\n continue;\n }\n if (curveHint === void 0) {\n const currentD = pathEl.getAttribute(\"d\") ?? \"\";\n if (!isStraightPath(currentD)) {\n continue;\n }\n }\n const originalStyle = pathEl.getAttribute(\"style\") ?? \"\";\n const dasharrayMatch = /stroke-dasharray\\s*:\\s*0\\s+([\\d.]+)\\s+[\\d.]+\\s+([\\d.]+)/.exec(\n originalStyle\n );\n const preservedOValueS = dasharrayMatch ? Number.parseFloat(dasharrayMatch[1]) : null;\n const preservedOValueE = dasharrayMatch ? Number.parseFloat(dasharrayMatch[2]) : null;\n const newD = rewriteEdgePath(renderedEdge, jumps, config);\n pathEl.setAttribute(\"d\", newD);\n if (preservedOValueS !== null && preservedOValueE !== null && typeof pathEl.getTotalLength === \"function\") {\n const newLen = pathEl.getTotalLength();\n const onLen = Math.max(0, newLen - preservedOValueS - preservedOValueE);\n const newDasharray = `0 ${preservedOValueS} ${onLen} ${preservedOValueE}`;\n const cleaned = originalStyle.replace(/stroke-dasharray\\s*:[^;]*;?/g, `stroke-dasharray: ${newDasharray};`).replace(/;\\s*;+/g, \";\");\n pathEl.setAttribute(\"style\", cleaned);\n }\n }\n}\n__name(applyLineJumpsToSvg, \"applyLineJumpsToSvg\");\n\n// src/rendering-util/layout-algorithms/swimlanes/adjustLayout.ts\nasync function adjustLayout(data4Layout, groups) {\n for (const node of data4Layout.nodes) {\n if (node.isGroup) {\n await insertCluster(groups.clusters, node);\n } else {\n positionNode(node);\n }\n }\n const nodeById = /* @__PURE__ */ new Map();\n for (const node of data4Layout.nodes) {\n if (node?.id) {\n nodeById.set(node.id, node);\n }\n }\n for (const edge of data4Layout.edges) {\n const startNode = edge.start ? nodeById.get(edge.start) ?? {} : {};\n const endNode = edge.end ? nodeById.get(edge.end) ?? {} : {};\n const paths = insertEdge(\n groups.edgePaths,\n { ...edge },\n {},\n data4Layout.type,\n startNode,\n endNode,\n data4Layout.diagramId\n );\n if (edge.label) {\n await insertEdgeLabel(groups.rootGroups, edge);\n }\n if (edge.label) {\n positionEdgeLabel(edge, paths);\n }\n }\n const lineHopsConfig = data4Layout.config?.swimlane?.lineHops;\n if (lineHopsConfig !== false) {\n const jumpStyle = lineHopsConfig === \"gap\" ? \"gap\" : \"arc\";\n const edgeGeometries = data4Layout.edges.filter((e) => Array.isArray(e.points) && e.points.length >= 2).map((e) => ({\n id: e.id,\n points: e.points,\n curve: e.curve,\n arrowTypeStart: e.arrowTypeStart,\n arrowTypeEnd: e.arrowTypeEnd\n }));\n applyLineJumpsToSvg(groups.edgePaths, edgeGeometries, {\n enabled: true,\n jumpRadius: 6,\n jumpStyle\n });\n }\n}\n__name(adjustLayout, \"adjustLayout\");\nfunction positionEdgeLabel(edge, paths) {\n const path = paths?.updatedPath ?? paths?.originalPath;\n const siteConfig = getConfig();\n const { subGraphTitleTotalMargin } = getSubGraphTitleMargins({\n flowchart: siteConfig.flowchart ?? {}\n });\n if (edge.label) {\n const el = edgeLabels.get(edge.id);\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils_default.calcLabelPosition(path);\n log.debug(\n \"Moving label \" + edge.label + \" from (\",\n x,\n \",\",\n y,\n \") to (\",\n pos.x,\n \",\",\n pos.y,\n \") abc88\"\n );\n if (paths) {\n x = pos.x;\n y = pos.y;\n }\n }\n el.attr(\"transform\", `translate(${x}, ${y + subGraphTitleTotalMargin / 2})`);\n }\n if (edge?.startLabelLeft) {\n const el = terminalLabels.get(edge.id).startLeft;\n let x = edge?.x;\n let y = edge?.y;\n if (path) {\n const pos = utils_default.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, \"start_left\", path);\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", `translate(${x}, ${y})`);\n }\n if (edge.startLabelRight) {\n const el = terminalLabels.get(edge.id).startRight;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils_default.calcTerminalLabelPosition(\n edge.arrowTypeStart ? 10 : 0,\n \"start_right\",\n path\n );\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", `translate(${x}, ${y})`);\n }\n if (edge.endLabelLeft) {\n const el = terminalLabels.get(edge.id).endLeft;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils_default.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, \"end_left\", path);\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", `translate(${x}, ${y})`);\n }\n if (edge.endLabelRight) {\n const el = terminalLabels.get(edge.id).endRight;\n let x = edge.x;\n let y = edge.y;\n if (path) {\n const pos = utils_default.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, \"end_right\", path);\n x = pos.x;\n y = pos.y;\n }\n el.attr(\"transform\", `translate(${x}, ${y})`);\n }\n}\n__name(positionEdgeLabel, \"positionEdgeLabel\");\n\n// src/rendering-util/layout-algorithms/swimlanes/helpers.ts\nvar DEFAULT_SWIMLANE_ID = \"__swimlane_default__\";\nvar TOP_LANE_TITLE_BAND_HEIGHT = 21;\nvar MIN_TOP_LANE_HORIZONTAL_PADDING = 20;\nfunction topLaneHorizontalPadding(lane) {\n return Math.max(lane.padding ?? MIN_TOP_LANE_HORIZONTAL_PADDING, MIN_TOP_LANE_HORIZONTAL_PADDING);\n}\n__name(topLaneHorizontalPadding, \"topLaneHorizontalPadding\");\nfunction assignTopLaneTitleRect(lane) {\n const { x, y, width, height } = lane;\n const contentTop = lane.swimlaneContentTop;\n if (typeof x !== \"number\" || typeof y !== \"number\" || typeof width !== \"number\" || typeof height !== \"number\" || typeof contentTop !== \"number\" || !Number.isFinite(x) || !Number.isFinite(y) || !Number.isFinite(width) || !Number.isFinite(height) || !Number.isFinite(contentTop) || width <= 0 || height <= 0) {\n delete lane.groupTitleRect;\n return;\n }\n const top = y - height / 2;\n const headerBottom = Math.min(contentTop, y + height / 2);\n const titleHeight = Math.min(TOP_LANE_TITLE_BAND_HEIGHT, Math.max(0, headerBottom - top));\n const bottom = top + titleHeight;\n if (bottom <= top) {\n delete lane.groupTitleRect;\n return;\n }\n lane.groupTitleRect = {\n left: x - width / 2,\n right: x + width / 2,\n top,\n bottom\n };\n}\n__name(assignTopLaneTitleRect, \"assignTopLaneTitleRect\");\nfunction prepareLayoutForSwimlanes(layout) {\n const direction = layout.direction;\n const nodes = layout.nodes ??= [];\n for (const node of layout.nodes ?? []) {\n if (node.isGroup && !node.parentId) {\n node.shape = \"swimlane\";\n if (direction) {\n node.direction = direction;\n }\n }\n }\n const looseNodes = nodes.filter((node) => !node.isGroup && !node.parentId);\n if (looseNodes.length === 0) {\n return;\n }\n let defaultLane = nodes.find((node) => node.id === DEFAULT_SWIMLANE_ID);\n if (!defaultLane) {\n defaultLane = {\n id: DEFAULT_SWIMLANE_ID,\n label: \"\",\n isGroup: true,\n shape: \"swimlane\",\n padding: 20,\n ...direction ? { direction } : {}\n };\n nodes.push(defaultLane);\n } else if (defaultLane.isGroup) {\n defaultLane.shape = \"swimlane\";\n if (direction) {\n defaultLane.direction = direction;\n }\n }\n for (const node of looseNodes) {\n node.parentId = DEFAULT_SWIMLANE_ID;\n }\n}\n__name(prepareLayoutForSwimlanes, \"prepareLayoutForSwimlanes\");\nfunction toGraphView(layout) {\n const nodeById = /* @__PURE__ */ new Map();\n for (const n of layout.nodes ?? []) {\n nodeById.set(n.id, n);\n }\n const edges = [];\n for (const e of layout.edges ?? []) {\n const src = typeof e.start === \"string\" ? e.start : void 0;\n const dst = typeof e.end === \"string\" ? e.end : void 0;\n if (!src || !dst) {\n continue;\n }\n if (e.labelNodeId) {\n continue;\n }\n edges.push({ id: e.id, src, dst, ref: e });\n }\n const allNodes = layout.nodes ?? [];\n const groupNodes = allNodes.filter((n) => n.isGroup);\n const nonGroupNodes = allNodes.filter((n) => !n.isGroup);\n const nodesInGroupOrder = [...groupNodes].reverse();\n const nodes = [...nodesInGroupOrder, ...nonGroupNodes].map((n) => n.id);\n return { nodes, edges, layout, nodeById };\n}\n__name(toGraphView, \"toGraphView\");\nfunction writeBackToLayoutData(g, ordered, coords, opts) {\n const { layout } = g;\n const nodeMap = g.nodeById;\n const layerGap = opts?.layerGap ?? 100;\n const nodeGap = opts?.nodeGap ?? 40;\n let layerIndex = 0;\n for (const layer of ordered.layers) {\n let orderIndex = 0;\n for (const id of layer) {\n const node = nodeMap.get(id);\n if (!node) {\n orderIndex++;\n continue;\n }\n node.layer = layerIndex;\n node.order = orderIndex;\n const x = coords.x[id] ?? orderIndex * nodeGap;\n const y = coords.y[id] ?? layerIndex * layerGap;\n node.x = x;\n node.y = y;\n orderIndex++;\n }\n layerIndex++;\n }\n const allNodes = layout.nodes ?? [];\n const groupBounds = /* @__PURE__ */ new Map();\n const topLevelGroups = [];\n for (const group of allNodes) {\n if (!group?.isGroup) {\n continue;\n }\n if (!group.parentId) {\n topLevelGroups.push(group);\n }\n const children = allNodes.filter((n) => n.parentId === group.id);\n let minX = Infinity;\n let maxX = -Infinity;\n let minY = Infinity;\n let maxY = -Infinity;\n for (const child of children) {\n const cx = child.x ?? coords.x[child.id];\n const cy = child.y ?? coords.y[child.id];\n const cw = child.width ?? 0;\n const ch = child.height ?? 0;\n if (cx != null && cy != null) {\n minX = Math.min(minX, cx - cw / 2);\n maxX = Math.max(maxX, cx + cw / 2);\n minY = Math.min(minY, cy - ch / 2);\n maxY = Math.max(maxY, cy + ch / 2);\n }\n }\n if (minX === Infinity || minY === Infinity) {\n group.x = group.x ?? 0;\n group.y = group.y ?? 0;\n group.width = group.width ?? 0;\n group.height = group.height ?? 0;\n } else {\n const pad = group.padding ?? 20;\n const horizontalPad = group.parentId ? pad : 2 * topLaneHorizontalPadding(group);\n const verticalPad = pad;\n const w = Math.max(0, maxX - minX) + horizontalPad;\n const h = Math.max(0, maxY - minY) + verticalPad;\n const cx = (minX + maxX) / 2;\n const cy = (minY + maxY) / 2;\n group.x = cx;\n group.y = cy;\n group.width = w;\n group.height = h;\n groupBounds.set(group.id, { minX, maxX, minY, maxY });\n }\n }\n if (topLevelGroups.length > 0 && groupBounds.size > 0) {\n let globalMinY = Infinity;\n let globalMaxY = -Infinity;\n let maxPad = 0;\n for (const lane of topLevelGroups) {\n const pad = lane.padding ?? 20;\n if (pad > maxPad) {\n maxPad = pad;\n }\n const b = groupBounds.get(lane.id);\n if (!b) {\n continue;\n }\n globalMinY = Math.min(globalMinY, b.minY);\n globalMaxY = Math.max(globalMaxY, b.maxY);\n }\n if (globalMinY !== Infinity && globalMaxY !== -Infinity) {\n const contentHeight = Math.max(0, globalMaxY - globalMinY);\n const minHeaderMargin = 36;\n const verticalMargin = Math.max(maxPad, minHeaderMargin);\n const laneHeight = contentHeight + 2 * verticalMargin;\n const centerY = (globalMinY + globalMaxY) / 2;\n for (const lane of topLevelGroups) {\n lane.y = centerY;\n lane.height = laneHeight;\n lane.swimlaneContentTop = globalMinY;\n }\n const sortedLanes = [...topLevelGroups].sort((a, b) => {\n const ax = a.x ?? 0;\n const bx = b.x ?? 0;\n return ax - bx;\n });\n const laneIds = [];\n const centers = [];\n const baseWidths = [];\n for (const lane of sortedLanes) {\n const b = groupBounds.get(lane.id);\n if (!b) {\n continue;\n }\n const contentWidth = Math.max(0, b.maxX - b.minX) + 2 * topLaneHorizontalPadding(lane);\n const cx = (b.minX + b.maxX) / 2;\n laneIds.push(lane.id);\n centers.push(cx);\n baseWidths.push(contentWidth);\n }\n const count = laneIds.length;\n if (count > 0) {\n const laneWidths = /* @__PURE__ */ new Map();\n if (count === 1) {\n laneWidths.set(laneIds[0], baseWidths[0]);\n } else {\n const d = [];\n for (let i = 0; i < count - 1; i++) {\n d.push(centers[i + 1] - centers[i]);\n }\n const u = new Array(count);\n u[0] = 0;\n for (let i = 0; i < count - 1; i++) {\n u[i + 1] = 2 * d[i] - u[i];\n }\n let lowerBound = 0;\n let upperBound = Number.POSITIVE_INFINITY;\n for (let i = 0; i < count; i++) {\n const baseW = baseWidths[i];\n if (i % 2 === 0) {\n lowerBound = Math.max(lowerBound, baseW - u[i]);\n } else {\n upperBound = Math.min(upperBound, u[i] - baseW);\n }\n }\n let x = lowerBound;\n if (lowerBound <= upperBound) {\n x = (lowerBound + upperBound) / 2;\n } else {\n x = lowerBound;\n }\n for (let i = 0; i < count; i++) {\n const w = u[i] + (i % 2 === 0 ? x : -x);\n const finalWidth = Math.max(baseWidths[i], w);\n laneWidths.set(laneIds[i], finalWidth);\n }\n }\n for (const lane of topLevelGroups) {\n const w = laneWidths.get(lane.id);\n if (w != null) {\n lane.width = w;\n }\n assignTopLaneTitleRect(lane);\n }\n }\n }\n }\n}\n__name(writeBackToLayoutData, \"writeBackToLayoutData\");\n\n// src/rendering-util/layout-algorithms/swimlanes/edgeLabelNodes.ts\nvar EDGE_LABEL_LOG_PREFIX = \"[EdgeLabelNodes]\";\nfunction createEdgeLabelNodes(data) {\n const nodesToAdd = [];\n const layoutOnlyEdges = [];\n const nodeById = /* @__PURE__ */ new Map();\n for (const node of data.nodes) {\n nodeById.set(node.id, node);\n }\n for (const edge of data.edges) {\n if (!edge.label || edge.label.length === 0) {\n continue;\n }\n if (edge.isLayoutOnly) {\n continue;\n }\n if (edge.labelNodeId) {\n continue;\n }\n const sourceNode = edge.start ? nodeById.get(edge.start) : void 0;\n const targetNode = edge.end ? nodeById.get(edge.end) : void 0;\n if (!sourceNode || !targetNode) {\n log.warn(EDGE_LABEL_LOG_PREFIX, `Edge ${edge.id} has missing source or target node`);\n continue;\n }\n const labelNodeId = `edge-label-${edge.start}-${edge.end}-${edge.id}`;\n const isCrossLane = sourceNode.parentId !== targetNode.parentId;\n const labelLane = isCrossLane ? targetNode.parentId : sourceNode.parentId;\n const labelNode = {\n id: labelNodeId,\n label: edge.label,\n edgeStart: edge.start ?? \"\",\n edgeEnd: edge.end ?? \"\",\n shape: \"labelRect\",\n width: 0,\n // populated when rendered / applied from fixture\n height: 0,\n isEdgeLabel: true,\n isDummy: true,\n parentId: labelLane,\n isGroup: false,\n labelStyle: Array.isArray(edge.labelStyle) ? edge.labelStyle[0] : edge.labelStyle ?? \"\",\n ...sourceNode.dir ? { dir: sourceNode.dir } : {}\n };\n nodesToAdd.push(labelNode);\n edge.labelNodeId = labelNodeId;\n edge.label = void 0;\n edge.text = void 0;\n const toLabelVirtual = {\n id: `${edge.id}-to-label`,\n start: edge.start,\n end: labelNodeId,\n type: \"normal\",\n isLayoutOnly: true\n };\n const fromLabelVirtual = {\n id: `${edge.id}-from-label`,\n start: labelNodeId,\n end: edge.end,\n type: \"normal\",\n isLayoutOnly: true\n };\n layoutOnlyEdges.push(toLabelVirtual, fromLabelVirtual);\n }\n const newNodes = [...data.nodes, ...nodesToAdd];\n const newEdges = [...data.edges, ...layoutOnlyEdges];\n return {\n ...data,\n nodes: newNodes,\n edges: newEdges\n };\n}\n__name(createEdgeLabelNodes, \"createEdgeLabelNodes\");\n\n// src/rendering-util/layout-algorithms/swimlanes/direction/geometry.ts\nvar EPS = 1e-3;\nfunction measuredNodeRect(node) {\n const cx = node.x ?? 0;\n const cy = node.y ?? 0;\n const width = node.width ?? 0;\n const height = node.height ?? 0;\n return width > 0 && height > 0 ? { cx, cy, rect: rectFromCenterSize(cx, cy, width, height) } : void 0;\n}\n__name(measuredNodeRect, \"measuredNodeRect\");\nfunction nodeBoundsInfoFor(node) {\n if (node.isGroup) {\n return void 0;\n }\n const measured = measuredNodeRect(node);\n if (!measured) {\n return void 0;\n }\n const id = String(node.id ?? \"\");\n return {\n id,\n cx: measured.cx,\n cy: measured.cy,\n rect: measured.rect\n };\n}\n__name(nodeBoundsInfoFor, \"nodeBoundsInfoFor\");\nfunction samePoint(a, b, epsilon = EPS) {\n return Math.abs(a.x - b.x) < epsilon && Math.abs(a.y - b.y) < epsilon;\n}\n__name(samePoint, \"samePoint\");\nfunction sameX(a, b, epsilon = EPS) {\n return Math.abs(a.x - b.x) < epsilon;\n}\n__name(sameX, \"sameX\");\nfunction sameY(a, b, epsilon = EPS) {\n return Math.abs(a.y - b.y) < epsilon;\n}\n__name(sameY, \"sameY\");\nfunction isHorizontalSegment(a, b, epsilon = EPS) {\n return sameY(a, b, epsilon) && Math.abs(a.x - b.x) > epsilon;\n}\n__name(isHorizontalSegment, \"isHorizontalSegment\");\nfunction isVerticalSegment(a, b, epsilon = EPS) {\n return sameX(a, b, epsilon) && Math.abs(a.y - b.y) > epsilon;\n}\n__name(isVerticalSegment, \"isVerticalSegment\");\nfunction overlapLength(a1, a2, b1, b2) {\n return Math.max(\n 0,\n Math.min(Math.max(a1, a2), Math.max(b1, b2)) - Math.max(Math.min(a1, a2), Math.min(b1, b2))\n );\n}\n__name(overlapLength, \"overlapLength\");\nfunction sameAxisSegmentOverlapLength(a, b, epsilon = EPS) {\n if (a.horizontal && b.horizontal && sameY(a.a, b.a, epsilon)) {\n return overlapLength(a.a.x, a.b.x, b.a.x, b.b.x);\n }\n if (a.vertical && b.vertical && sameX(a.a, b.a, epsilon)) {\n return overlapLength(a.a.y, a.b.y, b.a.y, b.b.y);\n }\n return 0;\n}\n__name(sameAxisSegmentOverlapLength, \"sameAxisSegmentOverlapLength\");\nfunction orthogonalSegmentsForPoints(points, epsilon = EPS) {\n const result = [];\n for (let i = 0; i < points.length - 1; i++) {\n const a = points[i];\n const b = points[i + 1];\n const horizontal = isHorizontalSegment(a, b, epsilon);\n const vertical = isVerticalSegment(a, b, epsilon);\n if (horizontal || vertical) {\n result.push({ index: i, a, b, horizontal, vertical });\n }\n }\n return result;\n}\n__name(orthogonalSegmentsForPoints, \"orthogonalSegmentsForPoints\");\nfunction countOrthogonalBends(points, epsilon = EPS) {\n const segments = orthogonalSegmentsForPoints(points, epsilon);\n let bends = 0;\n for (let i = 1; i < segments.length; i++) {\n if (segments[i - 1].horizontal !== segments[i].horizontal) {\n bends++;\n }\n }\n return bends;\n}\n__name(countOrthogonalBends, \"countOrthogonalBends\");\nfunction dedupeConsecutivePoints(points, epsilon = EPS) {\n const result = [];\n for (const point of points) {\n const last = result.length > 0 ? result[result.length - 1] : void 0;\n if (!last || !samePoint(last, point, epsilon)) {\n result.push({ x: point.x, y: point.y });\n }\n }\n return result;\n}\n__name(dedupeConsecutivePoints, \"dedupeConsecutivePoints\");\nfunction classifyThreeSegmentRoute(points, epsilon = EPS) {\n if (!points || points.length !== 4) {\n return void 0;\n }\n const [p0, p1, p2, p3] = points;\n const isHVH = isHorizontalSegment(p0, p1, epsilon) && isVerticalSegment(p1, p2, epsilon) && isHorizontalSegment(p2, p3, epsilon);\n if (isHVH) {\n return { kind: \"HVH\", p0, p1, p2, p3 };\n }\n const isVHV = isVerticalSegment(p0, p1, epsilon) && isHorizontalSegment(p1, p2, epsilon) && isVerticalSegment(p2, p3, epsilon);\n return isVHV ? { kind: \"VHV\", p0, p1, p2, p3 } : void 0;\n}\n__name(classifyThreeSegmentRoute, \"classifyThreeSegmentRoute\");\nfunction segmentBoundsOverlapRect(a, b, rect, buffer = 0) {\n const segMinX = Math.min(a.x, b.x);\n const segMaxX = Math.max(a.x, b.x);\n const segMinY = Math.min(a.y, b.y);\n const segMaxY = Math.max(a.y, b.y);\n return segMaxX > rect.left - buffer && segMinX < rect.right + buffer && segMaxY > rect.top - buffer && segMinY < rect.bottom + buffer;\n}\n__name(segmentBoundsOverlapRect, \"segmentBoundsOverlapRect\");\nfunction pointInsideRect(point, rect, buffer = 0) {\n return point.x > rect.left + buffer && point.x < rect.right - buffer && point.y > rect.top + buffer && point.y < rect.bottom - buffer;\n}\n__name(pointInsideRect, \"pointInsideRect\");\nfunction rectContainsRect(outer, inner) {\n return outer.left <= inner.left && outer.right >= inner.right && outer.top <= inner.top && outer.bottom >= inner.bottom;\n}\n__name(rectContainsRect, \"rectContainsRect\");\nfunction rectsOverlap(a, b) {\n return a.left < b.right && a.right > b.left && a.top < b.bottom && a.bottom > b.top;\n}\n__name(rectsOverlap, \"rectsOverlap\");\nfunction inflateRect(rect, margin) {\n return {\n left: rect.left - margin,\n right: rect.right + margin,\n top: rect.top - margin,\n bottom: rect.bottom + margin\n };\n}\n__name(inflateRect, \"inflateRect\");\nfunction rectFromCenterSize(cx, cy, width, height) {\n return {\n left: cx - width / 2,\n right: cx + width / 2,\n top: cy - height / 2,\n bottom: cy + height / 2\n };\n}\n__name(rectFromCenterSize, \"rectFromCenterSize\");\nfunction rectOfNodeBounds(node) {\n return measuredNodeRect(node)?.rect;\n}\n__name(rectOfNodeBounds, \"rectOfNodeBounds\");\nfunction portForRectSide(node, side) {\n switch (side) {\n case \"top\":\n return { x: node.cx, y: node.rect.top };\n case \"bottom\":\n return { x: node.cx, y: node.rect.bottom };\n case \"left\":\n return { x: node.rect.left, y: node.cy };\n case \"right\":\n return { x: node.rect.right, y: node.cy };\n }\n}\n__name(portForRectSide, \"portForRectSide\");\nfunction buildOrthogonalPortPath(src, srcSide, dst, dstSide, anchor, epsilon = EPS) {\n const srcH = srcSide === \"left\" || srcSide === \"right\";\n const dstH = dstSide === \"left\" || dstSide === \"right\";\n if (srcH && dstH) {\n const opposingDir = srcSide === \"right\" && dstSide === \"left\" && src.x < dst.x || srcSide === \"left\" && dstSide === \"right\" && src.x > dst.x;\n if (opposingDir) {\n if (sameY(src, dst, epsilon)) {\n return [src, dst];\n }\n const midX = (src.x + dst.x) / 2;\n return [src, { x: midX, y: src.y }, { x: midX, y: dst.y }, dst];\n }\n if (srcSide === dstSide) {\n if (sameY(src, dst, epsilon)) {\n return void 0;\n }\n const intX = srcSide === \"left\" ? Math.min(src.x, dst.x) - anchor : Math.max(src.x, dst.x) + anchor;\n return [src, { x: intX, y: src.y }, { x: intX, y: dst.y }, dst];\n }\n return void 0;\n }\n if (!srcH && !dstH) {\n if (srcSide === dstSide) {\n if (sameX(src, dst, epsilon)) {\n return void 0;\n }\n const intY = srcSide === \"top\" ? Math.min(src.y, dst.y) - anchor : Math.max(src.y, dst.y) + anchor;\n return [src, { x: src.x, y: intY }, { x: dst.x, y: intY }, dst];\n }\n const sameDir = srcSide === \"bottom\" && dstSide === \"top\" && src.y < dst.y || srcSide === \"top\" && dstSide === \"bottom\" && src.y > dst.y;\n if (!sameDir) {\n return void 0;\n }\n if (sameX(src, dst, epsilon)) {\n return [src, dst];\n }\n const midY = (src.y + dst.y) / 2;\n return [src, { x: src.x, y: midY }, { x: dst.x, y: midY }, dst];\n }\n if (srcH && !dstH) {\n const sameDirSrc2 = srcSide === \"right\" && dst.x > src.x || srcSide === \"left\" && dst.x < src.x;\n const sameDirDst2 = dstSide === \"top\" && src.y < dst.y || dstSide === \"bottom\" && src.y > dst.y;\n return sameDirSrc2 && sameDirDst2 ? [src, { x: dst.x, y: src.y }, dst] : void 0;\n }\n const sameDirSrc = srcSide === \"bottom\" && dst.y > src.y || srcSide === \"top\" && dst.y < src.y;\n const sameDirDst = dstSide === \"left\" && src.x < dst.x || dstSide === \"right\" && src.x > dst.x;\n return sameDirSrc && sameDirDst ? [src, { x: src.x, y: dst.y }, dst] : void 0;\n}\n__name(buildOrthogonalPortPath, \"buildOrthogonalPortPath\");\nfunction buildSameSideTrackPath(src, side, dst, track) {\n return side === \"left\" || side === \"right\" ? [src, { x: track, y: src.y }, { x: track, y: dst.y }, dst] : [src, { x: src.x, y: track }, { x: dst.x, y: track }, dst];\n}\n__name(buildSameSideTrackPath, \"buildSameSideTrackPath\");\nfunction collectRealNodeBounds(nodes) {\n const nodeInfoById = /* @__PURE__ */ new Map();\n const realNodeRects = [];\n for (const node of nodes) {\n if (node.isEdgeLabel) {\n continue;\n }\n const info = nodeBoundsInfoFor(node);\n if (!info) {\n continue;\n }\n nodeInfoById.set(info.id, info);\n realNodeRects.push({ id: info.id, rect: info.rect });\n }\n return { nodeInfoById, realNodeRects };\n}\n__name(collectRealNodeBounds, \"collectRealNodeBounds\");\nfunction collectNodeRectEntries(nodes) {\n const realNodeRects = [];\n const labelNodeRects = [];\n for (const node of nodes) {\n const info = nodeBoundsInfoFor(node);\n if (!info) {\n continue;\n }\n const entry = { id: info.id, rect: info.rect };\n if (node.isEdgeLabel) {\n labelNodeRects.push(entry);\n } else {\n realNodeRects.push(entry);\n }\n }\n return { realNodeRects, labelNodeRects };\n}\n__name(collectNodeRectEntries, \"collectNodeRectEntries\");\nfunction collectLayoutNodeRects(nodes, { includeEdgeLabels = true } = {}) {\n const result = [];\n for (const node of nodes) {\n if (node.isGroup || !includeEdgeLabels && node.isEdgeLabel) {\n continue;\n }\n const cx = node.x ?? 0;\n const cy = node.y ?? 0;\n const width = node.width ?? 0;\n const height = node.height ?? 0;\n result.push({\n nodeId: node.id,\n ...rectFromCenterSize(cx, cy, width, height)\n });\n }\n return result;\n}\n__name(collectLayoutNodeRects, \"collectLayoutNodeRects\");\nfunction getNodePairGeometry(edge, nodeInfoById, epsilon = EPS) {\n const srcId = edge.start;\n const dstId = edge.end;\n if (!srcId || !dstId) {\n return void 0;\n }\n const srcInfo = nodeInfoById.get(srcId);\n const dstInfo = nodeInfoById.get(dstId);\n if (!srcInfo || !dstInfo) {\n return void 0;\n }\n return {\n srcId,\n dstId,\n srcInfo,\n dstInfo,\n collinearX: Math.abs(srcInfo.cx - dstInfo.cx) < epsilon,\n collinearY: Math.abs(srcInfo.cy - dstInfo.cy) < epsilon\n };\n}\n__name(getNodePairGeometry, \"getNodePairGeometry\");\nfunction segmentHitsAnyRect(a, b, rects, excludeIds = [], shrink = 0) {\n for (const entry of rects) {\n if (excludeIds.includes(entry.id)) {\n continue;\n }\n if (segmentBoundsOverlapRect(a, b, entry.rect, -shrink)) {\n return true;\n }\n }\n return false;\n}\n__name(segmentHitsAnyRect, \"segmentHitsAnyRect\");\nfunction orthogonalSegmentsCross(a1, b1, a2, b2, epsilon = EPS, endpointTolerance = 1e-6) {\n const s1H = sameY(a1, b1, epsilon);\n const s1V = sameX(a1, b1, epsilon);\n const s2H = sameY(a2, b2, epsilon);\n const s2V = sameX(a2, b2, epsilon);\n if (s1H && s2H || s1V && s2V) {\n return false;\n }\n if (!(s1H || s1V) || !(s2H || s2V)) {\n return false;\n }\n const horiz = s1H ? { a: a1, b: b1 } : { a: a2, b: b2 };\n const vert = s1V ? { a: a1, b: b1 } : { a: a2, b: b2 };\n const hY = horiz.a.y;\n const hX1 = Math.min(horiz.a.x, horiz.b.x);\n const hX2 = Math.max(horiz.a.x, horiz.b.x);\n const vX = vert.a.x;\n const vY1 = Math.min(vert.a.y, vert.b.y);\n const vY2 = Math.max(vert.a.y, vert.b.y);\n if (vX < hX1 || vX > hX2 || hY < vY1 || hY > vY2) {\n return false;\n }\n const matchesHorizEndpoint = Math.abs(vX - horiz.a.x) < endpointTolerance && Math.abs(hY - horiz.a.y) < endpointTolerance || Math.abs(vX - horiz.b.x) < endpointTolerance && Math.abs(hY - horiz.b.y) < endpointTolerance;\n const matchesVertEndpoint = Math.abs(vX - vert.a.x) < endpointTolerance && Math.abs(hY - vert.a.y) < endpointTolerance || Math.abs(vX - vert.b.x) < endpointTolerance && Math.abs(hY - vert.b.y) < endpointTolerance;\n return !(matchesHorizEndpoint && matchesVertEndpoint);\n}\n__name(orthogonalSegmentsCross, \"orthogonalSegmentsCross\");\nfunction sameAxisSegmentsOverlap(a1, b1, a2, b2, epsilon = EPS) {\n const s1H = sameY(a1, b1, epsilon);\n const s1V = sameX(a1, b1, epsilon);\n const s2H = sameY(a2, b2, epsilon);\n const s2V = sameX(a2, b2, epsilon);\n if (s1V && s2V && sameX(a1, a2, epsilon)) {\n return overlapLength(a1.y, b1.y, a2.y, b2.y) > epsilon;\n }\n if (s1H && s2H && sameY(a1, a2, epsilon)) {\n return overlapLength(a1.x, b1.x, a2.x, b2.x) > epsilon;\n }\n return false;\n}\n__name(sameAxisSegmentsOverlap, \"sameAxisSegmentsOverlap\");\nfunction segmentConflictsWithAnyEdge(a, b, edges, excludeEdge, {\n epsilon = EPS,\n skipDegenerateOther = false\n} = {}) {\n for (const other of edges) {\n if (other === excludeEdge || other.isLayoutOnly) {\n continue;\n }\n const points = other.points;\n if (!points || points.length < 2) {\n continue;\n }\n for (let i = 0; i < points.length - 1; i++) {\n const oa = points[i];\n const ob = points[i + 1];\n if (skipDegenerateOther && samePoint(oa, ob, epsilon)) {\n continue;\n }\n if (orthogonalSegmentsCross(a, b, oa, ob, epsilon) || sameAxisSegmentsOverlap(a, b, oa, ob, epsilon)) {\n return true;\n }\n }\n }\n return false;\n}\n__name(segmentConflictsWithAnyEdge, \"segmentConflictsWithAnyEdge\");\nfunction orthogonalSegmentsStrictlyCross(a1, b1, a2, b2, epsilon = EPS) {\n const aHoriz = sameY(a1, b1, epsilon);\n const aVert = sameX(a1, b1, epsilon);\n const bHoriz = sameY(a2, b2, epsilon);\n const bVert = sameX(a2, b2, epsilon);\n if (!(aHoriz && bVert || aVert && bHoriz)) {\n return false;\n }\n const horiz = aHoriz ? { a: a1, b: b1 } : { a: a2, b: b2 };\n const vert = aHoriz ? { a: a2, b: b2 } : { a: a1, b: b1 };\n const hY = horiz.a.y;\n const hXmin = Math.min(horiz.a.x, horiz.b.x);\n const hXmax = Math.max(horiz.a.x, horiz.b.x);\n const vX = vert.a.x;\n const vYmin = Math.min(vert.a.y, vert.b.y);\n const vYmax = Math.max(vert.a.y, vert.b.y);\n return vX > hXmin + epsilon && vX < hXmax - epsilon && hY > vYmin + epsilon && hY < vYmax - epsilon;\n}\n__name(orthogonalSegmentsStrictlyCross, \"orthogonalSegmentsStrictlyCross\");\nfunction strictlyBetween(value, a, b) {\n const lo = Math.min(a, b);\n const hi = Math.max(a, b);\n return value > lo + EPS && value < hi - EPS;\n}\n__name(strictlyBetween, \"strictlyBetween\");\nfunction isCollinearIntermediate(prev, cur, next) {\n if (sameX(prev, cur) && sameX(cur, next)) {\n return strictlyBetween(cur.y, prev.y, next.y);\n }\n if (sameY(prev, cur) && sameY(cur, next)) {\n return strictlyBetween(cur.x, prev.x, next.x);\n }\n return false;\n}\n__name(isCollinearIntermediate, \"isCollinearIntermediate\");\nfunction simplifyPolylineOnce(points) {\n let changed = false;\n const out = [];\n for (let i = 0; i < points.length; i++) {\n const prev = out[out.length - 1];\n const cur = points[i];\n const next = i + 1 < points.length ? points[i + 1] : void 0;\n if (prev && next) {\n if (samePoint(prev, next)) {\n i++;\n changed = true;\n continue;\n }\n if (isCollinearIntermediate(prev, cur, next)) {\n changed = true;\n continue;\n }\n }\n out.push(cur);\n }\n return { points: out, changed };\n}\n__name(simplifyPolylineOnce, \"simplifyPolylineOnce\");\nfunction orthogonalizePolyline(pts) {\n const cleaned = [pts[0]];\n for (let i = 1; i < pts.length; i++) {\n const prev = cleaned[cleaned.length - 1];\n const curr = pts[i];\n if (!sameX(prev, curr) && !sameY(prev, curr)) {\n const prevPrev = cleaned.length >= 2 ? cleaned[cleaned.length - 2] : void 0;\n const incomingVertical = prevPrev ? sameX(prevPrev, prev) : false;\n const corner = incomingVertical ? { x: prev.x, y: curr.y } : { x: curr.x, y: prev.y };\n cleaned.push(corner);\n }\n cleaned.push(curr);\n }\n const deduped = [];\n for (const p of cleaned) {\n const last = deduped[deduped.length - 1];\n if (!last || !samePoint(last, p)) {\n deduped.push(p);\n }\n }\n return deduped;\n}\n__name(orthogonalizePolyline, \"orthogonalizePolyline\");\nfunction simplifyPolyline(pts) {\n if (pts.length < 3) {\n return pts;\n }\n let work = [...pts];\n for (let guard = 0; guard < 32; guard++) {\n const result = simplifyPolylineOnce(work);\n work = result.points;\n if (!result.changed) {\n break;\n }\n }\n return work;\n}\n__name(simplifyPolyline, \"simplifyPolyline\");\n\n// src/rendering-util/layout-algorithms/swimlanes/direction/endpointClip.ts\nvar EPS2 = 1e-3;\nvar INSIDE_EPS = 0.5;\nvar CORNER_CLEARANCE = 4;\nfunction endpointContextFor(edge, nodeByIdMap, minPoints) {\n const candidate = edge;\n if (candidate.isLayoutOnly || !candidate.points || candidate.points.length < minPoints) {\n return void 0;\n }\n const src = candidate.start ? nodeByIdMap.get(candidate.start) : void 0;\n const dst = candidate.end ? nodeByIdMap.get(candidate.end) : void 0;\n return {\n edge: candidate,\n points: candidate.points,\n srcRect: src ? rectOfNodeBounds(src) : void 0,\n dstRect: dst ? rectOfNodeBounds(dst) : void 0\n };\n}\n__name(endpointContextFor, \"endpointContextFor\");\nfunction segmentEnterPoint(outside, inside, r) {\n if (sameY(outside, inside, EPS2)) {\n const x = outside.x < r.left ? r.left : r.right;\n return { x, y: outside.y };\n }\n if (sameX(outside, inside, EPS2)) {\n const y = outside.y < r.top ? r.top : r.bottom;\n return { x: outside.x, y };\n }\n return {\n x: Math.min(r.right, Math.max(r.left, outside.x)),\n y: Math.min(r.bottom, Math.max(r.top, outside.y))\n };\n}\n__name(segmentEnterPoint, \"segmentEnterPoint\");\nfunction clipEndpoint(points, rect, atStart) {\n const step = atStart ? 1 : -1;\n let outsideIndex = atStart ? 0 : points.length - 1;\n while (outsideIndex >= 0 && outsideIndex < points.length && pointInsideRect(points[outsideIndex], rect, INSIDE_EPS)) {\n outsideIndex += step;\n }\n if (outsideIndex < 0 || outsideIndex >= points.length) {\n return points;\n }\n const insideIndex = outsideIndex - step;\n if (insideIndex < 0 || insideIndex >= points.length) {\n return points;\n }\n const entry = segmentEnterPoint(points[outsideIndex], points[insideIndex], rect);\n return atStart ? [entry, ...points.slice(outsideIndex)] : [...points.slice(0, outsideIndex + 1), entry];\n}\n__name(clipEndpoint, \"clipEndpoint\");\nfunction clipEdgeEndpointsToNodeBoundaries(edges, nodeByIdMap) {\n for (const edge of edges) {\n const context = endpointContextFor(edge, nodeByIdMap, 2);\n if (!context) {\n continue;\n }\n let next = [...context.points];\n if (context.srcRect) {\n next = clipEndpoint(next, context.srcRect, true);\n }\n if (context.dstRect) {\n next = clipEndpoint(next, context.dstRect, false);\n }\n next = simplifyPolyline(orthogonalizePolyline(next));\n next = clearStraightEndpointCornerConnections(next, context.srcRect, context.dstRect);\n context.edge.points = simplifyPolyline(orthogonalizePolyline(next));\n }\n}\n__name(clipEdgeEndpointsToNodeBoundaries, \"clipEdgeEndpointsToNodeBoundaries\");\nfunction snapEndpointToBoundary(inner, endpoint, r, useApproachSide = false) {\n if (sameY(inner, endpoint, EPS2)) {\n if (endpoint.y < r.top - EPS2 || endpoint.y > r.bottom + EPS2) {\n return endpoint;\n }\n if (useApproachSide) {\n if (inner.x < r.left - EPS2) {\n return { x: r.left, y: inner.y };\n }\n if (inner.x > r.right + EPS2) {\n return { x: r.right, y: inner.y };\n }\n }\n const toLeft = Math.abs(endpoint.x - r.left) <= Math.abs(endpoint.x - r.right);\n return { x: toLeft ? r.left : r.right, y: inner.y };\n }\n if (sameX(inner, endpoint, EPS2)) {\n if (endpoint.x < r.left - EPS2 || endpoint.x > r.right + EPS2) {\n return endpoint;\n }\n if (useApproachSide) {\n if (inner.y < r.top - EPS2) {\n return { x: inner.x, y: r.top };\n }\n if (inner.y > r.bottom + EPS2) {\n return { x: inner.x, y: r.bottom };\n }\n }\n const toTop = Math.abs(endpoint.y - r.top) <= Math.abs(endpoint.y - r.bottom);\n return { x: inner.x, y: toTop ? r.top : r.bottom };\n }\n return endpoint;\n}\n__name(snapEndpointToBoundary, \"snapEndpointToBoundary\");\nfunction firstDistinctAdjacent(points, endpointIndex, step) {\n const endpoint = points[endpointIndex];\n for (let index = endpointIndex + step; index >= 0 && index < points.length; index += step) {\n const candidate = points[index];\n if (!samePoint(candidate, endpoint, EPS2)) {\n return candidate;\n }\n }\n return points[endpointIndex + step];\n}\n__name(firstDistinctAdjacent, \"firstDistinctAdjacent\");\nfunction cornerClearanceRange(min, max) {\n const lo = min + CORNER_CLEARANCE;\n const hi = max - CORNER_CLEARANCE;\n return lo <= hi ? { lo, hi } : { lo: (min + max) / 2, hi: (min + max) / 2 };\n}\n__name(cornerClearanceRange, \"cornerClearanceRange\");\nfunction clampToCornerClearance(value, min, max) {\n const { lo, hi } = cornerClearanceRange(min, max);\n return Math.min(hi, Math.max(lo, value));\n}\n__name(clampToCornerClearance, \"clampToCornerClearance\");\nfunction intersectRanges(ranges) {\n const lo = Math.max(...ranges.map((range) => range.lo));\n const hi = Math.min(...ranges.map((range) => range.hi));\n if (lo > hi) {\n return void 0;\n }\n return { lo, hi };\n}\n__name(intersectRanges, \"intersectRanges\");\nfunction clearanceRangeForSide(r, side) {\n return side === \"left\" || side === \"right\" ? cornerClearanceRange(r.top, r.bottom) : cornerClearanceRange(r.left, r.right);\n}\n__name(clearanceRangeForSide, \"clearanceRangeForSide\");\nfunction terminalSideForSegment(endpoint, adjacent, r) {\n const yWithin = endpoint.y >= r.top - EPS2 && endpoint.y <= r.bottom + EPS2;\n const xWithin = endpoint.x >= r.left - EPS2 && endpoint.x <= r.right + EPS2;\n if (sameY(endpoint, adjacent, EPS2) && yWithin) {\n if (Math.abs(endpoint.x - r.left) < EPS2) {\n return \"left\";\n }\n if (Math.abs(endpoint.x - r.right) < EPS2) {\n return \"right\";\n }\n }\n if (sameX(endpoint, adjacent, EPS2) && xWithin) {\n if (Math.abs(endpoint.y - r.top) < EPS2) {\n return \"top\";\n }\n if (Math.abs(endpoint.y - r.bottom) < EPS2) {\n return \"bottom\";\n }\n }\n return void 0;\n}\n__name(terminalSideForSegment, \"terminalSideForSegment\");\nfunction isHorizontalSide(side) {\n return side === \"left\" || side === \"right\";\n}\n__name(isHorizontalSide, \"isHorizontalSide\");\nfunction straightClearanceRange(start, end, srcRect, dstRect, horizontal) {\n const ranges = [];\n const srcSide = srcRect ? terminalSideForSegment(start, end, srcRect) : void 0;\n const dstSide = dstRect ? terminalSideForSegment(end, start, dstRect) : void 0;\n if (srcRect && srcSide && isHorizontalSide(srcSide) === horizontal) {\n ranges.push(clearanceRangeForSide(srcRect, srcSide));\n }\n if (dstRect && dstSide && isHorizontalSide(dstSide) === horizontal) {\n ranges.push(clearanceRangeForSide(dstRect, dstSide));\n }\n return ranges.length > 0 ? intersectRanges(ranges) : void 0;\n}\n__name(straightClearanceRange, \"straightClearanceRange\");\nfunction clearStraightEndpointCornerAxis(start, end, srcRect, dstRect, horizontal) {\n const range = straightClearanceRange(start, end, srcRect, dstRect, horizontal);\n if (!range) {\n return void 0;\n }\n const current = horizontal ? start.y : start.x;\n const next = Math.min(range.hi, Math.max(range.lo, current));\n if (Math.abs(next - current) < EPS2) {\n return void 0;\n }\n return horizontal ? [\n { x: start.x, y: next },\n { x: end.x, y: next }\n ] : [\n { x: next, y: start.y },\n { x: next, y: end.y }\n ];\n}\n__name(clearStraightEndpointCornerAxis, \"clearStraightEndpointCornerAxis\");\nfunction clearStraightEndpointCornerConnections(points, srcRect, dstRect) {\n if (points.length !== 2) {\n return points;\n }\n const [start, end] = points;\n if (sameY(start, end, EPS2)) {\n return clearStraightEndpointCornerAxis(start, end, srcRect, dstRect, true) ?? points;\n }\n if (sameX(start, end, EPS2)) {\n return clearStraightEndpointCornerAxis(start, end, srcRect, dstRect, false) ?? points;\n }\n return points;\n}\n__name(clearStraightEndpointCornerConnections, \"clearStraightEndpointCornerConnections\");\nfunction cornerClearedEndpoint(endpoint, r, side) {\n return isHorizontalSide(side) ? { x: endpoint.x, y: clampToCornerClearance(endpoint.y, r.top, r.bottom) } : { x: clampToCornerClearance(endpoint.x, r.left, r.right), y: endpoint.y };\n}\n__name(cornerClearedEndpoint, \"cornerClearedEndpoint\");\nfunction moveCollinearEndpointRun(points, endpointIndex, step, endpoint, adjusted, horizontalTerminal) {\n const next = points.map((point) => ({ ...point }));\n for (let index = endpointIndex; index >= 0 && index < points.length; index += step) {\n const point = points[index];\n if (horizontalTerminal && !sameY(point, endpoint, EPS2)) {\n break;\n }\n if (!horizontalTerminal && !sameX(point, endpoint, EPS2)) {\n break;\n }\n if (horizontalTerminal) {\n next[index].y = adjusted.y;\n } else {\n next[index].x = adjusted.x;\n }\n }\n return next;\n}\n__name(moveCollinearEndpointRun, \"moveCollinearEndpointRun\");\nfunction clearEndpointCornerConnection(points, r, atStart) {\n if (points.length < 2) {\n return points;\n }\n const endpointIndex = atStart ? 0 : points.length - 1;\n const step = atStart ? 1 : -1;\n const endpoint = points[endpointIndex];\n const adjacent = firstDistinctAdjacent(points, endpointIndex, step);\n if (!adjacent) {\n return points;\n }\n const side = terminalSideForSegment(endpoint, adjacent, r);\n if (!side) {\n return points;\n }\n const horizontalTerminal = isHorizontalSide(side);\n const adjusted = cornerClearedEndpoint(endpoint, r, side);\n if (samePoint(endpoint, adjusted, EPS2)) {\n return points;\n }\n return moveCollinearEndpointRun(\n points,\n endpointIndex,\n step,\n endpoint,\n adjusted,\n horizontalTerminal\n );\n}\n__name(clearEndpointCornerConnection, \"clearEndpointCornerConnection\");\nfunction borderSideForSegment(a, b, r) {\n const xWithin = Math.min(a.x, b.x) >= r.left - EPS2 && Math.max(a.x, b.x) <= r.right + EPS2;\n const yWithin = Math.min(a.y, b.y) >= r.top - EPS2 && Math.max(a.y, b.y) <= r.bottom + EPS2;\n if (Math.abs(a.y - r.top) < EPS2 && Math.abs(b.y - r.top) < EPS2 && xWithin) {\n return \"top\";\n }\n if (Math.abs(a.y - r.bottom) < EPS2 && Math.abs(b.y - r.bottom) < EPS2 && xWithin) {\n return \"bottom\";\n }\n if (Math.abs(a.x - r.left) < EPS2 && Math.abs(b.x - r.left) < EPS2 && yWithin) {\n return \"left\";\n }\n if (Math.abs(a.x - r.right) < EPS2 && Math.abs(b.x - r.right) < EPS2 && yWithin) {\n return \"right\";\n }\n return void 0;\n}\n__name(borderSideForSegment, \"borderSideForSegment\");\nfunction leavesOutward(side, from, to, r) {\n switch (side) {\n case \"top\":\n return sameX(from, to, EPS2) && to.y < r.top - EPS2;\n case \"bottom\":\n return sameX(from, to, EPS2) && to.y > r.bottom + EPS2;\n case \"left\":\n return sameY(from, to, EPS2) && to.x < r.left - EPS2;\n case \"right\":\n return sameY(from, to, EPS2) && to.x > r.right + EPS2;\n }\n}\n__name(leavesOutward, \"leavesOutward\");\nfunction collapseOwnBorderStub(points, r, atStart) {\n if (points.length < 3) {\n return points;\n }\n if (atStart) {\n const side2 = borderSideForSegment(points[0], points[1], r);\n if (side2 && leavesOutward(side2, points[1], points[2], r)) {\n return points.slice(1);\n }\n return points;\n }\n const last = points.length - 1;\n const side = borderSideForSegment(points[last - 1], points[last], r);\n if (side && leavesOutward(side, points[last - 1], points[last - 2], r)) {\n return points.slice(0, last);\n }\n return points;\n}\n__name(collapseOwnBorderStub, \"collapseOwnBorderStub\");\nfunction snapAndCollapseEndpoints(points, srcRect, dstRect) {\n let next = points;\n if (srcRect) {\n const adjacent = firstDistinctAdjacent(next, 0, 1);\n if (adjacent) {\n const snapped = snapEndpointToBoundary(adjacent, next[0], srcRect);\n if (snapped !== next[0]) {\n next = [snapped, ...next.slice(1)];\n }\n }\n next = collapseOwnBorderStub(next, srcRect, true);\n }\n if (dstRect) {\n const last = next.length - 1;\n const adjacent = firstDistinctAdjacent(next, last, -1);\n if (adjacent) {\n const snapped = snapEndpointToBoundary(adjacent, next[last], dstRect, true);\n if (snapped !== next[last]) {\n next = [...next.slice(0, last), snapped];\n }\n }\n next = collapseOwnBorderStub(next, dstRect, false);\n }\n const straightCleared = clearStraightEndpointCornerConnections(next, srcRect, dstRect);\n if (straightCleared !== next || next.length === 2) {\n return straightCleared;\n }\n if (srcRect) {\n next = clearEndpointCornerConnection(next, srcRect, true);\n }\n if (dstRect) {\n next = clearEndpointCornerConnection(next, dstRect, false);\n }\n return next;\n}\n__name(snapAndCollapseEndpoints, \"snapAndCollapseEndpoints\");\nfunction prepareEdgeEndpointsForRenderer(edges, nodeByIdMap) {\n for (const edge of edges) {\n const context = endpointContextFor(edge, nodeByIdMap, 2);\n if (!context) {\n continue;\n }\n const input = dedupeConsecutivePoints(context.points, EPS2);\n const newPts = snapAndCollapseEndpoints(input, context.srcRect, context.dstRect);\n if (newPts.length < 3) {\n context.edge.points = newPts;\n continue;\n }\n const duplicated = [\n newPts[0],\n { ...newPts[0] },\n ...newPts.slice(1, -1),\n newPts[newPts.length - 1],\n { ...newPts[newPts.length - 1] }\n ];\n context.edge.points = duplicated;\n }\n}\n__name(prepareEdgeEndpointsForRenderer, \"prepareEdgeEndpointsForRenderer\");\n\n// src/rendering-util/layout-algorithms/swimlanes/direction/lrTransform.ts\nfunction buildNodeMap(nodes) {\n return new Map(nodes.map((node) => [node.id, node]));\n}\n__name(buildNodeMap, \"buildNodeMap\");\nfunction resolveTopLevelGroupId(node, nodeById) {\n let parentId = node.parentId;\n let topLevelGroupId = null;\n while (parentId) {\n const parent = nodeById.get(parentId);\n if (!parent?.isGroup) {\n break;\n }\n topLevelGroupId = parent.id;\n parentId = parent.parentId;\n }\n return topLevelGroupId;\n}\n__name(resolveTopLevelGroupId, \"resolveTopLevelGroupId\");\nfunction groupDepth(group, nodeById) {\n let depth = 0;\n let parentId = group.parentId;\n while (parentId) {\n const parent = nodeById.get(parentId);\n if (!parent?.isGroup) {\n break;\n }\n depth++;\n parentId = parent.parentId;\n }\n return depth;\n}\n__name(groupDepth, \"groupDepth\");\nfunction boundsForChildren(children) {\n let minX = Infinity;\n let maxX = -Infinity;\n let minY = Infinity;\n let maxY = -Infinity;\n for (const child of children) {\n const cx = child.x;\n const cy = child.y;\n if (typeof cx !== \"number\" || typeof cy !== \"number\") {\n continue;\n }\n const w = child.width ?? 0;\n const h = child.height ?? 0;\n minX = Math.min(minX, cx - w / 2);\n maxX = Math.max(maxX, cx + w / 2);\n minY = Math.min(minY, cy - h / 2);\n maxY = Math.max(maxY, cy + h / 2);\n }\n if (minX === Infinity || minY === Infinity) {\n return null;\n }\n return { minX, maxX, minY, maxY };\n}\n__name(boundsForChildren, \"boundsForChildren\");\nfunction applyGroupBounds(group, bounds) {\n const pad = group.padding ?? 20;\n group.x = (bounds.minX + bounds.maxX) / 2;\n group.y = (bounds.minY + bounds.maxY) / 2;\n group.width = Math.max(0, bounds.maxX - bounds.minX) + pad;\n group.height = Math.max(0, bounds.maxY - bounds.minY) + pad;\n}\n__name(applyGroupBounds, \"applyGroupBounds\");\nfunction recomputeNestedGroupBounds(nodes) {\n const nodeById = buildNodeMap(nodes);\n const groupsByDepth = nodes.filter((node) => node.isGroup && node.parentId).sort((a, b) => groupDepth(b, nodeById) - groupDepth(a, nodeById));\n for (const group of groupsByDepth) {\n const children = nodes.filter((node) => node.parentId === group.id);\n const bounds = boundsForChildren(children);\n if (bounds) {\n applyGroupBounds(group, bounds);\n }\n }\n}\n__name(recomputeNestedGroupBounds, \"recomputeNestedGroupBounds\");\nfunction mirrorAxis(layout, axis) {\n const nodes = layout.nodes ?? [];\n const edges = layout.edges ?? [];\n const contentNodes = nodes.filter((node) => !node.isGroup);\n let min = Infinity;\n let max = -Infinity;\n for (const node of contentNodes) {\n const value = node[axis];\n if (typeof value !== \"number\") {\n continue;\n }\n min = Math.min(min, value);\n max = Math.max(max, value);\n }\n if (!Number.isFinite(min) || !Number.isFinite(max)) {\n return false;\n }\n const mirror = /* @__PURE__ */ __name((value) => min + max - value, \"mirror\");\n for (const node of nodes) {\n const value = node[axis];\n if (typeof value === \"number\") {\n node[axis] = mirror(value);\n }\n const titleRect = node.groupTitleRect;\n if (titleRect) {\n node.groupTitleRect = axis === \"x\" ? {\n ...titleRect,\n left: mirror(titleRect.right),\n right: mirror(titleRect.left)\n } : {\n ...titleRect,\n top: mirror(titleRect.bottom),\n bottom: mirror(titleRect.top)\n };\n }\n }\n for (const edge of edges) {\n for (const point of edge.points ?? []) {\n point[axis] = mirror(point[axis]);\n }\n }\n return true;\n}\n__name(mirrorAxis, \"mirrorAxis\");\nfunction applyBtDirectionTransform(layout) {\n const nodes = layout.nodes ?? [];\n if (!nodes.some((node) => !node.isGroup)) {\n return true;\n }\n return mirrorAxis(layout, \"y\");\n}\n__name(applyBtDirectionTransform, \"applyBtDirectionTransform\");\nfunction applyLrDirectionTransform(layout, direction = \"LR\") {\n const nodes = layout.nodes ?? [];\n const edges = layout.edges ?? [];\n const contentNodes = nodes.filter((n) => !n.isGroup);\n let minX = Infinity;\n let minY = Infinity;\n for (const n of contentNodes) {\n const x0 = n.x ?? 0;\n const y0 = n.y ?? 0;\n if (x0 < minX) {\n minX = x0;\n }\n if (y0 < minY) {\n minY = y0;\n }\n }\n if (!Number.isFinite(minX) || !Number.isFinite(minY)) {\n return false;\n }\n const titleBandSize = 36;\n let totalWidth = 0;\n let totalHeight = 0;\n for (const n of contentNodes) {\n totalWidth += n.width ?? 0;\n totalHeight += n.height ?? 0;\n }\n const avgWidth = totalWidth / contentNodes.length;\n const avgHeight = totalHeight / contentNodes.length;\n const horizontalScaleFactor = avgHeight > 0 ? Math.max(1, avgWidth / avgHeight) : 1;\n for (const n of contentNodes) {\n const x0 = n.x ?? 0;\n const y0 = n.y ?? 0;\n const newX = (y0 - minY) * horizontalScaleFactor + titleBandSize;\n const newY = x0 - minX;\n n.x = newX;\n n.y = newY;\n }\n for (const e of edges) {\n if (!e.points) {\n continue;\n }\n for (const p of e.points) {\n const x0 = p.x;\n const y0 = p.y;\n const newX = (y0 - minY) * horizontalScaleFactor + titleBandSize;\n const newY = x0 - minX;\n p.x = newX;\n p.y = newY;\n }\n }\n recomputeNestedGroupBounds(nodes);\n const laneNodes = nodes.filter((n) => n.isGroup && !n.parentId);\n if (laneNodes.length === 0) {\n if (direction === \"RL\") {\n mirrorAxis(layout, \"x\");\n }\n return true;\n }\n const nodeById = buildNodeMap(nodes);\n const childrenByLane = /* @__PURE__ */ new Map();\n for (const n of nodes) {\n if (n.isGroup) {\n continue;\n }\n const laneId = resolveTopLevelGroupId(n, nodeById);\n if (!laneId) {\n continue;\n }\n const bucket = childrenByLane.get(laneId) ?? [];\n bucket.push(n);\n childrenByLane.set(laneId, bucket);\n }\n let maxPad = 0;\n for (const lane of laneNodes) {\n const pad = lane.padding ?? 0;\n if (pad > maxPad) {\n maxPad = pad;\n }\n }\n const laneBounds = [];\n let globalMinXChild = Infinity;\n let globalMaxXChild = -Infinity;\n for (const lane of laneNodes) {\n const children = childrenByLane.get(lane.id) ?? [];\n const bounds = boundsForChildren(children);\n if (!bounds) {\n continue;\n }\n globalMinXChild = Math.min(globalMinXChild, bounds.minX);\n globalMaxXChild = Math.max(globalMaxXChild, bounds.maxX);\n laneBounds.push({\n lane,\n contentTop: bounds.minY,\n contentBottom: bounds.maxY,\n centerY: (bounds.minY + bounds.maxY) / 2\n });\n }\n if (globalMinXChild === Infinity || globalMaxXChild === -Infinity) {\n return true;\n }\n const fullContentWidth = Math.max(0, globalMaxXChild - globalMinXChild);\n const horizontalMargin = Math.max(maxPad, 10);\n const bodyWidth = fullContentWidth + 2 * horizontalMargin;\n const laneWidth = titleBandSize + bodyWidth;\n const bodyCenter = (globalMinXChild + globalMaxXChild) / 2;\n const bodyLeft = bodyCenter - bodyWidth / 2;\n const laneLeft = bodyLeft - titleBandSize;\n const centerX = laneLeft + laneWidth / 2;\n const verticalMargin = Math.max(maxPad, titleBandSize);\n laneBounds.sort((a, b) => a.centerY - b.centerY);\n for (let i = 0; i < laneBounds.length; i++) {\n const curr = laneBounds[i];\n let laneTop;\n let laneBottom;\n if (i === 0) {\n laneTop = curr.contentTop - verticalMargin;\n } else {\n const prev = laneBounds[i - 1];\n laneTop = (prev.contentBottom + curr.contentTop) / 2;\n }\n if (i === laneBounds.length - 1) {\n laneBottom = curr.contentBottom + verticalMargin;\n } else {\n const next = laneBounds[i + 1];\n laneBottom = (curr.contentBottom + next.contentTop) / 2;\n }\n const laneHeight = Math.max(0, laneBottom - laneTop);\n const centerY = (laneTop + laneBottom) / 2;\n curr.lane.x = centerX;\n curr.lane.y = centerY;\n curr.lane.width = laneWidth;\n curr.lane.height = laneHeight;\n curr.lane.swimlaneContentTop = curr.contentTop;\n curr.lane.groupTitleRect = {\n left: laneLeft,\n right: laneLeft + titleBandSize,\n top: laneTop,\n bottom: laneBottom\n };\n }\n if (direction === \"RL\") {\n mirrorAxis(layout, \"x\");\n }\n return true;\n}\n__name(applyLrDirectionTransform, \"applyLrDirectionTransform\");\n\n// src/rendering-util/layout-algorithms/swimlanes/direction/portSwap.ts\nvar EPS3 = 1e-6;\nvar MIN_PORT_SPACING = 8;\nvar PORT_SHIFT = MIN_PORT_SPACING;\nvar TRY_DELTAS = [0, PORT_SHIFT, -PORT_SHIFT, 2 * PORT_SHIFT, -2 * PORT_SHIFT];\nfunction portSwapToLShape(edges, nodes) {\n const { nodeInfoById, realNodeRects } = collectRealNodeBounds(nodes);\n for (const edge of edges) {\n if (edge.isLayoutOnly) {\n continue;\n }\n const pts = edge.points;\n if (!pts || pts.length < 4) {\n continue;\n }\n const route = classifyThreeSegmentRoute(dedupeConsecutivePoints(pts, EPS3), EPS3);\n if (!route) {\n continue;\n }\n const { p3 } = route;\n const isHVH = route.kind === \"HVH\";\n const nodePair = getNodePairGeometry(edge, nodeInfoById, EPS3);\n if (!nodePair) {\n continue;\n }\n const { srcId, dstId, srcInfo, dstInfo, collinearX, collinearY } = nodePair;\n if (collinearX || collinearY) {\n continue;\n }\n let newPts;\n const srcRect = srcInfo.rect;\n for (const delta of TRY_DELTAS) {\n let np0;\n let np1;\n let np2;\n if (isHVH) {\n const dstBelow = dstInfo.cy > srcInfo.cy;\n const newSrcY = dstBelow ? srcRect.bottom : srcRect.top;\n const newSrcX = srcInfo.cx + delta;\n if (newSrcX <= srcRect.left + EPS3 || newSrcX >= srcRect.right - EPS3) {\n continue;\n }\n np0 = { x: newSrcX, y: newSrcY };\n np1 = { x: newSrcX, y: p3.y };\n np2 = { x: p3.x, y: p3.y };\n } else {\n const dstEast = dstInfo.cx > srcInfo.cx;\n const newSrcX = dstEast ? srcRect.right : srcRect.left;\n const newSrcY = srcInfo.cy + delta;\n if (newSrcY <= srcRect.top + EPS3 || newSrcY >= srcRect.bottom - EPS3) {\n continue;\n }\n np0 = { x: newSrcX, y: newSrcY };\n np1 = { x: p3.x, y: newSrcY };\n np2 = { x: p3.x, y: p3.y };\n }\n const firstSegDegenerate = samePoint(np0, np1, EPS3);\n const secondSegDegenerate = samePoint(np1, np2, EPS3);\n if (firstSegDegenerate && secondSegDegenerate) {\n continue;\n }\n if (!firstSegDegenerate && segmentHitsAnyRect(np0, np1, realNodeRects, [srcId], 1)) {\n continue;\n }\n if (!secondSegDegenerate && segmentHitsAnyRect(np1, np2, realNodeRects, [dstId], 1)) {\n continue;\n }\n const firstSegConflicts = !firstSegDegenerate && segmentConflictsWithAnyEdge(np0, np1, edges, edge, {\n epsilon: EPS3,\n skipDegenerateOther: true\n });\n const secondSegConflicts = !secondSegDegenerate && segmentConflictsWithAnyEdge(np1, np2, edges, edge, {\n epsilon: EPS3,\n skipDegenerateOther: true\n });\n if (firstSegConflicts || secondSegConflicts) {\n continue;\n }\n if (firstSegDegenerate) {\n newPts = [np1, np2];\n } else if (secondSegDegenerate) {\n newPts = [np0, np1];\n } else {\n newPts = [np0, np1, np2];\n }\n break;\n }\n if (newPts) {\n edge.points = newPts;\n }\n }\n}\n__name(portSwapToLShape, \"portSwapToLShape\");\n\n// src/rendering-util/layout-algorithms/swimlanes/direction/terminalStub.ts\nfunction collapseShortTerminalStub(edges, nodeByIdMap) {\n const MIN_STUB = 10;\n const EPS_LOCAL2 = 1e-3;\n const BUFFER = 2;\n const { realNodeRects, labelNodeRects: labelRects } = collectNodeRectEntries(\n nodeByIdMap.values()\n );\n for (const edge of edges) {\n if (edge.isLayoutOnly) {\n continue;\n }\n const rawPts = edge.points;\n if (!rawPts || rawPts.length < 4) {\n continue;\n }\n const pts = dedupeConsecutivePoints(rawPts, EPS_LOCAL2);\n if (pts.length < 4) {\n continue;\n }\n const nLast = pts.length - 1;\n const endPt = pts[nLast];\n const penultPt = pts[nLast - 1];\n const prevPt = pts[nLast - 2];\n const lastDx = endPt.x - penultPt.x;\n const lastDy = endPt.y - penultPt.y;\n const lastLen = Math.hypot(lastDx, lastDy);\n if (lastLen >= MIN_STUB || lastLen < EPS_LOCAL2) {\n continue;\n }\n const penultDx = penultPt.x - prevPt.x;\n const penultDy = penultPt.y - prevPt.y;\n const penultLen = Math.hypot(penultDx, penultDy);\n if (penultLen < EPS_LOCAL2) {\n continue;\n }\n const lastIsHoriz = isHorizontalSegment(penultPt, endPt, EPS_LOCAL2);\n const lastIsVert = isVerticalSegment(penultPt, endPt, EPS_LOCAL2);\n const penultIsHoriz = isHorizontalSegment(prevPt, penultPt, EPS_LOCAL2);\n const penultIsVert = isVerticalSegment(prevPt, penultPt, EPS_LOCAL2);\n if (!(lastIsHoriz && penultIsVert || lastIsVert && penultIsHoriz)) {\n continue;\n }\n const dstId = edge.end;\n const srcId = edge.start;\n const dst = dstId ? nodeByIdMap.get(dstId) : void 0;\n if (!dst) {\n continue;\n }\n const dstCx = dst.x ?? 0;\n const dstCy = dst.y ?? 0;\n const dstRect = rectOfNodeBounds(dst);\n if (!dstRect) {\n continue;\n }\n let newPrev;\n let newEnd;\n if (penultIsVert) {\n const approachFromBelow = penultDy < 0;\n newPrev = { x: dstCx, y: prevPt.y };\n newEnd = { x: dstCx, y: approachFromBelow ? dstRect.bottom : dstRect.top };\n } else {\n const approachFromLeft = penultDx > 0;\n newPrev = { x: prevPt.x, y: dstCy };\n newEnd = { x: approachFromLeft ? dstRect.right : dstRect.left, y: dstCy };\n }\n if (segmentHitsAnyRect(newPrev, newEnd, realNodeRects, dstId ? [dstId] : [], -BUFFER)) {\n continue;\n }\n if (segmentHitsAnyRect(newPrev, newEnd, labelRects, [], -BUFFER)) {\n continue;\n }\n if (srcId) {\n const src = nodeByIdMap.get(srcId);\n const srcRect = src ? rectOfNodeBounds(src) : void 0;\n if (srcRect && pointInsideRect(newPrev, srcRect, BUFFER)) {\n continue;\n }\n }\n const ownSegmentKey = /* @__PURE__ */ __name((a, b) => `${a.x.toFixed(3)},${a.y.toFixed(3)}|${b.x.toFixed(3)},${b.y.toFixed(3)}`, \"ownSegmentKey\");\n const selfSegments = /* @__PURE__ */ new Set();\n for (let i = 0; i < pts.length - 1; i++) {\n selfSegments.add(ownSegmentKey(pts[i], pts[i + 1]));\n }\n const segmentCrossesOtherEdge = /* @__PURE__ */ __name((from, to) => {\n for (const other of edges) {\n if (other === edge) {\n continue;\n }\n if (other.isLayoutOnly) {\n continue;\n }\n const oPts = other.points;\n if (!oPts || oPts.length < 2) {\n continue;\n }\n for (let i = 0; i < oPts.length - 1; i++) {\n const a = oPts[i];\n const b = oPts[i + 1];\n if (selfSegments.has(ownSegmentKey(a, b))) {\n continue;\n }\n if (orthogonalSegmentsStrictlyCross(from, to, a, b, EPS_LOCAL2)) {\n return true;\n }\n }\n }\n return false;\n }, \"segmentCrossesOtherEdge\");\n if (segmentCrossesOtherEdge(newPrev, newEnd)) {\n continue;\n }\n if (nLast - 3 >= 0) {\n const beforePrev = pts[nLast - 3];\n const endpointIds = [srcId, dstId].filter((id) => Boolean(id));\n if (segmentHitsAnyRect(beforePrev, newPrev, realNodeRects, endpointIds, -BUFFER)) {\n continue;\n }\n if (segmentCrossesOtherEdge(beforePrev, newPrev)) {\n continue;\n }\n }\n const head = pts.slice(0, nLast - 2);\n const newPts = [...head, newPrev, newEnd];\n edge.points = newPts;\n const labelId = edge.labelNodeId;\n if (labelId) {\n const labelNode = nodeByIdMap.get(labelId);\n if (labelNode) {\n const lw = labelNode.width ?? 0;\n const lh = labelNode.height ?? 0;\n if (lw > 0 && lh > 0) {\n let bestMidX;\n let bestMidY;\n let bestLen = -1;\n for (let i = 0; i < newPts.length - 1; i++) {\n const a = newPts[i];\n const b = newPts[i + 1];\n const segLen = Math.hypot(b.x - a.x, b.y - a.y);\n const isHoriz = sameY(a, b, EPS_LOCAL2);\n const isVert = sameX(a, b, EPS_LOCAL2);\n const fits = isHoriz && segLen >= lw + 2 || isVert && segLen >= lh + 2;\n if (!fits) {\n continue;\n }\n if (segLen > bestLen) {\n bestLen = segLen;\n bestMidX = (a.x + b.x) / 2;\n bestMidY = (a.y + b.y) / 2;\n }\n }\n if (bestMidX !== void 0 && bestMidY !== void 0) {\n labelNode.x = bestMidX;\n labelNode.y = bestMidY;\n }\n }\n }\n }\n }\n}\n__name(collapseShortTerminalStub, \"collapseShortTerminalStub\");\n\n// src/rendering-util/layout-algorithms/swimlanes/direction/materializedGeometry.ts\nvar EPS_LOCAL = 1e-3;\nvar MIN_SHARED = 8;\nvar segmentsFor = orthogonalSegmentsForPoints;\nvar orthogonallyAligned = /* @__PURE__ */ __name((a, b) => sameX(a, b, EPS_LOCAL) || sameY(a, b, EPS_LOCAL), \"orthogonallyAligned\");\nfunction separateSharedRenderedTerminalLanes(edges, nodeByIdMap) {\n const MIN_FACE_CLEARANCE = 16;\n const TRACK_SHIFT = 7;\n const rectIntersect = /* @__PURE__ */ __name((node, point) => {\n const x = node.x ?? 0;\n const y = node.y ?? 0;\n const dx = point.x - x;\n const dy = point.y - y;\n let w = (node.width ?? 0) / 2;\n let h = (node.height ?? 0) / 2;\n if (Math.abs(dy) * w > Math.abs(dx) * h) {\n if (dy < 0) {\n h = -h;\n }\n return { x: x + (dy === 0 ? 0 : h * dx / dy), y: y + h };\n }\n if (dx < 0) {\n w = -w;\n }\n return { x: x + w, y: y + (dx === 0 ? 0 : w * dy / dx) };\n }, \"rectIntersect\");\n const terminalLaneFor = /* @__PURE__ */ __name((edge, atStart) => {\n const points = dedupeConsecutivePoints(edge.points ?? []);\n if (points.length < 2) {\n return void 0;\n }\n const nodeId = atStart ? edge.start : edge.end;\n const node = nodeId ? nodeByIdMap.get(nodeId) : void 0;\n const rect = node ? rectOfNodeBounds(node) : void 0;\n if (!node || !nodeId || !rect) {\n return void 0;\n }\n const endpoint = atStart ? points[0] : points[points.length - 1];\n const adjacent = atStart ? points[1] : points[points.length - 2];\n const boundary = rectIntersect(node, endpoint);\n let railEnd = endpoint;\n if (orthogonallyAligned(adjacent, boundary)) {\n railEnd = adjacent;\n }\n if (sameX(boundary, railEnd, EPS_LOCAL)) {\n return {\n edge,\n edgeId: String(edge.id ?? \"\"),\n nodeId,\n atStart,\n orientation: \"V\",\n coord: boundary.x,\n min: Math.min(boundary.y, railEnd.y),\n max: Math.max(boundary.y, railEnd.y),\n boundary,\n railEnd,\n rect\n };\n }\n if (sameY(boundary, railEnd, EPS_LOCAL)) {\n return {\n edge,\n edgeId: String(edge.id ?? \"\"),\n nodeId,\n atStart,\n orientation: \"H\",\n coord: boundary.y,\n min: Math.min(boundary.x, railEnd.x),\n max: Math.max(boundary.x, railEnd.x),\n boundary,\n railEnd,\n rect\n };\n }\n return void 0;\n }, \"terminalLaneFor\");\n const projectedOverlapLength = /* @__PURE__ */ __name((a, b) => Math.max(0, Math.min(a.max, b.max) - Math.max(a.min, b.min)), \"projectedOverlapLength\");\n const sameTerminalFace = /* @__PURE__ */ __name((a, b) => {\n if (a.nodeId !== b.nodeId || a.orientation !== b.orientation) {\n return false;\n }\n if (a.orientation === \"H\") {\n const aOnHorizontalFace = Math.abs(a.boundary.x - a.rect.left) < 1 || Math.abs(a.boundary.x - a.rect.right) < 1;\n return aOnHorizontalFace && sameX(a.boundary, b.boundary, 1);\n }\n const aOnVerticalFace = Math.abs(a.boundary.y - a.rect.top) < 1 || Math.abs(a.boundary.y - a.rect.bottom) < 1;\n return aOnVerticalFace && sameY(a.boundary, b.boundary, 1);\n }, \"sameTerminalFace\");\n const exactTerminalLaneConflict = /* @__PURE__ */ __name((a, b) => {\n if (a.nodeId !== b.nodeId || a.orientation !== b.orientation) {\n return false;\n }\n const shared = projectedOverlapLength(a, b);\n return shared >= MIN_SHARED && Math.abs(a.coord - b.coord) < 0.5;\n }, \"exactTerminalLaneConflict\");\n const nearTerminalLaneConflict = /* @__PURE__ */ __name((a, b) => {\n if (a.nodeId !== b.nodeId || a.orientation !== b.orientation || a.orientation !== \"H\" || a.atStart === b.atStart) {\n return false;\n }\n const shared = projectedOverlapLength(a, b);\n if (shared < MIN_SHARED) {\n return false;\n }\n const faceSpan = a.rect.bottom - a.rect.top;\n if (shared < faceSpan || shared > 2 * faceSpan) {\n return false;\n }\n return sameTerminalFace(a, b) && Math.abs(a.coord - b.coord) < MIN_FACE_CLEARANCE;\n }, \"nearTerminalLaneConflict\");\n const shiftedCandidate = /* @__PURE__ */ __name((lane, shift) => {\n const points = dedupeConsecutivePoints(lane.edge.points ?? []);\n if (points.length < 2) {\n return void 0;\n }\n const shiftedBoundary = lane.orientation === \"V\" ? { x: lane.boundary.x + shift, y: lane.boundary.y } : { x: lane.boundary.x, y: lane.boundary.y + shift };\n const shiftedRailEnd = lane.orientation === \"V\" ? { x: lane.railEnd.x + shift, y: lane.railEnd.y } : { x: lane.railEnd.x, y: lane.railEnd.y + shift };\n const boundaryStaysOnSameFace = /* @__PURE__ */ __name(() => {\n if (Math.abs(lane.boundary.y - lane.rect.top) < 1 || Math.abs(lane.boundary.y - lane.rect.bottom) < 1) {\n return sameY(shiftedBoundary, lane.boundary, EPS_LOCAL) && shiftedBoundary.x >= lane.rect.left + 1 && shiftedBoundary.x <= lane.rect.right - 1;\n }\n if (Math.abs(lane.boundary.x - lane.rect.left) < 1 || Math.abs(lane.boundary.x - lane.rect.right) < 1) {\n return sameX(shiftedBoundary, lane.boundary, EPS_LOCAL) && shiftedBoundary.y >= lane.rect.top + 1 && shiftedBoundary.y <= lane.rect.bottom - 1;\n }\n return false;\n }, \"boundaryStaysOnSameFace\");\n if (!boundaryStaysOnSameFace()) {\n return void 0;\n }\n if (lane.atStart) {\n const railEndIsAdjacent2 = points.length > 1 && samePoint(points[1], lane.railEnd, EPS_LOCAL);\n const rest = points.slice(railEndIsAdjacent2 ? 2 : 1);\n const next = rest[0];\n if (next && !orthogonallyAligned(next, shiftedRailEnd)) {\n return void 0;\n }\n return [shiftedBoundary, shiftedRailEnd, ...rest];\n }\n const railEndIsAdjacent = points.length > 1 && samePoint(points[points.length - 2], lane.railEnd, EPS_LOCAL);\n const before = points.slice(0, railEndIsAdjacent ? -2 : -1);\n const previous = before[before.length - 1];\n if (previous && !orthogonallyAligned(previous, shiftedRailEnd)) {\n return void 0;\n }\n return [...before, shiftedRailEnd, shiftedBoundary];\n }, \"shiftedCandidate\");\n const laneIsStraightCollinearConnector = /* @__PURE__ */ __name((lane) => {\n const edge = lane.edge;\n const points = dedupeConsecutivePoints(edge.points ?? []);\n if (points.length !== 2) {\n return false;\n }\n const startId = edge.start;\n const endId = edge.end;\n const start = startId ? nodeByIdMap.get(startId) : void 0;\n const end = endId ? nodeByIdMap.get(endId) : void 0;\n if (!start || !end) {\n return false;\n }\n const startX = start.x ?? 0;\n const startY = start.y ?? 0;\n const endX = end.x ?? 0;\n const endY = end.y ?? 0;\n const [a, b] = points;\n return sameY(a, b, EPS_LOCAL) && Math.abs(startY - endY) < 1 && Math.abs(startX - endX) > 1 || sameX(a, b, EPS_LOCAL) && Math.abs(startX - endX) < 1 && Math.abs(startY - endY) > 1;\n }, \"laneIsStraightCollinearConnector\");\n const shifts = [\n -TRACK_SHIFT,\n TRACK_SHIFT,\n -2 * TRACK_SHIFT,\n 2 * TRACK_SHIFT,\n -3 * TRACK_SHIFT,\n 3 * TRACK_SHIFT\n ];\n for (let iteration = 0; iteration < 8; iteration++) {\n const lanes = edges.filter((edge) => !edge.isLayoutOnly).flatMap((edge) => [terminalLaneFor(edge, true), terminalLaneFor(edge, false)]).filter((lane) => Boolean(lane));\n let fixed = false;\n for (let i = 0; i < lanes.length && !fixed; i++) {\n for (let j = i + 1; j < lanes.length && !fixed; j++) {\n const first = lanes[i];\n const second = lanes[j];\n if (first.edge === second.edge || !(exactTerminalLaneConflict(first, second) || nearTerminalLaneConflict(first, second))) {\n continue;\n }\n const fixingNearConflict = !exactTerminalLaneConflict(first, second);\n const candidates = [first, second].sort((a, b) => {\n const aPreservesStraight = laneIsStraightCollinearConnector(a);\n const bPreservesStraight = laneIsStraightCollinearConnector(b);\n if (aPreservesStraight !== bPreservesStraight) {\n return Number(aPreservesStraight) - Number(bPreservesStraight);\n }\n return Number(!b.atStart) - Number(!a.atStart);\n });\n for (const lane of candidates) {\n for (const shift of shifts) {\n const candidate = shiftedCandidate(lane, shift);\n if (!candidate) {\n continue;\n }\n const nextLane = terminalLaneFor({ ...lane.edge, points: candidate }, lane.atStart);\n if (!nextLane || lanes.some(\n (other) => other.edge !== lane.edge && (exactTerminalLaneConflict(nextLane, other) || fixingNearConflict && nearTerminalLaneConflict(nextLane, other))\n )) {\n continue;\n }\n lane.edge.points = candidate;\n fixed = true;\n break;\n }\n if (fixed) {\n break;\n }\n }\n }\n }\n if (!fixed) {\n return;\n }\n }\n}\n__name(separateSharedRenderedTerminalLanes, \"separateSharedRenderedTerminalLanes\");\nfunction collapseRedundantRectangularDoglegs(edges, nodeByIdMap) {\n const BUFFER = 2;\n const MAX_ITERATIONS = 8;\n const { realNodeRects, labelNodeRects: labelRects } = collectNodeRectEntries(\n nodeByIdMap.values()\n );\n const candidateIsSafe = /* @__PURE__ */ __name((edge, candidate) => {\n const sourceId = edge.start;\n const targetId = edge.end;\n const candidateSegments = segmentsFor(candidate);\n if (candidateSegments.length !== candidate.length - 1) {\n return false;\n }\n const endpointIds = [sourceId, targetId].filter((id) => Boolean(id));\n for (const segment of candidateSegments) {\n if (segmentHitsAnyRect(segment.a, segment.b, realNodeRects, endpointIds, -BUFFER)) {\n return false;\n }\n if (segmentHitsAnyRect(segment.a, segment.b, labelRects, [], -BUFFER)) {\n return false;\n }\n }\n for (const other of edges) {\n if (other === edge || other.isLayoutOnly) {\n continue;\n }\n const otherPoints = other.points;\n if (!otherPoints || otherPoints.length < 2) {\n continue;\n }\n for (const candidateSegment of candidateSegments) {\n for (const otherSegment of segmentsFor(dedupeConsecutivePoints(otherPoints))) {\n if (sameAxisSegmentOverlapLength(candidateSegment, otherSegment, 0.5) >= MIN_SHARED) {\n return false;\n }\n if (orthogonalSegmentsStrictlyCross(\n candidateSegment.a,\n candidateSegment.b,\n otherSegment.a,\n otherSegment.b,\n EPS_LOCAL\n )) {\n return false;\n }\n }\n }\n }\n return true;\n }, \"candidateIsSafe\");\n const withoutDogleg = /* @__PURE__ */ __name((points, i) => {\n if (i + 4 >= points.length) {\n return void 0;\n }\n const p0 = points[i];\n const p1 = points[i + 1];\n const p2 = points[i + 2];\n const p3 = points[i + 3];\n const p4 = points[i + 4];\n const terminalVerticalDogleg = isHorizontalSegment(p0, p1) && isVerticalSegment(p1, p2) && isHorizontalSegment(p2, p3) && isVerticalSegment(p3, p4) && sameX(p0, p3, EPS_LOCAL) && sameX(p0, p4, EPS_LOCAL) && sameX(p1, p2, EPS_LOCAL) && (p1.x - p0.x) * (p3.x - p2.x) < 0;\n const terminalHorizontalDogleg = isVerticalSegment(p0, p1) && isHorizontalSegment(p1, p2) && isVerticalSegment(p2, p3) && isHorizontalSegment(p3, p4) && sameY(p0, p3, EPS_LOCAL) && sameY(p0, p4, EPS_LOCAL) && sameY(p1, p2, EPS_LOCAL) && (p1.y - p0.y) * (p3.y - p2.y) < 0;\n if (terminalVerticalDogleg || terminalHorizontalDogleg) {\n return dedupeConsecutivePoints([...points.slice(0, i + 1), p4, ...points.slice(i + 5)]);\n }\n if (i + 5 >= points.length) {\n return void 0;\n }\n const p5 = points[i + 5];\n const verticalDogleg = isVerticalSegment(p0, p1) && isHorizontalSegment(p1, p2) && isVerticalSegment(p2, p3) && isHorizontalSegment(p3, p4) && isVerticalSegment(p4, p5) && sameX(p0, p4, EPS_LOCAL) && sameX(p0, p5, EPS_LOCAL) && sameX(p2, p3, EPS_LOCAL) && (p2.x - p1.x) * (p4.x - p3.x) < 0;\n const horizontalDogleg = isHorizontalSegment(p0, p1) && isVerticalSegment(p1, p2) && isHorizontalSegment(p2, p3) && isVerticalSegment(p3, p4) && isHorizontalSegment(p4, p5) && sameY(p0, p4, EPS_LOCAL) && sameY(p0, p5, EPS_LOCAL) && sameY(p2, p3, EPS_LOCAL) && (p2.y - p1.y) * (p4.y - p3.y) < 0;\n if (!verticalDogleg && !horizontalDogleg) {\n return void 0;\n }\n return dedupeConsecutivePoints([...points.slice(0, i + 1), p5, ...points.slice(i + 6)]);\n }, \"withoutDogleg\");\n for (let iteration = 0; iteration < MAX_ITERATIONS; iteration++) {\n let fixed = false;\n for (const edge of edges) {\n if (edge.isLayoutOnly) {\n continue;\n }\n const points = dedupeConsecutivePoints(edge.points ?? []);\n for (let i = 0; i <= points.length - 5; i++) {\n const candidate = withoutDogleg(points, i);\n if (!candidate || !candidateIsSafe(edge, candidate)) {\n continue;\n }\n edge.points = candidate;\n fixed = true;\n break;\n }\n if (fixed) {\n break;\n }\n }\n if (!fixed) {\n return;\n }\n }\n}\n__name(collapseRedundantRectangularDoglegs, \"collapseRedundantRectangularDoglegs\");\nfunction liftObstacleHuggingSameSideRails(edges, nodeByIdMap) {\n const BUFFER = 2;\n const CLEARANCE = 20;\n const MAX_ITERATIONS = 8;\n const { realNodeRects, labelNodeRects: labelRects } = collectNodeRectEntries(\n nodeByIdMap.values()\n );\n const visibleEdges = edges.filter((edge) => !edge.isLayoutOnly);\n const pointsFor = /* @__PURE__ */ __name((edge, replacementEdge, replacement) => dedupeConsecutivePoints(\n edge === replacementEdge ? replacement ?? [] : edge.points ?? []\n ), \"pointsFor\");\n const strictCrossingCount = /* @__PURE__ */ __name((replacementEdge, replacement) => {\n let count = 0;\n for (let i = 0; i < visibleEdges.length; i++) {\n const firstSegments = segmentsFor(pointsFor(visibleEdges[i], replacementEdge, replacement));\n for (let j = i + 1; j < visibleEdges.length; j++) {\n const secondSegments = segmentsFor(\n pointsFor(visibleEdges[j], replacementEdge, replacement)\n );\n for (const firstSegment of firstSegments) {\n for (const secondSegment of secondSegments) {\n if (orthogonalSegmentsStrictlyCross(\n firstSegment.a,\n firstSegment.b,\n secondSegment.a,\n secondSegment.b,\n EPS_LOCAL\n )) {\n count++;\n }\n }\n }\n }\n }\n return count;\n }, \"strictCrossingCount\");\n const middleRail = /* @__PURE__ */ __name((points) => {\n const segments = segmentsFor(points);\n if (segments.length !== 3) {\n return void 0;\n }\n const middle = segments[1];\n if (segments[0].horizontal === middle.horizontal || segments[2].horizontal === middle.horizontal) {\n return void 0;\n }\n return {\n index: middle.index,\n horizontal: middle.horizontal,\n vertical: middle.vertical,\n segment: middle\n };\n }, \"middleRail\");\n const blockingRectsFor = /* @__PURE__ */ __name((edge, rail) => {\n const endpointIds = [edge.start, edge.end].filter(\n (id) => Boolean(id)\n );\n return realNodeRects.filter((entry) => {\n if (endpointIds.includes(entry.id)) {\n return false;\n }\n const rect = entry.rect;\n if (rail.horizontal) {\n const xOverlap = overlapLength(rail.a.x, rail.b.x, rect.left, rect.right);\n return xOverlap >= MIN_SHARED && rail.a.y >= rect.top - BUFFER && rail.a.y <= rect.bottom + BUFFER;\n }\n const yOverlap = overlapLength(rail.a.y, rail.b.y, rect.top, rect.bottom);\n return yOverlap >= MIN_SHARED && rail.a.x >= rect.left - BUFFER && rail.a.x <= rect.right + BUFFER;\n });\n }, \"blockingRectsFor\");\n const candidateByMovingRail = /* @__PURE__ */ __name((points, rail, coord) => {\n const candidate = points.map((point) => ({ ...point }));\n if (rail.horizontal) {\n candidate[rail.index].y = coord;\n candidate[rail.index + 1].y = coord;\n } else if (rail.vertical) {\n candidate[rail.index].x = coord;\n candidate[rail.index + 1].x = coord;\n } else {\n return void 0;\n }\n const simplified = simplifyPolyline(dedupeConsecutivePoints(candidate));\n return segmentsFor(simplified).length === simplified.length - 1 ? simplified : void 0;\n }, \"candidateByMovingRail\");\n const candidateIsSafe = /* @__PURE__ */ __name((edge, candidate, currentCrossings) => {\n const endpointIds = [edge.start, edge.end].filter(\n (id) => Boolean(id)\n );\n const candidateSegments = segmentsFor(candidate);\n if (candidateSegments.length !== candidate.length - 1) {\n return false;\n }\n for (const segment of candidateSegments) {\n if (segmentHitsAnyRect(segment.a, segment.b, realNodeRects, endpointIds, -BUFFER)) {\n return false;\n }\n if (segmentHitsAnyRect(segment.a, segment.b, labelRects, [], -BUFFER)) {\n return false;\n }\n }\n for (const other of visibleEdges) {\n if (other === edge) {\n continue;\n }\n for (const candidateSegment of candidateSegments) {\n for (const otherSegment of segmentsFor(pointsFor(other))) {\n if (sameAxisSegmentOverlapLength(candidateSegment, otherSegment, 0.5) >= MIN_SHARED) {\n return false;\n }\n }\n }\n }\n return strictCrossingCount(edge, candidate) <= currentCrossings;\n }, \"candidateIsSafe\");\n for (let iteration = 0; iteration < MAX_ITERATIONS; iteration++) {\n const currentCrossings = strictCrossingCount();\n let fixed = false;\n for (const edge of visibleEdges) {\n const points = pointsFor(edge);\n const rail = middleRail(points);\n if (!rail) {\n continue;\n }\n const blockers = blockingRectsFor(edge, rail.segment);\n if (blockers.length === 0) {\n continue;\n }\n const coords = rail.horizontal ? [\n Math.min(...blockers.map((entry) => entry.rect.top)) - CLEARANCE,\n Math.max(...blockers.map((entry) => entry.rect.bottom)) + CLEARANCE\n ] : [\n Math.min(...blockers.map((entry) => entry.rect.left)) - CLEARANCE,\n Math.max(...blockers.map((entry) => entry.rect.right)) + CLEARANCE\n ];\n for (const coord of coords) {\n const candidate = candidateByMovingRail(points, rail.segment, coord);\n if (!candidate || !candidateIsSafe(edge, candidate, currentCrossings)) {\n continue;\n }\n edge.points = candidate;\n fixed = true;\n break;\n }\n if (fixed) {\n break;\n }\n }\n if (!fixed) {\n return;\n }\n }\n}\n__name(liftObstacleHuggingSameSideRails, \"liftObstacleHuggingSameSideRails\");\nfunction liftTopLaneTitleBandsAboveRails(edges, nodeByIdMap) {\n const CLEARANCE = 4;\n const validTitleRect = /* @__PURE__ */ __name((node) => {\n const rect = node.groupTitleRect;\n if (!rect || typeof rect.left !== \"number\" || typeof rect.right !== \"number\" || typeof rect.top !== \"number\" || typeof rect.bottom !== \"number\" || !Number.isFinite(rect.left) || !Number.isFinite(rect.right) || !Number.isFinite(rect.top) || !Number.isFinite(rect.bottom) || rect.right <= rect.left || rect.bottom <= rect.top) {\n return void 0;\n }\n return { left: rect.left, right: rect.right, top: rect.top, bottom: rect.bottom };\n }, \"validTitleRect\");\n const topLaneTitleFor = /* @__PURE__ */ __name((node) => {\n if (!node.isGroup || node.parentId) {\n return void 0;\n }\n const rawDirection = node.direction;\n const direction = typeof rawDirection === \"string\" ? rawDirection.toUpperCase() : \"\";\n if (direction === \"LR\" || direction === \"RL\" || direction === \"BT\") {\n return void 0;\n }\n const rect = validTitleRect(node);\n const y = node.y;\n const height = node.height;\n if (!rect || typeof y !== \"number\" || typeof height !== \"number\" || !Number.isFinite(y) || !Number.isFinite(height) || height <= 0) {\n return void 0;\n }\n const titleWidth = rect.right - rect.left;\n const titleHeight = rect.bottom - rect.top;\n if (titleHeight <= 0 || titleWidth < titleHeight) {\n return void 0;\n }\n return { node, rect };\n }, \"topLaneTitleFor\");\n const horizontalSegmentIntersectsTitle = /* @__PURE__ */ __name((segment, rect) => {\n if (!segment.horizontal) {\n return false;\n }\n const y = segment.a.y;\n if (y <= rect.top + EPS_LOCAL || y >= rect.bottom - EPS_LOCAL) {\n return false;\n }\n return overlapLength(segment.a.x, segment.b.x, rect.left, rect.right) >= MIN_SHARED;\n }, \"horizontalSegmentIntersectsTitle\");\n const lanes = [...nodeByIdMap.values()].map(topLaneTitleFor).filter((lane) => Boolean(lane));\n if (lanes.length === 0) {\n return;\n }\n let topDelta = 0;\n for (const edge of edges) {\n if (edge.isLayoutOnly) {\n continue;\n }\n const points = dedupeConsecutivePoints(edge.points ?? []);\n for (const segment of segmentsFor(points)) {\n for (const lane of lanes) {\n if (!horizontalSegmentIntersectsTitle(segment, lane.rect)) {\n continue;\n }\n topDelta = Math.max(topDelta, lane.rect.bottom - segment.a.y + CLEARANCE);\n }\n }\n }\n if (topDelta <= EPS_LOCAL) {\n return;\n }\n for (const lane of lanes) {\n const y = lane.node.y;\n const height = lane.node.height;\n if (typeof y !== \"number\" || typeof height !== \"number\" || !Number.isFinite(y) || !Number.isFinite(height) || height <= 0) {\n continue;\n }\n lane.node.y = y - topDelta / 2;\n lane.node.height = height + topDelta;\n lane.node.groupTitleRect = {\n ...lane.rect,\n top: lane.rect.top - topDelta,\n bottom: lane.rect.bottom - topDelta\n };\n }\n}\n__name(liftTopLaneTitleBandsAboveRails, \"liftTopLaneTitleBandsAboveRails\");\nfunction shiftLeftLaneTitleBandsLeftOfRails(edges, nodeByIdMap) {\n const CLEARANCE = 4;\n const validTitleRect = /* @__PURE__ */ __name((node) => {\n const rect = node.groupTitleRect;\n if (!rect || typeof rect.left !== \"number\" || typeof rect.right !== \"number\" || typeof rect.top !== \"number\" || typeof rect.bottom !== \"number\" || !Number.isFinite(rect.left) || !Number.isFinite(rect.right) || !Number.isFinite(rect.top) || !Number.isFinite(rect.bottom) || rect.right <= rect.left || rect.bottom <= rect.top) {\n return void 0;\n }\n return { left: rect.left, right: rect.right, top: rect.top, bottom: rect.bottom };\n }, \"validTitleRect\");\n const leftLaneTitleFor = /* @__PURE__ */ __name((node) => {\n if (!node.isGroup || node.parentId) {\n return void 0;\n }\n const rawDirection = node.direction;\n if (rawDirection !== \"LR\") {\n return void 0;\n }\n const rect = validTitleRect(node);\n const x = node.x;\n const width = node.width;\n if (!rect || typeof x !== \"number\" || typeof width !== \"number\" || !Number.isFinite(x) || !Number.isFinite(width) || width <= 0) {\n return void 0;\n }\n const titleWidth = rect.right - rect.left;\n const titleHeight = rect.bottom - rect.top;\n if (titleWidth <= 0 || titleHeight < titleWidth) {\n return void 0;\n }\n return { node, rect };\n }, \"leftLaneTitleFor\");\n const verticalSegmentIntersectsTitle = /* @__PURE__ */ __name((segment, rect) => {\n if (!segment.vertical) {\n return false;\n }\n const x = segment.a.x;\n if (x <= rect.left + EPS_LOCAL || x >= rect.right - EPS_LOCAL) {\n return false;\n }\n return overlapLength(segment.a.y, segment.b.y, rect.top, rect.bottom) >= MIN_SHARED;\n }, \"verticalSegmentIntersectsTitle\");\n const horizontalSegmentIntersectsTitle = /* @__PURE__ */ __name((segment, rect) => {\n if (!segment.horizontal) {\n return false;\n }\n const y = segment.a.y;\n if (y <= rect.top + EPS_LOCAL || y >= rect.bottom - EPS_LOCAL) {\n return false;\n }\n return overlapLength(segment.a.x, segment.b.x, rect.left, rect.right) >= MIN_SHARED;\n }, \"horizontalSegmentIntersectsTitle\");\n const lanes = [...nodeByIdMap.values()].map(leftLaneTitleFor).filter((lane) => Boolean(lane));\n if (lanes.length === 0) {\n return;\n }\n let leftDelta = 0;\n for (const edge of edges) {\n if (edge.isLayoutOnly) {\n continue;\n }\n const points = dedupeConsecutivePoints(edge.points ?? []);\n for (const segment of segmentsFor(points)) {\n for (const lane of lanes) {\n if (verticalSegmentIntersectsTitle(segment, lane.rect)) {\n leftDelta = Math.max(leftDelta, lane.rect.right - segment.a.x + CLEARANCE);\n } else if (horizontalSegmentIntersectsTitle(segment, lane.rect)) {\n const segmentLeft = Math.min(segment.a.x, segment.b.x);\n leftDelta = Math.max(leftDelta, lane.rect.right - segmentLeft + CLEARANCE);\n }\n }\n }\n }\n if (leftDelta <= EPS_LOCAL) {\n return;\n }\n for (const lane of lanes) {\n const x = lane.node.x;\n const width = lane.node.width;\n if (typeof x !== \"number\" || typeof width !== \"number\" || !Number.isFinite(x) || !Number.isFinite(width) || width <= 0) {\n continue;\n }\n lane.node.x = x - leftDelta / 2;\n lane.node.width = width + leftDelta;\n lane.node.groupTitleRect = {\n ...lane.rect,\n left: lane.rect.left - leftDelta,\n right: lane.rect.right - leftDelta\n };\n }\n}\n__name(shiftLeftLaneTitleBandsLeftOfRails, \"shiftLeftLaneTitleBandsLeftOfRails\");\nfunction swapDestinationTerminalTailsToReduceCrossings(edges, nodeByIdMap) {\n const BUFFER = 2;\n const MAX_ITERATIONS = 4;\n const { realNodeRects } = collectNodeRectEntries(nodeByIdMap.values());\n const visibleEdges = edges.filter((edge) => !edge.isLayoutOnly);\n const replacementPointsFor = /* @__PURE__ */ __name((edge, replacements = /* @__PURE__ */ new Map()) => dedupeConsecutivePoints(\n replacements.get(edge) ?? edge.points ?? []\n ), \"replacementPointsFor\");\n const crossingCount = /* @__PURE__ */ __name((replacements = /* @__PURE__ */ new Map()) => {\n let count = 0;\n for (let i = 0; i < visibleEdges.length; i++) {\n const firstSegments = segmentsFor(replacementPointsFor(visibleEdges[i], replacements));\n for (let j = i + 1; j < visibleEdges.length; j++) {\n const secondSegments = segmentsFor(replacementPointsFor(visibleEdges[j], replacements));\n for (const firstSegment of firstSegments) {\n for (const secondSegment of secondSegments) {\n if (orthogonalSegmentsStrictlyCross(\n firstSegment.a,\n firstSegment.b,\n secondSegment.a,\n secondSegment.b,\n EPS_LOCAL\n )) {\n count++;\n }\n }\n }\n }\n }\n return count;\n }, \"crossingCount\");\n const totalBends = /* @__PURE__ */ __name((replacements = /* @__PURE__ */ new Map()) => visibleEdges.reduce(\n (sum, edge) => sum + countOrthogonalBends(replacementPointsFor(edge, replacements)),\n 0\n ), \"totalBends\");\n const terminalTailFor = /* @__PURE__ */ __name((edge) => {\n const points = replacementPointsFor(edge);\n if (points.length < 4) {\n return void 0;\n }\n const tailStart = points[points.length - 2];\n const terminal = points[points.length - 1];\n if (!isHorizontalSegment(tailStart, terminal, EPS_LOCAL) && !isVerticalSegment(tailStart, terminal, EPS_LOCAL)) {\n return void 0;\n }\n return { tailStart, terminal };\n }, \"terminalTailFor\");\n const candidateWithDestinationTail = /* @__PURE__ */ __name((edge, tail) => {\n const points = replacementPointsFor(edge);\n if (points.length < 3) {\n return void 0;\n }\n const start = points[0];\n const firstTurn = points[1];\n let connector;\n if (isHorizontalSegment(start, firstTurn, EPS_LOCAL)) {\n connector = { x: firstTurn.x, y: tail.tailStart.y };\n } else if (isVerticalSegment(start, firstTurn, EPS_LOCAL)) {\n connector = { x: tail.tailStart.x, y: firstTurn.y };\n } else {\n return void 0;\n }\n const candidate = simplifyPolyline(\n dedupeConsecutivePoints([start, firstTurn, connector, tail.tailStart, tail.terminal])\n );\n return segmentsFor(candidate).length === candidate.length - 1 ? candidate : void 0;\n }, \"candidateWithDestinationTail\");\n const pathHasNodeHit = /* @__PURE__ */ __name((edge, path) => {\n const endpointIds = [edge.start, edge.end].filter(\n (id) => Boolean(id)\n );\n for (const segment of segmentsFor(path)) {\n if (segmentHitsAnyRect(segment.a, segment.b, realNodeRects, endpointIds, -BUFFER)) {\n return true;\n }\n }\n return false;\n }, \"pathHasNodeHit\");\n const pathHasSharedTrack = /* @__PURE__ */ __name((edge, path, replacements) => {\n for (const other of visibleEdges) {\n if (other === edge) {\n continue;\n }\n for (const candidateSegment of segmentsFor(path)) {\n for (const otherSegment of segmentsFor(replacementPointsFor(other, replacements))) {\n if (sameAxisSegmentOverlapLength(candidateSegment, otherSegment, 0.5) >= MIN_SHARED) {\n return true;\n }\n }\n }\n }\n return false;\n }, \"pathHasSharedTrack\");\n const candidateIsSafe = /* @__PURE__ */ __name((edge, path, replacements) => !pathHasNodeHit(edge, path) && !pathHasSharedTrack(edge, path, replacements), \"candidateIsSafe\");\n const edgesByDestination = /* @__PURE__ */ __name(() => {\n const result = /* @__PURE__ */ new Map();\n for (const edge of visibleEdges) {\n const dstId = edge.end;\n if (!dstId || !nodeByIdMap.has(dstId)) {\n continue;\n }\n const points = replacementPointsFor(edge);\n if (points.length < 4) {\n continue;\n }\n const bucket = result.get(dstId) ?? [];\n bucket.push(edge);\n result.set(dstId, bucket);\n }\n return result;\n }, \"edgesByDestination\");\n for (let iteration = 0; iteration < MAX_ITERATIONS; iteration++) {\n const currentCrossings = crossingCount();\n if (currentCrossings === 0) {\n return;\n }\n const currentBends = totalBends();\n let bestReplacements;\n let bestCrossings = currentCrossings;\n let bestBends = currentBends;\n for (const destinationEdges of edgesByDestination().values()) {\n for (let i = 0; i < destinationEdges.length; i++) {\n for (let j = i + 1; j < destinationEdges.length; j++) {\n const first = destinationEdges[i];\n const second = destinationEdges[j];\n const firstTail = terminalTailFor(first);\n const secondTail = terminalTailFor(second);\n if (!firstTail || !secondTail) {\n continue;\n }\n const firstCandidate = candidateWithDestinationTail(first, secondTail);\n const secondCandidate = candidateWithDestinationTail(second, firstTail);\n if (!firstCandidate || !secondCandidate) {\n continue;\n }\n const replacements = /* @__PURE__ */ new Map([\n [first, firstCandidate],\n [second, secondCandidate]\n ]);\n if (!candidateIsSafe(first, firstCandidate, replacements) || !candidateIsSafe(second, secondCandidate, replacements)) {\n continue;\n }\n const candidateCrossings = crossingCount(replacements);\n const candidateBends = totalBends(replacements);\n if (candidateCrossings >= currentCrossings) {\n continue;\n }\n if (candidateCrossings > bestCrossings || candidateCrossings === bestCrossings && candidateBends >= bestBends) {\n continue;\n }\n bestReplacements = replacements;\n bestCrossings = candidateCrossings;\n bestBends = candidateBends;\n }\n }\n }\n if (!bestReplacements) {\n return;\n }\n for (const [edge, points] of bestReplacements) {\n edge.points = points;\n }\n }\n}\n__name(swapDestinationTerminalTailsToReduceCrossings, \"swapDestinationTerminalTailsToReduceCrossings\");\nfunction reassignCrossingExternalRailChannels(edges, nodeByIdMap) {\n const BUFFER = 2;\n const RAIL_CHANNEL_GAP = 12;\n const MAX_ITERATIONS = 4;\n const MAX_EXHAUSTIVE_COMPONENT = 6;\n const { realNodeRects, labelNodeRects: labelRects } = collectNodeRectEntries(\n nodeByIdMap.values()\n );\n const visibleEdges = edges.filter((edge) => !edge.isLayoutOnly);\n const replacementPointsFor = /* @__PURE__ */ __name((edge, replacements = /* @__PURE__ */ new Map()) => dedupeConsecutivePoints(\n replacements.get(edge) ?? edge.points ?? []\n ), \"replacementPointsFor\");\n const strictCrossingCount = /* @__PURE__ */ __name((replacements = /* @__PURE__ */ new Map()) => {\n let count = 0;\n for (let i = 0; i < visibleEdges.length; i++) {\n const firstSegments = segmentsFor(replacementPointsFor(visibleEdges[i], replacements));\n for (let j = i + 1; j < visibleEdges.length; j++) {\n const secondSegments = segmentsFor(replacementPointsFor(visibleEdges[j], replacements));\n for (const firstSegment of firstSegments) {\n for (const secondSegment of secondSegments) {\n if (orthogonalSegmentsStrictlyCross(\n firstSegment.a,\n firstSegment.b,\n secondSegment.a,\n secondSegment.b,\n EPS_LOCAL\n )) {\n count++;\n }\n }\n }\n }\n }\n return count;\n }, \"strictCrossingCount\");\n const totalBends = /* @__PURE__ */ __name((replacements = /* @__PURE__ */ new Map()) => visibleEdges.reduce(\n (sum, edge) => sum + countOrthogonalBends(replacementPointsFor(edge, replacements)),\n 0\n ), \"totalBends\");\n const endpointRectsFor = /* @__PURE__ */ __name((edge) => {\n const srcId = edge.start;\n const dstId = edge.end;\n const srcNode = srcId ? nodeByIdMap.get(srcId) : void 0;\n const dstNode = dstId ? nodeByIdMap.get(dstId) : void 0;\n const src = srcNode ? rectOfNodeBounds(srcNode) : void 0;\n const dst = dstNode ? rectOfNodeBounds(dstNode) : void 0;\n return src && dst ? { src, dst } : void 0;\n }, \"endpointRectsFor\");\n const externalRailForSegment = /* @__PURE__ */ __name((edge, points, segment) => {\n if (segment.index <= 0 || segment.index + 1 >= points.length - 1) {\n return void 0;\n }\n const endpointRects = endpointRectsFor(edge);\n if (!endpointRects) {\n return void 0;\n }\n if (segment.vertical) {\n const coord = segment.a.x;\n const leftBound = Math.min(endpointRects.src.left, endpointRects.dst.left);\n const rightBound = Math.max(endpointRects.src.right, endpointRects.dst.right);\n const side = coord < leftBound - EPS_LOCAL ? \"left\" : coord > rightBound + EPS_LOCAL ? \"right\" : void 0;\n if (!side) {\n return void 0;\n }\n return {\n edge,\n points,\n segmentIndex: segment.index,\n axis: \"vertical\",\n side,\n coord,\n min: Math.min(segment.a.y, segment.b.y),\n max: Math.max(segment.a.y, segment.b.y)\n };\n }\n if (segment.horizontal) {\n const coord = segment.a.y;\n const topBound = Math.min(endpointRects.src.top, endpointRects.dst.top);\n const bottomBound = Math.max(endpointRects.src.bottom, endpointRects.dst.bottom);\n const side = coord < topBound - EPS_LOCAL ? \"top\" : coord > bottomBound + EPS_LOCAL ? \"bottom\" : void 0;\n if (!side) {\n return void 0;\n }\n return {\n edge,\n points,\n segmentIndex: segment.index,\n axis: \"horizontal\",\n side,\n coord,\n min: Math.min(segment.a.x, segment.b.x),\n max: Math.max(segment.a.x, segment.b.x)\n };\n }\n return void 0;\n }, \"externalRailForSegment\");\n const collectExternalRails = /* @__PURE__ */ __name(() => {\n const rails = [];\n for (const edge of visibleEdges) {\n const points = replacementPointsFor(edge);\n for (const segment of segmentsFor(points)) {\n const rail = externalRailForSegment(edge, points, segment);\n if (rail) {\n rails.push(rail);\n }\n }\n }\n return rails;\n }, \"collectExternalRails\");\n const railsInteract = /* @__PURE__ */ __name((a, b) => a.edge !== b.edge && a.axis === b.axis && a.side === b.side && overlapLength(a.min, a.max, b.min, b.max) >= MIN_SHARED, \"railsInteract\");\n const connectedComponents = /* @__PURE__ */ __name((rails) => {\n const result = [];\n const seen = /* @__PURE__ */ new Set();\n for (const rail of rails) {\n if (seen.has(rail)) {\n continue;\n }\n const queue = [rail];\n const component = [];\n seen.add(rail);\n while (queue.length > 0) {\n const current = queue.pop();\n component.push(current);\n for (const next of rails) {\n if (!seen.has(next) && railsInteract(current, next)) {\n seen.add(next);\n queue.push(next);\n }\n }\n }\n if (component.length > 1) {\n result.push(component);\n }\n }\n return result;\n }, \"connectedComponents\");\n const uniqueCoordsFor = /* @__PURE__ */ __name((component) => {\n const coords = [];\n for (const rail of component) {\n if (!coords.some((coord) => Math.abs(coord - rail.coord) < EPS_LOCAL)) {\n coords.push(rail.coord);\n }\n }\n while (coords.length < component.length) {\n const min = Math.min(...coords);\n const max = Math.max(...coords);\n const side = component[0].side;\n coords.push(\n side === \"left\" || side === \"top\" ? min - RAIL_CHANNEL_GAP * (component.length - coords.length) : max + RAIL_CHANNEL_GAP * (component.length - coords.length)\n );\n }\n return coords;\n }, \"uniqueCoordsFor\");\n const coordinateAssignmentsFor = /* @__PURE__ */ __name((component) => {\n const current = component.map((rail) => rail.coord);\n const coords = uniqueCoordsFor(component);\n const assignments = [];\n if (component.length <= MAX_EXHAUSTIVE_COMPONENT) {\n const used = new Array(coords.length).fill(false);\n const next = [];\n const visit = /* @__PURE__ */ __name(() => {\n if (next.length === component.length) {\n if (next.some((coord, index) => Math.abs(coord - current[index]) >= EPS_LOCAL)) {\n assignments.push([...next]);\n }\n return;\n }\n for (const [i, coord] of coords.entries()) {\n if (used[i]) {\n continue;\n }\n used[i] = true;\n next.push(coord);\n visit();\n next.pop();\n used[i] = false;\n }\n }, \"visit\");\n visit();\n return assignments;\n }\n for (let i = 0; i < current.length; i++) {\n for (let j = i + 1; j < current.length; j++) {\n const assignment = [...current];\n [assignment[i], assignment[j]] = [assignment[j], assignment[i]];\n assignments.push(assignment);\n }\n }\n return assignments;\n }, \"coordinateAssignmentsFor\");\n const replacementsForAssignment = /* @__PURE__ */ __name((component, assignment) => {\n const draftByEdge = /* @__PURE__ */ new Map();\n for (const [i, rail] of component.entries()) {\n const coord = assignment[i];\n const points = draftByEdge.get(rail.edge) ?? rail.points.map((point) => ({ x: point.x, y: point.y }));\n if (rail.axis === \"vertical\") {\n points[rail.segmentIndex].x = coord;\n points[rail.segmentIndex + 1].x = coord;\n } else {\n points[rail.segmentIndex].y = coord;\n points[rail.segmentIndex + 1].y = coord;\n }\n draftByEdge.set(rail.edge, points);\n }\n const replacements = /* @__PURE__ */ new Map();\n for (const [edge, points] of draftByEdge) {\n const simplified = simplifyPolyline(dedupeConsecutivePoints(points));\n if (segmentsFor(simplified).length !== simplified.length - 1) {\n return void 0;\n }\n replacements.set(edge, simplified);\n }\n return replacements;\n }, \"replacementsForAssignment\");\n const candidateIsSafe = /* @__PURE__ */ __name((replacements) => {\n for (const [edge, points] of replacements) {\n const endpointIds = [\n edge.start,\n edge.end\n ].filter((id) => Boolean(id));\n for (const segment of segmentsFor(points)) {\n if (segmentHitsAnyRect(segment.a, segment.b, realNodeRects, endpointIds, -BUFFER)) {\n return false;\n }\n if (segmentHitsAnyRect(segment.a, segment.b, labelRects, [], -BUFFER)) {\n return false;\n }\n }\n }\n for (let i = 0; i < visibleEdges.length; i++) {\n const first = visibleEdges[i];\n const firstChanged = replacements.has(first);\n const firstSegments = segmentsFor(replacementPointsFor(first, replacements));\n for (let j = i + 1; j < visibleEdges.length; j++) {\n const second = visibleEdges[j];\n if (!firstChanged && !replacements.has(second)) {\n continue;\n }\n const secondSegments = segmentsFor(replacementPointsFor(second, replacements));\n for (const firstSegment of firstSegments) {\n for (const secondSegment of secondSegments) {\n if (sameAxisSegmentOverlapLength(firstSegment, secondSegment, 0.5) >= MIN_SHARED) {\n return false;\n }\n }\n }\n }\n }\n return true;\n }, \"candidateIsSafe\");\n for (let iteration = 0; iteration < MAX_ITERATIONS; iteration++) {\n const currentCrossings = strictCrossingCount();\n if (currentCrossings === 0) {\n return;\n }\n let bestReplacements;\n let bestCrossings = currentCrossings;\n let bestBends = totalBends();\n let bestDisplacement = Number.POSITIVE_INFINITY;\n for (const component of connectedComponents(collectExternalRails())) {\n for (const assignment of coordinateAssignmentsFor(component)) {\n const replacements = replacementsForAssignment(component, assignment);\n if (!replacements || !candidateIsSafe(replacements)) {\n continue;\n }\n const candidateCrossings = strictCrossingCount(replacements);\n if (candidateCrossings >= currentCrossings) {\n continue;\n }\n const candidateBends = totalBends(replacements);\n const candidateDisplacement = component.reduce(\n (sum, rail, index) => sum + Math.abs(assignment[index] - rail.coord),\n 0\n );\n if (candidateCrossings > bestCrossings || candidateCrossings === bestCrossings && (candidateBends > bestBends || candidateBends === bestBends && candidateDisplacement >= bestDisplacement)) {\n continue;\n }\n bestReplacements = replacements;\n bestCrossings = candidateCrossings;\n bestBends = candidateBends;\n bestDisplacement = candidateDisplacement;\n }\n }\n if (!bestReplacements) {\n return;\n }\n for (const [edge, points] of bestReplacements) {\n edge.points = points;\n }\n }\n}\n__name(reassignCrossingExternalRailChannels, \"reassignCrossingExternalRailChannels\");\nfunction shortcutRedundantOrthogonalJogs(edges, nodeByIdMap) {\n const BUFFER = 2;\n const MAX_ITERATIONS = 8;\n const { realNodeRects, labelNodeRects: labelRects } = collectNodeRectEntries(\n nodeByIdMap.values()\n );\n const visibleEdges = edges.filter((edge) => !edge.isLayoutOnly);\n const pointsFor = /* @__PURE__ */ __name((edge, replacementEdge, replacement) => dedupeConsecutivePoints(\n edge === replacementEdge ? replacement ?? [] : edge.points ?? []\n ), \"pointsFor\");\n const pathLength = /* @__PURE__ */ __name((points) => segmentsFor(points).reduce((sum, segment) => {\n const dx = segment.a.x - segment.b.x;\n const dy = segment.a.y - segment.b.y;\n return sum + Math.hypot(dx, dy);\n }, 0), \"pathLength\");\n const strictCrossingCount = /* @__PURE__ */ __name((replacementEdge, replacement) => {\n let count = 0;\n for (let i = 0; i < visibleEdges.length; i++) {\n const firstSegments = segmentsFor(pointsFor(visibleEdges[i], replacementEdge, replacement));\n for (let j = i + 1; j < visibleEdges.length; j++) {\n const secondSegments = segmentsFor(\n pointsFor(visibleEdges[j], replacementEdge, replacement)\n );\n for (const firstSegment of firstSegments) {\n for (const secondSegment of secondSegments) {\n if (orthogonalSegmentsStrictlyCross(\n firstSegment.a,\n firstSegment.b,\n secondSegment.a,\n secondSegment.b,\n EPS_LOCAL\n )) {\n count++;\n }\n }\n }\n }\n }\n return count;\n }, \"strictCrossingCount\");\n const segmentRunsAlongRectBorder = /* @__PURE__ */ __name((segment, rect) => {\n if (segment.horizontal) {\n const y = segment.a.y;\n const onBorder = Math.abs(y - rect.top) < 1 || Math.abs(y - rect.bottom) < 1;\n return onBorder && overlapLength(segment.a.x, segment.b.x, rect.left, rect.right) >= MIN_SHARED;\n }\n if (segment.vertical) {\n const x = segment.a.x;\n const onBorder = Math.abs(x - rect.left) < 1 || Math.abs(x - rect.right) < 1;\n return onBorder && overlapLength(segment.a.y, segment.b.y, rect.top, rect.bottom) >= MIN_SHARED;\n }\n return false;\n }, \"segmentRunsAlongRectBorder\");\n const endpointRectsFor = /* @__PURE__ */ __name((edge) => {\n const endpointIds = [edge.start, edge.end].filter(\n (id) => Boolean(id)\n );\n const rects = [];\n for (const id of endpointIds) {\n const node = nodeByIdMap.get(id);\n const rect = node ? rectOfNodeBounds(node) : void 0;\n if (rect) {\n rects.push(rect);\n }\n }\n return rects;\n }, \"endpointRectsFor\");\n const shortcutCandidatesAt = /* @__PURE__ */ __name((points, index) => {\n if (index + 3 >= points.length) {\n return [];\n }\n const p0 = points[index];\n const p1 = points[index + 1];\n const p2 = points[index + 2];\n const p3 = points[index + 3];\n const isHVH = isHorizontalSegment(p0, p1, EPS_LOCAL) && isVerticalSegment(p1, p2, EPS_LOCAL) && isHorizontalSegment(p2, p3, EPS_LOCAL);\n const isVHV = isVerticalSegment(p0, p1, EPS_LOCAL) && isHorizontalSegment(p1, p2, EPS_LOCAL) && isVerticalSegment(p2, p3, EPS_LOCAL);\n if (!isHVH && !isVHV) {\n return [];\n }\n const outerSegmentsOppose = isHVH ? Math.sign(p1.x - p0.x) !== Math.sign(p3.x - p2.x) : Math.sign(p1.y - p0.y) !== Math.sign(p3.y - p2.y);\n if (!outerSegmentsOppose) {\n return [];\n }\n const corners = sameX(p0, p3, EPS_LOCAL) || sameY(p0, p3, EPS_LOCAL) ? [] : [\n { x: p0.x, y: p3.y },\n { x: p3.x, y: p0.y }\n ];\n const rawCandidates = corners.length === 0 ? [[...points.slice(0, index + 1), ...points.slice(index + 3)]] : corners.map((corner) => [\n ...points.slice(0, index + 1),\n corner,\n ...points.slice(index + 3)\n ]);\n const seen = /* @__PURE__ */ new Set();\n return rawCandidates.map((candidate) => simplifyPolyline(dedupeConsecutivePoints(candidate))).filter((candidate) => {\n if (segmentsFor(candidate).length !== candidate.length - 1) {\n return false;\n }\n if (!candidate.some((point) => samePoint(point, p3, EPS_LOCAL))) {\n return false;\n }\n const key = candidate.map((point) => `${point.x.toFixed(3)},${point.y.toFixed(3)}`).join(\"|\");\n if (seen.has(key)) {\n return false;\n }\n seen.add(key);\n return true;\n });\n }, \"shortcutCandidatesAt\");\n const candidateIsSafe = /* @__PURE__ */ __name((edge, candidate, currentCrossings) => {\n const endpointIds = [edge.start, edge.end].filter(\n (id) => Boolean(id)\n );\n const endpointRects = endpointRectsFor(edge);\n for (const segment of segmentsFor(candidate)) {\n if (segmentHitsAnyRect(segment.a, segment.b, realNodeRects, endpointIds, -BUFFER)) {\n return false;\n }\n if (segmentHitsAnyRect(segment.a, segment.b, labelRects, [], -BUFFER)) {\n return false;\n }\n if (endpointRects.some((rect) => segmentRunsAlongRectBorder(segment, rect))) {\n return false;\n }\n }\n for (const other of visibleEdges) {\n if (other === edge) {\n continue;\n }\n for (const candidateSegment of segmentsFor(candidate)) {\n for (const otherSegment of segmentsFor(pointsFor(other))) {\n if (sameAxisSegmentOverlapLength(candidateSegment, otherSegment, 0.5) >= MIN_SHARED) {\n return false;\n }\n }\n }\n }\n return strictCrossingCount(edge, candidate) <= currentCrossings;\n }, \"candidateIsSafe\");\n for (let iteration = 0; iteration < MAX_ITERATIONS; iteration++) {\n const currentCrossings = strictCrossingCount();\n let bestEdge;\n let bestPath;\n let bestCrossings = currentCrossings;\n let bestBends = Number.POSITIVE_INFINITY;\n let bestLength = Number.POSITIVE_INFINITY;\n for (const edge of visibleEdges) {\n const currentPoints = pointsFor(edge);\n const currentBends = countOrthogonalBends(currentPoints, EPS_LOCAL);\n const currentLength = pathLength(currentPoints);\n for (let index = 0; index <= currentPoints.length - 4; index++) {\n for (const candidate of shortcutCandidatesAt(currentPoints, index)) {\n const candidateBends = countOrthogonalBends(candidate, EPS_LOCAL);\n const candidateLength = pathLength(candidate);\n const improvesShape = candidateBends < currentBends || candidateBends === currentBends && candidateLength < currentLength - EPS_LOCAL;\n if (!improvesShape || !candidateIsSafe(edge, candidate, currentCrossings)) {\n continue;\n }\n const candidateCrossings = strictCrossingCount(edge, candidate);\n if (candidateCrossings > bestCrossings || candidateCrossings === bestCrossings && (candidateBends > bestBends || candidateBends === bestBends && candidateLength >= bestLength)) {\n continue;\n }\n bestEdge = edge;\n bestPath = candidate;\n bestCrossings = candidateCrossings;\n bestBends = candidateBends;\n bestLength = candidateLength;\n }\n }\n }\n if (!bestEdge || !bestPath) {\n return;\n }\n bestEdge.points = bestPath;\n }\n}\n__name(shortcutRedundantOrthogonalJogs, \"shortcutRedundantOrthogonalJogs\");\nfunction resolveRenderedOrthogonalCrossings(edges, nodeByIdMap) {\n const ANCHOR = 20;\n const EXTRA_CHANNEL_COUNT = 2;\n const MAX_ITERATIONS = 4;\n const MAX_PAIR_CANDIDATES_PER_EDGE = 48;\n const realNodes = [];\n for (const node of nodeByIdMap.values()) {\n if (node.isGroup || node.isEdgeLabel) {\n continue;\n }\n const cx = node.x ?? 0;\n const cy = node.y ?? 0;\n const rect = rectOfNodeBounds(node);\n if (!rect) {\n continue;\n }\n realNodes.push({\n id: String(node.id ?? \"\"),\n cx,\n cy,\n rect\n });\n }\n if (realNodes.length === 0) {\n return;\n }\n const nodeInfoById = new Map(realNodes.map((node) => [node.id, node]));\n const realNodeRects = realNodes.map((node) => ({ id: node.id, rect: node.rect }));\n const sides = [\"top\", \"bottom\", \"left\", \"right\"];\n const outsideTracks = {\n top: Math.min(...realNodes.map((node) => node.rect.top)) - ANCHOR,\n bottom: Math.max(...realNodes.map((node) => node.rect.bottom)) + ANCHOR,\n left: Math.min(...realNodes.map((node) => node.rect.left)) - ANCHOR,\n right: Math.max(...realNodes.map((node) => node.rect.right)) + ANCHOR\n };\n const visibleEdges = edges.filter((edge) => !edge.isLayoutOnly);\n const edgeIndex = new Map(visibleEdges.map((edge, index) => [edge, index]));\n const outwardTracksForSide = /* @__PURE__ */ __name((side) => {\n const outward = side === \"left\" || side === \"top\" ? -1 : 1;\n const tracks = [];\n for (let channel = 0; channel <= EXTRA_CHANNEL_COUNT; channel++) {\n tracks.push(outsideTracks[side] + outward * ANCHOR * channel);\n }\n return tracks;\n }, \"outwardTracksForSide\");\n const replacementPointsFor = /* @__PURE__ */ __name((edge, replacements = /* @__PURE__ */ new Map()) => dedupeConsecutivePoints(\n replacements.get(edge) ?? edge.points ?? []\n ), \"replacementPointsFor\");\n const crossingCountBetweenSegments = /* @__PURE__ */ __name((firstSegments, secondSegments) => {\n let count = 0;\n for (const firstSegment of firstSegments) {\n for (const secondSegment of secondSegments) {\n if (orthogonalSegmentsStrictlyCross(\n firstSegment.a,\n firstSegment.b,\n secondSegment.a,\n secondSegment.b,\n EPS_LOCAL\n )) {\n count++;\n }\n }\n }\n return count;\n }, \"crossingCountBetweenSegments\");\n const crossingCountBetweenPaths = /* @__PURE__ */ __name((first, second) => crossingCountBetweenSegments(segmentsFor(first), segmentsFor(second)), \"crossingCountBetweenPaths\");\n const crossingSnapshot = /* @__PURE__ */ __name((replacements = /* @__PURE__ */ new Map()) => {\n let count = 0;\n const pairs = [];\n const edgeSet = /* @__PURE__ */ new Set();\n const edgeOrder = [];\n const addEdge = /* @__PURE__ */ __name((edge) => {\n if (!edgeSet.has(edge)) {\n edgeSet.add(edge);\n edgeOrder.push(edge);\n }\n }, \"addEdge\");\n for (let i = 0; i < visibleEdges.length; i++) {\n const first = visibleEdges[i];\n const firstPoints = replacementPointsFor(first, replacements);\n for (let j = i + 1; j < visibleEdges.length; j++) {\n const second = visibleEdges[j];\n const pairCount = crossingCountBetweenPaths(\n firstPoints,\n replacementPointsFor(second, replacements)\n );\n if (pairCount > 0) {\n count += pairCount;\n pairs.push({ first, second, count: pairCount });\n addEdge(first);\n addEdge(second);\n }\n }\n }\n edgeOrder.sort((a, b) => (edgeIndex.get(a) ?? 0) - (edgeIndex.get(b) ?? 0));\n return {\n count,\n pairs,\n edgeSet,\n edges: edgeOrder\n };\n }, \"crossingSnapshot\");\n const crossingCountWithReplacements = /* @__PURE__ */ __name((current, replacements) => {\n const changed = new Set(replacements.keys());\n if (changed.size === 0) {\n return current.count;\n }\n let currentAffected = 0;\n for (const pair of current.pairs) {\n if (changed.has(pair.first) || changed.has(pair.second)) {\n currentAffected += pair.count;\n }\n }\n let replacementAffected = 0;\n for (let i = 0; i < visibleEdges.length; i++) {\n const first = visibleEdges[i];\n const firstChanged = changed.has(first);\n const firstPoints = replacementPointsFor(first, replacements);\n for (let j = i + 1; j < visibleEdges.length; j++) {\n const second = visibleEdges[j];\n if (!firstChanged && !changed.has(second)) {\n continue;\n }\n replacementAffected += crossingCountBetweenPaths(\n firstPoints,\n replacementPointsFor(second, replacements)\n );\n }\n }\n return current.count - currentAffected + replacementAffected;\n }, \"crossingCountWithReplacements\");\n const crossingComponents = /* @__PURE__ */ __name((snapshot) => {\n const neighbors = /* @__PURE__ */ new Map();\n for (const pair of snapshot.pairs) {\n const firstNeighbors = neighbors.get(pair.first) ?? /* @__PURE__ */ new Set();\n firstNeighbors.add(pair.second);\n neighbors.set(pair.first, firstNeighbors);\n const secondNeighbors = neighbors.get(pair.second) ?? /* @__PURE__ */ new Set();\n secondNeighbors.add(pair.first);\n neighbors.set(pair.second, secondNeighbors);\n }\n const components = [];\n const seen = /* @__PURE__ */ new Set();\n for (const edge of snapshot.edges) {\n if (seen.has(edge)) {\n continue;\n }\n const queue = [edge];\n const component = [];\n seen.add(edge);\n while (queue.length > 0) {\n const current = queue.pop();\n component.push(current);\n for (const next of neighbors.get(current) ?? []) {\n if (!seen.has(next)) {\n seen.add(next);\n queue.push(next);\n }\n }\n }\n component.sort((a, b) => (edgeIndex.get(a) ?? 0) - (edgeIndex.get(b) ?? 0));\n if (component.length > 1) {\n components.push(component);\n }\n }\n return components;\n }, \"crossingComponents\");\n const endpointIdsFor = /* @__PURE__ */ __name((edge) => [edge.start, edge.end].filter(\n (id) => Boolean(id)\n ), \"endpointIdsFor\");\n const pairSearchGroups = /* @__PURE__ */ __name((snapshot) => {\n const groups = [];\n for (const component of crossingComponents(snapshot)) {\n const componentSet = new Set(component);\n const componentEndpointIds = new Set(component.flatMap((edge) => endpointIdsFor(edge)));\n const group = [...component];\n for (const edge of visibleEdges) {\n if (componentSet.has(edge)) {\n continue;\n }\n if (endpointIdsFor(edge).some((id) => componentEndpointIds.has(id))) {\n group.push(edge);\n }\n }\n group.sort((a, b) => (edgeIndex.get(a) ?? 0) - (edgeIndex.get(b) ?? 0));\n groups.push(group);\n }\n return groups;\n }, \"pairSearchGroups\");\n const crossingCountWithSingleReplacement = /* @__PURE__ */ __name((current, edge, replacement) => crossingCountWithReplacements(\n current,\n /* @__PURE__ */ new Map([[edge, replacement]])\n ), \"crossingCountWithSingleReplacement\");\n const currentCrossingsByEdge = /* @__PURE__ */ __name((current) => {\n const result = /* @__PURE__ */ new Map();\n for (const pair of current.pairs) {\n result.set(pair.first, (result.get(pair.first) ?? 0) + pair.count);\n result.set(pair.second, (result.get(pair.second) ?? 0) + pair.count);\n }\n return result;\n }, \"currentCrossingsByEdge\");\n const pathLength = /* @__PURE__ */ __name((points) => points.slice(1).reduce((sum, point, index) => {\n const previous = points[index];\n return sum + Math.abs(point.x - previous.x) + Math.abs(point.y - previous.y);\n }, 0), \"pathLength\");\n const totalBends = /* @__PURE__ */ __name((replacements = /* @__PURE__ */ new Map()) => visibleEdges.reduce(\n (sum, edge) => sum + countOrthogonalBends(replacementPointsFor(edge, replacements)),\n 0\n ), \"totalBends\");\n const totalLength = /* @__PURE__ */ __name((replacements = /* @__PURE__ */ new Map()) => visibleEdges.reduce(\n (sum, edge) => sum + pathLength(replacementPointsFor(edge, replacements)),\n 0\n ), \"totalLength\");\n const pathHasSegmentConflict = /* @__PURE__ */ __name((edge, path, replacements = /* @__PURE__ */ new Map()) => {\n const pathSegments = segmentsFor(path);\n for (const other of visibleEdges) {\n if (other === edge) {\n continue;\n }\n for (const candidateSegment of pathSegments) {\n for (const otherSegment of segmentsFor(replacementPointsFor(other, replacements))) {\n if (sameAxisSegmentOverlapLength(candidateSegment, otherSegment, 0.5) >= MIN_SHARED) {\n return true;\n }\n }\n }\n }\n return false;\n }, \"pathHasSegmentConflict\");\n const pathHitsNode = /* @__PURE__ */ __name((edge, path) => {\n const endpointIds = [edge.start, edge.end].filter(\n (id) => Boolean(id)\n );\n for (const segment of segmentsFor(path)) {\n if (segmentHitsAnyRect(segment.a, segment.b, realNodeRects, endpointIds, -2)) {\n return true;\n }\n }\n return false;\n }, \"pathHitsNode\");\n const pushOrthogonalCandidate = /* @__PURE__ */ __name((candidates, points) => {\n const candidate = simplifyPolyline(dedupeConsecutivePoints(points));\n if (segmentsFor(candidate).length === candidate.length - 1) {\n candidates.push(candidate);\n }\n }, \"pushOrthogonalCandidate\");\n const sideIsHorizontal = /* @__PURE__ */ __name((side) => side === \"left\" || side === \"right\", \"sideIsHorizontal\");\n const localTrackForSameSide = /* @__PURE__ */ __name((src, side, dst) => {\n switch (side) {\n case \"left\":\n return Math.min(src.x, dst.x) - ANCHOR;\n case \"right\":\n return Math.max(src.x, dst.x) + ANCHOR;\n case \"top\":\n return Math.min(src.y, dst.y) - ANCHOR;\n case \"bottom\":\n return Math.max(src.y, dst.y) + ANCHOR;\n }\n }, \"localTrackForSameSide\");\n const addSameSideCandidates = /* @__PURE__ */ __name((candidates, src, srcSide, dst) => {\n const outward = srcSide === \"left\" || srcSide === \"top\" ? -1 : 1;\n const trackSeeds = [localTrackForSameSide(src, srcSide, dst), outsideTracks[srcSide]];\n for (const seed of trackSeeds) {\n for (let channel = 0; channel <= EXTRA_CHANNEL_COUNT; channel++) {\n pushOrthogonalCandidate(\n candidates,\n buildSameSideTrackPath(src, srcSide, dst, seed + outward * ANCHOR * channel)\n );\n }\n }\n }, \"addSameSideCandidates\");\n const addHorizontalToVerticalCandidates = /* @__PURE__ */ __name((candidates, src, srcSide, dst, dstSide) => {\n for (const xTrack of outwardTracksForSide(srcSide)) {\n for (const yTrack of outwardTracksForSide(dstSide)) {\n pushOrthogonalCandidate(candidates, [\n src,\n { x: xTrack, y: src.y },\n { x: xTrack, y: yTrack },\n { x: dst.x, y: yTrack },\n dst\n ]);\n }\n }\n }, \"addHorizontalToVerticalCandidates\");\n const addVerticalToHorizontalCandidates = /* @__PURE__ */ __name((candidates, src, srcSide, dst, dstSide) => {\n for (const yTrack of outwardTracksForSide(srcSide)) {\n for (const xTrack of outwardTracksForSide(dstSide)) {\n pushOrthogonalCandidate(candidates, [\n src,\n { x: src.x, y: yTrack },\n { x: xTrack, y: yTrack },\n { x: xTrack, y: dst.y },\n dst\n ]);\n }\n }\n }, \"addVerticalToHorizontalCandidates\");\n const addHorizontalPairCandidates = /* @__PURE__ */ __name((candidates, src, srcSide, dst, dstSide) => {\n const yTracks = [...outwardTracksForSide(\"top\"), ...outwardTracksForSide(\"bottom\")];\n for (const srcTrack of outwardTracksForSide(srcSide)) {\n for (const dstTrack of outwardTracksForSide(dstSide)) {\n for (const yTrack of yTracks) {\n pushOrthogonalCandidate(candidates, [\n src,\n { x: srcTrack, y: src.y },\n { x: srcTrack, y: yTrack },\n { x: dstTrack, y: yTrack },\n { x: dstTrack, y: dst.y },\n dst\n ]);\n }\n }\n }\n }, \"addHorizontalPairCandidates\");\n const addVerticalPairCandidates = /* @__PURE__ */ __name((candidates, src, srcSide, dst, dstSide) => {\n const xTracks = [...outwardTracksForSide(\"left\"), ...outwardTracksForSide(\"right\")];\n for (const srcTrack of outwardTracksForSide(srcSide)) {\n for (const dstTrack of outwardTracksForSide(dstSide)) {\n for (const xTrack of xTracks) {\n pushOrthogonalCandidate(candidates, [\n src,\n { x: src.x, y: srcTrack },\n { x: xTrack, y: srcTrack },\n { x: xTrack, y: dstTrack },\n { x: dst.x, y: dstTrack },\n dst\n ]);\n }\n }\n }\n }, \"addVerticalPairCandidates\");\n const dedupeCandidatePaths = /* @__PURE__ */ __name((candidates) => {\n const seen = /* @__PURE__ */ new Set();\n return candidates.map((candidate) => dedupeConsecutivePoints(candidate)).filter((candidate) => {\n const key = candidate.map((point) => `${point.x.toFixed(3)},${point.y.toFixed(3)}`).join(\"|\");\n if (seen.has(key) || candidate.length < 2) {\n return false;\n }\n seen.add(key);\n return true;\n });\n }, \"dedupeCandidatePaths\");\n const buildCandidatesForSides = /* @__PURE__ */ __name((src, srcSide, dst, dstSide) => {\n const candidates = [];\n const base = buildOrthogonalPortPath(src, srcSide, dst, dstSide, ANCHOR, EPS_LOCAL);\n if (base) {\n pushOrthogonalCandidate(candidates, base);\n }\n if (srcSide === dstSide) {\n addSameSideCandidates(candidates, src, srcSide, dst);\n }\n const srcHorizontal = sideIsHorizontal(srcSide);\n const dstHorizontal = sideIsHorizontal(dstSide);\n if (srcHorizontal && !dstHorizontal) {\n addHorizontalToVerticalCandidates(candidates, src, srcSide, dst, dstSide);\n } else if (!srcHorizontal && dstHorizontal) {\n addVerticalToHorizontalCandidates(candidates, src, srcSide, dst, dstSide);\n } else if (srcHorizontal) {\n addHorizontalPairCandidates(candidates, src, srcSide, dst, dstSide);\n } else {\n addVerticalPairCandidates(candidates, src, srcSide, dst, dstSide);\n }\n return dedupeCandidatePaths(candidates);\n }, \"buildCandidatesForSides\");\n const addVerticalDepartureOuterTrackCandidates = /* @__PURE__ */ __name((candidates, first, departure, dstNode) => {\n const externalXTracks = [...outwardTracksForSide(\"left\"), ...outwardTracksForSide(\"right\")];\n const externalYTracks = [...outwardTracksForSide(\"top\"), ...outwardTracksForSide(\"bottom\")];\n for (const side of sides) {\n const dst = portForRectSide(dstNode, side);\n const targetYTracks = side === \"top\" || side === \"bottom\" ? outwardTracksForSide(side) : externalYTracks;\n for (const track of externalXTracks) {\n pushOrthogonalCandidate(candidates, [\n first,\n departure,\n { x: track, y: departure.y },\n { x: track, y: dst.y },\n dst\n ]);\n for (const targetTrack of targetYTracks) {\n pushOrthogonalCandidate(candidates, [\n first,\n departure,\n { x: track, y: departure.y },\n { x: track, y: targetTrack },\n { x: dst.x, y: targetTrack },\n dst\n ]);\n }\n }\n }\n }, \"addVerticalDepartureOuterTrackCandidates\");\n const addHorizontalDepartureOuterTrackCandidates = /* @__PURE__ */ __name((candidates, first, departure, dstNode) => {\n const externalXTracks = [...outwardTracksForSide(\"left\"), ...outwardTracksForSide(\"right\")];\n const externalYTracks = [...outwardTracksForSide(\"top\"), ...outwardTracksForSide(\"bottom\")];\n for (const side of sides) {\n const dst = portForRectSide(dstNode, side);\n const targetXTracks = side === \"left\" || side === \"right\" ? outwardTracksForSide(side) : externalXTracks;\n for (const track of externalYTracks) {\n pushOrthogonalCandidate(candidates, [\n first,\n departure,\n { x: departure.x, y: track },\n { x: dst.x, y: track },\n dst\n ]);\n for (const targetTrack of targetXTracks) {\n pushOrthogonalCandidate(candidates, [\n first,\n departure,\n { x: departure.x, y: track },\n { x: targetTrack, y: track },\n { x: targetTrack, y: dst.y },\n dst\n ]);\n }\n }\n }\n }, \"addHorizontalDepartureOuterTrackCandidates\");\n const terminalPreservingOuterTrackCandidates = /* @__PURE__ */ __name((edge) => {\n const srcId = edge.start;\n const dstId = edge.end;\n const dstNode = dstId ? nodeInfoById.get(dstId) : void 0;\n if (!srcId || !dstNode) {\n return [];\n }\n const points = dedupeConsecutivePoints(edge.points ?? []);\n if (points.length < 4) {\n return [];\n }\n const first = points[0];\n const departure = points[1];\n const candidates = [];\n if (isVerticalSegment(first, departure, EPS_LOCAL)) {\n addVerticalDepartureOuterTrackCandidates(candidates, first, departure, dstNode);\n } else if (isHorizontalSegment(first, departure, EPS_LOCAL)) {\n addHorizontalDepartureOuterTrackCandidates(candidates, first, departure, dstNode);\n }\n return candidates;\n }, \"terminalPreservingOuterTrackCandidates\");\n const candidatePathsFor = /* @__PURE__ */ __name((edge) => {\n const srcId = edge.start;\n const dstId = edge.end;\n const srcNode = srcId ? nodeInfoById.get(srcId) : void 0;\n const dstNode = dstId ? nodeInfoById.get(dstId) : void 0;\n if (!srcNode || !dstNode) {\n return [];\n }\n const candidates = [];\n for (const srcSide of sides) {\n const srcPort = portForRectSide(srcNode, srcSide);\n for (const dstSide of sides) {\n candidates.push(\n ...buildCandidatesForSides(srcPort, srcSide, portForRectSide(dstNode, dstSide), dstSide)\n );\n }\n }\n candidates.push(...terminalPreservingOuterTrackCandidates(edge));\n return candidates;\n }, \"candidatePathsFor\");\n const currentSegmentsByEdge = /* @__PURE__ */ __name(() => new Map(visibleEdges.map((edge) => [edge, segmentsFor(replacementPointsFor(edge))])), \"currentSegmentsByEdge\");\n const sharedTrackConflictsFor = /* @__PURE__ */ __name((edge, candidateSegments, baseSegments) => {\n const conflicts = /* @__PURE__ */ new Set();\n for (const other of visibleEdges) {\n if (other === edge) {\n continue;\n }\n const otherSegments = baseSegments.get(other) ?? segmentsFor(replacementPointsFor(other));\n if (candidateSegments.some(\n (candidateSegment) => otherSegments.some(\n (otherSegment) => sameAxisSegmentOverlapLength(candidateSegment, otherSegment, 0.5) >= MIN_SHARED\n )\n )) {\n conflicts.add(other);\n }\n }\n return conflicts;\n }, \"sharedTrackConflictsFor\");\n const pairCandidatesFor = /* @__PURE__ */ __name((edge, current, baseSegments, crossingCountByEdge) => {\n const seen = /* @__PURE__ */ new Set();\n const candidates = candidatePathsFor(edge).map((candidate) => simplifyPolyline(dedupeConsecutivePoints(candidate))).filter((candidate) => {\n if (pathHitsNode(edge, candidate)) {\n return false;\n }\n const key = candidate.map((point) => `${point.x.toFixed(3)},${point.y.toFixed(3)}`).join(\"|\");\n if (seen.has(key) || candidate.length < 2) {\n return false;\n }\n seen.add(key);\n return true;\n }).map((candidate) => {\n const candidateSegments = segmentsFor(candidate);\n let replacementAffected = 0;\n for (const other of visibleEdges) {\n if (other === edge) {\n continue;\n }\n replacementAffected += crossingCountBetweenSegments(\n candidateSegments,\n baseSegments.get(other) ?? segmentsFor(replacementPointsFor(other))\n );\n }\n return {\n candidate,\n candidateSegments,\n crossings: current.count - (crossingCountByEdge.get(edge) ?? 0) + replacementAffected,\n bends: countOrthogonalBends(candidate, EPS_LOCAL),\n totalBends: countOrthogonalBends(candidate),\n length: pathLength(candidate)\n };\n }).filter(({ crossings }) => crossings <= current.count).sort((a, b) => a.crossings - b.crossings || a.bends - b.bends || a.length - b.length);\n return candidates.slice(0, MAX_PAIR_CANDIDATES_PER_EDGE).map((candidate) => {\n return {\n path: candidate.candidate,\n segments: candidate.candidateSegments,\n sharedTrackConflicts: sharedTrackConflictsFor(\n edge,\n candidate.candidateSegments,\n baseSegments\n ),\n totalBends: candidate.totalBends,\n length: candidate.length\n };\n });\n }, \"pairCandidatesFor\");\n const pairCrossingCount = /* @__PURE__ */ __name((current, firstEdge, firstCandidate, secondEdge, secondCandidate, baseSegments) => {\n let currentAffected = 0;\n for (const pair of current.pairs) {\n if (pair.first === firstEdge || pair.second === firstEdge || pair.first === secondEdge || pair.second === secondEdge) {\n currentAffected += pair.count;\n }\n }\n let replacementAffected = crossingCountBetweenSegments(\n firstCandidate.segments,\n secondCandidate.segments\n );\n for (const other of visibleEdges) {\n if (other === firstEdge || other === secondEdge) {\n continue;\n }\n const otherSegments = baseSegments.get(other) ?? segmentsFor(replacementPointsFor(other));\n replacementAffected += crossingCountBetweenSegments(firstCandidate.segments, otherSegments) + crossingCountBetweenSegments(secondCandidate.segments, otherSegments);\n }\n return current.count - currentAffected + replacementAffected;\n }, \"pairCrossingCount\");\n const conflictsOnlyWith = /* @__PURE__ */ __name((candidate, edge) => {\n for (const conflict of candidate.sharedTrackConflicts) {\n if (conflict !== edge) {\n return false;\n }\n }\n return true;\n }, \"conflictsOnlyWith\");\n const candidatesShareTrack = /* @__PURE__ */ __name((firstCandidate, secondCandidate) => firstCandidate.segments.some(\n (firstSegment) => secondCandidate.segments.some(\n (secondSegment) => sameAxisSegmentOverlapLength(firstSegment, secondSegment, 0.5) >= MIN_SHARED\n )\n ), \"candidatesShareTrack\");\n const pairCandidatesAreCompatible = /* @__PURE__ */ __name((first, firstCandidate, second, secondCandidate) => conflictsOnlyWith(firstCandidate, second.edge) && conflictsOnlyWith(secondCandidate, first.edge) && !candidatesShareTrack(firstCandidate, secondCandidate), \"pairCandidatesAreCompatible\");\n const scorePairReplacement = /* @__PURE__ */ __name((context, first, firstCandidate, second, secondCandidate) => {\n const crossings = pairCrossingCount(\n context.current,\n first.edge,\n firstCandidate,\n second.edge,\n secondCandidate,\n context.baseSegments\n );\n if (crossings >= context.current.count) {\n return void 0;\n }\n return {\n replacements: /* @__PURE__ */ new Map([\n [first.edge, firstCandidate.path],\n [second.edge, secondCandidate.path]\n ]),\n crossings,\n bends: context.currentBends - (context.baseBendsByEdge.get(first.edge) ?? 0) - (context.baseBendsByEdge.get(second.edge) ?? 0) + firstCandidate.totalBends + secondCandidate.totalBends,\n length: context.currentLength - (context.baseLengthByEdge.get(first.edge) ?? 0) - (context.baseLengthByEdge.get(second.edge) ?? 0) + firstCandidate.length + secondCandidate.length\n };\n }, \"scorePairReplacement\");\n const pairScoreIsBetter = /* @__PURE__ */ __name((candidate, best) => candidate.crossings < best.crossings || candidate.crossings === best.crossings && (candidate.bends < best.bends || candidate.bends === best.bends && candidate.length < best.length), \"pairScoreIsBetter\");\n const bestScoreForOptionPair = /* @__PURE__ */ __name((context, first, second, best) => {\n let pairBest = best;\n for (const firstCandidate of first.candidates) {\n for (const secondCandidate of second.candidates) {\n if (!pairCandidatesAreCompatible(first, firstCandidate, second, secondCandidate)) {\n continue;\n }\n const score = scorePairReplacement(context, first, firstCandidate, second, secondCandidate);\n if (score && pairScoreIsBetter(score, pairBest)) {\n pairBest = score;\n }\n }\n }\n return pairBest;\n }, \"bestScoreForOptionPair\");\n const bestPairedReplacement = /* @__PURE__ */ __name((current) => {\n const currentBends = totalBends();\n const currentLength = totalLength();\n const baseSegments = currentSegmentsByEdge();\n const crossingCountByEdge = currentCrossingsByEdge(current);\n const baseBendsByEdge = new Map(\n visibleEdges.map((edge) => [edge, countOrthogonalBends(replacementPointsFor(edge))])\n );\n const baseLengthByEdge = new Map(\n visibleEdges.map((edge) => [edge, pathLength(replacementPointsFor(edge))])\n );\n const optionsByEdge = /* @__PURE__ */ new Map();\n const groups = pairSearchGroups(current);\n for (const group of groups) {\n for (const edge of group) {\n if (optionsByEdge.has(edge)) {\n continue;\n }\n const candidates = pairCandidatesFor(edge, current, baseSegments, crossingCountByEdge);\n if (candidates.length > 0) {\n optionsByEdge.set(edge, { edge, candidates });\n }\n }\n }\n let best = {\n replacements: /* @__PURE__ */ new Map(),\n crossings: current.count,\n bends: currentBends,\n length: currentLength\n };\n const scoringContext = {\n current,\n currentBends,\n currentLength,\n baseBendsByEdge,\n baseLengthByEdge,\n baseSegments\n };\n for (const group of groups) {\n const crossingEdgeSet = new Set(group.filter((edge) => current.edgeSet.has(edge)));\n const options = group.map((edge) => optionsByEdge.get(edge)).filter((option) => Boolean(option));\n for (let i = 0; i < options.length; i++) {\n const first = options[i];\n for (let j = i + 1; j < options.length; j++) {\n const second = options[j];\n if (!crossingEdgeSet.has(first.edge) && !crossingEdgeSet.has(second.edge)) {\n continue;\n }\n best = bestScoreForOptionPair(scoringContext, first, second, best);\n }\n }\n }\n return best.replacements.size > 0 ? best.replacements : void 0;\n }, \"bestPairedReplacement\");\n for (let iteration = 0; iteration < MAX_ITERATIONS; iteration++) {\n const current = crossingSnapshot();\n const currentCrossings = current.count;\n if (currentCrossings === 0) {\n return;\n }\n let bestEdge;\n let bestPath;\n let bestCrossings = currentCrossings;\n let bestBends = Number.POSITIVE_INFINITY;\n for (const edge of current.edges) {\n const currentEdgeBends = countOrthogonalBends(replacementPointsFor(edge), EPS_LOCAL);\n for (const candidate of candidatePathsFor(edge)) {\n const candidateHitsNode = pathHitsNode(edge, candidate);\n const candidateHasSegmentConflict = !candidateHitsNode && pathHasSegmentConflict(edge, candidate);\n const candidateCrossings = crossingCountWithSingleReplacement(current, edge, candidate);\n const candidateBends = countOrthogonalBends(candidate, EPS_LOCAL);\n if (candidateHitsNode || candidateHasSegmentConflict) {\n continue;\n }\n const improvesCurrentEdge = candidateCrossings < currentCrossings || candidateCrossings === currentCrossings && candidateBends < currentEdgeBends;\n if (!improvesCurrentEdge) {\n continue;\n }\n if (candidateCrossings > bestCrossings || candidateCrossings === bestCrossings && candidateBends >= bestBends) {\n continue;\n }\n bestEdge = edge;\n bestPath = candidate;\n bestCrossings = candidateCrossings;\n bestBends = candidateBends;\n }\n }\n if (bestEdge && bestPath) {\n bestEdge.points = bestPath;\n continue;\n }\n const pairedReplacement = bestPairedReplacement(current);\n if (!pairedReplacement) {\n return;\n }\n for (const [edge, points] of pairedReplacement) {\n edge.points = points;\n }\n }\n}\n__name(resolveRenderedOrthogonalCrossings, \"resolveRenderedOrthogonalCrossings\");\n\n// src/rendering-util/layout-algorithms/swimlanes/direction/detourSimplification.ts\nvar EPS4 = 1e-3;\nvar MIN_SHARED2 = 8;\nfunction simplifyDetouredEdges(edges, nodes) {\n const { nodeInfoById, realNodeRects } = collectRealNodeBounds(nodes);\n const sides = [\"top\", \"bottom\", \"left\", \"right\"];\n const ANCHOR = 20;\n const outsideTracks = {\n top: Math.min(...realNodeRects.map((node) => node.rect.top)) - ANCHOR,\n bottom: Math.max(...realNodeRects.map((node) => node.rect.bottom)) + ANCHOR,\n left: Math.min(...realNodeRects.map((node) => node.rect.left)) - ANCHOR,\n right: Math.max(...realNodeRects.map((node) => node.rect.right)) + ANCHOR\n };\n const buildOrthogonalPathCandidates = /* @__PURE__ */ __name((src, srcSide, dst, dstSide) => {\n const paths = [];\n const base = buildOrthogonalPortPath(src, srcSide, dst, dstSide, ANCHOR, EPS4);\n if (base) {\n paths.push(base);\n }\n if (srcSide === dstSide) {\n paths.push(buildSameSideTrackPath(src, srcSide, dst, outsideTracks[srcSide]));\n }\n return paths;\n }, \"buildOrthogonalPathCandidates\");\n const pathHitsNode = /* @__PURE__ */ __name((pts, excludeIds) => {\n for (let i = 0; i < pts.length - 1; i++) {\n const a = pts[i];\n const b = pts[i + 1];\n if (segmentHitsAnyRect(a, b, realNodeRects, excludeIds, 1)) {\n return true;\n }\n }\n return false;\n }, \"pathHitsNode\");\n const pathConflictCount = /* @__PURE__ */ __name((path, currentEdge, includeIncidentEdges = false) => {\n let conflicts = 0;\n const pathSegments = orthogonalSegmentsForPoints(path, EPS4);\n const currentStart = currentEdge.start;\n const currentEnd = currentEdge.end;\n for (const other of edges) {\n if (other === currentEdge || other.isLayoutOnly) {\n continue;\n }\n const otherStart = other.start;\n const otherEnd = other.end;\n if (!includeIncidentEdges && currentStart && currentEnd && (otherStart === currentStart || otherStart === currentEnd || otherEnd === currentStart || otherEnd === currentEnd)) {\n continue;\n }\n const otherPts = other.points;\n if (!otherPts || otherPts.length < 2) {\n continue;\n }\n for (const pathSegment of pathSegments) {\n for (const otherSegment of orthogonalSegmentsForPoints(otherPts, EPS4)) {\n if (orthogonalSegmentsCross(\n pathSegment.a,\n pathSegment.b,\n otherSegment.a,\n otherSegment.b,\n EPS4,\n EPS4\n )) {\n conflicts++;\n continue;\n }\n if (sameAxisSegmentOverlapLength(pathSegment, otherSegment, EPS4) >= MIN_SHARED2) {\n conflicts++;\n }\n }\n }\n }\n return conflicts;\n }, \"pathConflictCount\");\n const BEND_THRESHOLD = 4;\n const nearestSideOfRect = /* @__PURE__ */ __name((pt, info) => {\n const dTop = Math.abs(pt.y - info.rect.top);\n const dBottom = Math.abs(pt.y - info.rect.bottom);\n const dLeft = Math.abs(pt.x - info.rect.left);\n const dRight = Math.abs(pt.x - info.rect.right);\n let best = \"top\";\n let bestDist = dTop;\n if (dBottom < bestDist) {\n best = \"bottom\";\n bestDist = dBottom;\n }\n if (dLeft < bestDist) {\n best = \"left\";\n bestDist = dLeft;\n }\n if (dRight < bestDist) {\n best = \"right\";\n bestDist = dRight;\n }\n return best;\n }, \"nearestSideOfRect\");\n const faceClaims = /* @__PURE__ */ new Map();\n const addFaceClaim = /* @__PURE__ */ __name((nodeId, side, edgeId) => {\n const claims = faceClaims.get(nodeId) ?? [];\n claims.push({ side, edgeId });\n faceClaims.set(nodeId, claims);\n }, \"addFaceClaim\");\n for (const e of edges) {\n if (e.isLayoutOnly) {\n continue;\n }\n const pts = e.points ?? [];\n if (pts.length < 1) {\n continue;\n }\n const eId = e.id ?? \"\";\n const startId = e.start;\n const endId = e.end;\n if (startId) {\n const info = nodeInfoById.get(startId);\n if (info) {\n addFaceClaim(startId, nearestSideOfRect(pts[0], info), eId);\n }\n }\n if (endId) {\n const info = nodeInfoById.get(endId);\n if (info) {\n addFaceClaim(endId, nearestSideOfRect(pts[pts.length - 1], info), eId);\n }\n }\n }\n const faceIsClaimed = /* @__PURE__ */ __name((nodeId, side, ignoreEdgeId) => {\n return faceClaims.get(nodeId)?.some((c) => c.edgeId !== ignoreEdgeId && c.side === side) ?? false;\n }, \"faceIsClaimed\");\n for (const edge of edges) {\n if (edge.isLayoutOnly) {\n continue;\n }\n const pts = edge.points;\n if (!pts || pts.length < 2) {\n continue;\n }\n const currentBends = countOrthogonalBends(pts, EPS4);\n if (currentBends < BEND_THRESHOLD) {\n continue;\n }\n const srcId = edge.start;\n const dstId = edge.end;\n if (!srcId || !dstId) {\n continue;\n }\n const srcInfo = nodeInfoById.get(srcId);\n const dstInfo = nodeInfoById.get(dstId);\n if (!srcInfo || !dstInfo) {\n continue;\n }\n const edgeId = edge.id ?? \"\";\n const currentCrossingConflicts = pathConflictCount(pts, edge, true);\n const currentNonIncidentConflicts = pathConflictCount(pts, edge);\n let bestPath;\n let bestCrossingConflicts = currentCrossingConflicts;\n let bestBends = currentBends;\n for (const srcSide of sides) {\n if (faceIsClaimed(srcId, srcSide, edgeId)) {\n continue;\n }\n const srcPort = portForRectSide(srcInfo, srcSide);\n for (const dstSide of sides) {\n if (faceIsClaimed(dstId, dstSide, edgeId)) {\n continue;\n }\n const dstPort = portForRectSide(dstInfo, dstSide);\n for (const path of buildOrthogonalPathCandidates(srcPort, srcSide, dstPort, dstSide)) {\n if (pathHitsNode(path, [srcId, dstId])) {\n continue;\n }\n const pathBends = countOrthogonalBends(path, EPS4);\n if (currentCrossingConflicts > 0) {\n const pathCrossingConflicts = pathConflictCount(path, edge, true);\n if (pathCrossingConflicts > bestCrossingConflicts || pathCrossingConflicts === bestCrossingConflicts && pathBends >= bestBends) {\n continue;\n }\n bestCrossingConflicts = pathCrossingConflicts;\n bestBends = pathBends;\n bestPath = path;\n continue;\n }\n if (pathConflictCount(path, edge) > currentNonIncidentConflicts) {\n continue;\n }\n if (pathBends < bestBends) {\n bestBends = pathBends;\n bestPath = path;\n }\n }\n }\n }\n if (bestPath) {\n edge.points = bestPath;\n const refreshSrc = faceClaims.get(srcId);\n if (refreshSrc) {\n faceClaims.set(\n srcId,\n refreshSrc.filter((c) => c.edgeId !== edgeId)\n );\n }\n const refreshDst = faceClaims.get(dstId);\n if (refreshDst) {\n faceClaims.set(\n dstId,\n refreshDst.filter((c) => c.edgeId !== edgeId)\n );\n }\n addFaceClaim(srcId, nearestSideOfRect(bestPath[0], srcInfo), edgeId);\n addFaceClaim(dstId, nearestSideOfRect(bestPath[bestPath.length - 1], dstInfo), edgeId);\n }\n }\n}\n__name(simplifyDetouredEdges, \"simplifyDetouredEdges\");\n\n// src/rendering-util/layout-algorithms/swimlanes/direction/labelAnchoring.ts\nvar EPS5 = 1e-3;\nvar MARKER_CLEARANCE_LENGTH = 10;\nvar MARKER_CLEARANCE_HALF_WIDTH = 7;\nfunction markerClearanceRectFor(pts, atStart) {\n const terminalIndex = atStart ? 0 : pts.length - 1;\n const step = atStart ? 1 : -1;\n const tip = pts[terminalIndex];\n const inner = pts[terminalIndex + step];\n if (!tip || !inner) {\n return void 0;\n }\n const dx = inner.x - tip.x;\n const dy = inner.y - tip.y;\n const len = Math.abs(dx) + Math.abs(dy);\n if (len < EPS5) {\n return void 0;\n }\n if (Math.abs(dy) <= EPS5) {\n const x2 = tip.x + Math.sign(dx) * MARKER_CLEARANCE_LENGTH;\n return {\n left: Math.min(tip.x, x2),\n right: Math.max(tip.x, x2),\n top: tip.y - MARKER_CLEARANCE_HALF_WIDTH,\n bottom: tip.y + MARKER_CLEARANCE_HALF_WIDTH\n };\n }\n if (Math.abs(dx) <= EPS5) {\n const y2 = tip.y + Math.sign(dy) * MARKER_CLEARANCE_LENGTH;\n return {\n left: tip.x - MARKER_CLEARANCE_HALF_WIDTH,\n right: tip.x + MARKER_CLEARANCE_HALF_WIDTH,\n top: Math.min(tip.y, y2),\n bottom: Math.max(tip.y, y2)\n };\n }\n return {\n left: Math.min(tip.x, inner.x),\n right: Math.max(tip.x, inner.x),\n top: Math.min(tip.y, inner.y),\n bottom: Math.max(tip.y, inner.y)\n };\n}\n__name(markerClearanceRectFor, \"markerClearanceRectFor\");\nfunction normalizeRect(rect) {\n return {\n left: Math.min(rect.left, rect.right),\n right: Math.max(rect.left, rect.right),\n top: Math.min(rect.top, rect.bottom),\n bottom: Math.max(rect.top, rect.bottom)\n };\n}\n__name(normalizeRect, \"normalizeRect\");\nfunction labelOverlapsOwnMarker(rect, pts) {\n const visiblePts = dedupeConsecutivePoints(pts);\n const startMarker = markerClearanceRectFor(visiblePts, true);\n const endMarker = markerClearanceRectFor(visiblePts, false);\n return [startMarker, endMarker].some(\n (marker) => marker && rectsOverlap(rect, normalizeRect(marker))\n );\n}\n__name(labelOverlapsOwnMarker, \"labelOverlapsOwnMarker\");\nfunction anchorLabelsToPolyline(edges, nodeByIdMap) {\n const allEdgeSegments = [];\n for (const other of edges) {\n if (other.isLayoutOnly) {\n continue;\n }\n const pts = other.points;\n if (!pts || pts.length < 2) {\n continue;\n }\n for (let i = 0; i < pts.length - 1; i++) {\n allEdgeSegments.push({ edgeId: other.id, p1: pts[i], p2: pts[i + 1] });\n }\n }\n const foreignNodeRects = [];\n const laneGroups = [];\n for (const n of nodeByIdMap.values()) {\n const isGroup = n.isGroup;\n const parentId = n.parentId;\n if (isGroup && !parentId) {\n const rect2 = rectOfNodeBounds(n);\n if (rect2) {\n laneGroups.push({\n id: n.id,\n rect: rect2\n });\n }\n continue;\n }\n if (isGroup) {\n continue;\n }\n if (n.isEdgeLabel) {\n continue;\n }\n const rect = rectOfNodeBounds(n);\n if (!rect) {\n continue;\n }\n foreignNodeRects.push({\n nodeId: n.id,\n rect\n });\n }\n const LABEL_PLACEMENT_BUFFER = 3;\n const LABEL_LANE_MARGIN = 1;\n const LABEL_ENDPOINT_CLEARANCE = 12;\n const labelOverlapsForeignNode = /* @__PURE__ */ __name((labelId, rect) => {\n const buffered = inflateRect(rect, LABEL_PLACEMENT_BUFFER);\n for (const { nodeId, rect: nr } of foreignNodeRects) {\n if (nodeId === labelId) {\n continue;\n }\n if (rectsOverlap(buffered, nr)) {\n return true;\n }\n }\n return false;\n }, \"labelOverlapsForeignNode\");\n const labelOverlapsForeignEdge = /* @__PURE__ */ __name((edgeId, rect) => {\n const buffered = inflateRect(rect, LABEL_PLACEMENT_BUFFER);\n for (const s of allEdgeSegments) {\n if (s.edgeId === edgeId) {\n continue;\n }\n if (segmentBoundsOverlapRect(s.p1, s.p2, buffered)) {\n return true;\n }\n }\n return false;\n }, \"labelOverlapsForeignEdge\");\n const labelOverlapsAnything = /* @__PURE__ */ __name((labelId, edgeId, rect) => labelOverlapsForeignNode(labelId, rect) || labelOverlapsForeignEdge(edgeId, rect), \"labelOverlapsAnything\");\n const placedLabelRects = [];\n const findContainingLane = /* @__PURE__ */ __name((rect) => {\n for (const { id, rect: laneRect } of laneGroups) {\n if (rectContainsRect(laneRect, rect)) {\n return id;\n }\n }\n return void 0;\n }, \"findContainingLane\");\n const overlapsPlacedLabel = /* @__PURE__ */ __name((labelId, rect) => placedLabelRects.some(\n (placed) => placed.labelId !== labelId && rectsOverlap(rect, placed.rect)\n ), \"overlapsPlacedLabel\");\n for (const edge of edges) {\n if (edge.isLayoutOnly) {\n continue;\n }\n const labelId = edge.labelNodeId;\n if (!labelId) {\n continue;\n }\n const labelNode = nodeByIdMap.get(labelId);\n if (!labelNode) {\n continue;\n }\n const pts = edge.points;\n if (!pts || pts.length < 2) {\n continue;\n }\n const lw = labelNode.width ?? 0;\n const lh = labelNode.height ?? 0;\n if (lw <= 0 || lh <= 0) {\n continue;\n }\n const segments = [];\n for (let i = 0; i < pts.length - 1; i++) {\n const a = pts[i];\n const b = pts[i + 1];\n const dx = Math.abs(a.x - b.x);\n const dy = Math.abs(a.y - b.y);\n if (dx < EPS5 && dy < EPS5) {\n continue;\n }\n if (dx >= EPS5 && dy >= EPS5) {\n continue;\n }\n segments.push({\n idx: i,\n length: dx + dy,\n orientation: dx >= EPS5 ? \"horizontal\" : \"vertical\",\n midX: (a.x + b.x) / 2,\n midY: (a.y + b.y) / 2\n });\n }\n if (segments.length === 0) {\n continue;\n }\n const middleSegments = segments.length >= 3 ? segments.filter((s) => s.idx > 0 && s.idx < segments.length - 1) : segments;\n const poolBase = middleSegments.length > 0 ? middleSegments : segments;\n const labelLongAxis = lw >= lh ? \"horizontal\" : \"vertical\";\n const rankSegments = /* @__PURE__ */ __name((pool) => {\n return [...pool].sort((a, b) => {\n const aLongAxis = a.orientation === labelLongAxis;\n const bLongAxis = b.orientation === labelLongAxis;\n if (aLongAxis !== bLongAxis) {\n return aLongAxis ? -1 : 1;\n }\n const aFits = a.length >= (a.orientation === \"horizontal\" ? lw : lh) + 2;\n const bFits = b.length >= (b.orientation === \"horizontal\" ? lw : lh) + 2;\n if (aFits !== bFits) {\n return aFits ? -1 : 1;\n }\n return b.length - a.length;\n });\n }, \"rankSegments\");\n const firstVisibleSegment = segments[0];\n const lastVisibleSegment = segments[segments.length - 1];\n const ALONG_SEGMENT_TS = [0.5, 0.25, 0.75, 0.05, 0.95, 0.15, 0.85, 0.1, 0.9];\n const anchorAtT = /* @__PURE__ */ __name((seg, t) => {\n const a = pts[seg.idx];\n const b = pts[seg.idx + 1];\n return {\n midX: a.x + (b.x - a.x) * t,\n midY: a.y + (b.y - a.y) * t\n };\n }, \"anchorAtT\");\n const clamp = /* @__PURE__ */ __name((value, min, max) => Math.min(max, Math.max(min, value)), \"clamp\");\n const pointInsideRectInclusive = /* @__PURE__ */ __name((point, rect) => point.midX >= rect.left - EPS5 && point.midX <= rect.right + EPS5 && point.midY >= rect.top - EPS5 && point.midY <= rect.bottom + EPS5, \"pointInsideRectInclusive\");\n const placementForAnchor = /* @__PURE__ */ __name((anchor) => {\n const centeredRect = rectFromCenterSize(anchor.midX, anchor.midY, lw, lh);\n const centeredLane = findContainingLane(centeredRect);\n if (centeredLane) {\n return { laneId: centeredLane, anchor, rect: centeredRect };\n }\n const containingLane = laneGroups.find(({ rect }) => pointInsideRectInclusive(anchor, rect));\n if (!containingLane) {\n return void 0;\n }\n const minX = containingLane.rect.left + lw / 2 + LABEL_LANE_MARGIN;\n const maxX = containingLane.rect.right - lw / 2 - LABEL_LANE_MARGIN;\n const minY = containingLane.rect.top + lh / 2 + LABEL_LANE_MARGIN;\n const maxY = containingLane.rect.bottom - lh / 2 - LABEL_LANE_MARGIN;\n if (minX > maxX || minY > maxY) {\n return void 0;\n }\n const clampedAnchor = {\n midX: clamp(anchor.midX, minX, maxX),\n midY: clamp(anchor.midY, minY, maxY)\n };\n const clampedRect = rectFromCenterSize(clampedAnchor.midX, clampedAnchor.midY, lw, lh);\n return pointInsideRectInclusive(anchor, clampedRect) ? { laneId: containingLane.id, anchor: clampedAnchor, rect: clampedRect } : void 0;\n }, \"placementForAnchor\");\n const distanceAlongSegment = /* @__PURE__ */ __name((seg, anchor, endpoint) => seg.orientation === \"horizontal\" ? Math.abs(anchor.midX - endpoint.x) : Math.abs(anchor.midY - endpoint.y), \"distanceAlongSegment\");\n const labelClearsTerminalEndpoints = /* @__PURE__ */ __name((seg, anchor) => {\n const labelHalfExtent = seg.orientation === \"horizontal\" ? lw / 2 : lh / 2;\n const requiredDistance = labelHalfExtent + LABEL_ENDPOINT_CLEARANCE;\n if (seg === firstVisibleSegment) {\n const start = pts[seg.idx];\n if (distanceAlongSegment(seg, anchor, start) + EPS5 < requiredDistance) {\n return false;\n }\n }\n if (seg === lastVisibleSegment) {\n const end = pts[seg.idx + 1];\n if (distanceAlongSegment(seg, anchor, end) + EPS5 < requiredDistance) {\n return false;\n }\n }\n return true;\n }, \"labelClearsTerminalEndpoints\");\n const tryPool = /* @__PURE__ */ __name((pool) => {\n const rankedPool = rankSegments(pool);\n for (const seg of rankedPool) {\n for (const t of ALONG_SEGMENT_TS) {\n const anchor = anchorAtT(seg, t);\n if (!labelClearsTerminalEndpoints(seg, anchor)) {\n continue;\n }\n const placement = placementForAnchor(anchor);\n if (!placement) {\n continue;\n }\n if (labelOverlapsOwnMarker(placement.rect, pts)) {\n continue;\n }\n if (overlapsPlacedLabel(labelId, placement.rect)) {\n continue;\n }\n if (!labelOverlapsAnything(labelId, edge.id, placement.rect)) {\n return { laneId: placement.laneId, anchor: placement.anchor };\n }\n }\n }\n return void 0;\n }, \"tryPool\");\n const findLaneContainingFallback = /* @__PURE__ */ __name((pool, requireEndpointClearance, allowForeignEdgeOverlap = false) => {\n const rankedPool = rankSegments(pool);\n for (const seg of rankedPool) {\n const anchor = { midX: seg.midX, midY: seg.midY };\n if (requireEndpointClearance && !labelClearsTerminalEndpoints(seg, anchor)) {\n continue;\n }\n const placement = placementForAnchor(anchor);\n if (placement && !labelOverlapsOwnMarker(placement.rect, pts) && !overlapsPlacedLabel(labelId, placement.rect) && !labelOverlapsForeignNode(labelId, placement.rect) && (allowForeignEdgeOverlap || !labelOverlapsForeignEdge(edge.id, placement.rect))) {\n return { laneId: placement.laneId, anchor: placement.anchor };\n }\n }\n return void 0;\n }, \"findLaneContainingFallback\");\n const chosen = tryPool(poolBase) ?? (poolBase.length < segments.length ? tryPool(segments) : void 0) ?? findLaneContainingFallback(segments, true) ?? findLaneContainingFallback(segments, false) ?? findLaneContainingFallback(segments, false, true);\n if (chosen) {\n labelNode.x = chosen.anchor.midX;\n labelNode.y = chosen.anchor.midY;\n labelNode.parentId = chosen.laneId;\n const chosenRect = rectFromCenterSize(chosen.anchor.midX, chosen.anchor.midY, lw, lh);\n const priorIdx = placedLabelRects.findIndex((placed) => placed.labelId === labelId);\n if (priorIdx >= 0) {\n placedLabelRects[priorIdx] = { labelId, rect: chosenRect };\n } else {\n placedLabelRects.push({ labelId, rect: chosenRect });\n }\n }\n }\n}\n__name(anchorLabelsToPolyline, \"anchorLabelsToPolyline\");\n\n// src/rendering-util/layout-algorithms/swimlanes/direction/siblingSharedFaceRouting.ts\nvar EPS6 = 1e-6;\nvar MIN_PORT_SPACING2 = 8;\nvar PORT_SHIFT2 = MIN_PORT_SPACING2 / 2;\nvar LABEL_CLEARANCE_BUFFER = 3;\nfunction pairKey(a, b) {\n return a < b ? `${a}::${b}` : `${b}::${a}`;\n}\n__name(pairKey, \"pairKey\");\nfunction straightenCollinearSiblingDetours(edges, nodes) {\n const { nodeInfoById, realNodeRects } = collectRealNodeBounds(nodes);\n const labelDimById = /* @__PURE__ */ new Map();\n for (const n of nodes) {\n const id = n.id;\n if (n.isGroup) {\n continue;\n }\n if (n.isEdgeLabel) {\n labelDimById.set(id, {\n w: n.width ?? 0,\n h: n.height ?? 0\n });\n continue;\n }\n }\n const labelClearanceFor = /* @__PURE__ */ __name((thisEdge, thisSrcId, thisDstId, axis) => {\n const targetPair = pairKey(thisSrcId, thisDstId);\n let maxHalf = 0;\n const consider = /* @__PURE__ */ __name((labelId) => {\n if (!labelId) {\n return;\n }\n const dim = labelDimById.get(labelId);\n if (!dim) {\n return;\n }\n const half = axis === \"x\" ? dim.w / 2 : dim.h / 2;\n if (half > maxHalf) {\n maxHalf = half;\n }\n }, \"consider\");\n consider(thisEdge.labelNodeId);\n for (const other of edges) {\n if (other === thisEdge) {\n continue;\n }\n if (other.isLayoutOnly) {\n continue;\n }\n const oSrc = other.start;\n const oDst = other.end;\n if (!oSrc || !oDst) {\n continue;\n }\n if (pairKey(oSrc, oDst) !== targetPair) {\n continue;\n }\n consider(other.labelNodeId);\n }\n return maxHalf > 0 ? maxHalf + LABEL_CLEARANCE_BUFFER : 0;\n }, \"labelClearanceFor\");\n for (const edge of edges) {\n if (edge.isLayoutOnly) {\n continue;\n }\n const pts = edge.points;\n if (!classifyThreeSegmentRoute(pts, EPS6)) {\n continue;\n }\n const nodePair = getNodePairGeometry(edge, nodeInfoById, EPS6);\n if (!nodePair) {\n continue;\n }\n const { srcId, dstId, srcInfo, dstInfo, collinearX, collinearY } = nodePair;\n if (collinearX === collinearY) {\n continue;\n }\n let targetSrc;\n let targetDst;\n if (collinearX) {\n const dstBelow = dstInfo.cy > srcInfo.cy;\n targetSrc = { x: srcInfo.cx, y: dstBelow ? srcInfo.rect.bottom : srcInfo.rect.top };\n targetDst = { x: dstInfo.cx, y: dstBelow ? dstInfo.rect.top : dstInfo.rect.bottom };\n } else {\n const dstEast = dstInfo.cx > srcInfo.cx;\n targetSrc = { x: dstEast ? srcInfo.rect.right : srcInfo.rect.left, y: srcInfo.cy };\n targetDst = { x: dstEast ? dstInfo.rect.left : dstInfo.rect.right, y: dstInfo.cy };\n }\n if (segmentHitsAnyRect(targetSrc, targetDst, realNodeRects, [srcId, dstId], 1)) {\n continue;\n }\n const shiftAxis = collinearX ? \"x\" : \"y\";\n const labelShift = labelClearanceFor(edge, srcId, dstId, shiftAxis);\n const effectiveShift = labelShift > PORT_SHIFT2 ? labelShift : PORT_SHIFT2;\n const deltas = [0, effectiveShift, -effectiveShift];\n for (const delta of deltas) {\n const shiftedSrc = { ...targetSrc };\n const shiftedDst = { ...targetDst };\n if (collinearX) {\n shiftedSrc.x += delta;\n shiftedDst.x += delta;\n if (shiftedSrc.x <= srcInfo.rect.left || shiftedSrc.x >= srcInfo.rect.right) {\n continue;\n }\n if (shiftedDst.x <= dstInfo.rect.left || shiftedDst.x >= dstInfo.rect.right) {\n continue;\n }\n } else {\n shiftedSrc.y += delta;\n shiftedDst.y += delta;\n if (shiftedSrc.y <= srcInfo.rect.top || shiftedSrc.y >= srcInfo.rect.bottom) {\n continue;\n }\n if (shiftedDst.y <= dstInfo.rect.top || shiftedDst.y >= dstInfo.rect.bottom) {\n continue;\n }\n }\n if (segmentHitsAnyRect(shiftedSrc, shiftedDst, realNodeRects, [srcId, dstId], 1)) {\n continue;\n }\n if (segmentConflictsWithAnyEdge(shiftedSrc, shiftedDst, edges, edge, { epsilon: EPS6 })) {\n continue;\n }\n edge.points = [shiftedSrc, shiftedDst];\n break;\n }\n }\n}\n__name(straightenCollinearSiblingDetours, \"straightenCollinearSiblingDetours\");\n\n// src/rendering-util/layout-algorithms/swimlanes/direction/sharedTrackNudging.ts\nfunction nudgeSharedInteriorSubpaths(edges, nodeByIdMap) {\n const EPS_LOCAL2 = 1e-3;\n const MIN_SHARED3 = 8;\n const TRACK_SHIFT = 7;\n const MIN_TRACK_GAP = TRACK_SHIFT;\n const SOURCE_DETOUR_STUB = 20;\n const BUFFER = 2;\n const MAX_ITERATIONS = 12;\n const { realNodeRects, labelNodeRects: labelRects } = collectNodeRectEntries(\n nodeByIdMap.values()\n );\n const segmentsFor2 = /* @__PURE__ */ __name((edge, points) => {\n return orthogonalSegmentsForPoints(points, EPS_LOCAL2).map((segment) => ({\n ...segment,\n edge,\n interior: segment.index >= 1 && segment.index <= points.length - 3\n }));\n }, \"segmentsFor\");\n const allSegments = /* @__PURE__ */ __name(() => {\n const result = [];\n for (const edge of edges) {\n if (edge.isLayoutOnly) {\n continue;\n }\n const points = edge.points;\n if (!points || points.length < 2) {\n continue;\n }\n result.push(...segmentsFor2(edge, dedupeConsecutivePoints(points)));\n }\n return result;\n }, \"allSegments\");\n const hasCrowdedParallelTrack = /* @__PURE__ */ __name((a, b) => {\n if (a.horizontal && b.horizontal) {\n return overlapLength(a.a.x, a.b.x, b.a.x, b.b.x) >= MIN_SHARED3 && Math.abs(a.a.y - b.a.y) < MIN_TRACK_GAP;\n }\n if (a.vertical && b.vertical) {\n return overlapLength(a.a.y, a.b.y, b.a.y, b.b.y) >= MIN_SHARED3 && Math.abs(a.a.x - b.a.x) < MIN_TRACK_GAP;\n }\n return false;\n }, \"hasCrowdedParallelTrack\");\n const candidateIsSafe = /* @__PURE__ */ __name((edge, candidate) => {\n const sourceId = edge.start;\n const targetId = edge.end;\n const candidateSegments = segmentsFor2(edge, candidate);\n if (candidateSegments.length !== candidate.length - 1) {\n return false;\n }\n const endpointIds = [sourceId, targetId].filter((id) => Boolean(id));\n const ownLabelIds = edge.labelNodeId ? [edge.labelNodeId] : [];\n for (const segment of candidateSegments) {\n if (segmentHitsAnyRect(segment.a, segment.b, realNodeRects, endpointIds, -BUFFER)) {\n return false;\n }\n if (segmentHitsAnyRect(segment.a, segment.b, labelRects, ownLabelIds, -BUFFER)) {\n return false;\n }\n }\n for (const other of edges) {\n if (other === edge || other.isLayoutOnly) {\n continue;\n }\n const otherPoints = other.points;\n if (!otherPoints || otherPoints.length < 2) {\n continue;\n }\n for (const candidateSegment of candidateSegments) {\n for (const otherSegment of segmentsFor2(other, dedupeConsecutivePoints(otherPoints))) {\n if (hasCrowdedParallelTrack(candidateSegment, otherSegment)) {\n return false;\n }\n if (orthogonalSegmentsStrictlyCross(\n candidateSegment.a,\n candidateSegment.b,\n otherSegment.a,\n otherSegment.b,\n EPS_LOCAL2\n )) {\n return false;\n }\n }\n }\n }\n return true;\n }, \"candidateIsSafe\");\n const shiftedCandidate = /* @__PURE__ */ __name((segment, shift) => {\n const points = dedupeConsecutivePoints(segment.edge.points ?? []);\n if (points.length < 4 || segment.index >= points.length - 1) {\n return void 0;\n }\n const candidate = points.map((p) => ({ ...p }));\n if (segment.horizontal) {\n candidate[segment.index].y += shift;\n candidate[segment.index + 1].y += shift;\n } else if (segment.vertical) {\n candidate[segment.index].x += shift;\n candidate[segment.index + 1].x += shift;\n } else {\n return void 0;\n }\n return segmentsFor2(segment.edge, candidate).length === candidate.length - 1 ? candidate : void 0;\n }, \"shiftedCandidate\");\n const nodeCenter = /* @__PURE__ */ __name((node, rect) => ({\n x: node.x ?? (rect.left + rect.right) / 2,\n y: node.y ?? (rect.top + rect.bottom) / 2\n }), \"nodeCenter\");\n const sourceDetourContextFor = /* @__PURE__ */ __name((segment) => {\n const edge = segment.edge;\n const points = dedupeConsecutivePoints(edge.points ?? []);\n if (points.length !== 4 || segment.index !== 1) {\n return void 0;\n }\n const sourceNode = edge.start ? nodeByIdMap.get(edge.start) : void 0;\n const targetNode = edge.end ? nodeByIdMap.get(edge.end) : void 0;\n const sourceRect = sourceNode ? rectOfNodeBounds(sourceNode) : void 0;\n const targetRect = targetNode ? rectOfNodeBounds(targetNode) : void 0;\n const tail = points.slice(segment.index + 2);\n if (!sourceNode || !targetNode || !sourceRect || !targetRect || tail.length === 0) {\n return void 0;\n }\n return {\n sourceCenter: nodeCenter(sourceNode, sourceRect),\n targetCenter: nodeCenter(targetNode, targetRect),\n sourceRect,\n tail\n };\n }, \"sourceDetourContextFor\");\n const verticalSourceDetour = /* @__PURE__ */ __name((segment, shift, sourceCenter, targetCenter, sourceRect, tail) => {\n const targetBelow = targetCenter.y >= sourceCenter.y;\n const sourcePortY = targetBelow ? sourceRect.bottom : sourceRect.top;\n const stubY = sourcePortY + (targetBelow ? SOURCE_DETOUR_STUB : -SOURCE_DETOUR_STUB);\n if (targetBelow && segment.b.y <= stubY + EPS_LOCAL2 || !targetBelow && segment.b.y >= stubY - EPS_LOCAL2) {\n return void 0;\n }\n const railX = segment.a.x + shift;\n return dedupeConsecutivePoints(\n [\n { x: sourceCenter.x, y: sourcePortY },\n { x: sourceCenter.x, y: stubY },\n { x: railX, y: stubY },\n { x: railX, y: segment.b.y },\n ...tail\n ],\n EPS_LOCAL2\n );\n }, \"verticalSourceDetour\");\n const horizontalSourceDetour = /* @__PURE__ */ __name((segment, shift, sourceCenter, targetCenter, sourceRect, tail) => {\n const targetRight = targetCenter.x >= sourceCenter.x;\n const sourcePortX = targetRight ? sourceRect.right : sourceRect.left;\n const stubX = sourcePortX + (targetRight ? SOURCE_DETOUR_STUB : -SOURCE_DETOUR_STUB);\n if (targetRight && segment.b.x <= stubX + EPS_LOCAL2 || !targetRight && segment.b.x >= stubX - EPS_LOCAL2) {\n return void 0;\n }\n const railY = segment.a.y + shift;\n return dedupeConsecutivePoints(\n [\n { x: sourcePortX, y: sourceCenter.y },\n { x: stubX, y: sourceCenter.y },\n { x: stubX, y: railY },\n { x: segment.b.x, y: railY },\n ...tail\n ],\n EPS_LOCAL2\n );\n }, \"horizontalSourceDetour\");\n const sourceDetourCandidate = /* @__PURE__ */ __name((segment, shift) => {\n const context = sourceDetourContextFor(segment);\n if (!context) {\n return void 0;\n }\n if (segment.vertical) {\n return verticalSourceDetour(\n segment,\n shift,\n context.sourceCenter,\n context.targetCenter,\n context.sourceRect,\n context.tail\n );\n }\n if (segment.horizontal) {\n return horizontalSourceDetour(\n segment,\n shift,\n context.sourceCenter,\n context.targetCenter,\n context.sourceRect,\n context.tail\n );\n }\n return void 0;\n }, \"sourceDetourCandidate\");\n const shifts = [\n -TRACK_SHIFT,\n TRACK_SHIFT,\n -2 * TRACK_SHIFT,\n 2 * TRACK_SHIFT,\n -3 * TRACK_SHIFT,\n 3 * TRACK_SHIFT\n ];\n for (let iteration = 0; iteration < MAX_ITERATIONS; iteration++) {\n const segments = allSegments();\n let fixed = false;\n for (let i = 0; i < segments.length && !fixed; i++) {\n for (let j = i + 1; j < segments.length && !fixed; j++) {\n const first = segments[i];\n const second = segments[j];\n if (first.edge === second.edge || !hasCrowdedParallelTrack(first, second)) {\n continue;\n }\n const candidates = [first, second].filter((segment) => segment.interior);\n for (const segment of candidates) {\n for (const shift of shifts) {\n const direct = shiftedCandidate(segment, shift);\n if (direct && candidateIsSafe(segment.edge, direct)) {\n segment.edge.points = direct;\n fixed = true;\n break;\n }\n const detoured = sourceDetourCandidate(segment, shift);\n if (detoured && candidateIsSafe(segment.edge, detoured)) {\n segment.edge.points = detoured;\n fixed = true;\n break;\n }\n }\n if (fixed) {\n break;\n }\n }\n }\n }\n if (!fixed) {\n return;\n }\n }\n}\n__name(nudgeSharedInteriorSubpaths, \"nudgeSharedInteriorSubpaths\");\n\n// src/rendering-util/layout-algorithms/swimlanes/direction/validation.ts\nfunction segmentsIntersect(p1, p2, p3, p4) {\n const d1x = p2.x - p1.x;\n const d1y = p2.y - p1.y;\n const d2x = p4.x - p3.x;\n const d2y = p4.y - p3.y;\n const cross = d1x * d2y - d1y * d2x;\n if (Math.abs(cross) < 1e-10) {\n return false;\n }\n const dx = p3.x - p1.x;\n const dy = p3.y - p1.y;\n const t = (dx * d2y - dy * d2x) / cross;\n const u = (dx * d1y - dy * d1x) / cross;\n const eps = 0.01;\n return t > eps && t < 1 - eps && u > eps && u < 1 - eps;\n}\n__name(segmentsIntersect, \"segmentsIntersect\");\nfunction validateSwimlanesLayout(layout) {\n const nodes = layout.nodes ?? [];\n const edges = layout.edges ?? [];\n const issues = [];\n if (!edges.length || !nodes.length) {\n return issues;\n }\n const nodeRects = collectLayoutNodeRects(nodes);\n const epsilon = 1;\n const edgeSegments = [];\n for (const edge of edges) {\n if (edge.isLayoutOnly) {\n continue;\n }\n const points = edge.points;\n if (!points || points.length < 2) {\n continue;\n }\n const edgeStart = edge.start;\n const edgeEnd = edge.end;\n const ownLabelId = edge.labelNodeId;\n const edgeId = edge.id ?? `${edgeStart}->${edgeEnd}`;\n for (const rect of nodeRects) {\n if (rect.nodeId === edgeStart || rect.nodeId === edgeEnd) {\n continue;\n }\n if (ownLabelId && rect.nodeId === ownLabelId) {\n continue;\n }\n for (let i = 0; i < points.length - 1; i++) {\n if (segmentBoundsOverlapRect(points[i], points[i + 1], rect, -epsilon)) {\n issues.push({\n type: \"edge-node-overlap\",\n edgeId,\n targetId: rect.nodeId,\n detail: `segment ${i} passes through node \"${rect.nodeId}\"`\n });\n break;\n }\n }\n }\n for (let i = 0; i < points.length - 1; i++) {\n edgeSegments.push({\n edgeId,\n start: edgeStart,\n end: edgeEnd,\n p1: points[i],\n p2: points[i + 1]\n });\n }\n }\n const crossingPairs = /* @__PURE__ */ new Set();\n for (let i = 0; i < edgeSegments.length; i++) {\n for (let j = i + 1; j < edgeSegments.length; j++) {\n const a = edgeSegments[i];\n const b = edgeSegments[j];\n if (a.edgeId === b.edgeId) {\n continue;\n }\n if (a.start === b.start || a.start === b.end || a.end === b.start || a.end === b.end) {\n continue;\n }\n if (segmentsIntersect(a.p1, a.p2, b.p1, b.p2)) {\n const pairKey2 = a.edgeId < b.edgeId ? `${a.edgeId}|${b.edgeId}` : `${b.edgeId}|${a.edgeId}`;\n if (!crossingPairs.has(pairKey2)) {\n crossingPairs.add(pairKey2);\n issues.push({\n type: \"edge-edge-crossing\",\n edgeId: a.edgeId,\n targetId: b.edgeId,\n detail: `edges \"${a.edgeId}\" and \"${b.edgeId}\" cross`\n });\n }\n }\n }\n }\n if (issues.length > 0) {\n const overlaps = issues.filter((i) => i.type === \"edge-node-overlap\").length;\n const crossings = issues.filter((i) => i.type === \"edge-edge-crossing\").length;\n log.warn(\n `[SWIMLANE_VALIDATE] ${issues.length} issue(s) detected: ${overlaps} edge-node overlap(s), ${crossings} edge crossing(s)`\n );\n for (const issue of issues) {\n log.warn(`[SWIMLANE_VALIDATE] ${issue.type}: ${issue.detail}`);\n }\n }\n return issues;\n}\n__name(validateSwimlanesLayout, \"validateSwimlanesLayout\");\n\n// src/rendering-util/layout-algorithms/swimlanes/postProcessing.ts\nfunction postProcessSwimlaneLayout(layout, direction) {\n const nodes = layout.nodes ?? [];\n const edges = layout.edges ?? [];\n const contentNodes = nodes.filter((n) => !n.isGroup);\n if ((direction === \"LR\" || direction === \"RL\") && contentNodes.length > 0 && !applyLrDirectionTransform(layout, direction)) {\n return;\n }\n if (direction === \"BT\" && contentNodes.length > 0 && !applyBtDirectionTransform(layout)) {\n return;\n }\n for (const edge of edges) {\n if (edge.isLayoutOnly) {\n continue;\n }\n const pts = edge.points;\n if (!pts || pts.length < 2) {\n continue;\n }\n edge.points = simplifyPolyline(\n orthogonalizePolyline(pts)\n );\n }\n simplifyDetouredEdges(edges, nodes);\n straightenCollinearSiblingDetours(edges, nodes);\n portSwapToLShape(edges, nodes);\n const nodeByIdMap = /* @__PURE__ */ new Map();\n for (const n of nodes) {\n nodeByIdMap.set(String(n.id), n);\n }\n anchorLabelsToPolyline(edges, nodeByIdMap);\n clipEdgeEndpointsToNodeBoundaries(edges, nodeByIdMap);\n collapseShortTerminalStub(edges, nodeByIdMap);\n nudgeSharedInteriorSubpaths(edges, nodeByIdMap);\n separateSharedRenderedTerminalLanes(edges, nodeByIdMap);\n collapseRedundantRectangularDoglegs(edges, nodeByIdMap);\n liftObstacleHuggingSameSideRails(edges, nodeByIdMap);\n swapDestinationTerminalTailsToReduceCrossings(edges, nodeByIdMap);\n const finalizeRenderedEdges = /* @__PURE__ */ __name(() => {\n resolveRenderedOrthogonalCrossings(edges, nodeByIdMap);\n reassignCrossingExternalRailChannels(edges, nodeByIdMap);\n shortcutRedundantOrthogonalJogs(edges, nodeByIdMap);\n anchorLabelsToPolyline(edges, nodeByIdMap);\n prepareEdgeEndpointsForRenderer(edges, nodeByIdMap);\n liftObstacleHuggingSameSideRails(edges, nodeByIdMap);\n anchorLabelsToPolyline(edges, nodeByIdMap);\n prepareEdgeEndpointsForRenderer(edges, nodeByIdMap);\n }, \"finalizeRenderedEdges\");\n finalizeRenderedEdges();\n nudgeSharedInteriorSubpaths(edges, nodeByIdMap);\n finalizeRenderedEdges();\n liftTopLaneTitleBandsAboveRails(edges, nodeByIdMap);\n shiftLeftLaneTitleBandsLeftOfRails(edges, nodeByIdMap);\n liftTopLaneTitleBandsAboveRails(edges, nodeByIdMap);\n shiftLeftLaneTitleBandsLeftOfRails(edges, nodeByIdMap);\n}\n__name(postProcessSwimlaneLayout, \"postProcessSwimlaneLayout\");\n\n// src/rendering-util/layout-algorithms/swimlanes/phase0.helpers.ts\nfunction normalizeGraph(g) {\n const nodeById = new Map(g.nodeById);\n const seen = /* @__PURE__ */ new Set();\n const edges = [];\n for (const e of g.edges) {\n if (!nodeById.has(e.src) || !nodeById.has(e.dst)) {\n continue;\n }\n const key = `${e.id}:${e.src}->${e.dst}`;\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n edges.push(e);\n }\n const nodes = [...nodeById.keys()];\n return { nodes, edges, layout: g.layout, nodeById };\n}\n__name(normalizeGraph, \"normalizeGraph\");\nfunction incoming(g, v) {\n return g.edges.filter((e) => e.dst === v);\n}\n__name(incoming, \"incoming\");\nfunction buildSuccessorMap(g) {\n const succs = /* @__PURE__ */ new Map();\n for (const v of g.nodes) {\n succs.set(v, []);\n }\n for (const e of g.edges) {\n succs.get(e.src).push(e.dst);\n }\n return succs;\n}\n__name(buildSuccessorMap, \"buildSuccessorMap\");\nfunction buildSortedSuccessorMap(g) {\n const succs = buildSuccessorMap(g);\n for (const successors of succs.values()) {\n successors.sort((a, b) => a.localeCompare(b));\n }\n return succs;\n}\n__name(buildSortedSuccessorMap, \"buildSortedSuccessorMap\");\nfunction buildInDegreeMap(g) {\n const indeg = /* @__PURE__ */ new Map();\n for (const v of g.nodes) {\n indeg.set(v, 0);\n }\n for (const e of g.edges) {\n indeg.set(e.dst, (indeg.get(e.dst) ?? 0) + 1);\n }\n return indeg;\n}\n__name(buildInDegreeMap, \"buildInDegreeMap\");\nfunction sortedZeroInDegreeNodes(indeg) {\n return [...indeg.entries()].filter(([, degree]) => degree === 0).map(([id]) => id).sort((a, b) => a.localeCompare(b));\n}\n__name(sortedZeroInDegreeNodes, \"sortedZeroInDegreeNodes\");\nfunction buildPredecessorSuccessorMaps(g, includeEdge = () => true) {\n const preds = /* @__PURE__ */ new Map();\n const succs = /* @__PURE__ */ new Map();\n for (const v of g.nodes) {\n preds.set(v, []);\n succs.set(v, []);\n }\n for (const e of g.edges) {\n if (!includeEdge(e)) {\n continue;\n }\n succs.get(e.src).push(e.dst);\n preds.get(e.dst).push(e.src);\n }\n return { preds, succs };\n}\n__name(buildPredecessorSuccessorMaps, \"buildPredecessorSuccessorMaps\");\nfunction buildLayersFromRanks(g, order, rankOf, opts) {\n let maxRank = 0;\n for (const v of g.nodes) {\n if (opts?.skipGroups && g.nodeById.get(v)?.isGroup) {\n continue;\n }\n maxRank = Math.max(maxRank, rankOf[v] ?? 0);\n }\n const layers = Array.from({ length: maxRank + 1 }, () => []);\n for (const v of order) {\n if (opts?.skipGroups && g.nodeById.get(v)?.isGroup) {\n continue;\n }\n layers[Math.max(0, rankOf[v] ?? 0)].push(v);\n }\n return layers;\n}\n__name(buildLayersFromRanks, \"buildLayersFromRanks\");\nfunction topoSortIfAcyclic(g) {\n const indeg = buildInDegreeMap(g);\n const queue = sortedZeroInDegreeNodes(indeg);\n const order = [];\n const adj = buildSortedSuccessorMap(g);\n while (queue.length) {\n const u = queue.shift();\n order.push(u);\n for (const v of adj.get(u) ?? []) {\n indeg.set(v, (indeg.get(v) ?? 0) - 1);\n if ((indeg.get(v) ?? 0) === 0) {\n let i = 0;\n while (i < queue.length && queue[i] < v) {\n i++;\n }\n queue.splice(i, 0, v);\n }\n }\n }\n return order.length === g.nodes.length ? order : null;\n}\n__name(topoSortIfAcyclic, \"topoSortIfAcyclic\");\nfunction buildLayerIndex(layer) {\n const m = /* @__PURE__ */ new Map();\n let index = 0;\n for (const id of layer) {\n m.set(id, index);\n index++;\n }\n return m;\n}\n__name(buildLayerIndex, \"buildLayerIndex\");\nfunction countInversions(values) {\n const tmp = new Array(values.length);\n const count = /* @__PURE__ */ __name((left, right) => {\n if (right - left <= 1) {\n return 0;\n }\n const mid = left + right >> 1;\n let inversions = count(left, mid) + count(mid, right);\n let i = left;\n let j = mid;\n let k = left;\n while (i < mid || j < right) {\n if (j >= right || i < mid && values[i] <= values[j]) {\n tmp[k++] = values[i++];\n } else {\n tmp[k++] = values[j++];\n inversions += mid - i;\n }\n }\n for (let t = left; t < right; t++) {\n values[t] = tmp[t];\n }\n return inversions;\n }, \"count\");\n return count(0, values.length);\n}\n__name(countInversions, \"countInversions\");\n\n// src/rendering-util/layout-algorithms/swimlanes/phase1.cycles.ts\nfunction removeCycles_DFS(g) {\n const gn = normalizeGraph(g);\n const adj = /* @__PURE__ */ new Map();\n for (const v of gn.nodes) {\n adj.set(v, []);\n }\n for (const e of gn.edges) {\n adj.get(e.src).push(e);\n }\n for (const arr of adj.values()) {\n arr.sort((a, b) => a.dst === b.dst ? a.id.localeCompare(b.id) : a.dst.localeCompare(b.dst));\n }\n const color = /* @__PURE__ */ Object.create(null);\n for (const v of gn.nodes) {\n color[v] = 0;\n }\n const reversed = [];\n const dfs = /* @__PURE__ */ __name((u) => {\n color[u] = 1;\n for (const e of adj.get(u) ?? []) {\n const v = e.dst;\n if (color[v] === 0) {\n dfs(v);\n } else if (color[v] === 1) {\n reversed.push(e);\n }\n }\n color[u] = 2;\n }, \"dfs\");\n const nodesSorted = [...gn.nodes].sort((a, b) => a.localeCompare(b));\n for (const v of nodesSorted) {\n if (color[v] === 0) {\n dfs(v);\n }\n }\n const toReverse = new Set(reversed.map((e) => `${e.id}:${e.src}->${e.dst}`));\n const acycEdges = gn.edges.map(\n (e) => toReverse.has(`${e.id}:${e.src}->${e.dst}`) ? { id: e.id, src: e.dst, dst: e.src, weight: e.weight, ref: e.ref } : e\n );\n const acyclic = {\n nodes: [...gn.nodes],\n edges: acycEdges,\n layout: gn.layout,\n nodeById: new Map(gn.nodeById)\n };\n return { acyclic, reversed };\n}\n__name(removeCycles_DFS, \"removeCycles_DFS\");\n\n// src/rendering-util/layout-algorithms/swimlanes/phase2.options.ts\nfunction buildTopLaneMap(g) {\n const cache = /* @__PURE__ */ new Map();\n const resolve = /* @__PURE__ */ __name((id) => {\n if (cache.has(id)) {\n return cache.get(id);\n }\n const node = g.nodeById.get(id);\n if (!node) {\n cache.set(id, null);\n return null;\n }\n const parentId = node.parentId;\n if (!parentId) {\n cache.set(id, null);\n return null;\n }\n const parentLane = resolve(parentId);\n const lane = parentLane ?? parentId;\n cache.set(id, lane);\n return lane;\n }, \"resolve\");\n for (const id of g.nodes) {\n resolve(id);\n }\n return cache;\n}\n__name(buildTopLaneMap, \"buildTopLaneMap\");\nfunction createTopLaneResolver(g) {\n const topLaneMap = buildTopLaneMap(g);\n return (id) => topLaneMap.get(id) ?? null;\n}\n__name(createTopLaneResolver, \"createTopLaneResolver\");\nfunction buildTopLaneOrder(g) {\n const lanes = [];\n for (const node of g.layout.nodes ?? []) {\n if (node.isGroup && !node.parentId) {\n lanes.push(node.id);\n }\n }\n return [...new Set(lanes)].reverse();\n}\n__name(buildTopLaneOrder, \"buildTopLaneOrder\");\nfunction resolveTopLaneOrder(g, preferredOrder) {\n const sourceOrder = buildTopLaneOrder(g);\n if (!preferredOrder || preferredOrder.length === 0) {\n return sourceOrder;\n }\n const sourceLaneIds = new Set(sourceOrder);\n const seen = /* @__PURE__ */ new Set();\n const resolved = [];\n for (const laneId of preferredOrder) {\n if (!sourceLaneIds.has(laneId) || seen.has(laneId)) {\n continue;\n }\n seen.add(laneId);\n resolved.push(laneId);\n }\n for (const laneId of sourceOrder) {\n if (seen.has(laneId)) {\n continue;\n }\n resolved.push(laneId);\n }\n return resolved;\n}\n__name(resolveTopLaneOrder, \"resolveTopLaneOrder\");\n\n// src/rendering-util/layout-algorithms/swimlanes/config.ts\nvar PRECISION = {\n /** Epsilon for floating-point comparisons */\n EPSILON: 1e-6\n};\nvar LAYERING = {\n /** Default number of iterations for gravity-based layering */\n GRAVITY_ITERATIONS: 8,\n /** Maximum number of passes for crossing-based rank optimization */\n MAX_CROSSING_OPTIMIZATION_PASSES: 4,\n /** Whether to compact single-input nodes by default */\n DEFAULT_COMPACT_SINGLE_INPUT: true\n};\nvar COORDINATES = {\n /** Default vertical gap between layers (px) */\n DEFAULT_LAYER_GAP: 100,\n /** Default horizontal gap between nodes (px) */\n DEFAULT_NODE_GAP: 40\n};\n\n// src/rendering-util/layout-algorithms/swimlanes/driving-tree.ts\nfunction buildDrivingTree(graph, opts) {\n const g = normalizeGraph(graph);\n const laneOf = opts?.laneOf ?? (() => null);\n const rankHint = opts?.rankHint;\n const { preds } = buildPredecessorSuccessorMaps(g);\n for (const arr of preds.values()) {\n arr.sort((a, b) => a.localeCompare(b));\n }\n const topoOrder = topoSortIfAcyclic(g) ?? [...g.nodes].sort((a, b) => a.localeCompare(b));\n const topoIndex = /* @__PURE__ */ new Map();\n for (const [idx, id] of topoOrder.entries()) {\n topoIndex.set(id, idx);\n }\n const parent = /* @__PURE__ */ new Map();\n const children = /* @__PURE__ */ new Map();\n for (const node of g.nodes) {\n children.set(node, []);\n }\n for (const node of topoOrder) {\n const candidates = (preds.get(node) ?? []).filter((p) => parent.has(p));\n if (candidates.length > 0) {\n const chosen = chooseParent(node, candidates, {\n laneOf,\n rankHint,\n topoIndex\n });\n parent.set(node, chosen);\n children.get(chosen).push(node);\n } else if (!parent.has(node)) {\n parent.set(node, null);\n }\n }\n for (const node of g.nodes) {\n if (!parent.has(node)) {\n parent.set(node, null);\n }\n }\n const rootSet = /* @__PURE__ */ new Set();\n for (const node of g.nodes) {\n if ((parent.get(node) ?? null) === null) {\n rootSet.add(node);\n }\n }\n const roots = [...rootSet].sort((a, b) => {\n const ta = topoIndex.get(a) ?? 0;\n const tb = topoIndex.get(b) ?? 0;\n if (ta === tb) {\n return a.localeCompare(b);\n }\n return ta - tb;\n });\n const adjacency = buildAdjacency(g);\n const adjacencyList = /* @__PURE__ */ new Map();\n for (const [node, set] of adjacency.entries()) {\n adjacencyList.set(\n node,\n [...set].sort((a, b) => a.localeCompare(b))\n );\n }\n const componentOf = assignComponents(adjacencyList);\n const blocks = computeBlocks(adjacencyList);\n const nodeBlocks = /* @__PURE__ */ new Map();\n for (const node of g.nodes) {\n nodeBlocks.set(node, []);\n }\n for (const block of blocks) {\n for (const node of block.nodes) {\n const list = nodeBlocks.get(node);\n if (list) {\n list.push(block.id);\n } else {\n nodeBlocks.set(node, [block.id]);\n }\n }\n }\n const preorder = [];\n const postorder = [];\n const seen = /* @__PURE__ */ new Set();\n const walk = /* @__PURE__ */ __name((node) => {\n if (seen.has(node)) {\n return;\n }\n seen.add(node);\n preorder.push(node);\n for (const child of children.get(node) ?? []) {\n walk(child);\n }\n postorder.push(node);\n }, \"walk\");\n for (const root of roots) {\n walk(root);\n }\n for (const node of topoOrder) {\n walk(node);\n }\n return {\n parent,\n children,\n roots,\n componentOf,\n blocks,\n nodeBlocks,\n adjacency: adjacencyList,\n preorder,\n postorder,\n topologicalOrder: topoOrder\n };\n}\n__name(buildDrivingTree, \"buildDrivingTree\");\nfunction chooseParent(node, candidates, ctx) {\n const laneNode = ctx.laneOf(node);\n const sorted = [...candidates].sort((a, b) => {\n const laneA = ctx.laneOf(a);\n const laneB = ctx.laneOf(b);\n const sameLaneA = laneA != null && laneA === laneNode;\n const sameLaneB = laneB != null && laneB === laneNode;\n if (sameLaneA !== sameLaneB) {\n return sameLaneA ? -1 : 1;\n }\n const rankA = ctx.rankHint?.[a];\n const rankB = ctx.rankHint?.[b];\n if (rankA != null && rankB != null && rankA !== rankB) {\n return rankB - rankA;\n }\n const idxA = ctx.topoIndex.get(a) ?? 0;\n const idxB = ctx.topoIndex.get(b) ?? 0;\n if (idxA !== idxB) {\n return idxA - idxB;\n }\n return a.localeCompare(b);\n });\n return sorted[0];\n}\n__name(chooseParent, \"chooseParent\");\nfunction buildAdjacency(g) {\n const adjacency = /* @__PURE__ */ new Map();\n for (const node of g.nodes) {\n adjacency.set(node, /* @__PURE__ */ new Set());\n }\n for (const e of g.edges) {\n adjacency.get(e.src).add(e.dst);\n adjacency.get(e.dst).add(e.src);\n }\n return adjacency;\n}\n__name(buildAdjacency, \"buildAdjacency\");\nfunction assignComponents(adjacency) {\n const componentOf = /* @__PURE__ */ new Map();\n let componentId = 0;\n for (const node of adjacency.keys()) {\n if (componentOf.has(node)) {\n continue;\n }\n const stack = [node];\n while (stack.length > 0) {\n const cur = stack.pop();\n if (componentOf.has(cur)) {\n continue;\n }\n componentOf.set(cur, componentId);\n for (const next of adjacency.get(cur) ?? []) {\n if (!componentOf.has(next)) {\n stack.push(next);\n }\n }\n }\n componentId++;\n }\n return componentOf;\n}\n__name(assignComponents, \"assignComponents\");\nfunction computeBlocks(adjacency) {\n const discovery = /* @__PURE__ */ new Map();\n const low = /* @__PURE__ */ new Map();\n const edgeStack = [];\n const blocks = [];\n let time = 0;\n const visit = /* @__PURE__ */ __name((node, parent) => {\n discovery.set(node, ++time);\n low.set(node, time);\n for (const next of adjacency.get(node) ?? []) {\n if (next === parent) {\n continue;\n }\n if (!discovery.has(next)) {\n edgeStack.push([node, next]);\n visit(next, node);\n low.set(node, Math.min(low.get(node) ?? time, low.get(next) ?? time));\n if ((low.get(next) ?? 0) >= (discovery.get(node) ?? 0)) {\n blocks.push(popBlock(node, next, edgeStack, blocks.length));\n }\n } else if ((discovery.get(next) ?? 0) < (discovery.get(node) ?? 0)) {\n edgeStack.push([node, next]);\n low.set(node, Math.min(low.get(node) ?? time, discovery.get(next) ?? time));\n }\n }\n }, \"visit\");\n for (const node of adjacency.keys()) {\n if (!discovery.has(node)) {\n visit(node, null);\n }\n }\n return blocks;\n}\n__name(computeBlocks, \"computeBlocks\");\nfunction popBlock(u, v, stack, id) {\n const edges = [];\n const nodes = /* @__PURE__ */ new Set();\n while (stack.length > 0) {\n const edge = stack.pop();\n edges.push(edge);\n nodes.add(edge[0]);\n nodes.add(edge[1]);\n if (edge[0] === u && edge[1] === v || edge[0] === v && edge[1] === u) {\n break;\n }\n }\n return { id, edges, nodes: [...nodes] };\n}\n__name(popBlock, \"popBlock\");\n\n// src/rendering-util/layout-algorithms/swimlanes/phase2.crossCounts.ts\nfunction computeSubtreeCrossCounts(g, rankOf, tree) {\n const nodes = [...g.nodes];\n const indexOf = /* @__PURE__ */ new Map();\n for (const [i, node] of nodes.entries()) {\n indexOf.set(node, i);\n }\n const n = nodes.length;\n const parentIdx = new Array(n).fill(-1);\n const depth = new Array(n).fill(0);\n const queue = [];\n const seen = /* @__PURE__ */ new Set();\n for (const node of nodes) {\n const parentId = tree.parent.get(node) ?? null;\n const idx = indexOf.get(node);\n if (idx == null) {\n continue;\n }\n if (parentId == null) {\n parentIdx[idx] = -1;\n depth[idx] = 0;\n if (!seen.has(node)) {\n seen.add(node);\n queue.push(node);\n }\n }\n }\n while (queue.length > 0) {\n const current = queue.shift();\n const currentIdx = indexOf.get(current);\n if (currentIdx == null) {\n continue;\n }\n const childList = tree.children.get(current) ?? [];\n for (const child of childList) {\n if (seen.has(child)) {\n continue;\n }\n const childIdx = indexOf.get(child);\n if (childIdx == null) {\n continue;\n }\n parentIdx[childIdx] = currentIdx;\n depth[childIdx] = depth[currentIdx] + 1;\n seen.add(child);\n queue.push(child);\n }\n }\n for (const node of nodes) {\n if (seen.has(node)) {\n continue;\n }\n const idx = indexOf.get(node);\n if (idx == null) {\n continue;\n }\n parentIdx[idx] = -1;\n depth[idx] = 0;\n seen.add(node);\n }\n const maxLog = Math.max(1, Math.ceil(Math.log2(Math.max(1, n))) + 1);\n const up = Array.from({ length: maxLog }, () => new Array(n).fill(-1));\n for (let i = 0; i < n; i++) {\n up[0][i] = parentIdx[i];\n }\n for (let k = 1; k < maxLog; k++) {\n for (let i = 0; i < n; i++) {\n const prev = up[k - 1][i];\n up[k][i] = prev === -1 ? -1 : up[k - 1][prev];\n }\n }\n const lcaIndex = /* @__PURE__ */ __name((aIdx, bIdx) => {\n if (aIdx === -1 || bIdx === -1) {\n return -1;\n }\n if (depth[aIdx] < depth[bIdx]) {\n [aIdx, bIdx] = [bIdx, aIdx];\n }\n const diff = depth[aIdx] - depth[bIdx];\n for (let k = 0; k < maxLog; k++) {\n if (diff >> k & 1) {\n aIdx = up[k][aIdx];\n if (aIdx === -1) {\n return -1;\n }\n }\n }\n if (aIdx === bIdx) {\n return aIdx;\n }\n for (let k = maxLog - 1; k >= 0; k--) {\n const upA = up[k][aIdx];\n const upB = up[k][bIdx];\n if (upA === -1 || upB === -1) {\n continue;\n }\n if (upA !== upB) {\n aIdx = upA;\n bIdx = upB;\n }\n }\n return up[0][aIdx];\n }, \"lcaIndex\");\n const ownCounts = Array.from({ length: n }, () => /* @__PURE__ */ new Map());\n for (const edge of g.edges) {\n let src = edge.src;\n let dst = edge.dst;\n let ru = rankOf[src];\n let rv = rankOf[dst];\n if (ru == null || rv == null) {\n continue;\n }\n if (ru > rv) {\n [src, dst] = [dst, src];\n [ru, rv] = [rv, ru];\n }\n if (ru == null || rv == null || ru === rv) {\n continue;\n }\n const upperIdx = indexOf.get(src);\n const lowerIdx = indexOf.get(dst);\n if (upperIdx == null || lowerIdx == null) {\n continue;\n }\n const lca = lcaIndex(upperIdx, lowerIdx);\n if (lca === -1) {\n continue;\n }\n const bucket = ownCounts[lca];\n for (let layer = ru; layer < rv; layer++) {\n bucket.set(layer, (bucket.get(layer) ?? 0) + 1);\n }\n }\n const crossCounts = /* @__PURE__ */ new Map();\n const mergeInto = /* @__PURE__ */ __name((target, source) => {\n if (source.size === 0) {\n return;\n }\n for (const [layer, value] of source) {\n target.set(layer, (target.get(layer) ?? 0) + value);\n }\n }, \"mergeInto\");\n const visited = /* @__PURE__ */ new Set();\n const dfs = /* @__PURE__ */ __name((node) => {\n const idx = indexOf.get(node);\n visited.add(node);\n const base = idx == null ? void 0 : ownCounts[idx];\n const accumulator = base ? new Map(base) : /* @__PURE__ */ new Map();\n const childList = tree.children.get(node) ?? [];\n for (const child of childList) {\n const childMap = dfs(child);\n const parentLayer = rankOf[node];\n if (parentLayer != null) {\n let map = crossCounts.get(node);\n if (!map) {\n map = /* @__PURE__ */ new Map();\n crossCounts.set(node, map);\n }\n let value = childMap.get(parentLayer) ?? 0;\n const childLayer = rankOf[child];\n if (childLayer != null && childLayer > parentLayer) {\n value += 1;\n }\n map.set(child, value);\n }\n mergeInto(accumulator, childMap);\n }\n return accumulator;\n }, \"dfs\");\n for (const root of tree.roots) {\n if (!visited.has(root)) {\n dfs(root);\n }\n }\n for (const node of nodes) {\n if (!visited.has(node)) {\n dfs(node);\n }\n }\n return crossCounts;\n}\n__name(computeSubtreeCrossCounts, \"computeSubtreeCrossCounts\");\n\n// src/rendering-util/layout-algorithms/swimlanes/phase2.multitree.core.ts\nfunction annotateMinimumLayers(nodes, children, rankOf) {\n const minLayer = /* @__PURE__ */ new Map();\n const annotate = /* @__PURE__ */ __name((node) => {\n let minL = rankOf[node] ?? 0;\n const childList = [...children.get(node) ?? []];\n childList.sort(compareByRankThenId(rankOf));\n for (const child of childList) {\n annotate(child);\n const childMin = minLayer.get(child);\n if (childMin != null) {\n minL = Math.min(minL, childMin);\n }\n }\n minLayer.set(node, minL);\n }, \"annotate\");\n for (const node of nodes) {\n annotate(node);\n }\n return minLayer;\n}\n__name(annotateMinimumLayers, \"annotateMinimumLayers\");\nfunction compareByRankThenId(rankOf) {\n return (a, b) => {\n const ra = rankOf[a] ?? 0;\n const rb = rankOf[b] ?? 0;\n return ra === rb ? a.localeCompare(b) : ra - rb;\n };\n}\n__name(compareByRankThenId, \"compareByRankThenId\");\nfunction emitNodesInTreeOrder(roots, allNodes, rankOf, orderChildren) {\n let maxRank = 0;\n for (const node of allNodes) {\n const r = rankOf[node] ?? 0;\n if (r > maxRank) {\n maxRank = r;\n }\n }\n const layers = Array.from({ length: maxRank + 1 }, () => []);\n const emitted = /* @__PURE__ */ new Set();\n const emit = /* @__PURE__ */ __name((node) => {\n if (emitted.has(node)) {\n return;\n }\n emitted.add(node);\n const layer = rankOf[node] ?? 0;\n if (!layers[layer]) {\n layers[layer] = [];\n }\n layers[layer].push(node);\n for (const child of orderChildren(node)) {\n emit(child);\n }\n }, \"emit\");\n for (const root of roots) {\n emit(root);\n }\n for (const node of allNodes) {\n if (!emitted.has(node)) {\n const layer = rankOf[node] ?? 0;\n if (!layers[layer]) {\n layers[layer] = [];\n }\n layers[layer].push(node);\n emitted.add(node);\n }\n }\n return layers;\n}\n__name(emitNodesInTreeOrder, \"emitNodesInTreeOrder\");\nfunction deduplicateLayers(layers) {\n const result = [];\n for (const layer of layers) {\n const seen = /* @__PURE__ */ new Set();\n const deduped = [];\n for (const id of layer) {\n if (seen.has(id)) {\n continue;\n }\n seen.add(id);\n deduped.push(id);\n }\n result.push(deduped);\n }\n return result;\n}\n__name(deduplicateLayers, \"deduplicateLayers\");\n\n// src/rendering-util/layout-algorithms/swimlanes/phase2.multitree.order.ts\nfunction createChildOrderer(children, rankOf, crossCounts, minLayer) {\n return (node) => {\n const raw = children.get(node) ?? [];\n if (raw.length === 0) {\n return [];\n }\n const layer = rankOf[node] ?? 0;\n const future = [];\n const present = [];\n const crossMap = crossCounts.get(node);\n for (const child of raw) {\n const minL = minLayer.get(child) ?? layer;\n if (minL > layer) {\n future.push({ child, min: minL });\n } else {\n present.push(child);\n }\n }\n future.sort((a, b) => {\n if (a.min === b.min) {\n return a.child.localeCompare(b.child);\n }\n return a.min - b.min;\n });\n present.sort((a, b) => {\n const ca = crossMap?.get(a) ?? 0;\n const cb = crossMap?.get(b) ?? 0;\n if (ca !== cb) {\n return ca - cb;\n }\n const ma = minLayer.get(a) ?? layer;\n const mb = minLayer.get(b) ?? layer;\n if (ma !== mb) {\n return ma - mb;\n }\n return a.localeCompare(b);\n });\n return [...future.map((item) => item.child), ...present];\n };\n}\n__name(createChildOrderer, \"createChildOrderer\");\nfunction buildMultitreeLayerOrder(g, rankOf, laneOf) {\n const tree = buildDrivingTree(g, {\n rankHint: rankOf,\n laneOf\n });\n const { children, roots } = tree;\n for (const node of g.nodes) {\n if (!children.has(node)) {\n children.set(node, []);\n }\n }\n const crossCounts = computeSubtreeCrossCounts(g, rankOf, tree);\n const rootsSorted = [...roots].sort(compareByRankThenId(rankOf));\n const minLayer = annotateMinimumLayers(rootsSorted, children, rankOf);\n const orderChildren = createChildOrderer(children, rankOf, crossCounts, minLayer);\n let layers = emitNodesInTreeOrder(rootsSorted, g.nodes, rankOf, orderChildren);\n layers = deduplicateLayers(layers);\n return layers;\n}\n__name(buildMultitreeLayerOrder, \"buildMultitreeLayerOrder\");\n\n// src/rendering-util/layout-algorithms/swimlanes/phase2.crossOptimization.ts\nfunction countCrossingsBetweenAdjacent(upper, lower, edges) {\n const upperSet = new Set(upper);\n const lowerSet = new Set(lower);\n const li = buildLayerIndex(lower);\n const vs = [];\n for (const e of edges) {\n if (upperSet.has(e.src) && lowerSet.has(e.dst)) {\n vs.push(li.get(e.dst));\n }\n }\n return countInversions(vs);\n}\n__name(countCrossingsBetweenAdjacent, \"countCrossingsBetweenAdjacent\");\nfunction totalCrossings(layers, edges, rankOf) {\n const expanded = [];\n for (const e of edges) {\n const ru = rankOf[e.src];\n const rv = rankOf[e.dst];\n if (ru == null || rv == null || ru === rv) {\n continue;\n }\n let upper = e.src;\n let lower = e.dst;\n let rUpper = ru;\n let rLower = rv;\n if (ru > rv) {\n upper = e.dst;\n lower = e.src;\n rUpper = rv;\n rLower = ru;\n }\n for (let L = rUpper; L < rLower; L++) {\n expanded.push({ id: `${e.id}@${L}`, src: upper, dst: lower, ref: e.ref });\n }\n }\n let sum = 0;\n for (let i = 0; i + 1 < layers.length; i++) {\n sum += countCrossingsBetweenAdjacent(layers[i], layers[i + 1], expanded);\n }\n return sum;\n}\n__name(totalCrossings, \"totalCrossings\");\nfunction optimizeRanksByCrossings(g, initialRank) {\n const rankOf = { ...initialRank };\n const { preds } = buildPredecessorSuccessorMaps(g);\n const laneOf = createTopLaneResolver(g);\n const layers = buildMultitreeLayerOrder(g, rankOf, laneOf);\n let best = totalCrossings(layers, g.edges, rankOf);\n const maxPasses = LAYERING.MAX_CROSSING_OPTIMIZATION_PASSES;\n for (let pass = 0; pass < maxPasses; pass++) {\n let changed = false;\n const nodesByRank = [...g.nodes].sort((a, b) => (rankOf[b] ?? 0) - (rankOf[a] ?? 0));\n for (const v of nodesByRank) {\n const r = rankOf[v] ?? 0;\n if (r === 0) {\n continue;\n }\n let lb = 0;\n for (const u of preds.get(v) ?? []) {\n lb = Math.max(lb, (rankOf[u] ?? 0) + 1);\n }\n if (lb >= r) {\n continue;\n }\n const old = r;\n rankOf[v] = lb;\n const trialLayers = buildMultitreeLayerOrder(g, rankOf, laneOf);\n const score = totalCrossings(trialLayers, g.edges, rankOf);\n if (score < best) {\n best = score;\n changed = true;\n } else {\n rankOf[v] = old;\n }\n }\n if (!changed) {\n break;\n }\n }\n return rankOf;\n}\n__name(optimizeRanksByCrossings, \"optimizeRanksByCrossings\");\n\n// src/rendering-util/layout-algorithms/swimlanes/phase2.crossLaneAdjust.ts\nfunction adjustCrossLaneSources(g, rankOf) {\n const topLaneOf = createTopLaneResolver(g);\n const nodesByRank = [...g.nodes].sort(\n (a, b) => (rankOf[a] ?? 0) - (rankOf[b] ?? 0) || a.localeCompare(b)\n );\n for (const v of nodesByRank) {\n const laneV = topLaneOf(v);\n if (!laneV) {\n continue;\n }\n const outEdges = g.edges.filter((e) => e.src === v);\n if (outEdges.length === 0) {\n continue;\n }\n let hasSameLaneSucc = false;\n let crossLaneCount = 0;\n for (const e of outEdges) {\n const laneDst = topLaneOf(e.dst);\n if (laneDst == null || laneDst === laneV) {\n hasSameLaneSucc = true;\n } else {\n crossLaneCount++;\n }\n }\n if (crossLaneCount === 0 || hasSameLaneSucc) {\n continue;\n }\n let crossLaneIncoming = 0;\n let hasSameLanePred = false;\n for (const e of g.edges) {\n if (e.dst !== v) {\n continue;\n }\n const laneSrc = topLaneOf(e.src);\n if (!laneSrc) {\n continue;\n }\n if (laneSrc === laneV) {\n hasSameLanePred = true;\n } else {\n crossLaneIncoming++;\n }\n }\n if (crossLaneIncoming > 0 || !hasSameLanePred) {\n continue;\n }\n const current = rankOf[v] ?? 0;\n const target = current + crossLaneCount;\n let lb = 0;\n for (const e of g.edges) {\n if (e.dst === v) {\n lb = Math.max(lb, (rankOf[e.src] ?? 0) + 1);\n }\n }\n const newRank = Math.max(current, lb, target);\n if (newRank !== current) {\n rankOf[v] = newRank;\n }\n }\n}\n__name(adjustCrossLaneSources, \"adjustCrossLaneSources\");\n\n// src/rendering-util/layout-algorithms/swimlanes/phase2.longestPath.ts\nfunction assignLayers_LongestPath(gAcyclic, opts) {\n const g = normalizeGraph(gAcyclic);\n const order = topoSortIfAcyclic(g) ?? [...g.nodes].sort();\n const compact = opts?.compactSingleInput ?? false;\n const topLaneOf = createTopLaneResolver(g);\n let rankOf = /* @__PURE__ */ Object.create(null);\n for (const v of order) {\n const incAll = incoming(g, v);\n const inc = opts?.ignoreCrossLaneEdges ? incAll.filter((e) => {\n const laneSrc = topLaneOf(e.src);\n const laneDst = topLaneOf(v);\n if (!laneSrc || !laneDst) {\n return true;\n }\n return laneSrc === laneDst;\n }) : incAll;\n if (inc.length === 0) {\n rankOf[v] = 0;\n } else if (compact && inc.length === 1) {\n const u = inc[0].src;\n const laneU = topLaneOf(u);\n const laneV = topLaneOf(v);\n if (laneU !== laneV) {\n rankOf[v] = rankOf[u] ?? 0;\n } else {\n rankOf[v] = (rankOf[u] ?? 0) + 1;\n }\n } else {\n let mx = -Infinity;\n for (const e of inc) {\n mx = Math.max(mx, (rankOf[e.src] ?? 0) + 1);\n }\n rankOf[v] = mx === -Infinity ? 0 : mx;\n }\n }\n if (opts?.optimizeRanksByCrossings ?? false) {\n rankOf = optimizeRanksByCrossings(g, rankOf);\n }\n if (opts?.ignoreCrossLaneEdges) {\n adjustCrossLaneSources(g, rankOf);\n }\n const layers = buildMultitreeLayerOrder(g, rankOf, topLaneOf);\n return { layers, rankOf, dummy: /* @__PURE__ */ new Set() };\n}\n__name(assignLayers_LongestPath, \"assignLayers_LongestPath\");\n\n// src/rendering-util/layout-algorithms/swimlanes/phase2.gravity.ts\nfunction assignLayers_Gravity(gAcyclic, opts) {\n const g = normalizeGraph(gAcyclic);\n const base = assignLayers_LongestPath(g, {\n compactSingleInput: opts?.compactSingleInput,\n ignoreCrossLaneEdges: opts?.ignoreCrossLaneEdges,\n optimizeRanksByCrossings: opts?.optimizeRanksByCrossings\n });\n const rankOf = { ...base.rankOf };\n const topLaneOf = createTopLaneResolver(g);\n const { preds, succs } = buildPredecessorSuccessorMaps(g, (e) => {\n if (opts?.ignoreCrossLaneEdges) {\n const laneSrc = topLaneOf(e.src);\n const laneDst = topLaneOf(e.dst);\n if (laneSrc && laneDst && laneSrc !== laneDst) {\n return false;\n }\n }\n return true;\n });\n const order = topoSortIfAcyclic(g) ?? [...g.nodes];\n const revOrder = [...order].reverse();\n const clampFeasible = /* @__PURE__ */ __name((v, desired) => {\n let lb = 0;\n for (const u of preds.get(v) ?? []) {\n lb = Math.max(lb, (rankOf[u] ?? 0) + 1);\n }\n let ub = Number.POSITIVE_INFINITY;\n const s = succs.get(v) ?? [];\n if (s.length > 0) {\n ub = Math.min(...s.map((w) => (rankOf[w] ?? 0) - 1));\n }\n if (!Number.isFinite(ub)) {\n ub = Math.max(lb, desired);\n }\n return Math.min(Math.max(desired, lb), ub);\n }, \"clampFeasible\");\n const iters = LAYERING.GRAVITY_ITERATIONS;\n const relaxOrder = /* @__PURE__ */ __name((nodeOrder) => {\n let changed = false;\n for (const v of nodeOrder) {\n const ps = preds.get(v) ?? [];\n const ss = succs.get(v) ?? [];\n if (ps.length === 0 && ss.length === 0) {\n continue;\n }\n const predAvg = ps.length > 0 ? ps.reduce((a, u) => a + (rankOf[u] ?? 0) + 1, 0) / ps.length : rankOf[v] ?? 0;\n const succAvg = ss.length > 0 ? ss.reduce((a, w) => a + (rankOf[w] ?? 0) - 1, 0) / ss.length : rankOf[v] ?? 0;\n const desired = Math.round((predAvg + succAvg) / 2);\n const clamped = clampFeasible(v, desired);\n if (clamped !== rankOf[v]) {\n rankOf[v] = clamped;\n changed = true;\n }\n }\n return changed;\n }, \"relaxOrder\");\n for (let it = 0; it < iters; it++) {\n const forwardChanged = relaxOrder(order);\n const backwardChanged = relaxOrder(revOrder);\n if (!forwardChanged && !backwardChanged) {\n break;\n }\n }\n for (const v of order) {\n let lb = 0;\n for (const u of preds.get(v) ?? []) {\n lb = Math.max(lb, (rankOf[u] ?? 0) + 1);\n }\n if ((rankOf[v] ?? 0) < lb) {\n rankOf[v] = lb;\n }\n }\n for (const v of revOrder) {\n const s = succs.get(v) ?? [];\n if (s.length > 0) {\n const ub = Math.min(...s.map((w) => (rankOf[w] ?? 0) - 1));\n if ((rankOf[v] ?? 0) > ub) {\n rankOf[v] = ub;\n }\n }\n }\n const layers = buildLayersFromRanks(g, order, rankOf);\n return { layers, rankOf, dummy: /* @__PURE__ */ new Set() };\n}\n__name(assignLayers_Gravity, \"assignLayers_Gravity\");\n\n// src/rendering-util/layout-algorithms/swimlanes/phase2.laneAwareCompact.ts\nfunction topoSortByGenerationIfAcyclic(g) {\n const indeg = buildInDegreeMap(g);\n const adj = buildSortedSuccessorMap(g);\n let frontier = sortedZeroInDegreeNodes(indeg);\n const order = [];\n while (frontier.length > 0) {\n const nextFrontier = [];\n for (const u of frontier) {\n order.push(u);\n for (const v of adj.get(u) ?? []) {\n indeg.set(v, (indeg.get(v) ?? 0) - 1);\n if ((indeg.get(v) ?? 0) === 0) {\n nextFrontier.push(v);\n }\n }\n }\n frontier = nextFrontier.sort((a, b) => a.localeCompare(b));\n }\n return order.length === g.nodes.length ? order : null;\n}\n__name(topoSortByGenerationIfAcyclic, \"topoSortByGenerationIfAcyclic\");\nfunction assignLayers_LaneAwareCompact(gAcyclic, opts) {\n const g = normalizeGraph(gAcyclic);\n const order = opts?.direction === \"LR\" ? topoSortByGenerationIfAcyclic(g) ?? [...g.nodes].sort() : topoSortIfAcyclic(g) ?? [...g.nodes].sort();\n const topLaneOf = createTopLaneResolver(g);\n const laneOf = /* @__PURE__ */ __name((id) => topLaneOf(id) ?? id, \"laneOf\");\n const rankOf = /* @__PURE__ */ Object.create(null);\n const nextFree = /* @__PURE__ */ new Map();\n const edgeWeight = /* @__PURE__ */ __name((u, v) => {\n const ignoreCrossLane = opts?.ignoreCrossLaneEdges ?? true;\n if (ignoreCrossLane) {\n return laneOf(u) === laneOf(v) ? 1 : 0;\n }\n return 1;\n }, \"edgeWeight\");\n for (const v of order) {\n const node = g.nodeById.get(v);\n if (node?.isGroup) {\n continue;\n }\n const preds = incoming(g, v);\n let base = 0;\n if (preds.length > 0) {\n for (const e of preds) {\n const u = e.src;\n const ru = rankOf[u] ?? 0;\n base = Math.max(base, ru + edgeWeight(u, v));\n }\n }\n const lane = laneOf(v);\n const nf = nextFree.get(lane) ?? 0;\n const L = Math.max(base, nf);\n rankOf[v] = L;\n nextFree.set(lane, L + 1);\n }\n const layers = buildLayersFromRanks(g, order, rankOf, { skipGroups: true });\n return { layers, rankOf, dummy: /* @__PURE__ */ new Set() };\n}\n__name(assignLayers_LaneAwareCompact, \"assignLayers_LaneAwareCompact\");\n\n// src/rendering-util/layout-algorithms/swimlanes/phase2.dummies.ts\nfunction makeProperLayering(layering, gAcyclic) {\n const g = normalizeGraph(gAcyclic);\n const { rankOf } = layering;\n const layers = layering.layers.map((l) => [...l]);\n const dummy = new Set(layering.dummy ? [...layering.dummy] : []);\n let dummySeq = 0;\n const nodeById = new Map(g.nodeById);\n const addDummyAt = /* @__PURE__ */ __name((L) => {\n const id = `placeholder-${dummySeq++}`;\n const dn = { id, isGroup: false, isDummy: true, width: 0, height: 0 };\n nodeById.set(id, dn);\n dummy.add(id);\n while (layers.length <= L) {\n layers.push([]);\n }\n layers[L].push(id);\n rankOf[id] = L;\n return id;\n }, \"addDummyAt\");\n const edgesSorted = [...g.edges].sort(\n (a, b) => a.id === b.id ? a.src === b.src ? a.dst.localeCompare(b.dst) : a.src.localeCompare(b.src) : a.id.localeCompare(b.id)\n );\n const newEdges = [];\n for (const e of edgesSorted) {\n const rU = rankOf[e.src] ?? 0;\n const rV = rankOf[e.dst] ?? 0;\n if (rV - rU <= 1) {\n newEdges.push(e);\n continue;\n }\n let prev = e.src;\n for (let L = rU + 1, k = 0; L < rV; L++, k++) {\n const d = addDummyAt(L);\n newEdges.push({ id: `${e.id}#${k}`, src: prev, dst: d, weight: e.weight, ref: e.ref });\n prev = d;\n }\n const lastIndex = rV - rU - 2;\n newEdges.push({\n id: `${e.id}#${Math.max(lastIndex + 1, 0)}`,\n src: prev,\n dst: e.dst,\n weight: e.weight,\n ref: e.ref\n });\n }\n const nodes = [...g.nodes, ...[...dummy].filter((id) => !g.nodes.includes(id))];\n const graphWithDummies = { nodes, edges: newEdges, layout: g.layout, nodeById };\n return { layering: { layers, rankOf, dummy }, graphWithDummies };\n}\n__name(makeProperLayering, \"makeProperLayering\");\n\n// src/rendering-util/layout-algorithms/swimlanes/phase3.ordering.ts\nfunction median(values) {\n const n = values.length;\n if (n === 0) {\n return Number.POSITIVE_INFINITY;\n }\n const a = [...values].sort((x, y) => x - y);\n if (n % 2 === 1) {\n return a[(n - 1) / 2];\n }\n return 0.5 * (a[n / 2 - 1] + a[n / 2]);\n}\n__name(median, \"median\");\nfunction barycenter(values) {\n if (values.length === 0) {\n return Number.POSITIVE_INFINITY;\n }\n const s = values.reduce((acc, v) => acc + v, 0);\n return s / values.length;\n}\n__name(barycenter, \"barycenter\");\nfunction neighborPositionsFor(targetNodes, fixedIndex, edges, direction) {\n const neighborPositions = /* @__PURE__ */ new Map();\n for (const v of targetNodes) {\n neighborPositions.set(v, []);\n }\n for (const e of edges) {\n if (direction === \"down\") {\n if (fixedIndex.has(e.src) && neighborPositions.has(e.dst)) {\n neighborPositions.get(e.dst).push(fixedIndex.get(e.src));\n }\n } else if (fixedIndex.has(e.dst) && neighborPositions.has(e.src)) {\n neighborPositions.get(e.src).push(fixedIndex.get(e.dst));\n }\n }\n return neighborPositions;\n}\n__name(neighborPositionsFor, \"neighborPositionsFor\");\nfunction currentOrderTieBreak(a, b, currentLayerIndex) {\n const ia = currentLayerIndex.get(a) ?? 0;\n const ib = currentLayerIndex.get(b) ?? 0;\n return ia !== ib ? ia - ib : a.localeCompare(b);\n}\n__name(currentOrderTieBreak, \"currentOrderTieBreak\");\nfunction countCrossingsBetweenAdjacent2(upper, lower, edges) {\n const upperSet = new Set(upper);\n const lowerSet = new Set(lower);\n const upperIndex = buildLayerIndex(upper);\n const lowerIndex = buildLayerIndex(lower);\n const pairs = [];\n for (const e of edges) {\n if (upperSet.has(e.src) && lowerSet.has(e.dst)) {\n pairs.push({ u: upperIndex.get(e.src), v: lowerIndex.get(e.dst) });\n }\n }\n pairs.sort((a, b) => a.u === b.u ? a.v - b.v : a.u - b.u);\n const vs = pairs.map((p) => p.v);\n return countInversions(vs);\n}\n__name(countCrossingsBetweenAdjacent2, \"countCrossingsBetweenAdjacent\");\nfunction sortByHeuristic(nodes, neighborPositions, currentLayerIndex) {\n return [...nodes].sort((a, b) => {\n const sa = median(neighborPositions.get(a) ?? []);\n const sb = median(neighborPositions.get(b) ?? []);\n if (sa === sb) {\n return currentOrderTieBreak(a, b, currentLayerIndex);\n }\n if (!isFinite(sa)) {\n return 1;\n }\n if (!isFinite(sb)) {\n return -1;\n }\n return sa - sb;\n });\n}\n__name(sortByHeuristic, \"sortByHeuristic\");\nfunction reorderLayer(fixedLayer, targetLayer, edges, direction, topLaneOf, laneOrder) {\n const fixedIndex = buildLayerIndex(fixedLayer);\n const currIndex = buildLayerIndex(targetLayer);\n const neighborPositions = neighborPositionsFor(targetLayer, fixedIndex, edges, direction);\n if (!topLaneOf || !laneOrder || laneOrder.length === 0) {\n return sortByHeuristic(targetLayer, neighborPositions, currIndex);\n }\n const byLane = /* @__PURE__ */ new Map();\n for (const id of targetLayer) {\n const lane = topLaneOf(id);\n const arr = byLane.get(lane) ?? [];\n arr.push(id);\n byLane.set(lane, arr);\n }\n const result = [];\n for (const lane of laneOrder) {\n const nodesInLane = byLane.get(lane);\n if (!nodesInLane || nodesInLane.length === 0) {\n continue;\n }\n const sorted = sortByHeuristic(nodesInLane, neighborPositions, currIndex);\n result.push(...sorted);\n }\n const nullNodes = byLane.get(null);\n if (nullNodes && nullNodes.length > 0) {\n const sorted = sortByHeuristic(nullNodes, neighborPositions, currIndex);\n for (const nid of sorted) {\n const bc = barycenter(neighborPositions.get(nid) ?? []);\n let bestIdx = result.length;\n if (isFinite(bc)) {\n for (const [i, rid] of result.entries()) {\n const rBc = barycenter(neighborPositions.get(rid) ?? []);\n if (bc < rBc) {\n bestIdx = i;\n break;\n }\n }\n }\n result.splice(bestIdx, 0, nid);\n }\n }\n return result;\n}\n__name(reorderLayer, \"reorderLayer\");\nfunction transposeImprove(upper, current, edges, next, topLaneOf) {\n const best = [...current];\n const upperSet = new Set(upper);\n const layerSet = new Set(current);\n const nextSet = next ? new Set(next) : null;\n const edgesIn = edges.filter((e) => upperSet.has(e.src) && layerSet.has(e.dst));\n const edgesOut = nextSet ? edges.filter((e) => layerSet.has(e.src) && nextSet.has(e.dst)) : void 0;\n const crossingScore = /* @__PURE__ */ __name((order) => {\n let score = countCrossingsBetweenAdjacent2(upper, order, edgesIn);\n if (edgesOut && next) {\n score += countCrossingsBetweenAdjacent2(order, next, edgesOut);\n }\n return score;\n }, \"crossingScore\");\n const laneOf = topLaneOf ? /* @__PURE__ */ new Map() : null;\n if (topLaneOf && laneOf) {\n for (const id of current) {\n laneOf.set(id, topLaneOf(id));\n }\n }\n let improved = true;\n let bestScore = crossingScore(best);\n while (improved) {\n improved = false;\n for (let i = 0; i + 1 < best.length; i++) {\n if (laneOf) {\n const laneA = laneOf.get(best[i]);\n const laneB = laneOf.get(best[i + 1]);\n if (laneA !== laneB) {\n continue;\n }\n }\n const prev = bestScore;\n [best[i], best[i + 1]] = [best[i + 1], best[i]];\n const nextScore = crossingScore(best);\n if (nextScore < prev) {\n bestScore = nextScore;\n improved = true;\n } else {\n [best[i], best[i + 1]] = [best[i + 1], best[i]];\n }\n }\n }\n return best;\n}\n__name(transposeImprove, \"transposeImprove\");\nfunction orderLayers(layering, gWithDummies, opts) {\n const layers = layering.layers.map((l) => [...l]);\n const edges = gWithDummies.edges;\n const topLaneOf = createTopLaneResolver(gWithDummies);\n const laneOrder = resolveTopLaneOrder(gWithDummies, opts?.laneOrder);\n for (let s = 0; s < 3; s++) {\n for (let i = 1; i < layers.length; i++) {\n layers[i] = reorderLayer(layers[i - 1], layers[i], edges, \"down\", topLaneOf, laneOrder);\n layers[i] = transposeImprove(layers[i - 1], layers[i], edges, layers[i + 1], topLaneOf);\n }\n for (let i = layers.length - 2; i >= 0; i--) {\n layers[i] = reorderLayer(layers[i + 1], layers[i], edges, \"up\", topLaneOf, laneOrder);\n layers[i] = transposeImprove(layers[i + 1], layers[i], edges, layers[i - 1], topLaneOf);\n }\n }\n return { layers };\n}\n__name(orderLayers, \"orderLayers\");\n\n// src/rendering-util/layout-algorithms/swimlanes/phase4.coordinates.ts\nfunction assignCoordinates(ordered, gWithDummies, opts) {\n const layerGap = opts?.layerGap ?? COORDINATES.DEFAULT_LAYER_GAP;\n const nodeGap = opts?.nodeGap ?? COORDINATES.DEFAULT_NODE_GAP;\n const laneGap = opts?.laneGap ?? nodeGap * 2;\n const direction = opts?.direction ?? \"TB\";\n const isHorizontal = direction === \"LR\" || direction === \"RL\";\n const layers = ordered.layers;\n const x = /* @__PURE__ */ Object.create(null);\n const y = /* @__PURE__ */ Object.create(null);\n const getNode = /* @__PURE__ */ __name((id) => gWithDummies.nodeById.get(id), \"getNode\");\n const getWidth = /* @__PURE__ */ __name((id) => getNode(id)?.width ?? 0, \"getWidth\");\n const getHeight = /* @__PURE__ */ __name((id) => getNode(id)?.height ?? 0, \"getHeight\");\n const topLaneOf = createTopLaneResolver(gWithDummies);\n const laneOrderGlobal = resolveTopLaneOrder(gWithDummies, opts?.laneOrder);\n const layerHeights = layers.map(\n (layer) => layer.reduce((m, v) => Math.max(m, getHeight(v)), 0)\n );\n const extraLayerGaps = [];\n if (isHorizontal) {\n for (let i = 0; i + 1 < layers.length; i++) {\n const thisLayerMaxWidth = layers[i].reduce((m, v) => Math.max(m, getWidth(v)), 0);\n const nextLayerMaxWidth = layers[i + 1].reduce((m, v) => Math.max(m, getWidth(v)), 0);\n const thisLayerMaxHeight = layerHeights[i];\n const nextLayerMaxHeight = layerHeights[i + 1];\n const normalSpacing = thisLayerMaxHeight / 2 + nextLayerMaxHeight / 2;\n const requiredSpacing = (thisLayerMaxWidth + nextLayerMaxWidth) / 2;\n const extraNeeded = Math.max(0, requiredSpacing - normalSpacing - layerGap);\n extraLayerGaps.push(extraNeeded);\n }\n }\n const lanesUsedSet = /* @__PURE__ */ new Set();\n for (const layer of layers) {\n for (const id of layer) {\n lanesUsedSet.add(topLaneOf(id));\n }\n }\n const hasNullLane = lanesUsedSet.has(null);\n const lanesUsed = laneOrderGlobal.filter((L) => lanesUsedSet.has(L));\n const laneOrderColumns = [...hasNullLane ? [null] : [], ...lanesUsed];\n const laneWidth = /* @__PURE__ */ Object.create(null);\n for (const L of lanesUsed) {\n laneWidth[L] = 0;\n }\n if (hasNullLane) {\n laneWidth.null = 0;\n }\n for (const layer of layers) {\n const perLane = /* @__PURE__ */ Object.create(null);\n const nullIds = [];\n for (const id of layer) {\n const L = topLaneOf(id);\n if (L === null) {\n nullIds.push(id);\n } else {\n (perLane[L] ||= []).push(id);\n }\n }\n for (const [L, ids] of Object.entries(perLane)) {\n const total = ids.reduce((s, id) => s + getWidth(id), 0) + nodeGap * Math.max(0, ids.length - 1);\n laneWidth[L] = Math.max(laneWidth[L] ?? 0, total);\n }\n if (hasNullLane && nullIds.length) {\n const totalNull = nullIds.reduce((s, id) => s + getWidth(id), 0) + nodeGap * Math.max(0, nullIds.length - 1);\n laneWidth.null = Math.max(laneWidth.null ?? 0, totalNull);\n }\n }\n const centerX = /* @__PURE__ */ new Map();\n {\n const widths = laneOrderColumns.map(\n (L) => (L === null ? laneWidth.null : laneWidth[L]) ?? 0\n );\n const totalW = widths.reduce((a, b) => a + b, 0) + laneGap * Math.max(0, laneOrderColumns.length - 1);\n let cursor = -totalW / 2;\n for (let i = 0; i < laneOrderColumns.length; i++) {\n const L = laneOrderColumns[i];\n const w = widths[i] ?? 0;\n const cx = cursor + w / 2;\n centerX.set(L, cx);\n cursor += w;\n if (i < laneOrderColumns.length - 1) {\n cursor += laneGap;\n }\n }\n }\n let yOffset = 0;\n for (const [li, layer] of layers.entries()) {\n const layerH = layerHeights[li] ?? 0;\n const byLane = /* @__PURE__ */ new Map();\n for (const id of layer) {\n const laneId = topLaneOf(id);\n const arr = byLane.get(laneId) ?? [];\n arr.push(id);\n byLane.set(laneId, arr);\n }\n for (const L of laneOrderColumns) {\n const nodesInLane = byLane.get(L) ?? [];\n if (nodesInLane.length === 0) {\n continue;\n }\n const cx = centerX.get(L);\n if (nodesInLane.length === 1) {\n const id = nodesInLane[0];\n x[id] = cx;\n y[id] = yOffset + layerH / 2;\n } else {\n const widths = nodesInLane.map((id) => getWidth(id));\n const total = widths.reduce((a, b) => a + b, 0) + nodeGap * (nodesInLane.length - 1);\n let start = cx - total / 2;\n for (const [i, id] of nodesInLane.entries()) {\n const w = widths[i];\n x[id] = start + w / 2;\n y[id] = yOffset + layerH / 2;\n start += w + nodeGap;\n }\n }\n }\n const extraGap = extraLayerGaps[li] ?? 0;\n yOffset += layerH + layerGap + extraGap;\n }\n const byRef = /* @__PURE__ */ new Map();\n for (const e of gWithDummies.edges) {\n const rid = e.ref.id;\n if (!byRef.has(rid)) {\n byRef.set(rid, []);\n }\n byRef.get(rid).push(e);\n }\n for (const [, chainEdges] of byRef) {\n if (chainEdges.length === 0) {\n continue;\n }\n const ref = chainEdges[0].ref;\n const src = ref.start;\n const dst = ref.end;\n if (src == null || dst == null) {\n continue;\n }\n const midX = Math.round(((x[src] ?? 0) + (x[dst] ?? 0)) / 2);\n const involved = /* @__PURE__ */ new Set();\n for (const e of chainEdges) {\n involved.add(e.src);\n involved.add(e.dst);\n }\n for (const vid of involved) {\n if (vid === src || vid === dst) {\n continue;\n }\n const node = gWithDummies.nodeById.get(vid);\n if (node?.isDummy) {\n x[vid] = midX;\n }\n }\n }\n return { x, y };\n}\n__name(assignCoordinates, \"assignCoordinates\");\n\n// src/rendering-util/layout-algorithms/swimlanes/laneOrdering.ts\nvar AUTOMATIC_LANE_ORDERING_RESTARTS = 8;\nfunction hashString(input) {\n let hash = 2166136261;\n for (let i = 0; i < input.length; i++) {\n hash ^= input.charCodeAt(i);\n hash = Math.imul(hash, 16777619);\n }\n return hash >>> 0;\n}\n__name(hashString, \"hashString\");\nfunction mulberry32(seed) {\n let state = seed >>> 0;\n return () => {\n state += 1831565813;\n let t = state;\n t = Math.imul(t ^ t >>> 15, t | 1);\n t ^= t + Math.imul(t ^ t >>> 7, t | 61);\n return ((t ^ t >>> 14) >>> 0) / 4294967296;\n };\n}\n__name(mulberry32, \"mulberry32\");\nfunction deterministicShuffle(order, seed) {\n const shuffled = [...order];\n const random = mulberry32(seed);\n for (let i = shuffled.length - 1; i > 0; i--) {\n const j = Math.floor(random() * (i + 1));\n [shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];\n }\n return shuffled;\n}\n__name(deterministicShuffle, \"deterministicShuffle\");\nfunction sourceDistance(order, sourceIndex) {\n let distance = 0;\n for (const [index, laneId] of order.entries()) {\n distance += Math.abs(index - (sourceIndex.get(laneId) ?? index));\n }\n return distance;\n}\n__name(sourceDistance, \"sourceDistance\");\nfunction laneArrangementCost(order, weights) {\n const position = /* @__PURE__ */ new Map();\n for (const [index, laneId] of order.entries()) {\n position.set(laneId, index);\n }\n let cost = 0;\n for (const { a, b, weight } of weights) {\n const ai = position.get(a);\n const bi = position.get(b);\n if (ai == null || bi == null) {\n continue;\n }\n cost += weight * Math.abs(ai - bi);\n }\n return cost;\n}\n__name(laneArrangementCost, \"laneArrangementCost\");\nfunction buildWeightedLaneEdges(g) {\n const sourceOrder = buildTopLaneOrder(g);\n if (sourceOrder.length < 2) {\n return [];\n }\n const sourceIndex = new Map(sourceOrder.map((laneId, index) => [laneId, index]));\n const topLaneOf = createTopLaneResolver(g);\n const weights = /* @__PURE__ */ new Map();\n for (const edge of g.layout.edges ?? []) {\n if (edge.isLayoutOnly) {\n continue;\n }\n const src = typeof edge.start === \"string\" ? edge.start : void 0;\n const dst = typeof edge.end === \"string\" ? edge.end : void 0;\n if (!src || !dst || !g.nodeById.has(src) || !g.nodeById.has(dst)) {\n continue;\n }\n const laneA = topLaneOf(src);\n const laneB = topLaneOf(dst);\n if (!laneA || !laneB || laneA === laneB) {\n continue;\n }\n const ia = sourceIndex.get(laneA);\n const ib = sourceIndex.get(laneB);\n if (ia == null || ib == null) {\n continue;\n }\n const [a, b] = ia <= ib ? [laneA, laneB] : [laneB, laneA];\n const key = `${a}\\0${b}`;\n const existing = weights.get(key);\n if (existing) {\n existing.weight++;\n } else {\n weights.set(key, { a, b, weight: 1 });\n }\n }\n return [...weights.values()];\n}\n__name(buildWeightedLaneEdges, \"buildWeightedLaneEdges\");\nfunction greedySwitch(startOrder, weights, sourceIndex) {\n const order = [...startOrder];\n let cost = laneArrangementCost(order, weights);\n let changed = true;\n let sweeps = 0;\n const maxSweeps = Math.max(1, order.length);\n while (changed && sweeps < maxSweeps) {\n changed = false;\n sweeps++;\n for (let i = 0; i + 1 < order.length; i++) {\n [order[i], order[i + 1]] = [order[i + 1], order[i]];\n const nextCost = laneArrangementCost(order, weights);\n if (nextCost < cost) {\n cost = nextCost;\n changed = true;\n } else {\n [order[i], order[i + 1]] = [order[i + 1], order[i]];\n }\n }\n }\n return {\n order,\n cost,\n sourceDistance: sourceDistance(order, sourceIndex)\n };\n}\n__name(greedySwitch, \"greedySwitch\");\nfunction isBetterCandidate(candidate, best) {\n if (candidate.cost !== best.cost) {\n return candidate.cost < best.cost;\n }\n return candidate.sourceDistance < best.sourceDistance;\n}\n__name(isBetterCandidate, \"isBetterCandidate\");\nfunction seedForRestart(sourceOrder, weights, restartIndex) {\n const weightSignature = [...weights].sort((a, b) => a.a === b.a ? a.b.localeCompare(b.b) : a.a.localeCompare(b.a)).map(({ a, b, weight }) => `${a}:${b}:${weight}`).join(\"|\");\n return hashString(`${sourceOrder.join(\"|\")}#${weightSignature}#${restartIndex}`);\n}\n__name(seedForRestart, \"seedForRestart\");\nfunction optimizeTopLaneOrder(g, opts = {}) {\n const sourceOrder = buildTopLaneOrder(g);\n if (sourceOrder.length < 2) {\n return sourceOrder;\n }\n const weights = buildWeightedLaneEdges(g);\n if (weights.length === 0) {\n return sourceOrder;\n }\n const sourceIndex = new Map(sourceOrder.map((laneId, index) => [laneId, index]));\n let best = greedySwitch(sourceOrder, weights, sourceIndex);\n const restarts = Math.max(0, opts.restarts ?? AUTOMATIC_LANE_ORDERING_RESTARTS);\n for (let i = 0; i < restarts; i++) {\n const seed = seedForRestart(sourceOrder, weights, i);\n const start = deterministicShuffle(sourceOrder, seed);\n const candidate = greedySwitch(start, weights, sourceIndex);\n if (isBetterCandidate(candidate, best)) {\n best = candidate;\n }\n }\n return best.order;\n}\n__name(optimizeTopLaneOrder, \"optimizeTopLaneOrder\");\n\n// src/rendering-util/layout-algorithms/swimlanes/pipeline.ts\nfunction sugiyamaLayout(g, opts) {\n const ignoreCrossLaneEdges = opts?.ignoreCrossLaneEdges ?? true;\n const optimizeRanksByCrossings2 = opts?.optimizeRanksByCrossings ?? true;\n const g0 = normalizeGraph(g);\n const laneOrder = opts?.automaticLaneOrdering ? optimizeTopLaneOrder(g0, { restarts: AUTOMATIC_LANE_ORDERING_RESTARTS }) : void 0;\n const cycleRes = removeCycles_DFS(g0);\n const gAcyclic = cycleRes.acyclic;\n const layering = ignoreCrossLaneEdges ? assignLayers_LaneAwareCompact(gAcyclic, {\n compactSingleInput: opts?.compactSingleInput ?? LAYERING.DEFAULT_COMPACT_SINGLE_INPUT,\n ignoreCrossLaneEdges: true,\n direction: opts?.direction\n }) : assignLayers_Gravity(gAcyclic, {\n compactSingleInput: opts?.compactSingleInput ?? LAYERING.DEFAULT_COMPACT_SINGLE_INPUT,\n ignoreCrossLaneEdges: false,\n optimizeRanksByCrossings: optimizeRanksByCrossings2\n });\n const { layering: properLayering, graphWithDummies } = makeProperLayering(layering, gAcyclic);\n const ordered = orderLayers(properLayering, graphWithDummies, { laneOrder });\n const coordinates = assignCoordinates(ordered, graphWithDummies, {\n layerGap: opts?.layerGap,\n nodeGap: opts?.nodeGap,\n direction: opts?.direction,\n laneOrder\n });\n return {\n acyclic: gAcyclic,\n reversed: cycleRes.reversed,\n layering: properLayering,\n ordered,\n coordinates\n };\n}\n__name(sugiyamaLayout, \"sugiyamaLayout\");\n\n// src/rendering-util/layout-algorithms/swimlanes/orthogonalRouter/router.ts\nvar EPS7 = PRECISION.EPSILON;\nvar NODE_PADDING = 8;\nvar HORIZONTAL_PIPE_MARGIN = 15;\nvar VERTICAL_PIPE_MARGIN = 15;\nvar ROUTING_MARGIN = 25;\nvar ANCHOR_OFFSET = 20;\nvar TRACK_SPACING = 10;\nfunction chooseOrthogonalSide(node, target, fallback) {\n const cx = node.x ?? 0;\n const cy = node.y ?? 0;\n const dx = target.x - cx;\n const dy = target.y - cy;\n const absDx = Math.abs(dx);\n const absDy = Math.abs(dy);\n if (absDx < EPS7 && absDy < EPS7) {\n return fallback;\n }\n const verticalBias = 3;\n if (absDy > EPS7 && absDy * verticalBias >= absDx) {\n return dy > 0 ? \"bottom\" : \"top\";\n }\n if (absDx > EPS7) {\n return dx > 0 ? \"right\" : \"left\";\n }\n return fallback;\n}\n__name(chooseOrthogonalSide, \"chooseOrthogonalSide\");\nfunction sharedLineEndpointCoord(line, nextLine) {\n return Math.abs(line.to - nextLine.from) < EPS7 || Math.abs(line.to - nextLine.to) < EPS7 ? line.to : line.from;\n}\n__name(sharedLineEndpointCoord, \"sharedLineEndpointCoord\");\nfunction pointOnLine(line, along) {\n return line.orient === \"vertical\" ? { x: line.coord, y: along } : { x: along, y: line.coord };\n}\n__name(pointOnLine, \"pointOnLine\");\nfunction routeEdgesOrthogonal(data, direction) {\n const nodes = data.nodes ?? [];\n const originalEdges = data.edges ?? [];\n const edges = [];\n for (const oe of originalEdges) {\n if (oe.isLayoutOnly) {\n continue;\n }\n edges.push({\n ...oe,\n __originalEdge: oe\n });\n }\n const nodeById = /* @__PURE__ */ new Map();\n const laneByNodeId = /* @__PURE__ */ new Map();\n const pipes = [];\n const isLR = direction === \"LR\";\n for (const n of nodes) {\n nodeById.set(n.id, n);\n }\n const topLevelGroups = nodes.filter((n) => n.isGroup && !n.parentId);\n for (const group of topLevelGroups) {\n const lane = { id: group.id };\n const assignLane = /* @__PURE__ */ __name((n) => {\n laneByNodeId.set(n.id, lane);\n nodes.filter((child) => child.parentId === n.id).forEach(assignLane);\n }, \"assignLane\");\n assignLane(group);\n }\n const obstacles = nodes.filter((n) => !n.isGroup && !n.isEdgeLabel).map((n) => {\n const w = n.width ?? 10;\n const h = n.height ?? 10;\n const x = n.x ?? 0;\n const y = n.y ?? 0;\n const padding = NODE_PADDING;\n return {\n nodeId: n.id,\n minX: x - w / 2 - padding,\n maxX: x + w / 2 + padding,\n minY: y - h / 2 - padding,\n maxY: y + h / 2 + padding,\n // For LR: TB x becomes LR y, so visual Y extent should be based on height\n visualXHalfExtent: isLR ? h / 2 + padding : w / 2 + padding\n };\n });\n const getOrAddPipe = /* @__PURE__ */ __name((orientation, coord, spanMin, spanMax) => {\n let pipe = pipes.find((p) => p.orientation === orientation && Math.abs(p.coord - coord) < 1);\n if (!pipe) {\n pipe = {\n id: `pipe-${orientation}-${coord.toFixed(0)}`,\n orientation,\n coord,\n spanMin,\n spanMax,\n tracks: []\n };\n pipes.push(pipe);\n }\n pipe.spanMin = Math.min(pipe.spanMin, spanMin);\n pipe.spanMax = Math.max(pipe.spanMax, spanMax);\n return pipe;\n }, \"getOrAddPipe\");\n const portForSide = /* @__PURE__ */ __name((node, side) => {\n const w = node.width ?? 10;\n const h = node.height ?? 10;\n const cx = node.x ?? 0;\n const cy = node.y ?? 0;\n switch (side) {\n case \"top\":\n return { x: cx, y: cy - h / 2 };\n case \"bottom\":\n return { x: cx, y: cy + h / 2 };\n case \"left\":\n return { x: cx - w / 2, y: cy };\n case \"right\":\n return { x: cx + w / 2, y: cy };\n }\n }, \"portForSide\");\n const getOrthogonalPort = /* @__PURE__ */ __name((node, target, isSource) => portForSide(node, chooseOrthogonalSide(node, target, isSource ? \"bottom\" : \"top\")), \"getOrthogonalPort\");\n const allRoutedSegments = [];\n const edgeSegmentIndices = [];\n const straightIntraLaneEdges = /* @__PURE__ */ new Set();\n const CROSSING_PENALTY = 1e3;\n const crossingPenalty = /* @__PURE__ */ __name((edgeIdx, from, to) => {\n if (allRoutedSegments.length === 0) {\n return 0;\n }\n const isHorizontal = Math.abs(from.y - to.y) < EPS7;\n const isVertical = Math.abs(from.x - to.x) < EPS7;\n if (!isHorizontal && !isVertical) {\n return 0;\n }\n let penalties = 0;\n if (isHorizontal) {\n const y = from.y;\n const minX = Math.min(from.x, to.x) - EPS7;\n const maxX = Math.max(from.x, to.x) + EPS7;\n if (maxX <= minX) {\n return 0;\n }\n for (const seg of allRoutedSegments) {\n if (seg.edgeIndex === edgeIdx || seg.orientation !== \"vertical\") {\n continue;\n }\n if (seg.pipe.coord < minX || seg.pipe.coord > maxX) {\n continue;\n }\n if (seg.from - EPS7 <= y && seg.to + EPS7 >= y) {\n penalties += CROSSING_PENALTY;\n }\n }\n } else if (isVertical) {\n const x = from.x;\n const minY = Math.min(from.y, to.y) - EPS7;\n const maxY = Math.max(from.y, to.y) + EPS7;\n if (maxY <= minY) {\n return 0;\n }\n for (const seg of allRoutedSegments) {\n if (seg.edgeIndex === edgeIdx || seg.orientation !== \"horizontal\") {\n continue;\n }\n if (seg.pipe.coord < minY || seg.pipe.coord > maxY) {\n continue;\n }\n if (seg.from - EPS7 <= x && seg.to + EPS7 >= x) {\n penalties += CROSSING_PENALTY;\n }\n }\n }\n return penalties;\n }, \"crossingPenalty\");\n const routingOrder = edges.map((edge, idx) => {\n if (!edge.start || !edge.end) {\n return { idx, crossLane: 0, dx: 0, dy: 0 };\n }\n const srcNode = nodeById.get(edge.start);\n const dstNode = nodeById.get(edge.end);\n const srcLane = laneByNodeId.get(edge.start);\n const dstLane = laneByNodeId.get(edge.end);\n const crossLane = srcLane && dstLane && srcLane.id !== dstLane.id ? 1 : 0;\n const dx = srcNode && dstNode ? Math.abs((dstNode.x ?? 0) - (srcNode.x ?? 0)) : 0;\n const dy = srcNode && dstNode ? Math.abs((dstNode.y ?? 0) - (srcNode.y ?? 0)) : 0;\n return { idx, crossLane, dx, dy };\n }).sort((a, b) => {\n if (a.crossLane !== b.crossLane) {\n return b.crossLane - a.crossLane;\n }\n const aDist = a.dx + a.dy;\n const bDist = b.dx + b.dy;\n if (Math.abs(aDist - bDist) > 1) {\n return aDist - bDist;\n }\n return a.idx - b.idx;\n }).map((entry) => entry.idx);\n const isSegmentBlocked = /* @__PURE__ */ __name((p1, p2, excludeStart, excludeEnd) => {\n const segMinX = Math.min(p1.x, p2.x);\n const segMaxX = Math.max(p1.x, p2.x);\n const segMinY = Math.min(p1.y, p2.y);\n const segMaxY = Math.max(p1.y, p2.y);\n const blockingObs = obstacles.find((obs) => {\n if (excludeStart && obs.nodeId === excludeStart) {\n return false;\n }\n if (excludeEnd && obs.nodeId === excludeEnd) {\n return false;\n }\n if (Math.abs(p1.x - p2.x) > EPS7) {\n return obs.minY < p1.y && obs.maxY > p1.y && obs.maxX > segMinX && obs.minX < segMaxX;\n } else {\n return obs.minX < p1.x && obs.maxX > p1.x && obs.maxY > segMinY && obs.minY < segMaxY;\n }\n });\n return !!blockingObs;\n }, \"isSegmentBlocked\");\n const portGroups = /* @__PURE__ */ new Map();\n const incidentEdgeTotals = /* @__PURE__ */ new Map();\n for (const edge of edges) {\n if (!edge.start || !edge.end || edge.start === edge.end) {\n continue;\n }\n incidentEdgeTotals.set(edge.start, (incidentEdgeTotals.get(edge.start) ?? 0) + 1);\n incidentEdgeTotals.set(edge.end, (incidentEdgeTotals.get(edge.end) ?? 0) + 1);\n }\n const determineSide = /* @__PURE__ */ __name((node, target) => chooseOrthogonalSide(node, target, \"bottom\"), \"determineSide\");\n const sideInfoByIdx = /* @__PURE__ */ new Map();\n for (const [i, e] of edges.entries()) {\n if (!e.start || !e.end || e.start === e.end) {\n continue;\n }\n if (e.points && e.points.length > 0) {\n continue;\n }\n const src = nodeById.get(e.start);\n const dst = nodeById.get(e.end);\n if (!src || !dst) {\n continue;\n }\n const dx = (dst.x ?? 0) - (src.x ?? 0);\n const dy = (dst.y ?? 0) - (src.y ?? 0);\n sideInfoByIdx.set(i, {\n edgeIdx: i,\n srcId: e.start,\n dstId: e.end,\n srcSide: determineSide(src, { x: dst.x ?? 0, y: dst.y ?? 0 }),\n dstSide: determineSide(dst, { x: src.x ?? 0, y: src.y ?? 0 }),\n absDx: Math.abs(dx),\n absDy: Math.abs(dy),\n dxSign: Math.sign(dx),\n dySign: Math.sign(dy)\n });\n }\n const preferenceStrength = /* @__PURE__ */ __name((info) => {\n if (info.srcSide === \"top\" || info.srcSide === \"bottom\") {\n return info.absDx === 0 ? Infinity : info.absDy / info.absDx;\n }\n return info.absDy === 0 ? Infinity : info.absDx / info.absDy;\n }, \"preferenceStrength\");\n const secondarySide = /* @__PURE__ */ __name((info) => {\n if (info.srcSide === \"top\" || info.srcSide === \"bottom\") {\n return info.dxSign >= 0 ? \"right\" : \"left\";\n }\n return info.dySign >= 0 ? \"bottom\" : \"top\";\n }, \"secondarySide\");\n const sourceSideGroups = /* @__PURE__ */ new Map();\n for (const info of sideInfoByIdx.values()) {\n const key = `${info.srcId}:${info.srcSide}`;\n if (!sourceSideGroups.has(key)) {\n sourceSideGroups.set(key, []);\n }\n sourceSideGroups.get(key).push(info);\n }\n const sideLoad = /* @__PURE__ */ new Map();\n const loadKey = /* @__PURE__ */ __name((nodeId, side) => `${nodeId}:${side}`, \"loadKey\");\n for (const info of sideInfoByIdx.values()) {\n sideLoad.set(\n loadKey(info.srcId, info.srcSide),\n (sideLoad.get(loadKey(info.srcId, info.srcSide)) ?? 0) + 1\n );\n sideLoad.set(\n loadKey(info.dstId, info.dstSide),\n (sideLoad.get(loadKey(info.dstId, info.dstSide)) ?? 0) + 1\n );\n }\n for (const group of sourceSideGroups.values()) {\n if (group.length < 2) {\n continue;\n }\n group.sort((a, b) => {\n const sa = preferenceStrength(a);\n const sb = preferenceStrength(b);\n if (Math.abs(sa - sb) > 1e-9) {\n return sb - sa;\n }\n return a.edgeIdx - b.edgeIdx;\n });\n for (let g = 1; g < group.length; g++) {\n const info = group[g];\n const secondary = secondarySide(info);\n const primaryLoad = sideLoad.get(loadKey(info.srcId, info.srcSide)) ?? 0;\n const secondaryLoad = sideLoad.get(loadKey(info.srcId, secondary)) ?? 0;\n if (secondaryLoad >= primaryLoad) {\n continue;\n }\n sideLoad.set(loadKey(info.srcId, info.srcSide), primaryLoad - 1);\n sideLoad.set(loadKey(info.srcId, secondary), secondaryLoad + 1);\n info.srcSide = secondary;\n }\n }\n const isDiamondNode = /* @__PURE__ */ __name((node) => {\n const shape = node?.shape;\n return shape === \"question\" || shape === \"diamond\";\n }, \"isDiamondNode\");\n const inSidesByNode = /* @__PURE__ */ new Map();\n for (const info of sideInfoByIdx.values()) {\n if (!inSidesByNode.has(info.dstId)) {\n inSidesByNode.set(info.dstId, /* @__PURE__ */ new Set());\n }\n inSidesByNode.get(info.dstId).add(info.dstSide);\n }\n for (const info of sideInfoByIdx.values()) {\n if (!isDiamondNode(nodeById.get(info.srcId))) {\n continue;\n }\n const inSides = inSidesByNode.get(info.srcId);\n if (!inSides?.has(info.srcSide)) {\n continue;\n }\n const secondary = secondarySide(info);\n if (inSides.has(secondary) || (sideLoad.get(loadKey(info.srcId, secondary)) ?? 0) > 0) {\n continue;\n }\n const primaryLoad = sideLoad.get(loadKey(info.srcId, info.srcSide)) ?? 0;\n sideLoad.set(loadKey(info.srcId, info.srcSide), Math.max(0, primaryLoad - 1));\n sideLoad.set(loadKey(info.srcId, secondary), 1);\n info.srcSide = secondary;\n }\n for (const info of sideInfoByIdx.values()) {\n const { edgeIdx: i, srcId, dstId, srcSide, dstSide } = info;\n const src = nodeById.get(srcId);\n const dst = nodeById.get(dstId);\n const srcKey = `${srcId}:${srcSide}:src`;\n const dstCoord = srcSide === \"top\" || srcSide === \"bottom\" ? dst.x ?? 0 : dst.y ?? 0;\n if (!portGroups.has(srcKey)) {\n portGroups.set(srcKey, []);\n }\n portGroups.get(srcKey).push({ edgeIdx: i, oppositeCoord: dstCoord });\n const dstKey = `${dstId}:${dstSide}:dst`;\n const srcCoord = dstSide === \"top\" || dstSide === \"bottom\" ? src.x ?? 0 : src.y ?? 0;\n if (!portGroups.has(dstKey)) {\n portGroups.set(dstKey, []);\n }\n portGroups.get(dstKey).push({ edgeIdx: i, oppositeCoord: srcCoord });\n }\n const portOffsets = /* @__PURE__ */ new Map();\n const MIN_PORT_SPACING3 = 8;\n for (const [key, group] of portGroups) {\n if (group.length < 2) {\n continue;\n }\n group.sort((a, b) => a.oppositeCoord - b.oppositeCoord);\n const parts = key.split(\":\");\n const nodeId = parts.slice(0, -2).join(\":\");\n const side = parts[parts.length - 2];\n const role = parts[parts.length - 1];\n const node = nodeById.get(nodeId);\n if (!node) {\n continue;\n }\n const isVerticalSide = side === \"left\" || side === \"right\";\n const sideLength = isVerticalSide ? node.height ?? 10 : node.width ?? 10;\n const shape = node.shape;\n const isDiamond = shape === \"question\" || shape === \"diamond\";\n const effectiveLength = isDiamond ? sideLength * 0.3 : sideLength;\n const MAX_PORT_SPACING = 20;\n const spacing = Math.min(\n MAX_PORT_SPACING,\n Math.max(MIN_PORT_SPACING3, effectiveLength / (group.length + 1))\n );\n const totalSpan = spacing * (group.length - 1);\n const startOffset = -totalSpan / 2;\n for (const [j, element] of group.entries()) {\n const offset = startOffset + j * spacing;\n const offsetKey = `${element.edgeIdx}:${role}`;\n portOffsets.set(offsetKey, offset);\n }\n }\n const edgeHasLabelNode = /* @__PURE__ */ __name((edgeIdx) => Boolean(edges[edgeIdx]?.labelNodeId), \"edgeHasLabelNode\");\n const faceHasLabelNode = /* @__PURE__ */ __name((nodeId, side) => {\n if (!nodeId) {\n return false;\n }\n return (portGroups.get(`${nodeId}:${side}:src`) ?? []).some(\n ({ edgeIdx }) => edgeHasLabelNode(edgeIdx)\n ) || (portGroups.get(`${nodeId}:${side}:dst`) ?? []).some(\n ({ edgeIdx }) => edgeHasLabelNode(edgeIdx)\n );\n }, \"faceHasLabelNode\");\n const applyPortOffset = /* @__PURE__ */ __name((basePort, side, offset) => {\n if (side === \"top\" || side === \"bottom\") {\n return { x: basePort.x + offset, y: basePort.y };\n } else {\n return { x: basePort.x, y: basePort.y + offset };\n }\n }, \"applyPortOffset\");\n const portsForEdge = /* @__PURE__ */ __name((edgeIndex, src, dst) => {\n const sideInfo = sideInfoByIdx.get(edgeIndex);\n const srcTarget = { x: dst.x ?? 0, y: dst.y ?? 0 };\n const dstTarget = { x: src.x ?? 0, y: src.y ?? 0 };\n const srcSide = sideInfo?.srcSide ?? determineSide(src, srcTarget);\n const dstSide = sideInfo?.dstSide ?? determineSide(dst, dstTarget);\n let pSrcPort = sideInfo ? portForSide(src, sideInfo.srcSide) : getOrthogonalPort(src, srcTarget, true);\n let pDstPort = sideInfo ? portForSide(dst, sideInfo.dstSide) : getOrthogonalPort(dst, dstTarget, false);\n const srcOffset = portOffsets.get(`${edgeIndex}:src`);\n const dstOffset = portOffsets.get(`${edgeIndex}:dst`);\n if (srcOffset !== void 0) {\n pSrcPort = applyPortOffset(pSrcPort, srcSide, srcOffset);\n }\n if (dstOffset !== void 0) {\n pDstPort = applyPortOffset(pDstPort, dstSide, dstOffset);\n }\n return { pSrcPort, pDstPort, srcSide, dstSide };\n }, \"portsForEdge\");\n for (const i of routingOrder) {\n const e = edges[i];\n edgeSegmentIndices[i] = [];\n if (!e.start || !e.end) {\n continue;\n }\n if (e.points && e.points.length > 0) {\n continue;\n }\n if (e.start === e.end) {\n continue;\n }\n const src = nodeById.get(e.start);\n const dst = nodeById.get(e.end);\n if (!src || !dst) {\n continue;\n }\n const {\n pSrcPort,\n pDstPort,\n srcSide: srcPortSide,\n dstSide: dstPortSide\n } = portsForEdge(i, src, dst);\n const pSrcAnchor = { ...pSrcPort };\n const pDstAnchor = { ...pDstPort };\n const srcPortIsVertical = srcPortSide === \"top\" || srcPortSide === \"bottom\";\n const dstPortIsVertical = dstPortSide === \"top\" || dstPortSide === \"bottom\";\n if (srcPortIsVertical) {\n const isBottom = pSrcPort.y > (src.y ?? 0);\n pSrcAnchor.y = isBottom ? pSrcPort.y + ANCHOR_OFFSET : pSrcPort.y - ANCHOR_OFFSET;\n } else {\n const isRight = pSrcPort.x > (src.x ?? 0);\n pSrcAnchor.x = isRight ? pSrcPort.x + ANCHOR_OFFSET : pSrcPort.x - ANCHOR_OFFSET;\n }\n if (dstPortIsVertical) {\n const isBottom = pDstPort.y > (dst.y ?? 0);\n pDstAnchor.y = isBottom ? pDstPort.y + ANCHOR_OFFSET : pDstPort.y - ANCHOR_OFFSET;\n } else {\n const isRight = pDstPort.x > (dst.x ?? 0);\n pDstAnchor.x = isRight ? pDstPort.x + ANCHOR_OFFSET : pDstPort.x - ANCHOR_OFFSET;\n }\n const isPointInObstacle = /* @__PURE__ */ __name((pt, excludeNodeIds) => {\n for (const obs of obstacles) {\n if (excludeNodeIds.includes(obs.nodeId)) {\n continue;\n }\n if (pt.x > obs.minX && pt.x < obs.maxX && pt.y > obs.minY && pt.y < obs.maxY) {\n return { inside: true, obstacle: obs };\n }\n }\n return { inside: false };\n }, \"isPointInObstacle\");\n const obstacleDetour = /* @__PURE__ */ __name((port, node, opposite, obs, portIsVertical) => {\n if (portIsVertical) {\n const leavesPositiveSide2 = port.y > (node.y ?? 0);\n const goRight = (opposite.x ?? 0) >= port.x;\n return {\n x: goRight ? obs.maxX + HORIZONTAL_PIPE_MARGIN : obs.minX - HORIZONTAL_PIPE_MARGIN,\n y: leavesPositiveSide2 ? obs.maxY + VERTICAL_PIPE_MARGIN : obs.minY - VERTICAL_PIPE_MARGIN,\n leavesPositiveSide: leavesPositiveSide2\n };\n }\n const leavesPositiveSide = port.x > (node.x ?? 0);\n const goDown = (opposite.y ?? 0) >= port.y;\n return {\n x: leavesPositiveSide ? obs.maxX + HORIZONTAL_PIPE_MARGIN : obs.minX - HORIZONTAL_PIPE_MARGIN,\n y: goDown ? obs.maxY + VERTICAL_PIPE_MARGIN : obs.minY - VERTICAL_PIPE_MARGIN,\n leavesPositiveSide\n };\n }, \"obstacleDetour\");\n let srcHandleWaypoints = [];\n const endpointIds = [e.start, e.end];\n const srcCheck = isPointInObstacle(pSrcAnchor, endpointIds);\n if (srcCheck.inside && srcCheck.obstacle) {\n const obs = srcCheck.obstacle;\n if (srcPortIsVertical) {\n const detour = obstacleDetour(pSrcPort, src, dst, obs, true);\n pSrcAnchor.x = detour.x;\n pSrcAnchor.y = detour.y;\n const gapY = detour.leavesPositiveSide ? Math.min(obs.minY - 2, pSrcPort.y + ANCHOR_OFFSET) : Math.max(obs.maxY + 2, pSrcPort.y - ANCHOR_OFFSET);\n srcHandleWaypoints = [\n { x: pSrcPort.x, y: gapY },\n // Orthogonal step in the gap\n { x: detour.x, y: gapY },\n // Horizontal detour\n { x: detour.x, y: detour.y }\n // Down past obstacle\n ];\n } else {\n const detour = obstacleDetour(pSrcPort, src, dst, obs, false);\n const gapX = detour.leavesPositiveSide ? Math.min(obs.minX - 2, pSrcPort.x + ANCHOR_OFFSET) : Math.max(obs.maxX + 2, pSrcPort.x - ANCHOR_OFFSET);\n pSrcAnchor.x = detour.x;\n pSrcAnchor.y = detour.y;\n srcHandleWaypoints = [\n { x: gapX, y: pSrcPort.y },\n // Orthogonal step in the gap\n { x: gapX, y: detour.y },\n // Vertical detour\n { x: detour.x, y: detour.y }\n // Horizontal past obstacle\n ];\n }\n }\n let dstHandleWaypoints = [];\n const dstCheck = isPointInObstacle(pDstAnchor, endpointIds);\n if (dstCheck.inside && dstCheck.obstacle) {\n const obs = dstCheck.obstacle;\n if (dstPortIsVertical) {\n const detour = obstacleDetour(pDstPort, dst, src, obs, true);\n pDstAnchor.x = detour.x;\n pDstAnchor.y = detour.y;\n dstHandleWaypoints = [\n { x: detour.x, y: detour.y },\n // From anchor position\n { x: pDstPort.x, y: detour.y }\n // Go sideways to port's X\n // Then orthogonally to port\n ];\n } else {\n const detour = obstacleDetour(pDstPort, dst, src, obs, false);\n pDstAnchor.x = detour.x;\n pDstAnchor.y = detour.y;\n dstHandleWaypoints = [\n { x: detour.x, y: detour.y },\n // From anchor position\n { x: detour.x, y: pDstPort.y }\n // Go vertically to port's Y\n ];\n }\n }\n if (srcHandleWaypoints.length === 0 && dstHandleWaypoints.length === 0) {\n const hpMargin = HORIZONTAL_PIPE_MARGIN;\n const anchorsSameX = Math.abs(pSrcAnchor.x - pDstAnchor.x) < hpMargin;\n const anchorsSameY = Math.abs(pSrcAnchor.y - pDstAnchor.y) < hpMargin;\n const hasPortOffset = portOffsets.get(`${i}:src`) !== void 0 || portOffsets.get(`${i}:dst`) !== void 0;\n const srcFaceTotal = (portGroups.get(`${e.start ?? \"\"}:${srcPortSide}:src`)?.length ?? 0) + (portGroups.get(`${e.start ?? \"\"}:${srcPortSide}:dst`)?.length ?? 0);\n const dstFaceTotal = (portGroups.get(`${e.end ?? \"\"}:${dstPortSide}:src`)?.length ?? 0) + (portGroups.get(`${e.end ?? \"\"}:${dstPortSide}:dst`)?.length ?? 0);\n const faceContested = srcFaceTotal > 1 || dstFaceTotal > 1;\n const srcIncidentTotal = incidentEdgeTotals.get(e.start ?? \"\") ?? 0;\n const dstIncidentTotal = incidentEdgeTotals.get(e.end ?? \"\") ?? 0;\n const contestedFaceHasLabel = srcFaceTotal > 1 && faceHasLabelNode(e.start, srcPortSide) || dstFaceTotal > 1 && faceHasLabelNode(e.end, dstPortSide);\n const srcContestAllowsCenteredStraight = srcFaceTotal <= 1 || srcIncidentTotal <= 2;\n const dstContestAllowsCenteredStraight = dstFaceTotal <= 1 || dstIncidentTotal <= 2;\n const canPreserveSimpleContestedStraight = faceContested && !contestedFaceHasLabel && srcContestAllowsCenteredStraight && dstContestAllowsCenteredStraight;\n if ((anchorsSameX || anchorsSameY) && !hasPortOffset && (!faceContested || canPreserveSimpleContestedStraight)) {\n const directBlocked = isSegmentBlocked(pSrcPort, pDstPort, e.start, e.end);\n if (!directBlocked) {\n e.points = [{ ...pSrcPort }, { ...pSrcAnchor }, { ...pDstAnchor }, { ...pDstPort }];\n straightIntraLaneEdges.add(i);\n const fastPathOrientation = anchorsSameY ? \"horizontal\" : \"vertical\";\n const fastPathCoord = anchorsSameY ? pSrcPort.y : pSrcPort.x;\n const fastPathFrom = anchorsSameY ? Math.min(pSrcPort.x, pDstPort.x) : Math.min(pSrcPort.y, pDstPort.y);\n const fastPathTo = anchorsSameY ? Math.max(pSrcPort.x, pDstPort.x) : Math.max(pSrcPort.y, pDstPort.y);\n const fastPathPipe = {\n id: `fast-path-${fastPathOrientation}-${fastPathCoord.toFixed(0)}-${i}`,\n orientation: fastPathOrientation,\n coord: fastPathCoord,\n spanMin: fastPathFrom,\n spanMax: fastPathTo,\n tracks: []\n };\n allRoutedSegments.push({\n edgeIndex: i,\n segmentIndex: 0,\n orientation: fastPathOrientation,\n pipe: fastPathPipe,\n trackIndex: 0,\n from: fastPathFrom,\n to: fastPathTo\n });\n continue;\n }\n }\n }\n const srcPipe = getOrAddPipe(\"vertical\", pSrcAnchor.x, pSrcAnchor.y, pSrcAnchor.y);\n pSrcAnchor.x = srcPipe.coord;\n const dstPipe = getOrAddPipe(\"vertical\", pDstAnchor.x, pDstAnchor.y, pDstAnchor.y);\n pDstAnchor.x = dstPipe.coord;\n let bbMinX = Math.min(pSrcAnchor.x, pDstAnchor.x) - 50;\n let bbMaxX = Math.max(pSrcAnchor.x, pDstAnchor.x) + 50;\n let bbMinY = Math.min(pSrcAnchor.y, pDstAnchor.y) - 50;\n let bbMaxY = Math.max(pSrcAnchor.y, pDstAnchor.y) + 50;\n for (const obs of obstacles) {\n const pathMinX = Math.min(pSrcAnchor.x, pDstAnchor.x);\n const pathMaxX = Math.max(pSrcAnchor.x, pDstAnchor.x);\n const pathMinY = Math.min(pSrcAnchor.y, pDstAnchor.y);\n const pathMaxY = Math.max(pSrcAnchor.y, pDstAnchor.y);\n const obsBlocksPath = obs.minX < pathMaxX && obs.maxX > pathMinX && obs.minY < pathMaxY && obs.maxY > pathMinY;\n if (obsBlocksPath) {\n bbMinX = Math.min(bbMinX, obs.minX - ROUTING_MARGIN);\n bbMaxX = Math.max(bbMaxX, obs.maxX + ROUTING_MARGIN);\n bbMinY = Math.min(bbMinY, obs.minY - ROUTING_MARGIN);\n bbMaxY = Math.max(bbMaxY, obs.maxY + ROUTING_MARGIN);\n }\n }\n for (const obs of obstacles) {\n if (obs.maxX < bbMinX || obs.minX > bbMaxX || obs.maxY < bbMinY || obs.minY > bbMaxY) {\n continue;\n }\n const hMargin = HORIZONTAL_PIPE_MARGIN;\n getOrAddPipe(\"horizontal\", obs.minY - hMargin, bbMinX, bbMaxX);\n getOrAddPipe(\"horizontal\", obs.maxY + hMargin, bbMinX, bbMaxX);\n const vMargin = VERTICAL_PIPE_MARGIN;\n getOrAddPipe(\"vertical\", obs.minX - vMargin, bbMinY, bbMaxY);\n getOrAddPipe(\"vertical\", obs.maxX + vMargin, bbMinY, bbMaxY);\n }\n getOrAddPipe(\"horizontal\", pSrcAnchor.y, bbMinX, bbMaxX);\n getOrAddPipe(\"horizontal\", pDstAnchor.y, bbMinX, bbMaxX);\n const hPipes = pipes.filter(\n (p) => p.orientation === \"horizontal\" && p.coord >= bbMinY && p.coord <= bbMaxY\n );\n const vPipes = pipes.filter(\n (p) => p.orientation === \"vertical\" && p.coord >= bbMinX && p.coord <= bbMaxX\n );\n const getKey = /* @__PURE__ */ __name((x, y) => `${x.toFixed(1)},${y.toFixed(1)}`, \"getKey\");\n const startKey = getKey(pSrcAnchor.x, pSrcAnchor.y);\n const endKey = getKey(pDstAnchor.x, pDstAnchor.y);\n const gScore = /* @__PURE__ */ new Map();\n const cameFrom = /* @__PURE__ */ new Map();\n const arrivalDir = /* @__PURE__ */ new Map();\n const openSet = /* @__PURE__ */ new Set();\n const openList = [];\n gScore.set(startKey, 0);\n arrivalDir.set(startKey, \"n\");\n openList.push({\n key: startKey,\n f: Math.hypot(pDstAnchor.x - pSrcAnchor.x, pDstAnchor.y - pSrcAnchor.y),\n pt: pSrcAnchor\n });\n openSet.add(startKey);\n let foundPath = [];\n const checkSegmentBlocked = /* @__PURE__ */ __name((p1, p2) => {\n return isSegmentBlocked(p1, p2, e.start, e.end);\n }, \"checkSegmentBlocked\");\n const cornerHV = { x: pDstAnchor.x, y: pSrcAnchor.y };\n const seg1HV_blocked = checkSegmentBlocked(pSrcAnchor, cornerHV);\n const seg2HV_blocked = checkSegmentBlocked(cornerHV, pDstAnchor);\n const pathHV_blocked = seg1HV_blocked || seg2HV_blocked;\n const cornerVH = { x: pSrcAnchor.x, y: pDstAnchor.y };\n const seg1VH_blocked = checkSegmentBlocked(pSrcAnchor, cornerVH);\n const seg2VH_blocked = checkSegmentBlocked(cornerVH, pDstAnchor);\n const pathVH_blocked = seg1VH_blocked || seg2VH_blocked;\n if (!pathHV_blocked) {\n if (Math.abs(pSrcAnchor.y - pDstAnchor.y) < EPS7 || Math.abs(pSrcAnchor.x - pDstAnchor.x) < EPS7) {\n foundPath = [pSrcAnchor, pDstAnchor];\n } else {\n foundPath = [pSrcAnchor, cornerHV, pDstAnchor];\n }\n } else if (!pathVH_blocked) {\n if (Math.abs(pSrcAnchor.x - pDstAnchor.x) < EPS7) {\n foundPath = [pSrcAnchor, pDstAnchor];\n } else {\n foundPath = [pSrcAnchor, cornerVH, pDstAnchor];\n }\n }\n if (foundPath.length === 0) {\n while (openList.length > 0) {\n openList.sort((a, b) => a.f - b.f);\n const current = openList.shift();\n openSet.delete(current.key);\n if (current.key === endKey) {\n let currKey = endKey;\n let currPt = pDstAnchor;\n foundPath = [currPt];\n while (cameFrom.has(currKey)) {\n const prev = cameFrom.get(currKey);\n foundPath.unshift(prev);\n currPt = prev;\n currKey = getKey(prev.x, prev.y);\n }\n break;\n }\n const cx = current.pt.x;\n const cy = current.pt.y;\n const sortedVPipes = vPipes.sort((a, b) => a.coord - b.coord);\n const vIdx = sortedVPipes.findIndex((p) => Math.abs(p.coord - cx) < 1);\n const hPipesSorted = hPipes.sort((a, b) => a.coord - b.coord);\n const hIdx = hPipesSorted.findIndex((p) => Math.abs(p.coord - cy) < 1);\n const neighbors = [];\n if (vIdx > 0) {\n neighbors.push({ x: sortedVPipes[vIdx - 1].coord, y: cy });\n }\n if (vIdx >= 0 && vIdx < sortedVPipes.length - 1) {\n neighbors.push({ x: sortedVPipes[vIdx + 1].coord, y: cy });\n }\n if (hIdx > 0) {\n neighbors.push({ x: cx, y: hPipesSorted[hIdx - 1].coord });\n }\n if (hIdx >= 0 && hIdx < hPipesSorted.length - 1) {\n neighbors.push({ x: cx, y: hPipesSorted[hIdx + 1].coord });\n }\n for (const neighbor of neighbors) {\n const minX = Math.min(cx, neighbor.x);\n const maxX = Math.max(cx, neighbor.x);\n const minY = Math.min(cy, neighbor.y);\n const maxY = Math.max(cy, neighbor.y);\n const blocked = obstacles.some((obs) => {\n if (obs.nodeId === e.start || obs.nodeId === e.end) {\n return false;\n }\n if (minX !== maxX) {\n return obs.minY < cy && obs.maxY > cy && obs.maxX > minX && obs.minX < maxX;\n } else {\n return obs.minX < cx && obs.maxX > cx && obs.maxY > minY && obs.minY < maxY;\n }\n });\n if (blocked) {\n continue;\n }\n const nKey = getKey(neighbor.x, neighbor.y);\n const dist = Math.abs(neighbor.x - cx) + Math.abs(neighbor.y - cy);\n const penalty = crossingPenalty(i, current.pt, neighbor);\n let dirPenalty = 0;\n const destDx = pDstAnchor.x - pSrcAnchor.x;\n const destDy = pDstAnchor.y - pSrcAnchor.y;\n const moveDx = neighbor.x - cx;\n const moveDy = neighbor.y - cy;\n if (destDy > 10 && moveDy < -5 || destDy < -10 && moveDy > 5) {\n dirPenalty = Math.abs(moveDy) * 100;\n }\n if (destDx > 10 && moveDx < -5 || destDx < -10 && moveDx > 5) {\n dirPenalty += Math.abs(moveDx) * 50;\n }\n let bendPenalty = 0;\n const currentDir = arrivalDir.get(current.key) ?? \"n\";\n const moveDir = Math.abs(moveDx) > EPS7 ? \"h\" : \"v\";\n if (currentDir !== \"n\" && currentDir !== moveDir) {\n bendPenalty = 50;\n }\n const stepCost = dist + penalty + dirPenalty + bendPenalty;\n const tentativeG = (gScore.get(current.key) ?? Infinity) + stepCost;\n const h = Math.abs(pDstAnchor.x - neighbor.x) + Math.abs(pDstAnchor.y - neighbor.y);\n if (tentativeG < (gScore.get(nKey) ?? Infinity)) {\n cameFrom.set(nKey, current.pt);\n gScore.set(nKey, tentativeG);\n arrivalDir.set(nKey, moveDir);\n if (!openSet.has(nKey)) {\n openList.push({ key: nKey, f: tentativeG + h, pt: neighbor });\n openSet.add(nKey);\n } else {\n const idx = openList.findIndex((x) => x.key === nKey);\n if (idx !== -1) {\n openList[idx].f = tentativeG + h;\n }\n }\n }\n }\n }\n }\n if (foundPath.length === 0) {\n foundPath = [pSrcAnchor, { x: pSrcAnchor.x, y: pDstAnchor.y }, pDstAnchor];\n }\n if (foundPath.length > 4) {\n const start = foundPath[0];\n const end = foundPath[foundPath.length - 1];\n let minX = Math.min(start.x, end.x);\n let maxX = Math.max(start.x, end.x);\n let minY = Math.min(start.y, end.y);\n let maxY = Math.max(start.y, end.y);\n for (const pt of foundPath) {\n minX = Math.min(minX, pt.x);\n maxX = Math.max(maxX, pt.x);\n minY = Math.min(minY, pt.y);\n maxY = Math.max(maxY, pt.y);\n }\n const wentRight = maxX > Math.max(start.x, end.x);\n const wentLeft = minX < Math.min(start.x, end.x);\n if (isLR) {\n const margin = VERTICAL_PIPE_MARGIN;\n if (wentRight) {\n const pathX = Math.max(start.x, end.x);\n const pathMinY = Math.min(start.y, end.y);\n const pathMaxY = Math.max(start.y, end.y);\n const detourObstacles = obstacles.filter(\n (obs) => obs.minX < pathX && obs.maxX > pathX && // obstacle's x-range contains the path x\n obs.minY < pathMaxY && obs.maxY > pathMinY\n // obstacle's y-range overlaps with path y-range\n );\n if (detourObstacles.length > 0) {\n let visualMaxX = Math.max(start.x, end.x);\n for (const obs of detourObstacles) {\n const obsCenterX = (obs.minX + obs.maxX) / 2;\n if (obs.visualXHalfExtent === void 0 || isNaN(obs.visualXHalfExtent)) {\n continue;\n }\n const visualRight = obsCenterX + obs.visualXHalfExtent + margin;\n visualMaxX = Math.max(visualMaxX, visualRight);\n }\n if (!isNaN(visualMaxX)) {\n maxX = visualMaxX;\n }\n }\n }\n if (wentLeft) {\n const detourObstacles = obstacles.filter(\n (obs) => obs.minX < Math.min(start.x, end.x) + margin && // obstacle extends past the direct path\n obs.minY < Math.max(start.y, end.y) && obs.maxY > Math.min(start.y, end.y)\n // obstacle is in Y range\n );\n if (detourObstacles.length > 0) {\n let visualMinX = Math.min(start.x, end.x);\n for (const obs of detourObstacles) {\n const obsCenterX = (obs.minX + obs.maxX) / 2;\n const visualLeft = obsCenterX - obs.visualXHalfExtent - margin;\n visualMinX = Math.min(visualMinX, visualLeft);\n }\n minX = visualMinX;\n }\n }\n }\n const findBestReturnY = /* @__PURE__ */ __name((detourX) => {\n const goingDown = end.y > start.y;\n const relevantObs = obstacles.filter((obs) => {\n const obsInXRange = Math.min(start.x, end.x) < obs.maxX && Math.max(start.x, end.x) > obs.minX;\n const obsInYRange = Math.min(start.y, end.y) < obs.maxY && Math.max(start.y, end.y) > obs.minY;\n return obsInXRange && obsInYRange;\n });\n let filteredObs = relevantObs;\n if (isLR && relevantObs.length > 0) {\n const obsAtDetourX = relevantObs.filter(\n (obs) => obs.minX < detourX && obs.maxX > detourX\n );\n if (obsAtDetourX.length > 0) {\n filteredObs = obsAtDetourX;\n }\n }\n if (filteredObs.length === 0) {\n return end.y;\n }\n const margin = HORIZONTAL_PIPE_MARGIN;\n if (goingDown) {\n const lowestObsBottom = Math.max(...filteredObs.map((obs) => obs.maxY));\n const bestY = lowestObsBottom + margin;\n if (bestY < end.y - EPS7) {\n return bestY;\n }\n } else {\n const highestObsTop = Math.min(...filteredObs.map((obs) => obs.minY));\n const bestY = highestObsTop - margin;\n if (bestY > end.y + EPS7) {\n return bestY;\n }\n }\n return end.y;\n }, \"findBestReturnY\");\n const trySimplifyWithDetourX = /* @__PURE__ */ __name((detourX) => {\n const bestY = findBestReturnY(detourX);\n const corner1 = { x: detourX, y: start.y };\n const corner2 = { x: detourX, y: bestY };\n const corner3 = { x: end.x, y: bestY };\n const seg1Blocked = checkSegmentBlocked(start, corner1);\n const seg2Blocked = checkSegmentBlocked(corner1, corner2);\n const seg3Blocked = checkSegmentBlocked(corner2, corner3);\n const seg4Blocked = bestY !== end.y ? checkSegmentBlocked(corner3, end) : false;\n if (!seg1Blocked && !seg2Blocked && !seg3Blocked && !seg4Blocked) {\n if (Math.abs(bestY - end.y) < EPS7) {\n return [start, corner1, corner2, end];\n }\n return [start, corner1, corner2, corner3, end];\n }\n return null;\n }, \"trySimplifyWithDetourX\");\n const simplified2 = wentRight && !wentLeft ? trySimplifyWithDetourX(maxX) : wentLeft && !wentRight ? trySimplifyWithDetourX(minX) : null;\n if (simplified2) {\n foundPath = simplified2;\n }\n }\n const fullPoints = [\n pSrcPort,\n ...srcHandleWaypoints,\n ...foundPath,\n ...dstHandleWaypoints.reverse(),\n // Reverse because they're stored anchor->waypoint->port\n pDstPort\n ];\n if (fullPoints.length >= 3) {\n const C = fullPoints[fullPoints.length - 1];\n const B = fullPoints[fullPoints.length - 2];\n const A = fullPoints[fullPoints.length - 3];\n const isHoriz = Math.abs(A.y - B.y) < EPS7 && Math.abs(B.y - C.y) < EPS7;\n const isVert = Math.abs(A.x - B.x) < EPS7 && Math.abs(B.x - C.x) < EPS7;\n if (isHoriz) {\n const signAB = Math.sign(B.x - A.x);\n const signAC = Math.sign(C.x - A.x);\n if (signAB !== 0 && signAB === signAC && Math.abs(B.x - A.x) > Math.abs(C.x - A.x)) {\n fullPoints.splice(-2, 1);\n }\n } else if (isVert) {\n const signAB = Math.sign(B.y - A.y);\n const signAC = Math.sign(C.y - A.y);\n if (signAB !== 0 && signAB === signAC && Math.abs(B.y - A.y) > Math.abs(C.y - A.y)) {\n fullPoints.splice(-2, 1);\n }\n }\n }\n const simplified = [fullPoints[0]];\n for (let k = 1; k < fullPoints.length - 1; k++) {\n if (k === 1) {\n simplified.push(fullPoints[k]);\n continue;\n }\n const prev = simplified[simplified.length - 1];\n const curr = fullPoints[k];\n const next = fullPoints[k + 1];\n if (Math.abs(prev.y - curr.y) < EPS7 && Math.abs(curr.y - next.y) < EPS7) {\n const dir1 = curr.x > prev.x;\n const dir2 = next.x > curr.x;\n if (dir1 !== dir2) {\n simplified.push(curr);\n continue;\n }\n continue;\n }\n if (Math.abs(prev.x - curr.x) < EPS7 && Math.abs(curr.x - next.x) < EPS7) {\n const dir1 = curr.y > prev.y;\n const dir2 = next.y > curr.y;\n if (dir1 !== dir2) {\n simplified.push(curr);\n continue;\n }\n continue;\n }\n simplified.push(curr);\n }\n simplified.push(fullPoints[fullPoints.length - 1]);\n for (let k = 0; k < simplified.length - 1; k++) {\n const p1 = simplified[k];\n const p2 = simplified[k + 1];\n const orientation = Math.abs(p1.x - p2.x) < EPS7 ? \"vertical\" : \"horizontal\";\n const coord = orientation === \"vertical\" ? p1.x : p1.y;\n const from = orientation === \"vertical\" ? Math.min(p1.y, p2.y) : Math.min(p1.x, p2.x);\n const to = orientation === \"vertical\" ? Math.max(p1.y, p2.y) : Math.max(p1.x, p2.x);\n const pipe = getOrAddPipe(orientation, coord, from, to);\n const rSeg = {\n edgeIndex: i,\n segmentIndex: k,\n orientation,\n pipe,\n trackIndex: 0,\n // Initial track\n from,\n to\n };\n allRoutedSegments.push(rSeg);\n edgeSegmentIndices[i].push(allRoutedSegments.length - 1);\n if (!pipe.tracks[0]) {\n pipe.tracks[0] = { index: 0, coord: pipe.coord, segments: [] };\n }\n pipe.tracks[0].segments.push({\n edgeIndex: i,\n segmentIndex: k,\n from,\n to\n });\n }\n }\n const segmentsOverlap = /* @__PURE__ */ __name((s1, s2) => {\n return s1.from < s2.to && s2.from < s1.to;\n }, \"segmentsOverlap\");\n const trySwapSegmentsAcrossTracks = /* @__PURE__ */ __name((s1, s2, t1, t2) => {\n const canS1GoT2 = !t2.segments.some(\n (r) => (r.edgeIndex !== s2.edgeIndex || r.segmentIndex !== s2.segmentIndex) && segmentsOverlap(r, s1)\n );\n const canS2GoT1 = !t1.segments.some(\n (r) => (r.edgeIndex !== s1.edgeIndex || r.segmentIndex !== s1.segmentIndex) && segmentsOverlap(r, s2)\n );\n if (canS1GoT2 && canS2GoT1) {\n s1.trackIndex = t2.index;\n s2.trackIndex = t1.index;\n t1.segments = [\n ...t1.segments.filter(\n (r) => r.edgeIndex !== s1.edgeIndex || r.segmentIndex !== s1.segmentIndex\n ),\n {\n edgeIndex: s2.edgeIndex,\n segmentIndex: s2.segmentIndex,\n from: s2.from,\n to: s2.to\n }\n ];\n t2.segments = [\n ...t2.segments.filter(\n (r) => r.edgeIndex !== s2.edgeIndex || r.segmentIndex !== s2.segmentIndex\n ),\n {\n edgeIndex: s1.edgeIndex,\n segmentIndex: s1.segmentIndex,\n from: s1.from,\n to: s1.to\n }\n ];\n return true;\n }\n return false;\n }, \"trySwapSegmentsAcrossTracks\");\n const createNewTrack = /* @__PURE__ */ __name((pipe) => {\n const idx = pipe.tracks.length;\n pipe.tracks[idx] = { index: idx, coord: pipe.coord, segments: [] };\n return idx;\n }, \"createNewTrack\");\n const moveSegmentToTrack = /* @__PURE__ */ __name((seg, trackIdx) => {\n const oldTrack = seg.pipe.tracks[seg.trackIndex];\n oldTrack.segments = oldTrack.segments.filter(\n (r) => r.edgeIndex !== seg.edgeIndex || r.segmentIndex !== seg.segmentIndex\n );\n seg.trackIndex = trackIdx;\n const newTrack = seg.pipe.tracks[trackIdx];\n newTrack.segments.push({\n edgeIndex: seg.edgeIndex,\n segmentIndex: seg.segmentIndex,\n from: seg.from,\n to: seg.to\n });\n }, \"moveSegmentToTrack\");\n const moveSegmentChainToTrack = /* @__PURE__ */ __name((seg, trackIdx) => {\n const indices = edgeSegmentIndices[seg.edgeIndex];\n for (const idx of indices) {\n const s = allRoutedSegments[idx];\n if (s.pipe === seg.pipe) {\n moveSegmentToTrack(s, trackIdx);\n }\n }\n }, \"moveSegmentChainToTrack\");\n const getAdjacentSegmentsAlongEdge = /* @__PURE__ */ __name((seg) => {\n const indices = edgeSegmentIndices[seg.edgeIndex];\n const idxInList = indices.indexOf(allRoutedSegments.indexOf(seg));\n const adj = [];\n if (idxInList > 0) {\n adj.push(allRoutedSegments[indices[idxInList - 1]]);\n }\n if (idxInList < indices.length - 1) {\n adj.push(allRoutedSegments[indices[idxInList + 1]]);\n }\n return adj;\n }, \"getAdjacentSegmentsAlongEdge\");\n const haveAnyCrossing = /* @__PURE__ */ __name((segA, segB) => {\n if (segA.orientation === segB.orientation) {\n return false;\n }\n const h = segA.orientation === \"horizontal\" ? segA : segB;\n const v = segA.orientation === \"horizontal\" ? segB : segA;\n return v.pipe.coord > h.from && v.pipe.coord < h.to && h.pipe.coord > v.from && h.pipe.coord < v.to;\n }, \"haveAnyCrossing\");\n const findAvailableTrack = /* @__PURE__ */ __name((pipe, seg) => {\n for (const track of pipe.tracks) {\n const overlap = track.segments.some(\n (r) => (r.edgeIndex !== seg.edgeIndex || r.segmentIndex !== seg.segmentIndex) && segmentsOverlap(r, seg)\n );\n if (!overlap) {\n return track.index;\n }\n }\n return -1;\n }, \"findAvailableTrack\");\n const segmentsConflict = /* @__PURE__ */ __name((s1, s2) => {\n if (s1.trackIndex === s2.trackIndex) {\n return segmentsOverlap(s1, s2);\n }\n const adj1 = getAdjacentSegmentsAlongEdge(s1);\n const adj2 = getAdjacentSegmentsAlongEdge(s2);\n return adj1.some((a1) => adj2.some((a2) => haveAnyCrossing(a1, a2)));\n }, \"segmentsConflict\");\n const resolveTrackConflict = /* @__PURE__ */ __name((s1, s2, move) => {\n if (trySwapSegmentsAcrossTracks(\n s1,\n s2,\n s1.pipe.tracks[s1.trackIndex],\n s2.pipe.tracks[s2.trackIndex]\n )) {\n return;\n }\n const avail = findAvailableTrack(s1.pipe, s2);\n move(s2, avail !== -1 ? avail : createNewTrack(s1.pipe));\n }, \"resolveTrackConflict\");\n const resolveHandleConflicts = /* @__PURE__ */ __name((handles) => {\n let crossings = 0;\n for (let i = 0; i < handles.length; i++) {\n for (let j = i + 1; j < handles.length; j++) {\n const h1 = handles[i];\n const h2 = handles[j];\n if (h1.pipe !== h2.pipe) {\n continue;\n }\n if (segmentsConflict(h1, h2)) {\n crossings++;\n resolveTrackConflict(h1, h2, moveSegmentChainToTrack);\n }\n }\n }\n return crossings;\n }, \"resolveHandleConflicts\");\n const destInfoCache = /* @__PURE__ */ new Map();\n const getDestInfo = /* @__PURE__ */ __name((edgeIdx) => {\n if (destInfoCache.has(edgeIdx)) {\n return destInfoCache.get(edgeIdx);\n }\n const indices = edgeSegmentIndices[edgeIdx];\n if (indices.length === 0) {\n const info2 = { dest: 0, deviation: 0, base: 0, delta: 0 };\n destInfoCache.set(edgeIdx, info2);\n return info2;\n }\n const firstSeg = allRoutedSegments[indices[0]];\n const base = firstSeg.pipe.coord;\n let dest = base;\n for (let idx = 1; idx < indices.length; idx++) {\n const seg = allRoutedSegments[indices[idx]];\n if (seg.orientation === \"horizontal\") {\n const candidateA = seg.from;\n const candidateB = seg.to;\n dest = Math.abs(candidateA - base) > Math.abs(candidateB - base) ? candidateA : candidateB;\n break;\n }\n }\n const deviation = Math.abs(dest - base);\n const info = { dest, deviation, base, delta: dest - base };\n destInfoCache.set(edgeIdx, info);\n return info;\n }, \"getDestInfo\");\n const fixSourceHandleCrossings = /* @__PURE__ */ __name(() => {\n let crossings = 0;\n const edgesBySource = /* @__PURE__ */ new Map();\n for (const [i, e] of edges.entries()) {\n if (edgeSegmentIndices[i].length === 0) {\n continue;\n }\n if (!e.start) {\n continue;\n }\n if (!edgesBySource.has(e.start)) {\n edgesBySource.set(e.start, []);\n }\n edgesBySource.get(e.start).push(i);\n }\n const getEdgeDistance = /* @__PURE__ */ __name((edgeIdx) => {\n const edge = edges[edgeIdx];\n if (!edge.start || !edge.end) {\n return 0;\n }\n const srcNode = nodeById.get(edge.start);\n const dstNode = nodeById.get(edge.end);\n if (!srcNode || !dstNode) {\n return 0;\n }\n const dx = (dstNode.x ?? 0) - (srcNode.x ?? 0);\n const dy = (dstNode.y ?? 0) - (srcNode.y ?? 0);\n return Math.abs(dx) + Math.abs(dy);\n }, \"getEdgeDistance\");\n for (const grp of edgesBySource.values()) {\n grp.sort((a, b) => {\n const infoA = getDestInfo(a);\n const infoB = getDestInfo(b);\n if (Math.abs(infoA.deviation - infoB.deviation) > 1) {\n return infoA.deviation - infoB.deviation;\n }\n if (Math.abs(infoA.dest - infoB.dest) > 1) {\n return infoA.dest - infoB.dest;\n }\n const distA = getEdgeDistance(a);\n const distB = getEdgeDistance(b);\n if (Math.abs(distA - distB) > 1) {\n return distB - distA;\n }\n const lenA = edgeSegmentIndices[a].length;\n const lenB = edgeSegmentIndices[b].length;\n if (lenA !== lenB) {\n return lenA - lenB;\n }\n if (lenA === 1) {\n const idxA = edgeSegmentIndices[a][0];\n const idxB = edgeSegmentIndices[b][0];\n if (allRoutedSegments[idxA] && allRoutedSegments[idxB]) {\n const segA = allRoutedSegments[idxA];\n const segB = allRoutedSegments[idxB];\n const distA2 = Math.abs(segA.to - segA.from);\n const distB2 = Math.abs(segB.to - segB.from);\n if (Math.abs(distA2 - distB2) > 1) {\n return distA2 - distB2;\n }\n }\n }\n return 0;\n });\n const handles = grp.map((ei) => allRoutedSegments[edgeSegmentIndices[ei][0]]);\n crossings += resolveHandleConflicts(handles);\n }\n return crossings;\n }, \"fixSourceHandleCrossings\");\n const fixTargetHandleCrossings = /* @__PURE__ */ __name(() => {\n let crossings = 0;\n const edgesByTarget = /* @__PURE__ */ new Map();\n for (const [i, e] of edges.entries()) {\n const indices = edgeSegmentIndices[i];\n if (indices.length === 0) {\n continue;\n }\n if (!e.end) {\n continue;\n }\n if (!edgesByTarget.has(e.end)) {\n edgesByTarget.set(e.end, []);\n }\n edgesByTarget.get(e.end).push(i);\n }\n for (const grp of edgesByTarget.values()) {\n grp.sort((a, b) => {\n const getDist = /* @__PURE__ */ __name((edgeIdx) => {\n const indices = edgeSegmentIndices[edgeIdx];\n if (indices.length < 2) {\n return 0;\n }\n const prev = allRoutedSegments[indices[indices.length - 2]];\n return Math.abs(prev.to - prev.from);\n }, \"getDist\");\n const scoreA = getDist(a);\n const scoreB = getDist(b);\n if (Math.abs(scoreA - scoreB) > 0.1) {\n return scoreA - scoreB;\n }\n return a - b;\n });\n const handles = grp.map(\n (ei) => allRoutedSegments[edgeSegmentIndices[ei][edgeSegmentIndices[ei].length - 1]]\n );\n crossings += resolveHandleConflicts(handles);\n }\n return crossings;\n }, \"fixTargetHandleCrossings\");\n const fixPipeCrossings = /* @__PURE__ */ __name(() => {\n let crossings = 0;\n for (const pipe of pipes) {\n const pipeSegments = [];\n for (const t of pipe.tracks) {\n for (const ref of t.segments) {\n const idx = edgeSegmentIndices[ref.edgeIndex].find(\n (ix) => allRoutedSegments[ix].segmentIndex === ref.segmentIndex\n );\n if (idx !== void 0) {\n pipeSegments.push(allRoutedSegments[idx]);\n }\n }\n }\n pipeSegments.sort((a, b) => a.edgeIndex - b.edgeIndex || a.segmentIndex - b.segmentIndex);\n for (let i = 0; i < pipeSegments.length; i++) {\n for (let j = i + 1; j < pipeSegments.length; j++) {\n const s1 = pipeSegments[i];\n const s2 = pipeSegments[j];\n if (segmentsConflict(s1, s2)) {\n crossings++;\n resolveTrackConflict(s1, s2, moveSegmentToTrack);\n }\n }\n }\n }\n return crossings;\n }, \"fixPipeCrossings\");\n let iterations = 0;\n const MAX_ITER = 10;\n while (iterations < MAX_ITER) {\n let changed = 0;\n changed += fixSourceHandleCrossings();\n changed += fixTargetHandleCrossings();\n changed += fixPipeCrossings();\n if (changed === 0) {\n break;\n }\n iterations++;\n }\n const segmentCoords = /* @__PURE__ */ new Map();\n for (const pipe of pipes) {\n const segments = [];\n pipe.tracks.forEach((t) => {\n t.segments.forEach((s) => {\n segments.push({\n edgeIndex: s.edgeIndex,\n segmentIndex: s.segmentIndex,\n trackIndex: t.index,\n from: s.from,\n to: s.to\n });\n });\n });\n segments.sort((a, b) => a.from - b.from);\n const clusters = [];\n if (segments.length > 0) {\n let currentCluster = [segments[0]];\n let clusterEnd = segments[0].to;\n for (let k = 1; k < segments.length; k++) {\n const s = segments[k];\n if (s.from < clusterEnd) {\n currentCluster.push(s);\n clusterEnd = Math.max(clusterEnd, s.to);\n } else {\n clusters.push(currentCluster);\n currentCluster = [s];\n clusterEnd = s.to;\n }\n }\n clusters.push(currentCluster);\n }\n for (const cluster of clusters) {\n const usedTracks = /* @__PURE__ */ new Set();\n cluster.forEach((s) => usedTracks.add(s.trackIndex));\n const trackScores = /* @__PURE__ */ new Map();\n cluster.forEach((s) => {\n const info = getDestInfo(s.edgeIndex);\n trackScores.set(s.trackIndex, (trackScores.get(s.trackIndex) ?? 0) + info.delta);\n });\n const leftTracks = [...usedTracks].filter((t) => (trackScores.get(t) ?? 0) < -1);\n const rightTracks = [...usedTracks].filter((t) => (trackScores.get(t) ?? 0) > 1);\n const neutralTracks = [...usedTracks].filter((t) => Math.abs(trackScores.get(t) ?? 0) <= 1);\n leftTracks.sort((a, b) => (trackScores.get(b) ?? 0) - (trackScores.get(a) ?? 0));\n rightTracks.sort((a, b) => (trackScores.get(a) ?? 0) - (trackScores.get(b) ?? 0));\n const assignCoord = /* @__PURE__ */ __name((trackIndex, coord) => {\n cluster.filter((s) => s.trackIndex === trackIndex).forEach((s) => {\n const effectiveCoord = straightIntraLaneEdges.has(s.edgeIndex) ? pipe.coord : coord;\n segmentCoords.set(`${s.edgeIndex}-${s.segmentIndex}`, effectiveCoord);\n });\n }, \"assignCoord\");\n let leftCount = 0;\n for (const trackIndex of leftTracks) {\n leftCount++;\n assignCoord(trackIndex, pipe.coord - leftCount * TRACK_SPACING);\n }\n if (neutralTracks.length === 0 && usedTracks.size > 0) {\n const bestTrack = [...usedTracks].sort(\n (a, b) => Math.abs(trackScores.get(a) ?? 0) - Math.abs(trackScores.get(b) ?? 0)\n )[0];\n const leftIdx = leftTracks.indexOf(bestTrack);\n if (leftIdx !== -1) {\n leftTracks.splice(leftIdx, 1);\n }\n const rightIdx = rightTracks.indexOf(bestTrack);\n if (rightIdx !== -1) {\n rightTracks.splice(rightIdx, 1);\n }\n neutralTracks.push(bestTrack);\n }\n let neutralAssigned = 0;\n for (const trackIndex of neutralTracks) {\n if (neutralAssigned === 0) {\n assignCoord(trackIndex, pipe.coord);\n } else {\n const dir = neutralAssigned % 2 === 1 ? 1 : -1;\n const magnitude = Math.ceil(neutralAssigned / 2);\n assignCoord(trackIndex, pipe.coord + dir * magnitude * TRACK_SPACING * 0.5);\n }\n neutralAssigned++;\n }\n let rightCount = 0;\n for (const trackIndex of rightTracks) {\n rightCount++;\n assignCoord(trackIndex, pipe.coord + rightCount * TRACK_SPACING);\n }\n }\n }\n for (const [i, e] of edges.entries()) {\n const indices = edgeSegmentIndices[i] ?? [];\n if (indices.length === 0) {\n continue;\n }\n const newPoints = [];\n const src = nodeById.get(e.start);\n const dst = nodeById.get(e.end);\n const { pSrcPort, pDstPort } = portsForEdge(i, src, dst);\n const lines = indices.map((idx) => {\n const s = allRoutedSegments[idx];\n const coord = segmentCoords.get(`${s.edgeIndex}-${s.segmentIndex}`) ?? s.pipe.coord;\n return {\n orient: s.orientation,\n coord,\n from: s.from,\n to: s.to\n };\n });\n newPoints.push(pSrcPort);\n for (let k = 0; k < lines.length; k++) {\n const line = lines[k];\n const prevPt = newPoints[newPoints.length - 1];\n const prevAlong = line.orient === \"vertical\" ? prevPt.y : prevPt.x;\n const prevTrackCoord = line.orient === \"vertical\" ? prevPt.x : prevPt.y;\n const nextLine = lines[k + 1];\n const hasNextLine = k < lines.length - 1;\n if (Math.abs(prevTrackCoord - line.coord) > EPS7) {\n newPoints.push(pointOnLine(line, prevAlong));\n }\n if (hasNextLine && nextLine.orient === line.orient) {\n if (Math.abs(line.coord - nextLine.coord) > EPS7) {\n const junction = line.orient === \"vertical\" ? (prevAlong + nextLine.from) / 2 : sharedLineEndpointCoord(line, nextLine);\n newPoints.push(pointOnLine(line, junction), pointOnLine(nextLine, junction));\n } else if (k === 0 || k === lines.length - 2) {\n newPoints.push(pointOnLine(line, sharedLineEndpointCoord(line, nextLine)));\n }\n } else if (hasNextLine) {\n newPoints.push(pointOnLine(line, nextLine.coord));\n } else {\n const endAlong = Math.abs(line.from - prevAlong) < Math.abs(line.to - prevAlong) ? line.to : line.from;\n newPoints.push(pointOnLine(line, endAlong));\n }\n }\n const last = newPoints[newPoints.length - 1];\n if (Math.abs(last.x - pDstPort.x) > EPS7 || Math.abs(last.y - pDstPort.y) > EPS7) {\n newPoints.push(pDstPort);\n }\n const filtered = [];\n if (newPoints.length > 0) {\n filtered.push(newPoints[0]);\n }\n for (let k = 1; k < newPoints.length; k++) {\n const p = newPoints[k];\n const prev = filtered[filtered.length - 1];\n if (Math.abs(p.x - prev.x) > EPS7 || Math.abs(p.y - prev.y) > EPS7) {\n filtered.push(p);\n }\n }\n e.points = filtered;\n }\n for (const re of edges) {\n const orig = re.__originalEdge;\n if (orig && re.points) {\n orig.points = re.points;\n }\n }\n data.edges = (data.edges ?? []).filter((e) => !e.isLayoutOnly);\n const nodeBoundaryClamp = /* @__PURE__ */ __name((p, node) => {\n const cx = node.x ?? 0;\n const cy = node.y ?? 0;\n const w = node.width ?? 0;\n const h = node.height ?? 0;\n if (w <= 0 || h <= 0) {\n return p;\n }\n const left = cx - w / 2;\n const right = cx + w / 2;\n const top = cy - h / 2;\n const bottom = cy + h / 2;\n if (p.x < left || p.x > right || p.y < top || p.y > bottom) {\n return p;\n }\n const dLeft = p.x - left;\n const dRight = right - p.x;\n const dTop = p.y - top;\n const dBottom = bottom - p.y;\n const minD = Math.min(dLeft, dRight, dTop, dBottom);\n if (minD === dLeft) {\n return { x: left, y: p.y };\n }\n if (minD === dRight) {\n return { x: right, y: p.y };\n }\n if (minD === dTop) {\n return { x: p.x, y: top };\n }\n return { x: p.x, y: bottom };\n }, \"nodeBoundaryClamp\");\n for (const edge of data.edges) {\n const pts = edge.points;\n if (!pts || pts.length < 2) {\n continue;\n }\n const srcId = edge.start;\n const dstId = edge.end;\n const src = srcId ? nodeById.get(srcId) : void 0;\n const dst = dstId ? nodeById.get(dstId) : void 0;\n if (src) {\n pts[0] = nodeBoundaryClamp(pts[0], src);\n }\n if (dst) {\n pts[pts.length - 1] = nodeBoundaryClamp(pts[pts.length - 1], dst);\n }\n }\n return data;\n}\n__name(routeEdgesOrthogonal, \"routeEdgesOrthogonal\");\n\n// src/rendering-util/layout-algorithms/swimlanes/layoutCore.ts\nfunction getSwimlaneDirection(data4Layout) {\n return data4Layout.direction ?? \"TB\";\n}\n__name(getSwimlaneDirection, \"getSwimlaneDirection\");\nfunction runSwimlaneLayoutCore(data4Layout) {\n const g = toGraphView(data4Layout);\n const nodeGap = data4Layout.config.flowchart?.nodeSpacing ?? 40;\n const layerGap = data4Layout.config.flowchart?.rankSpacing ?? 100;\n const ignoreCrossLaneEdges = data4Layout.config.swimlane?.ignoreCrossLaneEdges ?? true;\n const optimizeRanksByCrossings2 = data4Layout.config.swimlane?.optimizeRanksByCrossings ?? true;\n const automaticLaneOrdering = data4Layout.config.swimlane?.automaticLaneOrdering ?? false;\n const direction = getSwimlaneDirection(data4Layout);\n const { ordered, coordinates } = sugiyamaLayout(g, {\n nodeGap,\n layerGap,\n ignoreCrossLaneEdges,\n optimizeRanksByCrossings: optimizeRanksByCrossings2,\n automaticLaneOrdering,\n direction\n });\n writeBackToLayoutData(g, ordered, coordinates, { nodeGap, layerGap });\n for (const edge of data4Layout.edges ?? []) {\n delete edge.points;\n }\n routeEdgesOrthogonal(data4Layout, direction);\n for (const edge of data4Layout.edges ?? []) {\n if (!edge.curve || edge.curve === \"basis\") {\n edge.curve = \"rounded\";\n }\n }\n postProcessSwimlaneLayout(data4Layout, direction);\n validateSwimlanesLayout(data4Layout);\n return direction;\n}\n__name(runSwimlaneLayoutCore, \"runSwimlaneLayoutCore\");\n\n// src/rendering-util/layout-algorithms/swimlanes/index.ts\nasync function render(data4Layout, svg) {\n const element = svg.select(\"g\");\n markers_default(element, data4Layout.markers, data4Layout.type, data4Layout.diagramId);\n clear3();\n clear2();\n clear();\n clear4();\n prepareLayoutForSwimlanes(data4Layout);\n const transformedData = createEdgeLabelNodes(data4Layout);\n data4Layout.nodes = transformedData.nodes;\n data4Layout.edges = transformedData.edges;\n const { groups } = await createGraphWithElements(element, data4Layout);\n runSwimlaneLayoutCore(data4Layout);\n await adjustLayout(data4Layout, groups);\n}\n__name(render, \"render\");\nexport {\n render\n};\n"],"names":["createGraphWithElements","element","data4Layout","graph","graphlib.Graph","edgesToProcess","config","getConfig2","rootGroups","clusters","edgePaths","edgeLabels2","nodesGroup","nodeElements","hasDom","node","childNodeEl","insertNode","boundingBox","edge","existingEdge","captureNodeSizes","__name","ROUNDED_CORNER_RADIUS","CORNER_EPSILON","ENDPOINT_EPSILON","buildSegmentList","points","segments","i","segmentIntersection","a1","a2","b1","b2","dxA","dyA","dxB","dyB","denom","dx","dy","tA","tB","isHorizontalSeg","seg","findEdgeIntersections","edges","crossings","edgeA","segmentsA","j","edgeB","segmentsB","si","segA","sj","segB","hit","aHoriz","bHoriz","fmt","n","rounded","pointToString","p","getArcSweepFlag","MIN_JUMP_RADIUS","applyMarkerOffsets","out","startOff","markerOffsets","a","b","ang","endOff","emitJump","jump","ux","uy","sweep","style","cx","cy","pre","post","computeRoundedCorner","prev","curr","next","radius","dx1","dy1","dx2","dy2","len1","len2","nx1","ny1","nx2","ny2","dot","clamped","angle","cutLen","rewriteEdgePath","jumps","rawPoints","bySeg","segLen","list","parts","segStartConsumed","corner","segEndStop","upcomingCorner","segJumps","k","gap","half","isStraightPath","d","curveSupportsLineHops","curve","decodeDataPoints","raw","json","parsed","pts","applyLineJumpsToSvg","edgePathsGroup","groupNode","edgeMeta","e","renderedEdges","pathById","escapedId","pathEl","jumpsByEdge","c","renderedEdge","curveHint","currentD","originalStyle","dasharrayMatch","preservedOValueS","preservedOValueE","newD","newLen","onLen","newDasharray","cleaned","adjustLayout","groups","insertCluster","positionNode","nodeById","startNode","endNode","paths","insertEdge","insertEdgeLabel","positionEdgeLabel","lineHopsConfig","jumpStyle","edgeGeometries","path","siteConfig","getConfig","subGraphTitleTotalMargin","getSubGraphTitleMargins","el","edgeLabels","x","y","pos","utils_default","log","terminalLabels","DEFAULT_SWIMLANE_ID","TOP_LANE_TITLE_BAND_HEIGHT","MIN_TOP_LANE_HORIZONTAL_PADDING","topLaneHorizontalPadding","lane","assignTopLaneTitleRect","width","height","contentTop","top","headerBottom","titleHeight","bottom","prepareLayoutForSwimlanes","layout","direction","nodes","looseNodes","defaultLane","toGraphView","src","dst","allNodes","groupNodes","nonGroupNodes","writeBackToLayoutData","g","ordered","coords","opts","nodeMap","layerGap","nodeGap","layerIndex","layer","orderIndex","id","groupBounds","topLevelGroups","group","children","minX","maxX","minY","maxY","child","cw","ch","pad","horizontalPad","verticalPad","w","h","globalMinY","globalMaxY","maxPad","contentHeight","verticalMargin","laneHeight","centerY","sortedLanes","ax","bx","laneIds","centers","baseWidths","contentWidth","count","laneWidths","u","lowerBound","upperBound","baseW","finalWidth","EDGE_LABEL_LOG_PREFIX","createEdgeLabelNodes","data","nodesToAdd","layoutOnlyEdges","sourceNode","targetNode","labelNodeId","labelLane","labelNode","toLabelVirtual","fromLabelVirtual","newNodes","newEdges","EPS","measuredNodeRect","rectFromCenterSize","nodeBoundsInfoFor","measured","samePoint","epsilon","sameX","sameY","isHorizontalSegment","isVerticalSegment","overlapLength","sameAxisSegmentOverlapLength","orthogonalSegmentsForPoints","result","horizontal","vertical","countOrthogonalBends","bends","dedupeConsecutivePoints","point","last","classifyThreeSegmentRoute","p0","p1","p2","p3","segmentBoundsOverlapRect","rect","buffer","segMinX","segMaxX","segMinY","segMaxY","pointInsideRect","rectContainsRect","outer","inner","rectsOverlap","inflateRect","margin","rectOfNodeBounds","portForRectSide","side","buildOrthogonalPortPath","srcSide","dstSide","anchor","srcH","dstH","midX","intX","intY","midY","sameDirSrc2","sameDirDst2","sameDirSrc","sameDirDst","buildSameSideTrackPath","track","collectRealNodeBounds","nodeInfoById","realNodeRects","info","collectNodeRectEntries","labelNodeRects","entry","collectLayoutNodeRects","includeEdgeLabels","getNodePairGeometry","srcId","dstId","srcInfo","dstInfo","segmentHitsAnyRect","rects","excludeIds","shrink","orthogonalSegmentsCross","endpointTolerance","s1H","s1V","s2H","s2V","horiz","vert","hY","hX1","hX2","vX","vY1","vY2","matchesHorizEndpoint","matchesVertEndpoint","sameAxisSegmentsOverlap","segmentConflictsWithAnyEdge","excludeEdge","skipDegenerateOther","other","oa","ob","orthogonalSegmentsStrictlyCross","aVert","bVert","hXmin","hXmax","vYmin","vYmax","strictlyBetween","value","lo","hi","isCollinearIntermediate","cur","simplifyPolylineOnce","changed","orthogonalizePolyline","prevPrev","deduped","simplifyPolyline","work","guard","EPS2","INSIDE_EPS","CORNER_CLEARANCE","endpointContextFor","nodeByIdMap","minPoints","candidate","segmentEnterPoint","outside","inside","r","clipEndpoint","atStart","step","outsideIndex","insideIndex","clipEdgeEndpointsToNodeBoundaries","context","clearStraightEndpointCornerConnections","snapEndpointToBoundary","endpoint","useApproachSide","toTop","firstDistinctAdjacent","endpointIndex","index","cornerClearanceRange","min","max","clampToCornerClearance","intersectRanges","ranges","range","clearanceRangeForSide","terminalSideForSegment","adjacent","yWithin","xWithin","isHorizontalSide","straightClearanceRange","start","end","srcRect","dstRect","clearStraightEndpointCornerAxis","current","cornerClearedEndpoint","moveCollinearEndpointRun","adjusted","horizontalTerminal","clearEndpointCornerConnection","borderSideForSegment","leavesOutward","from","to","collapseOwnBorderStub","side2","snapAndCollapseEndpoints","snapped","straightCleared","prepareEdgeEndpointsForRenderer","input","newPts","duplicated","buildNodeMap","resolveTopLevelGroupId","parentId","topLevelGroupId","parent","groupDepth","depth","boundsForChildren","applyGroupBounds","bounds","recomputeNestedGroupBounds","groupsByDepth","mirrorAxis","axis","contentNodes","mirror","titleRect","applyBtDirectionTransform","applyLrDirectionTransform","x0","y0","titleBandSize","totalWidth","totalHeight","avgWidth","avgHeight","horizontalScaleFactor","newX","newY","laneNodes","childrenByLane","laneId","bucket","laneBounds","globalMinXChild","globalMaxXChild","fullContentWidth","horizontalMargin","bodyWidth","laneWidth","laneLeft","centerX","laneTop","laneBottom","EPS3","MIN_PORT_SPACING","PORT_SHIFT","TRY_DELTAS","portSwapToLShape","route","isHVH","nodePair","collinearX","collinearY","delta","np0","np1","np2","newSrcY","newSrcX","firstSegDegenerate","secondSegDegenerate","firstSegConflicts","secondSegConflicts","collapseShortTerminalStub","labelRects","rawPts","nLast","endPt","penultPt","prevPt","lastDx","lastDy","lastLen","penultDx","penultDy","lastIsHoriz","lastIsVert","penultIsHoriz","penultIsVert","dstCx","dstCy","newPrev","newEnd","approachFromBelow","approachFromLeft","ownSegmentKey","selfSegments","segmentCrossesOtherEdge","oPts","beforePrev","endpointIds","labelId","lw","lh","bestMidX","bestMidY","bestLen","isHoriz","isVert","EPS_LOCAL","MIN_SHARED","segmentsFor","orthogonallyAligned","separateSharedRenderedTerminalLanes","rectIntersect","terminalLaneFor","nodeId","boundary","railEnd","projectedOverlapLength","sameTerminalFace","exactTerminalLaneConflict","nearTerminalLaneConflict","shared","faceSpan","shiftedCandidate","shift","shiftedBoundary","shiftedRailEnd","railEndIsAdjacent2","rest","railEndIsAdjacent","before","previous","laneIsStraightCollinearConnector","startId","endId","startX","startY","endX","endY","shifts","iteration","lanes","fixed","first","second","fixingNearConflict","candidates","aPreservesStraight","bPreservesStraight","nextLane","collapseRedundantRectangularDoglegs","candidateIsSafe","sourceId","targetId","candidateSegments","segment","otherPoints","candidateSegment","otherSegment","withoutDogleg","p4","terminalVerticalDogleg","terminalHorizontalDogleg","p5","verticalDogleg","horizontalDogleg","liftObstacleHuggingSameSideRails","visibleEdges","pointsFor","replacementEdge","replacement","strictCrossingCount","firstSegments","secondSegments","firstSegment","secondSegment","middleRail","middle","blockingRectsFor","rail","candidateByMovingRail","coord","simplified","currentCrossings","blockers","liftTopLaneTitleBandsAboveRails","validTitleRect","topLaneTitleFor","rawDirection","titleWidth","horizontalSegmentIntersectsTitle","topDelta","shiftLeftLaneTitleBandsLeftOfRails","leftLaneTitleFor","verticalSegmentIntersectsTitle","leftDelta","segmentLeft","swapDestinationTerminalTailsToReduceCrossings","replacementPointsFor","replacements","crossingCount","totalBends","sum","terminalTailFor","tailStart","terminal","candidateWithDestinationTail","tail","firstTurn","connector","pathHasNodeHit","pathHasSharedTrack","edgesByDestination","currentBends","bestReplacements","bestCrossings","bestBends","destinationEdges","firstTail","secondTail","firstCandidate","secondCandidate","candidateCrossings","candidateBends","reassignCrossingExternalRailChannels","endpointRectsFor","srcNode","dstNode","externalRailForSegment","endpointRects","leftBound","rightBound","topBound","bottomBound","collectExternalRails","rails","railsInteract","connectedComponents","seen","queue","component","uniqueCoordsFor","coordinateAssignmentsFor","assignments","used","visit","assignment","replacementsForAssignment","draftByEdge","firstChanged","bestDisplacement","candidateDisplacement","shortcutRedundantOrthogonalJogs","pathLength","segmentRunsAlongRectBorder","shortcutCandidatesAt","isVHV","corners","rawCandidates","key","bestEdge","bestPath","bestLength","currentPoints","currentLength","candidateLength","resolveRenderedOrthogonalCrossings","realNodes","sides","outsideTracks","edgeIndex","outwardTracksForSide","outward","tracks","channel","crossingCountBetweenSegments","crossingCountBetweenPaths","crossingSnapshot","pairs","edgeSet","edgeOrder","addEdge","firstPoints","pairCount","crossingCountWithReplacements","currentAffected","pair","replacementAffected","crossingComponents","snapshot","neighbors","firstNeighbors","secondNeighbors","components","endpointIdsFor","pairSearchGroups","componentSet","componentEndpointIds","crossingCountWithSingleReplacement","currentCrossingsByEdge","totalLength","pathHasSegmentConflict","pathSegments","pathHitsNode","pushOrthogonalCandidate","sideIsHorizontal","localTrackForSameSide","addSameSideCandidates","trackSeeds","seed","addHorizontalToVerticalCandidates","xTrack","yTrack","addVerticalToHorizontalCandidates","addHorizontalPairCandidates","yTracks","srcTrack","dstTrack","addVerticalPairCandidates","xTracks","dedupeCandidatePaths","buildCandidatesForSides","base","srcHorizontal","dstHorizontal","addVerticalDepartureOuterTrackCandidates","departure","externalXTracks","externalYTracks","targetYTracks","targetTrack","addHorizontalDepartureOuterTrackCandidates","targetXTracks","terminalPreservingOuterTrackCandidates","candidatePathsFor","srcPort","currentSegmentsByEdge","sharedTrackConflictsFor","baseSegments","conflicts","otherSegments","pairCandidatesFor","crossingCountByEdge","pairCrossingCount","firstEdge","secondEdge","conflictsOnlyWith","conflict","candidatesShareTrack","pairCandidatesAreCompatible","scorePairReplacement","pairScoreIsBetter","best","bestScoreForOptionPair","pairBest","score","bestPairedReplacement","baseBendsByEdge","baseLengthByEdge","optionsByEdge","scoringContext","crossingEdgeSet","options","option","currentEdgeBends","candidateHitsNode","candidateHasSegmentConflict","pairedReplacement","EPS4","MIN_SHARED2","simplifyDetouredEdges","ANCHOR","buildOrthogonalPathCandidates","pathConflictCount","currentEdge","includeIncidentEdges","currentStart","currentEnd","otherStart","otherEnd","otherPts","pathSegment","BEND_THRESHOLD","nearestSideOfRect","pt","dTop","dBottom","dLeft","dRight","bestDist","faceClaims","addFaceClaim","edgeId","claims","eId","faceIsClaimed","ignoreEdgeId","currentCrossingConflicts","currentNonIncidentConflicts","bestCrossingConflicts","dstPort","pathBends","pathCrossingConflicts","refreshSrc","refreshDst","EPS5","MARKER_CLEARANCE_LENGTH","MARKER_CLEARANCE_HALF_WIDTH","markerClearanceRectFor","terminalIndex","tip","x2","y2","normalizeRect","labelOverlapsOwnMarker","visiblePts","startMarker","endMarker","marker","anchorLabelsToPolyline","allEdgeSegments","foreignNodeRects","laneGroups","isGroup","rect2","LABEL_PLACEMENT_BUFFER","LABEL_LANE_MARGIN","LABEL_ENDPOINT_CLEARANCE","labelOverlapsForeignNode","buffered","nr","labelOverlapsForeignEdge","s","labelOverlapsAnything","placedLabelRects","findContainingLane","laneRect","overlapsPlacedLabel","placed","middleSegments","poolBase","labelLongAxis","rankSegments","pool","aLongAxis","bLongAxis","aFits","bFits","firstVisibleSegment","lastVisibleSegment","ALONG_SEGMENT_TS","anchorAtT","t","clamp","pointInsideRectInclusive","placementForAnchor","centeredRect","centeredLane","containingLane","clampedAnchor","clampedRect","distanceAlongSegment","labelClearsTerminalEndpoints","requiredDistance","tryPool","rankedPool","placement","findLaneContainingFallback","requireEndpointClearance","allowForeignEdgeOverlap","chosen","chosenRect","priorIdx","EPS6","MIN_PORT_SPACING2","PORT_SHIFT2","LABEL_CLEARANCE_BUFFER","pairKey","straightenCollinearSiblingDetours","labelDimById","labelClearanceFor","thisEdge","thisSrcId","thisDstId","targetPair","maxHalf","consider","dim","oSrc","oDst","targetSrc","targetDst","dstBelow","dstEast","labelShift","effectiveShift","deltas","shiftedSrc","shiftedDst","nudgeSharedInteriorSubpaths","segmentsFor2","allSegments","hasCrowdedParallelTrack","ownLabelIds","nodeCenter","sourceDetourContextFor","sourceRect","targetRect","verticalSourceDetour","sourceCenter","targetCenter","targetBelow","sourcePortY","stubY","railX","horizontalSourceDetour","targetRight","sourcePortX","stubX","railY","sourceDetourCandidate","direct","detoured","segmentsIntersect","d1x","d1y","d2x","d2y","cross","eps","validateSwimlanesLayout","issues","nodeRects","edgeSegments","edgeStart","edgeEnd","ownLabelId","crossingPairs","pairKey2","overlaps","issue","postProcessSwimlaneLayout","finalizeRenderedEdges","normalizeGraph","incoming","v","buildSuccessorMap","succs","buildSortedSuccessorMap","successors","buildInDegreeMap","indeg","sortedZeroInDegreeNodes","degree","buildPredecessorSuccessorMaps","includeEdge","preds","buildLayersFromRanks","order","rankOf","maxRank","layers","topoSortIfAcyclic","adj","buildLayerIndex","m","countInversions","values","tmp","left","right","mid","inversions","removeCycles_DFS","gn","arr","color","reversed","dfs","nodesSorted","toReverse","acycEdges","buildTopLaneMap","cache","resolve","createTopLaneResolver","topLaneMap","buildTopLaneOrder","resolveTopLaneOrder","preferredOrder","sourceOrder","sourceLaneIds","resolved","PRECISION","LAYERING","COORDINATES","buildDrivingTree","laneOf","rankHint","topoOrder","topoIndex","idx","chooseParent","rootSet","roots","ta","tb","adjacency","buildAdjacency","adjacencyList","set","componentOf","assignComponents","blocks","computeBlocks","nodeBlocks","block","preorder","postorder","walk","root","ctx","laneNode","laneA","laneB","sameLaneA","sameLaneB","rankA","rankB","idxA","idxB","componentId","stack","discovery","low","edgeStack","time","popBlock","computeSubtreeCrossCounts","tree","indexOf","parentIdx","currentIdx","childList","childIdx","maxLog","up","lcaIndex","aIdx","bIdx","diff","upA","upB","ownCounts","ru","rv","upperIdx","lowerIdx","lca","crossCounts","mergeInto","target","source","visited","accumulator","childMap","parentLayer","map","childLayer","annotateMinimumLayers","minLayer","annotate","minL","compareByRankThenId","childMin","ra","rb","emitNodesInTreeOrder","orderChildren","emitted","emit","deduplicateLayers","createChildOrderer","future","present","crossMap","ca","cb","ma","mb","item","buildMultitreeLayerOrder","rootsSorted","countCrossingsBetweenAdjacent","upper","lower","upperSet","lowerSet","li","vs","totalCrossings","expanded","rUpper","rLower","L","optimizeRanksByCrossings","initialRank","maxPasses","pass","nodesByRank","lb","old","trialLayers","adjustCrossLaneSources","topLaneOf","laneV","outEdges","hasSameLaneSucc","crossLaneCount","laneDst","crossLaneIncoming","hasSameLanePred","laneSrc","newRank","assignLayers_LongestPath","gAcyclic","compact","incAll","inc","laneU","mx","assignLayers_Gravity","revOrder","clampFeasible","desired","ub","iters","relaxOrder","nodeOrder","ps","ss","predAvg","succAvg","it","forwardChanged","backwardChanged","topoSortByGenerationIfAcyclic","frontier","nextFrontier","assignLayers_LaneAwareCompact","nextFree","edgeWeight","nf","makeProperLayering","layering","l","dummy","dummySeq","addDummyAt","dn","edgesSorted","rU","rV","lastIndex","graphWithDummies","median","barycenter","acc","neighborPositionsFor","targetNodes","fixedIndex","neighborPositions","currentOrderTieBreak","currentLayerIndex","ia","ib","countCrossingsBetweenAdjacent2","upperIndex","lowerIndex","sortByHeuristic","sa","sb","reorderLayer","fixedLayer","targetLayer","laneOrder","currIndex","byLane","nodesInLane","sorted","nullNodes","nid","bc","bestIdx","rid","rBc","transposeImprove","layerSet","nextSet","edgesIn","edgesOut","crossingScore","improved","bestScore","nextScore","orderLayers","gWithDummies","assignCoordinates","laneGap","isHorizontal","getNode","getWidth","getHeight","laneOrderGlobal","layerHeights","extraLayerGaps","thisLayerMaxWidth","nextLayerMaxWidth","thisLayerMaxHeight","nextLayerMaxHeight","normalSpacing","requiredSpacing","extraNeeded","lanesUsedSet","hasNullLane","lanesUsed","laneOrderColumns","perLane","nullIds","ids","total","totalNull","widths","cursor","yOffset","layerH","extraGap","byRef","chainEdges","ref","involved","vid","AUTOMATIC_LANE_ORDERING_RESTARTS","hashString","hash","mulberry32","state","deterministicShuffle","shuffled","random","sourceDistance","sourceIndex","distance","laneArrangementCost","weights","position","cost","weight","ai","bi","buildWeightedLaneEdges","existing","greedySwitch","startOrder","sweeps","maxSweeps","nextCost","isBetterCandidate","seedForRestart","restartIndex","weightSignature","optimizeTopLaneOrder","restarts","sugiyamaLayout","ignoreCrossLaneEdges","optimizeRanksByCrossings2","g0","cycleRes","properLayering","coordinates","EPS7","NODE_PADDING","HORIZONTAL_PIPE_MARGIN","VERTICAL_PIPE_MARGIN","ROUTING_MARGIN","ANCHOR_OFFSET","TRACK_SPACING","chooseOrthogonalSide","fallback","absDx","absDy","sharedLineEndpointCoord","line","nextLine","pointOnLine","along","routeEdgesOrthogonal","originalEdges","oe","laneByNodeId","pipes","isLR","assignLane","obstacles","padding","getOrAddPipe","orientation","spanMin","spanMax","pipe","portForSide","getOrthogonalPort","isSource","allRoutedSegments","edgeSegmentIndices","straightIntraLaneEdges","CROSSING_PENALTY","crossingPenalty","edgeIdx","isVertical","penalties","routingOrder","srcLane","dstLane","crossLane","aDist","bDist","isSegmentBlocked","excludeStart","excludeEnd","obs","portGroups","incidentEdgeTotals","determineSide","sideInfoByIdx","preferenceStrength","secondarySide","sourceSideGroups","sideLoad","loadKey","secondary","primaryLoad","secondaryLoad","isDiamondNode","shape","inSidesByNode","inSides","srcKey","dstCoord","dstKey","srcCoord","portOffsets","MIN_PORT_SPACING3","role","sideLength","effectiveLength","spacing","startOffset","offset","offsetKey","edgeHasLabelNode","faceHasLabelNode","applyPortOffset","basePort","portsForEdge","sideInfo","srcTarget","dstTarget","pSrcPort","pDstPort","srcOffset","dstOffset","srcPortSide","dstPortSide","pSrcAnchor","pDstAnchor","srcPortIsVertical","dstPortIsVertical","isBottom","isRight","isPointInObstacle","excludeNodeIds","obstacleDetour","port","opposite","portIsVertical","leavesPositiveSide2","leavesPositiveSide","goDown","srcHandleWaypoints","srcCheck","detour","gapY","gapX","dstHandleWaypoints","dstCheck","hpMargin","anchorsSameX","anchorsSameY","hasPortOffset","srcFaceTotal","dstFaceTotal","faceContested","srcIncidentTotal","dstIncidentTotal","contestedFaceHasLabel","srcContestAllowsCenteredStraight","dstContestAllowsCenteredStraight","fastPathOrientation","fastPathCoord","fastPathFrom","fastPathTo","fastPathPipe","srcPipe","dstPipe","bbMinX","bbMaxX","bbMinY","bbMaxY","pathMinX","pathMaxX","pathMinY","pathMaxY","hMargin","vMargin","hPipes","vPipes","getKey","startKey","endKey","gScore","cameFrom","arrivalDir","openSet","openList","foundPath","checkSegmentBlocked","cornerHV","seg1HV_blocked","seg2HV_blocked","pathHV_blocked","cornerVH","seg1VH_blocked","seg2VH_blocked","currKey","currPt","sortedVPipes","vIdx","hPipesSorted","hIdx","neighbor","nKey","dist","penalty","dirPenalty","destDx","destDy","moveDx","moveDy","bendPenalty","currentDir","moveDir","stepCost","tentativeG","wentRight","wentLeft","pathX","detourObstacles","visualMaxX","obsCenterX","visualRight","visualMinX","visualLeft","findBestReturnY","detourX","goingDown","relevantObs","obsInXRange","obsInYRange","filteredObs","obsAtDetourX","bestY","trySimplifyWithDetourX","corner1","corner2","corner3","seg1Blocked","seg2Blocked","seg3Blocked","seg4Blocked","simplified2","fullPoints","C","B","A","signAB","signAC","dir1","dir2","rSeg","segmentsOverlap","s1","s2","trySwapSegmentsAcrossTracks","t1","t2","canS1GoT2","canS2GoT1","createNewTrack","moveSegmentToTrack","trackIdx","oldTrack","moveSegmentChainToTrack","indices","getAdjacentSegmentsAlongEdge","idxInList","haveAnyCrossing","findAvailableTrack","segmentsConflict","adj1","adj2","resolveTrackConflict","move","avail","resolveHandleConflicts","handles","h1","h2","destInfoCache","getDestInfo","info2","dest","candidateA","candidateB","deviation","fixSourceHandleCrossings","edgesBySource","getEdgeDistance","grp","infoA","infoB","distA","distB","lenA","lenB","distA2","distB2","ei","fixTargetHandleCrossings","edgesByTarget","getDist","scoreA","scoreB","fixPipeCrossings","pipeSegments","ix","iterations","MAX_ITER","segmentCoords","currentCluster","clusterEnd","cluster","usedTracks","trackScores","leftTracks","rightTracks","neutralTracks","assignCoord","trackIndex","effectiveCoord","leftCount","bestTrack","leftIdx","rightIdx","neutralAssigned","dir","magnitude","rightCount","newPoints","lines","prevAlong","prevTrackCoord","hasNextLine","junction","endAlong","filtered","re","orig","nodeBoundaryClamp","minD","getSwimlaneDirection","runSwimlaneLayoutCore","automaticLaneOrdering","render","svg","markers_default","clear3","clear2","clear","clear4","transformedData"],"mappings":"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","x_google_ignoreList":[0]}