@vgai/editor 0.4.0 → 0.4.1-canary.20260715.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{axe-BJjvBeOZ.js → axe-DaRRWiOi.js} +1 -1
- package/dist/assets/{browserAll-Dn0pgD87.js → browserAll-DLd8cEzW.js} +1 -1
- package/dist/assets/{create-runtime-BF9OD-U8.js → create-runtime-BwRLsjpc.js} +1 -1
- package/dist/assets/{game-DeTGdgYt.js → game-Bi4xWV6Y.js} +1 -1
- package/dist/assets/{game-BCNN63uV.js → game-BlEDdPMm.js} +1 -1
- package/dist/assets/{game-BR0GBNgF.js → game-CKXTrtx6.js} +1 -1
- package/dist/assets/{game-B346oj_f.js → game-CjodSgcy.js} +1 -1
- package/dist/assets/{game-u6c2Patu.js → game-CpSujmHR.js} +1 -1
- package/dist/assets/{game-umrHIqFB.js → game-D5NFr6FT.js} +1 -1
- package/dist/assets/{game-CLNm2g0y.js → game-PKdSMKkV.js} +1 -1
- package/dist/assets/{game-DQxhCYsZ.js → game-dsUNL9SB.js} +1 -1
- package/dist/assets/{game-loop-t5W_oqxz.js → game-loop-X827vWLi.js} +1 -1
- package/dist/assets/{game-source-DzE9taML.js → game-source-BjjzZVF9.js} +1 -1
- package/dist/assets/{index-CgcH1RpF.js → index-BLcaXrPd.js} +1 -1
- package/dist/assets/index-BtZ1fX9i.css +1 -0
- package/dist/assets/{index-DbQzGLxv.js → index-BvKfaQa-.js} +815 -815
- package/dist/assets/{index-Fc8Ezr20.js → index-kEMc_dJ8.js} +1 -1
- package/dist/assets/{index-D3tcNB2T.js → index-ou19ogsR.js} +1 -1
- package/dist/assets/{ingest-siblings-CW_xbvrF.js → ingest-siblings-C2PS3-dY.js} +1 -1
- package/dist/assets/{mount-manifest-DgUscyaD.js → mount-manifest-BSS7Se0W.js} +1 -1
- package/dist/assets/{react-18-C4tVCii_.js → react-18-DqPett-m.js} +1 -1
- package/dist/assets/webworkerAll-njZ4iAXd.js +1 -0
- package/dist/assets/{world-documents-BSaA5YIF.js → world-documents-DjmEFkN0.js} +1 -1
- package/dist/index.html +2 -2
- package/dist-server/packaged.mjs +26752 -883
- package/package.json +2 -2
- package/server/asset-history-snapshots.ts +189 -0
- package/server/asset-library-routes.ts +404 -53
- package/server/catalog-import-recipe.ts +97 -0
- package/server/catalog-reimport.ts +141 -0
- package/server/cloud-asset-catalog.ts +71 -5
- package/server/editor-server.ts +67 -5
- package/server/model-import-conversion.ts +345 -0
- package/server/project-output-writer.ts +412 -36
- package/src/asset-editor-context.tsx +9 -0
- package/src/asset-workflow/asset-capabilities.ts +21 -0
- package/src/asset-workflow/asset-import-jobs.ts +108 -0
- package/src/asset-workflow/import-contract.ts +2 -0
- package/src/asset-workflow/model-inspection.ts +92 -1
- package/src/asset-workflow/preview-resource-lifetime.ts +44 -0
- package/src/asset-workflow/project-asset-commands.ts +1 -0
- package/src/asset-workflow/project-asset-operations.ts +119 -4
- package/src/command-listener.ts +20 -3
- package/src/components/AssetBrowser.tsx +301 -26
- package/src/components/AssetImportDetails.tsx +207 -92
- package/src/components/AssetImportJobStatus.tsx +55 -0
- package/src/components/DefaultEditorLayout.tsx +4 -0
- package/src/components/OnlineAssetBrowser.tsx +197 -11
- package/src/components/WorkspaceDock.tsx +103 -17
- package/src/components/asset-documents.tsx +8 -0
- package/src/components/asset-editor-persistence.ts +300 -5
- package/src/components/asset-selection-section.tsx +1 -0
- package/src/components/asset-viewers/AudioViewer.tsx +4 -7
- package/src/components/asset-viewers/ModelViewer.tsx +168 -5
- package/src/components/asset-viewers/OnlineAssetDetail.tsx +45 -9
- package/src/components/asset-viewers/SourceAssetViewer.tsx +7 -26
- package/src/components/asset-workflow.css +26 -0
- package/src/components/workspace-dock.css +16 -0
- package/src/editor-api.ts +159 -22
- package/src/play-mode.ts +12 -3
- package/src/storage/handle-storage.ts +5 -1
- package/src/storage/http-storage.ts +5 -1
- package/src/storage/mem-storage.ts +1 -0
- package/src/storage/types.ts +2 -0
- package/src/workspace-dock-controller.ts +8 -0
- package/template/vgai.game.json +1 -1
- package/dist/assets/index-bAGhEnnO.css +0 -1
- package/dist/assets/webworkerAll-BA4aq7xq.js +0 -1
- package/dist/project-scripts.bundle.js +0 -3917
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{bs as y,_ as g,$ as V,a2 as b,a0 as O,Z as S,bt as ct,bu as C,bv as Mt,bm as lt,bw as at,bx as Et,by as Ft}from"./index-DbQzGLxv.js";var nt={},L={},pt;function G(){if(pt)return L;pt=1,Object.defineProperty(L,"__esModule",{value:!0}),L.Collector=void 0;let s=class{constructor(i){this.emit=(...e)=>{i.emitCollecting(this,e)}}};return L.Collector=s,L}var R={},ft;function Bt(){if(ft)return R;ft=1,Object.defineProperty(R,"__esModule",{value:!0}),R.CollectorArray=void 0;const s=G();let t=class extends s.Collector{constructor(){super(...arguments),this.result=[]}handleResult(e){return this.result.push(e),!0}getResult(){return this.result}reset(){this.result.length=0}};return R.CollectorArray=t,R}var H={},gt;function Dt(){if(gt)return H;gt=1,Object.defineProperty(H,"__esModule",{value:!0}),H.CollectorLast=void 0;const s=G();let t=class extends s.Collector{handleResult(e){return this.result=e,!0}getResult(){return this.result}reset(){delete this.result}};return H.CollectorLast=t,H}var N={},_t;function Ut(){if(_t)return N;_t=1,Object.defineProperty(N,"__esModule",{value:!0}),N.CollectorUntil0=void 0;const s=G();let t=class extends s.Collector{constructor(){super(...arguments),this.result=!1}handleResult(e){return this.result=e,this.result}getResult(){return this.result}reset(){this.result=!1}};return N.CollectorUntil0=t,N}var W={},wt;function Lt(){if(wt)return W;wt=1,Object.defineProperty(W,"__esModule",{value:!0}),W.CollectorWhile0=void 0;const s=G();let t=class extends s.Collector{constructor(){super(...arguments),this.result=!1}handleResult(e){return this.result=e,!this.result}getResult(){return this.result}reset(){this.result=!1}};return W.CollectorWhile0=t,W}var $={},z={},mt;function Rt(){if(mt)return z;mt=1,Object.defineProperty(z,"__esModule",{value:!0}),z.SignalConnectionImpl=void 0;class s{constructor(i,e){this.link=i,this.parentCleanup=e}disconnect(){return this.link!==null?(this.link.unlink(),this.link=null,this.parentCleanup(),this.parentCleanup=null,!0):!1}set enabled(i){this.link&&this.link.setEnabled(i)}get enabled(){return this.link!==null&&this.link.isEnabled()}}return z.SignalConnectionImpl=s,z}var j={},vt;function Ht(){if(vt)return j;vt=1,Object.defineProperty(j,"__esModule",{value:!0}),j.SignalLink=void 0;let s=class Vt{constructor(i=null,e=null,h=0){this.enabled=!0,this.newLink=!1,this.callback=null,this.prev=i??this,this.next=e??this,this.order=h}isEnabled(){return this.enabled&&!this.newLink}setEnabled(i){this.enabled=i}unlink(){this.callback=null,this.next.prev=this.prev,this.prev.next=this.next}insert(i,e){let h=this.prev;for(;h!==this&&!(h.order<=e);)h=h.prev;const n=new Vt(h,h.next,e);return n.callback=i,h.next=n,n.next.prev=n,n}};return j.SignalLink=s,j}var bt;function Nt(){if(bt)return $;bt=1,Object.defineProperty($,"__esModule",{value:!0}),$.Signal=void 0;const s=Rt(),t=Ht();let i=class{constructor(){this.head=new t.SignalLink,this.hasNewLinks=!1,this.emitDepth=0,this.connectionsCount=0}getConnectionsCount(){return this.connectionsCount}hasConnections(){return this.connectionsCount>0}connect(h,n=0){this.connectionsCount++;const r=this.head.insert(h,n);return this.emitDepth>0&&(this.hasNewLinks=!0,r.newLink=!0),new s.SignalConnectionImpl(r,()=>this.decrementConnectionCount())}decrementConnectionCount(){this.connectionsCount--}disconnect(h){for(let n=this.head.next;n!==this.head;n=n.next)if(n.callback===h)return this.decrementConnectionCount(),n.unlink(),!0;return!1}disconnectAll(){for(;this.head.next!==this.head;)this.head.next.unlink();this.connectionsCount=0}emit(...h){this.emitDepth++;for(let n=this.head.next;n!==this.head;n=n.next)n.isEnabled()&&n.callback&&n.callback.apply(null,h);this.emitDepth--,this.unsetNewLink()}emitCollecting(h,n){this.emitDepth++;for(let r=this.head.next;r!==this.head;r=r.next)if(r.isEnabled()&&r.callback){const o=r.callback.apply(null,n);if(!h.handleResult(o))break}this.emitDepth--,this.unsetNewLink()}unsetNewLink(){if(this.hasNewLinks&&this.emitDepth===0){for(let h=this.head.next;h!==this.head;h=h.next)h.newLink=!1;this.hasNewLinks=!1}}};return $.Signal=i,$}var X={},xt;function Wt(){if(xt)return X;xt=1,Object.defineProperty(X,"__esModule",{value:!0}),X.SignalConnections=void 0;let s=class{constructor(){this.list=[]}add(i){this.list.push(i)}disconnectAll(){for(const i of this.list)i.disconnect();this.list=[]}getCount(){return this.list.length}isEmpty(){return this.list.length===0}};return X.SignalConnections=s,X}var yt;function $t(){return yt||(yt=1,(function(s){Object.defineProperty(s,"__esModule",{value:!0}),s.SignalConnections=s.Signal=s.CollectorWhile0=s.CollectorUntil0=s.CollectorLast=s.CollectorArray=s.Collector=void 0;var t=G();Object.defineProperty(s,"Collector",{enumerable:!0,get:function(){return t.Collector}});var i=Bt();Object.defineProperty(s,"CollectorArray",{enumerable:!0,get:function(){return i.CollectorArray}});var e=Dt();Object.defineProperty(s,"CollectorLast",{enumerable:!0,get:function(){return e.CollectorLast}});var h=Ut();Object.defineProperty(s,"CollectorUntil0",{enumerable:!0,get:function(){return h.CollectorUntil0}});var n=Lt();Object.defineProperty(s,"CollectorWhile0",{enumerable:!0,get:function(){return n.CollectorWhile0}});var r=Nt();Object.defineProperty(s,"Signal",{enumerable:!0,get:function(){return r.Signal}});var o=Wt();Object.defineProperty(s,"SignalConnections",{enumerable:!0,get:function(){return o.SignalConnections}})})(nt)),nt}var f=$t(),zt=Object.defineProperty,jt=(s,t,i)=>t in s?zt(s,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):s[t]=i,P=(s,t,i)=>jt(s,typeof t!="symbol"?t+"":t,i);class Xt{constructor(){P(this,"_isMouseIn"),P(this,"_isDown"),P(this,"onDown"),P(this,"onUp"),P(this,"onUpOut"),P(this,"onOut"),P(this,"onPress"),P(this,"onHover"),this.onPress=new f.Signal,this.onDown=new f.Signal,this.onUp=new f.Signal,this.onHover=new f.Signal,this.onOut=new f.Signal,this.onUpOut=new f.Signal}connectEvents(t){y.any?(t.on("pointerdown",this.processDown,this),t.on("pointerup",this.processUp,this),t.on("pointerupoutside",this.processUpOut,this),t.on("pointerout",this.processOut,this),t.on("pointertap",this.processPress,this),t.on("pointerover",this.processOver,this)):(t.on("mousedown",this.processDown,this),t.on("mouseup",this.processUp,this),t.on("mouseupoutside",this.processUpOut,this),t.on("mouseout",this.processOut,this),t.on("click",this.processPress,this),t.on("mouseover",this.processOver,this))}disconnectEvents(t){y.any?(t.off("pointerdown",this.processDown,this),t.off("pointerup",this.processUp,this),t.off("pointerupoutside",this.processUpOut,this),t.off("pointerout",this.processOut,this),t.off("pointertap",this.processPress,this),t.off("pointerover",this.processOver,this)):(t.off("mousedown",this.processDown,this),t.off("mouseup",this.processUp,this),t.off("mouseupoutside",this.processUpOut,this),t.off("mouseout",this.processOut,this),t.off("click",this.processPress,this),t.off("mouseover",this.processOver,this))}processDown(t){this._isDown=!0,this.onDown.emit(this,t),this.down(t)}processUp(t){this._isDown&&(this.onUp.emit(this,t),this.up(t)),this._isDown=!1}processUpOut(t){this._isDown&&(this.onUp.emit(this,t),this.onUpOut.emit(this,t),this.up(t),this.upOut(t)),this._isDown=!1}processOut(t){this._isMouseIn&&(this._isMouseIn=!1,this.onOut.emit(this,t),this.out(t))}processPress(t){this._isDown=!1,this.onPress.emit(this,t),this.press(t)}processOver(t){y.any||(this._isMouseIn=!0,this.onHover.emit(this,t),this.hover(t))}down(t){}up(t){}upOut(t){}out(t){}press(t){}hover(t){}get isDown(){return this._isDown}}var Yt=Object.defineProperty,qt=(s,t,i)=>t in s?Yt(s,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):s[t]=i,T=(s,t,i)=>qt(s,typeof t!="symbol"?t+"":t,i);class Jt extends Xt{constructor(t){super(),T(this,"_view"),t&&(this.view=t,this.enabled=!0)}set view(t){!!this._view&&this.disconnectEvents(this._view),this._view=t,this.connectEvents(this._view)}get view(){return this._view}set enabled(t){if(!this.view){console.error("Button view is not set. Please set it before enabling the button.");return}this.view.eventMode=t?"static":"auto",this.view.cursor=t?"pointer":"default",!t&&this.isDown&&this.processUp()}get enabled(){return this.view.eventMode==="static"}}class Kt extends g{constructor(t){super(),T(this,"button"),T(this,"onDown"),T(this,"onUp"),T(this,"onUpOut"),T(this,"onOut"),T(this,"onPress"),T(this,"onHover"),this.button=new Jt(this),this.button.enabled=!0,t&&this.addChild(t),this.onPress=this.button.onPress,this.onDown=this.button.onDown,this.onUp=this.button.onUp,this.onHover=this.button.onHover,this.onOut=this.button.onOut,this.onUpOut=this.button.onUpOut}set enabled(t){this.button.enabled=t}get enabled(){return this.button.enabled}}function w(s){return typeof s=="string"?V.from(s):s instanceof b?new V(s):s}var Gt=Object.defineProperty,Zt=(s,t,i)=>t in s?Gt(s,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):s[t]=i,Z=(s,t,i)=>Zt(s,typeof t!="symbol"?t+"":t,i);class Qt extends g{constructor(t,i,e){super(),Z(this,"_triggerEvents",new Set(["onPress"])),Z(this,"innerView"),Z(this,"_active"),Z(this,"onChange"),this.innerView=new g,this.addChild(this.innerView),this.onChange=new f.Signal,t&&(this.views=t),i&&(this.triggerEvents=i),e&&this.views.length>0&&(this.active=e),this.setInteractionEvents()}setInteractionEvents(){this.innerView.eventMode="static",this.innerView.on("pointerdown",()=>this.handleEvents("onDown")),this.innerView.on("pointerup",()=>this.handleEvents("onUp")),this.innerView.on("pointerupoutside",()=>this.handleEvents("onUpOut")),this.innerView.on("pointerout",()=>this.handleEvents("onOut")),this.innerView.on("pointertap",()=>this.handleEvents("onPress")),this.innerView.on("pointerover",()=>this.handleEvents("onHover"))}handleEvents(t){this._triggerEvents.has(t)&&this.switch()}get activeView(){if(this.views&&this.views[this.active])return this.views[this.active]}set views(t){this.innerView.removeChildren(),t.forEach(i=>this.add(i))}get views(){return this.innerView.children}add(t){const i=w(t);this.innerView.addChild(i),i.visible=!1,this.views.length===1&&(this.active=0)}remove(t){this.views[t]&&this.innerView.removeChild(this.views[t])}set triggerEvents(t){this._triggerEvents=new Set(Array.isArray(t)?t:[t])}get triggerEvents(){return Array.from(this._triggerEvents)}switch(t){if(t!==void 0&&t===this.active)return;const i=this.active;if(this.forceSwitch(t),i!==this.active){const e=this.views.length>2?this.active:this.active===1;this.onChange.emit(e)}}forceSwitch(t){if(!(t!==void 0&&t===this.active)){if(this.activeView&&(this.activeView.visible=!1),t!==void 0&&!this.views[t])throw new Error(`View with id ${t} does not exist.`);this._active=t!==void 0?t:this.nextActive,this._active!==void 0&&(this.views[this.active].visible=!0)}}get nextActive(){if(this.views.length!==0)return this.active<this.views.length-1?this.active+1:0}set active(t){this.switch(t)}get active(){return this._active}}function ti(s){s&&(s.parent&&s.parent.removeChild(s),s.destroy(),s=null)}var ii=Object.defineProperty,ei=(s,t,i)=>t in s?ii(s,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):s[t]=i,Q=(s,t,i)=>ei(s,typeof t!="symbol"?t+"":t,i);class Zi extends Qt{constructor(t){super(),Q(this,"labelText"),Q(this,"onCheck"),Q(this,"_style"),Q(this,"_textClass"),this._textClass=t.TextClass??O,this.text=t.text,this.style=t.style,this.checked=t.checked,this.triggerEvents=["onPress"],this.innerView.cursor="pointer",this.onCheck=new f.Signal,this.onChange.connect(()=>this.onCheck.emit(this.checked))}addLabel(t,i){t&&(this.labelText=new this._textClass({text:t??"",style:i??this._style?.text}),this.addChild(this.labelText),this.labelText.cursor="pointer",this.labelText.eventMode="static",this.labelText.on("pointertap",()=>this.checked=!this.checked),this.alignText())}set text(t){if(!t){ti(this.labelText),this.labelText=void 0;return}this.labelText?this.labelText.text=t:this.addLabel(t),this.alignText()}get text(){return this.labelText?.text??""}set style(t){const i=this.checked;this._style=t;const{unchecked:e,checked:h}=t,n=w(e),r=w(h);this.views=[n,r],i?(r.visible=!0,this.active=1):n.visible=!0,this.labelText?(r.visible=!0,this.active=1,t.text&&(this.labelText.style=t.text),this.alignText()):n.visible=!0}get style(){return this._style}alignText(){if(!this.style||!this.labelText||!this.views)return;const t=this.views[0];t&&(this.labelText.x=t.width+10+(this._style?.textOffset?.x??0),this.labelText.y=(t.height-this.labelText.height)/2+(this._style?.textOffset?.y??0))}get checked(){return this.active===1}set checked(t){this.switch(t?1:0)}forceCheck(t){this.forceSwitch(t?1:0)}}var si=Object.defineProperty,hi=(s,t,i)=>t in s?si(s,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):s[t]=i,Y=(s,t,i)=>hi(s,typeof t!="symbol"?t+"":t,i);class Qi extends g{constructor(t){super(),Y(this,"_progress",0),Y(this,"options"),Y(this,"bgCircle",new S),Y(this,"fillCircle",new S),Y(this,"innerView",new g),this.options=t,this.addChild(this.innerView),this.innerView.addChild(this.bgCircle,this.fillCircle),this.addBackground(),t.value&&(this.progress=t.value)}addBackground(){const{backgroundColor:t,lineWidth:i,radius:e,backgroundAlpha:h}=this.options;let n=1;h>0&&(n=h),t===void 0&&(n=1e-6),this.bgCircle.circle(0,0,e).stroke({width:i,color:t,alpha:n})}set progress(t){t>100&&(t=100),t<0&&(t=0),this._progress=t;const{lineWidth:i,radius:e,fillColor:h,fillAlpha:n,cap:r}=this.options;if(t===0&&n===0){this.fillCircle.clear();return}const o=0,a=360/100*t;this.fillCircle.clear().arc(0,0,e,(-90+o)*ct,(-90+o+a)*ct).stroke({width:i,color:h,cap:r,alpha:n})}get progress(){return this._progress}}var ni=Object.defineProperty,ri=(s,t,i)=>t in s?ni(s,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):s[t]=i,k=(s,t,i)=>ri(s,typeof t!="symbol"?t+"":t,i);class oi extends g{constructor(t){super(),k(this,"bg"),k(this,"fill"),k(this,"fillMask"),k(this,"progressStart",0),k(this,"_progress",0),k(this,"options"),k(this,"innerView"),k(this,"_view"),this.options=t,this.innerView=new g,this.addChild(this.innerView),t?.bg&&t?.fill&&this.init(t)}init({bg:t,fill:i,fillPaddings:e,progress:h}){this.setBackground(t),this.setFill(i,e),this.progress=h}setBackground(t){this.bg&&this.bg.destroy(),this.options?.nineSliceSprite&&(typeof t=="string"?this.bg=new C({texture:b.from(t),leftWidth:this.options.nineSliceSprite.bg[0],topHeight:this.options.nineSliceSprite.bg[1],rightWidth:this.options.nineSliceSprite.bg[2],bottomHeight:this.options.nineSliceSprite.bg[3]}):t instanceof b?this.bg=new C({texture:t,leftWidth:this.options.nineSliceSprite.bg[0],topHeight:this.options.nineSliceSprite.bg[1],rightWidth:this.options.nineSliceSprite.bg[2],bottomHeight:this.options.nineSliceSprite.bg[3]}):console.warn(`NineSliceSprite can not be used with views set as Container.
|
|
1
|
+
import{bs as y,_ as g,$ as V,a2 as b,a0 as O,Z as S,bt as ct,bu as C,bv as Mt,bm as lt,bw as at,bx as Et,by as Ft}from"./index-BvKfaQa-.js";var nt={},L={},pt;function G(){if(pt)return L;pt=1,Object.defineProperty(L,"__esModule",{value:!0}),L.Collector=void 0;let s=class{constructor(i){this.emit=(...e)=>{i.emitCollecting(this,e)}}};return L.Collector=s,L}var R={},ft;function Bt(){if(ft)return R;ft=1,Object.defineProperty(R,"__esModule",{value:!0}),R.CollectorArray=void 0;const s=G();let t=class extends s.Collector{constructor(){super(...arguments),this.result=[]}handleResult(e){return this.result.push(e),!0}getResult(){return this.result}reset(){this.result.length=0}};return R.CollectorArray=t,R}var H={},gt;function Dt(){if(gt)return H;gt=1,Object.defineProperty(H,"__esModule",{value:!0}),H.CollectorLast=void 0;const s=G();let t=class extends s.Collector{handleResult(e){return this.result=e,!0}getResult(){return this.result}reset(){delete this.result}};return H.CollectorLast=t,H}var N={},_t;function Ut(){if(_t)return N;_t=1,Object.defineProperty(N,"__esModule",{value:!0}),N.CollectorUntil0=void 0;const s=G();let t=class extends s.Collector{constructor(){super(...arguments),this.result=!1}handleResult(e){return this.result=e,this.result}getResult(){return this.result}reset(){this.result=!1}};return N.CollectorUntil0=t,N}var W={},wt;function Lt(){if(wt)return W;wt=1,Object.defineProperty(W,"__esModule",{value:!0}),W.CollectorWhile0=void 0;const s=G();let t=class extends s.Collector{constructor(){super(...arguments),this.result=!1}handleResult(e){return this.result=e,!this.result}getResult(){return this.result}reset(){this.result=!1}};return W.CollectorWhile0=t,W}var $={},z={},mt;function Rt(){if(mt)return z;mt=1,Object.defineProperty(z,"__esModule",{value:!0}),z.SignalConnectionImpl=void 0;class s{constructor(i,e){this.link=i,this.parentCleanup=e}disconnect(){return this.link!==null?(this.link.unlink(),this.link=null,this.parentCleanup(),this.parentCleanup=null,!0):!1}set enabled(i){this.link&&this.link.setEnabled(i)}get enabled(){return this.link!==null&&this.link.isEnabled()}}return z.SignalConnectionImpl=s,z}var j={},vt;function Ht(){if(vt)return j;vt=1,Object.defineProperty(j,"__esModule",{value:!0}),j.SignalLink=void 0;let s=class Vt{constructor(i=null,e=null,h=0){this.enabled=!0,this.newLink=!1,this.callback=null,this.prev=i??this,this.next=e??this,this.order=h}isEnabled(){return this.enabled&&!this.newLink}setEnabled(i){this.enabled=i}unlink(){this.callback=null,this.next.prev=this.prev,this.prev.next=this.next}insert(i,e){let h=this.prev;for(;h!==this&&!(h.order<=e);)h=h.prev;const n=new Vt(h,h.next,e);return n.callback=i,h.next=n,n.next.prev=n,n}};return j.SignalLink=s,j}var bt;function Nt(){if(bt)return $;bt=1,Object.defineProperty($,"__esModule",{value:!0}),$.Signal=void 0;const s=Rt(),t=Ht();let i=class{constructor(){this.head=new t.SignalLink,this.hasNewLinks=!1,this.emitDepth=0,this.connectionsCount=0}getConnectionsCount(){return this.connectionsCount}hasConnections(){return this.connectionsCount>0}connect(h,n=0){this.connectionsCount++;const r=this.head.insert(h,n);return this.emitDepth>0&&(this.hasNewLinks=!0,r.newLink=!0),new s.SignalConnectionImpl(r,()=>this.decrementConnectionCount())}decrementConnectionCount(){this.connectionsCount--}disconnect(h){for(let n=this.head.next;n!==this.head;n=n.next)if(n.callback===h)return this.decrementConnectionCount(),n.unlink(),!0;return!1}disconnectAll(){for(;this.head.next!==this.head;)this.head.next.unlink();this.connectionsCount=0}emit(...h){this.emitDepth++;for(let n=this.head.next;n!==this.head;n=n.next)n.isEnabled()&&n.callback&&n.callback.apply(null,h);this.emitDepth--,this.unsetNewLink()}emitCollecting(h,n){this.emitDepth++;for(let r=this.head.next;r!==this.head;r=r.next)if(r.isEnabled()&&r.callback){const o=r.callback.apply(null,n);if(!h.handleResult(o))break}this.emitDepth--,this.unsetNewLink()}unsetNewLink(){if(this.hasNewLinks&&this.emitDepth===0){for(let h=this.head.next;h!==this.head;h=h.next)h.newLink=!1;this.hasNewLinks=!1}}};return $.Signal=i,$}var X={},xt;function Wt(){if(xt)return X;xt=1,Object.defineProperty(X,"__esModule",{value:!0}),X.SignalConnections=void 0;let s=class{constructor(){this.list=[]}add(i){this.list.push(i)}disconnectAll(){for(const i of this.list)i.disconnect();this.list=[]}getCount(){return this.list.length}isEmpty(){return this.list.length===0}};return X.SignalConnections=s,X}var yt;function $t(){return yt||(yt=1,(function(s){Object.defineProperty(s,"__esModule",{value:!0}),s.SignalConnections=s.Signal=s.CollectorWhile0=s.CollectorUntil0=s.CollectorLast=s.CollectorArray=s.Collector=void 0;var t=G();Object.defineProperty(s,"Collector",{enumerable:!0,get:function(){return t.Collector}});var i=Bt();Object.defineProperty(s,"CollectorArray",{enumerable:!0,get:function(){return i.CollectorArray}});var e=Dt();Object.defineProperty(s,"CollectorLast",{enumerable:!0,get:function(){return e.CollectorLast}});var h=Ut();Object.defineProperty(s,"CollectorUntil0",{enumerable:!0,get:function(){return h.CollectorUntil0}});var n=Lt();Object.defineProperty(s,"CollectorWhile0",{enumerable:!0,get:function(){return n.CollectorWhile0}});var r=Nt();Object.defineProperty(s,"Signal",{enumerable:!0,get:function(){return r.Signal}});var o=Wt();Object.defineProperty(s,"SignalConnections",{enumerable:!0,get:function(){return o.SignalConnections}})})(nt)),nt}var f=$t(),zt=Object.defineProperty,jt=(s,t,i)=>t in s?zt(s,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):s[t]=i,P=(s,t,i)=>jt(s,typeof t!="symbol"?t+"":t,i);class Xt{constructor(){P(this,"_isMouseIn"),P(this,"_isDown"),P(this,"onDown"),P(this,"onUp"),P(this,"onUpOut"),P(this,"onOut"),P(this,"onPress"),P(this,"onHover"),this.onPress=new f.Signal,this.onDown=new f.Signal,this.onUp=new f.Signal,this.onHover=new f.Signal,this.onOut=new f.Signal,this.onUpOut=new f.Signal}connectEvents(t){y.any?(t.on("pointerdown",this.processDown,this),t.on("pointerup",this.processUp,this),t.on("pointerupoutside",this.processUpOut,this),t.on("pointerout",this.processOut,this),t.on("pointertap",this.processPress,this),t.on("pointerover",this.processOver,this)):(t.on("mousedown",this.processDown,this),t.on("mouseup",this.processUp,this),t.on("mouseupoutside",this.processUpOut,this),t.on("mouseout",this.processOut,this),t.on("click",this.processPress,this),t.on("mouseover",this.processOver,this))}disconnectEvents(t){y.any?(t.off("pointerdown",this.processDown,this),t.off("pointerup",this.processUp,this),t.off("pointerupoutside",this.processUpOut,this),t.off("pointerout",this.processOut,this),t.off("pointertap",this.processPress,this),t.off("pointerover",this.processOver,this)):(t.off("mousedown",this.processDown,this),t.off("mouseup",this.processUp,this),t.off("mouseupoutside",this.processUpOut,this),t.off("mouseout",this.processOut,this),t.off("click",this.processPress,this),t.off("mouseover",this.processOver,this))}processDown(t){this._isDown=!0,this.onDown.emit(this,t),this.down(t)}processUp(t){this._isDown&&(this.onUp.emit(this,t),this.up(t)),this._isDown=!1}processUpOut(t){this._isDown&&(this.onUp.emit(this,t),this.onUpOut.emit(this,t),this.up(t),this.upOut(t)),this._isDown=!1}processOut(t){this._isMouseIn&&(this._isMouseIn=!1,this.onOut.emit(this,t),this.out(t))}processPress(t){this._isDown=!1,this.onPress.emit(this,t),this.press(t)}processOver(t){y.any||(this._isMouseIn=!0,this.onHover.emit(this,t),this.hover(t))}down(t){}up(t){}upOut(t){}out(t){}press(t){}hover(t){}get isDown(){return this._isDown}}var Yt=Object.defineProperty,qt=(s,t,i)=>t in s?Yt(s,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):s[t]=i,T=(s,t,i)=>qt(s,typeof t!="symbol"?t+"":t,i);class Jt extends Xt{constructor(t){super(),T(this,"_view"),t&&(this.view=t,this.enabled=!0)}set view(t){!!this._view&&this.disconnectEvents(this._view),this._view=t,this.connectEvents(this._view)}get view(){return this._view}set enabled(t){if(!this.view){console.error("Button view is not set. Please set it before enabling the button.");return}this.view.eventMode=t?"static":"auto",this.view.cursor=t?"pointer":"default",!t&&this.isDown&&this.processUp()}get enabled(){return this.view.eventMode==="static"}}class Kt extends g{constructor(t){super(),T(this,"button"),T(this,"onDown"),T(this,"onUp"),T(this,"onUpOut"),T(this,"onOut"),T(this,"onPress"),T(this,"onHover"),this.button=new Jt(this),this.button.enabled=!0,t&&this.addChild(t),this.onPress=this.button.onPress,this.onDown=this.button.onDown,this.onUp=this.button.onUp,this.onHover=this.button.onHover,this.onOut=this.button.onOut,this.onUpOut=this.button.onUpOut}set enabled(t){this.button.enabled=t}get enabled(){return this.button.enabled}}function w(s){return typeof s=="string"?V.from(s):s instanceof b?new V(s):s}var Gt=Object.defineProperty,Zt=(s,t,i)=>t in s?Gt(s,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):s[t]=i,Z=(s,t,i)=>Zt(s,typeof t!="symbol"?t+"":t,i);class Qt extends g{constructor(t,i,e){super(),Z(this,"_triggerEvents",new Set(["onPress"])),Z(this,"innerView"),Z(this,"_active"),Z(this,"onChange"),this.innerView=new g,this.addChild(this.innerView),this.onChange=new f.Signal,t&&(this.views=t),i&&(this.triggerEvents=i),e&&this.views.length>0&&(this.active=e),this.setInteractionEvents()}setInteractionEvents(){this.innerView.eventMode="static",this.innerView.on("pointerdown",()=>this.handleEvents("onDown")),this.innerView.on("pointerup",()=>this.handleEvents("onUp")),this.innerView.on("pointerupoutside",()=>this.handleEvents("onUpOut")),this.innerView.on("pointerout",()=>this.handleEvents("onOut")),this.innerView.on("pointertap",()=>this.handleEvents("onPress")),this.innerView.on("pointerover",()=>this.handleEvents("onHover"))}handleEvents(t){this._triggerEvents.has(t)&&this.switch()}get activeView(){if(this.views&&this.views[this.active])return this.views[this.active]}set views(t){this.innerView.removeChildren(),t.forEach(i=>this.add(i))}get views(){return this.innerView.children}add(t){const i=w(t);this.innerView.addChild(i),i.visible=!1,this.views.length===1&&(this.active=0)}remove(t){this.views[t]&&this.innerView.removeChild(this.views[t])}set triggerEvents(t){this._triggerEvents=new Set(Array.isArray(t)?t:[t])}get triggerEvents(){return Array.from(this._triggerEvents)}switch(t){if(t!==void 0&&t===this.active)return;const i=this.active;if(this.forceSwitch(t),i!==this.active){const e=this.views.length>2?this.active:this.active===1;this.onChange.emit(e)}}forceSwitch(t){if(!(t!==void 0&&t===this.active)){if(this.activeView&&(this.activeView.visible=!1),t!==void 0&&!this.views[t])throw new Error(`View with id ${t} does not exist.`);this._active=t!==void 0?t:this.nextActive,this._active!==void 0&&(this.views[this.active].visible=!0)}}get nextActive(){if(this.views.length!==0)return this.active<this.views.length-1?this.active+1:0}set active(t){this.switch(t)}get active(){return this._active}}function ti(s){s&&(s.parent&&s.parent.removeChild(s),s.destroy(),s=null)}var ii=Object.defineProperty,ei=(s,t,i)=>t in s?ii(s,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):s[t]=i,Q=(s,t,i)=>ei(s,typeof t!="symbol"?t+"":t,i);class Zi extends Qt{constructor(t){super(),Q(this,"labelText"),Q(this,"onCheck"),Q(this,"_style"),Q(this,"_textClass"),this._textClass=t.TextClass??O,this.text=t.text,this.style=t.style,this.checked=t.checked,this.triggerEvents=["onPress"],this.innerView.cursor="pointer",this.onCheck=new f.Signal,this.onChange.connect(()=>this.onCheck.emit(this.checked))}addLabel(t,i){t&&(this.labelText=new this._textClass({text:t??"",style:i??this._style?.text}),this.addChild(this.labelText),this.labelText.cursor="pointer",this.labelText.eventMode="static",this.labelText.on("pointertap",()=>this.checked=!this.checked),this.alignText())}set text(t){if(!t){ti(this.labelText),this.labelText=void 0;return}this.labelText?this.labelText.text=t:this.addLabel(t),this.alignText()}get text(){return this.labelText?.text??""}set style(t){const i=this.checked;this._style=t;const{unchecked:e,checked:h}=t,n=w(e),r=w(h);this.views=[n,r],i?(r.visible=!0,this.active=1):n.visible=!0,this.labelText?(r.visible=!0,this.active=1,t.text&&(this.labelText.style=t.text),this.alignText()):n.visible=!0}get style(){return this._style}alignText(){if(!this.style||!this.labelText||!this.views)return;const t=this.views[0];t&&(this.labelText.x=t.width+10+(this._style?.textOffset?.x??0),this.labelText.y=(t.height-this.labelText.height)/2+(this._style?.textOffset?.y??0))}get checked(){return this.active===1}set checked(t){this.switch(t?1:0)}forceCheck(t){this.forceSwitch(t?1:0)}}var si=Object.defineProperty,hi=(s,t,i)=>t in s?si(s,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):s[t]=i,Y=(s,t,i)=>hi(s,typeof t!="symbol"?t+"":t,i);class Qi extends g{constructor(t){super(),Y(this,"_progress",0),Y(this,"options"),Y(this,"bgCircle",new S),Y(this,"fillCircle",new S),Y(this,"innerView",new g),this.options=t,this.addChild(this.innerView),this.innerView.addChild(this.bgCircle,this.fillCircle),this.addBackground(),t.value&&(this.progress=t.value)}addBackground(){const{backgroundColor:t,lineWidth:i,radius:e,backgroundAlpha:h}=this.options;let n=1;h>0&&(n=h),t===void 0&&(n=1e-6),this.bgCircle.circle(0,0,e).stroke({width:i,color:t,alpha:n})}set progress(t){t>100&&(t=100),t<0&&(t=0),this._progress=t;const{lineWidth:i,radius:e,fillColor:h,fillAlpha:n,cap:r}=this.options;if(t===0&&n===0){this.fillCircle.clear();return}const o=0,a=360/100*t;this.fillCircle.clear().arc(0,0,e,(-90+o)*ct,(-90+o+a)*ct).stroke({width:i,color:h,cap:r,alpha:n})}get progress(){return this._progress}}var ni=Object.defineProperty,ri=(s,t,i)=>t in s?ni(s,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):s[t]=i,k=(s,t,i)=>ri(s,typeof t!="symbol"?t+"":t,i);class oi extends g{constructor(t){super(),k(this,"bg"),k(this,"fill"),k(this,"fillMask"),k(this,"progressStart",0),k(this,"_progress",0),k(this,"options"),k(this,"innerView"),k(this,"_view"),this.options=t,this.innerView=new g,this.addChild(this.innerView),t?.bg&&t?.fill&&this.init(t)}init({bg:t,fill:i,fillPaddings:e,progress:h}){this.setBackground(t),this.setFill(i,e),this.progress=h}setBackground(t){this.bg&&this.bg.destroy(),this.options?.nineSliceSprite&&(typeof t=="string"?this.bg=new C({texture:b.from(t),leftWidth:this.options.nineSliceSprite.bg[0],topHeight:this.options.nineSliceSprite.bg[1],rightWidth:this.options.nineSliceSprite.bg[2],bottomHeight:this.options.nineSliceSprite.bg[3]}):t instanceof b?this.bg=new C({texture:t,leftWidth:this.options.nineSliceSprite.bg[0],topHeight:this.options.nineSliceSprite.bg[1],rightWidth:this.options.nineSliceSprite.bg[2],bottomHeight:this.options.nineSliceSprite.bg[3]}):console.warn(`NineSliceSprite can not be used with views set as Container.
|
|
2
2
|
Pass the texture or texture name as instead of the Container extended instance.`)),this.bg||(this.bg=w(t)),this.innerView.addChildAt(this.bg,0)}setFill(t,i){if(this.fill&&this.fill.destroy(),this.bg instanceof V&&t===this.bg){console.warn("Can not use same Sprite instance for bg and fill.");return}this.options?.nineSliceSprite?typeof t=="string"||t instanceof b?this.fill=new C({texture:typeof t=="string"?b.from(t):t,leftWidth:this.options.nineSliceSprite.fill[0],topHeight:this.options.nineSliceSprite.fill[1],rightWidth:this.options.nineSliceSprite.fill[2],bottomHeight:this.options.nineSliceSprite.fill[3]}):(console.warn(`NineSliceSprite can not be used with views set as Container.
|
|
3
3
|
Pass the texture or texture name as instead of the Container extended instance.`),this.fill=w(t)):this.fill=w(t),this.innerView.addChildAt(this.fill,1);const e=i?.left??0,h=i?.top??0;this.fill.x=e,this.fill.y=h,this.fillMask&&(this.fill.mask=null,this.fillMask.destroy());const n=this.fill.width/2,r=this.fill.width/2,o=this.fill.height/2,a=this.fill.height/2;let l=b.WHITE;this.fill instanceof V&&this.fill.texture&&(l=this.fill.texture),this.fillMask=new C({texture:l,leftWidth:n,topHeight:o,rightWidth:r,bottomHeight:a}),this.fillMask.position.copyFrom(this.fill),this.addChild(this.fillMask),this.fill.mask=this.fillMask}validate(t){return t=Math.round(t),t<0?0:t>100?100:t}set progress(t){this._progress=this.validate(t),this.fill&&this.fillMask&&(this.fill.mask=null,this.fillMask.width=this.fill.width/100*(this._progress-this.progressStart),this.fillMask.x=this.progressStart/100*this.fill.width+this.fill.x,this.fillMask.height=this.fill.height,this.fill.mask=this.fillMask)}get progress(){return this._progress}set width(t){if(this.options?.nineSliceSprite){if(this.bg&&(this.bg.width=t),this.fill){const i=this.options.fillPaddings?.left??0,e=this.options.fillPaddings?.right??0;this.fill.width=t-i-e,this.fillMask.width=t-i-e}this.progress=this._progress}else super.width=t}get width(){return super.width}set height(t){if(this.options?.nineSliceSprite){if(this.bg&&(this.bg.height=t),this.fill){const i=this.options.fillPaddings?.top??0,e=this.options.fillPaddings?.bottom??0;this.fill.height=t-i-e,this.fillMask.height=t-i-e}this.progress=this._progress}else super.height=t}get height(){return super.height}setSize(t,i){if(this.options?.nineSliceSprite){if(this.bg&&this.bg.setSize(t,i),this.fill){typeof t=="object"?(i=t.height??t.width,t=t.width):i=i??t;const e=this.options.fillPaddings?.top??0,h=this.options.fillPaddings?.bottom??0,n=this.options.fillPaddings?.left??0,r=this.options.fillPaddings?.right??0;this.fill.setSize(t-n-r,i-e-h),this.fillMask.setSize(t-n-r,i-e-h)}this.progress=this._progress}else super.setSize(t,i)}}var ai=Object.defineProperty,li=(s,t,i)=>t in s?ai(s,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):s[t]=i,m=(s,t,i)=>li(s,typeof t!="symbol"?t+"":t,i);class Pt extends oi{constructor(t){super(t),m(this,"_slider1"),m(this,"_slider2"),m(this,"value1Text"),m(this,"value2Text"),m(this,"_value1"),m(this,"_value2"),m(this,"dragging",0),m(this,"_min",0),m(this,"_max",100),m(this,"_step",1),m(this,"startX"),m(this,"startUpdateValue1"),m(this,"startUpdateValue2"),m(this,"settings"),this.settings=t,this.slider1=t.slider1,this.slider2=t.slider2,this.min=t.min??0,this.max=t.max??100}init(t){super.init(t),this.fill&&(this.fill.eventMode="none")}set slider1(t){if(t&&(this._slider1&&(this.slider1.removeAllListeners(),this.slider1.destroy()),this._slider1=this.createSlider(t),this.settings.showValue&&!this.value1Text)){const i=this.settings.valueTextClass??O;this.value1Text=new i({text:"",style:this.settings.valueTextStyle||{fill:16777215}}),this.value1Text.anchor.set(.5),this.addChild(this.value1Text)}}get slider1(){return this._slider1}set slider2(t){if(t&&(this._slider2&&(this.slider2.removeAllListeners(),this.slider2.destroy()),this._slider2=this.createSlider(t),this.settings.showValue&&!this.value2Text)){const i=this.settings.valueTextClass??O;this.value2Text=new i({text:"",style:this.settings.valueTextStyle||{fill:16777215}}),this.value2Text.anchor.set(.5),this.addChild(this.value2Text)}}get slider2(){return this._slider2}setBackground(t){this.bg&&this.bg.removeAllListeners(),super.setBackground(t),this.activateBG()}activateBG(){this.bg.eventMode="static",this.bg.on("pointerdown",this.startUpdate,this).on("globalpointermove",this.update,this).on("pointerup",this.endUpdate,this).on("pointerupoutside",this.endUpdate,this)}createSlider(t){const i=w(t),e=n=>{this.bg&&(n.currentTarget=this.bg),this.startUpdate(n)};i.eventMode="static",i.on("pointerdown",e).on("pointerup",this.endUpdate,this).on("pointerupoutside",this.endUpdate,this),i.x=i.width/2;const h=new g;return h.addChild(i),i instanceof V&&i.anchor.set(.5),h.y=this.bg?.height?this.bg?.height/2:0,this.addChild(h),h}startUpdate(t){this.dragging=1;const i=t.currentTarget;this.startX=i.parent.worldTransform.applyInverse(t.global).x,this.startUpdateValue1=this._value1,this.startUpdateValue2=this._value2,this.update(t)}endUpdate(){this.dragging&&(this.dragging=0,(this.startX||this.startUpdateValue1!==this._value1||this.startUpdateValue2!==this._value2)&&this.change(),this.startUpdateValue1=null,this.startUpdateValue2=null)}onClick(){this.change()}update(t){const i=t.currentTarget,{x:e}=i.parent.worldTransform.applyInverse(t.global);e!==this.startX&&(this.startX=null)}change(){}set max(t){this._max=t}get max(){return this._max}set min(t){this._min=t}get min(){return this._min}set step(t){this._step=t}get step(){return this._step}}var di=Object.defineProperty,ui=(s,t,i)=>t in s?di(s,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):s[t]=i,tt=(s,t,i)=>ui(s,typeof t!="symbol"?t+"":t,i);class te extends Pt{constructor(t){super(t),tt(this,"sliderOptions"),tt(this,"activeValue"),tt(this,"onChange",new f.Signal),tt(this,"onUpdate",new f.Signal),this.sliderOptions=t,this.setInitialState()}setInitialState(){this.validateValues();const{value1:t,value2:i}=this.sliderOptions;this.updateProgress(t,i),this.value2=i,this.value1=t}updateProgress(t=this.value1,i=this.value2){this.progressStart=(t-this.min)/(this.max-this.min)*100,this.progress=(i-this.min)/(this.max-this.min)*100}validateValues(){this.sliderOptions.value1||(this.sliderOptions.value1=this.min),this.sliderOptions.value2||(this.sliderOptions.value2=this.sliderOptions.max),this.sliderOptions.value2<this.sliderOptions.value1&&(this.sliderOptions.value2=this.sliderOptions.value1),this.sliderOptions.value1<this.sliderOptions.min&&(this.sliderOptions.value1=this.sliderOptions.min),this.sliderOptions.value1>this.sliderOptions.max&&(this.sliderOptions.value1=this.sliderOptions.max),this.sliderOptions.value2>this.sliderOptions.max&&(this.sliderOptions.value2=this.sliderOptions.max)}get value1(){return this._value1}set value1(t){t!==this._value1&&(t<this.min&&(t=this.min),t>this._value2&&(t=this._value2),this._value1=t,this.updateSlider1(),this.onUpdate?.emit(this.value1,this.value2))}get value2(){return this._value2}set value2(t){t!==this._value2&&(t<this._value1&&(t=this._value1),t>this.max&&(t=this.max),this._value2=t,this.updateSlider2(),this.onUpdate?.emit(this.value1,this.value2))}update(t){if(super.update(t),!this.dragging)return;const i=t.currentTarget,{x:e}=i.parent.worldTransform.applyInverse(t.global),h=Math.abs(e-this._slider1.x-this._slider1.width),n=Math.abs(e-this._slider2.x);this.activeValue||(this.slider1&&e<this.slider1.x?this.activeValue="value1":this.slider2&&e>this.slider2.x?this.activeValue="value2":this.activeValue=h<n?"value1":"value2");const r=this.validate(e/this.bg?.width*100);this.activeValue==="value1"?(this.progressStart=r,this.value1=this.min+(this.max-this.min)/100*r,this.updateProgress(this.value1,this.value2)):(this.progress=r,this.value2=this.min+(this.max-this.min)/100*r,this.updateProgress(this.value1,this.value2))}endUpdate(){super.endUpdate(),this.activeValue=null}change(){this.onChange?.emit(this.value1,this.value2)}set slider1(t){super.slider1=t,this.updateSlider1()}get slider1(){return this._slider1}set slider2(t){super.slider2=t,this.updateSlider2()}get slider2(){return this._slider2}updateSlider1(){if(this.updateProgress(this.value1,this.value2),this._slider1.x=this.bg?.width/100*this.progressStart-this._slider1.width/2,this._slider1.y=this.bg?.height/2,this._slider2&&this._slider1.x>this._slider2.x&&(this._slider1.x=this._slider2.x),this.sliderOptions?.showValue){this.value1Text.text=`${Math.round(this.value1)}`;const t=this._slider1.x+this._slider1.width/2,i=this._slider1.y;this.value1Text.x=t+(this.sliderOptions.valueTextOffset?.x??0),this.value1Text.y=i+(this.sliderOptions.valueTextOffset?.y??0)}}updateSlider2(){if(this.updateProgress(this.value1,this.value2),this._slider2.x=this.bg?.width/100*this.progress-this._slider2.width/2,this._slider2.y=this.bg?.height/2,this._slider2.x<this._slider1.x&&(this._slider2.x=this._slider1.x),this.sliderOptions?.showValue){this.value2Text.text=`${Math.round(this.value2)}`;const t=this._slider2.x+this._slider2.width/2,i=this._slider2.y;this.value2Text.x=t+(this.sliderOptions.valueTextOffset?.x??0),this.value2Text.y=i+(this.sliderOptions.valueTextOffset?.y??0)}}set width(t){super.width=t,this.updateSlider1(),this.updateSlider2()}get width(){return super.width}set height(t){super.height=t,this.updateSlider1(),this.updateSlider2()}get height(){return super.height}setSize(t,i){super.setSize(t,i),this.updateSlider1(),this.updateSlider2()}}/*!
|
|
4
4
|
* tweedle.js - v2.1.0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{bl as S,bm as v,bn as U,bo as F,bp as j,bq as q,br as T,ag as H}from"./index-DbQzGLxv.js";let B;function N(s){return B=s,s}function l(){return B}class y{constructor(e,t){this.init(e,t)}init(e,t){this.destination=e,this.source=t||e}connect(e){this.source?.connect(e)}disconnect(){this.source?.disconnect()}destroy(){this.disconnect(),this.destination=null,this.source=null}}class z extends y{constructor(e=0){let t;if(!l().useLegacy){const{audioContext:i}=l().context;t=i.createWaveShaper()}super(t),this._distortion=t,this.amount=e}set amount(e){if(this._amount=e,l().useLegacy)return;const t=e*1e3,i=44100,n=new Float32Array(i),o=Math.PI/180;let r=0,a;for(;r<i;++r)a=r*2/i-1,n[r]=(3+t)*a*20*o/(Math.PI+t*Math.abs(a));this._distortion.curve=n,this._distortion.oversample="4x"}get amount(){return this._amount}destroy(){this._distortion=null,super.destroy()}}class _{static setParamValue(e,t){if(e.setValueAtTime){const i=l().context;e.setValueAtTime(t,i.audioContext.currentTime)}else e.value=t;return t}}const u=class extends y{constructor(s=0,e=0,t=0,i=0,n=0,o=0,r=0,a=0,h=0,d=0){let c=[];const g=[{f:u.F32,type:"lowshelf",gain:s},{f:u.F64,type:"peaking",gain:e},{f:u.F125,type:"peaking",gain:t},{f:u.F250,type:"peaking",gain:i},{f:u.F500,type:"peaking",gain:n},{f:u.F1K,type:"peaking",gain:o},{f:u.F2K,type:"peaking",gain:r},{f:u.F4K,type:"peaking",gain:a},{f:u.F8K,type:"peaking",gain:h},{f:u.F16K,type:"highshelf",gain:d}];l().useLegacy||(c=g.map(f=>{const p=l().context.audioContext.createBiquadFilter();return p.type=f.type,_.setParamValue(p.Q,1),p.frequency.value=f.f,_.setParamValue(p.gain,f.gain),p})),super(c[0],c[c.length-1]),this.bands=c,this.bandsMap={};for(let f=0;f<this.bands.length;f++){const p=this.bands[f];f>0&&this.bands[f-1].connect(p),this.bandsMap[p.frequency.value]=p}}setGain(s,e=0){if(!this.bandsMap[s])throw new Error(`No band found for frequency ${s}`);_.setParamValue(this.bandsMap[s].gain,e)}getGain(s){if(!this.bandsMap[s])throw new Error(`No band found for frequency ${s}`);return this.bandsMap[s].gain.value}set f32(s){this.setGain(u.F32,s)}get f32(){return this.getGain(u.F32)}set f64(s){this.setGain(u.F64,s)}get f64(){return this.getGain(u.F64)}set f125(s){this.setGain(u.F125,s)}get f125(){return this.getGain(u.F125)}set f250(s){this.setGain(u.F250,s)}get f250(){return this.getGain(u.F250)}set f500(s){this.setGain(u.F500,s)}get f500(){return this.getGain(u.F500)}set f1k(s){this.setGain(u.F1K,s)}get f1k(){return this.getGain(u.F1K)}set f2k(s){this.setGain(u.F2K,s)}get f2k(){return this.getGain(u.F2K)}set f4k(s){this.setGain(u.F4K,s)}get f4k(){return this.getGain(u.F4K)}set f8k(s){this.setGain(u.F8K,s)}get f8k(){return this.getGain(u.F8K)}set f16k(s){this.setGain(u.F16K,s)}get f16k(){return this.getGain(u.F16K)}reset(){this.bands.forEach(s=>{_.setParamValue(s.gain,0)})}destroy(){this.bands.forEach(s=>{s.disconnect()}),this.bands=null,this.bandsMap=null}};let m=u;m.F32=32;m.F64=64;m.F125=125;m.F250=250;m.F500=500;m.F1K=1e3;m.F2K=2e3;m.F4K=4e3;m.F8K=8e3;m.F16K=16e3;class Q extends y{constructor(){let e,t;if(!l().useLegacy){const{audioContext:i}=l().context;t=i.createChannelSplitter(),e=i.createChannelMerger(),e.connect(t)}super(e,t),this._merger=e}destroy(){this._merger?.disconnect(),this._merger=null,super.destroy()}}class W extends y{constructor(e=3,t=2,i=!1){super(null),this._seconds=this._clamp(e,1,50),this._decay=this._clamp(t,0,100),this._reverse=i,this._rebuild()}_clamp(e,t,i){return Math.min(i,Math.max(t,e))}get seconds(){return this._seconds}set seconds(e){this._seconds=this._clamp(e,1,50),this._rebuild()}get decay(){return this._decay}set decay(e){this._decay=this._clamp(e,0,100),this._rebuild()}get reverse(){return this._reverse}set reverse(e){this._reverse=e,this._rebuild()}_rebuild(){if(l().useLegacy)return;const{audioContext:e}=l().context,t=e.sampleRate,i=t*this._seconds,n=e.createBuffer(2,i,t),o=n.getChannelData(0),r=n.getChannelData(1);let a;for(let d=0;d<i;d++)a=this._reverse?i-d:d,o[d]=(Math.random()*2-1)*Math.pow(1-a/i,this._decay),r[d]=(Math.random()*2-1)*Math.pow(1-a/i,this._decay);const h=e.createConvolver();h.buffer=n,this.init(h)}}class Y extends y{constructor(e=0){let t,i,n;if(!l().useLegacy){const{audioContext:o}=l().context;o.createStereoPanner?(t=o.createStereoPanner(),n=t):(i=o.createPanner(),i.panningModel="equalpower",n=i)}super(n),this._stereo=t,this._panner=i,this.pan=e}set pan(e){this._pan=e,this._stereo?_.setParamValue(this._stereo.pan,e):this._panner&&this._panner.setPosition(e,0,1-Math.abs(e))}get pan(){return this._pan}destroy(){super.destroy(),this._stereo=null,this._panner=null}}class Z extends y{constructor(){let e,t;if(!l().useLegacy){const{audioContext:i}=l().context;e=i.createMediaStreamDestination(),t=i.createMediaStreamSource(e.stream)}super(e,t),this._stream=e?.stream}get stream(){return this._stream}destroy(){this._stream=null,super.destroy()}}class J extends y{constructor(){let e,t;if(!l().useLegacy){const{audioContext:i}=l().context,n=i.createBiquadFilter(),o=i.createBiquadFilter(),r=i.createBiquadFilter(),a=i.createBiquadFilter();n.type="lowpass",_.setParamValue(n.frequency,2e3),o.type="lowpass",_.setParamValue(o.frequency,2e3),r.type="highpass",_.setParamValue(r.frequency,500),a.type="highpass",_.setParamValue(a.frequency,500),n.connect(o),o.connect(r),r.connect(a),e=n,t=a}super(e,t)}}const ue=Object.freeze(Object.defineProperty({__proto__:null,DistortionFilter:z,EqualizerFilter:m,Filter:y,MonoFilter:Q,ReverbFilter:W,StereoFilter:Y,StreamFilter:Z,TelephoneFilter:J},Symbol.toStringTag,{value:"Module"}));class I extends S{constructor(){super(...arguments),this.speed=1,this.muted=!1,this.volume=1,this.paused=!1}refresh(){this.emit("refresh")}refreshPaused(){this.emit("refreshPaused")}get filters(){return console.warn("HTML Audio does not support filters"),null}set filters(e){console.warn("HTML Audio does not support filters")}get audioContext(){return console.warn("HTML Audio does not support audioContext"),null}toggleMute(){return this.muted=!this.muted,this.refresh(),this.muted}togglePause(){return this.paused=!this.paused,this.refreshPaused(),this.paused}destroy(){this.removeAllListeners()}}let X=0;const C=class extends S{constructor(s){super(),this.id=X++,this.init(s)}set(s,e){if(this[s]===void 0)throw new Error(`Property with name ${s} does not exist.`);switch(s){case"speed":this.speed=e;break;case"volume":this.volume=e;break;case"paused":this.paused=e;break;case"loop":this.loop=e;break;case"muted":this.muted=e;break}return this}get progress(){const{currentTime:s}=this._source;return s/this._duration}get paused(){return this._paused}set paused(s){this._paused=s,this.refreshPaused()}_onPlay(){this._playing=!0}_onPause(){this._playing=!1}init(s){this._playing=!1,this._duration=s.source.duration;const e=this._source=s.source.cloneNode(!1);e.src=s.parent.url,e.onplay=this._onPlay.bind(this),e.onpause=this._onPause.bind(this),s.context.on("refresh",this.refresh,this),s.context.on("refreshPaused",this.refreshPaused,this),this._media=s}_internalStop(){this._source&&this._playing&&(this._source.onended=null,this._source.pause())}stop(){this._internalStop(),this._source&&this.emit("stop")}get speed(){return this._speed}set speed(s){this._speed=s,this.refresh()}get volume(){return this._volume}set volume(s){this._volume=s,this.refresh()}get loop(){return this._loop}set loop(s){this._loop=s,this.refresh()}get muted(){return this._muted}set muted(s){this._muted=s,this.refresh()}get filters(){return console.warn("HTML Audio does not support filters"),null}set filters(s){console.warn("HTML Audio does not support filters")}refresh(){const s=this._media.context,e=this._media.parent;this._source.loop=this._loop||e.loop;const t=s.volume*(s.muted?0:1),i=e.volume*(e.muted?0:1),n=this._volume*(this._muted?0:1);this._source.volume=n*t*i,this._source.playbackRate=this._speed*s.speed*e.speed}refreshPaused(){const s=this._media.context,e=this._media.parent,t=this._paused||e.paused||s.paused;t!==this._pausedReal&&(this._pausedReal=t,t?(this._internalStop(),this.emit("paused")):(this.emit("resumed"),this.play({start:this._source.currentTime,end:this._end,volume:this._volume,speed:this._speed,loop:this._loop})),this.emit("pause",t))}play(s){const{start:e,end:t,speed:i,loop:n,volume:o,muted:r}=s;t&&console.assert(t>e,"End time is before start time"),this._speed=i,this._volume=o,this._loop=!!n,this._muted=r,this.refresh(),this.loop&&t!==null&&(console.warn('Looping not support when specifying an "end" time'),this.loop=!1),this._start=e,this._end=t||this._duration,this._start=Math.max(0,this._start-C.PADDING),this._end=Math.min(this._end+C.PADDING,this._duration),this._source.onloadedmetadata=()=>{this._source&&(this._source.currentTime=e,this._source.onloadedmetadata=null,this.emit("progress",e/this._duration,this._duration),v.shared.add(this._onUpdate,this))},this._source.onended=this._onComplete.bind(this),this._source.play(),this.emit("start")}_onUpdate(){this.emit("progress",this.progress,this._duration),this._source.currentTime>=this._end&&!this._source.loop&&this._onComplete()}_onComplete(){v.shared.remove(this._onUpdate,this),this._internalStop(),this.emit("progress",1,this._duration),this.emit("end",this)}destroy(){v.shared.remove(this._onUpdate,this),this.removeAllListeners();const s=this._source;s&&(s.onended=null,s.onplay=null,s.onpause=null,this._internalStop()),this._source=null,this._speed=1,this._volume=1,this._loop=!1,this._end=null,this._start=0,this._duration=0,this._playing=!1,this._pausedReal=!1,this._paused=!1,this._muted=!1,this._media&&(this._media.context.off("refresh",this.refresh,this),this._media.context.off("refreshPaused",this.refreshPaused,this),this._media=null)}toString(){return`[HTMLAudioInstance id=${this.id}]`}};let E=C;E.PADDING=.1;class G extends S{init(e){this.parent=e,this._source=e.options.source||new Audio,e.url&&(this._source.src=e.url)}create(){return new E(this)}get isPlayable(){return!!this._source&&this._source.readyState===4}get duration(){return this._source.duration}get context(){return this.parent.context}get filters(){return null}set filters(e){console.warn("HTML Audio does not support filters")}destroy(){this.removeAllListeners(),this.parent=null,this._source&&(this._source.src="",this._source.load(),this._source=null)}get source(){return this._source}load(e){const t=this._source,i=this.parent;if(t.readyState===4){i.isLoaded=!0;const h=i.autoPlayStart();e&&setTimeout(()=>{e(null,i,h)},0);return}if(!i.url){e(new Error("sound.url or sound.source must be set"));return}t.src=i.url;const n=()=>{a(),i.isLoaded=!0;const h=i.autoPlayStart();e&&e(null,i,h)},o=()=>{a(),e&&e(new Error("Sound loading has been aborted"))},r=()=>{a();const h=`Failed to load audio element (code: ${t.error.code})`;e?e(new Error(h)):console.error(h)},a=()=>{t.removeEventListener("canplaythrough",n),t.removeEventListener("load",n),t.removeEventListener("abort",o),t.removeEventListener("error",r)};t.addEventListener("canplaythrough",n,!1),t.addEventListener("load",n,!1),t.addEventListener("abort",o,!1),t.addEventListener("error",r,!1),t.load()}}const he=Object.freeze(Object.defineProperty({__proto__:null,HTMLAudioContext:I,HTMLAudioInstance:E,HTMLAudioMedia:G},Symbol.toStringTag,{value:"Module"}));class ee{constructor(e,t){this.parent=e,Object.assign(this,t),this.duration=this.end-this.start,console.assert(this.duration>0,"End time must be after start time")}play(e){return this.parent.play({complete:e,speed:this.speed||this.parent.speed,end:this.end,start:this.start,loop:this.loop})}destroy(){this.parent=null}}const P=["ogg","oga","opus","m4a","mp3","mpeg","wav","aiff","wma","mid","caf"],O=["audio/mpeg","audio/ogg"],A={};function R(s){const e={m4a:"audio/mp4",oga:"audio/ogg",opus:'audio/ogg; codecs="opus"',caf:'audio/x-caf; codecs="opus"',...s||{}},t=document.createElement("audio"),i={},n=/^no$/;P.forEach(o=>{const r=t.canPlayType(`audio/${o}`).replace(n,""),a=e[o]?t.canPlayType(e[o]).replace(n,""):"";i[o]=!!r||!!a}),Object.assign(A,i)}R();let te=0;class V extends S{constructor(e){super(),this.id=te++,this._media=null,this._paused=!1,this._muted=!1,this._elapsed=0,this.init(e)}set(e,t){if(this[e]===void 0)throw new Error(`Property with name ${e} does not exist.`);switch(e){case"speed":this.speed=t;break;case"volume":this.volume=t;break;case"muted":this.muted=t;break;case"loop":this.loop=t;break;case"paused":this.paused=t;break}return this}stop(){this._source&&(this._internalStop(),this.emit("stop"))}get speed(){return this._speed}set speed(e){this._speed=e,this.refresh(),this._update(!0)}get volume(){return this._volume}set volume(e){this._volume=e,this.refresh()}get muted(){return this._muted}set muted(e){this._muted=e,this.refresh()}get loop(){return this._loop}set loop(e){this._loop=e,this.refresh()}get filters(){return this._filters}set filters(e){this._filters&&(this._filters?.filter(t=>t).forEach(t=>t.disconnect()),this._filters=null,this._source.connect(this._gain)),this._filters=e?.length?e.slice(0):null,this.refresh()}refresh(){if(!this._source)return;const e=this._media.context,t=this._media.parent;this._source.loop=this._loop||t.loop;const i=e.volume*(e.muted?0:1),n=t.volume*(t.muted?0:1),o=this._volume*(this._muted?0:1);_.setParamValue(this._gain.gain,o*n*i),_.setParamValue(this._source.playbackRate,this._speed*t.speed*e.speed),this.applyFilters()}applyFilters(){if(this._filters?.length){this._source.disconnect();let e=this._source;this._filters.forEach(t=>{e.connect(t.destination),e=t}),e.connect(this._gain)}}refreshPaused(){const e=this._media.context,t=this._media.parent,i=this._paused||t.paused||e.paused;i!==this._pausedReal&&(this._pausedReal=i,i?(this._internalStop(),this.emit("paused")):(this.emit("resumed"),this.play({start:this._elapsed%this._duration,end:this._end,speed:this._speed,loop:this._loop,volume:this._volume})),this.emit("pause",i))}play(e){const{start:t,end:i,speed:n,loop:o,volume:r,muted:a,filters:h}=e;i&&console.assert(i>t,"End time is before start time"),this._paused=!1;const{source:d,gain:c}=this._media.nodes.cloneBufferSource();this._source=d,this._gain=c,this._speed=n,this._volume=r,this._loop=!!o,this._muted=a,this._filters=h,this.refresh();const g=this._source.buffer.duration;this._duration=g,this._end=i,this._lastUpdate=this._now(),this._elapsed=t,this._source.onended=this._onComplete.bind(this),this._loop?(this._source.loopEnd=i,this._source.loopStart=t,this._source.start(0,t)):i?this._source.start(0,t,i-t):this._source.start(0,t),this.emit("start"),this._update(!0),this.enableTicker(!0)}enableTicker(e){v.shared.remove(this._updateListener,this),e&&v.shared.add(this._updateListener,this)}get progress(){return this._progress}get paused(){return this._paused}set paused(e){this._paused=e,this.refreshPaused()}destroy(){this.removeAllListeners(),this._internalStop(),this._gain&&(this._gain.disconnect(),this._gain=null),this._media&&(this._media.context.events.off("refresh",this.refresh,this),this._media.context.events.off("refreshPaused",this.refreshPaused,this),this._media=null),this._filters?.forEach(e=>e.disconnect()),this._filters=null,this._end=null,this._speed=1,this._volume=1,this._loop=!1,this._elapsed=0,this._duration=0,this._paused=!1,this._muted=!1,this._pausedReal=!1}toString(){return`[WebAudioInstance id=${this.id}]`}_now(){return this._media.context.audioContext.currentTime}_updateListener(){this._update()}_update(e=!1){if(this._source){const t=this._now(),i=t-this._lastUpdate;if(i>0||e){const n=this._source.playbackRate.value;this._elapsed+=i*n,this._lastUpdate=t;const o=this._duration;let r;if(this._source.loopStart){const a=this._source.loopEnd-this._source.loopStart;r=(this._source.loopStart+this._elapsed%a)/o}else r=this._elapsed%o/o;this._progress=r,this.emit("progress",this._progress,o)}}}init(e){this._media=e,e.context.events.on("refresh",this.refresh,this),e.context.events.on("refreshPaused",this.refreshPaused,this)}_internalStop(){if(this._source){this.enableTicker(!1),this._source.onended=null,this._source.stop(0),this._source.disconnect();try{this._source.buffer=null}catch(e){console.warn("Failed to set AudioBufferSourceNode.buffer to null:",e)}this._source=null}}_onComplete(){if(this._source){this.enableTicker(!1),this._source.onended=null,this._source.disconnect();try{this._source.buffer=null}catch(e){console.warn("Failed to set AudioBufferSourceNode.buffer to null:",e)}}this._source=null,this._progress=1,this.emit("progress",1,this._duration),this.emit("end",this)}}class K{constructor(e,t){this._output=t,this._input=e}get destination(){return this._input}get filters(){return this._filters}set filters(e){if(this._filters&&(this._filters.forEach(t=>{t&&t.disconnect()}),this._filters=null,this._input.connect(this._output)),e&&e.length){this._filters=e.slice(0),this._input.disconnect();let t=null;e.forEach(i=>{t===null?this._input.connect(i.destination):t.connect(i.destination),t=i}),t.connect(this._output)}}destroy(){this.filters=null,this._input=null,this._output=null}}const $=class extends K{constructor(s){const e=s.audioContext,t=e.createBufferSource(),i=e.createGain(),n=e.createAnalyser();t.connect(n),n.connect(i),i.connect(s.destination),super(n,i),this.context=s,this.bufferSource=t,this.gain=i,this.analyser=n}get script(){return this._script||(this._script=this.context.audioContext.createScriptProcessor($.BUFFER_SIZE),this._script.connect(this.context.destination)),this._script}destroy(){super.destroy(),this.bufferSource.disconnect(),this._script&&this._script.disconnect(),this.gain.disconnect(),this.analyser.disconnect(),this.bufferSource=null,this._script=null,this.gain=null,this.analyser=null,this.context=null}cloneBufferSource(){const s=this.bufferSource,e=this.context.audioContext.createBufferSource();e.buffer=s.buffer,_.setParamValue(e.playbackRate,s.playbackRate.value),e.loop=s.loop;const t=this.context.audioContext.createGain();return e.connect(t),t.connect(this.destination),{source:e,gain:t}}get bufferSize(){return this.script.bufferSize}};let M=$;M.BUFFER_SIZE=0;class L{init(e){this.parent=e,this._nodes=new M(this.context),this._source=this._nodes.bufferSource,this.source=e.options.source}destroy(){this.parent=null,this._nodes.destroy(),this._nodes=null;try{this._source.buffer=null}catch(e){console.warn("Failed to set AudioBufferSourceNode.buffer to null:",e)}this._source=null,this.source=null}create(){return new V(this)}get context(){return this.parent.context}get isPlayable(){return!!this._source&&!!this._source.buffer}get filters(){return this._nodes.filters}set filters(e){this._nodes.filters=e}get duration(){return console.assert(this.isPlayable,"Sound not yet playable, no duration"),this._source.buffer.duration}get buffer(){return this._source.buffer}set buffer(e){this._source.buffer=e}get nodes(){return this._nodes}load(e){this.source?this._decode(this.source,e):this.parent.url?this._loadUrl(e):e?e(new Error("sound.url or sound.source must be set")):console.error("sound.url or sound.source must be set")}async _loadUrl(e){const t=this.parent.url,i=await U.get().fetch(t);this._decode(await i.arrayBuffer(),e)}_decode(e,t){const i=(n,o)=>{if(n)t&&t(n);else{this.parent.isLoaded=!0,this.buffer=o;const r=this.parent.autoPlayStart();t&&t(null,this.parent,r)}};e instanceof AudioBuffer?i(null,e):this.parent.context.decode(e,i)}}const x=class{static from(s){let e={};typeof s=="string"?e.url=s:s instanceof ArrayBuffer||s instanceof AudioBuffer||s instanceof HTMLAudioElement?e.source=s:Array.isArray(s)?e.url=s:e=s,e={autoPlay:!1,singleInstance:!1,url:null,source:null,preload:!1,volume:1,speed:1,complete:null,loaded:null,loop:!1,...e},Object.freeze(e);const t=l().useLegacy?new G:new L;return new x(t,e)}constructor(s,e){this.media=s,this.options=e,this._instances=[],this._sprites={},this.media.init(this);const t=e.complete;this._autoPlayOptions=t?{complete:t}:null,this.isLoaded=!1,this._preloadQueue=null,this.isPlaying=!1,this.autoPlay=e.autoPlay,this.singleInstance=e.singleInstance,this.preload=e.preload||this.autoPlay,this.url=Array.isArray(e.url)?this.preferUrl(e.url):e.url,this.speed=e.speed,this.volume=e.volume,this.loop=e.loop,e.sprites&&this.addSprites(e.sprites),this.preload&&this._preload(e.loaded)}preferUrl(s){const[e]=s.map(t=>({url:t,ext:F.extname(t).slice(1)})).filter(({ext:t})=>A[t]).sort((t,i)=>P.indexOf(t.ext)-P.indexOf(i.ext));if(!e)throw new Error("No supported file type found");return e.url}get context(){return l().context}pause(){return this.isPlaying=!1,this.paused=!0,this}resume(){return this.isPlaying=this._instances.length>0,this.paused=!1,this}get paused(){return this._paused}set paused(s){this._paused=s,this.refreshPaused()}get speed(){return this._speed}set speed(s){this._speed=s,this.refresh()}get filters(){return this.media.filters}set filters(s){this.media.filters=s}addSprites(s,e){if(typeof s=="object"){const i={};for(const n in s)i[n]=this.addSprites(n,s[n]);return i}console.assert(!this._sprites[s],`Alias ${s} is already taken`);const t=new ee(this,e);return this._sprites[s]=t,t}destroy(){this._removeInstances(),this.removeSprites(),this.media.destroy(),this.media=null,this._sprites=null,this._instances=null}removeSprites(s){if(s){const e=this._sprites[s];e!==void 0&&(e.destroy(),delete this._sprites[s])}else for(const e in this._sprites)this.removeSprites(e);return this}get isPlayable(){return this.isLoaded&&this.media&&this.media.isPlayable}stop(){if(!this.isPlayable)return this.autoPlay=!1,this._autoPlayOptions=null,this;this.isPlaying=!1;for(let s=this._instances.length-1;s>=0;s--)this._instances[s].stop();return this}play(s,e){let t;if(typeof s=="string"?t={sprite:s,loop:this.loop,complete:e}:typeof s=="function"?(t={},t.complete=s):t=s,t={complete:null,loaded:null,sprite:null,end:null,start:0,volume:1,speed:1,muted:!1,loop:!1,...t||{}},t.sprite){const n=t.sprite;console.assert(!!this._sprites[n],`Alias ${n} is not available`);const o=this._sprites[n];t.start=o.start+(t.start||0),t.end=o.end,t.speed=o.speed||1,t.loop=o.loop||t.loop,delete t.sprite}if(t.offset&&(t.start=t.offset),!this.isLoaded)return this._preloadQueue?new Promise(n=>{this._preloadQueue.push(()=>{n(this.play(t))})}):(this._preloadQueue=[],this.autoPlay=!0,this._autoPlayOptions=t,new Promise((n,o)=>{this._preload((r,a,h)=>{this._preloadQueue.forEach(d=>d()),this._preloadQueue=null,r?o(r):(t.loaded&&t.loaded(r,a,h),n(h))})}));(this.singleInstance||t.singleInstance)&&this._removeInstances();const i=this._createInstance();return this._instances.push(i),this.isPlaying=!0,i.once("end",()=>{t.complete&&t.complete(this),this._onComplete(i)}),i.once("stop",()=>{this._onComplete(i)}),i.play(t),i}refresh(){const s=this._instances.length;for(let e=0;e<s;e++)this._instances[e].refresh()}refreshPaused(){const s=this._instances.length;for(let e=0;e<s;e++)this._instances[e].refreshPaused()}get volume(){return this._volume}set volume(s){this._volume=s,this.refresh()}get muted(){return this._muted}set muted(s){this._muted=s,this.refresh()}get loop(){return this._loop}set loop(s){this._loop=s,this.refresh()}_preload(s){this.media.load(s)}get instances(){return this._instances}get sprites(){return this._sprites}get duration(){return this.media.duration}autoPlayStart(){let s;return this.autoPlay&&(s=this.play(this._autoPlayOptions)),s}_removeInstances(){for(let s=this._instances.length-1;s>=0;s--)this._poolInstance(this._instances[s]);this._instances.length=0}_onComplete(s){if(this._instances){const e=this._instances.indexOf(s);e>-1&&this._instances.splice(e,1),this.isPlaying=this._instances.length>0}this._poolInstance(s)}_createInstance(){if(x._pool.length>0){const s=x._pool.pop();return s.init(this.media),s}return this.media.create()}_poolInstance(s){s.destroy(),x._pool.indexOf(s)<0&&x._pool.push(s)}};let w=x;w._pool=[];class b extends K{constructor(){const e=window,t=new b.AudioContext,i=t.createDynamicsCompressor(),n=t.createAnalyser();n.connect(i),i.connect(t.destination),super(n,i),this.autoPause=!0,this._ctx=t,this._offlineCtx=new b.OfflineAudioContext(1,2,e.OfflineAudioContext?Math.max(8e3,Math.min(96e3,t.sampleRate)):44100),this.compressor=i,this.analyser=n,this.events=new S,this.volume=1,this.speed=1,this.muted=!1,this.paused=!1,this._locked=t.state==="suspended"&&("ontouchstart"in globalThis||"onclick"in globalThis),this._locked&&(this._unlock(),this._unlock=this._unlock.bind(this),document.addEventListener("mousedown",this._unlock,!0),document.addEventListener("touchstart",this._unlock,!0),document.addEventListener("touchend",this._unlock,!0)),this.onFocus=this.onFocus.bind(this),this.onBlur=this.onBlur.bind(this),globalThis.addEventListener("focus",this.onFocus),globalThis.addEventListener("blur",this.onBlur)}onFocus(){if(!this.autoPause)return;const e=this._ctx.state;(e==="suspended"||e==="interrupted"||!this._locked)&&(this.paused=this._pausedOnBlur,this.refreshPaused())}onBlur(){this.autoPause&&(this._locked||(this._pausedOnBlur=this._paused,this.paused=!0,this.refreshPaused()))}_unlock(){this._locked&&(this.playEmptySound(),this._ctx.state==="running"&&(document.removeEventListener("mousedown",this._unlock,!0),document.removeEventListener("touchend",this._unlock,!0),document.removeEventListener("touchstart",this._unlock,!0),this._locked=!1))}playEmptySound(){const e=this._ctx.createBufferSource();e.buffer=this._ctx.createBuffer(1,1,22050),e.connect(this._ctx.destination),e.start(0,0,0),e.context.state==="suspended"&&e.context.resume()}static get AudioContext(){const e=window;return e.AudioContext||e.webkitAudioContext||null}static get OfflineAudioContext(){const e=window;return e.OfflineAudioContext||e.webkitOfflineAudioContext||null}destroy(){super.destroy();const e=this._ctx;typeof e.close<"u"&&e.close(),globalThis.removeEventListener("focus",this.onFocus),globalThis.removeEventListener("blur",this.onBlur),this.events.removeAllListeners(),this.analyser.disconnect(),this.compressor.disconnect(),this.analyser=null,this.compressor=null,this.events=null,this._offlineCtx=null,this._ctx=null}get audioContext(){return this._ctx}get offlineContext(){return this._offlineCtx}set paused(e){e&&this._ctx.state==="running"?this._ctx.suspend():!e&&this._ctx.state==="suspended"&&this._ctx.resume(),this._paused=e}get paused(){return this._paused}refresh(){this.events.emit("refresh")}refreshPaused(){this.events.emit("refreshPaused")}toggleMute(){return this.muted=!this.muted,this.refresh(),this.muted}togglePause(){return this.paused=!this.paused,this.refreshPaused(),this._paused}decode(e,t){const i=o=>{t(new Error(o?.message||"Unable to decode file"))},n=this._offlineCtx.decodeAudioData(e,o=>{t(null,o)},i);n&&n.catch(i)}}class se{constructor(){this.init()}init(){return this.supported&&(this._webAudioContext=new b),this._htmlAudioContext=new I,this._sounds={},this.useLegacy=!this.supported,this}get context(){return this._context}get filtersAll(){return this.useLegacy?[]:this._context.filters}set filtersAll(e){this.useLegacy||(this._context.filters=e)}get supported(){return b.AudioContext!==null}add(e,t){if(typeof e=="object"){const o={};for(const r in e){const a=this._getOptions(e[r],t);o[r]=this.add(r,a)}return o}if(console.assert(!this._sounds[e],`Sound with alias ${e} already exists.`),t instanceof w)return this._sounds[e]=t,t;const i=this._getOptions(t),n=w.from(i);return this._sounds[e]=n,n}_getOptions(e,t){let i;return typeof e=="string"?i={url:e}:Array.isArray(e)?i={url:e}:e instanceof ArrayBuffer||e instanceof AudioBuffer||e instanceof HTMLAudioElement?i={source:e}:i=e,i={...i,...t||{}},i}get useLegacy(){return this._useLegacy}set useLegacy(e){this._useLegacy=e,this._context=!e&&this.supported?this._webAudioContext:this._htmlAudioContext}get disableAutoPause(){return!this._webAudioContext.autoPause}set disableAutoPause(e){this._webAudioContext.autoPause=!e}remove(e){return this.exists(e,!0),this._sounds[e].destroy(),delete this._sounds[e],this}get volumeAll(){return this._context.volume}set volumeAll(e){this._context.volume=e,this._context.refresh()}get speedAll(){return this._context.speed}set speedAll(e){this._context.speed=e,this._context.refresh()}togglePauseAll(){return this._context.togglePause()}pauseAll(){return this._context.paused=!0,this._context.refreshPaused(),this}resumeAll(){return this._context.paused=!1,this._context.refreshPaused(),this}toggleMuteAll(){return this._context.toggleMute()}muteAll(){return this._context.muted=!0,this._context.refresh(),this}unmuteAll(){return this._context.muted=!1,this._context.refresh(),this}removeAll(){for(const e in this._sounds)this._sounds[e].destroy(),delete this._sounds[e];return this}stopAll(){for(const e in this._sounds)this._sounds[e].stop();return this}exists(e,t=!1){const i=!!this._sounds[e];return t&&console.assert(i,`No sound matching alias '${e}'.`),i}isPlaying(){for(const e in this._sounds)if(this._sounds[e].isPlaying)return!0;return!1}find(e){return this.exists(e,!0),this._sounds[e]}play(e,t){return this.find(e).play(t)}stop(e){return this.find(e).stop()}pause(e){return this.find(e).pause()}resume(e){return this.find(e).resume()}volume(e,t){const i=this.find(e);return t!==void 0&&(i.volume=t),i.volume}speed(e,t){const i=this.find(e);return t!==void 0&&(i.speed=t),i.speed}duration(e){return this.find(e).duration}close(){return this.removeAll(),this._sounds=null,this._webAudioContext&&(this._webAudioContext.destroy(),this._webAudioContext=null),this._htmlAudioContext&&(this._htmlAudioContext.destroy(),this._htmlAudioContext=null),this._context=null,this}}let D=0;function ie(s,e){const t=`alias${D++}`;return l().add(t,{url:s,preload:!0,autoPlay:!0,loaded:i=>{i&&(console.error(i),l().remove(t),e&&e(i))},complete:()=>{l().remove(t),e&&e(null)}}),t}function ne(s,e){const t=document.createElement("canvas");e={width:512,height:128,fill:"black",...e||{}},t.width=e.width,t.height=e.height;const i=new j({resource:t});if(!(s.media instanceof L))return i;const n=s.media;console.assert(!!n.buffer,"No buffer found, load first");const o=t.getContext("2d");o.fillStyle=e.fill;const r=n.buffer.getChannelData(0),a=Math.ceil(r.length/e.width),h=e.height/2;for(let d=0;d<e.width;d++){let c=1,g=-1;for(let f=0;f<a;f++){const p=r[d*a+f];p<c&&(c=p),p>g&&(g=p)}o.fillRect(d,(1+c)*h,1,Math.max(1,(g-c)*h))}return i}function oe(s=200,e=1){const t=w.from({singleInstance:!0});if(!(t.media instanceof L))return t;const i=t.media,n=t.context,o=1,r=48e3,a=2,h=n.audioContext.createBuffer(o,e*r,r),d=h.getChannelData(0);for(let c=0;c<d.length;c++){const g=c/h.sampleRate,f=s*g*2*Math.PI;d[c]=Math.sin(f)*a}return i.buffer=h,t.isLoaded=!0,t}const le=Object.freeze(Object.defineProperty({__proto__:null,get PLAY_ID(){return D},extensions:P,mimes:O,playOnce:ie,render:ne,sineTone:oe,supported:A,validateFormats:R},Symbol.toStringTag,{value:"Module"})),de=Object.freeze(Object.defineProperty({__proto__:null,WebAudioContext:b,WebAudioInstance:V,WebAudioMedia:L,WebAudioNodes:M,WebAudioUtils:_},Symbol.toStringTag,{value:"Module"})),k=s=>{const e=s.src;let t=s?.alias?.[0];return(!t||s.src===t)&&(t=F.basename(e,F.extname(e))),t},re={extension:T.Asset,detection:{test:async()=>!0,add:async s=>[...s,...P.filter(e=>A[e])],remove:async s=>s.filter(e=>s.includes(e))},loader:{name:"sound",extension:{type:[T.LoadParser],priority:q.High},test(s){const e=F.extname(s).slice(1);return!!A[e]||O.some(t=>s.startsWith(`data:${t}`))},async load(s,e){const t=await new Promise((i,n)=>w.from({...e.data,url:s,preload:!0,loaded(o,r){o?n(o):i(r),e.data?.loaded?.(o,r)}}));return l().add(k(e),t),t},async unload(s,e){l().remove(k(e))}}};H.add(re);const ce=N(new se);export{y as Filter,K as Filterable,w as Sound,se as SoundLibrary,ee as SoundSprite,ue as filters,he as htmlaudio,ce as sound,re as soundAsset,le as utils,de as webaudio};
|
|
1
|
+
import{bl as S,bm as v,bn as U,bo as F,bp as j,bq as q,br as T,ag as H}from"./index-BvKfaQa-.js";let B;function N(s){return B=s,s}function l(){return B}class y{constructor(e,t){this.init(e,t)}init(e,t){this.destination=e,this.source=t||e}connect(e){this.source?.connect(e)}disconnect(){this.source?.disconnect()}destroy(){this.disconnect(),this.destination=null,this.source=null}}class z extends y{constructor(e=0){let t;if(!l().useLegacy){const{audioContext:i}=l().context;t=i.createWaveShaper()}super(t),this._distortion=t,this.amount=e}set amount(e){if(this._amount=e,l().useLegacy)return;const t=e*1e3,i=44100,n=new Float32Array(i),o=Math.PI/180;let r=0,a;for(;r<i;++r)a=r*2/i-1,n[r]=(3+t)*a*20*o/(Math.PI+t*Math.abs(a));this._distortion.curve=n,this._distortion.oversample="4x"}get amount(){return this._amount}destroy(){this._distortion=null,super.destroy()}}class _{static setParamValue(e,t){if(e.setValueAtTime){const i=l().context;e.setValueAtTime(t,i.audioContext.currentTime)}else e.value=t;return t}}const u=class extends y{constructor(s=0,e=0,t=0,i=0,n=0,o=0,r=0,a=0,h=0,d=0){let c=[];const g=[{f:u.F32,type:"lowshelf",gain:s},{f:u.F64,type:"peaking",gain:e},{f:u.F125,type:"peaking",gain:t},{f:u.F250,type:"peaking",gain:i},{f:u.F500,type:"peaking",gain:n},{f:u.F1K,type:"peaking",gain:o},{f:u.F2K,type:"peaking",gain:r},{f:u.F4K,type:"peaking",gain:a},{f:u.F8K,type:"peaking",gain:h},{f:u.F16K,type:"highshelf",gain:d}];l().useLegacy||(c=g.map(f=>{const p=l().context.audioContext.createBiquadFilter();return p.type=f.type,_.setParamValue(p.Q,1),p.frequency.value=f.f,_.setParamValue(p.gain,f.gain),p})),super(c[0],c[c.length-1]),this.bands=c,this.bandsMap={};for(let f=0;f<this.bands.length;f++){const p=this.bands[f];f>0&&this.bands[f-1].connect(p),this.bandsMap[p.frequency.value]=p}}setGain(s,e=0){if(!this.bandsMap[s])throw new Error(`No band found for frequency ${s}`);_.setParamValue(this.bandsMap[s].gain,e)}getGain(s){if(!this.bandsMap[s])throw new Error(`No band found for frequency ${s}`);return this.bandsMap[s].gain.value}set f32(s){this.setGain(u.F32,s)}get f32(){return this.getGain(u.F32)}set f64(s){this.setGain(u.F64,s)}get f64(){return this.getGain(u.F64)}set f125(s){this.setGain(u.F125,s)}get f125(){return this.getGain(u.F125)}set f250(s){this.setGain(u.F250,s)}get f250(){return this.getGain(u.F250)}set f500(s){this.setGain(u.F500,s)}get f500(){return this.getGain(u.F500)}set f1k(s){this.setGain(u.F1K,s)}get f1k(){return this.getGain(u.F1K)}set f2k(s){this.setGain(u.F2K,s)}get f2k(){return this.getGain(u.F2K)}set f4k(s){this.setGain(u.F4K,s)}get f4k(){return this.getGain(u.F4K)}set f8k(s){this.setGain(u.F8K,s)}get f8k(){return this.getGain(u.F8K)}set f16k(s){this.setGain(u.F16K,s)}get f16k(){return this.getGain(u.F16K)}reset(){this.bands.forEach(s=>{_.setParamValue(s.gain,0)})}destroy(){this.bands.forEach(s=>{s.disconnect()}),this.bands=null,this.bandsMap=null}};let m=u;m.F32=32;m.F64=64;m.F125=125;m.F250=250;m.F500=500;m.F1K=1e3;m.F2K=2e3;m.F4K=4e3;m.F8K=8e3;m.F16K=16e3;class Q extends y{constructor(){let e,t;if(!l().useLegacy){const{audioContext:i}=l().context;t=i.createChannelSplitter(),e=i.createChannelMerger(),e.connect(t)}super(e,t),this._merger=e}destroy(){this._merger?.disconnect(),this._merger=null,super.destroy()}}class W extends y{constructor(e=3,t=2,i=!1){super(null),this._seconds=this._clamp(e,1,50),this._decay=this._clamp(t,0,100),this._reverse=i,this._rebuild()}_clamp(e,t,i){return Math.min(i,Math.max(t,e))}get seconds(){return this._seconds}set seconds(e){this._seconds=this._clamp(e,1,50),this._rebuild()}get decay(){return this._decay}set decay(e){this._decay=this._clamp(e,0,100),this._rebuild()}get reverse(){return this._reverse}set reverse(e){this._reverse=e,this._rebuild()}_rebuild(){if(l().useLegacy)return;const{audioContext:e}=l().context,t=e.sampleRate,i=t*this._seconds,n=e.createBuffer(2,i,t),o=n.getChannelData(0),r=n.getChannelData(1);let a;for(let d=0;d<i;d++)a=this._reverse?i-d:d,o[d]=(Math.random()*2-1)*Math.pow(1-a/i,this._decay),r[d]=(Math.random()*2-1)*Math.pow(1-a/i,this._decay);const h=e.createConvolver();h.buffer=n,this.init(h)}}class Y extends y{constructor(e=0){let t,i,n;if(!l().useLegacy){const{audioContext:o}=l().context;o.createStereoPanner?(t=o.createStereoPanner(),n=t):(i=o.createPanner(),i.panningModel="equalpower",n=i)}super(n),this._stereo=t,this._panner=i,this.pan=e}set pan(e){this._pan=e,this._stereo?_.setParamValue(this._stereo.pan,e):this._panner&&this._panner.setPosition(e,0,1-Math.abs(e))}get pan(){return this._pan}destroy(){super.destroy(),this._stereo=null,this._panner=null}}class Z extends y{constructor(){let e,t;if(!l().useLegacy){const{audioContext:i}=l().context;e=i.createMediaStreamDestination(),t=i.createMediaStreamSource(e.stream)}super(e,t),this._stream=e?.stream}get stream(){return this._stream}destroy(){this._stream=null,super.destroy()}}class J extends y{constructor(){let e,t;if(!l().useLegacy){const{audioContext:i}=l().context,n=i.createBiquadFilter(),o=i.createBiquadFilter(),r=i.createBiquadFilter(),a=i.createBiquadFilter();n.type="lowpass",_.setParamValue(n.frequency,2e3),o.type="lowpass",_.setParamValue(o.frequency,2e3),r.type="highpass",_.setParamValue(r.frequency,500),a.type="highpass",_.setParamValue(a.frequency,500),n.connect(o),o.connect(r),r.connect(a),e=n,t=a}super(e,t)}}const ue=Object.freeze(Object.defineProperty({__proto__:null,DistortionFilter:z,EqualizerFilter:m,Filter:y,MonoFilter:Q,ReverbFilter:W,StereoFilter:Y,StreamFilter:Z,TelephoneFilter:J},Symbol.toStringTag,{value:"Module"}));class I extends S{constructor(){super(...arguments),this.speed=1,this.muted=!1,this.volume=1,this.paused=!1}refresh(){this.emit("refresh")}refreshPaused(){this.emit("refreshPaused")}get filters(){return console.warn("HTML Audio does not support filters"),null}set filters(e){console.warn("HTML Audio does not support filters")}get audioContext(){return console.warn("HTML Audio does not support audioContext"),null}toggleMute(){return this.muted=!this.muted,this.refresh(),this.muted}togglePause(){return this.paused=!this.paused,this.refreshPaused(),this.paused}destroy(){this.removeAllListeners()}}let X=0;const C=class extends S{constructor(s){super(),this.id=X++,this.init(s)}set(s,e){if(this[s]===void 0)throw new Error(`Property with name ${s} does not exist.`);switch(s){case"speed":this.speed=e;break;case"volume":this.volume=e;break;case"paused":this.paused=e;break;case"loop":this.loop=e;break;case"muted":this.muted=e;break}return this}get progress(){const{currentTime:s}=this._source;return s/this._duration}get paused(){return this._paused}set paused(s){this._paused=s,this.refreshPaused()}_onPlay(){this._playing=!0}_onPause(){this._playing=!1}init(s){this._playing=!1,this._duration=s.source.duration;const e=this._source=s.source.cloneNode(!1);e.src=s.parent.url,e.onplay=this._onPlay.bind(this),e.onpause=this._onPause.bind(this),s.context.on("refresh",this.refresh,this),s.context.on("refreshPaused",this.refreshPaused,this),this._media=s}_internalStop(){this._source&&this._playing&&(this._source.onended=null,this._source.pause())}stop(){this._internalStop(),this._source&&this.emit("stop")}get speed(){return this._speed}set speed(s){this._speed=s,this.refresh()}get volume(){return this._volume}set volume(s){this._volume=s,this.refresh()}get loop(){return this._loop}set loop(s){this._loop=s,this.refresh()}get muted(){return this._muted}set muted(s){this._muted=s,this.refresh()}get filters(){return console.warn("HTML Audio does not support filters"),null}set filters(s){console.warn("HTML Audio does not support filters")}refresh(){const s=this._media.context,e=this._media.parent;this._source.loop=this._loop||e.loop;const t=s.volume*(s.muted?0:1),i=e.volume*(e.muted?0:1),n=this._volume*(this._muted?0:1);this._source.volume=n*t*i,this._source.playbackRate=this._speed*s.speed*e.speed}refreshPaused(){const s=this._media.context,e=this._media.parent,t=this._paused||e.paused||s.paused;t!==this._pausedReal&&(this._pausedReal=t,t?(this._internalStop(),this.emit("paused")):(this.emit("resumed"),this.play({start:this._source.currentTime,end:this._end,volume:this._volume,speed:this._speed,loop:this._loop})),this.emit("pause",t))}play(s){const{start:e,end:t,speed:i,loop:n,volume:o,muted:r}=s;t&&console.assert(t>e,"End time is before start time"),this._speed=i,this._volume=o,this._loop=!!n,this._muted=r,this.refresh(),this.loop&&t!==null&&(console.warn('Looping not support when specifying an "end" time'),this.loop=!1),this._start=e,this._end=t||this._duration,this._start=Math.max(0,this._start-C.PADDING),this._end=Math.min(this._end+C.PADDING,this._duration),this._source.onloadedmetadata=()=>{this._source&&(this._source.currentTime=e,this._source.onloadedmetadata=null,this.emit("progress",e/this._duration,this._duration),v.shared.add(this._onUpdate,this))},this._source.onended=this._onComplete.bind(this),this._source.play(),this.emit("start")}_onUpdate(){this.emit("progress",this.progress,this._duration),this._source.currentTime>=this._end&&!this._source.loop&&this._onComplete()}_onComplete(){v.shared.remove(this._onUpdate,this),this._internalStop(),this.emit("progress",1,this._duration),this.emit("end",this)}destroy(){v.shared.remove(this._onUpdate,this),this.removeAllListeners();const s=this._source;s&&(s.onended=null,s.onplay=null,s.onpause=null,this._internalStop()),this._source=null,this._speed=1,this._volume=1,this._loop=!1,this._end=null,this._start=0,this._duration=0,this._playing=!1,this._pausedReal=!1,this._paused=!1,this._muted=!1,this._media&&(this._media.context.off("refresh",this.refresh,this),this._media.context.off("refreshPaused",this.refreshPaused,this),this._media=null)}toString(){return`[HTMLAudioInstance id=${this.id}]`}};let E=C;E.PADDING=.1;class G extends S{init(e){this.parent=e,this._source=e.options.source||new Audio,e.url&&(this._source.src=e.url)}create(){return new E(this)}get isPlayable(){return!!this._source&&this._source.readyState===4}get duration(){return this._source.duration}get context(){return this.parent.context}get filters(){return null}set filters(e){console.warn("HTML Audio does not support filters")}destroy(){this.removeAllListeners(),this.parent=null,this._source&&(this._source.src="",this._source.load(),this._source=null)}get source(){return this._source}load(e){const t=this._source,i=this.parent;if(t.readyState===4){i.isLoaded=!0;const h=i.autoPlayStart();e&&setTimeout(()=>{e(null,i,h)},0);return}if(!i.url){e(new Error("sound.url or sound.source must be set"));return}t.src=i.url;const n=()=>{a(),i.isLoaded=!0;const h=i.autoPlayStart();e&&e(null,i,h)},o=()=>{a(),e&&e(new Error("Sound loading has been aborted"))},r=()=>{a();const h=`Failed to load audio element (code: ${t.error.code})`;e?e(new Error(h)):console.error(h)},a=()=>{t.removeEventListener("canplaythrough",n),t.removeEventListener("load",n),t.removeEventListener("abort",o),t.removeEventListener("error",r)};t.addEventListener("canplaythrough",n,!1),t.addEventListener("load",n,!1),t.addEventListener("abort",o,!1),t.addEventListener("error",r,!1),t.load()}}const he=Object.freeze(Object.defineProperty({__proto__:null,HTMLAudioContext:I,HTMLAudioInstance:E,HTMLAudioMedia:G},Symbol.toStringTag,{value:"Module"}));class ee{constructor(e,t){this.parent=e,Object.assign(this,t),this.duration=this.end-this.start,console.assert(this.duration>0,"End time must be after start time")}play(e){return this.parent.play({complete:e,speed:this.speed||this.parent.speed,end:this.end,start:this.start,loop:this.loop})}destroy(){this.parent=null}}const P=["ogg","oga","opus","m4a","mp3","mpeg","wav","aiff","wma","mid","caf"],O=["audio/mpeg","audio/ogg"],A={};function R(s){const e={m4a:"audio/mp4",oga:"audio/ogg",opus:'audio/ogg; codecs="opus"',caf:'audio/x-caf; codecs="opus"',...s||{}},t=document.createElement("audio"),i={},n=/^no$/;P.forEach(o=>{const r=t.canPlayType(`audio/${o}`).replace(n,""),a=e[o]?t.canPlayType(e[o]).replace(n,""):"";i[o]=!!r||!!a}),Object.assign(A,i)}R();let te=0;class V extends S{constructor(e){super(),this.id=te++,this._media=null,this._paused=!1,this._muted=!1,this._elapsed=0,this.init(e)}set(e,t){if(this[e]===void 0)throw new Error(`Property with name ${e} does not exist.`);switch(e){case"speed":this.speed=t;break;case"volume":this.volume=t;break;case"muted":this.muted=t;break;case"loop":this.loop=t;break;case"paused":this.paused=t;break}return this}stop(){this._source&&(this._internalStop(),this.emit("stop"))}get speed(){return this._speed}set speed(e){this._speed=e,this.refresh(),this._update(!0)}get volume(){return this._volume}set volume(e){this._volume=e,this.refresh()}get muted(){return this._muted}set muted(e){this._muted=e,this.refresh()}get loop(){return this._loop}set loop(e){this._loop=e,this.refresh()}get filters(){return this._filters}set filters(e){this._filters&&(this._filters?.filter(t=>t).forEach(t=>t.disconnect()),this._filters=null,this._source.connect(this._gain)),this._filters=e?.length?e.slice(0):null,this.refresh()}refresh(){if(!this._source)return;const e=this._media.context,t=this._media.parent;this._source.loop=this._loop||t.loop;const i=e.volume*(e.muted?0:1),n=t.volume*(t.muted?0:1),o=this._volume*(this._muted?0:1);_.setParamValue(this._gain.gain,o*n*i),_.setParamValue(this._source.playbackRate,this._speed*t.speed*e.speed),this.applyFilters()}applyFilters(){if(this._filters?.length){this._source.disconnect();let e=this._source;this._filters.forEach(t=>{e.connect(t.destination),e=t}),e.connect(this._gain)}}refreshPaused(){const e=this._media.context,t=this._media.parent,i=this._paused||t.paused||e.paused;i!==this._pausedReal&&(this._pausedReal=i,i?(this._internalStop(),this.emit("paused")):(this.emit("resumed"),this.play({start:this._elapsed%this._duration,end:this._end,speed:this._speed,loop:this._loop,volume:this._volume})),this.emit("pause",i))}play(e){const{start:t,end:i,speed:n,loop:o,volume:r,muted:a,filters:h}=e;i&&console.assert(i>t,"End time is before start time"),this._paused=!1;const{source:d,gain:c}=this._media.nodes.cloneBufferSource();this._source=d,this._gain=c,this._speed=n,this._volume=r,this._loop=!!o,this._muted=a,this._filters=h,this.refresh();const g=this._source.buffer.duration;this._duration=g,this._end=i,this._lastUpdate=this._now(),this._elapsed=t,this._source.onended=this._onComplete.bind(this),this._loop?(this._source.loopEnd=i,this._source.loopStart=t,this._source.start(0,t)):i?this._source.start(0,t,i-t):this._source.start(0,t),this.emit("start"),this._update(!0),this.enableTicker(!0)}enableTicker(e){v.shared.remove(this._updateListener,this),e&&v.shared.add(this._updateListener,this)}get progress(){return this._progress}get paused(){return this._paused}set paused(e){this._paused=e,this.refreshPaused()}destroy(){this.removeAllListeners(),this._internalStop(),this._gain&&(this._gain.disconnect(),this._gain=null),this._media&&(this._media.context.events.off("refresh",this.refresh,this),this._media.context.events.off("refreshPaused",this.refreshPaused,this),this._media=null),this._filters?.forEach(e=>e.disconnect()),this._filters=null,this._end=null,this._speed=1,this._volume=1,this._loop=!1,this._elapsed=0,this._duration=0,this._paused=!1,this._muted=!1,this._pausedReal=!1}toString(){return`[WebAudioInstance id=${this.id}]`}_now(){return this._media.context.audioContext.currentTime}_updateListener(){this._update()}_update(e=!1){if(this._source){const t=this._now(),i=t-this._lastUpdate;if(i>0||e){const n=this._source.playbackRate.value;this._elapsed+=i*n,this._lastUpdate=t;const o=this._duration;let r;if(this._source.loopStart){const a=this._source.loopEnd-this._source.loopStart;r=(this._source.loopStart+this._elapsed%a)/o}else r=this._elapsed%o/o;this._progress=r,this.emit("progress",this._progress,o)}}}init(e){this._media=e,e.context.events.on("refresh",this.refresh,this),e.context.events.on("refreshPaused",this.refreshPaused,this)}_internalStop(){if(this._source){this.enableTicker(!1),this._source.onended=null,this._source.stop(0),this._source.disconnect();try{this._source.buffer=null}catch(e){console.warn("Failed to set AudioBufferSourceNode.buffer to null:",e)}this._source=null}}_onComplete(){if(this._source){this.enableTicker(!1),this._source.onended=null,this._source.disconnect();try{this._source.buffer=null}catch(e){console.warn("Failed to set AudioBufferSourceNode.buffer to null:",e)}}this._source=null,this._progress=1,this.emit("progress",1,this._duration),this.emit("end",this)}}class K{constructor(e,t){this._output=t,this._input=e}get destination(){return this._input}get filters(){return this._filters}set filters(e){if(this._filters&&(this._filters.forEach(t=>{t&&t.disconnect()}),this._filters=null,this._input.connect(this._output)),e&&e.length){this._filters=e.slice(0),this._input.disconnect();let t=null;e.forEach(i=>{t===null?this._input.connect(i.destination):t.connect(i.destination),t=i}),t.connect(this._output)}}destroy(){this.filters=null,this._input=null,this._output=null}}const $=class extends K{constructor(s){const e=s.audioContext,t=e.createBufferSource(),i=e.createGain(),n=e.createAnalyser();t.connect(n),n.connect(i),i.connect(s.destination),super(n,i),this.context=s,this.bufferSource=t,this.gain=i,this.analyser=n}get script(){return this._script||(this._script=this.context.audioContext.createScriptProcessor($.BUFFER_SIZE),this._script.connect(this.context.destination)),this._script}destroy(){super.destroy(),this.bufferSource.disconnect(),this._script&&this._script.disconnect(),this.gain.disconnect(),this.analyser.disconnect(),this.bufferSource=null,this._script=null,this.gain=null,this.analyser=null,this.context=null}cloneBufferSource(){const s=this.bufferSource,e=this.context.audioContext.createBufferSource();e.buffer=s.buffer,_.setParamValue(e.playbackRate,s.playbackRate.value),e.loop=s.loop;const t=this.context.audioContext.createGain();return e.connect(t),t.connect(this.destination),{source:e,gain:t}}get bufferSize(){return this.script.bufferSize}};let M=$;M.BUFFER_SIZE=0;class L{init(e){this.parent=e,this._nodes=new M(this.context),this._source=this._nodes.bufferSource,this.source=e.options.source}destroy(){this.parent=null,this._nodes.destroy(),this._nodes=null;try{this._source.buffer=null}catch(e){console.warn("Failed to set AudioBufferSourceNode.buffer to null:",e)}this._source=null,this.source=null}create(){return new V(this)}get context(){return this.parent.context}get isPlayable(){return!!this._source&&!!this._source.buffer}get filters(){return this._nodes.filters}set filters(e){this._nodes.filters=e}get duration(){return console.assert(this.isPlayable,"Sound not yet playable, no duration"),this._source.buffer.duration}get buffer(){return this._source.buffer}set buffer(e){this._source.buffer=e}get nodes(){return this._nodes}load(e){this.source?this._decode(this.source,e):this.parent.url?this._loadUrl(e):e?e(new Error("sound.url or sound.source must be set")):console.error("sound.url or sound.source must be set")}async _loadUrl(e){const t=this.parent.url,i=await U.get().fetch(t);this._decode(await i.arrayBuffer(),e)}_decode(e,t){const i=(n,o)=>{if(n)t&&t(n);else{this.parent.isLoaded=!0,this.buffer=o;const r=this.parent.autoPlayStart();t&&t(null,this.parent,r)}};e instanceof AudioBuffer?i(null,e):this.parent.context.decode(e,i)}}const x=class{static from(s){let e={};typeof s=="string"?e.url=s:s instanceof ArrayBuffer||s instanceof AudioBuffer||s instanceof HTMLAudioElement?e.source=s:Array.isArray(s)?e.url=s:e=s,e={autoPlay:!1,singleInstance:!1,url:null,source:null,preload:!1,volume:1,speed:1,complete:null,loaded:null,loop:!1,...e},Object.freeze(e);const t=l().useLegacy?new G:new L;return new x(t,e)}constructor(s,e){this.media=s,this.options=e,this._instances=[],this._sprites={},this.media.init(this);const t=e.complete;this._autoPlayOptions=t?{complete:t}:null,this.isLoaded=!1,this._preloadQueue=null,this.isPlaying=!1,this.autoPlay=e.autoPlay,this.singleInstance=e.singleInstance,this.preload=e.preload||this.autoPlay,this.url=Array.isArray(e.url)?this.preferUrl(e.url):e.url,this.speed=e.speed,this.volume=e.volume,this.loop=e.loop,e.sprites&&this.addSprites(e.sprites),this.preload&&this._preload(e.loaded)}preferUrl(s){const[e]=s.map(t=>({url:t,ext:F.extname(t).slice(1)})).filter(({ext:t})=>A[t]).sort((t,i)=>P.indexOf(t.ext)-P.indexOf(i.ext));if(!e)throw new Error("No supported file type found");return e.url}get context(){return l().context}pause(){return this.isPlaying=!1,this.paused=!0,this}resume(){return this.isPlaying=this._instances.length>0,this.paused=!1,this}get paused(){return this._paused}set paused(s){this._paused=s,this.refreshPaused()}get speed(){return this._speed}set speed(s){this._speed=s,this.refresh()}get filters(){return this.media.filters}set filters(s){this.media.filters=s}addSprites(s,e){if(typeof s=="object"){const i={};for(const n in s)i[n]=this.addSprites(n,s[n]);return i}console.assert(!this._sprites[s],`Alias ${s} is already taken`);const t=new ee(this,e);return this._sprites[s]=t,t}destroy(){this._removeInstances(),this.removeSprites(),this.media.destroy(),this.media=null,this._sprites=null,this._instances=null}removeSprites(s){if(s){const e=this._sprites[s];e!==void 0&&(e.destroy(),delete this._sprites[s])}else for(const e in this._sprites)this.removeSprites(e);return this}get isPlayable(){return this.isLoaded&&this.media&&this.media.isPlayable}stop(){if(!this.isPlayable)return this.autoPlay=!1,this._autoPlayOptions=null,this;this.isPlaying=!1;for(let s=this._instances.length-1;s>=0;s--)this._instances[s].stop();return this}play(s,e){let t;if(typeof s=="string"?t={sprite:s,loop:this.loop,complete:e}:typeof s=="function"?(t={},t.complete=s):t=s,t={complete:null,loaded:null,sprite:null,end:null,start:0,volume:1,speed:1,muted:!1,loop:!1,...t||{}},t.sprite){const n=t.sprite;console.assert(!!this._sprites[n],`Alias ${n} is not available`);const o=this._sprites[n];t.start=o.start+(t.start||0),t.end=o.end,t.speed=o.speed||1,t.loop=o.loop||t.loop,delete t.sprite}if(t.offset&&(t.start=t.offset),!this.isLoaded)return this._preloadQueue?new Promise(n=>{this._preloadQueue.push(()=>{n(this.play(t))})}):(this._preloadQueue=[],this.autoPlay=!0,this._autoPlayOptions=t,new Promise((n,o)=>{this._preload((r,a,h)=>{this._preloadQueue.forEach(d=>d()),this._preloadQueue=null,r?o(r):(t.loaded&&t.loaded(r,a,h),n(h))})}));(this.singleInstance||t.singleInstance)&&this._removeInstances();const i=this._createInstance();return this._instances.push(i),this.isPlaying=!0,i.once("end",()=>{t.complete&&t.complete(this),this._onComplete(i)}),i.once("stop",()=>{this._onComplete(i)}),i.play(t),i}refresh(){const s=this._instances.length;for(let e=0;e<s;e++)this._instances[e].refresh()}refreshPaused(){const s=this._instances.length;for(let e=0;e<s;e++)this._instances[e].refreshPaused()}get volume(){return this._volume}set volume(s){this._volume=s,this.refresh()}get muted(){return this._muted}set muted(s){this._muted=s,this.refresh()}get loop(){return this._loop}set loop(s){this._loop=s,this.refresh()}_preload(s){this.media.load(s)}get instances(){return this._instances}get sprites(){return this._sprites}get duration(){return this.media.duration}autoPlayStart(){let s;return this.autoPlay&&(s=this.play(this._autoPlayOptions)),s}_removeInstances(){for(let s=this._instances.length-1;s>=0;s--)this._poolInstance(this._instances[s]);this._instances.length=0}_onComplete(s){if(this._instances){const e=this._instances.indexOf(s);e>-1&&this._instances.splice(e,1),this.isPlaying=this._instances.length>0}this._poolInstance(s)}_createInstance(){if(x._pool.length>0){const s=x._pool.pop();return s.init(this.media),s}return this.media.create()}_poolInstance(s){s.destroy(),x._pool.indexOf(s)<0&&x._pool.push(s)}};let w=x;w._pool=[];class b extends K{constructor(){const e=window,t=new b.AudioContext,i=t.createDynamicsCompressor(),n=t.createAnalyser();n.connect(i),i.connect(t.destination),super(n,i),this.autoPause=!0,this._ctx=t,this._offlineCtx=new b.OfflineAudioContext(1,2,e.OfflineAudioContext?Math.max(8e3,Math.min(96e3,t.sampleRate)):44100),this.compressor=i,this.analyser=n,this.events=new S,this.volume=1,this.speed=1,this.muted=!1,this.paused=!1,this._locked=t.state==="suspended"&&("ontouchstart"in globalThis||"onclick"in globalThis),this._locked&&(this._unlock(),this._unlock=this._unlock.bind(this),document.addEventListener("mousedown",this._unlock,!0),document.addEventListener("touchstart",this._unlock,!0),document.addEventListener("touchend",this._unlock,!0)),this.onFocus=this.onFocus.bind(this),this.onBlur=this.onBlur.bind(this),globalThis.addEventListener("focus",this.onFocus),globalThis.addEventListener("blur",this.onBlur)}onFocus(){if(!this.autoPause)return;const e=this._ctx.state;(e==="suspended"||e==="interrupted"||!this._locked)&&(this.paused=this._pausedOnBlur,this.refreshPaused())}onBlur(){this.autoPause&&(this._locked||(this._pausedOnBlur=this._paused,this.paused=!0,this.refreshPaused()))}_unlock(){this._locked&&(this.playEmptySound(),this._ctx.state==="running"&&(document.removeEventListener("mousedown",this._unlock,!0),document.removeEventListener("touchend",this._unlock,!0),document.removeEventListener("touchstart",this._unlock,!0),this._locked=!1))}playEmptySound(){const e=this._ctx.createBufferSource();e.buffer=this._ctx.createBuffer(1,1,22050),e.connect(this._ctx.destination),e.start(0,0,0),e.context.state==="suspended"&&e.context.resume()}static get AudioContext(){const e=window;return e.AudioContext||e.webkitAudioContext||null}static get OfflineAudioContext(){const e=window;return e.OfflineAudioContext||e.webkitOfflineAudioContext||null}destroy(){super.destroy();const e=this._ctx;typeof e.close<"u"&&e.close(),globalThis.removeEventListener("focus",this.onFocus),globalThis.removeEventListener("blur",this.onBlur),this.events.removeAllListeners(),this.analyser.disconnect(),this.compressor.disconnect(),this.analyser=null,this.compressor=null,this.events=null,this._offlineCtx=null,this._ctx=null}get audioContext(){return this._ctx}get offlineContext(){return this._offlineCtx}set paused(e){e&&this._ctx.state==="running"?this._ctx.suspend():!e&&this._ctx.state==="suspended"&&this._ctx.resume(),this._paused=e}get paused(){return this._paused}refresh(){this.events.emit("refresh")}refreshPaused(){this.events.emit("refreshPaused")}toggleMute(){return this.muted=!this.muted,this.refresh(),this.muted}togglePause(){return this.paused=!this.paused,this.refreshPaused(),this._paused}decode(e,t){const i=o=>{t(new Error(o?.message||"Unable to decode file"))},n=this._offlineCtx.decodeAudioData(e,o=>{t(null,o)},i);n&&n.catch(i)}}class se{constructor(){this.init()}init(){return this.supported&&(this._webAudioContext=new b),this._htmlAudioContext=new I,this._sounds={},this.useLegacy=!this.supported,this}get context(){return this._context}get filtersAll(){return this.useLegacy?[]:this._context.filters}set filtersAll(e){this.useLegacy||(this._context.filters=e)}get supported(){return b.AudioContext!==null}add(e,t){if(typeof e=="object"){const o={};for(const r in e){const a=this._getOptions(e[r],t);o[r]=this.add(r,a)}return o}if(console.assert(!this._sounds[e],`Sound with alias ${e} already exists.`),t instanceof w)return this._sounds[e]=t,t;const i=this._getOptions(t),n=w.from(i);return this._sounds[e]=n,n}_getOptions(e,t){let i;return typeof e=="string"?i={url:e}:Array.isArray(e)?i={url:e}:e instanceof ArrayBuffer||e instanceof AudioBuffer||e instanceof HTMLAudioElement?i={source:e}:i=e,i={...i,...t||{}},i}get useLegacy(){return this._useLegacy}set useLegacy(e){this._useLegacy=e,this._context=!e&&this.supported?this._webAudioContext:this._htmlAudioContext}get disableAutoPause(){return!this._webAudioContext.autoPause}set disableAutoPause(e){this._webAudioContext.autoPause=!e}remove(e){return this.exists(e,!0),this._sounds[e].destroy(),delete this._sounds[e],this}get volumeAll(){return this._context.volume}set volumeAll(e){this._context.volume=e,this._context.refresh()}get speedAll(){return this._context.speed}set speedAll(e){this._context.speed=e,this._context.refresh()}togglePauseAll(){return this._context.togglePause()}pauseAll(){return this._context.paused=!0,this._context.refreshPaused(),this}resumeAll(){return this._context.paused=!1,this._context.refreshPaused(),this}toggleMuteAll(){return this._context.toggleMute()}muteAll(){return this._context.muted=!0,this._context.refresh(),this}unmuteAll(){return this._context.muted=!1,this._context.refresh(),this}removeAll(){for(const e in this._sounds)this._sounds[e].destroy(),delete this._sounds[e];return this}stopAll(){for(const e in this._sounds)this._sounds[e].stop();return this}exists(e,t=!1){const i=!!this._sounds[e];return t&&console.assert(i,`No sound matching alias '${e}'.`),i}isPlaying(){for(const e in this._sounds)if(this._sounds[e].isPlaying)return!0;return!1}find(e){return this.exists(e,!0),this._sounds[e]}play(e,t){return this.find(e).play(t)}stop(e){return this.find(e).stop()}pause(e){return this.find(e).pause()}resume(e){return this.find(e).resume()}volume(e,t){const i=this.find(e);return t!==void 0&&(i.volume=t),i.volume}speed(e,t){const i=this.find(e);return t!==void 0&&(i.speed=t),i.speed}duration(e){return this.find(e).duration}close(){return this.removeAll(),this._sounds=null,this._webAudioContext&&(this._webAudioContext.destroy(),this._webAudioContext=null),this._htmlAudioContext&&(this._htmlAudioContext.destroy(),this._htmlAudioContext=null),this._context=null,this}}let D=0;function ie(s,e){const t=`alias${D++}`;return l().add(t,{url:s,preload:!0,autoPlay:!0,loaded:i=>{i&&(console.error(i),l().remove(t),e&&e(i))},complete:()=>{l().remove(t),e&&e(null)}}),t}function ne(s,e){const t=document.createElement("canvas");e={width:512,height:128,fill:"black",...e||{}},t.width=e.width,t.height=e.height;const i=new j({resource:t});if(!(s.media instanceof L))return i;const n=s.media;console.assert(!!n.buffer,"No buffer found, load first");const o=t.getContext("2d");o.fillStyle=e.fill;const r=n.buffer.getChannelData(0),a=Math.ceil(r.length/e.width),h=e.height/2;for(let d=0;d<e.width;d++){let c=1,g=-1;for(let f=0;f<a;f++){const p=r[d*a+f];p<c&&(c=p),p>g&&(g=p)}o.fillRect(d,(1+c)*h,1,Math.max(1,(g-c)*h))}return i}function oe(s=200,e=1){const t=w.from({singleInstance:!0});if(!(t.media instanceof L))return t;const i=t.media,n=t.context,o=1,r=48e3,a=2,h=n.audioContext.createBuffer(o,e*r,r),d=h.getChannelData(0);for(let c=0;c<d.length;c++){const g=c/h.sampleRate,f=s*g*2*Math.PI;d[c]=Math.sin(f)*a}return i.buffer=h,t.isLoaded=!0,t}const le=Object.freeze(Object.defineProperty({__proto__:null,get PLAY_ID(){return D},extensions:P,mimes:O,playOnce:ie,render:ne,sineTone:oe,supported:A,validateFormats:R},Symbol.toStringTag,{value:"Module"})),de=Object.freeze(Object.defineProperty({__proto__:null,WebAudioContext:b,WebAudioInstance:V,WebAudioMedia:L,WebAudioNodes:M,WebAudioUtils:_},Symbol.toStringTag,{value:"Module"})),k=s=>{const e=s.src;let t=s?.alias?.[0];return(!t||s.src===t)&&(t=F.basename(e,F.extname(e))),t},re={extension:T.Asset,detection:{test:async()=>!0,add:async s=>[...s,...P.filter(e=>A[e])],remove:async s=>s.filter(e=>s.includes(e))},loader:{name:"sound",extension:{type:[T.LoadParser],priority:q.High},test(s){const e=F.extname(s).slice(1);return!!A[e]||O.some(t=>s.startsWith(`data:${t}`))},async load(s,e){const t=await new Promise((i,n)=>w.from({...e.data,url:s,preload:!0,loaded(o,r){o?n(o):i(r),e.data?.loaded?.(o,r)}}));return l().add(k(e),t),t},async unload(s,e){l().remove(k(e))}}};H.add(re);const ce=N(new se);export{y as Filter,K as Filterable,w as Sound,se as SoundLibrary,ee as SoundSprite,ue as filters,he as htmlaudio,ce as sound,re as soundAsset,le as utils,de as webaudio};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{k as f,n as b,o as S,p as A,w as D,I,q as h,r as m,t as y,u as R,v as w,W as x,x as O,y as W,z as k,A as C,B as g,C as $,D as G,E as M}from"./index-
|
|
1
|
+
import{k as f,n as b,o as S,p as A,w as D,I,q as h,r as m,t as y,u as R,v as w,W as x,x as O,y as W,z as k,A as C,B as g,C as $,D as G,E as M}from"./index-BvKfaQa-.js";class j extends g.Component{constructor(){super(...arguments),this.state={crashed:!1}}static getDerivedStateFromError(){return{crashed:!0}}componentDidCatch(t){this.props.onCaught(t)}render(){return this.state.crashed?null:this.props.children}}function v(e,t,a){e.style.position="absolute",e.style.top="0",e.style.left="0",e.style.width="100%",e.style.height="100%",e.style.zIndex=String(t.zOrder??0),e.style.pointerEvents=a}async function z(e,t,a,o){const r=await W(e,a),n=document.createElement("div");v(n,e,"none"),t.appendChild(n),f.log(`react sibling "${e.id}": no native Game beside an ingest world — useGameState unavailable`,"ingest");const s=k.createRoot(n);let d=null;if(C.flushSync(()=>{s.render(g.createElement(j,{onCaught:i=>{d=i},children:g.createElement(r)}))}),d!==null)throw s.unmount(),n.remove(),d instanceof Error?d:new Error(String(d));let u;return o&&(u=$(n).nodes.size>0?new G(n,o,{}):new M(n,o,{overlay:await y(e.id),persist:p=>m(e.id,p),destination:h(e.id)})),{worldId:e.id,...u?{authoring:u}:{},dispose(){s.unmount(),n.remove()}}}async function P(e,t,a,o,r){const n=document.createElement("div");v(n,t,"auto"),a.appendChild(n);try{const s=a.clientWidth||800,d=a.clientHeight||600,{session:u}=await A(e,t,o,n,s,d),i=u.game.roots[0],p=i.mounted.authoring;let c;if(r)if(p)c=D(p,r);else if(i.kind==="threejs")c=new I(r,i.threeRoot(),{overlay:await y(i.id),persist:l=>m(i.id,l),destination:h(i.id)});else if(i.kind==="pixijs"){const l=R(i.physics2d??w());c=new x(i.pixiRoot(),l,r,{overlay:await y(i.id),persist:E=>m(i.id,E),destination:h(i.id)})}else c=O(r,`${t.id} (no authoring surface)`);return{worldId:t.id,...c?{authoring:c}:{},setPaused(l){l?u.pause():u.resume()},dispose(){u.stop(),n.remove()}}}catch(s){throw n.remove(),s}}function T(e){throw new Error(`sibling world "${e.id}" (kind: ${e.surface}, adapter identity: "${e.adapter.identity}") has no known composite-sibling mount path — every currently-resolvable identity (default-three/default-pixi/default-react/module) is routed above; this is reached only for a genuinely unroutable shape (docs/WAVE5-MULTIWORLD-INGEST-DESIGN.md D-V7, updated by docs/WAVE6-DOCTOR-DESIGN.md D-B3).`)}async function B(e,t,a,o,r){if(t.adapter.type==="module"||t.adapter.identity==="threejs"||t.adapter.identity==="pixijs")return P(e,t,a,o,r);if(t.adapter.identity==="react")return z(t,a,o,r);T(t)}async function L(e,t,a,o,r){const n=[];for(const s of e.roots)if(s.id!==t)try{n.push(await B(e,s,a,o,r))}catch(d){f.error(`Composite sibling "${s.id}" failed to mount: ${d}`,"ingest"),b({worldId:s.id,kind:s.surface,identity:s.adapter.identity,message:S(d)})}return n}export{L as mountIngestSiblings};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a as c,m as l,l as f,b as m,R as p,f as h,V as g}from"./index-
|
|
1
|
+
import{a as c,m as l,l as f,b as m,R as p,f as h,V as g}from"./index-BvKfaQa-.js";import{createGameRuntime as y}from"./create-runtime-BwRLsjpc.js";import"./game-loop-X827vWLi.js";function v(e){if(e.determinism?.seededRandom!==!0)return;const t=e.url?E(e.url):void 0;return e.explicitSeed??t??e.determinism.defaultSeed}function E(e){const t=new URLSearchParams(e.search).get(p);if(t===null||t==="")return;const r=Number(t);return Number.isFinite(r)?r:void 0}function b(){return typeof window<"u"}function R(e){if(typeof e!="object"||e===null)return!1;const t=e.roots;return!Array.isArray(t)||t.length===0?!1:t.every(r=>{if(typeof r!="object"||r===null)return!1;const n=r.adapter;if(typeof n!="object"||n===null)return!1;const i=n.type;return i==="builtin"||i==="module"||i==="ingest"})}function M(e){return R(e)?e:f(e)}function $(e,t){if(t?.adapter)return t.adapter;if(e.adapter.type==="module")throw new Error(`mountManifestWorlds: world "${e.id}" (threejs) declares a { module } adapter ("${e.adapter.module}") — mountManifestWorlds never imports an arbitrary module path itself (no \`/@fs/\`, no dev server). Import the module yourself and supply the constructed adapter via entries["${e.id}"] = { kind: 'threejs', adapter }.`);if(e.adapter.type==="ingest")throw new Error(`mountManifestWorlds: world "${e.id}" (threejs) declares an { ingest } adapter — ingest roots require the editor's dev-server-backed mount machinery (an EditorStore plus iframe/DOM capture, see adapter-resolver.ts's resolveIngestThreeAdapter) and are not supported by mountManifestWorlds (docs/WAVE3-ADAPTER-PLUMBING-DESIGN.md D-Z7 — no porting aids, no hosted ingest routes).`);if(e.entry!==void 0){if(!t?.setup)throw new Error(`mountManifestWorlds: world "${e.id}" (threejs) declares \`entry\` "${e.entry}" — supply entries["${e.id}"] = { kind: 'threejs', setup } (the entry module's exported \`setup\` function) or { kind: 'threejs', adapter } for full control. Got ${t===void 0?"no entry at all":"an entry with neither `setup` nor `adapter`"}.`);return h(e.id,t.setup)}if(e.scene!==void 0)return new g({id:e.id,scenePath:e.scene,componentRegistry:t?.componentRegistry});throw new Error(`mountManifestWorlds: world "${e.id}" is default-three with neither \`scene\` nor \`entry\` — this should have been rejected by manifest validation.`)}function j(e,t){if(t?.adapter)return t.adapter;throw new Error(`mountManifestWorlds: world "${e.id}" (pixijs) has no entries["${e.id}"] — a pixijs world always needs a caller-supplied, already-constructed adapter (entries["${e.id}"] = { kind: 'pixijs', adapter }, e.g. \`new PixiSceneGameAdapter(...)\` built from your own already-imported '@engine/world2d') — mountManifestWorlds never value-imports pixi.js (mirrors create-runtime.ts's own pixi-free-core discipline).`)}function A(e,t){if(t?.adapter)return t.adapter;throw new Error(`mountManifestWorlds: world "${e.id}" (react) has no entries["${e.id}"] — a react world always needs a caller-supplied, already-constructed \`ReactRootAdapter\` (entries["${e.id}"] = { kind: 'react', adapter }, mounting via your own already-imported react-dom \`createRoot\` + your own \`<GameProvider>\`) — mountManifestWorlds never value-imports react/react-dom (mirrors create-runtime.ts's own react-free-core discipline; see docs/REACT-STATE-BRIDGE.md §2-3).`)}function S(e,t){if(t!==void 0&&t.kind!==e.surface)throw new Error(`mountManifestWorlds: entries["${e.id}"] declares kind "${t.kind}" but the manifest's root "${e.id}" uses surface "${e.surface}" — fix the entries key (or the manifest) so the two agree.`);const r={id:e.id,zOrder:e.zOrder,pausable:e.pausable,loop:e.loop};return e.surface==="threejs"?{...r,kind:"threejs",adapter:$(e,t)}:e.surface==="pixijs"?{...r,kind:"pixijs",adapter:j(e,t)}:e.surface==="react"?{...r,kind:"react",adapter:A(e,t)}:m(e.surface,"mountManifestWorlds")}async function D(e){const t=M(e.manifest);if(t.roots.length===0)throw new Error("mountManifestWorlds: manifest declares no roots — nothing to mount.");const r=e.entries??{},n=t.roots.map(s=>S(s,r[s.id])),i=e.seedUrl??(b()?window.location:void 0),d=v({determinism:t.determinism,explicitSeed:e.seed,url:i}),a=await y({container:e.container,roots:n,width:e.width??t.resolution?.width,height:e.height??t.resolution?.height,headless:e.headless,seed:d});t.determinism?.seededRandom;const o=c(a.game);if(o){t.server&&o.setRoomDeclared(!0);const s=l({registry:o,manifest:t,url:e.debugBridge?.url,window:e.debugBridge?.window});if(s){const u=a.stop;a.stop=()=>{s.uninstall(),u()}}}return a}export{D as mountManifestWorlds,v as resolveDeterminismSeed,M as resolveManifest};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{B as s,z as l}from"./index-
|
|
1
|
+
import{B as s,z as l}from"./index-BvKfaQa-.js";var n=new Map;function a(){return globalThis.IS_REACT_ACT_ENVIRONMENT}var m=({callback:e,children:r})=>{let t=s.useRef();return s.useLayoutEffect(()=>{t.current!==e&&(t.current=e,e())},[e]),r};typeof Promise.withResolvers>"u"&&(Promise.withResolvers=()=>{let e=null,r=null;return{promise:new Promise((t,o)=>{e=t,r=o}),resolve:e,reject:r}});var E=async(e,r,t)=>{let o=await c(r,t);if(a()){o.render(e);return}let{promise:u,resolve:i}=Promise.withResolvers();return o.render(s.createElement(m,{callback:i},e)),u},p=(e,r)=>{let t=n.get(e);t&&(t.unmount(),n.delete(e))},c=async(e,r)=>{let t=n.get(e);return t||(t=l.createRoot(e,r),n.set(e,t)),t};export{E as renderElement,p as unmountElement};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ag as a,bV as s,bW as e,bX as t}from"./index-BvKfaQa-.js";a.add(s,e);a.add(t);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{am as O,an as ie,ao as le,s as de,o as W,k as R,n as ce,ap as J,D as G,aq as ue,ar as pe,as as he,at as fe,y as me,au as we,av as ge,aw as ye,ax as be,ay as ve,az as Ie,aA as ee,aB as te,aC as xe,aD as Se,aE as Ee,c as Ce,B as I,aF as ke,aG as j,aH as h,aI as Pe,aJ as Me,aK as V,aL as F,aM as $e,aN as Re,aO as ze,aP as We,aQ as K,aR as De,aS as q,aT as X,aU as Ae,aV as je,aW as Oe,aX as Te,aY as z,aZ as Be}from"./index-DbQzGLxv.js";import{c as Ve,a as Fe}from"./game-loop-t5W_oqxz.js";const _e={width:null,height:null};let T=_e;const H=new Set;function oe(){return T}function L(e,o){const n=e===null?null:Math.max(1,Math.round(e)),r=o===null?null:Math.max(1,Math.round(o));if(!(T.width===n&&T.height===r)){T={width:n,height:r};for(const a of H)a()}}function Ge(){L(null,null)}function re(e){return H.add(e),()=>H.delete(e)}const U=new Map;function He(e,o){return`${e}\0${o}`}function Le(e){const o=e.title?.split("/").filter(Boolean).at(-1)?.trim();if(o)return o;const n=e.modulePath.split("/").pop()??e.modulePath;return n.replace(/\.stories\.[^.]+$/i,"").replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[-_]+/g," ").trim()||n}const Ne=1;function ne(e){const o=[];for(const{worldId:n,adapter:r}of e.childAdapters()){if(!(r instanceof O))continue;const a=r.inspector.get(n,"kind");a!=="react"&&a!=="pixijs"||r.inspector.get(n,"reason")!==void 0||o.push({worldId:n,kind:a,path:r.inspector.get(n,"path"),zOrder:Number(r.inspector.get(n,"zOrder")??0),pausable:r.inspector.get(n,"pausable")!==!1})}return o}function Ze(e){return ne(e)}function Ke(){const e=Ve({fixedTimestep:.016666666666666666,maxSubSteps:8,update:()=>{}});return Ce({loop:e,assets:Fe()})}class qe extends I.Component{constructor(){super(...arguments),this.state={crashed:!1}}static getDerivedStateFromError(){return{crashed:!0}}componentDidCatch(o){this.props.onCaught(o)}render(){return this.state.crashed?null:this.props.children}}function Xe(e,o){return{id:e,surface:"react",description:void 0,adapter:{type:"builtin",identity:"react",surface:"react"},scene:void 0,entry:o,zOrder:0,pausable:!0,loop:"gated",capabilities:{local:"first-party",hosted:"first-party"}}}function se(e,o){e.style.display=xe(o)?"none":"block",e.style.pointerEvents=Se(o)?"auto":"none"}function Ue(e,o,n){const r=document.createElement("div");return r.dataset.worldId=o,r.style.position="absolute",r.style.top="0",r.style.left="0",r.style.width="100%",r.style.height="100%",r.style.zIndex=String(n),r.style.contain="layout paint",se(r,o),N(r),e.appendChild(r),r}function N(e){e.style.transform=ee(te())??"",e.style.transformOrigin="0 0";const o=oe();e.style.width=o.width===null?"100%":`${o.width}px`,e.style.height=o.height===null?"100%":`${o.height}px`}async function Ye(e,o,n,r){if(!e.path)throw new Error(`design-time react layer "${e.worldId}": no \`entry\` declared — nothing to mount.`);await pe({rootPath:n});const a=he(e.worldId),s=fe(e.worldId);if(s){const t=He(n,e.worldId),d=U.get(t),u=a.find(c=>c.id===d)??s;let P=!1,y=null;const S=async(c,b=c.args)=>{const E=await Ee(o,c.modulePath,c.name,c.Component,b);if(E){if(P){E.unmount();return}y=E,r.notifyIngestEdit()}};if(await S(u),!y)throw new Error(`design-time react root "${e.worldId}": default CSF story "${u.name}" was superseded before it mounted.`);const A=new Map(a.map(c=>[c.id,c])),B=new Map;for(const c of a){const b=B.get(c.modulePath);b?b.push(c):B.set(c.modulePath,[c])}const Z=new G(o,r,{worldId:e.worldId,portableStories:a.map(c=>({id:c.id,label:c.label,args:c.args})),portableDocuments:[...B.entries()].map(([c,b])=>({id:`portable-document:${c}`,label:Le(b[0]),path:c,storyIds:b.map(E=>E.id)})),activePortableStoryId:u.id,onPortableStoryApplied:c=>{const b=(c?A.get(c):null)??s;U.set(t,b.id),S(b).catch(E=>{R.error(`[design-time-layers] React root "${e.worldId}" failed applying portable story "${b.name}": ${W(E)}`,"authoring")})},onPortableStoryArgsChanged:(c,b)=>{const E=A.get(c);E&&S(E,b).catch(ae=>{R.error(`[design-time-layers] React root "${e.worldId}" failed updating portable story "${E.name}" args: ${W(ae)}`,"authoring")})}});return{adapter:Z,dispose:()=>{P=!0,Z.disposeReactRootAdapter(),y?.unmount()}}}R.warn(`[design-time-layers] React root "${e.worldId}" has no portable CSF preview. Add a *.stories.tsx module with parameters.vgai.root set to this root id. Falling back to the deprecated inert-Game preview for compatibility.`,"authoring");const f=Xe(e.worldId,e.path),v=await me(f,n),C=await we(n,e.worldId),{createElement:l,createRoot:p,flushSync:i}=await ge(),m=Ke(),g=[ye(e.worldId)??{}],w={},x=p(o),M={entryStory:null,isolation:null},$=t=>{const{entryStory:d,isolation:u}=M,P=u?u.story:d,y=u?w?.[u.componentKey]:void 0,S=u?y?l(y,{...P?.props??{}}):null:l(v,{...P?.props??{}});x.render(l(qe,{key:u?`isolate:${u.componentKey}:${u.story?.id??""}`:P?`story:${P.id}`:"__none__",onCaught:t,children:l(C,{game:m},S)}))};let k=null;if(i(()=>{$(t=>{k=t})}),k!==null)throw x.unmount(),k instanceof Error?k:new Error(String(k));const D=new G(o,r,{storySources:g,worldId:e.worldId,onStoryApplied:t=>{M.entryStory=t,$(d=>{R.error(`[design-time-layers] world "${e.worldId}" crashed applying story "${t?.id??"(cleared)"}": ${W(d)}`,"authoring")})},onIsolate:t=>{M.isolation=t,$(d=>{R.error(`[design-time-layers] world "${e.worldId}" crashed isolating "${t?.componentKey??"(cleared)"}": ${W(d)}`,"authoring")})}});return{adapter:D,dispose:()=>{D.disposeReactRootAdapter(),x.unmount()}}}function Qe(e){const o=e.getBoundingClientRect();return{width:Math.max(1,Math.round(o.width)||e.clientWidth||300),height:Math.max(1,Math.round(o.height)||e.clientHeight||200)}}async function Je(e,o,n,r){if(!e.path)throw new Error(`design-time pixi layer "${e.worldId}": no \`scene\` declared — nothing to mount (B1 display-only mount supports scene-based pixi roots only, not \`entry\`).`);const a=await be(e.path),s=await ve(r),f=document.createElement("canvas");f.style.width="100%",f.style.height="100%",f.style.display="block",o.appendChild(f);const{width:v,height:C}=Qe(n),p=await new Ie({id:e.worldId,sceneData:a,registry:s}).mount({canvas:f,width:v,height:C,transparent:!0});return p.update?.(0),{dispose:()=>p.dispose(),pick:(m,g)=>{const w=f.getBoundingClientRect();if(w.width===0||w.height===0)return null;const x=p.ctx.app.renderer.screen,M=(m-w.left)/w.width*x.width,$=(g-w.top)/w.height*x.height;for(const k of p.stage.children)if(k.getBounds().containsPoint(M,$))return e.worldId;return null}}}let _=!1;function Y(){_||(_=!0,queueMicrotask(()=>{_=!1,window.dispatchEvent(new CustomEvent(ue))}))}function et(e,o,n,r){if(ie(),Ge(),n.playState!=="stopped"){let t=!1,d=!1;const u=n.subscribe(()=>{t||d||n.playState!=="stopped"||(d=!0,t||Y())});return()=>{t=!0,u()}}const a=le()?.rootPath,s=r?[...r]:ne(o);if(s.length===0||!a)return()=>{};const v=de(s.map(t=>({id:t.worldId,zOrder:t.zOrder}))).map(t=>s.find(d=>d.worldId===t.id)),C=new Map(v.map(t=>[t.worldId,t])),l=new Map,p=[],i=new Set;let m=!1,g=!1,w=!1;function x(){for(const t of p.splice(0))try{t()}catch(d){R.error(`[design-time-layers] dispose failed: ${d}`,"authoring")}for(const t of l.values())t.remove();l.clear()}function M(){x();for(const t of i){const d=C.get(t);if(!d)continue;const u={id:d.worldId,kind:d.kind,entryOrScenePath:d.path,zOrder:d.zOrder,pausable:d.pausable};o.replaceChild(t,new O(n,u,"Design-time layer suspended by play mode — Stop restores it."))}i.clear(),n.notifyIngestEdit()}v.forEach((t,d)=>{const u=Ue(e,t.worldId,Ne+d);l.set(t.worldId,u),(t.kind==="react"?Ye(t,u,a,n):Je(t,u,e,a)).then(y=>{if(m||g){y.dispose();return}if(y.adapter)o.replaceChild(t.worldId,y.adapter),i.add(t.worldId);else if(y.pick){const S={id:t.worldId,kind:t.kind,entryOrScenePath:t.path,zOrder:t.zOrder,pausable:t.pausable};o.replaceChild(t.worldId,new O(n,S,void 0,y.pick)),i.add(t.worldId)}p.push(y.dispose),n.notifyIngestEdit()}).catch(y=>{if(u.remove(),l.delete(t.worldId),m||g)return;const S=W(y);R.error(`[design-time-layers] world "${t.worldId}" (${t.kind}) failed to mount: ${S}`,"authoring");const A={id:t.worldId,kind:t.kind,entryOrScenePath:t.path,zOrder:t.zOrder,pausable:t.pausable};o.replaceChild(t.worldId,new O(n,A,S)),ce({worldId:t.worldId,kind:t.kind,identity:t.kind==="react"?"default-react":"default-pixi",message:S}),n.notifyIngestEdit()})});const $=J(()=>{for(const t of l.values())N(t)}),k=re(()=>{for(const t of l.values())N(t)}),D=n.subscribe(()=>{if(!g&&n.playState!=="stopped"){g=!0,M();return}if(g&&!w&&n.playState==="stopped"&&!m){w=!0,m||Y();return}if(!g){for(const[t,d]of l)se(d,t);for(const{worldId:t,adapter:d}of o.childAdapters()){if(!i.has(t)||!(d instanceof G))continue;const u=d.isolatedNodeId;u&&!n.selectedEntityIds.has(u)&&d.stories.isolate?.(null)}}});return()=>{m=!0,D(),$(),k(),x()}}const Q={fill:null,desktop:{width:1440,height:900},tablet:{width:768,height:1024},mobile:{width:390,height:844}};function tt({containerRef:e,context:o}){const n=ke();I.useSyncExternalStore(n.subscribe,n.getSnapshot);const r=I.useSyncExternalStore(J,te),a=I.useSyncExternalStore(re,oe),s=I.useCallback(l=>{const p=e.current;if(!p)return;const i=Math.min(4,Math.max(.1,l)),m=p.clientWidth/2,g=p.clientHeight/2,w=(m-r.x)/r.zoom,x=(g-r.y)/r.zoom;j(m-w*i,g-x*i,i)},[e,r]),f=I.useCallback(()=>{const l=e.current,p=[...n.selectedEntityIds].at(-1);if(!l||!p)return;const i=o?.adapter.rects?.rect(p);if(!i||i.width<=0||i.height<=0)return;const m=Math.max(1,l.clientWidth-96),g=Math.max(1,l.clientHeight-96),w=Math.min(4,Math.max(.1,Math.min(m/i.width,g/i.height)));j(l.clientWidth/2-(i.x+i.width/2)*w,l.clientHeight/2-(i.y+i.height/2)*w,w)},[e,o,n]),v=I.useCallback(l=>{const p=e.current,i=Q[l];if(!p||i===null){L(null,null),j(0,0,1);return}L(i.width,i.height);const m=Math.min(1,Math.max(.1,Math.min((p.clientWidth-96)/i.width,(p.clientHeight-96)/i.height)));j((p.clientWidth-i.width*m)/2,(p.clientHeight-i.height*m)/2,m)},[e]);if(o?.kind!=="react"||!o.adapter.rects)return null;const C=Object.entries(Q).find(([,l])=>l===null?a.width===null:l.width===a.width&&l.height===a.height)?.[0]??"fill";return h.jsxs(h.Fragment,{children:[a.width!==null&&a.height!==null&&h.jsx("div",{"data-testid":"react-canvas-device-frame",style:{position:"absolute",left:0,top:0,zIndex:0,width:a.width,height:a.height,transform:ee(r),transformOrigin:"0 0",pointerEvents:"none",background:"#fff",boxShadow:"0 0 0 1px #ffffff40, 0 8px 30px #0009"}}),h.jsxs(Pe,{label:"React canvas view","data-testid":"react-canvas-zoom-controls",className:"vgai-react-canvas-controls",children:[h.jsxs(Me,{"aria-label":"Responsive viewport",title:"Responsive viewport",value:C,onChange:l=>v(l.target.value),className:"vgai-react-viewport-select",children:[h.jsx("option",{value:"fill",children:"Fill"}),h.jsx("option",{value:"desktop",children:"Desktop · 1440×900"}),h.jsx("option",{value:"tablet",children:"Tablet · 768×1024"}),h.jsx("option",{value:"mobile",children:"Mobile · 390×844"})]}),h.jsx(V,{"aria-label":"Zoom out",title:"Zoom out",size:"comfortable",onClick:()=>s(r.zoom/1.2),children:h.jsx(F,{icon:$e,size:"md"})}),h.jsxs(Re,{variant:"ghost","aria-label":"Reset zoom to 100%",title:"Reset zoom to 100%",size:"comfortable",onClick:()=>s(1),children:[Math.round(r.zoom*100),"%"]}),h.jsx(V,{"aria-label":"Zoom in",title:"Zoom in",size:"comfortable",onClick:()=>s(r.zoom*1.2),children:h.jsx(F,{icon:ze,size:"md"})}),h.jsx(V,{"aria-label":"Zoom to selection",title:"Zoom to selection",size:"comfortable",onClick:f,children:h.jsx(F,{icon:We,size:"md"})})]})]})}function ot(e){return`workspace:world:${e}`}function rt({active:e,composite:o,descriptor:n,store:r}){const a=I.useRef(null),s=I.useRef(null);I.useSyncExternalStore(r.subscribe,r.getSnapshot),I.useEffect(()=>{!e||s.current||!a.current||(s.current=et(a.current,o,r,[n]))},[e,o,n,r]),I.useEffect(()=>()=>{s.current?.(),s.current=null},[]);const f=Oe(Te(r),r.selectedEntityIds),v=f?.worldId===n.worldId?f:null;return h.jsxs("div",{ref:a,"data-testid":`world-document:${n.worldId}`,style:{position:"absolute",inset:0,overflow:"hidden",pointerEvents:"auto",backgroundColor:z.surface.raised,backgroundImage:`linear-gradient(45deg, ${z.surface.chrome} 25%, transparent 25%, transparent 75%, ${z.surface.chrome} 75%), linear-gradient(45deg, ${z.surface.chrome} 25%, transparent 25%, transparent 75%, ${z.surface.chrome} 75%)`,backgroundPosition:"0 0, 8px 8px",backgroundSize:"16px 16px"},children:[h.jsx(Be,{}),h.jsx(tt,{containerRef:a,context:v})]})}function at(e,o){const n=je(),r=[],a=[];for(const s of o.childAdapters())s.role==="world"&&s.kind==="threejs"&&a.push(K(s.worldId,X));for(const s of Ze(o)){const f=ot(s.worldId);a.push(K(s.worldId,f)),r.push(f);const v=C=>h.jsx(rt,{...C,composite:o,descriptor:s,store:e});De({id:f,title:s.worldId,kind:"world",provenance:{rootId:s.worldId,...s.path?{sourcePath:s.path}:{}},Content:v,closeable:!1,onActivate:()=>e.setActiveViewportTab("scene")})}return n?q(n):q(X),()=>{for(const s of a)s();for(const s of r)Ae(s,{discardDirty:!0})}}export{at as installWorldDocuments,ot as worldDocumentId};
|
|
1
|
+
import{am as O,an as ie,ao as le,s as de,o as W,k as R,n as ce,ap as J,D as G,aq as ue,ar as pe,as as he,at as fe,y as me,au as we,av as ge,aw as ye,ax as be,ay as ve,az as Ie,aA as ee,aB as te,aC as xe,aD as Se,aE as Ee,c as Ce,B as I,aF as ke,aG as j,aH as h,aI as Pe,aJ as Me,aK as V,aL as F,aM as $e,aN as Re,aO as ze,aP as We,aQ as K,aR as De,aS as q,aT as X,aU as Ae,aV as je,aW as Oe,aX as Te,aY as z,aZ as Be}from"./index-BvKfaQa-.js";import{c as Ve,a as Fe}from"./game-loop-X827vWLi.js";const _e={width:null,height:null};let T=_e;const H=new Set;function oe(){return T}function L(e,o){const n=e===null?null:Math.max(1,Math.round(e)),r=o===null?null:Math.max(1,Math.round(o));if(!(T.width===n&&T.height===r)){T={width:n,height:r};for(const a of H)a()}}function Ge(){L(null,null)}function re(e){return H.add(e),()=>H.delete(e)}const U=new Map;function He(e,o){return`${e}\0${o}`}function Le(e){const o=e.title?.split("/").filter(Boolean).at(-1)?.trim();if(o)return o;const n=e.modulePath.split("/").pop()??e.modulePath;return n.replace(/\.stories\.[^.]+$/i,"").replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[-_]+/g," ").trim()||n}const Ne=1;function ne(e){const o=[];for(const{worldId:n,adapter:r}of e.childAdapters()){if(!(r instanceof O))continue;const a=r.inspector.get(n,"kind");a!=="react"&&a!=="pixijs"||r.inspector.get(n,"reason")!==void 0||o.push({worldId:n,kind:a,path:r.inspector.get(n,"path"),zOrder:Number(r.inspector.get(n,"zOrder")??0),pausable:r.inspector.get(n,"pausable")!==!1})}return o}function Ze(e){return ne(e)}function Ke(){const e=Ve({fixedTimestep:.016666666666666666,maxSubSteps:8,update:()=>{}});return Ce({loop:e,assets:Fe()})}class qe extends I.Component{constructor(){super(...arguments),this.state={crashed:!1}}static getDerivedStateFromError(){return{crashed:!0}}componentDidCatch(o){this.props.onCaught(o)}render(){return this.state.crashed?null:this.props.children}}function Xe(e,o){return{id:e,surface:"react",description:void 0,adapter:{type:"builtin",identity:"react",surface:"react"},scene:void 0,entry:o,zOrder:0,pausable:!0,loop:"gated",capabilities:{local:"first-party",hosted:"first-party"}}}function se(e,o){e.style.display=xe(o)?"none":"block",e.style.pointerEvents=Se(o)?"auto":"none"}function Ue(e,o,n){const r=document.createElement("div");return r.dataset.worldId=o,r.style.position="absolute",r.style.top="0",r.style.left="0",r.style.width="100%",r.style.height="100%",r.style.zIndex=String(n),r.style.contain="layout paint",se(r,o),N(r),e.appendChild(r),r}function N(e){e.style.transform=ee(te())??"",e.style.transformOrigin="0 0";const o=oe();e.style.width=o.width===null?"100%":`${o.width}px`,e.style.height=o.height===null?"100%":`${o.height}px`}async function Ye(e,o,n,r){if(!e.path)throw new Error(`design-time react layer "${e.worldId}": no \`entry\` declared — nothing to mount.`);await pe({rootPath:n});const a=he(e.worldId),s=fe(e.worldId);if(s){const t=He(n,e.worldId),d=U.get(t),u=a.find(c=>c.id===d)??s;let P=!1,y=null;const S=async(c,b=c.args)=>{const E=await Ee(o,c.modulePath,c.name,c.Component,b);if(E){if(P){E.unmount();return}y=E,r.notifyIngestEdit()}};if(await S(u),!y)throw new Error(`design-time react root "${e.worldId}": default CSF story "${u.name}" was superseded before it mounted.`);const A=new Map(a.map(c=>[c.id,c])),B=new Map;for(const c of a){const b=B.get(c.modulePath);b?b.push(c):B.set(c.modulePath,[c])}const Z=new G(o,r,{worldId:e.worldId,portableStories:a.map(c=>({id:c.id,label:c.label,args:c.args})),portableDocuments:[...B.entries()].map(([c,b])=>({id:`portable-document:${c}`,label:Le(b[0]),path:c,storyIds:b.map(E=>E.id)})),activePortableStoryId:u.id,onPortableStoryApplied:c=>{const b=(c?A.get(c):null)??s;U.set(t,b.id),S(b).catch(E=>{R.error(`[design-time-layers] React root "${e.worldId}" failed applying portable story "${b.name}": ${W(E)}`,"authoring")})},onPortableStoryArgsChanged:(c,b)=>{const E=A.get(c);E&&S(E,b).catch(ae=>{R.error(`[design-time-layers] React root "${e.worldId}" failed updating portable story "${E.name}" args: ${W(ae)}`,"authoring")})}});return{adapter:Z,dispose:()=>{P=!0,Z.disposeReactRootAdapter(),y?.unmount()}}}R.warn(`[design-time-layers] React root "${e.worldId}" has no portable CSF preview. Add a *.stories.tsx module with parameters.vgai.root set to this root id. Falling back to the deprecated inert-Game preview for compatibility.`,"authoring");const f=Xe(e.worldId,e.path),v=await me(f,n),C=await we(n,e.worldId),{createElement:l,createRoot:p,flushSync:i}=await ge(),m=Ke(),g=[ye(e.worldId)??{}],w={},x=p(o),M={entryStory:null,isolation:null},$=t=>{const{entryStory:d,isolation:u}=M,P=u?u.story:d,y=u?w?.[u.componentKey]:void 0,S=u?y?l(y,{...P?.props??{}}):null:l(v,{...P?.props??{}});x.render(l(qe,{key:u?`isolate:${u.componentKey}:${u.story?.id??""}`:P?`story:${P.id}`:"__none__",onCaught:t,children:l(C,{game:m},S)}))};let k=null;if(i(()=>{$(t=>{k=t})}),k!==null)throw x.unmount(),k instanceof Error?k:new Error(String(k));const D=new G(o,r,{storySources:g,worldId:e.worldId,onStoryApplied:t=>{M.entryStory=t,$(d=>{R.error(`[design-time-layers] world "${e.worldId}" crashed applying story "${t?.id??"(cleared)"}": ${W(d)}`,"authoring")})},onIsolate:t=>{M.isolation=t,$(d=>{R.error(`[design-time-layers] world "${e.worldId}" crashed isolating "${t?.componentKey??"(cleared)"}": ${W(d)}`,"authoring")})}});return{adapter:D,dispose:()=>{D.disposeReactRootAdapter(),x.unmount()}}}function Qe(e){const o=e.getBoundingClientRect();return{width:Math.max(1,Math.round(o.width)||e.clientWidth||300),height:Math.max(1,Math.round(o.height)||e.clientHeight||200)}}async function Je(e,o,n,r){if(!e.path)throw new Error(`design-time pixi layer "${e.worldId}": no \`scene\` declared — nothing to mount (B1 display-only mount supports scene-based pixi roots only, not \`entry\`).`);const a=await be(e.path),s=await ve(r),f=document.createElement("canvas");f.style.width="100%",f.style.height="100%",f.style.display="block",o.appendChild(f);const{width:v,height:C}=Qe(n),p=await new Ie({id:e.worldId,sceneData:a,registry:s}).mount({canvas:f,width:v,height:C,transparent:!0});return p.update?.(0),{dispose:()=>p.dispose(),pick:(m,g)=>{const w=f.getBoundingClientRect();if(w.width===0||w.height===0)return null;const x=p.ctx.app.renderer.screen,M=(m-w.left)/w.width*x.width,$=(g-w.top)/w.height*x.height;for(const k of p.stage.children)if(k.getBounds().containsPoint(M,$))return e.worldId;return null}}}let _=!1;function Y(){_||(_=!0,queueMicrotask(()=>{_=!1,window.dispatchEvent(new CustomEvent(ue))}))}function et(e,o,n,r){if(ie(),Ge(),n.playState!=="stopped"){let t=!1,d=!1;const u=n.subscribe(()=>{t||d||n.playState!=="stopped"||(d=!0,t||Y())});return()=>{t=!0,u()}}const a=le()?.rootPath,s=r?[...r]:ne(o);if(s.length===0||!a)return()=>{};const v=de(s.map(t=>({id:t.worldId,zOrder:t.zOrder}))).map(t=>s.find(d=>d.worldId===t.id)),C=new Map(v.map(t=>[t.worldId,t])),l=new Map,p=[],i=new Set;let m=!1,g=!1,w=!1;function x(){for(const t of p.splice(0))try{t()}catch(d){R.error(`[design-time-layers] dispose failed: ${d}`,"authoring")}for(const t of l.values())t.remove();l.clear()}function M(){x();for(const t of i){const d=C.get(t);if(!d)continue;const u={id:d.worldId,kind:d.kind,entryOrScenePath:d.path,zOrder:d.zOrder,pausable:d.pausable};o.replaceChild(t,new O(n,u,"Design-time layer suspended by play mode — Stop restores it."))}i.clear(),n.notifyIngestEdit()}v.forEach((t,d)=>{const u=Ue(e,t.worldId,Ne+d);l.set(t.worldId,u),(t.kind==="react"?Ye(t,u,a,n):Je(t,u,e,a)).then(y=>{if(m||g){y.dispose();return}if(y.adapter)o.replaceChild(t.worldId,y.adapter),i.add(t.worldId);else if(y.pick){const S={id:t.worldId,kind:t.kind,entryOrScenePath:t.path,zOrder:t.zOrder,pausable:t.pausable};o.replaceChild(t.worldId,new O(n,S,void 0,y.pick)),i.add(t.worldId)}p.push(y.dispose),n.notifyIngestEdit()}).catch(y=>{if(u.remove(),l.delete(t.worldId),m||g)return;const S=W(y);R.error(`[design-time-layers] world "${t.worldId}" (${t.kind}) failed to mount: ${S}`,"authoring");const A={id:t.worldId,kind:t.kind,entryOrScenePath:t.path,zOrder:t.zOrder,pausable:t.pausable};o.replaceChild(t.worldId,new O(n,A,S)),ce({worldId:t.worldId,kind:t.kind,identity:t.kind==="react"?"default-react":"default-pixi",message:S}),n.notifyIngestEdit()})});const $=J(()=>{for(const t of l.values())N(t)}),k=re(()=>{for(const t of l.values())N(t)}),D=n.subscribe(()=>{if(!g&&n.playState!=="stopped"){g=!0,M();return}if(g&&!w&&n.playState==="stopped"&&!m){w=!0,m||Y();return}if(!g){for(const[t,d]of l)se(d,t);for(const{worldId:t,adapter:d}of o.childAdapters()){if(!i.has(t)||!(d instanceof G))continue;const u=d.isolatedNodeId;u&&!n.selectedEntityIds.has(u)&&d.stories.isolate?.(null)}}});return()=>{m=!0,D(),$(),k(),x()}}const Q={fill:null,desktop:{width:1440,height:900},tablet:{width:768,height:1024},mobile:{width:390,height:844}};function tt({containerRef:e,context:o}){const n=ke();I.useSyncExternalStore(n.subscribe,n.getSnapshot);const r=I.useSyncExternalStore(J,te),a=I.useSyncExternalStore(re,oe),s=I.useCallback(l=>{const p=e.current;if(!p)return;const i=Math.min(4,Math.max(.1,l)),m=p.clientWidth/2,g=p.clientHeight/2,w=(m-r.x)/r.zoom,x=(g-r.y)/r.zoom;j(m-w*i,g-x*i,i)},[e,r]),f=I.useCallback(()=>{const l=e.current,p=[...n.selectedEntityIds].at(-1);if(!l||!p)return;const i=o?.adapter.rects?.rect(p);if(!i||i.width<=0||i.height<=0)return;const m=Math.max(1,l.clientWidth-96),g=Math.max(1,l.clientHeight-96),w=Math.min(4,Math.max(.1,Math.min(m/i.width,g/i.height)));j(l.clientWidth/2-(i.x+i.width/2)*w,l.clientHeight/2-(i.y+i.height/2)*w,w)},[e,o,n]),v=I.useCallback(l=>{const p=e.current,i=Q[l];if(!p||i===null){L(null,null),j(0,0,1);return}L(i.width,i.height);const m=Math.min(1,Math.max(.1,Math.min((p.clientWidth-96)/i.width,(p.clientHeight-96)/i.height)));j((p.clientWidth-i.width*m)/2,(p.clientHeight-i.height*m)/2,m)},[e]);if(o?.kind!=="react"||!o.adapter.rects)return null;const C=Object.entries(Q).find(([,l])=>l===null?a.width===null:l.width===a.width&&l.height===a.height)?.[0]??"fill";return h.jsxs(h.Fragment,{children:[a.width!==null&&a.height!==null&&h.jsx("div",{"data-testid":"react-canvas-device-frame",style:{position:"absolute",left:0,top:0,zIndex:0,width:a.width,height:a.height,transform:ee(r),transformOrigin:"0 0",pointerEvents:"none",background:"#fff",boxShadow:"0 0 0 1px #ffffff40, 0 8px 30px #0009"}}),h.jsxs(Pe,{label:"React canvas view","data-testid":"react-canvas-zoom-controls",className:"vgai-react-canvas-controls",children:[h.jsxs(Me,{"aria-label":"Responsive viewport",title:"Responsive viewport",value:C,onChange:l=>v(l.target.value),className:"vgai-react-viewport-select",children:[h.jsx("option",{value:"fill",children:"Fill"}),h.jsx("option",{value:"desktop",children:"Desktop · 1440×900"}),h.jsx("option",{value:"tablet",children:"Tablet · 768×1024"}),h.jsx("option",{value:"mobile",children:"Mobile · 390×844"})]}),h.jsx(V,{"aria-label":"Zoom out",title:"Zoom out",size:"comfortable",onClick:()=>s(r.zoom/1.2),children:h.jsx(F,{icon:$e,size:"md"})}),h.jsxs(Re,{variant:"ghost","aria-label":"Reset zoom to 100%",title:"Reset zoom to 100%",size:"comfortable",onClick:()=>s(1),children:[Math.round(r.zoom*100),"%"]}),h.jsx(V,{"aria-label":"Zoom in",title:"Zoom in",size:"comfortable",onClick:()=>s(r.zoom*1.2),children:h.jsx(F,{icon:ze,size:"md"})}),h.jsx(V,{"aria-label":"Zoom to selection",title:"Zoom to selection",size:"comfortable",onClick:f,children:h.jsx(F,{icon:We,size:"md"})})]})]})}function ot(e){return`workspace:world:${e}`}function rt({active:e,composite:o,descriptor:n,store:r}){const a=I.useRef(null),s=I.useRef(null);I.useSyncExternalStore(r.subscribe,r.getSnapshot),I.useEffect(()=>{!e||s.current||!a.current||(s.current=et(a.current,o,r,[n]))},[e,o,n,r]),I.useEffect(()=>()=>{s.current?.(),s.current=null},[]);const f=Oe(Te(r),r.selectedEntityIds),v=f?.worldId===n.worldId?f:null;return h.jsxs("div",{ref:a,"data-testid":`world-document:${n.worldId}`,style:{position:"absolute",inset:0,overflow:"hidden",pointerEvents:"auto",backgroundColor:z.surface.raised,backgroundImage:`linear-gradient(45deg, ${z.surface.chrome} 25%, transparent 25%, transparent 75%, ${z.surface.chrome} 75%), linear-gradient(45deg, ${z.surface.chrome} 25%, transparent 25%, transparent 75%, ${z.surface.chrome} 75%)`,backgroundPosition:"0 0, 8px 8px",backgroundSize:"16px 16px"},children:[h.jsx(Be,{}),h.jsx(tt,{containerRef:a,context:v})]})}function at(e,o){const n=je(),r=[],a=[];for(const s of o.childAdapters())s.role==="world"&&s.kind==="threejs"&&a.push(K(s.worldId,X));for(const s of Ze(o)){const f=ot(s.worldId);a.push(K(s.worldId,f)),r.push(f);const v=C=>h.jsx(rt,{...C,composite:o,descriptor:s,store:e});De({id:f,title:s.worldId,kind:"world",provenance:{rootId:s.worldId,...s.path?{sourcePath:s.path}:{}},Content:v,closeable:!1,onActivate:()=>e.setActiveViewportTab("scene")})}return n?q(n):q(X),()=>{for(const s of a)s();for(const s of r)Ae(s,{discardDirty:!0})}}export{at as installWorldDocuments,ot as worldDocumentId};
|
package/dist/index.html
CHANGED
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
static <style> block keeps only the pre-paint shell layout that must
|
|
26
26
|
be present before any script runs. */
|
|
27
27
|
</style>
|
|
28
|
-
<script type="module" crossorigin src="/assets/index-
|
|
29
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
28
|
+
<script type="module" crossorigin src="/assets/index-BvKfaQa-.js"></script>
|
|
29
|
+
<link rel="stylesheet" crossorigin href="/assets/index-BtZ1fX9i.css">
|
|
30
30
|
</head>
|
|
31
31
|
<body>
|
|
32
32
|
<div id="editor-chrome-root">
|