@galaxyproject/igv 0.0.20 → 0.0.21

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@galaxyproject/igv",
3
- "version": "0.0.20",
3
+ "version": "0.0.21",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "files": [
package/static/index.css CHANGED
@@ -1 +1 @@
1
- .igv-overlay[data-v-e366c20b]{position:absolute;top:0;right:0;bottom:0;left:0;z-index:4096;display:flex;align-items:center;justify-content:center;background-color:rgb(224 242 254 / var(--tw-bg-opacity));--tw-bg-opacity: .3;font-size:1.25rem;line-height:1.75rem;font-weight:600;--tw-text-opacity: 1;color:rgb(14 165 233 / var(--tw-text-opacity))}.igv-overlay-title[data-v-e366c20b]{pointer-events:none;border-radius:.25rem;background-color:rgb(255 255 255 / var(--tw-bg-opacity));--tw-bg-opacity: .9;padding:.25rem .75rem}*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.pointer-events-none{pointer-events:none}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;right:0;bottom:0;left:0}.z-\[4096\]{z-index:4096}.mt-1{margin-top:.25rem}.flex{display:flex}.table{display:table}.h-screen{height:100vh}.items-center{align-items:center}.justify-center{justify-content:center}.overflow-auto{overflow:auto}.rounded{border-radius:.25rem}.border{border-width:1px}.border-4{border-width:4px}.border-dashed{border-style:dashed}.border-sky-200{--tw-border-opacity: 1;border-color:rgb(186 230 253 / var(--tw-border-opacity))}.border-sky-500{--tw-border-opacity: 1;border-color:rgb(14 165 233 / var(--tw-border-opacity))}.bg-sky-100{--tw-bg-opacity: 1;background-color:rgb(224 242 254 / var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-opacity-30{--tw-bg-opacity: .3}.bg-opacity-90{--tw-bg-opacity: .9}.p-2{padding:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-sky-500{--tw-text-opacity: 1;color:rgb(14 165 233 / var(--tw-text-opacity))}.text-sky-800{--tw-text-opacity: 1;color:rgb(7 89 133 / var(--tw-text-opacity))}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}
1
+ .igv-overlay[data-v-4af1c099]{position:absolute;top:0;right:0;bottom:0;left:0;z-index:4096;display:flex;align-items:center;justify-content:center;background-color:rgb(224 242 254 / var(--tw-bg-opacity));--tw-bg-opacity: .3;font-size:1.25rem;line-height:1.75rem;font-weight:600;--tw-text-opacity: 1;color:rgb(14 165 233 / var(--tw-text-opacity))}.igv-overlay-title[data-v-4af1c099]{pointer-events:none;border-radius:.25rem;background-color:rgb(255 255 255 / var(--tw-bg-opacity));--tw-bg-opacity: .9;padding:.25rem .75rem}*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.pointer-events-none{pointer-events:none}.absolute{position:absolute}.relative{position:relative}.inset-0{top:0;right:0;bottom:0;left:0}.z-\[4096\]{z-index:4096}.mt-1{margin-top:.25rem}.flex{display:flex}.table{display:table}.h-screen{height:100vh}.items-center{align-items:center}.justify-center{justify-content:center}.overflow-auto{overflow:auto}.rounded{border-radius:.25rem}.border{border-width:1px}.border-4{border-width:4px}.border-dashed{border-style:dashed}.border-sky-200{--tw-border-opacity: 1;border-color:rgb(186 230 253 / var(--tw-border-opacity))}.border-sky-500{--tw-border-opacity: 1;border-color:rgb(14 165 233 / var(--tw-border-opacity))}.bg-sky-100{--tw-bg-opacity: 1;background-color:rgb(224 242 254 / var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-opacity-30{--tw-bg-opacity: .3}.bg-opacity-90{--tw-bg-opacity: .9}.p-2{padding:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-sky-500{--tw-text-opacity: 1;color:rgb(14 165 233 / var(--tw-text-opacity))}.text-sky-800{--tw-text-opacity: 1;color:rgb(7 89 133 / var(--tw-text-opacity))}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}
package/static/index.js CHANGED
@@ -2449,4 +2449,4 @@ ${c.map(p=>` ${p}`).join(`
2449
2449
  `)}`);const d=a.filter(p=>p.file===void 0);let u=1;for(let p of d)p.order===void 0&&(p.order=u++);const f=d.filter(p=>p.hidden===!0);for(const p of f)await ji(p,this.genome).getFeatures({chr:"1",start:0,end:Number.MAX_SAFE_INTEGER});await this.loadTrackList(d)}cleanHouseForSession(){for(let t of this.trackViews)t.removeDOMFromColumnContainer();this.columnContainer.querySelectorAll(".igv-axis-column, .igv-column-shim, .igv-column, .igv-sample-info-column, .igv-sample-name-column, .igv-scrollbar-column, .igv-track-drag-column, .igv-gear-menu-column").forEach(t=>t.remove()),this.trackViews=[],this.circularView&&this.circularView.clearChords()}async loadReference(e,t){this.removeAllTracks(),this.roiManager.clearROIs(),this.navbar.setEnableTrackSelection(!1);let r;e.gbkURL?r=await z_(e.gbkURL):r=await Zm.createGenome(e,this);const n=this.genome===void 0||this.genome.id!==r.id;this.genome=r,this.navbar.updateGenome(r);let o=t||r.initialLocus;return Array.isArray(o)&&(o=o.join(" ")),await this.search(o,!0)||(console.error(`Cannot set initial locus ${o}`),o!==r.initialLocus&&await this.search(r.initialLocus)),n&&(this.fireEvent("genomechange",[{genome:r}]),this.circularView&&this.circularView.setAssembly({name:this.genome.id,id:this.genome.id,chromosomes:vF(this.genome)})),r}async loadGenome(e){e.genarkAccession&&(e.url=$_(e.genarkAccession)),e.url&&(Yt(e.url)&&e.url.endsWith("/hub.txt")?(e.hubURL=e.url,delete e.url):iJ(e.url)==="gbk"&&(e.gbkURL=e.url,delete e.url));let t;e.hubURL||e.url&&Yt(e.url)&&e.url.endsWith("/hub.txt")?t=(await mu(e.hubURL||e.url)).getGenomeConfig():Yt(e)||!(e.url||e.fastaURL||e.twoBitURL||e.gbkURL)?t=await ci.expandReference(this.alert,e):t=e,await this.loadReference(t);let n;return t.gbkURL||t.format==="gbk"?n=[{name:"Annotations",format:"gbk",url:t.gbkURL}]:n=t.tracks||[],n.filter(s=>s.type==="sequence").length===0&&n.push({type:"sequence",order:gu}),await this.loadTrackList(n),this.genome}updateUIWithReferenceFrameList(){const e=this.referenceFrameList;this.isMultiLocusWholeGenomeView()||ci.isWholeGenomeView(e[0].chr),this.navbar.navbarDidResize(),kg(this.trackViews,this.doShowTrackLabels),this.doShowCenterLine&&ci.isWholeGenomeView(e[0].chr)&&this.navbar.centerLineButton.boundMouseClickHandler(),this.doShowCursorGuide&&ci.isWholeGenomeView(e[0].chr)&&this.navbar.cursorGuideButton.boundMouseClickHandler(),this.setCenterLineAndCenterLineButtonVisibility(ci.isWholeGenomeView(e[0].chr))}setCenterLineAndCenterLineButtonVisibility(e){e?this.navbar.centerLineButton.setVisibility(!1):this.navbar.centerLineButton.setVisibility(this.config.showCenterGuideButton);for(let t of this.centerLineList)e?this.setCenterLineVisibility(!e):this.setCenterLineVisibility(this.doShowCenterLine)}setTrackLabelVisibility(e){kg(this.trackViews,e)}setROITableVisibility(e){e===!0?this.roiManager.presentTable():this.roiManager.dismissTable()}setCursorGuideVisibility(e){e?this.cursorGuide.show():this.cursorGuide.hide()}setCustomCursorGuideMouseHandler(e){this.cursorGuide.customMouseHandler=e}setCenterLineVisibility(e){for(let t of this.centerLineList)e===!0?(t.show(),t.repaint()):t.hide()}async loadTrackList(e){let t=this.trackViews.length+1;for(let o of e)o.order===void 0&&(o.order=t++);const r=[];for(const o of e)r.push(at(this,Bu,OA).call(this,o));const n=await Promise.all(r);return this.trackViews.some(({track:o})=>o.selected)&&this.navbar.setEnableTrackSelection(!0),this.reorderTracks(),await hd.call(this),this.fireEvent("trackorderchanged",[this.getTrackOrder()]),n}async loadTrack(e){const t=await this.loadTrackList([e]);return e.autoscaleGroup&&this.updateViews(),t[0]}async addTrack(e){e.order===void 0&&(e.order=this.trackViews.length);const t=new Yp(this,this.columnContainer,e);if(this.trackViews.push(t),kg(this.trackViews,this.doShowTrackLabels),typeof e.postInit=="function")try{t.startSpinner(),await e.postInit()}finally{t.stopSpinner()}return typeof e.hasSamples=="function"&&e.hasSamples()&&(this.sampleInfo.hasAttributes()&&this.sampleInfoControl.setButtonVisibility(!0),this.config.showSampleNameButton!==!1&&this.sampleNameControl.show()),e.trackView.enableTrackSelection(this.navbar.getEnableTrackSelection()),e}async loadROI(e){return this.roiManager.loadROI(e,this.genome)}clearROIs(){this.roiManager.clearROIs()}async getUserDefinedROIs(){if(this.roiManager){const e=this.roiManager.getUserDefinedROISet();if(e===void 0)return[];const t=await e.getAllFeatures(),r=[];for(let n of Object.values(t))r.push(...n);return r}else return[]}getRulerTrackView(){const e=this.trackViews.filter(({track:t})=>t.id==="ruler");return e.length>0?e[0]:void 0}async createTrack(e){let t=await Tz(e.url||e.fastaURL);if(Yt(t)&&(t=t.trim()),t)if(e.format)e.format=e.format.toLowerCase();else if(e.fastaURL)e.format="fasta";else if(e.sourceType)e.sourceType==="htsget"&&await p2.inferFormat(e);else{const o=await ux(e);o&&(e.format=o)}e.type&&ox(e);let r=e.type?e.type.toLowerCase():void 0;if(!r){if(e.format){if(e.format==="hic"){const o=new DA(e);if(await o.readHeaderAndFooter(),o.chromosomeIndexMap.celltype)r="shoebox",e._hicFile=o;else throw Error("'.hic' files not supported")}else if(r=nx(e.format),r==="bedtype"){const o=ji(e,this.genome);e._featureSource=o;const s=await o.trackType();s&&NX().has(s)?r=s:r="annotation"}}else throw Error(`Unrecognized track: ${JSON.stringify(e)}`);e.type=r}if(this.trackDefaults&&r){const o=this.trackDefaults[r];if(o)for(let s in o)o.hasOwnProperty(s)&&e[s]===void 0&&(e[s]=o[s])}const n=MX(r,e,this);if(n===void 0)this.alert.present(new Error(`Error creating track. Could not determine track type for file: ${e.url||e}`),void 0);else return e.roi&&e.roi.length>0&&(n.roiSets=e.roi.map(o=>new CZ(o,this.genome))),n}reorderTracks(){this.trackViews.sort(function(t,r){const n=a=>a.track.id==="ideogram"?1:a.track.id==="ruler"?2:3,o=n(t),s=n(r);if(o===s){const a=t.track.order||0,l=r.track.order||0;return a-l}else return o-s});for(let{axis:t,viewports:r,sampleInfoViewport:n,sampleNameViewport:o,outerScroll:s,dragHandle:a,gearContainer:l}of this.trackViews){t.remove();for(let{viewportElement:c}of r)c.parentNode.removeChild(c);n.viewport.remove(),o.viewport.remove(),s.remove(),a.remove(),l.remove()}const e=this.columnContainer.querySelectorAll(".igv-column");for(let{axis:t,viewports:r,sampleInfoViewport:n,sampleNameViewport:o,outerScroll:s,dragHandle:a,gearContainer:l}of this.trackViews){this.columnContainer.querySelector(".igv-axis-column").appendChild(t);for(let c=0;c<e.length;c++){const{viewportElement:h}=r[c];e[c].appendChild(h)}this.columnContainer.querySelector(".igv-sample-info-column").appendChild(n.viewport),this.columnContainer.querySelector(".igv-sample-name-column").appendChild(o.viewport),this.columnContainer.querySelector(".igv-scrollbar-column").appendChild(s),this.columnContainer.querySelector(".igv-track-drag-column").appendChild(a),this.columnContainer.querySelector(".igv-gear-menu-column").appendChild(l)}}getTrackOrder(){return this.trackViews.filter(e=>e.track&&e.track.name).map(e=>e.track.name)}getSelectedTrackViews(){return this.trackViews.filter(e=>e.track.selected===!0)}removeTrackByName(e){const t=this.trackViews.slice();for(let r of t)e===r.track.name&&this.removeTrack(r.track)}removeTrack(e){for(let t of this.trackViews)if(e===t.track){this._removeTrack(t.track);break}}_removeTrack(e){e.disposed||(this.trackViews.splice(this.trackViews.indexOf(e.trackView),1),this.fireEvent("trackremoved",[e]),this.fireEvent("trackorderchanged",[this.getTrackOrder()]),e.trackView&&e.trackView.dispose())}removeAllTracks(){const e=this.trackViews;this.trackViews=[];for(let t of e)t.track.id!=="ruler"&&t.track.id!=="ideogram"?(this.fireEvent("trackremoved",[t.track]),t.dispose()):this.trackViews.push(t)}get ideogramTrackView(){return this.trackViews[0]}get rulerTrackView(){return this.trackViews[1]}findTracks(e,t){let r=typeof e=="function"?n=>e(n.track):n=>t===n.track[e];return this.trackViews.filter(r).map(n=>n.track)}get tracks(){return this.trackViews.map(e=>e.track).filter(e=>e!==void 0)}setTrackHeight(e){this.trackHeight=e,this.trackViews.forEach(function(t){t.setTrackHeight(e)})}async visibilityChange(){this.layoutChange()}async layoutChange(){if(this.referenceFrameList.find(t=>t.bpPerPixel<0)){const t=this.calculateViewportWidth(this.referenceFrameList.length);for(let r of this.referenceFrameList)r.bpPerPixel=(r.end-r.start)/t}this.referenceFrameList&&this.navbar.navbarDidResize(),hd.call(this),this.roiManager.updateROIRegionPositions(),await this.updateViews()}async updateViews(){const e=this.trackViews;this.updateLocusSearchWidget();for(const{bpPerPixel:t,chr:r,start:n}of this.referenceFrameList)t<=w2&&await this.genome.getSequence(r,n,n+1);for(const t of this.centerLineList)t.repaint();if(this.dragObject)for(const t of e)await t.updateViews();else{const t={},r=[];for(const n of e)if(n.track.autoscaleGroup){const o=n.track.autoscaleGroup;t[o]||(t[o]=[]),t[o].push(n)}else r.push(n);if(Object.entries(t).length>0)for(const[n,o]of Object.entries(t)){const s=await Promise.all(o.map(l=>l.getInViewFeatures())),a=kc(s.flat());for(const l of o)l.track.dataRange=Object.assign({},a),l.track.autoscale=!1;await Promise.all(o.map(l=>l.updateViews()))}await Promise.all(r.map(n=>n.updateViews()))}}repaintViews(){for(let e of this.trackViews)e.repaintViews()}updateLocusSearchWidget(){if(!this.referenceFrameList)return;const e=this.referenceFrameList,t=this.calculateViewportWidth(this.referenceFrameList.length);for(let o of e)o.end=o.start+o.bpPerPixel*t;const r=this.referenceFrameList.map(o=>o.getLocusString()).join(" "),n=e.length===1?this.genome.getChromosomeDisplayName(this.referenceFrameList[0].chr):"";this.navbar.updateLocus(r,n),this.fireEvent("locuschange",[this.referenceFrameList])}calculateViewportWidth(e){let{width:t}=this.columnContainer.getBoundingClientRect();return t-=xj+this.getSampleInfoViewportWidth()+this.getSampleNameViewportWidth()+ZZ+JZ+eJ,t-=tJ*(e-1),Math.floor(t/e)}updateReferenceFrames(e){for(const t of this.referenceFrameList)t.updateForViewportWidth(e)}updateViewportElements(e){for(let t=0;t<this.referenceFrameList.length;t++){for(const{viewports:r}of this.trackViews)r[t].setWidth(e);for(const{sampleInfoViewport:r}of this.trackViews)r.setWidth(this.getSampleInfoColumnWidth()),r.repaint()}}async syncUIState(){this.updateUIWithReferenceFrameList(),await this.updateViews(!0)}minimumBases(){return this.config.minimumBases}zoomIn(){this.zoomWithScaleFactor(.5)}zoomOut(){this.zoomWithScaleFactor(2)}async zoomWithScaleFactor(e,t,r){if(!this.referenceFrameList)return;const n=this.calculateViewportWidth(this.referenceFrameList.length);let o=r?[r]:this.referenceFrameList;for(let s of o)s.zoomWithScaleFactor(this,e,n,t)}async addMultiLocusPanel(e,t,r,n){if(!this.referenceFrameList)return;const o=this.calculateViewportWidth(1+this.referenceFrameList.length),s=this.calculateViewportWidth(this.referenceFrameList.length)/this.calculateViewportWidth(1+this.referenceFrameList.length);for(let f of this.referenceFrameList)f.bpPerPixel*=s;const a=(r-t)/o,l=new SA(this.genome,e,t,r,a),c=n?this.referenceFrameList.indexOf(n):this.referenceFrameList.length-1,h=1+c,{viewportElement:d}=this.trackViews[0].viewports[c],u=yg.insertAfter(d.parentElement);if(this.fireEvent("didchangecolumnlayout"),h===this.referenceFrameList.length){this.referenceFrameList.push(l);for(let f of this.trackViews){const p=zm(f,u,l);f.viewports.push(p)}}else{this.referenceFrameList.splice(h,0,l);for(let f of this.trackViews){const p=zm(f,u,l);f.viewports.splice(h,0,p)}}this.centerLineList=this.createCenterLineList(this.columnContainer),hd.call(this),await this.updateViews(!0)}createCenterLineList(e){const t=e.querySelectorAll(".igv-center-line");for(let o=0;o<t.length;o++)t[o].remove();const r=[],n=e.querySelectorAll(".igv-column");for(let o=0;o<n.length;o++)r.push(new mZ(this,this.referenceFrameList[o],n[o]));return r}async removeMultiLocusPanel(e){const t=this.referenceFrameList.indexOf(e),{viewportElement:r}=this.trackViews[0].viewports[t];yg.removeColumnAtIndex(t,r.parentElement),this.fireEvent("didchangecolumnlayout");for(let{viewports:o}of this.trackViews)o[t].dispose(),o.splice(t,1);if(this.referenceFrameList.splice(t,1),this.referenceFrameList.length===1&&this.getRulerTrackView())for(let o of this.getRulerTrackView().viewports)o.dismissLocusLabel();const n=this.calculateViewportWidth(1+this.referenceFrameList.length)/this.calculateViewportWidth(this.referenceFrameList.length);await this.rescaleForMultiLocus(n)}async gotoMultilocusPanel(e){const t=this.referenceFrameList.indexOf(e);this.columnContainer.querySelectorAll(".igv-column").forEach((n,o)=>{o===t||n.remove()}),this.columnContainer.querySelectorAll(".igv-column-shim").forEach(n=>n.remove());for(let n of this.trackViews){const o=n.viewports[t];n.viewports.filter((s,a)=>a!==t).forEach(s=>s.dispose()),n.viewports=[o]}const r=this.calculateViewportWidth(1);e.bpPerPixel=(e.end-e.start)/r,this.referenceFrameList=[e],this.trackViews.forEach(({viewports:n})=>n.forEach(o=>o.setWidth(r))),this.centerLineList=this.createCenterLineList(this.columnContainer),this.updateUIWithReferenceFrameList(),await this.updateViews(!0)}async rescaleForMultiLocus(e){const t=this.calculateViewportWidth(this.referenceFrameList.length);for(let r of this.referenceFrameList)r.bpPerPixel*=e;for(let{viewports:r}of this.trackViews)for(let n of r)n.setWidth(t);this.centerLineList=this.createCenterLineList(this.columnContainer),this.updateUIWithReferenceFrameList(),await this.updateViews()}async goto(e,t,r){await this.search(e+":"+t+"-"+r)}async search(e,t){const r=await pX(this,e);return this.updateLoci(r,t)}async updateLoci(e,t){if(e&&e.length>0){this.referenceFrameList=zX(e,this.genome,this.flanking,this.minimumBases(),this.calculateViewportWidth(e.length),this.isSoftclipped());for(let r of this.trackViews)r.removeViewportsFromColumnContainer();this.columnContainer.querySelectorAll(".igv-column-shim, .igv-column").forEach(r=>r.remove()),yg.insertBefore(this.columnContainer.querySelector(".igv-sample-info-column"),this.referenceFrameList.length),this.fireEvent("didchangecolumnlayout");for(let r of this.trackViews)r.createViewports(this,this.columnContainer,this.referenceFrameList);return this.centerLineList=this.createCenterLineList(this.columnContainer),this.updateUIWithReferenceFrameList(),t||await this.updateViews(),!0}else return!1}async loadSampleInfo(e){await this.sampleInfo.loadSampleInfo(e),this.config.sampleinfo?this.config.sampleinfo.push(e):this.config.sampleinfo=[e];for(const{sampleInfoViewport:r}of this.trackViews)r.setWidth(this.getSampleInfoColumnWidth());this.findTracks(r=>typeof r.getSamples=="function").length>0&&(this.sampleInfoControl.performClickWithState(this,!0),this.sampleInfoControl.setButtonVisibility(!0));for(const{sampleInfoViewport:r}of this.trackViews)r.repaint()}async discardSampleInfo(){this.sampleInfo.discard();for(const{sampleInfoViewport:t}of this.trackViews)t.setWidth(this.getSampleInfoColumnWidth());this.findTracks(t=>typeof t.getSamples=="function").length>0&&(this.sampleInfoControl.performClickWithState(this,!1),this.sampleInfoControl.setButtonVisibility(!1));for(const{sampleInfoViewport:t}of this.trackViews)t.repaint();await this.layoutChange()}getSampleInfoColumnWidth(){if(this.sampleInfo.attributeCount){const t=this.findTracks(s=>typeof s.getSamples=="function").length>0,r=this.sampleInfo.hasAttributes(),n=this.sampleInfoControl.showSampleInfo;return t&&r&&n?this.sampleInfo.attributeCount*Js+Lm:0}else return 0}on(e,t){this.eventHandlers[e]||(this.eventHandlers[e]=[]),this.eventHandlers[e].push(t)}un(e,t){this.off(e,t)}off(e,t){if(!e)this.eventHandlers={};else if(!t)this.eventHandlers[e]=[];else{const r=this.eventHandlers[e];if(!r||r.length===0)console.warn("No handlers to remove for event: "+e);else{const n=r.indexOf(t);n!==-1&&this.eventHandlers[e].splice(n,1)}}}fireEvent(e,t,r){const n=this.eventHandlers[e];if(n===void 0||n.length===0)return;const o=r||window;return n.map(function(a){return a.apply(o,t)})[0]}dispose(){this.removeEventHandlers();for(let e of this.trackViews)e.dispose();this.roiManager&&this.roiManager.dispose()}toJSON(){const e={version:IA()};if(this.showSampleNames!==void 0&&(e.showSampleNames=this.showSampleNames),this.sampleNameViewportWidth&&(e.sampleNameViewportWidth=this.sampleNameViewportWidth),e.reference=this.genome.toJSON(),e.reference.fastaURL instanceof File)throw new Error(`Error. Sessions cannot include local file references ${e.reference.fastaURL.name}.`);if(e.reference.indexURL instanceof File)throw new Error(`Error. Sessions cannot include local file references ${e.reference.indexURL.name}.`);const t=[];let r=this.trackViews[0];for(let{referenceFrame:c}of r.viewports){const h=c.getLocusString();t.push(h)}e.locus=t.length===1?t[0]:t;const n=this.roiManager.toJSON();n&&(e.roi=n,this.roiManager.showOverlays||(e.showROIOverlays=!1)),this.qtlSelections.isEmpty()||(e.qtlSelections=this.qtlSelections.toJSON());const o=[],s=[];for(const{track:c}of this.trackViews)try{let h;typeof c.getState=="function"?h=Qt.localFileInspection(c.getState()):c.config&&(h=Qt.localFileInspection(c.config)),h&&(h.browser&&delete h.browser,h.order=c.order,o.push(h))}catch(h){const d=`Track: ${c.name}: ${h}`;console.error(d),s.push(d)}if(s.length>0){let c=1,h="Errors encountered saving session: </br>";for(let d of s)h+=` (${c++}) ${d.toString()} <br/>`;throw Error(h)}e.tracks=o;const a=[];for(const c of o)for(const h of Object.keys(c))(h==="file"||h==="indexFile")&&a.push(c[h]);const l=[];if(this.config.sampleinfo){e.sampleinfo=this.config.sampleinfo;for(const c of this.sampleInfo.sampleInfoFiles){const h=Qt.localFileInspection({url:c});h.file&&l.push(h.file)}l.length>0&&a.push(...l)}return a.length>0&&alert(`This session includes reference(s) to local file(s):
2450
2450
  ${a.map(c=>` ${c}`).join(`
2451
2451
  `)}
2452
- Local files cannot be loaded automatically when a saved session is restored.`),e}compressedSession(){const e=JSON.stringify(this.toJSON());return pO(e)}sessionURL(){const e=window.location.href.slice(),t=e.indexOf("?");return(t>0?e.substring(0,t):e)+"?sessionURL=blob:"+this.compressedSession()}mouseDownOnViewport(e,t){var r;r=pc(e),this.vpMouseDown={viewport:t,lastMouseX:r.x,mouseDownX:r.x,lastMouseY:r.y,mouseDownY:r.y,referenceFrame:t.referenceFrame}}cancelTrackPan(){const e=this.dragObject;this.dragObject=void 0,this.isScrolling=!1,this.vpMouseDown=void 0,e&&e.viewport.referenceFrame.start!==e.start&&(this.updateViews(),this.fireEvent("trackdragend",[e.viewport]))}isTrackPanning(){return this.dragObject}isSoftclipped(){return this.trackViews.find(t=>t.track.showSoftClips===!0)!==void 0}startTrackDrag(e){this.dragTrack=e}updateTrackDrag(e){if(e&&this.dragTrack){const t=this.dragTrack,r=this.trackViews.indexOf(e),n=this.trackViews.indexOf(t),o=this.trackViews;o[r]=t,o[n]=e;const s=this.trackViews[r].track.order;this.trackViews[n].track.order=s;const a=o.length;let l=s;if(r<n)for(let c=r+1;c<a;c++){const h=o[c].track;if(h.order<=l)h.order=Math.min(Number.MAX_SAFE_INTEGER,l+1),l=h.order;else break}else for(let c=r-1;c>0;c--){const h=o[c].track;if(h.order>=l)h.order=Math.max(-Number.MAX_SAFE_INTEGER,l-1),l=h.order;else break}this.reorderTracks()}}endTrackDrag(){this.dragTrack?(this.dragTrack=void 0,this.fireEvent("trackorderchanged",[this.getTrackOrder()])):this.dragTrack=void 0}addEventHandlers(){this.addWindowResizeHandler(),this.addRootMouseUpHandler(),this.addRootMouseLeaveHandler(),this.addColumnContainerEventHandlers(),this.addKeyboardHandler()}removeEventHandlers(){this.removeWindowResizeHandler(),this.removeRootMouseUpHandler(),this.removeRootMouseLeaveHandler(),this.removeColumnContainerEventHandlers(),this.removeKeyboardHandler()}addWindowResizeHandler(){this.boundWindowResizeHandler=hd.bind(this),window.addEventListener("resize",this.boundWindowResizeHandler)}removeWindowResizeHandler(){window.removeEventListener("resize",this.boundWindowResizeHandler)}addRootMouseUpHandler(){this.boundRootMouseUpHandler=_l.bind(this),this.root.addEventListener("mouseup",this.boundRootMouseUpHandler)}removeRootMouseUpHandler(){this.root.removeEventListener("mouseup",this.boundRootMouseUpHandler)}addRootMouseLeaveHandler(){this.boundRootMouseLeaveHandler=_l.bind(this),this.root.addEventListener("mouseleave",this.boundRootMouseLeaveHandler)}removeRootMouseLeaveHandler(){this.root.removeEventListener("mouseleave",this.boundRootMouseLeaveHandler)}addColumnContainerEventHandlers(){this.boundColumnContainerMouseMoveHandler=Gy.bind(this),this.boundColumnContainerTouchMoveHandler=Gy.bind(this),this.boundColumnContainerMouseLeaveHandler=_l.bind(this),this.boundColumnContainerMouseUpHandler=_l.bind(this),this.boundColumnContainerTouchEndHandler=_l.bind(this),this.columnContainer.addEventListener("mousemove",this.boundColumnContainerMouseMoveHandler),this.columnContainer.addEventListener("touchmove",this.boundColumnContainerTouchMoveHandler),this.columnContainer.addEventListener("mouseleave",this.boundColumnContainerMouseLeaveHandler),this.columnContainer.addEventListener("mouseup",this.boundColumnContainerMouseUpHandler),this.columnContainer.addEventListener("touchend",this.boundColumnContainerTouchEndHandler)}removeColumnContainerEventHandlers(){this.columnContainer.removeEventListener("mousemove",this.boundColumnContainerMouseMoveHandler),this.columnContainer.removeEventListener("touchmove",this.boundColumnContainerTouchMoveHandler),this.columnContainer.removeEventListener("mouseleave",this.boundColumnContainerMouseLeaveHandler),this.columnContainer.removeEventListener("mouseup",this.boundColumnContainerMouseUpHandler),this.columnContainer.removeEventListener("touchend",this.boundColumnContainerTouchEndHandler)}addKeyboardHandler(){this.keyUpHandler=rJ.bind(this),document.addEventListener("keyup",this.keyUpHandler)}removeKeyboardHandler(){console.log("Remove handler"),document.addEventListener("keyup",this.keyUpHandler)}static uncompressSession(e){let t;if(e.indexOf("/gzip;base64")>0){t=Oo(e);let r="";for(let n of t)r+=String.fromCharCode(n);return r}else{let r=e.substring(5);return gO(r)}}createCircularView(e,t){return t=t===!0,this.circularView=EG(e,this),this.circularViewControl=new rh(this.navbar.toggleButtonContainer,this),this.circularView.setAssembly({name:this.genome.id,id:this.genome.id,chromosomes:vF(this.genome)}),this.circularViewVisible=t,this.circularView}get circularViewVisible(){return this.circularView!==void 0&&this.circularView.visible}set circularViewVisible(e){this.circularView&&(this.circularView.visible=e,this.circularViewControl.setState(e))}get overlayTrackButton(){return this.navbar.overlayTrackButton}get roiTableControl(){return this.navbar.roiTableControl}get sampleNameControl(){return this.navbar.sampleNameControl}get sampleInfoControl(){return this.navbar.sampleInfoControl}async blat(e){return ga({sequence:e,browser:this,name:"Blat",title:"Blat"})}};Bu=new WeakSet,OA=async function(e){Yt(e)&&(e=JSON.parse(e));let t;try{t=await this.createTrack(e)}catch(r){let n=r.message||r.error||r.toString();const o={401:"Access unauthorized",403:"Access forbidden",404:"Not found"};o.hasOwnProperty(n)&&(n=o[n]),n=`${n} : ${Eo(e.url)?e.url.name:e.url}`;const s=new Error(n);throw console.error(s),s}if(t)return await this.addTrack(t)};let zc=Du;function iJ(i){let e;if(i instanceof File)e=i.name;else if(typeof i=="string")e=i;else throw new Error("Input must be a File object or a URL string");return e.split(".").pop().split("?")[0]}async function hd(i){if(this.referenceFrameList===void 0||this.referenceFrameList.length===0)return;const e=this.calculateViewportWidth(this.referenceFrameList.length);this.updateReferenceFrames(e),this.updateViewportElements(e),await this.syncUIState()}function Gy(i){i.preventDefault();const{x:e,y:t}=pc(i);if(this.vpMouseDown){const{viewport:r,referenceFrame:n}=this.vpMouseDown,o=Math.abs(e-this.vpMouseDown.mouseDownX)>Math.abs(t-this.vpMouseDown.mouseDownY);if(!this.dragObject&&!this.isScrolling){if(o)this.vpMouseDown.mouseDownX&&Math.abs(e-this.vpMouseDown.mouseDownX)>this.constants.dragThreshold&&(this.dragObject={viewport:r,start:n.start});else if(this.vpMouseDown.mouseDownY&&Math.abs(t-this.vpMouseDown.mouseDownY)>this.constants.scrollThreshold){this.isScrolling=!0;const s=r.viewportElement.clientHeight,a=r.trackView.maxViewportContentHeight();this.vpMouseDown.r=s/a}}if(this.dragObject){const s=!this.isSoftclipped();let a=this.vpMouseDown.lastMouseX-e;n.shiftPixels(a,r.viewportElement.clientWidth,s)&&this.updateViews(),this.fireEvent("trackdrag")}if(this.isScrolling){const s=this.vpMouseDown.lastMouseY-t;r.trackView.scrollByPixels(s)}this.vpMouseDown.lastMouseX=e,this.vpMouseDown.lastMouseY=t}}function _l(i){this.cancelTrackPan(),this.endTrackDrag()}async function rJ(i){if(!(!this.referenceFrameList||this.referenceFrameList.length>1)&&(i.code==="KeyF"||i.code==="KeyB")){const e=this.getSelectedTrackViews();if(e.length>0){const t=e[0].track;if(typeof t.nextFeatureAfter=="function"){const r=this.referenceFrameList[0],n=r.viewport?r.viewport.getWidth():this.calculateViewportWidth(this.referenceFrameList.length),o=r.chr.toLowerCase()==="all",s=t.visibilityWindow;if(o||s&&s>0&&r.bpPerPixel*n>s)return;const a=i.code==="KeyF",l=r.chr,c=r.center,h=await t.nextFeatureAfter(l,c,a);if(h){const d=await this.genome.getChromosomeName(h.chr);if(l===d){const u=(h.start+h.end)/2;if(i.shiftKey){const f=this.config.minimumBases||40,p=Math.max(f,1.1*(h.end-h.start));r.start=Math.max(0,u-p/2),r.end=u+p/2,r.bpPerPixel=(r.end-r.start)/n}else r.shift(u-c);this.updateViews()}else{r.chr=d;const u=(h.start+h.end)/2;if(i.shiftKey){const f=this.config.minimumBases||40,p=Math.max(f,1.1*(h.end-h.start));r.start=Math.max(0,u-p/2),r.end=r.start+p,r.bpPerPixel=(r.end-r.start)/n}else r.start=u-n*r.bpPerPixel/2,r.end=r.start+n*r.bpPerPixel;this.updateViews()}}}}}}function kg(i,e){for(let{viewports:t}of i)for(let r of t)r.trackLabelElement&&(t.indexOf(r)===0&&e===!0?r.trackLabelElement.style.display="block":r.trackLabelElement.style.display="none")}let Oa=[];async function nJ(i,e){e===void 0&&(e={}),ci.KNOWN_GENOMES||await ci.initializeGenomes(e),HA(e),e.queryParametersSupported&&lJ(e),e.apiKey&&Ee.setApiKey(e.apiKey),e.oauthToken&&Ee.setOauthToken(e.oauthToken),e.clientId&&!Ps()&&await CO({client_id:e.clientId,apiKey:e.apiKey,scope:"https://www.googleapis.com/auth/userinfo.profile"});const t=new zc(e,i);Oa.push(t);const r=e.sessionURL||e.session||e.hubURL;return r?await t.loadSession({url:r}):await t.loadSessionObject(e),t.navbar.navbarDidResize(),t}function oJ(i){i.dispose(),i.root.remove(),Oa=Oa.filter(e=>e!==i)}function sJ(){for(let i of Oa)i.dispose(),i.root.remove();Oa=[]}async function aJ(){for(let i of Oa)await i.visibilityChange()}function HA(i){return i.minimumBases===void 0&&(i.minimumBases=40),i.showIdeogram===void 0&&(i.showIdeogram=!0),i.showCytobandNames==null&&(i.showCytobandNames=!1),i.showCircularView===void 0&&(i.showCircularView=!1),i.showCircularViewButton===void 0&&(i.showCircularViewButton=!1),i.showTrackLabelButton===void 0&&(i.showTrackLabelButton=!0),i.showTrackLabels===void 0&&(i.showTrackLabels=!0),i.showCursorTrackingGuideButton===void 0&&(i.showCursorTrackingGuideButton=!0),i.showCursorGuide===void 0&&(i.showCursorGuide=i.showCursorTrackingGuide||!1),i.showCenterGuideButton===void 0&&(i.showCenterGuideButton=!0),i.showCenterGuide===void 0&&(i.showCenterGuide=!1),i.showSampleNames===void 0&&(i.showSampleNames=!1),i.showSVGButton===void 0&&(i.showSVGButton=!0),i.showControls===void 0&&(i.showControls=!0),i.showNavigation===void 0&&(i.showNavigation=!0),i.showRuler===void 0&&(i.showRuler=!0),i.flanking===void 0&&(i.flanking=1e3),i.pairsSupported===void 0&&(i.pairsSupported=!0),i.tracks||(i.tracks=[]),i}function lJ(i){var e,t,r,n,o,s,a,l,c,h;l=window.location.href,s={},e=l.indexOf("?"),t=l.lastIndexOf("#");let d,u,f;if(e>=0)for(t<0&&(t=l.length),r=e+1;r<t;)n=l.indexOf("&",r),n<0&&(n=t),o=l.substring(r,n),a=o.split("=",2),a.length===2?(c=a[0],h=decodeURIComponent(a[1]),c==="file"?d=h.split(","):c==="index"?u=h.split(","):c==="name"?f=h.split(","):c==="genome"?(h.startsWith("https://")||h.startsWith("http://"))&&!h.endsWith(".json")?i.reference={fastaURL:h,indexURL:h+".fai"}:(i[c]=h,i.reference=void 0):(c==="reference"&&(i.genome=void 0),i[c]=h),r=n+1):r++;if(d){i.tracks||(i.tracks=[]);for(let p=0;p<d.length;p++){if(d[p].endsWith(".xml")||d[p].endsWith(".json")){i.sessionURL=d[p];break}const m={url:d[p]};u&&u.length>p&&(m.indexURL=u[p]),f&&f.length>p&&(m.name=f[p]),i.tracks.push(m)}}return s}async function cJ(i,e){return await zc.prototype.createTrack.call(e,i)}const hJ=Ee.setApiKey;function dJ(i){return Ee.setOauthToken(i)}function uJ(i,e){return Ee.setOauthToken(i,e)}const fJ=Ee.oauth;var Wy={AlertDialog:o2,TrackUtils:$j,IGVGraphics:ge,MenuUtils:ix,DataRangeDialog:rx,createTrack:cJ,createBrowser:nJ,removeBrowser:oJ,removeAllBrowsers:sJ,visibilityChange:aJ,setGoogleOauthToken:dJ,setOauthToken:uJ,oauth:fJ,version:IA,setApiKey:hJ,TrackBase:Qt,registerTrackClass:RX,registerTrackCreatorFunction:BX,registerFileFormats:r$,loadSessionFile:zc.loadSessionFile,loadHub:mu};class pJ extends Error{}class gJ{constructor(e=1e3,t=!1){xe(this,"throttlePeriod");xe(this,"rejectSkipped");xe(this,"queuedPromises",{});xe(this,"pendingPromise",!1);this.throttlePeriod=e,this.rejectSkipped=t}skipPromise(e){if(!this.rejectSkipped)return;const t=this.queuedPromises[e];t==null||t.reject(new pJ)}async enqueue(e,t,r=0){return new Promise((n,o)=>{this.skipPromise(r),this.queuedPromises[r]={action:e,arg:t,resolve:n,reject:o},this.dequeue()})}async dequeue(){const e=Object.keys(this.queuedPromises);if(!this.pendingPromise&&e.length>0){const t=e[0],r=this.queuedPromises[t];delete this.queuedPromises[t],this.pendingPromise=!0;try{const n=await r.action(r.arg);r.resolve(n)}catch(n){r.reject(n)}finally{setTimeout(()=>{this.pendingPromise=!1,this.dequeue()},this.throttlePeriod)}}}}const Qy={bam:{type:"alignment",index:"bam_index"},bcf:{type:"vcf",index:"tabix_index"},bed:{type:"annotation"},bedgraph:{type:"wig"},bigbed:{type:"annotation"},bigwig:{type:"wig"},cram:{type:"alignment",index:"cram_index"},fasta:{type:"sequence",index:"fai_index"},gff:{type:"annotation"},gff3:{type:"annotation"},gtf:{type:"annotation"},twobit:{type:"sequence"},vcf:{type:"vcf"},vcf_bgzip:{type:"vcf",index:"tabix_index"},wig:{type:"wig"}},$A=i=>(p8("data-v-e366c20b"),i=i(),g8(),i),mJ={key:0,class:"igv-overlay border-4 border-dashed border-sky-500 rounded pointer-events-none"},bJ=$A(()=>Je("div",{class:"igv-overlay-title"},"Drop Track Datasets!",-1)),wJ=[bJ],vJ={key:1,class:"igv-overlay"},FJ=$A(()=>Je("div",{class:"igv-overlay-title"},"Loading Datasets...",-1)),yJ=[FJ],CJ={key:2,class:"bg-sky-100 border border-sky-200 mt-1 p-2 rounded text-sky-800 text-sm"},Ky="hg38",_J="annotation",xJ=500,AJ="https://s3.amazonaws.com/igv.org.genomes/genomes.json",kJ="http://cdn.jsdelivr.net/gh/galaxyproject/galaxy-test-data/gencode.v29.annotation.gff3",SJ=Me({__name:"Plugin",props:{datasetId:{},root:{},settings:{},specs:{},tracks:{}},emits:["update"],setup(i,{emit:e}){const t={extension:"gff3",id:"__test__",metadata_dbkey:"hg18",name:"TEST DATASET"},r=new gJ(xJ),n=i,o=e,s=ce(!1),a=ce(!1),l=ce(""),c=ce(null);let h=null,d=[];xi(()=>{u()}),Ri(()=>{f()}),ft(()=>{var M;return(M=n.settings.source)==null?void 0:M.genome},()=>r.enqueue(w,void 0,"loadGenome")),ft(()=>n.settings.locus,()=>r.enqueue(C,void 0,"locusSearch")),ft(()=>n.tracks,()=>r.enqueue(F,void 0,"loadTracks"));async function u(){if(n.settings.source.genome)await w();else if(n.datasetId){const M=await g(n.datasetId);if(M){const N=M.metadata_dbkey||Ky,z=await p(N)||await p(Ky),L=z?{source:z}:{},$=[{urlDataset:{id:M.id}}];o("update",L,$),console.debug("[igv] Updating values.",L,$)}}else l.value="Genome selection required. Open the side panel and choose options."}function f(){h&&(Wy.removeBrowser(h),h=void 0)}async function p(M){const N=["fasta_indexes","twobit"],z=m3();for(const x of N){const H=(await z.getDataTable(x)).find(R=>{var B;return Array.isArray((B=R.value)==null?void 0:B.row)&&R.value.row.includes(M)});if(H)return{genome:H.value,origin:"builtin"}}const D=(await g3().getDataJson(AJ)).find(x=>{var P;return((P=x.value)==null?void 0:P.id)===M});return D?{genome:D.value,origin:"igv"}:null}function m(){const M=n.settings.source.genome;if(M){if(n.settings.source.origin==="igv")return M;{const N=M.id,z=M.columns||[],L=M.row||[],$=M.table,D=z.indexOf("path");if(D>=0&&L.length>D){const x=L[D].split("/").pop(),P=`${n.root}api/tool_data/${$}/fields/${N}/files/`;if($==="fasta_indexes")return{id:N,fastaURL:`${P}${x}`,indexURL:`${P}${x}.fai`};if($==="twobit")return{id:N,twoBitURL:`${P}${x}`}}}}}function v(M){return M==="__test__"?kJ:`${n.root}api/datasets/${M}/display`}async function g(M){if(M==="__test__")return t;try{const{data:N}=await Ss().GET(`/api/datasets/${M}`);return N}catch(N){return l.value=`Failed to retrieve dataset details for: ${M}`,console.error(l.value,N),null}}function b(M,N){var $;const z=N?($=Qy[N])==null?void 0:$.index:null;return z&&M!=="__test__"?`${n.root}api/datasets/${M}/metadata_file?metadata_file=${z}`:null}async function w(){const M=m();if(M){a.value=!0;try{h?(h.off("locuschange",k),await h.loadGenome(M)):c.value&&(h=await Wy.createBrowser(c.value,{genome:M})),await F(!0),await C(),l.value="",h.on("locuschange",k);const N=h.root.querySelector(".igv-navbar");N&&Object.assign(N.style,{flexFlow:"column",height:"unset",paddingBottom:"3px"})}catch(N){l.value="Failed to load genome.",console.error(l.value,N),f()}a.value=!1}}async function F(M=!1){if(h){a.value=!0;const N=await T();console.debug("[igv] Resolved Tracks",N);const{toAdd:z,toRemove:L}=_(N,d,M);for(const $ of L){const D=h.trackViews.find(x=>x.track.name===$.name);D&&(console.debug(`[igv] Removing existing track '${D.track.name}'`),h.removeTrack(D.track))}for(const $ of z)try{console.debug(`[igv] Adding new track '${$.name}'`),await h.loadTrack($)}catch(D){console.error(`[igv] Failed to load track '${$.name}'`,D)}h.reorderTracks(),d=N.map($=>({...$})),a.value=!1}}function k(){h&&o("update",{locus:I()})}function I(){var M;if(h&&((M=h.referenceFrameList)==null?void 0:M.length)>0){const N=h.referenceFrameList[0];return`${N.chr}:${Math.round(N.start)+1}-${Math.round(N.end)}`}else{console.error("[igv] Failed to obtain current locus.");return}}async function C(){var M;if(h){const N=(M=n.settings)==null?void 0:M.locus;if(I()!==N){const z=N||"all";if(A(z))try{a.value=!0,await h.search(z),a.value=!1}catch{console.warn("[igv] Locus search failed:",z)}else console.warn("[igv] Invalid locus ignored:",z)}}else l.value="Failed to search.",console.error("[igv] Browser not available.")}function A(M){const N=/^[\w.-]+$/,z=/^([\w.-]+):(\d{1,3}(?:,\d{3})*|\d+)-(\d{1,3}(?:,\d{3})*|\d+)$/;if(N.test(M))return!0;{const L=M.match(z);if(L){const $=parseInt(L[2].replace(/,/g,""),10),D=parseInt(L[3].replace(/,/g,""),10);return Number.isInteger($)&&Number.isInteger(D)&&$<D}else return!1}}function E(M){var $,D,x;let N=!1;const z=[],L=($=M.dataTransfer)==null?void 0:$.getData("text");try{const P=L?JSON.parse(L):[];if(Array.isArray(P)&&P.length>0){const H=P[0];if(H&&typeof H=="object"){const R=H.id?[H]:Object.values(H);for(const B of R)((D=B.object)==null?void 0:D.model_class)==="HistoryDatasetAssociation"&&((x=B.object)!=null&&x.id)&&B.element_identifier?z.push({id:B.object.id,name:B.element_identifier}):B.history_content_type==="dataset"&&B.id?z.push({id:B.id,name:B.name}):N=!0}else N=!0}else N=!0}catch{l.value="Failed to parse dropped data."}if(N||z.length===0)l.value="Please make sure to only drop valid history datasets.",console.debug("[igv] Dropped Content",L);else{const P=[...n.tracks,...z.map(H=>({urlDataset:H}))];o("update",{},P),l.value="",console.debug("[igv] Dropped Tracks",P)}s.value=!1}function y(M){const N=Object.keys(M).sort(),z=JSON.stringify(M,N);let L=2166136261;for(let $=0;$<z.length;$++)L^=z.charCodeAt($),L+=(L<<1)+(L<<4)+(L<<7)+(L<<8)+(L<<24);return(L>>>0).toString(36)}function S(M){const N=M==null?void 0:M.toLowerCase();if(N){const z=Qy[N];if(z!=null&&z.type)return z.type}return _J}function _(M,N,z=!1){const L=new Map(N.map(x=>[x.name,x])),$=N.filter(x=>{const P=M.find(H=>H.name===x.name);return z||!P||y(P)!==y(x)});return{toAdd:M.filter(x=>{const P=L.get(x.name);return z||!P||y(x)!==y(P)}),toRemove:$}}async function T(){const M=[];for(const $ of n.tracks){const D=$.urlDataset,x=D?await g(D.id):null,P=$.displayMode,H=$.color,R=(x==null?void 0:x.extension)||null,B=$.indexUrlDataset,U=$.name||(x==null?void 0:x.name)||"",j=$.type&&$.type!=="auto"?$.type:S(R),X=D?v(D.id):null,G=B?v(B.id):b(D==null?void 0:D.id,R),re={color:H,displayMode:P,format:R,indexURL:G,name:U,type:j,url:X};console.debug("[igv] Track:",re),M.push(re)}const N=new Set,z=new Map,L=[];return M.forEach(($,D)=>{const x=$.name||`track-${y($)}`,P=JSON.stringify({...$,name:x}),H=typeof($==null?void 0:$.url)=="string"&&$.url.trim().length>0,R=N.has(P);if(H&&!R){const B=z.get(x)??0;let U=x;B>0&&(U=`${x} ~ ${B}`),z.set(x,B+1),N.add(P),L.push({...$,name:U,order:-D})}else console.warn(H?`[igv] Duplicate track skipped: '${x}'`:`[igv] Invalid track skipped: '${x}'`)}),L}return(M,N)=>(Pe(),ht("div",{class:"h-screen overflow-auto relative",onDragover:N[0]||(N[0]=zf(z=>s.value=!0,["prevent"])),onDragleave:N[1]||(N[1]=zf(z=>s.value=!1,["prevent"])),onDrop:zf(E,["prevent"])},[s.value?(Pe(),ht("div",mJ,wJ)):a.value?(Pe(),ht("div",vJ,yJ)):nr("",!0),l.value?(Pe(),ht("div",CJ,cn(l.value),1)):nr("",!0),Je("div",{ref_key:"viewport",ref:c},null,512)],32))}}),IJ=(i,e)=>{const t=i.__vccOpts||i;for(const[r,n]of e)t[r]=n;return t},EJ=IJ(SJ,[["__scopeId","data-v-e366c20b"]]),TJ=Me({__name:"App",props:{container:{},credentials:{},incoming:{}},setup(i){return(e,t)=>(Pe(),Nt(He(Fz),{container:e.container,credentials:e.credentials,incoming:e.incoming},{default:pt(({datasetId:r,datasetUrl:n,root:o,save:s,settings:a,specs:l,tracks:c,update:h})=>[Ve(EJ,{"dataset-id":r,"dataset-url":n,root:o,settings:a,specs:l,tracks:c,onSave:s,onUpdate:h},null,8,["dataset-id","dataset-url","root","settings","specs","tracks","onSave","onUpdate"])]),_:1},8,["container","credentials","incoming"]))}});async function NJ(){const e=new URL(import.meta.url).searchParams.get("container")||"app";G9({render:()=>O(TJ,{container:e,credentials:"include"})}).mount(`#${e}`)}NJ();
2452
+ Local files cannot be loaded automatically when a saved session is restored.`),e}compressedSession(){const e=JSON.stringify(this.toJSON());return pO(e)}sessionURL(){const e=window.location.href.slice(),t=e.indexOf("?");return(t>0?e.substring(0,t):e)+"?sessionURL=blob:"+this.compressedSession()}mouseDownOnViewport(e,t){var r;r=pc(e),this.vpMouseDown={viewport:t,lastMouseX:r.x,mouseDownX:r.x,lastMouseY:r.y,mouseDownY:r.y,referenceFrame:t.referenceFrame}}cancelTrackPan(){const e=this.dragObject;this.dragObject=void 0,this.isScrolling=!1,this.vpMouseDown=void 0,e&&e.viewport.referenceFrame.start!==e.start&&(this.updateViews(),this.fireEvent("trackdragend",[e.viewport]))}isTrackPanning(){return this.dragObject}isSoftclipped(){return this.trackViews.find(t=>t.track.showSoftClips===!0)!==void 0}startTrackDrag(e){this.dragTrack=e}updateTrackDrag(e){if(e&&this.dragTrack){const t=this.dragTrack,r=this.trackViews.indexOf(e),n=this.trackViews.indexOf(t),o=this.trackViews;o[r]=t,o[n]=e;const s=this.trackViews[r].track.order;this.trackViews[n].track.order=s;const a=o.length;let l=s;if(r<n)for(let c=r+1;c<a;c++){const h=o[c].track;if(h.order<=l)h.order=Math.min(Number.MAX_SAFE_INTEGER,l+1),l=h.order;else break}else for(let c=r-1;c>0;c--){const h=o[c].track;if(h.order>=l)h.order=Math.max(-Number.MAX_SAFE_INTEGER,l-1),l=h.order;else break}this.reorderTracks()}}endTrackDrag(){this.dragTrack?(this.dragTrack=void 0,this.fireEvent("trackorderchanged",[this.getTrackOrder()])):this.dragTrack=void 0}addEventHandlers(){this.addWindowResizeHandler(),this.addRootMouseUpHandler(),this.addRootMouseLeaveHandler(),this.addColumnContainerEventHandlers(),this.addKeyboardHandler()}removeEventHandlers(){this.removeWindowResizeHandler(),this.removeRootMouseUpHandler(),this.removeRootMouseLeaveHandler(),this.removeColumnContainerEventHandlers(),this.removeKeyboardHandler()}addWindowResizeHandler(){this.boundWindowResizeHandler=hd.bind(this),window.addEventListener("resize",this.boundWindowResizeHandler)}removeWindowResizeHandler(){window.removeEventListener("resize",this.boundWindowResizeHandler)}addRootMouseUpHandler(){this.boundRootMouseUpHandler=_l.bind(this),this.root.addEventListener("mouseup",this.boundRootMouseUpHandler)}removeRootMouseUpHandler(){this.root.removeEventListener("mouseup",this.boundRootMouseUpHandler)}addRootMouseLeaveHandler(){this.boundRootMouseLeaveHandler=_l.bind(this),this.root.addEventListener("mouseleave",this.boundRootMouseLeaveHandler)}removeRootMouseLeaveHandler(){this.root.removeEventListener("mouseleave",this.boundRootMouseLeaveHandler)}addColumnContainerEventHandlers(){this.boundColumnContainerMouseMoveHandler=Gy.bind(this),this.boundColumnContainerTouchMoveHandler=Gy.bind(this),this.boundColumnContainerMouseLeaveHandler=_l.bind(this),this.boundColumnContainerMouseUpHandler=_l.bind(this),this.boundColumnContainerTouchEndHandler=_l.bind(this),this.columnContainer.addEventListener("mousemove",this.boundColumnContainerMouseMoveHandler),this.columnContainer.addEventListener("touchmove",this.boundColumnContainerTouchMoveHandler),this.columnContainer.addEventListener("mouseleave",this.boundColumnContainerMouseLeaveHandler),this.columnContainer.addEventListener("mouseup",this.boundColumnContainerMouseUpHandler),this.columnContainer.addEventListener("touchend",this.boundColumnContainerTouchEndHandler)}removeColumnContainerEventHandlers(){this.columnContainer.removeEventListener("mousemove",this.boundColumnContainerMouseMoveHandler),this.columnContainer.removeEventListener("touchmove",this.boundColumnContainerTouchMoveHandler),this.columnContainer.removeEventListener("mouseleave",this.boundColumnContainerMouseLeaveHandler),this.columnContainer.removeEventListener("mouseup",this.boundColumnContainerMouseUpHandler),this.columnContainer.removeEventListener("touchend",this.boundColumnContainerTouchEndHandler)}addKeyboardHandler(){this.keyUpHandler=rJ.bind(this),document.addEventListener("keyup",this.keyUpHandler)}removeKeyboardHandler(){console.log("Remove handler"),document.addEventListener("keyup",this.keyUpHandler)}static uncompressSession(e){let t;if(e.indexOf("/gzip;base64")>0){t=Oo(e);let r="";for(let n of t)r+=String.fromCharCode(n);return r}else{let r=e.substring(5);return gO(r)}}createCircularView(e,t){return t=t===!0,this.circularView=EG(e,this),this.circularViewControl=new rh(this.navbar.toggleButtonContainer,this),this.circularView.setAssembly({name:this.genome.id,id:this.genome.id,chromosomes:vF(this.genome)}),this.circularViewVisible=t,this.circularView}get circularViewVisible(){return this.circularView!==void 0&&this.circularView.visible}set circularViewVisible(e){this.circularView&&(this.circularView.visible=e,this.circularViewControl.setState(e))}get overlayTrackButton(){return this.navbar.overlayTrackButton}get roiTableControl(){return this.navbar.roiTableControl}get sampleNameControl(){return this.navbar.sampleNameControl}get sampleInfoControl(){return this.navbar.sampleInfoControl}async blat(e){return ga({sequence:e,browser:this,name:"Blat",title:"Blat"})}};Bu=new WeakSet,OA=async function(e){Yt(e)&&(e=JSON.parse(e));let t;try{t=await this.createTrack(e)}catch(r){let n=r.message||r.error||r.toString();const o={401:"Access unauthorized",403:"Access forbidden",404:"Not found"};o.hasOwnProperty(n)&&(n=o[n]),n=`${n} : ${Eo(e.url)?e.url.name:e.url}`;const s=new Error(n);throw console.error(s),s}if(t)return await this.addTrack(t)};let zc=Du;function iJ(i){let e;if(i instanceof File)e=i.name;else if(typeof i=="string")e=i;else throw new Error("Input must be a File object or a URL string");return e.split(".").pop().split("?")[0]}async function hd(i){if(this.referenceFrameList===void 0||this.referenceFrameList.length===0)return;const e=this.calculateViewportWidth(this.referenceFrameList.length);this.updateReferenceFrames(e),this.updateViewportElements(e),await this.syncUIState()}function Gy(i){i.preventDefault();const{x:e,y:t}=pc(i);if(this.vpMouseDown){const{viewport:r,referenceFrame:n}=this.vpMouseDown,o=Math.abs(e-this.vpMouseDown.mouseDownX)>Math.abs(t-this.vpMouseDown.mouseDownY);if(!this.dragObject&&!this.isScrolling){if(o)this.vpMouseDown.mouseDownX&&Math.abs(e-this.vpMouseDown.mouseDownX)>this.constants.dragThreshold&&(this.dragObject={viewport:r,start:n.start});else if(this.vpMouseDown.mouseDownY&&Math.abs(t-this.vpMouseDown.mouseDownY)>this.constants.scrollThreshold){this.isScrolling=!0;const s=r.viewportElement.clientHeight,a=r.trackView.maxViewportContentHeight();this.vpMouseDown.r=s/a}}if(this.dragObject){const s=!this.isSoftclipped();let a=this.vpMouseDown.lastMouseX-e;n.shiftPixels(a,r.viewportElement.clientWidth,s)&&this.updateViews(),this.fireEvent("trackdrag")}if(this.isScrolling){const s=this.vpMouseDown.lastMouseY-t;r.trackView.scrollByPixels(s)}this.vpMouseDown.lastMouseX=e,this.vpMouseDown.lastMouseY=t}}function _l(i){this.cancelTrackPan(),this.endTrackDrag()}async function rJ(i){if(!(!this.referenceFrameList||this.referenceFrameList.length>1)&&(i.code==="KeyF"||i.code==="KeyB")){const e=this.getSelectedTrackViews();if(e.length>0){const t=e[0].track;if(typeof t.nextFeatureAfter=="function"){const r=this.referenceFrameList[0],n=r.viewport?r.viewport.getWidth():this.calculateViewportWidth(this.referenceFrameList.length),o=r.chr.toLowerCase()==="all",s=t.visibilityWindow;if(o||s&&s>0&&r.bpPerPixel*n>s)return;const a=i.code==="KeyF",l=r.chr,c=r.center,h=await t.nextFeatureAfter(l,c,a);if(h){const d=await this.genome.getChromosomeName(h.chr);if(l===d){const u=(h.start+h.end)/2;if(i.shiftKey){const f=this.config.minimumBases||40,p=Math.max(f,1.1*(h.end-h.start));r.start=Math.max(0,u-p/2),r.end=u+p/2,r.bpPerPixel=(r.end-r.start)/n}else r.shift(u-c);this.updateViews()}else{r.chr=d;const u=(h.start+h.end)/2;if(i.shiftKey){const f=this.config.minimumBases||40,p=Math.max(f,1.1*(h.end-h.start));r.start=Math.max(0,u-p/2),r.end=r.start+p,r.bpPerPixel=(r.end-r.start)/n}else r.start=u-n*r.bpPerPixel/2,r.end=r.start+n*r.bpPerPixel;this.updateViews()}}}}}}function kg(i,e){for(let{viewports:t}of i)for(let r of t)r.trackLabelElement&&(t.indexOf(r)===0&&e===!0?r.trackLabelElement.style.display="block":r.trackLabelElement.style.display="none")}let Oa=[];async function nJ(i,e){e===void 0&&(e={}),ci.KNOWN_GENOMES||await ci.initializeGenomes(e),HA(e),e.queryParametersSupported&&lJ(e),e.apiKey&&Ee.setApiKey(e.apiKey),e.oauthToken&&Ee.setOauthToken(e.oauthToken),e.clientId&&!Ps()&&await CO({client_id:e.clientId,apiKey:e.apiKey,scope:"https://www.googleapis.com/auth/userinfo.profile"});const t=new zc(e,i);Oa.push(t);const r=e.sessionURL||e.session||e.hubURL;return r?await t.loadSession({url:r}):await t.loadSessionObject(e),t.navbar.navbarDidResize(),t}function oJ(i){i.dispose(),i.root.remove(),Oa=Oa.filter(e=>e!==i)}function sJ(){for(let i of Oa)i.dispose(),i.root.remove();Oa=[]}async function aJ(){for(let i of Oa)await i.visibilityChange()}function HA(i){return i.minimumBases===void 0&&(i.minimumBases=40),i.showIdeogram===void 0&&(i.showIdeogram=!0),i.showCytobandNames==null&&(i.showCytobandNames=!1),i.showCircularView===void 0&&(i.showCircularView=!1),i.showCircularViewButton===void 0&&(i.showCircularViewButton=!1),i.showTrackLabelButton===void 0&&(i.showTrackLabelButton=!0),i.showTrackLabels===void 0&&(i.showTrackLabels=!0),i.showCursorTrackingGuideButton===void 0&&(i.showCursorTrackingGuideButton=!0),i.showCursorGuide===void 0&&(i.showCursorGuide=i.showCursorTrackingGuide||!1),i.showCenterGuideButton===void 0&&(i.showCenterGuideButton=!0),i.showCenterGuide===void 0&&(i.showCenterGuide=!1),i.showSampleNames===void 0&&(i.showSampleNames=!1),i.showSVGButton===void 0&&(i.showSVGButton=!0),i.showControls===void 0&&(i.showControls=!0),i.showNavigation===void 0&&(i.showNavigation=!0),i.showRuler===void 0&&(i.showRuler=!0),i.flanking===void 0&&(i.flanking=1e3),i.pairsSupported===void 0&&(i.pairsSupported=!0),i.tracks||(i.tracks=[]),i}function lJ(i){var e,t,r,n,o,s,a,l,c,h;l=window.location.href,s={},e=l.indexOf("?"),t=l.lastIndexOf("#");let d,u,f;if(e>=0)for(t<0&&(t=l.length),r=e+1;r<t;)n=l.indexOf("&",r),n<0&&(n=t),o=l.substring(r,n),a=o.split("=",2),a.length===2?(c=a[0],h=decodeURIComponent(a[1]),c==="file"?d=h.split(","):c==="index"?u=h.split(","):c==="name"?f=h.split(","):c==="genome"?(h.startsWith("https://")||h.startsWith("http://"))&&!h.endsWith(".json")?i.reference={fastaURL:h,indexURL:h+".fai"}:(i[c]=h,i.reference=void 0):(c==="reference"&&(i.genome=void 0),i[c]=h),r=n+1):r++;if(d){i.tracks||(i.tracks=[]);for(let p=0;p<d.length;p++){if(d[p].endsWith(".xml")||d[p].endsWith(".json")){i.sessionURL=d[p];break}const m={url:d[p]};u&&u.length>p&&(m.indexURL=u[p]),f&&f.length>p&&(m.name=f[p]),i.tracks.push(m)}}return s}async function cJ(i,e){return await zc.prototype.createTrack.call(e,i)}const hJ=Ee.setApiKey;function dJ(i){return Ee.setOauthToken(i)}function uJ(i,e){return Ee.setOauthToken(i,e)}const fJ=Ee.oauth;var Wy={AlertDialog:o2,TrackUtils:$j,IGVGraphics:ge,MenuUtils:ix,DataRangeDialog:rx,createTrack:cJ,createBrowser:nJ,removeBrowser:oJ,removeAllBrowsers:sJ,visibilityChange:aJ,setGoogleOauthToken:dJ,setOauthToken:uJ,oauth:fJ,version:IA,setApiKey:hJ,TrackBase:Qt,registerTrackClass:RX,registerTrackCreatorFunction:BX,registerFileFormats:r$,loadSessionFile:zc.loadSessionFile,loadHub:mu};class pJ extends Error{}class gJ{constructor(e=1e3,t=!1){xe(this,"throttlePeriod");xe(this,"rejectSkipped");xe(this,"queuedPromises",{});xe(this,"pendingPromise",!1);this.throttlePeriod=e,this.rejectSkipped=t}skipPromise(e){if(!this.rejectSkipped)return;const t=this.queuedPromises[e];t==null||t.reject(new pJ)}async enqueue(e,t,r=0){return new Promise((n,o)=>{this.skipPromise(r),this.queuedPromises[r]={action:e,arg:t,resolve:n,reject:o},this.dequeue()})}async dequeue(){const e=Object.keys(this.queuedPromises);if(!this.pendingPromise&&e.length>0){const t=e[0],r=this.queuedPromises[t];delete this.queuedPromises[t],this.pendingPromise=!0;try{const n=await r.action(r.arg);r.resolve(n)}catch(n){r.reject(n)}finally{setTimeout(()=>{this.pendingPromise=!1,this.dequeue()},this.throttlePeriod)}}}}const Qy={bam:{type:"alignment",index:"bam_index"},bcf:{type:"vcf",index:"tabix_index"},bed:{type:"annotation"},bedgraph:{type:"wig"},bigbed:{type:"annotation"},bigwig:{type:"wig"},cram:{type:"alignment",index:"cram_index"},fasta:{type:"sequence",index:"fai_index"},gff:{type:"annotation"},gff3:{type:"annotation"},gtf:{type:"annotation"},twobit:{type:"sequence"},vcf:{type:"vcf"},vcf_bgzip:{type:"vcf",index:"tabix_index"},wig:{type:"wig"}},$A=i=>(p8("data-v-4af1c099"),i=i(),g8(),i),mJ={key:0,class:"igv-overlay border-4 border-dashed border-sky-500 rounded pointer-events-none"},bJ=$A(()=>Je("div",{class:"igv-overlay-title"},"Drop Track Datasets!",-1)),wJ=[bJ],vJ={key:1,class:"igv-overlay"},FJ=$A(()=>Je("div",{class:"igv-overlay-title"},"Loading Datasets...",-1)),yJ=[FJ],CJ={key:2,class:"bg-sky-100 border border-sky-200 mt-1 p-2 rounded text-sky-800 text-sm"},Ky="hg38",_J="annotation",xJ=500,AJ="https://s3.amazonaws.com/igv.org.genomes/genomes.json",kJ="http://cdn.jsdelivr.net/gh/galaxyproject/galaxy-test-data/gencode.v29.annotation.gff3",SJ=Me({__name:"Plugin",props:{datasetId:{},root:{},settings:{},specs:{},tracks:{}},emits:["update"],setup(i,{emit:e}){const t={extension:"gff3",id:"__test__",metadata_dbkey:"hg18",name:"TEST DATASET"},r=new gJ(xJ),n=i,o=e,s=ce(!1),a=ce(!1),l=ce(""),c=ce(null);let h=null,d=[];xi(()=>{u()}),Ri(()=>{f()}),ft(()=>{var M;return(M=n.settings.source)==null?void 0:M.genome},()=>r.enqueue(w,void 0,"loadGenome")),ft(()=>n.settings.locus,()=>r.enqueue(C,void 0,"locusSearch")),ft(()=>n.tracks,()=>r.enqueue(F,void 0,"loadTracks"));async function u(){if(n.settings.source.genome)await w();else if(n.datasetId){const M=await g(n.datasetId);if(M){const N=M.metadata_dbkey||Ky,z=await p(N)||await p(Ky),L=z?{source:z}:{},$=[{urlDataset:{id:M.id}}];o("update",L,$),console.debug("[igv] Updating values.",L,$)}}else l.value="Genome selection required. Open the side panel and choose options."}function f(){h&&(Wy.removeBrowser(h),h=void 0)}async function p(M){const N=["fasta_indexes","twobit"],z=m3();for(const x of N){const H=(await z.getDataTable(x)).find(R=>{var B;return Array.isArray((B=R.value)==null?void 0:B.row)&&R.value.row.includes(M)});if(H)return{genome:H.value,origin:"builtin"}}const D=(await g3().getDataJson(AJ)).find(x=>{var P;return((P=x.value)==null?void 0:P.id)===M});return D?{genome:D.value,origin:"igv"}:null}function m(){const M=n.settings.source.genome;if(M){if(n.settings.source.origin==="igv")return M;{const N=M.id,z=M.columns||[],L=M.row||[],$=M.table,D=z.indexOf("path");if(D>=0&&L.length>D){const x=L[D].split("/").pop(),P=`${n.root}api/tool_data/${$}/fields/${N}/files/`;if($==="fasta_indexes")return{id:N,fastaURL:`${P}${x}`,indexURL:`${P}${x}.fai`};if($==="twobit")return{id:N,twoBitURL:`${P}${x}`}}}}}function v(M){return M==="__test__"?kJ:`${n.root}api/datasets/${M}/display`}async function g(M){if(M==="__test__")return t;try{const{data:N}=await Ss().GET(`/api/datasets/${M}`);return N}catch(N){return l.value=`Failed to retrieve dataset details for: ${M}`,console.error(l.value,N),null}}function b(M,N){var $;const z=N?($=Qy[N])==null?void 0:$.index:null;return z&&M!=="__test__"?`${n.root}api/datasets/${M}/metadata_file?metadata_file=${z}`:null}async function w(){const M=m();if(M){a.value=!0;try{h?(h.off("locuschange",k),await h.loadGenome(M)):c.value&&(h=await Wy.createBrowser(c.value,{genome:M})),await F(!0),await C(),l.value="",h.on("locuschange",k);const N=h.root.querySelector(".igv-navbar");N&&Object.assign(N.style,{flexFlow:"column",height:"unset",paddingBottom:"3px"})}catch(N){l.value="Failed to load genome.",console.error(l.value,N),f()}a.value=!1}}async function F(M=!1){if(h){a.value=!0;const N=await T();console.debug("[igv] Resolved Tracks",N);const{toAdd:z,toRemove:L}=_(N,d,M);for(const $ of L){const D=h.trackViews.find(x=>x.track.name===$.name);D&&(console.debug(`[igv] Removing existing track '${D.track.name}'`),h.removeTrack(D.track))}for(const $ of z)try{console.debug(`[igv] Adding new track '${$.name}'`),await h.loadTrack($)}catch(D){console.error(`[igv] Failed to load track '${$.name}'`,D)}h.reorderTracks(),d=N.map($=>({...$})),a.value=!1}}function k(){h&&o("update",{locus:I()})}function I(){var M;if(h&&((M=h.referenceFrameList)==null?void 0:M.length)>0){const N=h.referenceFrameList[0];return`${N.chr}:${Math.round(N.start)+1}-${Math.round(N.end)}`}else{console.error("[igv] Failed to obtain current locus.");return}}async function C(){var M;if(h){const N=(M=n.settings)==null?void 0:M.locus;if(I()!==N){const z=N||"all";if(A(z))try{a.value=!0,await h.search(z),a.value=!1}catch{console.warn("[igv] Locus search failed:",z)}else console.warn("[igv] Invalid locus ignored:",z)}}else l.value="Failed to search.",console.error("[igv] Browser not available.")}function A(M){const N=/^[\w.-]+$/,z=/^([\w.-]+):(\d{1,3}(?:,\d{3})*|\d+)-(\d{1,3}(?:,\d{3})*|\d+)$/;if(N.test(M))return!0;{const L=M.match(z);if(L){const $=parseInt(L[2].replace(/,/g,""),10),D=parseInt(L[3].replace(/,/g,""),10);return Number.isInteger($)&&Number.isInteger(D)&&$<D}else return!1}}function E(M){var $,D,x;let N=!1;const z=[],L=($=M.dataTransfer)==null?void 0:$.getData("text");try{const P=L?JSON.parse(L):[];if(Array.isArray(P)&&P.length>0){const H=P[0];if(H&&typeof H=="object"){const R=H.id?[H]:Object.values(H);for(const B of R)((D=B.object)==null?void 0:D.model_class)==="HistoryDatasetAssociation"&&((x=B.object)!=null&&x.id)&&B.element_identifier?z.push({id:B.object.id,name:B.element_identifier}):B.history_content_type==="dataset"&&B.id?z.push({id:B.id,name:B.name}):N=!0}else N=!0}else N=!0}catch{l.value="Failed to parse dropped data."}if(N||z.length===0)l.value="Please make sure to only drop valid history datasets.",console.debug("[igv] Dropped Content",L);else{const P=[...n.tracks,...z.map(H=>({urlDataset:H}))];o("update",{},P),l.value="",console.debug("[igv] Dropped Tracks",P)}s.value=!1}function y(M){const N=Object.keys(M).sort(),z=JSON.stringify(M,N);let L=2166136261;for(let $=0;$<z.length;$++)L^=z.charCodeAt($),L+=(L<<1)+(L<<4)+(L<<7)+(L<<8)+(L<<24);return(L>>>0).toString(36)}function S(M){const N=M==null?void 0:M.toLowerCase();if(N){const z=Qy[N];if(z!=null&&z.type)return z.type}return _J}function _(M,N,z=!1){const L=new Map(N.map(x=>[x.name,x])),$=N.filter(x=>{const P=M.find(H=>H.name===x.name);return z||!P||y(P)!==y(x)});return{toAdd:M.filter(x=>{const P=L.get(x.name);return z||!P||y(x)!==y(P)}),toRemove:$}}async function T(){const M=[];for(const $ of n.tracks){const D=$.urlDataset,x=D?await g(D.id):null,P=$.displayMode,H=$.color,R=(x==null?void 0:x.extension)||null,B=$.indexUrlDataset,U=$.name||(x==null?void 0:x.name)||"",j=$.type&&$.type!=="auto"?$.type:S(R),X=D?v(D.id):null,G=B?v(B.id):b(D==null?void 0:D.id,R),re={color:H,displayMode:P,format:R,indexURL:G,name:U,type:j,url:X};console.debug("[igv] Track:",re),M.push(re)}const N=new Set,z=new Map,L=[];return M.forEach(($,D)=>{const x=$.name||`track-${y($)}`,P=JSON.stringify({...$,name:x}),H=typeof($==null?void 0:$.url)=="string"&&$.url.trim().length>0,R=N.has(P);if(H&&!R){const B=z.get(x)??0;let U=x;B>0&&(U=`${x} ~ ${B}`),z.set(x,B+1),N.add(P),L.push({...$,name:U,order:-D})}else console.warn(H?`[igv] Duplicate track skipped: '${x}'`:`[igv] Invalid track skipped: '${x}'`)}),L}return(M,N)=>(Pe(),ht("div",{class:"h-screen overflow-auto relative",onDragover:N[0]||(N[0]=zf(z=>s.value=!0,["prevent"])),onDragleave:N[1]||(N[1]=zf(z=>s.value=!1,["prevent"])),onDrop:zf(E,["prevent"])},[s.value?(Pe(),ht("div",mJ,wJ)):a.value?(Pe(),ht("div",vJ,yJ)):nr("",!0),l.value?(Pe(),ht("div",CJ,cn(l.value),1)):nr("",!0),Je("div",{id:"viewport",ref_key:"viewport",ref:c},null,512)],32))}}),IJ=(i,e)=>{const t=i.__vccOpts||i;for(const[r,n]of e)t[r]=n;return t},EJ=IJ(SJ,[["__scopeId","data-v-4af1c099"]]),TJ=Me({__name:"App",props:{container:{},credentials:{},incoming:{}},setup(i){return(e,t)=>(Pe(),Nt(He(Fz),{container:e.container,credentials:e.credentials,incoming:e.incoming},{default:pt(({datasetId:r,datasetUrl:n,root:o,save:s,settings:a,specs:l,tracks:c,update:h})=>[Ve(EJ,{"dataset-id":r,"dataset-url":n,root:o,settings:a,specs:l,tracks:c,onSave:s,onUpdate:h},null,8,["dataset-id","dataset-url","root","settings","specs","tracks","onSave","onUpdate"])]),_:1},8,["container","credentials","incoming"]))}});async function NJ(){const e=new URL(import.meta.url).searchParams.get("container")||"app";G9({render:()=>O(TJ,{container:e,credentials:"include"})}).mount(`#${e}`)}NJ();