jbrowse-plugin-graphgenomeviewer 7.1.0 → 7.1.2

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 (233) hide show
  1. package/README.md +17 -8
  2. package/dist/chunks/AddTrackWorkflow-RPH4ZFSX.js +2 -0
  3. package/dist/chunks/{AddTrackWorkflow-Q6RY23LF.js.map → AddTrackWorkflow-RPH4ZFSX.js.map} +2 -2
  4. package/dist/chunks/{ChooseSamplesDialog-BNVYBGJQ.js → ChooseSamplesDialog-JRN4YLBY.js} +2 -2
  5. package/dist/chunks/{ChooseWalksDialog-EN3C6AQA.js → ChooseWalksDialog-UXLFZTZJ.js} +2 -2
  6. package/dist/chunks/GbzBaseSyntenyAdapter-LRECKL74.js +2 -0
  7. package/dist/chunks/GbzBaseSyntenyAdapter-LRECKL74.js.map +7 -0
  8. package/dist/chunks/{GraphGenomeView-Z2WZKEEO.js → GraphGenomeView-NJ5XCREB.js} +2 -2
  9. package/dist/chunks/GraphTrackSettingsDialog-47PQ6LM7.js +6 -0
  10. package/dist/chunks/GraphTrackSettingsDialog-47PQ6LM7.js.map +7 -0
  11. package/dist/chunks/{HighlightColorDialog-EYBKFSJU.js → HighlightColorDialog-UK5VDDV6.js} +2 -2
  12. package/dist/chunks/{LinearGraphDisplay-WIBVWRQE.js → LinearGraphDisplay-TXTKAACH.js} +2 -2
  13. package/dist/chunks/MinigraphBubbleAdapter-HW7XQMAI.js +2 -0
  14. package/dist/chunks/MinigraphBubbleAdapter-HW7XQMAI.js.map +7 -0
  15. package/dist/chunks/RgfaTabixAdapter-PSKYWD2X.js +3 -0
  16. package/dist/chunks/RgfaTabixAdapter-PSKYWD2X.js.map +7 -0
  17. package/dist/chunks/{TrackWarningsDialog-QT4YEXGD.js → TrackWarningsDialog-TRYBOIHX.js} +2 -2
  18. package/dist/chunks/WalkTabixSyntenyAdapter-U53JLYVU.js +2 -0
  19. package/dist/chunks/WalkTabixSyntenyAdapter-U53JLYVU.js.map +7 -0
  20. package/dist/chunks/chunk-2MCOY3YG.js +3 -0
  21. package/dist/chunks/chunk-2MCOY3YG.js.map +7 -0
  22. package/dist/chunks/{chunk-EWFJBQDV.js → chunk-5O6YRJHL.js} +2 -2
  23. package/dist/chunks/{chunk-EWFJBQDV.js.map → chunk-5O6YRJHL.js.map} +1 -1
  24. package/dist/chunks/chunk-BUY2PV7D.js +2 -0
  25. package/dist/chunks/chunk-BUY2PV7D.js.map +7 -0
  26. package/dist/chunks/chunk-DVCZ3BOC.js +2 -0
  27. package/dist/chunks/chunk-DVCZ3BOC.js.map +7 -0
  28. package/dist/chunks/{chunk-SAMJE6GH.js → chunk-EGDLEQ47.js} +3 -3
  29. package/dist/chunks/{chunk-SAMJE6GH.js.map → chunk-EGDLEQ47.js.map} +4 -4
  30. package/dist/chunks/chunk-FHZXW7IG.js +2 -0
  31. package/dist/chunks/chunk-FHZXW7IG.js.map +7 -0
  32. package/dist/chunks/{chunk-DZ4OUKQV.js → chunk-FITPB5X6.js} +2 -2
  33. package/dist/chunks/{chunk-DZ4OUKQV.js.map → chunk-FITPB5X6.js.map} +1 -1
  34. package/dist/chunks/chunk-FVK2THE4.js +2 -0
  35. package/dist/chunks/chunk-FVK2THE4.js.map +7 -0
  36. package/dist/chunks/{chunk-AHFQHYJI.js → chunk-IBWORBGY.js} +2 -2
  37. package/dist/chunks/chunk-MND7GAOG.js +2 -0
  38. package/dist/chunks/chunk-MND7GAOG.js.map +7 -0
  39. package/dist/chunks/chunk-MURN3JPK.js +2 -0
  40. package/dist/chunks/chunk-MURN3JPK.js.map +7 -0
  41. package/dist/chunks/{chunk-3Q4RBDCL.js → chunk-N6PQZSAX.js} +1 -1
  42. package/dist/chunks/{chunk-3Q4RBDCL.js.map → chunk-N6PQZSAX.js.map} +1 -1
  43. package/dist/chunks/chunk-NWJYLP6Z.js +4 -0
  44. package/dist/chunks/chunk-NWJYLP6Z.js.map +7 -0
  45. package/dist/chunks/{chunk-YJHYBDYF.js → chunk-S75W27NT.js} +2 -2
  46. package/dist/chunks/{chunk-YJHYBDYF.js.map → chunk-S75W27NT.js.map} +1 -1
  47. package/dist/chunks/{chunk-IXQK7JAW.js → chunk-T4HOC6O3.js} +1 -1
  48. package/dist/chunks/{chunk-IXQK7JAW.js.map → chunk-T4HOC6O3.js.map} +1 -1
  49. package/dist/chunks/{chunk-AU73K7LX.js → chunk-TUKJRVBS.js} +1 -1
  50. package/dist/chunks/{chunk-AU73K7LX.js.map → chunk-TUKJRVBS.js.map} +1 -1
  51. package/dist/chunks/chunk-UGCNPRKC.js +2 -0
  52. package/dist/chunks/{chunk-E3WYW7Z6.js.map → chunk-UGCNPRKC.js.map} +2 -2
  53. package/dist/chunks/{chunk-YSTMDXXX.js → chunk-VJ3SO4CH.js} +1 -1
  54. package/dist/chunks/{chunk-YSTMDXXX.js.map → chunk-VJ3SO4CH.js.map} +1 -1
  55. package/dist/chunks/{chunk-XT766CZ5.js → chunk-W6EQLQ6H.js} +1 -1
  56. package/dist/chunks/{chunk-XT766CZ5.js.map → chunk-W6EQLQ6H.js.map} +1 -1
  57. package/dist/chunks/chunk-WAMBI7OX.js +2 -0
  58. package/dist/chunks/chunk-WAMBI7OX.js.map +7 -0
  59. package/dist/chunks/chunk-WCGVUZWP.js +2 -0
  60. package/dist/chunks/chunk-WCGVUZWP.js.map +7 -0
  61. package/dist/chunks/chunk-WEGWTC52.js +2 -0
  62. package/dist/chunks/chunk-WEGWTC52.js.map +7 -0
  63. package/dist/chunks/chunk-YU7T5WOQ.js +2 -0
  64. package/dist/chunks/{chunk-6OPB7FOJ.js.map → chunk-YU7T5WOQ.js.map} +2 -2
  65. package/dist/chunks/{chunk-446RWIA3.js → chunk-ZMOMFU2B.js} +1 -1
  66. package/dist/chunks/{chunk-446RWIA3.js.map → chunk-ZMOMFU2B.js.map} +1 -1
  67. package/dist/chunks/renderSvg-KSQI5DH6.js +2 -0
  68. package/dist/chunks/renderSvg-KSQI5DH6.js.map +7 -0
  69. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js +4 -4
  70. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js.map +4 -4
  71. package/package.json +8 -9
  72. package/src/GbzBaseSyntenyAdapter/GbzBaseSyntenyAdapter.test.ts +12 -10
  73. package/src/GbzBaseSyntenyAdapter/GbzBaseSyntenyAdapter.ts +31 -39
  74. package/src/GbzBaseSyntenyAdapter/configSchema.ts +5 -29
  75. package/src/GetGraphHaplotypes.ts +6 -15
  76. package/src/GetGraphReads.ts +7 -14
  77. package/src/GetSubgraph.ts +11 -20
  78. package/src/GraphAddTrackWorkflow/AddTrackWorkflow.test.tsx +73 -0
  79. package/src/GraphAddTrackWorkflow/AddTrackWorkflow.tsx +1 -0
  80. package/src/GraphAddTrackWorkflow/buildTrackConfig.test.ts +3 -2
  81. package/src/GraphAddTrackWorkflow/buildTrackConfig.ts +2 -11
  82. package/src/GraphAddTrackWorkflow/graphManifest.ts +15 -3
  83. package/src/GraphGenomeView/components/BubbleHalos.tsx +5 -24
  84. package/src/GraphGenomeView/components/ElTree.tsx +6 -1
  85. package/src/GraphGenomeView/components/FacetPanels.test.tsx +65 -0
  86. package/src/GraphGenomeView/components/FacetPanels.tsx +17 -12
  87. package/src/GraphGenomeView/components/GenePins.tsx +5 -22
  88. package/src/GraphGenomeView/components/GraphCanvas.tsx +40 -234
  89. package/src/GraphGenomeView/components/GraphSettingsDialog.tsx +102 -108
  90. package/src/GraphGenomeView/components/GraphToolbar.tsx +5 -6
  91. package/src/GraphGenomeView/components/HoverLayer.tsx +3 -7
  92. package/src/GraphGenomeView/components/HoverTooltip.test.tsx +39 -0
  93. package/src/GraphGenomeView/components/HoverTooltip.tsx +122 -0
  94. package/src/GraphGenomeView/components/LabelChip.tsx +3 -5
  95. package/src/GraphGenomeView/components/LabelLayer.tsx +4 -17
  96. package/src/GraphGenomeView/components/LabelledSelect.tsx +1 -1
  97. package/src/GraphGenomeView/components/Legend.tsx +14 -23
  98. package/src/GraphGenomeView/components/PaneContextMenu.test.tsx +48 -0
  99. package/src/GraphGenomeView/components/PaneContextMenu.tsx +144 -0
  100. package/src/GraphGenomeView/components/PaneLayer.tsx +91 -0
  101. package/src/GraphGenomeView/components/PaneSvg.tsx +32 -50
  102. package/src/GraphGenomeView/components/ReferenceStripOverlay.test.tsx +48 -0
  103. package/src/GraphGenomeView/components/ReferenceStripOverlay.tsx +13 -42
  104. package/src/GraphGenomeView/components/SettingsMenu.test.tsx +29 -0
  105. package/src/GraphGenomeView/components/SettingsMenu.tsx +56 -65
  106. package/src/GraphGenomeView/components/TubeMapOverlay.tsx +15 -46
  107. package/src/GraphGenomeView/components/WalkRowsOverlay.tsx +58 -132
  108. package/src/GraphGenomeView/components/WalkStrip.tsx +17 -20
  109. package/src/GraphGenomeView/components/WalkStripLocator.tsx +8 -15
  110. package/src/GraphGenomeView/components/usePaneGestures.test.tsx +35 -0
  111. package/src/GraphGenomeView/components/usePaneGestures.ts +88 -91
  112. package/src/GraphGenomeView/genes/geneFeatures.ts +27 -45
  113. package/src/GraphGenomeView/graphLayers.ts +4 -4
  114. package/src/GraphGenomeView/host.ts +1 -1
  115. package/src/GraphGenomeView/legendSections.test.ts +23 -1
  116. package/src/GraphGenomeView/legendSections.ts +68 -74
  117. package/src/GraphGenomeView/model.test.ts +373 -39
  118. package/src/GraphGenomeView/model.ts +67 -11
  119. package/src/GraphGenomeView/pane/fitViews.ts +57 -514
  120. package/src/GraphGenomeView/pane/graphViews.ts +219 -160
  121. package/src/GraphGenomeView/pane/hostViews.ts +2 -10
  122. package/src/GraphGenomeView/pane/keepInView.ts +5 -4
  123. package/src/GraphGenomeView/pane/launchActions.ts +117 -139
  124. package/src/GraphGenomeView/pane/launchViews.ts +8 -27
  125. package/src/GraphGenomeView/pane/loadActions.ts +208 -187
  126. package/src/GraphGenomeView/pane/morph.ts +3 -9
  127. package/src/GraphGenomeView/pane/paneBase.ts +22 -11
  128. package/src/GraphGenomeView/pane/renderingActions.ts +65 -11
  129. package/src/GraphGenomeView/pane/settingActions.ts +17 -42
  130. package/src/GraphGenomeView/pane/tubeMapViews.ts +445 -0
  131. package/src/GraphGenomeView/pane/walkRowViews.ts +29 -37
  132. package/src/GraphGenomeView/renderPipeline.test.ts +1 -1
  133. package/src/GraphGenomeView/repeats/repeatFeatures.test.ts +23 -0
  134. package/src/GraphGenomeView/repeats/repeatFeatures.ts +16 -23
  135. package/src/GraphGenomeView/repeats/walkCalls.test.ts +18 -0
  136. package/src/GraphGenomeView/repeats/walkCalls.ts +46 -38
  137. package/src/GraphGenomeView/subgraphLoad.test.ts +67 -3
  138. package/src/GraphGenomeView/trackFeatures.ts +24 -0
  139. package/src/GraphGenomeView/tubeMapPanels.ts +28 -36
  140. package/src/GraphGenomeView/viewModel.ts +8 -56
  141. package/src/GraphGenomeView/walkRowGroups.ts +104 -30
  142. package/src/GraphGenomeView/walkRowSpans.test.ts +6 -0
  143. package/src/GraphGenomeView/walkRowSpans.ts +22 -31
  144. package/src/GraphGenomeView/walkRowsCut.ts +8 -17
  145. package/src/LinearGraphDisplay/LinearGraphDisplay.test.ts +173 -26
  146. package/src/LinearGraphDisplay/components/SubgraphContextSelect.test.tsx +1 -1
  147. package/src/LinearGraphDisplay/components/SubgraphContextSelect.tsx +3 -3
  148. package/src/LinearGraphDisplay/components/SubgraphHaplotypesField.test.tsx +3 -3
  149. package/src/LinearGraphDisplay/components/SubgraphHaplotypesField.tsx +7 -10
  150. package/src/LinearGraphDisplay/configSchema.ts +0 -3
  151. package/src/LinearGraphDisplay/denseWindow.ts +8 -11
  152. package/src/LinearGraphDisplay/model.ts +89 -82
  153. package/src/MinigraphBubbleAdapter/MinigraphBubbleAdapter.test.ts +21 -0
  154. package/src/MinigraphBubbleAdapter/MinigraphBubbleAdapter.ts +6 -14
  155. package/src/MinigraphBubbleAdapter/configSchema.ts +3 -9
  156. package/src/MinigraphBubbleAdapter/index.ts +1 -2
  157. package/src/RgfaTabixAdapter/RgfaTabixAdapter.test.ts +45 -1
  158. package/src/RgfaTabixAdapter/RgfaTabixAdapter.ts +111 -276
  159. package/src/RgfaTabixAdapter/configSchema.ts +15 -49
  160. package/src/RgfaTabixAdapter/index.ts +1 -2
  161. package/src/RgfaTabixAdapter/rgfaBed.ts +25 -15
  162. package/src/RgfaTabixAdapter/rgfaCut.ts +139 -0
  163. package/src/RgfaTabixAdapter/test_data/walks2_twopart.GRCh38.walks.bed.gz +0 -0
  164. package/src/RgfaTabixAdapter/test_data/walks2_twopart.GRCh38.walks.bed.gz.tbi +0 -0
  165. package/src/RgfaTabixAdapter/walkFiles.test.ts +33 -0
  166. package/src/RgfaTabixAdapter/walkReader.ts +103 -27
  167. package/src/RgfaTabixAdapter/walkRowRuns.test.ts +53 -0
  168. package/src/RgfaTabixAdapter/walkRowRuns.ts +42 -24
  169. package/src/WalkTabixSyntenyAdapter/WalkTabixSyntenyAdapter.test.ts +37 -6
  170. package/src/WalkTabixSyntenyAdapter/WalkTabixSyntenyAdapter.ts +23 -45
  171. package/src/WalkTabixSyntenyAdapter/configSchema.ts +11 -24
  172. package/src/WalkTabixSyntenyAdapter/index.ts +1 -2
  173. package/src/WalkTabixSyntenyAdapter/walkLanes.ts +35 -43
  174. package/src/adapterImplementing.ts +27 -0
  175. package/src/graphTrackDefaults/index.ts +14 -20
  176. package/src/hoverSync/lgvHover.ts +2 -4
  177. package/src/launchFromGraph/contributors.ts +1 -5
  178. package/src/launchFromGraph/graphMenuItems.ts +3 -4
  179. package/src/launchFromGraph/launchFromGraph.test.ts +0 -1
  180. package/src/launchFromGraph/launchFromGraph.ts +8 -13
  181. package/src/panSNTabix.test.ts +1 -26
  182. package/src/panSNTabix.ts +54 -51
  183. package/src/synteny/lanePairs.ts +8 -0
  184. package/src/synteny/matchFeature.ts +52 -0
  185. package/src/tabixRange.ts +13 -10
  186. package/src/version.ts +1 -1
  187. package/dist/chunks/AddTrackWorkflow-Q6RY23LF.js +0 -2
  188. package/dist/chunks/GbzBaseSyntenyAdapter-TIXR4Y3J.js +0 -2
  189. package/dist/chunks/GbzBaseSyntenyAdapter-TIXR4Y3J.js.map +0 -7
  190. package/dist/chunks/GraphTrackSettingsDialog-TAM6PMXD.js +0 -6
  191. package/dist/chunks/GraphTrackSettingsDialog-TAM6PMXD.js.map +0 -7
  192. package/dist/chunks/MinigraphBubbleAdapter-AGI2UYQR.js +0 -2
  193. package/dist/chunks/MinigraphBubbleAdapter-AGI2UYQR.js.map +0 -7
  194. package/dist/chunks/RgfaTabixAdapter-2OL5X3HF.js +0 -3
  195. package/dist/chunks/RgfaTabixAdapter-2OL5X3HF.js.map +0 -7
  196. package/dist/chunks/WalkTabixSyntenyAdapter-UKFHCFOF.js +0 -2
  197. package/dist/chunks/WalkTabixSyntenyAdapter-UKFHCFOF.js.map +0 -7
  198. package/dist/chunks/chunk-5SFGHDQA.js +0 -2
  199. package/dist/chunks/chunk-5SFGHDQA.js.map +0 -7
  200. package/dist/chunks/chunk-6OPB7FOJ.js +0 -2
  201. package/dist/chunks/chunk-AMFIBQVR.js +0 -2
  202. package/dist/chunks/chunk-AMFIBQVR.js.map +0 -7
  203. package/dist/chunks/chunk-BJMRBVG3.js +0 -2
  204. package/dist/chunks/chunk-BJMRBVG3.js.map +0 -7
  205. package/dist/chunks/chunk-E3WYW7Z6.js +0 -2
  206. package/dist/chunks/chunk-EHCF6AXH.js +0 -2
  207. package/dist/chunks/chunk-EHCF6AXH.js.map +0 -7
  208. package/dist/chunks/chunk-GOFS7BXK.js +0 -3
  209. package/dist/chunks/chunk-GOFS7BXK.js.map +0 -7
  210. package/dist/chunks/chunk-IJQTSJGT.js +0 -4
  211. package/dist/chunks/chunk-IJQTSJGT.js.map +0 -7
  212. package/dist/chunks/chunk-J6NZIAZF.js +0 -2
  213. package/dist/chunks/chunk-J6NZIAZF.js.map +0 -7
  214. package/dist/chunks/chunk-LUTMKRXY.js +0 -2
  215. package/dist/chunks/chunk-LUTMKRXY.js.map +0 -7
  216. package/dist/chunks/chunk-MHPJB22Z.js +0 -2
  217. package/dist/chunks/chunk-MHPJB22Z.js.map +0 -7
  218. package/dist/chunks/chunk-TXI43PEN.js +0 -2
  219. package/dist/chunks/chunk-TXI43PEN.js.map +0 -7
  220. package/dist/chunks/chunk-WRH2EJKX.js +0 -2
  221. package/dist/chunks/chunk-WRH2EJKX.js.map +0 -7
  222. package/dist/chunks/chunk-WX26KTZM.js +0 -2
  223. package/dist/chunks/chunk-WX26KTZM.js.map +0 -7
  224. package/dist/chunks/renderSvg-ST2GBBOC.js +0 -2
  225. package/dist/chunks/renderSvg-ST2GBBOC.js.map +0 -7
  226. package/src/GraphGenomeView/components/WalkRowContextMenu.tsx +0 -105
  227. /package/dist/chunks/{ChooseSamplesDialog-BNVYBGJQ.js.map → ChooseSamplesDialog-JRN4YLBY.js.map} +0 -0
  228. /package/dist/chunks/{ChooseWalksDialog-EN3C6AQA.js.map → ChooseWalksDialog-UXLFZTZJ.js.map} +0 -0
  229. /package/dist/chunks/{GraphGenomeView-Z2WZKEEO.js.map → GraphGenomeView-NJ5XCREB.js.map} +0 -0
  230. /package/dist/chunks/{HighlightColorDialog-EYBKFSJU.js.map → HighlightColorDialog-UK5VDDV6.js.map} +0 -0
  231. /package/dist/chunks/{LinearGraphDisplay-WIBVWRQE.js.map → LinearGraphDisplay-TXTKAACH.js.map} +0 -0
  232. /package/dist/chunks/{TrackWarningsDialog-QT4YEXGD.js.map → TrackWarningsDialog-TRYBOIHX.js.map} +0 -0
  233. /package/dist/chunks/{chunk-AHFQHYJI.js.map → chunk-IBWORBGY.js.map} +0 -0
@@ -1,2 +1,2 @@
1
- import{J as Xt,K as $t,L as ut,M as mt,U as Kt,V as st,d as Ft,e as dt,g as Ht,h as Wt,i as Bt,j as Gt}from"./chunk-MHPJB22Z.js";import{c as ft}from"./chunk-AU73K7LX.js";function p(t,r,n,e){return(e<<24|n<<16|r<<8|t)>>>0}function pt(t){return t&255}function gt(t){return t>>>8&255}function xt(t){return t>>>16&255}function yt(t){return t>>>24&255}function Yt(t){return`rgba(${pt(t)},${gt(t)},${xt(t)},${yt(t)/255})`}function ae(t,r){return`rgba(${Math.round(t[0]*255)},${Math.round(t[1]*255)},${Math.round(t[2]*255)},${r})`}function V(t,r){return p(pt(t),gt(t),xt(t),Math.round(yt(t)*r))}function ce(t,r){let n=Math.max(0,1-1/r),e=o=>Math.round(o+(255-o)*n);return p(e(pt(t)),e(gt(t)),e(xt(t)),yt(t))}var Ut=new WeakMap;function jt(t,r,n,e,o,s,a=!1){let{scaleX:i,scaleY:l}=n,c=Ut.get(t);if(c?.graph===r&&c.scaleX===i&&c.scaleY===l&&c.deletions===e&&c.routes===s&&c.stranded===a&&c.version===o)return c.curves;let u=new Map;for(let f=0;f<r.edges.length;f++){let h=e?.get(f),g=Gt(t,r.edges[f],n,h,h&&s?.[f],a);g&&u.set(f,g)}return Ut.set(t,{graph:r,scaleX:i,scaleY:l,deletions:e,routes:s,stranded:a,version:o,curves:u}),u}var xn=4;function yn(t){let r=new Map;function n(e,o){let s=r.get(e);s?s.push(o):r.set(e,[o])}for(let e of t.edges)n(e.from,e.to),n(e.to,e.from);return r}function Mn({nodeId:t,nodeById:r,neighbors:n}){let e=new Set([t]),o=[t],s=1/0,a=-1/0;for(let i=0;i<xn&&o.length>0;i++){let l=[];for(let c of o){let u=n.get(c);if(u){for(let f of u)if(!e.has(f)){e.add(f);let h=r.get(f);h&&ft(h)?(s=Math.min(s,h.stable.start+h.length),a=Math.max(a,h.stable.start)):l.push(f)}}}o=l}return s===1/0?void 0:{start:Math.min(s,a),end:Math.max(s,a)}}function bn({nodeId:t,nodeById:r,neighbors:n}){let e=r.get(t);return e===void 0?void 0:ft(e)?{start:e.stable.start,end:e.stable.start+e.length}:Mn({nodeId:t,nodeById:r,neighbors:n})}function Vt(t){let r=new Map(t.nodes.map(o=>[o.id,o])),n=yn(t),e=new Map;for(let o of t.nodes){let s=bn({nodeId:o.id,nodeById:r,neighbors:n});s&&e.set(o.id,(s.start+s.end)/2)}return e}var En=p(119,119,119,217),zt=p(136,136,136,217),_n=p(24,24,28,240),vn=2.2,en=p(160,160,160,255),tt=.18,Me=Yt(V(en,tt)),Rn=11,An=1.2,qt=4,Mt=1e-6,Cn=7,wn=3,In=3,Sn=1.5,Jt=3,Ln=.5,kn=.45,bt=12,Nn=1e-6,k=new Float64Array(64),F=new Float64Array(64),H=new Float64Array(64);function On(t,r,n,e){let o=t.length*bt+1;k.length<o&&(k=new Float64Array(o),F=new Float64Array(o),H=new Float64Array(o));let s=t[t.length-1];k[0]=s.x1,F[0]=s.y1,H[0]=0;let a=1,i=0;for(let l=t.length-1;l>=0&&i<e;l--){let c=t[l];for(let u=1;u<=bt&&i<e;u++){let f=1-(u/bt)**2,h=1-f,g=h*h*h,x=3*h*h*f,v=3*h*f*f,_=f*f*f,b=g*c.x0+x*c.cx0+v*c.cx1+_*c.x1,N=g*c.y0+x*c.cy0+v*c.cy1+_*c.y1;i+=Math.hypot(b-k[a-1],(N-F[a-1])*n)*r,k[a]=b,F[a]=N,H[a]=i,a++}}return a}function Qt(t,r){let n=1;for(;n<t-1&&H[n]<r;)n++;let e=H[n-1],o=H[n],s=o>e?Math.min(1,Math.max(0,(r-e)/(o-e))):0;return{x:k[n-1]+(k[n]-k[n-1])*s,y:F[n-1]+(F[n]-F[n-1])*s}}function Tn({curves:t,edgeHalfWidth:r,nodeHalfWidth:n,scale:e,yToX:o,color:s,fromSegments:a,toSegments:i}){let l=Cn+wn*r,c=On(t,e,o,n+Jt*l),u=H[c-1],f=u<Nn,h=Math.min(n,u),g=f?Math.min(1,Pn(a,e,o)/l):1;if(f?g<Ln:u<Jt*l)return;let x=Qt(c,h),v=Qt(c,h+l*g),_=x.x-v.x,b=(x.y-v.y)*o,N=t[t.length-1];return{x:x.x,y:x.y,angle:Math.hypot(_,b)>0?Math.atan2(b,_):Un(N,o,Fn(N,i)),length:l*g,halfWidth:(In+Sn*r)*g,color:s}}function Pn(t,r,n){let e=0;for(let o=1;o<t.length;o++)e+=Math.hypot(t[o].x-t[o-1].x,(t[o].y-t[o-1].y)*n);return e*r}function Dn(t,r,n,e,o){if(e)return Ht(t).from==="start";let s=a=>Math.hypot(a.x-n.x0,(a.y-n.y0)*o);return s(r[0])<s(r.at(-1))}function Fn(t,r){if(r.length<2)return;let n=r[0],e=r[r.length-1];return Math.hypot(t.x1-n.x,t.y1-n.y)<=Math.hypot(t.x1-e.x,t.y1-e.y)?{from:n,to:r[1]}:{from:e,to:r[r.length-2]}}function Et(t,r=1){let n=r===1?t:t.map(o=>({x:o.x,y:o.y*r})),e=[];for(let o=0;o<n.length;o++){let s=0,a=0;if(o===0){let i=n[1].x-n[0].x,l=n[1].y-n[0].y,c=Math.hypot(i,l);c>0&&(s=-l/c,a=i/c)}else if(o===n.length-1){let i=n[o].x-n[o-1].x,l=n[o].y-n[o-1].y,c=Math.hypot(i,l);c>0&&(s=-l/c,a=i/c)}else{let i=n[o].x-n[o-1].x,l=n[o].y-n[o-1].y,c=Math.hypot(i,l),u=n[o+1].x-n[o].x,f=n[o+1].y-n[o].y,h=Math.hypot(u,f);if(c>0&&h>0){let g=-l/c,x=i/c,v=-f/h,_=u/h;s=(g+v)/2,a=(x+_)/2;let b=g*s+x*a;b>.1&&(s/=b,a/=b)}else c>0?(s=-l/c,a=i/c):h>0&&(s=-f/h,a=u/h)}e.push({nx:s,ny:a})}return e}function Zt(t,r,n,e=1){return t.map((o,s)=>({x:o.x+r[s].nx*n,y:o.y+r[s].ny*n/e}))}function at(t,r,n,e){return p(Math.round(t*255),Math.round(r*255),Math.round(n*255),Math.round(e*255))}function z(t,r,n){let e=(1-Math.abs(2*n-1))*r,o=e*(1-Math.abs(t/60%2-1)),s=n-e/2,a=0,i=0,l=0;return t<60?(a=e,i=o):t<120?(a=o,i=e):t<180?(i=e,l=o):t<240?(i=o,l=e):t<300?(a=o,l=e):(a=e,l=o),[a+s,i+s,l+s]}var Hn=[[68,1,84],[59,82,139],[33,145,140],[94,201,98],[253,231,37]],Wn=[[237,137,44],[158,42,122]],Bn=[[220,50,50],[50,120,220]];function _t(t,r){let n=Math.max(0,Math.min(1,r))*(t.length-1),e=Math.min(t.length-2,Math.floor(n)),o=n-e,s=t[e],a=t[e+1];return p(Math.round(s[0]+(a[0]-s[0])*o),Math.round(s[1]+(a[1]-s[1])*o),Math.round(s[2]+(a[2]-s[2])*o),255)}function Gn(t,r){let[n,e,o]=z(Xt(t),ut,mt);return at(n,e,o,r)}var vt=300,Xn=.7,$n=.5,on=[60,65,72],Rt=p(...on,255),be=`rgb(${on.join(", ")})`;function Ee(t,r){let n=Vt(t);if(r&&r.end>r.start)return{start:r.start,span:r.end-r.start,midpoints:n};let e=1/0,o=-1/0;for(let s of n.values())e=Math.min(e,s),o=Math.max(o,s);return{start:e===1/0?0:e,span:o>e?o-e:1,midpoints:n}}function Kn(t){let r=1/0,n=-1/0,e=1/0,o=-1/0,s=0;for(let a of t.nodes)a.stable!==void 0&&a.stable.rank>s&&(s=a.stable.rank),a.depth<r&&(r=a.depth),a.depth>n&&(n=a.depth),a.length<e&&(e=a.length),a.length>o&&(o=a.length);return{minDepth:r,maxDepth:n,minLength:e,maxLength:o,maxRank:s,nodeCount:t.nodes.length}}function Yn(t,r,n,e){switch(n){case"random":return Gn(t.id,1);case"depth":return _t(Hn,e.maxDepth>e.minDepth?(t.depth-e.minDepth)/(e.maxDepth-e.minDepth):.5);case"node-length":return _t(Bn,e.maxLength>e.minLength?(t.length-e.minLength)/(e.maxLength-e.minLength):.5);case"stable-rank":return t.stable===void 0?p(160,160,160,255):t.stable.rank===0?p(52,152,219,255):_t(Wn,e.maxRank>1?(t.stable.rank-1)/(e.maxRank-1):0);case"reference-position":{let o=e.referenceRamp,s=o?.midpoints.get(t.id);if(o===void 0||s===void 0)return p(160,160,160,255);if(t.stable!==void 0&&t.stable.rank>0)return Rt;let a=Math.max(0,Math.min(1,(s-o.start)/o.span)),[i,l,c]=z(a*vt,Xn,$n);return at(i,l,c,1)}case"grey":return p(160,160,160,255);case"rainbow":{let o=e.nodeCount>1?r/e.nodeCount*360:0,[s,a,i]=z(o,.75,.5);return at(s,a,i,1)}default:return p(52,152,219,255)}}function Un(t,r=1,n){let e=[[t.cx1,t.cy1],[t.cx0,t.cy0],[t.x0,t.y0]];for(let[o,s]of e){let a=t.x1-o,i=(t.y1-s)*r;if(Math.hypot(a,i)>0)return Math.atan2(i,a)}return n?Math.atan2((n.to.y-n.from.y)*r,n.to.x-n.from.x):0}function jn(t,r){let n=!1;for(let e=0;e<t.length-1&&!n;e++){let o=t[e],s=t[e+1];n=Math.max(o.x,s.x)>=r.minX&&Math.min(o.x,s.x)<=r.maxX&&Math.max(o.y,s.y)>=r.minY&&Math.min(o.y,s.y)<=r.maxY}return n}function Vn(t,r){for(let n of t){let e=Math.min(n.x0,n.cx0,n.cx1,n.x1),o=Math.max(n.x0,n.cx0,n.cx1,n.x1),s=Math.min(n.y0,n.cy0,n.cy1,n.y1),a=Math.max(n.y0,n.cy0,n.cy1,n.y1);if(o>=r.minX&&e<=r.maxX&&a>=r.minY&&s<=r.maxY)return!0}return!1}var tn=new WeakMap;function zn(t){let r=tn.get(t);if(!r){let n=[],e=new Map,o=t.paths??[];for(let s=0;s<o.length;s++){let[a,i,l]=z($t(s,o.length),ut,mt);n.push(at(a,i,l,.85)),e.has(o[s].name)||e.set(o[s].name,s)}r={pathColorByIndex:n,pathIndexByName:e},tn.set(t,r)}return r}var nn=new WeakMap,qn=new Map;function Jn(t){let r=nn.get(t);if(!r){r=new Map;for(let[n,e]of(t.paths??[]).entries())for(let o of new Set(e.nodeIds)){let s=r.get(o);s?s.push(n):r.set(o,[n])}nn.set(t,r)}return r}function _e(t){let{nodePositions:r,graph:n,nodeById:e,colorScheme:o,contigThickness:s,connectorThickness:a,drawPaths:i,nodeWidth:l="uniform",highlight:c,axis:u,linearLayout:f,viewportBounds:h,referenceRamp:g,deletions:x,deletionRoutes:v,stranded:_,hiddenEdges:b,version:N=0}=t,ct=l==="depth"?Kt(n):0,W=u.scaleX,C=Wt(u),hn=jt(r,n,u,x,N,v,_),B=[],St=new Map,nt=[],Lt=new Map,G=[],kt=new Map,fn={...Kn(n),referenceRamp:g},Nt=new Map;if(o==="rainbow")for(let d=0;d<n.nodes.length;d++)Nt.set(n.nodes[d].id,d);let it=n.paths?.length??0,{pathColorByIndex:Ot,pathIndexByName:dn}=zn(n),un=d=>Ot[dn.get(d)??-1]??zt,mn=i&&it>1?Jn(n):qn,pn=W>(f?1:kn);for(let d=0;d<n.edges.length;d++){let m=n.edges[d],R=r[m.from],w=r[m.to],y=hn.get(d);if(!R?.length||!w?.length||!y||b?.has(d))continue;let X=m.pathIds?.length??0,q=x?.get(d)!==void 0,$=c?.edgeIndexes.has(d)??!1,K=a/2*(q?vn:1),Y=i&&X>0,O=q?_n:En,I=!c||$?O:V(O,tt),J=e.get(m.to),U=(J?st(J,s,l,ct):s)/2,T=E=>!h||Vn(E,h),S=(E,A,M)=>{if(q)for(let D of Ft(E,Rn/W))G.push({curves:D,thickness:A,color:M});else G.push({curves:E,thickness:A,color:M})},P=E=>{let A=pn?Tn({curves:E,edgeHalfWidth:a/2,nodeHalfWidth:U,scale:W,yToX:C,color:I,fromSegments:R,toSegments:w}):void 0;A&&nt.push(A)},L=G.length,Q=nt.length,j=c?.walks.length&&$&&!Y?c.walks:void 0;if(j){let E=e.get(m.from),A=E?st(E,s,l,ct):s,M=Math.max(A/j.length,qt),D=Et(R,C),{nx:ot,ny:Z}=(Dn(m,R,y[0],_,C)?D[0]:D.at(-1))??{nx:0,ny:0},rt=1/Math.max(W,Mt);j.forEach((lt,gn)=>{if(!lt.edgeIndexes.has(d))return;let ht=(gn-(j.length-1)/2)*M*rt,Dt=ht===0?y:dt(y,ot*ht,Z*ht/C);T(Dt)&&S(Dt,M/2,lt.colors.get(m.from)??lt.colors.get(m.to)??O)}),G.length>L&&P(y)}else if(!Y)T(y)&&(S(y,K,I),P(y));else{let E=Bt(R,w,X,u),A=Math.floor((X-1)/2);for(let M=0;M<X;M++){let{x:D,y:ot}=E[M],Z=D===0&&ot===0?y:dt(y,D,ot);if(!T(Z))continue;let rt=un(m.pathIds[M]);S(Z,K,c&&(c.walks.length?!c.names.has(m.pathIds[M]):!$)?V(rt,tt):rt),M===A&&P(Z)}}let Tt=G.length-L;Tt>0&&kt.set(d,{start:L,count:Tt});let Pt=nt.length-Q;Pt>0&&Lt.set(d,{start:Q,count:Pt})}for(let[d,m]of Object.entries(r)){let R=e.get(d);if(!R||h&&!jn(m,h))continue;let w=c!==void 0&&!c.nodeIds.has(d),y=w?en:Yn(R,Nt.get(d)??0,o,fn),X=w?V(y,tt):y,et=st(R,s,l,ct),q=et/2,$=B.length,K=mn.get(d),Y=et/it,O=m.length>=2,I=c?.walks.length&&!w&&!K?.length?c.walks:void 0;if(O&&I){let U=Math.max(et/I.length,qt),T=Et(m,C),S=1/Math.max(W,Mt);I.forEach((P,L)=>{let Q=P.colors.get(d);if(Q===void 0)return;let j=(L-(I.length-1)/2)*U*S;B.push({points:I.length===1?m:Zt(m,T,j,C),thickness:U/2,color:Q})})}else if(O&&K?.length&&Y>=An){let U=Et(m,C),T=1/Math.max(W,Mt);for(let S of K){let P=(S-(it-1)/2)*Y*T,L=Ot[S]??zt;B.push({points:Zt(m,U,P,C),thickness:Y/2,color:w?V(L,tt):L})}}else O&&B.push({points:m,thickness:q,color:X});let J=B.length-$;J>0&&St.set(d,{start:$,count:J})}return{nodeStrokes:B,nodeStrokeRuns:St,arrows:nt,arrowRuns:Lt,edgeCurves:G,edgeCurveRuns:kt}}var an=[{value:"progress",label:"Progress along the walk"},{value:"walk",label:"One colour for the walk"},{value:"reference",label:"Reference position"}],wt=[{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:"rainbow",label:"Rainbow"}],rn=["blue","red","purple","green"],Qn=t=>an.some(r=>r.value===t),Zn=t=>wt.some(r=>r.value===t);function te(t,r,n,e=!0){let{field:o,scheme:s}=t.color??{},a=Qn(o)?o:e?"progress":"walk",i=r?"grey":rn[n%rn.length],l=Zn(s)?s==="rainbow"&&a!=="reference"?i:s:i;return{field:a,scheme:l}}var cn=.5,ne=t=>t<=.04045?t/12.92:((t+.055)/1.055)**2.4,ee=t=>t<=.0031308?t*12.92:1.055*t**(1/2.4)-.055;function sn(t){let[r,n,e]=[1,3,5].map(i=>ne(Number.parseInt(t.slice(i,i+2),16)/255)),o=Math.cbrt(.4122214708*r+.5363325363*n+.0514459929*e),s=Math.cbrt(.2119034982*r+.6806995451*n+.1073969566*e),a=Math.cbrt(.0883024619*r+.2817188376*n+.6299787005*e);return[.2104542553*o+.793617785*s-.0040720468*a,1.9779984951*o-2.428592205*s+.4505937099*a,.0259040371*o+.7827717662*s-.808675766*a]}function oe([t,r,n]){let e=(t+.3963377774*r+.2158037573*n)**3,o=(t-.1055613458*r-.0638541728*n)**3,s=(t-.0894841775*r-1.291485548*n)**3;return[4.0767416621*e-3.3077115913*o+.2309699292*s,-1.2684380046*e+2.6097574011*o-.3413193965*s,-.0041960863*e-.7034186147*o+1.707614701*s].map(a=>ee(Math.max(0,Math.min(1,a)))*255)}function It(t,r){let n=Math.max(0,Math.min(1,r)),e=wt.find(a=>a.value===t);if(!e||!("ends"in e))return z(n*vt,.7,.5).map(a=>a*255);let o=sn(e.ends[0]),s=sn(e.ends[1]);return oe(o.map((a,i)=>a+(s[i]-a)*n))}function At(t,r){let[n,e,o]=It(t,r).map(Math.round);return`rgb(${n}, ${e}, ${o})`}function Ct(t,r){let[n,e,o]=It(t,r).map(Math.round);return p(n,e,o,255)}function re({field:t,scheme:r},n){return t==="walk"?Ct(r,cn):n===void 0?ln:Ct(r,n)}var ln=Rt;function se({field:t,scheme:r}){return t==="walk"?[{offset:0,color:At(r,cn)}]:Array.from({length:7},(n,e)=>({offset:e/6,color:At(r,e/6)}))}export{Yt as a,ae as b,V as c,ce as d,jt as e,yn as f,bn as g,Me as h,vt as i,be as j,Ee as k,Kn as l,Yn as m,_e as n,an as o,wt as p,te as q,re as r,ln as s,se as t};
2
- //# sourceMappingURL=chunk-DZ4OUKQV.js.map
1
+ import{A as Gt,J as Xt,K as $t,L as ut,M as mt,U as Kt,V as st,r as Ft,s as dt,u as Ht,v as Wt,w as Bt}from"./chunk-WAMBI7OX.js";import{c as ft}from"./chunk-TUKJRVBS.js";function p(t,r,n,e){return(e<<24|n<<16|r<<8|t)>>>0}function pt(t){return t&255}function gt(t){return t>>>8&255}function xt(t){return t>>>16&255}function yt(t){return t>>>24&255}function Yt(t){return`rgba(${pt(t)},${gt(t)},${xt(t)},${yt(t)/255})`}function ae(t,r){return`rgba(${Math.round(t[0]*255)},${Math.round(t[1]*255)},${Math.round(t[2]*255)},${r})`}function V(t,r){return p(pt(t),gt(t),xt(t),Math.round(yt(t)*r))}function ce(t,r){let n=Math.max(0,1-1/r),e=o=>Math.round(o+(255-o)*n);return p(e(pt(t)),e(gt(t)),e(xt(t)),yt(t))}var Ut=new WeakMap;function jt(t,r,n,e,o,s,a=!1){let{scaleX:i,scaleY:l}=n,c=Ut.get(t);if(c?.graph===r&&c.scaleX===i&&c.scaleY===l&&c.deletions===e&&c.routes===s&&c.stranded===a&&c.version===o)return c.curves;let u=new Map;for(let f=0;f<r.edges.length;f++){let h=e?.get(f),g=Gt(t,r.edges[f],n,h,h&&s?.[f],a);g&&u.set(f,g)}return Ut.set(t,{graph:r,scaleX:i,scaleY:l,deletions:e,routes:s,stranded:a,version:o,curves:u}),u}var xn=4;function yn(t){let r=new Map;function n(e,o){let s=r.get(e);s?s.push(o):r.set(e,[o])}for(let e of t.edges)n(e.from,e.to),n(e.to,e.from);return r}function Mn({nodeId:t,nodeById:r,neighbors:n}){let e=new Set([t]),o=[t],s=1/0,a=-1/0;for(let i=0;i<xn&&o.length>0;i++){let l=[];for(let c of o){let u=n.get(c);if(u){for(let f of u)if(!e.has(f)){e.add(f);let h=r.get(f);h&&ft(h)?(s=Math.min(s,h.stable.start+h.length),a=Math.max(a,h.stable.start)):l.push(f)}}}o=l}return s===1/0?void 0:{start:Math.min(s,a),end:Math.max(s,a)}}function bn({nodeId:t,nodeById:r,neighbors:n}){let e=r.get(t);return e===void 0?void 0:ft(e)?{start:e.stable.start,end:e.stable.start+e.length}:Mn({nodeId:t,nodeById:r,neighbors:n})}function Vt(t){let r=new Map(t.nodes.map(o=>[o.id,o])),n=yn(t),e=new Map;for(let o of t.nodes){let s=bn({nodeId:o.id,nodeById:r,neighbors:n});s&&e.set(o.id,(s.start+s.end)/2)}return e}var En=p(119,119,119,217),zt=p(136,136,136,217),_n=p(24,24,28,240),vn=2.2,en=p(160,160,160,255),tt=.18,Me=Yt(V(en,tt)),Rn=11,An=1.2,qt=4,Mt=1e-6,Cn=7,wn=3,In=3,Sn=1.5,Jt=3,Ln=.5,kn=.45,bt=12,Nn=1e-6,k=new Float64Array(64),F=new Float64Array(64),H=new Float64Array(64);function On(t,r,n,e){let o=t.length*bt+1;k.length<o&&(k=new Float64Array(o),F=new Float64Array(o),H=new Float64Array(o));let s=t[t.length-1];k[0]=s.x1,F[0]=s.y1,H[0]=0;let a=1,i=0;for(let l=t.length-1;l>=0&&i<e;l--){let c=t[l];for(let u=1;u<=bt&&i<e;u++){let f=1-(u/bt)**2,h=1-f,g=h*h*h,x=3*h*h*f,v=3*h*f*f,_=f*f*f,b=g*c.x0+x*c.cx0+v*c.cx1+_*c.x1,N=g*c.y0+x*c.cy0+v*c.cy1+_*c.y1;i+=Math.hypot(b-k[a-1],(N-F[a-1])*n)*r,k[a]=b,F[a]=N,H[a]=i,a++}}return a}function Qt(t,r){let n=1;for(;n<t-1&&H[n]<r;)n++;let e=H[n-1],o=H[n],s=o>e?Math.min(1,Math.max(0,(r-e)/(o-e))):0;return{x:k[n-1]+(k[n]-k[n-1])*s,y:F[n-1]+(F[n]-F[n-1])*s}}function Tn({curves:t,edgeHalfWidth:r,nodeHalfWidth:n,scale:e,yToX:o,color:s,fromSegments:a,toSegments:i}){let l=Cn+wn*r,c=On(t,e,o,n+Jt*l),u=H[c-1],f=u<Nn,h=Math.min(n,u),g=f?Math.min(1,Pn(a,e,o)/l):1;if(f?g<Ln:u<Jt*l)return;let x=Qt(c,h),v=Qt(c,h+l*g),_=x.x-v.x,b=(x.y-v.y)*o,N=t[t.length-1];return{x:x.x,y:x.y,angle:Math.hypot(_,b)>0?Math.atan2(b,_):Un(N,o,Fn(N,i)),length:l*g,halfWidth:(In+Sn*r)*g,color:s}}function Pn(t,r,n){let e=0;for(let o=1;o<t.length;o++)e+=Math.hypot(t[o].x-t[o-1].x,(t[o].y-t[o-1].y)*n);return e*r}function Dn(t,r,n,e,o){if(e)return Ht(t).from==="start";let s=a=>Math.hypot(a.x-n.x0,(a.y-n.y0)*o);return s(r[0])<s(r.at(-1))}function Fn(t,r){if(r.length<2)return;let n=r[0],e=r[r.length-1];return Math.hypot(t.x1-n.x,t.y1-n.y)<=Math.hypot(t.x1-e.x,t.y1-e.y)?{from:n,to:r[1]}:{from:e,to:r[r.length-2]}}function Et(t,r=1){let n=r===1?t:t.map(o=>({x:o.x,y:o.y*r})),e=[];for(let o=0;o<n.length;o++){let s=0,a=0;if(o===0){let i=n[1].x-n[0].x,l=n[1].y-n[0].y,c=Math.hypot(i,l);c>0&&(s=-l/c,a=i/c)}else if(o===n.length-1){let i=n[o].x-n[o-1].x,l=n[o].y-n[o-1].y,c=Math.hypot(i,l);c>0&&(s=-l/c,a=i/c)}else{let i=n[o].x-n[o-1].x,l=n[o].y-n[o-1].y,c=Math.hypot(i,l),u=n[o+1].x-n[o].x,f=n[o+1].y-n[o].y,h=Math.hypot(u,f);if(c>0&&h>0){let g=-l/c,x=i/c,v=-f/h,_=u/h;s=(g+v)/2,a=(x+_)/2;let b=g*s+x*a;b>.1&&(s/=b,a/=b)}else c>0?(s=-l/c,a=i/c):h>0&&(s=-f/h,a=u/h)}e.push({nx:s,ny:a})}return e}function Zt(t,r,n,e=1){return t.map((o,s)=>({x:o.x+r[s].nx*n,y:o.y+r[s].ny*n/e}))}function at(t,r,n,e){return p(Math.round(t*255),Math.round(r*255),Math.round(n*255),Math.round(e*255))}function z(t,r,n){let e=(1-Math.abs(2*n-1))*r,o=e*(1-Math.abs(t/60%2-1)),s=n-e/2,a=0,i=0,l=0;return t<60?(a=e,i=o):t<120?(a=o,i=e):t<180?(i=e,l=o):t<240?(i=o,l=e):t<300?(a=o,l=e):(a=e,l=o),[a+s,i+s,l+s]}var Hn=[[68,1,84],[59,82,139],[33,145,140],[94,201,98],[253,231,37]],Wn=[[237,137,44],[158,42,122]],Bn=[[220,50,50],[50,120,220]];function _t(t,r){let n=Math.max(0,Math.min(1,r))*(t.length-1),e=Math.min(t.length-2,Math.floor(n)),o=n-e,s=t[e],a=t[e+1];return p(Math.round(s[0]+(a[0]-s[0])*o),Math.round(s[1]+(a[1]-s[1])*o),Math.round(s[2]+(a[2]-s[2])*o),255)}function Gn(t,r){let[n,e,o]=z(Xt(t),ut,mt);return at(n,e,o,r)}var vt=300,Xn=.7,$n=.5,on=[60,65,72],Rt=p(...on,255),be=`rgb(${on.join(", ")})`;function Ee(t,r){let n=Vt(t);if(r&&r.end>r.start)return{start:r.start,span:r.end-r.start,midpoints:n};let e=1/0,o=-1/0;for(let s of n.values())e=Math.min(e,s),o=Math.max(o,s);return{start:e===1/0?0:e,span:o>e?o-e:1,midpoints:n}}function Kn(t){let r=1/0,n=-1/0,e=1/0,o=-1/0,s=0;for(let a of t.nodes)a.stable!==void 0&&a.stable.rank>s&&(s=a.stable.rank),a.depth<r&&(r=a.depth),a.depth>n&&(n=a.depth),a.length<e&&(e=a.length),a.length>o&&(o=a.length);return{minDepth:r,maxDepth:n,minLength:e,maxLength:o,maxRank:s,nodeCount:t.nodes.length}}function Yn(t,r,n,e){switch(n){case"random":return Gn(t.id,1);case"depth":return _t(Hn,e.maxDepth>e.minDepth?(t.depth-e.minDepth)/(e.maxDepth-e.minDepth):.5);case"node-length":return _t(Bn,e.maxLength>e.minLength?(t.length-e.minLength)/(e.maxLength-e.minLength):.5);case"stable-rank":return t.stable===void 0?p(160,160,160,255):t.stable.rank===0?p(52,152,219,255):_t(Wn,e.maxRank>1?(t.stable.rank-1)/(e.maxRank-1):0);case"reference-position":{let o=e.referenceRamp,s=o?.midpoints.get(t.id);if(o===void 0||s===void 0)return p(160,160,160,255);if(t.stable!==void 0&&t.stable.rank>0)return Rt;let a=Math.max(0,Math.min(1,(s-o.start)/o.span)),[i,l,c]=z(a*vt,Xn,$n);return at(i,l,c,1)}case"grey":return p(160,160,160,255);case"rainbow":{let o=e.nodeCount>1?r/e.nodeCount*360:0,[s,a,i]=z(o,.75,.5);return at(s,a,i,1)}default:return p(52,152,219,255)}}function Un(t,r=1,n){let e=[[t.cx1,t.cy1],[t.cx0,t.cy0],[t.x0,t.y0]];for(let[o,s]of e){let a=t.x1-o,i=(t.y1-s)*r;if(Math.hypot(a,i)>0)return Math.atan2(i,a)}return n?Math.atan2((n.to.y-n.from.y)*r,n.to.x-n.from.x):0}function jn(t,r){let n=!1;for(let e=0;e<t.length-1&&!n;e++){let o=t[e],s=t[e+1];n=Math.max(o.x,s.x)>=r.minX&&Math.min(o.x,s.x)<=r.maxX&&Math.max(o.y,s.y)>=r.minY&&Math.min(o.y,s.y)<=r.maxY}return n}function Vn(t,r){for(let n of t){let e=Math.min(n.x0,n.cx0,n.cx1,n.x1),o=Math.max(n.x0,n.cx0,n.cx1,n.x1),s=Math.min(n.y0,n.cy0,n.cy1,n.y1),a=Math.max(n.y0,n.cy0,n.cy1,n.y1);if(o>=r.minX&&e<=r.maxX&&a>=r.minY&&s<=r.maxY)return!0}return!1}var tn=new WeakMap;function zn(t){let r=tn.get(t);if(!r){let n=[],e=new Map,o=t.paths??[];for(let s=0;s<o.length;s++){let[a,i,l]=z($t(s,o.length),ut,mt);n.push(at(a,i,l,.85)),e.has(o[s].name)||e.set(o[s].name,s)}r={pathColorByIndex:n,pathIndexByName:e},tn.set(t,r)}return r}var nn=new WeakMap,qn=new Map;function Jn(t){let r=nn.get(t);if(!r){r=new Map;for(let[n,e]of(t.paths??[]).entries())for(let o of new Set(e.nodeIds)){let s=r.get(o);s?s.push(n):r.set(o,[n])}nn.set(t,r)}return r}function _e(t){let{nodePositions:r,graph:n,nodeById:e,colorScheme:o,contigThickness:s,connectorThickness:a,drawPaths:i,nodeWidth:l="uniform",highlight:c,axis:u,linearLayout:f,viewportBounds:h,referenceRamp:g,deletions:x,deletionRoutes:v,stranded:_,hiddenEdges:b,version:N=0}=t,ct=l==="depth"?Kt(n):0,W=u.scaleX,C=Wt(u),hn=jt(r,n,u,x,N,v,_),B=[],St=new Map,nt=[],Lt=new Map,G=[],kt=new Map,fn={...Kn(n),referenceRamp:g},Nt=new Map;if(o==="rainbow")for(let d=0;d<n.nodes.length;d++)Nt.set(n.nodes[d].id,d);let it=n.paths?.length??0,{pathColorByIndex:Ot,pathIndexByName:dn}=zn(n),un=d=>Ot[dn.get(d)??-1]??zt,mn=i&&it>1?Jn(n):qn,pn=W>(f?1:kn);for(let d=0;d<n.edges.length;d++){let m=n.edges[d],R=r[m.from],w=r[m.to],y=hn.get(d);if(!R?.length||!w?.length||!y||b?.has(d))continue;let X=m.pathIds?.length??0,q=x?.get(d)!==void 0,$=c?.edgeIndexes.has(d)??!1,K=a/2*(q?vn:1),Y=i&&X>0,O=q?_n:En,I=!c||$?O:V(O,tt),J=e.get(m.to),U=(J?st(J,s,l,ct):s)/2,T=E=>!h||Vn(E,h),S=(E,A,M)=>{if(q)for(let D of Ft(E,Rn/W))G.push({curves:D,thickness:A,color:M});else G.push({curves:E,thickness:A,color:M})},P=E=>{let A=pn?Tn({curves:E,edgeHalfWidth:a/2,nodeHalfWidth:U,scale:W,yToX:C,color:I,fromSegments:R,toSegments:w}):void 0;A&&nt.push(A)},L=G.length,Q=nt.length,j=c?.walks.length&&$&&!Y?c.walks:void 0;if(j){let E=e.get(m.from),A=E?st(E,s,l,ct):s,M=Math.max(A/j.length,qt),D=Et(R,C),{nx:ot,ny:Z}=(Dn(m,R,y[0],_,C)?D[0]:D.at(-1))??{nx:0,ny:0},rt=1/Math.max(W,Mt);j.forEach((lt,gn)=>{if(!lt.edgeIndexes.has(d))return;let ht=(gn-(j.length-1)/2)*M*rt,Dt=ht===0?y:dt(y,ot*ht,Z*ht/C);T(Dt)&&S(Dt,M/2,lt.colors.get(m.from)??lt.colors.get(m.to)??O)}),G.length>L&&P(y)}else if(!Y)T(y)&&(S(y,K,I),P(y));else{let E=Bt(R,w,X,u),A=Math.floor((X-1)/2);for(let M=0;M<X;M++){let{x:D,y:ot}=E[M],Z=D===0&&ot===0?y:dt(y,D,ot);if(!T(Z))continue;let rt=un(m.pathIds[M]);S(Z,K,c&&(c.walks.length?!c.names.has(m.pathIds[M]):!$)?V(rt,tt):rt),M===A&&P(Z)}}let Tt=G.length-L;Tt>0&&kt.set(d,{start:L,count:Tt});let Pt=nt.length-Q;Pt>0&&Lt.set(d,{start:Q,count:Pt})}for(let[d,m]of Object.entries(r)){let R=e.get(d);if(!R||h&&!jn(m,h))continue;let w=c!==void 0&&!c.nodeIds.has(d),y=w?en:Yn(R,Nt.get(d)??0,o,fn),X=w?V(y,tt):y,et=st(R,s,l,ct),q=et/2,$=B.length,K=mn.get(d),Y=et/it,O=m.length>=2,I=c?.walks.length&&!w&&!K?.length?c.walks:void 0;if(O&&I){let U=Math.max(et/I.length,qt),T=Et(m,C),S=1/Math.max(W,Mt);I.forEach((P,L)=>{let Q=P.colors.get(d);if(Q===void 0)return;let j=(L-(I.length-1)/2)*U*S;B.push({points:I.length===1?m:Zt(m,T,j,C),thickness:U/2,color:Q})})}else if(O&&K?.length&&Y>=An){let U=Et(m,C),T=1/Math.max(W,Mt);for(let S of K){let P=(S-(it-1)/2)*Y*T,L=Ot[S]??zt;B.push({points:Zt(m,U,P,C),thickness:Y/2,color:w?V(L,tt):L})}}else O&&B.push({points:m,thickness:q,color:X});let J=B.length-$;J>0&&St.set(d,{start:$,count:J})}return{nodeStrokes:B,nodeStrokeRuns:St,arrows:nt,arrowRuns:Lt,edgeCurves:G,edgeCurveRuns:kt}}var an=[{value:"progress",label:"Progress along the walk"},{value:"walk",label:"One colour for the walk"},{value:"reference",label:"Reference position"}],wt=[{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:"rainbow",label:"Rainbow"}],rn=["blue","red","purple","green"],Qn=t=>an.some(r=>r.value===t),Zn=t=>wt.some(r=>r.value===t);function te(t,r,n,e=!0){let{field:o,scheme:s}=t.color??{},a=Qn(o)?o:e?"progress":"walk",i=r?"grey":rn[n%rn.length],l=Zn(s)?s==="rainbow"&&a!=="reference"?i:s:i;return{field:a,scheme:l}}var cn=.5,ne=t=>t<=.04045?t/12.92:((t+.055)/1.055)**2.4,ee=t=>t<=.0031308?t*12.92:1.055*t**(1/2.4)-.055;function sn(t){let[r,n,e]=[1,3,5].map(i=>ne(Number.parseInt(t.slice(i,i+2),16)/255)),o=Math.cbrt(.4122214708*r+.5363325363*n+.0514459929*e),s=Math.cbrt(.2119034982*r+.6806995451*n+.1073969566*e),a=Math.cbrt(.0883024619*r+.2817188376*n+.6299787005*e);return[.2104542553*o+.793617785*s-.0040720468*a,1.9779984951*o-2.428592205*s+.4505937099*a,.0259040371*o+.7827717662*s-.808675766*a]}function oe([t,r,n]){let e=(t+.3963377774*r+.2158037573*n)**3,o=(t-.1055613458*r-.0638541728*n)**3,s=(t-.0894841775*r-1.291485548*n)**3;return[4.0767416621*e-3.3077115913*o+.2309699292*s,-1.2684380046*e+2.6097574011*o-.3413193965*s,-.0041960863*e-.7034186147*o+1.707614701*s].map(a=>ee(Math.max(0,Math.min(1,a)))*255)}function It(t,r){let n=Math.max(0,Math.min(1,r)),e=wt.find(a=>a.value===t);if(!e||!("ends"in e))return z(n*vt,.7,.5).map(a=>a*255);let o=sn(e.ends[0]),s=sn(e.ends[1]);return oe(o.map((a,i)=>a+(s[i]-a)*n))}function At(t,r){let[n,e,o]=It(t,r).map(Math.round);return`rgb(${n}, ${e}, ${o})`}function Ct(t,r){let[n,e,o]=It(t,r).map(Math.round);return p(n,e,o,255)}function re({field:t,scheme:r},n){return t==="walk"?Ct(r,cn):n===void 0?ln:Ct(r,n)}var ln=Rt;function se({field:t,scheme:r}){return t==="walk"?[{offset:0,color:At(r,cn)}]:Array.from({length:7},(n,e)=>({offset:e/6,color:At(r,e/6)}))}export{yn as a,bn as b,p as c,Yt as d,ae as e,V as f,ce as g,jt as h,Me as i,vt as j,be as k,Ee as l,Kn as m,Yn as n,_e as o,an as p,wt as q,te as r,re as s,ln as t,se as u};
2
+ //# sourceMappingURL=chunk-FITPB5X6.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@10.2.4/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-G2FD7S3C.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@10.2.4/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-ZY2AFL4Y.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@10.2.4/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-ES2N6V56.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@10.2.4/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-A4PFFC4Q.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@10.2.4/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-VQC7KELB.js"],
3
+ "sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@10.2.6/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-G2FD7S3C.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@10.2.6/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-ZY2AFL4Y.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@10.2.6/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-ES2N6V56.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@10.2.6/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-A4PFFC4Q.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@10.2.6/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-VQC7KELB.js"],
4
4
  "sourcesContent": ["// src/renderer/colorBits.ts\nfunction packAbgr(r, g, b, a) {\n return (a << 24 | b << 16 | g << 8 | r) >>> 0;\n}\nfunction abgrRed(c) {\n return c & 255;\n}\nfunction abgrGreen(c) {\n return c >>> 8 & 255;\n}\nfunction abgrBlue(c) {\n return c >>> 16 & 255;\n}\nfunction abgrAlpha(c) {\n return c >>> 24 & 255;\n}\nfunction abgrToCssRgba(c) {\n return `rgba(${abgrRed(c)},${abgrGreen(c)},${abgrBlue(c)},${abgrAlpha(c) / 255})`;\n}\nfunction normalizedRgbToCssRgba(c, alpha) {\n return `rgba(${Math.round(c[0] * 255)},${Math.round(c[1] * 255)},${Math.round(c[2] * 255)},${alpha})`;\n}\nfunction fadeAbgr(c, alpha) {\n return packAbgr(\n abgrRed(c),\n abgrGreen(c),\n abgrBlue(c),\n Math.round(abgrAlpha(c) * alpha)\n );\n}\nfunction brightenAbgr(c, factor) {\n const t = Math.max(0, 1 - 1 / factor);\n const lift = (v) => Math.round(v + (255 - v) * t);\n return packAbgr(\n lift(abgrRed(c)),\n lift(abgrGreen(c)),\n lift(abgrBlue(c)),\n abgrAlpha(c)\n );\n}\n\nexport {\n packAbgr,\n abgrRed,\n abgrGreen,\n abgrBlue,\n abgrAlpha,\n abgrToCssRgba,\n normalizedRgbToCssRgba,\n fadeAbgr,\n brightenAbgr\n};\n", "import {\n edgeCurvesOf\n} from \"./chunk-24WITXQY.js\";\n\n// src/util/edgeCurves.ts\nvar cache = /* @__PURE__ */ new WeakMap();\nfunction baseEdgeCurves(nodePositions, graph, axis, deletions, version, routes, stranded = false) {\n const { scaleX, scaleY } = axis;\n const cached = cache.get(nodePositions);\n if (cached?.graph === graph && cached.scaleX === scaleX && cached.scaleY === scaleY && cached.deletions === deletions && cached.routes === routes && cached.stranded === stranded && cached.version === version) {\n return cached.curves;\n }\n const curves = /* @__PURE__ */ new Map();\n for (let ei = 0; ei < graph.edges.length; ei++) {\n const bypassed = deletions?.get(ei);\n const edgeCurves = edgeCurvesOf(\n nodePositions,\n graph.edges[ei],\n axis,\n bypassed,\n bypassed && routes?.[ei],\n stranded\n );\n if (edgeCurves) {\n curves.set(ei, edgeCurves);\n }\n }\n cache.set(nodePositions, {\n graph,\n scaleX,\n scaleY,\n deletions,\n routes,\n stranded,\n version,\n curves\n });\n return curves;\n}\n\nexport {\n baseEdgeCurves\n};\n", "import {\n isBackbone\n} from \"./chunk-FYQWPEEY.js\";\n\n// src/referenceSpan.ts\nvar MAX_BACKBONE_HOPS = 4;\nfunction buildNeighbors(graph) {\n const neighbors = /* @__PURE__ */ new Map();\n function add(from, to) {\n const list = neighbors.get(from);\n if (list) {\n list.push(to);\n } else {\n neighbors.set(from, [to]);\n }\n }\n for (const edge of graph.edges) {\n add(edge.from, edge.to);\n add(edge.to, edge.from);\n }\n return neighbors;\n}\nfunction flankingSpan({\n nodeId,\n nodeById,\n neighbors\n}) {\n const seen = /* @__PURE__ */ new Set([nodeId]);\n let frontier = [nodeId];\n let minEnd = Infinity;\n let maxStart = -Infinity;\n for (let hop = 0; hop < MAX_BACKBONE_HOPS && frontier.length > 0; hop++) {\n const next = [];\n for (const id of frontier) {\n const adjacent = neighbors.get(id);\n if (adjacent) {\n for (const neighborId of adjacent) {\n if (!seen.has(neighborId)) {\n seen.add(neighborId);\n const neighbor = nodeById.get(neighborId);\n if (neighbor && isBackbone(neighbor)) {\n minEnd = Math.min(minEnd, neighbor.stable.start + neighbor.length);\n maxStart = Math.max(maxStart, neighbor.stable.start);\n } else {\n next.push(neighborId);\n }\n }\n }\n }\n }\n frontier = next;\n }\n return minEnd === Infinity ? void 0 : {\n start: Math.min(minEnd, maxStart),\n end: Math.max(minEnd, maxStart)\n };\n}\nfunction nodeReferenceSpan({\n nodeId,\n nodeById,\n neighbors\n}) {\n const node = nodeById.get(nodeId);\n return node === void 0 ? void 0 : isBackbone(node) ? { start: node.stable.start, end: node.stable.start + node.length } : flankingSpan({ nodeId, nodeById, neighbors });\n}\nfunction referenceMidpoints(graph) {\n const nodeById = new Map(graph.nodes.map((node) => [node.id, node]));\n const neighbors = buildNeighbors(graph);\n const midpoints = /* @__PURE__ */ new Map();\n for (const node of graph.nodes) {\n const span = nodeReferenceSpan({ nodeId: node.id, nodeById, neighbors });\n if (span) {\n midpoints.set(node.id, (span.start + span.end) / 2);\n }\n }\n return midpoints;\n}\n\nexport {\n buildNeighbors,\n nodeReferenceSpan,\n referenceMidpoints\n};\n", "import {\n abgrToCssRgba,\n fadeAbgr,\n packAbgr\n} from \"./chunk-G2FD7S3C.js\";\nimport {\n baseEdgeCurves\n} from \"./chunk-ZY2AFL4Y.js\";\nimport {\n PATH_LIGHTNESS,\n PATH_SATURATION,\n nameHue,\n pathHueAt\n} from \"./chunk-3XSM4OZU.js\";\nimport {\n meanDepth,\n nodeWidthPx\n} from \"./chunk-JBCZIBFC.js\";\nimport {\n referenceMidpoints\n} from \"./chunk-ES2N6V56.js\";\nimport {\n dashCurves,\n pathRibbonOffsets,\n strandSides,\n translateCurves,\n yToXOf\n} from \"./chunk-7SRWJLSC.js\";\n\n// src/renderer/GeometryBuilder.ts\nvar EDGE_DEFAULT_COLOR = packAbgr(119, 119, 119, 217);\nvar EDGE_PATH_FALLBACK_COLOR = packAbgr(136, 136, 136, 217);\nvar EDGE_DELETION_COLOR = packAbgr(24, 24, 28, 240);\nvar DELETION_THICKNESS_FACTOR = 2.2;\nvar LIFT_BACKDROP_COLOR = packAbgr(160, 160, 160, 255);\nvar FADED_ALPHA = 0.18;\nvar LIFT_BACKDROP_CSS = abgrToCssRgba(\n fadeAbgr(LIFT_BACKDROP_COLOR, FADED_ALPHA)\n);\nvar DELETION_DASH_PX = 11;\nvar MIN_PATH_STRIPE_PX = 1.2;\nvar MIN_WALK_LANE_PX = 4;\nvar MIN_SCALE_FOR_OFFSET = 1e-6;\nvar ARROW_LENGTH_BASE_PX = 7;\nvar ARROW_LENGTH_PER_EDGE_PX = 3;\nvar ARROW_HALF_WIDTH_BASE_PX = 3;\nvar ARROW_HALF_WIDTH_PER_EDGE_PX = 1.5;\nvar MIN_LINK_HEADS = 3;\nvar MIN_ARROW_FIT = 0.5;\nvar MIN_ARROW_SCALE = 0.45;\nvar ARROW_CURVE_STEPS = 12;\nvar ABUTTING_PX = 1e-6;\nvar walkX = new Float64Array(64);\nvar walkY = new Float64Array(64);\nvar walkPx = new Float64Array(64);\nfunction backFromEnd(curves, scale, yToX, untilPx) {\n const most = curves.length * ARROW_CURVE_STEPS + 1;\n if (walkX.length < most) {\n walkX = new Float64Array(most);\n walkY = new Float64Array(most);\n walkPx = new Float64Array(most);\n }\n const last = curves[curves.length - 1];\n walkX[0] = last.x1;\n walkY[0] = last.y1;\n walkPx[0] = 0;\n let n = 1;\n let px = 0;\n for (let ci = curves.length - 1; ci >= 0 && px < untilPx; ci--) {\n const c = curves[ci];\n for (let k = 1; k <= ARROW_CURVE_STEPS && px < untilPx; k++) {\n const t = 1 - (k / ARROW_CURVE_STEPS) ** 2;\n const u = 1 - t;\n const a = u * u * u;\n const b = 3 * u * u * t;\n const d = 3 * u * t * t;\n const e = t * t * t;\n const x = a * c.x0 + b * c.cx0 + d * c.cx1 + e * c.x1;\n const y = a * c.y0 + b * c.cy0 + d * c.cy1 + e * c.y1;\n px += Math.hypot(x - walkX[n - 1], (y - walkY[n - 1]) * yToX) * scale;\n walkX[n] = x;\n walkY[n] = y;\n walkPx[n] = px;\n n++;\n }\n }\n return n;\n}\nfunction walkPointAt(n, px) {\n let i = 1;\n while (i < n - 1 && walkPx[i] < px) {\n i++;\n }\n const from = walkPx[i - 1];\n const to = walkPx[i];\n const f = to > from ? Math.min(1, Math.max(0, (px - from) / (to - from))) : 0;\n return {\n x: walkX[i - 1] + (walkX[i] - walkX[i - 1]) * f,\n y: walkY[i - 1] + (walkY[i] - walkY[i - 1]) * f\n };\n}\nfunction arrowheadFor({\n curves,\n edgeHalfWidth,\n nodeHalfWidth,\n scale,\n yToX,\n color,\n fromSegments,\n toSegments\n}) {\n const length = ARROW_LENGTH_BASE_PX + ARROW_LENGTH_PER_EDGE_PX * edgeHalfWidth;\n const n = backFromEnd(\n curves,\n scale,\n yToX,\n nodeHalfWidth + MIN_LINK_HEADS * length\n );\n const lengthPx = walkPx[n - 1];\n const abutting = lengthPx < ABUTTING_PX;\n const inset = Math.min(nodeHalfWidth, lengthPx);\n const fit = abutting ? Math.min(1, polylinePx(fromSegments, scale, yToX) / length) : 1;\n if (abutting ? fit < MIN_ARROW_FIT : lengthPx < MIN_LINK_HEADS * length) {\n return void 0;\n }\n const tip = walkPointAt(n, inset);\n const base = walkPointAt(n, inset + length * fit);\n const dx = tip.x - base.x;\n const dy = (tip.y - base.y) * yToX;\n const last = curves[curves.length - 1];\n return {\n x: tip.x,\n y: tip.y,\n angle: Math.hypot(dx, dy) > 0 ? Math.atan2(dy, dx) : endTangent(last, yToX, intoDirection(last, toSegments)),\n length: length * fit,\n halfWidth: (ARROW_HALF_WIDTH_BASE_PX + ARROW_HALF_WIDTH_PER_EDGE_PX * edgeHalfWidth) * fit,\n color\n };\n}\nfunction polylinePx(segments, scale, yToX) {\n let length = 0;\n for (let i = 1; i < segments.length; i++) {\n length += Math.hypot(\n segments[i].x - segments[i - 1].x,\n (segments[i].y - segments[i - 1].y) * yToX\n );\n }\n return length * scale;\n}\nfunction leavesStart(edge, segments, first, stranded, yToX) {\n if (stranded) {\n return strandSides(edge).from === \"start\";\n }\n const gap = (p) => Math.hypot(p.x - first.x0, (p.y - first.y0) * yToX);\n return gap(segments[0]) < gap(segments.at(-1));\n}\nfunction intoDirection(last, toSegments) {\n if (toSegments.length < 2) {\n return void 0;\n }\n const first = toSegments[0];\n const final = toSegments[toSegments.length - 1];\n const atStart = Math.hypot(last.x1 - first.x, last.y1 - first.y) <= Math.hypot(last.x1 - final.x, last.y1 - final.y);\n return atStart ? { from: first, to: toSegments[1] } : { from: final, to: toSegments[toSegments.length - 2] };\n}\nfunction pointNormalsOf(rawPoints, yToX = 1) {\n const points = yToX === 1 ? rawPoints : rawPoints.map((p) => ({ x: p.x, y: p.y * yToX }));\n const pointNormals = [];\n for (let i = 0; i < points.length; i++) {\n let nx = 0;\n let ny = 0;\n if (i === 0) {\n const dx = points[1].x - points[0].x;\n const dy = points[1].y - points[0].y;\n const len = Math.hypot(dx, dy);\n if (len > 0) {\n nx = -dy / len;\n ny = dx / len;\n }\n } else if (i === points.length - 1) {\n const dx = points[i].x - points[i - 1].x;\n const dy = points[i].y - points[i - 1].y;\n const len = Math.hypot(dx, dy);\n if (len > 0) {\n nx = -dy / len;\n ny = dx / len;\n }\n } else {\n const dx1 = points[i].x - points[i - 1].x;\n const dy1 = points[i].y - points[i - 1].y;\n const len1 = Math.hypot(dx1, dy1);\n const dx2 = points[i + 1].x - points[i].x;\n const dy2 = points[i + 1].y - points[i].y;\n const len2 = Math.hypot(dx2, dy2);\n if (len1 > 0 && len2 > 0) {\n const nx1 = -dy1 / len1;\n const ny1 = dx1 / len1;\n const nx2 = -dy2 / len2;\n const ny2 = dx2 / len2;\n nx = (nx1 + nx2) / 2;\n ny = (ny1 + ny2) / 2;\n const dot = nx1 * nx + ny1 * ny;\n if (dot > 0.1) {\n nx /= dot;\n ny /= dot;\n }\n } else if (len1 > 0) {\n nx = -dy1 / len1;\n ny = dx1 / len1;\n } else if (len2 > 0) {\n nx = -dy2 / len2;\n ny = dx2 / len2;\n }\n }\n pointNormals.push({ nx, ny });\n }\n return pointNormals;\n}\nfunction offsetPolyline(points, normals, distance, yToX = 1) {\n return points.map((p, i) => ({\n x: p.x + normals[i].nx * distance,\n y: p.y + normals[i].ny * distance / yToX\n }));\n}\nfunction packNorm(r, g, b, a) {\n return packAbgr(\n Math.round(r * 255),\n Math.round(g * 255),\n Math.round(b * 255),\n Math.round(a * 255)\n );\n}\nfunction hslToRgb(h, s, l) {\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const x = c * (1 - Math.abs(h / 60 % 2 - 1));\n const m = l - c / 2;\n let r = 0;\n let g = 0;\n let b = 0;\n if (h < 60) {\n r = c;\n g = x;\n } else if (h < 120) {\n r = x;\n g = c;\n } else if (h < 180) {\n g = c;\n b = x;\n } else if (h < 240) {\n g = x;\n b = c;\n } else if (h < 300) {\n r = x;\n b = c;\n } else {\n r = c;\n b = x;\n }\n return [r + m, g + m, b + m];\n}\nvar DEPTH_GRADIENT = [\n [68, 1, 84],\n [59, 82, 139],\n [33, 145, 140],\n [94, 201, 98],\n [253, 231, 37]\n];\nvar STABLE_RANK_GRADIENT = [\n [237, 137, 44],\n [158, 42, 122]\n];\nvar NODE_LENGTH_GRADIENT = [\n [220, 50, 50],\n [50, 120, 220]\n];\nfunction sampleGradient(stops, t) {\n const pos = Math.max(0, Math.min(1, t)) * (stops.length - 1);\n const i = Math.min(stops.length - 2, Math.floor(pos));\n const f = pos - i;\n const a = stops[i];\n const b = stops[i + 1];\n return packAbgr(\n Math.round(a[0] + (b[0] - a[0]) * f),\n Math.round(a[1] + (b[1] - a[1]) * f),\n Math.round(a[2] + (b[2] - a[2]) * f),\n 255\n );\n}\nfunction hashColor(str, alpha) {\n const [r, g, b] = hslToRgb(nameHue(str), PATH_SATURATION, PATH_LIGHTNESS);\n return packNorm(r, g, b, alpha);\n}\nvar REFERENCE_RAMP_MAX_HUE = 300;\nvar REFERENCE_RAMP_SATURATION = 0.7;\nvar REFERENCE_RAMP_LIGHTNESS = 0.5;\nvar REFERENCE_RAMP_ALT_RGB = [60, 65, 72];\nvar REFERENCE_RAMP_ALT_COLOR = packAbgr(...REFERENCE_RAMP_ALT_RGB, 255);\nvar REFERENCE_RAMP_ALT_CSS = `rgb(${REFERENCE_RAMP_ALT_RGB.join(\", \")})`;\nfunction computeReferenceRamp(graph, domain) {\n const midpoints = referenceMidpoints(graph);\n if (domain && domain.end > domain.start) {\n return {\n start: domain.start,\n span: domain.end - domain.start,\n midpoints\n };\n }\n let min = Infinity;\n let max = -Infinity;\n for (const mid of midpoints.values()) {\n min = Math.min(min, mid);\n max = Math.max(max, mid);\n }\n return {\n start: min === Infinity ? 0 : min,\n span: max > min ? max - min : 1,\n midpoints\n };\n}\nfunction computeColorSchemeRange(graph) {\n let minDepth = Infinity;\n let maxDepth = -Infinity;\n let minLength = Infinity;\n let maxLength = -Infinity;\n let maxRank = 0;\n for (const n of graph.nodes) {\n if (n.stable !== void 0 && n.stable.rank > maxRank) {\n maxRank = n.stable.rank;\n }\n if (n.depth < minDepth) {\n minDepth = n.depth;\n }\n if (n.depth > maxDepth) {\n maxDepth = n.depth;\n }\n if (n.length < minLength) {\n minLength = n.length;\n }\n if (n.length > maxLength) {\n maxLength = n.length;\n }\n }\n return {\n minDepth,\n maxDepth,\n minLength,\n maxLength,\n maxRank,\n nodeCount: graph.nodes.length\n };\n}\nfunction getNodeColor(node, nodeIndex, colorScheme, range) {\n switch (colorScheme) {\n case \"random\":\n return hashColor(node.id, 1);\n case \"depth\":\n return sampleGradient(\n DEPTH_GRADIENT,\n range.maxDepth > range.minDepth ? (node.depth - range.minDepth) / (range.maxDepth - range.minDepth) : 0.5\n );\n case \"node-length\":\n return sampleGradient(\n NODE_LENGTH_GRADIENT,\n range.maxLength > range.minLength ? (node.length - range.minLength) / (range.maxLength - range.minLength) : 0.5\n );\n // rGFA states the backbone rather than leaving it to be inferred: rank 0 is\n // the reference, higher ranks are the sequence that diverges from it. A\n // graph with no SR tags draws every node as unranked.\n case \"stable-rank\":\n return node.stable === void 0 ? packAbgr(160, 160, 160, 255) : node.stable.rank === 0 ? packAbgr(52, 152, 219, 255) : sampleGradient(\n STABLE_RANK_GRADIENT,\n range.maxRank > 1 ? (node.stable.rank - 1) / (range.maxRank - 1) : 0\n );\n // Position on the reference, the one quantity both panels of a\n // graph-over-linear figure can state. A node with no reference position at\n // all \u2014 nothing anchored, or an allele whose flanks fell outside the cut \u2014\n // is grey rather than a hue it has not earned.\n case \"reference-position\": {\n const ramp = range.referenceRamp;\n const mid = ramp?.midpoints.get(node.id);\n if (ramp === void 0 || mid === void 0) {\n return packAbgr(160, 160, 160, 255);\n }\n if (node.stable !== void 0 && node.stable.rank > 0) {\n return REFERENCE_RAMP_ALT_COLOR;\n }\n const frac = Math.max(0, Math.min(1, (mid - ramp.start) / ramp.span));\n const [r, g, b] = hslToRgb(\n frac * REFERENCE_RAMP_MAX_HUE,\n REFERENCE_RAMP_SATURATION,\n REFERENCE_RAMP_LIGHTNESS\n );\n return packNorm(r, g, b, 1);\n }\n case \"grey\":\n return packAbgr(160, 160, 160, 255);\n case \"rainbow\": {\n const hue = range.nodeCount > 1 ? nodeIndex / range.nodeCount * 360 : 0;\n const [r, g, b] = hslToRgb(hue, 0.75, 0.5);\n return packNorm(r, g, b, 1);\n }\n default:\n return packAbgr(52, 152, 219, 255);\n }\n}\nfunction endTangent(c, yToX = 1, into) {\n const candidates = [\n [c.cx1, c.cy1],\n [c.cx0, c.cy0],\n [c.x0, c.y0]\n ];\n for (const [x, y] of candidates) {\n const dx = c.x1 - x;\n const dy = (c.y1 - y) * yToX;\n if (Math.hypot(dx, dy) > 0) {\n return Math.atan2(dy, dx);\n }\n }\n return into ? Math.atan2((into.to.y - into.from.y) * yToX, into.to.x - into.from.x) : 0;\n}\nfunction isPolylineInBounds(segments, bounds) {\n let hit = false;\n for (let i = 0; i < segments.length - 1 && !hit; i++) {\n const a = segments[i];\n const b = segments[i + 1];\n hit = Math.max(a.x, b.x) >= bounds.minX && Math.min(a.x, b.x) <= bounds.maxX && Math.max(a.y, b.y) >= bounds.minY && Math.min(a.y, b.y) <= bounds.maxY;\n }\n return hit;\n}\nfunction isBezierInBounds(curves, bounds) {\n for (const c of curves) {\n const cMinX = Math.min(c.x0, c.cx0, c.cx1, c.x1);\n const cMaxX = Math.max(c.x0, c.cx0, c.cx1, c.x1);\n const cMinY = Math.min(c.y0, c.cy0, c.cy1, c.y1);\n const cMaxY = Math.max(c.y0, c.cy0, c.cy1, c.y1);\n if (cMaxX >= bounds.minX && cMinX <= bounds.maxX && cMaxY >= bounds.minY && cMinY <= bounds.maxY) {\n return true;\n }\n }\n return false;\n}\nvar paletteCache = /* @__PURE__ */ new WeakMap();\nfunction pathPaletteOf(graph) {\n let palette = paletteCache.get(graph);\n if (!palette) {\n const pathColorByIndex = [];\n const pathIndexByName = /* @__PURE__ */ new Map();\n const paths = graph.paths ?? [];\n for (let i = 0; i < paths.length; i++) {\n const [r, g, b] = hslToRgb(\n pathHueAt(i, paths.length),\n PATH_SATURATION,\n PATH_LIGHTNESS\n );\n pathColorByIndex.push(packNorm(r, g, b, 0.85));\n if (!pathIndexByName.has(paths[i].name)) {\n pathIndexByName.set(paths[i].name, i);\n }\n }\n palette = { pathColorByIndex, pathIndexByName };\n paletteCache.set(graph, palette);\n }\n return palette;\n}\nvar slotsCache = /* @__PURE__ */ new WeakMap();\nvar NO_SLOTS = /* @__PURE__ */ new Map();\nfunction pathSlotsOf(graph) {\n let slots = slotsCache.get(graph);\n if (!slots) {\n slots = /* @__PURE__ */ new Map();\n for (const [pathIdx, path] of (graph.paths ?? []).entries()) {\n for (const nodeId of new Set(path.nodeIds)) {\n const visits = slots.get(nodeId);\n if (visits) {\n visits.push(pathIdx);\n } else {\n slots.set(nodeId, [pathIdx]);\n }\n }\n }\n slotsCache.set(graph, slots);\n }\n return slots;\n}\nfunction buildGeometry(options) {\n const {\n nodePositions,\n graph,\n nodeById,\n colorScheme,\n contigThickness,\n connectorThickness,\n drawPaths,\n nodeWidth = \"uniform\",\n highlight,\n axis,\n linearLayout,\n viewportBounds,\n referenceRamp,\n deletions,\n deletionRoutes,\n stranded,\n hiddenEdges,\n version = 0\n } = options;\n const depthNorm = nodeWidth === \"depth\" ? meanDepth(graph) : 0;\n const scale = axis.scaleX;\n const yToX = yToXOf(axis);\n const sharedCurves = baseEdgeCurves(\n nodePositions,\n graph,\n axis,\n deletions,\n version,\n deletionRoutes,\n stranded\n );\n const nodeStrokes = [];\n const nodeStrokeRuns = /* @__PURE__ */ new Map();\n const arrows = [];\n const arrowRuns = /* @__PURE__ */ new Map();\n const edgeCurves = [];\n const edgeCurveRuns = /* @__PURE__ */ new Map();\n const colorRange = { ...computeColorSchemeRange(graph), referenceRamp };\n const nodeIndexMap = /* @__PURE__ */ new Map();\n if (colorScheme === \"rainbow\") {\n for (let i = 0; i < graph.nodes.length; i++) {\n nodeIndexMap.set(graph.nodes[i].id, i);\n }\n }\n const pathCount = graph.paths?.length ?? 0;\n const { pathColorByIndex, pathIndexByName } = pathPaletteOf(graph);\n const pathColorByName = (name) => pathColorByIndex[pathIndexByName.get(name) ?? -1] ?? EDGE_PATH_FALLBACK_COLOR;\n const nodePathSlots = drawPaths && pathCount > 1 ? pathSlotsOf(graph) : NO_SLOTS;\n const showArrows = scale > (linearLayout ? 1 : MIN_ARROW_SCALE);\n for (let ei = 0; ei < graph.edges.length; ei++) {\n const edge = graph.edges[ei];\n const fromSegments = nodePositions[edge.from];\n const toSegments = nodePositions[edge.to];\n const baseCurves = sharedCurves.get(ei);\n if (!fromSegments?.length || !toSegments?.length || !baseCurves || hiddenEdges?.has(ei)) {\n continue;\n }\n const numPaths = edge.pathIds?.length ?? 0;\n const bypassed = deletions?.get(ei);\n const isDeletion = bypassed !== void 0;\n const onWalk = highlight?.edgeIndexes.has(ei) ?? false;\n const edgeThickness = connectorThickness / 2 * (isDeletion ? DELETION_THICKNESS_FACTOR : 1);\n const ribbons = drawPaths && numPaths > 0;\n const plainEdgeColor = isDeletion ? EDGE_DELETION_COLOR : EDGE_DEFAULT_COLOR;\n const edgeColor = !highlight || onWalk ? plainEdgeColor : fadeAbgr(plainEdgeColor, FADED_ALPHA);\n const toNode = nodeById.get(edge.to);\n const intoHalfWidth = (toNode ? nodeWidthPx(toNode, contigThickness, nodeWidth, depthNorm) : contigThickness) / 2;\n const inView = (curves) => !viewportBounds || isBezierInBounds(curves, viewportBounds);\n const stroke = (curves, thickness, color) => {\n if (isDeletion) {\n for (const dash of dashCurves(curves, DELETION_DASH_PX / scale)) {\n edgeCurves.push({ curves: dash, thickness, color });\n }\n } else {\n edgeCurves.push({ curves, thickness, color });\n }\n };\n const arrowOn = (curves) => {\n const head = showArrows ? arrowheadFor({\n curves,\n edgeHalfWidth: connectorThickness / 2,\n nodeHalfWidth: intoHalfWidth,\n scale,\n yToX,\n color: edgeColor,\n fromSegments,\n toSegments\n }) : void 0;\n if (head) {\n arrows.push(head);\n }\n };\n const edgeCurveStart = edgeCurves.length;\n const arrowStart = arrows.length;\n const laneWalks = highlight?.walks.length && onWalk && !ribbons ? highlight.walks : void 0;\n if (laneWalks) {\n const fromNode = nodeById.get(edge.from);\n const width = fromNode ? nodeWidthPx(fromNode, contigThickness, nodeWidth, depthNorm) : contigThickness;\n const laneWidth = Math.max(width / laneWalks.length, MIN_WALK_LANE_PX);\n const normals = pointNormalsOf(fromSegments, yToX);\n const { nx, ny } = (leavesStart(\n edge,\n fromSegments,\n baseCurves[0],\n stranded,\n yToX\n ) ? normals[0] : normals.at(-1)) ?? {\n nx: 0,\n ny: 0\n };\n const worldPerScreenPx = 1 / Math.max(scale, MIN_SCALE_FOR_OFFSET);\n laneWalks.forEach((walk, lane) => {\n if (!walk.edgeIndexes.has(ei)) {\n return;\n }\n const offset = (lane - (laneWalks.length - 1) / 2) * laneWidth * worldPerScreenPx;\n const curves = offset === 0 ? baseCurves : translateCurves(baseCurves, nx * offset, ny * offset / yToX);\n if (inView(curves)) {\n stroke(\n curves,\n laneWidth / 2,\n walk.colors.get(edge.from) ?? walk.colors.get(edge.to) ?? plainEdgeColor\n );\n }\n });\n if (edgeCurves.length > edgeCurveStart) {\n arrowOn(baseCurves);\n }\n } else if (!ribbons) {\n if (inView(baseCurves)) {\n stroke(baseCurves, edgeThickness, edgeColor);\n arrowOn(baseCurves);\n }\n } else {\n const offsets = pathRibbonOffsets(\n fromSegments,\n toSegments,\n numPaths,\n axis\n );\n const arrowRibbon = Math.floor((numPaths - 1) / 2);\n for (let pathIdx = 0; pathIdx < numPaths; pathIdx++) {\n const { x, y } = offsets[pathIdx];\n const curves = x === 0 && y === 0 ? baseCurves : translateCurves(baseCurves, x, y);\n if (!inView(curves)) {\n continue;\n }\n const ribbonColor = pathColorByName(edge.pathIds[pathIdx]);\n stroke(\n curves,\n edgeThickness,\n highlight && (highlight.walks.length ? !highlight.names.has(edge.pathIds[pathIdx]) : !onWalk) ? fadeAbgr(ribbonColor, FADED_ALPHA) : ribbonColor\n );\n if (pathIdx === arrowRibbon) {\n arrowOn(curves);\n }\n }\n }\n const edgeCurveCount = edgeCurves.length - edgeCurveStart;\n if (edgeCurveCount > 0) {\n edgeCurveRuns.set(ei, { start: edgeCurveStart, count: edgeCurveCount });\n }\n const arrowCount = arrows.length - arrowStart;\n if (arrowCount > 0) {\n arrowRuns.set(ei, { start: arrowStart, count: arrowCount });\n }\n }\n for (const [nodeId, segments] of Object.entries(nodePositions)) {\n const node = nodeById.get(nodeId);\n if (!node) {\n continue;\n }\n if (viewportBounds && !isPolylineInBounds(segments, viewportBounds)) {\n continue;\n }\n const faded = highlight !== void 0 && !highlight.nodeIds.has(nodeId);\n const own = faded ? LIFT_BACKDROP_COLOR : getNodeColor(\n node,\n nodeIndexMap.get(nodeId) ?? 0,\n colorScheme,\n colorRange\n );\n const color = faded ? fadeAbgr(own, FADED_ALPHA) : own;\n const width = nodeWidthPx(node, contigThickness, nodeWidth, depthNorm);\n const nodeThickness = width / 2;\n const start = nodeStrokes.length;\n const slots = nodePathSlots.get(nodeId);\n const slotWidth = width / pathCount;\n const drawable = segments.length >= 2;\n const lanes = highlight?.walks.length && !faded && !slots?.length ? highlight.walks : void 0;\n if (drawable && lanes) {\n const laneWidth = Math.max(width / lanes.length, MIN_WALK_LANE_PX);\n const normals = pointNormalsOf(segments, yToX);\n const worldPerScreenPx = 1 / Math.max(scale, MIN_SCALE_FOR_OFFSET);\n lanes.forEach((walk, lane) => {\n const laneColor = walk.colors.get(nodeId);\n if (laneColor === void 0) {\n return;\n }\n const offset = (lane - (lanes.length - 1) / 2) * laneWidth * worldPerScreenPx;\n nodeStrokes.push({\n points: lanes.length === 1 ? segments : offsetPolyline(segments, normals, offset, yToX),\n thickness: laneWidth / 2,\n color: laneColor\n });\n });\n } else if (drawable && slots?.length && slotWidth >= MIN_PATH_STRIPE_PX) {\n const normals = pointNormalsOf(segments, yToX);\n const worldPerScreenPx = 1 / Math.max(scale, MIN_SCALE_FOR_OFFSET);\n for (const slot of slots) {\n const offset = (slot - (pathCount - 1) / 2) * slotWidth * worldPerScreenPx;\n const stripe = pathColorByIndex[slot] ?? EDGE_PATH_FALLBACK_COLOR;\n nodeStrokes.push({\n points: offsetPolyline(segments, normals, offset, yToX),\n thickness: slotWidth / 2,\n // a node off the lifted walk fades whichever way it is painted\n color: faded ? fadeAbgr(stripe, FADED_ALPHA) : stripe\n });\n }\n } else if (drawable) {\n nodeStrokes.push({ points: segments, thickness: nodeThickness, color });\n }\n const count = nodeStrokes.length - start;\n if (count > 0) {\n nodeStrokeRuns.set(nodeId, { start, count });\n }\n }\n return {\n nodeStrokes,\n nodeStrokeRuns,\n arrows,\n arrowRuns,\n edgeCurves,\n edgeCurveRuns\n };\n}\n\nexport {\n LIFT_BACKDROP_COLOR,\n FADED_ALPHA,\n LIFT_BACKDROP_CSS,\n hslToRgb,\n REFERENCE_RAMP_MAX_HUE,\n REFERENCE_RAMP_ALT_COLOR,\n REFERENCE_RAMP_ALT_CSS,\n computeReferenceRamp,\n computeColorSchemeRange,\n getNodeColor,\n endTangent,\n buildGeometry\n};\n", "import {\n REFERENCE_RAMP_ALT_COLOR,\n REFERENCE_RAMP_MAX_HUE,\n hslToRgb\n} from \"./chunk-A4PFFC4Q.js\";\nimport {\n packAbgr\n} from \"./chunk-G2FD7S3C.js\";\n\n// src/walkEncoding.ts\nvar WALK_FIELDS = [\n { value: \"progress\", label: \"Progress along the walk\" },\n { value: \"walk\", label: \"One colour for the walk\" },\n { value: \"reference\", label: \"Reference position\" }\n];\nvar WALK_SCHEMES = [\n { value: \"grey\", label: \"Grey to black\", ends: [\"#a3a3a3\", \"#151515\"] },\n { value: \"blue\", label: \"Cyan to navy\", ends: [\"#6ee0f0\", \"#0b2c7a\"] },\n { value: \"red\", label: \"Yellow to red\", ends: [\"#ffd24a\", \"#b3121b\"] },\n { value: \"purple\", label: \"Pink to plum\", ends: [\"#f5a3d8\", \"#5e1a6e\"] },\n { value: \"green\", label: \"Lime to forest\", ends: [\"#b6e36c\", \"#0b5d3b\"] },\n { value: \"rainbow\", label: \"Rainbow\" }\n];\nvar FAMILIES = [\"blue\", \"red\", \"purple\", \"green\"];\nvar isField = (v) => WALK_FIELDS.some((f) => f.value === v);\nvar isScheme = (v) => WALK_SCHEMES.some((s) => s.value === v);\nfunction resolveEncoding(layer, reference, picked, alone = true) {\n const { field: askedField, scheme: askedScheme } = layer.color ?? {};\n const field = isField(askedField) ? askedField : alone ? \"progress\" : \"walk\";\n const family = reference ? \"grey\" : FAMILIES[picked % FAMILIES.length];\n const scheme = isScheme(askedScheme) ? askedScheme === \"rainbow\" && field !== \"reference\" ? family : askedScheme : family;\n return { field, scheme };\n}\nvar BASE_T = 0.5;\nvar toLinear = (c) => c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;\nvar toGamma = (c) => c <= 31308e-7 ? c * 12.92 : 1.055 * c ** (1 / 2.4) - 0.055;\nfunction oklab(hex) {\n const [r, g, b] = [1, 3, 5].map(\n (i) => toLinear(Number.parseInt(hex.slice(i, i + 2), 16) / 255)\n );\n const l = Math.cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b);\n const m = Math.cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b);\n const s = Math.cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b);\n return [\n 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s,\n 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s,\n 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s\n ];\n}\nfunction oklabToRgb([L, a, b]) {\n const l = (L + 0.3963377774 * a + 0.2158037573 * b) ** 3;\n const m = (L - 0.1055613458 * a - 0.0638541728 * b) ** 3;\n const s = (L - 0.0894841775 * a - 1.291485548 * b) ** 3;\n return [\n 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,\n -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,\n -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s\n ].map((c) => toGamma(Math.max(0, Math.min(1, c))) * 255);\n}\nfunction schemeRgb(scheme, t) {\n const x = Math.max(0, Math.min(1, t));\n const family = WALK_SCHEMES.find((s) => s.value === scheme);\n if (!family || !(\"ends\" in family)) {\n return hslToRgb(x * REFERENCE_RAMP_MAX_HUE, 0.7, 0.5).map((c) => c * 255);\n }\n const from = oklab(family.ends[0]);\n const to = oklab(family.ends[1]);\n return oklabToRgb(from.map((v, i) => v + (to[i] - v) * x));\n}\nfunction schemeCss(scheme, t) {\n const [r, g, b] = schemeRgb(scheme, t).map(Math.round);\n return `rgb(${r}, ${g}, ${b})`;\n}\nfunction schemeColor(scheme, t) {\n const [r, g, b] = schemeRgb(scheme, t).map(Math.round);\n return packAbgr(r, g, b, 255);\n}\nfunction encodedColor({ field, scheme }, t) {\n return field === \"walk\" ? schemeColor(scheme, BASE_T) : t === void 0 ? NO_VALUE_COLOR : schemeColor(scheme, t);\n}\nvar NO_VALUE_COLOR = REFERENCE_RAMP_ALT_COLOR;\nfunction encodingStops({ field, scheme }) {\n return field === \"walk\" ? [{ offset: 0, color: schemeCss(scheme, BASE_T) }] : Array.from({ length: 7 }, (_, i) => ({\n offset: i / 6,\n color: schemeCss(scheme, i / 6)\n }));\n}\nfunction encodingSwatchCss(encoding) {\n const stops = encodingStops(encoding);\n return stops.length === 1 ? stops[0].color : `linear-gradient(to right, ${stops.map((s) => `${s.color} ${s.offset * 100}%`).join(\", \")})`;\n}\n\nexport {\n WALK_FIELDS,\n WALK_SCHEMES,\n resolveEncoding,\n schemeRgb,\n schemeCss,\n schemeColor,\n encodedColor,\n NO_VALUE_COLOR,\n encodingStops,\n encodingSwatchCss\n};\n"],
5
5
  "mappings": "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",
6
6
  "names": ["packAbgr", "r", "g", "b", "a", "abgrRed", "c", "abgrGreen", "abgrBlue", "abgrAlpha", "abgrToCssRgba", "normalizedRgbToCssRgba", "alpha", "fadeAbgr", "brightenAbgr", "factor", "t", "lift", "v", "cache", "baseEdgeCurves", "nodePositions", "graph", "axis", "deletions", "version", "routes", "stranded", "scaleX", "scaleY", "cached", "curves", "ei", "bypassed", "edgeCurves", "edgeCurvesOf", "MAX_BACKBONE_HOPS", "buildNeighbors", "graph", "neighbors", "add", "from", "to", "list", "edge", "flankingSpan", "nodeId", "nodeById", "seen", "frontier", "minEnd", "maxStart", "hop", "next", "id", "adjacent", "neighborId", "neighbor", "isBackbone", "nodeReferenceSpan", "node", "referenceMidpoints", "midpoints", "span", "EDGE_DEFAULT_COLOR", "packAbgr", "EDGE_PATH_FALLBACK_COLOR", "EDGE_DELETION_COLOR", "DELETION_THICKNESS_FACTOR", "LIFT_BACKDROP_COLOR", "FADED_ALPHA", "LIFT_BACKDROP_CSS", "abgrToCssRgba", "fadeAbgr", "DELETION_DASH_PX", "MIN_PATH_STRIPE_PX", "MIN_WALK_LANE_PX", "MIN_SCALE_FOR_OFFSET", "ARROW_LENGTH_BASE_PX", "ARROW_LENGTH_PER_EDGE_PX", "ARROW_HALF_WIDTH_BASE_PX", "ARROW_HALF_WIDTH_PER_EDGE_PX", "MIN_LINK_HEADS", "MIN_ARROW_FIT", "MIN_ARROW_SCALE", "ARROW_CURVE_STEPS", "ABUTTING_PX", "walkX", "walkY", "walkPx", "backFromEnd", "curves", "scale", "yToX", "untilPx", "most", "last", "n", "px", "ci", "k", "t", "u", "a", "b", "d", "e", "x", "y", "walkPointAt", "i", "from", "to", "f", "arrowheadFor", "edgeHalfWidth", "nodeHalfWidth", "color", "fromSegments", "toSegments", "length", "lengthPx", "abutting", "inset", "fit", "polylinePx", "tip", "base", "dx", "dy", "endTangent", "intoDirection", "segments", "leavesStart", "edge", "first", "stranded", "strandSides", "gap", "p", "final", "pointNormalsOf", "rawPoints", "points", "pointNormals", "nx", "ny", "len", "dx1", "dy1", "len1", "dx2", "dy2", "len2", "nx1", "ny1", "nx2", "ny2", "dot", "offsetPolyline", "normals", "distance", "packNorm", "r", "g", "hslToRgb", "h", "s", "l", "c", "m", "DEPTH_GRADIENT", "STABLE_RANK_GRADIENT", "NODE_LENGTH_GRADIENT", "sampleGradient", "stops", "pos", "hashColor", "str", "alpha", "nameHue", "PATH_SATURATION", "PATH_LIGHTNESS", "REFERENCE_RAMP_MAX_HUE", "REFERENCE_RAMP_SATURATION", "REFERENCE_RAMP_LIGHTNESS", "REFERENCE_RAMP_ALT_RGB", "REFERENCE_RAMP_ALT_COLOR", "REFERENCE_RAMP_ALT_CSS", "computeReferenceRamp", "graph", "domain", "midpoints", "referenceMidpoints", "min", "max", "mid", "computeColorSchemeRange", "minDepth", "maxDepth", "minLength", "maxLength", "maxRank", "getNodeColor", "node", "nodeIndex", "colorScheme", "range", "ramp", "frac", "hue", "into", "candidates", "isPolylineInBounds", "bounds", "hit", "isBezierInBounds", "cMinX", "cMaxX", "cMinY", "cMaxY", "paletteCache", "pathPaletteOf", "palette", "pathColorByIndex", "pathIndexByName", "paths", "pathHueAt", "slotsCache", "NO_SLOTS", "pathSlotsOf", "slots", "pathIdx", "path", "nodeId", "visits", "buildGeometry", "options", "nodePositions", "nodeById", "contigThickness", "connectorThickness", "drawPaths", "nodeWidth", "highlight", "axis", "linearLayout", "viewportBounds", "referenceRamp", "deletions", "deletionRoutes", "hiddenEdges", "version", "depthNorm", "meanDepth", "yToXOf", "sharedCurves", "baseEdgeCurves", "nodeStrokes", "nodeStrokeRuns", "arrows", "arrowRuns", "edgeCurves", "edgeCurveRuns", "colorRange", "nodeIndexMap", "pathCount", "pathColorByName", "name", "nodePathSlots", "showArrows", "ei", "baseCurves", "numPaths", "isDeletion", "onWalk", "edgeThickness", "ribbons", "plainEdgeColor", "edgeColor", "toNode", "intoHalfWidth", "nodeWidthPx", "inView", "stroke", "thickness", "dash", "dashCurves", "arrowOn", "head", "edgeCurveStart", "arrowStart", "laneWalks", "fromNode", "width", "laneWidth", "worldPerScreenPx", "walk", "lane", "offset", "translateCurves", "offsets", "pathRibbonOffsets", "arrowRibbon", "ribbonColor", "edgeCurveCount", "arrowCount", "faded", "own", "nodeThickness", "start", "slotWidth", "drawable", "lanes", "laneColor", "slot", "stripe", "count", "WALK_FIELDS", "WALK_SCHEMES", "FAMILIES", "isField", "v", "f", "isScheme", "s", "resolveEncoding", "layer", "reference", "picked", "alone", "askedField", "askedScheme", "field", "family", "scheme", "BASE_T", "toLinear", "c", "toGamma", "oklab", "hex", "g", "b", "l", "m", "oklabToRgb", "L", "a", "schemeRgb", "t", "x", "hslToRgb", "REFERENCE_RAMP_MAX_HUE", "from", "to", "schemeCss", "r", "schemeColor", "packAbgr", "encodedColor", "NO_VALUE_COLOR", "REFERENCE_RAMP_ALT_COLOR", "encodingStops", "_", "i"]
@@ -0,0 +1,2 @@
1
+ import{a as pe,c as me,d as de}from"./chunk-ZMOMFU2B.js";var J=1,be=2,$=4;function We(s,a,c){return c?{...s,walkRowRuns:ke(s,a)}:s}function Re(s){let a=pe(s),c=me(s);return{name:s,sample:a,haplotype:c===void 0?void 0:+c.slice(a.length+1),contig:de(s)}}var K=class{constructor(){this.start=[];this.bp=[];this.referenceStart=[];this.flags=[];this.offsets=[0]}get length(){return this.bp.length}push(a,c,d,R){this.start.push(a),this.bp.push(c),this.flags.push(d),this.referenceStart.push(R)}endRow(){this.offsets.push(this.bp.length)}};function ke({nodes:s,walks:a},c){let d=s.lengths.length,R=e=>e<d?s.lengths[e]:0,S=[];for(let e=0;e<a.names.length;e++)a.offsets[e+1]>a.offsets[e]&&S.push({...Re(a.names[e]),start:a.starts[e],from:a.offsets[e],to:a.offsets[e+1]});let A=S.filter(e=>e.name===S[0]?.name).sort((e,n)=>e.start-n.start),D=A[0],Q=S.filter(e=>e.name!==D?.name);if(!D||Q.length===0)return;let H=new Map;for(let e of Q){let n=H.get(e.name);n?n.push(e):H.set(e.name,[e])}let m=new Float64Array(s.names.length).fill(Number.NaN),F=new Float64Array(s.names.length),X=!1,Y=!1,b=c&&c.end>c.start?c:void 0;for(let e of A){let n=e.start;for(let w=e.from;w<e.to;w++){let g=a.steps[w],o=R(g);Number.isNaN(m[g])&&(m[g]=n,F[g]=n+o,b&&(X||=n+o<=b.start,Y||=n>=b.end)),n+=o}}let he=b===void 0||X&&Y,u=new K,h=new Int32Array(0),k=new Float64Array(0),Z=e=>{let n=e[0],w=[...e].sort((t,r)=>t.start-r.start),g=w.length-1;for(let t of w)g+=t.to-t.from;g>h.length&&(h=new Int32Array(g*2),k=new Float64Array(g*2));let o=0,oe=!1,W;for(let t of w){W!==void 0&&t.start<W&&(oe=!0),W!==void 0&&t.start>W&&(h[o]=-(t.start-W),k[o++]=W);let r=t.start;for(let l=t.from;l<t.to;l++){let f=a.steps[l];h[o]=f,k[o++]=r,r+=f<d?s.lengths[f]:0}W=r}let we=(t,r)=>{let l=t>=0?t:r,f=-1;for(let _=1;f<0&&_<o;_++)for(let j of[l-_,l+_]){let ue=j>=0&&j<o?h[j]:-1;f<0&&ue>=0&&!Number.isNaN(m[ue])&&(f=j)}if(f<0)return;let i=f>l==m[h[f]]>m[h[l]],p=i===(l===t),I=p?o-1:0,y=h[I],B=y>=0&&!Number.isNaN(m[y]);return{stop:{contigEnds:B,shortBp:B?Math.max(0,b.start-F[y],m[y]-b.end):0},lo:p?l+1:0,hi:p?o:l,backward:!i,axisStart:i?p?V(l):k[0]:p?V(o-1):k[l]}},V=t=>{let r=h[t];return k[t]+(r<0?-r:R(r))},O=0,T=o,G=!1,le=!0,P=-1,fe=-1,q,z;if(b&&he){let t=-1,r=-1,l=-1/0,f=1/0;for(let i=0;i<o;i++){let p=h[i];p>=0&&!Number.isNaN(m[p])&&(F[p]<=b.start&&F[p]>l&&(l=F[p],t=i),m[p]>=b.end&&m[p]<f&&(f=m[p],r=i))}if(t<0||r<0){le=!1;let i=t>=0||r>=0?we(t,r):void 0;i&&({lo:O,hi:T,backward:G,axisStart:q,stop:z}=i)}else O=Math.min(t,r)+1,T=Math.max(t,r),G=t>r,P=t,fe=r}let Ne=oe||o===0?void 0:q!==void 0?{contig:n.contig,start:q,reversed:G}:P<0?{contig:n.contig,start:k[0],reversed:!1}:P<fe?{contig:n.contig,start:V(P),reversed:!1}:{contig:n.contig,start:k[P],reversed:!0},v=0,ie=0,ce=0,M=0,N=-1,x=0,U=Number.NaN;for(let t=O;t<T;t++){let r=h[G?T-1-(t-O):t];if(r<0){u.push(v,-r,$,Number.NaN),N=u.length-1,x=$,U=Number.NaN,v+=-r,ce+=-r,M=0;continue}let l=R(r),f=m[r],i=!Number.isNaN(f),p=U,I=N>=0&&!Number.isNaN(p),y=i&&I&&M>=0&&p+(u.bp[N]??0)===f,B=i&&I&&M<=0&&F[r]===p;!i&&N>=0&&!(x&J)&&!(x&$)?u.bp[N]+=l:y||B?(u.bp[N]+=l,y||(U=f,u.referenceStart[N]=f,x|=be,u.flags[N]=x),M=y?1:-1):(x=i?J:0,U=i?f:Number.NaN,u.push(v,l,x,U),N=u.length-1,M=0),v+=l,i||(ie+=l)}return u.endRow(),{name:n.name,label:n.haplotype===void 0?n.sample:`${n.sample}#${n.haplotype}`,sample:n.sample,haplotype:n.haplotype,bp:v,offReferenceBp:ie,gapBp:ce,complete:le,...z?{stop:z}:{},axis:Ne}},ge=Z(A),L=[...H.values()].map(e=>({meta:Z(e),row:u.offsets.length-2}));L.sort((e,n)=>Number(n.meta.complete)-Number(e.meta.complete)||n.meta.bp-e.meta.bp||e.meta.label.localeCompare(n.meta.label));let ee=[0,...L.map(e=>e.row)],C=u.length,te=new Uint32Array(ee.length+1),ne=new Float64Array(C),re=new Float64Array(C),se=new Float64Array(C),ae=new Uint8Array(C),E=0;return ee.forEach((e,n)=>{let w=u.offsets[e],g=u.offsets[e+1];for(let o=w;o<g;o++,E++)ne[E]=u.start[o],re[E]=u.bp[o],se[E]=u.referenceStart[o],ae[E]=u.flags[o];te[n+1]=E}),{origin:b?b.start:D.start,rows:[ge,...L.map(e=>e.meta)],offsets:te,start:ne,bp:re,referenceStart:se,flags:ae}}function ye(s,a){let c=s.flags[a],d={start:s.start[a],bp:s.bp[a],onReference:(c&J)!==0};return c&$?d.gap=!0:d.referenceStart=Number.isNaN(s.referenceStart[a])?void 0:s.referenceStart[a],c&be&&(d.reversed=!0),d}function xe(s,a){let c=s.rows.map((d,R)=>{let S=[];for(let A=s.offsets[R];A<s.offsets[R+1];A++)S.push(ye(s,A));return{...d,runs:S}});return{origin:s.origin,unit:a,reference:c[0],rows:c.slice(1)}}export{We as a,Re as b,ke as c,xe as d};
2
+ //# sourceMappingURL=chunk-FVK2THE4.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/RgfaTabixAdapter/walkRowRuns.ts"],
4
+ "sourcesContent": ["import {\n panSNContig,\n panSNHaplotype,\n panSNSample,\n} from '@jbrowse/bandage-core/pansn'\n\nimport type { GraphTables } from '@jbrowse/bandage-core/gfa/graphTables'\nimport type {\n WalkAxis,\n WalkRow,\n WalkRows,\n WalkRun,\n WalkStop,\n} from '@jbrowse/bandage-core/layout/walkRows'\n\nconst RUN_ON_REFERENCE = 1\nconst RUN_REVERSED = 2\nconst RUN_GAP = 4\n\ntype WalkRowMeta = Omit<WalkRow, 'runs'>\n\n/**\n * A cut for walk rows: the tables, and the rows' runs over the window, which\n * the main thread draws without a Graph of the walks' steps\n */\nexport type WalkCut = GraphTables & { walkRowRuns?: WalkRowRuns }\n\nexport function walkCutFor(\n tables: GraphTables,\n region: { start: number; end: number },\n walkRows: boolean | undefined,\n): WalkCut {\n return walkRows\n ? { ...tables, walkRowRuns: walkRowRuns(tables, region) }\n : tables\n}\n\n/**\n * bandage-core's `walkRows` over a cut's tables, each row's runs as typed\n * arrays that cross from the worker beside the tables. Row 0 is the\n * reference.\n */\nexport interface WalkRowRuns {\n origin: number\n rows: WalkRowMeta[]\n offsets: Uint32Array\n start: Float64Array\n bp: Float64Array\n referenceStart: Float64Array\n flags: Uint8Array\n}\n\n/**\n * A walk's PanSN fields: `HG002#1#chr1`, or a pggb P-line's `chm13#chr1`,\n * which has no haplotype\n */\nexport function walkPath(name: string) {\n const sample = panSNSample(name)\n const haplotype = panSNHaplotype(name)\n return {\n name,\n sample,\n haplotype:\n haplotype === undefined ? undefined : +haplotype.slice(sample.length + 1),\n contig: panSNContig(name),\n }\n}\n\ntype Path = ReturnType<typeof walkPath> & {\n start: number\n from: number\n to: number\n}\n\nclass RunWriter {\n start: number[] = []\n bp: number[] = []\n referenceStart: number[] = []\n flags: number[] = []\n offsets = [0]\n\n get length() {\n return this.bp.length\n }\n\n push(start: number, bp: number, flags: number, referenceStart: number) {\n this.start.push(start)\n this.bp.push(bp)\n this.flags.push(flags)\n this.referenceStart.push(referenceStart)\n }\n\n endRow() {\n this.offsets.push(this.bp.length)\n }\n}\n\n/**\n * `walkRows(graphFromTables(tables), region)` for a cut whose first walk is\n * the reference, which every walk-file and GBZ cut is, in as many pieces as\n * the cut breaks it into; a step is a node index. A gap between two pieces of\n * one haplotype is a step of `-bp`. Two differences: a walk reaching only one of the region's flanks measures from\n * that flank, where walkRows takes the whole walk the cut holds, so its length\n * is a lower bound that no longer grows with the cut's context; and a row\n * keeps its walk's name whole, where graphFromTables reads a two-part name\n * (`chm13#chr1`) as a haplotype `chr1` with no contig.\n */\nexport function walkRowRuns(\n { nodes: n, walks: w }: GraphTables,\n region?: { start: number; end: number },\n): WalkRowRuns | undefined {\n const declared = n.lengths.length\n const lengthOf = (node: number) => (node < declared ? n.lengths[node]! : 0)\n const paths: Path[] = []\n for (let p = 0; p < w.names.length; p++) {\n if (w.offsets[p + 1]! > w.offsets[p]!) {\n paths.push({\n ...walkPath(w.names[p]!),\n start: w.starts[p]!,\n from: w.offsets[p]!,\n to: w.offsets[p + 1]!,\n })\n }\n }\n const referencePieces = paths\n .filter(p => p.name === paths[0]?.name)\n .sort((a, b) => a.start - b.start)\n const first = referencePieces[0]\n const others = paths.filter(p => p.name !== first?.name)\n if (!first || others.length === 0) {\n return undefined\n }\n const walks = new Map<string, Path[]>()\n for (const path of others) {\n const list = walks.get(path.name)\n if (list) {\n list.push(path)\n } else {\n walks.set(path.name, [path])\n }\n }\n\n const spanStart = new Float64Array(n.names.length).fill(Number.NaN)\n const spanEnd = new Float64Array(n.names.length)\n let flankedBefore = false\n let flankedAfter = false\n const cut = region && region.end > region.start ? region : undefined\n for (const piece of referencePieces) {\n let pos = piece.start\n for (let s = piece.from; s < piece.to; s++) {\n const node = w.steps[s]!\n const len = lengthOf(node)\n if (Number.isNaN(spanStart[node]!)) {\n spanStart[node] = pos\n spanEnd[node] = pos + len\n if (cut) {\n flankedBefore ||= pos + len <= cut.start\n flankedAfter ||= pos >= cut.end\n }\n }\n pos += len\n }\n }\n const flanked = cut === undefined || (flankedBefore && flankedAfter)\n\n const out = new RunWriter()\n let steps = new Int32Array(0)\n let stepStart = new Float64Array(0)\n const rowOf = (pieces: Path[]): WalkRowMeta => {\n const path = pieces[0]!\n const ordered = [...pieces].sort((a, b) => a.start - b.start)\n // the walk's steps, each piece's gap from the last as a step of -bp\n let count = ordered.length - 1\n for (const piece of ordered) {\n count += piece.to - piece.from\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 overlaps = false\n let end: number | undefined\n for (const piece of ordered) {\n if (end !== undefined && piece.start < end) {\n overlaps = true\n }\n if (end !== undefined && piece.start > end) {\n steps[length] = -(piece.start - end)\n stepStart[length++] = end\n }\n let pos = piece.start\n for (let s = piece.from; s < piece.to; s++) {\n const node = w.steps[s]!\n steps[length] = node\n stepStart[length++] = pos\n pos += node < declared ? n.lengths[node]! : 0\n }\n end = pos\n }\n // A walk with one flank, whose contig ends inside the window: the steps\n // past that flank, read in the reference's direction. Which side is\n // inside follows the walk's direction along the reference at the\n // flank, from the nearest other step on it.\n const partialSide = (i0: number, i1: number) => {\n const flank = i0 >= 0 ? i0 : i1\n let near = -1\n for (let d = 1; near < 0 && d < length; d++) {\n for (const j of [flank - d, flank + d]) {\n const id = j >= 0 && j < length ? steps[j]! : -1\n if (near < 0 && id >= 0 && !Number.isNaN(spanStart[id]!)) {\n near = j\n }\n }\n }\n if (near < 0) {\n return undefined\n }\n const forward =\n near > flank === spanStart[steps[near]!]! > spanStart[steps[flank]!]!\n const after = forward === (flank === i0)\n const end = after ? length - 1 : 0\n const endId = steps[end]!\n const contigEnds = endId >= 0 && !Number.isNaN(spanStart[endId]!)\n const stop: WalkStop = {\n contigEnds,\n shortBp: contigEnds\n ? Math.max(\n 0,\n cut!.start - spanEnd[endId]!,\n spanStart[endId]! - cut!.end,\n )\n : 0,\n }\n return {\n stop,\n lo: after ? flank + 1 : 0,\n hi: after ? length : flank,\n backward: !forward,\n axisStart: forward\n ? after\n ? stepEnd(flank)\n : stepStart[0]!\n : after\n ? stepEnd(length - 1)\n : stepStart[flank]!,\n }\n }\n const stepEnd = (i: number) => {\n const id = steps[i]!\n return stepStart[i]! + (id < 0 ? -id : lengthOf(id))\n }\n\n let lo = 0\n let hi = length\n let backward = false\n let complete = true\n let from = -1\n let to = -1\n let axisStart: number | undefined\n let stop: WalkStop | undefined\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 id = steps[i]!\n if (id >= 0 && !Number.isNaN(spanStart[id]!)) {\n if (spanEnd[id]! <= cut.start && spanEnd[id]! > bestEnd) {\n bestEnd = spanEnd[id]!\n i0 = i\n }\n if (spanStart[id]! >= cut.end && spanStart[id]! < bestStart) {\n bestStart = spanStart[id]!\n i1 = i\n }\n }\n }\n if (i0 < 0 || i1 < 0) {\n complete = false\n const inside = i0 >= 0 || i1 >= 0 ? partialSide(i0, i1) : undefined\n if (inside) {\n ;({ lo, hi, backward, axisStart, stop } = inside)\n }\n } else {\n lo = Math.min(i0, i1) + 1\n hi = Math.max(i0, i1)\n backward = i0 > i1\n from = i0\n to = i1\n }\n }\n const axis: WalkAxis | undefined =\n overlaps || length === 0\n ? undefined\n : axisStart !== undefined\n ? { contig: path.contig, start: axisStart, reversed: backward }\n : from < 0\n ? { contig: path.contig, start: stepStart[0]!, reversed: false }\n : from < to\n ? { contig: path.contig, start: stepEnd(from), reversed: false }\n : { contig: path.contig, start: stepStart[from]!, reversed: true }\n\n let bp = 0\n let offReferenceBp = 0\n let gapBp = 0\n let step = 0\n let lastAt = -1\n let lastFlags = 0\n let lastRef = Number.NaN\n for (let k = lo; k < hi; k++) {\n const id = steps[backward ? hi - 1 - (k - lo) : k]!\n if (id < 0) {\n out.push(bp, -id, RUN_GAP, Number.NaN)\n lastAt = out.length - 1\n lastFlags = RUN_GAP\n lastRef = Number.NaN\n bp += -id\n gapBp += -id\n step = 0\n continue\n }\n const len = lengthOf(id)\n const sStart = spanStart[id]!\n const onRef = !Number.isNaN(sStart)\n const at = lastRef\n const hasAt = lastAt >= 0 && !Number.isNaN(at)\n const forward =\n onRef && hasAt && step >= 0 && at + (out.bp[lastAt] ?? 0) === sStart\n const back = onRef && hasAt && step <= 0 && spanEnd[id] === at\n if (\n !onRef &&\n lastAt >= 0 &&\n !(lastFlags & RUN_ON_REFERENCE) &&\n !(lastFlags & RUN_GAP)\n ) {\n out.bp[lastAt]! += len\n } else if (forward || back) {\n out.bp[lastAt]! += len\n if (!forward) {\n lastRef = sStart\n out.referenceStart[lastAt] = sStart\n lastFlags |= RUN_REVERSED\n out.flags[lastAt] = lastFlags\n }\n step = forward ? 1 : -1\n } else {\n lastFlags = onRef ? RUN_ON_REFERENCE : 0\n lastRef = onRef ? sStart : Number.NaN\n out.push(bp, len, lastFlags, lastRef)\n lastAt = out.length - 1\n step = 0\n }\n bp += len\n if (!onRef) {\n offReferenceBp += len\n }\n }\n out.endRow()\n return {\n name: path.name,\n label:\n path.haplotype === undefined\n ? path.sample\n : `${path.sample}#${path.haplotype}`,\n sample: path.sample,\n haplotype: path.haplotype,\n bp,\n offReferenceBp,\n gapBp,\n complete,\n ...(stop ? { stop } : {}),\n axis,\n }\n }\n\n const reference = rowOf(referencePieces)\n const rowList = [...walks.values()].map(pieces => ({\n meta: rowOf(pieces),\n row: out.offsets.length - 2,\n }))\n rowList.sort(\n (a, b) =>\n Number(b.meta.complete) - Number(a.meta.complete) ||\n b.meta.bp - a.meta.bp ||\n a.meta.label.localeCompare(b.meta.label),\n )\n // rows in drawn order: the reference, then the sorted walks\n const order = [0, ...rowList.map(r => r.row)]\n const total = out.length\n const offsets = new Uint32Array(order.length + 1)\n const start = new Float64Array(total)\n const bpOut = new Float64Array(total)\n const referenceStart = new Float64Array(total)\n const flags = new Uint8Array(total)\n let at = 0\n order.forEach((row, i) => {\n const a = out.offsets[row]!\n const b = out.offsets[row + 1]!\n for (let k = a; k < b; k++, at++) {\n start[at] = out.start[k]!\n bpOut[at] = out.bp[k]!\n referenceStart[at] = out.referenceStart[k]!\n flags[at] = out.flags[k]!\n }\n offsets[i + 1] = at\n })\n return {\n origin: cut ? cut.start : first.start,\n rows: [reference, ...rowList.map(r => r.meta)],\n offsets,\n start,\n bp: bpOut,\n referenceStart,\n flags,\n }\n}\n\nfunction runAt(t: WalkRowRuns, k: number): WalkRun {\n const f = t.flags[k]!\n const run: WalkRun = {\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 } else {\n run.referenceStart = Number.isNaN(t.referenceStart[k]!)\n ? undefined\n : t.referenceStart[k]\n }\n if (f & RUN_REVERSED) {\n run.reversed = true\n }\n return run\n}\n\n/** The rows as bandage-core's `WalkRows`, a run object per run */\nexport function walkRowsOf(t: WalkRowRuns, unit?: number): WalkRows {\n const rows = t.rows.map((meta, i) => {\n const runs: WalkRun[] = []\n for (let k = t.offsets[i]!; k < t.offsets[i + 1]!; k++) {\n runs.push(runAt(t, k))\n }\n return { ...meta, runs }\n })\n return { origin: t.origin, unit, reference: rows[0]!, rows: rows.slice(1) }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["RUN_ON_REFERENCE", "RUN_REVERSED", "RUN_GAP", "walkCutFor", "tables", "region", "walkRows", "walkRowRuns", "walkPath", "name", "sample", "panSNSample", "haplotype", "panSNHaplotype", "panSNContig", "RunWriter", "start", "bp", "flags", "referenceStart", "n", "w", "declared", "lengthOf", "node", "paths", "p", "referencePieces", "a", "b", "first", "others", "walks", "path", "list", "spanStart", "spanEnd", "flankedBefore", "flankedAfter", "cut", "piece", "pos", "s", "len", "flanked", "out", "steps", "stepStart", "rowOf", "pieces", "ordered", "count", "length", "overlaps", "end", "partialSide", "i0", "i1", "flank", "near", "d", "id", "forward", "after", "endId", "contigEnds", "stepEnd", "i", "lo", "hi", "backward", "complete", "from", "to", "axisStart", "stop", "bestEnd", "bestStart", "inside", "axis", "offReferenceBp", "gapBp", "step", "lastAt", "lastFlags", "lastRef", "k", "sStart", "onRef", "at", "hasAt", "back", "reference", "rowList", "order", "r", "total", "offsets", "bpOut", "row", "runAt", "t", "f", "run", "walkRowsOf", "unit", "rows", "meta", "runs"]
7
+ }
@@ -1,2 +1,2 @@
1
- import{g as f}from"./chunk-6OPB7FOJ.js";import{F as u,H as k,c as s,n as p,o as l,p as d,q as g,r as m}from"./chunk-E3WYW7Z6.js";import{b as t,c as o}from"./chunk-JMBDTNUR.js";function O({title:y,label:C,caption:h,testId:D,options:r,initial:b,optionLabel:c=i=>i,confirmLabel:v,onPick:x,onClose:n}){let[i,A]=f(()=>b.filter(e=>r.includes(e)));return o(s,{open:!0,onClose:n,title:y,children:[o(m,{children:[t(p,{multiple:!0,disableCloseOnSelect:!0,"data-testid":D,options:r,getOptionLabel:c,value:i,onChange:(e,a)=>{A(a)},renderOption:({key:e,...a},B,{selected:N})=>o("li",{...a,children:[t(d,{size:"small",checked:N}),c(B)]},e),renderInput:e=>t(u,{...e,autoFocus:!0,label:C,placeholder:"type to search"})}),t(k,{variant:"caption",color:"text.secondary",children:h})]}),o(g,{children:[t(l,{onClick:n,children:"Cancel"}),t(l,{variant:"contained",onClick:()=>{x(i),n()},children:v(i)})]})]})}export{O as a};
2
- //# sourceMappingURL=chunk-AHFQHYJI.js.map
1
+ import{h as f}from"./chunk-YU7T5WOQ.js";import{F as u,H as k,d as s,n as p,o as l,p as d,q as g,r as m}from"./chunk-UGCNPRKC.js";import{b as t,c as o}from"./chunk-JMBDTNUR.js";function O({title:y,label:C,caption:h,testId:D,options:r,initial:b,optionLabel:c=i=>i,confirmLabel:v,onPick:x,onClose:n}){let[i,A]=f(()=>b.filter(e=>r.includes(e)));return o(s,{open:!0,onClose:n,title:y,children:[o(m,{children:[t(p,{multiple:!0,disableCloseOnSelect:!0,"data-testid":D,options:r,getOptionLabel:c,value:i,onChange:(e,a)=>{A(a)},renderOption:({key:e,...a},B,{selected:N})=>o("li",{...a,children:[t(d,{size:"small",checked:N}),c(B)]},e),renderInput:e=>t(u,{...e,autoFocus:!0,label:C,placeholder:"type to search"})}),t(k,{variant:"caption",color:"text.secondary",children:h})]}),o(g,{children:[t(l,{onClick:n,children:"Cancel"}),t(l,{variant:"contained",onClick:()=>{x(i),n()},children:v(i)})]})]})}export{O as a};
2
+ //# sourceMappingURL=chunk-IBWORBGY.js.map
@@ -0,0 +1,2 @@
1
+ import{a as m}from"./chunk-FVK2THE4.js";import{d as i,e as u,g as o,h as l}from"./chunk-FHZXW7IG.js";import{f as d}from"./chunk-ZMOMFU2B.js";var c={steps:"walkStepBudget",bytes:"walkByteBudget"},g=class{constructor(r,e){this.file=r;this.adapter=e;this.reader=new o(r)}async haplotypeNames(r={}){let{haplotypes:e}=await this.reader.header(r);return e.length>0?e:void 0}budgets(){return{stepBudget:this.adapter.getConf("walkStepBudget"),byteBudget:this.adapter.getConf("walkByteBudget"),budgetNames:c}}async subgraph(r,e,{signal:s,haplotypes:n,walkRows:a}){let t=this.budgets(),{graph:p,kept:b,fragments:f}=await this.reader.cut(r,e,{...t,stepBudget:a?1/0:t.stepBudget,signal:s,keep:u(n?.map(h=>d(this.adapter,h)),r)});return m(p.tables(b,f),e,a)}async referenceNodes(r,e,s){let n=[];await l(this.file,r,await this.reader.queryStart(e.start,s),e.end,{signal:s.signal,lineCallback:t=>{let p=t.split(" ");p[3]==="ref"&&n.push(p)}});let a=new Set;return i(n).filter(t=>t.refName!==r||t.end<=e.start||t.start>=e.end||a.has(t.id)?!1:(a.add(t.id),!0))}};export{g as a};
2
+ //# sourceMappingURL=chunk-MND7GAOG.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/RgfaTabixAdapter/walkReader.ts"],
4
+ "sourcesContent": ["import { resolvePanSNPrefix } from '@jbrowse/bandage-core/pansn'\nimport { WalkReader, referenceNodes, walksKept } from '@jbrowse/graph-walks'\n\nimport { getLines } from '../tabixRange.ts'\nimport { walkCutFor } from './walkRowRuns.ts'\n\nimport type { SubgraphAdapterOptions } from '../GetSubgraph.ts'\nimport type { TabixIndexedFile } from '@gmod/tabix'\nimport type {\n BaseFeatureDataAdapter,\n BaseOptions,\n} from '@jbrowse/core/data_adapters/BaseAdapter'\n\n// The zoom-in notices name the config slots that set the budgets\nexport const BUDGET_SLOTS = {\n steps: 'walkStepBudget',\n bytes: 'walkByteBudget',\n}\n\n/**\n * A walk file and the answers both walk-indexed adapters give from it,\n * RgfaTabixAdapter and WalkTabixSyntenyAdapter, whose schemas declare the\n * budget slots. @jbrowse/graph-walks reads and cuts the file.\n */\nexport class WalkIndex {\n readonly reader: WalkReader\n\n constructor(\n readonly file: TabixIndexedFile,\n private adapter: BaseFeatureDataAdapter,\n ) {\n this.reader = new WalkReader(file)\n }\n\n /**\n * The haplotypes the header names, `sample#haplotype` in byte order, or\n * undefined when it names none\n */\n async haplotypeNames(opts: BaseOptions = {}) {\n const { haplotypes } = await this.reader.header(opts)\n return haplotypes.length > 0 ? haplotypes : undefined\n }\n\n budgets() {\n return {\n stepBudget: this.adapter.getConf('walkStepBudget') as number,\n byteBudget: this.adapter.getConf('walkByteBudget') as number,\n budgetNames: BUDGET_SLOTS,\n }\n }\n\n /**\n * The graph display's cut of a window: the reference walk, the walks of\n * `haplotypes` (every walk when unset), and the nodes and links they visit.\n * Walk rows draw runs, so the step budget spares them.\n */\n async subgraph(\n refName: string,\n region: { start: number; end: number },\n { signal, haplotypes, walkRows }: SubgraphAdapterOptions,\n ) {\n const budgets = this.budgets()\n const { graph, kept, fragments } = await this.reader.cut(refName, region, {\n ...budgets,\n stepBudget: walkRows ? Infinity : budgets.stepBudget,\n signal,\n keep: walksKept(\n haplotypes?.map(lane => resolvePanSNPrefix(this.adapter, lane)),\n refName,\n ),\n })\n return walkCutFor(graph.tables(kept, fragments), region, walkRows)\n }\n\n /**\n * The reference nodes overlapping a window, from the ref rows of its\n * chunks. A row's tabix interval is its chunk's first base, and gfa-to-tabix\n * files a node crossing in from a chunk before under that chunk, so the read\n * starts at queryStart.\n */\n async referenceNodes(\n refName: string,\n region: { start: number; end: number },\n opts: BaseOptions,\n ) {\n const refRows: string[][] = []\n await getLines(\n this.file,\n refName,\n await this.reader.queryStart(region.start, opts),\n region.end,\n {\n signal: opts.signal,\n lineCallback: line => {\n const cols = line.split('\\t')\n if (cols[3] === 'ref') {\n refRows.push(cols)\n }\n },\n },\n )\n const seen = new Set<number>()\n return referenceNodes(refRows).filter(node => {\n if (\n node.refName !== refName ||\n node.end <= region.start ||\n node.start >= region.end ||\n seen.has(node.id)\n ) {\n return false\n }\n seen.add(node.id)\n return true\n })\n }\n}\n"],
5
+ "mappings": "6IAcO,IAAMA,EAAe,CAC1B,MAAO,iBACP,MAAO,gBACT,EAOaC,EAAN,KAAgB,CAGrB,YACWC,EACDC,EACR,CAFS,UAAAD,EACD,aAAAC,EAER,KAAK,OAAS,IAAIC,EAAWF,CAAI,CACnC,CAMA,MAAM,eAAeG,EAAoB,CAAC,EAAG,CAC3C,GAAM,CAAE,WAAAC,CAAW,EAAI,MAAM,KAAK,OAAO,OAAOD,CAAI,EACpD,OAAOC,EAAW,OAAS,EAAIA,EAAa,MAC9C,CAEA,SAAU,CACR,MAAO,CACL,WAAY,KAAK,QAAQ,QAAQ,gBAAgB,EACjD,WAAY,KAAK,QAAQ,QAAQ,gBAAgB,EACjD,YAAaN,CACf,CACF,CAOA,MAAM,SACJO,EACAC,EACA,CAAE,OAAAC,EAAQ,WAAAH,EAAY,SAAAI,CAAS,EAC/B,CACA,IAAMC,EAAU,KAAK,QAAQ,EACvB,CAAE,MAAAC,EAAO,KAAAC,EAAM,UAAAC,CAAU,EAAI,MAAM,KAAK,OAAO,IAAIP,EAASC,EAAQ,CACxE,GAAGG,EACH,WAAYD,EAAW,IAAWC,EAAQ,WAC1C,OAAAF,EACA,KAAMM,EACJT,GAAY,IAAIU,GAAQC,EAAmB,KAAK,QAASD,CAAI,CAAC,EAC9DT,CACF,CACF,CAAC,EACD,OAAOW,EAAWN,EAAM,OAAOC,EAAMC,CAAS,EAAGN,EAAQE,CAAQ,CACnE,CAQA,MAAM,eACJH,EACAC,EACAH,EACA,CACA,IAAMc,EAAsB,CAAC,EAC7B,MAAMC,EACJ,KAAK,KACLb,EACA,MAAM,KAAK,OAAO,WAAWC,EAAO,MAAOH,CAAI,EAC/CG,EAAO,IACP,CACE,OAAQH,EAAK,OACb,aAAcgB,GAAQ,CACpB,IAAMC,EAAOD,EAAK,MAAM,GAAI,EACxBC,EAAK,CAAC,IAAM,OACdH,EAAQ,KAAKG,CAAI,CAErB,CACF,CACF,EACA,IAAMC,EAAO,IAAI,IACjB,OAAOC,EAAeL,CAAO,EAAE,OAAOM,GAElCA,EAAK,UAAYlB,GACjBkB,EAAK,KAAOjB,EAAO,OACnBiB,EAAK,OAASjB,EAAO,KACrBe,EAAK,IAAIE,EAAK,EAAE,EAET,IAETF,EAAK,IAAIE,EAAK,EAAE,EACT,GACR,CACH,CACF",
6
+ "names": ["BUDGET_SLOTS", "WalkIndex", "file", "adapter", "WalkReader", "opts", "haplotypes", "refName", "region", "signal", "walkRows", "budgets", "graph", "kept", "fragments", "walksKept", "lane", "resolvePanSNPrefix", "walkCutFor", "refRows", "getLines", "line", "cols", "seen", "referenceNodes", "node"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as N,b as st}from"./chunk-BUY2PV7D.js";import{a as je,b as q,c as Ke,d as se,e as qe,f as Je,g as Ue,h as Qe,i as et,j as tt,k as ot,l as nt,m as J,n as rt,p as lt,r as pt,s as ct}from"./chunk-2MCOY3YG.js";import{A as Oe,H as ne,I as j,L as Fe,N as Ve,a as b,e as Ce,l as Te,m as He,n as ze,o as We,p as $,pa as Ye,q as _e,qa as Ze,r as Ne,ta as ie,va as $e,wa as at,xa as it,z as Ae}from"./chunk-NWJYLP6Z.js";import{k as _}from"./chunk-VJ3SO4CH.js";import{C as Ie,J as Ee,K as Be,L as De,Ra as T,Va as re,Xa as ae,Z as Xe,Za as K,a as B,b as he,p as Le,w as Ge}from"./chunk-WEGWTC52.js";import{e as G}from"./chunk-NDRLCGPC.js";import{j as X}from"./chunk-TENPGIPX.js";import{d as R,e as Pe,f as Re,g as E,h as M}from"./chunk-YU7T5WOQ.js";import{D as Me,G as Z,H as D,b as me,c as ge,e as oe,k as ye,o as ve,p as be,s as we,v as Y,w as Se,y as xe,z as ke}from"./chunk-UGCNPRKC.js";import{a as w,b as o,c as u,d as f}from"./chunk-JMBDTNUR.js";var H=JBrowseExports["@jbrowse/render-core/useRenderingBackend"],Ot=t=>H!=null&&t in Object(H)?H[t]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+t+"' from '@jbrowse/render-core/useRenderingBackend' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:t});var dt=Ot("useRenderingBackend"),Ao=H&&H.__esModule?H.default:H;var le=je(1);function pe({model:t}){let[e,n]=M(null);return R(()=>{if(!e)return;let r=new T(e),a=B(()=>{r.resize(t.paneWidth,t.canvasHeight),t.paintHover(r,t.drawnBatch)});return()=>{a(),r.dispose()}},[e,t]),o("canvas",{ref:n,"data-testid":"graph-hover-layer",style:le})}var ut={background:"rgba(255,255,255,0.82)",padding:"3px 6px",fontSize:11,lineHeight:"15px",whiteSpace:"nowrap"},U={display:"flex",alignItems:"center",gap:5},ft={color:"#666"};function ht(t){return t.length===1?t[0].color:`linear-gradient(to right, ${t.map(e=>`${e.color} ${e.offset*100}%`).join(", ")})`}var Ft={width:se,flex:"none",textAlign:"center",fontFamily:"monospace",fontSize:12};function ce({swatch:t}){let e=qe(t),n={width:e,flex:"none"};switch(t.kind){case"fill":return o("div",{style:{...n,height:t.height??8,borderRadius:t.square?0:2,background:ht(t.stops)}});case"bands":return o("div",{style:n,children:t.bands.map((r,a)=>o("div",{style:{height:t.bands.length>1?3:4,background:ht(r)}},a))});case"line":return o("div",{style:{...n,height:3,borderRadius:2,background:t.color}});case"halo":return o("svg",{width:e,height:10,style:{flex:"none"},children:o("line",{x1:5,y1:5,x2:13,y2:5,stroke:t.color,strokeOpacity:.35,strokeWidth:8,strokeLinecap:"round"})});case"outline":return o("div",{style:{...n,height:t.height,boxSizing:"border-box",border:`${t.stroke}px solid ${t.color}`,borderRadius:t.radius}});case"overhang":return o("svg",{width:e,height:10,style:{flex:"none"},children:o("path",{d:"M0,5 L8,0 L8,10 Z M18,5 L10,0 L10,10 Z",fill:"#18181c"})});case"glyph":return o("span",{style:Ft,children:t.char});case"tick":return o("div",{style:{...n,height:t.height,display:"flex",justifyContent:"center",background:t.backing},children:o("div",{style:{width:2,backgroundColor:t.color}})});case"bracket":return o("svg",{width:e,height:7,style:{flex:"none"},children:o("path",{d:`M0.5,6 V1.5 H5.5 V6 M8.5,6 V1.5 H${se-.5} V6`,fill:"none",stroke:Xe()})});case"blank":return o("span",{style:n})}}function Q({row:t,at:e,hint:n,after:r}){return t.swatch?u("div",{title:[t.title,n].filter(Boolean).join(" \xB7 ")||void 0,children:[u("div",{style:U,children:[o(ce,{swatch:t.swatch}),u("span",{children:[t.strong?o("strong",{children:t.strong}):null,t.label]}),r]}),e?o("div",{"data-testid":"graph-walk-at",children:e}):t.under?o("div",{children:t.under}):null]}):o("div",{style:ft,children:t.label})}var Vt={pointerEvents:"auto",cursor:"pointer",border:"none",background:"none",padding:"0 2px",font:"inherit",textDecoration:"underline"},mt=f(function({model:e}){return o(w,{children:et(e).map(({testid:n,rows:r})=>o("div",{style:ut,"data-testid":n,children:r.map(a=>o(Q,{row:a,at:a.walk?e.hoveredOn(a.walk):void 0,after:a.closesBubble?o("button",{type:"button",style:Vt,"data-testid":"graph-close-bubble",onClick:()=>{e.closeBubbles()},children:"close"}):null},a.key))},n))})});var Xt=1.1,Yt=100,Zt=40,$t=800,jt=10,gt=2;function de(t){let e=t.deltaY*(t.deltaMode===1?Zt:t.deltaMode===2?$t:1),n=(t.ctrlKey?jt:1)*e/Yt;return Xt**-Math.max(-gt,Math.min(gt,n))}function ee(t,e){R(()=>{if(!t)return;let n=r=>{if(e.hostPlacesX)return;e.host&&r.stopPropagation(),r.preventDefault();let a=t.getBoundingClientRect();e.zoom(de(r),r.clientX-a.left,r.clientY-a.top)};return t.addEventListener("wheel",n,{passive:!1}),()=>{t.removeEventListener("wheel",n)}},[t,e])}var Kt=3;function yt(t){let e=E({x:0,y:0}),n=E({x:0,y:0}),r=E(!1),a=E({frame:0,pan:null,hover:null});R(()=>()=>{cancelAnimationFrame(a.current.frame)},[]);let[p,l]=M(),[c,i]=M(void 0);function d(s){let m=s.currentTarget.getBoundingClientRect();return{x:s.clientX-m.left,y:s.clientY-m.top}}function g(s,m){if(t.layoutResult?.tubeMap)return t.tubeMapNodeAt(s,m);let y=t.referenceStripNodeAt(s,m);if(y)return y;let{nodePositions:h}=t;if(!h)return null;let{x:v,y:x}=ne(s,m,t,t.axisScale);return re(h,v,x,t.axisScale,t.positionsVersion,t.nodeInk)}function C(s,m){let{nodePositions:y,graph:h}=t;if(!y||!h)return null;let{x:v,y:x}=ne(s,m,t,t.axisScale);return ae(y,h,v,x,t.axisScale,t.effectiveDrawPaths&&!t.facetPanels,t.positionsVersion,t.deletionEdgeIndexes,t.hiddenEdgeIndexes,t.deletionRoutes,t.layoutResult?.stranded)}function L(s){s.button===0&&(s.preventDefault(),t.host&&!t.hostPlacesX&&s.stopPropagation())}function te(s){if(s.button===0){if(r.current=!1,n.current={x:s.clientX,y:s.clientY},t.hostPlacesX)return;s.currentTarget.setPointerCapture(s.pointerId);let{x:m,y}=d(s),h=t.layoutResult?.tubeMap||s.nativeEvent.offsetY<t.referenceStripZonePx?null:g(m,y);h?t.setDraggingNode(h):t.setPanning(!0),e.current={x:s.clientX,y:s.clientY}}}function I(){let s=a.current,{pan:m,hover:y}=s;if(s.frame=0,s.pan=null,s.hover=null,m&&t.setTransform(t.scale,t.translateX+m.dx,t.translateY+m.dy),!y)return;let{x:h,y:v}=y,x=t.facetPanels?void 0:tt(t.overlayLabels,h,v);i(k=>k?.label===x?.label&&k?.readout===x?.readout?k:x);let W=t.walkRowBars;if(W){let k=t.walkRowAt(h,v);t.setHoveredWalkRow(k===void 0?null:[W.reference,...W.rows][k].name)}if(t.nodePositions&&t.graph){let k=g(h,v);t.setHoveredPanel(t.tubeMapPanelAt(v)),t.setHoveredNode(k,{x:h,y:v}),t.setHoveredTube(k===null&&t.layoutResult?.tubeMap?t.tubeAt(h,v):null),t.setHoveredEdge(k||t.layoutResult?.tubeMap||!t.hoverLightsEverything?null:C(h,v))}}function z(){a.current.frame||(a.current.frame=requestAnimationFrame(I))}function F(){let s=a.current;cancelAnimationFrame(s.frame),s.frame=0,s.pan=null,s.hover=null}function V(s){let m=s.clientX-e.current.x,y=s.clientY-e.current.y;e.current={x:s.clientX,y:s.clientY},Math.hypot(s.clientX-n.current.x,s.clientY-n.current.y)>Kt&&(r.current=!0);let h=a.current;if(t.draggingNode)t.moveNode(t.draggingNode,m/t.scaleX,y/t.scaleY);else if(t.isPanning)h.pan={dx:(h.pan?.dx??0)+m,dy:(h.pan?.dy??0)+y},z();else{let v=s.currentTarget.getBoundingClientRect();h.hover={x:s.clientX-v.left,y:s.clientY-v.top},z()}}function A(){G(t)&&t.stopDragging()}function S(){F(),i(void 0),G(t)&&(t.stopDragging(),t.clearHover())}function P(s){let{x:m,y}=d(s),h=g(m,y),{clientX:v,clientY:x}=s;if(h){s.preventDefault(),l({clientX:v,clientY:x,nodeId:h});return}let W=t.walkRowAt(m,y);W!==void 0&&(s.preventDefault(),l({clientX:v,clientY:x,row:W}))}function Dt(s){if(!r.current){let{x:m,y}=d(s),h=g(m,y);t.setSelectedNode(h),h&&t.showNodeDetails(h)}}return{canvasStyle:{cursor:t.isPanning||t.draggingNode?"grabbing":"grab",touchAction:t.hostPlacesX?"auto":"none",overscrollBehavior:"contain"},handlers:{onMouseDown:L,onPointerDown:te,onPointerMove:V,onPointerUp:A,onPointerCancel:A,onLostPointerCapture:A,onPointerLeave:S,onClick:Dt,onContextMenu:P},contextMenu:p,hoveredChip:c,closeContextMenu:()=>{l(void 0)}}}var qt={position:"absolute",left:0,top:0,zIndex:4,display:"grid",gap:Be,lineHeight:"normal"},Jt={height:De,padding:"2px 6px",boxSizing:"border-box",fontFamily:"inherit",fontSize:11,color:"inherit",cursor:"pointer",border:"none",background:"none",textAlign:"left",display:"block"},Ut={position:"relative"},Qt={gridColumn:"1 / -1",height:Ze,padding:"2px 6px",boxSizing:"border-box",display:"flex",gap:14,fontSize:11,lineHeight:"15px"},eo=f(function({model:e,lift:n,width:r,height:a,cell:p,handlers:l,canvasStyle:c}){let[i,d]=M(null),[g,C]=M(null),L=n.walks[0];ee(i,e),R(()=>{if(!i||!g)return;let I=new T(i),z=new T(g),F=he(()=>e.buildDrawing(n,!1)),V,A=[B(()=>{let S=e.facetGrid;S&&I.resize(S.width,S.height);let P=F.get();P&&(P!==V&&(I.uploadGeometry(P.batch),V=P),e.applySelection(I),e.paint(I))}),B(()=>{let S=e.facetGrid;S&&z.resize(S.width,S.height);let P=F.get();P&&e.paintHover(z,P.batch)})];return()=>{for(let S of A)S();I.dispose(),z.dispose()}},[i,g,e,n]);let te=e.walkLabel(L.name);return u("div",{style:p,children:[o("button",{type:"button",style:Jt,"data-testid":"graph-facet-title",onClick:()=>{e.liftWalks([L.name]),e.setFacet("")},children:o(Q,{row:Ue(e,L),hint:`click to lift ${te} alone`,at:e.hoveredOn(L)})}),u("div",{style:Ut,children:[o("canvas",{ref:d,"data-testid":"graph-facet-canvas",style:{...c,width:r,height:a,display:"block"},...l}),o("canvas",{ref:C,style:le})]})]})}),to=f(function({model:e,handlers:n,canvasStyle:r}){let a=e.facetPanels,p=e.facetGrid,l=e.facetPlacement;if(!a||!p||!l)return null;let{columns:c,width:i,height:d}=p;return u("div",{"data-testid":"graph-facet-panels",style:{...qt,width:e.paneWidth,minHeight:e.canvasHeight,gridTemplateColumns:`repeat(${c}, ${i}px)`,background:j},children:[a.map((g,C)=>o(eo,{model:e,lift:g,width:i,height:d,cell:{gridRow:Math.floor(l.cells[C]/c)+1,gridColumn:l.cells[C]%c+1},handlers:n,canvasStyle:r},g.walks[0].name)),o("div",{style:{...Qt,gridRow:Math.floor(Math.max(...l.cells)/c)+2},"data-testid":"graph-facet-key",children:Qe(e).map(g=>o(Q,{row:g},g.key))})]})}),vt=to;var bt=b(o("path",{d:"M3 5v4h2V5h4V3H5c-1.1 0-2 .9-2 2m2 10H3v4c0 1.1.9 2 2 2h4v-2H5zm14 4h-4v2h4c1.1 0 2-.9 2-2v-4h-2zm0-16h-4v2h4v4h2V5c0-1.1-.9-2-2-2"}),"CropFree");var wt=b([o("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14"},"0"),o("path",{d:"M12 10h-2v2H9v-2H7V9h2V7h1v2h2z"},"1")],"ZoomIn");var St=b(o("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14M7 9h5v1H7z"}),"ZoomOut");var oo=f(function({model:e}){let n=e.colorSchemeLock;return o(N,{label:"Color",size:"small",sx:{minWidth:100},disabled:n!==void 0,title:n?.why,shown:n?.value,value:e.chosenColorScheme,options:Ae,onChange:r=>{e.setColorScheme(r)}})}),xt=oo;var kt=_()({stats:{marginLeft:"auto"},perf:{color:"#888",fontVariantNumeric:"tabular-nums"}});function ue(t){return t===void 0?"\u2013":`${Math.round(t)}ms`}var no=f(function({model:e}){let{classes:n}=kt(),{lastFetchMs:r,lastLayoutMs:a,lastGeometryMs:p}=e,l=r!==void 0||a!==void 0||p!==void 0;return e.showPerf&&l?u(D,{variant:"caption",className:n.perf,"data-testid":"graph-perf-stats",children:["fetch ",ue(r)," \xB7 layout ",ue(a)," \xB7 geom"," ",ue(p)]}):null}),ro=f(function({model:e}){let{classes:n}=kt();return u("div",{className:n.stats,"data-testid":"graph-stats","data-node-count":e.nodeCount,"data-edge-count":e.edgeCount,"data-path-count":e.pathCount,"data-fetch-ms":e.lastFetchMs??"","data-layout-ms":e.lastLayoutMs??"","data-geometry-ms":e.lastGeometryMs??"","data-geometry-strokes":e.lastGeometryStrokeCount??"",children:[u(D,{variant:"body2",component:"span",children:[e.nodeCount," nodes, ",e.edgeCount," edges",e.pathCount>0?`, ${e.pathCount} paths`:""]})," ",o(no,{model:e})]})}),Mt=ro;var ao=f(function({model:e}){let{graph:n}=e;return o(N,{label:"Layout",size:"small",sx:{minWidth:140},testId:"graph-layout-select",value:e.chosenLayoutMode,options:Ce.map(({value:r,label:a,description:p,available:l})=>({value:r,label:a,description:p,disabled:n?!l(n):!1})),onChange:r=>{e.switchLayout(r)}})}),Pt=ao;var io=f(function({model:e}){let{repeatChoices:n}=e;return e.chosenLayoutMode!=="walkrows"||n.length===0?null:o(N,{label:"Repeat",size:"small",sx:{minWidth:130,maxWidth:260},testId:"graph-repeat-select",value:e.selectedRepeat?.key??"",options:[{value:"",label:"Whole window"},...n.map(({key:r,name:a,unit:p})=>({value:r,label:`${a} \xB7 ${p.toLocaleString()} bp unit`}))],onChange:r=>{e.setRepeatKey(r)}})}),Rt=io;var Ct=b(o("path",{d:"M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"}),"Close");var Lt=b(o("path",{d:"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2m0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2m0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2"}),"MoreVert");var so=f(function({model:e}){let n=e.highlightMenuItems({picks:!1});return o(me,{size:"small",tooltip:"Graph options",menuItems:[...n.length>0?[{label:"Haplotypes",icon:at,subMenu:n}]:[],...e.layoutOptionMenuItems({repeat:!1}),{label:"Show...",icon:Oe,subMenu:[...e.showMenuItems(),...e.modeDrawsNodes&&e.walkChoices.length>1?[{type:"checkbox",label:"Show walk rows under the graph",checked:e.walkStrip,onClick:()=>{e.setWalkStrip(!e.walkStrip)}}]:[],{type:"checkbox",label:"Show timings",checked:e.showPerf,onClick:()=>{e.setShowPerf(!e.showPerf)}}]},{type:"divider"},{label:"Graph settings...",icon:it,helpText:"Subgraph node limit; node width and path colors; the force-directed layout engine",onClick:()=>{X(e).queueDialog(r=>[st,{model:e,open:!0,onClose:r}])}},{type:"divider"},{label:"Close graph",icon:Ct,onClick:()=>{e.clearGraph()}}],children:o(Lt,{})})}),Gt=so;var lo=_()({formControl:{minWidth:130,maxWidth:260}}),po=f(function({model:e}){let{classes:n}=lo(),r=Pe(),{walkChoices:a}=e;if(a.length===0||!e.liftsWalks)return null;let p=new Set(a.map(i=>i.name)),l=new Map(a.map(i=>[i.name,i.label])),c=e.walkLayers.map(i=>i.walk).filter(i=>p.has(i));return a.length>Ve?o(ve,{size:"small",variant:"outlined",color:"inherit","data-testid":"graph-walk-choose",onClick:()=>{X(e).queueDialog(i=>[Fe,{model:e,onClose:i}])},children:c.length>0?`${c.length} of ${a.length} haplotypes`:"Highlight haplotypes..."}):u(we,{size:"small",className:n.formControl,children:[o(Se,{id:r,children:"Highlight"}),o(Me,{labelId:r,multiple:!0,value:c,label:"Highlight","data-testid":"graph-walk-select",renderValue:i=>i.map(d=>l.get(d)).join(", "),onChange:i=>{let{value:d}=i.target;e.liftWalks(typeof d=="string"?d.split(","):d)},children:a.map(({name:i,label:d})=>u(ke,{value:i,dense:!0,children:[o(be,{size:"small",checked:c.includes(i)}),o(xe,{primary:d})]},i))})]})}),It=po;var co=_()({toolbar:{display:"flex",alignItems:"center",gap:4,padding:"2px 4px",borderBottom:"1px solid #ddd"}}),uo=f(function({model:e}){return o(D,{variant:"body2",children:e.zoomPercent})}),fo=f(function({model:e}){let{classes:n}=co(),r=a=>{e.zoom(a,e.viewBox.width/2,e.viewBox.height/2)};return u("div",{className:n.toolbar,children:[o(Pt,{model:e}),o(xt,{model:e}),o(It,{model:e}),o(Rt,{model:e}),o(Z,{title:"Zoom in",children:o(Y,{size:"small",onClick:()=>{r(1.5)},children:o(wt,{})})}),o(Z,{title:"Zoom out",children:o(Y,{size:"small",onClick:()=>{r(1/1.5)},children:o(St,{})})}),o(Z,{title:"Zoom to fit",children:o(Y,{size:"small",onClick:()=>{e.refitView()},children:o(bt,{})})}),o(uo,{model:e}),o(Mt,{model:e}),o(Gt,{model:e})]})}),Et=fo;var ho={position:"absolute",bottom:Ye,lineHeight:"normal",background:"rgba(0,0,0,0.75)",color:"white",padding:"4px 8px",borderRadius:4,fontSize:12,pointerEvents:"none",zIndex:6};function fe({label:t,readout:e}){return u(w,{children:[o("strong",{children:t})," \u2014 ",e]})}function mo(t,e){if(e)return{testId:"graph-chip-tooltip",body:fe(e)};let n=t.hoveredNode?t.hoverNodeById?.get(t.hoveredNode):void 0;if(n){let l=t.hoverDrawing?.members.get(n.id),c=Ne(n);return{body:u(w,{children:[o("strong",{children:n.name}),l?` and ${l.length-1} more`:""," \u2014"," ",n.length.toLocaleString()," bp, depth ",n.depth.toFixed(1),c?u(w,{children:[o("br",{}),c.sample," ",$(c)," (rank ",n.stable?.rank,")"]}):null]})}}let r=t.hoveredEdge===null?void 0:t.graph?.edges[t.hoveredEdge];if(r){let l=_e(r,t.deletions.find(c=>c.edgeIndex===t.hoveredEdge),c=>t.nodeById?.get(c)?.name??c);return{body:l.deletion?u(w,{children:[o("strong",{children:"Deletion"})," ",l.deletion.bp,o("br",{}),l.deletion.where]}):u(w,{children:["Edge: ",l.ends]})}}let a=t.hoveredWalkRowText;if(a)return{testId:"graph-walk-row-tooltip",body:fe(a)};let p=t.hoveredTubeText;return p?{testId:"graph-tube-tooltip",body:fe(p)}:void 0}var go=f(function({model:e,chip:n}){let r=mo(e,n);return r?o("div",{style:{...ho,right:e.tooltipRightPx},"data-testid":r.testId,children:r.body}):null}),Tt=go;var Ht=b(o("path",{d:"M10 18h4v-2h-4zM3 6v2h18V6zm3 7h12v-2H6z"}),"FilterList");var zt=b(o("path",{d:"M10.83 8H21V6H8.83zm5 5H18v-2h-4.17zM14 16.83V18h-4v-2h3.17l-3-3H6v-2h2.17l-3-3H3V6h.17L1.39 4.22 2.8 2.81l18.38 18.38-1.41 1.41z"}),"FilterListOff");var Wt=b(o("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m1 15h-2v-6h2zm0-8h-2V7h2z"}),"Info");var yo={x:0,y:0};function vo(t,e){let{own:n,reference:r,highlight:a}=t.nodeLaunchTargets(e);return[{label:"Node details",icon:Wt,onClick:()=>{t.showNodeDetails(e)}},...$e({own:n,reference:r,highlight:a,onShowLinear:p=>{t.showInLinearView(p)},onHighlight:t.canHighlightInLinearView?p=>{t.highlightInLinearView(p)}:void 0})]}function bo(t,e,n){let r=n??t.walkRowBars,a=t.walkRowLaunchTarget(e,r),p=a?.assembly,l=e>0?r?.rows[e-1]:void 0,c=l?.sample,i=!n&&t.walkRowBars,d=t.walkRowSamples;return[a&&p?{label:`Linear genome view \u2014 ${p} ${$(a.location)}`,icon:ie,onClick:()=>{t.showInLinearView({location:a.location,assembly:p})}}:{label:"Linear genome view",icon:ie,disabled:!0,disabledHelpText:a?`No assembly in this session is ${a.location.haplotype??a.label}`:"This walk states no contig coordinates",onClick:()=>{}},...l&&t.liftsWalks&&t.modeDrawsNodes?[{type:"checkbox",label:`Highlight ${l.label}`,checked:t.walkLayers.some(g=>g.walk===l.name),onClick:()=>{t.toggleWalk(l.name)}}]:[],...i&&c&&!(d?.length===1&&d[0]===c)?[{label:`Show only ${c}`,icon:Ht,onClick:()=>{t.setWalkRowSamples([c])}}]:[],...i&&d?[{label:"Show every sample",icon:zt,onClick:()=>{t.setWalkRowSamples(void 0)}}]:[]]}function O({model:t,at:e,onClose:n}){return o(ge,{anchor:e,offset:yo,onClose:n,menuItems:()=>e===void 0?[]:"nodeId"in e?vo(t,e.nodeId):bo(t,e.row,e.bars)})}var wo={display:"flex",flexWrap:"wrap",gap:"2px 14px",padding:"2px 8px 6px",fontSize:11,color:"#333"},So={position:"absolute",pointerEvents:"none",background:"rgba(255,255,255,0.92)",border:"1px solid #ccc",borderRadius:3,padding:"1px 6px",fontSize:11,whiteSpace:"nowrap",zIndex:4},xo=f(function({bars:e,frame:n,ramp:r,rowGenes:a}){let p=nt(),l=Re(()=>Ee(e,n,{ramp:r,rowGenes:a,idPrefix:p}),[e,n,r,a,p]);return o(J,{el:l})}),ko=f(function({model:e}){let n=e.walkStripRows,r=e.walkStripFrame,a=e.stripHover,p=n?[n.reference,...n.rows]:[],l=a?p.findIndex(i=>i.name===a.row):-1,c=p[l];return!n||!r||r.labelled||!a||!c?null:u("div",{"data-testid":"graph-walk-strip-tip",style:{...So,left:(n.origin+a.offset)*r.scaleX+r.translateX+12,top:l*r.rowPx+r.translateY-18},children:[c.label," \xB7"," ",Ge(c,l===0?void 0:n.reference)]})}),Mo=f(function({model:e}){let n=e.walkStripRows,r=e.walkStripFrame,[a,p]=M();if(!n||!r)return null;let l=i=>{let d=i.currentTarget.getBoundingClientRect();return Te(n,r,i.clientX-d.left,i.clientY-d.top)},c=Ie(n,{ramp:e.referenceRampDomain,rampCss:Le,genes:We(r,e.walkRowGenes,e.walkRowGeneGaps)});return u("div",{"data-testid":"graph-walk-strip",style:{position:"relative",borderTop:"1px solid #ddd"},onMouseEnter:()=>{e.setPointerInPane(!0)},onMouseLeave:()=>{G(e)&&(e.setPointerInPane(!1),e.setStripHover(null))},children:[u("svg",{width:r.width,height:r.height,style:{display:"block"},onMouseMove:i=>{let d=l(i);i.currentTarget.style.cursor=d&&d.index>0?"pointer":"",e.setStripHover(d?{row:d.row.name,offset:d.offset}:null)},onClick:i=>{let d=l(i);d&&d.index>0&&e.toggleWalk(d.row.name)},onContextMenu:i=>{let d=l(i);d&&(i.preventDefault(),p({clientX:i.clientX,clientY:i.clientY,row:d.index}))},children:[o("title",{children:"Ticks mark where each walk passes the node under the pointer. Click a bar to lift its walk."}),o(xo,{bars:n,frame:r,ramp:e.referenceRampDomain,rowGenes:e.walkRowGenes}),o(J,{el:He(n,r,e.walkStripMarks)}),o(J,{el:ze(n,r,new Set(e.walkLayers.map(i=>i.walk)))})]}),o(ko,{model:e}),o("div",{style:wo,"data-testid":"graph-walk-strip-key",children:c.map(i=>u("div",{style:U,children:[o(ce,{swatch:Je(i.swatch)}),o("span",{children:i.label})]},i.label))}),o(O,{model:e,at:a&&{...a,bars:n},onClose:()=>{p(void 0)}})]})}),_t=Mo;var Po=f(function({model:e}){let n=e.walkStripLocator;return n?u(q,{model:e,zIndex:4,overflow:"visible",testId:"graph-walk-strip-locator",children:[o("circle",{cx:n.x,cy:n.y,r:11,fill:"none",stroke:"white",strokeWidth:4}),o("circle",{cx:n.x,cy:n.y,r:11,fill:"none",stroke:"#111",strokeWidth:1.75})]}):null}),Nt=Po;function At(t){return Promise.resolve(new T(t))}var Ro={position:"relative"},Co={position:"relative",lineHeight:0,isolation:"isolate"},Lo={position:"absolute",left:0,right:0,bottom:0,zIndex:0},Go={position:"absolute",inset:0,zIndex:10,lineHeight:"normal",pointerEvents:"none"},Io={position:"absolute",left:6,transform:"translateY(-50%)",background:"rgba(255,255,255,0.82)",padding:"0 4px",borderRadius:3,fontSize:11,lineHeight:"16px",whiteSpace:"nowrap",pointerEvents:"none",zIndex:4},Eo=f(function({model:e}){return o(w,{children:e.visibleRowLabels.map(({label:n,y:r,top:a})=>o("div",{"data-testid":"graph-row-label",style:{...Io,top:a},children:n},r))})}),To={position:"absolute",top:K,right:K,display:"flex",flexDirection:"column",borderRadius:3,overflow:"hidden",zIndex:4},Bt={position:"absolute",transform:"translate(-50%, -50%)",background:"rgba(255,255,255,0.78)",padding:"0 3px",borderRadius:3,fontSize:10,lineHeight:"13px",whiteSpace:"nowrap",pointerEvents:"none",zIndex:3},Ho={...Bt,color:"#18181c",fontWeight:600},zo=f(function({model:e}){let n=E(null);return R(()=>{let r=n.current;if(!r)return;let a=new ResizeObserver(()=>{G(e)&&e.hoveredNode===null&&e.setLegendSize({width:r.offsetWidth,height:r.offsetHeight})});return a.observe(r),()=>{a.disconnect()}},[e]),o("div",{ref:n,style:{...To,top:K+e.referenceStripZonePx},children:o(mt,{model:e})})}),Wo=f(function({model:e}){let n=e.overlayLabels.sizes,r=n.flatMap(({key:a,leader:p})=>p?[{key:a,...p}]:[]);return u(w,{children:[r.length>0?o(q,{model:e,zIndex:2,overflow:"visible",children:r.map(({key:a,arcX:p,arcY:l,labelX:c,labelY:i})=>o("line",{"data-testid":"graph-label-leader",x1:p,y1:l,x2:c,y2:i,stroke:"#18181c",strokeWidth:1},a))}):null,n.map(({key:a,text:p,x:l,y:c,kind:i})=>o("div",{"data-testid":"graph-size-label",style:{...i==="deletion"?Ho:Bt,left:l,top:c},children:p},a))]})}),_o=f(function({model:e,ownChrome:n=!0}){let{canvasRef:r,canvas:a,error:p,retry:l}=dt(At,e),{handlers:c,canvasStyle:i,contextMenu:d,closeContextMenu:g,hoveredChip:C}=yt(e);ee(a,e);let L=e.facetPanels!==void 0;return u("div",{style:Ro,children:[n?o(Et,{model:e}):null,u("div",{style:Co,onMouseEnter:()=>{e.setPointerInPane(!0)},onMouseLeave:()=>{G(e)&&e.setPointerInPane(!1)},children:[e.referenceStripShown?o("div",{style:{...Lo,top:e.referenceStripZonePx,background:j}}):null,o("canvas",{ref:r,"data-testid":"graph-genome-canvas",style:{...i,width:e.paneWidth,height:e.canvasHeight,display:"block",position:"relative",zIndex:1},...c}),L?o(vt,{model:e,handlers:c,canvasStyle:i}):u(w,{children:[o(pt,{model:e}),o(pe,{model:e}),o(lt,{model:e}),o(Eo,{model:e}),o(Wo,{model:e}),o(Ke,{model:e}),o(rt,{model:e}),o(ot,{model:e}),o(ct,{model:e}),o(Nt,{model:e}),o(zo,{model:e})]}),n?o("div",{style:Go,children:o(ye,{isVisible:e.isLoading,immediate:!e.layoutResult,statusMessage:e.statusMessage,onCancel:e.canCancelLoad?()=>{e.cancelLoad()}:void 0})}):null,o(Tt,{model:e,chip:C})]}),e.walkStripShown?o(_t,{model:e}):null,o(O,{model:e,at:d,onClose:g}),p?o(oe,{error:p,onReset:l}):null,n&&e.error?o(oe,{error:e.error,onReset:e.canRetryLoad?()=>{e.retryLoad()}:void 0}):null]})}),ii=_o;export{ii as a};
2
+ //# sourceMappingURL=chunk-MURN3JPK.js.map