@jbrowse/plugin-linear-genome-view 5.0.0-beta.15 → 5.0.0-beta.16
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.
|
@@ -612,8 +612,8 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
612
612
|
}, import("@jbrowse/mobx-state-tree")._NotCustomized, import("@jbrowse/mobx-state-tree")._NotCustomized>>) | undefined;
|
|
613
613
|
/**
|
|
614
614
|
* #getter
|
|
615
|
-
*
|
|
616
|
-
* assembly
|
|
615
|
+
* The loading screen's text while `showLoading`, taken from the
|
|
616
|
+
* assembly being waited on; undefined otherwise.
|
|
617
617
|
*/
|
|
618
618
|
readonly loading: import("@jbrowse/core/util/viewStatus").ViewLoading | undefined;
|
|
619
619
|
/**
|
|
@@ -655,12 +655,12 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
655
655
|
* `width`/`staticBlocks` throw by design before the view has been
|
|
656
656
|
* measured and navigated.
|
|
657
657
|
*
|
|
658
|
-
*
|
|
658
|
+
* Use this getter rather than `initialized`.
|
|
659
659
|
* That one answers "have the assembly's regions loaded", which is only
|
|
660
660
|
* the first of two async steps: navigating then populates
|
|
661
661
|
* `displayedRegions`, and in the window between the two `initialized` is
|
|
662
662
|
* already true while there is still nothing on screen. `showLoading`
|
|
663
|
-
* folds in `awaitingInitNavigation`, the getter
|
|
663
|
+
* folds in `awaitingInitNavigation`, the getter for exactly
|
|
664
664
|
* that gap.
|
|
665
665
|
*
|
|
666
666
|
* `error` is the third outcome and is why this is not a bare
|
|
@@ -710,7 +710,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
710
710
|
readonly headerHeight: number;
|
|
711
711
|
/**
|
|
712
712
|
* #method
|
|
713
|
-
* rendered height of a single track,
|
|
713
|
+
* rendered height of a single track, using a fixed height when
|
|
714
714
|
* minimized. Shared by trackHeights and getTrackYOffset so the two can't
|
|
715
715
|
* disagree. Reads `activeDisplay` — the display TrackContainer actually
|
|
716
716
|
* mounts — rather than re-picking `displays[0]`, so the view's height math
|
|
@@ -789,8 +789,8 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
789
789
|
* or 0 for a standalone view, a mode that is off, and a stack that cannot
|
|
790
790
|
* answer yet.
|
|
791
791
|
*
|
|
792
|
-
*
|
|
793
|
-
* function of every row's fit, all of which
|
|
792
|
+
* A getter rather than a volatile the container writes: the number is a
|
|
793
|
+
* function of every row's fit, all of which change on a resize, and a
|
|
794
794
|
* stored copy would be stale by the next layout.
|
|
795
795
|
*/
|
|
796
796
|
readonly sharedFitBpPerPx: number;
|
|
@@ -1033,7 +1033,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
1033
1033
|
/**
|
|
1034
1034
|
* #method
|
|
1035
1035
|
* Helper method for the fetchSequence.
|
|
1036
|
-
*
|
|
1036
|
+
* Returns the regions the user selected with the
|
|
1037
1037
|
* rubberband
|
|
1038
1038
|
*
|
|
1039
1039
|
* @param leftOffset - `object as {start, end, index, offset}`, offset = start
|
|
@@ -1080,15 +1080,15 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
1080
1080
|
* #getter
|
|
1081
1081
|
* an ideogram only reads correctly against an entire chromosome: on a
|
|
1082
1082
|
* sub-region it is a meaningless slice of bands, and the centromere shows
|
|
1083
|
-
* up as a lone half-triangle. The chromosome needs bands
|
|
1084
|
-
*
|
|
1083
|
+
* up as a lone half-triangle. The chromosome also needs bands: a cytoband
|
|
1084
|
+
* file often lists only the main chromosomes, not chrM or the
|
|
1085
1085
|
* unplaced scaffolds
|
|
1086
1086
|
*/
|
|
1087
1087
|
readonly canShowCytobands: boolean;
|
|
1088
1088
|
/**
|
|
1089
1089
|
* #getter
|
|
1090
1090
|
* the `showCytobands` setting gated by whether cytobands can be shown at
|
|
1091
|
-
* all (whole chromosome with bands
|
|
1091
|
+
* all (whole chromosome with bands in the cytoband file) and by the header
|
|
1092
1092
|
* overview they draw in being on, which the SVG export follows too
|
|
1093
1093
|
*/
|
|
1094
1094
|
readonly effectiveShowCytobands: boolean;
|
|
@@ -1141,9 +1141,8 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
1141
1141
|
/**
|
|
1142
1142
|
* #getter
|
|
1143
1143
|
* dynamic blocks represent the exact coordinates of the currently
|
|
1144
|
-
* visible genome regions on the screen.
|
|
1145
|
-
*
|
|
1146
|
-
* represent exactly what is on screen
|
|
1144
|
+
* visible genome regions on the screen. Static blocks can go
|
|
1145
|
+
* offscreen, while dynamic blocks represent exactly what is on screen
|
|
1147
1146
|
*/
|
|
1148
1147
|
readonly dynamicBlocks: BlockSet;
|
|
1149
1148
|
/**
|
|
@@ -1175,12 +1174,10 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
1175
1174
|
* The frame exists because those three are laid out across every
|
|
1176
1175
|
* displayed region rather than across the viewport — it overhangs on
|
|
1177
1176
|
* both sides — so their `x` values are stable under a scroll and only
|
|
1178
|
-
* this number moves. `scalebarRefNameLabels` is the exception
|
|
1179
|
-
* so: its `transform` is already a screen x, because a sticky label's
|
|
1177
|
+
* this number moves. `scalebarRefNameLabels` is the exception: its `transform` is already a screen x, because a sticky label's
|
|
1180
1178
|
* position is a function of the scroll rather than of block geometry.
|
|
1181
1179
|
*
|
|
1182
|
-
* **The subtraction must happen here, in float64
|
|
1183
|
-
* load-bearing part.** `offsetPx` is a whole-genome pixel coordinate —
|
|
1180
|
+
* **The subtraction must happen here, in float64.** `offsetPx` is a whole-genome pixel coordinate —
|
|
1184
1181
|
* hg38 chr1 at base resolution is already past 1e10 — and a length that
|
|
1185
1182
|
* size does not survive the trip through CSS: the transform matrix is
|
|
1186
1183
|
* float32 by the time it reaches the compositor, where consecutive
|
|
@@ -1192,13 +1189,12 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
1192
1189
|
* assemblies at high zoom, which is not where anyone tests. Both
|
|
1193
1190
|
* operands here are large and their difference is bounded by the
|
|
1194
1191
|
* overhang (a block or two), so what reaches CSS is small and exact.
|
|
1195
|
-
*
|
|
1192
|
+
* This applies the GPU side's rule one layer up; see
|
|
1196
1193
|
* `agent-docs/reference/BP_PRECISION.md`.
|
|
1197
1194
|
*
|
|
1198
1195
|
* Published because it is the one piece of coordinate arithmetic a host
|
|
1199
1196
|
* drawing its own chrome would otherwise have to know, and because
|
|
1200
|
-
*
|
|
1201
|
-
* came to disagree about rounding. Round it where the content is text
|
|
1197
|
+
* copies written out at each call site disagree about rounding. Round it where the content is text
|
|
1202
1198
|
* (a fractional offset blurs a label); leave it alone for paths and
|
|
1203
1199
|
* boxes.
|
|
1204
1200
|
*/
|
|
@@ -1241,11 +1237,11 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
1241
1237
|
* sticky, transform, maxWidth, paddingLeft, text}` each. One per run of
|
|
1242
1238
|
* same-refName regions, plus a "sticky" one pinned to the viewport's
|
|
1243
1239
|
* left edge naming the refName under it, so panning into a chromosome
|
|
1244
|
-
* does not scroll
|
|
1240
|
+
* does not scroll the chromosome's name off the screen.
|
|
1245
1241
|
*
|
|
1246
|
-
*
|
|
1247
|
-
* otherwise
|
|
1248
|
-
*
|
|
1242
|
+
* This getter applies three rules that a host drawing region names would
|
|
1243
|
+
* otherwise have to rediscover, and two of them are invisible until the
|
|
1244
|
+
* data is awkward:
|
|
1249
1245
|
*
|
|
1250
1246
|
* - the sticky label rides the rightmost run that has scrolled off the
|
|
1251
1247
|
* left, not the region's first block — that one is gone from
|
|
@@ -1257,7 +1253,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
1257
1253
|
* is fitted to the whole run, and `displayedRegionIndex` /
|
|
1258
1254
|
* `lastDisplayedRegionIndex` bracket what it stands for.
|
|
1259
1255
|
* - a name is drawn whole or not at all, measured against the space its
|
|
1260
|
-
* run leaves. Clipped to
|
|
1256
|
+
* run leaves. Clipped to that space, `chr16` reads as `chr1` —
|
|
1261
1257
|
* a different chromosome rather than a shortened name, which is why
|
|
1262
1258
|
* this is a fit test rather than an ellipsis.
|
|
1263
1259
|
*
|
|
@@ -1277,7 +1273,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
1277
1273
|
* pins to its right edge rather than the viewport's, and the coordinate
|
|
1278
1274
|
* numbers stay out from under it. The SVG export deliberately
|
|
1279
1275
|
* calls `getScalebarRefNameLabels` itself with no prefix rather than
|
|
1280
|
-
* reading this, since it draws
|
|
1276
|
+
* reading this, since it draws the assembly name itself above the ruler.
|
|
1281
1277
|
*/
|
|
1282
1278
|
readonly scalebarRefNameLabels: {
|
|
1283
1279
|
labels: import("./util.ts").ScalebarRefNameLabel[];
|
|
@@ -1289,7 +1285,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
1289
1285
|
* Every span along the row that is not track data, as plain geometry in
|
|
1290
1286
|
* the staticBlocks frame — the same frame as gridlineTicks and
|
|
1291
1287
|
* scalebarLabels, so one `translateX(staticBlocksTranslateX)` places all
|
|
1292
|
-
* three. A host
|
|
1288
|
+
* three. A host that draws the row's chrome itself needs all three kinds:
|
|
1293
1289
|
*
|
|
1294
1290
|
* - `seam`: the 3px bar at a region's right edge. Displayed regions are
|
|
1295
1291
|
* laid out **contiguously** (calculateStaticBlocks emits boundary
|
|
@@ -1304,11 +1300,11 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
1304
1300
|
* but the 24 chromosomes are under a pixel wide), so a host that
|
|
1305
1301
|
* skips them leaves that part of the row empty.
|
|
1306
1302
|
* - `boundary`: past the start of the first region or the end of the
|
|
1307
|
-
* last. Greying it
|
|
1303
|
+
* last. Greying it makes the last region's seam read as the edge of a
|
|
1308
1304
|
* filled area, where it would otherwise look like a line in the
|
|
1309
1305
|
* middle of the track.
|
|
1310
1306
|
*
|
|
1311
|
-
* Elided blocks get no seam even though they
|
|
1307
|
+
* Elided blocks get no seam even though they have the flag: at the
|
|
1312
1308
|
* zoom where regions elide, one bar per region would fill the row solid
|
|
1313
1309
|
* grey.
|
|
1314
1310
|
*
|
|
@@ -1397,7 +1393,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
1397
1393
|
* array of fresh objects on every pan and zoom frame, so a component
|
|
1398
1394
|
* that derived this number itself re-rendered on every frame of every
|
|
1399
1395
|
* gesture — to produce, whenever content fills the track, the unchanged
|
|
1400
|
-
* `trackWidthPx`.
|
|
1396
|
+
* `trackWidthPx`. A component that reads the scalar lets MobX's `===` stop the chain at
|
|
1401
1397
|
* this computed instead. Measured over 20 zoom frames: the wiggle
|
|
1402
1398
|
* family's three body instances fell from 66 renders to 7.
|
|
1403
1399
|
*/
|
|
@@ -1483,17 +1479,16 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
1483
1479
|
* as a navigation that didn't happen, and wiggle's autoscale domain is
|
|
1484
1480
|
* computed over the window the user just left — measured at `[0,200]`
|
|
1485
1481
|
* against a correct `[0,300]` when a 40bp coarse window survived a jump to
|
|
1486
|
-
* 4040bp on screen.
|
|
1487
|
-
* made that reachable: at 600ms the data never landed inside the hole.
|
|
1482
|
+
* 4040bp on screen.
|
|
1488
1483
|
*
|
|
1489
|
-
* **The continuous paths
|
|
1484
|
+
* **The continuous paths do not call this.** The
|
|
1490
1485
|
* spring zoom writes through `zoomTo` per frame and a drag through
|
|
1491
1486
|
* `scrollTo`, so this adds no per-frame work; the settle is idempotent
|
|
1492
1487
|
* (`setCoarseDynamicBlocks` compares block keys), so the debounced
|
|
1493
|
-
* autorun's
|
|
1488
|
+
* autorun's follow-up run costs nothing.
|
|
1494
1489
|
*
|
|
1495
|
-
* Every placer calls it, and `placersSettleCoarseBlocks.test.ts`
|
|
1496
|
-
*
|
|
1490
|
+
* Every placer calls it, and `placersSettleCoarseBlocks.test.ts` enforces
|
|
1491
|
+
* that for the next one: it scans this file for the writes and
|
|
1497
1492
|
* fails on a placer that reaches neither the settle nor its named list of
|
|
1498
1493
|
* continuous paths. Two passes by hand missed four.
|
|
1499
1494
|
*/
|
|
@@ -1519,8 +1514,8 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
1519
1514
|
moveTo(start?: BpOffset, end?: BpOffset): void;
|
|
1520
1515
|
/**
|
|
1521
1516
|
* #action
|
|
1522
|
-
* Place the viewport by
|
|
1523
|
-
*
|
|
1517
|
+
* Place the viewport by `bpPerPx` and `offsetPx`, the pixel pair the view
|
|
1518
|
+
* stored before it stored the window. Prefer `setWindow`: pixels mean nothing without the width they were
|
|
1524
1519
|
* measured at, so a round trip through here is only exact while the width
|
|
1525
1520
|
* holds still. Kept for callers that genuinely have pixels — a wheel
|
|
1526
1521
|
* gesture, a rubberband.
|
|
@@ -1529,7 +1524,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
1529
1524
|
/**
|
|
1530
1525
|
* #action
|
|
1531
1526
|
* Place the viewport by the pair it is actually STORED as: the window's
|
|
1532
|
-
* width and left edge, both in bp.
|
|
1527
|
+
* width and left edge, both in bp. The bp-space counterpart of `setNewView`, and the
|
|
1533
1528
|
* right one for anything that captures a viewport and puts it back later
|
|
1534
1529
|
* (an Undo, a saved location) — those two moments can be a window resize
|
|
1535
1530
|
* apart, and this pair survives one where a pixel pair does not.
|
|
@@ -1551,8 +1546,8 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
1551
1546
|
setWindowFrame(windowWidthBp: number, windowStartBp: number): void;
|
|
1552
1547
|
/**
|
|
1553
1548
|
* #action
|
|
1554
|
-
*
|
|
1555
|
-
* by `displayedRegionIndex`, so a set that outlives the region list has a
|
|
1549
|
+
* Settles the coarse blocks, since this is the worst jump to leave
|
|
1550
|
+
* unsettled: they are keyed by `displayedRegionIndex`, so a set that outlives the region list has a
|
|
1556
1551
|
* consumer reading one contig's data against another's blocks.
|
|
1557
1552
|
*/
|
|
1558
1553
|
setDisplayedRegions(regions: Region[]): void;
|
|
@@ -1787,7 +1782,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
1787
1782
|
/**
|
|
1788
1783
|
* #method
|
|
1789
1784
|
* returns menu items for a highlight context menu. plugins can extend
|
|
1790
|
-
* this via Core-extendPluggableElement to add
|
|
1785
|
+
* this via Core-extendPluggableElement to add items
|
|
1791
1786
|
*/
|
|
1792
1787
|
highlightMenuItems(_highlight: HighlightType): MenuItem[];
|
|
1793
1788
|
} & {
|
|
@@ -2345,8 +2340,8 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
2345
2340
|
}, import("@jbrowse/mobx-state-tree")._NotCustomized, import("@jbrowse/mobx-state-tree")._NotCustomized>>) | undefined;
|
|
2346
2341
|
/**
|
|
2347
2342
|
* #getter
|
|
2348
|
-
*
|
|
2349
|
-
* assembly
|
|
2343
|
+
* The loading screen's text while `showLoading`, taken from the
|
|
2344
|
+
* assembly being waited on; undefined otherwise.
|
|
2350
2345
|
*/
|
|
2351
2346
|
readonly loading: import("@jbrowse/core/util/viewStatus").ViewLoading | undefined;
|
|
2352
2347
|
/**
|
|
@@ -2388,12 +2383,12 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
2388
2383
|
* `width`/`staticBlocks` throw by design before the view has been
|
|
2389
2384
|
* measured and navigated.
|
|
2390
2385
|
*
|
|
2391
|
-
*
|
|
2386
|
+
* Use this getter rather than `initialized`.
|
|
2392
2387
|
* That one answers "have the assembly's regions loaded", which is only
|
|
2393
2388
|
* the first of two async steps: navigating then populates
|
|
2394
2389
|
* `displayedRegions`, and in the window between the two `initialized` is
|
|
2395
2390
|
* already true while there is still nothing on screen. `showLoading`
|
|
2396
|
-
* folds in `awaitingInitNavigation`, the getter
|
|
2391
|
+
* folds in `awaitingInitNavigation`, the getter for exactly
|
|
2397
2392
|
* that gap.
|
|
2398
2393
|
*
|
|
2399
2394
|
* `error` is the third outcome and is why this is not a bare
|
|
@@ -2443,7 +2438,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
2443
2438
|
readonly headerHeight: number;
|
|
2444
2439
|
/**
|
|
2445
2440
|
* #method
|
|
2446
|
-
* rendered height of a single track,
|
|
2441
|
+
* rendered height of a single track, using a fixed height when
|
|
2447
2442
|
* minimized. Shared by trackHeights and getTrackYOffset so the two can't
|
|
2448
2443
|
* disagree. Reads `activeDisplay` — the display TrackContainer actually
|
|
2449
2444
|
* mounts — rather than re-picking `displays[0]`, so the view's height math
|
|
@@ -2522,8 +2517,8 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
2522
2517
|
* or 0 for a standalone view, a mode that is off, and a stack that cannot
|
|
2523
2518
|
* answer yet.
|
|
2524
2519
|
*
|
|
2525
|
-
*
|
|
2526
|
-
* function of every row's fit, all of which
|
|
2520
|
+
* A getter rather than a volatile the container writes: the number is a
|
|
2521
|
+
* function of every row's fit, all of which change on a resize, and a
|
|
2527
2522
|
* stored copy would be stale by the next layout.
|
|
2528
2523
|
*/
|
|
2529
2524
|
readonly sharedFitBpPerPx: number;
|
|
@@ -2766,7 +2761,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
2766
2761
|
/**
|
|
2767
2762
|
* #method
|
|
2768
2763
|
* Helper method for the fetchSequence.
|
|
2769
|
-
*
|
|
2764
|
+
* Returns the regions the user selected with the
|
|
2770
2765
|
* rubberband
|
|
2771
2766
|
*
|
|
2772
2767
|
* @param leftOffset - `object as {start, end, index, offset}`, offset = start
|
|
@@ -2813,15 +2808,15 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
2813
2808
|
* #getter
|
|
2814
2809
|
* an ideogram only reads correctly against an entire chromosome: on a
|
|
2815
2810
|
* sub-region it is a meaningless slice of bands, and the centromere shows
|
|
2816
|
-
* up as a lone half-triangle. The chromosome needs bands
|
|
2817
|
-
*
|
|
2811
|
+
* up as a lone half-triangle. The chromosome also needs bands: a cytoband
|
|
2812
|
+
* file often lists only the main chromosomes, not chrM or the
|
|
2818
2813
|
* unplaced scaffolds
|
|
2819
2814
|
*/
|
|
2820
2815
|
readonly canShowCytobands: boolean;
|
|
2821
2816
|
/**
|
|
2822
2817
|
* #getter
|
|
2823
2818
|
* the `showCytobands` setting gated by whether cytobands can be shown at
|
|
2824
|
-
* all (whole chromosome with bands
|
|
2819
|
+
* all (whole chromosome with bands in the cytoband file) and by the header
|
|
2825
2820
|
* overview they draw in being on, which the SVG export follows too
|
|
2826
2821
|
*/
|
|
2827
2822
|
readonly effectiveShowCytobands: boolean;
|
|
@@ -2874,9 +2869,8 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
2874
2869
|
/**
|
|
2875
2870
|
* #getter
|
|
2876
2871
|
* dynamic blocks represent the exact coordinates of the currently
|
|
2877
|
-
* visible genome regions on the screen.
|
|
2878
|
-
*
|
|
2879
|
-
* represent exactly what is on screen
|
|
2872
|
+
* visible genome regions on the screen. Static blocks can go
|
|
2873
|
+
* offscreen, while dynamic blocks represent exactly what is on screen
|
|
2880
2874
|
*/
|
|
2881
2875
|
readonly dynamicBlocks: BlockSet;
|
|
2882
2876
|
/**
|
|
@@ -2908,12 +2902,10 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
2908
2902
|
* The frame exists because those three are laid out across every
|
|
2909
2903
|
* displayed region rather than across the viewport — it overhangs on
|
|
2910
2904
|
* both sides — so their `x` values are stable under a scroll and only
|
|
2911
|
-
* this number moves. `scalebarRefNameLabels` is the exception
|
|
2912
|
-
* so: its `transform` is already a screen x, because a sticky label's
|
|
2905
|
+
* this number moves. `scalebarRefNameLabels` is the exception: its `transform` is already a screen x, because a sticky label's
|
|
2913
2906
|
* position is a function of the scroll rather than of block geometry.
|
|
2914
2907
|
*
|
|
2915
|
-
* **The subtraction must happen here, in float64
|
|
2916
|
-
* load-bearing part.** `offsetPx` is a whole-genome pixel coordinate —
|
|
2908
|
+
* **The subtraction must happen here, in float64.** `offsetPx` is a whole-genome pixel coordinate —
|
|
2917
2909
|
* hg38 chr1 at base resolution is already past 1e10 — and a length that
|
|
2918
2910
|
* size does not survive the trip through CSS: the transform matrix is
|
|
2919
2911
|
* float32 by the time it reaches the compositor, where consecutive
|
|
@@ -2925,13 +2917,12 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
2925
2917
|
* assemblies at high zoom, which is not where anyone tests. Both
|
|
2926
2918
|
* operands here are large and their difference is bounded by the
|
|
2927
2919
|
* overhang (a block or two), so what reaches CSS is small and exact.
|
|
2928
|
-
*
|
|
2920
|
+
* This applies the GPU side's rule one layer up; see
|
|
2929
2921
|
* `agent-docs/reference/BP_PRECISION.md`.
|
|
2930
2922
|
*
|
|
2931
2923
|
* Published because it is the one piece of coordinate arithmetic a host
|
|
2932
2924
|
* drawing its own chrome would otherwise have to know, and because
|
|
2933
|
-
*
|
|
2934
|
-
* came to disagree about rounding. Round it where the content is text
|
|
2925
|
+
* copies written out at each call site disagree about rounding. Round it where the content is text
|
|
2935
2926
|
* (a fractional offset blurs a label); leave it alone for paths and
|
|
2936
2927
|
* boxes.
|
|
2937
2928
|
*/
|
|
@@ -2974,11 +2965,11 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
2974
2965
|
* sticky, transform, maxWidth, paddingLeft, text}` each. One per run of
|
|
2975
2966
|
* same-refName regions, plus a "sticky" one pinned to the viewport's
|
|
2976
2967
|
* left edge naming the refName under it, so panning into a chromosome
|
|
2977
|
-
* does not scroll
|
|
2968
|
+
* does not scroll the chromosome's name off the screen.
|
|
2978
2969
|
*
|
|
2979
|
-
*
|
|
2980
|
-
* otherwise
|
|
2981
|
-
*
|
|
2970
|
+
* This getter applies three rules that a host drawing region names would
|
|
2971
|
+
* otherwise have to rediscover, and two of them are invisible until the
|
|
2972
|
+
* data is awkward:
|
|
2982
2973
|
*
|
|
2983
2974
|
* - the sticky label rides the rightmost run that has scrolled off the
|
|
2984
2975
|
* left, not the region's first block — that one is gone from
|
|
@@ -2990,7 +2981,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
2990
2981
|
* is fitted to the whole run, and `displayedRegionIndex` /
|
|
2991
2982
|
* `lastDisplayedRegionIndex` bracket what it stands for.
|
|
2992
2983
|
* - a name is drawn whole or not at all, measured against the space its
|
|
2993
|
-
* run leaves. Clipped to
|
|
2984
|
+
* run leaves. Clipped to that space, `chr16` reads as `chr1` —
|
|
2994
2985
|
* a different chromosome rather than a shortened name, which is why
|
|
2995
2986
|
* this is a fit test rather than an ellipsis.
|
|
2996
2987
|
*
|
|
@@ -3010,7 +3001,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
3010
3001
|
* pins to its right edge rather than the viewport's, and the coordinate
|
|
3011
3002
|
* numbers stay out from under it. The SVG export deliberately
|
|
3012
3003
|
* calls `getScalebarRefNameLabels` itself with no prefix rather than
|
|
3013
|
-
* reading this, since it draws
|
|
3004
|
+
* reading this, since it draws the assembly name itself above the ruler.
|
|
3014
3005
|
*/
|
|
3015
3006
|
readonly scalebarRefNameLabels: {
|
|
3016
3007
|
labels: import("./util.ts").ScalebarRefNameLabel[];
|
|
@@ -3022,7 +3013,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
3022
3013
|
* Every span along the row that is not track data, as plain geometry in
|
|
3023
3014
|
* the staticBlocks frame — the same frame as gridlineTicks and
|
|
3024
3015
|
* scalebarLabels, so one `translateX(staticBlocksTranslateX)` places all
|
|
3025
|
-
* three. A host
|
|
3016
|
+
* three. A host that draws the row's chrome itself needs all three kinds:
|
|
3026
3017
|
*
|
|
3027
3018
|
* - `seam`: the 3px bar at a region's right edge. Displayed regions are
|
|
3028
3019
|
* laid out **contiguously** (calculateStaticBlocks emits boundary
|
|
@@ -3037,11 +3028,11 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
3037
3028
|
* but the 24 chromosomes are under a pixel wide), so a host that
|
|
3038
3029
|
* skips them leaves that part of the row empty.
|
|
3039
3030
|
* - `boundary`: past the start of the first region or the end of the
|
|
3040
|
-
* last. Greying it
|
|
3031
|
+
* last. Greying it makes the last region's seam read as the edge of a
|
|
3041
3032
|
* filled area, where it would otherwise look like a line in the
|
|
3042
3033
|
* middle of the track.
|
|
3043
3034
|
*
|
|
3044
|
-
* Elided blocks get no seam even though they
|
|
3035
|
+
* Elided blocks get no seam even though they have the flag: at the
|
|
3045
3036
|
* zoom where regions elide, one bar per region would fill the row solid
|
|
3046
3037
|
* grey.
|
|
3047
3038
|
*
|
|
@@ -3130,7 +3121,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
3130
3121
|
* array of fresh objects on every pan and zoom frame, so a component
|
|
3131
3122
|
* that derived this number itself re-rendered on every frame of every
|
|
3132
3123
|
* gesture — to produce, whenever content fills the track, the unchanged
|
|
3133
|
-
* `trackWidthPx`.
|
|
3124
|
+
* `trackWidthPx`. A component that reads the scalar lets MobX's `===` stop the chain at
|
|
3134
3125
|
* this computed instead. Measured over 20 zoom frames: the wiggle
|
|
3135
3126
|
* family's three body instances fell from 66 renders to 7.
|
|
3136
3127
|
*/
|
|
@@ -3216,17 +3207,16 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
3216
3207
|
* as a navigation that didn't happen, and wiggle's autoscale domain is
|
|
3217
3208
|
* computed over the window the user just left — measured at `[0,200]`
|
|
3218
3209
|
* against a correct `[0,300]` when a 40bp coarse window survived a jump to
|
|
3219
|
-
* 4040bp on screen.
|
|
3220
|
-
* made that reachable: at 600ms the data never landed inside the hole.
|
|
3210
|
+
* 4040bp on screen.
|
|
3221
3211
|
*
|
|
3222
|
-
* **The continuous paths
|
|
3212
|
+
* **The continuous paths do not call this.** The
|
|
3223
3213
|
* spring zoom writes through `zoomTo` per frame and a drag through
|
|
3224
3214
|
* `scrollTo`, so this adds no per-frame work; the settle is idempotent
|
|
3225
3215
|
* (`setCoarseDynamicBlocks` compares block keys), so the debounced
|
|
3226
|
-
* autorun's
|
|
3216
|
+
* autorun's follow-up run costs nothing.
|
|
3227
3217
|
*
|
|
3228
|
-
* Every placer calls it, and `placersSettleCoarseBlocks.test.ts`
|
|
3229
|
-
*
|
|
3218
|
+
* Every placer calls it, and `placersSettleCoarseBlocks.test.ts` enforces
|
|
3219
|
+
* that for the next one: it scans this file for the writes and
|
|
3230
3220
|
* fails on a placer that reaches neither the settle nor its named list of
|
|
3231
3221
|
* continuous paths. Two passes by hand missed four.
|
|
3232
3222
|
*/
|
|
@@ -3252,8 +3242,8 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
3252
3242
|
moveTo(start?: BpOffset, end?: BpOffset): void;
|
|
3253
3243
|
/**
|
|
3254
3244
|
* #action
|
|
3255
|
-
* Place the viewport by
|
|
3256
|
-
*
|
|
3245
|
+
* Place the viewport by `bpPerPx` and `offsetPx`, the pixel pair the view
|
|
3246
|
+
* stored before it stored the window. Prefer `setWindow`: pixels mean nothing without the width they were
|
|
3257
3247
|
* measured at, so a round trip through here is only exact while the width
|
|
3258
3248
|
* holds still. Kept for callers that genuinely have pixels — a wheel
|
|
3259
3249
|
* gesture, a rubberband.
|
|
@@ -3262,7 +3252,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
3262
3252
|
/**
|
|
3263
3253
|
* #action
|
|
3264
3254
|
* Place the viewport by the pair it is actually STORED as: the window's
|
|
3265
|
-
* width and left edge, both in bp.
|
|
3255
|
+
* width and left edge, both in bp. The bp-space counterpart of `setNewView`, and the
|
|
3266
3256
|
* right one for anything that captures a viewport and puts it back later
|
|
3267
3257
|
* (an Undo, a saved location) — those two moments can be a window resize
|
|
3268
3258
|
* apart, and this pair survives one where a pixel pair does not.
|
|
@@ -3284,8 +3274,8 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
3284
3274
|
setWindowFrame(windowWidthBp: number, windowStartBp: number): void;
|
|
3285
3275
|
/**
|
|
3286
3276
|
* #action
|
|
3287
|
-
*
|
|
3288
|
-
* by `displayedRegionIndex`, so a set that outlives the region list has a
|
|
3277
|
+
* Settles the coarse blocks, since this is the worst jump to leave
|
|
3278
|
+
* unsettled: they are keyed by `displayedRegionIndex`, so a set that outlives the region list has a
|
|
3289
3279
|
* consumer reading one contig's data against another's blocks.
|
|
3290
3280
|
*/
|
|
3291
3281
|
setDisplayedRegions(regions: Region[]): void;
|
|
@@ -3520,7 +3510,7 @@ export declare function stateModelFactory(pluginManager: PluginManager): import(
|
|
|
3520
3510
|
/**
|
|
3521
3511
|
* #method
|
|
3522
3512
|
* returns menu items for a highlight context menu. plugins can extend
|
|
3523
|
-
* this via Core-extendPluggableElement to add
|
|
3513
|
+
* this via Core-extendPluggableElement to add items
|
|
3524
3514
|
*/
|
|
3525
3515
|
highlightMenuItems(_highlight: HighlightType): MenuItem[];
|
|
3526
3516
|
} & {
|
|
@@ -192,17 +192,16 @@ export function stateModelFactory(pluginManager) {
|
|
|
192
192
|
/**
|
|
193
193
|
* #property
|
|
194
194
|
* Left edge of the viewport, in linearized bp — the concatenated
|
|
195
|
-
* `displayedRegions` space that `offsetPx` indexes, which
|
|
195
|
+
* `displayedRegions` space that `offsetPx` indexes, which has no
|
|
196
196
|
* inter-region padding, so the two differ only by `bpPerPx`. May be
|
|
197
|
-
* negative
|
|
197
|
+
* negative when the view is scrolled past the left end.
|
|
198
198
|
*
|
|
199
|
-
* The
|
|
200
|
-
*
|
|
201
|
-
*
|
|
202
|
-
*
|
|
203
|
-
* at 500px
|
|
204
|
-
*
|
|
205
|
-
* view disagreed, and only the one that stores intent was right.
|
|
199
|
+
* The view stores the genomic window it frames rather than the pixels
|
|
200
|
+
* that framed it, because pixels mean nothing without the width they
|
|
201
|
+
* were measured at and a snapshot does not include one. A session
|
|
202
|
+
* authored in a 1000px window therefore shows the same region when
|
|
203
|
+
* opened at 500px, as the same location given as a `&loc=` does: both
|
|
204
|
+
* ways to share a view store intent.
|
|
206
205
|
*/
|
|
207
206
|
windowStartBp: types.stripDefault(types.number, 0),
|
|
208
207
|
/**
|
|
@@ -215,14 +214,15 @@ export function stateModelFactory(pluginManager) {
|
|
|
215
214
|
windowWidthBp: types.stripDefault(types.number, 0),
|
|
216
215
|
/**
|
|
217
216
|
* #property
|
|
218
|
-
*
|
|
219
|
-
* was stored
|
|
217
|
+
* Used for migration only, and permanent: share links written before the
|
|
218
|
+
* window was stored contain `bpPerPx`/`offsetPx`, and there are many of
|
|
219
|
+
* them.
|
|
220
220
|
*
|
|
221
|
-
* A snapshot written before the window was stored
|
|
221
|
+
* A snapshot written before the window was stored has `offsetPx` and
|
|
222
222
|
* `bpPerPx` but not the width they were measured at, so the window they
|
|
223
223
|
* framed cannot be recovered. `windowStartBp` can (it is
|
|
224
224
|
* `offsetPx * bpPerPx`, no width needed); the width in bp cannot. This
|
|
225
|
-
*
|
|
225
|
+
* property holds the old `bpPerPx` until the first measure, which adopts it at
|
|
226
226
|
* whatever width arrives — exactly what the old code did — and clears
|
|
227
227
|
* this. So an old link keeps its old behavior rather than being
|
|
228
228
|
* reinterpreted, and everything authored since restores its window.
|
|
@@ -231,9 +231,8 @@ export function stateModelFactory(pluginManager) {
|
|
|
231
231
|
/**
|
|
232
232
|
* #property
|
|
233
233
|
* currently displayed regions, can be a single chromosome, arbitrary
|
|
234
|
-
* subsections, or the entire
|
|
235
|
-
*
|
|
236
|
-
* fragmented
|
|
234
|
+
* subsections, or the entire set of chromosomes in the genome. The entire
|
|
235
|
+
* set is not advised if your assembly is very fragmented
|
|
237
236
|
*/
|
|
238
237
|
displayedRegions: types.stripDefault(types.frozen(), []),
|
|
239
238
|
/**
|
|
@@ -283,11 +282,11 @@ export function stateModelFactory(pluginManager) {
|
|
|
283
282
|
/**
|
|
284
283
|
* #property
|
|
285
284
|
* how to display the track labels, can be "overlapping", "offset", or
|
|
286
|
-
* "hidden", or empty string "" (which
|
|
287
|
-
*
|
|
288
|
-
*
|
|
289
|
-
* https://jbrowse.org/jb2/docs/config/lineargenomeviewconfigschema/
|
|
290
|
-
* how
|
|
285
|
+
* "hidden", or empty string "" (which uses the LinearGenomeViewPlugin
|
|
286
|
+
* config default). The resolved value is the `effectiveTrackLabels`
|
|
287
|
+
* getter. See the LinearGenomeViewPlugin docs at
|
|
288
|
+
* https://jbrowse.org/jb2/docs/config/lineargenomeviewconfigschema/ for
|
|
289
|
+
* how the config is used
|
|
291
290
|
*/
|
|
292
291
|
trackLabels: types.optional(types.string, () => localStorageGetItem('lgv-trackLabels') ?? ''),
|
|
293
292
|
/**
|
|
@@ -659,8 +658,8 @@ export function stateModelFactory(pluginManager) {
|
|
|
659
658
|
},
|
|
660
659
|
/**
|
|
661
660
|
* #getter
|
|
662
|
-
*
|
|
663
|
-
* assembly
|
|
661
|
+
* The loading screen's text while `showLoading`, taken from the
|
|
662
|
+
* assembly being waited on; undefined otherwise.
|
|
664
663
|
*/
|
|
665
664
|
get loading() {
|
|
666
665
|
return viewLoading(this.showLoading, () => this.loadingAssembly);
|
|
@@ -714,12 +713,12 @@ export function stateModelFactory(pluginManager) {
|
|
|
714
713
|
* `width`/`staticBlocks` throw by design before the view has been
|
|
715
714
|
* measured and navigated.
|
|
716
715
|
*
|
|
717
|
-
*
|
|
716
|
+
* Use this getter rather than `initialized`.
|
|
718
717
|
* That one answers "have the assembly's regions loaded", which is only
|
|
719
718
|
* the first of two async steps: navigating then populates
|
|
720
719
|
* `displayedRegions`, and in the window between the two `initialized` is
|
|
721
720
|
* already true while there is still nothing on screen. `showLoading`
|
|
722
|
-
* folds in `awaitingInitNavigation`, the getter
|
|
721
|
+
* folds in `awaitingInitNavigation`, the getter for exactly
|
|
723
722
|
* that gap.
|
|
724
723
|
*
|
|
725
724
|
* `error` is the third outcome and is why this is not a bare
|
|
@@ -796,7 +795,7 @@ export function stateModelFactory(pluginManager) {
|
|
|
796
795
|
},
|
|
797
796
|
/**
|
|
798
797
|
* #method
|
|
799
|
-
* rendered height of a single track,
|
|
798
|
+
* rendered height of a single track, using a fixed height when
|
|
800
799
|
* minimized. Shared by trackHeights and getTrackYOffset so the two can't
|
|
801
800
|
* disagree. Reads `activeDisplay` — the display TrackContainer actually
|
|
802
801
|
* mounts — rather than re-picking `displays[0]`, so the view's height math
|
|
@@ -926,8 +925,8 @@ export function stateModelFactory(pluginManager) {
|
|
|
926
925
|
* or 0 for a standalone view, a mode that is off, and a stack that cannot
|
|
927
926
|
* answer yet.
|
|
928
927
|
*
|
|
929
|
-
*
|
|
930
|
-
* function of every row's fit, all of which
|
|
928
|
+
* A getter rather than a volatile the container writes: the number is a
|
|
929
|
+
* function of every row's fit, all of which change on a resize, and a
|
|
931
930
|
* stored copy would be stale by the next layout.
|
|
932
931
|
*/
|
|
933
932
|
get sharedFitBpPerPx() {
|
|
@@ -1454,7 +1453,7 @@ export function stateModelFactory(pluginManager) {
|
|
|
1454
1453
|
/**
|
|
1455
1454
|
* #method
|
|
1456
1455
|
* Helper method for the fetchSequence.
|
|
1457
|
-
*
|
|
1456
|
+
* Returns the regions the user selected with the
|
|
1458
1457
|
* rubberband
|
|
1459
1458
|
*
|
|
1460
1459
|
* @param leftOffset - `object as {start, end, index, offset}`, offset = start
|
|
@@ -1584,8 +1583,8 @@ export function stateModelFactory(pluginManager) {
|
|
|
1584
1583
|
}
|
|
1585
1584
|
/**
|
|
1586
1585
|
* #action
|
|
1587
|
-
* cancel an in-flight animated zoom.
|
|
1588
|
-
*
|
|
1586
|
+
* cancel an in-flight animated zoom. Any other zoom already stops the
|
|
1587
|
+
* animation, so this is for stopping it *without* changing the
|
|
1589
1588
|
* zoom — the slider grabbing the thumb, before it has a value to commit.
|
|
1590
1589
|
*/
|
|
1591
1590
|
function cancelZoomAnimation() {
|
|
@@ -1613,8 +1612,8 @@ export function stateModelFactory(pluginManager) {
|
|
|
1613
1612
|
* #getter
|
|
1614
1613
|
* an ideogram only reads correctly against an entire chromosome: on a
|
|
1615
1614
|
* sub-region it is a meaningless slice of bands, and the centromere shows
|
|
1616
|
-
* up as a lone half-triangle. The chromosome needs bands
|
|
1617
|
-
*
|
|
1615
|
+
* up as a lone half-triangle. The chromosome also needs bands: a cytoband
|
|
1616
|
+
* file often lists only the main chromosomes, not chrM or the
|
|
1618
1617
|
* unplaced scaffolds
|
|
1619
1618
|
*/
|
|
1620
1619
|
get canShowCytobands() {
|
|
@@ -1626,7 +1625,7 @@ export function stateModelFactory(pluginManager) {
|
|
|
1626
1625
|
/**
|
|
1627
1626
|
* #getter
|
|
1628
1627
|
* the `showCytobands` setting gated by whether cytobands can be shown at
|
|
1629
|
-
* all (whole chromosome with bands
|
|
1628
|
+
* all (whole chromosome with bands in the cytoband file) and by the header
|
|
1630
1629
|
* overview they draw in being on, which the SVG export follows too
|
|
1631
1630
|
*/
|
|
1632
1631
|
get effectiveShowCytobands() {
|
|
@@ -1750,9 +1749,8 @@ export function stateModelFactory(pluginManager) {
|
|
|
1750
1749
|
/**
|
|
1751
1750
|
* #getter
|
|
1752
1751
|
* dynamic blocks represent the exact coordinates of the currently
|
|
1753
|
-
* visible genome regions on the screen.
|
|
1754
|
-
*
|
|
1755
|
-
* represent exactly what is on screen
|
|
1752
|
+
* visible genome regions on the screen. Static blocks can go
|
|
1753
|
+
* offscreen, while dynamic blocks represent exactly what is on screen
|
|
1756
1754
|
*/
|
|
1757
1755
|
get dynamicBlocks() {
|
|
1758
1756
|
return calculateDynamicBlocks(self);
|
|
@@ -1794,12 +1792,10 @@ export function stateModelFactory(pluginManager) {
|
|
|
1794
1792
|
* The frame exists because those three are laid out across every
|
|
1795
1793
|
* displayed region rather than across the viewport — it overhangs on
|
|
1796
1794
|
* both sides — so their `x` values are stable under a scroll and only
|
|
1797
|
-
* this number moves. `scalebarRefNameLabels` is the exception
|
|
1798
|
-
* so: its `transform` is already a screen x, because a sticky label's
|
|
1795
|
+
* this number moves. `scalebarRefNameLabels` is the exception: its `transform` is already a screen x, because a sticky label's
|
|
1799
1796
|
* position is a function of the scroll rather than of block geometry.
|
|
1800
1797
|
*
|
|
1801
|
-
* **The subtraction must happen here, in float64
|
|
1802
|
-
* load-bearing part.** `offsetPx` is a whole-genome pixel coordinate —
|
|
1798
|
+
* **The subtraction must happen here, in float64.** `offsetPx` is a whole-genome pixel coordinate —
|
|
1803
1799
|
* hg38 chr1 at base resolution is already past 1e10 — and a length that
|
|
1804
1800
|
* size does not survive the trip through CSS: the transform matrix is
|
|
1805
1801
|
* float32 by the time it reaches the compositor, where consecutive
|
|
@@ -1811,13 +1807,12 @@ export function stateModelFactory(pluginManager) {
|
|
|
1811
1807
|
* assemblies at high zoom, which is not where anyone tests. Both
|
|
1812
1808
|
* operands here are large and their difference is bounded by the
|
|
1813
1809
|
* overhang (a block or two), so what reaches CSS is small and exact.
|
|
1814
|
-
*
|
|
1810
|
+
* This applies the GPU side's rule one layer up; see
|
|
1815
1811
|
* `agent-docs/reference/BP_PRECISION.md`.
|
|
1816
1812
|
*
|
|
1817
1813
|
* Published because it is the one piece of coordinate arithmetic a host
|
|
1818
1814
|
* drawing its own chrome would otherwise have to know, and because
|
|
1819
|
-
*
|
|
1820
|
-
* came to disagree about rounding. Round it where the content is text
|
|
1815
|
+
* copies written out at each call site disagree about rounding. Round it where the content is text
|
|
1821
1816
|
* (a fractional offset blurs a label); leave it alone for paths and
|
|
1822
1817
|
* boxes.
|
|
1823
1818
|
*/
|
|
@@ -1870,11 +1865,11 @@ export function stateModelFactory(pluginManager) {
|
|
|
1870
1865
|
* sticky, transform, maxWidth, paddingLeft, text}` each. One per run of
|
|
1871
1866
|
* same-refName regions, plus a "sticky" one pinned to the viewport's
|
|
1872
1867
|
* left edge naming the refName under it, so panning into a chromosome
|
|
1873
|
-
* does not scroll
|
|
1868
|
+
* does not scroll the chromosome's name off the screen.
|
|
1874
1869
|
*
|
|
1875
|
-
*
|
|
1876
|
-
* otherwise
|
|
1877
|
-
*
|
|
1870
|
+
* This getter applies three rules that a host drawing region names would
|
|
1871
|
+
* otherwise have to rediscover, and two of them are invisible until the
|
|
1872
|
+
* data is awkward:
|
|
1878
1873
|
*
|
|
1879
1874
|
* - the sticky label rides the rightmost run that has scrolled off the
|
|
1880
1875
|
* left, not the region's first block — that one is gone from
|
|
@@ -1886,7 +1881,7 @@ export function stateModelFactory(pluginManager) {
|
|
|
1886
1881
|
* is fitted to the whole run, and `displayedRegionIndex` /
|
|
1887
1882
|
* `lastDisplayedRegionIndex` bracket what it stands for.
|
|
1888
1883
|
* - a name is drawn whole or not at all, measured against the space its
|
|
1889
|
-
* run leaves. Clipped to
|
|
1884
|
+
* run leaves. Clipped to that space, `chr16` reads as `chr1` —
|
|
1890
1885
|
* a different chromosome rather than a shortened name, which is why
|
|
1891
1886
|
* this is a fit test rather than an ellipsis.
|
|
1892
1887
|
*
|
|
@@ -1906,7 +1901,7 @@ export function stateModelFactory(pluginManager) {
|
|
|
1906
1901
|
* pins to its right edge rather than the viewport's, and the coordinate
|
|
1907
1902
|
* numbers stay out from under it. The SVG export deliberately
|
|
1908
1903
|
* calls `getScalebarRefNameLabels` itself with no prefix rather than
|
|
1909
|
-
* reading this, since it draws
|
|
1904
|
+
* reading this, since it draws the assembly name itself above the ruler.
|
|
1910
1905
|
*/
|
|
1911
1906
|
get scalebarRefNameLabels() {
|
|
1912
1907
|
return getScalebarRefNameLabels({
|
|
@@ -1921,7 +1916,7 @@ export function stateModelFactory(pluginManager) {
|
|
|
1921
1916
|
* Every span along the row that is not track data, as plain geometry in
|
|
1922
1917
|
* the staticBlocks frame — the same frame as gridlineTicks and
|
|
1923
1918
|
* scalebarLabels, so one `translateX(staticBlocksTranslateX)` places all
|
|
1924
|
-
* three. A host
|
|
1919
|
+
* three. A host that draws the row's chrome itself needs all three kinds:
|
|
1925
1920
|
*
|
|
1926
1921
|
* - `seam`: the 3px bar at a region's right edge. Displayed regions are
|
|
1927
1922
|
* laid out **contiguously** (calculateStaticBlocks emits boundary
|
|
@@ -1936,11 +1931,11 @@ export function stateModelFactory(pluginManager) {
|
|
|
1936
1931
|
* but the 24 chromosomes are under a pixel wide), so a host that
|
|
1937
1932
|
* skips them leaves that part of the row empty.
|
|
1938
1933
|
* - `boundary`: past the start of the first region or the end of the
|
|
1939
|
-
* last. Greying it
|
|
1934
|
+
* last. Greying it makes the last region's seam read as the edge of a
|
|
1940
1935
|
* filled area, where it would otherwise look like a line in the
|
|
1941
1936
|
* middle of the track.
|
|
1942
1937
|
*
|
|
1943
|
-
* Elided blocks get no seam even though they
|
|
1938
|
+
* Elided blocks get no seam even though they have the flag: at the
|
|
1944
1939
|
* zoom where regions elide, one bar per region would fill the row solid
|
|
1945
1940
|
* grey.
|
|
1946
1941
|
*
|
|
@@ -2042,7 +2037,7 @@ export function stateModelFactory(pluginManager) {
|
|
|
2042
2037
|
* array of fresh objects on every pan and zoom frame, so a component
|
|
2043
2038
|
* that derived this number itself re-rendered on every frame of every
|
|
2044
2039
|
* gesture — to produce, whenever content fills the track, the unchanged
|
|
2045
|
-
* `trackWidthPx`.
|
|
2040
|
+
* `trackWidthPx`. A component that reads the scalar lets MobX's `===` stop the chain at
|
|
2046
2041
|
* this computed instead. Measured over 20 zoom frames: the wiggle
|
|
2047
2042
|
* family's three body instances fell from 66 renders to 7.
|
|
2048
2043
|
*/
|
|
@@ -2181,17 +2176,16 @@ export function stateModelFactory(pluginManager) {
|
|
|
2181
2176
|
* as a navigation that didn't happen, and wiggle's autoscale domain is
|
|
2182
2177
|
* computed over the window the user just left — measured at `[0,200]`
|
|
2183
2178
|
* against a correct `[0,300]` when a 40bp coarse window survived a jump to
|
|
2184
|
-
* 4040bp on screen.
|
|
2185
|
-
* made that reachable: at 600ms the data never landed inside the hole.
|
|
2179
|
+
* 4040bp on screen.
|
|
2186
2180
|
*
|
|
2187
|
-
* **The continuous paths
|
|
2181
|
+
* **The continuous paths do not call this.** The
|
|
2188
2182
|
* spring zoom writes through `zoomTo` per frame and a drag through
|
|
2189
2183
|
* `scrollTo`, so this adds no per-frame work; the settle is idempotent
|
|
2190
2184
|
* (`setCoarseDynamicBlocks` compares block keys), so the debounced
|
|
2191
|
-
* autorun's
|
|
2185
|
+
* autorun's follow-up run costs nothing.
|
|
2192
2186
|
*
|
|
2193
|
-
* Every placer calls it, and `placersSettleCoarseBlocks.test.ts`
|
|
2194
|
-
*
|
|
2187
|
+
* Every placer calls it, and `placersSettleCoarseBlocks.test.ts` enforces
|
|
2188
|
+
* that for the next one: it scans this file for the writes and
|
|
2195
2189
|
* fails on a placer that reaches neither the settle nor its named list of
|
|
2196
2190
|
* continuous paths. Two passes by hand missed four.
|
|
2197
2191
|
*/
|
|
@@ -2252,8 +2246,8 @@ export function stateModelFactory(pluginManager) {
|
|
|
2252
2246
|
},
|
|
2253
2247
|
/**
|
|
2254
2248
|
* #action
|
|
2255
|
-
* Place the viewport by
|
|
2256
|
-
*
|
|
2249
|
+
* Place the viewport by `bpPerPx` and `offsetPx`, the pixel pair the view
|
|
2250
|
+
* stored before it stored the window. Prefer `setWindow`: pixels mean nothing without the width they were
|
|
2257
2251
|
* measured at, so a round trip through here is only exact while the width
|
|
2258
2252
|
* holds still. Kept for callers that genuinely have pixels — a wheel
|
|
2259
2253
|
* gesture, a rubberband.
|
|
@@ -2266,7 +2260,7 @@ export function stateModelFactory(pluginManager) {
|
|
|
2266
2260
|
/**
|
|
2267
2261
|
* #action
|
|
2268
2262
|
* Place the viewport by the pair it is actually STORED as: the window's
|
|
2269
|
-
* width and left edge, both in bp.
|
|
2263
|
+
* width and left edge, both in bp. The bp-space counterpart of `setNewView`, and the
|
|
2270
2264
|
* right one for anything that captures a viewport and puts it back later
|
|
2271
2265
|
* (an Undo, a saved location) — those two moments can be a window resize
|
|
2272
2266
|
* apart, and this pair survives one where a pixel pair does not.
|
|
@@ -2296,8 +2290,8 @@ export function stateModelFactory(pluginManager) {
|
|
|
2296
2290
|
},
|
|
2297
2291
|
/**
|
|
2298
2292
|
* #action
|
|
2299
|
-
*
|
|
2300
|
-
* by `displayedRegionIndex`, so a set that outlives the region list has a
|
|
2293
|
+
* Settles the coarse blocks, since this is the worst jump to leave
|
|
2294
|
+
* unsettled: they are keyed by `displayedRegionIndex`, so a set that outlives the region list has a
|
|
2301
2295
|
* consumer reading one contig's data against another's blocks.
|
|
2302
2296
|
*/
|
|
2303
2297
|
setDisplayedRegions(regions) {
|
|
@@ -2756,7 +2750,7 @@ export function stateModelFactory(pluginManager) {
|
|
|
2756
2750
|
/**
|
|
2757
2751
|
* #method
|
|
2758
2752
|
* returns menu items for a highlight context menu. plugins can extend
|
|
2759
|
-
* this via Core-extendPluggableElement to add
|
|
2753
|
+
* this via Core-extendPluggableElement to add items
|
|
2760
2754
|
*/
|
|
2761
2755
|
highlightMenuItems(_highlight) {
|
|
2762
2756
|
return [];
|
|
@@ -11,6 +11,7 @@ const READERS = {
|
|
|
11
11
|
adapters: {
|
|
12
12
|
Gff3TabixAdapter: { slot: 'gffGzLocation', ext: /\.gff3?\.gz$/ },
|
|
13
13
|
Gff3Adapter: { slot: 'gffLocation', ext: /\.gff3?$/ },
|
|
14
|
+
GtfTabixAdapter: { slot: 'gtfGzLocation', ext: /\.gtf\.gz$/ },
|
|
14
15
|
GtfAdapter: { slot: 'gtfLocation', ext: /\.gtf$/ },
|
|
15
16
|
BedTabixAdapter: { slot: 'bedGzLocation', ext: /\.bed\.gz$/ },
|
|
16
17
|
BedAdapter: { slot: 'bedLocation', ext: /\.bed$/ },
|
package/esm/index.js
CHANGED
|
@@ -19,7 +19,7 @@ export default class LinearGenomeViewPlugin extends Plugin {
|
|
|
19
19
|
configurationSchema = ConfigurationSchema('LinearGenomeViewConfigSchema', {
|
|
20
20
|
/**
|
|
21
21
|
* #slot configuration.LinearGenomeViewPlugin.trackLabels
|
|
22
|
-
* The placement of a track's name: `offset`
|
|
22
|
+
* The placement of a track's name: `offset` puts it on a line above the
|
|
23
23
|
* data, `overlapping` floats it over the top of the data to save vertical
|
|
24
24
|
* space, `hidden` omits it. The view menu's "Track labels" submenu sets the
|
|
25
25
|
* same thing per session
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jbrowse/plugin-linear-genome-view",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.16",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "JBrowse 2 linear genome view",
|
|
6
6
|
"keywords": [
|
|
@@ -26,10 +26,10 @@
|
|
|
26
26
|
"@mui/material": "^9.5.0",
|
|
27
27
|
"mobx": "^7.0.6",
|
|
28
28
|
"mobx-react": "^10.0.2",
|
|
29
|
-
"@jbrowse/
|
|
30
|
-
"@jbrowse/display-
|
|
31
|
-
"@jbrowse/
|
|
32
|
-
"@jbrowse/render-core": "^5.0.0-beta.
|
|
29
|
+
"@jbrowse/core": "^5.0.0-beta.16",
|
|
30
|
+
"@jbrowse/display-kit": "^5.0.0-beta.16",
|
|
31
|
+
"@jbrowse/display-ui": "^5.0.0-beta.16",
|
|
32
|
+
"@jbrowse/render-core": "^5.0.0-beta.16"
|
|
33
33
|
},
|
|
34
34
|
"peerDependencies": {
|
|
35
35
|
"react": ">=19.0.0",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
},
|
|
41
41
|
"sideEffects": false,
|
|
42
42
|
"devDependencies": {
|
|
43
|
-
"@jbrowse/display-test-utils": "^5.0.0-beta.
|
|
43
|
+
"@jbrowse/display-test-utils": "^5.0.0-beta.16"
|
|
44
44
|
},
|
|
45
45
|
"scripts": {
|
|
46
46
|
"prebuild": "pnpm clean",
|