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/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$3(x) {
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$3(urlOrFile)) {
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
- menuItems.push(colorPickerMenuItem({trackView, label: "Set alt color", option: "altColor"}));
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
- * The MIT License (MIT)
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
- ctx.beginPath();
20346
- ctx.moveTo(x[0], y[0]);
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$3(url) && url.startsWith("https://drive.google.com")) {
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$3(obj) && obj.startsWith("data:"))
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$3(url)) {
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
- Alert.presentAlert(seq);
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
- Alert.presentAlert(`error copying sequence to clipboard ${e}`);
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.1";
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$3(idOrConfig) && idOrConfig.startsWith("{")) {
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$3(idOrConfig)) {
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
- Alert.presentAlert(new Error(`Unknown genome id: ${genomeID}`), undefined);
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$3(config.fastaURL)) {
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
- Alert.presentAlert(error);
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$3(colorString)) {
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$3(config.url) && !config.url.startsWith("data:")) {
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$2 = isString$3;
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$2(data)) {
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$3(config.url) && !config.url.startsWith("data:")) {
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
- let featureList = this.featureMap[feature.chr];
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[feature.chr] = featureList;
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
- updateScore(options, alignmentContainer) {
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 * (direction ? 1 : -1)
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 hashCode(alignment.readName)
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
- mate = alignment.mate;
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 } (${pos}+, ${neg}-)`
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
- Alert.presentAlert(new Error(message));
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$3(this.config.url)) {
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
- sortAlignmentRows(options, alignmentContainer);
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
- sortAlignmentRows(sort, alignmentContainer);
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
- sortAlignmentRows(newSortObject, viewport.cachedFeatures);
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
- sortAlignmentRows(newSortObject, viewport.cachedFeatures);
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
- Alert.presentAlert(`Reference does not contain chromosome: ${clickedAlignment.mate.chr}`);
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
- Alert.presentAlert("Read sequence: *");
41067
+ this.browser.alert.present("Read sequence: *");
41065
41068
  } else {
41066
- Alert.presentAlert(seqstring);
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
- Alert.presentAlert(`error copying sequence to clipboard ${e}`);
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$3(color)) {
42377
+ if (isString$2(color)) {
42390
42378
  trackColors.push(color);
42391
42379
  }
42392
- if (this.track.altColor && isString$3(this.track.altColor)) {
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$3(fd.value) &&
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
- Alert.presentAlert(seq);
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
- Alert.presentAlert(`error copying sequence to clipboard ${e}`);
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.tracks[i].graphType = this.graphType;
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
- this.featureSource = FeatureSource(config, this.browser.genome);
45130
- this.featureSource.getWGFeatures = getWGFeatures;
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 = this.color || feature.color || DEFAULT_ARC_COLOR;
45210
- if (color && this.config.useScore) {
45211
- color = getAlphaColor(color, scoreShade(feature.score));
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$3;
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.init(this.root);
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$3(config)) {
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
- Alert.presentAlert(new Error(msg), undefined);
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$3(url)) {
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
- Alert.presentAlert(new Error(`Error creating track. Could not determine track type for file: ${config.url || config}`), undefined);
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
- Alert.presentAlert(new Error(`Unrecognized locus: <b> ${string} </b>`));
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');