@jbrowse/plugin-linear-genome-view 4.2.1 → 5.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/FeatureTrack/configSchema.d.ts +104 -65
- package/esm/FeatureTrack/configSchema.js +47 -1
- package/esm/FeatureTrack/index.js +1 -1
- package/esm/LaunchLinearGenomeView/index.d.ts +14 -0
- package/esm/LaunchLinearGenomeView/index.js +17 -12
- package/esm/LinearGenomeView/FloatingSvgOverlay.d.ts +5 -0
- package/esm/LinearGenomeView/FloatingSvgOverlay.js +25 -0
- package/esm/LinearGenomeView/afterAttach.d.ts +20 -2
- package/esm/LinearGenomeView/afterAttach.js +257 -88
- package/esm/LinearGenomeView/components/CenterLine.d.ts +1 -1
- package/esm/LinearGenomeView/components/CenterLine.js +16 -7
- package/esm/LinearGenomeView/components/ConnectedHoverHighlight.d.ts +7 -0
- package/esm/LinearGenomeView/components/ConnectedHoverHighlight.js +22 -0
- package/esm/LinearGenomeView/components/CrisprGuidePanel.d.ts +3 -0
- package/esm/LinearGenomeView/components/CrisprGuidePanel.js +144 -0
- package/esm/LinearGenomeView/components/Cytobands.d.ts +6 -6
- package/esm/LinearGenomeView/components/Cytobands.js +76 -53
- package/esm/LinearGenomeView/components/ExportSvgDialog.d.ts +7 -3
- package/esm/LinearGenomeView/components/ExportSvgDialog.js +11 -67
- package/esm/LinearGenomeView/components/GetSequenceDialog.d.ts +5 -9
- package/esm/LinearGenomeView/components/GetSequenceDialog.js +84 -88
- package/esm/LinearGenomeView/components/Gridlines.d.ts +1 -1
- package/esm/LinearGenomeView/components/Gridlines.js +29 -58
- package/esm/LinearGenomeView/components/Header.d.ts +1 -1
- package/esm/LinearGenomeView/components/Header.js +32 -16
- package/esm/LinearGenomeView/components/HeaderClearHighlightButton.d.ts +21 -0
- package/esm/LinearGenomeView/components/HeaderClearHighlightButton.js +35 -0
- package/esm/LinearGenomeView/components/HeaderPanControls.d.ts +3 -2
- package/esm/LinearGenomeView/components/HeaderPanControls.js +16 -7
- package/esm/LinearGenomeView/components/HeaderRegionWidth.d.ts +1 -1
- package/esm/LinearGenomeView/components/HeaderRegionWidth.js +9 -6
- package/esm/LinearGenomeView/components/HeaderSearchBoxRow.d.ts +6 -0
- package/esm/LinearGenomeView/components/HeaderSearchBoxRow.js +27 -0
- package/esm/LinearGenomeView/components/HeaderSearchBoxes.d.ts +5 -0
- package/esm/LinearGenomeView/components/HeaderSearchBoxes.js +28 -0
- package/esm/LinearGenomeView/components/HeaderTrackSelectorButton.d.ts +3 -2
- package/esm/LinearGenomeView/components/HeaderTrackSelectorButton.js +11 -4
- package/esm/LinearGenomeView/components/HeaderZoomControls.d.ts +3 -2
- package/esm/LinearGenomeView/components/HeaderZoomControls.js +67 -51
- package/esm/LinearGenomeView/components/Highlight.d.ts +3 -7
- package/esm/LinearGenomeView/components/Highlight.js +30 -82
- package/esm/LinearGenomeView/components/HighlightBand.d.ts +9 -0
- package/esm/LinearGenomeView/components/HighlightBand.js +40 -0
- package/esm/LinearGenomeView/components/HighlightChip.d.ts +9 -0
- package/esm/LinearGenomeView/components/HighlightChip.js +15 -0
- package/esm/LinearGenomeView/components/HoverPositionHighlight.d.ts +12 -0
- package/esm/LinearGenomeView/components/HoverPositionHighlight.js +25 -0
- package/esm/LinearGenomeView/components/ImportForm.d.ts +3 -4
- package/esm/LinearGenomeView/components/ImportForm.js +95 -61
- package/esm/LinearGenomeView/components/LinearGenomeView.d.ts +1 -1
- package/esm/LinearGenomeView/components/LinearGenomeView.js +6 -5
- package/esm/LinearGenomeView/components/LinearGenomeViewContainer.d.ts +1 -1
- package/esm/LinearGenomeView/components/LinearGenomeViewContainer.js +89 -30
- package/esm/LinearGenomeView/components/MiniControls.d.ts +1 -1
- package/esm/LinearGenomeView/components/MiniControls.js +13 -10
- package/esm/LinearGenomeView/components/MotifListPanel.d.ts +3 -0
- package/esm/LinearGenomeView/components/MotifListPanel.js +59 -0
- package/esm/LinearGenomeView/components/NavigationAnnouncer.d.ts +32 -0
- package/esm/LinearGenomeView/components/NavigationAnnouncer.js +51 -0
- package/esm/LinearGenomeView/components/NoTracksActiveButton.d.ts +1 -1
- package/esm/LinearGenomeView/components/NoTracksActiveButton.js +1 -1
- package/esm/LinearGenomeView/components/OverviewHighlight.d.ts +2 -4
- package/esm/LinearGenomeView/components/OverviewHighlight.js +23 -42
- package/esm/LinearGenomeView/components/OverviewHighlightBand.d.ts +9 -0
- package/esm/LinearGenomeView/components/OverviewHighlightBand.js +26 -0
- package/esm/LinearGenomeView/components/OverviewRubberband.d.ts +3 -3
- package/esm/LinearGenomeView/components/OverviewRubberband.js +44 -57
- package/esm/LinearGenomeView/components/OverviewRubberbandHoverTooltip.d.ts +4 -5
- package/esm/LinearGenomeView/components/OverviewRubberbandHoverTooltip.js +13 -20
- package/esm/LinearGenomeView/components/OverviewScalebar.d.ts +3 -2
- package/esm/LinearGenomeView/components/OverviewScalebar.js +84 -79
- package/esm/LinearGenomeView/components/OverviewScalebarPolygon.d.ts +19 -5
- package/esm/LinearGenomeView/components/OverviewScalebarPolygon.js +55 -32
- package/esm/LinearGenomeView/components/OverviewScalebarTickLabels.d.ts +4 -5
- package/esm/LinearGenomeView/components/OverviewScalebarTickLabels.js +16 -18
- package/esm/LinearGenomeView/components/PaddingBlocks.d.ts +7 -0
- package/esm/LinearGenomeView/components/PaddingBlocks.js +51 -0
- package/esm/LinearGenomeView/components/RangeSelectOverlay.d.ts +9 -0
- package/esm/LinearGenomeView/components/RangeSelectOverlay.js +20 -0
- package/esm/LinearGenomeView/components/RegionWidthEditorDialog.d.ts +2 -3
- package/esm/LinearGenomeView/components/RegionWidthEditorDialog.js +19 -26
- package/esm/LinearGenomeView/components/Rubberband.d.ts +1 -1
- package/esm/LinearGenomeView/components/Rubberband.js +13 -16
- package/esm/LinearGenomeView/components/SVGHighlightBand.d.ts +10 -0
- package/esm/LinearGenomeView/components/SVGHighlightBand.js +9 -0
- package/esm/LinearGenomeView/components/Scalebar.d.ts +2 -2
- package/esm/LinearGenomeView/components/Scalebar.js +16 -21
- package/esm/LinearGenomeView/components/ScalebarCoordinateLabels.d.ts +1 -1
- package/esm/LinearGenomeView/components/ScalebarCoordinateLabels.js +54 -35
- package/esm/LinearGenomeView/components/ScalebarRefNameLabels.d.ts +1 -1
- package/esm/LinearGenomeView/components/ScalebarRefNameLabels.js +142 -126
- package/esm/LinearGenomeView/components/SearchBox.d.ts +22 -2
- package/esm/LinearGenomeView/components/SearchBox.js +58 -66
- package/esm/LinearGenomeView/components/SearchPanelForm.d.ts +9 -0
- package/esm/LinearGenomeView/components/SearchPanelForm.js +18 -0
- package/esm/LinearGenomeView/components/SearchResultsDialog.d.ts +3 -3
- package/esm/LinearGenomeView/components/SearchResultsDialog.js +5 -7
- package/esm/LinearGenomeView/components/SearchResultsTable.d.ts +4 -3
- package/esm/LinearGenomeView/components/SearchResultsTable.js +45 -53
- package/esm/LinearGenomeView/components/SequenceFeatureHoverHighlight.d.ts +5 -0
- package/esm/LinearGenomeView/components/SequenceFeatureHoverHighlight.js +37 -0
- package/esm/LinearGenomeView/components/SequenceFeatureHoverHighlightExtension.d.ts +2 -0
- package/esm/LinearGenomeView/components/SequenceFeatureHoverHighlightExtension.js +5 -0
- package/esm/LinearGenomeView/components/SequencePatternPanel.d.ts +3 -0
- package/esm/LinearGenomeView/components/SequencePatternPanel.js +42 -0
- package/esm/LinearGenomeView/components/SequenceSearchDialog.d.ts +1 -1
- package/esm/LinearGenomeView/components/SequenceSearchDialog.js +31 -53
- package/esm/LinearGenomeView/components/StrandCheckboxes.d.ts +8 -0
- package/esm/LinearGenomeView/components/StrandCheckboxes.js +13 -0
- package/esm/LinearGenomeView/components/TrackContainer.d.ts +1 -1
- package/esm/LinearGenomeView/components/TrackContainer.js +83 -39
- package/esm/LinearGenomeView/components/TrackLabel.d.ts +2 -3
- package/esm/LinearGenomeView/components/TrackLabel.js +11 -24
- package/esm/LinearGenomeView/components/TrackLabelButtons.d.ts +7 -0
- package/esm/LinearGenomeView/components/TrackLabelButtons.js +33 -0
- package/esm/LinearGenomeView/components/TrackLabelDragHandle.d.ts +2 -5
- package/esm/LinearGenomeView/components/TrackLabelDragHandle.js +6 -2
- package/esm/LinearGenomeView/components/TrackLabelMenu.d.ts +1 -1
- package/esm/LinearGenomeView/components/TrackLabelMenu.js +32 -85
- package/esm/LinearGenomeView/components/TrackLabelRefNameWarning.d.ts +22 -0
- package/esm/LinearGenomeView/components/TrackLabelRefNameWarning.js +46 -0
- package/esm/LinearGenomeView/components/TrackRenderingContainer.d.ts +1 -1
- package/esm/LinearGenomeView/components/TrackRenderingContainer.js +72 -18
- package/esm/LinearGenomeView/components/TracksContainer.d.ts +1 -1
- package/esm/LinearGenomeView/components/TracksContainer.js +65 -32
- package/esm/LinearGenomeView/components/VerticalGuide.d.ts +1 -1
- package/esm/LinearGenomeView/components/VerticalGuide.js +6 -13
- package/esm/LinearGenomeView/components/ZoomButton.d.ts +7 -0
- package/esm/LinearGenomeView/components/ZoomButton.js +22 -0
- package/esm/LinearGenomeView/components/ZoomTransform.d.ts +9 -0
- package/esm/LinearGenomeView/components/ZoomTransform.js +33 -0
- package/esm/LinearGenomeView/components/defaultMotifs.d.ts +1 -0
- package/esm/LinearGenomeView/components/defaultMotifs.js +22 -0
- package/esm/LinearGenomeView/components/fetchSequence.d.ts +7 -8
- package/esm/LinearGenomeView/components/fetchSequence.js +17 -9
- package/esm/LinearGenomeView/components/recentLocationsMenu.d.ts +15 -0
- package/esm/LinearGenomeView/components/recentLocationsMenu.js +36 -0
- package/esm/LinearGenomeView/components/searchModes.d.ts +13 -0
- package/esm/LinearGenomeView/components/searchModes.js +22 -0
- package/esm/LinearGenomeView/components/trackLabelMenuItems.d.ts +7 -0
- package/esm/LinearGenomeView/components/trackLabelMenuItems.js +67 -0
- package/esm/LinearGenomeView/components/useRangeSelect.d.ts +11 -66
- package/esm/LinearGenomeView/components/useRangeSelect.js +82 -91
- package/esm/LinearGenomeView/components/useSearchBoxPrefs.d.ts +26 -0
- package/esm/LinearGenomeView/components/useSearchBoxPrefs.js +58 -0
- package/esm/LinearGenomeView/components/useSideScroll.d.ts +1 -1
- package/esm/LinearGenomeView/components/useSideScroll.js +87 -19
- package/esm/LinearGenomeView/components/util.d.ts +20 -6
- package/esm/LinearGenomeView/components/util.js +27 -6
- package/esm/LinearGenomeView/consts.d.ts +7 -2
- package/esm/LinearGenomeView/consts.js +18 -2
- package/esm/LinearGenomeView/flyTo.d.ts +38 -0
- package/esm/LinearGenomeView/flyTo.js +135 -0
- package/esm/LinearGenomeView/headerFit.d.ts +27 -0
- package/esm/LinearGenomeView/headerFit.js +59 -0
- package/esm/LinearGenomeView/index.d.ts +32 -2
- package/esm/LinearGenomeView/index.js +8 -4
- package/esm/LinearGenomeView/initKeys.d.ts +13 -0
- package/esm/LinearGenomeView/initKeys.js +104 -0
- package/esm/LinearGenomeView/keyboardHandler.d.ts +7 -0
- package/esm/LinearGenomeView/keyboardHandler.js +10 -0
- package/esm/LinearGenomeView/lazyDialogs.d.ts +6 -10
- package/esm/LinearGenomeView/lazyDialogs.js +3 -3
- package/esm/LinearGenomeView/linkedViewSync.d.ts +20 -0
- package/esm/LinearGenomeView/linkedViewSync.js +52 -0
- package/esm/LinearGenomeView/menuItems.d.ts +27 -2
- package/esm/LinearGenomeView/menuItems.js +137 -101
- package/esm/LinearGenomeView/model.d.ts +1544 -136
- package/esm/LinearGenomeView/model.js +2352 -488
- package/esm/LinearGenomeView/sharedScaleContainer.d.ts +18 -0
- package/esm/LinearGenomeView/sharedScaleContainer.js +17 -0
- package/esm/LinearGenomeView/showRegionsWithUndo.d.ts +35 -0
- package/esm/LinearGenomeView/showRegionsWithUndo.js +44 -0
- package/esm/LinearGenomeView/stickyChrome.d.ts +19 -0
- package/esm/LinearGenomeView/stickyChrome.js +30 -0
- package/esm/LinearGenomeView/svgcomponents/SVGGridlines.d.ts +1 -1
- package/esm/LinearGenomeView/svgcomponents/SVGGridlines.js +15 -16
- package/esm/LinearGenomeView/svgcomponents/SVGHeader.d.ts +2 -3
- package/esm/LinearGenomeView/svgcomponents/SVGHeader.js +45 -33
- package/esm/LinearGenomeView/svgcomponents/SVGHighlights.d.ts +5 -0
- package/esm/LinearGenomeView/svgcomponents/SVGHighlights.js +26 -0
- package/esm/LinearGenomeView/svgcomponents/SVGHighlightsOverlay.d.ts +5 -0
- package/esm/LinearGenomeView/svgcomponents/SVGHighlightsOverlay.js +13 -0
- package/esm/LinearGenomeView/svgcomponents/SVGLinearGenomeView.d.ts +1 -3
- package/esm/LinearGenomeView/svgcomponents/SVGLinearGenomeView.js +77 -41
- package/esm/LinearGenomeView/svgcomponents/SVGRegionSeparators.d.ts +1 -1
- package/esm/LinearGenomeView/svgcomponents/SVGRegionSeparators.js +23 -3
- package/esm/LinearGenomeView/svgcomponents/SVGRowHeader.d.ts +8 -0
- package/esm/LinearGenomeView/svgcomponents/SVGRowHeader.js +37 -0
- package/esm/LinearGenomeView/svgcomponents/SVGRuler.d.ts +3 -3
- package/esm/LinearGenomeView/svgcomponents/SVGRuler.js +64 -36
- package/esm/LinearGenomeView/svgcomponents/SVGScalebar.d.ts +1 -1
- package/esm/LinearGenomeView/svgcomponents/SVGScalebar.js +7 -5
- package/esm/LinearGenomeView/svgcomponents/SVGTrackLabel.d.ts +5 -3
- package/esm/LinearGenomeView/svgcomponents/SVGTrackLabel.js +43 -7
- package/esm/LinearGenomeView/svgcomponents/SVGTracks.d.ts +8 -14
- package/esm/LinearGenomeView/svgcomponents/SVGTracks.js +16 -21
- package/esm/LinearGenomeView/svgcomponents/SVGView.d.ts +18 -0
- package/esm/LinearGenomeView/svgcomponents/SVGView.js +13 -0
- package/esm/LinearGenomeView/svgcomponents/figureContract.d.ts +45 -0
- package/esm/LinearGenomeView/svgcomponents/figureContract.js +130 -0
- package/esm/LinearGenomeView/svgcomponents/renderViewTracks.d.ts +76 -0
- package/esm/LinearGenomeView/svgcomponents/renderViewTracks.js +66 -0
- package/esm/LinearGenomeView/svgcomponents/useViewSvgFigure.d.ts +70 -0
- package/esm/LinearGenomeView/svgcomponents/useViewSvgFigure.js +263 -0
- package/esm/LinearGenomeView/svgcomponents/util.d.ts +92 -5
- package/esm/LinearGenomeView/svgcomponents/util.js +236 -3
- package/esm/LinearGenomeView/types.d.ts +17 -29
- package/esm/LinearGenomeView/types.js +1 -0
- package/esm/LinearGenomeView/util.d.ts +332 -12
- package/esm/LinearGenomeView/util.js +606 -62
- package/esm/MultiLevelRubberband/MultiLevelRubberband.d.ts +6 -0
- package/esm/MultiLevelRubberband/MultiLevelRubberband.js +37 -0
- package/esm/MultiLevelRubberband/VerticalGuide.d.ts +6 -0
- package/esm/MultiLevelRubberband/VerticalGuide.js +21 -0
- package/esm/MultiLevelRubberband/index.d.ts +2 -0
- package/esm/MultiLevelRubberband/index.js +1 -0
- package/esm/MultiLevelRubberband/types.d.ts +6 -0
- package/esm/MultiLevelRubberband/useRangeSelect.d.ts +24 -0
- package/esm/MultiLevelRubberband/useRangeSelect.js +136 -0
- package/esm/displayKitTests/perRegionTestEnv.d.ts +1263 -0
- package/esm/displayKitTests/perRegionTestEnv.js +141 -0
- package/esm/index.d.ts +112 -1237
- package/esm/index.js +102 -24
- package/esm/lazyPluginExports.d.ts +23 -0
- package/esm/lazyPluginExports.js +36 -0
- package/esm/searchUtils.d.ts +52 -11
- package/esm/searchUtils.js +318 -45
- package/esm/shared/RubberbandSpan.d.ts +15 -0
- package/esm/shared/RubberbandSpan.js +33 -0
- package/esm/shared/coordLabels.d.ts +40 -0
- package/esm/shared/coordLabels.js +119 -0
- package/package.json +18 -19
- package/esm/BaseLinearDisplay/SVGLegend.d.ts +0 -6
- package/esm/BaseLinearDisplay/SVGLegend.js +0 -17
- package/esm/BaseLinearDisplay/calculateSvgLegendWidth.d.ts +0 -2
- package/esm/BaseLinearDisplay/calculateSvgLegendWidth.js +0 -11
- package/esm/BaseLinearDisplay/components/BaseLinearDisplay.d.ts +0 -8
- package/esm/BaseLinearDisplay/components/BaseLinearDisplay.js +0 -53
- package/esm/BaseLinearDisplay/components/Block.d.ts +0 -14
- package/esm/BaseLinearDisplay/components/Block.js +0 -45
- package/esm/BaseLinearDisplay/components/BlockErrorMessage.d.ts +0 -7
- package/esm/BaseLinearDisplay/components/BlockErrorMessage.js +0 -22
- package/esm/BaseLinearDisplay/components/BlockMsg.d.ts +0 -6
- package/esm/BaseLinearDisplay/components/BlockMsg.js +0 -26
- package/esm/BaseLinearDisplay/components/CollapseIntronsDialog/CollapseIntronsDialog.d.ts +0 -9
- package/esm/BaseLinearDisplay/components/CollapseIntronsDialog/CollapseIntronsDialog.js +0 -42
- package/esm/BaseLinearDisplay/components/CollapseIntronsDialog/TranscriptTable.d.ts +0 -11
- package/esm/BaseLinearDisplay/components/CollapseIntronsDialog/TranscriptTable.js +0 -40
- package/esm/BaseLinearDisplay/components/CollapseIntronsDialog/util.d.ts +0 -19
- package/esm/BaseLinearDisplay/components/CollapseIntronsDialog/util.js +0 -45
- package/esm/BaseLinearDisplay/components/FloatingLabels.d.ts +0 -5
- package/esm/BaseLinearDisplay/components/FloatingLabels.js +0 -75
- package/esm/BaseLinearDisplay/components/FloatingLegend.d.ts +0 -8
- package/esm/BaseLinearDisplay/components/FloatingLegend.js +0 -43
- package/esm/BaseLinearDisplay/components/LinearBlocks.d.ts +0 -5
- package/esm/BaseLinearDisplay/components/LinearBlocks.js +0 -23
- package/esm/BaseLinearDisplay/components/LoadingOverlay.d.ts +0 -5
- package/esm/BaseLinearDisplay/components/LoadingOverlay.js +0 -49
- package/esm/BaseLinearDisplay/components/MaxHeightReachedIndicator.d.ts +0 -4
- package/esm/BaseLinearDisplay/components/MaxHeightReachedIndicator.js +0 -26
- package/esm/BaseLinearDisplay/components/MenuPage.d.ts +0 -8
- package/esm/BaseLinearDisplay/components/MenuPage.js +0 -24
- package/esm/BaseLinearDisplay/components/NonBlockCanvasDisplayComponent.d.ts +0 -21
- package/esm/BaseLinearDisplay/components/NonBlockCanvasDisplayComponent.js +0 -52
- package/esm/BaseLinearDisplay/components/RenderedBlocks.d.ts +0 -12
- package/esm/BaseLinearDisplay/components/RenderedBlocks.js +0 -22
- package/esm/BaseLinearDisplay/components/ServerSideRenderedBlockContent.d.ts +0 -12
- package/esm/BaseLinearDisplay/components/ServerSideRenderedBlockContent.js +0 -18
- package/esm/BaseLinearDisplay/components/TooLargeMessage.d.ts +0 -10
- package/esm/BaseLinearDisplay/components/TooLargeMessage.js +0 -20
- package/esm/BaseLinearDisplay/components/Tooltip.d.ts +0 -13
- package/esm/BaseLinearDisplay/components/Tooltip.js +0 -22
- package/esm/BaseLinearDisplay/components/types.d.ts +0 -1
- package/esm/BaseLinearDisplay/components/util.d.ts +0 -21
- package/esm/BaseLinearDisplay/components/util.js +0 -107
- package/esm/BaseLinearDisplay/index.d.ts +0 -17
- package/esm/BaseLinearDisplay/index.js +0 -13
- package/esm/BaseLinearDisplay/model.d.ts +0 -1197
- package/esm/BaseLinearDisplay/model.js +0 -432
- package/esm/BaseLinearDisplay/models/FeatureDensityMixin.d.ts +0 -32
- package/esm/BaseLinearDisplay/models/FeatureDensityMixin.js +0 -113
- package/esm/BaseLinearDisplay/models/NonBlockCanvasDisplayMixin.d.ts +0 -26
- package/esm/BaseLinearDisplay/models/NonBlockCanvasDisplayMixin.js +0 -57
- package/esm/BaseLinearDisplay/models/SvgFloatingLabels.d.ts +0 -8
- package/esm/BaseLinearDisplay/models/SvgFloatingLabels.js +0 -19
- package/esm/BaseLinearDisplay/models/TrackHeightMixin.d.ts +0 -11
- package/esm/BaseLinearDisplay/models/TrackHeightMixin.js +0 -31
- package/esm/BaseLinearDisplay/models/autorunFeatureDensityStats.d.ts +0 -2
- package/esm/BaseLinearDisplay/models/autorunFeatureDensityStats.js +0 -29
- package/esm/BaseLinearDisplay/models/configSchema.d.ts +0 -29
- package/esm/BaseLinearDisplay/models/configSchema.js +0 -33
- package/esm/BaseLinearDisplay/models/serverSideRenderedBlock.d.ts +0 -98
- package/esm/BaseLinearDisplay/models/serverSideRenderedBlock.js +0 -242
- package/esm/BaseLinearDisplay/models/util.d.ts +0 -9
- package/esm/BaseLinearDisplay/models/util.js +0 -43
- package/esm/BaseLinearDisplay/renderSvg.d.ts +0 -3
- package/esm/BaseLinearDisplay/renderSvg.js +0 -63
- package/esm/BaseLinearDisplay/types.d.ts +0 -43
- package/esm/BaseLinearDisplay/types.js +0 -3
- package/esm/BaseLinearDisplay/util.d.ts +0 -16
- package/esm/BaseLinearDisplay/util.js +0 -71
- package/esm/BasicTrack/configSchema.d.ts +0 -85
- package/esm/BasicTrack/configSchema.js +0 -8
- package/esm/BasicTrack/index.d.ts +0 -2
- package/esm/BasicTrack/index.js +0 -12
- package/esm/LinearBareDisplay/configSchema.d.ts +0 -32
- package/esm/LinearBareDisplay/configSchema.js +0 -11
- package/esm/LinearBareDisplay/index.d.ts +0 -4
- package/esm/LinearBareDisplay/index.js +0 -20
- package/esm/LinearBareDisplay/model.d.ts +0 -1196
- package/esm/LinearBareDisplay/model.js +0 -32
- package/esm/LinearBasicDisplay/components/LinearBasicDisplayComponent.d.ts +0 -5
- package/esm/LinearBasicDisplay/components/LinearBasicDisplayComponent.js +0 -9
- package/esm/LinearBasicDisplay/configSchema.d.ts +0 -32
- package/esm/LinearBasicDisplay/configSchema.js +0 -11
- package/esm/LinearBasicDisplay/index.d.ts +0 -4
- package/esm/LinearBasicDisplay/index.js +0 -20
- package/esm/LinearBasicDisplay/model.d.ts +0 -1391
- package/esm/LinearBasicDisplay/model.js +0 -158
- package/esm/LinearFeatureDisplay/components/AddFiltersDialog.d.ts +0 -9
- package/esm/LinearFeatureDisplay/components/AddFiltersDialog.js +0 -58
- package/esm/LinearFeatureDisplay/components/SetMaxHeightDialog.d.ts +0 -8
- package/esm/LinearFeatureDisplay/components/SetMaxHeightDialog.js +0 -26
- package/esm/LinearFeatureDisplay/configSchema.d.ts +0 -32
- package/esm/LinearFeatureDisplay/configSchema.js +0 -11
- package/esm/LinearFeatureDisplay/index.d.ts +0 -3
- package/esm/LinearFeatureDisplay/index.js +0 -2
- package/esm/LinearFeatureDisplay/model.d.ts +0 -1443
- package/esm/LinearFeatureDisplay/model.js +0 -305
- package/esm/LinearGenomeView/SVGErrorBox.d.ts +0 -5
- package/esm/LinearGenomeView/SVGErrorBox.js +0 -4
- package/esm/LinearGenomeView/components/ImportFormRefNameAutocomplete.d.ts +0 -11
- package/esm/LinearGenomeView/components/ImportFormRefNameAutocomplete.js +0 -27
- package/esm/LinearGenomeView/components/RefNameAutocomplete/AutocompleteTextField.d.ts +0 -8
- package/esm/LinearGenomeView/components/RefNameAutocomplete/AutocompleteTextField.js +0 -17
- package/esm/LinearGenomeView/components/RefNameAutocomplete/EndAdornment.d.ts +0 -3
- package/esm/LinearGenomeView/components/RefNameAutocomplete/EndAdornment.js +0 -17
- package/esm/LinearGenomeView/components/RefNameAutocomplete/HelpDialog.d.ts +0 -3
- package/esm/LinearGenomeView/components/RefNameAutocomplete/HelpDialog.js +0 -8
- package/esm/LinearGenomeView/components/RefNameAutocomplete/index.d.ts +0 -16
- package/esm/LinearGenomeView/components/RefNameAutocomplete/index.js +0 -89
- package/esm/LinearGenomeView/components/RefNameAutocomplete/util.d.ts +0 -10
- package/esm/LinearGenomeView/components/RefNameAutocomplete/util.js +0 -45
- package/esm/LinearGenomeView/components/RubberbandSpan.d.ts +0 -15
- package/esm/LinearGenomeView/components/RubberbandSpan.js +0 -32
- package/esm/LinearGenomeView/components/RubberbandTooltip.d.ts +0 -5
- package/esm/LinearGenomeView/components/RubberbandTooltip.js +0 -17
- package/esm/LinearGenomeView/components/TrackLabelContainer.d.ts +0 -8
- package/esm/LinearGenomeView/components/TrackLabelContainer.js +0 -25
- package/esm/LinearGenomeView/components/useWheelScroll.d.ts +0 -7
- package/esm/LinearGenomeView/components/useWheelScroll.js +0 -69
- package/esm/LinearGenomeView/svgExportUtil.d.ts +0 -9
- package/esm/LinearGenomeView/svgExportUtil.js +0 -6
- package/esm/LinearGenomeView/svgcomponents/SVGBackground.d.ts +0 -5
- package/esm/LinearGenomeView/svgcomponents/SVGBackground.js +0 -7
- /package/esm/{BaseLinearDisplay/components → MultiLevelRubberband}/types.js +0 -0
|
@@ -1,18 +1,17 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { PluggableElements } from '@jbrowse/core/ui';
|
|
3
3
|
import { getEnv, getSession } from '@jbrowse/core/util';
|
|
4
|
-
import Base1DView from '@jbrowse/core/util/Base1DViewModel';
|
|
5
4
|
import { cx, makeStyles } from '@jbrowse/core/util/tss-react';
|
|
6
5
|
import { Typography, alpha, useTheme } from '@mui/material';
|
|
7
6
|
import { observer } from 'mobx-react';
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import
|
|
15
|
-
|
|
7
|
+
import { HEADER_BAR_HEIGHT, HEADER_OVERVIEW_HEIGHT } from '../consts.js';
|
|
8
|
+
import { REF_NAME_LABEL_FONT_SIZE, getBlockRefName, showRefNameLabels, } from '../util.js';
|
|
9
|
+
import Cytobands from './Cytobands.js';
|
|
10
|
+
import OverviewHighlight from './OverviewHighlight.js';
|
|
11
|
+
import OverviewRubberband from './OverviewRubberband.js';
|
|
12
|
+
import OverviewScalebarPolygon from './OverviewScalebarPolygon.js';
|
|
13
|
+
import OverviewScalebarTickLabels from './OverviewScalebarTickLabels.js';
|
|
14
|
+
import { elidedBlockStyles, getCytobands } from './util.js';
|
|
16
15
|
const useStyles = makeStyles()(theme => ({
|
|
17
16
|
scalebar: {
|
|
18
17
|
height: HEADER_OVERVIEW_HEIGHT,
|
|
@@ -27,7 +26,16 @@ const useStyles = makeStyles()(theme => ({
|
|
|
27
26
|
top: 0,
|
|
28
27
|
left: 0,
|
|
29
28
|
height: HEADER_OVERVIEW_HEIGHT,
|
|
30
|
-
|
|
29
|
+
// clip rather than hidden so this never becomes a scroll container (see
|
|
30
|
+
// Scalebar)
|
|
31
|
+
overflow: 'clip',
|
|
32
|
+
},
|
|
33
|
+
// cytoband strip keeps a fixed light backdrop in both light/dark mode: the
|
|
34
|
+
// Giemsa greyscale runs to pure black (gpos100/gvar), which would vanish on
|
|
35
|
+
// the dark theme's background.default. UCSC/IGV likewise draw the ideogram on
|
|
36
|
+
// a fixed white strip.
|
|
37
|
+
scalebarContigCytoband: {
|
|
38
|
+
backgroundColor: theme.palette.common.white,
|
|
31
39
|
},
|
|
32
40
|
scalebarContigForward: {
|
|
33
41
|
backgroundImage: `url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 15 9'%3E%3Cpath d='M-.1 0L6 4.5L-.1 9' fill='none' stroke='${theme.palette.divider}'/%3E%3C/svg%3E")`,
|
|
@@ -39,10 +47,19 @@ const useStyles = makeStyles()(theme => ({
|
|
|
39
47
|
},
|
|
40
48
|
scalebarRefName: {
|
|
41
49
|
position: 'absolute',
|
|
42
|
-
|
|
50
|
+
top: 0,
|
|
51
|
+
fontSize: REF_NAME_LABEL_FONT_SIZE,
|
|
43
52
|
fontWeight: 'bold',
|
|
44
53
|
pointerEvents: 'none',
|
|
45
54
|
zIndex: 100,
|
|
55
|
+
// clip, not hidden: transform is patched per zoom frame, and clip keeps this
|
|
56
|
+
// out of the scroll-container path. ellipsis renders identically under clip
|
|
57
|
+
// (verified pixel-for-pixel), since text-overflow applies at any non-visible
|
|
58
|
+
// overflow
|
|
59
|
+
overflow: 'clip',
|
|
60
|
+
whiteSpace: 'nowrap',
|
|
61
|
+
textOverflow: 'ellipsis',
|
|
62
|
+
maxWidth: 'calc(100% - 6px)',
|
|
46
63
|
},
|
|
47
64
|
scalebarVisibleRegion: {
|
|
48
65
|
position: 'absolute',
|
|
@@ -53,7 +70,10 @@ const useStyles = makeStyles()(theme => ({
|
|
|
53
70
|
left: 0,
|
|
54
71
|
},
|
|
55
72
|
overview: {
|
|
56
|
-
|
|
73
|
+
// the band the "you are here" trapezoid is drawn over, and the box the
|
|
74
|
+
// controls row sits in — a minimum so the row can outgrow it, since the
|
|
75
|
+
// svg above is absolutely positioned and does not hold it open
|
|
76
|
+
minHeight: HEADER_BAR_HEIGHT,
|
|
57
77
|
position: 'relative',
|
|
58
78
|
},
|
|
59
79
|
overviewSvg: {
|
|
@@ -61,89 +81,74 @@ const useStyles = makeStyles()(theme => ({
|
|
|
61
81
|
width: '100%',
|
|
62
82
|
position: 'absolute',
|
|
63
83
|
},
|
|
84
|
+
elidedOverviewBlock: {
|
|
85
|
+
...elidedBlockStyles,
|
|
86
|
+
},
|
|
87
|
+
cytoSvg: {
|
|
88
|
+
width: '100%',
|
|
89
|
+
},
|
|
64
90
|
}));
|
|
65
|
-
const OverviewBox = observer(function OverviewBox({
|
|
91
|
+
const OverviewBox = observer(function OverviewBox({ model, block, showRefName, }) {
|
|
66
92
|
const { classes } = useStyles();
|
|
67
93
|
const theme = useTheme();
|
|
68
|
-
const { cytobandOffset,
|
|
94
|
+
const { cytobandOffset, effectiveShowCytobands, overviewLayout: overview, } = model;
|
|
69
95
|
const { reversed, refName, assemblyName } = block;
|
|
70
96
|
const { assemblyManager } = getSession(model);
|
|
71
97
|
const assembly = assemblyManager.get(assemblyName);
|
|
72
98
|
const refNameColor = assembly?.getRefNameColor(refName);
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
99
|
+
const cytobands = effectiveShowCytobands
|
|
100
|
+
? getCytobands(assembly, refName)
|
|
101
|
+
: [];
|
|
102
|
+
const canDisplayCytobands = cytobands.length > 0;
|
|
103
|
+
if (canDisplayCytobands) {
|
|
104
|
+
return (_jsxs(_Fragment, { children: [showRefName ? (_jsx(Typography, { style: {
|
|
105
|
+
// fixed dark: this label overlays the always-white cytoband strip,
|
|
106
|
+
// so text.primary (white in dark mode) would be invisible
|
|
107
|
+
color: theme.palette.common.black,
|
|
108
|
+
transform: `translateX(${block.offsetPx + 3}px)`,
|
|
109
|
+
}, className: classes.scalebarRefName, children: refName })) : null, _jsx("div", { className: cx(classes.scalebarContig, classes.scalebarContigCytoband), style: {
|
|
110
|
+
transform: `translateX(${block.offsetPx + cytobandOffset}px)`,
|
|
111
|
+
width: block.widthPx,
|
|
112
|
+
}, children: _jsx("svg", { className: classes.cytoSvg, children: _jsx(Cytobands, { overview: overview, cytobands: cytobands, block: block }) }) })] }));
|
|
113
|
+
}
|
|
114
|
+
return (_jsxs("div", { className: cx(classes.scalebarContig, reversed
|
|
115
|
+
? classes.scalebarContigReverse
|
|
116
|
+
: classes.scalebarContigForward, classes.scalebarBorder), style: {
|
|
117
|
+
transform: `translateX(${block.offsetPx + cytobandOffset}px)`,
|
|
118
|
+
width: block.widthPx,
|
|
119
|
+
borderColor: refNameColor,
|
|
120
|
+
}, children: [showRefName ? (_jsx(Typography, { style: { color: refNameColor, left: 3 }, className: classes.scalebarRefName, children: refName })) : null, _jsx(OverviewScalebarTickLabels, { model: model, block: block, refNameColor: refNameColor, showRefName: showRefName })] }));
|
|
88
121
|
});
|
|
89
|
-
const VisibleRegionBox = observer(function VisibleRegionBox({ model,
|
|
122
|
+
const VisibleRegionBox = observer(function VisibleRegionBox({ model, }) {
|
|
123
|
+
const { classes } = useStyles();
|
|
90
124
|
const theme = useTheme();
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
const visibleRegions = dynamicBlocks.contentBlocks;
|
|
94
|
-
if (!visibleRegions.length) {
|
|
125
|
+
const { effectiveShowCytobands, cytobandOffset, overviewRegionPxSpan: span, } = model;
|
|
126
|
+
if (!span) {
|
|
95
127
|
return null;
|
|
96
128
|
}
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
refName: last.refName,
|
|
105
|
-
coord: last.reversed ? last.start : last.end,
|
|
106
|
-
}) || 0;
|
|
107
|
-
const color = showCytobands ? '#f00' : scalebarColor;
|
|
108
|
-
const transparency = showCytobands ? 0.1 : 0.3;
|
|
109
|
-
const left = firstOverviewPx + cytobandOffset;
|
|
110
|
-
return (_jsx("div", { className: className, style: {
|
|
111
|
-
width: lastOverviewPx - firstOverviewPx,
|
|
112
|
-
transform: `translateX(${left}px)`,
|
|
113
|
-
background: alpha(color, transparency),
|
|
129
|
+
const { color, opacity } = effectiveShowCytobands
|
|
130
|
+
? { color: '#f00', opacity: 0.1 }
|
|
131
|
+
: { color: theme.palette.tertiary.light, opacity: 0.3 };
|
|
132
|
+
return (_jsx("div", { className: classes.scalebarVisibleRegion, style: {
|
|
133
|
+
width: span.rightPx - span.leftPx,
|
|
134
|
+
transform: `translateX(${span.leftPx + cytobandOffset}px)`,
|
|
135
|
+
background: alpha(color, opacity),
|
|
114
136
|
borderColor: color,
|
|
115
137
|
} }));
|
|
116
138
|
});
|
|
117
|
-
const
|
|
139
|
+
const OverviewScalebarContent = observer(function OverviewScalebarContent({ model, }) {
|
|
118
140
|
const { classes } = useStyles();
|
|
119
141
|
const { pluginManager } = getEnv(model);
|
|
120
|
-
const
|
|
121
|
-
const
|
|
122
|
-
return (_jsxs("div", { className: classes.scalebar, children: [_jsx(VisibleRegionBox, { model: model,
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
backgroundColor: '#999',
|
|
127
|
-
backgroundImage: 'repeating-linear-gradient(90deg, transparent, transparent 1px, rgba(255,255,255,.5) 1px, rgba(255,255,255,.5) 3px)',
|
|
128
|
-
} }, `${JSON.stringify(block)}-${idx}`)) : (_jsx(OverviewBox, { scale: scale, block: block, model: model, overview: overview }, `${JSON.stringify(block)}-${idx}`));
|
|
129
|
-
}), _jsx(OverviewHighlight, { model: model, overview: overview }), additional] }));
|
|
142
|
+
const { overviewLayout: overview, overviewBlocks } = model;
|
|
143
|
+
const showRefName = showRefNameLabels(overviewBlocks, getBlockRefName);
|
|
144
|
+
return (_jsxs("div", { className: classes.scalebar, children: [_jsx(VisibleRegionBox, { model: model }), overviewBlocks.map((block, i) => block.type === 'ContentBlock' ? (_jsx(OverviewBox, { block: block, model: model, showRefName: showRefName[i] }, block.key)) : block.type === 'ElidedBlock' ? (_jsx("div", { className: cx(classes.scalebarContig, classes.elidedOverviewBlock), style: {
|
|
145
|
+
width: block.widthPx,
|
|
146
|
+
transform: `translateX(${block.offsetPx}px)`,
|
|
147
|
+
} }, block.key)) : null), _jsx(OverviewHighlight, { model: model }), _jsx(PluggableElements, { pluginManager: pluginManager, name: "LinearGenomeView-OverviewScalebarComponent", props: { model, overview } })] }));
|
|
130
148
|
});
|
|
131
149
|
const OverviewScalebar = observer(function OverviewScalebar({ model, children, }) {
|
|
132
150
|
const { classes } = useStyles();
|
|
133
|
-
const
|
|
134
|
-
|
|
135
|
-
const str = JSON.stringify(displayedRegions);
|
|
136
|
-
const overview = useMemo(() => {
|
|
137
|
-
const overview = Base1DView.create({
|
|
138
|
-
displayedRegions: JSON.parse(str),
|
|
139
|
-
interRegionPaddingWidth: 0,
|
|
140
|
-
minimumBlockWidth,
|
|
141
|
-
});
|
|
142
|
-
overview.setVolatileWidth(modWidth);
|
|
143
|
-
overview.showAllRegions();
|
|
144
|
-
return overview;
|
|
145
|
-
}, [str, minimumBlockWidth, modWidth]);
|
|
146
|
-
const scale = totalBp / (modWidth - (displayedRegions.length - 1) * wholeSeqSpacer);
|
|
147
|
-
return (_jsxs("div", { children: [_jsx(OverviewRubberband, { model: model, overview: overview, ControlComponent: _jsx(Scalebar, { model: model, overview: overview, scale: scale }) }), _jsxs("div", { className: classes.overview, children: [_jsx("svg", { height: HEADER_BAR_HEIGHT, className: classes.overviewSvg, children: _jsx(OverviewScalebarPolygon, { model: model, overview: overview }) }), children] })] }));
|
|
151
|
+
const overview = model.overviewLayout;
|
|
152
|
+
return (_jsxs("div", { children: [_jsx(OverviewRubberband, { model: model, overview: overview, ControlComponent: _jsx(OverviewScalebarContent, { model: model }) }), _jsxs("div", { className: classes.overview, children: [_jsx("svg", { height: HEADER_BAR_HEIGHT, className: classes.overviewSvg, children: _jsx(OverviewScalebarPolygon, { model: model, overview: overview, overviewOffsetPx: model.cytobandOffset }) }), children] })] }));
|
|
148
153
|
});
|
|
149
154
|
export default OverviewScalebar;
|
|
@@ -1,8 +1,22 @@
|
|
|
1
1
|
import type { LinearGenomeViewModel } from '../index.ts';
|
|
2
|
-
import type {
|
|
3
|
-
|
|
2
|
+
import type { ViewLayout } from '@jbrowse/core/util/Base1DUtils';
|
|
3
|
+
/**
|
|
4
|
+
* The "you are here" connector: a trapezoid joining the visible region's extent
|
|
5
|
+
* in the overview (top edge) to that same extent in the main view (bottom
|
|
6
|
+
* edge). Both edges come from one pixel extent, so they always describe the
|
|
7
|
+
* same regions — including elided ones.
|
|
8
|
+
*
|
|
9
|
+
* @param overviewOffsetPx - pixels the overview is shifted right of the main
|
|
10
|
+
* view's origin. In the interactive view the overview clears the chromosome-
|
|
11
|
+
* name gap (cytobandOffset); in SVG export it is flush (0).
|
|
12
|
+
* @param exportSvg - serialize explicit fill/stroke attributes (the split the
|
|
13
|
+
* `getFill/StrokeProps` helpers exist for) instead of the on-screen CSS class,
|
|
14
|
+
* which wouldn't survive into a standalone exported SVG.
|
|
15
|
+
*/
|
|
16
|
+
declare const OverviewScalebarPolygon: ({ model, overview, overviewOffsetPx, exportSvg, }: {
|
|
4
17
|
model: LinearGenomeViewModel;
|
|
5
|
-
overview:
|
|
6
|
-
|
|
7
|
-
|
|
18
|
+
overview: ViewLayout;
|
|
19
|
+
overviewOffsetPx?: number;
|
|
20
|
+
exportSvg?: boolean;
|
|
21
|
+
}) => import("react").JSX.Element | null;
|
|
8
22
|
export default OverviewScalebarPolygon;
|
|
@@ -1,39 +1,62 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { alpha } from '@jbrowse/core/ui/palette';
|
|
2
3
|
import { getFillProps, getStrokeProps } from '@jbrowse/core/util';
|
|
3
|
-
import {
|
|
4
|
+
import { regionBlocksPxExtent, transformPxSpan, } from '@jbrowse/core/util/Base1DUtils';
|
|
5
|
+
import { makeStyles } from '@jbrowse/core/util/tss-react';
|
|
4
6
|
import { observer } from 'mobx-react';
|
|
5
|
-
import { HEADER_BAR_HEIGHT } from
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
import { HEADER_BAR_HEIGHT } from '../consts.js';
|
|
8
|
+
/**
|
|
9
|
+
* SVG points for a trapezoid with horizontal top and bottom edges, wound as a
|
|
10
|
+
* single non-self-intersecting loop (bottom-left → bottom-right → top-right →
|
|
11
|
+
* top-left).
|
|
12
|
+
*/
|
|
13
|
+
function trapezoidPoints(top, bottom, height) {
|
|
14
|
+
return [
|
|
15
|
+
[bottom.leftPx, height],
|
|
16
|
+
[bottom.rightPx, height],
|
|
17
|
+
[top.rightPx, 0],
|
|
18
|
+
[top.leftPx, 0],
|
|
19
|
+
]
|
|
20
|
+
.map(([x, y]) => `${x},${y}`)
|
|
21
|
+
.join(' ');
|
|
22
|
+
}
|
|
23
|
+
// Fill/stroke are theme-derived and zoom-invariant, so they live in a static
|
|
24
|
+
// class computed once per theme (makeStyles memoizes) — an on-screen zoom frame
|
|
25
|
+
// then does zero color parsing. SVG export can't carry a CSS class, so that path
|
|
26
|
+
// serializes explicit fill/stroke attributes instead (see `exportSvg` below).
|
|
27
|
+
const useStyles = makeStyles()(theme => ({
|
|
28
|
+
polygon: {
|
|
29
|
+
fill: alpha(theme.palette.tertiary.light, 0.3),
|
|
30
|
+
stroke: alpha(theme.palette.tertiary.light, 0.8),
|
|
31
|
+
},
|
|
32
|
+
}));
|
|
33
|
+
/**
|
|
34
|
+
* The "you are here" connector: a trapezoid joining the visible region's extent
|
|
35
|
+
* in the overview (top edge) to that same extent in the main view (bottom
|
|
36
|
+
* edge). Both edges come from one pixel extent, so they always describe the
|
|
37
|
+
* same regions — including elided ones.
|
|
38
|
+
*
|
|
39
|
+
* @param overviewOffsetPx - pixels the overview is shifted right of the main
|
|
40
|
+
* view's origin. In the interactive view the overview clears the chromosome-
|
|
41
|
+
* name gap (cytobandOffset); in SVG export it is flush (0).
|
|
42
|
+
* @param exportSvg - serialize explicit fill/stroke attributes (the split the
|
|
43
|
+
* `getFill/StrokeProps` helpers exist for) instead of the on-screen CSS class,
|
|
44
|
+
* which wouldn't survive into a standalone exported SVG.
|
|
45
|
+
*/
|
|
46
|
+
const OverviewScalebarPolygon = observer(function OverviewScalebarPolygon({ model, overview, overviewOffsetPx = 0, exportSvg = false, }) {
|
|
47
|
+
const { classes, theme } = useStyles();
|
|
48
|
+
const { offsetPx, bpPerPx, dynamicBlocks } = model;
|
|
49
|
+
const extent = regionBlocksPxExtent(dynamicBlocks.blocks);
|
|
50
|
+
if (!extent) {
|
|
13
51
|
return null;
|
|
14
52
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
refName: last.refName,
|
|
24
|
-
coord: last.reversed ? last.start : last.end,
|
|
25
|
-
}) || 0) +
|
|
26
|
-
cytobandOffset * multiplier;
|
|
27
|
-
const startPx = Math.max(0, -offsetPx);
|
|
28
|
-
const endPx = startPx +
|
|
29
|
-
totalWidthPxWithoutBorders +
|
|
30
|
-
(contentBlocks.length * interRegionPaddingWidth) / 2;
|
|
31
|
-
const points = [
|
|
32
|
-
[startPx, HEADER_BAR_HEIGHT],
|
|
33
|
-
[endPx, HEADER_BAR_HEIGHT],
|
|
34
|
-
[topRight, 0],
|
|
35
|
-
[topLeft, 0],
|
|
36
|
-
];
|
|
37
|
-
return (_jsx("polygon", { points: points.toString(), ...getFillProps(alpha(polygonColor, 0.3)), ...getStrokeProps(alpha(polygonColor, 0.8)) }));
|
|
53
|
+
// the main view and overview lay out the same regions from cumulative-bp 0,
|
|
54
|
+
// so a main-view pixel maps to the (more zoomed-out) overview by the bpPerPx
|
|
55
|
+
// ratio; the bottom edge is the same extent in main-view space, shifted by
|
|
56
|
+
// the scroll offset
|
|
57
|
+
const top = transformPxSpan(extent, bpPerPx / overview.bpPerPx, overviewOffsetPx);
|
|
58
|
+
const bottom = transformPxSpan(extent, 1, -offsetPx);
|
|
59
|
+
const points = trapezoidPoints(top, bottom, HEADER_BAR_HEIGHT);
|
|
60
|
+
return exportSvg ? (_jsx("polygon", { points: points, ...getFillProps(alpha(theme.palette.tertiary.light, 0.3)), ...getStrokeProps(alpha(theme.palette.tertiary.light, 0.8)) })) : (_jsx("polygon", { points: points, className: classes.polygon }));
|
|
38
61
|
});
|
|
39
62
|
export default OverviewScalebarPolygon;
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import type { LinearGenomeViewModel } from '../index.ts';
|
|
2
|
-
import type { Base1DViewModel } from '@jbrowse/core/util/Base1DViewModel';
|
|
3
2
|
import type { ContentBlock } from '@jbrowse/core/util/blockTypes';
|
|
4
|
-
declare const OverviewScalebarTickLabels: ({ block,
|
|
3
|
+
declare const OverviewScalebarTickLabels: ({ block, model, refNameColor, showRefName, }: {
|
|
5
4
|
model: LinearGenomeViewModel;
|
|
6
|
-
scale: number;
|
|
7
5
|
block: ContentBlock;
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
refNameColor: string | undefined;
|
|
7
|
+
showRefName: boolean;
|
|
8
|
+
}) => import("react").JSX.Element[];
|
|
10
9
|
export default OverviewScalebarTickLabels;
|
|
@@ -1,35 +1,33 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { getSession, getTickDisplayStr } from '@jbrowse/core/util';
|
|
3
2
|
import { makeStyles } from '@jbrowse/core/util/tss-react';
|
|
4
3
|
import { Typography } from '@mui/material';
|
|
5
4
|
import { observer } from 'mobx-react';
|
|
6
|
-
import { HEADER_OVERVIEW_HEIGHT } from
|
|
7
|
-
import {
|
|
5
|
+
import { HEADER_OVERVIEW_HEIGHT } from '../consts.js';
|
|
6
|
+
import { TICK_LABEL_FONT_SIZE, makeOverviewTickLabels, overviewRefNameLabelWidth, } from '../util.js';
|
|
8
7
|
const useStyles = makeStyles()({
|
|
9
8
|
scalebarLabel: {
|
|
10
9
|
height: HEADER_OVERVIEW_HEIGHT,
|
|
11
10
|
position: 'absolute',
|
|
12
11
|
left: 0,
|
|
13
12
|
display: 'flex',
|
|
14
|
-
|
|
13
|
+
// 11px, not body2: makeOverviewTickLabels drops labels too wide for their
|
|
14
|
+
// block using tickLabelWidth, which measures at 11px
|
|
15
|
+
fontSize: TICK_LABEL_FONT_SIZE,
|
|
15
16
|
pointerEvents: 'none',
|
|
16
17
|
},
|
|
17
18
|
});
|
|
18
|
-
const OverviewScalebarTickLabels = observer(function OverviewScalebarTickLabels({ block,
|
|
19
|
+
const OverviewScalebarTickLabels = observer(function OverviewScalebarTickLabels({ block, model, refNameColor, showRefName, }) {
|
|
19
20
|
const { classes } = useStyles();
|
|
20
|
-
const {
|
|
21
|
-
const {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
return tickLabels.map((tickLabel, labelIdx) => (_jsx(Typography, { className: classes.scalebarLabel, variant: "body2", style: {
|
|
31
|
-
transform: `translateX(${((labelIdx + 1) * majorPitch) / scale}px)`,
|
|
21
|
+
const { refName } = block;
|
|
22
|
+
const { bpPerPx } = model.overviewLayout;
|
|
23
|
+
return makeOverviewTickLabels({
|
|
24
|
+
block,
|
|
25
|
+
bpPerPx,
|
|
26
|
+
// the bold refName label pinned at the block's left edge takes precedence
|
|
27
|
+
refNameLabelPx: showRefName ? overviewRefNameLabelWidth(refName) : 0,
|
|
28
|
+
}).map(({ genomicCoord, offsetPx, label }) => (_jsx(Typography, { className: classes.scalebarLabel, style: {
|
|
29
|
+
transform: `translateX(${offsetPx}px)`,
|
|
32
30
|
color: refNameColor,
|
|
33
|
-
}, children:
|
|
31
|
+
}, children: label }, genomicCoord)));
|
|
34
32
|
});
|
|
35
33
|
export default OverviewScalebarTickLabels;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cx, makeStyles } from '@jbrowse/core/util/tss-react';
|
|
3
|
+
import { observer } from 'mobx-react';
|
|
4
|
+
import ZoomTransform from './ZoomTransform.js';
|
|
5
|
+
import { elidedBlockStyles } from './util.js';
|
|
6
|
+
const useStyles = makeStyles()(theme => ({
|
|
7
|
+
absoluteFill: {
|
|
8
|
+
position: 'absolute',
|
|
9
|
+
width: '100%',
|
|
10
|
+
height: '100%',
|
|
11
|
+
},
|
|
12
|
+
block: {
|
|
13
|
+
position: 'absolute',
|
|
14
|
+
height: '100%',
|
|
15
|
+
},
|
|
16
|
+
boundaryBlock: {
|
|
17
|
+
background: theme.palette.action.disabledBackground,
|
|
18
|
+
},
|
|
19
|
+
regionSeparator: {
|
|
20
|
+
// opaque (not text.disabled, which is translucent): regions are now laid
|
|
21
|
+
// out contiguously so the separator paints directly over track data on both
|
|
22
|
+
// sides. A translucent fill would tint the data instead of masking it, and
|
|
23
|
+
// would darken unevenly where the container-level and per-track
|
|
24
|
+
// PaddingBlocks overlap. An opaque grey masks cleanly and stays seamless.
|
|
25
|
+
background: theme.palette.mode === 'dark'
|
|
26
|
+
? theme.palette.grey[500]
|
|
27
|
+
: theme.palette.grey[600],
|
|
28
|
+
},
|
|
29
|
+
elided: {
|
|
30
|
+
...elidedBlockStyles,
|
|
31
|
+
},
|
|
32
|
+
}));
|
|
33
|
+
// Inter-region padding, elided, and boundary blocks plus region separators.
|
|
34
|
+
// In TracksContainer: renders before children (masks gridlines in inter-track
|
|
35
|
+
// margins at inter-region positions; TrackContainers paint on top).
|
|
36
|
+
// In TrackContainer: renders after TrackRenderingContainer within the Paper
|
|
37
|
+
// stacking context, masking the track canvas at inter-region positions while
|
|
38
|
+
// TrackLabel (zIndex:200) remains above it.
|
|
39
|
+
const PaddingBlocks = observer(function PaddingBlocks({ model, offset = 0, }) {
|
|
40
|
+
const { classes } = useStyles();
|
|
41
|
+
// the geometry is `model.paddingSpans` -- shared with any host drawing this
|
|
42
|
+
// itself, so a seam here and a seam in an embedder's own chrome can't be
|
|
43
|
+
// computed two different ways. This file owns only what the spans look like.
|
|
44
|
+
const kindClass = {
|
|
45
|
+
seam: classes.regionSeparator,
|
|
46
|
+
elided: classes.elided,
|
|
47
|
+
boundary: classes.boundaryBlock,
|
|
48
|
+
};
|
|
49
|
+
return (_jsx(ZoomTransform, { model: model, offset: offset, children: _jsx("div", { className: classes.absoluteFill, children: model.paddingSpans.map(({ key, x, width, kind }) => (_jsx("div", { className: cx(classes.block, kindClass[kind]), style: { transform: `translateX(${x}px)`, width } }, key))) }) }));
|
|
50
|
+
});
|
|
51
|
+
export default PaddingBlocks;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { LinearGenomeViewModel } from '../index.ts';
|
|
2
|
+
import type { useRangeSelect } from './useRangeSelect.ts';
|
|
3
|
+
type LGV = LinearGenomeViewModel;
|
|
4
|
+
declare const RangeSelectOverlay: ({ model, range, menuOffsetX, }: {
|
|
5
|
+
model: LGV;
|
|
6
|
+
range: ReturnType<typeof useRangeSelect>;
|
|
7
|
+
menuOffsetX?: number;
|
|
8
|
+
}) => import("react").JSX.Element;
|
|
9
|
+
export default RangeSelectOverlay;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Suspense, lazy } from 'react';
|
|
3
|
+
import { Menu } from '@jbrowse/core/ui';
|
|
4
|
+
import { getBpDisplayStr, stringify } from '@jbrowse/core/util';
|
|
5
|
+
import { observer } from 'mobx-react';
|
|
6
|
+
import { stickyChromeTops } from '../stickyChrome.js';
|
|
7
|
+
import VerticalGuide from './VerticalGuide.js';
|
|
8
|
+
const RubberbandSpan = lazy(() => import('../../shared/RubberbandSpan.js'));
|
|
9
|
+
const RangeSelectOverlay = observer(function RangeSelectOverlay({ model, range, menuOffsetX = 0, }) {
|
|
10
|
+
const { stickyViewHeaders, headerHeight, isScalebarRefNameMenuOpen } = model;
|
|
11
|
+
const { scalebar } = stickyChromeTops({ stickyViewHeaders, headerHeight });
|
|
12
|
+
const { guideX, rubberbandOn, rubberband, anchorPosition, open, isClick, clickBpOffset, handleMenuItemClick, handleClose, } = range;
|
|
13
|
+
return (_jsxs(_Fragment, { children: [guideX !== undefined && !isScalebarRefNameMenuOpen ? (_jsx(VerticalGuide, { model: model, coordX: guideX })) : rubberbandOn && rubberband ? (_jsx(Suspense, { fallback: null, children: _jsx(RubberbandSpan, { left: rubberband.left, width: rubberband.width, viewWidth: model.width, stickyTop: scalebar, leftLabel: stringify(rubberband.leftBpOffset), rightLabel: stringify(rubberband.rightBpOffset), size: getBpDisplayStr(rubberband.numOfBpSelected) }) })) : null, anchorPosition ? (_jsx(Menu, { anchorReference: "anchorPosition", anchorPosition: {
|
|
14
|
+
left: anchorPosition.clientX + menuOffsetX,
|
|
15
|
+
top: anchorPosition.clientY,
|
|
16
|
+
}, onMenuItemClick: handleMenuItemClick, open: open, onClose: handleClose, menuItems: isClick && clickBpOffset
|
|
17
|
+
? model.rubberbandClickMenuItems(clickBpOffset)
|
|
18
|
+
: model.rubberBandMenuItems() })) : null] }));
|
|
19
|
+
});
|
|
20
|
+
export default RangeSelectOverlay;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { LinearGenomeViewModel } from '../model.ts';
|
|
2
|
-
|
|
2
|
+
export default function RegionWidthEditorDialog({ model, handleClose, }: {
|
|
3
3
|
model: LinearGenomeViewModel;
|
|
4
4
|
handleClose: () => void;
|
|
5
|
-
})
|
|
6
|
-
export default RegionWidthEditorDialog;
|
|
5
|
+
}): import("react").JSX.Element;
|
|
@@ -1,30 +1,23 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { toLocale } from '@jbrowse/core/util';
|
|
5
|
-
import {
|
|
6
|
-
import { observer } from 'mobx-react';
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { SubmitDialog } from '@jbrowse/core/ui';
|
|
4
|
+
import { parseBpString, toLocale } from '@jbrowse/core/util';
|
|
5
|
+
import { TextField, Typography } from '@mui/material';
|
|
7
6
|
function format(n) {
|
|
8
7
|
return toLocale(Math.floor(n));
|
|
9
8
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}, children: "Cancel" }), _jsx(Button, { variant: "contained", color: "primary", onClick: () => {
|
|
26
|
-
model.zoomTo(+val2 / model.width);
|
|
27
|
-
handleClose();
|
|
28
|
-
}, children: "Submit" })] })] }));
|
|
29
|
-
});
|
|
30
|
-
export default RegionWidthEditorDialog;
|
|
9
|
+
// not an observer: the initial value is seeded once and the field is
|
|
10
|
+
// user-edited thereafter, so it shouldn't reactively reset if bpPerPx changes
|
|
11
|
+
export default function RegionWidthEditorDialog({ model, handleClose, }) {
|
|
12
|
+
const [val, setVal] = useState(() => format(model.bpPerPx * model.width));
|
|
13
|
+
const bp = parseBpString(val);
|
|
14
|
+
const valid = bp !== undefined && bp > 0;
|
|
15
|
+
return (_jsx(SubmitDialog, { open: true, maxWidth: "xs", fullWidth: true, title: "Edit zoom level", onCancel: handleClose, submitDisabled: !valid, onSubmit: () => {
|
|
16
|
+
if (valid) {
|
|
17
|
+
model.zoomTo(bp / model.width);
|
|
18
|
+
}
|
|
19
|
+
handleClose();
|
|
20
|
+
}, children: _jsxs("div", { style: { display: 'flex', flexDirection: 'column', gap: 30 }, children: [_jsx(Typography, { children: "Enter a specific number of base pairs to change the viewport to show, either in full or abbreviated as e.g. 500kb or 1.5Mbp. This is approximate and does not account for padding between regions or off-screen scrolling" }), _jsx(TextField, { label: "Zoom level (bp)", autoFocus: true, fullWidth: true, variant: "outlined", value: val, onChange: event => {
|
|
21
|
+
setVal(event.target.value);
|
|
22
|
+
} })] }) }));
|
|
23
|
+
}
|