@benev/tact 0.2.0-0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +6 -6
- package/x/demo/main.bundle.min.js +48 -37
- package/x/demo/main.bundle.min.js.map +4 -4
- package/x/index.html +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
var
|
|
2
|
-
\f\r]`,
|
|
3
|
-
\f\r"'\`<>=]|("|')|))|$)`,"g"),Vr=/'/g,Wr=/"/g,Kr=/^(?:script|style|textarea|title)$/i,br=r=>(t,...e)=>({_$litType$:r,strings:t,values:e}),w=br(1),Io=br(2),Uo=br(3),F=Symbol.for("lit-noChange"),k=Symbol.for("lit-nothing"),Gr=new WeakMap,nt=at.createTreeWalker(at,129);function Jr(r,t){if(!xr(r)||!r.hasOwnProperty("raw"))throw Error("invalid template strings array");return qr!==void 0?qr.createHTML(t):t}var Yr=(r,t)=>{let e=r.length-1,s=[],o,i=t===2?"<svg>":t===3?"<math>":"",n=Ft;for(let a=0;a<e;a++){let c=r[a],l,h,u=-1,p=0;for(;p<c.length&&(n.lastIndex=p,h=n.exec(c),h!==null);)p=n.lastIndex,n===Ft?h[1]==="!--"?n=Ir:h[1]!==void 0?n=Ur:h[2]!==void 0?(Kr.test(h[2])&&(o=RegExp("</"+h[2],"g")),n=it):h[3]!==void 0&&(n=it):n===it?h[0]===">"?(n=o??Ft,u=-1):h[1]===void 0?u=-2:(u=n.lastIndex-h[2].length,l=h[1],n=h[3]===void 0?it:h[3]==='"'?Wr:Vr):n===Wr||n===Vr?n=it:n===Ir||n===Ur?n=Ft:(n=it,o=void 0);let f=n===it&&r[a+1].startsWith("/>")?" ":"";i+=n===Ft?c+io:u>=0?(s.push(l),c.slice(0,u)+gr+c.slice(u)+G+f):c+G+(u===-2?a:f)}return[Jr(r,i+(r[e]||"<?>")+(t===2?"</svg>":t===3?"</math>":"")),s]},Yt=class r{constructor({strings:t,_$litType$:e},s){let o;this.parts=[];let i=0,n=0,a=t.length-1,c=this.parts,[l,h]=Yr(t,e);if(this.el=r.createElement(l,s),nt.currentNode=this.el.content,e===2||e===3){let u=this.el.content.firstChild;u.replaceWith(...u.childNodes)}for(;(o=nt.nextNode())!==null&&c.length<a;){if(o.nodeType===1){if(o.hasAttributes())for(let u of o.getAttributeNames())if(u.endsWith(gr)){let p=h[n++],f=o.getAttribute(u).split(G),d=/([.?@])?(.*)/.exec(p);c.push({type:1,index:i,name:d[2],strings:f,ctor:d[1]==="."?fe:d[1]==="?"?ge:d[1]==="@"?ye:lt}),o.removeAttribute(u)}else u.startsWith(G)&&(c.push({type:6,index:i}),o.removeAttribute(u));if(Kr.test(o.tagName)){let u=o.textContent.split(G),p=u.length-1;if(p>0){o.textContent=me?me.emptyScript:"";for(let f=0;f<p;f++)o.append(u[f],Kt()),nt.nextNode(),c.push({type:2,index:++i});o.append(u[p],Kt())}}}else if(o.nodeType===8)if(o.data===yr)c.push({type:2,index:i});else{let u=-1;for(;(u=o.data.indexOf(G,u+1))!==-1;)c.push({type:7,index:i}),u+=G.length-1}i++}}static createElement(t,e){let s=at.createElement("template");return s.innerHTML=t,s}};function ct(r,t,e=r,s){if(t===F)return t;let o=s!==void 0?e._$Co?.[s]:e._$Cl,i=Jt(t)?void 0:t._$litDirective$;return o?.constructor!==i&&(o?._$AO?.(!1),i===void 0?o=void 0:(o=new i(r),o._$AT(r,e,s)),s!==void 0?(e._$Co??=[])[s]=o:e._$Cl=o),o!==void 0&&(t=ct(r,o._$AS(r,t.values),o,s)),t}var de=class{constructor(t,e){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=e}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){let{el:{content:e},parts:s}=this._$AD,o=(t?.creationScope??at).importNode(e,!0);nt.currentNode=o;let i=nt.nextNode(),n=0,a=0,c=s[0];for(;c!==void 0;){if(n===c.index){let l;c.type===2?l=new wt(i,i.nextSibling,this,t):c.type===1?l=new c.ctor(i,c.name,c.strings,this,t):c.type===6&&(l=new xe(i,this,t)),this._$AV.push(l),c=s[++a]}n!==c?.index&&(i=nt.nextNode(),n++)}return nt.currentNode=at,o}p(t){let e=0;for(let s of this._$AV)s!==void 0&&(s.strings!==void 0?(s._$AI(t,s,e),e+=s.strings.length-2):s._$AI(t[e])),e++}},wt=class r{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,e,s,o){this.type=2,this._$AH=k,this._$AN=void 0,this._$AA=t,this._$AB=e,this._$AM=s,this.options=o,this._$Cv=o?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode,e=this._$AM;return e!==void 0&&t?.nodeType===11&&(t=e.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,e=this){t=ct(this,t,e),Jt(t)?t===k||t==null||t===""?(this._$AH!==k&&this._$AR(),this._$AH=k):t!==this._$AH&&t!==F&&this._(t):t._$litType$!==void 0?this.$(t):t.nodeType!==void 0?this.T(t):Fr(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==k&&Jt(this._$AH)?this._$AA.nextSibling.data=t:this.T(at.createTextNode(t)),this._$AH=t}$(t){let{values:e,_$litType$:s}=t,o=typeof s=="number"?this._$AC(t):(s.el===void 0&&(s.el=Yt.createElement(Jr(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===o)this._$AH.p(e);else{let i=new de(o,this),n=i.u(this.options);i.p(e),this.T(n),this._$AH=i}}_$AC(t){let e=Gr.get(t.strings);return e===void 0&&Gr.set(t.strings,e=new Yt(t)),e}k(t){xr(this._$AH)||(this._$AH=[],this._$AR());let e=this._$AH,s,o=0;for(let i of t)o===e.length?e.push(s=new r(this.O(Kt()),this.O(Kt()),this,this.options)):s=e[o],s._$AI(i),o++;o<e.length&&(this._$AR(s&&s._$AB.nextSibling,o),e.length=o)}_$AR(t=this._$AA.nextSibling,e){for(this._$AP?.(!1,!0,e);t!==this._$AB;){let s=t.nextSibling;t.remove(),t=s}}setConnected(t){this._$AM===void 0&&(this._$Cv=t,this._$AP?.(t))}},lt=class{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,e,s,o,i){this.type=1,this._$AH=k,this._$AN=void 0,this.element=t,this.name=e,this._$AM=o,this.options=i,s.length>2||s[0]!==""||s[1]!==""?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=k}_$AI(t,e=this,s,o){let i=this.strings,n=!1;if(i===void 0)t=ct(this,t,e,0),n=!Jt(t)||t!==this._$AH&&t!==F,n&&(this._$AH=t);else{let a=t,c,l;for(t=i[0],c=0;c<i.length-1;c++)l=ct(this,a[s+c],e,c),l===F&&(l=this._$AH[c]),n||=!Jt(l)||l!==this._$AH[c],l===k?t=k:t!==k&&(t+=(l??"")+i[c+1]),this._$AH[c]=l}n&&!o&&this.j(t)}j(t){t===k?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??"")}},fe=class extends lt{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===k?void 0:t}},ge=class extends lt{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==k)}},ye=class extends lt{constructor(t,e,s,o,i){super(t,e,s,o,i),this.type=5}_$AI(t,e=this){if((t=ct(this,t,e,0)??k)===F)return;let s=this._$AH,o=t===k&&s!==k||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,i=t!==k&&(s===k||o);o&&this.element.removeEventListener(this.name,this,s),i&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){typeof this._$AH=="function"?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}},xe=class{constructor(t,e,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=e,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){ct(this,t)}},Xr={M:gr,P:G,A:yr,C:1,L:Yr,R:de,D:Fr,V:ct,I:wt,H:lt,N:ge,U:ye,B:fe,F:xe},no=fr.litHtmlPolyfillSupport;no?.(Yt,wt),(fr.litHtmlVersions??=[]).push("3.3.1");var C=(r,t,e)=>{let s=e?.renderBefore??t,o=s._$litPart$;if(o===void 0){let i=e?.renderBefore??null;s._$litPart$=o=new wt(t.insertBefore(Kt(),i),i,void 0,e??{})}return o._$AI(r),o};var wr=globalThis,vt=class extends W{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){let t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){let e=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=C(e,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return F}};vt._$litElement$=!0,vt.finalized=!0,wr.litElementHydrateSupport?.({LitElement:vt});var ao=wr.litElementPolyfillSupport;ao?.({LitElement:vt});(wr.litElementVersions??=[]).push("4.2.1");var z={string:(r,t)=>r.getAttribute(t)??void 0,number:(r,t)=>{let e=r.getAttribute(t);return e===null||!e?void 0:Number(e)},boolean:(r,t)=>r.getAttribute(t)!==null},M={string:(r,t,e)=>(e===void 0?r.removeAttribute(t):r.setAttribute(t,e),!0),number:(r,t,e)=>(e===void 0?r.removeAttribute(t):r.setAttribute(t,e.toString()),!0),boolean:(r,t,e)=>(e?r.setAttribute(t,""):r.removeAttribute(t),!0),any:(r,t,e)=>{e==null?r.removeAttribute(t):typeof e=="string"?r.setAttribute(t,e):typeof e=="number"?r.setAttribute(t,e.toString()):typeof e=="boolean"?e===!0?r.setAttribute(t,""):r.removeAttribute(t):console.warn(`invalid attribute "${t}" type is "${typeof e}"`)},entries:(r,t)=>{for(let[e,s]of t)M.any(r,e,s)},record:(r,t)=>M.entries(r,Object.entries(t))};function Zr(r,t={}){let e=document.createElement(r);return M.record(e,t),e}function Qr(r){let t=document.createDocumentFragment();return C(r,t),t.firstElementChild}function be(r,t){let e=[];for(let[s,o]of Object.entries(t))if(typeof o=="function")r.addEventListener(s,o),e.push(()=>r.removeEventListener(s,o));else{let[i,n]=o;r.addEventListener(s,n,i),e.push(()=>r.removeEventListener(s,n))}return()=>e.forEach(s=>s())}function ts(r,t){let e=new MutationObserver(t);return e.observe(r,{attributes:!0}),()=>e.disconnect()}var we=class{element;constructor(t){this.element=t}strings=new Proxy({},{get:(t,e)=>z.string(this.element,e),set:(t,e,s)=>M.string(this.element,e,s)});numbers=new Proxy({},{get:(t,e)=>z.number(this.element,e),set:(t,e,s)=>M.number(this.element,e,s)});booleans=new Proxy({},{get:(t,e)=>z.boolean(this.element,e),set:(t,e,s)=>M.boolean(this.element,e,s)})};var es=(r,t,e={})=>new Proxy(t,{get:(s,o)=>{switch(t[o]){case String:return z.string(r,o);case Number:return z.number(r,o);case Boolean:return z.boolean(r,o);default:throw new Error(`invalid attribute type for "${o}"`)}},set:(s,o,i)=>{try{switch(e.beforeSet?.(o),t[o]){case String:return M.string(r,o,i);case Number:return M.number(r,o,i);case Boolean:return M.boolean(r,o,i);default:throw new Error(`invalid attribute type for "${o}"`)}}finally{e.afterSet?.(o)}}});function $t(r){let t=new we(r);return{strings:t.strings,numbers:t.numbers,booleans:t.booleans,on:e=>ts(r,e),spec:(e,s={})=>es(r,e,s)}}$t.get=z;$t.set=M;function rs(r){return new vr(r)}var vr=class{tagName;#t=new Map;#e=[];constructor(t){this.tagName=t}attr(t,e=!0){return this.#t.set(t,e),this}attrs(t){for(let[e,s]of Object.entries(t))this.attr(e,s);return this}children(...t){return this.#e.push(...t),this}done(){let t=document.createElement(this.tagName);return M.entries(t,this.#t),t.append(...this.#e),t}};function St(r,t=document){let e=t.querySelector(r);if(!e)throw new Error(`element not found (${r})`);return e}function ve(r,t=document){return t.querySelector(r)}function $e(r,t=document){return Array.from(t.querySelectorAll(r))}var Se=class r{element;#t;constructor(t){this.element=t}in(t){return new r(typeof t=="string"?St(t,this.element):t)}require(t){return St(t,this.element)}maybe(t){return ve(t,this.element)}all(t){return $e(t,this.element)}render(...t){return C(t,this.element)}get attrs(){return this.#t??=$t(this.element)}events(t){return be(this.element,t)}};function ss(r){return r.replace(/([a-zA-Z])(?=[A-Z])/g,"$1-").toLowerCase()}function os(r,t={}){let{soft:e=!1,upgrade:s=!0}=t;for(let[o,i]of Object.entries(r)){let n=ss(o),a=customElements.get(n);e&&a||(customElements.define(n,i),s&&document.querySelectorAll(n).forEach(c=>{c.constructor===HTMLElement&&customElements.upgrade(c)}))}}function v(r,t=document){return St(r,t)}v.in=(r,t=document)=>new Se(t).in(r);v.require=St;v.maybe=ve;v.all=$e;v.el=Zr;v.elmer=rs;v.mk=Qr;v.events=be;v.attrs=$t;v.register=os;v.render=(r,...t)=>C(t,r);var kt=Object.freeze({eq(r,t){if(r.length!==t.length)return!1;let e=0;for(let s=0;s<r.length;s++)e|=r[s]^t[s];return e===0},random(r){return crypto.getRandomValues(new Uint8Array(r))}});var _=class{lexicon;static lexicons=Object.freeze({base2:{characters:"01"},hex:{characters:"0123456789abcdef",caseInsensitive:!0},base36:{characters:"0123456789abcdefghijklmnopqrstuvwxyz"},base58:{characters:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"},base62:{characters:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"},base64url:{negativePrefix:"~",characters:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"},base64:{characters:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",padding:{character:"=",size:4}}});lookup;negativePrefix;constructor(t){this.lexicon=t,this.lookup=Object.fromEntries([...t.characters].map((s,o)=>[s,o])),this.negativePrefix=t.negativePrefix??"-";let e=this.fromBytes.bind(this);return Object.setPrototypeOf(e,new.target.prototype),Object.assign(e,this),e}toBytes(t){this.lexicon.caseInsensitive&&(t=t.toLowerCase());let e=Math.log2(this.lexicon.characters.length);if(Number.isInteger(e)){let a=0,c=0,l=[];for(let h of t){if(h===this.lexicon.padding?.character)continue;let u=this.lookup[h];if(u===void 0)throw new Error(`Invalid character: ${h}`);for(a=a<<e|u,c+=e;c>=8;)c-=8,l.push(a>>c&255)}return new Uint8Array(l)}let s=0n,o=BigInt(this.lexicon.characters.length),i=!1;t.startsWith(this.negativePrefix)&&(t=t.slice(this.negativePrefix.length),i=!0);for(let a of t){let c=this.lookup[a];if(c===void 0)throw new Error(`Invalid character: ${a}`);s=s*o+BigInt(c)}let n=[];for(;s>0n;)n.unshift(Number(s%256n)),s=s/256n;return new Uint8Array(n)}fromBytes(t){let e=Math.log2(this.lexicon.characters.length);if(Number.isInteger(e)){let n=0,a=0,c="";for(let l of t)for(n=n<<8|l,a+=8;a>=e;){a-=e;let h=n>>a&(1<<e)-1;c+=this.lexicon.characters[h]}if(a>0){let l=n<<e-a&(1<<e)-1;c+=this.lexicon.characters[l]}if(this.lexicon.padding)for(;c.length%this.lexicon.padding.size!==0;)c+=this.lexicon.padding.character;return c}let s=0n;for(let n of t)s=(s<<8n)+BigInt(n);if(s===0n)return this.lexicon.characters[0];let o=BigInt(this.lexicon.characters.length),i="";for(;s>0n;)i=this.lexicon.characters[Number(s%o)]+i,s=s/o;return i}toInteger(t){if(!t)return 0;let e=0n,s=!1,o=BigInt(this.lexicon.characters.length);t.startsWith(this.negativePrefix)&&(t=t.slice(this.negativePrefix.length),s=!0);for(let i of t){let n=this.lookup[i];if(n===void 0)throw new Error(`Invalid character: ${i}`);e=e*o+BigInt(n)}return Number(s?-e:e)}fromInteger(t){t=Math.floor(t);let e=t<0,s=BigInt(e?-t:t);if(s===0n)return this.lexicon.characters[0];let o=BigInt(this.lexicon.characters.length),i="";for(;s>0n;)i=this.lexicon.characters[Number(s%o)]+i,s=s/o;return e?`${this.negativePrefix}${i}`:i}random(t=32){return this.fromBytes(kt.random(t))}};var $r=new _(_.lexicons.hex),Gi=new _(_.lexicons.base2),Fi=new _(_.lexicons.base36),Ki=new _(_.lexicons.base58),Ji=new _(_.lexicons.base62),Yi=new _(_.lexicons.base64),Xi=new _(_.lexicons.base64url);var Sr=["doz","mar","bin","wan","sam","lit","sig","hid","fid","lis","sog","dir","wac","sab","wis","sib","rig","sol","dop","mod","fog","lid","hop","dar","dor","lor","hod","fol","rin","tog","sil","mir","hol","pas","lac","rov","liv","dal","sat","lib","tab","han","tic","pid","tor","bol","fos","dot","los","dil","for","pil","ram","tir","win","tad","bic","dif","roc","wid","bis","das","mid","lop","ril","nar","dap","mol","san","loc","nov","sit","nid","tip","sic","rop","wit","nat","pan","min","rit","pod","mot","tam","tol","sav","pos","nap","nop","som","fin","fon","ban","mor","wor","sip","ron","nor","bot","wic","soc","wat","dol","mag","pic","dav","bid","bal","tim","tas","mal","lig","siv","tag","pad","sal","div","dac","tan","sid","fab","tar","mon","ran","nis","wol","mis","pal","las","dis","map","rab","tob","rol","lat","lon","nod","nav","fig","nom","nib","pag","sop","ral","bil","had","doc","rid","moc","pac","rav","rip","fal","tod","til","tin","hap","mic","fan","pat","tac","lab","mog","sim","son","pin","lom","ric","tap","fir","has","bos","bat","poc","hac","tid","hav","sap","lin","dib","hos","dab","bit","bar","rac","par","lod","dos","bor","toc","hil","mac","tom","dig","fil","fas","mit","hob","har","mig","hin","rad","mas","hal","rag","lag","fad","top","mop","hab","nil","nos","mil","fop","fam","dat","nol","din","hat","nac","ris","fot","rib","hoc","nim","lar","fit","wal","rap","sar","nal","mos","lan","don","dan","lad","dov","riv","bac","pol","lap","tal","pit","nam","bon","ros","ton","fod","pon","sov","noc","sor","lav","mat","mip","fip"];var kr=["zod","nec","bud","wes","sev","per","sut","let","ful","pen","syt","dur","wep","ser","wyl","sun","ryp","syx","dyr","nup","heb","peg","lup","dep","dys","put","lug","hec","ryt","tyv","syd","nex","lun","mep","lut","sep","pes","del","sul","ped","tem","led","tul","met","wen","byn","hex","feb","pyl","dul","het","mev","rut","tyl","wyd","tep","bes","dex","sef","wyc","bur","der","nep","pur","rys","reb","den","nut","sub","pet","rul","syn","reg","tyd","sup","sem","wyn","rec","meg","net","sec","mul","nym","tev","web","sum","mut","nyx","rex","teb","fus","hep","ben","mus","wyx","sym","sel","ruc","dec","wex","syr","wet","dyl","myn","mes","det","bet","bel","tux","tug","myr","pel","syp","ter","meb","set","dut","deg","tex","sur","fel","tud","nux","rux","ren","wyt","nub","med","lyt","dus","neb","rum","tyn","seg","lyx","pun","res","red","fun","rev","ref","mec","ted","rus","bex","leb","dux","ryn","num","pyx","ryg","ryx","fep","tyr","tus","tyc","leg","nem","fer","mer","ten","lus","nus","syl","tec","mex","pub","rym","tuc","fyl","lep","deb","ber","mug","hut","tun","byl","sud","pem","dev","lur","def","bus","bep","run","mel","pex","dyt","byt","typ","lev","myl","wed","duc","fur","fex","nul","luc","len","ner","lex","rup","ned","lec","ryd","lyd","fen","wel","nyd","hus","rel","rud","nes","hes","fet","des","ret","dun","ler","nyr","seb","hul","ryl","lud","rem","lys","fyn","wer","ryc","sug","nys","nyl","lyn","dyn","dem","lux","fed","sed","bec","mun","lyr","tes","mud","nyt","byr","sen","weg","fyr","mur","tel","rep","teg","pec","nel","nev","fes"];var ut={defaults:{groupSize:4,wordSeparator:".",groupSeparator:" "},random(r,t){let e=kt.random(r);return this.fromBytes(e,t)},fromBytes(r,t={}){let{groupSize:e=ut.defaults.groupSize,wordSeparator:s=ut.defaults.wordSeparator,groupSeparator:o=ut.defaults.groupSeparator}=t,i=[],n=[];r.forEach((c,l)=>{let h=l%2===0?Sr:kr;n.push(h[c]),n.length===2&&(i.push(n.join("")),n=[])}),n.length&&i.push(n.join(""));let a=[];for(let c=0;c<i.length;c+=e)a.push(i.slice(c,c+e).join(s));return a.join(o)},toBytes(r){let t=r.toLowerCase().replace(/[^a-z]/g,"");if(t.length/3%1!==0)throw new Error(`invalid triplet count, ${t.length} does not divide into triplets`);let s=[];for(let o=0;o<t.length;o+=3)s.push(t.slice(o,o+3));return new Uint8Array(s.map((o,i)=>{let a=(i%2===0?Sr:kr).findIndex(c=>c===o);if(a===-1)throw new Error(`unknown triplet ${o}`);return a}))},toHex(r){return $r.fromBytes(ut.toBytes(r))},fromHex(r,t){return ut.fromBytes($r.toBytes(r),t)}};var At=Object.freeze({fromBytes(r){return[...r].map(t=>t.toString(16).padStart(2,"0")).join("")},toBytes(r){if(r.length%2!==0)throw new Error("must have even number of hex characters");let t=new Uint8Array(r.length/2);for(let e=0;e<r.length;e+=2)t[e/2]=parseInt(r.slice(e,e+2),16);return t},random(r=32){return this.fromBytes(kt.random(r))},string(r){return At.fromBytes(r)},bytes(r){return At.toBytes(r)}});function ke(r,t){let e,s,o=[];function i(){e=[],s&&clearTimeout(s),s=void 0,o=[]}return i(),((...n)=>{e=n,s&&clearTimeout(s);let a=new Promise((c,l)=>{o.push({resolve:c,reject:l})});return s=setTimeout(()=>{Promise.resolve().then(()=>t(...e)).then(c=>{for(let{resolve:l}of o)l(c);i()}).catch(c=>{for(let{reject:l}of o)l(c);i()})},r),a})}function ht(){let r,t,e=new Promise((o,i)=>{r=o,t=i});function s(o){return o.then(r).catch(t),e}return{promise:e,resolve:r,reject:t,entangle:s}}function _t(r){let t=null;return((...e)=>(t?t.params=e:(t={params:e,deferred:ht()},queueMicrotask(()=>{let{params:s,deferred:o}=t;t=null,Promise.resolve(r(...s)).then(o.resolve).catch(o.reject)})),t.deferred.promise))}var B={};Ys(B,{clone:()=>Xt,equal:()=>co,freeze:()=>lo});function Xt(r,t=new Set){if(t.has(r))throw new Error("cannot clone circular reference");let e;return typeof r=="function"||r!==null&&typeof r=="object"?(t.add(r),Array.isArray(r)?e=r.map(s=>Xt(s,new Set(t))):r.constructor===Object?e=Object.fromEntries(Object.entries(r).map(([s,o])=>[s,Xt(o,new Set(t))])):r instanceof Map?e=new Map(Array.from(r,([s,o])=>[s,Xt(o,new Set(t))])):r instanceof Set?e=new Set(Array.from(r,s=>Xt(s,new Set(t)))):r instanceof Date?e=new Date(r.getTime()):e=r,t.delete(r)):e=r,e}var Zt=Object.freeze({happy:r=>r!=null,sad:r=>r==null,boolean:r=>typeof r=="boolean",number:r=>typeof r=="number",string:r=>typeof r=="string",bigint:r=>typeof r=="bigint",object:r=>typeof r=="object"&&r!==null,array:r=>Array.isArray(r),fn:r=>typeof r=="function",symbol:r=>typeof r=="symbol"});var co=(r,t)=>{function e(s,o,i){if(!Zt.object(s)||!Zt.object(o))return s===o;if(i.includes(s))throw new Error("forbidden circularity detected in deep equal comparison");let n=[...i,s];if(s instanceof Map&&o instanceof Map){if(s.size!==o.size)return!1;for(let[a,c]of s)if(!o.has(a)||!e(c,o.get(a),n))return!1}else if(s instanceof Set&&o instanceof Set){if(s.size!==o.size)return!1;for(let a of s)if(!Array.from(o).some(c=>e(a,c,n)))return!1}else{let a=Object.keys(s),c=Object.keys(o);if(a.length!==c.length)return!1;for(let l of a)if(!c.includes(l)||!e(s[l],o[l],n))return!1}return!0}return e(r,t,[])};function lo(r){function t(e,s){if(!Zt.object(e)||s.includes(e))return e;let o=[...s,e];if(e instanceof Map)for(let i of e.entries())for(let n of i)t(n,o);else if(e instanceof Set)for(let i of e)t(i,o);else if(Array.isArray(e))for(let i of e)t(i,o);else for(let i of Object.values(e))t(i,o);return Object.freeze(e)}return t(r,[])}var K=class r extends Map{static require(t,e){if(t.has(e))return t.get(e);throw new Error(`required key not found: "${e}"`)}static guarantee(t,e,s){if(t.has(e))return t.get(e);{let o=s();return t.set(e,o),o}}array(){return[...this]}require(t){return r.require(this,t)}guarantee(t,e){return r.guarantee(this,t,e)}},X=K;var Ar=class extends Set{array(){return[...this]}hasAll(...t){return t.every(e=>this.has(e))}adds(...t){for(let e of t)this.add(e);return this}deletes(...t){for(let e of t)this.delete(e);return this}clear(){return super.clear(),this}},Ae=Ar;var _r=class r extends WeakMap{static require(t,e){if(t.has(e))return t.get(e);throw new Error("required key not found")}static guarantee(t,e,s){if(t.has(e))return t.get(e);{let o=s();return t.set(e,o),o}}require(t){return r.require(this,t)}guarantee(t,e){return r.guarantee(this,t,e)}},is=_r;function ns(...r){return(...t)=>r.forEach(e=>e(...t))}function*uo(r){for(let t=0;t<r;t++)yield t}function _e(r){return[...uo(r)]}function Mr(r){let t,e=!1,s=()=>{e=!0,clearTimeout(t)},o=async()=>{e||(await r(s),!e&&(t=setTimeout(o,0)))};return o(),s}var as=Mr;var Me=class{getRefill;#t=[];constructor(t){this.getRefill=t,this.#e()}get currentStock(){return[...this.#t]}#e(){if(this.#t.length===0&&(this.#t=[...this.getRefill()]),this.#t.length===0)throw new Error("dispenser's getRefill returned an empty array")}takeAll(){let t=this.#t;return this.#t=[...this.getRefill()],t}takeRandom(){this.#e();let t=Math.floor(Math.random()*this.#t.length),[e]=this.#t.splice(t,1);return e}takeFirst(){return this.#e(),this.#t.shift()}takeLast(){return this.#e(),this.#t.pop()}shift=this.takeFirst.bind(this);pop=this.takeLast.bind(this)};function D(){let r=[];function t(){for(let e of r)e();r=[]}return t.schedule=(...e)=>(r.push(...e),t),t}function pt(r,t){let e=Object.entries(t);for(let[s,o]of e)r.addEventListener(s,o);return()=>{for(let[s,o]of e)r.removeEventListener(s,o)}}var Mt=(r=0)=>new Promise(t=>setTimeout(t,r));function ho(r){return{map:t=>Qt(r,t),filter:t=>cs(r,t)}}ho.pipe=Object.freeze({map:r=>(t=>Qt(t,r)),filter:r=>(t=>cs(t,r))});var Qt=(r,t)=>Object.fromEntries(Object.entries(r).map(([e,s])=>[e,t(s,e)])),cs=(r,t)=>Object.fromEntries(Object.entries(r).filter(([e,s])=>t(s,e)));function Pr(r){return new Er(r)}var Er=class r{#t;static with=Pr;constructor(t){this.#t=t}to(t){return new r(t(this.#t))}done(){return this.#t}line(...t){let e=this.#t;for(let s of t)e=s(e);return e}};function ls(){let r=new Set;async function t(...c){await Promise.all([...r].map(l=>l(...c)))}function e(c){return r.add(c),()=>{r.delete(c)}}async function s(...c){return t(...c)}function o(c){return e(c)}async function i(c){let{promise:l,resolve:h}=ht(),u=o(async(...p)=>{c&&await c(...p),h(p),u()});return l}function n(){r.clear()}let a={pub:s,sub:o,publish:t,subscribe:e,on:e,next:i,clear:n};return Object.assign(o,a),Object.assign(s,a),a}function E(r){let t=ls();return r&&t.sub(r),t.sub}function us(r){let t=ls();return r&&t.sub(r),t.pub}var R=A`
|
|
1
|
+
var io=Object.defineProperty;var no=(r,t)=>{for(var e in t)io(r,e,{get:t[e],enumerable:!0})};var de=globalThis,ge=de.ShadowRoot&&(de.ShadyCSS===void 0||de.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,gr=Symbol(),Lr=new WeakMap,Jt=class{constructor(t,e,s){if(this._$cssResult$=!0,s!==gr)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=t,this.t=e}get styleSheet(){let t=this.o,e=this.t;if(ge&&t===void 0){let s=e!==void 0&&e.length===1;s&&(t=Lr.get(e)),t===void 0&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),s&&Lr.set(e,t))}return t}toString(){return this.cssText}},Hr=r=>new Jt(typeof r=="string"?r:r+"",void 0,gr),w=(r,...t)=>{let e=r.length===1?r[0]:t.reduce(((s,o,i)=>s+(n=>{if(n._$cssResult$===!0)return n.cssText;if(typeof n=="number")return n;throw Error("Value passed to 'css' function must be a 'css' function result: "+n+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(o)+r[i+1]),r[0]);return new Jt(e,r,gr)},ye=(r,t)=>{if(ge)r.adoptedStyleSheets=t.map((e=>e instanceof CSSStyleSheet?e:e.styleSheet));else for(let e of t){let s=document.createElement("style"),o=de.litNonce;o!==void 0&&s.setAttribute("nonce",o),s.textContent=e.cssText,r.appendChild(s)}},At=ge?r=>r:r=>r instanceof CSSStyleSheet?(t=>{let e="";for(let s of t.cssRules)e+=s.cssText;return Hr(e)})(r):r;var{is:ao,defineProperty:co,getOwnPropertyDescriptor:lo,getOwnPropertyNames:uo,getOwnPropertySymbols:po,getPrototypeOf:ho}=Object,xe=globalThis,qr=xe.trustedTypes,mo=qr?qr.emptyScript:"",fo=xe.reactiveElementPolyfillSupport,Yt=(r,t)=>r,yr={toAttribute(r,t){switch(t){case Boolean:r=r?mo:null;break;case Object:case Array:r=r==null?r:JSON.stringify(r)}return r},fromAttribute(r,t){let e=r;switch(t){case Boolean:e=r!==null;break;case Number:e=r===null?null:Number(r);break;case Object:case Array:try{e=JSON.parse(r)}catch{e=null}}return e}},Ur=(r,t)=>!ao(r,t),Ir={attribute:!0,type:String,converter:yr,reflect:!1,useDefault:!1,hasChanged:Ur};Symbol.metadata??=Symbol("metadata"),xe.litPropertyMetadata??=new WeakMap;var J=class extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,e=Ir){if(e.state&&(e.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((e=Object.create(e)).wrapped=!0),this.elementProperties.set(t,e),!e.noAccessor){let s=Symbol(),o=this.getPropertyDescriptor(t,s,e);o!==void 0&&co(this.prototype,t,o)}}static getPropertyDescriptor(t,e,s){let{get:o,set:i}=lo(this.prototype,t)??{get(){return this[e]},set(n){this[e]=n}};return{get:o,set(n){let a=o?.call(this);i?.call(this,n),this.requestUpdate(t,a,s)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??Ir}static _$Ei(){if(this.hasOwnProperty(Yt("elementProperties")))return;let t=ho(this);t.finalize(),t.l!==void 0&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(Yt("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(Yt("properties"))){let e=this.properties,s=[...uo(e),...po(e)];for(let o of s)this.createProperty(o,e[o])}let t=this[Symbol.metadata];if(t!==null){let e=litPropertyMetadata.get(t);if(e!==void 0)for(let[s,o]of e)this.elementProperties.set(s,o)}this._$Eh=new Map;for(let[e,s]of this.elementProperties){let o=this._$Eu(e,s);o!==void 0&&this._$Eh.set(o,e)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(t){let e=[];if(Array.isArray(t)){let s=new Set(t.flat(1/0).reverse());for(let o of s)e.unshift(At(o))}else t!==void 0&&e.push(At(t));return e}static _$Eu(t,e){let s=e.attribute;return s===!1?void 0:typeof s=="string"?s:typeof t=="string"?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise((t=>this.enableUpdating=t)),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach((t=>t(this)))}addController(t){(this._$EO??=new Set).add(t),this.renderRoot!==void 0&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){let t=new Map,e=this.constructor.elementProperties;for(let s of e.keys())this.hasOwnProperty(s)&&(t.set(s,this[s]),delete this[s]);t.size>0&&(this._$Ep=t)}createRenderRoot(){let t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return ye(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach((t=>t.hostConnected?.()))}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach((t=>t.hostDisconnected?.()))}attributeChangedCallback(t,e,s){this._$AK(t,s)}_$ET(t,e){let s=this.constructor.elementProperties.get(t),o=this.constructor._$Eu(t,s);if(o!==void 0&&s.reflect===!0){let i=(s.converter?.toAttribute!==void 0?s.converter:yr).toAttribute(e,s.type);this._$Em=t,i==null?this.removeAttribute(o):this.setAttribute(o,i),this._$Em=null}}_$AK(t,e){let s=this.constructor,o=s._$Eh.get(t);if(o!==void 0&&this._$Em!==o){let i=s.getPropertyOptions(o),n=typeof i.converter=="function"?{fromAttribute:i.converter}:i.converter?.fromAttribute!==void 0?i.converter:yr;this._$Em=o;let a=n.fromAttribute(e,i.type);this[o]=a??this._$Ej?.get(o)??a,this._$Em=null}}requestUpdate(t,e,s){if(t!==void 0){let o=this.constructor,i=this[t];if(s??=o.getPropertyOptions(t),!((s.hasChanged??Ur)(i,e)||s.useDefault&&s.reflect&&i===this._$Ej?.get(t)&&!this.hasAttribute(o._$Eu(t,s))))return;this.C(t,e,s)}this.isUpdatePending===!1&&(this._$ES=this._$EP())}C(t,e,{useDefault:s,reflect:o,wrapped:i},n){s&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,n??e??this[t]),i!==!0||n!==void 0)||(this._$AL.has(t)||(this.hasUpdated||s||(e=void 0),this._$AL.set(t,e)),o===!0&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(e){Promise.reject(e)}let t=this.scheduleUpdate();return t!=null&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(let[o,i]of this._$Ep)this[o]=i;this._$Ep=void 0}let s=this.constructor.elementProperties;if(s.size>0)for(let[o,i]of s){let{wrapped:n}=i,a=this[o];n!==!0||this._$AL.has(o)||a===void 0||this.C(o,void 0,i,a)}}let t=!1,e=this._$AL;try{t=this.shouldUpdate(e),t?(this.willUpdate(e),this._$EO?.forEach((s=>s.hostUpdate?.())),this.update(e)):this._$EM()}catch(s){throw t=!1,this._$EM(),s}t&&this._$AE(e)}willUpdate(t){}_$AE(t){this._$EO?.forEach((e=>e.hostUpdated?.())),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach((e=>this._$ET(e,this[e]))),this._$EM()}updated(t){}firstUpdated(t){}};J.elementStyles=[],J.shadowRootOptions={mode:"open"},J[Yt("elementProperties")]=new Map,J[Yt("finalized")]=new Map,fo?.({ReactiveElement:J}),(xe.reactiveElementVersions??=[]).push("2.1.1");var br=globalThis,be=br.trustedTypes,Vr=be?be.createPolicy("lit-html",{createHTML:r=>r}):void 0,wr="$lit$",Y=`lit$${Math.random().toFixed(9).slice(2)}$`,vr="?"+Y,go=`<${vr}>`,ft=document,Zt=()=>ft.createComment(""),Qt=r=>r===null||typeof r!="object"&&typeof r!="function",$r=Array.isArray,Yr=r=>$r(r)||typeof r?.[Symbol.iterator]=="function",xr=`[
|
|
2
|
+
\f\r]`,Xt=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,Wr=/-->/g,Gr=/>/g,ht=RegExp(`>|${xr}(?:([^\\s"'>=/]+)(${xr}*=${xr}*(?:[^
|
|
3
|
+
\f\r"'\`<>=]|("|')|))|$)`,"g"),Fr=/'/g,Kr=/"/g,Xr=/^(?:script|style|textarea|title)$/i,Sr=r=>(t,...e)=>({_$litType$:r,strings:t,values:e}),x=Sr(1),si=Sr(2),oi=Sr(3),X=Symbol.for("lit-noChange"),_=Symbol.for("lit-nothing"),Jr=new WeakMap,mt=ft.createTreeWalker(ft,129);function Zr(r,t){if(!$r(r)||!r.hasOwnProperty("raw"))throw Error("invalid template strings array");return Vr!==void 0?Vr.createHTML(t):t}var Qr=(r,t)=>{let e=r.length-1,s=[],o,i=t===2?"<svg>":t===3?"<math>":"",n=Xt;for(let a=0;a<e;a++){let c=r[a],l,p,u=-1,h=0;for(;h<c.length&&(n.lastIndex=h,p=n.exec(c),p!==null);)h=n.lastIndex,n===Xt?p[1]==="!--"?n=Wr:p[1]!==void 0?n=Gr:p[2]!==void 0?(Xr.test(p[2])&&(o=RegExp("</"+p[2],"g")),n=ht):p[3]!==void 0&&(n=ht):n===ht?p[0]===">"?(n=o??Xt,u=-1):p[1]===void 0?u=-2:(u=n.lastIndex-p[2].length,l=p[1],n=p[3]===void 0?ht:p[3]==='"'?Kr:Fr):n===Kr||n===Fr?n=ht:n===Wr||n===Gr?n=Xt:(n=ht,o=void 0);let f=n===ht&&r[a+1].startsWith("/>")?" ":"";i+=n===Xt?c+go:u>=0?(s.push(l),c.slice(0,u)+wr+c.slice(u)+Y+f):c+Y+(u===-2?a:f)}return[Zr(r,i+(r[e]||"<?>")+(t===2?"</svg>":t===3?"</math>":"")),s]},te=class r{constructor({strings:t,_$litType$:e},s){let o;this.parts=[];let i=0,n=0,a=t.length-1,c=this.parts,[l,p]=Qr(t,e);if(this.el=r.createElement(l,s),mt.currentNode=this.el.content,e===2||e===3){let u=this.el.content.firstChild;u.replaceWith(...u.childNodes)}for(;(o=mt.nextNode())!==null&&c.length<a;){if(o.nodeType===1){if(o.hasAttributes())for(let u of o.getAttributeNames())if(u.endsWith(wr)){let h=p[n++],f=o.getAttribute(u).split(Y),d=/([.?@])?(.*)/.exec(h);c.push({type:1,index:i,name:d[2],strings:f,ctor:d[1]==="."?ve:d[1]==="?"?$e:d[1]==="@"?Se:gt}),o.removeAttribute(u)}else u.startsWith(Y)&&(c.push({type:6,index:i}),o.removeAttribute(u));if(Xr.test(o.tagName)){let u=o.textContent.split(Y),h=u.length-1;if(h>0){o.textContent=be?be.emptyScript:"";for(let f=0;f<h;f++)o.append(u[f],Zt()),mt.nextNode(),c.push({type:2,index:++i});o.append(u[h],Zt())}}}else if(o.nodeType===8)if(o.data===vr)c.push({type:2,index:i});else{let u=-1;for(;(u=o.data.indexOf(Y,u+1))!==-1;)c.push({type:7,index:i}),u+=Y.length-1}i++}}static createElement(t,e){let s=ft.createElement("template");return s.innerHTML=t,s}};function dt(r,t,e=r,s){if(t===X)return t;let o=s!==void 0?e._$Co?.[s]:e._$Cl,i=Qt(t)?void 0:t._$litDirective$;return o?.constructor!==i&&(o?._$AO?.(!1),i===void 0?o=void 0:(o=new i(r),o._$AT(r,e,s)),s!==void 0?(e._$Co??=[])[s]=o:e._$Cl=o),o!==void 0&&(t=dt(r,o._$AS(r,t.values),o,s)),t}var we=class{constructor(t,e){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=e}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){let{el:{content:e},parts:s}=this._$AD,o=(t?.creationScope??ft).importNode(e,!0);mt.currentNode=o;let i=mt.nextNode(),n=0,a=0,c=s[0];for(;c!==void 0;){if(n===c.index){let l;c.type===2?l=new _t(i,i.nextSibling,this,t):c.type===1?l=new c.ctor(i,c.name,c.strings,this,t):c.type===6&&(l=new ke(i,this,t)),this._$AV.push(l),c=s[++a]}n!==c?.index&&(i=mt.nextNode(),n++)}return mt.currentNode=ft,o}p(t){let e=0;for(let s of this._$AV)s!==void 0&&(s.strings!==void 0?(s._$AI(t,s,e),e+=s.strings.length-2):s._$AI(t[e])),e++}},_t=class r{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,e,s,o){this.type=2,this._$AH=_,this._$AN=void 0,this._$AA=t,this._$AB=e,this._$AM=s,this.options=o,this._$Cv=o?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode,e=this._$AM;return e!==void 0&&t?.nodeType===11&&(t=e.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,e=this){t=dt(this,t,e),Qt(t)?t===_||t==null||t===""?(this._$AH!==_&&this._$AR(),this._$AH=_):t!==this._$AH&&t!==X&&this._(t):t._$litType$!==void 0?this.$(t):t.nodeType!==void 0?this.T(t):Yr(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==_&&Qt(this._$AH)?this._$AA.nextSibling.data=t:this.T(ft.createTextNode(t)),this._$AH=t}$(t){let{values:e,_$litType$:s}=t,o=typeof s=="number"?this._$AC(t):(s.el===void 0&&(s.el=te.createElement(Zr(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===o)this._$AH.p(e);else{let i=new we(o,this),n=i.u(this.options);i.p(e),this.T(n),this._$AH=i}}_$AC(t){let e=Jr.get(t.strings);return e===void 0&&Jr.set(t.strings,e=new te(t)),e}k(t){$r(this._$AH)||(this._$AH=[],this._$AR());let e=this._$AH,s,o=0;for(let i of t)o===e.length?e.push(s=new r(this.O(Zt()),this.O(Zt()),this,this.options)):s=e[o],s._$AI(i),o++;o<e.length&&(this._$AR(s&&s._$AB.nextSibling,o),e.length=o)}_$AR(t=this._$AA.nextSibling,e){for(this._$AP?.(!1,!0,e);t!==this._$AB;){let s=t.nextSibling;t.remove(),t=s}}setConnected(t){this._$AM===void 0&&(this._$Cv=t,this._$AP?.(t))}},gt=class{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,e,s,o,i){this.type=1,this._$AH=_,this._$AN=void 0,this.element=t,this.name=e,this._$AM=o,this.options=i,s.length>2||s[0]!==""||s[1]!==""?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=_}_$AI(t,e=this,s,o){let i=this.strings,n=!1;if(i===void 0)t=dt(this,t,e,0),n=!Qt(t)||t!==this._$AH&&t!==X,n&&(this._$AH=t);else{let a=t,c,l;for(t=i[0],c=0;c<i.length-1;c++)l=dt(this,a[s+c],e,c),l===X&&(l=this._$AH[c]),n||=!Qt(l)||l!==this._$AH[c],l===_?t=_:t!==_&&(t+=(l??"")+i[c+1]),this._$AH[c]=l}n&&!o&&this.j(t)}j(t){t===_?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??"")}},ve=class extends gt{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===_?void 0:t}},$e=class extends gt{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==_)}},Se=class extends gt{constructor(t,e,s,o,i){super(t,e,s,o,i),this.type=5}_$AI(t,e=this){if((t=dt(this,t,e,0)??_)===X)return;let s=this._$AH,o=t===_&&s!==_||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,i=t!==_&&(s===_||o);o&&this.element.removeEventListener(this.name,this,s),i&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){typeof this._$AH=="function"?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}},ke=class{constructor(t,e,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=e,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){dt(this,t)}},ts={M:wr,P:Y,A:vr,C:1,L:Qr,R:we,D:Yr,V:dt,I:_t,H:gt,N:$e,U:Se,B:ve,F:ke},yo=br.litHtmlPolyfillSupport;yo?.(te,_t),(br.litHtmlVersions??=[]).push("3.3.1");var P=(r,t,e)=>{let s=e?.renderBefore??t,o=s._$litPart$;if(o===void 0){let i=e?.renderBefore??null;s._$litPart$=o=new _t(t.insertBefore(Zt(),i),i,void 0,e??{})}return o._$AI(r),o};var kr=globalThis,Et=class extends J{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){let t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){let e=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=P(e,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return X}};Et._$litElement$=!0,Et.finalized=!0,kr.litElementHydrateSupport?.({LitElement:Et});var xo=kr.litElementPolyfillSupport;xo?.({LitElement:Et});(kr.litElementVersions??=[]).push("4.2.1");var H={string:(r,t)=>r.getAttribute(t)??void 0,number:(r,t)=>{let e=r.getAttribute(t);return e===null||!e?void 0:Number(e)},boolean:(r,t)=>r.getAttribute(t)!==null},C={string:(r,t,e)=>(e===void 0?r.removeAttribute(t):r.setAttribute(t,e),!0),number:(r,t,e)=>(e===void 0?r.removeAttribute(t):r.setAttribute(t,e.toString()),!0),boolean:(r,t,e)=>(e?r.setAttribute(t,""):r.removeAttribute(t),!0),any:(r,t,e)=>{e==null?r.removeAttribute(t):typeof e=="string"?r.setAttribute(t,e):typeof e=="number"?r.setAttribute(t,e.toString()):typeof e=="boolean"?e===!0?r.setAttribute(t,""):r.removeAttribute(t):console.warn(`invalid attribute "${t}" type is "${typeof e}"`)},entries:(r,t)=>{for(let[e,s]of t)C.any(r,e,s)},record:(r,t)=>C.entries(r,Object.entries(t))};function es(r,t={}){let e=document.createElement(r);return C.record(e,t),e}function rs(r){let t=document.createDocumentFragment();return P(r,t),t.firstElementChild}function Ae(r,t){let e=[];for(let[s,o]of Object.entries(t))if(typeof o=="function")r.addEventListener(s,o),e.push(()=>r.removeEventListener(s,o));else{let[i,n]=o;r.addEventListener(s,n,i),e.push(()=>r.removeEventListener(s,n))}return()=>e.forEach(s=>s())}function ss(r,t){let e=new MutationObserver(t);return e.observe(r,{attributes:!0}),()=>e.disconnect()}var _e=class{element;constructor(t){this.element=t}strings=new Proxy({},{get:(t,e)=>H.string(this.element,e),set:(t,e,s)=>C.string(this.element,e,s)});numbers=new Proxy({},{get:(t,e)=>H.number(this.element,e),set:(t,e,s)=>C.number(this.element,e,s)});booleans=new Proxy({},{get:(t,e)=>H.boolean(this.element,e),set:(t,e,s)=>C.boolean(this.element,e,s)})};var os=(r,t,e={})=>new Proxy(t,{get:(s,o)=>{switch(t[o]){case String:return H.string(r,o);case Number:return H.number(r,o);case Boolean:return H.boolean(r,o);default:throw new Error(`invalid attribute type for "${o}"`)}},set:(s,o,i)=>{try{switch(e.beforeSet?.(o),t[o]){case String:return C.string(r,o,i);case Number:return C.number(r,o,i);case Boolean:return C.boolean(r,o,i);default:throw new Error(`invalid attribute type for "${o}"`)}}finally{e.afterSet?.(o)}}});function Mt(r){let t=new _e(r);return{strings:t.strings,numbers:t.numbers,booleans:t.booleans,on:e=>ss(r,e),spec:(e,s={})=>os(r,e,s)}}Mt.get=H;Mt.set=C;function is(r){return new Ar(r)}var Ar=class{tagName;#t=new Map;#e=[];constructor(t){this.tagName=t}attr(t,e=!0){return this.#t.set(t,e),this}attrs(t){for(let[e,s]of Object.entries(t))this.attr(e,s);return this}children(...t){return this.#e.push(...t),this}done(){let t=document.createElement(this.tagName);return C.entries(t,this.#t),t.append(...this.#e),t}};function Pt(r,t=document){let e=t.querySelector(r);if(!e)throw new Error(`element not found (${r})`);return e}function Ee(r,t=document){return t.querySelector(r)}function Me(r,t=document){return Array.from(t.querySelectorAll(r))}var Pe=class r{element;#t;constructor(t){this.element=t}in(t){return new r(typeof t=="string"?Pt(t,this.element):t)}require(t){return Pt(t,this.element)}maybe(t){return Ee(t,this.element)}all(t){return Me(t,this.element)}render(...t){return P(t,this.element)}get attrs(){return this.#t??=Mt(this.element)}events(t){return Ae(this.element,t)}};function ns(r){return r.replace(/([a-zA-Z])(?=[A-Z])/g,"$1-").toLowerCase()}function as(r,t={}){let{soft:e=!1,upgrade:s=!0}=t;for(let[o,i]of Object.entries(r)){let n=ns(o),a=customElements.get(n);e&&a||(customElements.define(n,i),s&&document.querySelectorAll(n).forEach(c=>{c.constructor===HTMLElement&&customElements.upgrade(c)}))}}function S(r,t=document){return Pt(r,t)}S.in=(r,t=document)=>new Pe(t).in(r);S.require=Pt;S.maybe=Ee;S.all=Me;S.el=es;S.elmer=is;S.mk=rs;S.events=Ae;S.attrs=Mt;S.register=as;S.render=(r,...t)=>P(t,r);var Ct=Object.freeze({eq(r,t){if(r.length!==t.length)return!1;let e=0;for(let s=0;s<r.length;s++)e|=r[s]^t[s];return e===0},random(r){return crypto.getRandomValues(new Uint8Array(r))}});var M=class{lexicon;static lexicons=Object.freeze({base2:{characters:"01"},hex:{characters:"0123456789abcdef",caseInsensitive:!0},base36:{characters:"0123456789abcdefghijklmnopqrstuvwxyz"},base58:{characters:"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"},base62:{characters:"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"},base64url:{negativePrefix:"~",characters:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"},base64:{characters:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",padding:{character:"=",size:4}}});lookup;negativePrefix;constructor(t){this.lexicon=t,this.lookup=Object.fromEntries([...t.characters].map((s,o)=>[s,o])),this.negativePrefix=t.negativePrefix??"-";let e=this.fromBytes.bind(this);return Object.setPrototypeOf(e,new.target.prototype),Object.assign(e,this),e}toBytes(t){this.lexicon.caseInsensitive&&(t=t.toLowerCase());let e=Math.log2(this.lexicon.characters.length);if(Number.isInteger(e)){let l=0,p=0,u=[];for(let h of t){if(h===this.lexicon.padding?.character)continue;let f=this.lookup[h];if(f===void 0)throw new Error(`Invalid character: ${h}`);for(l=l<<e|f,p+=e;p>=8;)p-=8,u.push(l>>p&255)}return new Uint8Array(u)}let s=0n,o=BigInt(this.lexicon.characters.length);t.startsWith(this.negativePrefix)&&(t=t.slice(this.negativePrefix.length));let i=this.lexicon.characters[0],n=0;for(;t[n]===i;)n++;t=t.slice(n);for(let l of t){let p=this.lookup[l];if(p===void 0)throw new Error(`Invalid character: ${l}`);s=s*o+BigInt(p)}let a=new Uint8Array(n+(s===0n?0:this.countBytes(s))),c=a.length;for(;s>0n;)a[--c]=Number(s%256n),s=s/256n;return a}fromBytes(t){let e=Math.log2(this.lexicon.characters.length);if(Number.isInteger(e)){let c=0,l=0,p="";for(let u of t)for(c=c<<8|u,l+=8;l>=e;){l-=e;let h=c>>l&(1<<e)-1;p+=this.lexicon.characters[h]}if(l>0){let u=c<<e-l&(1<<e)-1;p+=this.lexicon.characters[u]}if(this.lexicon.padding)for(;p.length%this.lexicon.padding.size!==0;)p+=this.lexicon.padding.character;return p}if(t.length===0)return"";let s=this.lexicon.characters[0],o=0;for(;t[o]===0;)o++;let i=0n;for(let c of t.slice(o))i=(i<<8n)+BigInt(c);if(i===0n)return s.repeat(o);let n=BigInt(this.lexicon.characters.length),a="";for(;i>0n;)a=this.lexicon.characters[Number(i%n)]+a,i=i/n;return s.repeat(o)+a}toInteger(t){if(!t)return 0;let e=0n,s=!1,o=BigInt(this.lexicon.characters.length);t.startsWith(this.negativePrefix)&&(t=t.slice(this.negativePrefix.length),s=!0);for(let i of t){let n=this.lookup[i];if(n===void 0)throw new Error(`Invalid character: ${i}`);e=e*o+BigInt(n)}return Number(s?-e:e)}fromInteger(t){t=Math.floor(t);let e=t<0,s=BigInt(e?-t:t);if(s===0n)return this.lexicon.characters[0];let o=BigInt(this.lexicon.characters.length),i="";for(;s>0n;)i=this.lexicon.characters[Number(s%o)]+i,s=s/o;return e?`${this.negativePrefix}${i}`:i}random(t=32){return this.fromBytes(Ct.random(t))}countBytes(t){let e=0;for(;t>0n;)e++,t=t/256n;return e}};var _r=new M(M.lexicons.hex),ln=new M(M.lexicons.base2),un=new M(M.lexicons.base36),pn=new M(M.lexicons.base58),hn=new M(M.lexicons.base62),mn=new M(M.lexicons.base64),fn=new M(M.lexicons.base64url);var Er=["doz","mar","bin","wan","sam","lit","sig","hid","fid","lis","sog","dir","wac","sab","wis","sib","rig","sol","dop","mod","fog","lid","hop","dar","dor","lor","hod","fol","rin","tog","sil","mir","hol","pas","lac","rov","liv","dal","sat","lib","tab","han","tic","pid","tor","bol","fos","dot","los","dil","for","pil","ram","tir","win","tad","bic","dif","roc","wid","bis","das","mid","lop","ril","nar","dap","mol","san","loc","nov","sit","nid","tip","sic","rop","wit","nat","pan","min","rit","pod","mot","tam","tol","sav","pos","nap","nop","som","fin","fon","ban","mor","wor","sip","ron","nor","bot","wic","soc","wat","dol","mag","pic","dav","bid","bal","tim","tas","mal","lig","siv","tag","pad","sal","div","dac","tan","sid","fab","tar","mon","ran","nis","wol","mis","pal","las","dis","map","rab","tob","rol","lat","lon","nod","nav","fig","nom","nib","pag","sop","ral","bil","had","doc","rid","moc","pac","rav","rip","fal","tod","til","tin","hap","mic","fan","pat","tac","lab","mog","sim","son","pin","lom","ric","tap","fir","has","bos","bat","poc","hac","tid","hav","sap","lin","dib","hos","dab","bit","bar","rac","par","lod","dos","bor","toc","hil","mac","tom","dig","fil","fas","mit","hob","har","mig","hin","rad","mas","hal","rag","lag","fad","top","mop","hab","nil","nos","mil","fop","fam","dat","nol","din","hat","nac","ris","fot","rib","hoc","nim","lar","fit","wal","rap","sar","nal","mos","lan","don","dan","lad","dov","riv","bac","pol","lap","tal","pit","nam","bon","ros","ton","fod","pon","sov","noc","sor","lav","mat","mip","fip"];var Mr=["zod","nec","bud","wes","sev","per","sut","let","ful","pen","syt","dur","wep","ser","wyl","sun","ryp","syx","dyr","nup","heb","peg","lup","dep","dys","put","lug","hec","ryt","tyv","syd","nex","lun","mep","lut","sep","pes","del","sul","ped","tem","led","tul","met","wen","byn","hex","feb","pyl","dul","het","mev","rut","tyl","wyd","tep","bes","dex","sef","wyc","bur","der","nep","pur","rys","reb","den","nut","sub","pet","rul","syn","reg","tyd","sup","sem","wyn","rec","meg","net","sec","mul","nym","tev","web","sum","mut","nyx","rex","teb","fus","hep","ben","mus","wyx","sym","sel","ruc","dec","wex","syr","wet","dyl","myn","mes","det","bet","bel","tux","tug","myr","pel","syp","ter","meb","set","dut","deg","tex","sur","fel","tud","nux","rux","ren","wyt","nub","med","lyt","dus","neb","rum","tyn","seg","lyx","pun","res","red","fun","rev","ref","mec","ted","rus","bex","leb","dux","ryn","num","pyx","ryg","ryx","fep","tyr","tus","tyc","leg","nem","fer","mer","ten","lus","nus","syl","tec","mex","pub","rym","tuc","fyl","lep","deb","ber","mug","hut","tun","byl","sud","pem","dev","lur","def","bus","bep","run","mel","pex","dyt","byt","typ","lev","myl","wed","duc","fur","fex","nul","luc","len","ner","lex","rup","ned","lec","ryd","lyd","fen","wel","nyd","hus","rel","rud","nes","hes","fet","des","ret","dun","ler","nyr","seb","hul","ryl","lud","rem","lys","fyn","wer","ryc","sug","nys","nyl","lyn","dyn","dem","lux","fed","sed","bec","mun","lyr","tes","mud","nyt","byr","sen","weg","fyr","mur","tel","rep","teg","pec","nel","nev","fes"];var yt={defaults:{groupSize:4,wordSeparator:".",groupSeparator:" "},random(r,t){let e=Ct.random(r);return this.fromBytes(e,t)},fromBytes(r,t={}){let{groupSize:e=yt.defaults.groupSize,wordSeparator:s=yt.defaults.wordSeparator,groupSeparator:o=yt.defaults.groupSeparator}=t,i=[],n=[];r.forEach((c,l)=>{let p=l%2===0?Er:Mr;n.push(p[c]),n.length===2&&(i.push(n.join("")),n=[])}),n.length&&i.push(n.join(""));let a=[];for(let c=0;c<i.length;c+=e)a.push(i.slice(c,c+e).join(s));return a.join(o)},toBytes(r){let t=r.toLowerCase().replace(/[^a-z]/g,"");if(t.length/3%1!==0)throw new Error(`invalid triplet count, ${t.length} does not divide into triplets`);let s=[];for(let o=0;o<t.length;o+=3)s.push(t.slice(o,o+3));return new Uint8Array(s.map((o,i)=>{let a=(i%2===0?Er:Mr).findIndex(c=>c===o);if(a===-1)throw new Error(`unknown triplet ${o}`);return a}))},toHex(r){return _r.fromBytes(yt.toBytes(r))},fromHex(r,t){return yt.fromBytes(_r.toBytes(r),t)}};var Ot=Object.freeze({fromBytes(r){return[...r].map(t=>t.toString(16).padStart(2,"0")).join("")},toBytes(r){if(r.length%2!==0)throw new Error("must have even number of hex characters");let t=new Uint8Array(r.length/2);for(let e=0;e<r.length;e+=2)t[e/2]=parseInt(r.slice(e,e+2),16);return t},random(r=32){return this.fromBytes(Ct.random(r))},string(r){return Ot.fromBytes(r)},bytes(r){return Ot.toBytes(r)}});function Ce(r,t){let e,s,o=[];function i(){e=[],s&&clearTimeout(s),s=void 0,o=[]}return i(),((...n)=>{e=n,s&&clearTimeout(s);let a=new Promise((c,l)=>{o.push({resolve:c,reject:l})});return s=setTimeout(()=>{Promise.resolve().then(()=>t(...e)).then(c=>{for(let{resolve:l}of o)l(c);i()}).catch(c=>{for(let{reject:l}of o)l(c);i()})},r),a})}function xt(){let r,t,e=new Promise((o,i)=>{r=o,t=i});function s(o){return o.then(r).catch(t),e}return{promise:e,resolve:r,reject:t,entangle:s}}function Rt(r){let t=null;return((...e)=>(t?t.params=e:(t={params:e,deferred:xt()},queueMicrotask(()=>{let{params:s,deferred:o}=t;t=null,Promise.resolve(r(...s)).then(o.resolve).catch(o.reject)})),t.deferred.promise))}var B={};no(B,{clone:()=>ee,equal:()=>bo,freeze:()=>wo});function ee(r,t=new Set){if(t.has(r))throw new Error("cannot clone circular reference");let e;return typeof r=="function"||r!==null&&typeof r=="object"?(t.add(r),Array.isArray(r)?e=r.map(s=>ee(s,new Set(t))):r.constructor===Object?e=Object.fromEntries(Object.entries(r).map(([s,o])=>[s,ee(o,new Set(t))])):r instanceof Map?e=new Map(Array.from(r,([s,o])=>[s,ee(o,new Set(t))])):r instanceof Set?e=new Set(Array.from(r,s=>ee(s,new Set(t)))):r instanceof Date?e=new Date(r.getTime()):e=r,t.delete(r)):e=r,e}var re=Object.freeze({happy:r=>r!=null,sad:r=>r==null,boolean:r=>typeof r=="boolean",number:r=>typeof r=="number",string:r=>typeof r=="string",bigint:r=>typeof r=="bigint",object:r=>typeof r=="object"&&r!==null,array:r=>Array.isArray(r),fn:r=>typeof r=="function",symbol:r=>typeof r=="symbol"});var bo=(r,t)=>{function e(s,o,i){if(!re.object(s)||!re.object(o))return s===o;if(i.includes(s))throw new Error("forbidden circularity detected in deep equal comparison");let n=[...i,s];if(s instanceof Map&&o instanceof Map){if(s.size!==o.size)return!1;for(let[a,c]of s)if(!o.has(a)||!e(c,o.get(a),n))return!1}else if(s instanceof Set&&o instanceof Set){if(s.size!==o.size)return!1;for(let a of s)if(!Array.from(o).some(c=>e(a,c,n)))return!1}else{let a=Object.keys(s),c=Object.keys(o);if(a.length!==c.length)return!1;for(let l of a)if(!c.includes(l)||!e(s[l],o[l],n))return!1}return!0}return e(r,t,[])};function wo(r){function t(e,s){if(!re.object(e)||s.includes(e))return e;let o=[...s,e];if(e instanceof Map)for(let i of e.entries())for(let n of i)t(n,o);else if(e instanceof Set)for(let i of e)t(i,o);else if(Array.isArray(e))for(let i of e)t(i,o);else for(let i of Object.values(e))t(i,o);return Object.freeze(e)}return t(r,[])}function cs(r){if(r.ok)return r.value;let{error:t}=r;throw t instanceof Error?t:typeof t=="string"?new Error(t):new Error("unknown")}function ls(r){if(r.ok)throw new Error("didn't get needed error");return r.error}var Z=class r extends Map{static require(t,e){if(t.has(e))return t.get(e);throw new Error(`required key not found: "${e}"`)}static guarantee(t,e,s){if(t.has(e))return t.get(e);{let o=s();return t.set(e,o),o}}array(){return[...this]}require(t){return r.require(this,t)}guarantee(t,e){return r.guarantee(this,t,e)}},tt=Z;var Pr=class extends Set{array(){return[...this]}hasAll(...t){return t.every(e=>this.has(e))}adds(...t){for(let e of t)this.add(e);return this}deletes(...t){for(let e of t)this.delete(e);return this}clear(){return super.clear(),this}},Oe=Pr;var Cr=class r extends WeakMap{static require(t,e){if(t.has(e))return t.get(e);throw new Error("required key not found")}static guarantee(t,e,s){if(t.has(e))return t.get(e);{let o=s();return t.set(e,o),o}}require(t){return r.require(this,t)}guarantee(t,e){return r.guarantee(this,t,e)}},us=Cr;function ps(...r){return(...t)=>r.forEach(e=>e(...t))}function*vo(r){for(let t=0;t<r;t++)yield t}function Re(r){return[...vo(r)]}function se(r){let t,e=!1,s=()=>{e=!0,clearTimeout(t)},o=async()=>{e||(await r(s),!e&&(t=setTimeout(o,0)))};return o(),s}var hs=se;var Be=class{getRefill;#t=[];constructor(t){this.getRefill=t,this.#e()}get currentStock(){return[...this.#t]}#e(){if(this.#t.length===0&&(this.#t=[...this.getRefill()]),this.#t.length===0)throw new Error("dispenser's getRefill returned an empty array")}takeAll(){let t=this.#t;return this.#t=[...this.getRefill()],t}takeRandom(){this.#e();let t=Math.floor(Math.random()*this.#t.length),[e]=this.#t.splice(t,1);return e}takeFirst(){return this.#e(),this.#t.shift()}takeLast(){return this.#e(),this.#t.pop()}shift=this.takeFirst.bind(this);pop=this.takeLast.bind(this)};function j(){let r=[];function t(){for(let e of r)e();r=[]}return t.schedule=(...e)=>(r.push(...e),t),t}function bt(r,t){let e=Object.entries(t);for(let[s,o]of e)r.addEventListener(s,o);return()=>{for(let[s,o]of e)r.removeEventListener(s,o)}}var et=(r=0)=>new Promise(t=>setTimeout(t,r));function $o(r){return{map:t=>oe(r,t),filter:t=>ms(r,t)}}$o.pipe=Object.freeze({map:r=>(t=>oe(t,r)),filter:r=>(t=>ms(t,r))});var oe=(r,t)=>Object.fromEntries(Object.entries(r).map(([e,s])=>[e,t(s,e)])),ms=(r,t)=>Object.fromEntries(Object.entries(r).filter(([e,s])=>t(s,e)));function Rr(r){return new Or(r)}var Or=class r{#t;static with=Rr;constructor(t){this.#t=t}to(t){return new r(t(this.#t))}done(){return this.#t}line(...t){let e=this.#t;for(let s of t)e=s(e);return e}};function fs(){let r=new Set;async function t(...c){await Promise.all([...r].map(l=>l(...c)))}function e(c){return r.add(c),()=>{r.delete(c)}}async function s(...c){return t(...c)}function o(c){return e(c)}async function i(c){let{promise:l,resolve:p}=xt(),u=o(async(...h)=>{c&&await c(...h),p(h),u()});return l}function n(){r.clear()}let a={pub:s,sub:o,publish:t,subscribe:e,on:e,next:i,clear:n};return Object.assign(o,a),Object.assign(s,a),a}function O(r){let t=fs();return r&&t.sub(r),t.sub}function ds(r){let t=fs();return r&&t.sub(r),t.pub}function gs(r){return B.freeze(B.clone(r))}var Br=class{#t=[];#e=new WeakMap;#r=[];#s=new Set;notifyRead(t){this.#t.at(-1)?.add(t)}async notifyWrite(t){if(this.#s.has(t))throw new Error("circularity forbidden");let e=this.#o(t).pub();return this.#r.at(-1)?.add(e),e}observe(t){this.#t.push(new Set);let e=t();return{seen:this.#t.pop(),result:e}}subscribe(t,e){return this.#o(t)(async()=>{let s=new Set;this.#r.push(s),this.#s.add(t),s.add(e()),this.#s.delete(t),await Promise.all(s),this.#r.pop()})}#o(t){let e=this.#e.get(t);return e||(e=O(),this.#e.set(t,e)),e}},g=globalThis[Symbol.for("e280.tracker")]??=new Br;var q=Symbol("optic");var ie=class{calculate;#t=!1;#e;constructor(t){this.calculate=t,this.#e=t()}get(){return this.#t&&(this.#t=!1,this.#e=this.calculate()),this.#e}invalidate(){this.#t=!0}};var De=class r{on=O();onFrozen=O();[q];#t;#e;#r;#s=Rt(()=>{this.on.publish(this.state),this.onFrozen.publish(this.frozen)});constructor(t){this[q]=t,this.#t=B.clone(t.getState()),this.#e=new ie(()=>B.clone(t.getState())),this.#r=new ie(()=>gs(t.getState()))}async update(){let t=this[q].getState();!B.equal(t,this.#t)&&(this.#e.invalidate(),this.#r.invalidate(),this.#t=B.clone(t),this.#s(),await g.notifyWrite(this))}get state(){return g.notifyRead(this),this.#e.get()}get frozen(){return g.notifyRead(this),this.#r.get()}async mutate(t){return this[q].mutate(t)}lens(t){let e=new r({getState:()=>t(this[q].getState()),mutate:s=>this[q].mutate(o=>s(t(o))),registerLens:this[q].registerLens});return this[q].registerLens(e),e}};var je=class r{sneak;on;dispose;constructor(t,e){if(new.target!==r)throw new Error("Derived cannot be subclassed");return rt(t,e)}get value(){return this.get()}get(){return g.notifyRead(this),this.sneak}toString(){return`(derived "${String(this.get())}")`}};function Ne(r,t){let e=[],s=()=>{for(let n of e)n();e=[]},o=()=>{let{seen:n,result:a}=g.observe(r);for(let c of n)e.push(g.subscribe(c,i));return a},i=Rt(()=>{s(),t?t(o()):o()});return{result:o(),dispose:s}}function Bt(r,t){return Object.is(r,t)}function rt(r,t){function e(){return e.get()}let s=t?.compare??Bt;Object.setPrototypeOf(e,je.prototype),e.on=O();let{result:o,dispose:i}=Ne(r,async n=>{!s(e.sneak,n)&&(e.sneak=n,await Promise.all([g.notifyWrite(e),e.on.pub(n)]))});return e.sneak=o,e.dispose=i,e}var wt=Symbol(),st=Symbol(),ot=Symbol(),ze=Symbol(),I=Symbol(),ne=Symbol(),Q=Symbol();var Te=class r{sneak;[ne];[st];[Q];[ot];[I];constructor(t,e){if(new.target!==r)throw new Error("Lazy cannot be subclassed");return Le(t,e)}get value(){return this.get()}[ze](){for(let o of this[Q])o();this[Q]=[];let{seen:t,result:e}=g.observe(this[ne]),s=async()=>{this[st]=!0};for(let o of t)this[Q].push(g.subscribe(o,s));return this[ot]=()=>{for(let o of this[Q])o();this[Q]=[]},e}get(){if(!this[ot])this.sneak=this[ze](),this[st]=!1;else if(this[st]){this[st]=!1;let t=this[ze]();!this[I](this.sneak,t)&&(this.sneak=t,g.notifyWrite(this))}return g.notifyRead(this),this.sneak}dispose(){this[ot]&&this[ot]()}toString(){return`($lazy "${String(this.get())}")`}};function Le(r,t){function e(){return e.get()}return Object.setPrototypeOf(e,Te.prototype),e.sneak=void 0,e[ne]=r,e[st]=!1,e[ot]=void 0,e[Q]=[],e[I]=t?.compare??Bt,e}var He=class r{sneak;on;[wt];[I];constructor(t,e){if(new.target!==r)throw new Error("Signal cannot be subclassed");return b(t,e)}get value(){return this.get()}set value(t){this.set(t)}get(){return g.notifyRead(this),this.sneak}async set(t,e=!1){let s=this.sneak;return this.sneak=t,(e||!this[I](s,t))&&await this.publish(),t}async publish(){if(this[wt])throw new Error("forbid circularity");let t=this.sneak,e=Promise.resolve();try{this[wt]=!0,e=Promise.all([g.notifyWrite(this),this.on.pub(t)])}finally{this[wt]=!1}return await e,t}toString(){return`($signal "${String(this.get())}")`}};function b(r,t){function e(s){let o=e;return arguments.length===0?o.get():o.set(arguments[0])}return Object.setPrototypeOf(e,He.prototype),e.sneak=r,e.on=O(),e[wt]=!1,e[I]=t?.compare??Bt,e}b.derived=rt;b.lazy=Le;function ys(r){if(!r.done)throw new Error("wait not done");return cs(r)}function xs(r){if(!r.done)throw new Error("wait not done");return ls(r)}var bs=r=>!r.done;var ws=r=>r.done&&r.ok;function vs(r,t){return bs(r)?t.pending():ws(r)?t.ok(ys(r)):t.err(xs(r))}var E=w`
|
|
4
4
|
* {
|
|
5
5
|
margin: 0;
|
|
6
6
|
padding: 0;
|
|
@@ -14,18 +14,29 @@ var Js=Object.defineProperty;var Ys=(r,t)=>{for(var e in t)Js(r,e,{get:t[e],enum
|
|
|
14
14
|
::-webkit-scrollbar-track { background: transparent; }
|
|
15
15
|
::-webkit-scrollbar-thumb { background: #888; border-radius: 1em; }
|
|
16
16
|
::-webkit-scrollbar-thumb:hover { background: #999; }
|
|
17
|
-
`;var
|
|
17
|
+
`;var qe=class r extends HTMLElement{static register(){S.register({SlyShadow:r},{soft:!0})}connectedCallback(){this.hasAttribute("view")||this.setAttribute("view","")}};var Ie=class{render;count=0;rendered=xt();constructor(t){this.render=t}doneRender(){this.count++,this.rendered.resolve(),this.rendered=xt()}},vt=class extends Ie{host;shadow;constructor(t,e,s){super(t),this.host=e,this.shadow=s}};var Dr=class{#t=[];get scope(){let t=this.#t.at(-1);if(!t)throw new Error("hooks must be called within a render fn");return t}increment(){let t=this.scope,e=t.position++;return{scope:t,position:e}}wrap(t,e){t.position=0,this.#t.push(t);try{return e()}finally{this.#t.pop()}}},U=globalThis[Symbol.for("e280.hooks")]??=new Dr;var Dt=class{#t=[];clear(){this.#t.forEach(t=>t()),this.#t=[]}observe(t,e){let{seen:s,result:o}=g.observe(t);this.clear();for(let i of s){let n=g.subscribe(i,e);this.#t.push(n)}return o}};function D(r){let{scope:t,position:e}=U.increment();return t.values.guarantee(e,r)}function T(r){let{scope:t}=U.increment();return D(()=>t.mounts.mount(r))}var Ue=class{#t=[];#e=[];mount(t){this.#t.push(t),this.#e.push(t())}unmountAll(){for(let t of this.#e)t();this.#e=[]}remountAll(){for(let t of this.#t)this.#e.push(t())}};var jt=class{cx;position=0;values=new Z;mounts=new Ue;constructor(t){this.cx=t}};var{I:Eo}=ts;var Ss=r=>r.strings===void 0,$s=()=>document.createComment(""),Nt=(r,t,e)=>{let s=r._$AA.parentNode,o=t===void 0?r._$AB:t._$AA;if(e===void 0){let i=s.insertBefore($s(),o),n=s.insertBefore($s(),o);e=new Eo(i,n,r,r.options)}else{let i=e._$AB.nextSibling,n=e._$AM,a=n!==r;if(a){let c;e._$AQ?.(r),e._$AM=r,e._$AP!==void 0&&(c=r._$AU)!==n._$AU&&e._$AP(c)}if(i!==o||a){let c=e._$AA;for(;c!==i;){let l=c.nextSibling;s.insertBefore(c,o),c=l}}}return e},it=(r,t,e=r)=>(r._$AI(t,e),r),Mo={},ks=(r,t=Mo)=>r._$AH=t,As=r=>r._$AH,Ve=r=>{r._$AR(),r._$AA.remove()};var We={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},Tt=r=>(...t)=>({_$litDirective$:r,values:t}),zt=class{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,s){this._$Ct=t,this._$AM=e,this._$Ci=s}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}};var ae=(r,t)=>{let e=r._$AN;if(e===void 0)return!1;for(let s of e)s._$AO?.(t,!1),ae(s,t);return!0},Ge=r=>{let t,e;do{if((t=r._$AM)===void 0)break;e=t._$AN,e.delete(r),r=t}while(e?.size===0)},_s=r=>{for(let t;t=r._$AM;r=t){let e=t._$AN;if(e===void 0)t._$AN=e=new Set;else if(e.has(r))break;e.add(r),Oo(t)}};function Po(r){this._$AN!==void 0?(Ge(this),this._$AM=r,_s(this)):this._$AM=r}function Co(r,t=!1,e=0){let s=this._$AH,o=this._$AN;if(o!==void 0&&o.size!==0)if(t)if(Array.isArray(s))for(let i=e;i<s.length;i++)ae(s[i],!1),Ge(s[i]);else s!=null&&(ae(s,!1),Ge(s));else ae(this,r)}var Oo=r=>{r.type==We.CHILD&&(r._$AP??=Co,r._$AQ??=Po)},ce=class extends zt{constructor(){super(...arguments),this._$AN=void 0}_$AT(t,e,s){super._$AT(t,e,s),_s(this),this.isConnected=t._$AU}_$AO(t,e=!0){t!==this.isConnected&&(this.isConnected=t,t?this.reconnected?.():this.disconnected?.()),e&&(ae(this,t),Ge(this))}setValue(t){if(Ss(this._$Ct))this._$Ct._$AI(t,this);else{let e=[...this._$Ct._$AH];e[this._$Ci]=t,this._$Ct._$AI(e,this,0)}}disconnected(){}reconnected(){}};function Es(){let{scope:r}=U.increment();return r.cx}function Ms(){let r=Es();if(!(r instanceof vt))throw new Error("this hook only works on shadow views (but was called in a light view)");return r}function Fe(){return Es().render}function le(){return Ms().host}function Ps(){return Ms().shadow}function Os(r,t){ye(r,Ro(t))}function Ro(r){let t=[];if(Array.isArray(r)){let e=new Set(r.flat(1/0).reverse());for(let s of e)t.unshift(At(s))}else r!==void 0&&t.push(At(r));return t}function L(...r){let t=Ps();D(()=>Os(t,r))}var nt=L;function R(r=""){let t=le();D(()=>t.setAttribute("view",r))}function at(r){return D(()=>b(r))}function Rs(r,t){for(let[e,s]of Object.entries(t))Do(r,e,s)}function Do(r,t,e){let s=r.getAttribute(t),o=jo(e);o!==s&&(o===null?r.removeAttribute(t):r.setAttribute(t,o))}function jo(r){return typeof r=="string"?r:typeof r=="number"?r.toString():r?"":null}function No(){qe.register();let r=document.createElement("sly-shadow"),t=r.attachShadow({mode:"open"});return{host:r,shadow:t}}function k(r){return Bs(No,r)}k.setup=r=>(t=>Bs(r,t));function Bs(r,t){let e=Tt(class extends ce{#t;#e;#r;#s=new Dt;constructor(o){super(o);let{host:i,shadow:n}=r(),a=Rt(()=>{if(!this.#r)throw new Error("cannot render before props");if(!this.isConnected)return;let c=this.#o(this.#r);P(c,this.#t.shadow),this.#t.doneRender()});this.#t=new vt(a,i,n),this.#e=new jt(this.#t)}#o(o){return this.#r=o,this.#s.observe(()=>U.wrap(this.#e,()=>t(...this.#r)),this.#t.render)}render({props:o,children:i,attrs:n}){let{host:a}=this.#t;return this.isConnected&&(n&&Rs(a,n),P(i,this.#t.host),P(this.#o(o),this.#t.shadow),this.#t.doneRender()),a}disconnected(){P(null,this.#t.shadow),P(null,this.#t.host),this.#e.mounts.unmountAll(),this.#s.clear()}reconnected(){this.#e.mounts.remountAll(),this.#t.render()}});function s(...o){return e({props:o})}return s.with=e,s}function V(r,t){return()=>zo({hz:r,frames:t})}var zo=k(({hz:r,frames:t})=>{R("loading"),nt(E,To);let e=at(0);return T(()=>se(async()=>{await et(1e3/r);let s=e.get()+1;e.set(s>=t.length?0:s)})),t.at(e.get())}),To=w`
|
|
18
18
|
:host {
|
|
19
19
|
font-family: monospace;
|
|
20
20
|
white-space: pre;
|
|
21
21
|
user-select: none;
|
|
22
22
|
}
|
|
23
|
-
`;var
|
|
23
|
+
`;var W=k(r=>(R("error"),nt(E,Lo),typeof r=="string"?r:r instanceof Error?x`<strong>${r.name}:</strong> <span>${r.message}</span>`:"error")),Lo=w`
|
|
24
24
|
:host {
|
|
25
25
|
font-family: monospace;
|
|
26
26
|
color: red;
|
|
27
27
|
}
|
|
28
|
-
`;var y=class r{x;constructor(t){this.x=t}static new(t){return new this(t)}dup(){return new r(this.x)}set(t){return this.x=t,this}static isBetween(t,e=0,s=1){let o=Math.min(e,s),i=Math.max(e,s);return t>=o&&t<=i}isBetween(t=0,e=1){return r.isBetween(this.x,t,e)}static isNear(t,e,s=.01){return Math.abs(t-e)<=s}isNear(t,e=.01){return r.isNear(this.x,t,e)}static add(...t){let e=0;for(let s of t)e+=s;return e}add(...t){return this.x=r.add(this.x,...t),this}sub(...t){for(let e of t)this.x-=e;return this}static atLeast(t,e=0){return Math.max(t,e)}atLeast(t=0){return this.x=r.atLeast(this.x,t),this}static atMost(t,e=1){return Math.min(t,e)}atMost(t=1){return this.x=r.atMost(this.x,t),this}static clamp(t,e=0,s=1){return t=r.atLeast(t,Math.min(e,s)),t=r.atMost(t,Math.max(e,s)),t}clamp(t=0,e=1){return this.x=r.clamp(this.x,t,e),this}static lerp(t,e,s,o){let n=(e-t)*s;return o!==void 0&&Math.abs(n)>o&&(n=Math.sign(n)*o),t+n}lerp(t,e,s){return this.x=r.lerp(this.x,t,e,s),this}static step(t,e,s){let o=e-t;return Math.abs(o)<=s?e:t+Math.sign(o)*s}step(t,e){return this.x=r.step(this.x,t,e),this}static creep(t,e,s,o){let i=t*(1-Math.exp(-e*s));if(o!==void 0){let n=o*s;Math.abs(i)>n&&(i=Math.sign(i)*n)}return i}static approach(t,e,s,o,i){let n=e-t,a=this.creep(n,s,o,i);return t+a}approach(t,e,s,o){return this.x=r.approach(this.x,t,e,s,o),this}static wrap(t,e=0,s=1){let o=Math.min(e,s),n=Math.max(e,s)-o,a=t-o,c=a<0?n- -a%n:a%n;return o+c}wrap(t=0,e=1){return this.x=r.wrap(this.x,t,e),this}static constrainProximity(t,e,s){let o=e-t,i=Math.abs(o),n=i>s?s:i,a=o<0?-n:n;return t+a}constrainProximity(t,e){return this.x=r.constrainProximity(this.x,t,e),this}static inverse(t){return 1-t}inverse(){return this.x=r.inverse(this.x),this}static center(t){return t*2-1}center(){return this.x=r.center(this.x),this}static uncenter(t){return(t+1)/2}uncenter(){return this.x=r.uncenter(this.x),this}static map(t,e,s){let i=(s-e)*t;return e+i}map(t,e){return this.x=r.map(this.x,t,e),this}static remap(t,e,s,o=0,i=1,n=!1){let c=(t-e)/(s-e)*(i-o)+o;return n?r.clamp(c,o,i):c}remap(t,e,s=0,o=1,i=!1){return this.x=r.remap(this.x,t,e,s,o,i),this}static magnify(t){return 4*Math.pow(t-.5,3)+.5}magnify(){return this.x=r.magnify(this.x),this}static floor(t){return Math.floor(t)}floor(){return this.x=r.floor(this.x),this}static ceil(t){return Math.ceil(t)}ceil(){return this.x=r.ceil(this.x),this}static round(t){return Math.round(t)}round(){return this.x=r.round(this.x),this}static smooth(t,e,s){return s<=1?e:t+(e-t)/s}smooth(t,e){return this.x=r.smooth(this.x,t,e),this}};var b=class r{x;y;constructor(t,e){this.x=t,this.y=e}static new(t,e){return new this(t,e)}static zero(){return new this(0,0)}static all(t){return new this(t,t)}static from(t){return Array.isArray(t)?new this(...t):new this(t.x,t.y)}static magnitudeSquared(t,e){return t*t+e*e}static magnitude(t,e){return Math.sqrt(this.magnitudeSquared(t,e))}static average(...t){return this.zero().add(...t).divBy(t.length)}static min(...t){return new this(Math.min(...t.map(e=>e.x)),Math.min(...t.map(e=>e.y)))}static max(...t){return new this(Math.max(...t.map(e=>e.x)),Math.max(...t.map(e=>e.y)))}static fromAngle(t){return new this(Math.cos(t),Math.sin(t))}dup(){return new r(this.x,this.y)}*[Symbol.iterator](){yield this.x,yield this.y}array(){return[this.x,this.y]}toJSON(){return this.array()}toString(){return`(Vec2 x${this.x.toFixed(2)}, y${this.y.toFixed(2)})`}set_(t,e){return this.x=t,this.y=e,this}set({x:t,y:e}){return this.x=t,this.y=e,this}magnitudeSquared(){return r.magnitudeSquared(this.x,this.y)}magnitude(){return r.magnitude(this.x,this.y)}rotation(){return Math.atan2(this.y,this.x)}equals_(t,e){return this.x===t&&this.y===e}equals(...t){return t.every(({x:e,y:s})=>this.equals_(e,s))}near_(t,e,s=1e-6){return Math.abs(this.x-t)<=s&&Math.abs(this.y-e)<=s}near({x:t,y:e},s=1e-6){return this.near_(t,e,s)}dot_(t,e){return this.x*t+this.y*e}dot({x:t,y:e}){return this.dot_(t,e)}distanceSquared_(t,e){return t=this.x-t,e=this.y-e,t*t+e*e}distanceSquared({x:t,y:e}){return this.distanceSquared_(t,e)}distance_(t,e){return Math.sqrt(this.distanceSquared_(t,e))}distance({x:t,y:e}){return this.distance_(t,e)}angleBetween_(t,e){let s=this.dot_(t,e),o=this.magnitude()*r.magnitude(t,e);if(o===0)return 0;let i=y.clamp(s/o,-1,1);return Math.acos(i)}angleBetween({x:t,y:e}){return this.angleBetween_(t,e)}normalize(){return this.divBy(this.magnitude())}half(){return this.divBy(2)}double(){return this.mulBy(2)}abs(){return this.map(t=>Math.abs(t))}rotate(t){let{x:e,y:s}=this;return this.x=e*Math.cos(t)-s*Math.sin(t),this.y=e*Math.sin(t)+s*Math.cos(t),this}perpendicular(){let{x:t,y:e}=this;return this.x=-e,this.y=t,this}clampMagnitude(t){return this.magnitude()>t&&this.normalize().mulBy(t),this}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}map(t){return this.x=t(this.x,0),this.y=t(this.y,1),this}morph(t){let e=t(this);return e&&e!==this&&this.set(e),this}clamp(t={x:0,y:0},e={x:1,y:1}){return this.x=y.clamp(this.x,t.x,e.x),this.y=y.clamp(this.y,t.y,e.y),this}clampBy(t=0,e=1){return this.x=y.clamp(this.x,t,e),this.y=y.clamp(this.y,t,e),this}negate(){return this.map(t=>t*-1)}addBy(t){return this.x+=t,this.y+=t,this}subBy(t){return this.x-=t,this.y-=t,this}mulBy(t){return this.x*=t,this.y*=t,this}divBy(t){return t===0?this:(this.x/=t,this.y/=t,this)}add_(t,e){return this.x+=t,this.y+=e,this}add(...t){for(let{x:e,y:s}of t)this.add_(e,s);return this}sub_(t,e){return this.x-=t,this.y-=e,this}sub(...t){for(let{x:e,y:s}of t)this.sub_(e,s);return this}mul_(t,e){return this.x*=t,this.y*=e,this}mul(...t){for(let{x:e,y:s}of t)this.mul_(e,s);return this}div_(t,e){return t!==0&&(this.x/=t),e!==0&&(this.y/=e),this}div(...t){for(let{x:e,y:s}of t)this.div_(e,s);return this}lerp_(t,e,s){return this.x+=(t-this.x)*s,this.y+=(e-this.y)*s,this}lerp({x:t,y:e},s){return this.lerp_(t,e,s)}approach_(t,e,s,o,i){return this.x=y.approach(this.x,t,s,o,i),this.y=y.approach(this.y,e,s,o,i),this}approach({x:t,y:e},s,o,i){return this.approach_(t,e,s,o,i)}reflect_(t,e){let s=2*this.dot_(t,e);return this.x-=s*t,this.y-=s*e,this}reflect({x:t,y:e}){return this.reflect_(t,e)}rotateAroundPoint_(t,e,s){let o=this.x-t,i=this.y-e,n=Math.cos(s),a=Math.sin(s);return this.x=n*o-a*i+t,this.y=a*o+n*i+e,this}rotateAroundPoint({x:t,y:e},s){return this.rotateAroundPoint_(t,e,s)}smooth_(t,e,s){return this.x=y.smooth(this.x,t,s),this.y=y.smooth(this.y,e,s),this}smooth({x:t,y:e},s){return this.smooth_(t,e,s)}};var Ve=class{state;players;constructor(t,e){this.state=t,this.players=e}tick(){for(let t of this.players){let{agent:e,port:{actions:s}}=t,o=1;e.position.y+=o*s.gameplay.up.value,e.position.y-=o*s.gameplay.down.value,e.position.x-=o*s.gameplay.left.value,e.position.x+=o*s.gameplay.right.value,e.position.clamp(b.zero(),this.state.arenaSize)}}};var We=class{label="0";alive=!0;color="#444";position=b.zero()};var Ge=class{arenaSize=new b(200,100);agents=new Set;makeAgent(t){let e=new We;return e.label=t,e.position.set_(.5,.5).mul(this.arenaSize),this.agents.add(e),e}deleteAgent(t){return this.agents.delete(t),this}};var Nt=class{};function Lt(r,{start:t,end:e}){return!(t&&r<t||e&&r>e)}var Fe=class extends Nt{#t=new Map;async gets(...t){return t.map(e=>this.#t.get(e))}async hasKeys(...t){return t.map(e=>this.#t.has(e))}async*keys(t={}){if(t.limit===0)return;let e=0;for(let s of this.#t.keys())if(Lt(s,t)&&(yield s,e+=1),e>=(t.limit??1/0))break}async*entries(t={}){if(t.limit===0)return;let e=0;for(let[s,o]of this.#t.entries())if(Lt(s,t)&&(yield[s,o],e+=1),e>=(t.limit??1/0))break}async transaction(...t){for(let[e,s]of t)s===void 0?this.#t.delete(e):this.#t.set(e,s)}};function ks(r,t,e){let s=Object.entries(t);for(let[o,i]of s)r.addEventListener(o,i,e);return function(){for(let[i,n]of s)r.removeEventListener(i,n)}}var zt=class extends Nt{storage;static onStorageEvent=t=>ks(window,{storage:t});constructor(t=window.localStorage){super(),this.storage=t}async gets(...t){return t.map(e=>this.storage.getItem(e)??void 0)}async hasKeys(...t){return t.map(e=>this.storage.getItem(e)!==null)}async*keys(t={}){if(t.limit===0)return;let e=0;for(let s of Object.keys(this.storage))if(Lt(s,t)&&(yield s,e+=1),e>=(t.limit??1/0))break}async*entries(t={}){if(t.limit===0)return;let e=0;for(let[s,o]of Object.entries(this.storage))if(Lt(s,t)&&(yield[s,o],e+=1),e>=(t.limit??1/0))break}async transaction(...t){for(let[e,s]of t)s===void 0?this.storage.removeItem(e):this.storage.setItem(e,s)}};async function As(r){let t=[];for await(let e of r)t.push(e);return t}var Ke=class{kv;key;write;constructor(t,e){this.kv=t,this.key=e,this.write=new Br(t.write,e)}async set(t){return this.kv.set(this.key,t)}async get(){return this.kv.get(this.key)}async require(){return this.kv.require(this.key)}async guarantee(t){let e=await this.get();return e===void 0&&(e=await t(),await this.set(e)),e}},Br=class{key;#t;constructor(t,e){this.key=e,this.#t=t}set(t){return this.#t.set(this.key,t)}};var oe={parse:r=>JSON.parse(r),stringify:r=>JSON.stringify(r)};var Je=class{#t;constructor(t){this.#t=t}sets(...t){return t.map(([e,s])=>{let o=this.#t.prefix(e),i=s===void 0?void 0:oe.stringify(s);return[o,i]})}set(t,e){return this.sets([t,e])}del(...t){return t.map(e=>[this.#t.prefix(e),void 0])}};function*_s(r,t){if(r<=0)throw new Error("chunk size must be greater than zero");for(let e=0;e<t.length;e+=r)yield t.slice(e,e+r)}var Ye=class{#t;constructor(t){let{scopes:e,divisor:s,delimiter:o}=t;this.#t=e.length>0?e.join(s)+o:""}prefix=t=>this.#t+t;unprefix=t=>{let e=this.#t.length;return t.slice(e)};scan=t=>{let{limit:e}=t,s=this.#t+(t.start??""),o=this.#t+(t.end??"\xFF");return{limit:e,start:s,end:o}}};var Xe=class r{driver;static collect=As;write;#t;#e;constructor(t=new Fe,e={}){this.driver=t,this.#t={scopes:[],divisor:".",delimiter:":",chunkSize:1e4,...e},this.#e=new Ye(this.#t),this.write=new Je(this.#e)}async gets(...t){return(await this.driver.gets(...t.map(this.#e.prefix))).map(s=>s===void 0?s:oe.parse(s))}async get(t){let[e]=await this.gets(t);return e}async requires(...t){let e=await this.gets(...t);for(let s of e)if(s===void 0)throw new Error("required key not found");return e}async require(t){let[e]=await this.requires(t);return e}async hasKeys(...t){return this.driver.hasKeys(...t.map(this.#e.prefix))}async has(t){let[e]=await this.hasKeys(t);return e}async*keys(t={}){for await(let e of this.driver.keys(this.#e.scan(t)))yield this.#e.unprefix(e)}async clear(t={}){let e=[];for await(let s of this.keys(t))e.push(s);for(let s of _s(this.#t.chunkSize,e))await this.del(...s)}async*entries(t={}){for await(let[e,s]of this.driver.entries(this.#e.scan(t)))yield[this.#e.unprefix(e),oe.parse(s)]}async*values(t){for await(let[,e]of this.entries(t))yield e}async transaction(t){let e=t(this.write).flat();return this.driver.transaction(...e)}async set(t,e){return this.transaction(s=>[s.set(t,e)])}async sets(...t){return this.transaction(e=>[e.sets(...t)])}async del(...t){return this.transaction(e=>[e.del(...t)])}async guarantee(t,e){let s=await this.get(t);return s===void 0&&(s=await e(),await this.transaction(o=>[o.set(t,s)])),s}async versionMigration(t,e,s){let o=this,i=await o.get(t)??0;typeof i!="number"&&(i=0),i!==e&&(await s(i),await o.set(t,e))}store(t){return new Ke(this,t)}scope(t,e=this.#t.delimiter){return new r(this.driver,{...this.#t,delimiter:e,scopes:[...this.#t.scopes,t]})}flatten(){return new r(this.driver,{...this.#t,delimiter:""})}};var ie=class r{profiles=new X;portProfiles=[];metaBindings=null;constructor(t){if(t){for(let e of t.profiles)this.profiles.set(e.id,e);this.portProfiles=t.portProfiles.map(e=>e&&(this.profiles.has(e)?e:null)),this.metaBindings=t.metaBindings}}toJSON(){return B.clone({profiles:[...this.profiles.values()],portProfiles:this.portProfiles,metaBindings:this.metaBindings})}clone(){return new r(this.toJSON())}getProfile(t){return this.profiles.get(t)}getProfileForPort(t){let e=this.portProfiles.at(t);return e?this.getProfile(e):void 0}};var Ze=class{store;$catalog;static async load(t){let e=$(new ie(await t.get()));return new this(t,e)}dispose=D();constructor(t,e){this.store=t,this.$catalog=e,this.dispose.schedule(zt.onStorageEvent(async()=>this.reload()))}async reload(){let t=new ie(await this.store.get());await this.$catalog.set(t)}async save(t){await this.store.set(t.toJSON()),await this.$catalog(t)}async#t(t){let e=this.$catalog().clone(),s=t(e);return await this.store.set(e.toJSON()),await this.$catalog(e),s}async createProfile(t,e){return this.#t(s=>{let o=At.random(),i={id:o,label:t,bindings:e};return s.profiles.set(o,i),i})}async deleteProfile(t){return this.#t(e=>{e.profiles.delete(t)})}async assignPortProfile(t,e){return this.#t(s=>{s.portProfiles[t]=e})}};function T(r){return r>0}var Qe=class{on=E();onDown=E();#t=0;#e=0;get value(){return this.#t}set value(t){this.#e=this.#t,this.#t=t,this.on.publish(this),this.down&&this.onDown.publish(this)}get previous(){return this.#e}get changed(){return this.#t!==this.#e}get pressed(){return T(this.#t)}get down(){return!T(this.#e)&&T(this.#t)}get up(){return T(this.#e)&&!T(this.#t)}};var U=class extends X{constructor(t){if(super(),t)for(let[e,s]of t)this.set(e,s)}zero(){for(let t of this.keys())this.set(t,0);return this}mergeSample([t,e]){let s=this.get(t)??0;return e>s&&this.set(t,e),this}};function Ms([,,r],t){return{lastValue:0,holdStart:t,settings:Oo(r)}}function Bo(){return{scale:1,invert:!1,clamp:null,range:null,bottom:null,top:null,timing:["direct"]}}function Oo(r={}){return{...Bo(),...r}}var Es=(r,t,e)=>Pr(e).line(function(o){let{settings:i}=t;if(i.clamp){let[n,a]=i.clamp;o=y.clamp(o,n,a)}if(i.range){let[n,a]=i.range;o=y.isBetween(o,n,a)?y.remap(o,n,a,0,1,!0):0}return i.bottom&&(o=o<i.bottom?0:o),i.top&&(o=Math.min(i.top,o)),o},function(o){return t.settings.invert?1-o:o},function(o){return t.settings.scale*o},function(o){let{settings:i}=t,n=(i.timing[0]==="direct"?void 0:i.timing[1])??250,a=!T(t.lastValue)&&T(o),c=T(t.lastValue)&&!T(o);a&&(t.holdStart=r);let l=r-t.holdStart>=n;switch(t.lastValue=o,i.timing[0]){case"direct":return o;case"tap":return c&&!l?1:0;case"hold":return T(o)&&l?o:0;default:throw new Error("unknown bindings timing")}});function Ps(r){return r.length>0?Math.max(...r):0}function Cs(r){return r.length>0?Math.min(...r):0}var tr=class{bindings;actions;#t=new Set;#e=new U;#r=0;#s=new K;#o=us();constructor(t){this.bindings=t,this.actions=Qt(t,(e,s)=>Qt(e,o=>{let i=new Qe;return this.#o.subscribe(()=>{i.value=this.#t.has(s)?this.#n([])(o,s):0}),i}))}resolve(t,e,s){return this.#r=t,this.#t=e,this.#e=s,this.#o(),this.actions}#i(t,e,s){let o=this.#s.guarantee(t.join("/"),()=>Ms(["code",e,s],this.#r)),i=this.#e.get(e)??0;return Es(this.#r,o,i)}#n=t=>(e,s)=>{let o=[...t,String(s),typeof e=="string"?e:e[0]],i=this.#n(o);if(typeof e=="string")return this.#i(o,e);switch(e[0]){case"code":{let[,n,a]=e;return this.#i(o,n,a)}case"and":{let[,...n]=e,a=n.map(i);return Cs(a)}case"or":{let[,...n]=e,a=n.map(i);return Ps(a)}case"not":{let[,n]=e;return i(n,"subject")>0?0:1}case"cond":{let[,n,a]=e;return i(a,"guard")>0?i(n,"subject"):0}case"mods":{let[,n,a]=e,c=(h,...u)=>h?["or",...u]:["not",["or",...u]];return i(["cond",n,["and",c(a.ctrl??!1,"ControlLeft","ControlRight"),c(a.alt??!1,"AltLeft","AltRight"),c(a.meta??!1,"MetaLeft","MetaRight"),c(a.shift??!1,"ShiftLeft","ShiftRight")]],"guard")>0?i(n,"subject"):0}}}};var et=class{*[Symbol.iterator](){for(let t of this.samples())yield t}};var Ht=class extends et{devices=new Ae;#t=new U;constructor(...t){super(),this.devices.adds(...t)}*samples(){this.#t.zero();for(let t of this.devices)for(let e of t.samples())this.#t.mergeSample(e);yield*this.#t.entries()}};var rt=class extends tr{#t=new Ht;devices=this.#t.devices;modes=new Ae;constructor(t){super(t),this.modes.adds(...Object.keys(t))}resolve(t=Date.now()){let e=new U(this.#t.samples());return super.resolve(t,this.modes,e)}};var gt="meta";var qt=()=>({[gt]:{revealOverlay:["or","Backslash","gamepad.beta","gamepad.gamma"],shimmyNext:["or","BracketRight",["and",["or","gamepad.beta","gamepad.gamma"],"gamepad.right"],["and",["or","gamepad.beta","gamepad.gamma"],"gamepad.bumper.right"]],shimmyPrevious:["or","BracketLeft",["and",["or","gamepad.beta","gamepad.gamma"],"gamepad.left"],["and",["or","gamepad.beta","gamepad.gamma"],"gamepad.bumper.left"]]}});var er=class{device;metaPort;constructor(t,e=qt()){this.device=t,this.metaPort=new rt(e),this.metaPort.devices.add(t)}};var rr=class{ports;metaBindings;on=E();#t=new X;metaPort;constructor(t,e=qt()){this.ports=t,this.metaBindings=e,this.metaPort=new rt(e)}poll(t=Date.now()){return this.#r(t),this.#s(t),this.#o(t)}portByIndex(t){let e=this.ports.at(t);if(!e)throw new Error(`port ${t} not found`);return e}portByDevice(t){for(let e of this.ports)if(e.devices.has(t))return e}shimmy(t,e){let s=this.ports.findIndex(a=>a.devices.has(t)),o=Math.max(0,this.ports.length-1),i=y.clamp(s+e,0,o),n=this.portByIndex(i);return this.reassign(t,n),n}reassign(t,e=this.getLonelyPort()){this.ports.forEach(s=>s.devices.delete(t)),e.devices.add(t),this.#e()}unplug(t){this.ports.forEach(e=>e.devices.delete(t)),this.#t.delete(t),this.#e()}plug=(t,e=this.getLonelyPort())=>(this.unplug(t),this.#t.set(t,new er(t,this.metaBindings)),e.devices.add(t),this.#e(),()=>this.unplug(t));getLonelyPort(){let t=this.ports.at(0);for(let e of this.ports)e.devices.size<t.devices.size&&(t=e);return t}#e=ke(0,()=>this.on.publish());#r(t){this.metaPort.devices.clear(),this.metaPort.devices.adds(...this.#t.keys()),this.metaPort.resolve(t)}#s(t){for(let e of this.#t.values()){let s=e.metaPort.resolve(t);s[gt].shimmyNext.down&&this.shimmy(e.device,1),s[gt].shimmyPrevious.down&&this.shimmy(e.device,-1)}}#o(t){return this.ports.map(e=>(e.resolve(t),e))}};function Rs(r,t){let e=B.clone(r);if(!t)return e;for(let[s,o]of Object.entries(e))for(let i of Object.keys(o)){let n=t[s]?.[i];n&&(o[i]=n)}return e}function ne(r){return r>=0?[r,0]:[0,Math.abs(r)]}function ae(r){let[t,e]=ne(r.x),[s,o]=ne(r.y);return{up:o,down:s,left:e,right:t}}var yt=class extends et{channel;$vector=$(b.zero());$breakdown=dt(()=>ae(this.$vector.get()));constructor(t="stick"){super(),this.channel=t}samples(){let{channel:t}=this,{up:e,down:s,left:o,right:i}=this.$breakdown.get();return[[`${t}.up`,e],[`${t}.down`,s],[`${t}.left`,o],[`${t}.right`,i]]}};var V=class extends et{on=E();sampleMap=new U;setSample(t,e){return this.sampleMap.set(t,e),this.on.pub(t,e),this}*samples(){for(let t of this.sampleMap)yield t}};var It=class extends V{stickLeft=new yt;stickRight=new yt;samples(){let t=this.stickLeft.$breakdown();this.setSample("gamepad.stick.left.up",t.up),this.setSample("gamepad.stick.left.down",t.down),this.setSample("gamepad.stick.left.left",t.left),this.setSample("gamepad.stick.left.right",t.right);let e=this.stickRight.$breakdown();return this.setSample("gamepad.stick.right.up",e.up),this.setSample("gamepad.stick.right.down",e.down),this.setSample("gamepad.stick.right.left",e.left),this.setSample("gamepad.stick.right.right",e.right),super.samples()}};var sr=class r extends V{client=new b(0,0);movement=new b(0,0);dispose=D();constructor(t=window){super(),this.dispose.schedule(pt(t,{pointerdown:e=>{let s=r.buttonCode(e);this.setSample(s,1)},pointerup:e=>{let s=r.buttonCode(e);this.setSample(s,0)},pointermove:e=>{this.client.x=e.clientX,this.client.y=e.clientY,this.movement.x+=e.movementX,this.movement.y+=e.movementY},wheel:e=>{this.sampleMap.set("pointer.wheel.right",0),this.sampleMap.set("pointer.wheel.left",0),this.sampleMap.set("pointer.wheel.up",0),this.sampleMap.set("pointer.wheel.down",0);for(let[s,o]of r.wheelCodes(e))this.setSample(s,o)}}))}static buttonCode(t){switch(t.button){case 0:return"pointer.button.left";case 1:return"pointer.button.middle";case 2:return"pointer.button.right";default:return`pointer.button.${t.button+1}`}}static wheelCodes(t){let e=[];return t.deltaX&&e.push([t.deltaX>0?"pointer.wheel.right":"pointer.wheel.left",t.deltaX]),t.deltaY&&e.push([t.deltaY>0?"pointer.wheel.down":"pointer.wheel.up",t.deltaY]),e}samples(){return this.#t(),super.samples()}#t(){let[t,e]=this.movement,[s,o]=ne(t),[i,n]=ne(e);t&&(t>=0?this.setSample("pointer.move.right",Math.abs(o)):this.setSample("pointer.move.left",Math.abs(s))),e&&(e>=0?this.setSample("pointer.move.up",Math.abs(n)):this.setSample("pointer.move.down",Math.abs(i))),this.movement.set_(0,0)}};var or=class extends V{dispose=D();constructor(t=window){super(),this.dispose.schedule(pt(t,this.#t)),this.dispose.schedule(pt(window,this.#e))}#t={keydown:t=>{if(t.repeat)return null;this.setSample(t.code,1)},keyup:t=>{if(t.repeat)return null;this.setSample(t.code,0)}};#e={blur:()=>{this.sampleMap.zero()}}};var st=class extends Ht{keyboard=new or;pointer=new sr;vpad=new It;constructor(){super(),this.devices.add(this.keyboard).add(this.pointer).add(this.vpad)}};function ce(r,t){let e=b.from(r),s=e.distance_(0,0),o=y.remap(s,t.x,t.y,0,1,!0);return e.normalize().mulBy(o)}var Do=["gamepad.a","gamepad.b","gamepad.x","gamepad.y","gamepad.bumper.left","gamepad.bumper.right","gamepad.trigger.left","gamepad.trigger.right","gamepad.alpha","gamepad.beta","gamepad.stick.left.click","gamepad.stick.right.click","gamepad.up","gamepad.down","gamepad.left","gamepad.right","gamepad.gamma"],Ut=class extends V{pad;range=new b(.2,.9);constructor(t){super(),this.pad=t}get gamepad(){return this.pad.gamepad}samples(){return this.#t(this.pad.gamepad),this.#e(this.pad.gamepad),super.samples()}#t(t){let e=0,s=o=>{e=Math.max(e,o)};for(let[o,i]of Do.entries()){let n=t.buttons.at(o)?.value??0;s(n),this.setSample(i,n)}this.setSample("gamepad.any",e)}#e(t){let[e=0,s=0,o=0,i=0]=t.axes,n=ae(ce(new b(e,s),this.range)),a=ae(ce(new b(o,i),this.range));this.setSample("gamepad.stick.left.up",n.up),this.setSample("gamepad.stick.left.down",n.down),this.setSample("gamepad.stick.left.left",n.left),this.setSample("gamepad.stick.left.right",n.right),this.setSample("gamepad.stick.right.up",a.up),this.setSample("gamepad.stick.right.down",a.down),this.setSample("gamepad.stick.right.left",a.left),this.setSample("gamepad.stick.right.right",a.right)}};var ir=class{fallback="\u2754";#t=new Map;constructor(t=[[st,"\u{1F4BB}"],[Ut,"\u{1F3AE}"],[It,"\u{1F4F1}"]]){this.add(...t)}get(t){return this.#t.get(t)??this.fallback}add(...t){for(let[e,s]of t)this.#t.set(e,s);return this}clear(){return this.#t.clear(),this}};var jo=r=>_e(r).map(t=>`hsl(${(t*(360/r)+180)%360}deg, 100%, 50%)`),nr=class extends Me{constructor(){super(()=>jo(12))}};var Or=class{icon;label;color;constructor(t,e,s){this.icon=t,this.label=e,this.color=s}},Vt=class{icons=new ir;#t=new is;#e=new nr;get(t){return this.#t.guarantee(t,()=>new Or(this.icons.get(t.constructor),At.random(4),this.#e.takeFirst()))}};var ar=class{hub;deviceSkins;auto=!0;dispose=D();#t=Date.now();#e=$(!1);$manual=$(!1);$visible=$.derived(()=>this.$manual()||this.auto&&this.#e());$showLabels=$(!1);constructor(t,e=new Vt){this.hub=t,this.deviceSkins=e,this.dispose.schedule(t.on(async()=>{Date.now()-this.#t>100&&await this.bump()}))}#r=ke(1500,()=>this.#e(!1));async bump(){await this.#e(!0),await this.#r()}async toggle(t=!this.$manual()){return this.$manual.set(t)}};var cr=class{baseBindings;baseMetaBindings;hub;db;static async load(t){let e=await Ze.load(t.kv.store("catalog")),s=_e(t.portCount).map(i=>e.$catalog().getProfileForPort(i)).map(i=>Rs(t.bindings,i?.bindings)).map(i=>new rt(i)),o=new rr(s,e.$catalog().metaBindings??t.metaBindings??qt());return new this(t.bindings,t.metaBindings,o,e)}dispose=D();deviceSkins=new Vt;primaryDevice=new st;overlayVisibility;constructor(t,e,s,o){this.baseBindings=t,this.baseMetaBindings=e,this.hub=s,this.db=o,this.overlayVisibility=new ar(s,this.deviceSkins),this.dispose.schedule(s.metaPort.actions[gt].revealOverlay.on(i=>{i.pressed&&this.overlayVisibility.bump()}))}get catalog(){return this.db.$catalog()}};var Dr=class{port;agent;constructor(t,e){this.port=t,this.agent=e}},lr=class{#t=new X;constructor(t,e){for(let[s,o]of t.ports.entries()){let i=(s+1).toString();this.#t.set(o,new Dr(o,e.makeAgent(i)))}}[Symbol.iterator](){return this.#t.values()}require(t){return this.#t.require(t)}};var ur=class{state;canvas=(()=>{let t=document.createElement("canvas");return t.width=200,t.height=100,t})();ctx=this.canvas.getContext("2d");constructor(t){this.state=t}percent(t){let e=Math.min(this.canvas.width,this.canvas.height);return Math.ceil(e*(t/100))}resolve(t){return t.dup().div(this.state.arenaSize).morph(e=>{e.y=1-e.y}).mul_(this.canvas.width,this.canvas.height)}render(){let{state:t}=this;this.#e();let e=[...t.agents].reverse(),s=e.filter(i=>!i.alive),o=e.filter(i=>i.alive);for(let i of s)this.#r(i);for(let i of o)this.#s(i)}#t(){let{ctx:t}=this;return t.imageSmoothingEnabled=!1,t.fillStyle="#000",t.strokeStyle="#000",t.lineWidth=1,t.font="10px sans-serif",t.textAlign="center",t.textBaseline="middle",t}#e(){let{canvas:t}=this,e=this.#t();e.fillStyle="#000",e.fillRect(0,0,t.width,t.height)}#r(t){let e=this.#t(),s=this.percent(10),{position:o}=t,[i,n]=this.resolve(o);e.font=`${s*1.3}px sans-serif`,e.textAlign="center",e.textBaseline="middle",e.fillStyle="#fff4",e.fillText(t.label,i,n)}#s(t){let e=this.#t(),s=this.percent(10),{color:o,position:i}=t,[n,a]=this.resolve(i);e.beginPath(),e.arc(n,a,s,0,Math.PI*2),e.fillStyle=o,e.fill(),e.lineWidth=this.percent(2),e.strokeStyle="#fff",e.stroke(),e.font=`${s*1.3}px sans-serif`,e.textAlign="center",e.textBaseline="middle",e.strokeStyle="#0004",e.strokeText(t.label,n,a),e.fillStyle="#fff",e.fillText(t.label,n,a)}};var ot=class extends yt{hub;constructor(t){super(),this.hub=t}shimmyNext=()=>this.hub.shimmy(this,1);shimmyPrevious=()=>this.hub.shimmy(this,-1)};var Bs={gameplay:{up:["or","KeyW","ArrowUp","stick.up","gamepad.stick.left.up","gamepad.stick.right.up"],down:["or","KeyS","ArrowDown","stick.down","gamepad.stick.left.down","gamepad.stick.right.down"],left:["or","KeyA","ArrowLeft","stick.left","gamepad.stick.left.left","gamepad.stick.right.left"],right:["or","KeyD","ArrowRight","stick.right","gamepad.stick.left.right","gamepad.stick.right.right"]}};function Os(r,t){let e=r;return()=>{let s=t();return s!=null&&(e=s),e}}var jr=class{get;constructor(t){this.get=t}get gamepad(){return this.get()}};function Ds(r){let t=new K;return pt(window,{gamepadconnected:({gamepad:e})=>{let s=()=>navigator.getGamepads().at(e.index),o=new jr(Os(e,s)),i=r(o);t.set(e.index,{pad:o,dispose:i})},gamepaddisconnected:({gamepad:e})=>{let s=t.get(e.index);s&&(t.delete(e.index),s.dispose())}})}function js(r){return Ds(t=>r(new Ut(t)))}function Ts(){let r=new zt(window.localStorage);return new Xe(r).scope("tact")}var hr=class{deck;static async load(){return new this(await cr.load({portCount:4,kv:Ts(),bindings:Bs}))}logic;dispose=D();state=new Ge;renderer=new ur(this.state);constructor(t){this.deck=t,this.deck.deviceSkins.icons.add([ot,"\u{1F518}"]),this.logic=new Ve(this.state,new lr(t.hub,this.state)),this.dispose.schedule(this.deck.hub.on(()=>{for(let e of this.logic.players){e.agent.alive=e.port.devices.size>0;let[s]=e.port.devices;e.agent.color=s?this.deck.deviceSkins.get(s).color:"#444"}})),this.plug(new st),this.plug(new ot(t.hub)),this.dispose.schedule(js(t.hub.plug))}plug(t){return this.deck.hub.plug(t),()=>this.unplug(t)}unplug(t){this.deck.hub.unplug(t)}loop(t){return as(async()=>{await Mt(1e3/t),this.deck.hub.poll(),this.logic.tick(),this.renderer.render()})}};var Ns=(r,t,e)=>{let s=new Map;for(let o=t;o<=e;o++)s.set(r[o],o);return s},Ls=Ot(class extends Bt{constructor(r){if(super(r),r.type!==He.CHILD)throw Error("repeat() can only be used in text expressions")}dt(r,t,e){let s;e===void 0?e=t:t!==void 0&&(s=t);let o=[],i=[],n=0;for(let a of r)o[n]=s?s(a,n):n,i[n]=e(a,n),n++;return{values:i,keys:o}}render(r,t,e){return this.dt(r,t,e).values}update(r,[t,e,s]){let o=fs(r),{values:i,keys:n}=this.dt(t,e,s);if(!Array.isArray(o))return this.ut=n,i;let a=this.ut??=[],c=[],l,h,u=0,p=o.length-1,f=0,d=i.length-1;for(;u<=p&&f<=d;)if(o[u]===null)u++;else if(o[p]===null)p--;else if(a[u]===n[f])c[f]=tt(o[u],i[f]),u++,f++;else if(a[p]===n[d])c[d]=tt(o[p],i[d]),p--,d--;else if(a[u]===n[d])c[d]=tt(o[u],i[d]),Rt(r,c[d+1],o[u]),u++,d--;else if(a[p]===n[f])c[f]=tt(o[p],i[f]),Rt(r,o[u],o[p]),p--,f++;else if(l===void 0&&(l=Ns(n,f,d),h=Ns(a,u,p)),l.has(a[u]))if(l.has(a[p])){let S=h.get(n[f]),N=S!==void 0?o[S]:null;if(N===null){let xt=Rt(r,o[u]);tt(xt,i[f]),c[f]=xt}else c[f]=tt(N,i[f]),Rt(r,o[u],N),o[S]=null;f++}else ze(o[p]),p--;else ze(o[u]),u++;for(;f<=d;){let S=Rt(r,c[d+1]);tt(S,i[f]),c[f++]=S}for(;u<=p;){let S=o[u++];S!==null&&ze(S)}return this.ut=n,ds(r,c),F}});var zs=A`
|
|
28
|
+
`;function G(r,t){return(e,s)=>vs(e,{pending:r,err:t,ok:s})}var hh=G(V(10,[" "," ",". ",".. ","..."," .."," ."]),W);var yh=G(V(3,["\u{1F30E}","\u{1F30F}","\u{1F30D}"]),W);var $h=G(V(10,["\u{1F312}","\u{1F313}","\u{1F314}","\u{1F315}","\u{1F316}","\u{1F317}","\u{1F318}","\u{1F311}","\u{1F311}","\u{1F311}"]),W);var Eh=G(V(16,["|","/","-","\\"]),W);var Rh=G(V(20,[":....",":....","::...",".::..","..::.","...::","....:","....:","...::","..::.",".::..","::..."]),W);function m(r,t){return()=>Ho({hz:r,frames:t})}var Ho=k(({hz:r,frames:t})=>{R("loading"),nt(E,qo);let e=at(0);return T(()=>se(async()=>{await et(1e3/r);let s=e.get()+1;e.set(s>=t.length?0:s)})),t.at(e.get())}),qo=w`
|
|
29
|
+
:host {
|
|
30
|
+
font-family: monospace;
|
|
31
|
+
white-space: pre;
|
|
32
|
+
user-select: none;
|
|
33
|
+
}
|
|
34
|
+
`;var v=20,Lt=10,Ht=4,Jh=m(v,["|","/","-","\\"]),Yh=m(v,["\u2808","\u2810","\u2820","\u2880","\u2840","\u2804","\u2802","\u2801"]),Xh=m(v,["\u2B06\uFE0F","\u2197\uFE0F","\u27A1\uFE0F","\u2198\uFE0F","\u2B07\uFE0F","\u2199\uFE0F","\u2B05\uFE0F","\u2196\uFE0F"]),Zh=m(v,["\u25B0\u25B1\u25B1\u25B1\u25B1","\u25B0\u25B1\u25B1\u25B1\u25B1","\u25B1\u25B0\u25B1\u25B1\u25B1","\u25B1\u25B1\u25B0\u25B1\u25B1","\u25B1\u25B1\u25B1\u25B0\u25B1","\u25B1\u25B1\u25B1\u25B1\u25B0","\u25B1\u25B1\u25B1\u25B1\u25B0","\u25B1\u25B1\u25B1\u25B0\u25B1","\u25B1\u25B1\u25B0\u25B1\u25B1","\u25B1\u25B0\u25B1\u25B1\u25B1"]),Qh=m(v,["\u25B1\u25B1\u25B0\u25B1\u25B1","\u25B1\u25B1\u25B1\u25B0\u25B1","\u25B1\u25B1\u25B1\u25B0\u25B0","\u25B1\u25B1\u25B1\u25B0\u25B0","\u25B1\u25B1\u25B1\u25B1\u25B0","\u25B1\u25B1\u25B1\u25B1\u25B0","\u25B1\u25B1\u25B1\u25B1\u25B0","\u25B1\u25B1\u25B1\u25B0\u25B0","\u25B1\u25B1\u25B1\u25B0\u25B0","\u25B1\u25B1\u25B1\u25B0\u25B1","\u25B1\u25B1\u25B0\u25B1\u25B1","\u25B1\u25B0\u25B1\u25B1\u25B1","\u25B0\u25B0\u25B1\u25B1\u25B1","\u25B0\u25B0\u25B1\u25B1\u25B1","\u25B0\u25B1\u25B1\u25B1\u25B1","\u25B0\u25B1\u25B1\u25B1\u25B1","\u25B0\u25B1\u25B1\u25B1\u25B1","\u25B0\u25B0\u25B1\u25B1\u25B1","\u25B0\u25B0\u25B1\u25B1\u25B1","\u25B1\u25B0\u25B1\u25B1\u25B1"]),tm=m(v,["\u25B0\u25B1\u25B1\u25B1\u25B1","\u25B0\u25B1\u25B1\u25B1\u25B1","\u25B0\u25B0\u25B1\u25B1\u25B1","\u25B0\u25B0\u25B0\u25B1\u25B1","\u25B1\u25B0\u25B0\u25B0\u25B1","\u25B1\u25B1\u25B0\u25B0\u25B0","\u25B1\u25B1\u25B1\u25B0\u25B0","\u25B1\u25B1\u25B1\u25B1\u25B0","\u25B1\u25B1\u25B1\u25B1\u25B0","\u25B1\u25B1\u25B1\u25B0\u25B0","\u25B1\u25B1\u25B0\u25B0\u25B0","\u25B1\u25B0\u25B0\u25B0\u25B1","\u25B0\u25B0\u25B0\u25B1\u25B1","\u25B0\u25B0\u25B1\u25B1\u25B1"]),em=m(v,["\u25B1\u25B1\u25B1\u25B1\u25B1","\u25B1\u25B1\u25B1\u25B1\u25B1","\u25B0\u25B1\u25B1\u25B1\u25B1","\u25B0\u25B0\u25B1\u25B1\u25B1","\u25B0\u25B0\u25B0\u25B1\u25B1","\u25B0\u25B0\u25B0\u25B0\u25B1","\u25B0\u25B0\u25B0\u25B0\u25B0","\u25B0\u25B0\u25B0\u25B0\u25B0","\u25B1\u25B0\u25B0\u25B0\u25B0","\u25B1\u25B1\u25B0\u25B0\u25B0","\u25B1\u25B1\u25B1\u25B0\u25B0","\u25B1\u25B1\u25B1\u25B1\u25B0"]),rm=m(v,["\u2581\u2581\u2581\u2581\u2581","\u2581\u2581\u2581\u2581\u2581","\u2588\u2581\u2581\u2581\u2581","\u2588\u2588\u2581\u2581\u2581","\u2588\u2588\u2588\u2581\u2581","\u2588\u2588\u2588\u2588\u2581","\u2588\u2588\u2588\u2588\u2588","\u2588\u2588\u2588\u2588\u2588","\u2581\u2588\u2588\u2588\u2588","\u2581\u2581\u2588\u2588\u2588","\u2581\u2581\u2581\u2588\u2588","\u2581\u2581\u2581\u2581\u2588"]),sm=m(v,["\u2588\u2581\u2581\u2581\u2581","\u2588\u2581\u2581\u2581\u2581","\u2588\u2588\u2581\u2581\u2581","\u2588\u2588\u2588\u2581\u2581","\u2588\u2588\u2588\u2588\u2581","\u2588\u2588\u2588\u2588\u2588","\u2588\u2588\u2588\u2588\u2588","\u2581\u2588\u2588\u2588\u2588","\u2581\u2581\u2588\u2588\u2588","\u2581\u2581\u2581\u2588\u2588","\u2581\u2581\u2581\u2581\u2588","\u2581\u2581\u2581\u2581\u2588","\u2581\u2581\u2581\u2588\u2588","\u2581\u2581\u2588\u2588\u2588","\u2581\u2588\u2588\u2588\u2588","\u2588\u2588\u2588\u2588\u2588","\u2588\u2588\u2588\u2588\u2588","\u2588\u2588\u2588\u2588\u2581","\u2588\u2588\u2588\u2581\u2581","\u2588\u2588\u2581\u2581\u2581"]),om=m(Ht,["\u{1F6B6}","\u{1F3C3}"]),im=m(Lt,["\u25F7","\u25F6","\u25F5","\u25F4"]),nm=m(v,["=----","-=---","--=--","---=-","----=","----=","---=-","--=--","-=---","=----"]),am=m(v,["o----","-o---","--o--","---o-","----o","----o","---o-","--o--","-o---","o----"]),cm=m(Lt,["[ ]","[ ]","[= ]","[== ]","[===]","[ ==]","[ =]"]),lm=m(Lt,["[ ]","[ ]","[= ]","[== ]","[===]","[ ==]","[ =]","[ ]","[ ]","[ =]","[ ==]","[===]","[== ]","[= ]"]),um=m(Lt,[" "," ",". ",".. ","..."," .."," ."]),pm=m(v,[". ",". ",".. ","..."," .."," ."," ."," ..","...",".. "]),hm=m(v,[".....",".....",":....","::...",":::..","::::.",":::::",":::::",".::::","..:::","...::","....:"]),mm=m(v,[":....",":....","::...",".::..","..::.","...::","....:","....:","...::","..::.",".::..","::..."]),fm=m(v,[".....",".....","..:..",".:::.",".:::.",":::::",":::::","::.::",":...:"]),dm=m(v,[".....",".....","..:..",".:::.",".:::.",":::::",":::::","::.::",":...:",".....",".....",":...:","::.::",":::::",":::::",".:::.",".:::.","..:.."]),gm=m(v,["000","100","110","111","011","001"]),ym=m(v,["11111","01111","00111","10011","11001","01100","00110","10011","11001","11100","11110"]),xm=m(v,["11111","01111","10111","11011","11101","11110","11111","11110","11101","11011","10111","01111"]),bm=m(Ht,["\u{1F539}","\u{1F535}"]),wm=m(Lt,["\u{1F642}","\u{1F642}","\u{1F617}","\u{1F619}","\u{1F618}","\u{1F618}","\u{1F619}"]),vm=m(v,["\u{1F550}","\u{1F551}","\u{1F552}","\u{1F553}","\u{1F554}","\u{1F555}","\u{1F556}","\u{1F557}","\u{1F558}","\u{1F559}","\u{1F55A}","\u{1F55B}"]),$m=m(v,["\u{1F91C} \u{1F91B}","\u{1F91C} \u{1F91B}","\u{1F91C} \u{1F91B}"," \u{1F91C} \u{1F91B} "," \u{1F91C}\u{1F91B} "," \u{1F91C}\u{1F91B} "," \u{1F91C}\u{1F4A5}\u{1F91B} ","\u{1F91C} \u{1F4A5} \u{1F91B}","\u{1F91C} \u2728 \u{1F91B}","\u{1F91C} \u2728 \u{1F91B}"]),Io=m(Ht,["\u{1F30E}","\u{1F30F}","\u{1F30D}"]),Sm=m(Ht,["\u{1F513}","\u{1F512}"]),km=m(Ht,["\u{1F505}","\u{1F506}"]),Am=m(Ht,["\u{1F508}","\u{1F508}","\u{1F509}","\u{1F50A}","\u{1F50A}","\u{1F509}"]),_m=m(Lt,["\u{1F311}","\u{1F311}","\u{1F311}","\u{1F318}","\u{1F317}","\u{1F316}","\u{1F315}","\u{1F314}","\u{1F313}","\u{1F312}"]);var Vo=k(r=>(R("error"),nt(E,Wo),typeof r=="string"?r:r instanceof Error?x`<strong>${r.name}:</strong> <span>${r.message}</span>`:"error")),Wo=w`
|
|
35
|
+
:host {
|
|
36
|
+
font-family: monospace;
|
|
37
|
+
color: red;
|
|
38
|
+
}
|
|
39
|
+
`;var y=class r{x;constructor(t){this.x=t}static new(t){return new this(t)}dup(){return new r(this.x)}set(t){return this.x=t,this}static isBetween(t,e=0,s=1){let o=Math.min(e,s),i=Math.max(e,s);return t>=o&&t<=i}isBetween(t=0,e=1){return r.isBetween(this.x,t,e)}static isNear(t,e,s=.01){return Math.abs(t-e)<=s}isNear(t,e=.01){return r.isNear(this.x,t,e)}static add(...t){let e=0;for(let s of t)e+=s;return e}add(...t){return this.x=r.add(this.x,...t),this}sub(...t){for(let e of t)this.x-=e;return this}static atLeast(t,e=0){return Math.max(t,e)}atLeast(t=0){return this.x=r.atLeast(this.x,t),this}static atMost(t,e=1){return Math.min(t,e)}atMost(t=1){return this.x=r.atMost(this.x,t),this}static clamp(t,e=0,s=1){return t=r.atLeast(t,Math.min(e,s)),t=r.atMost(t,Math.max(e,s)),t}clamp(t=0,e=1){return this.x=r.clamp(this.x,t,e),this}static lerp(t,e,s,o){let n=(e-t)*s;return o!==void 0&&Math.abs(n)>o&&(n=Math.sign(n)*o),t+n}lerp(t,e,s){return this.x=r.lerp(this.x,t,e,s),this}static step(t,e,s){let o=e-t;return Math.abs(o)<=s?e:t+Math.sign(o)*s}step(t,e){return this.x=r.step(this.x,t,e),this}static creep(t,e,s,o){let i=t*(1-Math.exp(-e*s));if(o!==void 0){let n=o*s;Math.abs(i)>n&&(i=Math.sign(i)*n)}return i}static approach(t,e,s,o,i){let n=e-t,a=this.creep(n,s,o,i);return t+a}approach(t,e,s,o){return this.x=r.approach(this.x,t,e,s,o),this}static wrap(t,e=0,s=1){let o=Math.min(e,s),n=Math.max(e,s)-o,a=t-o,c=a<0?n- -a%n:a%n;return o+c}wrap(t=0,e=1){return this.x=r.wrap(this.x,t,e),this}static constrainProximity(t,e,s){let o=e-t,i=Math.abs(o),n=i>s?s:i,a=o<0?-n:n;return t+a}constrainProximity(t,e){return this.x=r.constrainProximity(this.x,t,e),this}static inverse(t){return 1-t}inverse(){return this.x=r.inverse(this.x),this}static center(t){return t*2-1}center(){return this.x=r.center(this.x),this}static uncenter(t){return(t+1)/2}uncenter(){return this.x=r.uncenter(this.x),this}static map(t,e,s){let i=(s-e)*t;return e+i}map(t,e){return this.x=r.map(this.x,t,e),this}static remap(t,e,s,o=0,i=1,n=!1){let c=(t-e)/(s-e)*(i-o)+o;return n?r.clamp(c,o,i):c}remap(t,e,s=0,o=1,i=!1){return this.x=r.remap(this.x,t,e,s,o,i),this}static magnify(t){return 4*Math.pow(t-.5,3)+.5}magnify(){return this.x=r.magnify(this.x),this}static floor(t){return Math.floor(t)}floor(){return this.x=r.floor(this.x),this}static ceil(t){return Math.ceil(t)}ceil(){return this.x=r.ceil(this.x),this}static round(t){return Math.round(t)}round(){return this.x=r.round(this.x),this}static smooth(t,e,s){return s<=1?e:t+(e-t)/s}smooth(t,e){return this.x=r.smooth(this.x,t,e),this}};var $=class r{x;y;constructor(t,e){this.x=t,this.y=e}static new(t,e){return new this(t,e)}static zero(){return new this(0,0)}static all(t){return new this(t,t)}static from(t){return Array.isArray(t)?new this(...t):new this(t.x,t.y)}static magnitudeSquared(t,e){return t*t+e*e}static magnitude(t,e){return Math.sqrt(this.magnitudeSquared(t,e))}static average(...t){return this.zero().add(...t).divBy(t.length)}static min(...t){return new this(Math.min(...t.map(e=>e.x)),Math.min(...t.map(e=>e.y)))}static max(...t){return new this(Math.max(...t.map(e=>e.x)),Math.max(...t.map(e=>e.y)))}static fromAngle(t){return new this(Math.cos(t),Math.sin(t))}dup(){return new r(this.x,this.y)}*[Symbol.iterator](){yield this.x,yield this.y}array(){return[this.x,this.y]}toJSON(){return this.array()}toString(){return`(Vec2 x${this.x.toFixed(2)}, y${this.y.toFixed(2)})`}set_(t,e){return this.x=t,this.y=e,this}set({x:t,y:e}){return this.x=t,this.y=e,this}magnitudeSquared(){return r.magnitudeSquared(this.x,this.y)}magnitude(){return r.magnitude(this.x,this.y)}rotation(){return Math.atan2(this.y,this.x)}equals_(t,e){return this.x===t&&this.y===e}equals(...t){return t.every(({x:e,y:s})=>this.equals_(e,s))}near_(t,e,s=1e-6){return Math.abs(this.x-t)<=s&&Math.abs(this.y-e)<=s}near({x:t,y:e},s=1e-6){return this.near_(t,e,s)}dot_(t,e){return this.x*t+this.y*e}dot({x:t,y:e}){return this.dot_(t,e)}distanceSquared_(t,e){return t=this.x-t,e=this.y-e,t*t+e*e}distanceSquared({x:t,y:e}){return this.distanceSquared_(t,e)}distance_(t,e){return Math.sqrt(this.distanceSquared_(t,e))}distance({x:t,y:e}){return this.distance_(t,e)}angleBetween_(t,e){let s=this.dot_(t,e),o=this.magnitude()*r.magnitude(t,e);if(o===0)return 0;let i=y.clamp(s/o,-1,1);return Math.acos(i)}angleBetween({x:t,y:e}){return this.angleBetween_(t,e)}normalize(){return this.divBy(this.magnitude())}half(){return this.divBy(2)}double(){return this.mulBy(2)}abs(){return this.map(t=>Math.abs(t))}rotate(t){let{x:e,y:s}=this;return this.x=e*Math.cos(t)-s*Math.sin(t),this.y=e*Math.sin(t)+s*Math.cos(t),this}perpendicular(){let{x:t,y:e}=this;return this.x=-e,this.y=t,this}clampMagnitude(t){return this.magnitude()>t&&this.normalize().mulBy(t),this}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}map(t){return this.x=t(this.x,0),this.y=t(this.y,1),this}morph(t){let e=t(this);return e&&e!==this&&this.set(e),this}clamp(t={x:0,y:0},e={x:1,y:1}){return this.x=y.clamp(this.x,t.x,e.x),this.y=y.clamp(this.y,t.y,e.y),this}clampBy(t=0,e=1){return this.x=y.clamp(this.x,t,e),this.y=y.clamp(this.y,t,e),this}negate(){return this.map(t=>t*-1)}addBy(t){return this.x+=t,this.y+=t,this}subBy(t){return this.x-=t,this.y-=t,this}mulBy(t){return this.x*=t,this.y*=t,this}divBy(t){return t===0?this:(this.x/=t,this.y/=t,this)}add_(t,e){return this.x+=t,this.y+=e,this}add(...t){for(let{x:e,y:s}of t)this.add_(e,s);return this}sub_(t,e){return this.x-=t,this.y-=e,this}sub(...t){for(let{x:e,y:s}of t)this.sub_(e,s);return this}mul_(t,e){return this.x*=t,this.y*=e,this}mul(...t){for(let{x:e,y:s}of t)this.mul_(e,s);return this}div_(t,e){return t!==0&&(this.x/=t),e!==0&&(this.y/=e),this}div(...t){for(let{x:e,y:s}of t)this.div_(e,s);return this}lerp_(t,e,s){return this.x+=(t-this.x)*s,this.y+=(e-this.y)*s,this}lerp({x:t,y:e},s){return this.lerp_(t,e,s)}approach_(t,e,s,o,i){return this.x=y.approach(this.x,t,s,o,i),this.y=y.approach(this.y,e,s,o,i),this}approach({x:t,y:e},s,o,i){return this.approach_(t,e,s,o,i)}reflect_(t,e){let s=2*this.dot_(t,e);return this.x-=s*t,this.y-=s*e,this}reflect({x:t,y:e}){return this.reflect_(t,e)}rotateAroundPoint_(t,e,s){let o=this.x-t,i=this.y-e,n=Math.cos(s),a=Math.sin(s);return this.x=n*o-a*i+t,this.y=a*o+n*i+e,this}rotateAroundPoint({x:t,y:e},s){return this.rotateAroundPoint_(t,e,s)}smooth_(t,e,s){return this.x=y.smooth(this.x,t,s),this.y=y.smooth(this.y,e,s),this}smooth({x:t,y:e},s){return this.smooth_(t,e,s)}};var Ke=class{state;players;constructor(t,e){this.state=t,this.players=e}tick(){for(let t of this.players){let{agent:e,port:{actions:s}}=t,o=1;e.position.y+=o*s.gameplay.up.value,e.position.y-=o*s.gameplay.down.value,e.position.x-=o*s.gameplay.left.value,e.position.x+=o*s.gameplay.right.value,e.position.clamp($.zero(),this.state.arenaSize)}}};var Je=class{label="0";alive=!0;color="#444";position=$.zero()};var Ye=class{arenaSize=new $(200,100);agents=new Set;makeAgent(t){let e=new Je;return e.label=t,e.position.set_(.5,.5).mul(this.arenaSize),this.agents.add(e),e}deleteAgent(t){return this.agents.delete(t),this}};var qt=class{};function It(r,{start:t,end:e}){return!(t&&r<t||e&&r>e)}var Xe=class extends qt{#t=new Map;async gets(...t){return t.map(e=>this.#t.get(e))}async hasKeys(...t){return t.map(e=>this.#t.has(e))}async*keys(t={}){if(t.limit===0)return;let e=0;for(let s of this.#t.keys())if(It(s,t)&&(yield s,e+=1),e>=(t.limit??1/0))break}async*entries(t={}){if(t.limit===0)return;let e=0;for(let[s,o]of this.#t.entries())if(It(s,t)&&(yield[s,o],e+=1),e>=(t.limit??1/0))break}async transaction(...t){for(let[e,s]of t)s===void 0?this.#t.delete(e):this.#t.set(e,s)}};function Ds(r,t,e){let s=Object.entries(t);for(let[o,i]of s)r.addEventListener(o,i,e);return function(){for(let[i,n]of s)r.removeEventListener(i,n)}}var Ut=class extends qt{storage;static onStorageEvent=t=>Ds(window,{storage:t});constructor(t=window.localStorage){super(),this.storage=t}async gets(...t){return t.map(e=>this.storage.getItem(e)??void 0)}async hasKeys(...t){return t.map(e=>this.storage.getItem(e)!==null)}async*keys(t={}){if(t.limit===0)return;let e=0;for(let s of Object.keys(this.storage))if(It(s,t)&&(yield s,e+=1),e>=(t.limit??1/0))break}async*entries(t={}){if(t.limit===0)return;let e=0;for(let[s,o]of Object.entries(this.storage))if(It(s,t)&&(yield[s,o],e+=1),e>=(t.limit??1/0))break}async transaction(...t){for(let[e,s]of t)s===void 0?this.storage.removeItem(e):this.storage.setItem(e,s)}};async function js(r){let t=[];for await(let e of r)t.push(e);return t}var Ze=class{kv;key;write;constructor(t,e){this.kv=t,this.key=e,this.write=new jr(t.write,e)}async set(t){return this.kv.set(this.key,t)}async get(){return this.kv.get(this.key)}async require(){return this.kv.require(this.key)}async guarantee(t){let e=await this.get();return e===void 0&&(e=await t(),await this.set(e)),e}},jr=class{key;#t;constructor(t,e){this.key=e,this.#t=t}set(t){return this.#t.set(this.key,t)}};var ue={parse:r=>JSON.parse(r),stringify:r=>JSON.stringify(r)};var Qe=class{#t;constructor(t){this.#t=t}sets(...t){return t.map(([e,s])=>{let o=this.#t.prefix(e),i=s===void 0?void 0:ue.stringify(s);return[o,i]})}set(t,e){return this.sets([t,e])}del(...t){return t.map(e=>[this.#t.prefix(e),void 0])}};function*Ns(r,t){if(r<=0)throw new Error("chunk size must be greater than zero");for(let e=0;e<t.length;e+=r)yield t.slice(e,e+r)}var tr=class{#t;constructor(t){let{scopes:e,divisor:s,delimiter:o}=t;this.#t=e.length>0?e.join(s)+o:""}prefix=t=>this.#t+t;unprefix=t=>{let e=this.#t.length;return t.slice(e)};scan=t=>{let{limit:e}=t,s=this.#t+(t.start??""),o=this.#t+(t.end??"\xFF");return{limit:e,start:s,end:o}}};var er=class r{driver;static collect=js;write;#t;#e;constructor(t=new Xe,e={}){this.driver=t,this.#t={scopes:[],divisor:".",delimiter:":",chunkSize:1e4,...e},this.#e=new tr(this.#t),this.write=new Qe(this.#e)}async gets(...t){return(await this.driver.gets(...t.map(this.#e.prefix))).map(s=>s===void 0?s:ue.parse(s))}async get(t){let[e]=await this.gets(t);return e}async requires(...t){let e=await this.gets(...t);for(let s of e)if(s===void 0)throw new Error("required key not found");return e}async require(t){let[e]=await this.requires(t);return e}async hasKeys(...t){return this.driver.hasKeys(...t.map(this.#e.prefix))}async has(t){let[e]=await this.hasKeys(t);return e}async*keys(t={}){for await(let e of this.driver.keys(this.#e.scan(t)))yield this.#e.unprefix(e)}async clear(t={}){let e=[];for await(let s of this.keys(t))e.push(s);for(let s of Ns(this.#t.chunkSize,e))await this.del(...s)}async*entries(t={}){for await(let[e,s]of this.driver.entries(this.#e.scan(t)))yield[this.#e.unprefix(e),ue.parse(s)]}async*values(t){for await(let[,e]of this.entries(t))yield e}async transaction(t){let e=t(this.write).flat();return this.driver.transaction(...e)}async set(t,e){return this.transaction(s=>[s.set(t,e)])}async sets(...t){return this.transaction(e=>[e.sets(...t)])}async del(...t){return this.transaction(e=>[e.del(...t)])}async guarantee(t,e){let s=await this.get(t);return s===void 0&&(s=await e(),await this.transaction(o=>[o.set(t,s)])),s}async versionMigration(t,e,s){let o=this,i=await o.get(t)??0;typeof i!="number"&&(i=0),i!==e&&(await s(i),await o.set(t,e))}store(t){return new Ze(this,t)}scope(t,e=this.#t.delimiter){return new r(this.driver,{...this.#t,delimiter:e,scopes:[...this.#t.scopes,t]})}flatten(){return new r(this.driver,{...this.#t,delimiter:""})}};var pe=class r{profiles=new tt;portProfiles=[];metaBindings=null;constructor(t){if(t){for(let e of t.profiles)this.profiles.set(e.id,e);this.portProfiles=t.portProfiles.map(e=>e&&(this.profiles.has(e)?e:null)),this.metaBindings=t.metaBindings}}toJSON(){return B.clone({profiles:[...this.profiles.values()],portProfiles:this.portProfiles,metaBindings:this.metaBindings})}clone(){return new r(this.toJSON())}getProfile(t){return this.profiles.get(t)}getProfileForPort(t){let e=this.portProfiles.at(t);return e?this.getProfile(e):void 0}};var rr=class{store;$catalog;static async load(t){let e=b(new pe(await t.get()));return new this(t,e)}dispose=j();constructor(t,e){this.store=t,this.$catalog=e,this.dispose.schedule(Ut.onStorageEvent(async()=>this.reload()))}async reload(){let t=new pe(await this.store.get());await this.$catalog.set(t)}async save(t){await this.store.set(t.toJSON()),await this.$catalog(t)}async#t(t){let e=this.$catalog().clone(),s=t(e);return await this.store.set(e.toJSON()),await this.$catalog(e),s}async createProfile(t,e){return this.#t(s=>{let o=Ot.random(),i={id:o,label:t,bindings:e};return s.profiles.set(o,i),i})}async deleteProfile(t){return this.#t(e=>{e.profiles.delete(t)})}async assignPortProfile(t,e){return this.#t(s=>{s.portProfiles[t]=e})}};function N(r){return r>0}var sr=class{on=O();onDown=O();#t=0;#e=0;get value(){return this.#t}set value(t){this.#e=this.#t,this.#t=t,this.on.publish(this),this.down&&this.onDown.publish(this)}get previous(){return this.#e}get changed(){return this.#t!==this.#e}get pressed(){return N(this.#t)}get down(){return!N(this.#e)&&N(this.#t)}get up(){return N(this.#e)&&!N(this.#t)}};var F=class extends tt{constructor(t){if(super(),t)for(let[e,s]of t)this.set(e,s)}zero(){for(let t of this.keys())this.set(t,0);return this}mergeSample([t,e]){let s=this.get(t)??0;return e>s&&this.set(t,e),this}};function zs([,,r],t){return{lastValue:0,holdStart:t,settings:Ko(r)}}function Fo(){return{scale:1,invert:!1,clamp:null,range:null,bottom:null,top:null,timing:["direct"]}}function Ko(r={}){return{...Fo(),...r}}var Ts=(r,t,e)=>Rr(e).line(function(o){let{settings:i}=t;if(i.clamp){let[n,a]=i.clamp;o=y.clamp(o,n,a)}if(i.range){let[n,a]=i.range;o=y.isBetween(o,n,a)?y.remap(o,n,a,0,1,!0):0}return i.bottom&&(o=o<i.bottom?0:o),i.top&&(o=Math.min(i.top,o)),o},function(o){return t.settings.invert?1-o:o},function(o){return t.settings.scale*o},function(o){let{settings:i}=t,n=(i.timing[0]==="direct"?void 0:i.timing[1])??250,a=!N(t.lastValue)&&N(o),c=N(t.lastValue)&&!N(o);a&&(t.holdStart=r);let l=r-t.holdStart>=n;switch(t.lastValue=o,i.timing[0]){case"direct":return o;case"tap":return c&&!l?1:0;case"hold":return N(o)&&l?o:0;default:throw new Error("unknown bindings timing")}});function Ls(r){return r.length>0?Math.max(...r):0}function Hs(r){return r.length>0?Math.min(...r):0}var or=class{bindings;actions;#t=new Set;#e=new F;#r=0;#s=new Z;#o=ds();constructor(t){this.bindings=t,this.actions=oe(t,(e,s)=>oe(e,o=>{let i=new sr;return this.#o.subscribe(()=>{i.value=this.#t.has(s)?this.#n([])(o,s):0}),i}))}resolve(t,e,s){return this.#r=t,this.#t=e,this.#e=s,this.#o(),this.actions}#i(t,e,s){let o=this.#s.guarantee(t.join("/"),()=>zs(["code",e,s],this.#r)),i=this.#e.get(e)??0;return Ts(this.#r,o,i)}#n=t=>(e,s)=>{let o=[...t,String(s),typeof e=="string"?e:e[0]],i=this.#n(o);if(typeof e=="string")return this.#i(o,e);switch(e[0]){case"code":{let[,n,a]=e;return this.#i(o,n,a)}case"and":{let[,...n]=e,a=n.map(i);return Hs(a)}case"or":{let[,...n]=e,a=n.map(i);return Ls(a)}case"not":{let[,n]=e;return i(n,"subject")>0?0:1}case"cond":{let[,n,a]=e;return i(a,"guard")>0?i(n,"subject"):0}case"mods":{let[,n,a]=e,c=(p,...u)=>p?["or",...u]:["not",["or",...u]];return i(["cond",n,["and",c(a.ctrl??!1,"ControlLeft","ControlRight"),c(a.alt??!1,"AltLeft","AltRight"),c(a.meta??!1,"MetaLeft","MetaRight"),c(a.shift??!1,"ShiftLeft","ShiftRight")]],"guard")>0?i(n,"subject"):0}}}};var ct=class{*[Symbol.iterator](){for(let t of this.samples())yield t}};var Vt=class extends ct{devices=new Oe;#t=new F;constructor(...t){super(),this.devices.adds(...t)}*samples(){this.#t.zero();for(let t of this.devices)for(let e of t.samples())this.#t.mergeSample(e);yield*this.#t.entries()}};var lt=class extends or{#t=new Vt;devices=this.#t.devices;modes=new Oe;constructor(t){super(t),this.modes.adds(...Object.keys(t))}resolve(t=Date.now()){let e=new F(this.#t.samples());return super.resolve(t,this.modes,e)}};var $t="meta";var Wt=()=>({[$t]:{revealOverlay:["or","Backslash","gamepad.beta","gamepad.gamma"],shimmyNext:["or","BracketRight",["and",["or","gamepad.beta","gamepad.gamma"],"gamepad.right"],["and",["or","gamepad.beta","gamepad.gamma"],"gamepad.bumper.right"]],shimmyPrevious:["or","BracketLeft",["and",["or","gamepad.beta","gamepad.gamma"],"gamepad.left"],["and",["or","gamepad.beta","gamepad.gamma"],"gamepad.bumper.left"]]}});var ir=class{device;metaPort;constructor(t,e=Wt()){this.device=t,this.metaPort=new lt(e),this.metaPort.devices.add(t)}};var nr=class{ports;metaBindings;on=O();#t=new tt;metaPort;constructor(t,e=Wt()){this.ports=t,this.metaBindings=e,this.metaPort=new lt(e)}poll(t=Date.now()){return this.#r(t),this.#s(t),this.#o(t)}portByIndex(t){let e=this.ports.at(t);if(!e)throw new Error(`port ${t} not found`);return e}portByDevice(t){for(let e of this.ports)if(e.devices.has(t))return e}shimmy(t,e){let s=this.ports.findIndex(a=>a.devices.has(t)),o=Math.max(0,this.ports.length-1),i=y.clamp(s+e,0,o),n=this.portByIndex(i);return this.reassign(t,n),n}reassign(t,e=this.getLonelyPort()){this.ports.forEach(s=>s.devices.delete(t)),e.devices.add(t),this.#e()}unplug(t){this.ports.forEach(e=>e.devices.delete(t)),this.#t.delete(t),this.#e()}plug=(t,e=this.getLonelyPort())=>(this.unplug(t),this.#t.set(t,new ir(t,this.metaBindings)),e.devices.add(t),this.#e(),()=>this.unplug(t));getLonelyPort(){let t=this.ports.at(0);for(let e of this.ports)e.devices.size<t.devices.size&&(t=e);return t}#e=Ce(0,()=>this.on.publish());#r(t){this.metaPort.devices.clear(),this.metaPort.devices.adds(...this.#t.keys()),this.metaPort.resolve(t)}#s(t){for(let e of this.#t.values()){let s=e.metaPort.resolve(t);s[$t].shimmyNext.down&&this.shimmy(e.device,1),s[$t].shimmyPrevious.down&&this.shimmy(e.device,-1)}}#o(t){return this.ports.map(e=>(e.resolve(t),e))}};function qs(r,t){let e=B.clone(r);if(!t)return e;for(let[s,o]of Object.entries(e))for(let i of Object.keys(o)){let n=t[s]?.[i];n&&(o[i]=n)}return e}function he(r){return r>=0?[r,0]:[0,Math.abs(r)]}function me(r){let[t,e]=he(r.x),[s,o]=he(r.y);return{up:o,down:s,left:e,right:t}}var St=class extends ct{channel;$vector=b($.zero());$breakdown=rt(()=>me(this.$vector.get()));constructor(t="stick"){super(),this.channel=t}samples(){let{channel:t}=this,{up:e,down:s,left:o,right:i}=this.$breakdown.get();return[[`${t}.up`,e],[`${t}.down`,s],[`${t}.left`,o],[`${t}.right`,i]]}};var K=class extends ct{on=O();sampleMap=new F;setSample(t,e){return this.sampleMap.set(t,e),this.on.pub(t,e),this}*samples(){for(let t of this.sampleMap)yield t}};var Gt=class extends K{stickLeft=new St;stickRight=new St;samples(){let t=this.stickLeft.$breakdown();this.setSample("gamepad.stick.left.up",t.up),this.setSample("gamepad.stick.left.down",t.down),this.setSample("gamepad.stick.left.left",t.left),this.setSample("gamepad.stick.left.right",t.right);let e=this.stickRight.$breakdown();return this.setSample("gamepad.stick.right.up",e.up),this.setSample("gamepad.stick.right.down",e.down),this.setSample("gamepad.stick.right.left",e.left),this.setSample("gamepad.stick.right.right",e.right),super.samples()}};var ar=class r extends K{client=new $(0,0);movement=new $(0,0);dispose=j();constructor(t=window){super(),this.dispose.schedule(bt(t,{pointerdown:e=>{let s=r.buttonCode(e);this.setSample(s,1)},pointerup:e=>{let s=r.buttonCode(e);this.setSample(s,0)},pointermove:e=>{this.client.x=e.clientX,this.client.y=e.clientY,this.movement.x+=e.movementX,this.movement.y+=e.movementY},wheel:e=>{this.sampleMap.set("pointer.wheel.right",0),this.sampleMap.set("pointer.wheel.left",0),this.sampleMap.set("pointer.wheel.up",0),this.sampleMap.set("pointer.wheel.down",0);for(let[s,o]of r.wheelCodes(e))this.setSample(s,o)}}))}static buttonCode(t){switch(t.button){case 0:return"pointer.button.left";case 1:return"pointer.button.middle";case 2:return"pointer.button.right";default:return`pointer.button.${t.button+1}`}}static wheelCodes(t){let e=[];return t.deltaX&&e.push([t.deltaX>0?"pointer.wheel.right":"pointer.wheel.left",t.deltaX]),t.deltaY&&e.push([t.deltaY>0?"pointer.wheel.down":"pointer.wheel.up",t.deltaY]),e}samples(){return this.#t(),super.samples()}#t(){let[t,e]=this.movement,[s,o]=he(t),[i,n]=he(e);t&&(t>=0?this.setSample("pointer.move.right",Math.abs(o)):this.setSample("pointer.move.left",Math.abs(s))),e&&(e>=0?this.setSample("pointer.move.up",Math.abs(n)):this.setSample("pointer.move.down",Math.abs(i))),this.movement.set_(0,0)}};var cr=class extends K{dispose=j();constructor(t=window){super(),this.dispose.schedule(bt(t,this.#t)),this.dispose.schedule(bt(window,this.#e))}#t={keydown:t=>{if(t.repeat)return null;this.setSample(t.code,1)},keyup:t=>{if(t.repeat)return null;this.setSample(t.code,0)}};#e={blur:()=>{this.sampleMap.zero()}}};var ut=class extends Vt{keyboard=new cr;pointer=new ar;vpad=new Gt;constructor(){super(),this.devices.add(this.keyboard).add(this.pointer).add(this.vpad)}};function fe(r,t){let e=$.from(r),s=e.distance_(0,0),o=y.remap(s,t.x,t.y,0,1,!0);return e.normalize().mulBy(o)}var Jo=["gamepad.a","gamepad.b","gamepad.x","gamepad.y","gamepad.bumper.left","gamepad.bumper.right","gamepad.trigger.left","gamepad.trigger.right","gamepad.alpha","gamepad.beta","gamepad.stick.left.click","gamepad.stick.right.click","gamepad.up","gamepad.down","gamepad.left","gamepad.right","gamepad.gamma"],Ft=class extends K{pad;range=new $(.2,.9);constructor(t){super(),this.pad=t}get gamepad(){return this.pad.gamepad}samples(){return this.#t(this.pad.gamepad),this.#e(this.pad.gamepad),super.samples()}#t(t){let e=0,s=o=>{e=Math.max(e,o)};for(let[o,i]of Jo.entries()){let n=t.buttons.at(o)?.value??0;s(n),this.setSample(i,n)}this.setSample("gamepad.any",e)}#e(t){let[e=0,s=0,o=0,i=0]=t.axes,n=me(fe(new $(e,s),this.range)),a=me(fe(new $(o,i),this.range));this.setSample("gamepad.stick.left.up",n.up),this.setSample("gamepad.stick.left.down",n.down),this.setSample("gamepad.stick.left.left",n.left),this.setSample("gamepad.stick.left.right",n.right),this.setSample("gamepad.stick.right.up",a.up),this.setSample("gamepad.stick.right.down",a.down),this.setSample("gamepad.stick.right.left",a.left),this.setSample("gamepad.stick.right.right",a.right)}};var lr=class{fallback="\u2754";#t=new Map;constructor(t=[[ut,"\u{1F4BB}"],[Ft,"\u{1F3AE}"],[Gt,"\u{1F4F1}"]]){this.add(...t)}get(t){return this.#t.get(t)??this.fallback}add(...t){for(let[e,s]of t)this.#t.set(e,s);return this}clear(){return this.#t.clear(),this}};var Yo=r=>Re(r).map(t=>`hsl(${(t*(360/r)+180)%360}deg, 100%, 50%)`),ur=class extends Be{constructor(){super(()=>Yo(12))}};var Nr=class{icon;label;color;constructor(t,e,s){this.icon=t,this.label=e,this.color=s}},Kt=class{icons=new lr;#t=new us;#e=new ur;get(t){return this.#t.guarantee(t,()=>new Nr(this.icons.get(t.constructor),Ot.random(4),this.#e.takeFirst()))}};var pr=class{hub;deviceSkins;auto=!0;dispose=j();#t=Date.now();#e=b(!1);$manual=b(!1);$visible=b.derived(()=>this.$manual()||this.auto&&this.#e());$showLabels=b(!1);constructor(t,e=new Kt){this.hub=t,this.deviceSkins=e,this.dispose.schedule(t.on(async()=>{Date.now()-this.#t>100&&await this.bump()}))}#r=Ce(1500,()=>this.#e(!1));async bump(){await this.#e(!0),await this.#r()}async toggle(t=!this.$manual()){return this.$manual.set(t)}};var hr=class{baseBindings;baseMetaBindings;hub;db;static async load(t){let e=await rr.load(t.kv.store("catalog")),s=Re(t.portCount).map(i=>e.$catalog().getProfileForPort(i)).map(i=>qs(t.bindings,i?.bindings)).map(i=>new lt(i)),o=new nr(s,e.$catalog().metaBindings??t.metaBindings??Wt());return new this(t.bindings,t.metaBindings,o,e)}dispose=j();deviceSkins=new Kt;primaryDevice=new ut;overlayVisibility;constructor(t,e,s,o){this.baseBindings=t,this.baseMetaBindings=e,this.hub=s,this.db=o,this.overlayVisibility=new pr(s,this.deviceSkins),this.dispose.schedule(s.metaPort.actions[$t].revealOverlay.on(i=>{i.pressed&&this.overlayVisibility.bump()}))}get catalog(){return this.db.$catalog()}};var zr=class{port;agent;constructor(t,e){this.port=t,this.agent=e}},mr=class{#t=new tt;constructor(t,e){for(let[s,o]of t.ports.entries()){let i=(s+1).toString();this.#t.set(o,new zr(o,e.makeAgent(i)))}}[Symbol.iterator](){return this.#t.values()}require(t){return this.#t.require(t)}};var fr=class{state;canvas=(()=>{let t=document.createElement("canvas");return t.width=200,t.height=100,t})();ctx=this.canvas.getContext("2d");constructor(t){this.state=t}percent(t){let e=Math.min(this.canvas.width,this.canvas.height);return Math.ceil(e*(t/100))}resolve(t){return t.dup().div(this.state.arenaSize).morph(e=>{e.y=1-e.y}).mul_(this.canvas.width,this.canvas.height)}render(){let{state:t}=this;this.#e();let e=[...t.agents].reverse(),s=e.filter(i=>!i.alive),o=e.filter(i=>i.alive);for(let i of s)this.#r(i);for(let i of o)this.#s(i)}#t(){let{ctx:t}=this;return t.imageSmoothingEnabled=!1,t.fillStyle="#000",t.strokeStyle="#000",t.lineWidth=1,t.font="10px sans-serif",t.textAlign="center",t.textBaseline="middle",t}#e(){let{canvas:t}=this,e=this.#t();e.fillStyle="#000",e.fillRect(0,0,t.width,t.height)}#r(t){let e=this.#t(),s=this.percent(10),{position:o}=t,[i,n]=this.resolve(o);e.font=`${s*1.3}px sans-serif`,e.textAlign="center",e.textBaseline="middle",e.fillStyle="#fff4",e.fillText(t.label,i,n)}#s(t){let e=this.#t(),s=this.percent(10),{color:o,position:i}=t,[n,a]=this.resolve(i);e.beginPath(),e.arc(n,a,s,0,Math.PI*2),e.fillStyle=o,e.fill(),e.lineWidth=this.percent(2),e.strokeStyle="#fff",e.stroke(),e.font=`${s*1.3}px sans-serif`,e.textAlign="center",e.textBaseline="middle",e.strokeStyle="#0004",e.strokeText(t.label,n,a),e.fillStyle="#fff",e.fillText(t.label,n,a)}};var pt=class extends St{hub;constructor(t){super(),this.hub=t}shimmyNext=()=>this.hub.shimmy(this,1);shimmyPrevious=()=>this.hub.shimmy(this,-1)};var Is={gameplay:{up:["or","KeyW","ArrowUp","stick.up","gamepad.stick.left.up","gamepad.stick.right.up"],down:["or","KeyS","ArrowDown","stick.down","gamepad.stick.left.down","gamepad.stick.right.down"],left:["or","KeyA","ArrowLeft","stick.left","gamepad.stick.left.left","gamepad.stick.right.left"],right:["or","KeyD","ArrowRight","stick.right","gamepad.stick.left.right","gamepad.stick.right.right"]}};function Us(r,t){let e=r;return()=>{let s=t();return s!=null&&(e=s),e}}var Tr=class{get;constructor(t){this.get=t}get gamepad(){return this.get()}};function Vs(r){let t=new Z;return bt(window,{gamepadconnected:({gamepad:e})=>{let s=()=>navigator.getGamepads().at(e.index),o=new Tr(Us(e,s)),i=r(o);t.set(e.index,{pad:o,dispose:i})},gamepaddisconnected:({gamepad:e})=>{let s=t.get(e.index);s&&(t.delete(e.index),s.dispose())}})}function Ws(r){return Vs(t=>r(new Ft(t)))}function Gs(){let r=new Ut(window.localStorage);return new er(r).scope("tact")}var dr=class{deck;static async load(){return new this(await hr.load({portCount:4,kv:Gs(),bindings:Is}))}logic;dispose=j();state=new Ye;renderer=new fr(this.state);constructor(t){this.deck=t,this.deck.deviceSkins.icons.add([pt,"\u{1F518}"]),this.logic=new Ke(this.state,new mr(t.hub,this.state)),this.dispose.schedule(this.deck.hub.on(()=>{for(let e of this.logic.players){e.agent.alive=e.port.devices.size>0;let[s]=e.port.devices;e.agent.color=s?this.deck.deviceSkins.get(s).color:"#444"}})),this.plug(new ut),this.plug(new pt(t.hub)),this.dispose.schedule(Ws(t.hub.plug))}plug(t){return this.deck.hub.plug(t),()=>this.unplug(t)}unplug(t){this.deck.hub.unplug(t)}loop(t){return hs(async()=>{await et(1e3/t),this.deck.hub.poll(),this.logic.tick(),this.renderer.render()})}};var Fs=(r,t,e)=>{let s=new Map;for(let o=t;o<=e;o++)s.set(r[o],o);return s},Ks=Tt(class extends zt{constructor(r){if(super(r),r.type!==We.CHILD)throw Error("repeat() can only be used in text expressions")}dt(r,t,e){let s;e===void 0?e=t:t!==void 0&&(s=t);let o=[],i=[],n=0;for(let a of r)o[n]=s?s(a,n):n,i[n]=e(a,n),n++;return{values:i,keys:o}}render(r,t,e){return this.dt(r,t,e).values}update(r,[t,e,s]){let o=As(r),{values:i,keys:n}=this.dt(t,e,s);if(!Array.isArray(o))return this.ut=n,i;let a=this.ut??=[],c=[],l,p,u=0,h=o.length-1,f=0,d=i.length-1;for(;u<=h&&f<=d;)if(o[u]===null)u++;else if(o[h]===null)h--;else if(a[u]===n[f])c[f]=it(o[u],i[f]),u++,f++;else if(a[h]===n[d])c[d]=it(o[h],i[d]),h--,d--;else if(a[u]===n[d])c[d]=it(o[u],i[d]),Nt(r,c[d+1],o[u]),u++,d--;else if(a[h]===n[f])c[f]=it(o[h],i[f]),Nt(r,o[u],o[h]),h--,f++;else if(l===void 0&&(l=Fs(n,f,d),p=Fs(a,u,h)),l.has(a[u]))if(l.has(a[h])){let A=p.get(n[f]),z=A!==void 0?o[A]:null;if(z===null){let kt=Nt(r,o[u]);it(kt,i[f]),c[f]=kt}else c[f]=it(z,i[f]),Nt(r,o[u],z),o[A]=null;f++}else Ve(o[h]),h--;else Ve(o[u]),u++;for(;f<=d;){let A=Nt(r,c[d+1]);it(A,i[f]),c[f++]=A}for(;u<=h;){let A=o[u++];A!==null&&Ve(A)}return this.ut=n,ks(r,c),X}});var Js=w`
|
|
29
40
|
|
|
30
41
|
:host {
|
|
31
42
|
display: flex;
|
|
@@ -79,7 +90,7 @@ var Js=Object.defineProperty;var Ys=(r,t)=>{for(var e in t)Js(r,e,{get:t[e],enum
|
|
|
79
90
|
gap: 0.5em;
|
|
80
91
|
}
|
|
81
92
|
|
|
82
|
-
`;var
|
|
93
|
+
`;var Ys=w`
|
|
83
94
|
|
|
84
95
|
:host {
|
|
85
96
|
--color: #aaa;
|
|
@@ -118,7 +129,7 @@ button {
|
|
|
118
129
|
padding: 0.2em;
|
|
119
130
|
}
|
|
120
131
|
|
|
121
|
-
`;var
|
|
132
|
+
`;var Xs=w`
|
|
122
133
|
|
|
123
134
|
:host {
|
|
124
135
|
--nub-size: 60%;
|
|
@@ -184,10 +195,10 @@ button {
|
|
|
184
195
|
background: #fff8;
|
|
185
196
|
}
|
|
186
197
|
|
|
187
|
-
`;var
|
|
198
|
+
`;var Zs=k(({$vector:r})=>{R("nub-stick"),L(E,Xs);let t=le(),e=D(()=>new $(.2,.8)),s=at(void 0);T(()=>{function c(p){let u=t.getBoundingClientRect(),h=r.get();h.x=y.remap(p.clientX,u.left,u.right,-1,1),h.y=y.remap(p.clientY,u.top,u.bottom,-1,1),h.set(fe(h,e)),r.publish()}function l(){s.value!==void 0&&(r.get().set_(0,0),r.publish(),et(0).then(()=>{s.value!==void 0&&(t.releasePointerCapture(s.value),s.value=void 0)}))}return ps(S.events(document.body,{click:[{capture:!0},p=>{s.value!==void 0&&(p.preventDefault(),p.stopPropagation())}]}),S.events(t,{pointerdown:p=>{s.value===void 0&&(s.value=p.pointerId,t.setPointerCapture(s.value),c(p))},pointermove:[{},p=>{s.value!==void 0&&c(p)}],pointerup:l,pointercancel:l}))});let o=r.get(),i=`width: ${e.x*100}%;`,n=`width: ${e.y*100}%;`,a=c=>{let l=c*.5,p=l*o.x*100,u=l*o.y*100;return`
|
|
188
199
|
transform-origin: center center;
|
|
189
|
-
transform: translate(${
|
|
190
|
-
`};return
|
|
200
|
+
transform: translate(${p}%, ${u}%);
|
|
201
|
+
`};return x`
|
|
191
202
|
<div class=frame>
|
|
192
203
|
<div class=inner style="${i}"></div>
|
|
193
204
|
</div>
|
|
@@ -207,56 +218,56 @@ button {
|
|
|
207
218
|
<div class=frame style="${a(1)}">
|
|
208
219
|
<div class=stick></div>
|
|
209
220
|
</div>
|
|
210
|
-
`});var
|
|
221
|
+
`});var Qs=k((r,t,e)=>{L(E,Ys),R("virtual-device");let s=()=>r.unplug(t);return x`
|
|
211
222
|
<div class=box>
|
|
212
|
-
${
|
|
223
|
+
${Zs(t)}
|
|
213
224
|
|
|
214
225
|
<button @click="${t.shimmyPrevious}">👈</button>
|
|
215
226
|
<button @click="${s}">💀</button>
|
|
216
227
|
<button @click="${t.shimmyNext}">👉</button>
|
|
217
228
|
</div>
|
|
218
|
-
`});var
|
|
229
|
+
`});var to=w`
|
|
219
230
|
|
|
220
|
-
`;var
|
|
231
|
+
`;var eo=k(r=>{L(E,to),R("deck-bindings");let{db:t,hub:e}=r,s=t.$catalog(),o={id:"default",label:"default",bindings:r.baseBindings},i=[o,...s.profiles.values()],n=at("default"),a=t.$catalog().getProfile(n())??o;function c(d,A){let z=s.getProfileForPort(A)??o;return x`
|
|
221
232
|
<div class=port>
|
|
222
|
-
<span>port ${
|
|
233
|
+
<span>port ${A+1}</span>
|
|
223
234
|
<select>
|
|
224
|
-
${i.map(
|
|
235
|
+
${i.map(kt=>x`
|
|
225
236
|
<option
|
|
226
|
-
data-id="${
|
|
227
|
-
?selected="${
|
|
228
|
-
${
|
|
237
|
+
data-id="${kt.id}"
|
|
238
|
+
?selected="${kt.id===z.id}">
|
|
239
|
+
${kt.label}
|
|
229
240
|
</option>
|
|
230
241
|
`)}
|
|
231
242
|
</select>
|
|
232
243
|
</div>
|
|
233
|
-
`}function l(d){let[
|
|
244
|
+
`}function l(d){let[A,z]=d;return x`
|
|
234
245
|
<div class=bracket>
|
|
235
|
-
<strong class=mode>${
|
|
236
|
-
<div>${Object.entries(
|
|
246
|
+
<strong class=mode>${A}</strong>
|
|
247
|
+
<div>${Object.entries(z).map(p)}</div>
|
|
237
248
|
</div>
|
|
238
|
-
`}function
|
|
249
|
+
`}function p([d,A]){return x`
|
|
239
250
|
<div class=bind>
|
|
240
251
|
<span class=action>${d}</span>
|
|
241
252
|
</div>
|
|
242
|
-
`}let u=async()=>{let{bindings:d}=a,
|
|
253
|
+
`}let u=async()=>{let{bindings:d}=a,A=yt.random(4),z=await t.createProfile(A,d);n(z.id)},h=d=>async()=>{await t.deleteProfile(d)},f=d=>{let z=d.target.value;n(z)};return x`
|
|
243
254
|
<div class=portlist>
|
|
244
255
|
${e.ports.map(c)}
|
|
245
256
|
</div>
|
|
246
257
|
|
|
247
258
|
<div class=bindable>
|
|
248
259
|
<select @input="${f}">
|
|
249
|
-
${i.map(d=>
|
|
260
|
+
${i.map(d=>x`
|
|
250
261
|
<option value="${d.id}" ?selected="${d.id===a.id}">${d.label}</option>
|
|
251
262
|
`)}
|
|
252
263
|
</select>
|
|
253
264
|
<button @click="${u}">clone</button>
|
|
254
|
-
<button ?disabled="${a.id===o.id}" @click="${
|
|
265
|
+
<button ?disabled="${a.id===o.id}" @click="${h(a.id)}">delete</button>
|
|
255
266
|
<div class=bindings>
|
|
256
267
|
${Object.entries(a.bindings).map(l)}
|
|
257
268
|
</div>
|
|
258
269
|
</div>
|
|
259
|
-
`});var
|
|
270
|
+
`});var ro=w`
|
|
260
271
|
|
|
261
272
|
:host {
|
|
262
273
|
--gap: 0.3em;
|
|
@@ -362,7 +373,7 @@ button {
|
|
|
362
373
|
}
|
|
363
374
|
}
|
|
364
375
|
|
|
365
|
-
`;var
|
|
376
|
+
`;var so=k(r=>{L(E,ro),R("deck-overlay");let{hub:t,deviceSkins:e,overlayVisibility:{$visible:s,$showLabels:o}}=r;function i(n){let a=e.get(n),c=`--color: ${a.color};`,l=()=>t.shimmy(n,1);return x`
|
|
366
377
|
<div class=device style="${c}">
|
|
367
378
|
<div class="primary row">
|
|
368
379
|
<button @click="${()=>t.shimmy(n,-1)}"><</button>
|
|
@@ -370,29 +381,29 @@ button {
|
|
|
370
381
|
<button @click="${l}">></button>
|
|
371
382
|
</div>
|
|
372
383
|
|
|
373
|
-
${o()?
|
|
384
|
+
${o()?x`
|
|
374
385
|
<div class="secondary row">
|
|
375
386
|
<div class=label>${a.label}</div>
|
|
376
387
|
</div>
|
|
377
388
|
`:null}
|
|
378
389
|
</div>
|
|
379
|
-
`}return
|
|
390
|
+
`}return x`
|
|
380
391
|
<div class=portlist ?data-active="${s()}">
|
|
381
|
-
${t.ports.map((n,a)=>
|
|
392
|
+
${t.ports.map((n,a)=>x`
|
|
382
393
|
<div class=port>
|
|
383
394
|
<header>P${a+1}</header>
|
|
384
395
|
${n.devices.array().map(i)}
|
|
385
396
|
</div>
|
|
386
397
|
`)}
|
|
387
398
|
</div>
|
|
388
|
-
`});var
|
|
399
|
+
`});var oo=k(r=>{L(E,Js),T(()=>r.loop(60));let t=Fe();T(()=>r.deck.hub.on(t));let e=()=>r.plug(new pt(r.deck.hub)),s=()=>r.deck.overlayVisibility.bump(),o=r.deck.hub.ports.flatMap(i=>i.devices.array()).filter(i=>i instanceof pt).map(i=>({device:i,skin:r.deck.deviceSkins.get(i)})).sort((i,n)=>i.skin.label<n.skin.label?-1:1);return x`
|
|
389
400
|
<div class=surface>
|
|
390
401
|
${r.renderer.canvas}
|
|
391
|
-
${
|
|
402
|
+
${so(r.deck)}
|
|
392
403
|
</div>
|
|
393
404
|
|
|
394
405
|
<div class=dlist>
|
|
395
|
-
${
|
|
406
|
+
${Ks(o,i=>i.skin.label,({device:i,skin:n})=>Qs.with({props:[r.deck.hub,i,n],attrs:{style:`--color: ${n.color};`}}))}
|
|
396
407
|
|
|
397
408
|
<button @click="${e}">
|
|
398
409
|
✨
|
|
@@ -403,8 +414,8 @@ button {
|
|
|
403
414
|
</button>
|
|
404
415
|
</div>
|
|
405
416
|
|
|
406
|
-
${
|
|
407
|
-
`});var
|
|
417
|
+
${eo(r.deck)}
|
|
418
|
+
`});var Xo=await dr.load();S.render(S("#demo-theater"),oo(Xo));console.log("\u{1F3AE} tact");
|
|
408
419
|
/*! Bundled license information:
|
|
409
420
|
|
|
410
421
|
@lit/reactive-element/css-tag.js:
|