igv 2.15.3 → 2.15.4
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 +10 -10
- package/dist/igv.esm.js +300 -306
- package/dist/igv.esm.min.js +5 -5
- package/dist/igv.esm.min.js.map +1 -1
- package/dist/igv.js +300 -306
- package/dist/igv.min.js +5 -5
- package/dist/igv.min.js.map +1 -1
- package/package.json +1 -1
package/dist/igv.esm.js
CHANGED
|
@@ -23944,7 +23944,7 @@ const Cytoband = function (start, end, name, typestain) {
|
|
|
23944
23944
|
}
|
|
23945
23945
|
};
|
|
23946
23946
|
|
|
23947
|
-
const _version = "2.15.
|
|
23947
|
+
const _version = "2.15.4";
|
|
23948
23948
|
function version() {
|
|
23949
23949
|
return _version
|
|
23950
23950
|
}
|
|
@@ -23996,7 +23996,7 @@ const GenomeUtils = {
|
|
|
23996
23996
|
|
|
23997
23997
|
// Delay loading cytbands untils after genome initialization to use chromosome aliases (1 vs chr1, etc).
|
|
23998
23998
|
if (cytobandUrl) {
|
|
23999
|
-
genome.cytobands
|
|
23999
|
+
genome.cytobands = await loadCytobands(cytobandUrl, sequence.config, genome);
|
|
24000
24000
|
}
|
|
24001
24001
|
|
|
24002
24002
|
return genome
|
|
@@ -24098,7 +24098,7 @@ class Genome {
|
|
|
24098
24098
|
this.sequence = sequence;
|
|
24099
24099
|
this.chromosomeNames = sequence.chromosomeNames;
|
|
24100
24100
|
this.chromosomes = sequence.chromosomes; // An object (functions as a dictionary)
|
|
24101
|
-
this.featureDB =
|
|
24101
|
+
this.featureDB = new Map(); // Hash of name -> feature, used for search function.
|
|
24102
24102
|
|
|
24103
24103
|
this.wholeGenomeView = config.wholeGenomeView === undefined || config.wholeGenomeView;
|
|
24104
24104
|
if (this.wholeGenomeView && Object.keys(sequence.chromosomes).length > 1) {
|
|
@@ -24302,6 +24302,40 @@ class Genome {
|
|
|
24302
24302
|
chr = this.getChromosomeName(chr);
|
|
24303
24303
|
return this.sequence.getSequence(chr, start, end)
|
|
24304
24304
|
}
|
|
24305
|
+
|
|
24306
|
+
addFeaturesToDB(featureList, config) {
|
|
24307
|
+
|
|
24308
|
+
const insertFeature = (name, feature) => {
|
|
24309
|
+
const current = this.featureDB.get(name);
|
|
24310
|
+
if (current) {
|
|
24311
|
+
feature = (feature.end - feature.start) > (current.end - current.start) ? feature : current;
|
|
24312
|
+
|
|
24313
|
+
}
|
|
24314
|
+
this.featureDB.set(name, feature);
|
|
24315
|
+
};
|
|
24316
|
+
|
|
24317
|
+
for (let feature of featureList) {
|
|
24318
|
+
if (feature.name) {
|
|
24319
|
+
insertFeature(feature.name.toUpperCase(), feature);
|
|
24320
|
+
}
|
|
24321
|
+
if (feature.gene && feature.gene.name) {
|
|
24322
|
+
insertFeature(feature.gene.name.toUpperCase(), feature);
|
|
24323
|
+
}
|
|
24324
|
+
|
|
24325
|
+
if (config.searchableFields) {
|
|
24326
|
+
for (let f of config.searchableFields) {
|
|
24327
|
+
const value = feature.getAttributeValue(f);
|
|
24328
|
+
if (value) {
|
|
24329
|
+
if (value.indexOf(" ") > 0) {
|
|
24330
|
+
insertFeature(value.replaceAll(" ", "+").toUpperCase(), feature);
|
|
24331
|
+
} else {
|
|
24332
|
+
insertFeature(value.toUpperCase(), feature);
|
|
24333
|
+
}
|
|
24334
|
+
}
|
|
24335
|
+
}
|
|
24336
|
+
}
|
|
24337
|
+
}
|
|
24338
|
+
}
|
|
24305
24339
|
}
|
|
24306
24340
|
|
|
24307
24341
|
async function loadCytobands(cytobandUrl, config, genome) {
|
|
@@ -27029,8 +27063,6 @@ function parseVariableStep(line) {
|
|
|
27029
27063
|
* THE SOFTWARE.
|
|
27030
27064
|
*/
|
|
27031
27065
|
|
|
27032
|
-
const DEFAULT_COLOR$1 = 'rgb(150,150,150)';
|
|
27033
|
-
|
|
27034
27066
|
const fixColor = (colorString) => {
|
|
27035
27067
|
if (isString$2(colorString)) {
|
|
27036
27068
|
return (colorString.indexOf(",") > 0 && !(colorString.startsWith("rgb(") || colorString.startsWith("rgba("))) ?
|
|
@@ -27049,6 +27081,15 @@ const fixColor = (colorString) => {
|
|
|
27049
27081
|
*/
|
|
27050
27082
|
class TrackBase {
|
|
27051
27083
|
|
|
27084
|
+
static defaults = {
|
|
27085
|
+
height: 50,
|
|
27086
|
+
color: 'rgb(0, 0, 150)',
|
|
27087
|
+
altColor: 'rgb(0, 0, 150)',
|
|
27088
|
+
autoHeight: false,
|
|
27089
|
+
visibilityWindow: undefined,
|
|
27090
|
+
supportHiDPI: true
|
|
27091
|
+
}
|
|
27092
|
+
|
|
27052
27093
|
constructor(config, browser) {
|
|
27053
27094
|
this.browser = browser;
|
|
27054
27095
|
this.init(config);
|
|
@@ -27062,15 +27103,25 @@ class TrackBase {
|
|
|
27062
27103
|
*/
|
|
27063
27104
|
init(config) {
|
|
27064
27105
|
|
|
27106
|
+
this.config = config;
|
|
27107
|
+
|
|
27065
27108
|
if (config.displayMode) {
|
|
27066
27109
|
config.displayMode = config.displayMode.toUpperCase();
|
|
27067
27110
|
}
|
|
27068
27111
|
|
|
27069
|
-
|
|
27070
|
-
|
|
27071
|
-
this.
|
|
27072
|
-
|
|
27073
|
-
|
|
27112
|
+
// Set default properties
|
|
27113
|
+
const defaults = Object.assign({}, TrackBase.defaults);
|
|
27114
|
+
if(this.constructor.defaults) {
|
|
27115
|
+
for(let key of Object.keys(this.constructor.defaults)) {
|
|
27116
|
+
defaults[key] = this.constructor.defaults[key];
|
|
27117
|
+
}
|
|
27118
|
+
}
|
|
27119
|
+
for(let key of Object.keys(defaults)) {
|
|
27120
|
+
this[key] = config.hasOwnProperty(key) ? config[key] : defaults[key];
|
|
27121
|
+
if(key === 'color' || key === 'altColor') {
|
|
27122
|
+
this[key] = fixColor(this[key]);
|
|
27123
|
+
}
|
|
27124
|
+
}
|
|
27074
27125
|
|
|
27075
27126
|
if (config.name || config.label) {
|
|
27076
27127
|
this.name = config.name || config.label;
|
|
@@ -27080,29 +27131,15 @@ class TrackBase {
|
|
|
27080
27131
|
this.name = getFilename$2(config.url);
|
|
27081
27132
|
}
|
|
27082
27133
|
|
|
27134
|
+
this.url = config.url;
|
|
27135
|
+
if(this.config.type) this.type = this.config.type;
|
|
27083
27136
|
this.id = this.config.id === undefined ? this.name : this.config.id;
|
|
27084
|
-
|
|
27085
27137
|
this.order = config.order;
|
|
27086
|
-
|
|
27087
|
-
if (config.color) this.color = fixColor(config.color);
|
|
27088
|
-
if (config.altColor) this.altColor = fixColor(config.altColor);
|
|
27089
|
-
if ("civic-ws" === config.sourceType) { // Ugly proxy for specialized track type
|
|
27090
|
-
this.defaultColor = "rgb(155,20,20)";
|
|
27091
|
-
} else {
|
|
27092
|
-
this.defaultColor = "rgb(0,0,150)";
|
|
27093
|
-
}
|
|
27094
|
-
|
|
27095
27138
|
this.autoscaleGroup = config.autoscaleGroup;
|
|
27096
|
-
|
|
27097
27139
|
this.removable = config.removable === undefined ? true : config.removable; // Defaults to true
|
|
27098
|
-
|
|
27099
|
-
this.height = config.height || 100;
|
|
27100
|
-
this.autoHeight = config.autoHeight;
|
|
27101
27140
|
this.minHeight = config.minHeight || Math.min(25, this.height);
|
|
27102
27141
|
this.maxHeight = config.maxHeight || Math.max(1000, this.height);
|
|
27103
27142
|
|
|
27104
|
-
this.visibilityWindow = config.visibilityWindow;
|
|
27105
|
-
|
|
27106
27143
|
if (config.onclick) {
|
|
27107
27144
|
this.onclick = config.onclick;
|
|
27108
27145
|
config.onclick = undefined; // functions cannot be saved in sessions, clear it here.
|
|
@@ -27159,17 +27196,18 @@ class TrackBase {
|
|
|
27159
27196
|
}
|
|
27160
27197
|
|
|
27161
27198
|
/**
|
|
27162
|
-
*
|
|
27163
|
-
*
|
|
27164
|
-
* current state. Only simple properties (string, number, boolean) are updated.
|
|
27199
|
+
* Used to create session object for bookmarking, sharing. Only simple property values (string, number, boolean)
|
|
27200
|
+
* are saved.
|
|
27165
27201
|
*/
|
|
27166
27202
|
getState() {
|
|
27167
27203
|
|
|
27204
|
+
const jsonable = (v) => !(v === undefined || typeof v === 'function' || v instanceof File || v instanceof Promise);
|
|
27205
|
+
|
|
27168
27206
|
// Create copy of config, minus transient properties (convention is name starts with '_'). Also, all
|
|
27169
27207
|
// function properties are transient as they cannot be saved in json
|
|
27170
27208
|
const state = {};
|
|
27171
27209
|
for (let key of Object.keys(this.config)) {
|
|
27172
|
-
if (!key.startsWith("_") &&
|
|
27210
|
+
if (!key.startsWith("_") && jsonable(this.config[key])) {
|
|
27173
27211
|
state[key] = this.config[key];
|
|
27174
27212
|
}
|
|
27175
27213
|
}
|
|
@@ -27183,8 +27221,18 @@ class TrackBase {
|
|
|
27183
27221
|
}
|
|
27184
27222
|
}
|
|
27185
27223
|
|
|
27186
|
-
|
|
27187
|
-
|
|
27224
|
+
// If user has changed other properties from defaults update state.
|
|
27225
|
+
const defs = TrackBase.defaults;
|
|
27226
|
+
if (this.constructor.defaults) {
|
|
27227
|
+
for (let key of Object.keys(this.constructor.defaults)) {
|
|
27228
|
+
defs[key] = this.constructor.defaults[key];
|
|
27229
|
+
}
|
|
27230
|
+
}
|
|
27231
|
+
for (let key of Object.keys(defs)) {
|
|
27232
|
+
if (undefined !== this[key] && defs[key] !== this[key]) {
|
|
27233
|
+
state[key] = this[key];
|
|
27234
|
+
}
|
|
27235
|
+
}
|
|
27188
27236
|
|
|
27189
27237
|
// Flatten dataRange if present
|
|
27190
27238
|
if (!this.autoscale && this.dataRange) {
|
|
@@ -27192,22 +27240,6 @@ class TrackBase {
|
|
|
27192
27240
|
state.max = this.dataRange.max;
|
|
27193
27241
|
}
|
|
27194
27242
|
|
|
27195
|
-
|
|
27196
|
-
// Check for non-json-if-yable properties. Perhaps we should test what can be saved.
|
|
27197
|
-
for (let key of Object.keys(state)) {
|
|
27198
|
-
const value = state[key];
|
|
27199
|
-
if (typeof value === 'function') {
|
|
27200
|
-
throw Error(`Property '${key}' of track '${this.name} is a function. Functions cannot be saved in sessions.`)
|
|
27201
|
-
}
|
|
27202
|
-
if (value instanceof File) { // Test specifically for File. Other types of File-like objects might be savable
|
|
27203
|
-
const str = `Track ${this.name} is a local file. Sessions cannot be saved with local file references.`;
|
|
27204
|
-
throw Error(str)
|
|
27205
|
-
}
|
|
27206
|
-
if (value instanceof Promise) {
|
|
27207
|
-
throw Error(`Property '${key}' of track '${this.name} is a Promise. Promises cannot be saved in sessions.`)
|
|
27208
|
-
}
|
|
27209
|
-
}
|
|
27210
|
-
|
|
27211
27243
|
return state
|
|
27212
27244
|
}
|
|
27213
27245
|
|
|
@@ -27503,7 +27535,7 @@ class TrackBase {
|
|
|
27503
27535
|
* @returns {*|string|string}
|
|
27504
27536
|
*/
|
|
27505
27537
|
getColorForFeature(f) {
|
|
27506
|
-
|
|
27538
|
+
return (typeof this.color === "function") ? this.color(feature) : this.color
|
|
27507
27539
|
}
|
|
27508
27540
|
|
|
27509
27541
|
/**
|
|
@@ -31907,6 +31939,7 @@ class TextFeatureSource {
|
|
|
31907
31939
|
|
|
31908
31940
|
const queryableFormats = new Set(["bigwig", "bw", "bigbed", "bb", "biginteract", "biggenepred", "bignarrowpeak", "tdf"]);
|
|
31909
31941
|
|
|
31942
|
+
this.queryable = config.queryable === true; // False by default, unless explicitly set
|
|
31910
31943
|
if (config.reader) {
|
|
31911
31944
|
// Explicit reader implementation
|
|
31912
31945
|
this.reader = config.reader;
|
|
@@ -31940,6 +31973,11 @@ class TextFeatureSource {
|
|
|
31940
31973
|
this.queryable = true;
|
|
31941
31974
|
} else ;
|
|
31942
31975
|
}
|
|
31976
|
+
|
|
31977
|
+
// Set searchable unless explicitly turned off, or track uses in indexed or otherwise queryable
|
|
31978
|
+
// feature source. queryable => features loaded on demand (by query)
|
|
31979
|
+
this.searchable = config.searchable === true || config.searchableFields || (config.searchable !== false && !this.queryable);
|
|
31980
|
+
|
|
31943
31981
|
}
|
|
31944
31982
|
|
|
31945
31983
|
async defaultVisibilityWindow() {
|
|
@@ -32080,39 +32118,13 @@ class TextFeatureSource {
|
|
|
32080
32118
|
this.featureCache = new FeatureCache$1(features, this.genome, genomicInterval);
|
|
32081
32119
|
|
|
32082
32120
|
// If track is marked "searchable"< cache features by name -- use this with caution, memory intensive
|
|
32083
|
-
if (this.
|
|
32084
|
-
this.addFeaturesToDB(features);
|
|
32121
|
+
if (this.searchable) {
|
|
32122
|
+
this.genome.addFeaturesToDB(features, this.config);
|
|
32085
32123
|
}
|
|
32086
32124
|
} else {
|
|
32087
32125
|
this.featureCache = new FeatureCache$1([], genomicInterval); // Empty cache
|
|
32088
32126
|
}
|
|
32089
32127
|
}
|
|
32090
|
-
|
|
32091
|
-
addFeaturesToDB(featureList) {
|
|
32092
|
-
for (let feature of featureList) {
|
|
32093
|
-
if (feature.name) {
|
|
32094
|
-
this.genome.featureDB[feature.name.toUpperCase()] = feature;
|
|
32095
|
-
}
|
|
32096
|
-
if (feature.gene && feature.gene.name) {
|
|
32097
|
-
this.genome.featureDB[feature.gene.name.toUpperCase()] = feature;
|
|
32098
|
-
}
|
|
32099
|
-
|
|
32100
|
-
if (this.config.searchableFields) {
|
|
32101
|
-
for (let f of this.config.searchableFields) {
|
|
32102
|
-
const value = feature.getAttributeValue(f);
|
|
32103
|
-
if (value) {
|
|
32104
|
-
if (value.indexOf(" ") > 0) {
|
|
32105
|
-
this.genome.featureDB[value.replaceAll(" ", "+").toUpperCase()] = feature;
|
|
32106
|
-
this.genome.featureDB[value.replaceAll(" ", "%20").toUpperCase()] = feature;
|
|
32107
|
-
} else {
|
|
32108
|
-
this.genome.featureDB[value.toUpperCase()] = feature;
|
|
32109
|
-
}
|
|
32110
|
-
}
|
|
32111
|
-
}
|
|
32112
|
-
}
|
|
32113
|
-
}
|
|
32114
|
-
}
|
|
32115
|
-
|
|
32116
32128
|
}
|
|
32117
32129
|
|
|
32118
32130
|
/*
|
|
@@ -32928,7 +32940,8 @@ function decodeWigData(data, chrIdx1, bpStart, chrIdx2, bpEnd, featureArray, chr
|
|
|
32928
32940
|
|
|
32929
32941
|
const binaryParser = new BinaryParser(data);
|
|
32930
32942
|
const chromId = binaryParser.getInt();
|
|
32931
|
-
|
|
32943
|
+
const blockStart = binaryParser.getInt();
|
|
32944
|
+
let chromStart = blockStart;
|
|
32932
32945
|
let chromEnd = binaryParser.getInt();
|
|
32933
32946
|
const itemStep = binaryParser.getInt();
|
|
32934
32947
|
const itemSpan = binaryParser.getInt();
|
|
@@ -32938,6 +32951,7 @@ function decodeWigData(data, chrIdx1, bpStart, chrIdx2, bpEnd, featureArray, chr
|
|
|
32938
32951
|
|
|
32939
32952
|
if (chromId >= chrIdx1 && chromId <= chrIdx2) {
|
|
32940
32953
|
|
|
32954
|
+
let idx = 0;
|
|
32941
32955
|
while (itemCount-- > 0) {
|
|
32942
32956
|
let value;
|
|
32943
32957
|
switch (type) {
|
|
@@ -32953,8 +32967,9 @@ function decodeWigData(data, chrIdx1, bpStart, chrIdx2, bpEnd, featureArray, chr
|
|
|
32953
32967
|
break
|
|
32954
32968
|
case 3: // Fixed step
|
|
32955
32969
|
value = binaryParser.getFloat();
|
|
32970
|
+
chromStart = blockStart + idx * itemStep;
|
|
32956
32971
|
chromEnd = chromStart + itemSpan;
|
|
32957
|
-
|
|
32972
|
+
idx++;
|
|
32958
32973
|
break
|
|
32959
32974
|
}
|
|
32960
32975
|
|
|
@@ -32964,8 +32979,8 @@ function decodeWigData(data, chrIdx1, bpStart, chrIdx2, bpEnd, featureArray, chr
|
|
|
32964
32979
|
if (Number.isFinite(value)) {
|
|
32965
32980
|
const chr = chrDict[chromId];
|
|
32966
32981
|
featureArray.push({chr: chr, start: chromStart, end: chromEnd, value: value});
|
|
32967
|
-
|
|
32968
32982
|
}
|
|
32983
|
+
|
|
32969
32984
|
}
|
|
32970
32985
|
}
|
|
32971
32986
|
}
|
|
@@ -33101,6 +33116,7 @@ class BWSource {
|
|
|
33101
33116
|
this.genome = genome;
|
|
33102
33117
|
this.format = config.format || "bigwig";
|
|
33103
33118
|
this.wgValues = {};
|
|
33119
|
+
this.queryable = true;
|
|
33104
33120
|
}
|
|
33105
33121
|
|
|
33106
33122
|
async getFeatures({chr, start, end, bpPerPixel, windowFunction}) {
|
|
@@ -33642,6 +33658,7 @@ class TDFSource {
|
|
|
33642
33658
|
this.genome = genome;
|
|
33643
33659
|
this.windowFunction = config.windowFunction || "mean";
|
|
33644
33660
|
this.reader = new TDFReader(config, genome);
|
|
33661
|
+
this.queryable = true;
|
|
33645
33662
|
}
|
|
33646
33663
|
|
|
33647
33664
|
async getFeatures({chr, start, end, bpPerPixel}) {
|
|
@@ -33851,8 +33868,8 @@ class StaticFeatureSource {
|
|
|
33851
33868
|
this.config = config;
|
|
33852
33869
|
this.genome = genome;
|
|
33853
33870
|
this.queryable = false;
|
|
33871
|
+
this.searchable = config.searchable !== false; // searchable by default
|
|
33854
33872
|
this.updateFeatures(config.features);
|
|
33855
|
-
|
|
33856
33873
|
}
|
|
33857
33874
|
|
|
33858
33875
|
updateFeatures(features) {
|
|
@@ -33862,6 +33879,10 @@ class StaticFeatureSource {
|
|
|
33862
33879
|
mapProperties(features, this.config.mappings);
|
|
33863
33880
|
}
|
|
33864
33881
|
this.featureCache = new FeatureCache$1(features, this.genome);
|
|
33882
|
+
|
|
33883
|
+
if (this.searchable || this.config.searchableFields) {
|
|
33884
|
+
this.genome.addFeaturesToDB(features, this.config);
|
|
33885
|
+
}
|
|
33865
33886
|
}
|
|
33866
33887
|
|
|
33867
33888
|
/**
|
|
@@ -40055,8 +40076,8 @@ function renderFeature(feature, bpStart, xScale, pixelHeight, ctx, options) {
|
|
|
40055
40076
|
|
|
40056
40077
|
// Set ctx color to a known valid color. If getColorForFeature returns an invalid color string it is ignored, and
|
|
40057
40078
|
// this default will be used.
|
|
40058
|
-
ctx.fillStyle = this.
|
|
40059
|
-
ctx.strokeStyle = this.
|
|
40079
|
+
ctx.fillStyle = this.color;
|
|
40080
|
+
ctx.strokeStyle = this.color;
|
|
40060
40081
|
|
|
40061
40082
|
const color = this.getColorForFeature(feature);
|
|
40062
40083
|
ctx.fillStyle = color;
|
|
@@ -40380,6 +40401,17 @@ function renderFusionJuncSpan(feature, bpStart, xScale, pixelHeight, ctx) {
|
|
|
40380
40401
|
|
|
40381
40402
|
class FeatureTrack extends TrackBase {
|
|
40382
40403
|
|
|
40404
|
+
static defaults = {
|
|
40405
|
+
type: "annotation",
|
|
40406
|
+
maxRows: 1000, // protects against pathological feature packing cases (# of rows of overlapping feaures)
|
|
40407
|
+
displayMode: "EXPANDED", // COLLAPSED | EXPANDED | SQUISHED
|
|
40408
|
+
margin: 10,
|
|
40409
|
+
featureHeight: 14,
|
|
40410
|
+
autoHeight: false,
|
|
40411
|
+
useScore: false
|
|
40412
|
+
}
|
|
40413
|
+
|
|
40414
|
+
|
|
40383
40415
|
constructor(config, browser) {
|
|
40384
40416
|
super(config, browser);
|
|
40385
40417
|
}
|
|
@@ -40387,12 +40419,8 @@ class FeatureTrack extends TrackBase {
|
|
|
40387
40419
|
init(config) {
|
|
40388
40420
|
super.init(config);
|
|
40389
40421
|
|
|
40390
|
-
this.type = config.type || "annotation";
|
|
40391
40422
|
|
|
40392
|
-
//
|
|
40393
|
-
this.maxRows = config.maxRows === undefined ? 1000 : config.maxRows;
|
|
40394
|
-
|
|
40395
|
-
this.displayMode = config.displayMode || "EXPANDED"; // COLLAPSED | EXPANDED | SQUISHED
|
|
40423
|
+
// Obscure option, not common or supoorted, included for backward compatibility
|
|
40396
40424
|
this.labelDisplayMode = config.labelDisplayMode;
|
|
40397
40425
|
|
|
40398
40426
|
if (config._featureSource) {
|
|
@@ -40404,12 +40432,6 @@ class FeatureTrack extends TrackBase {
|
|
|
40404
40432
|
FeatureSource(config, this.browser.genome);
|
|
40405
40433
|
}
|
|
40406
40434
|
|
|
40407
|
-
// Set default heights
|
|
40408
|
-
this.autoHeight = config.autoHeight;
|
|
40409
|
-
this.margin = config.margin === undefined ? 10 : config.margin;
|
|
40410
|
-
|
|
40411
|
-
this.featureHeight = config.featureHeight || 14;
|
|
40412
|
-
|
|
40413
40435
|
if ("FusionJuncSpan" === config.type) {
|
|
40414
40436
|
this.render = config.render || renderFusionJuncSpan;
|
|
40415
40437
|
this.squishedRowHeight = config.squishedRowHeight || 50;
|
|
@@ -40446,9 +40468,6 @@ class FeatureTrack extends TrackBase {
|
|
|
40446
40468
|
}
|
|
40447
40469
|
}
|
|
40448
40470
|
}
|
|
40449
|
-
|
|
40450
|
-
//UCSC useScore option
|
|
40451
|
-
this.useScore = config.useScore;
|
|
40452
40471
|
}
|
|
40453
40472
|
|
|
40454
40473
|
async postInit() {
|
|
@@ -40812,7 +40831,7 @@ class FeatureTrack extends TrackBase {
|
|
|
40812
40831
|
} else if (feature.color) {
|
|
40813
40832
|
color = feature.color; // Explicit color for feature
|
|
40814
40833
|
} else {
|
|
40815
|
-
color = this.
|
|
40834
|
+
color = this.color; // Track default
|
|
40816
40835
|
}
|
|
40817
40836
|
|
|
40818
40837
|
if (feature.alpha && feature.alpha !== 1) {
|
|
@@ -40878,38 +40897,40 @@ class RegionTableBase {
|
|
|
40878
40897
|
|
|
40879
40898
|
this.browser = config.browser;
|
|
40880
40899
|
|
|
40881
|
-
this.
|
|
40882
|
-
if(config.width) {
|
|
40883
|
-
this.container.style.width = config.width;
|
|
40900
|
+
this.columnFormat = config.columnFormat;
|
|
40884
40901
|
|
|
40885
|
-
|
|
40902
|
+
this.tableRowSelectionList = [];
|
|
40903
|
+
|
|
40904
|
+
this.tableDOM = domUtils.div({ class: 'igv-roi-table' });
|
|
40905
|
+
// if(config.width) {
|
|
40906
|
+
// let [ w ] = config.width.split('px')
|
|
40907
|
+
// w = parseInt(w, 10)
|
|
40908
|
+
// this.tableDOM.style.width = `${Math.min(w, 1600)}px`
|
|
40909
|
+
//
|
|
40910
|
+
// }
|
|
40886
40911
|
|
|
40887
|
-
config.parent.appendChild(this.
|
|
40912
|
+
config.parent.appendChild(this.tableDOM);
|
|
40888
40913
|
|
|
40889
40914
|
this.headerDOM = config;
|
|
40890
40915
|
|
|
40891
|
-
this.
|
|
40916
|
+
this.tableColumnTitles = this.tableDOM;
|
|
40892
40917
|
|
|
40893
|
-
this.
|
|
40918
|
+
this.tableRowContainer = this.tableDOM;
|
|
40894
40919
|
|
|
40895
40920
|
this.footerDOM = config.gotoButtonHandler;
|
|
40896
40921
|
|
|
40897
|
-
this.columnFormat = config.columnFormat;
|
|
40898
|
-
|
|
40899
|
-
this.tableRowSelectionList = [];
|
|
40900
|
-
|
|
40901
40922
|
}
|
|
40902
40923
|
|
|
40903
40924
|
set headerDOM({ browser, parent, headerTitle, dismissHandler }) {
|
|
40904
40925
|
|
|
40905
40926
|
// header
|
|
40906
40927
|
const dom = domUtils.div();
|
|
40907
|
-
this.
|
|
40928
|
+
this.tableDOM.appendChild(dom);
|
|
40908
40929
|
|
|
40909
40930
|
// header title
|
|
40910
40931
|
const div = domUtils.div();
|
|
40911
40932
|
dom.appendChild(div);
|
|
40912
|
-
div.
|
|
40933
|
+
div.innerHTML = headerTitle;
|
|
40913
40934
|
|
|
40914
40935
|
// table dismiss button
|
|
40915
40936
|
const dismiss = domUtils.div();
|
|
@@ -40928,46 +40949,51 @@ class RegionTableBase {
|
|
|
40928
40949
|
const { y:y_root } = browser.root.getBoundingClientRect();
|
|
40929
40950
|
const { y:y_parent } = parent.getBoundingClientRect();
|
|
40930
40951
|
const constraint = -(y_parent - y_root);
|
|
40931
|
-
makeDraggable(this.
|
|
40952
|
+
makeDraggable(this.tableDOM, dom, { minX:0, minY:constraint });
|
|
40932
40953
|
|
|
40933
|
-
this.
|
|
40954
|
+
this.tableDOM.style.display = 'none';
|
|
40934
40955
|
|
|
40935
40956
|
this._headerDOM = dom;
|
|
40936
40957
|
|
|
40937
40958
|
}
|
|
40938
40959
|
|
|
40939
|
-
set
|
|
40960
|
+
set tableColumnTitles(tableDOM) {
|
|
40940
40961
|
|
|
40941
|
-
const
|
|
40942
|
-
|
|
40962
|
+
const tblColumnTitles = domUtils.div({ class: 'igv-roi-table-column-titles' });
|
|
40963
|
+
tableDOM.appendChild(tblColumnTitles);
|
|
40943
40964
|
|
|
40944
|
-
for (const { label, width } of columnFormat) {
|
|
40965
|
+
for (const { label, width } of this.columnFormat) {
|
|
40945
40966
|
const col = domUtils.div();
|
|
40946
|
-
|
|
40967
|
+
tblColumnTitles.appendChild(col);
|
|
40947
40968
|
col.style.width = width;
|
|
40948
40969
|
col.innerText = label;
|
|
40949
40970
|
}
|
|
40950
40971
|
|
|
40972
|
+
this._tableColumnTitlesDOM = tblColumnTitles;
|
|
40973
|
+
|
|
40951
40974
|
}
|
|
40952
40975
|
|
|
40953
|
-
|
|
40976
|
+
get tableColumnTitles() {
|
|
40977
|
+
return this._tableColumnTitlesDOM
|
|
40978
|
+
}
|
|
40979
|
+
|
|
40980
|
+
set tableRowContainer(container) {
|
|
40954
40981
|
|
|
40955
|
-
const
|
|
40956
|
-
container.appendChild(
|
|
40982
|
+
const tblRowContainer = domUtils.div({ class: 'igv-roi-table-row-container' });
|
|
40983
|
+
container.appendChild(tblRowContainer);
|
|
40957
40984
|
|
|
40958
|
-
|
|
40985
|
+
this._tableRowContainerDOM = tblRowContainer;
|
|
40959
40986
|
|
|
40960
|
-
this._rowContainerDOM = dom;
|
|
40961
40987
|
}
|
|
40962
40988
|
|
|
40963
|
-
get
|
|
40964
|
-
return this.
|
|
40989
|
+
get tableRowContainer() {
|
|
40990
|
+
return this._tableRowContainerDOM
|
|
40965
40991
|
}
|
|
40966
40992
|
|
|
40967
40993
|
set footerDOM(gotoButtonHandler) {
|
|
40968
40994
|
|
|
40969
40995
|
const dom = domUtils.div();
|
|
40970
|
-
this.
|
|
40996
|
+
this.tableDOM.appendChild(dom);
|
|
40971
40997
|
|
|
40972
40998
|
// Go To Button
|
|
40973
40999
|
const gotoButton = domUtils.div({class: 'igv-roi-table-button'});
|
|
@@ -41009,7 +41035,7 @@ class RegionTableBase {
|
|
|
41009
41035
|
}
|
|
41010
41036
|
|
|
41011
41037
|
clearTable() {
|
|
41012
|
-
const elements = this.
|
|
41038
|
+
const elements = this.tableRowContainer.querySelectorAll('.igv-roi-table-row');
|
|
41013
41039
|
for (let el of elements) {
|
|
41014
41040
|
el.remove();
|
|
41015
41041
|
}
|
|
@@ -41021,23 +41047,23 @@ class RegionTableBase {
|
|
|
41021
41047
|
}
|
|
41022
41048
|
|
|
41023
41049
|
present() {
|
|
41024
|
-
this.
|
|
41050
|
+
this.tableDOM.style.left = `${ 0 }px`;
|
|
41025
41051
|
|
|
41026
41052
|
const { y:y_root } = this.browser.root.getBoundingClientRect();
|
|
41027
41053
|
const { y:y_parent } = this.config.parent.getBoundingClientRect();
|
|
41028
41054
|
|
|
41029
|
-
this.
|
|
41030
|
-
this.
|
|
41055
|
+
this.tableDOM.style.top = `${ y_root - y_parent }px`;
|
|
41056
|
+
this.tableDOM.style.display = 'flex';
|
|
41031
41057
|
}
|
|
41032
41058
|
|
|
41033
41059
|
dismiss() {
|
|
41034
|
-
this.
|
|
41060
|
+
this.tableDOM.style.display = 'none';
|
|
41035
41061
|
}
|
|
41036
41062
|
|
|
41037
41063
|
dispose() {
|
|
41038
41064
|
|
|
41039
|
-
this.
|
|
41040
|
-
this.
|
|
41065
|
+
this.tableDOM.innerHTML = '';
|
|
41066
|
+
this.tableDOM.remove();
|
|
41041
41067
|
|
|
41042
41068
|
for (const key of Object.keys(this)) {
|
|
41043
41069
|
this[key] = undefined;
|
|
@@ -41053,45 +41079,35 @@ class BlatTable extends RegionTableBase {
|
|
|
41053
41079
|
|
|
41054
41080
|
constructor(config) {
|
|
41055
41081
|
|
|
41056
|
-
const cooked = Object.assign({ 'width':'
|
|
41082
|
+
const cooked = Object.assign({ 'width':'1024px' }, config);
|
|
41057
41083
|
super(cooked);
|
|
41058
41084
|
|
|
41059
41085
|
this.descriptionDOM = config;
|
|
41060
41086
|
|
|
41061
41087
|
}
|
|
41062
41088
|
|
|
41063
|
-
|
|
41064
|
-
set columnTitleDOM(columnFormat) {
|
|
41065
|
-
|
|
41066
|
-
const dom = domUtils.div({ class: 'igv-roi-table-column-titles' });
|
|
41067
|
-
this.columnTitlesDiv = dom;
|
|
41068
|
-
this.container.appendChild(dom);
|
|
41069
|
-
|
|
41070
|
-
for (const format of columnFormat) {
|
|
41071
|
-
const col = domUtils.div();
|
|
41072
|
-
dom.appendChild(col);
|
|
41073
|
-
col.style.width = format.width || 'fit-content';
|
|
41074
|
-
col.innerText = format.label;
|
|
41075
|
-
}
|
|
41076
|
-
|
|
41077
|
-
}
|
|
41078
|
-
|
|
41079
41089
|
set descriptionDOM(config) {
|
|
41080
41090
|
|
|
41081
41091
|
if (config.description) {
|
|
41082
41092
|
|
|
41083
41093
|
let dom;
|
|
41084
41094
|
|
|
41095
|
+
// BLAT result for query sequence
|
|
41085
41096
|
dom = domUtils.div({ class: 'igv-roi-table-description' });
|
|
41086
|
-
this.
|
|
41097
|
+
this.tableDOM.insertBefore(dom, this.tableColumnTitles);
|
|
41098
|
+
dom.style.height = 'auto';
|
|
41087
41099
|
dom.innerHTML = `BLAT result for query sequence:`;
|
|
41088
41100
|
|
|
41101
|
+
// CTAATCAtctacactggtttctactg ...
|
|
41089
41102
|
dom = domUtils.div({ class: 'igv-roi-table-description' });
|
|
41090
|
-
this.
|
|
41103
|
+
this.tableDOM.insertBefore(dom, this.tableColumnTitles);
|
|
41104
|
+
dom.style.height = 'auto';
|
|
41105
|
+
dom.style.maxHeight = '128px';
|
|
41091
41106
|
dom.innerHTML = config.description;
|
|
41092
41107
|
|
|
41108
|
+
// Select one or more rows ...
|
|
41093
41109
|
dom = domUtils.div({ class: 'igv-roi-table-goto-explainer' });
|
|
41094
|
-
this.
|
|
41110
|
+
this.tableDOM.insertBefore(dom, this.tableColumnTitles);
|
|
41095
41111
|
dom.innerHTML = `Select one or more rows and click Go To to view the regions`;
|
|
41096
41112
|
|
|
41097
41113
|
}
|
|
@@ -41121,13 +41137,13 @@ class BlatTable extends RegionTableBase {
|
|
|
41121
41137
|
|
|
41122
41138
|
renderTable(records) {
|
|
41123
41139
|
|
|
41124
|
-
Array.from(this.
|
|
41140
|
+
Array.from(this.tableRowContainer.querySelectorAll('.igv-roi-table-row')).forEach(el => el.remove());
|
|
41125
41141
|
|
|
41126
41142
|
if (records.length > 0) {
|
|
41127
41143
|
|
|
41128
41144
|
for (let record of records) {
|
|
41129
41145
|
const row = this.tableRowDOM(record);
|
|
41130
|
-
this.
|
|
41146
|
+
this.tableRowContainer.appendChild(row);
|
|
41131
41147
|
}
|
|
41132
41148
|
|
|
41133
41149
|
}
|
|
@@ -41175,7 +41191,7 @@ class BlatTable extends RegionTableBase {
|
|
|
41175
41191
|
|
|
41176
41192
|
event.stopPropagation();
|
|
41177
41193
|
|
|
41178
|
-
const selectedRows = this.
|
|
41194
|
+
const selectedRows = this.tableDOM.querySelectorAll('.igv-roi-table-row-selected');
|
|
41179
41195
|
|
|
41180
41196
|
const loci = [];
|
|
41181
41197
|
for (const row of selectedRows) {
|
|
@@ -41187,7 +41203,7 @@ class BlatTable extends RegionTableBase {
|
|
|
41187
41203
|
loci.push(`${ chr }:${ start }-${ end }`);
|
|
41188
41204
|
}
|
|
41189
41205
|
|
|
41190
|
-
for (const el of this.
|
|
41206
|
+
for (const el of this.tableDOM.querySelectorAll('.igv-roi-table-row')) {
|
|
41191
41207
|
el.classList.remove('igv-roi-table-row-selected');
|
|
41192
41208
|
}
|
|
41193
41209
|
|
|
@@ -41382,8 +41398,6 @@ async function createBlatTrack({sequence, browser, name, title}) {
|
|
|
41382
41398
|
|
|
41383
41399
|
const alignmentStartGap = 5;
|
|
41384
41400
|
const downsampleRowHeight = 5;
|
|
41385
|
-
const DEFAULT_COVERAGE_TRACK_HEIGHT = 50;
|
|
41386
|
-
const DEFAULT_TRACK_HEIGHT$1 = 300;
|
|
41387
41401
|
const DEFAULT_ALIGNMENT_COLOR = "rgb(185, 185, 185)";
|
|
41388
41402
|
const DEFAULT_COVERAGE_COLOR = "rgb(150, 150, 150)";
|
|
41389
41403
|
const DEFAULT_CONNECTOR_COLOR = "rgb(200, 200, 200)";
|
|
@@ -41391,35 +41405,37 @@ const MINIMUM_BLAT_LENGTH = 20;
|
|
|
41391
41405
|
|
|
41392
41406
|
class BAMTrack extends TrackBase {
|
|
41393
41407
|
|
|
41408
|
+
static defaults = {
|
|
41409
|
+
alleleFreqThreshold: 0.2,
|
|
41410
|
+
visibilityWindow: 30000,
|
|
41411
|
+
showCoverage: true,
|
|
41412
|
+
showAlignments: true,
|
|
41413
|
+
viewAsPairs: false,
|
|
41414
|
+
pairsSupported: true,
|
|
41415
|
+
showSoftClips: false,
|
|
41416
|
+
showAllBases: false,
|
|
41417
|
+
showInsertions: true,
|
|
41418
|
+
showMismatches: true,
|
|
41419
|
+
color: DEFAULT_ALIGNMENT_COLOR,
|
|
41420
|
+
coverageColor: DEFAULT_COVERAGE_COLOR,
|
|
41421
|
+
height: 300,
|
|
41422
|
+
coverageTrackHeight: 50
|
|
41423
|
+
}
|
|
41424
|
+
|
|
41394
41425
|
constructor(config, browser) {
|
|
41395
41426
|
super(config, browser);
|
|
41396
41427
|
}
|
|
41397
41428
|
|
|
41398
41429
|
init(config) {
|
|
41399
|
-
super.init(config);
|
|
41400
|
-
this.type = "alignment";
|
|
41401
|
-
|
|
41402
|
-
if (config.alleleFreqThreshold === undefined) {
|
|
41403
|
-
config.alleleFreqThreshold = 0.2;
|
|
41404
|
-
}
|
|
41405
41430
|
|
|
41431
|
+
this.type = "alignment";
|
|
41406
41432
|
this.featureSource = new BamSource(config, this.browser);
|
|
41407
|
-
|
|
41408
|
-
this.showCoverage = config.showCoverage === undefined ? true : config.showCoverage;
|
|
41409
|
-
this.showAlignments = config.showAlignments === undefined ? true : config.showAlignments;
|
|
41410
|
-
|
|
41411
41433
|
this.coverageTrack = new CoverageTrack(config, this);
|
|
41412
41434
|
this.alignmentTrack = new AlignmentTrack(config, this);
|
|
41435
|
+
|
|
41436
|
+
super.init(config);
|
|
41437
|
+
|
|
41413
41438
|
this.alignmentTrack.setTop(this.coverageTrack, this.showCoverage);
|
|
41414
|
-
this.visibilityWindow = config.visibilityWindow || 30000;
|
|
41415
|
-
this.viewAsPairs = config.viewAsPairs;
|
|
41416
|
-
this.pairsSupported = config.pairsSupported !== false;
|
|
41417
|
-
this.showSoftClips = config.showSoftClips;
|
|
41418
|
-
this.showAllBases = config.showAllBases;
|
|
41419
|
-
this.showInsertions = false !== config.showInsertions;
|
|
41420
|
-
this.showMismatches = false !== config.showMismatches;
|
|
41421
|
-
this.color = config.color;
|
|
41422
|
-
this.coverageColor = config.coverageColor;
|
|
41423
41439
|
|
|
41424
41440
|
// The sort object can be an array in the case of multi-locus view, however if multiple sort positions
|
|
41425
41441
|
// are present for a given reference frame the last one will take precedence
|
|
@@ -41432,14 +41448,12 @@ class BAMTrack extends TrackBase {
|
|
|
41432
41448
|
}
|
|
41433
41449
|
}
|
|
41434
41450
|
|
|
41435
|
-
// Invoke height setter last to allocated to coverage and alignment tracks
|
|
41436
|
-
this.height = (config.height !== undefined ? config.height : DEFAULT_TRACK_HEIGHT$1);
|
|
41437
41451
|
}
|
|
41438
41452
|
|
|
41439
41453
|
set height(h) {
|
|
41440
41454
|
this._height = h;
|
|
41441
|
-
if (this.
|
|
41442
|
-
this.alignmentTrack.height = this.showCoverage ? h - this.
|
|
41455
|
+
if (this.showAlignments) {
|
|
41456
|
+
this.alignmentTrack.height = this.showCoverage ? h - this.coverageTrackHeight : h;
|
|
41443
41457
|
}
|
|
41444
41458
|
}
|
|
41445
41459
|
|
|
@@ -41526,16 +41540,15 @@ class BAMTrack extends TrackBase {
|
|
|
41526
41540
|
* @returns {number}
|
|
41527
41541
|
*/
|
|
41528
41542
|
computePixelHeight(alignmentContainer) {
|
|
41529
|
-
return (this.showCoverage ? this.
|
|
41530
|
-
(this.showAlignments ? this.alignmentTrack.computePixelHeight(alignmentContainer) : 0)
|
|
41531
|
-
15
|
|
41543
|
+
return (this.showCoverage ? this.coverageTrackHeight : 0) +
|
|
41544
|
+
(this.showAlignments ? this.alignmentTrack.computePixelHeight(alignmentContainer) : 0)
|
|
41532
41545
|
}
|
|
41533
41546
|
|
|
41534
41547
|
draw(options) {
|
|
41535
41548
|
|
|
41536
41549
|
IGVGraphics.fillRect(options.context, 0, options.pixelTop, options.pixelWidth, options.pixelHeight, {'fillStyle': "rgb(255, 255, 255)"});
|
|
41537
41550
|
|
|
41538
|
-
if (true === this.showCoverage && this.
|
|
41551
|
+
if (true === this.showCoverage && this.coverageTrackHeight > 0) {
|
|
41539
41552
|
this.trackView.axisCanvas.style.display = 'block';
|
|
41540
41553
|
this.coverageTrack.draw(options);
|
|
41541
41554
|
} else {
|
|
@@ -41550,12 +41563,12 @@ class BAMTrack extends TrackBase {
|
|
|
41550
41563
|
|
|
41551
41564
|
paintAxis(ctx, pixelWidth, pixelHeight) {
|
|
41552
41565
|
|
|
41553
|
-
this.coverageTrack.paintAxis(ctx, pixelWidth, this.
|
|
41566
|
+
this.coverageTrack.paintAxis(ctx, pixelWidth, this.coverageTrackHeight);
|
|
41554
41567
|
|
|
41555
41568
|
// if (this.browser.isMultiLocusMode()) {
|
|
41556
41569
|
// ctx.clearRect(0, 0, pixelWidth, pixelHeight);
|
|
41557
41570
|
// } else {
|
|
41558
|
-
// this.coverageTrack.paintAxis(ctx, pixelWidth, this.
|
|
41571
|
+
// this.coverageTrack.paintAxis(ctx, pixelWidth, this.coverageTrackHeight);
|
|
41559
41572
|
// }
|
|
41560
41573
|
}
|
|
41561
41574
|
|
|
@@ -41564,7 +41577,7 @@ class BAMTrack extends TrackBase {
|
|
|
41564
41577
|
}
|
|
41565
41578
|
|
|
41566
41579
|
popupData(clickState) {
|
|
41567
|
-
if (true === this.showCoverage && clickState.y >= this.coverageTrack.top && clickState.y < this.
|
|
41580
|
+
if (true === this.showCoverage && clickState.y >= this.coverageTrack.top && clickState.y < this.coverageTrackHeight) {
|
|
41568
41581
|
return this.coverageTrack.popupData(clickState)
|
|
41569
41582
|
} else {
|
|
41570
41583
|
return this.alignmentTrack.popupData(clickState)
|
|
@@ -41579,7 +41592,7 @@ class BAMTrack extends TrackBase {
|
|
|
41579
41592
|
clickedFeatures(clickState) {
|
|
41580
41593
|
|
|
41581
41594
|
let clickedObject;
|
|
41582
|
-
if (true === this.showCoverage && clickState.y >= this.coverageTrack.top && clickState.y < this.
|
|
41595
|
+
if (true === this.showCoverage && clickState.y >= this.coverageTrack.top && clickState.y < this.coverageTrackHeight) {
|
|
41583
41596
|
clickedObject = this.coverageTrack.getClickedObject(clickState);
|
|
41584
41597
|
} else {
|
|
41585
41598
|
clickedObject = this.alignmentTrack.getClickedObject(clickState);
|
|
@@ -41588,7 +41601,7 @@ class BAMTrack extends TrackBase {
|
|
|
41588
41601
|
}
|
|
41589
41602
|
|
|
41590
41603
|
hoverText(clickState) {
|
|
41591
|
-
if (true === this.showCoverage && clickState.y >= this.coverageTrack.top && clickState.y < this.
|
|
41604
|
+
if (true === this.showCoverage && clickState.y >= this.coverageTrack.top && clickState.y < this.coverageTrackHeight) {
|
|
41592
41605
|
const clickedObject = this.coverageTrack.getClickedObject(clickState);
|
|
41593
41606
|
if (clickedObject) {
|
|
41594
41607
|
return clickedObject.hoverText()
|
|
@@ -41628,8 +41641,8 @@ class BAMTrack extends TrackBase {
|
|
|
41628
41641
|
// Show coverage / alignment options
|
|
41629
41642
|
const adjustTrackHeight = () => {
|
|
41630
41643
|
if (!this.autoHeight) {
|
|
41631
|
-
const h =
|
|
41632
|
-
(this.showCoverage ? this.
|
|
41644
|
+
const h =
|
|
41645
|
+
(this.showCoverage ? this.coverageTrackHeight : 0) +
|
|
41633
41646
|
(this.showAlignments ? this.alignmentTrack.height : 0);
|
|
41634
41647
|
this.trackView.setTrackHeight(h);
|
|
41635
41648
|
}
|
|
@@ -41943,7 +41956,6 @@ class CoverageTrack {
|
|
|
41943
41956
|
constructor(config, parent) {
|
|
41944
41957
|
this.parent = parent;
|
|
41945
41958
|
this.featureSource = parent.featureSource;
|
|
41946
|
-
this.height = config.coverageTrackHeight !== undefined ? config.coverageTrackHeight : DEFAULT_COVERAGE_TRACK_HEIGHT;
|
|
41947
41959
|
|
|
41948
41960
|
this.paintAxis = paintAxis;
|
|
41949
41961
|
this.top = 0;
|
|
@@ -41958,6 +41970,10 @@ class CoverageTrack {
|
|
|
41958
41970
|
|
|
41959
41971
|
}
|
|
41960
41972
|
|
|
41973
|
+
get height() {
|
|
41974
|
+
return this.parent.coverageTrackHeight
|
|
41975
|
+
}
|
|
41976
|
+
|
|
41961
41977
|
draw(options) {
|
|
41962
41978
|
|
|
41963
41979
|
const pixelTop = options.pixelTop;
|
|
@@ -42705,7 +42721,7 @@ class AlignmentTrack {
|
|
|
42705
42721
|
const seqstring = clickedAlignment.seq;
|
|
42706
42722
|
if (seqstring && "*" != seqstring) {
|
|
42707
42723
|
|
|
42708
|
-
if(seqstring.length < maxSequenceSize) {
|
|
42724
|
+
if (seqstring.length < maxSequenceSize) {
|
|
42709
42725
|
list.push({
|
|
42710
42726
|
label: 'BLAT read sequence',
|
|
42711
42727
|
click: () => {
|
|
@@ -44652,25 +44668,34 @@ function renderSVGAxis(context, track, axisCanvas, deltaX, deltaY) {
|
|
|
44652
44668
|
* THE SOFTWARE.
|
|
44653
44669
|
*/
|
|
44654
44670
|
|
|
44655
|
-
const DEFAULT_COLOR = "rgb(150,150,150)";
|
|
44656
|
-
|
|
44657
44671
|
class WigTrack extends TrackBase {
|
|
44658
44672
|
|
|
44673
|
+
static defaults = {
|
|
44674
|
+
height: 50,
|
|
44675
|
+
color: 'rgb(150, 150, 150)',
|
|
44676
|
+
altColor: 'rgb(150, 150, 150)',
|
|
44677
|
+
flipAxis: false,
|
|
44678
|
+
logScale: false,
|
|
44679
|
+
windowFunction: 'mean',
|
|
44680
|
+
graphType: 'bar',
|
|
44681
|
+
autoscale: true,
|
|
44682
|
+
normalize: undefined,
|
|
44683
|
+
scaleFactor: undefined
|
|
44684
|
+
}
|
|
44685
|
+
|
|
44659
44686
|
constructor(config, browser) {
|
|
44660
44687
|
super(config, browser);
|
|
44661
44688
|
}
|
|
44662
44689
|
|
|
44663
44690
|
init(config) {
|
|
44691
|
+
|
|
44664
44692
|
super.init(config);
|
|
44665
44693
|
|
|
44666
44694
|
this.type = "wig";
|
|
44667
|
-
this.height = config.height || 50;
|
|
44668
44695
|
this.featureType = 'numeric';
|
|
44669
44696
|
this.paintAxis = paintAxis;
|
|
44670
44697
|
|
|
44671
44698
|
const format = config.format ? config.format.toLowerCase() : config.format;
|
|
44672
|
-
this.flipAxis = config.flipAxis ? config.flipAxis : false;
|
|
44673
|
-
this.logScale = config.logScale ? config.logScale : false;
|
|
44674
44699
|
if (config.featureSource) {
|
|
44675
44700
|
this.featureSource = config.featureSource;
|
|
44676
44701
|
delete config.featureSource;
|
|
@@ -44682,18 +44707,16 @@ class WigTrack extends TrackBase {
|
|
|
44682
44707
|
this.featureSource = FeatureSource(config, this.browser.genome);
|
|
44683
44708
|
}
|
|
44684
44709
|
|
|
44685
|
-
|
|
44686
|
-
|
|
44710
|
+
|
|
44711
|
+
// Override autoscale default
|
|
44712
|
+
if(config.max === undefined || config.autoscale === true) {
|
|
44713
|
+
this.autoscale = true;
|
|
44714
|
+
} else {
|
|
44687
44715
|
this.dataRange = {
|
|
44688
44716
|
min: config.min || 0,
|
|
44689
44717
|
max: config.max
|
|
44690
44718
|
};
|
|
44691
44719
|
}
|
|
44692
|
-
|
|
44693
|
-
this.windowFunction = config.windowFunction || "mean";
|
|
44694
|
-
this.graphType = config.graphType || "bar";
|
|
44695
|
-
this.normalize = config.normalize; // boolean, for use with "TDF" files
|
|
44696
|
-
this.scaleFactor = config.scaleFactor; // optional scale factor, ignored if normalize === true;
|
|
44697
44720
|
}
|
|
44698
44721
|
|
|
44699
44722
|
async postInit() {
|
|
@@ -44783,7 +44806,7 @@ class WigTrack extends TrackBase {
|
|
|
44783
44806
|
const pixelWidth = options.pixelWidth;
|
|
44784
44807
|
options.pixelHeight;
|
|
44785
44808
|
const bpEnd = bpStart + pixelWidth * bpPerPixel + 1;
|
|
44786
|
-
const posColor = this.color ||
|
|
44809
|
+
const posColor = this.color || WigTrack.defaults.color;
|
|
44787
44810
|
|
|
44788
44811
|
let baselineColor;
|
|
44789
44812
|
if (typeof posColor === "string" && posColor.startsWith("rgb(")) {
|
|
@@ -44927,7 +44950,7 @@ class WigTrack extends TrackBase {
|
|
|
44927
44950
|
*/
|
|
44928
44951
|
|
|
44929
44952
|
getColorForFeature(f) {
|
|
44930
|
-
let c = (f.value < 0 && this.altColor) ? this.altColor : this.color ||
|
|
44953
|
+
let c = (f.value < 0 && this.altColor) ? this.altColor : this.color || WigTrack.defaults.color;
|
|
44931
44954
|
return (typeof c === "function") ? c(f.value) : c
|
|
44932
44955
|
}
|
|
44933
44956
|
|
|
@@ -44938,20 +44961,6 @@ class WigTrack extends TrackBase {
|
|
|
44938
44961
|
this.trackView = undefined;
|
|
44939
44962
|
}
|
|
44940
44963
|
|
|
44941
|
-
/**
|
|
44942
|
-
* Return the current state of the track. Used to create sessions and bookmarks.
|
|
44943
|
-
*
|
|
44944
|
-
* @returns {*|{}}
|
|
44945
|
-
*/
|
|
44946
|
-
getState() {
|
|
44947
|
-
|
|
44948
|
-
const config = super.getState();
|
|
44949
|
-
|
|
44950
|
-
if (this.flipAxis !== undefined) config.flipAxis = this.flipAxis;
|
|
44951
|
-
if (this.logScale !== undefined) config.logScale = this.logScale;
|
|
44952
|
-
|
|
44953
|
-
return config
|
|
44954
|
-
}
|
|
44955
44964
|
}
|
|
44956
44965
|
|
|
44957
44966
|
/**
|
|
@@ -45839,6 +45848,17 @@ const DEFAULT_ARC_COLOR = "rgb(180,25,137)";
|
|
|
45839
45848
|
|
|
45840
45849
|
class InteractionTrack extends TrackBase {
|
|
45841
45850
|
|
|
45851
|
+
static defaults = {
|
|
45852
|
+
height: 250,
|
|
45853
|
+
theta: Math.PI / 4,
|
|
45854
|
+
arcOrientation: true,
|
|
45855
|
+
showBlocks: true,
|
|
45856
|
+
blockHeight: 3,
|
|
45857
|
+
thickness: 1,
|
|
45858
|
+
alpha: 0.02,
|
|
45859
|
+
logScale: true,
|
|
45860
|
+
}
|
|
45861
|
+
|
|
45842
45862
|
constructor(config, browser) {
|
|
45843
45863
|
super(config, browser);
|
|
45844
45864
|
}
|
|
@@ -45846,16 +45866,10 @@ class InteractionTrack extends TrackBase {
|
|
|
45846
45866
|
init(config) {
|
|
45847
45867
|
|
|
45848
45868
|
super.init(config);
|
|
45849
|
-
|
|
45869
|
+
|
|
45850
45870
|
this.sinTheta = Math.sin(this.theta);
|
|
45851
45871
|
this.cosTheta = Math.cos(this.theta);
|
|
45852
|
-
this.height = config.height || 250;
|
|
45853
45872
|
this.arcType = getArcType(config); // nested | proportional | inView | partialInView
|
|
45854
|
-
this.arcOrientation = (config.arcOrientation === undefined ? true : config.arcOrientation); // true for up, false for down
|
|
45855
|
-
this.showBlocks = config.showBlocks === undefined ? true : config.showBlocks;
|
|
45856
|
-
this.blockHeight = config.blockHeight || 3;
|
|
45857
|
-
this.thickness = config.thickness || 1;
|
|
45858
|
-
this.color = config.color;
|
|
45859
45873
|
this.alpha = config.alpha || 0.02; // was: 0.15
|
|
45860
45874
|
this.painter = {flipAxis: !this.arcOrientation, dataRange: this.dataRange, paintAxis: paintAxis};
|
|
45861
45875
|
|
|
@@ -45867,7 +45881,6 @@ class InteractionTrack extends TrackBase {
|
|
|
45867
45881
|
this.valueColumn = "score";
|
|
45868
45882
|
}
|
|
45869
45883
|
|
|
45870
|
-
this.logScale = config.logScale !== false; // i.e. defaul to true (undefined => true)
|
|
45871
45884
|
if (config.max) {
|
|
45872
45885
|
this.dataRange = {
|
|
45873
45886
|
min: config.min || 0,
|
|
@@ -45892,7 +45905,7 @@ class InteractionTrack extends TrackBase {
|
|
|
45892
45905
|
|
|
45893
45906
|
if (typeof this.featureSource.getHeader === "function") {
|
|
45894
45907
|
this.header = await this.featureSource.getHeader();
|
|
45895
|
-
if(this.disposed) return; // This track was removed during async load
|
|
45908
|
+
if (this.disposed) return; // This track was removed during async load
|
|
45896
45909
|
}
|
|
45897
45910
|
|
|
45898
45911
|
// Set properties from track line
|
|
@@ -45965,7 +45978,7 @@ class InteractionTrack extends TrackBase {
|
|
|
45965
45978
|
feature.drawState = undefined;
|
|
45966
45979
|
|
|
45967
45980
|
let color;
|
|
45968
|
-
if(typeof this.color === 'function') {
|
|
45981
|
+
if (typeof this.color === 'function') {
|
|
45969
45982
|
color = this.color(feature);
|
|
45970
45983
|
} else {
|
|
45971
45984
|
color = this.color || feature.color || DEFAULT_ARC_COLOR;
|
|
@@ -46310,7 +46323,7 @@ class InteractionTrack extends TrackBase {
|
|
|
46310
46323
|
contextMenuItemList(clickState) {
|
|
46311
46324
|
|
|
46312
46325
|
// Experimental JBrowse feature
|
|
46313
|
-
if (this.browser.circularView
|
|
46326
|
+
if (this.browser.circularView) {
|
|
46314
46327
|
const viewport = clickState.viewport;
|
|
46315
46328
|
const list = [];
|
|
46316
46329
|
|
|
@@ -46339,7 +46352,7 @@ class InteractionTrack extends TrackBase {
|
|
|
46339
46352
|
|
|
46340
46353
|
// inView features are simply features that have been drawn, i.e. have a drawState
|
|
46341
46354
|
const inView = cachedFeatures.filter(f => f.drawState);
|
|
46342
|
-
if(inView.length === 0) return;
|
|
46355
|
+
if (inView.length === 0) return;
|
|
46343
46356
|
|
|
46344
46357
|
const chords = makeBedPEChords(inView);
|
|
46345
46358
|
sendChords(chords, this, refFrame, 0.5);
|
|
@@ -46375,7 +46388,7 @@ class InteractionTrack extends TrackBase {
|
|
|
46375
46388
|
|
|
46376
46389
|
popupData(clickState, features) {
|
|
46377
46390
|
|
|
46378
|
-
if(features === undefined) features = this.clickedFeatures(clickState);
|
|
46391
|
+
if (features === undefined) features = this.clickedFeatures(clickState);
|
|
46379
46392
|
|
|
46380
46393
|
const data = [];
|
|
46381
46394
|
for (let feature of features) {
|
|
@@ -46399,7 +46412,7 @@ class InteractionTrack extends TrackBase {
|
|
|
46399
46412
|
const columnNames = this.header.columnNames;
|
|
46400
46413
|
const stdColumns = this.header.hiccups ? 6 : 10;
|
|
46401
46414
|
for (let i = stdColumns; i < columnNames.length; i++) {
|
|
46402
|
-
if(this.header.colorColumn === i) continue;
|
|
46415
|
+
if (this.header.colorColumn === i) continue;
|
|
46403
46416
|
if (columnNames[i] === 'info') {
|
|
46404
46417
|
extractInfoColumn(data, f.extras[i - stdColumns]);
|
|
46405
46418
|
} else {
|
|
@@ -46421,7 +46434,7 @@ class InteractionTrack extends TrackBase {
|
|
|
46421
46434
|
|
|
46422
46435
|
// We use the cached features rather than method to avoid async load. If the
|
|
46423
46436
|
// feature is not already loaded this won't work, but the user wouldn't be mousing over it either.
|
|
46424
|
-
const featureList =
|
|
46437
|
+
const featureList = clickState.viewport.cachedFeatures;
|
|
46425
46438
|
const candidates = [];
|
|
46426
46439
|
if (featureList) {
|
|
46427
46440
|
const proportional = (this.arcType === "proportional" || this.arcType === "inView" || this.arcType === "partialInView");
|
|
@@ -46467,26 +46480,6 @@ class InteractionTrack extends TrackBase {
|
|
|
46467
46480
|
}
|
|
46468
46481
|
return candidates.map((c) => c.feature)
|
|
46469
46482
|
}
|
|
46470
|
-
|
|
46471
|
-
/**
|
|
46472
|
-
* Return the current state of the track. Used to create sessions and bookmarks.
|
|
46473
|
-
*
|
|
46474
|
-
* @returns {*|{}}
|
|
46475
|
-
*/
|
|
46476
|
-
getState() {
|
|
46477
|
-
|
|
46478
|
-
const config = super.getState();
|
|
46479
|
-
|
|
46480
|
-
// if (this.height !== undefined) config.height = this.height;
|
|
46481
|
-
if (this.arcType !== undefined) config.arcType = this.arcType;
|
|
46482
|
-
if (this.arcOrientation !== undefined) config.arcOrientation = this.arcOrientation;
|
|
46483
|
-
if (this.showBlocks !== undefined) config.showBlocks = this.showBlocks;
|
|
46484
|
-
if (this.blockHeight !== undefined) config.blockHeight = this.blockHeight;
|
|
46485
|
-
if (this.thickness !== undefined) config.thickness = this.thickness;
|
|
46486
|
-
if (this.alpha !== undefined) config.alpha = this.alpha;
|
|
46487
|
-
|
|
46488
|
-
return config
|
|
46489
|
-
}
|
|
46490
46483
|
}
|
|
46491
46484
|
|
|
46492
46485
|
function getMidpoints(feature, genome) {
|
|
@@ -46693,6 +46686,31 @@ const STANDARD_FIELDS = new Map([["REF", "referenceBases"], ["ALT", "alternateBa
|
|
|
46693
46686
|
|
|
46694
46687
|
class VariantTrack extends TrackBase {
|
|
46695
46688
|
|
|
46689
|
+
static defaults = {
|
|
46690
|
+
displayMode: "EXPANDED",
|
|
46691
|
+
sortDirection: "ASC",
|
|
46692
|
+
showGenotypes: true,
|
|
46693
|
+
squishedVariantHeight: 2,
|
|
46694
|
+
squishedCallHeight: 1,
|
|
46695
|
+
expandedCallHeight: 10,
|
|
46696
|
+
expandedVGap: 2,
|
|
46697
|
+
squishedVGap: 1,
|
|
46698
|
+
expandedGroupGap: 10,
|
|
46699
|
+
squishedGroupGap: 5,
|
|
46700
|
+
featureHeight: 14,
|
|
46701
|
+
noGenotypeColor: "rgb(200,180,180)",
|
|
46702
|
+
noCallColor: "rgb(225, 225, 225)",
|
|
46703
|
+
nonRefColor: "rgb(200, 200, 215)",
|
|
46704
|
+
mixedColor: "rgb(200, 220, 200)",
|
|
46705
|
+
homrefColor: "rgb(200, 200, 200)",
|
|
46706
|
+
homvarColor: "rgb(17,248,254)",
|
|
46707
|
+
hetvarColor: "rgb(34,12,253)",
|
|
46708
|
+
colorBy: undefined,
|
|
46709
|
+
visibilityWindow: undefined,
|
|
46710
|
+
labelDisplayMode: undefined,
|
|
46711
|
+
type: "variant"
|
|
46712
|
+
}
|
|
46713
|
+
|
|
46696
46714
|
constructor(config, browser) {
|
|
46697
46715
|
super(config, browser);
|
|
46698
46716
|
}
|
|
@@ -46701,41 +46719,18 @@ class VariantTrack extends TrackBase {
|
|
|
46701
46719
|
|
|
46702
46720
|
super.init(config);
|
|
46703
46721
|
|
|
46704
|
-
this.visibilityWindow = config.visibilityWindow;
|
|
46705
|
-
this.displayMode = config.displayMode || "EXPANDED"; // COLLAPSED | EXPANDED | SQUISHED
|
|
46706
|
-
this.labelDisplayMode = config.labelDisplayMode;
|
|
46707
46722
|
this.expandedVariantHeight = config.expandedVariantHeight || config.variantHeight || 10;
|
|
46708
|
-
|
|
46709
|
-
this.squishedCallHeight = config.squishedCallHeight || 1;
|
|
46710
|
-
this.expandedCallHeight = config.expandedCallHeight || 10;
|
|
46711
|
-
this.expandedVGap = config.expandedVGap !== undefined ? config.expandedVGap : 2;
|
|
46712
|
-
this.squishedVGap = config.squishedVGap !== undefined ? config.squishedVGap : 1;
|
|
46713
|
-
this.expandedGroupGap = config.expandedGroupGap || 10;
|
|
46714
|
-
this.squishedGroupGap = config.squishedGroupGap || 5;
|
|
46715
|
-
this.featureHeight = config.featureHeight || 14;
|
|
46716
|
-
this.visibilityWindow = config.visibilityWindow;
|
|
46723
|
+
|
|
46717
46724
|
this.featureSource = FeatureSource(config, this.browser.genome);
|
|
46718
|
-
|
|
46719
|
-
this.noCallColor = config.noCallColor || "rgb(225, 225, 225)";
|
|
46720
|
-
this.nonRefColor = config.nonRefColor || "rgb(200, 200, 215)";
|
|
46721
|
-
this.mixedColor = config.mixedColor || "rgb(200, 220, 200)";
|
|
46722
|
-
this.homrefColor = config.homrefColor || "rgb(200, 200, 200)";
|
|
46723
|
-
this.homvarColor = config.homvarColor || "rgb(17,248,254)";
|
|
46724
|
-
this.hetvarColor = config.hetvarColor || "rgb(34,12,253)";
|
|
46725
|
-
this.sortDirection = "ASC";
|
|
46726
|
-
this.type = config.type || "variant";
|
|
46727
|
-
|
|
46728
|
-
this.colorBy = config.colorBy; // Can be undefined => default
|
|
46725
|
+
|
|
46729
46726
|
this._initColorBy = config.colorBy;
|
|
46730
46727
|
if (config.colorTable) {
|
|
46731
46728
|
this.colorTables = new Map();
|
|
46732
46729
|
this.colorTables.set(config.colorBy, new ColorTable(config.colorTable));
|
|
46733
46730
|
}
|
|
46734
|
-
|
|
46735
46731
|
this._strokecolor = config.strokecolor;
|
|
46736
46732
|
this._context_hook = config.context_hook;
|
|
46737
46733
|
|
|
46738
|
-
this.showGenotypes = config.showGenotypes === undefined ? true : config.showGenotypes;
|
|
46739
46734
|
|
|
46740
46735
|
// The number of variant rows are computed dynamically, but start with "1" by default
|
|
46741
46736
|
this.variantRowCount(1);
|
|
@@ -46745,7 +46740,7 @@ class VariantTrack extends TrackBase {
|
|
|
46745
46740
|
async postInit() {
|
|
46746
46741
|
|
|
46747
46742
|
this.header = await this.getHeader(); // cricital, don't remove'
|
|
46748
|
-
if(this.disposed) return
|
|
46743
|
+
if (this.disposed) return // This track was removed during async load
|
|
46749
46744
|
if (undefined === this.visibilityWindow && this.config.indexed !== false) {
|
|
46750
46745
|
const fn = isFile(this.config.url) ? this.config.url.name : this.config.url;
|
|
46751
46746
|
if (isString(fn) && fn.toLowerCase().includes("gnomad")) {
|
|
@@ -46848,7 +46843,7 @@ class VariantTrack extends TrackBase {
|
|
|
46848
46843
|
this.variantBandHeight = TOP_MARGIN + rowCount * (variantHeight + vGap);
|
|
46849
46844
|
|
|
46850
46845
|
let callSets = this.callSets;
|
|
46851
|
-
if(!callSets && this._f) {
|
|
46846
|
+
if (!callSets && this._f) {
|
|
46852
46847
|
callSets = this._f.callSets; // "Complementary" variant for structural variants
|
|
46853
46848
|
}
|
|
46854
46849
|
const nCalls = this.getCallsetsLength();
|
|
@@ -46888,9 +46883,9 @@ class VariantTrack extends TrackBase {
|
|
|
46888
46883
|
|
|
46889
46884
|
//only paint stroke if a color is defined
|
|
46890
46885
|
let strokecolor = this.getVariantStrokecolor(variant);
|
|
46891
|
-
if (strokecolor){
|
|
46892
|
-
|
|
46893
|
-
|
|
46886
|
+
if (strokecolor) {
|
|
46887
|
+
context.strokeStyle = strokecolor;
|
|
46888
|
+
context.strokeRect(x, y, w, h);
|
|
46894
46889
|
}
|
|
46895
46890
|
|
|
46896
46891
|
// call hook if _context_hook fn is defined
|
|
@@ -46906,7 +46901,7 @@ class VariantTrack extends TrackBase {
|
|
|
46906
46901
|
this.sampleHeight = nVariantRows * (callHeight + vGap); // For each sample, there is a call for each variant at this position
|
|
46907
46902
|
|
|
46908
46903
|
let sampleNumber = 0;
|
|
46909
|
-
if(callSets && variant.calls) {
|
|
46904
|
+
if (callSets && variant.calls) {
|
|
46910
46905
|
for (let callSet of callSets) {
|
|
46911
46906
|
const call = variant.calls[callSet.id];
|
|
46912
46907
|
if (call) {
|
|
@@ -46982,13 +46977,12 @@ class VariantTrack extends TrackBase {
|
|
|
46982
46977
|
} else if ("MIXED" === v.type) {
|
|
46983
46978
|
variantColor = this.mixedColor;
|
|
46984
46979
|
} else {
|
|
46985
|
-
variantColor = this.
|
|
46980
|
+
variantColor = this.color;
|
|
46986
46981
|
}
|
|
46987
46982
|
return variantColor
|
|
46988
46983
|
}
|
|
46989
46984
|
|
|
46990
46985
|
|
|
46991
|
-
|
|
46992
46986
|
getVariantStrokecolor(variant) {
|
|
46993
46987
|
|
|
46994
46988
|
const v = variant._f || variant;
|
|
@@ -47004,13 +46998,13 @@ class VariantTrack extends TrackBase {
|
|
|
47004
46998
|
|
|
47005
46999
|
callContextHook(variant, context, x, y, w, h) {
|
|
47006
47000
|
if (this._context_hook) {
|
|
47007
|
-
|
|
47008
|
-
|
|
47001
|
+
if (typeof this._context_hook === "function") {
|
|
47002
|
+
const v = variant._f || variant;
|
|
47009
47003
|
|
|
47010
|
-
|
|
47011
|
-
|
|
47012
|
-
|
|
47013
|
-
|
|
47004
|
+
context.save();
|
|
47005
|
+
this._context_hook(v, context, x, y, w, h);
|
|
47006
|
+
context.restore();
|
|
47007
|
+
}
|
|
47014
47008
|
}
|
|
47015
47009
|
}
|
|
47016
47010
|
|
|
@@ -47054,7 +47048,7 @@ class VariantTrack extends TrackBase {
|
|
|
47054
47048
|
*/
|
|
47055
47049
|
popupData(clickState, featureList) {
|
|
47056
47050
|
|
|
47057
|
-
if(featureList === undefined) featureList = this.clickedFeatures(clickState);
|
|
47051
|
+
if (featureList === undefined) featureList = this.clickedFeatures(clickState);
|
|
47058
47052
|
const genomicLocation = clickState.genomicLocation;
|
|
47059
47053
|
const genomeID = this.browser.genome.id;
|
|
47060
47054
|
const sampleInformation = this.browser.sampleInformation;
|
|
@@ -47282,12 +47276,12 @@ class VariantTrack extends TrackBase {
|
|
|
47282
47276
|
sendChordsForViewport(viewport) {
|
|
47283
47277
|
const refFrame = viewport.referenceFrame;
|
|
47284
47278
|
let inView;
|
|
47285
|
-
if("all" === refFrame.chr) {
|
|
47279
|
+
if ("all" === refFrame.chr) {
|
|
47286
47280
|
const all = this.featureSource.getAllFeatures();
|
|
47287
47281
|
const arrays = Object.keys(all).map(k => all[k]);
|
|
47288
47282
|
inView = [].concat(...arrays);
|
|
47289
47283
|
} else {
|
|
47290
|
-
|
|
47284
|
+
inView = this.featureSource.featureCache.queryFeatures(refFrame.chr, refFrame.start, refFrame.end);
|
|
47291
47285
|
|
|
47292
47286
|
}
|
|
47293
47287
|
|
|
@@ -57525,7 +57519,7 @@ async function search(browser, string) {
|
|
|
57525
57519
|
let locusObject = parseLocusString(browser, locus);
|
|
57526
57520
|
|
|
57527
57521
|
if (!locusObject) {
|
|
57528
|
-
const feature = browser.genome.featureDB
|
|
57522
|
+
const feature = browser.genome.featureDB.get(locus.toUpperCase());
|
|
57529
57523
|
if (feature) {
|
|
57530
57524
|
locusObject = {
|
|
57531
57525
|
chr: feature.chr,
|
|
@@ -59378,7 +59372,7 @@ class ROITable extends RegionTableBase {
|
|
|
59378
59372
|
|
|
59379
59373
|
renderTable(records) {
|
|
59380
59374
|
|
|
59381
|
-
Array.from(this.
|
|
59375
|
+
Array.from(this.tableRowContainer.querySelectorAll('.igv-roi-table-row')).forEach(el => el.remove());
|
|
59382
59376
|
|
|
59383
59377
|
if (records.length > 0) {
|
|
59384
59378
|
|
|
@@ -59386,7 +59380,7 @@ class ROITable extends RegionTableBase {
|
|
|
59386
59380
|
|
|
59387
59381
|
for (let record of sortedRecords) {
|
|
59388
59382
|
const row = this.tableRowDOM(record);
|
|
59389
|
-
this.
|
|
59383
|
+
this.tableRowContainer.appendChild(row);
|
|
59390
59384
|
}
|
|
59391
59385
|
|
|
59392
59386
|
}
|
|
@@ -59426,14 +59420,14 @@ class ROITable extends RegionTableBase {
|
|
|
59426
59420
|
|
|
59427
59421
|
event.stopPropagation();
|
|
59428
59422
|
|
|
59429
|
-
const selected = this.
|
|
59423
|
+
const selected = this.tableDOM.querySelectorAll('.igv-roi-table-row-selected');
|
|
59430
59424
|
const loci = [];
|
|
59431
59425
|
for (let el of selected) {
|
|
59432
59426
|
const { locus } = parseRegionKey(el.dataset.region);
|
|
59433
59427
|
loci.push(locus);
|
|
59434
59428
|
}
|
|
59435
59429
|
|
|
59436
|
-
for (let el of this.
|
|
59430
|
+
for (let el of this.tableDOM.querySelectorAll('.igv-roi-table-row')) {
|
|
59437
59431
|
el.classList.remove('igv-roi-table-row-selected');
|
|
59438
59432
|
}
|
|
59439
59433
|
|
|
@@ -62066,7 +62060,7 @@ async function createTrack(config, browser) {
|
|
|
62066
62060
|
|
|
62067
62061
|
function embedCSS() {
|
|
62068
62062
|
|
|
62069
|
-
var css = '.igv-navbar {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n box-sizing: border-box;\n width: 100%;\n color: #444;\n font-size: 12px;\n font-family: \"Open Sans\", sans-serif;\n font-weight: 400;\n line-height: 32px;\n padding-left: 8px;\n padding-right: 8px;\n margin-top: 2px;\n margin-bottom: 6px;\n height: 32px;\n border-style: solid;\n border-radius: 3px;\n border-width: thin;\n border-color: #bfbfbf;\n background-color: #f3f3f3;\n}\n.igv-navbar .igv-navbar-left-container {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n height: 32px;\n line-height: 32px;\n}\n.igv-navbar .igv-navbar-left-container .igv-logo {\n width: 34px;\n height: 32px;\n margin-right: 8px;\n}\n.igv-navbar .igv-navbar-left-container .igv-current-genome {\n height: 32px;\n margin-left: 4px;\n margin-right: 4px;\n user-select: none;\n line-height: 32px;\n vertical-align: middle;\n text-align: center;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n height: 100%;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-chromosome-select-widget-container {\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n height: 100%;\n width: 125px;\n margin-right: 4px;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-chromosome-select-widget-container select {\n display: block;\n cursor: pointer;\n width: 100px;\n height: 75%;\n outline: none;\n font-size: 12px;\n font-family: \"Open Sans\", sans-serif;\n font-weight: 400;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n margin-left: 8px;\n height: 22px;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group .igv-search-container {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n width: 210px;\n height: 22px;\n line-height: 22px;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group .igv-search-container input.igv-search-input {\n cursor: text;\n width: 85%;\n height: 22px;\n line-height: 22px;\n font-size: 12px;\n font-family: \"Open Sans\", sans-serif;\n font-weight: 400;\n text-align: left;\n padding-left: 8px;\n margin-right: 8px;\n outline: none;\n border-style: solid;\n border-radius: 3px;\n border-width: thin;\n border-color: #bfbfbf;\n background-color: white;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group .igv-search-container .igv-search-icon-container {\n cursor: pointer;\n height: 16px;\n width: 16px;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group .igv-windowsize-panel-container {\n margin-left: 4px;\n user-select: none;\n}\n.igv-navbar .igv-navbar-right-container {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n height: 32px;\n line-height: 32px;\n}\n.igv-navbar .igv-navbar-right-container .igv-navbar-toggle-button-container {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n height: 100%;\n}\n.igv-navbar .igv-navbar-right-container .igv-navbar-toggle-button-container div {\n margin-left: 0;\n margin-right: 4px;\n}\n.igv-navbar .igv-navbar-right-container .igv-navbar-toggle-button-container div:last-child {\n margin-left: 0;\n margin-right: 0;\n}\n.igv-navbar .igv-navbar-right-container .igv-navbar-toggle-button-container-750 {\n display: none;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget {\n color: #737373;\n font-size: 18px;\n height: 32px;\n line-height: 32px;\n margin-left: 8px;\n user-select: none;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget div {\n cursor: pointer;\n margin-left: unset;\n margin-right: unset;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget div:first-child {\n height: 24px;\n width: 24px;\n margin-left: unset;\n margin-right: 8px;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget div:last-child {\n height: 24px;\n width: 24px;\n margin-left: 8px;\n margin-right: unset;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget div:nth-child(even) {\n display: block;\n height: fit-content;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget input {\n display: block;\n width: 125px;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget svg {\n display: block;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 {\n color: #737373;\n font-size: 18px;\n height: 32px;\n line-height: 32px;\n margin-left: 8px;\n user-select: none;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 div {\n cursor: pointer;\n margin-left: unset;\n margin-right: unset;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 div:first-child {\n height: 24px;\n width: 24px;\n margin-left: unset;\n margin-right: 8px;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 div:last-child {\n height: 24px;\n width: 24px;\n margin-left: 8px;\n margin-right: unset;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 div:nth-child(even) {\n width: 0;\n height: 0;\n display: none;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 input {\n width: 0;\n height: 0;\n display: none;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 svg {\n display: block;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-hidden {\n display: none;\n}\n\n.igv-navbar-button {\n display: block;\n box-sizing: unset;\n padding-left: 6px;\n padding-right: 6px;\n height: 18px;\n text-transform: capitalize;\n user-select: none;\n line-height: 18px;\n text-align: center;\n vertical-align: middle;\n font-family: \"Open Sans\", sans-serif;\n font-size: 11px;\n font-weight: 200;\n color: #737373;\n background-color: #f3f3f3;\n border-color: #737373;\n border-style: solid;\n border-width: thin;\n border-radius: 6px;\n}\n\n.igv-navbar-button-clicked {\n color: white;\n background-color: #737373;\n}\n\n.igv-navbar-button:hover {\n cursor: pointer;\n}\n\n.igv-zoom-in-notice-container {\n z-index: 1024;\n position: absolute;\n top: 8px;\n left: 50%;\n transform: translate(-50%, 0%);\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n background-color: white;\n}\n.igv-zoom-in-notice-container > div {\n padding-left: 4px;\n padding-right: 4px;\n padding-top: 2px;\n padding-bottom: 2px;\n width: 100%;\n height: 100%;\n font-family: \"Open Sans\", sans-serif;\n font-size: 14px;\n font-weight: 400;\n color: #3f3f3f;\n}\n\n.igv-zoom-in-notice {\n position: absolute;\n top: 10px;\n left: 50%;\n}\n.igv-zoom-in-notice div {\n position: relative;\n left: -50%;\n font-family: \"Open Sans\", sans-serif;\n font-size: medium;\n font-weight: 400;\n color: #3f3f3f;\n background-color: rgba(255, 255, 255, 0.51);\n z-index: 64;\n}\n\n.igv-container-spinner {\n position: absolute;\n top: 90%;\n left: 50%;\n transform: translate(-50%, -50%);\n z-index: 1024;\n width: 24px;\n height: 24px;\n pointer-events: none;\n color: #737373;\n}\n\n.igv-multi-locus-close-button {\n position: absolute;\n top: 2px;\n right: 0;\n padding-left: 2px;\n padding-right: 2px;\n width: 12px;\n height: 12px;\n color: #666666;\n background-color: white;\n z-index: 1000;\n}\n.igv-multi-locus-close-button > svg {\n vertical-align: top;\n}\n\n.igv-multi-locus-close-button:hover {\n cursor: pointer;\n color: #434343;\n}\n\n.igv-multi-locus-ruler-label {\n z-index: 64;\n position: absolute;\n top: 2px;\n left: 0;\n width: 100%;\n height: 12px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n}\n.igv-multi-locus-ruler-label > div {\n font-family: \"Open Sans\", sans-serif;\n font-size: 12px;\n color: rgb(16, 16, 16);\n background-color: white;\n}\n.igv-multi-locus-ruler-label > div {\n cursor: pointer;\n}\n\n.igv-multi-locus-ruler-label-square-dot {\n z-index: 64;\n position: absolute;\n left: 50%;\n top: 5%;\n transform: translate(-50%, 0%);\n background-color: white;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-multi-locus-ruler-label-square-dot > div:first-child {\n width: 14px;\n height: 14px;\n}\n.igv-multi-locus-ruler-label-square-dot > div:last-child {\n margin-left: 16px;\n font-family: \"Open Sans\", sans-serif;\n font-size: 14px;\n font-weight: 400;\n color: rgb(16, 16, 16);\n}\n\n.igv-ruler-sweeper {\n display: none;\n pointer-events: none;\n position: absolute;\n top: 26px;\n bottom: 0;\n left: 0;\n width: 0;\n z-index: 99999;\n background-color: rgba(68, 134, 247, 0.25);\n}\n\n.igv-ruler-tooltip {\n pointer-events: none;\n z-index: 128;\n position: absolute;\n top: 0;\n left: 0;\n width: 1px;\n height: 32px;\n background-color: transparent;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-ruler-tooltip > div {\n pointer-events: none;\n width: 128px;\n height: auto;\n padding: 1px;\n color: #373737;\n font-size: 10px;\n font-family: \"Open Sans\", sans-serif;\n font-weight: 400;\n background-color: white;\n border-style: solid;\n border-width: thin;\n border-color: #373737;\n}\n\n.igv-track-label {\n position: absolute;\n left: 8px;\n top: 8px;\n width: auto;\n height: auto;\n max-width: 50%;\n padding-left: 4px;\n padding-right: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n font-family: \"Open Sans\", sans-serif;\n font-size: small;\n font-weight: 400;\n text-align: center;\n user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n border-color: #444;\n border-radius: 2px;\n border-style: solid;\n border-width: thin;\n background-color: white;\n z-index: 128;\n cursor: pointer;\n}\n\n.igv-track-label:hover,\n.igv-track-label:focus,\n.igv-track-label:active {\n background-color: #e8e8e8;\n}\n\n.igv-track-label-popup-shim {\n padding-left: 8px;\n padding-right: 8px;\n padding-top: 4px;\n}\n\n.igv-center-line {\n display: none;\n pointer-events: none;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 50%;\n transform: translateX(-50%);\n z-index: 8;\n user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n border-left-style: dashed;\n border-left-width: thin;\n border-right-style: dashed;\n border-right-width: thin;\n}\n\n.igv-center-line-wide {\n background-color: rgba(0, 0, 0, 0);\n border-left-color: rgba(127, 127, 127, 0.51);\n border-right-color: rgba(127, 127, 127, 0.51);\n}\n\n.igv-center-line-thin {\n background-color: rgba(0, 0, 0, 0);\n border-left-color: rgba(127, 127, 127, 0.51);\n border-right-color: rgba(0, 0, 0, 0);\n}\n\n.igv-cursor-guide-horizontal {\n display: none;\n pointer-events: none;\n user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n position: absolute;\n left: 0;\n right: 0;\n top: 50%;\n height: 1px;\n z-index: 1;\n margin-left: 50px;\n margin-right: 54px;\n border-top-style: dotted;\n border-top-width: thin;\n border-top-color: rgba(127, 127, 127, 0.76);\n}\n\n.igv-cursor-guide-vertical {\n pointer-events: none;\n user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 50%;\n width: 1px;\n z-index: 1;\n border-left-style: dotted;\n border-left-width: thin;\n border-left-color: rgba(127, 127, 127, 0.76);\n display: none;\n}\n\n.igv-user-feedback {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 512px;\n height: 360px;\n z-index: 2048;\n background-color: white;\n border-color: #a2a2a2;\n border-style: solid;\n border-width: thin;\n font-family: \"Open Sans\", sans-serif;\n font-size: medium;\n font-weight: 400;\n color: #444;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-user-feedback div:first-child {\n position: relative;\n height: 24px;\n width: 100%;\n background-color: white;\n border-bottom-color: #a2a2a2;\n border-bottom-style: solid;\n border-bottom-width: thin;\n}\n.igv-user-feedback div:first-child div {\n position: absolute;\n top: 2px;\n width: 16px;\n height: 16px;\n background-color: transparent;\n}\n.igv-user-feedback div:first-child div:first-child {\n left: 8px;\n}\n.igv-user-feedback div:first-child div:last-child {\n cursor: pointer;\n right: 8px;\n}\n.igv-user-feedback div:last-child {\n width: 100%;\n height: calc(100% - 24px);\n border-width: 0;\n}\n.igv-user-feedback div:last-child div {\n width: auto;\n height: auto;\n margin: 8px;\n}\n\n.igv-generic-dialog-container {\n position: absolute;\n top: 0;\n left: 0;\n width: 300px;\n height: 200px;\n border-color: #7F7F7F;\n border-radius: 4px;\n border-style: solid;\n border-width: thin;\n font-family: \"Open Sans\", sans-serif;\n font-size: medium;\n font-weight: 400;\n z-index: 2048;\n background-color: white;\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-generic-dialog-container .igv-generic-dialog-header {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n width: 100%;\n height: 24px;\n cursor: move;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-color: #7F7F7F;\n border-bottom-style: solid;\n border-bottom-width: thin;\n background-color: #eee;\n}\n.igv-generic-dialog-container .igv-generic-dialog-header div {\n margin-right: 4px;\n margin-bottom: 2px;\n height: 12px;\n width: 12px;\n color: #7F7F7F;\n}\n.igv-generic-dialog-container .igv-generic-dialog-header div:hover {\n cursor: pointer;\n color: #444;\n}\n.igv-generic-dialog-container .igv-generic-dialog-one-liner {\n color: #373737;\n width: 95%;\n height: 24px;\n line-height: 24px;\n text-align: left;\n margin-top: 8px;\n padding-left: 8px;\n overflow-wrap: break-word;\n background-color: white;\n}\n.igv-generic-dialog-container .igv-generic-dialog-label-input {\n margin-top: 8px;\n width: 95%;\n height: 24px;\n color: #373737;\n line-height: 24px;\n padding-left: 8px;\n background-color: white;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-generic-dialog-container .igv-generic-dialog-label-input div {\n width: 30%;\n height: 100%;\n font-size: 16px;\n text-align: right;\n padding-right: 8px;\n background-color: white;\n}\n.igv-generic-dialog-container .igv-generic-dialog-label-input input {\n display: block;\n height: 100%;\n width: 100%;\n padding-left: 4px;\n font-family: \"Open Sans\", sans-serif;\n font-weight: 400;\n color: #373737;\n text-align: left;\n outline: none;\n border-style: solid;\n border-width: thin;\n border-color: #7F7F7F;\n background-color: white;\n}\n.igv-generic-dialog-container .igv-generic-dialog-label-input input {\n width: 50%;\n font-size: 16px;\n}\n.igv-generic-dialog-container .igv-generic-dialog-input {\n margin-top: 8px;\n width: calc(100% - 16px);\n height: 24px;\n color: #373737;\n line-height: 24px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n}\n.igv-generic-dialog-container .igv-generic-dialog-input input {\n display: block;\n height: 100%;\n width: 100%;\n padding-left: 4px;\n font-family: \"Open Sans\", sans-serif;\n font-weight: 400;\n color: #373737;\n text-align: left;\n outline: none;\n border-style: solid;\n border-width: thin;\n border-color: #7F7F7F;\n background-color: white;\n}\n.igv-generic-dialog-container .igv-generic-dialog-input input {\n font-size: 16px;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel {\n width: 100%;\n height: 28px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div {\n margin-top: 32px;\n color: white;\n font-family: \"Open Sans\", sans-serif;\n font-size: 14px;\n font-weight: 400;\n width: 75px;\n height: 28px;\n line-height: 28px;\n text-align: center;\n border-color: transparent;\n border-style: solid;\n border-width: thin;\n border-radius: 2px;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div:first-child {\n margin-left: 32px;\n margin-right: 0;\n background-color: #5ea4e0;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div:last-child {\n margin-left: 0;\n margin-right: 32px;\n background-color: #c4c4c4;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div:first-child:hover {\n cursor: pointer;\n background-color: #3b5c7f;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div:last-child:hover {\n cursor: pointer;\n background-color: #7f7f7f;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok {\n width: 100%;\n height: 36px;\n margin-top: 32px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok div {\n width: 98px;\n height: 36px;\n line-height: 36px;\n text-align: center;\n color: white;\n font-family: \"Open Sans\", sans-serif;\n font-size: medium;\n font-weight: 400;\n border-color: white;\n border-style: solid;\n border-width: thin;\n border-radius: 4px;\n background-color: #2B81AF;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok div:hover {\n cursor: pointer;\n background-color: #25597f;\n}\n\n.igv-generic-container {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 2048;\n background-color: white;\n cursor: pointer;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-generic-container div:first-child {\n cursor: move;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n height: 24px;\n width: 100%;\n background-color: #dddddd;\n}\n.igv-generic-container div:first-child i {\n display: block;\n color: #5f5f5f;\n cursor: pointer;\n width: 14px;\n height: 14px;\n margin-right: 8px;\n margin-bottom: 4px;\n}\n\n.igv-menu-popup {\n position: absolute;\n top: 0;\n left: 0;\n width: max-content;\n z-index: 4096;\n cursor: pointer;\n font-family: \"Open Sans\", sans-serif;\n font-size: small;\n font-weight: 400;\n color: #4b4b4b;\n background: white;\n border-radius: 4px;\n border-color: #7F7F7F;\n border-style: solid;\n border-width: thin;\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-end;\n text-align: left;\n}\n.igv-menu-popup > div:not(:first-child) {\n width: 100%;\n}\n.igv-menu-popup > div:not(:first-child) > div {\n background: white;\n}\n.igv-menu-popup > div:not(:first-child) > div.context-menu {\n padding-left: 4px;\n padding-right: 4px;\n}\n.igv-menu-popup > div:not(:first-child) > div:last-child {\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n border-bottom-color: transparent;\n border-bottom-style: solid;\n border-bottom-width: thin;\n}\n.igv-menu-popup > div:not(:first-child) > div:hover {\n background: #efefef;\n}\n\n.igv-menu-popup-shim {\n padding-left: 8px;\n padding-right: 8px;\n padding-bottom: 1px;\n padding-top: 1px;\n}\n\n.igv-menu-popup-header {\n position: relative;\n width: 100%;\n height: 24px;\n cursor: move;\n border-top-color: transparent;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-color: #7F7F7F;\n border-bottom-style: solid;\n border-bottom-width: thin;\n background-color: #eee;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n}\n.igv-menu-popup-header div {\n margin-right: 4px;\n height: 12px;\n width: 12px;\n color: #7F7F7F;\n}\n.igv-menu-popup-header div:hover {\n cursor: pointer;\n color: #444;\n}\n\n.igv-menu-popup-check-container {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n width: 100%;\n height: 20px;\n margin-right: 4px;\n background-color: transparent;\n}\n.igv-menu-popup-check-container div {\n padding-top: 2px;\n padding-left: 8px;\n}\n.igv-menu-popup-check-container div:first-child {\n position: relative;\n width: 12px;\n height: 12px;\n}\n.igv-menu-popup-check-container div:first-child svg {\n position: absolute;\n width: 12px;\n height: 12px;\n}\n\n.igv-user-feedback {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 512px;\n height: 360px;\n z-index: 2048;\n background-color: white;\n border-color: #a2a2a2;\n border-style: solid;\n border-width: thin;\n font-family: \"Open Sans\", sans-serif;\n font-size: medium;\n font-weight: 400;\n color: #444;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-user-feedback div:first-child {\n position: relative;\n height: 24px;\n width: 100%;\n background-color: white;\n border-bottom-color: #a2a2a2;\n border-bottom-style: solid;\n border-bottom-width: thin;\n}\n.igv-user-feedback div:first-child div {\n position: absolute;\n top: 2px;\n width: 16px;\n height: 16px;\n background-color: transparent;\n}\n.igv-user-feedback div:first-child div:first-child {\n left: 8px;\n}\n.igv-user-feedback div:first-child div:last-child {\n cursor: pointer;\n right: 8px;\n}\n.igv-user-feedback div:last-child {\n width: 100%;\n height: calc(100% - 24px);\n border-width: 0;\n}\n.igv-user-feedback div:last-child div {\n width: auto;\n height: auto;\n margin: 8px;\n}\n\n.igv-loading-spinner-container {\n z-index: 1024;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 32px;\n height: 32px;\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n}\n.igv-loading-spinner-container > div {\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n border-radius: 50%;\n border: 4px solid rgba(128, 128, 128, 0.5);\n border-top-color: rgb(255, 255, 255);\n animation: spin 1s ease-in-out infinite;\n -webkit-animation: spin 1s ease-in-out infinite;\n}\n\n@keyframes spin {\n to {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n@-webkit-keyframes spin {\n to {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n.igv-roi-menu-next-gen {\n position: absolute;\n z-index: 512;\n font-family: \"Open Sans\", sans-serif;\n font-size: small;\n font-weight: 400;\n color: #4b4b4b;\n background-color: white;\n width: 192px;\n border-radius: 4px;\n border-color: #7F7F7F;\n border-style: solid;\n border-width: thin;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n}\n.igv-roi-menu-next-gen > div:first-child {\n height: 24px;\n border-top-color: transparent;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-color: #7F7F7F;\n border-bottom-style: solid;\n border-bottom-width: thin;\n background-color: #eee;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n}\n.igv-roi-menu-next-gen > div:first-child > div {\n margin-right: 4px;\n height: 12px;\n width: 12px;\n color: #7F7F7F;\n}\n.igv-roi-menu-next-gen > div:first-child > div:hover {\n cursor: pointer;\n color: #444;\n}\n.igv-roi-menu-next-gen > div:last-child {\n background-color: white;\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n border-bottom-color: transparent;\n border-bottom-style: solid;\n border-bottom-width: 0;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n text-align: start;\n vertical-align: middle;\n}\n.igv-roi-menu-next-gen > div:last-child > div {\n height: 24px;\n padding-left: 4px;\n border-bottom-style: solid;\n border-bottom-width: thin;\n border-bottom-color: #7f7f7f;\n}\n.igv-roi-menu-next-gen > div:last-child > div:not(:first-child):hover {\n background-color: rgba(127, 127, 127, 0.1);\n}\n.igv-roi-menu-next-gen > div:last-child div:first-child {\n font-style: italic;\n text-align: center;\n padding-right: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.igv-roi-menu-next-gen > div:last-child > div:last-child {\n border-bottom-width: 0;\n border-bottom-color: transparent;\n}\n\n.igv-roi-placeholder {\n font-style: normal;\n color: rgba(75, 75, 75, 0.6);\n}\n\n.igv-roi-table {\n position: absolute;\n z-index: 1024;\n width: fit-content;\n border-color: #7f7f7f;\n border-radius: 4px;\n border-style: solid;\n border-width: thin;\n font-family: \"Open Sans\", sans-serif;\n font-size: 12px;\n font-weight: 400;\n background-color: white;\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n cursor: default;\n}\n.igv-roi-table > div {\n height: 24px;\n font-size: 14px;\n text-align: start;\n vertical-align: middle;\n line-height: 24px;\n}\n.igv-roi-table > div:first-child {\n border-color: transparent;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-top-width: 0;\n border-bottom-color: #7f7f7f;\n border-bottom-style: solid;\n border-bottom-width: thin;\n background-color: #eee;\n cursor: move;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n}\n.igv-roi-table > div:first-child > div:first-child {\n text-align: center;\n width: calc(100% - 4px - 12px);\n}\n.igv-roi-table > div:first-child > div:last-child {\n margin-right: 4px;\n margin-bottom: 2px;\n height: 12px;\n width: 12px;\n color: #7f7f7f;\n}\n.igv-roi-table > div:first-child > div:last-child > svg {\n display: block;\n}\n.igv-roi-table > div:first-child > div:last-child:hover {\n cursor: pointer;\n color: #444;\n}\n.igv-roi-table > .igv-roi-table-description {\n height: fit-content;\n padding: 4px;\n margin-left: 4px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n word-break: break-all;\n max-height: 300px;\n overflow-y: auto;\n}\n.igv-roi-table > .igv-roi-table-goto-explainer {\n margin-left: 4px;\n color: #7F7F7F;\n font-style: italic;\n border-top: solid lightgray;\n margin-top: 5px;\n}\n.igv-roi-table > .igv-roi-table-column-titles {\n height: 24px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: stretch;\n align-items: stretch;\n padding-right: 16px;\n background-color: white;\n border-top-color: #7f7f7f;\n border-top-style: solid;\n border-top-width: thin;\n border-bottom-color: #7f7f7f;\n border-bottom-style: solid;\n border-bottom-width: thin;\n}\n.igv-roi-table > .igv-roi-table-column-titles > div {\n font-size: 14px;\n vertical-align: middle;\n line-height: 24px;\n text-align: left;\n margin-left: 4px;\n height: 24px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n border-right-color: #7f7f7f;\n border-right-style: solid;\n border-right-width: thin;\n}\n.igv-roi-table > .igv-roi-table-column-titles > div:last-child {\n border-right: unset;\n}\n.igv-roi-table > .igv-roi-table-row-container {\n overflow: scroll;\n min-height: 72px;\n height: 144px;\n max-height: 480px;\n background-color: white;\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row {\n height: 24px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: stretch;\n align-items: stretch;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row > div {\n font-size: 14px;\n vertical-align: middle;\n line-height: 24px;\n text-align: left;\n margin-left: 4px;\n height: 24px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n border-right-color: transparent;\n border-right-style: solid;\n border-right-width: thin;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row > div:last-child {\n border-right: unset;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row-hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n.igv-roi-table > div:last-child {\n height: 32px;\n line-height: 32px;\n border-top-color: #7f7f7f;\n border-top-style: solid;\n border-top-width: thin;\n border-bottom-color: transparent;\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n border-bottom-width: 0;\n background-color: #eee;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n}\n\n.igv-roi-table-row-selected {\n background-color: rgba(0, 0, 0, 0.125);\n}\n\n.igv-roi-table-button {\n cursor: pointer;\n height: 20px;\n user-select: none;\n line-height: 20px;\n text-align: center;\n vertical-align: middle;\n font-family: \"Open Sans\", sans-serif;\n font-size: 13px;\n font-weight: 400;\n color: black;\n padding-left: 6px;\n padding-right: 6px;\n background-color: rgb(239, 239, 239);\n border-color: black;\n border-style: solid;\n border-width: thin;\n border-radius: 3px;\n}\n\n.igv-roi-table-button:hover {\n font-weight: 400;\n background-color: rgba(0, 0, 0, 0.13);\n}\n\n.igv-roi-region {\n z-index: 64;\n position: absolute;\n top: 0;\n bottom: 0;\n pointer-events: none;\n overflow: visible;\n margin-top: 44px;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n}\n.igv-roi-region > div {\n position: relative;\n width: 100%;\n height: 8px;\n pointer-events: auto;\n}\n\n.igv-roi-menu {\n position: absolute;\n z-index: 1024;\n width: 144px;\n border-color: #7f7f7f;\n border-radius: 4px;\n border-style: solid;\n border-width: thin;\n font-family: \"Open Sans\", sans-serif;\n background-color: white;\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n}\n.igv-roi-menu > div:not(:last-child) {\n border-bottom-color: rgba(128, 128, 128, 0.5);\n border-bottom-style: solid;\n border-bottom-width: thin;\n}\n.igv-roi-menu > div:first-child {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-top-color: transparent;\n border-top-style: solid;\n border-top-width: 0;\n}\n.igv-roi-menu > div:last-child {\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n border-bottom-color: transparent;\n border-bottom-style: solid;\n border-bottom-width: 0;\n}\n\n.igv-roi-menu-row {\n height: 24px;\n padding-left: 8px;\n font-size: small;\n text-align: start;\n vertical-align: middle;\n line-height: 24px;\n background-color: white;\n}\n\n.igv-roi-menu-row-edit-description {\n width: -webkit-fill-available;\n font-size: small;\n text-align: start;\n vertical-align: middle;\n background-color: white;\n padding-left: 4px;\n padding-right: 4px;\n padding-bottom: 4px;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: stretch;\n align-items: stretch;\n}\n.igv-roi-menu-row-edit-description > label {\n margin-left: 2px;\n margin-bottom: 0;\n display: block;\n width: -webkit-fill-available;\n}\n.igv-roi-menu-row-edit-description > input {\n display: block;\n margin-left: 2px;\n margin-right: 2px;\n margin-bottom: 1px;\n width: -webkit-fill-available;\n}\n\n.igv-container {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n padding-top: 4px;\n user-select: none;\n -webkit-user-select: none;\n -ms-user-select: none;\n}\n\n.igv-viewport {\n position: relative;\n margin-top: 5px;\n line-height: 1;\n overflow-x: hidden;\n overflow-y: hidden;\n}\n\n.igv-viewport-content {\n position: relative;\n width: 100%;\n}\n.igv-viewport-content > canvas {\n position: relative;\n display: block;\n}\n\n.igv-column-container {\n position: relative;\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n width: 100%;\n}\n\n.igv-column-shim {\n width: 1px;\n margin-left: 2px;\n margin-right: 2px;\n background-color: #545453;\n}\n\n.igv-column {\n position: relative;\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n}\n\n.igv-axis-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n width: 50px;\n}\n.igv-axis-column > div {\n margin-top: 5px;\n width: 100%;\n}\n\n.igv-sample-name-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n}\n\n.igv-scrollbar-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n width: 14px;\n}\n.igv-scrollbar-column > div {\n position: relative;\n margin-top: 5px;\n width: 14px;\n}\n.igv-scrollbar-column > div > div {\n cursor: pointer;\n position: absolute;\n top: 0;\n left: 2px;\n width: 8px;\n border-width: 1px;\n border-style: solid;\n border-color: #c4c4c4;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n}\n.igv-scrollbar-column > div > div:hover {\n background-color: #c4c4c4;\n}\n\n.igv-track-drag-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n width: 12px;\n background-color: white;\n}\n.igv-track-drag-column > .igv-track-drag-handle {\n z-index: 512;\n position: relative;\n cursor: pointer;\n margin-top: 5px;\n width: 100%;\n border-style: solid;\n border-width: 0;\n border-top-right-radius: 6px;\n border-bottom-right-radius: 6px;\n background-color: #c4c4c4;\n}\n.igv-track-drag-column .igv-track-drag-handle-hover {\n background-color: #787878;\n}\n.igv-track-drag-column > .igv-track-drag-shim {\n position: relative;\n margin-top: 5px;\n width: 100%;\n border-style: solid;\n border-width: 0;\n}\n\n.igv-gear-menu-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n width: 28px;\n}\n.igv-gear-menu-column > div {\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n margin-top: 5px;\n width: 100%;\n background: white;\n}\n.igv-gear-menu-column > div > div {\n position: relative;\n margin-top: 4px;\n width: 16px;\n height: 16px;\n color: #7F7F7F;\n}\n.igv-gear-menu-column > div > div:hover {\n cursor: pointer;\n color: #444;\n}\n\n/*# sourceMappingURL=dom.css.map */\n';
|
|
62063
|
+
var css = '.igv-navbar {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n box-sizing: border-box;\n width: 100%;\n color: #444;\n font-size: 12px;\n font-family: \"Open Sans\", sans-serif;\n font-weight: 400;\n line-height: 32px;\n padding-left: 8px;\n padding-right: 8px;\n margin-top: 2px;\n margin-bottom: 6px;\n height: 32px;\n border-style: solid;\n border-radius: 3px;\n border-width: thin;\n border-color: #bfbfbf;\n background-color: #f3f3f3;\n}\n.igv-navbar .igv-navbar-left-container {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n height: 32px;\n line-height: 32px;\n}\n.igv-navbar .igv-navbar-left-container .igv-logo {\n width: 34px;\n height: 32px;\n margin-right: 8px;\n}\n.igv-navbar .igv-navbar-left-container .igv-current-genome {\n height: 32px;\n margin-left: 4px;\n margin-right: 4px;\n user-select: none;\n line-height: 32px;\n vertical-align: middle;\n text-align: center;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n height: 100%;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-chromosome-select-widget-container {\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n height: 100%;\n width: 125px;\n margin-right: 4px;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-chromosome-select-widget-container select {\n display: block;\n cursor: pointer;\n width: 100px;\n height: 75%;\n outline: none;\n font-size: 12px;\n font-family: \"Open Sans\", sans-serif;\n font-weight: 400;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n margin-left: 8px;\n height: 22px;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group .igv-search-container {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n width: 210px;\n height: 22px;\n line-height: 22px;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group .igv-search-container input.igv-search-input {\n cursor: text;\n width: 85%;\n height: 22px;\n line-height: 22px;\n font-size: 12px;\n font-family: \"Open Sans\", sans-serif;\n font-weight: 400;\n text-align: left;\n padding-left: 8px;\n margin-right: 8px;\n outline: none;\n border-style: solid;\n border-radius: 3px;\n border-width: thin;\n border-color: #bfbfbf;\n background-color: white;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group .igv-search-container .igv-search-icon-container {\n cursor: pointer;\n height: 16px;\n width: 16px;\n}\n.igv-navbar .igv-navbar-left-container .igv-navbar-genomic-location .igv-locus-size-group .igv-windowsize-panel-container {\n margin-left: 4px;\n user-select: none;\n}\n.igv-navbar .igv-navbar-right-container {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n height: 32px;\n line-height: 32px;\n}\n.igv-navbar .igv-navbar-right-container .igv-navbar-toggle-button-container {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n height: 100%;\n}\n.igv-navbar .igv-navbar-right-container .igv-navbar-toggle-button-container div {\n margin-left: 0;\n margin-right: 4px;\n}\n.igv-navbar .igv-navbar-right-container .igv-navbar-toggle-button-container div:last-child {\n margin-left: 0;\n margin-right: 0;\n}\n.igv-navbar .igv-navbar-right-container .igv-navbar-toggle-button-container-750 {\n display: none;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget {\n color: #737373;\n font-size: 18px;\n height: 32px;\n line-height: 32px;\n margin-left: 8px;\n user-select: none;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget div {\n cursor: pointer;\n margin-left: unset;\n margin-right: unset;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget div:first-child {\n height: 24px;\n width: 24px;\n margin-left: unset;\n margin-right: 8px;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget div:last-child {\n height: 24px;\n width: 24px;\n margin-left: 8px;\n margin-right: unset;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget div:nth-child(even) {\n display: block;\n height: fit-content;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget input {\n display: block;\n width: 125px;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget svg {\n display: block;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 {\n color: #737373;\n font-size: 18px;\n height: 32px;\n line-height: 32px;\n margin-left: 8px;\n user-select: none;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 div {\n cursor: pointer;\n margin-left: unset;\n margin-right: unset;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 div:first-child {\n height: 24px;\n width: 24px;\n margin-left: unset;\n margin-right: 8px;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 div:last-child {\n height: 24px;\n width: 24px;\n margin-left: 8px;\n margin-right: unset;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 div:nth-child(even) {\n width: 0;\n height: 0;\n display: none;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 input {\n width: 0;\n height: 0;\n display: none;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-900 svg {\n display: block;\n}\n.igv-navbar .igv-navbar-right-container .igv-zoom-widget-hidden {\n display: none;\n}\n\n.igv-navbar-button {\n display: block;\n box-sizing: unset;\n padding-left: 6px;\n padding-right: 6px;\n height: 18px;\n text-transform: capitalize;\n user-select: none;\n line-height: 18px;\n text-align: center;\n vertical-align: middle;\n font-family: \"Open Sans\", sans-serif;\n font-size: 11px;\n font-weight: 200;\n color: #737373;\n background-color: #f3f3f3;\n border-color: #737373;\n border-style: solid;\n border-width: thin;\n border-radius: 6px;\n}\n\n.igv-navbar-button-clicked {\n color: white;\n background-color: #737373;\n}\n\n.igv-navbar-button:hover {\n cursor: pointer;\n}\n\n.igv-zoom-in-notice-container {\n z-index: 1024;\n position: absolute;\n top: 8px;\n left: 50%;\n transform: translate(-50%, 0%);\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n background-color: white;\n}\n.igv-zoom-in-notice-container > div {\n padding-left: 4px;\n padding-right: 4px;\n padding-top: 2px;\n padding-bottom: 2px;\n width: 100%;\n height: 100%;\n font-family: \"Open Sans\", sans-serif;\n font-size: 14px;\n font-weight: 400;\n color: #3f3f3f;\n}\n\n.igv-zoom-in-notice {\n position: absolute;\n top: 10px;\n left: 50%;\n}\n.igv-zoom-in-notice div {\n position: relative;\n left: -50%;\n font-family: \"Open Sans\", sans-serif;\n font-size: medium;\n font-weight: 400;\n color: #3f3f3f;\n background-color: rgba(255, 255, 255, 0.51);\n z-index: 64;\n}\n\n.igv-container-spinner {\n position: absolute;\n top: 90%;\n left: 50%;\n transform: translate(-50%, -50%);\n z-index: 1024;\n width: 24px;\n height: 24px;\n pointer-events: none;\n color: #737373;\n}\n\n.igv-multi-locus-close-button {\n position: absolute;\n top: 2px;\n right: 0;\n padding-left: 2px;\n padding-right: 2px;\n width: 12px;\n height: 12px;\n color: #666666;\n background-color: white;\n z-index: 1000;\n}\n.igv-multi-locus-close-button > svg {\n vertical-align: top;\n}\n\n.igv-multi-locus-close-button:hover {\n cursor: pointer;\n color: #434343;\n}\n\n.igv-multi-locus-ruler-label {\n z-index: 64;\n position: absolute;\n top: 2px;\n left: 0;\n width: 100%;\n height: 12px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n}\n.igv-multi-locus-ruler-label > div {\n font-family: \"Open Sans\", sans-serif;\n font-size: 12px;\n color: rgb(16, 16, 16);\n background-color: white;\n}\n.igv-multi-locus-ruler-label > div {\n cursor: pointer;\n}\n\n.igv-multi-locus-ruler-label-square-dot {\n z-index: 64;\n position: absolute;\n left: 50%;\n top: 5%;\n transform: translate(-50%, 0%);\n background-color: white;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-multi-locus-ruler-label-square-dot > div:first-child {\n width: 14px;\n height: 14px;\n}\n.igv-multi-locus-ruler-label-square-dot > div:last-child {\n margin-left: 16px;\n font-family: \"Open Sans\", sans-serif;\n font-size: 14px;\n font-weight: 400;\n color: rgb(16, 16, 16);\n}\n\n.igv-ruler-sweeper {\n display: none;\n pointer-events: none;\n position: absolute;\n top: 26px;\n bottom: 0;\n left: 0;\n width: 0;\n z-index: 99999;\n background-color: rgba(68, 134, 247, 0.25);\n}\n\n.igv-ruler-tooltip {\n pointer-events: none;\n z-index: 128;\n position: absolute;\n top: 0;\n left: 0;\n width: 1px;\n height: 32px;\n background-color: transparent;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-ruler-tooltip > div {\n pointer-events: none;\n width: 128px;\n height: auto;\n padding: 1px;\n color: #373737;\n font-size: 10px;\n font-family: \"Open Sans\", sans-serif;\n font-weight: 400;\n background-color: white;\n border-style: solid;\n border-width: thin;\n border-color: #373737;\n}\n\n.igv-track-label {\n position: absolute;\n left: 8px;\n top: 8px;\n width: auto;\n height: auto;\n max-width: 50%;\n padding-left: 4px;\n padding-right: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n font-family: \"Open Sans\", sans-serif;\n font-size: small;\n font-weight: 400;\n text-align: center;\n user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n border-color: #444;\n border-radius: 2px;\n border-style: solid;\n border-width: thin;\n background-color: white;\n z-index: 128;\n cursor: pointer;\n}\n\n.igv-track-label:hover,\n.igv-track-label:focus,\n.igv-track-label:active {\n background-color: #e8e8e8;\n}\n\n.igv-track-label-popup-shim {\n padding-left: 8px;\n padding-right: 8px;\n padding-top: 4px;\n}\n\n.igv-center-line {\n display: none;\n pointer-events: none;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 50%;\n transform: translateX(-50%);\n z-index: 8;\n user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n border-left-style: dashed;\n border-left-width: thin;\n border-right-style: dashed;\n border-right-width: thin;\n}\n\n.igv-center-line-wide {\n background-color: rgba(0, 0, 0, 0);\n border-left-color: rgba(127, 127, 127, 0.51);\n border-right-color: rgba(127, 127, 127, 0.51);\n}\n\n.igv-center-line-thin {\n background-color: rgba(0, 0, 0, 0);\n border-left-color: rgba(127, 127, 127, 0.51);\n border-right-color: rgba(0, 0, 0, 0);\n}\n\n.igv-cursor-guide-horizontal {\n display: none;\n pointer-events: none;\n user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n position: absolute;\n left: 0;\n right: 0;\n top: 50%;\n height: 1px;\n z-index: 1;\n margin-left: 50px;\n margin-right: 54px;\n border-top-style: dotted;\n border-top-width: thin;\n border-top-color: rgba(127, 127, 127, 0.76);\n}\n\n.igv-cursor-guide-vertical {\n pointer-events: none;\n user-select: none;\n -moz-user-select: none;\n -webkit-user-select: none;\n position: absolute;\n top: 0;\n bottom: 0;\n left: 50%;\n width: 1px;\n z-index: 1;\n border-left-style: dotted;\n border-left-width: thin;\n border-left-color: rgba(127, 127, 127, 0.76);\n display: none;\n}\n\n.igv-user-feedback {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 512px;\n height: 360px;\n z-index: 2048;\n background-color: white;\n border-color: #a2a2a2;\n border-style: solid;\n border-width: thin;\n font-family: \"Open Sans\", sans-serif;\n font-size: medium;\n font-weight: 400;\n color: #444;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-user-feedback div:first-child {\n position: relative;\n height: 24px;\n width: 100%;\n background-color: white;\n border-bottom-color: #a2a2a2;\n border-bottom-style: solid;\n border-bottom-width: thin;\n}\n.igv-user-feedback div:first-child div {\n position: absolute;\n top: 2px;\n width: 16px;\n height: 16px;\n background-color: transparent;\n}\n.igv-user-feedback div:first-child div:first-child {\n left: 8px;\n}\n.igv-user-feedback div:first-child div:last-child {\n cursor: pointer;\n right: 8px;\n}\n.igv-user-feedback div:last-child {\n width: 100%;\n height: calc(100% - 24px);\n border-width: 0;\n}\n.igv-user-feedback div:last-child div {\n width: auto;\n height: auto;\n margin: 8px;\n}\n\n.igv-generic-dialog-container {\n position: absolute;\n top: 0;\n left: 0;\n width: 300px;\n height: 200px;\n border-color: #7F7F7F;\n border-radius: 4px;\n border-style: solid;\n border-width: thin;\n font-family: \"Open Sans\", sans-serif;\n font-size: medium;\n font-weight: 400;\n z-index: 2048;\n background-color: white;\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-generic-dialog-container .igv-generic-dialog-header {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n width: 100%;\n height: 24px;\n cursor: move;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-color: #7F7F7F;\n border-bottom-style: solid;\n border-bottom-width: thin;\n background-color: #eee;\n}\n.igv-generic-dialog-container .igv-generic-dialog-header div {\n margin-right: 4px;\n margin-bottom: 2px;\n height: 12px;\n width: 12px;\n color: #7F7F7F;\n}\n.igv-generic-dialog-container .igv-generic-dialog-header div:hover {\n cursor: pointer;\n color: #444;\n}\n.igv-generic-dialog-container .igv-generic-dialog-one-liner {\n color: #373737;\n width: 95%;\n height: 24px;\n line-height: 24px;\n text-align: left;\n margin-top: 8px;\n padding-left: 8px;\n overflow-wrap: break-word;\n background-color: white;\n}\n.igv-generic-dialog-container .igv-generic-dialog-label-input {\n margin-top: 8px;\n width: 95%;\n height: 24px;\n color: #373737;\n line-height: 24px;\n padding-left: 8px;\n background-color: white;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-generic-dialog-container .igv-generic-dialog-label-input div {\n width: 30%;\n height: 100%;\n font-size: 16px;\n text-align: right;\n padding-right: 8px;\n background-color: white;\n}\n.igv-generic-dialog-container .igv-generic-dialog-label-input input {\n display: block;\n height: 100%;\n width: 100%;\n padding-left: 4px;\n font-family: \"Open Sans\", sans-serif;\n font-weight: 400;\n color: #373737;\n text-align: left;\n outline: none;\n border-style: solid;\n border-width: thin;\n border-color: #7F7F7F;\n background-color: white;\n}\n.igv-generic-dialog-container .igv-generic-dialog-label-input input {\n width: 50%;\n font-size: 16px;\n}\n.igv-generic-dialog-container .igv-generic-dialog-input {\n margin-top: 8px;\n width: calc(100% - 16px);\n height: 24px;\n color: #373737;\n line-height: 24px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n}\n.igv-generic-dialog-container .igv-generic-dialog-input input {\n display: block;\n height: 100%;\n width: 100%;\n padding-left: 4px;\n font-family: \"Open Sans\", sans-serif;\n font-weight: 400;\n color: #373737;\n text-align: left;\n outline: none;\n border-style: solid;\n border-width: thin;\n border-color: #7F7F7F;\n background-color: white;\n}\n.igv-generic-dialog-container .igv-generic-dialog-input input {\n font-size: 16px;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel {\n width: 100%;\n height: 28px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div {\n margin-top: 32px;\n color: white;\n font-family: \"Open Sans\", sans-serif;\n font-size: 14px;\n font-weight: 400;\n width: 75px;\n height: 28px;\n line-height: 28px;\n text-align: center;\n border-color: transparent;\n border-style: solid;\n border-width: thin;\n border-radius: 2px;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div:first-child {\n margin-left: 32px;\n margin-right: 0;\n background-color: #5ea4e0;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div:last-child {\n margin-left: 0;\n margin-right: 32px;\n background-color: #c4c4c4;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div:first-child:hover {\n cursor: pointer;\n background-color: #3b5c7f;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok-cancel div:last-child:hover {\n cursor: pointer;\n background-color: #7f7f7f;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok {\n width: 100%;\n height: 36px;\n margin-top: 32px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok div {\n width: 98px;\n height: 36px;\n line-height: 36px;\n text-align: center;\n color: white;\n font-family: \"Open Sans\", sans-serif;\n font-size: medium;\n font-weight: 400;\n border-color: white;\n border-style: solid;\n border-width: thin;\n border-radius: 4px;\n background-color: #2B81AF;\n}\n.igv-generic-dialog-container .igv-generic-dialog-ok div:hover {\n cursor: pointer;\n background-color: #25597f;\n}\n\n.igv-generic-container {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 2048;\n background-color: white;\n cursor: pointer;\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-generic-container div:first-child {\n cursor: move;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n height: 24px;\n width: 100%;\n background-color: #dddddd;\n}\n.igv-generic-container div:first-child i {\n display: block;\n color: #5f5f5f;\n cursor: pointer;\n width: 14px;\n height: 14px;\n margin-right: 8px;\n margin-bottom: 4px;\n}\n\n.igv-menu-popup {\n position: absolute;\n top: 0;\n left: 0;\n width: max-content;\n z-index: 4096;\n cursor: pointer;\n font-family: \"Open Sans\", sans-serif;\n font-size: small;\n font-weight: 400;\n color: #4b4b4b;\n background: white;\n border-radius: 4px;\n border-color: #7F7F7F;\n border-style: solid;\n border-width: thin;\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-end;\n text-align: left;\n}\n.igv-menu-popup > div:not(:first-child) {\n width: 100%;\n}\n.igv-menu-popup > div:not(:first-child) > div {\n background: white;\n}\n.igv-menu-popup > div:not(:first-child) > div.context-menu {\n padding-left: 4px;\n padding-right: 4px;\n}\n.igv-menu-popup > div:not(:first-child) > div:last-child {\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n border-bottom-color: transparent;\n border-bottom-style: solid;\n border-bottom-width: thin;\n}\n.igv-menu-popup > div:not(:first-child) > div:hover {\n background: #efefef;\n}\n\n.igv-menu-popup-shim {\n padding-left: 8px;\n padding-right: 8px;\n padding-bottom: 1px;\n padding-top: 1px;\n}\n\n.igv-menu-popup-header {\n position: relative;\n width: 100%;\n height: 24px;\n cursor: move;\n border-top-color: transparent;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-color: #7F7F7F;\n border-bottom-style: solid;\n border-bottom-width: thin;\n background-color: #eee;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n}\n.igv-menu-popup-header div {\n margin-right: 4px;\n height: 12px;\n width: 12px;\n color: #7F7F7F;\n}\n.igv-menu-popup-header div:hover {\n cursor: pointer;\n color: #444;\n}\n\n.igv-menu-popup-check-container {\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n width: 100%;\n height: 20px;\n margin-right: 4px;\n background-color: transparent;\n}\n.igv-menu-popup-check-container div {\n padding-top: 2px;\n padding-left: 8px;\n}\n.igv-menu-popup-check-container div:first-child {\n position: relative;\n width: 12px;\n height: 12px;\n}\n.igv-menu-popup-check-container div:first-child svg {\n position: absolute;\n width: 12px;\n height: 12px;\n}\n\n.igv-user-feedback {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 512px;\n height: 360px;\n z-index: 2048;\n background-color: white;\n border-color: #a2a2a2;\n border-style: solid;\n border-width: thin;\n font-family: \"Open Sans\", sans-serif;\n font-size: medium;\n font-weight: 400;\n color: #444;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n}\n.igv-user-feedback div:first-child {\n position: relative;\n height: 24px;\n width: 100%;\n background-color: white;\n border-bottom-color: #a2a2a2;\n border-bottom-style: solid;\n border-bottom-width: thin;\n}\n.igv-user-feedback div:first-child div {\n position: absolute;\n top: 2px;\n width: 16px;\n height: 16px;\n background-color: transparent;\n}\n.igv-user-feedback div:first-child div:first-child {\n left: 8px;\n}\n.igv-user-feedback div:first-child div:last-child {\n cursor: pointer;\n right: 8px;\n}\n.igv-user-feedback div:last-child {\n width: 100%;\n height: calc(100% - 24px);\n border-width: 0;\n}\n.igv-user-feedback div:last-child div {\n width: auto;\n height: auto;\n margin: 8px;\n}\n\n.igv-loading-spinner-container {\n z-index: 1024;\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 32px;\n height: 32px;\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: center;\n align-items: center;\n}\n.igv-loading-spinner-container > div {\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n border-radius: 50%;\n border: 4px solid rgba(128, 128, 128, 0.5);\n border-top-color: rgb(255, 255, 255);\n animation: spin 1s ease-in-out infinite;\n -webkit-animation: spin 1s ease-in-out infinite;\n}\n\n@keyframes spin {\n to {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n@-webkit-keyframes spin {\n to {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n.igv-roi-menu-next-gen {\n position: absolute;\n z-index: 512;\n font-family: \"Open Sans\", sans-serif;\n font-size: small;\n font-weight: 400;\n color: #4b4b4b;\n background-color: white;\n width: 192px;\n border-radius: 4px;\n border-color: #7F7F7F;\n border-style: solid;\n border-width: thin;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n}\n.igv-roi-menu-next-gen > div:first-child {\n height: 24px;\n border-top-color: transparent;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-color: #7F7F7F;\n border-bottom-style: solid;\n border-bottom-width: thin;\n background-color: #eee;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: flex-end;\n align-items: center;\n}\n.igv-roi-menu-next-gen > div:first-child > div {\n margin-right: 4px;\n height: 12px;\n width: 12px;\n color: #7F7F7F;\n}\n.igv-roi-menu-next-gen > div:first-child > div:hover {\n cursor: pointer;\n color: #444;\n}\n.igv-roi-menu-next-gen > div:last-child {\n background-color: white;\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n border-bottom-color: transparent;\n border-bottom-style: solid;\n border-bottom-width: 0;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n text-align: start;\n vertical-align: middle;\n}\n.igv-roi-menu-next-gen > div:last-child > div {\n height: 24px;\n padding-left: 4px;\n border-bottom-style: solid;\n border-bottom-width: thin;\n border-bottom-color: #7f7f7f;\n}\n.igv-roi-menu-next-gen > div:last-child > div:not(:first-child):hover {\n background-color: rgba(127, 127, 127, 0.1);\n}\n.igv-roi-menu-next-gen > div:last-child div:first-child {\n font-style: italic;\n text-align: center;\n padding-right: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.igv-roi-menu-next-gen > div:last-child > div:last-child {\n border-bottom-width: 0;\n border-bottom-color: transparent;\n}\n\n.igv-roi-placeholder {\n font-style: normal;\n color: rgba(75, 75, 75, 0.6);\n}\n\n.igv-roi-table {\n position: absolute;\n z-index: 1024;\n width: min-content;\n max-width: 1600px;\n border-color: #7f7f7f;\n border-radius: 4px;\n border-style: solid;\n border-width: thin;\n font-family: \"Open Sans\", sans-serif;\n font-size: 12px;\n font-weight: 400;\n background-color: white;\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n cursor: default;\n}\n.igv-roi-table > div {\n height: 24px;\n font-size: 14px;\n text-align: start;\n vertical-align: middle;\n line-height: 24px;\n}\n.igv-roi-table > div:first-child {\n border-color: transparent;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-top-width: 0;\n border-bottom-color: #7f7f7f;\n border-bottom-style: solid;\n border-bottom-width: thin;\n background-color: #eee;\n cursor: move;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n}\n.igv-roi-table > div:first-child > div:first-child {\n text-align: center;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n margin-left: 4px;\n margin-right: 4px;\n width: calc(100% - 4px - 12px);\n}\n.igv-roi-table > div:first-child > div:last-child {\n margin-right: 4px;\n margin-bottom: 2px;\n height: 12px;\n width: 12px;\n color: #7f7f7f;\n}\n.igv-roi-table > div:first-child > div:last-child > svg {\n display: block;\n}\n.igv-roi-table > div:first-child > div:last-child:hover {\n cursor: pointer;\n color: #444;\n}\n.igv-roi-table > .igv-roi-table-description {\n padding: 4px;\n margin-left: 4px;\n word-break: break-all;\n overflow-y: auto;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n background-color: transparent;\n}\n.igv-roi-table > .igv-roi-table-goto-explainer {\n margin-top: 5px;\n margin-left: 4px;\n color: #7F7F7F;\n font-style: italic;\n height: 24px;\n border-top: solid lightgray;\n background-color: transparent;\n}\n.igv-roi-table > .igv-roi-table-column-titles {\n height: 24px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: stretch;\n align-items: stretch;\n padding-right: 16px;\n background-color: white;\n border-top-color: #7f7f7f;\n border-top-style: solid;\n border-top-width: thin;\n border-bottom-color: #7f7f7f;\n border-bottom-style: solid;\n border-bottom-width: thin;\n}\n.igv-roi-table > .igv-roi-table-column-titles > div {\n font-size: 14px;\n vertical-align: middle;\n line-height: 24px;\n text-align: left;\n margin-left: 4px;\n height: 24px;\n overflow: hidden;\n text-overflow: ellipsis;\n border-right-color: #7f7f7f;\n border-right-style: solid;\n border-right-width: thin;\n}\n.igv-roi-table > .igv-roi-table-column-titles > div:last-child {\n border-right: unset;\n}\n.igv-roi-table > .igv-roi-table-row-container {\n overflow: auto;\n resize: both;\n max-width: 1600px;\n height: 360px;\n background-color: transparent;\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row {\n height: 24px;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: stretch;\n align-items: stretch;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row > div {\n font-size: 14px;\n vertical-align: middle;\n line-height: 24px;\n text-align: left;\n margin-left: 4px;\n height: 24px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n border-right-color: transparent;\n border-right-style: solid;\n border-right-width: thin;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row > div:last-child {\n border-right: unset;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row-hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n.igv-roi-table > div:last-child {\n height: 32px;\n line-height: 32px;\n border-top-color: #7f7f7f;\n border-top-style: solid;\n border-top-width: thin;\n border-bottom-color: transparent;\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n border-bottom-width: 0;\n background-color: #eee;\n display: flex;\n flex-flow: row;\n flex-wrap: nowrap;\n justify-content: space-around;\n align-items: center;\n}\n\n.igv-roi-table-row-selected {\n background-color: rgba(0, 0, 0, 0.125);\n}\n\n.igv-roi-table-button {\n cursor: pointer;\n height: 20px;\n user-select: none;\n line-height: 20px;\n text-align: center;\n vertical-align: middle;\n font-family: \"Open Sans\", sans-serif;\n font-size: 13px;\n font-weight: 400;\n color: black;\n padding-left: 6px;\n padding-right: 6px;\n background-color: rgb(239, 239, 239);\n border-color: black;\n border-style: solid;\n border-width: thin;\n border-radius: 3px;\n}\n\n.igv-roi-table-button:hover {\n font-weight: 400;\n background-color: rgba(0, 0, 0, 0.13);\n}\n\n.igv-roi-region {\n z-index: 64;\n position: absolute;\n top: 0;\n bottom: 0;\n pointer-events: none;\n overflow: visible;\n margin-top: 44px;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n}\n.igv-roi-region > div {\n position: relative;\n width: 100%;\n height: 8px;\n pointer-events: auto;\n}\n\n.igv-roi-menu {\n position: absolute;\n z-index: 1024;\n width: 144px;\n border-color: #7f7f7f;\n border-radius: 4px;\n border-style: solid;\n border-width: thin;\n font-family: \"Open Sans\", sans-serif;\n background-color: white;\n display: flex;\n flex-flow: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n}\n.igv-roi-menu > div:not(:last-child) {\n border-bottom-color: rgba(128, 128, 128, 0.5);\n border-bottom-style: solid;\n border-bottom-width: thin;\n}\n.igv-roi-menu > div:first-child {\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-top-color: transparent;\n border-top-style: solid;\n border-top-width: 0;\n}\n.igv-roi-menu > div:last-child {\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n border-bottom-color: transparent;\n border-bottom-style: solid;\n border-bottom-width: 0;\n}\n\n.igv-roi-menu-row {\n height: 24px;\n padding-left: 8px;\n font-size: small;\n text-align: start;\n vertical-align: middle;\n line-height: 24px;\n background-color: white;\n}\n\n.igv-roi-menu-row-edit-description {\n width: -webkit-fill-available;\n font-size: small;\n text-align: start;\n vertical-align: middle;\n background-color: white;\n padding-left: 4px;\n padding-right: 4px;\n padding-bottom: 4px;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: stretch;\n align-items: stretch;\n}\n.igv-roi-menu-row-edit-description > label {\n margin-left: 2px;\n margin-bottom: 0;\n display: block;\n width: -webkit-fill-available;\n}\n.igv-roi-menu-row-edit-description > input {\n display: block;\n margin-left: 2px;\n margin-right: 2px;\n margin-bottom: 1px;\n width: -webkit-fill-available;\n}\n\n.igv-container {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n padding-top: 4px;\n user-select: none;\n -webkit-user-select: none;\n -ms-user-select: none;\n}\n\n.igv-viewport {\n position: relative;\n margin-top: 5px;\n line-height: 1;\n overflow-x: hidden;\n overflow-y: hidden;\n}\n\n.igv-viewport-content {\n position: relative;\n width: 100%;\n}\n.igv-viewport-content > canvas {\n position: relative;\n display: block;\n}\n\n.igv-column-container {\n position: relative;\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: stretch;\n width: 100%;\n}\n\n.igv-column-shim {\n width: 1px;\n margin-left: 2px;\n margin-right: 2px;\n background-color: #545453;\n}\n\n.igv-column {\n position: relative;\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n}\n\n.igv-axis-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n width: 50px;\n}\n.igv-axis-column > div {\n margin-top: 5px;\n width: 100%;\n}\n\n.igv-sample-name-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n}\n\n.igv-scrollbar-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n width: 14px;\n}\n.igv-scrollbar-column > div {\n position: relative;\n margin-top: 5px;\n width: 14px;\n}\n.igv-scrollbar-column > div > div {\n cursor: pointer;\n position: absolute;\n top: 0;\n left: 2px;\n width: 8px;\n border-width: 1px;\n border-style: solid;\n border-color: #c4c4c4;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n}\n.igv-scrollbar-column > div > div:hover {\n background-color: #c4c4c4;\n}\n\n.igv-track-drag-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n width: 12px;\n background-color: white;\n}\n.igv-track-drag-column > .igv-track-drag-handle {\n z-index: 512;\n position: relative;\n cursor: pointer;\n margin-top: 5px;\n width: 100%;\n border-style: solid;\n border-width: 0;\n border-top-right-radius: 6px;\n border-bottom-right-radius: 6px;\n background-color: #c4c4c4;\n}\n.igv-track-drag-column .igv-track-drag-handle-hover {\n background-color: #787878;\n}\n.igv-track-drag-column > .igv-track-drag-shim {\n position: relative;\n margin-top: 5px;\n width: 100%;\n border-style: solid;\n border-width: 0;\n}\n\n.igv-gear-menu-column {\n position: relative;\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: flex-start;\n box-sizing: border-box;\n height: 100%;\n width: 28px;\n}\n.igv-gear-menu-column > div {\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n justify-content: flex-start;\n align-items: center;\n margin-top: 5px;\n width: 100%;\n background: white;\n}\n.igv-gear-menu-column > div > div {\n position: relative;\n margin-top: 4px;\n width: 16px;\n height: 16px;\n color: #7F7F7F;\n}\n.igv-gear-menu-column > div > div:hover {\n cursor: pointer;\n color: #444;\n}\n\n/*# sourceMappingURL=dom.css.map */\n';
|
|
62070
62064
|
|
|
62071
62065
|
var style = document.createElement('style');
|
|
62072
62066
|
style.setAttribute('type', 'text/css');
|