@genome-spy/app 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +2064 -0
- package/dist/style.css +1 -0
- package/package.json +40 -0
package/dist/index.js
ADDED
@@ -0,0 +1,2064 @@
|
|
1
|
+
var MI=Object.defineProperty,II=Object.defineProperties;var TI=Object.getOwnPropertyDescriptors;var h1=Object.getOwnPropertySymbols;var NI=Object.prototype.hasOwnProperty,LI=Object.prototype.propertyIsEnumerable;var d1=(re,Z,He)=>Z in re?MI(re,Z,{enumerable:!0,configurable:!0,writable:!0,value:He}):re[Z]=He,T=(re,Z)=>{for(var He in Z||(Z={}))NI.call(Z,He)&&d1(re,He,Z[He]);if(h1)for(var He of h1(Z))LI.call(Z,He)&&d1(re,He,Z[He]);return re},U=(re,Z)=>II(re,TI(Z));(function(re,Z){typeof exports=="object"&&typeof module!="undefined"?Z(exports):typeof define=="function"&&define.amd?define(["exports"],Z):(re=typeof globalThis!="undefined"?globalThis:re||self,Z(re.genomeSpyApp={}))})(this,function(re){"use strict";function Z(t,e,n){return t.fields=e||[],t.fname=n,t}function He(t){return t==null?null:t.fname}function Tl(t){return t==null?null:t.fields}function p1(t){return t.length===1?g1(t[0]):m1(t)}const g1=t=>function(e){return e[t]},m1=t=>{const e=t.length;return function(n){for(let r=0;r<e;++r)n=n[t[r]];return n}};function te(t){throw Error(t)}function y1(t){const e=[],n=t.length;let r=null,i=0,o="",s,a,c;t=t+"";function u(){e.push(o+t.substring(s,a)),o="",s=a+1}for(s=a=0;a<n;++a)if(c=t[a],c==="\\")o+=t.substring(s,a),o+=t.substring(++a,++a),s=a;else if(c===r)u(),r=null,i=-1;else{if(r)continue;s===i&&c==='"'||s===i&&c==="'"?(s=a+1,r=c):c==="."&&!i?a>s?u():s=a+1:c==="["?(a>s&&u(),i=s=a+1):c==="]"&&(i||te("Access path missing open bracket: "+t),i>0&&u(),i=0,s=a+1)}return i&&te("Access path missing closing bracket: "+t),r&&te("Access path missing closing quote: "+t),a>s&&(a++,u()),e}function Hi(t,e,n){const r=y1(t);return t=r.length===1?r[0]:t,Z((n&&n.get||p1)(r),[t],e||t)}Hi("id");const Qi=Z(t=>t,[],"identity");Z(()=>0,[],"zero"),Z(()=>1,[],"one"),Z(()=>!0,[],"true"),Z(()=>!1,[],"false");var Qe=Array.isArray;function Be(t){return t===Object(t)}function Ze(t){return t[t.length-1]}function Er(t){return t==null||t===""?null:+t}const Nl=t=>e=>t*Math.exp(e),Ll=t=>e=>Math.log(t*e),A1=t=>e=>Math.sign(e)*Math.log1p(Math.abs(e/t)),b1=t=>e=>Math.sign(e)*Math.expm1(Math.abs(e))*t,Vi=t=>e=>e<0?-Math.pow(-e,t):Math.pow(e,t);function Ps(t,e,n,r){const i=n(t[0]),o=n(Ze(t)),s=(o-i)*e;return[r(i-s),r(o-s)]}function x1(t,e){return Ps(t,e,Er,Qi)}function v1(t,e){var n=Math.sign(t[0]);return Ps(t,e,Ll(n),Nl(n))}function w1(t,e,n){return Ps(t,e,Vi(n),Vi(1/n))}function _i(t,e,n,r,i){const o=r(t[0]),s=r(Ze(t)),a=e!=null?r(e):(o+s)/2;return[i(a+(o-a)*n),i(a+(s-a)*n)]}function Yi(t,e,n){return _i(t,e,n,Er,Qi)}function Ol(t,e,n){const r=Math.sign(t[0]);return _i(t,e,n,Ll(r),Nl(r))}function zs(t,e,n,r){return _i(t,e,n,Vi(r),Vi(1/r))}function E1(t,e,n,r){return _i(t,e,n,A1(r),b1(r))}function Rs(t){return t!=null?Qe(t)?t:[t]:[]}function S1(t,e,n){let r=t[0],i=t[1],o;return i<r&&(o=i,i=r,r=o),o=i-r,o>=n-e?[e,n]:[r=Math.min(Math.max(r,e),n-o),r+o]}function Ce(t){return typeof t=="function"}const D1="descending";function kl(t,e,n){n=n||{},e=Rs(e)||[];const r=[],i=[],o={},s=n.comparator||C1;return Rs(t).forEach((a,c)=>{a!=null&&(r.push(e[c]===D1?-1:1),i.push(a=Ce(a)?a:Hi(a,null,n)),(Tl(a)||[]).forEach(u=>o[u]=1))}),i.length===0?null:Z(s(i,r),Object.keys(o))}const Bl=(t,e)=>(t<e||t==null)&&e!=null?-1:(t>e||e==null)&&t!=null?1:(e=e instanceof Date?+e:e,(t=t instanceof Date?+t:t)!==t&&e===e?-1:e!==e&&t===t?1:0),C1=(t,e)=>t.length===1?M1(t[0],e[0]):I1(t,e,t.length),M1=(t,e)=>function(n,r){return Bl(t(n),t(r))*e},I1=(t,e,n)=>(e.push(0),function(r,i){let o,s=0,a=-1;for(;s===0&&++a<n;)o=t[a],s=Bl(o(r),o(i));return s*e[a]});function T1(t){return Ce(t)?t:()=>t}function Us(t){for(let e,n,r=1,i=arguments.length;r<i;++r){e=arguments[r];for(n in e)t[n]=e[n]}return t}const N1=Object.prototype.hasOwnProperty;function an(t,e){return N1.call(t,e)}function js(t){return typeof t=="boolean"}function L1(t){return Object.prototype.toString.call(t)==="[object Date]"}function O1(t){return t&&Ce(t[Symbol.iterator])}function oe(t){return typeof t=="number"}function se(t){return typeof t=="string"}function k1(t,e){const n=t[0],r=Ze(t),i=+e;return i?i===1?r:n+i*(r-n):n}function Wi(t){return t&&Ze(t)-t[0]||0}function Xi(t){return Qe(t)?"["+t.map(Xi)+"]":Be(t)||se(t)?JSON.stringify(t).replace("\u2028","\\u2028").replace("\u2029","\\u2029"):t}function B1(t){return t==null||t===""?null:!t||t==="false"||t==="0"?!1:!!t}const F1=t=>oe(t)||L1(t)?t:Date.parse(t);function P1(t,e){return e=e||F1,t==null||t===""?null:e(t)}function z1(t){return t==null||t===""?null:t+""}function qi(t){const e={},n=t.length;for(let r=0;r<n;++r)e[t[r]]=!0;return e}var Fl={},Gs={},Hs=34,Sr=10,Qs=13;function Pl(t){return new Function("d","return {"+t.map(function(e,n){return JSON.stringify(e)+": d["+n+'] || ""'}).join(",")+"}")}function R1(t,e){var n=Pl(t);return function(r,i){return e(n(r),i,t)}}function zl(t){var e=Object.create(null),n=[];return t.forEach(function(r){for(var i in r)i in e||n.push(e[i]=i)}),n}function Me(t,e){var n=t+"",r=n.length;return r<e?new Array(e-r+1).join(0)+n:n}function U1(t){return t<0?"-"+Me(-t,6):t>9999?"+"+Me(t,6):Me(t,4)}function j1(t){var e=t.getUTCHours(),n=t.getUTCMinutes(),r=t.getUTCSeconds(),i=t.getUTCMilliseconds();return isNaN(t)?"Invalid Date":U1(t.getUTCFullYear())+"-"+Me(t.getUTCMonth()+1,2)+"-"+Me(t.getUTCDate(),2)+(i?"T"+Me(e,2)+":"+Me(n,2)+":"+Me(r,2)+"."+Me(i,3)+"Z":r?"T"+Me(e,2)+":"+Me(n,2)+":"+Me(r,2)+"Z":n||e?"T"+Me(e,2)+":"+Me(n,2)+"Z":"")}function Rl(t){var e=new RegExp('["'+t+`
|
2
|
+
\r]`),n=t.charCodeAt(0);function r(l,h){var d,p,g=i(l,function(m,y){if(d)return d(m,y-1);p=m,d=h?R1(m,h):Pl(m)});return g.columns=p||[],g}function i(l,h){var d=[],p=l.length,g=0,m=0,y,w=p<=0,x=!1;l.charCodeAt(p-1)===Sr&&--p,l.charCodeAt(p-1)===Qs&&--p;function E(){if(w)return Gs;if(x)return x=!1,Fl;var A,v=g,D;if(l.charCodeAt(v)===Hs){for(;g++<p&&l.charCodeAt(g)!==Hs||l.charCodeAt(++g)===Hs;);return(A=g)>=p?w=!0:(D=l.charCodeAt(g++))===Sr?x=!0:D===Qs&&(x=!0,l.charCodeAt(g)===Sr&&++g),l.slice(v+1,A-1).replace(/""/g,'"')}for(;g<p;){if((D=l.charCodeAt(A=g++))===Sr)x=!0;else if(D===Qs)x=!0,l.charCodeAt(g)===Sr&&++g;else if(D!==n)continue;return l.slice(v,A)}return w=!0,l.slice(v,p)}for(;(y=E())!==Gs;){for(var b=[];y!==Fl&&y!==Gs;)b.push(y),y=E();h&&(b=h(b,m++))==null||d.push(b)}return d}function o(l,h){return l.map(function(d){return h.map(function(p){return f(d[p])}).join(t)})}function s(l,h){return h==null&&(h=zl(l)),[h.map(f).join(t)].concat(o(l,h)).join(`
|
3
|
+
`)}function a(l,h){return h==null&&(h=zl(l)),o(l,h).join(`
|
4
|
+
`)}function c(l){return l.map(u).join(`
|
5
|
+
`)}function u(l){return l.map(f).join(t)}function f(l){return l==null?"":l instanceof Date?j1(l):e.test(l+="")?'"'+l.replace(/"/g,'""')+'"':l}return{parse:r,parseRows:i,format:s,formatBody:a,formatRows:c,formatRow:u,formatValue:f}}var G1=Rl(" "),H1=G1.parseRows;function Q1(t){return t}function V1(t){if(t==null)return Q1;var e,n,r=t.scale[0],i=t.scale[1],o=t.translate[0],s=t.translate[1];return function(a,c){c||(e=n=0);var u=2,f=a.length,l=new Array(f);for(l[0]=(e+=a[0])*r+o,l[1]=(n+=a[1])*i+s;u<f;)l[u]=a[u],++u;return l}}function _1(t,e){for(var n,r=t.length,i=r-e;i<--r;)n=t[i],t[i++]=t[r],t[r]=n}function Y1(t,e){return typeof e=="string"&&(e=t.objects[e]),e.type==="GeometryCollection"?{type:"FeatureCollection",features:e.geometries.map(function(n){return Ul(t,n)})}:Ul(t,e)}function Ul(t,e){var n=e.id,r=e.bbox,i=e.properties==null?{}:e.properties,o=jl(t,e);return n==null&&r==null?{type:"Feature",properties:i,geometry:o}:r==null?{type:"Feature",id:n,properties:i,geometry:o}:{type:"Feature",id:n,bbox:r,properties:i,geometry:o}}function jl(t,e){var n=V1(t.transform),r=t.arcs;function i(f,l){l.length&&l.pop();for(var h=r[f<0?~f:f],d=0,p=h.length;d<p;++d)l.push(n(h[d],d));f<0&&_1(l,p)}function o(f){return n(f)}function s(f){for(var l=[],h=0,d=f.length;h<d;++h)i(f[h],l);return l.length<2&&l.push(l[0]),l}function a(f){for(var l=s(f);l.length<4;)l.push(l[0]);return l}function c(f){return f.map(a)}function u(f){var l=f.type,h;switch(l){case"GeometryCollection":return{type:l,geometries:f.geometries.map(u)};case"Point":h=o(f.coordinates);break;case"MultiPoint":h=f.coordinates.map(o);break;case"LineString":h=s(f.arcs);break;case"MultiLineString":h=f.arcs.map(s);break;case"Polygon":h=c(f.arcs);break;case"MultiPolygon":h=f.arcs.map(c);break;default:return null}return{type:l,coordinates:h}}return u(e)}function W1(t,e){var n={},r={},i={},o=[],s=-1;e.forEach(function(u,f){var l=t.arcs[u<0?~u:u],h;l.length<3&&!l[1][0]&&!l[1][1]&&(h=e[++s],e[s]=u,e[f]=h)}),e.forEach(function(u){var f=a(u),l=f[0],h=f[1],d,p;if(d=i[l])if(delete i[d.end],d.push(u),d.end=h,p=r[h]){delete r[p.start];var g=p===d?d:d.concat(p);r[g.start=d.start]=i[g.end=p.end]=g}else r[d.start]=i[d.end]=d;else if(d=r[h])if(delete r[d.start],d.unshift(u),d.start=l,p=i[l]){delete i[p.end];var m=p===d?d:p.concat(d);r[m.start=p.start]=i[m.end=d.end]=m}else r[d.start]=i[d.end]=d;else d=[u],r[d.start=l]=i[d.end=h]=d});function a(u){var f=t.arcs[u<0?~u:u],l=f[0],h;return t.transform?(h=[0,0],f.forEach(function(d){h[0]+=d[0],h[1]+=d[1]})):h=f[f.length-1],u<0?[h,l]:[l,h]}function c(u,f){for(var l in u){var h=u[l];delete f[h.start],delete h.start,delete h.end,h.forEach(function(d){n[d<0?~d:d]=1}),o.push(h)}}return c(i,r),c(r,i),e.forEach(function(u){n[u<0?~u:u]||o.push([u])}),o}function X1(t){return jl(t,q1.apply(this,arguments))}function q1(t,e,n){var r,i,o;if(arguments.length>1)r=Z1(t,e,n);else for(i=0,r=new Array(o=t.arcs.length);i<o;++i)r[i]=i;return{type:"MultiLineString",arcs:W1(t,r)}}function Z1(t,e,n){var r=[],i=[],o;function s(l){var h=l<0?~l:l;(i[h]||(i[h]=[])).push({i:l,g:o})}function a(l){l.forEach(s)}function c(l){l.forEach(a)}function u(l){l.forEach(c)}function f(l){switch(o=l,l.type){case"GeometryCollection":l.geometries.forEach(f);break;case"LineString":a(l.arcs);break;case"MultiLineString":case"Polygon":c(l.arcs);break;case"MultiPolygon":u(l.arcs);break}}return f(e),i.forEach(n==null?function(l){r.push(l[0].i)}:function(l){n(l[0].g,l[l.length-1].g)&&r.push(l[0].i)}),r}function Fn(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}function Vs(t){let e=t,n=t;t.length===1&&(e=(s,a)=>t(s)-a,n=K1(t));function r(s,a,c,u){for(c==null&&(c=0),u==null&&(u=s.length);c<u;){const f=c+u>>>1;n(s[f],a)<0?c=f+1:u=f}return c}function i(s,a,c,u){for(c==null&&(c=0),u==null&&(u=s.length);c<u;){const f=c+u>>>1;n(s[f],a)>0?u=f:c=f+1}return c}function o(s,a,c,u){c==null&&(c=0),u==null&&(u=s.length);const f=r(s,a,c,u-1);return f>c&&e(s[f-1],a)>-e(s[f],a)?f-1:f}return{left:r,center:o,right:i}}function K1(t){return(e,n)=>Fn(t(e),n)}function Gl(t){return t===null?NaN:+t}const _s=Vs(Fn).right;Vs(Gl).center;var Dr=_s;class J1 extends Map{constructor(e,n=ty){super();if(Object.defineProperties(this,{_intern:{value:new Map},_key:{value:n}}),e!=null)for(const[r,i]of e)this.set(r,i)}get(e){return super.get(Hl(this,e))}has(e){return super.has(Hl(this,e))}set(e,n){return super.set($1(this,e),n)}delete(e){return super.delete(ey(this,e))}}function Hl({_intern:t,_key:e},n){const r=e(n);return t.has(r)?t.get(r):n}function $1({_intern:t,_key:e},n){const r=e(n);return t.has(r)?t.get(r):(t.set(r,n),n)}function ey({_intern:t,_key:e},n){const r=e(n);return t.has(r)&&(n=t.get(n),t.delete(r)),n}function ty(t){return t!==null&&typeof t=="object"?t.valueOf():t}function Ql(t){return t}function ny(t,...e){return ry(t,Ql,Ql,e)}function ry(t,e,n,r){return function i(o,s){if(s>=r.length)return n(o);const a=new J1,c=r[s++];let u=-1;for(const f of o){const l=c(f,++u,o),h=a.get(l);h?h.push(f):a.set(l,[f])}for(const[f,l]of a)a.set(f,i(l,s));return e(a)}(t,0)}function iy(t,e){return Array.from(e,n=>t[n])}function oy(t,...e){if(typeof t[Symbol.iterator]!="function")throw new TypeError("values is not iterable");t=Array.from(t);let[n=Fn]=e;if(n.length===1||e.length>1){const r=Uint32Array.from(t,(i,o)=>o);return e.length>1?(e=e.map(i=>t.map(i)),r.sort((i,o)=>{for(const s of e){const a=Fn(s[i],s[o]);if(a)return a}})):(n=t.map(n),r.sort((i,o)=>Fn(n[i],n[o]))),iy(t,r)}return t.sort(n)}var Ys=Math.sqrt(50),Ws=Math.sqrt(10),Xs=Math.sqrt(2);function qs(t,e,n){var r,i=-1,o,s,a;if(e=+e,t=+t,n=+n,t===e&&n>0)return[t];if((r=e<t)&&(o=t,t=e,e=o),(a=Vl(t,e,n))===0||!isFinite(a))return[];if(a>0){let c=Math.round(t/a),u=Math.round(e/a);for(c*a<t&&++c,u*a>e&&--u,s=new Array(o=u-c+1);++i<o;)s[i]=(c+i)*a}else{a=-a;let c=Math.round(t*a),u=Math.round(e*a);for(c/a<t&&++c,u/a>e&&--u,s=new Array(o=u-c+1);++i<o;)s[i]=(c+i)/a}return r&&s.reverse(),s}function Vl(t,e,n){var r=(e-t)/Math.max(0,n),i=Math.floor(Math.log(r)/Math.LN10),o=r/Math.pow(10,i);return i>=0?(o>=Ys?10:o>=Ws?5:o>=Xs?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(o>=Ys?10:o>=Ws?5:o>=Xs?2:1)}function Zi(t,e,n){var r=Math.abs(e-t)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),o=r/i;return o>=Ys?i*=10:o>=Ws?i*=5:o>=Xs&&(i*=2),e<t?-i:i}function _l(t,e,n=Gl){if(!!(r=t.length)){if((e=+e)<=0||r<2)return+n(t[0],0,t);if(e>=1)return+n(t[r-1],r-1,t);var r,i=(r-1)*e,o=Math.floor(i),s=+n(t[o],o,t),a=+n(t[o+1],o+1,t);return s+(a-s)*(i-o)}}function Ki(t,e,n){t=+t,e=+e,n=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+n;for(var r=-1,i=Math.max(0,Math.ceil((e-t)/n))|0,o=new Array(i);++r<i;)o[r]=t+r*n;return o}function sy(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)}function Ji(t,e){if((n=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var n,r=t.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+t.slice(n+1)]}function Pn(t){return t=Ji(Math.abs(t)),t?t[1]:NaN}function ay(t,e){return function(n,r){for(var i=n.length,o=[],s=0,a=t[0],c=0;i>0&&a>0&&(c+a+1>r&&(a=Math.max(1,r-c)),o.push(n.substring(i-=a,i+a)),!((c+=a+1)>r));)a=t[s=(s+1)%t.length];return o.reverse().join(e)}}function cy(t){return function(e){return e.replace(/[0-9]/g,function(n){return t[+n]})}}var uy=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function zn(t){if(!(e=uy.exec(t)))throw new Error("invalid format: "+t);var e;return new Zs({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}zn.prototype=Zs.prototype;function Zs(t){this.fill=t.fill===void 0?" ":t.fill+"",this.align=t.align===void 0?">":t.align+"",this.sign=t.sign===void 0?"-":t.sign+"",this.symbol=t.symbol===void 0?"":t.symbol+"",this.zero=!!t.zero,this.width=t.width===void 0?void 0:+t.width,this.comma=!!t.comma,this.precision=t.precision===void 0?void 0:+t.precision,this.trim=!!t.trim,this.type=t.type===void 0?"":t.type+""}Zs.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function ly(t){e:for(var e=t.length,n=1,r=-1,i;n<e;++n)switch(t[n]){case".":r=i=n;break;case"0":r===0&&(r=n),i=n;break;default:if(!+t[n])break e;r>0&&(r=0);break}return r>0?t.slice(0,r)+t.slice(i+1):t}var Yl;function fy(t,e){var n=Ji(t,e);if(!n)return t+"";var r=n[0],i=n[1],o=i-(Yl=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,s=r.length;return o===s?r:o>s?r+new Array(o-s+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+Ji(t,Math.max(0,e+o-1))[0]}function Wl(t,e){var n=Ji(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}var Xl={"%":(t,e)=>(t*100).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:sy,e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>Wl(t*100,e),r:Wl,s:fy,X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function ql(t){return t}var Zl=Array.prototype.map,Kl=["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];function hy(t){var e=t.grouping===void 0||t.thousands===void 0?ql:ay(Zl.call(t.grouping,Number),t.thousands+""),n=t.currency===void 0?"":t.currency[0]+"",r=t.currency===void 0?"":t.currency[1]+"",i=t.decimal===void 0?".":t.decimal+"",o=t.numerals===void 0?ql:cy(Zl.call(t.numerals,String)),s=t.percent===void 0?"%":t.percent+"",a=t.minus===void 0?"\u2212":t.minus+"",c=t.nan===void 0?"NaN":t.nan+"";function u(l){l=zn(l);var h=l.fill,d=l.align,p=l.sign,g=l.symbol,m=l.zero,y=l.width,w=l.comma,x=l.precision,E=l.trim,b=l.type;b==="n"?(w=!0,b="g"):Xl[b]||(x===void 0&&(x=12),E=!0,b="g"),(m||h==="0"&&d==="=")&&(m=!0,h="0",d="=");var A=g==="$"?n:g==="#"&&/[boxX]/.test(b)?"0"+b.toLowerCase():"",v=g==="$"?r:/[%p]/.test(b)?s:"",D=Xl[b],L=/[defgprs%]/.test(b);x=x===void 0?6:/[gprs]/.test(b)?Math.max(1,Math.min(21,x)):Math.max(0,Math.min(20,x));function B(C){var k=A,P=v,H,qe,Re;if(b==="c")P=D(C)+P,C="";else{C=+C;var Ue=C<0||1/C<0;if(C=isNaN(C)?c:D(Math.abs(C),x),E&&(C=ly(C)),Ue&&+C==0&&p!=="+"&&(Ue=!1),k=(Ue?p==="("?p:a:p==="-"||p==="("?"":p)+k,P=(b==="s"?Kl[8+Yl/3]:"")+P+(Ue&&p==="("?")":""),L){for(H=-1,qe=C.length;++H<qe;)if(Re=C.charCodeAt(H),48>Re||Re>57){P=(Re===46?i+C.slice(H+1):C.slice(H))+P,C=C.slice(0,H);break}}}w&&!m&&(C=e(C,1/0));var z=k.length+C.length+P.length,ne=z<y?new Array(y-z+1).join(h):"";switch(w&&m&&(C=e(ne+C,ne.length?y-P.length:1/0),ne=""),d){case"<":C=k+C+P+ne;break;case"=":C=k+ne+C+P;break;case"^":C=ne.slice(0,z=ne.length>>1)+k+C+P+ne.slice(z);break;default:C=ne+k+C+P;break}return o(C)}return B.toString=function(){return l+""},B}function f(l,h){var d=u((l=zn(l),l.type="f",l)),p=Math.max(-8,Math.min(8,Math.floor(Pn(h)/3)))*3,g=Math.pow(10,-p),m=Kl[8+p/3];return function(y){return d(g*y)+m}}return{format:u,formatPrefix:f}}var $i,Rn,Ks;dy({thousands:",",grouping:[3],currency:["$",""]});function dy(t){return $i=hy(t),Rn=$i.format,Ks=$i.formatPrefix,$i}function Jl(t){return Math.max(0,-Pn(Math.abs(t)))}function $l(t,e){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(Pn(e)/3)))*3-Pn(Math.abs(t)))}function ef(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,Pn(e)-Pn(t))+1}var Js=new Date,$s=new Date;function ue(t,e,n,r){function i(o){return t(o=arguments.length===0?new Date:new Date(+o)),o}return i.floor=function(o){return t(o=new Date(+o)),o},i.ceil=function(o){return t(o=new Date(o-1)),e(o,1),t(o),o},i.round=function(o){var s=i(o),a=i.ceil(o);return o-s<a-o?s:a},i.offset=function(o,s){return e(o=new Date(+o),s==null?1:Math.floor(s)),o},i.range=function(o,s,a){var c=[],u;if(o=i.ceil(o),a=a==null?1:Math.floor(a),!(o<s)||!(a>0))return c;do c.push(u=new Date(+o)),e(o,a),t(o);while(u<o&&o<s);return c},i.filter=function(o){return ue(function(s){if(s>=s)for(;t(s),!o(s);)s.setTime(s-1)},function(s,a){if(s>=s)if(a<0)for(;++a<=0;)for(;e(s,-1),!o(s););else for(;--a>=0;)for(;e(s,1),!o(s););})},n&&(i.count=function(o,s){return Js.setTime(+o),$s.setTime(+s),t(Js),t($s),Math.floor(n(Js,$s))},i.every=function(o){return o=Math.floor(o),!isFinite(o)||!(o>0)?null:o>1?i.filter(r?function(s){return r(s)%o==0}:function(s){return i.count(0,s)%o==0}):i}),i}var ea=ue(function(){},function(t,e){t.setTime(+t+e)},function(t,e){return e-t});ea.every=function(t){return t=Math.floor(t),!isFinite(t)||!(t>0)?null:t>1?ue(function(e){e.setTime(Math.floor(e/t)*t)},function(e,n){e.setTime(+e+n*t)},function(e,n){return(n-e)/t}):ea};var ta=ea;const xt=1e3,Ve=xt*60,vt=Ve*60,cn=vt*24,na=cn*7,tf=cn*30,ra=cn*365;var py=ue(function(t){t.setTime(t-t.getMilliseconds())},function(t,e){t.setTime(+t+e*xt)},function(t,e){return(e-t)/xt},function(t){return t.getUTCSeconds()}),Ft=py,gy=ue(function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*xt)},function(t,e){t.setTime(+t+e*Ve)},function(t,e){return(e-t)/Ve},function(t){return t.getMinutes()}),ia=gy,my=ue(function(t){t.setTime(t-t.getMilliseconds()-t.getSeconds()*xt-t.getMinutes()*Ve)},function(t,e){t.setTime(+t+e*vt)},function(t,e){return(e-t)/vt},function(t){return t.getHours()}),oa=my,yy=ue(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*Ve)/cn,t=>t.getDate()-1),un=yy;function ln(t){return ue(function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},function(e,n){e.setDate(e.getDate()+n*7)},function(e,n){return(n-e-(n.getTimezoneOffset()-e.getTimezoneOffset())*Ve)/na})}var eo=ln(0),sa=ln(1);ln(2),ln(3);var Cr=ln(4);ln(5),ln(6);var Ay=ue(function(t){t.setDate(1),t.setHours(0,0,0,0)},function(t,e){t.setMonth(t.getMonth()+e)},function(t,e){return e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12},function(t){return t.getMonth()}),to=Ay,nf=ue(function(t){t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,e){t.setFullYear(t.getFullYear()+e)},function(t,e){return e.getFullYear()-t.getFullYear()},function(t){return t.getFullYear()});nf.every=function(t){return!isFinite(t=Math.floor(t))||!(t>0)?null:ue(function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},function(e,n){e.setFullYear(e.getFullYear()+n*t)})};var Pt=nf,by=ue(function(t){t.setUTCSeconds(0,0)},function(t,e){t.setTime(+t+e*Ve)},function(t,e){return(e-t)/Ve},function(t){return t.getUTCMinutes()}),aa=by,xy=ue(function(t){t.setUTCMinutes(0,0,0)},function(t,e){t.setTime(+t+e*vt)},function(t,e){return(e-t)/vt},function(t){return t.getUTCHours()}),ca=xy,vy=ue(function(t){t.setUTCHours(0,0,0,0)},function(t,e){t.setUTCDate(t.getUTCDate()+e)},function(t,e){return(e-t)/cn},function(t){return t.getUTCDate()-1}),fn=vy;function hn(t){return ue(function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},function(e,n){e.setUTCDate(e.getUTCDate()+n*7)},function(e,n){return(n-e)/na})}var no=hn(0),ua=hn(1);hn(2),hn(3);var Mr=hn(4);hn(5),hn(6);var wy=ue(function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)},function(t,e){t.setUTCMonth(t.getUTCMonth()+e)},function(t,e){return e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12},function(t){return t.getUTCMonth()}),ro=wy,rf=ue(function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)},function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()},function(t){return t.getUTCFullYear()});rf.every=function(t){return!isFinite(t=Math.floor(t))||!(t>0)?null:ue(function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},function(e,n){e.setUTCFullYear(e.getUTCFullYear()+n*t)})};var zt=rf;function of(t,e,n,r,i,o){const s=[[Ft,1,xt],[Ft,5,5*xt],[Ft,15,15*xt],[Ft,30,30*xt],[o,1,Ve],[o,5,5*Ve],[o,15,15*Ve],[o,30,30*Ve],[i,1,vt],[i,3,3*vt],[i,6,6*vt],[i,12,12*vt],[r,1,cn],[r,2,2*cn],[n,1,na],[e,1,tf],[e,3,3*tf],[t,1,ra]];function a(u,f,l){const h=f<u;h&&([u,f]=[f,u]);const d=l&&typeof l.range=="function"?l:c(u,f,l),p=d?d.range(u,+f+1):[];return h?p.reverse():p}function c(u,f,l){const h=Math.abs(f-u)/l,d=Vs(([,,m])=>m).right(s,h);if(d===s.length)return t.every(Zi(u/ra,f/ra,l));if(d===0)return ta.every(Math.max(Zi(u,f,l),1));const[p,g]=s[h/s[d-1][2]<s[d][2]/h?d-1:d];return p.every(g)}return[a,c]}const[Ey,Sy]=of(zt,ro,no,fn,ca,aa),[Dy,Cy]=of(Pt,to,eo,un,oa,ia),Ir="year",Tr="quarter",Nr="month",Lr="week",Or="date",io="day",la="dayofyear",kr="hours",Br="minutes",Fr="seconds",oo="milliseconds";[Ir,Tr,Nr,Lr,Or,io,la,kr,Br,Fr,oo].reduce((t,e,n)=>(t[e]=1+n,t),{});const My={[Ir]:Pt,[Tr]:to.every(3),[Nr]:to,[Lr]:eo,[Or]:un,[io]:un,[la]:un,[kr]:oa,[Br]:ia,[Fr]:Ft,[oo]:ta},Iy={[Ir]:zt,[Tr]:ro.every(3),[Nr]:ro,[Lr]:no,[Or]:fn,[io]:fn,[la]:fn,[kr]:ca,[Br]:aa,[Fr]:Ft,[oo]:ta};function Ty(t){return My[t]}function Ny(t){return Iy[t]}function fa(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function ha(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Pr(t,e,n){return{y:t,m:e,d:n,H:0,M:0,S:0,L:0}}function sf(t){var e=t.dateTime,n=t.date,r=t.time,i=t.periods,o=t.days,s=t.shortDays,a=t.months,c=t.shortMonths,u=zr(i),f=Rr(i),l=zr(o),h=Rr(o),d=zr(s),p=Rr(s),g=zr(a),m=Rr(a),y=zr(c),w=Rr(c),x={a:Ue,A:z,b:ne,B:ji,c:null,d:hf,e:hf,f:$y,g:uA,G:fA,H:Zy,I:Ky,j:Jy,L:df,m:eA,M:tA,p:Gi,q:Fs,Q:bf,s:xf,S:nA,u:rA,U:iA,V:oA,w:sA,W:aA,x:null,X:null,y:cA,Y:lA,Z:hA,"%":Af},E={a:Il,A:wI,b:EI,B:SI,c:null,d:gf,e:gf,f:mA,g:CA,G:IA,H:dA,I:pA,j:gA,L:mf,m:yA,M:AA,p:DI,q:CI,Q:bf,s:xf,S:bA,u:xA,U:vA,V:wA,w:EA,W:SA,x:null,X:null,y:DA,Y:MA,Z:TA,"%":Af},b={a:B,A:C,b:k,B:P,c:H,d:lf,e:lf,f:Yy,g:uf,G:cf,H:ff,I:ff,j:Hy,L:_y,m:Gy,M:Qy,p:L,q:jy,Q:Xy,s:qy,S:Vy,u:Fy,U:Py,V:zy,w:By,W:Ry,x:qe,X:Re,y:uf,Y:cf,Z:Uy,"%":Wy};x.x=A(n,x),x.X=A(r,x),x.c=A(e,x),E.x=A(n,E),E.X=A(r,E),E.c=A(e,E);function A(O,R){return function(Q){var M=[],ke=-1,q=0,je=O.length,Ge,Bn,f1;for(Q instanceof Date||(Q=new Date(+Q));++ke<je;)O.charCodeAt(ke)===37&&(M.push(O.slice(q,ke)),(Bn=af[Ge=O.charAt(++ke)])!=null?Ge=O.charAt(++ke):Bn=Ge==="e"?" ":"0",(f1=R[Ge])&&(Ge=f1(Q,Bn)),M.push(Ge),q=ke+1);return M.push(O.slice(q,ke)),M.join("")}}function v(O,R){return function(Q){var M=Pr(1900,void 0,1),ke=D(M,O,Q+="",0),q,je;if(ke!=Q.length)return null;if("Q"in M)return new Date(M.Q);if("s"in M)return new Date(M.s*1e3+("L"in M?M.L:0));if(R&&!("Z"in M)&&(M.Z=0),"p"in M&&(M.H=M.H%12+M.p*12),M.m===void 0&&(M.m="q"in M?M.q:0),"V"in M){if(M.V<1||M.V>53)return null;"w"in M||(M.w=1),"Z"in M?(q=ha(Pr(M.y,0,1)),je=q.getUTCDay(),q=je>4||je===0?ua.ceil(q):ua(q),q=fn.offset(q,(M.V-1)*7),M.y=q.getUTCFullYear(),M.m=q.getUTCMonth(),M.d=q.getUTCDate()+(M.w+6)%7):(q=fa(Pr(M.y,0,1)),je=q.getDay(),q=je>4||je===0?sa.ceil(q):sa(q),q=un.offset(q,(M.V-1)*7),M.y=q.getFullYear(),M.m=q.getMonth(),M.d=q.getDate()+(M.w+6)%7)}else("W"in M||"U"in M)&&("w"in M||(M.w="u"in M?M.u%7:"W"in M?1:0),je="Z"in M?ha(Pr(M.y,0,1)).getUTCDay():fa(Pr(M.y,0,1)).getDay(),M.m=0,M.d="W"in M?(M.w+6)%7+M.W*7-(je+5)%7:M.w+M.U*7-(je+6)%7);return"Z"in M?(M.H+=M.Z/100|0,M.M+=M.Z%100,ha(M)):fa(M)}}function D(O,R,Q,M){for(var ke=0,q=R.length,je=Q.length,Ge,Bn;ke<q;){if(M>=je)return-1;if(Ge=R.charCodeAt(ke++),Ge===37){if(Ge=R.charAt(ke++),Bn=b[Ge in af?R.charAt(ke++):Ge],!Bn||(M=Bn(O,Q,M))<0)return-1}else if(Ge!=Q.charCodeAt(M++))return-1}return M}function L(O,R,Q){var M=u.exec(R.slice(Q));return M?(O.p=f.get(M[0].toLowerCase()),Q+M[0].length):-1}function B(O,R,Q){var M=d.exec(R.slice(Q));return M?(O.w=p.get(M[0].toLowerCase()),Q+M[0].length):-1}function C(O,R,Q){var M=l.exec(R.slice(Q));return M?(O.w=h.get(M[0].toLowerCase()),Q+M[0].length):-1}function k(O,R,Q){var M=y.exec(R.slice(Q));return M?(O.m=w.get(M[0].toLowerCase()),Q+M[0].length):-1}function P(O,R,Q){var M=g.exec(R.slice(Q));return M?(O.m=m.get(M[0].toLowerCase()),Q+M[0].length):-1}function H(O,R,Q){return D(O,e,R,Q)}function qe(O,R,Q){return D(O,n,R,Q)}function Re(O,R,Q){return D(O,r,R,Q)}function Ue(O){return s[O.getDay()]}function z(O){return o[O.getDay()]}function ne(O){return c[O.getMonth()]}function ji(O){return a[O.getMonth()]}function Gi(O){return i[+(O.getHours()>=12)]}function Fs(O){return 1+~~(O.getMonth()/3)}function Il(O){return s[O.getUTCDay()]}function wI(O){return o[O.getUTCDay()]}function EI(O){return c[O.getUTCMonth()]}function SI(O){return a[O.getUTCMonth()]}function DI(O){return i[+(O.getUTCHours()>=12)]}function CI(O){return 1+~~(O.getUTCMonth()/3)}return{format:function(O){var R=A(O+="",x);return R.toString=function(){return O},R},parse:function(O){var R=v(O+="",!1);return R.toString=function(){return O},R},utcFormat:function(O){var R=A(O+="",E);return R.toString=function(){return O},R},utcParse:function(O){var R=v(O+="",!0);return R.toString=function(){return O},R}}}var af={"-":"",_:" ","0":"0"},le=/^\s*\d+/,Ly=/^%/,Oy=/[\\^$*+?|[\]().{}]/g;function j(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",o=i.length;return r+(o<n?new Array(n-o+1).join(e)+i:i)}function ky(t){return t.replace(Oy,"\\$&")}function zr(t){return new RegExp("^(?:"+t.map(ky).join("|")+")","i")}function Rr(t){return new Map(t.map((e,n)=>[e.toLowerCase(),n]))}function By(t,e,n){var r=le.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function Fy(t,e,n){var r=le.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function Py(t,e,n){var r=le.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function zy(t,e,n){var r=le.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function Ry(t,e,n){var r=le.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function cf(t,e,n){var r=le.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function uf(t,e,n){var r=le.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function Uy(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function jy(t,e,n){var r=le.exec(e.slice(n,n+1));return r?(t.q=r[0]*3-3,n+r[0].length):-1}function Gy(t,e,n){var r=le.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function lf(t,e,n){var r=le.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function Hy(t,e,n){var r=le.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function ff(t,e,n){var r=le.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function Qy(t,e,n){var r=le.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function Vy(t,e,n){var r=le.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function _y(t,e,n){var r=le.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function Yy(t,e,n){var r=le.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function Wy(t,e,n){var r=Ly.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function Xy(t,e,n){var r=le.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function qy(t,e,n){var r=le.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function hf(t,e){return j(t.getDate(),e,2)}function Zy(t,e){return j(t.getHours(),e,2)}function Ky(t,e){return j(t.getHours()%12||12,e,2)}function Jy(t,e){return j(1+un.count(Pt(t),t),e,3)}function df(t,e){return j(t.getMilliseconds(),e,3)}function $y(t,e){return df(t,e)+"000"}function eA(t,e){return j(t.getMonth()+1,e,2)}function tA(t,e){return j(t.getMinutes(),e,2)}function nA(t,e){return j(t.getSeconds(),e,2)}function rA(t){var e=t.getDay();return e===0?7:e}function iA(t,e){return j(eo.count(Pt(t)-1,t),e,2)}function pf(t){var e=t.getDay();return e>=4||e===0?Cr(t):Cr.ceil(t)}function oA(t,e){return t=pf(t),j(Cr.count(Pt(t),t)+(Pt(t).getDay()===4),e,2)}function sA(t){return t.getDay()}function aA(t,e){return j(sa.count(Pt(t)-1,t),e,2)}function cA(t,e){return j(t.getFullYear()%100,e,2)}function uA(t,e){return t=pf(t),j(t.getFullYear()%100,e,2)}function lA(t,e){return j(t.getFullYear()%1e4,e,4)}function fA(t,e){var n=t.getDay();return t=n>=4||n===0?Cr(t):Cr.ceil(t),j(t.getFullYear()%1e4,e,4)}function hA(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+j(e/60|0,"0",2)+j(e%60,"0",2)}function gf(t,e){return j(t.getUTCDate(),e,2)}function dA(t,e){return j(t.getUTCHours(),e,2)}function pA(t,e){return j(t.getUTCHours()%12||12,e,2)}function gA(t,e){return j(1+fn.count(zt(t),t),e,3)}function mf(t,e){return j(t.getUTCMilliseconds(),e,3)}function mA(t,e){return mf(t,e)+"000"}function yA(t,e){return j(t.getUTCMonth()+1,e,2)}function AA(t,e){return j(t.getUTCMinutes(),e,2)}function bA(t,e){return j(t.getUTCSeconds(),e,2)}function xA(t){var e=t.getUTCDay();return e===0?7:e}function vA(t,e){return j(no.count(zt(t)-1,t),e,2)}function yf(t){var e=t.getUTCDay();return e>=4||e===0?Mr(t):Mr.ceil(t)}function wA(t,e){return t=yf(t),j(Mr.count(zt(t),t)+(zt(t).getUTCDay()===4),e,2)}function EA(t){return t.getUTCDay()}function SA(t,e){return j(ua.count(zt(t)-1,t),e,2)}function DA(t,e){return j(t.getUTCFullYear()%100,e,2)}function CA(t,e){return t=yf(t),j(t.getUTCFullYear()%100,e,2)}function MA(t,e){return j(t.getUTCFullYear()%1e4,e,4)}function IA(t,e){var n=t.getUTCDay();return t=n>=4||n===0?Mr(t):Mr.ceil(t),j(t.getUTCFullYear()%1e4,e,4)}function TA(){return"+0000"}function Af(){return"%"}function bf(t){return+t}function xf(t){return Math.floor(+t/1e3)}var Un,da,vf,pa,wf;NA({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function NA(t){return Un=sf(t),da=Un.format,vf=Un.parse,pa=Un.utcFormat,wf=Un.utcParse,Un}function Ur(t){const e={};return n=>e[n]||(e[n]=t(n))}function LA(t,e){return n=>{const r=t(n),i=r.indexOf(e);if(i<0)return r;let o=OA(r,i);const s=o<r.length?r.slice(o):"";for(;--o>i;)if(r[o]!=="0"){++o;break}return r.slice(0,o)+s}}function OA(t,e){let n=t.lastIndexOf("e"),r;if(n>0)return n;for(n=t.length;--n>e;)if(r=t.charCodeAt(n),r>=48&&r<=57)return n+1}function kA(t){const e=Ur(t.format),n=t.formatPrefix;return{format:e,formatPrefix:n,formatFloat(r){const i=zn(r||",");if(i.precision==null){switch(i.precision=12,i.type){case"%":i.precision-=2;break;case"e":i.precision-=1;break}return LA(e(i),e(".1f")(1)[1])}else return e(i)},formatSpan(r,i,o,s){s=zn(s==null?",f":s);const a=Zi(r,i,o),c=Math.max(Math.abs(r),Math.abs(i));let u;if(s.precision==null)switch(s.type){case"s":return isNaN(u=$l(a,c))||(s.precision=u),n(s,c);case"":case"e":case"g":case"p":case"r":{isNaN(u=ef(a,c))||(s.precision=u-(s.type==="e"));break}case"f":case"%":{isNaN(u=Jl(a))||(s.precision=u-(s.type==="%")*2);break}}return e(s)}}}BA();function BA(){return kA({format:Rn,formatPrefix:Ks})}function Ef(t,e,n){n=n||{},Be(n)||te("Invalid time multi-format specifier: ".concat(n));const r=e(Fr),i=e(Br),o=e(kr),s=e(Or),a=e(Lr),c=e(Nr),u=e(Tr),f=e(Ir),l=t(n[oo]||".%L"),h=t(n[Fr]||":%S"),d=t(n[Br]||"%I:%M"),p=t(n[kr]||"%I %p"),g=t(n[Or]||n[io]||"%a %d"),m=t(n[Lr]||"%b %d"),y=t(n[Nr]||"%B"),w=t(n[Tr]||"%B"),x=t(n[Ir]||"%Y");return E=>(r(E)<E?l:i(E)<E?h:o(E)<E?d:s(E)<E?p:c(E)<E?a(E)<E?g:m:f(E)<E?u(E)<E?y:w:x)(E)}function Sf(t){const e=Ur(t.format),n=Ur(t.utcFormat);return{timeFormat:r=>se(r)?e(r):Ef(e,Ty,r),utcFormat:r=>se(r)?n(r):Ef(n,Ny,r),timeParse:Ur(t.parse),utcParse:Ur(t.utcParse)}}let ga;FA();function FA(){return ga=Sf({format:da,parse:vf,utcFormat:pa,utcParse:wf})}function PA(t){return Sf(sf(t))}function zA(t){return arguments.length?ga=PA(t):ga}const RA=/^(data:|([A-Za-z]+:)?\/\/)/,UA=/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp|file|data):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i,jA=/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205f\u3000]/g,Df="file://";function GA(t,e){return n=>({options:n||{},sanitize:QA,load:HA,fileAccess:!!e,file:VA(e),http:YA(t)})}async function HA(t,e){const n=await this.sanitize(t,e),r=n.href;return n.localFile?this.file(r):this.http(r,e)}async function QA(t,e){e=Us({},this.options,e);const n=this.fileAccess,r={href:null};let i,o,s;const a=UA.test(t.replace(jA,""));(t==null||typeof t!="string"||!a)&&te("Sanitize failure, invalid URI: "+Xi(t));const c=RA.test(t);return(s=e.baseURL)&&!c&&(!t.startsWith("/")&&!s.endsWith("/")&&(t="/"+t),t=s+t),o=(i=t.startsWith(Df))||e.mode==="file"||e.mode!=="http"&&!c&&n,i?t=t.slice(Df.length):t.startsWith("//")&&(e.defaultProtocol==="file"?(t=t.slice(2),o=!0):t=(e.defaultProtocol||"http")+":"+t),Object.defineProperty(r,"localFile",{value:!!o}),r.href=t,e.target&&(r.target=e.target+""),e.rel&&(r.rel=e.rel+""),e.context==="image"&&e.crossOrigin&&(r.crossOrigin=e.crossOrigin+""),r}function VA(t){return t?e=>new Promise((n,r)=>{t.readFile(e,(i,o)=>{i?r(i):n(o)})}):_A}async function _A(){te("No file system access.")}function YA(t){return t?async function(e,n){const r=Us({},this.options.http,n),i=n&&n.response,o=await t(e,r);return o.ok?Ce(o[i])?o[i]():o.text():te(o.status+""+o.statusText)}:WA}async function WA(){te("No HTTP fetch method available.")}const XA=t=>t!=null&&t===t,qA=t=>t==="true"||t==="false"||t===!0||t===!1,ZA=t=>!Number.isNaN(Date.parse(t)),Cf=t=>!Number.isNaN(+t)&&!(t instanceof Date),KA=t=>Cf(t)&&Number.isInteger(+t),Mf={boolean:B1,integer:Er,number:Er,date:P1,string:z1,unknown:Qi},so=[qA,KA,Cf,ZA],JA=["boolean","integer","number","date"];function If(t,e){if(!t||!t.length)return"unknown";const n=t.length,r=so.length,i=so.map((o,s)=>s+1);for(let o=0,s=0,a,c;o<n;++o)for(c=e?t[o][e]:t[o],a=0;a<r;++a)if(i[a]&&XA(c)&&!so[a](c)&&(i[a]=0,++s,s===so.length))return"string";return JA[i.reduce((o,s)=>o===0?s:o,0)-1]}function $A(t,e){return e.reduce((n,r)=>(n[r]=If(t,r),n),{})}function Tf(t){const e=function(n,r){const i={delimiter:t};return ma(n,r?Us(r,i):i)};return e.responseType="text",e}function ma(t,e){return e.header&&(t=e.header.map(Xi).join(e.delimiter)+`
|
6
|
+
`+t),Rl(e.delimiter).parse(t+"")}ma.responseType="text";function e2(t){return typeof Buffer=="function"&&Ce(Buffer.isBuffer)?Buffer.isBuffer(t):!1}function ya(t,e){const n=e&&e.property?Hi(e.property):Qi;return Be(t)&&!e2(t)?t2(n(t),e):n(JSON.parse(t))}ya.responseType="json";function t2(t,e){return!Qe(t)&&O1(t)&&(t=[...t]),e&&e.copy?JSON.parse(JSON.stringify(t)):t}const n2={interior:(t,e)=>t!==e,exterior:(t,e)=>t===e};function Nf(t,e){let n,r,i,o;return t=ya(t,e),e&&e.feature?(n=Y1,i=e.feature):e&&e.mesh?(n=X1,i=e.mesh,o=n2[e.filter]):te("Missing TopoJSON feature or mesh parameter."),r=(r=t.objects[i])?n(t,r,o):te("Invalid TopoJSON object: "+i),r&&r.features||[r]}Nf.responseType="json";const Aa={dsv:ma,csv:Tf(","),tsv:Tf(" "),json:ya,topojson:Nf};function Lf(t,e){return arguments.length>1?(Aa[t]=e,this):an(Aa,t)?Aa[t]:null}function Of(t,e,n,r){e=e||{};const i=Lf(e.type||"json");return i||te("Unknown data format type: "+e.type),t=i(t,e),e.parse&&r2(t,e.parse,n,r),an(t,"columns")&&delete t.columns,t}function r2(t,e,n,r){if(!t.length)return;const i=zA();n=n||i.timeParse,r=r||i.utcParse;let o=t.columns||Object.keys(t[0]),s,a,c,u,f,l;e==="auto"&&(e=$A(t,o)),o=Object.keys(e);const h=o.map(d=>{const p=e[d];let g,m;if(p&&(p.startsWith("date:")||p.startsWith("utc:")))return g=p.split(/:(.+)?/,2),m=g[1],(m[0]==="'"&&m[m.length-1]==="'"||m[0]==='"'&&m[m.length-1]==='"')&&(m=m.slice(1,-1)),(g[0]==="utc"?r:n)(m);if(!Mf[p])throw Error("Illegal format pattern: "+d+":"+p);return Mf[p]});for(c=0,f=t.length,l=o.length;c<f;++c)for(s=t[c],u=0;u<l;++u)a=o[u],s[a]=h[u](s[a])}const ao=GA(typeof fetch!="undefined"&&fetch,null);function ba(t,e){return t==null||e==null?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function co(t){let e=t,n=t,r=t;t.length!==2&&(e=(a,c)=>t(a)-c,n=ba,r=(a,c)=>ba(t(a),c));function i(a,c,u=0,f=a.length){if(u<f){if(n(c,c)!==0)return f;do{const l=u+f>>>1;r(a[l],c)<0?u=l+1:f=l}while(u<f)}return u}function o(a,c,u=0,f=a.length){if(u<f){if(n(c,c)!==0)return f;do{const l=u+f>>>1;r(a[l],c)<=0?u=l+1:f=l}while(u<f)}return u}function s(a,c,u=0,f=a.length){const l=i(a,c,u,f-1);return l>u&&e(a[l-1],c)>-e(a[l],c)?l-1:l}return{left:i,center:s,right:o}}function kf(t){return t===null?NaN:+t}const Bf=co(ba),i2=Bf.right;Bf.left,co(kf).center;var o2=i2;function s2(t,e){let n,r;if(e===void 0)for(const i of t)i!=null&&(n===void 0?i>=i&&(n=r=i):(n>i&&(n=i),r<i&&(r=i)));else{let i=-1;for(let o of t)(o=e(o,++i,t))!=null&&(n===void 0?o>=o&&(n=r=o):(n>o&&(n=o),r<o&&(r=o)))}return[n,r]}class uo extends Map{constructor(e,n=u2){super();if(Object.defineProperties(this,{_intern:{value:new Map},_key:{value:n}}),e!=null)for(const[r,i]of e)this.set(r,i)}get(e){return super.get(Ff(this,e))}has(e){return super.has(Ff(this,e))}set(e,n){return super.set(a2(this,e),n)}delete(e){return super.delete(c2(this,e))}}function Ff({_intern:t,_key:e},n){const r=e(n);return t.has(r)?t.get(r):n}function a2({_intern:t,_key:e},n){const r=e(n);return t.has(r)?t.get(r):(t.set(r,n),n)}function c2({_intern:t,_key:e},n){const r=e(n);return t.has(r)&&(n=t.get(r),t.delete(r)),n}function u2(t){return t!==null&&typeof t=="object"?t.valueOf():t}function lo(t){return t}function fo(t,...e){return xa(t,lo,lo,e)}function l2(t,...e){return xa(t,Array.from,lo,e)}function f2(t,e,...n){return xa(t,lo,e,n)}function xa(t,e,n,r){return function i(o,s){if(s>=r.length)return n(o);const a=new uo,c=r[s++];let u=-1;for(const f of o){const l=c(f,++u,o),h=a.get(l);h?h.push(f):a.set(l,[f])}for(const[f,l]of a)a.set(f,i(l,s));return e(a)}(t,0)}var va=Math.sqrt(50),wa=Math.sqrt(10),Ea=Math.sqrt(2);function h2(t,e,n){var r,i=-1,o,s,a;if(e=+e,t=+t,n=+n,t===e&&n>0)return[t];if((r=e<t)&&(o=t,t=e,e=o),(a=d2(t,e,n))===0||!isFinite(a))return[];if(a>0){let c=Math.round(t/a),u=Math.round(e/a);for(c*a<t&&++c,u*a>e&&--u,s=new Array(o=u-c+1);++i<o;)s[i]=(c+i)*a}else{a=-a;let c=Math.round(t*a),u=Math.round(e*a);for(c/a<t&&++c,u/a>e&&--u,s=new Array(o=u-c+1);++i<o;)s[i]=(c+i)/a}return r&&s.reverse(),s}function d2(t,e,n){var r=(e-t)/Math.max(0,n),i=Math.floor(Math.log(r)/Math.LN10),o=r/Math.pow(10,i);return i>=0?(o>=va?10:o>=wa?5:o>=Ea?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(o>=va?10:o>=wa?5:o>=Ea?2:1)}function Sa(t,e,n){var r=Math.abs(e-t)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),o=r/i;return o>=va?i*=10:o>=wa?i*=5:o>=Ea&&(i*=2),e<t?-i:i}function p2(t,e,n=kf){if(!!(r=t.length)){if((e=+e)<=0||r<2)return+n(t[0],0,t);if(e>=1)return+n(t[r-1],r-1,t);var r,i=(r-1)*e,o=Math.floor(i),s=+n(t[o],o,t),a=+n(t[o+1],o+1,t);return s+(a-s)*(i-o)}}function ho(t,e,n){t=+t,e=+e,n=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+n;for(var r=-1,i=Math.max(0,Math.ceil((e-t)/n))|0,o=new Array(i);++r<i;)o[r]=t+r*n;return o}function po(t,e){let n=0;if(e===void 0)for(let r of t)(r=+r)&&(n+=r);else{let r=-1;for(let i of t)(i=+e(i,++r,t))&&(n+=i)}return n}function g2(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)}function go(t,e){if((n=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var n,r=t.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+t.slice(n+1)]}function m2(t){return t=go(Math.abs(t)),t?t[1]:NaN}function y2(t,e){return function(n,r){for(var i=n.length,o=[],s=0,a=t[0],c=0;i>0&&a>0&&(c+a+1>r&&(a=Math.max(1,r-c)),o.push(n.substring(i-=a,i+a)),!((c+=a+1)>r));)a=t[s=(s+1)%t.length];return o.reverse().join(e)}}function A2(t){return function(e){return e.replace(/[0-9]/g,function(n){return t[+n]})}}var b2=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function mo(t){if(!(e=b2.exec(t)))throw new Error("invalid format: "+t);var e;return new Da({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}mo.prototype=Da.prototype;function Da(t){this.fill=t.fill===void 0?" ":t.fill+"",this.align=t.align===void 0?">":t.align+"",this.sign=t.sign===void 0?"-":t.sign+"",this.symbol=t.symbol===void 0?"":t.symbol+"",this.zero=!!t.zero,this.width=t.width===void 0?void 0:+t.width,this.comma=!!t.comma,this.precision=t.precision===void 0?void 0:+t.precision,this.trim=!!t.trim,this.type=t.type===void 0?"":t.type+""}Da.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function x2(t){e:for(var e=t.length,n=1,r=-1,i;n<e;++n)switch(t[n]){case".":r=i=n;break;case"0":r===0&&(r=n),i=n;break;default:if(!+t[n])break e;r>0&&(r=0);break}return r>0?t.slice(0,r)+t.slice(i+1):t}var Pf;function v2(t,e){var n=go(t,e);if(!n)return t+"";var r=n[0],i=n[1],o=i-(Pf=Math.max(-8,Math.min(8,Math.floor(i/3)))*3)+1,s=r.length;return o===s?r:o>s?r+new Array(o-s+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+go(t,Math.max(0,e+o-1))[0]}function zf(t,e){var n=go(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}var Rf={"%":(t,e)=>(t*100).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:g2,e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>zf(t*100,e),r:zf,s:v2,X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function Uf(t){return t}var jf=Array.prototype.map,Gf=["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];function w2(t){var e=t.grouping===void 0||t.thousands===void 0?Uf:y2(jf.call(t.grouping,Number),t.thousands+""),n=t.currency===void 0?"":t.currency[0]+"",r=t.currency===void 0?"":t.currency[1]+"",i=t.decimal===void 0?".":t.decimal+"",o=t.numerals===void 0?Uf:A2(jf.call(t.numerals,String)),s=t.percent===void 0?"%":t.percent+"",a=t.minus===void 0?"\u2212":t.minus+"",c=t.nan===void 0?"NaN":t.nan+"";function u(l){l=mo(l);var h=l.fill,d=l.align,p=l.sign,g=l.symbol,m=l.zero,y=l.width,w=l.comma,x=l.precision,E=l.trim,b=l.type;b==="n"?(w=!0,b="g"):Rf[b]||(x===void 0&&(x=12),E=!0,b="g"),(m||h==="0"&&d==="=")&&(m=!0,h="0",d="=");var A=g==="$"?n:g==="#"&&/[boxX]/.test(b)?"0"+b.toLowerCase():"",v=g==="$"?r:/[%p]/.test(b)?s:"",D=Rf[b],L=/[defgprs%]/.test(b);x=x===void 0?6:/[gprs]/.test(b)?Math.max(1,Math.min(21,x)):Math.max(0,Math.min(20,x));function B(C){var k=A,P=v,H,qe,Re;if(b==="c")P=D(C)+P,C="";else{C=+C;var Ue=C<0||1/C<0;if(C=isNaN(C)?c:D(Math.abs(C),x),E&&(C=x2(C)),Ue&&+C==0&&p!=="+"&&(Ue=!1),k=(Ue?p==="("?p:a:p==="-"||p==="("?"":p)+k,P=(b==="s"?Gf[8+Pf/3]:"")+P+(Ue&&p==="("?")":""),L){for(H=-1,qe=C.length;++H<qe;)if(Re=C.charCodeAt(H),48>Re||Re>57){P=(Re===46?i+C.slice(H+1):C.slice(H))+P,C=C.slice(0,H);break}}}w&&!m&&(C=e(C,1/0));var z=k.length+C.length+P.length,ne=z<y?new Array(y-z+1).join(h):"";switch(w&&m&&(C=e(ne+C,ne.length?y-P.length:1/0),ne=""),d){case"<":C=k+C+P+ne;break;case"=":C=k+ne+C+P;break;case"^":C=ne.slice(0,z=ne.length>>1)+k+C+P+ne.slice(z);break;default:C=ne+k+C+P;break}return o(C)}return B.toString=function(){return l+""},B}function f(l,h){var d=u((l=mo(l),l.type="f",l)),p=Math.max(-8,Math.min(8,Math.floor(m2(h)/3)))*3,g=Math.pow(10,-p),m=Gf[8+p/3];return function(y){return d(g*y)+m}}return{format:u,formatPrefix:f}}var Ca,Ie;E2({thousands:",",grouping:[3],currency:["$",""]});function E2(t){return Ca=w2(t),Ie=Ca.format,Ca}const Hf=1;function Ma(){let t=[0,1],e=[0,1],n=1,r=1,i=0,o=0,s=.5,a=0;function c(u){return(u-t[0])/n*r+e[0]}return c.invert=function(u){return(u-e[0])/r*n+t[0]},c.domain=function(u){if(arguments.length){if(t=s2(u),n=t[1]-t[0],n<Hf){n=Hf;const f=(t[0]+t[1])/2;t[0]=f-n/2,t[1]=f+n/2}return c}else return t},c.range=function(u){return arguments.length?(e=[...u],r=e[1]-e[0],c):e},c.numberingOffset=function(u){return arguments.length?(a=u,c):a},c.padding=function(u){return arguments.length?(o=u,i=Math.min(1,u),c):i},c.paddingInner=function(u){return arguments.length?(i=Math.min(1,u),c):i},c.paddingOuter=function(u){return arguments.length?(o=u,c):o},c.align=function(u){return arguments.length?(s=Math.max(0,Math.min(1,u)),c):s},c.step=()=>r/n,c.bandwidth=()=>c.step(),c.ticks=u=>{const f=c.align(),l=c.numberingOffset();return h2(t[0]-f+l,t[1]-f+l,Math.min(u,Math.ceil(n))).filter(Number.isInteger).map(h=>h-a)},c.tickFormat=function(u,f){if(f)throw new Error("Index scale's tickFormat does not support a specifier!");const h=Sa(t[0],t[1],Math.min(u,Math.ceil(n)))<1e5?Ie(","):Ie(".3s");return d=>h(d+a)},c.copy=()=>Ma().domain(t).range(e).paddingInner(i).paddingOuter(o).numberingOffset(a),c}function S2(){const t=Ma().numberingOffset(1);let e;t.genome=function(r){return arguments.length?(e=r,t):e},t.ticks=r=>{if(!e)return[];const i=t.domain(),o=t.numberingOffset(),[s,a]=[Math.max(i[0],0),Math.min(i[1],e.totalSize-1)].map(f=>e.toChromosome(f)),c=Math.max(1,Sa(i[0],i[1],r)),u=[];for(let f=s.index;f<=a.index;f++){const l=e.chromosomes[f],h=Math.max(l.continuousStart+c,i[0]-(i[0]-l.continuousStart)%c),d=Math.min(l.continuousEnd-c/4,i[1]+1);for(let p=h;p<=d;p+=c){const g=p-o;g>=i[0]&&g<i[1]&&u.push(g)}}return u},t.tickFormat=(r,i)=>{if(!e)return;if(i)throw new Error("Locus scale's tickFormat does not support a specifier!");const o=t.domain(),s=o[1]-o[0],a=t.numberingOffset(),u=Sa(o[0],o[1],Math.min(r,Math.ceil(s)))<1e6?Ie(","):Ie(".3s"),f=l=>l-e.toChromosome(l).continuousStart;return l=>u(f(l)+a)};const n=t.copy;return t.copy=()=>n().genome(e),t}function ot(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t);break}return this}function Rt(t,e){switch(arguments.length){case 0:break;case 1:{typeof t=="function"?this.interpolator(t):this.range(t);break}default:{this.domain(t),typeof e=="function"?this.interpolator(e):this.range(e);break}}return this}const Ia=Symbol("implicit");function Ta(){var t=new Map,e=[],n=[],r=Ia;function i(o){var s=o+"",a=t.get(s);if(!a){if(r!==Ia)return r;t.set(s,a=e.push(o))}return n[(a-1)%n.length]}return i.domain=function(o){if(!arguments.length)return e.slice();e=[],t=new Map;for(const s of o){const a=s+"";t.has(a)||t.set(a,e.push(s))}return i},i.range=function(o){return arguments.length?(n=Array.from(o),i):n.slice()},i.unknown=function(o){return arguments.length?(r=o,i):r},i.copy=function(){return Ta(e,n).unknown(r)},ot.apply(i,arguments),i}function jn(t,e,n){t.prototype=e.prototype=n,n.constructor=t}function jr(t,e){var n=Object.create(t.prototype);for(var r in e)n[r]=e[r];return n}function Ut(){}var dn=.7,Gn=1/dn,Hn="\\s*([+-]?\\d+)\\s*",Gr="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",st="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",D2=/^#([0-9a-f]{3,8})$/,C2=new RegExp("^rgb\\("+[Hn,Hn,Hn]+"\\)$"),M2=new RegExp("^rgb\\("+[st,st,st]+"\\)$"),I2=new RegExp("^rgba\\("+[Hn,Hn,Hn,Gr]+"\\)$"),T2=new RegExp("^rgba\\("+[st,st,st,Gr]+"\\)$"),N2=new RegExp("^hsl\\("+[Gr,st,st]+"\\)$"),L2=new RegExp("^hsla\\("+[Gr,st,st,Gr]+"\\)$"),Qf={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};jn(Ut,Hr,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:Vf,formatHex:Vf,formatHsl:O2,formatRgb:_f,toString:_f});function Vf(){return this.rgb().formatHex()}function O2(){return Zf(this).formatHsl()}function _f(){return this.rgb().formatRgb()}function Hr(t){var e,n;return t=(t+"").trim().toLowerCase(),(e=D2.exec(t))?(n=e[1].length,e=parseInt(e[1],16),n===6?Yf(e):n===3?new pe(e>>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):n===8?yo(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):n===4?yo(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=C2.exec(t))?new pe(e[1],e[2],e[3],1):(e=M2.exec(t))?new pe(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=I2.exec(t))?yo(e[1],e[2],e[3],e[4]):(e=T2.exec(t))?yo(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=N2.exec(t))?qf(e[1],e[2]/100,e[3]/100,1):(e=L2.exec(t))?qf(e[1],e[2]/100,e[3]/100,e[4]):Qf.hasOwnProperty(t)?Yf(Qf[t]):t==="transparent"?new pe(NaN,NaN,NaN,0):null}function Yf(t){return new pe(t>>16&255,t>>8&255,t&255,1)}function yo(t,e,n,r){return r<=0&&(t=e=n=NaN),new pe(t,e,n,r)}function Na(t){return t instanceof Ut||(t=Hr(t)),t?(t=t.rgb(),new pe(t.r,t.g,t.b,t.opacity)):new pe}function Ao(t,e,n,r){return arguments.length===1?Na(t):new pe(t,e,n,r==null?1:r)}function pe(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}jn(pe,Ao,jr(Ut,{brighter:function(t){return t=t==null?Gn:Math.pow(Gn,t),new pe(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=t==null?dn:Math.pow(dn,t),new pe(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Wf,formatHex:Wf,formatRgb:Xf,toString:Xf}));function Wf(){return"#"+La(this.r)+La(this.g)+La(this.b)}function Xf(){var t=this.opacity;return t=isNaN(t)?1:Math.max(0,Math.min(1,t)),(t===1?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(t===1?")":", "+t+")")}function La(t){return t=Math.max(0,Math.min(255,Math.round(t)||0)),(t<16?"0":"")+t.toString(16)}function qf(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new at(t,e,n,r)}function Zf(t){if(t instanceof at)return new at(t.h,t.s,t.l,t.opacity);if(t instanceof Ut||(t=Hr(t)),!t)return new at;if(t instanceof at)return t;t=t.rgb();var e=t.r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),o=Math.max(e,n,r),s=NaN,a=o-i,c=(o+i)/2;return a?(e===o?s=(n-r)/a+(n<r)*6:n===o?s=(r-e)/a+2:s=(e-n)/a+4,a/=c<.5?o+i:2-o-i,s*=60):a=c>0&&c<1?0:s,new at(s,a,c,t.opacity)}function Oa(t,e,n,r){return arguments.length===1?Zf(t):new at(t,e,n,r==null?1:r)}function at(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}jn(at,Oa,jr(Ut,{brighter:function(t){return t=t==null?Gn:Math.pow(Gn,t),new at(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=t==null?dn:Math.pow(dn,t),new at(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new pe(ka(t>=240?t-240:t+120,i,r),ka(t,i,r),ka(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity;return t=isNaN(t)?1:Math.max(0,Math.min(1,t)),(t===1?"hsl(":"hsla(")+(this.h||0)+", "+(this.s||0)*100+"%, "+(this.l||0)*100+"%"+(t===1?")":", "+t+")")}}));function ka(t,e,n){return(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)*255}const Kf=Math.PI/180,Jf=180/Math.PI,bo=18,$f=.96422,eh=1,th=.82521,nh=4/29,Qn=6/29,rh=3*Qn*Qn,k2=Qn*Qn*Qn;function ih(t){if(t instanceof ct)return new ct(t.l,t.a,t.b,t.opacity);if(t instanceof wt)return oh(t);t instanceof pe||(t=Na(t));var e=Ra(t.r),n=Ra(t.g),r=Ra(t.b),i=Fa((.2225045*e+.7168786*n+.0606169*r)/eh),o,s;return e===n&&n===r?o=s=i:(o=Fa((.4360747*e+.3850649*n+.1430804*r)/$f),s=Fa((.0139322*e+.0971045*n+.7141733*r)/th)),new ct(116*i-16,500*(o-i),200*(i-s),t.opacity)}function Ba(t,e,n,r){return arguments.length===1?ih(t):new ct(t,e,n,r==null?1:r)}function ct(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}jn(ct,Ba,jr(Ut,{brighter:function(t){return new ct(this.l+bo*(t==null?1:t),this.a,this.b,this.opacity)},darker:function(t){return new ct(this.l-bo*(t==null?1:t),this.a,this.b,this.opacity)},rgb:function(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,n=isNaN(this.b)?t:t-this.b/200;return e=$f*Pa(e),t=eh*Pa(t),n=th*Pa(n),new pe(za(3.1338561*e-1.6168667*t-.4906146*n),za(-.9787684*e+1.9161415*t+.033454*n),za(.0719453*e-.2289914*t+1.4052427*n),this.opacity)}}));function Fa(t){return t>k2?Math.pow(t,1/3):t/rh+nh}function Pa(t){return t>Qn?t*t*t:rh*(t-nh)}function za(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function Ra(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function B2(t){if(t instanceof wt)return new wt(t.h,t.c,t.l,t.opacity);if(t instanceof ct||(t=ih(t)),t.a===0&&t.b===0)return new wt(NaN,0<t.l&&t.l<100?0:NaN,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*Jf;return new wt(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function Ua(t,e,n,r){return arguments.length===1?B2(t):new wt(t,e,n,r==null?1:r)}function wt(t,e,n,r){this.h=+t,this.c=+e,this.l=+n,this.opacity=+r}function oh(t){if(isNaN(t.h))return new ct(t.l,0,0,t.opacity);var e=t.h*Kf;return new ct(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}jn(wt,Ua,jr(Ut,{brighter:function(t){return new wt(this.h,this.c,this.l+bo*(t==null?1:t),this.opacity)},darker:function(t){return new wt(this.h,this.c,this.l-bo*(t==null?1:t),this.opacity)},rgb:function(){return oh(this).rgb()}}));var sh=-.14861,ja=1.78277,Ga=-.29227,xo=-.90649,Qr=1.97294,ah=Qr*xo,ch=Qr*ja,uh=ja*Ga-xo*sh;function F2(t){if(t instanceof pn)return new pn(t.h,t.s,t.l,t.opacity);t instanceof pe||(t=Na(t));var e=t.r/255,n=t.g/255,r=t.b/255,i=(uh*r+ah*e-ch*n)/(uh+ah-ch),o=r-i,s=(Qr*(n-i)-Ga*o)/xo,a=Math.sqrt(s*s+o*o)/(Qr*i*(1-i)),c=a?Math.atan2(s,o)*Jf-120:NaN;return new pn(c<0?c+360:c,a,i,t.opacity)}function Ha(t,e,n,r){return arguments.length===1?F2(t):new pn(t,e,n,r==null?1:r)}function pn(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}jn(pn,Ha,jr(Ut,{brighter:function(t){return t=t==null?Gn:Math.pow(Gn,t),new pn(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=t==null?dn:Math.pow(dn,t),new pn(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=isNaN(this.h)?0:(this.h+120)*Kf,e=+this.l,n=isNaN(this.s)?0:this.s*e*(1-e),r=Math.cos(t),i=Math.sin(t);return new pe(255*(e+n*(sh*r+ja*i)),255*(e+n*(Ga*r+xo*i)),255*(e+n*(Qr*r)),this.opacity)}}));function lh(t,e,n,r,i){var o=t*t,s=o*t;return((1-3*t+3*o-s)*e+(4-6*o+3*s)*n+(1+3*t+3*o-3*s)*r+s*i)/6}function fh(t){var e=t.length-1;return function(n){var r=n<=0?n=0:n>=1?(n=1,e-1):Math.floor(n*e),i=t[r],o=t[r+1],s=r>0?t[r-1]:2*i-o,a=r<e-1?t[r+2]:2*o-i;return lh((n-r/e)*e,s,i,o,a)}}function hh(t){var e=t.length;return function(n){var r=Math.floor(((n%=1)<0?++n:n)*e),i=t[(r+e-1)%e],o=t[r%e],s=t[(r+1)%e],a=t[(r+2)%e];return lh((n-r/e)*e,i,o,s,a)}}var vo=t=>()=>t;function dh(t,e){return function(n){return t+n*e}}function P2(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}function wo(t,e){var n=e-t;return n?dh(t,n>180||n<-180?n-360*Math.round(n/360):n):vo(isNaN(t)?e:t)}function z2(t){return(t=+t)==1?fe:function(e,n){return n-e?P2(e,n,t):vo(isNaN(e)?n:e)}}function fe(t,e){var n=e-t;return n?dh(t,n):vo(isNaN(t)?e:t)}var Qa=function t(e){var n=z2(e);function r(i,o){var s=n((i=Ao(i)).r,(o=Ao(o)).r),a=n(i.g,o.g),c=n(i.b,o.b),u=fe(i.opacity,o.opacity);return function(f){return i.r=s(f),i.g=a(f),i.b=c(f),i.opacity=u(f),i+""}}return r.gamma=t,r}(1);function ph(t){return function(e){var n=e.length,r=new Array(n),i=new Array(n),o=new Array(n),s,a;for(s=0;s<n;++s)a=Ao(e[s]),r[s]=a.r||0,i[s]=a.g||0,o[s]=a.b||0;return r=t(r),i=t(i),o=t(o),a.opacity=1,function(c){return a.r=r(c),a.g=i(c),a.b=o(c),a+""}}}var R2=ph(fh),U2=ph(hh);function Va(t,e){e||(e=[]);var n=t?Math.min(e.length,t.length):0,r=e.slice(),i;return function(o){for(i=0;i<n;++i)r[i]=t[i]*(1-o)+e[i]*o;return r}}function gh(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)}function j2(t,e){return(gh(e)?Va:mh)(t,e)}function mh(t,e){var n=e?e.length:0,r=t?Math.min(n,t.length):0,i=new Array(r),o=new Array(n),s;for(s=0;s<r;++s)i[s]=jt(t[s],e[s]);for(;s<n;++s)o[s]=e[s];return function(a){for(s=0;s<r;++s)o[s]=i[s](a);return o}}function yh(t,e){var n=new Date;return t=+t,e=+e,function(r){return n.setTime(t*(1-r)+e*r),n}}function Ke(t,e){return t=+t,e=+e,function(n){return t*(1-n)+e*n}}function Ah(t,e){var n={},r={},i;(t===null||typeof t!="object")&&(t={}),(e===null||typeof e!="object")&&(e={});for(i in e)i in t?n[i]=jt(t[i],e[i]):r[i]=e[i];return function(o){for(i in n)r[i]=n[i](o);return r}}var _a=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Ya=new RegExp(_a.source,"g");function G2(t){return function(){return t}}function H2(t){return function(e){return t(e)+""}}function bh(t,e){var n=_a.lastIndex=Ya.lastIndex=0,r,i,o,s=-1,a=[],c=[];for(t=t+"",e=e+"";(r=_a.exec(t))&&(i=Ya.exec(e));)(o=i.index)>n&&(o=e.slice(n,o),a[s]?a[s]+=o:a[++s]=o),(r=r[0])===(i=i[0])?a[s]?a[s]+=i:a[++s]=i:(a[++s]=null,c.push({i:s,x:Ke(r,i)})),n=Ya.lastIndex;return n<e.length&&(o=e.slice(n),a[s]?a[s]+=o:a[++s]=o),a.length<2?c[0]?H2(c[0].x):G2(e):(e=c.length,function(u){for(var f=0,l;f<e;++f)a[(l=c[f]).i]=l.x(u);return a.join("")})}function jt(t,e){var n=typeof e,r;return e==null||n==="boolean"?vo(e):(n==="number"?Ke:n==="string"?(r=Hr(e))?(e=r,Qa):bh:e instanceof Hr?Qa:e instanceof Date?yh:gh(e)?Va:Array.isArray(e)?mh:typeof e.valueOf!="function"&&typeof e.toString!="function"||isNaN(e)?Ah:Ke)(t,e)}function Q2(t){var e=t.length;return function(n){return t[Math.max(0,Math.min(e-1,Math.floor(n*e)))]}}function V2(t,e){var n=wo(+t,+e);return function(r){var i=n(r);return i-360*Math.floor(i/360)}}function Vr(t,e){return t=+t,e=+e,function(n){return Math.round(t*(1-n)+e*n)}}var xh=180/Math.PI,Wa={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function vh(t,e,n,r,i,o){var s,a,c;return(s=Math.sqrt(t*t+e*e))&&(t/=s,e/=s),(c=t*n+e*r)&&(n-=t*c,r-=e*c),(a=Math.sqrt(n*n+r*r))&&(n/=a,r/=a,c/=a),t*r<e*n&&(t=-t,e=-e,c=-c,s=-s),{translateX:i,translateY:o,rotate:Math.atan2(e,t)*xh,skewX:Math.atan(c)*xh,scaleX:s,scaleY:a}}var Eo;function _2(t){const e=new(typeof DOMMatrix=="function"?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?Wa:vh(e.a,e.b,e.c,e.d,e.e,e.f)}function Y2(t){return t==null||(Eo||(Eo=document.createElementNS("http://www.w3.org/2000/svg","g")),Eo.setAttribute("transform",t),!(t=Eo.transform.baseVal.consolidate()))?Wa:(t=t.matrix,vh(t.a,t.b,t.c,t.d,t.e,t.f))}function wh(t,e,n,r){function i(u){return u.length?u.pop()+" ":""}function o(u,f,l,h,d,p){if(u!==l||f!==h){var g=d.push("translate(",null,e,null,n);p.push({i:g-4,x:Ke(u,l)},{i:g-2,x:Ke(f,h)})}else(l||h)&&d.push("translate("+l+e+h+n)}function s(u,f,l,h){u!==f?(u-f>180?f+=360:f-u>180&&(u+=360),h.push({i:l.push(i(l)+"rotate(",null,r)-2,x:Ke(u,f)})):f&&l.push(i(l)+"rotate("+f+r)}function a(u,f,l,h){u!==f?h.push({i:l.push(i(l)+"skewX(",null,r)-2,x:Ke(u,f)}):f&&l.push(i(l)+"skewX("+f+r)}function c(u,f,l,h,d,p){if(u!==l||f!==h){var g=d.push(i(d)+"scale(",null,",",null,")");p.push({i:g-4,x:Ke(u,l)},{i:g-2,x:Ke(f,h)})}else(l!==1||h!==1)&&d.push(i(d)+"scale("+l+","+h+")")}return function(u,f){var l=[],h=[];return u=t(u),f=t(f),o(u.translateX,u.translateY,f.translateX,f.translateY,l,h),s(u.rotate,f.rotate,l,h),a(u.skewX,f.skewX,l,h),c(u.scaleX,u.scaleY,f.scaleX,f.scaleY,l,h),u=f=null,function(d){for(var p=-1,g=h.length,m;++p<g;)l[(m=h[p]).i]=m.x(d);return l.join("")}}}var W2=wh(_2,"px, ","px)","deg)"),X2=wh(Y2,", ",")",")"),q2=1e-12;function Eh(t){return((t=Math.exp(t))+1/t)/2}function Z2(t){return((t=Math.exp(t))-1/t)/2}function K2(t){return((t=Math.exp(2*t))-1)/(t+1)}var Sh=function t(e,n,r){function i(o,s){var a=o[0],c=o[1],u=o[2],f=s[0],l=s[1],h=s[2],d=f-a,p=l-c,g=d*d+p*p,m,y;if(g<q2)y=Math.log(h/u)/e,m=function(v){return[a+v*d,c+v*p,u*Math.exp(e*v*y)]};else{var w=Math.sqrt(g),x=(h*h-u*u+r*g)/(2*u*n*w),E=(h*h-u*u-r*g)/(2*h*n*w),b=Math.log(Math.sqrt(x*x+1)-x),A=Math.log(Math.sqrt(E*E+1)-E);y=(A-b)/e,m=function(v){var D=v*y,L=Eh(b),B=u/(n*w)*(L*K2(e*D+b)-Z2(b));return[a+B*d,c+B*p,u*L/Eh(e*D+b)]}}return m.duration=y*1e3*e/Math.SQRT2,m}return i.rho=function(o){var s=Math.max(.001,+o),a=s*s,c=a*a;return t(s,a,c)},i}(Math.SQRT2,2,4);function Dh(t){return function(e,n){var r=t((e=Oa(e)).h,(n=Oa(n)).h),i=fe(e.s,n.s),o=fe(e.l,n.l),s=fe(e.opacity,n.opacity);return function(a){return e.h=r(a),e.s=i(a),e.l=o(a),e.opacity=s(a),e+""}}}var J2=Dh(wo),$2=Dh(fe);function eb(t,e){var n=fe((t=Ba(t)).l,(e=Ba(e)).l),r=fe(t.a,e.a),i=fe(t.b,e.b),o=fe(t.opacity,e.opacity);return function(s){return t.l=n(s),t.a=r(s),t.b=i(s),t.opacity=o(s),t+""}}function Ch(t){return function(e,n){var r=t((e=Ua(e)).h,(n=Ua(n)).h),i=fe(e.c,n.c),o=fe(e.l,n.l),s=fe(e.opacity,n.opacity);return function(a){return e.h=r(a),e.c=i(a),e.l=o(a),e.opacity=s(a),e+""}}}var tb=Ch(wo),nb=Ch(fe);function Mh(t){return function e(n){n=+n;function r(i,o){var s=t((i=Ha(i)).h,(o=Ha(o)).h),a=fe(i.s,o.s),c=fe(i.l,o.l),u=fe(i.opacity,o.opacity);return function(f){return i.h=s(f),i.s=a(f),i.l=c(Math.pow(f,n)),i.opacity=u(f),i+""}}return r.gamma=e,r}(1)}var rb=Mh(wo),ib=Mh(fe);function Xa(t,e){e===void 0&&(e=t,t=jt);for(var n=0,r=e.length-1,i=e[0],o=new Array(r<0?0:r);n<r;)o[n]=t(i,i=e[++n]);return function(s){var a=Math.max(0,Math.min(r-1,Math.floor(s*=r)));return o[a](s-a)}}function ob(t,e){for(var n=new Array(e),r=0;r<e;++r)n[r]=t(r/(e-1));return n}var sb=Object.freeze({__proto__:null,[Symbol.toStringTag]:"Module",interpolate:jt,interpolateArray:j2,interpolateBasis:fh,interpolateBasisClosed:hh,interpolateDate:yh,interpolateDiscrete:Q2,interpolateHue:V2,interpolateNumber:Ke,interpolateNumberArray:Va,interpolateObject:Ah,interpolateRound:Vr,interpolateString:bh,interpolateTransformCss:W2,interpolateTransformSvg:X2,interpolateZoom:Sh,interpolateRgb:Qa,interpolateRgbBasis:R2,interpolateRgbBasisClosed:U2,interpolateHsl:J2,interpolateHslLong:$2,interpolateLab:eb,interpolateHcl:tb,interpolateHclLong:nb,interpolateCubehelix:rb,interpolateCubehelixLong:ib,piecewise:Xa,quantize:ob});function ab(t){return function(){return t}}function qa(t){return+t}var Ih=[0,1];function Te(t){return t}function Za(t,e){return(e-=t=+t)?function(n){return(n-t)/e}:ab(isNaN(e)?NaN:.5)}function cb(t,e){var n;return t>e&&(n=t,t=e,e=n),function(r){return Math.max(t,Math.min(e,r))}}function ub(t,e,n){var r=t[0],i=t[1],o=e[0],s=e[1];return i<r?(r=Za(i,r),o=n(s,o)):(r=Za(r,i),o=n(o,s)),function(a){return o(r(a))}}function lb(t,e,n){var r=Math.min(t.length,e.length)-1,i=new Array(r),o=new Array(r),s=-1;for(t[r]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++s<r;)i[s]=Za(t[s],t[s+1]),o[s]=n(e[s],e[s+1]);return function(a){var c=Dr(t,a,1,r)-1;return o[c](i[c](a))}}function _r(t,e){return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown())}function So(){var t=Ih,e=Ih,n=jt,r,i,o,s=Te,a,c,u;function f(){var h=Math.min(t.length,e.length);return s!==Te&&(s=cb(t[0],t[h-1])),a=h>2?lb:ub,c=u=null,l}function l(h){return h==null||isNaN(h=+h)?o:(c||(c=a(t.map(r),e,n)))(r(s(h)))}return l.invert=function(h){return s(i((u||(u=a(e,t.map(r),Ke)))(h)))},l.domain=function(h){return arguments.length?(t=Array.from(h,qa),f()):t.slice()},l.range=function(h){return arguments.length?(e=Array.from(h),f()):e.slice()},l.rangeRound=function(h){return e=Array.from(h),n=Vr,f()},l.clamp=function(h){return arguments.length?(s=h?!0:Te,f()):s!==Te},l.interpolate=function(h){return arguments.length?(n=h,f()):n},l.unknown=function(h){return arguments.length?(o=h,l):o},function(h,d){return r=h,i=d,f()}}function Th(){return So()(Te,Te)}function Nh(t,e,n,r){var i=Zi(t,e,n),o;switch(r=zn(r==null?",f":r),r.type){case"s":{var s=Math.max(Math.abs(t),Math.abs(e));return r.precision==null&&!isNaN(o=$l(i,s))&&(r.precision=o),Ks(r,s)}case"":case"e":case"g":case"p":case"r":{r.precision==null&&!isNaN(o=ef(i,Math.max(Math.abs(t),Math.abs(e))))&&(r.precision=o-(r.type==="e"));break}case"f":case"%":{r.precision==null&&!isNaN(o=Jl(i))&&(r.precision=o-(r.type==="%")*2);break}}return Rn(r)}function gn(t){var e=t.domain;return t.ticks=function(n){var r=e();return qs(r[0],r[r.length-1],n==null?10:n)},t.tickFormat=function(n,r){var i=e();return Nh(i[0],i[i.length-1],n==null?10:n,r)},t.nice=function(n){n==null&&(n=10);var r=e(),i=0,o=r.length-1,s=r[i],a=r[o],c,u,f=10;for(a<s&&(u=s,s=a,a=u,u=i,i=o,o=u);f-- >0;){if(u=Vl(s,a,n),u===c)return r[i]=s,r[o]=a,e(r);if(u>0)s=Math.floor(s/u)*u,a=Math.ceil(a/u)*u;else if(u<0)s=Math.ceil(s*u)/u,a=Math.floor(a*u)/u;else break;c=u}return t},t}function Lh(){var t=Th();return t.copy=function(){return _r(t,Lh())},ot.apply(t,arguments),gn(t)}function Oh(t){var e;function n(r){return r==null||isNaN(r=+r)?e:r}return n.invert=n,n.domain=n.range=function(r){return arguments.length?(t=Array.from(r,qa),n):t.slice()},n.unknown=function(r){return arguments.length?(e=r,n):e},n.copy=function(){return Oh(t).unknown(e)},t=arguments.length?Array.from(t,qa):[0,1],gn(n)}function kh(t,e){t=t.slice();var n=0,r=t.length-1,i=t[n],o=t[r],s;return o<i&&(s=n,n=r,r=s,s=i,i=o,o=s),t[n]=e.floor(i),t[r]=e.ceil(o),t}function Bh(t){return Math.log(t)}function Fh(t){return Math.exp(t)}function fb(t){return-Math.log(-t)}function hb(t){return-Math.exp(-t)}function db(t){return isFinite(t)?+("1e"+t):t<0?0:t}function pb(t){return t===10?db:t===Math.E?Math.exp:function(e){return Math.pow(t,e)}}function gb(t){return t===Math.E?Math.log:t===10&&Math.log10||t===2&&Math.log2||(t=Math.log(t),function(e){return Math.log(e)/t})}function Ph(t){return function(e){return-t(-e)}}function Ka(t){var e=t(Bh,Fh),n=e.domain,r=10,i,o;function s(){return i=gb(r),o=pb(r),n()[0]<0?(i=Ph(i),o=Ph(o),t(fb,hb)):t(Bh,Fh),e}return e.base=function(a){return arguments.length?(r=+a,s()):r},e.domain=function(a){return arguments.length?(n(a),s()):n()},e.ticks=function(a){var c=n(),u=c[0],f=c[c.length-1],l;(l=f<u)&&(h=u,u=f,f=h);var h=i(u),d=i(f),p,g,m,y=a==null?10:+a,w=[];if(!(r%1)&&d-h<y){if(h=Math.floor(h),d=Math.ceil(d),u>0){for(;h<=d;++h)for(g=1,p=o(h);g<r;++g)if(m=p*g,!(m<u)){if(m>f)break;w.push(m)}}else for(;h<=d;++h)for(g=r-1,p=o(h);g>=1;--g)if(m=p*g,!(m<u)){if(m>f)break;w.push(m)}w.length*2<y&&(w=qs(u,f,y))}else w=qs(h,d,Math.min(d-h,y)).map(o);return l?w.reverse():w},e.tickFormat=function(a,c){if(c==null&&(c=r===10?".0e":","),typeof c!="function"&&(c=Rn(c)),a===1/0)return c;a==null&&(a=10);var u=Math.max(1,r*a/e.ticks().length);return function(f){var l=f/o(Math.round(i(f)));return l*r<r-.5&&(l*=r),l<=u?c(f):""}},e.nice=function(){return n(kh(n(),{floor:function(a){return o(Math.floor(i(a)))},ceil:function(a){return o(Math.ceil(i(a)))}}))},e}function Ja(){var t=Ka(So()).domain([1,10]);return t.copy=function(){return _r(t,Ja()).base(t.base())},ot.apply(t,arguments),t}function zh(t){return function(e){return Math.sign(e)*Math.log1p(Math.abs(e/t))}}function Rh(t){return function(e){return Math.sign(e)*Math.expm1(Math.abs(e))*t}}function $a(t){var e=1,n=t(zh(e),Rh(e));return n.constant=function(r){return arguments.length?t(zh(e=+r),Rh(e)):e},gn(n)}function Uh(){var t=$a(So());return t.copy=function(){return _r(t,Uh()).constant(t.constant())},ot.apply(t,arguments)}function jh(t){return function(e){return e<0?-Math.pow(-e,t):Math.pow(e,t)}}function mb(t){return t<0?-Math.sqrt(-t):Math.sqrt(t)}function yb(t){return t<0?-t*t:t*t}function ec(t){var e=t(Te,Te),n=1;function r(){return n===1?t(Te,Te):n===.5?t(mb,yb):t(jh(n),jh(1/n))}return e.exponent=function(i){return arguments.length?(n=+i,r()):n},gn(e)}function tc(){var t=ec(So());return t.copy=function(){return _r(t,tc()).exponent(t.exponent())},ot.apply(t,arguments),t}function Ab(){return tc.apply(null,arguments).exponent(.5)}function Gh(){var t=[],e=[],n=[],r;function i(){var s=0,a=Math.max(1,e.length);for(n=new Array(a-1);++s<a;)n[s-1]=_l(t,s/a);return o}function o(s){return s==null||isNaN(s=+s)?r:e[Dr(n,s)]}return o.invertExtent=function(s){var a=e.indexOf(s);return a<0?[NaN,NaN]:[a>0?n[a-1]:t[0],a<n.length?n[a]:t[t.length-1]]},o.domain=function(s){if(!arguments.length)return t.slice();t=[];for(let a of s)a!=null&&!isNaN(a=+a)&&t.push(a);return t.sort(Fn),i()},o.range=function(s){return arguments.length?(e=Array.from(s),i()):e.slice()},o.unknown=function(s){return arguments.length?(r=s,o):r},o.quantiles=function(){return n.slice()},o.copy=function(){return Gh().domain(t).range(e).unknown(r)},ot.apply(o,arguments)}function Hh(){var t=0,e=1,n=1,r=[.5],i=[0,1],o;function s(c){return c!=null&&c<=c?i[Dr(r,c,0,n)]:o}function a(){var c=-1;for(r=new Array(n);++c<n;)r[c]=((c+1)*e-(c-n)*t)/(n+1);return s}return s.domain=function(c){return arguments.length?([t,e]=c,t=+t,e=+e,a()):[t,e]},s.range=function(c){return arguments.length?(n=(i=Array.from(c)).length-1,a()):i.slice()},s.invertExtent=function(c){var u=i.indexOf(c);return u<0?[NaN,NaN]:u<1?[t,r[0]]:u>=n?[r[n-1],e]:[r[u-1],r[u]]},s.unknown=function(c){return arguments.length&&(o=c),s},s.thresholds=function(){return r.slice()},s.copy=function(){return Hh().domain([t,e]).range(i).unknown(o)},ot.apply(gn(s),arguments)}function Qh(){var t=[.5],e=[0,1],n,r=1;function i(o){return o!=null&&o<=o?e[Dr(t,o,0,r)]:n}return i.domain=function(o){return arguments.length?(t=Array.from(o),r=Math.min(t.length,e.length-1),i):t.slice()},i.range=function(o){return arguments.length?(e=Array.from(o),r=Math.min(t.length,e.length-1),i):e.slice()},i.invertExtent=function(o){var s=e.indexOf(o);return[t[s-1],t[s]]},i.unknown=function(o){return arguments.length?(n=o,i):n},i.copy=function(){return Qh().domain(t).range(e).unknown(n)},ot.apply(i,arguments)}function bb(t){return new Date(t)}function xb(t){return t instanceof Date?+t:+new Date(+t)}function nc(t,e,n,r,i,o,s,a,c,u){var f=Th(),l=f.invert,h=f.domain,d=u(".%L"),p=u(":%S"),g=u("%I:%M"),m=u("%I %p"),y=u("%a %d"),w=u("%b %d"),x=u("%B"),E=u("%Y");function b(A){return(c(A)<A?d:a(A)<A?p:s(A)<A?g:o(A)<A?m:r(A)<A?i(A)<A?y:w:n(A)<A?x:E)(A)}return f.invert=function(A){return new Date(l(A))},f.domain=function(A){return arguments.length?h(Array.from(A,xb)):h().map(bb)},f.ticks=function(A){var v=h();return t(v[0],v[v.length-1],A==null?10:A)},f.tickFormat=function(A,v){return v==null?b:u(v)},f.nice=function(A){var v=h();return(!A||typeof A.range!="function")&&(A=e(v[0],v[v.length-1],A==null?10:A)),A?h(kh(v,A)):f},f.copy=function(){return _r(f,nc(t,e,n,r,i,o,s,a,c,u))},f}function vb(){return ot.apply(nc(Dy,Cy,Pt,to,eo,un,oa,ia,Ft,da).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}function wb(){return ot.apply(nc(Ey,Sy,zt,ro,no,fn,ca,aa,Ft,pa).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)]),arguments)}function Do(){var t=0,e=1,n,r,i,o,s=Te,a=!1,c;function u(l){return l==null||isNaN(l=+l)?c:s(i===0?.5:(l=(o(l)-n)*i,a?Math.max(0,Math.min(1,l)):l))}u.domain=function(l){return arguments.length?([t,e]=l,n=o(t=+t),r=o(e=+e),i=n===r?0:1/(r-n),u):[t,e]},u.clamp=function(l){return arguments.length?(a=!!l,u):a},u.interpolator=function(l){return arguments.length?(s=l,u):s};function f(l){return function(h){var d,p;return arguments.length?([d,p]=h,s=l(d,p),u):[s(0),s(1)]}}return u.range=f(jt),u.rangeRound=f(Vr),u.unknown=function(l){return arguments.length?(c=l,u):c},function(l){return o=l,n=l(t),r=l(e),i=n===r?0:1/(r-n),u}}function Gt(t,e){return e.domain(t.domain()).interpolator(t.interpolator()).clamp(t.clamp()).unknown(t.unknown())}function rc(){var t=gn(Do()(Te));return t.copy=function(){return Gt(t,rc())},Rt.apply(t,arguments)}function Vh(){var t=Ka(Do()).domain([1,10]);return t.copy=function(){return Gt(t,Vh()).base(t.base())},Rt.apply(t,arguments)}function _h(){var t=$a(Do());return t.copy=function(){return Gt(t,_h()).constant(t.constant())},Rt.apply(t,arguments)}function ic(){var t=ec(Do());return t.copy=function(){return Gt(t,ic()).exponent(t.exponent())},Rt.apply(t,arguments)}function Eb(){return ic.apply(null,arguments).exponent(.5)}function Co(){var t=0,e=.5,n=1,r=1,i,o,s,a,c,u=Te,f,l=!1,h;function d(g){return isNaN(g=+g)?h:(g=.5+((g=+f(g))-o)*(r*g<r*o?a:c),u(l?Math.max(0,Math.min(1,g)):g))}d.domain=function(g){return arguments.length?([t,e,n]=g,i=f(t=+t),o=f(e=+e),s=f(n=+n),a=i===o?0:.5/(o-i),c=o===s?0:.5/(s-o),r=o<i?-1:1,d):[t,e,n]},d.clamp=function(g){return arguments.length?(l=!!g,d):l},d.interpolator=function(g){return arguments.length?(u=g,d):u};function p(g){return function(m){var y,w,x;return arguments.length?([y,w,x]=m,u=Xa(g,[y,w,x]),d):[u(0),u(.5),u(1)]}}return d.range=p(jt),d.rangeRound=p(Vr),d.unknown=function(g){return arguments.length?(h=g,d):h},function(g){return f=g,i=g(t),o=g(e),s=g(n),a=i===o?0:.5/(o-i),c=o===s?0:.5/(s-o),r=o<i?-1:1,d}}function Yh(){var t=gn(Co()(Te));return t.copy=function(){return Gt(t,Yh())},Rt.apply(t,arguments)}function Wh(){var t=Ka(Co()).domain([.1,1,10]);return t.copy=function(){return Gt(t,Wh()).base(t.base())},Rt.apply(t,arguments)}function Xh(){var t=$a(Co());return t.copy=function(){return Gt(t,Xh()).constant(t.constant())},Rt.apply(t,arguments)}function oc(){var t=ec(Co());return t.copy=function(){return Gt(t,oc()).exponent(t.exponent())},Rt.apply(t,arguments)}function Sb(){return oc.apply(null,arguments).exponent(.5)}function sc(t,e,n){const r=t-e+n*2;return t?r>0?r:1:0}const Db="identity",Vn="linear",Ht="log",Yr="pow",Wr="sqrt",Mo="symlog",qh="time",Zh="utc",ut="sequential",_n="diverging",ac="quantile",Kh="quantize",Jh="threshold",cc="ordinal",uc="point",$h="band",lc="bin-ordinal",ce="continuous",Xr="discrete",qr="discretizing",_e="interpolating",ed="temporal";function Cb(t){return function(e){let n=e[0],r=e[1],i;return r<n&&(i=n,n=r,r=i),[t.invert(n),t.invert(r)]}}function Mb(t){return function(e){const n=t.range();let r=e[0],i=e[1],o=-1,s,a,c,u;for(i<r&&(a=r,r=i,i=a),c=0,u=n.length;c<u;++c)n[c]>=r&&n[c]<=i&&(o<0&&(o=c),s=c);if(!(o<0))return r=t.invertExtent(n[o]),i=t.invertExtent(n[s]),[r[0]===void 0?r[1]:r[0],i[1]===void 0?i[0]:i[1]]}}function fc(){const t=Ta().unknown(void 0),e=t.domain,n=t.range;let r=[0,1],i,o,s=!1,a=0,c=0,u=.5;delete t.unknown;function f(){const l=e().length,h=r[1]<r[0],d=r[1-h],p=sc(l,a,c);let g=r[h-0];i=(d-g)/(p||1),s&&(i=Math.floor(i)),g+=(d-g-i*(l-a))*u,o=i*(1-a),s&&(g=Math.round(g),o=Math.round(o));const m=Ki(l).map(y=>g+i*y);return n(h?m.reverse():m)}return t.domain=function(l){return arguments.length?(e(l),f()):e()},t.range=function(l){return arguments.length?(r=[+l[0],+l[1]],f()):r.slice()},t.rangeRound=function(l){return r=[+l[0],+l[1]],s=!0,f()},t.bandwidth=function(){return o},t.step=function(){return i},t.round=function(l){return arguments.length?(s=!!l,f()):s},t.padding=function(l){return arguments.length?(c=Math.max(0,Math.min(1,l)),a=c,f()):a},t.paddingInner=function(l){return arguments.length?(a=Math.max(0,Math.min(1,l)),f()):a},t.paddingOuter=function(l){return arguments.length?(c=Math.max(0,Math.min(1,l)),f()):c},t.align=function(l){return arguments.length?(u=Math.max(0,Math.min(1,l)),f()):u},t.invertRange=function(l){if(l[0]==null||l[1]==null)return;const h=r[1]<r[0],d=h?n().reverse():n(),p=d.length-1;let g=+l[0],m=+l[1],y,w,x;if(!(g!==g||m!==m)&&(m<g&&(x=g,g=m,m=x),!(m<d[0]||g>r[1-h])))return y=Math.max(0,_s(d,g)-1),w=g===m?y:_s(d,m)-1,g-d[y]>o+1e-10&&++y,h&&(x=y,y=p-w,w=p-x),y>w?void 0:e().slice(y,w+1)},t.invert=function(l){const h=t.invertRange([l,l]);return h&&h[0]},t.copy=function(){return fc().domain(e()).range(r).round(s).paddingInner(a).paddingOuter(c).align(u)},f()}function td(t){const e=t.copy;return t.padding=t.paddingOuter,delete t.paddingInner,t.copy=function(){return td(e())},t}function Ib(){return td(fc().paddingInner(1))}var Tb=Array.prototype.map;function Nb(t){return Tb.call(t,Er)}const Lb=Array.prototype.slice;function nd(){let t=[],e=[];function n(r){return r==null||r!==r?void 0:e[(Dr(t,r)-1)%e.length]}return n.domain=function(r){return arguments.length?(t=Nb(r),n):t.slice()},n.range=function(r){return arguments.length?(e=Lb.call(r),n):e.slice()},n.tickFormat=function(r,i){return Nh(t[0],Ze(t),r==null?10:r,i)},n.copy=function(){return nd().domain(n.domain()).range(n.range())},n}const Io={};function Ob(t,e,n){const r=function(){const o=e();return o.invertRange||(o.invertRange=o.invert?Cb(o):o.invertExtent?Mb(o):void 0),o.type=t,o};return r.metadata=qi(Rs(n)),r}function _(t,e,n){return arguments.length>1?(Io[t]=Ob(t,e,n),this):kb(t)?Io[t]:void 0}_(Db,Oh),_(Vn,Lh,ce),_(Ht,Ja,[ce,Ht]),_(Yr,tc,ce),_(Wr,Ab,ce),_(Mo,Uh,ce),_(qh,vb,[ce,ed]),_(Zh,wb,[ce,ed]),_(ut,rc,[ce,_e]),_("".concat(ut,"-").concat(Vn),rc,[ce,_e]),_("".concat(ut,"-").concat(Ht),Vh,[ce,_e,Ht]),_("".concat(ut,"-").concat(Yr),ic,[ce,_e]),_("".concat(ut,"-").concat(Wr),Eb,[ce,_e]),_("".concat(ut,"-").concat(Mo),_h,[ce,_e]),_("".concat(_n,"-").concat(Vn),Yh,[ce,_e]),_("".concat(_n,"-").concat(Ht),Wh,[ce,_e,Ht]),_("".concat(_n,"-").concat(Yr),oc,[ce,_e]),_("".concat(_n,"-").concat(Wr),Sb,[ce,_e]),_("".concat(_n,"-").concat(Mo),Xh,[ce,_e]),_(ac,Gh,[qr,ac]),_(Kh,Hh,qr),_(Jh,Qh,qr),_(lc,nd,[Xr,qr]),_(cc,Ta,Xr),_($h,fc,Xr),_(uc,Ib,Xr);function kb(t){return an(Io,t)}function Zr(t,e){const n=Io[t];return n&&n.metadata[e]}function Je(t){return Zr(t,ce)}function Qt(t){return Zr(t,Xr)}function Yn(t){return Zr(t,qr)}function rd(t){return Zr(t,Ht)}function To(t){return Zr(t,_e)}function Bb(t,e){const n=e[0],r=Ze(e)-n;return function(i){return t(n+i*r)}}function No(t,e,n){return Xa(id(e||"rgb",n),t)}function Fb(t,e){const n=new Array(e),r=e+1;for(let i=0;i<e;)n[i]=t(++i/r);return n}function id(t,e){const n=sb[Pb(t)];return e!=null&&n&&n.gamma?n.gamma(e):n}function Pb(t){return"interpolate"+t.toLowerCase().split("-").map(e=>e[0].toUpperCase()+e.slice(1)).join("")}const zb={blues:"cfe1f2bed8eca8cee58fc1de74b2d75ba3cf4592c63181bd206fb2125ca40a4a90",greens:"d3eecdc0e6baabdda594d3917bc77d60ba6c46ab5e329a512089430e7735036429",greys:"e2e2e2d4d4d4c4c4c4b1b1b19d9d9d8888887575756262624d4d4d3535351e1e1e",oranges:"fdd8b3fdc998fdb87bfda55efc9244f87f2cf06b18e4580bd14904b93d029f3303",purples:"e2e1efd4d4e8c4c5e0b4b3d6a3a0cc928ec3827cb97566ae684ea25c3696501f8c",reds:"fdc9b4fcb49afc9e80fc8767fa7051f6573fec3f2fdc2a25c81b1db21218970b13",blueGreen:"d5efedc1e8e0a7ddd18bd2be70c6a958ba9144ad77319c5d2089460e7736036429",bluePurple:"ccddecbad0e4a8c2dd9ab0d4919cc98d85be8b6db28a55a6873c99822287730f71",greenBlue:"d3eecec5e8c3b1e1bb9bd8bb82cec269c2ca51b2cd3c9fc7288abd1675b10b60a1",orangeRed:"fddcaffdcf9bfdc18afdad77fb9562f67d53ee6545e24932d32d1ebf130da70403",purpleBlue:"dbdaebc8cee4b1c3de97b7d87bacd15b9fc93a90c01e7fb70b70ab056199045281",purpleBlueGreen:"dbd8eac8cee4b0c3de93b7d872acd1549fc83892bb1c88a3097f8702736b016353",purpleRed:"dcc9e2d3b3d7ce9eccd186c0da6bb2e14da0e23189d91e6fc61159ab07498f023a",redPurple:"fccfccfcbec0faa9b8f98faff571a5ec539ddb3695c41b8aa908808d0179700174",yellowGreen:"e4f4acd1eca0b9e2949ed68880c97c62bb6e47aa5e3297502083440e723b036034",yellowOrangeBrown:"feeaa1fedd84fecc63feb746fca031f68921eb7215db5e0bc54c05ab3d038f3204",yellowOrangeRed:"fee087fed16ffebd59fea849fd903efc7335f9522bee3423de1b20ca0b22af0225",blueOrange:"134b852f78b35da2cb9dcae1d2e5eff2f0ebfce0bafbbf74e8932fc5690d994a07",brownBlueGreen:"704108a0651ac79548e3c78af3e6c6eef1eac9e9e48ed1c74da79e187a72025147",purpleGreen:"5b1667834792a67fb6c9aed3e6d6e8eff0efd9efd5aedda971bb75368e490e5e29",purpleOrange:"4114696647968f83b7b9b4d6dadbebf3eeeafce0bafbbf74e8932fc5690d994a07",redBlue:"8c0d25bf363adf745ef4ae91fbdbc9f2efeed2e5ef9dcae15da2cb2f78b3134b85",redGrey:"8c0d25bf363adf745ef4ae91fcdccbfaf4f1e2e2e2c0c0c0969696646464343434",yellowGreenBlue:"eff9bddbf1b4bde5b594d5b969c5be45b4c22c9ec02182b82163aa23479c1c3185",redYellowBlue:"a50026d4322cf16e43fcac64fedd90faf8c1dcf1ecabd6e875abd04a74b4313695",redYellowGreen:"a50026d4322cf16e43fcac63fedd8df9f7aed7ee8ea4d86e64bc6122964f006837",pinkYellowGreen:"8e0152c0267edd72adf0b3d6faddedf5f3efe1f2cab6de8780bb474f9125276419",spectral:"9e0142d13c4bf0704afcac63fedd8dfbf8b0e0f3a1a9dda269bda94288b55e4fa2",viridis:"440154470e61481a6c482575472f7d443a834144873d4e8a39568c35608d31688e2d708e2a788e27818e23888e21918d1f988b1fa08822a8842ab07f35b77943bf7154c56866cc5d7ad1518fd744a5db36bcdf27d2e21be9e51afde725",magma:"0000040404130b0924150e3720114b2c11603b0f704a107957157e651a80721f817f24828c29819a2e80a8327db6377ac43c75d1426fde4968e95462f1605df76f5cfa7f5efc8f65fe9f6dfeaf78febf84fece91fddea0fcedaffcfdbf",inferno:"0000040403130c0826170c3b240c4f330a5f420a68500d6c5d126e6b176e781c6d86216b932667a12b62ae305cbb3755c73e4cd24644dd513ae65c30ed6925f3771af8850ffb9506fca50afcb519fac62df6d645f2e661f3f484fcffa4",plasma:"0d088723069033059742039d5002a25d01a66a00a87801a88405a7900da49c179ea72198b12a90ba3488c33d80cb4779d35171da5a69e16462e76e5bed7953f2834cf68f44fa9a3dfca636fdb32ffec029fcce25f9dc24f5ea27f0f921",cividis:"00205100235800265d002961012b65042e670831690d346b11366c16396d1c3c6e213f6e26426e2c456e31476e374a6e3c4d6e42506e47536d4c566d51586e555b6e5a5e6e5e616e62646f66676f6a6a706e6d717270717573727976737c79747f7c75827f758682768985778c8877908b78938e789691789a94789e9778a19b78a59e77a9a177aea575b2a874b6ab73bbaf71c0b26fc5b66dc9b96acebd68d3c065d8c462ddc85fe2cb5ce7cf58ebd355f0d652f3da4ff7de4cfae249fce647",rainbow:"6e40aa883eb1a43db3bf3cafd83fa4ee4395fe4b83ff576eff6659ff7847ff8c38f3a130e2b72fcfcc36bee044aff05b8ff4576ff65b52f6673af27828ea8d1ddfa319d0b81cbecb23abd82f96e03d82e14c6edb5a5dd0664dbf6e40aa",sinebow:"ff4040fc582af47218e78d0bd5a703bfbf00a7d5038de70b72f41858fc2a40ff402afc5818f4720be78d03d5a700bfbf03a7d50b8de71872f42a58fc4040ff582afc7218f48d0be7a703d5bf00bfd503a7e70b8df41872fc2a58ff4040",turbo:"23171b32204a3e2a71453493493eae4b49c54a53d7485ee44569ee4074f53c7ff8378af93295f72e9ff42ba9ef28b3e926bce125c5d925cdcf27d5c629dcbc2de3b232e9a738ee9d3ff39347f68950f9805afc7765fd6e70fe667cfd5e88fc5795fb51a1f84badf545b9f140c5ec3cd0e637dae034e4d931ecd12ef4c92bfac029ffb626ffad24ffa223ff9821ff8d1fff821dff771cfd6c1af76118f05616e84b14df4111d5380fcb2f0dc0260ab61f07ac1805a313029b0f00950c00910b00",browns:"eedbbdecca96e9b97ae4a865dc9856d18954c7784cc0673fb85536ad44339f3632",tealBlues:"bce4d89dd3d181c3cb65b3c245a2b9368fae347da0306a932c5985",teals:"bbdfdfa2d4d58ac9c975bcbb61b0af4da5a43799982b8b8c1e7f7f127273006667",warmGreys:"dcd4d0cec5c1c0b8b4b3aaa7a59c9998908c8b827f7e7673726866665c5a59504e",goldGreen:"f4d166d5ca60b6c35c98bb597cb25760a6564b9c533f8f4f33834a257740146c36",goldOrange:"f4d166f8be5cf8aa4cf5983bf3852aef701be2621fd65322c54923b142239e3a26",goldRed:"f4d166f6be59f9aa51fc964ef6834bee734ae56249db5247cf4244c43141b71d3e",lightGreyRed:"efe9e6e1dad7d5cbc8c8bdb9bbaea9cd967ddc7b43e15f19df4011dc000b",lightGreyTeal:"e4eaead6dcddc8ced2b7c2c7a6b4bc64b0bf22a6c32295c11f85be1876bc",lightMulti:"e0f1f2c4e9d0b0de9fd0e181f6e072f6c053f3993ef77440ef4a3c",lightOrange:"f2e7daf7d5baf9c499fab184fa9c73f68967ef7860e8645bde515bd43d5b",lightTealBlue:"e3e9e0c0dccf9aceca7abfc859afc0389fb9328dad2f7ca0276b95255988",darkBlue:"3232322d46681a5c930074af008cbf05a7ce25c0dd38daed50f3faffffff",darkGold:"3c3c3c584b37725e348c7631ae8b2bcfa424ecc31ef9de30fff184ffffff",darkGreen:"3a3a3a215748006f4d048942489e4276b340a6c63dd2d836ffeb2cffffaa",darkMulti:"3737371f5287197d8c29a86995ce3fffe800ffffff",darkRed:"3434347036339e3c38cc4037e75d1eec8620eeab29f0ce32ffeb2c"},Rb={category10:"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf",category20:"1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5",category20b:"393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6",category20c:"3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9",tableau10:"4c78a8f58518e4575672b7b254a24beeca3bb279a2ff9da69d755dbab0ac",tableau20:"4c78a89ecae9f58518ffbf7954a24b88d27ab79a20f2cf5b43989483bcb6e45756ff9d9879706ebab0acd67195fcbfd2b279a2d6a5c99e765fd8b5a5",accent:"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666",dark2:"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666",paired:"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928",pastel1:"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2",pastel2:"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc",set1:"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999",set2:"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3",set3:"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f"};function od(t){const e=t.length/6|0,n=new Array(e);for(let r=0;r<e;)n[r]="#"+t.slice(r*6,++r*6);return n}function sd(t,e){for(const n in t)hc(n,e(t[n]))}const ad={};sd(Rb,od),sd(zb,t=>No(od(t)));function hc(t,e){return t=t&&t.toLowerCase(),arguments.length>1?(ad[t]=e,this):ad[t]}var BI="";function Ub(t,e){var n=t.getBoundingClientRect();return[e.clientX-n.left-t.clientLeft,e.clientY-n.top-t.clientTop]}/**
|
7
|
+
* @license
|
8
|
+
* Copyright 2017 Google LLC
|
9
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
10
|
+
*/var dc;const Wn=globalThis.trustedTypes,cd=Wn?Wn.createPolicy("lit-html",{createHTML:t=>t}):void 0,Vt=`lit$${(Math.random()+"").slice(9)}$`,ud="?"+Vt,jb=`<${ud}>`,Xn=document,Kr=(t="")=>Xn.createComment(t),Jr=t=>t===null||typeof t!="object"&&typeof t!="function",ld=Array.isArray,Gb=t=>{var e;return ld(t)||typeof((e=t)===null||e===void 0?void 0:e[Symbol.iterator])=="function"},$r=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,fd=/-->/g,hd=/>/g,mn=/>|[ \n\r](?:([^\s"'>=/]+)([ \n\r]*=[ \n\r]*(?:[^ \n\r"'`<>=]|("|')|))|$)/g,dd=/'/g,pd=/"/g,gd=/^(?:script|style|textarea)$/i,Hb=t=>(e,...n)=>({_$litType$:t,strings:e,values:n}),I=Hb(1),ye=Symbol.for("lit-noChange"),Y=Symbol.for("lit-nothing"),md=new WeakMap,$e=(t,e,n)=>{var r,i;const o=(r=n==null?void 0:n.renderBefore)!==null&&r!==void 0?r:e;let s=o._$litPart$;if(s===void 0){const a=(i=n==null?void 0:n.renderBefore)!==null&&i!==void 0?i:null;o._$litPart$=s=new ti(e.insertBefore(Kr(),a),a,void 0,n!=null?n:{})}return s._$AI(t),s},qn=Xn.createTreeWalker(Xn,129,null,!1),Qb=(t,e)=>{const n=t.length-1,r=[];let i,o=e===2?"<svg>":"",s=$r;for(let c=0;c<n;c++){const u=t[c];let f,l,h=-1,d=0;for(;d<u.length&&(s.lastIndex=d,l=s.exec(u),l!==null);)d=s.lastIndex,s===$r?l[1]==="!--"?s=fd:l[1]!==void 0?s=hd:l[2]!==void 0?(gd.test(l[2])&&(i=RegExp("</"+l[2],"g")),s=mn):l[3]!==void 0&&(s=mn):s===mn?l[0]===">"?(s=i!=null?i:$r,h=-1):l[1]===void 0?h=-2:(h=s.lastIndex-l[2].length,f=l[1],s=l[3]===void 0?mn:l[3]==='"'?pd:dd):s===pd||s===dd?s=mn:s===fd||s===hd?s=$r:(s=mn,i=void 0);const p=s===mn&&t[c+1].startsWith("/>")?" ":"";o+=s===$r?u+jb:h>=0?(r.push(f),u.slice(0,h)+"$lit$"+u.slice(h)+Vt+p):u+Vt+(h===-2?(r.push(void 0),c):p)}const a=o+(t[n]||"<?>")+(e===2?"</svg>":"");return[cd!==void 0?cd.createHTML(a):a,r]};class ei{constructor({strings:e,_$litType$:n},r){let i;this.parts=[];let o=0,s=0;const a=e.length-1,c=this.parts,[u,f]=Qb(e,n);if(this.el=ei.createElement(u,r),qn.currentNode=this.el.content,n===2){const l=this.el.content,h=l.firstChild;h.remove(),l.append(...h.childNodes)}for(;(i=qn.nextNode())!==null&&c.length<a;){if(i.nodeType===1){if(i.hasAttributes()){const l=[];for(const h of i.getAttributeNames())if(h.endsWith("$lit$")||h.startsWith(Vt)){const d=f[s++];if(l.push(h),d!==void 0){const p=i.getAttribute(d.toLowerCase()+"$lit$").split(Vt),g=/([.?@])?(.*)/.exec(d);c.push({type:1,index:o,name:g[2],strings:p,ctor:g[1]==="."?_b:g[1]==="?"?Wb:g[1]==="@"?Xb:Lo})}else c.push({type:6,index:o})}for(const h of l)i.removeAttribute(h)}if(gd.test(i.tagName)){const l=i.textContent.split(Vt),h=l.length-1;if(h>0){i.textContent=Wn?Wn.emptyScript:"";for(let d=0;d<h;d++)i.append(l[d],Kr()),qn.nextNode(),c.push({type:2,index:++o});i.append(l[h],Kr())}}}else if(i.nodeType===8)if(i.data===ud)c.push({type:2,index:o});else{let l=-1;for(;(l=i.data.indexOf(Vt,l+1))!==-1;)c.push({type:7,index:o}),l+=Vt.length-1}o++}}static createElement(e,n){const r=Xn.createElement("template");return r.innerHTML=e,r}}function Zn(t,e,n=t,r){var i,o,s,a;if(e===ye)return e;let c=r!==void 0?(i=n._$Cl)===null||i===void 0?void 0:i[r]:n._$Cu;const u=Jr(e)?void 0:e._$litDirective$;return(c==null?void 0:c.constructor)!==u&&((o=c==null?void 0:c._$AO)===null||o===void 0||o.call(c,!1),u===void 0?c=void 0:(c=new u(t),c._$AT(t,n,r)),r!==void 0?((s=(a=n)._$Cl)!==null&&s!==void 0?s:a._$Cl=[])[r]=c:n._$Cu=c),c!==void 0&&(e=Zn(t,c._$AS(t,e.values),c,r)),e}class Vb{constructor(e,n){this.v=[],this._$AN=void 0,this._$AD=e,this._$AM=n}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}p(e){var n;const{el:{content:r},parts:i}=this._$AD,o=((n=e==null?void 0:e.creationScope)!==null&&n!==void 0?n:Xn).importNode(r,!0);qn.currentNode=o;let s=qn.nextNode(),a=0,c=0,u=i[0];for(;u!==void 0;){if(a===u.index){let f;u.type===2?f=new ti(s,s.nextSibling,this,e):u.type===1?f=new u.ctor(s,u.name,u.strings,this,e):u.type===6&&(f=new qb(s,this,e)),this.v.push(f),u=i[++c]}a!==(u==null?void 0:u.index)&&(s=qn.nextNode(),a++)}return o}m(e){let n=0;for(const r of this.v)r!==void 0&&(r.strings!==void 0?(r._$AI(e,r,n),n+=r.strings.length-2):r._$AI(e[n])),n++}}class ti{constructor(e,n,r,i){var o;this.type=2,this._$AH=Y,this._$AN=void 0,this._$AA=e,this._$AB=n,this._$AM=r,this.options=i,this._$Cg=(o=i==null?void 0:i.isConnected)===null||o===void 0||o}get _$AU(){var e,n;return(n=(e=this._$AM)===null||e===void 0?void 0:e._$AU)!==null&&n!==void 0?n:this._$Cg}get parentNode(){let e=this._$AA.parentNode;const n=this._$AM;return n!==void 0&&e.nodeType===11&&(e=n.parentNode),e}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(e,n=this){e=Zn(this,e,n),Jr(e)?e===Y||e==null||e===""?(this._$AH!==Y&&this._$AR(),this._$AH=Y):e!==this._$AH&&e!==ye&&this.$(e):e._$litType$!==void 0?this.T(e):e.nodeType!==void 0?this.S(e):Gb(e)?this.M(e):this.$(e)}A(e,n=this._$AB){return this._$AA.parentNode.insertBefore(e,n)}S(e){this._$AH!==e&&(this._$AR(),this._$AH=this.A(e))}$(e){this._$AH!==Y&&Jr(this._$AH)?this._$AA.nextSibling.data=e:this.S(Xn.createTextNode(e)),this._$AH=e}T(e){var n;const{values:r,_$litType$:i}=e,o=typeof i=="number"?this._$AC(e):(i.el===void 0&&(i.el=ei.createElement(i.h,this.options)),i);if(((n=this._$AH)===null||n===void 0?void 0:n._$AD)===o)this._$AH.m(r);else{const s=new Vb(o,this),a=s.p(this.options);s.m(r),this.S(a),this._$AH=s}}_$AC(e){let n=md.get(e.strings);return n===void 0&&md.set(e.strings,n=new ei(e)),n}M(e){ld(this._$AH)||(this._$AH=[],this._$AR());const n=this._$AH;let r,i=0;for(const o of e)i===n.length?n.push(r=new ti(this.A(Kr()),this.A(Kr()),this,this.options)):r=n[i],r._$AI(o),i++;i<n.length&&(this._$AR(r&&r._$AB.nextSibling,i),n.length=i)}_$AR(e=this._$AA.nextSibling,n){var r;for((r=this._$AP)===null||r===void 0||r.call(this,!1,!0,n);e&&e!==this._$AB;){const i=e.nextSibling;e.remove(),e=i}}setConnected(e){var n;this._$AM===void 0&&(this._$Cg=e,(n=this._$AP)===null||n===void 0||n.call(this,e))}}class Lo{constructor(e,n,r,i,o){this.type=1,this._$AH=Y,this._$AN=void 0,this.element=e,this.name=n,this._$AM=i,this.options=o,r.length>2||r[0]!==""||r[1]!==""?(this._$AH=Array(r.length-1).fill(new String),this.strings=r):this._$AH=Y}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(e,n=this,r,i){const o=this.strings;let s=!1;if(o===void 0)e=Zn(this,e,n,0),s=!Jr(e)||e!==this._$AH&&e!==ye,s&&(this._$AH=e);else{const a=e;let c,u;for(e=o[0],c=0;c<o.length-1;c++)u=Zn(this,a[r+c],n,c),u===ye&&(u=this._$AH[c]),s||(s=!Jr(u)||u!==this._$AH[c]),u===Y?e=Y:e!==Y&&(e+=(u!=null?u:"")+o[c+1]),this._$AH[c]=u}s&&!i&&this.k(e)}k(e){e===Y?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,e!=null?e:"")}}class _b extends Lo{constructor(){super(...arguments),this.type=3}k(e){this.element[this.name]=e===Y?void 0:e}}const Yb=Wn?Wn.emptyScript:"";class Wb extends Lo{constructor(){super(...arguments),this.type=4}k(e){e&&e!==Y?this.element.setAttribute(this.name,Yb):this.element.removeAttribute(this.name)}}class Xb extends Lo{constructor(e,n,r,i,o){super(e,n,r,i,o),this.type=5}_$AI(e,n=this){var r;if((e=(r=Zn(this,e,n,0))!==null&&r!==void 0?r:Y)===ye)return;const i=this._$AH,o=e===Y&&i!==Y||e.capture!==i.capture||e.once!==i.once||e.passive!==i.passive,s=e!==Y&&(i===Y||o);o&&this.element.removeEventListener(this.name,this,i),s&&this.element.addEventListener(this.name,this,e),this._$AH=e}handleEvent(e){var n,r;typeof this._$AH=="function"?this._$AH.call((r=(n=this.options)===null||n===void 0?void 0:n.host)!==null&&r!==void 0?r:this.element,e):this._$AH.handleEvent(e)}}class qb{constructor(e,n,r){this.element=e,this.type=6,this._$AN=void 0,this._$AM=n,this.options=r}get _$AU(){return this._$AM._$AU}_$AI(e){Zn(this,e)}}const yd=window.litHtmlPolyfillSupport;yd==null||yd(ei,ti),((dc=globalThis.litHtmlVersions)!==null&&dc!==void 0?dc:globalThis.litHtmlVersions=[]).push("2.0.2");function pc(t,e,n,r){return n=n||(i=>i),r=r||(i=>i),t.length==e.length&&t.every((i,o)=>n(t[o])===r(e[o]))}function Ye(t){return Array.isArray(t)?t:typeof t!="undefined"?[t]:[]}function he(t){return t[t.length-1]}const yn="gs-suppress-tooltip";class Zb{constructor(e){this.container=e,this.element=document.createElement("div"),this.element.className="tooltip",this._visible=!0,this.container.appendChild(this.element),this._previousTooltipDatum=void 0,this.enabledStack=[!0],this._penaltyUntil=0,this._lastCoords=void 0,this._previousMove=0,this.clear()}set visible(e){e!=this._visible&&(this.element.style.display=e?null:"none",this._visible=e)}get visible(){return this._visible}get enabled(){var e;return(e=he(this.enabledStack))!=null?e:!0}pushEnabledState(e){this.enabledStack.push(e),e||(this.visible=!1)}popEnabledState(){this.enabledStack.pop()}handleMouseMove(e){this.mouseCoords=Ub(this.container,e);const n=performance.now();!this.visible&&!this._isPenalty()&&n-this._previousMove>500&&(this._penaltyUntil=n+70),this._lastCoords&&Kb(this.mouseCoords,this._lastCoords)>20&&(this._penaltyUntil=n+400),this._lastCoords=this.mouseCoords,this.visible&&this.updatePlacement(),this._previousMove=n}updatePlacement(){const e=20,[n,r]=this.mouseCoords;let i=n+e;i>this.container.clientWidth-this.element.offsetWidth&&(i=n-e-this.element.offsetWidth),this.element.style.left=i+"px",this.element.style.top=Math.min(r+e,this.container.clientHeight-this.element.offsetHeight)+"px"}setContent(e){if(!e||!this.enabled||this._isPenalty()){this.visible&&($e("",this.element),this.visible=!1),this._previousTooltipDatum=void 0;return}$e(e,this.element),this.visible=!0,this.updatePlacement()}clear(){this._previousTooltipDatum=void 0,this.setContent(void 0)}updateWithDatum(e,n){e!==this._previousTooltipDatum&&(this._previousTooltipDatum=e,n||(n=r=>Promise.resolve(I`${JSON.stringify(r)}`)),n(e).then(r=>this.setContent(r)).catch(r=>{if(r!=="debounced")throw r}))}_isPenalty(){return this._penaltyUntil&&this._penaltyUntil>performance.now()}}function Kb(t,e){let n=0;for(let r=0;r<t.length;r++)n+=(t[r]-e[r])**2;return Math.sqrt(n)}const Jb="RawCode",$b="Literal",ex="Property",tx="Identifier",nx="ArrayExpression",rx="BinaryExpression",ix="CallExpression",ox="ConditionalExpression",sx="LogicalExpression",ax="MemberExpression",cx="ObjectExpression",ux="UnaryExpression";function et(t){this.type=t}et.prototype.visit=function(t){let e,n,r;if(t(this))return 1;for(e=lx(this),n=0,r=e.length;n<r;++n)if(e[n].visit(t))return 1};function lx(t){switch(t.type){case nx:return t.elements;case rx:case sx:return[t.left,t.right];case ix:return[t.callee].concat(t.arguments);case ox:return[t.test,t.consequent,t.alternate];case ax:return[t.object,t.property];case cx:return t.properties;case ex:return[t.key,t.value];case ux:return[t.argument];case tx:case $b:case Jb:default:return[]}}var lt,N,S,Ae,W,Oo=1,ni=2,An=3,_t=4,ko=5,bn=6,Ne=7,ri=8,fx=9;lt={},lt[Oo]="Boolean",lt[ni]="<end>",lt[An]="Identifier",lt[_t]="Keyword",lt[ko]="Null",lt[bn]="Numeric",lt[Ne]="Punctuator",lt[ri]="String",lt[fx]="RegularExpression";var hx="ArrayExpression",dx="BinaryExpression",px="CallExpression",gx="ConditionalExpression",Ad="Identifier",mx="Literal",yx="LogicalExpression",Ax="MemberExpression",bx="ObjectExpression",xx="Property",vx="UnaryExpression",de="Unexpected token %0",wx="Unexpected number",Ex="Unexpected string",Sx="Unexpected identifier",Dx="Unexpected reserved word",Cx="Unexpected end of input",gc="Invalid regular expression",mc="Invalid regular expression: missing /",bd="Octal literals are not allowed in strict mode.",Mx="Duplicate data property in object literal not allowed in strict mode",ge="ILLEGAL",ii="Disabled.",Ix=new RegExp("[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]"),Tx=new RegExp("[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]");function Bo(t,e){if(!t)throw new Error("ASSERT: "+e)}function Et(t){return t>=48&&t<=57}function yc(t){return"0123456789abcdefABCDEF".indexOf(t)>=0}function oi(t){return"01234567".indexOf(t)>=0}function Nx(t){return t===32||t===9||t===11||t===12||t===160||t>=5760&&[5760,6158,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279].indexOf(t)>=0}function si(t){return t===10||t===13||t===8232||t===8233}function ai(t){return t===36||t===95||t>=65&&t<=90||t>=97&&t<=122||t===92||t>=128&&Ix.test(String.fromCharCode(t))}function Fo(t){return t===36||t===95||t>=65&&t<=90||t>=97&&t<=122||t>=48&&t<=57||t===92||t>=128&&Tx.test(String.fromCharCode(t))}const Lx={if:1,in:1,do:1,var:1,for:1,new:1,try:1,let:1,this:1,else:1,case:1,void:1,with:1,enum:1,while:1,break:1,catch:1,throw:1,const:1,yield:1,class:1,super:1,return:1,typeof:1,delete:1,switch:1,export:1,import:1,public:1,static:1,default:1,finally:1,extends:1,package:1,private:1,function:1,continue:1,debugger:1,interface:1,protected:1,instanceof:1,implements:1};function xd(){for(;S<Ae;){const t=N.charCodeAt(S);if(Nx(t)||si(t))++S;else break}}function Ac(t){var e,n,r,i=0;for(n=t==="u"?4:2,e=0;e<n;++e)S<Ae&&yc(N[S])?(r=N[S++],i=i*16+"0123456789abcdef".indexOf(r.toLowerCase())):G({},de,ge);return String.fromCharCode(i)}function Ox(){var t,e,n,r;for(t=N[S],e=0,t==="}"&&G({},de,ge);S<Ae&&(t=N[S++],!!yc(t));)e=e*16+"0123456789abcdef".indexOf(t.toLowerCase());return(e>1114111||t!=="}")&&G({},de,ge),e<=65535?String.fromCharCode(e):(n=(e-65536>>10)+55296,r=(e-65536&1023)+56320,String.fromCharCode(n,r))}function vd(){var t,e;for(t=N.charCodeAt(S++),e=String.fromCharCode(t),t===92&&(N.charCodeAt(S)!==117&&G({},de,ge),++S,t=Ac("u"),(!t||t==="\\"||!ai(t.charCodeAt(0)))&&G({},de,ge),e=t);S<Ae&&(t=N.charCodeAt(S),!!Fo(t));)++S,e+=String.fromCharCode(t),t===92&&(e=e.substr(0,e.length-1),N.charCodeAt(S)!==117&&G({},de,ge),++S,t=Ac("u"),(!t||t==="\\"||!Fo(t.charCodeAt(0)))&&G({},de,ge),e+=t);return e}function kx(){var t,e;for(t=S++;S<Ae;){if(e=N.charCodeAt(S),e===92)return S=t,vd();if(Fo(e))++S;else break}return N.slice(t,S)}function Bx(){var t,e,n;return t=S,e=N.charCodeAt(S)===92?vd():kx(),e.length===1?n=An:Lx.hasOwnProperty(e)?n=_t:e==="null"?n=ko:e==="true"||e==="false"?n=Oo:n=An,{type:n,value:e,start:t,end:S}}function bc(){var t=S,e=N.charCodeAt(S),n,r=N[S],i,o,s;switch(e){case 46:case 40:case 41:case 59:case 44:case 123:case 125:case 91:case 93:case 58:case 63:case 126:return++S,{type:Ne,value:String.fromCharCode(e),start:t,end:S};default:if(n=N.charCodeAt(S+1),n===61)switch(e){case 43:case 45:case 47:case 60:case 62:case 94:case 124:case 37:case 38:case 42:return S+=2,{type:Ne,value:String.fromCharCode(e)+String.fromCharCode(n),start:t,end:S};case 33:case 61:return S+=2,N.charCodeAt(S)===61&&++S,{type:Ne,value:N.slice(t,S),start:t,end:S}}}if(s=N.substr(S,4),s===">>>=")return S+=4,{type:Ne,value:s,start:t,end:S};if(o=s.substr(0,3),o===">>>"||o==="<<="||o===">>=")return S+=3,{type:Ne,value:o,start:t,end:S};if(i=o.substr(0,2),r===i[1]&&"+-<>&|".indexOf(r)>=0||i==="=>")return S+=2,{type:Ne,value:i,start:t,end:S};if(i==="//"&&G({},de,ge),"<>=!+-*%&|^/".indexOf(r)>=0)return++S,{type:Ne,value:r,start:t,end:S};G({},de,ge)}function Fx(t){let e="";for(;S<Ae&&yc(N[S]);)e+=N[S++];return e.length===0&&G({},de,ge),ai(N.charCodeAt(S))&&G({},de,ge),{type:bn,value:parseInt("0x"+e,16),start:t,end:S}}function Px(t){let e="0"+N[S++];for(;S<Ae&&oi(N[S]);)e+=N[S++];return(ai(N.charCodeAt(S))||Et(N.charCodeAt(S)))&&G({},de,ge),{type:bn,value:parseInt(e,8),octal:!0,start:t,end:S}}function wd(){var t,e,n;if(n=N[S],Bo(Et(n.charCodeAt(0))||n===".","Numeric literal must start with a decimal digit or a decimal point"),e=S,t="",n!=="."){if(t=N[S++],n=N[S],t==="0"){if(n==="x"||n==="X")return++S,Fx(e);if(oi(n))return Px(e);n&&Et(n.charCodeAt(0))&&G({},de,ge)}for(;Et(N.charCodeAt(S));)t+=N[S++];n=N[S]}if(n==="."){for(t+=N[S++];Et(N.charCodeAt(S));)t+=N[S++];n=N[S]}if(n==="e"||n==="E")if(t+=N[S++],n=N[S],(n==="+"||n==="-")&&(t+=N[S++]),Et(N.charCodeAt(S)))for(;Et(N.charCodeAt(S));)t+=N[S++];else G({},de,ge);return ai(N.charCodeAt(S))&&G({},de,ge),{type:bn,value:parseFloat(t),start:e,end:S}}function zx(){var t="",e,n,r,i,o=!1;for(e=N[S],Bo(e==="'"||e==='"',"String literal must starts with a quote"),n=S,++S;S<Ae;)if(r=N[S++],r===e){e="";break}else if(r==="\\")if(r=N[S++],!r||!si(r.charCodeAt(0)))switch(r){case"u":case"x":N[S]==="{"?(++S,t+=Ox()):t+=Ac(r);break;case"n":t+=`
|
11
|
+
`;break;case"r":t+="\r";break;case"t":t+=" ";break;case"b":t+="\b";break;case"f":t+="\f";break;case"v":t+="\v";break;default:oi(r)?(i="01234567".indexOf(r),i!==0&&(o=!0),S<Ae&&oi(N[S])&&(o=!0,i=i*8+"01234567".indexOf(N[S++]),"0123".indexOf(r)>=0&&S<Ae&&oi(N[S])&&(i=i*8+"01234567".indexOf(N[S++]))),t+=String.fromCharCode(i)):t+=r;break}else r==="\r"&&N[S]===`
|
12
|
+
`&&++S;else{if(si(r.charCodeAt(0)))break;t+=r}return e!==""&&G({},de,ge),{type:ri,value:t,octal:o,start:n,end:S}}function Rx(t,e){let n=t;e.indexOf("u")>=0&&(n=n.replace(/\\u\{([0-9a-fA-F]+)\}/g,(r,i)=>{if(parseInt(i,16)<=1114111)return"x";G({},gc)}).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,"x"));try{new RegExp(n)}catch{G({},gc)}try{return new RegExp(t,e)}catch{return null}}function Ux(){var t,e,n,r,i;for(t=N[S],Bo(t==="/","Regular expression literal must start with a slash"),e=N[S++],n=!1,r=!1;S<Ae;)if(t=N[S++],e+=t,t==="\\")t=N[S++],si(t.charCodeAt(0))&&G({},mc),e+=t;else if(si(t.charCodeAt(0)))G({},mc);else if(n)t==="]"&&(n=!1);else if(t==="/"){r=!0;break}else t==="["&&(n=!0);return r||G({},mc),i=e.substr(1,e.length-2),{value:i,literal:e}}function jx(){var t,e,n;for(e="",n="";S<Ae&&(t=N[S],!!Fo(t.charCodeAt(0)));)++S,t==="\\"&&S<Ae?G({},de,ge):(n+=t,e+=t);return n.search(/[^gimuy]/g)>=0&&G({},gc,n),{value:n,literal:e}}function Gx(){var t,e,n,r;return W=null,xd(),t=S,e=Ux(),n=jx(),r=Rx(e.value,n.value),{literal:e.literal+n.literal,value:r,regex:{pattern:e.value,flags:n.value},start:t,end:S}}function Hx(t){return t.type===An||t.type===_t||t.type===Oo||t.type===ko}function Ed(){if(xd(),S>=Ae)return{type:ni,start:S,end:S};const t=N.charCodeAt(S);return ai(t)?Bx():t===40||t===41||t===59?bc():t===39||t===34?zx():t===46?Et(N.charCodeAt(S+1))?wd():bc():Et(t)?wd():bc()}function Le(){const t=W;return S=t.end,W=Ed(),S=t.end,t}function Sd(){const t=S;W=Ed(),S=t}function Qx(t){const e=new et(hx);return e.elements=t,e}function Dd(t,e,n){const r=new et(t==="||"||t==="&&"?yx:dx);return r.operator=t,r.left=e,r.right=n,r}function Vx(t,e){const n=new et(px);return n.callee=t,n.arguments=e,n}function _x(t,e,n){const r=new et(gx);return r.test=t,r.consequent=e,r.alternate=n,r}function xc(t){const e=new et(Ad);return e.name=t,e}function ci(t){const e=new et(mx);return e.value=t.value,e.raw=N.slice(t.start,t.end),t.regex&&(e.raw==="//"&&(e.raw="/(?:)/"),e.regex=t.regex),e}function Cd(t,e,n){const r=new et(Ax);return r.computed=t==="[",r.object=e,r.property=n,r.computed||(n.member=!0),r}function Yx(t){const e=new et(bx);return e.properties=t,e}function Md(t,e,n){const r=new et(xx);return r.key=e,r.value=n,r.kind=t,r}function Wx(t,e){const n=new et(vx);return n.operator=t,n.argument=e,n.prefix=!0,n}function G(t,e){var n,r=Array.prototype.slice.call(arguments,2),i=e.replace(/%(\d)/g,(o,s)=>(Bo(s<r.length,"Message reference must be in range"),r[s]));throw n=new Error(i),n.index=S,n.description=i,n}function Po(t){t.type===ni&&G(t,Cx),t.type===bn&&G(t,wx),t.type===ri&&G(t,Ex),t.type===An&&G(t,Sx),t.type===_t&&G(t,Dx),G(t,de,t.value)}function be(t){const e=Le();(e.type!==Ne||e.value!==t)&&Po(e)}function K(t){return W.type===Ne&&W.value===t}function vc(t){return W.type===_t&&W.value===t}function Xx(){const t=[];for(S=W.start,be("[");!K("]");)K(",")?(Le(),t.push(null)):(t.push(xn()),K("]")||be(","));return Le(),Qx(t)}function Id(){S=W.start;const t=Le();return t.type===ri||t.type===bn?(t.octal&&G(t,bd),ci(t)):xc(t.value)}function qx(){var t,e,n,r;if(S=W.start,t=W,t.type===An)return n=Id(),be(":"),r=xn(),Md("init",n,r);if(t.type===ni||t.type===Ne)Po(t);else return e=Id(),be(":"),r=xn(),Md("init",e,r)}function Zx(){var t=[],e,n,r,i={},o=String;for(S=W.start,be("{");!K("}");)e=qx(),e.key.type===Ad?n=e.key.name:n=o(e.key.value),r="$"+n,Object.prototype.hasOwnProperty.call(i,r)?G({},Mx):i[r]=!0,t.push(e),K("}")||be(",");return be("}"),Yx(t)}function Kx(){be("(");const t=wc();return be(")"),t}const Jx={if:1};function $x(){var t,e,n;if(K("("))return Kx();if(K("["))return Xx();if(K("{"))return Zx();if(t=W.type,S=W.start,t===An||Jx[W.value])n=xc(Le().value);else if(t===ri||t===bn)W.octal&&G(W,bd),n=ci(Le());else{if(t===_t)throw new Error(ii);t===Oo?(e=Le(),e.value=e.value==="true",n=ci(e)):t===ko?(e=Le(),e.value=null,n=ci(e)):K("/")||K("/=")?(n=ci(Gx()),Sd()):Po(Le())}return n}function ev(){const t=[];if(be("("),!K(")"))for(;S<Ae&&(t.push(xn()),!K(")"));)be(",");return be(")"),t}function tv(){S=W.start;const t=Le();return Hx(t)||Po(t),xc(t.value)}function nv(){return be("."),tv()}function rv(){be("[");const t=wc();return be("]"),t}function iv(){var t,e,n;for(t=$x();;)if(K("."))n=nv(),t=Cd(".",t,n);else if(K("("))e=ev(),t=Vx(t,e);else if(K("["))n=rv(),t=Cd("[",t,n);else break;return t}function Td(){const t=iv();if(W.type===Ne&&(K("++")||K("--")))throw new Error(ii);return t}function zo(){var t,e;if(W.type!==Ne&&W.type!==_t)e=Td();else{if(K("++")||K("--"))throw new Error(ii);if(K("+")||K("-")||K("~")||K("!"))t=Le(),e=zo(),e=Wx(t.value,e);else{if(vc("delete")||vc("void")||vc("typeof"))throw new Error(ii);e=Td()}}return e}function Nd(t){let e=0;if(t.type!==Ne&&t.type!==_t)return 0;switch(t.value){case"||":e=1;break;case"&&":e=2;break;case"|":e=3;break;case"^":e=4;break;case"&":e=5;break;case"==":case"!=":case"===":case"!==":e=6;break;case"<":case">":case"<=":case">=":case"instanceof":case"in":e=7;break;case"<<":case">>":case">>>":e=8;break;case"+":case"-":e=9;break;case"*":case"/":case"%":e=11;break}return e}function ov(){var t,e,n,r,i,o,s,a,c,u;if(t=W,c=zo(),r=W,i=Nd(r),i===0)return c;for(r.prec=i,Le(),e=[t,W],s=zo(),o=[c,r,s];(i=Nd(W))>0;){for(;o.length>2&&i<=o[o.length-2].prec;)s=o.pop(),a=o.pop().value,c=o.pop(),e.pop(),n=Dd(a,c,s),o.push(n);r=Le(),r.prec=i,o.push(r),e.push(W),n=zo(),o.push(n)}for(u=o.length-1,n=o[u],e.pop();u>1;)e.pop(),n=Dd(o[u-1].value,o[u-2],n),u-=2;return n}function xn(){var t,e,n;return t=ov(),K("?")&&(Le(),e=xn(),be(":"),n=xn(),t=_x(t,e,n)),t}function wc(){const t=xn();if(K(","))throw new Error(ii);return t}function sv(t){N=t,S=0,Ae=N.length,W=null,Sd();const e=wc();if(W.type!==ni)throw new Error("Unexpect token after expression.");return e}var av={NaN:"NaN",E:"Math.E",LN2:"Math.LN2",LN10:"Math.LN10",LOG2E:"Math.LOG2E",LOG10E:"Math.LOG10E",PI:"Math.PI",SQRT1_2:"Math.SQRT1_2",SQRT2:"Math.SQRT2",MIN_VALUE:"Number.MIN_VALUE",MAX_VALUE:"Number.MAX_VALUE"};function cv(t){function e(s,a,c,u){let f=t(a[0]);return c&&(f=c+"("+f+")",c.lastIndexOf("new ",0)===0&&(f="("+f+")")),f+"."+s+(u<0?"":u===0?"()":"("+a.slice(1).map(t).join(",")+")")}function n(s,a,c){return u=>e(s,u,a,c)}const r="new Date",i="String",o="RegExp";return{isNaN:"Number.isNaN",isFinite:"Number.isFinite",abs:"Math.abs",acos:"Math.acos",asin:"Math.asin",atan:"Math.atan",atan2:"Math.atan2",ceil:"Math.ceil",cos:"Math.cos",exp:"Math.exp",floor:"Math.floor",log:"Math.log",max:"Math.max",min:"Math.min",pow:"Math.pow",random:"Math.random",round:"Math.round",sin:"Math.sin",sqrt:"Math.sqrt",tan:"Math.tan",clamp:function(s){s.length<3&&te("Missing arguments to clamp function."),s.length>3&&te("Too many arguments to clamp function.");const a=s.map(t);return"Math.max("+a[1]+", Math.min("+a[2]+","+a[0]+"))"},now:"Date.now",utc:"Date.UTC",datetime:r,date:n("getDate",r,0),day:n("getDay",r,0),year:n("getFullYear",r,0),month:n("getMonth",r,0),hours:n("getHours",r,0),minutes:n("getMinutes",r,0),seconds:n("getSeconds",r,0),milliseconds:n("getMilliseconds",r,0),time:n("getTime",r,0),timezoneoffset:n("getTimezoneOffset",r,0),utcdate:n("getUTCDate",r,0),utcday:n("getUTCDay",r,0),utcyear:n("getUTCFullYear",r,0),utcmonth:n("getUTCMonth",r,0),utchours:n("getUTCHours",r,0),utcminutes:n("getUTCMinutes",r,0),utcseconds:n("getUTCSeconds",r,0),utcmilliseconds:n("getUTCMilliseconds",r,0),length:n("length",null,-1),parseFloat:"parseFloat",parseInt:"parseInt",upper:n("toUpperCase",i,0),lower:n("toLowerCase",i,0),substring:n("substring",i),split:n("split",i),trim:n("trim",i,0),regexp:o,test:n("test",o),if:function(s){s.length<3&&te("Missing arguments to if function."),s.length>3&&te("Too many arguments to if function.");const a=s.map(t);return"("+a[0]+"?"+a[1]+":"+a[2]+")"}}}function uv(t){const e=t&&t.length-1;return e&&(t[0]==='"'&&t[e]==='"'||t[0]==="'"&&t[e]==="'")?t.slice(1,-1):t}function lv(t){t=t||{};const e=t.allowed?qi(t.allowed):{},n=t.forbidden?qi(t.forbidden):{},r=t.constants||av,i=(t.functions||cv)(l),o=t.globalvar,s=t.fieldvar,a=Ce(o)?o:p=>`${o}["${p}"]`;let c={},u={},f=0;function l(p){if(se(p))return p;const g=h[p.type];return g==null&&te("Unsupported type: "+p.type),g(p)}const h={Literal:p=>p.raw,Identifier:p=>{const g=p.name;return f>0?g:an(n,g)?te("Illegal identifier: "+g):an(r,g)?r[g]:an(e,g)?g:(c[g]=1,a(g))},MemberExpression:p=>{const g=!p.computed,m=l(p.object);g&&(f+=1);const y=l(p.property);return m===s&&(u[uv(y)]=1),g&&(f-=1),m+(g?"."+y:"["+y+"]")},CallExpression:p=>{p.callee.type!=="Identifier"&&te("Illegal callee type: "+p.callee.type);const g=p.callee.name,m=p.arguments,y=an(i,g)&&i[g];return y||te("Unrecognized function: "+g),Ce(y)?y(m):y+"("+m.map(l).join(",")+")"},ArrayExpression:p=>"["+p.elements.map(l).join(",")+"]",BinaryExpression:p=>"("+l(p.left)+" "+p.operator+" "+l(p.right)+")",UnaryExpression:p=>"("+p.operator+l(p.argument)+")",ConditionalExpression:p=>"("+l(p.test)+"?"+l(p.consequent)+":"+l(p.alternate)+")",LogicalExpression:p=>"("+l(p.left)+p.operator+l(p.right)+")",ObjectExpression:p=>"{"+p.properties.map(l).join(",")+"}",Property:p=>{f+=1;const g=l(p.key);return f-=1,g+":"+l(p.value)}};function d(p){const g={code:l(p),globals:Object.keys(c),fields:Object.keys(u)};return c={},u={},g}return d.functions=i,d.constants=r,d}function Ec(t,e={}){const n=lv({forbidden:[],allowed:["datum"],globalvar:"global",fieldvar:"datum"});try{const r=sv(t),i=n(r),o=Function("datum","global",`"use strict"; return (${i.code});`),s=a=>o(a,e);return s.fields=i.fields,s}catch(r){throw new Error(`Invalid expression: ${t}, ${r.message}`)}}function fv(){let t=0;const e=new Map,n=r=>{let i=e.get(r);return i===void 0&&(i=t++,e.set(r,i)),i};return n.addAll=r=>{for(const i of r)n(i)},n.invert=r=>{for(const i of e.entries())if(i[1]==r)return i[0]},n.domain=()=>[...e.keys()],n}function hv(t,e){const n={};e||(e=t.encoding);for(const[r,i]of Object.entries(e)){if(!i)continue;const o=t.unitView.getScaleResolution(St(i)&&i.resolutionChannel||r);n[r]=dv(e[r],o==null?void 0:o.getScale(),t.unitView.getAccessor(r),r)}return n}function dv(t,e,n,r){let i;if(vn(t))i=o=>t.value,i.constant=!0,i.constantValue=!0,i.accessor=void 0;else if(n)if(r=="text")i=o=>{},i.accessor=n,i.constant=n.constant;else{if(!e)throw new Error(`Missing scale! "${r}": ${JSON.stringify(t)}`);if(i=o=>e(n(o)),Qt(e.type)){const o=fv();o.addAll(e.domain()),i.indexer=s=>o(n(s))}i.constant=n.constant,i.accessor=n,i.scale=e}else throw new Error(`Missing value or accessor (field, expr, datum) on channel "${r}": ${JSON.stringify(t)}`);return i.invert=e?o=>e.invert(o):o=>{throw new Error("No scale available, cannot invert: "+JSON.stringify(t))},i.channelDef=t,i.applyMetadata=o=>{for(const s in i)s in i&&(o[s]=i[s]);return o},i}function vn(t){return t&&"value"in t}function wn(t){return t&&"field"in t}function Ro(t){return t&&"datum"in t}function St(t){return wn(t)||Ro(t)||Sc(t)||Ld(t)}function Uo(t,e){const n=t.mark.encoding[e];if(St(n))return n;throw new Error("Not a channel def with scale!")}function Ld(t){return t&&"chrom"in t}function Sc(t){return t&&"expr"in t}const Kn=["x","y"],Dc={x:"x2",y:"y2",size:"size2",color:"color2"},Od=Object.fromEntries(Object.entries(Dc).map(t=>[t[1],t[0]]));function ui(t){return t in Od}function pv(t){const e=Dc[t];if(e)return e;throw new Error(`${t} has no secondary channel!`)}function En(t){return Od[t]||t}function jo(t){return Kn.includes(En(t))}function Sn(t){return["color","fill","stroke"].includes(En(t))}function Go(t){return["shape","squeeze"].includes(t)}function kd(t){switch(t){case"shape":return["circle","square","triangle-up","cross","diamond","triangle-down","triangle-right","triangle-left"]}}function Bd(t){if(!Go(t))throw new Error("Not a discrete channel: "+t);const e=new Map(kd(t).map((n,r)=>[n,r]));return n=>{const r=e.get(n);if(r!==void 0)return r;throw new Error(`Invalid value for "${t}" channel: ${n}`)}}function X(t,e=t){if(/^[A-Za-z0-9_]+$/.test(t)){const n=new Function("datum",`return datum[${JSON.stringify(t)}]`);return Z(n,[t],e)}else return Hi(t)}class gv{constructor(){this.accessorCreators=[],this.register(e=>{if(wn(e))try{const n=X(e.field);return n.constant=!1,n.fields=Tl(n),n}catch(n){throw new Error(`Invalid field definition: ${n.message}`)}}),this.register(e=>Sc(e)?mv(e.expr):void 0),this.register(e=>{if(Ro(e)){const n=T1(e.datum);return n.constant=!0,n.fields=[],n}})}register(e){this.accessorCreators.push(e)}createAccessor(e){for(const n of this.accessorCreators){const r=n(e);if(r)return r}}}function mv(t){const e=Ec(t);return e.constant=e.fields.length==0,e}/* @license twgl.js 4.21.2 Copyright (c) 2015, Gregg Tavares All Rights Reserved.
|
13
|
+
Available via the MIT license.
|
14
|
+
see: http://github.com/greggman/twgl.js for details */const Cc=5120,li=5121,Mc=5122,Ic=5123,Tc=5124,Nc=5125,Lc=5126,yv=32819,Av=32820,bv=33635,xv=5131,vv=33640,wv=35899,Ev=35902,Sv=36269,Dv=34042,Fd={};{const t=Fd;t[Cc]=Int8Array,t[li]=Uint8Array,t[Mc]=Int16Array,t[Ic]=Uint16Array,t[Tc]=Int32Array,t[Nc]=Uint32Array,t[Lc]=Float32Array,t[yv]=Uint16Array,t[Av]=Uint16Array,t[bv]=Uint16Array,t[xv]=Uint16Array,t[vv]=Uint32Array,t[wv]=Uint32Array,t[Ev]=Uint32Array,t[Sv]=Uint32Array,t[Dv]=Uint32Array}function Oc(t){if(t instanceof Int8Array)return Cc;if(t instanceof Uint8Array||t instanceof Uint8ClampedArray)return li;if(t instanceof Int16Array)return Mc;if(t instanceof Uint16Array)return Ic;if(t instanceof Int32Array)return Tc;if(t instanceof Uint32Array)return Nc;if(t instanceof Float32Array)return Lc;throw new Error("unsupported typed array type")}function Cv(t){if(t===Int8Array)return Cc;if(t===Uint8Array||t===Uint8ClampedArray)return li;if(t===Int16Array)return Mc;if(t===Uint16Array)return Ic;if(t===Int32Array)return Tc;if(t===Uint32Array)return Nc;if(t===Float32Array)return Lc;throw new Error("unsupported typed array type")}function Mv(t){const e=Fd[t];if(!e)throw new Error("unknown gl type");return e}const Ho=typeof SharedArrayBuffer!="undefined"?function(e){return e&&e.buffer&&(e.buffer instanceof ArrayBuffer||e.buffer instanceof SharedArrayBuffer)}:function(e){return e&&e.buffer&&e.buffer instanceof ArrayBuffer};function Iv(...t){console.error(...t)}function Pd(...t){console.warn(...t)}function Tv(t,e){return typeof WebGLBuffer!="undefined"&&e instanceof WebGLBuffer}function zd(t,e){return typeof WebGLRenderbuffer!="undefined"&&e instanceof WebGLRenderbuffer}function Qo(t,e){return typeof WebGLTexture!="undefined"&&e instanceof WebGLTexture}function Nv(t,e){return typeof WebGLSampler!="undefined"&&e instanceof WebGLSampler}const Rd=35044,ft=34962,Lv=34963,Ov=34660,kv=5120,Bv=5121,Fv=5122,Pv=5123,zv=5124,Rv=5125,Uv=5126,Ud={attribPrefix:""};function jd(t,e,n,r,i){t.bindBuffer(e,n),t.bufferData(e,r,i||Rd)}function Gd(t,e,n,r){if(Tv(t,e))return e;n=n||ft;const i=t.createBuffer();return jd(t,n,i,e,r),i}function Hd(t){return t==="indices"}function jv(t){return t instanceof Int8Array||t instanceof Uint8Array}function Gv(t){return t===Int8Array||t===Uint8Array}function Hv(t){return t.length?t:t.data}const Qv=/coord|texture/i,Vv=/color|colour/i;function Qd(t,e){let n;if(Qv.test(t)?n=2:Vv.test(t)?n=4:n=3,e%n>0)throw new Error(`Can not guess numComponents for attribute '${t}'. Tried ${n} but ${e} values is not evenly divisible by ${n}. You should specify it.`);return n}function _v(t,e){return t.numComponents||t.size||Qd(e,Hv(t).length)}function kc(t,e){if(Ho(t))return t;if(Ho(t.data))return t.data;Array.isArray(t)&&(t={data:t});let n=t.type;return n||(Hd(e)?n=Uint16Array:n=Float32Array),new n(t.data)}function Yv(t,e){const n={};return Object.keys(e).forEach(function(r){if(!Hd(r)){const i=e[r],o=i.attrib||i.name||i.attribName||Ud.attribPrefix+r;if(i.value){if(!Array.isArray(i.value)&&!Ho(i.value))throw new Error("array.value is not array or typedarray");n[o]={value:i.value}}else{let s,a,c,u;if(i.buffer&&i.buffer instanceof WebGLBuffer)s=i.buffer,u=i.numComponents||i.size,a=i.type,c=i.normalize;else if(typeof i=="number"||typeof i.data=="number"){const f=i.data||i,l=i.type||Float32Array,h=f*l.BYTES_PER_ELEMENT;a=Cv(l),c=i.normalize!==void 0?i.normalize:Gv(l),u=i.numComponents||i.size||Qd(r,f),s=t.createBuffer(),t.bindBuffer(ft,s),t.bufferData(ft,h,i.drawType||Rd)}else{const f=kc(i,r);s=Gd(t,f,void 0,i.drawType),a=Oc(f),c=i.normalize!==void 0?i.normalize:jv(f),u=_v(i,r)}n[o]={buffer:s,numComponents:u,type:a,normalize:c,stride:i.stride||0,offset:i.offset||0,divisor:i.divisor===void 0?void 0:i.divisor,drawType:i.drawType}}}}),t.bindBuffer(ft,null),n}function Wv(t,e,n,r){n=kc(n),r!==void 0?(t.bindBuffer(ft,e.buffer),t.bufferSubData(ft,r,n)):jd(t,ft,e.buffer,n,e.drawType)}function Xv(t,e){return e===kv||e===Bv?1:e===Fv||e===Pv?2:e===zv||e===Rv||e===Uv?4:0}const Bc=["position","positions","a_position"];function qv(t,e){let n,r;for(r=0;r<Bc.length&&(n=Bc[r],!(n in e||(n=Ud.attribPrefix+n,n in e)));++r);r===Bc.length&&(n=Object.keys(e)[0]);const i=e[n];t.bindBuffer(ft,i.buffer);const o=t.getBufferParameter(ft,Ov);t.bindBuffer(ft,null);const s=Xv(t,i.type),a=o/s,c=i.numComponents||i.size,u=a/c;if(u%1!=0)throw new Error(`numComponents ${c} not correct for length ${length}`);return u}function Zv(t,e,n){const r=Yv(t,e),i=Object.assign({},n||{});i.attribs=Object.assign({},n?n.attribs:{},r);const o=e.indices;if(o){const s=kc(o,"indices");i.indices=Gd(t,s,Lv),i.numElements=s.length,i.elementType=Oc(s)}else i.numElements||(i.numElements=qv(t,i.attribs));return i}function Jn(t){return!!t.texStorage2D}const Fc=function(){const t={},e={};function n(r){const i=r.constructor.name;if(!t[i]){for(const o in r)if(typeof r[o]=="number"){const s=e[r[o]];e[r[o]]=s?`${s} | ${o}`:o}t[i]=!0}}return function(i,o){return n(i),e[o]||(typeof o=="number"?`0x${o.toString(16)}`:o)}}(),Yt={textureColor:new Uint8Array([128,192,255,255]),textureOptions:{},crossOrigin:void 0},$n=Ho,Vd=function(){let t;return function(){return t=t||(typeof document!="undefined"&&document.createElement?document.createElement("canvas").getContext("2d"):null),t}}(),_d=6406,ht=6407,J=6408,Yd=6409,Wd=6410,fi=6402,Xd=34041,Vo=33071,Kv=9728,Jv=9729,Dt=3553,Ct=34067,Wt=32879,Xt=35866,_o=34069,$v=34070,ew=34071,tw=34072,nw=34073,rw=34074,Pc=10241,zc=10240,Yo=10242,Wo=10243,qd=32882,iw=33082,ow=33083,sw=33084,aw=33085,Rc=3317,Zd=3314,Kd=32878,Jd=3316,$d=3315,e0=32877,cw=37443,uw=37441,lw=37440,fw=33321,hw=36756,dw=33325,pw=33326,gw=33330,mw=33329,yw=33338,Aw=33337,bw=33340,xw=33339,vw=33323,ww=36757,Ew=33327,Sw=33328,Dw=33336,Cw=33335,Mw=33332,Iw=33331,Tw=33334,Nw=33333,Lw=32849,Ow=35905,kw=36194,Bw=36758,Fw=35898,Pw=35901,zw=34843,Rw=34837,Uw=36221,jw=36239,Gw=36215,Hw=36233,Qw=36209,Vw=36227,_w=32856,Yw=35907,Ww=36759,Xw=32855,qw=32854,Zw=32857,Kw=34842,Jw=34836,$w=36220,e4=36238,t4=36975,n4=36214,r4=36232,i4=36226,o4=36208,s4=33189,a4=33190,c4=36012,u4=36013,l4=35056,qt=5120,$=5121,Xo=5122,er=5123,qo=5124,Dn=5125,xe=5126,t0=32819,n0=32820,r0=33635,tt=5131,hi=36193,Uc=33640,f4=35899,h4=35902,d4=36269,p4=34042,Zo=33319,tr=33320,Ko=6403,nr=36244,rr=36248,Cn=36249;let jc;function Jo(t){if(!jc){const e={};e[_d]={textureFormat:_d,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[$,tt,hi,xe]},e[Yd]={textureFormat:Yd,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1,2,2,4],type:[$,tt,hi,xe]},e[Wd]={textureFormat:Wd,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2,4,4,8],type:[$,tt,hi,xe]},e[ht]={textureFormat:ht,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,6,6,12,2],type:[$,tt,hi,xe,r0]},e[J]={textureFormat:J,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,8,8,16,2,2],type:[$,tt,hi,xe,t0,n0]},e[fi]={textureFormat:fi,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[Dn,er]},e[fw]={textureFormat:Ko,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[1],type:[$]},e[hw]={textureFormat:Ko,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[1],type:[qt]},e[dw]={textureFormat:Ko,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4,2],type:[xe,tt]},e[pw]={textureFormat:Ko,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[4],type:[xe]},e[gw]={textureFormat:nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[$]},e[mw]={textureFormat:nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[1],type:[qt]},e[Mw]={textureFormat:nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[er]},e[Iw]={textureFormat:nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[Xo]},e[Tw]={textureFormat:nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Dn]},e[Nw]={textureFormat:nr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[qo]},e[vw]={textureFormat:Zo,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[2],type:[$]},e[ww]={textureFormat:Zo,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[2],type:[qt]},e[Ew]={textureFormat:Zo,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[8,4],type:[xe,tt]},e[Sw]={textureFormat:Zo,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[8],type:[xe]},e[Dw]={textureFormat:tr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[$]},e[Cw]={textureFormat:tr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2],type:[qt]},e[yw]={textureFormat:tr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[er]},e[Aw]={textureFormat:tr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Xo]},e[bw]={textureFormat:tr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Dn]},e[xw]={textureFormat:tr,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[qo]},e[Lw]={textureFormat:ht,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3],type:[$]},e[Ow]={textureFormat:ht,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[$]},e[kw]={textureFormat:ht,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[3,2],type:[$,r0]},e[Bw]={textureFormat:ht,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[3],type:[qt]},e[Fw]={textureFormat:ht,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[xe,tt,f4]},e[Pw]={textureFormat:ht,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6,4],type:[xe,tt,h4]},e[zw]={textureFormat:ht,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[12,6],type:[xe,tt]},e[Rw]={textureFormat:ht,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[xe]},e[Uw]={textureFormat:rr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[$]},e[jw]={textureFormat:rr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[3],type:[qt]},e[Gw]={textureFormat:rr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[er]},e[Hw]={textureFormat:rr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[6],type:[Xo]},e[Qw]={textureFormat:rr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[Dn]},e[Vw]={textureFormat:rr,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[12],type:[qo]},e[_w]={textureFormat:J,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[$]},e[Yw]={textureFormat:J,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[$]},e[Ww]={textureFormat:J,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[4],type:[qt]},e[Xw]={textureFormat:J,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2,4],type:[$,n0,Uc]},e[qw]={textureFormat:J,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4,2],type:[$,t0]},e[Zw]={textureFormat:J,colorRenderable:!0,textureFilterable:!0,bytesPerElement:[4],type:[Uc]},e[Kw]={textureFormat:J,colorRenderable:!1,textureFilterable:!0,bytesPerElement:[16,8],type:[xe,tt]},e[Jw]={textureFormat:J,colorRenderable:!1,textureFilterable:!1,bytesPerElement:[16],type:[xe]},e[$w]={textureFormat:Cn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[$]},e[e4]={textureFormat:Cn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[qt]},e[t4]={textureFormat:Cn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Uc]},e[n4]={textureFormat:Cn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[er]},e[r4]={textureFormat:Cn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[8],type:[Xo]},e[i4]={textureFormat:Cn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[qo]},e[o4]={textureFormat:Cn,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[16],type:[Dn]},e[s4]={textureFormat:fi,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[2,4],type:[er,Dn]},e[a4]={textureFormat:fi,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[Dn]},e[c4]={textureFormat:fi,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[xe]},e[l4]={textureFormat:Xd,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[p4]},e[u4]={textureFormat:Xd,colorRenderable:!0,textureFilterable:!1,bytesPerElement:[4],type:[d4]},Object.keys(e).forEach(function(n){const r=e[n];r.bytesPerElementMap={},r.bytesPerElement.forEach(function(i,o){const s=r.type[o];r.bytesPerElementMap[s]=i})}),jc=e}return jc[t]}function g4(t,e){const n=Jo(t);if(!n)throw"unknown internal format";const r=n.bytesPerElementMap[e];if(r===void 0)throw"unknown internal format";return r}function ir(t){const e=Jo(t);if(!e)throw"unknown internal format";return{format:e.textureFormat,type:e.type[0]}}function i0(t){return(t&t-1)==0}function m4(t,e,n,r){if(!Jn(t))return i0(e)&&i0(n);const i=Jo(r);if(!i)throw"unknown internal format";return i.colorRenderable&&i.textureFilterable}function y4(t){const e=Jo(t);if(!e)throw"unknown internal format";return e.textureFilterable}function o0(t,e,n){return $n(e)?Oc(e):n||$}function $o(t,e,n,r,i){if(i%1!=0)throw"can't guess dimensions";if(!n&&!r){const o=Math.sqrt(i/(e===Ct?6:1));o%1==0?(n=o,r=o):(n=i,r=1)}else if(r){if(!n&&(n=i/r,n%1))throw"can't guess dimensions"}else if(r=i/n,r%1)throw"can't guess dimensions";return{width:n,height:r}}function or(t,e){e.colorspaceConversion!==void 0&&t.pixelStorei(cw,e.colorspaceConversion),e.premultiplyAlpha!==void 0&&t.pixelStorei(uw,e.premultiplyAlpha),e.flipY!==void 0&&t.pixelStorei(lw,e.flipY)}function s0(t){t.pixelStorei(Rc,4),Jn(t)&&(t.pixelStorei(Zd,0),t.pixelStorei(Kd,0),t.pixelStorei(Jd,0),t.pixelStorei($d,0),t.pixelStorei(e0,0))}function A4(t,e,n,r){r.minMag&&(n.call(t,e,Pc,r.minMag),n.call(t,e,zc,r.minMag)),r.min&&n.call(t,e,Pc,r.min),r.mag&&n.call(t,e,zc,r.mag),r.wrap&&(n.call(t,e,Yo,r.wrap),n.call(t,e,Wo,r.wrap),(e===Wt||Nv(t,e))&&n.call(t,e,qd,r.wrap)),r.wrapR&&n.call(t,e,qd,r.wrapR),r.wrapS&&n.call(t,e,Yo,r.wrapS),r.wrapT&&n.call(t,e,Wo,r.wrapT),r.minLod&&n.call(t,e,iw,r.minLod),r.maxLod&&n.call(t,e,ow,r.maxLod),r.baseLevel&&n.call(t,e,sw,r.baseLevel),r.maxLevel&&n.call(t,e,aw,r.maxLevel)}function a0(t,e,n){const r=n.target||Dt;t.bindTexture(r,e),A4(t,r,t.texParameteri,n)}function b4(t){return t=t||Yt.textureColor,$n(t)?t:new Uint8Array([t[0]*255,t[1]*255,t[2]*255,t[3]*255])}function Gc(t,e,n,r,i,o){n=n||Yt.textureOptions,o=o||J;const s=n.target||Dt;if(r=r||n.width,i=i||n.height,t.bindTexture(s,e),m4(t,r,i,o))t.generateMipmap(s);else{const a=y4(o)?Jv:Kv;t.texParameteri(s,Pc,a),t.texParameteri(s,zc,a),t.texParameteri(s,Yo,Vo),t.texParameteri(s,Wo,Vo)}}function di(t){return t.auto===!0||t.auto===void 0&&t.level===void 0}function Hc(t,e){return e=e||{},e.cubeFaceOrder||[_o,$v,ew,tw,nw,rw]}function Qc(t,e){const r=Hc(t,e).map(function(i,o){return{face:i,ndx:o}});return r.sort(function(i,o){return i.face-o.face}),r}function c0(t,e,n,r){r=r||Yt.textureOptions;const i=r.target||Dt,o=r.level||0;let s=n.width,a=n.height;const c=r.internalFormat||r.format||J,u=ir(c),f=r.format||u.format,l=r.type||u.type;if(or(t,r),t.bindTexture(i,e),i===Ct){const h=n.width,d=n.height;let p,g;if(h/6===d)p=d,g=[0,0,1,0,2,0,3,0,4,0,5,0];else if(d/6===h)p=h,g=[0,0,0,1,0,2,0,3,0,4,0,5];else if(h/3==d/2)p=h/3,g=[0,0,1,0,2,0,0,1,1,1,2,1];else if(h/2==d/3)p=h/2,g=[0,0,1,0,0,1,1,1,0,2,1,2];else throw"can't figure out cube map from element: "+(n.src?n.src:n.nodeName);const m=Vd();m?(m.canvas.width=p,m.canvas.height=p,s=p,a=p,Qc(t,r).forEach(function(y){const w=g[y.ndx*2+0]*p,x=g[y.ndx*2+1]*p;m.drawImage(n,w,x,p,p,0,0,p,p),t.texImage2D(y.face,o,c,f,l,m.canvas)}),m.canvas.width=1,m.canvas.height=1):typeof createImageBitmap!="undefined"&&(s=p,a=p,Qc(t,r).forEach(function(y){const w=g[y.ndx*2+0]*p,x=g[y.ndx*2+1]*p;t.texImage2D(y.face,o,c,p,p,0,f,l,null),createImageBitmap(n,w,x,p,p,{premultiplyAlpha:"none",colorSpaceConversion:"none"}).then(function(E){or(t,r),t.bindTexture(i,e),t.texImage2D(y.face,o,c,f,l,E),di(r)&&Gc(t,e,r,s,a,c)})}))}else if(i===Wt||i===Xt){const h=Math.min(n.width,n.height),d=Math.max(n.width,n.height),p=d/h;if(p%1!=0)throw"can not compute 3D dimensions of element";const g=n.width===d?1:0,m=n.height===d?1:0;t.pixelStorei(Rc,1),t.pixelStorei(Zd,n.width),t.pixelStorei(Kd,0),t.pixelStorei(e0,0),t.texImage3D(i,o,c,h,h,h,0,f,l,null);for(let y=0;y<p;++y){const w=y*h*g,x=y*h*m;t.pixelStorei(Jd,w),t.pixelStorei($d,x),t.texSubImage3D(i,o,0,0,y,h,h,1,f,l,n)}s0(t)}else t.texImage2D(i,o,c,f,l,n);di(r)&&Gc(t,e,r,s,a,c),a0(t,e,r)}function pi(){}function x4(t){if(typeof document!="undefined"){const e=document.createElement("a");return e.href=t,e.hostname===location.hostname&&e.port===location.port&&e.protocol===location.protocol}else{const e=new URL(location.href).origin;return new URL(t,location.href).origin===e}}function v4(t,e){return e===void 0&&!x4(t)?"anonymous":e}function w4(t,e,n){n=n||pi;let r;if(e=e!==void 0?e:Yt.crossOrigin,e=v4(t,e),typeof Image!="undefined"){r=new Image,e!==void 0&&(r.crossOrigin=e);const i=function(){r.removeEventListener("error",o),r.removeEventListener("load",s),r=null},o=function(){const c="couldn't load image: "+t;Iv(c),n(c,r),i()},s=function(){n(null,r),i()};return r.addEventListener("error",o),r.addEventListener("load",s),r.src=t,r}else if(typeof ImageBitmap!="undefined"){let i,o;const s=function(){n(i,o)},a={};e&&(a.mode="cors"),fetch(t,a).then(function(c){if(!c.ok)throw c;return c.blob()}).then(function(c){return createImageBitmap(c,{premultiplyAlpha:"none",colorSpaceConversion:"none"})}).then(function(c){o=c,setTimeout(s)}).catch(function(c){i=c,setTimeout(s)}),r=null}return r}function u0(t){return typeof ImageBitmap!="undefined"&&t instanceof ImageBitmap||typeof ImageData!="undefined"&&t instanceof ImageData||typeof HTMLElement!="undefined"&&t instanceof HTMLElement}function Vc(t,e,n){return u0(t)?(setTimeout(function(){n(null,t)}),t):w4(t,e,n)}function _c(t,e,n){n=n||Yt.textureOptions;const r=n.target||Dt;if(t.bindTexture(r,e),n.color===!1)return;const i=b4(n.color);if(r===Ct)for(let o=0;o<6;++o)t.texImage2D(_o+o,0,J,1,1,0,J,$,i);else r===Wt||r===Xt?t.texImage3D(r,0,J,1,1,1,0,J,$,i):t.texImage2D(r,0,J,1,1,0,J,$,i)}function E4(t,e,n,r){return r=r||pi,n=n||Yt.textureOptions,_c(t,e,n),n=Object.assign({},n),Vc(n.src,n.crossOrigin,function(o,s){o?r(o,e,s):(c0(t,e,s,n),r(null,e,s))})}function S4(t,e,n,r){r=r||pi;const i=n.src;if(i.length!==6)throw"there must be 6 urls for a cubemap";const o=n.level||0,s=n.internalFormat||n.format||J,a=ir(s),c=n.format||a.format,u=n.type||$,f=n.target||Dt;if(f!==Ct)throw"target must be TEXTURE_CUBE_MAP";_c(t,e,n),n=Object.assign({},n);let l=6;const h=[],d=Hc(t,n);let p;function g(m){return function(y,w){--l,y?h.push(y):w.width!==w.height?h.push("cubemap face img is not a square: "+w.src):(or(t,n),t.bindTexture(f,e),l===5?Hc().forEach(function(x){t.texImage2D(x,o,s,c,u,w)}):t.texImage2D(m,o,s,c,u,w),di(n)&&t.generateMipmap(f)),l===0&&r(h.length?h:void 0,e,p)}}p=i.map(function(m,y){return Vc(m,n.crossOrigin,g(d[y]))})}function D4(t,e,n,r){r=r||pi;const i=n.src,o=n.internalFormat||n.format||J,s=ir(o),a=n.format||s.format,c=n.type||$,u=n.target||Xt;if(u!==Wt&&u!==Xt)throw"target must be TEXTURE_3D or TEXTURE_2D_ARRAY";_c(t,e,n),n=Object.assign({},n);let f=i.length;const l=[];let h;const d=n.level||0;let p=n.width,g=n.height;const m=i.length;let y=!0;function w(x){return function(E,b){if(--f,E)l.push(E);else{if(or(t,n),t.bindTexture(u,e),y){y=!1,p=n.width||b.width,g=n.height||b.height,t.texImage3D(u,d,o,p,g,m,0,a,c,null);for(let A=0;A<m;++A)t.texSubImage3D(u,d,0,0,A,p,g,1,a,c,b)}else{let A=b,v;(b.width!==p||b.height!==g)&&(v=Vd(),A=v.canvas,v.canvas.width=p,v.canvas.height=g,v.drawImage(b,0,0,p,g)),t.texSubImage3D(u,d,0,0,x,p,g,1,a,c,A),v&&A===v.canvas&&(v.canvas.width=0,v.canvas.height=0)}di(n)&&t.generateMipmap(u)}f===0&&r(l.length?l:void 0,e,h)}}h=i.map(function(x,E){return Vc(x,n.crossOrigin,w(E))})}function l0(t,e,n,r){r=r||Yt.textureOptions;const i=r.target||Dt;t.bindTexture(i,e);let o=r.width,s=r.height,a=r.depth;const c=r.level||0,u=r.internalFormat||r.format||J,f=ir(u),l=r.format||f.format,h=r.type||o0(t,n,f.type);if($n(n))n instanceof Uint8ClampedArray&&(n=new Uint8Array(n.buffer));else{const m=Mv(h);n=new m(n)}const d=g4(u,h),p=n.byteLength/d;if(p%1)throw"length wrong size for format: "+Fc(t,l);let g;if(i===Wt||i===Xt)if(!o&&!s&&!a){const m=Math.cbrt(p);if(m%1!=0)throw"can't guess cube size of array of numElements: "+p;o=m,s=m,a=m}else o&&(!s||!a)?(g=$o(t,i,s,a,p/o),s=g.width,a=g.height):s&&(!o||!a)?(g=$o(t,i,o,a,p/s),o=g.width,a=g.height):(g=$o(t,i,o,s,p/a),o=g.width,s=g.height);else g=$o(t,i,o,s,p),o=g.width,s=g.height;if(s0(t),t.pixelStorei(Rc,r.unpackAlignment||1),or(t,r),i===Ct){const m=d/n.BYTES_PER_ELEMENT,y=p/6*m;Qc(t,r).forEach(w=>{const x=y*w.ndx,E=n.subarray(x,x+y);t.texImage2D(w.face,c,u,o,s,0,l,h,E)})}else i===Wt||i===Xt?t.texImage3D(i,c,u,o,s,a,0,l,h,n):t.texImage2D(i,c,u,o,s,0,l,h,n);return{width:o,height:s,depth:a,type:h}}function C4(t,e,n){const r=n.target||Dt;t.bindTexture(r,e);const i=n.level||0,o=n.internalFormat||n.format||J,s=ir(o),a=n.format||s.format,c=n.type||s.type;if(or(t,n),r===Ct)for(let u=0;u<6;++u)t.texImage2D(_o+u,i,o,n.width,n.height,0,a,c,null);else r===Wt||r===Xt?t.texImage3D(r,i,o,n.width,n.height,n.depth,0,a,c,null):t.texImage2D(r,i,o,n.width,n.height,0,a,c,null)}function gi(t,e,n){n=n||pi,e=e||Yt.textureOptions;const r=t.createTexture(),i=e.target||Dt;let o=e.width||1,s=e.height||1;const a=e.internalFormat||J;t.bindTexture(i,r),i===Ct&&(t.texParameteri(i,Yo,Vo),t.texParameteri(i,Wo,Vo));let c=e.src;if(c)if(typeof c=="function"&&(c=c(t,e)),typeof c=="string")E4(t,r,e,n);else if($n(c)||Array.isArray(c)&&(typeof c[0]=="number"||Array.isArray(c[0])||$n(c[0]))){const u=l0(t,r,c,e);o=u.width,s=u.height}else Array.isArray(c)&&(typeof c[0]=="string"||u0(c[0]))?i===Ct?S4(t,r,e,n):D4(t,r,e,n):(c0(t,r,c,e),o=c.width,s=c.height);else C4(t,r,e);return di(e)&&Gc(t,r,e,o,s,a),a0(t,r,e),r}function M4(t,e,n,r,i,o){r=r||n.width,i=i||n.height,o=o||n.depth;const s=n.target||Dt;t.bindTexture(s,e);const a=n.level||0,c=n.internalFormat||n.format||J,u=ir(c),f=n.format||u.format;let l;const h=n.src;if(h&&($n(h)||Array.isArray(h)&&typeof h[0]=="number")?l=n.type||o0(t,h,u.type):l=n.type||u.type,s===Ct)for(let d=0;d<6;++d)t.texImage2D(_o+d,a,c,r,i,0,f,l,null);else s===Wt||s===Xt?t.texImage3D(s,a,c,r,i,o,0,f,l,null):t.texImage2D(s,a,c,r,i,0,f,l,null)}const I4=Pd,es=33984,T4=35048,ts=34962,N4=34963,Yc=35345,f0=35718,L4=35721,O4=35971,k4=35382,B4=35396,F4=35398,P4=35392,z4=35395,ns=5126,h0=35664,d0=35665,p0=35666,Wc=5124,g0=35667,m0=35668,y0=35669,A0=35670,b0=35671,x0=35672,v0=35673,w0=35674,E0=35675,S0=35676,R4=35678,U4=35680,j4=35679,G4=35682,H4=35685,Q4=35686,V4=35687,_4=35688,Y4=35689,W4=35690,X4=36289,q4=36292,Z4=36293,Xc=5125,D0=36294,C0=36295,M0=36296,K4=36298,J4=36299,$4=36300,e3=36303,t3=36306,n3=36307,r3=36308,i3=36311,rs=3553,is=34067,qc=32879,os=35866,F={};function I0(t,e){return F[e].bindPoint}function o3(t,e){return function(n){t.uniform1f(e,n)}}function s3(t,e){return function(n){t.uniform1fv(e,n)}}function a3(t,e){return function(n){t.uniform2fv(e,n)}}function c3(t,e){return function(n){t.uniform3fv(e,n)}}function u3(t,e){return function(n){t.uniform4fv(e,n)}}function T0(t,e){return function(n){t.uniform1i(e,n)}}function N0(t,e){return function(n){t.uniform1iv(e,n)}}function L0(t,e){return function(n){t.uniform2iv(e,n)}}function O0(t,e){return function(n){t.uniform3iv(e,n)}}function k0(t,e){return function(n){t.uniform4iv(e,n)}}function l3(t,e){return function(n){t.uniform1ui(e,n)}}function f3(t,e){return function(n){t.uniform1uiv(e,n)}}function h3(t,e){return function(n){t.uniform2uiv(e,n)}}function d3(t,e){return function(n){t.uniform3uiv(e,n)}}function p3(t,e){return function(n){t.uniform4uiv(e,n)}}function g3(t,e){return function(n){t.uniformMatrix2fv(e,!1,n)}}function m3(t,e){return function(n){t.uniformMatrix3fv(e,!1,n)}}function y3(t,e){return function(n){t.uniformMatrix4fv(e,!1,n)}}function A3(t,e){return function(n){t.uniformMatrix2x3fv(e,!1,n)}}function b3(t,e){return function(n){t.uniformMatrix3x2fv(e,!1,n)}}function x3(t,e){return function(n){t.uniformMatrix2x4fv(e,!1,n)}}function v3(t,e){return function(n){t.uniformMatrix4x2fv(e,!1,n)}}function w3(t,e){return function(n){t.uniformMatrix3x4fv(e,!1,n)}}function E3(t,e){return function(n){t.uniformMatrix4x3fv(e,!1,n)}}function we(t,e,n,r){const i=I0(t,e);return Jn(t)?function(o){let s,a;Qo(t,o)?(s=o,a=null):(s=o.texture,a=o.sampler),t.uniform1i(r,n),t.activeTexture(es+n),t.bindTexture(i,s),t.bindSampler(n,a)}:function(o){t.uniform1i(r,n),t.activeTexture(es+n),t.bindTexture(i,o)}}function Ee(t,e,n,r,i){const o=I0(t,e),s=new Int32Array(i);for(let a=0;a<i;++a)s[a]=n+a;return Jn(t)?function(a){t.uniform1iv(r,s),a.forEach(function(c,u){t.activeTexture(es+s[u]);let f,l;Qo(t,c)?(f=c,l=null):(f=c.texture,l=c.sampler),t.bindSampler(n,l),t.bindTexture(o,f)})}:function(a){t.uniform1iv(r,s),a.forEach(function(c,u){t.activeTexture(es+s[u]),t.bindTexture(o,c)})}}F[ns]={Type:Float32Array,size:4,setter:o3,arraySetter:s3},F[h0]={Type:Float32Array,size:8,setter:a3,cols:2},F[d0]={Type:Float32Array,size:12,setter:c3,cols:3},F[p0]={Type:Float32Array,size:16,setter:u3,cols:4},F[Wc]={Type:Int32Array,size:4,setter:T0,arraySetter:N0},F[g0]={Type:Int32Array,size:8,setter:L0,cols:2},F[m0]={Type:Int32Array,size:12,setter:O0,cols:3},F[y0]={Type:Int32Array,size:16,setter:k0,cols:4},F[Xc]={Type:Uint32Array,size:4,setter:l3,arraySetter:f3},F[D0]={Type:Uint32Array,size:8,setter:h3,cols:2},F[C0]={Type:Uint32Array,size:12,setter:d3,cols:3},F[M0]={Type:Uint32Array,size:16,setter:p3,cols:4},F[A0]={Type:Uint32Array,size:4,setter:T0,arraySetter:N0},F[b0]={Type:Uint32Array,size:8,setter:L0,cols:2},F[x0]={Type:Uint32Array,size:12,setter:O0,cols:3},F[v0]={Type:Uint32Array,size:16,setter:k0,cols:4},F[w0]={Type:Float32Array,size:32,setter:g3,rows:2,cols:2},F[E0]={Type:Float32Array,size:48,setter:m3,rows:3,cols:3},F[S0]={Type:Float32Array,size:64,setter:y3,rows:4,cols:4},F[H4]={Type:Float32Array,size:32,setter:A3,rows:2,cols:3},F[Q4]={Type:Float32Array,size:32,setter:x3,rows:2,cols:4},F[V4]={Type:Float32Array,size:48,setter:b3,rows:3,cols:2},F[_4]={Type:Float32Array,size:48,setter:w3,rows:3,cols:4},F[Y4]={Type:Float32Array,size:64,setter:v3,rows:4,cols:2},F[W4]={Type:Float32Array,size:64,setter:E3,rows:4,cols:3},F[R4]={Type:null,size:0,setter:we,arraySetter:Ee,bindPoint:rs},F[U4]={Type:null,size:0,setter:we,arraySetter:Ee,bindPoint:is},F[j4]={Type:null,size:0,setter:we,arraySetter:Ee,bindPoint:qc},F[G4]={Type:null,size:0,setter:we,arraySetter:Ee,bindPoint:rs},F[X4]={Type:null,size:0,setter:we,arraySetter:Ee,bindPoint:os},F[q4]={Type:null,size:0,setter:we,arraySetter:Ee,bindPoint:os},F[Z4]={Type:null,size:0,setter:we,arraySetter:Ee,bindPoint:is},F[K4]={Type:null,size:0,setter:we,arraySetter:Ee,bindPoint:rs},F[J4]={Type:null,size:0,setter:we,arraySetter:Ee,bindPoint:qc},F[$4]={Type:null,size:0,setter:we,arraySetter:Ee,bindPoint:is},F[e3]={Type:null,size:0,setter:we,arraySetter:Ee,bindPoint:os},F[t3]={Type:null,size:0,setter:we,arraySetter:Ee,bindPoint:rs},F[n3]={Type:null,size:0,setter:we,arraySetter:Ee,bindPoint:qc},F[r3]={Type:null,size:0,setter:we,arraySetter:Ee,bindPoint:is},F[i3]={Type:null,size:0,setter:we,arraySetter:Ee,bindPoint:os};function ss(t,e){return function(n){if(n.value)switch(t.disableVertexAttribArray(e),n.value.length){case 4:t.vertexAttrib4fv(e,n.value);break;case 3:t.vertexAttrib3fv(e,n.value);break;case 2:t.vertexAttrib2fv(e,n.value);break;case 1:t.vertexAttrib1fv(e,n.value);break;default:throw new Error("the length of a float constant value must be between 1 and 4!")}else t.bindBuffer(ts,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribPointer(e,n.numComponents||n.size,n.type||ns,n.normalize||!1,n.stride||0,n.offset||0),n.divisor!==void 0&&t.vertexAttribDivisor(e,n.divisor)}}function Zt(t,e){return function(n){if(n.value)if(t.disableVertexAttribArray(e),n.value.length===4)t.vertexAttrib4iv(e,n.value);else throw new Error("The length of an integer constant value must be 4!");else t.bindBuffer(ts,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribIPointer(e,n.numComponents||n.size,n.type||Wc,n.stride||0,n.offset||0),n.divisor!==void 0&&t.vertexAttribDivisor(e,n.divisor)}}function as(t,e){return function(n){if(n.value)if(t.disableVertexAttribArray(e),n.value.length===4)t.vertexAttrib4uiv(e,n.value);else throw new Error("The length of an unsigned integer constant value must be 4!");else t.bindBuffer(ts,n.buffer),t.enableVertexAttribArray(e),t.vertexAttribIPointer(e,n.numComponents||n.size,n.type||Xc,n.stride||0,n.offset||0),n.divisor!==void 0&&t.vertexAttribDivisor(e,n.divisor)}}function Zc(t,e,n){const r=n.size,i=n.count;return function(o){t.bindBuffer(ts,o.buffer);const s=o.size||o.numComponents||r,a=s/i,c=o.type||ns,f=F[c].size*s,l=o.normalize||!1,h=o.offset||0,d=f/i;for(let p=0;p<i;++p)t.enableVertexAttribArray(e+p),t.vertexAttribPointer(e+p,a,c,l,f,h+d*p),o.divisor!==void 0&&t.vertexAttribDivisor(e+p,o.divisor)}}const ae={};ae[ns]={size:4,setter:ss},ae[h0]={size:8,setter:ss},ae[d0]={size:12,setter:ss},ae[p0]={size:16,setter:ss},ae[Wc]={size:4,setter:Zt},ae[g0]={size:8,setter:Zt},ae[m0]={size:12,setter:Zt},ae[y0]={size:16,setter:Zt},ae[Xc]={size:4,setter:as},ae[D0]={size:8,setter:as},ae[C0]={size:12,setter:as},ae[M0]={size:16,setter:as},ae[A0]={size:4,setter:Zt},ae[b0]={size:8,setter:Zt},ae[x0]={size:12,setter:Zt},ae[v0]={size:16,setter:Zt},ae[w0]={size:4,setter:Zc,count:2},ae[E0]={size:9,setter:Zc,count:3},ae[S0]={size:16,setter:Zc,count:4};function B0(t){const e=t.name;return e.startsWith("gl_")||e.startsWith("webgl_")}const S3=/(\.|\[|]|\w+)/g,D3=t=>t>="0"&&t<="9";function F0(t,e,n,r){const i=t.split(S3).filter(a=>a!=="");let o=0,s="";for(;;){const a=i[o++];s+=a;const c=D3(a[0]),u=c?parseInt(a):a;if(c&&(s+=i[o++]),o===i.length){n[u]=e;break}else{const l=i[o++],h=l==="[",d=n[u]||(h?[]:{});n[u]=d,n=d,r[s]=r[s]||function(p){return function(g){z0(p,g)}}(d),s+=l}}}function C3(t,e){let n=0;function r(a,c,u){const f=c.name.endsWith("[0]"),l=c.type,h=F[l];if(!h)throw new Error(`unknown type: 0x${l.toString(16)}`);let d;if(h.bindPoint){const p=n;n+=c.size,f?d=h.arraySetter(t,l,p,u,c.size):d=h.setter(t,l,p,u,c.size)}else h.arraySetter&&f?d=h.arraySetter(t,u):d=h.setter(t,u);return d.location=u,d}const i={},o={},s=t.getProgramParameter(e,f0);for(let a=0;a<s;++a){const c=t.getActiveUniform(e,a);if(B0(c))continue;let u=c.name;u.endsWith("[0]")&&(u=u.substr(0,u.length-3));const f=t.getUniformLocation(e,c.name);if(f){const l=r(e,c,f);i[u]=l,F0(u,l,o,i)}}return i}function M3(t,e){const n={},r=t.getProgramParameter(e,O4);for(let i=0;i<r;++i){const o=t.getTransformFeedbackVarying(e,i);n[o.name]={index:i,type:o.type,size:o.size}}return n}function I3(t,e){const n=t.getProgramParameter(e,f0),r=[],i=[];for(let a=0;a<n;++a){i.push(a),r.push({});const c=t.getActiveUniform(e,a);r[a].name=c.name}[["UNIFORM_TYPE","type"],["UNIFORM_SIZE","size"],["UNIFORM_BLOCK_INDEX","blockNdx"],["UNIFORM_OFFSET","offset"]].forEach(function(a){const c=a[0],u=a[1];t.getActiveUniforms(e,i,t[c]).forEach(function(f,l){r[l][u]=f})});const o={},s=t.getProgramParameter(e,k4);for(let a=0;a<s;++a){const c=t.getActiveUniformBlockName(e,a),u={index:t.getUniformBlockIndex(e,c),usedByVertexShader:t.getActiveUniformBlockParameter(e,a,B4),usedByFragmentShader:t.getActiveUniformBlockParameter(e,a,F4),size:t.getActiveUniformBlockParameter(e,a,P4),uniformIndices:t.getActiveUniformBlockParameter(e,a,z4)};u.used=u.usedByVertexShader||u.usedByFragmentShader,o[c]=u}return{blockSpecs:o,uniformData:r}}const P0=/\[\d+\]\.$/,T3=(t,e)=>((t+(e-1))/e|0)*e;function N3(t,e,n,r){if(e||n){r=r||1;const o=t.length/4;return function(s){let a=0,c=0;for(let u=0;u<o;++u){for(let f=0;f<r;++f)t[a++]=s[c++];a+=4-r}}}else return function(i){i.length?t.set(i):t[0]=i}}function L3(t,e,n,r){const i=n.blockSpecs,o=n.uniformData,s=i[r];if(!s)return I4("no uniform block object named:",r),{name:r,uniforms:{}};const a=new ArrayBuffer(s.size),c=t.createBuffer(),u=s.index;t.bindBuffer(Yc,c),t.uniformBlockBinding(e,s.index,u);let f=r+".";P0.test(f)&&(f=f.replace(P0,"."));const l={},h={},d={};return s.uniformIndices.forEach(function(p){const g=o[p];let m=g.name;m.startsWith(f)&&(m=m.substr(f.length));const y=m.endsWith("[0]");y&&(m=m.substr(0,m.length-3));const w=F[g.type],x=w.Type,E=y?T3(w.size,16)*g.size:w.size*g.size,b=new x(a,g.offset,E/x.BYTES_PER_ELEMENT);l[m]=b;const A=N3(b,y,w.rows,w.cols);h[m]=A,F0(m,A,d,h)}),{name:r,array:a,asFloat:new Float32Array(a),buffer:c,uniforms:l,setters:h}}function O3(t,e,n){return L3(t,e.program,e.uniformBlockSpec,n)}function k3(t,e,n){const i=(e.uniformBlockSpec||e).blockSpecs[n.name];if(i){const o=i.index;return t.bindBufferRange(Yc,o,n.buffer,n.offset||0,n.array.byteLength),!0}return!1}function B3(t,e,n){k3(t,e,n)&&t.bufferData(Yc,n.array,T4)}function z0(t,e){for(const n in e){const r=t[n];typeof r=="function"?r(e[n]):z0(t[n],e[n])}}function Se(t,...e){const n=t.uniformSetters||t,r=e.length;for(let i=0;i<r;++i){const o=e[i];if(Array.isArray(o)){const s=o.length;for(let a=0;a<s;++a)Se(n,o[a])}else for(const s in o){const a=n[s];a&&a(o[s])}}}function F3(t,e){const n={},r=t.getProgramParameter(e,L4);for(let i=0;i<r;++i){const o=t.getActiveAttrib(e,i);if(B0(o))continue;const s=t.getAttribLocation(e,o.name),a=ae[o.type],c=a.setter(t,s,a);c.location=s,n[o.name]=c}return n}function P3(t,e){for(const n in e){const r=t[n];r&&r(e[n])}}function sr(t,e,n){n.vertexArrayObject?t.bindVertexArray(n.vertexArrayObject):(P3(e.attribSetters||e,n.attribs),n.indices&&t.bindBuffer(N4,n.indices))}function z3(t,e){const n=C3(t,e),r=F3(t,e),i={program:e,uniformSetters:n,attribSetters:r};return Jn(t)&&(i.uniformBlockSpec=I3(t,e),i.transformFeedbackInfo=M3(t,e)),i}const R3=4,R0=5123;function mi(t,e,n,r,i,o){n=n===void 0?R3:n;const s=e.indices,a=e.elementType,c=r===void 0?e.numElements:r;i=i===void 0?0:i,a||s?o!==void 0?t.drawElementsInstanced(n,c,a===void 0?R0:e.elementType,i,o):t.drawElements(n,c,a===void 0?R0:e.elementType,i):o!==void 0?t.drawArraysInstanced(n,i,c,o):t.drawArrays(n,i,c)}const U3=36160,yi=36161,j3=3553,G3=5121,H3=6402,Q3=6408,V3=33190,_3=36012,Y3=35056,W3=36013,X3=32854,q3=32855,Z3=36194,U0=33189,j0=6401,G0=36168,Kc=34041,K3=36064,cs=36096,H0=36128,Jc=33306,$c=33071,eu=9729,Q0=[{format:Q3,type:G3,min:eu,wrap:$c},{format:Kc}],nt={};nt[Kc]=Jc,nt[j0]=H0,nt[G0]=H0,nt[H3]=cs,nt[U0]=cs,nt[V3]=cs,nt[_3]=cs,nt[Y3]=Jc,nt[W3]=Jc;function J3(t,e){return nt[t]||nt[e]}const Kt={};Kt[X3]=!0,Kt[q3]=!0,Kt[Z3]=!0,Kt[Kc]=!0,Kt[U0]=!0,Kt[j0]=!0,Kt[G0]=!0;function $3(t){return Kt[t]}function eE(t,e,n,r){const i=U3,o=t.createFramebuffer();t.bindFramebuffer(i,o),n=n||t.drawingBufferWidth,r=r||t.drawingBufferHeight,e=e||Q0;let s=0;const a={framebuffer:o,attachments:[],width:n,height:r};return e.forEach(function(c){let u=c.attachment;const f=c.format;let l=c.attachmentPoint||J3(f,c.internalFormat);if(l||(l=K3+s++),!u)if($3(f))u=t.createRenderbuffer(),t.bindRenderbuffer(yi,u),t.renderbufferStorage(yi,f,n,r);else{const h=Object.assign({},c);h.width=n,h.height=r,h.auto===void 0&&(h.auto=!1,h.min=h.min||h.minMag||eu,h.mag=h.mag||h.minMag||eu,h.wrapS=h.wrapS||h.wrap||$c,h.wrapT=h.wrapT||h.wrap||$c),u=gi(t,h)}if(zd(t,u))t.framebufferRenderbuffer(i,l,yi,u);else if(Qo(t,u))c.layer!==void 0?t.framebufferTextureLayer(i,l,u,c.level||0,c.layer):t.framebufferTexture2D(i,l,c.target||j3,u,c.level||0);else throw new Error("unknown attachment type");a.attachments.push(u)}),a}function tE(t,e,n,r,i){r=r||t.drawingBufferWidth,i=i||t.drawingBufferHeight,e.width=r,e.height=i,n=n||Q0,n.forEach(function(o,s){const a=e.attachments[s],c=o.format;if(zd(t,a))t.bindRenderbuffer(yi,a),t.renderbufferStorage(yi,c,r,i);else if(Qo(t,a))M4(t,a,o,r,i);else throw new Error("unknown attachment type")})}function nE(t,e,n){const r=t.createVertexArray();return t.bindVertexArray(r),e.length||(e=[e]),e.forEach(function(i){sr(t,i,n)}),t.bindVertexArray(null),{numElements:n.numElements,elementType:n.elementType,vertexArrayObject:r}}const rE=/^(.*?)_/;function iE(t,e){Fc(t,0);const n=t.getExtension(e);if(n){const r={},i=rE.exec(e)[1],o="_"+i;for(const s in n){const a=n[s],c=typeof a=="function",u=c?i:o;let f=s;s.endsWith(u)&&(f=s.substring(0,s.length-u.length)),t[f]!==void 0?!c&&t[f]!==a&&Pd(f,t[f],a,s):c?t[f]=function(l){return function(){return l.apply(n,arguments)}}(a):(t[f]=a,r[f]=a)}r.constructor={name:n.constructor.name},Fc(r,0)}return n}const V0=["ANGLE_instanced_arrays","EXT_blend_minmax","EXT_color_buffer_float","EXT_color_buffer_half_float","EXT_disjoint_timer_query","EXT_disjoint_timer_query_webgl2","EXT_frag_depth","EXT_sRGB","EXT_shader_texture_lod","EXT_texture_filter_anisotropic","OES_element_index_uint","OES_standard_derivatives","OES_texture_float","OES_texture_float_linear","OES_texture_half_float","OES_texture_half_float_linear","OES_vertex_array_object","WEBGL_color_buffer_float","WEBGL_compressed_texture_atc","WEBGL_compressed_texture_etc1","WEBGL_compressed_texture_pvrtc","WEBGL_compressed_texture_s3tc","WEBGL_compressed_texture_s3tc_srgb","WEBGL_depth_texture","WEBGL_draw_buffers"];function _0(t){for(let e=0;e<V0.length;++e)iE(t,V0[e])}function oE(t,e){const n=["webgl2","webgl","experimental-webgl"];let r=null;for(let i=0;i<n.length;++i)if(r=t.getContext(n[i],e),r){_0(r);break}return r}function sE(t,e){return oE(t,e)}var aE=`/**
|
15
|
+
* The vertex position wrt the rectangle specified by (x, x2, y, y2).
|
16
|
+
* [0, 0] = [x, y], [1, 1] = [x2, y2].
|
17
|
+
* The x or y component may contain fractional values if the rectangle
|
18
|
+
* have been tessellated.
|
19
|
+
*/
|
20
|
+
in vec2 frac;
|
21
|
+
|
22
|
+
/** Minimum size (width, height) of the displayed rectangle in pixels */
|
23
|
+
uniform vec2 uMinSize;
|
24
|
+
|
25
|
+
/** Minimum opacity for the size size clamping */
|
26
|
+
uniform float uMinOpacity;
|
27
|
+
|
28
|
+
/** top-right, bottom-right, top-left, bottom-left */
|
29
|
+
uniform vec4 uCornerRadii;
|
30
|
+
|
31
|
+
flat out lowp vec4 vFillColor;
|
32
|
+
flat out lowp vec4 vStrokeColor;
|
33
|
+
flat out float vHalfStrokeWidth;
|
34
|
+
flat out vec4 vCornerRadii;
|
35
|
+
|
36
|
+
|
37
|
+
#if defined(ROUNDED_CORNERS) || defined(STROKED)
|
38
|
+
/** Position for SDF-strokes */
|
39
|
+
out vec2 vPosInPixels;
|
40
|
+
#endif
|
41
|
+
|
42
|
+
/** Size of the rect in pixels */
|
43
|
+
flat out vec2 vHalfSizeInPixels;
|
44
|
+
|
45
|
+
/**
|
46
|
+
* Clamps the minimumSize and returns an opacity that reflects the amount of clamping.
|
47
|
+
*/
|
48
|
+
float clampMinSize(inout float pos, float frac, float size, float minSize) {
|
49
|
+
if (minSize > 0.0 && abs(size) < minSize) {
|
50
|
+
pos += (frac - 0.5) * (minSize * sign(size) - size);
|
51
|
+
return abs(size) / minSize;
|
52
|
+
}
|
53
|
+
|
54
|
+
return 1.0;
|
55
|
+
}
|
56
|
+
|
57
|
+
void sort(inout float a, inout float b) {
|
58
|
+
if (a > b) {
|
59
|
+
float tmp = b;
|
60
|
+
b = a;
|
61
|
+
a = tmp;
|
62
|
+
}
|
63
|
+
}
|
64
|
+
|
65
|
+
void main(void) {
|
66
|
+
vec2 normalizedMinSize = uMinSize / uViewportSize;
|
67
|
+
|
68
|
+
float x = getScaled_x();
|
69
|
+
float x2 = getScaled_x2();
|
70
|
+
float y = getScaled_y();
|
71
|
+
float y2 = getScaled_y2();
|
72
|
+
|
73
|
+
sort(x, x2);
|
74
|
+
sort(y, y2);
|
75
|
+
|
76
|
+
// Clamp x to prevent precision artifacts when the scale is zoomed very close.
|
77
|
+
// TODO: clamp y as well
|
78
|
+
float clampMargin = 1.0;
|
79
|
+
vec2 pos1 = vec2(clamp(x, 0.0 - clampMargin, 1.0 + clampMargin), y);
|
80
|
+
vec2 pos2 = vec2(clamp(x2, 0.0 - clampMargin, 1.0 + clampMargin), y2);
|
81
|
+
|
82
|
+
vec2 size = pos2 - pos1;
|
83
|
+
|
84
|
+
if (size.x <= 0.0 || size.y <= 0.0) {
|
85
|
+
// Early exit. May increase performance or not...
|
86
|
+
gl_Position = vec4(0.0, 0.0, 0.0, 1.0);
|
87
|
+
return;
|
88
|
+
}
|
89
|
+
|
90
|
+
vec2 pos = pos1 + frac * size;
|
91
|
+
|
92
|
+
size.y *= getSampleFacetHeight(pos);
|
93
|
+
|
94
|
+
// Clamp to minimum size, optionally compensate with opacity
|
95
|
+
float opaFactor = uViewOpacity * max(uMinOpacity,
|
96
|
+
clampMinSize(pos.x, frac.x, size.x, normalizedMinSize.x) *
|
97
|
+
clampMinSize(pos.y, frac.y, size.y, normalizedMinSize.y));
|
98
|
+
|
99
|
+
pos = applySampleFacet(pos);
|
100
|
+
|
101
|
+
#if defined(ROUNDED_CORNERS) || defined(STROKED)
|
102
|
+
// Add an extra pixel to stroke width to accommodate edge antialiasing
|
103
|
+
float aaPadding = 1.0 / uDevicePixelRatio;
|
104
|
+
float strokeWidth = getScaled_strokeWidth();
|
105
|
+
float strokeOpacity = getScaled_strokeOpacity() * opaFactor;
|
106
|
+
|
107
|
+
vec2 centeredFrac = frac - 0.5;
|
108
|
+
vec2 expand = centeredFrac * (strokeWidth + aaPadding) / uViewportSize;
|
109
|
+
pos += expand;
|
110
|
+
|
111
|
+
vec2 sizeInPixels = size * uViewportSize;
|
112
|
+
vPosInPixels = (centeredFrac + expand / size) * sizeInPixels;
|
113
|
+
|
114
|
+
vHalfSizeInPixels = sizeInPixels / 2.0;
|
115
|
+
|
116
|
+
vCornerRadii = min(uCornerRadii, min(vHalfSizeInPixels.x, vHalfSizeInPixels.y));
|
117
|
+
vHalfStrokeWidth = strokeWidth / 2.0;
|
118
|
+
vStrokeColor = vec4(getScaled_stroke() * strokeOpacity, strokeOpacity);
|
119
|
+
#endif
|
120
|
+
|
121
|
+
gl_Position = unitToNdc(pos);
|
122
|
+
|
123
|
+
float fillOpacity = getScaled_fillOpacity() * opaFactor;
|
124
|
+
vFillColor = vec4(getScaled_fill() * fillOpacity, fillOpacity);
|
125
|
+
|
126
|
+
setupPicking();
|
127
|
+
}
|
128
|
+
`,cE=`#if defined(ROUNDED_CORNERS) || defined(STROKED)
|
129
|
+
in vec2 vPosInPixels;
|
130
|
+
#endif
|
131
|
+
|
132
|
+
flat in vec2 vHalfSizeInPixels;
|
133
|
+
|
134
|
+
flat in lowp vec4 vFillColor;
|
135
|
+
flat in lowp vec4 vStrokeColor;
|
136
|
+
flat in float vHalfStrokeWidth;
|
137
|
+
flat in vec4 vCornerRadii;
|
138
|
+
|
139
|
+
out lowp vec4 fragColor;
|
140
|
+
|
141
|
+
// Source: https://www.iquilezles.org/www/articles/distfunctions2d/distfunctions2d.htm
|
142
|
+
float sdRoundedBox(vec2 p, vec2 b, vec4 r) {
|
143
|
+
r.xy = p.x > 0.0 ? r.xy : r.zw;
|
144
|
+
r.x = p.y > 0.0 ? r.x : r.y;
|
145
|
+
vec2 q = abs(p) - b + r.x;
|
146
|
+
return min(max(q.x, q.y), 0.0) + length(max(q, 0.0)) - r.x;
|
147
|
+
}
|
148
|
+
|
149
|
+
// Not a true SDF. Makes the corners of strokes sharp and is faster.
|
150
|
+
float sdSharpBox(vec2 p, vec2 b) {
|
151
|
+
vec2 q = abs(p) - b;
|
152
|
+
return max(q.x, q.y);
|
153
|
+
}
|
154
|
+
|
155
|
+
void main(void) {
|
156
|
+
|
157
|
+
#if defined(ROUNDED_CORNERS) || defined(STROKED)
|
158
|
+
#ifdef ROUNDED_CORNERS
|
159
|
+
// Distance from rectangle's edge in pixels. Negative inside the rectangle.
|
160
|
+
float d = sdRoundedBox(vPosInPixels, vHalfSizeInPixels, vCornerRadii);
|
161
|
+
#else
|
162
|
+
float d = sdSharpBox(vPosInPixels, vHalfSizeInPixels);
|
163
|
+
#endif
|
164
|
+
|
165
|
+
fragColor = distanceToColor(d, vFillColor, vStrokeColor, vHalfStrokeWidth);
|
166
|
+
|
167
|
+
if (fragColor.a == 0.0) {
|
168
|
+
discard;
|
169
|
+
}
|
170
|
+
#else
|
171
|
+
// The trivial, non-decorated case
|
172
|
+
fragColor = vFillColor;
|
173
|
+
#endif
|
174
|
+
|
175
|
+
if (uPickingEnabled) {
|
176
|
+
fragColor = vPickingColor;
|
177
|
+
}
|
178
|
+
}
|
179
|
+
`;function tu(t,e=[],n=0){const r=Math.fround(t);return e[n]=r,e[n+1]=isFinite(r)?t-r:0,e}function uE(t){switch(pE(t).gpuVendor.toLowerCase()){case"nvidia":return` #define NVIDIA_GPU
|
180
|
+
// Nvidia optimizes away the calculation necessary for emulated fp64
|
181
|
+
#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1
|
182
|
+
`;case"intel":return` #define INTEL_GPU
|
183
|
+
// Intel optimizes away the calculation necessary for emulated fp64
|
184
|
+
#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1
|
185
|
+
// Intel's built-in 'tan' function doesn't have acceptable precision
|
186
|
+
#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1
|
187
|
+
// Intel GPU doesn't have full 32 bits precision in same cases, causes overflow
|
188
|
+
#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1
|
189
|
+
`;case"amd":return` #define AMD_GPU
|
190
|
+
`;default:return` #define DEFAULT_GPU
|
191
|
+
// Prevent driver from optimizing away the calculation necessary for emulated fp64
|
192
|
+
#define LUMA_FP64_CODE_ELIMINATION_WORKAROUND 1
|
193
|
+
// Intel's built-in 'tan' function doesn't have acceptable precision
|
194
|
+
#define LUMA_FP32_TAN_PRECISION_WORKAROUND 1
|
195
|
+
// Intel GPU doesn't have full 32 bits precision in same cases, causes overflow
|
196
|
+
#define LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND 1
|
197
|
+
`}}const lE=7936,fE=7937,hE=7938,dE=35724;function pE(t){const e=t.getExtension("WEBGL_debug_renderer_info"),n=t.getParameter(e&&e.UNMASKED_VENDOR_WEBGL||lE),r=t.getParameter(e&&e.UNMASKED_RENDERER_WEBGL||fE);return{gpuVendor:gE(n,r),vendor:n,renderer:r,version:t.getParameter(hE),shadingLanguageVersion:t.getParameter(dE)}}function gE(t,e){return t.match(/NVIDIA/i)||e.match(/NVIDIA/i)?"NVIDIA":t.match(/INTEL/i)||e.match(/INTEL/i)?"INTEL":t.match(/AMD/i)||e.match(/AMD/i)||t.match(/ATI/i)||e.match(/ATI/i)?"AMD":"UNKNOWN GPU"}function nu(t,e,n){t.prototype=e.prototype=n,n.constructor=t}function Y0(t,e){var n=Object.create(t.prototype);for(var r in e)n[r]=e[r];return n}function Ai(){}var bi=.7,us=1/bi,ar="\\s*([+-]?\\d+)\\s*",xi="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",dt="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",mE=/^#([0-9a-f]{3,8})$/,yE=new RegExp("^rgb\\("+[ar,ar,ar]+"\\)$"),AE=new RegExp("^rgb\\("+[dt,dt,dt]+"\\)$"),bE=new RegExp("^rgba\\("+[ar,ar,ar,xi]+"\\)$"),xE=new RegExp("^rgba\\("+[dt,dt,dt,xi]+"\\)$"),vE=new RegExp("^hsl\\("+[xi,dt,dt]+"\\)$"),wE=new RegExp("^hsla\\("+[xi,dt,dt,xi]+"\\)$"),W0={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};nu(Ai,vi,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:X0,formatHex:X0,formatHsl:EE,formatRgb:q0,toString:q0});function X0(){return this.rgb().formatHex()}function EE(){return ep(this).formatHsl()}function q0(){return this.rgb().formatRgb()}function vi(t){var e,n;return t=(t+"").trim().toLowerCase(),(e=mE.exec(t))?(n=e[1].length,e=parseInt(e[1],16),n===6?Z0(e):n===3?new Fe(e>>8&15|e>>4&240,e>>4&15|e&240,(e&15)<<4|e&15,1):n===8?ls(e>>24&255,e>>16&255,e>>8&255,(e&255)/255):n===4?ls(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|e&240,((e&15)<<4|e&15)/255):null):(e=yE.exec(t))?new Fe(e[1],e[2],e[3],1):(e=AE.exec(t))?new Fe(e[1]*255/100,e[2]*255/100,e[3]*255/100,1):(e=bE.exec(t))?ls(e[1],e[2],e[3],e[4]):(e=xE.exec(t))?ls(e[1]*255/100,e[2]*255/100,e[3]*255/100,e[4]):(e=vE.exec(t))?$0(e[1],e[2]/100,e[3]/100,1):(e=wE.exec(t))?$0(e[1],e[2]/100,e[3]/100,e[4]):W0.hasOwnProperty(t)?Z0(W0[t]):t==="transparent"?new Fe(NaN,NaN,NaN,0):null}function Z0(t){return new Fe(t>>16&255,t>>8&255,t&255,1)}function ls(t,e,n,r){return r<=0&&(t=e=n=NaN),new Fe(t,e,n,r)}function SE(t){return t instanceof Ai||(t=vi(t)),t?(t=t.rgb(),new Fe(t.r,t.g,t.b,t.opacity)):new Fe}function DE(t,e,n,r){return arguments.length===1?SE(t):new Fe(t,e,n,r==null?1:r)}function Fe(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}nu(Fe,DE,Y0(Ai,{brighter:function(t){return t=t==null?us:Math.pow(us,t),new Fe(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=t==null?bi:Math.pow(bi,t),new Fe(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:K0,formatHex:K0,formatRgb:J0,toString:J0}));function K0(){return"#"+ru(this.r)+ru(this.g)+ru(this.b)}function J0(){var t=this.opacity;return t=isNaN(t)?1:Math.max(0,Math.min(1,t)),(t===1?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(t===1?")":", "+t+")")}function ru(t){return t=Math.max(0,Math.min(255,Math.round(t)||0)),(t<16?"0":"")+t.toString(16)}function $0(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new pt(t,e,n,r)}function ep(t){if(t instanceof pt)return new pt(t.h,t.s,t.l,t.opacity);if(t instanceof Ai||(t=vi(t)),!t)return new pt;if(t instanceof pt)return t;t=t.rgb();var e=t.r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),o=Math.max(e,n,r),s=NaN,a=o-i,c=(o+i)/2;return a?(e===o?s=(n-r)/a+(n<r)*6:n===o?s=(r-e)/a+2:s=(e-n)/a+4,a/=c<.5?o+i:2-o-i,s*=60):a=c>0&&c<1?0:s,new pt(s,a,c,t.opacity)}function CE(t,e,n,r){return arguments.length===1?ep(t):new pt(t,e,n,r==null?1:r)}function pt(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}nu(pt,CE,Y0(Ai,{brighter:function(t){return t=t==null?us:Math.pow(us,t),new pt(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=t==null?bi:Math.pow(bi,t),new pt(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new Fe(iu(t>=240?t-240:t+120,i,r),iu(t,i,r),iu(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity;return t=isNaN(t)?1:Math.max(0,Math.min(1,t)),(t===1?"hsl(":"hsla(")+(this.h||0)+", "+(this.s||0)*100+"%, "+(this.l||0)*100+"%"+(t===1?")":", "+t+")")}}));function iu(t,e,n){return(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)*255}const tp="attr_",np="uDomain_",ME="range_",rp="scale_",ip="getScaled_",ou="uRangeTexture_",op=3402823466e29;function IE(t){const e=t.match(/^(?:(\w+)-)?(\w+)$/);if(!e)throw new Error("Not a scale type: "+t);return{family:e[1]||"continuous",transform:e[2]}}function TE(t,e){let n;if(Go(t))n=Jt(Bd(t)(e));else if(se(e))if(Sn(t))n=LE(e);else throw new Error(`String values are not supported on the "${t}" channel: ${e}`);else if(js(e))n=Jt(e?1:0);else if(e===null)if(Sn(t))n=Jt([0,0,0]);else throw new Error(`null value is not supported on the "${t}" chanel.`);else n=Jt(e);return`
|
198
|
+
#define ${t}_DEFINED
|
199
|
+
${n.type} ${ip}${t}() {
|
200
|
+
// Constant value
|
201
|
+
return ${n};
|
202
|
+
}`}function NE(t,e,n){var D;const r=En(t),i=tp+t,o=np+r,s=ME+r,a=!!e.fp64,c=a?"vec2":"float",u=e.domain?e.domain().length:void 0;let f;const l=[];l.push(""),l.push("/".repeat(70)),l.push(`// Channel: ${t}`),l.push(""),l.push(`#define ${t}_DEFINED`),a&&l.push(`#define ${t}_FP64`);const{transform:h}=IE(e.type),d=(L,...B)=>OE.apply(null,[L+(a?"Fp64":""),"value",...B]);let p;switch(h){case"linear":p=d("scaleLinear","domain",s);break;case"log":p=d("scaleLog","domain",s,e.base());break;case"symlog":p=d("scaleSymlog","domain",s,e.constant());break;case"pow":case"sqrt":p=d("scalePow","domain",s,e.exponent());break;case"index":case"locus":case"point":case"band":p=d("scaleBand","domain",s,e.paddingInner(),e.paddingOuter(),e.align(),(D=n.band)!=null?D:.5);break;case"ordinal":case"null":case"identity":p=d("scaleIdentity");break;case"threshold":break;default:throw new Error(`Unsupported scale type: ${e.type}! ${t}: ${JSON.stringify(n)}`)}const g=To(e.type)||Je(e.type)&&Sn(t)?[0,1]:e.range?e.range():void 0;if(g&&t==r&&g.length&&g.every(oe)){const L=sp(g);l.push(`const ${L.type} ${s} = ${L};`)}let m;if(Ro(n))if(oe(n.datum))m=n.datum;else throw new Error(`Only quantitative datums are currently supported in the encoding definition: ${JSON.stringify(n)}`);const y=Sn(t)?"vec3":"float";let w;if(Sn(t)){const L=ou+r;if(t==r&&l.push(`uniform sampler2D ${L};`),Je(e.type))w=`getInterpolatedColor(${L}, transformed)`;else if(Qt(e.type)||Yn(e.type))w=`getDiscreteColor(${L}, int(transformed))`;else throw new Error("Problem with color scale!")}else if(e.type==="ordinal"||Yn(e.type)){const L=ou+r;t==r&&l.push(`uniform sampler2D ${L};`),w=`getDiscreteColor(${L}, int(transformed)).r`}m!==void 0?l.push(`const highp ${c} ${i} = ${Jt(a?tu(m):m)};`):l.push(`in highp ${c} ${i};`);const x=[],E=Je(e.type)&&u>2,b=Yn(e.type)||E;if(x.push("int slot = 0;"),b){const L=o;x.push(E?`while (slot < ${L}.length() - 2 && value >= ${L}[slot + 1]) { slot++; }`:`while (slot < ${L}.length() && value >= ${L}[slot]) { slot++; }`)}const A=Je(e.type)||Yn(e.type)||["band","point"].includes(e.type);if(p){const L=o;if(A){const B=a?"vec4":"vec2";x.push(`${B} domain = ${B}(${L}[slot], ${L}[slot + 1]);`)}x.push(`float transformed = ${p};`),E&&x.push(`transformed = (float(slot) + transformed) / (float(${L}.length()) - 1.0);`)}else x.push("float transformed = float(slot);");e.clamp&&e.clamp()&&x.push(`transformed = clampToRange(transformed, ${sp(g)});`),x.push(`return ${w!=null?w:"transformed"};`),l.push(`
|
203
|
+
${y} ${rp}${t}(${c} value) {
|
204
|
+
${x.map(L=>` ${L}
|
205
|
+
`).join("")}
|
206
|
+
}`),l.push(`
|
207
|
+
${y} ${ip}${t}() {
|
208
|
+
return ${rp}${t}(${i});
|
209
|
+
}`);const v=l.join(`
|
210
|
+
`);if(A&&t==r){const L=Je(e.type)||Yn(e.type)?u:2;f=`${a?"vec2":"float"} ${o}[${L}];`}return{glsl:v,domainUniform:f}}function su(t){if(!oe(t))throw new Error(`Not a number: ${t}`);if(t==1/0)return""+op;if(t==-1/0)return""+-op;{let e=`${t}`;return/^(-)?\d+$/.test(e)&&(e+=".0"),e}}function Jt(t){typeof t=="number"&&(t=[t]);const e=t.length;if(e<1||e>4)throw new Error("Invalid number of components: "+e);let n,r;return e>1?(n=`vec${e}`,r=`${n}(${t.map(su).join(", ")})`):(n="float",r=su(t[0])),Object.assign(r,{type:n,numComponents:e})}function LE(t){const e=vi(t).rgb();return Jt([e.r,e.g,e.b].map(n=>n/255))}function sp(t){return Jt([t[0],he(t)])}function OE(t,...e){const n=[];for(const r of e)oe(r)?n.push(su(r)):Qe(r)?n.push(Jt(r)):n.push(r);return`${t}(${n.join(", ")})`}class kE{constructor(e){this.size=e,this.arrays={},this.pushers=[],this.dataUpdaters=[],this.vertexCount=0}addConverter(e,n){const r=this.createUpdater(tp+e,n.numComponents||1,n.arrayReference),i=n.f;this.dataUpdaters.push(n.arrayReference?o=>r(i(o)):o=>r(i(o)))}createUpdater(e,n,r){if(!oe(this.size))throw new Error("The number of vertices must be defined!");let i,o,s=0;const a=new Float32Array(this.size*n);if(this.arrays[e]={data:a,numComponents:n},n==1){let c=0;const u=f=>{c=+f};i=()=>{a[s++]=c},o=u}else{let c=r!=null?r:[0];const u=r?f=>{}:f=>{c=f};switch(n){case 1:break;case 2:i=()=>{a[s++]=c[0],a[s++]=c[1]},o=u;break;case 3:i=()=>{a[s++]=c[0],a[s++]=c[1],a[s++]=c[2]},o=u;break;case 4:i=()=>{a[s++]=c[0],a[s++]=c[1],a[s++]=c[2],a[s++]=c[3]},o=u;break;default:throw new Error("Invalid numComponents: "+n)}}return this.pushers.push(i),o}_unrollPushAll(){let e="",n="";for(let i=0;i<this.pushers.length;i++)e+=`const p${i} = that.pushers[${i}];
|
211
|
+
`,n+=`p${i}();
|
212
|
+
`;const r=new Function("that",`${e}
|
213
|
+
|
214
|
+
return function unrolledPushAll() {
|
215
|
+
${n}
|
216
|
+
that.vertexCount++;
|
217
|
+
};
|
218
|
+
`);this.pushAll=r(this)}pushAll(){this.size>1e5?this._unrollPushAll():this.pushAll=()=>{for(let n=0;n<this.pushers.length;n++)this.pushers[n]();this.vertexCount++},this.pushAll()}updateFromDatum(e){for(let n=0;n<this.dataUpdaters.length;n++)this.dataUpdaters[n](e)}pushFromDatum(e){this.updateFromDatum(e),this.pushAll()}}const cr=5,au=127;function cu(t){const e=[];for(let p=0;p<=au;p++)e.push(void 0);const n=new Map;for(const p of t.chars)p.id<=au?e[p.id]=p:n.set(p.id,p);const r=8722;n.has(r)||n.set(r,e["-".charCodeAt(0)]);function i(p){return(p<=au?e[p]:n.get(p))||e[63]}function o(p){return i(p.charCodeAt(0))}const s=t.common.base,a=o("x"),c=o("X"),u=o("q"),f=a.height-cr*2,l=c.height-cr*2,h=u.height-a.height+u.yoffset-a.yoffset;function d(p,g=1){let m=0;for(let y=0;y<p.length;y++)m+=i(p.charCodeAt(y)).xadvance;return m/s*g}return{measureWidth:d,getCharByCode:i,getChar:o,xHeight:f,capHeight:l,descent:h,common:t.common}}function uu(t,e=0,n=1){return Math.max(e,Math.min(n,t))}const BE=2**31-1;function FE(t,e){const n=new Int32Array(t);n.fill(BE);const r=new Int32Array(t),i=e[0],s=(e[1]-e[0])/t,a=l=>uu(Math.floor((l-i)/s),0,t-1),c=(l,h,d,p)=>{const g=a(l),m=a(h);for(let y=g;y<=m;y++)n[y]>d&&(n[y]=d),r[y]<p&&(r[y]=p)},u=(l,h)=>[n[a(l)],r[a(h)]],f=()=>{for(let l=1;l<r.length;l++)r[l]<r[l-1]&&(r[l]=r[l-1]);for(let l=r.length-1;l>0;l--)r[l-1]>r[l]&&(r[l-1]=r[l]);return u};return c.getIndex=f,c}class wi{constructor({encoders:e,numVertices:n=void 0,attributes:r=[],buildXIndex:i=!1}){this.encoders=e,this._buildXIndex=i,this.variableEncoders=Object.fromEntries(Object.entries(e).filter(([o,s])=>r.includes(o)&&s&&s.scale&&!s.constant)),this.allocatedVertices=n,this.variableBuilder=new kE(n);for(const[o,s]of Object.entries(this.variableEncoders)){const a=s.accessor,c=[0,0],u=s.scale.fp64,f=s.indexer?s.indexer:u?l=>tu(a(l),c):a;this.variableBuilder.addConverter(o,{f,numComponents:u?2:1,arrayReference:u?c:void 0})}this.lastOffset=0,this.rangeMap=new uo([],JSON.stringify)}registerBatch(e){var o;const n=this.lastOffset,r=this.variableBuilder.vertexCount,i=r-n;i&&this.rangeMap.set(e,{offset:n,count:i,xIndex:(o=this.xIndexer)==null?void 0:o.getIndex()}),this.lastOffset=r}addBatches(e){for(const[n,r]of e)this.addBatch(n,r)}addBatch(e,n,r=0,i=n.length){for(let o=r;o<i;o++)this.variableBuilder.pushFromDatum(n[o]);this.registerBatch(e)}prepareXIndexer(e){if(!this._buildXIndex)return;const n=this.variableEncoders.x,r=this.variableEncoders.x2;if(n&&r){const i=n.accessor,o=r.accessor;this.xIndexer=FE(50,[i(e[0]),o(he(e))]);let s=this.variableBuilder.vertexCount;this.addToXIndex=a=>{let c=this.variableBuilder.vertexCount;this.xIndexer(i(a),o(a),s,c),s=c}}else this.xIndexer=void 0,this.addToXIndex=i=>{}}addToXIndex(e){}toArrays(){return{arrays:this.variableBuilder.arrays,vertexCount:this.variableBuilder.vertexCount,allocatedVertices:this.allocatedVertices,rangeMap:this.rangeMap}}}class PE extends wi{constructor({encoders:e,attributes:n,tessellationThreshold:r=1/0,visibleRange:i=[-1/0,1/0],numItems:o,buildXIndex:s=!1}){super({encoders:e,attributes:n,numVertices:r==1/0?o*6:void 0,buildXIndex:s});this.visibleRange=i,this.tessellationThreshold=r||1/0,this.updateFrac=this.variableBuilder.createUpdater("frac",2)}addBatch(e,n,r=0,i=n.length){if(i<=r)return;const o=this.encoders,[s,a]=this.visibleRange,c=h=>h.accessor||(d=>0),u=c(o.x),f=c(o.x2);this.prepareXIndexer(n);const l=[0,0];this.updateFrac(l);for(let h=r;h<i;h++){const d=n[h];let p=u(d),g=f(d);if(p>g&&([p,g]=[g,p]),g<s||p>a)continue;p<s&&(p=s),g>a&&(g=a),this.variableBuilder.updateFromDatum(d),l[0]=0,l[1]=0;const m=1;this.variableBuilder.pushAll();for(let y=0;y<=m;y++)l[0]=y/m,l[1]=0,this.variableBuilder.pushAll(),l[1]=1,this.variableBuilder.pushAll();this.variableBuilder.pushAll(),this.addToXIndex(d)}this.registerBatch(e)}}class zE extends wi{constructor({encoders:e,attributes:n,tessellationThreshold:r=1/0,visibleRange:i=[-1/0,1/0],numItems:o,buildXIndex:s}){super({encoders:e,attributes:n,numVertices:r==1/0?o*6:void 0,buildXIndex:s});this.visibleRange=i,this.tessellationThreshold=r||1/0,this.updateSide=this.variableBuilder.createUpdater("side",1),this.updatePos=this.variableBuilder.createUpdater("pos",1)}addBatch(e,n,r=0,i=n.length){this.prepareXIndexer(n);for(let o=r;o<i;o++){const s=n[o];this.variableBuilder.updateFromDatum(s),this.updateSide(-.5),this.updatePos(0),this.variableBuilder.pushAll();const a=1;for(let c=0;c<=a;c++)this.updatePos(c/a),this.updateSide(-.5),this.variableBuilder.pushAll(),this.updateSide(.5),this.variableBuilder.pushAll();this.variableBuilder.pushAll(),this.addToXIndex(s)}this.registerBatch(e)}}class RE extends wi{constructor({encoders:e,attributes:n,numItems:r=void 0}){super({encoders:e,attributes:n,numVertices:r})}}class UE extends wi{constructor({encoders:e,attributes:n,numItems:r=void 0}){super({encoders:e,attributes:n,numVertices:r})}toArrays(){const e=this.variableBuilder.arrays;for(let n of Object.values(e))n.divisor=1;return super.toArrays()}}class jE extends wi{constructor({encoders:e,attributes:n,fontMetrics:r,properties:i,numCharacters:o=void 0,buildXIndex:s=!1}){super({encoders:e,attributes:n,numVertices:o*6,buildXIndex:s});this.metadata=r,this.metrics=r,this.properties=i;const a=e;this.numberFormat=a.text.channelDef.format?Ie(a.text.channelDef.format):c=>c,this.updateVertexCoord=this.variableBuilder.createUpdater("vertexCoord",2),this.updateTextureCoord=this.variableBuilder.createUpdater("textureCoord",2),this.updateWidth=this.variableBuilder.createUpdater("width",1)}addBatch(e,n,r=0,i=n.length){var d;const o=this.properties.align||"left",s=(d=this.properties.logoLetters)!=null?d:!1,a=this.metadata.common.base,c=this.metadata.common.scaleH;let u=-cr;switch(this.properties.baseline){case"top":u+=this.metrics.capHeight;break;case"middle":u+=this.metrics.capHeight/2;break;case"bottom":u-=this.metrics.descent;break}const f=this.encoders.text.accessor||this.encoders.text,l=[0,0];this.updateVertexCoord(l);const h=[0,0];this.updateTextureCoord(h),this.prepareXIndexer(n);for(let p=r;p<i;p++){const g=n[p],m=this.numberFormat(f(g)),y=se(m)?m:m===null?"":""+m;if(y.length==0)continue;this.variableBuilder.updateFromDatum(g);const w=s?y.length:this.metrics.measureWidth(y);this.updateWidth(w);let x=o=="right"?-w:o=="center"?-w/2:0;if(!s){const v=this.metrics.getCharByCode(y.charCodeAt(0));x-=(v.width-v.xadvance)/a/2}let E=-.5,b=1,A=1;for(let v=0;v<y.length;v++){const D=this.metrics.getCharByCode(y.charCodeAt(v)),L=s?1:D.xadvance/a;if(D.id==32){x+=L;continue}s?(A=(D.width+cr*2)/D.width,x=-A/2,b=(D.height+cr*2)/D.height,E=-.5-cr/D.height):(b=D.height/a,E=-(D.height+D.yoffset+u)/a,A=D.width/a);const B=D.x,C=D.y;l[0]=x,l[1]=E+b,h[0]=B/c,h[1]=C/c,this.variableBuilder.pushAll(),l[0]=x+A,l[1]=E+b,h[0]=(B+D.width)/c,h[1]=C/c,this.variableBuilder.pushAll(),l[0]=x,l[1]=E,h[0]=B/c,h[1]=(C+D.height)/c,this.variableBuilder.pushAll(),l[0]=x+A,l[1]=E+b,h[0]=(B+D.width)/c,h[1]=C/c,this.variableBuilder.pushAll(),l[0]=x,l[1]=E,h[0]=B/c,h[1]=(C+D.height)/c,this.variableBuilder.pushAll(),l[0]=x+A,l[1]=E,h[0]=(B+D.width)/c,h[1]=(C+D.height)/c,this.variableBuilder.pushAll(),x+=L}this.addToXIndex(n)}this.registerBatch(e)}}var GE=`// Adapted from luma.gl - https://github.com/uber/luma.gl
|
219
|
+
|
220
|
+
// Copyright (c) 2015 - 2017 Uber Technologies, Inc.
|
221
|
+
//
|
222
|
+
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
223
|
+
// of this software and associated documentation files (the "Software"), to deal
|
224
|
+
// in the Software without restriction, including without limitation the rights
|
225
|
+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
226
|
+
// copies of the Software, and to permit persons to whom the Software is
|
227
|
+
// furnished to do so, subject to the following conditions:
|
228
|
+
//
|
229
|
+
// The above copyright notice and this permission notice shall be included in
|
230
|
+
// all copies or substantial portions of the Software.
|
231
|
+
//
|
232
|
+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
233
|
+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
234
|
+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
235
|
+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
236
|
+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
237
|
+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
238
|
+
// THE SOFTWARE.
|
239
|
+
|
240
|
+
uniform float ONE;
|
241
|
+
|
242
|
+
/*
|
243
|
+
About LUMA_FP64_CODE_ELIMINATION_WORKAROUND
|
244
|
+
|
245
|
+
The purpose of this workaround is to prevent shader compilers from
|
246
|
+
optimizing away necessary arithmetic operations by swapping their sequences
|
247
|
+
or transform the equation to some 'equivalent' from.
|
248
|
+
|
249
|
+
The method is to multiply an artifical variable, ONE, which will be known to
|
250
|
+
the compiler to be 1 only at runtime. The whole expression is then represented
|
251
|
+
as a polynomial with respective to ONE. In the coefficients of all terms, only one a
|
252
|
+
and one b should appear
|
253
|
+
|
254
|
+
err = (a + b) * ONE^6 - a * ONE^5 - (a + b) * ONE^4 + a * ONE^3 - b - (a + b) * ONE^2 + a * ONE
|
255
|
+
*/
|
256
|
+
|
257
|
+
// Divide float number to high and low floats to extend fraction bits
|
258
|
+
vec2 split(float a) {
|
259
|
+
const float SPLIT = 4097.0;
|
260
|
+
float t = a * SPLIT;
|
261
|
+
#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
|
262
|
+
float a_hi = t * ONE - (t - a);
|
263
|
+
float a_lo = a * ONE - a_hi;
|
264
|
+
#else
|
265
|
+
float a_hi = t - (t - a);
|
266
|
+
float a_lo = a - a_hi;
|
267
|
+
#endif
|
268
|
+
return vec2(a_hi, a_lo);
|
269
|
+
}
|
270
|
+
|
271
|
+
// Divide float number again when high float uses too many fraction bits
|
272
|
+
vec2 split2(vec2 a) {
|
273
|
+
vec2 b = split(a.x);
|
274
|
+
b.y += a.y;
|
275
|
+
return b;
|
276
|
+
}
|
277
|
+
|
278
|
+
// Special sum operation when a > b
|
279
|
+
vec2 quickTwoSum(float a, float b) {
|
280
|
+
#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
|
281
|
+
float sum = (a + b) * ONE;
|
282
|
+
float err = b - (sum - a) * ONE;
|
283
|
+
#else
|
284
|
+
float sum = a + b;
|
285
|
+
float err = b - (sum - a);
|
286
|
+
#endif
|
287
|
+
return vec2(sum, err);
|
288
|
+
}
|
289
|
+
|
290
|
+
// General sum operation
|
291
|
+
vec2 twoSum(float a, float b) {
|
292
|
+
float s = (a + b);
|
293
|
+
#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
|
294
|
+
float v = (s * ONE - a) * ONE;
|
295
|
+
float err = (a - (s - v) * ONE) * ONE * ONE * ONE + (b - v);
|
296
|
+
#else
|
297
|
+
float v = s - a;
|
298
|
+
float err = (a - (s - v)) + (b - v);
|
299
|
+
#endif
|
300
|
+
return vec2(s, err);
|
301
|
+
}
|
302
|
+
|
303
|
+
vec2 twoSub(float a, float b) {
|
304
|
+
float s = (a - b);
|
305
|
+
#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
|
306
|
+
float v = (s * ONE - a) * ONE;
|
307
|
+
float err = (a - (s - v) * ONE) * ONE * ONE * ONE - (b + v);
|
308
|
+
#else
|
309
|
+
float v = s - a;
|
310
|
+
float err = (a - (s - v)) - (b + v);
|
311
|
+
#endif
|
312
|
+
return vec2(s, err);
|
313
|
+
}
|
314
|
+
|
315
|
+
vec2 twoSqr(float a) {
|
316
|
+
float prod = a * a;
|
317
|
+
vec2 a_fp64 = split(a);
|
318
|
+
#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
|
319
|
+
float err = ((a_fp64.x * a_fp64.x - prod) * ONE + 2.0 * a_fp64.x *
|
320
|
+
a_fp64.y * ONE * ONE) + a_fp64.y * a_fp64.y * ONE * ONE * ONE;
|
321
|
+
#else
|
322
|
+
float err = ((a_fp64.x * a_fp64.x - prod) + 2.0 * a_fp64.x * a_fp64.y) + a_fp64.y * a_fp64.y;
|
323
|
+
#endif
|
324
|
+
return vec2(prod, err);
|
325
|
+
}
|
326
|
+
|
327
|
+
vec2 twoProd(float a, float b) {
|
328
|
+
float prod = a * b;
|
329
|
+
vec2 a_fp64 = split(a);
|
330
|
+
vec2 b_fp64 = split(b);
|
331
|
+
float err = ((a_fp64.x * b_fp64.x - prod) + a_fp64.x * b_fp64.y +
|
332
|
+
a_fp64.y * b_fp64.x) + a_fp64.y * b_fp64.y;
|
333
|
+
return vec2(prod, err);
|
334
|
+
}
|
335
|
+
|
336
|
+
vec2 sum_fp64(vec2 a, vec2 b) {
|
337
|
+
vec2 s, t;
|
338
|
+
s = twoSum(a.x, b.x);
|
339
|
+
t = twoSum(a.y, b.y);
|
340
|
+
s.y += t.x;
|
341
|
+
s = quickTwoSum(s.x, s.y);
|
342
|
+
s.y += t.y;
|
343
|
+
s = quickTwoSum(s.x, s.y);
|
344
|
+
return s;
|
345
|
+
}
|
346
|
+
|
347
|
+
vec2 sub_fp64(vec2 a, vec2 b) {
|
348
|
+
vec2 s, t;
|
349
|
+
s = twoSub(a.x, b.x);
|
350
|
+
t = twoSub(a.y, b.y);
|
351
|
+
s.y += t.x;
|
352
|
+
s = quickTwoSum(s.x, s.y);
|
353
|
+
s.y += t.y;
|
354
|
+
s = quickTwoSum(s.x, s.y);
|
355
|
+
return s;
|
356
|
+
}
|
357
|
+
|
358
|
+
vec2 mul_fp64(vec2 a, vec2 b) {
|
359
|
+
vec2 prod = twoProd(a.x, b.x);
|
360
|
+
// y component is for the error
|
361
|
+
prod.y += a.x * b.y;
|
362
|
+
#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)
|
363
|
+
prod = split2(prod);
|
364
|
+
#endif
|
365
|
+
prod = quickTwoSum(prod.x, prod.y);
|
366
|
+
prod.y += a.y * b.x;
|
367
|
+
#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)
|
368
|
+
prod = split2(prod);
|
369
|
+
#endif
|
370
|
+
prod = quickTwoSum(prod.x, prod.y);
|
371
|
+
return prod;
|
372
|
+
}
|
373
|
+
|
374
|
+
vec2 div_fp64(vec2 a, vec2 b) {
|
375
|
+
float xn = 1.0 / b.x;
|
376
|
+
#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)
|
377
|
+
vec2 yn = mul_fp64(a, vec2(xn, 0));
|
378
|
+
#else
|
379
|
+
vec2 yn = a * xn;
|
380
|
+
#endif
|
381
|
+
float diff = (sub_fp64(a, mul_fp64(b, yn))).x;
|
382
|
+
vec2 prod = twoProd(xn, diff);
|
383
|
+
return sum_fp64(yn, prod);
|
384
|
+
}
|
385
|
+
|
386
|
+
vec2 sqrt_fp64(vec2 a) {
|
387
|
+
if (a.x == 0.0 && a.y == 0.0) return vec2(0.0, 0.0);
|
388
|
+
if (a.x < 0.0) return vec2(0.0 / 0.0, 0.0 / 0.0);
|
389
|
+
|
390
|
+
float x = 1.0 / sqrt(a.x);
|
391
|
+
float yn = a.x * x;
|
392
|
+
#if defined(LUMA_FP64_CODE_ELIMINATION_WORKAROUND)
|
393
|
+
vec2 yn_sqr = twoSqr(yn) * ONE;
|
394
|
+
#else
|
395
|
+
vec2 yn_sqr = twoSqr(yn);
|
396
|
+
#endif
|
397
|
+
float diff = sub_fp64(a, yn_sqr).x;
|
398
|
+
vec2 prod = twoProd(x * 0.5, diff);
|
399
|
+
#if defined(LUMA_FP64_HIGH_BITS_OVERFLOW_WORKAROUND)
|
400
|
+
return sum_fp64(split(yn), prod);
|
401
|
+
#else
|
402
|
+
return sum_fp64(vec2(yn, 0.0), prod);
|
403
|
+
#endif
|
404
|
+
}`,ap=`#define PI 3.141593
|
405
|
+
|
406
|
+
/** Offset in "unit" units */
|
407
|
+
uniform vec2 uViewOffset;
|
408
|
+
|
409
|
+
uniform vec2 uViewScale;
|
410
|
+
|
411
|
+
/** Size of the logical viewport in pixels, i.e., the view */
|
412
|
+
uniform vec2 uViewportSize;
|
413
|
+
|
414
|
+
uniform lowp float uDevicePixelRatio;
|
415
|
+
|
416
|
+
// TODO: Views with opacity less than 1.0 should be rendered into a texture
|
417
|
+
// that is rendered with the specified opacity.
|
418
|
+
uniform lowp float uViewOpacity;
|
419
|
+
|
420
|
+
/**
|
421
|
+
* Maps a coordinate on the unit scale to a normalized device coordinate.
|
422
|
+
* (0, 0) is at the bottom left corner.
|
423
|
+
*/
|
424
|
+
vec4 unitToNdc(vec2 coord) {
|
425
|
+
return vec4((coord * uViewScale + uViewOffset) * 2.0 - 1.0, 0.0, 1.0);
|
426
|
+
}
|
427
|
+
|
428
|
+
vec4 unitToNdc(float x, float y) {
|
429
|
+
return unitToNdc(vec2(x, y));
|
430
|
+
}
|
431
|
+
|
432
|
+
vec4 pixelsToNdc(vec2 coord) {
|
433
|
+
return unitToNdc(coord / uViewportSize);
|
434
|
+
}
|
435
|
+
|
436
|
+
vec4 pixelsToNdc(float x, float y) {
|
437
|
+
return pixelsToNdc(vec2(x, y));
|
438
|
+
}
|
439
|
+
|
440
|
+
float linearstep(float edge0, float edge1, float x) {
|
441
|
+
return clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);
|
442
|
+
}
|
443
|
+
|
444
|
+
// Fragment shader stuff ////////////////////////////////////////////////////////
|
445
|
+
|
446
|
+
// TODO: include the following only in fragment shaders
|
447
|
+
|
448
|
+
/**
|
449
|
+
* Specialized linearstep for doing antialiasing
|
450
|
+
*/
|
451
|
+
float distanceToRatio(float d) {
|
452
|
+
return clamp(d * uDevicePixelRatio + 0.5, 0.0, 1.0);
|
453
|
+
}
|
454
|
+
|
455
|
+
vec4 distanceToColor(float d, vec4 fill, vec4 stroke, float halfStrokeWidth) {
|
456
|
+
if (halfStrokeWidth > 0.0) {
|
457
|
+
// Distance to stroke's edge. Negative inside the stroke.
|
458
|
+
float sd = abs(d) - halfStrokeWidth;
|
459
|
+
return mix(
|
460
|
+
stroke,
|
461
|
+
d <= 0.0 ? fill : vec4(0.0),
|
462
|
+
distanceToRatio(sd));
|
463
|
+
} else {
|
464
|
+
return fill * distanceToRatio(-d);
|
465
|
+
}
|
466
|
+
}
|
467
|
+
`,HE=`// Utils ------------
|
468
|
+
|
469
|
+
vec3 getDiscreteColor(sampler2D s, int index) {
|
470
|
+
return texelFetch(s, ivec2(index % textureSize(s, 0).x, 0), 0).rgb;
|
471
|
+
}
|
472
|
+
|
473
|
+
vec3 getInterpolatedColor(sampler2D s, float unitValue) {
|
474
|
+
return texture(s, vec2(unitValue, 0.0)).rgb;
|
475
|
+
}
|
476
|
+
|
477
|
+
float clampToRange(float value, vec2 range) {
|
478
|
+
return clamp(value, min(range[0], range[1]), max(range[0], range[1]));
|
479
|
+
}
|
480
|
+
|
481
|
+
// Scales ------------
|
482
|
+
// Based on d3 scales: https://github.com/d3/d3-scale
|
483
|
+
|
484
|
+
float scaleIdentity(float value) {
|
485
|
+
return value;
|
486
|
+
}
|
487
|
+
|
488
|
+
float scaleLinear(float value, vec2 domain, vec2 range) {
|
489
|
+
float domainSpan = domain[1] - domain[0];
|
490
|
+
float rangeSpan = range[1] - range[0];
|
491
|
+
return (value - domain[0]) / domainSpan * rangeSpan + range[0];
|
492
|
+
}
|
493
|
+
|
494
|
+
float scaleLog(float value, vec2 domain, vec2 range, float base) {
|
495
|
+
// y = m log(x) + b
|
496
|
+
// TODO: Perf optimization: precalculate log domain in js.
|
497
|
+
// TODO: Reversed domain, etc
|
498
|
+
return scaleLinear(log(value) / log(base), log(domain) / log(base), range);
|
499
|
+
}
|
500
|
+
|
501
|
+
float symlog(float value, float constant) {
|
502
|
+
// WARNING: emulating log1p with log(x + 1). Small numbers are likely to
|
503
|
+
// have significant precision problems.
|
504
|
+
return sign(value) * log(abs(value / constant) + 1.0);
|
505
|
+
}
|
506
|
+
|
507
|
+
float scaleSymlog(float value, vec2 domain, vec2 range, float constant) {
|
508
|
+
return scaleLinear(
|
509
|
+
symlog(value, constant),
|
510
|
+
vec2(symlog(domain[0], constant), symlog(domain[1], constant)),
|
511
|
+
range
|
512
|
+
);
|
513
|
+
}
|
514
|
+
|
515
|
+
float scalePow(float value, vec2 domain, vec2 range, float exponent) {
|
516
|
+
// y = mx^k + b
|
517
|
+
// TODO: Perf optimization: precalculate pow domain in js.
|
518
|
+
// TODO: Reversed domain, etc
|
519
|
+
return scaleLinear(
|
520
|
+
pow(abs(value), exponent) * sign(value),
|
521
|
+
pow(abs(domain), vec2(exponent)) * sign(domain),
|
522
|
+
range
|
523
|
+
);
|
524
|
+
}
|
525
|
+
|
526
|
+
// TODO: scaleThreshold
|
527
|
+
// TODO: scaleQuantile (special case of threshold scale)
|
528
|
+
|
529
|
+
float scaleBand(float value, vec2 domainExtent, vec2 range,
|
530
|
+
float paddingInner, float paddingOuter,
|
531
|
+
float align, float band) {
|
532
|
+
|
533
|
+
// TODO: reverse
|
534
|
+
float start = range[0];
|
535
|
+
float stop = range[1];
|
536
|
+
|
537
|
+
float n = domainExtent[1] - domainExtent[0];
|
538
|
+
|
539
|
+
// Adapted from: https://github.com/d3/d3-scale/blob/master/src/band.js
|
540
|
+
float step = (stop - start) / max(1.0, n - paddingInner + paddingOuter * 2.0);
|
541
|
+
start += (stop - start - step * (n - paddingInner)) * align;
|
542
|
+
float bandwidth = step * (1.0 - paddingInner);
|
543
|
+
|
544
|
+
return start + (value - domainExtent[0]) * step + bandwidth * band;
|
545
|
+
}
|
546
|
+
`,QE=`float scaleIdentityFp64(vec2 value) {
|
547
|
+
return value[0];
|
548
|
+
}
|
549
|
+
|
550
|
+
float scaleLinearFp64(vec2 value, vec4 domain, vec2 range) {
|
551
|
+
vec2 domainSpan = sub_fp64(domain.zw, domain.xy);
|
552
|
+
float rangeSpan = range[1] - range[0];
|
553
|
+
|
554
|
+
float unitValue = div_fp64(sub_fp64(value, domain.xy), domainSpan).x;
|
555
|
+
return unitValue * rangeSpan + range[0];
|
556
|
+
}
|
557
|
+
|
558
|
+
float scaleBandFp64(vec2 value, vec4 domainExtent, vec2 range,
|
559
|
+
float paddingInner, float paddingOuter,
|
560
|
+
float align, float band) {
|
561
|
+
|
562
|
+
// TODO: reverse
|
563
|
+
float start = range[0];
|
564
|
+
float stop = range[1];
|
565
|
+
|
566
|
+
vec2 domainSpan = sub_fp64(domainExtent.zw, domainExtent.xy);
|
567
|
+
float n = domainSpan.x;
|
568
|
+
|
569
|
+
// Based on: https://github.com/d3/d3-scale/blob/master/src/band.js
|
570
|
+
float step = (stop - start) / max(1.0, n - paddingInner + paddingOuter * 2.0);
|
571
|
+
start += (stop - start - step * (n - paddingInner)) * align;
|
572
|
+
float bandwidth = step * (1.0 - paddingInner);
|
573
|
+
|
574
|
+
return start + sub_fp64(value, domainExtent.xy).x * step + bandwidth * band;
|
575
|
+
}
|
576
|
+
`,VE=`
|
577
|
+
/**
|
578
|
+
* Describes where a sample facet should be shown. Interpolating between the
|
579
|
+
* current and target positions/heights allows for transitioning between facet
|
580
|
+
* configurations.
|
581
|
+
*/
|
582
|
+
struct SampleFacetPosition {
|
583
|
+
float pos;
|
584
|
+
float height;
|
585
|
+
float targetPos;
|
586
|
+
float targetHeight;
|
587
|
+
};
|
588
|
+
|
589
|
+
/**
|
590
|
+
* Trasition fraction [0, 1] between the current and target configurations.
|
591
|
+
*/
|
592
|
+
uniform float uTransitionOffset;
|
593
|
+
|
594
|
+
|
595
|
+
// ----------------------------------------------------------------------------
|
596
|
+
|
597
|
+
#if !defined(SAMPLE_FACET_UNIFORM) && !defined(SAMPLE_FACET_TEXTURE)
|
598
|
+
|
599
|
+
SampleFacetPosition getSampleFacetPos() {
|
600
|
+
return SampleFacetPosition(0.0, 1.0, 0.0, 1.0);
|
601
|
+
}
|
602
|
+
|
603
|
+
#elif defined(SAMPLE_FACET_UNIFORM)
|
604
|
+
|
605
|
+
/**
|
606
|
+
* Location and height of the band on the Y axis on a normalized [0, 1] scale.
|
607
|
+
* Elements: curr pos, curr height, target pos, target height
|
608
|
+
*/
|
609
|
+
uniform vec4 uSampleFacet;
|
610
|
+
|
611
|
+
SampleFacetPosition getSampleFacetPos() {
|
612
|
+
return SampleFacetPosition(
|
613
|
+
1.0 - uSampleFacet.x - uSampleFacet.y,
|
614
|
+
uSampleFacet.y,
|
615
|
+
1.0 - uSampleFacet.z - uSampleFacet.w,
|
616
|
+
uSampleFacet.w
|
617
|
+
);
|
618
|
+
}
|
619
|
+
|
620
|
+
#elif defined(SAMPLE_FACET_TEXTURE)
|
621
|
+
|
622
|
+
uniform sampler2D uSampleFacetTexture;
|
623
|
+
|
624
|
+
SampleFacetPosition getSampleFacetPos() {
|
625
|
+
vec4 texel = texelFetch(uSampleFacetTexture, ivec2(int(attr_facetIndex), 0), 0);
|
626
|
+
return SampleFacetPosition(
|
627
|
+
1.0 - texel.r - texel.g,
|
628
|
+
texel.g,
|
629
|
+
1.0 - texel.r - texel.g,
|
630
|
+
texel.g);
|
631
|
+
}
|
632
|
+
|
633
|
+
#endif
|
634
|
+
|
635
|
+
// ----------------------------------------------------------------------------
|
636
|
+
|
637
|
+
bool isFacetedSamples(SampleFacetPosition facetPos) {
|
638
|
+
return facetPos != SampleFacetPosition(0.0, 1.0, 0.0, 1.0);
|
639
|
+
}
|
640
|
+
|
641
|
+
bool isFacetedSamples() {
|
642
|
+
return isFacetedSamples(getSampleFacetPos());
|
643
|
+
}
|
644
|
+
|
645
|
+
bool isInTransit() {
|
646
|
+
return uTransitionOffset > 0.0;
|
647
|
+
}
|
648
|
+
|
649
|
+
float getTransitionFraction(float xPos) {
|
650
|
+
return smoothstep(0.0, 0.7 + uTransitionOffset, (xPos - uTransitionOffset) * 2.0);
|
651
|
+
}
|
652
|
+
|
653
|
+
vec2 applySampleFacet(vec2 pos) {
|
654
|
+
SampleFacetPosition facetPos = getSampleFacetPos();
|
655
|
+
|
656
|
+
if (!isFacetedSamples(facetPos)) {
|
657
|
+
return pos;
|
658
|
+
} else if (isInTransit()) {
|
659
|
+
vec2 interpolated = mix(
|
660
|
+
vec2(facetPos.pos, facetPos.height),
|
661
|
+
vec2(facetPos.targetPos, facetPos.targetHeight),
|
662
|
+
getTransitionFraction(pos.x));
|
663
|
+
return vec2(pos.x, interpolated[0] + pos.y * interpolated[1]);
|
664
|
+
} else {
|
665
|
+
return vec2(pos.x, facetPos.pos + pos.y * facetPos.height);
|
666
|
+
}
|
667
|
+
}
|
668
|
+
|
669
|
+
float getSampleFacetHeight(vec2 pos) {
|
670
|
+
SampleFacetPosition facetPos = getSampleFacetPos();
|
671
|
+
|
672
|
+
if (!isFacetedSamples(facetPos)) {
|
673
|
+
return 1.0;
|
674
|
+
} else if (isInTransit()) {
|
675
|
+
return mix(
|
676
|
+
facetPos.height,
|
677
|
+
facetPos.targetHeight,
|
678
|
+
getTransitionFraction(pos.x));
|
679
|
+
} else {
|
680
|
+
return facetPos.height;
|
681
|
+
}
|
682
|
+
}
|
683
|
+
`,_E=`/*
|
684
|
+
* Based on concepts presented at:
|
685
|
+
* https://webglfundamentals.org/webgl/lessons/webgl-picking.html
|
686
|
+
* https://deck.gl/docs/developer-guide/custom-layers/picking
|
687
|
+
*/
|
688
|
+
|
689
|
+
uniform bool uPickingEnabled;
|
690
|
+
|
691
|
+
flat out highp vec4 vPickingColor;
|
692
|
+
|
693
|
+
/**
|
694
|
+
* Passes the unique id to the fragment shader as a color if picking is enabled.
|
695
|
+
* Returns true if picking is enabled.
|
696
|
+
*/
|
697
|
+
bool setupPicking() {
|
698
|
+
if (uPickingEnabled) {
|
699
|
+
#ifdef uniqueId_DEFINED
|
700
|
+
int id = int(getScaled_uniqueId());
|
701
|
+
// TODO: Take the sign bit into account
|
702
|
+
vPickingColor = vec4(
|
703
|
+
ivec4(id >> 0, id >> 8, id >> 16, 0xFF) & 0xFF
|
704
|
+
) / float(0xFF);
|
705
|
+
#else
|
706
|
+
vPickingColor = vec4(1.0);
|
707
|
+
#endif
|
708
|
+
return true;
|
709
|
+
}
|
710
|
+
return false;
|
711
|
+
}
|
712
|
+
`,YE=`uniform bool uPickingEnabled;
|
713
|
+
|
714
|
+
flat in highp vec4 vPickingColor;
|
715
|
+
`;const fs=Symbol("cacheMap");function ur(t,e,n){let r=Si(t).get(e);return r===void 0&&(r=n(e),Si(t).set(e,r)),r}function cp(t,e){Si(t).delete(e)}function Ei(t,e){const n=Si(t);for(const r of n.keys())r.startsWith(e)&&n.delete(r);Si(t).delete(e)}function up(t){t[fs]=new Map}function Si(t){return t[fs]||up(t),t[fs]}function WE(t,e,n,r){const i=se(t)?t:t.name,o=!se(t)&&t.extent||[0,1];if(n===void 0&&!se(t)&&(n=t.count),i){const s=hc(i);if(Ce(s)){const a=fp(s,{extent:o,count:n});return Di(e,{minMag:e.LINEAR,format:e.RGB,height:1,wrap:e.CLAMP_TO_EDGE},a,r)}else{if(Qe(s))return lp(s,e);throw new Error("Unknown scheme: "+i)}}}function XE(t,e="rgb",n,r){const i=No(t,se(e)?e:e.type,se(e)?void 0:e.gamma),o=fp(i);return Di(n,{minMag:n.LINEAR,format:n.RGB,height:1,wrap:n.CLAMP_TO_EDGE},o,r)}function qE(t,e,n,r){const i=Math.max(t.length,n||0),o=new Float32Array(i);for(let s=0;s<i;s++)o[s]=t[s%t.length];return Di(e,{minMag:e.NEAREST,format:e.RED,internalFormat:e.R32F,height:1},o,r)}function lp(t,e,n,r){const i=hp(t,n);return Di(e,{minMag:e.NEAREST,format:e.RGB,height:1},i,r)}function fp(t,{extent:e=[0,1],reverse:n=!1,count:r=256}={}){const i=e[0],o=he(e)-i,s=ho(r).map(a=>a/(r-1)).map(a=>i+a/o).map(t);return n&&s.reverse(),hp(s)}function hp(t,e){const n=Math.max(t.length,e||0),r=new Uint8Array(n*3);for(let i=0;i<n;i++){const o=vi(t[i%t.length]).rgb();r[i*3+0]=o.r,r[i*3+1]=o.g,r[i*3+2]=o.b}return r}class ZE{constructor(e,n){this._container=e,this._sizeSource=n,this._shaderCache=new Map,this._listeners=[],this.rangeTextures=new WeakMap;const r=document.createElement("canvas");e.appendChild(r);const i=sE(r,{antialias:!0,depth:!1,premultipliedAlpha:!0});if(!i)throw new Error("Unable to initialize WebGL. Your browser or machine may not support it.");if(!Jn(i))throw new Error("Your web browser does not support WebGL 2.0. Chrome, Firefox, and Safari Tech Preview should work.");_0(i),i.blendFunc(i.ONE,i.ONE_MINUS_SRC_ALPHA),this._shaderDefines=uE(i),this.canvas=r,this.gl=i,this._pickingAttachmentOptions=[{format:i.RGBA,type:i.UNSIGNED_BYTE,minMag:i.LINEAR,wrap:i.CLAMP_TO_EDGE}],this._pickingBufferInfo=eE(i,this._pickingAttachmentOptions),i.bindFramebuffer(i.FRAMEBUFFER,null),this.adjustGl(),this._resizeObserver=new ResizeObserver(o=>{this.invalidateSize(),this._emit("resize")}),this._resizeObserver.observe(this._container),this._updateDpr()}invalidateSize(){this._logicalCanvasSize=void 0,this._updateDpr(),this.adjustGl()}_updateDpr(){this.dpr=window.devicePixelRatio}compileShader(e,n){const r="#version 300 es",i="precision mediump float;";Qe(n)&&(n=n.join(`
|
716
|
+
|
717
|
+
`));const o=this.gl,s=n.replaceAll(/ {2,}|^\s*\/\/.*$/gm,"");let a=this._shaderCache.get(s);if(!a){const c=[r,i,n].join(`
|
718
|
+
|
719
|
+
`);a=o.createShader(e),o.shaderSource(a,c),o.compileShader(a),this._shaderCache.set(s,a)}return a}adjustGl(){const e=this.getLogicalCanvasSize();this.canvas.style.width=`${e.width}px`,this.canvas.style.height=`${e.height}px`;const n=this.getPhysicalCanvasSize(e);this.canvas.width=n.width,this.canvas.height=n.height,tE(this.gl,this._pickingBufferInfo,this._pickingAttachmentOptions)}finalize(){this._resizeObserver.unobserve(this._container),this.canvas.remove()}getPhysicalCanvasSize(e){return e=e||this.getLogicalCanvasSize(),{width:e.width*this.dpr,height:e.height*this.dpr}}getLogicalCanvasSize(){var o,s,a,c;if(this._logicalCanvasSize)return this._logicalCanvasSize;const e=(s=(o=this._sizeSource)==null?void 0:o.call(this))!=null?s:{width:void 0,height:void 0},n=window.getComputedStyle(this._container,null),r=(a=e.width)!=null?a:this._container.clientWidth-parseFloat(n.paddingLeft)-parseFloat(n.paddingRight),i=(c=e.height)!=null?c:this._container.clientHeight-parseFloat(n.paddingTop)-parseFloat(n.paddingBottom);return this._logicalCanvasSize={width:r,height:i},this._logicalCanvasSize}addEventListener(e,n){this._listeners.push({type:e,listener:n})}_emit(e){for(const n of this._listeners)n.type===e&&n.listener()}readPickingPixel(e,n){const r=this.gl;e*=this.dpr,n*=this.dpr;const i=this.getPhysicalCanvasSize().height,o=new Uint8Array(4);return r.bindFramebuffer(r.FRAMEBUFFER,this._pickingBufferInfo.framebuffer),r.readPixels(e,i-n-1,1,1,r.RGBA,r.UNSIGNED_BYTE,o),r.bindFramebuffer(r.FRAMEBUFFER,null),o}clearAll(){const e=this.gl,{width:n,height:r}=this.getPhysicalCanvasSize();e.viewport(0,0,n,r),e.disable(e.SCISSOR_TEST),e.clearColor(0,0,0,0),e.clear(e.COLOR_BUFFER_BIT)}createRangeTexture(e,n=!1){const r=this.rangeTextures.get(e);if(!n&&r)return;function i(s,a){return Qt(a.type)?a.domain().length:a.type=="threshold"?a.domain().length+1:a.type=="quantize"||a.type=="quantile"?s!=null?s:4:s}const o=e.channel;if(Sn(o)){const s=e.getScaleProps(),a=e.getScale();let c;if(s.scheme){let u=se(s.scheme)?void 0:s.scheme.count;u=i(u,a),c=WE(s.scheme,this.gl,u,r)}else{const u=a.range();To(a.type)?c=XE(u,s.interpolate,this.gl,r):c=lp(u,this.gl,a.domain().length,r)}this.rangeTextures.set(e,c)}else{const s=e.getScale();if(s.type==="ordinal"||Yn(s.type)){const a=Go(o)?Bd(o):u=>u,c=e.getScale().range();this.rangeTextures.set(e,qE(c.map(a),this.gl,s.domain().length,r))}}}}function KE(t,e="",n=0){const r=/ERROR:\s*\d+:(\d+)/gi,i=[...e.matchAll(r)],o=new Map(i.map((s,a)=>{const c=parseInt(s[1]),u=i[a+1],f=u?u.index:e.length,l=e.substring(s.index,f);return[c-1,l]}));return t.split(`
|
720
|
+
`).map((s,a)=>{const c=o.get(a);return`${a+1+n}: ${s}${c?`
|
721
|
+
|
722
|
+
^^^ ${c}`:""}`}).join(`
|
723
|
+
`)}function JE(t,e,n){var r=t.createProgram();t.attachShader(r,e),t.attachShader(r,n),t.linkProgram(r);function i(){let o,s;if(!t.getProgramParameter(r,t.LINK_STATUS)){o=t.getProgramInfoLog(r);for(const c of[e,n])t.getShaderParameter(c,t.COMPILE_STATUS)||(o=t.getShaderInfoLog(c),s=KE(t.getShaderSource(c),o,0)+`
|
724
|
+
Error compiling: ${o}`,t.deleteShader(c));t.deleteProgram(r)}if(o)return{message:o,detail:s}}return{program:r,getProgramErrors:i}}function Di(t,e,n,r){return r?l0(t,r,n,e):r=gi(t,U(T({},e),{src:n})),r}function $E(...t){const e={get:function(n,r,i){for(const o of t){const a=o()[r];if(a!==void 0)return a}},has:function(n,r,i){for(const o of t){const s=o();if(r in s)return!0}return!1}};return new Proxy({},e)}const eS="SAMPLE_FACET_UNIFORM",dp="SAMPLE_FACET_TEXTURE";class Ci{constructor(e){this.unitView=e,this.encoders=void 0,this.bufferInfo=void 0,this.programInfo=void 0,this.vertexArrayInfo=void 0,this.domainUniformInfo=void 0,this.defaultProperties={get clip(){return["x","y"].map(n=>e.getScaleResolution(n)).some(n=>{var r;return(r=n==null?void 0:n.isZoomable())!=null?r:!1})},xOffset:0,yOffset:0,minBufferSize:0},this.properties=$E(typeof this.unitView.spec.mark=="object"?()=>this.unitView.spec.mark:()=>({}),()=>this.defaultProperties)}get opaque(){return!1}getAttributes(){throw new Error("Not implemented!")}getSupportedChannels(){return["sample","facetIndex","x","y","color","opacity","search","uniqueId"]}getDefaultEncoding(){const e={sample:void 0,uniqueId:void 0};return this.isPickingParticipant()&&(e.uniqueId={field:"_uniqueId",type:"nominal",scale:null}),e}fixEncoding(e){return e}get encoding(){return ur(this,"encoding",()=>{const e=this.getDefaultEncoding(),n=this.unitView.getEncoding(),r=s=>({value:this.properties[s]}),i=Object.fromEntries(this.getSupportedChannels().map(s=>[s,r(s)]).filter(s=>s[1].value!==void 0)),o=this.fixEncoding(T(T(T({},e),i),n));for(const s of Object.keys(o))this.getSupportedChannels().includes(s)||delete o[s];return o})}getContext(){return this.unitView.context}getType(){return this.unitView.getMarkType()}initializeData(){}initializeEncoders(){this.encoders=hv(this)}async initializeGraphics(){}updateGraphicsData(){}getSampleFacetMode(){if(this.encoders.facetIndex)return dp;if(this.unitView.getFacetAccessor())return eS}createAndLinkShaders(e,n,r=[]){const i=this.getAttributes();r.push("// view: "+this.unitView.getPathString()),this.domainUniforms=[];let o=[];const s=this.getSampleFacetMode();s&&r.push(`#define ${s}`);for(const l of i){let h;if(l in this.encoding)h=l;else continue;const d=this.encoding[h];if(!!d)if(vn(d))o.push(TE(h,d.value));else{const p=St(d)&&d.resolutionChannel||h,g=this.unitView.getScaleResolution(p).getScale(),m=NE(h,g,d);o.push(m.glsl),m.domainUniform&&this.domainUniforms.push(m.domainUniform)}}const a=this.domainUniforms.length?`layout(std140) uniform Domains {
|
725
|
+
`+this.domainUniforms.map(l=>` ${l}
|
726
|
+
`).join("")+`};
|
727
|
+
|
728
|
+
`:"",c=[...r,ap,HE,a,...o,VE,_E,e];c.some(l=>/[Ff]p64/.test(l))&&(c.unshift(QE),c.unshift(GE));const u=[...r,ap,YE,n],f=this.gl;this.programStatus=JE(f,this.glHelper.compileShader(f.VERTEX_SHADER,c),this.glHelper.compileShader(f.FRAGMENT_SHADER,u))}finalizeGraphicsInitialization(){const e=this.programStatus.getProgramErrors();if(e){e.detail&&console.warn(e.detail);const n=new Error("Cannot create shader program: "+e.message);throw n.view=this.unitView,n}this.programInfo=z3(this.gl,this.programStatus.program),delete this.programStatus,this.domainUniforms.length&&(this.domainUniformInfo=O3(this.gl,this.programInfo,"Domains"))}deleteGraphicsData(){if(this.bufferInfo){const e=this.gl;for(let n=0;n<8;n++)e.disableVertexAttribArray(n);Object.values(this.bufferInfo.attribs).forEach(n=>this.gl.deleteBuffer(n.buffer)),this.bufferInfo.indices&&this.gl.deleteBuffer(this.bufferInfo.indices),this.bufferInfo=void 0}}updateBufferInfo(e){if(this.gl.bindVertexArray(null),this.bufferInfo&&e.vertexCount<=this.bufferInfo.allocatedVertices)for(const[n,r]of Object.entries(e.arrays))r.data&&Wv(this.gl,this.bufferInfo.attribs[n],r.data,0);else this.deleteGraphicsData(),this.bufferInfo=Zv(this.gl,e.arrays,{numElements:e.vertexCount}),this.bufferInfo.allocatedVertices=e.allocatedVertices,this.vertexArrayInfo=void 0}get glHelper(){return this.getContext().glHelper}get gl(){return this.glHelper.gl}onBeforeSampleAnimation(){}onAfterSampleAnimation(){}isReady(){return this.bufferInfo&&this.programInfo}isPickingParticipant(){if(this.properties.tooltip===null)return!1;for(const e of this.unitView.getAncestors())if(!e.isPickingSupported())return!1;return!0}prepareRender(e){var i;const n=this.glHelper,r=this.gl;if(this.vertexArrayInfo||(this.vertexArrayInfo=nE(this.gl,this.programInfo,this.bufferInfo)),r.useProgram(this.programInfo.program),this.domainUniformInfo){for(const[o,s]of Object.entries(this.domainUniformInfo.setters)){const a=o.substring(np.length),c=this.encoding[a],u=St(c)&&c.resolutionChannel||a,f=this.unitView.getScaleResolution(u);if(f){const l=f.getScale(),h=Qt(l.type)?[0,l.domain().length]:l.domain();s(l.fp64?h.map(d=>tu(d)).flat():h)}}B3(r,this.programInfo,this.domainUniformInfo)}for(const[o,s]of Object.entries(this.encoding))if(St(s)){const a=St(s)&&s.resolutionChannel||o,c=this.unitView.getScaleResolution(a),u=n.rangeTextures.get(c);u&&Se(this.programInfo,{[ou+o]:u})}if(this.getSampleFacetMode()==dp){let o;for(const s of this.unitView.getAncestors())if(o=s.getSampleFacetTexture(),o)break;Se(this.programInfo,{uSampleFacetTexture:o})}Se(this.programInfo,{ONE:1,uDevicePixelRatio:this.glHelper.dpr,uViewOpacity:this.unitView.getEffectiveOpacity(),uPickingEnabled:((i=e.picking)!=null?i:!1)&&this.isPickingParticipant()}),Se(this.programInfo,{uSampleFacet:[0,1,0,1],uTransitionOffset:0}),this.opaque||e.picking?r.disable(r.BLEND):r.enable(r.BLEND)}prepareSampleFacetRendering(e){const n=e.sampleFacetRenderingOptions,r=this.programInfo.uniformSetters.uSampleFacet;if(n&&r){const i=n.locSize?n.locSize.location:0,o=n.locSize?n.locSize.size:1;if(i>1||i+o<0)return!1;const s=n.targetLocSize?n.targetLocSize.location:i,a=n.targetLocSize?n.targetLocSize.size:o;this.gl.uniform4f(r.location,i,o,s,a)}return!0}render(e){}createRenderCallback(e,n,r){var s;const i=this;let o;if(this.properties.buildIndex){const a=(s=this.unitView.getScaleResolution("x"))==null?void 0:s.getScale();o=c=>{if(a&&c.xIndex){const u=a.domain(),f=c.xIndex(u[0],u[1]),l=f[0],h=f[1]-l;h>0&&e(l,h)}else e(c.offset,c.count)}}else o=a=>e(a.offset,a.count);if(this.properties.dynamicData)return function(){const c=r().get(n.facetId);c&&c.count&&i.prepareSampleFacetRendering(n)&&o(c)};{const a=r().get(n.facetId);if(a&&a.count)return function(){i.prepareSampleFacetRendering(n)&&o(a)}}}setViewport(e,n){const r=this.glHelper.dpr,i=this.gl,o=this.properties,s=this.glHelper.getLogicalCanvasSize(),a=.5,c=(o.xOffset||0)+a,u=(o.yOffset||0)+a;let f,l=e;if(o.clip||n){let h=0,d=0,p;n?(l=o.clip?e.intersect(n):n,p=[e.width/l.width,e.height/l.height],d=Math.max(0,e.y2-n.y2),h=Math.max(0,e.x2-n.x2)):p=[1,1];const g=[e.x,s.height-l.y2,Math.max(0,l.width),Math.max(0,l.height)].map(x=>x*r),m=g.map(x=>Math.floor(x)),[y,w]=g.map((x,E)=>x-m[E]);i.viewport(...m),i.scissor(...m),i.enable(i.SCISSOR_TEST),f={uViewOffset:[(c+h+y)/l.width,-(u+d-w)/l.height],uViewScale:p}}else i.viewport(0,0,s.width*r,s.height*r),i.disable(i.SCISSOR_TEST),f={uViewOffset:[(e.x+c)/s.width,(s.height-e.y-u-e.height)/s.height],uViewScale:[e.width/s.width,e.height/s.height]};return Se(this.programInfo,f),Se(this.programInfo,{uViewportSize:[e.width,e.height]}),l.height>0&&l.width>0}findDatumAt(e,n){}}function lu(t,e){const n=pv(e);if(t[e])if(t[n]){if(t[e].type!="quantitative"){const r=(1-(t[e].band||1))/2;t[e].band=r,t[n].band=-r}}else if(t[e].type=="quantitative")t[n]={datum:0};else{t[e]=T({},t[e]),t[n]=T({},t[e]);const r=(1-(t[e].band||1))/2;t[e].band=0+r,t[n].band=1-r}else{if(t[n])throw new Error(`Only secondary channel ${n} has been specified!`);t[e]={value:0},t[n]={value:1}}}function pp(t,e){t.stroke||(e?t.stroke={value:null}:t.stroke=T({resolutionChannel:"color"},t.color)),vn(t.stroke)&&t.stroke.value===null&&(t.strokeWidth={value:0}),t.strokeOpacity||(t.strokeOpacity=T({resolutionChannel:"opacity"},t.opacity))}function gp(t,e){vn(t.fill)&&t.fill.value===null?t.fillOpacity={value:0}:t.fill||(t.fill=T({resolutionChannel:"color"},t.color),!e&&!t.fillOpacity&&(t.fillOpacity={value:0})),t.fillOpacity||(e?t.fillOpacity=T({resolutionChannel:"opacity"},t.opacity):t.fillOpacity={value:0})}class tS extends Ci{constructor(e){super(e);Object.defineProperties(this.defaultProperties,Object.getOwnPropertyDescriptors({x2:void 0,y2:void 0,filled:!0,color:"#4c78a8",opacity:1,strokeWidth:3,cornerRadius:0,minWidth:.5,minHeight:.5,minOpacity:1,tessellationZoomThreshold:10,tessellationTiles:35}))}getAttributes(){return["uniqueId","facetIndex","x","x2","y","y2","fill","stroke","fillOpacity","strokeOpacity","strokeWidth"]}getSupportedChannels(){return[...super.getSupportedChannels(),"x2","y2","fill","stroke","fillOpacity","strokeOpacity","strokeWidth"]}get opaque(){return ur(this,"opaque",()=>!this._isRoundedCorners()&&!this._isStroked()&&vn(this.encoding.fillOpacity)&&this.encoding.fillOpacity.value==1&&this.properties.minOpacity==1)&&this.unitView.getEffectiveOpacity()==1}fixEncoding(e){return lu(e,"x"),lu(e,"y"),pp(e,this.properties.filled),gp(e,this.properties.filled),delete e.color,delete e.opacity,e}onBeforeSampleAnimation(){}onAfterSampleAnimation(){}_isRoundedCorners(){return["","TopLeft","TopRight","BottomLeft","BottomRight"].map(e=>"cornerRadius"+e).some(e=>this.properties[e]>0)}_isStroked(){const e=this.encoding.strokeWidth;return!(vn(e)&&!e.value)}async initializeGraphics(){await super.initializeGraphics();const e=[];this._isRoundedCorners()&&e.push("ROUNDED_CORNERS"),this._isStroked()&&e.push("STROKED"),this.createAndLinkShaders(aE,cE,e.map(n=>"#define "+n))}updateGraphicsData(){const e=this.unitView.getCollector(),n=e.getItemCount(),r=new PE({encoders:this.encoders,attributes:this.getAttributes(),numItems:n,buildXIndex:this.properties.buildIndex});r.addBatches(e.facetBatches);const i=r.toArrays();this.rangeMap=i.rangeMap,this.updateBufferInfo(i)}prepareRender(e){var r,i,o,s;super.prepareRender(e);const n=this.properties;Se(this.programInfo,{uMinSize:[n.minWidth,n.minHeight],uMinOpacity:n.minOpacity,uCornerRadii:[(r=n.cornerRadiusTopRight)!=null?r:n.cornerRadius,(i=n.cornerRadiusBottomRight)!=null?i:n.cornerRadius,(o=n.cornerRadiusTopLeft)!=null?o:n.cornerRadius,(s=n.cornerRadiusBottomLeft)!=null?s:n.cornerRadius]}),sr(this.gl,this.programInfo,this.vertexArrayInfo)}render(e){const n=this.gl;return this.createRenderCallback((r,i)=>{mi(n,this.vertexArrayInfo,n.TRIANGLE_STRIP,i,r)},e,()=>this.rangeMap)}findDatumAt(e,n){e=Ye(e);const r=this.encoders,i=this.unitView.getCollector().facetBatches.get(e),o=r.x.accessor,s=r.x2.accessor;if(i)return i.find(a=>n>=o(a)&&n<s(a))}}var nS=`precision mediump float;
|
729
|
+
|
730
|
+
/**
|
731
|
+
* The stroke should only grow inwards, e.g, the diameter/outline is not affected by the stroke width.
|
732
|
+
* Thus, a point that has a zero size has no visible stroke. This allows strokes to be used with
|
733
|
+
* geometric zoom, etc.
|
734
|
+
*/
|
735
|
+
uniform bool uInwardStroke;
|
736
|
+
|
737
|
+
/** Maximum size of the largest point as the fraction of the height of the (faceted) view */
|
738
|
+
uniform lowp float uMaxRelativePointDiameter;
|
739
|
+
|
740
|
+
/** Scale factor for geometric zoom */
|
741
|
+
uniform float uScaleFactor;
|
742
|
+
|
743
|
+
/** The size of the largest point in the data */
|
744
|
+
uniform float uMaxPointSize;
|
745
|
+
|
746
|
+
uniform float uZoomLevel;
|
747
|
+
uniform float uSemanticThreshold;
|
748
|
+
|
749
|
+
flat out float vRadius;
|
750
|
+
flat out float vRadiusWithPadding;
|
751
|
+
flat out lowp vec4 vFillColor;
|
752
|
+
flat out lowp vec4 vStrokeColor;
|
753
|
+
flat out lowp float vShape;
|
754
|
+
flat out lowp float vHalfStrokeWidth;
|
755
|
+
flat out mat2 vRotationMatrix;
|
756
|
+
|
757
|
+
|
758
|
+
float computeSemanticThresholdFactor() {
|
759
|
+
// TODO: add smooth transition
|
760
|
+
return getScaled_semanticScore() >= uSemanticThreshold ? 1.0 : 0.0;
|
761
|
+
}
|
762
|
+
|
763
|
+
/**
|
764
|
+
* Computes a scaling factor for the points in a sample-faceted view.
|
765
|
+
*/
|
766
|
+
float getDownscaleFactor(vec2 pos) {
|
767
|
+
if (!isFacetedSamples()) {
|
768
|
+
return 1.0;
|
769
|
+
}
|
770
|
+
|
771
|
+
float sampleFacetHeight = getSampleFacetHeight(pos);
|
772
|
+
float maxPointDiameter = sqrt(uMaxPointSize);
|
773
|
+
|
774
|
+
float factor = sampleFacetHeight *
|
775
|
+
uViewportSize.y *
|
776
|
+
uMaxRelativePointDiameter;
|
777
|
+
|
778
|
+
return clamp(0.0, maxPointDiameter, factor) / maxPointDiameter;
|
779
|
+
}
|
780
|
+
|
781
|
+
// TODO: Move this into common.glsl or something
|
782
|
+
vec2 getDxDy() {
|
783
|
+
#if defined(dx_DEFINED) || defined(dy_DEFINED)
|
784
|
+
return vec2(getScaled_dx(), getScaled_dy()) / uViewportSize;
|
785
|
+
#else
|
786
|
+
return vec2(0.0, 0.0);
|
787
|
+
#endif
|
788
|
+
}
|
789
|
+
|
790
|
+
void main(void) {
|
791
|
+
|
792
|
+
float semanticThresholdFactor = computeSemanticThresholdFactor();
|
793
|
+
if (semanticThresholdFactor <= 0.0) {
|
794
|
+
gl_PointSize = 0.0;
|
795
|
+
// Exit early. MAY prevent some unnecessary calculations.
|
796
|
+
return;
|
797
|
+
}
|
798
|
+
|
799
|
+
float size = getScaled_size();
|
800
|
+
vec2 pos = vec2(getScaled_x(), getScaled_y()) + getDxDy();
|
801
|
+
|
802
|
+
gl_Position = unitToNdc(applySampleFacet(pos));
|
803
|
+
|
804
|
+
float strokeWidth = getScaled_strokeWidth();
|
805
|
+
|
806
|
+
float diameter = sqrt(size) *
|
807
|
+
uScaleFactor *
|
808
|
+
semanticThresholdFactor *
|
809
|
+
getDownscaleFactor(pos);
|
810
|
+
|
811
|
+
// Clamp minimum size and adjust opacity instead. Yields more pleasing result,
|
812
|
+
// no flickering etc.
|
813
|
+
float opacity = uViewOpacity;
|
814
|
+
if (strokeWidth <= 0.0 || uInwardStroke) {
|
815
|
+
float minDiameter = 1.0 / uDevicePixelRatio;
|
816
|
+
if (diameter < minDiameter) {
|
817
|
+
// We do some "cheap" gamma correction here. It breaks on dark background, though.
|
818
|
+
// First we take a square of the size and then apply "gamma" of 1.5.
|
819
|
+
opacity *= pow(diameter / minDiameter, 2.5);
|
820
|
+
diameter = minDiameter;
|
821
|
+
}
|
822
|
+
}
|
823
|
+
|
824
|
+
float fillOpa = getScaled_fillOpacity() * opacity;
|
825
|
+
float strokeOpa = getScaled_strokeOpacity() * opacity;
|
826
|
+
|
827
|
+
vShape = getScaled_shape();
|
828
|
+
|
829
|
+
// Circle doesn't have sharp corners. Do some special optimizations to minimize the point size.
|
830
|
+
bool circle = vShape == 0.0;
|
831
|
+
|
832
|
+
float angleInDegrees = getScaled_angle();
|
833
|
+
float angle = -angleInDegrees * PI / 180.0;
|
834
|
+
float sinTheta = sin(angle);
|
835
|
+
float cosTheta = cos(angle);
|
836
|
+
vRotationMatrix = mat2(cosTheta, sinTheta, -sinTheta, cosTheta);
|
837
|
+
float roomForRotation = circle ? 1.0 : sin(mod(angle, PI / 2.0) + PI / 4.0) / sin(PI / 4.0);
|
838
|
+
|
839
|
+
float aaPadding = 1.0 / uDevicePixelRatio;
|
840
|
+
float rotationPadding = (diameter * roomForRotation) - diameter;
|
841
|
+
// sqrt(3.0) ensures that the angles of equilateral triangles have enough room
|
842
|
+
float strokePadding = uInwardStroke ? 0.0 : strokeWidth * (circle ? 1.0 : sqrt(3.0));
|
843
|
+
float padding = rotationPadding + strokePadding + aaPadding;
|
844
|
+
gl_PointSize = (diameter + padding) * uDevicePixelRatio;
|
845
|
+
|
846
|
+
vRadius = diameter / 2.0;
|
847
|
+
vRadiusWithPadding = vRadius + padding / 2.0;
|
848
|
+
|
849
|
+
vHalfStrokeWidth = strokeWidth / 2.0;
|
850
|
+
|
851
|
+
vFillColor = vec4(getScaled_fill() * fillOpa, fillOpa);
|
852
|
+
vStrokeColor = vec4(getScaled_stroke() * strokeOpa, strokeOpa);
|
853
|
+
|
854
|
+
setupPicking();
|
855
|
+
}
|
856
|
+
`,rS=`const lowp vec4 white = vec4(1.0);
|
857
|
+
const lowp vec4 black = vec4(0.0, 0.0, 0.0, 1.0);
|
858
|
+
|
859
|
+
uniform bool uInwardStroke;
|
860
|
+
uniform float uGradientStrength;
|
861
|
+
|
862
|
+
flat in float vRadius;
|
863
|
+
flat in float vRadiusWithPadding;
|
864
|
+
|
865
|
+
flat in lowp vec4 vFillColor;
|
866
|
+
flat in lowp vec4 vStrokeColor;
|
867
|
+
flat in lowp float vShape;
|
868
|
+
flat in lowp float vHalfStrokeWidth;
|
869
|
+
|
870
|
+
flat in mat2 vRotationMatrix;
|
871
|
+
|
872
|
+
out lowp vec4 fragColor;
|
873
|
+
|
874
|
+
const float CIRCLE = 0.0;
|
875
|
+
const float SQUARE = 1.0;
|
876
|
+
const float TRIANGLE_UP = 2.0;
|
877
|
+
const float CROSS = 3.0;
|
878
|
+
const float DIAMOND = 4.0;
|
879
|
+
const float TRIANGLE_DOWN = 5.0;
|
880
|
+
const float TRIANGLE_RIGHT = 6.0;
|
881
|
+
const float TRIANGLE_LEFT = 7.0;
|
882
|
+
|
883
|
+
|
884
|
+
// The distance functions are inspired by:
|
885
|
+
// http://www.iquilezles.org/www/articles/distfunctions2d/distfunctions2d.htm
|
886
|
+
// However, these are not true distance functions, because the corners need to be sharp.
|
887
|
+
|
888
|
+
float circle(vec2 p, float r) {
|
889
|
+
return length(p) - r;
|
890
|
+
}
|
891
|
+
|
892
|
+
float square(vec2 p, float r) {
|
893
|
+
p = abs(p);
|
894
|
+
return max(p.x, p.y) - r;
|
895
|
+
}
|
896
|
+
|
897
|
+
float equilateralTriangle(vec2 p, float r, bool flip, bool swap) {
|
898
|
+
if (swap) {
|
899
|
+
p.xy = p.yx;
|
900
|
+
}
|
901
|
+
if (flip) {
|
902
|
+
p.y = -p.y;
|
903
|
+
}
|
904
|
+
|
905
|
+
float k = sqrt(3.0);
|
906
|
+
float kr = k * r;
|
907
|
+
//p.y -= kr * 2.0 / 3.0;
|
908
|
+
p.y -= kr / 2.0;
|
909
|
+
return max((abs(p.x) * k + p.y) / 2.0, -p.y - kr);
|
910
|
+
}
|
911
|
+
|
912
|
+
float crossShape(vec2 p, float r) {
|
913
|
+
p = abs(p);
|
914
|
+
|
915
|
+
vec2 b = vec2(0.4, 1.0) * r;
|
916
|
+
vec2 v = abs(p) - b.xy;
|
917
|
+
vec2 h = abs(p) - b.yx;
|
918
|
+
return min(max(v.x, v.y), max(h.x, h.y));
|
919
|
+
}
|
920
|
+
|
921
|
+
float diamond(vec2 p, float r) {
|
922
|
+
p = abs(p);
|
923
|
+
return (max(abs(p.x - p.y), abs(p.x + p.y)) - r) / sqrt(2.0);
|
924
|
+
}
|
925
|
+
|
926
|
+
void main() {
|
927
|
+
float d;
|
928
|
+
|
929
|
+
/** Normalized point coord */
|
930
|
+
vec2 p = vRotationMatrix * (2.0 * gl_PointCoord - 1.0) * vRadiusWithPadding;
|
931
|
+
float r = vRadius;
|
932
|
+
|
933
|
+
// We could also use textures here. Could even be faster, because we have plenty of branching here.
|
934
|
+
if (vShape == CIRCLE) {
|
935
|
+
d = circle(p, r);
|
936
|
+
|
937
|
+
} else if (vShape == SQUARE) {
|
938
|
+
d = square(p, r);
|
939
|
+
|
940
|
+
} else if (vShape == TRIANGLE_UP) {
|
941
|
+
d = equilateralTriangle(p, r, true, false);
|
942
|
+
|
943
|
+
} else if (vShape == CROSS) {
|
944
|
+
d = crossShape(p, r);
|
945
|
+
|
946
|
+
} else if (vShape == DIAMOND) {
|
947
|
+
d = diamond(p, r);
|
948
|
+
|
949
|
+
} else if (vShape == TRIANGLE_DOWN) {
|
950
|
+
d = equilateralTriangle(p, r, false, false);
|
951
|
+
|
952
|
+
} else if (vShape == TRIANGLE_RIGHT) {
|
953
|
+
d = equilateralTriangle(p, r, false, true);
|
954
|
+
|
955
|
+
} else if (vShape == TRIANGLE_LEFT) {
|
956
|
+
d = equilateralTriangle(p, r, true, true);
|
957
|
+
|
958
|
+
} else {
|
959
|
+
d = 0.0;
|
960
|
+
}
|
961
|
+
|
962
|
+
if (!uPickingEnabled) {
|
963
|
+
lowp vec4 fillColor = mix(vFillColor, white, -d * uGradientStrength / vRadius);
|
964
|
+
|
965
|
+
fragColor = distanceToColor(
|
966
|
+
d + (uInwardStroke ? vHalfStrokeWidth : 0.0),
|
967
|
+
fillColor,
|
968
|
+
vStrokeColor,
|
969
|
+
vHalfStrokeWidth);
|
970
|
+
|
971
|
+
} else if (d - vHalfStrokeWidth <= 0.0) {
|
972
|
+
fragColor = vPickingColor;
|
973
|
+
|
974
|
+
} else {
|
975
|
+
discard;
|
976
|
+
}
|
977
|
+
}
|
978
|
+
|
979
|
+
`;const Mt=1<<0,$t=1<<1,iS={};class ie{get behavior(){return 0}constructor(){this.children=[],this.parent=void 0,this.completed=!1}reset(){this.completed=!1;for(const e of this.children)e.reset()}initialize(){}_updatePropagator(){this._propagate=Function("children",ho(this.children.length).map(e=>`const child${e} = children[${e}];`).join(`
|
980
|
+
`)+`return function propagate(datum) {${ho(this.children.length).map(e=>`child${e}.handle(datum);`).join(`
|
981
|
+
`)}}`)(this.children)}setParent(e){this.parent=e}addChild(e){if(e.parent)throw new Error("Cannot add the child! It already has a parent.");return this.children.push(e),e.setParent(this),this._updatePropagator(),this}adopt(e){e.parent&&e.parent.removeChild(e),this.addChild(e)}adoptChildrenOf(e){for(const n of e.children)this.adopt(n)}insertAsParent(e){if(this.isRoot())throw new Error("Cannot insert a new parent for a root node!");e.parent=this.parent,this.parent.children[this.parent.children.indexOf(this)]=e,this.parent._updatePropagator(),this.parent=void 0,e.addChild(this)}removeChild(e){const n=this.children.indexOf(e);if(n>-1)this.children.splice(n,1),e.parent=void 0,this._updatePropagator();else throw new Error("Trying to remove an unknown child node!")}excise(){if(this.isRoot())throw new Error("Cannot excise root node!");if(this.isTerminal())this.parent.removeChild(this);else if(this.children.length==1){const e=this.children[0];e.setParent(this.parent),this.parent.children[this.parent.children.indexOf(this)]=e,this.parent._updatePropagator(),this.setParent(void 0),this.children.length=0}else throw new Error("Cannot excise a node that has multiple children!")}isRoot(){return!this.parent}isBranching(){return this.children.length>1}isTerminal(){return this.children.length==0}visit(e){e(this);for(const n of this.children)n.visit(e);e.afterChildren&&e.afterChildren(this)}subtreeToString(e=0){var r;const n=this.children.map(i=>i.subtreeToString(e+1)).join("");return" ".repeat(e*2)+"* "+((r=/^class ([A-Za-z0-9_]+)/.exec(""+this.constructor))==null?void 0:r[1])+`
|
982
|
+
`+n}getGlobalObject(){return this.parent?this.parent.getGlobalObject():iS}handle(e){this._propagate(e)}complete(){this.completed=!0;for(const e of this.children)e.complete()}beginBatch(e){for(const n of this.children)n.beginBatch(e)}_propagate(e){}}function mp(t){return t.type=="file"}function oS(t){return t.type=="facet"}class yp extends ie{constructor(e){super();this.k=e.size||500,this.reset()}reset(){super.reset(),this.reservoir=[],this.W=void 0,this.ingester=this._initialIngester}_initialIngester(e){this.reservoir.push(e),this.reservoir.length==this.k&&(this.W=Math.exp(Math.log(Math.random())/this.k),this.i=this.k,this.next=this.i,this.ingester=this._finalIngester,this._setNextStop())}_finalIngester(e){++this.i==this.next&&(this.reservoir[Math.floor(Math.random()*this.k)]=e,this.W*=Math.exp(Math.log(Math.random())/this.k),this._setNextStop())}_setNextStop(){this.next+=Math.floor(Math.log(Math.random())/Math.log(1-this.W))+1}handle(e){this.ingester(e)}complete(){for(const e of this.reservoir)this._propagate(e);super.complete()}}function Ap(t,e,n){const r=new yp({type:"sample",size:t});for(const i of e)r.handle(n(i));return r.complete(),r.reservoir}const sS={};class aS extends Ci{constructor(e){super(e);Object.defineProperties(this.defaultProperties,Object.getOwnPropertyDescriptors({x:.5,y:.5,color:"#4c78a8",filled:!0,opacity:1,size:100,semanticScore:0,shape:"circle",strokeWidth:2,fillGradientStrength:0,dx:0,dy:0,angle:0,sampleFacetPadding:.1,semanticZoomFraction:.02}))}getAttributes(){return["inwardStroke","uniqueId","facetIndex","x","y","size","semanticScore","shape","strokeWidth","gradientStrength","dx","dy","fill","stroke","fillOpacity","strokeOpacity","angle"]}getSupportedChannels(){return[...super.getSupportedChannels(),"size","semanticScore","shape","strokeWidth","dx","dy","fill","stroke","fillOpacity","strokeOpacity","angle"]}getDefaultEncoding(){return T(T({},super.getDefaultEncoding()),sS)}fixEncoding(e){return pp(e,this.properties.filled),gp(e,this.properties.filled),delete e.color,delete e.opacity,e}initializeData(){super.initializeData();const e=this.unitView.getAccessor("semanticScore");e&&(this.sampledSemanticScores=Float32Array.from(Ap(1e4,this.unitView.getCollector().getData(),e)),this.sampledSemanticScores.sort((n,r)=>n-r))}async initializeGraphics(){await super.initializeGraphics(),this.createAndLinkShaders(nS,rS)}finalizeGraphicsInitialization(){super.finalizeGraphicsInitialization(),this.gl.useProgram(this.programInfo.program);const e=this.properties;Se(this.programInfo,{uInwardStroke:e.inwardStroke,uGradientStrength:e.fillGradientStrength,uMaxRelativePointDiameter:1-2*e.sampleFacetPadding})}updateGraphicsData(){const e=this.unitView.getCollector(),n=e.getItemCount(),r=new RE({encoders:this.encoders,attributes:this.getAttributes(),numItems:Math.max(n,this.properties.minBufferSize||0)});r.addBatches(e.facetBatches);const i=r.toArrays();this.rangeMap=i.rangeMap,this.updateBufferInfo(i)}_getGeometricScaleFactor(){const e=Math.pow(2,this.properties.geometricZoomBound||0);return Math.pow(Math.min(1,this.unitView.getZoomLevel()/e),1/3)}_getMaxPointSize(){const e=this.encoders.size;return e.constant?e(null):e.scale.range().reduce((n,r)=>Math.max(n,r))}getSemanticThreshold(){if(this.sampledSemanticScores){const e=Math.max(0,1-this.properties.semanticZoomFraction*this.unitView.getZoomLevel());return e<=0?-1/0:e>=1?1/0:p2(this.sampledSemanticScores,e)}else return-1}prepareRender(e){super.prepareRender(e),Se(this.programInfo,{uMaxPointSize:this._getMaxPointSize(),uScaleFactor:this._getGeometricScaleFactor(),uSemanticThreshold:this.getSemanticThreshold()}),sr(this.gl,this.programInfo,this.vertexArrayInfo);const n=this.encoders.x;if(n&&!n.constant){const r=co(n.accessor).left,i=this.unitView.getScaleResolution("x").getScale().domain(),o=Yi(i,null,1.01);this._findIndices=s=>{const a=this.unitView.getCollector().facetBatches.get(s);return[r(a,o[0]),r(a,o[o.length-1])]}}}render(e){const n=this.gl;return this.createRenderCallback((r,i)=>{const[o,s]=this._findIndices?this._findIndices(e.facetId):[0,i],a=s-o;a&&mi(n,this.vertexArrayInfo,n.POINTS,a,r+o)},e,()=>this.rangeMap)}}var cS=`// Line caps
|
983
|
+
const int BUTT = 0;
|
984
|
+
const int SQUARE = 1;
|
985
|
+
const int ROUND = 2;
|
986
|
+
|
987
|
+
/** Position along the rule */
|
988
|
+
in float pos;
|
989
|
+
|
990
|
+
/** Which side of the stroke: -0.5 or 0.5 */
|
991
|
+
in float side;
|
992
|
+
|
993
|
+
/** Minimum rule length in pixels */
|
994
|
+
uniform float uMinLength;
|
995
|
+
|
996
|
+
uniform float uDashTextureSize;
|
997
|
+
uniform lowp int uStrokeCap;
|
998
|
+
|
999
|
+
flat out vec4 vColor;
|
1000
|
+
|
1001
|
+
/** Stroke width */
|
1002
|
+
flat out float vSize;
|
1003
|
+
|
1004
|
+
/** The distance from the line center to the direction of normal in pixels */
|
1005
|
+
out float vNormalLengthInPixels;
|
1006
|
+
|
1007
|
+
/** Distances from the line endings. Used for rendering the round caps and dashes */
|
1008
|
+
out highp vec2 vPosInPixels;
|
1009
|
+
|
1010
|
+
|
1011
|
+
void main(void) {
|
1012
|
+
float pixelSize = 1.0 / uDevicePixelRatio;
|
1013
|
+
|
1014
|
+
// Stroke width in pixels
|
1015
|
+
float size = getScaled_size();
|
1016
|
+
float opacity = getScaled_opacity() * uViewOpacity;
|
1017
|
+
|
1018
|
+
// Avoid artifacts in very thin lines by clamping the size and adjusting opacity respectively
|
1019
|
+
if (size < pixelSize) {
|
1020
|
+
opacity *= size / pixelSize;
|
1021
|
+
size = pixelSize;
|
1022
|
+
}
|
1023
|
+
|
1024
|
+
vec2 a = applySampleFacet(vec2(getScaled_x(), getScaled_y()));
|
1025
|
+
vec2 b = applySampleFacet(vec2(getScaled_x2(), getScaled_y2()));
|
1026
|
+
|
1027
|
+
vec2 tangent = b - a;
|
1028
|
+
|
1029
|
+
float offset = 0.0;
|
1030
|
+
float relativeDiff = 0.0;
|
1031
|
+
if (uMinLength > 0.0 || uStrokeCap != BUTT) {
|
1032
|
+
float len = length(tangent * uViewportSize);
|
1033
|
+
|
1034
|
+
// Elongate to reach the minimum length.
|
1035
|
+
// The length difference in pixels
|
1036
|
+
float diff = max(0.0, uMinLength - len);
|
1037
|
+
|
1038
|
+
// Add line caps
|
1039
|
+
if (uStrokeCap != BUTT) {
|
1040
|
+
diff += size;
|
1041
|
+
}
|
1042
|
+
|
1043
|
+
relativeDiff = diff / len;
|
1044
|
+
offset = relativeDiff * (pos - 0.5);
|
1045
|
+
}
|
1046
|
+
|
1047
|
+
// Apply caps and minimum length by spreading the vertices along the tangent
|
1048
|
+
vec2 p = pos < 1.0
|
1049
|
+
? a + tangent * (pos + offset)
|
1050
|
+
: b + tangent * offset;
|
1051
|
+
|
1052
|
+
// Add an extra pixel to stroke width to accommodate edge antialiasing
|
1053
|
+
float aaPadding = pixelSize;
|
1054
|
+
|
1055
|
+
// Extrude
|
1056
|
+
vec2 normal = normalize(vec2(-tangent.y, tangent.x) / uViewportSize);
|
1057
|
+
p += normal * side * (size + aaPadding) / uViewportSize;
|
1058
|
+
|
1059
|
+
gl_Position = unitToNdc(p);
|
1060
|
+
|
1061
|
+
vColor = vec4(getScaled_color() * opacity, opacity);
|
1062
|
+
vSize = size;
|
1063
|
+
vNormalLengthInPixels = side * (size + aaPadding);
|
1064
|
+
|
1065
|
+
// TODO: Here's a precision problem that breaks round caps when zoomed in enough
|
1066
|
+
vPosInPixels = vec2(pos, (1.0 - pos)) * (1.0 + relativeDiff) * length(tangent * uViewportSize) -
|
1067
|
+
vec2(uStrokeCap != BUTT ? size / 2.0 : 0.0);
|
1068
|
+
|
1069
|
+
setupPicking();
|
1070
|
+
}
|
1071
|
+
`,uS=`// Line ending
|
1072
|
+
const int BUTT = 0;
|
1073
|
+
const int SQUARE = 1;
|
1074
|
+
const int ROUND = 2;
|
1075
|
+
|
1076
|
+
uniform sampler2D uDashTexture;
|
1077
|
+
uniform float uDashTextureSize;
|
1078
|
+
uniform float uStrokeDashOffset;
|
1079
|
+
uniform lowp int uStrokeCap;
|
1080
|
+
|
1081
|
+
flat in vec4 vColor;
|
1082
|
+
flat in float vSize;
|
1083
|
+
|
1084
|
+
/** Position on the rule along its length in pixels */
|
1085
|
+
in vec2 vPosInPixels;
|
1086
|
+
in float vNormalLengthInPixels;
|
1087
|
+
|
1088
|
+
out lowp vec4 fragColor;
|
1089
|
+
|
1090
|
+
void main(void) {
|
1091
|
+
float dpr = uDevicePixelRatio;
|
1092
|
+
|
1093
|
+
float distanceFromEnd = -min(vPosInPixels[0], vPosInPixels[1]);
|
1094
|
+
float distance; // from the rule centerline or end
|
1095
|
+
if (distanceFromEnd > 0.0 && uStrokeCap == ROUND) {
|
1096
|
+
// round cap
|
1097
|
+
distance = length(vec2(distanceFromEnd, vNormalLengthInPixels));
|
1098
|
+
} else {
|
1099
|
+
distance = abs(vNormalLengthInPixels);
|
1100
|
+
}
|
1101
|
+
|
1102
|
+
// Use a signed distance field to implement edge antialiasing
|
1103
|
+
float opacity = clamp(((vSize / 2.0 - distance) * dpr), -0.5, 0.5) + 0.5;
|
1104
|
+
|
1105
|
+
if (uDashTextureSize > 0.0) {
|
1106
|
+
float pos = (vPosInPixels[0] + uStrokeDashOffset) * dpr;
|
1107
|
+
float floored = floor(pos);
|
1108
|
+
vec2 texelPositions = (floored + vec2(0.5, 1.5)) / dpr / uDashTextureSize;
|
1109
|
+
|
1110
|
+
// Do antialiasing
|
1111
|
+
opacity *= mix(
|
1112
|
+
texture(uDashTexture, vec2(texelPositions[0], 0)).r,
|
1113
|
+
texture(uDashTexture, vec2(texelPositions[1], 0)).r,
|
1114
|
+
clamp((pos - floored), 0.0, 1.0));
|
1115
|
+
}
|
1116
|
+
|
1117
|
+
fragColor = vColor * opacity;
|
1118
|
+
|
1119
|
+
if (uPickingEnabled) {
|
1120
|
+
fragColor = vPickingColor;
|
1121
|
+
}
|
1122
|
+
}
|
1123
|
+
`;class lS extends Ci{constructor(e){super(e);this.dashTextureSize=0,Object.defineProperties(this.defaultProperties,Object.getOwnPropertyDescriptors({x2:void 0,y2:void 0,size:1,color:"black",opacity:1,minLength:0,strokeDash:null,strokeDashOffset:0,strokeCap:"butt"}))}getAttributes(){return["uniqueId","facetIndex","x","x2","y","y2","size","color","opacity"]}getSupportedChannels(){return[...super.getSupportedChannels(),"x2","y2","size"]}fixEncoding(e){if(!(e.x&&e.y&&e.x2&&e.y2))if(e.x&&e.x2&&!e.y)e.y={value:.5},e.y2=e.y;else if(e.y&&e.y2&&!e.x)e.x={value:.5},e.x2=e.x;else if(e.x&&!e.y)e.y={value:0},e.y2={value:1},e.x2=e.x;else if(e.y&&!e.x)e.x={value:0},e.x2={value:1},e.y2=e.y;else if(e.x&&e.y&&e.y2)e.x2=e.x;else if(e.y&&e.x&&e.x2)e.y2=e.y;else if(e.y&&e.x)if(!e.x2&&e.y.type=="quantitative")e.x2=e.x,e.y2={datum:0};else if(!e.y2&&e.x.type=="quantitative")e.y2=e.y,e.x2={datum:0};else throw new Error("A bug!");else throw new Error("Invalid x and y encodings for rule mark: "+JSON.stringify(e));return e}async initializeGraphics(){if(await super.initializeGraphics(),this.properties.strokeDash){const e=this.gl,n=fS(this.properties.strokeDash);this.dashTexture=gi(e,{mag:e.NEAREST,min:e.NEAREST,internalFormat:e.R8,format:e.RED,src:n,height:1}),this.dashTextureSize=n.length}this.createAndLinkShaders(cS,uS)}updateGraphicsData(){const e=this.unitView.getCollector(),n=e.getItemCount(),r=new zE({encoders:this.encoders,attributes:this.getAttributes(),numItems:Math.max(n,this.properties.minBufferSize||0),buildXIndex:this.properties.buildIndex});r.addBatches(e.facetBatches);const i=r.toArrays();this.rangeMap=i.rangeMap,this.updateBufferInfo(i)}prepareRender(e){super.prepareRender(e),Se(this.programInfo,{uMinLength:this.properties.minLength,uDashTextureSize:this.dashTextureSize,uStrokeCap:["butt","square","round"].indexOf(this.properties.strokeCap)}),this.dashTexture&&Se(this.programInfo,{uDashTexture:this.dashTexture,uStrokeDashOffset:this.properties.strokeDashOffset}),sr(this.gl,this.programInfo,this.vertexArrayInfo)}render(e){const n=this.gl;return this.createRenderCallback((r,i)=>mi(n,this.vertexArrayInfo,n.TRIANGLE_STRIP,i,r),e,()=>this.rangeMap)}}function fS(t){if(t.length==0||t.length%2||t.findIndex(o=>Math.round(o)!=o||o<1||o>1e3)>=0)throw new Error("Invalid stroke dash pattern: "+JSON.stringify(t));const e=t.reduce((o,s)=>o+s),n=new Uint8Array(e);let r=!0,i=0;for(let o of t){for(;o;)n[i++]=r&&255||0,o--;r=!r}return n}var hS=`uniform float uSagittaScaleFactor;
|
1124
|
+
|
1125
|
+
/** Make very small arcs visible */
|
1126
|
+
uniform float uMinSagittaLength;
|
1127
|
+
|
1128
|
+
in vec2 strip;
|
1129
|
+
|
1130
|
+
out vec4 vColor;
|
1131
|
+
|
1132
|
+
/** Stroke width */
|
1133
|
+
out float vSize;
|
1134
|
+
|
1135
|
+
/** The distance from the line center to the direction of normal in pixels */
|
1136
|
+
out float vNormalLengthInPixels;
|
1137
|
+
|
1138
|
+
void main(void) {
|
1139
|
+
float pixelSize = 1.0 / uDevicePixelRatio;
|
1140
|
+
float opacity = getScaled_opacity() * uViewOpacity;
|
1141
|
+
|
1142
|
+
vec2 a = vec2(getScaled_x(), getScaled_y()) * uViewportSize;
|
1143
|
+
vec2 b = vec2(getScaled_x2(), getScaled_y2()) * uViewportSize;
|
1144
|
+
|
1145
|
+
vec2 chordVector = b - a;
|
1146
|
+
vec2 unitChordVector = normalize(chordVector);
|
1147
|
+
vec2 chordNormal = vec2(-unitChordVector.y, unitChordVector.x);
|
1148
|
+
|
1149
|
+
float sagitta = max(
|
1150
|
+
length(chordVector) / 2.0 * uSagittaScaleFactor,
|
1151
|
+
uMinSagittaLength
|
1152
|
+
);
|
1153
|
+
|
1154
|
+
bool compress = false;
|
1155
|
+
if (compress) {
|
1156
|
+
// Work in progres...
|
1157
|
+
float maxSagittaLen = length(chordNormal * uViewportSize);
|
1158
|
+
float maxChordLen = length(unitChordVector * uViewportSize);
|
1159
|
+
|
1160
|
+
float threshold = maxSagittaLen * 0.5;
|
1161
|
+
if (sagitta > threshold) {
|
1162
|
+
float m = (maxSagittaLen - threshold) / (maxChordLen - threshold);
|
1163
|
+
sagitta = (sagitta - threshold) * m + threshold;
|
1164
|
+
}
|
1165
|
+
}
|
1166
|
+
|
1167
|
+
vec2 controlOffset = chordNormal * sagitta / 0.75;
|
1168
|
+
|
1169
|
+
vec2 p1 = a;
|
1170
|
+
vec2 p2 = a + controlOffset;
|
1171
|
+
vec2 p3 = b + controlOffset;
|
1172
|
+
vec2 p4 = b;
|
1173
|
+
|
1174
|
+
// Make segments shorter near the endpoints to make the tightly bent attachment points smoother
|
1175
|
+
float t = smoothstep(0.0, 1.0, strip.x);
|
1176
|
+
|
1177
|
+
// https://stackoverflow.com/a/31317254/1547896
|
1178
|
+
vec2 C1 = p4 - 3.0 * p3 + 3.0 * p2 - p1;
|
1179
|
+
vec2 C2 = 3.0 * p3 - 6.0 * p2 + 3.0 * p1;
|
1180
|
+
vec2 C3 = 3.0 * p2 - 3.0 * p1;
|
1181
|
+
vec2 C4 = p1;
|
1182
|
+
|
1183
|
+
vec2 p;
|
1184
|
+
// Skip computation at endpoints to maintain precision
|
1185
|
+
if (t == 0.0) {
|
1186
|
+
p = p1;
|
1187
|
+
} else if (t == 1.0) {
|
1188
|
+
p = p4;
|
1189
|
+
} else {
|
1190
|
+
p = C1*t*t*t + C2*t*t + C3*t + C4;
|
1191
|
+
}
|
1192
|
+
|
1193
|
+
vec2 tangent = normalize(3.0*C1*t*t + 2.0*C2*t + C3);
|
1194
|
+
vec2 normal = vec2(-tangent.y, tangent.x);
|
1195
|
+
|
1196
|
+
//p = applySampleFacet(p);
|
1197
|
+
|
1198
|
+
#ifdef size2_DEFINED
|
1199
|
+
float mixedSize = mix(getScaled_size(), getScaled_size2(), t);
|
1200
|
+
#else
|
1201
|
+
float mixedSize = getScaled_size();
|
1202
|
+
#endif
|
1203
|
+
|
1204
|
+
// Avoid artifacts in very thin lines by clamping the size and adjusting opacity respectively
|
1205
|
+
if (mixedSize < pixelSize) {
|
1206
|
+
opacity *= mixedSize / pixelSize;
|
1207
|
+
mixedSize = pixelSize;
|
1208
|
+
}
|
1209
|
+
|
1210
|
+
// Add an extra pixel to stroke width to accommodate edge antialiasing
|
1211
|
+
float paddedSize = mixedSize + pixelSize;
|
1212
|
+
|
1213
|
+
vNormalLengthInPixels = strip.y * paddedSize;
|
1214
|
+
|
1215
|
+
// Extrude
|
1216
|
+
p += normal * vNormalLengthInPixels;
|
1217
|
+
|
1218
|
+
gl_Position = pixelsToNdc(p);
|
1219
|
+
|
1220
|
+
#ifdef color2_DEFINED
|
1221
|
+
// Yuck, RGB interpolation in gamma space!
|
1222
|
+
// TODO: linear space: https://unlimited3d.wordpress.com/2020/01/08/srgb-color-space-in-opengl/
|
1223
|
+
vec3 color = mix(getScaled_color(), getScaled_color2(), t);
|
1224
|
+
#else
|
1225
|
+
vec3 color = getScaled_color();
|
1226
|
+
#endif
|
1227
|
+
|
1228
|
+
vColor = vec4(color * opacity, opacity);
|
1229
|
+
|
1230
|
+
vSize = paddedSize;
|
1231
|
+
|
1232
|
+
setupPicking();
|
1233
|
+
}
|
1234
|
+
`,dS=`in lowp vec4 vColor;
|
1235
|
+
in float vSize;
|
1236
|
+
in float vNormalLengthInPixels;
|
1237
|
+
|
1238
|
+
out lowp vec4 fragColor;
|
1239
|
+
|
1240
|
+
void main(void) {
|
1241
|
+
float dpr = uDevicePixelRatio;
|
1242
|
+
|
1243
|
+
float distance = abs(vNormalLengthInPixels);
|
1244
|
+
float opacity = clamp(((vSize / 2.0 - distance) * dpr), 0.0, 1.0);
|
1245
|
+
|
1246
|
+
fragColor = vColor * opacity;
|
1247
|
+
|
1248
|
+
if (uPickingEnabled) {
|
1249
|
+
fragColor = vPickingColor;
|
1250
|
+
}
|
1251
|
+
}
|
1252
|
+
`;class pS extends Ci{constructor(e){super(e);Object.defineProperties(this.defaultProperties,Object.getOwnPropertyDescriptors({x:0,x2:void 0,y:0,y2:void 0,size:1,size2:void 0,color:"black",color2:void 0,opacity:1,segments:101,sagittaScaleFactor:1,minSagittaLength:1.5}))}getAttributes(){return["uniqueId","facetIndex","x","x2","y","y2","size","size2","height","color","color2","opacity"]}getSupportedChannels(){return[...super.getSupportedChannels(),"x2","y2","size","size2","color2"]}fixEncoding(e){return e.x||(e.x2=e.x),e.y2||(e.y2=e.y),e}async initializeGraphics(){await super.initializeGraphics(),this.createAndLinkShaders(hS,dS)}finalizeGraphicsInitialization(){super.finalizeGraphicsInitialization(),this.gl.useProgram(this.programInfo.program);const e=this.properties;Se(this.programInfo,{uSagittaScaleFactor:e.sagittaScaleFactor,uMinSagittaLength:e.minSagittaLength})}updateGraphicsData(){const e=this.unitView.getCollector(),n=e.getItemCount(),r=new UE({encoders:this.encoders,attributes:this.getAttributes(),numItems:n});r.addBatches(e.facetBatches);const i=r.toArrays();i.arrays.strip={data:gS(this.properties.segments),numComponents:2},this.rangeMap=i.rangeMap,this.arrays=Object.fromEntries(Object.entries(i.arrays).map(([o,s])=>[o,U(T({},s),{data:void 0})])),this.updateBufferInfo(i)}render(e){const n=this.gl;return this.createRenderCallback((r,i)=>{this.gl.bindVertexArray(this.vertexArrayInfo.vertexArrayObject);for(const o of Object.entries(this.bufferInfo.attribs)){const[s,a]=o;a.buffer&&this.arrays[s].numComponents&&(a.offset=r*this.arrays[s].numComponents*4)}sr(n,this.programInfo,this.bufferInfo),mi(n,this.bufferInfo,n.TRIANGLE_STRIP,(this.properties.segments+1)*2,0,i)},e,()=>this.rangeMap)}}function gS(t){let e=0;const n=[];for(;e<=t;e++)n.push(e/t,.5),n.push(e/t,-.5);return n}var mS=`uniform float uSdfNumerator;
|
1253
|
+
|
1254
|
+
uniform vec2 uD; // dx & dy
|
1255
|
+
|
1256
|
+
in mediump vec2 vertexCoord;
|
1257
|
+
in lowp vec2 textureCoord;
|
1258
|
+
|
1259
|
+
uniform vec4 uViewportEdgeFadeWidth;
|
1260
|
+
uniform vec4 uViewportEdgeFadeDistance;
|
1261
|
+
|
1262
|
+
uniform bool uSqueeze;
|
1263
|
+
uniform bool uLogoLetter;
|
1264
|
+
|
1265
|
+
// Width of the text (all letters)
|
1266
|
+
in float width;
|
1267
|
+
|
1268
|
+
// x: -1, 0, 1 = left, center, right
|
1269
|
+
// y: -1, 0, 1 = top, middle, bottom
|
1270
|
+
uniform ivec2 uAlign;
|
1271
|
+
|
1272
|
+
#ifdef x2_DEFINED
|
1273
|
+
uniform float uPaddingX;
|
1274
|
+
uniform bool uFlushX;
|
1275
|
+
#endif
|
1276
|
+
|
1277
|
+
#ifdef y2_DEFINED
|
1278
|
+
uniform float uPaddingY;
|
1279
|
+
uniform bool uFlushY;
|
1280
|
+
#endif
|
1281
|
+
|
1282
|
+
out vec2 vTexCoord;
|
1283
|
+
flat out vec4 vColor;
|
1284
|
+
flat out float vSlope;
|
1285
|
+
out float vEdgeFadeOpacity;
|
1286
|
+
|
1287
|
+
struct RangeResult {
|
1288
|
+
float pos;
|
1289
|
+
float scale;
|
1290
|
+
};
|
1291
|
+
|
1292
|
+
float minValue(vec4 v) {
|
1293
|
+
return min(min(v.x, v.y), min(v.z, v.w));
|
1294
|
+
}
|
1295
|
+
|
1296
|
+
float maxValue(vec4 v) {
|
1297
|
+
return max(max(v.x, v.y), max(v.z, v.w));
|
1298
|
+
}
|
1299
|
+
|
1300
|
+
/**
|
1301
|
+
* All measures are in [0, 1]
|
1302
|
+
*/
|
1303
|
+
RangeResult positionInsideRange(float a, float b, float width, float padding,
|
1304
|
+
int align, bool flush) {
|
1305
|
+
float span = b - a;
|
1306
|
+
float paddedWidth = width + 2.0 * padding;
|
1307
|
+
|
1308
|
+
// Is the text clearly outside the viewport
|
1309
|
+
if (a > 1.0 || b < 0.0) {
|
1310
|
+
return RangeResult(0.0, 0.0);
|
1311
|
+
}
|
1312
|
+
|
1313
|
+
// How much extra space we have for adjusting the position so that the
|
1314
|
+
// text stays inside the range.
|
1315
|
+
float extra = max(0.0, span - paddedWidth);
|
1316
|
+
|
1317
|
+
float pos;
|
1318
|
+
|
1319
|
+
// Align the text and try to keep it inside the range and the viewport
|
1320
|
+
if (align == 0) {
|
1321
|
+
float centre = a + b;
|
1322
|
+
|
1323
|
+
if (flush) {
|
1324
|
+
float leftOver = max(0.0, paddedWidth - centre);
|
1325
|
+
centre += min(leftOver, extra);
|
1326
|
+
|
1327
|
+
float rightOver = max(0.0, paddedWidth + centre - 2.0);
|
1328
|
+
centre -= min(rightOver, extra);
|
1329
|
+
}
|
1330
|
+
|
1331
|
+
pos = centre / 2.0;
|
1332
|
+
|
1333
|
+
} else if (align < 0) {
|
1334
|
+
float edge = a;
|
1335
|
+
|
1336
|
+
if (flush) {
|
1337
|
+
float over = max(0.0, -edge);
|
1338
|
+
edge += min(over, extra);
|
1339
|
+
}
|
1340
|
+
|
1341
|
+
pos = edge + padding;
|
1342
|
+
|
1343
|
+
} else {
|
1344
|
+
float edge = b;
|
1345
|
+
|
1346
|
+
if (flush) {
|
1347
|
+
float over = max(0.0, edge - 1.0);
|
1348
|
+
edge -= min(over, extra);
|
1349
|
+
}
|
1350
|
+
|
1351
|
+
// TODO: If the text spans the whole viewport, try to keep it centered if possible.
|
1352
|
+
|
1353
|
+
pos = edge - padding;
|
1354
|
+
}
|
1355
|
+
|
1356
|
+
// How the text should be scaled to make it fit inside the range (if it didn't fit).
|
1357
|
+
float scale = clamp((span - padding) / paddedWidth, 0.0, 1.0);
|
1358
|
+
|
1359
|
+
// TODO: Fix padding in scale factor. Padding should stay constant
|
1360
|
+
return RangeResult(pos, scale);
|
1361
|
+
}
|
1362
|
+
|
1363
|
+
vec2 calculateRotatedDimensions(float width, mat2 rotationMatrix) {
|
1364
|
+
vec2 a = abs(rotationMatrix * vec2(width / 2.0, 0.5));
|
1365
|
+
vec2 b = abs(rotationMatrix * vec2(width / 2.0, -0.5));
|
1366
|
+
return vec2(max(a.x, b.x), max(a.y, b.y)) * 2.0;
|
1367
|
+
}
|
1368
|
+
|
1369
|
+
/** Needed when using ranged text */
|
1370
|
+
ivec2 fixAlignForAngle(ivec2 align, float angleInDegrees) {
|
1371
|
+
float a = mod(angleInDegrees + 45.0, 360.0);
|
1372
|
+
int x = align.x;
|
1373
|
+
int y = -align.y;
|
1374
|
+
|
1375
|
+
// TODO: Optimize by avoiding branching
|
1376
|
+
if (a < 90.0) {
|
1377
|
+
return ivec2(x, y);
|
1378
|
+
} else if (a < 180.0) {
|
1379
|
+
return ivec2(y, -x);
|
1380
|
+
} else if (a < 270.0) {
|
1381
|
+
return ivec2(-x, y);
|
1382
|
+
} else {
|
1383
|
+
return ivec2(-y, x);
|
1384
|
+
}
|
1385
|
+
}
|
1386
|
+
|
1387
|
+
void main(void) {
|
1388
|
+
float opacity = getScaled_opacity() * uViewOpacity;
|
1389
|
+
vec2 size = vec2(getScaled_size());
|
1390
|
+
float x = getScaled_x();
|
1391
|
+
float y = getScaled_y();
|
1392
|
+
|
1393
|
+
float scale = 1.0;
|
1394
|
+
|
1395
|
+
float angleInDegrees = getScaled_angle();
|
1396
|
+
float angle = -angleInDegrees * PI / 180.0;
|
1397
|
+
|
1398
|
+
float sinTheta = sin(angle);
|
1399
|
+
float cosTheta = cos(angle);
|
1400
|
+
mat2 rotationMatrix = mat2(cosTheta, sinTheta, -sinTheta, cosTheta);
|
1401
|
+
|
1402
|
+
vec2 flushSize = calculateRotatedDimensions(width, rotationMatrix);
|
1403
|
+
|
1404
|
+
#if defined(x2_DEFINED) || defined(y2_DEFINED)
|
1405
|
+
ivec2 align = fixAlignForAngle(uAlign, angleInDegrees);
|
1406
|
+
#else
|
1407
|
+
ivec2 align = uAlign;
|
1408
|
+
#endif
|
1409
|
+
|
1410
|
+
#ifdef x2_DEFINED
|
1411
|
+
float x2 = getScaled_x2();
|
1412
|
+
|
1413
|
+
if (uLogoLetter) {
|
1414
|
+
size.x = (x2 - x) * uViewportSize.x;
|
1415
|
+
x += (x2 - x) / 2.0;
|
1416
|
+
|
1417
|
+
} else {
|
1418
|
+
float x2 = getScaled_x2();
|
1419
|
+
RangeResult result = positionInsideRange(
|
1420
|
+
min(x, x2), max(x, x2),
|
1421
|
+
size.x * scale * flushSize.x / uViewportSize.x, uPaddingX / uViewportSize.x,
|
1422
|
+
align.x, uFlushX);
|
1423
|
+
|
1424
|
+
x = result.pos;
|
1425
|
+
scale *= result.scale;
|
1426
|
+
}
|
1427
|
+
#endif
|
1428
|
+
|
1429
|
+
// Position of the text origo
|
1430
|
+
vec2 pos = applySampleFacet(vec2(x, y));
|
1431
|
+
|
1432
|
+
#ifdef y2_DEFINED
|
1433
|
+
float y2 = getScaled_y2();
|
1434
|
+
vec2 pos2 = applySampleFacet(vec2(x, y2));
|
1435
|
+
|
1436
|
+
if (uLogoLetter) {
|
1437
|
+
size.y = (pos2.y - pos.y) * uViewportSize.y;
|
1438
|
+
pos.y += (pos2.y - pos.y) / 2.0;
|
1439
|
+
|
1440
|
+
} else {
|
1441
|
+
RangeResult result = positionInsideRange(
|
1442
|
+
min(pos.y, pos2.y), max(pos.y, pos2.y),
|
1443
|
+
size.y * scale * flushSize.y / uViewportSize.y, uPaddingY / uViewportSize.y,
|
1444
|
+
align.y, uFlushY);
|
1445
|
+
|
1446
|
+
pos.y = result.pos;
|
1447
|
+
scale *= result.scale;
|
1448
|
+
}
|
1449
|
+
#endif
|
1450
|
+
|
1451
|
+
if (scale < 1.0) {
|
1452
|
+
if (uSqueeze) {
|
1453
|
+
vec2 scaleFadeExtent = vec2(3.0, 6.0) / size;
|
1454
|
+
|
1455
|
+
if (scale < scaleFadeExtent[0]) {
|
1456
|
+
gl_Position = vec4(0.0);
|
1457
|
+
return;
|
1458
|
+
}
|
1459
|
+
|
1460
|
+
size *= scale;
|
1461
|
+
opacity *= linearstep(scaleFadeExtent[0], scaleFadeExtent[1], scale);
|
1462
|
+
|
1463
|
+
} else if (scale < 1.0) {
|
1464
|
+
// Eliminate the text
|
1465
|
+
gl_Position = vec4(0.0);
|
1466
|
+
return;
|
1467
|
+
}
|
1468
|
+
}
|
1469
|
+
|
1470
|
+
// Position of the character vertex in relation to the text origo
|
1471
|
+
vec2 charPos = rotationMatrix * (vertexCoord * size + uD);
|
1472
|
+
|
1473
|
+
// Position of the character vertex inside the unit viewport
|
1474
|
+
vec2 unitPos = pos + charPos / uViewportSize;
|
1475
|
+
|
1476
|
+
gl_Position = unitToNdc(unitPos);
|
1477
|
+
|
1478
|
+
// Controls antialiasing of the SDF
|
1479
|
+
vSlope = max(1.0, min(size.x, size.y) / uSdfNumerator);
|
1480
|
+
|
1481
|
+
vColor = vec4(getScaled_color() * opacity, opacity);
|
1482
|
+
|
1483
|
+
vTexCoord = textureCoord;
|
1484
|
+
|
1485
|
+
// Edge fading. The implementation is simplistic and fails with primitives that
|
1486
|
+
// span the whole viewport. However, it works just fine with reasonable font sizes.
|
1487
|
+
// x: top, y: right, z: bottom, w: left
|
1488
|
+
if (maxValue(uViewportEdgeFadeDistance) > -pow(10.0, 10.0)) { // -Infinity would be nice
|
1489
|
+
vEdgeFadeOpacity = minValue(
|
1490
|
+
((vec4(1.0, 1.0, 0.0, 0.0) + vec4(-1.0, -1.0, 1.0, 1.0) * unitPos.yxyx) *
|
1491
|
+
uViewportSize.yxyx - uViewportEdgeFadeDistance) / uViewportEdgeFadeWidth);
|
1492
|
+
} else {
|
1493
|
+
vEdgeFadeOpacity = 1.0;
|
1494
|
+
}
|
1495
|
+
|
1496
|
+
setupPicking();
|
1497
|
+
}
|
1498
|
+
`,yS=`uniform sampler2D uTexture;
|
1499
|
+
|
1500
|
+
in vec2 vTexCoord;
|
1501
|
+
in float vEdgeFadeOpacity;
|
1502
|
+
flat in vec4 vColor;
|
1503
|
+
flat in float vSlope;
|
1504
|
+
|
1505
|
+
out lowp vec4 fragColor;
|
1506
|
+
|
1507
|
+
float median(float r, float g, float b) {
|
1508
|
+
return max(min(r, g), min(max(r, g), b));
|
1509
|
+
}
|
1510
|
+
|
1511
|
+
void main() {
|
1512
|
+
// TODO: Really small text should fall back to normal (non-SDF) texture that can be mip-mapped.
|
1513
|
+
// Currently small text has severe aliasing artifacts.
|
1514
|
+
|
1515
|
+
vec3 c = texture(uTexture, vTexCoord).rgb;
|
1516
|
+
|
1517
|
+
float sigDist = 1.0 - median(c.r, c.g, c.b);
|
1518
|
+
float opa = clamp((sigDist - 0.5) * vSlope + 0.5, 0.0, 1.0);
|
1519
|
+
|
1520
|
+
// Raise to the power of 2.2 to do some cheap gamma correction
|
1521
|
+
opa *= pow(clamp(vEdgeFadeOpacity, 0.0, 1.0), 2.2);
|
1522
|
+
|
1523
|
+
fragColor = vColor * opa;
|
1524
|
+
|
1525
|
+
if (uPickingEnabled) {
|
1526
|
+
fragColor = vPickingColor;
|
1527
|
+
}
|
1528
|
+
}
|
1529
|
+
`;const AS={left:-1,center:0,right:1},bS={top:-1,middle:0,bottom:1,alphabetic:1};class xS extends Ci{constructor(e){super(e);Object.defineProperties(this.defaultProperties,Object.getOwnPropertyDescriptors({x:.5,y:.5,x2:void 0,y2:void 0,text:"",size:11,color:"black",opacity:1,font:void 0,fontStyle:void 0,fontWeight:void 0,align:"center",baseline:"middle",dx:0,dy:0,angle:0,fitToBand:!1,squeeze:!0,paddingX:0,paddingY:0,flushX:!0,flushY:!0,logoLetters:!1,viewportEdgeFadeWidthTop:0,viewportEdgeFadeWidthRight:0,viewportEdgeFadeWidthBottom:0,viewportEdgeFadeWidthLeft:0,viewportEdgeFadeDistanceTop:-1/0,viewportEdgeFadeDistanceRight:-1/0,viewportEdgeFadeDistanceBottom:-1/0,viewportEdgeFadeDistanceLeft:-1/0})),this.font=this.properties.font?e.context.fontManager.getFont(this.properties.font,this.properties.fontStyle,this.properties.fontWeight):e.context.fontManager.getDefaultFont()}getAttributes(){return["uniqueId","facetIndex","x","x2","y","y2","color","size","opacity","angle"]}getSupportedChannels(){return[...super.getSupportedChannels(),"x2","y2","size","text","angle"]}fixEncoding(e){for(const n of Kn)this.properties.fitToBand&&lu(e,n);return e}async initializeGraphics(){await super.initializeGraphics(),this.createAndLinkShaders(mS,yS)}finalizeGraphicsInitialization(){super.finalizeGraphicsInitialization(),this.gl.useProgram(this.programInfo.program);const e=this.properties;Se(this.programInfo,{uPaddingX:e.paddingX,uPaddingY:e.paddingY,uFlushX:!!e.flushX,uFlushY:!!e.flushY,uAlign:[AS[e.align],bS[e.baseline]],uD:[e.dx,-e.dy],uLogoLetter:!!e.logoLetters,uSqueeze:!!e.squeeze,uViewportEdgeFadeWidth:[e.viewportEdgeFadeWidthTop,e.viewportEdgeFadeWidthRight,e.viewportEdgeFadeWidthBottom,e.viewportEdgeFadeWidthLeft],uViewportEdgeFadeDistance:[e.viewportEdgeFadeDistanceTop,e.viewportEdgeFadeDistanceRight,e.viewportEdgeFadeDistanceBottom,e.viewportEdgeFadeDistanceLeft]})}updateGraphicsData(){const e=this.unitView.getCollector(),n=e.getData(),r=this.encoding,i=this.encoders.text.accessor||this.encoders.text;let o=0;const s=r.text.format?Ie(r.text.format):u=>u;for(const u of n){const f=s(i(u)),l=se(f)?f:f===null?"":""+f;o+=l&&l.length||0}const a=new jE({encoders:this.encoders,attributes:this.getAttributes(),properties:this.properties,fontMetrics:this.font.metrics,numCharacters:Math.max(o,this.properties.minBufferSize||0),buildXIndex:this.properties.buildIndex});a.addBatches(e.facetBatches);const c=a.toArrays();this.rangeMap=c.rangeMap,this.updateBufferInfo(c)}prepareRender(e){super.prepareRender(e);let n=.35;this.properties.logoLetters&&(n/=2),Se(this.programInfo,{uTexture:this.font.texture,uSdfNumerator:this.font.metrics.common.base/(this.glHelper.dpr/n)}),sr(this.gl,this.programInfo,this.vertexArrayInfo)}render(e){const n=this.gl;return this.createRenderCallback((r,i)=>mi(n,this.vertexArrayInfo,n.TRIANGLES,i,r),e,()=>this.rangeMap)}}function hs(t,e,{spacing:n,devicePixelRatio:r,offset:i,reverse:o}={}){n=n||0,i=i||0;let s=0,a=0;for(const p of t)s+=Mi(p.px)+(ds(p)?0:n),a+=Mi(p.grow);s-=n;const c=Math.max(0,e-s),u=r!==void 0?p=>Math.round(p*r)/r:p=>p,f=[],l=[],h=p=>{const g=f.length;if(!g)return;const m=(p?n:0)*(o?-1:1);d-=m;for(let y=0;y<g;y++)l.push({location:d+(y+1)/(g+1)*m,size:0});d+=m,f.length=0};let d=o?Math.max(e,s):0+i;if(t.length==1&&ds(t[0]))return[{location:d,size:0}];for(let p=0;p<t.length;p++){const g=t[p];if(ds(g))f.push(g);else{h(l.length>0);const m=Mi(g.px)+(a?Mi(g.grow)/a*c:0);o&&(d-=m),l.push({location:u(d),size:u(m)}),o?d-=n:d+=m+n}}return d+=o?n:-n,h(!1),l}function vS(t,{spacing:e}={spacing:0}){let n=0;for(const r of t)n+=Mi(r.px)+(ds(r)?0:e);return Math.max(0,n-e)}class en{constructor(e,n){this.width=e,this.height=n}addPadding(e){return new en({px:(this.width.px||0)+e.width,grow:this.width.grow},{px:(this.height.px||0)+e.height,grow:this.height.grow})}}const bp=Object.freeze({px:0,grow:0}),xp=new en(bp,bp);function ds(t){return!t.px&&!t.grow}function Mi(t){return t||0}function wS(t){return t&&(oe(t.px)||oe(t.grow))}function fu(t){if(Sp(t))throw new Error("parseSizeDef does not accept step-based sizes.");if(wS(t))return t;if(oe(t))return{px:t,grow:0};if(t==="container")return{px:0,grow:1};if(!t)return{px:0,grow:1};throw new Error(`Invalid sizeDef: ${t}`)}function ES(t,e,n){return{get location(){const r=n();switch(r){case 0:return t.location;case 1:return e.location;default:return r*e.location+(1-r)*t.location}},get size(){const r=n();switch(r){case 0:return t.size;case 1:return e.size;default:return r*e.size+(1-r)*t.size}}}}function SS(t,e){const n=oe(e)?()=>e:e;return{get location(){return t.location+n()},get size(){return t.size}}}function DS(t,e){const n=oe(e)?()=>e:e;return{get location(){return t.location*n()},get size(){return t.size*n()}}}function vp(t,e){return e>=t.location&&e<t.location+t.size}class We{constructor(e,n,r,i){this.top=e||0,this.right=n||0,this.bottom=r||0,this.left=i||0}get width(){return this.left+this.right}get height(){return this.top+this.bottom}expand(e){return e<=0?this:new We(this.top+e,this.right+e,this.bottom+e,this.left+e)}add(e){return new We(this.top+e.top,this.right+e.right,this.bottom+e.bottom,this.left+e.left)}static createFromConfig(e){return typeof e=="number"?this.createUniformPadding(e):e?this.createFromRecord(e):hu}static createFromRecord(e){return new We(e.top,e.right,e.bottom,e.left)}static zero(){return hu}static createUniformPadding(e){return new We(e,e,e,e)}}const hu=We.createUniformPadding(0);Object.freeze(hu);const CS=/^([A-Za-z]+:)?\/\//;function MS(t,e){if(e&&CS.test(e))return e;const n=t();return n&&e?n.endsWith("/")?n+e:n+"/"+e:n!=null?n:e}const lr="VISIT_SKIP",Mn="VISIT_STOP",wp=t=>t;class Ep{constructor(e,n,r,i){this.context=n,this.parent=r,this.name=e.name||i,this.spec=e,this.resolutions={scale:{},axis:{}},this._broadcastHandlers={},this._capturingInteractionEventListeners={},this._nonCapturingInteractionEventListeners={},up(this),this.opacityFunction=wp}getPadding(){return this._cache("size/padding",()=>We.createFromConfig(this.spec.padding))}getEffectivePadding(){return this.getPadding()}getSize(){return this._cache("size/size",()=>this.isVisible()?this.getSizeFromSpec().addPadding(this.getPadding()):xp)}getSizeFromSpec(){const e=n=>{var o;let r,i=this.spec[n];if(Sp(i)){const s=i.step,a=(o=this.getScaleResolution(n=="width"?"x":"y"))==null?void 0:o.getScale();if(a){let c=0;if(Qt(a.type))c=a.domain().length;else if(["locus","index"].includes(a.type)){const u=a.domain();c=he(u)-u[0]}else throw new Error(`Cannot use step-based size with "${a.type}" scale!`);c=sc(c,a.paddingInner(),a.paddingOuter()),r={px:c*s,grow:0}}else throw new Error("Cannot use 'step' size with missing scale!")}else r=i&&fu(i)||{px:0,grow:1};return r};return this._cache("size/sizeFromSpec",()=>new en(e("width"),e("height")))}isVisible(){return this.context.isViewVisible(this)}isVisibleInSpec(){var e;return(e=this.spec.visible)!=null?e:!0}getEffectiveOpacity(){var e,n;return this.opacityFunction((n=(e=this.parent)==null?void 0:e.getEffectiveOpacity())!=null?n:1)}getPathString(){return[...this.getAncestors()].map(e=>e.name).reverse().join("/")}*getAncestors(){let e=this;do yield e,e=e.parent;while(e)}handleBroadcast(e){for(const n of this._broadcastHandlers[e.type]||[])n(e)}_addBroadcastHandler(e,n){let r=this._broadcastHandlers[e];r||(r=[],this._broadcastHandlers[e]=r),r.push(n)}handleInteractionEvent(e,n,r){const i=r?this._capturingInteractionEventListeners:this._nonCapturingInteractionEventListeners;for(const o of i[n.type]||[])o(e,n)}addInteractionEventListener(e,n,r){const i=r?this._capturingInteractionEventListeners:this._nonCapturingInteractionEventListeners;let o=i[e];o||(o=[],i[e]=o),o.push(n)}visit(e){try{const n=e(this);if(e.postOrder&&e.postOrder(this),n!==Mn)return n}catch(n){throw n.view=this,n}}onScalesResolved(){(!this.opacityFunction||this.opacityFunction===wp)&&(this.opacityFunction=TS(this))}onBeforeRender(){}render(e,n,r={}){}getEncoding(e){const n=this.parent?this.parent.getEncoding(this):{},r=this.spec.encoding||{},i=T(T({},n),r);for(const[o,s]of Object.entries(i))s===null&&delete i[o];return i}getFacetAccessor(e){if(this.parent)return this.parent.getFacetAccessor(this)}getFacetFields(e){var r;const n=this.getEncoding().sample;return wn(n)?[n.field]:(r=this.parent)==null?void 0:r.getFacetFields(this)}getSampleFacetTexture(){}_getResolution(e,n){e=En(e);let r=this;do{const i=r.resolutions[n][e];if(i)return i;r=r.parent}while(r)}getScaleResolution(e){return this._getResolution(e,"scale")}getAxisResolution(e){return this._getResolution(e,"axis")}getBaseUrl(){return MS(()=>{var e;return(e=this.parent)==null?void 0:e.getBaseUrl()},this.spec.baseUrl)}getDynamicDataSource(){throw new Error("The view does not provide dynamic data!")}isPickingSupported(){return!0}_cache(e,n){return ur(this,e,n)}_invalidateCacheByPrefix(e,n="self"){switch(n){case"self":Ei(this,e);break;case"ancestors":for(const r of this.getAncestors())Ei(r,e);break;case"progeny":this.visit(r=>Ei(r,e));break}}invalidateSizeCache(){this._invalidateCacheByPrefix("size/","ancestors")}}function IS(t){return"unitsPerPixel"in t}function TS(t){const e=t.spec.opacity;if(e!==void 0){if(oe(e))return n=>n*e;if(IS(e)){const n=o=>{var a;const s=(a=t.getScaleResolution(o))==null?void 0:a.getScale();if(["linear","index","locus"].includes(s==null?void 0:s.type))return s},r=e.channel?n(e.channel):n("x")||n("y");if(!r)throw new Error("Cannot find a resolved quantitative scale for dynamic opacity!");const i=Ja().domain(e.unitsPerPixel).range(e.values).clamp(!0);return o=>{const s=1e3,a=Wi(r.domain())/s;return i(a)*o}}}return n=>n}const Sp=t=>!!(t==null?void 0:t.step);class gt extends Ep{constructor(e,n,r,i){super(e,n,r,i);this.spec=e}*[Symbol.iterator](){}replaceChild(e,n){throw new Error("Not implemented")}visit(e){let n;try{n=e(this)}catch(r){throw r.view=this,r}if(n===Mn)return n;if(n!==lr){e.beforeChildren&&e.beforeChildren(this);for(const r of this){const i=r.visit(e);if(i===Mn)return i}e.afterChildren&&e.afterChildren(this),e.postOrder&&e.postOrder(this)}}findDescendantByPath(e){for(const n of this)if(n.name===e[0]){if(e.length==1)return n;if(n instanceof gt)return n.findDescendantByPath(e.slice(1))}}findChildByName(e){for(const n of this)if(n.name===e)return n}getConfiguredResolution(e,n){var r,i;return(i=(r=this.spec.resolve)==null?void 0:r[n])==null?void 0:i[e]}getDefaultResolution(e,n){return"shared"}getConfiguredOrDefaultResolution(e,n){var r,i;return(i=(r=this.getConfiguredResolution(e,n))!=null?r:this.getConfiguredResolution("default",n))!=null?i:this.getDefaultResolution(e,n)}}function ps(t,e,n){if(n=n||[],t.some(s=>s===null)){if(t.every(s=>s===null))return null;throw console.warn(t),new Error("Cannot merge objects with nulls!")}const r={},i=(s,a)=>s===a||fr(s)&&fr(a)||fr(s)&&a===!0||s===!0&&Be(a),o=s=>{for(let a in s){const c=s[a];if(!n.includes(a)&&c!==void 0)if(r[a]!==void 0&&!i(r[a],c))console.warn(`Conflicting property ${a} of ${e}: (${JSON.stringify(r[a])} and ${JSON.stringify(s[a])}). Using ${JSON.stringify(r[a])}.`);else{const u=r[a];if(fr(u))fr(c)&&(r[a]=ps([u,c],a));else if(fr(c)){if(!(u===!0||u===void 0))throw new Error("Bug in merge! Target is: "+u);r[a]=ps([{},c],a)}else r[a]=c}}};for(const s of t)o(s);return r}function fr(t){return Be(t)&&!Array.isArray(t)}/*!
|
1530
|
+
* Adapted from vega-encode:
|
1531
|
+
* https://github.com/vega/vega/blob/master/packages/vega-encode/src/ticks.js
|
1532
|
+
*
|
1533
|
+
* Copyright (c) 2015-2018, University of Washington Interactive Data Lab
|
1534
|
+
* All rights reserved.
|
1535
|
+
*
|
1536
|
+
* BSD-3-Clause License: https://github.com/vega/vega-lite/blob/master/LICENSE
|
1537
|
+
*/function Dp(t,e,n){return oe(e)&&n!=null&&(e=Math.min(e,~~(Wi(t.domain())/n)||1)),Be(e)&&(e=e.interval),e}function Cp(t,e,n){var r=t.range(),i=Math.floor(r[0]),o=Math.ceil(Ze(r));if(i>o&&(r=o,o=i,i=r),e=e.filter(function(a){return a=t(a),i<=a&&a<=o}),n>0&&e.length>1){for(var s=[e[0],Ze(e)];e.length>n&&e.length>=3;)e=e.filter(function(a,c){return!(c%2)});e.length<3&&(e=s)}return e}function NS(t,e){return t.bins?Cp(t,LS(t.bins,e)):t.ticks?t.ticks(e):t.domain()}function LS(t,e){var n=t.length,r=~~(n/(e||n));return r<2?t.slice():t.filter(function(i,o){return!(o%r)})}function OS(t,e,n){var r=t.tickFormat?t.tickFormat(e,n):n?Ie(n):String;if(rd(t.type)){var i=BS(n);r=t.bins?i:kS(r,i)}return r}function kS(t,e){return function(n){return t(n)?e(n):""}}function BS(t){var e=mo(t||",");if(e.precision==null){switch(e.precision=12,e.type){case"%":e.precision-=2;break;case"e":e.precision-=1;break}return FS(Ie(e),Ie(".1f")(1)[1])}else return Ie(e)}function FS(t,e){return function(n){var r=t(n),i=r.indexOf(e),o,s;if(i<0)return r;for(o=PS(r,i),s=o<r.length?r.slice(o):"";--o>i;)if(r[o]!=="0"){++o;break}return r.slice(0,o)+s}}function PS(t,e){var n=t.lastIndexOf("e"),r;if(n>0)return n;for(n=t.length;--n>e;)if(r=t.charCodeAt(n),r>=48&&r<=57)return n+1}/*!
|
1538
|
+
* Adapted from vega-encode:
|
1539
|
+
* https://github.com/vega/vega/blob/master/packages/vega-encode/src/Scale.js
|
1540
|
+
*
|
1541
|
+
* Copyright (c) 2015-2018, University of Washington Interactive Data Lab
|
1542
|
+
* All rights reserved.
|
1543
|
+
*
|
1544
|
+
* BSD-3-Clause License: https://github.com/vega/vega-lite/blob/master/LICENSE
|
1545
|
+
*/const zS="locus",RS="index";var US=5;function jS(t){const e=t.type;return!t.bins&&(e===Vn||e===Yr||e===Wr)}function Mp(t){return Je(t)&&![ut,RS,zS].includes(t)}function Ip(t){return t||{warn:(e,...n)=>console.warn(e,...n)}}var GS=qi(["set","modified","clear","type","scheme","schemeExtent","schemeCount","domain","domainMin","domainMid","domainMax","domainRaw","domainImplicit","nice","zero","bins","range","rangeStep","round","reverse","interpolate","interpolateGamma","zoom","fp64","name"]);function Tp(t,e,n){n=Ip(n);for(const r in t)if(!GS[r]){if(r==="padding"&&Mp(e.type))continue;Ce(e[r])?e[r](t[r]):n.warn("Unsupported scale property: "+r)}qS(e,t,XS(e,t,_S(e,t,n)))}function HS(t,e){const n=QS(t),r=_(n);if(!r)throw new Error("Unknown scale type: "+n);const i=r();return Tp(t,i,e),i}function QS(t){var e=t.type,n="",r;return e===ut?ut+"-"+Vn:(VS(t)&&(r=t.rawDomain?t.rawDomain.length:t.domain?t.domain.length+ +(t.domainMid!=null):0,n=r===2?ut+"-":r===3?_n+"-":""),(n+e||Vn).toLowerCase())}function VS(t){const e=t.type;return Je(e)&&e!==qh&&e!==Zh&&(t.scheme||t.range&&t.range.length&&t.range.every(se))}function _S(t,e,n){if(!t.domain)return 0;n=Ip(n);var r=YS(t,e.domainRaw,n);if(r>-1)return r;var i=e.domain,o=t.type,s=e.zero||e.zero===void 0&&jS(t),a,c;return i?(Mp(o)&&e.padding&&i[0]!==Ze(i)&&(i=WS(o,i,e.range,e.padding,e.exponent,e.constant)),(s||e.domainMin!=null||e.domainMax!=null||e.domainMid!=null)&&(a=(i=i.slice()).length-1||1,s&&(i[0]>0&&(i[0]=0),i[a]<0&&(i[a]=0)),e.domainMin!=null&&(i[0]=e.domainMin),e.domainMax!=null&&(i[a]=e.domainMax),e.domainMid!=null&&(c=e.domainMid,(c<i[0]||c>i[a])&&n.warn("Scale domainMid exceeds domain min or max.",c),i.splice(a,0,c))),t.domain(Np(o,i,n)),o===cc&&t.unknown(e.domainImplicit?Ia:void 0),e.nice&&t.nice&&t.nice(e.nice!==!0&&Dp(t,e.nice)||null),i.length):0}function YS(t,e,n){return e?(t.domain(Np(t.type,e,n)),e.length):-1}function WS(t,e,n,r,i,o){var s=Math.abs(Ze(n)-n[0]),a=s/(s-2*r),c=t===Ht?Ol(e,null,a):t===Wr?zs(e,null,a,.5):t===Yr?zs(e,null,a,i||1):t===Mo?E1(e,null,a,o||1):Yi(e,null,a);return e=e.slice(),e[0]=c[0],e[e.length-1]=c[1],e}function Np(t,e,n){if(rd(t)){var r=Math.abs(e.reduce(function(i,o){return i+(o<0?-1:o>0?1:0)},0));r!==e.length&&n.warn("Log scale domain includes zero: "+Xi(e))}return e}function XS(t,e,n){let r=e.bins;if(r&&!Qe(r)){const i=(r.start==null||r.stop==null)&&t.domain(),o=r.start==null?i[0]:r.start,s=r.stop==null?Ze(i):r.stop,a=r.step;a||te("Scale bins parameter missing step property."),r=ho(o,s+a,a)}return r?t.bins=r:t.bins&&delete t.bins,t.type===lc&&(r?!e.domain&&!e.domainRaw&&(t.domain(r),n=r.length):t.bins=t.domain()),n}function qS(t,e,n){var r=t.type,i=e.round||!1,o=e.range;if(e.rangeStep!=null)o=ZS(r,e,n);else if(e.scheme&&(o=KS(r,e,n),Ce(o))){if(t.interpolator)return t.interpolator(o);te(`Scale type ${r} does not support interpolating color schemes.`)}if(o&&To(r))return t.interpolator(No(du(o,e.reverse),e.interpolate,e.interpolateGamma));o&&e.interpolate&&t.interpolate?t.interpolate(id(e.interpolate,e.interpolateGamma)):Ce(t.round)?t.round(i):Ce(t.rangeRound)&&t.interpolate(i?Vr:jt),o&&t.range(du(o,e.reverse))}function ZS(t,e,n){t!==$h&&t!==uc&&te("Only band and point scales support rangeStep.");var r=(e.paddingOuter!=null?e.paddingOuter:e.padding)||0,i=t===uc?1:(e.paddingInner!=null?e.paddingInner:e.padding)||0;return[0,e.rangeStep*sc(n,i,r)]}function KS(t,e,n){var r=e.schemeExtent,i,o;return Qe(e.scheme)?o=No(e.scheme,e.interpolate,e.interpolateGamma):(i=e.scheme.toLowerCase(),o=hc(i),o||te(`Unrecognized scheme name: ${e.scheme}`)),n=t===Jh?n+1:t===lc?n-1:t===ac||t===Kh?+e.schemeCount||US:n,To(t)?Lp(o,r,e.reverse):Ce(o)?Fb(Lp(o,r),n):t===cc?o:o.slice(0,n)}function Lp(t,e,n){return Ce(t)&&(e||n)?Bb(t,du(e||[0,1],n)):t}function du(t,e){return e?t.slice().reverse():t}const pu=Ie(",d");function JS(t){return t.chrom+":"+pu(Math.floor(t.pos+1))}function $S(t,e){return t.chrom+":"+pu(Math.floor(t.pos+1))+"-"+(t.chrom!=e.chrom?e.chrom+":":"")+pu(Math.ceil(e.pos))}const eD="https://genomespy.app/data/genomes/";class tD{constructor(e){if(this.config=e,!this.config.contigs&&typeof this.config.name!="string")throw new Error("No name has been defined for the genome assembly!");this.chromosomes=[],this.cumulativeChromPositions=new Map,this.chromosomesByName=new Map,this.startByIndex=[],this.totalSize=0,this.config.contigs&&this.setChromSizes(this.config.contigs)}get name(){return this.config.name}async load(e){if(!this.config.contigs){this.config.baseUrl?this.baseUrl=/^http(s)?/.test(this.config.baseUrl)?this.config.baseUrl:e+"/"+this.config.baseUrl:this.baseUrl=eD;try{this.setChromSizes(nD(await ao({baseURL:this.baseUrl}).load(`${this.config.name}/${this.name}.chrom.sizes`)))}catch(n){throw new Error(`Could not load chrom sizes: ${n.message}`)}}}setChromSizes(e){let n=0;this.startByIndex=[0];for(let r=0;r<e.length;r++){this.startByIndex.push(n);const i=e[r].size,o=U(T({},e[r]),{continuousStart:n,continuousEnd:n+i,continuousInterval:[n,n+i],index:r,number:r+1,odd:!(r&1)});this.chromosomes.push(o);const s=o.name.replace(/^chr/i,"");for(const a of["chr"+s,"CHR"+s,"Chr"+s,o.number,""+o.number,s,o.name])this.cumulativeChromPositions.set(a,n),this.chromosomesByName.set(a,o);n+=o.size}this.totalSize=n}getExtent(){return[0,this.totalSize]}toContinuous(e,n){let r=this.cumulativeChromPositions.get(e);if(r===void 0)throw new Error("Unknown chromosome/contig: "+e);return r+ +n}toChromosome(e){if(e>=this.totalSize)return;e=Math.floor(e);const n=o2(this.startByIndex,e)-1;if(n>0&&n<=this.chromosomes.length)return this.chromosomes[n-1]}toChromosomal(e){const n=this.toChromosome(e);if(!!n)return{chrom:n.name,pos:Math.floor(e)-n.continuousStart}}getChromosome(e){return this.chromosomesByName.get(e)}formatInterval(e){return $S(...this.toChromosomalInterval(e))}toChromosomalInterval(e){const n=this.toChromosomal(e[0]+.5),r=this.toChromosomal(e[1]-.5);return r.pos+=1,[n,r]}toContinuousInterval(e){var i,o,s;let[n,r]=e;return r||(r=n),[this.toContinuous(n.chrom,(i=n.pos)!=null?i:0),this.toContinuous(r.chrom,(s=r.pos)!=null?s:(o=this.chromosomesByName.get(r.chrom))==null?void 0:o.size)]}parseInterval(e){const n=e.match(/^(chr[0-9A-Z]+):([0-9,]+)-(?:(chr[0-9A-Z]+):)?([0-9,]+)$/);if(n){const r=n[1],i=n[3]||r,o=parseInt(n[2].replace(/,/g,"")),s=parseInt(n[4].replace(/,/g,""));return[this.toContinuous(r,o-1),this.toContinuous(i,s)]}}}function nD(t){return H1(t).filter(e=>/^chr[0-9A-Z]+$/.test(e[0])).map(([e,n])=>({name:e,size:parseInt(n)}))}function Op(t){return Be(t)&&"chrom"in t}function rD(t){return t.every(Op)}class Ii extends Array{constructor(){super();this.type=void 0}extend(e){return this}extendAll(e){if(e instanceof Ii&&e.type!=this.type)throw new Error(`Cannot combine different types of domains: ${this.type} and ${e.type}`);for(const n of e)this.extend(n);return this}extendAllWithAccessor(e,n){for(const r of e)this.extend(n(r));return this}}class gu extends Ii{constructor(){super();this.type="quantitative"}extend(e){return e==null||Number.isNaN(e)?this:(e=+e,this.length?e<this[0]?this[0]=e:e>this[1]&&(this[1]=e):(this.push(e),this.push(e)),this)}}class kp extends Ii{constructor(){super();this.type="ordinal",this.uniqueValues=new Set}extend(e){return e==null||Number.isNaN(e)?this:(this.uniqueValues.has(e)||(this.uniqueValues.add(e),this.push(e)),this)}}class Bp extends kp{constructor(){super();this.type="nominal"}}class iD extends Ii{constructor(e){super();let n=0;for(let r=1;r<e.length;r++)n+=Math.sign(e[r]-e[r-1]);if(Math.abs(n)!=e.length-1)throw new Error("Piecewise domain must be strictly increasing or decreasing: "+JSON.stringify(e));e.forEach(r=>this.push(r))}extend(e){if(this.includes(e))return this;throw new Error("Piecewise domains are immutable and cannot be unioned!")}}const Fp={quantitative:gu,index:gu,locus:gu,nominal:Bp,ordinal:kp};function Pp(t,e){if(t=="quantitative"&&oD(e)){const n=new iD(e);return n.type=t,n}else if(Fp[t]){const n=new Fp[t];return n.type=t,e&&n.extendAll(e),n}throw new Error("Unknown type: "+t)}function oD(t){return t&&t.length>0&&t.length!=2&&t.every(e=>typeof e=="number")}function zp(t){return((t*=2)<=1?t*t:--t*(2-t)+1)/2}function sD(t){return--t*t*t+1}function aD(t){return(Math.pow(2,-10*t)-.0009765625)*1.0009775171065494}function cD(t){return 1-aD(t)}const Rp="quantitative",mu="ordinal",yu="nominal",Au="locus",uD="index";class lD{constructor(e){this.channel=e,this.members=[],this.type=null,this._zoomExtent=void 0,this._domainListeners=new Set,this.name=void 0,this._scale=void 0}addEventListener(e,n){if(e!="domain")throw new Error("Unsupported event type: "+e);this._domainListeners.add(n)}removeEventListener(e,n){if(e!="domain")throw new Error("Unsupported event type: "+e);this._domainListeners.delete(n)}_notifyDomainListeners(){for(const e of this._domainListeners.values())e({type:"domain",scaleResolution:this})}pushUnitView(e,n){var s;const r=Uo(e,n),i=r.type,o=(s=r==null?void 0:r.scale)==null?void 0:s.name;if(o){if(this.name!==void 0&&o!=this.name)throw new Error(`Shared scales have conflicting names: "${o}" vs. "${this.name}"!`);this.name=o}if(!this.type)this.type=i;else if(i!==this.type&&!ui(n))throw new Error(`Can not use shared scale for different data types: ${this.type} vs. ${i}. Use "resolve: independent" for channel ${this.channel}`);this.members.push({view:e,channel:n})}isExplicitDomain(){return!!this.getConfiguredDomain()}_getMergedScaleProps(){return ur(this,"mergedScaleProps",()=>{const e=this.members.map(n=>Uo(n.view,n.channel).scale).filter(n=>n!==void 0);return ps(e,"scale",["domain"])})}getScaleProps(){return ur(this,"scaleProps",()=>{var i,o;const e=this._getMergedScaleProps();if(e===null||e.type=="null")return{type:"null"};const n=T(T({},this._getDefaultScaleProperties(this.type)),e);n.type||(n.type=fD(this.channel,this.type));const r=this.getInitialDomain();return r&&r.length>0?n.domain=r:Qt(n.type)&&(n.domain=new Bp),!n.domain&&n.domainMid!==void 0&&(n.domain=[(i=n.domainMin)!=null?i:0,(o=n.domainMax)!=null?o:1]),n.type==Au&&!("fp64"in n)&&(n.fp64=!0),this.channel=="y"&&Qt(n.type)&&n.reverse==null&&(n.reverse=!0),n.range&&n.scheme&&delete n.scheme,!("zoom"in n)&&["index","locus"].includes(n.type)&&(n.zoom=!0),hD(n,this.channel),n})}getInitialDomain(){var e;return(e=this.getConfiguredDomain())!=null?e:this.type==Au?this.getGenome().getExtent():this.getDataDomain()}getConfiguredDomain(){return this._reduceDomains(e=>ui(e.channel)?void 0:e.view.getConfiguredDomain(e.channel))}getDataDomain(){return this._reduceDomains(e=>ui(e.channel)?void 0:e.view.extractDataDomain(e.channel))}reconfigure(){if(this._scale&&this._scale.type!="null"){cp(this,"scaleProps");const e=this.getScaleProps();Tp(e,this._scale),Je(this._scale.type)&&(this._zoomExtent=this._getZoomExtent())}}getScale(){if(this._scale)return this._scale;const e=this.getScaleProps(),n=HS(e);return this._scale=n,n.type=="locus"&&n.genome(this.getGenome()),n.fp64=!!e.fp64,Je(n.type)&&(this._zoomExtent=this._getZoomExtent()),n}getDomain(){return this.getScale().domain()}getComplexDomain(){var e,n;return(n=(e=this.getGenome())==null?void 0:e.toChromosomalInterval(this.getDomain()))!=null?n:this.getDomain()}isZoomed(){return this.isZoomable()&&pc(this.getInitialDomain(),this.getDomain())}isZoomable(){if(!Kn.includes(this.channel))return!1;const e=this.getScale().type;return["linear","locus","index","log","pow","sqrt"].includes(e)?!!this.getScaleProps().zoom:!1}zoom(e,n,r){if(!this.isZoomable())return!1;const i=this.getScale(),o=i.domain();let s=[...o];const a=i.invert(n);switch(this.getScaleProps().reverse&&(r=-r),i.type){case"linear":case"index":case"locus":s=x1(s,r||0),s=Yi(s,a,e);break;case"log":s=v1(s,r||0),s=Ol(s,a,e);break;case"pow":case"sqrt":s=w1(s,r||0,i.exponent()),s=zs(s,a,e,i.exponent());break;default:throw new Error("Unsupported scale type: "+i.type)}return this._zoomExtent&&(s=S1(s,...this._zoomExtent)),[0,1].some(c=>s[c]!=o[c])?(i.domain(s),this._notifyDomainListeners(),!0):!1}async zoomTo(e,n=!1){var a;if(js(n)&&(n=n?700:0),!this.isZoomable())throw new Error("Not a zoomable scale!");const r=this.fromComplexInterval(e),i=(a=this.members[0])==null?void 0:a.view.context.animator,o=this.getScale(),s=o.domain();if(n>0&&s.length==2){const c=s[1]-s[0],u=s[0]+c/2,f=r[1]-r[0],l=r[0]+f/2,h=Sh.rho(.7)([u,0,c],[l,0,f]);await i.transition({duration:n/1e3*h.duration,easingFunction:zp,onUpdate:d=>{const[p,,g]=h(d);o.domain([p-g/2,p+g/2]),this._notifyDomainListeners()}}),o.domain(r),this._notifyDomainListeners()}else o.domain(r),i==null||i.requestRender(),this._notifyDomainListeners()}getZoomLevel(){return this.isZoomable()?Wi(this._zoomExtent)/Wi(this.getScale().domain()):1}_getZoomExtent(){const e=this.getScaleProps(),n=e.zoom;if(dD(n)&&Qe(n.extent))return this.fromComplexInterval(n.extent);if(n)return e.type=="locus"?this.getGenome().getExtent():this._scale.domain()}_getDefaultScaleProperties(e){const n=this.channel,r={};return this.isExplicitDomain()&&(r.zero=!1),jo(n)?r.nice=!this.isExplicitDomain():Sn(n)?r.scheme=e==yu?"tableau10":e==mu?"blues":"viridis":Go(n)?r.range=kd(n):n=="size"?r.range=[0,400]:n=="angle"&&(r.range=[0,360]),r}getGenome(){var n;if(this.type!=="locus")return;const e=(n=this.members[0].view.context.genomeStore)==null?void 0:n.getGenome();if(!e)throw new Error("No genome has been defined!");return e}invertToComplex(e){const n=this.getScale();if("invert"in n){const r=n.invert(e);return this.toComplex(r)}else throw new Error("The scale does not support inverting!")}toComplex(e){const n=this.getGenome();return n?n.toChromosomal(e):e}fromComplex(e){return Op(e)?this.getGenome().toContinuous(e.chrom,e.pos):e}fromComplexInterval(e){return this.type==="locus"&&rD(e)?this.getGenome().toContinuousInterval(e):e}_getViewPaths(){return this.members.map(e=>e.view.getPathString()).join(", ")}_reduceDomains(e){const n=this.members.map(e).filter(r=>!!r);if(n.length)return n.reduce((r,i)=>r.extendAll(i))}}function fD(t,e){if([uD,Au].includes(e)){if(Kn.includes(t))return e;throw new Error(`${t} does not support ${e} data type. Only positional channels do.`)}const n={uniqueId:["null",void 0,void 0],facetIndex:["null",void 0,void 0],x:["band","band","linear"],y:["band","band","linear"],size:[void 0,"point","linear"],opacity:[void 0,"point","linear"],fillOpacity:[void 0,"point","linear"],strokeOpacity:[void 0,"point","linear"],color:["ordinal","ordinal","linear"],fill:["ordinal","ordinal","linear"],stroke:["ordinal","ordinal","linear"],strokeWidth:[void 0,void 0,"linear"],shape:["ordinal","ordinal",void 0],sample:["null","null",void 0],semanticScore:[void 0,void 0,"null"],search:["null",void 0,void 0],text:["null","null","null"],dx:[void 0,void 0,"null"],dy:[void 0,void 0,"null"],angle:[void 0,void 0,"linear"]},r=n[t]?n[t][[yu,mu,Rp].indexOf(e)]:e==Rp?"linear":"ordinal";if(r===void 0)throw new Error(`Channel "${t}" is not compatible with "${e}" data type. Use of a proper scale may be needed.`);return r}function hD(t,e){jo(e)&&t.type!=="ordinal"&&(t.range=[0,1]),e=="opacity"&&Je(t.type)&&(t.clamp=!0)}function dD(t){return Be(t)}function bu(...t){for(const e of t)if(e!==void 0)return e}class pD{constructor(e){this.channel=e,this.members=[]}get scaleResolution(){var e;return(e=he(this.members))==null?void 0:e.view.getScaleResolution(this.channel)}pushUnitView(e,n){const r=e.getScaleResolution(this.channel);if(!r)throw new Error("Cannot find a scale resolution!");if(this.scaleResolution&&r!==this.scaleResolution)throw new Error("Shared axes must have a shared scale!");this.members.push({view:e,channel:n})}getAxisProps(){return ur(this,"axisProps",()=>{const e=this.members.map(n=>Uo(n.view,n.channel).axis);return e.length>0&&e.some(n=>n===null)?null:ps(e.filter(n=>n!==void 0),"axis",["title"])})}getTitle(){const e=o=>{var a;const s=Uo(o.view,o.channel);return{member:o,explicitTitle:bu((a=s.axis)==null?void 0:a.title,s.title),implicitTitle:bu(wn(s)?s.field:void 0,Sc(s)?s.expr:void 0)}},n=this.members.map(e),r=n.filter(o=>{var s;if(ui(o.member.channel)&&!o.explicitTitle){const a=En(o.member.channel);return((s=n.find(c=>c.member.view==o.member.view&&c.member.channel==a))==null?void 0:s.explicitTitle)===void 0}return!0}),i=new Set(r.map(o=>bu(o.explicitTitle,o.implicitTitle)).filter(se));return i.size?[...i].join(", "):null}}class Up extends Ep{constructor(e,n,r,i){super(e,n,r,i);this.spec=e}}class Ti extends gt{constructor(e,n,r,i){super(e,n,r,i);this.spec=e,this.children=(e.layer||[]).map((o,s)=>{if(vu(o)||xu(o))return n.createView(o,this,"layer"+s);throw new Error("LayerView accepts only unit or layer specs as children!")})}*[Symbol.iterator](){for(const e of this.children)yield e}render(e,n,r={}){if(!!this.isVisible()){n=n.shrink(this.getPadding()),e.pushView(this,n);for(const i of this.children)i.render(e,n,r);e.popView(this)}}}function It(t){return()=>t}class mt{static create(e,n,r,i){return new mt(It(e),It(n),It(r),It(i))}_offset(e,n){const r=this["_"+e];if(n===0)return r;switch(typeof n){case"number":return()=>r()+n;case"function":return()=>r()+n();default:throw new Error("Not a number of function")}}_passThrough(e){return this._offset(e,0)}constructor(e,n,r,i){this._x=e,this._y=n,this._width=r,this._height=i}get x(){return this._x()}get y(){return this._y()}get width(){return this._width()}get height(){return this._height()}get x2(){return this._x()+this._width()}get y2(){return this._y()+this._height()}equals(e){return e?this===e||this.x===e.x&&this.y===e.y&&this.width===e.width&&this.height===e.height:!1}modify(e){if(!Object.keys(e).length)return this;const n=r=>{const i=e[r];return typeof i=="number"?It(i):typeof i=="function"?i:this._passThrough(r)};return new mt(n("x"),n("y"),n("width"),n("height"))}translate(e,n){return e===0&&n===0?this:new mt(this._offset("x",e),this._offset("y",n),this._passThrough("width"),this._passThrough("height"))}translateBy(e){return this.translate(e.x,e.y)}expand(e,n=1){return e.left==0&&e.top==0&&e.right==0&&e.bottom==0?this:new mt(e.left?this._offset("x",-e.left*n):this._passThrough("x"),e.top?this._offset("y",-e.top*n):this._passThrough("y"),e.width?this._offset("width",e.width*n):this._passThrough("width"),e.height?this._offset("height",e.height*n):this._passThrough("height"))}shrink(e){return this.expand(e,-1)}intersect(e){return this===e?this:new mt(()=>Math.max(this.x,e.x),()=>Math.max(this.y,e.y),()=>Math.min(this.x2,e.x2)-Math.max(this.x,e.x),()=>Math.min(this.y2,e.y2)-Math.max(this.y,e.y))}isDefined(){return this.width>=0&&this.height>=0}flatten(){return new mt(It(this.x),It(this.y),It(this.width),It(this.height))}containsPoint(e,n){return e>=this.x&&e<this.x2&&n>=this.y&&n<this.y2}normalizePoint(e,n){return{x:(e-this.x)/this.width,y:(n-this.y)/this.height}}}class hr extends gt{constructor(e,n,r,i){super(e,n,r,i);this.spec=e,"spacing"in this.spec||(this.spec.spacing=10),this.mainDimension=wu(e)?"width":"height",this.secondaryDimension=this.mainDimension=="width"?"height":"width";const o=wu(e)?e.hconcat:Hp(e)?e.vconcat:e.concat;this.children=o.map((s,a)=>n.createView(s,this,"concat"+a))}getEffectivePadding(){return this._cache("size/effectivePadding",()=>{const e=this.children.filter(o=>o.isVisible());if(!e.length)return this.getPadding();const n=e.map(o=>o.getEffectivePadding()).map(o=>this.mainDimension=="height"?[o.left,o.right]:[o.top,o.bottom]),r=jp(n),i=this.mainDimension=="height"?new We(e[0].getEffectivePadding().top,r[1],he(e).getEffectivePadding().bottom,r[0]):new We(r[0],e[0].getEffectivePadding().left,r[1],he(e).getEffectivePadding().right);return this.getPadding().add(i)})}getSize(){return this._cache("size",()=>{let e;if(this.spec[this.mainDimension])e=fu(this.spec[this.mainDimension]);else{const r=this.children.filter(i=>i.isVisible()).map(i=>i.getSize()[this.mainDimension]);e={grow:r.map(i=>+i.grow).reduce((i,o)=>i+o,0),px:vS(r,{spacing:this.spec.spacing})}}const n=this.spec[this.secondaryDimension]&&fu(this.spec[this.secondaryDimension])||{grow:1};return(this.mainDimension=="height"?new en(n,e):new en(e,n)).addPadding(this.getPadding())})}render(e,n,r={}){if(!this.isVisible())return;n=n.shrink(this.getPadding()),e.pushView(this,n);const i=this.children.filter(u=>u.isVisible()),o=i.map(u=>u.getSize()[this.mainDimension]),s=hs(o,n[this.mainDimension],{spacing:this.spec.spacing,devicePixelRatio:this.context.glHelper.dpr}),a=i.map(u=>u.getEffectivePadding()).map(u=>this.mainDimension=="height"?[u.left,u.right]:[u.top,u.bottom]),c=jp(a);for(let u=0;u<i.length;u++){const f=i[u],l=s[u],h=c[0]-a[u][0],d=c[1]-a[u][1],p=n[this.secondaryDimension]-h-d,g=this.mainDimension=="height"?new mt(()=>n.x+h,()=>n.y+l.location,()=>p,()=>l.size):new mt(()=>n.x+l.location,()=>n.y+h,()=>l.size,()=>p);f.render(e,g,r)}e.popView(this)}*[Symbol.iterator](){for(const e of this.children)yield e}replaceChild(e,n){const r=this.children.indexOf(e);if(r>=0)this.children[r]=n;else throw new Error("Not my child view!")}addChildBySpec(e){const n=this.children.length,r=this.context.createView(e,this,"concat"+n);return this.children.push(r),r}addChild(e){const n=this.children.length;return e.name||(e.name="concat"+n),e.parent=this,this.children.push(e),e}getDefaultResolution(e,n){return"independent"}}function jp(t){return[0,1].map(e=>t.map(n=>n[e]).reduce((n,r)=>Math.max(n,r),0))}class gD{constructor(){this.types=[];const e=n=>(r,i,o,s)=>{var a;return new n(r,i,o,(a=r.name)!=null?a:s)};this.addViewType(mD,e(Up)),this.addViewType(vu,e(Ti)),this.addViewType(xu,e(Oe)),this.addViewType(Hp,e(hr)),this.addViewType(wu,e(hr)),this.addViewType(yD,e(hr))}addViewType(e,n){this.types.push({specGuard:e,factory:n})}createView(e,n,r,i){const o=this.types.find(s=>s.specGuard(e));if(o)return o.factory(e,n,r,i!=null?i:"unnamed");throw new Error("Invalid spec, cannot figure out the view type from the properties: "+JSON.stringify([...Object.keys(e)]))}isViewSpec(e){const n=this.types.filter(r=>r.specGuard(e));if(n.length>1)throw new Error("Ambiguous spec. Cannot create a view!");return n.length==1}}function xu(t){return"mark"in t&&(se(t.mark)||Be(t.mark))}function vu(t){return"layer"in t&&Be(t.layer)}function Gp(t){return t&&(xu(t)||vu(t))&&"aggregateSamples"in t}function mD(t){return"import"in t}function Hp(t){return"vconcat"in t&&Qe(t.vconcat)}function wu(t){return"hconcat"in t&&Qe(t.hconcat)}function yD(t){return"concat"in t&&Qe(t.concat)}const AD={point:aS,rect:tS,rule:lS,link:pS,text:xS};class Oe extends gt{constructor(e,n,r,i){super(e,n,r,i);this.spec=e;const o=AD[this.getMarkType()];if(o)this.mark=new o(this);else throw new Error(`No such mark: ${this.getMarkType()}`);this.sampleAggregateViews=[],this._initializeAggregateViews(),this.coords=void 0}*[Symbol.iterator](){for(const e of this.sampleAggregateViews)yield e}replaceChild(e,n){const r=this.sampleAggregateViews.indexOf(e);if(r>=0)this.sampleAggregateViews[r]=n;else throw new Error("Not my child view!")}render(e,n,r={}){!this.isVisible()||(n=n.shrink(this.getPadding()),this.coords=n,e.pushView(this,n),e.renderMark(this.mark,r),e.popView(this))}getMarkType(){return typeof this.spec.mark=="object"?this.spec.mark.type:this.spec.mark}resolve(e){var r;const n=this.mark.encoding;for(const[i,o]of Object.entries(n)){if(!St(o))continue;let s=En((r=o.resolutionChannel)!=null?r:i);if(e=="axis"&&!jo(s))continue;let a=this;for(;a.parent instanceof gt&&["shared","excluded"].includes(a.parent.getConfiguredOrDefaultResolution(s,e))&&a.getConfiguredOrDefaultResolution(s,e)!="excluded";)a=a.parent;a.resolutions[e][s]||(a.resolutions[e][s]=e=="scale"?new lD(s):new pD(s)),a.resolutions[e][s].pushUnitView(this,i)}}getAccessor(e){return this._cache("accessor/"+e,()=>{const n=this.mark.encoding;if(n&&n[e])return this.context.accessorFactory.createAccessor(n[e])})}getFacetAccessor(e){const n=this.getAccessor("sample");return n||super.getFacetAccessor(this)}getCollector(){return this.context.dataFlow.findCollectorByKey(this)}_validateDomainQuery(e){if(ui(e))throw new Error(`getDomain(${e}), must only be called for primary channels!`);const n=this.mark.encoding[e];if(!St(n))throw new Error("The channel has no scale, cannot get domain!");if(!n.type)throw new Error(`No data type for channel "${e}"!`);return n}getConfiguredDomain(e){var i;const n=this._validateDomainQuery(e),r=n&&n.scale&&n.scale.domain;if(r){const o=this.getScaleResolution((i=n.resolutionChannel)!=null?i:e);return Pp(n.type,o.fromComplexInterval(r))}}extractDataDomain(e){const r=this._validateDomainQuery(e).type,i=a=>{let c;const u=this.mark.encoding[a];if(u){const f=this.context.accessorFactory.createAccessor(u);if(f)if(c=Pp(r),f.constant)c.extend(f({}));else{const l=this.getCollector();(l==null?void 0:l.completed)&&l.visitData(h=>c.extend(f(h)))}}return c};let o=i(e);const s=Dc[e];if(s){const a=i(s);a&&o.extendAll(a)}return o}getZoomLevel(){const e=n=>{var r,i;return(i=(r=this.getScaleResolution(n))==null?void 0:r.getZoomLevel())!=null?i:1};return Kn.map(e).reduce((n,r)=>n*r,1)}_initializeAggregateViews(){var e,n;if(Gp(this.spec))for(const r of this.spec.aggregateSamples){r.transform=[...(e=r.transform)!=null?e:[],{type:"mergeFacets"}],r.encoding=U(T({},(n=r.encoding)!=null?n:{}),{sample:null});const i=this.context.createView(r,this,"summaryView");i.getFacetFields=o=>{},this.sampleAggregateViews.push(i)}}getDefaultResolution(e,n){return e=="x"?"shared":"independent"}}function Qp(t,e,n){return n=(n-t)/(e-t),n=Math.max(0,Math.min(1,n)),n*n*(3-2*n)}class In extends ie{get identifier(){}handle(e){throw new Error("Source does not handle incoming data!")}async load(){}}function bD(t){return"dynamicCallbackSource"in t}class Vp extends In{constructor(e){super();this.callback=e}loadSynchronously(){if(!this.callback)return;const e=this.callback();if(!e||typeof e[Symbol.iterator]!="function")throw new Error("Dynamic data callback didn't return iterable data!");this.reset(),this.beginBatch({type:"file"});let n;for(const r of e)n||(n=typeof r!="object"?i=>({data:i}):i=>i),this._propagate(n(r));this.complete()}async load(){this.loadSynchronously()}}const _p="chromosome_ticks_and_labels",Yp={x:"width",y:"height"};function Eu(t){return t=="x"?"y":"x"}const Wp=Object.fromEntries(Object.entries({x:["bottom","top"],y:["left","right"]}).map(([t,e])=>e.map(n=>[n,t])).flat(1));function Tn(t){return Wp[t]}class Su extends Ti{constructor(e,n,r,i){const o=n=="locus",s=T(T(T({},o?wD:Xp),vD(n,e)),e);super(o?ED(s):qp(s),r,i,`axis_${e.orient}`);if(this.axisProps=s,this.axisUpdateRequested=!0,this._addBroadcastHandler("layout",()=>{this.axisUpdateRequested=!0}),this.previousScaleDomain=[],this.axisLength=void 0,this.ticks=[],this.tickSource=new Vp(()=>this.ticks),o){const a=Tn(this.axisProps.orient),c=this.getScaleResolution(a).getGenome();this.findChildByName(_p).getDynamicDataSource=()=>new Vp(()=>c.chromosomes)}}getOrient(){return this.axisProps.orient}getSize(){const e={px:this.getPerpendicularSize()},n={grow:1};return Wp[this.axisProps.orient]=="x"?new en(n,e):new en(e,n)}getPerpendicularSize(){return Du(this.axisProps)}getDynamicDataSource(){return this.tickSource}_updateAxisData(){const e=Tn(this.axisProps.orient),n=this.getScaleResolution(e).getScale(),r=n.domain();if(pc(r,this.previousScaleDomain)&&!this.axisUpdateRequested)return;this.previousScaleDomain=r;const i=this.ticks,o=xD(this.axisProps,n,this.axisLength,i);o!==i&&(this.ticks=o,this.tickSource.loadSynchronously()),this.axisUpdateRequested=!1}onBeforeRender(){super.onBeforeRender(),this._updateAxisData()}render(e,n,r={}){!this.isVisible()||(this.axisLength=n[Yp[Tn(this.getOrient())]],super.render(e,n,r))}isPickingSupported(){return!1}}function Du(t){const e=Tn(t.orient);let n=t.ticks&&t.tickSize||0;return t.labels&&(n+=t.labelPadding,e=="x"?n+=t.labelFontSize:n+=30),t.title&&(n+=t.titlePadding+t.titleFontSize),n=Math.min(t.maxExtent||1/0,Math.max(t.minExtent||0,n)),n}function xD(t,e,n,r=[]){const i=a=>25+60*Qp(100,700,a);let o=oe(t.tickCount)?t.tickCount:Math.round(n/i(n));o=Dp(e,o,t.tickMinStep);const s=t.values?Cp(e,t.values,o):NS(e,o);if(pc(s,r,a=>a,a=>a.value))return r;{const a=OS(e,o,t.format);return s.map(c=>({value:c,label:a(c)}))}}const Xp={values:null,minExtent:20,maxExtent:1/0,offset:0,domain:!0,domainWidth:1,domainColor:"gray",domainDash:null,domainDashOffset:0,domainCap:"square",ticks:!0,tickSize:5,tickWidth:1,tickColor:"gray",tickDash:null,tickDashOffset:0,tickCap:"square",tickCount:null,tickMinStep:null,labels:!0,labelAlign:"center",labelBaseline:"middle",labelPadding:4,labelFontSize:10,labelLimit:180,labelColor:"black",format:null,titleColor:"black",titleFont:"sans-serif",titleFontSize:10,titlePadding:3};function vD(t,e){var a;const n=e.orient,r=t=="nominal"||t=="ordinal";let i="center",o="middle",s=(a=e.labelAngle)!=null?a:(n=="top"||n=="bottom")&&r?-90:0;switch(n){case"left":i="right";break;case"right":i="left";break;case"top":case"bottom":Math.abs(s)>30?(i=s>0==(n=="bottom")?"left":"right",o="middle"):o=n=="top"?"alphabetic":"top";break}return{labelAlign:i,labelAngle:s,labelBaseline:o}}function qp(t){const e=U(T({},t),{extent:Du(t)}),n=Tn(e.orient),r=Eu(n),i=e.orient=="bottom"||e.orient=="right"?1:-1,o=e.orient=="bottom"||e.orient=="left"?1:0,s=()=>({name:"domain",data:{values:[0]},mark:{type:"rule",clip:!1,strokeDash:e.domainDash,strokeCap:e.domainCap,color:e.domainColor,[r]:o,size:e.domainWidth}}),a=()=>({name:"labels",mark:{type:"text",clip:!1,align:e.labelAlign,angle:e.labelAngle,baseline:e.labelBaseline,[r+"Offset"]:(e.tickSize+e.labelPadding)*i,[r]:o,size:e.labelFontSize,color:e.labelColor,minBufferSize:1500,dynamicData:!0},encoding:{[n]:{field:"value",type:"quantitative"},text:{field:"label",type:"quantitative"}}}),c=()=>({name:"ticks",mark:{type:"rule",clip:!1,strokeDash:e.tickDash,strokeCap:e.tickCap,color:e.tickColor,size:e.tickWidth,minBufferSize:300,dynamicData:!0},encoding:{[r]:{value:o},[r+"2"]:{value:o-e.tickSize/e.extent*(o?1:-1)}}}),u=()=>({name:"title",data:{values:[0]},mark:{type:"text",clip:!1,align:"center",baseline:e.orient=="bottom"?"bottom":"top",angle:[0,90,0,-90][["top","right","bottom","left"].indexOf(e.orient)],text:e.title,color:e.titleColor,[n]:.5,[r]:1-o}}),f=()=>{const h={name:"ticks_and_labels",encoding:{[n]:{field:"value",type:"quantitative"}},layer:[]};return e.ticks&&h.layer.push(c()),e.labels&&h.layer.push(a()),h},l={[Yp[Eu(Tn(e.orient))]]:e.extent,data:{dynamicCallbackSource:!0},layer:[]};return e.domain&&l.layer.push(s()),(e.ticks||e.labels)&&l.layer.push(f()),e.title&&l.layer.push(u()),l}const wD=U(T({},Xp),{chromTicks:!0,chromTickSize:18,chromTickWidth:1,chromTickColor:"#989898",chromTickDash:[4,2],chromTickDashOffset:1,chromLabels:!0,chromLabelFontSize:13,chromLabelFontWeight:"normal",chromLabelFontStyle:"normal",chromLabelColor:"black",chromLabelAlign:"left",chromLabelPadding:7});function ED(t){const e=U(T({},t),{extent:Du(t)}),n=Tn(e.orient),r=Eu(n),i=e.orient=="bottom"||e.orient=="left"?1:0,o=()=>({name:"chromosome_ticks",mark:{type:"rule",strokeDash:t.chromTickDash,strokeDashOffset:t.chromTickDashOffset,[r]:i,[r+"2"]:i-e.chromTickSize/e.extent*(i?1:-1),color:t.chromTickColor,size:e.chromTickWidth,dynamicData:!0}}),s=()=>{let u;switch(e.orient){case"top":u={y:0,angle:0,paddingX:4,dy:-e.chromLabelPadding,viewportEdgeFadeWidthLeft:20,viewportEdgeFadeWidthRight:20,viewportEdgeFadeDistanceRight:-10,viewportEdgeFadeDistanceLeft:-20};break;case"bottom":u={y:1,angle:0,paddingX:4,dy:e.chromLabelPadding+e.chromLabelFontSize*.73,viewportEdgeFadeWidthLeft:20,viewportEdgeFadeWidthRight:20,viewportEdgeFadeDistanceRight:-10,viewportEdgeFadeDistanceLeft:-20};break;case"left":u={x:1,angle:-90,paddingY:4,dy:-e.chromLabelPadding,viewportEdgeFadeWidthBottom:20,viewportEdgeFadeWidthTop:20,viewportEdgeFadeDistanceBottom:-20,viewportEdgeFadeDistanceTop:-10};break;case"right":u={x:0,angle:90,align:"right",paddingY:4,dy:-e.chromLabelPadding};break;default:u={}}return{name:"chromosome_labels",mark:T({type:"text",size:e.chromLabelFontSize,font:e.chromLabelFont,fontWeight:e.chromLabelFontWeight,fontStyle:e.chromLabelFontStyle,color:e.chromLabelColor,align:t.chromLabelAlign,baseline:"alphabetic",clip:!1,dynamicData:!0},u),encoding:{[n+"2"]:{field:"continuousEnd",type:"locus"},text:{field:"name",type:"ordinal"}}}};let a;switch(e.orient){case"bottom":case"top":a={};break;case"left":a={labelAngle:-90,labelAlign:"center",labelPadding:6};break;case"right":a={labelAngle:90,labelAlign:"center",labelPadding:6};break;default:a={}}const c=qp(T(T({},t),a));if(t.chromTicks||t.chromLabels){const u={name:_p,data:{dynamicCallbackSource:!0},encoding:{[n]:{field:"continuousStart",type:"locus",band:0}},layer:[]};if(t.chromTicks&&u.layer.push(o()),t.chromLabels){u.layer.push(s());let f;c.layer.filter(l=>l.name=="ticks_and_labels").forEach(l=>l.layer.filter(h=>h.name=="labels").forEach(h=>{f=h.mark})),f&&(e.orient=="top"||e.orient=="bottom"?(f.viewportEdgeFadeWidthLeft=30,f.viewportEdgeFadeDistanceLeft=40):(f.viewportEdgeFadeWidthBottom=30,f.viewportEdgeFadeDistanceBottom=40))}c.layer.push(u)}return c}const SD={x:["bottom","top"],y:["left","right"]};class Cu extends gt{constructor(e,n){super({},e,n,"decorator");this.child=void 0,this.backgroundView=void 0,this.axisViews={top:void 0,right:void 0,bottom:void 0,left:void 0},["mousedown","wheel"].forEach(r=>this.addInteractionEventListener(r,this.handleMouseEvent.bind(this)))}initialize(){var n;Object.entries(SD).forEach(([r,i])=>this._initializeAxes(r,i)),this._invalidateCacheByPrefix("size/","ancestors");const e=(n=this.child.spec)==null?void 0:n.view;((e==null?void 0:e.fill)||(e==null?void 0:e.stroke))&&(this.backgroundView=new Oe(DD(e),this.context,this,"background"))}getEncoding(e){return Object.values(this.axisViews).find(n=>e===n)||e==this.backgroundView?{}:super.getEncoding()}getFacetAccessor(e){if(e==this.child&&this.parent)return this.parent.getFacetAccessor(this)}*[Symbol.iterator](){yield this.child,this.backgroundView&&(yield this.backgroundView);for(const e of Object.values(this.axisViews))e&&(yield e)}_getAxisExtents(){return this._cache("size/axisExtents",()=>{const e={};for(const n of Object.values(this.axisViews))n&&(e[n.getOrient()]=n.getPerpendicularSize());return We.createFromRecord(e)})}_getAxisOffsets(){return this._cache("size/axisOffsets",()=>{const e={};for(const n of Object.values(this.axisViews))n&&(e[n.getOrient()]=n.axisProps.offset);return We.createFromRecord(e)})}getEffectivePadding(){return this._cache("size/effectivePadding",()=>this.getPadding().add(this._getAxisExtents()))}getSize(){return this._cache("size/size",()=>this.child.isVisible()?this.getSizeFromSpec().addPadding(this.getPadding()).addPadding(this.getAxisSizes()):xp)}getAxisSizes(){return this._cache("size/axisSizes",()=>this._getAxisExtents().add(this._getAxisOffsets()))}render(e,n,r={}){if(!this.isVisible()||!this.child.isVisible())return;n=n.shrink(this.getPadding()),e.pushView(this,n);const i=this._getAxisExtents(),o=n.shrink(i.add(this._getAxisOffsets()));this._childCoords=o,this.backgroundView&&this.backgroundView.render(e,o,r),this.child.render(e,o,r);const s=this._cache("axisViewEntries",()=>Object.entries(this.axisViews).filter(a=>!!a[1]));for(const[a,c]of s){const u=c.axisProps;let f;a=="bottom"?f=o.translate(0,o.height+u.offset).modify({height:i.bottom}):a=="top"?f=o.translate(0,-i.top-u.offset).modify({height:i.top}):a=="left"?f=o.translate(-i.left-u.offset,0).modify({width:i.left}):a=="right"&&(f=o.translate(o.width+u.offset,0).modify({width:i.right})),c.render(e,f)}e.popView(this)}_getResolutionParticipants(){return[...this.getAncestors(),...hC(this.child)]}_initializeAxes(e,n){const r=this._getResolutionParticipants().map(i=>i.resolutions.axis[e]).filter(i=>i);for(const i of r){const o=i.getAxisProps();if(o&&o.orient){if(!n.includes(o.orient))throw new Error(`Invalid axis orientation for '${e}' channel: ${o.orient}`);if(this.axisViews[o.orient])throw new Error(`The slot for ${o.orient} axis is already reserved!`);this.axisViews[o.orient]=new Su(U(T({},o),{title:i.getTitle()}),i.scaleResolution.type,this.context,this)}}e:for(const i of r){const o=i.getAxisProps();if(o&&!o.orient){for(const s of n)if(!this.axisViews[s]){o.orient=s,this.axisViews[s]=new Su(U(T({},o),{title:i.getTitle()}),i.scaleResolution.type,this.context,this);continue e}throw new Error("No room for axes. All slots are already reserved.")}}}handleMouseEvent(e,n){if(!!this.isZoomable()){if(n.type=="wheel"){n.uiEvent.preventDefault();const r=n.uiEvent,i=r.deltaMode?120:1;let{x:o,y:s}=n.point;const a=this.context.getCurrentHover();if(a){const c=e.shrink(this.getEffectivePadding()),u=a.mark.encoders;u.x&&!u.x2&&(o=+u.x(a.datum)*c.width+c.x),u.y&&!u.y2&&(s=(1-+u.y(a.datum))*c.height+c.y)}Math.abs(r.deltaX)<Math.abs(r.deltaY)?this._handleZoom(e,{x:o,y:s,xDelta:0,yDelta:0,zDelta:r.deltaY*i/300}):this._handleZoom(e,{x:o,y:s,xDelta:-r.deltaX*i,yDelta:0,zDelta:0})}else if(n.type=="mousedown"&&n.uiEvent.button===0){const r=n.uiEvent;r.preventDefault();let i=r;const o=a=>{this._handleZoom(e,{x:i.clientX,y:i.clientY,xDelta:a.clientX-i.clientX,yDelta:a.clientY-i.clientY,zDelta:0}),i=a},s=a=>{document.removeEventListener("mousemove",o),document.removeEventListener("mouseup",s)};document.addEventListener("mouseup",s,!1),document.addEventListener("mousemove",o,!1)}}}isZoomable(){return this._cache("zoomable",()=>Object.values(this._getZoomableResolutions()).some(e=>e.size))}_getZoomableResolutions(){return this._cache("zoomableResolutions",()=>{const e={x:new Set,y:new Set};return this.child.visit(n=>{for(const[r,i]of Object.entries(e)){const o=n.getScaleResolution(r);o&&o.isZoomable()&&i.add(o)}}),e})}_handleZoom(e,n){for(const[r,i]of Object.entries(this._getZoomableResolutions())){if(i.size<=0)continue;const o=this._getAxisExtents(),s=e.shrink(o.add(this._getAxisOffsets())),a=s.normalizePoint(n.x,n.y),c=s.normalizePoint(n.x+n.xDelta,n.y+n.yDelta),u={x:c.x-a.x,y:c.y-a.y};for(const f of i)f.zoom(2**n.zDelta,r=="y"?1-a[r]:a[r],r=="x"?u.x:-u.y)}this.context.animator.requestRender()}}function DD(t){return{configurableVisibility:!1,data:{values:[{}]},mark:U(T({fill:null,strokeWidth:1},t),{type:"rect",clip:!1,tooltip:null})}}function*Mu(t,e=[]){for(const[n,r]of t.entries())if(r instanceof Map)for(const i of Mu(r,[...e,n]))yield i;else yield[[...e,n],r]}class Ni extends ie{constructor(e){super();this.params=e!=null?e:{type:"collect"},this.observers=[],this.facetBatches=void 0,this._init()}_init(){this._data=[],this.facetBatches=new uo([],JSON.stringify),this.facetBatches.set(void 0,this._data)}reset(){super.reset(),this._init()}handle(e){this._data.push(e)}beginBatch(e){oS(e)&&(this._data=[],this.facetBatches.set(Ye(e.facetId),this._data))}complete(){var i,o;const e=(i=this.params)==null?void 0:i.sort,n=e?kl(e.field,e.order):void 0,r=s=>{n&&s.sort(n)};if((o=this.params.groupby)==null?void 0:o.length){if(this.facetBatches.size>1)throw new Error("TODO: Support faceted data!");const s=this.params.groupby.map(c=>X(c)),a=fo(this._data,...s);this.facetBatches.clear();for(const[c,u]of Mu(a))this.facetBatches.set(c,u)}for(const s of this.facetBatches.values())r(s);if(this.children.length)for(const s of this.facetBatches.values())for(const a of s)this._propagate(a);super.complete();for(const s of this.observers)s(this)}getData(){switch(this._checkStatus(),this.facetBatches.size){case 0:return[];case 1:return[...this.facetBatches.values()][0];default:{const e=this.facetBatches;return{[Symbol.iterator]:function*(){for(const r of e.values())for(let i=0;i<r.length;i++)yield r[i]}}}}}visitData(e){this._checkStatus();for(const n of this.facetBatches.values())for(let r=0;r<n.length;r++)e(n[r])}getItemCount(){let e=0;for(const n of this.facetBatches.values())e+=n.length;return e}_checkStatus(){if(!this.completed)throw new Error("Data propagation is not completed! No data are available.")}}class Li{constructor(){this.ids=[],this.values=[],this.length=0}clear(){this.length=0}push(e,n){let r=this.length++;for(this.ids[r]=e,this.values[r]=n;r>0;){const i=r-1>>1,o=this.values[i];if(n>=o)break;this.ids[r]=this.ids[i],this.values[r]=o,r=i}this.ids[r]=e,this.values[r]=n}pop(){if(this.length===0)return;const e=this.ids[0];if(this.length--,this.length>0){const n=this.ids[0]=this.ids[this.length],r=this.values[0]=this.values[this.length],i=this.length>>1;let o=0;for(;o<i;){let s=(o<<1)+1;const a=s+1;let c=this.ids[s],u=this.values[s];const f=this.values[a];if(a<this.length&&f<u&&(s=a,c=this.ids[a],u=f),u>=r)break;this.ids[o]=c,this.values[o]=u,o=s}this.ids[o]=n,this.values[o]=r}return e}peek(){if(this.length!==0)return this.ids[0]}peekValue(){if(this.length!==0)return this.values[0]}}class CD extends ie{get behavior(){return Mt}constructor(e){super();this.params=e,this.startAccessor=X(e.start),this.endAccessor=X(e.end),this.chromAccessor=e.chrom?X(e.chrom):n=>{},this.weightAccessor=e.weight?X(e.weight):n=>1,this.as={coverage:e.as||"coverage",start:e.asStart||e.start,end:e.asEnd||e.end,chrom:e.asChrom||e.chrom},this.createSegment=new Function("start","end","coverage","chrom","return {"+Object.entries(this.as).filter(([n,r])=>r).map(([n,r])=>`${JSON.stringify(r)}: ${n}`).join(", ")+"};"),this.ends=new Li}reset(){super.reset(),this.initialize()}initialize(){const e=this.as.coverage,n=this.as.end,r=this.as.chrom,i=this.startAccessor,o=this.endAccessor,s=this.chromAccessor,a=this.weightAccessor;let c,u,f,l=0,h;const d=this.ends;d.clear();const p=(m,y,w)=>{if(m==y)return;let x=!1;c&&(c[e]===w?(c[n]=y,x=!0):c[e]!=0&&this._propagate(c)),x||(c=this.createSegment(m,y,w,f))},g=()=>{let m;for(;(m=d.peekValue())!==void 0;)p(h,m,l),h=m,l-=d.pop();h=void 0,c&&(this._propagate(c),c=void 0)};this.handle=m=>{const y=i(m);let w;for(;(w=d.peekValue())!==void 0&&w<y;)p(h,w,l),h=w,l-=d.pop();if(r){let E=s(m);E!==u&&(g(),f=E,u=f)}h!==void 0&&p(h,y,l),h=y;const x=a(m);l+=x,d.push(x,o(m))},this.complete=()=>{g(),super.complete()}}}function MD(t,e,n=0,r=t.length){const i=new Li,o=r-n;let s;for(s=0;s<e&&s<o;s++)i.push(s,t[n+s]);for(;s<o;s++){const u=t[n+s];u>=i.peekValue()&&(i.push(s,u),i.pop())}const a=[];let c;for(;(c=i.pop())!==void 0;)a.push(n+c);return a.reverse()}class ID{constructor(e,n=-1/0,r=1/0){this.maxSize=e,this.lowerLimit=n,this.upperLimit=r;const i=this.maxSize*2+1;this.lowerLimits=new Float64Array(i),this.upperLimits=new Float64Array(i),this.lowerChildren=new Int32Array(i),this.upperChildren=new Int32Array(i),this.reset()}reset(){this.lowerLimits.fill(0),this.upperLimits.fill(0),this.lowerChildren.fill(0),this.upperChildren.fill(0),this.n=1,this.lowerLimits[0]=this.lowerLimit,this.upperLimits[0]=this.upperLimit}_findSlot(e,n,r=0){if(e>=this.lowerLimits[r]&&n<=this.upperLimits[r]){const i=this.lowerChildren[r];if(i){const o=this._findSlot(e,n,i);return o>=0?o:this._findSlot(e,n,this.upperChildren[r])}else return r}else return-1}reserve(e,n){if(n-e<=0)throw new Error("Cannot reserve an empty or negative-size slot!");if(this.n+1>this.lowerLimits.length)return!1;const r=this._findSlot(e,n);if(r<0)return!1;const i=this.n++,o=this.n++;return this.lowerLimits[i]=this.lowerLimits[r],this.upperLimits[i]=e,this.lowerLimits[o]=n,this.upperLimits[o]=this.upperLimits[r],this.lowerChildren[r]=i,this.upperChildren[r]=o,!0}}class TD extends ie{constructor(e,n){super();var i,o;if(this.params=e,this._data=[],this.channel=(i=e.channel)!=null?i:"x",!["x","y"].includes(this.channel))throw new Error("Invalid channel: "+this.channel);this.posAccessor=X(this.params.pos),this.posBisector=co(this.posAccessor),this.scoreAccessor=X(this.params.score),this.widthAccessor=X(this.params.width),this.laneAccessor=this.params.lane?X(this.params.lane):s=>0,this.padding=(o=this.params.padding)!=null?o:0,this.reservationMaps=new Map,this.resolution=n.getScaleResolution(this.channel);const r=()=>this._filterAndPropagate();this.schedule=()=>n.context.animator.requestTransition(r),this.resolution.addEventListener("domain",s=>this.schedule()),n._addBroadcastHandler("layoutComputed",()=>this.schedule())}complete(){const e=this.posAccessor;this._data.sort((n,r)=>e(n)-e(r)),this._scores=this._data.map(this.scoreAccessor);for(const n of new Set(this._data.map(this.laneAccessor)))this.reservationMaps.set(n,new ID(200));this.schedule(),super.complete()}_filterAndPropagate(){var s;super.reset();const e=this.resolution.getScale(),n=(s=this.resolution.members[0].view.coords)==null?void 0:s[this.channel=="x"?"width":"height"];if(!n)return;for(const a of this.reservationMaps.values())a.reset();const r=e.domain(),i=70,o=MD(this._scores,i,this.posBisector.left(this._data,r[0]),this.posBisector.right(this._data,r[1]));for(const a of o){const c=this._data[a],u=e(this.posAccessor(c))*n,f=this.widthAccessor(c)/2+this.padding;this.reservationMaps.get(this.laneAccessor(c)).reserve(u-f,u+f)&&this._propagate(c)}super.complete()}reset(){super.reset(),this._data=[],this.groups=new Map}handle(e){this._data.push(e)}}class ND extends ie{constructor(e){super();this.params=e,this.predicate=void 0}initialize(){this.predicate=Ec(this.params.expr,this.getGlobalObject())}handle(e){this.predicate(e)&&this._propagate(e)}}const LD="0".charCodeAt(0);function*OD(t,e=","){const n=e.charCodeAt(0);let r=0;for(let i=0;i<t.length;i++){const o=t.charCodeAt(i);o==n?(yield r,r=0):r=r*10+o-LD}yield r}class kD extends ie{get behavior(){return Mt}constructor(e){super();var s,a;const n=X((s=e.exons)!=null?s:"exons"),r=X((a=e.start)!=null?a:"start"),[i,o]=e.as||["exonStart","exonEnd"];this.handle=c=>{let u=r(c),f=u,l=!0;const h=n(c);for(const d of OD(h)){if(l)f=u+d;else{u=f+d;const p=Object.assign({},c);p[i]=f,p[o]=u,this._propagate(p)}l=!l}}}}class BD extends ie{get behavior(){return Mt}constructor(e){super();const n=Ye(e.field).map(o=>X(o)),r=Ye(e.separator),i=Ye(e.as||e.field);if(n.length!==r.length||n.length!==i.length)throw new Error(`Lengths of "separator" (${r.length}), "fields" (${n.length}), and "as" (${i.length}) do not match!`);this.handle=o=>{if(n.some(c=>!c(o)))return;const s=n.map((c,u)=>c(o).split(r[u]));FD(s,o);const a=s[0].length;for(let c=0;c<a;c++){const u=Object.assign({},o);for(let f=0;f<n.length;f++)u[i[f]]=s[f][c];this._propagate(u)}}}}function FD(t,e){const n=t.map(r=>r.length);if(!n.every(r=>r==n[0]))throw new Error("Mismatching number of elements in the fields to be split: "+JSON.stringify(e))}class PD extends ie{get behavior(){return $t}constructor(e){super();this.params=e,this.as=e.as,this.fn=void 0}initialize(){this.fn=Ec(this.params.expr,this.getGlobalObject())}handle(e){e[this.as]=this.fn(e),this._propagate(e)}}class Zp extends ie{get behavior(){return $t}constructor(e,n){super();var p;const r=(p=e.channel)!=null?p:"x";if(!["x","y"].includes(r))throw new Error("Invalid channel: "+r);const i=n.getScaleResolution(r).getGenome();if(!i)throw new Error("LinearizeGenomicCoordinate transform requires a locus scale!");const o=X(e.chrom),s=Ye(e.pos).map(g=>X(g)),a=Ye(e.as);if(s.length!=a.length)throw new Error('The number of "pos" and "as" elements must be equal!');const c=Ye(e.offset);let u;if(c.length==0)u=new Array(s.length).fill(0);else if(c.length==1)u=new Array(s.length).fill(c[0]);else if(c.length==s.length)u=c;else throw new Error(`Invalid "offset" parameter: ${JSON.stringify(e.offset)}!`);const f=new Function("datum","chromOffset","posAccessors",a.map((g,m)=>`datum[${JSON.stringify(g)}] = chromOffset + +posAccessors[${m}](datum) - ${u[m]};`).join(`
|
1546
|
+
`));let l,h=0;const d=g=>{if(g!==l){if(h=i.cumulativeChromPositions.get(g),h===void 0)throw new Error("Unknown chromosome/contig: "+g);l=g}return h};this.handle=g=>{f(g,d(o(g)),s),this._propagate(g)}}}var Kp={pages:["Lato-Regular.png"],chars:[{id:87,width:53,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:43.491,chnl:15,x:0,y:0,page:0},{id:124,width:17,height:50,xoffset:0,yoffset:-32.193000000000005,xadvance:10.521,chnl:15,x:0,y:42,page:0},{id:40,width:20,height:49,xoffset:0,yoffset:-32.571000000000005,xadvance:11.214,chnl:15,x:0,y:94,page:0},{id:41,width:19,height:49,xoffset:0,yoffset:-32.571000000000005,xadvance:11.214,chnl:15,x:0,y:145,page:0},{id:36,width:32,height:49,xoffset:0,yoffset:-34.419000000000004,xadvance:24.360000000000003,chnl:15,x:0,y:196,page:0},{id:125,width:21,height:48,xoffset:0,yoffset:-32.193000000000005,xadvance:12.642000000000001,chnl:15,x:0,y:247,page:0},{id:91,width:22,height:48,xoffset:0,yoffset:-32.193000000000005,xadvance:12.852,chnl:15,x:0,y:297,page:0},{id:93,width:19,height:48,xoffset:0,yoffset:-32.193000000000005,xadvance:12.852,chnl:15,x:0,y:347,page:0},{id:123,width:21,height:48,xoffset:0,yoffset:-32.193000000000005,xadvance:12.642000000000001,chnl:15,x:0,y:397,page:0},{id:106,width:19,height:48,xoffset:0,yoffset:-30.639000000000003,xadvance:10.08,chnl:15,x:0,y:447,page:0},{id:81,width:43,height:47,xoffset:0,yoffset:-30.429000000000002,xadvance:33.621,chnl:15,x:21,y:447,page:0},{id:77,width:45,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:38.997,chnl:15,x:66,y:447,page:0},{id:64,width:43,height:44,xoffset:0,yoffset:-28.539,xadvance:35.133,chnl:15,x:23,y:397,page:0},{id:92,width:28,height:43,xoffset:0,yoffset:-30.933000000000003,xadvance:18.984,chnl:15,x:68,y:397,page:0},{id:47,width:28,height:43,xoffset:0,yoffset:-30.933000000000003,xadvance:18.984,chnl:15,x:98,y:397,page:0},{id:109,width:42,height:32,xoffset:0,yoffset:-21.609,xadvance:34.545,chnl:15,x:113,y:447,page:0},{id:119,width:42,height:31,xoffset:0,yoffset:-21.315,xadvance:32.991,chnl:15,x:157,y:447,page:0},{id:42,width:25,height:42,xoffset:0,yoffset:-31.626,xadvance:17.85,chnl:15,x:128,y:397,page:0},{id:37,width:42,height:41,xoffset:0,yoffset:-30.387,xadvance:33.663000000000004,chnl:15,x:155,y:397,page:0},{id:79,width:42,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:33.621,chnl:15,x:199,y:397,page:0},{id:102,width:24,height:41,xoffset:0,yoffset:-30.534000000000002,xadvance:14.721,chnl:15,x:243,y:397,page:0},{id:100,width:31,height:41,xoffset:0,yoffset:-30.933000000000003,xadvance:23.520000000000003,chnl:15,x:269,y:397,page:0},{id:98,width:32,height:41,xoffset:0,yoffset:-30.933000000000003,xadvance:23.520000000000003,chnl:15,x:302,y:397,page:0},{id:56,width:32,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:24.360000000000003,chnl:15,x:336,y:397,page:0},{id:38,width:40,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:29.904000000000003,chnl:15,x:370,y:397,page:0},{id:108,width:17,height:41,xoffset:0,yoffset:-30.933000000000003,xadvance:9.912,chnl:15,x:412,y:397,page:0},{id:107,width:31,height:41,xoffset:0,yoffset:-30.933000000000003,xadvance:21.336000000000002,chnl:15,x:431,y:397,page:0},{id:48,width:33,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:24.360000000000003,chnl:15,x:464,y:397,page:0},{id:71,width:38,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:30.681,chnl:15,x:21,y:347,page:0},{id:83,width:31,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:22.785,chnl:15,x:61,y:347,page:0},{id:63,width:27,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:18.795,chnl:15,x:94,y:347,page:0},{id:105,width:18,height:41,xoffset:0,yoffset:-30.639000000000003,xadvance:10.08,chnl:15,x:123,y:347,page:0},{id:51,width:32,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:24.360000000000003,chnl:15,x:143,y:347,page:0},{id:104,width:31,height:41,xoffset:0,yoffset:-30.933000000000003,xadvance:23.436,chnl:15,x:177,y:347,page:0},{id:67,width:37,height:41,xoffset:0,yoffset:-30.429000000000002,xadvance:28.056,chnl:15,x:210,y:347,page:0},{id:88,width:37,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:27.258000000000003,chnl:15,x:249,y:347,page:0},{id:68,width:40,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:31.941000000000003,chnl:15,x:288,y:347,page:0},{id:70,width:32,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:23.751,chnl:15,x:330,y:347,page:0},{id:34,width:23,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:15.561000000000002,chnl:15,x:364,y:347,page:0},{id:72,width:38,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:32.067,chnl:15,x:389,y:347,page:0},{id:73,width:18,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:11.760000000000002,chnl:15,x:429,y:347,page:0},{id:74,width:24,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:17.745,chnl:15,x:449,y:347,page:0},{id:75,width:38,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:27.825000000000003,chnl:15,x:24,y:297,page:0},{id:76,width:31,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:21.567,chnl:15,x:475,y:347,page:0},{id:66,width:35,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:27.153000000000002,chnl:15,x:64,y:297,page:0},{id:78,width:38,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:32.067,chnl:15,x:101,y:297,page:0},{id:33,width:18,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:11.298,chnl:15,x:141,y:297,page:0},{id:80,width:34,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:25.221,chnl:15,x:161,y:297,page:0},{id:65,width:38,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:28.434,chnl:15,x:197,y:297,page:0},{id:82,width:36,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:26.313000000000002,chnl:15,x:237,y:297,page:0},{id:35,width:33,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:24.360000000000003,chnl:15,x:275,y:297,page:0},{id:84,width:34,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:24.801000000000002,chnl:15,x:310,y:297,page:0},{id:85,width:37,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:30.891000000000002,chnl:15,x:346,y:297,page:0},{id:86,width:38,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:28.434,chnl:15,x:385,y:297,page:0},{id:39,width:16,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:8.568000000000001,chnl:15,x:425,y:297,page:0},{id:69,width:32,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:24.255000000000003,chnl:15,x:443,y:297,page:0},{id:89,width:36,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:26.208000000000002,chnl:15,x:23,y:247,page:0},{id:90,width:34,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:25.284000000000002,chnl:15,x:477,y:297,page:0},{id:49,width:31,height:40,xoffset:0,yoffset:-30.156000000000002,xadvance:24.360000000000003,chnl:15,x:61,y:247,page:0},{id:50,width:32,height:40,xoffset:0,yoffset:-30.429000000000002,xadvance:24.360000000000003,chnl:15,x:94,y:247,page:0},{id:57,width:32,height:40,xoffset:0,yoffset:-30.429000000000002,xadvance:24.360000000000003,chnl:15,x:128,y:247,page:0},{id:94,width:32,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:24.360000000000003,chnl:15,x:162,y:247,page:0},{id:96,width:21,height:40,xoffset:0,yoffset:-30.429000000000002,xadvance:16.8,chnl:15,x:196,y:247,page:0},{id:55,width:33,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:24.360000000000003,chnl:15,x:219,y:247,page:0},{id:54,width:33,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:24.360000000000003,chnl:15,x:254,y:247,page:0},{id:53,width:32,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:24.360000000000003,chnl:15,x:289,y:247,page:0},{id:52,width:33,height:40,xoffset:0,yoffset:-30.093000000000004,xadvance:24.360000000000003,chnl:15,x:323,y:247,page:0},{id:103,width:31,height:39,xoffset:0,yoffset:-21.630000000000003,xadvance:21.84,chnl:15,x:358,y:247,page:0},{id:112,width:32,height:39,xoffset:0,yoffset:-21.651,xadvance:23.541,chnl:15,x:391,y:247,page:0},{id:113,width:31,height:39,xoffset:0,yoffset:-21.651,xadvance:23.520000000000003,chnl:15,x:425,y:247,page:0},{id:116,width:25,height:39,xoffset:0,yoffset:-28.182000000000002,xadvance:15.057,chnl:15,x:458,y:247,page:0},{id:121,width:31,height:38,xoffset:0,yoffset:-21.273,xadvance:21.651,chnl:15,x:34,y:196,page:0},{id:59,width:18,height:36,xoffset:0,yoffset:-20.706,xadvance:10.983,chnl:15,x:485,y:247,page:0},{id:43,width:32,height:34,xoffset:0,yoffset:-24.486,xadvance:24.360000000000003,chnl:15,x:67,y:196,page:0},{id:60,width:30,height:33,xoffset:0,yoffset:-23.331000000000003,xadvance:24.360000000000003,chnl:15,x:101,y:196,page:0},{id:62,width:31,height:33,xoffset:0,yoffset:-23.331000000000003,xadvance:24.360000000000003,chnl:15,x:133,y:196,page:0},{id:117,width:30,height:32,xoffset:0,yoffset:-21.273,xadvance:23.415000000000003,chnl:15,x:166,y:196,page:0},{id:99,width:29,height:32,xoffset:0,yoffset:-21.609,xadvance:20.055,chnl:15,x:198,y:196,page:0},{id:110,width:31,height:32,xoffset:0,yoffset:-21.609,xadvance:23.436,chnl:15,x:229,y:196,page:0},{id:111,width:32,height:32,xoffset:0,yoffset:-21.609,xadvance:23.814,chnl:15,x:262,y:196,page:0},{id:126,width:32,height:26,xoffset:0,yoffset:-16.128,xadvance:24.360000000000003,chnl:15,x:201,y:447,page:0},{id:101,width:31,height:32,xoffset:0,yoffset:-21.609,xadvance:22.176000000000002,chnl:15,x:296,y:196,page:0},{id:114,width:25,height:32,xoffset:0,yoffset:-21.651,xadvance:15.288,chnl:15,x:329,y:196,page:0},{id:115,width:27,height:32,xoffset:0,yoffset:-21.609,xadvance:18.186,chnl:15,x:356,y:196,page:0},{id:97,width:28,height:32,xoffset:0,yoffset:-21.651,xadvance:20.874000000000002,chnl:15,x:385,y:196,page:0},{id:118,width:31,height:31,xoffset:0,yoffset:-21.273,xadvance:21.672,chnl:15,x:415,y:196,page:0},{id:61,width:31,height:29,xoffset:0,yoffset:-19.089000000000002,xadvance:24.360000000000003,chnl:15,x:448,y:196,page:0},{id:120,width:30,height:31,xoffset:0,yoffset:-21.273,xadvance:20.916,chnl:15,x:21,y:145,page:0},{id:58,width:18,height:31,xoffset:0,yoffset:-20.706,xadvance:10.5,chnl:15,x:53,y:145,page:0},{id:122,width:28,height:31,xoffset:0,yoffset:-21.273,xadvance:18.984,chnl:15,x:73,y:145,page:0},{id:95,width:28,height:16,xoffset:0,yoffset:0,xadvance:19.278000000000002,chnl:15,x:235,y:447,page:0},{id:45,width:23,height:24,xoffset:0,yoffset:-14.175,xadvance:15.603000000000002,chnl:15,x:481,y:196,page:0},{id:44,width:17,height:21,xoffset:0,yoffset:-4.956,xadvance:9.534,chnl:15,x:103,y:145,page:0},{id:46,width:18,height:15,xoffset:0,yoffset:-4.956,xadvance:9.912,chnl:15,x:0,y:497,page:0},{id:32,width:0,height:0,xoffset:0,yoffset:0,xadvance:10.752,chnl:15,x:20,y:497,page:0}],info:{face:"Lato Regular",size:42,bold:0,italic:0,charset:[" ","!",'"',"#","$","%","&","'","(",")","*","+",",","-",".","/","0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","\\","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~"],unicode:1,stretchH:100,smooth:1,aa:1,padding:[0,0,0,0],spacing:[2,2]},common:{lineHeight:50.400000000000006,base:41.454,scaleW:512,scaleH:512,pages:1,packed:0,alphaChnl:0,redChnl:0,greenChnl:0,blueChnl:0},kernings:[]};class zD extends ie{get behavior(){return $t}constructor(e){super();const n=cu(Kp),r=X(e.field),i=e.as,o=e.fontSize;this.handle=s=>{const a=r(s);a!==void 0?s[i]=n.measureWidth(a,o):s[i]=0,this._propagate(s)}}}const RD=65536;class UD extends ie{get behavior(){return $t}constructor(e){super();this.params=e}reset(){this.initialize()}initialize(){const e=this.params,n=e.as||"lane",r=oe(e.spacing)?e.spacing:1,i=X(e.start),o=X(e.end);if(!e.preference!=!e.preferredOrder)throw new Error('Must specify both "preference" and "preferredOrder"');if(e.preference){const s=new Float64Array(RD),a=X(e.preference),c=e.preferredOrder;let u=1/0;this.handle=f=>{const l=i(f);l<u&&s.fill(-1/0),u=l;const h=c.indexOf(a(f));let d=-1;if(h>=0&&s[h]<l)d=h;else{const p=i(f);for(d=0;d<s.length&&!(s[d]<p);d++);if(d>=s.length)throw new Error("Out of lanes!")}s[d]=o(f)+r,f[n]=d,this._propagate(f)}}else{const s=new Li,a=new Li;let c=-1/0,u=0;this.handle=f=>{const l=i(f);for(;s.length&&(s.peekValue()<=l||l<c);){const d=s.pop();a.push(d,d)}c=l;let h=a.pop();h===void 0&&(h=u++),f[n]=h,this._propagate(f),s.push(h,o(f)+r)}}}}class jD extends ie{get behavior(){return Mt}constructor(e){super();if(e.as&&e.as.length!=e.fields.length)throw new Error('"fields" and "as" have unequal lengths!');const n=e.fields.map(i=>X(i)),r=e.as?e.as:n.map(He);this.handle=i=>{const o={};for(let s=0;s<n.length;s++)o[r[s]]=n[s](i);this._propagate(o)}}}class GD extends ie{get behavior(){return $t}constructor(e){super();const n=new RegExp(e.regex),r=typeof e.as=="string"?[e.as]:e.as,i=X(e.field);this.handle=o=>{const s=i(o);if(se(s)){const a=s.match(n);if(a){if(a.length-1!=r.length)throw new Error('The number of RegEx groups and the length of "as" do not match!');for(let c=0;c<r.length;c++)o[r[c]]=a[c+1]}else if(e.skipInvalidInput)for(let c=0;c<r.length;c++)o[r[c]]=void 0;else throw new Error(`"${s}" does not match the given regex: ${n.toString()}`)}else if(!e.skipInvalidInput)throw new Error(`Trying to match a non-string field. Encountered type: ${typeof s}, field content: "${s}".`);this._propagate(o)}}}class HD extends ie{get behavior(){return Mt}constructor(e){super();const n=Ye(e.columnRegex).map(h=>new RegExp(h)),r=Ye(e.asValue);if(n.length!=r.length)throw new Error('Lengths of "columnRegex" and "as" are not equal!');const i=e.skipRegex?new RegExp(e.skipRegex):void 0,o=e.asKey||"sample";let s,a,c;const u=h=>{var m;const d=Object.keys(h),p=new Map;for(const[y,w]of n.entries())for(const x of d){const E=(m=w.exec(x))==null?void 0:m[1];if(E!==void 0){let b=p.get(E);b||(b=[],p.set(E,b)),b[y]=x}}s=[...p.entries()],a=d.filter(y=>!n.some(w=>w.test(y))&&!(i&&i.test(y)));const g=[...a.map(y=>JSON.stringify(y)+": datum["+JSON.stringify(y)+"]"),JSON.stringify(o)+": sampleId",...r.map(y=>JSON.stringify(y)+": null")];c=new Function("datum","sampleId",`return {
|
1547
|
+
`+g.join(`,
|
1548
|
+
`)+`
|
1549
|
+
};`)},f=h=>{s||u(h);for(const[d,p]of s){const g=c(h,d);for(let m=0;m<p.length;m++)g[r[m]]=h[p[m]];this._propagate(g)}},l=h=>{u(h),f(h),this.handle=f};this.handle=l,this.beginBatch=h=>{mp(h)&&(this.handle=l),super.beginBatch(h)}}}class QD extends ie{get behavior(){return $t}constructor(e){super();this.params=e,this.buffer=[]}reset(){this.buffer=[]}handle(e){this.buffer.push(e)}complete(){var f;const e=this.params,n=e.as||["y0","y1"],r=e.sort?kl(e.sort.field,e.sort.order):void 0,i=e.field?X(e.field):l=>1,o=e.groupby.map(l=>X(l)),s=l2(this.buffer,l=>o.map(h=>h(l)).join()).map(l=>l[1]);let a=l=>!0;if(e.baseField){const l=X(e.baseField);a=h=>l(h)!==null}let c,u;switch(e.offset){case"normalize":c=(l,h)=>l/h,u=(l,h)=>po(l,h);break;case"center":c=(l,h)=>l-h/2,u=(l,h)=>po(l,h);break;case"information":{const l=Math.log2((f=e.cardinality)!=null?f:4);c=(h,d)=>h/d,u=(h,d)=>{const p=0,g=po(h,x=>+!a(x)),m=po(h,d),y=m-g;let w=0;for(let x=0;x<h.length;x++){const E=h[x];if(a(E)){const b=d(E)/y;w-=b*Math.log2(b)}}return y/(l-(w+p))*(y/m)}}break;default:c=(l,h)=>l,u=(l,h)=>1}for(const l of s){r&&l.sort(r);const h=u(l,i);let d=0;for(const p of l){const g=d+i(p);a(p)&&(p[n[0]]=c(d,h),p[n[1]]=c(g,h),this._propagate(p),d=g)}}super.complete()}}class VD extends ie{get behavior(){return Mt}constructor(e){super();var o,s;const n=X((o=e.field)!=null?o:"sequence"),[r,i]=(s=e.as)!=null?s:["pos","sequence"];this.handle=a=>{const c=Object.assign({},a,{[i]:"",[r]:0}),u=n(a);for(let f=0;f<u.length;f++){const l=Object.assign({},c);l[r]=f,l[i]=u.charAt(f),this._propagate(l)}}}}class _D extends ie{get behavior(){return Mt}constructor(e){super();this.params=e,this.buffer=[]}reset(){this.buffer=[]}handle(e){this.buffer.push(e)}complete(){const n=this.params.groupby,r=n.map(o=>X(o)),i=fo(this.buffer,...r);for(const[o,s]of Mu(i)){const a={count:s.length};for(let c=0;c<n.length;c++)a[n[c]]=o[c];this._propagate(a)}super.complete()}}const YD="_uniqueId",Jp=1e4,$p=[null];class eg extends ie{get behavior(){return $t}constructor(e){super();var n;this.params=e,this.as=(n=e.as)!=null?n:YD,this._blocks=[],this._usedBlocks=0,this._id=-1}initialize(){}reset(){super.reset(),this._usedBlocks=0,this._id=-1}handle(e){e[this.as]=this._nextId(),this._propagate(e)}_nextId(){return++this._id%Jp==0&&(this._id=this._getBlock()*Jp),this._id}_getBlock(){return this._usedBlocks<this._blocks.length?this._blocks[this._usedBlocks++]:this._reserveBlock()}_reserveBlock(){const e=$p.length;return $p[e]=this,this._blocks.push(e),this._usedBlocks++,e}}const tg={aggregate:_D,collect:Ni,coverage:CD,filterScoredLabels:TD,filter:ND,flattenCompressedExons:kD,flattenDelimited:BD,flattenSequence:VD,formula:PD,identifier:eg,linearizeGenomicCoordinate:Zp,measureText:zD,pileup:UD,project:jD,regexExtract:GD,regexFold:HD,sample:yp,stack:QD};function WD(t,e){const n=tg[t.type];if(n)return new n(t,e);throw new Error("Unknown transform: "+t.type)}function ng(t){const e=T({},t.format);if(e.type=e.type||XD(t.url),e.parse=e.parse||"auto",!e.type)throw new Error("Format for the data source was not defined and it could not be inferred: "+JSON.stringify(t));return e}function XD(t){var e;if(t)return(e=t.match(/\.(csv|tsv|json)/))==null?void 0:e[1]}function qD(t){return"values"in t}class ZD extends In{constructor(e){super();var n;if(this.params=e,typeof e.values=="string"&&!((n=e==null?void 0:e.format)==null?void 0:n.type))throw new Error("Data format type (csv, dsv, ...) must be specified if a string is provided!")}loadSynchronously(){const e=this.params.values;let n=[],r=i=>i;if(Array.isArray(e))e.length>0&&(n=e,typeof e[0]!="object"&&(r=i=>({data:i})));else if(typeof e=="object")n=[e];else if(typeof e=="string")n=Of(e,ng(this.params));else throw new Error('"values" in data configuration is not an array, object, or a string!');this.reset(),this.beginBatch({type:"file"});for(const i of n)this._propagate(r(i));this.complete()}async load(){this.loadSynchronously()}}function KD(t){return"url"in t}class JD extends In{constructor(e,n){super();this.params=e,this.baseUrl=n}get identifier(){return JSON.stringify({params:this.params,baseUrl:this.baseUrl})}async load(){const e=this.params.url,n=Array.isArray(e)?e:[e],r=async o=>ao({baseURL:this.baseUrl}).load(o).catch(s=>{throw new Error(`Cannot fetch: ${this.baseUrl}${o}: ${s.message}`)}),i=(o,s)=>{try{const a=Of(o,ng(this.params));this.beginBatch({type:"file",url:s});for(const c of a)this._propagate(c)}catch(a){throw new Error(`Cannot parse: ${s}: ${a.message}`)}};this.reset(),await Promise.all(n.map(o=>r(o).then(i))),this.complete()}}function $D(t){return"sequence"in t}class eC extends In{constructor(e){super();if(this.sequence=e.sequence,!("start"in this.sequence))throw new Error("'start' is missing from sequence parameters!");if(!("stop"in this.sequence))throw new Error("'stop' is missing from sequence parameters!")}loadSynchronously(){const e=this.sequence.as||"data",n=this.sequence.step||1,r=this.sequence.stop;this.reset(),this.beginBatch({type:"file"});for(let i=this.sequence.start;i<r;i+=n)this._propagate({[e]:i});this.complete()}async load(){this.loadSynchronously()}}function tC(t){return"dynamicSource"in t}class nC extends In{publishData(e){this.reset(),this.beginBatch({type:"file"});let n;for(const r of e)n||(n=typeof r!="object"?i=>({data:i}):i=>i),this._propagate(n(r));this.complete()}async load(){}}function rg(t,e){if(qD(t))return new ZD(t);if(KD(t))return new JD(t,e);if($D(t))return new eC(t);if(tC(t))return new nC;throw new Error("Cannot figure out the data source type: "+JSON.stringify(t))}function rC(t){const e=Object.keys(t),n=new Function("source","return { "+e.map(r=>JSON.stringify(r)).map(r=>`${r}: source[${r}]`).join(`,
|
1550
|
+
`)+" };");return n.properties=e,n}class ig extends ie{get behavior(){return Mt}constructor(){super();const e=n=>{const r=rC(n);this.handle=i=>this._propagate(r(i)),this.handle(n)};this.handle=e,this.beginBatch=n=>{mp(n)&&(this.handle=e),super.beginBatch(n)}}}class og{constructor(){this._dataSourcesByHost=new Map,this._collectorsByHost=new Map,this._observers=new Map}get dataSources(){return[...new Set(this._dataSourcesByHost.values()).values()]}get collectors(){return[...this._collectorsByHost.values()]}addObserver(e,n){let r=this._observers.get(n);r||(r=[],this._observers.set(n,r)),r.push(e)}_relayObserverCallback(e,n){const r=this._observers.get(n);if(r)for(const i of r)i(e)}addDataSource(e,n){this._dataSourcesByHost.set(n,e)}findDataSourceByKey(e){return this._dataSourcesByHost.get(e)}addCollector(e,n){this._collectorsByHost.set(n,e),e.observers.push(r=>this._relayObserverCallback(r,n))}findCollectorByKey(e){return this._collectorsByHost.get(e)}initialize(){for(const e of this.dataSources)e.visit(n=>n.initialize())}}function iC(t){return"name"in t}class oC extends In{constructor(e,n){super();this.getNamedData=n,this.params=e}get identifier(){return this.params.name}_getValues(){const e=this.getNamedData(this.params.name);if(e)return e;throw new Error("Cannot find named data: "+this.params.name)}loadSynchronously(){const e=this._getValues();let n=r=>r;if(Array.isArray(e))e.length>0&&typeof e[0]!="object"&&(n=r=>({data:r}));else throw new Error(`Named data "${this.params.name}" is not an array!`);this.reset(),this.beginBatch({type:"file"});for(const r of e)this._propagate(n(r));this.complete()}async load(){this.loadSynchronously()}}function sg(t,e){const n=[];let r;const i=e!=null?e:new og,o=[];function s(f,l=()=>{}){if(!r)throw l()||new Error("Cannot append data flow node, no parent exist!");return r.addChild(f),r=f,f}function a(f,l){return s(f,()=>new Error(`Cannot append a transform because no (inherited) data are available! ${l?JSON.stringify(l):""}`))}function c(f,l){for(const h of f){let d;try{d=WD(h,l)}catch(p){throw console.warn(p),new Error(`Cannot initialize "${h.type}" transform: ${p}`)}d.behavior&$t&&a(new ig),a(d)}}const u=f=>{if(n.push(r),f.spec.data){const l=bD(f.spec.data)?f.getDynamicDataSource():iC(f.spec.data)?new oC(f.spec.data,f.context.getNamedData):rg(f.spec.data,f.getBaseUrl());r=l,i.addDataSource(l,f)}if(f.spec.transform&&c(f.spec.transform,f),f instanceof Oe){if(!r)throw new Error("A unit view has no (inherited) data source");const l=sC(f);if(l){o.push(l.rewrite);for(const d of l.transforms)a(d)}f.mark.isPickingParticipant()&&a(new eg({type:"identifier"}));const h=new Ni({type:"collect",groupby:f.getFacetFields(),sort:aC(f,l==null?void 0:l.rewrittenEncoding)});s(h),i.addCollector(h,f)}Gp(f.spec)};return u.postOrder=f=>{r=n.pop()},t.visit(u),o.forEach(f=>f()),i}function sC(t){var o,s,a,c;const e=[],n={},r=[];for(const[u,f]of Object.entries(t.getEncoding())){const l=u;jo(l)&&Ld(f)&&r.push({channel:l,chromPosDef:f})}const i=fo(r,u=>En(u.channel),u=>u.chromPosDef.chrom);for(const[u,f]of i.entries())for(const[l,h]of f.entries()){const d=[],p=[],g=[];for(const{channel:m,chromPosDef:y}of h){const w=b=>b.replace(/[^A-Za-z0-9_]/g,""),x=["_linearized_",w(y.chrom),"_",w(y.pos)].join(""),E=U(T({},(a=(s=(o=t.spec.encoding)==null?void 0:o[m])!=null?s:t.getEncoding()[m])!=null?a:{}),{field:x});delete E.chrom,delete E.pos,!E.type&&y.type&&(E.type=y.type),n[m]=E,d.push(y.pos),g.push((c=y.offset)!=null?c:0),p.push(x)}e.push(new Zp({type:"linearizeGenomicCoordinate",channel:u,chrom:l,pos:d,offset:g,as:p},t))}return e.length?{transforms:e,rewrittenEncoding:n,rewrite:()=>{t.spec.encoding=T(T({},t.spec.encoding),n),cp(t.mark,"encoding")}}:void 0}function aC(t,e){var r;const n=T(T({},t.getEncoding()),e).x;if(St(n)&&((r=t.getScaleResolution("x"))==null?void 0:r.isZoomable())){if(wn(n))return{field:n.field};if(!Ro(n))throw new Error("A zoomable x channel must be mapped to a field.")}}function cC(t,...e){let n=t;for(const o of e)n.addChild(o),n=o;let r;n instanceof Ni?r=n:(r=new Ni,n.addChild(r));let i;return t instanceof In?i=async()=>(await t.load(),r.getData()):i=async()=>{throw new Error("The root node is not derived from DataSource!")},{dataSource:t,collector:r,loadAndCollect:i}}function ag(t,e=void 0){if(t.parent!==e)return!1;for(const n of t.children)if(!ag(n,t))return!1;return!0}function Iu(t,e=!1){if(t instanceof ig)if(e)e=!1;else{const n=t.children[0];t.excise(),n&&Iu(n,e);return}t.behavior&Mt&&(e=!1);for(let n=0,r=t.children.length;n<r;n++)Iu(t.children[n],e||n<r-1)}function uC(t){const e=[...t._dataSourcesByHost.entries()],n=new Map;for(const r of e){const i=r[1];i.identifier&&!n.has(i.identifier)&&n.set(i.identifier,i)}t._dataSourcesByHost.clear();for(let[r,i]of e){const o=n.get(i.identifier);o&&(o.adoptChildrenOf(i),i=o),t.addDataSource(i,r)}}function lC(t){if(Iu(t),!ag(t))throw new Error("Encountered a bug! There's a problem in the data flow structure.")}function fC(t){for(const e of t.dataSources)lC(e);uC(t)}function hC(t){const e=[];return t.visit(n=>{e.push(n)}),e}function cg(t){t.visit(n=>{n instanceof Oe&&n.resolve("scale")});const e=new Set;t.visit(n=>{for(const r of Object.values(n.resolutions.scale)){const i=r.name;if(i&&e.has(i))throw new Error(`The same scale name "${i}" occurs in multiple scale resolutions!`);e.add(i)}}),t.visit(n=>{n instanceof Oe&&n.resolve("axis")}),t.visit(n=>n.onScalesResolved())}function dC(t){for(const e of Kn){const n=t.getScaleResolution(e);n&&!n.name&&n.isZoomable()&&(n.name=`${e}_at_root`)}}function pC(t){let e=t;const n=r=>r&&!vn(r);return t.visit(r=>{if(r instanceof Ti||r instanceof Oe){const i=r.getEncoding();if(r instanceof Oe&&!n(i.x)&&!n(i.y))return lr;const o=r.parent,s=new Cu(r.context,o);if(r.parent=s,s.child=r,s.name=r.name+"_decorator",o)if(o instanceof gt)o.replaceChild(r,s);else{let a;if(t.visit(yC((c,u)=>{if(c===r)return a=he(u),Mn})),a instanceof gt)a.replaceChild(r,s);else throw new Error("Cannot find parent while decorating: "+r.getPathString())}return s.resolutions=r.resolutions,r.resolutions={scale:{},axis:{}},s.spec.height=r.spec.height,r.spec.height="container",s.spec.width=r.spec.width,r.spec.width="container",s.spec.padding=r.spec.padding,r.spec.padding=void 0,r===t&&(e=s),s.initialize(),lr}}),e}function gC(t){const e=[];return t.visit(n=>{if(n instanceof Oe){const r=n.getEncoding();for(const[i,o]of Object.entries(r))wn(o)&&e.push({view:n,channel:i,field:o.field,type:o.type});return lr}}),e}async function mC(t,e,n){var s;if(!t.import.url)throw new Error("Cannot import, not an import spec: "+JSON.stringify(t));const r=ao({baseURL:e}),i=t.import.url,o=JSON.parse(await r.load(i).catch(a=>{throw new Error(`Could not load imported view spec: ${i}
|
1551
|
+
Reason: ${a.message}`)}));if(n.isViewSpec(o))return o.baseUrl=(s=i.match(/^[^?#]*\//))==null?void 0:s[0],o;throw new Error(`The imported spec "${i}" is not a view spec: ${JSON.stringify(t)}`)}async function ug(t){const e=[];t.visit(n=>{if(n instanceof Up)return e.push(n),lr});for(const n of e){const r=n.context,i=await mC(n.spec,n.getBaseUrl(),r),o=r.createView(i,n.parent,n.name);n.parent.replaceChild(n,o),await ug(o)}}function yC(t){const e=[],n=r=>t(r,e);return n.beforeChildren=r=>{e.push(r)},n.afterChildren=r=>{e.pop()},n}function AC(t){const e=[];return t.visit(n=>{e.push(n)}),new Set([...f2(e,n=>n.length,n=>n.name)].filter(([n,r])=>r==1&&n!==void 0).map(([n,r])=>n))}const bC=t=>!/^(layer|concat)\d+$/.test(t);class Tu{constructor(e){this.globalOptions=e}pushView(e,n){}popView(e){}renderMark(e,n){}}class lg extends Tu{constructor(e,n){super(e);this.webGLHelper=n,this.buffer=[],this.coords=void 0,this.views=new Set}pushView(e,n){this.views.add(e),this.coords=n}renderMark(e,n){if(this.globalOptions.picking&&!e.isPickingParticipant())return;const r=e.render(n);r&&this.buffer.push({mark:e,callback:r,coords:this.coords,clipRect:n.clipRect})}renderDeferred(){if(this.batch||this._buildBatch(),this.batch.length==0)return;const e=this.webGLHelper.gl,n=this.globalOptions.picking;e.bindFramebuffer(e.FRAMEBUFFER,n?this.webGLHelper._pickingBufferInfo.framebuffer:null),this.webGLHelper.clearAll();for(const r of this.views)r.onBeforeRender();for(const r of this.batch)r();n&&e.bindFramebuffer(e.FRAMEBUFFER,null)}_buildBatch(){this.batch=[];let e=!0,n=!0;const r=s=>()=>{e&&s()},i=s=>()=>{e&&n&&s()},o=fo(this.buffer,s=>s.mark);for(const[s,a]of o.entries()){if(!s.isReady())continue;this.batch.push(()=>{e=s.unitView.getEffectiveOpacity()>0}),this.batch.push(r(()=>s.prepareRender(this.globalOptions)));let c;for(const u of a){const f=u.coords;f.equals(c)||this.batch.push(r(()=>{n=s.setViewport(f,u.clipRect)})),this.batch.push(i(u.callback)),c=u.coords}}}}class xC extends Tu{constructor(e){super(e);this.root=void 0,this.stack=[],this.lastAddition=void 0}pushView(e,n){const r=new vC(e,n);this.root?he(this.stack).addChild(r):this.root=r,this.stack.push(r)}popView(e){this.stack.pop()}getLayout(){return this.root}}class vC{constructor(e,n){this.view=e,this.coords=n,this.children=[]}addChild(e){const n=he(this.children);n&&e.view===n.view&&e.coords.equals(n.coords)||this.children.push(e)}dispatchInteractionEvent(e){if(this.coords.containsPoint(e.point.x,e.point.y)){if(this.view.handleInteractionEvent(this.coords,e,!0),e.stopped)return;if(this.children.length==0)e.target=this.view;else for(const n of this.children){if(n.dispatchInteractionEvent(e),e.target)break;if(e.stopped)return}this.view.handleInteractionEvent(this.coords,e,!1)}}}class wC extends Tu{constructor(...e){super({});this.contexts=e}pushView(e,n){for(const r of this.contexts)r.pushView(e,n)}popView(e){for(const n of this.contexts)n.popView(e)}renderMark(e,n){for(const r of this.contexts)r.renderMark(e,n)}}class EC{constructor(e,n){this.point=e,this.uiEvent=n,this.stopped=!1,this.target=void 0}stopPropagation(){this.stopped=!0}get type(){return this.uiEvent.type}}class SC{constructor(e,n){this.x=e,this.y=n}equals(e){return e?e===this||e.x===this.x&&e.y===this.y:!1}}const DC=t=>new Promise(e=>setTimeout(e,t));function gs(t){const e=t.requestAnimationFrame||window.requestAnimationFrame,n=t.signal,r=()=>new Promise((i,o)=>{if(n==null?void 0:n.aborted)return o("aborted");const s=performance.now(),a=s+(t.duration||1e3),c=typeof t.from=="number"?t.from:0,u=typeof t.to=="number"?t.to:1,f=t.easingFunction||(g=>g),l=g=>(g-s)/(a-s),h=g=>g*(u-c)+c,d=g=>Math.max(0,Math.min(1,g)),p=g=>{(n==null?void 0:n.aborted)?o("aborted"):(t.onUpdate(h(f(d(l(g))))),g<a?e(p):(t.onUpdate(h(f(1))),i()))};e(p)});return t.delay?(n==null?void 0:n.aborted)?Promise.reject("aborted"):DC(t.delay).then(r):r()}class CC{constructor(e){this._renderCallback=e,this._renderRequested=!1,this._warn=!1,this.transitions=[]}requestTransition(e){this.cancelTransition(e),this.transitions.push(e),this.requestRender()}cancelTransition(e){const n=this.transitions.indexOf(e);n>=0&&this.transitions.splice(n,1)}requestRender(){this._renderRequested?this._warn&&console.warn("Render already requested!"):(this._renderRequested=!0,window.requestAnimationFrame(e=>{this._renderRequested=!1;const n=this.transitions;this.transitions=[];let r;for(;r=n.shift();)r(e);this._renderCallback(e)}))}transition(e){return gs(T({requestAnimationFrame:n=>this.requestTransition(n)},e))}}function fg(){const t=e=>e;return t.invert=e=>e,t.copy=fg,t.invertRange=()=>{},t}class MC{constructor(e){this.genomes=new Map,this.genomeSpy=e}async initialize(e){const n=new tD(e);return this.genomes.set(n.name,n),Promise.all([...this.genomes.values()].map(r=>r.load(this.genomeSpy.spec.baseUrl)))}getGenome(e){if(!this.genomes.size)throw new Error("No genomes have been configured!");if(e){const n=this.genomes.get(e);if(!n)throw new Error(`No genome with the name ${e} has been configured!`);return n}else{if(this.genomes.size>1)throw new Error("Cannot pick a default genome! More than one have been configured!");return this.genomes.values().next().value}}}var IC="data:image/png;base64,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";const TC={thin:100,light:300,regular:400,normal:400,medium:500,bold:700,black:900};class NC{constructor(e){this._webGLHelper=e,this.fontRepository="https://raw.githubusercontent.com/etiennepinchon/aframe-fonts/master/fonts/",this._fonts=new uo([],JSON.stringify),this._metadataPromises=new Map,this._fontPromises=new Map,this._promises=[],this._defaultFontEntry={metrics:cu(Kp),texture:this._createTextureNow(IC)}}async waitUntilReady(){await Promise.all(this._promises)}getFont(e,n="normal",r="regular"){if(se(r)&&(r=TC[r.toLowerCase()],!r))throw new Error("Unknown font weight: "+r);const i={family:e,style:n,weight:r};let o=this._fonts.get(i);return o||(o={metrics:void 0,texture:void 0},this._fonts.set(i,o),this._promises.push(this._loadFontEntry(o,i))),o}async _loadFontEntry(e,n){try{const r=await this._loadMetadata(n.family),i=OC(r,n),o=this.fontRepository+hg(n.family)+"/"+i.replace(/\.\w+/,""),s=this._createTexture(o+".png"),a=this._loadFont(o+".json");e.texture=await s,e.metrics=await a}catch(r){console.log("Cannot load font. Using default.",r),e.metrics=this._defaultFontEntry.metrics,e.texture=this._defaultFontEntry.texture}}_loadFont(e){let n=this._fontPromises.get(e);return n||(n=fetch(e).then(r=>{if(!r.ok)throw new Error("Could not load font: "+r.status);return r}).then(r=>r.json()).then(r=>cu(r)),this._fontPromises.set(e,n)),n}_loadMetadata(e){const n=hg(e);let r=this._metadataPromises.get(n);return r||(r=fetch(this.fontRepository+n+"/METADATA.pb").then(i=>{if(!i.ok)throw new Error("Could not load font metadata: "+i.status);return i}).then(i=>i.text()).then(i=>LC(i)).catch(i=>{console.warn(i)}),this._metadataPromises.set(n,r)),r}getDefaultFont(){return this._defaultFontEntry}_createTexture(e){const n=this._webGLHelper.gl;return new Promise((r,i)=>{gi(n,{src:e,min:n.LINEAR},(o,s,a)=>{o?i(o):r(s)})})}_createTextureNow(e){const n=this._webGLHelper.gl;let r;const i=new Promise((o,s)=>{r=gi(n,{src:e,min:n.LINEAR},(a,c,u)=>{a?s(a):o(c)})});return this._promises.push(i),r}}function hg(t){return t.toLowerCase().replaceAll(/[^\w]/g,"")}function LC(t){const e=t.split(`
|
1552
|
+
`),n=[];let r;for(const i of e)if(i.startsWith("fonts {")&&(r={name:void 0,style:void 0,weight:void 0,filename:void 0,post_script_name:void 0,full_name:void 0,copyright:void 0}),i.startsWith("}")&&(n.push(r),r=void 0),r){let o=i.match(/^\s*([A-Za-z_]+):[ ]?"(.*)"$/);if(o){const s=o[1];r[s]=o[2]}if(o=i.match(/^\s*([A-Za-z_]+):[ ]?(\d+)$/),o){const s=o[1];r[s]=+o[2]}}return n}function OC(t,e){let n,r=Number.POSITIVE_INFINITY;for(const i of t)if(e.family.localeCompare(i.name,void 0,{sensitivity:"accent"})==0&&e.style==i.style){const o=Math.abs(e.weight-i.weight);o<r&&(r=o,n=i)}return n==null?void 0:n.filename}function kC(t,e){const n=[];let r;for(const i of t.split(`
|
1553
|
+
`))if(i.startsWith(">"))r={identifier:i.match(/>(\S+)/)[1],sequence:""},n.push(r);else if(r)r.sequence+=i.trim();else throw new Error("Invalid fasta file!");return n}class BC{constructor(e,n){this.animator=e,this.disabled=!!n,this.damping=.015,this.acceleration=.3,this.accelerationThreshold=100,this.lowerLimit=.5,this.loop=!1,this.momentum=0,this.timestamp=0,this.callback=null,this._transitionCallback=this.animate.bind(this),this.clear()}clear(){this.momentum=0,this.timestamp=null,this.loop=null,this.callback=null}cancel(){this.loop&&(this.animator.cancelTransition(this._transitionCallback),this.clear())}setMomentum(e,n){if(this.disabled){n(e);return}e*this.momentum<0?this.momentum=0:Math.abs(e)>this.accelerationThreshold?this.momentum=k1([this.momentum,e],this.acceleration):this.momentum=e,this.callback=n,this.loop||this.animate()}animate(e){this.callback(this.momentum);const n=e-this.timestamp||0;this.timestamp=e;const r=Math.abs(this.momentum);this.momentum=Math.sign(this.momentum)*Math.max(0,r-((r*this.damping)**1.5+.04)*n),Math.abs(this.momentum)>this.lowerLimit?(this.loop=!0,this.animator.requestTransition(this._transitionCallback)):this.clear()}}function FC(t){const e={},n=["string","number","boolean"],r=["wheelDelta","wheelDeltaX","wheelDeltaY"];for(const i in t){const o=i;!r.includes(i)&&n.includes(typeof t[o])&&(e[o]=t[o])}return e}function Nu(t,e,n=!0){let r,i=s=>{};return function(...a){return new Promise((c,u)=>{const f=()=>{clearTimeout(r),i=l=>{},c(t(...a))};n&&i("debounced"),clearTimeout(r),i=u,r=setTimeout(f,e)})}}const dg=new Map;async function PC(t,e,n){var o;const r=t.symbol;let i=(o=dg.get(r))!=null?o:await UC(t.symbol);return i?(dg.set(r,i),I`<div class="title"><strong>${i.name}</strong> ${i.description}</div><p class="summary">${i.summary}</p><p class="source">Source: NCBI RefSeq Gene</p>`):null}async function zC(t){console.log("Searching: "+t);const e={mode:"cors"},r=(await fetch(`https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=gene&term=${t}[GENE]&sort=relevance&retmode=json`,e).then(i=>i.json())).esearchresult.idlist[0];return r?(await fetch(`https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=gene&id=${r}&retmode=json`,e).then(s=>s.json())).result[r]:null}const RC=Nu(zC,500);function UC(t){return RC(t)}const jC=Ie(".4~r"),GC=Ie(".4~e");function pg(t){return t===null?I`<span class="na">NA</span>`:se(t)?t.substring(0,30):Number.isInteger(t)?""+t:oe(t)?Math.abs(t)>Math.pow(10,8)||Math.abs(t)<Math.pow(10,-8)?GC(t):jC(t):js(t)?t?"True":"False":"?"+typeof t+" "+t}async function HC(t,e,n){const r=(s,a)=>{var c;for(const[u,f]of Object.entries(e.encoders))if((c=f==null?void 0:f.accessor)==null?void 0:c.fields.includes(s))switch(u){case"color":case"fill":case"stroke":return I`<span class="color-legend" style="${`background-color: ${f(a)}`}"></span>`}return""},i=I`<table class="attributes">${Object.entries(t).filter(([s,a])=>!s.startsWith("_")).map(([s,a])=>I`<tr><th>${s}</th><td>${pg(a)} ${r(s,t)}</td></tr>`)}</table>`,o=e.unitView.spec.title?I`<div class="title"><strong>${e.unitView.spec.title}</strong></div>`:"";return I`${o}${i}`}_("index",Ma,["continuous"]),_("locus",S2,["continuous"]),_("null",fg,[]),Lf("fasta",kC);class gg{constructor(e,n,r={}){var i;this.container=e,this.spec=n,this.accessorFactory=new gv,this.viewFactory=new gD,this.namedDataProviders=[],this.animator=new CC(()=>this.renderAll()),this.genomeStore=void 0,this.viewVisibilityPredicate=o=>o.isVisibleInSpec(),this._renderingContext=void 0,this._pickingContext=void 0,this._dirtyPickingBuffer=!1,this._currentHover=void 0,this._wheelInertia=new BC(this.animator),this._keyboardListeners=new Map,this._eventListeners=new Map,this.tooltipHandlers=T({default:HC,refseqgene:PC},(i=r.tooltipHandlers)!=null?i:{}),this.viewRoot=void 0}registerNamedDataProvider(e){this.namedDataProviders.unshift(e)}getNamedData(e){for(const n of this.namedDataProviders){const r=n(e);if(r)return r}}broadcast(e,n){const r={type:e,payload:n};this.viewRoot.visit(i=>i.handleBroadcast(r))}_prepareContainer(){this.container.classList.add("genome-spy"),this.container.classList.add("loading"),this._glHelper=new ZE(this.container,()=>{if(this.viewRoot){const e=this.viewRoot.getSize(),n=r=>r.grow>0?void 0:r.px;return{width:n(e.width),height:n(e.height)}}}),this.loadingMessageElement=document.createElement("div"),this.loadingMessageElement.className="loading-message",this.loadingMessageElement.innerHTML='<div class="message">Loading<span class="ellipsis">...</span></div>',this.container.appendChild(this.loadingMessageElement),this.tooltip=new Zb(this.container),this.loadingMessageElement.querySelector(".message").addEventListener("transitionend",()=>{this.loadingMessageElement.style.display="none"})}destroy(){this.container.classList.remove("genome-spy"),this.container.classList.remove("loading");for(const[e,n]of this._keyboardListeners)for(const r of n)document.removeEventListener(e,r);for(this._glHelper.finalize();this.container.firstChild;)this.container.firstChild.remove()}async _prepareViewsAndData(){this.spec.genome&&(this.genomeStore=new MC(this),await this.genomeStore.initialize(this.spec.genome));const e=this,n={dataFlow:new og,accessorFactory:this.accessorFactory,glHelper:this._glHelper,animator:this.animator,genomeStore:this.genomeStore,fontManager:new NC(this._glHelper),requestLayoutReflow:()=>{},updateTooltip:this.updateTooltip.bind(this),getNamedData:this.getNamedData.bind(this),getCurrentHover:()=>this._currentHover,addKeyboardListener:(a,c)=>{document.addEventListener(a,c);let u=this._keyboardListeners.get(a);u||(u=[],this._keyboardListeners.set(a,u)),u.push(c)},isViewVisible:e.viewVisibilityPredicate,isViewSpec:a=>e.viewFactory.isViewSpec(a),createView:function(a,c,u){return e.viewFactory.createView(a,n,c,u)}},r=this.spec;r.datasets&&this.registerNamedDataProvider(a=>r.datasets[a]),this.viewRoot=n.createView(r,null,"viewRoot"),await ug(this.viewRoot),cg(this.viewRoot),dC(this.viewRoot),this.viewRoot=pC(this.viewRoot),this._glHelper.invalidateSize();const i=[];this.viewRoot.visit(a=>{a instanceof Oe&&i.push(a)});const o=sg(this.viewRoot,n.dataFlow);fC(o),this.broadcast("dataFlowBuilt",o),o.dataSources.forEach(a=>console.log(a.subtreeToString())),i.forEach(a=>a.mark.initializeEncoders());const s=Promise.all(i.map(a=>a.mark.initializeGraphics()));for(const a of i)o.addObserver(c=>{a.mark.initializeData(),a.mark.updateGraphicsData()},a);await n.fontManager.waitUntilReady(),o.initialize(),await Promise.all(o.dataSources.map(a=>a.load())),this.viewRoot.visit(a=>{for(const c of Object.values(a.resolutions.scale))c.reconfigure()}),this.broadcast("dataLoaded"),await s,this.viewRoot.visit(a=>{for(const c of Object.values(a.resolutions.scale))this._glHelper.createRangeTexture(c)});for(const a of i)a.mark.finalizeGraphicsInitialization();n.requestLayoutReflow=this.computeLayout.bind(this),this.viewRoot.visit(a=>Ei(a,"size")),this._glHelper.invalidateSize()}async launch(){try{return this._prepareContainer(),await this._prepareViewsAndData(),this.registerMouseEvents(),this.computeLayout(),this.animator.requestRender(),this._glHelper.addEventListener("resize",()=>{this.computeLayout(),this.renderAll()}),!0}catch(e){const n=`${e.view?`At "${e.view.getPathString()}": `:""}${e.toString()}`;return console.error(e.stack),QC(this.container,n),!1}finally{this.container.classList.remove("loading"),window.setTimeout(()=>{this.loadingMessageElement.style.display="none"},2e3)}}registerMouseEvents(){const e=this._glHelper.canvas,n=r=>{var i;if(this.layout&&r instanceof MouseEvent){r.type=="mousemove"&&(this.tooltip.handleMouseMove(r),this._tooltipUpdateRequested=!1,r.buttons==0&&this.renderPickingFramebuffer());const o=e.getBoundingClientRect(),s=new SC(r.clientX-o.left-e.clientLeft,r.clientY-o.top-e.clientTop),a=c=>{this.layout.dispatchInteractionEvent(new EC(s,c)),this._tooltipUpdateRequested||this.tooltip.clear()};if(r.type!="wheel"&&this._wheelInertia.cancel(),r.type=="mousemove")this._handlePicking(s.x,s.y);else if(r.type=="mousedown"||r.type=="mouseup")this.renderPickingFramebuffer();else if(r.type=="wheel"){this._tooltipUpdateRequested=!1;const c=r;if(Math.abs(c.deltaX)>Math.abs(c.deltaY))this._currentHover=null,this._wheelInertia.cancel();else{const u=FC(c);this._wheelInertia.setMomentum(c.deltaY*(c.deltaMode?80:1),f=>{const l=new WheelEvent("wheel",U(T({},u),{deltaMode:0,deltaX:0,deltaY:f}));a(l)}),c.preventDefault();return}}if(r.type=="click"){const c=this._currentHover?{type:r.type,viewPath:[...this._currentHover.mark.unitView.getAncestors()].map(u=>u.name).reverse(),datum:this._currentHover.datum}:{type:r.type,viewPath:null,datum:null};(i=this._eventListeners.get("click"))==null||i.forEach(u=>u(c))}a(r)}};["mousedown","mouseup","wheel","click","mousemove","gesturechange","contextmenu"].forEach(r=>e.addEventListener(r,n)),e.addEventListener("mousedown",()=>{document.addEventListener("mouseup",()=>this.tooltip.popEnabledState(),{once:!0}),this.tooltip.pushEnabledState(!1)}),e.addEventListener("dragstart",r=>r.stopPropagation())}_handlePicking(e,n){var o;const r=this._glHelper.readPickingPixel(e,n),i=r[0]|r[1]<<8|r[2]<<16;if(i==0){this._currentHover=null;return}if(i!==((o=this._currentHover)==null?void 0:o.uniqueId)&&(this._currentHover=null),this._currentHover||this.viewRoot.visit(s=>{if(s instanceof Oe){if(s.mark.isPickingParticipant()){const a=s.mark.encoders.uniqueId.accessor;s.getCollector().visitData(c=>{a(c)==i&&(this._currentHover={mark:s.mark,datum:c,uniqueId:i})})}if(this._currentHover)return Mn}}),this._currentHover){const s=this._currentHover.mark;this.updateTooltip(this._currentHover.datum,async a=>{var u;if(!s.isPickingParticipant())return;const c=s.properties.tooltip;if(c!==null){const f=(u=c==null?void 0:c.handler)!=null?u:"default",l=this.tooltipHandlers[f];if(!l)throw new Error("No such tooltip handler: "+f);return l(a,s,c==null?void 0:c.params)}})}}updateTooltip(e,n){if(!this._tooltipUpdateRequested||!e)this.tooltip.updateWithDatum(e,n),this._tooltipUpdateRequested=!0;else throw new Error("Tooltip has already been updated! Duplicate event handler?")}computeLayout(){const e=this.viewRoot;if(!e)return;this.broadcast("layout");const n=this._glHelper.getLogicalCanvasSize();if(isNaN(n.width)||isNaN(n.height)){console.log(`NaN in canvas size: ${n.width}x${n.height}. Skipping computeLayout().`);return}this._renderingContext=new lg({picking:!1},this._glHelper),this._pickingContext=new lg({picking:!0},this._glHelper);const r=new xC({});e.render(new wC(this._renderingContext,this._pickingContext,r),mt.create(0,0,n.width,n.height)),this.layout=r.getLayout(),this.broadcast("layoutComputed")}renderAll(){var e;(e=this._renderingContext)==null||e.renderDeferred(),this._dirtyPickingBuffer=!0}renderPickingFramebuffer(){!this._dirtyPickingBuffer||(this._pickingContext.renderDeferred(),this._dirtyPickingBuffer=!1)}getSearchableViews(){const e=[];return this.viewRoot.visit(n=>{n instanceof Oe&&n.getAccessor("search")&&e.push(n)}),e}getNamedScaleResolutions(){const e=new Map;return this.viewRoot.visit(n=>{for(const r of Object.values(n.resolutions.scale))r.name&&e.set(r.name,r)}),e}}function QC(t,e){const n=document.createElement("div");n.className="message-box";const r=document.createElement("div");r.textContent=e,n.appendChild(r),t.appendChild(n)}var GI="",VC="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+Cjxzdmcgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDY0IDY0IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbDpzcGFjZT0icHJlc2VydmUiIHhtbG5zOnNlcmlmPSJodHRwOi8vd3d3LnNlcmlmLmNvbS8iIHN0eWxlPSJmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MS41OyI+CiAgICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgwLjEwMjIxLDAuMDA2ODM4MjUsLTAuMDA2NzEzNiwwLjEwMDM0NywtOC4wMzQyNCwtMTMuMjIyMikiPgogICAgICAgIDxwYXRoIGQ9Ik0yMDguNjI5LDU0OC4xN0MyMDguNjI5LDU0OC4xNyAyMTkuNzY4LDU5NC4zODkgMjM5LjgxNCw2MTkuMjIyQzI1OS44Niw2NDQuMDU1IDMxOS4xMTksNjgwLjgzMSAzMTkuMTE5LDY4MC44MzFDMzE5LjExOSw2ODAuODMxIDM4NS41NTcsNjIyLjkxNSA0MzcuODcsNDk4LjM0NkM0MzcuODcsNDk4LjM0NiA0NTYuMDIxLDQ5OS4yMzYgNDczLjgwOCw0ODYuNDQ2QzQ5MS41OTQsNDczLjY1NiA0OTAuMjM5LDQ3OC41MzQgNDk0Ljg4Myw0NjEuNjJDNDk0Ljg4Myw0NjEuNjIgNTUxLjg0OCw0NjcuOTM3IDYyNS44MjYsNDUxLjg2M0M2NjcuNjM0LDQ0Mi43NzggNzEwLjIzOCw0MjUuNjQ5IDc0Ny4zODIsMzkzLjE0MkM3NDcuMzgyLDM5My4xNDIgNzIxLjk5MiwzNjAuMjQ0IDY4OS40MjIsMjkxLjQ1QzY3Ny4wMjksMjY1LjI3NSA2NDcuNTE4LDI1Ny4wOTggNTkwLjc0NywyMDMuMzA5TDQzOC4wODMsMzkxLjI3M0wyMDguNjI5LDU0OC4xN1oiIHN0eWxlPSJmaWxsLW9wYWNpdHk6MC4xMTsiLz4KICAgIDwvZz4KICAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KDAuMDgxOTg1LC0wLjA1ODI0OTMsMC4wNTgyNDkzLDAuMDgxOTg1LC00MC40NzU0LDM0Ljc2NjgpIj4KICAgICAgICA8cGF0aCBkPSJNNTYxLjU4OCwzNDkuMTU1QzU2MS41ODgsMzQ5LjE1NSA1MTYuMjk3LDI3MS4zNDEgMzI4Ljg0MSwyNTIuMDQ0QzMyOC44NDEsMjUyLjA0NCAzMDIuMzQyLDMyNS4xODkgMzA3LjY4NiwzNjguMDU2QzMxMy4wMzEsNDEwLjkyMiAzMDMuMDAxLDQ1Ni4xNDcgMzI5LjEzMiw1MDEuMTc0QzMyOS4xMzIsNTAxLjE3NCA0NDMuMTE0LDUwNi43NDMgNTU0LjY0OSw0MjguNDY5TDYyOS4yMDQsNDMyLjExMkM2MjkuMjA0LDQzMi4xMTIgNjczLjc1NSw1MzQuMzUxIDg1Ni45NjQsNTU0LjM3NUM4NTYuOTY0LDU1NC4zNzUgODg2LjcxNyw0OTEuNzY4IDg3OS4xOTMsNDE3LjQ3OEM4NzEuMjExLDMzOC42NzMgODcxLjcxNiwyOTMuNDQzIDg3MS43MTYsMjkzLjQ0M0M4NzEuNzE2LDI5My40NDMgNzc1LjQ4NSwyODMuOTI4IDYzNS40MTgsMzYxLjc5NUw1NjEuNTg4LDM0OS4xNTVaIiBzdHlsZT0iZmlsbDpyZ2IoMTI3LDE4NywyMjEpOyIvPgogICAgICAgIDxjbGlwUGF0aCBpZD0iX2NsaXAxIj4KICAgICAgICAgICAgPHBhdGggZD0iTTU2MS41ODgsMzQ5LjE1NUM1NjEuNTg4LDM0OS4xNTUgNTE2LjI5NywyNzEuMzQxIDMyOC44NDEsMjUyLjA0NEMzMjguODQxLDI1Mi4wNDQgMzAyLjM0MiwzMjUuMTg5IDMwNy42ODYsMzY4LjA1NkMzMTMuMDMxLDQxMC45MjIgMzAzLjAwMSw0NTYuMTQ3IDMyOS4xMzIsNTAxLjE3NEMzMjkuMTMyLDUwMS4xNzQgNDQzLjExNCw1MDYuNzQzIDU1NC42NDksNDI4LjQ2OUw2MjkuMjA0LDQzMi4xMTJDNjI5LjIwNCw0MzIuMTEyIDY3My43NTUsNTM0LjM1MSA4NTYuOTY0LDU1NC4zNzVDODU2Ljk2NCw1NTQuMzc1IDg4Ni43MTcsNDkxLjc2OCA4NzkuMTkzLDQxNy40NzhDODcxLjIxMSwzMzguNjczIDg3MS43MTYsMjkzLjQ0MyA4NzEuNzE2LDI5My40NDNDODcxLjcxNiwyOTMuNDQzIDc3NS40ODUsMjgzLjkyOCA2MzUuNDE4LDM2MS43OTVMNTYxLjU4OCwzNDkuMTU1WiIvPgogICAgICAgIDwvY2xpcFBhdGg+CiAgICAgICAgPGcgY2xpcC1wYXRoPSJ1cmwoI19jbGlwMSkiPgogICAgICAgICAgICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgwLjc1ODYzNywwLjQ1ODkyLC0wLjQ1ODkyLDAuNzU4NjM3LDQyNS42MzUsLTEyMS4yMTMpIj4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0zODYuODczLDM5Ny4yNDFDMzcxLjM0NSwzODMuNjI4IDMzNS4xMzgsMzc0Ljc4MiAyOTAuNjQ0LDM4MC41NDNDMjQ2LjE0OSwzODYuMzA0IDE5Ni44MjcsNDAyLjI2NiAxNzguODAyLDQxMi4wNjVDMTY4LjIwMiw0MTcuODI4IDE1MS40OTQsNDI5LjM1NCAxNTAuNjgyLDQzOS4zMzRDMTQ5LjUyNyw0NTMuNTI4IDE1My41OTMsNDc3LjA2NiAxNjUuNjI1LDQ5MS4yODRDMTcxLjY5LDQ5OC40NTEgMTc5LjkyNyw1MDMuNDQ1IDE5My44MzgsNTA1LjQyM0MyMTEuNzAxLDUwNy45NjMgMjUyLjcxNCw0ODAuNjI3IDI3NS4zOTksNDY5LjIyQzI5OS4zMzIsNDU3LjE4NyAzMTMuOTgxLDQ1NC41NiAzMzguMzg2LDQ0Ny4wMTRDMzM4LjM4Niw0NDcuMDE0IDI5MS4zNDYsNDc4LjU4NyAyNzAuMjA1LDQ5NC4zOTNDMjM5LjYxLDUxNy4yNjggMjE4LjU3NSw1MjIuNDQ0IDIxMi44NTksNTM5Ljg5N0MyMDkuNzY2LDU0OS4zNCAyMTIuMjM3LDU2Ny43NjcgMjIwLjM1NCw1NzcuNTM4QzIyOS40MjcsNTg4LjQ2MSAyMzMuMTk3LDU5NS4wNjkgMjU0LjU5MSw1OTcuNjI0QzI2Ny4zMDMsNTk5LjE0MyAyNzYuNjg1LDU5OC44MDIgMzE0LjM3LDU2OC45NUMzMzYuMDYsNTUxLjc2NyAzNzAuMjk3LDUwOS44MTcgMzgxLjQxMiw0OTQuNjE2QzM5Ny41ODEsNDcyLjUwNiA0MDUuMTY1LDQ1MS40NjIgNDAyLjY1Niw0MzUuMDRDMzk5LjA0NSw0MTEuMzkxIDM5NC4yNTksNDAzLjcxNiAzODYuODczLDM5Ny4yNDFaIiBzdHlsZT0iZmlsbDp3aGl0ZTsiLz4KICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8ZyB0cmFuc2Zvcm09Im1hdHJpeCgwLjc1MjE0NSwwLjQ1NDk5MywtMC40NTQ5OTMsMC43NTIxNDUsNDY4LjM2LC0xMDguMjkzKSI+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNDg0LjczMywzNzguOTM0QzQ3OS4zMywzNjcuODg2IDQ2Ny4wOTIsMzUwLjQ1MiA0ODMuODg2LDMyNS4yMDVDNTAyLjE3MiwyOTcuNzE3IDUxNC44OTgsMjgwLjkzOCA1MjguMTE3LDI2NC42MzJDNTQxLjMzNSwyNDguMzI2IDU3NC43OTMsMjE4LjQ0NyA1ODcuNzM5LDIxMi41M0M2MDAuNjg0LDIwNi42MTMgNjIxLjAyNiwyMDMuODUyIDYzMS44ODksMjEyLjg0MUM2NDIuODc0LDIyMS45MyA2NDguNDE2LDIzMy4zNzcgNjU0LjkyLDI0NS40NzhDNjYyLjMzMSwyNTkuMjY3IDY2Ny4zMTgsMjc0LjgwOCA2NTYuNTE4LDI4OC4yNzhDNjQxLjA5MywzMDcuNTE1IDYyMi4yNDIsMzA1LjI5NCA1OTQuOTEyLDMxOS44NDRDNTY3LjI0NCwzMzQuNTczIDU1Mi42NDQsMzQyLjk0MyA1MzkuMjQ0LDM1NS43MDNDNTM5LjI0NCwzNTUuNzAzIDU5MS40MzEsMzM0LjExNCA2MjEuMjI5LDMyNC40NzRDNjUxLjAyNywzMTQuODMzIDY4MC45NTIsMzA0LjQ2MSA2OTUuOTk1LDMxNS45NzVDNzExLjAzOCwzMjcuNDkgNzEwLjYzMSwzMzEuNDYzIDcxNC40MjUsMzQ3LjE4N0M3MTkuMTA3LDM2Ni41OSA3MDcuMjMxLDM4NS4xNjUgNjk0LjI5NCwzOTUuODM4QzY4MS4zNTYsNDA2LjUxIDY1OS45NTgsNDExLjc1NiA2MzYuODc1LDQxNi44NTJDNjA2LjQyLDQyMy41NzYgNTQwLjI3OCw0MzEuOTE3IDUxMi44MTksNDE5LjM2NkM0ODUuMzYxLDQwNi44MTUgNDg4LjQ4OCwzODYuNjEzIDQ4NC43MzMsMzc4LjkzNFoiIHN0eWxlPSJmaWxsOndoaXRlOyIvPgogICAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgICAgIDxwYXRoIGQ9Ik01NjEuNTg4LDM0OS4xNTVDNTYxLjU4OCwzNDkuMTU1IDUxNi4yOTcsMjcxLjM0MSAzMjguODQxLDI1Mi4wNDRDMzI4Ljg0MSwyNTIuMDQ0IDMwMi4zNDIsMzI1LjE4OSAzMDcuNjg2LDM2OC4wNTZDMzEzLjAzMSw0MTAuOTIyIDMwMy4wMDEsNDU2LjE0NyAzMjkuMTMyLDUwMS4xNzRDMzI5LjEzMiw1MDEuMTc0IDQ0My4xMTQsNTA2Ljc0MyA1NTQuNjQ5LDQyOC40NjlMNjI5LjIwNCw0MzIuMTEyQzYyOS4yMDQsNDMyLjExMiA2NzMuNzU1LDUzNC4zNTEgODU2Ljk2NCw1NTQuMzc1Qzg1Ni45NjQsNTU0LjM3NSA4ODYuNzE3LDQ5MS43NjggODc5LjE5Myw0MTcuNDc4Qzg3MS4yMTEsMzM4LjY3MyA4NzEuNzE2LDI5My40NDMgODcxLjcxNiwyOTMuNDQzQzg3MS43MTYsMjkzLjQ0MyA3NzUuNDg1LDI4My45MjggNjM1LjQxOCwzNjEuNzk1TDU2MS41ODgsMzQ5LjE1NVoiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOmJsYWNrO3N0cm9rZS13aWR0aDoxNi41N3B4OyIvPgogICAgPC9nPgogICAgPGcgdHJhbnNmb3JtPSJtYXRyaXgoMC4xMDAyOTgsLTAuMDA3NDA0ODgsMC4wMDc0MDQ4OCwwLjEwMDI5OCwtMTUuNzQ1NywtNS4xNzUyOCkiPgogICAgICAgIDxwYXRoIGQ9Ik0zODQuOTE2LDM4NS40NTlDMzg0LjkxNiwzODUuNDU5IDQzMC43ODEsMzQ3Ljg2OCA0NTAuMDI3LDM1MC4wOTNDNDcxLjY4NSwzNTIuNTk2IDQ5MC40OSw0MDcuNzQ3IDQ5MC4yMDgsNDI0LjQxNkM0ODkuOTI3LDQ0MS4wODUgNDQyLjk0OCw0NjkuODY2IDQyMi41MzcsNDY2LjI0QzQyMi41MzcsNDY2LjI0IDQyNS41MjUsNDQyLjEyOSA0MTIuMTE0LDQxMy4zMzVDMzk4LjcwMiwzODQuNTQgMzg0LjkxNiwzODUuNDU5IDM4NC45MTYsMzg1LjQ1OVoiIHN0eWxlPSJmaWxsOnJnYigxMjcsMTg3LDIyMSk7Ii8+CiAgICAgICAgPGNsaXBQYXRoIGlkPSJfY2xpcDIiPgogICAgICAgICAgICA8cGF0aCBkPSJNMzg0LjkxNiwzODUuNDU5QzM4NC45MTYsMzg1LjQ1OSA0MzAuNzgxLDM0Ny44NjggNDUwLjAyNywzNTAuMDkzQzQ3MS42ODUsMzUyLjU5NiA0OTAuNDksNDA3Ljc0NyA0OTAuMjA4LDQyNC40MTZDNDg5LjkyNyw0NDEuMDg1IDQ0Mi45NDgsNDY5Ljg2NiA0MjIuNTM3LDQ2Ni4yNEM0MjIuNTM3LDQ2Ni4yNCA0MjUuNTI1LDQ0Mi4xMjkgNDEyLjExNCw0MTMuMzM1QzM5OC43MDIsMzg0LjU0IDM4NC45MTYsMzg1LjQ1OSAzODQuOTE2LDM4NS40NTlaIi8+CiAgICAgICAgPC9jbGlwUGF0aD4KICAgICAgICA8ZyBjbGlwLXBhdGg9InVybCgjX2NsaXAyKSI+CiAgICAgICAgICAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KDAuOTA5MDY5LDMuNjc2NDFlLTE3LC0zLjc5ODE4ZS0xNywwLjg1ODUyLDM3LjA1MSw1Mi4xODI5KSI+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNNDEzLjI4Miw0MDIuNjk3QzQzMC43Nyw0MjEuNTggNDIzLjMwNyw0NDguNDI2IDQ0MS42ODMsNDQ2LjEzN0M0NjMuNDA5LDQ0My40MzEgNDcyLjYwNCw0MzAuMzU2IDQ3My4zMTYsNDEzLjQwMkM0NzQuMDI4LDM5Ni40NDggNDcyLjI0NSwzOTMuOTExIDQ2Ni4xNzIsMzc1LjMyMUM0NjAuMDk5LDM1Ni43MzEgNDQ3Ljk1MywzNTIuMTc2IDQyMi44NDIsMzU3LjE3OUM0MDEuOTU3LDM2MS4zMzkgNDA1LjAzOSwzNjAuMjE1IDM5OC43MzUsMzY3LjIyOEMzOTIuNDMsMzc0LjI0MiAzODQuMzE1LDM5My4xODIgMzg0LjMxNSwzOTMuMTgyQzM4NC4zMTUsMzkzLjE4MiAzOTIuNzE1LDM4MC40OTIgNDEzLjI4Miw0MDIuNjk3WiIgc3R5bGU9ImZpbGw6d2hpdGU7Ii8+CiAgICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICAgICAgPHBhdGggZD0iTTM4NC45MTYsMzg1LjQ1OUMzODQuOTE2LDM4NS40NTkgNDMwLjc4MSwzNDcuODY4IDQ1MC4wMjcsMzUwLjA5M0M0NzEuNjg1LDM1Mi41OTYgNDkwLjQ5LDQwNy43NDcgNDkwLjIwOCw0MjQuNDE2QzQ4OS45MjcsNDQxLjA4NSA0NDIuOTQ4LDQ2OS44NjYgNDIyLjUzNyw0NjYuMjRDNDIyLjUzNyw0NjYuMjQgNDI1LjUyNSw0NDIuMTI5IDQxMi4xMTQsNDEzLjMzNUMzOTguNzAyLDM4NC41NCAzODQuOTE2LDM4NS40NTkgMzg0LjkxNiwzODUuNDU5WiIgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6YmxhY2s7c3Ryb2tlLXdpZHRoOjE2LjU3cHg7Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=";/**
|
1554
|
+
* @license
|
1555
|
+
* Copyright 2019 Google LLC
|
1556
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
1557
|
+
*/const Lu=window.ShadowRoot&&(window.ShadyCSS===void 0||window.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,mg=Symbol(),yg=new Map;class _C{constructor(e,n){if(this._$cssResult$=!0,n!==mg)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e}get styleSheet(){let e=yg.get(this.cssText);return Lu&&e===void 0&&(yg.set(this.cssText,e=new CSSStyleSheet),e.replaceSync(this.cssText)),e}toString(){return this.cssText}}const YC=t=>new _C(typeof t=="string"?t:t+"",mg),WC=(t,e)=>{Lu?t.adoptedStyleSheets=e.map(n=>n instanceof CSSStyleSheet?n:n.styleSheet):e.forEach(n=>{const r=document.createElement("style"),i=window.litNonce;i!==void 0&&r.setAttribute("nonce",i),r.textContent=n.cssText,t.appendChild(r)})},Ag=Lu?t=>t:t=>t instanceof CSSStyleSheet?(e=>{let n="";for(const r of e.cssRules)n+=r.cssText;return YC(n)})(t):t;/**
|
1558
|
+
* @license
|
1559
|
+
* Copyright 2017 Google LLC
|
1560
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
1561
|
+
*/var Ou;const bg=window.reactiveElementPolyfillSupport,ku={toAttribute(t,e){switch(e){case Boolean:t=t?"":null;break;case Object:case Array:t=t==null?t:JSON.stringify(t)}return t},fromAttribute(t,e){let n=t;switch(e){case Boolean:n=t!==null;break;case Number:n=t===null?null:Number(t);break;case Object:case Array:try{n=JSON.parse(t)}catch{n=null}}return n}},xg=(t,e)=>e!==t&&(e==e||t==t),Bu={attribute:!0,type:String,converter:ku,reflect:!1,hasChanged:xg};class dr extends HTMLElement{constructor(){super(),this._$Et=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Ei=null,this.o()}static addInitializer(e){var n;(n=this.l)!==null&&n!==void 0||(this.l=[]),this.l.push(e)}static get observedAttributes(){this.finalize();const e=[];return this.elementProperties.forEach((n,r)=>{const i=this._$Eh(r,n);i!==void 0&&(this._$Eu.set(i,r),e.push(i))}),e}static createProperty(e,n=Bu){if(n.state&&(n.attribute=!1),this.finalize(),this.elementProperties.set(e,n),!n.noAccessor&&!this.prototype.hasOwnProperty(e)){const r=typeof e=="symbol"?Symbol():"__"+e,i=this.getPropertyDescriptor(e,r,n);i!==void 0&&Object.defineProperty(this.prototype,e,i)}}static getPropertyDescriptor(e,n,r){return{get(){return this[n]},set(i){const o=this[e];this[n]=i,this.requestUpdate(e,o,r)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)||Bu}static finalize(){if(this.hasOwnProperty("finalized"))return!1;this.finalized=!0;const e=Object.getPrototypeOf(this);if(e.finalize(),this.elementProperties=new Map(e.elementProperties),this._$Eu=new Map,this.hasOwnProperty("properties")){const n=this.properties,r=[...Object.getOwnPropertyNames(n),...Object.getOwnPropertySymbols(n)];for(const i of r)this.createProperty(i,n[i])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(e){const n=[];if(Array.isArray(e)){const r=new Set(e.flat(1/0).reverse());for(const i of r)n.unshift(Ag(i))}else e!==void 0&&n.push(Ag(e));return n}static _$Eh(e,n){const r=n.attribute;return r===!1?void 0:typeof r=="string"?r:typeof e=="string"?e.toLowerCase():void 0}o(){var e;this._$Ev=new Promise(n=>this.enableUpdating=n),this._$AL=new Map,this._$Ep(),this.requestUpdate(),(e=this.constructor.l)===null||e===void 0||e.forEach(n=>n(this))}addController(e){var n,r;((n=this._$Em)!==null&&n!==void 0?n:this._$Em=[]).push(e),this.renderRoot!==void 0&&this.isConnected&&((r=e.hostConnected)===null||r===void 0||r.call(e))}removeController(e){var n;(n=this._$Em)===null||n===void 0||n.splice(this._$Em.indexOf(e)>>>0,1)}_$Ep(){this.constructor.elementProperties.forEach((e,n)=>{this.hasOwnProperty(n)&&(this._$Et.set(n,this[n]),delete this[n])})}createRenderRoot(){var e;const n=(e=this.shadowRoot)!==null&&e!==void 0?e:this.attachShadow(this.constructor.shadowRootOptions);return WC(n,this.constructor.elementStyles),n}connectedCallback(){var e;this.renderRoot===void 0&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),(e=this._$Em)===null||e===void 0||e.forEach(n=>{var r;return(r=n.hostConnected)===null||r===void 0?void 0:r.call(n)})}enableUpdating(e){}disconnectedCallback(){var e;(e=this._$Em)===null||e===void 0||e.forEach(n=>{var r;return(r=n.hostDisconnected)===null||r===void 0?void 0:r.call(n)})}attributeChangedCallback(e,n,r){this._$AK(e,r)}_$Eg(e,n,r=Bu){var i,o;const s=this.constructor._$Eh(e,r);if(s!==void 0&&r.reflect===!0){const a=((o=(i=r.converter)===null||i===void 0?void 0:i.toAttribute)!==null&&o!==void 0?o:ku.toAttribute)(n,r.type);this._$Ei=e,a==null?this.removeAttribute(s):this.setAttribute(s,a),this._$Ei=null}}_$AK(e,n){var r,i,o;const s=this.constructor,a=s._$Eu.get(e);if(a!==void 0&&this._$Ei!==a){const c=s.getPropertyOptions(a),u=c.converter,f=(o=(i=(r=u)===null||r===void 0?void 0:r.fromAttribute)!==null&&i!==void 0?i:typeof u=="function"?u:null)!==null&&o!==void 0?o:ku.fromAttribute;this._$Ei=a,this[a]=f(n,c.type),this._$Ei=null}}requestUpdate(e,n,r){let i=!0;e!==void 0&&(((r=r||this.constructor.getPropertyOptions(e)).hasChanged||xg)(this[e],n)?(this._$AL.has(e)||this._$AL.set(e,n),r.reflect===!0&&this._$Ei!==e&&(this._$ES===void 0&&(this._$ES=new Map),this._$ES.set(e,r))):i=!1),!this.isUpdatePending&&i&&(this._$Ev=this._$EC())}async _$EC(){this.isUpdatePending=!0;try{await this._$Ev}catch(n){Promise.reject(n)}const e=this.scheduleUpdate();return e!=null&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var e;if(!this.isUpdatePending)return;this.hasUpdated,this._$Et&&(this._$Et.forEach((i,o)=>this[o]=i),this._$Et=void 0);let n=!1;const r=this._$AL;try{n=this.shouldUpdate(r),n?(this.willUpdate(r),(e=this._$Em)===null||e===void 0||e.forEach(i=>{var o;return(o=i.hostUpdate)===null||o===void 0?void 0:o.call(i)}),this.update(r)):this._$EU()}catch(i){throw n=!1,this._$EU(),i}n&&this._$AE(r)}willUpdate(e){}_$AE(e){var n;(n=this._$Em)===null||n===void 0||n.forEach(r=>{var i;return(i=r.hostUpdated)===null||i===void 0?void 0:i.call(r)}),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$EU(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$Ev}shouldUpdate(e){return!0}update(e){this._$ES!==void 0&&(this._$ES.forEach((n,r)=>this._$Eg(r,this[r],n)),this._$ES=void 0),this._$EU()}updated(e){}firstUpdated(e){}}dr.finalized=!0,dr.elementProperties=new Map,dr.elementStyles=[],dr.shadowRootOptions={mode:"open"},bg==null||bg({ReactiveElement:dr}),((Ou=globalThis.reactiveElementVersions)!==null&&Ou!==void 0?Ou:globalThis.reactiveElementVersions=[]).push("1.0.1");/**
|
1562
|
+
* @license
|
1563
|
+
* Copyright 2017 Google LLC
|
1564
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
1565
|
+
*/var Fu,Pu;class Tt extends dr{constructor(){super(...arguments),this.renderOptions={host:this},this._$Dt=void 0}createRenderRoot(){var e,n;const r=super.createRenderRoot();return(e=(n=this.renderOptions).renderBefore)!==null&&e!==void 0||(n.renderBefore=r.firstChild),r}update(e){const n=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Dt=$e(n,this.renderRoot,this.renderOptions)}connectedCallback(){var e;super.connectedCallback(),(e=this._$Dt)===null||e===void 0||e.setConnected(!0)}disconnectedCallback(){var e;super.disconnectedCallback(),(e=this._$Dt)===null||e===void 0||e.setConnected(!1)}render(){return ye}}Tt.finalized=!0,Tt._$litElement$=!0,(Fu=globalThis.litElementHydrateSupport)===null||Fu===void 0||Fu.call(globalThis,{LitElement:Tt});const vg=globalThis.litElementPolyfillSupport;vg==null||vg({LitElement:Tt}),((Pu=globalThis.litElementVersions)!==null&&Pu!==void 0?Pu:globalThis.litElementVersions=[]).push("3.0.1");/**
|
1566
|
+
* @license
|
1567
|
+
* Copyright 2017 Google LLC
|
1568
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
1569
|
+
*/const Nt={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},pr=t=>(...e)=>({_$litDirective$:t,values:e});class Oi{constructor(e){}get _$AU(){return this._$AM._$AU}_$AT(e,n,r){this._$Ct=e,this._$AM=n,this._$Ci=r}_$AS(e,n){return this.update(e,n)}update(e,n){return this.render(...n)}}/**
|
1570
|
+
* @license
|
1571
|
+
* Copyright 2018 Google LLC
|
1572
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
1573
|
+
*/const XC=pr(class extends Oi{constructor(t){var e;if(super(t),t.type!==Nt.ATTRIBUTE||t.name!=="class"||((e=t.strings)===null||e===void 0?void 0:e.length)>2)throw Error("`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.")}render(t){return" "+Object.keys(t).filter(e=>t[e]).join(" ")+" "}update(t,[e]){var n,r;if(this.st===void 0){this.st=new Set,t.strings!==void 0&&(this.et=new Set(t.strings.join(" ").split(/\s/).filter(o=>o!=="")));for(const o in e)e[o]&&!((n=this.et)===null||n===void 0?void 0:n.has(o))&&this.st.add(o);return this.render(e)}const i=t.element.classList;this.st.forEach(o=>{o in e||(i.remove(o),this.st.delete(o))});for(const o in e){const s=!!e[o];s===this.st.has(o)||((r=this.et)===null||r===void 0?void 0:r.has(o))||(s?(i.add(o),this.st.add(o)):(i.remove(o),this.st.delete(o)))}return ye}});/*!
|
1574
|
+
* Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com
|
1575
|
+
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
1576
|
+
*/var qC={prefix:"fas",iconName:"arrows-alt-v",icon:[256,512,[],"f338","M214.059 377.941H168V134.059h46.059c21.382 0 32.09-25.851 16.971-40.971L144.971 7.029c-9.373-9.373-24.568-9.373-33.941 0L24.971 93.088c-15.119 15.119-4.411 40.971 16.971 40.971H88v243.882H41.941c-21.382 0-32.09 25.851-16.971 40.971l86.059 86.059c9.373 9.373 24.568 9.373 33.941 0l86.059-86.059c15.12-15.119 4.412-40.971-16.97-40.971z"]},ZC={prefix:"fas",iconName:"bookmark",icon:[384,512,[],"f02e","M0 512V48C0 21.49 21.49 0 48 0h288c26.51 0 48 21.49 48 48v464L192 400 0 512z"]},KC={prefix:"fas",iconName:"check",icon:[512,512,[],"f00c","M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"]},wg={prefix:"fas",iconName:"circle",icon:[512,512,[],"f111","M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8z"]},JC={prefix:"fas",iconName:"ellipsis-h",icon:[512,512,[],"f141","M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z"]},$C={prefix:"fas",iconName:"ellipsis-v",icon:[192,512,[],"f142","M96 184c39.8 0 72 32.2 72 72s-32.2 72-72 72-72-32.2-72-72 32.2-72 72-72zM24 80c0 39.8 32.2 72 72 72s72-32.2 72-72S135.8 8 96 8 24 40.2 24 80zm0 352c0 39.8 32.2 72 72 72s72-32.2 72-72-32.2-72-72-72-72 32.2-72 72z"]},eM={prefix:"fas",iconName:"exclamation-circle",icon:[512,512,[],"f06a","M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"]},tM={prefix:"fas",iconName:"expand-arrows-alt",icon:[448,512,[],"f31e","M448 344v112a23.94 23.94 0 0 1-24 24H312c-21.39 0-32.09-25.9-17-41l36.2-36.2L224 295.6 116.77 402.9 153 439c15.09 15.1 4.39 41-17 41H24a23.94 23.94 0 0 1-24-24V344c0-21.4 25.89-32.1 41-17l36.19 36.2L184.46 256 77.18 148.7 41 185c-15.1 15.1-41 4.4-41-17V56a23.94 23.94 0 0 1 24-24h112c21.39 0 32.09 25.9 17 41l-36.2 36.2L224 216.4l107.23-107.3L295 73c-15.09-15.1-4.39-41 17-41h112a23.94 23.94 0 0 1 24 24v112c0 21.4-25.89 32.1-41 17l-36.19-36.2L263.54 256l107.28 107.3L407 327.1c15.1-15.2 41-4.5 41 16.9z"]},gr={prefix:"fas",iconName:"filter",icon:[512,512,[],"f0b0","M487.976 0H24.028C2.71 0-8.047 25.866 7.058 40.971L192 225.941V432c0 7.831 3.821 15.17 10.237 19.662l80 55.98C298.02 518.69 320 507.493 320 487.98V225.941l184.947-184.97C520.021 25.896 509.338 0 487.976 0z"]},nM={prefix:"fas",iconName:"info-circle",icon:[512,512,[],"f05a","M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"]},rM={prefix:"fas",iconName:"medal",icon:[512,512,[],"f5a2","M223.75 130.75L154.62 15.54A31.997 31.997 0 0 0 127.18 0H16.03C3.08 0-4.5 14.57 2.92 25.18l111.27 158.96c29.72-27.77 67.52-46.83 109.56-53.39zM495.97 0H384.82c-11.24 0-21.66 5.9-27.44 15.54l-69.13 115.21c42.04 6.56 79.84 25.62 109.56 53.38L509.08 25.18C516.5 14.57 508.92 0 495.97 0zM256 160c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm92.52 157.26l-37.93 36.96 8.97 52.22c1.6 9.36-8.26 16.51-16.65 12.09L256 393.88l-46.9 24.65c-8.4 4.45-18.25-2.74-16.65-12.09l8.97-52.22-37.93-36.96c-6.82-6.64-3.05-18.23 6.35-19.59l52.43-7.64 23.43-47.52c2.11-4.28 6.19-6.39 10.28-6.39 4.11 0 8.22 2.14 10.33 6.39l23.43 47.52 52.43 7.64c9.4 1.36 13.17 12.95 6.35 19.59z"]},Eg={prefix:"fas",iconName:"object-group",icon:[512,512,[],"f247","M480 128V96h20c6.627 0 12-5.373 12-12V44c0-6.627-5.373-12-12-12h-40c-6.627 0-12 5.373-12 12v20H64V44c0-6.627-5.373-12-12-12H12C5.373 32 0 37.373 0 44v40c0 6.627 5.373 12 12 12h20v320H12c-6.627 0-12 5.373-12 12v40c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-20h384v20c0 6.627 5.373 12 12 12h40c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12h-20V128zM96 276V140c0-6.627 5.373-12 12-12h168c6.627 0 12 5.373 12 12v136c0 6.627-5.373 12-12 12H108c-6.627 0-12-5.373-12-12zm320 96c0 6.627-5.373 12-12 12H236c-6.627 0-12-5.373-12-12v-52h72c13.255 0 24-10.745 24-24v-72h84c6.627 0 12 5.373 12 12v136z"]},iM={prefix:"fas",iconName:"pen",icon:[512,512,[],"f304","M290.74 93.24l128.02 128.02-277.99 277.99-114.14 12.6C11.35 513.54-1.56 500.62.14 485.34l12.7-114.22 277.9-277.88zm207.2-19.06l-60.11-60.11c-18.75-18.75-49.16-18.75-67.91 0l-56.55 56.55 128.02 128.02 56.55-56.55c18.75-18.76 18.75-49.16 0-67.91z"]},oM={prefix:"fas",iconName:"question-circle",icon:[512,512,[],"f059","M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zM262.655 90c-54.497 0-89.255 22.957-116.549 63.758-3.536 5.286-2.353 12.415 2.715 16.258l34.699 26.31c5.205 3.947 12.621 3.008 16.665-2.122 17.864-22.658 30.113-35.797 57.303-35.797 20.429 0 45.698 13.148 45.698 32.958 0 14.976-12.363 22.667-32.534 33.976C247.128 238.528 216 254.941 216 296v4c0 6.627 5.373 12 12 12h56c6.627 0 12-5.373 12-12v-1.333c0-28.462 83.186-29.647 83.186-106.667 0-58.002-60.165-102-116.531-102zM256 338c-25.365 0-46 20.635-46 46 0 25.364 20.635 46 46 46s46-20.636 46-46c0-25.365-20.635-46-46-46z"]},sM={prefix:"fas",iconName:"redo",icon:[512,512,[],"f01e","M500.33 0h-47.41a12 12 0 0 0-12 12.57l4 82.76A247.42 247.42 0 0 0 256 8C119.34 8 7.9 119.53 8 256.19 8.1 393.07 119.1 504 256 504a247.1 247.1 0 0 0 166.18-63.91 12 12 0 0 0 .48-17.43l-34-34a12 12 0 0 0-16.38-.55A176 176 0 1 1 402.1 157.8l-101.53-4.87a12 12 0 0 0-12.57 12v47.41a12 12 0 0 0 12 12h200.33a12 12 0 0 0 12-12V12a12 12 0 0 0-12-12z"]},aM={prefix:"fas",iconName:"share",icon:[512,512,[],"f064","M503.691 189.836L327.687 37.851C312.281 24.546 288 35.347 288 56.015v80.053C127.371 137.907 0 170.1 0 322.326c0 61.441 39.581 122.309 83.333 154.132 13.653 9.931 33.111-2.533 28.077-18.631C66.066 312.814 132.917 274.316 288 272.085V360c0 20.7 24.3 31.453 39.687 18.164l176.004-152c11.071-9.562 11.086-26.753 0-36.328z"]},cM={prefix:"fas",iconName:"sliders-h",icon:[512,512,[],"f1de","M496 384H160v-16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h80v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h336c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-160h-80v-16c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16c-8.8 0-16 7.2-16 16v32c0 8.8 7.2 16 16 16h336v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h80c8.8 0 16-7.2 16-16v-32c0-8.8-7.2-16-16-16zm0-160H288V48c0-8.8-7.2-16-16-16h-32c-8.8 0-16 7.2-16 16v16H16C7.2 64 0 71.2 0 80v32c0 8.8 7.2 16 16 16h208v16c0 8.8 7.2 16 16 16h32c8.8 0 16-7.2 16-16v-16h208c8.8 0 16-7.2 16-16V80c0-8.8-7.2-16-16-16z"]},uM={prefix:"fas",iconName:"sort-amount-down",icon:[512,512,[],"f160","M304 416h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-128-64h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.37 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm256-192H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-64 128H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM496 32H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"]},lM={prefix:"fas",iconName:"trash",icon:[448,512,[],"f1f8","M432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16zM53.2 467a48 48 0 0 0 47.9 45h245.8a48 48 0 0 0 47.9-45L416 128H32z"]},Sg={prefix:"fas",iconName:"trash-alt",icon:[448,512,[],"f2ed","M32 464a48 48 0 0 0 48 48h288a48 48 0 0 0 48-48V128H32zm272-256a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zm-96 0a16 16 0 0 1 32 0v224a16 16 0 0 1-32 0zM432 32H312l-9.4-18.7A24 24 0 0 0 281.1 0H166.8a23.72 23.72 0 0 0-21.4 13.3L136 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z"]},fM={prefix:"fas",iconName:"undo",icon:[512,512,[],"f0e2","M212.333 224.333H12c-6.627 0-12-5.373-12-12V12C0 5.373 5.373 0 12 0h48c6.627 0 12 5.373 12 12v78.112C117.773 39.279 184.26 7.47 258.175 8.007c136.906.994 246.448 111.623 246.157 248.532C504.041 393.258 393.12 504 256.333 504c-64.089 0-122.496-24.313-166.51-64.215-5.099-4.622-5.334-12.554-.467-17.42l33.967-33.967c4.474-4.474 11.662-4.717 16.401-.525C170.76 415.336 211.58 432 256.333 432c97.268 0 176-78.716 176-176 0-97.267-78.716-176-176-176-58.496 0-110.28 28.476-142.274 72.333h98.274c6.627 0 12 5.373 12 12v48c0 6.627-5.373 12-12 12z"]};/*!
|
1577
|
+
* Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com
|
1578
|
+
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
1579
|
+
*/function hM(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function Dg(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function dM(t,e,n){return e&&Dg(t.prototype,e),n&&Dg(t,n),t}function pM(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function V(t){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{},r=Object.keys(n);typeof Object.getOwnPropertySymbols=="function"&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(i){return Object.getOwnPropertyDescriptor(n,i).enumerable}))),r.forEach(function(i){pM(t,i,n[i])})}return t}function Cg(t,e){return gM(t)||mM(t,e)||yM()}function gM(t){if(Array.isArray(t))return t}function mM(t,e){var n=[],r=!0,i=!1,o=void 0;try{for(var s=t[Symbol.iterator](),a;!(r=(a=s.next()).done)&&(n.push(a.value),!(e&&n.length===e));r=!0);}catch(c){i=!0,o=c}finally{try{!r&&s.return!=null&&s.return()}finally{if(i)throw o}}return n}function yM(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}var Mg=function(){},zu={},Ig={},AM=null,Tg={mark:Mg,measure:Mg};try{typeof window!="undefined"&&(zu=window),typeof document!="undefined"&&(Ig=document),typeof MutationObserver!="undefined"&&(AM=MutationObserver),typeof performance!="undefined"&&(Tg=performance)}catch{}var bM=zu.navigator||{},Ng=bM.userAgent,Lg=Ng===void 0?"":Ng,ms=zu,De=Ig,ys=Tg;ms.document;var Ru=!!De.documentElement&&!!De.head&&typeof De.addEventListener=="function"&&typeof De.createElement=="function";~Lg.indexOf("MSIE")||~Lg.indexOf("Trident/");var Lt="___FONT_AWESOME___",Og="fa",kg="svg-inline--fa",xM="data-fa-i2svg";(function(){try{return!0}catch{return!1}})();var Uu={GROUP:"group",SWAP_OPACITY:"swap-opacity",PRIMARY:"primary",SECONDARY:"secondary"},Bg=ms.FontAwesomeConfig||{};function vM(t){var e=De.querySelector("script["+t+"]");if(e)return e.getAttribute(t)}function wM(t){return t===""?!0:t==="false"?!1:t==="true"?!0:t}if(De&&typeof De.querySelector=="function"){var EM=[["data-family-prefix","familyPrefix"],["data-replacement-class","replacementClass"],["data-auto-replace-svg","autoReplaceSvg"],["data-auto-add-css","autoAddCss"],["data-auto-a11y","autoA11y"],["data-search-pseudo-elements","searchPseudoElements"],["data-observe-mutations","observeMutations"],["data-mutate-approach","mutateApproach"],["data-keep-original-source","keepOriginalSource"],["data-measure-performance","measurePerformance"],["data-show-missing-icons","showMissingIcons"]];EM.forEach(function(t){var e=Cg(t,2),n=e[0],r=e[1],i=wM(vM(n));i!=null&&(Bg[r]=i)})}var SM={familyPrefix:Og,replacementClass:kg,autoReplaceSvg:!0,autoAddCss:!0,autoA11y:!0,searchPseudoElements:!1,observeMutations:!0,mutateApproach:"async",keepOriginalSource:!0,measurePerformance:!1,showMissingIcons:!0},ju=V({},SM,Bg);ju.autoReplaceSvg||(ju.observeMutations=!1);var Pe=V({},ju);ms.FontAwesomeConfig=Pe;var Ot=ms||{};Ot[Lt]||(Ot[Lt]={}),Ot[Lt].styles||(Ot[Lt].styles={}),Ot[Lt].hooks||(Ot[Lt].hooks={}),Ot[Lt].shims||(Ot[Lt].shims=[]);var yt=Ot[Lt],DM=[],CM=function t(){De.removeEventListener("DOMContentLoaded",t),Gu=1,DM.map(function(e){return e()})},Gu=!1;Ru&&(Gu=(De.documentElement.doScroll?/^loaded|^c/:/^loaded|^i|^c/).test(De.readyState),Gu||De.addEventListener("DOMContentLoaded",CM)),typeof global!="undefined"&&typeof global.process!="undefined"&&global.process.emit,typeof setImmediate=="undefined"||setImmediate;var mr={size:16,x:0,y:0,rotate:0,flipX:!1,flipY:!1};function MM(t){if(!(!t||!Ru)){var e=De.createElement("style");e.setAttribute("type","text/css"),e.innerHTML=t;for(var n=De.head.childNodes,r=null,i=n.length-1;i>-1;i--){var o=n[i],s=(o.tagName||"").toUpperCase();["STYLE","LINK"].indexOf(s)>-1&&(r=o)}return De.head.insertBefore(e,r),t}}var IM="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";function As(){for(var t=12,e="";t-- >0;)e+=IM[Math.random()*62|0];return e}function Fg(t){return"".concat(t).replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">")}function TM(t){return Object.keys(t||{}).reduce(function(e,n){return e+"".concat(n,'="').concat(Fg(t[n]),'" ')},"").trim()}function Pg(t){return Object.keys(t||{}).reduce(function(e,n){return e+"".concat(n,": ").concat(t[n],";")},"")}function zg(t){return t.size!==mr.size||t.x!==mr.x||t.y!==mr.y||t.rotate!==mr.rotate||t.flipX||t.flipY}function Rg(t){var e=t.transform,n=t.containerWidth,r=t.iconWidth,i={transform:"translate(".concat(n/2," 256)")},o="translate(".concat(e.x*32,", ").concat(e.y*32,") "),s="scale(".concat(e.size/16*(e.flipX?-1:1),", ").concat(e.size/16*(e.flipY?-1:1),") "),a="rotate(".concat(e.rotate," 0 0)"),c={transform:"".concat(o," ").concat(s," ").concat(a)},u={transform:"translate(".concat(r/2*-1," -256)")};return{outer:i,inner:c,path:u}}var Hu={x:0,y:0,width:"100%",height:"100%"};function Ug(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return t.attributes&&(t.attributes.fill||e)&&(t.attributes.fill="black"),t}function NM(t){return t.tag==="g"?t.children:[t]}function LM(t){var e=t.children,n=t.attributes,r=t.main,i=t.mask,o=t.maskId,s=t.transform,a=r.width,c=r.icon,u=i.width,f=i.icon,l=Rg({transform:s,containerWidth:u,iconWidth:a}),h={tag:"rect",attributes:V({},Hu,{fill:"white"})},d=c.children?{children:c.children.map(Ug)}:{},p={tag:"g",attributes:V({},l.inner),children:[Ug(V({tag:c.tag,attributes:V({},c.attributes,l.path)},d))]},g={tag:"g",attributes:V({},l.outer),children:[p]},m="mask-".concat(o||As()),y="clip-".concat(o||As()),w={tag:"mask",attributes:V({},Hu,{id:m,maskUnits:"userSpaceOnUse",maskContentUnits:"userSpaceOnUse"}),children:[h,g]},x={tag:"defs",children:[{tag:"clipPath",attributes:{id:y},children:NM(f)},w]};return e.push(x,{tag:"rect",attributes:V({fill:"currentColor","clip-path":"url(#".concat(y,")"),mask:"url(#".concat(m,")")},Hu)}),{children:e,attributes:n}}function OM(t){var e=t.children,n=t.attributes,r=t.main,i=t.transform,o=t.styles,s=Pg(o);if(s.length>0&&(n.style=s),zg(i)){var a=Rg({transform:i,containerWidth:r.width,iconWidth:r.width});e.push({tag:"g",attributes:V({},a.outer),children:[{tag:"g",attributes:V({},a.inner),children:[{tag:r.icon.tag,children:r.icon.children,attributes:V({},r.icon.attributes,a.path)}]}]})}else e.push(r.icon);return{children:e,attributes:n}}function kM(t){var e=t.children,n=t.main,r=t.mask,i=t.attributes,o=t.styles,s=t.transform;if(zg(s)&&n.found&&!r.found){var a=n.width,c=n.height,u={x:a/c/2,y:.5};i.style=Pg(V({},o,{"transform-origin":"".concat(u.x+s.x/16,"em ").concat(u.y+s.y/16,"em")}))}return[{tag:"svg",attributes:i,children:e}]}function BM(t){var e=t.prefix,n=t.iconName,r=t.children,i=t.attributes,o=t.symbol,s=o===!0?"".concat(e,"-").concat(Pe.familyPrefix,"-").concat(n):o;return[{tag:"svg",attributes:{style:"display: none;"},children:[{tag:"symbol",attributes:V({},i,{id:s}),children:r}]}]}function FM(t){var e=t.icons,n=e.main,r=e.mask,i=t.prefix,o=t.iconName,s=t.transform,a=t.symbol,c=t.title,u=t.maskId,f=t.titleId,l=t.extra,h=t.watchable,d=h===void 0?!1:h,p=r.found?r:n,g=p.width,m=p.height,y=i==="fak",w=y?"":"fa-w-".concat(Math.ceil(g/m*16)),x=[Pe.replacementClass,o?"".concat(Pe.familyPrefix,"-").concat(o):"",w].filter(function(B){return l.classes.indexOf(B)===-1}).filter(function(B){return B!==""||!!B}).concat(l.classes).join(" "),E={children:[],attributes:V({},l.attributes,{"data-prefix":i,"data-icon":o,class:x,role:l.attributes.role||"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 ".concat(g," ").concat(m)})},b=y&&!~l.classes.indexOf("fa-fw")?{width:"".concat(g/m*16*.0625,"em")}:{};d&&(E.attributes[xM]=""),c&&E.children.push({tag:"title",attributes:{id:E.attributes["aria-labelledby"]||"title-".concat(f||As())},children:[c]});var A=V({},E,{prefix:i,iconName:o,main:n,mask:r,maskId:u,transform:s,symbol:a,styles:V({},b,l.styles)}),v=r.found&&n.found?LM(A):OM(A),D=v.children,L=v.attributes;return A.children=D,A.attributes=L,a?BM(A):kM(A)}var jg=function(){};Pe.measurePerformance&&ys&&ys.mark&&ys.measure;var PM=function(e,n){return function(r,i,o,s){return e.call(n,r,i,o,s)}},Qu=function(e,n,r,i){var o=Object.keys(e),s=o.length,a=i!==void 0?PM(n,i):n,c,u,f;for(r===void 0?(c=1,f=e[o[0]]):(c=0,f=r);c<s;c++)u=o[c],f=a(f,e[u],u,e);return f};function Gg(t,e){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},r=n.skipHooks,i=r===void 0?!1:r,o=Object.keys(e).reduce(function(s,a){var c=e[a],u=!!c.icon;return u?s[c.iconName]=c.icon:s[a]=c,s},{});typeof yt.hooks.addPack=="function"&&!i?yt.hooks.addPack(t,o):yt.styles[t]=V({},yt.styles[t]||{},o),t==="fas"&&Gg("fa",e)}var Hg=yt.styles,zM=yt.shims,Qg=function(){var e=function(i){return Qu(Hg,function(o,s,a){return o[a]=Qu(s,i,{}),o},{})};e(function(r,i,o){return i[3]&&(r[i[3]]=o),r}),e(function(r,i,o){var s=i[2];return r[o]=o,s.forEach(function(a){r[a]=o}),r});var n="far"in Hg;Qu(zM,function(r,i){var o=i[0],s=i[1],a=i[2];return s==="far"&&!n&&(s="fas"),r[o]={prefix:s,iconName:a},r},{})};Qg(),yt.styles;function Vg(t,e,n){if(t&&t[e]&&t[e][n])return{prefix:e,iconName:n,icon:t[e][n]}}function _g(t){var e=t.tag,n=t.attributes,r=n===void 0?{}:n,i=t.children,o=i===void 0?[]:i;return typeof t=="string"?Fg(t):"<".concat(e," ").concat(TM(r),">").concat(o.map(_g).join(""),"</").concat(e,">")}function Vu(t){this.name="MissingIcon",this.message=t||"Icon unavailable",this.stack=new Error().stack}Vu.prototype=Object.create(Error.prototype),Vu.prototype.constructor=Vu;var bs={fill:"currentColor"},Yg={attributeType:"XML",repeatCount:"indefinite",dur:"2s"};V({},bs,{d:"M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z"});var _u=V({},Yg,{attributeName:"opacity"});V({},bs,{cx:"256",cy:"364",r:"28"}),V({},Yg,{attributeName:"r",values:"28;14;28;28;14;28;"}),V({},_u,{values:"1;0;1;1;0;1;"}),V({},bs,{opacity:"1",d:"M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z"}),V({},_u,{values:"1;0;0;0;0;1;"}),V({},bs,{opacity:"0",d:"M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z"}),V({},_u,{values:"0;0;1;1;0;0;"}),yt.styles;function Wg(t){var e=t[0],n=t[1],r=t.slice(4),i=Cg(r,1),o=i[0],s=null;return Array.isArray(o)?s={tag:"g",attributes:{class:"".concat(Pe.familyPrefix,"-").concat(Uu.GROUP)},children:[{tag:"path",attributes:{class:"".concat(Pe.familyPrefix,"-").concat(Uu.SECONDARY),fill:"currentColor",d:o[0]}},{tag:"path",attributes:{class:"".concat(Pe.familyPrefix,"-").concat(Uu.PRIMARY),fill:"currentColor",d:o[1]}}]}:s={tag:"path",attributes:{fill:"currentColor",d:o}},{found:!0,width:e,height:n,icon:s}}yt.styles;var RM=`svg:not(:root).svg-inline--fa {
|
1580
|
+
overflow: visible;
|
1581
|
+
}
|
1582
|
+
|
1583
|
+
.svg-inline--fa {
|
1584
|
+
display: inline-block;
|
1585
|
+
font-size: inherit;
|
1586
|
+
height: 1em;
|
1587
|
+
overflow: visible;
|
1588
|
+
vertical-align: -0.125em;
|
1589
|
+
}
|
1590
|
+
.svg-inline--fa.fa-lg {
|
1591
|
+
vertical-align: -0.225em;
|
1592
|
+
}
|
1593
|
+
.svg-inline--fa.fa-w-1 {
|
1594
|
+
width: 0.0625em;
|
1595
|
+
}
|
1596
|
+
.svg-inline--fa.fa-w-2 {
|
1597
|
+
width: 0.125em;
|
1598
|
+
}
|
1599
|
+
.svg-inline--fa.fa-w-3 {
|
1600
|
+
width: 0.1875em;
|
1601
|
+
}
|
1602
|
+
.svg-inline--fa.fa-w-4 {
|
1603
|
+
width: 0.25em;
|
1604
|
+
}
|
1605
|
+
.svg-inline--fa.fa-w-5 {
|
1606
|
+
width: 0.3125em;
|
1607
|
+
}
|
1608
|
+
.svg-inline--fa.fa-w-6 {
|
1609
|
+
width: 0.375em;
|
1610
|
+
}
|
1611
|
+
.svg-inline--fa.fa-w-7 {
|
1612
|
+
width: 0.4375em;
|
1613
|
+
}
|
1614
|
+
.svg-inline--fa.fa-w-8 {
|
1615
|
+
width: 0.5em;
|
1616
|
+
}
|
1617
|
+
.svg-inline--fa.fa-w-9 {
|
1618
|
+
width: 0.5625em;
|
1619
|
+
}
|
1620
|
+
.svg-inline--fa.fa-w-10 {
|
1621
|
+
width: 0.625em;
|
1622
|
+
}
|
1623
|
+
.svg-inline--fa.fa-w-11 {
|
1624
|
+
width: 0.6875em;
|
1625
|
+
}
|
1626
|
+
.svg-inline--fa.fa-w-12 {
|
1627
|
+
width: 0.75em;
|
1628
|
+
}
|
1629
|
+
.svg-inline--fa.fa-w-13 {
|
1630
|
+
width: 0.8125em;
|
1631
|
+
}
|
1632
|
+
.svg-inline--fa.fa-w-14 {
|
1633
|
+
width: 0.875em;
|
1634
|
+
}
|
1635
|
+
.svg-inline--fa.fa-w-15 {
|
1636
|
+
width: 0.9375em;
|
1637
|
+
}
|
1638
|
+
.svg-inline--fa.fa-w-16 {
|
1639
|
+
width: 1em;
|
1640
|
+
}
|
1641
|
+
.svg-inline--fa.fa-w-17 {
|
1642
|
+
width: 1.0625em;
|
1643
|
+
}
|
1644
|
+
.svg-inline--fa.fa-w-18 {
|
1645
|
+
width: 1.125em;
|
1646
|
+
}
|
1647
|
+
.svg-inline--fa.fa-w-19 {
|
1648
|
+
width: 1.1875em;
|
1649
|
+
}
|
1650
|
+
.svg-inline--fa.fa-w-20 {
|
1651
|
+
width: 1.25em;
|
1652
|
+
}
|
1653
|
+
.svg-inline--fa.fa-pull-left {
|
1654
|
+
margin-right: 0.3em;
|
1655
|
+
width: auto;
|
1656
|
+
}
|
1657
|
+
.svg-inline--fa.fa-pull-right {
|
1658
|
+
margin-left: 0.3em;
|
1659
|
+
width: auto;
|
1660
|
+
}
|
1661
|
+
.svg-inline--fa.fa-border {
|
1662
|
+
height: 1.5em;
|
1663
|
+
}
|
1664
|
+
.svg-inline--fa.fa-li {
|
1665
|
+
width: 2em;
|
1666
|
+
}
|
1667
|
+
.svg-inline--fa.fa-fw {
|
1668
|
+
width: 1.25em;
|
1669
|
+
}
|
1670
|
+
|
1671
|
+
.fa-layers svg.svg-inline--fa {
|
1672
|
+
bottom: 0;
|
1673
|
+
left: 0;
|
1674
|
+
margin: auto;
|
1675
|
+
position: absolute;
|
1676
|
+
right: 0;
|
1677
|
+
top: 0;
|
1678
|
+
}
|
1679
|
+
|
1680
|
+
.fa-layers {
|
1681
|
+
display: inline-block;
|
1682
|
+
height: 1em;
|
1683
|
+
position: relative;
|
1684
|
+
text-align: center;
|
1685
|
+
vertical-align: -0.125em;
|
1686
|
+
width: 1em;
|
1687
|
+
}
|
1688
|
+
.fa-layers svg.svg-inline--fa {
|
1689
|
+
-webkit-transform-origin: center center;
|
1690
|
+
transform-origin: center center;
|
1691
|
+
}
|
1692
|
+
|
1693
|
+
.fa-layers-counter, .fa-layers-text {
|
1694
|
+
display: inline-block;
|
1695
|
+
position: absolute;
|
1696
|
+
text-align: center;
|
1697
|
+
}
|
1698
|
+
|
1699
|
+
.fa-layers-text {
|
1700
|
+
left: 50%;
|
1701
|
+
top: 50%;
|
1702
|
+
-webkit-transform: translate(-50%, -50%);
|
1703
|
+
transform: translate(-50%, -50%);
|
1704
|
+
-webkit-transform-origin: center center;
|
1705
|
+
transform-origin: center center;
|
1706
|
+
}
|
1707
|
+
|
1708
|
+
.fa-layers-counter {
|
1709
|
+
background-color: #ff253a;
|
1710
|
+
border-radius: 1em;
|
1711
|
+
-webkit-box-sizing: border-box;
|
1712
|
+
box-sizing: border-box;
|
1713
|
+
color: #fff;
|
1714
|
+
height: 1.5em;
|
1715
|
+
line-height: 1;
|
1716
|
+
max-width: 5em;
|
1717
|
+
min-width: 1.5em;
|
1718
|
+
overflow: hidden;
|
1719
|
+
padding: 0.25em;
|
1720
|
+
right: 0;
|
1721
|
+
text-overflow: ellipsis;
|
1722
|
+
top: 0;
|
1723
|
+
-webkit-transform: scale(0.25);
|
1724
|
+
transform: scale(0.25);
|
1725
|
+
-webkit-transform-origin: top right;
|
1726
|
+
transform-origin: top right;
|
1727
|
+
}
|
1728
|
+
|
1729
|
+
.fa-layers-bottom-right {
|
1730
|
+
bottom: 0;
|
1731
|
+
right: 0;
|
1732
|
+
top: auto;
|
1733
|
+
-webkit-transform: scale(0.25);
|
1734
|
+
transform: scale(0.25);
|
1735
|
+
-webkit-transform-origin: bottom right;
|
1736
|
+
transform-origin: bottom right;
|
1737
|
+
}
|
1738
|
+
|
1739
|
+
.fa-layers-bottom-left {
|
1740
|
+
bottom: 0;
|
1741
|
+
left: 0;
|
1742
|
+
right: auto;
|
1743
|
+
top: auto;
|
1744
|
+
-webkit-transform: scale(0.25);
|
1745
|
+
transform: scale(0.25);
|
1746
|
+
-webkit-transform-origin: bottom left;
|
1747
|
+
transform-origin: bottom left;
|
1748
|
+
}
|
1749
|
+
|
1750
|
+
.fa-layers-top-right {
|
1751
|
+
right: 0;
|
1752
|
+
top: 0;
|
1753
|
+
-webkit-transform: scale(0.25);
|
1754
|
+
transform: scale(0.25);
|
1755
|
+
-webkit-transform-origin: top right;
|
1756
|
+
transform-origin: top right;
|
1757
|
+
}
|
1758
|
+
|
1759
|
+
.fa-layers-top-left {
|
1760
|
+
left: 0;
|
1761
|
+
right: auto;
|
1762
|
+
top: 0;
|
1763
|
+
-webkit-transform: scale(0.25);
|
1764
|
+
transform: scale(0.25);
|
1765
|
+
-webkit-transform-origin: top left;
|
1766
|
+
transform-origin: top left;
|
1767
|
+
}
|
1768
|
+
|
1769
|
+
.fa-lg {
|
1770
|
+
font-size: 1.3333333333em;
|
1771
|
+
line-height: 0.75em;
|
1772
|
+
vertical-align: -0.0667em;
|
1773
|
+
}
|
1774
|
+
|
1775
|
+
.fa-xs {
|
1776
|
+
font-size: 0.75em;
|
1777
|
+
}
|
1778
|
+
|
1779
|
+
.fa-sm {
|
1780
|
+
font-size: 0.875em;
|
1781
|
+
}
|
1782
|
+
|
1783
|
+
.fa-1x {
|
1784
|
+
font-size: 1em;
|
1785
|
+
}
|
1786
|
+
|
1787
|
+
.fa-2x {
|
1788
|
+
font-size: 2em;
|
1789
|
+
}
|
1790
|
+
|
1791
|
+
.fa-3x {
|
1792
|
+
font-size: 3em;
|
1793
|
+
}
|
1794
|
+
|
1795
|
+
.fa-4x {
|
1796
|
+
font-size: 4em;
|
1797
|
+
}
|
1798
|
+
|
1799
|
+
.fa-5x {
|
1800
|
+
font-size: 5em;
|
1801
|
+
}
|
1802
|
+
|
1803
|
+
.fa-6x {
|
1804
|
+
font-size: 6em;
|
1805
|
+
}
|
1806
|
+
|
1807
|
+
.fa-7x {
|
1808
|
+
font-size: 7em;
|
1809
|
+
}
|
1810
|
+
|
1811
|
+
.fa-8x {
|
1812
|
+
font-size: 8em;
|
1813
|
+
}
|
1814
|
+
|
1815
|
+
.fa-9x {
|
1816
|
+
font-size: 9em;
|
1817
|
+
}
|
1818
|
+
|
1819
|
+
.fa-10x {
|
1820
|
+
font-size: 10em;
|
1821
|
+
}
|
1822
|
+
|
1823
|
+
.fa-fw {
|
1824
|
+
text-align: center;
|
1825
|
+
width: 1.25em;
|
1826
|
+
}
|
1827
|
+
|
1828
|
+
.fa-ul {
|
1829
|
+
list-style-type: none;
|
1830
|
+
margin-left: 2.5em;
|
1831
|
+
padding-left: 0;
|
1832
|
+
}
|
1833
|
+
.fa-ul > li {
|
1834
|
+
position: relative;
|
1835
|
+
}
|
1836
|
+
|
1837
|
+
.fa-li {
|
1838
|
+
left: -2em;
|
1839
|
+
position: absolute;
|
1840
|
+
text-align: center;
|
1841
|
+
width: 2em;
|
1842
|
+
line-height: inherit;
|
1843
|
+
}
|
1844
|
+
|
1845
|
+
.fa-border {
|
1846
|
+
border: solid 0.08em #eee;
|
1847
|
+
border-radius: 0.1em;
|
1848
|
+
padding: 0.2em 0.25em 0.15em;
|
1849
|
+
}
|
1850
|
+
|
1851
|
+
.fa-pull-left {
|
1852
|
+
float: left;
|
1853
|
+
}
|
1854
|
+
|
1855
|
+
.fa-pull-right {
|
1856
|
+
float: right;
|
1857
|
+
}
|
1858
|
+
|
1859
|
+
.fa.fa-pull-left,
|
1860
|
+
.fas.fa-pull-left,
|
1861
|
+
.far.fa-pull-left,
|
1862
|
+
.fal.fa-pull-left,
|
1863
|
+
.fab.fa-pull-left {
|
1864
|
+
margin-right: 0.3em;
|
1865
|
+
}
|
1866
|
+
.fa.fa-pull-right,
|
1867
|
+
.fas.fa-pull-right,
|
1868
|
+
.far.fa-pull-right,
|
1869
|
+
.fal.fa-pull-right,
|
1870
|
+
.fab.fa-pull-right {
|
1871
|
+
margin-left: 0.3em;
|
1872
|
+
}
|
1873
|
+
|
1874
|
+
.fa-spin {
|
1875
|
+
-webkit-animation: fa-spin 2s infinite linear;
|
1876
|
+
animation: fa-spin 2s infinite linear;
|
1877
|
+
}
|
1878
|
+
|
1879
|
+
.fa-pulse {
|
1880
|
+
-webkit-animation: fa-spin 1s infinite steps(8);
|
1881
|
+
animation: fa-spin 1s infinite steps(8);
|
1882
|
+
}
|
1883
|
+
|
1884
|
+
@-webkit-keyframes fa-spin {
|
1885
|
+
0% {
|
1886
|
+
-webkit-transform: rotate(0deg);
|
1887
|
+
transform: rotate(0deg);
|
1888
|
+
}
|
1889
|
+
100% {
|
1890
|
+
-webkit-transform: rotate(360deg);
|
1891
|
+
transform: rotate(360deg);
|
1892
|
+
}
|
1893
|
+
}
|
1894
|
+
|
1895
|
+
@keyframes fa-spin {
|
1896
|
+
0% {
|
1897
|
+
-webkit-transform: rotate(0deg);
|
1898
|
+
transform: rotate(0deg);
|
1899
|
+
}
|
1900
|
+
100% {
|
1901
|
+
-webkit-transform: rotate(360deg);
|
1902
|
+
transform: rotate(360deg);
|
1903
|
+
}
|
1904
|
+
}
|
1905
|
+
.fa-rotate-90 {
|
1906
|
+
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
|
1907
|
+
-webkit-transform: rotate(90deg);
|
1908
|
+
transform: rotate(90deg);
|
1909
|
+
}
|
1910
|
+
|
1911
|
+
.fa-rotate-180 {
|
1912
|
+
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
|
1913
|
+
-webkit-transform: rotate(180deg);
|
1914
|
+
transform: rotate(180deg);
|
1915
|
+
}
|
1916
|
+
|
1917
|
+
.fa-rotate-270 {
|
1918
|
+
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";
|
1919
|
+
-webkit-transform: rotate(270deg);
|
1920
|
+
transform: rotate(270deg);
|
1921
|
+
}
|
1922
|
+
|
1923
|
+
.fa-flip-horizontal {
|
1924
|
+
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";
|
1925
|
+
-webkit-transform: scale(-1, 1);
|
1926
|
+
transform: scale(-1, 1);
|
1927
|
+
}
|
1928
|
+
|
1929
|
+
.fa-flip-vertical {
|
1930
|
+
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
|
1931
|
+
-webkit-transform: scale(1, -1);
|
1932
|
+
transform: scale(1, -1);
|
1933
|
+
}
|
1934
|
+
|
1935
|
+
.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical {
|
1936
|
+
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
|
1937
|
+
-webkit-transform: scale(-1, -1);
|
1938
|
+
transform: scale(-1, -1);
|
1939
|
+
}
|
1940
|
+
|
1941
|
+
:root .fa-rotate-90,
|
1942
|
+
:root .fa-rotate-180,
|
1943
|
+
:root .fa-rotate-270,
|
1944
|
+
:root .fa-flip-horizontal,
|
1945
|
+
:root .fa-flip-vertical,
|
1946
|
+
:root .fa-flip-both {
|
1947
|
+
-webkit-filter: none;
|
1948
|
+
filter: none;
|
1949
|
+
}
|
1950
|
+
|
1951
|
+
.fa-stack {
|
1952
|
+
display: inline-block;
|
1953
|
+
height: 2em;
|
1954
|
+
position: relative;
|
1955
|
+
width: 2.5em;
|
1956
|
+
}
|
1957
|
+
|
1958
|
+
.fa-stack-1x,
|
1959
|
+
.fa-stack-2x {
|
1960
|
+
bottom: 0;
|
1961
|
+
left: 0;
|
1962
|
+
margin: auto;
|
1963
|
+
position: absolute;
|
1964
|
+
right: 0;
|
1965
|
+
top: 0;
|
1966
|
+
}
|
1967
|
+
|
1968
|
+
.svg-inline--fa.fa-stack-1x {
|
1969
|
+
height: 1em;
|
1970
|
+
width: 1.25em;
|
1971
|
+
}
|
1972
|
+
.svg-inline--fa.fa-stack-2x {
|
1973
|
+
height: 2em;
|
1974
|
+
width: 2.5em;
|
1975
|
+
}
|
1976
|
+
|
1977
|
+
.fa-inverse {
|
1978
|
+
color: #fff;
|
1979
|
+
}
|
1980
|
+
|
1981
|
+
.sr-only {
|
1982
|
+
border: 0;
|
1983
|
+
clip: rect(0, 0, 0, 0);
|
1984
|
+
height: 1px;
|
1985
|
+
margin: -1px;
|
1986
|
+
overflow: hidden;
|
1987
|
+
padding: 0;
|
1988
|
+
position: absolute;
|
1989
|
+
width: 1px;
|
1990
|
+
}
|
1991
|
+
|
1992
|
+
.sr-only-focusable:active, .sr-only-focusable:focus {
|
1993
|
+
clip: auto;
|
1994
|
+
height: auto;
|
1995
|
+
margin: 0;
|
1996
|
+
overflow: visible;
|
1997
|
+
position: static;
|
1998
|
+
width: auto;
|
1999
|
+
}
|
2000
|
+
|
2001
|
+
.svg-inline--fa .fa-primary {
|
2002
|
+
fill: var(--fa-primary-color, currentColor);
|
2003
|
+
opacity: 1;
|
2004
|
+
opacity: var(--fa-primary-opacity, 1);
|
2005
|
+
}
|
2006
|
+
|
2007
|
+
.svg-inline--fa .fa-secondary {
|
2008
|
+
fill: var(--fa-secondary-color, currentColor);
|
2009
|
+
opacity: 0.4;
|
2010
|
+
opacity: var(--fa-secondary-opacity, 0.4);
|
2011
|
+
}
|
2012
|
+
|
2013
|
+
.svg-inline--fa.fa-swap-opacity .fa-primary {
|
2014
|
+
opacity: 0.4;
|
2015
|
+
opacity: var(--fa-secondary-opacity, 0.4);
|
2016
|
+
}
|
2017
|
+
|
2018
|
+
.svg-inline--fa.fa-swap-opacity .fa-secondary {
|
2019
|
+
opacity: 1;
|
2020
|
+
opacity: var(--fa-primary-opacity, 1);
|
2021
|
+
}
|
2022
|
+
|
2023
|
+
.svg-inline--fa mask .fa-primary,
|
2024
|
+
.svg-inline--fa mask .fa-secondary {
|
2025
|
+
fill: black;
|
2026
|
+
}
|
2027
|
+
|
2028
|
+
.fad.fa-inverse {
|
2029
|
+
color: #fff;
|
2030
|
+
}`;function UM(){var t=Og,e=kg,n=Pe.familyPrefix,r=Pe.replacementClass,i=RM;if(n!==t||r!==e){var o=new RegExp("\\.".concat(t,"\\-"),"g"),s=new RegExp("\\--".concat(t,"\\-"),"g"),a=new RegExp("\\.".concat(e),"g");i=i.replace(o,".".concat(n,"-")).replace(s,"--".concat(n,"-")).replace(a,".".concat(r))}return i}var jM=function(){function t(){hM(this,t),this.definitions={}}return dM(t,[{key:"add",value:function(){for(var n=this,r=arguments.length,i=new Array(r),o=0;o<r;o++)i[o]=arguments[o];var s=i.reduce(this._pullDefinitions,{});Object.keys(s).forEach(function(a){n.definitions[a]=V({},n.definitions[a]||{},s[a]),Gg(a,s[a]),Qg()})}},{key:"reset",value:function(){this.definitions={}}},{key:"_pullDefinitions",value:function(n,r){var i=r.prefix&&r.iconName&&r.icon?{0:r}:r;return Object.keys(i).map(function(o){var s=i[o],a=s.prefix,c=s.iconName,u=s.icon;n[a]||(n[a]={}),n[a][c]=u}),n}}]),t}();function GM(){Pe.autoAddCss&&!qg&&(MM(UM()),qg=!0)}function HM(t,e){return Object.defineProperty(t,"abstract",{get:e}),Object.defineProperty(t,"html",{get:function(){return t.abstract.map(function(r){return _g(r)})}}),Object.defineProperty(t,"node",{get:function(){if(!!Ru){var r=De.createElement("div");return r.innerHTML=t.html,r.children}}}),t}function Xg(t){var e=t.prefix,n=e===void 0?"fa":e,r=t.iconName;if(!!r)return Vg(VM.definitions,n,r)||Vg(yt.styles,n,r)}function QM(t){return function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=(e||{}).icon?e:Xg(e||{}),i=n.mask;return i&&(i=(i||{}).icon?i:Xg(i||{})),t(r,V({},n,{mask:i}))}}var VM=new jM,qg=!1,me=QM(function(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=e.transform,r=n===void 0?mr:n,i=e.symbol,o=i===void 0?!1:i,s=e.mask,a=s===void 0?null:s,c=e.maskId,u=c===void 0?null:c,f=e.title,l=f===void 0?null:f,h=e.titleId,d=h===void 0?null:h,p=e.classes,g=p===void 0?[]:p,m=e.attributes,y=m===void 0?{}:m,w=e.styles,x=w===void 0?{}:w;if(!!t){var E=t.prefix,b=t.iconName,A=t.icon;return HM(V({type:"icon"},t),function(){return GM(),Pe.autoA11y&&(l?y["aria-labelledby"]="".concat(Pe.replacementClass,"-title-").concat(d||As()):(y["aria-hidden"]="true",y.focusable="false")),FM({icons:{main:Wg(A),mask:a?Wg(a.icon):{found:!1,width:null,height:null,icon:{}}},prefix:E,iconName:b,transform:V({},mr,r),symbol:o,title:l,maskId:u,titleId:d,extra:{attributes:y,styles:x,classes:g}})})}});/**
|
2031
|
+
* @license
|
2032
|
+
* Copyright 2018 Google LLC
|
2033
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
2034
|
+
*/const _M=pr(class extends Oi{constructor(t){var e;if(super(t),t.type!==Nt.ATTRIBUTE||t.name!=="style"||((e=t.strings)===null||e===void 0?void 0:e.length)>2)throw Error("The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute.")}render(t){return Object.keys(t).reduce((e,n)=>{const r=t[n];return r==null?e:e+`${n=n.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g,"-$&").toLowerCase()}:${r};`},"")}update(t,[e]){const{style:n}=t.element;if(this.ut===void 0){this.ut=new Set;for(const r in e)this.ut.add(r);return this.render(e)}this.ut.forEach(r=>{e[r]==null&&(this.ut.delete(r),r.includes("-")?n.removeProperty(r):n[r]="")});for(const r in e){const i=e[r];i!=null&&(this.ut.add(r),r.includes("-")?n.setProperty(r,i):n[r]=i)}return ye}}),Zg="close-dialog";function YM(){return new CustomEvent(Zg,{bubbles:!0})}function xs(){const t=document.createElement("div");t.className="gs-modal";const e=r=>{var i;switch(r.key){case"Escape":{t.querySelector(".btn-cancel").click(),r.stopPropagation();break}case"Enter":{if(((i=r.target)==null?void 0:i.tagName)=="TEXTAREA")return;t.querySelector(".btn-primary").click(),r.stopPropagation();break}}};t.addEventListener("keydown",e),$e(I`<div class="backdrop"></div><div class="content"></div>`,t);const n=()=>{t.querySelector(".backdrop").addEventListener("transitionend",()=>t.remove()),t.classList.remove("visible"),document.body.classList.remove(yn)};return t.addEventListener("keydown",r=>{r.stopPropagation()}),t.addEventListener(Zg,n),document.body.appendChild(t),window.requestAnimationFrame(()=>t.classList.add("visible")),document.body.classList.add(yn),{content:t.querySelector(".content"),close:n}}function rt(t,e=void 0,n=!1){const r=xs();return new Promise((i,o)=>{const s=()=>{r.close(),i(!0)},a=I`${e?I`<div class="modal-title">${e}</div>`:Y}<div class="modal-body" style="max-width:700px">${t}</div><div class="modal-buttons">${n?I`<button @click="${()=>{r.close(),i(!1)}}">Cancel</button>`:Y} <button @click="${s}">OK</button></div>`;$e(a,r.content)})}function WM(t,e){var n,r;Qt((n=t.scale)==null?void 0:n.type)?XM(t,e):Je((r=t.scale)==null?void 0:r.type)?qM(t,e):rt("Not implemented (yet).")}function XM(t,e){const n=e.provenance.storeHelper.getDispatcher(),r=t.scale,i=xs(),o=I`<div class="modal-title">Filter by <em>${t.name}</em></div>`,s=new Set,a=d=>{n(e.actions.filterByNominal({values:r.domain().filter(p=>s.has(p)),attribute:t.attribute,remove:d})),i.close()},c=d=>{const p=d.target;p.checked?s.add(p.value):s.delete(p.value),h()},u=()=>I`<div class="modal-buttons"><button class="btn-cancel" @click="${()=>i.close()}">Cancel</button> <button ?disabled="${!s.size}" @click="${()=>a(!1)}">${me(gr).node[0]} Retain</button> <button ?disabled="${!s.size}" @click="${()=>a(!0)}">${me(Sg).node[0]} Remove</button></div>`,f=r,l=I`<p>Please select one or more categories and choose an action.</p><ul class="gs-checkbox-list" @input="${c}" tabindex="0">${r.domain().map(d=>I`<li><label class="checkbox"><span class="color" style="${_M({backgroundColor:f(d).toString()})}"></span> <input type="checkbox" .value="${d}"> ${d}</label></li>`)}</ul>`;function h(){$e(I`${o}<div class="modal-body">${l}</div>${u()}`,i.content)}h(),i.content.querySelector(".gs-checkbox-list input[type='checkbox']").focus()}function qM(t,e){const n=e.provenance.storeHelper.getDispatcher();let r="lt",i;const o=xs(),s=I`<div class="modal-title">Filter by <em>${t.name}</em></div>`,a=d=>{n(e.actions.filterByQuantitative({attribute:t.attribute,operator:r,operand:i})),o.close()},c=()=>I`<div class="modal-buttons"><button class="btn-cancel" @click="${()=>o.close()}">Cancel</button> <button class="btn-primary" ?disabled="${typeof i=="undefined"}" @click="${()=>a()}">${me(gr).node[0]} Retain</button></div>`,u=d=>{r=d.target.value,h()},f=d=>{const p=d.target.value;i=p.length>0?+p:void 0,h()},l=I`<div class="gs-form-group"><label>Select samples where <em>${t.name}</em> is</label> <select .value="${r}" @change="${u}">${Object.entries(ZM).map(([d,p])=>I`<option .value="${d}">${p}</option>`)}</select> <input type="number" placeholder="Please enter a numeric value" @input="${f}"></div>`;function h(){$e(I`${s}<div class="modal-body">${l}</div>${c()}`,o.content)}h(),o.content.querySelector("select").focus()}const ZM={lt:"less than",lte:"less than or equal to",eq:"equal to",gte:"greater than or equal to",gt:"greater than"};function Yu(t,e,n,r){var l;const i=r.actions,o=e.attribute,s=r.provenance.storeHelper.getDispatcher();let a=[{label:t,type:"header"}];const c=h=>{const d=r.provenance.getActionInfo(h);return{label:d.title,icon:d.icon,callback:()=>s(h)}},u=(...h)=>a.push(...h.map(c));u(i.sortBy({attribute:o}));const f=(l=e==null?void 0:e.type)!=null?l:"identifier";return f!="quantitative"?(f!="identifier"&&u(i.groupByNominal({attribute:o}),i.retainFirstOfEach({attribute:o})),u(i.filterByNominal({attribute:o,values:[n]}),i.filterByNominal({attribute:o,remove:!0,values:[n]}))):(u(i.groupToQuartiles({attribute:o})),KM(n)?u(i.filterByQuantitative({attribute:o,operator:"gte",operand:+n}),i.filterByQuantitative({attribute:o,operator:"lte",operand:+n})):u(i.removeUndefined({attribute:o}))),f!=="identifier"&&a.push({icon:gr,label:"Advanced filter...",callback:()=>WM(e,r)}),a}function KM(t){return t!=null&&t!==""&&!(typeof t=="number"&&isNaN(t))}function JM(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var tn={},Nn={};Object.defineProperty(Nn,"__esModule",{value:!0}),Nn.ActionCreators=Nn.ActionTypes=void 0;var Ln={UNDO:"@@redux-undo/UNDO",REDO:"@@redux-undo/REDO",JUMP_TO_FUTURE:"@@redux-undo/JUMP_TO_FUTURE",JUMP_TO_PAST:"@@redux-undo/JUMP_TO_PAST",JUMP:"@@redux-undo/JUMP",CLEAR_HISTORY:"@@redux-undo/CLEAR_HISTORY"};Nn.ActionTypes=Ln;var $M={undo:function(){return{type:Ln.UNDO}},redo:function(){return{type:Ln.REDO}},jumpToFuture:function(e){return{type:Ln.JUMP_TO_FUTURE,index:e}},jumpToPast:function(e){return{type:Ln.JUMP_TO_PAST,index:e}},jump:function(e){return{type:Ln.JUMP,index:e}},clearHistory:function(){return{type:Ln.CLEAR_HISTORY}}};Nn.ActionCreators=$M;var At={};Object.defineProperty(At,"__esModule",{value:!0}),At.parseActions=vs,At.isHistory=e8,At.includeAction=t8,At.excludeAction=n8,At.combineFilters=r8,At.groupByActionTypes=i8,At.newHistory=o8;function vs(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];return Array.isArray(t)?t:typeof t=="string"?[t]:e}function e8(t){return typeof t.present!="undefined"&&typeof t.future!="undefined"&&typeof t.past!="undefined"&&Array.isArray(t.future)&&Array.isArray(t.past)}function t8(t){var e=vs(t);return function(n){return e.indexOf(n.type)>=0}}function n8(t){var e=vs(t);return function(n){return e.indexOf(n.type)<0}}function r8(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];return e.reduce(function(r,i){return function(o,s,a){return r(o,s,a)&&i(o,s,a)}},function(){return!0})}function i8(t){var e=vs(t);return function(n){return e.indexOf(n.type)>=0?n.type:null}}function o8(t,e,n){var r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:null;return{past:t,present:e,future:n,group:r,_latestUnfiltered:e,index:t.length,limit:t.length+n.length+1}}var Kg={},yr={};Object.defineProperty(yr,"__esModule",{value:!0}),yr.set=p8,yr.start=f8,yr.end=h8,yr.log=d8;function bt(t){return c8(t)||a8(t)||s8()}function s8(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function a8(t){if(Symbol.iterator in Object(t)||Object.prototype.toString.call(t)==="[object Arguments]")return Array.from(t)}function c8(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);e<t.length;e++)n[e]=t[e];return n}}var ws,Xe,Wu={prevState:"#9E9E9E",action:"#03A9F4",nextState:"#4CAF50"};function u8(){Xe={header:[],prev:[],action:[],next:[],msgs:[]}}function l8(){var t=Xe,e=t.header,n=t.prev,r=t.next,i=t.action,o=t.msgs;if(console.group){var s,a,c,u,f;(s=console).groupCollapsed.apply(s,bt(e)),(a=console).log.apply(a,bt(n)),(c=console).log.apply(c,bt(i)),(u=console).log.apply(u,bt(r)),(f=console).log.apply(f,bt(o)),console.groupEnd()}else{var l,h,d,p,g;(l=console).log.apply(l,bt(e)),(h=console).log.apply(h,bt(n)),(d=console).log.apply(d,bt(i)),(p=console).log.apply(p,bt(r)),(g=console).log.apply(g,bt(o))}}function Xu(t,e,n){return["%c".concat(t),"color: ".concat(e,"; font-weight: bold"),n]}function f8(t,e){u8(),ws&&(console.group?(Xe.header=["%credux-undo","font-style: italic","action",t.type],Xe.action=Xu("action",Wu.action,t),Xe.prev=Xu("prev history",Wu.prevState,e)):(Xe.header=["redux-undo action",t.type],Xe.action=["action",t],Xe.prev=["prev history",e]))}function h8(t){ws&&(console.group?Xe.next=Xu("next history",Wu.nextState,t):Xe.next=["next history",t],l8())}function d8(){if(ws){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];Xe.msgs=Xe.msgs.concat([].concat(e,[`
|
2035
|
+
`]))}}function p8(t){ws=t}(function(t){function e(b){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?e=function(v){return typeof v}:e=function(v){return v&&typeof Symbol=="function"&&v.constructor===Symbol&&v!==Symbol.prototype?"symbol":typeof v},e(b)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=E;var n=s(yr),r=Nn,i=At;function o(){if(typeof WeakMap!="function")return null;var b=new WeakMap;return o=function(){return b},b}function s(b){if(b&&b.__esModule)return b;if(b===null||e(b)!=="object"&&typeof b!="function")return{default:b};var A=o();if(A&&A.has(b))return A.get(b);var v={},D=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var L in b)if(Object.prototype.hasOwnProperty.call(b,L)){var B=D?Object.getOwnPropertyDescriptor(b,L):null;B&&(B.get||B.set)?Object.defineProperty(v,L,B):v[L]=b[L]}return v.default=b,A&&A.set(b,v),v}function a(b,A){var v=Object.keys(b);if(Object.getOwnPropertySymbols){var D=Object.getOwnPropertySymbols(b);A&&(D=D.filter(function(L){return Object.getOwnPropertyDescriptor(b,L).enumerable})),v.push.apply(v,D)}return v}function c(b){for(var A=1;A<arguments.length;A++){var v=arguments[A]!=null?arguments[A]:{};A%2?a(Object(v),!0).forEach(function(D){u(b,D,v[D])}):Object.getOwnPropertyDescriptors?Object.defineProperties(b,Object.getOwnPropertyDescriptors(v)):a(Object(v)).forEach(function(D){Object.defineProperty(b,D,Object.getOwnPropertyDescriptor(v,D))})}return b}function u(b,A,v){return A in b?Object.defineProperty(b,A,{value:v,enumerable:!0,configurable:!0,writable:!0}):b[A]=v,b}function f(b){return d(b)||h(b)||l()}function l(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function h(b){if(Symbol.iterator in Object(b)||Object.prototype.toString.call(b)==="[object Arguments]")return Array.from(b)}function d(b){if(Array.isArray(b)){for(var A=0,v=new Array(b.length);A<b.length;A++)v[A]=b[A];return v}}function p(b,A){var v=(0,i.newHistory)([],b,[]);return A&&(v._latestUnfiltered=null),v}function g(b,A,v,D){var L=b.past.length+1;n.log("inserting",A),n.log("new free: ",v-L);var B=b.past,C=b._latestUnfiltered,k=v&&v<=L,P=B.slice(k?1:0),H=C!=null?[].concat(f(P),[C]):P;return(0,i.newHistory)(H,A,[],D)}function m(b,A){if(A<0||A>=b.future.length)return b;var v=b.past,D=b.future,L=b._latestUnfiltered,B=[].concat(f(v),[L],f(D.slice(0,A))),C=D[A],k=D.slice(A+1);return(0,i.newHistory)(B,C,k)}function y(b,A){if(A<0||A>=b.past.length)return b;var v=b.past,D=b.future,L=b._latestUnfiltered,B=v.slice(0,A),C=[].concat(f(v.slice(A+1)),[L],f(D)),k=v[A];return(0,i.newHistory)(B,k,C)}function w(b,A){return A>0?m(b,A-1):A<0?y(b,b.past.length+A):b}function x(b,A){return A.indexOf(b)>-1?b:!b}function E(b){var A=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};n.set(A.debug);var v=c({limit:void 0,filter:function(){return!0},groupBy:function(){return null},undoType:r.ActionTypes.UNDO,redoType:r.ActionTypes.REDO,jumpToPastType:r.ActionTypes.JUMP_TO_PAST,jumpToFutureType:r.ActionTypes.JUMP_TO_FUTURE,jumpType:r.ActionTypes.JUMP,neverSkipReducer:!1,ignoreInitialState:!1,syncFilter:!1},A,{initTypes:(0,i.parseActions)(A.initTypes,["@@redux-undo/INIT"]),clearHistoryType:(0,i.parseActions)(A.clearHistoryType,[r.ActionTypes.CLEAR_HISTORY])}),D=v.neverSkipReducer?function(B,C){for(var k=arguments.length,P=new Array(k>2?k-2:0),H=2;H<k;H++)P[H-2]=arguments[H];return c({},B,{present:b.apply(void 0,[B.present,C].concat(P))})}:function(B){return B},L;return function(){var B=arguments.length>0&&arguments[0]!==void 0?arguments[0]:L,C=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};n.start(C,B);for(var k=B,P=arguments.length,H=new Array(P>2?P-2:0),qe=2;qe<P;qe++)H[qe-2]=arguments[qe];if(!L)if(n.log("history is uninitialized"),B===void 0){var Re={type:"@@redux-undo/CREATE_HISTORY"},Ue=b.apply(void 0,[B,Re].concat(H));return k=p(Ue,v.ignoreInitialState),n.log("do not set initialState on probe actions"),n.end(k),k}else(0,i.isHistory)(B)?(k=L=v.ignoreInitialState?B:(0,i.newHistory)(B.past,B.present,B.future),n.log("initialHistory initialized: initialState is a history",L)):(k=L=p(B,v.ignoreInitialState),n.log("initialHistory initialized: initialState is not a history",L));var z;switch(C.type){case void 0:return k;case v.undoType:return z=w(k,-1),n.log("perform undo"),n.end(z),D.apply(void 0,[z,C].concat(H));case v.redoType:return z=w(k,1),n.log("perform redo"),n.end(z),D.apply(void 0,[z,C].concat(H));case v.jumpToPastType:return z=y(k,C.index),n.log("perform jumpToPast to ".concat(C.index)),n.end(z),D.apply(void 0,[z,C].concat(H));case v.jumpToFutureType:return z=m(k,C.index),n.log("perform jumpToFuture to ".concat(C.index)),n.end(z),D.apply(void 0,[z,C].concat(H));case v.jumpType:return z=w(k,C.index),n.log("perform jump to ".concat(C.index)),n.end(z),D.apply(void 0,[z,C].concat(H));case x(C.type,v.clearHistoryType):return z=p(k.present,v.ignoreInitialState),n.log("perform clearHistory"),n.end(z),D.apply(void 0,[z,C].concat(H));default:if(z=b.apply(void 0,[k.present,C].concat(H)),v.initTypes.some(function(Il){return Il===C.type}))return n.log("reset history due to init action"),n.end(L),L;if(k._latestUnfiltered===z)return k;var ne=typeof v.filter=="function"&&!v.filter(C,z,k);if(ne){var ji=(0,i.newHistory)(k.past,z,k.future,k.group);return v.syncFilter||(ji._latestUnfiltered=k._latestUnfiltered),n.log("filter ignored action, not storing it in past"),n.end(ji),ji}var Gi=v.groupBy(C,z,k);if(Gi!=null&&Gi===k.group){var Fs=(0,i.newHistory)(k.past,z,k.future,k.group);return n.log("groupBy grouped the action with the previous action"),n.end(Fs),Fs}return k=g(k,z,v.limit,Gi),n.log("inserted new state into history"),n.end(k),k}}}})(Kg),function(t){Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"ActionTypes",{enumerable:!0,get:function(){return e.ActionTypes}}),Object.defineProperty(t,"ActionCreators",{enumerable:!0,get:function(){return e.ActionCreators}}),Object.defineProperty(t,"parseActions",{enumerable:!0,get:function(){return n.parseActions}}),Object.defineProperty(t,"isHistory",{enumerable:!0,get:function(){return n.isHistory}}),Object.defineProperty(t,"includeAction",{enumerable:!0,get:function(){return n.includeAction}}),Object.defineProperty(t,"excludeAction",{enumerable:!0,get:function(){return n.excludeAction}}),Object.defineProperty(t,"combineFilters",{enumerable:!0,get:function(){return n.combineFilters}}),Object.defineProperty(t,"groupByActionTypes",{enumerable:!0,get:function(){return n.groupByActionTypes}}),Object.defineProperty(t,"newHistory",{enumerable:!0,get:function(){return n.newHistory}}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return r.default}});var e=Nn,n=At,r=i(Kg);function i(o){return o&&o.__esModule?o:{default:o}}}(tn);var g8=JM(tn);let kt;function Es(){kt&&(kt.remove(),kt=void 0,document.body.classList.remove(yn))}function qu(t,e){Es(),kt=document.createElement("div"),kt.classList.add("gs-context-menu-backdrop");const n=document.createElement("ul");n.classList.add("gs-context-menu");const r=document.body;$e(t.items.map(s=>{switch(s.type){case"divider":return I`<li class="menu-divider"></li>`;case"header":return I`<li class="menu-header">${s.label||"-"}</li>`;default:return s.callback?I`<li><a @mouseup="${()=>{performance.now()-o>200&&(Es(),s.callback())}}">${s.icon?me(s.icon).node[0]:""} ${s.label}</a></li>`:I`<li><span class="disabled-item">${s.icon?me(s.icon).node[0]:""} ${s.label||"-"}</span></li>`}}),n),n.style.left=e.clientX+"px",n.style.top=e.clientY+"px",r.appendChild(kt),kt.appendChild(n),document.body.classList.add(yn);const i=n.getBoundingClientRect();i.bottom>window.innerHeight&&(n.style.top=window.innerHeight-n.offsetHeight-10+"px"),i.right>window.innerWidth&&(n.style.left=window.innerWidth-n.offsetWidth-10+"px"),kt.addEventListener("click",()=>Es(),{once:!0});const o=performance.now();kt.addEventListener("mouseup",()=>{performance.now()-o>500&&Es()},{once:!0}),e.preventDefault()}const Zu={NOMINAL:"nominal",ORDINAL:"ordinal",QUANTITATIVE:"quantitative"},Ss="SAMPLE_ATTRIBUTE",Jg="SAMPLE_NAME",m8=/^attribute-(.*)$/;class $g extends hr{constructor(e){super({title:"Sample metadata",data:{dynamicSource:!0},hconcat:[],spacing:1,resolve:{scale:{default:"independent"},axis:{default:"independent"}}},e.context,void 0,"sample-metadata");this.sampleView=e,this._attributeHighlighState={backgroundOpacity:1,currentAttribute:void 0,abortController:new AbortController},this.sampleView.compositeAttributeInfoSource.addAttributeInfoSource(Ss,n=>this.children.map(this.getAttributeInfoFromView.bind(this)).find(r=>r&&r.name==n.specifier)),this.sampleView.compositeAttributeInfoSource.addAttributeInfoSource(Jg,n=>em),this.addInteractionEventListener("contextmenu",this.handleContextMenu.bind(this)),this.addInteractionEventListener("mousemove",(n,r)=>{var a;const i=r.target,o=this._findSampleForMouseEvent(n,r),s=i&&((a=this.getAttributeInfoFromView(i))==null?void 0:a.name)||void 0;if(o){const c=JSON.stringify([o.id,s]);this.context.updateTooltip(c,u=>Promise.resolve(this.sampleToTooltip(u)))}this._handleAttributeHighlight(s)}),he([...this.sampleView.getAncestors()]).addInteractionEventListener("mousemove",(n,r)=>{if(!!this._attributeHighlighState.currentAttribute){if(r.target){for(const i of r.target.getAncestors())if(i==this)return}this._handleAttributeHighlight(void 0)}})}getEncoding(e){return{}}render(e,n,r={}){!this.isVisible()||super.render(e,n,U(T({},r),{clipRect:this.sampleView._clipBySummary(n)}))}_handleAttributeHighlight(e){const n=this._attributeHighlighState;e!=n.currentAttribute&&(n.abortController.abort(),n.abortController=new AbortController,this.context.animator.transition(T({from:n.backgroundOpacity,onUpdate:r=>{n.backgroundOpacity=r},easingFunction:zp,signal:n.abortController.signal},e?{to:.1,duration:1e3,delay:n.backgroundOpacity<1?0:500}:{to:1,duration:200,delay:150})).catch(r=>{}),this.context.animator.requestRender()),n.currentAttribute=e}getSample(e){var n;return(n=this.sampleView.sampleHierarchy.sampleData)==null?void 0:n.entities[e]}_findSampleForMouseEvent(e,n){return this.sampleView.getSampleAt(n.point.y-e.y)}_getAttributeOpacity(e){const n=this._attributeHighlighState;return e==n.currentAttribute?1:n.backgroundOpacity}handleContextMenu(e,n){const r=n.uiEvent,i=this._findSampleForMouseEvent(e,n);if(!i){r.preventDefault();return}const o=[],s=this.getAttributeInfoFromView(n.target);if(s){const a=i.attributes[s.name];o.push(...Yu(I`Attribute: <strong>${s.name}</strong>`,s,a,this.sampleView))}else o.push(...Yu(I`Sample: <strong>${i.displayName}</strong>`,em,i.id,this.sampleView));qu({items:o},r)}_setSamples(e){if(this.children.length)throw new Error("Children are already created!");this._createViews();const n=this.context.dataFlow;sg(this,n);const r=n.findDataSourceByKey(this);r.visit(o=>o.initialize());const i=[];this.visit(o=>{if(o instanceof Oe){const s=o.mark;i.push(s.initializeGraphics().then(a=>s)),n.addObserver(a=>{s.initializeEncoders(),s.initializeData(),s.updateGraphicsData()},o)}}),Promise.allSettled(i).then(o=>{for(const s of o)"value"in s?s.value.finalizeGraphicsInitialization():"reason"in s&&console.error(s.reason)}),r.publishData(e)}_createViews(){this.addChildBySpec(A8());for(const e of this._getAttributeNames()){const n=this.addChildBySpec(this._createAttributeViewSpec(e));n.opacityFunction=r=>r*this._getAttributeOpacity(e)}cg(this)}_getAttributeDef(e){var n,r;return(r=(n=this.sampleView.spec.samples)==null?void 0:n.attributes)==null?void 0:r[e]}_getAttributeNames(){return this._cache("attributeNames",()=>[...this.sampleView.getSamples().flatMap(r=>Object.keys(r.attributes)).reduce((r,i)=>r.add(i),new Set)])}_createAttributeViewSpec(e){const n=this._getAttributeDef(e);let r=n?n.type:void 0;if(!r){const i=this.sampleView.getSamples();switch(If(i.map(o=>o.attributes[e]))){case"integer":case"number":r=Zu.QUANTITATIVE;break;default:r=Zu.NOMINAL}}return y8(e,U(T({},n||{}),{type:r}))}_findViewForAttribute(e){return this.children[this._getAttributeNames().indexOf(e)+1]}getAttributeInfoFromView(e){const n=e.name.match(m8);if(n){const r=e.getScaleResolution("color"),i=n[1];return{name:i,attribute:{type:Ss,specifier:i},accessor:(o,s)=>s.sampleData.entities[o].attributes[i],type:r.type,scale:r.getScale(),title:I`<em class="attribute">${i}</em>`}}}getAttributeInfo(e){return this.getAttributeInfoFromView(this._findViewForAttribute(e))}sampleToTooltip(e){const[n,r]=JSON.parse(e),i=this.getSample(n),o=(a,c)=>b8(c)?this.getAttributeInfo(a).scale(c):"transparent",s=I`<table class="attributes">${Object.entries(i.attributes).map(([a,c])=>I`<tr class="${XC({hovered:a==r})}"><th>${a}</th><td>${pg(c)}</td><td class="color" .style="background-color: ${o(a,c)}"></td></tr>`)}</table>`;return I`<div class="title"><strong>${i.displayName||i.id}</strong></div>${s}`}getDefaultResolution(e,n){return"independent"}handleVerboseCommand(e){const n=e;for(const r of this._getAttributeNames()){const i=this.getAttributeInfo(r);if((i.type==mu||i.type==yu)&&this.sampleView.getSamples().find(s=>s.attributes[i.name]==n)){const s=this.sampleView.actions.filterByNominal({attribute:{type:Ss,specifier:r},values:[n]}),a=this.sampleView.provenance.getPresentState().lastAction,c=this.sampleView.actions.filterByNominal.match(a)&&!a.payload.remove&&a.payload.attribute.type==Ss&&a.payload.attribute.specifier==r&&a.payload.values.length==1;return this.sampleView.provenance.storeHelper.dispatch(c?[tn.ActionCreators.undo(),s]:s),!0}}return!1}isPickingSupported(){return!1}}function y8(t,e){var i,o;const n=`attributes["${t}"]`,r={name:`attribute-${t}`,title:t,visible:(i=e.visible)!=null?i:!0,width:(o=e.width)!=null?o:10,transform:[{type:"filter",expr:`datum.${n} != null`}],mark:{type:"rect"},encoding:{facetIndex:{field:"indexNumber",type:"nominal"},color:{field:n,type:e.type,scale:e.scale}},opacity:1};return e.barScale&&e.type==Zu.QUANTITATIVE&&(r.encoding.x={field:`attributes["${t}"]`,type:e.type,scale:e.barScale,axis:null}),r}function A8(){return{name:"metadata-sample-name",title:"Sample name",width:140,mark:{type:"text",align:"left",baseline:"middle",size:11,flushY:!1},encoding:{facetIndex:{field:"indexNumber",type:"nominal"},x:{value:0},x2:{value:1},y:{value:0},y2:{value:1},text:{field:"displayName",type:"nominal"}}}}function b8(t){return t!==""&&!(typeof t=="number"&&isNaN(t))&&t!==null}const em=Object.freeze({name:"sample",attribute:{type:Jg},accessor:t=>t,type:"identifier",scale:void 0});class x8 extends Ti{constructor(e){super({title:"Groups",width:{step:22},data:{dynamicSource:!0},transform:[{type:"filter",expr:"datum._depth > 0"},{type:"formula",as:"_y1",expr:"datum._index * 2"},{type:"formula",as:"_y2",expr:"datum._index * 2 + 1"},{type:"formula",as:"_NA",expr:"datum.label == null"},{type:"formula",as:"label",expr:"datum.label != null ? datum.label: 'NA'"}],encoding:{x:{field:"_depth",type:"ordinal",scale:{align:0,padding:.2272727},axis:null},y:{field:"_y1",type:"nominal",scale:{type:"ordinal",domain:Ki(500)},axis:null},y2:{field:"_y2"}},layer:[{title:"Group",mark:{type:"rect",clip:!0,dynamicData:!0,color:"#e8e8e8"}},{mark:{type:"text",clip:!0,dynamicData:!0,angle:-90,paddingY:5,tooltip:null},encoding:{text:{field:"label",type:"nominal"},opacity:{field:"_NA",type:"nominal",scale:{type:"ordinal",domain:[!1,!0],range:[1,.3]}}}}]},e.context,void 0,"sample-groups");this.sampleView=e,this._addBroadcastHandler("layoutComputed",()=>{this.updateRange()})}updateRange(){var o,s,a;const e=(o=this.sampleView.getLocations())==null?void 0:o.groups;if(!(e==null?void 0:e.length))return;const n=(a=(s=this.sampleView)==null?void 0:s._coords.height)!=null?a:0,r=this.getScaleResolution("y"),i=[];for(const c of e)i.push(1-(c.locSize.location+c.locSize.size)/n),i.push(1-c.locSize.location/n);r.getScale().range(i),this.context.glHelper.createRangeTexture(r,!0)}updateGroups(){var i,o;const e=(o=(i=this.sampleView.getLocations())==null?void 0:i.groups)!=null?o:[],n=this.context.dataFlow.findDataSourceByKey(this);if(!n)return;const r=e.map(s=>({_index:s.key.index,_name:s.key.group.name,_depth:s.key.depth,attribute:s.key.attributeLabel,label:s.key.group.label,n:s.key.n}));n.publishData(r),this.getScaleResolution("x").reconfigure(),this.getScaleResolution("y").reconfigure(),e.length&&this.updateRange(),he([...this.getAncestors()]).visit(s=>Ei(s,"size"))}}function it(t){for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;r<e;r++)n[r-1]=arguments[r];throw Error("[Immer] minified error nr: "+t+(n.length?" "+n.map(function(i){return"'"+i+"'"}).join(","):"")+". Find the full error at: https://bit.ly/3cXEKWf")}function nn(t){return!!t&&!!t[ee]}function rn(t){return!!t&&(function(e){if(!e||typeof e!="object")return!1;var n=Object.getPrototypeOf(e);if(n===null)return!0;var r=Object.hasOwnProperty.call(n,"constructor")&&n.constructor;return r===Object||typeof r=="function"&&Function.toString.call(r)===T8}(t)||Array.isArray(t)||!!t[lm]||!!t.constructor[lm]||Ku(t)||Ju(t))}function On(t,e,n){n===void 0&&(n=!1),Ar(t)===0?(n?Object.keys:xr)(t).forEach(function(r){n&&typeof r=="symbol"||e(r,t[r],t)}):t.forEach(function(r,i){return e(i,r,t)})}function Ar(t){var e=t[ee];return e?e.i>3?e.i-4:e.i:Array.isArray(t)?1:Ku(t)?2:Ju(t)?3:0}function br(t,e){return Ar(t)===2?t.has(e):Object.prototype.hasOwnProperty.call(t,e)}function v8(t,e){return Ar(t)===2?t.get(e):t[e]}function tm(t,e,n){var r=Ar(t);r===2?t.set(e,n):r===3?(t.delete(e),t.add(n)):t[e]=n}function nm(t,e){return t===e?t!==0||1/t==1/e:t!=t&&e!=e}function Ku(t){return M8&&t instanceof Map}function Ju(t){return I8&&t instanceof Set}function kn(t){return t.o||t.t}function $u(t){if(Array.isArray(t))return Array.prototype.slice.call(t);var e=fm(t);delete e[ee];for(var n=xr(e),r=0;r<n.length;r++){var i=n[r],o=e[i];o.writable===!1&&(o.writable=!0,o.configurable=!0),(o.get||o.set)&&(e[i]={configurable:!0,writable:!0,enumerable:o.enumerable,value:t[i]})}return Object.create(Object.getPrototypeOf(t),e)}function el(t,e){return e===void 0&&(e=!1),tl(t)||nn(t)||!rn(t)||(Ar(t)>1&&(t.set=t.add=t.clear=t.delete=w8),Object.freeze(t),e&&On(t,function(n,r){return el(r,!0)},!0)),t}function w8(){it(2)}function tl(t){return t==null||typeof t!="object"||Object.isFrozen(t)}function Bt(t){var e=ll[t];return e||it(18,t),e}function E8(t,e){ll[t]||(ll[t]=e)}function nl(){return ki}function rl(t,e){e&&(Bt("Patches"),t.u=[],t.s=[],t.v=e)}function Ds(t){il(t),t.p.forEach(S8),t.p=null}function il(t){t===ki&&(ki=t.l)}function rm(t){return ki={p:[],l:ki,h:t,m:!0,_:0}}function S8(t){var e=t[ee];e.i===0||e.i===1?e.j():e.O=!0}function ol(t,e){e._=e.p.length;var n=e.p[0],r=t!==void 0&&t!==n;return e.h.g||Bt("ES5").S(e,t,r),r?(n[ee].P&&(Ds(e),it(4)),rn(t)&&(t=Cs(e,t),e.l||Ms(e,t)),e.u&&Bt("Patches").M(n[ee],t,e.u,e.s)):t=Cs(e,n,[]),Ds(e),e.u&&e.v(e.u,e.s),t!==um?t:void 0}function Cs(t,e,n){if(tl(e))return e;var r=e[ee];if(!r)return On(e,function(o,s){return im(t,r,e,o,s,n)},!0),e;if(r.A!==t)return e;if(!r.P)return Ms(t,r.t,!0),r.t;if(!r.I){r.I=!0,r.A._--;var i=r.i===4||r.i===5?r.o=$u(r.k):r.o;On(r.i===3?new Set(i):i,function(o,s){return im(t,r,i,o,s,n)}),Ms(t,i,!1),n&&t.u&&Bt("Patches").R(r,n,t.u,t.s)}return r.o}function im(t,e,n,r,i,o){if(nn(i)){var s=Cs(t,i,o&&e&&e.i!==3&&!br(e.D,r)?o.concat(r):void 0);if(tm(n,r,s),!nn(s))return;t.m=!1}if(rn(i)&&!tl(i)){if(!t.h.F&&t._<1)return;Cs(t,i),e&&e.A.l||Ms(t,i)}}function Ms(t,e,n){n===void 0&&(n=!1),t.h.F&&t.m&&el(e,n)}function sl(t,e){var n=t[ee];return(n?kn(n):t)[e]}function om(t,e){if(e in t)for(var n=Object.getPrototypeOf(t);n;){var r=Object.getOwnPropertyDescriptor(n,e);if(r)return r;n=Object.getPrototypeOf(n)}}function on(t){t.P||(t.P=!0,t.l&&on(t.l))}function al(t){t.o||(t.o=$u(t.t))}function cl(t,e,n){var r=Ku(e)?Bt("MapSet").N(e,n):Ju(e)?Bt("MapSet").T(e,n):t.g?function(i,o){var s=Array.isArray(i),a={i:s?1:0,A:o?o.A:nl(),P:!1,I:!1,D:{},l:o,t:i,k:null,o:null,j:null,C:!1},c=a,u=vr;s&&(c=[a],u=Is);var f=Proxy.revocable(c,u),l=f.revoke,h=f.proxy;return a.k=h,a.j=l,h}(e,n):Bt("ES5").J(e,n);return(n?n.A:nl()).p.push(r),r}function D8(t){return nn(t)||it(22,t),function e(n){if(!rn(n))return n;var r,i=n[ee],o=Ar(n);if(i){if(!i.P&&(i.i<4||!Bt("ES5").K(i)))return i.t;i.I=!0,r=sm(n,o),i.I=!1}else r=sm(n,o);return On(r,function(s,a){i&&v8(i.t,s)===a||tm(r,s,e(a))}),o===3?new Set(r):r}(t)}function sm(t,e){switch(e){case 2:return new Map(t);case 3:return Array.from(t)}return $u(t)}function C8(){function t(o,s){var a=i[o];return a?a.enumerable=s:i[o]=a={configurable:!0,enumerable:s,get:function(){var c=this[ee];return vr.get(c,o)},set:function(c){var u=this[ee];vr.set(u,o,c)}},a}function e(o){for(var s=o.length-1;s>=0;s--){var a=o[s][ee];if(!a.P)switch(a.i){case 5:r(a)&&on(a);break;case 4:n(a)&&on(a)}}}function n(o){for(var s=o.t,a=o.k,c=xr(a),u=c.length-1;u>=0;u--){var f=c[u];if(f!==ee){var l=s[f];if(l===void 0&&!br(s,f))return!0;var h=a[f],d=h&&h[ee];if(d?d.t!==l:!nm(h,l))return!0}}var p=!!s[ee];return c.length!==xr(s).length+(p?0:1)}function r(o){var s=o.k;if(s.length!==o.t.length)return!0;var a=Object.getOwnPropertyDescriptor(s,s.length-1);return!(!a||a.get)}var i={};E8("ES5",{J:function(o,s){var a=Array.isArray(o),c=function(f,l){if(f){for(var h=Array(l.length),d=0;d<l.length;d++)Object.defineProperty(h,""+d,t(d,!0));return h}var p=fm(l);delete p[ee];for(var g=xr(p),m=0;m<g.length;m++){var y=g[m];p[y]=t(y,f||!!p[y].enumerable)}return Object.create(Object.getPrototypeOf(l),p)}(a,o),u={i:a?5:4,A:s?s.A:nl(),P:!1,I:!1,D:{},l:s,t:o,k:c,o:null,O:!1,C:!1};return Object.defineProperty(c,ee,{value:u,writable:!0}),c},S:function(o,s,a){a?nn(s)&&s[ee].A===o&&e(o.p):(o.u&&function c(u){if(u&&typeof u=="object"){var f=u[ee];if(f){var l=f.t,h=f.k,d=f.D,p=f.i;if(p===4)On(h,function(x){x!==ee&&(l[x]!==void 0||br(l,x)?d[x]||c(h[x]):(d[x]=!0,on(f)))}),On(l,function(x){h[x]!==void 0||br(h,x)||(d[x]=!1,on(f))});else if(p===5){if(r(f)&&(on(f),d.length=!0),h.length<l.length)for(var g=h.length;g<l.length;g++)d[g]=!1;else for(var m=l.length;m<h.length;m++)d[m]=!0;for(var y=Math.min(h.length,l.length),w=0;w<y;w++)d[w]===void 0&&c(h[w])}}}}(o.p[0]),e(o.p))},K:function(o){return o.i===4?n(o):r(o)}})}var am,ki,ul=typeof Symbol!="undefined"&&typeof Symbol("x")=="symbol",M8=typeof Map!="undefined",I8=typeof Set!="undefined",cm=typeof Proxy!="undefined"&&Proxy.revocable!==void 0&&typeof Reflect!="undefined",um=ul?Symbol.for("immer-nothing"):((am={})["immer-nothing"]=!0,am),lm=ul?Symbol.for("immer-draftable"):"__$immer_draftable",ee=ul?Symbol.for("immer-state"):"__$immer_state",T8=""+Object.prototype.constructor,xr=typeof Reflect!="undefined"&&Reflect.ownKeys?Reflect.ownKeys:Object.getOwnPropertySymbols!==void 0?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:Object.getOwnPropertyNames,fm=Object.getOwnPropertyDescriptors||function(t){var e={};return xr(t).forEach(function(n){e[n]=Object.getOwnPropertyDescriptor(t,n)}),e},ll={},vr={get:function(t,e){if(e===ee)return t;var n=kn(t);if(!br(n,e))return function(i,o,s){var a,c=om(o,s);return c?"value"in c?c.value:(a=c.get)===null||a===void 0?void 0:a.call(i.k):void 0}(t,n,e);var r=n[e];return t.I||!rn(r)?r:r===sl(t.t,e)?(al(t),t.o[e]=cl(t.A.h,r,t)):r},has:function(t,e){return e in kn(t)},ownKeys:function(t){return Reflect.ownKeys(kn(t))},set:function(t,e,n){var r=om(kn(t),e);if(r==null?void 0:r.set)return r.set.call(t.k,n),!0;if(!t.P){var i=sl(kn(t),e),o=i==null?void 0:i[ee];if(o&&o.t===n)return t.o[e]=n,t.D[e]=!1,!0;if(nm(n,i)&&(n!==void 0||br(t.t,e)))return!0;al(t),on(t)}return t.o[e]===n&&typeof n!="number"&&(n!==void 0||e in t.o)||(t.o[e]=n,t.D[e]=!0,!0)},deleteProperty:function(t,e){return sl(t.t,e)!==void 0||e in t.t?(t.D[e]=!1,al(t),on(t)):delete t.D[e],t.o&&delete t.o[e],!0},getOwnPropertyDescriptor:function(t,e){var n=kn(t),r=Reflect.getOwnPropertyDescriptor(n,e);return r&&{writable:!0,configurable:t.i!==1||e!=="length",enumerable:r.enumerable,value:n[e]}},defineProperty:function(){it(11)},getPrototypeOf:function(t){return Object.getPrototypeOf(t.t)},setPrototypeOf:function(){it(12)}},Is={};On(vr,function(t,e){Is[t]=function(){return arguments[0]=arguments[0][0],e.apply(this,arguments)}}),Is.deleteProperty=function(t,e){return vr.deleteProperty.call(this,t[0],e)},Is.set=function(t,e,n){return vr.set.call(this,t[0],e,n,t[0])};var N8=function(){function t(n){var r=this;this.g=cm,this.F=!0,this.produce=function(i,o,s){if(typeof i=="function"&&typeof o!="function"){var a=o;o=i;var c=r;return function(d){var p=this;d===void 0&&(d=a);for(var g=arguments.length,m=Array(g>1?g-1:0),y=1;y<g;y++)m[y-1]=arguments[y];return c.produce(d,function(w){var x;return(x=o).call.apply(x,[p,w].concat(m))})}}var u;if(typeof o!="function"&&it(6),s!==void 0&&typeof s!="function"&&it(7),rn(i)){var f=rm(r),l=cl(r,i,void 0),h=!0;try{u=o(l),h=!1}finally{h?Ds(f):il(f)}return typeof Promise!="undefined"&&u instanceof Promise?u.then(function(d){return rl(f,s),ol(d,f)},function(d){throw Ds(f),d}):(rl(f,s),ol(u,f))}if(!i||typeof i!="object")return(u=o(i))===um?void 0:(u===void 0&&(u=i),r.F&&el(u,!0),u);it(21,i)},this.produceWithPatches=function(i,o){return typeof i=="function"?function(c){for(var u=arguments.length,f=Array(u>1?u-1:0),l=1;l<u;l++)f[l-1]=arguments[l];return r.produceWithPatches(c,function(h){return i.apply(void 0,[h].concat(f))})}:[r.produce(i,o,function(c,u){s=c,a=u}),s,a];var s,a},typeof(n==null?void 0:n.useProxies)=="boolean"&&this.setUseProxies(n.useProxies),typeof(n==null?void 0:n.autoFreeze)=="boolean"&&this.setAutoFreeze(n.autoFreeze)}var e=t.prototype;return e.createDraft=function(n){rn(n)||it(8),nn(n)&&(n=D8(n));var r=rm(this),i=cl(this,n,void 0);return i[ee].C=!0,il(r),i},e.finishDraft=function(n,r){var i=n&&n[ee],o=i.A;return rl(o,r),ol(void 0,o)},e.setAutoFreeze=function(n){this.F=n},e.setUseProxies=function(n){n&&!cm&&it(20),this.g=n},e.applyPatches=function(n,r){var i;for(i=r.length-1;i>=0;i--){var o=r[i];if(o.path.length===0&&o.op==="replace"){n=o.value;break}}var s=Bt("Patches").$;return nn(n)?s(n,r):this.produce(n,function(a){return s(a,r.slice(i+1))})},t}(),ze=new N8,L8=ze.produce;ze.produceWithPatches.bind(ze),ze.setAutoFreeze.bind(ze),ze.setUseProxies.bind(ze),ze.applyPatches.bind(ze),ze.createDraft.bind(ze),ze.finishDraft.bind(ze);var hm=L8;function O8(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function dm(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),n.push.apply(n,r)}return n}function pm(t){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{};e%2?dm(Object(n),!0).forEach(function(r){O8(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):dm(Object(n)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(n,r))})}return t}function ve(t){return"Minified Redux error #"+t+"; visit https://redux.js.org/Errors?code="+t+" for the full message or use the non-minified dev environment for full errors. "}var gm=function(){return typeof Symbol=="function"&&Symbol.observable||"@@observable"}(),fl=function(){return Math.random().toString(36).substring(7).split("").join(".")},Ts={INIT:"@@redux/INIT"+fl(),REPLACE:"@@redux/REPLACE"+fl(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+fl()}};function k8(t){if(typeof t!="object"||t===null)return!1;for(var e=t;Object.getPrototypeOf(e)!==null;)e=Object.getPrototypeOf(e);return Object.getPrototypeOf(t)===e}function mm(t,e,n){var r;if(typeof e=="function"&&typeof n=="function"||typeof n=="function"&&typeof arguments[3]=="function")throw new Error(ve(0));if(typeof e=="function"&&typeof n=="undefined"&&(n=e,e=void 0),typeof n!="undefined"){if(typeof n!="function")throw new Error(ve(1));return n(mm)(t,e)}if(typeof t!="function")throw new Error(ve(2));var i=t,o=e,s=[],a=s,c=!1;function u(){a===s&&(a=s.slice())}function f(){if(c)throw new Error(ve(3));return o}function l(g){if(typeof g!="function")throw new Error(ve(4));if(c)throw new Error(ve(5));var m=!0;return u(),a.push(g),function(){if(!!m){if(c)throw new Error(ve(6));m=!1,u();var w=a.indexOf(g);a.splice(w,1),s=null}}}function h(g){if(!k8(g))throw new Error(ve(7));if(typeof g.type=="undefined")throw new Error(ve(8));if(c)throw new Error(ve(9));try{c=!0,o=i(o,g)}finally{c=!1}for(var m=s=a,y=0;y<m.length;y++){var w=m[y];w()}return g}function d(g){if(typeof g!="function")throw new Error(ve(10));i=g,h({type:Ts.REPLACE})}function p(){var g,m=l;return g={subscribe:function(w){if(typeof w!="object"||w===null)throw new Error(ve(11));function x(){w.next&&w.next(f())}x();var E=m(x);return{unsubscribe:E}}},g[gm]=function(){return this},g}return h({type:Ts.INIT}),r={dispatch:h,subscribe:l,getState:f,replaceReducer:d},r[gm]=p,r}function B8(t){Object.keys(t).forEach(function(e){var n=t[e],r=n(void 0,{type:Ts.INIT});if(typeof r=="undefined")throw new Error(ve(12));if(typeof n(void 0,{type:Ts.PROBE_UNKNOWN_ACTION()})=="undefined")throw new Error(ve(13))})}function hl(t){for(var e=Object.keys(t),n={},r=0;r<e.length;r++){var i=e[r];typeof t[i]=="function"&&(n[i]=t[i])}var o=Object.keys(n),s;try{B8(n)}catch(a){s=a}return function(c,u){if(c===void 0&&(c={}),s)throw s;for(var f=!1,l={},h=0;h<o.length;h++){var d=o[h],p=n[d],g=c[d],m=p(g,u);if(typeof m=="undefined")throw u&&u.type,new Error(ve(14));l[d]=m,f=f||m!==g}return f=f||o.length!==Object.keys(c).length,f?l:c}}function Ns(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];return e.length===0?function(r){return r}:e.length===1?e[0]:e.reduce(function(r,i){return function(){return r(i.apply(void 0,arguments))}})}function F8(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];return function(r){return function(){var i=r.apply(void 0,arguments),o=function(){throw new Error(ve(15))},s={getState:i.getState,dispatch:function(){return o.apply(void 0,arguments)}},a=e.map(function(c){return c(s)});return o=Ns.apply(void 0,a)(i.dispatch),pm(pm({},i),{},{dispatch:o})}}}function P8(t,e){return t===e}function z8(t,e,n){if(e===null||n===null||e.length!==n.length)return!1;for(var r=e.length,i=0;i<r;i++)if(!t(e[i],n[i]))return!1;return!0}function R8(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:P8,n=null,r=null;return function(){return z8(e,n,arguments)||(r=t.apply(null,arguments)),n=arguments,r}}function U8(t){var e=Array.isArray(t[0])?t[0]:t;if(!e.every(function(r){return typeof r=="function"})){var n=e.map(function(r){return typeof r}).join(", ");throw new Error("Selector creators expect all input-selectors to be functions, "+("instead received the following types: ["+n+"]"))}return e}function j8(t){for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;r<e;r++)n[r-1]=arguments[r];return function(){for(var i=arguments.length,o=Array(i),s=0;s<i;s++)o[s]=arguments[s];var a=0,c=o.pop(),u=U8(o),f=t.apply(void 0,[function(){return a++,c.apply(null,arguments)}].concat(n)),l=t(function(){for(var h=[],d=u.length,p=0;p<d;p++)h.push(u[p].apply(null,arguments));return f.apply(null,h)});return l.resultFunc=c,l.dependencies=u,l.recomputations=function(){return a},l.resetRecomputations=function(){return a=0},l}}var G8=j8(R8);function ym(t){return function(e){var n=e.dispatch,r=e.getState;return function(i){return function(o){return typeof o=="function"?o(n,r,t):i(o)}}}}var dl=ym();dl.withExtraArgument=ym;var H8=globalThis&&globalThis.__extends||function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(r[o]=i[o])},t(e,n)};return function(e,n){if(typeof n!="function"&&n!==null)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");t(e,n);function r(){this.constructor=e}e.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}}();globalThis&&globalThis.__generator;var Ls=globalThis&&globalThis.__spreadArray||function(t,e){for(var n=0,r=e.length,i=t.length;n<r;n++,i++)t[i]=e[n];return t},Q8=Object.defineProperty,Am=Object.getOwnPropertySymbols,V8=Object.prototype.hasOwnProperty,_8=Object.prototype.propertyIsEnumerable,bm=function(t,e,n){return e in t?Q8(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n},Bi=function(t,e){for(var n in e||(e={}))V8.call(e,n)&&bm(t,n,e[n]);if(Am)for(var r=0,i=Am(e);r<i.length;r++){var n=i[r];_8.call(e,n)&&bm(t,n,e[n])}return t},Y8=typeof window!="undefined"&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(arguments.length!==0)return typeof arguments[0]=="object"?Ns:Ns.apply(null,arguments)};function W8(t){if(typeof t!="object"||t===null)return!1;for(var e=t;Object.getPrototypeOf(e)!==null;)e=Object.getPrototypeOf(e);return Object.getPrototypeOf(t)===e}var X8=function(t){H8(e,t);function e(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];var i=t.apply(this,n)||this;return Object.setPrototypeOf(i,e.prototype),i}return Object.defineProperty(e,Symbol.species,{get:function(){return e},enumerable:!1,configurable:!0}),e.prototype.concat=function(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];return t.prototype.concat.apply(this,n)},e.prototype.prepend=function(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];return n.length===1&&Array.isArray(n[0])?new(e.bind.apply(e,Ls([void 0],n[0].concat(this)))):new(e.bind.apply(e,Ls([void 0],n.concat(this))))},e}(Array);function q8(t){return typeof t=="boolean"}function Z8(){return function(e){return K8(e)}}function K8(t){t===void 0&&(t={});var e=t.thunk,n=e===void 0?!0:e;t.immutableCheck,t.serializableCheck;var r=new X8;return n&&(q8(n)?r.push(dl):r.push(dl.withExtraArgument(n.extraArgument))),r}var J8=!0;function $8(t){var e=Z8(),n=t||{},r=n.reducer,i=r===void 0?void 0:r,o=n.middleware,s=o===void 0?e():o,a=n.devTools,c=a===void 0?!0:a,u=n.preloadedState,f=u===void 0?void 0:u,l=n.enhancers,h=l===void 0?void 0:l,d;if(typeof i=="function")d=i;else if(W8(i))d=hl(i);else throw new Error('"reducer" is a required argument, and must be a function or an object of functions that can be passed to combineReducers');var p=s;typeof p=="function"&&(p=p(e));var g=F8.apply(void 0,p),m=Ns;c&&(m=Y8(Bi({trace:!J8},typeof c=="object"&&c)));var y=[g];Array.isArray(h)?y=Ls([g],h):typeof h=="function"&&(y=h(y));var w=m.apply(void 0,y);return mm(d,f,w)}function xm(t,e){function n(){for(var r=[],i=0;i<arguments.length;i++)r[i]=arguments[i];if(e){var o=e.apply(void 0,r);if(!o)throw new Error("prepareAction did not return an object");return Bi(Bi({type:t,payload:o.payload},"meta"in o&&{meta:o.meta}),"error"in o&&{error:o.error})}return{type:t,payload:r[0]}}return n.toString=function(){return""+t},n.type=t,n.match=function(r){return r.type===t},n}function vm(t){var e={},n=[],r,i={addCase:function(o,s){var a=typeof o=="string"?o:o.type;if(a in e)throw new Error("addCase cannot be called with two reducers for the same action type");return e[a]=s,i},addMatcher:function(o,s){return n.push({matcher:o,reducer:s}),i},addDefaultCase:function(o){return r=o,i}};return t(i),[e,n,r]}function e6(t,e,n,r){n===void 0&&(n=[]);var i=typeof e=="function"?vm(e):[e,n,r],o=i[0],s=i[1],a=i[2],c=hm(t,function(){});return function(u,f){u===void 0&&(u=c);var l=Ls([o[f.type]],s.filter(function(h){var d=h.matcher;return d(f)}).map(function(h){var d=h.reducer;return d}));return l.filter(function(h){return!!h}).length===0&&(l=[a]),l.reduce(function(h,d){if(d)if(nn(h)){var p=h,g=d(p,f);return typeof g=="undefined"?h:g}else{if(rn(h))return hm(h,function(m){return d(m,f)});var g=d(h,f);if(typeof g=="undefined"){if(h===null)return h;throw Error("A case reducer on a non-draftable value must not return undefined")}return g}return h},u)}}function t6(t,e){return t+"/"+e}function wm(t){var e=t.name,n=t.initialState;if(!e)throw new Error("`name` is a required option for createSlice");var r=t.reducers||{},i=typeof t.extraReducers=="function"?vm(t.extraReducers):[t.extraReducers],o=i[0],s=o===void 0?{}:o,a=i[1],c=a===void 0?[]:a,u=i[2],f=u===void 0?void 0:u,l=Object.keys(r),h={},d={},p={};l.forEach(function(y){var w=r[y],x=t6(e,y),E,b;"reducer"in w?(E=w.reducer,b=w.prepare):E=w,h[y]=E,d[x]=E,p[y]=b?xm(x,b):xm(x)});var g=Bi(Bi({},s),d),m=e6(n,g,c,f);return{name:e,reducer:m,actions:p,caseReducers:h}}C8();function Em(t,e,n,r){if(r&&!n)throw new Error("Custom labels need explicit group order!");const i=ny(t.samples,e),o=n?n.map(c=>[c,i.get(c)]).filter(c=>c[1]):[...i],a=t;a.groups=o.map(([c,u],f)=>({name:""+c,label:r?r[f]:c,samples:u})),delete t.samples}function n6(t,e){const n=Rn(".3~r"),r=o6(i6(t.samples,e,[0,.25,.5,.75,1]));r.length==1&&r.push(r[0]);const i=s=>`[${n(r[s])}, ${n(r[s+1])}${s<r.length-2?")":"]"}`,o=Ki(r.length-1).reverse();Em(t,r6(e,r.slice(1,r.length-1)),o,o.map(i))}function r6(t,e){return r=>{const i=t(r);if(!(!oe(i)||isNaN(i))){for(let o=0;o<e.length;o++)if(i<e[o])return o;return e.length}}}function i6(t,e,n){const r=oy(t.map(e).filter(i=>oe(i)&&!isNaN(i)));return n.map(i=>_l(r,i))}function o6(t){const e=[t[0]];for(let n=1;n<t.length;n++)t[n]!=t[n-1]&&e.push(t[n]);return e}function s6(t,e){var n=t+"",r=e+"";return n<r?-1:n==r?0:1}var a6=[].forEach;function c6(t,e,n){if(typeof e!="function")throw new TypeError(e+" is not a function");var r,i=[],o=[],s=[];a6.call(t,function(c,u,f){if(r=e(c,u,f),r===void 0)return void s.push(c);if(n===void 0&&typeof r=="symbol")throw new TypeError("Can't convert symbol to string");i.push(u),o[u]=r}),n===void 0&&(n=s6),i.sort(function(c,u){return n(o[c],o[u])});var a=i.map(function(c){return t[c]}).concat(s);return a.length!=t.length&&(a.length=t.length),a}function u6(t,e){const n=i=>i.copy().range(Ki(0,i.domain().length)).unknown(-1);let r;switch(e.type){case"quantitative":r=i=>oe(i)&&!isNaN(i)?-i:-1/0;break;case"ordinal":r=n(e.scale);break;case"nominal":r=i=>i||"";break}return i=>r(t(i))}function l6(t,e){const n=new Set,r=i=>{const o=n.has(i);return n.add(i),o};return t.filter(i=>!r(e(i)))}function f6(t,e,n=!1){return c6(t,e,(r,i)=>(n&&([r,i]=[i,r]),r<i?-1:r>i?1:0))}const h6={lt:(t,e)=>t<e,lte:(t,e)=>t<=e,eq:(t,e)=>t==e,gte:(t,e)=>t>=e,gt:(t,e)=>t>e};function d6(t,e,n,r){const i=h6[n];return t.filter(o=>i(e(o),r))}function p6(t,e,n,r){const i=new Set(r),o=a=>i.has(a),s=n=="remove"?a=>!o(a):o;return t.filter(a=>s(e(a)))}function g6(t,e){const n=r=>r!=null;return t.filter(r=>n(e(r)))}const Sm="setSamples",Dm="sortBy",Cm="retainFirstOfEach",Mm="filterByNominal",Im="filterByQuantitative",Tm="removeUndefined",Nm="groupByNominal",Lm="groupToQuartiles",wr="sampleView";function m6(){return{sampleData:void 0,groupMetadata:[],rootGroup:{name:"ROOT",label:"Root",samples:[]}}}function y6(t){const e=(n,r)=>{const i=t(n.attribute).accessor;return o=>i(o,r)};return wm({name:wr,initialState:m6(),reducers:{[Sm]:(n,r)=>{const i=r.payload.samples;if(n.sampleData)throw new Error("Samples have already been set!");if(i.some(s=>s.id===void 0||s.id===null))throw new Error('The sample metadata contains missing sample ids or the "sample" column is missing!');if(new Set(i.map(s=>s.id)).size!=i.length)throw new Error("The sample metadata contains duplicate sample ids!");const o=i.map((s,a)=>U(T({},s),{indexNumber:a}));n.sampleData={ids:o.map(s=>s.id),entities:Object.fromEntries(o.map(s=>[s.id,s]))},n.rootGroup={name:"ROOT",label:"Root",samples:n.sampleData.ids}},[Dm]:(n,r)=>{Fi(n,i=>f6(i,u6(e(r.payload,n),t(r.payload.attribute)),!1))},[Cm]:(n,r)=>{Fi(n,i=>l6(i,e(r.payload,n)))},[Im]:(n,r)=>{Fi(n,i=>d6(i,e(r.payload,n),r.payload.operator,r.payload.operand))},[Mm]:(n,r)=>{Fi(n,i=>p6(i,e(r.payload,n),r.payload.remove?"remove":"retain",r.payload.values))},[Tm]:(n,r)=>{Fi(n,i=>g6(i,e(r.payload,n)))},[Nm]:(n,r)=>{Om(n,i=>Em(i,e(r.payload,n))),n.groupMetadata.push({attribute:r.payload.attribute})},[Lm]:(n,r)=>{Om(n,i=>n6(i,e(r.payload,n))),n.groupMetadata.push({attribute:r.payload.attribute})}}})}function Fi(t,e){for(const n of km(t))n.samples=e(n.samples)}function Om(t,e){for(const n of km(t))e(n)}function km(t){return Bm(t).map(e=>he(e))}function pl(t){return t.provenance.present[wr]}function Bm(t){const e=[],n=[],r=i=>{if(e.push(i),Pm(i))for(const o of i.groups)r(o);else n.push([...e]);e.pop()};return r(t.rootGroup),n}function Fm(t){return"samples"in t}function Pm(t){return"groups"in t}function*zm(t){if(yield[t],Pm(t))for(const e of t.groups)for(const n of zm(e))yield[t,...n]}const A6=Rn(".4"),b6={lt:"<",lte:"\u2264",eq:"=",gte:"\u2265",gt:">"};function x6(t,e){if(!t.type.startsWith(wr))return;const n=t.payload,r=n.attribute&&e(n.attribute),i=r==null?void 0:r.name,o=(r==null?void 0:r.title)||I`<em>${i}</em>`,s={attributeName:i};switch(t.type.substring(wr.length+1)){case Sm:return U(T({},s),{title:"The initial state",icon:KC});case Dm:return U(T({},s),{title:"Sort by",provenanceTitle:I`Sort by ${o}`,icon:uM});case Cm:return U(T({},s),{title:I`Retain first sample of each unique <em>${i}</em>`,provenanceTitle:I`Retain first sample of each unique ${o}`,icon:rM});case Mm:{const c=n.values,u=c.length>1?I`{${c.map((l,h)=>I`${h>0?", ":""}<strong>${l}</strong>`)}}`:I`<strong>${c[0]}</strong>`,f=l=>I`${n.remove?"Remove":"Retain"} samples having ${c[0]===void 0||c[0]===null?I`undefined ${l}`:I`${l} ${c.length>1?"in":I`<span class="operator">=</span>`} ${u}`}`;return U(T({},s),{title:f(I`<em>${i}</em>`),provenanceTitle:f(o),icon:n.remove?Sg:gr})}case Im:{const c=u=>I`Retain samples having ${u} <span class="operator">${b6[n.operator]}</span> <strong>${A6(n.operand)}</strong>`;return U(T({},s),{title:c(I`<em>${i}</em>`),provenanceTitle:c(o),icon:gr})}case Tm:return U(T({},s),{title:"Remove samples having missing attribute",provenanceTitle:I`Remove samples having missing ${o}`,icon:gr});case Nm:return U(T({},s),{title:"Group by",provenanceTitle:I`Group by ${o}`,icon:Eg});case Lm:return U(T({},s),{title:"Group to quartiles",provenanceTitle:I`Group to quartiles by ${o}`,icon:Eg});default:return U(T({},s),{title:JSON.stringify(t),icon:wg})}}class v6{constructor(){this.attributeInfoSourcesByType={}}addAttributeInfoSource(e,n){this.attributeInfoSourcesByType[e]=n}getAttributeInfo(e){const n=this.attributeInfoSourcesByType[e.type];if(!n)throw new Error("Cannot find attribute info source for: "+JSON.stringify(e));const r=n(e);if(r)return r;throw new Error("Unknown attribute: "+JSON.stringify(e))}}function Os(t,e,n){let r=n&&t(n);return i=>{const o=t(i);o!==r&&(e(o,r),r=o)}}function Rm(t,{viewHeight:e=0,sampleHeight:n=0,groupSpacing:r=5,summaryHeight:i=0}){if(!e&&!n)throw new Error("viewHeight or sampleHeight must be provided!");const o=h=>he(h),s=t.map(h=>({path:h,sampleGroup:o(h),samples:o(h).samples})).filter(h=>h.samples.length),a=n?h=>({px:h.length*n+i,grow:0}):h=>({px:i,grow:h.length}),c=[];hs(s.map(h=>a(h.samples)),e,{spacing:r}).forEach((h,d)=>{c.push({key:s[d].path,locSize:h})});const u=[];for(const[h,d]of s.entries()){const p={grow:1},g=d.samples;hs(g.map(m=>p),Math.max(0,c[h].locSize.size-i),{offset:c[h].locSize.location+i}).forEach((m,y)=>{const{size:w,location:x}=m,E=w*.1*Qp(15,22,w);m.location=x+E,m.size=w-2*E,u.push({key:g[y],locSize:m})})}function*f(){const h=[];for(const d of c){const p=d.key,g=he(p);for(;h.length<=p.length&&h.length&&p[h.length-1]!=h[h.length-1].group;)yield h.pop();for(let m=0;m<h.length;m++){const y=h[m];y.locSize.size=d.locSize.location-y.locSize.location+d.locSize.size}for(let m=h.length;m<p.length;m++)h.push({group:p[m],locSize:T({},d.locSize),depth:h.length,n:0});for(const m of h)m.n+=g.samples.length}for(;h.length;)yield h.pop()}const l=[...f()].sort((h,d)=>h.depth-d.depth).map((h,d)=>({key:{index:d,group:h.group,depth:h.depth,n:h.n,attributeLabel:void 0},locSize:h.locSize}));return{samples:u,summaries:c,groups:l}}function w6(t,e){return e.find(n=>vp(n.locSize,t))}const Um="VALUE_AT_LOCUS",jm=10;class gl extends gt{constructor(e,n,r,i,o){super(e,n,r,i);var u;this.provenance=o,this.spec=e,this.stickySummaries=(u=e.stickySummaries)!=null?u:!0,this.compositeAttributeInfoSource=new v6,this.child=n.createView(e.spec,this,"sample-facets"),this.summaryViews=new hr({vconcat:[]},n,this,"sampleSummaries"),this.child.visit(f=>{f instanceof Oe&&this.summaryViews.children.push(...f.sampleAggregateViews)}),this.facetTexture=void 0,this.facetTextureData=void 0,this.peripheryView=new hr({title:"Sidebar",resolve:{scale:{default:"independent"},axis:{default:"independent"}},hconcat:[],spacing:0},n,this,"sample-sidebar"),this.groupPanel=new x8(this),this.peripheryView.addChild(this.groupPanel),this.attributePanel=new $g(this),this.peripheryView.addChild(this.attributePanel),this.child.addInteractionEventListener("contextmenu",this._handleContextMenu.bind(this)),this.provenance.storeHelper.subscribe(Os(f=>pl(f).rootGroup,f=>{this._locations=void 0,this.groupPanel.updateGroups(),this._peekState=0,this.context.requestLayoutReflow(),this.context.animator.requestRender()})),this.provenance.storeHelper.subscribe(Os(f=>pl(f).sampleData,f=>{const l=f&&Object.values(f.entities);!l||(this.attributePanel._setSamples(l),this.facetTextureData=new Float32Array(Math.ceil(l.length*2/4)*4),this.groupPanel.updateGroups())})),this.compositeAttributeInfoSource.addAttributeInfoSource(Um,f=>{const l=f.specifier,h=this.findDescendantByPath(l.path);let d;if(oe(l.locus))d=l.locus;else{const m=this.getScaleResolution("x").getGenome();if(m)d=m.toContinuous(l.locus.chrom,l.locus.pos);else throw new Error("Encountered a complex locus but no genome is available!")}const p=m=>{var y;return(y=h.mark.findDatumAt(m,d))==null?void 0:y[l.field]};return{name:l.field,attribute:f,title:I`<em class="attribute">${l.field}</em> <span class="viewTitle">(${h.spec.title||h.name})</span> at <span class="locus">${Gm(l.locus)}</span>`,accessor:p,type:"quantitative",scale:void 0}}),this._addBroadcastHandler("dataLoaded",()=>this.extractSamplesFromData()),this._addBroadcastHandler("layout",()=>{this._locations=void 0}),this._scrollOffset=0,this._scrollableHeight=0,this._peekState=0,this._lastMouseY=-1,this.addInteractionEventListener("mousemove",(f,l)=>{this._lastMouseY=l.point.y-f.y}),this.addInteractionEventListener("wheel",(f,l)=>{const h=l.uiEvent;this._peekState&&!h.ctrlKey&&(this._scrollOffset=uu(this._scrollOffset+h.deltaY,0,this._scrollableHeight-this._coords.height),this.groupPanel.updateRange(),this.context.animator.requestRender(),l.uiEvent={type:h.type,deltaX:h.deltaX,preventDefault:h.preventDefault.bind(h)})},!0),n.addKeyboardListener("keydown",f=>{f.code=="KeyE"&&!f.repeat&&this._togglePeek()}),n.addKeyboardListener("keyup",f=>{f.code=="KeyE"&&this._togglePeek(!1)});const s=f=>this.compositeAttributeInfoSource.getAttributeInfo(f),a=y6(s);this.provenance.addReducer(a.name,a.reducer),this.provenance.addActionInfoSource(f=>x6(f,s)),this.actions=a.actions;const c=G8(f=>{var l;return(l=f.sampleData)==null?void 0:l.entities},f=>f&&Object.values(f));this.getSamples=()=>c(this.sampleHierarchy),this.spec.samples.data&&this.loadSamples()}getEffectivePadding(){return this._cache("size/effectivePadding",()=>{const e=this.peripheryView.isVisible()?this.peripheryView.getSize().width.px+jm:0,n=this.child.getEffectivePadding();return this.getPadding().add(new We(0,n.right,0,n.left+e))})}*[Symbol.iterator](){yield this.child,yield this.peripheryView}replaceChild(e,n){const r=n;if(e===this.child)this.child=r;else throw new Error("Not my child!")}loadSamples(){if(!this.spec.samples.data)throw new Error("SampleView has no explicit sample metadata specified! Cannot load anything.");const{dataSource:e,collector:n}=cC(rg(this.spec.samples.data,this.getBaseUrl()),new E6);n.observers.push(i=>{const o=i.getData();this.provenance.storeHelper.dispatch(this.actions.setSamples({samples:o}))});const r="samples "+this.getPathString();this.context.dataFlow.addDataSource(e,r)}extractSamplesFromData(){if(this.getSamples())return;const e=this.getScaleResolution("sample");if(e){const n=e.getDataDomain().map((r,i)=>({id:r,displayName:r,indexNumber:i,attributes:[]}));this.provenance.storeHelper.dispatch(this.actions.setSamples({samples:n}))}else throw new Error("No explicit sample data nor sample channels found!")}get sampleHierarchy(){return this.provenance.getPresentState()[wr]}getLocations(){var e,n,r;if(!this._locations){if(!this._coords)return;const i=this.sampleHierarchy,o=Bm(i),s=[null,...i.groupMetadata],a=(r=((e=this.summaryViews)==null?void 0:e.isVisible())&&((n=this.summaryViews)==null?void 0:n.getSize().height.px))!=null?r:0,c=Rm(o,{viewHeight:this._coords.height,groupSpacing:5,summaryHeight:a}),u=Rm(o,{sampleHeight:35,groupSpacing:15,summaryHeight:a}),f=()=>-this._scrollOffset,l=()=>this._peekState;this._scrollableLocations=u,this._scrollableHeight=u.summaries.map(g=>g.locSize.location+g.locSize.size).reduce((g,m)=>Math.max(g,m),0);const h=(g,m)=>{const y=[];for(let w=0;w<g.length;w++){const x=g[w].key;y.push({key:x,locSize:ES(g[w].locSize,SS(m[w].locSize,f),l)})}return y},d=h(c.groups,u.groups),p=document.createElement("div");d.forEach(g=>{if(g.key.depth==0)return;const m=s[g.key.depth].attribute,y=this.compositeAttributeInfoSource.getAttributeInfo(m).title;y?se(y)?g.key.attributeLabel=y:($e(y,p),g.key.attributeLabel=p.textContent.replace(/\s+/g," ").trim()):g.key.attributeLabel="unknown"}),this._locations={samples:h(c.samples,u.samples),summaries:h(c.summaries,u.summaries),groups:d}}return this._locations}getSampleAt(e){const n=w6(e,this.getLocations().samples);if(n)return this.sampleHierarchy.sampleData.entities[n.key]}getSummaryAt(e){const n=this.getLocations().summaries,r=n.findIndex(i=>vp(i.locSize,e));return r>=0?{index:r,location:n[r]}:void 0}_clipBySummary(e){if(this.stickySummaries&&this.summaryViews.children.length){const n=this.summaryViews.getSize().height.px;return e.modify({y:()=>e.y+n,height:()=>e.height-n})}}renderChild(e,n,r={}){const i=1/n.height,o=()=>i,s=this._clipBySummary(n);for(const a of this.getLocations().samples)this.child.render(e,n,U(T({},r),{sampleFacetRenderingOptions:{locSize:DS(a.locSize,o)},facetId:[a.key],clipRect:s}))}renderSummaries(e,n,r={}){r=U(T({},r),{clipRect:n});const i=this.summaryViews.getSize().height.px;for(const[o,s]of this.getLocations().summaries.entries()){const a=()=>{const c=s.locSize.location;let u=n.y+c;return this.stickySummaries?u+uu(-c,0,s.locSize.size-i):u};this.summaryViews.render(e,n.modify({y:a,height:i}),U(T({},r),{facetId:[o]}))}}render(e,n,r={}){if(!this.isVisible())return;n=n.shrink(this.getPadding()),e.pushView(this,n),this._coords=n;const i=hs([this.peripheryView.isVisible()?this.peripheryView.getSize().width:{px:0},{grow:1}],n.width,{spacing:jm}),o=s=>n.modify({x:s.location+n.x,width:s.size});this.peripheryView.render(e,o(i[0]),r),this.renderChild(e,o(i[1]),r),this.renderSummaries(e,o(i[1]),r),e.popView(this)}onBeforeRender(){this._updateFacetTexture()}_updateFacetTexture(){var i;const e=this.facetTextureData;e.fill(0);const n=(i=this.sampleHierarchy.sampleData)==null?void 0:i.entities;if(n){const o=this.getLocations().samples,s=this._coords.height;for(const a of o){const c=n[a.key].indexNumber;e[c*2+0]=a.locSize.location/s,e[c*2+1]=a.locSize.size/s}}const r=this.context.glHelper.gl;this.facetTexture=Di(r,{internalFormat:r.RG32F,format:r.RG,height:1},e,this.facetTexture)}_togglePeek(e){var r;if(this._peekState>0&&this._peekState<1||e!==void 0&&e==!!this._peekState)return;const n={requestAnimationFrame:i=>this.context.animator.requestTransition(i),onUpdate:i=>{this._peekState=Math.pow(i,2),this.groupPanel.updateRange(),this.context.animator.requestRender()},from:this._peekState};if(this._peekState==0){const i=this._lastMouseY,o=(r=this.getSampleAt(i))==null?void 0:r.id;let s;if(o)s=(c=>c.location+c.size/2)(this._scrollableLocations.samples.find(c=>c.key==o).locSize);else{const a=this.getSummaryAt(i);a&&(s=this._scrollableLocations.summaries[a.index].locSize.location-(a.location.locSize.location-i))}if(s?this._scrollOffset=s-i:this._scrollOffset=(this._scrollableHeight-this._coords.height)/2,this._scrollableHeight>this._coords.height)gs(U(T({},n),{to:1,duration:500,easingFunction:cD}));else{const a=c=>(1-Math.pow(c*2-1,2))*.5;gs(U(T({},n),{from:0,to:1,duration:300,easingFunction:a}))}}else gs(U(T({},n),{to:0,duration:400,easingFunction:sD}))}_handleContextMenu(e,n){const r=n.uiEvent,i=e.normalizePoint(n.point.x,n.point.y).x,o=this.getScaleResolution("x").invertToComplex(i),s=gC(this.child).filter(c=>!["sample","x","x2"].includes(c.channel)).filter(c=>["rect","rule"].includes(c.view.getMarkType()));let a=[{label:`Locus: ${Gm(o)}`,type:"header"},{type:"divider"}];for(const[c,u]of s.entries()){let f=[...u.view.getAncestors()];f=f.slice(0,f.findIndex(d=>d===this));const l={path:f.map(d=>d.name).reverse(),field:u.field,locus:o},h=this.compositeAttributeInfoSource.getAttributeInfo({type:Um,specifier:l});c>0&&a.push({type:"divider"}),a.push(...Yu(I`<strong>${u.field}</strong> (${u.view.spec.title||u.view.spec.name})`,h,void 0,this))}qu({items:a},r)}getSampleFacetTexture(){return this.facetTexture}getDefaultResolution(e,n){switch(e){case"x":case"sample":return"shared";default:return"independent"}}}function Gm(t){return!oe(t)&&"chrom"in t?JS(t):""+t}class E6 extends ie{constructor(){super();this.reset()}reset(){this._index=0}handle(e){this._propagate({id:e.sample,displayName:e.displayName||e.sample,indexNumber:this._index++,attributes:S6(e)})}}function S6(t){const e=Object.assign({},t);return delete e.sample,delete e.displayName,e}function D6(t){return"samples"in t&&Be(t.samples)&&"spec"in t&&Be(t.spec)}const C6=(t,e)=>e.some(n=>t instanceof n);let Hm,Qm;function M6(){return Hm||(Hm=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])}function I6(){return Qm||(Qm=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])}const Vm=new WeakMap,ml=new WeakMap,_m=new WeakMap,yl=new WeakMap,Al=new WeakMap;function T6(t){const e=new Promise((n,r)=>{const i=()=>{t.removeEventListener("success",o),t.removeEventListener("error",s)},o=()=>{n(sn(t.result)),i()},s=()=>{r(t.error),i()};t.addEventListener("success",o),t.addEventListener("error",s)});return e.then(n=>{n instanceof IDBCursor&&Vm.set(n,t)}).catch(()=>{}),Al.set(e,t),e}function N6(t){if(ml.has(t))return;const e=new Promise((n,r)=>{const i=()=>{t.removeEventListener("complete",o),t.removeEventListener("error",s),t.removeEventListener("abort",s)},o=()=>{n(),i()},s=()=>{r(t.error||new DOMException("AbortError","AbortError")),i()};t.addEventListener("complete",o),t.addEventListener("error",s),t.addEventListener("abort",s)});ml.set(t,e)}let bl={get(t,e,n){if(t instanceof IDBTransaction){if(e==="done")return ml.get(t);if(e==="objectStoreNames")return t.objectStoreNames||_m.get(t);if(e==="store")return n.objectStoreNames[1]?void 0:n.objectStore(n.objectStoreNames[0])}return sn(t[e])},set(t,e,n){return t[e]=n,!0},has(t,e){return t instanceof IDBTransaction&&(e==="done"||e==="store")?!0:e in t}};function L6(t){bl=t(bl)}function O6(t){return t===IDBDatabase.prototype.transaction&&!("objectStoreNames"in IDBTransaction.prototype)?function(e,...n){const r=t.call(xl(this),e,...n);return _m.set(r,e.sort?e.sort():[e]),sn(r)}:I6().includes(t)?function(...e){return t.apply(xl(this),e),sn(Vm.get(this))}:function(...e){return sn(t.apply(xl(this),e))}}function k6(t){return typeof t=="function"?O6(t):(t instanceof IDBTransaction&&N6(t),C6(t,M6())?new Proxy(t,bl):t)}function sn(t){if(t instanceof IDBRequest)return T6(t);if(yl.has(t))return yl.get(t);const e=k6(t);return e!==t&&(yl.set(t,e),Al.set(e,t)),e}const xl=t=>Al.get(t);function B6(t,e,{blocked:n,upgrade:r,blocking:i,terminated:o}={}){const s=indexedDB.open(t,e),a=sn(s);return r&&s.addEventListener("upgradeneeded",c=>{r(sn(s.result),c.oldVersion,c.newVersion,sn(s.transaction))}),n&&s.addEventListener("blocked",()=>n()),a.then(c=>{o&&c.addEventListener("close",()=>o()),i&&c.addEventListener("versionchange",()=>i())}).catch(()=>{}),a}const F6=["get","getKey","getAll","getAllKeys","count"],P6=["put","add","delete","clear"],vl=new Map;function Ym(t,e){if(!(t instanceof IDBDatabase&&!(e in t)&&typeof e=="string"))return;if(vl.get(e))return vl.get(e);const n=e.replace(/FromIndex$/,""),r=e!==n,i=P6.includes(n);if(!(n in(r?IDBIndex:IDBObjectStore).prototype)||!(i||F6.includes(n)))return;const o=async function(s,...a){const c=this.transaction(s,i?"readwrite":"readonly");let u=c.store;return r&&(u=u.index(a.shift())),(await Promise.all([u[n](...a),i&&c.done]))[0]};return vl.set(e,o),o}L6(t=>U(T({},t),{get:(e,n,r)=>Ym(e,n)||t.get(e,n,r),has:(e,n)=>!!Ym(e,n)||t.has(e,n)}));const Pi="bookmarks";class z6{constructor(e){this.specId=e,this._db=void 0}async _getDB(){if(!this._db){const e=`GenomeSpy: ${this.specId}`;this._db=B6(e,1,{upgrade(n,r,i,o){n.createObjectStore(Pi,{keyPath:"name"})},blocked(){},blocking(){},terminated(){}})}return this._db}async put(e,n){const i=(await this._getDB()).transaction(Pi,"readwrite");try{n?(await i.store.delete(n.name),await i.store.put(e)):await i.store.put(e),await i.done}catch(o){throw i.abort(),o}}async delete(e){(await this._getDB()).delete(Pi,e)}async getNames(){return(await this._getDB()).getAllKeys(Pi)}async get(e){return(await this._getDB()).get(Pi,e)}}/**
|
2036
|
+
* @license
|
2037
|
+
* Copyright 2020 Google LLC
|
2038
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
2039
|
+
*/const R6=t=>t===null||typeof t!="object"&&typeof t!="function",Wm=t=>t.strings===void 0,U6={},j6=(t,e=U6)=>t._$AH=e;/**
|
2040
|
+
* @license
|
2041
|
+
* Copyright 2017 Google LLC
|
2042
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
2043
|
+
*/const zi=(t,e)=>{var n,r;const i=t._$AN;if(i===void 0)return!1;for(const o of i)(r=(n=o)._$AO)===null||r===void 0||r.call(n,e,!1),zi(o,e);return!0},ks=t=>{let e,n;do{if((e=t._$AM)===void 0)break;n=e._$AN,n.delete(t),t=e}while((n==null?void 0:n.size)===0)},Xm=t=>{for(let e;e=t._$AM;t=e){let n=e._$AN;if(n===void 0)e._$AN=n=new Set;else if(n.has(t))break;n.add(t),Q6(e)}};function G6(t){this._$AN!==void 0?(ks(this),this._$AM=t,Xm(this)):this._$AM=t}function H6(t,e=!1,n=0){const r=this._$AH,i=this._$AN;if(i!==void 0&&i.size!==0)if(e)if(Array.isArray(r))for(let o=n;o<r.length;o++)zi(r[o],!1),ks(r[o]);else r!=null&&(zi(r,!1),ks(r));else zi(this,t)}const Q6=t=>{var e,n,r,i;t.type==Nt.CHILD&&((e=(r=t)._$AP)!==null&&e!==void 0||(r._$AP=H6),(n=(i=t)._$AQ)!==null&&n!==void 0||(i._$AQ=G6))};class qm extends Oi{constructor(){super(...arguments),this._$AN=void 0}_$AT(e,n,r){super._$AT(e,n,r),Xm(this),this.isConnected=e._$AU}_$AO(e,n=!0){var r,i;e!==this.isConnected&&(this.isConnected=e,e?(r=this.reconnected)===null||r===void 0||r.call(this):(i=this.disconnected)===null||i===void 0||i.call(this)),n&&(zi(this,e),ks(this))}setValue(e){if(Wm(this._$Ct))this._$Ct._$AI(e,this);else{const n=[...this._$Ct._$AH];n[this._$Ci]=e,this._$Ct._$AI(n,this,0)}}disconnected(){}reconnected(){}}/**
|
2044
|
+
* @license
|
2045
|
+
* Copyright 2020 Google LLC
|
2046
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
2047
|
+
*/const Zm=()=>new V6;class V6{}const wl=new WeakMap,Km=pr(class extends qm{render(t){return Y}update(t,[e]){var n;const r=e!==this.U;return r&&this.U!==void 0&&this.nt(void 0),(r||this.rt!==this.lt)&&(this.U=e,this.ht=(n=t.options)===null||n===void 0?void 0:n.host,this.nt(this.lt=t.element)),Y}nt(t){typeof this.U=="function"?(wl.get(this.U)!==void 0&&this.U.call(this.ht,void 0),wl.set(this.U,t),t!==void 0&&this.U.call(this.ht,t)):this.U.value=t}get rt(){var t;return typeof this.U=="function"?wl.get(this.U):(t=this.U)===null||t===void 0?void 0:t.value}disconnected(){this.rt===this.lt&&this.nt(void 0)}reconnected(){this.nt(this.lt)}});/**
|
2048
|
+
* @license
|
2049
|
+
* Copyright 2018 Google LLC
|
2050
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
2051
|
+
*/const _6={},Y6=pr(class extends Oi{constructor(){super(...arguments),this.ot=_6}render(t,e){return e()}update(t,[e,n]){if(Array.isArray(e)){if(Array.isArray(this.ot)&&this.ot.length===e.length&&e.every((r,i)=>r===this.ot[i]))return ye}else if(this.ot===e)return ye;return this.ot=Array.isArray(e)?Array.from(e):e,this.render(e,n)}});class W6 extends Tt{constructor(){super();this.inputRef=Zm(),this.genomeSpy=void 0,this.getDefaultValue=()=>"",this._keyListener=this._onKeyDown.bind(this),this._documentClickListener=e=>{var n;e.target!==this._inputField&&((n=this._inputField)==null||n.blur())},this._focused=!1}get _inputField(){return this.inputRef.value}static get properties(){return{genomeSpy:{type:Object}}}connectedCallback(){super.connectedCallback(),this._initializeGenome(),document.addEventListener("keydown",this._keyListener),document.addEventListener("click",this._documentClickListener)}disconnectedCallback(){super.disconnectedCallback(),document.removeEventListener("keydown",this._keyListener),document.removeEventListener("click",this._documentClickListener)}createRenderRoot(){return this}_onKeyDown(e){switch(e.code){case"KeyF":e.metaKey||e.altKey||e.ctrlKey||(e.preventDefault(),this.inputRef.value.focus());break}}_initializeGenome(){const e=Jm(this.genomeSpy.viewRoot);e&&(this._genomeResolution=e,this._genome=this.genomeSpy.genomeStore.getGenome(),this.getDefaultValue=()=>this._genome.formatInterval(e.getDomain()),e.addEventListener("domain",Nu(()=>this.requestUpdate(),60,!1)))}async searchViews(e){var r,i;const n=new Intl.Collator("en",{usage:"search",sensitivity:"base"});for(const o of this.genomeSpy.getSearchableViews()){const s=o.getAccessor("search"),a=o.getAccessor("x"),c=o.getAccessor("x2"),u=o.getScaleResolution("x");if(!(!a||!c||!(u==null?void 0:u.isZoomable()))){for(const f of(i=(r=o.getCollector())==null?void 0:r.getData())!=null?i:[])if(n.compare(s(f),e)===0){const l=Yi([a(f),c(f)],null,1.2);return await u.zoomTo(l),!0}}}return!1}async search(e){await(async()=>{if(this._genomeResolution&&this._genome){const r=this._genome.parseInterval(e);if(r){this._genomeResolution.zoomTo(r);return}if(await this.searchViews(e))return;this.genomeSpy.viewRoot.visit(i=>{i instanceof $g&&i.handleVerboseCommand(e)})}})(),this._inputField.value=this.getDefaultValue(),this.requestUpdate()}_onSearchHelpClicked(e){const n=e.target;n.tagName=="LI"&&this._doExampleSearch(n.innerText)}_onSearchFocused(e){const n=e.target;switch(e.type){case"focus":this._focused=!0,n.select();break;case"blur":this._focused=!1;break}}_onSearchKeyDown(e){const n=e.target;e.code=="Enter"?(e.preventDefault(),this.search(n.value).then(()=>{n.focus(),n.select()}).catch(r=>{console.log(r),alert(r)})):e.code=="Escape"?n.blur():e.stopPropagation()}_doExampleSearch(e){X6(e,this._inputField).then(()=>{this._inputField.blur(),this.search(e)})}_getSearchHelp(){var n,r;const e=[];e.push(I`<p>Focus to a specific range. Examples:</p><ul><li>chr8:21,445,873-24,623,697</li><li>chr4:166,014,727-chr15:23,731,397</li></ul>`);for(const i of((n=this.genomeSpy)==null?void 0:n.getSearchableViews())||[]){const o=(r=i.spec.title)!=null?r:i.spec.name,s=i.getAccessor("search"),a=s.fields.join(", "),c=Ap(3,i.getCollector().getData(),s);e.push(I`<p>Search <em>${o}</em> (${a}). Examples:</p><ul>${c.map(u=>I`<li>${u}</li>`)}</ul>`)}return I`<div class="search-help" @click="${this._onSearchHelpClicked}">${e}</div>`}updated(e){this._focused&&this._inputField.select()}render(){return I`<div class="search"><input type="text" class="search-input" .value="${this.getDefaultValue()}" @mousedown="${e=>{this._focused||(this._inputField.focus(),e.preventDefault(),e.stopPropagation())}}" @keydown="${this._onSearchKeyDown.bind(this)}" @focus="${this._onSearchFocused}" @blur="${this._onSearchFocused}" ${Km(this.inputRef)}> ${Y6([123],()=>this._getSearchHelp())}</div>`}}customElements.define("genome-spy-search-field",W6);function X6(t,e){return new Promise(n=>{let r=0;const i=700/t.length+30;function o(){e.value=t.substring(0,r),r>=t.length?setTimeout(n,500):(r++,setTimeout(o,Math.random()*i*2))}o()})}function Jm(t){let e;return t.visit(n=>{for(const r of["x","y"]){const i=n.resolutions.scale[r];if(i&&i.type=="locus"&&i.isZoomable())return e=i,Mn}}),e}var $m="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzIgMzIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEuNSI+PHBhdGggZD0iTTQuNyAyMS4ycy40IDIuMyAxLjMgMy42QzcgMjYgOS44IDI4IDkuOCAyOHMzLjQtMi42IDYuNC04LjVjMCAwIDEgLjEgMS45LS40LjktLjYuOC0uNCAxLTEuMiAwIDAgMi45LjUgNi42IDAgMi4xLS4zIDQuMy0xIDYuMi0yLjUgMCAwLTEuMS0xLjctMi41LTUuMS0uNS0xLjMtMi0xLjgtNC42LTQuNmwtOC4yIDguNi0xMS45IDYuOXoiIGZpbGwtb3BhY2l0eT0iLjEiLz48cGF0aCBkPSJNMTIuNyAxNC44cy00LTEuOC0xMiAyLjdjMCAwIDEgMy43IDIuNSA1LjMgMS40IDEuNSAyLjMgMy42IDQuNiA0LjYgMCAwIDQuNy0zIDYuOS05LjJsMy0yczQuNyAyLjggMTIuNi0xLjZjMCAwLS42LTMuMy0zLTYtMi42LTMtMy44LTQuNy0zLjgtNC43cy00LjEgMi4zLTcuNSA5LjNsLTMuMyAxLjZ6IiBmaWxsPSIjN2ZiYmRkIi8+PHBhdGggZD0iTTEyLjQgMTUuNWMtLjctLjUtMi40LS44LTQuNC0uNC0yIC40LTQgMS4zLTQuOCAxLjgtLjUuMy0xLjIgMS0xLjIgMS40IDAgLjcuMyAxLjguOCAyLjQuMy4zLjcuNSAxLjQuNi44IDAgMi41LTEuNCAzLjUtMiAxLS42IDEuNi0uOCAyLjctMS4ybC0yLjkgMi40Yy0xLjMgMS4yLTIuMiAxLjUtMi40IDIuMyAwIC41IDAgMS40LjUgMS44LjQuNS42LjggMS42LjguNiAwIDEgMCAyLjYtMS41LjktLjkgMi4zLTMgMi43LTMuNy42LTEuMSAxLTIuMi43LTMtLjItMS0uNC0xLjQtLjgtMS43ek0xNy40IDE0LjJjLS4zLS41LS45LTEuMi0uMi0yLjVsMS45LTNjLjUtLjggMi0yLjMgMi42LTIuNi42LS40IDEuNS0uNiAyLS4yLjYuNCAxIDEgMS4zIDEuNS40LjYuNyAxLjMuMiAyLS43IDEtMS42LjktMi44IDEuNy0xLjIuOC0xLjkgMS4yLTIuNSAxLjlsMy44LTEuOGMxLjMtLjYgMi43LTEuMSAzLjQtLjcuOC41LjguNyAxIDEuNC4zIDEtLjIgMS45LS44IDIuNC0uNS42LTEuNS45LTIuNiAxLjItMS40LjQtNC41IDEtNS44LjUtMS4zLS41LTEuMy0xLjQtMS41LTEuOHoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNMTIuNyAxNC44cy00LTEuOC0xMiAyLjdjMCAwIDEgMy43IDIuNSA1LjMgMS40IDEuNSAyLjMgMy42IDQuNiA0LjYgMCAwIDQuNy0zIDYuOS05LjJsMy0yczQuNyAyLjggMTIuNi0xLjZjMCAwLS42LTMuMy0zLTYtMi42LTMtMy44LTQuNy0zLjgtNC43cy00LjEgMi4zLTcuNSA5LjNsLTMuMyAxLjZ6IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iLjUiLz48cGF0aCBkPSJNMTIuNCAxNC45czIuMS0yIDMtMmMxLjEgMCAyLjMgMi43IDIuMyAzLjUgMCAuOC0yLjEgMi40LTMuMSAyLjMgMCAwIDAtMS4yLS43LTIuNi0uOC0xLjMtMS41LTEuMi0xLjUtMS4yeiIgZmlsbD0iIzdmYmJkZCIvPjxwYXRoIGQ9Ik0xMy44IDE1LjNjLjkuOC42IDIgMS40IDEuOCAxLS4yIDEuNC0uOCAxLjMtMS41IDAtLjcgMC0uOC0uNC0xLjYtLjMtLjctMS0xLjEtMi0uNS0uNy41LTEuNCAxLjMtMS40IDEuM3MuMi0uMyAxLjEuNXoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNMTIuNCAxNC45czIuMS0yIDMtMmMxLjEgMCAyLjMgMi43IDIuMyAzLjUgMCAuOC0yLjEgMi40LTMuMSAyLjMgMCAwIDAtMS4yLS43LTIuNi0uOC0xLjMtMS41LTEuMi0xLjUtMS4yeiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9Ii41Ii8+PC9zdmc+";/**
|
2052
|
+
* @license
|
2053
|
+
* Copyright 2020 Google LLC
|
2054
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
2055
|
+
*/const q6=pr(class extends Oi{constructor(t){if(super(t),t.type!==Nt.PROPERTY&&t.type!==Nt.ATTRIBUTE&&t.type!==Nt.BOOLEAN_ATTRIBUTE)throw Error("The `live` directive is not allowed on child or event bindings");if(!Wm(t))throw Error("`live` bindings can only contain a single expression")}render(t){return t}update(t,[e]){if(e===ye||e===Y)return e;const n=t.element,r=t.name;if(t.type===Nt.PROPERTY){if(e===n[r])return ye}else if(t.type===Nt.BOOLEAN_ATTRIBUTE){if(!!e===n.hasAttribute(r))return ye}else if(t.type===Nt.ATTRIBUTE&&n.getAttribute(r)===e+"")return ye;return j6(t),e}});function e1(t,e){return new CustomEvent("query-dependency",{detail:{name:t,setter:e},bubbles:!0})}function Z6(t){if(!(t==null?void 0:t.length))throw new Error("Can't nest an empty array!");const e=t1(null);for(const n of t){if(!(n==null?void 0:n.length))throw new Error("Cannot nest, element has no path!");let r=e;for(const i of n){let o=r.children.find(s=>s.item===i);o||(o=t1(i),r.children.push(o)),r=o}}return e.children[0]}const t1=t=>({item:t,children:[]}),El=new Set;function Sl(t){const n=t.currentTarget.parentNode,r=!n.classList.contains("show");for(const i of El)i.classList.remove("show"),document.body.classList.remove(yn);return El.clear(),t.stopPropagation(),r?(El.add(n),n.classList.add("show"),document.body.classList.add(yn),window.addEventListener("click",i=>{n.classList.contains("show")&&(n.classList.remove("show"),document.body.classList.remove(yn),i.preventDefault())},{once:!0})):window.dispatchEvent(new MouseEvent("click")),r}const Dl={visibilities:{}},Ri=wm({name:"viewSettings",initialState:Dl,reducers:{setVisibility:(t,e)=>{t.visibilities[e.payload.name]=e.payload.visibility},restoreDefaultVisibility:(t,e)=>{delete t.visibilities[e.payload]},restoreDefaultVisibilities:(t,e)=>Dl,setViewSettings:(t,e)=>T(T({},Dl),e.payload?e.payload:{})}});class K6 extends Tt{constructor(){super();this.app=void 0,this.nestedPaths=void 0,this.sateWatcher=Os(e=>e.viewSettings,(e,n)=>this.requestUpdate()),this.style.display="none"}connectedCallback(){super.connectedCallback(),this.dispatchEvent(e1("app",e=>{this.app=e})),this.app.addInitializationListener(()=>{this.updateToggles(),this.requestUpdate(),this.style.display=this.nestedPaths.children.length?"block":"none"}),this.app.storeHelper.subscribe(this.sateWatcher)}disconnectedCallback(){this.app.storeHelper.unsubscribe(this.sateWatcher)}createRenderRoot(){return this}toolButtonClicked(e){Sl(e)}handleCheckboxClick(e,n){const r=e.target.checked;this.app.storeHelper.dispatch(r!=n.isVisibleInSpec()?Ri.actions.setVisibility({name:n.name,visibility:r}):Ri.actions.restoreDefaultVisibility(n.name)),this.requestUpdate(),e.stopPropagation()}handleResetClick(){this.app.storeHelper.dispatch(Ri.actions.restoreDefaultVisibilities())}updateToggles(){const e=this.app.genomeSpy.viewRoot;if(!e)return;const n=[];e.visit(i=>{if(i instanceof Su)return lr;n.push(i)});const r=n.filter(i=>!(i instanceof Cu)&&bC(i.name)&&n1(i)).map(i=>[...i.getAncestors()].filter(o=>!(o instanceof Cu)).reverse());this.nestedPaths=Z6(r)}renderToggles(){const e=this.getVisibilities(),n=this.app.genomeSpy.viewRoot,r=AC(n);var i=(s,a=!0)=>s.length?I`<ul class="${a?null:"unchecked"}">${s.map(o)}</ul>`:Y,o=s=>{var u,f;const a=s.item,c=(u=e[a.name])!=null?u:a.isVisibleInSpec();return I`<li><label class="checkbox"><input type="checkbox" ?disabled="${!r.has(a.name)||!n1(a)}" .checked="${q6(c)}" @change="${l=>this.handleCheckboxClick(l,a)}">${(f=a.spec.title)!=null?f:a.name}</label> ${i(s.children,c)}</li>`};return i(this.nestedPaths.children)}render(){const e=!Object.keys(this.getVisibilities()).length;return I`<div class="dropdown bookmark-dropdown"><button class="tool-btn" title="Toggle view visibilities" @click="${this.toolButtonClicked.bind(this)}">${me(cM).node[0]}</button><ul class="gs-dropdown-menu" @click="${n=>n.stopPropagation()}"><li class="menu-header">View visibility</li><li>${e?I`<span class="disabled-item">Restore defaults</span>`:I`<a @click="${()=>this.handleResetClick()}">Restore defaults</a>`}</li><li class="menu-divider"></li><li>${this.nestedPaths?this.renderToggles():Y}</li></ul></div>`}getVisibilities(){return this.app.storeHelper.state.viewSettings.visibilities}}const n1=t=>{var e;return(e=t.spec.configurableVisibility)!=null?e:!(t.parent&&t.parent instanceof Ti)};customElements.define("genome-spy-view-visibility",K6);class J6 extends Tt{constructor(){super();this.provenance=void 0}connectedCallback(){super.connectedCallback(),this.provenance.storeHelper.subscribe(()=>{this.requestUpdate()})}disconnectedCallback(){super.disconnectedCallback()}createRenderRoot(){return this}render(){const e=(r,i)=>{var s,a;const o=this.provenance.getActionInfo(r);return o?I`<li><a @click="${()=>this.provenance.activateState(i)}" class="${i==this.provenance.getCurrentIndex()?"active":""}">${me((s=o.icon)!=null?s:wg).node[0]} ${(a=o.provenanceTitle)!=null?a:o.title}</a></li>`:Y},n=()=>I`<div class="dropdown provenance-dropdown"><button class="tool-btn" title="Provenance" ?disabled="${this.provenance.isEmpty()}" @click="${Sl}">${me(JC).node[0]}</button><ol class="gs-dropdown-menu provenance-menu">${this.provenance.getFullActionHistory().map(e)}</ol></div>`;return I`<div class="btn-group" @click="${r=>r.stopPropagation()}"><button class="tool-btn" title="Backtrack samples (B)" ?disabled="${!this.provenance.isUndoable()}" @click="${()=>this.provenance.undo()}">${me(fM).node[0]}</button> ${n()} <button class="tool-btn" title="Redo" ?disabled="${!this.provenance.isRedoable()}" @click="${()=>this.provenance.redo()}">${me(sM).node[0]}</button></div>`}}customElements.define("genome-spy-provenance-buttons",J6);/**
|
2056
|
+
* @license
|
2057
|
+
* Copyright 2021 Google LLC
|
2058
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
2059
|
+
*/class $6{constructor(e){this.U=e}disconnect(){this.U=void 0}reconnect(e){this.U=e}deref(){return this.U}}class eI{constructor(){this.Y=void 0,this.q=void 0}get(){return this.Y}pause(){var e;(e=this.Y)!==null&&e!==void 0||(this.Y=new Promise(n=>this.q=n))}resume(){var e;(e=this.q)===null||e===void 0||e.call(this),this.Y=this.q=void 0}}/**
|
2060
|
+
* @license
|
2061
|
+
* Copyright 2017 Google LLC
|
2062
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
2063
|
+
*/const r1=t=>!R6(t)&&typeof t.then=="function";class tI extends qm{constructor(){super(...arguments),this._$Cft=1073741823,this._$Cwt=[],this._$CG=new $6(this),this._$CK=new eI}render(...e){var n;return(n=e.find(r=>!r1(r)))!==null&&n!==void 0?n:ye}update(e,n){const r=this._$Cwt;let i=r.length;this._$Cwt=n;const o=this._$CG,s=this._$CK;this.isConnected||this.disconnected();for(let a=0;a<n.length&&!(a>this._$Cft);a++){const c=n[a];if(!r1(c))return this._$Cft=a,c;a<i&&c===r[a]||(this._$Cft=1073741823,i=0,Promise.resolve(c).then(async u=>{for(;s.get();)await s.get();const f=o.deref();if(f!==void 0){const l=f._$Cwt.indexOf(c);l>-1&&l<f._$Cft&&(f._$Cft=l,f.setValue(u))}}))}return ye}disconnected(){this._$CG.disconnect(),this._$CK.pause()}reconnected(){this._$CG.reconnect(this),this._$CK.resume()}}const nI=pr(tI);var Cl={exports:{}};(function(t){var e=function(){var n=String.fromCharCode,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$",o={};function s(c,u){if(!o[c]){o[c]={};for(var f=0;f<c.length;f++)o[c][c.charAt(f)]=f}return o[c][u]}var a={compressToBase64:function(c){if(c==null)return"";var u=a._compress(c,6,function(f){return r.charAt(f)});switch(u.length%4){default:case 0:return u;case 1:return u+"===";case 2:return u+"==";case 3:return u+"="}},decompressFromBase64:function(c){return c==null?"":c==""?null:a._decompress(c.length,32,function(u){return s(r,c.charAt(u))})},compressToUTF16:function(c){return c==null?"":a._compress(c,15,function(u){return n(u+32)})+" "},decompressFromUTF16:function(c){return c==null?"":c==""?null:a._decompress(c.length,16384,function(u){return c.charCodeAt(u)-32})},compressToUint8Array:function(c){for(var u=a.compress(c),f=new Uint8Array(u.length*2),l=0,h=u.length;l<h;l++){var d=u.charCodeAt(l);f[l*2]=d>>>8,f[l*2+1]=d%256}return f},decompressFromUint8Array:function(c){if(c==null)return a.decompress(c);for(var u=new Array(c.length/2),f=0,l=u.length;f<l;f++)u[f]=c[f*2]*256+c[f*2+1];var h=[];return u.forEach(function(d){h.push(n(d))}),a.decompress(h.join(""))},compressToEncodedURIComponent:function(c){return c==null?"":a._compress(c,6,function(u){return i.charAt(u)})},decompressFromEncodedURIComponent:function(c){return c==null?"":c==""?null:(c=c.replace(/ /g,"+"),a._decompress(c.length,32,function(u){return s(i,c.charAt(u))}))},compress:function(c){return a._compress(c,16,function(u){return n(u)})},_compress:function(c,u,f){if(c==null)return"";var l,h,d={},p={},g="",m="",y="",w=2,x=3,E=2,b=[],A=0,v=0,D;for(D=0;D<c.length;D+=1)if(g=c.charAt(D),Object.prototype.hasOwnProperty.call(d,g)||(d[g]=x++,p[g]=!0),m=y+g,Object.prototype.hasOwnProperty.call(d,m))y=m;else{if(Object.prototype.hasOwnProperty.call(p,y)){if(y.charCodeAt(0)<256){for(l=0;l<E;l++)A=A<<1,v==u-1?(v=0,b.push(f(A)),A=0):v++;for(h=y.charCodeAt(0),l=0;l<8;l++)A=A<<1|h&1,v==u-1?(v=0,b.push(f(A)),A=0):v++,h=h>>1}else{for(h=1,l=0;l<E;l++)A=A<<1|h,v==u-1?(v=0,b.push(f(A)),A=0):v++,h=0;for(h=y.charCodeAt(0),l=0;l<16;l++)A=A<<1|h&1,v==u-1?(v=0,b.push(f(A)),A=0):v++,h=h>>1}w--,w==0&&(w=Math.pow(2,E),E++),delete p[y]}else for(h=d[y],l=0;l<E;l++)A=A<<1|h&1,v==u-1?(v=0,b.push(f(A)),A=0):v++,h=h>>1;w--,w==0&&(w=Math.pow(2,E),E++),d[m]=x++,y=String(g)}if(y!==""){if(Object.prototype.hasOwnProperty.call(p,y)){if(y.charCodeAt(0)<256){for(l=0;l<E;l++)A=A<<1,v==u-1?(v=0,b.push(f(A)),A=0):v++;for(h=y.charCodeAt(0),l=0;l<8;l++)A=A<<1|h&1,v==u-1?(v=0,b.push(f(A)),A=0):v++,h=h>>1}else{for(h=1,l=0;l<E;l++)A=A<<1|h,v==u-1?(v=0,b.push(f(A)),A=0):v++,h=0;for(h=y.charCodeAt(0),l=0;l<16;l++)A=A<<1|h&1,v==u-1?(v=0,b.push(f(A)),A=0):v++,h=h>>1}w--,w==0&&(w=Math.pow(2,E),E++),delete p[y]}else for(h=d[y],l=0;l<E;l++)A=A<<1|h&1,v==u-1?(v=0,b.push(f(A)),A=0):v++,h=h>>1;w--,w==0&&(w=Math.pow(2,E),E++)}for(h=2,l=0;l<E;l++)A=A<<1|h&1,v==u-1?(v=0,b.push(f(A)),A=0):v++,h=h>>1;for(;;)if(A=A<<1,v==u-1){b.push(f(A));break}else v++;return b.join("")},decompress:function(c){return c==null?"":c==""?null:a._decompress(c.length,32768,function(u){return c.charCodeAt(u)})},_decompress:function(c,u,f){var l=[],h=4,d=4,p=3,g="",m=[],y,w,x,E,b,A,v,D={val:f(0),position:u,index:1};for(y=0;y<3;y+=1)l[y]=y;for(x=0,b=Math.pow(2,2),A=1;A!=b;)E=D.val&D.position,D.position>>=1,D.position==0&&(D.position=u,D.val=f(D.index++)),x|=(E>0?1:0)*A,A<<=1;switch(x){case 0:for(x=0,b=Math.pow(2,8),A=1;A!=b;)E=D.val&D.position,D.position>>=1,D.position==0&&(D.position=u,D.val=f(D.index++)),x|=(E>0?1:0)*A,A<<=1;v=n(x);break;case 1:for(x=0,b=Math.pow(2,16),A=1;A!=b;)E=D.val&D.position,D.position>>=1,D.position==0&&(D.position=u,D.val=f(D.index++)),x|=(E>0?1:0)*A,A<<=1;v=n(x);break;case 2:return""}for(l[3]=v,w=v,m.push(v);;){if(D.index>c)return"";for(x=0,b=Math.pow(2,p),A=1;A!=b;)E=D.val&D.position,D.position>>=1,D.position==0&&(D.position=u,D.val=f(D.index++)),x|=(E>0?1:0)*A,A<<=1;switch(v=x){case 0:for(x=0,b=Math.pow(2,8),A=1;A!=b;)E=D.val&D.position,D.position>>=1,D.position==0&&(D.position=u,D.val=f(D.index++)),x|=(E>0?1:0)*A,A<<=1;l[d++]=n(x),v=d-1,h--;break;case 1:for(x=0,b=Math.pow(2,16),A=1;A!=b;)E=D.val&D.position,D.position>>=1,D.position==0&&(D.position=u,D.val=f(D.index++)),x|=(E>0?1:0)*A,A<<=1;l[d++]=n(x),v=d-1,h--;break;case 2:return m.join("")}if(h==0&&(h=Math.pow(2,p),p++),l[v])g=l[v];else if(v===d)g=w+w.charAt(0);else return null;m.push(g),l[d++]=w+g.charAt(0),h--,w=g,h==0&&(h=Math.pow(2,p),p++)}}};return a}();t!=null&&(t.exports=e)})(Cl);function rI(){const t=typeof process!="undefined"?require("util").TextEncoder:TextEncoder;return new t}let Bs;function iI(){let t,e=[];for(let n=0;n<256;n++){t=n;for(let r=0;r<8;r++)t=t&1?3988292384^t>>>1:t>>>1;e[n]=t}return e}function oI(t){Bs!=null||(Bs=iI());let e=0^-1;const n=rI().encode(t);for(let r=0;r<n.length;r++)e=e>>>8^Bs[(e^n[r])&255];return(e^-1)>>>0}function i1(t){return("00000000"+oI(t).toString(16)).slice(-8)}function o1(t){const e=Cl.exports.compressToEncodedURIComponent(JSON.stringify(t));return"#"+e+i1(e)}function sI(t){if(!t||t.length<10)throw new Error("The state string in the URL is too short.");const e=t.slice(1,-8),n=t.slice(-8);if(i1(e)!==n)throw new Error("The state string in the URL is corrupted.");return JSON.parse(Cl.exports.decompressFromEncodedURIComponent(e))}var aI={"":["<em>","</em>"],_:["<strong>","</strong>"],"*":["<strong>","</strong>"],"~":["<s>","</s>"],"\n":["<br />"]," ":["<br />"],"-":["<hr />"]};function s1(t){return t.replace(RegExp("^"+(t.match(/^(\t| )+/)||"")[0],"gm"),"")}function Ui(t){return(t+"").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function Ml(t,e){var n,r,i,o,s,a=/((?:^|\n+)(?:\n---+|\* \*(?: \*)+)\n)|(?:^``` *(\w*)\n([\s\S]*?)\n```$)|((?:(?:^|\n+)(?:\t| {2,}).+)+\n*)|((?:(?:^|\n)([>*+-]|\d+\.)\s+.*)+)|(?:!\[([^\]]*?)\]\(([^)]+?)\))|(\[)|(\](?:\(([^)]+?)\))?)|(?:(?:^|\n+)([^\s].*)\n(-{3,}|={3,})(?:\n+|$))|(?:(?:^|\n+)(#{1,6})\s*(.+)(?:\n+|$))|(?:`([^`].*?)`)|( \n\n*|\n{2,}|__|\*\*|[_*]|~~)/gm,c=[],u="",f=e||{},l=0;function h(p){var g=aI[p[1]||""],m=c[c.length-1]==p;return g?g[1]?(m?c.pop():c.push(p),g[0|m]):g[0]:p}function d(){for(var p="";c.length;)p+=h(c[c.length-1]);return p}for(t=t.replace(/^\[(.+?)\]:\s*(.+)$/gm,function(p,g,m){return f[g.toLowerCase()]=m,""}).replace(/^\n+|\n+$/g,"");i=a.exec(t);)r=t.substring(l,i.index),l=a.lastIndex,n=i[0],r.match(/[^\\](\\\\)*\\$/)||((s=i[3]||i[4])?n='<pre class="code '+(i[4]?"poetry":i[2].toLowerCase())+'"><code'+(i[2]?' class="language-'+i[2].toLowerCase()+'"':"")+">"+s1(Ui(s).replace(/^\n+|\n+$/g,""))+"</code></pre>":(s=i[6])?(s.match(/\./)&&(i[5]=i[5].replace(/^\d+/gm,"")),o=Ml(s1(i[5].replace(/^\s*[>*+.-]/gm,""))),s==">"?s="blockquote":(s=s.match(/\./)?"ol":"ul",o=o.replace(/^(.*)(\n|$)/gm,"<li>$1</li>")),n="<"+s+">"+o+"</"+s+">"):i[8]?n='<img src="'+Ui(i[8])+'" alt="'+Ui(i[7])+'">':i[10]?(u=u.replace("<a>",'<a href="'+Ui(i[11]||f[r.toLowerCase()])+'">'),n=d()+"</a>"):i[9]?n="<a>":i[12]||i[14]?n="<"+(s="h"+(i[14]?i[14].length:i[13]>"="?1:2))+">"+Ml(i[12]||i[15],f)+"</"+s+">":i[16]?n="<code>"+Ui(i[16])+"</code>":(i[17]||i[1])&&(n=h(i[17]||"--"))),u+=r,u+=n;return(u+t.substring(l)+d()).replace(/^\n+|\n+$/g,"")}function cI(t){const e=Ml(t),n=new DOMParser().parseFromString(`<!DOCTYPE html><html><body><div>${e}</div></body></html>`,"text/html");n.normalize(),a1(n.body);const r=n.body.removeChild(n.querySelector("body > div"));return r.className="snarkdown",r}function a1(t){if(t.nodeType!==3){if(t.nodeType!==1||/^(script|iframe|object|embed|svg)$/i.test(t.tagName))return t.remove();for(let e=t.attributes.length;e--;){const n=t.attributes[e].name;/^(class|id|name|href|src|alt|align|valign|(on[a-z]+))$/i.test(n)||t.attributes.removeNamedItem(n)}for(let e=t.childNodes.length;e--;)a1(t.childNodes[e])}}async function c1(t,e){var n,r;try{t.actions&&e.provenance.dispatchBookmark(t.actions),e.storeHelper.dispatch(Ri.actions.setViewSettings(t.viewSettings));const i=[];for(const[o,s]of Object.entries((n=t.scaleDomains)!=null?n:{})){const a=e.genomeSpy.getNamedScaleResolutions().get(o);a?i.push(a.zoomTo(s)):console.warn(`Cannot restore scale domain. Unknown name: ${o}`)}await Promise.all(i),((r=t.notes)==null?void 0:r.length)&&rt(cI(t.notes),t.name)}catch(i){console.error(i),rt(I`<p>Cannot restore the state:</p><p>${i}</p>`),e.provenance.activateState(0)}}class uI extends Tt{constructor(){super();this.app=void 0}connectedCallback(){super.connectedCallback(),this.dispatchEvent(e1("app",e=>{this.app=e}))}createRenderRoot(){return this}async _addBookmark(e){var f,l;const n=e?await this.app.bookmarkDatabase.get(e):void 0,r=!!n,i=n?U(T({},n),{timestamp:Date.now(),actions:this.app.provenance.getBookmarkableActionHistory(),scaleDomains:{}}):{name:void 0,timestamp:Date.now(),actions:this.app.provenance.getBookmarkableActionHistory(),scaleDomains:{}},o=this.app.storeHelper.state.viewSettings;Object.keys(o.visibilities).length&&(i.viewSettings=o);for(const[h,d]of this.app.genomeSpy.getNamedScaleResolutions().entries())d.isZoomable()&&(i.scaleDomains[h]=d.getComplexDomain());const s=()=>!!i.name,a=xs(),c=async()=>{if(!s()){rt("Name is missing!","Error");return}if(!(await this.app.bookmarkDatabase.get(i.name)&&!(r&&i.name==n.name)&&!await rt(I`A bookmark with the name <em>${i.name}</em> already exists. It will be overwritten.`,"Bookmark already exists",!0)))try{await this.app.bookmarkDatabase.put(i,n),a.close(),this.requestUpdate()}catch(h){rt(""+h,"Cannot save the bookmark!")}},u=I`<div class="modal-title">${r?"Edit bookmark":"Add bookmark"}</div><div class="modal-body" style="width:500px">${r?I`<div class="gs-alert warning">${me(eM).node[0]} The current visualization state will be updated to the bookmark you are editing.</div>`:Y}<div class="gs-form-group"><label for="bookmark-title">Title</label> <input id="bookmark-title" type="text" required .value="${(f=i.name)!=null?f:""}" @change="${h=>{i.name=h.target.value}}"></div><div class="gs-form-group"><label for="bookmark-notes">Notes</label> <textarea id="bookmark-notes" rows="4" .value="${(l=i.notes)!=null?l:""}" @change="${h=>{i.notes=h.target.value.trim()}}"></textarea> <small>Notes will be shown when the bookmark is loaded. You can use <a href="https://www.markdownguide.org/basic-syntax/">markdown</a> for formatting.</small></div></div><div class="modal-buttons"><button class="btn-cancel" @click="${()=>a.close()}">Cancel</button> <button class="btn-primary" @click="${c}">Save</button></div>`;$e(u,a.content),a.content.querySelector("#bookmark-title").focus()}async _loadBookmark(e){const n=await this.app.bookmarkDatabase.get(e);n&&c1(n,this.app)}_createContextMenu(e,n){n.stopPropagation(),qu({items:[{label:"Edit and replace...",icon:iM,callback:()=>this._addBookmark(e)},{label:"Delete",icon:lM,callback:()=>rt(I`The bookmark <em>${e}</em> will be deleted.`,"Are you sure?",!0).then(async r=>{r&&(await this.app.bookmarkDatabase.delete(e),this.requestUpdate())})},{label:"Share...",icon:aM,callback:()=>this._showShareDialog(e)}]},n)}_getBookmarks(){return nI(this.app.bookmarkDatabase.getNames().then(e=>{const n=e.map(r=>I`<li><a @click="${()=>this._loadBookmark(r)}">${r}</a> <a class="menu-ellipsis" @click="${i=>this._createContextMenu(r,i)}">${me($C).node[0]}</a></li>`);return n.length?[I`<div class="menu-divider"></div>`,...n]:Y}),I`Loading...`)}render(){return this.app.bookmarkDatabase?I`<div class="dropdown bookmark-dropdown"><button class="tool-btn" title="Bookmarks" @click="${Sl}">${me(ZC).node[0]}</button><ul class="gs-dropdown-menu"><li><a @click="${()=>this._addBookmark()}">Add bookmark...</a></li>${this._getBookmarks()}</ul></div>`:Y}async _showShareDialog(e){const n=await this.app.bookmarkDatabase.get(e),r=JSON.stringify(n,void 0,2),i=window.location,o=i.origin+i.pathname+i.search+o1(n);rt(I`<div style="width:600px"><div class="gs-form-group"><label for="bookmark-url">URL</label><div class="copy-url"><input id="bookmark-url" type="text" .value="${o}"> <button @click="${a=>navigator.clipboard.writeText(o).then(()=>a.target.dispatchEvent(YM())).catch(()=>rt("Failed to copy!"))}">Copy</button></div><small>The bookmark URL contains all the bookmarked data, including the possible notes, which will be shown when the URL is opened.</small></div><div class="gs-form-group"><label for="bookmark-json">JSON</label> <textarea id="bookmark-json" style="height:250px">
|
2064
|
+
${r}</textarea> <small>The JSON-formatted bookmark is currently available for development purposes.</small></div></div>`,"Share a bookmark")}}customElements.define("genome-spy-bookmark-button",uI);class lI extends Tt{constructor(){super();this.app=void 0,this.appInitialized=!1}static get properties(){return{app:{type:Object},appInitialized:{type:Boolean}}}createRenderRoot(){return this}_getToolButtons(){const e=this.app.getSampleView(),n=this.app.provenance,r=[];n.isEnabled()&&r.push(I`<genome-spy-provenance-buttons .provenance="${n}">`),r.push(I`<genome-spy-view-visibility></genome-spy-view-visibility>`),e&&r.push(I`<button class="tool-btn" title="Peek (E)" @click="${()=>e._togglePeek()}">${me(qC).node[0]}</button>`),this.app.bookmarkDatabase&&r.push(I`<genome-spy-bookmark-button></genome-spy-bookmark-button>`);const i=this.app.config.description?Ye(this.app.config.description):[];return i.length>1&&r.push(I`<button class="tool-btn" title="Show a description of the visualization" @click="${()=>rt(I`${i.slice(1).map(o=>I`<p>${o}</p>`)}`,i[0])}">${me(nM).node[0]}</button>`),i.length>0&&r.push(I`<span class="vis-title">${i[0]}</span>`),r.push(I`<span class="spacer"></span> <button class="tool-btn" title="Fullscreen" @click="${()=>this.app.toggleFullScreen()}">${me(tM).node[0]}</button> <button class="tool-btn" title="Help" @click="${()=>window.open("https://genomespy.app/docs/","_blank")}">${me(oM).node[0]}</button>`),r}render(){const e=this.app.genomeSpy;return I`<nav class="gs-toolbar"><a href="https://genomespy.app" target="_blank" class="logo"><img title="GenomeSpy" alt="GenomeSpy" src="${$m}"></a><div class="title"><span>GenomeSpy</span></div>${this.appInitialized&&Jm(e.viewRoot)?I`<genome-spy-search-field .genomeSpy="${e}"></genome-spy-search-field>`:Y} ${this._getToolButtons()}</nav>`}}customElements.define("genome-spy-toolbar",lI);class fI{constructor(e){this.storeHelper=e,this._reducers={},this.actionInfoSources=[],this._reducer=void 0,e.addReducer("provenance",(n,r)=>this._reducer?this._reducer(n,r):n!=null?n:{})}addReducer(e,n){this._reducers[e]=n;const r=o=>Object.keys(this._reducers).some(s=>o.type.startsWith(s)),i=(o,s)=>r(s)?s:o!=null?o:null;this._reducer=g8(hl(U(T({},this._reducers),{lastAction:i})),{ignoreInitialState:!0,filter:r}),this.storeHelper.dispatch({type:"@@redux/REPLACE"+Math.random().toString(36).substring(7).split("").join(".")})}get _storeState(){return this.storeHelper.store.getState()}get _provenanceState(){return this._storeState.provenance}isEnabled(){return!!this.getPresentState()}getPresentState(){return this._provenanceState.present}addActionInfoSource(e){this.actionInfoSources.push(e)}getActionInfo(e){for(const n of this.actionInfoSources){const r=n(e);if(r)return r}}dispatchBookmark(e){this.storeHelper.dispatch([...this.isUndoable()?[tn.ActionCreators.jumpToPast(0)]:[],...e])}isRedoable(){return this.isEnabled()&&this._provenanceState.future.length>0}redo(){this.storeHelper.dispatch(tn.ActionCreators.redo())}isUndoable(){return this.isEnabled()&&this._provenanceState.past.length>0}undo(){this.storeHelper.dispatch(tn.ActionCreators.undo())}isAtInitialState(){return!this.isUndoable()}isEmpty(){const e=this._provenanceState;return!this.isEnabled()||e.past.length+e.future.length<=0}activateState(e){const n=this.getCurrentIndex();e<n?this.storeHelper.dispatch(tn.ActionCreators.jumpToPast(e)):e>n&&this.storeHelper.dispatch(tn.ActionCreators.jumpToFuture(e-n-1))}getCurrentIndex(){var e;return(e=this._provenanceState.past)==null?void 0:e.length}getActionHistory(){const e=this._provenanceState;return e.present&&[...e.past,e.present].map(n=>n.lastAction)}getFullActionHistory(){const e=this._provenanceState;return[...e.past,e.present,...e.future].map(n=>n.lastAction)}getBookmarkableActionHistory(){var e;return(e=this.getActionHistory())==null?void 0:e.slice(1)}}function*hI(t,e=n=>+n){const n=t.length,r=new Li,i=new Array(n).fill(0);for(const[s,a]of t.entries())a.length&&r.push(s,e(a[0]));let o=0;for(;(o=r.pop())!==void 0;){const s=t[o];let a=i[o];if(yield s[a++],a<s.length){const u=e(s[a]);r.push(o,u),i[o]=a}}}const dI="sampleCount";class pI extends ie{constructor(e,n){super();this.view=n;const r=n.context.animator;for(const i of n.getAncestors())i instanceof gl&&(this.provenance=i.provenance,this.provenance.storeHelper.subscribe(o=>r.requestTransition(()=>{this.reset(),this._mergeAndPropagate(pl(o)),this.complete()})));if(!this.provenance)throw new Error("No SampleView was found!");this.contextObject=void 0}initialize(){this.contextObject=Object.create(super.getGlobalObject());const e=this.view.parent.getEncoding().x;if(wn(e))this.xAccessor=X(e.field);else throw new Error("Crash!")}handle(e){}getGlobalObject(){return this.contextObject}_getCollector(){if(this.parent instanceof Ni)return this.parent;throw new Error("MergeFacetsTransform must be a direct child of a Collector")}complete(){this._mergeAndPropagate(this.provenance.getPresentState()[wr]),super.complete()}_mergeAndPropagate(e){const n=[...zm(e.rootGroup)].filter(r=>Fm(he(r)));for(const[r,i]of n.entries()){const o=he(i);if(Fm(o)){this.contextObject[dI]=o.samples.length,this.beginBatch({type:"facet",facetId:[r]});const s=o.samples,a=this._getCollector(),c=hI(s.map(u=>{var f;return(f=a.facetBatches.get([u]))!=null?f:[]}),this.xAccessor);for(const u of c)this._propagate(u)}}this._updateScales()}setParent(e){super.setParent(e)}_updateScales(){const e=new Set;this.view.visit(n=>{if(n instanceof Oe&&n.mark.encoding.y){const r=n.getScaleResolution("y");r&&e.add(r)}});for(const n of e)n.reconfigure()}}var gI="BATCHING_REDUCER.BATCH";function mI(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:gI;return{type:e,meta:{batch:!0},payload:t}}function yI(t){return function e(n,r){return r&&r.meta&&r.meta.batch?r.payload.reduce(e,n):t(n,r)}}class AI{constructor(e){this._reducers=e!=null?e:{},this.store=$8({reducer:{}}),this._listeners=new Set,this.store.subscribe(()=>{const n=this.store.getState();for(const r of this._listeners)r(n)})}get state(){return this.store.getState()}addReducer(e,n){this._reducers[e]=n,this.store.replaceReducer(yI(hl(this._reducers)))}subscribe(e){this._listeners.add(e)}unsubscribe(e){this._listeners.delete(e)}dispatch(e){Array.isArray(e)?this.store.dispatch(mI(e)):this.store.dispatch(e)}getDispatcher(){return e=>this.dispatch(e)}}tg.mergeFacets=pI;class u1{constructor(e,n,r={}){const i=this;this.config=n,this.storeHelper=new AI,this.storeHelper.addReducer("viewSettings",Ri.reducer),this.provenance=new fI(this.storeHelper),this._initializationListeners=[],this.toolbarRef=Zm(),this.appContainer=e,this._configureContainer(),this.bookmarkDatabase=typeof n.specId=="string"?new z6(n.specId):void 0,$e(I`<div class="genome-spy-app"><genome-spy-toolbar ${Km(i.toolbarRef)} .app="${i}"></genome-spy-toolbar><div class="genome-spy-container"></div></div>`,i.appContainer),i.appContainer.querySelector(".genome-spy-app").addEventListener("query-dependency",a=>{a.detail.name=="app"&&(a.detail.setter(i),a.stopPropagation())});const o=a=>this.appContainer.getElementsByClassName(a)[0];this.genomeSpy=new gg(o("genome-spy-container"),this.config,r),this.genomeSpy.viewFactory.addViewType(D6,(a,c,u,f)=>new gl(a,c,u,f,this.provenance));const s=this.genomeSpy.viewVisibilityPredicate;this.genomeSpy.viewVisibilityPredicate=a=>{var c,u;return(u=(c=this.storeHelper.state.viewSettings)==null?void 0:c.visibilities[a.name])!=null?u:s(a)}}addInitializationListener(e){this._initializationListeners?this._initializationListeners.push(e):e()}toggleFullScreen(){document.fullscreenElement?document.exitFullscreen&&document.exitFullscreen():this.appContainer.requestFullscreen()}isFullPage(){return this.appContainer==document.body}async launch(){var o;if(!await this.genomeSpy.launch())return;this.storeHelper.subscribe(Os(s=>{var a;return(a=s.viewSettings)==null?void 0:a.visibilities},(s,a)=>{var u,f;this.genomeSpy.viewRoot._invalidateCacheByPrefix("size","progeny"),(f=(u=this.getSampleView())==null?void 0:u.summaryViews)==null||f._invalidateCacheByPrefix("size","self");const c=this.genomeSpy.viewRoot.context;c.requestLayoutReflow(),c.animator.requestRender()},this.storeHelper.store.getState())),await this._restoreStateFromUrl(),this.storeHelper.subscribe(()=>{this._updateStateToUrl()}),window.addEventListener("hashchange",()=>this._restoreStateFromUrl(),!1);const n=Nu(()=>this._updateStateToUrl(),500,!1);for(const[,s]of this.genomeSpy.getNamedScaleResolutions())s.isZoomable()&&s.addEventListener("domain",n);const r=this.toolbarRef.value;r.appInitialized=!0;const i=Ye((o=this.genomeSpy.spec.description)!=null?o:[]);this.isFullPage()&&i.length>0&&(document.title="GenomeSpy - "+i);for(const s of this._initializationListeners)s();this._initializationListeners=void 0}_updateStateToUrl(){const e={actions:[],scaleDomains:{}},n=this.provenance.getBookmarkableActionHistory();(n==null?void 0:n.length)&&(e.actions=n);for(const[o,s]of this.genomeSpy.getNamedScaleResolutions().entries())s.isZoomed()||(e.scaleDomains[o]=s.getComplexDomain());const r=this.storeHelper.state.viewSettings;Object.keys(r.visibilities).length&&(e.viewSettings=r);let i=e.actions.length||Object.keys(e.scaleDomains).length||e.viewSettings?o1(e):"";window.history.replaceState(void 0,document.title,window.location.pathname+window.location.search+i)}_restoreStateFromUrl(){const e=window.location.hash;if(e&&e.length>0)try{const n=sI(e);return c1(n,this),!0}catch(n){console.error(n),rt(I`<p>Cannot restore the state:</p><p>${n}</p>`)}return!1}_configureContainer(){this.isFullPage()?(this.appContainer.style.margin="0",this.appContainer.style.padding="0",this.appContainer.style.overflow="hidden",bI(VC)):this.appContainer.style.position="relative"}async updateConfig(e){throw new Error("Broken")}getSampleView(){var n;if(!((n=this.genomeSpy)==null?void 0:n.viewRoot))return;let e;return this.genomeSpy.viewRoot.visit(r=>{if(r instanceof gl)return e=r,Mn}),e}}function bI(t){let e=document.querySelector("head"),n=document.createElement("link");n.setAttribute("rel","shortcut icon"),n.setAttribute("href",t),e.appendChild(n)}async function xI(t,e,n={}){let r;if(se(t)){if(r=document.querySelector(t),!r)throw new Error(`No such element: ${t}`)}else if(t instanceof HTMLElement)r=t;else throw new Error(`Invalid element: ${t}`);let i;try{const o=Be(e)?e:await l1(e);o.baseUrl=o.baseUrl||"","width"in o||(o.width="container"),"padding"in o||(o.padding=10);const s=new u1(r,o,n);i=s.genomeSpy,vI(i,n),await s.launch()}catch(o){r.innerText=o.toString(),console.error(o)}return{finalize(){for(i.destroy();r.firstChild;)r.firstChild.remove()},addEventListener(o,s){const a=i._eventListeners;let c=a.get(o);c||(c=new Set,a.set(o,c)),c.add(s)},removeEventListener(o,s){var c;(c=i._eventListeners.get(o))==null||c.delete(s)},getScaleResolutionByName(o){return i.getNamedScaleResolutions().get(o)}}}function vI(t,e){e.namedDataProvider&&t.registerNamedDataProvider(e.namedDataProvider)}async function l1(t){let e;try{e=JSON.parse(await ao().load(t))}catch(n){throw new Error(`Could not load or parse configuration: ${t}, reason: ${n.message}`)}if(!e.baseUrl){const n=t.match(/^[^?#]*\//);e.baseUrl=n&&n[0]||"./"}return e}re.GenomeSpy=gg,re.GenomeSpyApp=u1,re.embed=xI,re.html=I,re.icon=$m,re.loadSpec=l1,Object.defineProperty(re,"__esModule",{value:!0}),re[Symbol.toStringTag]="Module"});
|