igv 2.13.1 → 2.13.3
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 +577 -581
- package/dist/igv.esm.min.js +8 -8
- package/dist/igv.esm.min.js.map +1 -1
- package/dist/igv.js +2046 -2055
- package/dist/igv.min.js +9 -9
- package/dist/igv.min.js.map +1 -1
- package/package.json +1 -1
package/dist/igv.esm.js
CHANGED
|
@@ -8239,7 +8239,7 @@ function attachDialogCloseHandlerWithParent$1(parent, closeHandler) {
|
|
|
8239
8239
|
* @param x
|
|
8240
8240
|
* @returns {boolean}
|
|
8241
8241
|
*/
|
|
8242
|
-
function isString$
|
|
8242
|
+
function isString$2(x) {
|
|
8243
8243
|
return typeof x === "string" || x instanceof String
|
|
8244
8244
|
}
|
|
8245
8245
|
|
|
@@ -8301,13 +8301,6 @@ function stripQuotes$1(str) {
|
|
|
8301
8301
|
return str;
|
|
8302
8302
|
}
|
|
8303
8303
|
|
|
8304
|
-
function hashCode$1(s) {
|
|
8305
|
-
return s.split("").reduce(function (a, b) {
|
|
8306
|
-
a = ((a << 5) - a) + b.charCodeAt(0);
|
|
8307
|
-
return a & a
|
|
8308
|
-
}, 0);
|
|
8309
|
-
}
|
|
8310
|
-
|
|
8311
8304
|
function capitalize(str) {
|
|
8312
8305
|
return str.length > 0 ? str.charAt(0).toUpperCase() + str.slice(1) : str;
|
|
8313
8306
|
}
|
|
@@ -8744,7 +8737,7 @@ function getFilename$1(urlOrFile) {
|
|
|
8744
8737
|
|
|
8745
8738
|
if (urlOrFile.name !== undefined) {
|
|
8746
8739
|
return urlOrFile.name
|
|
8747
|
-
} else if (isString$
|
|
8740
|
+
} else if (isString$2(urlOrFile)) {
|
|
8748
8741
|
|
|
8749
8742
|
let index = urlOrFile.lastIndexOf("/");
|
|
8750
8743
|
let filename = index < 0 ? urlOrFile : urlOrFile.substr(index + 1);
|
|
@@ -17904,7 +17897,9 @@ const MenuUtils = {
|
|
|
17904
17897
|
menuItems.push('<hr/>');
|
|
17905
17898
|
menuItems.push(colorPickerMenuItem({trackView, label: "Set track color", option: "color"}));
|
|
17906
17899
|
menuItems.push(unsetColorMenuItem({trackView, label: "Unset track color"}));
|
|
17907
|
-
|
|
17900
|
+
if(trackView.track.config.type === 'wig' || trackView.track.config.type === 'annotation') {
|
|
17901
|
+
menuItems.push(colorPickerMenuItem({trackView, label: "Set alt color", option: "altColor"}));
|
|
17902
|
+
}
|
|
17908
17903
|
}
|
|
17909
17904
|
|
|
17910
17905
|
if (trackView.track.menuItemList) {
|
|
@@ -18190,6 +18185,455 @@ function getTrackLabelText(track) {
|
|
|
18190
18185
|
return txt
|
|
18191
18186
|
}
|
|
18192
18187
|
|
|
18188
|
+
/*
|
|
18189
|
+
* The MIT License (MIT)
|
|
18190
|
+
*
|
|
18191
|
+
* Copyright (c) 2016-2017 The Regents of the University of California
|
|
18192
|
+
* Author: Jim Robinson
|
|
18193
|
+
*
|
|
18194
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
18195
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
18196
|
+
* in the Software without restriction, including without limitation the rights
|
|
18197
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
18198
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
18199
|
+
* furnished to do so, subject to the following conditions:
|
|
18200
|
+
*
|
|
18201
|
+
* The above copyright notice and this permission notice shall be included in
|
|
18202
|
+
* all copies or substantial portions of the Software.
|
|
18203
|
+
*
|
|
18204
|
+
*
|
|
18205
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
18206
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18207
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18208
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
18209
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
18210
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
18211
|
+
* THE SOFTWARE.
|
|
18212
|
+
*/
|
|
18213
|
+
|
|
18214
|
+
class DataRangeDialog {
|
|
18215
|
+
|
|
18216
|
+
constructor(browser, $parent, alert) {
|
|
18217
|
+
|
|
18218
|
+
this.browser = browser;
|
|
18219
|
+
|
|
18220
|
+
// dialog container
|
|
18221
|
+
this.$container = $$1("<div>", {class: 'igv-generic-dialog-container'});
|
|
18222
|
+
$parent.append(this.$container);
|
|
18223
|
+
this.$container.offset({left: 0, top: 0});
|
|
18224
|
+
|
|
18225
|
+
// dialog header
|
|
18226
|
+
const $header = $$1("<div>", {class: 'igv-generic-dialog-header'});
|
|
18227
|
+
this.$container.append($header);
|
|
18228
|
+
attachDialogCloseHandlerWithParent$1($header[0], () => {
|
|
18229
|
+
this.$minimum_input.val(undefined);
|
|
18230
|
+
this.$maximum_input.val(undefined);
|
|
18231
|
+
this.$container.offset({left: 0, top: 0});
|
|
18232
|
+
this.$container.hide();
|
|
18233
|
+
});
|
|
18234
|
+
|
|
18235
|
+
|
|
18236
|
+
// minimun
|
|
18237
|
+
this.$minimum = $$1("<div>", {class: 'igv-generic-dialog-label-input'});
|
|
18238
|
+
this.$container.append(this.$minimum);
|
|
18239
|
+
const $mindiv = $$1('<div>');
|
|
18240
|
+
$mindiv.text('Minimum');
|
|
18241
|
+
this.$minimum.append($mindiv);
|
|
18242
|
+
this.$minimum_input = $$1("<input>");
|
|
18243
|
+
this.$minimum.append(this.$minimum_input);
|
|
18244
|
+
|
|
18245
|
+
|
|
18246
|
+
// maximum
|
|
18247
|
+
this.$maximum = $$1("<div>", {class: 'igv-generic-dialog-label-input'});
|
|
18248
|
+
this.$container.append(this.$maximum);
|
|
18249
|
+
const $maxdiv = $$1('<div>');
|
|
18250
|
+
$maxdiv.text('Maximum');
|
|
18251
|
+
this.$maximum.append($maxdiv);
|
|
18252
|
+
this.$maximum_input = $$1("<input>");
|
|
18253
|
+
this.$maximum.append(this.$maximum_input);
|
|
18254
|
+
|
|
18255
|
+
// ok | cancel
|
|
18256
|
+
const $buttons = $$1("<div>", {class: 'igv-generic-dialog-ok-cancel'});
|
|
18257
|
+
this.$container.append($buttons);
|
|
18258
|
+
|
|
18259
|
+
// ok
|
|
18260
|
+
this.$ok = $$1("<div>");
|
|
18261
|
+
$buttons.append(this.$ok);
|
|
18262
|
+
this.$ok.text('OK');
|
|
18263
|
+
|
|
18264
|
+
// cancel
|
|
18265
|
+
this.$cancel = $$1("<div>");
|
|
18266
|
+
$buttons.append(this.$cancel);
|
|
18267
|
+
this.$cancel.text('Cancel');
|
|
18268
|
+
|
|
18269
|
+
this.$cancel.on('click', () => {
|
|
18270
|
+
this.$minimum_input.val(undefined);
|
|
18271
|
+
this.$maximum_input.val(undefined);
|
|
18272
|
+
this.$container.offset({left: 0, top: 0});
|
|
18273
|
+
this.$container.hide();
|
|
18274
|
+
});
|
|
18275
|
+
|
|
18276
|
+
//this.$container.draggable({ handle:$header.get(0) });
|
|
18277
|
+
makeDraggable$1(this.$container.get(0), $header.get(0));
|
|
18278
|
+
|
|
18279
|
+
this.$container.hide();
|
|
18280
|
+
}
|
|
18281
|
+
|
|
18282
|
+
configure(trackView) {
|
|
18283
|
+
|
|
18284
|
+
const dataRange = trackView.dataRange();
|
|
18285
|
+
let min;
|
|
18286
|
+
let max;
|
|
18287
|
+
if (dataRange) {
|
|
18288
|
+
min = dataRange.min;
|
|
18289
|
+
max = dataRange.max;
|
|
18290
|
+
} else {
|
|
18291
|
+
min = 0;
|
|
18292
|
+
max = 100;
|
|
18293
|
+
}
|
|
18294
|
+
|
|
18295
|
+
this.$minimum_input.val(min);
|
|
18296
|
+
this.$maximum_input.val(max);
|
|
18297
|
+
|
|
18298
|
+
this.$minimum_input.unbind();
|
|
18299
|
+
this.$minimum_input.on('keyup', (e) => {
|
|
18300
|
+
if (13 === e.keyCode) {
|
|
18301
|
+
this.processResults(trackView);
|
|
18302
|
+
}
|
|
18303
|
+
});
|
|
18304
|
+
|
|
18305
|
+
this.$maximum_input.unbind();
|
|
18306
|
+
this.$maximum_input.on('keyup', (e) => {
|
|
18307
|
+
if (13 === e.keyCode) {
|
|
18308
|
+
this.processResults(trackView);
|
|
18309
|
+
}
|
|
18310
|
+
});
|
|
18311
|
+
|
|
18312
|
+
this.$ok.unbind();
|
|
18313
|
+
this.$ok.on('click', (e) => {
|
|
18314
|
+
this.processResults(trackView);
|
|
18315
|
+
});
|
|
18316
|
+
}
|
|
18317
|
+
|
|
18318
|
+
|
|
18319
|
+
processResults(trackView) {
|
|
18320
|
+
|
|
18321
|
+
const min = Number(this.$minimum_input.val());
|
|
18322
|
+
const max = Number(this.$maximum_input.val());
|
|
18323
|
+
if (isNaN(min) || isNaN(max)) {
|
|
18324
|
+
this.browser.alert.present(new Error('Must input numeric values'), undefined);
|
|
18325
|
+
} else {
|
|
18326
|
+
trackView.setDataRange(min, max);
|
|
18327
|
+
}
|
|
18328
|
+
|
|
18329
|
+
this.$minimum_input.val(undefined);
|
|
18330
|
+
this.$maximum_input.val(undefined);
|
|
18331
|
+
this.$container.offset({left: 0, top: 0});
|
|
18332
|
+
this.$container.hide();
|
|
18333
|
+
}
|
|
18334
|
+
|
|
18335
|
+
present($parent) {
|
|
18336
|
+
|
|
18337
|
+
const offset_top = $parent.offset().top;
|
|
18338
|
+
const scroll_top = $$1('body').scrollTop();
|
|
18339
|
+
|
|
18340
|
+
this.$container.offset({left: $parent.width() - this.$container.width(), top: (offset_top + scroll_top)});
|
|
18341
|
+
this.$container.show();
|
|
18342
|
+
}
|
|
18343
|
+
}
|
|
18344
|
+
|
|
18345
|
+
/*
|
|
18346
|
+
* The MIT License (MIT)
|
|
18347
|
+
*
|
|
18348
|
+
* Copyright (c) 2014 Broad Institute
|
|
18349
|
+
*
|
|
18350
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
18351
|
+
* of ctx software and associated documentation files (the "Software"), to deal
|
|
18352
|
+
* in the Software without restriction, including without limitation the rights
|
|
18353
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
18354
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
18355
|
+
* furnished to do so, subject to the following conditions:
|
|
18356
|
+
*
|
|
18357
|
+
* The above copyright notice and ctx permission notice shall be included in
|
|
18358
|
+
* all copies or substantial portions of the Software.
|
|
18359
|
+
*
|
|
18360
|
+
*
|
|
18361
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
18362
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18363
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18364
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
18365
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
18366
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
18367
|
+
* THE SOFTWARE.
|
|
18368
|
+
*/
|
|
18369
|
+
|
|
18370
|
+
|
|
18371
|
+
const IGVGraphics = {
|
|
18372
|
+
|
|
18373
|
+
configureHighDPICanvas: function (ctx, w, h) {
|
|
18374
|
+
|
|
18375
|
+
const scaleFactor = window.devicePixelRatio;
|
|
18376
|
+
// const scaleFactor = 1
|
|
18377
|
+
|
|
18378
|
+
ctx.canvas.style.width = (`${w}px`);
|
|
18379
|
+
ctx.canvas.width = Math.floor(scaleFactor * w);
|
|
18380
|
+
|
|
18381
|
+
ctx.canvas.style.height = (`${h}px`);
|
|
18382
|
+
ctx.canvas.height = Math.floor(scaleFactor * h);
|
|
18383
|
+
|
|
18384
|
+
ctx.scale(scaleFactor, scaleFactor);
|
|
18385
|
+
|
|
18386
|
+
},
|
|
18387
|
+
|
|
18388
|
+
setProperties: function (ctx, properties) {
|
|
18389
|
+
|
|
18390
|
+
for (var key in properties) {
|
|
18391
|
+
if (properties.hasOwnProperty(key)) {
|
|
18392
|
+
var value = properties[key];
|
|
18393
|
+
ctx[key] = value;
|
|
18394
|
+
}
|
|
18395
|
+
}
|
|
18396
|
+
},
|
|
18397
|
+
|
|
18398
|
+
strokeLine: function (ctx, x1, y1, x2, y2, properties) {
|
|
18399
|
+
|
|
18400
|
+
x1 = Math.floor(x1) + 0.5;
|
|
18401
|
+
y1 = Math.floor(y1) + 0.5;
|
|
18402
|
+
x2 = Math.floor(x2) + 0.5;
|
|
18403
|
+
y2 = Math.floor(y2) + 0.5;
|
|
18404
|
+
|
|
18405
|
+
if (properties) {
|
|
18406
|
+
ctx.save();
|
|
18407
|
+
IGVGraphics.setProperties(ctx, properties);
|
|
18408
|
+
}
|
|
18409
|
+
|
|
18410
|
+
ctx.beginPath();
|
|
18411
|
+
ctx.moveTo(x1, y1);
|
|
18412
|
+
ctx.lineTo(x2, y2);
|
|
18413
|
+
ctx.stroke();
|
|
18414
|
+
|
|
18415
|
+
if (properties) ctx.restore();
|
|
18416
|
+
},
|
|
18417
|
+
|
|
18418
|
+
fillRect: function (ctx, x, y, w, h, properties) {
|
|
18419
|
+
x = Math.round(x);
|
|
18420
|
+
y = Math.round(y);
|
|
18421
|
+
|
|
18422
|
+
if (properties) {
|
|
18423
|
+
ctx.save();
|
|
18424
|
+
IGVGraphics.setProperties(ctx, properties);
|
|
18425
|
+
}
|
|
18426
|
+
|
|
18427
|
+
ctx.fillRect(x, y, w, h);
|
|
18428
|
+
|
|
18429
|
+
if (properties) ctx.restore();
|
|
18430
|
+
},
|
|
18431
|
+
|
|
18432
|
+
fillPolygon: function (ctx, x, y, properties) {
|
|
18433
|
+
if (properties) {
|
|
18434
|
+
ctx.save();
|
|
18435
|
+
IGVGraphics.setProperties(ctx, properties);
|
|
18436
|
+
}
|
|
18437
|
+
doPath(ctx, x, y);
|
|
18438
|
+
ctx.fill();
|
|
18439
|
+
if (properties) ctx.restore();
|
|
18440
|
+
},
|
|
18441
|
+
|
|
18442
|
+
strokePolygon: function (ctx, x, y, properties) {
|
|
18443
|
+
if (properties) {
|
|
18444
|
+
ctx.save();
|
|
18445
|
+
IGVGraphics.setProperties(ctx, properties);
|
|
18446
|
+
}
|
|
18447
|
+
doPath(ctx, x, y);
|
|
18448
|
+
ctx.stroke();
|
|
18449
|
+
if (properties) ctx.restore();
|
|
18450
|
+
},
|
|
18451
|
+
|
|
18452
|
+
fillText: function (ctx, text, x, y, properties, transforms) {
|
|
18453
|
+
|
|
18454
|
+
if (properties || transforms) {
|
|
18455
|
+
ctx.save();
|
|
18456
|
+
}
|
|
18457
|
+
|
|
18458
|
+
if (properties) {
|
|
18459
|
+
IGVGraphics.setProperties(ctx, properties);
|
|
18460
|
+
}
|
|
18461
|
+
|
|
18462
|
+
if (transforms) {
|
|
18463
|
+
// Slow path with context saving and extra translate
|
|
18464
|
+
ctx.translate(x, y);
|
|
18465
|
+
|
|
18466
|
+
for (var transform in transforms) {
|
|
18467
|
+
var value = transforms[transform];
|
|
18468
|
+
|
|
18469
|
+
// TODO: Add error checking for robustness
|
|
18470
|
+
if (transform === 'translate') {
|
|
18471
|
+
ctx.translate(value['x'], value['y']);
|
|
18472
|
+
}
|
|
18473
|
+
if (transform === 'rotate') {
|
|
18474
|
+
ctx.rotate(value['angle'] * Math.PI / 180);
|
|
18475
|
+
}
|
|
18476
|
+
}
|
|
18477
|
+
|
|
18478
|
+
ctx.fillText(text, 0, 0);
|
|
18479
|
+
} else {
|
|
18480
|
+
ctx.fillText(text, x, y);
|
|
18481
|
+
}
|
|
18482
|
+
|
|
18483
|
+
if (properties || transforms) ctx.restore();
|
|
18484
|
+
},
|
|
18485
|
+
|
|
18486
|
+
strokeText: function (ctx, text, x, y, properties, transforms) {
|
|
18487
|
+
|
|
18488
|
+
|
|
18489
|
+
if (properties || transforms) {
|
|
18490
|
+
ctx.save();
|
|
18491
|
+
}
|
|
18492
|
+
|
|
18493
|
+
if (properties) {
|
|
18494
|
+
IGVGraphics.setProperties(ctx, properties);
|
|
18495
|
+
}
|
|
18496
|
+
|
|
18497
|
+
if (transforms) {
|
|
18498
|
+
ctx.translate(x, y);
|
|
18499
|
+
|
|
18500
|
+
for (var transform in transforms) {
|
|
18501
|
+
var value = transforms[transform];
|
|
18502
|
+
|
|
18503
|
+
// TODO: Add error checking for robustness
|
|
18504
|
+
if (transform === 'translate') {
|
|
18505
|
+
ctx.translate(value['x'], value['y']);
|
|
18506
|
+
}
|
|
18507
|
+
if (transform === 'rotate') {
|
|
18508
|
+
ctx.rotate(value['angle'] * Math.PI / 180);
|
|
18509
|
+
}
|
|
18510
|
+
}
|
|
18511
|
+
|
|
18512
|
+
ctx.strokeText(text, 0, 0);
|
|
18513
|
+
} else {
|
|
18514
|
+
ctx.strokeText(text, x, y);
|
|
18515
|
+
}
|
|
18516
|
+
|
|
18517
|
+
if (properties || transforms) ctx.restore();
|
|
18518
|
+
},
|
|
18519
|
+
|
|
18520
|
+
strokeCircle: function (ctx, x, y, radius, properties) {
|
|
18521
|
+
if (properties) {
|
|
18522
|
+
ctx.save();
|
|
18523
|
+
IGVGraphics.setProperties(ctx, properties);
|
|
18524
|
+
}
|
|
18525
|
+
ctx.beginPath();
|
|
18526
|
+
ctx.arc(x, y, radius, 0, 2 * Math.PI);
|
|
18527
|
+
ctx.stroke();
|
|
18528
|
+
if (properties) ctx.restore();
|
|
18529
|
+
},
|
|
18530
|
+
|
|
18531
|
+
fillCircle: function (ctx, x, y, radius, properties) {
|
|
18532
|
+
if (properties) {
|
|
18533
|
+
ctx.save();
|
|
18534
|
+
IGVGraphics.setProperties(ctx, properties);
|
|
18535
|
+
}
|
|
18536
|
+
ctx.beginPath();
|
|
18537
|
+
ctx.arc(x, y, radius, 0, 2 * Math.PI);
|
|
18538
|
+
ctx.fill();
|
|
18539
|
+
if (properties) ctx.restore();
|
|
18540
|
+
},
|
|
18541
|
+
|
|
18542
|
+
drawArrowhead: function (ctx, x, y, size, lineWidth) {
|
|
18543
|
+
|
|
18544
|
+
ctx.save();
|
|
18545
|
+
if (!size) {
|
|
18546
|
+
size = 5;
|
|
18547
|
+
}
|
|
18548
|
+
if (lineWidth) {
|
|
18549
|
+
ctx.lineWidth = lineWidth;
|
|
18550
|
+
}
|
|
18551
|
+
ctx.beginPath();
|
|
18552
|
+
ctx.moveTo(x, y - size / 2);
|
|
18553
|
+
ctx.lineTo(x, y + size / 2);
|
|
18554
|
+
ctx.lineTo(x + size, y);
|
|
18555
|
+
ctx.lineTo(x, y - size / 2);
|
|
18556
|
+
ctx.closePath();
|
|
18557
|
+
ctx.fill();
|
|
18558
|
+
ctx.restore();
|
|
18559
|
+
},
|
|
18560
|
+
|
|
18561
|
+
dashedLine: function (ctx, x1, y1, x2, y2, dashLen, properties = {}) {
|
|
18562
|
+
if (dashLen === undefined) dashLen = 2;
|
|
18563
|
+
ctx.setLineDash([dashLen, dashLen]);
|
|
18564
|
+
IGVGraphics.strokeLine(ctx, x1, y1, x2, y2, properties);
|
|
18565
|
+
ctx.setLineDash([]);
|
|
18566
|
+
},
|
|
18567
|
+
|
|
18568
|
+
roundRect: function (ctx, x, y, width, height, radius, fill, stroke) {
|
|
18569
|
+
|
|
18570
|
+
if (typeof stroke == "undefined") {
|
|
18571
|
+
stroke = true;
|
|
18572
|
+
}
|
|
18573
|
+
if (typeof radius === "undefined") {
|
|
18574
|
+
radius = 5;
|
|
18575
|
+
}
|
|
18576
|
+
ctx.beginPath();
|
|
18577
|
+
ctx.moveTo(x + radius, y);
|
|
18578
|
+
ctx.lineTo(x + width - radius, y);
|
|
18579
|
+
ctx.quadraticCurveTo(x + width, y, x + width, y + radius);
|
|
18580
|
+
ctx.lineTo(x + width, y + height - radius);
|
|
18581
|
+
ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);
|
|
18582
|
+
ctx.lineTo(x + radius, y + height);
|
|
18583
|
+
ctx.quadraticCurveTo(x, y + height, x, y + height - radius);
|
|
18584
|
+
ctx.lineTo(x, y + radius);
|
|
18585
|
+
ctx.quadraticCurveTo(x, y, x + radius, y);
|
|
18586
|
+
ctx.closePath();
|
|
18587
|
+
if (stroke) {
|
|
18588
|
+
ctx.stroke();
|
|
18589
|
+
}
|
|
18590
|
+
if (fill) {
|
|
18591
|
+
ctx.fill();
|
|
18592
|
+
}
|
|
18593
|
+
},
|
|
18594
|
+
polygon: function (ctx, x, y, fill, stroke) {
|
|
18595
|
+
|
|
18596
|
+
if (typeof stroke == "undefined") {
|
|
18597
|
+
stroke = true;
|
|
18598
|
+
}
|
|
18599
|
+
|
|
18600
|
+
ctx.beginPath();
|
|
18601
|
+
var len = x.length;
|
|
18602
|
+
ctx.moveTo(x[0], y[0]);
|
|
18603
|
+
for (var i = 1; i < len; i++) {
|
|
18604
|
+
ctx.lineTo(x[i], y[i]);
|
|
18605
|
+
// this.moveTo(x[i], y[i]);
|
|
18606
|
+
}
|
|
18607
|
+
|
|
18608
|
+
ctx.closePath();
|
|
18609
|
+
if (stroke) {
|
|
18610
|
+
ctx.stroke();
|
|
18611
|
+
}
|
|
18612
|
+
if (fill) {
|
|
18613
|
+
ctx.fill();
|
|
18614
|
+
}
|
|
18615
|
+
}
|
|
18616
|
+
|
|
18617
|
+
|
|
18618
|
+
};
|
|
18619
|
+
|
|
18620
|
+
function doPath(ctx, x, y) {
|
|
18621
|
+
|
|
18622
|
+
|
|
18623
|
+
var i, len = x.length;
|
|
18624
|
+
for (i = 0; i < len; i++) {
|
|
18625
|
+
x[i] = Math.round(x[i]);
|
|
18626
|
+
y[i] = Math.round(y[i]);
|
|
18627
|
+
}
|
|
18628
|
+
|
|
18629
|
+
ctx.beginPath();
|
|
18630
|
+
ctx.moveTo(x[0], y[0]);
|
|
18631
|
+
for (i = 1; i < len; i++) {
|
|
18632
|
+
ctx.lineTo(x[i], y[i]);
|
|
18633
|
+
}
|
|
18634
|
+
ctx.closePath();
|
|
18635
|
+
}
|
|
18636
|
+
|
|
18193
18637
|
function div(options) {
|
|
18194
18638
|
return create("div", options);
|
|
18195
18639
|
}
|
|
@@ -18534,24 +18978,6 @@ class AlertDialog {
|
|
|
18534
18978
|
}
|
|
18535
18979
|
}
|
|
18536
18980
|
|
|
18537
|
-
// The global Alert dialog
|
|
18538
|
-
|
|
18539
|
-
let alertDialog;
|
|
18540
|
-
|
|
18541
|
-
const Alert = {
|
|
18542
|
-
|
|
18543
|
-
init(root, config={}) {
|
|
18544
|
-
alertDialog = new AlertDialog(root, config);
|
|
18545
|
-
},
|
|
18546
|
-
|
|
18547
|
-
presentAlert (alert, callback) {
|
|
18548
|
-
if(!alertDialog) {
|
|
18549
|
-
this.init(document.body);
|
|
18550
|
-
}
|
|
18551
|
-
alertDialog.present(alert, callback);
|
|
18552
|
-
},
|
|
18553
|
-
};
|
|
18554
|
-
|
|
18555
18981
|
class InputDialog {
|
|
18556
18982
|
|
|
18557
18983
|
constructor(parent) {
|
|
@@ -19903,451 +20329,15 @@ if (typeof document !== 'undefined') {
|
|
|
19903
20329
|
}
|
|
19904
20330
|
}
|
|
19905
20331
|
|
|
19906
|
-
|
|
19907
|
-
|
|
19908
|
-
|
|
19909
|
-
* Copyright (c) 2016-2017 The Regents of the University of California
|
|
19910
|
-
* Author: Jim Robinson
|
|
19911
|
-
*
|
|
19912
|
-
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
19913
|
-
* of this software and associated documentation files (the "Software"), to deal
|
|
19914
|
-
* in the Software without restriction, including without limitation the rights
|
|
19915
|
-
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
19916
|
-
* copies of the Software, and to permit persons to whom the Software is
|
|
19917
|
-
* furnished to do so, subject to the following conditions:
|
|
19918
|
-
*
|
|
19919
|
-
* The above copyright notice and this permission notice shall be included in
|
|
19920
|
-
* all copies or substantial portions of the Software.
|
|
19921
|
-
*
|
|
19922
|
-
*
|
|
19923
|
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
19924
|
-
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
19925
|
-
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19926
|
-
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19927
|
-
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
19928
|
-
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
19929
|
-
* THE SOFTWARE.
|
|
19930
|
-
*/
|
|
19931
|
-
|
|
19932
|
-
class DataRangeDialog {
|
|
19933
|
-
|
|
19934
|
-
constructor($parent, alert) {
|
|
19935
|
-
|
|
19936
|
-
// dialog container
|
|
19937
|
-
this.$container = $$1("<div>", {class: 'igv-generic-dialog-container'});
|
|
19938
|
-
$parent.append(this.$container);
|
|
19939
|
-
this.$container.offset({left: 0, top: 0});
|
|
19940
|
-
|
|
19941
|
-
// dialog header
|
|
19942
|
-
const $header = $$1("<div>", {class: 'igv-generic-dialog-header'});
|
|
19943
|
-
this.$container.append($header);
|
|
19944
|
-
attachDialogCloseHandlerWithParent$1($header[0], () => {
|
|
19945
|
-
this.$minimum_input.val(undefined);
|
|
19946
|
-
this.$maximum_input.val(undefined);
|
|
19947
|
-
this.$container.offset({left: 0, top: 0});
|
|
19948
|
-
this.$container.hide();
|
|
19949
|
-
});
|
|
19950
|
-
|
|
19951
|
-
|
|
19952
|
-
// minimun
|
|
19953
|
-
this.$minimum = $$1("<div>", {class: 'igv-generic-dialog-label-input'});
|
|
19954
|
-
this.$container.append(this.$minimum);
|
|
19955
|
-
const $mindiv = $$1('<div>');
|
|
19956
|
-
$mindiv.text('Minimum');
|
|
19957
|
-
this.$minimum.append($mindiv);
|
|
19958
|
-
this.$minimum_input = $$1("<input>");
|
|
19959
|
-
this.$minimum.append(this.$minimum_input);
|
|
19960
|
-
|
|
19961
|
-
|
|
19962
|
-
// maximum
|
|
19963
|
-
this.$maximum = $$1("<div>", {class: 'igv-generic-dialog-label-input'});
|
|
19964
|
-
this.$container.append(this.$maximum);
|
|
19965
|
-
const $maxdiv = $$1('<div>');
|
|
19966
|
-
$maxdiv.text('Maximum');
|
|
19967
|
-
this.$maximum.append($maxdiv);
|
|
19968
|
-
this.$maximum_input = $$1("<input>");
|
|
19969
|
-
this.$maximum.append(this.$maximum_input);
|
|
19970
|
-
|
|
19971
|
-
// ok | cancel
|
|
19972
|
-
const $buttons = $$1("<div>", {class: 'igv-generic-dialog-ok-cancel'});
|
|
19973
|
-
this.$container.append($buttons);
|
|
19974
|
-
|
|
19975
|
-
// ok
|
|
19976
|
-
this.$ok = $$1("<div>");
|
|
19977
|
-
$buttons.append(this.$ok);
|
|
19978
|
-
this.$ok.text('OK');
|
|
19979
|
-
|
|
19980
|
-
// cancel
|
|
19981
|
-
this.$cancel = $$1("<div>");
|
|
19982
|
-
$buttons.append(this.$cancel);
|
|
19983
|
-
this.$cancel.text('Cancel');
|
|
19984
|
-
|
|
19985
|
-
this.$cancel.on('click', () => {
|
|
19986
|
-
this.$minimum_input.val(undefined);
|
|
19987
|
-
this.$maximum_input.val(undefined);
|
|
19988
|
-
this.$container.offset({left: 0, top: 0});
|
|
19989
|
-
this.$container.hide();
|
|
19990
|
-
});
|
|
19991
|
-
|
|
19992
|
-
//this.$container.draggable({ handle:$header.get(0) });
|
|
19993
|
-
makeDraggable$1(this.$container.get(0), $header.get(0));
|
|
19994
|
-
|
|
19995
|
-
this.$container.hide();
|
|
19996
|
-
}
|
|
19997
|
-
|
|
19998
|
-
configure(trackView) {
|
|
19999
|
-
|
|
20000
|
-
const dataRange = trackView.dataRange();
|
|
20001
|
-
let min;
|
|
20002
|
-
let max;
|
|
20003
|
-
if (dataRange) {
|
|
20004
|
-
min = dataRange.min;
|
|
20005
|
-
max = dataRange.max;
|
|
20006
|
-
} else {
|
|
20007
|
-
min = 0;
|
|
20008
|
-
max = 100;
|
|
20009
|
-
}
|
|
20010
|
-
|
|
20011
|
-
this.$minimum_input.val(min);
|
|
20012
|
-
this.$maximum_input.val(max);
|
|
20013
|
-
|
|
20014
|
-
this.$minimum_input.unbind();
|
|
20015
|
-
this.$minimum_input.on('keyup', (e) => {
|
|
20016
|
-
if (13 === e.keyCode) {
|
|
20017
|
-
this.processResults(trackView);
|
|
20018
|
-
}
|
|
20019
|
-
});
|
|
20020
|
-
|
|
20021
|
-
this.$maximum_input.unbind();
|
|
20022
|
-
this.$maximum_input.on('keyup', (e) => {
|
|
20023
|
-
if (13 === e.keyCode) {
|
|
20024
|
-
this.processResults(trackView);
|
|
20025
|
-
}
|
|
20026
|
-
});
|
|
20027
|
-
|
|
20028
|
-
this.$ok.unbind();
|
|
20029
|
-
this.$ok.on('click', (e) => {
|
|
20030
|
-
this.processResults(trackView);
|
|
20031
|
-
});
|
|
20032
|
-
}
|
|
20033
|
-
|
|
20034
|
-
|
|
20035
|
-
processResults(trackView) {
|
|
20036
|
-
|
|
20037
|
-
const min = Number(this.$minimum_input.val());
|
|
20038
|
-
const max = Number(this.$maximum_input.val());
|
|
20039
|
-
if (isNaN(min) || isNaN(max)) {
|
|
20040
|
-
Alert.presentAlert(new Error('Must input numeric values'), undefined);
|
|
20041
|
-
} else {
|
|
20042
|
-
trackView.setDataRange(min, max);
|
|
20043
|
-
}
|
|
20044
|
-
|
|
20045
|
-
this.$minimum_input.val(undefined);
|
|
20046
|
-
this.$maximum_input.val(undefined);
|
|
20047
|
-
this.$container.offset({left: 0, top: 0});
|
|
20048
|
-
this.$container.hide();
|
|
20049
|
-
}
|
|
20050
|
-
|
|
20051
|
-
present($parent) {
|
|
20052
|
-
|
|
20053
|
-
const offset_top = $parent.offset().top;
|
|
20054
|
-
const scroll_top = $$1('body').scrollTop();
|
|
20055
|
-
|
|
20056
|
-
this.$container.offset({left: $parent.width() - this.$container.width(), top: (offset_top + scroll_top)});
|
|
20057
|
-
this.$container.show();
|
|
20058
|
-
}
|
|
20059
|
-
}
|
|
20060
|
-
|
|
20061
|
-
/*
|
|
20062
|
-
* The MIT License (MIT)
|
|
20063
|
-
*
|
|
20064
|
-
* Copyright (c) 2014 Broad Institute
|
|
20065
|
-
*
|
|
20066
|
-
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
20067
|
-
* of ctx software and associated documentation files (the "Software"), to deal
|
|
20068
|
-
* in the Software without restriction, including without limitation the rights
|
|
20069
|
-
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
20070
|
-
* copies of the Software, and to permit persons to whom the Software is
|
|
20071
|
-
* furnished to do so, subject to the following conditions:
|
|
20072
|
-
*
|
|
20073
|
-
* The above copyright notice and ctx permission notice shall be included in
|
|
20074
|
-
* all copies or substantial portions of the Software.
|
|
20075
|
-
*
|
|
20076
|
-
*
|
|
20077
|
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
20078
|
-
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
20079
|
-
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
20080
|
-
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20081
|
-
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20082
|
-
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
20083
|
-
* THE SOFTWARE.
|
|
20084
|
-
*/
|
|
20085
|
-
|
|
20086
|
-
|
|
20087
|
-
const IGVGraphics = {
|
|
20088
|
-
|
|
20089
|
-
configureHighDPICanvas: function (ctx, w, h) {
|
|
20090
|
-
|
|
20091
|
-
const scaleFactor = window.devicePixelRatio;
|
|
20092
|
-
// const scaleFactor = 1
|
|
20093
|
-
|
|
20094
|
-
ctx.canvas.style.width = (`${w}px`);
|
|
20095
|
-
ctx.canvas.width = Math.floor(scaleFactor * w);
|
|
20096
|
-
|
|
20097
|
-
ctx.canvas.style.height = (`${h}px`);
|
|
20098
|
-
ctx.canvas.height = Math.floor(scaleFactor * h);
|
|
20099
|
-
|
|
20100
|
-
ctx.scale(scaleFactor, scaleFactor);
|
|
20101
|
-
|
|
20102
|
-
},
|
|
20103
|
-
|
|
20104
|
-
setProperties: function (ctx, properties) {
|
|
20105
|
-
|
|
20106
|
-
for (var key in properties) {
|
|
20107
|
-
if (properties.hasOwnProperty(key)) {
|
|
20108
|
-
var value = properties[key];
|
|
20109
|
-
ctx[key] = value;
|
|
20110
|
-
}
|
|
20111
|
-
}
|
|
20112
|
-
},
|
|
20113
|
-
|
|
20114
|
-
strokeLine: function (ctx, x1, y1, x2, y2, properties) {
|
|
20115
|
-
|
|
20116
|
-
x1 = Math.floor(x1) + 0.5;
|
|
20117
|
-
y1 = Math.floor(y1) + 0.5;
|
|
20118
|
-
x2 = Math.floor(x2) + 0.5;
|
|
20119
|
-
y2 = Math.floor(y2) + 0.5;
|
|
20120
|
-
|
|
20121
|
-
if (properties) {
|
|
20122
|
-
ctx.save();
|
|
20123
|
-
IGVGraphics.setProperties(ctx, properties);
|
|
20124
|
-
}
|
|
20125
|
-
|
|
20126
|
-
ctx.beginPath();
|
|
20127
|
-
ctx.moveTo(x1, y1);
|
|
20128
|
-
ctx.lineTo(x2, y2);
|
|
20129
|
-
ctx.stroke();
|
|
20130
|
-
|
|
20131
|
-
if (properties) ctx.restore();
|
|
20132
|
-
},
|
|
20133
|
-
|
|
20134
|
-
fillRect: function (ctx, x, y, w, h, properties) {
|
|
20135
|
-
x = Math.round(x);
|
|
20136
|
-
y = Math.round(y);
|
|
20137
|
-
|
|
20138
|
-
if (properties) {
|
|
20139
|
-
ctx.save();
|
|
20140
|
-
IGVGraphics.setProperties(ctx, properties);
|
|
20141
|
-
}
|
|
20142
|
-
|
|
20143
|
-
ctx.fillRect(x, y, w, h);
|
|
20144
|
-
|
|
20145
|
-
if (properties) ctx.restore();
|
|
20146
|
-
},
|
|
20147
|
-
|
|
20148
|
-
fillPolygon: function (ctx, x, y, properties) {
|
|
20149
|
-
if (properties) {
|
|
20150
|
-
ctx.save();
|
|
20151
|
-
IGVGraphics.setProperties(ctx, properties);
|
|
20152
|
-
}
|
|
20153
|
-
doPath(ctx, x, y);
|
|
20154
|
-
ctx.fill();
|
|
20155
|
-
if (properties) ctx.restore();
|
|
20156
|
-
},
|
|
20157
|
-
|
|
20158
|
-
strokePolygon: function (ctx, x, y, properties) {
|
|
20159
|
-
if (properties) {
|
|
20160
|
-
ctx.save();
|
|
20161
|
-
IGVGraphics.setProperties(ctx, properties);
|
|
20162
|
-
}
|
|
20163
|
-
doPath(ctx, x, y);
|
|
20164
|
-
ctx.stroke();
|
|
20165
|
-
if (properties) ctx.restore();
|
|
20166
|
-
},
|
|
20167
|
-
|
|
20168
|
-
fillText: function (ctx, text, x, y, properties, transforms) {
|
|
20169
|
-
|
|
20170
|
-
if (properties || transforms) {
|
|
20171
|
-
ctx.save();
|
|
20172
|
-
}
|
|
20173
|
-
|
|
20174
|
-
if (properties) {
|
|
20175
|
-
IGVGraphics.setProperties(ctx, properties);
|
|
20176
|
-
}
|
|
20177
|
-
|
|
20178
|
-
if (transforms) {
|
|
20179
|
-
// Slow path with context saving and extra translate
|
|
20180
|
-
ctx.translate(x, y);
|
|
20181
|
-
|
|
20182
|
-
for (var transform in transforms) {
|
|
20183
|
-
var value = transforms[transform];
|
|
20184
|
-
|
|
20185
|
-
// TODO: Add error checking for robustness
|
|
20186
|
-
if (transform === 'translate') {
|
|
20187
|
-
ctx.translate(value['x'], value['y']);
|
|
20188
|
-
}
|
|
20189
|
-
if (transform === 'rotate') {
|
|
20190
|
-
ctx.rotate(value['angle'] * Math.PI / 180);
|
|
20191
|
-
}
|
|
20192
|
-
}
|
|
20193
|
-
|
|
20194
|
-
ctx.fillText(text, 0, 0);
|
|
20195
|
-
} else {
|
|
20196
|
-
ctx.fillText(text, x, y);
|
|
20197
|
-
}
|
|
20198
|
-
|
|
20199
|
-
if (properties || transforms) ctx.restore();
|
|
20200
|
-
},
|
|
20201
|
-
|
|
20202
|
-
strokeText: function (ctx, text, x, y, properties, transforms) {
|
|
20203
|
-
|
|
20204
|
-
|
|
20205
|
-
if (properties || transforms) {
|
|
20206
|
-
ctx.save();
|
|
20207
|
-
}
|
|
20208
|
-
|
|
20209
|
-
if (properties) {
|
|
20210
|
-
IGVGraphics.setProperties(ctx, properties);
|
|
20211
|
-
}
|
|
20212
|
-
|
|
20213
|
-
if (transforms) {
|
|
20214
|
-
ctx.translate(x, y);
|
|
20215
|
-
|
|
20216
|
-
for (var transform in transforms) {
|
|
20217
|
-
var value = transforms[transform];
|
|
20218
|
-
|
|
20219
|
-
// TODO: Add error checking for robustness
|
|
20220
|
-
if (transform === 'translate') {
|
|
20221
|
-
ctx.translate(value['x'], value['y']);
|
|
20222
|
-
}
|
|
20223
|
-
if (transform === 'rotate') {
|
|
20224
|
-
ctx.rotate(value['angle'] * Math.PI / 180);
|
|
20225
|
-
}
|
|
20226
|
-
}
|
|
20227
|
-
|
|
20228
|
-
ctx.strokeText(text, 0, 0);
|
|
20229
|
-
} else {
|
|
20230
|
-
ctx.strokeText(text, x, y);
|
|
20231
|
-
}
|
|
20232
|
-
|
|
20233
|
-
if (properties || transforms) ctx.restore();
|
|
20234
|
-
},
|
|
20235
|
-
|
|
20236
|
-
strokeCircle: function (ctx, x, y, radius, properties) {
|
|
20237
|
-
if (properties) {
|
|
20238
|
-
ctx.save();
|
|
20239
|
-
IGVGraphics.setProperties(ctx, properties);
|
|
20240
|
-
}
|
|
20241
|
-
ctx.beginPath();
|
|
20242
|
-
ctx.arc(x, y, radius, 0, 2 * Math.PI);
|
|
20243
|
-
ctx.stroke();
|
|
20244
|
-
if (properties) ctx.restore();
|
|
20245
|
-
},
|
|
20246
|
-
|
|
20247
|
-
fillCircle: function (ctx, x, y, radius, properties) {
|
|
20248
|
-
if (properties) {
|
|
20249
|
-
ctx.save();
|
|
20250
|
-
IGVGraphics.setProperties(ctx, properties);
|
|
20251
|
-
}
|
|
20252
|
-
ctx.beginPath();
|
|
20253
|
-
ctx.arc(x, y, radius, 0, 2 * Math.PI);
|
|
20254
|
-
ctx.fill();
|
|
20255
|
-
if (properties) ctx.restore();
|
|
20256
|
-
},
|
|
20257
|
-
|
|
20258
|
-
drawArrowhead: function (ctx, x, y, size, lineWidth) {
|
|
20259
|
-
|
|
20260
|
-
ctx.save();
|
|
20261
|
-
if (!size) {
|
|
20262
|
-
size = 5;
|
|
20263
|
-
}
|
|
20264
|
-
if (lineWidth) {
|
|
20265
|
-
ctx.lineWidth = lineWidth;
|
|
20266
|
-
}
|
|
20267
|
-
ctx.beginPath();
|
|
20268
|
-
ctx.moveTo(x, y - size / 2);
|
|
20269
|
-
ctx.lineTo(x, y + size / 2);
|
|
20270
|
-
ctx.lineTo(x + size, y);
|
|
20271
|
-
ctx.lineTo(x, y - size / 2);
|
|
20272
|
-
ctx.closePath();
|
|
20273
|
-
ctx.fill();
|
|
20274
|
-
ctx.restore();
|
|
20275
|
-
},
|
|
20276
|
-
|
|
20277
|
-
dashedLine: function (ctx, x1, y1, x2, y2, dashLen, properties = {}) {
|
|
20278
|
-
if (dashLen === undefined) dashLen = 2;
|
|
20279
|
-
ctx.setLineDash([dashLen, dashLen]);
|
|
20280
|
-
IGVGraphics.strokeLine(ctx, x1, y1, x2, y2, properties);
|
|
20281
|
-
ctx.setLineDash([]);
|
|
20282
|
-
},
|
|
20283
|
-
|
|
20284
|
-
roundRect: function (ctx, x, y, width, height, radius, fill, stroke) {
|
|
20285
|
-
|
|
20286
|
-
if (typeof stroke == "undefined") {
|
|
20287
|
-
stroke = true;
|
|
20288
|
-
}
|
|
20289
|
-
if (typeof radius === "undefined") {
|
|
20290
|
-
radius = 5;
|
|
20291
|
-
}
|
|
20292
|
-
ctx.beginPath();
|
|
20293
|
-
ctx.moveTo(x + radius, y);
|
|
20294
|
-
ctx.lineTo(x + width - radius, y);
|
|
20295
|
-
ctx.quadraticCurveTo(x + width, y, x + width, y + radius);
|
|
20296
|
-
ctx.lineTo(x + width, y + height - radius);
|
|
20297
|
-
ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);
|
|
20298
|
-
ctx.lineTo(x + radius, y + height);
|
|
20299
|
-
ctx.quadraticCurveTo(x, y + height, x, y + height - radius);
|
|
20300
|
-
ctx.lineTo(x, y + radius);
|
|
20301
|
-
ctx.quadraticCurveTo(x, y, x + radius, y);
|
|
20302
|
-
ctx.closePath();
|
|
20303
|
-
if (stroke) {
|
|
20304
|
-
ctx.stroke();
|
|
20305
|
-
}
|
|
20306
|
-
if (fill) {
|
|
20307
|
-
ctx.fill();
|
|
20308
|
-
}
|
|
20309
|
-
},
|
|
20310
|
-
polygon: function (ctx, x, y, fill, stroke) {
|
|
20311
|
-
|
|
20312
|
-
if (typeof stroke == "undefined") {
|
|
20313
|
-
stroke = true;
|
|
20314
|
-
}
|
|
20315
|
-
|
|
20316
|
-
ctx.beginPath();
|
|
20317
|
-
var len = x.length;
|
|
20318
|
-
ctx.moveTo(x[0], y[0]);
|
|
20319
|
-
for (var i = 1; i < len; i++) {
|
|
20320
|
-
ctx.lineTo(x[i], y[i]);
|
|
20321
|
-
// this.moveTo(x[i], y[i]);
|
|
20322
|
-
}
|
|
20323
|
-
|
|
20324
|
-
ctx.closePath();
|
|
20325
|
-
if (stroke) {
|
|
20326
|
-
ctx.stroke();
|
|
20327
|
-
}
|
|
20328
|
-
if (fill) {
|
|
20329
|
-
ctx.fill();
|
|
20330
|
-
}
|
|
20331
|
-
}
|
|
20332
|
-
|
|
20333
|
-
|
|
20334
|
-
};
|
|
20335
|
-
|
|
20336
|
-
function doPath(ctx, x, y) {
|
|
20337
|
-
|
|
20332
|
+
class Alert {
|
|
20333
|
+
constructor(parent) {
|
|
20334
|
+
this.dialog = new AlertDialog(parent);
|
|
20338
20335
|
|
|
20339
|
-
var i, len = x.length;
|
|
20340
|
-
for (i = 0; i < len; i++) {
|
|
20341
|
-
x[i] = Math.round(x[i]);
|
|
20342
|
-
y[i] = Math.round(y[i]);
|
|
20343
20336
|
}
|
|
20344
20337
|
|
|
20345
|
-
|
|
20346
|
-
|
|
20347
|
-
for (i = 1; i < len; i++) {
|
|
20348
|
-
ctx.lineTo(x[i], y[i]);
|
|
20338
|
+
present(alert, callback) {
|
|
20339
|
+
this.dialog.present(alert, callback);
|
|
20349
20340
|
}
|
|
20350
|
-
ctx.closePath();
|
|
20351
20341
|
}
|
|
20352
20342
|
|
|
20353
20343
|
const FileFormats = {
|
|
@@ -20598,7 +20588,7 @@ const isNumber = function (num) {
|
|
|
20598
20588
|
};
|
|
20599
20589
|
|
|
20600
20590
|
async function getFilename(url) {
|
|
20601
|
-
if (isString$
|
|
20591
|
+
if (isString$2(url) && url.startsWith("https://drive.google.com")) {
|
|
20602
20592
|
// This will fail if Google API key is not defined
|
|
20603
20593
|
if (getApiKey() === undefined) {
|
|
20604
20594
|
throw Error("Google drive is referenced, but API key is not defined. An API key is required for Google Drive access")
|
|
@@ -20640,7 +20630,7 @@ function prettyBasePairNumber(raw) {
|
|
|
20640
20630
|
|
|
20641
20631
|
|
|
20642
20632
|
function isDataURL(obj) {
|
|
20643
|
-
return (isString$
|
|
20633
|
+
return (isString$2(obj) && obj.startsWith("data:"))
|
|
20644
20634
|
}
|
|
20645
20635
|
|
|
20646
20636
|
function createColumn(columnContainer, className) {
|
|
@@ -20991,7 +20981,7 @@ function inferFileFormat(fn) {
|
|
|
20991
20981
|
|
|
20992
20982
|
function inferIndexPath(url, extension) {
|
|
20993
20983
|
|
|
20994
|
-
if (isString$
|
|
20984
|
+
if (isString$2(url)) {
|
|
20995
20985
|
if (url.includes("?")) {
|
|
20996
20986
|
const idx = url.indexOf("?");
|
|
20997
20987
|
return url.substring(0, idx) + "." + extension + url.substring(idx)
|
|
@@ -21318,7 +21308,7 @@ class SequenceTrack {
|
|
|
21318
21308
|
} else if (this.reversed) {
|
|
21319
21309
|
seq = reverseComplementSequence(seq);
|
|
21320
21310
|
}
|
|
21321
|
-
|
|
21311
|
+
this.browser.alert.present(seq);
|
|
21322
21312
|
}
|
|
21323
21313
|
}
|
|
21324
21314
|
];
|
|
@@ -21336,7 +21326,7 @@ class SequenceTrack {
|
|
|
21336
21326
|
await navigator.clipboard.writeText(seq);
|
|
21337
21327
|
} catch (e) {
|
|
21338
21328
|
console.error(e);
|
|
21339
|
-
|
|
21329
|
+
this.browser.alert.present(`error copying sequence to clipboard ${e}`);
|
|
21340
21330
|
}
|
|
21341
21331
|
}
|
|
21342
21332
|
|
|
@@ -23862,7 +23852,7 @@ const Cytoband = function (start, end, name, typestain) {
|
|
|
23862
23852
|
}
|
|
23863
23853
|
};
|
|
23864
23854
|
|
|
23865
|
-
const _version = "2.13.
|
|
23855
|
+
const _version = "2.13.3";
|
|
23866
23856
|
function version() {
|
|
23867
23857
|
return _version
|
|
23868
23858
|
}
|
|
@@ -23972,10 +23962,10 @@ const GenomeUtils = {
|
|
|
23972
23962
|
},
|
|
23973
23963
|
|
|
23974
23964
|
// Expand a genome id to a reference object, if needed
|
|
23975
|
-
expandReference: function (idOrConfig) {
|
|
23965
|
+
expandReference: function (alert, idOrConfig) {
|
|
23976
23966
|
|
|
23977
23967
|
// idOrConfig might be json
|
|
23978
|
-
if (isString$
|
|
23968
|
+
if (isString$2(idOrConfig) && idOrConfig.startsWith("{")) {
|
|
23979
23969
|
try {
|
|
23980
23970
|
idOrConfig = JSON.parse(idOrConfig);
|
|
23981
23971
|
} catch (e) {
|
|
@@ -23984,7 +23974,7 @@ const GenomeUtils = {
|
|
|
23984
23974
|
}
|
|
23985
23975
|
|
|
23986
23976
|
let genomeID;
|
|
23987
|
-
if (isString$
|
|
23977
|
+
if (isString$2(idOrConfig)) {
|
|
23988
23978
|
genomeID = idOrConfig;
|
|
23989
23979
|
} else if (idOrConfig.genome) {
|
|
23990
23980
|
genomeID = idOrConfig.genome;
|
|
@@ -23997,7 +23987,7 @@ const GenomeUtils = {
|
|
|
23997
23987
|
const knownGenomes = GenomeUtils.KNOWN_GENOMES;
|
|
23998
23988
|
const reference = knownGenomes[genomeID];
|
|
23999
23989
|
if (!reference) {
|
|
24000
|
-
|
|
23990
|
+
alert.present(new Error(`Unknown genome id: ${genomeID}`), undefined);
|
|
24001
23991
|
}
|
|
24002
23992
|
return reference
|
|
24003
23993
|
} else {
|
|
@@ -24336,7 +24326,7 @@ function constructWG(genome, config) {
|
|
|
24336
24326
|
function generateGenomeID(config) {
|
|
24337
24327
|
if (config.id !== undefined) {
|
|
24338
24328
|
return config.id
|
|
24339
|
-
} else if (config.fastaURL && isString$
|
|
24329
|
+
} else if (config.fastaURL && isString$2(config.fastaURL)) {
|
|
24340
24330
|
return config.fastaURL
|
|
24341
24331
|
} else if (config.fastaURL && config.fastaURL.name) {
|
|
24342
24332
|
return config.fastaURL.name
|
|
@@ -24518,7 +24508,7 @@ class TrackViewport extends Viewport {
|
|
|
24518
24508
|
// Track might have been removed during load
|
|
24519
24509
|
if (this.trackView && this.trackView.disposed !== true) {
|
|
24520
24510
|
this.showMessage(NOT_LOADED_MESSAGE);
|
|
24521
|
-
|
|
24511
|
+
this.browser.alert.present(error);
|
|
24522
24512
|
console.error(error);
|
|
24523
24513
|
}
|
|
24524
24514
|
} finally {
|
|
@@ -26698,8 +26688,8 @@ function parseVariableStep(line) {
|
|
|
26698
26688
|
*/
|
|
26699
26689
|
|
|
26700
26690
|
const fixColor = (colorString) => {
|
|
26701
|
-
if (isString$
|
|
26702
|
-
return (colorString.indexOf(",") > 0 && !colorString.startsWith("rgb(")) ?
|
|
26691
|
+
if (isString$2(colorString)) {
|
|
26692
|
+
return (colorString.indexOf(",") > 0 && !(colorString.startsWith("rgb(") || colorString.startsWith("rgba("))) ?
|
|
26703
26693
|
`rgb(${colorString})` : colorString
|
|
26704
26694
|
} else {
|
|
26705
26695
|
return colorString
|
|
@@ -26741,7 +26731,7 @@ class TrackBase {
|
|
|
26741
26731
|
this.name = config.name || config.label;
|
|
26742
26732
|
} else if (isFile(config.url)) {
|
|
26743
26733
|
this.name = config.url.name;
|
|
26744
|
-
} else if (isString$
|
|
26734
|
+
} else if (isString$2(config.url) && !config.url.startsWith("data:")) {
|
|
26745
26735
|
this.name = getFilename$1(config.url);
|
|
26746
26736
|
}
|
|
26747
26737
|
|
|
@@ -30009,7 +29999,7 @@ class FeatureFileReader {
|
|
|
30009
29999
|
* THE SOFTWARE.
|
|
30010
30000
|
*/
|
|
30011
30001
|
|
|
30012
|
-
const isString$
|
|
30002
|
+
const isString$1 = isString$2;
|
|
30013
30003
|
|
|
30014
30004
|
|
|
30015
30005
|
class CustomServiceReader {
|
|
@@ -30048,7 +30038,7 @@ class CustomServiceReader {
|
|
|
30048
30038
|
if (data) {
|
|
30049
30039
|
if (typeof this.config.parser === "function") {
|
|
30050
30040
|
features = this.config.parser(data);
|
|
30051
|
-
} else if (isString$
|
|
30041
|
+
} else if (isString$1(data)) {
|
|
30052
30042
|
features = JSON.parse(data);
|
|
30053
30043
|
} else {
|
|
30054
30044
|
features = data;
|
|
@@ -33751,7 +33741,7 @@ class ROISet {
|
|
|
33751
33741
|
this.name = config.name;
|
|
33752
33742
|
} else if (config.url && isFile(config.url)) {
|
|
33753
33743
|
this.name = config.url.name;
|
|
33754
|
-
} else if (config.url && isString$
|
|
33744
|
+
} else if (config.url && isString$2(config.url) && !config.url.startsWith("data:")) {
|
|
33755
33745
|
this.name = getFilename$1(config.url);
|
|
33756
33746
|
}
|
|
33757
33747
|
|
|
@@ -33860,10 +33850,14 @@ class DynamicFeatureSource {
|
|
|
33860
33850
|
this.genome = genome;
|
|
33861
33851
|
|
|
33862
33852
|
for (let feature of features) {
|
|
33863
|
-
|
|
33853
|
+
|
|
33854
|
+
// Store as canonical chr name (i.e. translate aliases)
|
|
33855
|
+
const chrKey = genome ? genome.getChromosomeName(feature.chr) : feature.chr;
|
|
33856
|
+
|
|
33857
|
+
let featureList = this.featureMap[chrKey];
|
|
33864
33858
|
if (!featureList) {
|
|
33865
33859
|
featureList = [];
|
|
33866
|
-
this.featureMap[
|
|
33860
|
+
this.featureMap[chrKey] = featureList;
|
|
33867
33861
|
}
|
|
33868
33862
|
featureList.push(feature);
|
|
33869
33863
|
}
|
|
@@ -34264,9 +34258,6 @@ class PairedAlignment {
|
|
|
34264
34258
|
* THE SOFTWARE.
|
|
34265
34259
|
*/
|
|
34266
34260
|
|
|
34267
|
-
const isString$1 = isString$3;
|
|
34268
|
-
const hashCode = hashCode$1;
|
|
34269
|
-
|
|
34270
34261
|
class BamAlignmentRow {
|
|
34271
34262
|
|
|
34272
34263
|
constructor() {
|
|
@@ -34303,20 +34294,15 @@ class BamAlignmentRow {
|
|
|
34303
34294
|
|
|
34304
34295
|
}
|
|
34305
34296
|
|
|
34306
|
-
|
|
34307
|
-
this.score = this.calculateScore(options, alignmentContainer);
|
|
34308
|
-
}
|
|
34309
|
-
|
|
34310
|
-
calculateScore({position, option, direction, tag}, alignmentContainer) {
|
|
34297
|
+
getSortValue({position, option, tag}, alignmentContainer) {
|
|
34311
34298
|
|
|
34312
34299
|
if (!option) option = "BASE";
|
|
34313
34300
|
|
|
34314
34301
|
const alignment = this.findAlignment(position);
|
|
34315
|
-
if (undefined === alignment) {
|
|
34316
|
-
return Number.MAX_VALUE
|
|
34302
|
+
if (undefined === alignment) { // This condition should never occur
|
|
34303
|
+
return Number.MAX_VALUE
|
|
34317
34304
|
}
|
|
34318
34305
|
|
|
34319
|
-
let mate;
|
|
34320
34306
|
switch (option) {
|
|
34321
34307
|
case "NUCLEOTIDE":
|
|
34322
34308
|
case "BASE": {
|
|
@@ -34327,31 +34313,16 @@ class BamAlignmentRow {
|
|
|
34327
34313
|
case "START":
|
|
34328
34314
|
return alignment.start
|
|
34329
34315
|
case "TAG": {
|
|
34330
|
-
|
|
34331
|
-
const tagValue = alignment.tags()[tag];
|
|
34332
|
-
if (tagValue !== undefined) {
|
|
34333
|
-
return isString$1(tagValue) ? hashCode(tagValue) : tagValue
|
|
34334
|
-
} else {
|
|
34335
|
-
return Number.MAX_VALUE
|
|
34336
|
-
}
|
|
34316
|
+
return alignment.tags()[tag]
|
|
34337
34317
|
}
|
|
34338
34318
|
case "READ_NAME":
|
|
34339
|
-
return
|
|
34319
|
+
return alignment.readName
|
|
34340
34320
|
case "INSERT_SIZE":
|
|
34341
34321
|
return -Math.abs(alignment.fragmentLength)
|
|
34342
34322
|
case "GAP_SIZE":
|
|
34343
34323
|
return -alignment.gapSizeAt(position)
|
|
34344
34324
|
case "MATE_CHR":
|
|
34345
|
-
|
|
34346
|
-
if (!mate) {
|
|
34347
|
-
return Number.MAX_VALUE
|
|
34348
|
-
} else {
|
|
34349
|
-
if (mate.chr === alignment.chr) {
|
|
34350
|
-
return Number.MAX_VALUE - 1
|
|
34351
|
-
} else {
|
|
34352
|
-
return hashCode(mate.chr)
|
|
34353
|
-
}
|
|
34354
|
-
}
|
|
34325
|
+
return alignment.mate
|
|
34355
34326
|
case "MQ":
|
|
34356
34327
|
return alignment.mq === undefined ? Number.MAX_VALUE : -alignment.mq
|
|
34357
34328
|
case "ALIGNED_READ_LENGTH":
|
|
@@ -34414,6 +34385,8 @@ class BamAlignmentRow {
|
|
|
34414
34385
|
return baseScore
|
|
34415
34386
|
}
|
|
34416
34387
|
}
|
|
34388
|
+
|
|
34389
|
+
|
|
34417
34390
|
}
|
|
34418
34391
|
|
|
34419
34392
|
function canBePaired(alignment) {
|
|
@@ -34695,6 +34668,39 @@ class AlignmentContainer {
|
|
|
34695
34668
|
getMax(start, end) {
|
|
34696
34669
|
return this.coverageMap.getMax(start, end)
|
|
34697
34670
|
}
|
|
34671
|
+
|
|
34672
|
+
sortRows(options) {
|
|
34673
|
+
|
|
34674
|
+
const newRows = [];
|
|
34675
|
+
const undefinedRow = [];
|
|
34676
|
+
for (let row of this.packedAlignmentRows) {
|
|
34677
|
+
const alignment = row.findAlignment(options.position);
|
|
34678
|
+
if (undefined !== alignment) {
|
|
34679
|
+
newRows.push(row);
|
|
34680
|
+
} else {
|
|
34681
|
+
undefinedRow.push(row);
|
|
34682
|
+
}
|
|
34683
|
+
}
|
|
34684
|
+
|
|
34685
|
+
newRows.sort((rowA, rowB) => {
|
|
34686
|
+
const direction = options.direction;
|
|
34687
|
+
const rowAValue = rowA.getSortValue(options, this);
|
|
34688
|
+
const rowBValue = rowB.getSortValue(options, this);
|
|
34689
|
+
|
|
34690
|
+
if (rowBValue === undefined && rowBValue !== undefined) return 1
|
|
34691
|
+
else if (rowAValue !== undefined && rowBValue === undefined) return -1
|
|
34692
|
+
|
|
34693
|
+
const i = rowAValue > rowBValue ? 1 : (rowAValue < rowBValue ? -1 : 0);
|
|
34694
|
+
return true === direction ? i : -i
|
|
34695
|
+
});
|
|
34696
|
+
|
|
34697
|
+
for (let row of undefinedRow) {
|
|
34698
|
+
newRows.push(row);
|
|
34699
|
+
}
|
|
34700
|
+
|
|
34701
|
+
this.packedAlignmentRows = newRows;
|
|
34702
|
+
}
|
|
34703
|
+
|
|
34698
34704
|
}
|
|
34699
34705
|
|
|
34700
34706
|
|
|
@@ -34923,7 +34929,7 @@ class Coverage {
|
|
|
34923
34929
|
hoverText() {
|
|
34924
34930
|
const pos = this.posA + this.posT + this.posC + this.posG + this.posN;
|
|
34925
34931
|
const neg = this.negA + this.negT + this.negC + this.negG + this.negN;
|
|
34926
|
-
return `${this.total
|
|
34932
|
+
return `${this.total} (${pos}+, ${neg}-)`
|
|
34927
34933
|
}
|
|
34928
34934
|
|
|
34929
34935
|
isMismatch(refBase) {
|
|
@@ -36779,7 +36785,7 @@ class CramReader {
|
|
|
36779
36785
|
if (message && message.indexOf("MD5") >= 0) {
|
|
36780
36786
|
message = "Sequence mismatch. Is this the correct genome for the loaded CRAM?";
|
|
36781
36787
|
}
|
|
36782
|
-
|
|
36788
|
+
this.browser.alert.present(new Error(message));
|
|
36783
36789
|
throw error
|
|
36784
36790
|
}
|
|
36785
36791
|
}
|
|
@@ -37571,9 +37577,6 @@ class BamSource {
|
|
|
37571
37577
|
this.genome = genome;
|
|
37572
37578
|
|
|
37573
37579
|
if (isDataURL(config.url)) {
|
|
37574
|
-
if ("cram" === config.format) {
|
|
37575
|
-
throw "CRAM data uris are not supported"
|
|
37576
|
-
}
|
|
37577
37580
|
this.config.indexed = false;
|
|
37578
37581
|
}
|
|
37579
37582
|
|
|
@@ -37589,7 +37592,7 @@ class BamSource {
|
|
|
37589
37592
|
this.bamReader = new CramReader(config, genome, browser);
|
|
37590
37593
|
} else {
|
|
37591
37594
|
if (!this.config.indexURL && config.indexed !== false) {
|
|
37592
|
-
if (isString$
|
|
37595
|
+
if (isString$2(this.config.url)) {
|
|
37593
37596
|
const inferIndexPath$1 = inferIndexPath(this.config.url, "bai");
|
|
37594
37597
|
if (inferIndexPath$1) {
|
|
37595
37598
|
console.error(`Warning: no indexURL specified for ${this.config.url}. Guessing ${this.baiPath}`);
|
|
@@ -39860,7 +39863,7 @@ class BAMTrack extends TrackBase {
|
|
|
39860
39863
|
if (vp.containsPosition(options.chr, options.position)) {
|
|
39861
39864
|
const alignmentContainer = vp.cachedFeatures;
|
|
39862
39865
|
if (alignmentContainer) {
|
|
39863
|
-
|
|
39866
|
+
alignmentContainer.sortRows(options);
|
|
39864
39867
|
vp.repaint();
|
|
39865
39868
|
}
|
|
39866
39869
|
}
|
|
@@ -39904,7 +39907,7 @@ class BAMTrack extends TrackBase {
|
|
|
39904
39907
|
const sort = this.sortObject;
|
|
39905
39908
|
if (sort) {
|
|
39906
39909
|
if (sort.chr === chr && sort.position >= bpStart && sort.position <= bpEnd) {
|
|
39907
|
-
|
|
39910
|
+
alignmentContainer.sortRows(sort);
|
|
39908
39911
|
}
|
|
39909
39912
|
}
|
|
39910
39913
|
|
|
@@ -40984,7 +40987,7 @@ class AlignmentTrack {
|
|
|
40984
40987
|
direction: direction
|
|
40985
40988
|
};
|
|
40986
40989
|
this.parent.sortObject = newSortObject;
|
|
40987
|
-
|
|
40990
|
+
viewport.cachedFeatures.sortRows(newSortObject);
|
|
40988
40991
|
viewport.repaint();
|
|
40989
40992
|
};
|
|
40990
40993
|
list.push('<b>Sort by...</b>');
|
|
@@ -41015,7 +41018,7 @@ class AlignmentTrack {
|
|
|
41015
41018
|
};
|
|
41016
41019
|
this.sortByTag = tag;
|
|
41017
41020
|
this.parent.sortObject = newSortObject;
|
|
41018
|
-
|
|
41021
|
+
viewport.cachedFeatures.sortRows(newSortObject);
|
|
41019
41022
|
viewport.repaint();
|
|
41020
41023
|
}
|
|
41021
41024
|
}
|
|
@@ -41048,7 +41051,7 @@ class AlignmentTrack {
|
|
|
41048
41051
|
const frameEnd = clickedAlignment.mate.position + bpWidth / 2;
|
|
41049
41052
|
this.browser.addMultiLocusPanel(clickedAlignment.mate.chr, frameStart, frameEnd, referenceFrame);
|
|
41050
41053
|
} else {
|
|
41051
|
-
|
|
41054
|
+
this.browser.alert.present(`Reference does not contain chromosome: ${clickedAlignment.mate.chr}`);
|
|
41052
41055
|
}
|
|
41053
41056
|
}
|
|
41054
41057
|
},
|
|
@@ -41061,9 +41064,9 @@ class AlignmentTrack {
|
|
|
41061
41064
|
click: () => {
|
|
41062
41065
|
const seqstring = clickedAlignment.seq; //.map(b => String.fromCharCode(b)).join("");
|
|
41063
41066
|
if (!seqstring || "*" === seqstring) {
|
|
41064
|
-
|
|
41067
|
+
this.browser.alert.present("Read sequence: *");
|
|
41065
41068
|
} else {
|
|
41066
|
-
|
|
41069
|
+
this.browser.alert.present(seqstring);
|
|
41067
41070
|
}
|
|
41068
41071
|
}
|
|
41069
41072
|
});
|
|
@@ -41078,7 +41081,7 @@ class AlignmentTrack {
|
|
|
41078
41081
|
await navigator.clipboard.writeText(seq);
|
|
41079
41082
|
} catch (e) {
|
|
41080
41083
|
console.error(e);
|
|
41081
|
-
|
|
41084
|
+
this.browser.alert.present(`error copying sequence to clipboard ${e}`);
|
|
41082
41085
|
}
|
|
41083
41086
|
|
|
41084
41087
|
}
|
|
@@ -41258,21 +41261,6 @@ class AlignmentTrack {
|
|
|
41258
41261
|
}
|
|
41259
41262
|
}
|
|
41260
41263
|
|
|
41261
|
-
function sortAlignmentRows(options, alignmentContainer) {
|
|
41262
|
-
|
|
41263
|
-
const direction = options.direction;
|
|
41264
|
-
|
|
41265
|
-
for (let row of alignmentContainer.packedAlignmentRows) {
|
|
41266
|
-
row.updateScore(options, alignmentContainer);
|
|
41267
|
-
}
|
|
41268
|
-
|
|
41269
|
-
alignmentContainer.packedAlignmentRows.sort(function (rowA, rowB) {
|
|
41270
|
-
const i = rowA.score > rowB.score ? 1 : (rowA.score < rowB.score ? -1 : 0);
|
|
41271
|
-
return true === direction ? i : -i
|
|
41272
|
-
});
|
|
41273
|
-
|
|
41274
|
-
}
|
|
41275
|
-
|
|
41276
41264
|
function shadedBaseColor(qual, baseColor) {
|
|
41277
41265
|
|
|
41278
41266
|
const minQ = 5; //prefs.getAsInt(PreferenceManager.SAM_BASE_QUALITY_MIN),
|
|
@@ -42386,10 +42374,10 @@ class TrackView {
|
|
|
42386
42374
|
|
|
42387
42375
|
const trackColors = [];
|
|
42388
42376
|
const color = this.track.color || this.track.defaultColor;
|
|
42389
|
-
if (isString$
|
|
42377
|
+
if (isString$2(color)) {
|
|
42390
42378
|
trackColors.push(color);
|
|
42391
42379
|
}
|
|
42392
|
-
if (this.track.altColor && isString$
|
|
42380
|
+
if (this.track.altColor && isString$2(this.track.altColor)) {
|
|
42393
42381
|
trackColors.push(this.track.altColor);
|
|
42394
42382
|
}
|
|
42395
42383
|
const defaultColors = trackColors.map(c => c.startsWith("#") ? c : c.startsWith("rgb(") ? IGVColor.rgbToHex(c) : IGVColor.colorNameToHex(c));
|
|
@@ -43741,7 +43729,7 @@ class FeatureTrack extends TrackBase {
|
|
|
43741
43729
|
fd.name &&
|
|
43742
43730
|
fd.name.toLowerCase() === "name" &&
|
|
43743
43731
|
fd.value &&
|
|
43744
|
-
isString$
|
|
43732
|
+
isString$2(fd.value) &&
|
|
43745
43733
|
!fd.value.startsWith("<")) {
|
|
43746
43734
|
const href = infoURL.replace("$$", feature.name);
|
|
43747
43735
|
fd.value = `<a target=_blank href=${href}>${fd.value}</a>`;
|
|
@@ -43843,7 +43831,7 @@ class FeatureTrack extends TrackBase {
|
|
|
43843
43831
|
else if (f.strand === '-') {
|
|
43844
43832
|
seq = reverseComplementSequence(seq);
|
|
43845
43833
|
}
|
|
43846
|
-
|
|
43834
|
+
this.browser.alert.present(seq);
|
|
43847
43835
|
|
|
43848
43836
|
}
|
|
43849
43837
|
}];
|
|
@@ -43864,7 +43852,7 @@ class FeatureTrack extends TrackBase {
|
|
|
43864
43852
|
await navigator.clipboard.writeText(seq);
|
|
43865
43853
|
} catch (e) {
|
|
43866
43854
|
console.error(e);
|
|
43867
|
-
|
|
43855
|
+
this.browser.alert.present(`error copying sequence to clipboard ${e}`);
|
|
43868
43856
|
}
|
|
43869
43857
|
}
|
|
43870
43858
|
}
|
|
@@ -44017,6 +44005,7 @@ class WigTrack extends TrackBase {
|
|
|
44017
44005
|
start,
|
|
44018
44006
|
end,
|
|
44019
44007
|
bpPerPixel,
|
|
44008
|
+
visibilityWindow: this.visibilityWindow,
|
|
44020
44009
|
windowFunction: this.windowFunction
|
|
44021
44010
|
});
|
|
44022
44011
|
if (this.normalize && this.featureSource.normalizationFactor) {
|
|
@@ -44036,7 +44025,9 @@ class WigTrack extends TrackBase {
|
|
|
44036
44025
|
|
|
44037
44026
|
menuItemList() {
|
|
44038
44027
|
let items = [];
|
|
44028
|
+
|
|
44039
44029
|
if (this.flipAxis !== undefined) {
|
|
44030
|
+
items.push('<hr>');
|
|
44040
44031
|
items.push({
|
|
44041
44032
|
label: "Flip y-axis",
|
|
44042
44033
|
click: () => {
|
|
@@ -44899,6 +44890,7 @@ class MergedTrack extends TrackBase {
|
|
|
44899
44890
|
this.type = "merged";
|
|
44900
44891
|
this.featureType = 'numeric';
|
|
44901
44892
|
this.paintAxis = paintAxis;
|
|
44893
|
+
this.graphType = config.graphType;
|
|
44902
44894
|
}
|
|
44903
44895
|
|
|
44904
44896
|
init(config) {
|
|
@@ -44998,7 +44990,9 @@ class MergedTrack extends TrackBase {
|
|
|
44998
44990
|
this.tracks[i].dataRange = this.dataRange;
|
|
44999
44991
|
this.tracks[i].flipAxis = this.flipAxis;
|
|
45000
44992
|
this.tracks[i].logScale = this.logScale;
|
|
45001
|
-
this.
|
|
44993
|
+
if(this.graphType){
|
|
44994
|
+
this.tracks[i].graphType = this.graphType;
|
|
44995
|
+
}
|
|
45002
44996
|
this.tracks[i].draw(trackOptions);
|
|
45003
44997
|
}
|
|
45004
44998
|
}
|
|
@@ -45023,7 +45017,7 @@ class MergedTrack extends TrackBase {
|
|
|
45023
45017
|
|
|
45024
45018
|
|
|
45025
45019
|
get supportsWholeGenome() {
|
|
45026
|
-
return this.tracks.every(track => track.supportsWholeGenome
|
|
45020
|
+
return this.tracks.every(track => track.supportsWholeGenome)
|
|
45027
45021
|
}
|
|
45028
45022
|
}
|
|
45029
45023
|
|
|
@@ -45126,8 +45120,13 @@ class InteractionTrack extends TrackBase {
|
|
|
45126
45120
|
}
|
|
45127
45121
|
|
|
45128
45122
|
// Create the FeatureSource and override the default whole genome method
|
|
45129
|
-
|
|
45130
|
-
|
|
45123
|
+
if (config.featureSource) {
|
|
45124
|
+
this.featureSource = config.featureSource;
|
|
45125
|
+
delete config._featureSource;
|
|
45126
|
+
} else {
|
|
45127
|
+
this.featureSource = FeatureSource(config, this.browser.genome);
|
|
45128
|
+
this.featureSource.getWGFeatures = getWGFeatures;
|
|
45129
|
+
}
|
|
45131
45130
|
}
|
|
45132
45131
|
|
|
45133
45132
|
async postInit() {
|
|
@@ -45206,10 +45205,16 @@ class InteractionTrack extends TrackBase {
|
|
|
45206
45205
|
// Reset transient property drawState. An undefined value => feature has not been drawn.
|
|
45207
45206
|
feature.drawState = undefined;
|
|
45208
45207
|
|
|
45209
|
-
let color
|
|
45210
|
-
if
|
|
45211
|
-
color =
|
|
45208
|
+
let color;
|
|
45209
|
+
if(typeof this.color === 'function') {
|
|
45210
|
+
color = this.color(feature);
|
|
45211
|
+
} else {
|
|
45212
|
+
color = this.color || feature.color || DEFAULT_ARC_COLOR;
|
|
45213
|
+
if (color && this.config.useScore) {
|
|
45214
|
+
color = getAlphaColor(color, scoreShade(feature.score));
|
|
45215
|
+
}
|
|
45212
45216
|
}
|
|
45217
|
+
|
|
45213
45218
|
ctx.lineWidth = feature.thickness || this.thickness || 1;
|
|
45214
45219
|
|
|
45215
45220
|
if (feature.chr1 === feature.chr2 || feature.chr === 'all') {
|
|
@@ -45482,18 +45487,10 @@ class InteractionTrack extends TrackBase {
|
|
|
45482
45487
|
|
|
45483
45488
|
menuItemList() {
|
|
45484
45489
|
|
|
45485
|
-
let items = [
|
|
45486
|
-
|
|
45487
|
-
{
|
|
45488
|
-
name: "Set track color",
|
|
45489
|
-
click: () => {
|
|
45490
|
-
this.trackView.presentColorPicker();
|
|
45491
|
-
}
|
|
45492
|
-
},
|
|
45493
|
-
'<hr/>'
|
|
45494
|
-
];
|
|
45490
|
+
let items = [];
|
|
45495
45491
|
|
|
45496
45492
|
if (this.hasValue) {
|
|
45493
|
+
items.push("<hr/>");
|
|
45497
45494
|
const lut =
|
|
45498
45495
|
{
|
|
45499
45496
|
"nested": "Nested",
|
|
@@ -45927,7 +45924,7 @@ function extractInfoColumn(data, str) {
|
|
|
45927
45924
|
* THE SOFTWARE.
|
|
45928
45925
|
*/
|
|
45929
45926
|
|
|
45930
|
-
const isString = isString$
|
|
45927
|
+
const isString = isString$2;
|
|
45931
45928
|
|
|
45932
45929
|
|
|
45933
45930
|
const DEFAULT_VISIBILITY_WINDOW = 1000000;
|
|
@@ -51735,7 +51732,7 @@ class Browser {
|
|
|
51735
51732
|
this.root = div$1({class: 'igv-container'});
|
|
51736
51733
|
parentDiv.appendChild(this.root);
|
|
51737
51734
|
|
|
51738
|
-
Alert
|
|
51735
|
+
this.alert = new Alert(this.root);
|
|
51739
51736
|
|
|
51740
51737
|
this.columnContainer = div$1({class: 'igv-column-container'});
|
|
51741
51738
|
this.root.appendChild(this.columnContainer);
|
|
@@ -51913,7 +51910,7 @@ class Browser {
|
|
|
51913
51910
|
this.inputDialog = new InputDialog(this.root);
|
|
51914
51911
|
this.inputDialog.container.id = `igv-input-dialog-${guid$2()}`;
|
|
51915
51912
|
|
|
51916
|
-
this.dataRangeDialog = new DataRangeDialog($$1(this.root));
|
|
51913
|
+
this.dataRangeDialog = new DataRangeDialog(this, $$1(this.root));
|
|
51917
51914
|
this.dataRangeDialog.$container.get(0).id = `igv-data-range-dialog-${guid$2()}`;
|
|
51918
51915
|
|
|
51919
51916
|
this.genericColorPicker = new GenericColorPicker({parent: this.columnContainer, width: 432});
|
|
@@ -52115,7 +52112,7 @@ class Browser {
|
|
|
52115
52112
|
// Track gear column
|
|
52116
52113
|
createColumn(this.columnContainer, 'igv-gear-menu-column');
|
|
52117
52114
|
|
|
52118
|
-
const genomeConfig = await GenomeUtils.expandReference(session.reference || session.genome);
|
|
52115
|
+
const genomeConfig = await GenomeUtils.expandReference(this.alert, (session.reference || session.genome));
|
|
52119
52116
|
await this.loadReference(genomeConfig, session.locus);
|
|
52120
52117
|
|
|
52121
52118
|
this.centerLineList = this.createCenterLineList(this.columnContainer);
|
|
@@ -52294,7 +52291,7 @@ class Browser {
|
|
|
52294
52291
|
*/
|
|
52295
52292
|
async loadGenome(idOrConfig) {
|
|
52296
52293
|
|
|
52297
|
-
const genomeConfig = await GenomeUtils.expandReference(idOrConfig);
|
|
52294
|
+
const genomeConfig = await GenomeUtils.expandReference(this.alert, idOrConfig);
|
|
52298
52295
|
await this.loadReference(genomeConfig, undefined);
|
|
52299
52296
|
|
|
52300
52297
|
const tracks = genomeConfig.tracks || [];
|
|
@@ -52433,7 +52430,7 @@ class Browser {
|
|
|
52433
52430
|
async _loadTrack(config) {
|
|
52434
52431
|
|
|
52435
52432
|
// config might be json
|
|
52436
|
-
if (isString$
|
|
52433
|
+
if (isString$2(config)) {
|
|
52437
52434
|
config = JSON.parse(config);
|
|
52438
52435
|
}
|
|
52439
52436
|
|
|
@@ -52495,7 +52492,7 @@ class Browser {
|
|
|
52495
52492
|
msg = httpMessages[msg];
|
|
52496
52493
|
}
|
|
52497
52494
|
msg += (": " + config.url);
|
|
52498
|
-
|
|
52495
|
+
this.alert.present(new Error(msg), undefined);
|
|
52499
52496
|
}
|
|
52500
52497
|
}
|
|
52501
52498
|
|
|
@@ -52556,7 +52553,7 @@ class Browser {
|
|
|
52556
52553
|
|
|
52557
52554
|
// Resolve function and promise urls
|
|
52558
52555
|
let url = await resolveURL(config.url);
|
|
52559
|
-
if (isString$
|
|
52556
|
+
if (isString$2(url)) {
|
|
52560
52557
|
url = url.trim();
|
|
52561
52558
|
}
|
|
52562
52559
|
|
|
@@ -52618,8 +52615,7 @@ class Browser {
|
|
|
52618
52615
|
|
|
52619
52616
|
const track = TrackFactory.getTrack(type, config, this);
|
|
52620
52617
|
if (undefined === track) {
|
|
52621
|
-
|
|
52622
|
-
return
|
|
52618
|
+
this.alert.present(new Error(`Error creating track. Could not determine track type for file: ${config.url || config}`), undefined);
|
|
52623
52619
|
} else {
|
|
52624
52620
|
|
|
52625
52621
|
if (config.roi && config.roi.length > 0) {
|
|
@@ -53114,7 +53110,7 @@ class Browser {
|
|
|
53114
53110
|
async doSearch(string, init) {
|
|
53115
53111
|
const success = await this.search(string, init);
|
|
53116
53112
|
if (!success) {
|
|
53117
|
-
|
|
53113
|
+
this.alert.present(new Error(`Unrecognized locus: <b> ${string} </b>`));
|
|
53118
53114
|
}
|
|
53119
53115
|
return success
|
|
53120
53116
|
}
|
|
@@ -53987,7 +53983,7 @@ async function createTrack(config, browser) {
|
|
|
53987
53983
|
|
|
53988
53984
|
function embedCSS() {
|
|
53989
53985
|
|
|
53990
|
-
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: 18px;\n height: 18px;\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: 14px;\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: 14px;\n font-weight: 400;\n color: rgb(16, 16, 16);\n background-color: white;\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-multi-locus-ruler-label:hover {\n cursor: pointer;\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: 200px;\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\n transform: rotate(360deg); } }\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 .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 .igv-roi-menu-next-gen > div:first-child > div {\n margin-right: 4px;\n height: 12px;\n width: 12px;\n color: #7F7F7F; }\n .igv-roi-menu-next-gen > div:first-child > div:hover {\n cursor: pointer;\n color: #444; }\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 cursor: pointer; }\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 .igv-roi-menu-next-gen > div:last-child > div:not(:first-child):hover {\n background-color: rgba(127, 127, 127, 0.1); }\n .igv-roi-menu-next-gen > div:last-child div:first-child {\n cursor: default;\n font-style: italic;\n text-align: center;\n padding-right: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis; }\n .igv-roi-menu-next-gen > div:last-child > div:last-child {\n border-bottom-width: 0;\n border-bottom-color: transparent; }\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}\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-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-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: center;\n margin-left: 4px;\n margin-right: 4px;\n height: 24px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.igv-roi-table > .igv-roi-table-column-titles > div:nth-child(1) {\n width: 20%;\n}\n.igv-roi-table > .igv-roi-table-column-titles > div:nth-child(2) {\n width: 15%;\n}\n.igv-roi-table > .igv-roi-table-column-titles > div:nth-child(3) {\n width: 15%;\n}\n.igv-roi-table > .igv-roi-table-column-titles > div:nth-child(4) {\n width: 30%;\n}\n.igv-roi-table > .igv-roi-table-column-titles > div:nth-child(5) {\n width: 20%;\n}\n.igv-roi-table > .igv-roi-table-row-container {\n resize: both;\n overflow: scroll;\n min-width: 512px;\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: center;\n margin-left: 4px;\n margin-right: 4px;\n height: 24px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row > div:nth-child(1) {\n width: 20%;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row > div:nth-child(2) {\n width: 15%;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row > div:nth-child(3) {\n width: 15%;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row > div:nth-child(4) {\n width: 30%;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row > div:nth-child(5) {\n width: 20%;\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 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-four-column {\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}\n.igv-roi-table-four-column > 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-four-column > 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-four-column > div:first-child > div:first-child {\n text-align: center;\n width: calc(100% - 4px - 12px);\n}\n.igv-roi-table-four-column > 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-four-column > div:first-child > div:last-child > svg {\n display: block;\n}\n.igv-roi-table-four-column > div:first-child > div:last-child:hover {\n cursor: pointer;\n color: #444;\n}\n.igv-roi-table-four-column > .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-bottom-color: #7f7f7f;\n border-bottom-style: solid;\n border-bottom-width: thin;\n}\n.igv-roi-table-four-column > .igv-roi-table-column-titles > div {\n font-size: 14px;\n vertical-align: middle;\n line-height: 24px;\n text-align: center;\n margin-left: 4px;\n margin-right: 4px;\n height: 24px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.igv-roi-table-four-column > .igv-roi-table-column-titles > div:nth-child(1) {\n width: 25%;\n}\n.igv-roi-table-four-column > .igv-roi-table-column-titles > div:nth-child(2) {\n width: 20%;\n}\n.igv-roi-table-four-column > .igv-roi-table-column-titles > div:nth-child(3) {\n width: 20%;\n}\n.igv-roi-table-four-column > .igv-roi-table-column-titles > div:nth-child(4) {\n width: 35%;\n}\n.igv-roi-table-four-column > .igv-roi-table-row-container {\n resize: both;\n overflow: scroll;\n min-width: 512px;\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-four-column > .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-four-column > .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: center;\n margin-left: 4px;\n margin-right: 4px;\n height: 24px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.igv-roi-table-four-column > .igv-roi-table-row-container > .igv-roi-table-row > div:nth-child(1) {\n width: 25%;\n}\n.igv-roi-table-four-column > .igv-roi-table-row-container > .igv-roi-table-row > div:nth-child(2) {\n width: 20%;\n}\n.igv-roi-table-four-column > .igv-roi-table-row-container > .igv-roi-table-row > div:nth-child(3) {\n width: 20%;\n}\n.igv-roi-table-four-column > .igv-roi-table-row-container > .igv-roi-table-row > div:nth-child(4) {\n width: 35%;\n}\n.igv-roi-table-four-column > .igv-roi-table-row-container > .igv-roi-table-row-hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n.igv-roi-table-four-column > 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 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 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 cursor: pointer;\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 cursor: pointer;\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 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';
|
|
53986
|
+
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: 18px;\n height: 18px;\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: 14px;\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: 14px;\n font-weight: 400;\n color: rgb(16, 16, 16);\n background-color: white;\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-multi-locus-ruler-label:hover {\n cursor: pointer;\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: 200px;\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 cursor: pointer;\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 cursor: default;\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}\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-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-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: center;\n margin-left: 4px;\n margin-right: 4px;\n height: 24px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.igv-roi-table > .igv-roi-table-column-titles > div:nth-child(1) {\n width: 20%;\n}\n.igv-roi-table > .igv-roi-table-column-titles > div:nth-child(2) {\n width: 15%;\n}\n.igv-roi-table > .igv-roi-table-column-titles > div:nth-child(3) {\n width: 15%;\n}\n.igv-roi-table > .igv-roi-table-column-titles > div:nth-child(4) {\n width: 30%;\n}\n.igv-roi-table > .igv-roi-table-column-titles > div:nth-child(5) {\n width: 20%;\n}\n.igv-roi-table > .igv-roi-table-row-container {\n resize: both;\n overflow: scroll;\n min-width: 512px;\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: center;\n margin-left: 4px;\n margin-right: 4px;\n height: 24px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row > div:nth-child(1) {\n width: 20%;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row > div:nth-child(2) {\n width: 15%;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row > div:nth-child(3) {\n width: 15%;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row > div:nth-child(4) {\n width: 30%;\n}\n.igv-roi-table > .igv-roi-table-row-container > .igv-roi-table-row > div:nth-child(5) {\n width: 20%;\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 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-four-column {\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}\n.igv-roi-table-four-column > 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-four-column > 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-four-column > div:first-child > div:first-child {\n text-align: center;\n width: calc(100% - 4px - 12px);\n}\n.igv-roi-table-four-column > 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-four-column > div:first-child > div:last-child > svg {\n display: block;\n}\n.igv-roi-table-four-column > div:first-child > div:last-child:hover {\n cursor: pointer;\n color: #444;\n}\n.igv-roi-table-four-column > .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-bottom-color: #7f7f7f;\n border-bottom-style: solid;\n border-bottom-width: thin;\n}\n.igv-roi-table-four-column > .igv-roi-table-column-titles > div {\n font-size: 14px;\n vertical-align: middle;\n line-height: 24px;\n text-align: center;\n margin-left: 4px;\n margin-right: 4px;\n height: 24px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.igv-roi-table-four-column > .igv-roi-table-column-titles > div:nth-child(1) {\n width: 25%;\n}\n.igv-roi-table-four-column > .igv-roi-table-column-titles > div:nth-child(2) {\n width: 20%;\n}\n.igv-roi-table-four-column > .igv-roi-table-column-titles > div:nth-child(3) {\n width: 20%;\n}\n.igv-roi-table-four-column > .igv-roi-table-column-titles > div:nth-child(4) {\n width: 35%;\n}\n.igv-roi-table-four-column > .igv-roi-table-row-container {\n resize: both;\n overflow: scroll;\n min-width: 512px;\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-four-column > .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-four-column > .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: center;\n margin-left: 4px;\n margin-right: 4px;\n height: 24px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.igv-roi-table-four-column > .igv-roi-table-row-container > .igv-roi-table-row > div:nth-child(1) {\n width: 25%;\n}\n.igv-roi-table-four-column > .igv-roi-table-row-container > .igv-roi-table-row > div:nth-child(2) {\n width: 20%;\n}\n.igv-roi-table-four-column > .igv-roi-table-row-container > .igv-roi-table-row > div:nth-child(3) {\n width: 20%;\n}\n.igv-roi-table-four-column > .igv-roi-table-row-container > .igv-roi-table-row > div:nth-child(4) {\n width: 35%;\n}\n.igv-roi-table-four-column > .igv-roi-table-row-container > .igv-roi-table-row-hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n.igv-roi-table-four-column > 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 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 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 cursor: pointer;\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 cursor: pointer;\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 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';
|
|
53991
53987
|
|
|
53992
53988
|
var style = document.createElement('style');
|
|
53993
53989
|
style.setAttribute('type', 'text/css');
|