@jbrowse/plugin-linear-genome-view 4.3.0 → 5.0.0-beta.10

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 (363) hide show
  1. package/esm/FeatureTrack/configSchema.d.ts +202 -71
  2. package/esm/FeatureTrack/configSchema.js +47 -1
  3. package/esm/FeatureTrack/index.js +1 -1
  4. package/esm/LaunchLinearGenomeView/index.d.ts +14 -0
  5. package/esm/LaunchLinearGenomeView/index.js +6 -12
  6. package/esm/LinearGenomeView/afterAttach.d.ts +20 -2
  7. package/esm/LinearGenomeView/afterAttach.js +265 -120
  8. package/esm/LinearGenomeView/components/CenterLine.d.ts +1 -1
  9. package/esm/LinearGenomeView/components/CenterLine.js +20 -9
  10. package/esm/LinearGenomeView/components/ConnectedHoverHighlight.d.ts +7 -0
  11. package/esm/LinearGenomeView/components/ConnectedHoverHighlight.js +22 -0
  12. package/esm/LinearGenomeView/components/CrisprGuidePanel.d.ts +3 -0
  13. package/esm/LinearGenomeView/components/CrisprGuidePanel.js +142 -0
  14. package/esm/LinearGenomeView/components/Cytobands.d.ts +6 -6
  15. package/esm/LinearGenomeView/components/Cytobands.js +76 -53
  16. package/esm/LinearGenomeView/components/ExportSvgDialog.d.ts +8 -3
  17. package/esm/LinearGenomeView/components/ExportSvgDialog.js +15 -67
  18. package/esm/LinearGenomeView/components/GetSequenceDialog.d.ts +5 -9
  19. package/esm/LinearGenomeView/components/GetSequenceDialog.js +84 -88
  20. package/esm/LinearGenomeView/components/Gridlines.d.ts +1 -1
  21. package/esm/LinearGenomeView/components/Gridlines.js +29 -58
  22. package/esm/LinearGenomeView/components/Header.d.ts +1 -1
  23. package/esm/LinearGenomeView/components/Header.js +42 -16
  24. package/esm/LinearGenomeView/components/HeaderClearHighlightButton.d.ts +21 -0
  25. package/esm/LinearGenomeView/components/HeaderClearHighlightButton.js +35 -0
  26. package/esm/LinearGenomeView/components/HeaderPanControls.d.ts +3 -2
  27. package/esm/LinearGenomeView/components/HeaderPanControls.js +18 -8
  28. package/esm/LinearGenomeView/components/HeaderRegionWidth.d.ts +1 -1
  29. package/esm/LinearGenomeView/components/HeaderRegionWidth.js +9 -6
  30. package/esm/LinearGenomeView/components/HeaderSearchBoxRow.d.ts +6 -0
  31. package/esm/LinearGenomeView/components/HeaderSearchBoxRow.js +27 -0
  32. package/esm/LinearGenomeView/components/HeaderSearchBoxes.d.ts +5 -0
  33. package/esm/LinearGenomeView/components/HeaderSearchBoxes.js +28 -0
  34. package/esm/LinearGenomeView/components/HeaderTrackSelectorButton.d.ts +3 -2
  35. package/esm/LinearGenomeView/components/HeaderTrackSelectorButton.js +11 -4
  36. package/esm/LinearGenomeView/components/HeaderZoomControls.d.ts +3 -2
  37. package/esm/LinearGenomeView/components/HeaderZoomControls.js +38 -52
  38. package/esm/LinearGenomeView/components/Highlight.d.ts +1 -1
  39. package/esm/LinearGenomeView/components/Highlight.js +21 -25
  40. package/esm/LinearGenomeView/components/HighlightBand.d.ts +3 -2
  41. package/esm/LinearGenomeView/components/HighlightBand.js +25 -8
  42. package/esm/LinearGenomeView/components/HighlightChip.d.ts +8 -0
  43. package/esm/LinearGenomeView/components/HighlightChip.js +13 -0
  44. package/esm/LinearGenomeView/components/HoverPositionHighlight.d.ts +12 -0
  45. package/esm/LinearGenomeView/components/HoverPositionHighlight.js +25 -0
  46. package/esm/LinearGenomeView/components/ImportForm.d.ts +3 -4
  47. package/esm/LinearGenomeView/components/ImportForm.js +95 -61
  48. package/esm/LinearGenomeView/components/LinearGenomeView.d.ts +1 -1
  49. package/esm/LinearGenomeView/components/LinearGenomeView.js +7 -6
  50. package/esm/LinearGenomeView/components/LinearGenomeViewContainer.d.ts +1 -1
  51. package/esm/LinearGenomeView/components/LinearGenomeViewContainer.js +88 -30
  52. package/esm/LinearGenomeView/components/MiniControls.d.ts +1 -1
  53. package/esm/LinearGenomeView/components/MiniControls.js +14 -10
  54. package/esm/LinearGenomeView/components/MotifListPanel.d.ts +3 -0
  55. package/esm/LinearGenomeView/components/MotifListPanel.js +59 -0
  56. package/esm/LinearGenomeView/components/NavigationAnnouncer.d.ts +32 -0
  57. package/esm/LinearGenomeView/components/NavigationAnnouncer.js +51 -0
  58. package/esm/LinearGenomeView/components/NoTracksActiveButton.d.ts +1 -1
  59. package/esm/LinearGenomeView/components/NoTracksActiveButton.js +1 -1
  60. package/esm/LinearGenomeView/components/OverviewHighlight.d.ts +2 -4
  61. package/esm/LinearGenomeView/components/OverviewHighlight.js +23 -44
  62. package/esm/LinearGenomeView/components/OverviewHighlightBand.d.ts +9 -0
  63. package/esm/LinearGenomeView/components/OverviewHighlightBand.js +25 -0
  64. package/esm/LinearGenomeView/components/OverviewRubberband.d.ts +3 -3
  65. package/esm/LinearGenomeView/components/OverviewRubberband.js +29 -67
  66. package/esm/LinearGenomeView/components/OverviewRubberbandHoverTooltip.d.ts +4 -5
  67. package/esm/LinearGenomeView/components/OverviewRubberbandHoverTooltip.js +13 -20
  68. package/esm/LinearGenomeView/components/OverviewScalebar.d.ts +3 -2
  69. package/esm/LinearGenomeView/components/OverviewScalebar.js +87 -83
  70. package/esm/LinearGenomeView/components/OverviewScalebarPolygon.d.ts +19 -5
  71. package/esm/LinearGenomeView/components/OverviewScalebarPolygon.js +57 -32
  72. package/esm/LinearGenomeView/components/OverviewScalebarTickLabels.d.ts +4 -5
  73. package/esm/LinearGenomeView/components/OverviewScalebarTickLabels.js +16 -18
  74. package/esm/LinearGenomeView/components/PaddingBlocks.d.ts +7 -0
  75. package/esm/LinearGenomeView/components/PaddingBlocks.js +56 -0
  76. package/esm/LinearGenomeView/components/RangeSelectOverlay.d.ts +9 -0
  77. package/esm/LinearGenomeView/components/RangeSelectOverlay.js +19 -0
  78. package/esm/LinearGenomeView/components/RegionWidthEditorDialog.d.ts +2 -3
  79. package/esm/LinearGenomeView/components/RegionWidthEditorDialog.js +19 -26
  80. package/esm/LinearGenomeView/components/ResizeAllTracksHandle.d.ts +5 -0
  81. package/esm/LinearGenomeView/components/ResizeAllTracksHandle.js +71 -0
  82. package/esm/LinearGenomeView/components/Rubberband.d.ts +2 -3
  83. package/esm/LinearGenomeView/components/Rubberband.js +15 -17
  84. package/esm/LinearGenomeView/components/SVGHighlightBand.d.ts +10 -0
  85. package/esm/LinearGenomeView/components/SVGHighlightBand.js +8 -0
  86. package/esm/LinearGenomeView/components/Scalebar.d.ts +2 -6
  87. package/esm/LinearGenomeView/components/Scalebar.js +20 -22
  88. package/esm/LinearGenomeView/components/ScalebarCoordinateLabels.d.ts +1 -1
  89. package/esm/LinearGenomeView/components/ScalebarCoordinateLabels.js +54 -35
  90. package/esm/LinearGenomeView/components/ScalebarRefNameLabels.d.ts +1 -1
  91. package/esm/LinearGenomeView/components/ScalebarRefNameLabels.js +157 -126
  92. package/esm/LinearGenomeView/components/SearchBox.d.ts +22 -2
  93. package/esm/LinearGenomeView/components/SearchBox.js +61 -68
  94. package/esm/LinearGenomeView/components/SearchPanelForm.d.ts +9 -0
  95. package/esm/LinearGenomeView/components/SearchPanelForm.js +18 -0
  96. package/esm/LinearGenomeView/components/SearchResultsDialog.d.ts +5 -4
  97. package/esm/LinearGenomeView/components/SearchResultsDialog.js +6 -8
  98. package/esm/LinearGenomeView/components/SearchResultsTable.d.ts +5 -3
  99. package/esm/LinearGenomeView/components/SearchResultsTable.js +31 -56
  100. package/esm/LinearGenomeView/components/SequenceFeatureHoverHighlight.d.ts +5 -0
  101. package/esm/LinearGenomeView/components/SequenceFeatureHoverHighlight.js +37 -0
  102. package/esm/LinearGenomeView/components/SequenceFeatureHoverHighlightExtension.d.ts +2 -0
  103. package/esm/LinearGenomeView/components/SequenceFeatureHoverHighlightExtension.js +5 -0
  104. package/esm/LinearGenomeView/components/SequencePatternPanel.d.ts +3 -0
  105. package/esm/LinearGenomeView/components/SequencePatternPanel.js +42 -0
  106. package/esm/LinearGenomeView/components/SequenceSearchDialog.d.ts +3 -5
  107. package/esm/LinearGenomeView/components/SequenceSearchDialog.js +31 -53
  108. package/esm/LinearGenomeView/components/StrandCheckboxes.d.ts +8 -0
  109. package/esm/LinearGenomeView/components/StrandCheckboxes.js +13 -0
  110. package/esm/LinearGenomeView/components/TrackContainer.d.ts +1 -1
  111. package/esm/LinearGenomeView/components/TrackContainer.js +136 -38
  112. package/esm/LinearGenomeView/components/TrackLabel.d.ts +2 -3
  113. package/esm/LinearGenomeView/components/TrackLabel.js +20 -26
  114. package/esm/LinearGenomeView/components/TrackLabelButtons.d.ts +7 -0
  115. package/esm/LinearGenomeView/components/TrackLabelButtons.js +33 -0
  116. package/esm/LinearGenomeView/components/TrackLabelDragHandle.d.ts +2 -5
  117. package/esm/LinearGenomeView/components/TrackLabelDragHandle.js +6 -2
  118. package/esm/LinearGenomeView/components/TrackLabelMenu.d.ts +1 -1
  119. package/esm/LinearGenomeView/components/TrackLabelMenu.js +35 -87
  120. package/esm/LinearGenomeView/components/TrackLabelRefNameWarning.d.ts +22 -0
  121. package/esm/LinearGenomeView/components/TrackLabelRefNameWarning.js +46 -0
  122. package/esm/LinearGenomeView/components/TrackRenderingContainer.d.ts +5 -2
  123. package/esm/LinearGenomeView/components/TrackRenderingContainer.js +66 -24
  124. package/esm/LinearGenomeView/components/TracksContainer.d.ts +1 -1
  125. package/esm/LinearGenomeView/components/TracksContainer.js +53 -32
  126. package/esm/LinearGenomeView/components/VerticalGuide.d.ts +2 -3
  127. package/esm/LinearGenomeView/components/VerticalGuide.js +6 -26
  128. package/esm/LinearGenomeView/components/ZoomButton.d.ts +7 -0
  129. package/esm/LinearGenomeView/components/ZoomButton.js +27 -0
  130. package/esm/LinearGenomeView/components/ZoomTransform.d.ts +9 -0
  131. package/esm/LinearGenomeView/components/ZoomTransform.js +37 -0
  132. package/esm/LinearGenomeView/components/defaultMotifs.d.ts +1 -0
  133. package/esm/LinearGenomeView/components/defaultMotifs.js +22 -0
  134. package/esm/LinearGenomeView/components/fetchSequence.d.ts +6 -8
  135. package/esm/LinearGenomeView/components/fetchSequence.js +17 -9
  136. package/esm/LinearGenomeView/components/recentLocationsMenu.d.ts +15 -0
  137. package/esm/LinearGenomeView/components/recentLocationsMenu.js +46 -0
  138. package/esm/LinearGenomeView/components/searchModes.d.ts +13 -0
  139. package/esm/LinearGenomeView/components/searchModes.js +22 -0
  140. package/esm/LinearGenomeView/components/trackLabelMenuItems.d.ts +7 -0
  141. package/esm/LinearGenomeView/components/trackLabelMenuItems.js +67 -0
  142. package/esm/LinearGenomeView/components/useRangeSelect.d.ts +9 -67
  143. package/esm/LinearGenomeView/components/useRangeSelect.js +54 -102
  144. package/esm/LinearGenomeView/components/useSearchBoxPrefs.d.ts +26 -0
  145. package/esm/LinearGenomeView/components/useSearchBoxPrefs.js +58 -0
  146. package/esm/LinearGenomeView/components/useSideScroll.d.ts +17 -3
  147. package/esm/LinearGenomeView/components/useSideScroll.js +163 -45
  148. package/esm/LinearGenomeView/components/util.d.ts +24 -6
  149. package/esm/LinearGenomeView/components/util.js +28 -5
  150. package/esm/LinearGenomeView/consts.d.ts +9 -2
  151. package/esm/LinearGenomeView/consts.js +20 -2
  152. package/esm/LinearGenomeView/containingLgv.d.ts +21 -0
  153. package/esm/LinearGenomeView/containingLgv.js +23 -0
  154. package/esm/LinearGenomeView/flyTo.d.ts +38 -0
  155. package/esm/LinearGenomeView/flyTo.js +135 -0
  156. package/esm/LinearGenomeView/headerFit.d.ts +29 -0
  157. package/esm/LinearGenomeView/headerFit.js +72 -0
  158. package/esm/LinearGenomeView/index.d.ts +28 -3
  159. package/esm/LinearGenomeView/index.js +13 -7
  160. package/esm/LinearGenomeView/keyboardHandler.d.ts +9 -0
  161. package/esm/LinearGenomeView/keyboardHandler.js +25 -1
  162. package/esm/LinearGenomeView/launchKeys.d.ts +2 -0
  163. package/esm/LinearGenomeView/launchKeys.js +27 -0
  164. package/esm/LinearGenomeView/lazyDialogs.d.ts +8 -14
  165. package/esm/LinearGenomeView/lazyDialogs.js +4 -3
  166. package/esm/LinearGenomeView/linkedViewSync.d.ts +12 -0
  167. package/esm/LinearGenomeView/linkedViewSync.js +36 -0
  168. package/esm/LinearGenomeView/menuItems.d.ts +25 -2
  169. package/esm/LinearGenomeView/menuItems.js +306 -179
  170. package/esm/LinearGenomeView/model.d.ts +3363 -164
  171. package/esm/LinearGenomeView/model.js +2548 -565
  172. package/esm/LinearGenomeView/sharedScaleContainer.d.ts +18 -0
  173. package/esm/LinearGenomeView/sharedScaleContainer.js +17 -0
  174. package/esm/LinearGenomeView/showRegionsWithUndo.d.ts +35 -0
  175. package/esm/LinearGenomeView/showRegionsWithUndo.js +50 -0
  176. package/esm/LinearGenomeView/stickyChrome.d.ts +15 -0
  177. package/esm/LinearGenomeView/stickyChrome.js +26 -0
  178. package/esm/LinearGenomeView/svgcomponents/SVGGridlines.d.ts +1 -1
  179. package/esm/LinearGenomeView/svgcomponents/SVGGridlines.js +17 -18
  180. package/esm/LinearGenomeView/svgcomponents/SVGHeader.d.ts +5 -3
  181. package/esm/LinearGenomeView/svgcomponents/SVGHeader.js +34 -35
  182. package/esm/LinearGenomeView/svgcomponents/SVGHighlights.d.ts +5 -0
  183. package/esm/LinearGenomeView/svgcomponents/SVGHighlights.js +26 -0
  184. package/esm/LinearGenomeView/svgcomponents/SVGHighlightsOverlay.d.ts +5 -0
  185. package/esm/LinearGenomeView/svgcomponents/SVGHighlightsOverlay.js +13 -0
  186. package/esm/LinearGenomeView/svgcomponents/SVGLinearGenomeView.d.ts +1 -3
  187. package/esm/LinearGenomeView/svgcomponents/SVGLinearGenomeView.js +73 -41
  188. package/esm/LinearGenomeView/svgcomponents/SVGRegionSeparators.d.ts +1 -1
  189. package/esm/LinearGenomeView/svgcomponents/SVGRegionSeparators.js +20 -3
  190. package/esm/LinearGenomeView/svgcomponents/SVGRowHeader.d.ts +8 -0
  191. package/esm/LinearGenomeView/svgcomponents/SVGRowHeader.js +36 -0
  192. package/esm/LinearGenomeView/svgcomponents/SVGRuler.d.ts +3 -3
  193. package/esm/LinearGenomeView/svgcomponents/SVGRuler.js +66 -39
  194. package/esm/LinearGenomeView/svgcomponents/SVGScalebar.d.ts +1 -1
  195. package/esm/LinearGenomeView/svgcomponents/SVGScalebar.js +9 -7
  196. package/esm/LinearGenomeView/svgcomponents/SVGStackedRow.d.ts +27 -0
  197. package/esm/LinearGenomeView/svgcomponents/SVGStackedRow.js +12 -0
  198. package/esm/LinearGenomeView/svgcomponents/SVGTrackLabel.d.ts +5 -3
  199. package/esm/LinearGenomeView/svgcomponents/SVGTrackLabel.js +54 -9
  200. package/esm/LinearGenomeView/svgcomponents/SVGTracks.d.ts +9 -15
  201. package/esm/LinearGenomeView/svgcomponents/SVGTracks.js +17 -21
  202. package/esm/LinearGenomeView/svgcomponents/SVGView.d.ts +18 -0
  203. package/esm/LinearGenomeView/svgcomponents/SVGView.js +13 -0
  204. package/esm/LinearGenomeView/svgcomponents/figureContract.d.ts +45 -0
  205. package/esm/LinearGenomeView/svgcomponents/figureContract.js +130 -0
  206. package/esm/LinearGenomeView/svgcomponents/renderViewTracks.d.ts +76 -0
  207. package/esm/LinearGenomeView/svgcomponents/renderViewTracks.js +66 -0
  208. package/esm/LinearGenomeView/svgcomponents/useViewSvgFigure.d.ts +70 -0
  209. package/esm/LinearGenomeView/svgcomponents/useViewSvgFigure.js +245 -0
  210. package/esm/LinearGenomeView/svgcomponents/util.d.ts +96 -5
  211. package/esm/LinearGenomeView/svgcomponents/util.js +242 -4
  212. package/esm/LinearGenomeView/types.d.ts +20 -37
  213. package/esm/LinearGenomeView/types.js +1 -0
  214. package/esm/LinearGenomeView/util.d.ts +347 -12
  215. package/esm/LinearGenomeView/util.js +577 -62
  216. package/esm/MultiLevelRubberband/MultiLevelRubberband.d.ts +6 -0
  217. package/esm/MultiLevelRubberband/MultiLevelRubberband.js +40 -0
  218. package/esm/MultiLevelRubberband/index.d.ts +4 -0
  219. package/esm/MultiLevelRubberband/index.js +3 -0
  220. package/esm/MultiLevelRubberband/menuItems.d.ts +34 -0
  221. package/esm/MultiLevelRubberband/menuItems.js +52 -0
  222. package/esm/MultiLevelRubberband/rowLabel.d.ts +22 -0
  223. package/esm/MultiLevelRubberband/rowLabel.js +27 -0
  224. package/esm/MultiLevelRubberband/types.d.ts +7 -0
  225. package/esm/MultiLevelRubberband/useRangeSelect.d.ts +25 -0
  226. package/esm/MultiLevelRubberband/useRangeSelect.js +120 -0
  227. package/esm/displayKitTests/perRegionTestEnv.d.ts +1391 -0
  228. package/esm/displayKitTests/perRegionTestEnv.js +142 -0
  229. package/esm/index.d.ts +50 -1245
  230. package/esm/index.js +88 -33
  231. package/esm/searchUtils.d.ts +62 -12
  232. package/esm/searchUtils.js +335 -48
  233. package/esm/shared/RubberbandSpan.d.ts +15 -0
  234. package/esm/shared/RubberbandSpan.js +34 -0
  235. package/esm/shared/coordLabels.d.ts +47 -0
  236. package/esm/shared/coordLabels.js +133 -0
  237. package/esm/shared/useWindowDrag.d.ts +18 -0
  238. package/esm/shared/useWindowDrag.js +45 -0
  239. package/package.json +18 -19
  240. package/esm/BaseLinearDisplay/SVGLegend.d.ts +0 -6
  241. package/esm/BaseLinearDisplay/SVGLegend.js +0 -17
  242. package/esm/BaseLinearDisplay/calculateSvgLegendWidth.d.ts +0 -2
  243. package/esm/BaseLinearDisplay/calculateSvgLegendWidth.js +0 -11
  244. package/esm/BaseLinearDisplay/components/BaseLinearDisplay.d.ts +0 -8
  245. package/esm/BaseLinearDisplay/components/BaseLinearDisplay.js +0 -53
  246. package/esm/BaseLinearDisplay/components/Block.d.ts +0 -14
  247. package/esm/BaseLinearDisplay/components/Block.js +0 -45
  248. package/esm/BaseLinearDisplay/components/BlockErrorMessage.d.ts +0 -7
  249. package/esm/BaseLinearDisplay/components/BlockErrorMessage.js +0 -22
  250. package/esm/BaseLinearDisplay/components/BlockMsg.d.ts +0 -6
  251. package/esm/BaseLinearDisplay/components/BlockMsg.js +0 -26
  252. package/esm/BaseLinearDisplay/components/CollapseIntronsDialog/CollapseIntronsDialog.d.ts +0 -9
  253. package/esm/BaseLinearDisplay/components/CollapseIntronsDialog/CollapseIntronsDialog.js +0 -42
  254. package/esm/BaseLinearDisplay/components/CollapseIntronsDialog/TranscriptTable.d.ts +0 -11
  255. package/esm/BaseLinearDisplay/components/CollapseIntronsDialog/TranscriptTable.js +0 -40
  256. package/esm/BaseLinearDisplay/components/CollapseIntronsDialog/util.d.ts +0 -19
  257. package/esm/BaseLinearDisplay/components/CollapseIntronsDialog/util.js +0 -45
  258. package/esm/BaseLinearDisplay/components/FloatingLabels.d.ts +0 -5
  259. package/esm/BaseLinearDisplay/components/FloatingLabels.js +0 -75
  260. package/esm/BaseLinearDisplay/components/FloatingLegend.d.ts +0 -8
  261. package/esm/BaseLinearDisplay/components/FloatingLegend.js +0 -43
  262. package/esm/BaseLinearDisplay/components/LinearBlocks.d.ts +0 -5
  263. package/esm/BaseLinearDisplay/components/LinearBlocks.js +0 -23
  264. package/esm/BaseLinearDisplay/components/LoadingOverlay.d.ts +0 -5
  265. package/esm/BaseLinearDisplay/components/LoadingOverlay.js +0 -49
  266. package/esm/BaseLinearDisplay/components/MaxHeightReachedIndicator.d.ts +0 -4
  267. package/esm/BaseLinearDisplay/components/MaxHeightReachedIndicator.js +0 -26
  268. package/esm/BaseLinearDisplay/components/MenuPage.d.ts +0 -8
  269. package/esm/BaseLinearDisplay/components/MenuPage.js +0 -24
  270. package/esm/BaseLinearDisplay/components/NonBlockCanvasDisplayComponent.d.ts +0 -21
  271. package/esm/BaseLinearDisplay/components/NonBlockCanvasDisplayComponent.js +0 -52
  272. package/esm/BaseLinearDisplay/components/RenderedBlocks.d.ts +0 -12
  273. package/esm/BaseLinearDisplay/components/RenderedBlocks.js +0 -22
  274. package/esm/BaseLinearDisplay/components/ServerSideRenderedBlockContent.d.ts +0 -12
  275. package/esm/BaseLinearDisplay/components/ServerSideRenderedBlockContent.js +0 -18
  276. package/esm/BaseLinearDisplay/components/TooLargeMessage.d.ts +0 -10
  277. package/esm/BaseLinearDisplay/components/TooLargeMessage.js +0 -20
  278. package/esm/BaseLinearDisplay/components/Tooltip.d.ts +0 -13
  279. package/esm/BaseLinearDisplay/components/Tooltip.js +0 -22
  280. package/esm/BaseLinearDisplay/components/types.d.ts +0 -1
  281. package/esm/BaseLinearDisplay/components/util.d.ts +0 -21
  282. package/esm/BaseLinearDisplay/components/util.js +0 -107
  283. package/esm/BaseLinearDisplay/index.d.ts +0 -17
  284. package/esm/BaseLinearDisplay/index.js +0 -13
  285. package/esm/BaseLinearDisplay/model.d.ts +0 -1197
  286. package/esm/BaseLinearDisplay/model.js +0 -432
  287. package/esm/BaseLinearDisplay/models/FeatureDensityMixin.d.ts +0 -32
  288. package/esm/BaseLinearDisplay/models/FeatureDensityMixin.js +0 -113
  289. package/esm/BaseLinearDisplay/models/NonBlockCanvasDisplayMixin.d.ts +0 -26
  290. package/esm/BaseLinearDisplay/models/NonBlockCanvasDisplayMixin.js +0 -57
  291. package/esm/BaseLinearDisplay/models/SvgFloatingLabels.d.ts +0 -8
  292. package/esm/BaseLinearDisplay/models/SvgFloatingLabels.js +0 -19
  293. package/esm/BaseLinearDisplay/models/TrackHeightMixin.d.ts +0 -11
  294. package/esm/BaseLinearDisplay/models/TrackHeightMixin.js +0 -31
  295. package/esm/BaseLinearDisplay/models/autorunFeatureDensityStats.d.ts +0 -2
  296. package/esm/BaseLinearDisplay/models/autorunFeatureDensityStats.js +0 -29
  297. package/esm/BaseLinearDisplay/models/configSchema.d.ts +0 -29
  298. package/esm/BaseLinearDisplay/models/configSchema.js +0 -33
  299. package/esm/BaseLinearDisplay/models/serverSideRenderedBlock.d.ts +0 -98
  300. package/esm/BaseLinearDisplay/models/serverSideRenderedBlock.js +0 -242
  301. package/esm/BaseLinearDisplay/models/util.d.ts +0 -9
  302. package/esm/BaseLinearDisplay/models/util.js +0 -43
  303. package/esm/BaseLinearDisplay/renderSvg.d.ts +0 -3
  304. package/esm/BaseLinearDisplay/renderSvg.js +0 -63
  305. package/esm/BaseLinearDisplay/types.d.ts +0 -43
  306. package/esm/BaseLinearDisplay/types.js +0 -3
  307. package/esm/BaseLinearDisplay/util.d.ts +0 -16
  308. package/esm/BaseLinearDisplay/util.js +0 -71
  309. package/esm/BasicTrack/configSchema.d.ts +0 -85
  310. package/esm/BasicTrack/configSchema.js +0 -8
  311. package/esm/BasicTrack/index.d.ts +0 -2
  312. package/esm/BasicTrack/index.js +0 -12
  313. package/esm/LinearBareDisplay/configSchema.d.ts +0 -32
  314. package/esm/LinearBareDisplay/configSchema.js +0 -11
  315. package/esm/LinearBareDisplay/index.d.ts +0 -4
  316. package/esm/LinearBareDisplay/index.js +0 -20
  317. package/esm/LinearBareDisplay/model.d.ts +0 -1196
  318. package/esm/LinearBareDisplay/model.js +0 -32
  319. package/esm/LinearBasicDisplay/components/LinearBasicDisplayComponent.d.ts +0 -5
  320. package/esm/LinearBasicDisplay/components/LinearBasicDisplayComponent.js +0 -9
  321. package/esm/LinearBasicDisplay/configSchema.d.ts +0 -32
  322. package/esm/LinearBasicDisplay/configSchema.js +0 -11
  323. package/esm/LinearBasicDisplay/index.d.ts +0 -4
  324. package/esm/LinearBasicDisplay/index.js +0 -20
  325. package/esm/LinearBasicDisplay/model.d.ts +0 -1391
  326. package/esm/LinearBasicDisplay/model.js +0 -158
  327. package/esm/LinearFeatureDisplay/components/AddFiltersDialog.d.ts +0 -9
  328. package/esm/LinearFeatureDisplay/components/AddFiltersDialog.js +0 -58
  329. package/esm/LinearFeatureDisplay/components/SetMaxHeightDialog.d.ts +0 -8
  330. package/esm/LinearFeatureDisplay/components/SetMaxHeightDialog.js +0 -26
  331. package/esm/LinearFeatureDisplay/configSchema.d.ts +0 -32
  332. package/esm/LinearFeatureDisplay/configSchema.js +0 -11
  333. package/esm/LinearFeatureDisplay/index.d.ts +0 -3
  334. package/esm/LinearFeatureDisplay/index.js +0 -2
  335. package/esm/LinearFeatureDisplay/model.d.ts +0 -1443
  336. package/esm/LinearFeatureDisplay/model.js +0 -305
  337. package/esm/LinearGenomeView/SVGErrorBox.d.ts +0 -5
  338. package/esm/LinearGenomeView/SVGErrorBox.js +0 -4
  339. package/esm/LinearGenomeView/components/ImportFormRefNameAutocomplete.d.ts +0 -11
  340. package/esm/LinearGenomeView/components/ImportFormRefNameAutocomplete.js +0 -27
  341. package/esm/LinearGenomeView/components/RefNameAutocomplete/AutocompleteTextField.d.ts +0 -5
  342. package/esm/LinearGenomeView/components/RefNameAutocomplete/AutocompleteTextField.js +0 -13
  343. package/esm/LinearGenomeView/components/RefNameAutocomplete/EndAdornment.d.ts +0 -3
  344. package/esm/LinearGenomeView/components/RefNameAutocomplete/EndAdornment.js +0 -17
  345. package/esm/LinearGenomeView/components/RefNameAutocomplete/HelpDialog.d.ts +0 -3
  346. package/esm/LinearGenomeView/components/RefNameAutocomplete/HelpDialog.js +0 -8
  347. package/esm/LinearGenomeView/components/RefNameAutocomplete/index.d.ts +0 -16
  348. package/esm/LinearGenomeView/components/RefNameAutocomplete/index.js +0 -101
  349. package/esm/LinearGenomeView/components/RefNameAutocomplete/util.d.ts +0 -10
  350. package/esm/LinearGenomeView/components/RefNameAutocomplete/util.js +0 -45
  351. package/esm/LinearGenomeView/components/RubberbandSpan.d.ts +0 -15
  352. package/esm/LinearGenomeView/components/RubberbandSpan.js +0 -32
  353. package/esm/LinearGenomeView/components/RubberbandTooltip.d.ts +0 -5
  354. package/esm/LinearGenomeView/components/RubberbandTooltip.js +0 -17
  355. package/esm/LinearGenomeView/components/TrackLabelContainer.d.ts +0 -8
  356. package/esm/LinearGenomeView/components/TrackLabelContainer.js +0 -25
  357. package/esm/LinearGenomeView/components/useWheelScroll.d.ts +0 -7
  358. package/esm/LinearGenomeView/components/useWheelScroll.js +0 -69
  359. package/esm/LinearGenomeView/svgExportUtil.d.ts +0 -9
  360. package/esm/LinearGenomeView/svgExportUtil.js +0 -6
  361. package/esm/LinearGenomeView/svgcomponents/SVGBackground.d.ts +0 -5
  362. package/esm/LinearGenomeView/svgcomponents/SVGBackground.js +0 -7
  363. /package/esm/{BaseLinearDisplay/components → MultiLevelRubberband}/types.js +0 -0
@@ -1,58 +1,115 @@
1
- import { TrackSelector as TrackSelectorIcon } from '@jbrowse/core/ui/Icons';
2
- import { getSession, isSessionWithAddTracks, toLocale, } from '@jbrowse/core/util';
1
+ import { Highlighter, TrackSelector as TrackSelectorIcon, } from '@jbrowse/core/ui/Icons';
2
+ import { radioItems } from '@jbrowse/core/ui/menuItems';
3
+ import { makeShowSubMenu } from '@jbrowse/core/ui/showSubMenu';
4
+ import { assembleLocStrings, getDialogHost, getSession, isSessionWithAddSessionTrack, toLocale, } from '@jbrowse/core/util';
5
+ import { basePaintedAt, computeMoveToLayout, } from '@jbrowse/core/util/Base1DUtils';
6
+ import { copyText } from '@jbrowse/core/util/copyText';
7
+ import { renameIds } from '@jbrowse/core/util/types/mst';
8
+ import { getSnapshot } from '@jbrowse/mobx-state-tree';
3
9
  import CenterFocusStrongIcon from '@mui/icons-material/CenterFocusStrong';
4
10
  import ContentCopyIcon from '@mui/icons-material/ContentCopy';
11
+ import FitScreenIcon from '@mui/icons-material/FitScreen';
5
12
  import FolderOpenIcon from '@mui/icons-material/FolderOpen';
6
13
  import LabelIcon from '@mui/icons-material/Label';
14
+ import LaunchIcon from '@mui/icons-material/Launch';
7
15
  import MenuOpenIcon from '@mui/icons-material/MenuOpen';
8
- import PaletteIcon from '@mui/icons-material/Palette';
16
+ import OpenInNewIcon from '@mui/icons-material/OpenInNew';
9
17
  import PhotoCameraIcon from '@mui/icons-material/PhotoCamera';
10
18
  import SearchIcon from '@mui/icons-material/Search';
11
19
  import SyncAltIcon from '@mui/icons-material/SyncAlt';
12
- import VisibilityIcon from '@mui/icons-material/Visibility';
13
20
  import ZoomInIcon from '@mui/icons-material/ZoomIn';
14
- import { ExportSvgDialog, GetSequenceDialog, ReturnToImportFormDialog, SequenceSearchDialog, } from "./lazyDialogs.js";
15
- function toLocaleRounded(n) {
16
- return toLocale(Math.round(n));
21
+ import { ExportSvgDialog, GetSequenceDialog, RegionWidthEditorDialog, ReturnToImportFormDialog, SequenceSearchDialog, } from './lazyDialogs.js';
22
+ const TRACK_LABEL_OPTIONS = [
23
+ { value: 'overlapping', label: 'Overlapping' },
24
+ { value: 'offset', label: 'Offset' },
25
+ { value: 'hidden', label: 'Hidden' },
26
+ ];
27
+ function showAllRegionsMenuItem(self) {
28
+ return {
29
+ label: 'Show all regions in assembly',
30
+ onClick: () => {
31
+ self.showAllRegionsInAssembly();
32
+ },
33
+ };
17
34
  }
18
- export function rewriteOnClicks(self, trackType, viewMenuActions) {
19
- for (const action of viewMenuActions) {
20
- if ('subMenu' in action) {
21
- rewriteOnClicks(self, trackType, action.subMenu);
22
- }
23
- if ('onClick' in action) {
24
- const holdOnClick = action.onClick;
25
- action.onClick = (...args) => {
26
- for (const track of self.tracks) {
27
- if (track.type === trackType) {
28
- holdOnClick.apply(track, [track, ...args]);
29
- }
30
- }
31
- };
32
- }
33
- }
35
+ export function zoomMenuItems(self) {
36
+ return [
37
+ ...[10, 50, 100].map(r => ({
38
+ label: `Zoom in ${r}x`,
39
+ onClick: () => {
40
+ self.zoom(self.bpPerPx / r);
41
+ },
42
+ })),
43
+ ...[10, 50, 100].map(r => ({
44
+ label: `Zoom out ${r}x`,
45
+ onClick: () => {
46
+ self.zoom(self.bpPerPx * r);
47
+ },
48
+ })),
49
+ showAllRegionsMenuItem(self),
50
+ {
51
+ label: 'Custom zoom',
52
+ onClick: () => {
53
+ getDialogHost(self).queueDialog(handleClose => [
54
+ RegionWidthEditorDialog,
55
+ { model: self, handleClose },
56
+ ]);
57
+ },
58
+ },
59
+ ];
34
60
  }
61
+ export function buildHighlightsSubMenuItems(self) {
62
+ const session = getSession(self);
63
+ return [
64
+ {
65
+ label: 'Show highlights',
66
+ type: 'checkbox',
67
+ checked: session.highlightsVisible,
68
+ onClick: () => {
69
+ session.setHighlightsVisible(!session.highlightsVisible);
70
+ },
71
+ },
72
+ {
73
+ label: 'Show highlight labels',
74
+ type: 'checkbox',
75
+ checked: session.highlightLabelsVisible,
76
+ onClick: () => {
77
+ session.setHighlightLabelsVisible(!session.highlightLabelsVisible);
78
+ },
79
+ },
80
+ ];
81
+ }
82
+ /**
83
+ * Build the main view menu items. A row stacked in another view has no import
84
+ * form of its own, so only a top-level view offers the way back to one.
85
+ */
35
86
  export function buildMenuItems(self) {
36
87
  if (!self.hasDisplayedRegions) {
37
88
  return [];
38
89
  }
39
- const { canShowCytobands, showCytobands } = self;
40
90
  const session = getSession(self);
41
91
  const menuItems = [
42
92
  {
43
- label: 'Return to import form',
93
+ label: 'Open track selector',
94
+ onClick: () => {
95
+ self.activateTrackSelector();
96
+ },
97
+ icon: TrackSelectorIcon,
98
+ },
99
+ {
100
+ label: 'Export SVG',
101
+ icon: PhotoCameraIcon,
44
102
  onClick: () => {
45
103
  session.queueDialog(handleClose => [
46
- ReturnToImportFormDialog,
104
+ ExportSvgDialog,
47
105
  {
48
106
  model: self,
49
107
  handleClose,
50
108
  },
51
109
  ]);
52
110
  },
53
- icon: FolderOpenIcon,
54
111
  },
55
- ...(isSessionWithAddTracks(session)
112
+ ...(isSessionWithAddSessionTrack(session)
56
113
  ? [
57
114
  {
58
115
  label: 'Sequence search',
@@ -69,184 +126,224 @@ export function buildMenuItems(self) {
69
126
  },
70
127
  ]
71
128
  : []),
72
- {
73
- label: 'Export SVG',
74
- icon: PhotoCameraIcon,
75
- onClick: () => {
76
- session.queueDialog(handleClose => [
77
- ExportSvgDialog,
78
- {
79
- model: self,
80
- handleClose,
129
+ ...(self.isTopLevelView
130
+ ? [
131
+ {
132
+ label: 'Return to import form',
133
+ onClick: () => {
134
+ session.queueDialog(handleClose => [
135
+ ReturnToImportFormDialog,
136
+ {
137
+ model: self,
138
+ handleClose,
139
+ },
140
+ ]);
81
141
  },
82
- ]);
83
- },
84
- },
85
- {
86
- label: 'Open track selector',
87
- onClick: self.activateTrackSelector,
88
- icon: TrackSelectorIcon,
89
- },
142
+ icon: FolderOpenIcon,
143
+ },
144
+ ]
145
+ : []),
146
+ ...(self.isTopLevelView && self.tracks.length
147
+ ? [
148
+ {
149
+ label: 'Fit tracks to window',
150
+ icon: FitScreenIcon,
151
+ disabled: !self.scrollPortExcess,
152
+ onClick: () => {
153
+ self.fitTracksToWindow();
154
+ },
155
+ },
156
+ ]
157
+ : []),
90
158
  {
91
159
  label: 'Horizontally flip',
92
160
  icon: SyncAltIcon,
93
- onClick: self.horizontallyFlip,
94
- },
95
- {
96
- label: 'Color by CDS and draw amino acids',
97
- type: 'checkbox',
98
- checked: self.colorByCDS,
99
- icon: PaletteIcon,
100
161
  onClick: () => {
101
- self.setColorByCDS(!self.colorByCDS);
162
+ self.horizontallyFlip();
102
163
  },
103
164
  },
104
- {
105
- label: 'Show...',
106
- icon: VisibilityIcon,
107
- subMenu: [
108
- {
109
- label: 'Show all regions in assembly',
110
- onClick: self.showAllRegionsInAssembly,
165
+ ...makeShowSubMenu([
166
+ showAllRegionsMenuItem(self),
167
+ {
168
+ label: 'Show ruler only',
169
+ type: 'checkbox',
170
+ checked: self.scalebarOnly,
171
+ onClick: () => {
172
+ self.setScalebarOnly(!self.scalebarOnly);
111
173
  },
112
- {
113
- label: 'Show center line',
114
- type: 'checkbox',
115
- checked: self.showCenterLine,
116
- onClick: () => {
117
- self.setShowCenterLine(!self.showCenterLine);
118
- },
174
+ },
175
+ {
176
+ label: 'Show header',
177
+ type: 'checkbox',
178
+ checked: !self.hideHeader,
179
+ // opts out of the checkbox "stay open" default: with the header
180
+ // hidden these same items are reachable from MiniControls, which this
181
+ // row unmounts — leaving the menu anchored to a removed node
182
+ keepMenuOpen: false,
183
+ onClick: () => {
184
+ self.setHideHeader(!self.hideHeader);
119
185
  },
120
- {
121
- label: 'Show header',
122
- type: 'checkbox',
123
- checked: !self.hideHeader,
124
- onClick: () => {
125
- self.setHideHeader(!self.hideHeader);
126
- },
186
+ },
187
+ {
188
+ label: 'Show header overview',
189
+ type: 'checkbox',
190
+ checked: !self.hideHeaderOverview,
191
+ onClick: () => {
192
+ self.setHideHeaderOverview(!self.hideHeaderOverview);
127
193
  },
128
- {
129
- label: 'Show track outlines',
130
- type: 'checkbox',
131
- checked: self.showTrackOutlines,
132
- onClick: () => {
133
- self.setShowTrackOutlines(!self.showTrackOutlines);
194
+ disabled: self.hideHeader,
195
+ },
196
+ ...(self.canShowCytobands
197
+ ? [
198
+ {
199
+ label: 'Show ideogram',
200
+ type: 'checkbox',
201
+ checked: self.showCytobands,
202
+ onClick: () => {
203
+ self.setShowCytobands(!self.showCytobands);
204
+ },
134
205
  },
206
+ ]
207
+ : []),
208
+ {
209
+ label: 'Show center line',
210
+ type: 'checkbox',
211
+ checked: self.showCenterLine,
212
+ onClick: () => {
213
+ self.setShowCenterLine(!self.showCenterLine);
135
214
  },
136
- {
137
- label: 'Show header overview',
138
- type: 'checkbox',
139
- checked: !self.hideHeaderOverview,
140
- onClick: () => {
141
- self.setHideHeaderOverview(!self.hideHeaderOverview);
142
- },
143
- disabled: self.hideHeader,
215
+ },
216
+ {
217
+ label: 'Show guidelines',
218
+ type: 'checkbox',
219
+ checked: self.showGridlines,
220
+ onClick: () => {
221
+ self.setShowGridlines(!self.showGridlines);
144
222
  },
145
- {
146
- label: 'Show no tracks active button',
147
- type: 'checkbox',
148
- checked: !self.hideNoTracksActive,
149
- onClick: () => {
150
- self.setHideNoTracksActive(!self.hideNoTracksActive);
151
- },
223
+ },
224
+ {
225
+ label: 'Show track outlines',
226
+ type: 'checkbox',
227
+ checked: self.showTrackOutlines,
228
+ onClick: () => {
229
+ self.setShowTrackOutlines(!self.showTrackOutlines);
152
230
  },
153
- {
154
- label: 'Show guidelines',
155
- type: 'checkbox',
156
- checked: self.showGridlines,
157
- onClick: () => {
158
- self.setShowGridlines(!self.showGridlines);
159
- },
231
+ },
232
+ {
233
+ label: 'Show no tracks active button',
234
+ type: 'checkbox',
235
+ checked: !self.hideNoTracksActive,
236
+ onClick: () => {
237
+ self.setHideNoTracksActive(!self.hideNoTracksActive);
160
238
  },
161
- ...(canShowCytobands
162
- ? [
163
- {
164
- label: 'Show ideogram',
165
- type: 'checkbox',
166
- checked: self.showCytobands,
167
- onClick: () => {
168
- self.setShowCytobands(!showCytobands);
169
- },
170
- },
171
- ]
172
- : []),
173
- ],
239
+ },
240
+ { type: 'subHeader', label: 'Sequence' },
241
+ {
242
+ label: 'Show CDS reading frame colors',
243
+ type: 'checkbox',
244
+ checked: self.colorByCDS,
245
+ onClick: () => {
246
+ self.setColorByCDS(!self.colorByCDS);
247
+ },
248
+ },
249
+ {
250
+ label: 'Show amino acids when zoomed in',
251
+ type: 'checkbox',
252
+ checked: self.showAminoAcids,
253
+ onClick: () => {
254
+ self.setShowAminoAcids(!self.showAminoAcids);
255
+ },
256
+ },
257
+ ]),
258
+ {
259
+ label: 'Highlights',
260
+ icon: Highlighter,
261
+ subMenu: self.highlightsSubMenuItems(),
174
262
  },
175
263
  {
176
264
  label: 'Track labels',
177
265
  icon: LabelIcon,
178
- subMenu: [
179
- {
180
- label: 'Overlapping',
181
- icon: VisibilityIcon,
182
- type: 'radio',
183
- checked: self.trackLabelsSetting === 'overlapping',
184
- onClick: () => {
185
- self.setTrackLabels('overlapping');
186
- },
187
- },
188
- {
189
- label: 'Offset',
190
- icon: VisibilityIcon,
191
- type: 'radio',
192
- checked: self.trackLabelsSetting === 'offset',
193
- onClick: () => {
194
- self.setTrackLabels('offset');
195
- },
196
- },
197
- {
198
- label: 'Hidden',
199
- icon: VisibilityIcon,
200
- type: 'radio',
201
- checked: self.trackLabelsSetting === 'hidden',
202
- onClick: () => {
203
- self.setTrackLabels('hidden');
204
- },
205
- },
206
- ],
266
+ subMenu: radioItems(TRACK_LABEL_OPTIONS, self.effectiveTrackLabels, setting => {
267
+ self.setTrackLabels(setting);
268
+ }),
207
269
  },
208
270
  ];
209
- for (const [key, value] of self.trackTypeActions.entries()) {
210
- if (value.length) {
211
- menuItems.push({
212
- type: 'divider',
213
- }, {
214
- type: 'subHeader',
215
- label: key,
216
- });
217
- for (const action of value) {
218
- menuItems.push(action);
219
- }
220
- }
221
- }
222
271
  return menuItems;
223
272
  }
224
- export function buildRubberBandMenuItems(self) {
273
+ /**
274
+ * Open a copy of the view, tracks and their settings included, framed on the
275
+ * span between two offsets. The same copy as the view menu's "Copy view", and
276
+ * nothing links it back to the original.
277
+ */
278
+ export function openSpanInNewView(view, start, end) {
279
+ if (!start || !end) {
280
+ return undefined;
281
+ }
282
+ const { bpPerPx, offsetPx } = computeMoveToLayout(view, start, end);
283
+ return getSession(view).addView(view.type, {
284
+ ...renameIds(getSnapshot(view)),
285
+ windowWidthBp: bpPerPx * view.width,
286
+ windowStartBp: offsetPx * bpPerPx,
287
+ });
288
+ }
289
+ /**
290
+ * Build rubberband selection menu items. What a selection can open collects
291
+ * under one "Launch" submenu, which sorts last, below any row a plugin appends
292
+ * to the menu itself: a new linear genome view of the span first, then
293
+ * `launchItems`, the plugin-supplied ones (`rubberBandLaunchMenuItems()`).
294
+ *
295
+ * The new view is a copy of this one, so only a top-level view offers it: a row
296
+ * of a comparative view carries that view's framing, such as a hidden header.
297
+ */
298
+ export function buildRubberBandMenuItems(self, launchItems) {
299
+ // captured once here and used by the items below rather than re-read inside
300
+ // their onClick: the menu's onClose runs first and may release the selection,
301
+ // which would leave the click reading undefined and silently doing nothing
225
302
  const { leftOffset, rightOffset } = self;
226
- const leftRef = leftOffset?.refName ?? '';
227
- const rightRef = rightOffset?.refName ?? '';
228
- const leftCoord = toLocaleRounded((leftOffset?.coord ?? 0) + 1);
229
- const rightCoord = toLocaleRounded(rightOffset?.coord ?? 0);
230
- const rangeString = leftRef === rightRef
231
- ? `${leftRef}:${leftCoord}-${rightCoord}`
232
- : `${leftRef}:${leftCoord}..${rightRef}:${rightCoord}`;
303
+ // The same regions `Get sequence` fetches and `Zoom to region` navigates to,
304
+ // named the way the header names what it is showing. Arithmetic on the two
305
+ // offsets' `coord` cannot do this: `coord` is the POINT convention, so on a
306
+ // reversed region it names neither the base painted at the pixel nor the ends
307
+ // in ascending order, and a `leftRef === rightRef` test calls a selection
308
+ // crossing a collapsed intron one range when it is two.
309
+ const rangeString = assembleLocStrings(self.getSelectedRegions(leftOffset, rightOffset));
310
+ const launch = [
311
+ ...(self.isTopLevelView
312
+ ? [
313
+ {
314
+ label: 'Linear genome view',
315
+ icon: OpenInNewIcon,
316
+ helpText: 'A new view of this span, with the same tracks. It scrolls and zooms on its own.',
317
+ onClick: () => {
318
+ openSpanInNewView(self, leftOffset, rightOffset);
319
+ },
320
+ },
321
+ ]
322
+ : []),
323
+ ...launchItems,
324
+ ];
233
325
  return [
234
326
  {
235
327
  label: 'Zoom to region',
236
328
  icon: ZoomInIcon,
237
329
  onClick: () => {
238
- self.moveTo(self.leftOffset, self.rightOffset);
330
+ self.moveTo(leftOffset, rightOffset);
239
331
  },
240
332
  },
241
333
  {
242
334
  label: 'Get sequence',
243
335
  icon: MenuOpenIcon,
244
336
  onClick: () => {
245
- getSession(self).queueDialog(handleClose => [
337
+ const regions = self.getSelectedRegions(leftOffset, rightOffset);
338
+ getDialogHost(self).queueDialog(handleClose => [
246
339
  GetSequenceDialog,
247
340
  {
248
341
  model: self,
249
- handleClose,
342
+ regions,
343
+ handleClose: () => {
344
+ handleClose();
345
+ self.setOffsets();
346
+ },
250
347
  },
251
348
  ]);
252
349
  },
@@ -254,41 +351,71 @@ export function buildRubberBandMenuItems(self) {
254
351
  {
255
352
  label: 'Copy range',
256
353
  icon: ContentCopyIcon,
257
- onClick: async () => {
258
- const { default: copy } = await import('copy-to-clipboard');
259
- copy(rangeString);
354
+ onClick: () => {
355
+ void copyText(self, rangeString, 'range');
356
+ },
357
+ },
358
+ {
359
+ label: 'Highlight region',
360
+ icon: Highlighter,
361
+ onClick: () => {
362
+ const [region] = self.getSelectedRegions(leftOffset, rightOffset);
363
+ if (region) {
364
+ getSession(self).addHighlight(region);
365
+ }
260
366
  },
261
367
  },
368
+ ...(launch.length
369
+ ? [
370
+ {
371
+ label: 'Launch',
372
+ icon: LaunchIcon,
373
+ type: 'subMenu',
374
+ priority: -1000,
375
+ subMenu: launch,
376
+ },
377
+ ]
378
+ : []),
262
379
  ];
263
380
  }
381
+ /**
382
+ * Build rubberband click menu items (single click on rubberband area)
383
+ */
264
384
  export function buildRubberbandClickMenuItems(self, clickOffset) {
265
- const { coord, refName } = clickOffset;
266
- if (coord === undefined || refName === undefined) {
385
+ const { refName, start, end, reversed, offset, index } = clickOffset;
386
+ if (refName === undefined || start === undefined || end === undefined) {
267
387
  return [];
268
388
  }
269
- const locString = `${refName}:${toLocaleRounded(coord + 1)}`;
389
+ // `basePaintedAt`, not `coord`: `coord` is the point convention, which on a
390
+ // reversed region names the base one PAST the one under the pointer — and at
391
+ // the region's first column names a base off the end of the contig entirely.
392
+ // Forward the two agree, so this only ever moves the reversed answer.
393
+ //
394
+ // The result is 0-based, which is what `centerAt` takes (it goes through
395
+ // `bpToPx`); the label adds the 1 back.
396
+ const coord0 = basePaintedAt({ start, end, reversed }, offset);
397
+ const locString = `${refName}:${toLocale(coord0 + 1)}`;
270
398
  return [
271
399
  {
272
400
  label: 'Center view here',
273
401
  icon: CenterFocusStrongIcon,
274
402
  onClick: () => {
275
- self.centerAt(coord, refName);
403
+ self.centerAt(coord0, refName, index);
276
404
  },
277
405
  },
278
406
  {
279
407
  label: 'Zoom to base level',
280
408
  icon: ZoomInIcon,
281
409
  onClick: () => {
282
- self.centerAt(coord, refName);
283
410
  self.zoomTo(self.minBpPerPx);
411
+ self.centerAt(coord0, refName, index);
284
412
  },
285
413
  },
286
414
  {
287
415
  label: `Copy coordinate (${locString})`,
288
416
  icon: ContentCopyIcon,
289
- onClick: async () => {
290
- const { default: copy } = await import('copy-to-clipboard');
291
- copy(locString);
417
+ onClick: () => {
418
+ void copyText(self, locString, 'coordinate');
292
419
  },
293
420
  },
294
421
  ];