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