LinearSyntenyViewHelper
Auto-generated @jbrowse/mobx-state-tree API for the current JBrowse release — see pluggable elements for concepts. Provided by the linear-comparative-view plugin. View source.
Holds one level of a linear synteny comparison: its track list, height and level index, composed with the shared rendering-lifecycle state.
Nested in LinearComparativeView.levels, never in session.views: it is a track
container, not a view, and satisfies core's TrackContainer so the
track-selector and add-track widgets can write into it via the parent view's
trackContainerFor. The LinearSyntenyViewHelper name and type literal are
kept only because saved sessions persist them.
Members a composed model contributes are listed here too, so these tables are the whole surface.
Properties
| Member | Description |
|---|---|
idid: ElementId | |
typetype: 'LinearSyntenyViewHelper' | |
| tracks | |
heightheight: types.stripDefault(types.number, 100) | |
levellevel: types.number |
Volatiles
| Member | Description | Defined by |
|---|---|---|
canvasDrawncanvasDrawn: false | flips true on first paint; read by test selectors to detect render | RenderLifecycleMixin |
currentRenderingBackendcurrentRenderingBackend: undefined | current backend reference, updated on context-loss recovery. Typed unknown (not generic B) on purpose: this mixin is composed by every display via a non-generic factory, so the per-display backend type B isn't known here — it's supplied at attachRenderingBackend<B> and narrowed with as B inside the autoruns. Don't "fix" the cast. | RenderLifecycleMixin |
renderTickrenderTick: 0 | counter the render autorun observes; bumped to force a re-render | RenderLifecycleMixin |
autorunsInstalledautorunsInstalled: false | guards attachRenderingBackend so the autorun pair spawns once per instance | RenderLifecycleMixin |
renderErrorrenderError: undefined | the render-backend (GPU/Canvas2D init or context-loss) error, or undefined. Single source of truth for the render-error terminal state: useRenderingBackend writes it from the canvas-init mechanism so the model — not React-local hook state — owns every terminal state. Read by displayPhase (whose renderError term outranks loading, suppressing the scrim) and by DisplayChrome (shows the retry overlay). | RenderLifecycleMixin |
Getters
| Member | Description | Defined by |
|---|---|---|
gpuRenderingBackendSyntenyRenderingBackend | undefined | Typed accessor for the slot-mixin-owned currentRenderingBackend. All synteny displays within the level upload their geometry to the same backend and render onto one canvas. | LinearSyntenyViewHelper |
parentViewParentViewDuck | LinearSyntenyViewHelper | |
assemblyNamesstring[] | LinearSyntenyViewHelper | |
linearSyntenyDisplaysLinearSyntenyDisplayModel[] | All synteny displays under this level's tracks. | LinearSyntenyViewHelper |
bandTransformKeystring | Every number that moves a ribbon under a stationary cursor — each connected row's offsetPx and bpPerPx, plus the band height — as one key, which installClearHoverOnSurfaceMove watches. Empty until both rows are there, which no viewport can produce. | LinearSyntenyViewHelper |
displayErrorstring | undefined | Every failed track's error in this level, joined into the one value the band has room to report. On-screen only — an SVG export has nowhere to float a banner, so it fails outright from awaitSvgReady. | LinearSyntenyViewHelper |
surfaceReadinessComparativeSurface | This level's band as the displays drawing onto it see it: first paint, plus the parent-view flags that mean what is on screen is not the answer yet. displayPhase and settled are both computed from it. | LinearSyntenyViewHelper |
displayPhaseDisplayStatusPhase | What the shared canvas publishes as data-display-phase: the ranking over the ribbons drawing onto it. settled below is the stricter question — see comparativeReadiness. | LinearSyntenyViewHelper |
settledboolean | The canvas has painted and no display is still fetching, so what is on screen is final. Drives synteny_canvas's data-display-drawn, which screenshot capture and the browser suites wait on — so it means "done", not "first paint". comparativeReadiness says why an error answers this and "is every display finished" differently. | LinearSyntenyViewHelper |
geometryByDisplayKeyMap<number, SyntenyInstanceData> | Per-display GPU geometry keyed by displayKey. The upload autorun diffs this map — new entries upload, vanished entries evict. | LinearSyntenyViewHelper |
syntenyRenderStateSyntenyRenderState | Aggregated per-frame render state, always resolved — "the view isn't measured yet" is canRender's precondition. An empty perTrack is a real frame rather than a skip: the backend clears before drawing, so painting zero tracks is what drops a hidden track's ribbons. | LinearSyntenyViewHelper |
groundColorstring | The band's ground — see bandGroundColor, which is the decision. Read here so the level's clear, its ribbons, its off-screen-mate strip and its SVG export all take it from one place. | LinearSyntenyViewHelper |
hoveringFeatureboolean | The pointer is over a ribbon somewhere in this band. Drives the canvas cursor, which is the only thing that says a ribbon can be clicked at all — the hover shading is subtle at the default 0.2 opacity. | LinearSyntenyViewHelper |
canRenderboolean | Render-lifecycle precondition, overriding RenderLifecycleMixin's default-true hook: the render callback sizes the canvas off parentView.width, which throws by design before the view is measured. | LinearSyntenyViewHelper |
rendersCanvasboolean | Overridable hook (default true): whether this display paints a canvas in its current configuration, as opposed to a deliberate static placeholder (LD with the triangle off, sequence past base resolution — both render a message where the <canvas> would go, so canvasRef is never called and canvasDrawn can never flip).Lives here, beside canvasDrawn, because every consumer of "has this display painted" needs the pair — and until 2026-08 each family declared its own copy (per-region hard-coded true, global carried the hook for LD), so a display could express the state only to whichever family it happened to compose. See painted below for the reader that was missed. | RenderLifecycleMixin |
paintInertboolean | Overridable hook (default false): the display has reached a state it will not paint its way out of, so painted below should answer finished rather than pending. Both LGV fetch families fill it with !!error — a fetch that failed before first paint keeps its canvas mounted, since the error bar is an overlay rather than a subtree replacement, so nothing ever draws into it. Named for fetchInert on the comparative side.A hook rather than a read of error here, for two reasons that both bite: this package is a leaf and error belongs to the fetch mixins, and declaring that name here would collide with FetchMixin's volatile — types.compose gives the collision to its later argument, and the two families compose the two mixins in opposite orders. | RenderLifecycleMixin |
paintedboolean | The first-paint answer every consumer outside the display should read, canvasDrawn being only the raw flag: a display that is deliberately not painting a canvas has finished, and saying otherwise is a lie that never resolves.The two rendersCanvas: false states each had three of their four consumers wired by hand — the loading scrim (rendersCanvas / fetchInert) and the SVG export (fetchInert) — while the fourth, data-display-drawn, went on publishing "false" forever off the raw flag. That attribute is what PENDING_DISPLAYS (@jbrowse/browser-test-utils) selects on, so a zoomed-out reference sequence track made every waitForDisplaysDone on the page burn its full timeout — silently, since that wait swallows its own. Same shape as fetchInert on the comparative side: the reader you forget is the one outside the display, so the display has to publish one name for it.paintInert is the third term and the same argument once more, for the state where a display would paint a canvas and never gets to — a fetch that failed before first paint. See that hook. | RenderLifecycleMixin |
Methods
| Member | Description |
|---|---|
displayFor(key: number) => LinearSyntenyDisplayModel | undefined | The display a pick hit belongs to. |
Actions
| Member | Description | Defined by |
|---|---|---|
setHeight(n: number) => void | LinearSyntenyViewHelper | |
resizeHeight(distance: number) => void | Drag this band taller or shorter, clamped like every other band drag: the floor keeps the bar itself grabbable, and a band already thinner than the floor stays where it is rather than jumping up to it. The stack-wide drag (resizeAllLevelHeights) is this, per level, so the clamp is stated once. | LinearSyntenyViewHelper |
| showTrack | LinearSyntenyViewHelper | |
hideTrack(trackId: string) => boolean | LinearSyntenyViewHelper | |
toggleTrack(trackId: string) => boolean | LinearSyntenyViewHelper | |
| setHoveredFeature | LinearSyntenyViewHelper | |
| setClickedFeature | Clicked-state twin of setHoveredFeature. | LinearSyntenyViewHelper |
| showOffscreenMateContig | Show the contig an off-screen mate mark points at, on the row that is not displaying it — what clicking a mark does.row rather than level + 1: a level has a strip on each edge, so a mark on the query axis names a contig the row BELOW is not showing and one on the target axis names a contig the row ABOVE is not. The caller resolved which strip it hit. mate carries the mark's two coordinates as one argument, so they cannot come apart from each other or from the class they decide; omitted means the whole contig.A contig the row has is scrolled to and one it does not is added to its regions — neither discards what the row was showing. The click takes the follow anchor too, and the Undo gives back the anchor and every row's viewport together. agent-docs/ideas/offscreen-synteny-mates.md is the case for all of it. | LinearSyntenyViewHelper |
startRenderingBackend(backend: SyntenyRenderingBackend) => void | LinearSyntenyViewHelper | |
markCanvasDrawn() => void | RenderLifecycleMixin | |
resetCanvasDrawn() => void | RenderLifecycleMixin | |
stopRenderingBackend() => void | RenderLifecycleMixin | |
renderNow() => void | RenderLifecycleMixin | |
setRenderError(error: unknown) => void | set/clear the render-backend error. Called by useRenderingBackend: with the error when the canvas factory rejects (or context-loss re-init fails), and with undefined on successful (re)init and on retry. | RenderLifecycleMixin |
| attachRenderingBackend | attach a GPU/Canvas2D backend and install the upload + render autorun pair. Idempotent: re-calling swaps the backend and does not run setup again, so the callbacks and everything they close over are the first call's. | RenderLifecycleMixin |