@benev/tact 0.1.1 → 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/README.md +30 -16
- package/package.json +13 -12
- package/s/deck/deck.ts +1 -14
- package/s/deck/index.ts +1 -2
- package/s/deck/parts/db.ts +2 -3
- package/s/deck/views/bindings/view.ts +95 -0
- package/s/deck/views/overlay/view.ts +46 -0
- package/s/demo/game/parts/renderer.ts +4 -5
- package/s/demo/game/parts/state.ts +1 -2
- package/s/demo/main.bundle.ts +1 -4
- package/s/demo/ui/theater/styles.css.ts +1 -2
- package/s/demo/ui/theater/view.ts +47 -52
- package/s/demo/ui/theater/virtual/view.ts +10 -12
- package/s/index.html.ts +53 -44
- package/s/nubs/index.ts +3 -4
- package/s/nubs/lookpad/{component.ts → view.ts} +10 -16
- package/s/nubs/stick/{component.ts → view.ts} +27 -34
- package/s/nubs/vpad/{component.ts → view.ts} +25 -33
- package/s/utils/circular-clamp.ts +1 -2
- package/s/utils/gamepads.ts +2 -2
- package/x/core/devices/standard/stick.d.ts +2 -2
- package/x/deck/deck.d.ts +0 -7
- package/x/deck/deck.js +1 -9
- package/x/deck/deck.js.map +1 -1
- package/x/deck/index.d.ts +1 -2
- package/x/deck/index.js +1 -2
- package/x/deck/index.js.map +1 -1
- package/x/deck/parts/db.d.ts +3 -3
- package/x/deck/parts/db.js.map +1 -1
- package/x/deck/parts/overlay-visibility.d.ts +3 -3
- package/x/deck/views/bindings/style.css.js.map +1 -0
- package/x/deck/views/bindings/view.d.ts +2 -0
- package/x/deck/views/bindings/view.js +80 -0
- package/x/deck/views/bindings/view.js.map +1 -0
- package/x/deck/views/overlay/style.css.js.map +1 -0
- package/x/deck/views/overlay/view.d.ts +2 -0
- package/x/deck/views/overlay/view.js +40 -0
- package/x/deck/views/overlay/view.js.map +1 -0
- package/x/demo/game/parts/renderer.js +4 -4
- package/x/demo/game/parts/renderer.js.map +1 -1
- package/x/demo/game/parts/state.js +1 -1
- package/x/demo/game/parts/state.js.map +1 -1
- package/x/demo/main.bundle.js +1 -5
- package/x/demo/main.bundle.js.map +1 -1
- package/x/demo/main.bundle.min.js +242 -233
- package/x/demo/main.bundle.min.js.map +4 -4
- package/x/demo/ui/theater/styles.css.js +1 -1
- package/x/demo/ui/theater/view.d.ts +1 -367
- package/x/demo/ui/theater/view.js +27 -32
- package/x/demo/ui/theater/view.js.map +1 -1
- package/x/demo/ui/theater/virtual/view.d.ts +1 -1
- package/x/demo/ui/theater/virtual/view.js +6 -6
- package/x/demo/ui/theater/virtual/view.js.map +1 -1
- package/x/index.html +41 -125
- package/x/index.html.js +50 -39
- package/x/index.html.js.map +1 -1
- package/x/nubs/index.d.ts +3 -4
- package/x/nubs/index.js +3 -4
- package/x/nubs/index.js.map +1 -1
- package/x/nubs/lookpad/view.d.ts +1 -0
- package/x/nubs/lookpad/{component.js → view.js} +11 -14
- package/x/nubs/lookpad/view.js.map +1 -0
- package/x/nubs/stick/view.d.ts +2 -0
- package/x/nubs/stick/{component.js → view.js} +28 -34
- package/x/nubs/stick/view.js.map +1 -0
- package/x/nubs/vpad/view.d.ts +2 -0
- package/x/nubs/vpad/{component.js → view.js} +26 -32
- package/x/nubs/vpad/view.js.map +1 -0
- package/x/utils/circular-clamp.js +1 -1
- package/x/utils/circular-clamp.js.map +1 -1
- package/x/utils/gamepads.js +2 -2
- package/s/deck/components/components.ts +0 -22
- package/s/deck/components/deck-bindings/component.ts +0 -99
- package/s/deck/components/deck-overlay/component.ts +0 -51
- package/s/deck/components/framework.ts +0 -17
- package/s/nubs/components.ts +0 -14
- package/s/utils/types.ts +0 -19
- package/x/deck/components/components.d.ts +0 -14
- package/x/deck/components/components.js +0 -9
- package/x/deck/components/components.js.map +0 -1
- package/x/deck/components/deck-bindings/component.d.ts +0 -6
- package/x/deck/components/deck-bindings/component.js +0 -83
- package/x/deck/components/deck-bindings/component.js.map +0 -1
- package/x/deck/components/deck-bindings/style.css.js.map +0 -1
- package/x/deck/components/deck-overlay/component.d.ts +0 -6
- package/x/deck/components/deck-overlay/component.js +0 -44
- package/x/deck/components/deck-overlay/component.js.map +0 -1
- package/x/deck/components/deck-overlay/style.css.js.map +0 -1
- package/x/deck/components/framework.d.ts +0 -7
- package/x/deck/components/framework.js +0 -13
- package/x/deck/components/framework.js.map +0 -1
- package/x/nubs/components.d.ts +0 -9
- package/x/nubs/components.js +0 -11
- package/x/nubs/components.js.map +0 -1
- package/x/nubs/lookpad/component.d.ts +0 -4
- package/x/nubs/lookpad/component.js.map +0 -1
- package/x/nubs/stick/component.d.ts +0 -368
- package/x/nubs/stick/component.js.map +0 -1
- package/x/nubs/vpad/component.d.ts +0 -368
- package/x/nubs/vpad/component.js.map +0 -1
- package/x/utils/types.d.ts +0 -3
- package/x/utils/types.js +0 -3
- package/x/utils/types.js.map +0 -1
- /package/s/deck/{components/deck-bindings → views/bindings}/style.css.ts +0 -0
- /package/s/deck/{components/deck-overlay → views/overlay}/style.css.ts +0 -0
- /package/x/deck/{components/deck-bindings → views/bindings}/style.css.d.ts +0 -0
- /package/x/deck/{components/deck-bindings → views/bindings}/style.css.js +0 -0
- /package/x/deck/{components/deck-overlay → views/overlay}/style.css.d.ts +0 -0
- /package/x/deck/{components/deck-overlay → views/overlay}/style.css.js +0 -0
|
@@ -1,203 +1,42 @@
|
|
|
1
|
-
var
|
|
2
|
-
\f\r]`,
|
|
3
|
-
\f\r"'\`<>=]|("|')|))|$)`,"g"),Yr=/'/g,Xr=/"/g,ts=/^(?:script|style|textarea|title)$/i,Ar=s=>(t,...e)=>({_$litType$:s,strings:t,values:e}),$=Ar(1),Ii=Ar(2),Hi=Ar(3),F=Symbol.for("lit-noChange"),_=Symbol.for("lit-nothing"),Zr=new WeakMap,it=ot.createTreeWalker(ot,129);function es(s,t){if(!kr(s)||!s.hasOwnProperty("raw"))throw Error("invalid template strings array");return Gr!==void 0?Gr.createHTML(t):t}var rs=(s,t)=>{let e=s.length-1,r=[],i,o=t===2?"<svg>":t===3?"<math>":"",n=Gt;for(let c=0;c<e;c++){let a=s[c],h,p,l=-1,u=0;for(;u<a.length&&(n.lastIndex=u,p=n.exec(a),p!==null);)u=n.lastIndex,n===Gt?p[1]==="!--"?n=Kr:p[1]!==void 0?n=Jr:p[2]!==void 0?(ts.test(p[2])&&(i=RegExp("</"+p[2],"g")),n=st):p[3]!==void 0&&(n=st):n===st?p[0]===">"?(n=i??Gt,l=-1):p[1]===void 0?l=-2:(l=n.lastIndex-p[2].length,h=p[1],n=p[3]===void 0?st:p[3]==='"'?Xr:Yr):n===Xr||n===Yr?n=st:n===Kr||n===Jr?n=Gt:(n=st,i=void 0);let f=n===st&&s[c+1].startsWith("/>")?" ":"";o+=n===Gt?a+oi:l>=0?(r.push(h),a.slice(0,l)+$r+a.slice(l)+W+f):a+W+(l===-2?c:f)}return[es(s,o+(s[e]||"<?>")+(t===2?"</svg>":t===3?"</math>":"")),r]},Yt=class s{constructor({strings:t,_$litType$:e},r){let i;this.parts=[];let o=0,n=0,c=t.length-1,a=this.parts,[h,p]=rs(t,e);if(this.el=s.createElement(h,r),it.currentNode=this.el.content,e===2||e===3){let l=this.el.content.firstChild;l.replaceWith(...l.childNodes)}for(;(i=it.nextNode())!==null&&a.length<c;){if(i.nodeType===1){if(i.hasAttributes())for(let l of i.getAttributeNames())if(l.endsWith($r)){let u=p[n++],f=i.getAttribute(l).split(W),v=/([.?@])?(.*)/.exec(u);a.push({type:1,index:o,name:v[2],strings:f,ctor:v[1]==="."?ye:v[1]==="?"?xe:v[1]==="@"?be:at}),i.removeAttribute(l)}else l.startsWith(W)&&(a.push({type:6,index:o}),i.removeAttribute(l));if(ts.test(i.tagName)){let l=i.textContent.split(W),u=l.length-1;if(u>0){i.textContent=fe?fe.emptyScript:"";for(let f=0;f<u;f++)i.append(l[f],Kt()),it.nextNode(),a.push({type:2,index:++o});i.append(l[u],Kt())}}}else if(i.nodeType===8)if(i.data===Sr)a.push({type:2,index:o});else{let l=-1;for(;(l=i.data.indexOf(W,l+1))!==-1;)a.push({type:7,index:o}),l+=W.length-1}o++}}static createElement(t,e){let r=ot.createElement("template");return r.innerHTML=t,r}};function nt(s,t,e=s,r){if(t===F)return t;let i=r!==void 0?e._$Co?.[r]:e._$Cl,o=Jt(t)?void 0:t._$litDirective$;return i?.constructor!==o&&(i?._$AO?.(!1),o===void 0?i=void 0:(i=new o(s),i._$AT(s,e,r)),r!==void 0?(e._$Co??=[])[r]=i:e._$Cl=i),i!==void 0&&(t=nt(s,i._$AS(s,t.values),i,r)),t}var ge=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:r}=this._$AD,i=(t?.creationScope??ot).importNode(e,!0);it.currentNode=i;let o=it.nextNode(),n=0,c=0,a=r[0];for(;a!==void 0;){if(n===a.index){let h;a.type===2?h=new gt(o,o.nextSibling,this,t):a.type===1?h=new a.ctor(o,a.name,a.strings,this,t):a.type===6&&(h=new we(o,this,t)),this._$AV.push(h),a=r[++c]}n!==a?.index&&(o=it.nextNode(),n++)}return it.currentNode=ot,i}p(t){let e=0;for(let r of this._$AV)r!==void 0&&(r.strings!==void 0?(r._$AI(t,r,e),e+=r.strings.length-2):r._$AI(t[e])),e++}},gt=class s{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,e,r,i){this.type=2,this._$AH=_,this._$AN=void 0,this._$AA=t,this._$AB=e,this._$AM=r,this.options=i,this._$Cv=i?.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=nt(this,t,e),Jt(t)?t===_||t==null||t===""?(this._$AH!==_&&this._$AR(),this._$AH=_):t!==this._$AH&&t!==F&&this._(t):t._$litType$!==void 0?this.$(t):t.nodeType!==void 0?this.T(t):Qr(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!==_&&Jt(this._$AH)?this._$AA.nextSibling.data=t:this.T(ot.createTextNode(t)),this._$AH=t}$(t){let{values:e,_$litType$:r}=t,i=typeof r=="number"?this._$AC(t):(r.el===void 0&&(r.el=Yt.createElement(es(r.h,r.h[0]),this.options)),r);if(this._$AH?._$AD===i)this._$AH.p(e);else{let o=new ge(i,this),n=o.u(this.options);o.p(e),this.T(n),this._$AH=o}}_$AC(t){let e=Zr.get(t.strings);return e===void 0&&Zr.set(t.strings,e=new Yt(t)),e}k(t){kr(this._$AH)||(this._$AH=[],this._$AR());let e=this._$AH,r,i=0;for(let o of t)i===e.length?e.push(r=new s(this.O(Kt()),this.O(Kt()),this,this.options)):r=e[i],r._$AI(o),i++;i<e.length&&(this._$AR(r&&r._$AB.nextSibling,i),e.length=i)}_$AR(t=this._$AA.nextSibling,e){for(this._$AP?.(!1,!0,e);t!==this._$AB;){let r=t.nextSibling;t.remove(),t=r}}setConnected(t){this._$AM===void 0&&(this._$Cv=t,this._$AP?.(t))}},at=class{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,e,r,i,o){this.type=1,this._$AH=_,this._$AN=void 0,this.element=t,this.name=e,this._$AM=i,this.options=o,r.length>2||r[0]!==""||r[1]!==""?(this._$AH=Array(r.length-1).fill(new String),this.strings=r):this._$AH=_}_$AI(t,e=this,r,i){let o=this.strings,n=!1;if(o===void 0)t=nt(this,t,e,0),n=!Jt(t)||t!==this._$AH&&t!==F,n&&(this._$AH=t);else{let c=t,a,h;for(t=o[0],a=0;a<o.length-1;a++)h=nt(this,c[r+a],e,a),h===F&&(h=this._$AH[a]),n||=!Jt(h)||h!==this._$AH[a],h===_?t=_:t!==_&&(t+=(h??"")+o[a+1]),this._$AH[a]=h}n&&!i&&this.j(t)}j(t){t===_?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??"")}},ye=class extends at{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===_?void 0:t}},xe=class extends at{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==_)}},be=class extends at{constructor(t,e,r,i,o){super(t,e,r,i,o),this.type=5}_$AI(t,e=this){if((t=nt(this,t,e,0)??_)===F)return;let r=this._$AH,i=t===_&&r!==_||t.capture!==r.capture||t.once!==r.once||t.passive!==r.passive,o=t!==_&&(r===_||i);i&&this.element.removeEventListener(this.name,this,r),o&&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)}},we=class{constructor(t,e,r){this.element=t,this.type=6,this._$AN=void 0,this._$AM=e,this.options=r}get _$AU(){return this._$AM._$AU}_$AI(t){nt(this,t)}},ss={M:$r,P:W,A:Sr,C:1,L:rs,R:ge,D:Qr,V:nt,I:gt,H:at,N:xe,U:be,B:ye,F:we},ni=vr.litHtmlPolyfillSupport;ni?.(Yt,gt),(vr.litHtmlVersions??=[]).push("3.3.1");var J=(s,t,e)=>{let r=e?.renderBefore??t,i=r._$litPart$;if(i===void 0){let o=e?.renderBefore??null;r._$litPart$=i=new gt(t.insertBefore(Kt(),o),o,void 0,e??{})}return i._$AI(s),i};var _r=globalThis,yt=class extends V{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=J(e,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return F}};yt._$litElement$=!0,yt.finalized=!0,_r.litElementHydrateSupport?.({LitElement:yt});var ai=_r.litElementPolyfillSupport;ai?.({LitElement:yt});(_r.litElementVersions??=[]).push("4.2.1");var P=E`
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
scrollbar-color: #888 transparent;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
::-webkit-scrollbar { width: 8px; }
|
|
15
|
-
::-webkit-scrollbar-track { background: transparent; }
|
|
16
|
-
::-webkit-scrollbar-thumb { background: #333; border-radius: 1em; }
|
|
17
|
-
::-webkit-scrollbar-thumb:hover { background: #444; }
|
|
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
|
+
* {
|
|
5
|
+
margin: 0;
|
|
6
|
+
padding: 0;
|
|
7
|
+
box-sizing: border-box;
|
|
8
|
+
|
|
9
|
+
scrollbar-width: thin;
|
|
10
|
+
scrollbar-color: #888 transparent;
|
|
18
11
|
}
|
|
19
|
-
`;var xt=Object.freeze({eq(s,t){if(s.length!==t.length)return!1;let e=0;for(let r=0;r<s.length;r++)e|=s[r]^t[r];return e===0},random(s){return crypto.getRandomValues(new Uint8Array(s))}});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((r,i)=>[r,i])),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 c=0,a=0,h=[];for(let p of t){if(p===this.lexicon.padding?.character)continue;let l=this.lookup[p];if(l===void 0)throw new Error(`Invalid character: ${p}`);for(c=c<<e|l,a+=e;a>=8;)a-=8,h.push(c>>a&255)}return new Uint8Array(h)}let r=0n,i=BigInt(this.lexicon.characters.length),o=!1;t.startsWith(this.negativePrefix)&&(t=t.slice(this.negativePrefix.length),o=!0);for(let c of t){let a=this.lookup[c];if(a===void 0)throw new Error(`Invalid character: ${c}`);r=r*i+BigInt(a)}let n=[];for(;r>0n;)n.unshift(Number(r%256n)),r=r/256n;return new Uint8Array(n)}fromBytes(t){let e=Math.log2(this.lexicon.characters.length);if(Number.isInteger(e)){let n=0,c=0,a="";for(let h of t)for(n=n<<8|h,c+=8;c>=e;){c-=e;let p=n>>c&(1<<e)-1;a+=this.lexicon.characters[p]}if(c>0){let h=n<<e-c&(1<<e)-1;a+=this.lexicon.characters[h]}if(this.lexicon.padding)for(;a.length%this.lexicon.padding.size!==0;)a+=this.lexicon.padding.character;return a}let r=0n;for(let n of t)r=(r<<8n)+BigInt(n);if(r===0n)return this.lexicon.characters[0];let i=BigInt(this.lexicon.characters.length),o="";for(;r>0n;)o=this.lexicon.characters[Number(r%i)]+o,r=r/i;return o}toInteger(t){if(!t)return 0;let e=0n,r=!1,i=BigInt(this.lexicon.characters.length);t.startsWith(this.negativePrefix)&&(t=t.slice(this.negativePrefix.length),r=!0);for(let o of t){let n=this.lookup[o];if(n===void 0)throw new Error(`Invalid character: ${o}`);e=e*i+BigInt(n)}return Number(r?-e:e)}fromInteger(t){t=Math.floor(t);let e=t<0,r=BigInt(e?-t:t);if(r===0n)return this.lexicon.characters[0];let i=BigInt(this.lexicon.characters.length),o="";for(;r>0n;)o=this.lexicon.characters[Number(r%i)]+o,r=r/i;return e?`${this.negativePrefix}${o}`:o}random(t=32){return this.fromBytes(xt.random(t))}};var Er=new M(M.lexicons.hex),ao=new M(M.lexicons.base2),co=new M(M.lexicons.base36),ho=new M(M.lexicons.base58),lo=new M(M.lexicons.base62),po=new M(M.lexicons.base64),uo=new M(M.lexicons.base64url);var Mr=["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 Pr=["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 bt={defaults:{groupSize:4,wordSeparator:".",groupSeparator:" "},random(s,t){let e=xt.random(s);return this.fromBytes(e,t)},fromBytes(s,t={}){let{groupSize:e=bt.defaults.groupSize,wordSeparator:r=bt.defaults.wordSeparator,groupSeparator:i=bt.defaults.groupSeparator}=t,o=[],n=[];s.forEach((a,h)=>{let p=h%2===0?Mr:Pr;n.push(p[a]),n.length===2&&(o.push(n.join("")),n=[])}),n.length&&o.push(n.join(""));let c=[];for(let a=0;a<o.length;a+=e)c.push(o.slice(a,a+e).join(r));return c.join(i)},toBytes(s){let t=s.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 r=[];for(let i=0;i<t.length;i+=3)r.push(t.slice(i,i+3));return new Uint8Array(r.map((i,o)=>{let c=(o%2===0?Mr:Pr).findIndex(a=>a===i);if(c===-1)throw new Error(`unknown triplet ${i}`);return c}))},toHex(s){return Er.fromBytes(bt.toBytes(s))},fromHex(s,t){return bt.fromBytes(Er.toBytes(s),t)}},is=bt;var wt=Object.freeze({fromBytes(s){return[...s].map(t=>t.toString(16).padStart(2,"0")).join("")},toBytes(s){if(s.length%2!==0)throw new Error("must have even number of hex characters");let t=new Uint8Array(s.length/2);for(let e=0;e<s.length;e+=2)t[e/2]=parseInt(s.slice(e,e+2),16);return t},random(s=32){return this.fromBytes(xt.random(s))},string(s){return wt.fromBytes(s)},bytes(s){return wt.toBytes(s)}});function T(s,t){let e,r,i=[];function o(){e=[],r&&clearTimeout(r),r=void 0,i=[]}return o(),((...n)=>{e=n,r&&clearTimeout(r);let c=new Promise((a,h)=>{i.push({resolve:a,reject:h})});return r=setTimeout(()=>{Promise.resolve().then(()=>t(...e)).then(a=>{for(let{resolve:h}of i)h(a);o()}).catch(a=>{for(let{reject:h}of i)h(a);o()})},s),c})}function ct(){let s,t,e=new Promise((i,o)=>{s=i,t=o});function r(i){return i.then(s).catch(t),e}return{promise:e,resolve:s,reject:t,entangle:r}}function ve(s){let t=null;return((...e)=>(t?t.params=e:(t={params:e,deferred:ct()},queueMicrotask(()=>{let{params:r,deferred:i}=t;t=null,Promise.resolve(s(...r)).then(i.resolve).catch(i.reject)})),t.deferred.promise))}var C={};Ys(C,{clone:()=>Xt,equal:()=>ci,freeze:()=>hi});function Xt(s,t=new Set){if(t.has(s))throw new Error("cannot clone circular reference");let e;return typeof s=="function"||s!==null&&typeof s=="object"?(t.add(s),Array.isArray(s)?e=s.map(r=>Xt(r,new Set(t))):s.constructor===Object?e=Object.fromEntries(Object.entries(s).map(([r,i])=>[r,Xt(i,new Set(t))])):s instanceof Map?e=new Map(Array.from(s,([r,i])=>[r,Xt(i,new Set(t))])):s instanceof Set?e=new Set(Array.from(s,r=>Xt(r,new Set(t)))):s instanceof Date?e=new Date(s.getTime()):e=s,t.delete(s)):e=s,e}var Zt=Object.freeze({happy:s=>s!=null,sad:s=>s==null,boolean:s=>typeof s=="boolean",number:s=>typeof s=="number",string:s=>typeof s=="string",bigint:s=>typeof s=="bigint",object:s=>typeof s=="object"&&s!==null,array:s=>Array.isArray(s),fn:s=>typeof s=="function",symbol:s=>typeof s=="symbol"});var ci=(s,t)=>{function e(r,i,o){if(!Zt.object(r)||!Zt.object(i))return r===i;if(o.includes(r))throw new Error("forbidden circularity detected in deep equal comparison");let n=[...o,r];if(r instanceof Map&&i instanceof Map){if(r.size!==i.size)return!1;for(let[c,a]of r)if(!i.has(c)||!e(a,i.get(c),n))return!1}else if(r instanceof Set&&i instanceof Set){if(r.size!==i.size)return!1;for(let c of r)if(!Array.from(i).some(a=>e(c,a,n)))return!1}else{let c=Object.keys(r),a=Object.keys(i);if(c.length!==a.length)return!1;for(let h of c)if(!a.includes(h)||!e(r[h],i[h],n))return!1}return!0}return e(s,t,[])};function hi(s){function t(e,r){if(!Zt.object(e)||r.includes(e))return e;let i=[...r,e];if(e instanceof Map)for(let o of e.entries())for(let n of o)t(n,i);else if(e instanceof Set)for(let o of e)t(o,i);else if(Array.isArray(e))for(let o of e)t(o,i);else for(let o of Object.values(e))t(o,i);return Object.freeze(e)}return t(s,[])}var G=class s 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,r){if(t.has(e))return t.get(e);{let i=r();return t.set(e,i),i}}array(){return[...this]}require(t){return s.require(this,t)}guarantee(t,e){return s.guarantee(this,t,e)}},N=G;var Cr=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}},$e=Cr;var Br=class s 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,r){if(t.has(e))return t.get(e);{let i=r();return t.set(e,i),i}}require(t){return s.require(this,t)}guarantee(t,e){return s.guarantee(this,t,e)}},os=Br;function ns(...s){return(...t)=>s.forEach(e=>e(...t))}function*li(s){for(let t=0;t<s;t++)yield t}function Se(s){return[...li(s)]}function Or(s){let t,e=!1,r=()=>{e=!0,clearTimeout(t)},i=async()=>{e||(await s(r),!e&&(t=setTimeout(i,0)))};return i(),r}var as=Or;var ke=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 O(){let s=[];function t(){for(let e of s)e();s=[]}return t.schedule=(...e)=>(s.push(...e),t),t}function ht(s,t){let e=Object.entries(t);for(let[r,i]of e)s.addEventListener(r,i);return()=>{for(let[r,i]of e)s.removeEventListener(r,i)}}var vt=(s=0)=>new Promise(t=>setTimeout(t,s));function Qt(s){return{map:t=>te(s,t),filter:t=>cs(s,t)}}Qt.pipe=Object.freeze({map:s=>(t=>te(t,s)),filter:s=>(t=>cs(t,s))});var te=(s,t)=>Object.fromEntries(Object.entries(s).map(([e,r])=>[e,t(r,e)])),cs=(s,t)=>Object.fromEntries(Object.entries(s).filter(([e,r])=>t(r,e)));function jr(s){return new Rr(s)}var Rr=class s{#t;static with=jr;constructor(t){this.#t=t}to(t){return new s(t(this.#t))}done(){return this.#t}line(...t){let e=this.#t;for(let r of t)e=r(e);return e}};function hs(){let s=new Set;async function t(...a){await Promise.all([...s].map(h=>h(...a)))}function e(a){return s.add(a),()=>{s.delete(a)}}async function r(...a){return t(...a)}function i(a){return e(a)}async function o(a){let{promise:h,resolve:p}=ct(),l=i(async(...u)=>{a&&await a(...u),p(u),l()});return h}function n(){s.clear()}let c={pub:r,sub:i,publish:t,subscribe:e,on:e,next:o,clear:n};return Object.assign(i,c),Object.assign(r,c),c}function B(s){let t=hs();return s&&t.sub(s),t.sub}function ee(s){let t=hs();return s&&t.sub(s),t.pub}var L={string:(s,t)=>s.getAttribute(t)??void 0,number:(s,t)=>{let e=s.getAttribute(t);return e===null||!e?void 0:Number(e)},boolean:(s,t)=>s.getAttribute(t)!==null},S={string:(s,t,e)=>(e===void 0?s.removeAttribute(t):s.setAttribute(t,e),!0),number:(s,t,e)=>(e===void 0?s.removeAttribute(t):s.setAttribute(t,e.toString()),!0),boolean:(s,t,e)=>(e?s.setAttribute(t,""):s.removeAttribute(t),!0),any:(s,t,e)=>{e==null?s.removeAttribute(t):typeof e=="string"?s.setAttribute(t,e):typeof e=="number"?s.setAttribute(t,e.toString()):typeof e=="boolean"?e===!0?s.setAttribute(t,""):s.removeAttribute(t):console.warn(`invalid attribute "${t}" type is "${typeof e}"`)},entries:(s,t)=>{for(let[e,r]of t)S.any(s,e,r)},record:(s,t)=>S.entries(s,Object.entries(t))};function ls(s,t={}){let e=document.createElement(s);return S.record(e,t),e}function ps(s){let t=document.createDocumentFragment();return J(s,t),t.firstElementChild}function $t(s,t){let e=[];for(let[r,i]of Object.entries(t))if(typeof i=="function")s.addEventListener(r,i),e.push(()=>s.removeEventListener(r,i));else{let[o,n]=i;s.addEventListener(r,n,o),e.push(()=>s.removeEventListener(r,n))}return()=>e.forEach(r=>r())}function us(s,t){let e=new MutationObserver(t);return e.observe(s,{attributes:!0}),()=>e.disconnect()}var ms=(s,t)=>new Proxy(t,{get:(e,r)=>{switch(t[r]){case String:return L.string(s,r);case Number:return L.number(s,r);case Boolean:return L.boolean(s,r);default:throw new Error(`invalid attribute type for "${r}"`)}},set:(e,r,i)=>{switch(t[r]){case String:return S.string(s,r,i);case Number:return S.number(s,r,i);case Boolean:return S.boolean(s,r,i);default:throw new Error(`invalid attribute type for "${r}"`)}}});var Ae=class{element;constructor(t){this.element=t}strings=new Proxy({},{get:(t,e)=>L.string(this.element,e),set:(t,e,r)=>S.string(this.element,e,r)});numbers=new Proxy({},{get:(t,e)=>L.number(this.element,e),set:(t,e,r)=>S.number(this.element,e,r)});booleans=new Proxy({},{get:(t,e)=>L.boolean(this.element,e),set:(t,e,r)=>S.boolean(this.element,e,r)})};function St(s){let t=new Ae(s);return{strings:t.strings,numbers:t.numbers,booleans:t.booleans,on:e=>us(s,e),spec:e=>ms(s,e)}}St.get=L;St.set=S;function ds(s){return new Dr(s)}var Dr=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,r]of Object.entries(t))this.attr(e,r);return this}children(...t){return this.#e.push(...t),this}done(){let t=document.createElement(this.tagName);return S.entries(t,this.#t),t.append(...this.#e),t}};function kt(s,t=document){let e=t.querySelector(s);if(!e)throw new Error(`element not found (${s})`);return e}function _e(s,t=document){return t.querySelector(s)}function Ee(s,t=document){return Array.from(t.querySelectorAll(s))}var Me=class s{element;#t;constructor(t){this.element=t}in(t){return new s(typeof t=="string"?kt(t,this.element):t)}require(t){return kt(t,this.element)}maybe(t){return _e(t,this.element)}all(t){return Ee(t,this.element)}render(...t){return J(t,this.element)}get attrs(){return this.#t??=St(this.element)}events(t){return $t(this.element,t)}};function fs(s){return s.replace(/([a-zA-Z])(?=[A-Z])/g,"$1-").toLowerCase()}function gs(s,t={}){let{soft:e=!1,upgrade:r=!0}=t;for(let[i,o]of Object.entries(s)){let n=fs(i),c=customElements.get(n);e&&c||(customElements.define(n,o),r&&document.querySelectorAll(n).forEach(a=>{a.constructor===HTMLElement&&customElements.upgrade(a)}))}}function d(s,t=document){return kt(s,t)}d.in=(s,t=document)=>new Me(t).in(s);d.require=kt;d.maybe=_e;d.all=Ee;d.el=ls;d.elmer=ds;d.mk=ps;d.events=$t;d.attrs=St;d.register=gs;d.render=(s,...t)=>J(t,s);function ys(s){return C.freeze(C.clone(s))}var zr=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.#i(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.#i(t)(async()=>{let r=new Set;this.#r.push(r),this.#s.add(t),r.add(e()),this.#s.delete(t),await Promise.all(r),this.#r.pop()})}#i(t){let e=this.#e.get(t);return e||(e=B(),this.#e.set(t,e)),e}},x=globalThis[Symbol.for("e280.tracker")]??=new zr;var q=Symbol("optic");var Pe=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 Ce=class s{on=B();[q];#t;#e;#r=ve(()=>this.on.publish(this.state));constructor(t){this[q]=t,this.#t=C.clone(t.getState()),this.#e=new Pe(()=>ys(t.getState()))}async update(){let t=this[q].getState();!C.equal(t,this.#t)&&(this.#e.invalidate(),this.#t=C.clone(t),this.#r(),await x.notifyWrite(this))}get state(){return x.notifyRead(this),this.#e.get()}async mutate(t){return this[q].mutate(t)}lens(t){let e=new s({getState:()=>t(this[q].getState()),mutate:r=>this[q].mutate(i=>r(t(i))),registerLens:this[q].registerLens});return this[q].registerLens(e),e}};var At=class{sneak;constructor(t){this.sneak=t}get(){return x.notifyRead(this),this.sneak}get value(){return this.get()}};var _t=class extends At{on=B();dispose(){this.on.clear()}};function Be(s,t=s){let{seen:e,result:r}=x.observe(s),i=ve(t),o=[],n=()=>o.forEach(c=>c());for(let c of e){let a=x.subscribe(c,i);o.push(a)}return{result:r,dispose:n}}function Et(s,t){return s===t}var Oe=class extends _t{#t;constructor(t,e){let r=e?.compare??Et,{result:i,dispose:o}=Be(t,async()=>{let n=t();!r(this.sneak,n)&&(this.sneak=n,await Promise.all([x.notifyWrite(this),this.on.pub(n)]))});super(i),this.#t=o}toString(){return`(derived "${String(this.get())}")`}dispose(){super.dispose(),this.#t()}get core(){return this}fn(){let t=this;function e(){return t.get()}return e.core=t,e.get=t.get.bind(t),e.on=t.on,e.dispose=t.dispose.bind(t),e.fn=t.fn.bind(t),Object.defineProperty(e,"value",{get:()=>t.value}),Object.defineProperty(e,"sneak",{get:()=>t.sneak}),e}};var Re=class extends At{#t;#e;#r=!1;#s;constructor(t,e){super(void 0),this.#t=t,this.#e=e?.compare??Et}toString(){return`($lazy "${String(this.get())}")`}get(){if(!this.#s){let{result:t,dispose:e}=Be(this.#t,()=>this.#r=!0);this.#s=e,this.sneak=t}if(this.#r){this.#r=!1;let t=this.#t();!this.#e(this.sneak,t)&&(this.sneak=t,x.notifyWrite(this))}return super.get()}dispose(){this.#s&&this.#s()}get core(){return this}fn(){let t=this;function e(){return t.get()}return e.core=t,e.get=t.get.bind(t),e.dispose=t.dispose.bind(t),e.fn=t.fn.bind(t),Object.defineProperty(e,"value",{get:()=>t.value}),Object.defineProperty(e,"sneak",{get:()=>t.sneak}),e}};var je=class extends _t{#t=!1;#e;constructor(t,e){super(t),this.#e=e?.compare??Et}toString(){return`($signal "${String(this.get())}")`}async set(t,e=!1){let r=this.sneak;return this.sneak=t,(e||!this.#e(r,t))&&await this.publish(),t}get value(){return this.get()}set value(t){this.set(t)}async publish(){if(this.#t)throw new Error("forbid circularity");let t=this.sneak,e=Promise.resolve();try{this.#t=!0,e=Promise.all([x.notifyWrite(this),this.on.publish(t)])}finally{this.#t=!1}return await e,t}get core(){return this}fn(){let t=this;function e(r){return arguments.length===0?t.get():t.set(arguments[0])}return e.core=t,e.get=t.get.bind(t),e.set=t.set.bind(t),e.on=t.on,e.dispose=t.dispose.bind(t),e.publish=t.publish.bind(t),e.fn=t.fn.bind(t),Object.defineProperty(e,"value",{get:()=>t.value,set:r=>t.value=r}),Object.defineProperty(e,"sneak",{get:()=>t.sneak,set:r=>t.sneak=r}),e}};function pi(s,t){return new Re(s,t).fn()}function Tr(s,t){return new Oe(s,t).fn()}function g(s,t){return new je(s,t).fn()}g.lazy=pi;g.derived=Tr;var I=class{#t=new G;effect(t,e){let{seen:r,result:i}=x.observe(t);for(let o of r)this.#t.guarantee(o,()=>x.subscribe(o,e));for(let[o,n]of this.#t)r.has(o)||(n(),this.#t.delete(o));return i}clear(){for(let t of this.#t.values())t();this.#t.clear()}};var Y=class{element;response;#t;constructor(t,e){this.element=t,this.response=e}start(){this.#t||(this.#t=d.attrs(this.element).on(this.response))}stop(){this.#t&&this.#t(),this.#t=void 0}};function De(s,t){me(s,mi(t))}function mi(s){let t=[];if(Array.isArray(s)){let e=new Set(s.flat(1/0).reverse());for(let r of e)t.unshift(ft(r))}else s!==void 0&&t.push(ft(s));return t}var lt={status:s=>s[0],value:s=>s[0]==="ready"?s[1]:void 0,error:s=>s[0]==="error"?s[1]:void 0,select:(s,t)=>{switch(s[0]){case"loading":return t.loading();case"error":return t.error(s[1]);case"ready":return t.ready(s[1]);default:throw new Error("unknown op status")}},morph:(s,t)=>lt.select(s,{loading:()=>["loading"],error:e=>["error",e],ready:e=>["ready",t(e)]}),all:(...s)=>{let t=[],e=[],r=0;for(let i of s)switch(i[0]){case"loading":r++;break;case"ready":t.push(i[1]);break;case"error":e.push(i[1]);break}return e.length>0?["error",e]:r===0?["ready",t]:["loading"]}};var Mt=class{static loading(){return new this}static ready(t){return new this(["ready",t])}static error(t){return new this(["error",t])}static promise(t){let e=new this;return e.promise(t),e}static load(t){return this.promise(t())}static all(...t){let e=t.map(r=>r.pod);return lt.all(...e)}signal;#t=0;#e=ee();#r=ee();constructor(t=["loading"]){this.signal=g(t)}get wait(){return new Promise((t,e)=>{this.#e.next().then(([r])=>t(r)),this.#r.next().then(([r])=>e(r))})}get then(){return this.wait.then.bind(this.wait)}get catch(){return this.wait.catch.bind(this.wait)}get finally(){return this.wait.finally.bind(this.wait)}async setLoading(){await this.signal.set(["loading"])}async setReady(t){await this.signal.set(["ready",t]),await this.#e(t)}async setError(t){await this.signal.set(["error",t]),await this.#r(t)}async promise(t){let e=++this.#t;await this.setLoading();try{let r=await t;return e===this.#t&&await this.setReady(r),r}catch(r){console.error(r),e===this.#t&&await this.setError(r)}}async load(t){return this.promise(t())}get pod(){return this.signal.get()}set pod(t){this.signal.set(t)}get status(){return this.signal.get()[0]}get value(){return lt.value(this.signal.get())}get error(){return lt.error(this.signal.get())}get isLoading(){return this.status==="loading"}get isReady(){return this.status==="ready"}get isError(){return this.status==="error"}require(){let t=this.signal.get();if(t[0]!=="ready")throw new Error("required value not ready");return t[1]}select(t){return lt.select(this.signal.get(),t)}morph(t){return lt.morph(this.pod,t)}};var ze=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())}};function xs(s){let t=d.attrs(s.element);function e(r){return s.once(()=>t.spec(r))}return e.strings=t.strings,e.numbers=t.numbers,e.booleans=t.booleans,e.spec=r=>s.once(()=>t.spec(r)),e.on=r=>s.mount(()=>t.on(r)),e}var pt=Symbol(),ut=Symbol(),mt=Symbol(),X=class{element;shadow;renderNow;render;attrs;#t=0;#e=0;#r=new G;#s=ct();#i=new ze;[pt](t){this.#t++,this.#e=0,this.#s=ct();let e=t();return this.#s.resolve(),e}[ut](){this.#i.unmountAll()}[mt](){this.#i.remountAll()}constructor(t,e,r,i){this.element=t,this.shadow=e,this.renderNow=r,this.render=i,this.attrs=xs(this)}get renderCount(){return this.#t}get rendered(){return this.#s.promise}name(t){this.once(()=>this.element.setAttribute("view",t))}styles(...t){this.once(()=>De(this.shadow,t))}css(...t){return this.styles(...t)}once(t){return this.#r.guarantee(this.#e++,t)}mount(t){return this.once(()=>this.#i.mount(t))}wake(t){return this.life(()=>[t(),()=>{}])}life(t){let e=this.once(()=>({value:void 0}));return this.mount(()=>{let[r,i]=t();return e.value=r,i}),e.value}events(t){return this.mount(()=>$t(this.element,t))}states(){return this.once(()=>new le(this.element))}op=(()=>{let t=this;function e(r){return t.once(()=>Mt.load(r))}return e.load=e,e.promise=r=>this.once(()=>Mt.promise(r)),e})();signal=(()=>{let t=this;function e(r,i){return t.once(()=>g(r,i))}return e.derived=function(i,o){return t.once(()=>g.derived(i,o))},e.lazy=function(i,o){return t.once(()=>g.lazy(i,o))},e})();derived(t,e){return this.once(()=>g.derived(t,e))}lazy(t,e){return this.once(()=>g.lazy(t,e))}};var R=class extends HTMLElement{static styles;shadow;#t;#e=0;#r=new I;#s=new Y(this,()=>this.update());#i;createShadow(){return this.attachShadow({mode:"open"})}constructor(){super(),this.shadow=this.createShadow(),this.#t=new X(this,this.shadow,this.updateNow,this.update)}render(t){}updateNow=()=>{this.#t[pt](()=>{this.#i=d.render(this.shadow,this.#r.effect(()=>this.render(this.#t),this.update))})};update=T(0,this.updateNow);connectedCallback(){if(this.#e===0){let t=this.constructor.styles;t&&De(this.shadow,t),this.updateNow()}else this.#t[mt](),this.#i?.setConnected(!0);this.#s.start(),this.#e++}disconnectedCallback(){this.#i?.setConnected(!1),this.#t[ut](),this.#r.clear(),this.#s.stop()}};var Te=class{#t;#e;constructor(t,e){this.#e=t,this.#t=e}attr(t,e=!0){return this.#e.attrs.set(t,e),this}attrs(t){for(let[e,r]of Object.entries(t))this.#e.attrs.set(e,r);return this}children(...t){return this.#e.children.push(...t),this}render(){return this.#t(this.#e)}};var re=class{props;attrs=new Map;children=[];constructor(t){this.props=t}};function bs(s,t,e,r){return class extends t{static view=Pt(r,s);#t=new I;createShadow(){return this.attachShadow(s)}render(o){return r(o)(...this.#t.effect(()=>e(this),()=>this.update()))}}}var{I:di}=ss;var vs=s=>s.strings===void 0,ws=()=>document.createComment(""),Ct=(s,t,e)=>{let r=s._$AA.parentNode,i=t===void 0?s._$AB:t._$AA;if(e===void 0){let o=r.insertBefore(ws(),i),n=r.insertBefore(ws(),i);e=new di(o,n,s,s.options)}else{let o=e._$AB.nextSibling,n=e._$AM,c=n!==s;if(c){let a;e._$AQ?.(s),e._$AM=s,e._$AP!==void 0&&(a=s._$AU)!==n._$AU&&e._$AP(a)}if(o!==i||c){let a=e._$AA;for(;a!==o;){let h=a.nextSibling;r.insertBefore(a,i),a=h}}}return e},Z=(s,t,e=s)=>(s._$AI(t,e),s),fi={},$s=(s,t=fi)=>s._$AH=t,Ss=s=>s._$AH,Ne=s=>{s._$AR(),s._$AA.remove()};var Le={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},se=s=>(...t)=>({_$litDirective$:s,values:t}),Bt=class{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,r){this._$Ct=t,this._$AM=e,this._$Ci=r}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}};var ie=(s,t)=>{let e=s._$AN;if(e===void 0)return!1;for(let r of e)r._$AO?.(t,!1),ie(r,t);return!0},qe=s=>{let t,e;do{if((t=s._$AM)===void 0)break;e=t._$AN,e.delete(s),s=t}while(e?.size===0)},ks=s=>{for(let t;t=s._$AM;s=t){let e=t._$AN;if(e===void 0)t._$AN=e=new Set;else if(e.has(s))break;e.add(s),xi(t)}};function gi(s){this._$AN!==void 0?(qe(this),this._$AM=s,ks(this)):this._$AM=s}function yi(s,t=!1,e=0){let r=this._$AH,i=this._$AN;if(i!==void 0&&i.size!==0)if(t)if(Array.isArray(r))for(let o=e;o<r.length;o++)ie(r[o],!1),qe(r[o]);else r!=null&&(ie(r,!1),qe(r));else ie(this,s)}var xi=s=>{s.type==Le.CHILD&&(s._$AP??=yi,s._$AQ??=gi)},Ie=class extends Bt{constructor(){super(...arguments),this._$AN=void 0}_$AT(t,e,r){super._$AT(t,e,r),ks(this),this.isConnected=t._$AU}_$AO(t,e=!0){t!==this.isConnected&&(this.isConnected=t,t?this.reconnected?.():this.disconnected?.()),e&&(ie(this,t),qe(this))}setValue(t){if(vs(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(){}};var He=class s extends HTMLElement{static#t=!1;static register(){this.#t||(d.register({SlyView:s},{soft:!0,upgrade:!0}),this.#t=!0)}static make(){return this.register(),document.createElement("sly-view")}};var Ue=class{viewFn;settings;#t;#e=new I;#r;#s;#i;#o;#n;#a;constructor(t,e,r){this.viewFn=e,this.settings=r,this.#t=t,this.#s=this.#t.attachShadow(this.settings),this.#r=new X(this.#t,this.#s,this.#c,this.#h),this.#o=new Y(this.#t,()=>this.#h())}update(t){return this.#i=t,this.#c(),this.#t}#c=()=>{this.#r[pt](()=>{let t=this.#e.effect(()=>this.viewFn(this.#r)(...this.#i.props),()=>this.#h());S.entries(this.#t,this.#i.attrs),this.#n=d.render(this.#s,t),this.#a=d.render(this.#t,this.#i.children),this.#o.start()})};#h=T(0,this.#c);disconnected(){this.#n?.setConnected(!1),this.#a?.setConnected(!1),this.#r[ut](),this.#e.clear(),this.#o.stop()}reconnected(){this.#r[mt](),this.#o.start(),this.#n?.setConnected(!0),this.#a?.setConnected(!0)}};function As(s,t){return se(class extends Ie{#t=He.make();#e=new Ue(this.#t,s,t);render(r){return this.#e.update(r)}disconnected(){this.#e.disconnected()}reconnected(){this.#e.reconnected()}})}var Ve=class{props;attrs=new Map;constructor(t){this.props=t}},We=class{viewFn;settings;#t;#e=new I;#r;#s;#i;#o;constructor(t,e,r){this.viewFn=e,this.settings=r,this.#t=t,this.#s=this.#t.attachShadow(this.settings),this.#r=new X(this.#t,this.#s,this.#n,this.#a),this.#o=new Y(this.#t,()=>this.#a())}update(t){return this.#i=t,this.#n(),this.#t}#n=()=>{this.#r[pt](()=>{let t=this.#e.effect(()=>this.viewFn(this.#r)(...this.#i.props),()=>this.#a());S.entries(this.#t,this.#i.attrs),d.render(this.#s,t),this.#o.start()})};#a=T(0,this.#n);disconnected(){this.#r[ut](),this.#e.clear(),this.#o.stop()}reconnected(){this.#r[mt](),this.#o.start()}};function Pt(s,t){let e=As(s,t);function r(...i){return e(new re(i))}return r.props=(...i)=>new Te(new re(i),e),r.transmute=i=>Pt(n=>{let c=s(n);return(...a)=>c(...i(...a))},t),r.component=(i=R)=>({props:o=>bs(t,i,o,s)}),r.naked=i=>{let o=new We(i,s,t);return{host:i,render:(...n)=>o.update(new Ve(n))}},r}function k(s){return Pt(s,{mode:"open"})}k.settings=s=>({render:t=>Pt(t,s)});k.render=k;k.component=s=>k(t=>()=>s(t)).component(R).props(()=>[]);function m(s,t){return()=>bi({hz:s,frames:t})}var bi=k(s=>({hz:t,frames:e})=>{s.name("loading"),s.styles(P,wi);let r=s.signal(0);return s.mount(()=>Or(async()=>{await vt(1e3/t);let i=r.get()+1;r.set(i>=e.length?0:i)})),e.at(r.get())}),wi=E`
|
|
12
|
+
|
|
13
|
+
::-webkit-scrollbar { width: 8px; }
|
|
14
|
+
::-webkit-scrollbar-track { background: transparent; }
|
|
15
|
+
::-webkit-scrollbar-thumb { background: #888; border-radius: 1em; }
|
|
16
|
+
::-webkit-scrollbar-thumb:hover { background: #999; }
|
|
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`
|
|
20
18
|
:host {
|
|
21
19
|
font-family: monospace;
|
|
22
20
|
white-space: pre;
|
|
23
21
|
user-select: none;
|
|
24
22
|
}
|
|
25
|
-
`;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
|
+
:host {
|
|
25
|
+
font-family: monospace;
|
|
26
|
+
color: red;
|
|
27
|
+
}
|
|
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`
|
|
26
29
|
:host {
|
|
27
30
|
font-family: monospace;
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
`;var y=class s{x;constructor(t){this.x=t}static new(t){return new this(t)}clone(){return new s(this.x)}set(t){return this.x=t,this}static isBetween(t,e=0,r=1){let i=Math.min(e,r),o=Math.max(e,r);return t>=i&&t<=o}isBetween(t=0,e=1){return s.isBetween(this.x,t,e)}static isNear(t,e,r=.01){return Math.abs(t-e)<=r}isNear(t,e=.01){return s.isNear(this.x,t,e)}static add(...t){let e=0;for(let r of t)e+=r;return e}add(...t){return this.x=s.add(this.x,...t),this}subtract(...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=s.atLeast(this.x,t),this}static atMost(t,e=1){return Math.min(t,e)}atMost(t=1){return this.x=s.atMost(this.x,t),this}static clamp(t,e=0,r=1){return t=s.atLeast(t,Math.min(e,r)),t=s.atMost(t,Math.max(e,r)),t}clamp(t=0,e=1){return this.x=s.clamp(this.x,t,e),this}static lerp(t,e,r,i){let n=(e-t)*r;return i!==void 0&&Math.abs(n)>i&&(n=Math.sign(n)*i),t+n}lerp(t,e,r){return this.x=s.lerp(this.x,t,e,r),this}static step(t,e,r){let i=e-t;return Math.abs(i)<=r?e:t+Math.sign(i)*r}step(t,e){return this.x=s.step(this.x,t,e),this}static creep(t,e,r,i){let o=t*(1-Math.exp(-e*r));if(i!==void 0){let n=i*r;Math.abs(o)>n&&(o=Math.sign(o)*n)}return o}static approach(t,e,r,i,o){let n=e-t,c=this.creep(n,r,i,o);return t+c}approach(t,e,r,i){return this.x=s.approach(this.x,t,e,r,i),this}static wrap(t,e=0,r=1){let i=Math.min(e,r),n=Math.max(e,r)-i,c=t-i,a=c<0?n- -c%n:c%n;return i+a}wrap(t=0,e=1){return this.x=s.wrap(this.x,t,e),this}static constrainProximity(t,e,r){let i=e-t,o=Math.abs(i),n=o>r?r:o,c=i<0?-n:n;return t+c}constrainProximity(t,e){return this.x=s.constrainProximity(this.x,t,e),this}static inverse(t){return 1-t}inverse(){return this.x=s.inverse(this.x),this}static center(t){return t*2-1}center(){return this.x=s.center(this.x),this}static uncenter(t){return(t+1)/2}uncenter(){return this.x=s.uncenter(this.x),this}static map(t,e,r){let o=(r-e)*t;return e+o}map(t,e){return this.x=s.map(this.x,t,e),this}static remap(t,e,r,i=0,o=1,n=!1){let a=(t-e)/(r-e)*(o-i)+i;return n?s.clamp(a,i,o):a}remap(t,e,r=0,i=1,o=!1){return this.x=s.remap(this.x,t,e,r,i,o),this}static magnify(t){return 4*Math.pow(t-.5,3)+.5}magnify(){return this.x=s.magnify(this.x),this}static floor(t){return Math.floor(t)}floor(){return this.x=s.floor(this.x),this}static ceil(t){return Math.ceil(t)}ceil(){return this.x=s.ceil(this.x),this}static round(t){return Math.round(t)}round(){return this.x=s.round(this.x),this}static smooth(t,e,r){return r<=1?e:t+(e-t)/r}smooth(t,e){return this.x=s.smooth(this.x,t,e),this}};var w=class s{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).divideBy(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))}clone(){return new s(this.x,this.y)}*[Symbol.iterator](){yield this.x,yield this.y}toJSON(){return[this.x,this.y]}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 s.magnitudeSquared(this.x,this.y)}magnitude(){return s.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:r})=>this.equals_(e,r))}near_(t,e,r=1e-6){return Math.abs(this.x-t)<=r&&Math.abs(this.y-e)<=r}near({x:t,y:e},r=1e-6){return this.near_(t,e,r)}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 r=this.dot_(t,e),i=this.magnitude()*s.magnitude(t,e);if(i===0)return 0;let o=y.clamp(r/i,-1,1);return Math.acos(o)}angleBetween({x:t,y:e}){return this.angleBetween_(t,e)}normalize(){return this.divideBy(this.magnitude())}half(){return this.divideBy(2)}double(){return this.multiplyBy(2)}abs(){return this.map(t=>Math.abs(t))}rotate(t){let{x:e,y:r}=this;return this.x=e*Math.cos(t)-r*Math.sin(t),this.y=e*Math.sin(t)+r*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().multiplyBy(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}subtractBy(t){return this.x-=t,this.y-=t,this}multiplyBy(t){return this.x*=t,this.y*=t,this}divideBy(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:r}of t)this.add_(e,r);return this}subtract_(t,e){return this.x-=t,this.y-=e,this}subtract(...t){for(let{x:e,y:r}of t)this.subtract_(e,r);return this}multiply_(t,e){return this.x*=t,this.y*=e,this}multiply(...t){for(let{x:e,y:r}of t)this.multiply_(e,r);return this}divide_(t,e){return t!==0&&(this.x/=t),e!==0&&(this.y/=e),this}divide(...t){for(let{x:e,y:r}of t)this.divide_(e,r);return this}lerp_(t,e,r){return this.x+=(t-this.x)*r,this.y+=(e-this.y)*r,this}lerp({x:t,y:e},r){return this.lerp_(t,e,r)}approach_(t,e,r,i,o){return this.x=y.approach(this.x,t,r,i,o),this.y=y.approach(this.y,e,r,i,o),this}approach({x:t,y:e},r,i,o){return this.approach_(t,e,r,i,o)}reflect_(t,e){let r=2*this.dot_(t,e);return this.x-=r*t,this.y-=r*e,this}reflect({x:t,y:e}){return this.reflect_(t,e)}rotateAroundPoint_(t,e,r){let i=this.x-t,o=this.y-e,n=Math.cos(r),c=Math.sin(r);return this.x=n*i-c*o+t,this.y=c*i+n*o+e,this}rotateAroundPoint({x:t,y:e},r){return this.rotateAroundPoint_(t,e,r)}smooth_(t,e,r){return this.x=y.smooth(this.x,t,r),this.y=y.smooth(this.y,e,r),this}smooth({x:t,y:e},r){return this.smooth_(t,e,r)}};var Fe=class{state;players;constructor(t,e){this.state=t,this.players=e}tick(){for(let t of this.players){let{agent:e,port:{actions:r}}=t,i=1;e.position.y+=i*r.gameplay.up.value,e.position.y-=i*r.gameplay.down.value,e.position.x-=i*r.gameplay.left.value,e.position.x+=i*r.gameplay.right.value,e.position.clamp(w.zero(),this.state.arenaSize)}}};var Ge=class{label="0";alive=!0;color="#444";position=w.zero()};var Ke=class{arenaSize=new w(200,100);agents=new Set;makeAgent(t){let e=new Ge;return e.label=t,e.position.set_(.5,.5).multiply(this.arenaSize),this.agents.add(e),e}deleteAgent(t){return this.agents.delete(t),this}};var jt=class{};function Dt(s,{start:t,end:e}){return!(t&&s<t||e&&s>e)}var Je=class extends jt{#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 r of this.#t.keys())if(Dt(r,t)&&(yield r,e+=1),e>=(t.limit??1/0))break}async*entries(t={}){if(t.limit===0)return;let e=0;for(let[r,i]of this.#t.entries())if(Dt(r,t)&&(yield[r,i],e+=1),e>=(t.limit??1/0))break}async transaction(...t){for(let[e,r]of t)r===void 0?this.#t.delete(e):this.#t.set(e,r)}};function Es(s,t,e){let r=Object.entries(t);for(let[i,o]of r)s.addEventListener(i,o,e);return function(){for(let[o,n]of r)s.removeEventListener(o,n)}}var zt=class extends jt{storage;static onStorageEvent=t=>Es(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 r of Object.keys(this.storage))if(Dt(r,t)&&(yield r,e+=1),e>=(t.limit??1/0))break}async*entries(t={}){if(t.limit===0)return;let e=0;for(let[r,i]of Object.entries(this.storage))if(Dt(r,t)&&(yield[r,i],e+=1),e>=(t.limit??1/0))break}async transaction(...t){for(let[e,r]of t)r===void 0?this.storage.removeItem(e):this.storage.setItem(e,r)}};async function Ms(s){let t=[];for await(let e of s)t.push(e);return t}var Ye=class{kv;key;write;constructor(t,e){this.kv=t,this.key=e,this.write=new Nr(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}},Nr=class{key;#t;constructor(t,e){this.key=e,this.#t=t}set(t){return this.#t.set(this.key,t)}};var oe={parse:s=>JSON.parse(s),stringify:s=>JSON.stringify(s)};var Xe=class{#t;constructor(t){this.#t=t}sets(...t){return t.map(([e,r])=>{let i=this.#t.prefix(e),o=r===void 0?void 0:oe.stringify(r);return[i,o]})}set(t,e){return this.sets([t,e])}del(...t){return t.map(e=>[this.#t.prefix(e),void 0])}};function*Ps(s,t){if(s<=0)throw new Error("chunk size must be greater than zero");for(let e=0;e<t.length;e+=s)yield t.slice(e,e+s)}var Ze=class{#t;constructor(t){let{scopes:e,divisor:r,delimiter:i}=t;this.#t=e.length>0?e.join(r)+i:""}prefix=t=>this.#t+t;unprefix=t=>{let e=this.#t.length;return t.slice(e)};scan=t=>{let{limit:e}=t,r=this.#t+(t.start??""),i=this.#t+(t.end??"\xFF");return{limit:e,start:r,end:i}}};var Qe=class s{driver;static collect=Ms;write;#t;#e;constructor(t=new Je,e={}){this.driver=t,this.#t={scopes:[],divisor:".",delimiter:":",chunkSize:1e4,...e},this.#e=new Ze(this.#t),this.write=new Xe(this.#e)}async gets(...t){return(await this.driver.gets(...t.map(this.#e.prefix))).map(r=>r===void 0?r:oe.parse(r))}async get(t){let[e]=await this.gets(t);return e}async requires(...t){let e=await this.gets(...t);for(let r of e)if(r===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 r of this.keys(t))e.push(r);for(let r of Ps(this.#t.chunkSize,e))await this.del(...r)}async*entries(t={}){for await(let[e,r]of this.driver.entries(this.#e.scan(t)))yield[this.#e.unprefix(e),oe.parse(r)]}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(r=>[r.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 r=await this.get(t);return r===void 0&&(r=await e(),await this.transaction(i=>[i.set(t,r)])),r}async versionMigration(t,e,r){let i=this,o=await i.get(t)??0;typeof o!="number"&&(o=0),o!==e&&(await r(o),await i.set(t,e))}store(t){return new Ye(this,t)}scope(t,e=this.#t.delimiter){return new s(this.driver,{...this.#t,delimiter:e,scopes:[...this.#t.scopes,t]})}flatten(){return new s(this.driver,{...this.#t,delimiter:""})}};var ne=class s{profiles=new N;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 C.clone({profiles:[...this.profiles.values()],portProfiles:this.portProfiles,metaBindings:this.metaBindings})}clone(){return new s(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 tr=class{store;$catalog;static async load(t){let e=g(new ne(await t.get()));return new this(t,e)}dispose=O();constructor(t,e){this.store=t,this.$catalog=e,this.dispose.schedule(zt.onStorageEvent(async()=>this.reload()))}async reload(){let t=new ne(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(),r=t(e);return await this.store.set(e.toJSON()),await this.$catalog(e),r}async createProfile(t,e){return this.#t(r=>{let i=wt.random(),o={id:i,label:t,bindings:e};return r.profiles.set(i,o),o})}async deleteProfile(t){return this.#t(e=>{e.profiles.delete(t)})}async assignPortProfile(t,e){return this.#t(r=>{r.portProfiles[t]=e})}};function j(s){return s>0}var er=class{on=B();onDown=B();#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 j(this.#t)}get down(){return!j(this.#e)&&j(this.#t)}get up(){return j(this.#e)&&!j(this.#t)}};var H=class extends N{constructor(t){if(super(),t)for(let[e,r]of t)this.set(e,r)}zero(){for(let t of this.keys())this.set(t,0);return this}mergeSample([t,e]){let r=this.get(t)??0;return e>r&&this.set(t,e),this}};function Cs([,,s],t){return{lastValue:0,holdStart:t,settings:Pi(s)}}function Mi(){return{scale:1,invert:!1,clamp:null,range:null,bottom:null,top:null,timing:["direct"]}}function Pi(s={}){return{...Mi(),...s}}var Bs=(s,t,e)=>jr(e).line(function(i){let{settings:o}=t;if(o.clamp){let[n,c]=o.clamp;i=y.clamp(i,n,c)}if(o.range){let[n,c]=o.range;i=y.isBetween(i,n,c)?y.remap(i,n,c,0,1,!0):0}return o.bottom&&(i=i<o.bottom?0:i),o.top&&(i=Math.min(o.top,i)),i},function(i){return t.settings.invert?1-i:i},function(i){return t.settings.scale*i},function(i){let{settings:o}=t,n=(o.timing[0]==="direct"?void 0:o.timing[1])??250,c=!j(t.lastValue)&&j(i),a=j(t.lastValue)&&!j(i);c&&(t.holdStart=s);let h=s-t.holdStart>=n;switch(t.lastValue=i,o.timing[0]){case"direct":return i;case"tap":return a&&!h?1:0;case"hold":return j(i)&&h?i:0;default:throw new Error("unknown bindings timing")}});function Os(s){return s.length>0?Math.max(...s):0}function Rs(s){return s.length>0?Math.min(...s):0}var rr=class{bindings;actions;#t=new Set;#e=new H;#r=0;#s=new G;#i=ee();constructor(t){this.bindings=t,this.actions=te(t,(e,r)=>te(e,i=>{let o=new er;return this.#i.subscribe(()=>{o.value=this.#t.has(r)?this.#n([])(i,r):0}),o}))}resolve(t,e,r){return this.#r=t,this.#t=e,this.#e=r,this.#i(),this.actions}#o(t,e,r){let i=this.#s.guarantee(t.join("/"),()=>Cs(["code",e,r],this.#r)),o=this.#e.get(e)??0;return Bs(this.#r,i,o)}#n=t=>(e,r)=>{let i=[...t,String(r),typeof e=="string"?e:e[0]],o=this.#n(i);if(typeof e=="string")return this.#o(i,e);switch(e[0]){case"code":{let[,n,c]=e;return this.#o(i,n,c)}case"and":{let[,...n]=e,c=n.map(o);return Rs(c)}case"or":{let[,...n]=e,c=n.map(o);return Os(c)}case"not":{let[,n]=e;return o(n,"subject")>0?0:1}case"cond":{let[,n,c]=e;return o(c,"guard")>0?o(n,"subject"):0}case"mods":{let[,n,c]=e,a=(p,...l)=>p?["or",...l]:["not",["or",...l]];return o(["cond",n,["and",a(c.ctrl??!1,"ControlLeft","ControlRight"),a(c.alt??!1,"AltLeft","AltRight"),a(c.meta??!1,"MetaLeft","MetaRight"),a(c.shift??!1,"ShiftLeft","ShiftRight")]],"guard")>0?o(n,"subject"):0}}}};var Q=class{*[Symbol.iterator](){for(let t of this.samples())yield t}};var Tt=class extends Q{devices=new $e;#t=new H;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 tt=class extends rr{#t=new Tt;devices=this.#t.devices;modes=new $e;constructor(t){super(t),this.modes.adds(...Object.keys(t))}resolve(t=Date.now()){let e=new H(this.#t.samples());return super.resolve(t,this.modes,e)}};var dt="meta";var Nt=()=>({[dt]:{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 sr=class{device;metaPort;constructor(t,e=Nt()){this.device=t,this.metaPort=new tt(e),this.metaPort.devices.add(t)}};var ir=class{ports;metaBindings;on=B();#t=new N;metaPort;constructor(t,e=Nt()){this.ports=t,this.metaBindings=e,this.metaPort=new tt(e)}poll(t=Date.now()){return this.#r(t),this.#s(t),this.#i(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 r=this.ports.findIndex(c=>c.devices.has(t)),i=Math.max(0,this.ports.length-1),o=y.clamp(r+e,0,i),n=this.portByIndex(o);return this.reassign(t,n),n}reassign(t,e=this.getLonelyPort()){this.ports.forEach(r=>r.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 sr(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=T(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 r=e.metaPort.resolve(t);r[dt].shimmyNext.down&&this.shimmy(e.device,1),r[dt].shimmyPrevious.down&&this.shimmy(e.device,-1)}}#i(t){return this.ports.map(e=>(e.resolve(t),e))}};function js(s,t){let e=C.clone(s);if(!t)return e;for(let[r,i]of Object.entries(e))for(let o of Object.keys(i)){let n=t[r]?.[o];n&&(i[o]=n)}return e}function ae(s){return s>=0?[s,0]:[0,Math.abs(s)]}function ce(s){let[t,e]=ae(s.x),[r,i]=ae(s.y);return{up:i,down:r,left:e,right:t}}var K=class extends Q{channel;$vector=g(w.zero());$breakdown=Tr(()=>ce(this.$vector.get()));constructor(t="stick"){super(),this.channel=t}samples(){let{channel:t}=this,{up:e,down:r,left:i,right:o}=this.$breakdown.get();return[[`${t}.up`,e],[`${t}.down`,r],[`${t}.left`,i],[`${t}.right`,o]]}};var U=class extends Q{on=B();sampleMap=new H;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 Lt=class extends U{stickLeft=new K;stickRight=new K;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 or=class s extends U{client=new w(0,0);movement=new w(0,0);dispose=O();constructor(t=window){super(),this.dispose.schedule(ht(t,{pointerdown:e=>{let r=s.buttonCode(e);this.setSample(r,1)},pointerup:e=>{let r=s.buttonCode(e);this.setSample(r,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[r,i]of s.wheelCodes(e))this.setSample(r,i)}}))}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,[r,i]=ae(t),[o,n]=ae(e);t&&(t>=0?this.setSample("pointer.move.right",Math.abs(i)):this.setSample("pointer.move.left",Math.abs(r))),e&&(e>=0?this.setSample("pointer.move.up",Math.abs(n)):this.setSample("pointer.move.down",Math.abs(o))),this.movement.set_(0,0)}};var nr=class extends U{dispose=O();constructor(t=window){super(),this.dispose.schedule(ht(t,this.#t)),this.dispose.schedule(ht(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 et=class extends Tt{keyboard=new nr;pointer=new or;vpad=new Lt;constructor(){super(),this.devices.add(this.keyboard).add(this.pointer).add(this.vpad)}};function he(s,t){let e=w.from(s),r=e.distance_(0,0),i=y.remap(r,t.x,t.y,0,1,!0);return e.normalize().multiplyBy(i)}var Ci=["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"],qt=class extends U{pad;range=new w(.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,r=i=>{e=Math.max(e,i)};for(let[i,o]of Ci.entries()){let n=t.buttons.at(i)?.value??0;r(n),this.setSample(o,n)}this.setSample("gamepad.any",e)}#e(t){let[e=0,r=0,i=0,o=0]=t.axes,n=ce(he(new w(e,r),this.range)),c=ce(he(new w(i,o),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",c.up),this.setSample("gamepad.stick.right.down",c.down),this.setSample("gamepad.stick.right.left",c.left),this.setSample("gamepad.stick.right.right",c.right)}};var ar=class{fallback="\u2754";#t=new Map;constructor(t=[[et,"\u{1F4BB}"],[qt,"\u{1F3AE}"],[Lt,"\u{1F4F1}"]]){this.add(...t)}get(t){return this.#t.get(t)??this.fallback}add(...t){for(let[e,r]of t)this.#t.set(e,r);return this}clear(){return this.#t.clear(),this}};var Bi=s=>Se(s).map(t=>`hsl(${(t*(360/s)+180)%360}deg, 100%, 50%)`),cr=class extends ke{constructor(){super(()=>Bi(12))}};var Lr=class{icon;label;color;constructor(t,e,r){this.icon=t,this.label=e,this.color=r}},It=class{icons=new ar;#t=new os;#e=new cr;get(t){return this.#t.guarantee(t,()=>new Lr(this.icons.get(t.constructor),wt.random(4),this.#e.takeFirst()))}};var hr=class{hub;deviceSkins;auto=!0;dispose=O();#t=Date.now();#e=g(!1);$manual=g(!1);$visible=g.derived(()=>this.$manual()||this.auto&&this.#e());$showLabels=g(!1);constructor(t,e=new It){this.hub=t,this.deviceSkins=e,this.dispose.schedule(t.on(async()=>{Date.now()-this.#t>100&&await this.bump()}))}#r=T(1500,()=>this.#e(!1));async bump(){await this.#e(!0),await this.#r()}async toggle(t=!this.$manual()){return this.$manual.set(t)}};var Ds=E`
|
|
31
|
-
|
|
32
|
-
:host {
|
|
33
|
-
--gap: 0.3em;
|
|
34
|
-
pointer-events: none;
|
|
35
|
-
cursor: default;
|
|
31
|
+
white-space: pre;
|
|
36
32
|
user-select: none;
|
|
37
33
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
display: flex;
|
|
43
|
-
align-items: start;
|
|
44
|
-
|
|
45
|
-
width: max-content;
|
|
46
|
-
gap: var(--gap);
|
|
47
|
-
padding: 0.5em;
|
|
48
|
-
|
|
49
|
-
color: #fff8;
|
|
50
|
-
background: #222a;
|
|
51
|
-
border-radius: 1em;
|
|
52
|
-
|
|
53
|
-
opacity: 0;
|
|
54
|
-
transition: opacity 300ms linear;
|
|
55
|
-
|
|
56
|
-
&[data-active] {
|
|
57
|
-
opacity: 1;
|
|
58
|
-
pointer-events: all;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
.port {
|
|
62
|
-
flex: 1 0 0;
|
|
63
|
-
display: flex;
|
|
64
|
-
flex-direction: column;
|
|
65
|
-
|
|
66
|
-
min-width: 6em;
|
|
67
|
-
gap: var(--gap);
|
|
68
|
-
|
|
69
|
-
> * {
|
|
70
|
-
color: white;
|
|
71
|
-
font-weight: bold;
|
|
72
|
-
text-shadow: 0.05em 0.05em 0.1em #0008;
|
|
73
|
-
text-transform: uppercase;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
header {
|
|
77
|
-
text-align: center;
|
|
78
|
-
color: #fff8;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
.device {
|
|
82
|
-
display: flex;
|
|
83
|
-
flex-direction: column;
|
|
84
|
-
gap: var(--gap);
|
|
85
|
-
|
|
86
|
-
box-shadow: 0.1em 0.2em 0.7em #0004;
|
|
87
|
-
background: color-mix(in srgb, #fffa, var(--color) 50%);
|
|
88
|
-
border-top: 2px solid #fff8;
|
|
89
|
-
border-bottom: 2px solid #0004;
|
|
90
|
-
border-radius: 0.5em;
|
|
91
|
-
|
|
92
|
-
.row {
|
|
93
|
-
display: flex;
|
|
94
|
-
align-items: center;
|
|
95
|
-
|
|
96
|
-
&.primary {
|
|
97
|
-
justify-content: space-between;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
&.secondary {
|
|
101
|
-
justify-content: center;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
.icon {
|
|
106
|
-
font-size: 1.5em;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
.label {
|
|
110
|
-
font-family: monospace;
|
|
111
|
-
font-size: 0.8em;
|
|
112
|
-
opacity: 0.5;
|
|
113
|
-
line-height: 0.9em;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
button {
|
|
117
|
-
opacity: 0.2;
|
|
118
|
-
cursor: pointer;
|
|
119
|
-
padding: 0 0.2em;
|
|
120
|
-
font-family: monospace;
|
|
121
|
-
font-size: 1.5em;
|
|
122
|
-
font-weight: bold;
|
|
123
|
-
|
|
124
|
-
background: transparent;
|
|
125
|
-
border: 1px solid transparent;
|
|
126
|
-
text-shadow: inherit;
|
|
127
|
-
|
|
128
|
-
&:is(:hover, :focus-visible) {
|
|
129
|
-
opacity: 1;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
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;
|
|
133
38
|
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
`;var Ht=class extends R{#t;get deck(){if(!this.#t)throw new Error(".deck was not set on component, but is required");return this.#t}set deck(t){this.#t=t}};var lr=class extends k(t=>e=>{t.css(P,Ds),t.attrs.strings.deck="overlay";let{hub:r,deviceSkins:i,overlayVisibility:{$visible:o,$showLabels:n}}=e;function c(a){let h=i.get(a),p=`--color: ${h.color};`,l=()=>r.shimmy(a,1);return $`
|
|
137
|
-
<div class=device style="${p}">
|
|
138
|
-
<div class="primary row">
|
|
139
|
-
<button @click="${()=>r.shimmy(a,-1)}"><</button>
|
|
140
|
-
<div class=icon>${h.icon}</div>
|
|
141
|
-
<button @click="${l}">></button>
|
|
142
|
-
</div>
|
|
143
|
-
|
|
144
|
-
${n()?$`
|
|
145
|
-
<div class="secondary row">
|
|
146
|
-
<div class=label>${h.label}</div>
|
|
147
|
-
</div>
|
|
148
|
-
`:null}
|
|
149
|
-
</div>
|
|
150
|
-
`}return $`
|
|
151
|
-
<div class=portlist ?data-active="${o()}">
|
|
152
|
-
${r.ports.map((a,h)=>$`
|
|
153
|
-
<div class=port>
|
|
154
|
-
<header>P${h+1}</header>
|
|
155
|
-
${a.devices.array().map(c)}
|
|
156
|
-
</div>
|
|
157
|
-
`)}
|
|
158
|
-
</div>
|
|
159
|
-
`}).component(Ht).props(t=>[t.deck]){};var zs=E`
|
|
160
|
-
|
|
161
|
-
`;var Ut=class extends k(t=>e=>{t.css(P,zs),t.attrs.strings.deck="bindings";let{db:r,hub:i}=e,o=r.$catalog(),n={id:"default",label:"default",bindings:e.baseBindings},c=[n,...o.profiles.values()],a=t.signal("default"),h=r.$catalog().getProfile(a())??n;function p(A,z){let Vt=o.getProfileForPort(z)??n;return $`
|
|
162
|
-
<div class=port>
|
|
163
|
-
<span>port ${z+1}</span>
|
|
164
|
-
<select>
|
|
165
|
-
${c.map(yr=>$`
|
|
166
|
-
<option
|
|
167
|
-
data-id="${yr.id}"
|
|
168
|
-
?selected="${yr.id===Vt.id}">
|
|
169
|
-
${yr.label}
|
|
170
|
-
</option>
|
|
171
|
-
`)}
|
|
172
|
-
</select>
|
|
173
|
-
</div>
|
|
174
|
-
`}function l([A,z]){return $`
|
|
175
|
-
<div class=bracket>
|
|
176
|
-
<strong class=mode>${A}</strong>
|
|
177
|
-
<div>${Object.entries(z).map(u)}</div>
|
|
178
|
-
</div>
|
|
179
|
-
`}function u([A,z]){return $`
|
|
180
|
-
<div class=bind>
|
|
181
|
-
<span class=action>${A}</span>
|
|
182
|
-
</div>
|
|
183
|
-
`}let f=async()=>{let{bindings:A}=h,z=is.random(4),Vt=await r.createProfile(z,A);a(Vt.id)},v=A=>async()=>{await r.deleteProfile(A)},D=A=>{let Vt=A.target.value;a(Vt)};return $`
|
|
184
|
-
<div class=portlist>
|
|
185
|
-
${i.ports.map(p)}
|
|
186
|
-
</div>
|
|
187
|
-
|
|
188
|
-
<div class=bindable>
|
|
189
|
-
<select @input="${D}">
|
|
190
|
-
${c.map(A=>$`
|
|
191
|
-
<option value="${A.id}" ?selected="${A.id===h.id}">${A.label}</option>
|
|
192
|
-
`)}
|
|
193
|
-
</select>
|
|
194
|
-
<button @click="${f}">clone</button>
|
|
195
|
-
<button ?disabled="${h.id===n.id}" @click="${v(h.id)}">delete</button>
|
|
196
|
-
<div class=bindings>
|
|
197
|
-
${Object.entries(h.bindings).map(l)}
|
|
198
|
-
</div>
|
|
199
|
-
</div>
|
|
200
|
-
`}).component(Ht).props(t=>[t.deck]){};var Oi={DeckOverlay:lr,DeckBindings:Ut},Ts=s=>Qt(Oi).map(t=>class extends t{deck=s});var pr=class{baseBindings;baseMetaBindings;hub;db;static async load(t){let e=await tr.load(t.kv.store("catalog")),r=Se(t.portCount).map(o=>e.$catalog().getProfileForPort(o)).map(o=>js(t.bindings,o?.bindings)).map(o=>new tt(o)),i=new ir(r,e.$catalog().metaBindings??t.metaBindings??Nt());return new this(t.bindings,t.metaBindings,i,e)}dispose=O();deviceSkins=new It;primaryDevice=new et;overlayVisibility;components=Ts(this);views=Qt(this.components).map(t=>(...e)=>t.view(this,...e));registerComponents(){d.register(this.components)}constructor(t,e,r,i){this.baseBindings=t,this.baseMetaBindings=e,this.hub=r,this.db=i,this.overlayVisibility=new hr(r,this.deviceSkins),this.dispose.schedule(r.metaPort.actions[dt].revealOverlay.on(o=>{o.pressed&&this.overlayVisibility.bump()}))}get catalog(){return this.db.$catalog()}};var qr=class{port;agent;constructor(t,e){this.port=t,this.agent=e}},ur=class{#t=new N;constructor(t,e){for(let[r,i]of t.ports.entries()){let o=(r+1).toString();this.#t.set(i,new qr(i,e.makeAgent(o)))}}[Symbol.iterator](){return this.#t.values()}require(t){return this.#t.require(t)}};var mr=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.clone().divide(this.state.arenaSize).morph(e=>{e.y=1-e.y}).multiply_(this.canvas.width,this.canvas.height)}render(){let{state:t}=this;this.#e();let e=[...t.agents].reverse(),r=e.filter(o=>!o.alive),i=e.filter(o=>o.alive);for(let o of r)this.#r(o);for(let o of i)this.#s(o)}#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(),r=this.percent(10),{position:i}=t,[o,n]=this.resolve(i);e.font=`${r*1.3}px sans-serif`,e.textAlign="center",e.textBaseline="middle",e.fillStyle="#fff4",e.fillText(t.label,o,n)}#s(t){let e=this.#t(),r=this.percent(10),{color:i,position:o}=t,[n,c]=this.resolve(o);e.beginPath(),e.arc(n,c,r,0,Math.PI*2),e.fillStyle=i,e.fill(),e.lineWidth=this.percent(2),e.strokeStyle="#fff",e.stroke(),e.font=`${r*1.3}px sans-serif`,e.textAlign="center",e.textBaseline="middle",e.strokeStyle="#0004",e.strokeText(t.label,n,c),e.fillStyle="#fff",e.fillText(t.label,n,c)}};var rt=class extends K{hub;constructor(t){super(),this.hub=t}shimmyNext=()=>this.hub.shimmy(this,1);shimmyPrevious=()=>this.hub.shimmy(this,-1)};var Ns={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 Ls(s,t){let e=s;return()=>{let r=t();return r!=null&&(e=r),e}}var Ir=class{get;constructor(t){this.get=t}get gamepad(){return this.get()}};function qs(s){let t=new N;return ht(window,{gamepadconnected:({gamepad:e})=>{let r=()=>navigator.getGamepads().at(e.index),i=new Ir(Ls(e,r)),o=s(i);t.set(e.index,{pad:i,dispose:o})},gamepaddisconnected:({gamepad:e})=>{let r=t.get(e.index);r&&(t.delete(e.index),r.dispose())}})}function Is(s){return qs(t=>s(new qt(t)))}function Hs(){let s=new zt(window.localStorage);return new Qe(s).scope("tact")}var dr=class{deck;static async load(){return new this(await pr.load({portCount:4,kv:Hs(),bindings:Ns}))}logic;dispose=O();state=new Ke;renderer=new mr(this.state);constructor(t){this.deck=t,this.deck.deviceSkins.icons.add([rt,"\u{1F518}"]),this.logic=new Fe(this.state,new ur(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[r]=e.port.devices;e.agent.color=r?this.deck.deviceSkins.get(r).color:"#444"}})),this.plug(new et),this.plug(new rt(t.hub)),this.dispose.schedule(Is(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 vt(1e3/t),this.deck.hub.poll(),this.logic.tick(),this.renderer.render()})}};var Us=(s,t,e)=>{let r=new Map;for(let i=t;i<=e;i++)r.set(s[i],i);return r},Vs=se(class extends Bt{constructor(s){if(super(s),s.type!==Le.CHILD)throw Error("repeat() can only be used in text expressions")}dt(s,t,e){let r;e===void 0?e=t:t!==void 0&&(r=t);let i=[],o=[],n=0;for(let c of s)i[n]=r?r(c,n):n,o[n]=e(c,n),n++;return{values:o,keys:i}}render(s,t,e){return this.dt(s,t,e).values}update(s,[t,e,r]){let i=Ss(s),{values:o,keys:n}=this.dt(t,e,r);if(!Array.isArray(i))return this.ut=n,o;let c=this.ut??=[],a=[],h,p,l=0,u=i.length-1,f=0,v=o.length-1;for(;l<=u&&f<=v;)if(i[l]===null)l++;else if(i[u]===null)u--;else if(c[l]===n[f])a[f]=Z(i[l],o[f]),l++,f++;else if(c[u]===n[v])a[v]=Z(i[u],o[v]),u--,v--;else if(c[l]===n[v])a[v]=Z(i[l],o[v]),Ct(s,a[v+1],i[l]),l++,v--;else if(c[u]===n[f])a[f]=Z(i[u],o[f]),Ct(s,i[l],i[u]),u--,f++;else if(h===void 0&&(h=Us(n,f,v),p=Us(c,l,u)),h.has(c[l]))if(h.has(c[u])){let D=p.get(n[f]),A=D!==void 0?i[D]:null;if(A===null){let z=Ct(s,i[l]);Z(z,o[f]),a[f]=z}else a[f]=Z(A,o[f]),Ct(s,i[l],A),i[D]=null;f++}else Ne(i[u]),u--;else Ne(i[l]),l++;for(;f<=v;){let D=Ct(s,a[v+1]);Z(D,o[f]),a[f++]=D}for(;l<=u;){let D=i[l++];D!==null&&Ne(D)}return this.ut=n,$s(s,a),F}});var Ws=E`
|
|
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`
|
|
201
40
|
|
|
202
41
|
:host {
|
|
203
42
|
display: flex;
|
|
@@ -230,7 +69,7 @@ var Js=Object.defineProperty;var Ys=(s,t)=>{for(var e in t)Js(s,e,{get:t[e],enum
|
|
|
230
69
|
outline: 1px solid red;
|
|
231
70
|
}
|
|
232
71
|
|
|
233
|
-
[
|
|
72
|
+
[view="deck-overlay"] {
|
|
234
73
|
position: absolute;
|
|
235
74
|
top: 10%;
|
|
236
75
|
left: 0;
|
|
@@ -251,7 +90,7 @@ var Js=Object.defineProperty;var Ys=(s,t)=>{for(var e in t)Js(s,e,{get:t[e],enum
|
|
|
251
90
|
gap: 0.5em;
|
|
252
91
|
}
|
|
253
92
|
|
|
254
|
-
`;var
|
|
93
|
+
`;var Ys=w`
|
|
255
94
|
|
|
256
95
|
:host {
|
|
257
96
|
--color: #aaa;
|
|
@@ -290,7 +129,7 @@ button {
|
|
|
290
129
|
padding: 0.2em;
|
|
291
130
|
}
|
|
292
131
|
|
|
293
|
-
`;var
|
|
132
|
+
`;var Xs=w`
|
|
294
133
|
|
|
295
134
|
:host {
|
|
296
135
|
--nub-size: 60%;
|
|
@@ -356,57 +195,227 @@ button {
|
|
|
356
195
|
background: #fff8;
|
|
357
196
|
}
|
|
358
197
|
|
|
359
|
-
`;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`
|
|
360
199
|
transform-origin: center center;
|
|
361
|
-
transform: translate(${p}%, ${
|
|
362
|
-
`};return
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
`})
|
|
200
|
+
transform: translate(${p}%, ${u}%);
|
|
201
|
+
`};return x`
|
|
202
|
+
<div class=frame>
|
|
203
|
+
<div class=inner style="${i}"></div>
|
|
204
|
+
</div>
|
|
205
|
+
|
|
206
|
+
<div class=frame>
|
|
207
|
+
<div class=outer style="${n}"></div>
|
|
208
|
+
</div>
|
|
209
|
+
|
|
210
|
+
<div class=frame>
|
|
211
|
+
<div class=stickbase></div>
|
|
212
|
+
</div>
|
|
213
|
+
|
|
214
|
+
<div class=frame style="${a(.5)}">
|
|
215
|
+
<div class=stickunder></div>
|
|
216
|
+
</div>
|
|
217
|
+
|
|
218
|
+
<div class=frame style="${a(1)}">
|
|
219
|
+
<div class=stick></div>
|
|
220
|
+
</div>
|
|
221
|
+
`});var Qs=k((r,t,e)=>{L(E,Ys),R("virtual-device");let s=()=>r.unplug(t);return x`
|
|
383
222
|
<div class=box>
|
|
384
|
-
${
|
|
223
|
+
${Zs(t)}
|
|
385
224
|
|
|
386
|
-
<button @click="${
|
|
387
|
-
<button @click="${
|
|
388
|
-
<button @click="${
|
|
225
|
+
<button @click="${t.shimmyPrevious}">👈</button>
|
|
226
|
+
<button @click="${s}">💀</button>
|
|
227
|
+
<button @click="${t.shimmyNext}">👉</button>
|
|
228
|
+
</div>
|
|
229
|
+
`});var to=w`
|
|
230
|
+
|
|
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`
|
|
232
|
+
<div class=port>
|
|
233
|
+
<span>port ${A+1}</span>
|
|
234
|
+
<select>
|
|
235
|
+
${i.map(kt=>x`
|
|
236
|
+
<option
|
|
237
|
+
data-id="${kt.id}"
|
|
238
|
+
?selected="${kt.id===z.id}">
|
|
239
|
+
${kt.label}
|
|
240
|
+
</option>
|
|
241
|
+
`)}
|
|
242
|
+
</select>
|
|
243
|
+
</div>
|
|
244
|
+
`}function l(d){let[A,z]=d;return x`
|
|
245
|
+
<div class=bracket>
|
|
246
|
+
<strong class=mode>${A}</strong>
|
|
247
|
+
<div>${Object.entries(z).map(p)}</div>
|
|
248
|
+
</div>
|
|
249
|
+
`}function p([d,A]){return x`
|
|
250
|
+
<div class=bind>
|
|
251
|
+
<span class=action>${d}</span>
|
|
252
|
+
</div>
|
|
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`
|
|
254
|
+
<div class=portlist>
|
|
255
|
+
${e.ports.map(c)}
|
|
389
256
|
</div>
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
${
|
|
257
|
+
|
|
258
|
+
<div class=bindable>
|
|
259
|
+
<select @input="${f}">
|
|
260
|
+
${i.map(d=>x`
|
|
261
|
+
<option value="${d.id}" ?selected="${d.id===a.id}">${d.label}</option>
|
|
262
|
+
`)}
|
|
263
|
+
</select>
|
|
264
|
+
<button @click="${u}">clone</button>
|
|
265
|
+
<button ?disabled="${a.id===o.id}" @click="${h(a.id)}">delete</button>
|
|
266
|
+
<div class=bindings>
|
|
267
|
+
${Object.entries(a.bindings).map(l)}
|
|
394
268
|
</div>
|
|
269
|
+
</div>
|
|
270
|
+
`});var ro=w`
|
|
271
|
+
|
|
272
|
+
:host {
|
|
273
|
+
--gap: 0.3em;
|
|
274
|
+
pointer-events: none;
|
|
275
|
+
cursor: default;
|
|
276
|
+
user-select: none;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
.portlist {
|
|
280
|
+
pointer-events: none;
|
|
281
|
+
|
|
282
|
+
display: flex;
|
|
283
|
+
align-items: start;
|
|
284
|
+
|
|
285
|
+
width: max-content;
|
|
286
|
+
gap: var(--gap);
|
|
287
|
+
padding: 0.5em;
|
|
288
|
+
|
|
289
|
+
color: #fff8;
|
|
290
|
+
background: #222a;
|
|
291
|
+
border-radius: 1em;
|
|
292
|
+
|
|
293
|
+
opacity: 0;
|
|
294
|
+
transition: opacity 300ms linear;
|
|
295
|
+
|
|
296
|
+
&[data-active] {
|
|
297
|
+
opacity: 1;
|
|
298
|
+
pointer-events: all;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
.port {
|
|
302
|
+
flex: 1 0 0;
|
|
303
|
+
display: flex;
|
|
304
|
+
flex-direction: column;
|
|
305
|
+
|
|
306
|
+
min-width: 6em;
|
|
307
|
+
gap: var(--gap);
|
|
308
|
+
|
|
309
|
+
> * {
|
|
310
|
+
color: white;
|
|
311
|
+
font-weight: bold;
|
|
312
|
+
text-shadow: 0.05em 0.05em 0.1em #0008;
|
|
313
|
+
text-transform: uppercase;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
header {
|
|
317
|
+
text-align: center;
|
|
318
|
+
color: #fff8;
|
|
319
|
+
}
|
|
395
320
|
|
|
396
|
-
|
|
397
|
-
|
|
321
|
+
.device {
|
|
322
|
+
display: flex;
|
|
323
|
+
flex-direction: column;
|
|
324
|
+
gap: var(--gap);
|
|
325
|
+
|
|
326
|
+
box-shadow: 0.1em 0.2em 0.7em #0004;
|
|
327
|
+
background: color-mix(in srgb, #fffa, var(--color) 50%);
|
|
328
|
+
border-top: 2px solid #fff8;
|
|
329
|
+
border-bottom: 2px solid #0004;
|
|
330
|
+
border-radius: 0.5em;
|
|
331
|
+
|
|
332
|
+
.row {
|
|
333
|
+
display: flex;
|
|
334
|
+
align-items: center;
|
|
335
|
+
|
|
336
|
+
&.primary {
|
|
337
|
+
justify-content: space-between;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
&.secondary {
|
|
341
|
+
justify-content: center;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
.icon {
|
|
346
|
+
font-size: 1.5em;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
.label {
|
|
350
|
+
font-family: monospace;
|
|
351
|
+
font-size: 0.8em;
|
|
352
|
+
opacity: 0.5;
|
|
353
|
+
line-height: 0.9em;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
button {
|
|
357
|
+
opacity: 0.2;
|
|
358
|
+
cursor: pointer;
|
|
359
|
+
padding: 0 0.2em;
|
|
360
|
+
font-family: monospace;
|
|
361
|
+
font-size: 1.5em;
|
|
362
|
+
font-weight: bold;
|
|
363
|
+
|
|
364
|
+
background: transparent;
|
|
365
|
+
border: 1px solid transparent;
|
|
366
|
+
text-shadow: inherit;
|
|
367
|
+
|
|
368
|
+
&:is(:hover, :focus-visible) {
|
|
369
|
+
opacity: 1;
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
398
375
|
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
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`
|
|
377
|
+
<div class=device style="${c}">
|
|
378
|
+
<div class="primary row">
|
|
379
|
+
<button @click="${()=>t.shimmy(n,-1)}"><</button>
|
|
380
|
+
<div class=icon>${a.icon}</div>
|
|
381
|
+
<button @click="${l}">></button>
|
|
382
|
+
</div>
|
|
402
383
|
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
384
|
+
${o()?x`
|
|
385
|
+
<div class="secondary row">
|
|
386
|
+
<div class=label>${a.label}</div>
|
|
387
|
+
</div>
|
|
388
|
+
`:null}
|
|
406
389
|
</div>
|
|
390
|
+
`}return x`
|
|
391
|
+
<div class=portlist ?data-active="${s()}">
|
|
392
|
+
${t.ports.map((n,a)=>x`
|
|
393
|
+
<div class=port>
|
|
394
|
+
<header>P${a+1}</header>
|
|
395
|
+
${n.devices.array().map(i)}
|
|
396
|
+
</div>
|
|
397
|
+
`)}
|
|
398
|
+
</div>
|
|
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`
|
|
400
|
+
<div class=surface>
|
|
401
|
+
${r.renderer.canvas}
|
|
402
|
+
${so(r.deck)}
|
|
403
|
+
</div>
|
|
404
|
+
|
|
405
|
+
<div class=dlist>
|
|
406
|
+
${Ks(o,i=>i.skin.label,({device:i,skin:n})=>Qs.with({props:[r.deck.hub,i,n],attrs:{style:`--color: ${n.color};`}}))}
|
|
407
|
+
|
|
408
|
+
<button @click="${e}">
|
|
409
|
+
✨
|
|
410
|
+
</button>
|
|
411
|
+
|
|
412
|
+
<button @click="${s}">
|
|
413
|
+
👁️
|
|
414
|
+
</button>
|
|
415
|
+
</div>
|
|
407
416
|
|
|
408
|
-
|
|
409
|
-
|
|
417
|
+
${eo(r.deck)}
|
|
418
|
+
`});var Xo=await dr.load();S.render(S("#demo-theater"),oo(Xo));console.log("\u{1F3AE} tact");
|
|
410
419
|
/*! Bundled license information:
|
|
411
420
|
|
|
412
421
|
@lit/reactive-element/css-tag.js:
|