@jbrowse/core 5.0.0-beta.3 → 5.0.0-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +278 -250
- package/esm/PluginManager.js +1 -1
- package/esm/ReExports/publicUi.d.ts +1 -1
- package/esm/ReExports/publicUi.js +1 -1
- package/esm/ReExports/publicUtil.d.ts +1 -1
- package/esm/ReExports/publicUtil.js +1 -1
- package/esm/ReExports/workerNamespaceNames.js +3 -9
- package/esm/assemblyManager/assemblyConfigSchema.d.ts +2 -1
- package/esm/assemblyManager/assemblyConfigSchema.js +2 -1
- package/esm/assemblyManager/expandAssemblyConfigShorthand.d.ts +15 -15
- package/esm/assemblyManager/expandAssemblyConfigShorthand.js +34 -18
- package/esm/configuration/configurationSchema.d.ts +1 -2
- package/esm/configuration/configurationSchema.js +3 -8
- package/esm/configuration/configurationSlot.d.ts +0 -47
- package/esm/configuration/configurationSlot.js +4 -54
- package/esm/configuration/fillLocations.d.ts +14 -0
- package/esm/configuration/fillLocations.js +14 -0
- package/esm/configuration/fullConfSnapshot.d.ts +0 -15
- package/esm/configuration/fullConfSnapshot.js +0 -28
- package/esm/configuration/getConf.d.ts +4 -34
- package/esm/configuration/getConf.js +3 -38
- package/esm/configuration/index.d.ts +3 -4
- package/esm/configuration/index.js +3 -2
- package/esm/configuration/schemaRegistry.d.ts +1 -2
- package/esm/configuration/schemaRegistry.js +1 -2
- package/esm/configuration/slotFacade.d.ts +1 -16
- package/esm/configuration/slotFacade.js +1 -2
- package/esm/configuration/tabixShorthand.js +3 -3
- package/esm/configuration/types.d.ts +4 -16
- package/esm/data_adapters/CytobandAdapter/configSchema.js +3 -4
- package/esm/pluggableElementTypes/DisplayType.d.ts +5 -3
- package/esm/pluggableElementTypes/DisplayType.js +3 -1
- package/esm/pluggableElementTypes/models/BaseTrackModel.d.ts +30 -0
- package/esm/pluggableElementTypes/models/BaseTrackModel.js +45 -17
- package/esm/rpc/RpcRegistry.d.ts +7 -1
- package/esm/rpc/coreRpcMethods.d.ts +1 -0
- package/esm/rpc/coreRpcMethods.js +1 -0
- package/esm/rpc/methods/CoreEncodeFeatures.d.ts +15 -0
- package/esm/rpc/methods/CoreEncodeFeatures.js +62 -0
- package/esm/svg/svgId.d.ts +1 -1
- package/esm/svg/svgId.js +1 -1
- package/esm/ui/LegendSwatchGlyph.js +26 -21
- package/esm/ui/MenuTypes.d.ts +5 -52
- package/esm/ui/SizeSliderRow.d.ts +1 -3
- package/esm/ui/SizeSliderRow.js +4 -6
- package/esm/ui/SvgColorLegend.d.ts +9 -3
- package/esm/ui/SvgColorLegend.js +74 -33
- package/esm/ui/colorScale.d.ts +64 -0
- package/esm/ui/colorScale.js +41 -0
- package/esm/ui/colors.d.ts +11 -0
- package/esm/ui/colors.js +7 -0
- package/esm/ui/index.d.ts +5 -7
- package/esm/ui/index.js +3 -13
- package/esm/ui/legendMenuItem.d.ts +5 -16
- package/esm/ui/legendMenuItem.js +3 -14
- package/esm/ui/legendSpec.d.ts +11 -5
- package/esm/ui/legendSpec.js +8 -11
- package/esm/ui/makeSizeMenu.d.ts +0 -6
- package/esm/ui/makeSizeMenu.js +6 -30
- package/esm/ui/measureLegendText.js +1 -1
- package/esm/ui/menuItemAdornment.d.ts +9 -19
- package/esm/ui/menuItemAdornment.js +10 -31
- package/esm/ui/menuItems.d.ts +2 -6
- package/esm/ui/menuItems.js +0 -4
- package/esm/ui/palette.js +2 -1
- package/esm/ui/toggleMenuItems.d.ts +6 -13
- package/esm/ui/toggleMenuItems.js +13 -29
- package/esm/util/colorRamp.d.ts +3 -3
- package/esm/util/colorRamp.js +2 -2
- package/esm/util/featureTransforms.d.ts +15 -0
- package/esm/util/featureTransforms.js +342 -0
- package/esm/util/freezeDeep.d.ts +8 -10
- package/esm/util/freezeDeep.js +8 -10
- package/esm/util/glyphNames.d.ts +8 -0
- package/esm/util/glyphNames.js +12 -0
- package/esm/util/index.d.ts +0 -1
- package/esm/util/index.js +0 -1
- package/esm/util/markEncoding.d.ts +76 -0
- package/esm/util/markEncoding.js +436 -0
- package/esm/util/markEncodingTypes.d.ts +331 -0
- package/esm/util/markEncodingTypes.js +8 -0
- package/esm/util/renderToStaticMarkup.js +1 -1
- package/esm/util/starFusion.d.ts +26 -0
- package/esm/util/starFusion.js +37 -0
- package/esm/util/trackConfigDelta.d.ts +4 -8
- package/esm/util/trackConfigDelta.js +2 -4
- package/esm/util/tracks.d.ts +7 -1
- package/esm/util/tracks.js +72 -7
- package/esm/util/types/index.d.ts +12 -4
- package/esm/util/whenViewSettled.d.ts +40 -6
- package/esm/util/whenViewSettled.js +41 -5
- package/package.json +13 -3
- package/esm/configuration/promotableDefaults.d.ts +0 -234
- package/esm/configuration/promotableDefaults.js +0 -395
- package/esm/configuration/promotablePin.d.ts +0 -65
- package/esm/configuration/promotablePin.js +0 -1
- package/esm/configuration/promotableResolve.d.ts +0 -108
- package/esm/configuration/promotableResolve.js +0 -117
- package/esm/configuration/promotableSlots.d.ts +0 -12
- package/esm/configuration/promotableSlots.js +0 -45
- package/esm/configuration/slotShape.d.ts +0 -12
- package/esm/configuration/slotShape.js +0 -84
- package/esm/ui/PinAdornment.d.ts +0 -5
- package/esm/ui/PinAdornment.js +0 -67
- package/esm/ui/SvgGradientLegend.d.ts +0 -26
- package/esm/ui/SvgGradientLegend.js +0 -26
- package/esm/ui/promotablePinCoverage.d.ts +0 -58
- package/esm/ui/promotablePinCoverage.js +0 -124
- package/esm/util/openDisplays.d.ts +0 -23
- package/esm/util/openDisplays.js +0 -79
package/README.md
CHANGED
|
@@ -25,6 +25,22 @@ Apache-2.0 © Evolutionary Software Foundation
|
|
|
25
25
|
|
|
26
26
|
Auto-generated from `#api` JSDoc tags in this package. Do not edit by hand.
|
|
27
27
|
|
|
28
|
+
### AggregateOp
|
|
29
|
+
|
|
30
|
+
One summary over a group: `count` needs no field; `sum`, `mean`, `min` and `max`
|
|
31
|
+
read one, skipping values that are not numbers. The output field is `as`, else
|
|
32
|
+
`count` or `<op>_<field>`.
|
|
33
|
+
|
|
34
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/markEncodingTypes.ts)
|
|
35
|
+
|
|
36
|
+
### AggregateStep
|
|
37
|
+
|
|
38
|
+
One feature per distinct `groupby` value set (one for the whole region with
|
|
39
|
+
none), spanning its members' extent, carrying the group's fields and every `ops`
|
|
40
|
+
entry.
|
|
41
|
+
|
|
42
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/markEncodingTypes.ts)
|
|
43
|
+
|
|
28
44
|
### Band
|
|
29
45
|
|
|
30
46
|
One band of a display's vertical stack — a coverage histogram, an arc strip, a
|
|
@@ -37,6 +53,15 @@ historically drifted.
|
|
|
37
53
|
|
|
38
54
|
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/bandLayout.ts)
|
|
39
55
|
|
|
56
|
+
### BinStep
|
|
57
|
+
|
|
58
|
+
Snap every feature to the genome-aligned bin of `step` bp its `field` (`start`
|
|
59
|
+
by default) falls in, writing the bin's edges over the fields `as` names —
|
|
60
|
+
`start` and `end` by default, so an `aggregate` grouped by those counts per bin
|
|
61
|
+
and the bar spans the bin.
|
|
62
|
+
|
|
63
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/markEncodingTypes.ts)
|
|
64
|
+
|
|
40
65
|
### boundBandHeight
|
|
41
66
|
|
|
42
67
|
Bound a band height to its legal range — a config value, a menu choice, or a
|
|
@@ -113,6 +138,26 @@ refName at all before this is the right question to ask of it.
|
|
|
113
138
|
|
|
114
139
|
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/mstUtils.ts)
|
|
115
140
|
|
|
141
|
+
### CategoricalRef
|
|
142
|
+
|
|
143
|
+
A field bound to a categorical scale: each distinct value takes one entry of the
|
|
144
|
+
channel's range — a palette entry for `color`, a glyph name for `glyph`. With a
|
|
145
|
+
`domain`, the listed values take the range in that order and whatever else the
|
|
146
|
+
region meets follows, sorted; without one each value derives its entry from
|
|
147
|
+
itself (an integer takes the slot it names, anything else hashes in), so every
|
|
148
|
+
region agrees on a value it shares with another at the cost of an occasional
|
|
149
|
+
collision, and `domain` is the way to spend the range deliberately.
|
|
150
|
+
|
|
151
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/markEncodingTypes.ts)
|
|
152
|
+
|
|
153
|
+
### ChannelReader
|
|
154
|
+
|
|
155
|
+
A channel read per feature: the compiled form of a FieldRef, and what a
|
|
156
|
+
display's own worker method hands the encoder for a channel no field name can
|
|
157
|
+
say — a join against a second adapter, a lookup table, a rule over two fields.
|
|
158
|
+
|
|
159
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/markEncoding.ts)
|
|
160
|
+
|
|
116
161
|
### clampBandHeight
|
|
117
162
|
|
|
118
163
|
Clamp one _resize_ of a drag-resizable band: boundBandHeight, plus the one rule
|
|
@@ -140,27 +185,136 @@ lands before React re-renders.
|
|
|
140
185
|
|
|
141
186
|
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/bandHeight.ts)
|
|
142
187
|
|
|
143
|
-
###
|
|
188
|
+
### ColorEncoding
|
|
189
|
+
|
|
190
|
+
How a mark's `color` channel resolves. A CSS colour or a `jexl:` expression
|
|
191
|
+
returning one paints per feature with no scale; the two object forms bind a
|
|
192
|
+
field to a scale, which is what a legend can describe. A continuous scale reads
|
|
193
|
+
the field through `domain` (the region's own extremes when absent) into `ramp`,
|
|
194
|
+
and there a listed `domain` is what pins the answer across a whole view.
|
|
195
|
+
|
|
196
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/markEncodingTypes.ts)
|
|
197
|
+
|
|
198
|
+
### colorEvaluator
|
|
199
|
+
|
|
200
|
+
A CSS colour or `jexl:` colour expression as a per-feature packed ABGR — the
|
|
201
|
+
unscaled arm of ColorEncoding, on its own for a display that carries a plain
|
|
202
|
+
`color` slot.
|
|
203
|
+
|
|
204
|
+
```js
|
|
205
|
+
// type signature
|
|
206
|
+
(color: string, jexl: JexlInstance | undefined) => (feature: Feature) => number
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/markEncoding.ts)
|
|
210
|
+
|
|
211
|
+
### ColorScaleTable
|
|
212
|
+
|
|
213
|
+
The scale a colour channel was resolved through, as the legend reads it — the
|
|
214
|
+
same table the colours in the payload came from, so the key cannot disagree with
|
|
215
|
+
the painting.
|
|
216
|
+
|
|
217
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/markEncodingTypes.ts)
|
|
218
|
+
|
|
219
|
+
### CoverageStep
|
|
220
|
+
|
|
221
|
+
Replace the features with runs of constant depth: how many of them overlap each
|
|
222
|
+
stretch of the region, in a field `as` (`coverage` by default), with the
|
|
223
|
+
stretches nothing overlaps left out.
|
|
224
|
+
|
|
225
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/markEncodingTypes.ts)
|
|
226
|
+
|
|
227
|
+
### EncodeContext
|
|
228
|
+
|
|
229
|
+
What surrounds an encode: the jexl instance a `jexl:` channel compiles against —
|
|
230
|
+
a caller whose channels are all readers or field names passes none — and a
|
|
231
|
+
progress reporter.
|
|
232
|
+
|
|
233
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/markEncoding.ts)
|
|
234
|
+
|
|
235
|
+
### Encoded
|
|
144
236
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
default" action, which passes the slots it actually listed
|
|
148
|
-
(`getDisplayTypeDefaultChanges`).
|
|
237
|
+
EncodedChannels with the lanes in `L` present — what `encodeFeatures` answers a
|
|
238
|
+
caller that named them.
|
|
149
239
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
240
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/markEncodingTypes.ts)
|
|
241
|
+
|
|
242
|
+
### EncodedChannels
|
|
243
|
+
|
|
244
|
+
One encoding's channels over one region's features, dense and index-aligned:
|
|
245
|
+
instance `i` of every array is the same feature, and `featureIndex[i]` says
|
|
246
|
+
which one of the input list it was. A lane is present when the caller asked for
|
|
247
|
+
it (LaneName); Encoded is this type with a known lane set required.
|
|
248
|
+
|
|
249
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/markEncodingTypes.ts)
|
|
250
|
+
|
|
251
|
+
### encodedChannelTransferables
|
|
252
|
+
|
|
253
|
+
The buffers an EncodedChannels owns, for `rpcResult`'s transfer list.
|
|
157
254
|
|
|
158
255
|
```js
|
|
159
256
|
// type signature
|
|
160
|
-
(
|
|
257
|
+
(c: EncodedChannels) => ArrayBufferLike[]
|
|
161
258
|
```
|
|
162
259
|
|
|
163
|
-
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/
|
|
260
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/markEncoding.ts)
|
|
261
|
+
|
|
262
|
+
### EncodedFeaturesResult
|
|
263
|
+
|
|
264
|
+
What `CoreEncodeFeatures` answers for one region: `layers[i]` is the request's
|
|
265
|
+
`layers[i]` over the region's features, so a display's mark list indexes
|
|
266
|
+
straight into it.
|
|
267
|
+
|
|
268
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/markEncodingTypes.ts)
|
|
269
|
+
|
|
270
|
+
### encodeFeatures
|
|
271
|
+
|
|
272
|
+
Evaluate one encoding over a feature list into dense channel arrays for the
|
|
273
|
+
lanes named, the scale table each scaled channel came from, the `y` extremes and
|
|
274
|
+
— when `index` is among the lanes — a hit index.
|
|
275
|
+
|
|
276
|
+
A feature whose `x`, `x2` or (declared and asked-for) `y` is not finite is
|
|
277
|
+
skipped and counted in `skipped`, so every array stays index-aligned with the
|
|
278
|
+
Flatbush. Pure: the RPC around it owns the adapter, the filters and the
|
|
279
|
+
transferables.
|
|
280
|
+
|
|
281
|
+
```js
|
|
282
|
+
// type signature
|
|
283
|
+
<L extends LaneName>(features: readonly Feature[], encoding: MarkEncodingInput, lanes: readonly L[], ctx?: EncodeContext) => Encoded<L>
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/markEncoding.ts)
|
|
287
|
+
|
|
288
|
+
### FieldRef
|
|
289
|
+
|
|
290
|
+
Where a channel's value comes from: a feature field name, read natively
|
|
291
|
+
(`feature.get(name)`), or a `jexl:` expression over `feature` — the opt-in
|
|
292
|
+
escape, three orders of magnitude slower per feature.
|
|
293
|
+
|
|
294
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/markEncodingTypes.ts)
|
|
295
|
+
|
|
296
|
+
### FilterStep
|
|
297
|
+
|
|
298
|
+
Keep the features a `jexl:` expression over `feature` admits.
|
|
299
|
+
|
|
300
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/markEncodingTypes.ts)
|
|
301
|
+
|
|
302
|
+
### FlattenStep
|
|
303
|
+
|
|
304
|
+
Fan each feature out into one feature per element of an array-valued field —
|
|
305
|
+
`subfeatures`, so a gene answers its transcripts and a transcript its exons.
|
|
306
|
+
Each answer reads the element's own fields first and the feature it came from
|
|
307
|
+
for everything else, so an exon still knows its gene's name and strand. A
|
|
308
|
+
feature whose field holds no array drops out unless `keepEmpty` says otherwise.
|
|
309
|
+
|
|
310
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/markEncodingTypes.ts)
|
|
311
|
+
|
|
312
|
+
### FormulaStep
|
|
313
|
+
|
|
314
|
+
Write a `jexl:` expression's value over `feature` into the field `as` of every
|
|
315
|
+
feature.
|
|
316
|
+
|
|
317
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/markEncodingTypes.ts)
|
|
164
318
|
|
|
165
319
|
### getAssemblyHost
|
|
166
320
|
|
|
@@ -191,12 +345,6 @@ check, so reaching for the other one does not get a typo past tsc. It does not
|
|
|
191
345
|
consult the session and has no per-slot behavior; what you read is what the
|
|
192
346
|
track stores.
|
|
193
347
|
|
|
194
|
-
A `promotable` slot read this way therefore yields the raw stored value,
|
|
195
|
-
`undefined` included — that `undefined` is the cascade's inherit sentinel, and
|
|
196
|
-
`resolveConf` is what turns it into a real value. The read type keeps the
|
|
197
|
-
`undefined` on purpose, so reaching for the wrong reader is a compile error
|
|
198
|
-
rather than a silent one.
|
|
199
|
-
|
|
200
348
|
```js
|
|
201
349
|
// type signature
|
|
202
350
|
{ (model: {…}): ModelSnapshotType<…>; <…>(model: {…}, slotPath: SLOT, args?: Record<…> | undefined): SLOT extends string ? ConfigurationSlotValue<…> : any; }
|
|
@@ -204,30 +352,6 @@ rather than a silent one.
|
|
|
204
352
|
|
|
205
353
|
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/configuration/getConf.ts)
|
|
206
354
|
|
|
207
|
-
### getConfigSnapshotWithPromotables
|
|
208
|
-
|
|
209
|
-
The display's full config snapshot with every `promotable` slot overwritten by
|
|
210
|
-
its resolved value in place. For building a worker payload: a promotable slot
|
|
211
|
-
serializes as its raw inherit sentinel (`undefined`, since they're all `maybe*`
|
|
212
|
-
types), which the worker can't interpret — it has no session to resolve against.
|
|
213
|
-
This hands it concrete values instead, with no per-slot bookkeeping, so adding a
|
|
214
|
-
promotable worker-consumed slot needs no rpcProps change and can't silently ship
|
|
215
|
-
a sentinel. Main-thread only (the cascade consults the session). Display-only
|
|
216
|
-
promotable slots the worker never reads (e.g. displayMode) are still excluded by
|
|
217
|
-
the caller — resolving them here is a harmless no-op since they're dropped
|
|
218
|
-
anyway.
|
|
219
|
-
|
|
220
|
-
The return type is branded (`ResolvedConfigSnapshot`) so a payload builder can
|
|
221
|
-
demand a snapshot that has been through here. The assertion below is the one
|
|
222
|
-
place the brand is applied, and it sits on the line after the resolve.
|
|
223
|
-
|
|
224
|
-
```js
|
|
225
|
-
// type signature
|
|
226
|
-
(self: ResolvableDisplay) => ResolvedConfigSnapshot
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/configuration/promotableDefaults.ts)
|
|
230
|
-
|
|
231
355
|
### getContainingDisplay
|
|
232
356
|
|
|
233
357
|
Returns the display model that contains the given node. Throws if the node has
|
|
@@ -275,19 +399,6 @@ Where a display puts a dialog it cannot mount itself.
|
|
|
275
399
|
|
|
276
400
|
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/sessionServices.ts)
|
|
277
401
|
|
|
278
|
-
### getDisplayTypeDefaultChanges
|
|
279
|
-
|
|
280
|
-
Effective differences a track following the default inherits from session-wide
|
|
281
|
-
defaults, one per promotable slot whose inherited value differs from its schema
|
|
282
|
-
default. Drives the track-selector "affected by a session default" badge.
|
|
283
|
-
|
|
284
|
-
```js
|
|
285
|
-
// type signature
|
|
286
|
-
(self: ResolvableDisplay) => TrackConfigChange[]
|
|
287
|
-
```
|
|
288
|
-
|
|
289
|
-
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/configuration/promotableDefaults.ts)
|
|
290
|
-
|
|
291
402
|
### getEnv
|
|
292
403
|
|
|
293
404
|
Returns the MST environment for a node, which carries the `pluginManager`.
|
|
@@ -369,16 +480,31 @@ module actually uses.
|
|
|
369
480
|
|
|
370
481
|
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/sessionServices.ts)
|
|
371
482
|
|
|
372
|
-
###
|
|
483
|
+
### GLYPH_CODES
|
|
373
484
|
|
|
374
|
-
|
|
485
|
+
The `point` shape's glyph code for each name an encoding can say.
|
|
375
486
|
|
|
376
487
|
```js
|
|
377
488
|
// type signature
|
|
378
|
-
|
|
489
|
+
Record<GlyphName, number>
|
|
379
490
|
```
|
|
380
491
|
|
|
381
|
-
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/
|
|
492
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/glyphNames.ts)
|
|
493
|
+
|
|
494
|
+
### GlyphEncoding
|
|
495
|
+
|
|
496
|
+
A GlyphName, a `jexl:` expression over `feature` returning one, or a field bound
|
|
497
|
+
to a categorical scale whose `range` lists the glyph names handed out — the
|
|
498
|
+
three glyphs, in order, when absent.
|
|
499
|
+
|
|
500
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/markEncodingTypes.ts)
|
|
501
|
+
|
|
502
|
+
### GlyphScaleTable
|
|
503
|
+
|
|
504
|
+
The scale a glyph channel was resolved through: which glyph each value of the
|
|
505
|
+
field took.
|
|
506
|
+
|
|
507
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/markEncodingTypes.ts)
|
|
382
508
|
|
|
383
509
|
### hydrateTrackConfig
|
|
384
510
|
|
|
@@ -387,7 +513,7 @@ to find the schema. `session.tracks` holds `types.frozen` plain objects until
|
|
|
387
513
|
something references a track (ADR-031), so a caller handed one of those has a
|
|
388
514
|
config that reads nothing but what was literally authored: a slot at its schema
|
|
389
515
|
default is absent, `preProcessSnapshot` has not run, and nothing that walks a
|
|
390
|
-
live node
|
|
516
|
+
live node applies to it.
|
|
391
517
|
|
|
392
518
|
For the callers that need the resolved answer rather than the authored one and
|
|
393
519
|
cannot know which of the two they were handed. The About dialog's "Copy config"
|
|
@@ -414,25 +540,15 @@ needs; `CopyConfigEntryPoints.test.ts` pins both halves.
|
|
|
414
540
|
|
|
415
541
|
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/configuration/configurationSchema.ts)
|
|
416
542
|
|
|
417
|
-
###
|
|
418
|
-
|
|
419
|
-
Whether this track has customized the slot (holds a non-default value of its
|
|
420
|
-
own) rather than following the display type's default. The correct "reset to
|
|
421
|
-
default" predicate for a promotable slot: comparing the resolved value to the
|
|
422
|
-
base instead reads as at-default for a track merely _following_ a non-base
|
|
423
|
-
promoted default, so the reset control lights up on a no-op.
|
|
543
|
+
### LaneName
|
|
424
544
|
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
545
|
+
The lanes a caller asks the encoder to fill, beyond `x`, `x2` and
|
|
546
|
+
`featureIndex`, which every payload carries: a shape's channels, and `index` for
|
|
547
|
+
the Flatbush a hover reads. A lane not asked for is neither allocated nor
|
|
548
|
+
transferred, and a caller that never hovers declines the index, which is most of
|
|
549
|
+
the encoder's cost after the walk.
|
|
429
550
|
|
|
430
|
-
|
|
431
|
-
// type signature
|
|
432
|
-
<CONFMODEL extends AnyConfigurationModel, SLOT extends ConfigurationSlotName<ConfigurationSchemaForModel<CONFMODEL>>>(self: ResolvableDisplay<CONFMODEL>, slot: SLOT) => boolean
|
|
433
|
-
```
|
|
434
|
-
|
|
435
|
-
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/configuration/promotableDefaults.ts)
|
|
551
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/markEncodingTypes.ts)
|
|
436
552
|
|
|
437
553
|
### launchOrReplaceView
|
|
438
554
|
|
|
@@ -446,99 +562,48 @@ synchronous `addOrReplaceView` requires it loaded already.
|
|
|
446
562
|
|
|
447
563
|
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/mstUtils.ts)
|
|
448
564
|
|
|
449
|
-
###
|
|
565
|
+
### LayerRequest
|
|
450
566
|
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
the ones opened later".
|
|
567
|
+
One layer of a `CoreEncodeFeatures` request: the encoding to evaluate and the
|
|
568
|
+
lanes the display's shape reads.
|
|
454
569
|
|
|
455
|
-
|
|
456
|
-
identical:
|
|
570
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/markEncodingTypes.ts)
|
|
457
571
|
|
|
458
|
-
|
|
459
|
-
of what the track currently shows. Use on an always-visible pin so it can
|
|
460
|
-
never promote a meaningless value, and so two rows sharing one slot (sashimi
|
|
461
|
-
`'down'` vs `'auto'`) stay independent.
|
|
462
|
-
- **Omit it** for "whatever I'm showing", resolved through the cascade. Use for
|
|
463
|
-
a continuous setting where no fixed on-value makes sense (wiggle point size,
|
|
464
|
-
arc line width).
|
|
572
|
+
### MarkEncoding
|
|
465
573
|
|
|
466
|
-
|
|
574
|
+
The declared mapping from a feature's fields to a mark's channels. `x` defaults
|
|
575
|
+
to `start` and `x2` to `end`; a mark that plots no value leaves `y` off. `glyph`
|
|
576
|
+
is read by the `point` shape alone, `row` — an integer field, 0 where missing —
|
|
577
|
+
by the `span` shape, which stacks a feature on the band it names.
|
|
467
578
|
|
|
468
|
-
|
|
469
|
-
replaces — a per-value one and a `…CurrentValue…` one, the second of which was
|
|
470
|
-
exactly the first applied to `resolveSlot(self, slot).value`. The pair was one
|
|
471
|
-
function plus a doc section explaining which name to reach for; omitting the
|
|
472
|
-
argument now says what the longer name said.
|
|
579
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/markEncodingTypes.ts)
|
|
473
580
|
|
|
474
|
-
|
|
475
|
-
// type signature
|
|
476
|
-
<CONFMODEL extends AnyConfigurationModel, SLOT extends ConfigurationSlotName<…>>(self: ResolvableDisplay<CONFMODEL>, slot: SLOT, ...value: [] | [...]) => ValuePin
|
|
477
|
-
```
|
|
581
|
+
### MarkEncodingInput
|
|
478
582
|
|
|
479
|
-
|
|
583
|
+
What `encodeFeatures` takes: a MarkEncoding, any channel of which may be a
|
|
584
|
+
ChannelReader in place of its declared form. The declared form is what crosses
|
|
585
|
+
the wire; a reader is built in the worker.
|
|
480
586
|
|
|
481
|
-
|
|
587
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/markEncoding.ts)
|
|
482
588
|
|
|
483
|
-
|
|
484
|
-
the display type. `active` mirrors the row, so the pin draws filled exactly when
|
|
485
|
-
the box is ticked; a click flips the row's state on every open track and offers
|
|
486
|
-
the new state as the display type's default. It never clears a default the way
|
|
487
|
-
makePin's filled pin does — flipping back and taking the offer promotes the
|
|
488
|
-
other value, and promoting the base value clears the default
|
|
489
|
-
(`applyAndOfferDefault`).
|
|
589
|
+
### NO_VALUE_LABEL
|
|
490
590
|
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
visibly did nothing. It also replaces the per-value `makePin` a checkbox row
|
|
494
|
-
over a shared enum slot used to carry, which gave two checkbox rows in one
|
|
495
|
-
submenu two different pins: one filled when its value was promoted and clearing
|
|
496
|
-
on a second click, the other filled when the box was ticked and flipping. With
|
|
497
|
-
`states`, a checkbox row is always the toggle kind.
|
|
591
|
+
The key row a feature with nothing in a categorical field lands on, so the
|
|
592
|
+
legend says why a mark is grey, or a disc, rather than listing a blank value.
|
|
498
593
|
|
|
499
594
|
```js
|
|
500
595
|
// type signature
|
|
501
|
-
|
|
596
|
+
'(no value)'
|
|
502
597
|
```
|
|
503
598
|
|
|
504
|
-
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/
|
|
505
|
-
|
|
506
|
-
### openPromotableDisplays
|
|
507
|
-
|
|
508
|
-
Every display on an open track, across all open views — the reach of anything
|
|
509
|
-
that acts on "the tracks the user is looking at": a promoted default's "apply to
|
|
510
|
-
open tracks", and the share/export bake. One walk so those can't drift apart.
|
|
511
|
-
|
|
512
|
-
Recurses into composite views. A display nested in one resolves the cascade like
|
|
513
|
-
any other but was invisible to both callers, so the share/export bake didn't
|
|
514
|
-
bake its inherited values and a shared session containing a breakpoint-split or
|
|
515
|
-
synteny view rendered differently for the recipient. `LGVSyntenyDisplay` is only
|
|
516
|
-
ever reached through this branch, so don't flatten the recursion away.
|
|
517
|
-
`hasChildViews` names the one composite shape it does not cover.
|
|
518
|
-
|
|
519
|
-
A view holding neither (e.g. spreadsheet) drops out via the structural guards. A
|
|
520
|
-
view whose displays declare no promotable slot (e.g. dotplot, which does hold
|
|
521
|
-
tracks) is walked and contributes nothing — harmless, and cheaper than asking
|
|
522
|
-
each display whether it has anything to promote.
|
|
523
|
-
|
|
524
|
-
```js
|
|
525
|
-
// type signature
|
|
526
|
-
(session: AbstractSessionModel) => ResolvableDisplay[]
|
|
527
|
-
```
|
|
528
|
-
|
|
529
|
-
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/openDisplays.ts)
|
|
530
|
-
|
|
531
|
-
### Pin
|
|
599
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/markEncoding.ts)
|
|
532
600
|
|
|
533
|
-
|
|
534
|
-
trailing `PushPin`, bundled so the row consumes it as one prop.
|
|
601
|
+
### RampRef
|
|
535
602
|
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
to be told apart by `typeof onValue === 'boolean'`, which let a value pin over a
|
|
539
|
-
boolean slot compile and read as a toggle while clearing on its second click.
|
|
603
|
+
The ramp a continuous colour scale samples: a named ramp, or evenly spaced CSS
|
|
604
|
+
colour stops.
|
|
540
605
|
|
|
541
|
-
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/
|
|
606
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/markEncodingTypes.ts)
|
|
542
607
|
|
|
543
608
|
### readConfObject
|
|
544
609
|
|
|
@@ -622,57 +687,6 @@ bound) stated height when on. This is the single spelling of "off spends 0 px".
|
|
|
622
687
|
|
|
623
688
|
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/bandLayout.ts)
|
|
624
689
|
|
|
625
|
-
### resolveConf
|
|
626
|
-
|
|
627
|
-
Reads a `promotable` slot through the display-type-default cascade — the track's
|
|
628
|
-
own value, else the session-wide promoted default for this display type, else
|
|
629
|
-
the slot's `promotedBase`. Always yields a real value, never the `undefined`
|
|
630
|
-
inherit sentinel, so a display's value getter is
|
|
631
|
-
`get displayMode(): DisplayMode { return resolveConf(self, 'displayMode') }`
|
|
632
|
-
with no post-guard and no cast.
|
|
633
|
-
|
|
634
|
-
Separate from `getConf` rather than folded into it, deliberately: resolution
|
|
635
|
-
consults the session, so it is main-thread only and throws on a detached node.
|
|
636
|
-
Folding it in was built and reverted — ADR-046.
|
|
637
|
-
|
|
638
|
-
Throws if `slot` isn't promotable — the cascade has nothing to say about a plain
|
|
639
|
-
slot, and `getConf` is what you want there.
|
|
640
|
-
|
|
641
|
-
Takes no jexl `args`, unlike `getConf`: a promotable slot cannot hold a callback
|
|
642
|
-
(see `SlotResolution`), so there is no per-feature context to supply.
|
|
643
|
-
|
|
644
|
-
```js
|
|
645
|
-
// type signature
|
|
646
|
-
<…>(model: ResolvableDisplay<...>, slot: SLOT) => ConfigurationSlotValueResolved<...>
|
|
647
|
-
```
|
|
648
|
-
|
|
649
|
-
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/configuration/getConf.ts)
|
|
650
|
-
|
|
651
|
-
### ResolvedConfigSnapshot
|
|
652
|
-
|
|
653
|
-
A display config snapshot whose promotable slots hold RESOLVED values rather
|
|
654
|
-
than the inherit sentinel — what a worker payload has to be built from.
|
|
655
|
-
|
|
656
|
-
The brand is required and unforgeable, so a plain `Record<string, unknown>` is
|
|
657
|
-
not assignable to it and neither is `getSnapshot(self.configuration)`. That is
|
|
658
|
-
the whole point. Everything downstream of the resolve is an ERASED container — a
|
|
659
|
-
snapshot is `Record<string, unknown>`, and the payload it becomes is an
|
|
660
|
-
`as`-asserted interface — so a payload builder handed the RAW snapshot instead
|
|
661
|
-
typechecks, ships `undefined` for every promotable slot, and types it as the
|
|
662
|
-
resolved value. That was measured, not supposed: the raw spelling in
|
|
663
|
-
`LinearBasicDisplay`'s `rpcProps()` passed `pnpm typecheck` and every suite in
|
|
664
|
-
`plugins/canvas`, `packages/core/src/configuration` and `products/jbrowse-web`,
|
|
665
|
-
while sending the worker `undefined` for chevrons, subfeature labels and feature
|
|
666
|
-
height.
|
|
667
|
-
|
|
668
|
-
The rest of this subsystem's guarantees are carried by types that stay connected
|
|
669
|
-
to the schema: a raw read of a promotable `maybe*` slot is `T | undefined` (see
|
|
670
|
-
`ConfigurationSlotValue`), so `getConf` where `resolveConf` was meant is a
|
|
671
|
-
compile error at any typed consumer. The brand is that guarantee re-established
|
|
672
|
-
at the point where the connection is cut.
|
|
673
|
-
|
|
674
|
-
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/configuration/promotableDefaults.ts)
|
|
675
|
-
|
|
676
690
|
### runLazyAfterAttach
|
|
677
691
|
|
|
678
692
|
Run a display's `afterAttach` body from a module loaded on demand, so the
|
|
@@ -691,6 +705,19 @@ displays hand-rolled this IIFE and each drew the lines differently.
|
|
|
691
705
|
|
|
692
706
|
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/lazyAfterAttach.ts)
|
|
693
707
|
|
|
708
|
+
### runTransforms
|
|
709
|
+
|
|
710
|
+
Run the transform steps over a feature list, in order, in the worker. The list a
|
|
711
|
+
step answers is what the next one reads, and the last one is what the encoder
|
|
712
|
+
walks.
|
|
713
|
+
|
|
714
|
+
```js
|
|
715
|
+
// type signature
|
|
716
|
+
(features: readonly Feature[], steps: readonly TransformStep[], jexl?: JexlInstance | undefined) => readonly Feature[]
|
|
717
|
+
```
|
|
718
|
+
|
|
719
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/featureTransforms.ts)
|
|
720
|
+
|
|
694
721
|
### sampleColorRamp
|
|
695
722
|
|
|
696
723
|
The color at `t` in `[0, 1]` across a list of EVENLY SPACED stops, linearly
|
|
@@ -704,6 +731,12 @@ than an extrapolation past them, and a one-stop ramp is that stop everywhere.
|
|
|
704
731
|
|
|
705
732
|
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/colorRamp.ts)
|
|
706
733
|
|
|
734
|
+
### ScaleTable
|
|
735
|
+
|
|
736
|
+
Any channel's scale table; the kind names the channel.
|
|
737
|
+
|
|
738
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/markEncodingTypes.ts)
|
|
739
|
+
|
|
707
740
|
### SessionPaletteProvider
|
|
708
741
|
|
|
709
742
|
Make JBrowse follow the host's light/dark state — the whole of it, in one mount:
|
|
@@ -760,9 +793,9 @@ cast names a concrete schema instead (`ConfigModelForFields`, or the base schema
|
|
|
760
793
|
when the slot is the base's), and `HostChecksSlotNames` pins each one.
|
|
761
794
|
|
|
762
795
|
A wrong _value_ type still throws at runtime (MST type-checks the assignment)
|
|
763
|
-
rather than at compile time. `value` is deliberately `unknown` because
|
|
764
|
-
|
|
765
|
-
|
|
796
|
+
rather than at compile time. `value` is deliberately `unknown` because
|
|
797
|
+
`undefined` is a legitimate write — it resets a slot to its schema default — and
|
|
798
|
+
the declared slot value type doesn't include it.
|
|
766
799
|
|
|
767
800
|
```js
|
|
768
801
|
// type signature
|
|
@@ -790,72 +823,67 @@ carries its own draw rect beside the stack.
|
|
|
790
823
|
|
|
791
824
|
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/bandLayout.ts)
|
|
792
825
|
|
|
826
|
+
### StackStep
|
|
827
|
+
|
|
828
|
+
Assign every feature the lowest row on which it overlaps nothing already there —
|
|
829
|
+
greedy first fit in start order, the packing a pileup is — and write it to the
|
|
830
|
+
field `as` (`row`). `fields` names the interval read (`start`, `end`); `padding`
|
|
831
|
+
is bp of clearance kept between two features sharing a row; `groupby` packs each
|
|
832
|
+
distinct value set on its own rows, each numbered from 0. The answer is the
|
|
833
|
+
input in start order, so a `span` encoding `row` stacks it.
|
|
834
|
+
|
|
835
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/markEncodingTypes.ts)
|
|
836
|
+
|
|
793
837
|
### stopsFromRampLut
|
|
794
838
|
|
|
795
839
|
`n` evenly spaced legend stops read straight out of a buildColorRampLut byte
|
|
796
840
|
table — the same 256×1 RGBA array `uploadColorRampLut` hands the GPU and the
|
|
797
|
-
Canvas2D fillStyle LUTs index —
|
|
841
|
+
Canvas2D fillStyle LUTs index — as the stops of a `RampScale`. It holds one
|
|
798
842
|
claim by construction: the swatch at bar fraction `t` is byte-identical to the
|
|
799
843
|
ramp entry at `t` on both backends. Alpha rides `opacity` (the juicebox fade),
|
|
800
844
|
never baked into the color string.
|
|
801
845
|
|
|
802
846
|
```js
|
|
803
847
|
// type signature
|
|
804
|
-
(lut: Uint8Array<ArrayBufferLike>, n: number) =>
|
|
848
|
+
(lut: Uint8Array<ArrayBufferLike>, n: number) => RampStop[]
|
|
805
849
|
```
|
|
806
850
|
|
|
807
851
|
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/colorRamp.ts)
|
|
808
852
|
|
|
809
|
-
###
|
|
853
|
+
### TransformStep
|
|
810
854
|
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
and offers it as the default. It never clears a default on its own — promoting
|
|
815
|
-
the slot's base value is what clears one.
|
|
855
|
+
One step over the features before a layer is encoded, named by `type` the way
|
|
856
|
+
GenomeSpy spells a transform; every step runs in order and the next reads what
|
|
857
|
+
the last answered.
|
|
816
858
|
|
|
817
|
-
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/
|
|
859
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/markEncodingTypes.ts)
|
|
818
860
|
|
|
819
|
-
###
|
|
861
|
+
### ValueEncoding
|
|
820
862
|
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
863
|
+
How a mark's `y` channel resolves: a feature field (or `jexl:` expression) read
|
|
864
|
+
on a linear scale over the loaded regions' extremes, or the same field with the
|
|
865
|
+
scale spelled out — `log` to read the domain logarithmically, `domain` to pin
|
|
866
|
+
`[min, max]` instead of autoscaling. The declaration is the one owner: the
|
|
867
|
+
display's axis, its ticks and the shader's placement are all resolved from it.
|
|
824
868
|
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
`fromDisplayTypeDefaults` is what lets the UI say so rather than silently
|
|
831
|
-
materializing a session preference into a track config.
|
|
869
|
+
`resolve` is which axis the mark reads. `shared` — the default — folds it into
|
|
870
|
+
the display's one y domain with every other mark. `independent` gives it a
|
|
871
|
+
domain folded from its layers alone and a second axis on the right, so a
|
|
872
|
+
coverage run and the raw features can share a plot; one mark per display may ask
|
|
873
|
+
for it.
|
|
832
874
|
|
|
833
|
-
|
|
834
|
-
Everything the cascade takes is on the config node: it is the same node an open
|
|
835
|
-
display's `configuration` points at (the hydration cache makes it stable), its
|
|
836
|
-
`type` is the display type the session-wide tier is keyed on (every display
|
|
837
|
-
schema is `explicitlyTyped` under the display type's own name), and the session
|
|
838
|
-
is passed in. So an unopened track — which has no display state at all — still
|
|
839
|
-
has an answer to "what would this render as", by the same code path.
|
|
875
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/markEncodingTypes.ts)
|
|
840
876
|
|
|
841
|
-
|
|
842
|
-
and that is the decision — don't "align" it with the share bake.** A pasted
|
|
843
|
-
`config.json` is read by a mechanism with no cascade in it at all, so writing
|
|
844
|
-
only the inherited values would leave every other slot to pick up whatever the
|
|
845
|
-
reader has promoted in their own browser. Pinned by
|
|
846
|
-
`products/jbrowse-web/src/tests/CopyConfigPromotedDefaults.test.ts`.
|
|
877
|
+
### valueField
|
|
847
878
|
|
|
848
|
-
|
|
879
|
+
The field a `y` declaration reads, whichever of its two forms it is written in.
|
|
849
880
|
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
`toggle` on an outline pin applies the value to every open track and offers it
|
|
855
|
-
as the default, while on a filled pin it clears that default and touches no
|
|
856
|
-
track (`applyAndOfferDefault` / `clearDefault`).
|
|
881
|
+
```js
|
|
882
|
+
// type signature
|
|
883
|
+
(y: ValueEncoding) => string
|
|
884
|
+
```
|
|
857
885
|
|
|
858
|
-
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/
|
|
886
|
+
[Source code](https://github.com/GMOD/jbrowse-components/blob/main/packages/core/src/util/markEncoding.ts)
|
|
859
887
|
|
|
860
888
|
### VIRIDIS_STOPS
|
|
861
889
|
|