@euphrasiologist/lwphylo 1.1.7 → 1.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +0,0 @@
1
- // https://github.com/Euphrasiologist/lwPhylo#readme v1.1.7 Copyright 2025 Max Brown
2
- !function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((n=n||self).lwphylo=n.lwphylo||{})}(this,(function(n){"use strict";const t={circular:()=>{var n,t,e=200,r=2,a=[0,0],i={};function l(r){var l=i.xscale(r.x)-a[0],h=i.yscale(r.y)-a[1],s=Math.sqrt(l*l+h*h);if(!s||s>=e)return{x:i.xscale(r.x),y:i.yscale(r.y),z:s>=e?1:10};var o=n*(1-Math.exp(-s*t))/s*.75+.25;return{x:a[0]+l*o,y:a[1]+h*o,z:Math.min(o,10)}}function h(){return n=(n=Math.exp(r))/(n-1)*e,t=r/e,l}return l.radius=function(n){return arguments.length?(e=+n,h()):e},l.distortion=function(n){return arguments.length?(r=+n,h()):r},l.focus=function(n){return arguments.length?(a=n,l):a},l.scales=function(n,t){return arguments.length?(i={xscale:n,yscale:t},l):i},h()}};function e(n,t,e,r){return{x:n+e*Math.cos(r),y:t+e*Math.sin(r)}}function r(n,t=!0){var e=[];for(const t of function n(t,e=[]){e.push(t);for(var r=0;r<t.children.length;r++)e=n(t.children[r],e);return e}(n))null===t.parent?e.push({parentId:null,parentLabel:null,thisId:t.id,thisLabel:t.label,children:t.children.map(n=>n.id),branchLength:0,isTip:!1,x:t.x,y:t.y,angle:t.angle}):e.push({parentId:t.parent.id,parentLabel:t.parent.label,thisId:t.id,thisLabel:t.label,children:t.children.map(n=>n.id),branchLength:t.branchLength,isTip:0==t.children.length,x:t.x,y:t.y,angle:t.angle});return t&&(e=e.sort((function(n,t){return n.thisId-t.thisId}))),e}function a(n){var t=0;for(const e of function(n){for(var t,e=[n],r=[];e.length>0;){t=e.pop(),r.push(t);for(const n of t.children)e.push(n)}return r}(n))0==e.children.length&&t++;return t}function i(n,t){let e=0,r=0;if(void 0===t)for(let t of n)null!=t&&(t=+t)>=t&&(++e,r+=t);else{let a=-1;for(let i of n)null!=(i=t(i,++a,n))&&(i=+i)>=i&&(++e,r+=i)}if(e)return r/e}function l(n){var t=r(n),e=a(n),l=1;for(let n=0;n<t.length;n++)1==t[n].isTip&&(t[n].angle=l/e*2*Math.PI,l+=1);function h(n,e){for(var r=0;r<t.length;r++){if(t[r].thisId===n)var a=t[r].angle;if(t[r].thisId===e)var l=t[r].angle}return i([a,l])}for(let n=0;n<t.length;n++)!1===t[n].isTip&&(t[n].angle=h(t[n].children[0],t[n].children[1]));var s=t.map(n=>null===n.parentId?n.thisId:null).filter(n=>null!=n)[0];function o(n){for(var e=0;e<t.length;e++)if(t[e].thisId===n)var r=t[e].r;return r}t.sort((n,t)=>t.thisId-n.thisId);for(let n=0;n<t.length;n++)if(t[n].parentId===s)!0===t[n].isTip?(t[n].r=t[n].branchLength,t[n].x=t[n].branchLength,t[n].y=0):(t[n].r=t[n].branchLength,t[n].x=t[n].branchLength*Math.cos(t[n].angle),t[n].y=t[n].branchLength*Math.sin(t[n].angle));else{var c=o(t[n].parentId);t[n].r=c+t[n].branchLength,t[n].x=(c+t[n].branchLength)*Math.cos(t[n].angle),t[n].y=(c+t[n].branchLength)*Math.sin(t[n].angle)}return t[0].r=0,t[0].x=0,t[0].y=0,t}function h(n,t){const e=Math.cos(n),r=Math.sin(n);return(a=Math.atan2(..."X"===t?[r,-e]:[-r,e])).toString().includes("3.1415")&&(a=Math.abs(a)),a;var a}function s(n){const t=r(n),e=new Map(t.map((n,t)=>[n.thisId,t])),a=[];!function n(t){t.children&&0!==t.children.length?t.children.forEach(n):a.push(t.id)}(n);const l=new Map(a.map((n,t)=>[n,t+1]));return function n(r){const a=e.get(r.id);if(!r.children||0===r.children.length){const n=l.get(r.id);return t[a].y0=n,t[a].y1=n,n}const h=i(r.children.map(n));return t[a].y0=h,t[a].y1=h,h}(n),function n(r,a){const i=e.get(r.id),l=a??0,h=l+(t[i].branchLength??0);t[i].x0=l,t[i].x1=h,r.children&&r.children.length&&r.children.forEach(t=>n(t,h))}(n,0),t.map(({y:n,x:t,angle:e,...r})=>r)}n.describeArc=function(n,t,r,a,i){var l=e(n,t,r,a),h=e(n,t,r,i);return["M",l.x,l.y,"A",r,r,0,0,0,h.x,h.y].join(" ")},n.parentFisheye=function(n,t){for(let e=0;e<t.length;e++)if(n.parentId===t[e].thisId)return{px:t[e].fisheye.x,py:t[e].fisheye.y}},n.phisheye=t,n.radialLayout=function(n){var t={};return t.data=l(n),t.radii=function(n){var t=l(n);function e(n){for(var e=0;e<t.length;e++)if(t[e].thisId===n.parentId)var r=t[e].r;return r}for(var r=[],a=t.map(n=>null===n.parentId?n.thisId:null).filter(n=>null!=n)[0],i=0;i<t.length;i++)t[i].thisId!==a&&r.push({thisId:t[i].thisId,thisLabel:t[i].thisLabel,x0:t[i].x,x1:e(t[i])*Math.cos(t[i].angle),y0:t[i].y,y1:e(t[i])*Math.sin(t[i].angle),isTip:t[i].isTip});return r}(n),t.arcs=function(n){var t=[],e=n.map(n=>null===n.parentId?n.thisId:null).filter(n=>null!=n)[0];function r(t){for(var e=0;e<n.length;e++)if(n[e].parentId===t)var r=n[e].angle;return r}function a(t){for(var e=0;e<n.length;e++)if(n[e].thisId===t)var r=n[e].r;return r}for(let i=0;i<n.length;i++)n[i].thisId!==e&&t.push({start:h(Math.min(n[i].angle,r(n[i].parentId)),"Y"),end:h(Math.max(n[i].angle,r(n[i].parentId)),"Y"),radius:a(n[i].parentId),thisId:n[i].thisId,parentId:n[i].parentId});for(let n=0;n<t.length;n++)Math.sign(t[n].start)!==Math.sign(t[n].end)&&(t[n].end=Math.abs(t[n].end),t[n].start=-Math.abs(t[n].start));return t.filter(n=>n.start!==n.end&0!==n.radius)}(t.data),t},n.readTree=function(n){var t=(n=n.replace(/ \t/g,"")).split(/(;|\(|\)|,)/),e={parent:null,children:[]},r=e,a=0;for(const n of t)if(""!=n&&";"!=n)if("("==n){let n={parent:r,children:[]};r.children.push(n),r=n}else if(","==n){let n={parent:r=r.parent,children:[]};r.children.push(n),r=n}else if(")"==n){if(null===(r=r.parent))break}else{var i=n.split(":");1==i.length?n.startsWith(":")?(r.label="",r.branchLength=parseFloat(i[0])):(r.label=i[0],r.branchLength=null):2==i.length?(r.label=i[0],r.branchLength=parseFloat(i[1])):console.warn(n,"I don't know what to do with two colons!"),r.id=a++}return r.id=a,e},n.rectangleLayout=function(n){var t={};return t.data=s(n),t.vertical_lines=function(n){const t=s(n),e=new Map;for(const n of t){if(null==n.parentId)continue;const t=e.get(n.parentId);t?t.push(n):e.set(n.parentId,[n])}const r=[];for(const[n,t]of e.entries()){if(!t.length)continue;const e=t.map(n=>n.y0),a=Math.min(...e),i=Math.max(...e),l=t[0].x0;r.push({parentId:n,x0:l,x1:l,y0:a,y1:i,heights:i-a})}return r}(n),t},n.subTree=function(n,t){let e={};n.data.forEach(n=>{e[n.thisId]={...n}});let r={};const a=function(n){e[n]&&(r[n]=e[n],e[n].children&&e[n].children.forEach(n=>{a(n)}))};a(t);const i=[["data",Object.values(r)]],l=i[0][1].map(n=>n.thisId);var h=[];for(const t in n)"data"!==t&&h.push([t,n[t]]);var s=h.map(n=>[n[0],n[1].filter(n=>l.includes(n.thisId))]);return Object.fromEntries(i.concat(s))},n.unrooted=function(n){var t={},e=r(function n(t){null===t.parent&&(t.start=0,t.end=2,t.angle=0,t.ntips=a(t),t.x=0,t.y=0);for(var e,r,i=t.start,l=0;l<t.children.length;l++)(e=t.children[l]).ntips=a(e),r=(t.end-t.start)*e.ntips/t.ntips,e.start=i,e.end=e.start+r,e.angle=e.start+(e.end-e.start)/2,i=e.end,e.x=t.x+e.branchLength*Math.sin(e.angle*Math.PI),e.y=t.y+e.branchLength*Math.cos(e.angle*Math.PI),n(e);return t}(n));return t.data=e,t.edges=function(n,t=!1){var e,r=[];n.sort((function(n,t){return n.thisId-t.thisId}));for(const h of n)if(null!==h.parentId&&null!=(e=n[h.parentId]))if(t){var a={x1:h.x,y1:h.y,id1:h.thisId,x2:e.x,y2:h.y,id2:void 0};r.push(a);var i={x1:e.x,y1:h.y,id1:void 0,x2:e.x,y2:e.y,id2:h.parentId};r.push(i)}else{var l={x1:h.x,y1:h.y,id1:h.thisId,x2:e.x,y2:e.y,id2:h.parentId};r.push(l)}return r}(e),t},Object.defineProperty(n,"__esModule",{value:!0})}));