@jbrowse/plugin-linear-genome-view 5.0.0-beta.1 → 5.0.0-beta.11

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 (148) hide show
  1. package/esm/FeatureTrack/configSchema.d.ts +142 -50
  2. package/esm/LaunchLinearGenomeView/index.js +2 -13
  3. package/esm/LinearGenomeView/afterAttach.d.ts +5 -5
  4. package/esm/LinearGenomeView/afterAttach.js +75 -62
  5. package/esm/LinearGenomeView/components/CenterLine.js +5 -3
  6. package/esm/LinearGenomeView/components/CrisprGuidePanel.js +3 -5
  7. package/esm/LinearGenomeView/components/ExportSvgDialog.d.ts +3 -2
  8. package/esm/LinearGenomeView/components/ExportSvgDialog.js +6 -2
  9. package/esm/LinearGenomeView/components/GetSequenceDialog.js +2 -2
  10. package/esm/LinearGenomeView/components/Header.js +11 -1
  11. package/esm/LinearGenomeView/components/HeaderClearHighlightButton.js +2 -2
  12. package/esm/LinearGenomeView/components/HeaderPanControls.js +2 -1
  13. package/esm/LinearGenomeView/components/HeaderZoomControls.js +4 -34
  14. package/esm/LinearGenomeView/components/Highlight.js +7 -7
  15. package/esm/LinearGenomeView/components/HighlightBand.d.ts +9 -1
  16. package/esm/LinearGenomeView/components/HighlightBand.js +15 -3
  17. package/esm/LinearGenomeView/components/HighlightChip.d.ts +1 -2
  18. package/esm/LinearGenomeView/components/HighlightChip.js +5 -7
  19. package/esm/LinearGenomeView/components/HoverPositionHighlight.js +3 -3
  20. package/esm/LinearGenomeView/components/ImportForm.js +2 -2
  21. package/esm/LinearGenomeView/components/LinearGenomeView.js +3 -3
  22. package/esm/LinearGenomeView/components/LinearGenomeViewContainer.js +3 -4
  23. package/esm/LinearGenomeView/components/MiniControls.js +3 -2
  24. package/esm/LinearGenomeView/components/OverviewHighlight.js +3 -3
  25. package/esm/LinearGenomeView/components/OverviewHighlightBand.js +2 -3
  26. package/esm/LinearGenomeView/components/OverviewRubberband.js +20 -45
  27. package/esm/LinearGenomeView/components/OverviewScalebar.js +4 -5
  28. package/esm/LinearGenomeView/components/OverviewScalebarPolygon.js +5 -3
  29. package/esm/LinearGenomeView/components/PaddingBlocks.d.ts +1 -1
  30. package/esm/LinearGenomeView/components/PaddingBlocks.js +14 -9
  31. package/esm/LinearGenomeView/components/RangeSelectOverlay.js +5 -6
  32. package/esm/LinearGenomeView/components/ResizeAllTracksHandle.d.ts +5 -0
  33. package/esm/LinearGenomeView/components/ResizeAllTracksHandle.js +71 -0
  34. package/esm/LinearGenomeView/components/Rubberband.d.ts +1 -2
  35. package/esm/LinearGenomeView/components/Rubberband.js +3 -2
  36. package/esm/LinearGenomeView/components/SVGHighlightBand.js +2 -3
  37. package/esm/LinearGenomeView/components/Scalebar.d.ts +2 -6
  38. package/esm/LinearGenomeView/components/Scalebar.js +8 -5
  39. package/esm/LinearGenomeView/components/ScalebarRefNameLabels.js +49 -34
  40. package/esm/LinearGenomeView/components/SearchBox.js +8 -7
  41. package/esm/LinearGenomeView/components/SearchResultsDialog.d.ts +2 -1
  42. package/esm/LinearGenomeView/components/SearchResultsDialog.js +2 -2
  43. package/esm/LinearGenomeView/components/SearchResultsTable.d.ts +2 -1
  44. package/esm/LinearGenomeView/components/SearchResultsTable.js +12 -29
  45. package/esm/LinearGenomeView/components/SequenceSearchDialog.d.ts +2 -4
  46. package/esm/LinearGenomeView/components/TrackContainer.js +63 -9
  47. package/esm/LinearGenomeView/components/TrackLabel.js +10 -3
  48. package/esm/LinearGenomeView/components/TrackLabelButtons.js +2 -2
  49. package/esm/LinearGenomeView/components/TrackLabelDragHandle.js +2 -2
  50. package/esm/LinearGenomeView/components/TrackLabelMenu.js +3 -2
  51. package/esm/LinearGenomeView/components/TrackRenderingContainer.d.ts +4 -1
  52. package/esm/LinearGenomeView/components/TrackRenderingContainer.js +11 -23
  53. package/esm/LinearGenomeView/components/TracksContainer.js +10 -22
  54. package/esm/LinearGenomeView/components/VerticalGuide.d.ts +1 -2
  55. package/esm/LinearGenomeView/components/VerticalGuide.js +3 -16
  56. package/esm/LinearGenomeView/components/ZoomButton.js +6 -1
  57. package/esm/LinearGenomeView/components/ZoomTransform.js +4 -0
  58. package/esm/LinearGenomeView/components/fetchSequence.d.ts +1 -2
  59. package/esm/LinearGenomeView/components/recentLocationsMenu.js +10 -0
  60. package/esm/LinearGenomeView/components/searchModes.d.ts +1 -1
  61. package/esm/LinearGenomeView/components/searchModes.js +1 -1
  62. package/esm/LinearGenomeView/components/useRangeSelect.d.ts +0 -3
  63. package/esm/LinearGenomeView/components/useRangeSelect.js +20 -59
  64. package/esm/LinearGenomeView/components/useSideScroll.d.ts +16 -2
  65. package/esm/LinearGenomeView/components/useSideScroll.js +153 -103
  66. package/esm/LinearGenomeView/components/util.d.ts +4 -0
  67. package/esm/LinearGenomeView/components/util.js +4 -2
  68. package/esm/LinearGenomeView/consts.d.ts +2 -0
  69. package/esm/LinearGenomeView/consts.js +3 -1
  70. package/esm/LinearGenomeView/containingLgv.d.ts +21 -0
  71. package/esm/LinearGenomeView/containingLgv.js +23 -0
  72. package/esm/LinearGenomeView/headerFit.d.ts +4 -2
  73. package/esm/LinearGenomeView/headerFit.js +20 -7
  74. package/esm/LinearGenomeView/index.d.ts +1 -5
  75. package/esm/LinearGenomeView/index.js +10 -7
  76. package/esm/LinearGenomeView/keyboardHandler.d.ts +2 -0
  77. package/esm/LinearGenomeView/keyboardHandler.js +15 -1
  78. package/esm/LinearGenomeView/launchKeys.d.ts +2 -0
  79. package/esm/LinearGenomeView/launchKeys.js +27 -0
  80. package/esm/LinearGenomeView/lazyDialogs.d.ts +2 -4
  81. package/esm/LinearGenomeView/lazyDialogs.js +1 -0
  82. package/esm/LinearGenomeView/linkedViewSync.d.ts +3 -11
  83. package/esm/LinearGenomeView/linkedViewSync.js +27 -43
  84. package/esm/LinearGenomeView/menuItems.d.ts +16 -18
  85. package/esm/LinearGenomeView/menuItems.js +242 -151
  86. package/esm/LinearGenomeView/model.d.ts +2027 -200
  87. package/esm/LinearGenomeView/model.js +560 -395
  88. package/esm/LinearGenomeView/sharedScaleContainer.d.ts +1 -1
  89. package/esm/LinearGenomeView/showRegionsWithUndo.js +7 -1
  90. package/esm/LinearGenomeView/stickyChrome.d.ts +5 -9
  91. package/esm/LinearGenomeView/stickyChrome.js +5 -9
  92. package/esm/LinearGenomeView/svgcomponents/SVGGridlines.js +4 -4
  93. package/esm/LinearGenomeView/svgcomponents/SVGHeader.d.ts +4 -1
  94. package/esm/LinearGenomeView/svgcomponents/SVGHeader.js +8 -21
  95. package/esm/LinearGenomeView/svgcomponents/SVGHighlights.js +8 -8
  96. package/esm/LinearGenomeView/svgcomponents/SVGHighlightsOverlay.js +3 -3
  97. package/esm/LinearGenomeView/svgcomponents/SVGLinearGenomeView.js +7 -11
  98. package/esm/LinearGenomeView/svgcomponents/SVGRegionSeparators.js +2 -5
  99. package/esm/LinearGenomeView/svgcomponents/SVGRowHeader.js +5 -6
  100. package/esm/LinearGenomeView/svgcomponents/SVGRuler.js +9 -10
  101. package/esm/LinearGenomeView/svgcomponents/SVGScalebar.js +3 -3
  102. package/esm/LinearGenomeView/svgcomponents/SVGStackedRow.d.ts +27 -0
  103. package/esm/LinearGenomeView/svgcomponents/SVGStackedRow.js +12 -0
  104. package/esm/LinearGenomeView/svgcomponents/SVGTrackLabel.d.ts +2 -1
  105. package/esm/LinearGenomeView/svgcomponents/SVGTrackLabel.js +29 -16
  106. package/esm/LinearGenomeView/svgcomponents/SVGTracks.d.ts +4 -4
  107. package/esm/LinearGenomeView/svgcomponents/SVGTracks.js +6 -5
  108. package/esm/LinearGenomeView/svgcomponents/SVGView.d.ts +1 -1
  109. package/esm/LinearGenomeView/svgcomponents/SVGView.js +1 -1
  110. package/esm/LinearGenomeView/svgcomponents/figureContract.js +14 -14
  111. package/esm/LinearGenomeView/svgcomponents/renderViewTracks.d.ts +1 -0
  112. package/esm/LinearGenomeView/svgcomponents/renderViewTracks.js +1 -1
  113. package/esm/LinearGenomeView/svgcomponents/useViewSvgFigure.js +50 -68
  114. package/esm/LinearGenomeView/svgcomponents/util.d.ts +20 -8
  115. package/esm/LinearGenomeView/svgcomponents/util.js +50 -29
  116. package/esm/LinearGenomeView/types.d.ts +8 -11
  117. package/esm/LinearGenomeView/util.d.ts +60 -45
  118. package/esm/LinearGenomeView/util.js +131 -160
  119. package/esm/MultiLevelRubberband/MultiLevelRubberband.js +7 -4
  120. package/esm/MultiLevelRubberband/index.d.ts +2 -0
  121. package/esm/MultiLevelRubberband/index.js +2 -0
  122. package/esm/MultiLevelRubberband/menuItems.d.ts +34 -0
  123. package/esm/MultiLevelRubberband/menuItems.js +52 -0
  124. package/esm/MultiLevelRubberband/rowLabel.d.ts +22 -0
  125. package/esm/MultiLevelRubberband/rowLabel.js +27 -0
  126. package/esm/MultiLevelRubberband/types.d.ts +1 -0
  127. package/esm/MultiLevelRubberband/useRangeSelect.d.ts +2 -1
  128. package/esm/MultiLevelRubberband/useRangeSelect.js +31 -47
  129. package/esm/displayKitTests/perRegionTestEnv.d.ts +244 -86
  130. package/esm/displayKitTests/perRegionTestEnv.js +30 -29
  131. package/esm/index.d.ts +15 -85
  132. package/esm/index.js +13 -36
  133. package/esm/searchUtils.d.ts +18 -9
  134. package/esm/searchUtils.js +85 -69
  135. package/esm/shared/RubberbandSpan.js +2 -1
  136. package/esm/shared/coordLabels.d.ts +7 -0
  137. package/esm/shared/coordLabels.js +15 -1
  138. package/esm/shared/useWindowDrag.d.ts +18 -0
  139. package/esm/shared/useWindowDrag.js +45 -0
  140. package/package.json +10 -10
  141. package/esm/LinearGenomeView/FloatingSvgOverlay.d.ts +0 -5
  142. package/esm/LinearGenomeView/FloatingSvgOverlay.js +0 -25
  143. package/esm/LinearGenomeView/initKeys.d.ts +0 -13
  144. package/esm/LinearGenomeView/initKeys.js +0 -104
  145. package/esm/MultiLevelRubberband/VerticalGuide.d.ts +0 -6
  146. package/esm/MultiLevelRubberband/VerticalGuide.js +0 -21
  147. package/esm/lazyPluginExports.d.ts +0 -23
  148. package/esm/lazyPluginExports.js +0 -36
@@ -1,4 +1,5 @@
1
- import type { BpOffset, ExportSvgOptions, HighlightType, InitState, NavLocation, VolatileGuide } from './types.ts';
1
+ import type { BpOffset, ExportSvgOptions, HighlightType, InitState, NavLocation, ViewTrackLabelMode, VolatileGuide } from './types.ts';
2
+ import type { RegionEdit } from './util.ts';
2
3
  import type PluginManager from '@jbrowse/core/PluginManager';
3
4
  import type BaseResult from '@jbrowse/core/TextSearch/BaseResults';
4
5
  import type { MenuItem } from '@jbrowse/core/ui';
@@ -7,36 +8,47 @@ import type { ViewLayout } from '@jbrowse/core/util/Base1DUtils';
7
8
  import type { BlockSet, ContentBlock } from '@jbrowse/core/util/blockTypes';
8
9
  import type { Region } from '@jbrowse/core/util/types';
9
10
  import type { ViewStatus } from '@jbrowse/core/util/viewStatus';
11
+ import type { LaunchInput } from '@jbrowse/core/util/withLaunchInput';
10
12
  import type { Instance } from '@jbrowse/mobx-state-tree';
13
+ /** One span of the row that is not track data — see `paddingSpans`. */
14
+ export interface PaddingSpan {
15
+ key: string;
16
+ x: number;
17
+ width: number;
18
+ kind: 'seam' | 'elided' | 'boundary';
19
+ }
20
+ export interface HighlightRegion {
21
+ assemblyName?: string;
22
+ refName: string;
23
+ start: number;
24
+ end: number;
25
+ }
11
26
  /**
12
27
  * #stateModel LinearGenomeView
13
28
  * #category view
14
29
  *
15
30
  * #example
16
- * A `LinearGenomeView` is what you hand-author under `defaultSession.views`. The
17
- * `init` shorthand fills in `displayedRegions`/`bpPerPx`/`offsetPx` for you:
31
+ * A `LinearGenomeView` is what you hand-author under `defaultSession.views`, and
32
+ * every setting goes directly on the view object. `assembly`/`loc` fill in
33
+ * `displayedRegions`/`bpPerPx`/`offsetPx` for you:
18
34
  * ```js
19
35
  * defaultSession: {
20
36
  * name: 'My session',
21
37
  * views: [
22
38
  * {
23
39
  * type: 'LinearGenomeView',
24
- * // plain persisted props sit alongside init, not inside it
25
40
  * colorByCDS: true,
26
- * init: {
27
- * assembly: 'hg38',
28
- * loc: 'chr1:1,000,000-1,100,000',
29
- * tracks: ['genes', 'alignments'],
30
- * },
41
+ * assembly: 'hg38',
42
+ * loc: 'chr1:1,000,000-1,100,000',
43
+ * tracks: ['genes', 'alignments'],
31
44
  * },
32
45
  * ],
33
46
  * }
34
47
  * ```
35
- * `init` holds only keys that need on-attach resolution — also `tracklist`,
36
- * `nav`, `highlight` (see the `init` property below). Plain view props like
37
- * `colorByCDS`, `showAminoAcids`, `showCenterLine`, `trackLabels`,
38
- * `showHighlightChips` are set
39
- * directly on the view (MST restores them natively).
48
+ * `assembly`, `loc`, `tracks`, `tracklist`, `nav` and `highlight` need
49
+ * on-attach resolution and are captured into the `launch` property below;
50
+ * `colorByCDS`, `showAminoAcids`, `showCenterLine` and `trackLabels` are plain
51
+ * view props MST restores natively. Both are written the same way.
40
52
  * At runtime the same model is driven imperatively — every property and action
41
53
  * below is reachable on `viewState.session.views[0]`:
42
54
  * ```js
@@ -46,14 +58,11 @@ import type { Instance } from '@jbrowse/mobx-state-tree';
46
58
  * view.zoomTo(view.bpPerPx * 2) // zoom out 2x
47
59
  * ```
48
60
  */
49
- export declare function stateModelFactory(pluginManager: PluginManager): import("@jbrowse/mobx-state-tree").IModelType<Omit<Omit<{
61
+ export declare function stateModelFactory(pluginManager: PluginManager): import("@jbrowse/mobx-state-tree").IModelType<Omit<{
50
62
  id: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<string>, [undefined]>;
51
63
  displayName: import("@jbrowse/mobx-state-tree").IMaybe<import("@jbrowse/mobx-state-tree").ISimpleType<string>>;
52
64
  minimized: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
53
- }, "highlight" | "showHighlightChips"> & {
54
- highlight: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").IArrayType<import("@jbrowse/mobx-state-tree").IType<HighlightType, HighlightType, HighlightType>>, [undefined]>;
55
- showHighlightChips: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
56
- }, "colorByCDS" | "displayedRegions" | "hideHeader" | "hideHeaderOverview" | "hideNoTracksActive" | "id" | "init" | "labelsVisible" | "legacyBpPerPx" | "scalebarOnly" | "showAminoAcids" | "showCenterLine" | "showCytobands" | "showGridlines" | "showTrackOutlines" | "trackLabels" | "trackSelectorType" | "tracks" | "type" | "windowStartBp" | "windowWidthBp"> & {
65
+ }, "colorByCDS" | "displayedRegions" | "hideHeader" | "hideHeaderOverview" | "hideNoTracksActive" | "id" | "launch" | "legacyBpPerPx" | "scalebarOnly" | "showAminoAcids" | "showCenterLine" | "showCytobands" | "showGridlines" | "showTrackOutlines" | "trackLabels" | "trackSelectorType" | "tracks" | "type" | "windowStartBp" | "windowWidthBp"> & {
57
66
  id: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<string>, [undefined]>;
58
67
  type: import("@jbrowse/mobx-state-tree").IType<string | undefined, string, string>;
59
68
  windowStartBp: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<number>, [undefined]>;
@@ -64,61 +73,63 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
64
73
  hideHeader: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
65
74
  hideHeaderOverview: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
66
75
  hideNoTracksActive: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
67
- trackSelectorType: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<string>, [undefined]>;
76
+ trackSelectorType: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<"hierarchical">, [undefined]>;
68
77
  showCenterLine: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
69
78
  showCytobands: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
70
79
  trackLabels: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<string>, [undefined]>;
71
80
  showGridlines: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
72
- labelsVisible: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
73
81
  colorByCDS: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
74
82
  showAminoAcids: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
75
83
  showTrackOutlines: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
76
84
  scalebarOnly: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
77
- init: import("@jbrowse/mobx-state-tree").IType<InitState | undefined, InitState | undefined, InitState | undefined>;
85
+ launch: import("@jbrowse/mobx-state-tree").IType<LaunchInput<InitState> | undefined, LaunchInput<InitState> | undefined, LaunchInput<InitState> | undefined>;
78
86
  }, {
79
87
  width: number;
80
88
  bodyMounted: boolean;
81
89
  } & {
90
+ readonly rendersDisplays: boolean;
82
91
  readonly effectiveBodyMounted: boolean;
83
92
  menuItems(): MenuItem[];
93
+ readonly ownTracks: import("@jbrowse/core/util").AbstractTrackModel[];
94
+ readonly ownViews: import("@jbrowse/core/util").AbstractViewModel[];
84
95
  } & {
85
96
  setDisplayName(name: string): void;
86
97
  setWidth(newWidth: number): void;
87
98
  setBodyMounted(flag: boolean): void;
88
99
  setMinimized(flag: boolean): void;
89
- } & {
90
- addToHighlights(highlight: HighlightType): void;
91
- setHighlight(highlight?: HighlightType[]): void;
92
- removeHighlight(highlight: HighlightType): void;
93
- updateHighlight(old: HighlightType, updates: Partial<HighlightType>): void;
94
- setShowHighlightChips(arg: boolean): void;
95
- } & {
96
- afterAttach(): void;
97
100
  } & {
98
101
  /**
99
102
  * #volatile
103
+ * Height of each track's in-flow label band, measured by
104
+ * TrackContainer as the rendering container's offset inside its Paper.
105
+ * Absent (0) while the label is hidden, overlapping, or not yet
106
+ * measured. Observable, so the offset and height getters re-derive
107
+ * when a band changes.
100
108
  */
101
- volatileWidth: number | undefined;
109
+ trackLabelBands: import("mobx").ObservableMap<string, number>;
102
110
  /**
103
111
  * #volatile
112
+ * How much taller the view's box is than the scroll port it sits in,
113
+ * in px, negative when it is shorter. Measured by the view component
114
+ * for a top-level view; undefined until then, and for a nested one.
104
115
  */
105
- minimumBlockWidth: number;
116
+ scrollPortExcess: number | undefined;
106
117
  /**
107
118
  * #volatile
108
119
  */
109
- draggingTrackId: undefined | string;
120
+ volatileWidth: number | undefined;
110
121
  /**
111
122
  * #volatile
112
123
  */
113
- lastTrackDragY: undefined | number;
124
+ draggingTrackId: undefined | string;
114
125
  /**
115
126
  * #volatile
116
127
  */
117
- volatileError: unknown;
128
+ lastTrackDragY: undefined | number;
118
129
  /**
119
130
  * #volatile
120
131
  */
121
- trackRefs: Record<string, HTMLDivElement>;
132
+ volatileError: unknown;
122
133
  /**
123
134
  * #volatile
124
135
  */
@@ -143,16 +154,22 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
143
154
  * #volatile
144
155
  */
145
156
  isScalebarRefNameMenuOpen: boolean;
146
- /**
147
- * #volatile
148
- */
149
- scalebarRefNameClickPending: boolean;
150
157
  /**
151
158
  * #volatile
152
159
  * temporary vertical guides that can be set by displays (e.g., LD display hover)
153
160
  */
154
161
  volatileGuides: VolatileGuide[];
155
162
  } & {
163
+ /**
164
+ * #getter
165
+ * the launch state that still has something to apply — the gate every
166
+ * loading and error path below reads.
167
+ */
168
+ readonly pendingLaunch: LaunchInput<InitState & {
169
+ unknown?: Record<string, unknown>;
170
+ malformed?: Record<string, unknown>;
171
+ legacyInit?: boolean;
172
+ } & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("@jbrowse/mobx-state-tree").IType<LaunchInput<InitState> | undefined, LaunchInput<InitState> | undefined, LaunchInput<InitState> | undefined>>> | undefined;
156
173
  /**
157
174
  * #getter
158
175
  * corresponds roughly to the zoom level, base-pairs per pixel.
@@ -169,6 +186,12 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
169
186
  * corresponds roughly to the horizontal scroll of the LGV
170
187
  */
171
188
  readonly offsetPx: number;
189
+ /**
190
+ * #getter
191
+ * a displayed region narrower than this many pixels draws as an elided
192
+ * block
193
+ */
194
+ readonly minimumBlockWidth: number;
172
195
  /**
173
196
  * #getter
174
197
  * scroll-to-zoom is a global, personal preference resolved from the
@@ -188,7 +211,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
188
211
  * the effective track labels setting, resolving the stored `trackLabels`
189
212
  * against the LinearGenomeViewPlugin config default
190
213
  */
191
- readonly effectiveTrackLabels: any;
214
+ readonly effectiveTrackLabels: ViewTrackLabelMode;
192
215
  /**
193
216
  * #getter
194
217
  */
@@ -206,6 +229,11 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
206
229
  * #getter
207
230
  */
208
231
  readonly assemblyDisplayNames: string[];
232
+ /**
233
+ * #getter
234
+ * the session's highlights on this view's assemblies
235
+ */
236
+ readonly highlights: HighlightType[];
209
237
  /**
210
238
  * #getter
211
239
  * checking if lgv is a 'top-level' view is used for toggling pin track
@@ -221,8 +249,19 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
221
249
  } & {
222
250
  /**
223
251
  * #getter
224
- * Assembly-name prefix for the scalebar refName labels, or undefined for
225
- * none. A container view (e.g. LinearSyntenyView) opts its sub-views in by
252
+ * The census entry for this view: the tracks it holds itself. Declared
253
+ * rather than derived — see `BaseViewModel.ownTracks`.
254
+ */
255
+ readonly ownTracks: any[];
256
+ /**
257
+ * #getter
258
+ * See `BaseViewModel.rendersDisplays`.
259
+ */
260
+ readonly rendersDisplays: boolean;
261
+ /**
262
+ * #getter
263
+ * Assembly name captioning the scalebar ahead of its refName labels, or
264
+ * undefined for none. A container view (e.g. LinearSyntenyView) opts its sub-views in by
226
265
  * exposing showAssemblyNameInSubviewScalebar; duck-typed rather than
227
266
  * matching a concrete view type so no upward plugin dependency is needed
228
267
  * and any container can opt in. A wrong nesting depth simply yields no
@@ -237,7 +276,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
237
276
  /**
238
277
  * #getter
239
278
  */
240
- readonly assemblyErrors: string;
279
+ readonly assemblyErrors: string | undefined;
241
280
  /**
242
281
  * #getter
243
282
  */
@@ -255,7 +294,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
255
294
  error: unknown;
256
295
  loadingP: Promise<void> | undefined;
257
296
  adapterLoads: import("@jbrowse/quick-lru").default<string, Promise<import("@jbrowse/core/assemblyManager/assembly").RefNameAliases>>;
258
- volatileRegions: import("@jbrowse/core/assemblyManager/assembly").BasicRegion[] | undefined;
297
+ regions: import("@jbrowse/core/assemblyManager/assembly").BasicRegion[] | undefined;
259
298
  refNameAliases: import("@jbrowse/core/assemblyManager/assembly").RefNameAliases | undefined;
260
299
  canonicalToSeqAdapterRefNames: Record<string, string> | undefined;
261
300
  cytobands: import("@jbrowse/core/util").Feature[] | undefined;
@@ -293,7 +332,6 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
293
332
  afterAttach(): void;
294
333
  } & {
295
334
  readonly initialized: boolean;
296
- readonly regions: import("@jbrowse/core/assemblyManager/assembly").BasicRegion[] | undefined;
297
335
  readonly allRefNames: string[] | undefined;
298
336
  readonly namesByCanonicalRefName: Map<string, string[]> | undefined;
299
337
  readonly rpcManager: import("@jbrowse/core/rpc/RpcManager").default;
@@ -311,6 +349,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
311
349
  getCanonicalRefName2(refName: string): string;
312
350
  isValidRefName(refName: string): boolean;
313
351
  } & {
352
+ getRefNamePosition(refName: string): number | undefined;
314
353
  getAliasesForRefName(refName: string): string[];
315
354
  getRefNameMapForAdapter(adapterConf: {
316
355
  [x: string]: unknown;
@@ -322,7 +361,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
322
361
  error: unknown;
323
362
  loadingP: Promise<void> | undefined;
324
363
  adapterLoads: import("@jbrowse/quick-lru").default<string, Promise<import("@jbrowse/core/assemblyManager/assembly").RefNameAliases>>;
325
- volatileRegions: import("@jbrowse/core/assemblyManager/assembly").BasicRegion[] | undefined;
364
+ regions: import("@jbrowse/core/assemblyManager/assembly").BasicRegion[] | undefined;
326
365
  refNameAliases: import("@jbrowse/core/assemblyManager/assembly").RefNameAliases | undefined;
327
366
  canonicalToSeqAdapterRefNames: Record<string, string> | undefined;
328
367
  cytobands: import("@jbrowse/core/util").Feature[] | undefined;
@@ -360,7 +399,6 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
360
399
  afterAttach(): void;
361
400
  } & {
362
401
  readonly initialized: boolean;
363
- readonly regions: import("@jbrowse/core/assemblyManager/assembly").BasicRegion[] | undefined;
364
402
  readonly allRefNames: string[] | undefined;
365
403
  readonly namesByCanonicalRefName: Map<string, string[]> | undefined;
366
404
  readonly rpcManager: import("@jbrowse/core/rpc/RpcManager").default;
@@ -378,12 +416,23 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
378
416
  getCanonicalRefName2(refName: string): string;
379
417
  isValidRefName(refName: string): boolean;
380
418
  } & {
419
+ getRefNamePosition(refName: string): number | undefined;
381
420
  getAliasesForRefName(refName: string): string[];
382
421
  getRefNameMapForAdapter(adapterConf: {
383
422
  [x: string]: unknown;
384
423
  }, options: import("@jbrowse/core/data_adapters/BaseAdapter").BaseOptions): Promise<import("@jbrowse/core/assemblyManager/assembly").RefNameAliases>;
385
424
  getRefNameMismatch(adapterCacheKey: string): import("@jbrowse/core/assemblyManager/assembly").RefNameMismatch | undefined;
386
425
  }, import("@jbrowse/mobx-state-tree")._NotCustomized, import("@jbrowse/mobx-state-tree")._NotCustomized>>) | undefined;
426
+ /**
427
+ * #getter
428
+ * The assembly a pending launch is for: the one it names, else the one
429
+ * the view already shows. A re-launch of a materialized view (a
430
+ * `jb.setSession` document writing `loc` beside the built state) need
431
+ * not restate it; without the default the readiness gate waited on
432
+ * `assemblyManager.get(undefined)` for good. Undefined on a fresh view
433
+ * whose blob names none, which `error` reports.
434
+ */
435
+ readonly launchAssemblyName: string | undefined;
387
436
  /**
388
437
  * #getter
389
438
  */
@@ -404,7 +453,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
404
453
  error: unknown;
405
454
  loadingP: Promise<void> | undefined;
406
455
  adapterLoads: import("@jbrowse/quick-lru").default<string, Promise<import("@jbrowse/core/assemblyManager/assembly").RefNameAliases>>;
407
- volatileRegions: import("@jbrowse/core/assemblyManager/assembly").BasicRegion[] | undefined;
456
+ regions: import("@jbrowse/core/assemblyManager/assembly").BasicRegion[] | undefined;
408
457
  refNameAliases: import("@jbrowse/core/assemblyManager/assembly").RefNameAliases | undefined;
409
458
  canonicalToSeqAdapterRefNames: Record<string, string> | undefined;
410
459
  cytobands: import("@jbrowse/core/util").Feature[] | undefined;
@@ -442,7 +491,6 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
442
491
  afterAttach(): void;
443
492
  } & {
444
493
  readonly initialized: boolean;
445
- readonly regions: import("@jbrowse/core/assemblyManager/assembly").BasicRegion[] | undefined;
446
494
  readonly allRefNames: string[] | undefined;
447
495
  readonly namesByCanonicalRefName: Map<string, string[]> | undefined;
448
496
  readonly rpcManager: import("@jbrowse/core/rpc/RpcManager").default;
@@ -460,6 +508,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
460
508
  getCanonicalRefName2(refName: string): string;
461
509
  isValidRefName(refName: string): boolean;
462
510
  } & {
511
+ getRefNamePosition(refName: string): number | undefined;
463
512
  getAliasesForRefName(refName: string): string[];
464
513
  getRefNameMapForAdapter(adapterConf: {
465
514
  [x: string]: unknown;
@@ -471,7 +520,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
471
520
  error: unknown;
472
521
  loadingP: Promise<void> | undefined;
473
522
  adapterLoads: import("@jbrowse/quick-lru").default<string, Promise<import("@jbrowse/core/assemblyManager/assembly").RefNameAliases>>;
474
- volatileRegions: import("@jbrowse/core/assemblyManager/assembly").BasicRegion[] | undefined;
523
+ regions: import("@jbrowse/core/assemblyManager/assembly").BasicRegion[] | undefined;
475
524
  refNameAliases: import("@jbrowse/core/assemblyManager/assembly").RefNameAliases | undefined;
476
525
  canonicalToSeqAdapterRefNames: Record<string, string> | undefined;
477
526
  cytobands: import("@jbrowse/core/util").Feature[] | undefined;
@@ -509,7 +558,6 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
509
558
  afterAttach(): void;
510
559
  } & {
511
560
  readonly initialized: boolean;
512
- readonly regions: import("@jbrowse/core/assemblyManager/assembly").BasicRegion[] | undefined;
513
561
  readonly allRefNames: string[] | undefined;
514
562
  readonly namesByCanonicalRefName: Map<string, string[]> | undefined;
515
563
  readonly rpcManager: import("@jbrowse/core/rpc/RpcManager").default;
@@ -527,6 +575,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
527
575
  getCanonicalRefName2(refName: string): string;
528
576
  isValidRefName(refName: string): boolean;
529
577
  } & {
578
+ getRefNamePosition(refName: string): number | undefined;
530
579
  getAliasesForRefName(refName: string): string[];
531
580
  getRefNameMapForAdapter(adapterConf: {
532
581
  [x: string]: unknown;
@@ -535,26 +584,10 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
535
584
  }, import("@jbrowse/mobx-state-tree")._NotCustomized, import("@jbrowse/mobx-state-tree")._NotCustomized>>) | undefined;
536
585
  /**
537
586
  * #getter
538
- * What the spinner says. The assembly reports which of its files it is
539
- * downloading, so this is "Downloading chromosome aliases" rather than a bare
540
- * "Loading" for the part of startup that actually takes time. Falls back
541
- * once the assembly is loaded and the remaining wait is the init autorun's
542
- * own navigation, which is local.
543
- */
544
- readonly loadingMessage: string | undefined;
545
- /**
546
- * #getter
547
- * Determinate fraction for the spinner's bar, when the assembly load
548
- * reports one (a whole-file download with a Content-Length)
549
- */
550
- readonly loadingProgress: number | undefined;
551
- /**
552
- * #getter
553
- * The URL the assembly load is currently fetching, when the phase named
554
- * one. Only the stalled-load notice reads it — see
555
- * {@link ViewLoadingScreen}.
587
+ * What the loading screen says while `showLoading`, read off the
588
+ * assembly whose load is the wait; undefined otherwise.
556
589
  */
557
- readonly loadingSource: string | undefined;
590
+ readonly loading: import("@jbrowse/core/util/viewStatus").ViewLoading | undefined;
558
591
  /**
559
592
  * #getter
560
593
  */
@@ -567,7 +600,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
567
600
  * would mount over empty regions and pxToBp/hover would throw.
568
601
  *
569
602
  * **Not dotplot's or synteny's `initPending`**, which is the bare
570
- * `!!self.init` — "an init blob has not been applied" — and which those
603
+ * `!!self.pendingLaunch` — "an init blob has not been applied" — and which those
571
604
  * views read from their `settled` gate rather than from `showLoading`.
572
605
  * This one is narrower on purpose: it closes only the window where there
573
606
  * is nothing on screen. Once navigation has produced regions the view is
@@ -637,33 +670,16 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
637
670
  * #getter
638
671
  * A track's full cost beyond its display height.
639
672
  *
640
- * The track *label* is not counted, and cannot be: an offset label is an
641
- * in-flow box whose height is whatever the theme renders a Paper of icon
642
- * buttons at — 31.140625px on the stock theme, and not a number this file
643
- * can derive. So these getters are exact while labels are hidden or
644
- * overlapping, and short by one label box per labelled track otherwise.
645
- * Anything needing the offset to the pixel with labels showing measures
646
- * the DOM; `BreakpointSplitViewOverlay` does, and falls back to this
647
- * arithmetic only for a track with no mounted div.
673
+ * The track *label* is not counted here: an offset label is an in-flow
674
+ * box whose height is whatever the theme renders a Paper of icon buttons
675
+ * at, so it is measured into `trackLabelBands` per track and added by
676
+ * `trackLabelBand` rather than derived.
648
677
  */
649
678
  readonly trackChromeHeight: number;
650
679
  /**
651
680
  * #getter
652
681
  */
653
682
  readonly headerHeight: number;
654
- /**
655
- * #getter
656
- * Where the scalebar pins when the view's chrome is sticky: everything
657
- * stacked above it, which is the view's own title bar plus this view's
658
- * header. Expressed from `headerHeight` rather than re-summing its
659
- * constants — the two are the same box, and a second spelling of the sum
660
- * is free to drift from the first while both typecheck.
661
- */
662
- readonly rubberbandTop: number;
663
- /**
664
- * #getter
665
- */
666
- readonly pinnedTracksTop: number;
667
683
  /**
668
684
  * #method
669
685
  * rendered height of a single track, collapsing to a fixed height when
@@ -673,6 +689,12 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
673
689
  * can't diverge from what is on screen.
674
690
  */
675
691
  trackHeight(track: (import("@jbrowse/mobx-state-tree").IMSTArray<import("@jbrowse/mobx-state-tree").IAnyType> & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("@jbrowse/mobx-state-tree").IArrayType<import("@jbrowse/mobx-state-tree").IAnyType>>)[number]): any;
692
+ /**
693
+ * #method
694
+ * the measured in-flow label band above a track's rendering container,
695
+ * 0 until TrackContainer has measured one or when no label is in flow
696
+ */
697
+ trackLabelBand(track: (import("@jbrowse/mobx-state-tree").IMSTArray<import("@jbrowse/mobx-state-tree").IAnyType> & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("@jbrowse/mobx-state-tree").IArrayType<import("@jbrowse/mobx-state-tree").IAnyType>>)[number]): number;
676
698
  /**
677
699
  * #getter
678
700
  */
@@ -685,6 +707,12 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
685
707
  * #getter
686
708
  */
687
709
  readonly height: number;
710
+ /**
711
+ * #getter
712
+ * The display height of each track a whole-stack resize moves, by track
713
+ * instance id: every shown track that is not minimized.
714
+ */
715
+ readonly resizableTrackHeights: Map<any, any>;
688
716
  /**
689
717
  * #method
690
718
  * Y offset (in pixels, from the top of the view) where a track's
@@ -692,10 +720,10 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
692
720
  * first, then unpinned), from the same constants TrackContainer lays its
693
721
  * Paper out with. Returns `undefined` if the track is not present.
694
722
  *
695
- * Exact while track labels are hidden or overlapping. With an offset
696
- * label the answer is short by one label box per labelled track above
697
- * this one — see `trackChromeHeight` for why that box is not derivable
698
- * here.
723
+ * Includes each track's measured label band, this track's own included,
724
+ * since an in-flow label sits above the rendering container inside the
725
+ * same Paper. Exact once TrackContainer has measured; before that it is
726
+ * short by the unmeasured bands.
699
727
  */
700
728
  getTrackYOffset(trackId: string): number | undefined;
701
729
  /**
@@ -715,16 +743,16 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
715
743
  readonly fitBpPerPx: number;
716
744
  /**
717
745
  * #getter
718
- * The zoom-out limit. This view's own fit, except while a container holds
719
- * it on a shared scale coarser than that — a small genome next to a large
720
- * one, drawn short so the two compare by length.
746
+ * The zoom-out limit. Equal to the fit for this view's regions, except
747
+ * while a container holds it on a coarser shared scale, such as a small
748
+ * genome next to a large one, drawn short so the two compare by length.
721
749
  *
722
- * Raising the LIMIT is what makes such a scale survive: written past the
723
- * limit instead, it is undone by the first thing that clamps — a wheel
724
- * tick, a rubberband, a `setDisplayedRegions` — which is how the dotplot's
725
- * locked aspect ratio once turned "zoom out" into a zoom in
726
- * (`axisMaxBpPerPx`). Here every route to a zoom clamps against the same
727
- * ceiling, so full zoom-out LANDS on the shared scale.
750
+ * The shared scale raises the limit. A bpPerPx written past the limit
751
+ * would be undone by the first operation that clamps (a wheel tick, a
752
+ * rubberband, a `setDisplayedRegions`), as with the dotplot's locked
753
+ * aspect ratio turning "zoom out" into a zoom in (`axisMaxBpPerPx`).
754
+ * Every zoom clamps against the same ceiling, so full zoom-out stops at
755
+ * the shared scale.
728
756
  */
729
757
  readonly maxBpPerPx: number;
730
758
  /**
@@ -807,19 +835,34 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
807
835
  /**
808
836
  * #action
809
837
  */
810
- setWidth(newWidth: number): void;
838
+ setTrackLabelBand(trackId: string, band: number): void;
811
839
  /**
812
840
  * #action
813
841
  */
814
- setError(error: unknown): void;
842
+ setScrollPortExcess(px: number | undefined): void;
815
843
  /**
816
844
  * #action
845
+ * Grow or shrink every unminimized track by `distance` px in all, each
846
+ * by its share of the height it has above the display minimum. `from` is
847
+ * the heights to scale, by track instance id; a drag passes the heights
848
+ * it started with, so whole-pixel rounding does not compound frame by
849
+ * frame. Returns how far the stack moved.
817
850
  */
818
- setIsScalebarRefNameMenuOpen(isOpen: boolean): void;
851
+ resizeTracks(distance: number, from?: any): number;
852
+ /**
853
+ * #action
854
+ * A resize keeps the window in bp, so `bpPerPx` follows the new width
855
+ * and the view keeps framing the same sequence (ADR-070).
856
+ */
857
+ setWidth(newWidth: number): void;
858
+ /**
859
+ * #action
860
+ */
861
+ setError(error: unknown): void;
819
862
  /**
820
863
  * #action
821
864
  */
822
- setScalebarRefNameClickPending(pending: boolean): void;
865
+ setIsScalebarRefNameMenuOpen(isOpen: boolean): void;
823
866
  /**
824
867
  * #action
825
868
  */
@@ -840,10 +883,6 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
840
883
  * #action
841
884
  */
842
885
  setShowGridlines(b: boolean): void;
843
- /**
844
- * #action
845
- */
846
- setLabelsVisible(arg: boolean): void;
847
886
  /**
848
887
  * #action
849
888
  * set temporary vertical guides (e.g., for LD display hover)
@@ -878,8 +917,11 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
878
917
  setOffsets(left?: BpOffset, right?: BpOffset): void;
879
918
  /**
880
919
  * #action
920
+ * Raise the picker over search results that name more than one place.
921
+ * @param onPick - where a picked result lands; by default it navigates
922
+ * there and shows the track its index came from
881
923
  */
882
- setSearchResults(searchResults: BaseResult[], searchQuery: string, assemblyName: string): void;
924
+ setSearchResults(searchResults: BaseResult[], searchQuery: string, assemblyName: string, onPick?: (result: BaseResult) => Promise<unknown>): void;
883
925
  /**
884
926
  * #action
885
927
  */
@@ -891,32 +933,57 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
891
933
  } & {
892
934
  /**
893
935
  * #action
936
+ * Resize every unminimized track so the view is exactly as tall as the
937
+ * scroll port it sits in. Does nothing until the view has measured one.
938
+ */
939
+ fitTracksToWindow(): void;
940
+ /**
941
+ * #action
942
+ * showTrack for a track whose display state model may be lazily
943
+ * loaded: loads it, then shows
944
+ */
945
+ launchTrack(trackId: string, initialSnapshot?: any, displayInitialSnapshot?: any, inlineConf?: Record<string, unknown>): Promise<any>;
946
+ } & {
947
+ /**
948
+ * #method
949
+ * The shown track a move action means: the menu passes a track model's
950
+ * own `id`, an agent passes the `trackId` it knows the track by, and
951
+ * both name one shown track. Answers the model id, or the argument
952
+ * unchanged when nothing shown matches, so the move reports it.
894
953
  */
895
- moveTrackDown(id: string): void;
954
+ trackModelId(idOrTrackId: string): any;
955
+ } & {
956
+ moveTrack: (moving: string, target: string) => void;
896
957
  /**
897
958
  * #action
898
959
  */
899
- moveTrackUp(id: string): void;
960
+ moveTrackDown(idOrTrackId: string): void;
900
961
  /**
901
962
  * #action
902
963
  */
903
- moveTrackToTop(id: string): void;
964
+ moveTrackUp(idOrTrackId: string): void;
904
965
  /**
905
966
  * #action
906
967
  */
907
- moveTrackToBottom(id: string): void;
968
+ moveTrackToTop(idOrTrackId: string): void;
908
969
  /**
909
970
  * #action
910
971
  */
911
- moveTrack(movingId: string, targetId: string): void;
972
+ moveTrackToBottom(idOrTrackId: string): void;
973
+ } & {
912
974
  /**
913
975
  * #action
914
976
  */
915
977
  toggleTrack(trackId: string): boolean;
978
+ /**
979
+ * #action
980
+ * toggleTrack with launchTrack's loading behavior
981
+ */
982
+ launchToggleTrack(trackId: string): Promise<boolean>;
916
983
  /**
917
984
  * #action
918
985
  */
919
- setTrackLabels(setting: 'overlapping' | 'offset' | 'hidden'): void;
986
+ setTrackLabels(setting: ViewTrackLabelMode): void;
920
987
  /**
921
988
  * #action
922
989
  */
@@ -955,10 +1022,6 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
955
1022
  * #action
956
1023
  */
957
1024
  setDraggingTrackId(idx?: string): void;
958
- /**
959
- * #action
960
- */
961
- setLastTrackDragY(y: number): void;
962
1025
  /**
963
1026
  * #action
964
1027
  * called while dragging a track over the track at `targetId`; reorders
@@ -969,12 +1032,13 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
969
1032
  /**
970
1033
  * #action
971
1034
  */
972
- setInit(arg?: InitState): void;
1035
+ setLaunch(launch?: LaunchInput<InitState>): void;
973
1036
  /**
974
1037
  * #method
975
- * creates an svg export and save using FileSaver
1038
+ * renders the view to SVG markup, which it returns; saves it through
1039
+ * FileSaver unless `save: false`
976
1040
  */
977
- exportSvg(opts?: ExportSvgOptions): Promise<void>;
1041
+ exportSvg(opts?: ExportSvgOptions): Promise<string>;
978
1042
  } & {
979
1043
  slide: (viewWidths: number) => void;
980
1044
  zoom: (targetBpPerPx: number) => void;
@@ -988,19 +1052,18 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
988
1052
  * #getter
989
1053
  * an ideogram only reads correctly against an entire chromosome: on a
990
1054
  * sub-region it is a meaningless slice of bands, and the centromere shows
991
- * up as a lone half-triangle
1055
+ * up as a lone half-triangle. The chromosome needs bands of its own too:
1056
+ * a cytoband file often lists only the main chromosomes, not chrM or the
1057
+ * unplaced scaffolds
992
1058
  */
993
1059
  readonly canShowCytobands: boolean;
994
1060
  /**
995
1061
  * #getter
996
1062
  * the `showCytobands` setting gated by whether cytobands can be shown at
997
- * all (whole chromosome + data present) — i.e. actually on screen
1063
+ * all (whole chromosome with bands of its own) and by the header
1064
+ * overview they draw in being on, which the SVG export follows too
998
1065
  */
999
1066
  readonly effectiveShowCytobands: boolean;
1000
- /**
1001
- * #getter
1002
- */
1003
- readonly anyCytobandsExist: boolean;
1004
1067
  /**
1005
1068
  * #getter
1006
1069
  * the cytoband is displayed to the right of the chromosome name, and
@@ -1017,6 +1080,11 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
1017
1080
  * return the view menu items
1018
1081
  */
1019
1082
  menuItems(): MenuItem[];
1083
+ /**
1084
+ * #method
1085
+ * the view menu's Highlights submenu; extend this to add a row there
1086
+ */
1087
+ highlightsSubMenuItems(): MenuItem[];
1020
1088
  /**
1021
1089
  * #method
1022
1090
  * what a plugin can start from the selected region — a synteny view, a
@@ -1177,8 +1245,9 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
1177
1245
  * into that through `scalebarDisplayPrefix`) and whether it is flipped.
1178
1246
  * A ` [rev]` there is a fact about the ROW; the same marker on a
1179
1247
  * chromosome name means that one region, which only happens under mixed
1180
- * orientation. `captionSpanPx` is the width it takes, which the
1181
- * coordinate numbers stay out from under. The SVG export deliberately
1248
+ * orientation. `captionSpanPx` is the width it takes: the sticky label
1249
+ * pins to its right edge rather than the viewport's, and the coordinate
1250
+ * numbers stay out from under it. The SVG export deliberately
1182
1251
  * calls `getScalebarRefNameLabels` itself with no prefix rather than
1183
1252
  * reading this, since it draws its own assembly name above the ruler.
1184
1253
  */
@@ -1192,38 +1261,38 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
1192
1261
  * Every span along the row that is not track data, as plain geometry in
1193
1262
  * the staticBlocks frame — the same frame as gridlineTicks and
1194
1263
  * scalebarLabels, so one `translateX(staticBlocksTranslateX)` places all
1195
- * three. Three kinds, and a host drawing its own chrome needs all of
1196
- * them:
1264
+ * three. A host drawing its own chrome needs all three kinds:
1197
1265
  *
1198
1266
  * - `seam`: the 3px bar at a region's right edge. Displayed regions are
1199
- * laid out **contiguously** — calculateStaticBlocks emits boundary
1200
- * padding only before the first region and after the last — so this
1267
+ * laid out **contiguously** (calculateStaticBlocks emits boundary
1268
+ * padding only before the first region and after the last), so this
1201
1269
  * bar is the only thing separating two of them. Without it a
1202
- * two-region view reads as a one-region view scrolled somewhere
1203
- * strange. `isRightEndOfDisplayedRegion` is what marks it, and the
1204
- * right edge of the blocks currently *loaded* — which is what block
1205
- * geometry hands you — is not the same filter.
1270
+ * two-region view looks like a single region.
1271
+ * `isRightEndOfDisplayedRegion` marks it; the right edge of the
1272
+ * currently *loaded* blocks, which block geometry gives you, is a
1273
+ * different set.
1206
1274
  * - `elided`: a region too narrow to draw at this zoom. Whole-genome on
1207
- * a real assembly is mostly these — hg38 has 455 sequences and all
1208
- * but the 24 chromosomes land sub-pixel — so a host that skips them
1209
- * renders that tail as nothing at all.
1275
+ * a real assembly is mostly these (hg38 has 455 sequences, and all
1276
+ * but the 24 chromosomes are under a pixel wide), so a host that
1277
+ * skips them leaves that part of the row empty.
1210
1278
  * - `boundary`: past the start of the first region or the end of the
1211
- * last. Greying it is what makes the last region's seam read as the
1212
- * edge of a filled area rather than a rule floating in the track.
1279
+ * last. Greying it shows the last region's seam as the edge of a
1280
+ * filled area, where it would otherwise look like a line in the
1281
+ * middle of the track.
1213
1282
  *
1214
1283
  * Elided blocks get no seam even though they carry the flag: at the
1215
- * zoom where regions elide, one bar per region is a solid grey wall.
1216
- *
1217
- * PaddingBlocks is the in-tree consumer. The SVG export is deliberately
1218
- * NOT one: `SVGRegionSeparators` walks dynamicBlocks itself and draws
1219
- * only the seam, because `elided` and `boundary` are chrome for an
1220
- * interactive row rather than information a figure carries — striped
1221
- * grey saying "regions here are too narrow to draw" is noise in a
1222
- * static image, and at whole-genome zoom it would be most of the row.
1223
- * The seam is the one that must survive: regions lay out contiguously,
1224
- * so it is all that separates two of them.
1225
- */
1226
- readonly paddingSpans: {
1284
+ * zoom where regions elide, one bar per region would fill the row solid
1285
+ * grey.
1286
+ *
1287
+ * PaddingBlocks is the in-tree consumer. The SVG export does not use
1288
+ * it: `SVGRegionSeparators` walks dynamicBlocks itself and draws only
1289
+ * the seam, because `elided` and `boundary` mark state for an
1290
+ * interactive row. In a static figure the striped grey would cover most
1291
+ * of the row at whole-genome zoom. The export keeps the seam because
1292
+ * regions lay out contiguously and the seam is all that separates two
1293
+ * of them.
1294
+ */
1295
+ readonly paddingSpans: readonly {
1227
1296
  key: string;
1228
1297
  x: number;
1229
1298
  width: number;
@@ -1253,8 +1322,8 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
1253
1322
  * viewport. False both when the view holds no regions at all and when
1254
1323
  * it holds some but is scrolled entirely off them; either way there is
1255
1324
  * no visible span for the scalebar, ruler and refName labels to
1256
- * describe, which is what the SVG export's header checks before drawing
1257
- * one. Distinct from `hasDisplayedRegions`, which only asks whether the
1325
+ * describe. The SVG export checks it before drawing its header.
1326
+ * Distinct from `hasDisplayedRegions`, which only asks whether the
1258
1327
  * view has been given regions, not whether any are on screen.
1259
1328
  */
1260
1329
  readonly hasVisibleContent: boolean;
@@ -1287,6 +1356,24 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
1287
1356
  screenStartPx: number;
1288
1357
  screenEndPx: number;
1289
1358
  }[];
1359
+ /**
1360
+ * #getter
1361
+ * Right edge (px, viewport-relative) of the on-screen content, clamped
1362
+ * to the track — where a right-pinned overlay such as a wiggle's colour
1363
+ * or score legend belongs, rather than out in the empty gutter the
1364
+ * regions can leave at whole-genome zoom. `@jbrowse/display-kit`'s
1365
+ * `contentRightEdgePx` states the rule; an SVG export applies the same
1366
+ * one against the export's canvas width instead of this track's.
1367
+ *
1368
+ * Published as a SCALAR on purpose. `visibleRegions` rebuilds a fresh
1369
+ * array of fresh objects on every pan and zoom frame, so a component
1370
+ * that derived this number itself re-rendered on every frame of every
1371
+ * gesture — to produce, whenever content fills the track, the unchanged
1372
+ * `trackWidthPx`. Reading the scalar lets MobX's `===` stop the chain at
1373
+ * this computed instead. Measured over 20 zoom frames: the wiggle
1374
+ * family's three body instances fell from 66 renders to 7.
1375
+ */
1376
+ readonly contentRightEdgePx: number;
1290
1377
  /**
1291
1378
  * #getter
1292
1379
  * visibleRegions expanded by a half-screen buffer on each side,
@@ -1312,23 +1399,22 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
1312
1399
  readonly visibleLocStrings: string;
1313
1400
  /**
1314
1401
  * #getter
1315
- * **What a debounced consumer clips to**: the coarse blocks once the
1316
- * view has settled at least once, the live ones before that.
1402
+ * **The blocks a debounced consumer clips to**: the coarse blocks once
1403
+ * the view has settled at least once, the live ones before that.
1317
1404
  *
1318
- * The coarse blocks exist so a per-bp scan does not recompute on every
1319
- * animation frame during a pan or zoom — wiggle's autoscale domain, the
1320
- * alignments coverage scale and MAF's coverage band are the three — and
1321
- * while they are stale
1322
- * the answer is merely a frame or two old, which is what the debounce
1323
- * means. **Empty is different in kind.** A scan over no blocks yields no
1324
- * entries, and no entries is not a stale domain, it is the fallback one:
1325
- * `[0,1]`, which draws a line plot blank and a density plot saturated.
1326
- * That window is the 500ms between a view initializing and the coarse
1327
- * autorun's first run, and data can now land inside it — the per-region
1328
- * fetch used to be trailing-edge at 600ms, so it never did.
1405
+ * The coarse blocks stop a per-bp scan from recomputing on every
1406
+ * animation frame during a pan or zoom. Wiggle's autoscale domain, the
1407
+ * alignments coverage scale and MAF's coverage band use them. While the
1408
+ * coarse blocks are stale the result is a frame or two old, as the
1409
+ * debounce intends. **Empty coarse blocks are a different case.** A scan
1410
+ * over no blocks yields no entries, and the consumer falls back to the
1411
+ * domain `[0,1]`, which draws a line plot blank and a density plot
1412
+ * saturated. The coarse blocks are empty for the 500ms between a view
1413
+ * initializing and the coarse autorun's first run, and data can load
1414
+ * within that window.
1329
1415
  *
1330
- * One recompute at that transition, against N per frame, which is the
1331
- * trade the guard was making anyway.
1416
+ * Falling back to the live blocks costs one extra recompute at that
1417
+ * transition, compared with N per frame without the debounce.
1332
1418
  */
1333
1419
  readonly settledDynamicBlocks: ContentBlock[];
1334
1420
  /**
@@ -1400,7 +1486,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
1400
1486
  * as. Prefer `setWindow`: pixels mean nothing without the width they were
1401
1487
  * measured at, so a round trip through here is only exact while the width
1402
1488
  * holds still. Kept for callers that genuinely have pixels — a wheel
1403
- * gesture, a rubberband — and for reading old snapshots.
1489
+ * gesture, a rubberband.
1404
1490
  */
1405
1491
  setNewView(bpPerPx: number, offsetPx: number): void;
1406
1492
  /**
@@ -1540,10 +1626,14 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
1540
1626
  * navigating to the locstring
1541
1627
  * @param grow - optional multiplier to expand the region by (e.g., 0.2
1542
1628
  * adds 20% padding on each side)
1629
+ * @param opts - `showHitTrack: false` keeps a text-search hit from also
1630
+ * showing the track its index was built from
1543
1631
  * @returns whether the view moved. A multi-hit search raises the picker
1544
1632
  * instead of navigating, and both resolve — see `handleSelectedRegion`.
1545
1633
  */
1546
- navToLocString(input: string, optAssemblyName?: string, grow?: number): Promise<boolean>;
1634
+ navToLocString(input: string, optAssemblyName?: string, grow?: number, opts?: {
1635
+ showHitTrack?: boolean;
1636
+ }): Promise<boolean>;
1547
1637
  /**
1548
1638
  * #action
1549
1639
  * Similar to `navToLocString`, but accepts a list of parsed location
@@ -1570,6 +1660,17 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
1570
1660
  * adds 20% padding on each side)
1571
1661
  */
1572
1662
  navToLocation(parsedLocString: ParsedLocString, assemblyName?: string, grow?: number): Promise<void>;
1663
+ /**
1664
+ * #action
1665
+ * adds the region in view to the session's highlights
1666
+ */
1667
+ highlightCurrentRegion(): void;
1668
+ /**
1669
+ * #action
1670
+ * navigates to the most recently added highlight on this view's
1671
+ * assemblies, zoomed out a little for context
1672
+ */
1673
+ navigateNewestHighlight(): Promise<void>;
1573
1674
  } & {
1574
1675
  /**
1575
1676
  * #method
@@ -1588,31 +1689,30 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
1588
1689
  } | undefined;
1589
1690
  /**
1590
1691
  * #method
1591
- * Map a highlight or bookmark region to its pixel position+width inside
1692
+ * Map a highlight region to its pixel position+width inside
1592
1693
  * the tracks container. Falls back to the raw refName if the region's
1593
1694
  * assemblyName is missing or unknown so highlights authored without an
1594
1695
  * assembly still render in single-assembly views.
1595
1696
  */
1596
- getHighlightCoords(region: {
1597
- assemblyName?: string;
1598
- refName: string;
1599
- start: number;
1600
- end: number;
1601
- }): {
1697
+ getHighlightCoords(region: HighlightRegion): {
1602
1698
  width: number;
1603
1699
  left: number;
1604
1700
  } | undefined;
1701
+ /**
1702
+ * #method
1703
+ * y ranges, from the top of the highlight bands, of tracks whose display
1704
+ * sets `drawsGenomicCoordinates` to false; the bands skip them
1705
+ */
1706
+ nonGenomicTrackBands(): {
1707
+ top: number;
1708
+ height: any;
1709
+ }[];
1605
1710
  /**
1606
1711
  * #method
1607
1712
  * like getHighlightCoords but laid out against the overview scalebar and
1608
1713
  * shifted by the cytoband offset
1609
1714
  */
1610
- getOverviewHighlightCoords(region: {
1611
- assemblyName?: string;
1612
- refName: string;
1613
- start: number;
1614
- end: number;
1615
- }): {
1715
+ getOverviewHighlightCoords(region: HighlightRegion): {
1616
1716
  width: number;
1617
1717
  left: number;
1618
1718
  } | undefined;
@@ -1634,6 +1734,14 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
1634
1734
  * #getter
1635
1735
  */
1636
1736
  readonly centerLineInfo: import("@jbrowse/core/util/Base1DUtils").PxToBpResult | undefined;
1737
+ } & {
1738
+ /**
1739
+ * #action
1740
+ * a region edit from the ruler's menu as one action, which a synteny
1741
+ * stack's follow reads as the reader's gesture on this row; see
1742
+ * `setDisplayedRegionsKeepingCenter`
1743
+ */
1744
+ editDisplayedRegions(edit: RegionEdit): void;
1637
1745
  } & {
1638
1746
  /**
1639
1747
  * #method
@@ -1652,15 +1760,1735 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
1652
1760
  * `centerAt`'s animated twin: the same destination, reached along the
1653
1761
  * arc instead of jumped to, at the zoom the view is already on.
1654
1762
  */
1655
- flyToCenter(coord: number, refName: string): void;
1763
+ flyToCenter(coord: number, refName: string, displayedRegionIndex?: number): void;
1764
+ /**
1765
+ * #action
1766
+ * A flight to a linear bp centre at the zoom the view is on, or is
1767
+ * already flying to, widened where that is narrower than `fitWidthBp`.
1768
+ * The current width mid-flight is a point on the arc, so a second
1769
+ * flight read from it would land pulled back.
1770
+ */
1771
+ flyToFit(centerBp: number, fitWidthBp: number): void;
1772
+ } & {
1773
+ afterCreate(): void;
1774
+ afterAttach(): void;
1775
+ }, import("@jbrowse/core/util/withLaunchInput").LaunchSnapshotIn<import("@jbrowse/mobx-state-tree").IModelType<Omit<{
1776
+ id: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<string>, [undefined]>;
1777
+ displayName: import("@jbrowse/mobx-state-tree").IMaybe<import("@jbrowse/mobx-state-tree").ISimpleType<string>>;
1778
+ minimized: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
1779
+ }, "colorByCDS" | "displayedRegions" | "hideHeader" | "hideHeaderOverview" | "hideNoTracksActive" | "id" | "launch" | "legacyBpPerPx" | "scalebarOnly" | "showAminoAcids" | "showCenterLine" | "showCytobands" | "showGridlines" | "showTrackOutlines" | "trackLabels" | "trackSelectorType" | "tracks" | "type" | "windowStartBp" | "windowWidthBp"> & {
1780
+ id: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<string>, [undefined]>;
1781
+ type: import("@jbrowse/mobx-state-tree").IType<string | undefined, string, string>;
1782
+ windowStartBp: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<number>, [undefined]>;
1783
+ windowWidthBp: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<number>, [undefined]>;
1784
+ legacyBpPerPx: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<number>, [undefined]>;
1785
+ displayedRegions: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").IType<Region[], Region[], Region[]>, [undefined]>;
1786
+ tracks: import("@jbrowse/mobx-state-tree").IArrayType<import("@jbrowse/mobx-state-tree").IAnyType>;
1787
+ hideHeader: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
1788
+ hideHeaderOverview: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
1789
+ hideNoTracksActive: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
1790
+ trackSelectorType: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<"hierarchical">, [undefined]>;
1791
+ showCenterLine: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
1792
+ showCytobands: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
1793
+ trackLabels: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<string>, [undefined]>;
1794
+ showGridlines: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
1795
+ colorByCDS: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
1796
+ showAminoAcids: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
1797
+ showTrackOutlines: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
1798
+ scalebarOnly: import("@jbrowse/mobx-state-tree").IOptionalIType<import("@jbrowse/mobx-state-tree").ISimpleType<boolean>, [undefined]>;
1799
+ launch: import("@jbrowse/mobx-state-tree").IType<LaunchInput<InitState> | undefined, LaunchInput<InitState> | undefined, LaunchInput<InitState> | undefined>;
1800
+ }, {
1801
+ width: number;
1802
+ bodyMounted: boolean;
1803
+ } & {
1804
+ readonly rendersDisplays: boolean;
1805
+ readonly effectiveBodyMounted: boolean;
1806
+ menuItems(): MenuItem[];
1807
+ readonly ownTracks: import("@jbrowse/core/util").AbstractTrackModel[];
1808
+ readonly ownViews: import("@jbrowse/core/util").AbstractViewModel[];
1809
+ } & {
1810
+ setDisplayName(name: string): void;
1811
+ setWidth(newWidth: number): void;
1812
+ setBodyMounted(flag: boolean): void;
1813
+ setMinimized(flag: boolean): void;
1814
+ } & {
1815
+ /**
1816
+ * #volatile
1817
+ * Height of each track's in-flow label band, measured by
1818
+ * TrackContainer as the rendering container's offset inside its Paper.
1819
+ * Absent (0) while the label is hidden, overlapping, or not yet
1820
+ * measured. Observable, so the offset and height getters re-derive
1821
+ * when a band changes.
1822
+ */
1823
+ trackLabelBands: import("mobx").ObservableMap<string, number>;
1824
+ /**
1825
+ * #volatile
1826
+ * How much taller the view's box is than the scroll port it sits in,
1827
+ * in px, negative when it is shorter. Measured by the view component
1828
+ * for a top-level view; undefined until then, and for a nested one.
1829
+ */
1830
+ scrollPortExcess: number | undefined;
1831
+ /**
1832
+ * #volatile
1833
+ */
1834
+ volatileWidth: number | undefined;
1835
+ /**
1836
+ * #volatile
1837
+ */
1838
+ draggingTrackId: undefined | string;
1839
+ /**
1840
+ * #volatile
1841
+ */
1842
+ lastTrackDragY: undefined | number;
1843
+ /**
1844
+ * #volatile
1845
+ */
1846
+ volatileError: unknown;
1847
+ /**
1848
+ * #volatile
1849
+ */
1850
+ coarseDynamicBlocks: ContentBlock[];
1851
+ /**
1852
+ * #volatile
1853
+ */
1854
+ coarseTotalBp: number;
1855
+ /**
1856
+ * #volatile
1857
+ */
1858
+ coarseBpPerPx: number;
1859
+ /**
1860
+ * #volatile
1861
+ */
1862
+ leftOffset: undefined | BpOffset;
1863
+ /**
1864
+ * #volatile
1865
+ */
1866
+ rightOffset: undefined | BpOffset;
1867
+ /**
1868
+ * #volatile
1869
+ */
1870
+ isScalebarRefNameMenuOpen: boolean;
1871
+ /**
1872
+ * #volatile
1873
+ * temporary vertical guides that can be set by displays (e.g., LD display hover)
1874
+ */
1875
+ volatileGuides: VolatileGuide[];
1876
+ } & {
1877
+ /**
1878
+ * #getter
1879
+ * the launch state that still has something to apply — the gate every
1880
+ * loading and error path below reads.
1881
+ */
1882
+ readonly pendingLaunch: LaunchInput<InitState & {
1883
+ unknown?: Record<string, unknown>;
1884
+ malformed?: Record<string, unknown>;
1885
+ legacyInit?: boolean;
1886
+ } & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("@jbrowse/mobx-state-tree").IType<LaunchInput<InitState> | undefined, LaunchInput<InitState> | undefined, LaunchInput<InitState> | undefined>>> | undefined;
1887
+ /**
1888
+ * #getter
1889
+ * corresponds roughly to the zoom level, base-pairs per pixel.
1890
+ *
1891
+ * Zero before a width is measured, which is the same not-yet-measured
1892
+ * sentinel `Base1DView` uses and which `displayedRegionsTotalPx` and the
1893
+ * offset getters already guard for. Reads `volatileWidth` rather than the
1894
+ * `width` getter on purpose: that one throws when unmeasured, and these
1895
+ * are read from the first render.
1896
+ */
1897
+ readonly bpPerPx: number;
1898
+ /**
1899
+ * #getter
1900
+ * corresponds roughly to the horizontal scroll of the LGV
1901
+ */
1902
+ readonly offsetPx: number;
1903
+ /**
1904
+ * #getter
1905
+ * a displayed region narrower than this many pixels draws as an elided
1906
+ * block
1907
+ */
1908
+ readonly minimumBlockWidth: number;
1909
+ /**
1910
+ * #getter
1911
+ * scroll-to-zoom is a global, personal preference resolved from the
1912
+ * session; toggling it in any view applies everywhere
1913
+ */
1914
+ readonly scrollZoom: boolean;
1915
+ /**
1916
+ * #getter
1917
+ */
1918
+ readonly pinnedTracks: any[];
1919
+ /**
1920
+ * #getter
1921
+ */
1922
+ readonly unpinnedTracks: any[];
1923
+ /**
1924
+ * #getter
1925
+ * the effective track labels setting, resolving the stored `trackLabels`
1926
+ * against the LinearGenomeViewPlugin config default
1927
+ */
1928
+ readonly effectiveTrackLabels: ViewTrackLabelMode;
1929
+ /**
1930
+ * #getter
1931
+ */
1932
+ readonly width: number;
1933
+ /**
1934
+ * #getter
1935
+ * width minus track outline borders (1px each side when shown)
1936
+ */
1937
+ readonly trackWidthPx: number;
1938
+ /**
1939
+ * #getter
1940
+ */
1941
+ readonly assemblyNames: string[];
1942
+ /**
1943
+ * #getter
1944
+ */
1945
+ readonly assemblyDisplayNames: string[];
1946
+ /**
1947
+ * #getter
1948
+ * the session's highlights on this view's assemblies
1949
+ */
1950
+ readonly highlights: HighlightType[];
1951
+ /**
1952
+ * #getter
1953
+ * checking if lgv is a 'top-level' view is used for toggling pin track
1954
+ * capability, sticky positioning
1955
+ */
1956
+ readonly isTopLevelView: boolean;
1957
+ /**
1958
+ * #getter
1959
+ * only uses sticky view headers when it is a 'top-level' view and
1960
+ * session allows it
1961
+ */
1962
+ readonly stickyViewHeaders: boolean;
1963
+ } & {
1964
+ /**
1965
+ * #getter
1966
+ * The census entry for this view: the tracks it holds itself. Declared
1967
+ * rather than derived — see `BaseViewModel.ownTracks`.
1968
+ */
1969
+ readonly ownTracks: any[];
1970
+ /**
1971
+ * #getter
1972
+ * See `BaseViewModel.rendersDisplays`.
1973
+ */
1974
+ readonly rendersDisplays: boolean;
1975
+ /**
1976
+ * #getter
1977
+ * Assembly name captioning the scalebar ahead of its refName labels, or
1978
+ * undefined for none. A container view (e.g. LinearSyntenyView) opts its sub-views in by
1979
+ * exposing showAssemblyNameInSubviewScalebar; duck-typed rather than
1980
+ * matching a concrete view type so no upward plugin dependency is needed
1981
+ * and any container can opt in. A wrong nesting depth simply yields no
1982
+ * prefix — hence the hasParent guard, since getParent throws (rather than
1983
+ * returning undefined) when the view sits shallower than depth 2.
1984
+ */
1985
+ readonly scalebarDisplayPrefix: string | undefined;
1986
+ /**
1987
+ * #getter
1988
+ */
1989
+ readonly assembliesNotFound: string | undefined;
1990
+ /**
1991
+ * #getter
1992
+ */
1993
+ readonly assemblyErrors: string | undefined;
1994
+ /**
1995
+ * #getter
1996
+ */
1997
+ readonly assembliesInitialized: boolean;
1998
+ /**
1999
+ * #getter
2000
+ * the assembly named by a pending `init`, or undefined when no init is
2001
+ * set. `init`'s assembly isn't in `assemblyNames` yet (that derives from
2002
+ * displayedRegions, still empty pre-navigation), so init-phase readiness
2003
+ * and error checks resolve it directly through here.
2004
+ */
2005
+ readonly initAssembly: (import("@jbrowse/mobx-state-tree").ModelInstanceTypeProps<{
2006
+ configuration: import("@jbrowse/mobx-state-tree").IMaybe<import("@jbrowse/mobx-state-tree").IReferenceType<import("@jbrowse/mobx-state-tree").IAnyType>>;
2007
+ }> & {
2008
+ error: unknown;
2009
+ loadingP: Promise<void> | undefined;
2010
+ adapterLoads: import("@jbrowse/quick-lru").default<string, Promise<import("@jbrowse/core/assemblyManager/assembly").RefNameAliases>>;
2011
+ regions: import("@jbrowse/core/assemblyManager/assembly").BasicRegion[] | undefined;
2012
+ refNameAliases: import("@jbrowse/core/assemblyManager/assembly").RefNameAliases | undefined;
2013
+ canonicalToSeqAdapterRefNames: Record<string, string> | undefined;
2014
+ cytobands: import("@jbrowse/core/util").Feature[] | undefined;
2015
+ loadedGeneticCodes: Record<string, number> | undefined;
2016
+ lowerCaseRefNameAliases: import("@jbrowse/core/assemblyManager/assembly").RefNameAliases | undefined;
2017
+ statusMessage: string | undefined;
2018
+ statusProgress: number | undefined;
2019
+ statusSource: string | undefined;
2020
+ refNameMismatches: Map<string, import("@jbrowse/core/assemblyManager/assembly").RefNameMismatch>;
2021
+ } & {
2022
+ getConf(arg: string): any;
2023
+ } & {
2024
+ readonly name: string;
2025
+ readonly aliases: string[];
2026
+ readonly displayName: string;
2027
+ readonly refNameColors: string[];
2028
+ } & {
2029
+ readonly allAliases: string[];
2030
+ hasName(name: string): boolean;
2031
+ } & {
2032
+ setStatus(status?: import("@jbrowse/core/util").RpcStatus): void;
2033
+ setRefNameMismatch(adapterCacheKey: string, mismatch: import("@jbrowse/core/assemblyManager/assembly").RefNameMismatch): void;
2034
+ } & {
2035
+ setLoaded({ regions, refNameAliases, lowerCaseRefNameAliases, canonicalToSeqAdapterRefNames, cytobands, geneticCodes, }: import("@jbrowse/core/assemblyManager/assembly").RefNameMaps & {
2036
+ regions: import("@jbrowse/core/util").Region[];
2037
+ cytobands: import("@jbrowse/core/util").Feature[];
2038
+ geneticCodes: Record<string, number>;
2039
+ }): void;
2040
+ setError(e: unknown): void;
2041
+ setLoadingP(p?: Promise<void>): void;
2042
+ loadPre(): Promise<void>;
2043
+ } & {
2044
+ load(): Promise<void>;
2045
+ } & {
2046
+ afterAttach(): void;
2047
+ } & {
2048
+ readonly initialized: boolean;
2049
+ readonly allRefNames: string[] | undefined;
2050
+ readonly namesByCanonicalRefName: Map<string, string[]> | undefined;
2051
+ readonly rpcManager: import("@jbrowse/core/rpc/RpcManager").default;
2052
+ } & {
2053
+ readonly refNames: string[] | undefined;
2054
+ } & {
2055
+ readonly refNameToIndex: Map<string, number> | undefined;
2056
+ } & {
2057
+ getCanonicalRefName(refName: string): string | undefined;
2058
+ getRefNameColor(refName: string): string | undefined;
2059
+ getRegionForRefName(refName: string): import("@jbrowse/core/assemblyManager/assembly").BasicRegion | undefined;
2060
+ getGeneticCodeId(refName: string): number;
2061
+ getSeqAdapterRefName(canonicalRefName: string): string;
2062
+ } & {
2063
+ getCanonicalRefName2(refName: string): string;
2064
+ isValidRefName(refName: string): boolean;
2065
+ } & {
2066
+ getRefNamePosition(refName: string): number | undefined;
2067
+ getAliasesForRefName(refName: string): string[];
2068
+ getRefNameMapForAdapter(adapterConf: {
2069
+ [x: string]: unknown;
2070
+ }, options: import("@jbrowse/core/data_adapters/BaseAdapter").BaseOptions): Promise<import("@jbrowse/core/assemblyManager/assembly").RefNameAliases>;
2071
+ getRefNameMismatch(adapterCacheKey: string): import("@jbrowse/core/assemblyManager/assembly").RefNameMismatch | undefined;
2072
+ } & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("@jbrowse/mobx-state-tree").IModelType<{
2073
+ configuration: import("@jbrowse/mobx-state-tree").IMaybe<import("@jbrowse/mobx-state-tree").IReferenceType<import("@jbrowse/mobx-state-tree").IAnyType>>;
2074
+ }, {
2075
+ error: unknown;
2076
+ loadingP: Promise<void> | undefined;
2077
+ adapterLoads: import("@jbrowse/quick-lru").default<string, Promise<import("@jbrowse/core/assemblyManager/assembly").RefNameAliases>>;
2078
+ regions: import("@jbrowse/core/assemblyManager/assembly").BasicRegion[] | undefined;
2079
+ refNameAliases: import("@jbrowse/core/assemblyManager/assembly").RefNameAliases | undefined;
2080
+ canonicalToSeqAdapterRefNames: Record<string, string> | undefined;
2081
+ cytobands: import("@jbrowse/core/util").Feature[] | undefined;
2082
+ loadedGeneticCodes: Record<string, number> | undefined;
2083
+ lowerCaseRefNameAliases: import("@jbrowse/core/assemblyManager/assembly").RefNameAliases | undefined;
2084
+ statusMessage: string | undefined;
2085
+ statusProgress: number | undefined;
2086
+ statusSource: string | undefined;
2087
+ refNameMismatches: Map<string, import("@jbrowse/core/assemblyManager/assembly").RefNameMismatch>;
2088
+ } & {
2089
+ getConf(arg: string): any;
2090
+ } & {
2091
+ readonly name: string;
2092
+ readonly aliases: string[];
2093
+ readonly displayName: string;
2094
+ readonly refNameColors: string[];
2095
+ } & {
2096
+ readonly allAliases: string[];
2097
+ hasName(name: string): boolean;
2098
+ } & {
2099
+ setStatus(status?: import("@jbrowse/core/util").RpcStatus): void;
2100
+ setRefNameMismatch(adapterCacheKey: string, mismatch: import("@jbrowse/core/assemblyManager/assembly").RefNameMismatch): void;
2101
+ } & {
2102
+ setLoaded({ regions, refNameAliases, lowerCaseRefNameAliases, canonicalToSeqAdapterRefNames, cytobands, geneticCodes, }: import("@jbrowse/core/assemblyManager/assembly").RefNameMaps & {
2103
+ regions: import("@jbrowse/core/util").Region[];
2104
+ cytobands: import("@jbrowse/core/util").Feature[];
2105
+ geneticCodes: Record<string, number>;
2106
+ }): void;
2107
+ setError(e: unknown): void;
2108
+ setLoadingP(p?: Promise<void>): void;
2109
+ loadPre(): Promise<void>;
2110
+ } & {
2111
+ load(): Promise<void>;
2112
+ } & {
2113
+ afterAttach(): void;
2114
+ } & {
2115
+ readonly initialized: boolean;
2116
+ readonly allRefNames: string[] | undefined;
2117
+ readonly namesByCanonicalRefName: Map<string, string[]> | undefined;
2118
+ readonly rpcManager: import("@jbrowse/core/rpc/RpcManager").default;
2119
+ } & {
2120
+ readonly refNames: string[] | undefined;
2121
+ } & {
2122
+ readonly refNameToIndex: Map<string, number> | undefined;
2123
+ } & {
2124
+ getCanonicalRefName(refName: string): string | undefined;
2125
+ getRefNameColor(refName: string): string | undefined;
2126
+ getRegionForRefName(refName: string): import("@jbrowse/core/assemblyManager/assembly").BasicRegion | undefined;
2127
+ getGeneticCodeId(refName: string): number;
2128
+ getSeqAdapterRefName(canonicalRefName: string): string;
2129
+ } & {
2130
+ getCanonicalRefName2(refName: string): string;
2131
+ isValidRefName(refName: string): boolean;
2132
+ } & {
2133
+ getRefNamePosition(refName: string): number | undefined;
2134
+ getAliasesForRefName(refName: string): string[];
2135
+ getRefNameMapForAdapter(adapterConf: {
2136
+ [x: string]: unknown;
2137
+ }, options: import("@jbrowse/core/data_adapters/BaseAdapter").BaseOptions): Promise<import("@jbrowse/core/assemblyManager/assembly").RefNameAliases>;
2138
+ getRefNameMismatch(adapterCacheKey: string): import("@jbrowse/core/assemblyManager/assembly").RefNameMismatch | undefined;
2139
+ }, import("@jbrowse/mobx-state-tree")._NotCustomized, import("@jbrowse/mobx-state-tree")._NotCustomized>>) | undefined;
2140
+ /**
2141
+ * #getter
2142
+ * The assembly a pending launch is for: the one it names, else the one
2143
+ * the view already shows. A re-launch of a materialized view (a
2144
+ * `jb.setSession` document writing `loc` beside the built state) need
2145
+ * not restate it; without the default the readiness gate waited on
2146
+ * `assemblyManager.get(undefined)` for good. Undefined on a fresh view
2147
+ * whose blob names none, which `error` reports.
2148
+ */
2149
+ readonly launchAssemblyName: string | undefined;
2150
+ /**
2151
+ * #getter
2152
+ */
2153
+ readonly initialized: boolean;
2154
+ /**
2155
+ * #getter
2156
+ */
2157
+ readonly hasDisplayedRegions: boolean;
2158
+ /**
2159
+ * #getter
2160
+ * The assembly whose load the spinner is waiting on: the one `init` names
2161
+ * before navigation (it isn't in assemblyNames yet), else the first of the
2162
+ * displayed assemblies that hasn't finished loading.
2163
+ */
2164
+ readonly loadingAssembly: (import("@jbrowse/mobx-state-tree").ModelInstanceTypeProps<{
2165
+ configuration: import("@jbrowse/mobx-state-tree").IMaybe<import("@jbrowse/mobx-state-tree").IReferenceType<import("@jbrowse/mobx-state-tree").IAnyType>>;
2166
+ }> & {
2167
+ error: unknown;
2168
+ loadingP: Promise<void> | undefined;
2169
+ adapterLoads: import("@jbrowse/quick-lru").default<string, Promise<import("@jbrowse/core/assemblyManager/assembly").RefNameAliases>>;
2170
+ regions: import("@jbrowse/core/assemblyManager/assembly").BasicRegion[] | undefined;
2171
+ refNameAliases: import("@jbrowse/core/assemblyManager/assembly").RefNameAliases | undefined;
2172
+ canonicalToSeqAdapterRefNames: Record<string, string> | undefined;
2173
+ cytobands: import("@jbrowse/core/util").Feature[] | undefined;
2174
+ loadedGeneticCodes: Record<string, number> | undefined;
2175
+ lowerCaseRefNameAliases: import("@jbrowse/core/assemblyManager/assembly").RefNameAliases | undefined;
2176
+ statusMessage: string | undefined;
2177
+ statusProgress: number | undefined;
2178
+ statusSource: string | undefined;
2179
+ refNameMismatches: Map<string, import("@jbrowse/core/assemblyManager/assembly").RefNameMismatch>;
2180
+ } & {
2181
+ getConf(arg: string): any;
2182
+ } & {
2183
+ readonly name: string;
2184
+ readonly aliases: string[];
2185
+ readonly displayName: string;
2186
+ readonly refNameColors: string[];
2187
+ } & {
2188
+ readonly allAliases: string[];
2189
+ hasName(name: string): boolean;
2190
+ } & {
2191
+ setStatus(status?: import("@jbrowse/core/util").RpcStatus): void;
2192
+ setRefNameMismatch(adapterCacheKey: string, mismatch: import("@jbrowse/core/assemblyManager/assembly").RefNameMismatch): void;
2193
+ } & {
2194
+ setLoaded({ regions, refNameAliases, lowerCaseRefNameAliases, canonicalToSeqAdapterRefNames, cytobands, geneticCodes, }: import("@jbrowse/core/assemblyManager/assembly").RefNameMaps & {
2195
+ regions: import("@jbrowse/core/util").Region[];
2196
+ cytobands: import("@jbrowse/core/util").Feature[];
2197
+ geneticCodes: Record<string, number>;
2198
+ }): void;
2199
+ setError(e: unknown): void;
2200
+ setLoadingP(p?: Promise<void>): void;
2201
+ loadPre(): Promise<void>;
2202
+ } & {
2203
+ load(): Promise<void>;
2204
+ } & {
2205
+ afterAttach(): void;
2206
+ } & {
2207
+ readonly initialized: boolean;
2208
+ readonly allRefNames: string[] | undefined;
2209
+ readonly namesByCanonicalRefName: Map<string, string[]> | undefined;
2210
+ readonly rpcManager: import("@jbrowse/core/rpc/RpcManager").default;
2211
+ } & {
2212
+ readonly refNames: string[] | undefined;
2213
+ } & {
2214
+ readonly refNameToIndex: Map<string, number> | undefined;
2215
+ } & {
2216
+ getCanonicalRefName(refName: string): string | undefined;
2217
+ getRefNameColor(refName: string): string | undefined;
2218
+ getRegionForRefName(refName: string): import("@jbrowse/core/assemblyManager/assembly").BasicRegion | undefined;
2219
+ getGeneticCodeId(refName: string): number;
2220
+ getSeqAdapterRefName(canonicalRefName: string): string;
2221
+ } & {
2222
+ getCanonicalRefName2(refName: string): string;
2223
+ isValidRefName(refName: string): boolean;
2224
+ } & {
2225
+ getRefNamePosition(refName: string): number | undefined;
2226
+ getAliasesForRefName(refName: string): string[];
2227
+ getRefNameMapForAdapter(adapterConf: {
2228
+ [x: string]: unknown;
2229
+ }, options: import("@jbrowse/core/data_adapters/BaseAdapter").BaseOptions): Promise<import("@jbrowse/core/assemblyManager/assembly").RefNameAliases>;
2230
+ getRefNameMismatch(adapterCacheKey: string): import("@jbrowse/core/assemblyManager/assembly").RefNameMismatch | undefined;
2231
+ } & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("@jbrowse/mobx-state-tree").IModelType<{
2232
+ configuration: import("@jbrowse/mobx-state-tree").IMaybe<import("@jbrowse/mobx-state-tree").IReferenceType<import("@jbrowse/mobx-state-tree").IAnyType>>;
2233
+ }, {
2234
+ error: unknown;
2235
+ loadingP: Promise<void> | undefined;
2236
+ adapterLoads: import("@jbrowse/quick-lru").default<string, Promise<import("@jbrowse/core/assemblyManager/assembly").RefNameAliases>>;
2237
+ regions: import("@jbrowse/core/assemblyManager/assembly").BasicRegion[] | undefined;
2238
+ refNameAliases: import("@jbrowse/core/assemblyManager/assembly").RefNameAliases | undefined;
2239
+ canonicalToSeqAdapterRefNames: Record<string, string> | undefined;
2240
+ cytobands: import("@jbrowse/core/util").Feature[] | undefined;
2241
+ loadedGeneticCodes: Record<string, number> | undefined;
2242
+ lowerCaseRefNameAliases: import("@jbrowse/core/assemblyManager/assembly").RefNameAliases | undefined;
2243
+ statusMessage: string | undefined;
2244
+ statusProgress: number | undefined;
2245
+ statusSource: string | undefined;
2246
+ refNameMismatches: Map<string, import("@jbrowse/core/assemblyManager/assembly").RefNameMismatch>;
2247
+ } & {
2248
+ getConf(arg: string): any;
2249
+ } & {
2250
+ readonly name: string;
2251
+ readonly aliases: string[];
2252
+ readonly displayName: string;
2253
+ readonly refNameColors: string[];
2254
+ } & {
2255
+ readonly allAliases: string[];
2256
+ hasName(name: string): boolean;
2257
+ } & {
2258
+ setStatus(status?: import("@jbrowse/core/util").RpcStatus): void;
2259
+ setRefNameMismatch(adapterCacheKey: string, mismatch: import("@jbrowse/core/assemblyManager/assembly").RefNameMismatch): void;
2260
+ } & {
2261
+ setLoaded({ regions, refNameAliases, lowerCaseRefNameAliases, canonicalToSeqAdapterRefNames, cytobands, geneticCodes, }: import("@jbrowse/core/assemblyManager/assembly").RefNameMaps & {
2262
+ regions: import("@jbrowse/core/util").Region[];
2263
+ cytobands: import("@jbrowse/core/util").Feature[];
2264
+ geneticCodes: Record<string, number>;
2265
+ }): void;
2266
+ setError(e: unknown): void;
2267
+ setLoadingP(p?: Promise<void>): void;
2268
+ loadPre(): Promise<void>;
2269
+ } & {
2270
+ load(): Promise<void>;
2271
+ } & {
2272
+ afterAttach(): void;
2273
+ } & {
2274
+ readonly initialized: boolean;
2275
+ readonly allRefNames: string[] | undefined;
2276
+ readonly namesByCanonicalRefName: Map<string, string[]> | undefined;
2277
+ readonly rpcManager: import("@jbrowse/core/rpc/RpcManager").default;
2278
+ } & {
2279
+ readonly refNames: string[] | undefined;
2280
+ } & {
2281
+ readonly refNameToIndex: Map<string, number> | undefined;
2282
+ } & {
2283
+ getCanonicalRefName(refName: string): string | undefined;
2284
+ getRefNameColor(refName: string): string | undefined;
2285
+ getRegionForRefName(refName: string): import("@jbrowse/core/assemblyManager/assembly").BasicRegion | undefined;
2286
+ getGeneticCodeId(refName: string): number;
2287
+ getSeqAdapterRefName(canonicalRefName: string): string;
2288
+ } & {
2289
+ getCanonicalRefName2(refName: string): string;
2290
+ isValidRefName(refName: string): boolean;
2291
+ } & {
2292
+ getRefNamePosition(refName: string): number | undefined;
2293
+ getAliasesForRefName(refName: string): string[];
2294
+ getRefNameMapForAdapter(adapterConf: {
2295
+ [x: string]: unknown;
2296
+ }, options: import("@jbrowse/core/data_adapters/BaseAdapter").BaseOptions): Promise<import("@jbrowse/core/assemblyManager/assembly").RefNameAliases>;
2297
+ getRefNameMismatch(adapterCacheKey: string): import("@jbrowse/core/assemblyManager/assembly").RefNameMismatch | undefined;
2298
+ }, import("@jbrowse/mobx-state-tree")._NotCustomized, import("@jbrowse/mobx-state-tree")._NotCustomized>>) | undefined;
2299
+ /**
2300
+ * #getter
2301
+ * What the loading screen says while `showLoading`, read off the
2302
+ * assembly whose load is the wait; undefined otherwise.
2303
+ */
2304
+ readonly loading: import("@jbrowse/core/util/viewStatus").ViewLoading | undefined;
2305
+ /**
2306
+ * #getter
2307
+ */
2308
+ readonly hasSomethingToShow: boolean;
2309
+ /**
2310
+ * #getter
2311
+ * init is set but its async navigation (the afterAttach autorun) hasn't
2312
+ * populated displayedRegions yet. `initialized` can already be true here
2313
+ * (it only tracks assembly readiness), so without this the container
2314
+ * would mount over empty regions and pxToBp/hover would throw.
2315
+ *
2316
+ * **Not dotplot's or synteny's `initPending`**, which is the bare
2317
+ * `!!self.pendingLaunch` — "an init blob has not been applied" — and which those
2318
+ * views read from their `settled` gate rather than from `showLoading`.
2319
+ * This one is narrower on purpose: it closes only the window where there
2320
+ * is nothing on screen. Once navigation has produced regions the view is
2321
+ * usable and gets shown, even though `init` is still set while the tracks
2322
+ * and highlights land. Renamed away from the shared spelling because the
2323
+ * two predicates disagree exactly there, and the bare name reads as
2324
+ * theirs.
2325
+ */
2326
+ readonly awaitingInitNavigation: boolean;
2327
+ /**
2328
+ * #getter
2329
+ * Whether to show a loading indicator instead of the import form or view
2330
+ */
2331
+ readonly showLoading: boolean;
2332
+ /**
2333
+ * #getter
2334
+ * Whether to show the import form
2335
+ */
2336
+ readonly showImportForm: boolean;
2337
+ /**
2338
+ * #getter
2339
+ * Is there anything to draw yet? The gate anything reading block geometry
2340
+ * — a ruler, a scalebar, a display — has to pass first, because
2341
+ * `width`/`staticBlocks` throw by design before the view has been
2342
+ * measured and navigated.
2343
+ *
2344
+ * **Not `initialized`**, which is the trap this getter exists to close.
2345
+ * That one answers "have the assembly's regions loaded", which is only
2346
+ * the first of two async steps: navigating then populates
2347
+ * `displayedRegions`, and in the window between the two `initialized` is
2348
+ * already true while there is still nothing on screen. `showLoading`
2349
+ * folds in `awaitingInitNavigation`, the getter that exists for exactly
2350
+ * that gap.
2351
+ *
2352
+ * `error` is the third outcome and is why this is not a bare
2353
+ * `!showLoading`: a failed assembly load also ends the loading state, so
2354
+ * that alone would mount over the wreckage. Read `error` yourself if you
2355
+ * want to draw it.
2356
+ */
2357
+ readonly ready: boolean;
2358
+ /**
2359
+ * #getter
2360
+ * The same question as `ready` with the other three outcomes named, for a
2361
+ * host that draws its own chrome and has to render all four. See
2362
+ * `computeViewStatus`, whose precedence this defers to — and note its
2363
+ * `ready` is narrower than the getter above, which is true when nothing
2364
+ * has told the view where to look.
2365
+ */
2366
+ readonly status: ViewStatus;
2367
+ /**
2368
+ * #getter
2369
+ */
2370
+ readonly scalebarHeight: number;
2371
+ /**
2372
+ * #getter
2373
+ * What TrackContainer puts *above* a track's rendering container: the gap
2374
+ * over its Paper, and the Paper's own top border when outlines are on.
2375
+ */
2376
+ readonly trackLeadingChrome: number;
2377
+ /**
2378
+ * #getter
2379
+ * ...and what it puts below: the resize divider, plus the matching bottom
2380
+ * border.
2381
+ */
2382
+ readonly trackTrailingChrome: number;
2383
+ /**
2384
+ * #getter
2385
+ * A track's full cost beyond its display height.
2386
+ *
2387
+ * The track *label* is not counted here: an offset label is an in-flow
2388
+ * box whose height is whatever the theme renders a Paper of icon buttons
2389
+ * at, so it is measured into `trackLabelBands` per track and added by
2390
+ * `trackLabelBand` rather than derived.
2391
+ */
2392
+ readonly trackChromeHeight: number;
2393
+ /**
2394
+ * #getter
2395
+ */
2396
+ readonly headerHeight: number;
2397
+ /**
2398
+ * #method
2399
+ * rendered height of a single track, collapsing to a fixed height when
2400
+ * minimized. Shared by trackHeights and getTrackYOffset so the two can't
2401
+ * disagree. Reads `activeDisplay` — the display TrackContainer actually
2402
+ * mounts — rather than re-picking `displays[0]`, so the view's height math
2403
+ * can't diverge from what is on screen.
2404
+ */
2405
+ trackHeight(track: (import("@jbrowse/mobx-state-tree").IMSTArray<import("@jbrowse/mobx-state-tree").IAnyType> & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("@jbrowse/mobx-state-tree").IArrayType<import("@jbrowse/mobx-state-tree").IAnyType>>)[number]): any;
2406
+ /**
2407
+ * #method
2408
+ * the measured in-flow label band above a track's rendering container,
2409
+ * 0 until TrackContainer has measured one or when no label is in flow
2410
+ */
2411
+ trackLabelBand(track: (import("@jbrowse/mobx-state-tree").IMSTArray<import("@jbrowse/mobx-state-tree").IAnyType> & import("@jbrowse/mobx-state-tree").IStateTreeNode<import("@jbrowse/mobx-state-tree").IArrayType<import("@jbrowse/mobx-state-tree").IAnyType>>)[number]): number;
2412
+ /**
2413
+ * #getter
2414
+ */
2415
+ readonly trackHeights: number;
2416
+ /**
2417
+ * #getter
2418
+ */
2419
+ readonly trackHeightsWithChrome: number;
2420
+ /**
2421
+ * #getter
2422
+ */
2423
+ readonly height: number;
2424
+ /**
2425
+ * #getter
2426
+ * The display height of each track a whole-stack resize moves, by track
2427
+ * instance id: every shown track that is not minimized.
2428
+ */
2429
+ readonly resizableTrackHeights: Map<any, any>;
2430
+ /**
2431
+ * #method
2432
+ * Y offset (in pixels, from the top of the view) where a track's
2433
+ * rendering container starts. Walks tracks in DOM render order (pinned
2434
+ * first, then unpinned), from the same constants TrackContainer lays its
2435
+ * Paper out with. Returns `undefined` if the track is not present.
2436
+ *
2437
+ * Includes each track's measured label band, this track's own included,
2438
+ * since an in-flow label sits above the rendering container inside the
2439
+ * same Paper. Exact once TrackContainer has measured; before that it is
2440
+ * short by the unmeasured bands.
2441
+ */
2442
+ getTrackYOffset(trackId: string): number | undefined;
2443
+ /**
2444
+ * #method
2445
+ * the pinned or unpinned sibling list a track renders within; move
2446
+ * up/down/top/bottom reorder inside this section rather than the full
2447
+ * `tracks` array, since the two sections lay out independently
2448
+ */
2449
+ trackSection(id: string): any[];
2450
+ /**
2451
+ * #getter
2452
+ */
2453
+ readonly totalBp: number;
2454
+ /**
2455
+ * #getter
2456
+ */
2457
+ readonly fitBpPerPx: number;
2458
+ /**
2459
+ * #getter
2460
+ * The zoom-out limit. Equal to the fit for this view's regions, except
2461
+ * while a container holds it on a coarser shared scale, such as a small
2462
+ * genome next to a large one, drawn short so the two compare by length.
2463
+ *
2464
+ * The shared scale raises the limit. A bpPerPx written past the limit
2465
+ * would be undone by the first operation that clamps (a wheel tick, a
2466
+ * rubberband, a `setDisplayedRegions`), as with the dotplot's locked
2467
+ * aspect ratio turning "zoom out" into a zoom in (`axisMaxBpPerPx`).
2468
+ * Every zoom clamps against the same ceiling, so full zoom-out stops at
2469
+ * the shared scale.
2470
+ */
2471
+ readonly maxBpPerPx: number;
2472
+ /**
2473
+ * #getter
2474
+ * The zoom-out ceiling a containing comparative view holds this row to,
2475
+ * or 0 for a standalone view, a mode that is off, and a stack that cannot
2476
+ * answer yet.
2477
+ *
2478
+ * Pulled rather than pushed down into a volatile: the number is a
2479
+ * function of every row's fit, all of which move on a resize, and a
2480
+ * stored copy would be stale by the next layout.
2481
+ */
2482
+ readonly sharedFitBpPerPx: number;
2483
+ /**
2484
+ * #getter
2485
+ */
2486
+ readonly minBpPerPx: number;
2487
+ /**
2488
+ * #getter
2489
+ */
2490
+ readonly error: unknown;
2491
+ /**
2492
+ * #getter
2493
+ */
2494
+ readonly maxOffset: number;
2495
+ /**
2496
+ * #getter
2497
+ */
2498
+ readonly minOffset: number;
2499
+ /**
2500
+ * #getter
2501
+ * Whether the displayed regions read left-to-right, right-to-left, or
2502
+ * some of each. `horizontallyFlip` reverses the order and flips every
2503
+ * region at once, so a flipped row is uniformly `reversed` and `mixed`
2504
+ * takes going out of your way — the scalebar label menu's per-region
2505
+ * "Reverse region". Read off `displayedRegions` rather than off blocks
2506
+ * because blocks cover the window and this is a fact about the row.
2507
+ */
2508
+ readonly displayedRegionsOrientation: import("./util.ts").RegionsOrientation;
2509
+ /**
2510
+ * #getter
2511
+ */
2512
+ readonly displayedRegionsTotalPx: number;
2513
+ /**
2514
+ * #getter
2515
+ */
2516
+ readonly trackMap: Map<string, any>;
2517
+ /**
2518
+ * #method
2519
+ */
2520
+ getTrack(id: string): any;
2521
+ /**
2522
+ * #method
2523
+ * displayId of the active (shown) display for a track in this view, used
2524
+ * by the config editor to expand the relevant display and collapse the
2525
+ * track's other displays
2526
+ */
2527
+ getActiveDisplayId(trackId: string): string | undefined;
2528
+ } & {
2529
+ /**
2530
+ * #action
2531
+ */
2532
+ setShowTrackOutlines(arg: boolean): void;
2533
+ /**
2534
+ * #action
2535
+ */
2536
+ setScrollZoom(flag: boolean): void;
2537
+ /**
2538
+ * #action
2539
+ */
2540
+ setColorByCDS(flag: boolean): void;
2541
+ /**
2542
+ * #action
2543
+ */
2544
+ setShowAminoAcids(flag: boolean): void;
2545
+ /**
2546
+ * #action
2547
+ */
2548
+ setShowCytobands(flag: boolean): void;
2549
+ /**
2550
+ * #action
2551
+ */
2552
+ setTrackLabelBand(trackId: string, band: number): void;
2553
+ /**
2554
+ * #action
2555
+ */
2556
+ setScrollPortExcess(px: number | undefined): void;
2557
+ /**
2558
+ * #action
2559
+ * Grow or shrink every unminimized track by `distance` px in all, each
2560
+ * by its share of the height it has above the display minimum. `from` is
2561
+ * the heights to scale, by track instance id; a drag passes the heights
2562
+ * it started with, so whole-pixel rounding does not compound frame by
2563
+ * frame. Returns how far the stack moved.
2564
+ */
2565
+ resizeTracks(distance: number, from?: any): number;
2566
+ /**
2567
+ * #action
2568
+ * A resize keeps the window in bp, so `bpPerPx` follows the new width
2569
+ * and the view keeps framing the same sequence (ADR-070).
2570
+ */
2571
+ setWidth(newWidth: number): void;
2572
+ /**
2573
+ * #action
2574
+ */
2575
+ setError(error: unknown): void;
2576
+ /**
2577
+ * #action
2578
+ */
2579
+ setIsScalebarRefNameMenuOpen(isOpen: boolean): void;
2580
+ /**
2581
+ * #action
2582
+ */
2583
+ setHideHeader(b: boolean): void;
2584
+ /**
2585
+ * #action
2586
+ */
2587
+ setHideHeaderOverview(b: boolean): void;
2588
+ /**
2589
+ * #action
2590
+ */
2591
+ setScalebarOnly(b: boolean): void;
2592
+ /**
2593
+ * #action
2594
+ */
2595
+ setHideNoTracksActive(b: boolean): void;
2596
+ /**
2597
+ * #action
2598
+ */
2599
+ setShowGridlines(b: boolean): void;
2600
+ /**
2601
+ * #action
2602
+ * set temporary vertical guides (e.g., for LD display hover)
2603
+ */
2604
+ setVolatileGuides(guides: VolatileGuide[]): void;
2605
+ /**
2606
+ * #action
2607
+ */
2608
+ scrollTo(offsetPx: number): number;
2609
+ /**
2610
+ * #action
2611
+ * `scrollTo`'s bp-space twin: place the window's left edge at a
2612
+ * linearized bp coordinate, clamped to the same scroll limits.
2613
+ *
2614
+ * It exists so a caller that already knows where it wants to be in bp —
2615
+ * zoomTo, anchoring the base under the cursor — does not have to convert
2616
+ * to pixels and let this convert back. That round trip is lossy once per
2617
+ * frame, and a scroll-zoom burst is a few dozen frames, which is enough
2618
+ * to walk the base out from under the cursor.
2619
+ */
2620
+ scrollToBp(startBp: number): number;
2621
+ /**
2622
+ * #action
2623
+ */
2624
+ zoomTo(bpPerPx: number, offset?: any): number;
2625
+ /**
2626
+ * #action
2627
+ * sets offsets of rubberband, used in the get sequence dialog can call
2628
+ * view.getSelectedRegions(view.leftOffset,view.rightOffset) to compute
2629
+ * the selected regions from the offsets
2630
+ */
2631
+ setOffsets(left?: BpOffset, right?: BpOffset): void;
2632
+ /**
2633
+ * #action
2634
+ * Raise the picker over search results that name more than one place.
2635
+ * @param onPick - where a picked result lands; by default it navigates
2636
+ * there and shows the track its index came from
2637
+ */
2638
+ setSearchResults(searchResults: BaseResult[], searchQuery: string, assemblyName: string, onPick?: (result: BaseResult) => Promise<unknown>): void;
2639
+ /**
2640
+ * #action
2641
+ */
2642
+ showTrack(trackId: string, initialSnapshot?: any, displayInitialSnapshot?: any, inlineConf?: Record<string, unknown>): any;
2643
+ /**
2644
+ * #action
2645
+ */
2646
+ hideTrack(trackId: string): boolean;
2647
+ } & {
2648
+ /**
2649
+ * #action
2650
+ * Resize every unminimized track so the view is exactly as tall as the
2651
+ * scroll port it sits in. Does nothing until the view has measured one.
2652
+ */
2653
+ fitTracksToWindow(): void;
2654
+ /**
2655
+ * #action
2656
+ * showTrack for a track whose display state model may be lazily
2657
+ * loaded: loads it, then shows
2658
+ */
2659
+ launchTrack(trackId: string, initialSnapshot?: any, displayInitialSnapshot?: any, inlineConf?: Record<string, unknown>): Promise<any>;
2660
+ } & {
2661
+ /**
2662
+ * #method
2663
+ * The shown track a move action means: the menu passes a track model's
2664
+ * own `id`, an agent passes the `trackId` it knows the track by, and
2665
+ * both name one shown track. Answers the model id, or the argument
2666
+ * unchanged when nothing shown matches, so the move reports it.
2667
+ */
2668
+ trackModelId(idOrTrackId: string): any;
2669
+ } & {
2670
+ moveTrack: (moving: string, target: string) => void;
2671
+ /**
2672
+ * #action
2673
+ */
2674
+ moveTrackDown(idOrTrackId: string): void;
2675
+ /**
2676
+ * #action
2677
+ */
2678
+ moveTrackUp(idOrTrackId: string): void;
2679
+ /**
2680
+ * #action
2681
+ */
2682
+ moveTrackToTop(idOrTrackId: string): void;
2683
+ /**
2684
+ * #action
2685
+ */
2686
+ moveTrackToBottom(idOrTrackId: string): void;
2687
+ } & {
2688
+ /**
2689
+ * #action
2690
+ */
2691
+ toggleTrack(trackId: string): boolean;
2692
+ /**
2693
+ * #action
2694
+ * toggleTrack with launchTrack's loading behavior
2695
+ */
2696
+ launchToggleTrack(trackId: string): Promise<boolean>;
2697
+ /**
2698
+ * #action
2699
+ */
2700
+ setTrackLabels(setting: ViewTrackLabelMode): void;
2701
+ /**
2702
+ * #action
2703
+ */
2704
+ setShowCenterLine(b: boolean): void;
2705
+ /**
2706
+ * #action
2707
+ */
2708
+ activateTrackSelector(): import("@jbrowse/core/util").Widget;
2709
+ /**
2710
+ * #action
2711
+ */
2712
+ toggleTrackSelector(): import("@jbrowse/core/util").Widget;
2713
+ /**
2714
+ * #method
2715
+ * Helper method for the fetchSequence.
2716
+ * Retrieves the corresponding regions that were selected by the
2717
+ * rubberband
2718
+ *
2719
+ * @param leftOffset - `object as {start, end, index, offset}`, offset = start
2720
+ * of user drag
2721
+ * @param rightOffset - `object as {start, end, index, offset}`,
2722
+ * offset = end of user drag
2723
+ * @returns array of Region[]
2724
+ */
2725
+ getSelectedRegions(leftOffset?: BpOffset, rightOffset?: BpOffset): {
2726
+ assemblyName: string;
2727
+ refName: string;
2728
+ start: number;
2729
+ end: number;
2730
+ }[];
2731
+ /**
2732
+ * #action
2733
+ */
2734
+ horizontalScroll(distance: number): number;
2735
+ /**
2736
+ * #action
2737
+ */
2738
+ setDraggingTrackId(idx?: string): void;
2739
+ /**
2740
+ * #action
2741
+ * called while dragging a track over the track at `targetId`; reorders
2742
+ * once the cursor has moved far enough (see shouldSwapTracks) to avoid
2743
+ * jitter when a short track is dragged over a tall one
2744
+ */
2745
+ onTrackDragOver(targetId: string, currentY: number): void;
2746
+ /**
2747
+ * #action
2748
+ */
2749
+ setLaunch(launch?: LaunchInput<InitState>): void;
2750
+ /**
2751
+ * #method
2752
+ * renders the view to SVG markup, which it returns; saves it through
2753
+ * FileSaver unless `save: false`
2754
+ */
2755
+ exportSvg(opts?: ExportSvgOptions): Promise<string>;
2756
+ } & {
2757
+ slide: (viewWidths: number) => void;
2758
+ zoom: (targetBpPerPx: number) => void;
2759
+ cancelZoomAnimation: () => void;
2760
+ } & {
2761
+ /**
2762
+ * #getter
2763
+ */
2764
+ readonly showsWholeChromosome: boolean;
2765
+ /**
2766
+ * #getter
2767
+ * an ideogram only reads correctly against an entire chromosome: on a
2768
+ * sub-region it is a meaningless slice of bands, and the centromere shows
2769
+ * up as a lone half-triangle. The chromosome needs bands of its own too:
2770
+ * a cytoband file often lists only the main chromosomes, not chrM or the
2771
+ * unplaced scaffolds
2772
+ */
2773
+ readonly canShowCytobands: boolean;
2774
+ /**
2775
+ * #getter
2776
+ * the `showCytobands` setting gated by whether cytobands can be shown at
2777
+ * all (whole chromosome with bands of its own) and by the header
2778
+ * overview they draw in being on, which the SVG export follows too
2779
+ */
2780
+ readonly effectiveShowCytobands: boolean;
2781
+ /**
2782
+ * #getter
2783
+ * the cytoband is displayed to the right of the chromosome name, and
2784
+ * that offset is calculated manually with this method
2785
+ */
2786
+ readonly cytobandOffset: number;
2787
+ /**
2788
+ * #getter
2789
+ */
2790
+ readonly isTrackSelectorOpen: boolean;
2791
+ } & {
2792
+ /**
2793
+ * #method
2794
+ * return the view menu items
2795
+ */
2796
+ menuItems(): MenuItem[];
2797
+ /**
2798
+ * #method
2799
+ * the view menu's Highlights submenu; extend this to add a row there
2800
+ */
2801
+ highlightsSubMenuItems(): MenuItem[];
2802
+ /**
2803
+ * #method
2804
+ * what a plugin can start from the selected region — a synteny view, a
2805
+ * consensus call. Extend this rather than `rubberBandMenuItems` so the
2806
+ * entries collect under the menu's "Launch" submenu; that grouping is
2807
+ * decided once here rather than by whichever contributor runs first, and
2808
+ * keeps the rubberband menu itself short as plugins pile on.
2809
+ */
2810
+ rubberBandLaunchMenuItems(): MenuItem[];
2811
+ /**
2812
+ * #getter
2813
+ * geometry of the overview scalebar — derived from displayedRegions,
2814
+ * width, and cytobandOffset so it stays cached by MobX
2815
+ */
2816
+ readonly overviewLayout: ViewLayout;
2817
+ } & {
2818
+ /**
2819
+ * #getter
2820
+ * static blocks are an important concept jbrowse uses to avoid
2821
+ * re-rendering when you scroll to the side. when you horizontally
2822
+ * scroll to the right, old blocks to the left may be removed, and new
2823
+ * blocks may be instantiated on the right. tracks may use the static
2824
+ * blocks to render their data for the region represented by the block
2825
+ */
2826
+ readonly staticBlocks: BlockSet;
2827
+ /**
2828
+ * #getter
2829
+ * dynamic blocks represent the exact coordinates of the currently
2830
+ * visible genome regions on the screen. they are similar to static
2831
+ * blocks, but static blocks can go offscreen while dynamic blocks
2832
+ * represent exactly what is on screen
2833
+ */
2834
+ readonly dynamicBlocks: BlockSet;
2835
+ /**
2836
+ * #getter
2837
+ * all overview scalebar blocks (content + elided), laid out on the
2838
+ * overviewLayout. memoized so the scalebar doesn't recompute it per
2839
+ * render
2840
+ */
2841
+ readonly overviewBlocks: import("@jbrowse/core/util/blockTypes").BaseBlock[];
2842
+ /**
2843
+ * #getter
2844
+ * leading/trailing pixel span of the visible regions projected onto the
2845
+ * overviewLayout — the geometry of the overview's "you are here"
2846
+ * rectangle, and of the top edge of the polygon drawn under it. Elided
2847
+ * regions count: at whole-genome zoom the tail of an assembly is all
2848
+ * coalesced tiny contigs, and stopping at the last *content* block left
2849
+ * the rectangle short of (or, scrolled onto that tail, absent from) the
2850
+ * polygon it sits on.
2851
+ */
2852
+ readonly overviewRegionPxSpan: import("@jbrowse/core/util/Base1DUtils").PxSpan | undefined;
2853
+ /**
2854
+ * #getter
2855
+ * The x shift that maps the **staticBlocks frame** onto the viewport:
2856
+ * `translateX(view.staticBlocksTranslateX)` on one container places
2857
+ * every `gridlineTicks`, `scalebarLabels` and `paddingSpans` entry at
2858
+ * once, and a pan then moves that single transform rather than each
2859
+ * child.
2860
+ *
2861
+ * The frame exists because those three are laid out across every
2862
+ * displayed region rather than across the viewport — it overhangs on
2863
+ * both sides — so their `x` values are stable under a scroll and only
2864
+ * this number moves. `scalebarRefNameLabels` is the exception and says
2865
+ * so: its `transform` is already a screen x, because a sticky label's
2866
+ * position is a function of the scroll rather than of block geometry.
2867
+ *
2868
+ * **The subtraction must happen here, in float64, and that is the
2869
+ * load-bearing part.** `offsetPx` is a whole-genome pixel coordinate —
2870
+ * hg38 chr1 at base resolution is already past 1e10 — and a length that
2871
+ * size does not survive the trip through CSS: the transform matrix is
2872
+ * float32 by the time it reaches the compositor, where consecutive
2873
+ * representable values at 1e10 are ~1024px apart, and layout saturates
2874
+ * sooner still (Blink's `LayoutUnit` is int32 at 1/64px, so ±33.5M px).
2875
+ * So the shape that looks obvious — lay an overlay out in absolute
2876
+ * genome pixels, write `translateX(-view.offsetPx)` — does not lose a
2877
+ * subpixel, it puts the row somewhere else entirely, and only on large
2878
+ * assemblies at high zoom, which is not where anyone tests. Both
2879
+ * operands here are large and their difference is bounded by the
2880
+ * overhang (a block or two), so what reaches CSS is small and exact.
2881
+ * Same rule as the GPU side, one layer up —
2882
+ * `agent-docs/reference/BP_PRECISION.md`.
2883
+ *
2884
+ * Published because it is the one piece of coordinate arithmetic a host
2885
+ * drawing its own chrome would otherwise have to know, and because
2886
+ * having it written out at each call site is how the two in-tree copies
2887
+ * came to disagree about rounding. Round it where the content is text
2888
+ * (a fractional offset blurs a label); leave it alone for paths and
2889
+ * boxes.
2890
+ */
2891
+ readonly staticBlocksTranslateX: number;
2892
+ /**
2893
+ * #getter
2894
+ * Gridline tick positions (x relative to the staticBlocks frame),
2895
+ * derived from staticBlocks + bpPerPx. Computed once and shared by every
2896
+ * Gridlines instance (scalebar, main view, each pinned track) rather
2897
+ * than recomputing the makeTicks loop per component.
2898
+ */
2899
+ readonly gridlineTicks: {
2900
+ x: number;
2901
+ major: boolean;
2902
+ }[];
2903
+ /**
2904
+ * #getter
2905
+ * Scalebar coordinate labels (x in the staticBlocks frame + display
2906
+ * text). Sibling of gridlineTicks sharing the same makeBlockTicks
2907
+ * formula, so labels line up exactly with their gridlines. staticBlocks
2908
+ * chop a region into ~800px chunks; groupContiguousBlocks merges them
2909
+ * back per region so a label on an internal chunk boundary isn't clipped
2910
+ * away by both neighbors — only genuine region edges clip a label.
2911
+ *
2912
+ * A run that can hold too few labels to make a ruler goes unnumbered
2913
+ * (`tickLabelsWorthDrawing`), the same rule the overview scalebar and
2914
+ * the dotplot axes apply: with a whole genome displayed each chromosome
2915
+ * catches one lone coordinate, which conveys no scale by itself and
2916
+ * reads as the same number repeated across the row.
2917
+ */
2918
+ readonly scalebarLabels: {
2919
+ x: number;
2920
+ label: string;
2921
+ key: string;
2922
+ }[];
2923
+ /**
2924
+ * #getter
2925
+ * The bold refName labels drawn along the scalebar, as plain data:
2926
+ * `{key, refName, displayedRegionIndex, lastDisplayedRegionIndex,
2927
+ * sticky, transform, maxWidth, paddingLeft, text}` each. One per run of
2928
+ * same-refName regions, plus a "sticky" one pinned to the viewport's
2929
+ * left edge naming the refName under it, so panning into a chromosome
2930
+ * does not scroll its own name off the screen.
2931
+ *
2932
+ * Three rules live in here that a host drawing region names will
2933
+ * otherwise rediscover the hard way, and two of them are invisible until
2934
+ * the data is awkward:
2935
+ *
2936
+ * - the sticky label rides the rightmost run that has scrolled off the
2937
+ * left, not the region's first block — that one is gone from
2938
+ * staticBlocks entirely once you zoom into a region's interior, taking
2939
+ * the chromosome name off screen at exactly the zoom where nothing
2940
+ * else names it.
2941
+ * - adjacent regions of the same refName (collapsed introns) get one
2942
+ * label between them, not one each. That label names the whole run and
2943
+ * is fitted to the whole run, and `displayedRegionIndex` /
2944
+ * `lastDisplayedRegionIndex` bracket what it stands for.
2945
+ * - a name is drawn whole or not at all, measured against the space its
2946
+ * run leaves. Clipped to its own width, `chr16` reads as `chr1` —
2947
+ * a different chromosome rather than a shortened name, which is why
2948
+ * this is a fit test rather than an ellipsis.
2949
+ *
2950
+ * **Viewport frame, unlike its siblings.** `transform` is a screen x,
2951
+ * already net of `offsetPx`, where gridlineTicks / scalebarLabels /
2952
+ * paddingSpans are all in the staticBlocks frame. The sticky label's
2953
+ * position is a function of `offsetPx` rather than of block geometry, so
2954
+ * it has no fixed position in that frame — and for the same reason this
2955
+ * getter recomputes on every scroll frame where those three do not.
2956
+ *
2957
+ * `caption` accompanies the labels: the chip at the row's left edge,
2958
+ * saying which assembly the row is (a container view — synteny — opts
2959
+ * into that through `scalebarDisplayPrefix`) and whether it is flipped.
2960
+ * A ` [rev]` there is a fact about the ROW; the same marker on a
2961
+ * chromosome name means that one region, which only happens under mixed
2962
+ * orientation. `captionSpanPx` is the width it takes: the sticky label
2963
+ * pins to its right edge rather than the viewport's, and the coordinate
2964
+ * numbers stay out from under it. The SVG export deliberately
2965
+ * calls `getScalebarRefNameLabels` itself with no prefix rather than
2966
+ * reading this, since it draws its own assembly name above the ruler.
2967
+ */
2968
+ readonly scalebarRefNameLabels: {
2969
+ labels: import("./util.ts").ScalebarRefNameLabel[];
2970
+ caption: string | undefined;
2971
+ captionSpanPx: number;
2972
+ };
2973
+ /**
2974
+ * #getter
2975
+ * Every span along the row that is not track data, as plain geometry in
2976
+ * the staticBlocks frame — the same frame as gridlineTicks and
2977
+ * scalebarLabels, so one `translateX(staticBlocksTranslateX)` places all
2978
+ * three. A host drawing its own chrome needs all three kinds:
2979
+ *
2980
+ * - `seam`: the 3px bar at a region's right edge. Displayed regions are
2981
+ * laid out **contiguously** (calculateStaticBlocks emits boundary
2982
+ * padding only before the first region and after the last), so this
2983
+ * bar is the only thing separating two of them. Without it a
2984
+ * two-region view looks like a single region.
2985
+ * `isRightEndOfDisplayedRegion` marks it; the right edge of the
2986
+ * currently *loaded* blocks, which block geometry gives you, is a
2987
+ * different set.
2988
+ * - `elided`: a region too narrow to draw at this zoom. Whole-genome on
2989
+ * a real assembly is mostly these (hg38 has 455 sequences, and all
2990
+ * but the 24 chromosomes are under a pixel wide), so a host that
2991
+ * skips them leaves that part of the row empty.
2992
+ * - `boundary`: past the start of the first region or the end of the
2993
+ * last. Greying it shows the last region's seam as the edge of a
2994
+ * filled area, where it would otherwise look like a line in the
2995
+ * middle of the track.
2996
+ *
2997
+ * Elided blocks get no seam even though they carry the flag: at the
2998
+ * zoom where regions elide, one bar per region would fill the row solid
2999
+ * grey.
3000
+ *
3001
+ * PaddingBlocks is the in-tree consumer. The SVG export does not use
3002
+ * it: `SVGRegionSeparators` walks dynamicBlocks itself and draws only
3003
+ * the seam, because `elided` and `boundary` mark state for an
3004
+ * interactive row. In a static figure the striped grey would cover most
3005
+ * of the row at whole-genome zoom. The export keeps the seam because
3006
+ * regions lay out contiguously and the seam is all that separates two
3007
+ * of them.
3008
+ */
3009
+ readonly paddingSpans: readonly {
3010
+ key: string;
3011
+ x: number;
3012
+ width: number;
3013
+ kind: 'seam' | 'elided' | 'boundary';
3014
+ }[];
3015
+ /**
3016
+ * #getter
3017
+ * Integer-rounded sum of all visible block widths. Slightly less than
3018
+ * view.width when the genome ends before the right edge; use view.width
3019
+ * for SVG clip rects (display boundary) and this for paint canvas sizing
3020
+ * (actual content width).
3021
+ */
3022
+ readonly totalWidthPx: number;
3023
+ /**
3024
+ * #getter
3025
+ * Like totalWidthPx but excluding inter-region boundary blocks. Used
3026
+ * when column layout divides the canvas width by feature count.
3027
+ */
3028
+ readonly totalWidthPxWithoutBorders: number;
3029
+ /**
3030
+ * #getter
3031
+ */
3032
+ readonly visibleBp: number;
3033
+ /**
3034
+ * #getter
3035
+ * Whether any part of a displayed region actually falls inside the
3036
+ * viewport. False both when the view holds no regions at all and when
3037
+ * it holds some but is scrolled entirely off them; either way there is
3038
+ * no visible span for the scalebar, ruler and refName labels to
3039
+ * describe. The SVG export checks it before drawing its header.
3040
+ * Distinct from `hasDisplayedRegions`, which only asks whether the
3041
+ * view has been given regions, not whether any are on screen.
3042
+ */
3043
+ readonly hasVisibleContent: boolean;
3044
+ /**
3045
+ * #getter
3046
+ * What is on screen, as regions that address whole bases — what a
3047
+ * reader means by "the visible region" when they ask to fetch it,
3048
+ * bookmark it or read it back in a locString field. `visibleRegions`
3049
+ * below is the other half: pixels, and fractional by design.
3050
+ */
3051
+ readonly visibleWholeBaseRegions: {
3052
+ assemblyName: string;
3053
+ refName: string;
3054
+ start: number;
3055
+ end: number;
3056
+ }[];
3057
+ /**
3058
+ * #getter
3059
+ * Returns the currently visible content blocks with screen pixel
3060
+ * positions and displayedRegionIndex guaranteed.
3061
+ * Used by WebGL displays for per-region data fetching and rendering.
3062
+ */
3063
+ readonly visibleRegions: {
3064
+ refName: string;
3065
+ start: number;
3066
+ end: number;
3067
+ assemblyName: string;
3068
+ reversed: boolean | undefined;
3069
+ displayedRegionIndex: number;
3070
+ screenStartPx: number;
3071
+ screenEndPx: number;
3072
+ }[];
3073
+ /**
3074
+ * #getter
3075
+ * Right edge (px, viewport-relative) of the on-screen content, clamped
3076
+ * to the track — where a right-pinned overlay such as a wiggle's colour
3077
+ * or score legend belongs, rather than out in the empty gutter the
3078
+ * regions can leave at whole-genome zoom. `@jbrowse/display-kit`'s
3079
+ * `contentRightEdgePx` states the rule; an SVG export applies the same
3080
+ * one against the export's canvas width instead of this track's.
3081
+ *
3082
+ * Published as a SCALAR on purpose. `visibleRegions` rebuilds a fresh
3083
+ * array of fresh objects on every pan and zoom frame, so a component
3084
+ * that derived this number itself re-rendered on every frame of every
3085
+ * gesture — to produce, whenever content fills the track, the unchanged
3086
+ * `trackWidthPx`. Reading the scalar lets MobX's `===` stop the chain at
3087
+ * this computed instead. Measured over 20 zoom frames: the wiggle
3088
+ * family's three body instances fell from 66 renders to 7.
3089
+ */
3090
+ readonly contentRightEdgePx: number;
3091
+ /**
3092
+ * #getter
3093
+ * visibleRegions expanded by a half-screen buffer on each side,
3094
+ * clamped to displayedRegion bounds, with integer-rounded coordinates.
3095
+ * Use this when fetching data that should extend slightly beyond the
3096
+ * viewport for smooth scrolling.
3097
+ */
3098
+ readonly bufferedVisibleRegions: {
3099
+ region: {
3100
+ refName: string;
3101
+ start: number;
3102
+ end: number;
3103
+ assemblyName: string;
3104
+ reversed: boolean | undefined;
3105
+ };
3106
+ displayedRegionIndex: number;
3107
+ }[];
3108
+ /**
3109
+ * #getter
3110
+ * a single "combo-locstring" representing all the regions visible on
3111
+ * the screen
3112
+ */
3113
+ readonly visibleLocStrings: string;
3114
+ /**
3115
+ * #getter
3116
+ * **The blocks a debounced consumer clips to**: the coarse blocks once
3117
+ * the view has settled at least once, the live ones before that.
3118
+ *
3119
+ * The coarse blocks stop a per-bp scan from recomputing on every
3120
+ * animation frame during a pan or zoom. Wiggle's autoscale domain, the
3121
+ * alignments coverage scale and MAF's coverage band use them. While the
3122
+ * coarse blocks are stale the result is a frame or two old, as the
3123
+ * debounce intends. **Empty coarse blocks are a different case.** A scan
3124
+ * over no blocks yields no entries, and the consumer falls back to the
3125
+ * domain `[0,1]`, which draws a line plot blank and a density plot
3126
+ * saturated. The coarse blocks are empty for the 500ms between a view
3127
+ * initializing and the coarse autorun's first run, and data can load
3128
+ * within that window.
3129
+ *
3130
+ * Falling back to the live blocks costs one extra recompute at that
3131
+ * transition, compared with N per frame without the debounce.
3132
+ */
3133
+ readonly settledDynamicBlocks: ContentBlock[];
3134
+ /**
3135
+ * #getter
3136
+ * same as visibleLocStrings, but only updated every 500ms
3137
+ */
3138
+ readonly coarseVisibleLocStrings: string;
3139
+ /**
3140
+ * #getter
3141
+ */
3142
+ readonly coarseTotalBpDisplayStr: string;
3143
+ /**
3144
+ * #getter
3145
+ */
3146
+ readonly effectiveTotalBp: number;
3147
+ /**
3148
+ * #getter
3149
+ */
3150
+ readonly effectiveTotalBpDisplayStr: string;
3151
+ } & {
3152
+ /**
3153
+ * #action
3154
+ */
3155
+ setCoarseDynamicBlocks(blocks: BlockSet, bpPerPx: number): void;
3156
+ } & {
3157
+ /**
3158
+ * #action
3159
+ * Bring the coarse blocks to the viewport as it stands now, for a
3160
+ * placement that JUMPED rather than travelled.
3161
+ *
3162
+ * The coarse blocks are a 500ms throttle, and every consumer trades
3163
+ * freshness for not recomputing per animation frame — the location box,
3164
+ * canvas's on-screen feature set, and the two per-bp scans behind
3165
+ * `settledDynamicBlocks`. That trade is only sound while the answer is a
3166
+ * few frames old. **A jump makes it unrelated instead**, because there is
3167
+ * nothing to coalesce: the viewport left behind is not an approximation of
3168
+ * the new one, it is a different place. Unsettled, the location box reads
3169
+ * as a navigation that didn't happen, and wiggle's autoscale domain is
3170
+ * computed over the window the user just left — measured at `[0,200]`
3171
+ * against a correct `[0,300]` when a 40bp coarse window survived a jump to
3172
+ * 4040bp on screen. Only the per-region fetch moving to the leading edge
3173
+ * made that reachable: at 600ms the data never landed inside the hole.
3174
+ *
3175
+ * **The continuous paths deliberately do not come through here.** The
3176
+ * spring zoom writes through `zoomTo` per frame and a drag through
3177
+ * `scrollTo`, so this adds no per-frame work; the settle is idempotent
3178
+ * (`setCoarseDynamicBlocks` compares block keys), so the debounced
3179
+ * autorun's own follow-up run costs nothing.
3180
+ *
3181
+ * Every placer calls it, and `placersSettleCoarseBlocks.test.ts` is what
3182
+ * makes that true of the next one — it scans this file for the writes and
3183
+ * fails on a placer that reaches neither the settle nor its named list of
3184
+ * continuous paths. Two passes by hand missed four.
3185
+ */
3186
+ settleCoarseBlocks(): void;
3187
+ } & {
3188
+ /**
3189
+ * #action
3190
+ * offset is the base-pair-offset in the displayed region, index is the
3191
+ * index of the displayed region in the linear genome view
3192
+ *
3193
+ * @param start - object as `{start, end, offset, index}`
3194
+ * @param end - object as `{start, end, offset, index}`
3195
+ */
3196
+ moveTo(start?: BpOffset, end?: BpOffset): void;
3197
+ /**
3198
+ * #action
3199
+ * Place the viewport by the pair of PIXEL quantities it used to be stored
3200
+ * as. Prefer `setWindow`: pixels mean nothing without the width they were
3201
+ * measured at, so a round trip through here is only exact while the width
3202
+ * holds still. Kept for callers that genuinely have pixels — a wheel
3203
+ * gesture, a rubberband.
3204
+ */
3205
+ setNewView(bpPerPx: number, offsetPx: number): void;
3206
+ /**
3207
+ * #action
3208
+ * Place the viewport by the pair it is actually STORED as: the window's
3209
+ * width and left edge, both in bp. `setNewView`'s bp-space twin, and the
3210
+ * right one for anything that captures a viewport and puts it back later
3211
+ * (an Undo, a saved location) — those two moments can be a window resize
3212
+ * apart, and this pair survives one where a pixel pair does not.
3213
+ *
3214
+ * Still clamped, by the same zoom and scroll limits as every other mover:
3215
+ * the regions may have changed under it, and a window the new set can't
3216
+ * hold is not restorable however it was spelled.
3217
+ */
3218
+ setWindow(windowWidthBp: number, windowStartBp: number): void;
3219
+ /**
3220
+ * #action
3221
+ * `setWindow` without the settle, for a writer that runs per animation
3222
+ * frame. Flushing the coarse blocks sixty times a second is the one thing
3223
+ * such a writer must not do: they are a 500ms throttle that a synteny
3224
+ * follow pass and two autoscale domains hang off, and settling each frame
3225
+ * turns each of those into per-frame work — `positionViewOnSpans` states
3226
+ * the same rule for the same reason.
3227
+ */
3228
+ setWindowFrame(windowWidthBp: number, windowStartBp: number): void;
3229
+ /**
3230
+ * #action
3231
+ * The worst jump of them to leave unsettled: the coarse blocks are keyed
3232
+ * by `displayedRegionIndex`, so a set that outlives the region list has a
3233
+ * consumer reading one contig's data against another's blocks.
3234
+ */
3235
+ setDisplayedRegions(regions: Region[]): void;
3236
+ /**
3237
+ * #action
3238
+ * Re-assert `maxBpPerPx` over the current zoom, for a container whose
3239
+ * shared ceiling just fell — otherwise the view is stranded above it with
3240
+ * zoom-out disabled and the slider's min past its value. Goes through
3241
+ * `zoomTo` so the clamp keeps one definition, and settles because a
3242
+ * ceiling drop moves the window in one step.
3243
+ *
3244
+ * Requires an `initialized` view; the caller checks, since an MST action
3245
+ * reads untracked and a guard here would never re-run once the row
3246
+ * arrived.
3247
+ */
3248
+ clampZoomToCeiling(): void;
3249
+ /**
3250
+ * #action
3251
+ */
3252
+ showAllRegions(): void;
3253
+ /**
3254
+ * #action
3255
+ * Fit the displayed regions to the width exactly, edge to edge.
3256
+ *
3257
+ * Not the same as `showAllRegions`, which goes to `maxBpPerPx` — the
3258
+ * zoom-out LIMIT, where `SHOW_ALL_REGIONS_FILL` deliberately keeps a 10%
3259
+ * margin so the whole genome doesn't sit flush against both edges. That
3260
+ * margin is right for "show me everything" and wrong for a caller that
3261
+ * named the regions it wants: it draws them at 1/0.9 of fit-to-width,
3262
+ * centered, which is a silent 11% scale difference from the
3263
+ * single-region path (`moveTo`, span/width) reached through the same
3264
+ * location box.
3265
+ *
3266
+ * The scale comes from `fitAllRegionsWindow`, which is where the rule is
3267
+ * written — a snapshot builder that cannot call an action needs the same
3268
+ * answer, and the two agreeing matters more than either being local. Where
3269
+ * it clamps up to `minBpPerPx` the content is narrower than the view, and
3270
+ * the centering is what frames it.
3271
+ */
3272
+ fitAllRegions(): void;
3273
+ /**
3274
+ * #action
3275
+ */
3276
+ horizontallyFlip(): void;
3277
+ } & {
3278
+ /**
3279
+ * #action
3280
+ */
3281
+ showAllRegionsInAssembly(assemblyName?: string): void;
3282
+ /**
3283
+ * #action
3284
+ * this "clears the view" and makes the view return to the import form
3285
+ */
3286
+ clearView(): void;
3287
+ /**
3288
+ * #action
3289
+ * Navigate to a location based on its refName and optionally start, end,
3290
+ * and assemblyName. Will not try to change displayed regions, use
3291
+ * `navToLocations` instead. Only navigates to a location if it is
3292
+ * entirely within a displayedRegion. Navigates to the first matching
3293
+ * location encountered.
3294
+ *
3295
+ * Throws an error if navigation was unsuccessful
3296
+ *
3297
+ * @param query - a proposed location to navigate to
3298
+ * @param grow - optional multiplier to expand the region by (e.g., 0.2
3299
+ * adds 20% padding on each side)
3300
+ */
3301
+ navTo(query: NavLocation, grow?: number): void;
3302
+ /**
3303
+ * #action
3304
+ * Navigate to a location based on its refName and optionally start, end,
3305
+ * and assemblyName. Will not try to change displayed regions, use
3306
+ * navToLocations instead. Only navigates to a location if it is entirely
3307
+ * within a displayedRegion. Navigates to the first matching location
3308
+ * encountered.
3309
+ *
3310
+ * Throws an error if navigation was unsuccessful
3311
+ *
3312
+ * @param locations - proposed location to navigate to
3313
+ * @param grow - optional multiplier to expand the region by (e.g., 0.2
3314
+ * adds 20% padding on each side)
3315
+ */
3316
+ navToMultiple(locations: NavLocation[], grow?: number): void;
3317
+ } & {
3318
+ /**
3319
+ * #action
3320
+ * Replace the region list and place the viewport in one step. The pair is
3321
+ * the unit a coarse-block consumer can act on: called separately they
3322
+ * publish the viewport in between, and post-await in `navToLocations`
3323
+ * they are two transactions, so a per-bp scan runs over a window that was
3324
+ * never on screen.
3325
+ *
3326
+ * With no location named it fits the regions rather than going through
3327
+ * `showAllRegions`: the caller named the regions it wants, so it gets the
3328
+ * width, where showAllRegions goes to the zoom-out LIMIT and its 10%
3329
+ * margin is dead frame for a named subset.
3330
+ */
3331
+ showRegions(regions: Region[], location?: NavLocation): void;
3332
+ } & {
3333
+ /**
3334
+ * #action
3335
+ * Navigate to the given locstring, will change displayed regions if
3336
+ * needed, and wait for assemblies to be initialized
3337
+ *
3338
+ * @param input - e.g. "chr1:1-100", "chr1:1-100 chr2:1-100", "chr 1 100"
3339
+ * @param optAssemblyName - (optional) the assembly name to use when
3340
+ * navigating to the locstring
3341
+ * @param grow - optional multiplier to expand the region by (e.g., 0.2
3342
+ * adds 20% padding on each side)
3343
+ * @param opts - `showHitTrack: false` keeps a text-search hit from also
3344
+ * showing the track its index was built from
3345
+ * @returns whether the view moved. A multi-hit search raises the picker
3346
+ * instead of navigating, and both resolve — see `handleSelectedRegion`.
3347
+ */
3348
+ navToLocString(input: string, optAssemblyName?: string, grow?: number, opts?: {
3349
+ showHitTrack?: boolean;
3350
+ }): Promise<boolean>;
3351
+ /**
3352
+ * #action
3353
+ * Similar to `navToLocString`, but accepts a list of parsed location
3354
+ * objects instead of a locstring. Will try to perform
3355
+ * `setDisplayedRegions` if changing regions
3356
+ *
3357
+ * @param regions - array of parsed location objects
3358
+ * @param assemblyName - optional assembly name
3359
+ * @param grow - optional multiplier to expand the region by (e.g., 0.2
3360
+ * adds 20% padding on each side)
3361
+ */
3362
+ navToLocations(regions: ParsedLocString[], assemblyName?: string, grow?: number): Promise<void>;
3363
+ } & {
3364
+ /**
3365
+ * #action
3366
+ * Similar to `navToLocString`, but accepts a parsed location object
3367
+ * instead of a locstring. Will try to perform `setDisplayedRegions` if
3368
+ * changing regions
3369
+ *
3370
+ * @param parsedLocString - a parsed location object with refName, start,
3371
+ * end, etc.
3372
+ * @param assemblyName - optional assembly name
3373
+ * @param grow - optional multiplier to expand the region by (e.g., 0.2
3374
+ * adds 20% padding on each side)
3375
+ */
3376
+ navToLocation(parsedLocString: ParsedLocString, assemblyName?: string, grow?: number): Promise<void>;
3377
+ /**
3378
+ * #action
3379
+ * adds the region in view to the session's highlights
3380
+ */
3381
+ highlightCurrentRegion(): void;
3382
+ /**
3383
+ * #action
3384
+ * navigates to the most recently added highlight on this view's
3385
+ * assemblies, zoomed out a little for context
3386
+ */
3387
+ navigateNewestHighlight(): Promise<void>;
3388
+ } & {
3389
+ /**
3390
+ * #method
3391
+ */
3392
+ rubberBandMenuItems(): MenuItem[];
3393
+ /**
3394
+ * #method
3395
+ */
3396
+ bpToPx({ refName, coord, displayedRegionIndex, }: {
3397
+ refName: string;
3398
+ coord: number;
3399
+ displayedRegionIndex?: number;
3400
+ }): {
3401
+ index: number;
3402
+ offsetPx: number;
3403
+ } | undefined;
3404
+ /**
3405
+ * #method
3406
+ * Map a highlight region to its pixel position+width inside
3407
+ * the tracks container. Falls back to the raw refName if the region's
3408
+ * assemblyName is missing or unknown so highlights authored without an
3409
+ * assembly still render in single-assembly views.
3410
+ */
3411
+ getHighlightCoords(region: HighlightRegion): {
3412
+ width: number;
3413
+ left: number;
3414
+ } | undefined;
3415
+ /**
3416
+ * #method
3417
+ * y ranges, from the top of the highlight bands, of tracks whose display
3418
+ * sets `drawsGenomicCoordinates` to false; the bands skip them
3419
+ */
3420
+ nonGenomicTrackBands(): {
3421
+ top: number;
3422
+ height: any;
3423
+ }[];
3424
+ /**
3425
+ * #method
3426
+ * like getHighlightCoords but laid out against the overview scalebar and
3427
+ * shifted by the cytoband offset
3428
+ */
3429
+ getOverviewHighlightCoords(region: HighlightRegion): {
3430
+ width: number;
3431
+ left: number;
3432
+ } | undefined;
3433
+ /**
3434
+ * #method
3435
+ * scrolls the view to center on the given bp. if that is not in any of
3436
+ * the displayed regions, does nothing
3437
+ *
3438
+ * @param coord - basepair at which you want to center the view
3439
+ * @param refName - refName of the displayedRegion you are centering at
3440
+ * @param displayedRegionIndex - index of the displayedRegion
3441
+ */
3442
+ centerAt(coord: number, refName: string, displayedRegionIndex?: number): void;
3443
+ /**
3444
+ * #method
3445
+ */
3446
+ pxToBp(px: number): import("@jbrowse/core/util/Base1DUtils").PxToBpResult;
3447
+ /**
3448
+ * #getter
3449
+ */
3450
+ readonly centerLineInfo: import("@jbrowse/core/util/Base1DUtils").PxToBpResult | undefined;
3451
+ } & {
3452
+ /**
3453
+ * #action
3454
+ * a region edit from the ruler's menu as one action, which a synteny
3455
+ * stack's follow reads as the reader's gesture on this row; see
3456
+ * `setDisplayedRegionsKeepingCenter`
3457
+ */
3458
+ editDisplayedRegions(edit: RegionEdit): void;
3459
+ } & {
3460
+ /**
3461
+ * #method
3462
+ */
3463
+ rubberbandClickMenuItems(clickOffset: BpOffset): MenuItem[];
3464
+ /**
3465
+ * #method
3466
+ * returns menu items for a highlight context menu. plugins can extend
3467
+ * this via Core-extendPluggableElement to add their own items
3468
+ */
3469
+ highlightMenuItems(_highlight: HighlightType): MenuItem[];
3470
+ } & {
3471
+ flyTo: (centerBp: number, windowWidthBp: number) => void;
3472
+ /**
3473
+ * #action
3474
+ * `centerAt`'s animated twin: the same destination, reached along the
3475
+ * arc instead of jumped to, at the zoom the view is already on.
3476
+ */
3477
+ flyToCenter(coord: number, refName: string, displayedRegionIndex?: number): void;
3478
+ /**
3479
+ * #action
3480
+ * A flight to a linear bp centre at the zoom the view is on, or is
3481
+ * already flying to, widened where that is narrower than `fitWidthBp`.
3482
+ * The current width mid-flight is a point on the arc, so a second
3483
+ * flight read from it would land pulled back.
3484
+ */
3485
+ flyToFit(centerBp: number, fitWidthBp: number): void;
1656
3486
  } & {
1657
3487
  afterCreate(): void;
1658
3488
  afterAttach(): void;
1659
- }, import("@jbrowse/mobx-state-tree")._NotCustomized, {
3489
+ }, import("@jbrowse/mobx-state-tree")._NotCustomized, import("@jbrowse/mobx-state-tree")._NotCustomized>, InitState, "bpPerPx" | "offsetPx" | "showCytobandsSetting">, {
1660
3490
  displayName: string | undefined;
1661
3491
  minimized: boolean;
1662
- highlight: HighlightType[];
1663
- showHighlightChips: boolean;
1664
3492
  id: string;
1665
3493
  type: string;
1666
3494
  windowStartBp: number;
@@ -1671,11 +3499,10 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
1671
3499
  hideHeader: boolean;
1672
3500
  hideHeaderOverview: boolean;
1673
3501
  hideNoTracksActive: boolean;
1674
- trackSelectorType: string;
3502
+ trackSelectorType: "hierarchical";
1675
3503
  showGridlines: boolean;
1676
- labelsVisible: boolean;
1677
3504
  scalebarOnly: boolean;
1678
- init?: InitState | undefined;
3505
+ launch: LaunchInput<InitState> | undefined;
1679
3506
  showCytobands?: false | undefined;
1680
3507
  trackLabels?: string | undefined;
1681
3508
  colorByCDS?: true | undefined;