diff --git a/config/plugins/visualizations/charts/static/repository/build/biojs_phylocanvas.js b/config/plugins/visualizations/charts/static/repository/build/biojs_phylocanvas.js new file mode 100644 index 00000000000..f45e43deddb --- /dev/null +++ b/config/plugins/visualizations/charts/static/repository/build/biojs_phylocanvas.js @@ -0,0 +1,258 @@ +define(function() { return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; +/******/ +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.loaded = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(1), __webpack_require__(2) ], __WEBPACK_AMD_DEFINE_RESULT__ = function( Utils, Phylocanvas ) { + return Backbone.Model.extend({ + initialize: function( options ) { + var chart = options.chart, + dataset = options.dataset, + settings = options.chart.settings; + + Utils.get( { + url : dataset.download_url, + success : function( content ) { + try { + var tree = Phylocanvas.default.createTree( options.targets[ 0 ] ), + node_size = 20, + text_size = 20, + line_width = 2; + + // Set different properties of the tree + tree.setTreeType( settings.get( 'tree_type' ) ); + // Set properties related to labels + tree.showLabels = settings.get( 'show_labels' ) === "true" ? true : false; + tree.alignLabels = settings.get( 'align_labels' ) === "true" ? true : false; + // Set properties related to colors + tree.branchColour = settings.get( 'edge_color' ); + tree.highlightColour = settings.get( 'highlighted_color' ); + tree.selectedColour = settings.get( 'selected_color' ); + // Set properties related to size + tree.setNodeSize( node_size ); + tree.setTextSize( text_size ); + tree.lineWidth = line_width; + // Register click event on tree + tree.on( 'click', function ( e ) { + var node = tree.getNodeAtMousePosition( e ); + // Here collapse action is taking preference. + // Whenver collapse and prune both are selected true, + // collapse action will be performed + // Collapse the selected branch + if( settings.get( 'collapse_branch' ) === "true" ) { + tree.branches[ node.id ].collapsed = true; + tree.draw(); + }// Prune the selected branch + else if( settings.get( 'prune_branch' ) === "true" ) { + tree.branches[ node.id ].pruned = true; + tree.draw(); + } + }); + // Draw the phylogenetic tree + tree.load( content ); + // Set node shape + for(var j = 0, length = tree.leaves.length; j < length; j++) { + tree.leaves[ j ].nodeShape = settings.get( 'node_shape' ); + } + tree.draw(); + chart.state( 'ok', 'Done.' ); + options.process.resolve(); + // Adjust the size of tree on window resize + $( window ).resize( function() { + tree.fitInPanel( tree.leaves ); tree.draw(); + } ); + } catch( err ) { + chart.state( 'failed', err ); + } + }, + error: function() { + chart.state( 'failed', 'Failed to access dataset.' ); + options.process.resolve(); + } + }); + } + }); + }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + + +/***/ }, +/* 1 */ +/***/ function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/** Useful helper functions */ + !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() { + + /** Clone */ + function clone( obj ) { + return JSON.parse( JSON.stringify( obj ) || null ); + }; + + /** + * Check if a string is a json string + * @param{String} text - Content to be validated + */ + function isJSON(text) { + return /^[\],:{}\s]*$/.test(text.replace(/\\["\\\/bfnrtu]/g, '@'). + replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'). + replace(/(?:^|:|,)(?:\s*\[)+/g, '')); + }; + + /** + * Request handler for GET + * @param{String} url - Url request is made to + * @param{Function} success - Callback on success + * @param{Function} error - Callback on error + * @param{Boolean} cache - Use cached data if available + */ + function get (options) { + top.__utils__get__ = top.__utils__get__ || {}; + var cache_key = JSON.stringify( options ); + if (options.cache && top.__utils__get__[cache_key]) { + options.success && options.success(top.__utils__get__[cache_key]); + window.console.debug('utils.js::get() - Fetching from cache [' + options.url + '].'); + } else { + request({ + url : options.url, + data : options.data, + success : function(response) { + top.__utils__get__[cache_key] = response; + options.success && options.success(response); + }, + error : function(response) { + options.error && options.error(response); + } + }); + } + }; + + /** + * Request handler + * @param{String} method - Request method ['GET', 'POST', 'DELETE', 'PUT'] + * @param{String} url - Url request is made to + * @param{Object} data - Data send to url + * @param{Function} success - Callback on success + * @param{Function} error - Callback on error + */ + function request (options) { + var ajaxConfig = { + contentType : 'application/json', + type : options.type || 'GET', + data : options.data || {}, + url : options.url + } + if ( ajaxConfig.type == 'GET' || ajaxConfig.type == 'DELETE' ) { + if ( !$.isEmptyObject(ajaxConfig.data) ) { + ajaxConfig.url += ajaxConfig.url.indexOf('?') == -1 ? '?' : '&'; + ajaxConfig.url += $.param(ajaxConfig.data, true); + } + ajaxConfig.data = null; + } else { + ajaxConfig.dataType = 'json'; + ajaxConfig.url = ajaxConfig.url; + ajaxConfig.data = JSON.stringify( ajaxConfig.data ); + } + $.ajax( ajaxConfig ).done( function( response ) { + if ( typeof response === 'string' && isJSON( response ) ) { + try { + response = response.replace( 'Infinity,', '"Infinity",' ); + response = jQuery.parseJSON( response ); + } catch ( e ) { + console.debug( e ); + } + } + options.success && options.success( response ); + }).fail( function( response ) { + var response_text = null; + try { + response_text = jQuery.parseJSON( response.responseText ); + } catch (e) { + response_text = response.responseText; + } + options.error && options.error( response_text, response ); + }).always( function() { + options.complete && options.complete(); + }); + }; + + /** + * Safely merge to dictionaries + * @param{Object} options - Target dictionary + * @param{Object} optionsDefault - Source dictionary + */ + function merge (options, optionsDefault) { + if (options) { + return _.defaults(options, optionsDefault); + } else { + return optionsDefault; + } + }; + + /** Create a unique id */ + function uid(){ + top.__utils__uid__ = top.__utils__uid__ || 0; + return 'uid-' + top.__utils__uid__++; + }; + + return { + get : get, + merge : merge, + uid : uid, + request : request, + clone : clone, + isJSON : isJSON + }; + }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + + +/***/ }, +/* 2 */ +/***/ function(module, exports, __webpack_require__) { + + !function(e,t){ true?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Phylocanvas=t():e.Phylocanvas=t()}(this,function(){return function(e){function t(a){if(n[a])return n[a].exports;var r=n[a]={exports:{},id:a,loaded:!1};return e[a].call(r.exports,r,r.exports,t),r.loaded=!0,r.exports}var n={};return t.m=e,t.c=n,t.p="/dist/",t(0)}([function(e,t,n){"use strict";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n){var a=e[t]?e:e.prototype,r=a[t];a[t]=function(){for(var e=arguments.length,t=Array(e),a=0;a1&&void 0!==arguments[1]?arguments[1]:{};return new h.default(e,t)}Object.defineProperty(t,"__esModule",{value:!0}),t.utils=t.nodeRenderers=t.treeTypes=t.Parser=t.Tooltip=t.Prerenderer=t.Branch=t.Tree=void 0;var o=n(1),h=r(o),c=n(7),u=r(c),d=n(11),f=r(d),v=n(27),g=r(v),y=n(29),p=r(y),b=n(8),m=r(b),x=n(26),S=r(x),k=n(2),w=a(k);t.Tree=h.default,t.Branch=u.default,t.Prerenderer=f.default,t.Tooltip=g.default,t.Parser=p.default,t.treeTypes=m.default,t.nodeRenderers=S.default,t.utils=w,t.default={plugin:s,createTree:l}},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function r(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{};i(this,e),this._point={x:0,y:0},this.containerElement="string"==typeof t?document.getElementById(t):t,g(this.containerElement,"pc-container"),this.branches={},this.leaves=[],this.root=!1,this.stringRepresentation="",this.backColour=!1,this.originalTree={},"static"===window.getComputedStyle(this.containerElement).position&&(this.containerElement.style.position="relative"),this.containerElement.style.boxSizing="border-box";var r=document.createElement("canvas");r.id=(this.containerElement.id||"")+"__canvas",r.className="phylocanvas",r.style.position="relative",r.height=t.offsetHeight||400,r.width=t.offsetWidth||400,r.style.zIndex="1",this.containerElement.appendChild(r),this.canvas=r.getContext("2d"),this.canvas.canvas.onselectstart=function(){return!1},this.canvas.fillStyle="#000000",this.canvas.strokeStyle="#000000",this.canvas.save(),this.collapsedColour="rgba(0, 0, 0, 0.5)",this.defaultCollapsed={},this.tooltip=new c.ChildNodesTooltip(this),this.drawn=!1,this.highlighters=[],this.zoom=1,this.zoomFactor=3,this.disableZoom=!1,this.fillCanvas=!1,this.branchScaling=!0,this.currentBranchScale=1,this.branchScalingStep=1.2,this.pickedup=!1,this.dragging=!1,this.startx=null,this.starty=null,this.baseNodeSize=1,this.origx=null,this.origy=null,this.offsetx=this.canvas.canvas.width/2,this.offsety=this.canvas.canvas.height/2,this.selectedColour="rgba(49,151,245,1)",this.highlightColour="rgba(49,151,245,1)",this.highlightWidth=4,this.highlightSize=2,this.branchColour="rgba(0,0,0,1)",this.branchScalar=1,this.padding=50,this.labelPadding=5,this.multiSelect=!0,this.clickFlag="selected",this.clickFlagPredicate=w.tautology,this.hoverLabel=!1,this.internalNodesSelectable=!0,this.showLabels=!0,this.showBranchLengthLabels=!1,this.branchLengthLabelPredicate=w.tautology,this.showInternalNodeLabels=!1,this.internalLabelStyle={colour:this.branchColour,textSize:this.textSize,font:this.font,format:""},this.setTreeType("radial"),this.maxBranchLength=0,this.lineWidth=1,this.textSize=7,this.font="sans-serif",this.unselectOnClickAway=!0,this.farthestNodeFromRootX=0,this.farthestNodeFromRootY=0,this.shiftKeyDrag=!1,this.maxLabelLength={},Object.assign(this,a),this.resizeToContainer(),this.eventListeners={};var s=Object.assign({click:{listener:this.clicked.bind(this)},mousedown:{listener:this.pickup.bind(this)},mouseup:{listener:this.drop.bind(this)},mouseout:{listener:this.drop.bind(this)},mousemove:{target:this.canvas.canvas,listener:this.drag.bind(this)},mousewheel:{target:this.canvas.canvas,listener:this.scroll.bind(this)},DOMMouseScroll:{target:this.canvas.canvas,listener:this.scroll.bind(this)},resize:{target:window,listener:function(){n.resizeToContainer(),n.draw()}}},a.eventListeners||{}),l=!0,o=!1,h=void 0;try{for(var u,d=Object.keys(s)[Symbol.iterator]();!(l=(u=d.next()).done);l=!0){var f=u.value,v=s[f],y=v.listener,p=v.target;this.addListener(f,y,p)}}catch(e){o=!0,h=e}finally{try{!l&&d.return&&d.return()}finally{if(o)throw h}}}return s(e,[{key:"removeEventListeners",value:function(){var e=!0,t=!1,n=void 0;try{for(var a,r=Object.keys(this.eventListeners)[Symbol.iterator]();!(e=(a=r.next()).done);e=!0){var i=a.value,s=!0,l=!1,o=void 0;try{for(var h,c=this.eventListeners[i][Symbol.iterator]();!(s=(h=c.next()).done);s=!0){var u=h.value,d=u.target,f=u.listener;x(d||this.containerElement,i,f)}}catch(e){l=!0,o=e}finally{try{!s&&c.return&&c.return()}finally{if(l)throw o}}}}catch(e){t=!0,n=e}finally{try{!e&&r.return&&r.return()}finally{if(t)throw n}}}},{key:"setInitialCollapsedBranches",value:function(){var e,t,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.root;if(e=n.getChildProperties("id"),e&&e.length>this.defaultCollapsed.min&&e.length1&&void 0!==arguments[1])||arguments[1];return this.leaves.reduce(function(n,a){return a[e]===t&&n.push(a.id),n},[])}},{key:"clicked",value:function(e){var t;if(0===e.button){var n=[];if(this.dragging)return void(this.dragging=!1);if(!this.root)return!1;t=this.getNodeAtMousePosition(e);var a=this.multiSelect&&(e.metaKey||e.ctrlKey);if(t&&t.interactive)if(a){if(t.leaf)t[this.clickFlag]=!t[this.clickFlag];else if(this.internalNodesSelectable){var r=t.getChildProperties(this.clickFlag).some(function(e){return e===!1});t.cascadeFlag(this.clickFlag,r,this.clickFlagPredicate)}n=this.getNodeIdsWithFlag(this.clickFlag),this.draw()}else this.root.cascadeFlag(this.clickFlag,!1,this.clickFlagPredicate),(this.internalNodesSelectable||t.leaf)&&(t.cascadeFlag(this.clickFlag,!0,this.clickFlagPredicate),n=t.getChildProperties("id")),this.draw();else!this.unselectOnClickAway||this.dragging||a||(this.root.cascadeFlag(this.clickFlag,!1,this.clickFlagPredicate),this.draw());this.pickedup||(this.dragging=!1),this.nodesUpdated(n,this.clickFlag)}}},{key:"drag",value:function(e){var t=S(this.canvas);if(!this.drawn)return!1;if(this.pickedup){var n=(e.clientX-this.startx)*t,a=(e.clientY-this.starty)*t;Math.abs(n)+Math.abs(a)>5&&(this.dragging=!0,this.offsetx=this.origx+n,this.offsety=this.origy+a,this.draw())}else{var r=e,i=this.getNodeAtMousePosition(r);i&&i.interactive&&(this.internalNodesSelectable||i.leaf)?(this.root.cascadeFlag("hovered",!1),i.hovered=!0,i.leaf||i.hasCollapsedAncestor()||this.tooltip.open(r.clientX,r.clientY,i),this.containerElement.style.cursor="pointer"):(this.tooltip.close(),this.root.cascadeFlag("hovered",!1),this.shiftKeyDrag&&r.shiftKey?y(this.containerElement):this.containerElement.style.cursor="auto"),this.draw()}}},{key:"draw",value:function(e){if(this.highlighters.length=0,0===this.maxBranchLength)return void this.loadError(new Error("All branches in the tree are identical."));this.canvas.clearRect(0,0,this.canvas.canvas.width,this.canvas.canvas.height),this.canvas.lineCap="round",this.canvas.lineJoin="round",this.canvas.strokeStyle=this.branchColour,this.canvas.save(),this.drawn&&!e||(this.prerenderer.run(this),e||this.fitInPanel());var t=S(this.canvas);this.canvas.lineWidth=this.lineWidth/this.zoom,this.canvas.translate(this.offsetx*t,this.offsety*t),this.canvas.scale(this.zoom,this.zoom),this.branchRenderer.render(this,this.root),this.highlighters.forEach(function(e){return e()}),this.drawn=!0,this.canvas.restore()}},{key:"pickup",value:function(e){if(!this.shiftKeyDrag||e.shiftKey){if(!this.drawn)return!1;this.origx=this.offsetx,this.origy=this.offsety,0===e.button&&(this.pickedup=!0,p(this.containerElement)),this.startx=e.clientX,this.starty=e.clientY}}},{key:"drop",value:function(e){return!!this.drawn&&(this.pickedup=!1,void(this.shiftKeyDrag&&e.shiftKey?y(this.containerElement):this.containerElement.style.cursor="auto"))}},{key:"scroll",value:function(e){if(!(this.disableZoom||"wheelDelta"in e&&0===e.wheelDelta)){e.preventDefault(),this._point.x=e.offsetX,this._point.y=e.offsetY;var t=e.detail<0||e.wheelDelta>0?1:-1;this.branchScaling&&(e.metaKey||e.ctrlKey)?(this.currentBranchScale*=Math.pow(this.branchScalingStep,t),this.setBranchScale(this.currentBranchScale,this._point)):this.smoothZoom(t,this._point)}}},{key:"findLeaves",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"id",n=[],a=!0,r=!1,i=void 0;try{for(var s,l=this.leaves[Symbol.iterator]();!(a=(s=l.next()).done);a=!0){var o=s.value;o[t]&&o[t].match(e)&&n.push(o)}}catch(e){r=!0,i=e}finally{try{!a&&l.return&&l.return()}finally{if(r)throw i}}return n}},{key:"updateLeaves",value:function(e,t,n){var a=!0,r=!1,i=void 0;try{for(var s,l=this.leaves[Symbol.iterator]();!(a=(s=l.next()).done);a=!0){var o=s.value;o[t]=!n}}catch(e){r=!0,i=e}finally{try{!a&&l.return&&l.return()}finally{if(r)throw i}}var h=!0,c=!1,u=void 0;try{for(var d,f=e[Symbol.iterator]();!(h=(d=f.next()).done);h=!0){var v=d.value;v[t]=n}}catch(e){c=!0,u=e}finally{try{!h&&f.return&&f.return()}finally{if(c)throw u}}this.nodesUpdated(e.map(function(e){return e.id}),t)}},{key:"clearSelect",value:function(){this.root.cascadeFlag("selected",!1),this.draw()}},{key:"getPngUrl",value:function(){return this.canvas.canvas.toDataURL()}},{key:"load",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],a=t,r=n;if("function"==typeof t&&(r=t,a={}),r&&(a.callback=r),a.format)return void this.build(e,v.default[a.format],a);var i=!0,s=!1,l=void 0;try{for(var o,h=Object.keys(v.default)[Symbol.iterator]();!(i=(o=h.next()).done);i=!0){var c=o.value,u=v.default[c];if(e.match(u.fileExtension)||e.match(u.validator))return void this.build(e,u,a)}}catch(e){s=!0,l=e}finally{try{!i&&h.return&&h.return()}finally{if(s)throw l}}var d=new Error("String not recognised as a file or a parseable format string");r&&r(d),this.loadError(d)}},{key:"saveOriginalTree",value:function(){this.originalTree.branches=this.branches,this.originalTree.leaves=this.leaves,this.originalTree.root=this.root,this.originalTree.branchLengths={},this.originalTree.parents={}}},{key:"clearState",value:function(){this.root=!1,this.leaves=[],this.branches={},this.drawn=!1}},{key:"extractNestedBranches",value:function(){this.branches={},this.leaves=[],this.storeNode(this.root),this.root.extractChildren()}},{key:"saveState",value:function(){if(this.extractNestedBranches(),this.root.branchLength=0,this.maxBranchLength=0,this.root.setTotalLength(),0===this.maxBranchLength)return void this.loadError(new Error("All branches in the tree are identical."))}},{key:"build",value:function(e,t,n){var a=this;this.originalTree={},this.clearState(),h.default.lastId=0;var r=new h.default;r.id="root",this.branches.root=r,this.setRoot(r),t.parse({formatString:e,root:r,options:n},function(t){return t?(n.callback&&n.callback(t),void a.loadError(t)):(a.stringRepresentation=e,a.saveState(),a.setInitialCollapsedBranches(),a.beforeFirstDraw(),a.draw(),a.saveOriginalTree(),n.callback&&n.callback(),void a.loadCompleted())})}},{key:"redrawFromBranch",value:function(e){this.clearState(),this.resetTree(),this.originalTree.branchLengths[e.id]=e.branchLength,this.originalTree.parents[e.id]=e.parent,this.root=e,this.root.parent=!1,this.saveState(),this.draw(),this.subtreeDrawn(e.id)}},{key:"redrawOriginalTree",value:function(){this.load(this.stringRepresentation)}},{key:"storeNode",value:function(e){if(e.id&&""!==e.id||(e.id=h.default.generateId()),this.branches[e.id]&&e!==this.branches[e.id]){if(e.leaf)throw new Error("Two nodes on this tree share the id "+e.id);e.id=h.default.generateId()}this.branches[e.id]=e,e.leaf&&this.leaves.push(e)}},{key:"setNodeSize",value:function(e){this.baseNodeSize=Number(e),this.draw()}},{key:"setRoot",value:function(e){e.tree=this,this.root=e}},{key:"setTextSize",value:function(e){this.textSize=Number(e),this.draw()}},{key:"setFontSize",value:function(e){this.textSize=this.calculateFontSize?this.calculateFontSize(e):Math.min(e/2,15),this.canvas.font=this.textSize+"pt "+this.font}},{key:"setTreeType",value:function(e,t){if(!(e in d.default))return b(this.containerElement,"error",{error:new Error('"'+e+'" is not a known tree-type.')});var n=this.treeType;this.treeType=e,this.type=d.default[e],this.branchRenderer=d.default[e].branchRenderer,this.prerenderer=d.default[e].prerenderer,this.labelAlign=d.default[e].labelAlign,this.calculateFontSize=d.default[e].calculateFontSize,this.drawn&&(this.drawn=!1,this.draw()),t||this.treeTypeChanged(n,e)}},{key:"setSize",value:function(e,t){this.canvas.canvas.width=e,this.canvas.canvas.height=t,this.navigator&&this.navigator.resize(),this.adjustForPixelRatio()}},{key:"adjustForPixelRatio",value:function(){var e=S(this.canvas);this.canvas.canvas.style.height=this.canvas.canvas.height+"px",this.canvas.canvas.style.width=this.canvas.canvas.width+"px",e>1&&(this.canvas.canvas.width*=e,this.canvas.canvas.height*=e)}},{key:"getCentrePoint",value:function(){var e=S(this.canvas);return{x:this.canvas.canvas.width/2/e,y:this.canvas.canvas.height/2/e}}},{key:"setZoom",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.getCentrePoint(),n=t.x,a=t.y;if(e>0){var r=this.zoom;this.zoom=e,this.offsetx=this.calculateZoomedOffset(this.offsetx,n,r,e),this.offsety=this.calculateZoomedOffset(this.offsety,a,r,e),this.draw()}}},{key:"smoothZoom",value:function(e,t){this.setZoom(Math.pow(10,Math.log(this.zoom)/Math.log(10)+e*this.zoomFactor*.01),t)}},{key:"calculateZoomedOffset",value:function(e,t,n,a){return-1*((-1*e+t)/n*a-t)}},{key:"setBranchScale",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{x:this.canvas.canvas.width/2,y:this.canvas.canvas.height/2},n=d.default[this.treeType];if(n.branchScalingAxis&&!(e<0)){var a=this.branchScalar;this.branchScalar=this.initialBranchScalar*e;var r=this.branchScalar/a,i=this["offset"+n.branchScalingAxis],s=t[n.branchScalingAxis],l=(t[n.branchScalingAxis]-i)*r+i;this["offset"+n.branchScalingAxis]+=s-l,this.draw()}}},{key:"toggleLabels",value:function(){this.showLabels=!this.showLabels,this.draw()}},{key:"setMaxLabelLength",value:function(){var e;void 0===this.maxLabelLength[this.treeType]&&(this.maxLabelLength[this.treeType]=0);for(var t=0;tthis.maxLabelLength[this.treeType]&&(this.maxLabelLength[this.treeType]=e.width)}},{key:"loadStarted",value:function(){b(this.containerElement,"loading")}},{key:"beforeFirstDraw",value:function(){b(this.containerElement,"beforeFirstDraw")}},{key:"loadCompleted",value:function(){b(this.containerElement,"loaded")}},{key:"loadError",value:function(e){b(this.containerElement,"error",{error:e})}},{key:"subtreeDrawn",value:function(e){b(this.containerElement,"subtree",{node:e})}},{key:"nodesUpdated",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];b(this.containerElement,"updated",{nodeIds:e,property:t,append:n})}},{key:"treeTypeChanged",value:function(e,t){b(this.containerElement,"typechanged",{oldType:e,newType:t})}},{key:"addListener",value:function(e,t,n){this.eventListeners[e]||(this.eventListeners[e]=[]),this.eventListeners[e].push({listener:t,target:n}),m(n||this.containerElement,e,t)}},{key:"removeListener",value:function(e,t,n){x(n||this.containerElement,e,t)}},{key:"getBounds",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.leaves,t=e===this.leaves?this.root:e[0],n=t.startx,a=t.startx,r=t.starty,i=t.starty,s=!0,l=!1,o=void 0;try{for(var h,c=e[Symbol.iterator]();!(s=(h=c.next()).done);s=!0){var u=h.value,d=u.getBounds();n=Math.min(n,d.minx),a=Math.max(a,d.maxx),r=Math.min(r,d.miny),i=Math.max(i,d.maxy)}}catch(e){l=!0,o=e}finally{try{!s&&c.return&&c.return()}finally{if(l)throw o}}return[[n,r],[a,i]]}},{key:"fitInPanel",value:function(e){this.zoom=1;var t=this.getBounds(e),n=[this.canvas.canvas.width-2*this.padding,this.canvas.canvas.height-2*this.padding],a=[t[1][0]-t[0][0],t[1][1]-t[0][1]],r=S(this.canvas),i=n[0]/a[0],s=n[1]/a[1];this.zoom=Math.min(i,s),this.offsetx=-1*t[0][0]*this.zoom,this.offsety=-1*t[0][1]*this.zoom,i>s?(this.offsetx+=this.padding+(n[0]-a[0]*this.zoom)/2,this.offsety+=this.padding):(this.offsetx+=this.padding,this.offsety+=this.padding+(n[1]-a[1]*this.zoom)/2),this.offsetx=this.offsetx/r,this.offsety=this.offsety/r}},{key:"resetTree",value:function(){if(this.originalTree.branches){this.branches=this.originalTree.branches;var e=!0,t=!1,n=void 0;try{for(var a,r=Object.keys(this.originalTree.branchLengths)[Symbol.iterator]();!(e=(a=r.next()).done);e=!0){var i=a.value;this.branches[i].branchLength=this.originalTree.branchLengths[i],this.branches[i].parent=this.originalTree.parents[i]}}catch(e){t=!0,n=e}finally{try{!e&&r.return&&r.return()}finally{if(t)throw n}}this.leaves=this.originalTree.leaves,this.root=this.originalTree.root}}},{key:"rotateBranch",value:function(e){this.branches[e.id].rotate()}},{key:"exportNwk",value:function(){var e=this.root.getNwk();return e.substr(0,e.lastIndexOf(")")+1)+";"}},{key:"resizeToContainer",value:function(){this.setSize(this.containerElement.offsetWidth,this.containerElement.offsetHeight)}},{key:"cleanup",value:function(){this.removeEventListeners()}},{key:"alignLabels",get:function(){return this.showLabels&&this.labelAlign&&this.labelAlignEnabled},set:function(e){this.labelAlignEnabled=e}}]),e}();L.prototype.on=L.prototype.addListener,L.prototype.off=L.prototype.removeListener,t.default=L},function(e,t,n){"use strict";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}Object.defineProperty(t,"__esModule",{value:!0}),t.events=t.dom=t.constants=t.canvas=void 0;var r=n(3),i=a(r),s=n(6),l=a(s),o=n(4),h=a(o),c=n(5),u=a(c);t.canvas=i,t.constants=l,t.dom=h,t.events=u},function(e,t,n){"use strict";function a(e){return e.backingStorePixelRatio||e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||1}function r(e){return(window.devicePixelRatio||1)/a(e)}function i(e,t){var n=r(t.canvas);return[(e.offsetX-t.offsetx)/t.zoom*n,(e.offsetY-t.offsety)/t.zoom*n]}function s(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{x:0,y:0},t=e.x,n=e.y,a=arguments[1],i=r(a.canvas);return{x:(t-a.offsetx)/a.zoom*i,y:(n-a.offsety)/a.zoom*i}}function l(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{x:0,y:0},t=e.x,n=e.y,a=arguments[1],i=r(a.canvas);return{x:t/i*a.zoom+a.offsetx,y:n/i*a.zoom+a.offsety}}Object.defineProperty(t,"__esModule",{value:!0}),t.getBackingStorePixelRatio=a,t.getPixelRatio=r,t.translateClick=i,t.translatePoint=s,t.undoPointTranslation=l;n(4)},function(e,t,n){"use strict";function a(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text/plain;charset=utf-8",n=new Blob([e],{type:t});return f.createObjectURL(n)}function r(e,t){var n=document.createElement("a"),a="undefined"!=typeof n.download;n.href=e,n.target="_blank",a&&(n.download=t),(0,d.fireEvent)(n,"click"),a&&f.revokeObjectURL(n.href)}function i(e){for(var t=0;e;)t+=e.offsetLeft,e=e.offsetParent;return t}function s(e){for(var t=0;e;)t+=e.offsetTop,e=e.offsetParent;return t}function l(e,t){var n=e.className.split(" ");n.indexOf(t)===-1&&(n.push(t),e.className=n.join(" "))}function o(e,t){var n=e.className.split(" "),a=n.indexOf(t);a!==-1&&(n.splice(a,1),e.className=n.join(" "))}function h(e,t){var n=e.className.split(" "),a=n.indexOf(t);return a!==-1}function c(e){e.style.cursor="-webkit-grabbing",e.style.cursor="-moz-grabbing",e.style.cursor="grabbing"}function u(e){e.style.cursor="-webkit-grab",e.style.cursor="-moz-grab",e.style.cursor="grab"}Object.defineProperty(t,"__esModule",{value:!0}),t.createBlobUrl=a,t.setupDownloadLink=r,t.getX=i,t.getY=s,t.addClass=l,t.removeClass=o,t.hasClass=h,t.setCursorDragging=c,t.setCursorDrag=u;var d=n(5),f=window.URL||window.webkitURL},function(e,t){"use strict";function n(e){return e.preventDefault(),!1}function a(e,t){var n,a,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};document.createEvent?(n=document.createEvent("HTMLEvents"),n.initEvent(t,!0,!0)):(n=document.createEventObject(),n.eventType=t),n.eventName=t;for(a in r)r.hasOwnProperty(a)&&(n[a]=r[a]);document.createEvent?e.dispatchEvent(n):e.fireEvent("on"+n.eventType,n)}function r(e,t,n){e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent("on"+t,function(){return n.call(e,window.event)})}function i(e,t,n){e.removeEventListener?e.removeEventListener(t,n,!1):console.warn("[Phylocanvas] Unable to remove event, removeEventListener not supported")}function s(e){e.stopPropagation(),e.preventDefault()}function l(e,t){var n;return n=("undefined"==typeof t?"undefined":o(t))===o("aaa")?function(n){if(e[t])return e[t](n)}:function(){return t(e)}}Object.defineProperty(t,"__esModule",{value:!0});var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.preventDefault=n,t.fireEvent=a,t.addEvent=r,t.removeEvent=i,t.killEvent=s,t.createHandler=l},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.Angles={FORTYFIVE:Math.PI/4,QUARTER:Math.PI/2,HALF:Math.PI,FULL:2*Math.PI},t.Shapes={x:"star",s:"square",o:"circle",t:"triangle"},t.Predicates={tautology:function(){return!0},contradiction:function(){return!1},leafOnly:function(e){return e.leaf},nonLeaf:function(e){return!e.leaf}}},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;nthis.minx&&tthis.miny)return this;for(var n=this.children.length-1;n>=0;n--){var a=this.children[n].clicked(e,t);if(a)return a}}},{key:"drawLabel",value:function(){var e=this.getTextSize(),t=this.getLabel();this.canvas.font=this.getFontString(),this.labelWidth=this.canvas.measureText(t).width,void 0===this.tree.maxLabelLength[this.tree.treeType]&&(this.tree.maxLabelLength[this.tree.treeType]=0),this.labelWidth>this.tree.maxLabelLength[this.tree.treeType]&&(this.tree.maxLabelLength[this.tree.treeType]=this.labelWidth);var n=this.getLabelStartX();this.tree.alignLabels&&(n+=Math.abs(this.tree.labelAlign.getLabelOffset(this))),this.angle>u.QUARTER&&this.angleu.QUARTER&&this.anglethis.tree.maxBranchLength&&(this.tree.maxBranchLength=this.totalBranchLength)):(this.totalBranchLength=this.branchLength,this.tree.maxBranchLength=this.totalBranchLength),e=0;e0&&void 0!==arguments[0])||arguments[0];if(this.leaf)return this.label+":"+this.branchLength;var t=this.children.map(function(e){return e.getNwk(!1)});return"("+t.join(",")+"):"+this.branchLength+(e?";":"")}},{key:"getTextColour",value:function(){if(this.selected)return this.tree.selectedColour;if(this.isHighlighted)return this.tree.highlightColour;if(this.tree.backColour&&this.children.length){var e=this.getChildColours();if(1===e.length)return e[0]}return this.labelStyle.colour||this.colour||this.tree.branchColour}},{key:"getLabel",value:function(){return void 0!==this.label&&null!==this.label?this.label:""; + }},{key:"getTextSize",value:function(){return this.labelStyle.textSize||this.tree.textSize}},{key:"getFontString",value:function(){var e=this.labelStyle.font||this.tree.font;return(this.labelStyle.format||"")+" "+this.getTextSize()+"pt "+e}},{key:"getLabelSize",value:function(){return this.canvas.font=this.getFontString(),this.canvas.measureText(this.getLabel()).width}},{key:"getRadius",value:function(){var e=this.tree.baseNodeSize;return this.leaf?e*this.radius:e/this.radius}},{key:"getDiameter",value:function(){return 2*this.getRadius()}},{key:"hasLabelConnector",value:function(){return!!this.tree.alignLabels&&this.tree.labelAlign.getLabelOffset(this)>this.getDiameter()}},{key:"getLabelStartX",value:function(){var e=this.getLeafStyle(),t=(e.lineWidth,this.hasLabelConnector()),n=this.getDiameter();return this.isHighlighted&&!t&&(n+=this.getHighlightSize()-this.getRadius()),n+Math.min(this.tree.labelPadding,this.tree.labelPadding/this.tree.zoom)}},{key:"getHighlightLineWidth",value:function(){return this.tree.highlightWidth/this.tree.zoom}},{key:"getHighlightRadius",value:function(){var e=this.getHighlightLineWidth()*this.tree.highlightSize;return e+=this.getLeafStyle().lineWidth/this.tree.highlightSize,this.leaf?this.getRadius()+e:.666*e}},{key:"getHighlightSize",value:function(){return this.getHighlightRadius()+this.getHighlightLineWidth()}},{key:"rotate",value:function(){for(var e=[],t=this.children.length;t--;)e.push(this.children[t]);this.children=e,this.tree.extractNestedBranches(),this.tree.draw(!0)}},{key:"getChildNo",value:function(){return this.parent.children.indexOf(this)}},{key:"setDisplay",value:function(e){var t=e.colour,n=e.shape,a=e.size,r=e.leafStyle,i=e.labelStyle;t&&(this.colour=t),n&&(this.nodeShape=d[n]?d[n]:n),a&&(this.radius=a),r&&(this.leafStyle=r),i&&(this.labelStyle=i)}},{key:"getTotalLength",value:function(){var e=this.getRadius();return(this.tree.showLabels||this.tree.hoverLabel&&this.isHighlighted)&&(e+=this.getLabelStartX()+this.getLabelSize()),e}},{key:"getBounds",value:function(){var e=this.tree,t=e.alignLabels?e.labelAlign.getX(this):this.centerx,n=e.alignLabels?e.labelAlign.getY(this):this.centery,a=this.getRadius(),r=this.getTotalLength(),i=void 0,s=void 0,l=void 0,o=void 0;this.angle>u.QUARTER&&this.angle0?e.leaves[n-1].centery+t:0,e.leaves[n].centerx=e.leaves[n].totalBranchLength*e.branchScalar,e.leaves[n].centerx>e.farthestNodeFromRootX&&(e.farthestNodeFromRootX=e.leaves[n].centerx),e.leaves[n].centery>e.farthestNodeFromRootY&&(e.farthestNodeFromRootY=e.leaves[n].centery);for(var a=e.leaves[n];a.parent;a=a.parent){var r=a.parent.children;a.parent.centery=(r[0].centery+r[r.length-1].centery)/2}}}}},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var r=n(10),i=a(r),s=n(11),l=a(s),o=n(15),h=a(o),c=n(16),u=a(c),d={getX:function(e){return e.centerx+e.labelOffsetX+e.getDiameter()*Math.cos(e.angle)},getY:function(e){return e.centery+e.labelOffsetY+e.getDiameter()*Math.sin(e.angle)},getLabelOffset:function(e){return e.labelOffsetX/Math.cos(e.angle)}};t.default={branchRenderer:new i.default(h.default),prerenderer:new l.default(u.default),labelAlign:d,getCollapsedMeasurements:function(e){var t=e.tree,n=t.maxBranchLength,a=t.branchScalar,r=t.step;return{angle:e.getNumberOfLeaves()*r,radius:(n-e.totalBranchLength)*a}},calculateFontSize:function(e){return Math.min(10*e+4,40)}}},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={draw:function(e,t){var n=t.totalBranchLength*e.branchScalar;t.canvas.beginPath(),t.canvas.moveTo(t.startx,t.starty),t.canvas.lineTo(t.centerx,t.centery),t.canvas.stroke(),t.canvas.closePath(),t.canvas.strokeStyle=t.getColour(),t.children.length>1&&!t.collapsed&&(t.canvas.beginPath(),t.canvas.arc(0,0,n,t.minChildAngle,t.maxChildAngle,t.maxChildAnglen?n=e.branchScalar*e.maxBranchLength:e.branchScalar=n/e.maxBranchLength;for(var a=0;a0?e.leaves[n-1].centery+t:0,e.leaves[n].angle=0;for(var a=e.leaves[n];a.parent&&a.getChildNo()===a.parent.children.length-1;a=a.parent){a.parent.centery=a.parent.getChildYTotal()/a.parent.getChildCount(),a.parent.centerx=a.parent.children[0].centerx+(a.parent.children[0].centery-a.parent.centery)*Math.tan(r.FORTYFIVE);for(var i=0;i0?e.leaves[n-1].centerx+t:0,e.leaves[n].centery=e.leaves[n].totalBranchLength*e.branchScalar;for(var a=e.leaves[n];a.parent&&(0===a.getChildNo()&&(a.parent.centerx=a.centerx),a.getChildNo()===a.parent.children.length-1);a=a.parent){a.parent.angle=r.QUARTER,a.parent.centerx=(a.parent.centerx+a.centerx)/2,a.parent.centery=a.parent.totalBranchLength*e.branchScalar;for(var i=0;ie.farthestNodeFromRootX&&(e.farthestNodeFromRootX=e.leaves[n].centerx),e.leaves[n].centery>e.farthestNodeFromRootY&&(e.farthestNodeFromRootY=e.leaves[n].centery)}}}},function(e,t,n){"use strict";function a(e,t){e.beginPath(),e.moveTo(0,0),e.lineTo(t,0),e.stroke(),e.closePath()}function r(e,t){var n=t.lineWidth,a=t.strokeStyle,r=t.fillStyle;e.lineWidth=n,e.strokeStyle=a,e.fillStyle=r,e.fill(),n>0&&a!==r&&e.stroke()}Object.defineProperty(t,"__esModule",{value:!0});var i=n(2),s=i.constants.Angles,l=function(e){return e*Math.sqrt(2)};t.default={circle:function(e,t,n){var i=Math.pow(l(t),2),o=Math.sqrt(i/Math.PI);a(e,t-o),e.beginPath(),e.arc(t,0,o,0,s.FULL,!1),e.closePath(),r(e,n)},square:function(e,t,n){var i=l(t),s=t-i/2;a(e,s),e.beginPath(),e.moveTo(s,0),e.lineTo(s,i/2),e.lineTo(s+i,i/2),e.lineTo(s+i,-i/2),e.lineTo(s,-i/2),e.lineTo(s,0),e.closePath(),r(e,n)},star:function(e,t,n){var i=t,s=0,l=5,o=t,h=.5*o,c=Math.PI/l;a(e,o-h);var u=Math.PI/2*3;e.beginPath(),e.moveTo(i,s-o);for(var d=0;d1&&void 0!==arguments[1]?arguments[1]:{},a=n.className,i=void 0===a?"phylocanvas-tooltip":a,s=n.element,l=void 0===s?document.createElement("div"):s,o=n.zIndex,h=void 0===o?2e3:o,c=n.parent,u=void 0===c?t.containerElement:c;r(this,e),this.tree=t,this.element=l,this.element.className=i,this.element.style.display="none",this.element.style.position="fixed",this.element.style.zIndex=h,this.closed=!0,u.appendChild(this.element)}return i(e,[{key:"close",value:function(){this.element.style.display="none",this.closed=!0}},{key:"open",value:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:100,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:100,n=arguments[2];this.element.hasChildNodes();)this.element.removeChild(this.element.firstChild);this.createContent(n),this.element.style.top=t+"px",this.element.style.left=e+"px",this.element.style.display="block",this.closed=!1}},{key:"createContent",value:function(){throw new Error("Not implemented")}}]),e}();t.default=s;t.ChildNodesTooltip=function(e){function t(e,a){r(this,t);var i=n(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,a));return i.element.style.background="rgba(97, 97, 97, 0.9)",i.element.style.color="#fff",i.element.style.cursor="pointer",i.element.style.padding="8px",i.element.style.marginTop="16px",i.element.style.borderRadius="2px",i.element.style.textAlign="center",i.element.style.fontFamily=i.tree.font||"sans-serif",i.element.style.fontSize="10px",i.element.style.fontWeight="500",i}return a(t,e),i(t,[{key:"createContent",value:function(e){var t=document.createTextNode(e.getChildProperties("id").length);this.element.appendChild(t)}}]),t}(s)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var r=n(29),i=a(r),s=n(30),l=a(s),o=n(31),h=a(o);t.default={nexus:new i.default(h.default),newick:new i.default(l.default)}},function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{};return new h.default(e,t)}Object.defineProperty(t,\"__esModule\",{value:!0}),t.utils=t.nodeRenderers=t.treeTypes=t.Parser=t.Tooltip=t.Prerenderer=t.Branch=t.Tree=void 0;var o=n(1),h=r(o),c=n(7),u=r(c),d=n(11),f=r(d),v=n(27),g=r(v),y=n(29),p=r(y),b=n(8),m=r(b),x=n(26),S=r(x),k=n(2),w=a(k);t.Tree=h.default,t.Branch=u.default,t.Prerenderer=f.default,t.Tooltip=g.default,t.Parser=p.default,t.treeTypes=m.default,t.nodeRenderers=S.default,t.utils=w,t.default={plugin:s,createTree:l}},function(e,t,n){\"use strict\";function a(e){return e&&e.__esModule?e:{default:e}}function r(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{};i(this,e),this._point={x:0,y:0},this.containerElement=\"string\"==typeof t?document.getElementById(t):t,g(this.containerElement,\"pc-container\"),this.branches={},this.leaves=[],this.root=!1,this.stringRepresentation=\"\",this.backColour=!1,this.originalTree={},\"static\"===window.getComputedStyle(this.containerElement).position&&(this.containerElement.style.position=\"relative\"),this.containerElement.style.boxSizing=\"border-box\";var r=document.createElement(\"canvas\");r.id=(this.containerElement.id||\"\")+\"__canvas\",r.className=\"phylocanvas\",r.style.position=\"relative\",r.height=t.offsetHeight||400,r.width=t.offsetWidth||400,r.style.zIndex=\"1\",this.containerElement.appendChild(r),this.canvas=r.getContext(\"2d\"),this.canvas.canvas.onselectstart=function(){return!1},this.canvas.fillStyle=\"#000000\",this.canvas.strokeStyle=\"#000000\",this.canvas.save(),this.collapsedColour=\"rgba(0, 0, 0, 0.5)\",this.defaultCollapsed={},this.tooltip=new c.ChildNodesTooltip(this),this.drawn=!1,this.highlighters=[],this.zoom=1,this.zoomFactor=3,this.disableZoom=!1,this.fillCanvas=!1,this.branchScaling=!0,this.currentBranchScale=1,this.branchScalingStep=1.2,this.pickedup=!1,this.dragging=!1,this.startx=null,this.starty=null,this.baseNodeSize=1,this.origx=null,this.origy=null,this.offsetx=this.canvas.canvas.width/2,this.offsety=this.canvas.canvas.height/2,this.selectedColour=\"rgba(49,151,245,1)\",this.highlightColour=\"rgba(49,151,245,1)\",this.highlightWidth=4,this.highlightSize=2,this.branchColour=\"rgba(0,0,0,1)\",this.branchScalar=1,this.padding=50,this.labelPadding=5,this.multiSelect=!0,this.clickFlag=\"selected\",this.clickFlagPredicate=w.tautology,this.hoverLabel=!1,this.internalNodesSelectable=!0,this.showLabels=!0,this.showBranchLengthLabels=!1,this.branchLengthLabelPredicate=w.tautology,this.showInternalNodeLabels=!1,this.internalLabelStyle={colour:this.branchColour,textSize:this.textSize,font:this.font,format:\"\"},this.setTreeType(\"radial\"),this.maxBranchLength=0,this.lineWidth=1,this.textSize=7,this.font=\"sans-serif\",this.unselectOnClickAway=!0,this.farthestNodeFromRootX=0,this.farthestNodeFromRootY=0,this.shiftKeyDrag=!1,this.maxLabelLength={},Object.assign(this,a),this.resizeToContainer(),this.eventListeners={};var s=Object.assign({click:{listener:this.clicked.bind(this)},mousedown:{listener:this.pickup.bind(this)},mouseup:{listener:this.drop.bind(this)},mouseout:{listener:this.drop.bind(this)},mousemove:{target:this.canvas.canvas,listener:this.drag.bind(this)},mousewheel:{target:this.canvas.canvas,listener:this.scroll.bind(this)},DOMMouseScroll:{target:this.canvas.canvas,listener:this.scroll.bind(this)},resize:{target:window,listener:function(){n.resizeToContainer(),n.draw()}}},a.eventListeners||{}),l=!0,o=!1,h=void 0;try{for(var u,d=Object.keys(s)[Symbol.iterator]();!(l=(u=d.next()).done);l=!0){var f=u.value,v=s[f],y=v.listener,p=v.target;this.addListener(f,y,p)}}catch(e){o=!0,h=e}finally{try{!l&&d.return&&d.return()}finally{if(o)throw h}}}return s(e,[{key:\"removeEventListeners\",value:function(){var e=!0,t=!1,n=void 0;try{for(var a,r=Object.keys(this.eventListeners)[Symbol.iterator]();!(e=(a=r.next()).done);e=!0){var i=a.value,s=!0,l=!1,o=void 0;try{for(var h,c=this.eventListeners[i][Symbol.iterator]();!(s=(h=c.next()).done);s=!0){var u=h.value,d=u.target,f=u.listener;x(d||this.containerElement,i,f)}}catch(e){l=!0,o=e}finally{try{!s&&c.return&&c.return()}finally{if(l)throw o}}}}catch(e){t=!0,n=e}finally{try{!e&&r.return&&r.return()}finally{if(t)throw n}}}},{key:\"setInitialCollapsedBranches\",value:function(){var e,t,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.root;if(e=n.getChildProperties(\"id\"),e&&e.length>this.defaultCollapsed.min&&e.length1&&void 0!==arguments[1])||arguments[1];return this.leaves.reduce(function(n,a){return a[e]===t&&n.push(a.id),n},[])}},{key:\"clicked\",value:function(e){var t;if(0===e.button){var n=[];if(this.dragging)return void(this.dragging=!1);if(!this.root)return!1;t=this.getNodeAtMousePosition(e);var a=this.multiSelect&&(e.metaKey||e.ctrlKey);if(t&&t.interactive)if(a){if(t.leaf)t[this.clickFlag]=!t[this.clickFlag];else if(this.internalNodesSelectable){var r=t.getChildProperties(this.clickFlag).some(function(e){return e===!1});t.cascadeFlag(this.clickFlag,r,this.clickFlagPredicate)}n=this.getNodeIdsWithFlag(this.clickFlag),this.draw()}else this.root.cascadeFlag(this.clickFlag,!1,this.clickFlagPredicate),(this.internalNodesSelectable||t.leaf)&&(t.cascadeFlag(this.clickFlag,!0,this.clickFlagPredicate),n=t.getChildProperties(\"id\")),this.draw();else!this.unselectOnClickAway||this.dragging||a||(this.root.cascadeFlag(this.clickFlag,!1,this.clickFlagPredicate),this.draw());this.pickedup||(this.dragging=!1),this.nodesUpdated(n,this.clickFlag)}}},{key:\"drag\",value:function(e){var t=S(this.canvas);if(!this.drawn)return!1;if(this.pickedup){var n=(e.clientX-this.startx)*t,a=(e.clientY-this.starty)*t;Math.abs(n)+Math.abs(a)>5&&(this.dragging=!0,this.offsetx=this.origx+n,this.offsety=this.origy+a,this.draw())}else{var r=e,i=this.getNodeAtMousePosition(r);i&&i.interactive&&(this.internalNodesSelectable||i.leaf)?(this.root.cascadeFlag(\"hovered\",!1),i.hovered=!0,i.leaf||i.hasCollapsedAncestor()||this.tooltip.open(r.clientX,r.clientY,i),this.containerElement.style.cursor=\"pointer\"):(this.tooltip.close(),this.root.cascadeFlag(\"hovered\",!1),this.shiftKeyDrag&&r.shiftKey?y(this.containerElement):this.containerElement.style.cursor=\"auto\"),this.draw()}}},{key:\"draw\",value:function(e){if(this.highlighters.length=0,0===this.maxBranchLength)return void this.loadError(new Error(\"All branches in the tree are identical.\"));this.canvas.clearRect(0,0,this.canvas.canvas.width,this.canvas.canvas.height),this.canvas.lineCap=\"round\",this.canvas.lineJoin=\"round\",this.canvas.strokeStyle=this.branchColour,this.canvas.save(),this.drawn&&!e||(this.prerenderer.run(this),e||this.fitInPanel());var t=S(this.canvas);this.canvas.lineWidth=this.lineWidth/this.zoom,this.canvas.translate(this.offsetx*t,this.offsety*t),this.canvas.scale(this.zoom,this.zoom),this.branchRenderer.render(this,this.root),this.highlighters.forEach(function(e){return e()}),this.drawn=!0,this.canvas.restore()}},{key:\"pickup\",value:function(e){if(!this.shiftKeyDrag||e.shiftKey){if(!this.drawn)return!1;this.origx=this.offsetx,this.origy=this.offsety,0===e.button&&(this.pickedup=!0,p(this.containerElement)),this.startx=e.clientX,this.starty=e.clientY}}},{key:\"drop\",value:function(e){return!!this.drawn&&(this.pickedup=!1,void(this.shiftKeyDrag&&e.shiftKey?y(this.containerElement):this.containerElement.style.cursor=\"auto\"))}},{key:\"scroll\",value:function(e){if(!(this.disableZoom||\"wheelDelta\"in e&&0===e.wheelDelta)){e.preventDefault(),this._point.x=e.offsetX,this._point.y=e.offsetY;var t=e.detail<0||e.wheelDelta>0?1:-1;this.branchScaling&&(e.metaKey||e.ctrlKey)?(this.currentBranchScale*=Math.pow(this.branchScalingStep,t),this.setBranchScale(this.currentBranchScale,this._point)):this.smoothZoom(t,this._point)}}},{key:\"findLeaves\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"id\",n=[],a=!0,r=!1,i=void 0;try{for(var s,l=this.leaves[Symbol.iterator]();!(a=(s=l.next()).done);a=!0){var o=s.value;o[t]&&o[t].match(e)&&n.push(o)}}catch(e){r=!0,i=e}finally{try{!a&&l.return&&l.return()}finally{if(r)throw i}}return n}},{key:\"updateLeaves\",value:function(e,t,n){var a=!0,r=!1,i=void 0;try{for(var s,l=this.leaves[Symbol.iterator]();!(a=(s=l.next()).done);a=!0){var o=s.value;o[t]=!n}}catch(e){r=!0,i=e}finally{try{!a&&l.return&&l.return()}finally{if(r)throw i}}var h=!0,c=!1,u=void 0;try{for(var d,f=e[Symbol.iterator]();!(h=(d=f.next()).done);h=!0){var v=d.value;v[t]=n}}catch(e){c=!0,u=e}finally{try{!h&&f.return&&f.return()}finally{if(c)throw u}}this.nodesUpdated(e.map(function(e){return e.id}),t)}},{key:\"clearSelect\",value:function(){this.root.cascadeFlag(\"selected\",!1),this.draw()}},{key:\"getPngUrl\",value:function(){return this.canvas.canvas.toDataURL()}},{key:\"load\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],a=t,r=n;if(\"function\"==typeof t&&(r=t,a={}),r&&(a.callback=r),a.format)return void this.build(e,v.default[a.format],a);var i=!0,s=!1,l=void 0;try{for(var o,h=Object.keys(v.default)[Symbol.iterator]();!(i=(o=h.next()).done);i=!0){var c=o.value,u=v.default[c];if(e.match(u.fileExtension)||e.match(u.validator))return void this.build(e,u,a)}}catch(e){s=!0,l=e}finally{try{!i&&h.return&&h.return()}finally{if(s)throw l}}var d=new Error(\"String not recognised as a file or a parseable format string\");r&&r(d),this.loadError(d)}},{key:\"saveOriginalTree\",value:function(){this.originalTree.branches=this.branches,this.originalTree.leaves=this.leaves,this.originalTree.root=this.root,this.originalTree.branchLengths={},this.originalTree.parents={}}},{key:\"clearState\",value:function(){this.root=!1,this.leaves=[],this.branches={},this.drawn=!1}},{key:\"extractNestedBranches\",value:function(){this.branches={},this.leaves=[],this.storeNode(this.root),this.root.extractChildren()}},{key:\"saveState\",value:function(){if(this.extractNestedBranches(),this.root.branchLength=0,this.maxBranchLength=0,this.root.setTotalLength(),0===this.maxBranchLength)return void this.loadError(new Error(\"All branches in the tree are identical.\"))}},{key:\"build\",value:function(e,t,n){var a=this;this.originalTree={},this.clearState(),h.default.lastId=0;var r=new h.default;r.id=\"root\",this.branches.root=r,this.setRoot(r),t.parse({formatString:e,root:r,options:n},function(t){return t?(n.callback&&n.callback(t),void a.loadError(t)):(a.stringRepresentation=e,a.saveState(),a.setInitialCollapsedBranches(),a.beforeFirstDraw(),a.draw(),a.saveOriginalTree(),n.callback&&n.callback(),void a.loadCompleted())})}},{key:\"redrawFromBranch\",value:function(e){this.clearState(),this.resetTree(),this.originalTree.branchLengths[e.id]=e.branchLength,this.originalTree.parents[e.id]=e.parent,this.root=e,this.root.parent=!1,this.saveState(),this.draw(),this.subtreeDrawn(e.id)}},{key:\"redrawOriginalTree\",value:function(){this.load(this.stringRepresentation)}},{key:\"storeNode\",value:function(e){if(e.id&&\"\"!==e.id||(e.id=h.default.generateId()),this.branches[e.id]&&e!==this.branches[e.id]){if(e.leaf)throw new Error(\"Two nodes on this tree share the id \"+e.id);e.id=h.default.generateId()}this.branches[e.id]=e,e.leaf&&this.leaves.push(e)}},{key:\"setNodeSize\",value:function(e){this.baseNodeSize=Number(e),this.draw()}},{key:\"setRoot\",value:function(e){e.tree=this,this.root=e}},{key:\"setTextSize\",value:function(e){this.textSize=Number(e),this.draw()}},{key:\"setFontSize\",value:function(e){this.textSize=this.calculateFontSize?this.calculateFontSize(e):Math.min(e/2,15),this.canvas.font=this.textSize+\"pt \"+this.font}},{key:\"setTreeType\",value:function(e,t){if(!(e in d.default))return b(this.containerElement,\"error\",{error:new Error('\"'+e+'\" is not a known tree-type.')});var n=this.treeType;this.treeType=e,this.type=d.default[e],this.branchRenderer=d.default[e].branchRenderer,this.prerenderer=d.default[e].prerenderer,this.labelAlign=d.default[e].labelAlign,this.calculateFontSize=d.default[e].calculateFontSize,this.drawn&&(this.drawn=!1,this.draw()),t||this.treeTypeChanged(n,e)}},{key:\"setSize\",value:function(e,t){this.canvas.canvas.width=e,this.canvas.canvas.height=t,this.navigator&&this.navigator.resize(),this.adjustForPixelRatio()}},{key:\"adjustForPixelRatio\",value:function(){var e=S(this.canvas);this.canvas.canvas.style.height=this.canvas.canvas.height+\"px\",this.canvas.canvas.style.width=this.canvas.canvas.width+\"px\",e>1&&(this.canvas.canvas.width*=e,this.canvas.canvas.height*=e)}},{key:\"getCentrePoint\",value:function(){var e=S(this.canvas);return{x:this.canvas.canvas.width/2/e,y:this.canvas.canvas.height/2/e}}},{key:\"setZoom\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.getCentrePoint(),n=t.x,a=t.y;if(e>0){var r=this.zoom;this.zoom=e,this.offsetx=this.calculateZoomedOffset(this.offsetx,n,r,e),this.offsety=this.calculateZoomedOffset(this.offsety,a,r,e),this.draw()}}},{key:\"smoothZoom\",value:function(e,t){this.setZoom(Math.pow(10,Math.log(this.zoom)/Math.log(10)+e*this.zoomFactor*.01),t)}},{key:\"calculateZoomedOffset\",value:function(e,t,n,a){return-1*((-1*e+t)/n*a-t)}},{key:\"setBranchScale\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{x:this.canvas.canvas.width/2,y:this.canvas.canvas.height/2},n=d.default[this.treeType];if(n.branchScalingAxis&&!(e<0)){var a=this.branchScalar;this.branchScalar=this.initialBranchScalar*e;var r=this.branchScalar/a,i=this[\"offset\"+n.branchScalingAxis],s=t[n.branchScalingAxis],l=(t[n.branchScalingAxis]-i)*r+i;this[\"offset\"+n.branchScalingAxis]+=s-l,this.draw()}}},{key:\"toggleLabels\",value:function(){this.showLabels=!this.showLabels,this.draw()}},{key:\"setMaxLabelLength\",value:function(){var e;void 0===this.maxLabelLength[this.treeType]&&(this.maxLabelLength[this.treeType]=0);for(var t=0;tthis.maxLabelLength[this.treeType]&&(this.maxLabelLength[this.treeType]=e.width)}},{key:\"loadStarted\",value:function(){b(this.containerElement,\"loading\")}},{key:\"beforeFirstDraw\",value:function(){b(this.containerElement,\"beforeFirstDraw\")}},{key:\"loadCompleted\",value:function(){b(this.containerElement,\"loaded\")}},{key:\"loadError\",value:function(e){b(this.containerElement,\"error\",{error:e})}},{key:\"subtreeDrawn\",value:function(e){b(this.containerElement,\"subtree\",{node:e})}},{key:\"nodesUpdated\",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];b(this.containerElement,\"updated\",{nodeIds:e,property:t,append:n})}},{key:\"treeTypeChanged\",value:function(e,t){b(this.containerElement,\"typechanged\",{oldType:e,newType:t})}},{key:\"addListener\",value:function(e,t,n){this.eventListeners[e]||(this.eventListeners[e]=[]),this.eventListeners[e].push({listener:t,target:n}),m(n||this.containerElement,e,t)}},{key:\"removeListener\",value:function(e,t,n){x(n||this.containerElement,e,t)}},{key:\"getBounds\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.leaves,t=e===this.leaves?this.root:e[0],n=t.startx,a=t.startx,r=t.starty,i=t.starty,s=!0,l=!1,o=void 0;try{for(var h,c=e[Symbol.iterator]();!(s=(h=c.next()).done);s=!0){var u=h.value,d=u.getBounds();n=Math.min(n,d.minx),a=Math.max(a,d.maxx),r=Math.min(r,d.miny),i=Math.max(i,d.maxy)}}catch(e){l=!0,o=e}finally{try{!s&&c.return&&c.return()}finally{if(l)throw o}}return[[n,r],[a,i]]}},{key:\"fitInPanel\",value:function(e){this.zoom=1;var t=this.getBounds(e),n=[this.canvas.canvas.width-2*this.padding,this.canvas.canvas.height-2*this.padding],a=[t[1][0]-t[0][0],t[1][1]-t[0][1]],r=S(this.canvas),i=n[0]/a[0],s=n[1]/a[1];this.zoom=Math.min(i,s),this.offsetx=-1*t[0][0]*this.zoom,this.offsety=-1*t[0][1]*this.zoom,i>s?(this.offsetx+=this.padding+(n[0]-a[0]*this.zoom)/2,this.offsety+=this.padding):(this.offsetx+=this.padding,this.offsety+=this.padding+(n[1]-a[1]*this.zoom)/2),this.offsetx=this.offsetx/r,this.offsety=this.offsety/r}},{key:\"resetTree\",value:function(){if(this.originalTree.branches){this.branches=this.originalTree.branches;var e=!0,t=!1,n=void 0;try{for(var a,r=Object.keys(this.originalTree.branchLengths)[Symbol.iterator]();!(e=(a=r.next()).done);e=!0){var i=a.value;this.branches[i].branchLength=this.originalTree.branchLengths[i],this.branches[i].parent=this.originalTree.parents[i]}}catch(e){t=!0,n=e}finally{try{!e&&r.return&&r.return()}finally{if(t)throw n}}this.leaves=this.originalTree.leaves,this.root=this.originalTree.root}}},{key:\"rotateBranch\",value:function(e){this.branches[e.id].rotate()}},{key:\"exportNwk\",value:function(){var e=this.root.getNwk();return e.substr(0,e.lastIndexOf(\")\")+1)+\";\"}},{key:\"resizeToContainer\",value:function(){this.setSize(this.containerElement.offsetWidth,this.containerElement.offsetHeight)}},{key:\"cleanup\",value:function(){this.removeEventListeners()}},{key:\"alignLabels\",get:function(){return this.showLabels&&this.labelAlign&&this.labelAlignEnabled},set:function(e){this.labelAlignEnabled=e}}]),e}();L.prototype.on=L.prototype.addListener,L.prototype.off=L.prototype.removeListener,t.default=L},function(e,t,n){\"use strict\";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}Object.defineProperty(t,\"__esModule\",{value:!0}),t.events=t.dom=t.constants=t.canvas=void 0;var r=n(3),i=a(r),s=n(6),l=a(s),o=n(4),h=a(o),c=n(5),u=a(c);t.canvas=i,t.constants=l,t.dom=h,t.events=u},function(e,t,n){\"use strict\";function a(e){return e.backingStorePixelRatio||e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||1}function r(e){return(window.devicePixelRatio||1)/a(e)}function i(e,t){var n=r(t.canvas);return[(e.offsetX-t.offsetx)/t.zoom*n,(e.offsetY-t.offsety)/t.zoom*n]}function s(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{x:0,y:0},t=e.x,n=e.y,a=arguments[1],i=r(a.canvas);return{x:(t-a.offsetx)/a.zoom*i,y:(n-a.offsety)/a.zoom*i}}function l(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{x:0,y:0},t=e.x,n=e.y,a=arguments[1],i=r(a.canvas);return{x:t/i*a.zoom+a.offsetx,y:n/i*a.zoom+a.offsety}}Object.defineProperty(t,\"__esModule\",{value:!0}),t.getBackingStorePixelRatio=a,t.getPixelRatio=r,t.translateClick=i,t.translatePoint=s,t.undoPointTranslation=l;n(4)},function(e,t,n){\"use strict\";function a(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"text/plain;charset=utf-8\",n=new Blob([e],{type:t});return f.createObjectURL(n)}function r(e,t){var n=document.createElement(\"a\"),a=\"undefined\"!=typeof n.download;n.href=e,n.target=\"_blank\",a&&(n.download=t),(0,d.fireEvent)(n,\"click\"),a&&f.revokeObjectURL(n.href)}function i(e){for(var t=0;e;)t+=e.offsetLeft,e=e.offsetParent;return t}function s(e){for(var t=0;e;)t+=e.offsetTop,e=e.offsetParent;return t}function l(e,t){var n=e.className.split(\" \");n.indexOf(t)===-1&&(n.push(t),e.className=n.join(\" \"))}function o(e,t){var n=e.className.split(\" \"),a=n.indexOf(t);a!==-1&&(n.splice(a,1),e.className=n.join(\" \"))}function h(e,t){var n=e.className.split(\" \"),a=n.indexOf(t);return a!==-1}function c(e){e.style.cursor=\"-webkit-grabbing\",e.style.cursor=\"-moz-grabbing\",e.style.cursor=\"grabbing\"}function u(e){e.style.cursor=\"-webkit-grab\",e.style.cursor=\"-moz-grab\",e.style.cursor=\"grab\"}Object.defineProperty(t,\"__esModule\",{value:!0}),t.createBlobUrl=a,t.setupDownloadLink=r,t.getX=i,t.getY=s,t.addClass=l,t.removeClass=o,t.hasClass=h,t.setCursorDragging=c,t.setCursorDrag=u;var d=n(5),f=window.URL||window.webkitURL},function(e,t){\"use strict\";function n(e){return e.preventDefault(),!1}function a(e,t){var n,a,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};document.createEvent?(n=document.createEvent(\"HTMLEvents\"),n.initEvent(t,!0,!0)):(n=document.createEventObject(),n.eventType=t),n.eventName=t;for(a in r)r.hasOwnProperty(a)&&(n[a]=r[a]);document.createEvent?e.dispatchEvent(n):e.fireEvent(\"on\"+n.eventType,n)}function r(e,t,n){e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent(\"on\"+t,function(){return n.call(e,window.event)})}function i(e,t,n){e.removeEventListener?e.removeEventListener(t,n,!1):console.warn(\"[Phylocanvas] Unable to remove event, removeEventListener not supported\")}function s(e){e.stopPropagation(),e.preventDefault()}function l(e,t){var n;return n=(\"undefined\"==typeof t?\"undefined\":o(t))===o(\"aaa\")?function(n){if(e[t])return e[t](n)}:function(){return t(e)}}Object.defineProperty(t,\"__esModule\",{value:!0});var o=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e};t.preventDefault=n,t.fireEvent=a,t.addEvent=r,t.removeEvent=i,t.killEvent=s,t.createHandler=l},function(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});t.Angles={FORTYFIVE:Math.PI/4,QUARTER:Math.PI/2,HALF:Math.PI,FULL:2*Math.PI},t.Shapes={x:\"star\",s:\"square\",o:\"circle\",t:\"triangle\"},t.Predicates={tautology:function(){return!0},contradiction:function(){return!1},leafOnly:function(e){return e.leaf},nonLeaf:function(e){return!e.leaf}}},function(e,t,n){\"use strict\";function a(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}Object.defineProperty(t,\"__esModule\",{value:!0});var i=function(){function e(e,t){for(var n=0;nthis.minx&&tthis.miny)return this;for(var n=this.children.length-1;n>=0;n--){var a=this.children[n].clicked(e,t);if(a)return a}}},{key:\"drawLabel\",value:function(){var e=this.getTextSize(),t=this.getLabel();this.canvas.font=this.getFontString(),this.labelWidth=this.canvas.measureText(t).width,void 0===this.tree.maxLabelLength[this.tree.treeType]&&(this.tree.maxLabelLength[this.tree.treeType]=0),this.labelWidth>this.tree.maxLabelLength[this.tree.treeType]&&(this.tree.maxLabelLength[this.tree.treeType]=this.labelWidth);var n=this.getLabelStartX();this.tree.alignLabels&&(n+=Math.abs(this.tree.labelAlign.getLabelOffset(this))),this.angle>u.QUARTER&&this.angleu.QUARTER&&this.anglethis.tree.maxBranchLength&&(this.tree.maxBranchLength=this.totalBranchLength)):(this.totalBranchLength=this.branchLength,this.tree.maxBranchLength=this.totalBranchLength),e=0;e0&&void 0!==arguments[0])||arguments[0];if(this.leaf)return this.label+\":\"+this.branchLength;var t=this.children.map(function(e){return e.getNwk(!1)});return\"(\"+t.join(\",\")+\"):\"+this.branchLength+(e?\";\":\"\")}},{key:\"getTextColour\",value:function(){if(this.selected)return this.tree.selectedColour;if(this.isHighlighted)return this.tree.highlightColour;if(this.tree.backColour&&this.children.length){var e=this.getChildColours();if(1===e.length)return e[0]}return this.labelStyle.colour||this.colour||this.tree.branchColour}},{key:\"getLabel\",value:function(){return void 0!==this.label&&null!==this.label?this.label:\"\";\n}},{key:\"getTextSize\",value:function(){return this.labelStyle.textSize||this.tree.textSize}},{key:\"getFontString\",value:function(){var e=this.labelStyle.font||this.tree.font;return(this.labelStyle.format||\"\")+\" \"+this.getTextSize()+\"pt \"+e}},{key:\"getLabelSize\",value:function(){return this.canvas.font=this.getFontString(),this.canvas.measureText(this.getLabel()).width}},{key:\"getRadius\",value:function(){var e=this.tree.baseNodeSize;return this.leaf?e*this.radius:e/this.radius}},{key:\"getDiameter\",value:function(){return 2*this.getRadius()}},{key:\"hasLabelConnector\",value:function(){return!!this.tree.alignLabels&&this.tree.labelAlign.getLabelOffset(this)>this.getDiameter()}},{key:\"getLabelStartX\",value:function(){var e=this.getLeafStyle(),t=(e.lineWidth,this.hasLabelConnector()),n=this.getDiameter();return this.isHighlighted&&!t&&(n+=this.getHighlightSize()-this.getRadius()),n+Math.min(this.tree.labelPadding,this.tree.labelPadding/this.tree.zoom)}},{key:\"getHighlightLineWidth\",value:function(){return this.tree.highlightWidth/this.tree.zoom}},{key:\"getHighlightRadius\",value:function(){var e=this.getHighlightLineWidth()*this.tree.highlightSize;return e+=this.getLeafStyle().lineWidth/this.tree.highlightSize,this.leaf?this.getRadius()+e:.666*e}},{key:\"getHighlightSize\",value:function(){return this.getHighlightRadius()+this.getHighlightLineWidth()}},{key:\"rotate\",value:function(){for(var e=[],t=this.children.length;t--;)e.push(this.children[t]);this.children=e,this.tree.extractNestedBranches(),this.tree.draw(!0)}},{key:\"getChildNo\",value:function(){return this.parent.children.indexOf(this)}},{key:\"setDisplay\",value:function(e){var t=e.colour,n=e.shape,a=e.size,r=e.leafStyle,i=e.labelStyle;t&&(this.colour=t),n&&(this.nodeShape=d[n]?d[n]:n),a&&(this.radius=a),r&&(this.leafStyle=r),i&&(this.labelStyle=i)}},{key:\"getTotalLength\",value:function(){var e=this.getRadius();return(this.tree.showLabels||this.tree.hoverLabel&&this.isHighlighted)&&(e+=this.getLabelStartX()+this.getLabelSize()),e}},{key:\"getBounds\",value:function(){var e=this.tree,t=e.alignLabels?e.labelAlign.getX(this):this.centerx,n=e.alignLabels?e.labelAlign.getY(this):this.centery,a=this.getRadius(),r=this.getTotalLength(),i=void 0,s=void 0,l=void 0,o=void 0;this.angle>u.QUARTER&&this.angle0?e.leaves[n-1].centery+t:0,e.leaves[n].centerx=e.leaves[n].totalBranchLength*e.branchScalar,e.leaves[n].centerx>e.farthestNodeFromRootX&&(e.farthestNodeFromRootX=e.leaves[n].centerx),e.leaves[n].centery>e.farthestNodeFromRootY&&(e.farthestNodeFromRootY=e.leaves[n].centery);for(var a=e.leaves[n];a.parent;a=a.parent){var r=a.parent.children;a.parent.centery=(r[0].centery+r[r.length-1].centery)/2}}}}},function(e,t,n){\"use strict\";function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(10),i=a(r),s=n(11),l=a(s),o=n(15),h=a(o),c=n(16),u=a(c),d={getX:function(e){return e.centerx+e.labelOffsetX+e.getDiameter()*Math.cos(e.angle)},getY:function(e){return e.centery+e.labelOffsetY+e.getDiameter()*Math.sin(e.angle)},getLabelOffset:function(e){return e.labelOffsetX/Math.cos(e.angle)}};t.default={branchRenderer:new i.default(h.default),prerenderer:new l.default(u.default),labelAlign:d,getCollapsedMeasurements:function(e){var t=e.tree,n=t.maxBranchLength,a=t.branchScalar,r=t.step;return{angle:e.getNumberOfLeaves()*r,radius:(n-e.totalBranchLength)*a}},calculateFontSize:function(e){return Math.min(10*e+4,40)}}},function(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={draw:function(e,t){var n=t.totalBranchLength*e.branchScalar;t.canvas.beginPath(),t.canvas.moveTo(t.startx,t.starty),t.canvas.lineTo(t.centerx,t.centery),t.canvas.stroke(),t.canvas.closePath(),t.canvas.strokeStyle=t.getColour(),t.children.length>1&&!t.collapsed&&(t.canvas.beginPath(),t.canvas.arc(0,0,n,t.minChildAngle,t.maxChildAngle,t.maxChildAnglen?n=e.branchScalar*e.maxBranchLength:e.branchScalar=n/e.maxBranchLength;for(var a=0;a0?e.leaves[n-1].centery+t:0,e.leaves[n].angle=0;for(var a=e.leaves[n];a.parent&&a.getChildNo()===a.parent.children.length-1;a=a.parent){a.parent.centery=a.parent.getChildYTotal()/a.parent.getChildCount(),a.parent.centerx=a.parent.children[0].centerx+(a.parent.children[0].centery-a.parent.centery)*Math.tan(r.FORTYFIVE);for(var i=0;i0?e.leaves[n-1].centerx+t:0,e.leaves[n].centery=e.leaves[n].totalBranchLength*e.branchScalar;for(var a=e.leaves[n];a.parent&&(0===a.getChildNo()&&(a.parent.centerx=a.centerx),a.getChildNo()===a.parent.children.length-1);a=a.parent){a.parent.angle=r.QUARTER,a.parent.centerx=(a.parent.centerx+a.centerx)/2,a.parent.centery=a.parent.totalBranchLength*e.branchScalar;for(var i=0;ie.farthestNodeFromRootX&&(e.farthestNodeFromRootX=e.leaves[n].centerx),e.leaves[n].centery>e.farthestNodeFromRootY&&(e.farthestNodeFromRootY=e.leaves[n].centery)}}}},function(e,t,n){\"use strict\";function a(e,t){e.beginPath(),e.moveTo(0,0),e.lineTo(t,0),e.stroke(),e.closePath()}function r(e,t){var n=t.lineWidth,a=t.strokeStyle,r=t.fillStyle;e.lineWidth=n,e.strokeStyle=a,e.fillStyle=r,e.fill(),n>0&&a!==r&&e.stroke()}Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(2),s=i.constants.Angles,l=function(e){return e*Math.sqrt(2)};t.default={circle:function(e,t,n){var i=Math.pow(l(t),2),o=Math.sqrt(i/Math.PI);a(e,t-o),e.beginPath(),e.arc(t,0,o,0,s.FULL,!1),e.closePath(),r(e,n)},square:function(e,t,n){var i=l(t),s=t-i/2;a(e,s),e.beginPath(),e.moveTo(s,0),e.lineTo(s,i/2),e.lineTo(s+i,i/2),e.lineTo(s+i,-i/2),e.lineTo(s,-i/2),e.lineTo(s,0),e.closePath(),r(e,n)},star:function(e,t,n){var i=t,s=0,l=5,o=t,h=.5*o,c=Math.PI/l;a(e,o-h);var u=Math.PI/2*3;e.beginPath(),e.moveTo(i,s-o);for(var d=0;d1&&void 0!==arguments[1]?arguments[1]:{},a=n.className,i=void 0===a?\"phylocanvas-tooltip\":a,s=n.element,l=void 0===s?document.createElement(\"div\"):s,o=n.zIndex,h=void 0===o?2e3:o,c=n.parent,u=void 0===c?t.containerElement:c;r(this,e),this.tree=t,this.element=l,this.element.className=i,this.element.style.display=\"none\",this.element.style.position=\"fixed\",this.element.style.zIndex=h,this.closed=!0,u.appendChild(this.element)}return i(e,[{key:\"close\",value:function(){this.element.style.display=\"none\",this.closed=!0}},{key:\"open\",value:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:100,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:100,n=arguments[2];this.element.hasChildNodes();)this.element.removeChild(this.element.firstChild);this.createContent(n),this.element.style.top=t+\"px\",this.element.style.left=e+\"px\",this.element.style.display=\"block\",this.closed=!1}},{key:\"createContent\",value:function(){throw new Error(\"Not implemented\")}}]),e}();t.default=s;t.ChildNodesTooltip=function(e){function t(e,a){r(this,t);var i=n(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,a));return i.element.style.background=\"rgba(97, 97, 97, 0.9)\",i.element.style.color=\"#fff\",i.element.style.cursor=\"pointer\",i.element.style.padding=\"8px\",i.element.style.marginTop=\"16px\",i.element.style.borderRadius=\"2px\",i.element.style.textAlign=\"center\",i.element.style.fontFamily=i.tree.font||\"sans-serif\",i.element.style.fontSize=\"10px\",i.element.style.fontWeight=\"500\",i}return a(t,e),i(t,[{key:\"createContent\",value:function(e){var t=document.createTextNode(e.getChildProperties(\"id\").length);this.element.appendChild(t)}}]),t}(s)},function(e,t,n){\"use strict\";function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var r=n(29),i=a(r),s=n(30),l=a(s),o=n(31),h=a(o);t.default={nexus:new i.default(h.default),newick:new i.default(l.default)}},function(e,t){\"use strict\";function n(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}Object.defineProperty(t,\"__esModule\",{value:!0});var a=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:{};return new h.default(e,t)}Object.defineProperty(t,"__esModule",{value:!0}),t.utils=t.nodeRenderers=t.treeTypes=t.Parser=t.Tooltip=t.Prerenderer=t.Branch=t.Tree=void 0;var o=n(1),h=r(o),c=n(7),u=r(c),d=n(11),f=r(d),v=n(27),g=r(v),y=n(29),p=r(y),b=n(8),m=r(b),x=n(26),S=r(x),k=n(2),w=a(k);t.Tree=h.default,t.Branch=u.default,t.Prerenderer=f.default,t.Tooltip=g.default,t.Parser=p.default,t.treeTypes=m.default,t.nodeRenderers=S.default,t.utils=w,t.default={plugin:s,createTree:l}},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function r(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1&&void 0!==arguments[1]?arguments[1]:{};i(this,e),this._point={x:0,y:0},this.containerElement="string"==typeof t?document.getElementById(t):t,g(this.containerElement,"pc-container"),this.branches={},this.leaves=[],this.root=!1,this.stringRepresentation="",this.backColour=!1,this.originalTree={},"static"===window.getComputedStyle(this.containerElement).position&&(this.containerElement.style.position="relative"),this.containerElement.style.boxSizing="border-box";var r=document.createElement("canvas");r.id=(this.containerElement.id||"")+"__canvas",r.className="phylocanvas",r.style.position="relative",r.height=t.offsetHeight||400,r.width=t.offsetWidth||400,r.style.zIndex="1",this.containerElement.appendChild(r),this.canvas=r.getContext("2d"),this.canvas.canvas.onselectstart=function(){return!1},this.canvas.fillStyle="#000000",this.canvas.strokeStyle="#000000",this.canvas.save(),this.collapsedColour="rgba(0, 0, 0, 0.5)",this.defaultCollapsed={},this.tooltip=new c.ChildNodesTooltip(this),this.drawn=!1,this.highlighters=[],this.zoom=1,this.zoomFactor=3,this.disableZoom=!1,this.fillCanvas=!1,this.branchScaling=!0,this.currentBranchScale=1,this.branchScalingStep=1.2,this.pickedup=!1,this.dragging=!1,this.startx=null,this.starty=null,this.baseNodeSize=1,this.origx=null,this.origy=null,this.offsetx=this.canvas.canvas.width/2,this.offsety=this.canvas.canvas.height/2,this.selectedColour="rgba(49,151,245,1)",this.highlightColour="rgba(49,151,245,1)",this.highlightWidth=4,this.highlightSize=2,this.branchColour="rgba(0,0,0,1)",this.branchScalar=1,this.padding=50,this.labelPadding=5,this.multiSelect=!0,this.clickFlag="selected",this.clickFlagPredicate=w.tautology,this.hoverLabel=!1,this.internalNodesSelectable=!0,this.showLabels=!0,this.showBranchLengthLabels=!1,this.branchLengthLabelPredicate=w.tautology,this.showInternalNodeLabels=!1,this.internalLabelStyle={colour:this.branchColour,textSize:this.textSize,font:this.font,format:""},this.setTreeType("radial"),this.maxBranchLength=0,this.lineWidth=1,this.textSize=7,this.font="sans-serif",this.unselectOnClickAway=!0,this.farthestNodeFromRootX=0,this.farthestNodeFromRootY=0,this.shiftKeyDrag=!1,this.maxLabelLength={},Object.assign(this,a),this.resizeToContainer(),this.eventListeners={};var s=Object.assign({click:{listener:this.clicked.bind(this)},mousedown:{listener:this.pickup.bind(this)},mouseup:{listener:this.drop.bind(this)},mouseout:{listener:this.drop.bind(this)},mousemove:{target:this.canvas.canvas,listener:this.drag.bind(this)},mousewheel:{target:this.canvas.canvas,listener:this.scroll.bind(this)},DOMMouseScroll:{target:this.canvas.canvas,listener:this.scroll.bind(this)},resize:{target:window,listener:function(){n.resizeToContainer(),n.draw()}}},a.eventListeners||{}),l=!0,o=!1,h=void 0;try{for(var u,d=Object.keys(s)[Symbol.iterator]();!(l=(u=d.next()).done);l=!0){var f=u.value,v=s[f],y=v.listener,p=v.target;this.addListener(f,y,p)}}catch(e){o=!0,h=e}finally{try{!l&&d.return&&d.return()}finally{if(o)throw h}}}return s(e,[{key:"removeEventListeners",value:function(){var e=!0,t=!1,n=void 0;try{for(var a,r=Object.keys(this.eventListeners)[Symbol.iterator]();!(e=(a=r.next()).done);e=!0){var i=a.value,s=!0,l=!1,o=void 0;try{for(var h,c=this.eventListeners[i][Symbol.iterator]();!(s=(h=c.next()).done);s=!0){var u=h.value,d=u.target,f=u.listener;x(d||this.containerElement,i,f)}}catch(e){l=!0,o=e}finally{try{!s&&c.return&&c.return()}finally{if(l)throw o}}}}catch(e){t=!0,n=e}finally{try{!e&&r.return&&r.return()}finally{if(t)throw n}}}},{key:"setInitialCollapsedBranches",value:function(){var e,t,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.root;if(e=n.getChildProperties("id"),e&&e.length>this.defaultCollapsed.min&&e.length1&&void 0!==arguments[1])||arguments[1];return this.leaves.reduce(function(n,a){return a[e]===t&&n.push(a.id),n},[])}},{key:"clicked",value:function(e){var t;if(0===e.button){var n=[];if(this.dragging)return void(this.dragging=!1);if(!this.root)return!1;t=this.getNodeAtMousePosition(e);var a=this.multiSelect&&(e.metaKey||e.ctrlKey);if(t&&t.interactive)if(a){if(t.leaf)t[this.clickFlag]=!t[this.clickFlag];else if(this.internalNodesSelectable){var r=t.getChildProperties(this.clickFlag).some(function(e){return e===!1});t.cascadeFlag(this.clickFlag,r,this.clickFlagPredicate)}n=this.getNodeIdsWithFlag(this.clickFlag),this.draw()}else this.root.cascadeFlag(this.clickFlag,!1,this.clickFlagPredicate),(this.internalNodesSelectable||t.leaf)&&(t.cascadeFlag(this.clickFlag,!0,this.clickFlagPredicate),n=t.getChildProperties("id")),this.draw();else!this.unselectOnClickAway||this.dragging||a||(this.root.cascadeFlag(this.clickFlag,!1,this.clickFlagPredicate),this.draw());this.pickedup||(this.dragging=!1),this.nodesUpdated(n,this.clickFlag)}}},{key:"drag",value:function(e){var t=S(this.canvas);if(!this.drawn)return!1;if(this.pickedup){var n=(e.clientX-this.startx)*t,a=(e.clientY-this.starty)*t;Math.abs(n)+Math.abs(a)>5&&(this.dragging=!0,this.offsetx=this.origx+n,this.offsety=this.origy+a,this.draw())}else{var r=e,i=this.getNodeAtMousePosition(r);i&&i.interactive&&(this.internalNodesSelectable||i.leaf)?(this.root.cascadeFlag("hovered",!1),i.hovered=!0,i.leaf||i.hasCollapsedAncestor()||this.tooltip.open(r.clientX,r.clientY,i),this.containerElement.style.cursor="pointer"):(this.tooltip.close(),this.root.cascadeFlag("hovered",!1),this.shiftKeyDrag&&r.shiftKey?y(this.containerElement):this.containerElement.style.cursor="auto"),this.draw()}}},{key:"draw",value:function(e){if(this.highlighters.length=0,0===this.maxBranchLength)return void this.loadError(new Error("All branches in the tree are identical."));this.canvas.clearRect(0,0,this.canvas.canvas.width,this.canvas.canvas.height),this.canvas.lineCap="round",this.canvas.lineJoin="round",this.canvas.strokeStyle=this.branchColour,this.canvas.save(),this.drawn&&!e||(this.prerenderer.run(this),e||this.fitInPanel());var t=S(this.canvas);this.canvas.lineWidth=this.lineWidth/this.zoom,this.canvas.translate(this.offsetx*t,this.offsety*t),this.canvas.scale(this.zoom,this.zoom),this.branchRenderer.render(this,this.root),this.highlighters.forEach(function(e){return e()}),this.drawn=!0,this.canvas.restore()}},{key:"pickup",value:function(e){if(!this.shiftKeyDrag||e.shiftKey){if(!this.drawn)return!1;this.origx=this.offsetx,this.origy=this.offsety,0===e.button&&(this.pickedup=!0,p(this.containerElement)),this.startx=e.clientX,this.starty=e.clientY}}},{key:"drop",value:function(e){return!!this.drawn&&(this.pickedup=!1,void(this.shiftKeyDrag&&e.shiftKey?y(this.containerElement):this.containerElement.style.cursor="auto"))}},{key:"scroll",value:function(e){if(!(this.disableZoom||"wheelDelta"in e&&0===e.wheelDelta)){e.preventDefault(),this._point.x=e.offsetX,this._point.y=e.offsetY;var t=e.detail<0||e.wheelDelta>0?1:-1;this.branchScaling&&(e.metaKey||e.ctrlKey)?(this.currentBranchScale*=Math.pow(this.branchScalingStep,t),this.setBranchScale(this.currentBranchScale,this._point)):this.smoothZoom(t,this._point)}}},{key:"findLeaves",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"id",n=[],a=!0,r=!1,i=void 0;try{for(var s,l=this.leaves[Symbol.iterator]();!(a=(s=l.next()).done);a=!0){var o=s.value;o[t]&&o[t].match(e)&&n.push(o)}}catch(e){r=!0,i=e}finally{try{!a&&l.return&&l.return()}finally{if(r)throw i}}return n}},{key:"updateLeaves",value:function(e,t,n){var a=!0,r=!1,i=void 0;try{for(var s,l=this.leaves[Symbol.iterator]();!(a=(s=l.next()).done);a=!0){var o=s.value;o[t]=!n}}catch(e){r=!0,i=e}finally{try{!a&&l.return&&l.return()}finally{if(r)throw i}}var h=!0,c=!1,u=void 0;try{for(var d,f=e[Symbol.iterator]();!(h=(d=f.next()).done);h=!0){var v=d.value;v[t]=n}}catch(e){c=!0,u=e}finally{try{!h&&f.return&&f.return()}finally{if(c)throw u}}this.nodesUpdated(e.map(function(e){return e.id}),t)}},{key:"clearSelect",value:function(){this.root.cascadeFlag("selected",!1),this.draw()}},{key:"getPngUrl",value:function(){return this.canvas.canvas.toDataURL()}},{key:"load",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments[2],a=t,r=n;if("function"==typeof t&&(r=t,a={}),r&&(a.callback=r),a.format)return void this.build(e,v.default[a.format],a);var i=!0,s=!1,l=void 0;try{for(var o,h=Object.keys(v.default)[Symbol.iterator]();!(i=(o=h.next()).done);i=!0){var c=o.value,u=v.default[c];if(e.match(u.fileExtension)||e.match(u.validator))return void this.build(e,u,a)}}catch(e){s=!0,l=e}finally{try{!i&&h.return&&h.return()}finally{if(s)throw l}}var d=new Error("String not recognised as a file or a parseable format string");r&&r(d),this.loadError(d)}},{key:"saveOriginalTree",value:function(){this.originalTree.branches=this.branches,this.originalTree.leaves=this.leaves,this.originalTree.root=this.root,this.originalTree.branchLengths={},this.originalTree.parents={}}},{key:"clearState",value:function(){this.root=!1,this.leaves=[],this.branches={},this.drawn=!1}},{key:"extractNestedBranches",value:function(){this.branches={},this.leaves=[],this.storeNode(this.root),this.root.extractChildren()}},{key:"saveState",value:function(){if(this.extractNestedBranches(),this.root.branchLength=0,this.maxBranchLength=0,this.root.setTotalLength(),0===this.maxBranchLength)return void this.loadError(new Error("All branches in the tree are identical."))}},{key:"build",value:function(e,t,n){var a=this;this.originalTree={},this.clearState(),h.default.lastId=0;var r=new h.default;r.id="root",this.branches.root=r,this.setRoot(r),t.parse({formatString:e,root:r,options:n},function(t){return t?(n.callback&&n.callback(t),void a.loadError(t)):(a.stringRepresentation=e,a.saveState(),a.setInitialCollapsedBranches(),a.beforeFirstDraw(),a.draw(),a.saveOriginalTree(),n.callback&&n.callback(),void a.loadCompleted())})}},{key:"redrawFromBranch",value:function(e){this.clearState(),this.resetTree(),this.originalTree.branchLengths[e.id]=e.branchLength,this.originalTree.parents[e.id]=e.parent,this.root=e,this.root.parent=!1,this.saveState(),this.draw(),this.subtreeDrawn(e.id)}},{key:"redrawOriginalTree",value:function(){this.load(this.stringRepresentation)}},{key:"storeNode",value:function(e){if(e.id&&""!==e.id||(e.id=h.default.generateId()),this.branches[e.id]&&e!==this.branches[e.id]){if(e.leaf)throw new Error("Two nodes on this tree share the id "+e.id);e.id=h.default.generateId()}this.branches[e.id]=e,e.leaf&&this.leaves.push(e)}},{key:"setNodeSize",value:function(e){this.baseNodeSize=Number(e),this.draw()}},{key:"setRoot",value:function(e){e.tree=this,this.root=e}},{key:"setTextSize",value:function(e){this.textSize=Number(e),this.draw()}},{key:"setFontSize",value:function(e){this.textSize=this.calculateFontSize?this.calculateFontSize(e):Math.min(e/2,15),this.canvas.font=this.textSize+"pt "+this.font}},{key:"setTreeType",value:function(e,t){if(!(e in d.default))return b(this.containerElement,"error",{error:new Error('"'+e+'" is not a known tree-type.')});var n=this.treeType;this.treeType=e,this.type=d.default[e],this.branchRenderer=d.default[e].branchRenderer,this.prerenderer=d.default[e].prerenderer,this.labelAlign=d.default[e].labelAlign,this.calculateFontSize=d.default[e].calculateFontSize,this.drawn&&(this.drawn=!1,this.draw()),t||this.treeTypeChanged(n,e)}},{key:"setSize",value:function(e,t){this.canvas.canvas.width=e,this.canvas.canvas.height=t,this.navigator&&this.navigator.resize(),this.adjustForPixelRatio()}},{key:"adjustForPixelRatio",value:function(){var e=S(this.canvas);this.canvas.canvas.style.height=this.canvas.canvas.height+"px",this.canvas.canvas.style.width=this.canvas.canvas.width+"px",e>1&&(this.canvas.canvas.width*=e,this.canvas.canvas.height*=e)}},{key:"getCentrePoint",value:function(){var e=S(this.canvas);return{x:this.canvas.canvas.width/2/e,y:this.canvas.canvas.height/2/e}}},{key:"setZoom",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.getCentrePoint(),n=t.x,a=t.y;if(e>0){var r=this.zoom;this.zoom=e,this.offsetx=this.calculateZoomedOffset(this.offsetx,n,r,e),this.offsety=this.calculateZoomedOffset(this.offsety,a,r,e),this.draw()}}},{key:"smoothZoom",value:function(e,t){this.setZoom(Math.pow(10,Math.log(this.zoom)/Math.log(10)+e*this.zoomFactor*.01),t)}},{key:"calculateZoomedOffset",value:function(e,t,n,a){return-1*((-1*e+t)/n*a-t)}},{key:"setBranchScale",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{x:this.canvas.canvas.width/2,y:this.canvas.canvas.height/2},n=d.default[this.treeType];if(n.branchScalingAxis&&!(e<0)){var a=this.branchScalar;this.branchScalar=this.initialBranchScalar*e;var r=this.branchScalar/a,i=this["offset"+n.branchScalingAxis],s=t[n.branchScalingAxis],l=(t[n.branchScalingAxis]-i)*r+i;this["offset"+n.branchScalingAxis]+=s-l,this.draw()}}},{key:"toggleLabels",value:function(){this.showLabels=!this.showLabels,this.draw()}},{key:"setMaxLabelLength",value:function(){var e;void 0===this.maxLabelLength[this.treeType]&&(this.maxLabelLength[this.treeType]=0);for(var t=0;tthis.maxLabelLength[this.treeType]&&(this.maxLabelLength[this.treeType]=e.width)}},{key:"loadStarted",value:function(){b(this.containerElement,"loading")}},{key:"beforeFirstDraw",value:function(){b(this.containerElement,"beforeFirstDraw")}},{key:"loadCompleted",value:function(){b(this.containerElement,"loaded")}},{key:"loadError",value:function(e){b(this.containerElement,"error",{error:e})}},{key:"subtreeDrawn",value:function(e){b(this.containerElement,"subtree",{node:e})}},{key:"nodesUpdated",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];b(this.containerElement,"updated",{nodeIds:e,property:t,append:n})}},{key:"treeTypeChanged",value:function(e,t){b(this.containerElement,"typechanged",{oldType:e,newType:t})}},{key:"addListener",value:function(e,t,n){this.eventListeners[e]||(this.eventListeners[e]=[]),this.eventListeners[e].push({listener:t,target:n}),m(n||this.containerElement,e,t)}},{key:"removeListener",value:function(e,t,n){x(n||this.containerElement,e,t)}},{key:"getBounds",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.leaves,t=e===this.leaves?this.root:e[0],n=t.startx,a=t.startx,r=t.starty,i=t.starty,s=!0,l=!1,o=void 0;try{for(var h,c=e[Symbol.iterator]();!(s=(h=c.next()).done);s=!0){var u=h.value,d=u.getBounds();n=Math.min(n,d.minx),a=Math.max(a,d.maxx),r=Math.min(r,d.miny),i=Math.max(i,d.maxy)}}catch(e){l=!0,o=e}finally{try{!s&&c.return&&c.return()}finally{if(l)throw o}}return[[n,r],[a,i]]}},{key:"fitInPanel",value:function(e){this.zoom=1;var t=this.getBounds(e),n=[this.canvas.canvas.width-2*this.padding,this.canvas.canvas.height-2*this.padding],a=[t[1][0]-t[0][0],t[1][1]-t[0][1]],r=S(this.canvas),i=n[0]/a[0],s=n[1]/a[1];this.zoom=Math.min(i,s),this.offsetx=-1*t[0][0]*this.zoom,this.offsety=-1*t[0][1]*this.zoom,i>s?(this.offsetx+=this.padding+(n[0]-a[0]*this.zoom)/2,this.offsety+=this.padding):(this.offsetx+=this.padding,this.offsety+=this.padding+(n[1]-a[1]*this.zoom)/2),this.offsetx=this.offsetx/r,this.offsety=this.offsety/r}},{key:"resetTree",value:function(){if(this.originalTree.branches){this.branches=this.originalTree.branches;var e=!0,t=!1,n=void 0;try{for(var a,r=Object.keys(this.originalTree.branchLengths)[Symbol.iterator]();!(e=(a=r.next()).done);e=!0){var i=a.value;this.branches[i].branchLength=this.originalTree.branchLengths[i],this.branches[i].parent=this.originalTree.parents[i]}}catch(e){t=!0,n=e}finally{try{!e&&r.return&&r.return()}finally{if(t)throw n}}this.leaves=this.originalTree.leaves,this.root=this.originalTree.root}}},{key:"rotateBranch",value:function(e){this.branches[e.id].rotate()}},{key:"exportNwk",value:function(){var e=this.root.getNwk();return e.substr(0,e.lastIndexOf(")")+1)+";"}},{key:"resizeToContainer",value:function(){this.setSize(this.containerElement.offsetWidth,this.containerElement.offsetHeight)}},{key:"cleanup",value:function(){this.removeEventListeners()}},{key:"alignLabels",get:function(){return this.showLabels&&this.labelAlign&&this.labelAlignEnabled},set:function(e){this.labelAlignEnabled=e}}]),e}();L.prototype.on=L.prototype.addListener,L.prototype.off=L.prototype.removeListener,t.default=L},function(e,t,n){"use strict";function a(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}Object.defineProperty(t,"__esModule",{value:!0}),t.events=t.dom=t.constants=t.canvas=void 0;var r=n(3),i=a(r),s=n(6),l=a(s),o=n(4),h=a(o),c=n(5),u=a(c);t.canvas=i,t.constants=l,t.dom=h,t.events=u},function(e,t,n){"use strict";function a(e){return e.backingStorePixelRatio||e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||1}function r(e){return(window.devicePixelRatio||1)/a(e)}function i(e,t){var n=r(t.canvas);return[(e.offsetX-t.offsetx)/t.zoom*n,(e.offsetY-t.offsety)/t.zoom*n]}function s(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{x:0,y:0},t=e.x,n=e.y,a=arguments[1],i=r(a.canvas);return{x:(t-a.offsetx)/a.zoom*i,y:(n-a.offsety)/a.zoom*i}}function l(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{x:0,y:0},t=e.x,n=e.y,a=arguments[1],i=r(a.canvas);return{x:t/i*a.zoom+a.offsetx,y:n/i*a.zoom+a.offsety}}Object.defineProperty(t,"__esModule",{value:!0}),t.getBackingStorePixelRatio=a,t.getPixelRatio=r,t.translateClick=i,t.translatePoint=s,t.undoPointTranslation=l;n(4)},function(e,t,n){"use strict";function a(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"text/plain;charset=utf-8",n=new Blob([e],{type:t});return f.createObjectURL(n)}function r(e,t){var n=document.createElement("a"),a="undefined"!=typeof n.download;n.href=e,n.target="_blank",a&&(n.download=t),(0,d.fireEvent)(n,"click"),a&&f.revokeObjectURL(n.href)}function i(e){for(var t=0;e;)t+=e.offsetLeft,e=e.offsetParent;return t}function s(e){for(var t=0;e;)t+=e.offsetTop,e=e.offsetParent;return t}function l(e,t){var n=e.className.split(" ");n.indexOf(t)===-1&&(n.push(t),e.className=n.join(" "))}function o(e,t){var n=e.className.split(" "),a=n.indexOf(t);a!==-1&&(n.splice(a,1),e.className=n.join(" "))}function h(e,t){var n=e.className.split(" "),a=n.indexOf(t);return a!==-1}function c(e){e.style.cursor="-webkit-grabbing",e.style.cursor="-moz-grabbing",e.style.cursor="grabbing"}function u(e){e.style.cursor="-webkit-grab",e.style.cursor="-moz-grab",e.style.cursor="grab"}Object.defineProperty(t,"__esModule",{value:!0}),t.createBlobUrl=a,t.setupDownloadLink=r,t.getX=i,t.getY=s,t.addClass=l,t.removeClass=o,t.hasClass=h,t.setCursorDragging=c,t.setCursorDrag=u;var d=n(5),f=window.URL||window.webkitURL},function(e,t){"use strict";function n(e){return e.preventDefault(),!1}function a(e,t){var n,a,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};document.createEvent?(n=document.createEvent("HTMLEvents"),n.initEvent(t,!0,!0)):(n=document.createEventObject(),n.eventType=t),n.eventName=t;for(a in r)r.hasOwnProperty(a)&&(n[a]=r[a]);document.createEvent?e.dispatchEvent(n):e.fireEvent("on"+n.eventType,n)}function r(e,t,n){e.addEventListener?e.addEventListener(t,n,!1):e.attachEvent("on"+t,function(){return n.call(e,window.event)})}function i(e,t,n){e.removeEventListener?e.removeEventListener(t,n,!1):console.warn("[Phylocanvas] Unable to remove event, removeEventListener not supported")}function s(e){e.stopPropagation(),e.preventDefault()}function l(e,t){var n;return n=("undefined"==typeof t?"undefined":o(t))===o("aaa")?function(n){if(e[t])return e[t](n)}:function(){return t(e)}}Object.defineProperty(t,"__esModule",{value:!0});var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.preventDefault=n,t.fireEvent=a,t.addEvent=r,t.removeEvent=i,t.killEvent=s,t.createHandler=l},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.Angles={FORTYFIVE:Math.PI/4,QUARTER:Math.PI/2,HALF:Math.PI,FULL:2*Math.PI},t.Shapes={x:"star",s:"square",o:"circle",t:"triangle"},t.Predicates={tautology:function(){return!0},contradiction:function(){return!1},leafOnly:function(e){return e.leaf},nonLeaf:function(e){return!e.leaf}}},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;nthis.minx&&tthis.miny)return this;for(var n=this.children.length-1;n>=0;n--){var a=this.children[n].clicked(e,t);if(a)return a}}},{key:"drawLabel",value:function(){var e=this.getTextSize(),t=this.getLabel();this.canvas.font=this.getFontString(),this.labelWidth=this.canvas.measureText(t).width,void 0===this.tree.maxLabelLength[this.tree.treeType]&&(this.tree.maxLabelLength[this.tree.treeType]=0),this.labelWidth>this.tree.maxLabelLength[this.tree.treeType]&&(this.tree.maxLabelLength[this.tree.treeType]=this.labelWidth);var n=this.getLabelStartX();this.tree.alignLabels&&(n+=Math.abs(this.tree.labelAlign.getLabelOffset(this))),this.angle>u.QUARTER&&this.angleu.QUARTER&&this.anglethis.tree.maxBranchLength&&(this.tree.maxBranchLength=this.totalBranchLength)):(this.totalBranchLength=this.branchLength,this.tree.maxBranchLength=this.totalBranchLength),e=0;e0&&void 0!==arguments[0])||arguments[0];if(this.leaf)return this.label+":"+this.branchLength;var t=this.children.map(function(e){return e.getNwk(!1)});return"("+t.join(",")+"):"+this.branchLength+(e?";":"")}},{key:"getTextColour",value:function(){if(this.selected)return this.tree.selectedColour;if(this.isHighlighted)return this.tree.highlightColour;if(this.tree.backColour&&this.children.length){var e=this.getChildColours();if(1===e.length)return e[0]}return this.labelStyle.colour||this.colour||this.tree.branchColour}},{key:"getLabel",value:function(){return void 0!==this.label&&null!==this.label?this.label:""; +}},{key:"getTextSize",value:function(){return this.labelStyle.textSize||this.tree.textSize}},{key:"getFontString",value:function(){var e=this.labelStyle.font||this.tree.font;return(this.labelStyle.format||"")+" "+this.getTextSize()+"pt "+e}},{key:"getLabelSize",value:function(){return this.canvas.font=this.getFontString(),this.canvas.measureText(this.getLabel()).width}},{key:"getRadius",value:function(){var e=this.tree.baseNodeSize;return this.leaf?e*this.radius:e/this.radius}},{key:"getDiameter",value:function(){return 2*this.getRadius()}},{key:"hasLabelConnector",value:function(){return!!this.tree.alignLabels&&this.tree.labelAlign.getLabelOffset(this)>this.getDiameter()}},{key:"getLabelStartX",value:function(){var e=this.getLeafStyle(),t=(e.lineWidth,this.hasLabelConnector()),n=this.getDiameter();return this.isHighlighted&&!t&&(n+=this.getHighlightSize()-this.getRadius()),n+Math.min(this.tree.labelPadding,this.tree.labelPadding/this.tree.zoom)}},{key:"getHighlightLineWidth",value:function(){return this.tree.highlightWidth/this.tree.zoom}},{key:"getHighlightRadius",value:function(){var e=this.getHighlightLineWidth()*this.tree.highlightSize;return e+=this.getLeafStyle().lineWidth/this.tree.highlightSize,this.leaf?this.getRadius()+e:.666*e}},{key:"getHighlightSize",value:function(){return this.getHighlightRadius()+this.getHighlightLineWidth()}},{key:"rotate",value:function(){for(var e=[],t=this.children.length;t--;)e.push(this.children[t]);this.children=e,this.tree.extractNestedBranches(),this.tree.draw(!0)}},{key:"getChildNo",value:function(){return this.parent.children.indexOf(this)}},{key:"setDisplay",value:function(e){var t=e.colour,n=e.shape,a=e.size,r=e.leafStyle,i=e.labelStyle;t&&(this.colour=t),n&&(this.nodeShape=d[n]?d[n]:n),a&&(this.radius=a),r&&(this.leafStyle=r),i&&(this.labelStyle=i)}},{key:"getTotalLength",value:function(){var e=this.getRadius();return(this.tree.showLabels||this.tree.hoverLabel&&this.isHighlighted)&&(e+=this.getLabelStartX()+this.getLabelSize()),e}},{key:"getBounds",value:function(){var e=this.tree,t=e.alignLabels?e.labelAlign.getX(this):this.centerx,n=e.alignLabels?e.labelAlign.getY(this):this.centery,a=this.getRadius(),r=this.getTotalLength(),i=void 0,s=void 0,l=void 0,o=void 0;this.angle>u.QUARTER&&this.angle0?e.leaves[n-1].centery+t:0,e.leaves[n].centerx=e.leaves[n].totalBranchLength*e.branchScalar,e.leaves[n].centerx>e.farthestNodeFromRootX&&(e.farthestNodeFromRootX=e.leaves[n].centerx),e.leaves[n].centery>e.farthestNodeFromRootY&&(e.farthestNodeFromRootY=e.leaves[n].centery);for(var a=e.leaves[n];a.parent;a=a.parent){var r=a.parent.children;a.parent.centery=(r[0].centery+r[r.length-1].centery)/2}}}}},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var r=n(10),i=a(r),s=n(11),l=a(s),o=n(15),h=a(o),c=n(16),u=a(c),d={getX:function(e){return e.centerx+e.labelOffsetX+e.getDiameter()*Math.cos(e.angle)},getY:function(e){return e.centery+e.labelOffsetY+e.getDiameter()*Math.sin(e.angle)},getLabelOffset:function(e){return e.labelOffsetX/Math.cos(e.angle)}};t.default={branchRenderer:new i.default(h.default),prerenderer:new l.default(u.default),labelAlign:d,getCollapsedMeasurements:function(e){var t=e.tree,n=t.maxBranchLength,a=t.branchScalar,r=t.step;return{angle:e.getNumberOfLeaves()*r,radius:(n-e.totalBranchLength)*a}},calculateFontSize:function(e){return Math.min(10*e+4,40)}}},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={draw:function(e,t){var n=t.totalBranchLength*e.branchScalar;t.canvas.beginPath(),t.canvas.moveTo(t.startx,t.starty),t.canvas.lineTo(t.centerx,t.centery),t.canvas.stroke(),t.canvas.closePath(),t.canvas.strokeStyle=t.getColour(),t.children.length>1&&!t.collapsed&&(t.canvas.beginPath(),t.canvas.arc(0,0,n,t.minChildAngle,t.maxChildAngle,t.maxChildAnglen?n=e.branchScalar*e.maxBranchLength:e.branchScalar=n/e.maxBranchLength;for(var a=0;a0?e.leaves[n-1].centery+t:0,e.leaves[n].angle=0;for(var a=e.leaves[n];a.parent&&a.getChildNo()===a.parent.children.length-1;a=a.parent){a.parent.centery=a.parent.getChildYTotal()/a.parent.getChildCount(),a.parent.centerx=a.parent.children[0].centerx+(a.parent.children[0].centery-a.parent.centery)*Math.tan(r.FORTYFIVE);for(var i=0;i0?e.leaves[n-1].centerx+t:0,e.leaves[n].centery=e.leaves[n].totalBranchLength*e.branchScalar;for(var a=e.leaves[n];a.parent&&(0===a.getChildNo()&&(a.parent.centerx=a.centerx),a.getChildNo()===a.parent.children.length-1);a=a.parent){a.parent.angle=r.QUARTER,a.parent.centerx=(a.parent.centerx+a.centerx)/2,a.parent.centery=a.parent.totalBranchLength*e.branchScalar;for(var i=0;ie.farthestNodeFromRootX&&(e.farthestNodeFromRootX=e.leaves[n].centerx),e.leaves[n].centery>e.farthestNodeFromRootY&&(e.farthestNodeFromRootY=e.leaves[n].centery)}}}},function(e,t,n){"use strict";function a(e,t){e.beginPath(),e.moveTo(0,0),e.lineTo(t,0),e.stroke(),e.closePath()}function r(e,t){var n=t.lineWidth,a=t.strokeStyle,r=t.fillStyle;e.lineWidth=n,e.strokeStyle=a,e.fillStyle=r,e.fill(),n>0&&a!==r&&e.stroke()}Object.defineProperty(t,"__esModule",{value:!0});var i=n(2),s=i.constants.Angles,l=function(e){return e*Math.sqrt(2)};t.default={circle:function(e,t,n){var i=Math.pow(l(t),2),o=Math.sqrt(i/Math.PI);a(e,t-o),e.beginPath(),e.arc(t,0,o,0,s.FULL,!1),e.closePath(),r(e,n)},square:function(e,t,n){var i=l(t),s=t-i/2;a(e,s),e.beginPath(),e.moveTo(s,0),e.lineTo(s,i/2),e.lineTo(s+i,i/2),e.lineTo(s+i,-i/2),e.lineTo(s,-i/2),e.lineTo(s,0),e.closePath(),r(e,n)},star:function(e,t,n){var i=t,s=0,l=5,o=t,h=.5*o,c=Math.PI/l;a(e,o-h);var u=Math.PI/2*3;e.beginPath(),e.moveTo(i,s-o);for(var d=0;d1&&void 0!==arguments[1]?arguments[1]:{},a=n.className,i=void 0===a?"phylocanvas-tooltip":a,s=n.element,l=void 0===s?document.createElement("div"):s,o=n.zIndex,h=void 0===o?2e3:o,c=n.parent,u=void 0===c?t.containerElement:c;r(this,e),this.tree=t,this.element=l,this.element.className=i,this.element.style.display="none",this.element.style.position="fixed",this.element.style.zIndex=h,this.closed=!0,u.appendChild(this.element)}return i(e,[{key:"close",value:function(){this.element.style.display="none",this.closed=!0}},{key:"open",value:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:100,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:100,n=arguments[2];this.element.hasChildNodes();)this.element.removeChild(this.element.firstChild);this.createContent(n),this.element.style.top=t+"px",this.element.style.left=e+"px",this.element.style.display="block",this.closed=!1}},{key:"createContent",value:function(){throw new Error("Not implemented")}}]),e}();t.default=s;t.ChildNodesTooltip=function(e){function t(e,a){r(this,t);var i=n(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,a));return i.element.style.background="rgba(97, 97, 97, 0.9)",i.element.style.color="#fff",i.element.style.cursor="pointer",i.element.style.padding="8px",i.element.style.marginTop="16px",i.element.style.borderRadius="2px",i.element.style.textAlign="center",i.element.style.fontFamily=i.tree.font||"sans-serif",i.element.style.fontSize="10px",i.element.style.fontWeight="500",i}return a(t,e),i(t,[{key:"createContent",value:function(e){var t=document.createTextNode(e.getChildProperties("id").length);this.element.appendChild(t)}}]),t}(s)},function(e,t,n){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var r=n(29),i=a(r),s=n(30),l=a(s),o=n(31),h=a(o);t.default={nexus:new i.default(h.default),newick:new i.default(l.default)}},function(e,t){"use strict";function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n