jbrowse-plugin-graphgenomeviewer 8.8.2 → 9.0.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 (194) hide show
  1. package/README.md +6 -6
  2. package/dist/chunks/{AddTrackWorkflow-FANMD3WB.js → AddTrackWorkflow-3PX4I4DX.js} +2 -2
  3. package/dist/chunks/{AddTrackWorkflow-FANMD3WB.js.map → AddTrackWorkflow-3PX4I4DX.js.map} +2 -2
  4. package/dist/chunks/{GbzBaseSyntenyAdapter-NAXISJUH.js → GbzBaseSyntenyAdapter-YUT5RT7G.js} +2 -2
  5. package/dist/chunks/{GbzBaseSyntenyAdapter-NAXISJUH.js.map → GbzBaseSyntenyAdapter-YUT5RT7G.js.map} +2 -2
  6. package/dist/chunks/{GraphGenomeView-PPOVN5LA.js → GraphGenomeView-XFKLX3VQ.js} +2 -2
  7. package/dist/chunks/{GraphTrackSettingsDialog-BRTDTVOJ.js → GraphTrackSettingsDialog-KOYYI2XH.js} +2 -2
  8. package/dist/chunks/{HighlightColorDialog-CGW7J3SK.js → HighlightColorDialog-F4IARMEO.js} +2 -2
  9. package/dist/chunks/LinearGraphDisplay-BZ44C6S3.js +2 -0
  10. package/dist/chunks/MinigraphBubbleAdapter-2KIWDIY7.js +2 -0
  11. package/dist/chunks/MinigraphBubbleAdapter-2KIWDIY7.js.map +7 -0
  12. package/dist/chunks/RgfaTabixAdapter-7QKNUHKX.js +2 -0
  13. package/dist/chunks/RgfaTabixAdapter-7QKNUHKX.js.map +7 -0
  14. package/dist/chunks/{TrackWarningsDialog-23WL6FPV.js → TrackWarningsDialog-V5YSUFRO.js} +1 -1
  15. package/dist/chunks/{TrackWarningsDialog-23WL6FPV.js.map → TrackWarningsDialog-V5YSUFRO.js.map} +1 -1
  16. package/dist/chunks/WalkFormsAdapter-5NDOULY6.js +2 -0
  17. package/dist/chunks/WalkFormsAdapter-5NDOULY6.js.map +7 -0
  18. package/dist/chunks/WalkTabixSyntenyAdapter-KI7ESKKP.js +2 -0
  19. package/dist/chunks/WalkTabixSyntenyAdapter-KI7ESKKP.js.map +7 -0
  20. package/dist/chunks/{chunk-RS274NAD.js → chunk-3HSJ7SAT.js} +2 -2
  21. package/dist/chunks/{chunk-RS274NAD.js.map → chunk-3HSJ7SAT.js.map} +1 -1
  22. package/dist/chunks/chunk-42VF2CSA.js +4 -0
  23. package/dist/chunks/chunk-42VF2CSA.js.map +7 -0
  24. package/dist/chunks/{chunk-LFQFVYNY.js → chunk-47UWMS4O.js} +3 -3
  25. package/dist/chunks/chunk-47UWMS4O.js.map +7 -0
  26. package/dist/chunks/{chunk-MWQGJP3J.js → chunk-7PVPO366.js} +2 -2
  27. package/dist/chunks/{chunk-MWQGJP3J.js.map → chunk-7PVPO366.js.map} +1 -1
  28. package/dist/chunks/{chunk-SKB4GSET.js → chunk-AQSLN3RH.js} +2 -2
  29. package/dist/chunks/{chunk-SKB4GSET.js.map → chunk-AQSLN3RH.js.map} +1 -1
  30. package/dist/chunks/chunk-AXUXLPO3.js +6 -0
  31. package/dist/chunks/chunk-AXUXLPO3.js.map +7 -0
  32. package/dist/chunks/chunk-CJ4VON23.js +2 -0
  33. package/dist/chunks/chunk-CJ4VON23.js.map +7 -0
  34. package/dist/chunks/{chunk-AGUEPVOR.js → chunk-FQI75MV6.js} +1 -1
  35. package/dist/chunks/{chunk-AGUEPVOR.js.map → chunk-FQI75MV6.js.map} +1 -1
  36. package/dist/chunks/{chunk-FM4T47WH.js → chunk-HFBUC6GF.js} +2 -2
  37. package/dist/chunks/{chunk-FM4T47WH.js.map → chunk-HFBUC6GF.js.map} +1 -1
  38. package/dist/chunks/chunk-I2XBA4H7.js +9 -0
  39. package/dist/chunks/{chunk-EFXNCI7R.js.map → chunk-I2XBA4H7.js.map} +4 -4
  40. package/dist/chunks/chunk-KIURR66K.js +3 -0
  41. package/dist/chunks/chunk-KIURR66K.js.map +7 -0
  42. package/dist/chunks/{chunk-CHLLRNBQ.js → chunk-LQSOJR7D.js} +2 -2
  43. package/dist/chunks/{chunk-CHLLRNBQ.js.map → chunk-LQSOJR7D.js.map} +1 -1
  44. package/dist/chunks/chunk-M6YSANSW.js +2 -0
  45. package/dist/chunks/chunk-M6YSANSW.js.map +7 -0
  46. package/dist/chunks/{chunk-ZWHXVFZF.js → chunk-MPUAUZSJ.js} +1 -1
  47. package/dist/chunks/{chunk-ZWHXVFZF.js.map → chunk-MPUAUZSJ.js.map} +1 -1
  48. package/dist/chunks/{chunk-5HDIVUAZ.js → chunk-N4ZFGZDN.js} +2 -2
  49. package/dist/chunks/{chunk-5HDIVUAZ.js.map → chunk-N4ZFGZDN.js.map} +1 -1
  50. package/dist/chunks/{chunk-KBOVZ3GI.js → chunk-OSEQDKL3.js} +1 -1
  51. package/dist/chunks/{chunk-KBOVZ3GI.js.map → chunk-OSEQDKL3.js.map} +1 -1
  52. package/dist/chunks/{chunk-NSQ4VXKR.js → chunk-P76SUZFP.js} +3 -3
  53. package/dist/chunks/{chunk-NSQ4VXKR.js.map → chunk-P76SUZFP.js.map} +3 -3
  54. package/dist/chunks/{chunk-HKGTCZOL.js → chunk-R34FRICP.js} +4 -4
  55. package/dist/chunks/{chunk-HKGTCZOL.js.map → chunk-R34FRICP.js.map} +2 -2
  56. package/dist/chunks/chunk-SXMUGZXP.js +2 -0
  57. package/dist/chunks/chunk-SXMUGZXP.js.map +7 -0
  58. package/dist/chunks/chunk-T7NMFIRW.js +2 -0
  59. package/dist/chunks/chunk-T7NMFIRW.js.map +7 -0
  60. package/dist/chunks/chunk-TLUGH4VW.js +2 -0
  61. package/dist/chunks/{chunk-LKD5NRWR.js → chunk-VAWAASUT.js} +1 -1
  62. package/dist/chunks/{chunk-LKD5NRWR.js.map → chunk-VAWAASUT.js.map} +1 -1
  63. package/dist/chunks/chunk-Y4TLRGAC.js +2 -0
  64. package/dist/chunks/{chunk-EEWEXRY6.js.map → chunk-Y4TLRGAC.js.map} +3 -3
  65. package/dist/chunks/chunk-ZXJRZKWF.js +2 -0
  66. package/dist/chunks/chunk-ZXJRZKWF.js.map +7 -0
  67. package/dist/chunks/{executeDiagonalize-HZFFXMG4.js → executeDiagonalize-ZMW5BLEJ.js} +2 -2
  68. package/dist/chunks/{executeDiagonalize-HZFFXMG4.js.map → executeDiagonalize-ZMW5BLEJ.js.map} +1 -1
  69. package/dist/chunks/{renderSvg-UKXPWKKV.js → renderSvg-DLJTA2B3.js} +2 -2
  70. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js +5 -5
  71. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js.map +4 -4
  72. package/package.json +12 -12
  73. package/src/GraphAddTrackWorkflow/AddTrackWorkflow.test.tsx +4 -7
  74. package/src/GraphAddTrackWorkflow/AddTrackWorkflow.tsx +1 -1
  75. package/src/GraphAddTrackWorkflow/buildTrackConfig.ts +9 -6
  76. package/src/GraphGenomeView/model.test.ts +21 -8
  77. package/src/GraphGenomeView/pane/loadActions.ts +7 -2
  78. package/src/GraphGenomeView/pane/walkRowViews.ts +1 -1
  79. package/src/GraphGenomeView/walkRowGroups.test.ts +14 -3
  80. package/src/GraphGenomeView/walkRowGroups.ts +0 -22
  81. package/src/GraphGenomeView/walkRowsCut.ts +1 -0
  82. package/src/MinigraphBubbleAdapter/MinigraphBubbleAdapter.ts +5 -2
  83. package/src/RgfaTabixAdapter/RgfaTabixAdapter.test.ts +1 -1
  84. package/src/RgfaTabixAdapter/RgfaTabixAdapter.ts +16 -16
  85. package/src/RgfaTabixAdapter/configSchema.ts +16 -12
  86. package/src/RgfaTabixAdapter/test_data/walks7/build.sh +27 -0
  87. package/src/RgfaTabixAdapter/test_data/walks7/follow.GRCh38.gfa +35 -0
  88. package/src/RgfaTabixAdapter/test_data/walks7/follow.GRCh38.walks.gz +0 -0
  89. package/src/RgfaTabixAdapter/test_data/walks7/follow.GRCh38.walks.gz.idx +3 -0
  90. package/src/RgfaTabixAdapter/test_data/walks7/header.GRCh38.gfa +22 -0
  91. package/src/RgfaTabixAdapter/test_data/walks7/header.GRCh38.walks.gz +0 -0
  92. package/src/RgfaTabixAdapter/test_data/walks7/header.GRCh38.walks.gz.idx +3 -0
  93. package/src/RgfaTabixAdapter/test_data/walks7/inversion.GRCh38.gfa +15 -0
  94. package/src/RgfaTabixAdapter/test_data/walks7/inversion.GRCh38.walks.gz +0 -0
  95. package/src/RgfaTabixAdapter/test_data/walks7/inversion.GRCh38.walks.gz.idx +3 -0
  96. package/src/RgfaTabixAdapter/test_data/walks7/lanepairs.GRCh38.gfa +19 -0
  97. package/src/RgfaTabixAdapter/test_data/walks7/lanepairs.GRCh38.walks.gz +0 -0
  98. package/src/RgfaTabixAdapter/test_data/walks7/lanepairs.GRCh38.walks.gz.idx +3 -0
  99. package/src/RgfaTabixAdapter/test_data/walks7/maxnode.GRCh38.gfa +11 -0
  100. package/src/RgfaTabixAdapter/test_data/walks7/maxnode.GRCh38.walks.gz +0 -0
  101. package/src/RgfaTabixAdapter/test_data/walks7/maxnode.GRCh38.walks.gz.idx +3 -0
  102. package/src/RgfaTabixAdapter/test_data/walks7/rejoin.GRCh38.walks.gz +0 -0
  103. package/src/RgfaTabixAdapter/test_data/walks7/rejoin.GRCh38.walks.gz.idx +3 -0
  104. package/src/RgfaTabixAdapter/test_data/walks7/skip.GRCh38.gfa +23 -0
  105. package/src/RgfaTabixAdapter/test_data/walks7/skip.GRCh38.walks.gz +0 -0
  106. package/src/RgfaTabixAdapter/test_data/walks7/skip.GRCh38.walks.gz.idx +3 -0
  107. package/src/RgfaTabixAdapter/test_data/walks7/skipfollow.GRCh38.gfa +50 -0
  108. package/src/RgfaTabixAdapter/test_data/walks7/skipfollow.GRCh38.walks.gz +0 -0
  109. package/src/RgfaTabixAdapter/test_data/walks7/skipfollow.GRCh38.walks.gz.idx +3 -0
  110. package/src/RgfaTabixAdapter/test_data/walks7/skipinv.GRCh38.gfa +45 -0
  111. package/src/RgfaTabixAdapter/test_data/walks7/skipinv.GRCh38.walks.gz +0 -0
  112. package/src/RgfaTabixAdapter/test_data/walks7/skipinv.GRCh38.walks.gz.idx +3 -0
  113. package/src/RgfaTabixAdapter/test_data/walks7/twopart.GRCh38.gfa +22 -0
  114. package/src/RgfaTabixAdapter/test_data/walks7/twopart.GRCh38.walks.gz +0 -0
  115. package/src/RgfaTabixAdapter/test_data/walks7/twopart.GRCh38.walks.gz.idx +3 -0
  116. package/src/RgfaTabixAdapter/walkFiles.test.ts +131 -119
  117. package/src/RgfaTabixAdapter/walkReader.ts +36 -49
  118. package/src/WalkFormsAdapter/WalkFormsAdapter.test.ts +7 -28
  119. package/src/WalkFormsAdapter/WalkFormsAdapter.ts +4 -29
  120. package/src/WalkFormsAdapter/configSchema.ts +13 -13
  121. package/src/WalkFormsAdapter/formRows.test.ts +0 -7
  122. package/src/WalkFormsAdapter/formRows.ts +0 -12
  123. package/src/WalkFormsAdapter/formsMenu.test.ts +1 -1
  124. package/src/WalkTabixSyntenyAdapter/WalkTabixSyntenyAdapter.test.ts +54 -96
  125. package/src/WalkTabixSyntenyAdapter/WalkTabixSyntenyAdapter.ts +56 -152
  126. package/src/WalkTabixSyntenyAdapter/configSchema.ts +15 -16
  127. package/src/WalkTabixSyntenyAdapter/gbzParity.test.ts +5 -6
  128. package/src/WalkTabixSyntenyAdapter/walkLanes.ts +48 -142
  129. package/src/graphTrackConfig.test.ts +1 -1
  130. package/src/graphTrackDefaults/graphTrackDefaults.test.ts +7 -10
  131. package/src/launchFromGraph/syntenyTracks.test.ts +1 -1
  132. package/src/locationName.ts +2 -2
  133. package/src/panSNAliases/panSNAliases.test.ts +4 -6
  134. package/src/panSNTabix.test.ts +3 -23
  135. package/src/panSNTabix.ts +58 -34
  136. package/src/synteny/laneZoomNotice.test.ts +1 -0
  137. package/src/version.ts +1 -1
  138. package/dist/chunks/LinearGraphDisplay-2AZ7X7TK.js +0 -2
  139. package/dist/chunks/MinigraphBubbleAdapter-NR3MMUUG.js +0 -2
  140. package/dist/chunks/MinigraphBubbleAdapter-NR3MMUUG.js.map +0 -7
  141. package/dist/chunks/RgfaTabixAdapter-JDQLVQVP.js +0 -2
  142. package/dist/chunks/RgfaTabixAdapter-JDQLVQVP.js.map +0 -7
  143. package/dist/chunks/WalkFormsAdapter-YMQC3NLG.js +0 -2
  144. package/dist/chunks/WalkFormsAdapter-YMQC3NLG.js.map +0 -7
  145. package/dist/chunks/WalkTabixSyntenyAdapter-PBWN53PE.js +0 -2
  146. package/dist/chunks/WalkTabixSyntenyAdapter-PBWN53PE.js.map +0 -7
  147. package/dist/chunks/chunk-6VNDP3UB.js +0 -2
  148. package/dist/chunks/chunk-6VNDP3UB.js.map +0 -7
  149. package/dist/chunks/chunk-A27SW7X7.js +0 -2
  150. package/dist/chunks/chunk-A27SW7X7.js.map +0 -7
  151. package/dist/chunks/chunk-APSXG7SV.js +0 -2
  152. package/dist/chunks/chunk-DEWVJ57F.js +0 -4
  153. package/dist/chunks/chunk-DEWVJ57F.js.map +0 -7
  154. package/dist/chunks/chunk-EEWEXRY6.js +0 -2
  155. package/dist/chunks/chunk-EFXNCI7R.js +0 -9
  156. package/dist/chunks/chunk-EH5OCKSE.js +0 -3
  157. package/dist/chunks/chunk-EH5OCKSE.js.map +0 -7
  158. package/dist/chunks/chunk-GLSUAMGV.js +0 -3
  159. package/dist/chunks/chunk-GLSUAMGV.js.map +0 -7
  160. package/dist/chunks/chunk-LFQFVYNY.js.map +0 -7
  161. package/dist/chunks/chunk-QUDJ7AM3.js +0 -2
  162. package/dist/chunks/chunk-QUDJ7AM3.js.map +0 -7
  163. package/dist/chunks/chunk-T7LVVBTT.js +0 -2
  164. package/dist/chunks/chunk-T7LVVBTT.js.map +0 -7
  165. package/dist/chunks/chunk-ZBFIEBO6.js +0 -2
  166. package/dist/chunks/chunk-ZBFIEBO6.js.map +0 -7
  167. package/src/RgfaTabixAdapter/test_data/walks1_header.GRCh38.walks.bed.gz +0 -0
  168. package/src/RgfaTabixAdapter/test_data/walks1_header.GRCh38.walks.bed.gz.tbi +0 -0
  169. package/src/RgfaTabixAdapter/test_data/walks5_follow.GRCh38.walks.bed.gz +0 -0
  170. package/src/RgfaTabixAdapter/test_data/walks5_follow.GRCh38.walks.bed.gz.tbi +0 -0
  171. package/src/RgfaTabixAdapter/test_data/walks5_header.GRCh38.walks.bed.gz +0 -0
  172. package/src/RgfaTabixAdapter/test_data/walks5_header.GRCh38.walks.bed.gz.tbi +0 -0
  173. package/src/RgfaTabixAdapter/test_data/walks5_inversion.GRCh38.walks.bed.gz +0 -0
  174. package/src/RgfaTabixAdapter/test_data/walks5_inversion.GRCh38.walks.bed.gz.tbi +0 -0
  175. package/src/RgfaTabixAdapter/test_data/walks5_lanepairs.GRCh38.walks.bed.gz +0 -0
  176. package/src/RgfaTabixAdapter/test_data/walks5_lanepairs.GRCh38.walks.bed.gz.tbi +0 -0
  177. package/src/RgfaTabixAdapter/test_data/walks5_maxnode.GRCh38.walks.bed.gz +0 -0
  178. package/src/RgfaTabixAdapter/test_data/walks5_maxnode.GRCh38.walks.bed.gz.tbi +0 -0
  179. package/src/RgfaTabixAdapter/test_data/walks5_rejoin.GRCh38.walks.bed.gz +0 -0
  180. package/src/RgfaTabixAdapter/test_data/walks5_rejoin.GRCh38.walks.bed.gz.tbi +0 -0
  181. package/src/RgfaTabixAdapter/test_data/walks5_skip.GRCh38.walks.bed.gz +0 -0
  182. package/src/RgfaTabixAdapter/test_data/walks5_skip.GRCh38.walks.bed.gz.tbi +0 -0
  183. package/src/RgfaTabixAdapter/test_data/walks5_skipfollow.GRCh38.walks.bed.gz +0 -0
  184. package/src/RgfaTabixAdapter/test_data/walks5_skipfollow.GRCh38.walks.bed.gz.tbi +0 -0
  185. package/src/RgfaTabixAdapter/test_data/walks5_skipinv.GRCh38.walks.bed.gz +0 -0
  186. package/src/RgfaTabixAdapter/test_data/walks5_skipinv.GRCh38.walks.bed.gz.tbi +0 -0
  187. package/src/RgfaTabixAdapter/test_data/walks5_twopart.GRCh38.walks.bed.gz +0 -0
  188. package/src/RgfaTabixAdapter/test_data/walks5_twopart.GRCh38.walks.bed.gz.tbi +0 -0
  189. /package/dist/chunks/{GraphGenomeView-PPOVN5LA.js.map → GraphGenomeView-XFKLX3VQ.js.map} +0 -0
  190. /package/dist/chunks/{GraphTrackSettingsDialog-BRTDTVOJ.js.map → GraphTrackSettingsDialog-KOYYI2XH.js.map} +0 -0
  191. /package/dist/chunks/{HighlightColorDialog-CGW7J3SK.js.map → HighlightColorDialog-F4IARMEO.js.map} +0 -0
  192. /package/dist/chunks/{LinearGraphDisplay-2AZ7X7TK.js.map → LinearGraphDisplay-BZ44C6S3.js.map} +0 -0
  193. /package/dist/chunks/{chunk-APSXG7SV.js.map → chunk-TLUGH4VW.js.map} +0 -0
  194. /package/dist/chunks/{renderSvg-UKXPWKKV.js.map → renderSvg-DLJTA2B3.js.map} +0 -0
@@ -0,0 +1,2 @@
1
+ import{c as ht,o as vt,r as ve}from"./chunk-AQSLN3RH.js";import{a as Ue,c as gt,d as De,e as Ce}from"./chunk-OSEQDKL3.js";function bt(e,t){return{name:e.names[t],hapStart:e.hapStarts[t],ownBp:e.ownBp[t],missingBp:e.missingBp[t],leavePos:e.leavePos[t],leaveReversed:e.leaveReversed[t]===1,leavePasses:e.leavePasses[t],rejoinPos:e.rejoinPos[t],rejoinReversed:e.rejoinReversed[t]===1,rejoinPasses:e.rejoinPasses[t],fromSteps:e.fromSteps[t]===1}}function Dt(e=[]){return{names:e.map(t=>t.name),hapStarts:Float64Array.from(e,t=>t.hapStart),ownBp:Float64Array.from(e,t=>t.ownBp),missingBp:Float64Array.from(e,t=>t.missingBp),leavePos:Float64Array.from(e,t=>t.leavePos),leaveReversed:Uint8Array.from(e,t=>t.leaveReversed?1:0),leavePasses:Int32Array.from(e,t=>t.leavePasses),rejoinPos:Float64Array.from(e,t=>t.rejoinPos),rejoinReversed:Uint8Array.from(e,t=>t.rejoinReversed?1:0),rejoinPasses:Int32Array.from(e,t=>t.rejoinPasses),fromSteps:Uint8Array.from(e,t=>t.fromSteps?1:0),offsets:new Int32Array(e.length+1),steps:new Int32Array(0),reversed:new Uint8Array(0)}}function Tt(e){return e.leaveReversed!==e.rejoinReversed?"switch":e.leavePos===e.rejoinPos?"adjacent":(e.leaveReversed?e.rejoinPos>e.leavePos:e.rejoinPos<e.leavePos)?"back":"forward"}function _e(e){return e.leavePasses>1||e.rejoinPasses>1}function Le(e){return{start:Math.min(e.leavePos,e.rejoinPos),end:Math.max(e.leavePos,e.rejoinPos)}}function Ke(e){return e>=1e6?`${Number((e/1e6).toPrecision(2))} Mb`:e>=1e3?`${Number((e/1e3).toPrecision(2))} kb`:`${e} bp`}function Kt(e,t="the reference"){let{start:r,end:s}=Le(e),o=Ke(s-r),i=Tt(e);return[i==="forward"?`no step on ${t} across ${o}`:i==="back"?`rejoins ${t} ${o} back`:i==="switch"?`rejoins ${t} on the other strand, ${o} away`:`between adjacent steps on ${t}`,`${Ke(e.ownBp)} of its own`,...e.missingBp>0?[`${Ke(e.missingBp)} not in the graph`]:[],..._e(e)?[Ut]:[]].join(" \xB7 ")}var Ut="placement choice",qt={missing:"not in the graph",elsewhere:"on nodes filed elsewhere",own:"of its own, not read",abridged:"abridged: steps not loaded",departure:"no step on the reference"},Jt="outside the extracted subgraph";function Nt(e,t,r,s){let o=t-e,i=s.filter(l=>l.hapStart>=e&&l.hapStart+l.ownBp<=t).sort((l,p)=>l.hapStart-p.hapStart),b=i[0];return b?Ct(e,t,r,i,b):[{bp:o}]}function Ct(e,t,r,s,o){let i=t-e,b=Math.min(r.after??0,i),l=Math.min(r.before??0,i-b),p=i-b-l,w=Math.min(s.reduce((S,W)=>S+W.missingBp,0),p),x=s.length===1&&o.hapStart===e&&o.hapStart+o.ownBp===t?{bp:p-w,cause:"own"}:{bp:p-w,cause:"elsewhere",near:o.hapStart===e?o.rejoinPos:o.leavePos};return[{bp:b},{bp:w,cause:"missing"},x,{bp:l}].filter(S=>S.bp>0)}function _t(e,t,r){return t===0?e:`${e}:${t}-${r}`}function qe(e,t){let r=e.names[t],s=Ce(r),o=e.starts[t],i=e.abridgedSteps?.[t]??Number.NaN,b=Number.isNaN(i)?{}:{abridged:{steps:i,bp:e.abridgedBp?.[t]??0}},l=e.trimmedBefore?.[t],p=e.trimmedAfter?.[t];return s?{name:`${s.sample}#${s.haplotype}#${s.contig}`,start:o,...s,...l===void 0?{}:{trimmedBefore:l},...p===void 0?{}:{trimmedAfter:p},...b}:{name:_t(r,o,e.ends[t]),start:o}}function Lt(e,t,r,s){let o=new Int32Array(r+1);for(let p of e)o[p+1]++;for(let p=0;p<r;p++)o[p+1]+=o[p];let i=o.slice(0,r),b=new Int32Array(e.length);e.forEach((p,w)=>{b[i[p]++]=t[w]});let l=new Int32Array(s.length).fill(-1);return Array.from({length:r},(p,w)=>{let d=[];for(let x=o[w];x<o[w+1];x++){let y=b[x];l[y]!==w&&(l[y]=w,d.push(s[y]))}return d})}function Je({nodes:e,links:t,walks:r},s){let o=new Uint8Array(e.names.length),i=(l,p)=>{o[l]===0&&(o[l]=p?2:1)};for(let l=0;l<t.from.length;l++)i(t.from[l],t.strands[l]&1),i(t.to[l],t.strands[l]&2);let b=r.offsets[r.names.length]??0;for(let l=0;l<b;l++){let p=r.steps[l];i(p,r.reversed[l]),s&&s[p]++}return e.names.map((l,p)=>`${l}${o[p]===2?"-":"+"}`)}function ts({nodes:e,links:t,walks:r,departures:s},o="Imported GFA"){let i=e.names.length,b=e.lengths.length,l=[];for(let f=0;f<r.names.length;f++)r.offsets[f+1]>r.offsets[f]&&l.push(f);let p=new Int32Array(i),w=Je({nodes:e,links:t,walks:r},p),d=[];for(let f=0;f<b;f++){let A=e.refs[f];d.push({id:w[f],name:e.names[f],length:e.lengths[f],depth:Math.max(p[f],1),stable:A<0?void 0:{refName:e.refNames[A],start:e.starts[f],rank:e.ranks[f]},samples:void 0})}let x=[],y=new Array(i),S=(f,A)=>{let g=y[f];if(g){for(let B=0;B<g.length;B+=2)if(g[B]===A)return g[B+1]}},W=(f,A,g)=>{let B=y[f];B?B.push(A,g):y[f]=[A,g]},D=[],oe=0;for(let f=0;f<t.from.length;f++){let A=t.from[f],g=t.to[f];x.push({from:w[A],to:w[g],fromStrand:t.strands[f]&1?"-":"+",toStrand:t.strands[f]&2?"-":"+"});let B=S(A,g);B===void 0&&(B=oe++,W(A,g,B),W(g,A,B)),D.push(B)}let H=new Int32Array(i+1);for(let f=0;f<i;f++)H[f+1]=H[f]+(y[f]?.length??0)/2;let ae=new Int32Array(H[i]),Ne=new Int32Array(H[i]);y.forEach((f,A)=>{for(let g=0;g<f.length;g+=2)ae[H[A]+g/2]=f[g],Ne[H[A]+g/2]=f[g+1]});let je=(f,A)=>{for(let g=H[f];g<H[f+1];g++)if(ae[g]===A)return Ne[g];return-1},ie=new Map,ce=[],T=new Int32Array(r.offsets[r.names.length]??0),we=new Int32Array(T.length),q=0,J=new Int32Array(oe).fill(-1),Q=[],fe=[],Y=r.offsets[r.names.length]??0,E=new Int32Array(Y),Me=new Float64Array(Y),U=new Uint8Array(Y),V=new Int32Array(i).fill(-1),$=[],M=[0],le=[],ye=new Map,pe=[];for(let f of l){let A=qe(r,f),{start:g,name:B}=A,Z=A.sample===void 0?r.names[f]:B,K=ie.get(Z);K===void 0&&(K=ce.length,ie.set(Z,K),ce.push(Z),le.push(Ue(Z)));let me=ye.get(B);me===void 0&&(me=pe.length,ye.set(B,me),pe.push(B));let We=le[K],Ae=r.offsets[f],xe=new Array(r.offsets[f+1]-Ae),Se=g,Pe=-1;for(let ee=Ae;ee<r.offsets[f+1];ee++){let a=r.steps[ee];xe[ee-Ae]=w[a],V[a]===-1&&(V[a]=M.at(-1),M.push(V[a]+p[a]),$.push(a));let m=V[a]++;if(E[m]=K,Me[m]=Se,U[m]=r.reversed[ee],Se+=a<b?e.lengths[a]:0,Pe>=0){let I=je(Pe,a);I>=0&&J[I]!==f&&(J[I]=f,T[q]=I,we[q++]=me)}Pe=a}Q.push({...A,nodeIds:xe}),fe.push({name:Z,sample:We,start:g,length:Se-g})}let Ge=Lt(T.subarray(0,q),we,oe,pe);x.forEach((f,A)=>{let g=Ge[D[A]];g.length>0&&(f.pathIds=g)});let X=l.length>0;return{name:o,nodes:d,edges:x,paths:X?Q:void 0,anchorPaths:X?fe:void 0,pathVisits:X?new vt({segments:$.map(f=>e.names[f]),offsets:Int32Array.from(M),path:E.subarray(0,M.at(-1)),start:Me.subarray(0,M.at(-1)),reversed:U.subarray(0,M.at(-1)),paths:ce,samples:le}):void 0,anchoredBy:d.some(f=>f.stable)?"tags":void 0,...s.names.length>0?{departures:s}:{}}}var Qe=1,St=2,Be=4,Pt=[void 0,"missing","elsewhere","own","abridged","departure"],It=3,wt=e=>Pt.indexOf(e)<<It;function Rt(e,t,r){return t!==void 0&&e.includes(t)?t:e.find(s=>r.has(s))??e[0]}function Gt(e){return Rt((e.paths??[]).map(t=>ve(t.name).name),e.referencePath,new Set(e.nodes.flatMap(t=>t.stable?.rank===0?[t.stable.refName]:[])))}var $t=e=>{let t=e&&De(e);return r=>r!==void 0&&(r===e||r===t)};function Wt(e){let t=new Map,r=[],s=[],o=y=>{let S=t.get(y);return S===void 0&&(S=r.length,t.set(y,S),r.push(y),s.push(0)),S},i=Gt(e),b=$t(i),l=new Map;for(let y of e.nodes){let S=o(y.id);s[S]=y.length,y.stable?.rank===0&&b(y.stable.refName)&&l.set(S,y.stable.start)}let p=e.paths??[],w=new Int32Array(p.length),d=new Int32Array(p.length),x=[];return p.forEach((y,S)=>{w[S]=x.length;for(let W of y.nodeIds)x.push(o(W));d[S]=x.length}),{heads:p,from:w,to:d,steps:Int32Array.from(x),lengths:Int32Array.from(s),names:r,reference:i,stableStart:y=>l.get(y)??Number.NaN,departures:e.departures}}function Ht(e,t,r){let{nodes:s,walks:o}=e,i=[];for(let d=0;d<o.names.length;d++)o.offsets[d+1]>o.offsets[d]&&i.push(d);let b=i.map(d=>qe(o,d)),l=new Set;for(let d=0;d<s.lengths.length;d++)s.refs[d]>=0&&s.ranks[d]===0&&l.add(s.refNames[s.refs[d]]);let p=Rt(b.map(d=>ve(d.name).name),t,l),w=$t(p);return{heads:b,from:Int32Array.from(i,d=>o.offsets[d]),to:Int32Array.from(i,d=>o.offsets[d+1]),steps:o.steps,lengths:s.lengths,names:r?Je(e):s.names,reference:p,stableStart:d=>d<s.lengths.length&&s.ranks[d]===0&&w(s.refNames[s.refs[d]])?s.starts[d]:Number.NaN,departures:e.departures}}function Ye(e){return e.sample??Ue(e.name)}function yt(e){return e.haplotype!==void 0&&e.sample!==void 0?`${e.sample}#${e.haplotype}`:Ye(e)}var At=class{constructor(e){this.offsets=[0],this.values=Array.from({length:e},()=>[])}get length(){return this.values[0].length}push(e,t,r,s,o){let i=this.values;i[0].push(e),i[1].push(t),i[2].push(r),i[3].push(s),o!==void 0&&i[4].push(o)}endRow(){this.offsets.push(this.length)}reorder(e,t){let r=new Uint32Array(e.length+1);e.forEach((o,i)=>{r[i+1]=r[i]+this.offsets[o+1]-this.offsets[o]});let s=t.map((o,i)=>{let b=this.values[i],l=o(this.length),p=0;for(let w of e)for(let d=this.offsets[w];d<this.offsets[w+1];d++)l[p++]=b[d];return l});return{offsets:r,columns:s}}},be=e=>new Float64Array(e);function cs(e,t,r={}){let{heads:s,from:o,to:i,steps:b,lengths:l,names:p,reference:w,stableStart:d,departures:x}="walks"in e?Ht(e,r.referencePath,r.visits):Wt(e),y=l.length,S=a=>a<y?l[a]:0,W=a=>ve(s[a].name).name,D=a=>s[a].start,oe=(a,m)=>(D(a)??0)-(D(m)??0),H=s.map((a,m)=>m),ae=H.filter(a=>W(a)===w).sort(oe),Ne=ae[0],je=H.filter(a=>W(a)!==w),ie=Vt(x,w);if(Ne===void 0||je.length===0&&ie.size===0)return;let ce=ht(je,W),T=new Float64Array(p.length).fill(Number.NaN),we=new Float64Array(p.length),q=new Map,J=-1/0,Q=1/0,fe=1/0,Y=-1/0,E=t&&t.end>t.start?t:void 0;for(let a of ae){let m=D(a)??0;for(let I=o[a],F=i[a];I<F;I++){let k=b[I],O=S(k);if(Number.isNaN(T[k]))T[k]=m,we[k]=m+O,fe=Math.min(fe,m),Y=Math.max(Y,m+O),E&&(m+O<=E.start&&(J=Math.max(J,m+O)),m>=E.end&&(Q=Math.min(Q,m)));else{let j=q.get(k);j?j.push(m):q.set(k,[T[k],m])}m+=O}}let Me=E===void 0||J>-1/0&&Q<1/0,U=new At(5),V=r.visits?new At(4):void 0,$=new Int32Array(0),M=new Float64Array(0),le=(a,m)=>{let I=a.map(Le).sort((j,C)=>j.start-C.start),F=m?.start??I[0]?.start??0,k=[];for(let j of I){let C=m?Math.max(j.start,m.start):j.start,R=m?Math.min(j.end,m.end):j.end,te=k.at(-1);R>C&&(te&&C<=te.end?te.end=Math.max(te.end,R):k.push({start:C,end:R}))}let O=0;for(let{start:j,end:C}of k)U.push(j-F,C-j,Number.NaN,Be|wt("departure"),Number.NaN),O+=C-j;return O},ye=(a,m,I)=>({name:a.name,label:yt(a),sample:Ye(a),haplotype:a.haplotype,bp:0,offReferenceBp:m.reduce((F,k)=>F+k.ownBp,0),gapBp:I,complete:!0,stop:void 0,axis:void 0,departures:m,stepless:!0,...m.some(_e)?{placementChoice:!0}:{}}),pe=(a,m)=>{let I=s[a[0]],F=ie.get(W(a[0]))??[],k=[],O=[...a].sort(oe),j=O.length-1,C=0;for(let n of O)j+=i[n]-o[n]+(s[n].abridged?1:0),C+=s[n].abridged?.steps??0;j>$.length&&($=new Int32Array(j*2),M=new Float64Array(j*2));let R=0,te=!1,Ee,He,se=new Map,Ve=0;for(let n of O){let c=D(n),u=c===void 0||Ee===void 0?0:c-Ee;(c===void 0||u<0)&&(te=!0),u<0&&s[He].abridged&&(Ve-=u);let h=Math.min(Ve,Math.max(u,0));Ve-=h;let v=u-h;v>0&&(se.set(R,Nt(c-v,c,{after:s[He].trimmedAfter,before:s[n].trimmedBefore},F)),$[R]=-v,M[R++]=Ee);let N=c??0,P=s[n].abridged;for(let _=o[n],L=i[n];_<L;_++){let re=b[_],G=P?P.bp-(N-(c??0))-S(re):0;G>0&&_===L-1&&_>o[n]&&(se.set(R,[{bp:G,cause:"abridged"}]),$[R]=-G,M[R++]=N,N+=G),$[R]=re,M[R++]=N,N+=S(re)}Ee=c===void 0?void 0:N,c!==void 0&&k.push([c,N]),He=n}let et=n=>n>=0&&n<R&&$[n]>=0&&!Number.isNaN(T[$[n]]),ke=n=>{let c=$[n];return M[n]+(c<0?-c:S(c))},Xe=n=>{let c=n?R-1:0,u=n?ke(c):M[c];return{last:c,departure:F.find(h=>n?h.hapStart===u:h.hapStart+h.ownBp===u),trimmed:n?s[O.at(-1)].trimmedAfter:s[O[0]].trimmedBefore}},Bt=(n,c)=>{let u=-1;for(let N=1;u<0&&N<R;N++)u=[n-N,n+N].find(et)??-1;let h=Xe(!0),v=Xe(!1);return u>=0?u>n==T[$[u]]>T[$[n]]:R>1?void 0:h.departure?!h.departure.leaveReversed:v.departure?!v.departure.rejoinReversed:(!h.trimmed||!!v.trimmed)===c},jt=(n,c,u)=>{let h=n>=0?n:c,v=h===n,N=Bt(h,v),P=N===v,{last:_,departure:L,trimmed:re}=Xe(P),G=et(_)&&!L&&!re,Ot={contigEnds:G,shortBp:G?Math.max(0,E.start-we[$[_]],T[$[_]]-E.end):0,...L?{goesOn:{departure:L,near:P?L.rejoinPos:L.leavePos}}:{}},dt=u?0:1,ut=P===u?M[h]:ke(h);return N===void 0?void 0:{stop:Ot,lo:P?h+dt:0,hi:P?R:h+1-dt,backward:!N,axisStart:N?P?ut:M[0]:P?ke(R-1):ut}},Ie=0,Re=R,de=!1,tt=!0,$e=-1,st=-1,Ze,nt,rt=(n,c)=>{let h=se.get(n)?.[0];if(c<=0||h?.cause!=="abridged")return 0;let v=Math.min(c,h.bp);return se.set(n,h.bp>v?[{...h,bp:h.bp-v}]:[]),$[n]+=v,v},ot=n=>se.get(n)?.[0]?.cause==="abridged",at=n=>{let c=$[n];return c<0||se.has(n)?Number.NaN:Number.isNaN(T[c])&&(ot(n-1)||ot(n+1))?d(c):T[c]},it=(n,c,u)=>{tt=!1;let h=n>=0||c>=0?jt(n,c,u):void 0;h&&({lo:Ie,hi:Re,backward:de,axisStart:Ze,stop:nt}=h)},Fe=0,ct=0;if(E&&Me){let n=-1,c=-1,u=-1/0,h=1/0;for(let v=0;v<R;v++){let N=at(v);if(!Number.isNaN(N)){let P=N+S($[v]);P<=E.start&&P>u&&(u=P,n=v),N>=E.end&&N<h&&(h=N,c=v)}}if(n<0||c<0)it(n,c,!1);else{Ie=Math.min(n,c)+1,Re=Math.max(n,c),de=n>c,$e=n,st=c;let v=de?-1:1;Fe=rt(n+v,J-u),ct=rt(c-v,h-Q)}}else if(E&&O.some(n=>s[n].trimmedBefore!==void 0||s[n].trimmedAfter!==void 0)){let n=-1,c=-1;for(let u=0;u<R;u++){let h=at(u);n<0&&h===fe&&(n=u),c<0&&h+S($[u])===Y&&(c=u)}(n<0||c<0)&&it(n,c,!0)}let ft=m!==void 0&&Ie>=Re&&F.some(n=>{let c=Le(n);return c.start<m.end&&c.end>m.start}),Oe=I.contig??De(ve(I.name).name),Mt=te||R===0?void 0:Ze!==void 0?{contig:Oe,start:Ze,reversed:de}:$e<0?{contig:Oe,start:M[0],reversed:!1}:$e<st?{contig:Oe,start:ke($e)+Fe,reversed:!1}:{contig:Oe,start:M[$e]-Fe,reversed:!0},ue=0,lt=0,pt=0,he=0,z=-1,ge=0,ne=Number.NaN,Te=Number.NaN,xt=n=>{let c=q.get(n);if(!c||Number.isNaN(Te))return T[n];let u=S(n),h=c[0],v=1/0;for(let N of c){let P=Math.min(Math.abs(N-Te),Math.abs(N+u-Te));P<v&&(h=N,v=P)}return h},[,ze,Et,kt]=U.values;for(let n=Ie;n<Re;n++){let c=de?Re-1-(n-Ie):n,u=$[c],h=se.get(c);if(h){for(let G of de?[...h].reverse():h)U.push(ue,G.bp,Number.NaN,Be|wt(G.cause),G.near??Number.NaN),ue+=G.bp;z=U.length-1,ge=Be,ne=Number.NaN,pt+=-u,he=0;continue}let v=S(u),N=xt(u),P=!Number.isNaN(N);V?.push(u,ue,v,P?1:0);let _=z>=0&&!Number.isNaN(ne),L=P&&_&&he>=0&&ne+(ze[z]??0)===N,re=P&&_&&he<=0&&N+v===ne;!P&&z>=0&&!(ge&(Qe|Be))?ze[z]+=v:L||re?(ze[z]+=v,L||(ne=N,Et[z]=N,ge|=St,kt[z]=ge),he=L?1:-1):(ge=P?Qe:0,ne=P?N:Number.NaN,U.push(ue,v,ne,ge,Number.NaN),z=U.length-1,he=0),ue+=v,P?Te=he<0?N:N+v:lt+=v}let Ft=ft?le(F,m):0;U.endRow(),V?.endRow();let mt=F.filter(n=>!k.some(([c,u])=>n.hapStart>c&&n.hapStart+n.ownBp<u));return ft?ye(I,F,Ft):{name:I.name,label:yt(I),sample:Ye(I),haplotype:I.haplotype,bp:ue,offReferenceBp:lt,gapBp:pt,complete:tt,stop:nt,axis:Mt,...C>0?{abridgedSteps:C}:{},...Fe+ct>0?{estimated:!0}:{},...mt.length>0?{departures:mt}:{},...F.some(_e)?{placementChoice:!0}:{}}},Ge=(a,m,I)=>{let F=le(m,I);return U.endRow(),V?.endRow(),ye({name:a,...Ce(a)},m,F)},X=pe(ae),{axis:f}=X,A=f?{start:f.start,end:f.start+X.bp+X.gapBp}:E,g=[...ce.values()].map((a,m)=>({meta:pe(a,A),row:m+1})),B=new Set(ce.keys());for(let[a,m]of ie)B.has(a)||g.push({meta:Ge(a,m,A),row:g.length+1});let Z=[X,...g.map(a=>a.meta)];if(new Set(Z.map(a=>a.label)).size<Z.length)for(let a of Z)a.label=gt(a.name)??a.label;g.sort((a,m)=>Number(m.meta.complete)-Number(a.meta.complete)||m.meta.bp-a.meta.bp||a.meta.label.localeCompare(m.meta.label));let K=[0,...g.map(a=>a.row)],{offsets:me,columns:We}=U.reorder(K,[be,be,be,a=>new Uint8Array(a),be]),[Ae,xe,Se,Pe,ee]=We;return{origin:E?E.start:D(Ne)??0,rows:[X,...g.map(a=>a.meta)],offsets:me,start:Ae,bp:xe,referenceStart:Se,flags:Pe,near:ee,visits:V&&Xt(V,K,p)}}function Vt(e,t){let r=new Map;if(e)for(let s=0;s<e.names.length;s++){let o=bt(e,s),i=ve(o.name).name;if(i!==t){let b=r.get(i);b?b.push(o):r.set(i,[o])}}for(let s of r.values())s.sort((o,i)=>o.hapStart-i.hapStart);return r}function Xt(e,t,r){let{offsets:s,columns:o}=e.reorder(t,[w=>new Int32Array(w),be,be,w=>new Uint8Array(w)]),[i,b,l,p]=o;return{offsets:s,node:i,start:b,bp:l,onReference:p,names:r}}function Zt(e,t){let r=e.flags[t],s={start:e.start[t],bp:e.bp[t],onReference:(r&Qe)!==0};if(r&Be){s.gap=!0;let o=Pt[r>>It&7];o&&(s.cause=o);let i=e.near[t];Number.isNaN(i)||(s.near=i)}else s.referenceStart=Number.isNaN(e.referenceStart[t])?void 0:e.referenceStart[t];return r&St&&(s.reversed=!0),s}function zt(e,t){let r=[];for(let s=e.offsets[t];s<e.offsets[t+1];s++)r.push({node:e.names[e.node[s]],start:e.start[s],bp:e.bp[s],onReference:e.onReference[s]===1});return r}function fs(e,t){let r=e.rows.map((s,o)=>{let i=[];for(let b=e.offsets[o];b<e.offsets[o+1];b++)i.push(Zt(e,b));return{...s,runs:i,visits:e.visits&&zt(e.visits,o)}});return{origin:e.origin,unit:t,reference:r[0],rows:r.slice(1)}}export{bt as a,Dt as b,_e as c,Le as d,Ke as e,Kt as f,Ut as g,qt as h,Jt as i,Nt as j,qe as k,ts as l,Gt as m,cs as n,fs as o};
2
+ //# sourceMappingURL=chunk-CJ4VON23.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@13.1.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-NPDW3JAD.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@13.1.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-DBLRFSET.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@13.1.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-WWQI7LPU.js"],
4
+ "sourcesContent": ["// src/gfa/departures.ts\nfunction departureAt(t, k) {\n return {\n name: t.names[k],\n hapStart: t.hapStarts[k],\n ownBp: t.ownBp[k],\n missingBp: t.missingBp[k],\n leavePos: t.leavePos[k],\n leaveReversed: t.leaveReversed[k] === 1,\n leavePasses: t.leavePasses[k],\n rejoinPos: t.rejoinPos[k],\n rejoinReversed: t.rejoinReversed[k] === 1,\n rejoinPasses: t.rejoinPasses[k],\n fromSteps: t.fromSteps[k] === 1\n };\n}\nfunction departureTable(departures = []) {\n return {\n names: departures.map((d) => d.name),\n hapStarts: Float64Array.from(departures, (d) => d.hapStart),\n ownBp: Float64Array.from(departures, (d) => d.ownBp),\n missingBp: Float64Array.from(departures, (d) => d.missingBp),\n leavePos: Float64Array.from(departures, (d) => d.leavePos),\n leaveReversed: Uint8Array.from(departures, (d) => d.leaveReversed ? 1 : 0),\n leavePasses: Int32Array.from(departures, (d) => d.leavePasses),\n rejoinPos: Float64Array.from(departures, (d) => d.rejoinPos),\n rejoinReversed: Uint8Array.from(\n departures,\n (d) => d.rejoinReversed ? 1 : 0\n ),\n rejoinPasses: Int32Array.from(departures, (d) => d.rejoinPasses),\n fromSteps: Uint8Array.from(departures, (d) => d.fromSteps ? 1 : 0),\n offsets: new Int32Array(departures.length + 1),\n steps: new Int32Array(0),\n reversed: new Uint8Array(0)\n };\n}\nfunction departureKind(d) {\n return d.leaveReversed !== d.rejoinReversed ? \"switch\" : d.leavePos === d.rejoinPos ? \"adjacent\" : (d.leaveReversed ? d.rejoinPos > d.leavePos : d.rejoinPos < d.leavePos) ? \"back\" : \"forward\";\n}\nfunction placementChoice(d) {\n return d.leavePasses > 1 || d.rejoinPasses > 1;\n}\nfunction departureSpan(d) {\n return {\n start: Math.min(d.leavePos, d.rejoinPos),\n end: Math.max(d.leavePos, d.rejoinPos)\n };\n}\nfunction roughBp(bp) {\n return bp >= 1e6 ? `${Number((bp / 1e6).toPrecision(2))} Mb` : bp >= 1e3 ? `${Number((bp / 1e3).toPrecision(2))} kb` : `${bp} bp`;\n}\nfunction departureText(d, reference = \"the reference\") {\n const { start, end } = departureSpan(d);\n const apart = roughBp(end - start);\n const kind = departureKind(d);\n const ends = kind === \"forward\" ? `no step on ${reference} across ${apart}` : kind === \"back\" ? `rejoins ${reference} ${apart} back` : kind === \"switch\" ? `rejoins ${reference} on the other strand, ${apart} away` : `between adjacent steps on ${reference}`;\n return [\n ends,\n `${roughBp(d.ownBp)} of its own`,\n ...d.missingBp > 0 ? [`${roughBp(d.missingBp)} not in the graph`] : [],\n ...placementChoice(d) ? [PLACEMENT_CHOICE_TEXT] : []\n ].join(\" \\xB7 \");\n}\nvar PLACEMENT_CHOICE_TEXT = \"placement choice\";\nvar GAP_CAUSE_TEXT = {\n missing: \"not in the graph\",\n elsewhere: \"on nodes filed elsewhere\",\n own: \"of its own, not read\",\n abridged: \"abridged: steps not loaded\",\n // a row of departures alone: the haplotype has no step on the reference\n // across the window, which says nothing of what it carries instead\n departure: \"no step on the reference\"\n};\nvar OUTSIDE_TEXT = \"outside the extracted subgraph\";\nfunction gapParts(from, to, trimmed, departures) {\n const bp = to - from;\n const inside = departures.filter((d) => d.hapStart >= from && d.hapStart + d.ownBp <= to).sort((a, b) => a.hapStart - b.hapStart);\n const first = inside[0];\n return first ? splitGap(from, to, trimmed, inside, first) : [{ bp }];\n}\nfunction splitGap(from, to, trimmed, inside, first) {\n const bp = to - from;\n const left = Math.min(trimmed.after ?? 0, bp);\n const right = Math.min(trimmed.before ?? 0, bp - left);\n const between = bp - left - right;\n const missing = Math.min(\n inside.reduce((sum, d) => sum + d.missingBp, 0),\n between\n );\n const spans = inside.length === 1 && first.hapStart === from && first.hapStart + first.ownBp === to;\n const rest = spans ? { bp: between - missing, cause: \"own\" } : {\n bp: between - missing,\n cause: \"elsewhere\",\n near: first.hapStart === from ? first.rejoinPos : first.leavePos\n };\n const parts = [\n { bp: left },\n { bp: missing, cause: \"missing\" },\n rest,\n { bp: right }\n ];\n return parts.filter((part) => part.bp > 0);\n}\n\nexport {\n departureAt,\n departureTable,\n departureKind,\n placementChoice,\n departureSpan,\n roughBp,\n departureText,\n PLACEMENT_CHOICE_TEXT,\n GAP_CAUSE_TEXT,\n OUTSIDE_TEXT,\n gapParts\n};\n", "import {\n PathVisits\n} from \"./chunk-BEUTROKU.js\";\nimport {\n panSNFields,\n panSNSample\n} from \"./chunk-2JL2JVZ2.js\";\n\n// src/gfa/graphTables.ts\nfunction pLineName(name, start, end) {\n return start === 0 ? name : `${name}:${start}-${end}`;\n}\nfunction tablePath(w, p) {\n const walkName = w.names[p];\n const fields = panSNFields(walkName);\n const start = w.starts[p];\n const steps = w.abridgedSteps?.[p] ?? Number.NaN;\n const abridged = Number.isNaN(steps) ? {} : { abridged: { steps, bp: w.abridgedBp?.[p] ?? 0 } };\n const trimmedBefore = w.trimmedBefore?.[p];\n const trimmedAfter = w.trimmedAfter?.[p];\n return fields ? {\n name: `${fields.sample}#${fields.haplotype}#${fields.contig}`,\n start,\n ...fields,\n ...trimmedBefore === void 0 ? {} : { trimmedBefore },\n ...trimmedAfter === void 0 ? {} : { trimmedAfter },\n ...abridged\n } : { name: pLineName(walkName, start, w.ends[p]), start };\n}\nfunction namesByList(lists, names, listCount, pathNames) {\n const starts = new Int32Array(listCount + 1);\n for (const list of lists) {\n starts[list + 1]++;\n }\n for (let i = 0; i < listCount; i++) {\n starts[i + 1] += starts[i];\n }\n const fill = starts.slice(0, listCount);\n const grouped = new Int32Array(lists.length);\n lists.forEach((list, i) => {\n grouped[fill[list]++] = names[i];\n });\n const listed = new Int32Array(pathNames.length).fill(-1);\n return Array.from({ length: listCount }, (_, list) => {\n const out = [];\n for (let i = starts[list]; i < starts[list + 1]; i++) {\n const k = grouped[i];\n if (listed[k] !== list) {\n listed[k] = list;\n out.push(pathNames[k]);\n }\n }\n return out;\n });\n}\nfunction tableNodeIds({ nodes: n, links: l, walks: w }, traversals) {\n const canonical = new Uint8Array(n.names.length);\n const claim = (node, reversed) => {\n if (canonical[node] === 0) {\n canonical[node] = reversed ? 2 : 1;\n }\n };\n for (let i = 0; i < l.from.length; i++) {\n claim(l.from[i], l.strands[i] & 1);\n claim(l.to[i], l.strands[i] & 2);\n }\n const stepCount = w.offsets[w.names.length] ?? 0;\n for (let s = 0; s < stepCount; s++) {\n const node = w.steps[s];\n claim(node, w.reversed[s]);\n if (traversals) {\n traversals[node]++;\n }\n }\n return n.names.map(\n (segment, i) => `${segment}${canonical[i] === 2 ? \"-\" : \"+\"}`\n );\n}\nfunction graphFromTables({ nodes: n, links: l, walks: w, departures }, name = \"Imported GFA\") {\n const count = n.names.length;\n const declared = n.lengths.length;\n const drawnWalks = [];\n for (let p = 0; p < w.names.length; p++) {\n if (w.offsets[p + 1] > w.offsets[p]) {\n drawnWalks.push(p);\n }\n }\n const traversals = new Int32Array(count);\n const ids = tableNodeIds({ nodes: n, links: l, walks: w }, traversals);\n const nodes = [];\n for (let i = 0; i < declared; i++) {\n const ref = n.refs[i];\n nodes.push({\n id: ids[i],\n name: n.names[i],\n length: n.lengths[i],\n depth: Math.max(traversals[i], 1),\n stable: ref < 0 ? void 0 : {\n refName: n.refNames[ref],\n start: n.starts[i],\n rank: n.ranks[i]\n },\n samples: void 0\n });\n }\n const edges = [];\n const neighbours = new Array(count);\n const pairList = (a, b) => {\n const near = neighbours[a];\n if (near) {\n for (let j = 0; j < near.length; j += 2) {\n if (near[j] === b) {\n return near[j + 1];\n }\n }\n }\n return void 0;\n };\n const addPair = (a, b, list) => {\n const near = neighbours[a];\n if (near) {\n near.push(b, list);\n } else {\n neighbours[a] = [b, list];\n }\n };\n const edgeLists = [];\n let lists = 0;\n for (let i = 0; i < l.from.length; i++) {\n const a = l.from[i];\n const b = l.to[i];\n edges.push({\n from: ids[a],\n to: ids[b],\n fromStrand: l.strands[i] & 1 ? \"-\" : \"+\",\n toStrand: l.strands[i] & 2 ? \"-\" : \"+\"\n });\n let list = pairList(a, b);\n if (list === void 0) {\n list = lists++;\n addPair(a, b, list);\n addPair(b, a, list);\n }\n edgeLists.push(list);\n }\n const adjacency = new Int32Array(count + 1);\n for (let a = 0; a < count; a++) {\n adjacency[a + 1] = adjacency[a] + (neighbours[a]?.length ?? 0) / 2;\n }\n const adjacentNode = new Int32Array(adjacency[count]);\n const adjacentList = new Int32Array(adjacency[count]);\n neighbours.forEach((near, a) => {\n for (let j = 0; j < near.length; j += 2) {\n adjacentNode[adjacency[a] + j / 2] = near[j];\n adjacentList[adjacency[a] + j / 2] = near[j + 1];\n }\n });\n const listOf = (a, b) => {\n for (let j = adjacency[a]; j < adjacency[a + 1]; j++) {\n if (adjacentNode[j] === b) {\n return adjacentList[j];\n }\n }\n return -1;\n };\n const nameIndex = /* @__PURE__ */ new Map();\n const pathNames = [];\n const crossedList = new Int32Array(w.offsets[w.names.length] ?? 0);\n const crossedName = new Int32Array(crossedList.length);\n let crossings = 0;\n const lastWalk = new Int32Array(lists).fill(-1);\n const paths = [];\n const anchorPaths = [];\n const totalSteps = w.offsets[w.names.length] ?? 0;\n const visitPath = new Int32Array(totalSteps);\n const visitStart = new Float64Array(totalSteps);\n const visitReversed = new Uint8Array(totalSteps);\n const fill = new Int32Array(count).fill(-1);\n const visitOrder = [];\n const blocks = [0];\n const pathSamples = [];\n const edgeNameIndex = /* @__PURE__ */ new Map();\n const edgeNames = [];\n for (const p of drawnWalks) {\n const head = tablePath(w, p);\n const { start, name: pathName } = head;\n const visitName = head.sample === void 0 ? w.names[p] : pathName;\n let named = nameIndex.get(visitName);\n if (named === void 0) {\n named = pathNames.length;\n nameIndex.set(visitName, named);\n pathNames.push(visitName);\n pathSamples.push(panSNSample(visitName));\n }\n let edgeNamed = edgeNameIndex.get(pathName);\n if (edgeNamed === void 0) {\n edgeNamed = edgeNames.length;\n edgeNameIndex.set(pathName, edgeNamed);\n edgeNames.push(pathName);\n }\n const visitSample = pathSamples[named];\n const first = w.offsets[p];\n const nodeIds = new Array(w.offsets[p + 1] - first);\n let pos = start;\n let prev = -1;\n for (let s = first; s < w.offsets[p + 1]; s++) {\n const node = w.steps[s];\n nodeIds[s - first] = ids[node];\n if (fill[node] === -1) {\n fill[node] = blocks.at(-1);\n blocks.push(fill[node] + traversals[node]);\n visitOrder.push(node);\n }\n const at = fill[node]++;\n visitPath[at] = named;\n visitStart[at] = pos;\n visitReversed[at] = w.reversed[s];\n pos += node < declared ? n.lengths[node] : 0;\n if (prev >= 0) {\n const list = listOf(prev, node);\n if (list >= 0 && lastWalk[list] !== p) {\n lastWalk[list] = p;\n crossedList[crossings] = list;\n crossedName[crossings++] = edgeNamed;\n }\n }\n prev = node;\n }\n paths.push({ ...head, nodeIds });\n anchorPaths.push({\n name: visitName,\n sample: visitSample,\n start,\n length: pos - start\n });\n }\n const listNames = namesByList(\n crossedList.subarray(0, crossings),\n crossedName,\n lists,\n edgeNames\n );\n edges.forEach((edge, i) => {\n const names = listNames[edgeLists[i]];\n if (names.length > 0) {\n edge.pathIds = names;\n }\n });\n const walked = drawnWalks.length > 0;\n return {\n name,\n nodes,\n edges,\n paths: walked ? paths : void 0,\n anchorPaths: walked ? anchorPaths : void 0,\n pathVisits: walked ? new PathVisits({\n segments: visitOrder.map((node) => n.names[node]),\n offsets: Int32Array.from(blocks),\n path: visitPath.subarray(0, blocks.at(-1)),\n start: visitStart.subarray(0, blocks.at(-1)),\n reversed: visitReversed.subarray(0, blocks.at(-1)),\n paths: pathNames,\n samples: pathSamples\n }) : void 0,\n anchoredBy: nodes.some((node) => node.stable) ? \"tags\" : void 0,\n ...departures.names.length > 0 ? { departures } : {}\n };\n}\nfunction graphTablesGFA({\n nodes,\n links,\n walks\n}) {\n const { names } = nodes;\n const lines = [\"H\tVN:Z:1.1\"];\n for (let i = 0; i < nodes.lengths.length; i++) {\n const ref = nodes.refs[i];\n const stable = ref < 0 ? \"\" : `\tSN:Z:${nodes.refNames[ref]}\tSO:i:${nodes.starts[i]}\tSR:i:${nodes.ranks[i]}`;\n lines.push(`S\t${names[i]}\t*\tLN:i:${nodes.lengths[i]}${stable}`);\n }\n for (let i = 0; i < links.from.length; i++) {\n const strands = links.strands[i];\n lines.push(\n `L\t${names[links.from[i]]}\t${strands & 1 ? \"-\" : \"+\"}\t${names[links.to[i]]}\t${strands & 2 ? \"-\" : \"+\"}\t0M`\n );\n }\n for (let p = 0; p < walks.names.length; p++) {\n const name = walks.names[p];\n const fields = panSNFields(name);\n const start = walks.starts[p];\n const end = walks.ends[p];\n const steps = [];\n for (let s = walks.offsets[p]; s < walks.offsets[p + 1]; s++) {\n steps.push([names[walks.steps[s]], walks.reversed[s]]);\n }\n lines.push(\n fields ? `W\t${fields.sample}\t${fields.haplotype}\t${fields.contig}\t${start}\t${end}\t${steps.map(([id, rev]) => (rev ? \"<\" : \">\") + id).join(\"\")}` : `P\t${pLineName(name, start, end)}\t${steps.map(([id, rev]) => id + (rev ? \"-\" : \"+\")).join(\",\")}\t*`\n );\n }\n return lines.join(\"\\n\");\n}\n\nexport {\n tablePath,\n tableNodeIds,\n graphFromTables,\n graphTablesGFA\n};\n", "import {\n tableNodeIds,\n tablePath\n} from \"./chunk-DBLRFSET.js\";\nimport {\n departureAt,\n departureSpan,\n gapParts,\n placementChoice\n} from \"./chunk-NPDW3JAD.js\";\nimport {\n pathOrigin\n} from \"./chunk-QBI6SC74.js\";\nimport {\n groupBy\n} from \"./chunk-BSOZW3FC.js\";\nimport {\n panSNContig,\n panSNFields,\n panSNHaplotype,\n panSNSample\n} from \"./chunk-2JL2JVZ2.js\";\n\n// src/layout/walkRowRuns.ts\nvar RUN_ON_REFERENCE = 1;\nvar RUN_REVERSED = 2;\nvar RUN_GAP = 4;\nvar GAP_CAUSES = [\n void 0,\n \"missing\",\n \"elsewhere\",\n \"own\",\n \"abridged\",\n \"departure\"\n];\nvar CAUSE_SHIFT = 3;\nvar causeFlags = (cause) => GAP_CAUSES.indexOf(cause) << CAUSE_SHIFT;\nfunction referenceOf(names, referencePath, rankZero) {\n return referencePath !== void 0 && names.includes(referencePath) ? referencePath : names.find((n) => rankZero.has(n)) ?? names[0];\n}\nfunction referenceWalkName(graph) {\n return referenceOf(\n (graph.paths ?? []).map((p) => pathOrigin(p.name).name),\n graph.referencePath,\n new Set(\n graph.nodes.flatMap(\n (n) => n.stable?.rank === 0 ? [n.stable.refName] : []\n )\n )\n );\n}\nvar namesReference = (reference) => {\n const contig = reference && panSNContig(reference);\n return (name) => name !== void 0 && (name === reference || name === contig);\n};\nfunction graphPieces(graph) {\n const index = /* @__PURE__ */ new Map();\n const names = [];\n const lengths = [];\n const indexOf = (id) => {\n let i = index.get(id);\n if (i === void 0) {\n i = names.length;\n index.set(id, i);\n names.push(id);\n lengths.push(0);\n }\n return i;\n };\n const reference = referenceWalkName(graph);\n const onReferenceContig = namesReference(reference);\n const stable = /* @__PURE__ */ new Map();\n for (const node of graph.nodes) {\n const i = indexOf(node.id);\n lengths[i] = node.length;\n if (node.stable?.rank === 0 && onReferenceContig(node.stable.refName)) {\n stable.set(i, node.stable.start);\n }\n }\n const heads = graph.paths ?? [];\n const from = new Int32Array(heads.length);\n const to = new Int32Array(heads.length);\n const steps = [];\n heads.forEach((path, p) => {\n from[p] = steps.length;\n for (const id of path.nodeIds) {\n steps.push(indexOf(id));\n }\n to[p] = steps.length;\n });\n return {\n heads,\n from,\n to,\n steps: Int32Array.from(steps),\n lengths: Int32Array.from(lengths),\n names,\n reference,\n stableStart: (node) => stable.get(node) ?? Number.NaN,\n departures: graph.departures\n };\n}\nfunction tablePieces(tables, referencePath, visits) {\n const { nodes: n, walks: w } = tables;\n const kept = [];\n for (let p = 0; p < w.names.length; p++) {\n if (w.offsets[p + 1] > w.offsets[p]) {\n kept.push(p);\n }\n }\n const heads = kept.map((p) => tablePath(w, p));\n const rankZero = /* @__PURE__ */ new Set();\n for (let i = 0; i < n.lengths.length; i++) {\n if (n.refs[i] >= 0 && n.ranks[i] === 0) {\n rankZero.add(n.refNames[n.refs[i]]);\n }\n }\n const reference = referenceOf(\n heads.map((h) => pathOrigin(h.name).name),\n referencePath,\n rankZero\n );\n const onReferenceContig = namesReference(reference);\n return {\n heads,\n from: Int32Array.from(kept, (p) => w.offsets[p]),\n to: Int32Array.from(kept, (p) => w.offsets[p + 1]),\n steps: w.steps,\n lengths: n.lengths,\n // a visit names its node as the Graph does, which costs a pass over the\n // steps\n names: visits ? tableNodeIds(tables) : n.names,\n reference,\n stableStart: (node) => node < n.lengths.length && n.ranks[node] === 0 && onReferenceContig(n.refNames[n.refs[node]]) ? n.starts[node] : Number.NaN,\n departures: tables.departures\n };\n}\nfunction sampleOf(path) {\n return path.sample ?? panSNSample(path.name);\n}\nfunction labelOf(path) {\n return path.haplotype !== void 0 && path.sample !== void 0 ? `${path.sample}#${path.haplotype}` : sampleOf(path);\n}\nvar Columns = class {\n constructor(width) {\n this.offsets = [0];\n this.values = Array.from({ length: width }, () => []);\n }\n get length() {\n return this.values[0].length;\n }\n push(a, b, c, d, e) {\n const v = this.values;\n v[0].push(a);\n v[1].push(b);\n v[2].push(c);\n v[3].push(d);\n if (e !== void 0) {\n v[4].push(e);\n }\n }\n endRow() {\n this.offsets.push(this.length);\n }\n // the rows in `order`, column i in the array `make[i]` makes\n reorder(order, make) {\n const offsets = new Uint32Array(order.length + 1);\n order.forEach((row, i) => {\n offsets[i + 1] = offsets[i] + this.offsets[row + 1] - this.offsets[row];\n });\n const columns = make.map((m, c) => {\n const from = this.values[c];\n const out = m(this.length);\n let at = 0;\n for (const row of order) {\n for (let k = this.offsets[row]; k < this.offsets[row + 1]; k++) {\n out[at++] = from[k];\n }\n }\n return out;\n });\n return { offsets, columns };\n }\n};\nvar float64 = (n) => new Float64Array(n);\nfunction walkRowRuns(source, region, o = {}) {\n const {\n heads,\n from,\n to,\n steps: all,\n lengths,\n names,\n reference,\n stableStart,\n departures\n } = \"walks\" in source ? tablePieces(source, o.referencePath, o.visits) : graphPieces(source);\n const declared = lengths.length;\n const lengthOf = (node) => node < declared ? lengths[node] : 0;\n const nameOf = (p) => pathOrigin(heads[p].name).name;\n const startOf = (p) => heads[p].start;\n const byStart = (a, b) => (startOf(a) ?? 0) - (startOf(b) ?? 0);\n const pieceIds = heads.map((_, p) => p);\n const referencePieces = pieceIds.filter((p) => nameOf(p) === reference).sort(byStart);\n const first = referencePieces[0];\n const others = pieceIds.filter((p) => nameOf(p) !== reference);\n const departuresOf = departuresByWalk(departures, reference);\n if (first === void 0 || others.length === 0 && departuresOf.size === 0) {\n return void 0;\n }\n const walks = groupBy(others, nameOf);\n const spanStart = new Float64Array(names.length).fill(Number.NaN);\n const spanEnd = new Float64Array(names.length);\n const revisits = /* @__PURE__ */ new Map();\n let flankEnd = -Infinity;\n let flankStart = Infinity;\n let referenceLo = Infinity;\n let referenceHi = -Infinity;\n const cut = region && region.end > region.start ? region : void 0;\n for (const piece of referencePieces) {\n let pos = startOf(piece) ?? 0;\n for (let s = from[piece], stop = to[piece]; s < stop; s++) {\n const node = all[s];\n const len = lengthOf(node);\n if (!Number.isNaN(spanStart[node])) {\n const starts = revisits.get(node);\n if (starts) {\n starts.push(pos);\n } else {\n revisits.set(node, [spanStart[node], pos]);\n }\n } else {\n spanStart[node] = pos;\n spanEnd[node] = pos + len;\n referenceLo = Math.min(referenceLo, pos);\n referenceHi = Math.max(referenceHi, pos + len);\n if (cut) {\n if (pos + len <= cut.start) {\n flankEnd = Math.max(flankEnd, pos + len);\n }\n if (pos >= cut.end) {\n flankStart = Math.min(flankStart, pos);\n }\n }\n }\n pos += len;\n }\n }\n const flanked = cut === void 0 || flankEnd > -Infinity && flankStart < Infinity;\n const runs = new Columns(5);\n const visits = o.visits ? new Columns(4) : void 0;\n let steps = new Int32Array(0);\n let stepStart = new Float64Array(0);\n const departureRuns = (own, bar2) => {\n const spans = own.map(departureSpan).sort((a, b) => a.start - b.start);\n const base = bar2?.start ?? spans[0]?.start ?? 0;\n const merged = [];\n for (const span of spans) {\n const start2 = bar2 ? Math.max(span.start, bar2.start) : span.start;\n const end = bar2 ? Math.min(span.end, bar2.end) : span.end;\n const last = merged.at(-1);\n if (end > start2) {\n if (last && start2 <= last.end) {\n last.end = Math.max(last.end, end);\n } else {\n merged.push({ start: start2, end });\n }\n }\n }\n let gapBp = 0;\n for (const { start: start2, end } of merged) {\n runs.push(\n start2 - base,\n end - start2,\n Number.NaN,\n RUN_GAP | causeFlags(\"departure\"),\n Number.NaN\n );\n gapBp += end - start2;\n }\n return gapBp;\n };\n const steplessMeta = (head, own, gapBp) => ({\n name: head.name,\n label: labelOf(head),\n sample: sampleOf(head),\n haplotype: head.haplotype,\n bp: 0,\n offReferenceBp: own.reduce((sum, d) => sum + d.ownBp, 0),\n gapBp,\n complete: true,\n stop: void 0,\n axis: void 0,\n departures: own,\n stepless: true,\n ...own.some(placementChoice) ? { placementChoice: true } : {}\n });\n const rowOf = (pieces, bar2) => {\n const head = heads[pieces[0]];\n const own = departuresOf.get(nameOf(pieces[0])) ?? [];\n const extents = [];\n const ordered = [...pieces].sort(byStart);\n let count = ordered.length - 1;\n let abridgedSteps = 0;\n for (const piece of ordered) {\n count += to[piece] - from[piece] + (heads[piece].abridged ? 1 : 0);\n abridgedSteps += heads[piece].abridged?.steps ?? 0;\n }\n if (count > steps.length) {\n steps = new Int32Array(count * 2);\n stepStart = new Float64Array(count * 2);\n }\n let length = 0;\n let unplaced = false;\n let end;\n let previous;\n const partsAt = /* @__PURE__ */ new Map();\n let owed = 0;\n for (const piece of ordered) {\n const start2 = startOf(piece);\n const jump = start2 === void 0 || end === void 0 ? 0 : start2 - end;\n if (start2 === void 0 || jump < 0) {\n unplaced = true;\n }\n if (jump < 0 && heads[previous].abridged) {\n owed -= jump;\n }\n const covered = Math.min(owed, Math.max(jump, 0));\n owed -= covered;\n const gap = jump - covered;\n if (gap > 0) {\n partsAt.set(\n length,\n gapParts(\n start2 - gap,\n start2,\n {\n after: heads[previous].trimmedAfter,\n before: heads[piece].trimmedBefore\n },\n own\n )\n );\n steps[length] = -gap;\n stepStart[length++] = end;\n }\n let pos = start2 ?? 0;\n const abridged = heads[piece].abridged;\n for (let s = from[piece], stop2 = to[piece]; s < stop2; s++) {\n const node = all[s];\n const bp3 = abridged ? abridged.bp - (pos - (start2 ?? 0)) - lengthOf(node) : 0;\n if (bp3 > 0 && s === stop2 - 1 && s > from[piece]) {\n partsAt.set(length, [{ bp: bp3, cause: \"abridged\" }]);\n steps[length] = -bp3;\n stepStart[length++] = pos;\n pos += bp3;\n }\n steps[length] = node;\n stepStart[length++] = pos;\n pos += lengthOf(node);\n }\n end = start2 === void 0 ? void 0 : pos;\n if (start2 !== void 0) {\n extents.push([start2, pos]);\n }\n previous = piece;\n }\n const onReference = (i) => i >= 0 && i < length && steps[i] >= 0 && !Number.isNaN(spanStart[steps[i]]);\n const stepEnd = (i) => {\n const id = steps[i];\n return stepStart[i] + (id < 0 ? -id : lengthOf(id));\n };\n const endOf = (after) => {\n const last2 = after ? length - 1 : 0;\n const edge = after ? stepEnd(last2) : stepStart[last2];\n return {\n last: last2,\n departure: own.find(\n (d) => after ? d.hapStart === edge : d.hapStart + d.ownBp === edge\n ),\n trimmed: after ? heads[ordered.at(-1)].trimmedAfter : heads[ordered[0]].trimmedBefore\n };\n };\n const flankForward = (flank, rightward) => {\n let near2 = -1;\n for (let d = 1; near2 < 0 && d < length; d++) {\n near2 = [flank - d, flank + d].find(onReference) ?? -1;\n }\n const tail = endOf(true);\n const lead = endOf(false);\n return near2 >= 0 ? near2 > flank === spanStart[steps[near2]] > spanStart[steps[flank]] : length > 1 ? void 0 : tail.departure ? !tail.departure.leaveReversed : lead.departure ? !lead.departure.rejoinReversed : (!tail.trimmed || !!lead.trimmed) === rightward;\n };\n const partialSide = (i0, i1, inside) => {\n const flank = i0 >= 0 ? i0 : i1;\n const rightward = flank === i0;\n const forward = flankForward(flank, rightward);\n const after = forward === rightward;\n const { last: last2, departure, trimmed } = endOf(after);\n const contigEnds = onReference(last2) && !departure && !trimmed;\n const stop2 = {\n contigEnds,\n shortBp: contigEnds ? Math.max(\n 0,\n cut.start - spanEnd[steps[last2]],\n spanStart[steps[last2]] - cut.end\n ) : 0,\n ...departure ? {\n goesOn: {\n departure,\n near: after ? departure.rejoinPos : departure.leavePos\n }\n } : {}\n };\n const skip = inside ? 0 : 1;\n const from2 = after === inside ? stepStart[flank] : stepEnd(flank);\n return forward === void 0 ? void 0 : {\n stop: stop2,\n lo: after ? flank + skip : 0,\n hi: after ? length : flank + 1 - skip,\n backward: !forward,\n axisStart: forward ? after ? from2 : stepStart[0] : after ? stepEnd(length - 1) : from2\n };\n };\n let lo = 0;\n let hi = length;\n let backward = false;\n let complete = true;\n let flankFrom = -1;\n let flankTo = -1;\n let axisStart;\n let stop;\n const trimAbridged = (inner, bp3) => {\n const parts = partsAt.get(inner);\n const gap = parts?.[0];\n if (bp3 <= 0 || gap?.cause !== \"abridged\") {\n return 0;\n }\n const trimmed = Math.min(bp3, gap.bp);\n partsAt.set(\n inner,\n gap.bp > trimmed ? [{ ...gap, bp: gap.bp - trimmed }] : []\n );\n steps[inner] += trimmed;\n return trimmed;\n };\n const abridgedAt = (i) => partsAt.get(i)?.[0]?.cause === \"abridged\";\n const placeStart = (i) => {\n const id = steps[i];\n if (id < 0 || partsAt.has(i)) {\n return Number.NaN;\n }\n return Number.isNaN(spanStart[id]) && (abridgedAt(i - 1) || abridgedAt(i + 1)) ? stableStart(id) : spanStart[id];\n };\n const stopsInside = (i0, i1, inside) => {\n complete = false;\n const side = i0 >= 0 || i1 >= 0 ? partialSide(i0, i1, inside) : void 0;\n if (side) {\n ;\n ({ lo, hi, backward, axisStart, stop } = side);\n }\n };\n let leftTrim = 0;\n let rightTrim = 0;\n if (cut && flanked) {\n let i0 = -1;\n let i1 = -1;\n let bestEnd = -Infinity;\n let bestStart = Infinity;\n for (let i = 0; i < length; i++) {\n const start2 = placeStart(i);\n if (!Number.isNaN(start2)) {\n const end2 = start2 + lengthOf(steps[i]);\n if (end2 <= cut.start && end2 > bestEnd) {\n bestEnd = end2;\n i0 = i;\n }\n if (start2 >= cut.end && start2 < bestStart) {\n bestStart = start2;\n i1 = i;\n }\n }\n }\n if (i0 < 0 || i1 < 0) {\n stopsInside(i0, i1, false);\n } else {\n lo = Math.min(i0, i1) + 1;\n hi = Math.max(i0, i1);\n backward = i0 > i1;\n flankFrom = i0;\n flankTo = i1;\n const inward = backward ? -1 : 1;\n leftTrim = trimAbridged(i0 + inward, flankEnd - bestEnd);\n rightTrim = trimAbridged(i1 - inward, bestStart - flankStart);\n }\n } else if (cut && ordered.some(\n (p) => heads[p].trimmedBefore !== void 0 || heads[p].trimmedAfter !== void 0\n )) {\n let i0 = -1;\n let i1 = -1;\n for (let i = 0; i < length; i++) {\n const start2 = placeStart(i);\n if (i0 < 0 && start2 === referenceLo) {\n i0 = i;\n }\n if (i1 < 0 && start2 + lengthOf(steps[i]) === referenceHi) {\n i1 = i;\n }\n }\n if (i0 < 0 || i1 < 0) {\n stopsInside(i0, i1, true);\n }\n }\n const stepless = bar2 !== void 0 && lo >= hi && own.some((d) => {\n const span = departureSpan(d);\n return span.start < bar2.end && span.end > bar2.start;\n });\n const contig = head.contig ?? panSNContig(pathOrigin(head.name).name);\n const axis2 = unplaced || length === 0 ? void 0 : axisStart !== void 0 ? { contig, start: axisStart, reversed: backward } : flankFrom < 0 ? { contig, start: stepStart[0], reversed: false } : flankFrom < flankTo ? {\n contig,\n start: stepEnd(flankFrom) + leftTrim,\n reversed: false\n } : {\n contig,\n start: stepStart[flankFrom] - leftTrim,\n reversed: true\n };\n let bp2 = 0;\n let offReferenceBp = 0;\n let gapBp = 0;\n let step = 0;\n let last = -1;\n let lastFlags = 0;\n let lastRef = Number.NaN;\n let cursor = Number.NaN;\n const placeOf = (id) => {\n const starts = revisits.get(id);\n if (!starts || Number.isNaN(cursor)) {\n return spanStart[id];\n }\n const len = lengthOf(id);\n let best = starts[0];\n let bestGap = Infinity;\n for (const start2 of starts) {\n const gap = Math.min(\n Math.abs(start2 - cursor),\n Math.abs(start2 + len - cursor)\n );\n if (gap < bestGap) {\n best = start2;\n bestGap = gap;\n }\n }\n return best;\n };\n const [, runBp, runRef, runFlags] = runs.values;\n for (let k = lo; k < hi; k++) {\n const index = backward ? hi - 1 - (k - lo) : k;\n const id = steps[index];\n const parts = partsAt.get(index);\n if (parts) {\n for (const part of backward ? [...parts].reverse() : parts) {\n runs.push(\n bp2,\n part.bp,\n Number.NaN,\n RUN_GAP | causeFlags(part.cause),\n part.near ?? Number.NaN\n );\n bp2 += part.bp;\n }\n last = runs.length - 1;\n lastFlags = RUN_GAP;\n lastRef = Number.NaN;\n gapBp += -id;\n step = 0;\n continue;\n }\n const len = lengthOf(id);\n const at = placeOf(id);\n const on = !Number.isNaN(at);\n visits?.push(id, bp2, len, on ? 1 : 0);\n const placed = last >= 0 && !Number.isNaN(lastRef);\n const forward = on && placed && step >= 0 && lastRef + (runBp[last] ?? 0) === at;\n const back = on && placed && step <= 0 && at + len === lastRef;\n if (!on && last >= 0 && !(lastFlags & (RUN_ON_REFERENCE | RUN_GAP))) {\n runBp[last] += len;\n } else if (forward || back) {\n runBp[last] += len;\n if (!forward) {\n lastRef = at;\n runRef[last] = at;\n lastFlags |= RUN_REVERSED;\n runFlags[last] = lastFlags;\n }\n step = forward ? 1 : -1;\n } else {\n lastFlags = on ? RUN_ON_REFERENCE : 0;\n lastRef = on ? at : Number.NaN;\n runs.push(bp2, len, lastRef, lastFlags, Number.NaN);\n last = runs.length - 1;\n step = 0;\n }\n bp2 += len;\n if (on) {\n cursor = step < 0 ? at : at + len;\n } else {\n offReferenceBp += len;\n }\n }\n const departureGapBp = stepless ? departureRuns(own, bar2) : 0;\n runs.endRow();\n visits?.endRow();\n const undrawn = own.filter(\n (d) => !extents.some(([a, b]) => d.hapStart > a && d.hapStart + d.ownBp < b)\n );\n return stepless ? steplessMeta(head, own, departureGapBp) : {\n name: head.name,\n label: labelOf(head),\n sample: sampleOf(head),\n haplotype: head.haplotype,\n bp: bp2,\n offReferenceBp,\n gapBp,\n complete,\n stop,\n axis: axis2,\n ...abridgedSteps > 0 ? { abridgedSteps } : {},\n ...leftTrim + rightTrim > 0 ? { estimated: true } : {},\n ...undrawn.length > 0 ? { departures: undrawn } : {},\n ...own.some(placementChoice) ? { placementChoice: true } : {}\n };\n };\n const steplessRowOf = (name, own, bar2) => {\n const gapBp = departureRuns(own, bar2);\n runs.endRow();\n visits?.endRow();\n return steplessMeta({ name, ...panSNFields(name) }, own, gapBp);\n };\n const referenceRow = rowOf(referencePieces);\n const { axis } = referenceRow;\n const bar = axis ? {\n start: axis.start,\n end: axis.start + referenceRow.bp + referenceRow.gapBp\n } : cut;\n const rows = [...walks.values()].map((pieces, i) => ({\n meta: rowOf(pieces, bar),\n row: i + 1\n }));\n const drawn = new Set(walks.keys());\n for (const [name, own] of departuresOf) {\n if (!drawn.has(name)) {\n rows.push({\n meta: steplessRowOf(name, own, bar),\n row: rows.length + 1\n });\n }\n }\n const metas = [referenceRow, ...rows.map((r) => r.meta)];\n if (new Set(metas.map((m) => m.label)).size < metas.length) {\n for (const meta of metas) {\n meta.label = panSNHaplotype(meta.name) ?? meta.label;\n }\n }\n rows.sort(\n (a, b) => Number(b.meta.complete) - Number(a.meta.complete) || b.meta.bp - a.meta.bp || a.meta.label.localeCompare(b.meta.label)\n );\n const order = [0, ...rows.map((r) => r.row)];\n const { offsets, columns } = runs.reorder(order, [\n float64,\n float64,\n float64,\n (n) => new Uint8Array(n),\n float64\n ]);\n const [start, bp, referenceStart, flags, near] = columns;\n return {\n origin: cut ? cut.start : startOf(first) ?? 0,\n rows: [referenceRow, ...rows.map((r) => r.meta)],\n offsets,\n start,\n bp,\n referenceStart,\n flags,\n near,\n visits: visits && visitColumns(visits, order, names)\n };\n}\nfunction departuresByWalk(table, reference) {\n const byWalk = /* @__PURE__ */ new Map();\n if (table) {\n for (let k = 0; k < table.names.length; k++) {\n const d = departureAt(table, k);\n const name = pathOrigin(d.name).name;\n if (name !== reference) {\n const list = byWalk.get(name);\n if (list) {\n list.push(d);\n } else {\n byWalk.set(name, [d]);\n }\n }\n }\n }\n for (const list of byWalk.values()) {\n list.sort((a, b) => a.hapStart - b.hapStart);\n }\n return byWalk;\n}\nfunction visitColumns(visits, order, names) {\n const { offsets, columns } = visits.reorder(order, [\n (n) => new Int32Array(n),\n float64,\n float64,\n (n) => new Uint8Array(n)\n ]);\n const [node, start, bp, onReference] = columns;\n return { offsets, node, start, bp, onReference, names };\n}\nfunction runAt(t, k) {\n const f = t.flags[k];\n const run = {\n start: t.start[k],\n bp: t.bp[k],\n onReference: (f & RUN_ON_REFERENCE) !== 0\n };\n if (f & RUN_GAP) {\n run.gap = true;\n const cause = GAP_CAUSES[f >> CAUSE_SHIFT & 7];\n if (cause) {\n run.cause = cause;\n }\n const near = t.near[k];\n if (!Number.isNaN(near)) {\n run.near = near;\n }\n } else {\n run.referenceStart = Number.isNaN(t.referenceStart[k]) ? void 0 : t.referenceStart[k];\n }\n if (f & RUN_REVERSED) {\n run.reversed = true;\n }\n return run;\n}\nfunction visitsOf(v, row) {\n const out = [];\n for (let k = v.offsets[row]; k < v.offsets[row + 1]; k++) {\n out.push({\n node: v.names[v.node[k]],\n start: v.start[k],\n bp: v.bp[k],\n onReference: v.onReference[k] === 1\n });\n }\n return out;\n}\nfunction walkRowsOf(t, unit) {\n const rows = t.rows.map((meta, i) => {\n const runs = [];\n for (let k = t.offsets[i]; k < t.offsets[i + 1]; k++) {\n runs.push(runAt(t, k));\n }\n return {\n ...meta,\n runs,\n visits: t.visits && visitsOf(t.visits, i)\n };\n });\n return { origin: t.origin, unit, reference: rows[0], rows: rows.slice(1) };\n}\n\nexport {\n referenceWalkName,\n walkRowRuns,\n runAt,\n walkRowsOf\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["departureAt", "t", "k", "departureTable", "departures", "d", "departureKind", "placementChoice", "departureSpan", "roughBp", "bp", "departureText", "reference", "start", "end", "apart", "kind", "PLACEMENT_CHOICE_TEXT", "GAP_CAUSE_TEXT", "OUTSIDE_TEXT", "gapParts", "from", "to", "trimmed", "inside", "a", "b", "first", "splitGap", "left", "right", "between", "missing", "sum", "rest", "part", "pLineName", "name", "start", "end", "tablePath", "w", "p", "walkName", "fields", "panSNFields", "steps", "abridged", "trimmedBefore", "trimmedAfter", "namesByList", "lists", "names", "listCount", "pathNames", "starts", "list", "i", "fill", "grouped", "listed", "_", "out", "k", "tableNodeIds", "n", "l", "traversals", "canonical", "claim", "node", "reversed", "stepCount", "s", "segment", "graphFromTables", "departures", "count", "declared", "drawnWalks", "ids", "nodes", "ref", "edges", "neighbours", "pairList", "a", "b", "near", "j", "addPair", "edgeLists", "adjacency", "adjacentNode", "adjacentList", "listOf", "nameIndex", "crossedList", "crossedName", "crossings", "lastWalk", "paths", "anchorPaths", "totalSteps", "visitPath", "visitStart", "visitReversed", "visitOrder", "blocks", "pathSamples", "edgeNameIndex", "edgeNames", "head", "pathName", "visitName", "named", "panSNSample", "edgeNamed", "visitSample", "first", "nodeIds", "pos", "prev", "at", "listNames", "edge", "walked", "PathVisits", "RUN_ON_REFERENCE", "RUN_REVERSED", "RUN_GAP", "GAP_CAUSES", "CAUSE_SHIFT", "causeFlags", "cause", "referenceOf", "names", "referencePath", "rankZero", "n", "referenceWalkName", "graph", "p", "pathOrigin", "namesReference", "reference", "contig", "panSNContig", "name", "graphPieces", "index", "lengths", "indexOf", "id", "i", "onReferenceContig", "stable", "node", "heads", "from", "to", "steps", "path", "tablePieces", "tables", "visits", "w", "kept", "tablePath", "h", "tableNodeIds", "sampleOf", "panSNSample", "labelOf", "Columns", "width", "a", "b", "c", "d", "e", "v", "order", "make", "offsets", "row", "columns", "m", "out", "at", "k", "float64", "walkRowRuns", "source", "region", "o", "all", "stableStart", "departures", "declared", "lengthOf", "nameOf", "startOf", "byStart", "pieceIds", "_", "referencePieces", "first", "others", "departuresOf", "departuresByWalk", "walks", "groupBy", "spanStart", "spanEnd", "revisits", "flankEnd", "flankStart", "referenceLo", "referenceHi", "cut", "piece", "pos", "s", "stop", "len", "starts", "flanked", "runs", "stepStart", "departureRuns", "own", "bar2", "spans", "departureSpan", "base", "merged", "span", "start2", "end", "last", "gapBp", "steplessMeta", "head", "sum", "placementChoice", "rowOf", "pieces", "extents", "ordered", "count", "abridgedSteps", "length", "unplaced", "previous", "partsAt", "owed", "jump", "covered", "gap", "gapParts", "abridged", "stop2", "bp3", "onReference", "stepEnd", "endOf", "after", "last2", "edge", "flankForward", "flank", "rightward", "near2", "tail", "lead", "partialSide", "i0", "i1", "inside", "forward", "departure", "trimmed", "contigEnds", "skip", "from2", "lo", "hi", "backward", "complete", "flankFrom", "flankTo", "axisStart", "trimAbridged", "inner", "abridgedAt", "placeStart", "stopsInside", "side", "leftTrim", "rightTrim", "bestEnd", "bestStart", "end2", "inward", "stepless", "axis2", "bp2", "offReferenceBp", "step", "lastFlags", "lastRef", "cursor", "placeOf", "best", "bestGap", "runBp", "runRef", "runFlags", "parts", "part", "on", "placed", "back", "departureGapBp", "undrawn", "steplessRowOf", "panSNFields", "referenceRow", "axis", "bar", "rows", "drawn", "metas", "r", "meta", "panSNHaplotype", "start", "bp", "referenceStart", "flags", "near", "visitColumns", "table", "byWalk", "departureAt", "list", "runAt", "t", "f", "run", "visitsOf", "walkRowsOf", "unit"]
7
+ }
@@ -1,2 +1,2 @@
1
1
  function o(n,{refRefNameMap:f={},queryRefNameMap:m={}}={}){let r=[];for(let e of n){let t=e.get("mate");if(t){let a=e.get("refName");r.push({refRefName:f[a]??a,queryRefName:m[t.refName]??t.refName,refStart:e.get("start"),refEnd:e.get("end"),queryStart:t.start,queryEnd:t.end,strand:e.get("strand")??1})}}return r}export{o as a};
2
- //# sourceMappingURL=chunk-AGUEPVOR.js.map
2
+ //# sourceMappingURL=chunk-FQI75MV6.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../node_modules/.pnpm/@jbrowse+synteny-core@5.0.0-beta.19_@emotion+react@11.14.0_@types+react@19.3.0_react@19_eb34fd01d29d05a1c3ac8167d41484d7/node_modules/@jbrowse/synteny-core/esm/extractAlignmentData.js"],
3
+ "sources": ["../../node_modules/.pnpm/@jbrowse+synteny-core@5.0.0-beta.20_@emotion+react@11.14.0_@types+react@19.3.0_react@19_56a3e322b5b3da42dc5bccc6b71729c9/node_modules/@jbrowse/synteny-core/esm/extractAlignmentData.js"],
4
4
  "sourcesContent": ["/**\n * Extract diagonalization input (one entry per mated alignment) from raw\n * comparative features. Shared by the dotplot and synteny diagonalize RPCs so\n * both feed `diagonalizeRegions` from the same feature shape \u2014 a feature with a\n * `mate` (the paired location on the other assembly), `refName`, `start`,\n * `end`, and `strand`. Features without a `mate` are skipped.\n *\n * Features are fetched with adapter-space regions, so their `refName`/\n * `mate.refName` come back in the adapter's namespace. The optional\n * `refRefNameMap`/`queryRefNameMap` (both adapter refName -> canonical refName)\n * translate the reference and query axes back into the view's canonical\n * namespace so the diagonalization can match them against canonical regions and\n * hand canonical regions back to the view. A refName absent from a map is\n * already canonical (no alias) and passes through unchanged; an omitted map\n * leaves that axis in adapter space (fine when the caller passes adapter-space\n * regions for that axis).\n */\nexport function extractAlignmentData(features, { refRefNameMap = {}, queryRefNameMap = {}, } = {}) {\n const out = [];\n for (const feat of features) {\n const mate = feat.get('mate');\n if (mate) {\n const refName = feat.get('refName');\n out.push({\n refRefName: refRefNameMap[refName] ?? refName,\n queryRefName: queryRefNameMap[mate.refName] ?? mate.refName,\n refStart: feat.get('start'),\n refEnd: feat.get('end'),\n queryStart: mate.start,\n queryEnd: mate.end,\n strand: feat.get('strand') ?? 1,\n });\n }\n }\n return out;\n}\n"],
5
5
  "mappings": "AAiBO,SAASA,EAAqBC,EAAU,CAAE,cAAAC,EAAgB,CAAC,EAAG,gBAAAC,EAAkB,CAAC,CAAG,EAAI,CAAC,EAAG,CAC/F,IAAMC,EAAM,CAAC,EACb,QAAWC,KAAQJ,EAAU,CACzB,IAAMK,EAAOD,EAAK,IAAI,MAAM,EAC5B,GAAIC,EAAM,CACN,IAAMC,EAAUF,EAAK,IAAI,SAAS,EAClCD,EAAI,KAAK,CACL,WAAYF,EAAcK,CAAO,GAAKA,EACtC,aAAcJ,EAAgBG,EAAK,OAAO,GAAKA,EAAK,QACpD,SAAUD,EAAK,IAAI,OAAO,EAC1B,OAAQA,EAAK,IAAI,KAAK,EACtB,WAAYC,EAAK,MACjB,SAAUA,EAAK,IACf,OAAQD,EAAK,IAAI,QAAQ,GAAK,CAClC,CAAC,CACL,CACJ,CACA,OAAOD,CACX",
6
6
  "names": ["extractAlignmentData", "features", "refRefNameMap", "queryRefNameMap", "out", "feat", "mate", "refName"]
@@ -1,2 +1,2 @@
1
- import{G as jn,H as Jn,I as un,J as dn,S as Qn,U as Qt,V as mn,Y as Zn,Z as te,d as $n,e as Kn,f as hn,h as Un,i as Yn,j as qn,k as Vn,l as $t,y as zn}from"./chunk-CHLLRNBQ.js";import{a as Bt,g as Xt}from"./chunk-SKB4GSET.js";var Et=2,ae=1.5,Ke=4,ne=12,Ue=64,ee=24,Ye=48,oe="a thread per pass through a node",pn=t=>t.length>1&&t.some(n=>n.mostPasses>1),ce=t=>t*Et+Math.max(0,t-1)*ae,se=t=>t.reduce((n,o)=>n+o,0);function ie(t,n,o){let e=t.map((a,c)=>n[c]>1?ce(a):o*Math.min(1,a)),s=0,r=t.map(a=>{let c=Math.min(1,a),i=Ke*c*s;return s=Math.max(s,c),i});return{widths:e,gaps:r,band:se(e)+se(r)}}var gn=Et+ae;function Kt(t,n,o=t){let{widths:e,gaps:s,band:r}=ie(t,n,Et),a=-r/2;return e.map((c,i)=>{a+=s[i];let f=n[i]>1?Math.max(0,c-ce(o[i])):0,l=a+f/2+Et/2;return a+=c,l})}var nn=t=>ie(t,t,Et).band,en=t=>Math.min(1,Ye/(nn(t)||1)),is=t=>en(t.map(n=>n.mostPasses))<1?`${oe}, thinned to fit`:oe;function Zt(t,n){let o=t.stepOf[n],e=n-t.starts[o];return t.forward[o]?e:t.starts[o+1]-t.starts[o]-1-e}var Nt=(t,n)=>{let o=n.x-t.x,e=n.y-t.y;return Math.sqrt(o*o+e*e)};function Ft(t){let n=new Float64Array(t.length);for(let o=1;o<t.length;o++)n[o]=n[o-1]+Nt(t[o-1],t[o]);return n}function yn(t,n){let o=new Set;return t.map(e=>{let s=new Map;return e.map(r=>r.map(a=>{let c=s.get(a)??0;s.set(a,c+1);let i=n[a],f=!!i?.length&&!o.has(a);return f&&o.add(a),{id:a,visit:c,owned:f,segments:i}}))})}function qe(t,n,o){let e=[];return t.forEach((s,r)=>{let a=0;for(let M of s)for(let{segments:A}of M)a+=A?.length??0;let c=new Float64Array(a),i=new Float64Array(a),f=0,l=0,h=u();function u(){return{walk:r,ids:[],visits:[],forward:[],owned:[],starts:[0]}}let m=()=>{if(h.ids.length){let M=new Int32Array(f-l);for(let A=0;A<h.ids.length;A++)M.fill(A,h.starts[A],h.starts[A+1]);e.push({...h,xs:c.subarray(l,f),ys:i.subarray(l,f),stepOf:M})}h=u(),l=f},w=(M,A,R)=>{let P=R.x-M,k=R.y*n-A;return Math.sqrt(P*P+k*k)};for(let M of s)M.forEach(({id:A,visit:R,owned:P,segments:k},W)=>{if(!k?.length){m();return}let F=k[0],S=k.at(-1),_;if(f>l){let g=c[f-1],E=i[f-1],x=w(g,E,F),C=w(g,E,S);_=x<=C,Math.min(x,C)>o&&m()}else{let g=M[W+1]?.segments,E=x=>g?.length?Math.min(w(x.x,x.y*n,g[0]),w(x.x,x.y*n,g.at(-1))):0;_=E(S)<=E(F)}h.ids.push(A),h.visits.push(R),h.forward.push(_),h.owned.push(P);for(let g=0;g<k.length;g++){let E=k[_?g:k.length-1-g];c[f]=E.x,i[f]=E.y*n,f++}h.starts.push(f-l)}),m()}),e}function xn(t,n,o){let e=[];for(let s=0;s<n.length;s++){if(!n[s])continue;let r=s;for(;r+1<n.length&&n[r+1];)r++;let a=e.at(-1),c=a?a[1]:0,i=s;for(;i>c&&t[s]-t[i-1]<=o;)i--;let f=r;for(;f+1<t.length&&t[f+1]-t[r]<=o;)f++;a&&i<=a[1]+1?a[1]=f:e.push([i,f]),s=r}return e}function Ve(t,n){let o=Ft(t),e=o.at(-1),s=(c,i)=>{let f=t[i],l=t[Math.min(i+1,t.length-1)],h=o[Math.min(i+1,t.length-1)]-o[i],u=h>0?(c-o[i])/h:0;return{x:f.x+(l.x-f.x)*u,y:f.y+(l.y-f.y)*u}},r=0,a=0;return t.map((c,i)=>{let f=Math.max(0,o[i]-n/2),l=Math.min(e,o[i]+n/2);for(;r<t.length-1&&o[r+1]<=f;)r++;for(;a<t.length-1&&o[a+1]<=l;)a++;let h=s(f,r),u=s(l,a),m=Nt(h,u);return m>0?{nx:-(u.y-h.y)/m,ny:(u.x-h.x)/m}:void 0})}function ze(t,n,o){let e=Ft(t),s=t.slice(),r=[];e.forEach((c,i)=>{let f=r.at(-1);(f===void 0||c-e[f]>=n/4)&&r.push(i)}),r.at(-1)!==t.length-1&&r.push(t.length-1);let a=0;for(;a<r.length;){let c=r[a],i=-1;for(let u=a+1;u<r.length&&e[r[u]]-e[c]<=o;u++){let m=r[u];e[m]-e[c]>Math.PI*n&&Nt(t[c],t[m])<=n&&(i=u)}if(i<0){a++;continue}let f=r[i],l=t[c],h=t[f];for(let u=c+1;u<f;u++){let m=(e[u]-e[c])/(e[f]-e[c]);s[u]={...t[u],x:l.x+(h.x-l.x)*m,y:l.y+(h.y-l.y)*m}}a=i}return s}function le(t,n){let o=t.length,e=Ft(t),s=e[o-1],r=new Float64Array(o+1),a=new Float64Array(o+1),c=new Float64Array(o+1);for(let h=0;h<o;h++){let u=t[h],m=(e[Math.min(h+1,o-1)]-e[Math.max(h-1,0)])/2;r[h+1]=r[h]+m,a[h+1]=a[h]+m*u.x,c[h+1]=c[h]+m*u.y}let i=new Array(o),f=0,l=0;for(let h=0;h<o;h++){let u=t[h],m=Math.min(n,e[h],s-e[h]),w=e[h]-m,M=e[h]+m+1e-9*(1+s);for(;f<o&&e[f]<w;)f++;for(;l<o&&e[l]<M;)l++;let A=r[l]-r[f];i[h]=A>0?{x:(a[l]-a[f])/A,y:(c[l]-c[f])/A}:{x:u.x,y:u.y}}return i}function re(t,n){let o=t.length,e=Ft(t),s=e[o-1],r=new Uint8Array(o),a=(f,l)=>{let h=t[f],u=t[f+1];if(!u)return h;let m=e[f+1]-e[f],w=m>0?(l-e[f])/m:0;return{x:h.x+(u.x-h.x)*w,y:h.y+(u.y-h.y)*w}},c=0,i=0;for(let f=0;f<o;f++){if(e[f]<n||s-e[f]<n)continue;for(;c+1<o&&e[c+1]<=e[f]-n;)c++;for(;i+1<o&&e[i+1]<=e[f]+n;)i++;let l=t[f],h=a(c,e[f]-n),u=a(i,e[f]+n),m=Math.abs((u.x-h.x)*(l.y-h.y)-(u.y-h.y)*(l.x-h.x));r[f]=m>0&&Nt(h,u)*Nt(h,l)*Nt(l,u)/(2*m)<n?1:0}return{tight:r,s:e}}function je(t,n){let o=t.slice(),{tight:e,s}=re(o,n),r=xn(s,Array.from(e,a=>a>0),3*n);for(let a=0;a<8&&r.length;a++)r=r.filter(([c,i])=>{let f=o.slice(c,i+1),l=re(f,n);if(!l.tight.includes(1))return!1;let h=tn(l.s,l.tight,n),u=le(f,n);for(let m=0;m<f.length;m++){let w=Math.min(1,3*h[m]);if(w>0){let M=f[m],A=u[m];o[c+m]={x:M.x+(A.x-M.x)*w,y:M.y+(A.y-M.y)*w}}}return!0});return o}function Je(t,n,o,e,s,r){let a=n.length,c=new Float64Array(a),i=0,f=0,l=0,h=0,u=0;for(let m=0;m<a;m++){for(;i<a&&t[i]-t[m]<=r;){let w=o(i),M=n[i];c[i]=w&&M?w.nx*M.nx+w.ny*M.ny:0,l+=c[i],i++}for(;t[m]-t[f]>r;)l-=c[f++];if(Math.abs(l)>1e-9&&(h=l<0?-1:1),!!h)for(;u<=m;u++)s(u,h)}if(u<a){let m=0;for(let w=0;w<a;w++)m+=e(w)?1:-1;for(;u<a;u++)s(u,m<0?-1:1)}}function Qe(t,n,o,e,s=!0){let r=Math.max(o,2*e),a=Math.PI*e,c=s?a+3*e+r/2:r/2,i=new Map,f=new Map,l=[],h=[],u=w=>({normals:new Array(w),shifts:s?new Array(w):[]}),m=(w,M,A,R)=>{let P=i.get(w);P||(P=[],i.set(w,P)),(P[M]??=[])[A]=R};return t.forEach((w,M)=>{let{walk:A,ids:R,visits:P,owned:k,starts:W,xs:F,ys:S,stepOf:_}=w,g=R.length,E=F.length,x=new Array(g);for(let d=0;d<g;d++)k[d]&&(x[d]=u(W[d+1]-W[d]),f.set(R[d],{run:M,step:d,frame:x[d]}),m(R[d],A,P[d],x[d]));let C=new Float64Array(E);for(let d=1;d<E;d++){let I=F[d]-F[d-1],N=S[d]-S[d-1];C[d]=C[d-1]+Math.sqrt(I*I+N*N)}let J=C[E-1],D=new Int32Array(g).fill(-1),B=new Int32Array(g),Y=new Array(g);for(let d=0;d<g;d++){let I=k[d]?void 0:f.get(R[d]);I&&(D[d]=I.run,B[d]=I.step,Y[d]=I.frame)}let et=new Int32Array(g),ct=new Int32Array(g);for(let d=0;d+1<g;d++){let N=D[d]>=0&&D[d+1]===D[d]?B[d+1]-B[d]:0;et[d+1]=et[d]+(N===1?1:0),ct[d+1]=ct[d]+(N===-1?1:0)}let tt=new Array(g),b=0,L=0;for(let d=0;d<g;d++){if(!s){tt[d]=!k[d];continue}let I=C[W[d]]-c,N=C[W[d+1]-1]+c;for(;C[b]<I;)b++;for(;L+1<E&&C[L+1]<=N;)L++;let j=_[Math.max(0,b-1)],st=_[Math.min(E-1,L+1)],H=st-j,it=et[st]-et[j],gt=ct[st]-ct[j];tt[d]=!k[d]&&I>=0&&N<=J&&H>0&&(it===H||gt===H)}for(let d=0;d<g;d++){if(k[d])continue;let I=Y[d];x[d]=!s&&tt[d]?I:tt[d]?{normals:I.normals,shifts:I.shifts}:u(I.normals.length),m(R[d],A,P[d],x[d])}h.push(x);let q=new Array(E);for(let d=0;d<E;d++)q[d]=!tt[_[d]];for(let[d,I]of xn(C,q,c)){let N=[];for(let H=d;H<=I;H++)N.push({x:F[H],y:S[H]});let j=s?je(le(ze(N,e/2,a),e/2),e/2):N,st=Ve(j,r);Je(Ft(j),st,H=>{let it=_[d+H];return(k[it]?x[it]:Y[it])?.normals[Zt(w,d+H)]},H=>w.forward[_[d+H]],(H,it)=>{let gt=d+H,Lt=_[gt];if(tt[Lt])return;let Ht=Zt(w,gt),Rt=st[H];x[Lt].normals[Ht]=Rt&&(it>0?Rt:{nx:-Rt.nx,ny:-Rt.ny}),s&&(x[Lt].shifts[Ht]={dx:j[H].x-N[H].x,dy:(j[H].y-N[H].y)/n})},r)}if(!s){l.push(C);return}let ot=new Float64Array(E),G=0,V=0;for(let d=0;d<E;d++){let I=x[_[d]].shifts[Zt(w,d)],N=F[d]+(I?.dx??0),j=S[d]+(I?.dy??0)*n;ot[d]=d?ot[d-1]+Math.sqrt((N-G)**2+(j-V)**2):0,G=N,V=j}l.push(ot)}),{frames:i,arcs:l,stepFrames:h}}function fe(t,n,o,e){let s=new Array(n.length),r=[],a=0,c=0;for(let i=0;i<n.length;i++){for(;c<n.length&&t[c]-t[i]<=o;){for(;r.length>a&&e*n[r.at(-1)]<=e*n[c];)r.pop();r.push(c++)}for(;t[i]-t[r[a]]>o;)a++;s[i]=n[r[a]]}return s}function tn(t,n,o,e=()=>!0){let s=n.length,r=new Float64Array(s+1),a=new Float64Array(s+1);for(let l=0;l<s;l++){let h=e(n[l])?s>1?(t[Math.min(l+1,s-1)]-t[Math.max(l-1,0)])/2:1:0;r[l+1]=r[l]+h,a[l+1]=a[l]+h*n[l]}let c=new Float64Array(s),i=0,f=0;for(let l=0;l<s;l++){for(;t[l]-t[i]>o;)i++;for(;f<s&&t[f]-t[l]<=o;)f++;let h=r[f]-r[i];c[l]=h>0?(a[f]-a[i])/h:n[l]}return c}var Ze=[0];function to(t){for(let n of t.values())if(n>1)return!0;return!1}function no(t,n,o,e,s){if(!to(n))return{span:n,nodeThreads:new Map,threadPasses:new Map,threadAt:new Map,linkThreads:new Map};let r=new Map,a=[],c=[],i=[],f=[],l=[],h=[],u=[];for(let S of t){let _=[],g=[];for(let b of S){let L=r.get(b);L===void 0&&(L=a.length,r.set(b,L),a.push(b),c.push(0),i.push(0)),g.push(L);let q=o[b],ot=q?.[Math.floor(q.length/2)];_.push(ot?{x:ot.x,y:ot.y*e}:_.at(-1)??{x:0,y:0})}let E=Ft(_),x=S.map(b=>n.get(b)??1),C=fe(E,x,s/2,1),J=g.map(b=>++i[b]),D=S.length,B=new Int32Array(D),Y=-1;for(let b=0;b<D;b++)Y=x[b]===C[b]?b:Y,B[b]=Y;let et=new Int32Array(D);Y=-1;for(let b=D-1;b>=0;b--)Y=x[b]===C[b]?b:Y,et[b]=Y;let ct=new Array(D),tt=new Array(D).fill(NaN);for(let b=0;b<D;b++){let L=B[b],q=et[b],ot=L<0?q:q<0||E[b]-E[L]<=E[q]-E[b]?L:q,G=V=>Math.min(J[V],C[b])-1;if(ct[b]=G(ot),x[b]===1&&L>=0&&q>=0&&G(q)!==G(L)){let V=(E[b]-E[L])/(E[q]-E[L]||1);tt[b]=G(L)+(G(q)-G(L))*V}c[g[b]]=Math.max(c[g[b]],C[b])}f.push(g),l.push(J),h.push(ct),u.push(tt)}let m=[],w=[],M=(S,_)=>{let g=c[S],E=m[S]??=new Set;for(let x=0;x<g;x++)for(let C of[_-x,_+x])if(C>=0&&C<g&&!E.has(C))return C;return _},A=[];f.forEach((S,_)=>{S.forEach((g,E)=>{if(c[g]>1){let x=u[_][E],C=M(g,Number.isNaN(x)?h[_][E]:Math.round(x));m[g].add(C),(w[g]??=[])[l[_][E]]=C,Number.isNaN(x)||((A[g]??=[])[C]=x)}})});let R=new Map,P=new Map,k=new Map,W=new Map;a.forEach((S,_)=>{A[_]&&W.set(S,A[_]),R.set(S,c[_]),P.set(S,m[_]?[...m[_]].sort((E,x)=>E-x):Ze);let g=[];w[_]?.forEach((E,x)=>{g[E]=x-1}),k.set(S,g)});let F=new Map;return f.forEach((S,_)=>{let g=l[_];for(let E=1;E<S.length;E++){let x=S[E-1],C=S[E],J=[w[x]?.[g[E-1]]??0,w[C]?.[g[E]]??0],D=F.get(a[x]);D||(D=new Map,F.set(a[x],D));let B=D.get(a[C]);B?B.some(([Y,et])=>Y===J[0]&&et===J[1])||B.push(J):D.set(a[C],[J])}}),{span:R,nodeThreads:P,threadPasses:k,threadAt:W,linkThreads:F}}function eo(t,n,o,{reach:e,taper:s}){let r=new Map;return t.forEach((a,c)=>{let i=n[c],f=a.ids.map((l,h)=>{let u=a.starts[h+1]-a.starts[h],m=Math.floor(u/2);return i[a.starts[h]+(a.forward[h]?m:u-1-m)]});for(let[l,h]of xn(f,a.owned,e/2+s/2)){let u=f.slice(l,h+1),m=a.ids.slice(l,h+1),w=o.map(M=>{let A=m.map(R=>M.get(R)??0);return A.every(R=>R===A[0])?{slot:A,held:A}:{slot:tn(u,fe(u,A,e/2,1),s/2),held:tn(u,A,s/2,R=>R>0)}});m.forEach((M,A)=>{a.owned[l+A]&&r.set(M,{slot:w.map(R=>R.slot[A]),held:w.map(R=>R.held[A])})})}}),r}function oo(t,n,o,e,s,r,a){let c=Kt(s,s),i=new Map,f=l=>{let h=i.get(l);if(!h){let u=e.get(l);h=u?Kt(u.slot,s,u.held):c,i.set(l,h)}return h};t.forEach((l,h)=>{let{walk:u,ids:m,visits:w,starts:M}=l,{threadPasses:A,threadAt:R}=r[u],P=new Float64Array(l.xs.length);m.forEach((W,F)=>{let S=Math.max(0,A.get(W)?.indexOf(w[F])??0),_=R.get(W)?.[S]??S;P.fill(f(W)[u]+_*gn,M[F],M[F+1])});let k=tn(o[h],P,a);n[h].forEach((W,F)=>{let S=M[F],_=M[F+1],g=!0;for(let x=S+1;g&&x<_;x++)g=Math.abs(k[x]-k[S])<1e-9;if(g){W.offset=k[S];return}let E=new Array(_-S);for(let x=S;x<_;x++)E[Zt(l,x)]=k[x];W.offsets=E})})}function he(t,n,o,e,s=yn(t.map(r=>r.route),n)){let r=pn(t),a=t.map(M=>M.mostPasses),c=Ue*e,i=qe(s,o,ne*e),f=nn(a)*(r?en(a):1)*e,l=Qe(i,o,ne*e,f,r),h=r?t.map(M=>no(M.route,M.passes,n,o,c)):void 0,u=h?eo(i,l.arcs,h.map(M=>M.span),{reach:c,taper:ee*e}):void 0;u&&h&&oo(i,l.stepFrames,l.arcs,u,a,h,ee/2*e);let m={dx:0,dy:0},w=new Set;for(let M of l.frames.values())for(let{shifts:A}of M.flat())if(!w.has(A)){w.add(A);for(let R of A)m.dx=Math.max(m.dx,Math.abs(R?.dx??0)),m.dy=Math.max(m.dy,Math.abs(R?.dy??0))}return{lines:l,threads:h,spans:u,furthestShift:m}}function U(t,n,o,e){return(e<<24|o<<16|n<<8|t)>>>0}function wn(t){return t&255}function Mn(t){return t>>>8&255}function An(t){return t>>>16&255}function En(t){return t>>>24&255}function ue(t){return`rgba(${wn(t)},${Mn(t)},${An(t)},${En(t)/255})`}function fs(t,n){return`rgba(${Math.round(t[0]*255)},${Math.round(t[1]*255)},${Math.round(t[2]*255)},${n})`}function vt(t,n){return U(wn(t),Mn(t),An(t),Math.round(En(t)*n))}function hs(t,n){let o=Math.max(0,1-1/n),e=s=>Math.round(s+(255-s)*o);return U(e(wn(t)),e(Mn(t)),e(An(t)),En(t))}var de=300,Ut=.7,Yt=.5;function so(t){return`hsl(${t}, ${Ut*100}%, ${Yt*100}%)`}function qt(t){return Math.max(0,Math.min(1,t))*de}function vn(t,n){return qt((t-n.start)/(n.end-n.start))}var ro=30;function ds({start:t,bp:n,reversed:o},e){let s=vn(t,e),r=vn(t+n,e);if(r-s<1)return[(s+r)/2];let a=Math.ceil((r-s)/ro);return Array.from({length:a+1},(c,i)=>vn(t+n*(o?a-i:i)/a,e))}var ao=Array.from({length:7},(t,n)=>({offset:n/6,color:so(n/6*de)})),ms=`linear-gradient(to right, ${ao.map(t=>`${t.color} ${t.offset*100}%`).join(", ")})`;var co=$t();function me(t,n,o,e,s,r,a=!1){return co(t,[n,o.scaleX,o.scaleY,e,r,a,s],()=>{let c=new Map;for(let i=0;i<n.edges.length;i++){let f=e?.get(i),l=zn(t,n.edges[i],o,f,f&&r?.[i],a);l&&c.set(i,l)}return c})}var io=4;function lo(t){let n=new Map;for(let o of t.edges)Bt(n,o.from,o.to),Bt(n,o.to,o.from);return n}function fo({nodeId:t,nodeById:n,neighbors:o}){let e=new Set([t]),s=[t],r=1/0,a=-1/0;for(let c=0;c<io&&s.length>0;c++){let i=[];for(let f of s){let l=o.get(f);if(l){for(let h of l)if(!e.has(h)){e.add(h);let u=n.get(h);u&&Xt(u)?(r=Math.min(r,u.stable.start+u.length),a=Math.max(a,u.stable.start)):i.push(h)}}}s=i}return r===1/0?void 0:{start:Math.min(r,a),end:Math.max(r,a)}}function ho({nodeId:t,nodeById:n,neighbors:o}){let e=n.get(t);return e===void 0?void 0:Xt(e)?{start:e.stable.start,end:e.stable.start+e.length}:fo({nodeId:t,nodeById:n,neighbors:o})}function pe(t){let n=new Map(t.nodes.map(s=>[s.id,s])),o=lo(t),e=new Map;for(let s of t.nodes){let r=ho({nodeId:s.id,nodeById:n,neighbors:o});r&&e.set(s.id,(r.start+r.end)/2)}return e}var uo=U(119,119,119,217),ge=U(136,136,136,217),mo=U(24,24,28,240),ye=2.2,Te=U(160,160,160,255),Vt=.18,po=.45,Ns=ue(vt(Te,Vt)),go=11,yo=1.2,xo=1e-6,wo=7,Mo=3,Ao=3,Eo=1.5,xe=3,vo=.5,_o=.45,_n=12,bo=1e-6,pt=new Float64Array(64),_t=new Float64Array(64),bt=new Float64Array(64);function Ro(t,n,o,e){let s=t.length*_n+1;pt.length<s&&(pt=new Float64Array(s),_t=new Float64Array(s),bt=new Float64Array(s));let r=t[t.length-1];pt[0]=r.x1,_t[0]=r.y1,bt[0]=0;let a=1,c=0;for(let i=t.length-1;i>=0&&c<e;i--){let f=t[i];for(let l=1;l<=_n&&c<e;l++){let h=1-(l/_n)**2,u=1-h,m=u*u*u,w=3*u*u*h,M=3*u*h*h,A=h*h*h,R=m*f.x0+w*f.cx0+M*f.cx1+A*f.x1,P=m*f.y0+w*f.cy0+M*f.cy1+A*f.y1;c+=Math.hypot(R-pt[a-1],(P-_t[a-1])*o)*n,pt[a]=R,_t[a]=P,bt[a]=c,a++}}return a}function we(t,n){let o=1;for(;o<t-1&&bt[o]<n;)o++;let e=bt[o-1],s=bt[o],r=s>e?Math.min(1,Math.max(0,(n-e)/(s-e))):0;return{x:pt[o-1]+(pt[o]-pt[o-1])*r,y:_t[o-1]+(_t[o]-_t[o-1])*r}}function So({curves:t,edgeHalfWidth:n,nodeHalfWidth:o,scale:e,yToX:s,color:r,fromSegments:a,toSegments:c}){let i=wo+Mo*n,f=Ro(t,e,s,o+xe*i),l=bt[f-1],h=l<bo,u=Math.min(o,l),m=h?Math.min(1,Vn(a,e,e*s)/i):1;if(h?m<vo:l<xe*i)return;let w=we(f,u),M=we(f,u+i*m),A=w.x-M.x,R=(w.y-M.y)*s,P=t[t.length-1];return{x:w.x,y:w.y,angle:Math.hypot(A,R)>0?Math.atan2(R,A):Wo(P,s,Oo(P,c)),length:i*m,halfWidth:(Ao+Eo*n)*m,color:r}}var Me=[[0,0]],Co=[0],Ae={dx:0,dy:0};function Oe(t,n,o){let e=s=>Math.hypot(s.x-t.x,(s.y-t.y)*o);return e(n[0])<e(n.at(-1))}function To(t,n,o,e,s){return e?Un(t).from==="start":Oe({x:o.x0,y:o.y0},n,s)}function Oo(t,n){if(n.length<2)return;let o=n[0],e=n[n.length-1];return Math.hypot(t.x1-o.x,t.y1-o.y)<=Math.hypot(t.x1-e.x,t.y1-e.y)?{from:o,to:n[1]}:{from:e,to:n[n.length-2]}}function Ee(t,n){if(!t||!n)return;let o=n.x-t.x,e=n.y-t.y,s=Math.hypot(o,e);return s>0?{nx:-e/s,ny:o/s}:void 0}var ke=.1,ko=1/Math.sqrt(ke);function ve(t,n=1){let o=n===1?t:t.map(e=>({x:e.x,y:e.y*n}));return o.map((e,s)=>{let r=Ee(o[s-1],e),a=Ee(e,o[s+1]);if(r&&a){let c=(r.nx+a.nx)/2,i=(r.ny+a.ny)/2,f=r.nx*c+r.ny*i;return f>ke?{nx:c/f,ny:i/f}:{nx:c,ny:i}}return r??a??{nx:0,ny:0}})}function _e(t,n,o,e=1){let s=new Array(t.length);for(let r=0;r<t.length;r++){let a=typeof o=="number"?o:o[r];s[r]={x:t[r].x+n[r].nx*a,y:t[r].y+n[r].ny*a/e}}return s}function Rn(t,n,o){let e=(1-Math.abs(2*o-1))*n,s=e*(1-Math.abs(t/60%2-1)),r=o-e/2,a=0,c=0,i=0;return t<60?(a=e,c=s):t<120?(a=s,c=e):t<180?(c=e,i=s):t<240?(c=s,i=e):t<300?(a=s,i=e):(a=e,i=s),[a+r,c+r,i+r]}function on(t,n,o,e=1){let[s,r,a]=Rn(t,n,o);return U(Math.round(s*255),Math.round(r*255),Math.round(a*255),Math.round(e*255))}var Io=[[68,1,84],[59,82,139],[33,145,140],[94,201,98],[253,231,37]],Po=[[237,137,44],[158,42,122]],No=[[220,50,50],[50,120,220]];function bn(t,n){let o=Math.max(0,Math.min(1,n))*(t.length-1),e=Math.min(t.length-2,Math.floor(o)),s=o-e,r=t[e],a=t[e+1];return U(Math.round(r[0]+(a[0]-r[0])*s),Math.round(r[1]+(a[1]-r[1])*s),Math.round(r[2]+(a[2]-r[2])*s),255)}function Fo(t,n){return on(jn(t),un,dn,n)}var Ie=[60,65,72],Sn=U(...Ie,255),Fs=`rgb(${Ie.join(", ")})`;function Lo(t,n){let o=n.midpoints.get(t.id);return Xt(t)&&o!==void 0?(o-n.start)/n.span:void 0}function Ls(t,n){let o=pe(t);if(n&&n.end>n.start)return{start:n.start,span:n.end-n.start,midpoints:o};let e=1/0,s=-1/0;for(let r of o.values())e=Math.min(e,r),s=Math.max(s,r);return{start:e===1/0?0:e,span:s>e?s-e:1,midpoints:o}}function Ho(t,n){let o=1/0,e=-1/0,s=1/0,r=-1/0,a=0;for(let c of t.nodes)c.stable!==void 0&&c.stable.rank>a&&(a=c.stable.rank),c.depth<o&&(o=c.depth),c.depth>e&&(e=c.depth),c.length<s&&(s=c.length),c.length>r&&(r=c.length);return{minDepth:o,maxDepth:e,minLength:s,maxLength:r,maxRank:a,nodeCount:t.nodes.length,referenceRamp:n}}function Do(t,n,o,e){switch(o){case"random":return Fo(t.id,1);case"depth":return bn(Io,e.maxDepth>e.minDepth?(t.depth-e.minDepth)/(e.maxDepth-e.minDepth):.5);case"node-length":return bn(No,e.maxLength>e.minLength?(t.length-e.minLength)/(e.maxLength-e.minLength):.5);case"stable-rank":return t.stable===void 0?U(160,160,160,255):t.stable.rank===0?U(52,152,219,255):bn(Po,e.maxRank>1?(t.stable.rank-1)/(e.maxRank-1):0);case"reference-position":{let s=e.referenceRamp;if(s===void 0)return U(160,160,160,255);let r=Lo(t,s);return r===void 0?Sn:on(qt(r),Ut,Yt)}case"grey":return U(160,160,160,255);case"rainbow":{let s=e.nodeCount>1?n/e.nodeCount*360:0;return on(s,.75,.5)}default:return U(52,152,219,255)}}function Wo(t,n=1,o){let e=[[t.cx1,t.cy1],[t.cx0,t.cy0],[t.x0,t.y0]];for(let[s,r]of e){let a=t.x1-s,c=(t.y1-r)*n;if(Math.hypot(a,c)>0)return Math.atan2(c,a)}return o?Math.atan2((o.to.y-o.from.y)*n,o.to.x-o.from.x):0}function Go(t,n){let o=!1;for(let e=0;e<t.length-1&&!o;e++){let s=t[e],r=t[e+1];o=Math.max(s.x,r.x)>=n.minX&&Math.min(s.x,r.x)<=n.maxX&&Math.max(s.y,r.y)>=n.minY&&Math.min(s.y,r.y)<=n.maxY}return o}function be(t,n,o=0,e=0){for(let s of t){let r=Math.min(s.x0,s.cx0,s.cx1,s.x1),a=Math.max(s.x0,s.cx0,s.cx1,s.x1),c=Math.min(s.y0,s.cy0,s.cy1,s.y1),i=Math.max(s.y0,s.cy0,s.cy1,s.y1);if(a>=n.minX-o&&r<=n.maxX+o&&i>=n.minY-e&&c<=n.maxY+e)return!0}return!1}var Re=new WeakMap;function Bo(t){let n=Re.get(t);if(!n){let o=[],e=new Map,s=t.paths??[];for(let r=0;r<s.length;r++)o.push(on(Jn(r,s.length),un,dn,.85)),e.has(s[r].name)||e.set(s[r].name,r);n={pathColorByIndex:o,pathIndexByName:e},Re.set(t,n)}return n}var Se=new WeakMap,Xo=new Map;function $o(t){let n=Se.get(t);if(!n){n=new Map;for(let[o,e]of(t.paths??[]).entries())for(let s of new Set(e.nodeIds))Bt(n,s,o);Se.set(t,n)}return n}var Ko=$t(),Uo=$t(),Ce=new WeakMap;function Yo(t){let n=Ce.get(t);if(!n){n=new Map;for(let{from:o,to:e}of t.edges){let s=n.get(o);s||(s=new Set,n.set(o,s)),s.add(e)}Ce.set(t,n)}return n}function Hs(t){let{nodePositions:n,graph:o,nodeById:e,colorScheme:s,contigThickness:r,connectorThickness:a,drawPaths:c,nodeWidth:i="uniform",edgeWidth:f="uniform",highlight:l,axis:h,linearLayout:u,viewportBounds:m,referenceRamp:w,deletions:M,deletionRoutes:A,stranded:R,hiddenEdges:P,version:k=0}=t,W=Qn(o,i),F=f==="walks"?Zn(o):0,S=h.scaleX,_=1/Math.max(S,xo),g=Yn(h),E=me(n,o,h,M,k,A,R),x=[],C=new Map,J=[],D=new Map,B=[],Y=new Map,et=Ho(o,w),ct=new Map;if(s==="rainbow")for(let p=0;p<o.nodes.length;p++)ct.set(o.nodes[p].id,p);let tt=o.paths?.length??0,{pathColorByIndex:b,pathIndexByName:L}=Bo(o),q=p=>b[L.get(p)??-1]??ge,ot=c&&tt>1?$o(o):Xo,G=l?.walks??[],V=pn(G),d=G.map(p=>p.mostPasses),I=V?en(d):1,N=l&&G.length>1?Ko(l,[n,k,h.scaleX,h.scaleY],()=>he(G,n,g,_,Uo(l,[n,k],()=>yn(G.map(p=>p.route),n)))):void 0,j=N?.lines,st=N?.threads,H=N?.spans,it=V?Kt(d,d):[],gt=new Map,Lt=p=>{let y=gt.get(p);if(!y){let v=H?.get(p);y=v?Kt(v.slot,d,v.held):it,gt.set(p,y)}return y},Ht=(p,y,v,T)=>V?(Lt(p)[v]+T*gn)*I:(v-(G.length-1)/2)*y,Rt=(p,y,v)=>{let T=p?.offsets?.[y]??p?.offset;return T===void 0?v:T*I},Pn=p=>V?Et/2*I:p/2,Nn=new Map,Fn=new WeakMap,Ln=(p,y,v)=>st?.[p]?.threadPasses.get(y)?.[v]??0,rn=(p,y)=>{let v=Nn.get(p);return v||(v=ve(y,g),Nn.set(p,v)),v},We=(p,y,v)=>{if(!v)return rn(p,y);let T=Fn.get(v.normals);return T||(T=rn(p,y).map((O,X)=>v.normals[X]??O),Fn.set(v.normals,T)),T},Hn=new Map,an=p=>{let y=Hn.get(p);if(y===void 0){let v=e.get(p);y=mn(v?Qt(v,r,i,W):r,G.length),Hn.set(p,y)}return y},Dn=(p,y,v,T,O,X)=>{let Q=T?0:v.length-1,z=y?.[O]?.[Ln(O,p,X)],rt=z?.offsets?.[Q]??z?.offset;return{normal:z?.normals[Q]??rn(p,v)[Q]??{nx:0,ny:0},shift:z?.shifts[Q]??Ae,offset:rt===void 0?Ht(p,an(p),O,X):rt*I}},Ge=(p,y)=>{if(!m)return!0;let v=V?nn(d)*I:(G.length-1)/2*an(y),T=ko*v*_;return be(p,m,T+(N?.furthestShift.dx??0),T/g+(N?.furthestShift.dy??0))},Be=(p,y,v)=>{let T=st?.[p]?.linkThreads;if(!T?.size)return Me;let O=T.get(y)?.get(v),X=Yo(o).get(v)?.has(y)?void 0:T.get(v)?.get(y);if(!X)return O??Me;let Q=X.map(([z,rt])=>[rt,z]);return O?[...O,...Q]:Q},cn=(p,y,v)=>G[p]?.passColors.get(y)?.[st?.[p]?.threadPasses.get(y)?.[v]??0],Wn=new WeakMap,Xe=(p,y)=>{if(!y||!V)return p;let v=Wn.get(y.shifts);if(!v){let{shifts:T}=y;v=p.map((O,X)=>{let{dx:Q,dy:z}=T[X]??Ae;return{...O,x:O.x+Q,y:O.y+z}}),Wn.set(y.shifts,v)}return v},$e=S>(u?1:_o);for(let p=0;p<o.edges.length;p++){let y=o.edges[p],v=n[y.from],T=n[y.to],O=E.get(p);if(!v?.length||!T?.length||!O||P?.has(p))continue;let X=y.pathIds?.length??0,z=M?.get(p)!==void 0,rt=l?.edgeIndexes.has(p)??!1,Dt=a/2*(z?ye:1),St=te(X,F,f),Ct=a/2*(z?f==="walks"&&F>0?Math.max(1,St):ye:St),lt=c&&X>0,Tt=z?mo:uo,yt=!l||rt?Tt:vt(Tt,Vt),ut=e.get(y.to),Wt=(ut?Qt(ut,r,i,W):r)/2,$=K=>!m||be(K,m),zt=K=>$n(K,go/S,g,m),jt=(K,Z,nt)=>{if(!z){B.push({curves:K,thickness:Z,color:nt});return}for(let mt of zt(K))B.push({curves:mt.curves,thickness:Z,color:nt})},xt=(K,Z,nt,mt,kt,Mt,It,at,Gn)=>{B.push({curves:K,thickness:Z,color:nt,walk:mt,pass:kt,normal:Mt,offsetX:It,endNormal:at,endOffsetX:Gn})},Ot=K=>{let Z=$e?So({curves:K,edgeHalfWidth:z||lt?a/2:Ct,nodeHalfWidth:Wt,scale:S,yToX:g,color:yt,fromSegments:v,toSegments:T}):void 0;Z&&J.push(Z)},dt=B.length,Gt=J.length,wt=l?.walks.length&&rt&&!lt?l.walks:void 0;if(wt&&!Ge(O,y.from))continue;if(wt){let K=To(y,v,O[0],R,g),Z=O.at(-1),nt=Oe({x:Z.x1,y:Z.y1},T,g),mt=wt.length===1,kt=Pn(an(y.from)),Mt=j?.frames.get(y.from),It=j?.frames.get(y.to);for(let at=0;at<wt.length;at++)if(wt[at].edgeIndexes.has(p))for(let[ln,Bn]of Be(at,y.from,y.to)){let ht=Dn(y.from,Mt,v,K,at,ln),Pt=V?Dn(y.to,It,T,nt,at,Bn):ht,At=mt?0:ht.offset*_,fn=V?Pt.offset*_:At,Xn=V?Kn(O,ht.shift.dx+ht.normal.nx*At,ht.shift.dy+ht.normal.ny*At/g,Pt.shift.dx+Pt.normal.nx*fn,Pt.shift.dy+Pt.normal.ny*fn/g):At===0?O:hn(O,ht.normal.nx*At,ht.normal.ny*At/g);$(Xn)&&xt(Xn,kt,cn(at,y.from,ln)??cn(at,y.to,Bn)??Tt,at,ln,ht.normal,At,Pt.normal,fn)}B.length>dt&&Ot(O)}else if(!lt)$(O)&&(jt(O,Ct,yt),Ot(O));else{let K=qn(v,T,X,h),Z=Math.floor((X-1)/2);for(let nt=0;nt<X;nt++){let{x:mt,y:kt}=K[nt],Mt=mt===0&&kt===0?O:hn(O,mt,kt);if(!$(Mt))continue;let It=q(y.pathIds[nt]);jt(Mt,Dt,l&&(l.walks.length?!l.names.has(y.pathIds[nt]):!rt)?vt(It,Vt):It),nt===Z&&Ot(Mt)}}let Jt=B.length-dt;Jt>0&&Y.set(p,{start:dt,count:Jt});let ft=J.length-Gt;ft>0&&D.set(p,{start:Gt,count:ft})}for(let[p,y]of Object.entries(n)){let v=e.get(p);if(!v||m&&!Go(y,m))continue;let T=l!==void 0&&!l.nodeIds.has(p),O=T?Te:Do(v,ct.get(p)??0,s,et),X=T?vt(O,Vt):v.moved?vt(O,po):O,Q=Qt(v,r,i,W),z=Q/2,rt=x.length,Dt=ot.get(p),St=Q/tt,Ct=y.length>=2,lt=l?.walks.length&&!T&&!Dt?.length?l.walks:void 0;if(Ct&&lt){let yt=mn(Q,lt.length),ut=Pn(yt),Wt=j?.frames.get(p);for(let $=0;$<lt.length;$++){let zt=lt[$].colors.get(p);if(zt===void 0)continue;let jt=st?.[$]?.nodeThreads.get(p)??Co;for(let xt of jt){let Ot=cn($,p,xt)??zt;if(lt.length===1){x.push({points:y,thickness:ut,color:Ot,walk:$,pass:xt});continue}let dt=Wt?.[$]?.[Ln($,p,xt)],Gt=We(p,y,dt),wt=Xe(y,dt),Jt=Ht(p,yt,$,xt),ft=dt?.offsets?.map(Z=>Z*I*_),K=ft?ft[Math.floor(ft.length/2)]:Rt(dt,0,Jt)*_;x.push({points:_e(wt,Gt,ft??K,g),thickness:ut,color:Ot,walk:$,pass:xt,normals:Gt,offsetX:K,...ft&&{offsets:ft}})}}}else if(Ct&&Dt?.length&&St>=yo){let yt=ve(y,g);for(let ut of Dt){let Wt=(ut-(tt-1)/2)*St*_,$=b[ut]??ge;x.push({points:_e(y,yt,Wt,g),thickness:St/2,color:T?vt($,Vt):$})}}else Ct&&x.push({points:y,thickness:z,color:X});let Tt=x.length-rt;Tt>0&&C.set(p,{start:rt,count:Tt})}return{nodeStrokes:x,nodeStrokeRuns:C,arrows:J,arrowRuns:D,edgeCurves:B,edgeCurveRuns:Y}}var Fe=[{value:"progress",label:"Progress along the walk"},{value:"walk",label:"One colour for the walk"},{value:"reference",label:"Reference position"}],On=[{value:"grey",label:"Grey to black",ends:["#a3a3a3","#151515"]},{value:"blue",label:"Cyan to navy",ends:["#6ee0f0","#0b2c7a"]},{value:"red",label:"Yellow to red",ends:["#ffd24a","#b3121b"]},{value:"purple",label:"Pink to plum",ends:["#f5a3d8","#5e1a6e"]},{value:"green",label:"Lime to forest",ends:["#b6e36c","#0b5d3b"]},{value:"orange",label:"Peach to rust",ends:["#ffc285","#8f3a00"]},{value:"rainbow",label:"Rainbow"}],Cn=["blue","red","purple","green"],qo=t=>Fe.some(n=>n.value===t),Vo=t=>On.some(n=>n.value===t);function zo(t,n,o,e=!0){let{field:s,scheme:r}=t.color??{},a=qo(s)?s:e?"progress":"walk",c=n?"grey":Cn[o%Cn.length],i=Vo(r)?r==="rainbow"&&a!=="reference"?c:r:c,f=Math.floor(o/Cn.length)%Pe.length;return a==="walk"&&i===c&&f>0?{field:a,scheme:i,shade:Pe[f]}:e||a==="walk"?{field:a,scheme:i}:{field:a,scheme:i,darkest:jo}}var jo=.55,kn=.5,Pe=[kn,.85,.2],Jo=.08,Ne=({field:t,scheme:n})=>t!=="walk"&&n!=="rainbow";function Qo(t){let n=new Map;for(let e of t)Ne(e)&&n.set(e.scheme,(n.get(e.scheme)??0)+1);let o=new Map;return t.map(e=>{let s=Ne(e)?n.get(e.scheme):1;if(s<2)return e;let r=o.get(e.scheme)??0;o.set(e.scheme,r+1);let a=Jo/2;return{...e,stretch:[r/s+(r>0?a:0),(r+1)/s-(r<s-1?a:0)]}})}var Le=({stretch:t},n)=>t?t[0]+(t[1]-t[0])*n:n,Zo=t=>t<=.04045?t/12.92:((t+.055)/1.055)**2.4,ts=t=>t<=.0031308?t*12.92:1.055*t**(1/2.4)-.055;function ns(t){let[n,o,e]=[1,3,5].map(c=>Zo(Number.parseInt(t.slice(c,c+2),16)/255)),s=Math.cbrt(.4122214708*n+.5363325363*o+.0514459929*e),r=Math.cbrt(.2119034982*n+.6806995451*o+.1073969566*e),a=Math.cbrt(.0883024619*n+.2817188376*o+.6299787005*e);return[.2104542553*s+.793617785*r-.0040720468*a,1.9779984951*s-2.428592205*r+.4505937099*a,.0259040371*s+.7827717662*r-.808675766*a]}function es([t,n,o]){let e=(t+.3963377774*n+.2158037573*o)**3,s=(t-.1055613458*n-.0638541728*o)**3,r=(t-.0894841775*n-1.291485548*o)**3;return[4.0767416621*e-3.3077115913*s+.2309699292*r,-1.2684380046*e+2.6097574011*s-.3413193965*r,-.0041960863*e-.7034186147*s+1.707614701*r].map(a=>ts(Math.max(0,Math.min(1,a)))*255)}var Tn=new Map;function os(t){if(!Tn.has(t)){let n=On.find(o=>o.value===t);Tn.set(t,n&&"ends"in n?n.ends.map(ns):void 0)}return Tn.get(t)}function In(t,n,o=0){let e=Math.max(0,Math.min(1,n)),s=os(t);if(!s)return Rn(qt(e),Ut,Yt).map(l=>l*255);let[r,a]=s,c=r[0],i=a[0],f=i<o&&c>o?(c-o)/(c-i):1;return es(r.map((l,h)=>l+(a[h]-l)*e*f))}function He(t,n,o){let[e,s,r]=In(t,n,o).map(Math.round);return`rgb(${e}, ${s}, ${r})`}function sn(t,n,o){let[e,s,r]=In(t,n,o).map(Math.round);return U(e,s,r,255)}function ss(t,n){let{field:o,scheme:e,darkest:s,shade:r=kn}=t;return o==="walk"?sn(e,r):n===void 0?De:sn(e,Le(t,n),s)}var De=Sn;function rs(t){let{field:n,scheme:o,darkest:e,shade:s=kn}=t,r=(a,c)=>({offset:a,color:He(o,c,e),abgr:sn(o,c,e)});return n==="walk"?[r(0,s)]:Array.from({length:7},(a,c)=>r(c/6,Le(t,c/6)))}export{lo as a,ho as b,Et as c,pn as d,is as e,U as f,ue as g,fs as h,vt as i,hs as j,so as k,ds as l,ao as m,ms as n,me as o,Ns as p,Rn as q,Fs as r,Lo as s,Ls as t,Ho as u,Do as v,Hs as w,Fe as x,On as y,zo as z,Qo as A,ss as B,De as C,rs as D};
2
- //# sourceMappingURL=chunk-FM4T47WH.js.map
1
+ import{G as jn,H as Jn,I as un,J as dn,S as Qn,U as Qt,V as mn,Y as Zn,Z as te,d as $n,e as Kn,f as hn,h as Un,i as Yn,j as qn,k as Vn,l as $t,y as zn}from"./chunk-LQSOJR7D.js";import{a as Bt,g as Xt}from"./chunk-AQSLN3RH.js";var Et=2,ae=1.5,Ke=4,ne=12,Ue=64,ee=24,Ye=48,oe="a thread per pass through a node",pn=t=>t.length>1&&t.some(n=>n.mostPasses>1),ce=t=>t*Et+Math.max(0,t-1)*ae,se=t=>t.reduce((n,o)=>n+o,0);function ie(t,n,o){let e=t.map((a,c)=>n[c]>1?ce(a):o*Math.min(1,a)),s=0,r=t.map(a=>{let c=Math.min(1,a),i=Ke*c*s;return s=Math.max(s,c),i});return{widths:e,gaps:r,band:se(e)+se(r)}}var gn=Et+ae;function Kt(t,n,o=t){let{widths:e,gaps:s,band:r}=ie(t,n,Et),a=-r/2;return e.map((c,i)=>{a+=s[i];let f=n[i]>1?Math.max(0,c-ce(o[i])):0,l=a+f/2+Et/2;return a+=c,l})}var nn=t=>ie(t,t,Et).band,en=t=>Math.min(1,Ye/(nn(t)||1)),is=t=>en(t.map(n=>n.mostPasses))<1?`${oe}, thinned to fit`:oe;function Zt(t,n){let o=t.stepOf[n],e=n-t.starts[o];return t.forward[o]?e:t.starts[o+1]-t.starts[o]-1-e}var Nt=(t,n)=>{let o=n.x-t.x,e=n.y-t.y;return Math.sqrt(o*o+e*e)};function Ft(t){let n=new Float64Array(t.length);for(let o=1;o<t.length;o++)n[o]=n[o-1]+Nt(t[o-1],t[o]);return n}function yn(t,n){let o=new Set;return t.map(e=>{let s=new Map;return e.map(r=>r.map(a=>{let c=s.get(a)??0;s.set(a,c+1);let i=n[a],f=!!i?.length&&!o.has(a);return f&&o.add(a),{id:a,visit:c,owned:f,segments:i}}))})}function qe(t,n,o){let e=[];return t.forEach((s,r)=>{let a=0;for(let M of s)for(let{segments:A}of M)a+=A?.length??0;let c=new Float64Array(a),i=new Float64Array(a),f=0,l=0,h=u();function u(){return{walk:r,ids:[],visits:[],forward:[],owned:[],starts:[0]}}let m=()=>{if(h.ids.length){let M=new Int32Array(f-l);for(let A=0;A<h.ids.length;A++)M.fill(A,h.starts[A],h.starts[A+1]);e.push({...h,xs:c.subarray(l,f),ys:i.subarray(l,f),stepOf:M})}h=u(),l=f},w=(M,A,R)=>{let P=R.x-M,k=R.y*n-A;return Math.sqrt(P*P+k*k)};for(let M of s)M.forEach(({id:A,visit:R,owned:P,segments:k},W)=>{if(!k?.length){m();return}let F=k[0],S=k.at(-1),_;if(f>l){let g=c[f-1],E=i[f-1],x=w(g,E,F),C=w(g,E,S);_=x<=C,Math.min(x,C)>o&&m()}else{let g=M[W+1]?.segments,E=x=>g?.length?Math.min(w(x.x,x.y*n,g[0]),w(x.x,x.y*n,g.at(-1))):0;_=E(S)<=E(F)}h.ids.push(A),h.visits.push(R),h.forward.push(_),h.owned.push(P);for(let g=0;g<k.length;g++){let E=k[_?g:k.length-1-g];c[f]=E.x,i[f]=E.y*n,f++}h.starts.push(f-l)}),m()}),e}function xn(t,n,o){let e=[];for(let s=0;s<n.length;s++){if(!n[s])continue;let r=s;for(;r+1<n.length&&n[r+1];)r++;let a=e.at(-1),c=a?a[1]:0,i=s;for(;i>c&&t[s]-t[i-1]<=o;)i--;let f=r;for(;f+1<t.length&&t[f+1]-t[r]<=o;)f++;a&&i<=a[1]+1?a[1]=f:e.push([i,f]),s=r}return e}function Ve(t,n){let o=Ft(t),e=o.at(-1),s=(c,i)=>{let f=t[i],l=t[Math.min(i+1,t.length-1)],h=o[Math.min(i+1,t.length-1)]-o[i],u=h>0?(c-o[i])/h:0;return{x:f.x+(l.x-f.x)*u,y:f.y+(l.y-f.y)*u}},r=0,a=0;return t.map((c,i)=>{let f=Math.max(0,o[i]-n/2),l=Math.min(e,o[i]+n/2);for(;r<t.length-1&&o[r+1]<=f;)r++;for(;a<t.length-1&&o[a+1]<=l;)a++;let h=s(f,r),u=s(l,a),m=Nt(h,u);return m>0?{nx:-(u.y-h.y)/m,ny:(u.x-h.x)/m}:void 0})}function ze(t,n,o){let e=Ft(t),s=t.slice(),r=[];e.forEach((c,i)=>{let f=r.at(-1);(f===void 0||c-e[f]>=n/4)&&r.push(i)}),r.at(-1)!==t.length-1&&r.push(t.length-1);let a=0;for(;a<r.length;){let c=r[a],i=-1;for(let u=a+1;u<r.length&&e[r[u]]-e[c]<=o;u++){let m=r[u];e[m]-e[c]>Math.PI*n&&Nt(t[c],t[m])<=n&&(i=u)}if(i<0){a++;continue}let f=r[i],l=t[c],h=t[f];for(let u=c+1;u<f;u++){let m=(e[u]-e[c])/(e[f]-e[c]);s[u]={...t[u],x:l.x+(h.x-l.x)*m,y:l.y+(h.y-l.y)*m}}a=i}return s}function le(t,n){let o=t.length,e=Ft(t),s=e[o-1],r=new Float64Array(o+1),a=new Float64Array(o+1),c=new Float64Array(o+1);for(let h=0;h<o;h++){let u=t[h],m=(e[Math.min(h+1,o-1)]-e[Math.max(h-1,0)])/2;r[h+1]=r[h]+m,a[h+1]=a[h]+m*u.x,c[h+1]=c[h]+m*u.y}let i=new Array(o),f=0,l=0;for(let h=0;h<o;h++){let u=t[h],m=Math.min(n,e[h],s-e[h]),w=e[h]-m,M=e[h]+m+1e-9*(1+s);for(;f<o&&e[f]<w;)f++;for(;l<o&&e[l]<M;)l++;let A=r[l]-r[f];i[h]=A>0?{x:(a[l]-a[f])/A,y:(c[l]-c[f])/A}:{x:u.x,y:u.y}}return i}function re(t,n){let o=t.length,e=Ft(t),s=e[o-1],r=new Uint8Array(o),a=(f,l)=>{let h=t[f],u=t[f+1];if(!u)return h;let m=e[f+1]-e[f],w=m>0?(l-e[f])/m:0;return{x:h.x+(u.x-h.x)*w,y:h.y+(u.y-h.y)*w}},c=0,i=0;for(let f=0;f<o;f++){if(e[f]<n||s-e[f]<n)continue;for(;c+1<o&&e[c+1]<=e[f]-n;)c++;for(;i+1<o&&e[i+1]<=e[f]+n;)i++;let l=t[f],h=a(c,e[f]-n),u=a(i,e[f]+n),m=Math.abs((u.x-h.x)*(l.y-h.y)-(u.y-h.y)*(l.x-h.x));r[f]=m>0&&Nt(h,u)*Nt(h,l)*Nt(l,u)/(2*m)<n?1:0}return{tight:r,s:e}}function je(t,n){let o=t.slice(),{tight:e,s}=re(o,n),r=xn(s,Array.from(e,a=>a>0),3*n);for(let a=0;a<8&&r.length;a++)r=r.filter(([c,i])=>{let f=o.slice(c,i+1),l=re(f,n);if(!l.tight.includes(1))return!1;let h=tn(l.s,l.tight,n),u=le(f,n);for(let m=0;m<f.length;m++){let w=Math.min(1,3*h[m]);if(w>0){let M=f[m],A=u[m];o[c+m]={x:M.x+(A.x-M.x)*w,y:M.y+(A.y-M.y)*w}}}return!0});return o}function Je(t,n,o,e,s,r){let a=n.length,c=new Float64Array(a),i=0,f=0,l=0,h=0,u=0;for(let m=0;m<a;m++){for(;i<a&&t[i]-t[m]<=r;){let w=o(i),M=n[i];c[i]=w&&M?w.nx*M.nx+w.ny*M.ny:0,l+=c[i],i++}for(;t[m]-t[f]>r;)l-=c[f++];if(Math.abs(l)>1e-9&&(h=l<0?-1:1),!!h)for(;u<=m;u++)s(u,h)}if(u<a){let m=0;for(let w=0;w<a;w++)m+=e(w)?1:-1;for(;u<a;u++)s(u,m<0?-1:1)}}function Qe(t,n,o,e,s=!0){let r=Math.max(o,2*e),a=Math.PI*e,c=s?a+3*e+r/2:r/2,i=new Map,f=new Map,l=[],h=[],u=w=>({normals:new Array(w),shifts:s?new Array(w):[]}),m=(w,M,A,R)=>{let P=i.get(w);P||(P=[],i.set(w,P)),(P[M]??=[])[A]=R};return t.forEach((w,M)=>{let{walk:A,ids:R,visits:P,owned:k,starts:W,xs:F,ys:S,stepOf:_}=w,g=R.length,E=F.length,x=new Array(g);for(let d=0;d<g;d++)k[d]&&(x[d]=u(W[d+1]-W[d]),f.set(R[d],{run:M,step:d,frame:x[d]}),m(R[d],A,P[d],x[d]));let C=new Float64Array(E);for(let d=1;d<E;d++){let I=F[d]-F[d-1],N=S[d]-S[d-1];C[d]=C[d-1]+Math.sqrt(I*I+N*N)}let J=C[E-1],D=new Int32Array(g).fill(-1),B=new Int32Array(g),Y=new Array(g);for(let d=0;d<g;d++){let I=k[d]?void 0:f.get(R[d]);I&&(D[d]=I.run,B[d]=I.step,Y[d]=I.frame)}let et=new Int32Array(g),ct=new Int32Array(g);for(let d=0;d+1<g;d++){let N=D[d]>=0&&D[d+1]===D[d]?B[d+1]-B[d]:0;et[d+1]=et[d]+(N===1?1:0),ct[d+1]=ct[d]+(N===-1?1:0)}let tt=new Array(g),b=0,L=0;for(let d=0;d<g;d++){if(!s){tt[d]=!k[d];continue}let I=C[W[d]]-c,N=C[W[d+1]-1]+c;for(;C[b]<I;)b++;for(;L+1<E&&C[L+1]<=N;)L++;let j=_[Math.max(0,b-1)],st=_[Math.min(E-1,L+1)],H=st-j,it=et[st]-et[j],gt=ct[st]-ct[j];tt[d]=!k[d]&&I>=0&&N<=J&&H>0&&(it===H||gt===H)}for(let d=0;d<g;d++){if(k[d])continue;let I=Y[d];x[d]=!s&&tt[d]?I:tt[d]?{normals:I.normals,shifts:I.shifts}:u(I.normals.length),m(R[d],A,P[d],x[d])}h.push(x);let q=new Array(E);for(let d=0;d<E;d++)q[d]=!tt[_[d]];for(let[d,I]of xn(C,q,c)){let N=[];for(let H=d;H<=I;H++)N.push({x:F[H],y:S[H]});let j=s?je(le(ze(N,e/2,a),e/2),e/2):N,st=Ve(j,r);Je(Ft(j),st,H=>{let it=_[d+H];return(k[it]?x[it]:Y[it])?.normals[Zt(w,d+H)]},H=>w.forward[_[d+H]],(H,it)=>{let gt=d+H,Lt=_[gt];if(tt[Lt])return;let Ht=Zt(w,gt),Rt=st[H];x[Lt].normals[Ht]=Rt&&(it>0?Rt:{nx:-Rt.nx,ny:-Rt.ny}),s&&(x[Lt].shifts[Ht]={dx:j[H].x-N[H].x,dy:(j[H].y-N[H].y)/n})},r)}if(!s){l.push(C);return}let ot=new Float64Array(E),G=0,V=0;for(let d=0;d<E;d++){let I=x[_[d]].shifts[Zt(w,d)],N=F[d]+(I?.dx??0),j=S[d]+(I?.dy??0)*n;ot[d]=d?ot[d-1]+Math.sqrt((N-G)**2+(j-V)**2):0,G=N,V=j}l.push(ot)}),{frames:i,arcs:l,stepFrames:h}}function fe(t,n,o,e){let s=new Array(n.length),r=[],a=0,c=0;for(let i=0;i<n.length;i++){for(;c<n.length&&t[c]-t[i]<=o;){for(;r.length>a&&e*n[r.at(-1)]<=e*n[c];)r.pop();r.push(c++)}for(;t[i]-t[r[a]]>o;)a++;s[i]=n[r[a]]}return s}function tn(t,n,o,e=()=>!0){let s=n.length,r=new Float64Array(s+1),a=new Float64Array(s+1);for(let l=0;l<s;l++){let h=e(n[l])?s>1?(t[Math.min(l+1,s-1)]-t[Math.max(l-1,0)])/2:1:0;r[l+1]=r[l]+h,a[l+1]=a[l]+h*n[l]}let c=new Float64Array(s),i=0,f=0;for(let l=0;l<s;l++){for(;t[l]-t[i]>o;)i++;for(;f<s&&t[f]-t[l]<=o;)f++;let h=r[f]-r[i];c[l]=h>0?(a[f]-a[i])/h:n[l]}return c}var Ze=[0];function to(t){for(let n of t.values())if(n>1)return!0;return!1}function no(t,n,o,e,s){if(!to(n))return{span:n,nodeThreads:new Map,threadPasses:new Map,threadAt:new Map,linkThreads:new Map};let r=new Map,a=[],c=[],i=[],f=[],l=[],h=[],u=[];for(let S of t){let _=[],g=[];for(let b of S){let L=r.get(b);L===void 0&&(L=a.length,r.set(b,L),a.push(b),c.push(0),i.push(0)),g.push(L);let q=o[b],ot=q?.[Math.floor(q.length/2)];_.push(ot?{x:ot.x,y:ot.y*e}:_.at(-1)??{x:0,y:0})}let E=Ft(_),x=S.map(b=>n.get(b)??1),C=fe(E,x,s/2,1),J=g.map(b=>++i[b]),D=S.length,B=new Int32Array(D),Y=-1;for(let b=0;b<D;b++)Y=x[b]===C[b]?b:Y,B[b]=Y;let et=new Int32Array(D);Y=-1;for(let b=D-1;b>=0;b--)Y=x[b]===C[b]?b:Y,et[b]=Y;let ct=new Array(D),tt=new Array(D).fill(NaN);for(let b=0;b<D;b++){let L=B[b],q=et[b],ot=L<0?q:q<0||E[b]-E[L]<=E[q]-E[b]?L:q,G=V=>Math.min(J[V],C[b])-1;if(ct[b]=G(ot),x[b]===1&&L>=0&&q>=0&&G(q)!==G(L)){let V=(E[b]-E[L])/(E[q]-E[L]||1);tt[b]=G(L)+(G(q)-G(L))*V}c[g[b]]=Math.max(c[g[b]],C[b])}f.push(g),l.push(J),h.push(ct),u.push(tt)}let m=[],w=[],M=(S,_)=>{let g=c[S],E=m[S]??=new Set;for(let x=0;x<g;x++)for(let C of[_-x,_+x])if(C>=0&&C<g&&!E.has(C))return C;return _},A=[];f.forEach((S,_)=>{S.forEach((g,E)=>{if(c[g]>1){let x=u[_][E],C=M(g,Number.isNaN(x)?h[_][E]:Math.round(x));m[g].add(C),(w[g]??=[])[l[_][E]]=C,Number.isNaN(x)||((A[g]??=[])[C]=x)}})});let R=new Map,P=new Map,k=new Map,W=new Map;a.forEach((S,_)=>{A[_]&&W.set(S,A[_]),R.set(S,c[_]),P.set(S,m[_]?[...m[_]].sort((E,x)=>E-x):Ze);let g=[];w[_]?.forEach((E,x)=>{g[E]=x-1}),k.set(S,g)});let F=new Map;return f.forEach((S,_)=>{let g=l[_];for(let E=1;E<S.length;E++){let x=S[E-1],C=S[E],J=[w[x]?.[g[E-1]]??0,w[C]?.[g[E]]??0],D=F.get(a[x]);D||(D=new Map,F.set(a[x],D));let B=D.get(a[C]);B?B.some(([Y,et])=>Y===J[0]&&et===J[1])||B.push(J):D.set(a[C],[J])}}),{span:R,nodeThreads:P,threadPasses:k,threadAt:W,linkThreads:F}}function eo(t,n,o,{reach:e,taper:s}){let r=new Map;return t.forEach((a,c)=>{let i=n[c],f=a.ids.map((l,h)=>{let u=a.starts[h+1]-a.starts[h],m=Math.floor(u/2);return i[a.starts[h]+(a.forward[h]?m:u-1-m)]});for(let[l,h]of xn(f,a.owned,e/2+s/2)){let u=f.slice(l,h+1),m=a.ids.slice(l,h+1),w=o.map(M=>{let A=m.map(R=>M.get(R)??0);return A.every(R=>R===A[0])?{slot:A,held:A}:{slot:tn(u,fe(u,A,e/2,1),s/2),held:tn(u,A,s/2,R=>R>0)}});m.forEach((M,A)=>{a.owned[l+A]&&r.set(M,{slot:w.map(R=>R.slot[A]),held:w.map(R=>R.held[A])})})}}),r}function oo(t,n,o,e,s,r,a){let c=Kt(s,s),i=new Map,f=l=>{let h=i.get(l);if(!h){let u=e.get(l);h=u?Kt(u.slot,s,u.held):c,i.set(l,h)}return h};t.forEach((l,h)=>{let{walk:u,ids:m,visits:w,starts:M}=l,{threadPasses:A,threadAt:R}=r[u],P=new Float64Array(l.xs.length);m.forEach((W,F)=>{let S=Math.max(0,A.get(W)?.indexOf(w[F])??0),_=R.get(W)?.[S]??S;P.fill(f(W)[u]+_*gn,M[F],M[F+1])});let k=tn(o[h],P,a);n[h].forEach((W,F)=>{let S=M[F],_=M[F+1],g=!0;for(let x=S+1;g&&x<_;x++)g=Math.abs(k[x]-k[S])<1e-9;if(g){W.offset=k[S];return}let E=new Array(_-S);for(let x=S;x<_;x++)E[Zt(l,x)]=k[x];W.offsets=E})})}function he(t,n,o,e,s=yn(t.map(r=>r.route),n)){let r=pn(t),a=t.map(M=>M.mostPasses),c=Ue*e,i=qe(s,o,ne*e),f=nn(a)*(r?en(a):1)*e,l=Qe(i,o,ne*e,f,r),h=r?t.map(M=>no(M.route,M.passes,n,o,c)):void 0,u=h?eo(i,l.arcs,h.map(M=>M.span),{reach:c,taper:ee*e}):void 0;u&&h&&oo(i,l.stepFrames,l.arcs,u,a,h,ee/2*e);let m={dx:0,dy:0},w=new Set;for(let M of l.frames.values())for(let{shifts:A}of M.flat())if(!w.has(A)){w.add(A);for(let R of A)m.dx=Math.max(m.dx,Math.abs(R?.dx??0)),m.dy=Math.max(m.dy,Math.abs(R?.dy??0))}return{lines:l,threads:h,spans:u,furthestShift:m}}function U(t,n,o,e){return(e<<24|o<<16|n<<8|t)>>>0}function wn(t){return t&255}function Mn(t){return t>>>8&255}function An(t){return t>>>16&255}function En(t){return t>>>24&255}function ue(t){return`rgba(${wn(t)},${Mn(t)},${An(t)},${En(t)/255})`}function fs(t,n){return`rgba(${Math.round(t[0]*255)},${Math.round(t[1]*255)},${Math.round(t[2]*255)},${n})`}function vt(t,n){return U(wn(t),Mn(t),An(t),Math.round(En(t)*n))}function hs(t,n){let o=Math.max(0,1-1/n),e=s=>Math.round(s+(255-s)*o);return U(e(wn(t)),e(Mn(t)),e(An(t)),En(t))}var de=300,Ut=.7,Yt=.5;function so(t){return`hsl(${t}, ${Ut*100}%, ${Yt*100}%)`}function qt(t){return Math.max(0,Math.min(1,t))*de}function vn(t,n){return qt((t-n.start)/(n.end-n.start))}var ro=30;function ds({start:t,bp:n,reversed:o},e){let s=vn(t,e),r=vn(t+n,e);if(r-s<1)return[(s+r)/2];let a=Math.ceil((r-s)/ro);return Array.from({length:a+1},(c,i)=>vn(t+n*(o?a-i:i)/a,e))}var ao=Array.from({length:7},(t,n)=>({offset:n/6,color:so(n/6*de)})),ms=`linear-gradient(to right, ${ao.map(t=>`${t.color} ${t.offset*100}%`).join(", ")})`;var co=$t();function me(t,n,o,e,s,r,a=!1){return co(t,[n,o.scaleX,o.scaleY,e,r,a,s],()=>{let c=new Map;for(let i=0;i<n.edges.length;i++){let f=e?.get(i),l=zn(t,n.edges[i],o,f,f&&r?.[i],a);l&&c.set(i,l)}return c})}var io=4;function lo(t){let n=new Map;for(let o of t.edges)Bt(n,o.from,o.to),Bt(n,o.to,o.from);return n}function fo({nodeId:t,nodeById:n,neighbors:o}){let e=new Set([t]),s=[t],r=1/0,a=-1/0;for(let c=0;c<io&&s.length>0;c++){let i=[];for(let f of s){let l=o.get(f);if(l){for(let h of l)if(!e.has(h)){e.add(h);let u=n.get(h);u&&Xt(u)?(r=Math.min(r,u.stable.start+u.length),a=Math.max(a,u.stable.start)):i.push(h)}}}s=i}return r===1/0?void 0:{start:Math.min(r,a),end:Math.max(r,a)}}function ho({nodeId:t,nodeById:n,neighbors:o}){let e=n.get(t);return e===void 0?void 0:Xt(e)?{start:e.stable.start,end:e.stable.start+e.length}:fo({nodeId:t,nodeById:n,neighbors:o})}function pe(t){let n=new Map(t.nodes.map(s=>[s.id,s])),o=lo(t),e=new Map;for(let s of t.nodes){let r=ho({nodeId:s.id,nodeById:n,neighbors:o});r&&e.set(s.id,(r.start+r.end)/2)}return e}var uo=U(119,119,119,217),ge=U(136,136,136,217),mo=U(24,24,28,240),ye=2.2,Te=U(160,160,160,255),Vt=.18,po=.45,Ns=ue(vt(Te,Vt)),go=11,yo=1.2,xo=1e-6,wo=7,Mo=3,Ao=3,Eo=1.5,xe=3,vo=.5,_o=.45,_n=12,bo=1e-6,pt=new Float64Array(64),_t=new Float64Array(64),bt=new Float64Array(64);function Ro(t,n,o,e){let s=t.length*_n+1;pt.length<s&&(pt=new Float64Array(s),_t=new Float64Array(s),bt=new Float64Array(s));let r=t[t.length-1];pt[0]=r.x1,_t[0]=r.y1,bt[0]=0;let a=1,c=0;for(let i=t.length-1;i>=0&&c<e;i--){let f=t[i];for(let l=1;l<=_n&&c<e;l++){let h=1-(l/_n)**2,u=1-h,m=u*u*u,w=3*u*u*h,M=3*u*h*h,A=h*h*h,R=m*f.x0+w*f.cx0+M*f.cx1+A*f.x1,P=m*f.y0+w*f.cy0+M*f.cy1+A*f.y1;c+=Math.hypot(R-pt[a-1],(P-_t[a-1])*o)*n,pt[a]=R,_t[a]=P,bt[a]=c,a++}}return a}function we(t,n){let o=1;for(;o<t-1&&bt[o]<n;)o++;let e=bt[o-1],s=bt[o],r=s>e?Math.min(1,Math.max(0,(n-e)/(s-e))):0;return{x:pt[o-1]+(pt[o]-pt[o-1])*r,y:_t[o-1]+(_t[o]-_t[o-1])*r}}function So({curves:t,edgeHalfWidth:n,nodeHalfWidth:o,scale:e,yToX:s,color:r,fromSegments:a,toSegments:c}){let i=wo+Mo*n,f=Ro(t,e,s,o+xe*i),l=bt[f-1],h=l<bo,u=Math.min(o,l),m=h?Math.min(1,Vn(a,e,e*s)/i):1;if(h?m<vo:l<xe*i)return;let w=we(f,u),M=we(f,u+i*m),A=w.x-M.x,R=(w.y-M.y)*s,P=t[t.length-1];return{x:w.x,y:w.y,angle:Math.hypot(A,R)>0?Math.atan2(R,A):Wo(P,s,Oo(P,c)),length:i*m,halfWidth:(Ao+Eo*n)*m,color:r}}var Me=[[0,0]],Co=[0],Ae={dx:0,dy:0};function Oe(t,n,o){let e=s=>Math.hypot(s.x-t.x,(s.y-t.y)*o);return e(n[0])<e(n.at(-1))}function To(t,n,o,e,s){return e?Un(t).from==="start":Oe({x:o.x0,y:o.y0},n,s)}function Oo(t,n){if(n.length<2)return;let o=n[0],e=n[n.length-1];return Math.hypot(t.x1-o.x,t.y1-o.y)<=Math.hypot(t.x1-e.x,t.y1-e.y)?{from:o,to:n[1]}:{from:e,to:n[n.length-2]}}function Ee(t,n){if(!t||!n)return;let o=n.x-t.x,e=n.y-t.y,s=Math.hypot(o,e);return s>0?{nx:-e/s,ny:o/s}:void 0}var ke=.1,ko=1/Math.sqrt(ke);function ve(t,n=1){let o=n===1?t:t.map(e=>({x:e.x,y:e.y*n}));return o.map((e,s)=>{let r=Ee(o[s-1],e),a=Ee(e,o[s+1]);if(r&&a){let c=(r.nx+a.nx)/2,i=(r.ny+a.ny)/2,f=r.nx*c+r.ny*i;return f>ke?{nx:c/f,ny:i/f}:{nx:c,ny:i}}return r??a??{nx:0,ny:0}})}function _e(t,n,o,e=1){let s=new Array(t.length);for(let r=0;r<t.length;r++){let a=typeof o=="number"?o:o[r];s[r]={x:t[r].x+n[r].nx*a,y:t[r].y+n[r].ny*a/e}}return s}function Rn(t,n,o){let e=(1-Math.abs(2*o-1))*n,s=e*(1-Math.abs(t/60%2-1)),r=o-e/2,a=0,c=0,i=0;return t<60?(a=e,c=s):t<120?(a=s,c=e):t<180?(c=e,i=s):t<240?(c=s,i=e):t<300?(a=s,i=e):(a=e,i=s),[a+r,c+r,i+r]}function on(t,n,o,e=1){let[s,r,a]=Rn(t,n,o);return U(Math.round(s*255),Math.round(r*255),Math.round(a*255),Math.round(e*255))}var Io=[[68,1,84],[59,82,139],[33,145,140],[94,201,98],[253,231,37]],Po=[[237,137,44],[158,42,122]],No=[[220,50,50],[50,120,220]];function bn(t,n){let o=Math.max(0,Math.min(1,n))*(t.length-1),e=Math.min(t.length-2,Math.floor(o)),s=o-e,r=t[e],a=t[e+1];return U(Math.round(r[0]+(a[0]-r[0])*s),Math.round(r[1]+(a[1]-r[1])*s),Math.round(r[2]+(a[2]-r[2])*s),255)}function Fo(t,n){return on(jn(t),un,dn,n)}var Ie=[60,65,72],Sn=U(...Ie,255),Fs=`rgb(${Ie.join(", ")})`;function Lo(t,n){let o=n.midpoints.get(t.id);return Xt(t)&&o!==void 0?(o-n.start)/n.span:void 0}function Ls(t,n){let o=pe(t);if(n&&n.end>n.start)return{start:n.start,span:n.end-n.start,midpoints:o};let e=1/0,s=-1/0;for(let r of o.values())e=Math.min(e,r),s=Math.max(s,r);return{start:e===1/0?0:e,span:s>e?s-e:1,midpoints:o}}function Ho(t,n){let o=1/0,e=-1/0,s=1/0,r=-1/0,a=0;for(let c of t.nodes)c.stable!==void 0&&c.stable.rank>a&&(a=c.stable.rank),c.depth<o&&(o=c.depth),c.depth>e&&(e=c.depth),c.length<s&&(s=c.length),c.length>r&&(r=c.length);return{minDepth:o,maxDepth:e,minLength:s,maxLength:r,maxRank:a,nodeCount:t.nodes.length,referenceRamp:n}}function Do(t,n,o,e){switch(o){case"random":return Fo(t.id,1);case"depth":return bn(Io,e.maxDepth>e.minDepth?(t.depth-e.minDepth)/(e.maxDepth-e.minDepth):.5);case"node-length":return bn(No,e.maxLength>e.minLength?(t.length-e.minLength)/(e.maxLength-e.minLength):.5);case"stable-rank":return t.stable===void 0?U(160,160,160,255):t.stable.rank===0?U(52,152,219,255):bn(Po,e.maxRank>1?(t.stable.rank-1)/(e.maxRank-1):0);case"reference-position":{let s=e.referenceRamp;if(s===void 0)return U(160,160,160,255);let r=Lo(t,s);return r===void 0?Sn:on(qt(r),Ut,Yt)}case"grey":return U(160,160,160,255);case"rainbow":{let s=e.nodeCount>1?n/e.nodeCount*360:0;return on(s,.75,.5)}default:return U(52,152,219,255)}}function Wo(t,n=1,o){let e=[[t.cx1,t.cy1],[t.cx0,t.cy0],[t.x0,t.y0]];for(let[s,r]of e){let a=t.x1-s,c=(t.y1-r)*n;if(Math.hypot(a,c)>0)return Math.atan2(c,a)}return o?Math.atan2((o.to.y-o.from.y)*n,o.to.x-o.from.x):0}function Go(t,n){let o=!1;for(let e=0;e<t.length-1&&!o;e++){let s=t[e],r=t[e+1];o=Math.max(s.x,r.x)>=n.minX&&Math.min(s.x,r.x)<=n.maxX&&Math.max(s.y,r.y)>=n.minY&&Math.min(s.y,r.y)<=n.maxY}return o}function be(t,n,o=0,e=0){for(let s of t){let r=Math.min(s.x0,s.cx0,s.cx1,s.x1),a=Math.max(s.x0,s.cx0,s.cx1,s.x1),c=Math.min(s.y0,s.cy0,s.cy1,s.y1),i=Math.max(s.y0,s.cy0,s.cy1,s.y1);if(a>=n.minX-o&&r<=n.maxX+o&&i>=n.minY-e&&c<=n.maxY+e)return!0}return!1}var Re=new WeakMap;function Bo(t){let n=Re.get(t);if(!n){let o=[],e=new Map,s=t.paths??[];for(let r=0;r<s.length;r++)o.push(on(Jn(r,s.length),un,dn,.85)),e.has(s[r].name)||e.set(s[r].name,r);n={pathColorByIndex:o,pathIndexByName:e},Re.set(t,n)}return n}var Se=new WeakMap,Xo=new Map;function $o(t){let n=Se.get(t);if(!n){n=new Map;for(let[o,e]of(t.paths??[]).entries())for(let s of new Set(e.nodeIds))Bt(n,s,o);Se.set(t,n)}return n}var Ko=$t(),Uo=$t(),Ce=new WeakMap;function Yo(t){let n=Ce.get(t);if(!n){n=new Map;for(let{from:o,to:e}of t.edges){let s=n.get(o);s||(s=new Set,n.set(o,s)),s.add(e)}Ce.set(t,n)}return n}function Hs(t){let{nodePositions:n,graph:o,nodeById:e,colorScheme:s,contigThickness:r,connectorThickness:a,drawPaths:c,nodeWidth:i="uniform",edgeWidth:f="uniform",highlight:l,axis:h,linearLayout:u,viewportBounds:m,referenceRamp:w,deletions:M,deletionRoutes:A,stranded:R,hiddenEdges:P,version:k=0}=t,W=Qn(o,i),F=f==="walks"?Zn(o):0,S=h.scaleX,_=1/Math.max(S,xo),g=Yn(h),E=me(n,o,h,M,k,A,R),x=[],C=new Map,J=[],D=new Map,B=[],Y=new Map,et=Ho(o,w),ct=new Map;if(s==="rainbow")for(let p=0;p<o.nodes.length;p++)ct.set(o.nodes[p].id,p);let tt=o.paths?.length??0,{pathColorByIndex:b,pathIndexByName:L}=Bo(o),q=p=>b[L.get(p)??-1]??ge,ot=c&&tt>1?$o(o):Xo,G=l?.walks??[],V=pn(G),d=G.map(p=>p.mostPasses),I=V?en(d):1,N=l&&G.length>1?Ko(l,[n,k,h.scaleX,h.scaleY],()=>he(G,n,g,_,Uo(l,[n,k],()=>yn(G.map(p=>p.route),n)))):void 0,j=N?.lines,st=N?.threads,H=N?.spans,it=V?Kt(d,d):[],gt=new Map,Lt=p=>{let y=gt.get(p);if(!y){let v=H?.get(p);y=v?Kt(v.slot,d,v.held):it,gt.set(p,y)}return y},Ht=(p,y,v,T)=>V?(Lt(p)[v]+T*gn)*I:(v-(G.length-1)/2)*y,Rt=(p,y,v)=>{let T=p?.offsets?.[y]??p?.offset;return T===void 0?v:T*I},Pn=p=>V?Et/2*I:p/2,Nn=new Map,Fn=new WeakMap,Ln=(p,y,v)=>st?.[p]?.threadPasses.get(y)?.[v]??0,rn=(p,y)=>{let v=Nn.get(p);return v||(v=ve(y,g),Nn.set(p,v)),v},We=(p,y,v)=>{if(!v)return rn(p,y);let T=Fn.get(v.normals);return T||(T=rn(p,y).map((O,X)=>v.normals[X]??O),Fn.set(v.normals,T)),T},Hn=new Map,an=p=>{let y=Hn.get(p);if(y===void 0){let v=e.get(p);y=mn(v?Qt(v,r,i,W):r,G.length),Hn.set(p,y)}return y},Dn=(p,y,v,T,O,X)=>{let Q=T?0:v.length-1,z=y?.[O]?.[Ln(O,p,X)],rt=z?.offsets?.[Q]??z?.offset;return{normal:z?.normals[Q]??rn(p,v)[Q]??{nx:0,ny:0},shift:z?.shifts[Q]??Ae,offset:rt===void 0?Ht(p,an(p),O,X):rt*I}},Ge=(p,y)=>{if(!m)return!0;let v=V?nn(d)*I:(G.length-1)/2*an(y),T=ko*v*_;return be(p,m,T+(N?.furthestShift.dx??0),T/g+(N?.furthestShift.dy??0))},Be=(p,y,v)=>{let T=st?.[p]?.linkThreads;if(!T?.size)return Me;let O=T.get(y)?.get(v),X=Yo(o).get(v)?.has(y)?void 0:T.get(v)?.get(y);if(!X)return O??Me;let Q=X.map(([z,rt])=>[rt,z]);return O?[...O,...Q]:Q},cn=(p,y,v)=>G[p]?.passColors.get(y)?.[st?.[p]?.threadPasses.get(y)?.[v]??0],Wn=new WeakMap,Xe=(p,y)=>{if(!y||!V)return p;let v=Wn.get(y.shifts);if(!v){let{shifts:T}=y;v=p.map((O,X)=>{let{dx:Q,dy:z}=T[X]??Ae;return{...O,x:O.x+Q,y:O.y+z}}),Wn.set(y.shifts,v)}return v},$e=S>(u?1:_o);for(let p=0;p<o.edges.length;p++){let y=o.edges[p],v=n[y.from],T=n[y.to],O=E.get(p);if(!v?.length||!T?.length||!O||P?.has(p))continue;let X=y.pathIds?.length??0,z=M?.get(p)!==void 0,rt=l?.edgeIndexes.has(p)??!1,Dt=a/2*(z?ye:1),St=te(X,F,f),Ct=a/2*(z?f==="walks"&&F>0?Math.max(1,St):ye:St),lt=c&&X>0,Tt=z?mo:uo,yt=!l||rt?Tt:vt(Tt,Vt),ut=e.get(y.to),Wt=(ut?Qt(ut,r,i,W):r)/2,$=K=>!m||be(K,m),zt=K=>$n(K,go/S,g,m),jt=(K,Z,nt)=>{if(!z){B.push({curves:K,thickness:Z,color:nt});return}for(let mt of zt(K))B.push({curves:mt.curves,thickness:Z,color:nt})},xt=(K,Z,nt,mt,kt,Mt,It,at,Gn)=>{B.push({curves:K,thickness:Z,color:nt,walk:mt,pass:kt,normal:Mt,offsetX:It,endNormal:at,endOffsetX:Gn})},Ot=K=>{let Z=$e?So({curves:K,edgeHalfWidth:z||lt?a/2:Ct,nodeHalfWidth:Wt,scale:S,yToX:g,color:yt,fromSegments:v,toSegments:T}):void 0;Z&&J.push(Z)},dt=B.length,Gt=J.length,wt=l?.walks.length&&rt&&!lt?l.walks:void 0;if(wt&&!Ge(O,y.from))continue;if(wt){let K=To(y,v,O[0],R,g),Z=O.at(-1),nt=Oe({x:Z.x1,y:Z.y1},T,g),mt=wt.length===1,kt=Pn(an(y.from)),Mt=j?.frames.get(y.from),It=j?.frames.get(y.to);for(let at=0;at<wt.length;at++)if(wt[at].edgeIndexes.has(p))for(let[ln,Bn]of Be(at,y.from,y.to)){let ht=Dn(y.from,Mt,v,K,at,ln),Pt=V?Dn(y.to,It,T,nt,at,Bn):ht,At=mt?0:ht.offset*_,fn=V?Pt.offset*_:At,Xn=V?Kn(O,ht.shift.dx+ht.normal.nx*At,ht.shift.dy+ht.normal.ny*At/g,Pt.shift.dx+Pt.normal.nx*fn,Pt.shift.dy+Pt.normal.ny*fn/g):At===0?O:hn(O,ht.normal.nx*At,ht.normal.ny*At/g);$(Xn)&&xt(Xn,kt,cn(at,y.from,ln)??cn(at,y.to,Bn)??Tt,at,ln,ht.normal,At,Pt.normal,fn)}B.length>dt&&Ot(O)}else if(!lt)$(O)&&(jt(O,Ct,yt),Ot(O));else{let K=qn(v,T,X,h),Z=Math.floor((X-1)/2);for(let nt=0;nt<X;nt++){let{x:mt,y:kt}=K[nt],Mt=mt===0&&kt===0?O:hn(O,mt,kt);if(!$(Mt))continue;let It=q(y.pathIds[nt]);jt(Mt,Dt,l&&(l.walks.length?!l.names.has(y.pathIds[nt]):!rt)?vt(It,Vt):It),nt===Z&&Ot(Mt)}}let Jt=B.length-dt;Jt>0&&Y.set(p,{start:dt,count:Jt});let ft=J.length-Gt;ft>0&&D.set(p,{start:Gt,count:ft})}for(let[p,y]of Object.entries(n)){let v=e.get(p);if(!v||m&&!Go(y,m))continue;let T=l!==void 0&&!l.nodeIds.has(p),O=T?Te:Do(v,ct.get(p)??0,s,et),X=T?vt(O,Vt):v.moved?vt(O,po):O,Q=Qt(v,r,i,W),z=Q/2,rt=x.length,Dt=ot.get(p),St=Q/tt,Ct=y.length>=2,lt=l?.walks.length&&!T&&!Dt?.length?l.walks:void 0;if(Ct&&lt){let yt=mn(Q,lt.length),ut=Pn(yt),Wt=j?.frames.get(p);for(let $=0;$<lt.length;$++){let zt=lt[$].colors.get(p);if(zt===void 0)continue;let jt=st?.[$]?.nodeThreads.get(p)??Co;for(let xt of jt){let Ot=cn($,p,xt)??zt;if(lt.length===1){x.push({points:y,thickness:ut,color:Ot,walk:$,pass:xt});continue}let dt=Wt?.[$]?.[Ln($,p,xt)],Gt=We(p,y,dt),wt=Xe(y,dt),Jt=Ht(p,yt,$,xt),ft=dt?.offsets?.map(Z=>Z*I*_),K=ft?ft[Math.floor(ft.length/2)]:Rt(dt,0,Jt)*_;x.push({points:_e(wt,Gt,ft??K,g),thickness:ut,color:Ot,walk:$,pass:xt,normals:Gt,offsetX:K,...ft&&{offsets:ft}})}}}else if(Ct&&Dt?.length&&St>=yo){let yt=ve(y,g);for(let ut of Dt){let Wt=(ut-(tt-1)/2)*St*_,$=b[ut]??ge;x.push({points:_e(y,yt,Wt,g),thickness:St/2,color:T?vt($,Vt):$})}}else Ct&&x.push({points:y,thickness:z,color:X});let Tt=x.length-rt;Tt>0&&C.set(p,{start:rt,count:Tt})}return{nodeStrokes:x,nodeStrokeRuns:C,arrows:J,arrowRuns:D,edgeCurves:B,edgeCurveRuns:Y}}var Fe=[{value:"progress",label:"Progress along the walk"},{value:"walk",label:"One colour for the walk"},{value:"reference",label:"Reference position"}],On=[{value:"grey",label:"Grey to black",ends:["#a3a3a3","#151515"]},{value:"blue",label:"Cyan to navy",ends:["#6ee0f0","#0b2c7a"]},{value:"red",label:"Yellow to red",ends:["#ffd24a","#b3121b"]},{value:"purple",label:"Pink to plum",ends:["#f5a3d8","#5e1a6e"]},{value:"green",label:"Lime to forest",ends:["#b6e36c","#0b5d3b"]},{value:"orange",label:"Peach to rust",ends:["#ffc285","#8f3a00"]},{value:"rainbow",label:"Rainbow"}],Cn=["blue","red","purple","green"],qo=t=>Fe.some(n=>n.value===t),Vo=t=>On.some(n=>n.value===t);function zo(t,n,o,e=!0){let{field:s,scheme:r}=t.color??{},a=qo(s)?s:e?"progress":"walk",c=n?"grey":Cn[o%Cn.length],i=Vo(r)?r==="rainbow"&&a!=="reference"?c:r:c,f=Math.floor(o/Cn.length)%Pe.length;return a==="walk"&&i===c&&f>0?{field:a,scheme:i,shade:Pe[f]}:e||a==="walk"?{field:a,scheme:i}:{field:a,scheme:i,darkest:jo}}var jo=.55,kn=.5,Pe=[kn,.85,.2],Jo=.08,Ne=({field:t,scheme:n})=>t!=="walk"&&n!=="rainbow";function Qo(t){let n=new Map;for(let e of t)Ne(e)&&n.set(e.scheme,(n.get(e.scheme)??0)+1);let o=new Map;return t.map(e=>{let s=Ne(e)?n.get(e.scheme):1;if(s<2)return e;let r=o.get(e.scheme)??0;o.set(e.scheme,r+1);let a=Jo/2;return{...e,stretch:[r/s+(r>0?a:0),(r+1)/s-(r<s-1?a:0)]}})}var Le=({stretch:t},n)=>t?t[0]+(t[1]-t[0])*n:n,Zo=t=>t<=.04045?t/12.92:((t+.055)/1.055)**2.4,ts=t=>t<=.0031308?t*12.92:1.055*t**(1/2.4)-.055;function ns(t){let[n,o,e]=[1,3,5].map(c=>Zo(Number.parseInt(t.slice(c,c+2),16)/255)),s=Math.cbrt(.4122214708*n+.5363325363*o+.0514459929*e),r=Math.cbrt(.2119034982*n+.6806995451*o+.1073969566*e),a=Math.cbrt(.0883024619*n+.2817188376*o+.6299787005*e);return[.2104542553*s+.793617785*r-.0040720468*a,1.9779984951*s-2.428592205*r+.4505937099*a,.0259040371*s+.7827717662*r-.808675766*a]}function es([t,n,o]){let e=(t+.3963377774*n+.2158037573*o)**3,s=(t-.1055613458*n-.0638541728*o)**3,r=(t-.0894841775*n-1.291485548*o)**3;return[4.0767416621*e-3.3077115913*s+.2309699292*r,-1.2684380046*e+2.6097574011*s-.3413193965*r,-.0041960863*e-.7034186147*s+1.707614701*r].map(a=>ts(Math.max(0,Math.min(1,a)))*255)}var Tn=new Map;function os(t){if(!Tn.has(t)){let n=On.find(o=>o.value===t);Tn.set(t,n&&"ends"in n?n.ends.map(ns):void 0)}return Tn.get(t)}function In(t,n,o=0){let e=Math.max(0,Math.min(1,n)),s=os(t);if(!s)return Rn(qt(e),Ut,Yt).map(l=>l*255);let[r,a]=s,c=r[0],i=a[0],f=i<o&&c>o?(c-o)/(c-i):1;return es(r.map((l,h)=>l+(a[h]-l)*e*f))}function He(t,n,o){let[e,s,r]=In(t,n,o).map(Math.round);return`rgb(${e}, ${s}, ${r})`}function sn(t,n,o){let[e,s,r]=In(t,n,o).map(Math.round);return U(e,s,r,255)}function ss(t,n){let{field:o,scheme:e,darkest:s,shade:r=kn}=t;return o==="walk"?sn(e,r):n===void 0?De:sn(e,Le(t,n),s)}var De=Sn;function rs(t){let{field:n,scheme:o,darkest:e,shade:s=kn}=t,r=(a,c)=>({offset:a,color:He(o,c,e),abgr:sn(o,c,e)});return n==="walk"?[r(0,s)]:Array.from({length:7},(a,c)=>r(c/6,Le(t,c/6)))}export{lo as a,ho as b,Et as c,pn as d,is as e,U as f,ue as g,fs as h,vt as i,hs as j,so as k,ds as l,ao as m,ms as n,me as o,Ns as p,Rn as q,Fs as r,Lo as s,Ls as t,Ho as u,Do as v,Hs as w,Fe as x,On as y,zo as z,Qo as A,ss as B,De as C,rs as D};
2
+ //# sourceMappingURL=chunk-HFBUC6GF.js.map