@genome-spy/app 0.28.3 → 0.28.4
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 +8 -8
- package/package.json +2 -2
package/dist/index.js
CHANGED
@@ -2134,7 +2134,7 @@ svg:not(:root).svg-inline--fa, svg:not(:host).svg-inline--fa {
|
|
2134
2134
|
color: var(--fa-inverse, #fff);
|
2135
2135
|
}`;function ay(){var t=K1,e=J1,n=F.familyPrefix,r=F.replacementClass,i=aT;if(n!==t||r!==e){var o=new RegExp("\\.".concat(t,"\\-"),"g"),a=new RegExp("\\--".concat(t,"\\-"),"g"),s=new RegExp("\\.".concat(e),"g");i=i.replace(o,".".concat(n,"-")).replace(a,"--".concat(n,"-")).replace(s,".".concat(r))}return i}var sy=!1;function mf(){F.autoAddCss&&!sy&&(tT(ay()),sy=!0)}var sT={mixout:function(){return{dom:{css:ay,insertCss:mf}}},hooks:function(){return{beforeDOMElementCreation:function(){mf()},beforeI2svg:function(){mf()}}}},Rt=hn||{};Rt[zt]||(Rt[zt]={}),Rt[zt].styles||(Rt[zt].styles={}),Rt[zt].hooks||(Rt[zt].hooks={}),Rt[zt].shims||(Rt[zt].shims=[]);var ct=Rt[zt],cy=[],cT=function t(){ee.removeEventListener("DOMContentLoaded",t),Ns=1,cy.map(function(e){return e()})},Ns=!1;Pt&&(Ns=(ee.documentElement.doScroll?/^loaded|^c/:/^loaded|^i|^c/).test(ee.readyState),Ns||ee.addEventListener("DOMContentLoaded",cT));function uT(t){Pt&&(Ns?setTimeout(t,0):cy.push(t))}function So(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"?oy(t):"<".concat(e," ").concat(rT(r),">").concat(o.map(So).join(""),"</").concat(e,">")}function uy(t,e,n){if(t&&t[e]&&t[e][n])return{prefix:e,iconName:n,icon:t[e][n]}}var lT=function(e,n){return function(r,i,o,a){return e.call(n,r,i,o,a)}},gf=function(e,n,r,i){var o=Object.keys(e),a=o.length,s=i!==void 0?lT(n,i):n,c,u,f;for(r===void 0?(c=1,f=e[o[0]]):(c=0,f=r);c<a;c++)u=o[c],f=s(f,e[u],u,e);return f};function fT(t){for(var e=[],n=0,r=t.length;n<r;){var i=t.charCodeAt(n++);if(i>=55296&&i<=56319&&n<r){var o=t.charCodeAt(n++);(o&64512)==56320?e.push(((i&1023)<<10)+(o&1023)+65536):(e.push(i),n--)}else e.push(i)}return e}function yf(t){var e=fT(t);return e.length===1?e[0].toString(16):null}function dT(t,e){var n=t.length,r=t.charCodeAt(e),i;return r>=55296&&r<=56319&&n>e+1&&(i=t.charCodeAt(e+1),i>=56320&&i<=57343)?(r-55296)*1024+i-56320+65536:r}function ly(t){return Object.keys(t).reduce(function(e,n){var r=t[n],i=!!r.icon;return i?e[r.iconName]=r.icon:e[n]=r,e},{})}function vf(t,e){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},r=n.skipHooks,i=r===void 0?!1:r,o=ly(e);typeof ct.hooks.addPack=="function"&&!i?ct.hooks.addPack(t,ly(e)):ct.styles[t]=I(I({},ct.styles[t]||{}),o),t==="fas"&&vf("fa",e)}var Eo=ct.styles,hT=ct.shims,pT=Object.values(ty),bf=null,fy={},dy={},hy={},py={},my={},mT=Object.keys(df);function gT(t){return~Z6.indexOf(t)}function yT(t,e){var n=e.split("-"),r=n[0],i=n.slice(1).join("-");return r===t&&i!==""&&!gT(i)?i:null}var gy=function(){var e=function(o){return gf(Eo,function(a,s,c){return a[c]=gf(s,o,{}),a},{})};fy=e(function(i,o,a){if(o[3]&&(i[o[3]]=a),o[2]){var s=o[2].filter(function(c){return typeof c=="number"});s.forEach(function(c){i[c.toString(16)]=a})}return i}),dy=e(function(i,o,a){if(i[a]=a,o[2]){var s=o[2].filter(function(c){return typeof c=="string"});s.forEach(function(c){i[c]=a})}return i}),my=e(function(i,o,a){var s=o[2];return i[a]=a,s.forEach(function(c){i[c]=a}),i});var n="far"in Eo||F.autoFetchSvg,r=gf(hT,function(i,o){var a=o[0],s=o[1],c=o[2];return s==="far"&&!n&&(s="fas"),typeof a=="string"&&(i.names[a]={prefix:s,iconName:c}),typeof a=="number"&&(i.unicodes[a.toString(16)]={prefix:s,iconName:c}),i},{names:{},unicodes:{}});hy=r.names,py=r.unicodes,bf=Ls(F.styleDefault)};eT(function(t){bf=Ls(t.styleDefault)}),gy();function Af(t,e){return(fy[t]||{})[e]}function vT(t,e){return(dy[t]||{})[e]}function Jr(t,e){return(my[t]||{})[e]}function yy(t){return hy[t]||{prefix:null,iconName:null}}function bT(t){var e=py[t],n=Af("fas",t);return e||(n?{prefix:"fas",iconName:n}:null)||{prefix:null,iconName:null}}function mn(){return bf}var xf=function(){return{prefix:null,iconName:null,rest:[]}};function Ls(t){var e=df[t],n=Ts[t]||Ts[e],r=t in ct.styles?t:null;return n||r||null}function Bs(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=e.skipLookups,r=n===void 0?!1:n,i=null,o=t.reduce(function(a,s){var c=yT(F.familyPrefix,s);if(Eo[s]?(s=pT.includes(s)?Q6[s]:s,i=s,a.prefix=s):mT.indexOf(s)>-1?(i=s,a.prefix=Ls(s)):c?a.iconName=c:s!==F.replacementClass&&a.rest.push(s),!r&&a.prefix&&a.iconName){var u=i==="fa"?yy(a.iconName):{},f=Jr(a.prefix,a.iconName);u.prefix&&(i=null),a.iconName=u.iconName||f||a.iconName,a.prefix=u.prefix||a.prefix,a.prefix==="far"&&!Eo.far&&Eo.fas&&!F.autoFetchSvg&&(a.prefix="fas")}return a},xf());return(o.prefix==="fa"||i==="fa")&&(o.prefix=mn()||"fas"),o}var AT=function(){function t(){k6(this,t),this.definitions={}}return N6(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 a=i.reduce(this._pullDefinitions,{});Object.keys(a).forEach(function(s){n.definitions[s]=I(I({},n.definitions[s]||{}),a[s]),vf(s,a[s]);var c=ty[s];c&&vf(c,a[s]),gy()})}},{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 a=i[o],s=a.prefix,c=a.iconName,u=a.icon,f=u[2];n[s]||(n[s]={}),f.length>0&&f.forEach(function(l){typeof l=="string"&&(n[s][l]=u)}),n[s][c]=u}),n}}]),t}(),vy=[],$r={},ei={},xT=Object.keys(ei);function wT(t,e){var n=e.mixoutsTo;return vy=t,$r={},Object.keys(ei).forEach(function(r){xT.indexOf(r)===-1&&delete ei[r]}),vy.forEach(function(r){var i=r.mixout?r.mixout():{};if(Object.keys(i).forEach(function(a){typeof i[a]=="function"&&(n[a]=i[a]),Es(i[a])==="object"&&Object.keys(i[a]).forEach(function(s){n[a]||(n[a]={}),n[a][s]=i[a][s]})}),r.hooks){var o=r.hooks();Object.keys(o).forEach(function(a){$r[a]||($r[a]=[]),$r[a].push(o[a])})}r.provides&&r.provides(ei)}),n}function wf(t,e){for(var n=arguments.length,r=new Array(n>2?n-2:0),i=2;i<n;i++)r[i-2]=arguments[i];var o=$r[t]||[];return o.forEach(function(a){e=a.apply(null,[e].concat(r))}),e}function ur(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r<e;r++)n[r-1]=arguments[r];var i=$r[t]||[];i.forEach(function(o){o.apply(null,n)})}function jt(){var t=arguments[0],e=Array.prototype.slice.call(arguments,1);return ei[t]?ei[t].apply(null,e):void 0}function Cf(t){t.prefix==="fa"&&(t.prefix="fas");var e=t.iconName,n=t.prefix||mn();if(e)return e=Jr(n,e)||e,uy(by.definitions,n,e)||uy(ct.styles,n,e)}var by=new AT,CT=function(){F.autoReplaceSvg=!1,F.observeMutations=!1,ur("noAuto")},ST={i2svg:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};return Pt?(ur("beforeI2svg",e),jt("pseudoElements2svg",e),jt("i2svg",e)):Promise.reject("Operation requires a DOM of some kind.")},watch:function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=e.autoReplaceSvgRoot;F.autoReplaceSvg===!1&&(F.autoReplaceSvg=!0),F.observeMutations=!0,uT(function(){DT({autoReplaceSvgRoot:n}),ur("watch",e)})}},ET={icon:function(e){if(e===null)return null;if(Es(e)==="object"&&e.prefix&&e.iconName)return{prefix:e.prefix,iconName:Jr(e.prefix,e.iconName)||e.iconName};if(Array.isArray(e)&&e.length===2){var n=e[1].indexOf("fa-")===0?e[1].slice(3):e[1],r=Ls(e[0]);return{prefix:r,iconName:Jr(r,n)||n}}if(typeof e=="string"&&(e.indexOf("".concat(F.familyPrefix,"-"))>-1||e.match(Y6))){var i=Bs(e.split(" "),{skipLookups:!0});return{prefix:i.prefix||mn(),iconName:Jr(i.prefix,i.iconName)||i.iconName}}if(typeof e=="string"){var o=mn();return{prefix:o,iconName:Jr(o,e)||e}}}},Ue={noAuto:CT,config:F,dom:ST,parse:ET,library:by,findIconDefinition:Cf,toHtml:So},DT=function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},n=e.autoReplaceSvgRoot,r=n===void 0?ee:n;(Object.keys(ct.styles).length>0||F.autoFetchSvg)&&Pt&&F.autoReplaceSvg&&Ue.dom.i2svg({node:r})};function Os(t,e){return Object.defineProperty(t,"abstract",{get:e}),Object.defineProperty(t,"html",{get:function(){return t.abstract.map(function(r){return So(r)})}}),Object.defineProperty(t,"node",{get:function(){if(Pt){var r=ee.createElement("div");return r.innerHTML=t.html,r.children}}}),t}function MT(t){var e=t.children,n=t.main,r=t.mask,i=t.attributes,o=t.styles,a=t.transform;if(pf(a)&&n.found&&!r.found){var s=n.width,c=n.height,u={x:s/c/2,y:.5};i.style=ks(I(I({},o),{},{"transform-origin":"".concat(u.x+a.x/16,"em ").concat(u.y+a.y/16,"em")}))}return[{tag:"svg",attributes:i,children:e}]}function TT(t){var e=t.prefix,n=t.iconName,r=t.children,i=t.attributes,o=t.symbol,a=o===!0?"".concat(e,"-").concat(F.familyPrefix,"-").concat(n):o;return[{tag:"svg",attributes:{style:"display: none;"},children:[{tag:"symbol",attributes:I(I({},i),{},{id:a}),children:r}]}]}function Sf(t){var e=t.icons,n=e.main,r=e.mask,i=t.prefix,o=t.iconName,a=t.transform,s=t.symbol,c=t.title,u=t.maskId,f=t.titleId,l=t.extra,d=t.watchable,p=d===void 0?!1:d,h=r.found?r:n,m=h.width,g=h.height,y=i==="fak",b=[F.replacementClass,o?"".concat(F.familyPrefix,"-").concat(o):""].filter(function(k){return l.classes.indexOf(k)===-1}).filter(function(k){return k!==""||!!k}).concat(l.classes).join(" "),x={children:[],attributes:I(I({},l.attributes),{},{"data-prefix":i,"data-icon":o,class:b,role:l.attributes.role||"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 ".concat(m," ").concat(g)})},C=y&&!~l.classes.indexOf("fa-fw")?{width:"".concat(m/g*16*.0625,"em")}:{};p&&(x.attributes[sr]=""),c&&(x.children.push({tag:"title",attributes:{id:x.attributes["aria-labelledby"]||"title-".concat(f||Co())},children:[c]}),delete x.attributes.title);var w=I(I({},x),{},{prefix:i,iconName:o,main:n,mask:r,maskId:u,transform:a,symbol:s,styles:I(I({},C),l.styles)}),v=r.found&&n.found?jt("generateAbstractMask",w)||{children:[],attributes:{}}:jt("generateAbstractIcon",w)||{children:[],attributes:{}},A=v.children,D=v.attributes;return w.children=A,w.attributes=D,s?TT(w):MT(w)}function Ay(t){var e=t.content,n=t.width,r=t.height,i=t.transform,o=t.title,a=t.extra,s=t.watchable,c=s===void 0?!1:s,u=I(I(I({},a.attributes),o?{title:o}:{}),{},{class:a.classes.join(" ")});c&&(u[sr]="");var f=I({},a.styles);pf(i)&&(f.transform=oT({transform:i,startCentered:!0,width:n,height:r}),f["-webkit-transform"]=f.transform);var l=ks(f);l.length>0&&(u.style=l);var d=[];return d.push({tag:"span",attributes:u,children:[e]}),o&&d.push({tag:"span",attributes:{class:"sr-only"},children:[o]}),d}function IT(t){var e=t.content,n=t.title,r=t.extra,i=I(I(I({},r.attributes),n?{title:n}:{}),{},{class:r.classes.join(" ")}),o=ks(r.styles);o.length>0&&(i.style=o);var a=[];return a.push({tag:"span",attributes:i,children:[e]}),n&&a.push({tag:"span",attributes:{class:"sr-only"},children:[n]}),a}var Ef=ct.styles;function Df(t){var e=t[0],n=t[1],r=t.slice(4),i=of(r,1),o=i[0],a=null;return Array.isArray(o)?a={tag:"g",attributes:{class:"".concat(F.familyPrefix,"-").concat(cr.GROUP)},children:[{tag:"path",attributes:{class:"".concat(F.familyPrefix,"-").concat(cr.SECONDARY),fill:"currentColor",d:o[0]}},{tag:"path",attributes:{class:"".concat(F.familyPrefix,"-").concat(cr.PRIMARY),fill:"currentColor",d:o[1]}}]}:a={tag:"path",attributes:{fill:"currentColor",d:o}},{found:!0,width:e,height:n,icon:a}}var kT={found:!1,width:512,height:512};function NT(t,e){!ey&&!F.showMissingIcons&&t&&console.error('Icon with name "'.concat(t,'" and prefix "').concat(e,'" is missing.'))}function Mf(t,e){var n=e;return e==="fa"&&F.styleDefault!==null&&(e=mn()),new Promise(function(r,i){if(jt("missingIconAbstract"),n==="fa"){var o=yy(t)||{};t=o.iconName||t,e=o.prefix||e}if(t&&e&&Ef[e]&&Ef[e][t]){var a=Ef[e][t];return r(Df(a))}NT(t,e),r(I(I({},kT),{},{icon:F.showMissingIcons&&t?jt("missingIconAbstract")||{}:{}}))})}var xy=function(){},Tf=F.measurePerformance&&Ms&&Ms.mark&&Ms.measure?Ms:{mark:xy,measure:xy},Do='FA "6.1.1"',LT=function(e){return Tf.mark("".concat(Do," ").concat(e," begins")),function(){return wy(e)}},wy=function(e){Tf.mark("".concat(Do," ").concat(e," ends")),Tf.measure("".concat(Do," ").concat(e),"".concat(Do," ").concat(e," begins"),"".concat(Do," ").concat(e," ends"))},If={begin:LT,end:wy},Fs=function(){};function Cy(t){var e=t.getAttribute?t.getAttribute(sr):null;return typeof e=="string"}function BT(t){var e=t.getAttribute?t.getAttribute(lf):null,n=t.getAttribute?t.getAttribute(ff):null;return e&&n}function OT(t){return t&&t.classList&&t.classList.contains&&t.classList.contains(F.replacementClass)}function FT(){if(F.autoReplaceSvg===!0)return Ps.replace;var t=Ps[F.autoReplaceSvg];return t||Ps.replace}function PT(t){return ee.createElementNS("http://www.w3.org/2000/svg",t)}function zT(t){return ee.createElement(t)}function Sy(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=e.ceFn,r=n===void 0?t.tag==="svg"?PT:zT:n;if(typeof t=="string")return ee.createTextNode(t);var i=r(t.tag);Object.keys(t.attributes||[]).forEach(function(a){i.setAttribute(a,t.attributes[a])});var o=t.children||[];return o.forEach(function(a){i.appendChild(Sy(a,{ceFn:r}))}),i}function RT(t){var e=" ".concat(t.outerHTML," ");return e="".concat(e,"Font Awesome fontawesome.com "),e}var Ps={replace:function(e){var n=e[0];if(n.parentNode)if(e[1].forEach(function(i){n.parentNode.insertBefore(Sy(i),n)}),n.getAttribute(sr)===null&&F.keepOriginalSource){var r=ee.createComment(RT(n));n.parentNode.replaceChild(r,n)}else n.remove()},nest:function(e){var n=e[0],r=e[1];if(~hf(n).indexOf(F.replacementClass))return Ps.replace(e);var i=new RegExp("".concat(F.familyPrefix,"-.*"));if(delete r[0].attributes.id,r[0].attributes.class){var o=r[0].attributes.class.split(" ").reduce(function(s,c){return c===F.replacementClass||c.match(i)?s.toSvg.push(c):s.toNode.push(c),s},{toNode:[],toSvg:[]});r[0].attributes.class=o.toSvg.join(" "),o.toNode.length===0?n.removeAttribute("class"):n.setAttribute("class",o.toNode.join(" "))}var a=r.map(function(s){return So(s)}).join(`
|
2136
2136
|
`);n.setAttribute(sr,""),n.innerHTML=a}};function Ey(t){t()}function Dy(t,e){var n=typeof e=="function"?e:Fs;if(t.length===0)n();else{var r=Ey;F.mutateApproach===H6&&(r=hn.requestAnimationFrame||Ey),r(function(){var i=FT(),o=If.begin("mutate");t.map(i),o(),n()})}}var kf=!1;function My(){kf=!0}function Nf(){kf=!1}var zs=null;function Ty(t){if(Z1&&F.observeMutations){var e=t.treeCallback,n=e===void 0?Fs:e,r=t.nodeCallback,i=r===void 0?Fs:r,o=t.pseudoElementsCallback,a=o===void 0?Fs:o,s=t.observeMutationsRoot,c=s===void 0?ee:s;zs=new Z1(function(u){if(!kf){var f=mn();Kr(u).forEach(function(l){if(l.type==="childList"&&l.addedNodes.length>0&&!Cy(l.addedNodes[0])&&(F.searchPseudoElements&&a(l.target),n(l.target)),l.type==="attributes"&&l.target.parentNode&&F.searchPseudoElements&&a(l.target.parentNode),l.type==="attributes"&&Cy(l.target)&&~X6.indexOf(l.attributeName))if(l.attributeName==="class"&&BT(l.target)){var d=Bs(hf(l.target)),p=d.prefix,h=d.iconName;l.target.setAttribute(lf,p||f),h&&l.target.setAttribute(ff,h)}else OT(l.target)&&i(l.target)})}}),Pt&&zs.observe(c,{childList:!0,attributes:!0,characterData:!0,subtree:!0})}}function jT(){zs&&zs.disconnect()}function UT(t){var e=t.getAttribute("style"),n=[];return e&&(n=e.split(";").reduce(function(r,i){var o=i.split(":"),a=o[0],s=o.slice(1);return a&&s.length>0&&(r[a]=s.join(":").trim()),r},{})),n}function HT(t){var e=t.getAttribute("data-prefix"),n=t.getAttribute("data-icon"),r=t.innerText!==void 0?t.innerText.trim():"",i=Bs(hf(t));return i.prefix||(i.prefix=mn()),e&&n&&(i.prefix=e,i.iconName=n),i.iconName&&i.prefix||i.prefix&&r.length>0&&(i.iconName=vT(i.prefix,t.innerText)||Af(i.prefix,yf(t.innerText))),i}function GT(t){var e=Kr(t.attributes).reduce(function(i,o){return i.name!=="class"&&i.name!=="style"&&(i[o.name]=o.value),i},{}),n=t.getAttribute("title"),r=t.getAttribute("data-fa-title-id");return F.autoA11y&&(n?e["aria-labelledby"]="".concat(F.replacementClass,"-title-").concat(r||Co()):(e["aria-hidden"]="true",e.focusable="false")),e}function QT(){return{iconName:null,title:null,titleId:null,prefix:null,transform:bt,symbol:!1,mask:{iconName:null,prefix:null,rest:[]},maskId:null,extra:{classes:[],styles:{},attributes:{}}}}function Iy(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{styleParser:!0},n=HT(t),r=n.iconName,i=n.prefix,o=n.rest,a=GT(t),s=wf("parseNodeAttributes",{},t),c=e.styleParser?UT(t):[];return I({iconName:r,title:t.getAttribute("title"),titleId:t.getAttribute("data-fa-title-id"),prefix:i,transform:bt,mask:{iconName:null,prefix:null,rest:[]},maskId:null,symbol:!1,extra:{classes:o,styles:c,attributes:a}},s)}var YT=ct.styles;function ky(t){var e=F.autoReplaceSvg==="nest"?Iy(t,{styleParser:!1}):Iy(t);return~e.extra.classes.indexOf(ny)?jt("generateLayersText",t,e):jt("generateSvgReplacementMutation",t,e)}function Ny(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;if(!Pt)return Promise.resolve();var n=ee.documentElement.classList,r=function(l){return n.add("".concat($1,"-").concat(l))},i=function(l){return n.remove("".concat($1,"-").concat(l))},o=F.autoFetchSvg?Object.keys(df):Object.keys(YT),a=[".".concat(ny,":not([").concat(sr,"])")].concat(o.map(function(f){return".".concat(f,":not([").concat(sr,"])")})).join(", ");if(a.length===0)return Promise.resolve();var s=[];try{s=Kr(t.querySelectorAll(a))}catch{}if(s.length>0)r("pending"),i("complete");else return Promise.resolve();var c=If.begin("onTree"),u=s.reduce(function(f,l){try{var d=ky(l);d&&f.push(d)}catch(p){ey||p.name==="MissingIcon"&&console.error(p)}return f},[]);return new Promise(function(f,l){Promise.all(u).then(function(d){Dy(d,function(){r("active"),r("complete"),i("pending"),typeof e=="function"&&e(),c(),f()})}).catch(function(d){c(),l(d)})})}function VT(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:null;ky(t).then(function(n){n&&Dy([n],e)})}function _T(t){return function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=(e||{}).icon?e:Cf(e||{}),i=n.mask;return i&&(i=(i||{}).icon?i:Cf(i||{})),t(r,I(I({},n),{},{mask:i}))}}var WT=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=n.transform,i=r===void 0?bt:r,o=n.symbol,a=o===void 0?!1:o,s=n.mask,c=s===void 0?null:s,u=n.maskId,f=u===void 0?null:u,l=n.title,d=l===void 0?null:l,p=n.titleId,h=p===void 0?null:p,m=n.classes,g=m===void 0?[]:m,y=n.attributes,b=y===void 0?{}:y,x=n.styles,C=x===void 0?{}:x;if(e){var w=e.prefix,v=e.iconName,A=e.icon;return Os(I({type:"icon"},e),function(){return ur("beforeDOMElementCreation",{iconDefinition:e,params:n}),F.autoA11y&&(d?b["aria-labelledby"]="".concat(F.replacementClass,"-title-").concat(h||Co()):(b["aria-hidden"]="true",b.focusable="false")),Sf({icons:{main:Df(A),mask:c?Df(c.icon):{found:!1,width:null,height:null,icon:{}}},prefix:w,iconName:v,transform:I(I({},bt),i),symbol:a,title:d,maskId:f,titleId:h,extra:{attributes:b,styles:C,classes:g}})})}},XT={mixout:function(){return{icon:_T(WT)}},hooks:function(){return{mutationObserverCallbacks:function(n){return n.treeCallback=Ny,n.nodeCallback=VT,n}}},provides:function(e){e.i2svg=function(n){var r=n.node,i=r===void 0?ee:r,o=n.callback,a=o===void 0?function(){}:o;return Ny(i,a)},e.generateSvgReplacementMutation=function(n,r){var i=r.iconName,o=r.title,a=r.titleId,s=r.prefix,c=r.transform,u=r.symbol,f=r.mask,l=r.maskId,d=r.extra;return new Promise(function(p,h){Promise.all([Mf(i,s),f.iconName?Mf(f.iconName,f.prefix):Promise.resolve({found:!1,width:512,height:512,icon:{}})]).then(function(m){var g=of(m,2),y=g[0],b=g[1];p([n,Sf({icons:{main:y,mask:b},prefix:s,iconName:i,transform:c,symbol:u,maskId:l,title:o,titleId:a,extra:d,watchable:!0})])}).catch(h)})},e.generateAbstractIcon=function(n){var r=n.children,i=n.attributes,o=n.main,a=n.transform,s=n.styles,c=ks(s);c.length>0&&(i.style=c);var u;return pf(a)&&(u=jt("generateAbstractTransformGrouping",{main:o,transform:a,containerWidth:o.width,iconWidth:o.width})),r.push(u||o.icon),{children:r,attributes:i}}}},ZT={mixout:function(){return{layer:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=r.classes,o=i===void 0?[]:i;return Os({type:"layer"},function(){ur("beforeDOMElementCreation",{assembler:n,params:r});var a=[];return n(function(s){Array.isArray(s)?s.map(function(c){a=a.concat(c.abstract)}):a=a.concat(s.abstract)}),[{tag:"span",attributes:{class:["".concat(F.familyPrefix,"-layers")].concat(Ds(o)).join(" ")},children:a}]})}}}},qT={mixout:function(){return{counter:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=r.title,o=i===void 0?null:i,a=r.classes,s=a===void 0?[]:a,c=r.attributes,u=c===void 0?{}:c,f=r.styles,l=f===void 0?{}:f;return Os({type:"counter",content:n},function(){return ur("beforeDOMElementCreation",{content:n,params:r}),IT({content:n.toString(),title:o,extra:{attributes:u,styles:l,classes:["".concat(F.familyPrefix,"-layers-counter")].concat(Ds(s))}})})}}}},KT={mixout:function(){return{text:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=r.transform,o=i===void 0?bt:i,a=r.title,s=a===void 0?null:a,c=r.classes,u=c===void 0?[]:c,f=r.attributes,l=f===void 0?{}:f,d=r.styles,p=d===void 0?{}:d;return Os({type:"text",content:n},function(){return ur("beforeDOMElementCreation",{content:n,params:r}),Ay({content:n,transform:I(I({},bt),o),title:s,extra:{attributes:l,styles:p,classes:["".concat(F.familyPrefix,"-layers-text")].concat(Ds(u))}})})}}},provides:function(e){e.generateLayersText=function(n,r){var i=r.title,o=r.transform,a=r.extra,s=null,c=null;if(q1){var u=parseInt(getComputedStyle(n).fontSize,10),f=n.getBoundingClientRect();s=f.width/u,c=f.height/u}return F.autoA11y&&!i&&(a.attributes["aria-hidden"]="true"),Promise.resolve([n,Ay({content:n.innerHTML,width:s,height:c,transform:o,title:i,extra:a,watchable:!0})])}}},JT=new RegExp('"',"ug"),Ly=[1105920,1112319];function $T(t){var e=t.replace(JT,""),n=dT(e,0),r=n>=Ly[0]&&n<=Ly[1],i=e.length===2?e[0]===e[1]:!1;return{value:yf(i?e[0]:e),isSecondary:r||i}}function By(t,e){var n="".concat(U6).concat(e.replace(":","-"));return new Promise(function(r,i){if(t.getAttribute(n)!==null)return r();var o=Kr(t.children),a=o.filter(function(v){return v.getAttribute(uf)===e})[0],s=hn.getComputedStyle(t,e),c=s.getPropertyValue("font-family").match(V6),u=s.getPropertyValue("font-weight"),f=s.getPropertyValue("content");if(a&&!c)return t.removeChild(a),r();if(c&&f!=="none"&&f!==""){var l=s.getPropertyValue("content"),d=~["Solid","Regular","Light","Thin","Duotone","Brands","Kit"].indexOf(c[2])?Ts[c[2].toLowerCase()]:_6[u],p=$T(l),h=p.value,m=p.isSecondary,g=c[0].startsWith("FontAwesome"),y=Af(d,h),b=y;if(g){var x=bT(h);x.iconName&&x.prefix&&(y=x.iconName,d=x.prefix)}if(y&&!m&&(!a||a.getAttribute(lf)!==d||a.getAttribute(ff)!==b)){t.setAttribute(n,b),a&&t.removeChild(a);var C=QT(),w=C.extra;w.attributes[uf]=e,Mf(y,d).then(function(v){var A=Sf(I(I({},C),{},{icons:{main:v,mask:xf()},prefix:d,iconName:b,extra:w,watchable:!0})),D=ee.createElement("svg");e==="::before"?t.insertBefore(D,t.firstChild):t.appendChild(D),D.outerHTML=A.map(function(k){return So(k)}).join(`
|
2137
|
-
`),t.removeAttribute(n),r()}).catch(i)}else r()}else r()})}function
|
2137
|
+
`),t.removeAttribute(n),r()}).catch(i)}else r()}else r()})}function e9(t){return Promise.all([By(t,"::before"),By(t,"::after")])}function t9(t){return t.parentNode!==document.head&&!~G6.indexOf(t.tagName.toUpperCase())&&!t.getAttribute(uf)&&(!t.parentNode||t.parentNode.tagName!=="svg")}function Oy(t){if(Pt)return new Promise(function(e,n){var r=Kr(t.querySelectorAll("*")).filter(t9).map(e9),i=If.begin("searchPseudoElements");My(),Promise.all(r).then(function(){i(),Nf(),e()}).catch(function(){i(),Nf(),n()})})}var n9={hooks:function(){return{mutationObserverCallbacks:function(n){return n.pseudoElementsCallback=Oy,n}}},provides:function(e){e.pseudoElements2svg=function(n){var r=n.node,i=r===void 0?ee:r;F.searchPseudoElements&&Oy(i)}}},Fy=!1,r9={mixout:function(){return{dom:{unwatch:function(){My(),Fy=!0}}}},hooks:function(){return{bootstrap:function(){Ty(wf("mutationObserverCallbacks",{}))},noAuto:function(){jT()},watch:function(n){var r=n.observeMutationsRoot;Fy?Nf():Ty(wf("mutationObserverCallbacks",{observeMutationsRoot:r}))}}}},Py=function(e){var n={size:16,x:0,y:0,flipX:!1,flipY:!1,rotate:0};return e.toLowerCase().split(" ").reduce(function(r,i){var o=i.toLowerCase().split("-"),a=o[0],s=o.slice(1).join("-");if(a&&s==="h")return r.flipX=!0,r;if(a&&s==="v")return r.flipY=!0,r;if(s=parseFloat(s),isNaN(s))return r;switch(a){case"grow":r.size=r.size+s;break;case"shrink":r.size=r.size-s;break;case"left":r.x=r.x-s;break;case"right":r.x=r.x+s;break;case"up":r.y=r.y-s;break;case"down":r.y=r.y+s;break;case"rotate":r.rotate=r.rotate+s;break}return r},n)},i9={mixout:function(){return{parse:{transform:function(n){return Py(n)}}}},hooks:function(){return{parseNodeAttributes:function(n,r){var i=r.getAttribute("data-fa-transform");return i&&(n.transform=Py(i)),n}}},provides:function(e){e.generateAbstractTransformGrouping=function(n){var r=n.main,i=n.transform,o=n.containerWidth,a=n.iconWidth,s={transform:"translate(".concat(o/2," 256)")},c="translate(".concat(i.x*32,", ").concat(i.y*32,") "),u="scale(".concat(i.size/16*(i.flipX?-1:1),", ").concat(i.size/16*(i.flipY?-1:1),") "),f="rotate(".concat(i.rotate," 0 0)"),l={transform:"".concat(c," ").concat(u," ").concat(f)},d={transform:"translate(".concat(a/2*-1," -256)")},p={outer:s,inner:l,path:d};return{tag:"g",attributes:I({},p.outer),children:[{tag:"g",attributes:I({},p.inner),children:[{tag:r.icon.tag,children:r.icon.children,attributes:I(I({},r.icon.attributes),p.path)}]}]}}}},Lf={x:0,y:0,width:"100%",height:"100%"};function zy(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 o9(t){return t.tag==="g"?t.children:[t]}var a9={hooks:function(){return{parseNodeAttributes:function(n,r){var i=r.getAttribute("data-fa-mask"),o=i?Bs(i.split(" ").map(function(a){return a.trim()})):xf();return o.prefix||(o.prefix=mn()),n.mask=o,n.maskId=r.getAttribute("data-fa-mask-id"),n}}},provides:function(e){e.generateAbstractMask=function(n){var r=n.children,i=n.attributes,o=n.main,a=n.mask,s=n.maskId,c=n.transform,u=o.width,f=o.icon,l=a.width,d=a.icon,p=iT({transform:c,containerWidth:l,iconWidth:u}),h={tag:"rect",attributes:I(I({},Lf),{},{fill:"white"})},m=f.children?{children:f.children.map(zy)}:{},g={tag:"g",attributes:I({},p.inner),children:[zy(I({tag:f.tag,attributes:I(I({},f.attributes),p.path)},m))]},y={tag:"g",attributes:I({},p.outer),children:[g]},b="mask-".concat(s||Co()),x="clip-".concat(s||Co()),C={tag:"mask",attributes:I(I({},Lf),{},{id:b,maskUnits:"userSpaceOnUse",maskContentUnits:"userSpaceOnUse"}),children:[h,y]},w={tag:"defs",children:[{tag:"clipPath",attributes:{id:x},children:o9(d)},C]};return r.push(w,{tag:"rect",attributes:I({fill:"currentColor","clip-path":"url(#".concat(x,")"),mask:"url(#".concat(b,")")},Lf)}),{children:r,attributes:i}}}},s9={provides:function(e){var n=!1;hn.matchMedia&&(n=hn.matchMedia("(prefers-reduced-motion: reduce)").matches),e.missingIconAbstract=function(){var r=[],i={fill:"currentColor"},o={attributeType:"XML",repeatCount:"indefinite",dur:"2s"};r.push({tag:"path",attributes:I(I({},i),{},{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 a=I(I({},o),{},{attributeName:"opacity"}),s={tag:"circle",attributes:I(I({},i),{},{cx:"256",cy:"364",r:"28"}),children:[]};return n||s.children.push({tag:"animate",attributes:I(I({},o),{},{attributeName:"r",values:"28;14;28;28;14;28;"})},{tag:"animate",attributes:I(I({},a),{},{values:"1;0;1;1;0;1;"})}),r.push(s),r.push({tag:"path",attributes:I(I({},i),{},{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"}),children:n?[]:[{tag:"animate",attributes:I(I({},a),{},{values:"1;0;0;0;0;1;"})}]}),n||r.push({tag:"path",attributes:I(I({},i),{},{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"}),children:[{tag:"animate",attributes:I(I({},a),{},{values:"0;0;1;1;0;0;"})}]}),{tag:"g",attributes:{class:"missing"},children:r}}}},c9={hooks:function(){return{parseNodeAttributes:function(n,r){var i=r.getAttribute("data-fa-symbol"),o=i===null?!1:i===""?!0:i;return n.symbol=o,n}}}},u9=[sT,XT,ZT,qT,KT,n9,r9,i9,a9,s9,c9];wT(u9,{mixoutsTo:Ue}),Ue.noAuto,Ue.config,Ue.library,Ue.dom,Ue.parse,Ue.findIconDefinition,Ue.toHtml;var K=Ue.icon;Ue.layer,Ue.text,Ue.counter;/**
|
2138
2138
|
* @license
|
2139
2139
|
* Copyright 2018 Google LLC
|
2140
2140
|
* SPDX-License-Identifier: BSD-3-Clause
|
@@ -2142,16 +2142,16 @@ svg:not(:root).svg-inline--fa, svg:not(:host).svg-inline--fa {
|
|
2142
2142
|
* @license
|
2143
2143
|
* Copyright 2020 Google LLC
|
2144
2144
|
* SPDX-License-Identifier: BSD-3-Clause
|
2145
|
-
*/const{I:
|
2145
|
+
*/const{I:l9}=f4,f9=t=>t===null||typeof t!="object"&&typeof t!="function",Ry=t=>t.strings===void 0,jy=()=>document.createComment(""),Mo=(t,e,n)=>{var r;const i=t._$AA.parentNode,o=e===void 0?t._$AB:e._$AA;if(n===void 0){const a=i.insertBefore(jy(),o),s=i.insertBefore(jy(),o);n=new l9(a,s,t,t.options)}else{const a=n._$AB.nextSibling,s=n._$AM,c=s!==t;if(c){let u;(r=n._$AQ)===null||r===void 0||r.call(n,t),n._$AM=t,n._$AP!==void 0&&(u=t._$AU)!==s._$AU&&n._$AP(u)}if(a!==o||c){let u=n._$AA;for(;u!==a;){const f=u.nextSibling;i.insertBefore(u,o),u=f}}}return n},lr=(t,e,n=t)=>(t._$AI(e,n),t),d9={},Uy=(t,e=d9)=>t._$AH=e,h9=t=>t._$AH,Of=t=>{var e;(e=t._$AP)===null||e===void 0||e.call(t,!1,!0);let n=t._$AA;const r=t._$AB.nextSibling;for(;n!==r;){const i=n.nextSibling;n.remove(),n=i}};/**
|
2146
2146
|
* @license
|
2147
2147
|
* Copyright 2017 Google LLC
|
2148
2148
|
* SPDX-License-Identifier: BSD-3-Clause
|
2149
|
-
*/const Hy=(t,e,n)=>{const r=new Map;for(let i=e;i<=n;i++)r.set(t[i],i);return r},pI=or(class extends qr{constructor(t){if(super(t),t.type!==vt.CHILD)throw Error("repeat() can only be used in text expressions")}ht(t,e,n){let r;n===void 0?n=e:e!==void 0&&(r=e);const i=[],o=[];let a=0;for(const s of t)i[a]=r?r(s,a):a,o[a]=n(s,a),a++;return{values:o,keys:i}}render(t,e,n){return this.ht(t,e,n).values}update(t,[e,n,r]){var i;const o=hI(t),{values:a,keys:s}=this.ht(e,n,r);if(!Array.isArray(o))return this.ut=s,a;const c=(i=this.ut)!==null&&i!==void 0?i:this.ut=[],u=[];let f,l,d=0,p=o.length-1,h=0,m=a.length-1;for(;d<=p&&h<=m;)if(o[d]===null)d++;else if(o[p]===null)p--;else if(c[d]===s[h])u[h]=lr(o[d],a[h]),d++,h++;else if(c[p]===s[m])u[m]=lr(o[p],a[m]),p--,m--;else if(c[d]===s[m])u[m]=lr(o[d],a[m]),Mo(t,u[m+1],o[d]),d++,m--;else if(c[p]===s[h])u[h]=lr(o[p],a[h]),Mo(t,o[d],o[p]),p--,h++;else if(f===void 0&&(f=Hy(s,h,m),l=Hy(c,d,p)),f.has(c[d]))if(f.has(c[p])){const g=l.get(s[h]),y=g!==void 0?o[g]:null;if(y===null){const b=Mo(t,o[d]);lr(b,a[h]),u[h]=b}else u[h]=lr(y,a[h]),Mo(t,o[d],y),o[g]=null;h++}else Of(o[p]),p--;else Of(o[d]),d++;for(;h<=m;){const g=Mo(t,u[m+1]);lr(g,a[h]),u[h++]=g}for(;d<=p;){const g=o[d++];g!==null&&Of(g)}return this.ut=s,Uy(t,u),Ae}}),Gy="close-dialog";function mI(){return new CustomEvent(Gy,{bubbles:!0})}function fr(t="default",e=document.body){const n=document.createElement("div");n.classList.add("gs-modal"),t!="default"&&n.classList.add(t);const r=o=>{var a;switch(o.key){case"Escape":{const s=n.querySelector(".btn-cancel");s&&(s.click(),o.stopPropagation());break}case"Enter":{if(((a=o.target)==null?void 0:a.tagName)=="TEXTAREA")return;n.querySelector(".btn-primary").click(),o.stopPropagation();break}}};n.addEventListener("keydown",r),Le(E`<div class="backdrop"></div><div class="content"></div>`,n);const i=()=>{n.querySelector(".backdrop").addEventListener("transitionend",()=>n.remove()),n.classList.remove("visible"),document.body.classList.remove(Yn)};return n.addEventListener("keydown",o=>{o.stopPropagation()}),n.addEventListener(Gy,i),e.appendChild(n),window.requestAnimationFrame(()=>n.classList.add("visible")),t!="tour"&&document.body.classList.add(Yn),{content:n.querySelector(".content"),close:i}}function He(t,e={}){const n=fr(),r=e.title;return e.okLabel??(e.okLabel="OK"),new Promise((i,o)=>{const a=()=>{n.close(),i(!0)},s=E`${r?E`<div class="modal-title">${r}</div>`:z}<div class="modal-body" style="max-width:700px">${t}</div><div class="modal-buttons">${e.cancelButton?E`<button class="btn" @click="${()=>{n.close(),i(!1)}}">Cancel</button>`:z} <button class="btn" @click="${a}">${e.okLabel}</button></div>`;Le(s,n.content)})}class Qy extends yt{constructor(){super();te(this,sc);te(this,cc);te(this,Xo);te(this,uc);te(this,fi,void 0);te(this,Vt,void 0);te(this,An,void 0);te(this,Wo,0);this.values=[],this.thresholds=[],this.operators=[],this.colors=Yy,this.showThresholdNumbers=!1,et(this,fi,_b().thresholds(40)),et(this,Vt,G(this,fi).call(this,[])),et(this,An,ka())}connectedCallback(){super.connectedCallback()}createRenderRoot(){return this}willUpdate(n){n.has("values")&&(et(this,Vt,G(this,fi).call(this,this.values)),et(this,An,ka().domain(this.domain).range([0,100])))}get domain(){return[G(this,Vt).at(0).x0,G(this,Vt).at(-1).x1]}render(){const n=G(this,An),r=100/G(this,Vt).length,i=se(this,uc,W2).call(this).map(o=>E`<div style="${Bf({width:r+.01+"%",left:o.x+"%",bottom:o.y+"%",height:o.height+"%",backgroundColor:typeof o.group=="number"?this.colors[o.group%this.colors.length]:"default"})}"></div>`);return E`<div class="histogram-widget"><div class="histogram-plot"><div class="histogram-bars">${i}</div><div class="histogram-thresholds" @click="${se(this,sc,V2)}">${this.thresholds.map((o,a)=>{const s=n(o);return s>=0&&s<=100?E`<div class="histogram-threshold" style="${Bf({left:n(o)+"%"})}"><div class="histogram-knob" @mousedown="${c=>se(this,cc,_2).call(this,c,a)}">${this.showThresholdNumbers?a+1:z}</div></div>`:z})}</div><div class="${nf({"histogram-hint":!0,visible:!this.thresholds.length})}"><span>Click here to add a threshold!</span></div></div><div class="histogram-domain"></div><div class="histogram-extent">${n.domain().map(o=>E`<div>${o}</div>`)}</div></div>`}}fi=new WeakMap,Vt=new WeakMap,An=new WeakMap,Wo=new WeakMap,sc=new WeakSet,V2=function(n){if(performance.now()<G(this,Wo)+200)return;const r=n.target,i=fp(r,n);se(this,Xo,zd).call(this,"add",0,i[0]/r.offsetWidth)},cc=new WeakSet,_2=function(n,r){const o=n.target.closest(".histogram-threshold"),a=o.offsetLeft,s=o.offsetParent.offsetWidth;n.preventDefault(),n.stopPropagation(),this.style.cursor="col-resize",yI(n,(c,u)=>{se(this,Xo,zd).call(this,"adjust",r,(a+c)/s)},()=>{et(this,Wo,performance.now()),this.style.cursor=""})},Xo=new WeakSet,zd=function(n,r,i){i=ps(i,0,1),this.dispatchEvent(new gI(n,r,+G(this,An).invert(i*100).toPrecision(3)))},uc=new WeakSet,W2=function(){const n=G(this,Vt),r=G(this,An),i=90/n.map(f=>f.length).reduce((f,l)=>Math.max(f,l),0),o=[],a=this.thresholds.length==1&&this.operators[0]=="eq",s=[-1/0,...this.thresholds,1/0],c=[!1,...this.operators.map(f=>["lte","gt"].includes(f)),!0],u=["gt","gte"].includes(this.operators[0])?f=>s.length-f-2:f=>f;for(let f=0;f<n.length;f++){const l=n[f],d=r(l.x0);let p=0,h=0;if(a)for(let m=0;m<=1;m++)h=bI(l,this.thresholds[0],m>0),h&&o.push({x:d,y:p*i,height:h*i,group:m}),p+=h;else if(this.thresholds.length)for(let m=0;m<s.length-1;m++){const g=u(m);h=vI(l,s[g],s[g+1],!c[g],c[g+1]),h&&o.push({x:d,y:p*i,height:h*i,group:m}),p+=h}else h=l.length,h&&o.push({x:d,y:p,height:h*i,group:null})}return o},dc(Qy,"properties",{values:{attribute:!1},thresholds:{attribute:!1},operators:{attribute:!1},colors:{attribute:!1},showThresholdNumbers:{}}),customElements.define("genome-spy-histogram",Qy);class gI extends Event{constructor(e,n,r){super(e),this.index=n,this.value=r}}function yI(t,e,n){const r=t.clientX,i=t.clientY,o=function(s){e(s.clientX-r,s.clientY-i)},a=function(s){document.removeEventListener("mousemove",o),document.removeEventListener("mouseup",a),n==null||n(s.clientX-r,s.clientY-i)};document.addEventListener("mousemove",o),document.addEventListener("mouseup",a)}function vI(t,e,n,r=!0,i=!1){const o=r?c=>c>=e:c=>c>e,a=i?c=>c<=n:c=>c<n;let s=0;for(let c=0;c<t.length;c++){const u=t[c];o(u)&&a(u)&&s++}return s}function bI(t,e,n=!1){let r=0;for(let i=0;i<t.length;i++)r+=+(t[i]==e);return n?t.length-r:r}const Yy=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b"];function AI(t,e){var r;const n=(r=t.scale)==null?void 0:r.type;nn(n)?xI(t,e):ze(n)||Hn(n)?wI(t,e):He("Not implemented (yet).")}function xI(t,e){const n=e.provenance.storeHelper.getDispatcher(),r=t.scale,i=new Set(Vy(t,e.leafSamples,e.sampleHierarchy)),o=r.domain().filter(C=>i.has(C)).map((C,w)=>({index:w,value:C,stringValue:`${C}`,lowerCaseValue:`${C}`.toLowerCase()})),a=fr(),s=E`<div class="modal-title">Filter by <em>${t.name}</em></div>`,c=new Set;let u="";const f=C=>{n(e.actions.filterByNominal({values:r.domain().filter(w=>c.has(w)),attribute:t.attribute,remove:C})),a.close()},l=()=>o.filter(C=>u.length==0||C.lowerCaseValue.includes(u)),d=C=>{u=C.target.value.toLowerCase(),x()},p=C=>{const w=C.target,v=o[+w.value].value;w.checked?c.add(v):c.delete(v),x()},h=C=>{var w;if(C.key=="ArrowDown")(w=a.content.querySelector(".gs-checkbox-list li:first-child input[type='checkbox']"))==null||w.focus(),C.preventDefault(),C.stopPropagation();else if(C.key=="Enter"){const v=l();v.length==1&&(c.add(v[0].value),x()),C.stopPropagation()}},m=()=>{a.content.querySelector("input[type='text']").focus()},g=C=>{var v,A,D,k,O;const w=C.target;if(w.type=="checkbox")if(C.key=="ArrowDown")(A=(v=w.closest("li").nextElementSibling)==null?void 0:v.querySelector("input[type='checkbox']"))==null||A.focus(),C.preventDefault();else if(C.key=="ArrowUp"){const T=(D=w.closest("li").previousElementSibling)==null?void 0:D.querySelector("input[type='checkbox']");T?T.focus():m(),C.preventDefault()}else C.key=="Esc"?(m(),C.stopPropagation()):C.key=="Tab"&&!C.shiftKey?(k=w.closest(".gs-checkbox-list").querySelector("li:last-child input"))==null||k.focus():C.key=="Tab"&&C.shiftKey&&((O=w.closest(".gs-checkbox-list").querySelector("li:first-child input"))==null||O.focus())},y=()=>E`<div class="modal-buttons"><button class="btn btn-cancel" @click="${()=>a.close()}">Cancel</button> <button class="btn" ?disabled="${!c.size}" @click="${()=>f(!1)}">${K(ar).node[0]} Retain</button> <button class="btn" ?disabled="${!c.size}" @click="${()=>f(!0)}">${K(Ss).node[0]} Remove</button></div>`,b=r;function x(){const C=l(),w=E`<div class="gs-form-group"><p>Please select one or more categories and choose an action.</p><input type="text" placeholder="Type something to filter the list" @keydown="${h}" @input="${d}"><div class="gs-checkbox-list-wrapper"><ul class="gs-checkbox-list" @input="${p}" @keydown="${g}">${pI(C,A=>A.value,A=>E`<li><label class="checkbox"><span class="color" style="${Bf({backgroundColor:b(A.value).toString()})}"></span> <input type="checkbox" .checked="${c.has(A.value)}" .value="${""+A.index}"> ${A.stringValue}</label></li>`)}</ul>${C.length==0?E`<div class="search-note"><div>Nothing found</div></div>`:C.length==1&&o.length>1?E`<div class="search-note"><div>${K(o6).node[0]} Hit enter to select the exact match</div></div>`:z}</div><small>The number of selected categories: <strong>${c.size}</strong></small></div>`;Le(E`${s}<div class="modal-body">${w}</div>${y()}`,a.content);const v=a.content.querySelector(".gs-checkbox-list");v.style.minHeight=`${v.offsetHeight}px`}x(),m()}function wI(t,e){var g;const n=e.provenance.storeHelper.getDispatcher();let r="lt",i;const o=fr(),a=E`<div class="modal-title">Filter by <em>${t.name}</em></div>`,s=y=>{n(e.actions.filterByQuantitative({attribute:t.attribute,operator:r,operand:i})),o.close()},c=()=>E`<div class="modal-buttons"><button class="btn btn-cancel" @click="${()=>o.close()}">Cancel</button> <button class="btn btn-primary" ?disabled="${typeof i>"u"}" @click="${()=>s()}">${K(ar).node[0]} Retain</button></div>`,u=y=>{r=y.target.value,m()},f=y=>{const x=y.target.value;/^\d+(\.(\d+)?)?$/.test(x)&&(i=+x,m())},l=y=>{typeof i!="number"&&(i=y.value,m())},d=y=>{i=y.value,m()},p=Vy(t,e.leafSamples,e.sampleHierarchy),h=()=>E`<div class="gs-form-group"><label>Retain samples where <em>${t.name}</em> is</label><div class="btn-group" role="group">${Object.entries(CI).map(([y,b])=>E`<button class="${nf({btn:!0,chosen:y==r})}" .value="${y}" @click="${u}" title="${b[1]}">${b[0]}</button>`)}</div><genome-spy-histogram .values="${p}" .thresholds="${[i].filter(y=>y!==void 0)}" .operators="${[r]}" .colors="${["#1f77b4","#ddd"]}" .showThresholdNumbers="${!1}" @add="${l}" @adjust="${d}"></genome-spy-histogram><input type="text" placeholder="... or enter a numeric value here" .value="${typeof i=="number"?""+i:""}" @input="${f}"></div>`;function m(){Le(E`${a}<div class="modal-body">${h()}</div>${c()}`,o.content)}m(),(g=o.content.querySelector("input[type='text']"))==null||g.focus()}const CI={lt:["<","less than"],lte:["≤","less than or equal to"],eq:["=","equal to"],gte:["≥","greater than or equal to"],gt:[">","greater than"]};function Vy(t,e,n){const r=t.accessor;return e.map(i=>r(i,n))}function ut(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 gn(t){return!!t&&!!t[oe]}function Ut(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)===LI}(t)||Array.isArray(t)||!!t[tv]||!!t.constructor[tv]||Ff(t)||Pf(t))}function dr(t,e,n){n===void 0&&(n=!1),ti(t)===0?(n?Object.keys:ri)(t).forEach(function(r){n&&typeof r=="symbol"||e(r,t[r],t)}):t.forEach(function(r,i){return e(i,r,t)})}function ti(t){var e=t[oe];return e?e.i>3?e.i-4:e.i:Array.isArray(t)?1:Ff(t)?2:Pf(t)?3:0}function ni(t,e){return ti(t)===2?t.has(e):Object.prototype.hasOwnProperty.call(t,e)}function SI(t,e){return ti(t)===2?t.get(e):t[e]}function _y(t,e,n){var r=ti(t);r===2?t.set(e,n):r===3?(t.delete(e),t.add(n)):t[e]=n}function Wy(t,e){return t===e?t!==0||1/t==1/e:t!=t&&e!=e}function Ff(t){return kI&&t instanceof Map}function Pf(t){return NI&&t instanceof Set}function hr(t){return t.o||t.t}function zf(t){if(Array.isArray(t))return Array.prototype.slice.call(t);var e=nv(t);delete e[oe];for(var n=ri(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 Rf(t,e){return e===void 0&&(e=!1),jf(t)||gn(t)||!Ut(t)||(ti(t)>1&&(t.set=t.add=t.clear=t.delete=EI),Object.freeze(t),e&&dr(t,function(n,r){return Rf(r,!0)},!0)),t}function EI(){ut(2)}function jf(t){return t==null||typeof t!="object"||Object.isFrozen(t)}function At(t){var e=Xf[t];return e||ut(18,t),e}function DI(t,e){Xf[t]||(Xf[t]=e)}function Uf(){return To}function Hf(t,e){e&&(At("Patches"),t.u=[],t.s=[],t.v=e)}function Rs(t){Gf(t),t.p.forEach(MI),t.p=null}function Gf(t){t===To&&(To=t.l)}function Xy(t){return To={p:[],l:To,h:t,m:!0,_:0}}function MI(t){var e=t[oe];e.i===0||e.i===1?e.j():e.O=!0}function Qf(t,e){e._=e.p.length;var n=e.p[0],r=t!==void 0&&t!==n;return e.h.g||At("ES5").S(e,t,r),r?(n[oe].P&&(Rs(e),ut(4)),Ut(t)&&(t=js(e,t),e.l||Us(e,t)),e.u&&At("Patches").M(n[oe].t,t,e.u,e.s)):t=js(e,n,[]),Rs(e),e.u&&e.v(e.u,e.s),t!==ev?t:void 0}function js(t,e,n){if(jf(e))return e;var r=e[oe];if(!r)return dr(e,function(o,a){return Zy(t,r,e,o,a,n)},!0),e;if(r.A!==t)return e;if(!r.P)return Us(t,r.t,!0),r.t;if(!r.I){r.I=!0,r.A._--;var i=r.i===4||r.i===5?r.o=zf(r.k):r.o;dr(r.i===3?new Set(i):i,function(o,a){return Zy(t,r,i,o,a,n)}),Us(t,i,!1),n&&t.u&&At("Patches").R(r,n,t.u,t.s)}return r.o}function Zy(t,e,n,r,i,o){if(gn(i)){var a=js(t,i,o&&e&&e.i!==3&&!ni(e.D,r)?o.concat(r):void 0);if(_y(n,r,a),!gn(a))return;t.m=!1}if(Ut(i)&&!jf(i)){if(!t.h.F&&t._<1)return;js(t,i),e&&e.A.l||Us(t,i)}}function Us(t,e,n){n===void 0&&(n=!1),t.h.F&&t.m&&Rf(e,n)}function Yf(t,e){var n=t[oe];return(n?hr(n):t)[e]}function qy(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 yn(t){t.P||(t.P=!0,t.l&&yn(t.l))}function Vf(t){t.o||(t.o=zf(t.t))}function _f(t,e,n){var r=Ff(e)?At("MapSet").N(e,n):Pf(e)?At("MapSet").T(e,n):t.g?function(i,o){var a=Array.isArray(i),s={i:a?1:0,A:o?o.A:Uf(),P:!1,I:!1,D:{},l:o,t:i,k:null,o:null,j:null,C:!1},c=s,u=Io;a&&(c=[s],u=ko);var f=Proxy.revocable(c,u),l=f.revoke,d=f.proxy;return s.k=d,s.j=l,d}(e,n):At("ES5").J(e,n);return(n?n.A:Uf()).p.push(r),r}function TI(t){return gn(t)||ut(22,t),function e(n){if(!Ut(n))return n;var r,i=n[oe],o=ti(n);if(i){if(!i.P&&(i.i<4||!At("ES5").K(i)))return i.t;i.I=!0,r=Ky(n,o),i.I=!1}else r=Ky(n,o);return dr(r,function(a,s){i&&SI(i.t,a)===s||_y(r,a,e(s))}),o===3?new Set(r):r}(t)}function Ky(t,e){switch(e){case 2:return new Map(t);case 3:return Array.from(t)}return zf(t)}function II(){function t(o,a){var s=i[o];return s?s.enumerable=a:i[o]=s={configurable:!0,enumerable:a,get:function(){var c=this[oe];return Io.get(c,o)},set:function(c){var u=this[oe];Io.set(u,o,c)}},s}function e(o){for(var a=o.length-1;a>=0;a--){var s=o[a][oe];if(!s.P)switch(s.i){case 5:r(s)&&yn(s);break;case 4:n(s)&&yn(s)}}}function n(o){for(var a=o.t,s=o.k,c=ri(s),u=c.length-1;u>=0;u--){var f=c[u];if(f!==oe){var l=a[f];if(l===void 0&&!ni(a,f))return!0;var d=s[f],p=d&&d[oe];if(p?p.t!==l:!Wy(d,l))return!0}}var h=!!a[oe];return c.length!==ri(a).length+(h?0:1)}function r(o){var a=o.k;if(a.length!==o.t.length)return!0;var s=Object.getOwnPropertyDescriptor(a,a.length-1);if(s&&!s.get)return!0;for(var c=0;c<a.length;c++)if(!a.hasOwnProperty(c))return!0;return!1}var i={};DI("ES5",{J:function(o,a){var s=Array.isArray(o),c=function(f,l){if(f){for(var d=Array(l.length),p=0;p<l.length;p++)Object.defineProperty(d,""+p,t(p,!0));return d}var h=nv(l);delete h[oe];for(var m=ri(h),g=0;g<m.length;g++){var y=m[g];h[y]=t(y,f||!!h[y].enumerable)}return Object.create(Object.getPrototypeOf(l),h)}(s,o),u={i:s?5:4,A:a?a.A:Uf(),P:!1,I:!1,D:{},l:a,t:o,k:c,o:null,O:!1,C:!1};return Object.defineProperty(c,oe,{value:u,writable:!0}),c},S:function(o,a,s){s?gn(a)&&a[oe].A===o&&e(o.p):(o.u&&function c(u){if(u&&typeof u=="object"){var f=u[oe];if(f){var l=f.t,d=f.k,p=f.D,h=f.i;if(h===4)dr(d,function(x){x!==oe&&(l[x]!==void 0||ni(l,x)?p[x]||c(d[x]):(p[x]=!0,yn(f)))}),dr(l,function(x){d[x]!==void 0||ni(d,x)||(p[x]=!1,yn(f))});else if(h===5){if(r(f)&&(yn(f),p.length=!0),d.length<l.length)for(var m=d.length;m<l.length;m++)p[m]=!1;else for(var g=l.length;g<d.length;g++)p[g]=!0;for(var y=Math.min(d.length,l.length),b=0;b<y;b++)d.hasOwnProperty(b)||(p[b]=!0),p[b]===void 0&&c(d[b])}}}}(o.p[0]),e(o.p))},K:function(o){return o.i===4?n(o):r(o)}})}var Jy,To,Wf=typeof Symbol<"u"&&typeof Symbol("x")=="symbol",kI=typeof Map<"u",NI=typeof Set<"u",$y=typeof Proxy<"u"&&Proxy.revocable!==void 0&&typeof Reflect<"u",ev=Wf?Symbol.for("immer-nothing"):((Jy={})["immer-nothing"]=!0,Jy),tv=Wf?Symbol.for("immer-draftable"):"__$immer_draftable",oe=Wf?Symbol.for("immer-state"):"__$immer_state",LI=""+Object.prototype.constructor,ri=typeof Reflect<"u"&&Reflect.ownKeys?Reflect.ownKeys:Object.getOwnPropertySymbols!==void 0?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:Object.getOwnPropertyNames,nv=Object.getOwnPropertyDescriptors||function(t){var e={};return ri(t).forEach(function(n){e[n]=Object.getOwnPropertyDescriptor(t,n)}),e},Xf={},Io={get:function(t,e){if(e===oe)return t;var n=hr(t);if(!ni(n,e))return function(i,o,a){var s,c=qy(o,a);return c?"value"in c?c.value:(s=c.get)===null||s===void 0?void 0:s.call(i.k):void 0}(t,n,e);var r=n[e];return t.I||!Ut(r)?r:r===Yf(t.t,e)?(Vf(t),t.o[e]=_f(t.A.h,r,t)):r},has:function(t,e){return e in hr(t)},ownKeys:function(t){return Reflect.ownKeys(hr(t))},set:function(t,e,n){var r=qy(hr(t),e);if(r!=null&&r.set)return r.set.call(t.k,n),!0;if(!t.P){var i=Yf(hr(t),e),o=i==null?void 0:i[oe];if(o&&o.t===n)return t.o[e]=n,t.D[e]=!1,!0;if(Wy(n,i)&&(n!==void 0||ni(t.t,e)))return!0;Vf(t),yn(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 Yf(t.t,e)!==void 0||e in t.t?(t.D[e]=!1,Vf(t),yn(t)):delete t.D[e],t.o&&delete t.o[e],!0},getOwnPropertyDescriptor:function(t,e){var n=hr(t),r=Reflect.getOwnPropertyDescriptor(n,e);return r&&{writable:!0,configurable:t.i!==1||e!=="length",enumerable:r.enumerable,value:n[e]}},defineProperty:function(){ut(11)},getPrototypeOf:function(t){return Object.getPrototypeOf(t.t)},setPrototypeOf:function(){ut(12)}},ko={};dr(Io,function(t,e){ko[t]=function(){return arguments[0]=arguments[0][0],e.apply(this,arguments)}}),ko.deleteProperty=function(t,e){return ko.set.call(this,t,e,void 0)},ko.set=function(t,e,n){return Io.set.call(this,t[0],e,n,t[0])};var BI=function(){function t(n){var r=this;this.g=$y,this.F=!0,this.produce=function(i,o,a){if(typeof i=="function"&&typeof o!="function"){var s=o;o=i;var c=r;return function(m){var g=this;m===void 0&&(m=s);for(var y=arguments.length,b=Array(y>1?y-1:0),x=1;x<y;x++)b[x-1]=arguments[x];return c.produce(m,function(C){var w;return(w=o).call.apply(w,[g,C].concat(b))})}}var u;if(typeof o!="function"&&ut(6),a!==void 0&&typeof a!="function"&&ut(7),Ut(i)){var f=Xy(r),l=_f(r,i,void 0),d=!0;try{u=o(l),d=!1}finally{d?Rs(f):Gf(f)}return typeof Promise<"u"&&u instanceof Promise?u.then(function(m){return Hf(f,a),Qf(m,f)},function(m){throw Rs(f),m}):(Hf(f,a),Qf(u,f))}if(!i||typeof i!="object"){if((u=o(i))===void 0&&(u=i),u===ev&&(u=void 0),r.F&&Rf(u,!0),a){var p=[],h=[];At("Patches").M(i,u,p,h),a(p,h)}return u}ut(21,i)},this.produceWithPatches=function(i,o){if(typeof i=="function")return function(u){for(var f=arguments.length,l=Array(f>1?f-1:0),d=1;d<f;d++)l[d-1]=arguments[d];return r.produceWithPatches(u,function(p){return i.apply(void 0,[p].concat(l))})};var a,s,c=r.produce(i,o,function(u,f){a=u,s=f});return typeof Promise<"u"&&c instanceof Promise?c.then(function(u){return[u,a,s]}):[c,a,s]},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){Ut(n)||ut(8),gn(n)&&(n=TI(n));var r=Xy(this),i=_f(this,n,void 0);return i[oe].C=!0,Gf(r),i},e.finishDraft=function(n,r){var i=n&&n[oe],o=i.A;return Hf(o,r),Qf(void 0,o)},e.setAutoFreeze=function(n){this.F=n},e.setUseProxies=function(n){n&&!$y&&ut(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}}i>-1&&(r=r.slice(i+1));var a=At("Patches").$;return gn(n)?a(n,r):this.produce(n,function(s){return a(s,r)})},t}(),Ge=new BI,rv=Ge.produce;Ge.produceWithPatches.bind(Ge),Ge.setAutoFreeze.bind(Ge),Ge.setUseProxies.bind(Ge),Ge.applyPatches.bind(Ge),Ge.createDraft.bind(Ge),Ge.finishDraft.bind(Ge);function OI(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function iv(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 ov(t){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{};e%2?iv(Object(n),!0).forEach(function(r){OI(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):iv(Object(n)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(n,r))})}return t}function Ee(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 av=function(){return typeof Symbol=="function"&&Symbol.observable||"@@observable"}(),Zf=function(){return Math.random().toString(36).substring(7).split("").join(".")},Hs={INIT:"@@redux/INIT"+Zf(),REPLACE:"@@redux/REPLACE"+Zf(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+Zf()}};function FI(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 sv(t,e,n){var r;if(typeof e=="function"&&typeof n=="function"||typeof n=="function"&&typeof arguments[3]=="function")throw new Error(Ee(0));if(typeof e=="function"&&typeof n>"u"&&(n=e,e=void 0),typeof n<"u"){if(typeof n!="function")throw new Error(Ee(1));return n(sv)(t,e)}if(typeof t!="function")throw new Error(Ee(2));var i=t,o=e,a=[],s=a,c=!1;function u(){s===a&&(s=a.slice())}function f(){if(c)throw new Error(Ee(3));return o}function l(m){if(typeof m!="function")throw new Error(Ee(4));if(c)throw new Error(Ee(5));var g=!0;return u(),s.push(m),function(){if(g){if(c)throw new Error(Ee(6));g=!1,u();var b=s.indexOf(m);s.splice(b,1),a=null}}}function d(m){if(!FI(m))throw new Error(Ee(7));if(typeof m.type>"u")throw new Error(Ee(8));if(c)throw new Error(Ee(9));try{c=!0,o=i(o,m)}finally{c=!1}for(var g=a=s,y=0;y<g.length;y++){var b=g[y];b()}return m}function p(m){if(typeof m!="function")throw new Error(Ee(10));i=m,d({type:Hs.REPLACE})}function h(){var m,g=l;return m={subscribe:function(b){if(typeof b!="object"||b===null)throw new Error(Ee(11));function x(){b.next&&b.next(f())}x();var C=g(x);return{unsubscribe:C}}},m[av]=function(){return this},m}return d({type:Hs.INIT}),r={dispatch:d,subscribe:l,getState:f,replaceReducer:p},r[av]=h,r}function PI(t){Object.keys(t).forEach(function(e){var n=t[e],r=n(void 0,{type:Hs.INIT});if(typeof r>"u")throw new Error(Ee(12));if(typeof n(void 0,{type:Hs.PROBE_UNKNOWN_ACTION()})>"u")throw new Error(Ee(13))})}function qf(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),a;try{PI(n)}catch(s){a=s}return function(c,u){if(c===void 0&&(c={}),a)throw a;for(var f=!1,l={},d=0;d<o.length;d++){var p=o[d],h=n[p],m=c[p],g=h(m,u);if(typeof g>"u")throw u&&u.type,new Error(Ee(14));l[p]=g,f=f||g!==m}return f=f||o.length!==Object.keys(c).length,f?l:c}}function Gs(){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 zI(){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(Ee(15))},a={getState:i.getState,dispatch:function(){return o.apply(void 0,arguments)}},s=e.map(function(c){return c(a)});return o=Gs.apply(void 0,s)(i.dispatch),ov(ov({},i),{},{dispatch:o})}}}var Qs="NOT_FOUND";function RI(t){var e;return{get:function(r){return e&&t(e.key,r)?e.value:Qs},put:function(r,i){e={key:r,value:i}},getEntries:function(){return e?[e]:[]},clear:function(){e=void 0}}}function jI(t,e){var n=[];function r(s){var c=n.findIndex(function(f){return e(s,f.key)});if(c>-1){var u=n[c];return c>0&&(n.splice(c,1),n.unshift(u)),u.value}return Qs}function i(s,c){r(s)===Qs&&(n.unshift({key:s,value:c}),n.length>t&&n.pop())}function o(){return n}function a(){n=[]}return{get:r,put:i,getEntries:o,clear:a}}var UI=function(e,n){return e===n};function HI(t){return function(n,r){if(n===null||r===null||n.length!==r.length)return!1;for(var i=n.length,o=0;o<i;o++)if(!t(n[o],r[o]))return!1;return!0}}function GI(t,e){var n=typeof e=="object"?e:{equalityCheck:e},r=n.equalityCheck,i=r===void 0?UI:r,o=n.maxSize,a=o===void 0?1:o,s=n.resultEqualityCheck,c=HI(i),u=a===1?RI(c):jI(a,c);function f(){var l=u.get(arguments);if(l===Qs){if(l=t.apply(null,arguments),s){var d=u.getEntries(),p=d.find(function(h){return s(h.value,l)});p&&(l=p.value)}u.put(arguments,l)}return l}return f.clearCache=function(){return u.clear()},f}function QI(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=="function"?"function "+(r.name||"unnamed")+"()":typeof r}).join(", ");throw new Error("createSelector expects all input-selectors to be functions, but received the following types: ["+n+"]")}return e}function YI(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r<e;r++)n[r-1]=arguments[r];var i=function(){for(var a=arguments.length,s=new Array(a),c=0;c<a;c++)s[c]=arguments[c];var u=0,f,l={memoizeOptions:void 0},d=s.pop();if(typeof d=="object"&&(l=d,d=s.pop()),typeof d!="function")throw new Error("createSelector expects an output function after the inputs, but received: ["+typeof d+"]");var p=l,h=p.memoizeOptions,m=h===void 0?n:h,g=Array.isArray(m)?m:[m],y=QI(s),b=t.apply(void 0,[function(){return u++,d.apply(null,arguments)}].concat(g)),x=t(function(){for(var C=[],w=y.length,v=0;v<w;v++)C.push(y[v].apply(null,arguments));return f=b.apply(null,C),f});return Object.assign(x,{resultFunc:d,memoizedResultFunc:b,dependencies:y,lastResult:function(){return f},recomputations:function(){return u},resetRecomputations:function(){return u=0}}),x};return i}var VI=YI(GI);function cv(t){var e=function(r){var i=r.dispatch,o=r.getState;return function(a){return function(s){return typeof s=="function"?s(i,o,t):a(s)}}};return e}var uv=cv();uv.withExtraArgument=cv;const lv=uv;var _I=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 Ys=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},WI=Object.defineProperty,fv=Object.getOwnPropertySymbols,XI=Object.prototype.hasOwnProperty,ZI=Object.prototype.propertyIsEnumerable,dv=function(t,e,n){return e in t?WI(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n},No=function(t,e){for(var n in e||(e={}))XI.call(e,n)&&dv(t,n,e[n]);if(fv)for(var r=0,i=fv(e);r<i.length;r++){var n=i[r];ZI.call(e,n)&&dv(t,n,e[n])}return t},qI=typeof window<"u"&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(arguments.length!==0)return typeof arguments[0]=="object"?Gs:Gs.apply(null,arguments)};function KI(t){if(typeof t!="object"||t===null)return!1;var e=Object.getPrototypeOf(t);if(e===null)return!0;for(var n=e;Object.getPrototypeOf(n)!==null;)n=Object.getPrototypeOf(n);return e===n}var JI=function(t){_I(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,Ys([void 0],n[0].concat(this)))):new(e.bind.apply(e,Ys([void 0],n.concat(this))))},e}(Array);function Kf(t){return Ut(t)?rv(t,function(){}):t}function $I(t){return typeof t=="boolean"}function e9(){return function(e){return t9(e)}}function t9(t){t===void 0&&(t={});var e=t.thunk,n=e===void 0?!0:e;t.immutableCheck,t.serializableCheck;var r=new JI;return n&&($I(n)?r.push(lv):r.push(lv.withExtraArgument(n.extraArgument))),r}var n9=!0;function r9(t){var e=e9(),n=t||{},r=n.reducer,i=r===void 0?void 0:r,o=n.middleware,a=o===void 0?e():o,s=n.devTools,c=s===void 0?!0:s,u=n.preloadedState,f=u===void 0?void 0:u,l=n.enhancers,d=l===void 0?void 0:l,p;if(typeof i=="function")p=i;else if(KI(i))p=qf(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 h=a;typeof h=="function"&&(h=h(e));var m=zI.apply(void 0,h),g=Gs;c&&(g=qI(No({trace:!n9},typeof c=="object"&&c)));var y=[m];Array.isArray(d)?y=Ys([m],d):typeof d=="function"&&(y=d(y));var b=g.apply(void 0,y);return sv(p,f,b)}function Lo(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 No(No({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 hv(t){var e={},n=[],r,i={addCase:function(o,a){var s=typeof o=="string"?o:o.type;if(s in e)throw new Error("addCase cannot be called with two reducers for the same action type");return e[s]=a,i},addMatcher:function(o,a){return n.push({matcher:o,reducer:a}),i},addDefaultCase:function(o){return r=o,i}};return t(i),[e,n,r]}function i9(t){return typeof t=="function"}function o9(t,e,n,r){n===void 0&&(n=[]);var i=typeof e=="function"?hv(e):[e,n,r],o=i[0],a=i[1],s=i[2],c;if(i9(t))c=function(){return Kf(t())};else{var u=Kf(t);c=function(){return u}}function f(l,d){l===void 0&&(l=c());var p=Ys([o[d.type]],a.filter(function(h){var m=h.matcher;return m(d)}).map(function(h){var m=h.reducer;return m}));return p.filter(function(h){return!!h}).length===0&&(p=[s]),p.reduce(function(h,m){if(m)if(gn(h)){var g=h,y=m(g,d);return typeof y>"u"?h:y}else{if(Ut(h))return rv(h,function(b){return m(b,d)});var y=m(h,d);if(typeof y>"u"){if(h===null)return h;throw Error("A case reducer on a non-draftable value must not return undefined")}return y}return h},l)}return f.getInitialState=c,f}function a9(t,e){return t+"/"+e}function pv(t){var e=t.name;if(!e)throw new Error("`name` is a required option for createSlice");typeof process<"u";var n=typeof t.initialState=="function"?t.initialState:Kf(t.initialState),r=t.reducers||{},i=Object.keys(r),o={},a={},s={};i.forEach(function(f){var l=r[f],d=a9(e,f),p,h;"reducer"in l?(p=l.reducer,h=l.prepare):p=l,o[f]=p,a[d]=p,s[f]=h?Lo(d,h):Lo(d)});function c(){var f=typeof t.extraReducers=="function"?hv(t.extraReducers):[t.extraReducers],l=f[0],d=l===void 0?{}:l,p=f[1],h=p===void 0?[]:p,m=f[2],g=m===void 0?void 0:m,y=No(No({},d),a);return o9(n,y,h,g)}var u;return{name:e,reducer:function(f,l){return u||(u=c()),u(f,l)},actions:s,caseReducers:o,getInitialState:function(){return u||(u=c()),u.getInitialState()}}}var Jf="listenerMiddleware";Lo(Jf+"/add"),Lo(Jf+"/removeAll"),Lo(Jf+"/remove"),II();function s9(t,e){var n=t+"",r=e+"";return n<r?-1:n==r?0:1}var c9=[].forEach;function u9(t,e,n){if(typeof e!="function")throw new TypeError(e+" is not a function");var r,i=[],o=[],a=[];c9.call(t,function(c,u,f){if(r=e(c,u,f),r===void 0)return void a.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=s9),i.sort(function(c,u){return n(o[c],o[u])});var s=i.map(function(c){return t[c]}).concat(a);return s.length!=t.length&&(s.length=t.length),s}function l9(t,e){const n=i=>i.copy().range(_t(0,i.domain().length)).unknown(-1);let r;switch(e.type){case"quantitative":r=i=>le(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 f9(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 d9(t,e,n){const r=new Set,i=o=>(r.size<n&&r.add(o),r.has(o));return t.filter(o=>i(e(o)))}function h9(t,e,n=!1){return u9(t,e,(r,i)=>(n&&([r,i]=[i,r]),r<i?-1:r>i?1:0))}const p9={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 m9(t,e,n,r){const i=p9[n];return t.filter(o=>i(e(o),r))}function mv(t,e,n,r){const i=new Set(r),o=s=>i.has(s),a=n=="remove"?s=>!o(s):o;return t.filter(s=>a(e(s)))}function g9(t,e){const n=r=>r!=null;return t.filter(r=>n(e(r)))}/**
|
2149
|
+
*/const Hy=(t,e,n)=>{const r=new Map;for(let i=e;i<=n;i++)r.set(t[i],i);return r},p9=or(class extends qr{constructor(t){if(super(t),t.type!==vt.CHILD)throw Error("repeat() can only be used in text expressions")}ht(t,e,n){let r;n===void 0?n=e:e!==void 0&&(r=e);const i=[],o=[];let a=0;for(const s of t)i[a]=r?r(s,a):a,o[a]=n(s,a),a++;return{values:o,keys:i}}render(t,e,n){return this.ht(t,e,n).values}update(t,[e,n,r]){var i;const o=h9(t),{values:a,keys:s}=this.ht(e,n,r);if(!Array.isArray(o))return this.ut=s,a;const c=(i=this.ut)!==null&&i!==void 0?i:this.ut=[],u=[];let f,l,d=0,p=o.length-1,h=0,m=a.length-1;for(;d<=p&&h<=m;)if(o[d]===null)d++;else if(o[p]===null)p--;else if(c[d]===s[h])u[h]=lr(o[d],a[h]),d++,h++;else if(c[p]===s[m])u[m]=lr(o[p],a[m]),p--,m--;else if(c[d]===s[m])u[m]=lr(o[d],a[m]),Mo(t,u[m+1],o[d]),d++,m--;else if(c[p]===s[h])u[h]=lr(o[p],a[h]),Mo(t,o[d],o[p]),p--,h++;else if(f===void 0&&(f=Hy(s,h,m),l=Hy(c,d,p)),f.has(c[d]))if(f.has(c[p])){const g=l.get(s[h]),y=g!==void 0?o[g]:null;if(y===null){const b=Mo(t,o[d]);lr(b,a[h]),u[h]=b}else u[h]=lr(y,a[h]),Mo(t,o[d],y),o[g]=null;h++}else Of(o[p]),p--;else Of(o[d]),d++;for(;h<=m;){const g=Mo(t,u[m+1]);lr(g,a[h]),u[h++]=g}for(;d<=p;){const g=o[d++];g!==null&&Of(g)}return this.ut=s,Uy(t,u),Ae}}),Gy="close-dialog";function m9(){return new CustomEvent(Gy,{bubbles:!0})}function fr(t="default",e=document.body){const n=document.createElement("div");n.classList.add("gs-modal"),t!="default"&&n.classList.add(t);const r=o=>{var a;switch(o.key){case"Escape":{const s=n.querySelector(".btn-cancel");s&&(s.click(),o.stopPropagation());break}case"Enter":{if(((a=o.target)==null?void 0:a.tagName)=="TEXTAREA")return;n.querySelector(".btn-primary").click(),o.stopPropagation();break}}};n.addEventListener("keydown",r),Le(E`<div class="backdrop"></div><div class="content"></div>`,n);const i=()=>{n.querySelector(".backdrop").addEventListener("transitionend",()=>n.remove()),n.classList.remove("visible"),document.body.classList.remove(Yn)};return n.addEventListener("keydown",o=>{o.stopPropagation()}),n.addEventListener(Gy,i),e.appendChild(n),window.requestAnimationFrame(()=>n.classList.add("visible")),t!="tour"&&document.body.classList.add(Yn),{content:n.querySelector(".content"),close:i}}function He(t,e={}){const n=fr(),r=e.title;return e.okLabel??(e.okLabel="OK"),new Promise((i,o)=>{const a=()=>{n.close(),i(!0)},s=E`${r?E`<div class="modal-title">${r}</div>`:z}<div class="modal-body" style="max-width:700px">${t}</div><div class="modal-buttons">${e.cancelButton?E`<button class="btn" @click="${()=>{n.close(),i(!1)}}">Cancel</button>`:z} <button class="btn" @click="${a}">${e.okLabel}</button></div>`;Le(s,n.content)})}class Qy extends yt{constructor(){super();te(this,sc);te(this,cc);te(this,Xo);te(this,uc);te(this,fi,void 0);te(this,Vt,void 0);te(this,An,void 0);te(this,Wo,0);this.values=[],this.thresholds=[],this.operators=[],this.colors=Yy,this.showThresholdNumbers=!1,et(this,fi,_b().thresholds(40)),et(this,Vt,G(this,fi).call(this,[])),et(this,An,ka())}connectedCallback(){super.connectedCallback()}createRenderRoot(){return this}willUpdate(n){n.has("values")&&(et(this,Vt,G(this,fi).call(this,this.values)),et(this,An,ka().domain(this.domain).range([0,100])))}get domain(){return[G(this,Vt).at(0).x0,G(this,Vt).at(-1).x1]}render(){const n=G(this,An),r=100/G(this,Vt).length,i=se(this,uc,W2).call(this).map(o=>E`<div style="${Bf({width:r+.01+"%",left:o.x+"%",bottom:o.y+"%",height:o.height+"%",backgroundColor:typeof o.group=="number"?this.colors[o.group%this.colors.length]:"default"})}"></div>`);return E`<div class="histogram-widget"><div class="histogram-plot"><div class="histogram-bars">${i}</div><div class="histogram-thresholds" @click="${se(this,sc,V2)}">${this.thresholds.map((o,a)=>{const s=n(o);return s>=0&&s<=100?E`<div class="histogram-threshold" style="${Bf({left:n(o)+"%"})}"><div class="histogram-knob" @mousedown="${c=>se(this,cc,_2).call(this,c,a)}">${this.showThresholdNumbers?a+1:z}</div></div>`:z})}</div><div class="${nf({"histogram-hint":!0,visible:!this.thresholds.length})}"><span>Click here to add a threshold!</span></div></div><div class="histogram-domain"></div><div class="histogram-extent">${n.domain().map(o=>E`<div>${o}</div>`)}</div></div>`}}fi=new WeakMap,Vt=new WeakMap,An=new WeakMap,Wo=new WeakMap,sc=new WeakSet,V2=function(n){if(performance.now()<G(this,Wo)+200)return;const r=n.target,i=fp(r,n);se(this,Xo,zd).call(this,"add",0,i[0]/r.offsetWidth)},cc=new WeakSet,_2=function(n,r){const o=n.target.closest(".histogram-threshold"),a=o.offsetLeft,s=o.offsetParent.offsetWidth;n.preventDefault(),n.stopPropagation(),this.style.cursor="col-resize",y9(n,(c,u)=>{se(this,Xo,zd).call(this,"adjust",r,(a+c)/s)},()=>{et(this,Wo,performance.now()),this.style.cursor=""})},Xo=new WeakSet,zd=function(n,r,i){i=ps(i,0,1),this.dispatchEvent(new g9(n,r,+G(this,An).invert(i*100).toPrecision(3)))},uc=new WeakSet,W2=function(){const n=G(this,Vt),r=G(this,An),i=90/n.map(f=>f.length).reduce((f,l)=>Math.max(f,l),0),o=[],a=this.thresholds.length==1&&this.operators[0]=="eq",s=[-1/0,...this.thresholds,1/0],c=[!1,...this.operators.map(f=>["lte","gt"].includes(f)),!0],u=["gt","gte"].includes(this.operators[0])?f=>s.length-f-2:f=>f;for(let f=0;f<n.length;f++){const l=n[f],d=r(l.x0);let p=0,h=0;if(a)for(let m=0;m<=1;m++)h=b9(l,this.thresholds[0],m>0),h&&o.push({x:d,y:p*i,height:h*i,group:m}),p+=h;else if(this.thresholds.length)for(let m=0;m<s.length-1;m++){const g=u(m);h=v9(l,s[g],s[g+1],!c[g],c[g+1]),h&&o.push({x:d,y:p*i,height:h*i,group:m}),p+=h}else h=l.length,h&&o.push({x:d,y:p,height:h*i,group:null})}return o},dc(Qy,"properties",{values:{attribute:!1},thresholds:{attribute:!1},operators:{attribute:!1},colors:{attribute:!1},showThresholdNumbers:{}}),customElements.define("genome-spy-histogram",Qy);class g9 extends Event{constructor(e,n,r){super(e),this.index=n,this.value=r}}function y9(t,e,n){const r=t.clientX,i=t.clientY,o=function(s){e(s.clientX-r,s.clientY-i)},a=function(s){document.removeEventListener("mousemove",o),document.removeEventListener("mouseup",a),n==null||n(s.clientX-r,s.clientY-i)};document.addEventListener("mousemove",o),document.addEventListener("mouseup",a)}function v9(t,e,n,r=!0,i=!1){const o=r?c=>c>=e:c=>c>e,a=i?c=>c<=n:c=>c<n;let s=0;for(let c=0;c<t.length;c++){const u=t[c];o(u)&&a(u)&&s++}return s}function b9(t,e,n=!1){let r=0;for(let i=0;i<t.length;i++)r+=+(t[i]==e);return n?t.length-r:r}const Yy=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b"];function A9(t,e){var r;const n=(r=t.scale)==null?void 0:r.type;nn(n)?x9(t,e):ze(n)||Hn(n)?w9(t,e):He("Not implemented (yet).")}function x9(t,e){const n=e.provenance.storeHelper.getDispatcher(),r=t.scale,i=new Set(Vy(t,e.leafSamples,e.sampleHierarchy)),o=r.domain().filter(C=>i.has(C)).map((C,w)=>({index:w,value:C,stringValue:`${C}`,lowerCaseValue:`${C}`.toLowerCase()})),a=fr(),s=E`<div class="modal-title">Filter by <em>${t.name}</em></div>`,c=new Set;let u="";const f=C=>{n(e.actions.filterByNominal({values:r.domain().filter(w=>c.has(w)),attribute:t.attribute,remove:C})),a.close()},l=()=>o.filter(C=>u.length==0||C.lowerCaseValue.includes(u)),d=C=>{u=C.target.value.toLowerCase(),x()},p=C=>{const w=C.target,v=o[+w.value].value;w.checked?c.add(v):c.delete(v),x()},h=C=>{var w;if(C.key=="ArrowDown")(w=a.content.querySelector(".gs-checkbox-list li:first-child input[type='checkbox']"))==null||w.focus(),C.preventDefault(),C.stopPropagation();else if(C.key=="Enter"){const v=l();v.length==1&&(c.add(v[0].value),x()),C.stopPropagation()}},m=()=>{a.content.querySelector("input[type='text']").focus()},g=C=>{var v,A,D,k,O;const w=C.target;if(w.type=="checkbox")if(C.key=="ArrowDown")(A=(v=w.closest("li").nextElementSibling)==null?void 0:v.querySelector("input[type='checkbox']"))==null||A.focus(),C.preventDefault();else if(C.key=="ArrowUp"){const T=(D=w.closest("li").previousElementSibling)==null?void 0:D.querySelector("input[type='checkbox']");T?T.focus():m(),C.preventDefault()}else C.key=="Esc"?(m(),C.stopPropagation()):C.key=="Tab"&&!C.shiftKey?(k=w.closest(".gs-checkbox-list").querySelector("li:last-child input"))==null||k.focus():C.key=="Tab"&&C.shiftKey&&((O=w.closest(".gs-checkbox-list").querySelector("li:first-child input"))==null||O.focus())},y=()=>E`<div class="modal-buttons"><button class="btn btn-cancel" @click="${()=>a.close()}">Cancel</button> <button class="btn" ?disabled="${!c.size}" @click="${()=>f(!1)}">${K(ar).node[0]} Retain</button> <button class="btn" ?disabled="${!c.size}" @click="${()=>f(!0)}">${K(Ss).node[0]} Remove</button></div>`,b=r;function x(){const C=l(),w=E`<div class="gs-form-group"><p>Please select one or more categories and choose an action.</p><input type="text" placeholder="Type something to filter the list" @keydown="${h}" @input="${d}"><div class="gs-checkbox-list-wrapper"><ul class="gs-checkbox-list" @input="${p}" @keydown="${g}">${p9(C,A=>A.value,A=>E`<li><label class="checkbox"><span class="color" style="${Bf({backgroundColor:b(A.value).toString()})}"></span> <input type="checkbox" .checked="${c.has(A.value)}" .value="${""+A.index}"> ${A.stringValue}</label></li>`)}</ul>${C.length==0?E`<div class="search-note"><div>Nothing found</div></div>`:C.length==1&&o.length>1?E`<div class="search-note"><div>${K(o6).node[0]} Hit enter to select the exact match</div></div>`:z}</div><small>The number of selected categories: <strong>${c.size}</strong></small></div>`;Le(E`${s}<div class="modal-body">${w}</div>${y()}`,a.content);const v=a.content.querySelector(".gs-checkbox-list");v.style.minHeight=`${v.offsetHeight}px`}x(),m()}function w9(t,e){var g;const n=e.provenance.storeHelper.getDispatcher();let r="lt",i;const o=fr(),a=E`<div class="modal-title">Filter by <em>${t.name}</em></div>`,s=y=>{n(e.actions.filterByQuantitative({attribute:t.attribute,operator:r,operand:i})),o.close()},c=()=>E`<div class="modal-buttons"><button class="btn btn-cancel" @click="${()=>o.close()}">Cancel</button> <button class="btn btn-primary" ?disabled="${typeof i>"u"}" @click="${()=>s()}">${K(ar).node[0]} Retain</button></div>`,u=y=>{r=y.target.value,m()},f=y=>{const x=y.target.value;/^\d+(\.(\d+)?)?$/.test(x)&&(i=+x,m())},l=y=>{typeof i!="number"&&(i=y.value,m())},d=y=>{i=y.value,m()},p=Vy(t,e.leafSamples,e.sampleHierarchy),h=()=>E`<div class="gs-form-group"><label>Retain samples where <em>${t.name}</em> is</label><div class="btn-group" role="group">${Object.entries(C9).map(([y,b])=>E`<button class="${nf({btn:!0,chosen:y==r})}" .value="${y}" @click="${u}" title="${b[1]}">${b[0]}</button>`)}</div><genome-spy-histogram .values="${p}" .thresholds="${[i].filter(y=>y!==void 0)}" .operators="${[r]}" .colors="${["#1f77b4","#ddd"]}" .showThresholdNumbers="${!1}" @add="${l}" @adjust="${d}"></genome-spy-histogram><input type="text" placeholder="... or enter a numeric value here" .value="${typeof i=="number"?""+i:""}" @input="${f}"></div>`;function m(){Le(E`${a}<div class="modal-body">${h()}</div>${c()}`,o.content)}m(),(g=o.content.querySelector("input[type='text']"))==null||g.focus()}const C9={lt:["<","less than"],lte:["≤","less than or equal to"],eq:["=","equal to"],gte:["≥","greater than or equal to"],gt:[">","greater than"]};function Vy(t,e,n){const r=t.accessor;return e.map(i=>r(i,n))}function ut(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 gn(t){return!!t&&!!t[oe]}function Ut(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)===L9}(t)||Array.isArray(t)||!!t[tv]||!!t.constructor[tv]||Ff(t)||Pf(t))}function dr(t,e,n){n===void 0&&(n=!1),ti(t)===0?(n?Object.keys:ri)(t).forEach(function(r){n&&typeof r=="symbol"||e(r,t[r],t)}):t.forEach(function(r,i){return e(i,r,t)})}function ti(t){var e=t[oe];return e?e.i>3?e.i-4:e.i:Array.isArray(t)?1:Ff(t)?2:Pf(t)?3:0}function ni(t,e){return ti(t)===2?t.has(e):Object.prototype.hasOwnProperty.call(t,e)}function S9(t,e){return ti(t)===2?t.get(e):t[e]}function _y(t,e,n){var r=ti(t);r===2?t.set(e,n):r===3?(t.delete(e),t.add(n)):t[e]=n}function Wy(t,e){return t===e?t!==0||1/t==1/e:t!=t&&e!=e}function Ff(t){return k9&&t instanceof Map}function Pf(t){return N9&&t instanceof Set}function hr(t){return t.o||t.t}function zf(t){if(Array.isArray(t))return Array.prototype.slice.call(t);var e=nv(t);delete e[oe];for(var n=ri(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 Rf(t,e){return e===void 0&&(e=!1),jf(t)||gn(t)||!Ut(t)||(ti(t)>1&&(t.set=t.add=t.clear=t.delete=E9),Object.freeze(t),e&&dr(t,function(n,r){return Rf(r,!0)},!0)),t}function E9(){ut(2)}function jf(t){return t==null||typeof t!="object"||Object.isFrozen(t)}function At(t){var e=Xf[t];return e||ut(18,t),e}function D9(t,e){Xf[t]||(Xf[t]=e)}function Uf(){return To}function Hf(t,e){e&&(At("Patches"),t.u=[],t.s=[],t.v=e)}function Rs(t){Gf(t),t.p.forEach(M9),t.p=null}function Gf(t){t===To&&(To=t.l)}function Xy(t){return To={p:[],l:To,h:t,m:!0,_:0}}function M9(t){var e=t[oe];e.i===0||e.i===1?e.j():e.O=!0}function Qf(t,e){e._=e.p.length;var n=e.p[0],r=t!==void 0&&t!==n;return e.h.g||At("ES5").S(e,t,r),r?(n[oe].P&&(Rs(e),ut(4)),Ut(t)&&(t=js(e,t),e.l||Us(e,t)),e.u&&At("Patches").M(n[oe].t,t,e.u,e.s)):t=js(e,n,[]),Rs(e),e.u&&e.v(e.u,e.s),t!==ev?t:void 0}function js(t,e,n){if(jf(e))return e;var r=e[oe];if(!r)return dr(e,function(o,a){return Zy(t,r,e,o,a,n)},!0),e;if(r.A!==t)return e;if(!r.P)return Us(t,r.t,!0),r.t;if(!r.I){r.I=!0,r.A._--;var i=r.i===4||r.i===5?r.o=zf(r.k):r.o;dr(r.i===3?new Set(i):i,function(o,a){return Zy(t,r,i,o,a,n)}),Us(t,i,!1),n&&t.u&&At("Patches").R(r,n,t.u,t.s)}return r.o}function Zy(t,e,n,r,i,o){if(gn(i)){var a=js(t,i,o&&e&&e.i!==3&&!ni(e.D,r)?o.concat(r):void 0);if(_y(n,r,a),!gn(a))return;t.m=!1}if(Ut(i)&&!jf(i)){if(!t.h.F&&t._<1)return;js(t,i),e&&e.A.l||Us(t,i)}}function Us(t,e,n){n===void 0&&(n=!1),t.h.F&&t.m&&Rf(e,n)}function Yf(t,e){var n=t[oe];return(n?hr(n):t)[e]}function qy(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 yn(t){t.P||(t.P=!0,t.l&&yn(t.l))}function Vf(t){t.o||(t.o=zf(t.t))}function _f(t,e,n){var r=Ff(e)?At("MapSet").N(e,n):Pf(e)?At("MapSet").T(e,n):t.g?function(i,o){var a=Array.isArray(i),s={i:a?1:0,A:o?o.A:Uf(),P:!1,I:!1,D:{},l:o,t:i,k:null,o:null,j:null,C:!1},c=s,u=Io;a&&(c=[s],u=ko);var f=Proxy.revocable(c,u),l=f.revoke,d=f.proxy;return s.k=d,s.j=l,d}(e,n):At("ES5").J(e,n);return(n?n.A:Uf()).p.push(r),r}function T9(t){return gn(t)||ut(22,t),function e(n){if(!Ut(n))return n;var r,i=n[oe],o=ti(n);if(i){if(!i.P&&(i.i<4||!At("ES5").K(i)))return i.t;i.I=!0,r=Ky(n,o),i.I=!1}else r=Ky(n,o);return dr(r,function(a,s){i&&S9(i.t,a)===s||_y(r,a,e(s))}),o===3?new Set(r):r}(t)}function Ky(t,e){switch(e){case 2:return new Map(t);case 3:return Array.from(t)}return zf(t)}function I9(){function t(o,a){var s=i[o];return s?s.enumerable=a:i[o]=s={configurable:!0,enumerable:a,get:function(){var c=this[oe];return Io.get(c,o)},set:function(c){var u=this[oe];Io.set(u,o,c)}},s}function e(o){for(var a=o.length-1;a>=0;a--){var s=o[a][oe];if(!s.P)switch(s.i){case 5:r(s)&&yn(s);break;case 4:n(s)&&yn(s)}}}function n(o){for(var a=o.t,s=o.k,c=ri(s),u=c.length-1;u>=0;u--){var f=c[u];if(f!==oe){var l=a[f];if(l===void 0&&!ni(a,f))return!0;var d=s[f],p=d&&d[oe];if(p?p.t!==l:!Wy(d,l))return!0}}var h=!!a[oe];return c.length!==ri(a).length+(h?0:1)}function r(o){var a=o.k;if(a.length!==o.t.length)return!0;var s=Object.getOwnPropertyDescriptor(a,a.length-1);if(s&&!s.get)return!0;for(var c=0;c<a.length;c++)if(!a.hasOwnProperty(c))return!0;return!1}var i={};D9("ES5",{J:function(o,a){var s=Array.isArray(o),c=function(f,l){if(f){for(var d=Array(l.length),p=0;p<l.length;p++)Object.defineProperty(d,""+p,t(p,!0));return d}var h=nv(l);delete h[oe];for(var m=ri(h),g=0;g<m.length;g++){var y=m[g];h[y]=t(y,f||!!h[y].enumerable)}return Object.create(Object.getPrototypeOf(l),h)}(s,o),u={i:s?5:4,A:a?a.A:Uf(),P:!1,I:!1,D:{},l:a,t:o,k:c,o:null,O:!1,C:!1};return Object.defineProperty(c,oe,{value:u,writable:!0}),c},S:function(o,a,s){s?gn(a)&&a[oe].A===o&&e(o.p):(o.u&&function c(u){if(u&&typeof u=="object"){var f=u[oe];if(f){var l=f.t,d=f.k,p=f.D,h=f.i;if(h===4)dr(d,function(x){x!==oe&&(l[x]!==void 0||ni(l,x)?p[x]||c(d[x]):(p[x]=!0,yn(f)))}),dr(l,function(x){d[x]!==void 0||ni(d,x)||(p[x]=!1,yn(f))});else if(h===5){if(r(f)&&(yn(f),p.length=!0),d.length<l.length)for(var m=d.length;m<l.length;m++)p[m]=!1;else for(var g=l.length;g<d.length;g++)p[g]=!0;for(var y=Math.min(d.length,l.length),b=0;b<y;b++)d.hasOwnProperty(b)||(p[b]=!0),p[b]===void 0&&c(d[b])}}}}(o.p[0]),e(o.p))},K:function(o){return o.i===4?n(o):r(o)}})}var Jy,To,Wf=typeof Symbol<"u"&&typeof Symbol("x")=="symbol",k9=typeof Map<"u",N9=typeof Set<"u",$y=typeof Proxy<"u"&&Proxy.revocable!==void 0&&typeof Reflect<"u",ev=Wf?Symbol.for("immer-nothing"):((Jy={})["immer-nothing"]=!0,Jy),tv=Wf?Symbol.for("immer-draftable"):"__$immer_draftable",oe=Wf?Symbol.for("immer-state"):"__$immer_state",L9=""+Object.prototype.constructor,ri=typeof Reflect<"u"&&Reflect.ownKeys?Reflect.ownKeys:Object.getOwnPropertySymbols!==void 0?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:Object.getOwnPropertyNames,nv=Object.getOwnPropertyDescriptors||function(t){var e={};return ri(t).forEach(function(n){e[n]=Object.getOwnPropertyDescriptor(t,n)}),e},Xf={},Io={get:function(t,e){if(e===oe)return t;var n=hr(t);if(!ni(n,e))return function(i,o,a){var s,c=qy(o,a);return c?"value"in c?c.value:(s=c.get)===null||s===void 0?void 0:s.call(i.k):void 0}(t,n,e);var r=n[e];return t.I||!Ut(r)?r:r===Yf(t.t,e)?(Vf(t),t.o[e]=_f(t.A.h,r,t)):r},has:function(t,e){return e in hr(t)},ownKeys:function(t){return Reflect.ownKeys(hr(t))},set:function(t,e,n){var r=qy(hr(t),e);if(r!=null&&r.set)return r.set.call(t.k,n),!0;if(!t.P){var i=Yf(hr(t),e),o=i==null?void 0:i[oe];if(o&&o.t===n)return t.o[e]=n,t.D[e]=!1,!0;if(Wy(n,i)&&(n!==void 0||ni(t.t,e)))return!0;Vf(t),yn(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 Yf(t.t,e)!==void 0||e in t.t?(t.D[e]=!1,Vf(t),yn(t)):delete t.D[e],t.o&&delete t.o[e],!0},getOwnPropertyDescriptor:function(t,e){var n=hr(t),r=Reflect.getOwnPropertyDescriptor(n,e);return r&&{writable:!0,configurable:t.i!==1||e!=="length",enumerable:r.enumerable,value:n[e]}},defineProperty:function(){ut(11)},getPrototypeOf:function(t){return Object.getPrototypeOf(t.t)},setPrototypeOf:function(){ut(12)}},ko={};dr(Io,function(t,e){ko[t]=function(){return arguments[0]=arguments[0][0],e.apply(this,arguments)}}),ko.deleteProperty=function(t,e){return ko.set.call(this,t,e,void 0)},ko.set=function(t,e,n){return Io.set.call(this,t[0],e,n,t[0])};var B9=function(){function t(n){var r=this;this.g=$y,this.F=!0,this.produce=function(i,o,a){if(typeof i=="function"&&typeof o!="function"){var s=o;o=i;var c=r;return function(m){var g=this;m===void 0&&(m=s);for(var y=arguments.length,b=Array(y>1?y-1:0),x=1;x<y;x++)b[x-1]=arguments[x];return c.produce(m,function(C){var w;return(w=o).call.apply(w,[g,C].concat(b))})}}var u;if(typeof o!="function"&&ut(6),a!==void 0&&typeof a!="function"&&ut(7),Ut(i)){var f=Xy(r),l=_f(r,i,void 0),d=!0;try{u=o(l),d=!1}finally{d?Rs(f):Gf(f)}return typeof Promise<"u"&&u instanceof Promise?u.then(function(m){return Hf(f,a),Qf(m,f)},function(m){throw Rs(f),m}):(Hf(f,a),Qf(u,f))}if(!i||typeof i!="object"){if((u=o(i))===void 0&&(u=i),u===ev&&(u=void 0),r.F&&Rf(u,!0),a){var p=[],h=[];At("Patches").M(i,u,p,h),a(p,h)}return u}ut(21,i)},this.produceWithPatches=function(i,o){if(typeof i=="function")return function(u){for(var f=arguments.length,l=Array(f>1?f-1:0),d=1;d<f;d++)l[d-1]=arguments[d];return r.produceWithPatches(u,function(p){return i.apply(void 0,[p].concat(l))})};var a,s,c=r.produce(i,o,function(u,f){a=u,s=f});return typeof Promise<"u"&&c instanceof Promise?c.then(function(u){return[u,a,s]}):[c,a,s]},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){Ut(n)||ut(8),gn(n)&&(n=T9(n));var r=Xy(this),i=_f(this,n,void 0);return i[oe].C=!0,Gf(r),i},e.finishDraft=function(n,r){var i=n&&n[oe],o=i.A;return Hf(o,r),Qf(void 0,o)},e.setAutoFreeze=function(n){this.F=n},e.setUseProxies=function(n){n&&!$y&&ut(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}}i>-1&&(r=r.slice(i+1));var a=At("Patches").$;return gn(n)?a(n,r):this.produce(n,function(s){return a(s,r)})},t}(),Ge=new B9,rv=Ge.produce;Ge.produceWithPatches.bind(Ge),Ge.setAutoFreeze.bind(Ge),Ge.setUseProxies.bind(Ge),Ge.applyPatches.bind(Ge),Ge.createDraft.bind(Ge),Ge.finishDraft.bind(Ge);function O9(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function iv(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 ov(t){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{};e%2?iv(Object(n),!0).forEach(function(r){O9(t,r,n[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):iv(Object(n)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(n,r))})}return t}function Ee(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 av=function(){return typeof Symbol=="function"&&Symbol.observable||"@@observable"}(),Zf=function(){return Math.random().toString(36).substring(7).split("").join(".")},Hs={INIT:"@@redux/INIT"+Zf(),REPLACE:"@@redux/REPLACE"+Zf(),PROBE_UNKNOWN_ACTION:function(){return"@@redux/PROBE_UNKNOWN_ACTION"+Zf()}};function F9(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 sv(t,e,n){var r;if(typeof e=="function"&&typeof n=="function"||typeof n=="function"&&typeof arguments[3]=="function")throw new Error(Ee(0));if(typeof e=="function"&&typeof n>"u"&&(n=e,e=void 0),typeof n<"u"){if(typeof n!="function")throw new Error(Ee(1));return n(sv)(t,e)}if(typeof t!="function")throw new Error(Ee(2));var i=t,o=e,a=[],s=a,c=!1;function u(){s===a&&(s=a.slice())}function f(){if(c)throw new Error(Ee(3));return o}function l(m){if(typeof m!="function")throw new Error(Ee(4));if(c)throw new Error(Ee(5));var g=!0;return u(),s.push(m),function(){if(g){if(c)throw new Error(Ee(6));g=!1,u();var b=s.indexOf(m);s.splice(b,1),a=null}}}function d(m){if(!F9(m))throw new Error(Ee(7));if(typeof m.type>"u")throw new Error(Ee(8));if(c)throw new Error(Ee(9));try{c=!0,o=i(o,m)}finally{c=!1}for(var g=a=s,y=0;y<g.length;y++){var b=g[y];b()}return m}function p(m){if(typeof m!="function")throw new Error(Ee(10));i=m,d({type:Hs.REPLACE})}function h(){var m,g=l;return m={subscribe:function(b){if(typeof b!="object"||b===null)throw new Error(Ee(11));function x(){b.next&&b.next(f())}x();var C=g(x);return{unsubscribe:C}}},m[av]=function(){return this},m}return d({type:Hs.INIT}),r={dispatch:d,subscribe:l,getState:f,replaceReducer:p},r[av]=h,r}function P9(t){Object.keys(t).forEach(function(e){var n=t[e],r=n(void 0,{type:Hs.INIT});if(typeof r>"u")throw new Error(Ee(12));if(typeof n(void 0,{type:Hs.PROBE_UNKNOWN_ACTION()})>"u")throw new Error(Ee(13))})}function qf(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),a;try{P9(n)}catch(s){a=s}return function(c,u){if(c===void 0&&(c={}),a)throw a;for(var f=!1,l={},d=0;d<o.length;d++){var p=o[d],h=n[p],m=c[p],g=h(m,u);if(typeof g>"u")throw u&&u.type,new Error(Ee(14));l[p]=g,f=f||g!==m}return f=f||o.length!==Object.keys(c).length,f?l:c}}function Gs(){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 z9(){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(Ee(15))},a={getState:i.getState,dispatch:function(){return o.apply(void 0,arguments)}},s=e.map(function(c){return c(a)});return o=Gs.apply(void 0,s)(i.dispatch),ov(ov({},i),{},{dispatch:o})}}}var Qs="NOT_FOUND";function R9(t){var e;return{get:function(r){return e&&t(e.key,r)?e.value:Qs},put:function(r,i){e={key:r,value:i}},getEntries:function(){return e?[e]:[]},clear:function(){e=void 0}}}function j9(t,e){var n=[];function r(s){var c=n.findIndex(function(f){return e(s,f.key)});if(c>-1){var u=n[c];return c>0&&(n.splice(c,1),n.unshift(u)),u.value}return Qs}function i(s,c){r(s)===Qs&&(n.unshift({key:s,value:c}),n.length>t&&n.pop())}function o(){return n}function a(){n=[]}return{get:r,put:i,getEntries:o,clear:a}}var U9=function(e,n){return e===n};function H9(t){return function(n,r){if(n===null||r===null||n.length!==r.length)return!1;for(var i=n.length,o=0;o<i;o++)if(!t(n[o],r[o]))return!1;return!0}}function G9(t,e){var n=typeof e=="object"?e:{equalityCheck:e},r=n.equalityCheck,i=r===void 0?U9:r,o=n.maxSize,a=o===void 0?1:o,s=n.resultEqualityCheck,c=H9(i),u=a===1?R9(c):j9(a,c);function f(){var l=u.get(arguments);if(l===Qs){if(l=t.apply(null,arguments),s){var d=u.getEntries(),p=d.find(function(h){return s(h.value,l)});p&&(l=p.value)}u.put(arguments,l)}return l}return f.clearCache=function(){return u.clear()},f}function Q9(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=="function"?"function "+(r.name||"unnamed")+"()":typeof r}).join(", ");throw new Error("createSelector expects all input-selectors to be functions, but received the following types: ["+n+"]")}return e}function Y9(t){for(var e=arguments.length,n=new Array(e>1?e-1:0),r=1;r<e;r++)n[r-1]=arguments[r];var i=function(){for(var a=arguments.length,s=new Array(a),c=0;c<a;c++)s[c]=arguments[c];var u=0,f,l={memoizeOptions:void 0},d=s.pop();if(typeof d=="object"&&(l=d,d=s.pop()),typeof d!="function")throw new Error("createSelector expects an output function after the inputs, but received: ["+typeof d+"]");var p=l,h=p.memoizeOptions,m=h===void 0?n:h,g=Array.isArray(m)?m:[m],y=Q9(s),b=t.apply(void 0,[function(){return u++,d.apply(null,arguments)}].concat(g)),x=t(function(){for(var C=[],w=y.length,v=0;v<w;v++)C.push(y[v].apply(null,arguments));return f=b.apply(null,C),f});return Object.assign(x,{resultFunc:d,memoizedResultFunc:b,dependencies:y,lastResult:function(){return f},recomputations:function(){return u},resetRecomputations:function(){return u=0}}),x};return i}var V9=Y9(G9);function cv(t){var e=function(r){var i=r.dispatch,o=r.getState;return function(a){return function(s){return typeof s=="function"?s(i,o,t):a(s)}}};return e}var uv=cv();uv.withExtraArgument=cv;const lv=uv;var _9=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 Ys=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},W9=Object.defineProperty,fv=Object.getOwnPropertySymbols,X9=Object.prototype.hasOwnProperty,Z9=Object.prototype.propertyIsEnumerable,dv=function(t,e,n){return e in t?W9(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n},No=function(t,e){for(var n in e||(e={}))X9.call(e,n)&&dv(t,n,e[n]);if(fv)for(var r=0,i=fv(e);r<i.length;r++){var n=i[r];Z9.call(e,n)&&dv(t,n,e[n])}return t},q9=typeof window<"u"&&window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__?window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__:function(){if(arguments.length!==0)return typeof arguments[0]=="object"?Gs:Gs.apply(null,arguments)};function K9(t){if(typeof t!="object"||t===null)return!1;var e=Object.getPrototypeOf(t);if(e===null)return!0;for(var n=e;Object.getPrototypeOf(n)!==null;)n=Object.getPrototypeOf(n);return e===n}var J9=function(t){_9(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,Ys([void 0],n[0].concat(this)))):new(e.bind.apply(e,Ys([void 0],n.concat(this))))},e}(Array);function Kf(t){return Ut(t)?rv(t,function(){}):t}function $9(t){return typeof t=="boolean"}function eI(){return function(e){return tI(e)}}function tI(t){t===void 0&&(t={});var e=t.thunk,n=e===void 0?!0:e;t.immutableCheck,t.serializableCheck;var r=new J9;return n&&($9(n)?r.push(lv):r.push(lv.withExtraArgument(n.extraArgument))),r}var nI=!0;function rI(t){var e=eI(),n=t||{},r=n.reducer,i=r===void 0?void 0:r,o=n.middleware,a=o===void 0?e():o,s=n.devTools,c=s===void 0?!0:s,u=n.preloadedState,f=u===void 0?void 0:u,l=n.enhancers,d=l===void 0?void 0:l,p;if(typeof i=="function")p=i;else if(K9(i))p=qf(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 h=a;typeof h=="function"&&(h=h(e));var m=z9.apply(void 0,h),g=Gs;c&&(g=q9(No({trace:!nI},typeof c=="object"&&c)));var y=[m];Array.isArray(d)?y=Ys([m],d):typeof d=="function"&&(y=d(y));var b=g.apply(void 0,y);return sv(p,f,b)}function Lo(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 No(No({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 hv(t){var e={},n=[],r,i={addCase:function(o,a){var s=typeof o=="string"?o:o.type;if(s in e)throw new Error("addCase cannot be called with two reducers for the same action type");return e[s]=a,i},addMatcher:function(o,a){return n.push({matcher:o,reducer:a}),i},addDefaultCase:function(o){return r=o,i}};return t(i),[e,n,r]}function iI(t){return typeof t=="function"}function oI(t,e,n,r){n===void 0&&(n=[]);var i=typeof e=="function"?hv(e):[e,n,r],o=i[0],a=i[1],s=i[2],c;if(iI(t))c=function(){return Kf(t())};else{var u=Kf(t);c=function(){return u}}function f(l,d){l===void 0&&(l=c());var p=Ys([o[d.type]],a.filter(function(h){var m=h.matcher;return m(d)}).map(function(h){var m=h.reducer;return m}));return p.filter(function(h){return!!h}).length===0&&(p=[s]),p.reduce(function(h,m){if(m)if(gn(h)){var g=h,y=m(g,d);return typeof y>"u"?h:y}else{if(Ut(h))return rv(h,function(b){return m(b,d)});var y=m(h,d);if(typeof y>"u"){if(h===null)return h;throw Error("A case reducer on a non-draftable value must not return undefined")}return y}return h},l)}return f.getInitialState=c,f}function aI(t,e){return t+"/"+e}function pv(t){var e=t.name;if(!e)throw new Error("`name` is a required option for createSlice");typeof process<"u";var n=typeof t.initialState=="function"?t.initialState:Kf(t.initialState),r=t.reducers||{},i=Object.keys(r),o={},a={},s={};i.forEach(function(f){var l=r[f],d=aI(e,f),p,h;"reducer"in l?(p=l.reducer,h=l.prepare):p=l,o[f]=p,a[d]=p,s[f]=h?Lo(d,h):Lo(d)});function c(){var f=typeof t.extraReducers=="function"?hv(t.extraReducers):[t.extraReducers],l=f[0],d=l===void 0?{}:l,p=f[1],h=p===void 0?[]:p,m=f[2],g=m===void 0?void 0:m,y=No(No({},d),a);return oI(n,y,h,g)}var u;return{name:e,reducer:function(f,l){return u||(u=c()),u(f,l)},actions:s,caseReducers:o,getInitialState:function(){return u||(u=c()),u.getInitialState()}}}var Jf="listenerMiddleware";Lo(Jf+"/add"),Lo(Jf+"/removeAll"),Lo(Jf+"/remove"),I9();function sI(t,e){var n=t+"",r=e+"";return n<r?-1:n==r?0:1}var cI=[].forEach;function uI(t,e,n){if(typeof e!="function")throw new TypeError(e+" is not a function");var r,i=[],o=[],a=[];cI.call(t,function(c,u,f){if(r=e(c,u,f),r===void 0)return void a.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=sI),i.sort(function(c,u){return n(o[c],o[u])});var s=i.map(function(c){return t[c]}).concat(a);return s.length!=t.length&&(s.length=t.length),s}function lI(t,e){const n=i=>i.copy().range(_t(0,i.domain().length)).unknown(-1);let r;switch(e.type){case"quantitative":r=i=>le(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 fI(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 dI(t,e,n){const r=new Set,i=o=>(r.size<n&&r.add(o),r.has(o));return t.filter(o=>i(e(o)))}function hI(t,e,n=!1){return uI(t,e,(r,i)=>(n&&([r,i]=[i,r]),r<i?-1:r>i?1:0))}const pI={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 mI(t,e,n,r){const i=pI[n];return t.filter(o=>i(e(o),r))}function mv(t,e,n,r){const i=new Set(r),o=s=>i.has(s),a=n=="remove"?s=>!o(s):o;return t.filter(s=>a(e(s)))}function gI(t,e){const n=r=>r!=null;return t.filter(r=>n(e(r)))}/**
|
2150
2150
|
* @license
|
2151
2151
|
* Copyright 2021 Google LLC
|
2152
2152
|
* SPDX-License-Identifier: BSD-3-Clause
|
2153
|
-
*/function*y9(t,e){const n=typeof e=="function";if(t!==void 0){let r=-1;for(const i of t)r>-1&&(yield n?e(r):e),r++,yield i}}const gv="setSamples",yv="sortBy",vv="retainFirstOfEach",bv="retainFirstNCategories",Av="filterByNominal",xv="filterByQuantitative",wv="removeUndefined",Cv="groupByNominal",Sv="groupToQuartiles",Ev="groupByThresholds",Dv="removeGroup",Mv="retainMatched",ii="sampleView";function v9(){return{sampleData:void 0,groupMetadata:[],rootGroup:{name:"ROOT",title:"Root",samples:[]}}}function b9(t){const e=(n,r)=>{const i=t(n.attribute).accessor;return o=>i(o,r)};return pv({name:ii,initialState:v9(),reducers:{[gv]:(n,r)=>{const i=r.payload.samples;if(n.sampleData)throw new Error("Samples have already been set!");if(i.some(a=>a.id===void 0||a.id===null))throw new Error('The sample metadata contains missing sample ids or the "sample" column is missing!');if(new Set(i.map(a=>a.id)).size!=i.length)throw new Error("The sample metadata contains duplicate sample ids!");const o=i.map((a,s)=>({...a,indexNumber:s}));n.sampleData={ids:o.map(a=>a.id),entities:Object.fromEntries(o.map(a=>[a.id,a]))},n.rootGroup={name:"ROOT",title:"Root",samples:n.sampleData.ids}},[yv]:(n,r)=>{pr(n,i=>h9(i,l9(e(r.payload,n),t(r.payload.attribute)),!1))},[vv]:(n,r)=>{pr(n,i=>f9(i,e(r.payload,n)))},[bv]:(n,r)=>{pr(n,i=>d9(i,e(r.payload,n),r.payload.n))},[xv]:(n,r)=>{pr(n,i=>m9(i,e(r.payload,n),r.payload.operator,r.payload.operand))},[Av]:(n,r)=>{pr(n,i=>mv(i,e(r.payload,n),r.payload.remove?"remove":"retain",r.payload.values))},[wv]:(n,r)=>{pr(n,i=>g9(i,e(r.payload,n)))},[Cv]:(n,r)=>{var o;const i=(o=t(r.payload.attribute).scale)==null?void 0:o.domain();$f(n,a=>Nv(a,e(r.payload,n),i)),n.groupMetadata.push({attribute:r.payload.attribute})},[Sv]:(n,r)=>{$f(n,i=>C9(i,e(r.payload,n))),n.groupMetadata.push({attribute:r.payload.attribute})},[Ev]:(n,r)=>{$f(n,i=>w9(i,e(r.payload,n),r.payload.thresholds)),n.groupMetadata.push({attribute:r.payload.attribute})},[Dv]:(n,r)=>{const i=n.rootGroup;Vs(i)&&Bv(i,r.payload.path)},[Mv]:(n,r)=>{const i=e(r.payload,n),o=[];for(const s of ed(n))if(s.samples.length>0){const c=new Set;for(const u of s.samples)c.add(i(u));o.push(c)}const a=[];for(const s of o[0]){let c=!0;for(let u=1;u<o.length&&c;u++)c=o[u].has(s);c&&a.push(s)}pr(n,s=>mv(s,i,"retain",a))}}})}function pr(t,e){for(const n of ed(t))n.samples=e(n.samples)}function $f(t,e){for(const n of ed(t))e(n)}function ed(t){return nd(t).map(e=>Re(e))}function td(t){return t.provenance.present[ii]}function nd(t){const e=[],n=[],r=i=>{if(e.push(i),Vs(i))for(const o of i.groups)r(o);else n.push([...e]);e.pop()};return r(t.rootGroup),n}function Tv(t){return"samples"in t}function Vs(t){return"groups"in t}function*rd(t){if(yield[t],Vs(t))for(const e of t.groups)for(const n of rd(e))yield[t,...n]}const A9=de(".4"),Iv={lt:"<",lte:"≤",eq:"=",gte:"≥",gt:">"};function kv(t){return E`{${t.map((e,n)=>E`${n>0?", ":""}<strong>${e}</strong>`)}}`}function x9(t,e){if(!t.type.startsWith(ii))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)||E`<em>${i}</em>`,a={attributeName:i};switch(t.type.substring(ii.length+1)){case gv:return{...a,title:"The initial state",icon:c6};case yv:return{...a,title:"Sort by",provenanceTitle:E`Sort by ${o}`,icon:e6};case vv:return{...a,title:E`Retain the first sample of each <em>${i}</em>`,provenanceTitle:E`Retain the first sample of each ${o}`,icon:R1};case bv:return{...a,title:E`Retain first <strong>n</strong> categories of <em>${i}</em>...`,provenanceTitle:E`Retain first <strong>${n.n}</strong> categories of ${o}`,icon:R1};case Av:{const c=n.values,u=f=>E`${n.remove?"Remove":"Retain"} samples having ${c[0]===void 0||c[0]===null?E`undefined ${f}`:E`${f} ${c.length>1?E`in ${kv(c)}`:E`<span class="operator">=</span> <strong>${c[0]}</strong>`}`}`;return{...a,title:u(E`<em>${i}</em>`),provenanceTitle:u(o),icon:n.remove?Ss:ar}}case xv:{const c=u=>E`Retain samples having ${u} <span class="operator">${Iv[n.operator]}</span> <strong>${A9(n.operand)}</strong>`;return{...a,title:c(E`<em>${i}</em>`),provenanceTitle:c(o),icon:ar}}case wv:return{...a,title:"Remove samples having missing attribute",provenanceTitle:E`Remove samples having missing ${o}`,icon:Ss};case Cv:return{...a,title:"Group by",provenanceTitle:E`Group by ${o}`,icon:xo};case Sv:return{...a,title:"Group by quartiles",provenanceTitle:E`Group by quartiles on ${o}`,icon:xo};case Ev:return{...a,title:"Group by thresholds",provenanceTitle:E`Group by thresholds ${kv(n.thresholds.map(c=>`${Iv[c.operator]} ${c.operand}`))} on ${o}`,icon:xo};case Dv:return{title:"Remove group",provenanceTitle:E`Remove group ${y9(n.path.map(c=>E`<strong>${c}</strong>`)," / ")}`,icon:Ss};case Mv:return{...a,title:E`Retain group-wise matched samples using <em>${i}</em>`,provenanceTitle:E`Retain group-wise matched samples using ${o}`,icon:ar};default:return{...a,title:JSON.stringify(t),icon:P1}}}function Nv(t,e,n,r){if(r&&!n)throw new Error("Custom labels need explicit group order!");const i=mi(t.samples,e),o=n?n.map(c=>[c,i.get(c)]).filter(c=>c[1]):[...i],s=t;s.groups=o.map(([c,u],f)=>({name:""+c,title:r?r[f]:c,samples:u})),delete t.samples}function Lv(t,e,n){const r=a=>`Group ${a+1}`,i=_t(n.length-1).reverse(),o=Ov(e,n.slice(1,n.length-1));Nv(t,a=>r(o(a)),i.map(r),i.map(a=>Pv(n[a],n[a+1])))}function w9(t,e,n){Lv(t,e,[{operator:"lt",operand:-1/0},...n,{operator:"lte",operand:1/0}])}function C9(t,e){const n=E9(S9(t.samples,e,[0,.25,.5,.75,1]));n.length==1&&n.push(n[0]),Lv(t,e,n.map((r,i,o)=>({operator:i==o.length-1?"lte":"lt",operand:r})))}function Bv(t,e){if(e.length==0)return;const n=t.groups.findIndex(r=>r.name==e[0]);if(!(n<0)){if(e.length==1)t.groups.splice(n,1);else if(e.length>1){const r=t.groups[n];Vs(r)&&Bv(r,[...e].splice(1))}}}function Ov(t,e){return r=>{const i=t(r);if(!(!le(i)||isNaN(i))){for(let o=0;o<e.length;o++)if(e[o].operator=="lt"){if(i<e[o].operand)return o}else if(i<=e[o].operand)return o;return e.length}}}function S9(t,e,n){const r=Ub(t.map(e).filter(i=>le(i)&&!isNaN(i)));return n.map(i=>Tc(r,i))}function E9(t){const e=[t[0]];for(let n=1;n<t.length;n++)t[n]!=t[n-1]&&e.push(t[n]);return e}const Fv=de(".3~r"),Pv=(t,e)=>`${t.operator=="lt"?"[":"("}${Fv(t.operand)}, ${Fv(e.operand)}${e.operator=="lte"?"]":")"}`;function D9(t,e){const n=e.provenance.storeHelper.getDispatcher(),r=[],i=fr(),o=E`<div class="modal-title">Group by threshold on <em>${t.name}</em></div>`,a=g=>{n(e.actions.groupByThresholds({attribute:t.attribute,thresholds:r})),i.close()},s=()=>E`<div class="modal-buttons"><button class="btn btn-cancel" @click="${()=>i.close()}">Cancel</button> <button class="btn btn-primary" ?disabled="${!M9(r)}" @click="${()=>a()}">${K(xo).node[0]} Group</button></div>`,c=(g,y)=>(y>0&&(g=Math.max(g,r[y-1].operand)),y<r.length-1&&(g=Math.min(g,r[y+1].operand)),g),u=(g,y)=>{const b=g.target.value;r[y].operator=b,m()},f=(g,y)=>{const b=g.target.value;/^\d+(\.\d+)?$/.test(b)&&(r[y].operand=c(+b,y),m())},l=g=>{const y=r.findIndex(b=>b.operand>g.value);r.splice(y<0?r.length:y,0,{operand:g.value,operator:"lt"}),m()},d=g=>{r[g.index].operand=c(g.value,g.index),m()},p=g=>{r.splice(g,1),m()},h=T9(t,e.leafSamples,e.sampleHierarchy);function m(){const g=()=>{const b=[{operand:-1/0,operator:"lt"},...r,{operand:1/0,operator:"lte"}],x=Ov(v=>v,b),C=[];for(let v=1;v<b.length;v++)C.push(0);for(const v of h)C[x(v)-1]++;const w=[];for(let v=1;v<b.length;v++)w.push({index:v-1,name:v,interval:Pv(b[v-1],b[v]),n:C[v-1]});return E`<table class="threshold-groups"><thead><tr><th>Group</th><th>Interval</th><th>n</th></tr></thead><tbody>${w.map(v=>E`<tr><td><span class="group-color" style="background-color:${Yy[v.index]}"></span> ${v.name}</td><td>${v.interval}</td><td>${v.n}</td></tr>`)}</tbody></table>`},y=E`<div class="gs-form-group group-by-thresholds-form"><label>Split into groups using the thresholds:</label><genome-spy-histogram .values="${h}" .thresholds="${r.map(b=>b.operand)}" .operators="${r.map(b=>b.operator)}" .showThresholdNumbers="${!0}" @add="${l}" @adjust="${d}"></genome-spy-histogram>${r.map((b,x)=>E`<div class="threshold-flex"><select .value="${b.operator}" @change="${C=>u(C,x)}"><option value="lt">${"<"}</option><option value="lte">${"≤"}</option></select> <input .value="${""+b.operand}" type="text" placeholder="Numeric value" @input="${C=>f(C,x)}" @blur="${C=>{C.target.value=""+r[x].operand}}"> <button @click="${()=>p(x)}" class="btn" title="Remove">${K(j1).node[0]}</button></div>`)} ${r.length?E`<small>The operator specifies whether the upper endpoint of the interval (<em>i.e.</em>, the group) is exclusive (<) or inclusive(≤). </small>${g()}`:z}</div>`;Le(E`${o}<div class="modal-body">${y}</div>${s()}`,i.content)}m()}function M9(t){return t.length}function T9(t,e,n){const r=t.accessor;return e.map(i=>r(i,n))}function I9(t,e){const n=e.provenance.storeHelper.getDispatcher();let r=5;const i=fr(),o=E`<div class="modal-title">Retain first n categories of <em>${t.title}</em></div>`,a=f=>{n(e.actions.retainFirstNCategories({attribute:t.attribute,n:r})),i.close()},s=()=>E`<div class="modal-buttons"><button class="btn btn-cancel" @click="${()=>i.close()}">Cancel</button> <button class="btn btn-primary" @click="${()=>a()}">${K(ar).node[0]} Retain</button></div>`,c=E`<div class="gs-form-group"><label>Number of categories to retain:</label> <input type="number" min="1" .valueAsNumber="${r}" @change="${f=>{r=f.target.valueAsNumber}}"></div>`;function u(){Le(E`${o}<div class="modal-body">${c}</div>${s()}`,i.content)}u(),i.content.querySelector("input").focus()}function id(t,e,n,r){const i=r.actions,o=e.attribute,a=r.sampleHierarchy,s=r.provenance.storeHelper.getDispatcher(),c=[];t&&c.push({label:t,type:"header"});const u=(d,p,h)=>{const m=r.provenance.getActionInfo(d);return{label:m.title,icon:m.icon,callback:p?void 0:h??(()=>s(d))}},f=(...d)=>c.push(...d.map(p=>u(p)));f(i.sortBy({attribute:o}));const l=(e==null?void 0:e.type)??"identifier";return l!="quantitative"?(l!="identifier"&&(f(i.groupByNominal({attribute:o}),i.retainFirstOfEach({attribute:o})),c.push(u(i.retainFirstNCategories({attribute:o,n:void 0}),!1,()=>I9(e,r)))),f(i.filterByNominal({attribute:o,values:[n]}),i.filterByNominal({attribute:o,remove:!0,values:[n]})),c.push(u(i.retainMatched({attribute:o}),!a.groupMetadata.length))):(f(i.groupToQuartiles({attribute:o})),c.push({icon:xo,label:"Group by thresholds...",callback:()=>D9(e,r)}),k9(n)?f(i.filterByQuantitative({attribute:o,operator:"gte",operand:+n}),i.filterByQuantitative({attribute:o,operator:"lte",operand:+n})):f(i.removeUndefined({attribute:o}))),l!=="identifier"&&c.push({icon:ar,label:"Advanced filter...",callback:()=>AI(e,r)}),c}function k9(t){return t!=null&&t!==""&&!(typeof t=="number"&&isNaN(t))}function N9(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var Ht={},mr={};Object.defineProperty(mr,"__esModule",{value:!0}),mr.ActionCreators=mr.ActionTypes=void 0;var gr={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"};mr.ActionTypes=gr;var L9={undo:function(){return{type:gr.UNDO}},redo:function(){return{type:gr.REDO}},jumpToFuture:function(e){return{type:gr.JUMP_TO_FUTURE,index:e}},jumpToPast:function(e){return{type:gr.JUMP_TO_PAST,index:e}},jump:function(e){return{type:gr.JUMP,index:e}},clearHistory:function(){return{type:gr.CLEAR_HISTORY}}};mr.ActionCreators=L9;var xt={};Object.defineProperty(xt,"__esModule",{value:!0}),xt.parseActions=_s,xt.isHistory=B9,xt.includeAction=O9,xt.excludeAction=F9,xt.combineFilters=P9,xt.groupByActionTypes=z9,xt.newHistory=R9;function _s(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];return Array.isArray(t)?t:typeof t=="string"?[t]:e}function B9(t){return typeof t.present<"u"&&typeof t.future<"u"&&typeof t.past<"u"&&Array.isArray(t.future)&&Array.isArray(t.past)}function O9(t){var e=_s(t);return function(n){return e.indexOf(n.type)>=0}}function F9(t){var e=_s(t);return function(n){return e.indexOf(n.type)<0}}function P9(){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,a,s){return r(o,a,s)&&i(o,a,s)}},function(){return!0})}function z9(t){var e=_s(t);return function(n){return e.indexOf(n.type)>=0?n.type:null}}function R9(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 zv={},oi={};Object.defineProperty(oi,"__esModule",{value:!0}),oi.set=W9,oi.start=Y9,oi.end=V9,oi.log=_9;function wt(t){return H9(t)||U9(t)||j9()}function j9(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function U9(t){if(Symbol.iterator in Object(t)||Object.prototype.toString.call(t)==="[object Arguments]")return Array.from(t)}function H9(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,Je,od={prevState:"#9E9E9E",action:"#03A9F4",nextState:"#4CAF50"};function G9(){Je={header:[],prev:[],action:[],next:[],msgs:[]}}function Q9(){var t=Je,e=t.header,n=t.prev,r=t.next,i=t.action,o=t.msgs;if(console.group){var a,s,c,u,f;(a=console).groupCollapsed.apply(a,wt(e)),(s=console).log.apply(s,wt(n)),(c=console).log.apply(c,wt(i)),(u=console).log.apply(u,wt(r)),(f=console).log.apply(f,wt(o)),console.groupEnd()}else{var l,d,p,h,m;(l=console).log.apply(l,wt(e)),(d=console).log.apply(d,wt(n)),(p=console).log.apply(p,wt(i)),(h=console).log.apply(h,wt(r)),(m=console).log.apply(m,wt(o))}}function ad(t,e,n){return["%c".concat(t),"color: ".concat(e,"; font-weight: bold"),n]}function Y9(t,e){G9(),Ws&&(console.group?(Je.header=["%credux-undo","font-style: italic","action",t.type],Je.action=ad("action",od.action,t),Je.prev=ad("prev history",od.prevState,e)):(Je.header=["redux-undo action",t.type],Je.action=["action",t],Je.prev=["prev history",e]))}function V9(t){Ws&&(console.group?Je.next=ad("next history",od.nextState,t):Je.next=["next history",t],Q9())}function _9(){if(Ws){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];Je.msgs=Je.msgs.concat([].concat(e,[`
|
2154
|
-
`]))}}function W9(t){Ws=t}(function(t){function e(w){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?e=function(A){return typeof A}:e=function(A){return A&&typeof Symbol=="function"&&A.constructor===Symbol&&A!==Symbol.prototype?"symbol":typeof A},e(w)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=C;var n=a(oi),r=mr,i=xt;function o(){if(typeof WeakMap!="function")return null;var w=new WeakMap;return o=function(){return w},w}function a(w){if(w&&w.__esModule)return w;if(w===null||e(w)!=="object"&&typeof w!="function")return{default:w};var v=o();if(v&&v.has(w))return v.get(w);var A={},D=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var k in w)if(Object.prototype.hasOwnProperty.call(w,k)){var O=D?Object.getOwnPropertyDescriptor(w,k):null;O&&(O.get||O.set)?Object.defineProperty(A,k,O):A[k]=w[k]}return A.default=w,v&&v.set(w,A),A}function s(w,v){var A=Object.keys(w);if(Object.getOwnPropertySymbols){var D=Object.getOwnPropertySymbols(w);v&&(D=D.filter(function(k){return Object.getOwnPropertyDescriptor(w,k).enumerable})),A.push.apply(A,D)}return A}function c(w){for(var v=1;v<arguments.length;v++){var A=arguments[v]!=null?arguments[v]:{};v%2?s(Object(A),!0).forEach(function(D){u(w,D,A[D])}):Object.getOwnPropertyDescriptors?Object.defineProperties(w,Object.getOwnPropertyDescriptors(A)):s(Object(A)).forEach(function(D){Object.defineProperty(w,D,Object.getOwnPropertyDescriptor(A,D))})}return w}function u(w,v,A){return v in w?Object.defineProperty(w,v,{value:A,enumerable:!0,configurable:!0,writable:!0}):w[v]=A,w}function f(w){return p(w)||d(w)||l()}function l(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function d(w){if(Symbol.iterator in Object(w)||Object.prototype.toString.call(w)==="[object Arguments]")return Array.from(w)}function p(w){if(Array.isArray(w)){for(var v=0,A=new Array(w.length);v<w.length;v++)A[v]=w[v];return A}}function h(w,v){var A=(0,i.newHistory)([],w,[]);return v&&(A._latestUnfiltered=null),A}function m(w,v,A,D){var k=w.past.length+1;n.log("inserting",v),n.log("new free: ",A-k);var O=w.past,T=w._latestUnfiltered,B=A&&A<=k,H=O.slice(B?1:0),Q=T!=null?[].concat(f(H),[T]):H;return(0,i.newHistory)(Q,v,[],D)}function g(w,v){if(v<0||v>=w.future.length)return w;var A=w.past,D=w.future,k=w._latestUnfiltered,O=[].concat(f(A),[k],f(D.slice(0,v))),T=D[v],B=D.slice(v+1);return(0,i.newHistory)(O,T,B)}function y(w,v){if(v<0||v>=w.past.length)return w;var A=w.past,D=w.future,k=w._latestUnfiltered,O=A.slice(0,v),T=[].concat(f(A.slice(v+1)),[k],f(D)),B=A[v];return(0,i.newHistory)(O,B,T)}function b(w,v){return v>0?g(w,v-1):v<0?y(w,w.past.length+v):w}function x(w,v){return v.indexOf(w)>-1?w:!w}function C(w){var v=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};n.set(v.debug);var A=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},v,{initTypes:(0,i.parseActions)(v.initTypes,["@@redux-undo/INIT"]),clearHistoryType:(0,i.parseActions)(v.clearHistoryType,[r.ActionTypes.CLEAR_HISTORY])}),D=A.neverSkipReducer?function(O,T){for(var B=arguments.length,H=new Array(B>2?B-2:0),Q=2;Q<B;Q++)H[Q-2]=arguments[Q];return c({},O,{present:w.apply(void 0,[O.present,T].concat(H))})}:function(O){return O},k;return function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:k,T=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};n.start(T,O);for(var B=O,H=arguments.length,Q=new Array(H>2?H-2:0),De=2;De<H;De++)Q[De-2]=arguments[De];if(!k)if(n.log("history is uninitialized"),O===void 0){var xn={type:"@@redux-undo/CREATE_HISTORY"},wn=w.apply(void 0,[O,xn].concat(Q));return B=h(wn,A.ignoreInitialState),n.log("do not set initialState on probe actions"),n.end(B),B}else(0,i.isHistory)(O)?(B=k=A.ignoreInitialState?O:(0,i.newHistory)(O.past,O.present,O.future),n.log("initialHistory initialized: initialState is a history",k)):(B=k=h(O,A.ignoreInitialState),n.log("initialHistory initialized: initialState is not a history",k));var _;switch(T.type){case void 0:return B;case A.undoType:return _=b(B,-1),n.log("perform undo"),n.end(_),D.apply(void 0,[_,T].concat(Q));case A.redoType:return _=b(B,1),n.log("perform redo"),n.end(_),D.apply(void 0,[_,T].concat(Q));case A.jumpToPastType:return _=y(B,T.index),n.log("perform jumpToPast to ".concat(T.index)),n.end(_),D.apply(void 0,[_,T].concat(Q));case A.jumpToFutureType:return _=g(B,T.index),n.log("perform jumpToFuture to ".concat(T.index)),n.end(_),D.apply(void 0,[_,T].concat(Q));case A.jumpType:return _=b(B,T.index),n.log("perform jump to ".concat(T.index)),n.end(_),D.apply(void 0,[_,T].concat(Q));case x(T.type,A.clearHistoryType):return _=h(B.present,A.ignoreInitialState),n.log("perform clearHistory"),n.end(_),D.apply(void 0,[_,T].concat(Q));default:if(_=w.apply(void 0,[B.present,T].concat(Q)),A.initTypes.some(function(kd){return kd===T.type}))return n.log("reset history due to init action"),n.end(k),k;if(B._latestUnfiltered===_)return B;var Qe=typeof A.filter=="function"&&!A.filter(T,_,B);if(Qe){var Zo=(0,i.newHistory)(B.past,_,B.future,B.group);return A.syncFilter||(Zo._latestUnfiltered=B._latestUnfiltered),n.log("filter ignored action, not storing it in past"),n.end(Zo),Zo}var qo=A.groupBy(T,_,B);if(qo!=null&&qo===B.group){var fc=(0,i.newHistory)(B.past,_,B.future,B.group);return n.log("groupBy grouped the action with the previous action"),n.end(fc),fc}return B=m(B,_,A.limit,qo),n.log("inserted new state into history"),n.end(B),B}}}})(zv),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=mr,n=xt,r=i(zv);function i(o){return o&&o.__esModule?o:{default:o}}}(Ht);const X9=N9(Ht);function Xs(t){return t.split("-")[0]}function sd(t){return t.split("-")[1]}function cd(t){return["top","bottom"].includes(Xs(t))?"x":"y"}function Rv(t){return t==="y"?"height":"width"}function jv(t,e,n){let{reference:r,floating:i}=t;const o=r.x+r.width/2-i.width/2,a=r.y+r.height/2-i.height/2,s=cd(e),c=Rv(s),u=r[c]/2-i[c]/2,f=s==="x";let l;switch(Xs(e)){case"top":l={x:o,y:r.y-i.height};break;case"bottom":l={x:o,y:r.y+r.height};break;case"right":l={x:r.x+r.width,y:a};break;case"left":l={x:r.x-i.width,y:a};break;default:l={x:r.x,y:r.y}}switch(sd(e)){case"start":l[s]-=u*(n&&f?-1:1);break;case"end":l[s]+=u*(n&&f?-1:1)}return l}const Z9=async(t,e,n)=>{const{placement:r="bottom",strategy:i="absolute",middleware:o=[],platform:a}=n,s=await(a.isRTL==null?void 0:a.isRTL(e));let c=await a.getElementRects({reference:t,floating:e,strategy:i}),{x:u,y:f}=jv(c,r,s),l=r,d={};for(let p=0;p<o.length;p++){const{name:h,fn:m}=o[p],{x:g,y,data:b,reset:x}=await m({x:u,y:f,initialPlacement:r,placement:l,strategy:i,middlewareData:d,rects:c,platform:a,elements:{reference:t,floating:e}});u=g??u,f=y??f,d={...d,[h]:{...d[h],...b}},x&&(typeof x=="object"&&(x.placement&&(l=x.placement),x.rects&&(c=x.rects===!0?await a.getElementRects({reference:t,floating:e,strategy:i}):x.rects),{x:u,y:f}=jv(c,l,s)),p=-1)}return{x:u,y:f,placement:l,strategy:i,middlewareData:d}};function q9(t){return typeof t!="number"?function(e){return{top:0,right:0,bottom:0,left:0,...e}}(t):{top:t,right:t,bottom:t,left:t}}function Zs(t){return{...t,top:t.y,left:t.x,right:t.x+t.width,bottom:t.y+t.height}}async function K9(t,e){var n;e===void 0&&(e={});const{x:r,y:i,platform:o,rects:a,elements:s,strategy:c}=t,{boundary:u="clippingAncestors",rootBoundary:f="viewport",elementContext:l="floating",altBoundary:d=!1,padding:p=0}=e,h=q9(p),m=s[d?l==="floating"?"reference":"floating":l],g=Zs(await o.getClippingRect({element:(n=await(o.isElement==null?void 0:o.isElement(m)))==null||n?m:m.contextElement||await(o.getDocumentElement==null?void 0:o.getDocumentElement(s.floating)),boundary:u,rootBoundary:f,strategy:c})),y=Zs(o.convertOffsetParentRelativeRectToViewportRelativeRect?await o.convertOffsetParentRelativeRectToViewportRelativeRect({rect:l==="floating"?{...a.floating,x:r,y:i}:a.reference,offsetParent:await(o.getOffsetParent==null?void 0:o.getOffsetParent(s.floating)),strategy:c}):a[l]);return{top:g.top-y.top+h.top,bottom:y.bottom-g.bottom+h.bottom,left:g.left-y.left+h.left,right:y.right-g.right+h.right}}const J9={left:"right",right:"left",bottom:"top",top:"bottom"};function qs(t){return t.replace(/left|right|bottom|top/g,e=>J9[e])}function $9(t,e,n){n===void 0&&(n=!1);const r=sd(t),i=cd(t),o=Rv(i);let a=i==="x"?r===(n?"end":"start")?"right":"left":r==="start"?"bottom":"top";return e.reference[o]>e.floating[o]&&(a=qs(a)),{main:a,cross:qs(a)}}const ek={start:"end",end:"start"};function Uv(t){return t.replace(/start|end/g,e=>ek[e])}["top","right","bottom","left"].reduce((t,e)=>t.concat(e,e+"-start",e+"-end"),[]);const Hv=function(t){return t===void 0&&(t={}),{name:"flip",options:t,async fn(e){var n;const{placement:r,middlewareData:i,rects:o,initialPlacement:a,platform:s,elements:c}=e,{mainAxis:u=!0,crossAxis:f=!0,fallbackPlacements:l,fallbackStrategy:d="bestFit",flipAlignment:p=!0,...h}=t,m=Xs(r),g=l||(m===a||!p?[qs(a)]:function(D){const k=qs(D);return[Uv(D),k,Uv(k)]}(a)),y=[a,...g],b=await K9(e,h),x=[];let C=((n=i.flip)==null?void 0:n.overflows)||[];if(u&&x.push(b[m]),f){const{main:D,cross:k}=$9(r,o,await(s.isRTL==null?void 0:s.isRTL(c.floating)));x.push(b[D],b[k])}if(C=[...C,{placement:r,overflows:x}],!x.every(D=>D<=0)){var w,v;const D=((w=(v=i.flip)==null?void 0:v.index)!=null?w:0)+1,k=y[D];if(k)return{data:{index:D,overflows:C},reset:{placement:k}};let O="bottom";switch(d){case"bestFit":{var A;const T=(A=C.map(B=>[B,B.overflows.filter(H=>H>0).reduce((H,Q)=>H+Q,0)]).sort((B,H)=>B[1]-H[1])[0])==null?void 0:A[0].placement;T&&(O=T);break}case"initialPlacement":O=a}if(r!==O)return{reset:{placement:O}}}return{}}}},tk=function(t){return t===void 0&&(t=0),{name:"offset",options:t,async fn(e){const{x:n,y:r}=e,i=await async function(o,a){const{placement:s,platform:c,elements:u}=o,f=await(c.isRTL==null?void 0:c.isRTL(u.floating)),l=Xs(s),d=sd(s),p=cd(s)==="x",h=["left","top"].includes(l)?-1:1,m=f&&p?-1:1,g=typeof a=="function"?a(o):a;let{mainAxis:y,crossAxis:b,alignmentAxis:x}=typeof g=="number"?{mainAxis:g,crossAxis:0,alignmentAxis:null}:{mainAxis:0,crossAxis:0,alignmentAxis:null,...g};return d&&typeof x=="number"&&(b=d==="end"?-1*x:x),p?{x:b*m,y:y*h}:{x:y*h,y:b*m}}(e,t);return{x:n+i.x,y:r+i.y,data:i}}}};function Gv(t){return t&&t.document&&t.location&&t.alert&&t.setInterval}function Gt(t){if(t==null)return window;if(!Gv(t)){const e=t.ownerDocument;return e&&e.defaultView||window}return t}function Bo(t){return Gt(t).getComputedStyle(t)}function Qt(t){return Gv(t)?"":t?(t.nodeName||"").toLowerCase():""}function Qv(){const t=navigator.userAgentData;return t!=null&&t.brands?t.brands.map(e=>e.brand+"/"+e.version).join(" "):navigator.userAgent}function Ct(t){return t instanceof Gt(t).HTMLElement}function ai(t){return t instanceof Gt(t).Element}function ud(t){return typeof ShadowRoot>"u"?!1:t instanceof Gt(t).ShadowRoot||t instanceof ShadowRoot}function Ks(t){const{overflow:e,overflowX:n,overflowY:r}=Bo(t);return/auto|scroll|overlay|hidden/.test(e+r+n)}function nk(t){return["table","td","th"].includes(Qt(t))}function Yv(t){const e=/firefox/i.test(Qv()),n=Bo(t);return n.transform!=="none"||n.perspective!=="none"||n.contain==="paint"||["transform","perspective"].includes(n.willChange)||e&&n.willChange==="filter"||e&&!!n.filter&&n.filter!=="none"}function Vv(){return!/^((?!chrome|android).)*safari/i.test(Qv())}const _v=Math.min,Oo=Math.max,Js=Math.round;function yr(t,e,n){var r,i,o,a;e===void 0&&(e=!1),n===void 0&&(n=!1);const s=t.getBoundingClientRect();let c=1,u=1;e&&Ct(t)&&(c=t.offsetWidth>0&&Js(s.width)/t.offsetWidth||1,u=t.offsetHeight>0&&Js(s.height)/t.offsetHeight||1);const f=ai(t)?Gt(t):window,l=!Vv()&&n,d=(s.left+(l&&(r=(i=f.visualViewport)==null?void 0:i.offsetLeft)!=null?r:0))/c,p=(s.top+(l&&(o=(a=f.visualViewport)==null?void 0:a.offsetTop)!=null?o:0))/u,h=s.width/c,m=s.height/u;return{width:h,height:m,top:p,right:d+h,bottom:p+m,left:d,x:d,y:p}}function vn(t){return(e=t,(e instanceof Gt(e).Node?t.ownerDocument:t.document)||window.document).documentElement;var e}function $s(t){return ai(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function Wv(t){return yr(vn(t)).left+$s(t).scrollLeft}function rk(t,e,n){const r=Ct(e),i=vn(e),o=yr(t,r&&function(c){const u=yr(c);return Js(u.width)!==c.offsetWidth||Js(u.height)!==c.offsetHeight}(e),n==="fixed");let a={scrollLeft:0,scrollTop:0};const s={x:0,y:0};if(r||!r&&n!=="fixed")if((Qt(e)!=="body"||Ks(i))&&(a=$s(e)),Ct(e)){const c=yr(e,!0);s.x=c.x+e.clientLeft,s.y=c.y+e.clientTop}else i&&(s.x=Wv(i));return{x:o.left+a.scrollLeft-s.x,y:o.top+a.scrollTop-s.y,width:o.width,height:o.height}}function Xv(t){return Qt(t)==="html"?t:t.assignedSlot||t.parentNode||(ud(t)?t.host:null)||vn(t)}function Zv(t){return Ct(t)&&getComputedStyle(t).position!=="fixed"?t.offsetParent:null}function ld(t){const e=Gt(t);let n=Zv(t);for(;n&&nk(n)&&getComputedStyle(n).position==="static";)n=Zv(n);return n&&(Qt(n)==="html"||Qt(n)==="body"&&getComputedStyle(n).position==="static"&&!Yv(n))?e:n||function(r){let i=Xv(r);for(ud(i)&&(i=i.host);Ct(i)&&!["html","body"].includes(Qt(i));){if(Yv(i))return i;i=i.parentNode}return null}(t)||e}function qv(t){if(Ct(t))return{width:t.offsetWidth,height:t.offsetHeight};const e=yr(t);return{width:e.width,height:e.height}}function Kv(t){const e=Xv(t);return["html","body","#document"].includes(Qt(e))?t.ownerDocument.body:Ct(e)&&Ks(e)?e:Kv(e)}function Jv(t,e){var n;e===void 0&&(e=[]);const r=Kv(t),i=r===((n=t.ownerDocument)==null?void 0:n.body),o=Gt(r),a=i?[o].concat(o.visualViewport||[],Ks(r)?r:[]):r,s=e.concat(a);return i?s:s.concat(Jv(a))}function $v(t,e,n){return e==="viewport"?Zs(function(r,i){const o=Gt(r),a=vn(r),s=o.visualViewport;let c=a.clientWidth,u=a.clientHeight,f=0,l=0;if(s){c=s.width,u=s.height;const d=Vv();(d||!d&&i==="fixed")&&(f=s.offsetLeft,l=s.offsetTop)}return{width:c,height:u,x:f,y:l}}(t,n)):ai(e)?function(r,i){const o=yr(r,!1,i==="fixed"),a=o.top+r.clientTop,s=o.left+r.clientLeft;return{top:a,left:s,x:s,y:a,right:s+r.clientWidth,bottom:a+r.clientHeight,width:r.clientWidth,height:r.clientHeight}}(e,n):Zs(function(r){var i;const o=vn(r),a=$s(r),s=(i=r.ownerDocument)==null?void 0:i.body,c=Oo(o.scrollWidth,o.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),u=Oo(o.scrollHeight,o.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0);let f=-a.scrollLeft+Wv(r);const l=-a.scrollTop;return Bo(s||o).direction==="rtl"&&(f+=Oo(o.clientWidth,s?s.clientWidth:0)-c),{width:c,height:u,x:f,y:l}}(vn(t)))}function ik(t){const e=Jv(t),n=["absolute","fixed"].includes(Bo(t).position)&&Ct(t)?ld(t):t;return ai(n)?e.filter(r=>ai(r)&&function(i,o){const a=o==null||o.getRootNode==null?void 0:o.getRootNode();if(i!=null&&i.contains(o))return!0;if(a&&ud(a)){let s=o;do{if(s&&i===s)return!0;s=s.parentNode||s.host}while(s)}return!1}(r,n)&&Qt(r)!=="body"):[]}const ok={getClippingRect:function(t){let{element:e,boundary:n,rootBoundary:r,strategy:i}=t;const o=[...n==="clippingAncestors"?ik(e):[].concat(n),r],a=o[0],s=o.reduce((c,u)=>{const f=$v(e,u,i);return c.top=Oo(f.top,c.top),c.right=_v(f.right,c.right),c.bottom=_v(f.bottom,c.bottom),c.left=Oo(f.left,c.left),c},$v(e,a,i));return{width:s.right-s.left,height:s.bottom-s.top,x:s.left,y:s.top}},convertOffsetParentRelativeRectToViewportRelativeRect:function(t){let{rect:e,offsetParent:n,strategy:r}=t;const i=Ct(n),o=vn(n);if(n===o)return e;let a={scrollLeft:0,scrollTop:0};const s={x:0,y:0};if((i||!i&&r!=="fixed")&&((Qt(n)!=="body"||Ks(o))&&(a=$s(n)),Ct(n))){const c=yr(n,!0);s.x=c.x+n.clientLeft,s.y=c.y+n.clientTop}return{...e,x:e.x-a.scrollLeft+s.x,y:e.y-a.scrollTop+s.y}},isElement:ai,getDimensions:qv,getOffsetParent:ld,getDocumentElement:vn,getElementRects:t=>{let{reference:e,floating:n,strategy:r}=t;return{reference:rk(e,ld(n),r),floating:{...qv(n),x:0,y:0}}},getClientRects:t=>Array.from(t.getClientRects()),isRTL:t=>Bo(t).direction==="rtl"},ak=(t,e,n)=>Z9(t,e,{platform:ok,...n});let St;const Fo=[],fd=xs(t=>t(),150,!1),dd={type:"divider"};function Po(t){if((t==null?void 0:t.type)=="contextmenu"){t.preventDefault();return}St&&(St.remove(),St=void 0,document.body.classList.remove(Yn))}function e2(t){var e;if(!(t<1)){for(let n=t;n<Fo.length;n++)(e=Fo[n])==null||e.remove(),Fo[n]=void 0;for(const n of Fo[t-1].querySelectorAll("li.active"))n.classList.remove("active")}}const sk=()=>E`<li class="menu-divider"></li>`,ck=t=>E`<li class="menu-header">${t.label||"-"}</li>`,uk=(t,e)=>E`<li><a class="submenu-item" @click="${n=>n.stopPropagation()}" @mouseup="${n=>n.stopPropagation()}" @mouseenter="${n=>fd(()=>{const r=n.target.closest("li");dk(t.submenu,r,e+1),n.stopPropagation()})}" @mouseleave="${()=>fd(()=>e2(e+1))}"><span>${t.label}</span></a></li>`,lk=t=>E`<li><a class="choice-item" @mouseup="${()=>{Po(),t.callback()}}"><span>${t.icon?K(t.icon).node[0]:""} ${t.label}</span> ${t.shortcut?E`<span class="kbd-shortcut">${t.shortcut}</span>`:z} </a>${t.ellipsisCallback?E`<a class="menu-ellipsis" @click="${t.ellipsisCallback}">${K(v6).node[0]}</a>`:z}</li>`,fk=t=>E`<li><span class="disabled-item">${t.icon?K(t.icon).node[0]:""} ${t.label||"-"}</span></li>`;function t2(t,e=1){switch(t.type){case"divider":return sk();case"header":return ck(t);default:return t.submenu?uk(t,e):t.callback?lk(t):fk(t)}}function dk(t,e,n){n2(t,e,n,"right-start"),e.classList.add("active")}function n2(t,e,n,r){const i=document.createElement("ul");i.classList.add("gs-context-menu"),i.addEventListener("mouseenter",()=>{fd(()=>{})}),Le(t.map(o=>t2(o,n)),i),St.appendChild(i),e2(n),Fo[n]=i,ak(e,i,{placement:r??"right-start",middleware:n?[Hv()]:[tk(2),Hv()]}).then(({x:o,y:a})=>{const s=i.querySelector(":scope > li");s&&(a-=s.getBoundingClientRect().top),i.style.left=`${o}px`,i.style.top=`${a}px`})}function r2(t,e,n){n??(n="bottom-start"),Po();const r=performance.now(),i=document.body;St=document.createElement("div"),St.classList.add("gs-context-menu-backdrop"),St.addEventListener("click",Po),St.addEventListener("contextmenu",Po),St.addEventListener("mouseup",()=>{performance.now()-r>500&&Po()},{once:!0}),i.appendChild(St),document.body.classList.add(Yn),n2(t.items,e,0,n)}function hd(t,e){r2(t,hk(e),"right-start"),e.preventDefault()}function hk(t){return{getBoundingClientRect(){return{width:0,height:0,x:t.clientX,y:t.clientY,top:t.clientY,left:t.clientX,right:t.clientX,bottom:t.clientY,toJSON:void 0}}}}const pd={NOMINAL:"nominal",ORDINAL:"ordinal",QUANTITATIVE:"quantitative"},ec="SAMPLE_ATTRIBUTE",i2="SAMPLE_NAME",pk=/^attribute-(.*)$/;class o2 extends Wr{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(ec,n=>this.children.map(this.getAttributeInfoFromView.bind(this)).find(r=>r&&r.name==n.specifier)),this.sampleView.compositeAttributeInfoSource.addAttributeInfoSource(i2,n=>a2),this.addInteractionEventListener("contextmenu",this.handleContextMenu.bind(this)),this.addInteractionEventListener("mousemove",(n,r)=>{var s;const i=r.target,o=this._findSampleForMouseEvent(n,r),a=i&&((s=this.getAttributeInfoFromView(i))==null?void 0:s.name)||void 0;if(o){const c=JSON.stringify([o.id,a]);this.context.updateTooltip(c,u=>Promise.resolve(this.sampleToTooltip(u)))}this._handleAttributeHighlight(a)}),Re([...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(){return{}}render(e,n,r={}){this.isVisible()&&super.render(e,n,{...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({from:n.backgroundOpacity,onUpdate:r=>{n.backgroundOpacity=r},easingFunction:Gg,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-this.sampleView.childCoords.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=[this.sampleView.makePeekMenuItem(),dd],a=this.getAttributeInfoFromView(n.target);if(a){const s=i.attributes[a.name];o.push(...id(E`Attribute: <strong>${a.name}</strong>`,a,s,this.sampleView))}else o.push(...id(E`Sample: <strong>${i.displayName}</strong>`,a2,i.id,this.sampleView));hd({items:o},r)}_setSamples(e){if(this.childCount)throw new Error("Children are already created!");this._createViews();const n=this.context.dataFlow;g1(this,n);const r=n.findDataSourceByKey(this);r.visit(o=>o.initialize());const i=[];this.visit(o=>{if(o instanceof be){const a=o.mark;a.initializeEncoders(),i.push(a.initializeGraphics().then(s=>a)),n.addObserver(s=>{a.initializeData(),a.updateGraphicsData()},o)}}),Promise.allSettled(i).then(o=>{for(const a of o)"value"in a?a.value.finalizeGraphicsInitialization():"reason"in a&&console.error(a.reason)}),r.publishData(e),this.visit(o=>{o.name.startsWith("title")&&n.findDataSourceByKey(o).load()})}_createViews(){const e=[];e.push(this.context.createView(gk(),this));for(const n of this.getAttributeNames()){const r=this.context.createView(this._createAttributeViewSpec(n),this);r.opacityFunction=i=>i*this._getAttributeOpacity(n),e.push(r)}this.setChildren(e),v1(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(Uh(i.map(o=>o.attributes[e]))){case"integer":case"number":r=pd.QUANTITATIVE;break;default:r=pd.NOMINAL}}return mk(e,{...n||{},type:r})}_findViewForAttribute(e){return this.children[this.getAttributeNames().indexOf(e)+1]}getAttributeInfoFromView(e){const n=e==null?void 0:e.name.match(pk);if(n){const r=e.getScaleResolution("color"),i=n[1];return{name:i,attribute:{type:ec,specifier:i},accessor:(o,a)=>a.sampleData.entities[o].attributes[i],type:r.type,scale:r.getScale(),title:E`<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=(s,c)=>yk(c)?this.getAttributeInfo(s).scale(c):"transparent",a=E`<table class="attributes">${Object.entries(i.attributes).map(([s,c])=>E`<tr class="${nf({hovered:s==r})}"><th>${s}</th><td>${D1(c)}</td><td class="color" .style="background-color: ${o(s,c)}"></td></tr>`)}</table>`;return E`<div class="title"><strong>${i.displayName||i.id}</strong></div>${a}`}getDefaultResolution(e,n){return"independent"}handleVerboseCommand(e){const n=e;for(const r of this.getAttributeNames()){const i=this.getAttributeInfo(r);if((i.type==Rl||i.type==jl)&&this.sampleView.getSamples().find(a=>a.attributes[i.name]==n)){const a=this.sampleView.actions.filterByNominal({attribute:{type:ec,specifier:r},values:[n]}),s=this.sampleView.provenance.getPresentState().lastAction,c=this.sampleView.actions.filterByNominal.match(s)&&!s.payload.remove&&s.payload.attribute.type==ec&&s.payload.attribute.specifier==r&&s.payload.values.length==1;return this.sampleView.provenance.storeHelper.dispatch(c?[Ht.ActionCreators.undo(),a]:a),!0}}return!1}isPickingSupported(){return!1}}function mk(t,e){const n=`attributes["${t}"]`,r={name:`attribute-${t}`,title:{text:t,orient:"bottom",align:"right",baseline:"middle",offset:5,angle:-90,dy:-.5,fontSize:11},visible:e.visible??!0,width:e.width??10,transform:[{type:"filter",expr:`datum.${n} != null`}],mark:{type:"rect",xOffset:-.5},encoding:{facetIndex:{field:"indexNumber"},color:{field:n,type:e.type,scale:e.scale}},opacity:1};return e.barScale&&e.type==pd.QUANTITATIVE&&(r.encoding.x={field:`attributes["${t}"]`,type:e.type,scale:e.barScale,axis:null}),r}function gk(){return{name:"metadata-sample-name",title:{text:"Sample name",orient:"bottom",anchor:"start",offset:5,fontSize:11},width:140,mark:{type:"text",align:"left",baseline:"middle",size:11,flushY:!1},encoding:{facetIndex:{field:"indexNumber"},x:{value:0},x2:{value:1},y:{value:0},y2:{value:1},text:{field:"displayName"}}}}function yk(t){return t!==""&&!(typeof t=="number"&&isNaN(t))&&t!==null}const a2=Object.freeze({name:"sample",attribute:{type:i2},accessor:t=>t,type:"identifier",scale:void 0});class vk extends Ot{constructor(e){super({title:{text:"Groups",orient:"none"},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:"_title",expr:"datum.title || datum.name"},{type:"formula",as:"_NA",expr:"datum._title === null"},{type:"formula",as:"_title",expr:"datum._title !== null ? datum._title: 'NA'"}],encoding:{x:{field:"_depth",type:"ordinal",scale:{align:0,padding:.2272727},axis:null},y:{field:"_y1",type:"nominal",scale:{type:"ordinal",domain:_t(500)},axis:null},y2:{field:"_y2"}},layer:[{title:"Group",mark:{type:"rect",clip:!0,color:"#e8e8e8",cornerRadiusBottomLeft:14,cornerRadiusTopLeft:14}},{mark:{type:"text",clip:!0,angle:-90,paddingY:5,tooltip:null},encoding:{text:{field:"_title"},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()}),this.addInteractionEventListener("contextmenu",(n,r)=>{const i=r.uiEvent,o=this.context.getCurrentHover();if(!o)return;const a=o.datum._rawGroup;let s;for(const l of rd(this.sampleView.sampleHierarchy.rootGroup))if(l.at(-1)===a){s=l.slice(1);break}const c=e.actions.removeGroup({path:s.map(l=>l.name)}),u=e.provenance.getActionInfo(c),f=e.provenance.storeHelper.getDispatcher();hd({items:[{label:u.title,icon:u.icon,callback:()=>f(c)}]},i)})}updateRange(){var o,a;const e=(o=this.sampleView.getLocations())==null?void 0:o.groups;if(!(e!=null&&e.length))return;const n=((a=this.sampleView)==null?void 0:a.childCoords.height)??0,r=this.getScaleResolution("y"),i=[];for(const s of e)i.push(1-(s.locSize.location+s.locSize.size)/n),i.push(1-s.locSize.location/n);r.getScale().range(i),this.context.glHelper.createRangeTexture(r,!0)}updateGroups(){var i;const e=((i=this.sampleView.getLocations())==null?void 0:i.groups)??[],n=this.context.dataFlow.findDataSourceByKey(this);if(!n)return;const r=e.map(o=>({_index:o.key.index,_depth:o.key.depth,_rawGroup:o.key.group,attribute:o.key.attributeLabel,name:o.key.group.name,...o.key.group.name!=o.key.group.title?{title:o.key.group.title}:{},n:o.key.n}));n.publishData(r),this.getScaleResolution("x").reconfigure(),this.getScaleResolution("y").reconfigure(),e.length&&this.updateRange(),Re([...this.getAncestors()]).visit(o=>ho(o,"size"))}}class bk{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 tc(t,e,n){let r=n&&t(n);return i=>{const o=t(i);o!==r&&(e(o,r),r=o)}}function s2(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=d=>Re(d),a=t.map(d=>({path:d,sampleGroup:o(d),samples:o(d).samples})).filter(d=>d.samples.length),s=n?d=>({px:d.length*n+i,grow:0}):d=>({px:i,grow:d.length}),c=[];yo(a.map(d=>s(d.samples)),e,{spacing:r}).forEach((d,p)=>{c.push({key:a[p].path,locSize:d})});const u=[];for(const[d,p]of a.entries()){const h={grow:1},m=p.samples;yo(m.map(g=>h),Math.max(0,c[d].locSize.size-i),{offset:c[d].locSize.location+i}).forEach((g,y)=>{const{size:b,location:x}=g,C=b*.1*Wg(15,22,b);g.location=x+C,g.size=b-2*C,u.push({key:m[y],locSize:g})})}function*f(){const d=[];for(const p of c){const h=p.key,m=Re(h);for(;d.length<=h.length&&d.length&&h[d.length-1]!=d[d.length-1].group;)yield d.pop();for(let g=0;g<d.length;g++){const y=d[g];y.locSize.size=p.locSize.location-y.locSize.location+p.locSize.size}for(let g=d.length;g<h.length;g++)d.push({group:h[g],locSize:{...p.locSize},depth:d.length,n:0});for(const g of d)g.n+=m.samples.length}for(;d.length;)yield d.pop()}const l=[...f()].sort((d,p)=>d.depth-p.depth).map((d,p)=>({key:{index:p,group:d.group,depth:d.depth,n:d.n,attributeLabel:void 0},locSize:d.locSize}));return{samples:u,summaries:c,groups:l}}function Ak(t,e){return e.find(n=>Dg(n.locSize,t))}const c2="VALUE_AT_LOCUS",u2=10;class md extends nr{constructor(n,r,i,o,a){super(n,r,i,o);te(this,lc);dc(this,"_peekState",0);this.provenance=a,this.spec=n,this.stickySummaries=n.stickySummaries??!0,this.compositeAttributeInfoSource=new bk,this.child=r.createView(n.spec,this,"sample-facets"),this.summaryViews=new Wr({vconcat:[]},r,this,"sampleSummaries"),this.child.visit(f=>{f instanceof be&&this.summaryViews.setChildren(f.sampleAggregateViews)}),this.childCoords=dn.ZERO,this.facetTexture=void 0,this.facetTextureData=void 0,this.peripheryView=new Wr({title:"Sidebar",resolve:{scale:{default:"independent"},axis:{default:"independent"}},hconcat:[],spacing:0},r,this,"sample-sidebar"),this.peripheryCoords=dn.ZERO,this.groupPanel=new vk(this),this.attributePanel=new o2(this),this.peripheryView.setChildren([this.groupPanel,this.attributePanel]),this.child.addInteractionEventListener("contextmenu",this._handleContextMenu.bind(this)),this.provenance.storeHelper.subscribe(tc(f=>td(f).rootGroup,f=>{this._locations=void 0,this.groupPanel.updateGroups(),this._peekState=0,this.context.requestLayoutReflow(),this.context.animator.requestRender()})),this.provenance.storeHelper.subscribe(tc(f=>td(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(c2,f=>{var x;const l=f.specifier,d=this.findDescendantByName(l.view);let p;if(le(l.locus))p=l.locus;else{const C=this.getScaleResolution("x").getGenome();if(C)p=C.toContinuous(l.locus.chrom,l.locus.pos);else throw new Error("Encountered a complex locus but no genome is available!")}const h=C=>{var w;return(w=d.mark.findDatumAt(C,p))==null?void 0:w[l.field]},[m,g]=Object.entries(d.getEncoding()).find(([C,w])=>"field"in w&&w.field==l.field),y=m?(x=d.getScaleResolution(m))==null?void 0:x.getScale():void 0;return{name:l.field,attribute:f,title:E`<em class="attribute">${l.field}</em> <span class="viewTitle">(${d.getTitleText()??d.name})</span> at <span class="locus">${l2(l.locus)}</span>`,accessor:h,type:"type"in g?g.type:void 0,scale:y}}),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-this.childCoords.y}),this.addInteractionEventListener("wheel",(f,l)=>{const d=l.uiEvent;this._peekState&&!d.ctrlKey&&(this._scrollOffset=ps(this._scrollOffset+d.deltaY,0,this._scrollableHeight-this.childCoords.height),this.groupPanel.updateRange(),this.context.animator.requestRender(),l.uiEvent={type:d.type,deltaX:d.deltaX,preventDefault:d.preventDefault.bind(d)})},!0),r.addKeyboardListener("keydown",f=>{f.code=="KeyE"&&!f.repeat&&this.togglePeek()}),r.addKeyboardListener("keyup",f=>{f.code=="KeyE"&&this.togglePeek(!1)});const s=f=>this.compositeAttributeInfoSource.getAttributeInfo(f),c=b9(s);this.provenance.addReducer(c.name,c.reducer),this.provenance.addActionInfoSource(f=>x9(f,s)),this.actions=c.actions;const u=VI(f=>{var l;return(l=f.sampleData)==null?void 0:l.entities},f=>f&&Object.values(f));this.getSamples=()=>u(this.sampleHierarchy),this.spec.samples.data&&this.loadSamples()}getOverhang(){let n=this.peripheryView.isVisible()?this.peripheryView.getSize().width.px:0;return n&&(n+=u2),new Ke(0,0,0,n)}*[Symbol.iterator](){yield this.child,yield this.peripheryView}replaceChild(n,r){const i=r;if(n===this.child)this.child=i;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:n,collector:r}=y5(d1(this.spec.samples.data,this.getBaseUrl()),new xk);r.observers.push(o=>{const a=o.getData();this.provenance.storeHelper.dispatch(this.actions.setSamples({samples:a}))});const i="samples "+this.getPathString();this.context.dataFlow.addDataSource(n,i)}extractSamplesFromData(){if(this.getSamples())return;const n=this.getScaleResolution("sample");if(n){const r=n.getDataDomain().map((i,o)=>({id:i,displayName:i,indexNumber:o,attributes:[]}));this.provenance.storeHelper.dispatch(this.actions.setSamples({samples:r}))}else throw new Error("No explicit sample data nor sample channels found!")}get sampleHierarchy(){return this.provenance.getPresentState()[ii]}get leafSamples(){return nd(this.sampleHierarchy).map(r=>r.at(-1)).map(r=>r.samples).flat()}getLocations(){var n,r,i;if(!this._locations){if(!((n=this.childCoords)!=null&&n.height))return;const o=this.sampleHierarchy,a=nd(o),s=[null,...o.groupMetadata],c=(((r=this.summaryViews)==null?void 0:r.isVisible())&&((i=this.summaryViews)==null?void 0:i.getSize().height.px))??0,u=s2(a,{viewHeight:this.childCoords.height,groupSpacing:5,summaryHeight:c}),f=s2(a,{sampleHeight:35,groupSpacing:15,summaryHeight:c}),l=()=>-this._scrollOffset,d=()=>this._peekState;this._scrollableLocations=f,this._scrollableHeight=f.summaries.map(g=>g.locSize.location+g.locSize.size).reduce((g,y)=>Math.max(g,y),0);const p=(g,y)=>{const b=[];for(let x=0;x<g.length;x++){const C=g[x].key;b.push({key:C,locSize:SM(g[x].locSize,EM(y[x].locSize,l),d)})}return b},h=p(u.groups,f.groups),m=document.createElement("div");h.forEach(g=>{if(g.key.depth==0)return;const y=s[g.key.depth].attribute,b=this.compositeAttributeInfoSource.getAttributeInfo(y).title;b?ne(b)?g.key.attributeLabel=b:(Le(b,m),g.key.attributeLabel=m.textContent.replace(/\s+/g," ").trim()):g.key.attributeLabel="unknown"}),this._locations={samples:p(u.samples,f.samples),summaries:p(u.summaries,f.summaries),groups:h}}return this._locations}getSampleAt(n){const r=Ak(n,this.getLocations().samples);if(r)return this.sampleHierarchy.sampleData.entities[r.key]}getSummaryAt(n){const r=this.getLocations().summaries,i=r.findIndex(o=>Dg(o.locSize,n));return i>=0?{index:i,location:r[i]}:void 0}_clipBySummary(n){if(this.stickySummaries&&this.summaryViews.childCount){const r=this.summaryViews.getSize().height.px;return n.modify({y:()=>n.y+r,height:()=>n.height-r})}}renderChild(n,r,i={}){const o=1/r.height,a=()=>o,s=this._clipBySummary(r);for(const c of this.getLocations().samples)this.child.render(n,r,{...i,sampleFacetRenderingOptions:{locSize:DM(c.locSize,a)},facetId:[c.key],clipRect:s})}renderSummaries(n,r,i={}){i={...i,clipRect:r};const o=this.summaryViews.getSize().height.px;for(const[a,s]of this.getLocations().summaries.entries()){const c=()=>{const u=s.locSize.location;let f=r.y+u;return this.stickySummaries?f+ps(-u,0,s.locSize.size-o):f};this.summaryViews.render(n,r.modify({y:c,height:o}),{...i,facetId:[a]})}}render(n,r,i={}){if(!this.isVisible())return;n.pushView(this,r);const o=yo([this.peripheryView.isVisible()?this.peripheryView.getSize().width:{px:0},{grow:1}],r.width,{spacing:u2}),a=s=>r.modify({x:s.location+r.x,width:s.size});this.peripheryCoords=a(o[0]),this.childCoords=a(o[1]),this.peripheryView.render(n,this.peripheryCoords,i),this.renderChild(n,this.childCoords,i),this.renderSummaries(n,this.childCoords,i),n.popView(this)}onBeforeRender(){this._updateFacetTexture()}_updateFacetTexture(){var o;const n=this.facetTextureData;n.fill(0);const r=(o=this.sampleHierarchy.sampleData)==null?void 0:o.entities;if(r){const a=this.getLocations().samples,s=this.childCoords.height;for(const c of a){const u=r[c.key].indexNumber;n[u*2+0]=c.locSize.location/s,n[u*2+1]=c.locSize.size/s}}const i=this.context.glHelper.gl;this.facetTexture=mo(i,{internalFormat:i.RG32F,format:i.RG,height:1},n,this.facetTexture)}togglePeek(n){var i;if(this._peekState>0&&this._peekState<1||n!==void 0&&n==!!this._peekState)return;const r={requestAnimationFrame:o=>this.context.animator.requestTransition(o),onUpdate:o=>{this._peekState=Math.pow(o,2),this.groupPanel.updateRange(),this.context.animator.requestRender()},from:this._peekState};if(this._peekState==0){const o=this._lastMouseY,a=(i=this.getSampleAt(o))==null?void 0:i.id;let s;if(a)s=(u=>u.location+u.size/2)(this._scrollableLocations.samples.find(u=>u.key==a).locSize);else{const c=this.getSummaryAt(o);c&&(s=this._scrollableLocations.summaries[c.index].locSize.location-(c.location.locSize.location-o))}s?this._scrollOffset=s-o:this._scrollOffset=(this._scrollableHeight-this.childCoords.height)/2,this._scrollableHeight>this.childCoords.height?As({...r,to:1,duration:500,easingFunction:u8}):As({...r,from:0,to:1,duration:300,easingFunction:u=>(1-Math.pow(u*2-1,2))*.5})}else As({...r,to:0,duration:400,easingFunction:s8})}makePeekMenuItem(){return{...this._peekState==0?{label:"Open closeup",callback:()=>this.togglePeek(!0),icon:T6}:{label:"Close closeup",callback:()=>this.togglePeek(!1),icon:I6},shortcut:"E"}}_handleContextMenu(n,r){const i=r.uiEvent,o=this.childCoords.normalizePoint(r.point.x,r.point.y).x,a=this.getScaleResolution("x").invertToComplex(o),s=A1([...this.getAncestors()].at(-1)),c=w5(this.child).filter(l=>!["sample","x","x2"].includes(l.channel)).filter(l=>["rect","rule"].includes(l.view.getMarkType())).filter(l=>s.has(l.view.name));let u=[this.makePeekMenuItem(),dd,{label:`Locus: ${l2(a)}`,type:"header"},dd],f="";for(const[l,d]of c.entries()){const p={view:d.view.name,field:d.field,locus:a},h=this.compositeAttributeInfoSource.getAttributeInfo({type:c2,specifier:p}),m=d.view.getTitleText()??d.view.spec.name;m!=f&&(l>0&&u.push({type:"divider"}),u.push({label:m,type:"header"}),f=m),u.push({label:d.field,submenu:id(null,h,void 0,this)})}hd({items:u},i)}getSampleFacetTexture(){return this.facetTexture}propagateInteractionEvent(n){this.handleInteractionEvent(void 0,n,!0),!n.stopped&&(this.childCoords.containsPoint(n.point.x,n.point.y)&&(this.child.propagateInteractionEvent(n),r1(n,this.childCoords,r=>se(this,lc,X2).call(this,this.childCoords,this.child,r),this.context.getCurrentHover())),this.peripheryCoords.containsPoint(n.point.x,n.point.y)&&this.peripheryView.propagateInteractionEvent(n),!n.stopped&&this.handleInteractionEvent(void 0,n,!1))}getDefaultResolution(n,r){switch(n){case"x":case"sample":return"shared";default:return"independent"}}}lc=new WeakSet,X2=function(n,r,i){const o=this.child.getScaleResolution("x");if(!o||!o.isZoomable())return;const a=n.normalizePoint(i.x,i.y),s=n.normalizePoint(i.x+i.xDelta,i.y+i.yDelta);o.zoom(2**i.zDelta,a.x,s.x-a.x),this.context.animator.requestRender()};function l2(t){return!le(t)&&"chrom"in t?$M(t):""+t}class xk extends ue{constructor(){super(),this.reset()}reset(){this._index=0}handle(e){this._propagate({id:e.sample,displayName:e.displayName||e.sample,indexNumber:this._index++,attributes:wk(e)})}}function wk(t){const e=Object.assign({},t);return delete e.sample,delete e.displayName,e}function Ck(t){return"samples"in t&&Pe(t.samples)&&"spec"in t&&Pe(t.spec)}const Sk=(t,e)=>e.some(n=>t instanceof n);let f2,d2;function Ek(){return f2||(f2=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])}function Dk(){return d2||(d2=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])}const h2=new WeakMap,gd=new WeakMap,p2=new WeakMap,yd=new WeakMap,vd=new WeakMap;function Mk(t){const e=new Promise((n,r)=>{const i=()=>{t.removeEventListener("success",o),t.removeEventListener("error",a)},o=()=>{n(bn(t.result)),i()},a=()=>{r(t.error),i()};t.addEventListener("success",o),t.addEventListener("error",a)});return e.then(n=>{n instanceof IDBCursor&&h2.set(n,t)}).catch(()=>{}),vd.set(e,t),e}function Tk(t){if(gd.has(t))return;const e=new Promise((n,r)=>{const i=()=>{t.removeEventListener("complete",o),t.removeEventListener("error",a),t.removeEventListener("abort",a)},o=()=>{n(),i()},a=()=>{r(t.error||new DOMException("AbortError","AbortError")),i()};t.addEventListener("complete",o),t.addEventListener("error",a),t.addEventListener("abort",a)});gd.set(t,e)}let bd={get(t,e,n){if(t instanceof IDBTransaction){if(e==="done")return gd.get(t);if(e==="objectStoreNames")return t.objectStoreNames||p2.get(t);if(e==="store")return n.objectStoreNames[1]?void 0:n.objectStore(n.objectStoreNames[0])}return bn(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 Ik(t){bd=t(bd)}function kk(t){return t===IDBDatabase.prototype.transaction&&!("objectStoreNames"in IDBTransaction.prototype)?function(e,...n){const r=t.call(Ad(this),e,...n);return p2.set(r,e.sort?e.sort():[e]),bn(r)}:Dk().includes(t)?function(...e){return t.apply(Ad(this),e),bn(h2.get(this))}:function(...e){return bn(t.apply(Ad(this),e))}}function Nk(t){return typeof t=="function"?kk(t):(t instanceof IDBTransaction&&Tk(t),Sk(t,Ek())?new Proxy(t,bd):t)}function bn(t){if(t instanceof IDBRequest)return Mk(t);if(yd.has(t))return yd.get(t);const e=Nk(t);return e!==t&&(yd.set(t,e),vd.set(e,t)),e}const Ad=t=>vd.get(t);function Lk(t,e,{blocked:n,upgrade:r,blocking:i,terminated:o}={}){const a=indexedDB.open(t,e),s=bn(a);return r&&a.addEventListener("upgradeneeded",c=>{r(bn(a.result),c.oldVersion,c.newVersion,bn(a.transaction))}),n&&a.addEventListener("blocked",()=>n()),s.then(c=>{o&&c.addEventListener("close",()=>o()),i&&c.addEventListener("versionchange",()=>i())}).catch(()=>{}),s}const Bk=["get","getKey","getAll","getAllKeys","count"],Ok=["put","add","delete","clear"],xd=new Map;function m2(t,e){if(!(t instanceof IDBDatabase&&!(e in t)&&typeof e=="string"))return;if(xd.get(e))return xd.get(e);const n=e.replace(/FromIndex$/,""),r=e!==n,i=Ok.includes(n);if(!(n in(r?IDBIndex:IDBObjectStore).prototype)||!(i||Bk.includes(n)))return;const o=async function(a,...s){const c=this.transaction(a,i?"readwrite":"readonly");let u=c.store;return r&&(u=u.index(s.shift())),(await Promise.all([u[n](...s),i&&c.done]))[0]};return xd.set(e,o),o}Ik(t=>({...t,get:(e,n,r)=>m2(e,n)||t.get(e,n,r),has:(e,n)=>!!m2(e,n)||t.has(e,n)}));class g2{isReadonly(){return!0}async put(e,n){this._checkReadonly()}async delete(e){this._checkReadonly()}async getNames(){return[]}async get(e){}_checkReadonly(){if(this.isReadonly())throw new Error("This bookmark")}}const zo="bookmarks";class Fk extends g2{constructor(e){super(),this.specId=e,this._db=void 0}async _getDB(){if(!this._db){const e=`GenomeSpy: ${this.specId}`;this._db=Lk(e,1,{upgrade(n,r,i,o){n.createObjectStore(zo,{keyPath:"name"})},blocked(){},blocking(){},terminated(){}})}return this._db}isReadonly(){return!1}async put(e,n){const i=(await this._getDB()).transaction(zo,"readwrite");try{n?(await i.store.delete(n),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(zo,e)}async getNames(){return(await this._getDB()).getAllKeys(zo)}async get(e){return(await this._getDB()).get(zo,e)}}/**
|
2153
|
+
*/function*yI(t,e){const n=typeof e=="function";if(t!==void 0){let r=-1;for(const i of t)r>-1&&(yield n?e(r):e),r++,yield i}}const gv="setSamples",yv="sortBy",vv="retainFirstOfEach",bv="retainFirstNCategories",Av="filterByNominal",xv="filterByQuantitative",wv="removeUndefined",Cv="groupByNominal",Sv="groupToQuartiles",Ev="groupByThresholds",Dv="removeGroup",Mv="retainMatched",ii="sampleView";function vI(){return{sampleData:void 0,groupMetadata:[],rootGroup:{name:"ROOT",title:"Root",samples:[]}}}function bI(t){const e=(n,r)=>{const i=t(n.attribute).accessor;return o=>i(o,r)};return pv({name:ii,initialState:vI(),reducers:{[gv]:(n,r)=>{const i=r.payload.samples;if(n.sampleData)throw new Error("Samples have already been set!");if(i.some(a=>a.id===void 0||a.id===null))throw new Error('The sample metadata contains missing sample ids or the "sample" column is missing!');if(new Set(i.map(a=>a.id)).size!=i.length)throw new Error("The sample metadata contains duplicate sample ids!");const o=i.map((a,s)=>({...a,indexNumber:s}));n.sampleData={ids:o.map(a=>a.id),entities:Object.fromEntries(o.map(a=>[a.id,a]))},n.rootGroup={name:"ROOT",title:"Root",samples:n.sampleData.ids}},[yv]:(n,r)=>{pr(n,i=>hI(i,lI(e(r.payload,n),t(r.payload.attribute)),!1))},[vv]:(n,r)=>{pr(n,i=>fI(i,e(r.payload,n)))},[bv]:(n,r)=>{pr(n,i=>dI(i,e(r.payload,n),r.payload.n))},[xv]:(n,r)=>{pr(n,i=>mI(i,e(r.payload,n),r.payload.operator,r.payload.operand))},[Av]:(n,r)=>{pr(n,i=>mv(i,e(r.payload,n),r.payload.remove?"remove":"retain",r.payload.values))},[wv]:(n,r)=>{pr(n,i=>gI(i,e(r.payload,n)))},[Cv]:(n,r)=>{var o;const i=(o=t(r.payload.attribute).scale)==null?void 0:o.domain();$f(n,a=>Nv(a,e(r.payload,n),i)),n.groupMetadata.push({attribute:r.payload.attribute})},[Sv]:(n,r)=>{$f(n,i=>CI(i,e(r.payload,n))),n.groupMetadata.push({attribute:r.payload.attribute})},[Ev]:(n,r)=>{$f(n,i=>wI(i,e(r.payload,n),r.payload.thresholds)),n.groupMetadata.push({attribute:r.payload.attribute})},[Dv]:(n,r)=>{const i=n.rootGroup;Vs(i)&&Bv(i,r.payload.path)},[Mv]:(n,r)=>{const i=e(r.payload,n),o=[];for(const s of ed(n))if(s.samples.length>0){const c=new Set;for(const u of s.samples)c.add(i(u));o.push(c)}const a=[];for(const s of o[0]){let c=!0;for(let u=1;u<o.length&&c;u++)c=o[u].has(s);c&&a.push(s)}pr(n,s=>mv(s,i,"retain",a))}}})}function pr(t,e){for(const n of ed(t))n.samples=e(n.samples)}function $f(t,e){for(const n of ed(t))e(n)}function ed(t){return nd(t).map(e=>Re(e))}function td(t){return t.provenance.present[ii]}function nd(t){const e=[],n=[],r=i=>{if(e.push(i),Vs(i))for(const o of i.groups)r(o);else n.push([...e]);e.pop()};return r(t.rootGroup),n}function Tv(t){return"samples"in t}function Vs(t){return"groups"in t}function*rd(t){if(yield[t],Vs(t))for(const e of t.groups)for(const n of rd(e))yield[t,...n]}const AI=de(".4"),Iv={lt:"<",lte:"≤",eq:"=",gte:"≥",gt:">"};function kv(t){return E`{${t.map((e,n)=>E`${n>0?", ":""}<strong>${e}</strong>`)}}`}function xI(t,e){if(!t.type.startsWith(ii))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)||E`<em>${i}</em>`,a={attributeName:i};switch(t.type.substring(ii.length+1)){case gv:return{...a,title:"The initial state",icon:c6};case yv:return{...a,title:"Sort by",provenanceTitle:E`Sort by ${o}`,icon:e6};case vv:return{...a,title:E`Retain the first sample of each <em>${i}</em>`,provenanceTitle:E`Retain the first sample of each ${o}`,icon:R1};case bv:return{...a,title:E`Retain first <strong>n</strong> categories of <em>${i}</em>...`,provenanceTitle:E`Retain first <strong>${n.n}</strong> categories of ${o}`,icon:R1};case Av:{const c=n.values,u=f=>E`${n.remove?"Remove":"Retain"} samples having ${c[0]===void 0||c[0]===null?E`undefined ${f}`:E`${f} ${c.length>1?E`in ${kv(c)}`:E`<span class="operator">=</span> <strong>${c[0]}</strong>`}`}`;return{...a,title:u(E`<em>${i}</em>`),provenanceTitle:u(o),icon:n.remove?Ss:ar}}case xv:{const c=u=>E`Retain samples having ${u} <span class="operator">${Iv[n.operator]}</span> <strong>${AI(n.operand)}</strong>`;return{...a,title:c(E`<em>${i}</em>`),provenanceTitle:c(o),icon:ar}}case wv:return{...a,title:"Remove samples having missing attribute",provenanceTitle:E`Remove samples having missing ${o}`,icon:Ss};case Cv:return{...a,title:"Group by",provenanceTitle:E`Group by ${o}`,icon:xo};case Sv:return{...a,title:"Group by quartiles",provenanceTitle:E`Group by quartiles on ${o}`,icon:xo};case Ev:return{...a,title:"Group by thresholds",provenanceTitle:E`Group by thresholds ${kv(n.thresholds.map(c=>`${Iv[c.operator]} ${c.operand}`))} on ${o}`,icon:xo};case Dv:return{title:"Remove group",provenanceTitle:E`Remove group ${yI(n.path.map(c=>E`<strong>${c}</strong>`)," / ")}`,icon:Ss};case Mv:return{...a,title:E`Retain group-wise matched samples using <em>${i}</em>`,provenanceTitle:E`Retain group-wise matched samples using ${o}`,icon:ar};default:return{...a,title:JSON.stringify(t),icon:P1}}}function Nv(t,e,n,r){if(r&&!n)throw new Error("Custom labels need explicit group order!");const i=mi(t.samples,e),o=n?n.map(c=>[c,i.get(c)]).filter(c=>c[1]):[...i],s=t;s.groups=o.map(([c,u],f)=>({name:""+c,title:r?r[f]:c,samples:u})),delete t.samples}function Lv(t,e,n){const r=a=>`Group ${a+1}`,i=_t(n.length-1).reverse(),o=Ov(e,n.slice(1,n.length-1));Nv(t,a=>r(o(a)),i.map(r),i.map(a=>Pv(n[a],n[a+1])))}function wI(t,e,n){Lv(t,e,[{operator:"lt",operand:-1/0},...n,{operator:"lte",operand:1/0}])}function CI(t,e){const n=EI(SI(t.samples,e,[0,.25,.5,.75,1]));n.length==1&&n.push(n[0]),Lv(t,e,n.map((r,i,o)=>({operator:i==o.length-1?"lte":"lt",operand:r})))}function Bv(t,e){if(e.length==0)return;const n=t.groups.findIndex(r=>r.name==e[0]);if(!(n<0)){if(e.length==1)t.groups.splice(n,1);else if(e.length>1){const r=t.groups[n];Vs(r)&&Bv(r,[...e].splice(1))}}}function Ov(t,e){return r=>{const i=t(r);if(!(!le(i)||isNaN(i))){for(let o=0;o<e.length;o++)if(e[o].operator=="lt"){if(i<e[o].operand)return o}else if(i<=e[o].operand)return o;return e.length}}}function SI(t,e,n){const r=Ub(t.map(e).filter(i=>le(i)&&!isNaN(i)));return n.map(i=>Tc(r,i))}function EI(t){const e=[t[0]];for(let n=1;n<t.length;n++)t[n]!=t[n-1]&&e.push(t[n]);return e}const Fv=de(".3~r"),Pv=(t,e)=>`${t.operator=="lt"?"[":"("}${Fv(t.operand)}, ${Fv(e.operand)}${e.operator=="lte"?"]":")"}`;function DI(t,e){const n=e.provenance.storeHelper.getDispatcher(),r=[],i=fr(),o=E`<div class="modal-title">Group by threshold on <em>${t.name}</em></div>`,a=g=>{n(e.actions.groupByThresholds({attribute:t.attribute,thresholds:r})),i.close()},s=()=>E`<div class="modal-buttons"><button class="btn btn-cancel" @click="${()=>i.close()}">Cancel</button> <button class="btn btn-primary" ?disabled="${!MI(r)}" @click="${()=>a()}">${K(xo).node[0]} Group</button></div>`,c=(g,y)=>(y>0&&(g=Math.max(g,r[y-1].operand)),y<r.length-1&&(g=Math.min(g,r[y+1].operand)),g),u=(g,y)=>{const b=g.target.value;r[y].operator=b,m()},f=(g,y)=>{const b=g.target.value;/^\d+(\.\d+)?$/.test(b)&&(r[y].operand=c(+b,y),m())},l=g=>{const y=r.findIndex(b=>b.operand>g.value);r.splice(y<0?r.length:y,0,{operand:g.value,operator:"lt"}),m()},d=g=>{r[g.index].operand=c(g.value,g.index),m()},p=g=>{r.splice(g,1),m()},h=TI(t,e.leafSamples,e.sampleHierarchy);function m(){const g=()=>{const b=[{operand:-1/0,operator:"lt"},...r,{operand:1/0,operator:"lte"}],x=Ov(v=>v,b),C=[];for(let v=1;v<b.length;v++)C.push(0);for(const v of h)C[x(v)-1]++;const w=[];for(let v=1;v<b.length;v++)w.push({index:v-1,name:v,interval:Pv(b[v-1],b[v]),n:C[v-1]});return E`<table class="threshold-groups"><thead><tr><th>Group</th><th>Interval</th><th>n</th></tr></thead><tbody>${w.map(v=>E`<tr><td><span class="group-color" style="background-color:${Yy[v.index]}"></span> ${v.name}</td><td>${v.interval}</td><td>${v.n}</td></tr>`)}</tbody></table>`},y=E`<div class="gs-form-group group-by-thresholds-form"><label>Split into groups using the thresholds:</label><genome-spy-histogram .values="${h}" .thresholds="${r.map(b=>b.operand)}" .operators="${r.map(b=>b.operator)}" .showThresholdNumbers="${!0}" @add="${l}" @adjust="${d}"></genome-spy-histogram>${r.map((b,x)=>E`<div class="threshold-flex"><select .value="${b.operator}" @change="${C=>u(C,x)}"><option value="lt">${"<"}</option><option value="lte">${"≤"}</option></select> <input .value="${""+b.operand}" type="text" placeholder="Numeric value" @input="${C=>f(C,x)}" @blur="${C=>{C.target.value=""+r[x].operand}}"> <button @click="${()=>p(x)}" class="btn" title="Remove">${K(j1).node[0]}</button></div>`)} ${r.length?E`<small>The operator specifies whether the upper endpoint of the interval (<em>i.e.</em>, the group) is exclusive (<) or inclusive(≤). </small>${g()}`:z}</div>`;Le(E`${o}<div class="modal-body">${y}</div>${s()}`,i.content)}m()}function MI(t){return t.length}function TI(t,e,n){const r=t.accessor;return e.map(i=>r(i,n))}function II(t,e){const n=e.provenance.storeHelper.getDispatcher();let r=5;const i=fr(),o=E`<div class="modal-title">Retain first n categories of <em>${t.title}</em></div>`,a=f=>{n(e.actions.retainFirstNCategories({attribute:t.attribute,n:r})),i.close()},s=()=>E`<div class="modal-buttons"><button class="btn btn-cancel" @click="${()=>i.close()}">Cancel</button> <button class="btn btn-primary" @click="${()=>a()}">${K(ar).node[0]} Retain</button></div>`,c=E`<div class="gs-form-group"><label>Number of categories to retain:</label> <input type="number" min="1" .valueAsNumber="${r}" @change="${f=>{r=f.target.valueAsNumber}}"></div>`;function u(){Le(E`${o}<div class="modal-body">${c}</div>${s()}`,i.content)}u(),i.content.querySelector("input").focus()}function id(t,e,n,r){const i=r.actions,o=e.attribute,a=r.sampleHierarchy,s=r.provenance.storeHelper.getDispatcher(),c=[];t&&c.push({label:t,type:"header"});const u=(d,p,h)=>{const m=r.provenance.getActionInfo(d);return{label:m.title,icon:m.icon,callback:p?void 0:h??(()=>s(d))}},f=(...d)=>c.push(...d.map(p=>u(p)));f(i.sortBy({attribute:o}));const l=(e==null?void 0:e.type)??"identifier";return l!="quantitative"?(l!="identifier"&&(f(i.groupByNominal({attribute:o}),i.retainFirstOfEach({attribute:o})),c.push(u(i.retainFirstNCategories({attribute:o,n:void 0}),!1,()=>II(e,r)))),f(i.filterByNominal({attribute:o,values:[n]}),i.filterByNominal({attribute:o,remove:!0,values:[n]})),c.push(u(i.retainMatched({attribute:o}),!a.groupMetadata.length))):(f(i.groupToQuartiles({attribute:o})),c.push({icon:xo,label:"Group by thresholds...",callback:()=>DI(e,r)}),kI(n)?f(i.filterByQuantitative({attribute:o,operator:"gte",operand:+n}),i.filterByQuantitative({attribute:o,operator:"lte",operand:+n})):f(i.removeUndefined({attribute:o}))),l!=="identifier"&&c.push({icon:ar,label:"Advanced filter...",callback:()=>A9(e,r)}),c}function kI(t){return t!=null&&t!==""&&!(typeof t=="number"&&isNaN(t))}function NI(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var Ht={},mr={};Object.defineProperty(mr,"__esModule",{value:!0}),mr.ActionCreators=mr.ActionTypes=void 0;var gr={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"};mr.ActionTypes=gr;var LI={undo:function(){return{type:gr.UNDO}},redo:function(){return{type:gr.REDO}},jumpToFuture:function(e){return{type:gr.JUMP_TO_FUTURE,index:e}},jumpToPast:function(e){return{type:gr.JUMP_TO_PAST,index:e}},jump:function(e){return{type:gr.JUMP,index:e}},clearHistory:function(){return{type:gr.CLEAR_HISTORY}}};mr.ActionCreators=LI;var xt={};Object.defineProperty(xt,"__esModule",{value:!0}),xt.parseActions=_s,xt.isHistory=BI,xt.includeAction=OI,xt.excludeAction=FI,xt.combineFilters=PI,xt.groupByActionTypes=zI,xt.newHistory=RI;function _s(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[];return Array.isArray(t)?t:typeof t=="string"?[t]:e}function BI(t){return typeof t.present<"u"&&typeof t.future<"u"&&typeof t.past<"u"&&Array.isArray(t.future)&&Array.isArray(t.past)}function OI(t){var e=_s(t);return function(n){return e.indexOf(n.type)>=0}}function FI(t){var e=_s(t);return function(n){return e.indexOf(n.type)<0}}function PI(){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,a,s){return r(o,a,s)&&i(o,a,s)}},function(){return!0})}function zI(t){var e=_s(t);return function(n){return e.indexOf(n.type)>=0?n.type:null}}function RI(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 zv={},oi={};Object.defineProperty(oi,"__esModule",{value:!0}),oi.set=WI,oi.start=YI,oi.end=VI,oi.log=_I;function wt(t){return HI(t)||UI(t)||jI()}function jI(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function UI(t){if(Symbol.iterator in Object(t)||Object.prototype.toString.call(t)==="[object Arguments]")return Array.from(t)}function HI(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,Je,od={prevState:"#9E9E9E",action:"#03A9F4",nextState:"#4CAF50"};function GI(){Je={header:[],prev:[],action:[],next:[],msgs:[]}}function QI(){var t=Je,e=t.header,n=t.prev,r=t.next,i=t.action,o=t.msgs;if(console.group){var a,s,c,u,f;(a=console).groupCollapsed.apply(a,wt(e)),(s=console).log.apply(s,wt(n)),(c=console).log.apply(c,wt(i)),(u=console).log.apply(u,wt(r)),(f=console).log.apply(f,wt(o)),console.groupEnd()}else{var l,d,p,h,m;(l=console).log.apply(l,wt(e)),(d=console).log.apply(d,wt(n)),(p=console).log.apply(p,wt(i)),(h=console).log.apply(h,wt(r)),(m=console).log.apply(m,wt(o))}}function ad(t,e,n){return["%c".concat(t),"color: ".concat(e,"; font-weight: bold"),n]}function YI(t,e){GI(),Ws&&(console.group?(Je.header=["%credux-undo","font-style: italic","action",t.type],Je.action=ad("action",od.action,t),Je.prev=ad("prev history",od.prevState,e)):(Je.header=["redux-undo action",t.type],Je.action=["action",t],Je.prev=["prev history",e]))}function VI(t){Ws&&(console.group?Je.next=ad("next history",od.nextState,t):Je.next=["next history",t],QI())}function _I(){if(Ws){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];Je.msgs=Je.msgs.concat([].concat(e,[`
|
2154
|
+
`]))}}function WI(t){Ws=t}(function(t){function e(w){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?e=function(A){return typeof A}:e=function(A){return A&&typeof Symbol=="function"&&A.constructor===Symbol&&A!==Symbol.prototype?"symbol":typeof A},e(w)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=C;var n=a(oi),r=mr,i=xt;function o(){if(typeof WeakMap!="function")return null;var w=new WeakMap;return o=function(){return w},w}function a(w){if(w&&w.__esModule)return w;if(w===null||e(w)!=="object"&&typeof w!="function")return{default:w};var v=o();if(v&&v.has(w))return v.get(w);var A={},D=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var k in w)if(Object.prototype.hasOwnProperty.call(w,k)){var O=D?Object.getOwnPropertyDescriptor(w,k):null;O&&(O.get||O.set)?Object.defineProperty(A,k,O):A[k]=w[k]}return A.default=w,v&&v.set(w,A),A}function s(w,v){var A=Object.keys(w);if(Object.getOwnPropertySymbols){var D=Object.getOwnPropertySymbols(w);v&&(D=D.filter(function(k){return Object.getOwnPropertyDescriptor(w,k).enumerable})),A.push.apply(A,D)}return A}function c(w){for(var v=1;v<arguments.length;v++){var A=arguments[v]!=null?arguments[v]:{};v%2?s(Object(A),!0).forEach(function(D){u(w,D,A[D])}):Object.getOwnPropertyDescriptors?Object.defineProperties(w,Object.getOwnPropertyDescriptors(A)):s(Object(A)).forEach(function(D){Object.defineProperty(w,D,Object.getOwnPropertyDescriptor(A,D))})}return w}function u(w,v,A){return v in w?Object.defineProperty(w,v,{value:A,enumerable:!0,configurable:!0,writable:!0}):w[v]=A,w}function f(w){return p(w)||d(w)||l()}function l(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function d(w){if(Symbol.iterator in Object(w)||Object.prototype.toString.call(w)==="[object Arguments]")return Array.from(w)}function p(w){if(Array.isArray(w)){for(var v=0,A=new Array(w.length);v<w.length;v++)A[v]=w[v];return A}}function h(w,v){var A=(0,i.newHistory)([],w,[]);return v&&(A._latestUnfiltered=null),A}function m(w,v,A,D){var k=w.past.length+1;n.log("inserting",v),n.log("new free: ",A-k);var O=w.past,T=w._latestUnfiltered,B=A&&A<=k,H=O.slice(B?1:0),Q=T!=null?[].concat(f(H),[T]):H;return(0,i.newHistory)(Q,v,[],D)}function g(w,v){if(v<0||v>=w.future.length)return w;var A=w.past,D=w.future,k=w._latestUnfiltered,O=[].concat(f(A),[k],f(D.slice(0,v))),T=D[v],B=D.slice(v+1);return(0,i.newHistory)(O,T,B)}function y(w,v){if(v<0||v>=w.past.length)return w;var A=w.past,D=w.future,k=w._latestUnfiltered,O=A.slice(0,v),T=[].concat(f(A.slice(v+1)),[k],f(D)),B=A[v];return(0,i.newHistory)(O,B,T)}function b(w,v){return v>0?g(w,v-1):v<0?y(w,w.past.length+v):w}function x(w,v){return v.indexOf(w)>-1?w:!w}function C(w){var v=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};n.set(v.debug);var A=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},v,{initTypes:(0,i.parseActions)(v.initTypes,["@@redux-undo/INIT"]),clearHistoryType:(0,i.parseActions)(v.clearHistoryType,[r.ActionTypes.CLEAR_HISTORY])}),D=A.neverSkipReducer?function(O,T){for(var B=arguments.length,H=new Array(B>2?B-2:0),Q=2;Q<B;Q++)H[Q-2]=arguments[Q];return c({},O,{present:w.apply(void 0,[O.present,T].concat(H))})}:function(O){return O},k;return function(){var O=arguments.length>0&&arguments[0]!==void 0?arguments[0]:k,T=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};n.start(T,O);for(var B=O,H=arguments.length,Q=new Array(H>2?H-2:0),De=2;De<H;De++)Q[De-2]=arguments[De];if(!k)if(n.log("history is uninitialized"),O===void 0){var xn={type:"@@redux-undo/CREATE_HISTORY"},wn=w.apply(void 0,[O,xn].concat(Q));return B=h(wn,A.ignoreInitialState),n.log("do not set initialState on probe actions"),n.end(B),B}else(0,i.isHistory)(O)?(B=k=A.ignoreInitialState?O:(0,i.newHistory)(O.past,O.present,O.future),n.log("initialHistory initialized: initialState is a history",k)):(B=k=h(O,A.ignoreInitialState),n.log("initialHistory initialized: initialState is not a history",k));var _;switch(T.type){case void 0:return B;case A.undoType:return _=b(B,-1),n.log("perform undo"),n.end(_),D.apply(void 0,[_,T].concat(Q));case A.redoType:return _=b(B,1),n.log("perform redo"),n.end(_),D.apply(void 0,[_,T].concat(Q));case A.jumpToPastType:return _=y(B,T.index),n.log("perform jumpToPast to ".concat(T.index)),n.end(_),D.apply(void 0,[_,T].concat(Q));case A.jumpToFutureType:return _=g(B,T.index),n.log("perform jumpToFuture to ".concat(T.index)),n.end(_),D.apply(void 0,[_,T].concat(Q));case A.jumpType:return _=b(B,T.index),n.log("perform jump to ".concat(T.index)),n.end(_),D.apply(void 0,[_,T].concat(Q));case x(T.type,A.clearHistoryType):return _=h(B.present,A.ignoreInitialState),n.log("perform clearHistory"),n.end(_),D.apply(void 0,[_,T].concat(Q));default:if(_=w.apply(void 0,[B.present,T].concat(Q)),A.initTypes.some(function(kd){return kd===T.type}))return n.log("reset history due to init action"),n.end(k),k;if(B._latestUnfiltered===_)return B;var Qe=typeof A.filter=="function"&&!A.filter(T,_,B);if(Qe){var Zo=(0,i.newHistory)(B.past,_,B.future,B.group);return A.syncFilter||(Zo._latestUnfiltered=B._latestUnfiltered),n.log("filter ignored action, not storing it in past"),n.end(Zo),Zo}var qo=A.groupBy(T,_,B);if(qo!=null&&qo===B.group){var fc=(0,i.newHistory)(B.past,_,B.future,B.group);return n.log("groupBy grouped the action with the previous action"),n.end(fc),fc}return B=m(B,_,A.limit,qo),n.log("inserted new state into history"),n.end(B),B}}}})(zv),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=mr,n=xt,r=i(zv);function i(o){return o&&o.__esModule?o:{default:o}}}(Ht);const XI=NI(Ht);function Xs(t){return t.split("-")[0]}function sd(t){return t.split("-")[1]}function cd(t){return["top","bottom"].includes(Xs(t))?"x":"y"}function Rv(t){return t==="y"?"height":"width"}function jv(t,e,n){let{reference:r,floating:i}=t;const o=r.x+r.width/2-i.width/2,a=r.y+r.height/2-i.height/2,s=cd(e),c=Rv(s),u=r[c]/2-i[c]/2,f=s==="x";let l;switch(Xs(e)){case"top":l={x:o,y:r.y-i.height};break;case"bottom":l={x:o,y:r.y+r.height};break;case"right":l={x:r.x+r.width,y:a};break;case"left":l={x:r.x-i.width,y:a};break;default:l={x:r.x,y:r.y}}switch(sd(e)){case"start":l[s]-=u*(n&&f?-1:1);break;case"end":l[s]+=u*(n&&f?-1:1)}return l}const ZI=async(t,e,n)=>{const{placement:r="bottom",strategy:i="absolute",middleware:o=[],platform:a}=n,s=await(a.isRTL==null?void 0:a.isRTL(e));let c=await a.getElementRects({reference:t,floating:e,strategy:i}),{x:u,y:f}=jv(c,r,s),l=r,d={};for(let p=0;p<o.length;p++){const{name:h,fn:m}=o[p],{x:g,y,data:b,reset:x}=await m({x:u,y:f,initialPlacement:r,placement:l,strategy:i,middlewareData:d,rects:c,platform:a,elements:{reference:t,floating:e}});u=g??u,f=y??f,d={...d,[h]:{...d[h],...b}},x&&(typeof x=="object"&&(x.placement&&(l=x.placement),x.rects&&(c=x.rects===!0?await a.getElementRects({reference:t,floating:e,strategy:i}):x.rects),{x:u,y:f}=jv(c,l,s)),p=-1)}return{x:u,y:f,placement:l,strategy:i,middlewareData:d}};function qI(t){return typeof t!="number"?function(e){return{top:0,right:0,bottom:0,left:0,...e}}(t):{top:t,right:t,bottom:t,left:t}}function Zs(t){return{...t,top:t.y,left:t.x,right:t.x+t.width,bottom:t.y+t.height}}async function KI(t,e){var n;e===void 0&&(e={});const{x:r,y:i,platform:o,rects:a,elements:s,strategy:c}=t,{boundary:u="clippingAncestors",rootBoundary:f="viewport",elementContext:l="floating",altBoundary:d=!1,padding:p=0}=e,h=qI(p),m=s[d?l==="floating"?"reference":"floating":l],g=Zs(await o.getClippingRect({element:(n=await(o.isElement==null?void 0:o.isElement(m)))==null||n?m:m.contextElement||await(o.getDocumentElement==null?void 0:o.getDocumentElement(s.floating)),boundary:u,rootBoundary:f,strategy:c})),y=Zs(o.convertOffsetParentRelativeRectToViewportRelativeRect?await o.convertOffsetParentRelativeRectToViewportRelativeRect({rect:l==="floating"?{...a.floating,x:r,y:i}:a.reference,offsetParent:await(o.getOffsetParent==null?void 0:o.getOffsetParent(s.floating)),strategy:c}):a[l]);return{top:g.top-y.top+h.top,bottom:y.bottom-g.bottom+h.bottom,left:g.left-y.left+h.left,right:y.right-g.right+h.right}}const JI={left:"right",right:"left",bottom:"top",top:"bottom"};function qs(t){return t.replace(/left|right|bottom|top/g,e=>JI[e])}function $I(t,e,n){n===void 0&&(n=!1);const r=sd(t),i=cd(t),o=Rv(i);let a=i==="x"?r===(n?"end":"start")?"right":"left":r==="start"?"bottom":"top";return e.reference[o]>e.floating[o]&&(a=qs(a)),{main:a,cross:qs(a)}}const ek={start:"end",end:"start"};function Uv(t){return t.replace(/start|end/g,e=>ek[e])}["top","right","bottom","left"].reduce((t,e)=>t.concat(e,e+"-start",e+"-end"),[]);const Hv=function(t){return t===void 0&&(t={}),{name:"flip",options:t,async fn(e){var n;const{placement:r,middlewareData:i,rects:o,initialPlacement:a,platform:s,elements:c}=e,{mainAxis:u=!0,crossAxis:f=!0,fallbackPlacements:l,fallbackStrategy:d="bestFit",flipAlignment:p=!0,...h}=t,m=Xs(r),g=l||(m===a||!p?[qs(a)]:function(D){const k=qs(D);return[Uv(D),k,Uv(k)]}(a)),y=[a,...g],b=await KI(e,h),x=[];let C=((n=i.flip)==null?void 0:n.overflows)||[];if(u&&x.push(b[m]),f){const{main:D,cross:k}=$I(r,o,await(s.isRTL==null?void 0:s.isRTL(c.floating)));x.push(b[D],b[k])}if(C=[...C,{placement:r,overflows:x}],!x.every(D=>D<=0)){var w,v;const D=((w=(v=i.flip)==null?void 0:v.index)!=null?w:0)+1,k=y[D];if(k)return{data:{index:D,overflows:C},reset:{placement:k}};let O="bottom";switch(d){case"bestFit":{var A;const T=(A=C.map(B=>[B,B.overflows.filter(H=>H>0).reduce((H,Q)=>H+Q,0)]).sort((B,H)=>B[1]-H[1])[0])==null?void 0:A[0].placement;T&&(O=T);break}case"initialPlacement":O=a}if(r!==O)return{reset:{placement:O}}}return{}}}},tk=function(t){return t===void 0&&(t=0),{name:"offset",options:t,async fn(e){const{x:n,y:r}=e,i=await async function(o,a){const{placement:s,platform:c,elements:u}=o,f=await(c.isRTL==null?void 0:c.isRTL(u.floating)),l=Xs(s),d=sd(s),p=cd(s)==="x",h=["left","top"].includes(l)?-1:1,m=f&&p?-1:1,g=typeof a=="function"?a(o):a;let{mainAxis:y,crossAxis:b,alignmentAxis:x}=typeof g=="number"?{mainAxis:g,crossAxis:0,alignmentAxis:null}:{mainAxis:0,crossAxis:0,alignmentAxis:null,...g};return d&&typeof x=="number"&&(b=d==="end"?-1*x:x),p?{x:b*m,y:y*h}:{x:y*h,y:b*m}}(e,t);return{x:n+i.x,y:r+i.y,data:i}}}};function Gv(t){return t&&t.document&&t.location&&t.alert&&t.setInterval}function Gt(t){if(t==null)return window;if(!Gv(t)){const e=t.ownerDocument;return e&&e.defaultView||window}return t}function Bo(t){return Gt(t).getComputedStyle(t)}function Qt(t){return Gv(t)?"":t?(t.nodeName||"").toLowerCase():""}function Qv(){const t=navigator.userAgentData;return t!=null&&t.brands?t.brands.map(e=>e.brand+"/"+e.version).join(" "):navigator.userAgent}function Ct(t){return t instanceof Gt(t).HTMLElement}function ai(t){return t instanceof Gt(t).Element}function ud(t){return typeof ShadowRoot>"u"?!1:t instanceof Gt(t).ShadowRoot||t instanceof ShadowRoot}function Ks(t){const{overflow:e,overflowX:n,overflowY:r}=Bo(t);return/auto|scroll|overlay|hidden/.test(e+r+n)}function nk(t){return["table","td","th"].includes(Qt(t))}function Yv(t){const e=/firefox/i.test(Qv()),n=Bo(t);return n.transform!=="none"||n.perspective!=="none"||n.contain==="paint"||["transform","perspective"].includes(n.willChange)||e&&n.willChange==="filter"||e&&!!n.filter&&n.filter!=="none"}function Vv(){return!/^((?!chrome|android).)*safari/i.test(Qv())}const _v=Math.min,Oo=Math.max,Js=Math.round;function yr(t,e,n){var r,i,o,a;e===void 0&&(e=!1),n===void 0&&(n=!1);const s=t.getBoundingClientRect();let c=1,u=1;e&&Ct(t)&&(c=t.offsetWidth>0&&Js(s.width)/t.offsetWidth||1,u=t.offsetHeight>0&&Js(s.height)/t.offsetHeight||1);const f=ai(t)?Gt(t):window,l=!Vv()&&n,d=(s.left+(l&&(r=(i=f.visualViewport)==null?void 0:i.offsetLeft)!=null?r:0))/c,p=(s.top+(l&&(o=(a=f.visualViewport)==null?void 0:a.offsetTop)!=null?o:0))/u,h=s.width/c,m=s.height/u;return{width:h,height:m,top:p,right:d+h,bottom:p+m,left:d,x:d,y:p}}function vn(t){return(e=t,(e instanceof Gt(e).Node?t.ownerDocument:t.document)||window.document).documentElement;var e}function $s(t){return ai(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function Wv(t){return yr(vn(t)).left+$s(t).scrollLeft}function rk(t,e,n){const r=Ct(e),i=vn(e),o=yr(t,r&&function(c){const u=yr(c);return Js(u.width)!==c.offsetWidth||Js(u.height)!==c.offsetHeight}(e),n==="fixed");let a={scrollLeft:0,scrollTop:0};const s={x:0,y:0};if(r||!r&&n!=="fixed")if((Qt(e)!=="body"||Ks(i))&&(a=$s(e)),Ct(e)){const c=yr(e,!0);s.x=c.x+e.clientLeft,s.y=c.y+e.clientTop}else i&&(s.x=Wv(i));return{x:o.left+a.scrollLeft-s.x,y:o.top+a.scrollTop-s.y,width:o.width,height:o.height}}function Xv(t){return Qt(t)==="html"?t:t.assignedSlot||t.parentNode||(ud(t)?t.host:null)||vn(t)}function Zv(t){return Ct(t)&&getComputedStyle(t).position!=="fixed"?t.offsetParent:null}function ld(t){const e=Gt(t);let n=Zv(t);for(;n&&nk(n)&&getComputedStyle(n).position==="static";)n=Zv(n);return n&&(Qt(n)==="html"||Qt(n)==="body"&&getComputedStyle(n).position==="static"&&!Yv(n))?e:n||function(r){let i=Xv(r);for(ud(i)&&(i=i.host);Ct(i)&&!["html","body"].includes(Qt(i));){if(Yv(i))return i;i=i.parentNode}return null}(t)||e}function qv(t){if(Ct(t))return{width:t.offsetWidth,height:t.offsetHeight};const e=yr(t);return{width:e.width,height:e.height}}function Kv(t){const e=Xv(t);return["html","body","#document"].includes(Qt(e))?t.ownerDocument.body:Ct(e)&&Ks(e)?e:Kv(e)}function Jv(t,e){var n;e===void 0&&(e=[]);const r=Kv(t),i=r===((n=t.ownerDocument)==null?void 0:n.body),o=Gt(r),a=i?[o].concat(o.visualViewport||[],Ks(r)?r:[]):r,s=e.concat(a);return i?s:s.concat(Jv(a))}function $v(t,e,n){return e==="viewport"?Zs(function(r,i){const o=Gt(r),a=vn(r),s=o.visualViewport;let c=a.clientWidth,u=a.clientHeight,f=0,l=0;if(s){c=s.width,u=s.height;const d=Vv();(d||!d&&i==="fixed")&&(f=s.offsetLeft,l=s.offsetTop)}return{width:c,height:u,x:f,y:l}}(t,n)):ai(e)?function(r,i){const o=yr(r,!1,i==="fixed"),a=o.top+r.clientTop,s=o.left+r.clientLeft;return{top:a,left:s,x:s,y:a,right:s+r.clientWidth,bottom:a+r.clientHeight,width:r.clientWidth,height:r.clientHeight}}(e,n):Zs(function(r){var i;const o=vn(r),a=$s(r),s=(i=r.ownerDocument)==null?void 0:i.body,c=Oo(o.scrollWidth,o.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),u=Oo(o.scrollHeight,o.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0);let f=-a.scrollLeft+Wv(r);const l=-a.scrollTop;return Bo(s||o).direction==="rtl"&&(f+=Oo(o.clientWidth,s?s.clientWidth:0)-c),{width:c,height:u,x:f,y:l}}(vn(t)))}function ik(t){const e=Jv(t),n=["absolute","fixed"].includes(Bo(t).position)&&Ct(t)?ld(t):t;return ai(n)?e.filter(r=>ai(r)&&function(i,o){const a=o==null||o.getRootNode==null?void 0:o.getRootNode();if(i!=null&&i.contains(o))return!0;if(a&&ud(a)){let s=o;do{if(s&&i===s)return!0;s=s.parentNode||s.host}while(s)}return!1}(r,n)&&Qt(r)!=="body"):[]}const ok={getClippingRect:function(t){let{element:e,boundary:n,rootBoundary:r,strategy:i}=t;const o=[...n==="clippingAncestors"?ik(e):[].concat(n),r],a=o[0],s=o.reduce((c,u)=>{const f=$v(e,u,i);return c.top=Oo(f.top,c.top),c.right=_v(f.right,c.right),c.bottom=_v(f.bottom,c.bottom),c.left=Oo(f.left,c.left),c},$v(e,a,i));return{width:s.right-s.left,height:s.bottom-s.top,x:s.left,y:s.top}},convertOffsetParentRelativeRectToViewportRelativeRect:function(t){let{rect:e,offsetParent:n,strategy:r}=t;const i=Ct(n),o=vn(n);if(n===o)return e;let a={scrollLeft:0,scrollTop:0};const s={x:0,y:0};if((i||!i&&r!=="fixed")&&((Qt(n)!=="body"||Ks(o))&&(a=$s(n)),Ct(n))){const c=yr(n,!0);s.x=c.x+n.clientLeft,s.y=c.y+n.clientTop}return{...e,x:e.x-a.scrollLeft+s.x,y:e.y-a.scrollTop+s.y}},isElement:ai,getDimensions:qv,getOffsetParent:ld,getDocumentElement:vn,getElementRects:t=>{let{reference:e,floating:n,strategy:r}=t;return{reference:rk(e,ld(n),r),floating:{...qv(n),x:0,y:0}}},getClientRects:t=>Array.from(t.getClientRects()),isRTL:t=>Bo(t).direction==="rtl"},ak=(t,e,n)=>ZI(t,e,{platform:ok,...n});let St;const Fo=[],fd=xs(t=>t(),150,!1),dd={type:"divider"};function Po(t){if((t==null?void 0:t.type)=="contextmenu"){t.preventDefault();return}St&&(St.remove(),St=void 0,document.body.classList.remove(Yn))}function e2(t){var e;if(!(t<1)){for(let n=t;n<Fo.length;n++)(e=Fo[n])==null||e.remove(),Fo[n]=void 0;for(const n of Fo[t-1].querySelectorAll("li.active"))n.classList.remove("active")}}const sk=()=>E`<li class="menu-divider"></li>`,ck=t=>E`<li class="menu-header">${t.label||"-"}</li>`,uk=(t,e)=>E`<li><a class="submenu-item" @click="${n=>n.stopPropagation()}" @mouseup="${n=>n.stopPropagation()}" @mouseenter="${n=>fd(()=>{const r=n.target.closest("li");dk(t.submenu,r,e+1),n.stopPropagation()})}" @mouseleave="${()=>fd(()=>e2(e+1))}"><span>${t.label}</span></a></li>`,lk=t=>E`<li><a class="choice-item" @mouseup="${()=>{Po(),t.callback()}}"><span>${t.icon?K(t.icon).node[0]:""} ${t.label}</span> ${t.shortcut?E`<span class="kbd-shortcut">${t.shortcut}</span>`:z} </a>${t.ellipsisCallback?E`<a class="menu-ellipsis" @click="${t.ellipsisCallback}">${K(v6).node[0]}</a>`:z}</li>`,fk=t=>E`<li><span class="disabled-item">${t.icon?K(t.icon).node[0]:""} ${t.label||"-"}</span></li>`;function t2(t,e=1){switch(t.type){case"divider":return sk();case"header":return ck(t);default:return t.submenu?uk(t,e):t.callback?lk(t):fk(t)}}function dk(t,e,n){n2(t,e,n,"right-start"),e.classList.add("active")}function n2(t,e,n,r){const i=document.createElement("ul");i.classList.add("gs-context-menu"),i.addEventListener("mouseenter",()=>{fd(()=>{})}),Le(t.map(o=>t2(o,n)),i),St.appendChild(i),e2(n),Fo[n]=i,ak(e,i,{placement:r??"right-start",middleware:n?[Hv()]:[tk(2),Hv()]}).then(({x:o,y:a})=>{const s=i.querySelector(":scope > li");s&&(a-=s.getBoundingClientRect().top),i.style.left=`${o}px`,i.style.top=`${a}px`})}function r2(t,e,n){n??(n="bottom-start"),Po();const r=performance.now(),i=document.body;St=document.createElement("div"),St.classList.add("gs-context-menu-backdrop"),St.addEventListener("click",Po),St.addEventListener("contextmenu",Po),St.addEventListener("mouseup",()=>{performance.now()-r>500&&Po()},{once:!0}),i.appendChild(St),document.body.classList.add(Yn),n2(t.items,e,0,n)}function hd(t,e){r2(t,hk(e),"right-start"),e.preventDefault()}function hk(t){return{getBoundingClientRect(){return{width:0,height:0,x:t.clientX,y:t.clientY,top:t.clientY,left:t.clientX,right:t.clientX,bottom:t.clientY,toJSON:void 0}}}}const pd={NOMINAL:"nominal",ORDINAL:"ordinal",QUANTITATIVE:"quantitative"},ec="SAMPLE_ATTRIBUTE",i2="SAMPLE_NAME",pk=/^attribute-(.*)$/;class o2 extends Wr{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(ec,n=>this.children.map(this.getAttributeInfoFromView.bind(this)).find(r=>r&&r.name==n.specifier)),this.sampleView.compositeAttributeInfoSource.addAttributeInfoSource(i2,n=>a2),this.addInteractionEventListener("contextmenu",this.handleContextMenu.bind(this)),this.addInteractionEventListener("mousemove",(n,r)=>{var s;const i=r.target,o=this._findSampleForMouseEvent(n,r),a=i&&((s=this.getAttributeInfoFromView(i))==null?void 0:s.name)||void 0;if(o){const c=JSON.stringify([o.id,a]);this.context.updateTooltip(c,u=>Promise.resolve(this.sampleToTooltip(u)))}this._handleAttributeHighlight(a)}),Re([...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(){return{}}render(e,n,r={}){this.isVisible()&&super.render(e,n,{...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({from:n.backgroundOpacity,onUpdate:r=>{n.backgroundOpacity=r},easingFunction:Gg,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-this.sampleView.childCoords.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=[this.sampleView.makePeekMenuItem(),dd],a=this.getAttributeInfoFromView(n.target);if(a){const s=i.attributes[a.name];o.push(...id(E`Attribute: <strong>${a.name}</strong>`,a,s,this.sampleView))}else o.push(...id(E`Sample: <strong>${i.displayName}</strong>`,a2,i.id,this.sampleView));hd({items:o},r)}_setSamples(e){if(this.childCount)throw new Error("Children are already created!");this._createViews();const n=this.context.dataFlow;g1(this,n);const r=n.findDataSourceByKey(this);r.visit(o=>o.initialize());const i=[];this.visit(o=>{if(o instanceof be){const a=o.mark;a.initializeEncoders(),i.push(a.initializeGraphics().then(s=>a)),n.addObserver(s=>{a.initializeData(),a.updateGraphicsData()},o)}}),Promise.allSettled(i).then(o=>{for(const a of o)"value"in a?a.value.finalizeGraphicsInitialization():"reason"in a&&console.error(a.reason)}),r.publishData(e),this.visit(o=>{o.name.startsWith("title")&&n.findDataSourceByKey(o).load()})}_createViews(){const e=[];e.push(this.context.createView(gk(),this));for(const n of this.getAttributeNames()){const r=this.context.createView(this._createAttributeViewSpec(n),this);r.opacityFunction=i=>i*this._getAttributeOpacity(n),e.push(r)}this.setChildren(e),v1(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(Uh(i.map(o=>o.attributes[e]))){case"integer":case"number":r=pd.QUANTITATIVE;break;default:r=pd.NOMINAL}}return mk(e,{...n||{},type:r})}_findViewForAttribute(e){return this.children[this.getAttributeNames().indexOf(e)+1]}getAttributeInfoFromView(e){const n=e==null?void 0:e.name.match(pk);if(n){const r=e.getScaleResolution("color"),i=n[1];return{name:i,attribute:{type:ec,specifier:i},accessor:(o,a)=>a.sampleData.entities[o].attributes[i],type:r.type,scale:r.getScale(),title:E`<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=(s,c)=>yk(c)?this.getAttributeInfo(s).scale(c):"transparent",a=E`<table class="attributes">${Object.entries(i.attributes).map(([s,c])=>E`<tr class="${nf({hovered:s==r})}"><th>${s}</th><td>${D1(c)}</td><td class="color" .style="background-color: ${o(s,c)}"></td></tr>`)}</table>`;return E`<div class="title"><strong>${i.displayName||i.id}</strong></div>${a}`}getDefaultResolution(e,n){return"independent"}handleVerboseCommand(e){const n=e;for(const r of this.getAttributeNames()){const i=this.getAttributeInfo(r);if((i.type==Rl||i.type==jl)&&this.sampleView.getSamples().find(a=>a.attributes[i.name]==n)){const a=this.sampleView.actions.filterByNominal({attribute:{type:ec,specifier:r},values:[n]}),s=this.sampleView.provenance.getPresentState().lastAction,c=this.sampleView.actions.filterByNominal.match(s)&&!s.payload.remove&&s.payload.attribute.type==ec&&s.payload.attribute.specifier==r&&s.payload.values.length==1;return this.sampleView.provenance.storeHelper.dispatch(c?[Ht.ActionCreators.undo(),a]:a),!0}}return!1}isPickingSupported(){return!1}}function mk(t,e){const n=`attributes["${t}"]`,r={name:`attribute-${t}`,title:{text:t,orient:"bottom",align:"right",baseline:"middle",offset:5,angle:-90,dy:-.5,fontSize:11},visible:e.visible??!0,width:e.width??10,transform:[{type:"filter",expr:`datum.${n} != null`}],mark:{type:"rect",xOffset:-.5},encoding:{facetIndex:{field:"indexNumber"},color:{field:n,type:e.type,scale:e.scale}},opacity:1};return e.barScale&&e.type==pd.QUANTITATIVE&&(r.encoding.x={field:`attributes["${t}"]`,type:e.type,scale:e.barScale,axis:null}),r}function gk(){return{name:"metadata-sample-name",title:{text:"Sample name",orient:"bottom",anchor:"start",offset:5,fontSize:11},width:140,mark:{type:"text",align:"left",baseline:"middle",size:11,flushY:!1},encoding:{facetIndex:{field:"indexNumber"},x:{value:0},x2:{value:1},y:{value:0},y2:{value:1},text:{field:"displayName"}}}}function yk(t){return t!==""&&!(typeof t=="number"&&isNaN(t))&&t!==null}const a2=Object.freeze({name:"sample",attribute:{type:i2},accessor:t=>t,type:"identifier",scale:void 0});class vk extends Ot{constructor(e){super({title:{text:"Groups",orient:"none"},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:"_title",expr:"datum.title || datum.name"},{type:"formula",as:"_NA",expr:"datum._title === null"},{type:"formula",as:"_title",expr:"datum._title !== null ? datum._title: 'NA'"}],encoding:{x:{field:"_depth",type:"ordinal",scale:{align:0,padding:.2272727},axis:null},y:{field:"_y1",type:"nominal",scale:{type:"ordinal",domain:_t(500)},axis:null},y2:{field:"_y2"}},layer:[{title:"Group",mark:{type:"rect",clip:!0,color:"#e8e8e8",cornerRadiusBottomLeft:14,cornerRadiusTopLeft:14}},{mark:{type:"text",clip:!0,angle:-90,paddingY:5,tooltip:null},encoding:{text:{field:"_title"},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()}),this.addInteractionEventListener("contextmenu",(n,r)=>{const i=r.uiEvent,o=this.context.getCurrentHover();if(!o)return;const a=o.datum._rawGroup;let s;for(const l of rd(this.sampleView.sampleHierarchy.rootGroup))if(l.at(-1)===a){s=l.slice(1);break}const c=e.actions.removeGroup({path:s.map(l=>l.name)}),u=e.provenance.getActionInfo(c),f=e.provenance.storeHelper.getDispatcher();hd({items:[{label:u.title,icon:u.icon,callback:()=>f(c)}]},i)})}updateRange(){var o,a;const e=(o=this.sampleView.getLocations())==null?void 0:o.groups;if(!(e!=null&&e.length))return;const n=((a=this.sampleView)==null?void 0:a.childCoords.height)??0,r=this.getScaleResolution("y"),i=[];for(const s of e)i.push(1-(s.locSize.location+s.locSize.size)/n),i.push(1-s.locSize.location/n);r.getScale().range(i),this.context.glHelper.createRangeTexture(r,!0)}updateGroups(){var i;const e=((i=this.sampleView.getLocations())==null?void 0:i.groups)??[],n=this.context.dataFlow.findDataSourceByKey(this);if(!n)return;const r=e.map(o=>({_index:o.key.index,_depth:o.key.depth,_rawGroup:o.key.group,attribute:o.key.attributeLabel,name:o.key.group.name,...o.key.group.name!=o.key.group.title?{title:o.key.group.title}:{},n:o.key.n}));n.publishData(r),this.getScaleResolution("x").reconfigure(),this.getScaleResolution("y").reconfigure(),e.length&&this.updateRange(),Re([...this.getAncestors()]).visit(o=>ho(o,"size"))}}class bk{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 tc(t,e,n){let r=n&&t(n);return i=>{const o=t(i);o!==r&&(e(o,r),r=o)}}function s2(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=d=>Re(d),a=t.map(d=>({path:d,sampleGroup:o(d),samples:o(d).samples})).filter(d=>d.samples.length),s=n?d=>({px:d.length*n+i,grow:0}):d=>({px:i,grow:d.length}),c=[];yo(a.map(d=>s(d.samples)),e,{spacing:r}).forEach((d,p)=>{c.push({key:a[p].path,locSize:d})});const u=[];for(const[d,p]of a.entries()){const h={grow:1},m=p.samples;yo(m.map(g=>h),Math.max(0,c[d].locSize.size-i),{offset:c[d].locSize.location+i}).forEach((g,y)=>{const{size:b,location:x}=g,C=b*.1*Wg(15,22,b);g.location=x+C,g.size=b-2*C,u.push({key:m[y],locSize:g})})}function*f(){const d=[];for(const p of c){const h=p.key,m=Re(h);for(;d.length<=h.length&&d.length&&h[d.length-1]!=d[d.length-1].group;)yield d.pop();for(let g=0;g<d.length;g++){const y=d[g];y.locSize.size=p.locSize.location-y.locSize.location+p.locSize.size}for(let g=d.length;g<h.length;g++)d.push({group:h[g],locSize:{...p.locSize},depth:d.length,n:0});for(const g of d)g.n+=m.samples.length}for(;d.length;)yield d.pop()}const l=[...f()].sort((d,p)=>d.depth-p.depth).map((d,p)=>({key:{index:p,group:d.group,depth:d.depth,n:d.n,attributeLabel:void 0},locSize:d.locSize}));return{samples:u,summaries:c,groups:l}}function Ak(t,e){return e.find(n=>Dg(n.locSize,t))}const c2="VALUE_AT_LOCUS",u2=10;class md extends nr{constructor(n,r,i,o,a){super(n,r,i,o);te(this,lc);dc(this,"_peekState",0);this.provenance=a,this.spec=n,this.stickySummaries=n.stickySummaries??!0,this.compositeAttributeInfoSource=new bk,this.child=r.createView(n.spec,this,"sample-facets"),this.summaryViews=new Wr({vconcat:[]},r,this,"sampleSummaries"),this.child.visit(f=>{f instanceof be&&this.summaryViews.setChildren(f.sampleAggregateViews)}),this.childCoords=dn.ZERO,this.facetTexture=void 0,this.facetTextureData=void 0,this.peripheryView=new Wr({title:"Sidebar",resolve:{scale:{default:"independent"},axis:{default:"independent"}},hconcat:[],spacing:0},r,this,"sample-sidebar"),this.peripheryCoords=dn.ZERO,this.groupPanel=new vk(this),this.attributePanel=new o2(this),this.peripheryView.setChildren([this.groupPanel,this.attributePanel]),this.child.addInteractionEventListener("contextmenu",this._handleContextMenu.bind(this)),this.provenance.storeHelper.subscribe(tc(f=>td(f).rootGroup,f=>{this._locations=void 0,this.groupPanel.updateGroups(),this._peekState=0,this.context.requestLayoutReflow(),this.context.animator.requestRender()})),this.provenance.storeHelper.subscribe(tc(f=>td(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(c2,f=>{var x;const l=f.specifier,d=this.findDescendantByName(l.view);let p;if(le(l.locus))p=l.locus;else{const C=this.getScaleResolution("x").getGenome();if(C)p=C.toContinuous(l.locus.chrom,l.locus.pos);else throw new Error("Encountered a complex locus but no genome is available!")}const h=C=>{var w;return(w=d.mark.findDatumAt(C,p))==null?void 0:w[l.field]},[m,g]=Object.entries(d.getEncoding()).find(([C,w])=>"field"in w&&w.field==l.field),y=m?(x=d.getScaleResolution(m))==null?void 0:x.getScale():void 0;return{name:l.field,attribute:f,title:E`<em class="attribute">${l.field}</em> <span class="viewTitle">(${d.getTitleText()??d.name})</span> at <span class="locus">${l2(l.locus)}</span>`,accessor:h,type:"type"in g?g.type:void 0,scale:y}}),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-this.childCoords.y}),this.addInteractionEventListener("wheel",(f,l)=>{const d=l.uiEvent;this._peekState&&!d.ctrlKey&&(this._scrollOffset=ps(this._scrollOffset+d.deltaY,0,this._scrollableHeight-this.childCoords.height),this.groupPanel.updateRange(),this.context.animator.requestRender(),l.uiEvent={type:d.type,deltaX:d.deltaX,preventDefault:d.preventDefault.bind(d)})},!0),r.addKeyboardListener("keydown",f=>{f.code=="KeyE"&&!f.repeat&&this.togglePeek()}),r.addKeyboardListener("keyup",f=>{f.code=="KeyE"&&this.togglePeek(!1)});const s=f=>this.compositeAttributeInfoSource.getAttributeInfo(f),c=bI(s);this.provenance.addReducer(c.name,c.reducer),this.provenance.addActionInfoSource(f=>xI(f,s)),this.actions=c.actions;const u=V9(f=>{var l;return(l=f.sampleData)==null?void 0:l.entities},f=>f&&Object.values(f));this.getSamples=()=>u(this.sampleHierarchy),this.spec.samples.data&&this.loadSamples()}getOverhang(){let n=this.peripheryView.isVisible()?this.peripheryView.getSize().width.px:0;return n&&(n+=u2),new Ke(0,0,0,n)}*[Symbol.iterator](){yield this.child,yield this.peripheryView}replaceChild(n,r){const i=r;if(n===this.child)this.child=i;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:n,collector:r}=y5(d1(this.spec.samples.data,this.getBaseUrl()),new xk);r.observers.push(o=>{const a=o.getData();this.provenance.storeHelper.dispatch(this.actions.setSamples({samples:a}))});const i="samples "+this.getPathString();this.context.dataFlow.addDataSource(n,i)}extractSamplesFromData(){if(this.getSamples())return;const n=this.getScaleResolution("sample");if(n){const r=n.getDataDomain().map((i,o)=>({id:i,displayName:i,indexNumber:o,attributes:[]}));this.provenance.storeHelper.dispatch(this.actions.setSamples({samples:r}))}else throw new Error("No explicit sample data nor sample channels found!")}get sampleHierarchy(){return this.provenance.getPresentState()[ii]}get leafSamples(){return nd(this.sampleHierarchy).map(r=>r.at(-1)).map(r=>r.samples).flat()}getLocations(){var n,r,i;if(!this._locations){if(!((n=this.childCoords)!=null&&n.height))return;const o=this.sampleHierarchy,a=nd(o),s=[null,...o.groupMetadata],c=(((r=this.summaryViews)==null?void 0:r.isVisible())&&((i=this.summaryViews)==null?void 0:i.getSize().height.px))??0,u=s2(a,{viewHeight:this.childCoords.height,groupSpacing:5,summaryHeight:c}),f=s2(a,{sampleHeight:35,groupSpacing:15,summaryHeight:c}),l=()=>-this._scrollOffset,d=()=>this._peekState;this._scrollableLocations=f,this._scrollableHeight=f.summaries.map(g=>g.locSize.location+g.locSize.size).reduce((g,y)=>Math.max(g,y),0);const p=(g,y)=>{const b=[];for(let x=0;x<g.length;x++){const C=g[x].key;b.push({key:C,locSize:SM(g[x].locSize,EM(y[x].locSize,l),d)})}return b},h=p(u.groups,f.groups),m=document.createElement("div");h.forEach(g=>{if(g.key.depth==0)return;const y=s[g.key.depth].attribute,b=this.compositeAttributeInfoSource.getAttributeInfo(y).title;b?ne(b)?g.key.attributeLabel=b:(Le(b,m),g.key.attributeLabel=m.textContent.replace(/\s+/g," ").trim()):g.key.attributeLabel="unknown"}),this._locations={samples:p(u.samples,f.samples),summaries:p(u.summaries,f.summaries),groups:h}}return this._locations}getSampleAt(n){const r=Ak(n,this.getLocations().samples);if(r)return this.sampleHierarchy.sampleData.entities[r.key]}getSummaryAt(n){const r=this.getLocations().summaries,i=r.findIndex(o=>Dg(o.locSize,n));return i>=0?{index:i,location:r[i]}:void 0}_clipBySummary(n){if(this.stickySummaries&&this.summaryViews.childCount){const r=this.summaryViews.getSize().height.px;return n.modify({y:()=>n.y+r,height:()=>n.height-r})}}renderChild(n,r,i={}){const o=1/r.height,a=()=>o,s=this._clipBySummary(r);for(const c of this.getLocations().samples)this.child.render(n,r,{...i,sampleFacetRenderingOptions:{locSize:DM(c.locSize,a)},facetId:[c.key],clipRect:s})}renderSummaries(n,r,i={}){i={...i,clipRect:r};const o=this.summaryViews.getSize().height.px;for(const[a,s]of this.getLocations().summaries.entries()){const c=()=>{const u=s.locSize.location;let f=r.y+u;return this.stickySummaries?f+ps(-u,0,s.locSize.size-o):f};this.summaryViews.render(n,r.modify({y:c,height:o}),{...i,facetId:[a]})}}render(n,r,i={}){if(!this.isVisible())return;n.pushView(this,r);const o=yo([this.peripheryView.isVisible()?this.peripheryView.getSize().width:{px:0},{grow:1}],r.width,{spacing:u2}),a=s=>r.modify({x:s.location+r.x,width:s.size});this.peripheryCoords=a(o[0]),this.childCoords=a(o[1]),this.peripheryView.render(n,this.peripheryCoords,i),this.renderChild(n,this.childCoords,i),this.renderSummaries(n,this.childCoords,i),n.popView(this)}onBeforeRender(){this._updateFacetTexture()}_updateFacetTexture(){var o;const n=this.facetTextureData;n.fill(0);const r=(o=this.sampleHierarchy.sampleData)==null?void 0:o.entities;if(r){const a=this.getLocations().samples,s=this.childCoords.height;for(const c of a){const u=r[c.key].indexNumber;n[u*2+0]=c.locSize.location/s,n[u*2+1]=c.locSize.size/s}}const i=this.context.glHelper.gl;this.facetTexture=mo(i,{internalFormat:i.RG32F,format:i.RG,height:1},n,this.facetTexture)}togglePeek(n){var i;if(this._peekState>0&&this._peekState<1||n!==void 0&&n==!!this._peekState)return;const r={requestAnimationFrame:o=>this.context.animator.requestTransition(o),onUpdate:o=>{this._peekState=Math.pow(o,2),this.groupPanel.updateRange(),this.context.animator.requestRender()},from:this._peekState};if(this._peekState==0){const o=this._lastMouseY,a=(i=this.getSampleAt(o))==null?void 0:i.id;let s;if(a)s=(u=>u.location+u.size/2)(this._scrollableLocations.samples.find(u=>u.key==a).locSize);else{const c=this.getSummaryAt(o);c&&(s=this._scrollableLocations.summaries[c.index].locSize.location-(c.location.locSize.location-o))}s?this._scrollOffset=s-o:this._scrollOffset=(this._scrollableHeight-this.childCoords.height)/2,this._scrollableHeight>this.childCoords.height?As({...r,to:1,duration:500,easingFunction:u8}):As({...r,from:0,to:1,duration:300,easingFunction:u=>(1-Math.pow(u*2-1,2))*.5})}else As({...r,to:0,duration:400,easingFunction:s8})}makePeekMenuItem(){return{...this._peekState==0?{label:"Open closeup",callback:()=>this.togglePeek(!0),icon:T6}:{label:"Close closeup",callback:()=>this.togglePeek(!1),icon:I6},shortcut:"E"}}_handleContextMenu(n,r){const i=r.uiEvent,o=this.childCoords.normalizePoint(r.point.x,r.point.y).x,a=this.getScaleResolution("x").invertToComplex(o),s=A1([...this.getAncestors()].at(-1)),c=w5(this.child).filter(l=>!["sample","x","x2"].includes(l.channel)).filter(l=>["rect","rule"].includes(l.view.getMarkType())).filter(l=>s.has(l.view.name));let u=[this.makePeekMenuItem(),dd,{label:`Locus: ${l2(a)}`,type:"header"},dd],f="";for(const[l,d]of c.entries()){const p={view:d.view.name,field:d.field,locus:a},h=this.compositeAttributeInfoSource.getAttributeInfo({type:c2,specifier:p}),m=d.view.getTitleText()??d.view.spec.name;m!=f&&(l>0&&u.push({type:"divider"}),u.push({label:m,type:"header"}),f=m),u.push({label:d.field,submenu:id(null,h,void 0,this)})}hd({items:u},i)}getSampleFacetTexture(){return this.facetTexture}propagateInteractionEvent(n){this.handleInteractionEvent(void 0,n,!0),!n.stopped&&(this.childCoords.containsPoint(n.point.x,n.point.y)&&(this.child.propagateInteractionEvent(n),r1(n,this.childCoords,r=>se(this,lc,X2).call(this,this.childCoords,this.child,r),this.context.getCurrentHover())),this.peripheryCoords.containsPoint(n.point.x,n.point.y)&&this.peripheryView.propagateInteractionEvent(n),!n.stopped&&this.handleInteractionEvent(void 0,n,!1))}getDefaultResolution(n,r){switch(n){case"x":case"sample":return"shared";default:return"independent"}}}lc=new WeakSet,X2=function(n,r,i){const o=this.child.getScaleResolution("x");if(!o||!o.isZoomable())return;const a=n.normalizePoint(i.x,i.y),s=n.normalizePoint(i.x+i.xDelta,i.y+i.yDelta);o.zoom(2**i.zDelta,a.x,s.x-a.x),this.context.animator.requestRender()};function l2(t){return!le(t)&&"chrom"in t?$M(t):""+t}class xk extends ue{constructor(){super(),this.reset()}reset(){this._index=0}handle(e){this._propagate({id:e.sample,displayName:e.displayName||e.sample,indexNumber:this._index++,attributes:wk(e)})}}function wk(t){const e=Object.assign({},t);return delete e.sample,delete e.displayName,e}function Ck(t){return"samples"in t&&Pe(t.samples)&&"spec"in t&&Pe(t.spec)}const Sk=(t,e)=>e.some(n=>t instanceof n);let f2,d2;function Ek(){return f2||(f2=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])}function Dk(){return d2||(d2=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])}const h2=new WeakMap,gd=new WeakMap,p2=new WeakMap,yd=new WeakMap,vd=new WeakMap;function Mk(t){const e=new Promise((n,r)=>{const i=()=>{t.removeEventListener("success",o),t.removeEventListener("error",a)},o=()=>{n(bn(t.result)),i()},a=()=>{r(t.error),i()};t.addEventListener("success",o),t.addEventListener("error",a)});return e.then(n=>{n instanceof IDBCursor&&h2.set(n,t)}).catch(()=>{}),vd.set(e,t),e}function Tk(t){if(gd.has(t))return;const e=new Promise((n,r)=>{const i=()=>{t.removeEventListener("complete",o),t.removeEventListener("error",a),t.removeEventListener("abort",a)},o=()=>{n(),i()},a=()=>{r(t.error||new DOMException("AbortError","AbortError")),i()};t.addEventListener("complete",o),t.addEventListener("error",a),t.addEventListener("abort",a)});gd.set(t,e)}let bd={get(t,e,n){if(t instanceof IDBTransaction){if(e==="done")return gd.get(t);if(e==="objectStoreNames")return t.objectStoreNames||p2.get(t);if(e==="store")return n.objectStoreNames[1]?void 0:n.objectStore(n.objectStoreNames[0])}return bn(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 Ik(t){bd=t(bd)}function kk(t){return t===IDBDatabase.prototype.transaction&&!("objectStoreNames"in IDBTransaction.prototype)?function(e,...n){const r=t.call(Ad(this),e,...n);return p2.set(r,e.sort?e.sort():[e]),bn(r)}:Dk().includes(t)?function(...e){return t.apply(Ad(this),e),bn(h2.get(this))}:function(...e){return bn(t.apply(Ad(this),e))}}function Nk(t){return typeof t=="function"?kk(t):(t instanceof IDBTransaction&&Tk(t),Sk(t,Ek())?new Proxy(t,bd):t)}function bn(t){if(t instanceof IDBRequest)return Mk(t);if(yd.has(t))return yd.get(t);const e=Nk(t);return e!==t&&(yd.set(t,e),vd.set(e,t)),e}const Ad=t=>vd.get(t);function Lk(t,e,{blocked:n,upgrade:r,blocking:i,terminated:o}={}){const a=indexedDB.open(t,e),s=bn(a);return r&&a.addEventListener("upgradeneeded",c=>{r(bn(a.result),c.oldVersion,c.newVersion,bn(a.transaction))}),n&&a.addEventListener("blocked",()=>n()),s.then(c=>{o&&c.addEventListener("close",()=>o()),i&&c.addEventListener("versionchange",()=>i())}).catch(()=>{}),s}const Bk=["get","getKey","getAll","getAllKeys","count"],Ok=["put","add","delete","clear"],xd=new Map;function m2(t,e){if(!(t instanceof IDBDatabase&&!(e in t)&&typeof e=="string"))return;if(xd.get(e))return xd.get(e);const n=e.replace(/FromIndex$/,""),r=e!==n,i=Ok.includes(n);if(!(n in(r?IDBIndex:IDBObjectStore).prototype)||!(i||Bk.includes(n)))return;const o=async function(a,...s){const c=this.transaction(a,i?"readwrite":"readonly");let u=c.store;return r&&(u=u.index(s.shift())),(await Promise.all([u[n](...s),i&&c.done]))[0]};return xd.set(e,o),o}Ik(t=>({...t,get:(e,n,r)=>m2(e,n)||t.get(e,n,r),has:(e,n)=>!!m2(e,n)||t.has(e,n)}));class g2{isReadonly(){return!0}async put(e,n){this._checkReadonly()}async delete(e){this._checkReadonly()}async getNames(){return[]}async get(e){}_checkReadonly(){if(this.isReadonly())throw new Error("This bookmark")}}const zo="bookmarks";class Fk extends g2{constructor(e){super(),this.specId=e,this._db=void 0}async _getDB(){if(!this._db){const e=`GenomeSpy: ${this.specId}`;this._db=Lk(e,1,{upgrade(n,r,i,o){n.createObjectStore(zo,{keyPath:"name"})},blocked(){},blocking(){},terminated(){}})}return this._db}isReadonly(){return!1}async put(e,n){const i=(await this._getDB()).transaction(zo,"readwrite");try{n?(await i.store.delete(n),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(zo,e)}async getNames(){return(await this._getDB()).getAllKeys(zo)}async get(e){return(await this._getDB()).get(zo,e)}}/**
|
2155
2155
|
* @license
|
2156
2156
|
* Copyright 2017 Google LLC
|
2157
2157
|
* SPDX-License-Identifier: BSD-3-Clause
|
@@ -2163,7 +2163,7 @@ svg:not(:root).svg-inline--fa, svg:not(:host).svg-inline--fa {
|
|
2163
2163
|
* @license
|
2164
2164
|
* Copyright 2018 Google LLC
|
2165
2165
|
* SPDX-License-Identifier: BSD-3-Clause
|
2166
|
-
*/const Uk={},Hk=or(class extends qr{constructor(){super(...arguments),this.ot=Uk}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 Ae}else if(this.ot===e)return Ae;return this.ot=Array.isArray(e)?Array.from(e):e,this.render(e,n)}});class Gk extends yt{constructor(){super(),this.inputRef=b2(),this.app=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 genomeSpy(){return this.app.genomeSpy}get _inputField(){return this.inputRef.value}static get properties(){return{app:{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=x2(this.genomeSpy.viewRoot);e&&(this._genomeResolution=e,this._genome=this.genomeSpy.genomeStore.getGenome(),this.getDefaultValue=()=>this._genome.formatInterval(e.getDomain()),e.addEventListener("domain",xs(()=>this.requestUpdate(),60,!1)))}async searchViews(e){var r;const n=new Intl.Collator("en",{usage:"search",sensitivity:"base"});for(const i of this.genomeSpy.getSearchableViews()){const o=i.getAccessor("search"),a=i.getAccessor("x"),s=i.getAccessor("x2"),c=i.getScaleResolution("x");if(!(!a||!s||!(c!=null&&c.isZoomable()))){for(const u of((r=i.getCollector())==null?void 0:r.getData())??[])if(n.compare(o(u),e)===0){const f=mc([a(u),s(u)],null,1.2);return await c.zoomTo(f),!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 o2&&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){Qk(e,this._inputField).then(()=>{this._inputField.blur(),this.search(e)})}_getSearchHelp(){var i;const e=[];e.push(E`<p>Focus to a specific range. Examples:</p><ul><li>chr8</li><li>chr8:21,445,873</li><li>chr8:21,445,873-24,623,697</li><li>chr4:166,014,727-chr15:23,731,397</li></ul>`);for(const o of((i=this.genomeSpy)==null?void 0:i.getSearchableViews())||[]){const a=o.getTitleText()??o.spec.name,s=o.getAccessor("search"),c=s.fields.join(", "),u=Sg(3,o.getCollector().getData(),s);e.push(E`<p>Search <em>${a}</em> (${c}). Examples:</p><ul>${u.map(f=>E`<li>${f}</li>`)}</ul>`)}const n=this.app.getSampleView().attributePanel,r=n.getAttributeNames().map(o=>n.getAttributeInfo(o)).filter(o=>o.type=="nominal"||o.type=="ordinal").sort(()=>.5-Math.random()).map(o=>{var a;return[...((a=o.scale)==null?void 0:a.domain())??[]].sort(()=>.5-Math.random())[0]}).filter(o=>o!==void 0).slice(0,3);return r.length&&e.push(E`<p>Filter samples by categorical attributes. Examples:</p><ul>${r.map(o=>E`<li>${o}</li>`)}</ul>`),E`<div class="search-help" @click="${this._onSearchHelpClicked}">${e}</div>`}updated(e){this._focused&&this._inputField.select()}render(){return E`<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}" ${A2(this.inputRef)}> ${Hk([123],()=>this._getSearchHelp())}</div>`}}customElements.define("genome-spy-search-field",Gk);function Qk(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 x2(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,tr}}),e}const w2="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzIgMzIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEuNSI+PHBhdGggZD0iTTQuNyAyMS4ycy40IDIuMyAxLjMgMy42QzcgMjYgOS44IDI4IDkuOCAyOHMzLjQtMi42IDYuNC04LjVjMCAwIDEgLjEgMS45LS40LjktLjYuOC0uNCAxLTEuMiAwIDAgMi45LjUgNi42IDAgMi4xLS4zIDQuMy0xIDYuMi0yLjUgMCAwLTEuMS0xLjctMi41LTUuMS0uNS0xLjMtMi0xLjgtNC42LTQuNmwtOC4yIDguNi0xMS45IDYuOXoiIGZpbGwtb3BhY2l0eT0iLjEiLz48cGF0aCBkPSJNMTIuNyAxNC44cy00LTEuOC0xMiAyLjdjMCAwIDEgMy43IDIuNSA1LjMgMS40IDEuNSAyLjMgMy42IDQuNiA0LjYgMCAwIDQuNy0zIDYuOS05LjJsMy0yczQuNyAyLjggMTIuNi0xLjZjMCAwLS42LTMuMy0zLTYtMi42LTMtMy44LTQuNy0zLjgtNC43cy00LjEgMi4zLTcuNSA5LjNsLTMuMyAxLjZ6IiBmaWxsPSIjN2ZiYmRkIi8+PHBhdGggZD0iTTEyLjQgMTUuNWMtLjctLjUtMi40LS44LTQuNC0uNC0yIC40LTQgMS4zLTQuOCAxLjgtLjUuMy0xLjIgMS0xLjIgMS40IDAgLjcuMyAxLjguOCAyLjQuMy4zLjcuNSAxLjQuNi44IDAgMi41LTEuNCAzLjUtMiAxLS42IDEuNi0uOCAyLjctMS4ybC0yLjkgMi40Yy0xLjMgMS4yLTIuMiAxLjUtMi40IDIuMyAwIC41IDAgMS40LjUgMS44LjQuNS42LjggMS42LjguNiAwIDEgMCAyLjYtMS41LjktLjkgMi4zLTMgMi43LTMuNy42LTEuMSAxLTIuMi43LTMtLjItMS0uNC0xLjQtLjgtMS43ek0xNy40IDE0LjJjLS4zLS41LS45LTEuMi0uMi0yLjVsMS45LTNjLjUtLjggMi0yLjMgMi42LTIuNi42LS40IDEuNS0uNiAyLS4yLjYuNCAxIDEgMS4zIDEuNS40LjYuNyAxLjMuMiAyLS43IDEtMS42LjktMi44IDEuNy0xLjIuOC0xLjkgMS4yLTIuNSAxLjlsMy44LTEuOGMxLjMtLjYgMi43LTEuMSAzLjQtLjcuOC41LjguNyAxIDEuNC4zIDEtLjIgMS45LS44IDIuNC0uNS42LTEuNS45LTIuNiAxLjItMS40LjQtNC41IDEtNS44LjUtMS4zLS41LTEuMy0xLjQtMS41LTEuOHoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNMTIuNyAxNC44cy00LTEuOC0xMiAyLjdjMCAwIDEgMy43IDIuNSA1LjMgMS40IDEuNSAyLjMgMy42IDQuNiA0LjYgMCAwIDQuNy0zIDYuOS05LjJsMy0yczQuNyAyLjggMTIuNi0xLjZjMCAwLS42LTMuMy0zLTYtMi42LTMtMy44LTQuNy0zLjgtNC43cy00LjEgMi4zLTcuNSA5LjNsLTMuMyAxLjZ6IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iLjUiLz48cGF0aCBkPSJNMTIuNCAxNC45czIuMS0yIDMtMmMxLjEgMCAyLjMgMi43IDIuMyAzLjUgMCAuOC0yLjEgMi40LTMuMSAyLjMgMCAwIDAtMS4yLS43LTIuNi0uOC0xLjMtMS41LTEuMi0xLjUtMS4yeiIgZmlsbD0iIzdmYmJkZCIvPjxwYXRoIGQ9Ik0xMy44IDE1LjNjLjkuOC42IDIgMS40IDEuOCAxLS4yIDEuNC0uOCAxLjMtMS41IDAtLjcgMC0uOC0uNC0xLjYtLjMtLjctMS0xLjEtMi0uNS0uNy41LTEuNCAxLjMtMS40IDEuM3MuMi0uMyAxLjEuNXoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNMTIuNCAxNC45czIuMS0yIDMtMmMxLjEgMCAyLjMgMi43IDIuMyAzLjUgMCAuOC0yLjEgMi40LTMuMSAyLjMgMCAwIDAtMS4yLS43LTIuNi0uOC0xLjMtMS41LTEuMi0xLjUtMS4yeiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9Ii41Ii8+PC9zdmc+",C2={name:"@genome-spy/app",description:"GenomeSpy-based visualization tool for multiple patient samples",author:{name:"Kari Lavikka",email:"kari.lavikka@helsinki.fi"},contributors:[],license:"MIT",version:"0.28.
|
2166
|
+
*/const Uk={},Hk=or(class extends qr{constructor(){super(...arguments),this.ot=Uk}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 Ae}else if(this.ot===e)return Ae;return this.ot=Array.isArray(e)?Array.from(e):e,this.render(e,n)}});class Gk extends yt{constructor(){super(),this.inputRef=b2(),this.app=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 genomeSpy(){return this.app.genomeSpy}get _inputField(){return this.inputRef.value}static get properties(){return{app:{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=x2(this.genomeSpy.viewRoot);e&&(this._genomeResolution=e,this._genome=this.genomeSpy.genomeStore.getGenome(),this.getDefaultValue=()=>this._genome.formatInterval(e.getDomain()),e.addEventListener("domain",xs(()=>this.requestUpdate(),60,!1)))}async searchViews(e){var r;const n=new Intl.Collator("en",{usage:"search",sensitivity:"base"});for(const i of this.genomeSpy.getSearchableViews()){const o=i.getAccessor("search"),a=i.getAccessor("x"),s=i.getAccessor("x2"),c=i.getScaleResolution("x");if(!(!a||!s||!(c!=null&&c.isZoomable()))){for(const u of((r=i.getCollector())==null?void 0:r.getData())??[])if(n.compare(o(u),e)===0){const f=mc([a(u),s(u)],null,1.2);return await c.zoomTo(f),!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 o2&&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){Qk(e,this._inputField).then(()=>{this._inputField.blur(),this.search(e)})}_getSearchHelp(){var i;const e=[];e.push(E`<p>Focus to a specific range. Examples:</p><ul><li>chr8</li><li>chr8:21,445,873</li><li>chr8:21,445,873-24,623,697</li><li>chr4:166,014,727-chr15:23,731,397</li></ul>`);for(const o of((i=this.genomeSpy)==null?void 0:i.getSearchableViews())||[]){const a=o.getTitleText()??o.spec.name,s=o.getAccessor("search"),c=s.fields.join(", "),u=Sg(3,o.getCollector().getData(),s);e.push(E`<p>Search <em>${a}</em> (${c}). Examples:</p><ul>${u.map(f=>E`<li>${f}</li>`)}</ul>`)}const n=this.app.getSampleView().attributePanel,r=n.getAttributeNames().map(o=>n.getAttributeInfo(o)).filter(o=>o.type=="nominal"||o.type=="ordinal").sort(()=>.5-Math.random()).map(o=>{var a;return[...((a=o.scale)==null?void 0:a.domain())??[]].sort(()=>.5-Math.random())[0]}).filter(o=>o!==void 0).slice(0,3);return r.length&&e.push(E`<p>Filter samples by categorical attributes. Examples:</p><ul>${r.map(o=>E`<li>${o}</li>`)}</ul>`),E`<div class="search-help" @click="${this._onSearchHelpClicked}">${e}</div>`}updated(e){this._focused&&this._inputField.select()}render(){return E`<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}" ${A2(this.inputRef)}> ${Hk([123],()=>this._getSearchHelp())}</div>`}}customElements.define("genome-spy-search-field",Gk);function Qk(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 x2(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,tr}}),e}const w2="data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzIgMzIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLW1pdGVybGltaXQ9IjEuNSI+PHBhdGggZD0iTTQuNyAyMS4ycy40IDIuMyAxLjMgMy42QzcgMjYgOS44IDI4IDkuOCAyOHMzLjQtMi42IDYuNC04LjVjMCAwIDEgLjEgMS45LS40LjktLjYuOC0uNCAxLTEuMiAwIDAgMi45LjUgNi42IDAgMi4xLS4zIDQuMy0xIDYuMi0yLjUgMCAwLTEuMS0xLjctMi41LTUuMS0uNS0xLjMtMi0xLjgtNC42LTQuNmwtOC4yIDguNi0xMS45IDYuOXoiIGZpbGwtb3BhY2l0eT0iLjEiLz48cGF0aCBkPSJNMTIuNyAxNC44cy00LTEuOC0xMiAyLjdjMCAwIDEgMy43IDIuNSA1LjMgMS40IDEuNSAyLjMgMy42IDQuNiA0LjYgMCAwIDQuNy0zIDYuOS05LjJsMy0yczQuNyAyLjggMTIuNi0xLjZjMCAwLS42LTMuMy0zLTYtMi42LTMtMy44LTQuNy0zLjgtNC43cy00LjEgMi4zLTcuNSA5LjNsLTMuMyAxLjZ6IiBmaWxsPSIjN2ZiYmRkIi8+PHBhdGggZD0iTTEyLjQgMTUuNWMtLjctLjUtMi40LS44LTQuNC0uNC0yIC40LTQgMS4zLTQuOCAxLjgtLjUuMy0xLjIgMS0xLjIgMS40IDAgLjcuMyAxLjguOCAyLjQuMy4zLjcuNSAxLjQuNi44IDAgMi41LTEuNCAzLjUtMiAxLS42IDEuNi0uOCAyLjctMS4ybC0yLjkgMi40Yy0xLjMgMS4yLTIuMiAxLjUtMi40IDIuMyAwIC41IDAgMS40LjUgMS44LjQuNS42LjggMS42LjguNiAwIDEgMCAyLjYtMS41LjktLjkgMi4zLTMgMi43LTMuNy42LTEuMSAxLTIuMi43LTMtLjItMS0uNC0xLjQtLjgtMS43ek0xNy40IDE0LjJjLS4zLS41LS45LTEuMi0uMi0yLjVsMS45LTNjLjUtLjggMi0yLjMgMi42LTIuNi42LS40IDEuNS0uNiAyLS4yLjYuNCAxIDEgMS4zIDEuNS40LjYuNyAxLjMuMiAyLS43IDEtMS42LjktMi44IDEuNy0xLjIuOC0xLjkgMS4yLTIuNSAxLjlsMy44LTEuOGMxLjMtLjYgMi43LTEuMSAzLjQtLjcuOC41LjguNyAxIDEuNC4zIDEtLjIgMS45LS44IDIuNC0uNS42LTEuNS45LTIuNiAxLjItMS40LjQtNC41IDEtNS44LjUtMS4zLS41LTEuMy0xLjQtMS41LTEuOHoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNMTIuNyAxNC44cy00LTEuOC0xMiAyLjdjMCAwIDEgMy43IDIuNSA1LjMgMS40IDEuNSAyLjMgMy42IDQuNiA0LjYgMCAwIDQuNy0zIDYuOS05LjJsMy0yczQuNyAyLjggMTIuNi0xLjZjMCAwLS42LTMuMy0zLTYtMi42LTMtMy44LTQuNy0zLjgtNC43cy00LjEgMi4zLTcuNSA5LjNsLTMuMyAxLjZ6IiBmaWxsPSJub25lIiBzdHJva2U9IiMwMDAiIHN0cm9rZS13aWR0aD0iLjUiLz48cGF0aCBkPSJNMTIuNCAxNC45czIuMS0yIDMtMmMxLjEgMCAyLjMgMi43IDIuMyAzLjUgMCAuOC0yLjEgMi40LTMuMSAyLjMgMCAwIDAtMS4yLS43LTIuNi0uOC0xLjMtMS41LTEuMi0xLjUtMS4yeiIgZmlsbD0iIzdmYmJkZCIvPjxwYXRoIGQ9Ik0xMy44IDE1LjNjLjkuOC42IDIgMS40IDEuOCAxLS4yIDEuNC0uOCAxLjMtMS41IDAtLjcgMC0uOC0uNC0xLjYtLjMtLjctMS0xLjEtMi0uNS0uNy41LTEuNCAxLjMtMS40IDEuM3MuMi0uMyAxLjEuNXoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJNMTIuNCAxNC45czIuMS0yIDMtMmMxLjEgMCAyLjMgMi43IDIuMyAzLjUgMCAuOC0yLjEgMi40LTMuMSAyLjMgMCAwIDAtMS4yLS43LTIuNi0uOC0xLjMtMS41LTEuMi0xLjUtMS4yeiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9Ii41Ii8+PC9zdmc+",C2={name:"@genome-spy/app",description:"GenomeSpy-based visualization tool for multiple patient samples",author:{name:"Kari Lavikka",email:"kari.lavikka@helsinki.fi"},contributors:[],license:"MIT",version:"0.28.4",main:"dist/index.js",files:["dist/"],repository:{type:"git",url:"github:genome-spy/genome-spy",directory:"packages/app"},scripts:{dev:"node dev-server.js",build:"vite build",prepublishOnly:"npm run build"},dependencies:{"@floating-ui/dom":"^0.5.0","@fortawesome/fontawesome-free":"^6.1.1","@fortawesome/fontawesome-svg-core":"^6.1.1","@fortawesome/free-solid-svg-icons":"^6.1.1","@genome-spy/core":"^0.28.3","@reduxjs/toolkit":"^1.8.4",idb:"^7.0.1",lit:"^2.4.0","lz-string":"^1.4.4",mapsort:"^1.0.5","redux-batched-actions":"^0.5.0","redux-undo":"^1.0.1",snarkdown:"^2.0.0"},gitHead:"249dcffa90761fe7b089b11e76bab0496ec5e2e8"};/**
|
2167
2167
|
* @license
|
2168
2168
|
* Copyright 2020 Google LLC
|
2169
2169
|
* SPDX-License-Identifier: BSD-3-Clause
|
@@ -2175,5 +2175,5 @@ svg:not(:root).svg-inline--fa, svg:not(:host).svg-inline--fa {
|
|
2175
2175
|
* @license
|
2176
2176
|
* Copyright 2017 Google LLC
|
2177
2177
|
* SPDX-License-Identifier: BSD-3-Clause
|
2178
|
-
*/const M2=t=>!fI(t)&&typeof t.then=="function";class qk extends v2{constructor(){super(...arguments),this._$Cwt=1073741823,this._$Cyt=[],this._$CK=new Xk(this),this._$CX=new Zk}render(...e){var n;return(n=e.find(r=>!M2(r)))!==null&&n!==void 0?n:Ae}update(e,n){const r=this._$Cyt;let i=r.length;this._$Cyt=n;const o=this._$CK,a=this._$CX;this.isConnected||this.disconnected();for(let s=0;s<n.length&&!(s>this._$Cwt);s++){const c=n[s];if(!M2(c))return this._$Cwt=s,c;s<i&&c===r[s]||(this._$Cwt=1073741823,i=0,Promise.resolve(c).then(async u=>{for(;a.get();)await a.get();const f=o.deref();if(f!==void 0){const l=f._$Cyt.indexOf(c);l>-1&&l<f._$Cwt&&(f._$Cwt=l,f.setValue(u))}}))}return Ae}disconnected(){this._$CK.disconnect(),this._$CX.pause()}reconnected(){this._$CK.reconnect(this),this._$CX.resume()}}const Kk=or(qk);var Jk={"":["<em>","</em>"],_:["<strong>","</strong>"],"*":["<strong>","</strong>"],"~":["<s>","</s>"],"\n":["<br />"]," ":["<br />"],"-":["<hr />"]};function T2(t){return t.replace(RegExp("^"+(t.match(/^(\t| )+/)||"")[0],"gm"),"")}function jo(t){return(t+"").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function Dd(t,e){var n,r,i,o,a,s=/((?:^|\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 d(h){var m=Jk[h[1]||""],g=c[c.length-1]==h;return m?m[1]?(g?c.pop():c.push(h),m[0|g]):m[0]:h}function p(){for(var h="";c.length;)h+=d(c[c.length-1]);return h}for(t=t.replace(/^\[(.+?)\]:\s*(.+)$/gm,function(h,m,g){return f[m.toLowerCase()]=g,""}).replace(/^\n+|\n+$/g,"");i=s.exec(t);)r=t.substring(l,i.index),l=s.lastIndex,n=i[0],r.match(/[^\\](\\\\)*\\$/)||((a=i[3]||i[4])?n='<pre class="code '+(i[4]?"poetry":i[2].toLowerCase())+'"><code'+(i[2]?' class="language-'+i[2].toLowerCase()+'"':"")+">"+T2(jo(a).replace(/^\n+|\n+$/g,""))+"</code></pre>":(a=i[6])?(a.match(/\./)&&(i[5]=i[5].replace(/^\d+/gm,"")),o=Dd(T2(i[5].replace(/^\s*[>*+.-]/gm,""))),a==">"?a="blockquote":(a=a.match(/\./)?"ol":"ul",o=o.replace(/^(.*)(\n|$)/gm,"<li>$1</li>")),n="<"+a+">"+o+"</"+a+">"):i[8]?n='<img src="'+jo(i[8])+'" alt="'+jo(i[7])+'">':i[10]?(u=u.replace("<a>",'<a href="'+jo(i[11]||f[r.toLowerCase()])+'">'),n=p()+"</a>"):i[9]?n="<a>":i[12]||i[14]?n="<"+(a="h"+(i[14]?i[14].length:i[13]>"="?1:2))+">"+Dd(i[12]||i[15],f)+"</"+a+">":i[16]?n="<code>"+jo(i[16])+"</code>":(i[17]||i[1])&&(n=d(i[17]||"--"))),u+=r,u+=n;return(u+t.substring(l)+p()).replace(/^\n+|\n+$/g,"")}function I2(t,e){return!e||/^(data:|([A-Za-z]+:)?\/\/)/.test(t)||t.startsWith("/")?t:(e.endsWith("/")||(e+="/"),e+t)}function $k(t,e={}){const n=Dd(t),r=new DOMParser().parseFromString(`<!DOCTYPE html><html><body><div>${n}</div></body></html>`,"text/html");r.normalize(),k2(r.body);for(const o of r.querySelectorAll("a[href]"))o.setAttribute("target","blank"),o.setAttribute("rel","noopener noreferrer"),o.setAttribute("href",I2(o.getAttribute("href"),e.baseUrl));for(const o of r.querySelectorAll("img[src]"))o.setAttribute("src",I2(o.getAttribute("src"),e.baseUrl));const i=r.body.removeChild(r.querySelector("body > div"));return i.className="snarkdown",i}function k2(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--;)k2(t.childNodes[e])}}function eN(t){t.stopPropagation(),t.preventDefault();const n=t.target.parentElement,r=n.parentElement,o=r.parentElement.querySelector(".panes"),a=[...r.children].findIndex(s=>s==n);for(const s of r.children)s.classList.remove("active-tab");for(const s of o.children)s.classList.remove("active-tab");r.children.item(a).classList.add("active-tab"),o.children.item(a).classList.add("active-tab")}var rc={},tN={get exports(){return rc},set exports(t){rc=t}};(function(t){var e=function(){var n=String.fromCharCode,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$",o={};function a(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 s={compressToBase64:function(c){if(c==null)return"";var u=s._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:s._decompress(c.length,32,function(u){return a(r,c.charAt(u))})},compressToUTF16:function(c){return c==null?"":s._compress(c,15,function(u){return n(u+32)})+" "},decompressFromUTF16:function(c){return c==null?"":c==""?null:s._decompress(c.length,16384,function(u){return c.charCodeAt(u)-32})},compressToUint8Array:function(c){for(var u=s.compress(c),f=new Uint8Array(u.length*2),l=0,d=u.length;l<d;l++){var p=u.charCodeAt(l);f[l*2]=p>>>8,f[l*2+1]=p%256}return f},decompressFromUint8Array:function(c){if(c==null)return s.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 d=[];return u.forEach(function(p){d.push(n(p))}),s.decompress(d.join(""))},compressToEncodedURIComponent:function(c){return c==null?"":s._compress(c,6,function(u){return i.charAt(u)})},decompressFromEncodedURIComponent:function(c){return c==null?"":c==""?null:(c=c.replace(/ /g,"+"),s._decompress(c.length,32,function(u){return a(i,c.charAt(u))}))},compress:function(c){return s._compress(c,16,function(u){return n(u)})},_compress:function(c,u,f){if(c==null)return"";var l,d,p={},h={},m="",g="",y="",b=2,x=3,C=2,w=[],v=0,A=0,D;for(D=0;D<c.length;D+=1)if(m=c.charAt(D),Object.prototype.hasOwnProperty.call(p,m)||(p[m]=x++,h[m]=!0),g=y+m,Object.prototype.hasOwnProperty.call(p,g))y=g;else{if(Object.prototype.hasOwnProperty.call(h,y)){if(y.charCodeAt(0)<256){for(l=0;l<C;l++)v=v<<1,A==u-1?(A=0,w.push(f(v)),v=0):A++;for(d=y.charCodeAt(0),l=0;l<8;l++)v=v<<1|d&1,A==u-1?(A=0,w.push(f(v)),v=0):A++,d=d>>1}else{for(d=1,l=0;l<C;l++)v=v<<1|d,A==u-1?(A=0,w.push(f(v)),v=0):A++,d=0;for(d=y.charCodeAt(0),l=0;l<16;l++)v=v<<1|d&1,A==u-1?(A=0,w.push(f(v)),v=0):A++,d=d>>1}b--,b==0&&(b=Math.pow(2,C),C++),delete h[y]}else for(d=p[y],l=0;l<C;l++)v=v<<1|d&1,A==u-1?(A=0,w.push(f(v)),v=0):A++,d=d>>1;b--,b==0&&(b=Math.pow(2,C),C++),p[g]=x++,y=String(m)}if(y!==""){if(Object.prototype.hasOwnProperty.call(h,y)){if(y.charCodeAt(0)<256){for(l=0;l<C;l++)v=v<<1,A==u-1?(A=0,w.push(f(v)),v=0):A++;for(d=y.charCodeAt(0),l=0;l<8;l++)v=v<<1|d&1,A==u-1?(A=0,w.push(f(v)),v=0):A++,d=d>>1}else{for(d=1,l=0;l<C;l++)v=v<<1|d,A==u-1?(A=0,w.push(f(v)),v=0):A++,d=0;for(d=y.charCodeAt(0),l=0;l<16;l++)v=v<<1|d&1,A==u-1?(A=0,w.push(f(v)),v=0):A++,d=d>>1}b--,b==0&&(b=Math.pow(2,C),C++),delete h[y]}else for(d=p[y],l=0;l<C;l++)v=v<<1|d&1,A==u-1?(A=0,w.push(f(v)),v=0):A++,d=d>>1;b--,b==0&&(b=Math.pow(2,C),C++)}for(d=2,l=0;l<C;l++)v=v<<1|d&1,A==u-1?(A=0,w.push(f(v)),v=0):A++,d=d>>1;for(;;)if(v=v<<1,A==u-1){w.push(f(v));break}else A++;return w.join("")},decompress:function(c){return c==null?"":c==""?null:s._decompress(c.length,32768,function(u){return c.charCodeAt(u)})},_decompress:function(c,u,f){var l=[],d=4,p=4,h=3,m="",g=[],y,b,x,C,w,v,A,D={val:f(0),position:u,index:1};for(y=0;y<3;y+=1)l[y]=y;for(x=0,w=Math.pow(2,2),v=1;v!=w;)C=D.val&D.position,D.position>>=1,D.position==0&&(D.position=u,D.val=f(D.index++)),x|=(C>0?1:0)*v,v<<=1;switch(x){case 0:for(x=0,w=Math.pow(2,8),v=1;v!=w;)C=D.val&D.position,D.position>>=1,D.position==0&&(D.position=u,D.val=f(D.index++)),x|=(C>0?1:0)*v,v<<=1;A=n(x);break;case 1:for(x=0,w=Math.pow(2,16),v=1;v!=w;)C=D.val&D.position,D.position>>=1,D.position==0&&(D.position=u,D.val=f(D.index++)),x|=(C>0?1:0)*v,v<<=1;A=n(x);break;case 2:return""}for(l[3]=A,b=A,g.push(A);;){if(D.index>c)return"";for(x=0,w=Math.pow(2,h),v=1;v!=w;)C=D.val&D.position,D.position>>=1,D.position==0&&(D.position=u,D.val=f(D.index++)),x|=(C>0?1:0)*v,v<<=1;switch(A=x){case 0:for(x=0,w=Math.pow(2,8),v=1;v!=w;)C=D.val&D.position,D.position>>=1,D.position==0&&(D.position=u,D.val=f(D.index++)),x|=(C>0?1:0)*v,v<<=1;l[p++]=n(x),A=p-1,d--;break;case 1:for(x=0,w=Math.pow(2,16),v=1;v!=w;)C=D.val&D.position,D.position>>=1,D.position==0&&(D.position=u,D.val=f(D.index++)),x|=(C>0?1:0)*v,v<<=1;l[p++]=n(x),A=p-1,d--;break;case 2:return g.join("")}if(d==0&&(d=Math.pow(2,h),h++),l[A])m=l[A];else if(A===p)m=b+b.charAt(0);else return null;g.push(m),l[p++]=b+m.charAt(0),d--,b=m,d==0&&(d=Math.pow(2,h),h++)}}};return s}();t!=null&&(t.exports=e)})(tN);function nN(){const t=typeof process<"u"?require("util").TextEncoder:TextEncoder;return new t}let N2;function rN(){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 iN(t){N2??(N2=rN());let e=-1;const n=nN().encode(t);for(let r=0;r<n.length;r++)e=e>>>8^N2[(e^n[r])&255];return(e^-1)>>>0}function L2(t){return("00000000"+iN(t).toString(16)).slice(-8)}function B2(t){const e=rc.compressToEncodedURIComponent(JSON.stringify(t));return"#"+e+L2(e)}function oN(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(L2(e)!==n)throw new Error("The state string in the URL is corrupted.");return JSON.parse(rc.decompressFromEncodedURIComponent(e))}let vr;function aN(t){for(const e of t.genomeSpy.getNamedScaleResolutions().values())e.isZoomable()&&e.resetZoom();t.storeHelper.dispatch([...t.provenance.isUndoable()?[Ht.ActionCreators.jumpToPast(0)]:[],si.actions.restoreDefaultVisibilities()])}async function Md(t,e){try{t.actions&&e.provenance.dispatchBookmark(t.actions),e.storeHelper.dispatch(si.actions.setViewSettings(t.viewSettings));const n=[];for(const[r,i]of Object.entries(t.scaleDomains??{})){const o=e.genomeSpy.getNamedScaleResolutions().get(r);o?n.push(o.zoomTo(i)):console.warn(`Cannot restore scale domain. Unknown name: ${r}`)}await Promise.all(n)}catch(n){console.error(n),He(E`<p>Cannot restore the state:</p><p>${n}</p>`),e.provenance.activateState(0)}}async function Uo(t,e,n={}){await Md(t,e),(vr||t.notes||n.mode=="shared"&&(t.name||t.notes))&&await sN(t,e,n)}async function sN(t,e,n={}){vr??(vr=fr("tour",e.appContainer)),await cN(t,e,n)}async function cN(t,e,n){const r=n.database,i=r?await r.getNames():[],o=i.indexOf(t.name),a=r?` ${o+1} of ${i.length}`:"",s=`${n.mode=="shared"?"Shared bookmark":"Bookmark"}${a}: ${t.name??"Unnamed"}`,c=t.notes?$k(t.notes,{baseUrl:e.genomeSpy.spec.baseUrl}):E`<span class="no-notes">No notes provided</span>`,u=async()=>{if(vr==null||vr.close(),vr=void 0,n.mode=="tour"){const m=n.afterTourBookmark;if(typeof m=="string"){const g=await n.database.get(m);if(!g)throw new Error(`No such bookmark: ${m}`);Md(g,e)}else m===null||aN(e)}},f=async m=>{const g=await r.get(i[m]);Uo(g,e,n),e.appContainer.querySelector("canvas").focus()},l=async()=>{if(await Td(e.localBookmarkDatabase,t,"add"))try{await e.localBookmarkDatabase.put(t)}catch(m){console.warn(m),He(`Cannot import bookmark: ${m}`)}},d=E`<button class="btn" @click="${u}">${n.mode=="tour"?"End tour":"Close"}</button> ${n.mode=="shared"&&e.localBookmarkDatabase?E`<button class="btn" @click="${l}">${K(F1).node[0]} Import bookmark</button>`:z} ${r?E`<button class="btn" @click="${()=>f(o-1)}" ?disabled="${o<=0}">${K(s6).node[0]} Previous</button> <button class="btn" @click="${()=>f(o+1)}" ?disabled="${o>=i.length-1}">Next ${K(A6).node[0]}</button>`:z}`,h=E`<button title="Collapse" class="btn collapse" @click="${m=>m.target.closest(".gs-modal").classList.toggle("collapsed")}">${K(u6).node[0]}</button><div class="modal-title">${s}</div><div class="modal-body markdown" style="max-width:600px">${c}</div><div class="modal-buttons">${d}</div>`;Le(h,vr.content)}function O2(t,e){const n=JSON.stringify(t,void 0,2),r=window.location,i=r.origin+r.pathname+r.search+(e?"#bookmark:"+t.name.replaceAll(" ","-"):B2(t));He(E`<div class="gs-tabs" style="width:600px"><ul class="tabs" @click="${eN}"><li class="active-tab"><button>URL</button></li><li><button>JSON</button></li></ul><div class="panes"><div class="gs-form-group active-tab"><label for="bookmark-url">Here's a link for you:</label><div class="copy-url"><input id="bookmark-url" type="text" .value="${i}"> <button @click="${a=>navigator.clipboard.writeText(i).then(()=>a.target.dispatchEvent(mI())).catch(()=>He("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 link is opened.</small></div><div class="gs-form-group"><textarea id="bookmark-json" style="height:250px">
|
2179
|
-
${n}</textarea> <small>The JSON-formatted bookmark is currently available for development purposes.</small></div></div></div>`,{title:"Share a bookmark",okLabel:"Close"})}function Td(t,e,n){const r={add:"Add bookmark",edit:"Edit bookmark",share:"Share the current view state as a bookmark"}[n],i=(c,u)=>E`<div class="modal-title">${r}</div><div class="modal-body" style="width:500px">${n=="edit"?E`<div class="gs-alert warning">${K(f6).node[0]} The current visualization state will be updated to the bookmark you are editing.</div>`:z} ${n=="share"?E`<div class="gs-alert info">${K(z1).node[0]} <span>You can add an optional title and notes, which will be shown to the recipient when the bookmark link is opened.</span></div>`:z}<div class="gs-form-group"><label for="bookmark-title">Title</label> <input id="bookmark-title" type="text" ?required="${n=="add"||n=="edit"}" .value="${e.name??""}" .placeholder="${n=="share"?"Add an optional title":""}" @change="${f=>{e.name=F2(f.target.value)}}"></div><div class="gs-form-group"><label for="bookmark-notes">Notes</label> <textarea id="bookmark-notes" rows="4" .value="${e.notes??""}" .placeholder="${n=="share"?"... and notes":""}" @change="${f=>{e.notes=F2(f.target.value)}}"></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 btn-cancel" @click="${c}">Cancel</button> <button class="btn btn-primary" @click="${u}">${n=="share"?E`${K(rf).node[0]} Create a link`:"Save"}</button></div>`,o=e.name,a=()=>!!e.name,s=fr();return new Promise(c=>{const u=()=>{s.close(),c(!1)},f=async()=>{if(!a()){He("Name is missing!",{title:"Error"});return}let d=!0;t&&!(n&&e.name==o)&&await t.get(e.name)&&(d=await He(E`A bookmark with the name <em>${e.name}</em> already exists. It will be overwritten.`,{title:"Bookmark already exists",cancelButton:!0})),d&&(s.close(),c(!0))},l=()=>{s.close(),c(!0)};Le(i(u,n=="share"?l:f),s.content),s.content.querySelector("#bookmark-title").focus()})}function F2(t){if(t!==void 0&&(t=t.trim(),t.length))return t}class uN extends yt{constructor(){super(),this.app=void 0}connectedCallback(){super.connectedCallback(),this.dispatchEvent(S2("app",e=>{this.app=e}))}createRenderRoot(){return this}_createBookmarkWithCurrentState(){const e={name:void 0,timestamp:Date.now(),actions:this.app.provenance.getBookmarkableActionHistory(),scaleDomains:{}},n=this.app.storeHelper.state.viewSettings;Object.keys(n.visibilities).length&&(e.viewSettings=n);for(const[r,i]of this.app.genomeSpy.getNamedScaleResolutions().entries())i.isZoomable()&&(e.scaleDomains[r]=i.getComplexDomain());return e}async _shareCurrentState(){const e=this._createBookmarkWithCurrentState();await Td(void 0,e,"share")&&O2(e,!1)}async _addBookmark(e,n){const r=n?await e.get(n):void 0,i=!!r,o=this._createBookmarkWithCurrentState();if(o.name??(o.name=r==null?void 0:r.name),o.notes??(o.notes=r==null?void 0:r.notes),await Td(e,o,i?"edit":"add"))try{await e.put(o,r==null?void 0:r.name),this.requestUpdate()}catch(a){He(`${a}`,{title:"Cannot save the bookmark!"})}}async _loadBookmark(e,n){const r=await e.get(n);r&&Uo(r,this.app,{database:e})}_createContextMenu(e,n,r){r.stopPropagation();const i=r.target.closest("li"),o=()=>He(E`The bookmark <em>${n}</em> will be deleted.`,{title:"Are you sure?",cancelButton:!0}).then(async c=>{c&&(await e.delete(n),this.requestUpdate())}),a=[],s=e==this.app.globalBookmarkDatabase;s||(a.push({label:"Edit and replace...",icon:C6,callback:()=>this._addBookmark(e,n)}),a.push({label:"Delete",icon:j1,callback:o})),a.push({label:"Share...",icon:rf,callback:async()=>O2(await e.get(n),s)}),r2({items:a},i,"right-start")}async _makeBookmarkMenuItems(e,n){const i=(await e.getNames()).map(o=>({label:o,callback:()=>this._loadBookmark(e,o),ellipsisCallback:a=>this._createContextMenu(e,o,a)}));return i.length?[{type:"divider"},{label:n,type:"header"},...i].map(o=>t2(o)):z}_getBookmarks(){const e=(n,r)=>n?Kk(this._makeBookmarkMenuItems(n,r),E`Loading...`):z;return[e(this.app.globalBookmarkDatabase,"Bookmarks on the server"),e(this.app.localBookmarkDatabase,"Bookmarks in the web browser")]}render(){const e=this.app.localBookmarkDatabase,n=e?E`<li><a @click="${()=>this._addBookmark(e)}">Add bookmark...</a></li>`:z,r=e||this.app.globalBookmarkDatabase?E`<div class="dropdown bookmark-dropdown"><button class="tool-btn" title="Bookmarks" @click="${i=>{Sd(i)&&this.requestUpdate()}}">${K(F1).node[0]}</button><ul class="gs-dropdown-menu">${n} ${this._getBookmarks()}</ul></div>`:z;return E`<div class="btn-group">${r} <button class="tool-btn" title="Share" @click="${()=>this._shareCurrentState()}">${K(rf).node[0]}</button></div>`}}customElements.define("genome-spy-bookmark-button",uN);class lN extends yt{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.provenance,n=[];e.isEnabled()&&n.push(E`<genome-spy-provenance-buttons .provenance="${e}"></genome-spy-provenance-buttons>`),n.push(E`<genome-spy-view-visibility></genome-spy-view-visibility>`),n.push(E`<genome-spy-bookmark-button></genome-spy-bookmark-button>`);const r=this.app.config.description?Ze(this.app.config.description):[];return r.length>1&&n.push(E`<button class="tool-btn" title="Show a description of the visualization" @click="${()=>He(E`${r.slice(1).map(i=>E`<p>${i}</p>`)}`,{title:r[0]})}">${K(z1).node[0]}</button>`),r.length>0&&n.push(E`<span class="vis-title">${r[0]}</span>`),n.push(E`<span class="spacer"></span> <a class="version" href="https://github.com/genome-spy/genome-spy/releases/tag/v${C2.version}">v${C2.version}</a> ${this.app.appContainer.requestFullscreen?E`<button class="tool-btn" title="Fullscreen" @click="${()=>this.app.toggleFullScreen()}">${K(w6).node[0]}</button>`:z} <button class="tool-btn" title="Help" @click="${()=>window.open("https://genomespy.app/docs/","_blank")}">${K(p6).node[0]}</button>`),n}render(){const e=this.app.genomeSpy;return E`<nav class="gs-toolbar"><a href="https://genomespy.app" target="_blank" class="logo"><img title="GenomeSpy" alt="GenomeSpy" src="${w2}"> </a>${this.appInitialized&&x2(e.viewRoot)?E`<genome-spy-search-field .app="${this.app}"></genome-spy-search-field>`:z} ${this._getToolButtons()}</nav>`}}customElements.define("genome-spy-toolbar",lN);class fN{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??{})}addReducer(e,n){this._reducers[e]=n;const r=o=>Object.keys(this._reducers).some(a=>o.type.startsWith(a)),i=(o,a)=>r(a)?a:o??null;this._reducer=X9(qf({...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()?[Ht.ActionCreators.jumpToPast(0)]:[],...e])}isRedoable(){return this.isEnabled()&&this._provenanceState.future.length>0}redo(){this.storeHelper.dispatch(Ht.ActionCreators.redo())}isUndoable(){return this.isEnabled()&&this._provenanceState.past.length>0}undo(){this.storeHelper.dispatch(Ht.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(Ht.ActionCreators.jumpToPast(e)):e>n&&this.storeHelper.dispatch(Ht.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*dN(t,e=n=>+n){const n=t.length,r=new Ao,i=new Array(n).fill(0);for(const[a,s]of t.entries())s.length&&r.push(a,e(s[0]));let o=0;for(;(o=r.pop())!==void 0;){const a=t[o];let s=i[o];if(yield a[s++],s<a.length){const u=e(a[s]);r.push(o,u),i[o]=s}}}const hN="sampleCount";class pN extends ue{constructor(e,n){super(),this.view=n;const r=n.context.animator;for(const i of n.getAncestors())i instanceof md&&(this.provenance=i.provenance,this.provenance.storeHelper.subscribe(o=>r.requestTransition(()=>{this.reset(),this._mergeAndPropagate(td(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.getEncoding().x;if(Xn(e))this.xAccessor=q(e.field);else throw new Error("Crash!")}handle(e){}getGlobalObject(){return this.contextObject}_getCollector(){if(this.parent instanceof Xr)return this.parent;throw new Error("MergeFacetsTransform must be a direct child of a Collector")}complete(){this._mergeAndPropagate(this.provenance.getPresentState()[ii]),super.complete()}_mergeAndPropagate(e){const n=[...rd(e.rootGroup)].filter(r=>Tv(Re(r)));for(const[r,i]of n.entries()){const o=Re(i);if(Tv(o)){this.contextObject[hN]=o.samples.length,this.beginBatch({type:"facet",facetId:[r]});const a=o.samples,s=this._getCollector(),c=dN(a.map(u=>s.facetBatches.get([u])??[]),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 be&&n.mark.encoding.y){const r=n.getScaleResolution("y");r&&e.add(r)}});for(const n of e)n.reconfigure()}}var mN="BATCHING_REDUCER.BATCH";function gN(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:mN;return{type:e,meta:{batch:!0},payload:t}}function yN(t){return function e(n,r){return r&&r.meta&&r.meta.batch?r.payload.reduce(e,n):t(n,r)}}class vN{constructor(e){this._reducers=e??{},this.store=r9({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(yN(qf(this._reducers)))}subscribe(e){this._listeners.add(e)}unsubscribe(e){this._listeners.delete(e)}dispatch(e){Array.isArray(e)?this.store.dispatch(gN(e)):this.store.dispatch(e)}getDispatcher(){return e=>this.dispatch(e)}}class bN extends g2{constructor(e){super(),this.bookmarks=e,this.names=e.map(n=>n.name)}async getNames(){return this.names}async get(e){return this.bookmarks.find(n=>n.name==e)}}f1.mergeFacets=pN;class P2{constructor(e,n,r={}){const i=this;this.config=n,this.storeHelper=new vN,this.storeHelper.addReducer("viewSettings",si.reducer),this.provenance=new fN(this.storeHelper),this._initializationListeners=[],this.toolbarRef=b2(),this.appContainer=e,this._configureContainer(),this.localBookmarkDatabase=typeof n.specId=="string"?new Fk(n.specId):void 0,this.globalBookmarkDatabase=void 0,Le(E`<div class="genome-spy-app"><genome-spy-toolbar ${A2(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",s=>{s.detail.name=="app"&&(s.detail.setter(i),s.stopPropagation())});const o=s=>this.appContainer.getElementsByClassName(s)[0];this.genomeSpy=new M1(o("genome-spy-container"),this.config,r),this.genomeSpy.viewFactory.addViewType(Ck,(s,c,u,f)=>new md(s,c,u,f,this.provenance));const a=this.genomeSpy.viewVisibilityPredicate;this.genomeSpy.viewVisibilityPredicate=s=>{var c;return((c=this.storeHelper.state.viewSettings)==null?void 0:c.visibilities[s.name])??a(s)}}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 a;const e=(a=this.config.bookmarks)!=null&&a.remote?Li({baseURL:this.config.baseUrl}).load(this.config.bookmarks.remote.url).then(s=>Promise.resolve(JSON.parse(s))):Promise.resolve([]);if(!await this.genomeSpy.launch())return;this.appContainer.querySelector("canvas").setAttribute("tabindex","-1"),this.storeHelper.subscribe(tc(s=>{var c;return(c=s.viewSettings)==null?void 0:c.visibilities},(s,c)=>{var f,l;this.genomeSpy.viewRoot._invalidateCacheByPrefix("size","progeny"),(l=(f=this.getSampleView())==null?void 0:f.summaryViews)==null||l._invalidateCacheByPrefix("size","self");const u=this.genomeSpy.viewRoot.context;u.requestLayoutReflow(),u.animator.requestRender()},this.storeHelper.store.getState()));try{const s=await e;s.length&&(this.globalBookmarkDatabase=new bN(s))}catch(s){throw new Error(`Cannot load remote bookmarks: ${s}`)}try{await this._restoreStateFromUrlOrBookmark()}catch(s){He(s.toString())}this.storeHelper.subscribe(()=>{this._updateStateToUrl()}),window.addEventListener("hashchange",()=>this._restoreStateFromUrl().catch(s=>He(s.toString())),!1);const r=xs(()=>this._updateStateToUrl(),500,!1);for(const[,s]of this.genomeSpy.getNamedScaleResolutions())s.isZoomable()&&s.addEventListener("domain",r);const i=this.toolbarRef.value;i.appInitialized=!0;const o=Ze(this.genomeSpy.spec.description??[]);this.isFullPage()&&o.length>0&&(document.title="GenomeSpy - "+o);for(const s of this._initializationListeners)s();this._initializationListeners=void 0}async _restoreStateFromUrlOrBookmark(){var i;const e=(i=this.config.bookmarks)==null?void 0:i.remote,n=this.globalBookmarkDatabase;if(!await this._restoreStateFromUrl()&&e&&n){const o=e.initialBookmark??(e.tour&&(await n.getNames())[0]);if(o){const a=await n.get(o);if(!a)throw new Error(`No such bookmark: ${o}`);e.tour?await Uo(a,this,{mode:"tour",database:n,afterTourBookmark:e.afterTourBookmark}):await Md(a,this)}}}_updateStateToUrl(){const e={actions:[],scaleDomains:{}},n=this.provenance.getBookmarkableActionHistory();n!=null&&n.length&&(e.actions=n);for(const[o,a]of this.genomeSpy.getNamedScaleResolutions().entries())a.isZoomed()||(e.scaleDomains[o]=a.getComplexDomain());const r=this.storeHelper.state.viewSettings;Object.keys(r.visibilities).length&&(e.viewSettings=r);const i=e.actions.length||Object.keys(e.scaleDomains).length||e.viewSettings?B2(e):"";window.history.replaceState(void 0,document.title,window.location.pathname+window.location.search+i)}async _restoreStateFromUrl(){var r,i;const e=window.location.hash,n=(r=e.match(/^#bookmark:(.+)$/))==null?void 0:r[1];if(n){const o=(i=this.config.bookmarks)==null?void 0:i.remote,a=this.globalBookmarkDatabase;if(o&&a){const s=(await a.getNames()).find(c=>c.replaceAll(" ","-")==n);if(s){const c=await a.get(s);if(!c)throw new Error(`No such bookmark: ${s}`);return await Uo(c,this,{mode:"tour",database:a}),!0}else throw new Error(`No such bookmark: ${n}`)}}if(e&&e.length>0)try{const o=oN(e);return Uo(o,this,{mode:"shared"}),!0}catch(o){console.error(o),He(E`<p>Cannot restore the state:</p><p>${o}</p>`)}return!1}_configureContainer(){this.isFullPage()?(this.appContainer.style.margin="0",this.appContainer.style.padding="0",this.appContainer.style.overflow="hidden",AN(X5)):this.appContainer.style.position="relative"}getSampleView(){var n;if(!((n=this.genomeSpy)!=null&&n.viewRoot))return;let e;return this.genomeSpy.viewRoot.visit(r=>{if(r instanceof md)return e=r,tr}),e}}function AN(t){const e=document.querySelector("head"),n=document.createElement("link");n.setAttribute("rel","shortcut icon"),n.setAttribute("href",t),e.appendChild(n)}async function xN(t,e,n={}){let r;if(ne(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=Pe(e)?e:await z2(e);o.baseUrl??(o.baseUrl=""),o.width??(o.width="container"),o.padding??(o.padding=10);const a=new P2(r,o,n);i=a.genomeSpy,wN(i,n),await a.launch()}catch(o){r.innerText=o.toString(),console.error(o)}return{finalize(){for(i.destroy();r.firstChild;)r.firstChild.remove()},addEventListener(o,a){const s=i._eventListeners;let c=s.get(o);c||(c=new Set,s.set(o,c)),c.add(a)},removeEventListener(o,a){var c;(c=i._eventListeners.get(o))==null||c.delete(a)},getScaleResolutionByName(o){return i.getNamedScaleResolutions().get(o)}}}function wN(t,e){e.namedDataProvider&&t.registerNamedDataProvider(e.namedDataProvider)}async function z2(t){let e;try{e=JSON.parse(await Li().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}j.GenomeSpy=M1,j.GenomeSpyApp=P2,j.embed=xN,j.html=E,j.icon=w2,j.loadSpec=z2,Object.defineProperty(j,Symbol.toStringTag,{value:"Module"})});
|
2178
|
+
*/const M2=t=>!f9(t)&&typeof t.then=="function";class qk extends v2{constructor(){super(...arguments),this._$Cwt=1073741823,this._$Cyt=[],this._$CK=new Xk(this),this._$CX=new Zk}render(...e){var n;return(n=e.find(r=>!M2(r)))!==null&&n!==void 0?n:Ae}update(e,n){const r=this._$Cyt;let i=r.length;this._$Cyt=n;const o=this._$CK,a=this._$CX;this.isConnected||this.disconnected();for(let s=0;s<n.length&&!(s>this._$Cwt);s++){const c=n[s];if(!M2(c))return this._$Cwt=s,c;s<i&&c===r[s]||(this._$Cwt=1073741823,i=0,Promise.resolve(c).then(async u=>{for(;a.get();)await a.get();const f=o.deref();if(f!==void 0){const l=f._$Cyt.indexOf(c);l>-1&&l<f._$Cwt&&(f._$Cwt=l,f.setValue(u))}}))}return Ae}disconnected(){this._$CK.disconnect(),this._$CX.pause()}reconnected(){this._$CK.reconnect(this),this._$CX.resume()}}const Kk=or(qk);var Jk={"":["<em>","</em>"],_:["<strong>","</strong>"],"*":["<strong>","</strong>"],"~":["<s>","</s>"],"\n":["<br />"]," ":["<br />"],"-":["<hr />"]};function T2(t){return t.replace(RegExp("^"+(t.match(/^(\t| )+/)||"")[0],"gm"),"")}function jo(t){return(t+"").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")}function Dd(t,e){var n,r,i,o,a,s=/((?:^|\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 d(h){var m=Jk[h[1]||""],g=c[c.length-1]==h;return m?m[1]?(g?c.pop():c.push(h),m[0|g]):m[0]:h}function p(){for(var h="";c.length;)h+=d(c[c.length-1]);return h}for(t=t.replace(/^\[(.+?)\]:\s*(.+)$/gm,function(h,m,g){return f[m.toLowerCase()]=g,""}).replace(/^\n+|\n+$/g,"");i=s.exec(t);)r=t.substring(l,i.index),l=s.lastIndex,n=i[0],r.match(/[^\\](\\\\)*\\$/)||((a=i[3]||i[4])?n='<pre class="code '+(i[4]?"poetry":i[2].toLowerCase())+'"><code'+(i[2]?' class="language-'+i[2].toLowerCase()+'"':"")+">"+T2(jo(a).replace(/^\n+|\n+$/g,""))+"</code></pre>":(a=i[6])?(a.match(/\./)&&(i[5]=i[5].replace(/^\d+/gm,"")),o=Dd(T2(i[5].replace(/^\s*[>*+.-]/gm,""))),a==">"?a="blockquote":(a=a.match(/\./)?"ol":"ul",o=o.replace(/^(.*)(\n|$)/gm,"<li>$1</li>")),n="<"+a+">"+o+"</"+a+">"):i[8]?n='<img src="'+jo(i[8])+'" alt="'+jo(i[7])+'">':i[10]?(u=u.replace("<a>",'<a href="'+jo(i[11]||f[r.toLowerCase()])+'">'),n=p()+"</a>"):i[9]?n="<a>":i[12]||i[14]?n="<"+(a="h"+(i[14]?i[14].length:i[13]>"="?1:2))+">"+Dd(i[12]||i[15],f)+"</"+a+">":i[16]?n="<code>"+jo(i[16])+"</code>":(i[17]||i[1])&&(n=d(i[17]||"--"))),u+=r,u+=n;return(u+t.substring(l)+p()).replace(/^\n+|\n+$/g,"")}function I2(t,e){return!e||/^(data:|([A-Za-z]+:)?\/\/)/.test(t)||t.startsWith("/")?t:(e.endsWith("/")||(e+="/"),e+t)}function $k(t,e={}){const n=Dd(t),r=new DOMParser().parseFromString(`<!DOCTYPE html><html><body><div>${n}</div></body></html>`,"text/html");r.normalize(),k2(r.body);for(const o of r.querySelectorAll("a[href]"))o.setAttribute("target","blank"),o.setAttribute("rel","noopener noreferrer"),o.setAttribute("href",I2(o.getAttribute("href"),e.baseUrl));for(const o of r.querySelectorAll("img[src]"))o.setAttribute("src",I2(o.getAttribute("src"),e.baseUrl));const i=r.body.removeChild(r.querySelector("body > div"));return i.className="snarkdown",i}function k2(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--;)k2(t.childNodes[e])}}function eN(t){t.stopPropagation(),t.preventDefault();const n=t.target.parentElement,r=n.parentElement,o=r.parentElement.querySelector(".panes"),a=[...r.children].findIndex(s=>s==n);for(const s of r.children)s.classList.remove("active-tab");for(const s of o.children)s.classList.remove("active-tab");r.children.item(a).classList.add("active-tab"),o.children.item(a).classList.add("active-tab")}var rc={},tN={get exports(){return rc},set exports(t){rc=t}};(function(t){var e=function(){var n=String.fromCharCode,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$",o={};function a(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 s={compressToBase64:function(c){if(c==null)return"";var u=s._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:s._decompress(c.length,32,function(u){return a(r,c.charAt(u))})},compressToUTF16:function(c){return c==null?"":s._compress(c,15,function(u){return n(u+32)})+" "},decompressFromUTF16:function(c){return c==null?"":c==""?null:s._decompress(c.length,16384,function(u){return c.charCodeAt(u)-32})},compressToUint8Array:function(c){for(var u=s.compress(c),f=new Uint8Array(u.length*2),l=0,d=u.length;l<d;l++){var p=u.charCodeAt(l);f[l*2]=p>>>8,f[l*2+1]=p%256}return f},decompressFromUint8Array:function(c){if(c==null)return s.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 d=[];return u.forEach(function(p){d.push(n(p))}),s.decompress(d.join(""))},compressToEncodedURIComponent:function(c){return c==null?"":s._compress(c,6,function(u){return i.charAt(u)})},decompressFromEncodedURIComponent:function(c){return c==null?"":c==""?null:(c=c.replace(/ /g,"+"),s._decompress(c.length,32,function(u){return a(i,c.charAt(u))}))},compress:function(c){return s._compress(c,16,function(u){return n(u)})},_compress:function(c,u,f){if(c==null)return"";var l,d,p={},h={},m="",g="",y="",b=2,x=3,C=2,w=[],v=0,A=0,D;for(D=0;D<c.length;D+=1)if(m=c.charAt(D),Object.prototype.hasOwnProperty.call(p,m)||(p[m]=x++,h[m]=!0),g=y+m,Object.prototype.hasOwnProperty.call(p,g))y=g;else{if(Object.prototype.hasOwnProperty.call(h,y)){if(y.charCodeAt(0)<256){for(l=0;l<C;l++)v=v<<1,A==u-1?(A=0,w.push(f(v)),v=0):A++;for(d=y.charCodeAt(0),l=0;l<8;l++)v=v<<1|d&1,A==u-1?(A=0,w.push(f(v)),v=0):A++,d=d>>1}else{for(d=1,l=0;l<C;l++)v=v<<1|d,A==u-1?(A=0,w.push(f(v)),v=0):A++,d=0;for(d=y.charCodeAt(0),l=0;l<16;l++)v=v<<1|d&1,A==u-1?(A=0,w.push(f(v)),v=0):A++,d=d>>1}b--,b==0&&(b=Math.pow(2,C),C++),delete h[y]}else for(d=p[y],l=0;l<C;l++)v=v<<1|d&1,A==u-1?(A=0,w.push(f(v)),v=0):A++,d=d>>1;b--,b==0&&(b=Math.pow(2,C),C++),p[g]=x++,y=String(m)}if(y!==""){if(Object.prototype.hasOwnProperty.call(h,y)){if(y.charCodeAt(0)<256){for(l=0;l<C;l++)v=v<<1,A==u-1?(A=0,w.push(f(v)),v=0):A++;for(d=y.charCodeAt(0),l=0;l<8;l++)v=v<<1|d&1,A==u-1?(A=0,w.push(f(v)),v=0):A++,d=d>>1}else{for(d=1,l=0;l<C;l++)v=v<<1|d,A==u-1?(A=0,w.push(f(v)),v=0):A++,d=0;for(d=y.charCodeAt(0),l=0;l<16;l++)v=v<<1|d&1,A==u-1?(A=0,w.push(f(v)),v=0):A++,d=d>>1}b--,b==0&&(b=Math.pow(2,C),C++),delete h[y]}else for(d=p[y],l=0;l<C;l++)v=v<<1|d&1,A==u-1?(A=0,w.push(f(v)),v=0):A++,d=d>>1;b--,b==0&&(b=Math.pow(2,C),C++)}for(d=2,l=0;l<C;l++)v=v<<1|d&1,A==u-1?(A=0,w.push(f(v)),v=0):A++,d=d>>1;for(;;)if(v=v<<1,A==u-1){w.push(f(v));break}else A++;return w.join("")},decompress:function(c){return c==null?"":c==""?null:s._decompress(c.length,32768,function(u){return c.charCodeAt(u)})},_decompress:function(c,u,f){var l=[],d=4,p=4,h=3,m="",g=[],y,b,x,C,w,v,A,D={val:f(0),position:u,index:1};for(y=0;y<3;y+=1)l[y]=y;for(x=0,w=Math.pow(2,2),v=1;v!=w;)C=D.val&D.position,D.position>>=1,D.position==0&&(D.position=u,D.val=f(D.index++)),x|=(C>0?1:0)*v,v<<=1;switch(x){case 0:for(x=0,w=Math.pow(2,8),v=1;v!=w;)C=D.val&D.position,D.position>>=1,D.position==0&&(D.position=u,D.val=f(D.index++)),x|=(C>0?1:0)*v,v<<=1;A=n(x);break;case 1:for(x=0,w=Math.pow(2,16),v=1;v!=w;)C=D.val&D.position,D.position>>=1,D.position==0&&(D.position=u,D.val=f(D.index++)),x|=(C>0?1:0)*v,v<<=1;A=n(x);break;case 2:return""}for(l[3]=A,b=A,g.push(A);;){if(D.index>c)return"";for(x=0,w=Math.pow(2,h),v=1;v!=w;)C=D.val&D.position,D.position>>=1,D.position==0&&(D.position=u,D.val=f(D.index++)),x|=(C>0?1:0)*v,v<<=1;switch(A=x){case 0:for(x=0,w=Math.pow(2,8),v=1;v!=w;)C=D.val&D.position,D.position>>=1,D.position==0&&(D.position=u,D.val=f(D.index++)),x|=(C>0?1:0)*v,v<<=1;l[p++]=n(x),A=p-1,d--;break;case 1:for(x=0,w=Math.pow(2,16),v=1;v!=w;)C=D.val&D.position,D.position>>=1,D.position==0&&(D.position=u,D.val=f(D.index++)),x|=(C>0?1:0)*v,v<<=1;l[p++]=n(x),A=p-1,d--;break;case 2:return g.join("")}if(d==0&&(d=Math.pow(2,h),h++),l[A])m=l[A];else if(A===p)m=b+b.charAt(0);else return null;g.push(m),l[p++]=b+m.charAt(0),d--,b=m,d==0&&(d=Math.pow(2,h),h++)}}};return s}();t!=null&&(t.exports=e)})(tN);function nN(){const t=typeof process<"u"?require("util").TextEncoder:TextEncoder;return new t}let N2;function rN(){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 iN(t){N2??(N2=rN());let e=-1;const n=nN().encode(t);for(let r=0;r<n.length;r++)e=e>>>8^N2[(e^n[r])&255];return(e^-1)>>>0}function L2(t){return("00000000"+iN(t).toString(16)).slice(-8)}function B2(t){const e=rc.compressToEncodedURIComponent(JSON.stringify(t));return"#"+e+L2(e)}function oN(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(L2(e)!==n)throw new Error("The state string in the URL is corrupted.");return JSON.parse(rc.decompressFromEncodedURIComponent(e))}let vr;function aN(t){for(const e of t.genomeSpy.getNamedScaleResolutions().values())e.isZoomable()&&e.resetZoom();t.storeHelper.dispatch([...t.provenance.isUndoable()?[Ht.ActionCreators.jumpToPast(0)]:[],si.actions.restoreDefaultVisibilities()])}async function Md(t,e){try{t.actions&&e.provenance.dispatchBookmark(t.actions),e.storeHelper.dispatch(si.actions.setViewSettings(t.viewSettings));const n=[];for(const[r,i]of Object.entries(t.scaleDomains??{})){const o=e.genomeSpy.getNamedScaleResolutions().get(r);o?n.push(o.zoomTo(i)):console.warn(`Cannot restore scale domain. Unknown name: ${r}`)}await Promise.all(n)}catch(n){console.error(n),He(E`<p>Cannot restore the state:</p><p>${n}</p>`),e.provenance.activateState(0)}}async function Uo(t,e,n={}){await Md(t,e),(vr||t.notes||n.mode=="shared"&&(t.name||t.notes))&&await sN(t,e,n)}async function sN(t,e,n={}){vr??(vr=fr("tour",e.appContainer)),await cN(t,e,n)}async function cN(t,e,n){const r=n.database,i=r?await r.getNames():[],o=i.indexOf(t.name),a=r?` ${o+1} of ${i.length}`:"",s=`${n.mode=="shared"?"Shared bookmark":"Bookmark"}${a}: ${t.name??"Unnamed"}`,c=t.notes?$k(t.notes,{baseUrl:e.genomeSpy.spec.baseUrl}):E`<span class="no-notes">No notes provided</span>`,u=async()=>{if(vr==null||vr.close(),vr=void 0,n.mode=="tour"){const m=n.afterTourBookmark;if(typeof m=="string"){const g=await n.database.get(m);if(!g)throw new Error(`No such bookmark: ${m}`);Md(g,e)}else m===null||aN(e)}},f=async m=>{const g=await r.get(i[m]);Uo(g,e,n),e.appContainer.querySelector("canvas").focus()},l=async()=>{if(await Td(e.localBookmarkDatabase,t,"add"))try{await e.localBookmarkDatabase.put(t)}catch(m){console.warn(m),He(`Cannot import bookmark: ${m}`)}},d=E`<button class="btn" @click="${u}">${n.mode=="tour"?"End tour":"Close"}</button> ${n.mode=="shared"&&e.localBookmarkDatabase?E`<button class="btn" @click="${l}">${K(F1).node[0]} Import bookmark</button>`:z} ${r?E`<button class="btn" @click="${()=>f(o-1)}" ?disabled="${o<=0}">${K(s6).node[0]} Previous</button> <button class="btn" @click="${()=>f(o+1)}" ?disabled="${o>=i.length-1}">Next ${K(A6).node[0]}</button>`:z}`,h=E`<button title="Collapse" class="btn collapse" @click="${m=>m.target.closest(".gs-modal").classList.toggle("collapsed")}">${K(u6).node[0]}</button><div class="modal-title">${s}</div><div class="modal-body markdown" style="max-width:600px">${c}</div><div class="modal-buttons">${d}</div>`;Le(h,vr.content)}function O2(t,e){const n=JSON.stringify(t,void 0,2),r=window.location,i=r.origin+r.pathname+r.search+(e?"#bookmark:"+t.name.replaceAll(" ","-"):B2(t));He(E`<div class="gs-tabs" style="width:600px"><ul class="tabs" @click="${eN}"><li class="active-tab"><button>URL</button></li><li><button>JSON</button></li></ul><div class="panes"><div class="gs-form-group active-tab"><label for="bookmark-url">Here's a link for you:</label><div class="copy-url"><input id="bookmark-url" type="text" .value="${i}"> <button @click="${a=>navigator.clipboard.writeText(i).then(()=>a.target.dispatchEvent(m9())).catch(()=>He("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 link is opened.</small></div><div class="gs-form-group"><textarea id="bookmark-json" style="height:250px">
|
2179
|
+
${n}</textarea> <small>The JSON-formatted bookmark is currently available for development purposes.</small></div></div></div>`,{title:"Share a bookmark",okLabel:"Close"})}function Td(t,e,n){const r={add:"Add bookmark",edit:"Edit bookmark",share:"Share the current view state as a bookmark"}[n],i=(c,u)=>E`<div class="modal-title">${r}</div><div class="modal-body" style="width:500px">${n=="edit"?E`<div class="gs-alert warning">${K(f6).node[0]} The current visualization state will be updated to the bookmark you are editing.</div>`:z} ${n=="share"?E`<div class="gs-alert info">${K(z1).node[0]} <span>You can add an optional title and notes, which will be shown to the recipient when the bookmark link is opened.</span></div>`:z}<div class="gs-form-group"><label for="bookmark-title">Title</label> <input id="bookmark-title" type="text" ?required="${n=="add"||n=="edit"}" .value="${e.name??""}" .placeholder="${n=="share"?"Add an optional title":""}" @change="${f=>{e.name=F2(f.target.value)}}"></div><div class="gs-form-group"><label for="bookmark-notes">Notes</label> <textarea id="bookmark-notes" rows="4" .value="${e.notes??""}" .placeholder="${n=="share"?"... and notes":""}" @change="${f=>{e.notes=F2(f.target.value)}}"></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 btn-cancel" @click="${c}">Cancel</button> <button class="btn btn-primary" @click="${u}">${n=="share"?E`${K(rf).node[0]} Create a link`:"Save"}</button></div>`,o=e.name,a=()=>!!e.name,s=fr();return new Promise(c=>{const u=()=>{s.close(),c(!1)},f=async()=>{if(!a()){He("Name is missing!",{title:"Error"});return}let d=!0;t&&!(n&&e.name==o)&&await t.get(e.name)&&(d=await He(E`A bookmark with the name <em>${e.name}</em> already exists. It will be overwritten.`,{title:"Bookmark already exists",cancelButton:!0})),d&&(s.close(),c(!0))},l=()=>{s.close(),c(!0)};Le(i(u,n=="share"?l:f),s.content),s.content.querySelector("#bookmark-title").focus()})}function F2(t){if(t!==void 0&&(t=t.trim(),t.length))return t}class uN extends yt{constructor(){super(),this.app=void 0}connectedCallback(){super.connectedCallback(),this.dispatchEvent(S2("app",e=>{this.app=e}))}createRenderRoot(){return this}_createBookmarkWithCurrentState(){const e={name:void 0,timestamp:Date.now(),actions:this.app.provenance.getBookmarkableActionHistory(),scaleDomains:{}},n=this.app.storeHelper.state.viewSettings;Object.keys(n.visibilities).length&&(e.viewSettings=n);for(const[r,i]of this.app.genomeSpy.getNamedScaleResolutions().entries())i.isZoomable()&&(e.scaleDomains[r]=i.getComplexDomain());return e}async _shareCurrentState(){const e=this._createBookmarkWithCurrentState();await Td(void 0,e,"share")&&O2(e,!1)}async _addBookmark(e,n){const r=n?await e.get(n):void 0,i=!!r,o=this._createBookmarkWithCurrentState();if(o.name??(o.name=r==null?void 0:r.name),o.notes??(o.notes=r==null?void 0:r.notes),await Td(e,o,i?"edit":"add"))try{await e.put(o,r==null?void 0:r.name),this.requestUpdate()}catch(a){He(`${a}`,{title:"Cannot save the bookmark!"})}}async _loadBookmark(e,n){const r=await e.get(n);r&&Uo(r,this.app,{database:e})}_createContextMenu(e,n,r){r.stopPropagation();const i=r.target.closest("li"),o=()=>He(E`The bookmark <em>${n}</em> will be deleted.`,{title:"Are you sure?",cancelButton:!0}).then(async c=>{c&&(await e.delete(n),this.requestUpdate())}),a=[],s=e==this.app.globalBookmarkDatabase;s||(a.push({label:"Edit and replace...",icon:C6,callback:()=>this._addBookmark(e,n)}),a.push({label:"Delete",icon:j1,callback:o})),a.push({label:"Share...",icon:rf,callback:async()=>O2(await e.get(n),s)}),r2({items:a},i,"right-start")}async _makeBookmarkMenuItems(e,n){const i=(await e.getNames()).map(o=>({label:o,callback:()=>this._loadBookmark(e,o),ellipsisCallback:a=>this._createContextMenu(e,o,a)}));return i.length?[{type:"divider"},{label:n,type:"header"},...i].map(o=>t2(o)):z}_getBookmarks(){const e=(n,r)=>n?Kk(this._makeBookmarkMenuItems(n,r),E`Loading...`):z;return[e(this.app.globalBookmarkDatabase,"Bookmarks on the server"),e(this.app.localBookmarkDatabase,"Bookmarks in the web browser")]}render(){const e=this.app.localBookmarkDatabase,n=e?E`<li><a @click="${()=>this._addBookmark(e)}">Add bookmark...</a></li>`:z,r=e||this.app.globalBookmarkDatabase?E`<div class="dropdown bookmark-dropdown"><button class="tool-btn" title="Bookmarks" @click="${i=>{Sd(i)&&this.requestUpdate()}}">${K(F1).node[0]}</button><ul class="gs-dropdown-menu">${n} ${this._getBookmarks()}</ul></div>`:z;return E`<div class="btn-group">${r} <button class="tool-btn" title="Share" @click="${()=>this._shareCurrentState()}">${K(rf).node[0]}</button></div>`}}customElements.define("genome-spy-bookmark-button",uN);class lN extends yt{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.provenance,n=[];e.isEnabled()&&n.push(E`<genome-spy-provenance-buttons .provenance="${e}"></genome-spy-provenance-buttons>`),n.push(E`<genome-spy-view-visibility></genome-spy-view-visibility>`),n.push(E`<genome-spy-bookmark-button></genome-spy-bookmark-button>`);const r=this.app.config.description?Ze(this.app.config.description):[];return r.length>1&&n.push(E`<button class="tool-btn" title="Show a description of the visualization" @click="${()=>He(E`${r.slice(1).map(i=>E`<p>${i}</p>`)}`,{title:r[0]})}">${K(z1).node[0]}</button>`),r.length>0&&n.push(E`<span class="vis-title">${r[0]}</span>`),n.push(E`<span class="spacer"></span> <a class="version" href="https://github.com/genome-spy/genome-spy/releases/tag/v${C2.version}">v${C2.version}</a> ${this.app.appContainer.requestFullscreen?E`<button class="tool-btn" title="Fullscreen" @click="${()=>this.app.toggleFullScreen()}">${K(w6).node[0]}</button>`:z} <button class="tool-btn" title="Help" @click="${()=>window.open("https://genomespy.app/docs/","_blank")}">${K(p6).node[0]}</button>`),n}render(){const e=this.app.genomeSpy;return E`<nav class="gs-toolbar"><a href="https://genomespy.app" target="_blank" class="logo"><img title="GenomeSpy" alt="GenomeSpy" src="${w2}"> </a>${this.appInitialized&&x2(e.viewRoot)?E`<genome-spy-search-field .app="${this.app}"></genome-spy-search-field>`:z} ${this._getToolButtons()}</nav>`}}customElements.define("genome-spy-toolbar",lN);class fN{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??{})}addReducer(e,n){this._reducers[e]=n;const r=o=>Object.keys(this._reducers).some(a=>o.type.startsWith(a)),i=(o,a)=>r(a)?a:o??null;this._reducer=XI(qf({...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()?[Ht.ActionCreators.jumpToPast(0)]:[],...e])}isRedoable(){return this.isEnabled()&&this._provenanceState.future.length>0}redo(){this.storeHelper.dispatch(Ht.ActionCreators.redo())}isUndoable(){return this.isEnabled()&&this._provenanceState.past.length>0}undo(){this.storeHelper.dispatch(Ht.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(Ht.ActionCreators.jumpToPast(e)):e>n&&this.storeHelper.dispatch(Ht.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*dN(t,e=n=>+n){const n=t.length,r=new Ao,i=new Array(n).fill(0);for(const[a,s]of t.entries())s.length&&r.push(a,e(s[0]));let o=0;for(;(o=r.pop())!==void 0;){const a=t[o];let s=i[o];if(yield a[s++],s<a.length){const u=e(a[s]);r.push(o,u),i[o]=s}}}const hN="sampleCount";class pN extends ue{constructor(e,n){super(),this.view=n;const r=n.context.animator;for(const i of n.getAncestors())i instanceof md&&(this.provenance=i.provenance,this.provenance.storeHelper.subscribe(o=>r.requestTransition(()=>{this.reset(),this._mergeAndPropagate(td(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.getEncoding().x;if(Xn(e))this.xAccessor=q(e.field);else throw new Error("Crash!")}handle(e){}getGlobalObject(){return this.contextObject}_getCollector(){if(this.parent instanceof Xr)return this.parent;throw new Error("MergeFacetsTransform must be a direct child of a Collector")}complete(){this._mergeAndPropagate(this.provenance.getPresentState()[ii]),super.complete()}_mergeAndPropagate(e){const n=[...rd(e.rootGroup)].filter(r=>Tv(Re(r)));for(const[r,i]of n.entries()){const o=Re(i);if(Tv(o)){this.contextObject[hN]=o.samples.length,this.beginBatch({type:"facet",facetId:[r]});const a=o.samples,s=this._getCollector(),c=dN(a.map(u=>s.facetBatches.get([u])??[]),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 be&&n.mark.encoding.y){const r=n.getScaleResolution("y");r&&e.add(r)}});for(const n of e)n.reconfigure()}}var mN="BATCHING_REDUCER.BATCH";function gN(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:mN;return{type:e,meta:{batch:!0},payload:t}}function yN(t){return function e(n,r){return r&&r.meta&&r.meta.batch?r.payload.reduce(e,n):t(n,r)}}class vN{constructor(e){this._reducers=e??{},this.store=rI({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(yN(qf(this._reducers)))}subscribe(e){this._listeners.add(e)}unsubscribe(e){this._listeners.delete(e)}dispatch(e){Array.isArray(e)?this.store.dispatch(gN(e)):this.store.dispatch(e)}getDispatcher(){return e=>this.dispatch(e)}}class bN extends g2{constructor(e){super(),this.bookmarks=e,this.names=e.map(n=>n.name)}async getNames(){return this.names}async get(e){return this.bookmarks.find(n=>n.name==e)}}f1.mergeFacets=pN;class P2{constructor(e,n,r={}){const i=this;this.config=n,this.storeHelper=new vN,this.storeHelper.addReducer("viewSettings",si.reducer),this.provenance=new fN(this.storeHelper),this._initializationListeners=[],this.toolbarRef=b2(),this.appContainer=e,this._configureContainer(),this.localBookmarkDatabase=typeof n.specId=="string"?new Fk(n.specId):void 0,this.globalBookmarkDatabase=void 0,Le(E`<div class="genome-spy-app"><genome-spy-toolbar ${A2(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",s=>{s.detail.name=="app"&&(s.detail.setter(i),s.stopPropagation())});const o=s=>this.appContainer.getElementsByClassName(s)[0];this.genomeSpy=new M1(o("genome-spy-container"),this.config,r),this.genomeSpy.viewFactory.addViewType(Ck,(s,c,u,f)=>new md(s,c,u,f,this.provenance));const a=this.genomeSpy.viewVisibilityPredicate;this.genomeSpy.viewVisibilityPredicate=s=>{var c;return((c=this.storeHelper.state.viewSettings)==null?void 0:c.visibilities[s.name])??a(s)}}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 a;const e=(a=this.config.bookmarks)!=null&&a.remote?Li({baseURL:this.config.baseUrl}).load(this.config.bookmarks.remote.url).then(s=>Promise.resolve(JSON.parse(s))):Promise.resolve([]);if(!await this.genomeSpy.launch())return;this.appContainer.querySelector("canvas").setAttribute("tabindex","-1"),this.storeHelper.subscribe(tc(s=>{var c;return(c=s.viewSettings)==null?void 0:c.visibilities},(s,c)=>{var f,l;this.genomeSpy.viewRoot._invalidateCacheByPrefix("size","progeny"),(l=(f=this.getSampleView())==null?void 0:f.summaryViews)==null||l._invalidateCacheByPrefix("size","self");const u=this.genomeSpy.viewRoot.context;u.requestLayoutReflow(),u.animator.requestRender()},this.storeHelper.store.getState()));try{const s=await e;s.length&&(this.globalBookmarkDatabase=new bN(s))}catch(s){throw new Error(`Cannot load remote bookmarks: ${s}`)}try{await this._restoreStateFromUrlOrBookmark()}catch(s){He(s.toString())}this.storeHelper.subscribe(()=>{this._updateStateToUrl()}),window.addEventListener("hashchange",()=>this._restoreStateFromUrl().catch(s=>He(s.toString())),!1);const r=xs(()=>this._updateStateToUrl(),500,!1);for(const[,s]of this.genomeSpy.getNamedScaleResolutions())s.isZoomable()&&s.addEventListener("domain",r);const i=this.toolbarRef.value;i.appInitialized=!0;const o=Ze(this.genomeSpy.spec.description??[]);this.isFullPage()&&o.length>0&&(document.title="GenomeSpy - "+o);for(const s of this._initializationListeners)s();this._initializationListeners=void 0}async _restoreStateFromUrlOrBookmark(){var i;const e=(i=this.config.bookmarks)==null?void 0:i.remote,n=this.globalBookmarkDatabase;if(!await this._restoreStateFromUrl()&&e&&n){const o=e.initialBookmark??(e.tour&&(await n.getNames())[0]);if(o){const a=await n.get(o);if(!a)throw new Error(`No such bookmark: ${o}`);e.tour?await Uo(a,this,{mode:"tour",database:n,afterTourBookmark:e.afterTourBookmark}):await Md(a,this)}}}_updateStateToUrl(){const e={actions:[],scaleDomains:{}},n=this.provenance.getBookmarkableActionHistory();n!=null&&n.length&&(e.actions=n);for(const[o,a]of this.genomeSpy.getNamedScaleResolutions().entries())a.isZoomed()||(e.scaleDomains[o]=a.getComplexDomain());const r=this.storeHelper.state.viewSettings;Object.keys(r.visibilities).length&&(e.viewSettings=r);const i=e.actions.length||Object.keys(e.scaleDomains).length||e.viewSettings?B2(e):"";window.history.replaceState(void 0,document.title,window.location.pathname+window.location.search+i)}async _restoreStateFromUrl(){var r,i;const e=window.location.hash,n=(r=e.match(/^#bookmark:(.+)$/))==null?void 0:r[1];if(n){const o=(i=this.config.bookmarks)==null?void 0:i.remote,a=this.globalBookmarkDatabase;if(o&&a){const s=(await a.getNames()).find(c=>c.replaceAll(" ","-")==n);if(s){const c=await a.get(s);if(!c)throw new Error(`No such bookmark: ${s}`);return await Uo(c,this,{mode:"tour",database:a}),!0}else throw new Error(`No such bookmark: ${n}`)}}if(e&&e.length>0)try{const o=oN(e);return Uo(o,this,{mode:"shared"}),!0}catch(o){console.error(o),He(E`<p>Cannot restore the state:</p><p>${o}</p>`)}return!1}_configureContainer(){this.isFullPage()?(this.appContainer.style.margin="0",this.appContainer.style.padding="0",this.appContainer.style.overflow="hidden",AN(X5)):this.appContainer.style.position="relative"}getSampleView(){var n;if(!((n=this.genomeSpy)!=null&&n.viewRoot))return;let e;return this.genomeSpy.viewRoot.visit(r=>{if(r instanceof md)return e=r,tr}),e}}function AN(t){const e=document.querySelector("head"),n=document.createElement("link");n.setAttribute("rel","shortcut icon"),n.setAttribute("href",t),e.appendChild(n)}async function xN(t,e,n={}){let r;if(ne(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=Pe(e)?e:await z2(e);o.baseUrl??(o.baseUrl=""),o.width??(o.width="container"),o.padding??(o.padding=10);const a=new P2(r,o,n);i=a.genomeSpy,wN(i,n),await a.launch()}catch(o){r.innerText=o.toString(),console.error(o)}return{finalize(){for(i.destroy();r.firstChild;)r.firstChild.remove()},addEventListener(o,a){const s=i._eventListeners;let c=s.get(o);c||(c=new Set,s.set(o,c)),c.add(a)},removeEventListener(o,a){var c;(c=i._eventListeners.get(o))==null||c.delete(a)},getScaleResolutionByName(o){return i.getNamedScaleResolutions().get(o)}}}function wN(t,e){e.namedDataProvider&&t.registerNamedDataProvider(e.namedDataProvider)}async function z2(t){let e;try{e=JSON.parse(await Li().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}j.GenomeSpy=M1,j.GenomeSpyApp=P2,j.embed=xN,j.html=E,j.icon=w2,j.loadSpec=z2,Object.defineProperty(j,Symbol.toStringTag,{value:"Module"})});
|
package/package.json
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
},
|
8
8
|
"contributors": [],
|
9
9
|
"license": "MIT",
|
10
|
-
"version": "0.28.
|
10
|
+
"version": "0.28.4",
|
11
11
|
"main": "dist/index.js",
|
12
12
|
"files": [
|
13
13
|
"dist/"
|
@@ -37,5 +37,5 @@
|
|
37
37
|
"redux-undo": "^1.0.1",
|
38
38
|
"snarkdown": "^2.0.0"
|
39
39
|
},
|
40
|
-
"gitHead": "
|
40
|
+
"gitHead": "249dcffa90761fe7b089b11e76bab0496ec5e2e8"
|
41
41
|
}
|