handler-playable-sdk 0.1.16 → 0.1.17

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.
@@ -1,4 +1,4 @@
1
- var u={};function I(e,t,n=!1){u[e]||(u[e]=[]),u[e].push({fn:t,once:n})}function V(e,t){if(u[e]){if(!t){delete u[e];return}u[e]=u[e].filter(n=>n.fn!==t)}}function P(e,...t){let n=u[e];if(n)for(let i of[...n])i.fn(...t),i.once&&V(e,i.fn)}function a(e,t){I(e,t,!0)}var R={name:"handler-playable-sdk",version:"0.1.16",description:"Handler Playable SDK v0.1 with contract-aligned surface (root sandbox, canonical event envelope).",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.js"},"./pixi":{types:"./dist/pixi/index.d.ts",import:"./dist/pixi/index.mjs",require:"./dist/pixi/index.js"},"./three":{types:"./dist/three/index.d.ts",import:"./dist/three/index.mjs",require:"./dist/three/index.js"}},scripts:{build:"tsup src/index.ts src/pixi/index.ts src/three/index.ts --format cjs,esm --dts --clean --minify",lint:"eslint 'src/**/*.{ts,tsx}'",typecheck:"tsc --noEmit",prepublishOnly:"npm run build","publish:update":"node scripts/publish-and-update.js patch","publish:update:minor":"node scripts/publish-and-update.js minor","publish:update:major":"node scripts/publish-and-update.js major"},author:"Handler",license:"MIT",publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/HandlerAIGames/handler-playable-sdk.git"},files:["dist","LICENSE","README.md"],peerDependencies:{"pixi.js":"^8.0.0",three:"^0.160.0"},peerDependenciesMeta:{"pixi.js":{optional:!0},three:{optional:!0}},devDependencies:{"@types/three":"^0.160.0",eslint:"^8.57.1","pixi.js":"^8.8.1",three:"^0.160.0","ts-node":"^10.9.2",tsup:"^8.4.0",typescript:"^5.7.2"}};var s=0,Se=s++,Z=s++,ee=s++,te=s++,ne=s++,ie=s++,oe=s++,re=s++,ae=s++,se=s++,de=s++,le=s++,r=Se;function ce(){return r===Z}function ue(){return r===ee}function pe(){return r===te}function fe(){return r===ne}function g(){return r===ie}function y(){return r===oe}function me(){return r===re}function ge(){return r===ae}function ye(){return r===se}function H(){return r===de}function F(){return r===le}function we(){let e=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none",t=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed";if(e==="mraid")try{mraid.getState(),r=Z;return}catch{}else if(e==="dapi")try{dapi.isReady(),r=ee;return}catch{}if(t==="facebook")try{typeof FbPlayableAd!="undefined"&&(r=te)}catch{}else if(t==="google")try{typeof ExitApi!="undefined"&&(r=ne)}catch{}else if(t==="mintegral")window.gameReady&&(r=ie);else if(t==="tapjoy")window.TJ_API&&(r=oe);else if(t==="tiktok")window.openAppStore&&(r=re);else if(t==="smadex")try{window.smxTracking&&(r=ae)}catch{}else if(t==="snapchat")try{window.ScPlayableAd&&(r=se)}catch{}else t==="vungle"?r=de:(e==="nucleo"||t==="nucleo")&&(r=le)}var Ee={mechanic_id:"TODO_mechanic_id",variant_id:"TODO_variant_id",deployment_id:"TODO_deployment_id",export_id:"TODO_export_id",profile_id:"TODO_profile_id",instance_id:"default"},Ce=Math.random().toString(36).slice(2),w=null,A={...Ee},Ae="web_embed",De={},G=!1,E=!1,T=!1,ke=!1,B=1,W=0,z=!1,d=!1,N="",h=Math.floor(window.innerWidth),b=Math.floor(window.innerHeight),K=h>b,l=!1,k=!1,he=!1,be=!1,U=!1,M=null;function _e(){if(w)return w;let e=document.createElement("div");return e.id="handler-root",e.setAttribute("data-handler-root","true"),document.body.appendChild(e),w=e,e}function j(e){switch(e){case"interaction":return"engagement";case"finish":return"complete";case"install":return"cta_click";default:return e}}function Te(e,t){return{event_name:e,ts:Date.now(),session_id:Ce,deployment_id:A.deployment_id,variant_id:A.variant_id,export_profile_id:A.profile_id,instance_id:A.instance_id||"default",env:Ae==="mraid"?"mraid":"web",payload:t}}function o(e,t){let n=j(e),i=Te(n,t);P(n,i),n!==e&&P(e,i)}function O(){M&&(M(h,b),M=null)}function _(e){B=e,o("volume",e)}function v(e){e&&(ke=!0),!T&&(T=!0,o("pause"),_(0))}function S(e){!e&&ke||T&&(T=!1,o("resume"),_(B))}function f(e,t){h=Math.floor(e||window.innerWidth),b=Math.floor(t||window.innerHeight),K=h>b,o("resize",{width:h,height:b})}function Le(){if(ce())try{let e=mraid.getMaxSize();f(e.width,e.height);let t=()=>{mraid.isViewable()&&mraid.getState()!=="hidden"?S():v()};if(mraid.addEventListener("viewableChange",t),mraid.addEventListener("stateChange",t),mraid.addEventListener("sizeChange",()=>{let n=mraid.getMaxSize();f(n.width,n.height)}),mraid.getAudioVolume){let n=mraid.getAudioVolume();_(n?1:0)}if(mraid.addEventListener("audioVolumeChange",n=>{n!==null&&_(n>0?1:0)}),mraid.addEventListener("error",(n,i)=>{console.warn("mraid error:",n,"action:",i)}),z=!0,mraid.isViewable()&&mraid.getState()!=="hidden")l=!0,o("boot"),o("view"),o("ready"),d=!0,O();else{let n=()=>{l=!0,o("boot"),o("view"),o("ready"),d=!0,O()};mraid.addEventListener("ready",n)}}catch(e){console.warn("MRAID hook skipped",e)}}function Ie(){if(ue())try{let e=dapi.getScreenSize();f(e.width,e.height),dapi.addEventListener("viewableChange",n=>{n.isViewable?S():v()}),dapi.addEventListener("adResized",n=>{let i=dapi.getScreenSize();f(n.width||i.width,n.height||i.height)});let t=dapi.getAudioVolume();if(_(t?1:0),dapi.addEventListener("audioVolumeChange",n=>_(n?1:0)),z=!0,dapi.isViewable())l=!0,o("boot"),o("view"),o("ready"),d=!0,O();else{let n=()=>{l=!0,o("boot"),o("view"),o("ready"),d=!0,O()};dapi.addEventListener("ready",n)}}catch(e){console.warn("DAPI hook skipped",e)}}function ve(){let e=()=>{l||document.visibilityState==="visible"&&(document.readyState==="complete"||document.readyState==="interactive")&&(l=!0,o("boot"),o("view"),o("ready"),d=!0,O(),k&&(k=!1,p.start()))};window.addEventListener("resize",()=>f()),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"?(S(),e()):v()}),document.readyState==="complete"||document.readyState==="interactive"?e():window.addEventListener("load",e),z=!0}function Pe(){let e=t=>{typeof TouchEvent!="undefined"&&t instanceof TouchEvent&&(he=!0),!(he&&t instanceof MouseEvent)&&(W+=1,o("interaction",W))};document.addEventListener("mousedown",e),document.addEventListener("touchstart",e)}function Re(e){var i,c,x,C,J,D,q,L,$,X,Y,Q;let t=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none";if((typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed")==="google")try{(i=window.ExitApi)==null||i.exit();return}catch{}if(t==="mraid"&&typeof mraid!="undefined")mraid.open(e||"");else if(t==="dapi"&&typeof dapi!="undefined")dapi.openStoreUrl();else if(y())(x=(c=window.TJ_API)==null?void 0:c.click)==null||x.call(c);else if(pe())(J=(C=window.FbPlayableAd)==null?void 0:C.onCTAClick)==null||J.call(C);else if(ye())(q=(D=window.ScPlayableAd)==null?void 0:D.onCTAClick)==null||q.call(D);else if(ge())try{($=(L=window.smxTracking)==null?void 0:L.redirect)==null||$.call(L)}catch(m){console.warn("Smadex redirect failed",m)}else if(fe()){let m=window.ExitApi;m&&typeof m.exit=="function"?m.exit(e||N||""):e&&window.open(e)}else g()?(X=window.install)==null||X.call(window):me()?(Y=window.openAppStore)==null||Y.call(window):H()?(Q=parent==null?void 0:parent.postMessage)==null||Q.call(parent,"download","*"):e&&window.open(e)}function Me(){let e=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed",t=n=>{if(!n)return;let i=new Image;i.src=n};if(e==="bigabid"){let n=window.BIGABID_BIDTIMEMACROS;if(!n)return;a("view",()=>t(n.mraid_viewable)),a("start",()=>t(n.game_viewable)),a("engagement",()=>t(n.engagement));let i=()=>t(n.complete);a("complete",i),I("engagement",c=>{var x;((x=c==null?void 0:c.payload)==null?void 0:x.count)>3&&i()}),a("cta_click",()=>t(n.click))}else if(e==="inmobi"){let n=window.INMOBI_DSPMACROS;if(!n)return;a("view",()=>t(n.Ad_Load_Start)),a("start",()=>t(n.Ad_Viewable)),a("engagement",()=>t(n.First_Engagement)),a("complete",()=>t(n.Gameplay_Complete)),a("cta_click",()=>t(n.DSP_Click)),a("start",()=>{[5,10,15,20,25,30].forEach(i=>setTimeout(()=>t(n[`Spent_${i}_Seconds`]),i*1e3))})}}function je(){if(!y())return;let e=window.TJ_API;e&&e.setPlayableAPI&&e.setPlayableAPI({skipAd:()=>{try{p.finish()}catch(t){console.warn("Tapjoy skip failed",t)}}})}function xe(){var t,n,i;let e=window.TJ_API;(t=e==null?void 0:e.objectiveComplete)==null||t.call(e),(n=e==null?void 0:e.playableFinished)==null||n.call(e),(i=e==null?void 0:e.gameplayFinished)==null||i.call(e)}function Ne(){g()&&(window.mintGameStart=()=>{S(!0),f()},window.mintGameClose=()=>{v(!0)})}function ze(){if(!F())return;let e=window.NUC;!e||!e.trigger||(p.on("cta_click",()=>{var t,n;return(n=(t=e.trigger).convert)==null?void 0:n.call(t,N)}),p.on("complete",()=>{var t,n;return(n=(t=e.trigger).tryAgain)==null?void 0:n.call(t)}))}var p={init(e={},t){if(Ae=e.profile||"web_embed",De=e.consent||{},A={...Ee,...e.ids||{}},w=e.rootEl||w,N=e.destinationUrl||(/android/i.test(navigator.userAgent)?"https://play.google.com/store":"https://www.apple.com/app-store/"),t&&(M=t),o("init"),document.body.oncontextmenu=()=>!1,_e(),Ve(w),we(),Le(),Ie(),!z){if(document.readyState==="complete")ve();else if(!be){be=!0;let n=()=>{ve(),window.removeEventListener("load",n),document.removeEventListener("DOMContentLoaded",n)};window.addEventListener("load",n),document.addEventListener("DOMContentLoaded",n)}}Pe(),Me(),je(),Ne(),ze(),console.log(`%c @handler/playable-sdk %c v${R.version||"0.0.0"} `,"background: #007acc; color: #fff; font-size: 14px; padding: 4px 8px; border-top-left-radius: 4px; border-bottom-left-radius: 4px;","background: #e1e4e8; color: #333; font-size: 14px; padding: 4px 8px; border-top-right-radius: 4px; border-bottom-right-radius: 4px;"),l&&!d&&(o("boot"),o("view"),o("ready"),k&&(k=!1,p.start()),d=!0),d=l},getRoot(){return _e()},get version(){return R.version||"0.0.0"},get maxWidth(){return h},get maxHeight(){return b},get isLandscape(){return K},get isReady(){return d},get isStarted(){return G},get isPaused(){return T},get isFinished(){return E},get volume(){return B},get interactions(){return W},on(e,t){I(j(e),t)},off(e,t){V(j(e),t)},start(){var e,t;if(!G){if(!l){k=!0;return}if(G=!0,o("start"),f(),g())v(),(e=window.gameReady)==null||e.call(window);else if(y()){let n=window.TJ_API;(t=n==null?void 0:n.setPlayableBuild)==null||t.call(n,{orientation:K?"landscape":"portrait",buildID:R.version||"dev"})}}},finish(){var e,t;E||(E=!0,o("complete"),g()?(e=window.gameEnd)==null||e.call(window):H()?(t=parent==null?void 0:parent.postMessage)==null||t.call(parent,"complete","*"):y()&&xe())},install(e){if(!E){E=!0,y()?(xe(),setTimeout(()=>p.install(e),300)):(o("complete"),setTimeout(()=>p.install(e),0));return}U||(U=!0,setTimeout(()=>U=!1,500),o("cta_click"),o("conversion"),Re(e||N))},emit(e,t){let n=j(e);if(!["view","boot","start","engagement","complete","cta_click","conversion","retry","pause","resume","resize","volume","error"].includes(n)&&!n.startsWith("custom."))throw new Error(`Event ${e} must be canonical or namespaced as custom.<mechanic_id>.<event>`);let i=Te(n,t);P(n,i)},retry(){var e,t,n;if(g())(e=window.gameRetry)==null||e.call(window);else if(F()){let i=window.NUC;(n=(t=i==null?void 0:i.trigger)==null?void 0:t.tryAgain)==null||n.call(t)}o("engagement",{action:"retry"})},pause(){v(!0)},resume(){S(!0)},resize(e,t){f(e,t)}},Be=p;function Ve(e){let t=document.createElement("script");t.type="text/javascript",t.textContent=`
1
+ var u={};function I(e,t,n=!1){u[e]||(u[e]=[]),u[e].push({fn:t,once:n})}function V(e,t){if(u[e]){if(!t){delete u[e];return}u[e]=u[e].filter(n=>n.fn!==t)}}function P(e,...t){let n=u[e];if(n)for(let i of[...n])i.fn(...t),i.once&&V(e,i.fn)}function a(e,t){I(e,t,!0)}var R={name:"handler-playable-sdk",version:"0.1.17",description:"Handler Playable SDK v0.1 with contract-aligned surface (root sandbox, canonical event envelope).",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.js"},"./pixi":{types:"./dist/pixi/index.d.ts",import:"./dist/pixi/index.mjs",require:"./dist/pixi/index.js"},"./three":{types:"./dist/three/index.d.ts",import:"./dist/three/index.mjs",require:"./dist/three/index.js"}},scripts:{build:"tsup src/index.ts src/pixi/index.ts src/three/index.ts --format cjs,esm --dts --clean --minify",lint:"eslint 'src/**/*.{ts,tsx}'",typecheck:"tsc --noEmit",prepublishOnly:"npm run build","publish:update":"node scripts/publish-and-update.js patch","publish:update:minor":"node scripts/publish-and-update.js minor","publish:update:major":"node scripts/publish-and-update.js major"},author:"Handler",license:"MIT",publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/HandlerAIGames/handler-playable-sdk.git"},files:["dist","LICENSE","README.md"],peerDependencies:{"pixi.js":"^8.0.0",three:"^0.160.0"},peerDependenciesMeta:{"pixi.js":{optional:!0},three:{optional:!0}},devDependencies:{"@types/three":"^0.160.0",eslint:"^8.57.1","pixi.js":"^8.8.1",three:"^0.160.0","ts-node":"^10.9.2",tsup:"^8.4.0",typescript:"^5.7.2"}};var s=0,Se=s++,Z=s++,ee=s++,te=s++,ne=s++,ie=s++,oe=s++,re=s++,ae=s++,se=s++,de=s++,le=s++,r=Se;function ce(){return r===Z}function ue(){return r===ee}function pe(){return r===te}function fe(){return r===ne}function g(){return r===ie}function y(){return r===oe}function me(){return r===re}function ge(){return r===ae}function ye(){return r===se}function H(){return r===de}function F(){return r===le}function we(){let e=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none",t=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed";if(e==="mraid")try{mraid.getState(),r=Z;return}catch{}else if(e==="dapi")try{dapi.isReady(),r=ee;return}catch{}if(t==="facebook")try{typeof FbPlayableAd!="undefined"&&(r=te)}catch{}else if(t==="google")try{typeof ExitApi!="undefined"&&(r=ne)}catch{}else if(t==="mintegral")window.gameReady&&(r=ie);else if(t==="tapjoy")window.TJ_API&&(r=oe);else if(t==="tiktok")window.openAppStore&&(r=re);else if(t==="smadex")try{window.smxTracking&&(r=ae)}catch{}else if(t==="snapchat")try{window.ScPlayableAd&&(r=se)}catch{}else t==="vungle"?r=de:(e==="nucleo"||t==="nucleo")&&(r=le)}var Ee={mechanic_id:"TODO_mechanic_id",variant_id:"TODO_variant_id",deployment_id:"TODO_deployment_id",export_id:"TODO_export_id",profile_id:"TODO_profile_id",instance_id:"default"},Ce=Math.random().toString(36).slice(2),w=null,A={...Ee},Ae="web_embed",De={},G=!1,E=!1,T=!1,ke=!1,B=1,W=0,z=!1,d=!1,N="",h=Math.floor(window.innerWidth),b=Math.floor(window.innerHeight),K=h>b,l=!1,k=!1,he=!1,be=!1,U=!1,M=null;function _e(){if(w)return w;let e=document.createElement("div");return e.id="handler-root",e.setAttribute("data-handler-root","true"),document.body.appendChild(e),w=e,e}function j(e){switch(e){case"interaction":return"engagement";case"finish":return"complete";case"install":return"cta_click";default:return e}}function Te(e,t){return{event_name:e,ts:Date.now(),session_id:Ce,deployment_id:A.deployment_id,variant_id:A.variant_id,export_profile_id:A.profile_id,instance_id:A.instance_id||"default",env:Ae==="mraid"?"mraid":"web",payload:t}}function o(e,t){let n=j(e),i=Te(n,t);P(n,i),n!==e&&P(e,i)}function O(){M&&(M(h,b),M=null)}function _(e){B=e,o("volume",e)}function v(e){e&&(ke=!0),!T&&(T=!0,o("pause"),_(0))}function S(e){!e&&ke||T&&(T=!1,o("resume"),_(B))}function f(e,t){h=Math.floor(e||window.innerWidth),b=Math.floor(t||window.innerHeight),K=h>b,o("resize",{width:h,height:b})}function Le(){if(ce())try{let e=mraid.getMaxSize();f(e.width,e.height);let t=()=>{mraid.isViewable()&&mraid.getState()!=="hidden"?S():v()};if(mraid.addEventListener("viewableChange",t),mraid.addEventListener("stateChange",t),mraid.addEventListener("sizeChange",()=>{let n=mraid.getMaxSize();f(n.width,n.height)}),mraid.getAudioVolume){let n=mraid.getAudioVolume();_(n?1:0)}if(mraid.addEventListener("audioVolumeChange",n=>{n!==null&&_(n>0?1:0)}),mraid.addEventListener("error",(n,i)=>{console.warn("mraid error:",n,"action:",i)}),z=!0,mraid.isViewable()&&mraid.getState()!=="hidden")l=!0,o("boot"),o("view"),o("ready"),d=!0,O();else{let n=()=>{l=!0,o("boot"),o("view"),o("ready"),d=!0,O()};mraid.addEventListener("ready",n)}}catch(e){console.warn("MRAID hook skipped",e)}}function Ie(){if(ue())try{let e=dapi.getScreenSize();f(e.width,e.height),dapi.addEventListener("viewableChange",n=>{n.isViewable?S():v()}),dapi.addEventListener("adResized",n=>{let i=dapi.getScreenSize();f(n.width||i.width,n.height||i.height)});let t=dapi.getAudioVolume();if(_(t?1:0),dapi.addEventListener("audioVolumeChange",n=>_(n?1:0)),z=!0,dapi.isViewable())l=!0,o("boot"),o("view"),o("ready"),d=!0,O();else{let n=()=>{l=!0,o("boot"),o("view"),o("ready"),d=!0,O()};dapi.addEventListener("ready",n)}}catch(e){console.warn("DAPI hook skipped",e)}}function ve(){let e=()=>{l||document.visibilityState==="visible"&&(document.readyState==="complete"||document.readyState==="interactive")&&(l=!0,o("boot"),o("view"),o("ready"),d=!0,O(),k&&(k=!1,p.start()))};window.addEventListener("resize",()=>f()),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"?(S(),e()):v()}),document.readyState==="complete"||document.readyState==="interactive"?e():window.addEventListener("load",e),z=!0}function Pe(){let e=t=>{typeof TouchEvent!="undefined"&&t instanceof TouchEvent&&(he=!0),!(he&&t instanceof MouseEvent)&&(W+=1,o("interaction",W))};document.addEventListener("mousedown",e),document.addEventListener("touchstart",e)}function Re(e){var i,c,x,C,J,D,q,L,$,X,Y,Q;let t=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none";if((typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed")==="google")try{(i=window.ExitApi)==null||i.exit();return}catch{}if(t==="mraid"&&typeof mraid!="undefined")mraid.open(e||"");else if(t==="dapi"&&typeof dapi!="undefined")dapi.openStoreUrl();else if(y())(x=(c=window.TJ_API)==null?void 0:c.click)==null||x.call(c);else if(pe())(J=(C=window.FbPlayableAd)==null?void 0:C.onCTAClick)==null||J.call(C);else if(ye())(q=(D=window.ScPlayableAd)==null?void 0:D.onCTAClick)==null||q.call(D);else if(ge())try{($=(L=window.smxTracking)==null?void 0:L.redirect)==null||$.call(L)}catch(m){console.warn("Smadex redirect failed",m)}else if(fe()){let m=window.ExitApi;m&&typeof m.exit=="function"?m.exit(e||N||""):e&&window.open(e)}else g()?(X=window.install)==null||X.call(window):me()?(Y=window.openAppStore)==null||Y.call(window):H()?(Q=parent==null?void 0:parent.postMessage)==null||Q.call(parent,"download","*"):e&&window.open(e)}function Me(){let e=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed",t=n=>{if(!n)return;let i=new Image;i.src=n};if(e==="bigabid"){let n=window.BIGABID_BIDTIMEMACROS;if(!n)return;a("view",()=>t(n.mraid_viewable)),a("start",()=>t(n.game_viewable)),a("engagement",()=>t(n.engagement));let i=()=>t(n.complete);a("complete",i),I("engagement",c=>{var x;((x=c==null?void 0:c.payload)==null?void 0:x.count)>3&&i()}),a("cta_click",()=>t(n.click))}else if(e==="inmobi"){let n=window.INMOBI_DSPMACROS;if(!n)return;a("view",()=>t(n.Ad_Load_Start)),a("start",()=>t(n.Ad_Viewable)),a("engagement",()=>t(n.First_Engagement)),a("complete",()=>t(n.Gameplay_Complete)),a("cta_click",()=>t(n.DSP_Click)),a("start",()=>{[5,10,15,20,25,30].forEach(i=>setTimeout(()=>t(n[`Spent_${i}_Seconds`]),i*1e3))})}}function je(){if(!y())return;let e=window.TJ_API;e&&e.setPlayableAPI&&e.setPlayableAPI({skipAd:()=>{try{p.finish()}catch(t){console.warn("Tapjoy skip failed",t)}}})}function xe(){var t,n,i;let e=window.TJ_API;(t=e==null?void 0:e.objectiveComplete)==null||t.call(e),(n=e==null?void 0:e.playableFinished)==null||n.call(e),(i=e==null?void 0:e.gameplayFinished)==null||i.call(e)}function Ne(){g()&&(window.mintGameStart=()=>{S(!0),f()},window.mintGameClose=()=>{v(!0)})}function ze(){if(!F())return;let e=window.NUC;!e||!e.trigger||(p.on("cta_click",()=>{var t,n;return(n=(t=e.trigger).convert)==null?void 0:n.call(t,N)}),p.on("complete",()=>{var t,n;return(n=(t=e.trigger).tryAgain)==null?void 0:n.call(t)}))}var p={init(e={},t){if(Ae=e.profile||"web_embed",De=e.consent||{},A={...Ee,...e.ids||{}},w=e.rootEl||w,N=e.destinationUrl||(/android/i.test(navigator.userAgent)?"https://play.google.com/store":"https://www.apple.com/app-store/"),t&&(M=t),o("init"),document.body.oncontextmenu=()=>!1,_e(),Ve(w),we(),Le(),Ie(),!z){if(document.readyState==="complete")ve();else if(!be){be=!0;let n=()=>{ve(),window.removeEventListener("load",n),document.removeEventListener("DOMContentLoaded",n)};window.addEventListener("load",n),document.addEventListener("DOMContentLoaded",n)}}Pe(),Me(),je(),Ne(),ze(),console.log(`%c @handler/playable-sdk %c v${R.version||"0.0.0"} `,"background: #007acc; color: #fff; font-size: 14px; padding: 4px 8px; border-top-left-radius: 4px; border-bottom-left-radius: 4px;","background: #e1e4e8; color: #333; font-size: 14px; padding: 4px 8px; border-top-right-radius: 4px; border-bottom-right-radius: 4px;"),l&&!d&&(o("boot"),o("view"),o("ready"),k&&(k=!1,p.start()),d=!0),d=l},getRoot(){return _e()},get version(){return R.version||"0.0.0"},get maxWidth(){return h},get maxHeight(){return b},get isLandscape(){return K},get isReady(){return d},get isStarted(){return G},get isPaused(){return T},get isFinished(){return E},get volume(){return B},get interactions(){return W},on(e,t){I(j(e),t)},off(e,t){V(j(e),t)},start(){var e,t;if(!G){if(!l){k=!0;return}if(G=!0,o("start"),f(),g())v(),(e=window.gameReady)==null||e.call(window);else if(y()){let n=window.TJ_API;(t=n==null?void 0:n.setPlayableBuild)==null||t.call(n,{orientation:K?"landscape":"portrait",buildID:R.version||"dev"})}}},finish(){var e,t;E||(E=!0,o("complete"),g()?(e=window.gameEnd)==null||e.call(window):H()?(t=parent==null?void 0:parent.postMessage)==null||t.call(parent,"complete","*"):y()&&xe())},install(e){if(!E){E=!0,y()?(xe(),setTimeout(()=>p.install(e),300)):(o("complete"),setTimeout(()=>p.install(e),0));return}U||(U=!0,setTimeout(()=>U=!1,500),o("cta_click"),o("conversion"),Re(e||N))},emit(e,t){let n=j(e);if(!["view","boot","start","engagement","complete","cta_click","conversion","retry","pause","resume","resize","volume","error"].includes(n)&&!n.startsWith("custom."))throw new Error(`Event ${e} must be canonical or namespaced as custom.<mechanic_id>.<event>`);let i=Te(n,t);P(n,i)},retry(){var e,t,n;if(g())(e=window.gameRetry)==null||e.call(window);else if(F()){let i=window.NUC;(n=(t=i==null?void 0:i.trigger)==null?void 0:t.tryAgain)==null||n.call(t)}o("engagement",{action:"retry"})},pause(){v(!0)},resume(){S(!0)},resize(e,t){f(e,t)}},Be=p;function Ve(e){let t=document.createElement("script");t.type="text/javascript",t.textContent=`
2
2
  (function(){
3
3
  var events = ['touchstart','touchend','mousedown','keydown'];
4
4
  function unlock(){
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var V=Object.defineProperty;var Se=Object.getOwnPropertyDescriptor;var Ce=Object.getOwnPropertyNames;var De=Object.prototype.hasOwnProperty;var Le=(e,t)=>{for(var n in t)V(e,n,{get:t[n],enumerable:!0})},Ie=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of Ce(t))!De.call(e,a)&&a!==n&&V(e,a,{get:()=>t[a],enumerable:!(i=Se(t,a))||i.enumerable});return e};var Pe=e=>Ie(V({},"__esModule",{value:!0}),e);var qe={};Le(qe,{Handler:()=>u,default:()=>Be});module.exports=Pe(qe);var p={};function I(e,t,n=!1){p[e]||(p[e]=[]),p[e].push({fn:t,once:n})}function H(e,t){if(p[e]){if(!t){delete p[e];return}p[e]=p[e].filter(n=>n.fn!==t)}}function P(e,...t){let n=p[e];if(n)for(let i of[...n])i.fn(...t),i.once&&H(e,i.fn)}function s(e,t){I(e,t,!0)}var R={name:"handler-playable-sdk",version:"0.1.16",description:"Handler Playable SDK v0.1 with contract-aligned surface (root sandbox, canonical event envelope).",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.js"},"./pixi":{types:"./dist/pixi/index.d.ts",import:"./dist/pixi/index.mjs",require:"./dist/pixi/index.js"},"./three":{types:"./dist/three/index.d.ts",import:"./dist/three/index.mjs",require:"./dist/three/index.js"}},scripts:{build:"tsup src/index.ts src/pixi/index.ts src/three/index.ts --format cjs,esm --dts --clean --minify",lint:"eslint 'src/**/*.{ts,tsx}'",typecheck:"tsc --noEmit",prepublishOnly:"npm run build","publish:update":"node scripts/publish-and-update.js patch","publish:update:minor":"node scripts/publish-and-update.js minor","publish:update:major":"node scripts/publish-and-update.js major"},author:"Handler",license:"MIT",publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/HandlerAIGames/handler-playable-sdk.git"},files:["dist","LICENSE","README.md"],peerDependencies:{"pixi.js":"^8.0.0",three:"^0.160.0"},peerDependenciesMeta:{"pixi.js":{optional:!0},three:{optional:!0}},devDependencies:{"@types/three":"^0.160.0",eslint:"^8.57.1","pixi.js":"^8.8.1",three:"^0.160.0","ts-node":"^10.9.2",tsup:"^8.4.0",typescript:"^5.7.2"}};var d=0,Me=d++,ee=d++,te=d++,ne=d++,ie=d++,oe=d++,re=d++,ae=d++,se=d++,de=d++,le=d++,ce=d++,r=Me;function ue(){return r===ee}function pe(){return r===te}function fe(){return r===ne}function me(){return r===ie}function g(){return r===oe}function y(){return r===re}function ge(){return r===ae}function ye(){return r===se}function we(){return r===de}function F(){return r===le}function G(){return r===ce}function he(){let e=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none",t=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed";if(e==="mraid")try{mraid.getState(),r=ee;return}catch{}else if(e==="dapi")try{dapi.isReady(),r=te;return}catch{}if(t==="facebook")try{typeof FbPlayableAd!="undefined"&&(r=ne)}catch{}else if(t==="google")try{typeof ExitApi!="undefined"&&(r=ie)}catch{}else if(t==="mintegral")window.gameReady&&(r=oe);else if(t==="tapjoy")window.TJ_API&&(r=re);else if(t==="tiktok")window.openAppStore&&(r=ae);else if(t==="smadex")try{window.smxTracking&&(r=se)}catch{}else if(t==="snapchat")try{window.ScPlayableAd&&(r=de)}catch{}else t==="vungle"?r=le:(e==="nucleo"||t==="nucleo")&&(r=ce)}var Ae={mechanic_id:"TODO_mechanic_id",variant_id:"TODO_variant_id",deployment_id:"TODO_deployment_id",export_id:"TODO_export_id",profile_id:"TODO_profile_id",instance_id:"default"},je=Math.random().toString(36).slice(2),w=null,A={...Ae},ke="web_embed",Ne={},U=!1,E=!1,T=!1,Te=!1,J=1,K=0,z=!1,l=!1,N="",h=Math.floor(window.innerWidth),b=Math.floor(window.innerHeight),B=h>b,c=!1,k=!1,be=!1,_e=!1,W=!1,M=null;function ve(){if(w)return w;let e=document.createElement("div");return e.id="handler-root",e.setAttribute("data-handler-root","true"),document.body.appendChild(e),w=e,e}function j(e){switch(e){case"interaction":return"engagement";case"finish":return"complete";case"install":return"cta_click";default:return e}}function Oe(e,t){return{event_name:e,ts:Date.now(),session_id:je,deployment_id:A.deployment_id,variant_id:A.variant_id,export_profile_id:A.profile_id,instance_id:A.instance_id||"default",env:ke==="mraid"?"mraid":"web",payload:t}}function o(e,t){let n=j(e),i=Oe(n,t);P(n,i),n!==e&&P(e,i)}function O(){M&&(M(h,b),M=null)}function _(e){J=e,o("volume",e)}function v(e){e&&(Te=!0),!T&&(T=!0,o("pause"),_(0))}function S(e){!e&&Te||T&&(T=!1,o("resume"),_(J))}function f(e,t){h=Math.floor(e||window.innerWidth),b=Math.floor(t||window.innerHeight),B=h>b,o("resize",{width:h,height:b})}function ze(){if(ue())try{let e=mraid.getMaxSize();f(e.width,e.height);let t=()=>{mraid.isViewable()&&mraid.getState()!=="hidden"?S():v()};if(mraid.addEventListener("viewableChange",t),mraid.addEventListener("stateChange",t),mraid.addEventListener("sizeChange",()=>{let n=mraid.getMaxSize();f(n.width,n.height)}),mraid.getAudioVolume){let n=mraid.getAudioVolume();_(n?1:0)}if(mraid.addEventListener("audioVolumeChange",n=>{n!==null&&_(n>0?1:0)}),mraid.addEventListener("error",(n,i)=>{console.warn("mraid error:",n,"action:",i)}),z=!0,mraid.isViewable()&&mraid.getState()!=="hidden")c=!0,o("boot"),o("view"),o("ready"),l=!0,O();else{let n=()=>{c=!0,o("boot"),o("view"),o("ready"),l=!0,O()};mraid.addEventListener("ready",n)}}catch(e){console.warn("MRAID hook skipped",e)}}function Ve(){if(pe())try{let e=dapi.getScreenSize();f(e.width,e.height),dapi.addEventListener("viewableChange",n=>{n.isViewable?S():v()}),dapi.addEventListener("adResized",n=>{let i=dapi.getScreenSize();f(n.width||i.width,n.height||i.height)});let t=dapi.getAudioVolume();if(_(t?1:0),dapi.addEventListener("audioVolumeChange",n=>_(n?1:0)),z=!0,dapi.isViewable())c=!0,o("boot"),o("view"),o("ready"),l=!0,O();else{let n=()=>{c=!0,o("boot"),o("view"),o("ready"),l=!0,O()};dapi.addEventListener("ready",n)}}catch(e){console.warn("DAPI hook skipped",e)}}function xe(){let e=()=>{c||document.visibilityState==="visible"&&(document.readyState==="complete"||document.readyState==="interactive")&&(c=!0,o("boot"),o("view"),o("ready"),l=!0,O(),k&&(k=!1,u.start()))};window.addEventListener("resize",()=>f()),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"?(S(),e()):v()}),document.readyState==="complete"||document.readyState==="interactive"?e():window.addEventListener("load",e),z=!0}function He(){let e=t=>{typeof TouchEvent!="undefined"&&t instanceof TouchEvent&&(be=!0),!(be&&t instanceof MouseEvent)&&(K+=1,o("interaction",K))};document.addEventListener("mousedown",e),document.addEventListener("touchstart",e)}function Fe(e){var i,a,x,C,q,D,$,L,X,Y,Q,Z;let t=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none";if((typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed")==="google")try{(i=window.ExitApi)==null||i.exit();return}catch{}if(t==="mraid"&&typeof mraid!="undefined")mraid.open(e||"");else if(t==="dapi"&&typeof dapi!="undefined")dapi.openStoreUrl();else if(y())(x=(a=window.TJ_API)==null?void 0:a.click)==null||x.call(a);else if(fe())(q=(C=window.FbPlayableAd)==null?void 0:C.onCTAClick)==null||q.call(C);else if(we())($=(D=window.ScPlayableAd)==null?void 0:D.onCTAClick)==null||$.call(D);else if(ye())try{(X=(L=window.smxTracking)==null?void 0:L.redirect)==null||X.call(L)}catch(m){console.warn("Smadex redirect failed",m)}else if(me()){let m=window.ExitApi;m&&typeof m.exit=="function"?m.exit(e||N||""):e&&window.open(e)}else g()?(Y=window.install)==null||Y.call(window):ge()?(Q=window.openAppStore)==null||Q.call(window):F()?(Z=parent==null?void 0:parent.postMessage)==null||Z.call(parent,"download","*"):e&&window.open(e)}function Ge(){let e=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed",t=n=>{if(!n)return;let i=new Image;i.src=n};if(e==="bigabid"){let n=window.BIGABID_BIDTIMEMACROS;if(!n)return;s("view",()=>t(n.mraid_viewable)),s("start",()=>t(n.game_viewable)),s("engagement",()=>t(n.engagement));let i=()=>t(n.complete);s("complete",i),I("engagement",a=>{var x;((x=a==null?void 0:a.payload)==null?void 0:x.count)>3&&i()}),s("cta_click",()=>t(n.click))}else if(e==="inmobi"){let n=window.INMOBI_DSPMACROS;if(!n)return;s("view",()=>t(n.Ad_Load_Start)),s("start",()=>t(n.Ad_Viewable)),s("engagement",()=>t(n.First_Engagement)),s("complete",()=>t(n.Gameplay_Complete)),s("cta_click",()=>t(n.DSP_Click)),s("start",()=>{[5,10,15,20,25,30].forEach(i=>setTimeout(()=>t(n[`Spent_${i}_Seconds`]),i*1e3))})}}function Ue(){if(!y())return;let e=window.TJ_API;e&&e.setPlayableAPI&&e.setPlayableAPI({skipAd:()=>{try{u.finish()}catch(t){console.warn("Tapjoy skip failed",t)}}})}function Ee(){var t,n,i;let e=window.TJ_API;(t=e==null?void 0:e.objectiveComplete)==null||t.call(e),(n=e==null?void 0:e.playableFinished)==null||n.call(e),(i=e==null?void 0:e.gameplayFinished)==null||i.call(e)}function We(){g()&&(window.mintGameStart=()=>{S(!0),f()},window.mintGameClose=()=>{v(!0)})}function Ke(){if(!G())return;let e=window.NUC;!e||!e.trigger||(u.on("cta_click",()=>{var t,n;return(n=(t=e.trigger).convert)==null?void 0:n.call(t,N)}),u.on("complete",()=>{var t,n;return(n=(t=e.trigger).tryAgain)==null?void 0:n.call(t)}))}var u={init(e={},t){if(ke=e.profile||"web_embed",Ne=e.consent||{},A={...Ae,...e.ids||{}},w=e.rootEl||w,N=e.destinationUrl||(/android/i.test(navigator.userAgent)?"https://play.google.com/store":"https://www.apple.com/app-store/"),t&&(M=t),o("init"),document.body.oncontextmenu=()=>!1,ve(),Je(w),he(),ze(),Ve(),!z){if(document.readyState==="complete")xe();else if(!_e){_e=!0;let n=()=>{xe(),window.removeEventListener("load",n),document.removeEventListener("DOMContentLoaded",n)};window.addEventListener("load",n),document.addEventListener("DOMContentLoaded",n)}}He(),Ge(),Ue(),We(),Ke(),console.log(`%c @handler/playable-sdk %c v${R.version||"0.0.0"} `,"background: #007acc; color: #fff; font-size: 14px; padding: 4px 8px; border-top-left-radius: 4px; border-bottom-left-radius: 4px;","background: #e1e4e8; color: #333; font-size: 14px; padding: 4px 8px; border-top-right-radius: 4px; border-bottom-right-radius: 4px;"),c&&!l&&(o("boot"),o("view"),o("ready"),k&&(k=!1,u.start()),l=!0),l=c},getRoot(){return ve()},get version(){return R.version||"0.0.0"},get maxWidth(){return h},get maxHeight(){return b},get isLandscape(){return B},get isReady(){return l},get isStarted(){return U},get isPaused(){return T},get isFinished(){return E},get volume(){return J},get interactions(){return K},on(e,t){I(j(e),t)},off(e,t){H(j(e),t)},start(){var e,t;if(!U){if(!c){k=!0;return}if(U=!0,o("start"),f(),g())v(),(e=window.gameReady)==null||e.call(window);else if(y()){let n=window.TJ_API;(t=n==null?void 0:n.setPlayableBuild)==null||t.call(n,{orientation:B?"landscape":"portrait",buildID:R.version||"dev"})}}},finish(){var e,t;E||(E=!0,o("complete"),g()?(e=window.gameEnd)==null||e.call(window):F()?(t=parent==null?void 0:parent.postMessage)==null||t.call(parent,"complete","*"):y()&&Ee())},install(e){if(!E){E=!0,y()?(Ee(),setTimeout(()=>u.install(e),300)):(o("complete"),setTimeout(()=>u.install(e),0));return}W||(W=!0,setTimeout(()=>W=!1,500),o("cta_click"),o("conversion"),Fe(e||N))},emit(e,t){let n=j(e);if(!["view","boot","start","engagement","complete","cta_click","conversion","retry","pause","resume","resize","volume","error"].includes(n)&&!n.startsWith("custom."))throw new Error(`Event ${e} must be canonical or namespaced as custom.<mechanic_id>.<event>`);let i=Oe(n,t);P(n,i)},retry(){var e,t,n;if(g())(e=window.gameRetry)==null||e.call(window);else if(G()){let i=window.NUC;(n=(t=i==null?void 0:i.trigger)==null?void 0:t.tryAgain)==null||n.call(t)}o("engagement",{action:"retry"})},pause(){v(!0)},resume(){S(!0)},resize(e,t){f(e,t)}},Be=u;function Je(e){let t=document.createElement("script");t.type="text/javascript",t.textContent=`
1
+ "use strict";var V=Object.defineProperty;var Se=Object.getOwnPropertyDescriptor;var Ce=Object.getOwnPropertyNames;var De=Object.prototype.hasOwnProperty;var Le=(e,t)=>{for(var n in t)V(e,n,{get:t[n],enumerable:!0})},Ie=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of Ce(t))!De.call(e,a)&&a!==n&&V(e,a,{get:()=>t[a],enumerable:!(i=Se(t,a))||i.enumerable});return e};var Pe=e=>Ie(V({},"__esModule",{value:!0}),e);var qe={};Le(qe,{Handler:()=>u,default:()=>Be});module.exports=Pe(qe);var p={};function I(e,t,n=!1){p[e]||(p[e]=[]),p[e].push({fn:t,once:n})}function H(e,t){if(p[e]){if(!t){delete p[e];return}p[e]=p[e].filter(n=>n.fn!==t)}}function P(e,...t){let n=p[e];if(n)for(let i of[...n])i.fn(...t),i.once&&H(e,i.fn)}function s(e,t){I(e,t,!0)}var R={name:"handler-playable-sdk",version:"0.1.17",description:"Handler Playable SDK v0.1 with contract-aligned surface (root sandbox, canonical event envelope).",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.js"},"./pixi":{types:"./dist/pixi/index.d.ts",import:"./dist/pixi/index.mjs",require:"./dist/pixi/index.js"},"./three":{types:"./dist/three/index.d.ts",import:"./dist/three/index.mjs",require:"./dist/three/index.js"}},scripts:{build:"tsup src/index.ts src/pixi/index.ts src/three/index.ts --format cjs,esm --dts --clean --minify",lint:"eslint 'src/**/*.{ts,tsx}'",typecheck:"tsc --noEmit",prepublishOnly:"npm run build","publish:update":"node scripts/publish-and-update.js patch","publish:update:minor":"node scripts/publish-and-update.js minor","publish:update:major":"node scripts/publish-and-update.js major"},author:"Handler",license:"MIT",publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/HandlerAIGames/handler-playable-sdk.git"},files:["dist","LICENSE","README.md"],peerDependencies:{"pixi.js":"^8.0.0",three:"^0.160.0"},peerDependenciesMeta:{"pixi.js":{optional:!0},three:{optional:!0}},devDependencies:{"@types/three":"^0.160.0",eslint:"^8.57.1","pixi.js":"^8.8.1",three:"^0.160.0","ts-node":"^10.9.2",tsup:"^8.4.0",typescript:"^5.7.2"}};var d=0,Me=d++,ee=d++,te=d++,ne=d++,ie=d++,oe=d++,re=d++,ae=d++,se=d++,de=d++,le=d++,ce=d++,r=Me;function ue(){return r===ee}function pe(){return r===te}function fe(){return r===ne}function me(){return r===ie}function g(){return r===oe}function y(){return r===re}function ge(){return r===ae}function ye(){return r===se}function we(){return r===de}function F(){return r===le}function G(){return r===ce}function he(){let e=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none",t=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed";if(e==="mraid")try{mraid.getState(),r=ee;return}catch{}else if(e==="dapi")try{dapi.isReady(),r=te;return}catch{}if(t==="facebook")try{typeof FbPlayableAd!="undefined"&&(r=ne)}catch{}else if(t==="google")try{typeof ExitApi!="undefined"&&(r=ie)}catch{}else if(t==="mintegral")window.gameReady&&(r=oe);else if(t==="tapjoy")window.TJ_API&&(r=re);else if(t==="tiktok")window.openAppStore&&(r=ae);else if(t==="smadex")try{window.smxTracking&&(r=se)}catch{}else if(t==="snapchat")try{window.ScPlayableAd&&(r=de)}catch{}else t==="vungle"?r=le:(e==="nucleo"||t==="nucleo")&&(r=ce)}var Ae={mechanic_id:"TODO_mechanic_id",variant_id:"TODO_variant_id",deployment_id:"TODO_deployment_id",export_id:"TODO_export_id",profile_id:"TODO_profile_id",instance_id:"default"},je=Math.random().toString(36).slice(2),w=null,A={...Ae},ke="web_embed",Ne={},U=!1,E=!1,T=!1,Te=!1,J=1,K=0,z=!1,l=!1,N="",h=Math.floor(window.innerWidth),b=Math.floor(window.innerHeight),B=h>b,c=!1,k=!1,be=!1,_e=!1,W=!1,M=null;function ve(){if(w)return w;let e=document.createElement("div");return e.id="handler-root",e.setAttribute("data-handler-root","true"),document.body.appendChild(e),w=e,e}function j(e){switch(e){case"interaction":return"engagement";case"finish":return"complete";case"install":return"cta_click";default:return e}}function Oe(e,t){return{event_name:e,ts:Date.now(),session_id:je,deployment_id:A.deployment_id,variant_id:A.variant_id,export_profile_id:A.profile_id,instance_id:A.instance_id||"default",env:ke==="mraid"?"mraid":"web",payload:t}}function o(e,t){let n=j(e),i=Oe(n,t);P(n,i),n!==e&&P(e,i)}function O(){M&&(M(h,b),M=null)}function _(e){J=e,o("volume",e)}function v(e){e&&(Te=!0),!T&&(T=!0,o("pause"),_(0))}function S(e){!e&&Te||T&&(T=!1,o("resume"),_(J))}function f(e,t){h=Math.floor(e||window.innerWidth),b=Math.floor(t||window.innerHeight),B=h>b,o("resize",{width:h,height:b})}function ze(){if(ue())try{let e=mraid.getMaxSize();f(e.width,e.height);let t=()=>{mraid.isViewable()&&mraid.getState()!=="hidden"?S():v()};if(mraid.addEventListener("viewableChange",t),mraid.addEventListener("stateChange",t),mraid.addEventListener("sizeChange",()=>{let n=mraid.getMaxSize();f(n.width,n.height)}),mraid.getAudioVolume){let n=mraid.getAudioVolume();_(n?1:0)}if(mraid.addEventListener("audioVolumeChange",n=>{n!==null&&_(n>0?1:0)}),mraid.addEventListener("error",(n,i)=>{console.warn("mraid error:",n,"action:",i)}),z=!0,mraid.isViewable()&&mraid.getState()!=="hidden")c=!0,o("boot"),o("view"),o("ready"),l=!0,O();else{let n=()=>{c=!0,o("boot"),o("view"),o("ready"),l=!0,O()};mraid.addEventListener("ready",n)}}catch(e){console.warn("MRAID hook skipped",e)}}function Ve(){if(pe())try{let e=dapi.getScreenSize();f(e.width,e.height),dapi.addEventListener("viewableChange",n=>{n.isViewable?S():v()}),dapi.addEventListener("adResized",n=>{let i=dapi.getScreenSize();f(n.width||i.width,n.height||i.height)});let t=dapi.getAudioVolume();if(_(t?1:0),dapi.addEventListener("audioVolumeChange",n=>_(n?1:0)),z=!0,dapi.isViewable())c=!0,o("boot"),o("view"),o("ready"),l=!0,O();else{let n=()=>{c=!0,o("boot"),o("view"),o("ready"),l=!0,O()};dapi.addEventListener("ready",n)}}catch(e){console.warn("DAPI hook skipped",e)}}function xe(){let e=()=>{c||document.visibilityState==="visible"&&(document.readyState==="complete"||document.readyState==="interactive")&&(c=!0,o("boot"),o("view"),o("ready"),l=!0,O(),k&&(k=!1,u.start()))};window.addEventListener("resize",()=>f()),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"?(S(),e()):v()}),document.readyState==="complete"||document.readyState==="interactive"?e():window.addEventListener("load",e),z=!0}function He(){let e=t=>{typeof TouchEvent!="undefined"&&t instanceof TouchEvent&&(be=!0),!(be&&t instanceof MouseEvent)&&(K+=1,o("interaction",K))};document.addEventListener("mousedown",e),document.addEventListener("touchstart",e)}function Fe(e){var i,a,x,C,q,D,$,L,X,Y,Q,Z;let t=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none";if((typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed")==="google")try{(i=window.ExitApi)==null||i.exit();return}catch{}if(t==="mraid"&&typeof mraid!="undefined")mraid.open(e||"");else if(t==="dapi"&&typeof dapi!="undefined")dapi.openStoreUrl();else if(y())(x=(a=window.TJ_API)==null?void 0:a.click)==null||x.call(a);else if(fe())(q=(C=window.FbPlayableAd)==null?void 0:C.onCTAClick)==null||q.call(C);else if(we())($=(D=window.ScPlayableAd)==null?void 0:D.onCTAClick)==null||$.call(D);else if(ye())try{(X=(L=window.smxTracking)==null?void 0:L.redirect)==null||X.call(L)}catch(m){console.warn("Smadex redirect failed",m)}else if(me()){let m=window.ExitApi;m&&typeof m.exit=="function"?m.exit(e||N||""):e&&window.open(e)}else g()?(Y=window.install)==null||Y.call(window):ge()?(Q=window.openAppStore)==null||Q.call(window):F()?(Z=parent==null?void 0:parent.postMessage)==null||Z.call(parent,"download","*"):e&&window.open(e)}function Ge(){let e=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed",t=n=>{if(!n)return;let i=new Image;i.src=n};if(e==="bigabid"){let n=window.BIGABID_BIDTIMEMACROS;if(!n)return;s("view",()=>t(n.mraid_viewable)),s("start",()=>t(n.game_viewable)),s("engagement",()=>t(n.engagement));let i=()=>t(n.complete);s("complete",i),I("engagement",a=>{var x;((x=a==null?void 0:a.payload)==null?void 0:x.count)>3&&i()}),s("cta_click",()=>t(n.click))}else if(e==="inmobi"){let n=window.INMOBI_DSPMACROS;if(!n)return;s("view",()=>t(n.Ad_Load_Start)),s("start",()=>t(n.Ad_Viewable)),s("engagement",()=>t(n.First_Engagement)),s("complete",()=>t(n.Gameplay_Complete)),s("cta_click",()=>t(n.DSP_Click)),s("start",()=>{[5,10,15,20,25,30].forEach(i=>setTimeout(()=>t(n[`Spent_${i}_Seconds`]),i*1e3))})}}function Ue(){if(!y())return;let e=window.TJ_API;e&&e.setPlayableAPI&&e.setPlayableAPI({skipAd:()=>{try{u.finish()}catch(t){console.warn("Tapjoy skip failed",t)}}})}function Ee(){var t,n,i;let e=window.TJ_API;(t=e==null?void 0:e.objectiveComplete)==null||t.call(e),(n=e==null?void 0:e.playableFinished)==null||n.call(e),(i=e==null?void 0:e.gameplayFinished)==null||i.call(e)}function We(){g()&&(window.mintGameStart=()=>{S(!0),f()},window.mintGameClose=()=>{v(!0)})}function Ke(){if(!G())return;let e=window.NUC;!e||!e.trigger||(u.on("cta_click",()=>{var t,n;return(n=(t=e.trigger).convert)==null?void 0:n.call(t,N)}),u.on("complete",()=>{var t,n;return(n=(t=e.trigger).tryAgain)==null?void 0:n.call(t)}))}var u={init(e={},t){if(ke=e.profile||"web_embed",Ne=e.consent||{},A={...Ae,...e.ids||{}},w=e.rootEl||w,N=e.destinationUrl||(/android/i.test(navigator.userAgent)?"https://play.google.com/store":"https://www.apple.com/app-store/"),t&&(M=t),o("init"),document.body.oncontextmenu=()=>!1,ve(),Je(w),he(),ze(),Ve(),!z){if(document.readyState==="complete")xe();else if(!_e){_e=!0;let n=()=>{xe(),window.removeEventListener("load",n),document.removeEventListener("DOMContentLoaded",n)};window.addEventListener("load",n),document.addEventListener("DOMContentLoaded",n)}}He(),Ge(),Ue(),We(),Ke(),console.log(`%c @handler/playable-sdk %c v${R.version||"0.0.0"} `,"background: #007acc; color: #fff; font-size: 14px; padding: 4px 8px; border-top-left-radius: 4px; border-bottom-left-radius: 4px;","background: #e1e4e8; color: #333; font-size: 14px; padding: 4px 8px; border-top-right-radius: 4px; border-bottom-right-radius: 4px;"),c&&!l&&(o("boot"),o("view"),o("ready"),k&&(k=!1,u.start()),l=!0),l=c},getRoot(){return ve()},get version(){return R.version||"0.0.0"},get maxWidth(){return h},get maxHeight(){return b},get isLandscape(){return B},get isReady(){return l},get isStarted(){return U},get isPaused(){return T},get isFinished(){return E},get volume(){return J},get interactions(){return K},on(e,t){I(j(e),t)},off(e,t){H(j(e),t)},start(){var e,t;if(!U){if(!c){k=!0;return}if(U=!0,o("start"),f(),g())v(),(e=window.gameReady)==null||e.call(window);else if(y()){let n=window.TJ_API;(t=n==null?void 0:n.setPlayableBuild)==null||t.call(n,{orientation:B?"landscape":"portrait",buildID:R.version||"dev"})}}},finish(){var e,t;E||(E=!0,o("complete"),g()?(e=window.gameEnd)==null||e.call(window):F()?(t=parent==null?void 0:parent.postMessage)==null||t.call(parent,"complete","*"):y()&&Ee())},install(e){if(!E){E=!0,y()?(Ee(),setTimeout(()=>u.install(e),300)):(o("complete"),setTimeout(()=>u.install(e),0));return}W||(W=!0,setTimeout(()=>W=!1,500),o("cta_click"),o("conversion"),Fe(e||N))},emit(e,t){let n=j(e);if(!["view","boot","start","engagement","complete","cta_click","conversion","retry","pause","resume","resize","volume","error"].includes(n)&&!n.startsWith("custom."))throw new Error(`Event ${e} must be canonical or namespaced as custom.<mechanic_id>.<event>`);let i=Oe(n,t);P(n,i)},retry(){var e,t,n;if(g())(e=window.gameRetry)==null||e.call(window);else if(G()){let i=window.NUC;(n=(t=i==null?void 0:i.trigger)==null?void 0:t.tryAgain)==null||n.call(t)}o("engagement",{action:"retry"})},pause(){v(!0)},resume(){S(!0)},resize(e,t){f(e,t)}},Be=u;function Je(e){let t=document.createElement("script");t.type="text/javascript",t.textContent=`
2
2
  (function(){
3
3
  var events = ['touchstart','touchend','mousedown','keydown'];
4
4
  function unlock(){
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{a,b}from"./chunk-UHIM3PV6.mjs";export{a as Handler,b as default};
1
+ import{a,b}from"./chunk-RAJK6QAT.mjs";export{a as Handler,b as default};
@@ -1,4 +1,4 @@
1
- "use strict";var Ke=Object.defineProperty;var Ka=Object.getOwnPropertyDescriptor;var $a=Object.getOwnPropertyNames;var Ja=Object.prototype.hasOwnProperty;var Qa=(e,t)=>{for(var n in t)Ke(e,n,{get:t[n],enumerable:!0})},Za=(e,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of $a(t))!Ja.call(e,s)&&s!==n&&Ke(e,s,{get:()=>t[s],enumerable:!(a=Ka(t,s))||a.enumerable});return e};var Ua=e=>Za(Ke({},"__esModule",{value:!0}),e);var bi={};Qa(bi,{GameObject:()=>Ae,GameObjectManager:()=>je,Renderer:()=>Ce,Transform:()=>Se,animateHandClick:()=>ia,animatePanelEntrance:()=>aa,createBrushTexture:()=>ca,createEndGamePanel:()=>na,createHandTutorial:()=>sa,createPixiBase:()=>Un,createTutorialLabel:()=>oa,getRegisteredFontIds:()=>ta,loadAsset:()=>at,loadCharacterFrames:()=>la,registerFont:()=>ea,resolveFont:()=>I,resolveFontWeight:()=>G,updateHandAnimation:()=>ra});module.exports=Ua(bi);var Zn=require("pixi.js");var ee={};function Re(e,t,n=!1){ee[e]||(ee[e]=[]),ee[e].push({fn:t,once:n})}function $e(e,t){if(ee[e]){if(!t){delete ee[e];return}ee[e]=ee[e].filter(n=>n.fn!==t)}}function ze(e,...t){let n=ee[e];if(n)for(let a of[...n])a.fn(...t),a.once&&$e(e,a.fn)}function W(e,t){Re(e,t,!0)}var He={name:"handler-playable-sdk",version:"0.1.16",description:"Handler Playable SDK v0.1 with contract-aligned surface (root sandbox, canonical event envelope).",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.js"},"./pixi":{types:"./dist/pixi/index.d.ts",import:"./dist/pixi/index.mjs",require:"./dist/pixi/index.js"},"./three":{types:"./dist/three/index.d.ts",import:"./dist/three/index.mjs",require:"./dist/three/index.js"}},scripts:{build:"tsup src/index.ts src/pixi/index.ts src/three/index.ts --format cjs,esm --dts --clean --minify",lint:"eslint 'src/**/*.{ts,tsx}'",typecheck:"tsc --noEmit",prepublishOnly:"npm run build","publish:update":"node scripts/publish-and-update.js patch","publish:update:minor":"node scripts/publish-and-update.js minor","publish:update:major":"node scripts/publish-and-update.js major"},author:"Handler",license:"MIT",publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/HandlerAIGames/handler-playable-sdk.git"},files:["dist","LICENSE","README.md"],peerDependencies:{"pixi.js":"^8.0.0",three:"^0.160.0"},peerDependenciesMeta:{"pixi.js":{optional:!0},three:{optional:!0}},devDependencies:{"@types/three":"^0.160.0",eslint:"^8.57.1","pixi.js":"^8.8.1",three:"^0.160.0","ts-node":"^10.9.2",tsup:"^8.4.0",typescript:"^5.7.2"}};var N=0,ti=N++,Sn=N++,Cn=N++,An=N++,En=N++,kn=N++,Dn=N++,Pn=N++,Mn=N++,Fn=N++,Ln=N++,Rn=N++,_=ti;function zn(){return _===Sn}function Hn(){return _===Cn}function On(){return _===An}function Wn(){return _===En}function de(){return _===kn}function ue(){return _===Dn}function Nn(){return _===Pn}function Yn(){return _===Mn}function Bn(){return _===Fn}function Je(){return _===Ln}function Qe(){return _===Rn}function jn(){let e=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none",t=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed";if(e==="mraid")try{mraid.getState(),_=Sn;return}catch{}else if(e==="dapi")try{dapi.isReady(),_=Cn;return}catch{}if(t==="facebook")try{typeof FbPlayableAd!="undefined"&&(_=An)}catch{}else if(t==="google")try{typeof ExitApi!="undefined"&&(_=En)}catch{}else if(t==="mintegral")window.gameReady&&(_=kn);else if(t==="tapjoy")window.TJ_API&&(_=Dn);else if(t==="tiktok")window.openAppStore&&(_=Pn);else if(t==="smadex")try{window.smxTracking&&(_=Mn)}catch{}else if(t==="snapchat")try{window.ScPlayableAd&&(_=Fn)}catch{}else t==="vungle"?_=Ln:(e==="nucleo"||t==="nucleo")&&(_=Rn)}var Kn={mechanic_id:"TODO_mechanic_id",variant_id:"TODO_variant_id",deployment_id:"TODO_deployment_id",export_id:"TODO_export_id",profile_id:"TODO_profile_id",instance_id:"default"},ni=Math.random().toString(36).slice(2),pe=null,be={...Kn},$n="web_embed",ai={},Ze=!1,_e=!1,xe=!1,Jn=!1,nt=1,et=0,Ye=!1,J=!1,Ne="",fe=Math.floor(window.innerWidth),me=Math.floor(window.innerHeight),tt=fe>me,Q=!1,we=!1,In=!1,Gn=!1,Ue=!1,Oe=null;function Vn(){if(pe)return pe;let e=document.createElement("div");return e.id="handler-root",e.setAttribute("data-handler-root","true"),document.body.appendChild(e),pe=e,e}function We(e){switch(e){case"interaction":return"engagement";case"finish":return"complete";case"install":return"cta_click";default:return e}}function Qn(e,t){return{event_name:e,ts:Date.now(),session_id:ni,deployment_id:be.deployment_id,variant_id:be.variant_id,export_profile_id:be.profile_id,instance_id:be.instance_id||"default",env:$n==="mraid"?"mraid":"web",payload:t}}function y(e,t){let n=We(e),a=Qn(n,t);ze(n,a),n!==e&&ze(e,a)}function Te(){Oe&&(Oe(fe,me),Oe=null)}function he(e){nt=e,y("volume",e)}function ye(e){e&&(Jn=!0),!xe&&(xe=!0,y("pause"),he(0))}function ve(e){!e&&Jn||xe&&(xe=!1,y("resume"),he(nt))}function ne(e,t){fe=Math.floor(e||window.innerWidth),me=Math.floor(t||window.innerHeight),tt=fe>me,y("resize",{width:fe,height:me})}function ii(){if(zn())try{let e=mraid.getMaxSize();ne(e.width,e.height);let t=()=>{mraid.isViewable()&&mraid.getState()!=="hidden"?ve():ye()};if(mraid.addEventListener("viewableChange",t),mraid.addEventListener("stateChange",t),mraid.addEventListener("sizeChange",()=>{let n=mraid.getMaxSize();ne(n.width,n.height)}),mraid.getAudioVolume){let n=mraid.getAudioVolume();he(n?1:0)}if(mraid.addEventListener("audioVolumeChange",n=>{n!==null&&he(n>0?1:0)}),mraid.addEventListener("error",(n,a)=>{console.warn("mraid error:",n,"action:",a)}),Ye=!0,mraid.isViewable()&&mraid.getState()!=="hidden")Q=!0,y("boot"),y("view"),y("ready"),J=!0,Te();else{let n=()=>{Q=!0,y("boot"),y("view"),y("ready"),J=!0,Te()};mraid.addEventListener("ready",n)}}catch(e){console.warn("MRAID hook skipped",e)}}function si(){if(Hn())try{let e=dapi.getScreenSize();ne(e.width,e.height),dapi.addEventListener("viewableChange",n=>{n.isViewable?ve():ye()}),dapi.addEventListener("adResized",n=>{let a=dapi.getScreenSize();ne(n.width||a.width,n.height||a.height)});let t=dapi.getAudioVolume();if(he(t?1:0),dapi.addEventListener("audioVolumeChange",n=>he(n?1:0)),Ye=!0,dapi.isViewable())Q=!0,y("boot"),y("view"),y("ready"),J=!0,Te();else{let n=()=>{Q=!0,y("boot"),y("view"),y("ready"),J=!0,Te()};dapi.addEventListener("ready",n)}}catch(e){console.warn("DAPI hook skipped",e)}}function qn(){let e=()=>{Q||document.visibilityState==="visible"&&(document.readyState==="complete"||document.readyState==="interactive")&&(Q=!0,y("boot"),y("view"),y("ready"),J=!0,Te(),we&&(we=!1,te.start()))};window.addEventListener("resize",()=>ne()),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"?(ve(),e()):ye()}),document.readyState==="complete"||document.readyState==="interactive"?e():window.addEventListener("load",e),Ye=!0}function oi(){let e=t=>{typeof TouchEvent!="undefined"&&t instanceof TouchEvent&&(In=!0),!(In&&t instanceof MouseEvent)&&(et+=1,y("interaction",et))};document.addEventListener("mousedown",e),document.addEventListener("touchstart",e)}function ri(e){var a,s,i,o,r,l,d,p,f,u,c,h;let t=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none";if((typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed")==="google")try{(a=window.ExitApi)==null||a.exit();return}catch{}if(t==="mraid"&&typeof mraid!="undefined")mraid.open(e||"");else if(t==="dapi"&&typeof dapi!="undefined")dapi.openStoreUrl();else if(ue())(i=(s=window.TJ_API)==null?void 0:s.click)==null||i.call(s);else if(On())(r=(o=window.FbPlayableAd)==null?void 0:o.onCTAClick)==null||r.call(o);else if(Bn())(d=(l=window.ScPlayableAd)==null?void 0:l.onCTAClick)==null||d.call(l);else if(Yn())try{(f=(p=window.smxTracking)==null?void 0:p.redirect)==null||f.call(p)}catch(m){console.warn("Smadex redirect failed",m)}else if(Wn()){let m=window.ExitApi;m&&typeof m.exit=="function"?m.exit(e||Ne||""):e&&window.open(e)}else de()?(u=window.install)==null||u.call(window):Nn()?(c=window.openAppStore)==null||c.call(window):Je()?(h=parent==null?void 0:parent.postMessage)==null||h.call(parent,"download","*"):e&&window.open(e)}function li(){let e=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed",t=n=>{if(!n)return;let a=new Image;a.src=n};if(e==="bigabid"){let n=window.BIGABID_BIDTIMEMACROS;if(!n)return;W("view",()=>t(n.mraid_viewable)),W("start",()=>t(n.game_viewable)),W("engagement",()=>t(n.engagement));let a=()=>t(n.complete);W("complete",a),Re("engagement",s=>{var i;((i=s==null?void 0:s.payload)==null?void 0:i.count)>3&&a()}),W("cta_click",()=>t(n.click))}else if(e==="inmobi"){let n=window.INMOBI_DSPMACROS;if(!n)return;W("view",()=>t(n.Ad_Load_Start)),W("start",()=>t(n.Ad_Viewable)),W("engagement",()=>t(n.First_Engagement)),W("complete",()=>t(n.Gameplay_Complete)),W("cta_click",()=>t(n.DSP_Click)),W("start",()=>{[5,10,15,20,25,30].forEach(a=>setTimeout(()=>t(n[`Spent_${a}_Seconds`]),a*1e3))})}}function ci(){if(!ue())return;let e=window.TJ_API;e&&e.setPlayableAPI&&e.setPlayableAPI({skipAd:()=>{try{te.finish()}catch(t){console.warn("Tapjoy skip failed",t)}}})}function Xn(){var t,n,a;let e=window.TJ_API;(t=e==null?void 0:e.objectiveComplete)==null||t.call(e),(n=e==null?void 0:e.playableFinished)==null||n.call(e),(a=e==null?void 0:e.gameplayFinished)==null||a.call(e)}function di(){de()&&(window.mintGameStart=()=>{ve(!0),ne()},window.mintGameClose=()=>{ye(!0)})}function ui(){if(!Qe())return;let e=window.NUC;!e||!e.trigger||(te.on("cta_click",()=>{var t,n;return(n=(t=e.trigger).convert)==null?void 0:n.call(t,Ne)}),te.on("complete",()=>{var t,n;return(n=(t=e.trigger).tryAgain)==null?void 0:n.call(t)}))}var te={init(e={},t){if($n=e.profile||"web_embed",ai=e.consent||{},be={...Kn,...e.ids||{}},pe=e.rootEl||pe,Ne=e.destinationUrl||(/android/i.test(navigator.userAgent)?"https://play.google.com/store":"https://www.apple.com/app-store/"),t&&(Oe=t),y("init"),document.body.oncontextmenu=()=>!1,Vn(),pi(pe),jn(),ii(),si(),!Ye){if(document.readyState==="complete")qn();else if(!Gn){Gn=!0;let n=()=>{qn(),window.removeEventListener("load",n),document.removeEventListener("DOMContentLoaded",n)};window.addEventListener("load",n),document.addEventListener("DOMContentLoaded",n)}}oi(),li(),ci(),di(),ui(),console.log(`%c @handler/playable-sdk %c v${He.version||"0.0.0"} `,"background: #007acc; color: #fff; font-size: 14px; padding: 4px 8px; border-top-left-radius: 4px; border-bottom-left-radius: 4px;","background: #e1e4e8; color: #333; font-size: 14px; padding: 4px 8px; border-top-right-radius: 4px; border-bottom-right-radius: 4px;"),Q&&!J&&(y("boot"),y("view"),y("ready"),we&&(we=!1,te.start()),J=!0),J=Q},getRoot(){return Vn()},get version(){return He.version||"0.0.0"},get maxWidth(){return fe},get maxHeight(){return me},get isLandscape(){return tt},get isReady(){return J},get isStarted(){return Ze},get isPaused(){return xe},get isFinished(){return _e},get volume(){return nt},get interactions(){return et},on(e,t){Re(We(e),t)},off(e,t){$e(We(e),t)},start(){var e,t;if(!Ze){if(!Q){we=!0;return}if(Ze=!0,y("start"),ne(),de())ye(),(e=window.gameReady)==null||e.call(window);else if(ue()){let n=window.TJ_API;(t=n==null?void 0:n.setPlayableBuild)==null||t.call(n,{orientation:tt?"landscape":"portrait",buildID:He.version||"dev"})}}},finish(){var e,t;_e||(_e=!0,y("complete"),de()?(e=window.gameEnd)==null||e.call(window):Je()?(t=parent==null?void 0:parent.postMessage)==null||t.call(parent,"complete","*"):ue()&&Xn())},install(e){if(!_e){_e=!0,ue()?(Xn(),setTimeout(()=>te.install(e),300)):(y("complete"),setTimeout(()=>te.install(e),0));return}Ue||(Ue=!0,setTimeout(()=>Ue=!1,500),y("cta_click"),y("conversion"),ri(e||Ne))},emit(e,t){let n=We(e);if(!["view","boot","start","engagement","complete","cta_click","conversion","retry","pause","resume","resize","volume","error"].includes(n)&&!n.startsWith("custom."))throw new Error(`Event ${e} must be canonical or namespaced as custom.<mechanic_id>.<event>`);let a=Qn(n,t);ze(n,a)},retry(){var e,t,n;if(de())(e=window.gameRetry)==null||e.call(window);else if(Qe()){let a=window.NUC;(n=(t=a==null?void 0:a.trigger)==null?void 0:t.tryAgain)==null||n.call(t)}y("engagement",{action:"retry"})},pause(){ye(!0)},resume(){ve(!0)},resize(e,t){ne(e,t)}},Be=te;function pi(e){let t=document.createElement("script");t.type="text/javascript",t.textContent=`
1
+ "use strict";var Ke=Object.defineProperty;var Ka=Object.getOwnPropertyDescriptor;var $a=Object.getOwnPropertyNames;var Ja=Object.prototype.hasOwnProperty;var Qa=(e,t)=>{for(var n in t)Ke(e,n,{get:t[n],enumerable:!0})},Za=(e,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of $a(t))!Ja.call(e,s)&&s!==n&&Ke(e,s,{get:()=>t[s],enumerable:!(a=Ka(t,s))||a.enumerable});return e};var Ua=e=>Za(Ke({},"__esModule",{value:!0}),e);var bi={};Qa(bi,{GameObject:()=>Ae,GameObjectManager:()=>je,Renderer:()=>Ce,Transform:()=>Se,animateHandClick:()=>ia,animatePanelEntrance:()=>aa,createBrushTexture:()=>ca,createEndGamePanel:()=>na,createHandTutorial:()=>sa,createPixiBase:()=>Un,createTutorialLabel:()=>oa,getRegisteredFontIds:()=>ta,loadAsset:()=>at,loadCharacterFrames:()=>la,registerFont:()=>ea,resolveFont:()=>I,resolveFontWeight:()=>G,updateHandAnimation:()=>ra});module.exports=Ua(bi);var Zn=require("pixi.js");var ee={};function Re(e,t,n=!1){ee[e]||(ee[e]=[]),ee[e].push({fn:t,once:n})}function $e(e,t){if(ee[e]){if(!t){delete ee[e];return}ee[e]=ee[e].filter(n=>n.fn!==t)}}function ze(e,...t){let n=ee[e];if(n)for(let a of[...n])a.fn(...t),a.once&&$e(e,a.fn)}function W(e,t){Re(e,t,!0)}var He={name:"handler-playable-sdk",version:"0.1.17",description:"Handler Playable SDK v0.1 with contract-aligned surface (root sandbox, canonical event envelope).",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.js"},"./pixi":{types:"./dist/pixi/index.d.ts",import:"./dist/pixi/index.mjs",require:"./dist/pixi/index.js"},"./three":{types:"./dist/three/index.d.ts",import:"./dist/three/index.mjs",require:"./dist/three/index.js"}},scripts:{build:"tsup src/index.ts src/pixi/index.ts src/three/index.ts --format cjs,esm --dts --clean --minify",lint:"eslint 'src/**/*.{ts,tsx}'",typecheck:"tsc --noEmit",prepublishOnly:"npm run build","publish:update":"node scripts/publish-and-update.js patch","publish:update:minor":"node scripts/publish-and-update.js minor","publish:update:major":"node scripts/publish-and-update.js major"},author:"Handler",license:"MIT",publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/HandlerAIGames/handler-playable-sdk.git"},files:["dist","LICENSE","README.md"],peerDependencies:{"pixi.js":"^8.0.0",three:"^0.160.0"},peerDependenciesMeta:{"pixi.js":{optional:!0},three:{optional:!0}},devDependencies:{"@types/three":"^0.160.0",eslint:"^8.57.1","pixi.js":"^8.8.1",three:"^0.160.0","ts-node":"^10.9.2",tsup:"^8.4.0",typescript:"^5.7.2"}};var N=0,ti=N++,Sn=N++,Cn=N++,An=N++,En=N++,kn=N++,Dn=N++,Pn=N++,Mn=N++,Fn=N++,Ln=N++,Rn=N++,_=ti;function zn(){return _===Sn}function Hn(){return _===Cn}function On(){return _===An}function Wn(){return _===En}function de(){return _===kn}function ue(){return _===Dn}function Nn(){return _===Pn}function Yn(){return _===Mn}function Bn(){return _===Fn}function Je(){return _===Ln}function Qe(){return _===Rn}function jn(){let e=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none",t=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed";if(e==="mraid")try{mraid.getState(),_=Sn;return}catch{}else if(e==="dapi")try{dapi.isReady(),_=Cn;return}catch{}if(t==="facebook")try{typeof FbPlayableAd!="undefined"&&(_=An)}catch{}else if(t==="google")try{typeof ExitApi!="undefined"&&(_=En)}catch{}else if(t==="mintegral")window.gameReady&&(_=kn);else if(t==="tapjoy")window.TJ_API&&(_=Dn);else if(t==="tiktok")window.openAppStore&&(_=Pn);else if(t==="smadex")try{window.smxTracking&&(_=Mn)}catch{}else if(t==="snapchat")try{window.ScPlayableAd&&(_=Fn)}catch{}else t==="vungle"?_=Ln:(e==="nucleo"||t==="nucleo")&&(_=Rn)}var Kn={mechanic_id:"TODO_mechanic_id",variant_id:"TODO_variant_id",deployment_id:"TODO_deployment_id",export_id:"TODO_export_id",profile_id:"TODO_profile_id",instance_id:"default"},ni=Math.random().toString(36).slice(2),pe=null,be={...Kn},$n="web_embed",ai={},Ze=!1,_e=!1,xe=!1,Jn=!1,nt=1,et=0,Ye=!1,J=!1,Ne="",fe=Math.floor(window.innerWidth),me=Math.floor(window.innerHeight),tt=fe>me,Q=!1,we=!1,In=!1,Gn=!1,Ue=!1,Oe=null;function Vn(){if(pe)return pe;let e=document.createElement("div");return e.id="handler-root",e.setAttribute("data-handler-root","true"),document.body.appendChild(e),pe=e,e}function We(e){switch(e){case"interaction":return"engagement";case"finish":return"complete";case"install":return"cta_click";default:return e}}function Qn(e,t){return{event_name:e,ts:Date.now(),session_id:ni,deployment_id:be.deployment_id,variant_id:be.variant_id,export_profile_id:be.profile_id,instance_id:be.instance_id||"default",env:$n==="mraid"?"mraid":"web",payload:t}}function y(e,t){let n=We(e),a=Qn(n,t);ze(n,a),n!==e&&ze(e,a)}function Te(){Oe&&(Oe(fe,me),Oe=null)}function he(e){nt=e,y("volume",e)}function ye(e){e&&(Jn=!0),!xe&&(xe=!0,y("pause"),he(0))}function ve(e){!e&&Jn||xe&&(xe=!1,y("resume"),he(nt))}function ne(e,t){fe=Math.floor(e||window.innerWidth),me=Math.floor(t||window.innerHeight),tt=fe>me,y("resize",{width:fe,height:me})}function ii(){if(zn())try{let e=mraid.getMaxSize();ne(e.width,e.height);let t=()=>{mraid.isViewable()&&mraid.getState()!=="hidden"?ve():ye()};if(mraid.addEventListener("viewableChange",t),mraid.addEventListener("stateChange",t),mraid.addEventListener("sizeChange",()=>{let n=mraid.getMaxSize();ne(n.width,n.height)}),mraid.getAudioVolume){let n=mraid.getAudioVolume();he(n?1:0)}if(mraid.addEventListener("audioVolumeChange",n=>{n!==null&&he(n>0?1:0)}),mraid.addEventListener("error",(n,a)=>{console.warn("mraid error:",n,"action:",a)}),Ye=!0,mraid.isViewable()&&mraid.getState()!=="hidden")Q=!0,y("boot"),y("view"),y("ready"),J=!0,Te();else{let n=()=>{Q=!0,y("boot"),y("view"),y("ready"),J=!0,Te()};mraid.addEventListener("ready",n)}}catch(e){console.warn("MRAID hook skipped",e)}}function si(){if(Hn())try{let e=dapi.getScreenSize();ne(e.width,e.height),dapi.addEventListener("viewableChange",n=>{n.isViewable?ve():ye()}),dapi.addEventListener("adResized",n=>{let a=dapi.getScreenSize();ne(n.width||a.width,n.height||a.height)});let t=dapi.getAudioVolume();if(he(t?1:0),dapi.addEventListener("audioVolumeChange",n=>he(n?1:0)),Ye=!0,dapi.isViewable())Q=!0,y("boot"),y("view"),y("ready"),J=!0,Te();else{let n=()=>{Q=!0,y("boot"),y("view"),y("ready"),J=!0,Te()};dapi.addEventListener("ready",n)}}catch(e){console.warn("DAPI hook skipped",e)}}function qn(){let e=()=>{Q||document.visibilityState==="visible"&&(document.readyState==="complete"||document.readyState==="interactive")&&(Q=!0,y("boot"),y("view"),y("ready"),J=!0,Te(),we&&(we=!1,te.start()))};window.addEventListener("resize",()=>ne()),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"?(ve(),e()):ye()}),document.readyState==="complete"||document.readyState==="interactive"?e():window.addEventListener("load",e),Ye=!0}function oi(){let e=t=>{typeof TouchEvent!="undefined"&&t instanceof TouchEvent&&(In=!0),!(In&&t instanceof MouseEvent)&&(et+=1,y("interaction",et))};document.addEventListener("mousedown",e),document.addEventListener("touchstart",e)}function ri(e){var a,s,i,o,r,l,d,p,f,u,c,h;let t=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none";if((typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed")==="google")try{(a=window.ExitApi)==null||a.exit();return}catch{}if(t==="mraid"&&typeof mraid!="undefined")mraid.open(e||"");else if(t==="dapi"&&typeof dapi!="undefined")dapi.openStoreUrl();else if(ue())(i=(s=window.TJ_API)==null?void 0:s.click)==null||i.call(s);else if(On())(r=(o=window.FbPlayableAd)==null?void 0:o.onCTAClick)==null||r.call(o);else if(Bn())(d=(l=window.ScPlayableAd)==null?void 0:l.onCTAClick)==null||d.call(l);else if(Yn())try{(f=(p=window.smxTracking)==null?void 0:p.redirect)==null||f.call(p)}catch(m){console.warn("Smadex redirect failed",m)}else if(Wn()){let m=window.ExitApi;m&&typeof m.exit=="function"?m.exit(e||Ne||""):e&&window.open(e)}else de()?(u=window.install)==null||u.call(window):Nn()?(c=window.openAppStore)==null||c.call(window):Je()?(h=parent==null?void 0:parent.postMessage)==null||h.call(parent,"download","*"):e&&window.open(e)}function li(){let e=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed",t=n=>{if(!n)return;let a=new Image;a.src=n};if(e==="bigabid"){let n=window.BIGABID_BIDTIMEMACROS;if(!n)return;W("view",()=>t(n.mraid_viewable)),W("start",()=>t(n.game_viewable)),W("engagement",()=>t(n.engagement));let a=()=>t(n.complete);W("complete",a),Re("engagement",s=>{var i;((i=s==null?void 0:s.payload)==null?void 0:i.count)>3&&a()}),W("cta_click",()=>t(n.click))}else if(e==="inmobi"){let n=window.INMOBI_DSPMACROS;if(!n)return;W("view",()=>t(n.Ad_Load_Start)),W("start",()=>t(n.Ad_Viewable)),W("engagement",()=>t(n.First_Engagement)),W("complete",()=>t(n.Gameplay_Complete)),W("cta_click",()=>t(n.DSP_Click)),W("start",()=>{[5,10,15,20,25,30].forEach(a=>setTimeout(()=>t(n[`Spent_${a}_Seconds`]),a*1e3))})}}function ci(){if(!ue())return;let e=window.TJ_API;e&&e.setPlayableAPI&&e.setPlayableAPI({skipAd:()=>{try{te.finish()}catch(t){console.warn("Tapjoy skip failed",t)}}})}function Xn(){var t,n,a;let e=window.TJ_API;(t=e==null?void 0:e.objectiveComplete)==null||t.call(e),(n=e==null?void 0:e.playableFinished)==null||n.call(e),(a=e==null?void 0:e.gameplayFinished)==null||a.call(e)}function di(){de()&&(window.mintGameStart=()=>{ve(!0),ne()},window.mintGameClose=()=>{ye(!0)})}function ui(){if(!Qe())return;let e=window.NUC;!e||!e.trigger||(te.on("cta_click",()=>{var t,n;return(n=(t=e.trigger).convert)==null?void 0:n.call(t,Ne)}),te.on("complete",()=>{var t,n;return(n=(t=e.trigger).tryAgain)==null?void 0:n.call(t)}))}var te={init(e={},t){if($n=e.profile||"web_embed",ai=e.consent||{},be={...Kn,...e.ids||{}},pe=e.rootEl||pe,Ne=e.destinationUrl||(/android/i.test(navigator.userAgent)?"https://play.google.com/store":"https://www.apple.com/app-store/"),t&&(Oe=t),y("init"),document.body.oncontextmenu=()=>!1,Vn(),pi(pe),jn(),ii(),si(),!Ye){if(document.readyState==="complete")qn();else if(!Gn){Gn=!0;let n=()=>{qn(),window.removeEventListener("load",n),document.removeEventListener("DOMContentLoaded",n)};window.addEventListener("load",n),document.addEventListener("DOMContentLoaded",n)}}oi(),li(),ci(),di(),ui(),console.log(`%c @handler/playable-sdk %c v${He.version||"0.0.0"} `,"background: #007acc; color: #fff; font-size: 14px; padding: 4px 8px; border-top-left-radius: 4px; border-bottom-left-radius: 4px;","background: #e1e4e8; color: #333; font-size: 14px; padding: 4px 8px; border-top-right-radius: 4px; border-bottom-right-radius: 4px;"),Q&&!J&&(y("boot"),y("view"),y("ready"),we&&(we=!1,te.start()),J=!0),J=Q},getRoot(){return Vn()},get version(){return He.version||"0.0.0"},get maxWidth(){return fe},get maxHeight(){return me},get isLandscape(){return tt},get isReady(){return J},get isStarted(){return Ze},get isPaused(){return xe},get isFinished(){return _e},get volume(){return nt},get interactions(){return et},on(e,t){Re(We(e),t)},off(e,t){$e(We(e),t)},start(){var e,t;if(!Ze){if(!Q){we=!0;return}if(Ze=!0,y("start"),ne(),de())ye(),(e=window.gameReady)==null||e.call(window);else if(ue()){let n=window.TJ_API;(t=n==null?void 0:n.setPlayableBuild)==null||t.call(n,{orientation:tt?"landscape":"portrait",buildID:He.version||"dev"})}}},finish(){var e,t;_e||(_e=!0,y("complete"),de()?(e=window.gameEnd)==null||e.call(window):Je()?(t=parent==null?void 0:parent.postMessage)==null||t.call(parent,"complete","*"):ue()&&Xn())},install(e){if(!_e){_e=!0,ue()?(Xn(),setTimeout(()=>te.install(e),300)):(y("complete"),setTimeout(()=>te.install(e),0));return}Ue||(Ue=!0,setTimeout(()=>Ue=!1,500),y("cta_click"),y("conversion"),ri(e||Ne))},emit(e,t){let n=We(e);if(!["view","boot","start","engagement","complete","cta_click","conversion","retry","pause","resume","resize","volume","error"].includes(n)&&!n.startsWith("custom."))throw new Error(`Event ${e} must be canonical or namespaced as custom.<mechanic_id>.<event>`);let a=Qn(n,t);ze(n,a)},retry(){var e,t,n;if(de())(e=window.gameRetry)==null||e.call(window);else if(Qe()){let a=window.NUC;(n=(t=a==null?void 0:a.trigger)==null?void 0:t.tryAgain)==null||n.call(t)}y("engagement",{action:"retry"})},pause(){ye(!0)},resume(){ve(!0)},resize(e,t){ne(e,t)}},Be=te;function pi(e){let t=document.createElement("script");t.type="text/javascript",t.textContent=`
2
2
  (function(){
3
3
  var events = ['touchstart','touchend','mousedown','keydown'];
4
4
  function unlock(){
@@ -1 +1 @@
1
- import{b as lt}from"../chunk-UHIM3PV6.mjs";import{Application as Pn}from"pixi.js";async function Mn(e,t={}){let a=new Pn;await a.init({resizeTo:e,autoDensity:!0,resolution:window.devicePixelRatio||1,antialias:!0,backgroundAlpha:0});let o=n=>{var c,d,p,u,h,l;let i=(p=(d=(c=n==null?void 0:n.width)!=null?c:e.clientWidth)!=null?d:window.innerWidth)!=null?p:320,r=(l=(h=(u=n==null?void 0:n.height)!=null?u:e.clientHeight)!=null?h:window.innerHeight)!=null?l:480;a.renderer.resize(i,r)};e.innerHTML="",e.style.position="relative",e.style.display="flex",e.style.flexDirection="column",e.style.alignItems="stretch",e.style.width="100%",e.style.height="100dvh",e.style.minHeight="100vh",e.style.maxWidth="100%",e.style.maxHeight="100%",e.style.boxSizing="border-box",e.style.overflow="hidden",t.background&&(e.style.background=t.background),e.appendChild(a.canvas);let s=document.createElement("div");return s.setAttribute("style",["position:absolute","inset:0","display:flex","flex-direction:column","align-items:center","justify-content:flex-start","gap:12px","pointer-events:none","font-family:Arial,sans-serif","padding:20px 16px","padding-bottom:clamp(24px, 6vh, 96px)","box-sizing:border-box","z-index:2"].join(";")),e.appendChild(s),lt.on("pause",()=>{a.ticker.stop(),document.querySelectorAll("audio").forEach(i=>i.pause())}),lt.on("resume",()=>{a.ticker.start(),document.querySelectorAll("audio").forEach(i=>{i.currentTime>0&&!i.ended&&i.play().catch(()=>{})})}),lt.on("resize",({payload:n})=>{o({width:n==null?void 0:n.width,height:n==null?void 0:n.height})}),window.addEventListener("resize",()=>o()),requestAnimationFrame(()=>o()),{app:a,stage:a.stage,overlay:s,applySize:o}}var ct=class{constructor(t){var a,o;this.position=(t==null?void 0:t.position)||{x:0,y:0},this.scale=(a=t==null?void 0:t.scale)!=null?a:1,this.rotation=(o=t==null?void 0:t.rotation)!=null?o:0}update(t){t.position!==void 0&&(this.position={...t.position}),t.scale!==void 0&&(this.scale=t.scale),t.rotation!==void 0&&(this.rotation=t.rotation)}syncToPixi(t){t.position.set(this.position.x,this.position.y),t.scale.set(this.scale),t.rotation=this.rotation}},dt=class{constructor(t){var a,o,s,n;this.z_index=(a=t==null?void 0:t.z_index)!=null?a:0,this.alpha=(o=t==null?void 0:t.alpha)!=null?o:1,this.visible=(s=t==null?void 0:t.visible)!=null?s:!0,this.tint=(n=t==null?void 0:t.tint)!=null?n:null}update(t){t.z_index!==void 0&&(this.z_index=t.z_index),t.alpha!==void 0&&(this.alpha=t.alpha),t.visible!==void 0&&(this.visible=t.visible),t.tint!==void 0&&(this.tint=t.tint)}syncToPixi(t){t.zIndex=this.z_index,t.alpha=this.alpha,t.visible=this.visible,this.tint!==null&&"tint"in t&&(t.tint=this.tint)}},ht=class{constructor(t,a,o,s){this.instanceId=t,this.objectConfig=a,this.pixiObject=o,this._config=s,this.transform=new ct(s.transform),this.renderer=new dt(s.render),this.sync()}sync(){this.transform.syncToPixi(this.pixiObject),this.renderer.syncToPixi(this.pixiObject)}updateConfig(t){this._config=t,t.transform&&this.transform.update(t.transform),t.render&&this.renderer.update(t.render),this.sync()}getComponent(t){return this._config[t]}getPosition(){return{...this.transform.position}}setPosition(t,a){this.transform.position={x:t,y:a},this.transform.syncToPixi(this.pixiObject)}getAlpha(){return this.renderer.alpha}setAlpha(t){this.renderer.alpha=t,this.renderer.syncToPixi(this.pixiObject)}getVisible(){return this.renderer.visible}setVisible(t){this.renderer.visible=t,this.renderer.syncToPixi(this.pixiObject)}},gt=class{constructor(t){this.objects=new Map;this.config=t}create(t,a){let o=this.config.objects.get(t);if(!o)throw new Error(`Object config not found: ${t}`);let s=new ht(t,o.object_config||t,a,o);return this.objects.set(t,s),s}get(t){return this.objects.get(t)}updateConfig(t){this.config=t;for(let[a,o]of this.objects.entries()){let s=t.objects.get(a);s&&o.updateConfig(s)}}getAll(){return Array.from(this.objects.values())}remove(t){this.objects.delete(t)}clear(){this.objects.clear()}};var pt={"brand.primary":{family:"Arial, sans-serif",weight:"400"},"brand.warning":{family:"Arial Black, Arial, sans-serif",weight:"900"},"brand.heading":{family:"Arial Black, Arial, sans-serif",weight:"800"},"brand.body":{family:"Arial, sans-serif",weight:"400"}};function X(e){let t=pt[e];return t?t.family:(console.warn(`Font ID "${e}" not found in registry, using fallback`),"Arial, sans-serif")}function q(e){var a;let t=pt[e];return t&&(a=t.weight)!=null?a:"400"}function En(e,t){pt[e]=t}function Dn(){return Object.keys(pt)}import{Container as Yn,Graphics as ut,Text as tt,Sprite as Le,Texture as _t}from"pixi.js";function kn(e,t,a){var Dt,Yt,kt,zt,Ht,Wt,Bt,Rt,Lt,Gt,Nt,Xt,qt,$t,Vt,jt,Jt,Kt,Qt,Zt,Ot,It,Ut,te,ee,ne,ae,se,ie,oe,re,le,ce,de,he,pe,ue,me,fe,ye,ge,_e,be,xe,we,Te,Ce,Se,ve,Ae,Fe,Pe,Me,Ee,De,Ye,ke,ze,He,We;let o=e.objects.get("ui_endgame_1"),s=e.objects.get("ui_endgame_logo_1"),n=e.objects.get("ui_endgame_title_1"),i=e.objects.get("ui_endgame_subtitle_1"),r=e.objects.get("ui_endgame_footer_1"),c=e.objects.get("ui_endgame_cta_1"),d=e.objects.get("ui_endgame_cta_hint_1"),p=e.objects.get("ui_endgame_hand_1"),u=e.engine.runtime||{},h=new Yn;h.alpha=0,h.visible=!1;let l=((Dt=o==null?void 0:o.gameplay)==null?void 0:Dt.tuning)||{},m=(o==null?void 0:o.render)||{},f=(Yt=l.panel_width)!=null?Yt:320,y=(kt=l.panel_height)!=null?kt:400,_=(zt=l.panel_padding)!=null?zt:32,b=(Ht=l.panel_radius)!=null?Ht:24,C=m.background_color||l.panel_bg_color||"#1a0a0a",x=m.background_alpha!==void 0&&m.background_alpha!==null?m.background_alpha:(Wt=l.panel_bg_alpha)!=null?Wt:.98,S=m.border_color||l.panel_border_color||"#ffffff",v=(Bt=l.panel_border_width)!=null?Bt:2,w=(Rt=l.panel_border_alpha)!=null?Rt:.3,T=new ut;T.roundRect(-f/2,-y/2,f,y,b);let g=C.replace("#","");T.fill({color:parseInt(g,16),alpha:x});let A=S.replace("#","");T.stroke({color:parseInt(A,16),width:v,alpha:w});let M=new ut;M.roundRect(-f/2+2,-y/2+2,f-4,y-4,b-2),M.stroke({color:16777215,width:1,alpha:.1}),T.addChild(M),h.addChild(T);let B=((Lt=s==null?void 0:s.gameplay)==null?void 0:Lt.tuning)||{},$=(s==null?void 0:s.transform)||{},z=(Gt=B.logo_size)!=null?Gt:56,R=(Nt=$.scale)!=null?Nt:1,j=(qt=(Xt=$.offset)==null?void 0:Xt.y)!=null?qt:-130,qe=($t=B.logo_alpha)!=null?$t:1,F=new Le(a||_t.EMPTY);F.anchor.set(.5);let K=0,Q=0;if(a&&a!==_t.EMPTY){let P=a.frame,N=a.baseTexture;P&&P.width&&P.height?(K=P.width,Q=P.height):N&&N.width&&N.height?(K=N.width,Q=N.height):a.width&&a.height&&(K=a.width,Q=a.height)}if(K>0&&Q>0){let P=K/Q,N,yt;P>1?(N=z,yt=z/P):(yt=z,N=z*P);let Be=N/K,Re=yt/Q;Be*=R,Re*=R,F.scale.set(Be,Re)}else{let P=z/100*R;F.scale.set(P)}F.position.set(0,j),F.alpha=0,F.visible=!0,F.targetAlpha=qe,F.baseScaleX=F.scale.x,F.baseScaleY=F.scale.y,h.addChild(F);let E=n==null?void 0:n.ui,H=((Vt=n==null?void 0:n.gameplay)==null?void 0:Vt.tuning)||{},$e=(E==null?void 0:E.text)||"MISSION ACCOMPLISHED",xt=(E==null?void 0:E.font)||"brand.heading",Ve=(E==null?void 0:E.fontSize)||24,je=(jt=E==null?void 0:E.letterSpacing)!=null?jt:1,et=(Jt=n==null?void 0:n.render)==null?void 0:Jt.tint,Je=typeof et=="string"?et:et?`#${et.toString(16).padStart(6,"0")}`:"#00FF88",wt=f-_*2-30,Ke=H.font_weight_override?H.font_weight_override:q(xt),V=new tt({text:$e,style:{fontFamily:X(xt),fontSize:Ve,fontWeight:Ke,fill:Je,align:"center",letterSpacing:je,wordWrap:!1,stroke:{color:H.stroke_color||"#000000",width:(Kt=H.stroke_width)!=null?Kt:2},dropShadow:{color:H.shadow_color||"#000000",alpha:(Qt=H.shadow_alpha)!=null?Qt:.9,angle:(Zt=H.shadow_angle)!=null?Zt:0,blur:(Ot=H.shadow_blur)!=null?Ot:8,distance:(It=H.shadow_distance)!=null?It:4}}});if(V.width>wt){let P=wt/V.width;V.scale.set(P)}V.anchor.set(.5);let Tt=(Ut=l.title_offset_y)!=null?Ut:30,Qe=Tt+((te=H.animation_start_y_offset)!=null?te:-20);V.position.set(0,Qe),V.alpha=0,h.addChild(V);let D=i==null?void 0:i.ui,Ct=((ee=i==null?void 0:i.gameplay)==null?void 0:ee.tuning)||{},Ze=(D==null?void 0:D.text)||"RESCUE COMPLETE",St=(D==null?void 0:D.font)||"brand.body",Oe=(D==null?void 0:D.fontSize)||11,Ie=(ne=D==null?void 0:D.letterSpacing)!=null?ne:.5,nt=(ae=i==null?void 0:i.render)==null?void 0:ae.tint,Ue=typeof nt=="string"?nt:nt?`#${nt.toString(16).padStart(6,"0")}`:"#B0B0B0",Z=new tt({text:Ze,style:{fontFamily:X(St),fontSize:Oe,fontWeight:q(St),fill:Ue,align:"center",letterSpacing:Ie}});Z.anchor.set(.5);let tn=Tt+20+((se=Ct.animation_start_y_offset)!=null?se:-10);Z.position.set(0,tn),Z.alpha=0,Z.animationStartYOffset=(ie=Ct.animation_start_y_offset)!=null?ie:-10,h.addChild(Z);let L=r==null?void 0:r.ui,vt=((oe=r==null?void 0:r.gameplay)==null?void 0:oe.tuning)||{},en=(L==null?void 0:L.text)||((re=u.ui)==null?void 0:re.cta_hint)||"Continue the adventure!",At=(L==null?void 0:L.font)||"brand.body",nn=(L==null?void 0:L.fontSize)||16,at=(le=r==null?void 0:r.render)==null?void 0:le.tint,an=typeof at=="string"?at:at?`#${at.toString(16).padStart(6,"0")}`:"#FFFFFF",sn=(ce=vt.max_width)!=null?ce:f-_*2,on=(de=vt.line_height)!=null?de:1.4,O=new tt({text:en,style:{fontFamily:X(At),fontSize:nn,fontWeight:q(At),fill:an,align:"center",wordWrap:!0,wordWrapWidth:sn,lineHeight:on}});O.anchor.set(.5);let rn=(he=l.footer_offset_y)!=null?he:120;O.position.set(0,rn);let ln=((pe=r==null?void 0:r.render)==null?void 0:pe.alpha)!==void 0&&((ue=r==null?void 0:r.render)==null?void 0:ue.alpha)!==null?r.render.alpha:1;O.alpha=0,O.targetAlpha=ln,h.addChild(O);let G=((me=c==null?void 0:c.gameplay)==null?void 0:me.tuning)||{},Y=c==null?void 0:c.ui,st=(fe=G.button_width)!=null?fe:260,it=(ye=G.button_height)!=null?ye:56,Ft=(ge=G.button_radius)!=null?ge:16,cn=G.button_bg_color||((_e=u.theme)==null?void 0:_e.cta_background)||"#ffb43b",dn=(be=G.button_bg_alpha)!=null?be:1,hn=G.button_border_color||"#ffffff",pn=(xe=G.button_border_width)!=null?xe:2,un=(we=G.button_border_alpha)!=null?we:.2,ot=(Te=l.cta_offset_y)!=null?Te:160,W=new ut;W.roundRect(-st/2,-it/2,st,it,Ft);let mn=cn.replace("#","");W.fill({color:parseInt(mn,16),alpha:dn});let fn=hn.replace("#","");W.stroke({color:parseInt(fn,16),width:pn,alpha:un});let mt=new ut;mt.roundRect(-st/2+2,-it/2+2,st-4,it-4,Ft-2),mt.stroke({color:0,width:1,alpha:.15}),W.addChild(mt),W.position.set(0,ot),W.alpha=0,W.eventMode="static",W.cursor="pointer",h.addChild(W);let yn=(Y==null?void 0:Y.text)||((Ce=u.ui)==null?void 0:Ce.cta_label_end)||"DOWNLOAD",Pt=(Y==null?void 0:Y.font)||"brand.heading",gn=(Y==null?void 0:Y.fontSize)||20,_n=G.button_text_color||((Se=u.theme)==null?void 0:Se.cta_text)||"#1a0a0a",U=new tt({text:yn,style:{fontFamily:X(Pt),fontSize:gn,fontWeight:q(Pt),fill:_n,align:"center",letterSpacing:(ve=Y==null?void 0:Y.letterSpacing)!=null?ve:1}});U.anchor.set(.5),U.position.set(0,ot),U.alpha=0,h.addChild(U);let k=d==null?void 0:d.ui,Mt=((Ae=d==null?void 0:d.gameplay)==null?void 0:Ae.tuning)||{},bn=(k==null?void 0:k.text)||"Play the full game",Et=(k==null?void 0:k.font)||"brand.body",xn=(k==null?void 0:k.fontSize)||11,wn=(Fe=k==null?void 0:k.letterSpacing)!=null?Fe:0,rt=(Pe=d==null?void 0:d.render)==null?void 0:Pe.tint,Tn=typeof rt=="string"?rt:rt?`#${rt.toString(16).padStart(6,"0")}`:"#CCCCCC",I=new tt({text:bn,style:{fontFamily:X(Et),fontSize:xn,fontWeight:q(Et),fill:Tn,align:"center",letterSpacing:wn}});I.anchor.set(.5);let Cn=ot+35+((Me=Mt.animation_start_y_offset)!=null?Me:5);I.position.set(0,Cn),I.alpha=0,I.animationStartYOffset=(Ee=Mt.animation_start_y_offset)!=null?Ee:5,h.addChild(I);let ft=((De=p==null?void 0:p.gameplay)==null?void 0:De.tuning)||{},Sn=(Ye=ft.hand_offset_x)!=null?Ye:50,vn=(ke=ft.hand_offset_y)!=null?ke:50,An=(He=(ze=p==null?void 0:p.transform)==null?void 0:ze.scale)!=null?He:.1875,Fn=(We=ft.hand_scale_multiplier)!=null?We:2.5,J=new Le(t||_t.EMPTY);return J.anchor.set(.5),J.scale.set(An*Fn),J.position.set(Sn,ot+vn),J.alpha=0,J.visible=!1,h.addChild(J),{panel:h,logo:F,title:V,subtitle:Z,footer:O,ctaButton:W,ctaText:U,ctaHint:I,hand:J}}function zn(e,t,a){var v,w,T,g,A,M,B,$;let o=t.objects.get("ui_endgame_1"),s=((v=o==null?void 0:o.gameplay)==null?void 0:v.tuning)||{},n=(w=s.animation_duration_ms)!=null?w:800,i=(T=s.fade_in_duration_ms)!=null?T:600,r=(g=s.scale_animation_intensity)!=null?g:.1,c=(A=s.logo_animation_delay_ms)!=null?A:100,d=(M=s.title_animation_delay_ms)!=null?M:200,p=(B=s.footer_animation_delay_ms)!=null?B:300,u=($=s.cta_animation_delay_ms)!=null?$:400,{panel:h,logo:l,title:m,subtitle:f,footer:y,ctaButton:_,ctaText:b,ctaHint:C}=e;h.visible=!0;let x=Date.now(),S=()=>{let z=Date.now()-x,R=Math.min(z/i,1),j=1-Math.pow(1-R,3);h.alpha=j,h.scale.set(1+r*(1-j)),R<1?requestAnimationFrame(S):(setTimeout(()=>Hn(l,n,t),c),setTimeout(()=>{Wn(m,n),setTimeout(()=>Bn(f,n),50)},d),setTimeout(()=>Rn(y,n),p),setTimeout(()=>{Ln(_,b,n),setTimeout(()=>Gn(C,n),50),a&&a()},u))};S()}function Hn(e,t,a){var h,l,m,f,y;let o=a==null?void 0:a.objects.get("ui_endgame_logo_1"),n=(l=(((h=o==null?void 0:o.gameplay)==null?void 0:h.tuning)||{}).animation_start_scale)!=null?l:1.2,i=Date.now(),r=e.alpha,c=(m=e.targetAlpha)!=null?m:1,d=(f=e.baseScaleX)!=null?f:e.scale.x,p=(y=e.baseScaleY)!=null?y:e.scale.y,u=()=>{let _=Date.now()-i,b=Math.min(_/t,1),C=1-Math.pow(1-b,2);e.alpha=r+(c-r)*C;let x=n+(1-n)*C;e.scale.set(d*x,p*x),b<1&&requestAnimationFrame(u)};u()}function Wn(e,t){let a=Date.now(),o=e.alpha,s=e.y,n=()=>{let i=Date.now()-a,r=Math.min(i/t,1),c=1-Math.pow(1-r,2);e.alpha=o+(1-o)*c,e.y=s-20*(1-c),r<1&&requestAnimationFrame(n)};n()}function Bn(e,t){var r;let a=Date.now(),o=e.alpha,s=e.position.y,n=s-((r=e.animationStartYOffset)!=null?r:-10),i=()=>{let c=Date.now()-a,d=Math.min(c/t,1),p=1-Math.pow(1-d,2);e.alpha=o+(1-o)*p,e.position.y=s+(n-s)*p,d<1&&requestAnimationFrame(i)};i()}function Rn(e,t){var i;let a=Date.now(),o=e.alpha,s=(i=e.targetAlpha)!=null?i:1,n=()=>{let r=Date.now()-a,c=Math.min(r/t,1),d=1-Math.pow(1-c,2);e.alpha=o+(s-o)*d,c<1&&requestAnimationFrame(n)};n()}function Ln(e,t,a){let o=Date.now(),s=e.alpha,n=()=>{let i=Date.now()-o,r=Math.min(i/a,1),c=1-Math.pow(1-r,2);e.alpha=s+(1-s)*c,t.alpha=s+(1-s)*c,e.scale.set(1+.1*(1-c)),r<1&&requestAnimationFrame(n)};n()}function Gn(e,t){var r;let a=Date.now(),o=e.alpha,s=e.position.y,n=s-((r=e.animationStartYOffset)!=null?r:5),i=()=>{let c=Date.now()-a,d=Math.min(c/t,1),p=1-Math.pow(1-d,2);e.alpha=o+(1-o)*p,e.position.y=s+(n-s)*p,d<1&&requestAnimationFrame(i)};i()}function Nn(e,t,a,o){var p,u,h,l;let s=a.objects.get("ui_endgame_hand_1"),n=((p=s==null?void 0:s.gameplay)==null?void 0:p.tuning)||{},i=(u=n.click_animation_duration_ms)!=null?u:600,r=(h=n.click_delay_ms)!=null?h:2e3,c=(l=n.click_repeat_delay_ms)!=null?l:3e3,d=()=>{var v,w;e.visible=!0,e.alpha=1;let m=e.x,f=e.y,y=(v=n.hand_offset_x)!=null?v:50,_=(w=n.hand_offset_y)!=null?w:50,b=t.x+y,C=t.y+_,x=Date.now(),S=()=>{var z,R,j;let T=Date.now()-x,g=Math.min(T/i,1),A=g<.5?2*g*g:1-Math.pow(-2*g+2,2)/2;e.x=m+(b-m)*A,e.y=f+(C-f)*A;let M=(R=(z=s==null?void 0:s.transform)==null?void 0:z.scale)!=null?R:.1875,B=(j=n.hand_scale_multiplier)!=null?j:2.5,$=M*B;e.scale.set($+$*.2*Math.sin(g*Math.PI)),g<1?requestAnimationFrame(S):(t.scale.set(.95),setTimeout(()=>{t.scale.set(1),o()},100),setTimeout(()=>{e.alpha=0,setTimeout(()=>{e.x=m,e.y=f,d()},c)},500))};S()};setTimeout(d,r)}import{Sprite as Xn,Text as qn}from"pixi.js";function $n(e,t,a){var p,u,h,l;let o=t.objects.get("hand_tutorial_1"),s=((p=o==null?void 0:o.gameplay)==null?void 0:p.tuning)||{},n=(o==null?void 0:o.render)||{},i=(o==null?void 0:o.transform)||{},r=new Xn(e);r.anchor.set(.5),r.alpha=0;let c=(u=s.hand_scale_multiplier)!=null?u:2.5,d=(h=i.scale)!=null?h:.1875;return r.scale.set(d*c),r.zIndex=(l=n.z_index)!=null?l:99999,r}function Vn(e){var m,f,y,_,b,C,x,S,v,w;let t=e.objects.get("ui_tutorial_1"),a=t==null?void 0:t.ui,o=(t==null?void 0:t.render)||{},s=((m=e.engine.runtime)==null?void 0:m.ui_styles)||{},n=((f=e.engine.runtime)==null?void 0:f.ui)||{},i=(a==null?void 0:a.text)||n.tutorial_label||n.label_text||"CLEAN!",r=(a==null?void 0:a.font)||"brand.warning",c=(a==null?void 0:a.fontSize)||s.label_font_size||52,d=(_=a==null?void 0:a.letterSpacing)!=null?_:(y=s.label_letter_spacing)!=null?y:-1,p=(a==null?void 0:a.align)||"center",u=o.tint,h=typeof u=="string"?u:u?`#${u.toString(16).padStart(6,"0")}`:s.label_fill||"#FFF1C1",l=new qn({text:i,style:{fontFamily:X(r),fontSize:c,fontWeight:q(r),fill:h,align:p,letterSpacing:d,stroke:{color:s.label_stroke||"#8B0000",width:2},dropShadow:{color:s.label_shadow_color||"#000000",alpha:(b=s.label_shadow_alpha)!=null?b:.8,angle:(C=s.label_shadow_angle)!=null?C:0,blur:(x=s.label_shadow_blur)!=null?x:4,distance:(S=s.label_shadow_distance)!=null?S:2}}});return l.anchor.set(.5,0),l.alpha=(v=o.alpha)!=null?v:0,l.visible=(w=o.visible)!=null?w:!0,l}function jn(e,t,a,o,s){var c,d,p,u,h,l,m;let n=s.objects.get("hand_tutorial_1"),i=((c=n==null?void 0:n.gameplay)==null?void 0:c.tuning)||{},r=(n==null?void 0:n.transform)||{};if(!o){let f=(d=i.animation_duration)!=null?d:1.5,y=a%f/f,_=y<.5?2*y*y:-1+(4-2*y)*y,b=(p=i.x_offset)!=null?p:0,C=(u=i.y_offset)!=null?u:0,x=(h=i.animation_range)!=null?h:40,S=x*.7,v=x,w=t.x+b+S,T=t.y+C+v,g=w+S,A=T+v;e.x=w+(g-w)*_,e.y=T+(A-T)*_;let M=(l=r.scale)!=null?l:.1875,B=(m=i.hand_scale_multiplier)!=null?m:2.5;e.scale.set(M*B)}}import{Graphics as Ge,Assets as Ne,Texture as Jn,Rectangle as Kn,Color as bt}from"pixi.js";async function Xe(e,t,a=16777215,o=!1){try{let n=(globalThis.INLINE_ASSETS||{})[e];return await Ne.load(n||e)}catch{console.warn(`Asset missing: ${e}. Using placeholder.`);let n=new Ge;return o?n.roundRect(0,0,60,120,10).fill({color:a}):(n.circle(30,30,30).fill({color:a}),n.rect(25,30,10,40).fill({color:a})),t.renderer.generateTexture(n)}}async function Qn(e,t,a){var f,y,_,b,C,x,S,v,w,T;let s=(globalThis.INLINE_ASSETS||{})[e]||e,n;try{n=await Ne.load(s),console.log("[character] loaded sheet",{path:e,sourceUsed:s})}catch(g){let M=(a.gameplay.character_sheet||{}).fallback_color||"#ff00ff";n=await Xe(e,t,new bt(M).toNumber(),!0),console.warn("[character] fallback loadAsset used",{path:e,err:g})}let i=n.source||n.baseTexture||n;i&&"valid"in i&&i.valid===!1&&typeof i.once=="function"&&await new Promise(g=>i.once("loaded",g));let r=a.gameplay.character_sheet||{},c=(f=r.cols)!=null?f:3,d=(y=r.rows)!=null?y:2,p=(x=(C=(_=i==null?void 0:i.width)!=null?_:i==null?void 0:i.pixelWidth)!=null?C:(b=i==null?void 0:i.baseTexture)==null?void 0:b.width)!=null?x:n.width,u=(T=(w=(S=i==null?void 0:i.height)!=null?S:i==null?void 0:i.pixelHeight)!=null?w:(v=i==null?void 0:i.baseTexture)==null?void 0:v.height)!=null?T:n.height,h=p/c,l=u/d;if(!Number.isFinite(h)||!Number.isFinite(l)||h<=0||l<=0||!i)return[n];let m=[];for(let g=0;g<d;g++)for(let A=0;A<c;A++)m.push(new Jn({source:i,frame:new Kn(A*h,g*l,h,l)}));return m.length>2&&m.push(...m.slice(1,-1).reverse()),console.log("[character] frames prepared",{count:m.length}),m}function Zn(e,t){var p,u,h,l;let a=t.gameplay.brush||{},o=new bt(t.theme.brush_color||"#ffffff").toNumber(),s=(p=a.radius)!=null?p:20,n=(u=a.inner_radius)!=null?u:15,i=(h=a.alpha)!=null?h:.8,r=(l=a.inner_alpha)!=null?l:.3,c=a.inner_color||"#ffffff",d=new Ge;return d.circle(0,0,s).fill({color:o,alpha:i}),d.circle(0,0,n).fill({color:new bt(c).toNumber(),alpha:r}),e.renderer.generateTexture(d)}export{ht as GameObject,gt as GameObjectManager,dt as Renderer,ct as Transform,Nn as animateHandClick,zn as animatePanelEntrance,Zn as createBrushTexture,kn as createEndGamePanel,$n as createHandTutorial,Mn as createPixiBase,Vn as createTutorialLabel,Dn as getRegisteredFontIds,Xe as loadAsset,Qn as loadCharacterFrames,En as registerFont,X as resolveFont,q as resolveFontWeight,jn as updateHandAnimation};
1
+ import{b as lt}from"../chunk-RAJK6QAT.mjs";import{Application as Pn}from"pixi.js";async function Mn(e,t={}){let a=new Pn;await a.init({resizeTo:e,autoDensity:!0,resolution:window.devicePixelRatio||1,antialias:!0,backgroundAlpha:0});let o=n=>{var c,d,p,u,h,l;let i=(p=(d=(c=n==null?void 0:n.width)!=null?c:e.clientWidth)!=null?d:window.innerWidth)!=null?p:320,r=(l=(h=(u=n==null?void 0:n.height)!=null?u:e.clientHeight)!=null?h:window.innerHeight)!=null?l:480;a.renderer.resize(i,r)};e.innerHTML="",e.style.position="relative",e.style.display="flex",e.style.flexDirection="column",e.style.alignItems="stretch",e.style.width="100%",e.style.height="100dvh",e.style.minHeight="100vh",e.style.maxWidth="100%",e.style.maxHeight="100%",e.style.boxSizing="border-box",e.style.overflow="hidden",t.background&&(e.style.background=t.background),e.appendChild(a.canvas);let s=document.createElement("div");return s.setAttribute("style",["position:absolute","inset:0","display:flex","flex-direction:column","align-items:center","justify-content:flex-start","gap:12px","pointer-events:none","font-family:Arial,sans-serif","padding:20px 16px","padding-bottom:clamp(24px, 6vh, 96px)","box-sizing:border-box","z-index:2"].join(";")),e.appendChild(s),lt.on("pause",()=>{a.ticker.stop(),document.querySelectorAll("audio").forEach(i=>i.pause())}),lt.on("resume",()=>{a.ticker.start(),document.querySelectorAll("audio").forEach(i=>{i.currentTime>0&&!i.ended&&i.play().catch(()=>{})})}),lt.on("resize",({payload:n})=>{o({width:n==null?void 0:n.width,height:n==null?void 0:n.height})}),window.addEventListener("resize",()=>o()),requestAnimationFrame(()=>o()),{app:a,stage:a.stage,overlay:s,applySize:o}}var ct=class{constructor(t){var a,o;this.position=(t==null?void 0:t.position)||{x:0,y:0},this.scale=(a=t==null?void 0:t.scale)!=null?a:1,this.rotation=(o=t==null?void 0:t.rotation)!=null?o:0}update(t){t.position!==void 0&&(this.position={...t.position}),t.scale!==void 0&&(this.scale=t.scale),t.rotation!==void 0&&(this.rotation=t.rotation)}syncToPixi(t){t.position.set(this.position.x,this.position.y),t.scale.set(this.scale),t.rotation=this.rotation}},dt=class{constructor(t){var a,o,s,n;this.z_index=(a=t==null?void 0:t.z_index)!=null?a:0,this.alpha=(o=t==null?void 0:t.alpha)!=null?o:1,this.visible=(s=t==null?void 0:t.visible)!=null?s:!0,this.tint=(n=t==null?void 0:t.tint)!=null?n:null}update(t){t.z_index!==void 0&&(this.z_index=t.z_index),t.alpha!==void 0&&(this.alpha=t.alpha),t.visible!==void 0&&(this.visible=t.visible),t.tint!==void 0&&(this.tint=t.tint)}syncToPixi(t){t.zIndex=this.z_index,t.alpha=this.alpha,t.visible=this.visible,this.tint!==null&&"tint"in t&&(t.tint=this.tint)}},ht=class{constructor(t,a,o,s){this.instanceId=t,this.objectConfig=a,this.pixiObject=o,this._config=s,this.transform=new ct(s.transform),this.renderer=new dt(s.render),this.sync()}sync(){this.transform.syncToPixi(this.pixiObject),this.renderer.syncToPixi(this.pixiObject)}updateConfig(t){this._config=t,t.transform&&this.transform.update(t.transform),t.render&&this.renderer.update(t.render),this.sync()}getComponent(t){return this._config[t]}getPosition(){return{...this.transform.position}}setPosition(t,a){this.transform.position={x:t,y:a},this.transform.syncToPixi(this.pixiObject)}getAlpha(){return this.renderer.alpha}setAlpha(t){this.renderer.alpha=t,this.renderer.syncToPixi(this.pixiObject)}getVisible(){return this.renderer.visible}setVisible(t){this.renderer.visible=t,this.renderer.syncToPixi(this.pixiObject)}},gt=class{constructor(t){this.objects=new Map;this.config=t}create(t,a){let o=this.config.objects.get(t);if(!o)throw new Error(`Object config not found: ${t}`);let s=new ht(t,o.object_config||t,a,o);return this.objects.set(t,s),s}get(t){return this.objects.get(t)}updateConfig(t){this.config=t;for(let[a,o]of this.objects.entries()){let s=t.objects.get(a);s&&o.updateConfig(s)}}getAll(){return Array.from(this.objects.values())}remove(t){this.objects.delete(t)}clear(){this.objects.clear()}};var pt={"brand.primary":{family:"Arial, sans-serif",weight:"400"},"brand.warning":{family:"Arial Black, Arial, sans-serif",weight:"900"},"brand.heading":{family:"Arial Black, Arial, sans-serif",weight:"800"},"brand.body":{family:"Arial, sans-serif",weight:"400"}};function X(e){let t=pt[e];return t?t.family:(console.warn(`Font ID "${e}" not found in registry, using fallback`),"Arial, sans-serif")}function q(e){var a;let t=pt[e];return t&&(a=t.weight)!=null?a:"400"}function En(e,t){pt[e]=t}function Dn(){return Object.keys(pt)}import{Container as Yn,Graphics as ut,Text as tt,Sprite as Le,Texture as _t}from"pixi.js";function kn(e,t,a){var Dt,Yt,kt,zt,Ht,Wt,Bt,Rt,Lt,Gt,Nt,Xt,qt,$t,Vt,jt,Jt,Kt,Qt,Zt,Ot,It,Ut,te,ee,ne,ae,se,ie,oe,re,le,ce,de,he,pe,ue,me,fe,ye,ge,_e,be,xe,we,Te,Ce,Se,ve,Ae,Fe,Pe,Me,Ee,De,Ye,ke,ze,He,We;let o=e.objects.get("ui_endgame_1"),s=e.objects.get("ui_endgame_logo_1"),n=e.objects.get("ui_endgame_title_1"),i=e.objects.get("ui_endgame_subtitle_1"),r=e.objects.get("ui_endgame_footer_1"),c=e.objects.get("ui_endgame_cta_1"),d=e.objects.get("ui_endgame_cta_hint_1"),p=e.objects.get("ui_endgame_hand_1"),u=e.engine.runtime||{},h=new Yn;h.alpha=0,h.visible=!1;let l=((Dt=o==null?void 0:o.gameplay)==null?void 0:Dt.tuning)||{},m=(o==null?void 0:o.render)||{},f=(Yt=l.panel_width)!=null?Yt:320,y=(kt=l.panel_height)!=null?kt:400,_=(zt=l.panel_padding)!=null?zt:32,b=(Ht=l.panel_radius)!=null?Ht:24,C=m.background_color||l.panel_bg_color||"#1a0a0a",x=m.background_alpha!==void 0&&m.background_alpha!==null?m.background_alpha:(Wt=l.panel_bg_alpha)!=null?Wt:.98,S=m.border_color||l.panel_border_color||"#ffffff",v=(Bt=l.panel_border_width)!=null?Bt:2,w=(Rt=l.panel_border_alpha)!=null?Rt:.3,T=new ut;T.roundRect(-f/2,-y/2,f,y,b);let g=C.replace("#","");T.fill({color:parseInt(g,16),alpha:x});let A=S.replace("#","");T.stroke({color:parseInt(A,16),width:v,alpha:w});let M=new ut;M.roundRect(-f/2+2,-y/2+2,f-4,y-4,b-2),M.stroke({color:16777215,width:1,alpha:.1}),T.addChild(M),h.addChild(T);let B=((Lt=s==null?void 0:s.gameplay)==null?void 0:Lt.tuning)||{},$=(s==null?void 0:s.transform)||{},z=(Gt=B.logo_size)!=null?Gt:56,R=(Nt=$.scale)!=null?Nt:1,j=(qt=(Xt=$.offset)==null?void 0:Xt.y)!=null?qt:-130,qe=($t=B.logo_alpha)!=null?$t:1,F=new Le(a||_t.EMPTY);F.anchor.set(.5);let K=0,Q=0;if(a&&a!==_t.EMPTY){let P=a.frame,N=a.baseTexture;P&&P.width&&P.height?(K=P.width,Q=P.height):N&&N.width&&N.height?(K=N.width,Q=N.height):a.width&&a.height&&(K=a.width,Q=a.height)}if(K>0&&Q>0){let P=K/Q,N,yt;P>1?(N=z,yt=z/P):(yt=z,N=z*P);let Be=N/K,Re=yt/Q;Be*=R,Re*=R,F.scale.set(Be,Re)}else{let P=z/100*R;F.scale.set(P)}F.position.set(0,j),F.alpha=0,F.visible=!0,F.targetAlpha=qe,F.baseScaleX=F.scale.x,F.baseScaleY=F.scale.y,h.addChild(F);let E=n==null?void 0:n.ui,H=((Vt=n==null?void 0:n.gameplay)==null?void 0:Vt.tuning)||{},$e=(E==null?void 0:E.text)||"MISSION ACCOMPLISHED",xt=(E==null?void 0:E.font)||"brand.heading",Ve=(E==null?void 0:E.fontSize)||24,je=(jt=E==null?void 0:E.letterSpacing)!=null?jt:1,et=(Jt=n==null?void 0:n.render)==null?void 0:Jt.tint,Je=typeof et=="string"?et:et?`#${et.toString(16).padStart(6,"0")}`:"#00FF88",wt=f-_*2-30,Ke=H.font_weight_override?H.font_weight_override:q(xt),V=new tt({text:$e,style:{fontFamily:X(xt),fontSize:Ve,fontWeight:Ke,fill:Je,align:"center",letterSpacing:je,wordWrap:!1,stroke:{color:H.stroke_color||"#000000",width:(Kt=H.stroke_width)!=null?Kt:2},dropShadow:{color:H.shadow_color||"#000000",alpha:(Qt=H.shadow_alpha)!=null?Qt:.9,angle:(Zt=H.shadow_angle)!=null?Zt:0,blur:(Ot=H.shadow_blur)!=null?Ot:8,distance:(It=H.shadow_distance)!=null?It:4}}});if(V.width>wt){let P=wt/V.width;V.scale.set(P)}V.anchor.set(.5);let Tt=(Ut=l.title_offset_y)!=null?Ut:30,Qe=Tt+((te=H.animation_start_y_offset)!=null?te:-20);V.position.set(0,Qe),V.alpha=0,h.addChild(V);let D=i==null?void 0:i.ui,Ct=((ee=i==null?void 0:i.gameplay)==null?void 0:ee.tuning)||{},Ze=(D==null?void 0:D.text)||"RESCUE COMPLETE",St=(D==null?void 0:D.font)||"brand.body",Oe=(D==null?void 0:D.fontSize)||11,Ie=(ne=D==null?void 0:D.letterSpacing)!=null?ne:.5,nt=(ae=i==null?void 0:i.render)==null?void 0:ae.tint,Ue=typeof nt=="string"?nt:nt?`#${nt.toString(16).padStart(6,"0")}`:"#B0B0B0",Z=new tt({text:Ze,style:{fontFamily:X(St),fontSize:Oe,fontWeight:q(St),fill:Ue,align:"center",letterSpacing:Ie}});Z.anchor.set(.5);let tn=Tt+20+((se=Ct.animation_start_y_offset)!=null?se:-10);Z.position.set(0,tn),Z.alpha=0,Z.animationStartYOffset=(ie=Ct.animation_start_y_offset)!=null?ie:-10,h.addChild(Z);let L=r==null?void 0:r.ui,vt=((oe=r==null?void 0:r.gameplay)==null?void 0:oe.tuning)||{},en=(L==null?void 0:L.text)||((re=u.ui)==null?void 0:re.cta_hint)||"Continue the adventure!",At=(L==null?void 0:L.font)||"brand.body",nn=(L==null?void 0:L.fontSize)||16,at=(le=r==null?void 0:r.render)==null?void 0:le.tint,an=typeof at=="string"?at:at?`#${at.toString(16).padStart(6,"0")}`:"#FFFFFF",sn=(ce=vt.max_width)!=null?ce:f-_*2,on=(de=vt.line_height)!=null?de:1.4,O=new tt({text:en,style:{fontFamily:X(At),fontSize:nn,fontWeight:q(At),fill:an,align:"center",wordWrap:!0,wordWrapWidth:sn,lineHeight:on}});O.anchor.set(.5);let rn=(he=l.footer_offset_y)!=null?he:120;O.position.set(0,rn);let ln=((pe=r==null?void 0:r.render)==null?void 0:pe.alpha)!==void 0&&((ue=r==null?void 0:r.render)==null?void 0:ue.alpha)!==null?r.render.alpha:1;O.alpha=0,O.targetAlpha=ln,h.addChild(O);let G=((me=c==null?void 0:c.gameplay)==null?void 0:me.tuning)||{},Y=c==null?void 0:c.ui,st=(fe=G.button_width)!=null?fe:260,it=(ye=G.button_height)!=null?ye:56,Ft=(ge=G.button_radius)!=null?ge:16,cn=G.button_bg_color||((_e=u.theme)==null?void 0:_e.cta_background)||"#ffb43b",dn=(be=G.button_bg_alpha)!=null?be:1,hn=G.button_border_color||"#ffffff",pn=(xe=G.button_border_width)!=null?xe:2,un=(we=G.button_border_alpha)!=null?we:.2,ot=(Te=l.cta_offset_y)!=null?Te:160,W=new ut;W.roundRect(-st/2,-it/2,st,it,Ft);let mn=cn.replace("#","");W.fill({color:parseInt(mn,16),alpha:dn});let fn=hn.replace("#","");W.stroke({color:parseInt(fn,16),width:pn,alpha:un});let mt=new ut;mt.roundRect(-st/2+2,-it/2+2,st-4,it-4,Ft-2),mt.stroke({color:0,width:1,alpha:.15}),W.addChild(mt),W.position.set(0,ot),W.alpha=0,W.eventMode="static",W.cursor="pointer",h.addChild(W);let yn=(Y==null?void 0:Y.text)||((Ce=u.ui)==null?void 0:Ce.cta_label_end)||"DOWNLOAD",Pt=(Y==null?void 0:Y.font)||"brand.heading",gn=(Y==null?void 0:Y.fontSize)||20,_n=G.button_text_color||((Se=u.theme)==null?void 0:Se.cta_text)||"#1a0a0a",U=new tt({text:yn,style:{fontFamily:X(Pt),fontSize:gn,fontWeight:q(Pt),fill:_n,align:"center",letterSpacing:(ve=Y==null?void 0:Y.letterSpacing)!=null?ve:1}});U.anchor.set(.5),U.position.set(0,ot),U.alpha=0,h.addChild(U);let k=d==null?void 0:d.ui,Mt=((Ae=d==null?void 0:d.gameplay)==null?void 0:Ae.tuning)||{},bn=(k==null?void 0:k.text)||"Play the full game",Et=(k==null?void 0:k.font)||"brand.body",xn=(k==null?void 0:k.fontSize)||11,wn=(Fe=k==null?void 0:k.letterSpacing)!=null?Fe:0,rt=(Pe=d==null?void 0:d.render)==null?void 0:Pe.tint,Tn=typeof rt=="string"?rt:rt?`#${rt.toString(16).padStart(6,"0")}`:"#CCCCCC",I=new tt({text:bn,style:{fontFamily:X(Et),fontSize:xn,fontWeight:q(Et),fill:Tn,align:"center",letterSpacing:wn}});I.anchor.set(.5);let Cn=ot+35+((Me=Mt.animation_start_y_offset)!=null?Me:5);I.position.set(0,Cn),I.alpha=0,I.animationStartYOffset=(Ee=Mt.animation_start_y_offset)!=null?Ee:5,h.addChild(I);let ft=((De=p==null?void 0:p.gameplay)==null?void 0:De.tuning)||{},Sn=(Ye=ft.hand_offset_x)!=null?Ye:50,vn=(ke=ft.hand_offset_y)!=null?ke:50,An=(He=(ze=p==null?void 0:p.transform)==null?void 0:ze.scale)!=null?He:.1875,Fn=(We=ft.hand_scale_multiplier)!=null?We:2.5,J=new Le(t||_t.EMPTY);return J.anchor.set(.5),J.scale.set(An*Fn),J.position.set(Sn,ot+vn),J.alpha=0,J.visible=!1,h.addChild(J),{panel:h,logo:F,title:V,subtitle:Z,footer:O,ctaButton:W,ctaText:U,ctaHint:I,hand:J}}function zn(e,t,a){var v,w,T,g,A,M,B,$;let o=t.objects.get("ui_endgame_1"),s=((v=o==null?void 0:o.gameplay)==null?void 0:v.tuning)||{},n=(w=s.animation_duration_ms)!=null?w:800,i=(T=s.fade_in_duration_ms)!=null?T:600,r=(g=s.scale_animation_intensity)!=null?g:.1,c=(A=s.logo_animation_delay_ms)!=null?A:100,d=(M=s.title_animation_delay_ms)!=null?M:200,p=(B=s.footer_animation_delay_ms)!=null?B:300,u=($=s.cta_animation_delay_ms)!=null?$:400,{panel:h,logo:l,title:m,subtitle:f,footer:y,ctaButton:_,ctaText:b,ctaHint:C}=e;h.visible=!0;let x=Date.now(),S=()=>{let z=Date.now()-x,R=Math.min(z/i,1),j=1-Math.pow(1-R,3);h.alpha=j,h.scale.set(1+r*(1-j)),R<1?requestAnimationFrame(S):(setTimeout(()=>Hn(l,n,t),c),setTimeout(()=>{Wn(m,n),setTimeout(()=>Bn(f,n),50)},d),setTimeout(()=>Rn(y,n),p),setTimeout(()=>{Ln(_,b,n),setTimeout(()=>Gn(C,n),50),a&&a()},u))};S()}function Hn(e,t,a){var h,l,m,f,y;let o=a==null?void 0:a.objects.get("ui_endgame_logo_1"),n=(l=(((h=o==null?void 0:o.gameplay)==null?void 0:h.tuning)||{}).animation_start_scale)!=null?l:1.2,i=Date.now(),r=e.alpha,c=(m=e.targetAlpha)!=null?m:1,d=(f=e.baseScaleX)!=null?f:e.scale.x,p=(y=e.baseScaleY)!=null?y:e.scale.y,u=()=>{let _=Date.now()-i,b=Math.min(_/t,1),C=1-Math.pow(1-b,2);e.alpha=r+(c-r)*C;let x=n+(1-n)*C;e.scale.set(d*x,p*x),b<1&&requestAnimationFrame(u)};u()}function Wn(e,t){let a=Date.now(),o=e.alpha,s=e.y,n=()=>{let i=Date.now()-a,r=Math.min(i/t,1),c=1-Math.pow(1-r,2);e.alpha=o+(1-o)*c,e.y=s-20*(1-c),r<1&&requestAnimationFrame(n)};n()}function Bn(e,t){var r;let a=Date.now(),o=e.alpha,s=e.position.y,n=s-((r=e.animationStartYOffset)!=null?r:-10),i=()=>{let c=Date.now()-a,d=Math.min(c/t,1),p=1-Math.pow(1-d,2);e.alpha=o+(1-o)*p,e.position.y=s+(n-s)*p,d<1&&requestAnimationFrame(i)};i()}function Rn(e,t){var i;let a=Date.now(),o=e.alpha,s=(i=e.targetAlpha)!=null?i:1,n=()=>{let r=Date.now()-a,c=Math.min(r/t,1),d=1-Math.pow(1-c,2);e.alpha=o+(s-o)*d,c<1&&requestAnimationFrame(n)};n()}function Ln(e,t,a){let o=Date.now(),s=e.alpha,n=()=>{let i=Date.now()-o,r=Math.min(i/a,1),c=1-Math.pow(1-r,2);e.alpha=s+(1-s)*c,t.alpha=s+(1-s)*c,e.scale.set(1+.1*(1-c)),r<1&&requestAnimationFrame(n)};n()}function Gn(e,t){var r;let a=Date.now(),o=e.alpha,s=e.position.y,n=s-((r=e.animationStartYOffset)!=null?r:5),i=()=>{let c=Date.now()-a,d=Math.min(c/t,1),p=1-Math.pow(1-d,2);e.alpha=o+(1-o)*p,e.position.y=s+(n-s)*p,d<1&&requestAnimationFrame(i)};i()}function Nn(e,t,a,o){var p,u,h,l;let s=a.objects.get("ui_endgame_hand_1"),n=((p=s==null?void 0:s.gameplay)==null?void 0:p.tuning)||{},i=(u=n.click_animation_duration_ms)!=null?u:600,r=(h=n.click_delay_ms)!=null?h:2e3,c=(l=n.click_repeat_delay_ms)!=null?l:3e3,d=()=>{var v,w;e.visible=!0,e.alpha=1;let m=e.x,f=e.y,y=(v=n.hand_offset_x)!=null?v:50,_=(w=n.hand_offset_y)!=null?w:50,b=t.x+y,C=t.y+_,x=Date.now(),S=()=>{var z,R,j;let T=Date.now()-x,g=Math.min(T/i,1),A=g<.5?2*g*g:1-Math.pow(-2*g+2,2)/2;e.x=m+(b-m)*A,e.y=f+(C-f)*A;let M=(R=(z=s==null?void 0:s.transform)==null?void 0:z.scale)!=null?R:.1875,B=(j=n.hand_scale_multiplier)!=null?j:2.5,$=M*B;e.scale.set($+$*.2*Math.sin(g*Math.PI)),g<1?requestAnimationFrame(S):(t.scale.set(.95),setTimeout(()=>{t.scale.set(1),o()},100),setTimeout(()=>{e.alpha=0,setTimeout(()=>{e.x=m,e.y=f,d()},c)},500))};S()};setTimeout(d,r)}import{Sprite as Xn,Text as qn}from"pixi.js";function $n(e,t,a){var p,u,h,l;let o=t.objects.get("hand_tutorial_1"),s=((p=o==null?void 0:o.gameplay)==null?void 0:p.tuning)||{},n=(o==null?void 0:o.render)||{},i=(o==null?void 0:o.transform)||{},r=new Xn(e);r.anchor.set(.5),r.alpha=0;let c=(u=s.hand_scale_multiplier)!=null?u:2.5,d=(h=i.scale)!=null?h:.1875;return r.scale.set(d*c),r.zIndex=(l=n.z_index)!=null?l:99999,r}function Vn(e){var m,f,y,_,b,C,x,S,v,w;let t=e.objects.get("ui_tutorial_1"),a=t==null?void 0:t.ui,o=(t==null?void 0:t.render)||{},s=((m=e.engine.runtime)==null?void 0:m.ui_styles)||{},n=((f=e.engine.runtime)==null?void 0:f.ui)||{},i=(a==null?void 0:a.text)||n.tutorial_label||n.label_text||"CLEAN!",r=(a==null?void 0:a.font)||"brand.warning",c=(a==null?void 0:a.fontSize)||s.label_font_size||52,d=(_=a==null?void 0:a.letterSpacing)!=null?_:(y=s.label_letter_spacing)!=null?y:-1,p=(a==null?void 0:a.align)||"center",u=o.tint,h=typeof u=="string"?u:u?`#${u.toString(16).padStart(6,"0")}`:s.label_fill||"#FFF1C1",l=new qn({text:i,style:{fontFamily:X(r),fontSize:c,fontWeight:q(r),fill:h,align:p,letterSpacing:d,stroke:{color:s.label_stroke||"#8B0000",width:2},dropShadow:{color:s.label_shadow_color||"#000000",alpha:(b=s.label_shadow_alpha)!=null?b:.8,angle:(C=s.label_shadow_angle)!=null?C:0,blur:(x=s.label_shadow_blur)!=null?x:4,distance:(S=s.label_shadow_distance)!=null?S:2}}});return l.anchor.set(.5,0),l.alpha=(v=o.alpha)!=null?v:0,l.visible=(w=o.visible)!=null?w:!0,l}function jn(e,t,a,o,s){var c,d,p,u,h,l,m;let n=s.objects.get("hand_tutorial_1"),i=((c=n==null?void 0:n.gameplay)==null?void 0:c.tuning)||{},r=(n==null?void 0:n.transform)||{};if(!o){let f=(d=i.animation_duration)!=null?d:1.5,y=a%f/f,_=y<.5?2*y*y:-1+(4-2*y)*y,b=(p=i.x_offset)!=null?p:0,C=(u=i.y_offset)!=null?u:0,x=(h=i.animation_range)!=null?h:40,S=x*.7,v=x,w=t.x+b+S,T=t.y+C+v,g=w+S,A=T+v;e.x=w+(g-w)*_,e.y=T+(A-T)*_;let M=(l=r.scale)!=null?l:.1875,B=(m=i.hand_scale_multiplier)!=null?m:2.5;e.scale.set(M*B)}}import{Graphics as Ge,Assets as Ne,Texture as Jn,Rectangle as Kn,Color as bt}from"pixi.js";async function Xe(e,t,a=16777215,o=!1){try{let n=(globalThis.INLINE_ASSETS||{})[e];return await Ne.load(n||e)}catch{console.warn(`Asset missing: ${e}. Using placeholder.`);let n=new Ge;return o?n.roundRect(0,0,60,120,10).fill({color:a}):(n.circle(30,30,30).fill({color:a}),n.rect(25,30,10,40).fill({color:a})),t.renderer.generateTexture(n)}}async function Qn(e,t,a){var f,y,_,b,C,x,S,v,w,T;let s=(globalThis.INLINE_ASSETS||{})[e]||e,n;try{n=await Ne.load(s),console.log("[character] loaded sheet",{path:e,sourceUsed:s})}catch(g){let M=(a.gameplay.character_sheet||{}).fallback_color||"#ff00ff";n=await Xe(e,t,new bt(M).toNumber(),!0),console.warn("[character] fallback loadAsset used",{path:e,err:g})}let i=n.source||n.baseTexture||n;i&&"valid"in i&&i.valid===!1&&typeof i.once=="function"&&await new Promise(g=>i.once("loaded",g));let r=a.gameplay.character_sheet||{},c=(f=r.cols)!=null?f:3,d=(y=r.rows)!=null?y:2,p=(x=(C=(_=i==null?void 0:i.width)!=null?_:i==null?void 0:i.pixelWidth)!=null?C:(b=i==null?void 0:i.baseTexture)==null?void 0:b.width)!=null?x:n.width,u=(T=(w=(S=i==null?void 0:i.height)!=null?S:i==null?void 0:i.pixelHeight)!=null?w:(v=i==null?void 0:i.baseTexture)==null?void 0:v.height)!=null?T:n.height,h=p/c,l=u/d;if(!Number.isFinite(h)||!Number.isFinite(l)||h<=0||l<=0||!i)return[n];let m=[];for(let g=0;g<d;g++)for(let A=0;A<c;A++)m.push(new Jn({source:i,frame:new Kn(A*h,g*l,h,l)}));return m.length>2&&m.push(...m.slice(1,-1).reverse()),console.log("[character] frames prepared",{count:m.length}),m}function Zn(e,t){var p,u,h,l;let a=t.gameplay.brush||{},o=new bt(t.theme.brush_color||"#ffffff").toNumber(),s=(p=a.radius)!=null?p:20,n=(u=a.inner_radius)!=null?u:15,i=(h=a.alpha)!=null?h:.8,r=(l=a.inner_alpha)!=null?l:.3,c=a.inner_color||"#ffffff",d=new Ge;return d.circle(0,0,s).fill({color:o,alpha:i}),d.circle(0,0,n).fill({color:new bt(c).toNumber(),alpha:r}),e.renderer.generateTexture(d)}export{ht as GameObject,gt as GameObjectManager,dt as Renderer,ct as Transform,Nn as animateHandClick,zn as animatePanelEntrance,Zn as createBrushTexture,kn as createEndGamePanel,$n as createHandTutorial,Mn as createPixiBase,Vn as createTutorialLabel,Dn as getRegisteredFontIds,Xe as loadAsset,Qn as loadCharacterFrames,En as registerFont,X as resolveFont,q as resolveFontWeight,jn as updateHandAnimation};
@@ -1,4 +1,4 @@
1
- "use strict";var fa=Object.create;var Pe=Object.defineProperty;var ya=Object.getOwnPropertyDescriptor;var ga=Object.getOwnPropertyNames;var ba=Object.getPrototypeOf,wa=Object.prototype.hasOwnProperty;var Ea=(e,t)=>{for(var n in t)Pe(e,n,{get:t[n],enumerable:!0})},On=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of ga(t))!wa.call(e,a)&&a!==n&&Pe(e,a,{get:()=>t[a],enumerable:!(i=ya(t,a))||i.enumerable});return e};var we=(e,t,n)=>(n=e!=null?fa(ba(e)):{},On(t||!e||!e.__esModule?Pe(n,"default",{value:e,enumerable:!0}):n,e)),xa=e=>On(Pe({},"__esModule",{value:!0}),e);var Na={};Ea(Na,{AspectClass:()=>ht,GameObject:()=>Ce,GameObjectManager:()=>Ve,Renderer:()=>Ae,ResponsiveUISystem:()=>he,Transform:()=>Re,animateHandClick:()=>Ei,animatePanelEntrance:()=>wi,createBrushTexture:()=>Ri,createEndGamePanel:()=>bi,createHandTutorial:()=>xi,createThreeBase:()=>fi,createTutorialLabel:()=>_i,getAspectClass:()=>je,getRegisteredFontIds:()=>gi,loadAsset:()=>ft,loadCharacterFrames:()=>Si,registerFont:()=>yi,resolveFont:()=>Y,resolveFontWeight:()=>I,updateHandAnimation:()=>Ti});module.exports=xa(Na);var fe=we(require("three"));var J={};function We(e,t,n=!1){J[e]||(J[e]=[]),J[e].push({fn:t,once:n})}function ot(e,t){if(J[e]){if(!t){delete J[e];return}J[e]=J[e].filter(n=>n.fn!==t)}}function ze(e,...t){let n=J[e];if(n)for(let i of[...n])i.fn(...t),i.once&&ot(e,i.fn)}function P(e,t){We(e,t,!0)}var Be={name:"handler-playable-sdk",version:"0.1.16",description:"Handler Playable SDK v0.1 with contract-aligned surface (root sandbox, canonical event envelope).",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.js"},"./pixi":{types:"./dist/pixi/index.d.ts",import:"./dist/pixi/index.mjs",require:"./dist/pixi/index.js"},"./three":{types:"./dist/three/index.d.ts",import:"./dist/three/index.mjs",require:"./dist/three/index.js"}},scripts:{build:"tsup src/index.ts src/pixi/index.ts src/three/index.ts --format cjs,esm --dts --clean --minify",lint:"eslint 'src/**/*.{ts,tsx}'",typecheck:"tsc --noEmit",prepublishOnly:"npm run build","publish:update":"node scripts/publish-and-update.js patch","publish:update:minor":"node scripts/publish-and-update.js minor","publish:update:major":"node scripts/publish-and-update.js major"},author:"Handler",license:"MIT",publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/HandlerAIGames/handler-playable-sdk.git"},files:["dist","LICENSE","README.md"],peerDependencies:{"pixi.js":"^8.0.0",three:"^0.160.0"},peerDependenciesMeta:{"pixi.js":{optional:!0},three:{optional:!0}},devDependencies:{"@types/three":"^0.160.0",eslint:"^8.57.1","pixi.js":"^8.8.1",three:"^0.160.0","ts-node":"^10.9.2",tsup:"^8.4.0",typescript:"^5.7.2"}};var W=0,Ta=W++,Nn=W++,Yn=W++,In=W++,Gn=W++,jn=W++,Vn=W++,qn=W++,Xn=W++,Kn=W++,Jn=W++,Zn=W++,T=Ta;function Qn(){return T===Nn}function Un(){return T===Yn}function ei(){return T===In}function ti(){return T===Gn}function re(){return T===jn}function le(){return T===Vn}function ni(){return T===qn}function ii(){return T===Xn}function ai(){return T===Kn}function rt(){return T===Jn}function lt(){return T===Zn}function si(){let e=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none",t=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed";if(e==="mraid")try{mraid.getState(),T=Nn;return}catch{}else if(e==="dapi")try{dapi.isReady(),T=Yn;return}catch{}if(t==="facebook")try{typeof FbPlayableAd!="undefined"&&(T=In)}catch{}else if(t==="google")try{typeof ExitApi!="undefined"&&(T=Gn)}catch{}else if(t==="mintegral")window.gameReady&&(T=jn);else if(t==="tapjoy")window.TJ_API&&(T=Vn);else if(t==="tiktok")window.openAppStore&&(T=qn);else if(t==="smadex")try{window.smxTracking&&(T=Xn)}catch{}else if(t==="snapchat")try{window.ScPlayableAd&&(T=Kn)}catch{}else t==="vungle"?T=Jn:(e==="nucleo"||t==="nucleo")&&(T=Zn)}var pi={mechanic_id:"TODO_mechanic_id",variant_id:"TODO_variant_id",deployment_id:"TODO_deployment_id",export_id:"TODO_export_id",profile_id:"TODO_profile_id",instance_id:"default"},va=Math.random().toString(36).slice(2),ce=null,xe={...pi},mi="web_embed",Sa={},ct=!1,Ee=!1,Te=!1,ui=!1,ut=1,pt=0,Ie=!1,X=!1,Ye="",de=Math.floor(window.innerWidth),pe=Math.floor(window.innerHeight),mt=de>pe,K=!1,_e=!1,oi=!1,ri=!1,dt=!1,Oe=null;function li(){if(ce)return ce;let e=document.createElement("div");return e.id="handler-root",e.setAttribute("data-handler-root","true"),document.body.appendChild(e),ce=e,e}function Ne(e){switch(e){case"interaction":return"engagement";case"finish":return"complete";case"install":return"cta_click";default:return e}}function hi(e,t){return{event_name:e,ts:Date.now(),session_id:va,deployment_id:xe.deployment_id,variant_id:xe.variant_id,export_profile_id:xe.profile_id,instance_id:xe.instance_id||"default",env:mi==="mraid"?"mraid":"web",payload:t}}function x(e,t){let n=Ne(e),i=hi(n,t);ze(n,i),n!==e&&ze(e,i)}function ve(){Oe&&(Oe(de,pe),Oe=null)}function me(e){ut=e,x("volume",e)}function ue(e){e&&(ui=!0),!Te&&(Te=!0,x("pause"),me(0))}function Se(e){!e&&ui||Te&&(Te=!1,x("resume"),me(ut))}function Q(e,t){de=Math.floor(e||window.innerWidth),pe=Math.floor(t||window.innerHeight),mt=de>pe,x("resize",{width:de,height:pe})}function Ra(){if(Qn())try{let e=mraid.getMaxSize();Q(e.width,e.height);let t=()=>{mraid.isViewable()&&mraid.getState()!=="hidden"?Se():ue()};if(mraid.addEventListener("viewableChange",t),mraid.addEventListener("stateChange",t),mraid.addEventListener("sizeChange",()=>{let n=mraid.getMaxSize();Q(n.width,n.height)}),mraid.getAudioVolume){let n=mraid.getAudioVolume();me(n?1:0)}if(mraid.addEventListener("audioVolumeChange",n=>{n!==null&&me(n>0?1:0)}),mraid.addEventListener("error",(n,i)=>{console.warn("mraid error:",n,"action:",i)}),Ie=!0,mraid.isViewable()&&mraid.getState()!=="hidden")K=!0,x("boot"),x("view"),x("ready"),X=!0,ve();else{let n=()=>{K=!0,x("boot"),x("view"),x("ready"),X=!0,ve()};mraid.addEventListener("ready",n)}}catch(e){console.warn("MRAID hook skipped",e)}}function Aa(){if(Un())try{let e=dapi.getScreenSize();Q(e.width,e.height),dapi.addEventListener("viewableChange",n=>{n.isViewable?Se():ue()}),dapi.addEventListener("adResized",n=>{let i=dapi.getScreenSize();Q(n.width||i.width,n.height||i.height)});let t=dapi.getAudioVolume();if(me(t?1:0),dapi.addEventListener("audioVolumeChange",n=>me(n?1:0)),Ie=!0,dapi.isViewable())K=!0,x("boot"),x("view"),x("ready"),X=!0,ve();else{let n=()=>{K=!0,x("boot"),x("view"),x("ready"),X=!0,ve()};dapi.addEventListener("ready",n)}}catch(e){console.warn("DAPI hook skipped",e)}}function ci(){let e=()=>{K||document.visibilityState==="visible"&&(document.readyState==="complete"||document.readyState==="interactive")&&(K=!0,x("boot"),x("view"),x("ready"),X=!0,ve(),_e&&(_e=!1,Z.start()))};window.addEventListener("resize",()=>Q()),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"?(Se(),e()):ue()}),document.readyState==="complete"||document.readyState==="interactive"?e():window.addEventListener("load",e),Ie=!0}function Ca(){let e=t=>{typeof TouchEvent!="undefined"&&t instanceof TouchEvent&&(oi=!0),!(oi&&t instanceof MouseEvent)&&(pt+=1,x("interaction",pt))};document.addEventListener("mousedown",e),document.addEventListener("touchstart",e)}function Ha(e){var i,a,s,r,m,l,f,d,h,o,u,g;let t=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none";if((typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed")==="google")try{(i=window.ExitApi)==null||i.exit();return}catch{}if(t==="mraid"&&typeof mraid!="undefined")mraid.open(e||"");else if(t==="dapi"&&typeof dapi!="undefined")dapi.openStoreUrl();else if(le())(s=(a=window.TJ_API)==null?void 0:a.click)==null||s.call(a);else if(ei())(m=(r=window.FbPlayableAd)==null?void 0:r.onCTAClick)==null||m.call(r);else if(ai())(f=(l=window.ScPlayableAd)==null?void 0:l.onCTAClick)==null||f.call(l);else if(ii())try{(h=(d=window.smxTracking)==null?void 0:d.redirect)==null||h.call(d)}catch(w){console.warn("Smadex redirect failed",w)}else if(ti()){let w=window.ExitApi;w&&typeof w.exit=="function"?w.exit(e||Ye||""):e&&window.open(e)}else re()?(o=window.install)==null||o.call(window):ni()?(u=window.openAppStore)==null||u.call(window):rt()?(g=parent==null?void 0:parent.postMessage)==null||g.call(parent,"download","*"):e&&window.open(e)}function Ma(){let e=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed",t=n=>{if(!n)return;let i=new Image;i.src=n};if(e==="bigabid"){let n=window.BIGABID_BIDTIMEMACROS;if(!n)return;P("view",()=>t(n.mraid_viewable)),P("start",()=>t(n.game_viewable)),P("engagement",()=>t(n.engagement));let i=()=>t(n.complete);P("complete",i),We("engagement",a=>{var s;((s=a==null?void 0:a.payload)==null?void 0:s.count)>3&&i()}),P("cta_click",()=>t(n.click))}else if(e==="inmobi"){let n=window.INMOBI_DSPMACROS;if(!n)return;P("view",()=>t(n.Ad_Load_Start)),P("start",()=>t(n.Ad_Viewable)),P("engagement",()=>t(n.First_Engagement)),P("complete",()=>t(n.Gameplay_Complete)),P("cta_click",()=>t(n.DSP_Click)),P("start",()=>{[5,10,15,20,25,30].forEach(i=>setTimeout(()=>t(n[`Spent_${i}_Seconds`]),i*1e3))})}}function La(){if(!le())return;let e=window.TJ_API;e&&e.setPlayableAPI&&e.setPlayableAPI({skipAd:()=>{try{Z.finish()}catch(t){console.warn("Tapjoy skip failed",t)}}})}function di(){var t,n,i;let e=window.TJ_API;(t=e==null?void 0:e.objectiveComplete)==null||t.call(e),(n=e==null?void 0:e.playableFinished)==null||n.call(e),(i=e==null?void 0:e.gameplayFinished)==null||i.call(e)}function ka(){re()&&(window.mintGameStart=()=>{Se(!0),Q()},window.mintGameClose=()=>{ue(!0)})}function Fa(){if(!lt())return;let e=window.NUC;!e||!e.trigger||(Z.on("cta_click",()=>{var t,n;return(n=(t=e.trigger).convert)==null?void 0:n.call(t,Ye)}),Z.on("complete",()=>{var t,n;return(n=(t=e.trigger).tryAgain)==null?void 0:n.call(t)}))}var Z={init(e={},t){if(mi=e.profile||"web_embed",Sa=e.consent||{},xe={...pi,...e.ids||{}},ce=e.rootEl||ce,Ye=e.destinationUrl||(/android/i.test(navigator.userAgent)?"https://play.google.com/store":"https://www.apple.com/app-store/"),t&&(Oe=t),x("init"),document.body.oncontextmenu=()=>!1,li(),Da(ce),si(),Ra(),Aa(),!Ie){if(document.readyState==="complete")ci();else if(!ri){ri=!0;let n=()=>{ci(),window.removeEventListener("load",n),document.removeEventListener("DOMContentLoaded",n)};window.addEventListener("load",n),document.addEventListener("DOMContentLoaded",n)}}Ca(),Ma(),La(),ka(),Fa(),console.log(`%c @handler/playable-sdk %c v${Be.version||"0.0.0"} `,"background: #007acc; color: #fff; font-size: 14px; padding: 4px 8px; border-top-left-radius: 4px; border-bottom-left-radius: 4px;","background: #e1e4e8; color: #333; font-size: 14px; padding: 4px 8px; border-top-right-radius: 4px; border-bottom-right-radius: 4px;"),K&&!X&&(x("boot"),x("view"),x("ready"),_e&&(_e=!1,Z.start()),X=!0),X=K},getRoot(){return li()},get version(){return Be.version||"0.0.0"},get maxWidth(){return de},get maxHeight(){return pe},get isLandscape(){return mt},get isReady(){return X},get isStarted(){return ct},get isPaused(){return Te},get isFinished(){return Ee},get volume(){return ut},get interactions(){return pt},on(e,t){We(Ne(e),t)},off(e,t){ot(Ne(e),t)},start(){var e,t;if(!ct){if(!K){_e=!0;return}if(ct=!0,x("start"),Q(),re())ue(),(e=window.gameReady)==null||e.call(window);else if(le()){let n=window.TJ_API;(t=n==null?void 0:n.setPlayableBuild)==null||t.call(n,{orientation:mt?"landscape":"portrait",buildID:Be.version||"dev"})}}},finish(){var e,t;Ee||(Ee=!0,x("complete"),re()?(e=window.gameEnd)==null||e.call(window):rt()?(t=parent==null?void 0:parent.postMessage)==null||t.call(parent,"complete","*"):le()&&di())},install(e){if(!Ee){Ee=!0,le()?(di(),setTimeout(()=>Z.install(e),300)):(x("complete"),setTimeout(()=>Z.install(e),0));return}dt||(dt=!0,setTimeout(()=>dt=!1,500),x("cta_click"),x("conversion"),Ha(e||Ye))},emit(e,t){let n=Ne(e);if(!["view","boot","start","engagement","complete","cta_click","conversion","retry","pause","resume","resize","volume","error"].includes(n)&&!n.startsWith("custom."))throw new Error(`Event ${e} must be canonical or namespaced as custom.<mechanic_id>.<event>`);let i=hi(n,t);ze(n,i)},retry(){var e,t,n;if(re())(e=window.gameRetry)==null||e.call(window);else if(lt()){let i=window.NUC;(n=(t=i==null?void 0:i.trigger)==null?void 0:t.tryAgain)==null||n.call(t)}x("engagement",{action:"retry"})},pause(){ue(!0)},resume(){Se(!0)},resize(e,t){Q(e,t)}},Ge=Z;function Da(e){let t=document.createElement("script");t.type="text/javascript",t.textContent=`
1
+ "use strict";var ha=Object.create;var Pe=Object.defineProperty;var fa=Object.getOwnPropertyDescriptor;var ya=Object.getOwnPropertyNames;var ga=Object.getPrototypeOf,ba=Object.prototype.hasOwnProperty;var wa=(e,t)=>{for(var n in t)Pe(e,n,{get:t[n],enumerable:!0})},On=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of ya(t))!ba.call(e,a)&&a!==n&&Pe(e,a,{get:()=>t[a],enumerable:!(i=fa(t,a))||i.enumerable});return e};var we=(e,t,n)=>(n=e!=null?ha(ga(e)):{},On(t||!e||!e.__esModule?Pe(n,"default",{value:e,enumerable:!0}):n,e)),Ea=e=>On(Pe({},"__esModule",{value:!0}),e);var Oa={};wa(Oa,{AspectClass:()=>ut,GameObject:()=>Ce,GameObjectManager:()=>Ve,Renderer:()=>Ae,ResponsiveUISystem:()=>he,Transform:()=>Re,animateHandClick:()=>Ei,animatePanelEntrance:()=>wi,createBrushTexture:()=>Ri,createEndGamePanel:()=>bi,createHandTutorial:()=>xi,createThreeBase:()=>fi,createTutorialLabel:()=>_i,getAspectClass:()=>je,getRegisteredFontIds:()=>gi,loadAsset:()=>ht,loadCharacterFrames:()=>Si,registerFont:()=>yi,resolveFont:()=>Y,resolveFontWeight:()=>I,updateHandAnimation:()=>Ti});module.exports=Ea(Oa);var fe=we(require("three"));var J={};function We(e,t,n=!1){J[e]||(J[e]=[]),J[e].push({fn:t,once:n})}function st(e,t){if(J[e]){if(!t){delete J[e];return}J[e]=J[e].filter(n=>n.fn!==t)}}function ze(e,...t){let n=J[e];if(n)for(let i of[...n])i.fn(...t),i.once&&st(e,i.fn)}function P(e,t){We(e,t,!0)}var Be={name:"handler-playable-sdk",version:"0.1.17",description:"Handler Playable SDK v0.1 with contract-aligned surface (root sandbox, canonical event envelope).",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.js"},"./pixi":{types:"./dist/pixi/index.d.ts",import:"./dist/pixi/index.mjs",require:"./dist/pixi/index.js"},"./three":{types:"./dist/three/index.d.ts",import:"./dist/three/index.mjs",require:"./dist/three/index.js"}},scripts:{build:"tsup src/index.ts src/pixi/index.ts src/three/index.ts --format cjs,esm --dts --clean --minify",lint:"eslint 'src/**/*.{ts,tsx}'",typecheck:"tsc --noEmit",prepublishOnly:"npm run build","publish:update":"node scripts/publish-and-update.js patch","publish:update:minor":"node scripts/publish-and-update.js minor","publish:update:major":"node scripts/publish-and-update.js major"},author:"Handler",license:"MIT",publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/HandlerAIGames/handler-playable-sdk.git"},files:["dist","LICENSE","README.md"],peerDependencies:{"pixi.js":"^8.0.0",three:"^0.160.0"},peerDependenciesMeta:{"pixi.js":{optional:!0},three:{optional:!0}},devDependencies:{"@types/three":"^0.160.0",eslint:"^8.57.1","pixi.js":"^8.8.1",three:"^0.160.0","ts-node":"^10.9.2",tsup:"^8.4.0",typescript:"^5.7.2"}};var W=0,_a=W++,Nn=W++,Yn=W++,In=W++,Gn=W++,jn=W++,Vn=W++,qn=W++,Xn=W++,Kn=W++,Jn=W++,Zn=W++,T=_a;function Qn(){return T===Nn}function Un(){return T===Yn}function ei(){return T===In}function ti(){return T===Gn}function re(){return T===jn}function le(){return T===Vn}function ni(){return T===qn}function ii(){return T===Xn}function ai(){return T===Kn}function ot(){return T===Jn}function rt(){return T===Zn}function si(){let e=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none",t=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed";if(e==="mraid")try{mraid.getState(),T=Nn;return}catch{}else if(e==="dapi")try{dapi.isReady(),T=Yn;return}catch{}if(t==="facebook")try{typeof FbPlayableAd!="undefined"&&(T=In)}catch{}else if(t==="google")try{typeof ExitApi!="undefined"&&(T=Gn)}catch{}else if(t==="mintegral")window.gameReady&&(T=jn);else if(t==="tapjoy")window.TJ_API&&(T=Vn);else if(t==="tiktok")window.openAppStore&&(T=qn);else if(t==="smadex")try{window.smxTracking&&(T=Xn)}catch{}else if(t==="snapchat")try{window.ScPlayableAd&&(T=Kn)}catch{}else t==="vungle"?T=Jn:(e==="nucleo"||t==="nucleo")&&(T=Zn)}var pi={mechanic_id:"TODO_mechanic_id",variant_id:"TODO_variant_id",deployment_id:"TODO_deployment_id",export_id:"TODO_export_id",profile_id:"TODO_profile_id",instance_id:"default"},Ta=Math.random().toString(36).slice(2),ce=null,xe={...pi},mi="web_embed",va={},lt=!1,Ee=!1,Te=!1,ui=!1,mt=1,dt=0,Ie=!1,X=!1,Ye="",de=Math.floor(window.innerWidth),pe=Math.floor(window.innerHeight),pt=de>pe,K=!1,_e=!1,oi=!1,ri=!1,ct=!1,Oe=null;function li(){if(ce)return ce;let e=document.createElement("div");return e.id="handler-root",e.setAttribute("data-handler-root","true"),document.body.appendChild(e),ce=e,e}function Ne(e){switch(e){case"interaction":return"engagement";case"finish":return"complete";case"install":return"cta_click";default:return e}}function hi(e,t){return{event_name:e,ts:Date.now(),session_id:Ta,deployment_id:xe.deployment_id,variant_id:xe.variant_id,export_profile_id:xe.profile_id,instance_id:xe.instance_id||"default",env:mi==="mraid"?"mraid":"web",payload:t}}function x(e,t){let n=Ne(e),i=hi(n,t);ze(n,i),n!==e&&ze(e,i)}function ve(){Oe&&(Oe(de,pe),Oe=null)}function me(e){mt=e,x("volume",e)}function ue(e){e&&(ui=!0),!Te&&(Te=!0,x("pause"),me(0))}function Se(e){!e&&ui||Te&&(Te=!1,x("resume"),me(mt))}function Q(e,t){de=Math.floor(e||window.innerWidth),pe=Math.floor(t||window.innerHeight),pt=de>pe,x("resize",{width:de,height:pe})}function Sa(){if(Qn())try{let e=mraid.getMaxSize();Q(e.width,e.height);let t=()=>{mraid.isViewable()&&mraid.getState()!=="hidden"?Se():ue()};if(mraid.addEventListener("viewableChange",t),mraid.addEventListener("stateChange",t),mraid.addEventListener("sizeChange",()=>{let n=mraid.getMaxSize();Q(n.width,n.height)}),mraid.getAudioVolume){let n=mraid.getAudioVolume();me(n?1:0)}if(mraid.addEventListener("audioVolumeChange",n=>{n!==null&&me(n>0?1:0)}),mraid.addEventListener("error",(n,i)=>{console.warn("mraid error:",n,"action:",i)}),Ie=!0,mraid.isViewable()&&mraid.getState()!=="hidden")K=!0,x("boot"),x("view"),x("ready"),X=!0,ve();else{let n=()=>{K=!0,x("boot"),x("view"),x("ready"),X=!0,ve()};mraid.addEventListener("ready",n)}}catch(e){console.warn("MRAID hook skipped",e)}}function Ra(){if(Un())try{let e=dapi.getScreenSize();Q(e.width,e.height),dapi.addEventListener("viewableChange",n=>{n.isViewable?Se():ue()}),dapi.addEventListener("adResized",n=>{let i=dapi.getScreenSize();Q(n.width||i.width,n.height||i.height)});let t=dapi.getAudioVolume();if(me(t?1:0),dapi.addEventListener("audioVolumeChange",n=>me(n?1:0)),Ie=!0,dapi.isViewable())K=!0,x("boot"),x("view"),x("ready"),X=!0,ve();else{let n=()=>{K=!0,x("boot"),x("view"),x("ready"),X=!0,ve()};dapi.addEventListener("ready",n)}}catch(e){console.warn("DAPI hook skipped",e)}}function ci(){let e=()=>{K||document.visibilityState==="visible"&&(document.readyState==="complete"||document.readyState==="interactive")&&(K=!0,x("boot"),x("view"),x("ready"),X=!0,ve(),_e&&(_e=!1,Z.start()))};window.addEventListener("resize",()=>Q()),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"?(Se(),e()):ue()}),document.readyState==="complete"||document.readyState==="interactive"?e():window.addEventListener("load",e),Ie=!0}function Aa(){let e=t=>{typeof TouchEvent!="undefined"&&t instanceof TouchEvent&&(oi=!0),!(oi&&t instanceof MouseEvent)&&(dt+=1,x("interaction",dt))};document.addEventListener("mousedown",e),document.addEventListener("touchstart",e)}function Ca(e){var i,a,s,r,m,l,f,d,h,o,u,g;let t=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none";if((typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed")==="google")try{(i=window.ExitApi)==null||i.exit();return}catch{}if(t==="mraid"&&typeof mraid!="undefined")mraid.open(e||"");else if(t==="dapi"&&typeof dapi!="undefined")dapi.openStoreUrl();else if(le())(s=(a=window.TJ_API)==null?void 0:a.click)==null||s.call(a);else if(ei())(m=(r=window.FbPlayableAd)==null?void 0:r.onCTAClick)==null||m.call(r);else if(ai())(f=(l=window.ScPlayableAd)==null?void 0:l.onCTAClick)==null||f.call(l);else if(ii())try{(h=(d=window.smxTracking)==null?void 0:d.redirect)==null||h.call(d)}catch(w){console.warn("Smadex redirect failed",w)}else if(ti()){let w=window.ExitApi;w&&typeof w.exit=="function"?w.exit(e||Ye||""):e&&window.open(e)}else re()?(o=window.install)==null||o.call(window):ni()?(u=window.openAppStore)==null||u.call(window):ot()?(g=parent==null?void 0:parent.postMessage)==null||g.call(parent,"download","*"):e&&window.open(e)}function Ha(){let e=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed",t=n=>{if(!n)return;let i=new Image;i.src=n};if(e==="bigabid"){let n=window.BIGABID_BIDTIMEMACROS;if(!n)return;P("view",()=>t(n.mraid_viewable)),P("start",()=>t(n.game_viewable)),P("engagement",()=>t(n.engagement));let i=()=>t(n.complete);P("complete",i),We("engagement",a=>{var s;((s=a==null?void 0:a.payload)==null?void 0:s.count)>3&&i()}),P("cta_click",()=>t(n.click))}else if(e==="inmobi"){let n=window.INMOBI_DSPMACROS;if(!n)return;P("view",()=>t(n.Ad_Load_Start)),P("start",()=>t(n.Ad_Viewable)),P("engagement",()=>t(n.First_Engagement)),P("complete",()=>t(n.Gameplay_Complete)),P("cta_click",()=>t(n.DSP_Click)),P("start",()=>{[5,10,15,20,25,30].forEach(i=>setTimeout(()=>t(n[`Spent_${i}_Seconds`]),i*1e3))})}}function Ma(){if(!le())return;let e=window.TJ_API;e&&e.setPlayableAPI&&e.setPlayableAPI({skipAd:()=>{try{Z.finish()}catch(t){console.warn("Tapjoy skip failed",t)}}})}function di(){var t,n,i;let e=window.TJ_API;(t=e==null?void 0:e.objectiveComplete)==null||t.call(e),(n=e==null?void 0:e.playableFinished)==null||n.call(e),(i=e==null?void 0:e.gameplayFinished)==null||i.call(e)}function La(){re()&&(window.mintGameStart=()=>{Se(!0),Q()},window.mintGameClose=()=>{ue(!0)})}function ka(){if(!rt())return;let e=window.NUC;!e||!e.trigger||(Z.on("cta_click",()=>{var t,n;return(n=(t=e.trigger).convert)==null?void 0:n.call(t,Ye)}),Z.on("complete",()=>{var t,n;return(n=(t=e.trigger).tryAgain)==null?void 0:n.call(t)}))}var Z={init(e={},t){if(mi=e.profile||"web_embed",va=e.consent||{},xe={...pi,...e.ids||{}},ce=e.rootEl||ce,Ye=e.destinationUrl||(/android/i.test(navigator.userAgent)?"https://play.google.com/store":"https://www.apple.com/app-store/"),t&&(Oe=t),x("init"),document.body.oncontextmenu=()=>!1,li(),Fa(ce),si(),Sa(),Ra(),!Ie){if(document.readyState==="complete")ci();else if(!ri){ri=!0;let n=()=>{ci(),window.removeEventListener("load",n),document.removeEventListener("DOMContentLoaded",n)};window.addEventListener("load",n),document.addEventListener("DOMContentLoaded",n)}}Aa(),Ha(),Ma(),La(),ka(),console.log(`%c @handler/playable-sdk %c v${Be.version||"0.0.0"} `,"background: #007acc; color: #fff; font-size: 14px; padding: 4px 8px; border-top-left-radius: 4px; border-bottom-left-radius: 4px;","background: #e1e4e8; color: #333; font-size: 14px; padding: 4px 8px; border-top-right-radius: 4px; border-bottom-right-radius: 4px;"),K&&!X&&(x("boot"),x("view"),x("ready"),_e&&(_e=!1,Z.start()),X=!0),X=K},getRoot(){return li()},get version(){return Be.version||"0.0.0"},get maxWidth(){return de},get maxHeight(){return pe},get isLandscape(){return pt},get isReady(){return X},get isStarted(){return lt},get isPaused(){return Te},get isFinished(){return Ee},get volume(){return mt},get interactions(){return dt},on(e,t){We(Ne(e),t)},off(e,t){st(Ne(e),t)},start(){var e,t;if(!lt){if(!K){_e=!0;return}if(lt=!0,x("start"),Q(),re())ue(),(e=window.gameReady)==null||e.call(window);else if(le()){let n=window.TJ_API;(t=n==null?void 0:n.setPlayableBuild)==null||t.call(n,{orientation:pt?"landscape":"portrait",buildID:Be.version||"dev"})}}},finish(){var e,t;Ee||(Ee=!0,x("complete"),re()?(e=window.gameEnd)==null||e.call(window):ot()?(t=parent==null?void 0:parent.postMessage)==null||t.call(parent,"complete","*"):le()&&di())},install(e){if(!Ee){Ee=!0,le()?(di(),setTimeout(()=>Z.install(e),300)):(x("complete"),setTimeout(()=>Z.install(e),0));return}ct||(ct=!0,setTimeout(()=>ct=!1,500),x("cta_click"),x("conversion"),Ca(e||Ye))},emit(e,t){let n=Ne(e);if(!["view","boot","start","engagement","complete","cta_click","conversion","retry","pause","resume","resize","volume","error"].includes(n)&&!n.startsWith("custom."))throw new Error(`Event ${e} must be canonical or namespaced as custom.<mechanic_id>.<event>`);let i=hi(n,t);ze(n,i)},retry(){var e,t,n;if(re())(e=window.gameRetry)==null||e.call(window);else if(rt()){let i=window.NUC;(n=(t=i==null?void 0:i.trigger)==null?void 0:t.tryAgain)==null||n.call(t)}x("engagement",{action:"retry"})},pause(){ue(!0)},resume(){Se(!0)},resize(e,t){Q(e,t)}},Ge=Z;function Fa(e){let t=document.createElement("script");t.type="text/javascript",t.textContent=`
2
2
  (function(){
3
3
  var events = ['touchstart','touchend','mousedown','keydown'];
4
4
  function unlock(){
@@ -14,7 +14,7 @@
14
14
  }
15
15
  events.forEach(function(e){ document.addEventListener(e, unlock, false); });
16
16
  })();
17
- `,e.appendChild(t)}var ht=(i=>(i[i.PHONE_TALL=0]="PHONE_TALL",i[i.TABLET=1]="TABLET",i[i.LANDSCAPE=2]="LANDSCAPE",i))(ht||{});function je(e,t){let n=e/t;return n<=.62?0:n<=.85?1:2}var he=class{constructor(t,n){this.root=t,this.stage=n,this.uiFrame=document.createElement("div"),this.uiFrame.style.position="absolute",this.uiFrame.style.top="0",this.uiFrame.style.bottom="0",this.uiFrame.style.left="50%",this.uiFrame.style.transform="translateX(-50%)",this.uiFrame.style.width="100%",this.uiFrame.style.maxWidth="420px",this.uiFrame.style.pointerEvents="none",this.stage.appendChild(this.uiFrame),this.uiContainer=document.createElement("div"),this.uiContainer.setAttribute("style",["position:absolute","inset:0","display:flex","flex-direction:column","justify-content:flex-start","gap:12px","pointer-events:none","padding:20px 16px","padding-bottom:clamp(24px, 6vh, 96px)","box-sizing:border-box","z-index:2"].join(";")),this.uiFrame.appendChild(this.uiContainer),this.updateLayout()}getUIFrame(){return this.uiFrame}getUIContainer(){return this.uiContainer}updateLayout(){let t=this.stage.getBoundingClientRect(),n=je(t.width,t.height);n===0?this.uiFrame.style.maxWidth="420px":n===1?this.uiFrame.style.maxWidth="520px":this.uiFrame.style.maxWidth="640px"}getAspectClass(){let t=this.stage.getBoundingClientRect();return je(t.width,t.height)}};async function fi(e,t={}){let n=()=>{let c=e.getBoundingClientRect(),p=Math.floor(c.width),y=Math.floor(c.height);return(p<=0||!isFinite(p)||p!==p)&&(p=e.clientWidth||window.innerWidth||320),(y<=0||!isFinite(y)||y!==y)&&(y=e.clientHeight||window.innerHeight||480),(p<=0||!isFinite(p)||p!==p)&&(p=320),(y<=0||!isFinite(y)||y!==y)&&(y=480),console.log("[THREE-BASE] getSize result:",{width:p,height:y,boundingRect:{width:c.width,height:c.height},clientSize:{width:e.clientWidth,height:e.clientHeight},styleWidth:e.style.width,styleHeight:e.style.height,note:"Using boundingRect as primary source (actual rendered size)"}),{width:p,height:y}},i=e.style.width&&!e.style.width.includes("%"),a=e.style.height&&!e.style.height.includes("%");e.style.position||(e.style.position="relative"),e.style.display||(e.style.display="block"),e.style.width=e.style.width||"100%",e.style.height=e.style.height||"100%",e.style.minWidth="100%",e.style.minHeight="100%",e.style.maxWidth="100%",e.style.maxHeight="100%",e.style.boxSizing="border-box",e.style.overflow="hidden",e.style.margin="0",e.style.padding="0",e.style.border="none";let s=t.background||"linear-gradient(160deg, #0d1020, #0f1c2f)";e.style.setProperty("background",s,"important"),e.style.setProperty("background-size","cover","important"),e.style.setProperty("background-position","center","important"),e.style.setProperty("background-repeat","no-repeat","important");let r=document.createElement("div");r.style.cssText=`
17
+ `,e.appendChild(t)}var ut=(i=>(i[i.PHONE_TALL=0]="PHONE_TALL",i[i.TABLET=1]="TABLET",i[i.LANDSCAPE=2]="LANDSCAPE",i))(ut||{});function je(e,t){let n=e/t;return n<=.62?0:n<=.85?1:2}var he=class{constructor(t,n){this.root=t,this.stage=n,this.uiFrame=document.createElement("div"),this.uiFrame.style.position="absolute",this.uiFrame.style.top="0",this.uiFrame.style.bottom="0",this.uiFrame.style.left="50%",this.uiFrame.style.transform="translateX(-50%)",this.uiFrame.style.width="100%",this.uiFrame.style.maxWidth="420px",this.uiFrame.style.pointerEvents="none",this.stage.appendChild(this.uiFrame),this.uiContainer=document.createElement("div"),this.uiContainer.setAttribute("style",["position:absolute","inset:0","display:flex","flex-direction:column","justify-content:flex-start","gap:12px","pointer-events:none","padding:20px 16px","padding-bottom:clamp(24px, 6vh, 96px)","box-sizing:border-box","z-index:2"].join(";")),this.uiFrame.appendChild(this.uiContainer),this.updateLayout()}getUIFrame(){return this.uiFrame}getUIContainer(){return this.uiContainer}updateLayout(){let t=this.stage.getBoundingClientRect(),n=je(t.width,t.height);n===0?this.uiFrame.style.maxWidth="420px":n===1?this.uiFrame.style.maxWidth="520px":this.uiFrame.style.maxWidth="640px"}getAspectClass(){let t=this.stage.getBoundingClientRect();return je(t.width,t.height)}};async function fi(e,t={}){let n=()=>{let c=e.getBoundingClientRect(),p=Math.floor(c.width),y=Math.floor(c.height);return(p<=0||!isFinite(p)||p!==p)&&(p=e.clientWidth||window.innerWidth||320),(y<=0||!isFinite(y)||y!==y)&&(y=e.clientHeight||window.innerHeight||480),(p<=0||!isFinite(p)||p!==p)&&(p=320),(y<=0||!isFinite(y)||y!==y)&&(y=480),console.log("[THREE-BASE] getSize result:",{width:p,height:y,boundingRect:{width:c.width,height:c.height},clientSize:{width:e.clientWidth,height:e.clientHeight},styleWidth:e.style.width,styleHeight:e.style.height,note:"Using boundingRect as primary source (actual rendered size)"}),{width:p,height:y}},i=e.style.width&&!e.style.width.includes("%"),a=e.style.height&&!e.style.height.includes("%");e.style.position||(e.style.position="relative"),e.style.display||(e.style.display="block"),e.style.width=e.style.width||"100%",e.style.height=e.style.height||"100%",e.style.minWidth="100%",e.style.minHeight="100%",e.style.maxWidth="100%",e.style.maxHeight="100%",e.style.boxSizing="border-box",e.style.overflow="hidden",e.style.margin="0",e.style.padding="0",e.style.border="none";let s=t.background||"linear-gradient(160deg, #0d1020, #0f1c2f)";e.style.setProperty("background",s,"important"),e.style.setProperty("background-size","cover","important"),e.style.setProperty("background-position","center","important"),e.style.setProperty("background-repeat","no-repeat","important");let r=document.createElement("div");r.style.cssText=`
18
18
  position: absolute !important;
19
19
  inset: 0 !important;
20
20
  width: 100% !important;
@@ -56,8 +56,8 @@
56
56
  z-index: 1000;
57
57
  box-sizing: border-box;
58
58
  padding: ${b}px;
59
- `,i.appendChild(A);let G=ae(A);G.element=A;let B=((zt=s==null?void 0:s.gameplay)==null?void 0:zt.tuning)||{},U=(s==null?void 0:s.transform)||{},z=(Bt=B.logo_size)!=null?Bt:56,O=(Ot=U.scale)!=null?Ot:1,se=(Yt=(Nt=U.offset)==null?void 0:Nt.y)!=null?Yt:-130,He=(It=B.logo_alpha)!=null?It:1,Ai=new ye.SpriteMaterial({map:n||void 0,transparent:!0,alphaTest:.1}),N=new ye.Sprite(Ai);N.position.set(0,se,0),N.material.opacity=0;let Me=0,Le=0;if(n&&(Me=((Gt=n.image)==null?void 0:Gt.width)||100,Le=((jt=n.image)==null?void 0:jt.height)||100),Me>0&&Le>0){let oe=Me/Le,at,st;oe>1?(at=z,st=z/oe):(st=z,at=z*oe);let ua=at/Me*O,ha=st/Le*O;N.scale.set(ua,ha,1)}else{let oe=z/100*O;N.scale.set(oe,oe,1)}N.targetAlpha=He,N.baseScaleX=N.scale.x,N.baseScaleY=N.scale.y;let k=r==null?void 0:r.ui,j=((Vt=r==null?void 0:r.gameplay)==null?void 0:Vt.tuning)||{},Ci=(k==null?void 0:k.text)||"MISSION ACCOMPLISHED",yt=(k==null?void 0:k.font)||"brand.heading",Ke=(k==null?void 0:k.fontSize)||24,Hi=(qt=k==null?void 0:k.letterSpacing)!=null?qt:1,ke=(Xt=r==null?void 0:r.render)==null?void 0:Xt.tint,Mi=typeof ke=="string"?ke:ke?`#${ke.toString(16).padStart(6,"0")}`:"#00FF88",Li=y-b*2-30,ki=j.font_weight_override?j.font_weight_override:I(yt),ee=document.createElement("div");ee.textContent=Ci,ee.style.cssText=`
60
- font-family: ${Y(yt)};
59
+ `,i.appendChild(A);let G=ae(A);G.element=A;let B=((zt=s==null?void 0:s.gameplay)==null?void 0:zt.tuning)||{},U=(s==null?void 0:s.transform)||{},z=(Bt=B.logo_size)!=null?Bt:56,O=(Ot=U.scale)!=null?Ot:1,se=(Yt=(Nt=U.offset)==null?void 0:Nt.y)!=null?Yt:-130,He=(It=B.logo_alpha)!=null?It:1,Ai=new ye.SpriteMaterial({map:n||void 0,transparent:!0,alphaTest:.1}),N=new ye.Sprite(Ai);N.position.set(0,se,0),N.material.opacity=0;let Me=0,Le=0;if(n&&(Me=((Gt=n.image)==null?void 0:Gt.width)||100,Le=((jt=n.image)==null?void 0:jt.height)||100),Me>0&&Le>0){let oe=Me/Le,it,at;oe>1?(it=z,at=z/oe):(at=z,it=z*oe);let ma=it/Me*O,ua=at/Le*O;N.scale.set(ma,ua,1)}else{let oe=z/100*O;N.scale.set(oe,oe,1)}N.targetAlpha=He,N.baseScaleX=N.scale.x,N.baseScaleY=N.scale.y;let k=r==null?void 0:r.ui,j=((Vt=r==null?void 0:r.gameplay)==null?void 0:Vt.tuning)||{},Ci=(k==null?void 0:k.text)||"MISSION ACCOMPLISHED",ft=(k==null?void 0:k.font)||"brand.heading",Ke=(k==null?void 0:k.fontSize)||24,Hi=(qt=k==null?void 0:k.letterSpacing)!=null?qt:1,ke=(Xt=r==null?void 0:r.render)==null?void 0:Xt.tint,Mi=typeof ke=="string"?ke:ke?`#${ke.toString(16).padStart(6,"0")}`:"#00FF88",Li=y-b*2-30,ki=j.font_weight_override?j.font_weight_override:I(ft),ee=document.createElement("div");ee.textContent=Ci,ee.style.cssText=`
60
+ font-family: ${Y(ft)};
61
61
  font-size: ${Ke}px;
62
62
  font-weight: ${ki};
63
63
  color: ${Mi};
@@ -70,10 +70,10 @@
70
70
  transform: translate(-50%, -50%);
71
71
  white-space: nowrap;
72
72
  max-width: ${Li}px;
73
- `;let gt=b+30,Fi=((en=u.title_offset_y)!=null?en:gt+Ke/2)+((tn=j.animation_start_y_offset)!=null?tn:-20);ee.style.top=`${Fi}px`,ee.style.left="50%";let bt=ae(ee);bt.element=ee,A.appendChild(ee);let F=m==null?void 0:m.ui,wt=((nn=m==null?void 0:m.gameplay)==null?void 0:nn.tuning)||{},Di=(F==null?void 0:F.text)||"RESCUE COMPLETE",Et=(F==null?void 0:F.font)||"brand.body",Je=(F==null?void 0:F.fontSize)||11,$i=(an=F==null?void 0:F.letterSpacing)!=null?an:.5,Fe=(sn=m==null?void 0:m.render)==null?void 0:sn.tint,Pi=typeof Fe=="string"?Fe:Fe?`#${Fe.toString(16).padStart(6,"0")}`:"#B0B0B0",te=document.createElement("div");te.textContent=Di,te.style.cssText=`
74
- font-family: ${Y(Et)};
73
+ `;let yt=b+30,Fi=((en=u.title_offset_y)!=null?en:yt+Ke/2)+((tn=j.animation_start_y_offset)!=null?tn:-20);ee.style.top=`${Fi}px`,ee.style.left="50%";let gt=ae(ee);gt.element=ee,A.appendChild(ee);let F=m==null?void 0:m.ui,bt=((nn=m==null?void 0:m.gameplay)==null?void 0:nn.tuning)||{},Di=(F==null?void 0:F.text)||"RESCUE COMPLETE",wt=(F==null?void 0:F.font)||"brand.body",Je=(F==null?void 0:F.fontSize)||11,$i=(an=F==null?void 0:F.letterSpacing)!=null?an:.5,Fe=(sn=m==null?void 0:m.render)==null?void 0:sn.tint,Pi=typeof Fe=="string"?Fe:Fe?`#${Fe.toString(16).padStart(6,"0")}`:"#B0B0B0",te=document.createElement("div");te.textContent=Di,te.style.cssText=`
74
+ font-family: ${Y(wt)};
75
75
  font-size: ${Je}px;
76
- font-weight: ${I(Et)};
76
+ font-weight: ${I(wt)};
77
77
  color: ${Pi};
78
78
  text-align: center;
79
79
  letter-spacing: ${$i}px;
@@ -81,10 +81,10 @@
81
81
  position: absolute;
82
82
  transform: translate(-50%, -50%);
83
83
  white-space: nowrap;
84
- `;let xt=gt+Ke+15,Wi=((on=u.subtitle_offset_y)!=null?on:xt+Je/2)+((rn=wt.animation_start_y_offset)!=null?rn:-10);te.style.top=`${Wi}px`,te.style.left="50%";let Ze=ae(te);Ze.element=te,Ze.animationStartYOffset=(ln=wt.animation_start_y_offset)!=null?ln:-10,A.appendChild(te);let V=l==null?void 0:l.ui,_t=((cn=l==null?void 0:l.gameplay)==null?void 0:cn.tuning)||{},zi=(V==null?void 0:V.text)||((dn=o.ui)==null?void 0:dn.cta_hint)||"Continue the adventure!",Tt=(V==null?void 0:V.font)||"brand.body",vt=(V==null?void 0:V.fontSize)||16,De=(pn=l==null?void 0:l.render)==null?void 0:pn.tint,Bi=typeof De=="string"?De:De?`#${De.toString(16).padStart(6,"0")}`:"#FFFFFF",Oi=(mn=_t.max_width)!=null?mn:y-b*2,Ni=(un=_t.line_height)!=null?un:1.4,ne=document.createElement("div");ne.textContent=zi,ne.style.cssText=`
85
- font-family: ${Y(Tt)};
86
- font-size: ${vt}px;
87
- font-weight: ${I(Tt)};
84
+ `;let Et=yt+Ke+15,Wi=((on=u.subtitle_offset_y)!=null?on:Et+Je/2)+((rn=bt.animation_start_y_offset)!=null?rn:-10);te.style.top=`${Wi}px`,te.style.left="50%";let Ze=ae(te);Ze.element=te,Ze.animationStartYOffset=(ln=bt.animation_start_y_offset)!=null?ln:-10,A.appendChild(te);let V=l==null?void 0:l.ui,xt=((cn=l==null?void 0:l.gameplay)==null?void 0:cn.tuning)||{},zi=(V==null?void 0:V.text)||((dn=o.ui)==null?void 0:dn.cta_hint)||"Continue the adventure!",_t=(V==null?void 0:V.font)||"brand.body",Tt=(V==null?void 0:V.fontSize)||16,De=(pn=l==null?void 0:l.render)==null?void 0:pn.tint,Bi=typeof De=="string"?De:De?`#${De.toString(16).padStart(6,"0")}`:"#FFFFFF",Oi=(mn=xt.max_width)!=null?mn:y-b*2,Ni=(un=xt.line_height)!=null?un:1.4,ne=document.createElement("div");ne.textContent=zi,ne.style.cssText=`
85
+ font-family: ${Y(_t)};
86
+ font-size: ${Tt}px;
87
+ font-weight: ${I(_t)};
88
88
  color: ${Bi};
89
89
  text-align: center;
90
90
  opacity: 0;
@@ -93,9 +93,9 @@
93
93
  max-width: ${Oi}px;
94
94
  line-height: ${Ni};
95
95
  word-wrap: break-word;
96
- `;let Yi=xt+Je+30,Ii=(hn=u.footer_offset_y)!=null?hn:Yi+vt/2;ne.style.top=`${Ii}px`,ne.style.left="50%";let Qe=ae(ne);Qe.element=ne;let Gi=((fn=l==null?void 0:l.render)==null?void 0:fn.alpha)!==void 0&&((yn=l==null?void 0:l.render)==null?void 0:yn.alpha)!==null?l.render.alpha:1;Qe.targetAlpha=Gi,A.appendChild(ne);let q=((gn=f==null?void 0:f.gameplay)==null?void 0:gn.tuning)||{},D=f==null?void 0:f.ui,ji=(bn=q.button_width)!=null?bn:260,Ue=(wn=q.button_height)!=null?wn:56,Vi=(En=q.button_radius)!=null?En:16,qi=q.button_bg_color||((xn=o.theme)==null?void 0:xn.cta_background)||"#ffb43b",Xi=(_n=q.button_bg_alpha)!=null?_n:1,Ki=q.button_border_color||"#ffffff",Ji=(Tn=q.button_border_width)!=null?Tn:2,Ga=(vn=q.button_border_alpha)!=null?vn:.2,Zi=E-b-20,et=(Sn=u.cta_offset_y)!=null?Sn:Zi-Ue/2,C=document.createElement("button");C.style.cssText=`
96
+ `;let Yi=Et+Je+30,Ii=(hn=u.footer_offset_y)!=null?hn:Yi+Tt/2;ne.style.top=`${Ii}px`,ne.style.left="50%";let Qe=ae(ne);Qe.element=ne;let Gi=((fn=l==null?void 0:l.render)==null?void 0:fn.alpha)!==void 0&&((yn=l==null?void 0:l.render)==null?void 0:yn.alpha)!==null?l.render.alpha:1;Qe.targetAlpha=Gi,A.appendChild(ne);let q=((gn=f==null?void 0:f.gameplay)==null?void 0:gn.tuning)||{},D=f==null?void 0:f.ui,ji=(bn=q.button_width)!=null?bn:260,vt=(wn=q.button_height)!=null?wn:56,Vi=(En=q.button_radius)!=null?En:16,qi=q.button_bg_color||((xn=o.theme)==null?void 0:xn.cta_background)||"#ffb43b",Xi=(_n=q.button_bg_alpha)!=null?_n:1,Ki=q.button_border_color||"#ffffff",Ji=(Tn=q.button_border_width)!=null?Tn:2,Ia=(vn=q.button_border_alpha)!=null?vn:.2,Ue=(Sn=u.cta_offset_y)!=null?Sn:E*.7,C=document.createElement("button");C.style.cssText=`
97
97
  width: ${ji}px;
98
- height: ${Ue}px;
98
+ height: ${vt}px;
99
99
  background: ${qi};
100
100
  opacity: ${Xi};
101
101
  border: ${Ji}px solid ${Ki};
@@ -105,18 +105,18 @@
105
105
  position: absolute;
106
106
  transform: translate(-50%, -50%);
107
107
  box-shadow: inset 0 0 1px rgba(0,0,0,0.15);
108
- `,C.style.top=`${et}px`,C.style.left="50%";let tt=ae(C);tt.element=C,tt.addEventListener=C.addEventListener.bind(C),A.appendChild(C);let Qi=(D==null?void 0:D.text)||((Rn=o.ui)==null?void 0:Rn.cta_label_end)||"DOWNLOAD",St=(D==null?void 0:D.font)||"brand.heading",Ui=(D==null?void 0:D.fontSize)||20,ea=q.button_text_color||((An=o.theme)==null?void 0:An.cta_text)||"#1a0a0a";C.textContent=Qi,C.style.fontFamily=Y(St),C.style.fontSize=`${Ui}px`,C.style.fontWeight=String(I(St)),C.style.color=ea,C.style.letterSpacing=`${(Cn=D==null?void 0:D.letterSpacing)!=null?Cn:1}px`;let Rt=ae(C);Rt.element=C;let $=d==null?void 0:d.ui,At=((Hn=d==null?void 0:d.gameplay)==null?void 0:Hn.tuning)||{},ta=($==null?void 0:$.text)||"Play the full game",Ct=($==null?void 0:$.font)||"brand.body",na=($==null?void 0:$.fontSize)||11,ia=(Mn=$==null?void 0:$.letterSpacing)!=null?Mn:0,$e=(Ln=d==null?void 0:d.render)==null?void 0:Ln.tint,aa=typeof $e=="string"?$e:$e?`#${$e.toString(16).padStart(6,"0")}`:"#CCCCCC",ie=document.createElement("div");ie.textContent=ta,ie.style.cssText=`
108
+ `,C.style.top=`${Ue}px`,C.style.left="50%";let et=ae(C);et.element=C,et.addEventListener=C.addEventListener.bind(C),A.appendChild(C);let Zi=(D==null?void 0:D.text)||((Rn=o.ui)==null?void 0:Rn.cta_label_end)||"DOWNLOAD",St=(D==null?void 0:D.font)||"brand.heading",Qi=(D==null?void 0:D.fontSize)||20,Ui=q.button_text_color||((An=o.theme)==null?void 0:An.cta_text)||"#1a0a0a";C.textContent=Zi,C.style.fontFamily=Y(St),C.style.fontSize=`${Qi}px`,C.style.fontWeight=String(I(St)),C.style.color=Ui,C.style.letterSpacing=`${(Cn=D==null?void 0:D.letterSpacing)!=null?Cn:1}px`;let Rt=ae(C);Rt.element=C;let $=d==null?void 0:d.ui,At=((Hn=d==null?void 0:d.gameplay)==null?void 0:Hn.tuning)||{},ea=($==null?void 0:$.text)||"Play the full game",Ct=($==null?void 0:$.font)||"brand.body",ta=($==null?void 0:$.fontSize)||11,na=(Mn=$==null?void 0:$.letterSpacing)!=null?Mn:0,$e=(Ln=d==null?void 0:d.render)==null?void 0:Ln.tint,ia=typeof $e=="string"?$e:$e?`#${$e.toString(16).padStart(6,"0")}`:"#CCCCCC",ie=document.createElement("div");ie.textContent=ea,ie.style.cssText=`
109
109
  font-family: ${Y(Ct)};
110
- font-size: ${na}px;
110
+ font-size: ${ta}px;
111
111
  font-weight: ${I(Ct)};
112
- color: ${aa};
112
+ color: ${ia};
113
113
  text-align: center;
114
- letter-spacing: ${ia}px;
114
+ letter-spacing: ${na}px;
115
115
  opacity: 0;
116
116
  position: absolute;
117
117
  transform: translate(-50%, -50%);
118
118
  white-space: nowrap;
119
- `;let sa=et+Ue/2+20,oa=E-b-10,ra=Math.min(sa+((kn=At.animation_start_y_offset)!=null?kn:5),oa);ie.style.top=`${ra}px`,ie.style.left="50%";let nt=ae(ie);nt.element=ie,nt.animationStartYOffset=(Fn=At.animation_start_y_offset)!=null?Fn:5,A.appendChild(ie);let it=((Dn=h==null?void 0:h.gameplay)==null?void 0:Dn.tuning)||{},la=($n=it.hand_offset_x)!=null?$n:50,ca=(Pn=it.hand_offset_y)!=null?Pn:50,da=(zn=(Wn=h==null?void 0:h.transform)==null?void 0:Wn.scale)!=null?zn:.1875,pa=(Bn=it.hand_scale_multiplier)!=null?Bn:2.5,ma=new ye.SpriteMaterial({map:t||void 0,transparent:!0,alphaTest:.1}),be=new ye.Sprite(ma),Ht=da*pa*100;return be.scale.set(Ht,Ht,1),be.position.set(la,et+ca,0),be.material.opacity=0,be.visible=!1,{panel:G,logo:N,title:bt,subtitle:Ze,footer:Qe,ctaButton:tt,ctaText:Rt,ctaHint:nt,hand:be}}function wi(e,t,n){var S,R,M,L,v,A,G,B;let i=t.objects.get("ui_endgame_1"),a=((S=i==null?void 0:i.gameplay)==null?void 0:S.tuning)||{},s=(R=a.animation_duration_ms)!=null?R:800,r=(M=a.fade_in_duration_ms)!=null?M:600,m=(L=a.scale_animation_intensity)!=null?L:.1,l=(v=a.logo_animation_delay_ms)!=null?v:100,f=(A=a.title_animation_delay_ms)!=null?A:200,d=(G=a.footer_animation_delay_ms)!=null?G:300,h=(B=a.cta_animation_delay_ms)!=null?B:400,{panel:o,logo:u,title:g,subtitle:w,footer:c,ctaButton:p,ctaText:y,ctaHint:E}=e;o.visible=!0,o.element.style.visibility="visible";let b=Date.now(),_=()=>{let U=Date.now()-b,z=Math.min(U/r,1),O=1-Math.pow(1-z,3);o.alpha=O,o.element.style.opacity=O.toString();let se=1+m*(1-O);o.element.style.transform=`translate(-50%, -50%) scale(${se})`,z<1?requestAnimationFrame(_):(setTimeout(()=>$a(u,s,t),l),setTimeout(()=>{Pa(g,s),setTimeout(()=>Wa(w,s),50)},f),setTimeout(()=>za(c,s),d),setTimeout(()=>{Ba(p,y,s),setTimeout(()=>Oa(E,s),50),n&&n()},h))};_()}function $a(e,t,n){var o,u,g,w,c;let i=n==null?void 0:n.objects.get("ui_endgame_logo_1"),s=(u=(((o=i==null?void 0:i.gameplay)==null?void 0:o.tuning)||{}).animation_start_scale)!=null?u:1.2,r=Date.now(),m=e.material.opacity,l=(g=e.targetAlpha)!=null?g:1,f=(w=e.baseScaleX)!=null?w:e.scale.x,d=(c=e.baseScaleY)!=null?c:e.scale.y,h=()=>{let p=Date.now()-r,y=Math.min(p/t,1),E=1-Math.pow(1-y,2);e.material.opacity=m+(l-m)*E;let b=s+(1-s)*E;e.scale.set(f*b,d*b,1),y<1&&requestAnimationFrame(h)};h()}function Pa(e,t){let n=Date.now(),i=parseFloat(e.element.style.opacity||"0"),a=parseFloat(e.element.style.top||"0"),s=()=>{let r=Date.now()-n,m=Math.min(r/t,1),l=1-Math.pow(1-m,2);e.element.style.opacity=(i+(1-i)*l).toString(),e.element.style.top=`${a-20*(1-l)}px`,m<1&&requestAnimationFrame(s)};s()}function Wa(e,t){var m;let n=Date.now(),i=parseFloat(e.element.style.opacity||"0"),a=parseFloat(e.element.style.top||"0"),s=a-((m=e.animationStartYOffset)!=null?m:-10),r=()=>{let l=Date.now()-n,f=Math.min(l/t,1),d=1-Math.pow(1-f,2);e.element.style.opacity=(i+(1-i)*d).toString(),e.element.style.top=`${a+(s-a)*d}px`,f<1&&requestAnimationFrame(r)};r()}function za(e,t){var r;let n=Date.now(),i=parseFloat(e.element.style.opacity||"0"),a=(r=e.targetAlpha)!=null?r:1,s=()=>{let m=Date.now()-n,l=Math.min(m/t,1),f=1-Math.pow(1-l,2);e.element.style.opacity=(i+(a-i)*f).toString(),l<1&&requestAnimationFrame(s)};s()}function Ba(e,t,n){let i=Date.now(),a=parseFloat(e.element.style.opacity||"0"),s=()=>{let r=Date.now()-i,m=Math.min(r/n,1),l=1-Math.pow(1-m,2);e.element.style.opacity=(a+(1-a)*l).toString(),t.element.style.opacity=(a+(1-a)*l).toString(),e.element.style.transform=`translate(-50%, -50%) scale(${1+.1*(1-l)})`,m<1&&requestAnimationFrame(s)};s()}function Oa(e,t){var m;let n=Date.now(),i=parseFloat(e.element.style.opacity||"0"),a=parseFloat(e.element.style.top||"0"),s=a-((m=e.animationStartYOffset)!=null?m:5),r=()=>{let l=Date.now()-n,f=Math.min(l/t,1),d=1-Math.pow(1-f,2);e.element.style.opacity=(i+(1-i)*d).toString(),e.element.style.top=`${a+(s-a)*d}px`,f<1&&requestAnimationFrame(r)};r()}function Ei(e,t,n,i){var d,h,o,u;let a=n.objects.get("ui_endgame_hand_1"),s=((d=a==null?void 0:a.gameplay)==null?void 0:d.tuning)||{},r=(h=s.click_animation_duration_ms)!=null?h:600,m=(o=s.click_delay_ms)!=null?o:2e3,l=(u=s.click_repeat_delay_ms)!=null?u:3e3,f=()=>{var R,M;e.visible=!0,e.material.opacity=1;let g=e.position.x,w=e.position.y,c=(R=s.hand_offset_x)!=null?R:50,p=(M=s.hand_offset_y)!=null?M:50,y=t.element.getBoundingClientRect(),E=c,b=p,_=Date.now(),S=()=>{var O,se,He;let L=Date.now()-_,v=Math.min(L/r,1),A=v<.5?2*v*v:1-Math.pow(-2*v+2,2)/2;e.position.set(g+(E-g)*A,w+(b-w)*A,0);let G=(se=(O=a==null?void 0:a.transform)==null?void 0:O.scale)!=null?se:.1875,B=(He=s.hand_scale_multiplier)!=null?He:2.5,U=G*B*100,z=U+U*.2*Math.sin(v*Math.PI);e.scale.set(z,z,1),v<1?requestAnimationFrame(S):(t.element.style.transform="translate(-50%, -50%) scale(0.95)",setTimeout(()=>{t.element.style.transform="translate(-50%, -50%) scale(1)",i()},100),setTimeout(()=>{e.material.opacity=0,setTimeout(()=>{e.position.set(g,w,0),f()},l)},500))};S()};setTimeout(f,m)}var Xe=we(require("three"));function xi(e,t,n){var h,o,u,g;let i=t.objects.get("hand_tutorial_1"),a=((h=i==null?void 0:i.gameplay)==null?void 0:h.tuning)||{},s=(i==null?void 0:i.render)||{},r=(i==null?void 0:i.transform)||{},m=new Xe.SpriteMaterial({map:e||void 0,transparent:!0,alphaTest:.1}),l=new Xe.Sprite(m);l.position.set(n.x,n.y,0),l.material.opacity=0;let f=(o=a.hand_scale_multiplier)!=null?o:2.5,d=(u=r.scale)!=null?u:.1875;return l.scale.set(d*f*100,d*f*100,1),l.renderOrder=(g=s.z_index)!=null?g:99999,l}function _i(e){var g,w,c,p,y,E,b,_,S;let t=e.objects.get("ui_tutorial_1"),n=t==null?void 0:t.ui,i=(t==null?void 0:t.render)||{},a=((g=e.engine.runtime)==null?void 0:g.ui_styles)||{},s=((w=e.engine.runtime)==null?void 0:w.ui)||{},r=(n==null?void 0:n.text)||s.tutorial_label||s.label_text||"CLEAN!",m=(n==null?void 0:n.font)||"brand.warning",l=(n==null?void 0:n.fontSize)||a.label_font_size||52,f=(p=n==null?void 0:n.letterSpacing)!=null?p:(c=a.label_letter_spacing)!=null?c:-1,d=(n==null?void 0:n.align)||"center",h=i.tint,o=typeof h=="string"?h:h?`#${h.toString(16).padStart(6,"0")}`:a.label_fill||"#FFF1C1",u=document.createElement("div");return u.textContent=r,u.style.cssText=`
119
+ `;let aa=Ue+vt/2+20,sa=E-b-10,oa=Math.min(aa+((kn=At.animation_start_y_offset)!=null?kn:5),sa);ie.style.top=`${oa}px`,ie.style.left="50%";let tt=ae(ie);tt.element=ie,tt.animationStartYOffset=(Fn=At.animation_start_y_offset)!=null?Fn:5,A.appendChild(ie);let nt=((Dn=h==null?void 0:h.gameplay)==null?void 0:Dn.tuning)||{},ra=($n=nt.hand_offset_x)!=null?$n:50,la=(Pn=nt.hand_offset_y)!=null?Pn:50,ca=(zn=(Wn=h==null?void 0:h.transform)==null?void 0:Wn.scale)!=null?zn:.1875,da=(Bn=nt.hand_scale_multiplier)!=null?Bn:2.5,pa=new ye.SpriteMaterial({map:t||void 0,transparent:!0,alphaTest:.1}),be=new ye.Sprite(pa),Ht=ca*da*100;return be.scale.set(Ht,Ht,1),be.position.set(ra,Ue+la,0),be.material.opacity=0,be.visible=!1,{panel:G,logo:N,title:gt,subtitle:Ze,footer:Qe,ctaButton:et,ctaText:Rt,ctaHint:tt,hand:be}}function wi(e,t,n){var S,R,M,L,v,A,G,B;let i=t.objects.get("ui_endgame_1"),a=((S=i==null?void 0:i.gameplay)==null?void 0:S.tuning)||{},s=(R=a.animation_duration_ms)!=null?R:800,r=(M=a.fade_in_duration_ms)!=null?M:600,m=(L=a.scale_animation_intensity)!=null?L:.1,l=(v=a.logo_animation_delay_ms)!=null?v:100,f=(A=a.title_animation_delay_ms)!=null?A:200,d=(G=a.footer_animation_delay_ms)!=null?G:300,h=(B=a.cta_animation_delay_ms)!=null?B:400,{panel:o,logo:u,title:g,subtitle:w,footer:c,ctaButton:p,ctaText:y,ctaHint:E}=e;o.visible=!0,o.element.style.visibility="visible";let b=Date.now(),_=()=>{let U=Date.now()-b,z=Math.min(U/r,1),O=1-Math.pow(1-z,3);o.alpha=O,o.element.style.opacity=O.toString();let se=1+m*(1-O);o.element.style.transform=`translate(-50%, -50%) scale(${se})`,z<1?requestAnimationFrame(_):(setTimeout(()=>Da(u,s,t),l),setTimeout(()=>{$a(g,s),setTimeout(()=>Pa(w,s),50)},f),setTimeout(()=>Wa(c,s),d),setTimeout(()=>{za(p,y,s),setTimeout(()=>Ba(E,s),50),n&&n()},h))};_()}function Da(e,t,n){var o,u,g,w,c;let i=n==null?void 0:n.objects.get("ui_endgame_logo_1"),s=(u=(((o=i==null?void 0:i.gameplay)==null?void 0:o.tuning)||{}).animation_start_scale)!=null?u:1.2,r=Date.now(),m=e.material.opacity,l=(g=e.targetAlpha)!=null?g:1,f=(w=e.baseScaleX)!=null?w:e.scale.x,d=(c=e.baseScaleY)!=null?c:e.scale.y,h=()=>{let p=Date.now()-r,y=Math.min(p/t,1),E=1-Math.pow(1-y,2);e.material.opacity=m+(l-m)*E;let b=s+(1-s)*E;e.scale.set(f*b,d*b,1),y<1&&requestAnimationFrame(h)};h()}function $a(e,t){let n=Date.now(),i=parseFloat(e.element.style.opacity||"0"),a=parseFloat(e.element.style.top||"0"),s=()=>{let r=Date.now()-n,m=Math.min(r/t,1),l=1-Math.pow(1-m,2);e.element.style.opacity=(i+(1-i)*l).toString(),e.element.style.top=`${a-20*(1-l)}px`,m<1&&requestAnimationFrame(s)};s()}function Pa(e,t){var m;let n=Date.now(),i=parseFloat(e.element.style.opacity||"0"),a=parseFloat(e.element.style.top||"0"),s=a-((m=e.animationStartYOffset)!=null?m:-10),r=()=>{let l=Date.now()-n,f=Math.min(l/t,1),d=1-Math.pow(1-f,2);e.element.style.opacity=(i+(1-i)*d).toString(),e.element.style.top=`${a+(s-a)*d}px`,f<1&&requestAnimationFrame(r)};r()}function Wa(e,t){var r;let n=Date.now(),i=parseFloat(e.element.style.opacity||"0"),a=(r=e.targetAlpha)!=null?r:1,s=()=>{let m=Date.now()-n,l=Math.min(m/t,1),f=1-Math.pow(1-l,2);e.element.style.opacity=(i+(a-i)*f).toString(),l<1&&requestAnimationFrame(s)};s()}function za(e,t,n){let i=Date.now(),a=parseFloat(e.element.style.opacity||"0"),s=()=>{let r=Date.now()-i,m=Math.min(r/n,1),l=1-Math.pow(1-m,2);e.element.style.opacity=(a+(1-a)*l).toString(),t.element.style.opacity=(a+(1-a)*l).toString(),e.element.style.transform=`translate(-50%, -50%) scale(${1+.1*(1-l)})`,m<1&&requestAnimationFrame(s)};s()}function Ba(e,t){var m;let n=Date.now(),i=parseFloat(e.element.style.opacity||"0"),a=parseFloat(e.element.style.top||"0"),s=a-((m=e.animationStartYOffset)!=null?m:5),r=()=>{let l=Date.now()-n,f=Math.min(l/t,1),d=1-Math.pow(1-f,2);e.element.style.opacity=(i+(1-i)*d).toString(),e.element.style.top=`${a+(s-a)*d}px`,f<1&&requestAnimationFrame(r)};r()}function Ei(e,t,n,i){var d,h,o,u;let a=n.objects.get("ui_endgame_hand_1"),s=((d=a==null?void 0:a.gameplay)==null?void 0:d.tuning)||{},r=(h=s.click_animation_duration_ms)!=null?h:600,m=(o=s.click_delay_ms)!=null?o:2e3,l=(u=s.click_repeat_delay_ms)!=null?u:3e3,f=()=>{var R,M;e.visible=!0,e.material.opacity=1;let g=e.position.x,w=e.position.y,c=(R=s.hand_offset_x)!=null?R:50,p=(M=s.hand_offset_y)!=null?M:50,y=t.element.getBoundingClientRect(),E=c,b=p,_=Date.now(),S=()=>{var O,se,He;let L=Date.now()-_,v=Math.min(L/r,1),A=v<.5?2*v*v:1-Math.pow(-2*v+2,2)/2;e.position.set(g+(E-g)*A,w+(b-w)*A,0);let G=(se=(O=a==null?void 0:a.transform)==null?void 0:O.scale)!=null?se:.1875,B=(He=s.hand_scale_multiplier)!=null?He:2.5,U=G*B*100,z=U+U*.2*Math.sin(v*Math.PI);e.scale.set(z,z,1),v<1?requestAnimationFrame(S):(t.element.style.transform="translate(-50%, -50%) scale(0.95)",setTimeout(()=>{t.element.style.transform="translate(-50%, -50%) scale(1)",i()},100),setTimeout(()=>{e.material.opacity=0,setTimeout(()=>{e.position.set(g,w,0),f()},l)},500))};S()};setTimeout(f,m)}var Xe=we(require("three"));function xi(e,t,n){var h,o,u,g;let i=t.objects.get("hand_tutorial_1"),a=((h=i==null?void 0:i.gameplay)==null?void 0:h.tuning)||{},s=(i==null?void 0:i.render)||{},r=(i==null?void 0:i.transform)||{},m=new Xe.SpriteMaterial({map:e||void 0,transparent:!0,alphaTest:.1}),l=new Xe.Sprite(m);l.position.set(n.x,n.y,0),l.material.opacity=0;let f=(o=a.hand_scale_multiplier)!=null?o:2.5,d=(u=r.scale)!=null?u:.1875;return l.scale.set(d*f*100,d*f*100,1),l.renderOrder=(g=s.z_index)!=null?g:99999,l}function _i(e){var g,w,c,p,y,E,b,_,S;let t=e.objects.get("ui_tutorial_1"),n=t==null?void 0:t.ui,i=(t==null?void 0:t.render)||{},a=((g=e.engine.runtime)==null?void 0:g.ui_styles)||{},s=((w=e.engine.runtime)==null?void 0:w.ui)||{},r=(n==null?void 0:n.text)||s.tutorial_label||s.label_text||"CLEAN!",m=(n==null?void 0:n.font)||"brand.warning",l=(n==null?void 0:n.fontSize)||a.label_font_size||52,f=(p=n==null?void 0:n.letterSpacing)!=null?p:(c=a.label_letter_spacing)!=null?c:-1,d=(n==null?void 0:n.align)||"center",h=i.tint,o=typeof h=="string"?h:h?`#${h.toString(16).padStart(6,"0")}`:a.label_fill||"#FFF1C1",u=document.createElement("div");return u.textContent=r,u.style.cssText=`
120
120
  font-family: ${Y(m)};
121
121
  font-size: ${l}px;
122
122
  font-weight: ${I(m)};
@@ -131,4 +131,4 @@
131
131
  position: absolute;
132
132
  transform: translate(-50%, -50%);
133
133
  white-space: nowrap;
134
- `,u}function Ti(e,t,n,i,a){var l,f,d,h,o,u,g;let s=a.objects.get("hand_tutorial_1"),r=((l=s==null?void 0:s.gameplay)==null?void 0:l.tuning)||{},m=(s==null?void 0:s.transform)||{};if(!i){let w=(f=r.animation_duration)!=null?f:1.5,c=n%w/w,p=c<.5?2*c*c:-1+(4-2*c)*c,y=(d=r.x_offset)!=null?d:0,E=(h=r.y_offset)!=null?h:0,b=(o=r.animation_range)!=null?o:40,_=b*.7,S=b,R=t.x+y+_,M=t.y+E+S,L=R+_,v=M+S;e.position.set(R+(L-R)*p,M+(v-M)*p,0);let A=(u=m.scale)!=null?u:.1875,G=(g=r.hand_scale_multiplier)!=null?g:2.5,B=A*G*100;e.scale.set(B,B,1)}}var ge=we(require("three")),vi=new ge.TextureLoader;async function ft(e,t,n=16777215,i=!1){try{let s=(globalThis.INLINE_ASSETS||{})[e];return await vi.loadAsync(s||e)}catch{console.warn(`Asset missing: ${e}. Using placeholder.`);let s=document.createElement("canvas");s.width=64,s.height=64;let r=s.getContext("2d");return r&&(r.fillStyle=`#${n.toString(16).padStart(6,"0")}`,i?r.fillRect(0,0,30,60):(r.beginPath(),r.arc(32,32,30,0,Math.PI*2),r.fill(),r.fillRect(27,32,10,40))),new ge.CanvasTexture(s)}}async function Si(e,t,n){var g,w,c,p;let a=(globalThis.INLINE_ASSETS||{})[e]||e,s;try{s=await vi.loadAsync(a),console.log("[character] loaded sheet",{path:e,sourceUsed:a})}catch(y){let _=((n.gameplay.character_sheet||{}).fallback_color||"#ff00ff").replace("#","");s=await ft(e,t,parseInt(_,16),!0),console.warn("[character] fallback loadAsset used",{path:e,err:y})}if(!s)return[];let r=n.gameplay.character_sheet||{},m=(g=r.cols)!=null?g:3,l=(w=r.rows)!=null?w:2,f=((c=s.image)==null?void 0:c.width)||0,d=((p=s.image)==null?void 0:p.height)||0,h=f/m,o=d/l;if(!Number.isFinite(h)||!Number.isFinite(o)||h<=0||o<=0)return[s];let u=[];for(let y=0;y<l;y++)for(let E=0;E<m;E++){let b=document.createElement("canvas");b.width=h,b.height=o;let _=b.getContext("2d");_&&s.image&&_.drawImage(s.image,E*h,y*o,h,o,0,0,h,o),u.push(new ge.CanvasTexture(b))}return u.length>2&&u.push(...u.slice(1,-1).reverse()),console.log("[character] frames prepared",{count:u.length}),u}function Ri(e,t){var h,o,u,g;let n=t.gameplay.brush||{},i=t.theme.brush_color||"#ffffff",a=(h=n.radius)!=null?h:20,s=(o=n.inner_radius)!=null?o:15,r=(u=n.alpha)!=null?u:.8,m=(g=n.inner_alpha)!=null?g:.3,l=n.inner_color||"#ffffff",f=document.createElement("canvas");f.width=a*2,f.height=a*2;let d=f.getContext("2d");return d&&(d.clearRect(0,0,f.width,f.height),d.beginPath(),d.arc(a,a,a,0,Math.PI*2),d.fillStyle=i,d.globalAlpha=r,d.fill(),d.beginPath(),d.arc(a,a,s,0,Math.PI*2),d.fillStyle=l,d.globalAlpha=m,d.fill()),new ge.CanvasTexture(f)}0&&(module.exports={AspectClass,GameObject,GameObjectManager,Renderer,ResponsiveUISystem,Transform,animateHandClick,animatePanelEntrance,createBrushTexture,createEndGamePanel,createHandTutorial,createThreeBase,createTutorialLabel,getAspectClass,getRegisteredFontIds,loadAsset,loadCharacterFrames,registerFont,resolveFont,resolveFontWeight,updateHandAnimation});
134
+ `,u}function Ti(e,t,n,i,a){var l,f,d,h,o,u,g;let s=a.objects.get("hand_tutorial_1"),r=((l=s==null?void 0:s.gameplay)==null?void 0:l.tuning)||{},m=(s==null?void 0:s.transform)||{};if(!i){let w=(f=r.animation_duration)!=null?f:1.5,c=n%w/w,p=c<.5?2*c*c:-1+(4-2*c)*c,y=(d=r.x_offset)!=null?d:0,E=(h=r.y_offset)!=null?h:0,b=(o=r.animation_range)!=null?o:40,_=b*.7,S=b,R=t.x+y+_,M=t.y+E+S,L=R+_,v=M+S;e.position.set(R+(L-R)*p,M+(v-M)*p,0);let A=(u=m.scale)!=null?u:.1875,G=(g=r.hand_scale_multiplier)!=null?g:2.5,B=A*G*100;e.scale.set(B,B,1)}}var ge=we(require("three")),vi=new ge.TextureLoader;async function ht(e,t,n=16777215,i=!1){try{let s=(globalThis.INLINE_ASSETS||{})[e];return await vi.loadAsync(s||e)}catch{console.warn(`Asset missing: ${e}. Using placeholder.`);let s=document.createElement("canvas");s.width=64,s.height=64;let r=s.getContext("2d");return r&&(r.fillStyle=`#${n.toString(16).padStart(6,"0")}`,i?r.fillRect(0,0,30,60):(r.beginPath(),r.arc(32,32,30,0,Math.PI*2),r.fill(),r.fillRect(27,32,10,40))),new ge.CanvasTexture(s)}}async function Si(e,t,n){var g,w,c,p;let a=(globalThis.INLINE_ASSETS||{})[e]||e,s;try{s=await vi.loadAsync(a),console.log("[character] loaded sheet",{path:e,sourceUsed:a})}catch(y){let _=((n.gameplay.character_sheet||{}).fallback_color||"#ff00ff").replace("#","");s=await ht(e,t,parseInt(_,16),!0),console.warn("[character] fallback loadAsset used",{path:e,err:y})}if(!s)return[];let r=n.gameplay.character_sheet||{},m=(g=r.cols)!=null?g:3,l=(w=r.rows)!=null?w:2,f=((c=s.image)==null?void 0:c.width)||0,d=((p=s.image)==null?void 0:p.height)||0,h=f/m,o=d/l;if(!Number.isFinite(h)||!Number.isFinite(o)||h<=0||o<=0)return[s];let u=[];for(let y=0;y<l;y++)for(let E=0;E<m;E++){let b=document.createElement("canvas");b.width=h,b.height=o;let _=b.getContext("2d");_&&s.image&&_.drawImage(s.image,E*h,y*o,h,o,0,0,h,o),u.push(new ge.CanvasTexture(b))}return u.length>2&&u.push(...u.slice(1,-1).reverse()),console.log("[character] frames prepared",{count:u.length}),u}function Ri(e,t){var h,o,u,g;let n=t.gameplay.brush||{},i=t.theme.brush_color||"#ffffff",a=(h=n.radius)!=null?h:20,s=(o=n.inner_radius)!=null?o:15,r=(u=n.alpha)!=null?u:.8,m=(g=n.inner_alpha)!=null?g:.3,l=n.inner_color||"#ffffff",f=document.createElement("canvas");f.width=a*2,f.height=a*2;let d=f.getContext("2d");return d&&(d.clearRect(0,0,f.width,f.height),d.beginPath(),d.arc(a,a,a,0,Math.PI*2),d.fillStyle=i,d.globalAlpha=r,d.fill(),d.beginPath(),d.arc(a,a,s,0,Math.PI*2),d.fillStyle=l,d.globalAlpha=m,d.fill()),new ge.CanvasTexture(f)}0&&(module.exports={AspectClass,GameObject,GameObjectManager,Renderer,ResponsiveUISystem,Transform,animateHandClick,animatePanelEntrance,createBrushTexture,createEndGamePanel,createHandTutorial,createThreeBase,createTutorialLabel,getAspectClass,getRegisteredFontIds,loadAsset,loadCharacterFrames,registerFont,resolveFont,resolveFontWeight,updateHandAnimation});
@@ -1,4 +1,4 @@
1
- import{b as dt}from"../chunk-UHIM3PV6.mjs";import*as O from"three";var Oe=(i=>(i[i.PHONE_TALL=0]="PHONE_TALL",i[i.TABLET=1]="TABLET",i[i.LANDSCAPE=2]="LANDSCAPE",i))(Oe||{});function vt(e,t){let n=e/t;return n<=.62?0:n<=.85?1:2}var nt=class{constructor(t,n){this.root=t,this.stage=n,this.uiFrame=document.createElement("div"),this.uiFrame.style.position="absolute",this.uiFrame.style.top="0",this.uiFrame.style.bottom="0",this.uiFrame.style.left="50%",this.uiFrame.style.transform="translateX(-50%)",this.uiFrame.style.width="100%",this.uiFrame.style.maxWidth="420px",this.uiFrame.style.pointerEvents="none",this.stage.appendChild(this.uiFrame),this.uiContainer=document.createElement("div"),this.uiContainer.setAttribute("style",["position:absolute","inset:0","display:flex","flex-direction:column","justify-content:flex-start","gap:12px","pointer-events:none","padding:20px 16px","padding-bottom:clamp(24px, 6vh, 96px)","box-sizing:border-box","z-index:2"].join(";")),this.uiFrame.appendChild(this.uiContainer),this.updateLayout()}getUIFrame(){return this.uiFrame}getUIContainer(){return this.uiContainer}updateLayout(){let t=this.stage.getBoundingClientRect(),n=vt(t.width,t.height);n===0?this.uiFrame.style.maxWidth="420px":n===1?this.uiFrame.style.maxWidth="520px":this.uiFrame.style.maxWidth="640px"}getAspectClass(){let t=this.stage.getBoundingClientRect();return vt(t.width,t.height)}};async function qn(e,t={}){let n=()=>{let c=e.getBoundingClientRect(),d=Math.floor(c.width),g=Math.floor(c.height);return(d<=0||!isFinite(d)||d!==d)&&(d=e.clientWidth||window.innerWidth||320),(g<=0||!isFinite(g)||g!==g)&&(g=e.clientHeight||window.innerHeight||480),(d<=0||!isFinite(d)||d!==d)&&(d=320),(g<=0||!isFinite(g)||g!==g)&&(g=480),console.log("[THREE-BASE] getSize result:",{width:d,height:g,boundingRect:{width:c.width,height:c.height},clientSize:{width:e.clientWidth,height:e.clientHeight},styleWidth:e.style.width,styleHeight:e.style.height,note:"Using boundingRect as primary source (actual rendered size)"}),{width:d,height:g}},i=e.style.width&&!e.style.width.includes("%"),a=e.style.height&&!e.style.height.includes("%");e.style.position||(e.style.position="relative"),e.style.display||(e.style.display="block"),e.style.width=e.style.width||"100%",e.style.height=e.style.height||"100%",e.style.minWidth="100%",e.style.minHeight="100%",e.style.maxWidth="100%",e.style.maxHeight="100%",e.style.boxSizing="border-box",e.style.overflow="hidden",e.style.margin="0",e.style.padding="0",e.style.border="none";let o=t.background||"linear-gradient(160deg, #0d1020, #0f1c2f)";e.style.setProperty("background",o,"important"),e.style.setProperty("background-size","cover","important"),e.style.setProperty("background-position","center","important"),e.style.setProperty("background-repeat","no-repeat","important");let r=document.createElement("div");r.style.cssText=`
1
+ import{b as dt}from"../chunk-RAJK6QAT.mjs";import*as O from"three";var Oe=(i=>(i[i.PHONE_TALL=0]="PHONE_TALL",i[i.TABLET=1]="TABLET",i[i.LANDSCAPE=2]="LANDSCAPE",i))(Oe||{});function Rt(e,t){let n=e/t;return n<=.62?0:n<=.85?1:2}var nt=class{constructor(t,n){this.root=t,this.stage=n,this.uiFrame=document.createElement("div"),this.uiFrame.style.position="absolute",this.uiFrame.style.top="0",this.uiFrame.style.bottom="0",this.uiFrame.style.left="50%",this.uiFrame.style.transform="translateX(-50%)",this.uiFrame.style.width="100%",this.uiFrame.style.maxWidth="420px",this.uiFrame.style.pointerEvents="none",this.stage.appendChild(this.uiFrame),this.uiContainer=document.createElement("div"),this.uiContainer.setAttribute("style",["position:absolute","inset:0","display:flex","flex-direction:column","justify-content:flex-start","gap:12px","pointer-events:none","padding:20px 16px","padding-bottom:clamp(24px, 6vh, 96px)","box-sizing:border-box","z-index:2"].join(";")),this.uiFrame.appendChild(this.uiContainer),this.updateLayout()}getUIFrame(){return this.uiFrame}getUIContainer(){return this.uiContainer}updateLayout(){let t=this.stage.getBoundingClientRect(),n=Rt(t.width,t.height);n===0?this.uiFrame.style.maxWidth="420px":n===1?this.uiFrame.style.maxWidth="520px":this.uiFrame.style.maxWidth="640px"}getAspectClass(){let t=this.stage.getBoundingClientRect();return Rt(t.width,t.height)}};async function Xn(e,t={}){let n=()=>{let c=e.getBoundingClientRect(),d=Math.floor(c.width),g=Math.floor(c.height);return(d<=0||!isFinite(d)||d!==d)&&(d=e.clientWidth||window.innerWidth||320),(g<=0||!isFinite(g)||g!==g)&&(g=e.clientHeight||window.innerHeight||480),(d<=0||!isFinite(d)||d!==d)&&(d=320),(g<=0||!isFinite(g)||g!==g)&&(g=480),console.log("[THREE-BASE] getSize result:",{width:d,height:g,boundingRect:{width:c.width,height:c.height},clientSize:{width:e.clientWidth,height:e.clientHeight},styleWidth:e.style.width,styleHeight:e.style.height,note:"Using boundingRect as primary source (actual rendered size)"}),{width:d,height:g}},i=e.style.width&&!e.style.width.includes("%"),a=e.style.height&&!e.style.height.includes("%");e.style.position||(e.style.position="relative"),e.style.display||(e.style.display="block"),e.style.width=e.style.width||"100%",e.style.height=e.style.height||"100%",e.style.minWidth="100%",e.style.minHeight="100%",e.style.maxWidth="100%",e.style.maxHeight="100%",e.style.boxSizing="border-box",e.style.overflow="hidden",e.style.margin="0",e.style.padding="0",e.style.border="none";let o=t.background||"linear-gradient(160deg, #0d1020, #0f1c2f)";e.style.setProperty("background",o,"important"),e.style.setProperty("background-size","cover","important"),e.style.setProperty("background-position","center","important"),e.style.setProperty("background-repeat","no-repeat","important");let r=document.createElement("div");r.style.cssText=`
2
2
  position: absolute !important;
3
3
  inset: 0 !important;
4
4
  width: 100% !important;
@@ -21,7 +21,7 @@ import{b as dt}from"../chunk-UHIM3PV6.mjs";import*as O from"three";var Oe=(i=>(i
21
21
  overflow: hidden !important;
22
22
  `,e.appendChild(r);let p=document.createElement("div");p.setAttribute("style",["position:absolute","inset:0","width:100%","height:100%","min-width:100%","min-height:100%","max-width:100%","max-height:100%","pointer-events:auto","box-sizing:border-box","margin:0","padding:0","overflow:hidden"].join(";")),r.appendChild(p);let l=new O.Scene,{width:y,height:h}=n(),u=new O.PerspectiveCamera(55,y/h,.1,100);u.position.set(0,0,3.2),u.lookAt(0,0,0),u.updateMatrixWorld();let s=new O.WebGLRenderer({antialias:!0,alpha:!0,preserveDrawingBuffer:!0});s.setPixelRatio(window.devicePixelRatio||1),s.setSize(y,h),s.setClearColor(0,0),s.domElement.style.position="absolute",s.domElement.style.top="0",s.domElement.style.left="0",s.domElement.style.right="0",s.domElement.style.bottom="0",s.domElement.style.width="100%",s.domElement.style.height="100%",s.domElement.style.minWidth="100%",s.domElement.style.minHeight="100%",s.domElement.style.maxWidth="100%",s.domElement.style.maxHeight="100%",s.domElement.style.display="block",s.domElement.style.pointerEvents="auto",s.domElement.style.margin="0",s.domElement.style.padding="0",s.domElement.style.boxSizing="border-box",p.appendChild(s.domElement);let m=c=>{var C;let d=e.getBoundingClientRect(),g=window.getComputedStyle(e);console.log("[THREE-BASE] applySize called:",{providedSize:c,rootRect:{width:d.width,height:d.height},clientSize:{width:e.clientWidth,height:e.clientHeight},styleSize:{width:e.style.width,height:e.style.height},computedStyle:{width:g.width,height:g.height,transform:g.transform,scale:g.scale},rendererCurrentSize:{width:s.domElement.width,height:s.domElement.height},rendererStyleSize:{width:s.domElement.style.width,height:s.domElement.style.height},stackTrace:(C=new Error().stack)==null?void 0:C.split(`
23
23
  `).slice(1,4).join(`
24
- `)});let b=d.width,f=d.height;if((b<=0||!isFinite(b))&&(console.warn("[THREE-BASE] Invalid boundingRect.width, using clientWidth fallback",{boundingRectWidth:d.width,clientWidth:e.clientWidth}),b=e.clientWidth||window.innerWidth||320),(f<=0||!isFinite(f))&&(console.warn("[THREE-BASE] Invalid boundingRect.height, using clientHeight fallback",{boundingRectHeight:d.height,clientHeight:e.clientHeight}),f=e.clientHeight||window.innerHeight||480),typeof(c==null?void 0:c.width)=="number"&&c.width>0){let M=Math.abs(c.width-d.width),w=d.width*.1;M>w?console.warn("[THREE-BASE] Provided width ignored (too different from container):",{provided:c.width,container:d.width,difference:M,tolerance:w,willUse:"container size (boundingRect)"}):(b=c.width,console.log("[THREE-BASE] Using provided width (within tolerance):",{provided:c.width,container:d.width}))}if(typeof(c==null?void 0:c.height)=="number"&&c.height>0){let M=Math.abs(c.height-d.height),w=d.height*.1;M>w?console.warn("[THREE-BASE] Provided height ignored (too different from container):",{provided:c.height,container:d.height,difference:M,tolerance:w,willUse:"container size (boundingRect)"}):(f=c.height,console.log("[THREE-BASE] Using provided height (within tolerance):",{provided:c.height,container:d.height}))}(b<=0||f<=0||!isFinite(b)||!isFinite(f))&&(console.warn("[THREE-BASE] Invalid size in applySize, using fallback",{newWidth:b,newHeight:f,size:c,rootRect:d}),b=d.width||e.clientWidth||320,f=d.height||e.clientHeight||480);let x=Math.floor(b),_=Math.floor(f);console.log("[THREE-BASE] applySize setting renderer size:",{finalWidth:x,finalHeight:_,aspectRatio:x/_,beforeRendererSize:{width:s.domElement.width,height:s.domElement.height},beforeRendererStyle:{width:s.domElement.style.width,height:s.domElement.style.height}}),s.setSize(x,_),s.setPixelRatio(window.devicePixelRatio||1),u.aspect=x/_,u.updateProjectionMatrix();let S=e.getBoundingClientRect();console.log("[THREE-BASE] applySize after setting:",{rendererSize:{width:s.domElement.width,height:s.domElement.height},rendererStyle:{width:s.domElement.style.width,height:s.domElement.style.height},containerRect:{width:S.width,height:S.height},cameraAspect:u.aspect,matches:{width:Math.abs(s.domElement.width-S.width)<1,height:Math.abs(s.domElement.height-S.height)<1},sizeDifference:{width:s.domElement.width-S.width,height:s.domElement.height-S.height}})};requestAnimationFrame(()=>{requestAnimationFrame(()=>{m()})});let E=!1;dt.on("pause",()=>{E=!0,document.querySelectorAll("audio").forEach(d=>d.pause())}),dt.on("resume",()=>{E=!1,document.querySelectorAll("audio").forEach(d=>{d.currentTime>0&&!d.ended&&d.play().catch(()=>{})})});let T=new nt(e,r);return dt.on("resize",({payload:c})=>{console.log("[THREE-BASE] Handler resize event received:",{payload:c,timestamp:Date.now(),rootRect:e.getBoundingClientRect()}),m({width:c==null?void 0:c.width,height:c==null?void 0:c.height}),T.updateLayout()}),window.addEventListener("resize",()=>{console.log("[THREE-BASE] Window resize event received:",{timestamp:Date.now(),windowSize:{width:window.innerWidth,height:window.innerHeight},rootRect:e.getBoundingClientRect()}),m(),T.updateLayout()}),{scene:l,camera:u,renderer:s,uiSystem:T,applySize:m}}import*as v from"three";var ht=class{constructor(t){var n,i;this.position=(t==null?void 0:t.position)||{x:0,y:0},this.scale=(n=t==null?void 0:t.scale)!=null?n:1,this.rotation=(i=t==null?void 0:t.rotation)!=null?i:0}update(t){t.position!==void 0&&(this.position={...t.position}),t.scale!==void 0&&(this.scale=t.scale),t.rotation!==void 0&&(this.rotation=t.rotation)}syncToThree(t){let n=t.position.z,i=n===0||!isFinite(n)?.5:n;t.position.set(this.position.x,this.position.y,i),t.scale.set(this.scale,this.scale,this.scale),t.rotation.z=this.rotation}},pt=class{constructor(t){var n,i,a,o;this.z_index=(n=t==null?void 0:t.z_index)!=null?n:0,this.alpha=(i=t==null?void 0:t.alpha)!=null?i:1,this.visible=(a=t==null?void 0:t.visible)!=null?a:!0,this.tint=(o=t==null?void 0:t.tint)!=null?o:null}update(t){t.z_index!==void 0&&(this.z_index=t.z_index),t.alpha!==void 0&&(this.alpha=t.alpha),t.visible!==void 0&&(this.visible=t.visible),t.tint!==void 0&&(this.tint=t.tint)}syncToThree(t){if(t.renderOrder=this.z_index,t.visible=this.visible,t instanceof v.Mesh&&t.material&&(Array.isArray(t.material)?t.material.forEach(n=>{n instanceof v.Material&&(n.opacity=this.alpha,n.transparent=this.alpha<1)}):t.material instanceof v.Material&&(t.material.opacity=this.alpha,t.material.transparent=this.alpha<1)),this.tint!==null&&t instanceof v.Mesh&&t.material){let n=typeof this.tint=="string"?new v.Color(this.tint):new v.Color(this.tint);Array.isArray(t.material)?t.material.forEach(i=>{(i instanceof v.MeshBasicMaterial||i instanceof v.MeshStandardMaterial)&&i.color.copy(n)}):(t.material instanceof v.MeshBasicMaterial||t.material instanceof v.MeshStandardMaterial)&&t.material.color.copy(n)}}},mt=class{constructor(t,n,i,a){this.instanceId=t,this.objectConfig=n,this.threeObject=i,this._config=a,this.transform=new ht(a.transform),this.renderer=new pt(a.render),this.sync()}sync(){this.transform.syncToThree(this.threeObject),this.renderer.syncToThree(this.threeObject)}updateConfig(t){this._config=t,t.transform&&this.transform.update(t.transform),t.render&&this.renderer.update(t.render),this.sync()}getComponent(t){return this._config[t]}getPosition(){return{...this.transform.position}}setPosition(t,n){this.transform.position={x:t,y:n},this.transform.syncToThree(this.threeObject)}getAlpha(){return this.renderer.alpha}setAlpha(t){this.renderer.alpha=t,this.renderer.syncToThree(this.threeObject)}getVisible(){return this.renderer.visible}setVisible(t){this.renderer.visible=t,this.renderer.syncToThree(this.threeObject)}},Ct=class{constructor(t){this.objects=new Map;this.config=t}create(t,n){let i=this.config.objects.get(t);if(!i)throw new Error(`Object config not found: ${t}`);let a=new mt(t,i.object_config||t,n,i);return this.objects.set(t,a),a}get(t){return this.objects.get(t)}updateConfig(t){this.config=t;for(let[n,i]of this.objects.entries()){let a=t.objects.get(n);a&&i.updateConfig(a)}}getAll(){return Array.from(this.objects.values())}remove(t){this.objects.delete(t)}clear(){this.objects.clear()}};var ut={"brand.primary":{family:"Arial, sans-serif",weight:"400"},"brand.warning":{family:"Arial Black, Arial, sans-serif",weight:"900"},"brand.heading":{family:"Arial Black, Arial, sans-serif",weight:"800"},"brand.body":{family:"Arial, sans-serif",weight:"400"}};function G(e){let t=ut[e];return t?t.family:(console.warn(`Font ID "${e}" not found in registry, using fallback`),"Arial, sans-serif")}function X(e){var n;let t=ut[e];return t&&(n=t.weight)!=null?n:"400"}function Vn(e,t){ut[e]=t}function Zn(){return Object.keys(ut)}import*as U from"three";function Q(e){return{element:e,get alpha(){return parseFloat(e.style.opacity||"1")},set alpha(t){e.style.opacity=t.toString()},get visible(){return e.style.display!=="none"},set visible(t){e.style.display=t?"":"none"},position:{set(t,n){e.style.left=`${t}px`,e.style.top=`${n}px`},get x(){return parseFloat(e.style.left||"0")},get y(){return parseFloat(e.style.top||"0")}},scale:{set(t,n){e.style.transform=`scale(${t})`},get x(){let t=e.style.transform.match(/scale\(([^)]+)\)/);return t?parseFloat(t[1]):1}}}}function Jn(e,t,n,i){var Xt,qt,Vt,Zt,Jt,Kt,Qt,jt,It,Ot,Ut,te,ee,ne,ae,ie,se,oe,re,le,ce,de,he,pe,me,ue,ye,ge,fe,Ee,be,Te,xe,we,_e,Se,He,Re,ve,Ce,Me,Ae,Fe,$e,Le,We,Be,ke,ze,De,Pe,Ye,Ne,Ge,Xe,qe,Ve,Ze,Je,Ke,Qe,je,Ie;let a=e.objects.get("ui_endgame_1"),o=e.objects.get("ui_endgame_logo_1"),r=e.objects.get("ui_endgame_title_1"),p=e.objects.get("ui_endgame_subtitle_1"),l=e.objects.get("ui_endgame_footer_1"),y=e.objects.get("ui_endgame_cta_1"),h=e.objects.get("ui_endgame_cta_hint_1"),u=e.objects.get("ui_endgame_hand_1"),s=e.engine.runtime||{},m=((Xt=a==null?void 0:a.gameplay)==null?void 0:Xt.tuning)||{},E=(a==null?void 0:a.render)||{},T=i.getBoundingClientRect(),c=T.width>0?T.width*.9:320,d=T.height>0?T.height*.85:400,g=Math.min((qt=m.panel_width)!=null?qt:320,c),b=Math.min((Vt=m.panel_height)!=null?Vt:400,d),f=(Zt=m.panel_padding)!=null?Zt:32,x=(Jt=m.panel_radius)!=null?Jt:24,_=E.background_color||m.panel_bg_color||"#1a0a0a",S=E.background_alpha!==void 0&&E.background_alpha!==null?E.background_alpha:(Kt=m.panel_bg_alpha)!=null?Kt:.98,C=E.border_color||m.panel_border_color||"#ffffff",M=(Qt=m.panel_border_width)!=null?Qt:2,w=(jt=m.panel_border_alpha)!=null?jt:.3,H=document.createElement("div");H.style.cssText=`
24
+ `)});let b=d.width,f=d.height;if((b<=0||!isFinite(b))&&(console.warn("[THREE-BASE] Invalid boundingRect.width, using clientWidth fallback",{boundingRectWidth:d.width,clientWidth:e.clientWidth}),b=e.clientWidth||window.innerWidth||320),(f<=0||!isFinite(f))&&(console.warn("[THREE-BASE] Invalid boundingRect.height, using clientHeight fallback",{boundingRectHeight:d.height,clientHeight:e.clientHeight}),f=e.clientHeight||window.innerHeight||480),typeof(c==null?void 0:c.width)=="number"&&c.width>0){let M=Math.abs(c.width-d.width),w=d.width*.1;M>w?console.warn("[THREE-BASE] Provided width ignored (too different from container):",{provided:c.width,container:d.width,difference:M,tolerance:w,willUse:"container size (boundingRect)"}):(b=c.width,console.log("[THREE-BASE] Using provided width (within tolerance):",{provided:c.width,container:d.width}))}if(typeof(c==null?void 0:c.height)=="number"&&c.height>0){let M=Math.abs(c.height-d.height),w=d.height*.1;M>w?console.warn("[THREE-BASE] Provided height ignored (too different from container):",{provided:c.height,container:d.height,difference:M,tolerance:w,willUse:"container size (boundingRect)"}):(f=c.height,console.log("[THREE-BASE] Using provided height (within tolerance):",{provided:c.height,container:d.height}))}(b<=0||f<=0||!isFinite(b)||!isFinite(f))&&(console.warn("[THREE-BASE] Invalid size in applySize, using fallback",{newWidth:b,newHeight:f,size:c,rootRect:d}),b=d.width||e.clientWidth||320,f=d.height||e.clientHeight||480);let x=Math.floor(b),_=Math.floor(f);console.log("[THREE-BASE] applySize setting renderer size:",{finalWidth:x,finalHeight:_,aspectRatio:x/_,beforeRendererSize:{width:s.domElement.width,height:s.domElement.height},beforeRendererStyle:{width:s.domElement.style.width,height:s.domElement.style.height}}),s.setSize(x,_),s.setPixelRatio(window.devicePixelRatio||1),u.aspect=x/_,u.updateProjectionMatrix();let S=e.getBoundingClientRect();console.log("[THREE-BASE] applySize after setting:",{rendererSize:{width:s.domElement.width,height:s.domElement.height},rendererStyle:{width:s.domElement.style.width,height:s.domElement.style.height},containerRect:{width:S.width,height:S.height},cameraAspect:u.aspect,matches:{width:Math.abs(s.domElement.width-S.width)<1,height:Math.abs(s.domElement.height-S.height)<1},sizeDifference:{width:s.domElement.width-S.width,height:s.domElement.height-S.height}})};requestAnimationFrame(()=>{requestAnimationFrame(()=>{m()})});let E=!1;dt.on("pause",()=>{E=!0,document.querySelectorAll("audio").forEach(d=>d.pause())}),dt.on("resume",()=>{E=!1,document.querySelectorAll("audio").forEach(d=>{d.currentTime>0&&!d.ended&&d.play().catch(()=>{})})});let T=new nt(e,r);return dt.on("resize",({payload:c})=>{console.log("[THREE-BASE] Handler resize event received:",{payload:c,timestamp:Date.now(),rootRect:e.getBoundingClientRect()}),m({width:c==null?void 0:c.width,height:c==null?void 0:c.height}),T.updateLayout()}),window.addEventListener("resize",()=>{console.log("[THREE-BASE] Window resize event received:",{timestamp:Date.now(),windowSize:{width:window.innerWidth,height:window.innerHeight},rootRect:e.getBoundingClientRect()}),m(),T.updateLayout()}),{scene:l,camera:u,renderer:s,uiSystem:T,applySize:m}}import*as v from"three";var ht=class{constructor(t){var n,i;this.position=(t==null?void 0:t.position)||{x:0,y:0},this.scale=(n=t==null?void 0:t.scale)!=null?n:1,this.rotation=(i=t==null?void 0:t.rotation)!=null?i:0}update(t){t.position!==void 0&&(this.position={...t.position}),t.scale!==void 0&&(this.scale=t.scale),t.rotation!==void 0&&(this.rotation=t.rotation)}syncToThree(t){let n=t.position.z,i=n===0||!isFinite(n)?.5:n;t.position.set(this.position.x,this.position.y,i),t.scale.set(this.scale,this.scale,this.scale),t.rotation.z=this.rotation}},pt=class{constructor(t){var n,i,a,o;this.z_index=(n=t==null?void 0:t.z_index)!=null?n:0,this.alpha=(i=t==null?void 0:t.alpha)!=null?i:1,this.visible=(a=t==null?void 0:t.visible)!=null?a:!0,this.tint=(o=t==null?void 0:t.tint)!=null?o:null}update(t){t.z_index!==void 0&&(this.z_index=t.z_index),t.alpha!==void 0&&(this.alpha=t.alpha),t.visible!==void 0&&(this.visible=t.visible),t.tint!==void 0&&(this.tint=t.tint)}syncToThree(t){if(t.renderOrder=this.z_index,t.visible=this.visible,t instanceof v.Mesh&&t.material&&(Array.isArray(t.material)?t.material.forEach(n=>{n instanceof v.Material&&(n.opacity=this.alpha,n.transparent=this.alpha<1)}):t.material instanceof v.Material&&(t.material.opacity=this.alpha,t.material.transparent=this.alpha<1)),this.tint!==null&&t instanceof v.Mesh&&t.material){let n=typeof this.tint=="string"?new v.Color(this.tint):new v.Color(this.tint);Array.isArray(t.material)?t.material.forEach(i=>{(i instanceof v.MeshBasicMaterial||i instanceof v.MeshStandardMaterial)&&i.color.copy(n)}):(t.material instanceof v.MeshBasicMaterial||t.material instanceof v.MeshStandardMaterial)&&t.material.color.copy(n)}}},mt=class{constructor(t,n,i,a){this.instanceId=t,this.objectConfig=n,this.threeObject=i,this._config=a,this.transform=new ht(a.transform),this.renderer=new pt(a.render),this.sync()}sync(){this.transform.syncToThree(this.threeObject),this.renderer.syncToThree(this.threeObject)}updateConfig(t){this._config=t,t.transform&&this.transform.update(t.transform),t.render&&this.renderer.update(t.render),this.sync()}getComponent(t){return this._config[t]}getPosition(){return{...this.transform.position}}setPosition(t,n){this.transform.position={x:t,y:n},this.transform.syncToThree(this.threeObject)}getAlpha(){return this.renderer.alpha}setAlpha(t){this.renderer.alpha=t,this.renderer.syncToThree(this.threeObject)}getVisible(){return this.renderer.visible}setVisible(t){this.renderer.visible=t,this.renderer.syncToThree(this.threeObject)}},vt=class{constructor(t){this.objects=new Map;this.config=t}create(t,n){let i=this.config.objects.get(t);if(!i)throw new Error(`Object config not found: ${t}`);let a=new mt(t,i.object_config||t,n,i);return this.objects.set(t,a),a}get(t){return this.objects.get(t)}updateConfig(t){this.config=t;for(let[n,i]of this.objects.entries()){let a=t.objects.get(n);a&&i.updateConfig(a)}}getAll(){return Array.from(this.objects.values())}remove(t){this.objects.delete(t)}clear(){this.objects.clear()}};var ut={"brand.primary":{family:"Arial, sans-serif",weight:"400"},"brand.warning":{family:"Arial Black, Arial, sans-serif",weight:"900"},"brand.heading":{family:"Arial Black, Arial, sans-serif",weight:"800"},"brand.body":{family:"Arial, sans-serif",weight:"400"}};function G(e){let t=ut[e];return t?t.family:(console.warn(`Font ID "${e}" not found in registry, using fallback`),"Arial, sans-serif")}function X(e){var n;let t=ut[e];return t&&(n=t.weight)!=null?n:"400"}function qn(e,t){ut[e]=t}function Vn(){return Object.keys(ut)}import*as U from"three";function Q(e){return{element:e,get alpha(){return parseFloat(e.style.opacity||"1")},set alpha(t){e.style.opacity=t.toString()},get visible(){return e.style.display!=="none"},set visible(t){e.style.display=t?"":"none"},position:{set(t,n){e.style.left=`${t}px`,e.style.top=`${n}px`},get x(){return parseFloat(e.style.left||"0")},get y(){return parseFloat(e.style.top||"0")}},scale:{set(t,n){e.style.transform=`scale(${t})`},get x(){let t=e.style.transform.match(/scale\(([^)]+)\)/);return t?parseFloat(t[1]):1}}}}function Zn(e,t,n,i){var Xt,qt,Vt,Zt,Jt,Kt,Qt,jt,It,Ot,Ut,te,ee,ne,ae,ie,se,oe,re,le,ce,de,he,pe,me,ue,ye,ge,fe,Ee,be,Te,xe,we,_e,Se,He,Re,ve,Ce,Me,Ae,Fe,$e,Le,We,Be,ke,ze,De,Pe,Ye,Ne,Ge,Xe,qe,Ve,Ze,Je,Ke,Qe,je,Ie;let a=e.objects.get("ui_endgame_1"),o=e.objects.get("ui_endgame_logo_1"),r=e.objects.get("ui_endgame_title_1"),p=e.objects.get("ui_endgame_subtitle_1"),l=e.objects.get("ui_endgame_footer_1"),y=e.objects.get("ui_endgame_cta_1"),h=e.objects.get("ui_endgame_cta_hint_1"),u=e.objects.get("ui_endgame_hand_1"),s=e.engine.runtime||{},m=((Xt=a==null?void 0:a.gameplay)==null?void 0:Xt.tuning)||{},E=(a==null?void 0:a.render)||{},T=i.getBoundingClientRect(),c=T.width>0?T.width*.9:320,d=T.height>0?T.height*.85:400,g=Math.min((qt=m.panel_width)!=null?qt:320,c),b=Math.min((Vt=m.panel_height)!=null?Vt:400,d),f=(Zt=m.panel_padding)!=null?Zt:32,x=(Jt=m.panel_radius)!=null?Jt:24,_=E.background_color||m.panel_bg_color||"#1a0a0a",S=E.background_alpha!==void 0&&E.background_alpha!==null?E.background_alpha:(Kt=m.panel_bg_alpha)!=null?Kt:.98,C=E.border_color||m.panel_border_color||"#ffffff",M=(Qt=m.panel_border_width)!=null?Qt:2,w=(jt=m.panel_border_alpha)!=null?jt:.3,H=document.createElement("div");H.style.cssText=`
25
25
  position: absolute;
26
26
  width: ${g}px;
27
27
  height: ${b}px;
@@ -40,8 +40,8 @@ import{b as dt}from"../chunk-UHIM3PV6.mjs";import*as O from"three";var Oe=(i=>(i
40
40
  z-index: 1000;
41
41
  box-sizing: border-box;
42
42
  padding: ${f}px;
43
- `,i.appendChild(H);let D=Q(H);D.element=H;let B=((It=o==null?void 0:o.gameplay)==null?void 0:It.tuning)||{},q=(o==null?void 0:o.transform)||{},W=(Ot=B.logo_size)!=null?Ot:56,k=(Ut=q.scale)!=null?Ut:1,j=(ee=(te=q.offset)==null?void 0:te.y)!=null?ee:-130,at=(ne=B.logo_alpha)!=null?ne:1,en=new U.SpriteMaterial({map:n||void 0,transparent:!0,alphaTest:.1}),z=new U.Sprite(en);z.position.set(0,j,0),z.material.opacity=0;let it=0,st=0;if(n&&(it=((ae=n.image)==null?void 0:ae.width)||100,st=((ie=n.image)==null?void 0:ie.height)||100),it>0&&st>0){let I=it/st,Ht,Rt;I>1?(Ht=W,Rt=W/I):(Rt=W,Ht=W*I);let Gn=Ht/it*k,Xn=Rt/st*k;z.scale.set(Gn,Xn,1)}else{let I=W/100*k;z.scale.set(I,I,1)}z.targetAlpha=at,z.baseScaleX=z.scale.x,z.baseScaleY=z.scale.y;let A=r==null?void 0:r.ui,P=((se=r==null?void 0:r.gameplay)==null?void 0:se.tuning)||{},nn=(A==null?void 0:A.text)||"MISSION ACCOMPLISHED",Mt=(A==null?void 0:A.font)||"brand.heading",gt=(A==null?void 0:A.fontSize)||24,an=(oe=A==null?void 0:A.letterSpacing)!=null?oe:1,ot=(re=r==null?void 0:r.render)==null?void 0:re.tint,sn=typeof ot=="string"?ot:ot?`#${ot.toString(16).padStart(6,"0")}`:"#00FF88",on=g-f*2-30,rn=P.font_weight_override?P.font_weight_override:X(Mt),V=document.createElement("div");V.textContent=nn,V.style.cssText=`
44
- font-family: ${G(Mt)};
43
+ `,i.appendChild(H);let D=Q(H);D.element=H;let B=((It=o==null?void 0:o.gameplay)==null?void 0:It.tuning)||{},q=(o==null?void 0:o.transform)||{},W=(Ot=B.logo_size)!=null?Ot:56,k=(Ut=q.scale)!=null?Ut:1,j=(ee=(te=q.offset)==null?void 0:te.y)!=null?ee:-130,at=(ne=B.logo_alpha)!=null?ne:1,en=new U.SpriteMaterial({map:n||void 0,transparent:!0,alphaTest:.1}),z=new U.Sprite(en);z.position.set(0,j,0),z.material.opacity=0;let it=0,st=0;if(n&&(it=((ae=n.image)==null?void 0:ae.width)||100,st=((ie=n.image)==null?void 0:ie.height)||100),it>0&&st>0){let I=it/st,St,Ht;I>1?(St=W,Ht=W/I):(Ht=W,St=W*I);let Nn=St/it*k,Gn=Ht/st*k;z.scale.set(Nn,Gn,1)}else{let I=W/100*k;z.scale.set(I,I,1)}z.targetAlpha=at,z.baseScaleX=z.scale.x,z.baseScaleY=z.scale.y;let A=r==null?void 0:r.ui,P=((se=r==null?void 0:r.gameplay)==null?void 0:se.tuning)||{},nn=(A==null?void 0:A.text)||"MISSION ACCOMPLISHED",Ct=(A==null?void 0:A.font)||"brand.heading",gt=(A==null?void 0:A.fontSize)||24,an=(oe=A==null?void 0:A.letterSpacing)!=null?oe:1,ot=(re=r==null?void 0:r.render)==null?void 0:re.tint,sn=typeof ot=="string"?ot:ot?`#${ot.toString(16).padStart(6,"0")}`:"#00FF88",on=g-f*2-30,rn=P.font_weight_override?P.font_weight_override:X(Ct),V=document.createElement("div");V.textContent=nn,V.style.cssText=`
44
+ font-family: ${G(Ct)};
45
45
  font-size: ${gt}px;
46
46
  font-weight: ${rn};
47
47
  color: ${sn};
@@ -54,10 +54,10 @@ import{b as dt}from"../chunk-UHIM3PV6.mjs";import*as O from"three";var Oe=(i=>(i
54
54
  transform: translate(-50%, -50%);
55
55
  white-space: nowrap;
56
56
  max-width: ${on}px;
57
- `;let At=f+30,ln=((me=m.title_offset_y)!=null?me:At+gt/2)+((ue=P.animation_start_y_offset)!=null?ue:-20);V.style.top=`${ln}px`,V.style.left="50%";let Ft=Q(V);Ft.element=V,H.appendChild(V);let F=p==null?void 0:p.ui,$t=((ye=p==null?void 0:p.gameplay)==null?void 0:ye.tuning)||{},cn=(F==null?void 0:F.text)||"RESCUE COMPLETE",Lt=(F==null?void 0:F.font)||"brand.body",ft=(F==null?void 0:F.fontSize)||11,dn=(ge=F==null?void 0:F.letterSpacing)!=null?ge:.5,rt=(fe=p==null?void 0:p.render)==null?void 0:fe.tint,hn=typeof rt=="string"?rt:rt?`#${rt.toString(16).padStart(6,"0")}`:"#B0B0B0",Z=document.createElement("div");Z.textContent=cn,Z.style.cssText=`
58
- font-family: ${G(Lt)};
57
+ `;let Mt=f+30,ln=((me=m.title_offset_y)!=null?me:Mt+gt/2)+((ue=P.animation_start_y_offset)!=null?ue:-20);V.style.top=`${ln}px`,V.style.left="50%";let At=Q(V);At.element=V,H.appendChild(V);let F=p==null?void 0:p.ui,Ft=((ye=p==null?void 0:p.gameplay)==null?void 0:ye.tuning)||{},cn=(F==null?void 0:F.text)||"RESCUE COMPLETE",$t=(F==null?void 0:F.font)||"brand.body",ft=(F==null?void 0:F.fontSize)||11,dn=(ge=F==null?void 0:F.letterSpacing)!=null?ge:.5,rt=(fe=p==null?void 0:p.render)==null?void 0:fe.tint,hn=typeof rt=="string"?rt:rt?`#${rt.toString(16).padStart(6,"0")}`:"#B0B0B0",Z=document.createElement("div");Z.textContent=cn,Z.style.cssText=`
58
+ font-family: ${G($t)};
59
59
  font-size: ${ft}px;
60
- font-weight: ${X(Lt)};
60
+ font-weight: ${X($t)};
61
61
  color: ${hn};
62
62
  text-align: center;
63
63
  letter-spacing: ${dn}px;
@@ -65,10 +65,10 @@ import{b as dt}from"../chunk-UHIM3PV6.mjs";import*as O from"three";var Oe=(i=>(i
65
65
  position: absolute;
66
66
  transform: translate(-50%, -50%);
67
67
  white-space: nowrap;
68
- `;let Wt=At+gt+15,pn=((Ee=m.subtitle_offset_y)!=null?Ee:Wt+ft/2)+((be=$t.animation_start_y_offset)!=null?be:-10);Z.style.top=`${pn}px`,Z.style.left="50%";let Et=Q(Z);Et.element=Z,Et.animationStartYOffset=(Te=$t.animation_start_y_offset)!=null?Te:-10,H.appendChild(Z);let Y=l==null?void 0:l.ui,Bt=((xe=l==null?void 0:l.gameplay)==null?void 0:xe.tuning)||{},mn=(Y==null?void 0:Y.text)||((we=s.ui)==null?void 0:we.cta_hint)||"Continue the adventure!",kt=(Y==null?void 0:Y.font)||"brand.body",zt=(Y==null?void 0:Y.fontSize)||16,lt=(_e=l==null?void 0:l.render)==null?void 0:_e.tint,un=typeof lt=="string"?lt:lt?`#${lt.toString(16).padStart(6,"0")}`:"#FFFFFF",yn=(Se=Bt.max_width)!=null?Se:g-f*2,gn=(He=Bt.line_height)!=null?He:1.4,J=document.createElement("div");J.textContent=mn,J.style.cssText=`
69
- font-family: ${G(kt)};
70
- font-size: ${zt}px;
71
- font-weight: ${X(kt)};
68
+ `;let Lt=Mt+gt+15,pn=((Ee=m.subtitle_offset_y)!=null?Ee:Lt+ft/2)+((be=Ft.animation_start_y_offset)!=null?be:-10);Z.style.top=`${pn}px`,Z.style.left="50%";let Et=Q(Z);Et.element=Z,Et.animationStartYOffset=(Te=Ft.animation_start_y_offset)!=null?Te:-10,H.appendChild(Z);let Y=l==null?void 0:l.ui,Wt=((xe=l==null?void 0:l.gameplay)==null?void 0:xe.tuning)||{},mn=(Y==null?void 0:Y.text)||((we=s.ui)==null?void 0:we.cta_hint)||"Continue the adventure!",Bt=(Y==null?void 0:Y.font)||"brand.body",kt=(Y==null?void 0:Y.fontSize)||16,lt=(_e=l==null?void 0:l.render)==null?void 0:_e.tint,un=typeof lt=="string"?lt:lt?`#${lt.toString(16).padStart(6,"0")}`:"#FFFFFF",yn=(Se=Wt.max_width)!=null?Se:g-f*2,gn=(He=Wt.line_height)!=null?He:1.4,J=document.createElement("div");J.textContent=mn,J.style.cssText=`
69
+ font-family: ${G(Bt)};
70
+ font-size: ${kt}px;
71
+ font-weight: ${X(Bt)};
72
72
  color: ${un};
73
73
  text-align: center;
74
74
  opacity: 0;
@@ -77,9 +77,9 @@ import{b as dt}from"../chunk-UHIM3PV6.mjs";import*as O from"three";var Oe=(i=>(i
77
77
  max-width: ${yn}px;
78
78
  line-height: ${gn};
79
79
  word-wrap: break-word;
80
- `;let fn=Wt+ft+30,En=(Re=m.footer_offset_y)!=null?Re:fn+zt/2;J.style.top=`${En}px`,J.style.left="50%";let bt=Q(J);bt.element=J;let bn=((ve=l==null?void 0:l.render)==null?void 0:ve.alpha)!==void 0&&((Ce=l==null?void 0:l.render)==null?void 0:Ce.alpha)!==null?l.render.alpha:1;bt.targetAlpha=bn,H.appendChild(J);let N=((Me=y==null?void 0:y.gameplay)==null?void 0:Me.tuning)||{},$=y==null?void 0:y.ui,Tn=(Ae=N.button_width)!=null?Ae:260,Tt=(Fe=N.button_height)!=null?Fe:56,xn=($e=N.button_radius)!=null?$e:16,wn=N.button_bg_color||((Le=s.theme)==null?void 0:Le.cta_background)||"#ffb43b",_n=(We=N.button_bg_alpha)!=null?We:1,Sn=N.button_border_color||"#ffffff",Hn=(Be=N.button_border_width)!=null?Be:2,ca=(ke=N.button_border_alpha)!=null?ke:.2,Rn=b-f-20,xt=(ze=m.cta_offset_y)!=null?ze:Rn-Tt/2,R=document.createElement("button");R.style.cssText=`
80
+ `;let fn=Lt+ft+30,En=(Re=m.footer_offset_y)!=null?Re:fn+kt/2;J.style.top=`${En}px`,J.style.left="50%";let bt=Q(J);bt.element=J;let bn=((ve=l==null?void 0:l.render)==null?void 0:ve.alpha)!==void 0&&((Ce=l==null?void 0:l.render)==null?void 0:Ce.alpha)!==null?l.render.alpha:1;bt.targetAlpha=bn,H.appendChild(J);let N=((Me=y==null?void 0:y.gameplay)==null?void 0:Me.tuning)||{},$=y==null?void 0:y.ui,Tn=(Ae=N.button_width)!=null?Ae:260,zt=(Fe=N.button_height)!=null?Fe:56,xn=($e=N.button_radius)!=null?$e:16,wn=N.button_bg_color||((Le=s.theme)==null?void 0:Le.cta_background)||"#ffb43b",_n=(We=N.button_bg_alpha)!=null?We:1,Sn=N.button_border_color||"#ffffff",Hn=(Be=N.button_border_width)!=null?Be:2,la=(ke=N.button_border_alpha)!=null?ke:.2,Tt=(ze=m.cta_offset_y)!=null?ze:b*.7,R=document.createElement("button");R.style.cssText=`
81
81
  width: ${Tn}px;
82
- height: ${Tt}px;
82
+ height: ${zt}px;
83
83
  background: ${wn};
84
84
  opacity: ${_n};
85
85
  border: ${Hn}px solid ${Sn};
@@ -89,18 +89,18 @@ import{b as dt}from"../chunk-UHIM3PV6.mjs";import*as O from"three";var Oe=(i=>(i
89
89
  position: absolute;
90
90
  transform: translate(-50%, -50%);
91
91
  box-shadow: inset 0 0 1px rgba(0,0,0,0.15);
92
- `,R.style.top=`${xt}px`,R.style.left="50%";let wt=Q(R);wt.element=R,wt.addEventListener=R.addEventListener.bind(R),H.appendChild(R);let vn=($==null?void 0:$.text)||((De=s.ui)==null?void 0:De.cta_label_end)||"DOWNLOAD",Dt=($==null?void 0:$.font)||"brand.heading",Cn=($==null?void 0:$.fontSize)||20,Mn=N.button_text_color||((Pe=s.theme)==null?void 0:Pe.cta_text)||"#1a0a0a";R.textContent=vn,R.style.fontFamily=G(Dt),R.style.fontSize=`${Cn}px`,R.style.fontWeight=String(X(Dt)),R.style.color=Mn,R.style.letterSpacing=`${(Ye=$==null?void 0:$.letterSpacing)!=null?Ye:1}px`;let Pt=Q(R);Pt.element=R;let L=h==null?void 0:h.ui,Yt=((Ne=h==null?void 0:h.gameplay)==null?void 0:Ne.tuning)||{},An=(L==null?void 0:L.text)||"Play the full game",Nt=(L==null?void 0:L.font)||"brand.body",Fn=(L==null?void 0:L.fontSize)||11,$n=(Ge=L==null?void 0:L.letterSpacing)!=null?Ge:0,ct=(Xe=h==null?void 0:h.render)==null?void 0:Xe.tint,Ln=typeof ct=="string"?ct:ct?`#${ct.toString(16).padStart(6,"0")}`:"#CCCCCC",K=document.createElement("div");K.textContent=An,K.style.cssText=`
92
+ `,R.style.top=`${Tt}px`,R.style.left="50%";let xt=Q(R);xt.element=R,xt.addEventListener=R.addEventListener.bind(R),H.appendChild(R);let Rn=($==null?void 0:$.text)||((De=s.ui)==null?void 0:De.cta_label_end)||"DOWNLOAD",Dt=($==null?void 0:$.font)||"brand.heading",vn=($==null?void 0:$.fontSize)||20,Cn=N.button_text_color||((Pe=s.theme)==null?void 0:Pe.cta_text)||"#1a0a0a";R.textContent=Rn,R.style.fontFamily=G(Dt),R.style.fontSize=`${vn}px`,R.style.fontWeight=String(X(Dt)),R.style.color=Cn,R.style.letterSpacing=`${(Ye=$==null?void 0:$.letterSpacing)!=null?Ye:1}px`;let Pt=Q(R);Pt.element=R;let L=h==null?void 0:h.ui,Yt=((Ne=h==null?void 0:h.gameplay)==null?void 0:Ne.tuning)||{},Mn=(L==null?void 0:L.text)||"Play the full game",Nt=(L==null?void 0:L.font)||"brand.body",An=(L==null?void 0:L.fontSize)||11,Fn=(Ge=L==null?void 0:L.letterSpacing)!=null?Ge:0,ct=(Xe=h==null?void 0:h.render)==null?void 0:Xe.tint,$n=typeof ct=="string"?ct:ct?`#${ct.toString(16).padStart(6,"0")}`:"#CCCCCC",K=document.createElement("div");K.textContent=Mn,K.style.cssText=`
93
93
  font-family: ${G(Nt)};
94
- font-size: ${Fn}px;
94
+ font-size: ${An}px;
95
95
  font-weight: ${X(Nt)};
96
- color: ${Ln};
96
+ color: ${$n};
97
97
  text-align: center;
98
- letter-spacing: ${$n}px;
98
+ letter-spacing: ${Fn}px;
99
99
  opacity: 0;
100
100
  position: absolute;
101
101
  transform: translate(-50%, -50%);
102
102
  white-space: nowrap;
103
- `;let Wn=xt+Tt/2+20,Bn=b-f-10,kn=Math.min(Wn+((qe=Yt.animation_start_y_offset)!=null?qe:5),Bn);K.style.top=`${kn}px`,K.style.left="50%";let _t=Q(K);_t.element=K,_t.animationStartYOffset=(Ve=Yt.animation_start_y_offset)!=null?Ve:5,H.appendChild(K);let St=((Ze=u==null?void 0:u.gameplay)==null?void 0:Ze.tuning)||{},zn=(Je=St.hand_offset_x)!=null?Je:50,Dn=(Ke=St.hand_offset_y)!=null?Ke:50,Pn=(je=(Qe=u==null?void 0:u.transform)==null?void 0:Qe.scale)!=null?je:.1875,Yn=(Ie=St.hand_scale_multiplier)!=null?Ie:2.5,Nn=new U.SpriteMaterial({map:t||void 0,transparent:!0,alphaTest:.1}),et=new U.Sprite(Nn),Gt=Pn*Yn*100;return et.scale.set(Gt,Gt,1),et.position.set(zn,xt+Dn,0),et.material.opacity=0,et.visible=!1,{panel:D,logo:z,title:Ft,subtitle:Et,footer:bt,ctaButton:wt,ctaText:Pt,ctaHint:_t,hand:et}}function Kn(e,t,n){var _,S,C,M,w,H,D,B;let i=t.objects.get("ui_endgame_1"),a=((_=i==null?void 0:i.gameplay)==null?void 0:_.tuning)||{},o=(S=a.animation_duration_ms)!=null?S:800,r=(C=a.fade_in_duration_ms)!=null?C:600,p=(M=a.scale_animation_intensity)!=null?M:.1,l=(w=a.logo_animation_delay_ms)!=null?w:100,y=(H=a.title_animation_delay_ms)!=null?H:200,h=(D=a.footer_animation_delay_ms)!=null?D:300,u=(B=a.cta_animation_delay_ms)!=null?B:400,{panel:s,logo:m,title:E,subtitle:T,footer:c,ctaButton:d,ctaText:g,ctaHint:b}=e;s.visible=!0,s.element.style.visibility="visible";let f=Date.now(),x=()=>{let q=Date.now()-f,W=Math.min(q/r,1),k=1-Math.pow(1-W,3);s.alpha=k,s.element.style.opacity=k.toString();let j=1+p*(1-k);s.element.style.transform=`translate(-50%, -50%) scale(${j})`,W<1?requestAnimationFrame(x):(setTimeout(()=>Qn(m,o,t),l),setTimeout(()=>{jn(E,o),setTimeout(()=>In(T,o),50)},y),setTimeout(()=>On(c,o),h),setTimeout(()=>{Un(d,g,o),setTimeout(()=>ta(b,o),50),n&&n()},u))};x()}function Qn(e,t,n){var s,m,E,T,c;let i=n==null?void 0:n.objects.get("ui_endgame_logo_1"),o=(m=(((s=i==null?void 0:i.gameplay)==null?void 0:s.tuning)||{}).animation_start_scale)!=null?m:1.2,r=Date.now(),p=e.material.opacity,l=(E=e.targetAlpha)!=null?E:1,y=(T=e.baseScaleX)!=null?T:e.scale.x,h=(c=e.baseScaleY)!=null?c:e.scale.y,u=()=>{let d=Date.now()-r,g=Math.min(d/t,1),b=1-Math.pow(1-g,2);e.material.opacity=p+(l-p)*b;let f=o+(1-o)*b;e.scale.set(y*f,h*f,1),g<1&&requestAnimationFrame(u)};u()}function jn(e,t){let n=Date.now(),i=parseFloat(e.element.style.opacity||"0"),a=parseFloat(e.element.style.top||"0"),o=()=>{let r=Date.now()-n,p=Math.min(r/t,1),l=1-Math.pow(1-p,2);e.element.style.opacity=(i+(1-i)*l).toString(),e.element.style.top=`${a-20*(1-l)}px`,p<1&&requestAnimationFrame(o)};o()}function In(e,t){var p;let n=Date.now(),i=parseFloat(e.element.style.opacity||"0"),a=parseFloat(e.element.style.top||"0"),o=a-((p=e.animationStartYOffset)!=null?p:-10),r=()=>{let l=Date.now()-n,y=Math.min(l/t,1),h=1-Math.pow(1-y,2);e.element.style.opacity=(i+(1-i)*h).toString(),e.element.style.top=`${a+(o-a)*h}px`,y<1&&requestAnimationFrame(r)};r()}function On(e,t){var r;let n=Date.now(),i=parseFloat(e.element.style.opacity||"0"),a=(r=e.targetAlpha)!=null?r:1,o=()=>{let p=Date.now()-n,l=Math.min(p/t,1),y=1-Math.pow(1-l,2);e.element.style.opacity=(i+(a-i)*y).toString(),l<1&&requestAnimationFrame(o)};o()}function Un(e,t,n){let i=Date.now(),a=parseFloat(e.element.style.opacity||"0"),o=()=>{let r=Date.now()-i,p=Math.min(r/n,1),l=1-Math.pow(1-p,2);e.element.style.opacity=(a+(1-a)*l).toString(),t.element.style.opacity=(a+(1-a)*l).toString(),e.element.style.transform=`translate(-50%, -50%) scale(${1+.1*(1-l)})`,p<1&&requestAnimationFrame(o)};o()}function ta(e,t){var p;let n=Date.now(),i=parseFloat(e.element.style.opacity||"0"),a=parseFloat(e.element.style.top||"0"),o=a-((p=e.animationStartYOffset)!=null?p:5),r=()=>{let l=Date.now()-n,y=Math.min(l/t,1),h=1-Math.pow(1-y,2);e.element.style.opacity=(i+(1-i)*h).toString(),e.element.style.top=`${a+(o-a)*h}px`,y<1&&requestAnimationFrame(r)};r()}function ea(e,t,n,i){var h,u,s,m;let a=n.objects.get("ui_endgame_hand_1"),o=((h=a==null?void 0:a.gameplay)==null?void 0:h.tuning)||{},r=(u=o.click_animation_duration_ms)!=null?u:600,p=(s=o.click_delay_ms)!=null?s:2e3,l=(m=o.click_repeat_delay_ms)!=null?m:3e3,y=()=>{var S,C;e.visible=!0,e.material.opacity=1;let E=e.position.x,T=e.position.y,c=(S=o.hand_offset_x)!=null?S:50,d=(C=o.hand_offset_y)!=null?C:50,g=t.element.getBoundingClientRect(),b=c,f=d,x=Date.now(),_=()=>{var k,j,at;let M=Date.now()-x,w=Math.min(M/r,1),H=w<.5?2*w*w:1-Math.pow(-2*w+2,2)/2;e.position.set(E+(b-E)*H,T+(f-T)*H,0);let D=(j=(k=a==null?void 0:a.transform)==null?void 0:k.scale)!=null?j:.1875,B=(at=o.hand_scale_multiplier)!=null?at:2.5,q=D*B*100,W=q+q*.2*Math.sin(w*Math.PI);e.scale.set(W,W,1),w<1?requestAnimationFrame(_):(t.element.style.transform="translate(-50%, -50%) scale(0.95)",setTimeout(()=>{t.element.style.transform="translate(-50%, -50%) scale(1)",i()},100),setTimeout(()=>{e.material.opacity=0,setTimeout(()=>{e.position.set(E,T,0),y()},l)},500))};_()};setTimeout(y,p)}import*as yt from"three";function na(e,t,n){var u,s,m,E;let i=t.objects.get("hand_tutorial_1"),a=((u=i==null?void 0:i.gameplay)==null?void 0:u.tuning)||{},o=(i==null?void 0:i.render)||{},r=(i==null?void 0:i.transform)||{},p=new yt.SpriteMaterial({map:e||void 0,transparent:!0,alphaTest:.1}),l=new yt.Sprite(p);l.position.set(n.x,n.y,0),l.material.opacity=0;let y=(s=a.hand_scale_multiplier)!=null?s:2.5,h=(m=r.scale)!=null?m:.1875;return l.scale.set(h*y*100,h*y*100,1),l.renderOrder=(E=o.z_index)!=null?E:99999,l}function aa(e){var E,T,c,d,g,b,f,x,_;let t=e.objects.get("ui_tutorial_1"),n=t==null?void 0:t.ui,i=(t==null?void 0:t.render)||{},a=((E=e.engine.runtime)==null?void 0:E.ui_styles)||{},o=((T=e.engine.runtime)==null?void 0:T.ui)||{},r=(n==null?void 0:n.text)||o.tutorial_label||o.label_text||"CLEAN!",p=(n==null?void 0:n.font)||"brand.warning",l=(n==null?void 0:n.fontSize)||a.label_font_size||52,y=(d=n==null?void 0:n.letterSpacing)!=null?d:(c=a.label_letter_spacing)!=null?c:-1,h=(n==null?void 0:n.align)||"center",u=i.tint,s=typeof u=="string"?u:u?`#${u.toString(16).padStart(6,"0")}`:a.label_fill||"#FFF1C1",m=document.createElement("div");return m.textContent=r,m.style.cssText=`
103
+ `;let Ln=Tt+zt/2+20,Wn=b-f-10,Bn=Math.min(Ln+((qe=Yt.animation_start_y_offset)!=null?qe:5),Wn);K.style.top=`${Bn}px`,K.style.left="50%";let wt=Q(K);wt.element=K,wt.animationStartYOffset=(Ve=Yt.animation_start_y_offset)!=null?Ve:5,H.appendChild(K);let _t=((Ze=u==null?void 0:u.gameplay)==null?void 0:Ze.tuning)||{},kn=(Je=_t.hand_offset_x)!=null?Je:50,zn=(Ke=_t.hand_offset_y)!=null?Ke:50,Dn=(je=(Qe=u==null?void 0:u.transform)==null?void 0:Qe.scale)!=null?je:.1875,Pn=(Ie=_t.hand_scale_multiplier)!=null?Ie:2.5,Yn=new U.SpriteMaterial({map:t||void 0,transparent:!0,alphaTest:.1}),et=new U.Sprite(Yn),Gt=Dn*Pn*100;return et.scale.set(Gt,Gt,1),et.position.set(kn,Tt+zn,0),et.material.opacity=0,et.visible=!1,{panel:D,logo:z,title:At,subtitle:Et,footer:bt,ctaButton:xt,ctaText:Pt,ctaHint:wt,hand:et}}function Jn(e,t,n){var _,S,C,M,w,H,D,B;let i=t.objects.get("ui_endgame_1"),a=((_=i==null?void 0:i.gameplay)==null?void 0:_.tuning)||{},o=(S=a.animation_duration_ms)!=null?S:800,r=(C=a.fade_in_duration_ms)!=null?C:600,p=(M=a.scale_animation_intensity)!=null?M:.1,l=(w=a.logo_animation_delay_ms)!=null?w:100,y=(H=a.title_animation_delay_ms)!=null?H:200,h=(D=a.footer_animation_delay_ms)!=null?D:300,u=(B=a.cta_animation_delay_ms)!=null?B:400,{panel:s,logo:m,title:E,subtitle:T,footer:c,ctaButton:d,ctaText:g,ctaHint:b}=e;s.visible=!0,s.element.style.visibility="visible";let f=Date.now(),x=()=>{let q=Date.now()-f,W=Math.min(q/r,1),k=1-Math.pow(1-W,3);s.alpha=k,s.element.style.opacity=k.toString();let j=1+p*(1-k);s.element.style.transform=`translate(-50%, -50%) scale(${j})`,W<1?requestAnimationFrame(x):(setTimeout(()=>Kn(m,o,t),l),setTimeout(()=>{Qn(E,o),setTimeout(()=>jn(T,o),50)},y),setTimeout(()=>In(c,o),h),setTimeout(()=>{On(d,g,o),setTimeout(()=>Un(b,o),50),n&&n()},u))};x()}function Kn(e,t,n){var s,m,E,T,c;let i=n==null?void 0:n.objects.get("ui_endgame_logo_1"),o=(m=(((s=i==null?void 0:i.gameplay)==null?void 0:s.tuning)||{}).animation_start_scale)!=null?m:1.2,r=Date.now(),p=e.material.opacity,l=(E=e.targetAlpha)!=null?E:1,y=(T=e.baseScaleX)!=null?T:e.scale.x,h=(c=e.baseScaleY)!=null?c:e.scale.y,u=()=>{let d=Date.now()-r,g=Math.min(d/t,1),b=1-Math.pow(1-g,2);e.material.opacity=p+(l-p)*b;let f=o+(1-o)*b;e.scale.set(y*f,h*f,1),g<1&&requestAnimationFrame(u)};u()}function Qn(e,t){let n=Date.now(),i=parseFloat(e.element.style.opacity||"0"),a=parseFloat(e.element.style.top||"0"),o=()=>{let r=Date.now()-n,p=Math.min(r/t,1),l=1-Math.pow(1-p,2);e.element.style.opacity=(i+(1-i)*l).toString(),e.element.style.top=`${a-20*(1-l)}px`,p<1&&requestAnimationFrame(o)};o()}function jn(e,t){var p;let n=Date.now(),i=parseFloat(e.element.style.opacity||"0"),a=parseFloat(e.element.style.top||"0"),o=a-((p=e.animationStartYOffset)!=null?p:-10),r=()=>{let l=Date.now()-n,y=Math.min(l/t,1),h=1-Math.pow(1-y,2);e.element.style.opacity=(i+(1-i)*h).toString(),e.element.style.top=`${a+(o-a)*h}px`,y<1&&requestAnimationFrame(r)};r()}function In(e,t){var r;let n=Date.now(),i=parseFloat(e.element.style.opacity||"0"),a=(r=e.targetAlpha)!=null?r:1,o=()=>{let p=Date.now()-n,l=Math.min(p/t,1),y=1-Math.pow(1-l,2);e.element.style.opacity=(i+(a-i)*y).toString(),l<1&&requestAnimationFrame(o)};o()}function On(e,t,n){let i=Date.now(),a=parseFloat(e.element.style.opacity||"0"),o=()=>{let r=Date.now()-i,p=Math.min(r/n,1),l=1-Math.pow(1-p,2);e.element.style.opacity=(a+(1-a)*l).toString(),t.element.style.opacity=(a+(1-a)*l).toString(),e.element.style.transform=`translate(-50%, -50%) scale(${1+.1*(1-l)})`,p<1&&requestAnimationFrame(o)};o()}function Un(e,t){var p;let n=Date.now(),i=parseFloat(e.element.style.opacity||"0"),a=parseFloat(e.element.style.top||"0"),o=a-((p=e.animationStartYOffset)!=null?p:5),r=()=>{let l=Date.now()-n,y=Math.min(l/t,1),h=1-Math.pow(1-y,2);e.element.style.opacity=(i+(1-i)*h).toString(),e.element.style.top=`${a+(o-a)*h}px`,y<1&&requestAnimationFrame(r)};r()}function ta(e,t,n,i){var h,u,s,m;let a=n.objects.get("ui_endgame_hand_1"),o=((h=a==null?void 0:a.gameplay)==null?void 0:h.tuning)||{},r=(u=o.click_animation_duration_ms)!=null?u:600,p=(s=o.click_delay_ms)!=null?s:2e3,l=(m=o.click_repeat_delay_ms)!=null?m:3e3,y=()=>{var S,C;e.visible=!0,e.material.opacity=1;let E=e.position.x,T=e.position.y,c=(S=o.hand_offset_x)!=null?S:50,d=(C=o.hand_offset_y)!=null?C:50,g=t.element.getBoundingClientRect(),b=c,f=d,x=Date.now(),_=()=>{var k,j,at;let M=Date.now()-x,w=Math.min(M/r,1),H=w<.5?2*w*w:1-Math.pow(-2*w+2,2)/2;e.position.set(E+(b-E)*H,T+(f-T)*H,0);let D=(j=(k=a==null?void 0:a.transform)==null?void 0:k.scale)!=null?j:.1875,B=(at=o.hand_scale_multiplier)!=null?at:2.5,q=D*B*100,W=q+q*.2*Math.sin(w*Math.PI);e.scale.set(W,W,1),w<1?requestAnimationFrame(_):(t.element.style.transform="translate(-50%, -50%) scale(0.95)",setTimeout(()=>{t.element.style.transform="translate(-50%, -50%) scale(1)",i()},100),setTimeout(()=>{e.material.opacity=0,setTimeout(()=>{e.position.set(E,T,0),y()},l)},500))};_()};setTimeout(y,p)}import*as yt from"three";function ea(e,t,n){var u,s,m,E;let i=t.objects.get("hand_tutorial_1"),a=((u=i==null?void 0:i.gameplay)==null?void 0:u.tuning)||{},o=(i==null?void 0:i.render)||{},r=(i==null?void 0:i.transform)||{},p=new yt.SpriteMaterial({map:e||void 0,transparent:!0,alphaTest:.1}),l=new yt.Sprite(p);l.position.set(n.x,n.y,0),l.material.opacity=0;let y=(s=a.hand_scale_multiplier)!=null?s:2.5,h=(m=r.scale)!=null?m:.1875;return l.scale.set(h*y*100,h*y*100,1),l.renderOrder=(E=o.z_index)!=null?E:99999,l}function na(e){var E,T,c,d,g,b,f,x,_;let t=e.objects.get("ui_tutorial_1"),n=t==null?void 0:t.ui,i=(t==null?void 0:t.render)||{},a=((E=e.engine.runtime)==null?void 0:E.ui_styles)||{},o=((T=e.engine.runtime)==null?void 0:T.ui)||{},r=(n==null?void 0:n.text)||o.tutorial_label||o.label_text||"CLEAN!",p=(n==null?void 0:n.font)||"brand.warning",l=(n==null?void 0:n.fontSize)||a.label_font_size||52,y=(d=n==null?void 0:n.letterSpacing)!=null?d:(c=a.label_letter_spacing)!=null?c:-1,h=(n==null?void 0:n.align)||"center",u=i.tint,s=typeof u=="string"?u:u?`#${u.toString(16).padStart(6,"0")}`:a.label_fill||"#FFF1C1",m=document.createElement("div");return m.textContent=r,m.style.cssText=`
104
104
  font-family: ${G(p)};
105
105
  font-size: ${l}px;
106
106
  font-weight: ${X(p)};
@@ -115,4 +115,4 @@ import{b as dt}from"../chunk-UHIM3PV6.mjs";import*as O from"three";var Oe=(i=>(i
115
115
  position: absolute;
116
116
  transform: translate(-50%, -50%);
117
117
  white-space: nowrap;
118
- `,m}function ia(e,t,n,i,a){var l,y,h,u,s,m,E;let o=a.objects.get("hand_tutorial_1"),r=((l=o==null?void 0:o.gameplay)==null?void 0:l.tuning)||{},p=(o==null?void 0:o.transform)||{};if(!i){let T=(y=r.animation_duration)!=null?y:1.5,c=n%T/T,d=c<.5?2*c*c:-1+(4-2*c)*c,g=(h=r.x_offset)!=null?h:0,b=(u=r.y_offset)!=null?u:0,f=(s=r.animation_range)!=null?s:40,x=f*.7,_=f,S=t.x+g+x,C=t.y+b+_,M=S+x,w=C+_;e.position.set(S+(M-S)*d,C+(w-C)*d,0);let H=(m=p.scale)!=null?m:.1875,D=(E=r.hand_scale_multiplier)!=null?E:2.5,B=H*D*100;e.scale.set(B,B,1)}}import*as tt from"three";var Ue=new tt.TextureLoader;async function tn(e,t,n=16777215,i=!1){try{let o=(globalThis.INLINE_ASSETS||{})[e];return await Ue.loadAsync(o||e)}catch{console.warn(`Asset missing: ${e}. Using placeholder.`);let o=document.createElement("canvas");o.width=64,o.height=64;let r=o.getContext("2d");return r&&(r.fillStyle=`#${n.toString(16).padStart(6,"0")}`,i?r.fillRect(0,0,30,60):(r.beginPath(),r.arc(32,32,30,0,Math.PI*2),r.fill(),r.fillRect(27,32,10,40))),new tt.CanvasTexture(o)}}async function sa(e,t,n){var E,T,c,d;let a=(globalThis.INLINE_ASSETS||{})[e]||e,o;try{o=await Ue.loadAsync(a),console.log("[character] loaded sheet",{path:e,sourceUsed:a})}catch(g){let x=((n.gameplay.character_sheet||{}).fallback_color||"#ff00ff").replace("#","");o=await tn(e,t,parseInt(x,16),!0),console.warn("[character] fallback loadAsset used",{path:e,err:g})}if(!o)return[];let r=n.gameplay.character_sheet||{},p=(E=r.cols)!=null?E:3,l=(T=r.rows)!=null?T:2,y=((c=o.image)==null?void 0:c.width)||0,h=((d=o.image)==null?void 0:d.height)||0,u=y/p,s=h/l;if(!Number.isFinite(u)||!Number.isFinite(s)||u<=0||s<=0)return[o];let m=[];for(let g=0;g<l;g++)for(let b=0;b<p;b++){let f=document.createElement("canvas");f.width=u,f.height=s;let x=f.getContext("2d");x&&o.image&&x.drawImage(o.image,b*u,g*s,u,s,0,0,u,s),m.push(new tt.CanvasTexture(f))}return m.length>2&&m.push(...m.slice(1,-1).reverse()),console.log("[character] frames prepared",{count:m.length}),m}function oa(e,t){var u,s,m,E;let n=t.gameplay.brush||{},i=t.theme.brush_color||"#ffffff",a=(u=n.radius)!=null?u:20,o=(s=n.inner_radius)!=null?s:15,r=(m=n.alpha)!=null?m:.8,p=(E=n.inner_alpha)!=null?E:.3,l=n.inner_color||"#ffffff",y=document.createElement("canvas");y.width=a*2,y.height=a*2;let h=y.getContext("2d");return h&&(h.clearRect(0,0,y.width,y.height),h.beginPath(),h.arc(a,a,a,0,Math.PI*2),h.fillStyle=i,h.globalAlpha=r,h.fill(),h.beginPath(),h.arc(a,a,o,0,Math.PI*2),h.fillStyle=l,h.globalAlpha=p,h.fill()),new tt.CanvasTexture(y)}export{Oe as AspectClass,mt as GameObject,Ct as GameObjectManager,pt as Renderer,nt as ResponsiveUISystem,ht as Transform,ea as animateHandClick,Kn as animatePanelEntrance,oa as createBrushTexture,Jn as createEndGamePanel,na as createHandTutorial,qn as createThreeBase,aa as createTutorialLabel,vt as getAspectClass,Zn as getRegisteredFontIds,tn as loadAsset,sa as loadCharacterFrames,Vn as registerFont,G as resolveFont,X as resolveFontWeight,ia as updateHandAnimation};
118
+ `,m}function aa(e,t,n,i,a){var l,y,h,u,s,m,E;let o=a.objects.get("hand_tutorial_1"),r=((l=o==null?void 0:o.gameplay)==null?void 0:l.tuning)||{},p=(o==null?void 0:o.transform)||{};if(!i){let T=(y=r.animation_duration)!=null?y:1.5,c=n%T/T,d=c<.5?2*c*c:-1+(4-2*c)*c,g=(h=r.x_offset)!=null?h:0,b=(u=r.y_offset)!=null?u:0,f=(s=r.animation_range)!=null?s:40,x=f*.7,_=f,S=t.x+g+x,C=t.y+b+_,M=S+x,w=C+_;e.position.set(S+(M-S)*d,C+(w-C)*d,0);let H=(m=p.scale)!=null?m:.1875,D=(E=r.hand_scale_multiplier)!=null?E:2.5,B=H*D*100;e.scale.set(B,B,1)}}import*as tt from"three";var Ue=new tt.TextureLoader;async function tn(e,t,n=16777215,i=!1){try{let o=(globalThis.INLINE_ASSETS||{})[e];return await Ue.loadAsync(o||e)}catch{console.warn(`Asset missing: ${e}. Using placeholder.`);let o=document.createElement("canvas");o.width=64,o.height=64;let r=o.getContext("2d");return r&&(r.fillStyle=`#${n.toString(16).padStart(6,"0")}`,i?r.fillRect(0,0,30,60):(r.beginPath(),r.arc(32,32,30,0,Math.PI*2),r.fill(),r.fillRect(27,32,10,40))),new tt.CanvasTexture(o)}}async function ia(e,t,n){var E,T,c,d;let a=(globalThis.INLINE_ASSETS||{})[e]||e,o;try{o=await Ue.loadAsync(a),console.log("[character] loaded sheet",{path:e,sourceUsed:a})}catch(g){let x=((n.gameplay.character_sheet||{}).fallback_color||"#ff00ff").replace("#","");o=await tn(e,t,parseInt(x,16),!0),console.warn("[character] fallback loadAsset used",{path:e,err:g})}if(!o)return[];let r=n.gameplay.character_sheet||{},p=(E=r.cols)!=null?E:3,l=(T=r.rows)!=null?T:2,y=((c=o.image)==null?void 0:c.width)||0,h=((d=o.image)==null?void 0:d.height)||0,u=y/p,s=h/l;if(!Number.isFinite(u)||!Number.isFinite(s)||u<=0||s<=0)return[o];let m=[];for(let g=0;g<l;g++)for(let b=0;b<p;b++){let f=document.createElement("canvas");f.width=u,f.height=s;let x=f.getContext("2d");x&&o.image&&x.drawImage(o.image,b*u,g*s,u,s,0,0,u,s),m.push(new tt.CanvasTexture(f))}return m.length>2&&m.push(...m.slice(1,-1).reverse()),console.log("[character] frames prepared",{count:m.length}),m}function sa(e,t){var u,s,m,E;let n=t.gameplay.brush||{},i=t.theme.brush_color||"#ffffff",a=(u=n.radius)!=null?u:20,o=(s=n.inner_radius)!=null?s:15,r=(m=n.alpha)!=null?m:.8,p=(E=n.inner_alpha)!=null?E:.3,l=n.inner_color||"#ffffff",y=document.createElement("canvas");y.width=a*2,y.height=a*2;let h=y.getContext("2d");return h&&(h.clearRect(0,0,y.width,y.height),h.beginPath(),h.arc(a,a,a,0,Math.PI*2),h.fillStyle=i,h.globalAlpha=r,h.fill(),h.beginPath(),h.arc(a,a,o,0,Math.PI*2),h.fillStyle=l,h.globalAlpha=p,h.fill()),new tt.CanvasTexture(y)}export{Oe as AspectClass,mt as GameObject,vt as GameObjectManager,pt as Renderer,nt as ResponsiveUISystem,ht as Transform,ta as animateHandClick,Jn as animatePanelEntrance,sa as createBrushTexture,Zn as createEndGamePanel,ea as createHandTutorial,Xn as createThreeBase,na as createTutorialLabel,Rt as getAspectClass,Vn as getRegisteredFontIds,tn as loadAsset,ia as loadCharacterFrames,qn as registerFont,G as resolveFont,X as resolveFontWeight,aa as updateHandAnimation};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "handler-playable-sdk",
3
- "version": "0.1.16",
3
+ "version": "0.1.17",
4
4
  "description": "Handler Playable SDK v0.1 with contract-aligned surface (root sandbox, canonical event envelope).",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",