handler-playable-sdk 0.5.546 → 0.5.550
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-ZC5XZMWU.js → chunk-CKDDVHY7.js} +305 -200
- package/dist/cli/brand-dna.mjs +1 -1
- package/dist/cli/canva-import.mjs +1 -1
- package/dist/cli/cleanup-assets.mjs +1 -1
- package/dist/cli/fix-scales.mjs +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/screen-helper.mjs +1 -1
- package/dist/cli/setup-library.mjs +1 -1
- package/dist/cli/student-helper.mjs +1 -1
- package/dist/cli/sync-screens.mjs +1 -1
- package/dist/cli/validate-assets.mjs +1 -1
- package/dist/cli/validate.mjs +1 -1
- package/dist/index.cjs +345 -240
- package/dist/index.css +186 -2
- package/dist/index.d.cts +15 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.js +1 -1
- package/dist/pixi/index.cjs +16 -16
- package/dist/pixi/index.css +186 -2
- package/dist/pixi/index.js +1 -1
- package/dist/three/index.cjs +51 -51
- package/dist/three/index.css +186 -2
- package/dist/three/index.js +1 -1
- package/package.json +1 -1
package/dist/pixi/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var ya=Object.create;var jt=Object.defineProperty;var va=Object.getOwnPropertyDescriptor;var wa=Object.getOwnPropertyNames;var xa=Object.getPrototypeOf,Ea=Object.prototype.hasOwnProperty;var le=(n,e)=>()=>(n&&(e=n(n=0)),e);var Wn=(n,e)=>{for(var t in e)jt(n,t,{get:e[t],enumerable:!0})},Yn=(n,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of wa(e))!Ea.call(n,a)&&a!==t&&jt(n,a,{get:()=>e[a],enumerable:!(i=va(e,a))||i.enumerable});return n};var Mt=(n,e,t)=>(t=n!=null?ya(xa(n)):{},Yn(e||!n||!n.__esModule?jt(t,"default",{value:n,enumerable:!0}):t,n)),Sa=n=>Yn(jt({},"__esModule",{value:!0}),n);var Ia,ce=le(()=>{"use strict";Ia="handler_preview_override_mode";if(typeof window!="undefined"){let n=window.localStorage.getItem(Ia);window.__enableConfigOverrides=n===null?!0:n==="true"}});var Ti,_e,Qs,pn=le(()=>{"use strict";ce();Ti=null,_e="dev";if(typeof window!="undefined"){let n=window.__BUILD_SETTINGS__;if(n!=null&&n.buildMode)Ti=n,_e=n.buildMode,console.log("[CONFIG] Loaded inline build settings:",n,"buildMode:",_e);else try{let e=new XMLHttpRequest;if(e.open("GET","./build-settings.json",!1),e.send(),e.status===200&&e.responseText){let t=JSON.parse(e.responseText);Ti=t,_e=t.buildMode||"dev",console.log("[CONFIG] Loaded build settings:",t,"buildMode:",_e)}else console.log("[CONFIG] No build-settings.json found, using default buildMode:",_e)}catch(e){console.log("[CONFIG] Failed to load build-settings.json:",e instanceof Error?e.message:String(e))}}console.log("[CONFIG] Final buildMode:",_e);Qs=_e==="dev"||typeof window!="undefined"&&window.location.search.includes("hot-reload")});var un=le(()=>{"use strict"});var ki=le(()=>{"use strict";un();pn()});var gn=le(()=>{"use strict";pn();un();ki()});var ae,mn=le(()=>{"use strict";ae=class{static get(e){var t;return(t=this.store.get(e))==null?void 0:t.data}static set(e,t){this.store.set(e,{data:t})}static has(e){return this.store.has(e)}static clear(){this.store.clear()}};ae.store=new Map});function Ba(){var n,e;try{let t=typeof window!="undefined"&&(document.querySelector('script[src*="inline-assets.js"]')||((e=(n=document.querySelector("script"))==null?void 0:n.textContent)==null?void 0:e.includes("inline-assets.js"))||window.INLINE_ASSETS),i=typeof window!="undefined"&&document.querySelector('link[href*="assets/"], script[src*="assets/"]');return!!(t&&!i)}catch{return!1}}async function Ua(){try{if(typeof window!="undefined"){let n=await fetch("./build-settings.json");if(n.ok){let e=await n.json();return console.log("[AssetLoader] Loaded build settings:",e),e}}}catch{}return null}function Ga(){try{if(typeof window!="undefined"){let n=new XMLHttpRequest;if(n.open("GET","./build-settings.json",!1),n.send(),n.status===200&&n.responseText){let e=JSON.parse(n.responseText);return console.log("[AssetLoader] Loaded build settings (sync):",e),e}}}catch{}return null}async function qa(){if(console.log(`[AssetLoader] getInlineAssets() called - Effective mode: ${j}`),Object.keys(de).length>0)return console.log("[AssetLoader] Returning cached inline assets:",Object.keys(de)),de;if(typeof window!="undefined"&&window.INLINE_ASSETS)return console.log("[AssetLoader] Using pre-loaded INLINE_ASSETS from window:",Object.keys(window.INLINE_ASSETS)),de={...window.INLINE_ASSETS},de;if(!(j==="publish"&&se!==!1))return console.log("[AssetLoader] Inline assets disabled for this build mode."),de;if(!bn){let e=typeof window!="undefined"?new URL("inline-assets.js",window.location.href).href:"./inline-assets.js";console.log("[AssetLoader] Loading inline assets from:",e),bn=(async()=>{try{try{let s=await import(e+"?t="+Date.now());if(s.INLINE_ASSETS)return console.log("[AssetLoader] Loaded INLINE_ASSETS via ES module:",Object.keys(s.INLINE_ASSETS)),s.INLINE_ASSETS}catch(s){console.warn("[AssetLoader] ES module import failed, trying text parse:",s)}let t=await fetch(e);if(!t.ok)throw new Error(`HTTP ${t.status}: ${t.statusText}`);let i=await t.text();console.log("[AssetLoader] Received JS code, length:",i.length);let a=i.match(/export\s+const\s+INLINE_ASSETS\s*=\s*({[\s\S]*?});?\s*$/m);if(a)try{let s=a[1];console.log("[AssetLoader] Found INLINE_ASSETS export, parsing...");let r=new Function("return "+s)();return console.log("[AssetLoader] Parsed inline assets:",Object.keys(r)),r}catch(s){return console.warn("[AssetLoader] Failed to parse inline assets:",s),{}}else return console.warn("[AssetLoader] INLINE_ASSETS export not found in response"),console.log("[AssetLoader] JS code preview:",i.substring(0,500)),{}}catch(t){return console.warn("[AssetLoader] Failed to load inline assets:",t),{}}})()}return de=await bn,console.log("[AssetLoader] Final inline assets cache:",Object.keys(de)),de}function yn(n){return n===null||typeof n!="object"||(Object.freeze(n),Object.values(n).forEach(e=>yn(e))),n}function Va(n=64,e=64,t=16711680){let i=document.createElement("canvas");i.width=n,i.height=e;let a=i.getContext("2d");return a.fillStyle=`#${t.toString(16).padStart(6,"0")}`,a.fillRect(0,0,n,e),a.strokeStyle="#000",a.strokeRect(0,0,n,e),a.fillStyle="#fff",a.font="10px sans-serif",a.textAlign="center",a.fillText("MISSING",n/2,e/2),pe.Texture.from(i)}function $t(n,e){zi.set(n,e)}var pe,Oi,Ri,Pe,j,se,Ce,de,bn,zi,Ae,Dt=le(()=>{"use strict";pe=require("pixi.js");mn();Oi=typeof __BUILD_MODE__!="undefined"?__BUILD_MODE__:"undefined",Ri=Ba(),Pe=typeof window!="undefined"?window.__BUILD_SETTINGS__:null,j=Ri?"publish":Oi,se=Pe==null?void 0:Pe.assetsInlined;Pe!=null&&Pe.buildMode&&(j=Pe.buildMode,console.log(`[AssetLoader] Build mode overridden by inline settings: ${j}`));Ce=Ga();Ce!=null&&Ce.buildMode&&(j=Ce.buildMode,console.log(`[AssetLoader] Build mode overridden by sync settings: ${j}`));(Ce==null?void 0:Ce.assetsInlined)!==void 0&&(se=Ce.assetsInlined);Ua().then(n=>{n!=null&&n.buildMode&&n.buildMode!==j&&(j=n.buildMode,console.log(`[AssetLoader] Build mode overridden by settings: ${j}`)),(n==null?void 0:n.assetsInlined)!==void 0&&(se=n.assetsInlined)}).catch(()=>{});console.log(`[AssetLoader] MODULE LOADED - Compile: ${Oi}, Runtime: ${Ri?"publish":"dev"}, Effective: ${j}`);de={},bn=null;zi=new Map;Ae=class{static async load(e,t,i,a){let s=`${e}:${t.path}`,r=ae.get(s);if(r!==void 0)return r;console.log(`[AssetLoader] Loading asset: ${e}, type: ${t.type}, Effective mode: ${j}`),console.log(`[AssetLoader] Window defined: ${typeof window!="undefined"}, INLINE_ASSETS exists: ${!!(typeof window!="undefined"&&window.INLINE_ASSETS)}, keys: ${typeof window!="undefined"&&window.INLINE_ASSETS?Object.keys(window.INLINE_ASSETS).length:"N/A"}`);let o=await qa(),l=o[e];if(!l&&a&&(l=o[a],l&&console.log(`[AssetLoader] Found inline data for ${e} using configId: ${a}`)),!l&&t.path){let c=t.path.split("/");if(c.length>=2){let p=c[c.length-1].split(".")[0];o[p]&&(l=o[p],console.log(`[AssetLoader] Found inline data for ${e} using assetName: ${p}`))}}if(console.log("[AssetLoader] Inline data for",e,":",l?"FOUND":"NOT FOUND"),j==="publish"&&se!==!1&&(console.log("[AssetLoader] \u26A0\uFE0F PUBLISH MODE DETECTED - inline assets are MANDATORY"),!l))throw new Error(`[AssetLoader] PUBLISH MODE: Inline asset required but NOT FOUND for object: ${e}, path: ${t.path}`);let u=zi.get(t.type);if(u)try{let c=await u(t.path,l,e,i);return ae.set(s,c),c}catch(c){return this.handleFailure(e,t.type,c)}try{let c;switch(t.type){case"image":c=await this.loadImage(t.path,l);break;case"json":c=await this.loadJSON(t.path,l),c=yn(c);break;default:throw new Error(`Unknown asset type: ${t.type}`)}return ae.set(s,c),c}catch(c){return this.handleFailure(e,t.type,c)}}static async loadImage(e,t){let i=j==="publish",a=i&&se!==!1;if(console.log(`[AssetLoader] loadImage - Effective mode: ${j}, isPublishMode: ${i}, inlineData: ${t?"EXISTS":"MISSING"}`),a){if(console.log("[AssetLoader] PUBLISH MODE ACTIVATED - inline assets are MANDATORY"),!t)throw new Error(`[AssetLoader] Publish mode: inline asset required but not found for object. Path: ${e}`);if(typeof t!="string"||!t.startsWith("data:"))throw new Error(`[AssetLoader] Publish mode: inline asset must be data URI string, got: ${typeof t}`);try{return await pe.Assets.load(t)}catch(s){throw console.error("[AssetLoader] Failed to load texture from data URI:",s),s}}if(t&&typeof t=="string"&&t.startsWith("data:"))try{return await pe.Assets.load(t)}catch(s){return console.error("[AssetLoader] Failed to load texture from data URI, falling back to path:",s),await pe.Assets.load(e)}return await pe.Assets.load(e)}static async loadJSON(e,t){let i=j==="publish",a=i&&se!==!1;if(console.log(`[AssetLoader] loadJSON - Effective mode: ${j}, isPublishMode: ${i}, inlineData: ${t?"EXISTS":"MISSING"}`),a){if(console.log("[AssetLoader] PUBLISH MODE ACTIVATED - inline assets are MANDATORY"),!t)throw new Error(`[AssetLoader] Publish mode: inline asset required but not found for path: ${e}`);if(typeof t=="object"&&t!==null)return t;if(typeof t=="string"&&t.startsWith("data:")){let r=atob(t.split(",")[1]);return JSON.parse(r)}return JSON.parse(t)}if(t){if(typeof t=="object"&&t!==null)return t;if(typeof t=="string"&&t.startsWith("data:")){let r=atob(t.split(",")[1]);return JSON.parse(r)}return JSON.parse(t)}let s=await fetch(e);if(!s.ok)throw new Error(`JSON fetch failed: ${e}`);return s.json()}static handleFailure(e,t,i){if(j==="dev"){let s=t==="image"?Va():yn({__placeholder:!0,type:t});return ae.set(e+":"+((i==null?void 0:i.path)||"missing"),s),s}throw i}};$t("image",async(n,e)=>{let t=j==="publish",i=t&&se!==!1,a=j==="brand",s=t&&se===!1;if(console.log(`[AssetLoader] registerType('image') - Effective mode: ${j}, isPublishMode: ${t}, isBrandMode: ${a}, inlineData: ${e?"EXISTS":"MISSING"}`),i){if(console.log("[AssetLoader] PUBLISH MODE ACTIVATED - inline assets are MANDATORY"),!e)throw new Error(`[AssetLoader] Publish mode: inline asset required but not found for path: ${n}`);if(typeof e!="string"||!e.startsWith("data:"))throw new Error(`[AssetLoader] Publish mode: inline asset must be data URI string, got: ${typeof e}`);return pe.Assets.load(e)}let r=n;return(a||s)&&n&&!n.startsWith("assets/")&&(typeof window!="undefined"&&!document.querySelector('link[href*="assets/"], script[src*="assets/"]')&&!document.querySelector('link[href*="configs/"], script[src*="configs/"]')?(r=n,console.log(`[AssetLoader] BRAND MODE: flattened build, using path "${n}" as-is`)):(r=`assets/${n}`,console.log(`[AssetLoader] BRAND MODE: transformed path "${n}" -> "${r}"`))),pe.Assets.load(e||r)});$t("json",async(n,e)=>{let t=j==="publish",i=t&&se!==!1,a=j==="brand",s=t&&se===!1;if(console.log(`[AssetLoader] registerType('json') - Effective mode: ${j}, isPublishMode: ${t}, isBrandMode: ${a}, inlineData: ${e?"EXISTS":"MISSING"}`),i){if(console.log("[AssetLoader] PUBLISH MODE ACTIVATED - inline assets are MANDATORY"),!e)throw new Error(`[AssetLoader] Publish mode: inline asset required but not found for path: ${n}`);return typeof e=="object"&&e!==null?e:typeof e=="string"&&e.startsWith("data:")?JSON.parse(atob(e.split(",")[1])):JSON.parse(e)}let r=n;if((a||s)&&n&&!n.startsWith("assets/")&&(typeof window!="undefined"&&!document.querySelector('link[href*="assets/"], script[src*="assets/"]')&&!document.querySelector('link[href*="configs/"], script[src*="configs/"]')?(r=n,console.log(`[AssetLoader] BRAND MODE: flattened build, using path "${n}" as-is`)):(r=`assets/${n}`,console.log(`[AssetLoader] BRAND MODE: transformed path "${n}" -> "${r}"`))),e)return typeof e=="object"&&e!==null?e:typeof e=="string"&&e.startsWith("data:")?JSON.parse(atob(e.split(",")[1])):JSON.parse(e);let o=await fetch(r);if(!o.ok)throw new Error(`JSON fetch failed: ${n}`);return o.json()})});function Ht(n,e){$i.init(n,e),typeof window!="undefined"&&(window.__AssetTextures=Te)}var vn,$i,Te,gt=le(()=>{"use strict";Dt();vn=class{constructor(){this.textures=new Map;this.readyPromise=null;this.priorityReadyPromise=null;this.priorityReadyResolve=null;this.config=null;this.app=null;this.attempted=new Set;this.waiters=new Set}init(e,t){if(this.config===e&&this.app===t&&this.priorityReadyPromise){console.log("[AssetTextures] init called with same config/app; keeping existing state");return}this.textures.clear(),this.readyPromise=null,this.priorityReadyPromise=null,this.priorityReadyResolve=null,this.attempted.clear(),this.waiters.clear(),this.priorityReadyPromise=new Promise(i=>{this.priorityReadyResolve=i}),this.config=e,this.app=t,console.log("[AssetTextures] Initialized with config, cleared previous textures")}async ready(){if(this.readyPromise){await this.readyPromise;return}if(!this.config)throw new Error("[AssetTextures] Must call init() before ready() - config is null");if(!this.app)throw new Error("[AssetTextures] Must call init() before ready() - app is null");let e=this.config,t=this.app;return this.readyPromise=(async()=>{var r;console.log("[AssetTextures] Loading all assets...");let i=new Set(["background_loading_1"]),a=[],s=[];for(let[o,l]of e.objects.entries()){let d=(r=l.render)==null?void 0:r.asset;if(!d)continue;let u=async()=>{var c;try{let p=(c=l.identity)==null?void 0:c.id;console.log(`[AssetTextures] Loading ${d.type}: ${o} (${p})`);let g=await Ae.load(o,d,t,p);this.textures.set(o,g),console.log(`[AssetTextures] \u2713 Loaded: ${o}`)}catch(p){console.error(`[AssetTextures] \u2717 Failed to load: ${o}`,p)}finally{this.attempted.add(o);try{for(let p of Array.from(this.waiters))p()}catch{}}};i.has(o)?a.push(u()):s.push(u())}a.length>0&&(console.log("[AssetTextures] Phase 1: Loading priority assets (loading screen)..."),await Promise.all(a),console.log("[AssetTextures] Phase 1: Priority assets ready")),this.priorityReadyResolve&&this.priorityReadyResolve(),console.log("[AssetTextures] Phase 2: Loading remaining assets..."),await Promise.all(s),console.log("[AssetTextures] All textures loaded:",Array.from(this.textures.keys()))})(),this.readyPromise}async priorityReady(){return this.priorityReadyPromise?this.priorityReadyPromise:Promise.resolve()}async waitFor(e,t={}){if(!this.config)throw new Error("[AssetTextures] Must call init() before waitFor() - config is null");if(!this.app)throw new Error("[AssetTextures] Must call init() before waitFor() - app is null");let a=Array.from(new Set((e||[]).filter(o=>typeof o=="string"&&o))).filter(o=>{var l,d,u,c;try{let p=(u=(d=(l=this.config)==null?void 0:l.objects)==null?void 0:d.get)==null?void 0:u.call(d,o);return!!((c=p==null?void 0:p.render)!=null&&c.asset)}catch{return!1}});if(a.length===0)return;this.ready().catch(()=>{});let s=()=>a.every(o=>this.textures.has(o)||this.attempted.has(o));if(s())return;let r=typeof t.timeoutMs=="number"?t.timeoutMs:15e3;await new Promise(o=>{let l=!1,d=()=>{l||s()&&(l=!0,this.waiters.delete(d),o())};this.waiters.add(d),d(),r>0&&setTimeout(()=>{l||(l=!0,this.waiters.delete(d),console.warn("[AssetTextures] waitFor timed out; continuing",{ids:a}),o())},r)})}get(e){return this.textures.get(e)}set(e,t){this.textures.set(e,t),console.log(`[AssetTextures] Updated texture: ${e}`)}clear(){this.textures.clear(),this.readyPromise=null,console.log("[AssetTextures] Cleared all textures")}getAllIds(){return Array.from(this.textures.keys())}},$i=new vn,Te=new Proxy($i,{get(n,e){return e in n&&typeof n[e]=="function"?n[e].bind(n):n.get(e)},set(n,e,t){return n.set(e,t),!0}})});var Ni={};Wn(Ni,{AssetEditorModal:()=>Cn});var Cn,An=le(()=>{"use strict";Cn=class{constructor(){this.modal=null;this.currentObjectId=null;this.currentPath=null;this.currentAsset="";this.onApplyCallback=null}show(e,t,i,a){this.currentObjectId=e,this.currentPath=t,this.currentAsset=i,this.onApplyCallback=a,this.createModal(e,i),document.body.appendChild(this.modal),this.attachModalListeners()}createModal(e,t){let i=document.createElement("div");i.className="asset-editor-modal",i.innerHTML=`
|
|
1
|
+
"use strict";var wa=Object.create;var Mt=Object.defineProperty;var xa=Object.getOwnPropertyDescriptor;var Sa=Object.getOwnPropertyNames;var Ea=Object.getPrototypeOf,Ca=Object.prototype.hasOwnProperty;var ce=(i,e)=>()=>(i&&(e=i(i=0)),e);var Wi=(i,e)=>{for(var t in e)Mt(i,t,{get:e[t],enumerable:!0})},Yi=(i,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of Sa(e))!Ca.call(i,a)&&a!==t&&Mt(i,a,{get:()=>e[a],enumerable:!(n=xa(e,a))||n.enumerable});return i};var jt=(i,e,t)=>(t=i!=null?wa(Ea(i)):{},Yi(e||!i||!i.__esModule?Mt(t,"default",{value:i,enumerable:!0}):t,i)),Aa=i=>Yi(Mt({},"__esModule",{value:!0}),i);var Ma,ae=ce(()=>{"use strict";Ma="handler_preview_override_mode";if(typeof window!="undefined"){let i=window.localStorage.getItem(Ma);window.__enableConfigOverrides=i===null?!0:i==="true"}});var Ln,_e,nr,pi=ce(()=>{"use strict";ae();Ln=null,_e="dev";if(typeof window!="undefined"){let i=window.__BUILD_SETTINGS__;if(i!=null&&i.buildMode)Ln=i,_e=i.buildMode,console.log("[CONFIG] Loaded inline build settings:",i,"buildMode:",_e);else try{let e=new XMLHttpRequest;if(e.open("GET","./build-settings.json",!1),e.send(),e.status===200&&e.responseText){let t=JSON.parse(e.responseText);Ln=t,_e=t.buildMode||"dev",console.log("[CONFIG] Loaded build settings:",t,"buildMode:",_e)}else console.log("[CONFIG] No build-settings.json found, using default buildMode:",_e)}catch(e){console.log("[CONFIG] Failed to load build-settings.json:",e instanceof Error?e.message:String(e))}}console.log("[CONFIG] Final buildMode:",_e);nr=_e==="dev"||typeof window!="undefined"&&window.location.search.includes("hot-reload")});var ui=ce(()=>{"use strict"});var In=ce(()=>{"use strict";ui();pi()});var gi=ce(()=>{"use strict";pi();ui();In()});var se,mi=ce(()=>{"use strict";se=class{static get(e){var t;return(t=this.store.get(e))==null?void 0:t.data}static set(e,t){this.store.set(e,{data:t})}static has(e){return this.store.has(e)}static clear(){this.store.clear()}};se.store=new Map});function Ba(){var i,e;try{let t=typeof window!="undefined"&&(document.querySelector('script[src*="inline-assets.js"]')||((e=(i=document.querySelector("script"))==null?void 0:i.textContent)==null?void 0:e.includes("inline-assets.js"))||window.INLINE_ASSETS),n=typeof window!="undefined"&&document.querySelector('link[href*="assets/"], script[src*="assets/"]');return!!(t&&!n)}catch{return!1}}async function Ua(){try{if(typeof window!="undefined"){let i=await fetch("./build-settings.json");if(i.ok){let e=await i.json();return console.log("[AssetLoader] Loaded build settings:",e),e}}}catch{}return null}function Ga(){try{if(typeof window!="undefined"){let i=new XMLHttpRequest;if(i.open("GET","./build-settings.json",!1),i.send(),i.status===200&&i.responseText){let e=JSON.parse(i.responseText);return console.log("[AssetLoader] Loaded build settings (sync):",e),e}}}catch{}return null}async function qa(){if(console.log(`[AssetLoader] getInlineAssets() called - Effective mode: ${P}`),Object.keys(de).length>0)return console.log("[AssetLoader] Returning cached inline assets:",Object.keys(de)),de;if(typeof window!="undefined"&&window.INLINE_ASSETS)return console.log("[AssetLoader] Using pre-loaded INLINE_ASSETS from window:",Object.keys(window.INLINE_ASSETS)),de={...window.INLINE_ASSETS},de;if(!(P==="publish"&&re!==!1))return console.log("[AssetLoader] Inline assets disabled for this build mode."),de;if(!bi){let e=typeof window!="undefined"?new URL("inline-assets.js",window.location.href).href:"./inline-assets.js";console.log("[AssetLoader] Loading inline assets from:",e),bi=(async()=>{try{try{let s=await import(e+"?t="+Date.now());if(s.INLINE_ASSETS)return console.log("[AssetLoader] Loaded INLINE_ASSETS via ES module:",Object.keys(s.INLINE_ASSETS)),s.INLINE_ASSETS}catch(s){console.warn("[AssetLoader] ES module import failed, trying text parse:",s)}let t=await fetch(e);if(!t.ok)throw new Error(`HTTP ${t.status}: ${t.statusText}`);let n=await t.text();console.log("[AssetLoader] Received JS code, length:",n.length);let a=n.match(/export\s+const\s+INLINE_ASSETS\s*=\s*({[\s\S]*?});?\s*$/m);if(a)try{let s=a[1];console.log("[AssetLoader] Found INLINE_ASSETS export, parsing...");let r=new Function("return "+s)();return console.log("[AssetLoader] Parsed inline assets:",Object.keys(r)),r}catch(s){return console.warn("[AssetLoader] Failed to parse inline assets:",s),{}}else return console.warn("[AssetLoader] INLINE_ASSETS export not found in response"),console.log("[AssetLoader] JS code preview:",n.substring(0,500)),{}}catch(t){return console.warn("[AssetLoader] Failed to load inline assets:",t),{}}})()}return de=await bi,console.log("[AssetLoader] Final inline assets cache:",Object.keys(de)),de}function yi(i){return i===null||typeof i!="object"||(Object.freeze(i),Object.values(i).forEach(e=>yi(e))),i}function Va(i=64,e=64,t=16711680){let n=document.createElement("canvas");n.width=i,n.height=e;let a=n.getContext("2d");return a.fillStyle=`#${t.toString(16).padStart(6,"0")}`,a.fillRect(0,0,i,e),a.strokeStyle="#000",a.strokeRect(0,0,i,e),a.fillStyle="#fff",a.font="10px sans-serif",a.textAlign="center",a.fillText("MISSING",i/2,e/2),pe.Texture.from(n)}function Dt(i,e){Dn.set(i,e)}var pe,zn,$n,Oe,P,re,Ae,de,bi,Dn,Te,Ht=ce(()=>{"use strict";pe=require("pixi.js");mi();zn=typeof __BUILD_MODE__!="undefined"?__BUILD_MODE__:"undefined",$n=Ba(),Oe=typeof window!="undefined"?window.__BUILD_SETTINGS__:null,P=$n?"publish":zn,re=Oe==null?void 0:Oe.assetsInlined;Oe!=null&&Oe.buildMode&&(P=Oe.buildMode,console.log(`[AssetLoader] Build mode overridden by inline settings: ${P}`));Ae=Ga();Ae!=null&&Ae.buildMode&&(P=Ae.buildMode,console.log(`[AssetLoader] Build mode overridden by sync settings: ${P}`));(Ae==null?void 0:Ae.assetsInlined)!==void 0&&(re=Ae.assetsInlined);Ua().then(i=>{i!=null&&i.buildMode&&i.buildMode!==P&&(P=i.buildMode,console.log(`[AssetLoader] Build mode overridden by settings: ${P}`)),(i==null?void 0:i.assetsInlined)!==void 0&&(re=i.assetsInlined)}).catch(()=>{});console.log(`[AssetLoader] MODULE LOADED - Compile: ${zn}, Runtime: ${$n?"publish":"dev"}, Effective: ${P}`);de={},bi=null;Dn=new Map;Te=class{static async load(e,t,n,a){let s=`${e}:${t.path}`,r=se.get(s);if(r!==void 0)return r;console.log(`[AssetLoader] Loading asset: ${e}, type: ${t.type}, Effective mode: ${P}`),console.log(`[AssetLoader] Window defined: ${typeof window!="undefined"}, INLINE_ASSETS exists: ${!!(typeof window!="undefined"&&window.INLINE_ASSETS)}, keys: ${typeof window!="undefined"&&window.INLINE_ASSETS?Object.keys(window.INLINE_ASSETS).length:"N/A"}`);let o=await qa(),l=o[e];if(!l&&a&&(l=o[a],l&&console.log(`[AssetLoader] Found inline data for ${e} using configId: ${a}`)),!l&&t.path){let c=t.path.split("/");if(c.length>=2){let p=c[c.length-1].split(".")[0];o[p]&&(l=o[p],console.log(`[AssetLoader] Found inline data for ${e} using assetName: ${p}`))}}if(console.log("[AssetLoader] Inline data for",e,":",l?"FOUND":"NOT FOUND"),P==="publish"&&re!==!1&&(console.log("[AssetLoader] \u26A0\uFE0F PUBLISH MODE DETECTED - inline assets are MANDATORY"),!l))throw new Error(`[AssetLoader] PUBLISH MODE: Inline asset required but NOT FOUND for object: ${e}, path: ${t.path}`);let u=Dn.get(t.type);if(u)try{let c=await u(t.path,l,e,n);return se.set(s,c),c}catch(c){return this.handleFailure(e,t.type,c)}try{let c;switch(t.type){case"image":c=await this.loadImage(t.path,l);break;case"json":c=await this.loadJSON(t.path,l),c=yi(c);break;default:throw new Error(`Unknown asset type: ${t.type}`)}return se.set(s,c),c}catch(c){return this.handleFailure(e,t.type,c)}}static async loadImage(e,t){let n=P==="publish",a=n&&re!==!1;if(console.log(`[AssetLoader] loadImage - Effective mode: ${P}, isPublishMode: ${n}, inlineData: ${t?"EXISTS":"MISSING"}`),a){if(console.log("[AssetLoader] PUBLISH MODE ACTIVATED - inline assets are MANDATORY"),!t)throw new Error(`[AssetLoader] Publish mode: inline asset required but not found for object. Path: ${e}`);if(typeof t!="string"||!t.startsWith("data:"))throw new Error(`[AssetLoader] Publish mode: inline asset must be data URI string, got: ${typeof t}`);try{return await pe.Assets.load(t)}catch(s){throw console.error("[AssetLoader] Failed to load texture from data URI:",s),s}}if(t&&typeof t=="string"&&t.startsWith("data:"))try{return await pe.Assets.load(t)}catch(s){return console.error("[AssetLoader] Failed to load texture from data URI, falling back to path:",s),await pe.Assets.load(e)}return await pe.Assets.load(e)}static async loadJSON(e,t){let n=P==="publish",a=n&&re!==!1;if(console.log(`[AssetLoader] loadJSON - Effective mode: ${P}, isPublishMode: ${n}, inlineData: ${t?"EXISTS":"MISSING"}`),a){if(console.log("[AssetLoader] PUBLISH MODE ACTIVATED - inline assets are MANDATORY"),!t)throw new Error(`[AssetLoader] Publish mode: inline asset required but not found for path: ${e}`);if(typeof t=="object"&&t!==null)return t;if(typeof t=="string"&&t.startsWith("data:")){let r=atob(t.split(",")[1]);return JSON.parse(r)}return JSON.parse(t)}if(t){if(typeof t=="object"&&t!==null)return t;if(typeof t=="string"&&t.startsWith("data:")){let r=atob(t.split(",")[1]);return JSON.parse(r)}return JSON.parse(t)}let s=await fetch(e);if(!s.ok)throw new Error(`JSON fetch failed: ${e}`);return s.json()}static handleFailure(e,t,n){if(P==="dev"){let s=t==="image"?Va():yi({__placeholder:!0,type:t});return se.set(e+":"+((n==null?void 0:n.path)||"missing"),s),s}throw n}};Dt("image",async(i,e)=>{let t=P==="publish",n=t&&re!==!1,a=P==="brand",s=t&&re===!1;if(console.log(`[AssetLoader] registerType('image') - Effective mode: ${P}, isPublishMode: ${t}, isBrandMode: ${a}, inlineData: ${e?"EXISTS":"MISSING"}`),n){if(console.log("[AssetLoader] PUBLISH MODE ACTIVATED - inline assets are MANDATORY"),!e)throw new Error(`[AssetLoader] Publish mode: inline asset required but not found for path: ${i}`);if(typeof e!="string"||!e.startsWith("data:"))throw new Error(`[AssetLoader] Publish mode: inline asset must be data URI string, got: ${typeof e}`);return pe.Assets.load(e)}let r=i;return(a||s)&&i&&!i.startsWith("assets/")&&(typeof window!="undefined"&&!document.querySelector('link[href*="assets/"], script[src*="assets/"]')&&!document.querySelector('link[href*="configs/"], script[src*="configs/"]')?(r=i,console.log(`[AssetLoader] BRAND MODE: flattened build, using path "${i}" as-is`)):(r=`assets/${i}`,console.log(`[AssetLoader] BRAND MODE: transformed path "${i}" -> "${r}"`))),pe.Assets.load(e||r)});Dt("json",async(i,e)=>{let t=P==="publish",n=t&&re!==!1,a=P==="brand",s=t&&re===!1;if(console.log(`[AssetLoader] registerType('json') - Effective mode: ${P}, isPublishMode: ${t}, isBrandMode: ${a}, inlineData: ${e?"EXISTS":"MISSING"}`),n){if(console.log("[AssetLoader] PUBLISH MODE ACTIVATED - inline assets are MANDATORY"),!e)throw new Error(`[AssetLoader] Publish mode: inline asset required but not found for path: ${i}`);return typeof e=="object"&&e!==null?e:typeof e=="string"&&e.startsWith("data:")?JSON.parse(atob(e.split(",")[1])):JSON.parse(e)}let r=i;if((a||s)&&i&&!i.startsWith("assets/")&&(typeof window!="undefined"&&!document.querySelector('link[href*="assets/"], script[src*="assets/"]')&&!document.querySelector('link[href*="configs/"], script[src*="configs/"]')?(r=i,console.log(`[AssetLoader] BRAND MODE: flattened build, using path "${i}" as-is`)):(r=`assets/${i}`,console.log(`[AssetLoader] BRAND MODE: transformed path "${i}" -> "${r}"`))),e)return typeof e=="object"&&e!==null?e:typeof e=="string"&&e.startsWith("data:")?JSON.parse(atob(e.split(",")[1])):JSON.parse(e);let o=await fetch(r);if(!o.ok)throw new Error(`JSON fetch failed: ${i}`);return o.json()})});function Nt(i,e){Hn.init(i,e),typeof window!="undefined"&&(window.__AssetTextures=Le)}var vi,Hn,Le,ht=ce(()=>{"use strict";Ht();vi=class{constructor(){this.textures=new Map;this.readyPromise=null;this.priorityReadyPromise=null;this.priorityReadyResolve=null;this.config=null;this.app=null;this.attempted=new Set;this.waiters=new Set}init(e,t){if(this.config===e&&this.app===t&&this.priorityReadyPromise){console.log("[AssetTextures] init called with same config/app; keeping existing state");return}this.textures.clear(),this.readyPromise=null,this.priorityReadyPromise=null,this.priorityReadyResolve=null,this.attempted.clear(),this.waiters.clear(),this.priorityReadyPromise=new Promise(n=>{this.priorityReadyResolve=n}),this.config=e,this.app=t,console.log("[AssetTextures] Initialized with config, cleared previous textures")}async ready(){if(this.readyPromise){await this.readyPromise;return}if(!this.config)throw new Error("[AssetTextures] Must call init() before ready() - config is null");if(!this.app)throw new Error("[AssetTextures] Must call init() before ready() - app is null");let e=this.config,t=this.app;return this.readyPromise=(async()=>{var r;console.log("[AssetTextures] Loading all assets...");let n=new Set(["background_loading_1"]),a=[],s=[];for(let[o,l]of e.objects.entries()){let d=(r=l.render)==null?void 0:r.asset;if(!d)continue;let u=async()=>{var c;try{let p=(c=l.identity)==null?void 0:c.id;console.log(`[AssetTextures] Loading ${d.type}: ${o} (${p})`);let g=await Te.load(o,d,t,p);this.textures.set(o,g),console.log(`[AssetTextures] \u2713 Loaded: ${o}`)}catch(p){console.error(`[AssetTextures] \u2717 Failed to load: ${o}`,p)}finally{this.attempted.add(o);try{for(let p of Array.from(this.waiters))p()}catch{}}};n.has(o)?a.push(u()):s.push(u())}a.length>0&&(console.log("[AssetTextures] Phase 1: Loading priority assets (loading screen)..."),await Promise.all(a),console.log("[AssetTextures] Phase 1: Priority assets ready")),this.priorityReadyResolve&&this.priorityReadyResolve(),console.log("[AssetTextures] Phase 2: Loading remaining assets..."),await Promise.all(s),console.log("[AssetTextures] All textures loaded:",Array.from(this.textures.keys()))})(),this.readyPromise}async priorityReady(){return this.priorityReadyPromise?this.priorityReadyPromise:Promise.resolve()}async waitFor(e,t={}){if(!this.config)throw new Error("[AssetTextures] Must call init() before waitFor() - config is null");if(!this.app)throw new Error("[AssetTextures] Must call init() before waitFor() - app is null");let a=Array.from(new Set((e||[]).filter(o=>typeof o=="string"&&o))).filter(o=>{var l,d,u,c;try{let p=(u=(d=(l=this.config)==null?void 0:l.objects)==null?void 0:d.get)==null?void 0:u.call(d,o);return!!((c=p==null?void 0:p.render)!=null&&c.asset)}catch{return!1}});if(a.length===0)return;this.ready().catch(()=>{});let s=()=>a.every(o=>this.textures.has(o)||this.attempted.has(o));if(s())return;let r=typeof t.timeoutMs=="number"?t.timeoutMs:15e3;await new Promise(o=>{let l=!1,d=()=>{l||s()&&(l=!0,this.waiters.delete(d),o())};this.waiters.add(d),d(),r>0&&setTimeout(()=>{l||(l=!0,this.waiters.delete(d),console.warn("[AssetTextures] waitFor timed out; continuing",{ids:a}),o())},r)})}get(e){return this.textures.get(e)}set(e,t){this.textures.set(e,t),console.log(`[AssetTextures] Updated texture: ${e}`)}clear(){this.textures.clear(),this.readyPromise=null,console.log("[AssetTextures] Cleared all textures")}getAllIds(){return Array.from(this.textures.keys())}},Hn=new vi,Le=new Proxy(Hn,{get(i,e){return e in i&&typeof i[e]=="function"?i[e].bind(i):i.get(e)},set(i,e,t){return i.set(e,t),!0}})});var Bn={};Wi(Bn,{AssetEditorModal:()=>Ci});var Ci,Ai=ce(()=>{"use strict";Ci=class{constructor(){this.modal=null;this.currentObjectId=null;this.currentPath=null;this.currentAsset="";this.onApplyCallback=null}show(e,t,n,a){this.currentObjectId=e,this.currentPath=t,this.currentAsset=n,this.onApplyCallback=a,this.createModal(e,n),document.body.appendChild(this.modal),this.attachModalListeners()}createModal(e,t){let n=document.createElement("div");n.className="asset-editor-modal",n.innerHTML=`
|
|
2
2
|
<div class="asset-editor-card">
|
|
3
3
|
<div class="asset-editor-header">
|
|
4
4
|
<div>
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
<button class="debug-btn primary" data-modal-apply>Apply</button>
|
|
44
44
|
</div>
|
|
45
45
|
</div>
|
|
46
|
-
`,this.modal=i}attachModalListeners(){if(!this.modal)return;this.modal.querySelectorAll("[data-modal-close]").forEach(r=>{r.addEventListener("click",()=>this.close())}),this.modal.querySelectorAll("[data-tab]").forEach(r=>{r.addEventListener("click",o=>{let d=o.target.dataset.tab;d&&this.switchTab(d)})});let i=this.modal.querySelector("[data-ai-generate]");i==null||i.addEventListener("click",()=>{this.openAiEditor("generate")});let a=this.modal.querySelector("[data-ai-edit]");a==null||a.addEventListener("click",()=>{this.openAiEditor("edit")});let s=this.modal.querySelector("[data-modal-apply]");s==null||s.addEventListener("click",()=>{this.apply()}),this.modal.addEventListener("click",r=>{r.target===this.modal&&this.close()})}switchTab(e){if(!this.modal)return;this.modal.querySelectorAll("[data-tab]").forEach(a=>{a.classList.toggle("active",a.getAttribute("data-tab")===e)}),this.modal.querySelectorAll("[data-tab-panel]").forEach(a=>{a.classList.toggle("active",a.getAttribute("data-tab-panel")===e)})}openAiEditor(e){let t=window.__openAiEditor;if(typeof t!="function"){alert("AI Editor not available. Please check your setup.");return}let i="";e==="edit"&&this.currentAsset?i=`Edit this image: ${this.currentObjectId}`:i=`Create an image for: ${this.currentObjectId}`,t(this.currentObjectId||"unknown",i,this.currentAsset,{path:this.currentPath,onApply:a=>{this.onApplyCallback&&this.onApplyCallback(a),this.close()}})}apply(){this.onApplyCallback&&this.onApplyCallback("library/placeholder.png"),this.close()}close(){this.modal&&this.modal.parentNode&&this.modal.parentNode.removeChild(this.modal),this.modal=null,this.currentObjectId=null,this.currentPath=null,this.onApplyCallback=null}}});var Ns={};Wn(Ns,{AssetCache:()=>ae,AssetLoader:()=>Ae,AssetSystem:()=>Kt,AssetTextures:()=>Te,Assets:()=>ua,BaseSystem:()=>Ze,GameEngine:()=>Yt,GameObject:()=>Ct,GameObjectManager:()=>Xe,ObjectFactory:()=>Le,Renderer:()=>St,RuntimeObjectRegistry:()=>Qe,Transform:()=>Et,applyScreenAnchor:()=>Zt,basePixi:()=>la,clearResponsiveElements:()=>ha,createPixiBase:()=>Vt,getRegisteredFontIds:()=>aa,globalResponsiveMultipliers:()=>Tt,initAssetTextures:()=>Ht,initAssets:()=>ga,layout:()=>ma,playLottieOverlay:()=>ra,registerFont:()=>ia,registerType:()=>$t,resolveAnchorVec2:()=>$e,resolveFont:()=>ta,resolveFontWeight:()=>na,resolveScreenAnchorPoint:()=>et,resolveScreenRatioPoint:()=>tt,runInitSequence:()=>ba,setLottieInstance:()=>Nt,spawnSceneFromConfig:()=>da,updateScreenState:()=>Jt});module.exports=Sa(Ns);var ea=require("pixi.js");var Se={};function _t(n,e,t=!1){Se[n]||(Se[n]=[]),Se[n].push({fn:e,once:t})}function on(n,e){if(Se[n]){if(!e){delete Se[n];return}Se[n]=Se[n].filter(t=>t.fn!==e)}}function Pt(n,...e){let t=Se[n];if(t)for(let i of[...t])i.fn(...e),i.once&&on(n,i.fn)}function J(n,e){_t(n,e,!0)}var $=null,ee=[],He=null;function Jn(n){$=n,ee=[],He!==null&&(clearTimeout(He),He=null)}function Zn(){var n,e,t;return{endpoint:($==null?void 0:$.endpoint)||"",transport:($==null?void 0:$.transport)||"beacon",batchSize:(n=$==null?void 0:$.batchSize)!=null?n:10,flushIntervalMs:(e=$==null?void 0:$.flushIntervalMs)!=null?e:300,maxQueue:(t=$==null?void 0:$.maxQueue)!=null?t:200,debug:!!($!=null&&$.debug)}}async function Kn(n,e,t,i){let a=JSON.stringify(e);if(t==="beacon"&&typeof navigator!="undefined"&&typeof navigator.sendBeacon=="function")try{let s=navigator.sendBeacon(n,new Blob([a],{type:"application/json"}));i&&console.log("[handler.telemetry] beacon",s,e);return}catch(s){i&&console.warn("[handler.telemetry] beacon failed, fallback to fetch",s)}try{await fetch(n,{method:"POST",headers:{"Content-Type":"application/json"},body:a,keepalive:!0}),i&&console.log("[handler.telemetry] fetch",e)}catch(s){i&&console.warn("[handler.telemetry] fetch failed",s)}}function ln(n,e){let t=Zn();if(e&&t.endpoint){if(ee.push(n),ee.length>t.maxQueue&&(ee=ee.slice(ee.length-t.maxQueue)),ee.length>=t.batchSize){Xn();return}He===null&&(He=window.setTimeout(()=>{He=null,Xn()},t.flushIntervalMs))}}async function Xn(){let n=Zn();if(!n.endpoint||ee.length===0)return;let e=ee.splice(0,n.batchSize);await Kn(n.endpoint,{events:e},n.transport,n.debug),ee.length>0&&await Kn(n.endpoint,{events:ee.splice(0,n.batchSize)},n.transport,n.debug)}function Qn(n){return Math.max(0,Math.min(1,n))}function Ca(n){let e=String(n!=null?n:"power2.out");if(e==="linear")return t=>t;if(e==="sine.inOut")return t=>.5-Math.cos(Math.PI*t)/2;if(e==="power2.out"||e==="easeOutQuad")return t=>1-(1-t)*(1-t);if(e.startsWith("back.out")){let t=e.match(/back\.out\(([\d.]+)\)/),i=t?Number(t[1]):1.8;return a=>1+(i+1)*Math.pow(a-1,3)+i*Math.pow(a-1,2)}return t=>1-(1-t)*(1-t)}function ut(){return typeof performance!="undefined"&&performance.now?performance.now():Date.now()}function Aa(n,e){let t=n==null?void 0:n[e];return typeof t=="number"?t:0}function ei(n,e,t){try{n[e]=t}catch{}}function Ta(n){let e=n==null?void 0:n.scale;if(!e)return null;let t=typeof e.x=="number"?e.x:1,i=typeof e.y=="number"?e.y:1;return{x:t,y:i}}function ti(n,e){let t=n==null?void 0:n.scale;if(t)try{typeof t.set=="function"?t.set(e.x,e.y):(typeof t.x=="number"&&(t.x=e.x),typeof t.y=="number"&&(t.y=e.y))}catch{}}function ni(n,e){let t=Ta(n);if(!t)return{from:null,to:null};let i=null,a=null;return typeof e.scale=="number"?(i=e.scale,a=e.scale):e.scale&&typeof e.scale=="object"&&(typeof e.scale.x=="number"&&(i=e.scale.x),typeof e.scale.y=="number"&&(a=e.scale.y)),typeof e.scaleX=="number"&&(i=e.scaleX),typeof e.scaleY=="number"&&(a=e.scaleY),i===null&&a===null?{from:null,to:null}:{from:{x:t.x,y:t.y},to:{x:i!=null?i:t.x,y:a!=null?a:t.y}}}function ii(){let n=new Set,e=new WeakMap,t=null,i=()=>{if(t!=null)return;t=requestAnimationFrame(()=>{t=null,o(),n.size>0&&i()})},a=u=>{var p;n.add(u);let c=(p=e.get(u.target))!=null?p:new Set;c.add(u),e.set(u.target,c),i()},s=u=>{n.delete(u);let c=e.get(u.target);c&&(c.delete(u),c.size===0&&e.delete(u.target))},r=u=>{u.killed||(u.killed=!0,s(u))},o=()=>{var c,p;let u=ut();for(let g of Array.from(n)){if(g.killed||g.paused)continue;let m=u-g.startMs-g.delayMs;if(m<0)continue;let f=g.durationMs>0?m/g.durationMs:1,C=Qn(f),b=g.repeat>=0?g.repeat+1:1,h=g.repeat>0?Math.min(Math.floor(f),b-1):0;if(g.repeat>0&&f>=1){let y=f-h;C=Qn(y)}let v=g.ease(C);g.yoyo&&h%2===1&&(v=1-v);for(let y of g.props)ei(g.target,y.key,y.from+(y.to-y.from)*v);g.scaleFrom&&g.scaleTo&&ti(g.target,{x:g.scaleFrom.x+(g.scaleTo.x-g.scaleFrom.x)*v,y:g.scaleFrom.y+(g.scaleTo.y-g.scaleFrom.y)*v});try{(c=g.onUpdate)==null||c.call(g)}catch{}if(f>=b){r(g);try{(p=g.onComplete)==null||p.call(g)}catch{}}}},l=(u,c,p)=>{var y;let g=Math.max(0,(typeof c.duration=="number"?c.duration:.5)*1e3),m=Math.max(0,(typeof c.delay=="number"?c.delay:0)*1e3+((y=p==null?void 0:p.delayMsOverride)!=null?y:0)),f=Ca(c.ease),C=typeof c.repeat=="number"?Math.max(0,c.repeat|0):0,b=c.yoyo===!0,h=new Set(["duration","delay","ease","repeat","yoyo","onUpdate","onComplete","scale","scaleX","scaleY"]),v=[];for(let I of Object.keys(c)){if(h.has(I))continue;let M=c[I];typeof M=="number"&&v.push({key:I,from:Aa(u,I),to:M})}let w=ni(u,c);return{target:u,startMs:ut(),delayMs:m,durationMs:g,ease:f,props:v,scaleFrom:w.from,scaleTo:w.to,repeat:C,yoyo:b,onUpdate:typeof c.onUpdate=="function"?c.onUpdate:void 0,onComplete:typeof c.onComplete=="function"?c.onComplete:void 0,killed:!1,paused:!1,pauseAtMs:null}},d={to(u,c){let p=l(u,c);return a(p),{kill:()=>r(p),pause:()=>{p.paused||(p.paused=!0,p.pauseAtMs=ut())},resume:()=>{var f;if(!p.paused)return;let g=(f=p.pauseAtMs)!=null?f:ut(),m=ut()-g;p.startMs+=m,p.paused=!1,p.pauseAtMs=null},isActive:()=>!p.killed&&!p.paused}},fromTo(u,c,p){return d.set(u,c),d.to(u,p)},set(u,c){if(!u||!c)return;for(let g of Object.keys(c)){let m=c[g];g==="scale"||g==="scaleX"||g==="scaleY"||typeof m=="number"&&ei(u,g,m)}let p=ni(u,c);p.to&&ti(u,p.to)},killTweensOf(u){let c=e.get(u);if(c)for(let p of Array.from(c))r(p)},timeline(u={}){let c=[],p=0,g=!1,m=[],f=h=>{if(typeof h=="number")return Math.max(0,h*1e3);let v=typeof h=="string"?h.trim():"";return v.startsWith("+=")?p+Math.max(0,Number(v.slice(2))*1e3||0):v?Math.max(0,Number(v)*1e3||0):p},C=h=>{c.push(h);let v=Math.max(0,(typeof h.vars.duration=="number"?h.vars.duration:.5)*1e3);p=Math.max(p,h.atMs+v)},b={to(h,v,w){return C({kind:"to",target:h,vars:v,atMs:f(w)}),b},fromTo(h,v,w,y){return C({kind:"fromTo",target:h,vars:w,from:v,atMs:f(y)}),b},play(){var h,v;if(g)return b;g=!0,m=[];for(let w of c)w.kind==="fromTo"&&d.set(w.target,(h=w.from)!=null?h:{}),m.push(d.to(w.target,{...w.vars,delay:w.atMs/1e3+((v=w.vars.delay)!=null?v:0)}));return b},pause(){for(let h of m)h.pause();return b},kill(){for(let h of m)h.kill();m=[],g=!1}};return u.paused||b.play(),b}};return d}function ai(){if(typeof window=="undefined")return;let n=window;if(!n.gsap)try{n.gsap=ii()}catch{}}var si={name:"handler-playable-sdk",version:"0.5.546",type:"module",description:"Handler Playable SDK v0.1 with contract-aligned surface (root sandbox, canonical event envelope).",main:"dist/index.cjs",module:"dist/index.js",types:"dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js",require:"./dist/index.cjs"},"./pixi":{types:"./dist/pixi/index.d.ts",import:"./dist/pixi/index.js",require:"./dist/pixi/index.cjs"},"./pixi/index.css":{import:"./dist/pixi/index.css",require:"./dist/pixi/index.css"},"./three":{types:"./dist/three/index.d.ts",import:"./dist/three/index.js",require:"./dist/three/index.cjs"},"./cli":{types:"./dist/cli/index.d.ts",import:"./dist/cli/index.js",require:"./dist/cli/index.cjs"}},bin:{"handler-student-helper":"./bin/student-helper.mjs","handler-validate":"./bin/validate.mjs","handler-sync-screens":"./bin/sync-screens.mjs","handler-brand-dna":"./bin/brand-dna.mjs","handler-setup-library":"./bin/setup-library.mjs","handler-screen-helper":"./bin/screen-helper.mjs"},scripts:{prebuild:"python3 src/preview/build-css.py",build:"tsup src/index.ts src/pixi/index.ts src/three/index.ts src/cli/index.ts --format cjs,esm --dts --clean --minify --external lottie-web && npm run create-mjs-symlinks && npm run postbuild-cli && npm run obfuscate && npm run postbuild",postbuild:"python3 src/preview/copy-css-to-dist.py","postbuild-cli":"cp src/cli/*.mjs dist/cli/ && chmod +x dist/cli/*.mjs && chmod +x bin/*.mjs","create-mjs-symlinks":"cd dist && ln -sf index.js index.mjs && cd pixi && ln -sf index.js index.mjs && cd ../three && ln -sf index.js index.mjs","build:dev":"tsup src/index.ts src/pixi/index.ts src/three/index.ts src/cli/index.ts --format cjs,esm --dts --clean --external lottie-web && npm run create-mjs-symlinks && npm run postbuild-cli",obfuscate:"javascript-obfuscator dist/pixi/index.js --output dist/pixi/index.js --config obfuscator.config.json && javascript-obfuscator dist/three/index.js --output dist/three/index.js --config obfuscator.config.json && javascript-obfuscator dist/cli/index.js --output dist/cli/index.js --config obfuscator.config.json && npm run obfuscate-cli","obfuscate-cli":'for file in dist/cli/*.mjs; do javascript-obfuscator "$file" --output "$file" --config obfuscator.config.json; done',lint:"eslint 'src/**/*.{ts,tsx}'",typecheck:"tsc --noEmit",prepublishOnly:"npm run build","publish:update":"node scripts/publish-and-update.cjs patch","publish:update:minor":"node scripts/publish-and-update.cjs minor","publish:update:major":"node scripts/publish-and-update.cjs major"},author:"Handler",license:"MIT",publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/HandlerAIGames/handler-playable-sdk.git"},files:["dist","bin","LICENSE","README.md"],peerDependencies:{"lottie-web":"^5.0.0","pixi.js":"^8.0.0",three:"^0.182.0"},peerDependenciesMeta:{"pixi.js":{optional:!0},three:{optional:!0},"lottie-web":{optional:!0}},devDependencies:{"@types/three":"^0.182.0",eslint:"^9.39.2","javascript-obfuscator":"^5.1.0","pixi.js":"8.8.1",three:"^0.182.0","ts-node":"^10.9.2",tsup:"^8.4.0",typescript:"^5.7.2","typescript-eslint":"^8.53.0"},dependencies:{"@google/genai":"^1.35.0","@google/generative-ai":"^0.24.1",jszip:"^3.10.1",sharp:"^0.34.5"}};var Z=0,ka=Z++,ri=Z++,oi=Z++,li=Z++,ci=Z++,di=Z++,pi=Z++,ui=Z++,gi=Z++,hi=Z++,fi=Z++,mi=Z++,P=ka;function bi(){return P===ri}function yi(){return P===oi}function vi(){return P===li}function wi(){return P===ci}function Ne(){return P===di}function Fe(){return P===pi}function xi(){return P===ui}function Ei(){return P===gi}function Si(){return P===hi}function cn(){return P===fi}function dn(){return P===mi}function Ci(){let n=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none",e=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed";if(n==="mraid")try{mraid.getState(),P=ri;return}catch{}else if(n==="dapi")try{dapi.isReady(),P=oi;return}catch{}if(e==="facebook")try{typeof FbPlayableAd!="undefined"&&(P=li)}catch{}else if(e==="google")try{typeof ExitApi!="undefined"&&(P=ci)}catch{}else if(e==="mintegral")window.gameReady&&(P=di);else if(e==="tapjoy")window.TJ_API&&(P=pi);else if(e==="tiktok")window.openAppStore&&(P=ui);else if(e==="smadex")try{window.smxTracking&&(P=gi)}catch{}else if(e==="snapchat")try{window.ScPlayableAd&&(P=hi)}catch{}else e==="vungle"?P=fi:(n==="nucleo"||e==="nucleo")&&(P=mi)}var Ot=Mt(require("lottie-web"),1),Ai=Ot.default;typeof window!="undefined"&&(window.lottie=Ot.default,window.__baseLottie=Ot.default);gn();function D(n,e){let t=(a,s)=>s===0?a:t(s,a%s),i=t(n,e);return`${n/i}:${e/i}`}var vr=[{id:"iphone-15-pro-max",label:"iPhone 15 Pro Max",width:430,height:932,category:"iphone",ratio:D(430,932)},{id:"iphone-15-pro",label:"iPhone 15 Pro",width:393,height:852,category:"iphone",ratio:D(393,852)},{id:"iphone-15",label:"iPhone 15",width:393,height:852,category:"iphone",ratio:D(393,852)},{id:"iphone-14",label:"iPhone 14",width:390,height:844,category:"iphone",ratio:D(390,844)},{id:"iphone-se",label:"iPhone SE",width:375,height:667,category:"iphone",ratio:D(375,667)},{id:"iphone-12-mini",label:"iPhone 12 Mini",width:360,height:780,category:"iphone",ratio:D(360,780)}],wr=[{id:"pixel-8-pro",label:"Pixel 8 Pro",width:448,height:998,category:"android",ratio:D(448,998)},{id:"pixel-8",label:"Pixel 8",width:412,height:915,category:"android",ratio:D(412,915)},{id:"samsung-s24-ultra",label:"Samsung S24 Ultra",width:412,height:915,category:"android",ratio:D(412,915)},{id:"samsung-s24",label:"Samsung S24",width:360,height:780,category:"android",ratio:D(360,780)},{id:"samsung-a54",label:"Samsung A54",width:412,height:915,category:"android",ratio:D(412,915)},{id:"oneplus-12",label:"OnePlus 12",width:412,height:915,category:"android",ratio:D(412,915)}],xr=[{id:"ipad-pro-12",label:'iPad Pro 12.9"',width:1024,height:1366,category:"tablet",ratio:D(1024,1366)},{id:"ipad-pro-11",label:'iPad Pro 11"',width:834,height:1194,category:"tablet",ratio:D(834,1194)},{id:"ipad-air",label:"iPad Air",width:820,height:1180,category:"tablet",ratio:D(820,1180)},{id:"ipad-mini",label:"iPad Mini",width:768,height:1024,category:"tablet",ratio:D(768,1024)},{id:"samsung-tab-s9",label:"Samsung Tab S9",width:800,height:1280,category:"tablet",ratio:D(800,1280)}],Ii=[{id:"playable-portrait",label:"Playable Portrait",width:320,height:480,category:"playable",ratio:"2:3",mraidScale:1},{id:"mraid-320x480",label:"MRAID 320\xD7480",width:320,height:480,category:"playable",ratio:"2:3",mraidScale:1},{id:"iphone-14",label:"iPhone 14",width:390,height:844,category:"playable",ratio:D(390,844),mraidScale:.7},{id:"ipad-mini",label:"iPad Mini",width:768,height:1024,category:"playable",ratio:D(768,1024),mraidScale:.7}];var Er=[...Ii];var za=Ii[0];ce();var Fa=Mt(require("jszip"),1);function Da(n){return new Promise((e,t)=>{let i=new FileReader;i.onerror=()=>t(new Error("FileReader failed")),i.onload=()=>e(String(i.result||"")),i.readAsDataURL(n)})}function Ha(n){var a;let[e,t]=n.split(","),i=e==null?void 0:e.match(/data:(.*?);base64/);return{base64:t!=null?t:"",mimeType:(a=i==null?void 0:i[1])!=null?a:"image/png"}}async function Na(n){return await new Promise(e=>{let t=new Image;t.onload=()=>e({width:t.naturalWidth||t.width,height:t.naturalHeight||t.height}),t.onerror=()=>e(null),t.src=n})}async function hn(n){var e,t;try{console.log("[ImageUtils] Fetching image data from URL:",n);let i=await fetch(n);if(!i.ok)return console.warn("[ImageUtils] Fetch failed with status:",i.status,n),null;let a=await i.blob();console.log("[ImageUtils] Blob received, size:",a.size,"type:",a.type);let s=await Da(a),r=await Na(s),o=Ha(s);return console.log("[ImageUtils] Success resolution:",r==null?void 0:r.width,"x",r==null?void 0:r.height,"mime:",o.mimeType),{base64:o.base64,mimeType:o.mimeType,dataUrl:s,width:(e=r==null?void 0:r.width)!=null?e:0,height:(t=r==null?void 0:r.height)!=null?t:0}}catch(i){return console.error("[ImageUtils] Error fetching image data:",i),null}}async function Rt(n,e=30){try{console.log("[ImageUtils] Removing background color...");let t=await new Promise((c,p)=>{let g=new Image;g.onload=()=>c(g),g.onerror=()=>p(new Error("Failed to load image")),g.src=n}),i=document.createElement("canvas");i.width=t.width,i.height=t.height;let a=i.getContext("2d");if(!a)return console.error("[ImageUtils] Failed to get canvas context"),n;a.drawImage(t,0,0);let s=a.getImageData(0,0,i.width,i.height),r=s.data,l=[{name:"top-left",offset:0},{name:"top-right",offset:(i.width-1)*4},{name:"bottom-left",offset:(i.height-1)*i.width*4},{name:"bottom-right",offset:((i.height-1)*i.width+(i.width-1))*4}].map(c=>({r:r[c.offset],g:r[c.offset+1],b:r[c.offset+2]})),d=0;for(let c=0;c<r.length;c+=4){let p=r[c],g=r[c+1],m=r[c+2],f=!1;for(let C of l)if(Math.sqrt(Math.pow(p-C.r,2)+Math.pow(g-C.g,2)+Math.pow(m-C.b,2))<e){f=!0;break}f&&(r[c+3]=0,d++)}return console.log(`[ImageUtils] Removed background from ${d} pixels (4-corner sampling, tolerance: ${e})`),a.putImageData(s,0,0),i.toDataURL("image/png")}catch(t){return console.error("[ImageUtils] Error removing background:",t),n}}var Mi=require("@google/genai");async function fn(n,e,t=[],i={}){var a,s,r,o,l,d,u;try{if(!(n!=null&&n.trim()))throw new Error("Gemini API key is required");if(!(e!=null&&e.trim()))throw new Error("Prompt is required");for(let b=0;b<t.length;b++){let h=t[b];if(!h.base64||!h.mimeType)throw new Error(`Image ${b+1} is missing required data`);if(h.base64.length<1e3&&console.warn(`Image ${b+1} data appears very small, may be corrupted`),!h.mimeType.startsWith("image/"))throw new Error(`Image ${b+1} has invalid MIME type: ${h.mimeType}`)}let c=new Mi.GoogleGenAI({apiKey:n}),p="gemini-2.5-flash",g=[e];t.length>0&&t.forEach((b,h)=>{g.push({inlineData:{data:b.base64,mimeType:b.mimeType}}),console.log(`[Gemini] Added image ${h+1}: ${b.mimeType}, size: ${Math.round(b.base64.length/1024)}KB`)}),console.log(`[Gemini] Making request with ${t.length} images and prompt length: ${e.length}`);let m=await c.models.generateContent({model:p,contents:g}),f="",C=(r=(s=(a=m.candidates)==null?void 0:a[0])==null?void 0:s.content)==null?void 0:r.parts;if(C)for(let b of C)b.text&&(f+=b.text);if(!f.trim())throw new Error("Empty response from Gemini API");return console.log(`[Gemini] Response received, length: ${f.length}`),f}catch(c){throw console.error("[Gemini] API error:",c),(o=c.message)!=null&&o.includes("Unable to process input image")?new Error("Unable to process the uploaded image. Please ensure it's a valid PNG, JPG, or JPEG file under 10MB and not corrupted."):(l=c.message)!=null&&l.includes("API_KEY_INVALID")?new Error("Invalid Gemini API key. Please check your API key configuration."):(d=c.message)!=null&&d.includes("QUOTA_EXCEEDED")?new Error("Gemini API quota exceeded. Please try again later or check your billing."):(u=c.message)!=null&&u.includes("SAFETY")?new Error("Content was flagged by Gemini safety filters. Please try with different images."):c}}var _i=require("@google/genai");async function zt(n,e,t=[],i={}){try{console.info("[GEMINI-REAL-SDK] Initializing GoogleGenAI...");let a=new _i.GoogleGenAI({apiKey:n}),s=[{text:e}];t.length>0&&t.forEach((o,l)=>{console.info(`[GEMINI-REAL-SDK] Adding image part ${l}`),s.push({inlineData:{mimeType:o.mimeType,data:o.base64}})}),console.info("[GEMINI-REAL-SDK] Calling generateContent with model: gemini-2.5-flash-image");let r=await a.models.generateContent({model:"gemini-2.5-flash-image",contents:s});if(console.info("[GEMINI-REAL-SDK] Received response from model"),!r.candidates||!r.candidates[0]||!r.candidates[0].content||!r.candidates[0].content.parts)throw new Error("Gemini 2.5 Flash Image returned invalid response structure.");for(let o of r.candidates[0].content.parts)if(o.text)console.log(o.text);else if(o.inlineData){let l=o.inlineData.data,d=o.inlineData.mimeType||"image/png";return console.info("[GEMINI-REAL-SDK] Found inline image data in response"),`data:${d};base64,${l}`}throw new Error("Gemini 2.5 Flash Image returned no image data.")}catch(a){throw console.error("[GEMINI-REAL-SDK] Error in generateImageWithGemini25Flash:",JSON.stringify(a,Object.getOwnPropertyNames(a),2)),a}}var Wa=require("pixi.js");gt();ce();var Di=require("pixi.js");var Ya=require("pixi.js");ce();function ns(n){return new Promise((e,t)=>{let i=new FileReader;i.onerror=()=>t(new Error("FileReader failed")),i.onload=()=>e(String(i.result||"")),i.readAsDataURL(n)})}function is(n){var a;let[e,t]=n.split(","),i=e==null?void 0:e.match(/data:(.*?);base64/);return{base64:t!=null?t:"",mimeType:(a=i==null?void 0:i[1])!=null?a:"image/png"}}function as(n){return`
|
|
46
|
+
`,this.modal=n}attachModalListeners(){if(!this.modal)return;this.modal.querySelectorAll("[data-modal-close]").forEach(r=>{r.addEventListener("click",()=>this.close())}),this.modal.querySelectorAll("[data-tab]").forEach(r=>{r.addEventListener("click",o=>{let d=o.target.dataset.tab;d&&this.switchTab(d)})});let n=this.modal.querySelector("[data-ai-generate]");n==null||n.addEventListener("click",()=>{this.openAiEditor("generate")});let a=this.modal.querySelector("[data-ai-edit]");a==null||a.addEventListener("click",()=>{this.openAiEditor("edit")});let s=this.modal.querySelector("[data-modal-apply]");s==null||s.addEventListener("click",()=>{this.apply()}),this.modal.addEventListener("click",r=>{r.target===this.modal&&this.close()})}switchTab(e){if(!this.modal)return;this.modal.querySelectorAll("[data-tab]").forEach(a=>{a.classList.toggle("active",a.getAttribute("data-tab")===e)}),this.modal.querySelectorAll("[data-tab-panel]").forEach(a=>{a.classList.toggle("active",a.getAttribute("data-tab-panel")===e)})}openAiEditor(e){let t=window.__openAiEditor;if(typeof t!="function"){alert("AI Editor not available. Please check your setup.");return}let n="";e==="edit"&&this.currentAsset?n=`Edit this image: ${this.currentObjectId}`:n=`Create an image for: ${this.currentObjectId}`,t(this.currentObjectId||"unknown",n,this.currentAsset,{path:this.currentPath,onApply:a=>{this.onApplyCallback&&this.onApplyCallback(a),this.close()}})}apply(){this.onApplyCallback&&this.onApplyCallback("library/placeholder.png"),this.close()}close(){this.modal&&this.modal.parentNode&&this.modal.parentNode.removeChild(this.modal),this.modal=null,this.currentObjectId=null,this.currentPath=null,this.onApplyCallback=null}}});var Gs={};Wi(Gs,{AssetCache:()=>se,AssetLoader:()=>Te,AssetSystem:()=>si,AssetTextures:()=>Le,Assets:()=>ba,BaseSystem:()=>tt,GameEngine:()=>ai,GameObject:()=>Lt,GameObjectManager:()=>Qe,ObjectFactory:()=>ue,Renderer:()=>Tt,RuntimeObjectRegistry:()=>it,Transform:()=>At,applyScreenAnchor:()=>Ut,basePixi:()=>ga,clearResponsiveElements:()=>Un,createPixiBase:()=>ii,getRegisteredFontIds:()=>ca,globalResponsiveMultipliers:()=>bt,initAssetTextures:()=>Nt,initAssets:()=>ya,layout:()=>qn,playLottieOverlay:()=>pa,registerFont:()=>la,registerType:()=>Dt,resolveAnchorVec2:()=>ke,resolveFont:()=>ra,resolveFontWeight:()=>oa,resolveScreenAnchorPoint:()=>$e,resolveScreenRatioPoint:()=>De,runInitSequence:()=>va,setLottieInstance:()=>Xt,spawnSceneFromConfig:()=>fa,updateScreenState:()=>Bt});module.exports=Aa(Gs);var sa=require("pixi.js");var Ce={};function _t(i,e,t=!1){Ce[i]||(Ce[i]=[]),Ce[i].push({fn:e,once:t})}function oi(i,e){if(Ce[i]){if(!e){delete Ce[i];return}Ce[i]=Ce[i].filter(t=>t.fn!==e)}}function Ot(i,...e){let t=Ce[i];if(t)for(let n of[...t])n.fn(...e),n.once&&oi(i,n.fn)}function J(i,e){_t(i,e,!0)}var $=null,ee=[],Be=null;function Ji(i){$=i,ee=[],Be!==null&&(clearTimeout(Be),Be=null)}function Zi(){var i,e,t;return{endpoint:($==null?void 0:$.endpoint)||"",transport:($==null?void 0:$.transport)||"beacon",batchSize:(i=$==null?void 0:$.batchSize)!=null?i:10,flushIntervalMs:(e=$==null?void 0:$.flushIntervalMs)!=null?e:300,maxQueue:(t=$==null?void 0:$.maxQueue)!=null?t:200,debug:!!($!=null&&$.debug)}}async function Ki(i,e,t,n){let a=JSON.stringify(e);if(t==="beacon"&&typeof navigator!="undefined"&&typeof navigator.sendBeacon=="function")try{let s=navigator.sendBeacon(i,new Blob([a],{type:"application/json"}));n&&console.log("[handler.telemetry] beacon",s,e);return}catch(s){n&&console.warn("[handler.telemetry] beacon failed, fallback to fetch",s)}try{await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:a,keepalive:!0}),n&&console.log("[handler.telemetry] fetch",e)}catch(s){n&&console.warn("[handler.telemetry] fetch failed",s)}}function li(i,e){let t=Zi();if(e&&t.endpoint){if(ee.push(i),ee.length>t.maxQueue&&(ee=ee.slice(ee.length-t.maxQueue)),ee.length>=t.batchSize){Xi();return}Be===null&&(Be=window.setTimeout(()=>{Be=null,Xi()},t.flushIntervalMs))}}async function Xi(){let i=Zi();if(!i.endpoint||ee.length===0)return;let e=ee.splice(0,i.batchSize);await Ki(i.endpoint,{events:e},i.transport,i.debug),ee.length>0&&await Ki(i.endpoint,{events:ee.splice(0,i.batchSize)},i.transport,i.debug)}function Qi(i){return Math.max(0,Math.min(1,i))}function Ta(i){let e=String(i!=null?i:"power2.out");if(e==="linear")return t=>t;if(e==="sine.inOut")return t=>.5-Math.cos(Math.PI*t)/2;if(e==="power2.out"||e==="easeOutQuad")return t=>1-(1-t)*(1-t);if(e.startsWith("back.out")){let t=e.match(/back\.out\(([\d.]+)\)/),n=t?Number(t[1]):1.8;return a=>1+(n+1)*Math.pow(a-1,3)+n*Math.pow(a-1,2)}return t=>1-(1-t)*(1-t)}function gt(){return typeof performance!="undefined"&&performance.now?performance.now():Date.now()}function La(i,e){let t=i==null?void 0:i[e];return typeof t=="number"?t:0}function en(i,e,t){try{i[e]=t}catch{}}function ka(i){let e=i==null?void 0:i.scale;if(!e)return null;let t=typeof e.x=="number"?e.x:1,n=typeof e.y=="number"?e.y:1;return{x:t,y:n}}function tn(i,e){let t=i==null?void 0:i.scale;if(t)try{typeof t.set=="function"?t.set(e.x,e.y):(typeof t.x=="number"&&(t.x=e.x),typeof t.y=="number"&&(t.y=e.y))}catch{}}function nn(i,e){let t=ka(i);if(!t)return{from:null,to:null};let n=null,a=null;return typeof e.scale=="number"?(n=e.scale,a=e.scale):e.scale&&typeof e.scale=="object"&&(typeof e.scale.x=="number"&&(n=e.scale.x),typeof e.scale.y=="number"&&(a=e.scale.y)),typeof e.scaleX=="number"&&(n=e.scaleX),typeof e.scaleY=="number"&&(a=e.scaleY),n===null&&a===null?{from:null,to:null}:{from:{x:t.x,y:t.y},to:{x:n!=null?n:t.x,y:a!=null?a:t.y}}}function an(){let i=new Set,e=new WeakMap,t=null,n=()=>{if(t!=null)return;t=requestAnimationFrame(()=>{t=null,o(),i.size>0&&n()})},a=u=>{var p;i.add(u);let c=(p=e.get(u.target))!=null?p:new Set;c.add(u),e.set(u.target,c),n()},s=u=>{i.delete(u);let c=e.get(u.target);c&&(c.delete(u),c.size===0&&e.delete(u.target))},r=u=>{u.killed||(u.killed=!0,s(u))},o=()=>{var c,p;let u=gt();for(let g of Array.from(i)){if(g.killed||g.paused)continue;let m=u-g.startMs-g.delayMs;if(m<0)continue;let f=g.durationMs>0?m/g.durationMs:1,C=Qi(f),b=g.repeat>=0?g.repeat+1:1,h=g.repeat>0?Math.min(Math.floor(f),b-1):0;if(g.repeat>0&&f>=1){let y=f-h;C=Qi(y)}let v=g.ease(C);g.yoyo&&h%2===1&&(v=1-v);for(let y of g.props)en(g.target,y.key,y.from+(y.to-y.from)*v);g.scaleFrom&&g.scaleTo&&tn(g.target,{x:g.scaleFrom.x+(g.scaleTo.x-g.scaleFrom.x)*v,y:g.scaleFrom.y+(g.scaleTo.y-g.scaleFrom.y)*v});try{(c=g.onUpdate)==null||c.call(g)}catch{}if(f>=b){r(g);try{(p=g.onComplete)==null||p.call(g)}catch{}}}},l=(u,c,p)=>{var y;let g=Math.max(0,(typeof c.duration=="number"?c.duration:.5)*1e3),m=Math.max(0,(typeof c.delay=="number"?c.delay:0)*1e3+((y=p==null?void 0:p.delayMsOverride)!=null?y:0)),f=Ta(c.ease),C=typeof c.repeat=="number"?Math.max(0,c.repeat|0):0,b=c.yoyo===!0,h=new Set(["duration","delay","ease","repeat","yoyo","onUpdate","onComplete","scale","scaleX","scaleY"]),v=[];for(let I of Object.keys(c)){if(h.has(I))continue;let j=c[I];typeof j=="number"&&v.push({key:I,from:La(u,I),to:j})}let w=nn(u,c);return{target:u,startMs:gt(),delayMs:m,durationMs:g,ease:f,props:v,scaleFrom:w.from,scaleTo:w.to,repeat:C,yoyo:b,onUpdate:typeof c.onUpdate=="function"?c.onUpdate:void 0,onComplete:typeof c.onComplete=="function"?c.onComplete:void 0,killed:!1,paused:!1,pauseAtMs:null}},d={to(u,c){let p=l(u,c);return a(p),{kill:()=>r(p),pause:()=>{p.paused||(p.paused=!0,p.pauseAtMs=gt())},resume:()=>{var f;if(!p.paused)return;let g=(f=p.pauseAtMs)!=null?f:gt(),m=gt()-g;p.startMs+=m,p.paused=!1,p.pauseAtMs=null},isActive:()=>!p.killed&&!p.paused}},fromTo(u,c,p){return d.set(u,c),d.to(u,p)},set(u,c){if(!u||!c)return;for(let g of Object.keys(c)){let m=c[g];g==="scale"||g==="scaleX"||g==="scaleY"||typeof m=="number"&&en(u,g,m)}let p=nn(u,c);p.to&&tn(u,p.to)},killTweensOf(u){let c=e.get(u);if(c)for(let p of Array.from(c))r(p)},timeline(u={}){let c=[],p=0,g=!1,m=[],f=h=>{if(typeof h=="number")return Math.max(0,h*1e3);let v=typeof h=="string"?h.trim():"";return v.startsWith("+=")?p+Math.max(0,Number(v.slice(2))*1e3||0):v?Math.max(0,Number(v)*1e3||0):p},C=h=>{c.push(h);let v=Math.max(0,(typeof h.vars.duration=="number"?h.vars.duration:.5)*1e3);p=Math.max(p,h.atMs+v)},b={to(h,v,w){return C({kind:"to",target:h,vars:v,atMs:f(w)}),b},fromTo(h,v,w,y){return C({kind:"fromTo",target:h,vars:w,from:v,atMs:f(y)}),b},play(){var h,v;if(g)return b;g=!0,m=[];for(let w of c)w.kind==="fromTo"&&d.set(w.target,(h=w.from)!=null?h:{}),m.push(d.to(w.target,{...w.vars,delay:w.atMs/1e3+((v=w.vars.delay)!=null?v:0)}));return b},pause(){for(let h of m)h.pause();return b},kill(){for(let h of m)h.kill();m=[],g=!1}};return u.paused||b.play(),b}};return d}function sn(){if(typeof window=="undefined")return;let i=window;if(!i.gsap)try{i.gsap=an()}catch{}}var rn={name:"handler-playable-sdk",version:"0.5.550",type:"module",description:"Handler Playable SDK v0.1 with contract-aligned surface (root sandbox, canonical event envelope).",main:"dist/index.cjs",module:"dist/index.js",types:"dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js",require:"./dist/index.cjs"},"./pixi":{types:"./dist/pixi/index.d.ts",import:"./dist/pixi/index.js",require:"./dist/pixi/index.cjs"},"./pixi/index.css":{import:"./dist/pixi/index.css",require:"./dist/pixi/index.css"},"./three":{types:"./dist/three/index.d.ts",import:"./dist/three/index.js",require:"./dist/three/index.cjs"},"./cli":{types:"./dist/cli/index.d.ts",import:"./dist/cli/index.js",require:"./dist/cli/index.cjs"}},bin:{"handler-student-helper":"./bin/student-helper.mjs","handler-validate":"./bin/validate.mjs","handler-sync-screens":"./bin/sync-screens.mjs","handler-brand-dna":"./bin/brand-dna.mjs","handler-setup-library":"./bin/setup-library.mjs","handler-screen-helper":"./bin/screen-helper.mjs"},scripts:{prebuild:"python3 src/preview/build-css.py",build:"tsup src/index.ts src/pixi/index.ts src/three/index.ts src/cli/index.ts --format cjs,esm --dts --clean --minify --external lottie-web && npm run create-mjs-symlinks && npm run postbuild-cli && npm run obfuscate && npm run postbuild",postbuild:"python3 src/preview/copy-css-to-dist.py","postbuild-cli":"cp src/cli/*.mjs dist/cli/ && chmod +x dist/cli/*.mjs && chmod +x bin/*.mjs","create-mjs-symlinks":"cd dist && ln -sf index.js index.mjs && cd pixi && ln -sf index.js index.mjs && cd ../three && ln -sf index.js index.mjs","build:dev":"tsup src/index.ts src/pixi/index.ts src/three/index.ts src/cli/index.ts --format cjs,esm --dts --clean --external lottie-web && npm run create-mjs-symlinks && npm run postbuild-cli",obfuscate:"javascript-obfuscator dist/pixi/index.js --output dist/pixi/index.js --config obfuscator.config.json && javascript-obfuscator dist/three/index.js --output dist/three/index.js --config obfuscator.config.json && javascript-obfuscator dist/cli/index.js --output dist/cli/index.js --config obfuscator.config.json && npm run obfuscate-cli","obfuscate-cli":'for file in dist/cli/*.mjs; do javascript-obfuscator "$file" --output "$file" --config obfuscator.config.json; done',lint:"eslint 'src/**/*.{ts,tsx}'",typecheck:"tsc --noEmit",prepublishOnly:"npm run build","publish:update":"node scripts/publish-and-update.cjs patch","publish:update:minor":"node scripts/publish-and-update.cjs minor","publish:update:major":"node scripts/publish-and-update.cjs major"},author:"Handler",license:"MIT",publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/HandlerAIGames/handler-playable-sdk.git"},files:["dist","bin","LICENSE","README.md"],peerDependencies:{"lottie-web":"^5.0.0","pixi.js":"^8.0.0",three:"^0.182.0"},peerDependenciesMeta:{"pixi.js":{optional:!0},three:{optional:!0},"lottie-web":{optional:!0}},devDependencies:{"@types/three":"^0.182.0",eslint:"^9.39.2","javascript-obfuscator":"^5.1.0","pixi.js":"8.8.1",three:"^0.182.0","ts-node":"^10.9.2",tsup:"^8.4.0",typescript:"^5.7.2","typescript-eslint":"^8.53.0"},dependencies:{"@google/genai":"^1.35.0","@google/generative-ai":"^0.24.1",jszip:"^3.10.1",sharp:"^0.34.5"}};var Z=0,Pa=Z++,on=Z++,ln=Z++,cn=Z++,dn=Z++,pn=Z++,un=Z++,gn=Z++,hn=Z++,fn=Z++,mn=Z++,bn=Z++,O=Pa;function yn(){return O===on}function vn(){return O===ln}function wn(){return O===cn}function xn(){return O===dn}function Ue(){return O===pn}function Ge(){return O===un}function Sn(){return O===gn}function En(){return O===hn}function Cn(){return O===fn}function ci(){return O===mn}function di(){return O===bn}function An(){let i=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none",e=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed";if(i==="mraid")try{mraid.getState(),O=on;return}catch{}else if(i==="dapi")try{dapi.isReady(),O=ln;return}catch{}if(e==="facebook")try{typeof FbPlayableAd!="undefined"&&(O=cn)}catch{}else if(e==="google")try{typeof ExitApi!="undefined"&&(O=dn)}catch{}else if(e==="mintegral")window.gameReady&&(O=pn);else if(e==="tapjoy")window.TJ_API&&(O=un);else if(e==="tiktok")window.openAppStore&&(O=gn);else if(e==="smadex")try{window.smxTracking&&(O=hn)}catch{}else if(e==="snapchat")try{window.ScPlayableAd&&(O=fn)}catch{}else e==="vungle"?O=mn:(i==="nucleo"||e==="nucleo")&&(O=bn)}var Rt=jt(require("lottie-web"),1),Tn=Rt.default;typeof window!="undefined"&&(window.lottie=Rt.default,window.__baseLottie=Rt.default);gi();function D(i,e){let t=(a,s)=>s===0?a:t(s,a%s),n=t(i,e);return`${i/n}:${e/n}`}var Er=[{id:"iphone-15-pro-max",label:"iPhone 15 Pro Max",width:430,height:932,category:"iphone",ratio:D(430,932)},{id:"iphone-15-pro",label:"iPhone 15 Pro",width:393,height:852,category:"iphone",ratio:D(393,852)},{id:"iphone-15",label:"iPhone 15",width:393,height:852,category:"iphone",ratio:D(393,852)},{id:"iphone-14",label:"iPhone 14",width:390,height:844,category:"iphone",ratio:D(390,844)},{id:"iphone-se",label:"iPhone SE",width:375,height:667,category:"iphone",ratio:D(375,667)},{id:"iphone-12-mini",label:"iPhone 12 Mini",width:360,height:780,category:"iphone",ratio:D(360,780)}],Cr=[{id:"pixel-8-pro",label:"Pixel 8 Pro",width:448,height:998,category:"android",ratio:D(448,998)},{id:"pixel-8",label:"Pixel 8",width:412,height:915,category:"android",ratio:D(412,915)},{id:"samsung-s24-ultra",label:"Samsung S24 Ultra",width:412,height:915,category:"android",ratio:D(412,915)},{id:"samsung-s24",label:"Samsung S24",width:360,height:780,category:"android",ratio:D(360,780)},{id:"samsung-a54",label:"Samsung A54",width:412,height:915,category:"android",ratio:D(412,915)},{id:"oneplus-12",label:"OnePlus 12",width:412,height:915,category:"android",ratio:D(412,915)}],Ar=[{id:"ipad-pro-12",label:'iPad Pro 12.9"',width:1024,height:1366,category:"tablet",ratio:D(1024,1366)},{id:"ipad-pro-11",label:'iPad Pro 11"',width:834,height:1194,category:"tablet",ratio:D(834,1194)},{id:"ipad-air",label:"iPad Air",width:820,height:1180,category:"tablet",ratio:D(820,1180)},{id:"ipad-mini",label:"iPad Mini",width:768,height:1024,category:"tablet",ratio:D(768,1024)},{id:"samsung-tab-s9",label:"Samsung Tab S9",width:800,height:1280,category:"tablet",ratio:D(800,1280)}],Pn=[{id:"playable-portrait",label:"Playable Portrait",width:320,height:480,category:"playable",ratio:"2:3",mraidScale:1},{id:"mraid-320x480",label:"MRAID 320\xD7480",width:320,height:480,category:"playable",ratio:"2:3",mraidScale:1},{id:"iphone-14",label:"iPhone 14",width:390,height:844,category:"playable",ratio:D(390,844),mraidScale:.7},{id:"ipad-mini",label:"iPad Mini",width:768,height:1024,category:"playable",ratio:D(768,1024),mraidScale:.7}];var Tr=[...Pn];var Da=Pn[0];ae();var Ka=jt(require("jszip"),1);function Ha(i){return new Promise((e,t)=>{let n=new FileReader;n.onerror=()=>t(new Error("FileReader failed")),n.onload=()=>e(String(n.result||"")),n.readAsDataURL(i)})}function Na(i){var a;let[e,t]=i.split(","),n=e==null?void 0:e.match(/data:(.*?);base64/);return{base64:t!=null?t:"",mimeType:(a=n==null?void 0:n[1])!=null?a:"image/png"}}async function Fa(i){return await new Promise(e=>{let t=new Image;t.onload=()=>e({width:t.naturalWidth||t.width,height:t.naturalHeight||t.height}),t.onerror=()=>e(null),t.src=i})}async function hi(i){var e,t;try{console.log("[ImageUtils] Fetching image data from URL:",i);let n=await fetch(i);if(!n.ok)return console.warn("[ImageUtils] Fetch failed with status:",n.status,i),null;let a=await n.blob();console.log("[ImageUtils] Blob received, size:",a.size,"type:",a.type);let s=await Ha(a),r=await Fa(s),o=Na(s);return console.log("[ImageUtils] Success resolution:",r==null?void 0:r.width,"x",r==null?void 0:r.height,"mime:",o.mimeType),{base64:o.base64,mimeType:o.mimeType,dataUrl:s,width:(e=r==null?void 0:r.width)!=null?e:0,height:(t=r==null?void 0:r.height)!=null?t:0}}catch(n){return console.error("[ImageUtils] Error fetching image data:",n),null}}async function zt(i,e=30){try{console.log("[ImageUtils] Removing background color...");let t=await new Promise((c,p)=>{let g=new Image;g.onload=()=>c(g),g.onerror=()=>p(new Error("Failed to load image")),g.src=i}),n=document.createElement("canvas");n.width=t.width,n.height=t.height;let a=n.getContext("2d");if(!a)return console.error("[ImageUtils] Failed to get canvas context"),i;a.drawImage(t,0,0);let s=a.getImageData(0,0,n.width,n.height),r=s.data,l=[{name:"top-left",offset:0},{name:"top-right",offset:(n.width-1)*4},{name:"bottom-left",offset:(n.height-1)*n.width*4},{name:"bottom-right",offset:((n.height-1)*n.width+(n.width-1))*4}].map(c=>({r:r[c.offset],g:r[c.offset+1],b:r[c.offset+2]})),d=0;for(let c=0;c<r.length;c+=4){let p=r[c],g=r[c+1],m=r[c+2],f=!1;for(let C of l)if(Math.sqrt(Math.pow(p-C.r,2)+Math.pow(g-C.g,2)+Math.pow(m-C.b,2))<e){f=!0;break}f&&(r[c+3]=0,d++)}return console.log(`[ImageUtils] Removed background from ${d} pixels (4-corner sampling, tolerance: ${e})`),a.putImageData(s,0,0),n.toDataURL("image/png")}catch(t){return console.error("[ImageUtils] Error removing background:",t),i}}var _n=require("@google/genai");async function fi(i,e,t=[],n={}){var a,s,r,o,l,d,u;try{if(!(i!=null&&i.trim()))throw new Error("Gemini API key is required");if(!(e!=null&&e.trim()))throw new Error("Prompt is required");for(let b=0;b<t.length;b++){let h=t[b];if(!h.base64||!h.mimeType)throw new Error(`Image ${b+1} is missing required data`);if(h.base64.length<1e3&&console.warn(`Image ${b+1} data appears very small, may be corrupted`),!h.mimeType.startsWith("image/"))throw new Error(`Image ${b+1} has invalid MIME type: ${h.mimeType}`)}let c=new _n.GoogleGenAI({apiKey:i}),p="gemini-2.5-flash",g=[e];t.length>0&&t.forEach((b,h)=>{g.push({inlineData:{data:b.base64,mimeType:b.mimeType}}),console.log(`[Gemini] Added image ${h+1}: ${b.mimeType}, size: ${Math.round(b.base64.length/1024)}KB`)}),console.log(`[Gemini] Making request with ${t.length} images and prompt length: ${e.length}`);let m=await c.models.generateContent({model:p,contents:g}),f="",C=(r=(s=(a=m.candidates)==null?void 0:a[0])==null?void 0:s.content)==null?void 0:r.parts;if(C)for(let b of C)b.text&&(f+=b.text);if(!f.trim())throw new Error("Empty response from Gemini API");return console.log(`[Gemini] Response received, length: ${f.length}`),f}catch(c){throw console.error("[Gemini] API error:",c),(o=c.message)!=null&&o.includes("Unable to process input image")?new Error("Unable to process the uploaded image. Please ensure it's a valid PNG, JPG, or JPEG file under 10MB and not corrupted."):(l=c.message)!=null&&l.includes("API_KEY_INVALID")?new Error("Invalid Gemini API key. Please check your API key configuration."):(d=c.message)!=null&&d.includes("QUOTA_EXCEEDED")?new Error("Gemini API quota exceeded. Please try again later or check your billing."):(u=c.message)!=null&&u.includes("SAFETY")?new Error("Content was flagged by Gemini safety filters. Please try with different images."):c}}var On=require("@google/genai");async function $t(i,e,t=[],n={}){try{console.info("[GEMINI-REAL-SDK] Initializing GoogleGenAI...");let a=new On.GoogleGenAI({apiKey:i}),s=[{text:e}];t.length>0&&t.forEach((o,l)=>{console.info(`[GEMINI-REAL-SDK] Adding image part ${l}`),s.push({inlineData:{mimeType:o.mimeType,data:o.base64}})}),console.info("[GEMINI-REAL-SDK] Calling generateContent with model: gemini-2.5-flash-image");let r=await a.models.generateContent({model:"gemini-2.5-flash-image",contents:s});if(console.info("[GEMINI-REAL-SDK] Received response from model"),!r.candidates||!r.candidates[0]||!r.candidates[0].content||!r.candidates[0].content.parts)throw new Error("Gemini 2.5 Flash Image returned invalid response structure.");for(let o of r.candidates[0].content.parts)if(o.text)console.log(o.text);else if(o.inlineData){let l=o.inlineData.data,d=o.inlineData.mimeType||"image/png";return console.info("[GEMINI-REAL-SDK] Found inline image data in response"),`data:${d};base64,${l}`}throw new Error("Gemini 2.5 Flash Image returned no image data.")}catch(a){throw console.error("[GEMINI-REAL-SDK] Error in generateImageWithGemini25Flash:",JSON.stringify(a,Object.getOwnPropertyNames(a),2)),a}}var Wa=require("pixi.js");ht();ae();var Nn=require("pixi.js");var Xa=require("pixi.js");ae();function rs(i){return new Promise((e,t)=>{let n=new FileReader;n.onerror=()=>t(new Error("FileReader failed")),n.onload=()=>e(String(n.result||"")),n.readAsDataURL(i)})}function os(i){var a;let[e,t]=i.split(","),n=e==null?void 0:e.match(/data:(.*?);base64/);return{base64:t!=null?t:"",mimeType:(a=n==null?void 0:n[1])!=null?a:"image/png"}}function ls(i){return`
|
|
47
47
|
Analyze these screenshots of a brand or game and extract its "Brand DNA".
|
|
48
48
|
|
|
49
49
|
Provide a concise summary (2-3 sentences) covering:
|
|
@@ -57,12 +57,12 @@ FORMAT:
|
|
|
57
57
|
Summary: [Your summary here]
|
|
58
58
|
Palette: [#RRGGBB, #RRGGBB, ...]
|
|
59
59
|
|
|
60
|
-
${
|
|
60
|
+
${i?`
|
|
61
61
|
ADDITIONAL RULES/NOTES:
|
|
62
|
-
${
|
|
63
|
-
`.trim()}function
|
|
62
|
+
${i}`:""}
|
|
63
|
+
`.trim()}function Fn(){let i=[],e="",t=null;return{async addSources(n){let a=[];for(let s of n){let r=await rs(s),o=os(r),l={id:`${Date.now()}-${Math.random().toString(16).slice(2)}`,name:s.name,base64:o.base64,mimeType:o.mimeType,dataUrl:r};i.push(l),a.push(l)}return a},getSources(){return i.slice()},async analyze(n,a,s){if(i.length===0)throw new Error("No screenshots to analyze.");let r=ls(a),o=i.map(p=>({base64:p.base64,mimeType:p.mimeType})),l=await fi(n,r,o,{model:s}),d=e,u=[],c=l.split(`
|
|
64
64
|
`);for(let p of c)if(p.toLowerCase().startsWith("summary:"))d=p.slice(8).trim();else if(p.toLowerCase().includes("palette:")){let g=p.match(/#[0-9A-Fa-f]{6}/g);g&&g.forEach(m=>{u.includes(m.toUpperCase())||u.push(m.toUpperCase())})}return(!d||d===e)&&(d=l.split(`
|
|
65
|
-
Palette:`)[0].replace(/^Summary:\s*/i,"").trim()),t={summary:d,palette:u.slice(0,10)},t},setSummary(
|
|
65
|
+
Palette:`)[0].replace(/^Summary:\s*/i,"").trim()),t={summary:d,palette:u.slice(0,10)},t},setSummary(n){e=n,t&&(t={...t,summary:n})},getResult(){return t}}}var Re="handler_api_key_";var qe=class{static setKey(e,t,n){try{let a={key:this.encryptKey(t),created:Date.now(),lastUsed:Date.now(),label:n||e},s=`${Re}${e}`;localStorage.setItem(s,JSON.stringify(a))}catch(a){console.error("[ApiKeyStorage] Failed to store API key:",a)}}static getKey(e){try{let t=`${Re}${e}`,n=localStorage.getItem(t);if(!n)return null;let a=JSON.parse(n);return a.lastUsed=Date.now(),localStorage.setItem(t,JSON.stringify(a)),this.decryptKey(a.key)}catch(t){return console.error("[ApiKeyStorage] Failed to retrieve API key:",t),null}}static hasKey(e){let t=`${Re}${e}`;return localStorage.getItem(t)!==null}static removeKey(e){try{let t=`${Re}${e}`;localStorage.removeItem(t)}catch(t){console.error("[ApiKeyStorage] Failed to remove API key:",t)}}static getStoredServices(){let e=[];try{for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);if(n&&n.startsWith(Re)){let a=n.substring(Re.length),s=localStorage.getItem(n);if(s){let r=JSON.parse(s);e.push({service:a,label:r.label,created:r.created,lastUsed:r.lastUsed})}}}}catch(t){console.error("[ApiKeyStorage] Failed to get stored services:",t)}return e.sort((t,n)=>n.lastUsed-t.lastUsed)}static clearAll(){try{let e=[];for(let t=0;t<localStorage.length;t++){let n=localStorage.key(t);n&&n.startsWith(Re)&&e.push(n)}e.forEach(t=>localStorage.removeItem(t))}catch(e){console.error("[ApiKeyStorage] Failed to clear API keys:",e)}}static encryptKey(e){try{let n="handler_preview_salt_2024"+e;return btoa(n)}catch(t){return console.warn("[ApiKeyStorage] Encryption failed, storing as-is:",t),e}}static decryptKey(e){try{let t=atob(e),n="handler_preview_salt_2024";return t.startsWith(n)?t.substring(n.length):t}catch(t){return console.warn("[ApiKeyStorage] Decryption failed, returning as-is:",t),e}}},wi=()=>qe.getKey("gemini"),xi=(i,e)=>qe.setKey("gemini",i,e),cs=()=>qe.hasKey("gemini");window.ApiKeyStorage=qe;window.getGeminiApiKey=wi;window.setGeminiApiKey=xi;window.hasGeminiApiKey=cs;var Ei=class{constructor(){this.modal=null;this.options=null;this.analyzer=Fn();this.currentPrompt="";this.isGenerating=!1;this.generatedImages=[];this.selectedImageIndex=-1;this.promptInput=null;this.generateBtn=null;this.loadingEl=null;this.galleryEl=null;this.previewEl=null}open(e){this.options=e,this.currentPrompt=e.initialPrompt||"",this.generatedImages=[],this.selectedImageIndex=-1,this.isGenerating=!1,this.createModal(),document.body.appendChild(this.modal),setTimeout(()=>{var t,n;(t=this.promptInput)==null||t.focus(),(n=this.promptInput)==null||n.select()},100)}createModal(){var t;let e=document.createElement("div");e.className="ai-modal",e.innerHTML=`
|
|
66
66
|
<div class="ai-modal-card">
|
|
67
67
|
<div class="ai-modal-header">
|
|
68
68
|
<div class="ai-modal-actions">
|
|
@@ -141,14 +141,14 @@ Palette:`)[0].replace(/^Summary:\s*/i,"").trim()),t={summary:d,palette:u.slice(0
|
|
|
141
141
|
<button class="ai-btn primary" data-action="apply" disabled>Apply</button>
|
|
142
142
|
</div>
|
|
143
143
|
</div>
|
|
144
|
-
`,this.modal=e,this.attachEventListeners(),this.updatePromptFromDna()}attachEventListeners(){var
|
|
144
|
+
`,this.modal=e,this.attachEventListeners(),this.updatePromptFromDna()}attachEventListeners(){var n;if(!this.modal)return;this.promptInput=this.modal.querySelector(".ai-textarea"),this.generateBtn=this.modal.querySelector('[data-action="generate"]'),this.loadingEl=this.modal.querySelector("[data-loading]"),this.galleryEl=this.modal.querySelector("[data-gallery]"),this.previewEl=this.modal.querySelector("[data-preview]"),(n=this.promptInput)==null||n.addEventListener("input",()=>{var a;this.currentPrompt=((a=this.promptInput)==null?void 0:a.value)||"",this.updateGenerateButton()});let e=this.modal.querySelector('[data-strength="creativity"]'),t=this.modal.querySelector(".ai-strength-value");e==null||e.addEventListener("input",()=>{t.textContent=e.value}),this.modal.addEventListener("click",a=>{var o;let s=a.target;switch(s.dataset.action||((o=s.closest("[data-action]"))==null?void 0:o.getAttribute("data-action"))){case"generate":this.generateImage();break;case"apply":this.applySelectedImage();break;case"gallery":this.toggleGallery();break;case"close":case"cancel":this.close();break}}),this.modal.addEventListener("click",a=>{let s=a.target;if(s.classList.contains("ai-gallery-item")||s.closest(".ai-gallery-item")){let r=s.closest(".ai-gallery-item"),o=parseInt(r.dataset.index||"-1");o>=0&&this.selectImage(o)}}),this.modal.addEventListener("click",a=>{a.target===this.modal&&this.close()}),this.updateGenerateButton()}updateGenerateButton(){if(!this.generateBtn)return;let e=this.currentPrompt.trim().length>0;this.generateBtn.disabled=!e||this.isGenerating}async updatePromptFromDna(){var t;let e=(t=this.modal)==null?void 0:t.querySelector("#ai-use-dna");if(e!=null&&e.checked)try{let n=this.analyzer.getResult();if(n!=null&&n.summary&&this.promptInput){let a=`${this.currentPrompt}
|
|
145
145
|
|
|
146
|
-
Style guidelines: ${
|
|
147
|
-
<div class="ai-gallery-item ${
|
|
148
|
-
<img class="ai-gallery-thumb" src="${t}" alt="Generated ${
|
|
149
|
-
<div class="ai-gallery-label">#${
|
|
146
|
+
Style guidelines: ${n.summary}`;this.promptInput.value=a,this.currentPrompt=a}}catch(n){console.warn("[AiEditorModal] Failed to apply brand DNA:",n)}}async generateImage(){var e,t,n,a;if(!(!this.options||this.isGenerating)){this.isGenerating=!0,this.updateGenerateButton(),(e=this.loadingEl)==null||e.classList.remove("hidden"),(t=this.previewEl)==null||t.classList.add("hidden");try{let s=this.getApiKey();if(!s){alert("Please set your Gemini API key first. You can do this in the AI Creative Suite panel.");return}let r=[];if(this.options.currentValue&&this.options.currentValue.startsWith("data:"))try{let d=await hi(this.options.currentValue);d&&(r=[{base64:d.base64,mimeType:d.mimeType}])}catch(d){console.warn("[AiEditorModal] Failed to load current image:",d)}let o=await $t(s,this.currentPrompt,r,{aspectRatio:"1:1"}),l=await zt(o);this.generatedImages.push(l||o),this.selectedImageIndex=this.generatedImages.length-1,this.updateGallery(),this.updatePreview(),this.updateApplyButton()}catch(s){console.error("[AiEditorModal] Generation failed:",s),alert(`Generation failed: ${s instanceof Error?s.message:"Unknown error"}`)}finally{this.isGenerating=!1,(n=this.loadingEl)==null||n.classList.add("hidden"),(a=this.previewEl)==null||a.classList.remove("hidden"),this.updateGenerateButton()}}}updateGallery(){if(!this.galleryEl)return;let e=this.galleryEl.querySelector("[data-gallery-grid]");e&&(e.innerHTML=this.generatedImages.map((t,n)=>`
|
|
147
|
+
<div class="ai-gallery-item ${n===this.selectedImageIndex?"active":""}" data-index="${n}">
|
|
148
|
+
<img class="ai-gallery-thumb" src="${t}" alt="Generated ${n+1}" />
|
|
149
|
+
<div class="ai-gallery-label">#${n+1}</div>
|
|
150
150
|
</div>
|
|
151
|
-
`).join(""))}updatePreview(){if(!this.previewEl||this.selectedImageIndex<0)return;let e=this.generatedImages[this.selectedImageIndex];this.previewEl.innerHTML=`<img src="${e}" alt="Selected image" />`}selectImage(e){e<0||e>=this.generatedImages.length||(this.selectedImageIndex=e,this.updateGallery(),this.updatePreview(),this.updateApplyButton())}toggleGallery(){this.galleryEl&&this.galleryEl.classList.toggle("hidden")}updateApplyButton(){var t;let e=(t=this.modal)==null?void 0:t.querySelector('[data-action="apply"]');e&&(e.disabled=this.selectedImageIndex<0)}applySelectedImage(){var t;if(this.selectedImageIndex<0||!((t=this.options)!=null&&t.onApply))return;let e=this.generatedImages[this.selectedImageIndex];this.options.onApply(e),this.close()}getApiKey(){let e=
|
|
151
|
+
`).join(""))}updatePreview(){if(!this.previewEl||this.selectedImageIndex<0)return;let e=this.generatedImages[this.selectedImageIndex];this.previewEl.innerHTML=`<img src="${e}" alt="Selected image" />`}selectImage(e){e<0||e>=this.generatedImages.length||(this.selectedImageIndex=e,this.updateGallery(),this.updatePreview(),this.updateApplyButton())}toggleGallery(){this.galleryEl&&this.galleryEl.classList.toggle("hidden")}updateApplyButton(){var t;let e=(t=this.modal)==null?void 0:t.querySelector('[data-action="apply"]');e&&(e.disabled=this.selectedImageIndex<0)}applySelectedImage(){var t;if(this.selectedImageIndex<0||!((t=this.options)!=null&&t.onApply))return;let e=this.generatedImages[this.selectedImageIndex];this.options.onApply(e),this.close()}getApiKey(){let e=wi();if(e)return e;try{let t=this.analyzer.getResult();if(t&&t.apiKey)return xi(t.apiKey,"From Brand DNA"),t.apiKey}catch(t){console.warn("[AiEditorModal] Failed to get API key from brand DNA:",t)}return null}close(){this.modal&&this.modal.parentNode&&this.modal.parentNode.removeChild(this.modal),this.modal=null,this.options=null}},Si=null;window.__openAiEditor=function(i,e,t,n){Si||(Si=new Ei),Si.open({objectId:i,initialPrompt:e,currentValue:t,path:n==null?void 0:n.path,onApply:a=>{if(n!=null&&n.path){let s=window.updateManager;if(s)s.updateProperty(i,n.path,a);else{let r=window.getEditableObjectConfig,o=r==null?void 0:r(i);if(o){let l=n.path.split("."),d=o;for(let u=0;u<l.length-1;u++)d[l[u]]||(d[l[u]]={}),d=d[l[u]];d[l[l.length-1]]=a}}}window.dispatchEvent(new CustomEvent("inspector:refresh"))}})};Ai();var Ti=class{constructor(){this.modal=null;this.options=null}open(e){this.options=e,this.createModal(),document.body.appendChild(this.modal)}createModal(){if(!this.options)return;let{assetPath:e,assetType:t,objectId:n}=this.options,a=n||"Asset Preview",s=document.createElement("div");s.className="asset-preview-modal",s.innerHTML=`
|
|
152
152
|
<div class="asset-preview-card">
|
|
153
153
|
<div class="asset-preview-header">
|
|
154
154
|
<div class="asset-preview-title">${a}</div>
|
|
@@ -175,7 +175,7 @@ Style guidelines: ${i.summary}`;this.promptInput.value=a,this.currentPrompt=a}}c
|
|
|
175
175
|
<source src="${a}" type="audio/wav">
|
|
176
176
|
Your browser does not support the audio element.
|
|
177
177
|
</audio>
|
|
178
|
-
`;case"text":return`<pre style="background: rgba(0,0,0,0.2); padding: 16px; border-radius: 8px; max-height: 300px; overflow-y: auto; white-space: pre-wrap;">${e}</pre>`;default:return`<div class="asset-preview-placeholder">Cannot preview ${t} assets</div>`}}resolveAssetUrl(e){return e.startsWith("data:")||e.startsWith("blob:")||e.startsWith("/")?e:`/raw/${e}`}attachEventListeners(){if(!this.modal)return;this.modal.addEventListener("click",
|
|
178
|
+
`;case"text":return`<pre style="background: rgba(0,0,0,0.2); padding: 16px; border-radius: 8px; max-height: 300px; overflow-y: auto; white-space: pre-wrap;">${e}</pre>`;default:return`<div class="asset-preview-placeholder">Cannot preview ${t} assets</div>`}}resolveAssetUrl(e){return e.startsWith("data:")||e.startsWith("blob:")||e.startsWith("/")?e:`/raw/${e}`}attachEventListeners(){if(!this.modal)return;this.modal.addEventListener("click",n=>{let a=n.target;(a.dataset.action==="close"||a===this.modal)&&this.close()});let e=this.modal.querySelector('[data-action="change"]');e&&e.addEventListener("click",()=>{this.openAssetEditor()});let t=this.modal.querySelector('[data-action="edit"]');t&&t.addEventListener("click",()=>{this.openAiEditor(),this.close()})}openAssetEditor(){this.options&&Promise.resolve().then(()=>(Ai(),Bn)).then(({AssetEditorModal:e})=>{new e().show(this.options.objectId||"unknown",this.options.propertyPath||"",this.options.assetPath,n=>{var a;(a=this.options)!=null&&a.onChange&&this.options.onChange(n),this.close()})})}openAiEditor(){if(!this.options||this.options.assetType!=="image")return;let e=window.__openAiEditor;typeof e=="function"&&e(this.options.objectId||"asset","Edit this image asset",this.options.assetPath,{path:this.options.propertyPath,onApply:t=>{var n;(n=this.options)!=null&&n.onChange&&this.options.onChange(t)}})}close(){this.modal&&this.modal.parentNode&&this.modal.parentNode.removeChild(this.modal),this.modal=null,this.options=null}};window.openAssetPreview=function(i){new Ti().open(i)};var Li=class{constructor(){this.modal=null;this.canvas=null;this.ctx=null;this.image=null;this.options=null;this.cropX=0;this.cropY=0;this.cropWidth=100;this.cropHeight=100;this.scale=1;this.panX=0;this.panY=0;this.isDragging=!1;this.dragStartX=0;this.dragStartY=0;this.lastPanX=0;this.lastPanY=0}open(e){this.options=e,this.createModal(),this.loadImage(),document.body.appendChild(this.modal)}createModal(){let e=document.createElement("div");e.className="asset-crop-modal",e.innerHTML=`
|
|
179
179
|
<div class="asset-crop-card">
|
|
180
180
|
<div class="asset-crop-header">
|
|
181
181
|
<div>
|
|
@@ -226,7 +226,7 @@ Style guidelines: ${i.summary}`;this.promptInput.value=a,this.currentPrompt=a}}c
|
|
|
226
226
|
<button class="asset-crop-apply primary" data-action="apply">Apply Crop</button>
|
|
227
227
|
</div>
|
|
228
228
|
</div>
|
|
229
|
-
`,this.modal=e,this.attachEventListeners(),this.initializeCanvas()}initializeCanvas(){this.modal&&(this.canvas=this.modal.querySelector(".asset-crop-canvas"),this.canvas&&(this.ctx=this.canvas.getContext("2d"),this.canvas.width=400,this.canvas.height=300))}loadImage(){this.options&&(this.image=new Image,this.image.crossOrigin="anonymous",this.image.onload=()=>{this.initializeCrop(),this.render()},this.image.src=this.options.imageSrc)}initializeCrop(){var i;if(!this.image||!this.canvas)return;let e=this.image.width/this.image.height,t=this.canvas.width/this.canvas.height;e>t?(this.cropHeight=this.image.height,this.cropWidth=this.cropHeight*t,this.cropX=(this.image.width-this.cropWidth)/2,this.cropY=0):(this.cropWidth=this.image.width,this.cropHeight=this.cropWidth/t,this.cropX=0,this.cropY=(this.image.height-this.cropHeight)/2),(i=this.options)!=null&&i.aspectRatio&&this.applyAspectRatio(this.options.aspectRatio),this.fitToCanvas()}applyAspectRatio(e){if(!this.image)return;let t=this.image.width/this.image.height,i=this.cropX+this.cropWidth/2,a=this.cropY+this.cropHeight/2;e>t?(this.cropWidth=Math.min(this.image.width,this.cropHeight*e),this.cropHeight=this.cropWidth/e):(this.cropHeight=Math.min(this.image.height,this.cropWidth/e),this.cropWidth=this.cropHeight*e),this.cropX=Math.max(0,Math.min(this.image.width-this.cropWidth,i-this.cropWidth/2)),this.cropY=Math.max(0,Math.min(this.image.height-this.cropHeight,a-this.cropHeight/2))}fitToCanvas(){if(!this.image||!this.canvas)return;let e=this.canvas.width/this.cropWidth,t=this.canvas.height/this.cropHeight;this.scale=Math.min(e,t)*.9,this.panX=(this.canvas.width-this.cropWidth*this.scale)/2,this.panY=(this.canvas.height-this.cropHeight*this.scale)/2}render(){!this.ctx||!this.image||!this.canvas||(this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.ctx.save(),this.ctx.translate(this.panX,this.panY),this.ctx.scale(this.scale,this.scale),this.ctx.drawImage(this.image,-this.cropX,-this.cropY,this.image.width,this.image.height),this.ctx.restore(),this.drawCropOverlay(),this.updatePreview())}drawCropOverlay(){if(!this.ctx||!this.canvas)return;let e=this.panX,t=this.panY,i=this.cropWidth*this.scale,a=this.cropHeight*this.scale;this.ctx.fillStyle="rgba(0, 0, 0, 0.5)",this.ctx.fillRect(0,0,this.canvas.width,this.canvas.height),this.ctx.clearRect(e,t,i,a),this.ctx.strokeStyle="#ffffff",this.ctx.lineWidth=2,this.ctx.strokeRect(e,t,i,a),this.ctx.fillStyle="#ffffff";let s=8;[[e,t],[e+i-s,t],[e,t+a-s],[e+i-s,t+a-s]].forEach(([o,l])=>{var d;(d=this.ctx)==null||d.fillRect(o,l,s,s)})}updatePreview(){if(!this.modal||!this.image)return;let e=this.modal.querySelector(".asset-crop-preview-canvas");if(!e)return;let t=e.getContext("2d");if(!t)return;let i=150;e.width=i,e.height=i;let a=i/this.cropWidth,s=i/this.cropHeight,r=Math.min(a,s),o=this.cropWidth*r,l=this.cropHeight*r,d=(i-o)/2,u=(i-l)/2;t.drawImage(this.image,this.cropX,this.cropY,this.cropWidth,this.cropHeight,d,u,o,l)}attachEventListeners(){if(!this.modal||!this.canvas)return;this.canvas.addEventListener("mousedown",this.handleMouseDown.bind(this)),this.canvas.addEventListener("mousemove",this.handleMouseMove.bind(this)),this.canvas.addEventListener("mouseup",this.handleMouseUp.bind(this)),this.canvas.addEventListener("wheel",this.handleWheel.bind(this)),this.canvas.addEventListener("touchstart",this.handleTouchStart.bind(this)),this.canvas.addEventListener("touchmove",this.handleTouchMove.bind(this)),this.canvas.addEventListener("touchend",this.handleTouchEnd.bind(this));let e=this.modal.querySelector(".asset-crop-zoom-slider");e==null||e.addEventListener("input",i=>{let a=parseFloat(i.target.value);this.setZoom(a)});let t=this.modal.querySelector(".asset-crop-aspect-select");t==null||t.addEventListener("change",i=>{let a=i.target.value;this.setAspectRatio(a)}),this.modal.addEventListener("click",i=>{switch(i.target.dataset.action){case"reset":this.reset();break;case"apply":this.applyCrop();break;case"cancel":case"close":this.close();break}}),this.modal.addEventListener("click",i=>{i.target===this.modal&&this.close()})}handleMouseDown(e){this.isDragging=!0,this.dragStartX=e.clientX,this.dragStartY=e.clientY,this.lastPanX=this.panX,this.lastPanY=this.panY,this.canvas.style.cursor="grabbing"}handleMouseMove(e){if(!this.isDragging)return;let t=e.clientX-this.dragStartX,i=e.clientY-this.dragStartY;this.panX=this.lastPanX+t,this.panY=this.lastPanY+i,this.constrainPan(),this.render()}handleMouseUp(){this.isDragging=!1,this.canvas.style.cursor="grab"}handleWheel(e){e.preventDefault();let t=e.deltaY>0?.9:1.1;this.setZoom(this.scale*t)}handleTouchStart(e){e.touches.length===1&&(this.isDragging=!0,this.dragStartX=e.touches[0].clientX,this.dragStartY=e.touches[0].clientY,this.lastPanX=this.panX,this.lastPanY=this.panY)}handleTouchMove(e){if(!this.isDragging||e.touches.length!==1)return;e.preventDefault();let t=e.touches[0].clientX-this.dragStartX,i=e.touches[0].clientY-this.dragStartY;this.panX=this.lastPanX+t,this.panY=this.lastPanY+i,this.constrainPan(),this.render()}handleTouchEnd(){this.isDragging=!1}setZoom(e){this.scale=Math.max(.1,Math.min(3,e)),this.updateZoomUI(),this.constrainPan(),this.render()}setAspectRatio(e){let t;switch(e){case"1:1":t=1;break;case"4:3":t=4/3;break;case"16:9":t=16/9;break;case"3:2":t=3/2;break;default:t=void 0}t&&this.applyAspectRatio(t),this.fitToCanvas(),this.render()}updateZoomUI(){if(!this.modal)return;let e=this.modal.querySelector(".asset-crop-zoom-value"),t=this.modal.querySelector(".asset-crop-zoom-slider");e&&(e.textContent=`${this.scale.toFixed(1)}x`),t&&(t.value=this.scale.toString())}constrainPan(){if(!this.canvas)return;let e=this.cropWidth*this.scale,t=this.cropHeight*this.scale;this.panX=Math.max(this.canvas.width-e,Math.min(0,this.panX)),this.panY=Math.max(this.canvas.height-t,Math.min(0,this.panY))}reset(){this.initializeCrop(),this.render()}applyCrop(){var a;if(!this.image||!((a=this.options)!=null&&a.onCrop))return;let e=document.createElement("canvas"),t=e.getContext("2d");if(!t)return;e.width=this.cropWidth,e.height=this.cropHeight,t.drawImage(this.image,this.cropX,this.cropY,this.cropWidth,this.cropHeight,0,0,this.cropWidth,this.cropHeight);let i=e.toDataURL("image/png");this.options.onCrop(i),this.close()}close(){this.modal&&this.modal.parentNode&&this.modal.parentNode.removeChild(this.modal);let e=this.options;this.modal=null,this.canvas=null,this.ctx=null,this.image=null,this.options=null,e!=null&&e.onCancel&&e.onCancel()}};window.openAssetCrop=function(n){new Ln().open(n)};ce();ce();var ht=require("pixi.js");Dt();var rs=typeof __BUILD_MODE__!="undefined"?__BUILD_MODE__:"undefined",kn=rs;if(typeof window!="undefined")try{let n=new XMLHttpRequest;if(n.open("GET","./build-settings.json",!1),n.send(),n.status===200&&n.responseText){let e=JSON.parse(n.responseText);e!=null&&e.buildMode&&(kn=e.buildMode,console.log(`[ObjectFactory] Build mode overridden by settings: ${kn}`))}}catch{}function os(n){var t,i,a,s,r;if(typeof window!="undefined"&&window.resolveAnchorVec2)return window.resolveAnchorVec2(n);let e={center:{x:.5,y:.5},"top-left":{x:0,y:0},"top-center":{x:.5,y:0},"top-right":{x:1,y:0},"center-left":{x:0,y:.5},"center-right":{x:1,y:.5},"bottom-left":{x:0,y:1},"bottom-center":{x:.5,y:1},"bottom-right":{x:1,y:1},left:{x:0,y:.5},right:{x:1,y:.5},top:{x:.5,y:0},bottom:{x:.5,y:1}};if(Array.isArray(n))return{x:(t=n[0])!=null?t:.5,y:(i=n[1])!=null?i:.5};if(n&&typeof n=="object"&&"x"in n&&"y"in n)return{x:(a=n.x)!=null?a:.5,y:(s=n.y)!=null?s:.5};if(typeof n=="string"){let o=n.trim().toLowerCase();return(r=e[o])!=null?r:{x:.5,y:.5}}return null}var Le=class{static async create(e,t,i){var l,d,u,c,p,g,m;console.log(`[ObjectFactory] create() called for: ${e}, __BUILD_MODE__: ${kn}`);let a=(l=t==null?void 0:t.render)==null?void 0:l.asset;if(!a){console.log(`[ObjectFactory] No asset definition for: ${e}, returning empty container`);let f=new ht.Container;return this.applyTransform(f,t==null?void 0:t.transform,t),f}let s=(d=t==null?void 0:t.identity)==null?void 0:d.id;console.log(`[ObjectFactory] Calling AssetLoader.load() for: ${e}, configId: ${s}, type: ${a.type}, path: ${a.path}`);let r=await Ae.load(e,a,i,s);console.log(`[ObjectFactory] AssetLoader.load() completed for: ${e}, rawAsset type: ${(u=r==null?void 0:r.constructor)==null?void 0:u.name}`);let o;if(a.type==="image")console.log("[ObjectFactory] Creating Sprite from texture:",r,"for object:",e),o=new ht.Sprite(r),console.log("[ObjectFactory] Created object:",o,"type:",(c=o==null?void 0:o.constructor)==null?void 0:c.name),this.applyTransform(o,t==null?void 0:t.transform,t);else if(a.type==="json")if(console.log("[ObjectFactory] JSON asset for",e,"rawAsset type:",(p=r==null?void 0:r.constructor)==null?void 0:p.name,r),r&&(((g=r.constructor)==null?void 0:g.name)==="Container"||r instanceof ht.Container)){console.warn("[ObjectFactory] JSON asset is Container (from cache), reloading JSON directly");let f=[a.path,`/assets/${a.path}`,`assets/${a.path}`,`../assets/${a.path}`],C=!1;for(let b of f)try{let h=await fetch(b);if(h.ok){o=await h.json(),console.log("[ObjectFactory] Reloaded JSON directly from:",b,"type:",(m=o==null?void 0:o.constructor)==null?void 0:m.name),C=!0;break}}catch{continue}C||(console.error("[ObjectFactory] Failed to reload JSON from any path"),o=r)}else o=r;else o=r,o&&typeof o=="object"&&("x"in o||"position"in o)&&this.applyTransform(o,t==null?void 0:t.transform,t);return o}static applyTransform(e,t,i){var a,s,r,o;if(!(!t||!e)&&(t.position&&("x"in e&&"y"in e?(e.x=(a=t.position.x)!=null?a:0,e.y=(s=t.position.y)!=null?s:0):"position"in e&&e.position&&e.position.set((r=t.position.x)!=null?r:0,(o=t.position.y)!=null?o:0)),t.scale!==void 0&&"scale"in e&&e.scale&&(typeof e.scale=="object"&&"set"in e.scale?e.scale.set(t.scale):e.scale=t.scale),t.rotation!==void 0&&"rotation"in e&&(e.rotation=t.rotation),t.anchor&&"anchor"in e&&e.anchor)){let l=os(t.anchor);l&&("set"in e.anchor?e.anchor.set(l.x,l.y):(e.anchor.x=l.x,e.anchor.y=l.y))}}};ce();var Fi=Mt(require("lottie-web"),1);Nt(Ai);typeof window!="undefined"&&!window.lottie&&(window.lottie=Fi.default);gn();ce();var In=si.version,cs=new Set(["init","boot","view","ready","start","pause","resume","complete","error","engagement","first_interaction","retry","cta_show","cta_click","cta_dismiss","clickout","conversion","session_time","level_time","load_time","level_start","level_complete","level_fail","checkpoint","reward","tutorial_start","tutorial_complete","tutorial_skip","ab_assign","fps","memory","asset_load_start","asset_load_complete"]);ai();var Yi={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"},Ki=Math.random().toString(36).slice(2),qe=null,Ue={...Yi},Xi="web_embed",Pn={},bt,jn=!1,mt=!1,vt=!1,Ji=!1,$n=1,Bt=0,qt=!1,ue=!1,Ge="",Ve=Math.floor(window.innerWidth),We=Math.floor(window.innerHeight),On=Ve>We,ge=!1,yt=!1,Bi=!1,Ui=!1,Mn=!1,Ut=null,Re=null,Rn=!1,zn=!1,Ft=new Map;function Zi(){if(!Re)return null;let n=Date.now()-Re;return!Number.isFinite(n)||n<0?null:n}function _n(n){if(Rn)return;let e=Zi();e!==null&&(Rn=!0,x("session_time",{duration_ms:e,reason:n}))}function Gi(){if(qe)return qe;let n=document.createElement("div");return n.id="handler-root",n.setAttribute("data-handler-root","true"),document.body.appendChild(n),qe=n,n}function Gt(n){switch(n){case"interaction":return"engagement";case"finish":return"complete";case"install":return"cta_click";default:return n}}function Qi(n,e){return{event_name:n,ts:Date.now(),session_id:Ki,deployment_id:Ue.deployment_id,variant_id:Ue.variant_id,export_profile_id:Ue.profile_id,instance_id:Ue.instance_id||"default",env:Xi==="mraid"?"mraid":"web",attribution:bt,payload:e}}function x(n,e){let t=Gt(n),i=Qi(t,e);ln(i,!!Pn.analytics),Pt(t,i),t!==n&&Pt(n,i)}function wt(){Ut&&(Ut(Ve,We),Ut=null)}function Ye(n){$n=n,x("volume",n)}function Ke(n){n&&(Ji=!0),!vt&&(vt=!0,x("pause"),Ye(0))}function xt(n){!n&&Ji||vt&&(vt=!1,x("resume"),Ye($n))}function ke(n,e){Ve=Math.floor(n||window.innerWidth),We=Math.floor(e||window.innerHeight),On=Ve>We,x("resize",{width:Ve,height:We})}function ds(){if(bi())try{let n=mraid.getMaxSize();ke(n.width,n.height);let e=()=>{mraid.isViewable()&&mraid.getState()!=="hidden"?xt():Ke()};if(mraid.addEventListener("viewableChange",e),mraid.addEventListener("stateChange",e),mraid.addEventListener("sizeChange",()=>{let t=mraid.getMaxSize();ke(t.width,t.height)}),mraid.getAudioVolume){let t=mraid.getAudioVolume();Ye(t?1:0)}if(mraid.addEventListener("audioVolumeChange",t=>{t!==null&&Ye(t>0?1:0)}),mraid.addEventListener("error",(t,i)=>{console.warn("mraid error:",t,"action:",i)}),qt=!0,mraid.isViewable()&&mraid.getState()!=="hidden")ge=!0,x("boot"),x("view"),x("ready"),ue=!0,wt();else{let t=()=>{ge=!0,x("boot"),x("view"),x("ready"),ue=!0,wt()};mraid.addEventListener("ready",t)}}catch(n){console.warn("MRAID hook skipped",n)}}function ps(){if(yi())try{let n=dapi.getScreenSize();ke(n.width,n.height),dapi.addEventListener("viewableChange",t=>{t.isViewable?xt():Ke()}),dapi.addEventListener("adResized",t=>{let i=dapi.getScreenSize();ke(t.width||i.width,t.height||i.height)});let e=dapi.getAudioVolume();if(Ye(e?1:0),dapi.addEventListener("audioVolumeChange",t=>Ye(t?1:0)),qt=!0,dapi.isViewable())ge=!0,x("boot"),x("view"),x("ready"),ue=!0,wt();else{let t=()=>{ge=!0,x("boot"),x("view"),x("ready"),ue=!0,wt()};dapi.addEventListener("ready",t)}}catch(n){console.warn("DAPI hook skipped",n)}}function qi(){let n=()=>{ge||document.visibilityState==="visible"&&(document.readyState==="complete"||document.readyState==="interactive")&&(ge=!0,x("boot"),x("view"),x("ready"),ue=!0,wt(),yt&&(yt=!1,re.start()))};window.addEventListener("resize",()=>ke()),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"?(xt(),n()):Ke()}),document.readyState==="complete"||document.readyState==="interactive"?n():window.addEventListener("load",n),qt=!0}function us(){let n=e=>{typeof TouchEvent!="undefined"&&e instanceof TouchEvent&&(Bi=!0),!(Bi&&e instanceof MouseEvent)&&(Bt+=1,zn||(zn=!0,x("first_interaction",{count:Bt})),x("interaction",Bt))};document.addEventListener("mousedown",n),document.addEventListener("touchstart",n)}function Vi(n){var i,a,s,r,o,l,d,u,c,p,g,m;let e=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(e==="mraid"&&typeof mraid!="undefined")mraid.open(n||"");else if(e==="dapi"&&typeof dapi!="undefined")dapi.openStoreUrl();else if(Fe())(s=(a=window.TJ_API)==null?void 0:a.click)==null||s.call(a);else if(vi())(o=(r=window.FbPlayableAd)==null?void 0:r.onCTAClick)==null||o.call(r);else if(Si())(d=(l=window.ScPlayableAd)==null?void 0:l.onCTAClick)==null||d.call(l);else if(Ei())try{(c=(u=window.smxTracking)==null?void 0:u.redirect)==null||c.call(u)}catch(f){console.warn("Smadex redirect failed",f)}else if(wi()){let f=window.ExitApi;f&&typeof f.exit=="function"?f.exit(n||Ge||""):n&&window.open(n)}else Ne()?(p=window.install)==null||p.call(window):xi()?(g=window.openAppStore)==null||g.call(window):cn()?(m=parent==null?void 0:parent.postMessage)==null||m.call(parent,"download","*"):n&&window.open(n)}function gs(){let n=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed",e=t=>{if(!t)return;let i=new Image;i.src=t};if(n==="bigabid"){let t=window.BIGABID_BIDTIMEMACROS;if(!t)return;J("view",()=>e(t.mraid_viewable)),J("start",()=>e(t.game_viewable)),J("engagement",()=>e(t.engagement));let i=()=>e(t.complete);J("complete",i),_t("engagement",a=>{var s;((s=a==null?void 0:a.payload)==null?void 0:s.count)>3&&i()}),J("cta_click",()=>e(t.click))}else if(n==="inmobi"){let t=window.INMOBI_DSPMACROS;if(!t)return;J("view",()=>e(t.Ad_Load_Start)),J("start",()=>e(t.Ad_Viewable)),J("engagement",()=>e(t.First_Engagement)),J("complete",()=>e(t.Gameplay_Complete)),J("cta_click",()=>e(t.DSP_Click)),J("start",()=>{[5,10,15,20,25,30].forEach(i=>setTimeout(()=>e(t[`Spent_${i}_Seconds`]),i*1e3))})}}function hs(){if(!Fe())return;let n=window.TJ_API;n&&n.setPlayableAPI&&n.setPlayableAPI({skipAd:()=>{try{re.finish()}catch(e){console.warn("Tapjoy skip failed",e)}}})}function Wi(){var e,t,i;let n=window.TJ_API;(e=n==null?void 0:n.objectiveComplete)==null||e.call(n),(t=n==null?void 0:n.playableFinished)==null||t.call(n),(i=n==null?void 0:n.gameplayFinished)==null||i.call(n)}function fs(){Ne()&&(window.mintGameStart=()=>{xt(!0),ke()},window.mintGameClose=()=>{Ke(!0)})}function ms(){if(!dn())return;let n=window.NUC;!n||!n.trigger||(re.on("cta_click",()=>{var e,t;return(t=(e=n.trigger).convert)==null?void 0:t.call(e,Ge)}),re.on("complete",()=>{var e,t;return(t=(e=n.trigger).tryAgain)==null?void 0:t.call(e)}))}var re={init(n={},e){var t;if(Xi=n.profile||"web_embed",Pn=n.consent||{},Ue={...Yi,...n.ids||{}},qe=n.rootEl||qe,bt=void 0,Jn((t=n.telemetry)!=null&&t.endpoint?n.telemetry:null),Re=null,Rn=!1,zn=!1,Ft.clear(),Ge=n.destinationUrl||(/android/i.test(navigator.userAgent)?"https://play.google.com/store":"https://www.apple.com/app-store/"),e&&(Ut=e),x("init"),document.body.oncontextmenu=()=>!1,Gi(),ys(qe),Ci(),ds(),ps(),!qt){if(document.readyState==="complete")qi();else if(!Ui){Ui=!0;let i=()=>{qi(),window.removeEventListener("load",i),document.removeEventListener("DOMContentLoaded",i)};window.addEventListener("load",i),document.addEventListener("DOMContentLoaded",i)}}us(),gs(),hs(),fs(),ms(),console.log(`%c @handler/playable-sdk %c v${In} `,"background: var(--ui-console-info); color: var(--ui-white); font-size: 14px; padding: 4px 8px; border-top-left-radius: 4px; border-bottom-left-radius: 4px;","background: var(--ui-console-bg); color: var(--ui-console-text); font-size: 14px; padding: 4px 8px; border-top-right-radius: 4px; border-bottom-right-radius: 4px;"),ge&&!ue&&(x("boot"),x("view"),x("ready"),yt&&(yt=!1,re.start()),ue=!0),ue=ge},getRoot(){return Gi()},get version(){return In},get maxWidth(){return Ve},get maxHeight(){return We},get isLandscape(){return On},get isReady(){return ue},get isStarted(){return jn},get isPaused(){return vt},get isFinished(){return mt},get volume(){return $n},get interactions(){return Bt},on(n,e){_t(Gt(n),e)},off(n,e){on(Gt(n),e)},start(){var n,e;if(!jn){if(!ge){yt=!0;return}if(jn=!0,Re||(Re=Date.now()),x("start"),ke(),Ne())Ke(),(n=window.gameReady)==null||n.call(window);else if(Fe()){let t=window.TJ_API;(e=t==null?void 0:t.setPlayableBuild)==null||e.call(t,{orientation:On?"landscape":"portrait",buildID:In})}}},finish(){var n,e;mt||(mt=!0,x("complete"),_n("complete"),Ne()?(n=window.gameEnd)==null||n.call(window):cn()?(e=parent==null?void 0:parent.postMessage)==null||e.call(parent,"complete","*"):Fe()&&Wi())},install(n){if(!mt){mt=!0,Fe()?(Wi(),setTimeout(()=>re.install(n),300)):(x("complete"),setTimeout(()=>re.install(n),0));return}Mn||(Mn=!0,setTimeout(()=>Mn=!1,500),x("cta_click"),x("conversion"),_n("cta"),Vi(n||Ge))},emit(n,e){let t=Gt(n);if(!cs.has(t)&&t!=="resize"&&t!=="volume"&&!t.startsWith("custom."))throw new Error(`Event ${n} must be canonical or namespaced as custom.<mechanic_id>.<event>`);let i=Qi(t,e);ln(i,!!Pn.analytics),Pt(t,i)},gameStart(){re.start()},gameEnd(){re.finish()},ctaClick(n,e){x("cta_click",{url:n||Ge,manual:!0}),(e==null?void 0:e.open)!==!1&&Vi(n||Ge)},ctaShow(n){x("cta_show",n)},ctaDismiss(n){x("cta_dismiss",n)},getGameTimeMs(){return Zi()},endSession(n="manual"){_n(n)},setAttribution(n){bt=n},abTest(n,e){if(!n)throw new Error("abTest requires experimentId");if(!Array.isArray(e)||e.length<2)throw new Error("abTest requires at least 2 variants");let t=Math.abs(bs(`${Ki}:${n}`))%e.length,i=e[t];return bt={...bt||{},experiment_id:n},Ue.variant_id=i,x("ab_assign",{experiment_id:n,variant_id:i}),i},levelStart(n,e){Re||(Re=Date.now()),x("level_start",{level_id:n,...e})},levelComplete(n,e){x("level_complete",{level_id:n,...e})},levelFail(n,e){x("level_fail",{level_id:n,...e})},checkpoint(n,e){x("checkpoint",{checkpoint_id:n,...e})},reward(n,e){x("reward",{reward_id:n,...e})},tutorialStart(n,e){x("tutorial_start",{step_id:n,...e})},tutorialComplete(n,e){x("tutorial_complete",{step_id:n,...e})},tutorialSkip(n,e){x("tutorial_skip",{step_id:n,...e})},timerStart(n){n&&Ft.set(n,Date.now())},timerEnd(n,e="custom",t){if(!n)return;let i=Ft.get(n);if(!i)return;Ft.delete(n);let a=Date.now()-i;if(!(!Number.isFinite(a)||a<0)){if(e==="custom"){x("engagement",{action:"timer",key:n,duration_ms:a,...t});return}x(e,{key:n,duration_ms:a,...t})}},fps(n,e){x("fps",{value:n,...e})},memory(n,e){x("memory",{bytes:n,...e})},assetLoadStart(n,e){x("asset_load_start",{asset_id:n,...e})},assetLoadComplete(n,e){x("asset_load_complete",{asset_id:n,...e})},reportError(n,e,t){x("error",{code:n,message:e,...t})},retry(){var n,e,t;if(Ne())(n=window.gameRetry)==null||n.call(window);else if(dn()){let i=window.NUC;(t=(e=i==null?void 0:i.trigger)==null?void 0:e.tryAgain)==null||t.call(e)}x("engagement",{action:"retry"})},pause(){Ke(!0)},resume(){xt(!0)},resize(n,e){ke(n,e)}},ft=re;function bs(n){let e=2166136261;for(let t=0;t<n.length;t++)e^=n.charCodeAt(t),e=Math.imul(e,16777619);return e|0}function ys(n){let e=document.createElement("script");e.type="text/javascript",e.textContent=`
|
|
229
|
+
`,this.modal=e,this.attachEventListeners(),this.initializeCanvas()}initializeCanvas(){this.modal&&(this.canvas=this.modal.querySelector(".asset-crop-canvas"),this.canvas&&(this.ctx=this.canvas.getContext("2d"),this.canvas.width=400,this.canvas.height=300))}loadImage(){this.options&&(this.image=new Image,this.image.crossOrigin="anonymous",this.image.onload=()=>{this.initializeCrop(),this.render()},this.image.src=this.options.imageSrc)}initializeCrop(){var n;if(!this.image||!this.canvas)return;let e=this.image.width/this.image.height,t=this.canvas.width/this.canvas.height;e>t?(this.cropHeight=this.image.height,this.cropWidth=this.cropHeight*t,this.cropX=(this.image.width-this.cropWidth)/2,this.cropY=0):(this.cropWidth=this.image.width,this.cropHeight=this.cropWidth/t,this.cropX=0,this.cropY=(this.image.height-this.cropHeight)/2),(n=this.options)!=null&&n.aspectRatio&&this.applyAspectRatio(this.options.aspectRatio),this.fitToCanvas()}applyAspectRatio(e){if(!this.image)return;let t=this.image.width/this.image.height,n=this.cropX+this.cropWidth/2,a=this.cropY+this.cropHeight/2;e>t?(this.cropWidth=Math.min(this.image.width,this.cropHeight*e),this.cropHeight=this.cropWidth/e):(this.cropHeight=Math.min(this.image.height,this.cropWidth/e),this.cropWidth=this.cropHeight*e),this.cropX=Math.max(0,Math.min(this.image.width-this.cropWidth,n-this.cropWidth/2)),this.cropY=Math.max(0,Math.min(this.image.height-this.cropHeight,a-this.cropHeight/2))}fitToCanvas(){if(!this.image||!this.canvas)return;let e=this.canvas.width/this.cropWidth,t=this.canvas.height/this.cropHeight;this.scale=Math.min(e,t)*.9,this.panX=(this.canvas.width-this.cropWidth*this.scale)/2,this.panY=(this.canvas.height-this.cropHeight*this.scale)/2}render(){!this.ctx||!this.image||!this.canvas||(this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.ctx.save(),this.ctx.translate(this.panX,this.panY),this.ctx.scale(this.scale,this.scale),this.ctx.drawImage(this.image,-this.cropX,-this.cropY,this.image.width,this.image.height),this.ctx.restore(),this.drawCropOverlay(),this.updatePreview())}drawCropOverlay(){if(!this.ctx||!this.canvas)return;let e=this.panX,t=this.panY,n=this.cropWidth*this.scale,a=this.cropHeight*this.scale;this.ctx.fillStyle="rgba(0, 0, 0, 0.5)",this.ctx.fillRect(0,0,this.canvas.width,this.canvas.height),this.ctx.clearRect(e,t,n,a),this.ctx.strokeStyle="#ffffff",this.ctx.lineWidth=2,this.ctx.strokeRect(e,t,n,a),this.ctx.fillStyle="#ffffff";let s=8;[[e,t],[e+n-s,t],[e,t+a-s],[e+n-s,t+a-s]].forEach(([o,l])=>{var d;(d=this.ctx)==null||d.fillRect(o,l,s,s)})}updatePreview(){if(!this.modal||!this.image)return;let e=this.modal.querySelector(".asset-crop-preview-canvas");if(!e)return;let t=e.getContext("2d");if(!t)return;let n=150;e.width=n,e.height=n;let a=n/this.cropWidth,s=n/this.cropHeight,r=Math.min(a,s),o=this.cropWidth*r,l=this.cropHeight*r,d=(n-o)/2,u=(n-l)/2;t.drawImage(this.image,this.cropX,this.cropY,this.cropWidth,this.cropHeight,d,u,o,l)}attachEventListeners(){if(!this.modal||!this.canvas)return;this.canvas.addEventListener("mousedown",this.handleMouseDown.bind(this)),this.canvas.addEventListener("mousemove",this.handleMouseMove.bind(this)),this.canvas.addEventListener("mouseup",this.handleMouseUp.bind(this)),this.canvas.addEventListener("wheel",this.handleWheel.bind(this)),this.canvas.addEventListener("touchstart",this.handleTouchStart.bind(this)),this.canvas.addEventListener("touchmove",this.handleTouchMove.bind(this)),this.canvas.addEventListener("touchend",this.handleTouchEnd.bind(this));let e=this.modal.querySelector(".asset-crop-zoom-slider");e==null||e.addEventListener("input",n=>{let a=parseFloat(n.target.value);this.setZoom(a)});let t=this.modal.querySelector(".asset-crop-aspect-select");t==null||t.addEventListener("change",n=>{let a=n.target.value;this.setAspectRatio(a)}),this.modal.addEventListener("click",n=>{switch(n.target.dataset.action){case"reset":this.reset();break;case"apply":this.applyCrop();break;case"cancel":case"close":this.close();break}}),this.modal.addEventListener("click",n=>{n.target===this.modal&&this.close()})}handleMouseDown(e){this.isDragging=!0,this.dragStartX=e.clientX,this.dragStartY=e.clientY,this.lastPanX=this.panX,this.lastPanY=this.panY,this.canvas.style.cursor="grabbing"}handleMouseMove(e){if(!this.isDragging)return;let t=e.clientX-this.dragStartX,n=e.clientY-this.dragStartY;this.panX=this.lastPanX+t,this.panY=this.lastPanY+n,this.constrainPan(),this.render()}handleMouseUp(){this.isDragging=!1,this.canvas.style.cursor="grab"}handleWheel(e){e.preventDefault();let t=e.deltaY>0?.9:1.1;this.setZoom(this.scale*t)}handleTouchStart(e){e.touches.length===1&&(this.isDragging=!0,this.dragStartX=e.touches[0].clientX,this.dragStartY=e.touches[0].clientY,this.lastPanX=this.panX,this.lastPanY=this.panY)}handleTouchMove(e){if(!this.isDragging||e.touches.length!==1)return;e.preventDefault();let t=e.touches[0].clientX-this.dragStartX,n=e.touches[0].clientY-this.dragStartY;this.panX=this.lastPanX+t,this.panY=this.lastPanY+n,this.constrainPan(),this.render()}handleTouchEnd(){this.isDragging=!1}setZoom(e){this.scale=Math.max(.1,Math.min(3,e)),this.updateZoomUI(),this.constrainPan(),this.render()}setAspectRatio(e){let t;switch(e){case"1:1":t=1;break;case"4:3":t=4/3;break;case"16:9":t=16/9;break;case"3:2":t=3/2;break;default:t=void 0}t&&this.applyAspectRatio(t),this.fitToCanvas(),this.render()}updateZoomUI(){if(!this.modal)return;let e=this.modal.querySelector(".asset-crop-zoom-value"),t=this.modal.querySelector(".asset-crop-zoom-slider");e&&(e.textContent=`${this.scale.toFixed(1)}x`),t&&(t.value=this.scale.toString())}constrainPan(){if(!this.canvas)return;let e=this.cropWidth*this.scale,t=this.cropHeight*this.scale;this.panX=Math.max(this.canvas.width-e,Math.min(0,this.panX)),this.panY=Math.max(this.canvas.height-t,Math.min(0,this.panY))}reset(){this.initializeCrop(),this.render()}applyCrop(){var a;if(!this.image||!((a=this.options)!=null&&a.onCrop))return;let e=document.createElement("canvas"),t=e.getContext("2d");if(!t)return;e.width=this.cropWidth,e.height=this.cropHeight,t.drawImage(this.image,this.cropX,this.cropY,this.cropWidth,this.cropHeight,0,0,this.cropWidth,this.cropHeight);let n=e.toDataURL("image/png");this.options.onCrop(n),this.close()}close(){this.modal&&this.modal.parentNode&&this.modal.parentNode.removeChild(this.modal);let e=this.options;this.modal=null,this.canvas=null,this.ctx=null,this.image=null,this.options=null,e!=null&&e.onCancel&&e.onCancel()}};window.openAssetCrop=function(i){new Li().open(i)};ae();var He=require("pixi.js");var ft=require("pixi.js");Ht();var ds=typeof __BUILD_MODE__!="undefined"?__BUILD_MODE__:"undefined",ki=ds;if(typeof window!="undefined")try{let i=new XMLHttpRequest;if(i.open("GET","./build-settings.json",!1),i.send(),i.status===200&&i.responseText){let e=JSON.parse(i.responseText);e!=null&&e.buildMode&&(ki=e.buildMode,console.log(`[ObjectFactory] Build mode overridden by settings: ${ki}`))}}catch{}function ps(i){var t,n,a,s,r;if(typeof window!="undefined"&&window.resolveAnchorVec2)return window.resolveAnchorVec2(i);let e={center:{x:.5,y:.5},"top-left":{x:0,y:0},"top-center":{x:.5,y:0},"top-right":{x:1,y:0},"center-left":{x:0,y:.5},"center-right":{x:1,y:.5},"bottom-left":{x:0,y:1},"bottom-center":{x:.5,y:1},"bottom-right":{x:1,y:1},left:{x:0,y:.5},right:{x:1,y:.5},top:{x:.5,y:0},bottom:{x:.5,y:1}};if(Array.isArray(i))return{x:(t=i[0])!=null?t:.5,y:(n=i[1])!=null?n:.5};if(i&&typeof i=="object"&&"x"in i&&"y"in i)return{x:(a=i.x)!=null?a:.5,y:(s=i.y)!=null?s:.5};if(typeof i=="string"){let o=i.trim().toLowerCase();return(r=e[o])!=null?r:{x:.5,y:.5}}return null}var ue=class{static async create(e,t,n){var l,d,u,c,p,g,m;console.log(`[ObjectFactory] create() called for: ${e}, __BUILD_MODE__: ${ki}`);let a=(l=t==null?void 0:t.render)==null?void 0:l.asset;if(!a){console.log(`[ObjectFactory] No asset definition for: ${e}, returning empty container`);let f=new ft.Container;return this.applyTransform(f,t==null?void 0:t.transform,t),f}let s=(d=t==null?void 0:t.identity)==null?void 0:d.id;console.log(`[ObjectFactory] Calling AssetLoader.load() for: ${e}, configId: ${s}, type: ${a.type}, path: ${a.path}`);let r=await Te.load(e,a,n,s);console.log(`[ObjectFactory] AssetLoader.load() completed for: ${e}, rawAsset type: ${(u=r==null?void 0:r.constructor)==null?void 0:u.name}`);let o;if(a.type==="image")console.log("[ObjectFactory] Creating Sprite from texture:",r,"for object:",e),o=new ft.Sprite(r),console.log("[ObjectFactory] Created object:",o,"type:",(c=o==null?void 0:o.constructor)==null?void 0:c.name),this.applyTransform(o,t==null?void 0:t.transform,t);else if(a.type==="json")if(console.log("[ObjectFactory] JSON asset for",e,"rawAsset type:",(p=r==null?void 0:r.constructor)==null?void 0:p.name,r),r&&(((g=r.constructor)==null?void 0:g.name)==="Container"||r instanceof ft.Container)){console.warn("[ObjectFactory] JSON asset is Container (from cache), reloading JSON directly");let f=[a.path,`/assets/${a.path}`,`assets/${a.path}`,`../assets/${a.path}`],C=!1;for(let b of f)try{let h=await fetch(b);if(h.ok){o=await h.json(),console.log("[ObjectFactory] Reloaded JSON directly from:",b,"type:",(m=o==null?void 0:o.constructor)==null?void 0:m.name),C=!0;break}}catch{continue}C||(console.error("[ObjectFactory] Failed to reload JSON from any path"),o=r)}else o=r;else o=r,o&&typeof o=="object"&&("x"in o||"position"in o)&&this.applyTransform(o,t==null?void 0:t.transform,t);return o}static applyTransform(e,t,n){var a,s,r,o;if(!(!t||!e)&&(t.position&&("x"in e&&"y"in e?(e.x=(a=t.position.x)!=null?a:0,e.y=(s=t.position.y)!=null?s:0):"position"in e&&e.position&&e.position.set((r=t.position.x)!=null?r:0,(o=t.position.y)!=null?o:0)),t.scale!==void 0&&"scale"in e&&e.scale&&(typeof e.scale=="object"&&"set"in e.scale?e.scale.set(t.scale):e.scale=t.scale),t.rotation!==void 0&&"rotation"in e&&(e.rotation=t.rotation),t.anchor&&"anchor"in e&&e.anchor)){let l=ps(t.anchor);l&&("set"in e.anchor?e.anchor.set(l.x,l.y):(e.anchor.x=l.x,e.anchor.y=l.y))}}};ae();var Gt=require("pixi.js"),ge={width:400,height:600,designWidth:400,scaleFactor:1},bt={scale:1,position:1},qt=[];function us(i,e,t,n,a,s,r){qt.push({element:i,originalScale:s,positionHelper:e,heightPercent:a}),e(i,t,n,a,s,r,!1)}function gs(){qt.forEach(({element:i,originalScale:e,positionHelper:t,heightPercent:n})=>{let a=e*ge.scaleFactor;t(i,ge.width,ge.height,n,a,!0,!1)})}function Un(){qt.length=0,console.log("[LAYOUT] Cleared all responsive elements")}function Bt(i,e){console.log(`[SCREEN] updateScreenState called: ${i}x${e}`),ge.width=i,ge.height=e,ge.scaleFactor=Math.min(i/ge.designWidth,1.15),bt.scale=ge.scaleFactor,bt.position=1,console.log(`[SCREEN] Global multipliers - scale: ${bt.scale.toFixed(3)}`),gs()}var M={layout:{scale_multiplier:1,position_offset:{x:0,y:0},debug_rect_visible:!0,debug_rect_color:16711680,debug_rect_thickness:4,debug_rect_scale_x:1,debug_rect_scale_y:1,screen_scale_x:1,screen_scale_y:1},engine:{scale:1,background_scale:1.05,background_offset_y:0,background_alpha:.98,label_pulse_speed:3,label_pulse_intensity:.03}};function hs(i,e,t){let n=M[i];n&&n[e]!==void 0&&(n[e]=t,console.log(`Updated ${i}.${e} = ${t}`))}function fs(){return M}var ms={center:{x:.5,y:.5},"center-center":{x:.5,y:.5},middle:{x:.5,y:.5},"middle-center":{x:.5,y:.5},"top-left":{x:0,y:0},"top-center":{x:.5,y:0},"top-right":{x:1,y:0},"bottom-left":{x:0,y:1},"bottom-center":{x:.5,y:1},"bottom-right":{x:1,y:1},"left-center":{x:0,y:.5},"right-center":{x:1,y:.5},"center-left":{x:0,y:.5},"center-right":{x:1,y:.5},left:{x:0,y:.5},right:{x:1,y:.5},top:{x:.5,y:0},bottom:{x:.5,y:1}};function Ft(i,e){return typeof i=="number"&&Number.isFinite(i)?i:e}function ke(i,e={x:.5,y:.5}){var t;if(Array.isArray(i))return{x:Ft(i[0],e.x),y:Ft(i[1],e.y)};if(i&&typeof i=="object"){let n=i;return{x:Ft(n.x,e.x),y:Ft(n.y,e.y)}}if(typeof i=="string"){let n=i.trim().toLowerCase();return(t=ms[n])!=null?t:e}return e}function $e(i,e,t,n={}){var g,m,f,C,b,h;let a=ke(t),s=(g=n.inset)!=null?g:{},r=(m=n.padding)!=null?m:{x:0,y:0},o=((f=s.left)!=null?f:0)+r.x,l=((C=s.right)!=null?C:0)+r.x,d=((b=s.top)!=null?b:0)+r.y,u=((h=s.bottom)!=null?h:0)+r.y,c=Math.max(0,i-o-l),p=Math.max(0,e-d-u);return{x:o+c*a.x,y:d+p*a.y}}function De(i,e,t,n={}){var f,C,b,h,v,w;let a=(f=n.inset)!=null?f:{},s=(C=n.padding)!=null?C:{x:0,y:0},r=((b=a.left)!=null?b:0)+s.x,o=((h=a.right)!=null?h:0)+s.x,l=((v=a.top)!=null?v:0)+s.y,d=((w=a.bottom)!=null?w:0)+s.y,u=Math.max(0,i-r-o),c=Math.max(0,e-l-d),p=ke(t,{x:.5,y:.5}),g=Math.min(Math.max(p.x,0),1),m=Math.min(Math.max(p.y,0),1);return{x:r+u*g,y:l+c*m}}function Ut(i,e,t,n={}){var u,c,p;if(!i)return;let a=n.positionRatio?De(e,t,n.positionRatio,{inset:n.inset,padding:n.screenPadding}):$e(e,t,n.anchor,{inset:n.inset,padding:n.screenPadding}),s=(u=n.offset)!=null?u:{x:0,y:0},r=a.x+s.x,o=a.y+s.y;i.anchor&&n.renderAnchor&&i.anchor.set(n.renderAnchor.x,n.renderAnchor.y),te(i,r,o);let l=(c=n.scale)!=null?c:1,d=(p=n.scaleMultiplier)!=null?p:1;(n.scale!==void 0||n.scaleMultiplier!==void 0)&&oe(i,l*d)}if(typeof window!="undefined"){let i=window.innerWidth,e=window.innerHeight,t=()=>{let n=window.innerWidth,a=window.innerHeight;(n!==i||a!==e)&&(i=n,e=a,Bt(n,a))};window.addEventListener("resize",t),window.addEventListener("orientationchange",()=>{setTimeout(t,100)}),window.mraid&&(window.mraid.addEventListener("viewableChange",t),window.mraid.addEventListener("sizeChange",t)),Bt(window.innerWidth,window.innerHeight),window.updateDebugConfig=hs,window.getDebugConfig=fs,window.copyConfig=Ls,window.applyConfig=mt,window.applyConfigForRatio=ks,window.positionAtBottom=Gn,window.positionAtTop=vs,window.positionAtCenter=ws,window.positionAtLeft=xs,window.positionAtRight=Ss,window.positionAtBottomLeft=Es,window.positionAtBottomRight=Cs,window.positionAtTopLeft=As,window.positionAtTopRight=Ts,window.applyPositionContract=ys,console.log("\u{1F3AE} Debug Config Functions Available:"),console.log("\u2022 updateDebugConfig(category, key, value)"),console.log("\u2022 getDebugConfig()"),console.log("\u2022 copyConfig(presetName)"),console.log("\u2022 applyConfig(config)"),console.log("\u2022 applyConfigForRatio(width, height)"),console.log("\u{1F4CD} Positioning Helpers Available (with scale):"),console.log("\u2022 positionAtBottom(element, w, h, percent, scale)"),console.log("\u2022 positionAtTop(element, w, h, percent, scale)"),console.log("\u2022 positionAtCenter(element, w, h, offsetX, offsetY, scale)"),console.log("\u2022 positionAtLeft/Right(element, w, h, percent, scale)"),console.log("\u2022 Corner positions: BottomLeft/Right, TopLeft/Right (all with scale)"),console.log("\u2022 applyPositionContract(element, w, h, contract)"),console.log("Example: positionAtCenter(mySprite, 400, 600, 0, -50, 1.2)")}function Vt(i,e,t=0){return i*e+t}function Wt(i,e,t=0){return i*(1-e)+t}function Yt(i,e,t=0){return i*e+t}function Kt(i,e,t=0){return i*(1-e)+t}function Q(i,e=0){return i/2+e}function bs(i,e){return i*e}function ys(i,e,t,n){var r,o,l,d,u,c,p,g,m,f,C,b,h,v,w,y,I,j,B,R;let a=0,s=0;switch(n.type){case"top":a=Q(e,(o=(r=n.offset)==null?void 0:r.x)!=null?o:0),s=Vt(t,n.percent,(d=(l=n.offset)==null?void 0:l.y)!=null?d:0);break;case"bottom":a=Q(e,(c=(u=n.offset)==null?void 0:u.x)!=null?c:0),s=Wt(t,n.percent,(g=(p=n.offset)==null?void 0:p.y)!=null?g:0);break;case"left":a=Yt(e,n.percent,(f=(m=n.offset)==null?void 0:m.x)!=null?f:0),s=Q(t,(b=(C=n.offset)==null?void 0:C.y)!=null?b:0);break;case"right":a=Kt(e,n.percent,(v=(h=n.offset)==null?void 0:h.x)!=null?v:0),s=Q(t,(y=(w=n.offset)==null?void 0:w.y)!=null?y:0);break;case"center":a=Q(e,(j=(I=n.offset)==null?void 0:I.x)!=null?j:0),s=Q(t,(R=(B=n.offset)==null?void 0:B.y)!=null?R:0);break}i.position?i.position.set(a,s):(i.x=a,i.y=s),n.scale!==void 0&&n.scale!==1&&i.scale&&(typeof i.scale.set=="function"?i.scale.set(n.scale,n.scale):(i.scale.x=n.scale,i.scale.y=n.scale))}function Gn(i,e,t,n=.2,a=1,s=!0,r=!1){let o=bs(t,n),l=Wt(t,n/2);te(i,Q(e),l);let d=s?a*ge.scaleFactor:a;oe(i,d),r&&!qt.find(u=>u.element===i)&&us(i,Gn,e,t,n,a,s)}function vs(i,e,t,n=.1,a=1){te(i,Q(e),Vt(t,n)),oe(i,a)}function ws(i,e,t,n=0,a=0,s=1){te(i,Q(e,n),Q(t,a)),oe(i,s)}function xs(i,e,t,n=.1,a=1){te(i,Yt(e,n),Q(t)),oe(i,a)}function Ss(i,e,t,n=.1,a=1){te(i,Kt(e,n),Q(t)),oe(i,a)}function Es(i,e,t,n=.05,a=.05,s=1){te(i,Yt(e,a),Wt(t,n)),oe(i,s)}function Cs(i,e,t,n=.05,a=.05,s=1){te(i,Kt(e,a),Wt(t,n)),oe(i,s)}function As(i,e,t,n=.05,a=.05,s=1){te(i,Yt(e,a),Vt(t,n)),oe(i,s)}function Ts(i,e,t,n=.05,a=.05,s=1){te(i,Kt(e,a),Vt(t,n)),oe(i,s)}function te(i,e,t){i&&i.position?typeof i.position.set=="function"?i.position.set(e,t):(i.position.x=e,i.position.y=t):i&&(i.x=e,i.y=t)}function oe(i,e){e!==1&&i&&i.scale&&(typeof i.scale.set=="function"?i.scale.set(e,e):i.scale.x!==void 0&&i.scale.y!==void 0&&(i.scale.x=e,i.scale.y=e))}var ze={default:{layout:{scale_multiplier:1,position_offset:{x:0,y:0},debug_rect_visible:!0,debug_rect_color:16711680,debug_rect_thickness:4,debug_rect_scale_x:1,debug_rect_scale_y:1,screen_scale_x:1,screen_scale_y:1},engine:{scale:1,background_scale:1.05,background_offset_y:0,background_alpha:.98,label_pulse_speed:3,label_pulse_intensity:.03}},wide:{layout:{scale_multiplier:1,position_offset:{x:0,y:0},debug_rect_visible:!0,debug_rect_color:16711680,debug_rect_thickness:4,debug_rect_scale_x:1,debug_rect_scale_y:1,screen_scale_x:.9,screen_scale_y:1.1},engine:{scale:1,background_scale:1.1,background_offset_y:0,background_alpha:.95,label_pulse_speed:3,label_pulse_intensity:.03}},square:{layout:{scale_multiplier:1,position_offset:{x:0,y:0},debug_rect_visible:!0,debug_rect_color:16711680,debug_rect_thickness:4,debug_rect_scale_x:1,debug_rect_scale_y:1,screen_scale_x:.85,screen_scale_y:.85},engine:{scale:1,background_scale:1,background_offset_y:0,background_alpha:1,label_pulse_speed:3,label_pulse_intensity:.03}},tall:{layout:{scale_multiplier:1,position_offset:{x:0,y:0},debug_rect_visible:!0,debug_rect_color:16711680,debug_rect_thickness:4,debug_rect_scale_x:1,debug_rect_scale_y:1,screen_scale_x:1.1,screen_scale_y:.9},engine:{scale:1,background_scale:.95,background_offset_y:0,background_alpha:1,label_pulse_speed:3,label_pulse_intensity:.03}}};function Ls(i){return i&&ze[i]?JSON.parse(JSON.stringify(ze[i])):JSON.parse(JSON.stringify(M))}function mt(i){Object.keys(i).forEach(e=>{let t=e;M[t]&&i[t]&&Object.assign(M[t],i[t])}),console.log("Config applied:",i)}function ks(i,e){let t=i/e;t>1.6?(mt(ze.wide),console.log("Applied WIDE config for ratio:",t)):t<.7?(mt(ze.tall),console.log("Applied TALL config for ratio:",t)):t>.8&&t<1.2?(mt(ze.square),console.log("Applied SQUARE config for ratio:",t)):(mt(ze.default),console.log("Applied DEFAULT config for ratio:",t))}if(typeof window!="undefined"){let i=window;i.configPresets=ze,i.resolveAnchorVec2=i.resolveAnchorVec2||ke,i.resolveScreenAnchorPoint=i.resolveScreenAnchorPoint||$e,i.resolveScreenRatioPoint=i.resolveScreenRatioPoint||De}var W=null;function qn(i,e,t,n,a,s={}){var G,ie,be,ye,ve,we,xe,Se,q,Pe,nt,at,st,rt,ot,lt,ct,dt,pt,ut,N,K,U,X,Fe,Me,Hi,Ni,Fi,Bi,Ui,Gi,qi,Vi;let r=(G=s.enableDebugLogs)!=null?G:!1;r&&(console.log("\u{1F3AF} [LAYOUT_DEBUGS] ===== STARTING LAYOUT CALCULATION ====="),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Screen dimensions:",{width:n.width,height:n.height}),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Time:",t),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Options:",s));let{mainContainer:o,label:l,background:d,backgroundTexture:u,app:c}=i;if(!c||!c.renderer){r&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] \u274C No app or renderer, skipping layout");return}r&&(console.log("\u{1F3AF} [LAYOUT_DEBUGS] App renderer dimensions:",{width:c.renderer.width,height:c.renderer.height}),console.log("\u{1F3AF} [LAYOUT_DEBUGS] App screen dimensions:",{width:c.screen.width,height:c.screen.height}));let p=n.width,g=n.height;r&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] Base dimensions:",{baseWidth:p,baseHeight:g});let m=p*M.layout.screen_scale_x,f=g*M.layout.screen_scale_y,C=p/2,b=e.engine.runtime||{},h=b.layout||{};r&&(console.log("\u{1F3AF} [LAYOUT_DEBUGS] Debug config:",{screen_scale_x:M.layout.screen_scale_x,screen_scale_y:M.layout.screen_scale_y}),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Calculated dimensions:",{width:m,height:f,midX:C}),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Engine runtime:",b),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Layout config:",h));let v=h.design_width_portrait||400,w=m/v;w=Math.min(w,1.15);let y=w*((ie=M.engine.scale)!=null?ie:1),I=(be=s.skipMainContainerTransform)!=null?be:!1;!I&&o&&o.scale&&(typeof o.scale.set=="function"?o.scale.set(y):(o.scale.x=y,o.scale.y=y));let j=(ye=h.main_container_anchor)!=null?ye:"center",B=(ve=h.main_container_position_ratio)!=null?ve:{x:.5,y:.5},R=(we=h.main_container_offset)!=null?we:{x:0,y:0},H=h.main_container_position_ratio?De(p,g,B):$e(p,g,j),z=H.x+R.x+M.layout.position_offset.x,T=H.y+R.y+M.layout.position_offset.y;if(!I&&o&&o.position&&(typeof o.position.set=="function"?o.position.set(z,T):(o.position.x=z,o.position.y=T)),a&&(o!=null&&o.toLocal))for(let[V,F]of e.objects.entries()){let _=F==null?void 0:F.transform;if(!_||((xe=_.position_mode)!=null?xe:"static")!=="static")continue;let k=(Se=a.get)==null?void 0:Se.call(a,V),ne=((q=k==null?void 0:k.getDisplayObject)==null?void 0:q.call(k))||(k==null?void 0:k.pixiObject)||k;if(!ne||ne.parent!==o)continue;let kt=_.position_ratio!=null?De(p,g,_.position_ratio):$e(p,g,(Pe=_.anchor)!=null?Pe:"center"),It=o.toLocal(new Gt.Point(kt.x,kt.y)),Pt=(nt=_.position)!=null?nt:{x:0,y:0},je=It.x+Pt.x,ri=It.y+Pt.y;typeof(k==null?void 0:k.setPosition)=="function"?k.setPosition(je,ri):(te(ne,je,ri),(at=k==null?void 0:k.transform)!=null&&at.position&&(k.transform.position.x=je,k.transform.position.y=ri))}let S=typeof window!="undefined"?window.__BUILD_SETTINGS__:null,A=((S==null?void 0:S.buildMode)||(typeof __BUILD_MODE__!="undefined"?__BUILD_MODE__:"dev"))==="dev";if(M.layout.debug_rect_visible&&A){(!W||W.parent!==c.stage)&&(W==null||W.destroy(),W=new Gt.Graphics,W.zIndex=9999,c.stage.addChild(W)),W.clear();let V=M.layout.debug_rect_scale_x,F=M.layout.debug_rect_scale_y,_=(p-4)*V,Ee=(g-4)*F,k=(p-_)/2,ne=(g-Ee)/2;r&&(console.log("\u{1F3AF} [LAYOUT_DEBUGS] ===== DEBUG RECT POSITIONING ====="),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Debug rect calculations:",{baseWidth:p,baseHeight:g,rectW:_,rectH:Ee,offsetX:k,offsetY:ne}),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Debug rect final position:",{x:2+k,y:2+ne,width:_,height:Ee})),W.rect(2+k,2+ne,_,Ee).stroke({width:M.layout.debug_rect_thickness,color:M.layout.debug_rect_color})}else W&&(W.destroy(),W=null);let L=((st=i.label)==null?void 0:st.config)||e.objects.get("label_1")||e.objects.get("ui_tutorial_1");if(l&&l.position&&L){let V=(ot=(rt=L==null?void 0:L.transform)==null?void 0:rt.anchor)!=null?ot:"center",F=(lt=L==null?void 0:L.transform)==null?void 0:lt.position_ratio,_=((ct=L==null?void 0:L.transform)==null?void 0:ct.offset)||{x:0,y:0};Ut(l,p,g,{anchor:V,positionRatio:F,offset:{x:_.x*y,y:_.y*y},renderAnchor:ke(V)})}if(l&&l.alpha>0){let V=1+Math.sin(t*M.engine.label_pulse_speed)*M.engine.label_pulse_intensity,F=(pt=(dt=L==null?void 0:L.transform)==null?void 0:dt.scale)!=null?pt:1,_=V*y*F;l.scale&&(typeof l.scale.set=="function"?l.scale.set(_):(l.scale.x=_,l.scale.y=_))}if(r&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] ===== BACKGROUND POSITIONING ====="),d){r&&(console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background object exists:",!!d),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background type:",(ut=d.constructor)==null?void 0:ut.name)),d.alpha=((K=(N=b.background)==null?void 0:N.alpha)!=null?K:.98)*M.engine.background_alpha,r&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background alpha set to:",d.alpha);let V=e.objects.get("background_1");r&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background config:",V);let F=(V==null?void 0:V.transform)||{};r&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background transform:",F);let _=F.offset||{x:0,y:0},Ee=((X=(U=b.background)==null?void 0:U.offset_y)!=null?X:0)+M.engine.background_offset_y,k=(Fe=F.anchor)!=null?Fe:"center",ne=F.position_ratio;if(r&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background positioning params:",{bgOffset:_,bgRuntimeOffsetY:Ee,bgScreenAnchor:k,bgPositionRatio:ne,baseWidth:p,baseHeight:g,finalScale:y}),Ut(d,p,g,{anchor:k,positionRatio:ne,offset:{x:_.x*y,y:_.y*y+Ee},renderAnchor:ke(k)}),r&&(console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background position after applyScreenAnchor:",{x:d.x,y:d.y,scaleX:(Me=d.scale)==null?void 0:Me.x,scaleY:(Hi=d.scale)==null?void 0:Hi.y,anchorX:(Ni=d.anchor)==null?void 0:Ni.x,anchorY:(Fi=d.anchor)==null?void 0:Fi.y,pivotX:(Bi=d.pivot)==null?void 0:Bi.x,pivotY:(Ui=d.pivot)==null?void 0:Ui.y,width:d.width,height:d.height}),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background texture dimensions:",{textureWidth:u==null?void 0:u.width,textureHeight:u==null?void 0:u.height})),u){let kt=Math.max(m/u.width,f/u.height),It=(qi=(Gi=b.background)==null?void 0:Gi.scale_multiplier)!=null?qi:1.05,Pt=(Vi=F.scale)!=null?Vi:1,je=kt*It*M.engine.background_scale*Pt;d.scale&&(typeof d.scale.set=="function"?d.scale.set(je):(d.scale.x=je,d.scale.y=je))}else d&&typeof d.clear=="function"&&(d.clear(),d.rect(-m/2,-f/2,m,f).fill({color:1444375}))}}ae();ae();var Vn=jt(require("lottie-web"),1);Xt(Tn);typeof window!="undefined"&&!window.lottie&&(window.lottie=Vn.default);gi();ae();var Ii=rn.version,Ps=new Set(["init","boot","view","ready","start","pause","resume","complete","error","engagement","first_interaction","retry","cta_show","cta_click","cta_dismiss","clickout","conversion","session_time","level_time","load_time","level_start","level_complete","level_fail","checkpoint","reward","tutorial_start","tutorial_complete","tutorial_skip","ab_assign","fps","memory","asset_load_start","asset_load_complete"]);sn();var Qn={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"},ea=Math.random().toString(36).slice(2),Ye=null,Ve={...Qn},ta="web_embed",_i={},wt,Pi=!1,vt=!1,St=!1,ia=!1,$i=1,Zt=0,ti=!1,he=!1,We="",Ke=Math.floor(window.innerWidth),Xe=Math.floor(window.innerHeight),Oi=Ke>Xe,fe=!1,xt=!1,Wn=!1,Yn=!1,Mi=!1,Qt=null,Ne=null,Ri=!1,zi=!1,Jt=new Map;function na(){if(!Ne)return null;let i=Date.now()-Ne;return!Number.isFinite(i)||i<0?null:i}function ji(i){if(Ri)return;let e=na();e!==null&&(Ri=!0,x("session_time",{duration_ms:e,reason:i}))}function Kn(){if(Ye)return Ye;let i=document.createElement("div");return i.id="handler-root",i.setAttribute("data-handler-root","true"),document.body.appendChild(i),Ye=i,i}function ei(i){switch(i){case"interaction":return"engagement";case"finish":return"complete";case"install":return"cta_click";default:return i}}function aa(i,e){return{event_name:i,ts:Date.now(),session_id:ea,deployment_id:Ve.deployment_id,variant_id:Ve.variant_id,export_profile_id:Ve.profile_id,instance_id:Ve.instance_id||"default",env:ta==="mraid"?"mraid":"web",attribution:wt,payload:e}}function x(i,e){let t=ei(i),n=aa(t,e);li(n,!!_i.analytics),Ot(t,n),t!==i&&Ot(i,n)}function Et(){Qt&&(Qt(Ke,Xe),Qt=null)}function Je(i){$i=i,x("volume",i)}function Ze(i){i&&(ia=!0),!St&&(St=!0,x("pause"),Je(0))}function Ct(i){!i&&ia||St&&(St=!1,x("resume"),Je($i))}function Ie(i,e){Ke=Math.floor(i||window.innerWidth),Xe=Math.floor(e||window.innerHeight),Oi=Ke>Xe,x("resize",{width:Ke,height:Xe})}function Ms(){if(yn())try{let i=mraid.getMaxSize();Ie(i.width,i.height);let e=()=>{mraid.isViewable()&&mraid.getState()!=="hidden"?Ct():Ze()};if(mraid.addEventListener("viewableChange",e),mraid.addEventListener("stateChange",e),mraid.addEventListener("sizeChange",()=>{let t=mraid.getMaxSize();Ie(t.width,t.height)}),mraid.getAudioVolume){let t=mraid.getAudioVolume();Je(t?1:0)}if(mraid.addEventListener("audioVolumeChange",t=>{t!==null&&Je(t>0?1:0)}),mraid.addEventListener("error",(t,n)=>{console.warn("mraid error:",t,"action:",n)}),ti=!0,mraid.isViewable()&&mraid.getState()!=="hidden")fe=!0,x("boot"),x("view"),x("ready"),he=!0,Et();else{let t=()=>{fe=!0,x("boot"),x("view"),x("ready"),he=!0,Et()};mraid.addEventListener("ready",t)}}catch(i){console.warn("MRAID hook skipped",i)}}function js(){if(vn())try{let i=dapi.getScreenSize();Ie(i.width,i.height),dapi.addEventListener("viewableChange",t=>{t.isViewable?Ct():Ze()}),dapi.addEventListener("adResized",t=>{let n=dapi.getScreenSize();Ie(t.width||n.width,t.height||n.height)});let e=dapi.getAudioVolume();if(Je(e?1:0),dapi.addEventListener("audioVolumeChange",t=>Je(t?1:0)),ti=!0,dapi.isViewable())fe=!0,x("boot"),x("view"),x("ready"),he=!0,Et();else{let t=()=>{fe=!0,x("boot"),x("view"),x("ready"),he=!0,Et()};dapi.addEventListener("ready",t)}}catch(i){console.warn("DAPI hook skipped",i)}}function Xn(){let i=()=>{fe||document.visibilityState==="visible"&&(document.readyState==="complete"||document.readyState==="interactive")&&(fe=!0,x("boot"),x("view"),x("ready"),he=!0,Et(),xt&&(xt=!1,le.start()))};window.addEventListener("resize",()=>Ie()),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"?(Ct(),i()):Ze()}),document.readyState==="complete"||document.readyState==="interactive"?i():window.addEventListener("load",i),ti=!0}function _s(){let i=e=>{typeof TouchEvent!="undefined"&&e instanceof TouchEvent&&(Wn=!0),!(Wn&&e instanceof MouseEvent)&&(Zt+=1,zi||(zi=!0,x("first_interaction",{count:Zt})),x("interaction",Zt))};document.addEventListener("mousedown",i),document.addEventListener("touchstart",i)}function Jn(i){var n,a,s,r,o,l,d,u,c,p,g,m;let e=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none";if((typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed")==="google")try{(n=window.ExitApi)==null||n.exit();return}catch{}if(e==="mraid"&&typeof mraid!="undefined")mraid.open(i||"");else if(e==="dapi"&&typeof dapi!="undefined")dapi.openStoreUrl();else if(Ge())(s=(a=window.TJ_API)==null?void 0:a.click)==null||s.call(a);else if(wn())(o=(r=window.FbPlayableAd)==null?void 0:r.onCTAClick)==null||o.call(r);else if(Cn())(d=(l=window.ScPlayableAd)==null?void 0:l.onCTAClick)==null||d.call(l);else if(En())try{(c=(u=window.smxTracking)==null?void 0:u.redirect)==null||c.call(u)}catch(f){console.warn("Smadex redirect failed",f)}else if(xn()){let f=window.ExitApi;f&&typeof f.exit=="function"?f.exit(i||We||""):i&&window.open(i)}else Ue()?(p=window.install)==null||p.call(window):Sn()?(g=window.openAppStore)==null||g.call(window):ci()?(m=parent==null?void 0:parent.postMessage)==null||m.call(parent,"download","*"):i&&window.open(i)}function Os(){let i=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed",e=t=>{if(!t)return;let n=new Image;n.src=t};if(i==="bigabid"){let t=window.BIGABID_BIDTIMEMACROS;if(!t)return;J("view",()=>e(t.mraid_viewable)),J("start",()=>e(t.game_viewable)),J("engagement",()=>e(t.engagement));let n=()=>e(t.complete);J("complete",n),_t("engagement",a=>{var s;((s=a==null?void 0:a.payload)==null?void 0:s.count)>3&&n()}),J("cta_click",()=>e(t.click))}else if(i==="inmobi"){let t=window.INMOBI_DSPMACROS;if(!t)return;J("view",()=>e(t.Ad_Load_Start)),J("start",()=>e(t.Ad_Viewable)),J("engagement",()=>e(t.First_Engagement)),J("complete",()=>e(t.Gameplay_Complete)),J("cta_click",()=>e(t.DSP_Click)),J("start",()=>{[5,10,15,20,25,30].forEach(n=>setTimeout(()=>e(t[`Spent_${n}_Seconds`]),n*1e3))})}}function Rs(){if(!Ge())return;let i=window.TJ_API;i&&i.setPlayableAPI&&i.setPlayableAPI({skipAd:()=>{try{le.finish()}catch(e){console.warn("Tapjoy skip failed",e)}}})}function Zn(){var e,t,n;let i=window.TJ_API;(e=i==null?void 0:i.objectiveComplete)==null||e.call(i),(t=i==null?void 0:i.playableFinished)==null||t.call(i),(n=i==null?void 0:i.gameplayFinished)==null||n.call(i)}function zs(){Ue()&&(window.mintGameStart=()=>{Ct(!0),Ie()},window.mintGameClose=()=>{Ze(!0)})}function $s(){if(!di())return;let i=window.NUC;!i||!i.trigger||(le.on("cta_click",()=>{var e,t;return(t=(e=i.trigger).convert)==null?void 0:t.call(e,We)}),le.on("complete",()=>{var e,t;return(t=(e=i.trigger).tryAgain)==null?void 0:t.call(e)}))}var le={init(i={},e){var t;if(ta=i.profile||"web_embed",_i=i.consent||{},Ve={...Qn,...i.ids||{}},Ye=i.rootEl||Ye,wt=void 0,Ji((t=i.telemetry)!=null&&t.endpoint?i.telemetry:null),Ne=null,Ri=!1,zi=!1,Jt.clear(),We=i.destinationUrl||(/android/i.test(navigator.userAgent)?"https://play.google.com/store":"https://www.apple.com/app-store/"),e&&(Qt=e),x("init"),document.body.oncontextmenu=()=>!1,Kn(),Hs(Ye),An(),Ms(),js(),!ti){if(document.readyState==="complete")Xn();else if(!Yn){Yn=!0;let n=()=>{Xn(),window.removeEventListener("load",n),document.removeEventListener("DOMContentLoaded",n)};window.addEventListener("load",n),document.addEventListener("DOMContentLoaded",n)}}_s(),Os(),Rs(),zs(),$s(),console.log(`%c @handler/playable-sdk %c v${Ii} `,"background: var(--ui-console-info); color: var(--ui-white); font-size: 14px; padding: 4px 8px; border-top-left-radius: 4px; border-bottom-left-radius: 4px;","background: var(--ui-console-bg); color: var(--ui-console-text); font-size: 14px; padding: 4px 8px; border-top-right-radius: 4px; border-bottom-right-radius: 4px;"),fe&&!he&&(x("boot"),x("view"),x("ready"),xt&&(xt=!1,le.start()),he=!0),he=fe},getRoot(){return Kn()},get version(){return Ii},get maxWidth(){return Ke},get maxHeight(){return Xe},get isLandscape(){return Oi},get isReady(){return he},get isStarted(){return Pi},get isPaused(){return St},get isFinished(){return vt},get volume(){return $i},get interactions(){return Zt},on(i,e){_t(ei(i),e)},off(i,e){oi(ei(i),e)},start(){var i,e;if(!Pi){if(!fe){xt=!0;return}if(Pi=!0,Ne||(Ne=Date.now()),x("start"),Ie(),Ue())Ze(),(i=window.gameReady)==null||i.call(window);else if(Ge()){let t=window.TJ_API;(e=t==null?void 0:t.setPlayableBuild)==null||e.call(t,{orientation:Oi?"landscape":"portrait",buildID:Ii})}}},finish(){var i,e;vt||(vt=!0,x("complete"),ji("complete"),Ue()?(i=window.gameEnd)==null||i.call(window):ci()?(e=parent==null?void 0:parent.postMessage)==null||e.call(parent,"complete","*"):Ge()&&Zn())},install(i){if(!vt){vt=!0,Ge()?(Zn(),setTimeout(()=>le.install(i),300)):(x("complete"),setTimeout(()=>le.install(i),0));return}Mi||(Mi=!0,setTimeout(()=>Mi=!1,500),x("cta_click"),x("conversion"),ji("cta"),Jn(i||We))},emit(i,e){let t=ei(i);if(!Ps.has(t)&&t!=="resize"&&t!=="volume"&&!t.startsWith("custom."))throw new Error(`Event ${i} must be canonical or namespaced as custom.<mechanic_id>.<event>`);let n=aa(t,e);li(n,!!_i.analytics),Ot(t,n)},gameStart(){le.start()},gameEnd(){le.finish()},ctaClick(i,e){x("cta_click",{url:i||We,manual:!0}),(e==null?void 0:e.open)!==!1&&Jn(i||We)},ctaShow(i){x("cta_show",i)},ctaDismiss(i){x("cta_dismiss",i)},getGameTimeMs(){return na()},endSession(i="manual"){ji(i)},setAttribution(i){wt=i},abTest(i,e){if(!i)throw new Error("abTest requires experimentId");if(!Array.isArray(e)||e.length<2)throw new Error("abTest requires at least 2 variants");let t=Math.abs(Ds(`${ea}:${i}`))%e.length,n=e[t];return wt={...wt||{},experiment_id:i},Ve.variant_id=n,x("ab_assign",{experiment_id:i,variant_id:n}),n},levelStart(i,e){Ne||(Ne=Date.now()),x("level_start",{level_id:i,...e})},levelComplete(i,e){x("level_complete",{level_id:i,...e})},levelFail(i,e){x("level_fail",{level_id:i,...e})},checkpoint(i,e){x("checkpoint",{checkpoint_id:i,...e})},reward(i,e){x("reward",{reward_id:i,...e})},tutorialStart(i,e){x("tutorial_start",{step_id:i,...e})},tutorialComplete(i,e){x("tutorial_complete",{step_id:i,...e})},tutorialSkip(i,e){x("tutorial_skip",{step_id:i,...e})},timerStart(i){i&&Jt.set(i,Date.now())},timerEnd(i,e="custom",t){if(!i)return;let n=Jt.get(i);if(!n)return;Jt.delete(i);let a=Date.now()-n;if(!(!Number.isFinite(a)||a<0)){if(e==="custom"){x("engagement",{action:"timer",key:i,duration_ms:a,...t});return}x(e,{key:i,duration_ms:a,...t})}},fps(i,e){x("fps",{value:i,...e})},memory(i,e){x("memory",{bytes:i,...e})},assetLoadStart(i,e){x("asset_load_start",{asset_id:i,...e})},assetLoadComplete(i,e){x("asset_load_complete",{asset_id:i,...e})},reportError(i,e,t){x("error",{code:i,message:e,...t})},retry(){var i,e,t;if(Ue())(i=window.gameRetry)==null||i.call(window);else if(di()){let n=window.NUC;(t=(e=n==null?void 0:n.trigger)==null?void 0:e.tryAgain)==null||t.call(e)}x("engagement",{action:"retry"})},pause(){Ze(!0)},resume(){Ct(!0)},resize(i,e){Ie(i,e)}},yt=le;function Ds(i){let e=2166136261;for(let t=0;t<i.length;t++)e^=i.charCodeAt(t),e=Math.imul(e,16777619);return e|0}function Hs(i){let e=document.createElement("script");e.type="text/javascript",e.textContent=`
|
|
230
230
|
(function(){
|
|
231
231
|
var events = ['touchstart','touchend','mousedown','keydown'];
|
|
232
232
|
function unlock(){
|
|
@@ -242,7 +242,7 @@ Style guidelines: ${i.summary}`;this.promptInput.value=a,this.currentPrompt=a}}c
|
|
|
242
242
|
}
|
|
243
243
|
events.forEach(function(e){ document.addEventListener(e, unlock, false); });
|
|
244
244
|
})();
|
|
245
|
-
`,n.appendChild(e)}async function Vt(n,e={}){let t=new ea.Application;await t.init({resizeTo:n,autoDensity:!0,resolution:window.devicePixelRatio||1,antialias:!0,backgroundAlpha:0});let i=r=>{var c,p,g,m;if(!t.renderer)return;let o=(c=r==null?void 0:r.width)!=null?c:n.clientWidth,l=(p=r==null?void 0:r.height)!=null?p:n.clientHeight,d=o&&o>0?o:(g=window.innerWidth)!=null?g:320,u=l&&l>0?l:(m=window.innerHeight)!=null?m:480;t.renderer.resize(d,u)};n.appendChild(t.canvas),n.style.position="relative",n.style.display="flex",n.style.flexDirection="column",n.style.alignItems="stretch",n.style.width="100%",n.style.height="100dvh",n.style.minHeight="100vh",n.style.maxWidth="100%",n.style.maxHeight="100%",n.style.boxSizing="border-box",n.style.overflow="hidden",e.background&&(n.style.background=e.background),i();let a=document.createElement("div");return a.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(";")),n.appendChild(a),ft.on("pause",()=>{t.ticker.stop(),document.querySelectorAll("audio").forEach(o=>o.pause())}),ft.on("resume",()=>{t.ticker.start(),document.querySelectorAll("audio").forEach(o=>{o.currentTime>0&&!o.ended&&o.play().catch(()=>{})})}),ft.on("resize",({payload:r})=>{i({width:r==null?void 0:r.width,height:r==null?void 0:r.height})}),window.addEventListener("resize",()=>i()),requestAnimationFrame(()=>i()),new ResizeObserver(r=>{let o=r[0];if(o&&o.contentRect.width>0&&o.contentRect.height>0){let l=Math.round(o.contentRect.width),d=Math.round(o.contentRect.height);if(i({width:l,height:d}),typeof window!="undefined"&&window.gameApp&&window.gameObjectManager){let u={width:l,height:d,dpr:Math.max(1,Math.floor(window.devicePixelRatio||1)),presetId:"auto-resize",isLandscape:l>d};window.dispatchEvent(new CustomEvent("handler-preview:screen",{detail:u}))}}}).observe(n),{app:t,stage:t.stage,overlay:a,applySize:i}}var W=require("pixi.js"),Et=class{constructor(e){var a,s;let t=e==null?void 0:e.position,i=e==null?void 0:e.offset;this._basePosition={x:typeof(t==null?void 0:t.x)=="number"?t.x:0,y:typeof(t==null?void 0:t.y)=="number"?t.y:0},this._offset={x:typeof(i==null?void 0:i.x)=="number"?i.x:0,y:typeof(i==null?void 0:i.y)=="number"?i.y:0},this.position={x:this._basePosition.x+this._offset.x,y:this._basePosition.y+this._offset.y},this.scale=(a=e==null?void 0:e.scale)!=null?a:1,this.rotation=(s=e==null?void 0:e.rotation)!=null?s:0}update(e){let t=e.position,i=e.offset;t!==void 0&&(this._basePosition={x:typeof(t==null?void 0:t.x)=="number"?t.x:0,y:typeof(t==null?void 0:t.y)=="number"?t.y:0}),i!==void 0&&(this._offset={x:typeof(i==null?void 0:i.x)=="number"?i.x:0,y:typeof(i==null?void 0:i.y)=="number"?i.y:0}),(t!==void 0||i!==void 0)&&(this.position={x:this._basePosition.x+this._offset.x,y:this._basePosition.y+this._offset.y}),e.scale!==void 0&&(this.scale=e.scale),e.rotation!==void 0&&(this.rotation=e.rotation)}syncToPixi(e){e&&(e.position.set(this.position.x,this.position.y),e.scale.set(this.scale),e.rotation=this.rotation)}},St=class{constructor(e){var t,i,a,s;this.z_index=(t=e==null?void 0:e.z_index)!=null?t:0,this.alpha=(i=e==null?void 0:e.alpha)!=null?i:1,this.visible=(a=e==null?void 0:e.visible)!=null?a:!0,this.tint=(s=e==null?void 0:e.tint)!=null?s:null}update(e){e.z_index!==void 0&&(this.z_index=e.z_index),e.alpha!==void 0&&(this.alpha=e.alpha),e.visible!==void 0&&(this.visible=e.visible),e.tint!==void 0&&(this.tint=e.tint)}syncToPixi(e,t){if(!e)return;if(e.zIndex=this.z_index,t!=null&&t.startsWith("ui_endgame_")||(e.alpha=this.alpha),e.visible=this.visible,this.tint!==null&&"tint"in e&&(e.tint=this.tint),t&&"texture"in e)try{let{AssetTextures:a}=require("handler-playable-sdk/pixi");if(a&&a[t]){let s=a[t];s&&(e.texture=s)}}catch{}}},Ct=class{constructor(e,t,i,a){this._tickerCleanup=null;this.onRebuildRequired=null;this.instanceId=e,this.objectConfig=t,this.pixiObject=i,this._config=a,this.transform=new Et(a.transform),this.renderer=new St(a.render),this.sync()}sync(){this.transform.syncToPixi(this.pixiObject),this.renderer.syncToPixi(this.pixiObject,this.instanceId),this.applyAnchor(),this.applyEffectsScale(),this.applyEffects(),this.syncTextProperties(),(!this._initialized||this._shouldReplayIntro)&&(this.applyIntro(),this._initialized=!0,this._shouldReplayIntro=!1),this.applyMotion()}syncTextProperties(){var t;if(!this.pixiObject||!("text"in this.pixiObject))return;let e=(t=this._config)==null?void 0:t.ui;e&&(e.text!==void 0&&this.pixiObject.text!==e.text&&(this.pixiObject.text=e.text),this.pixiObject.style&&(e.fontSize!==void 0&&(this.pixiObject.style.fontSize=e.fontSize),e.color!==void 0&&(this.pixiObject.style.fill=e.color),e.align!==void 0&&(this.pixiObject.style.align=e.align)))}destroy(){this._tickerCleanup&&(this._tickerCleanup(),this._tickerCleanup=null),this._introTicker&&(W.Ticker.shared.remove(this._introTicker),this._introTicker=null),this.pixiObject&&this.pixiObject.parent&&this.pixiObject.parent.removeChild(this.pixiObject)}updateConfig(e){var l,d,u,c,p,g,m,f,C,b,h;let t=(d=(l=this._config)==null?void 0:l.motion)==null?void 0:d.intro,i=(u=e==null?void 0:e.motion)==null?void 0:u.intro;i!=null&&i.enabled&&JSON.stringify(t)!==JSON.stringify(i)&&(this._shouldReplayIntro=!0);let a=(g=(p=(c=this._config)==null?void 0:c.render)==null?void 0:p.asset)==null?void 0:g.type,s=(f=(m=e==null?void 0:e.render)==null?void 0:m.asset)==null?void 0:f.type,r=(b=(C=this._config)==null?void 0:C.ui)==null?void 0:b.renderMode,o=(h=e==null?void 0:e.ui)==null?void 0:h.renderMode;if((a!==s||r!==o)&&(console.log(`[GameObject] Rebuild required for ${this.instanceId}: type changed from ${a}/${r} to ${s}/${o}`),this.onRebuildRequired)){this.onRebuildRequired(this,e);return}this._config=e,e.transform&&this.transform.update(e.transform),e.render&&this.renderer.update(e.render),this.sync()}applyAnchor(){var a,s,r,o;if(!this.pixiObject||!("anchor"in this.pixiObject)||!this.pixiObject.anchor)return;let e=(s=(a=this._config)==null?void 0:a.render)==null?void 0:s.anchor,t=(o=(r=this._config)==null?void 0:r.transform)==null?void 0:o.anchor,i=e&&typeof e=="object"?e:t&&typeof t=="object"?t:null;i&&typeof i.x=="number"&&typeof i.y=="number"&&this.pixiObject.anchor.set(i.x,i.y)}applyEffectsScale(){var s,r,o;if(!((s=this.pixiObject)!=null&&s.scale))return;let e=(r=this._config)==null?void 0:r.effects,t=typeof(e==null?void 0:e.scale_x)=="number"?e.scale_x:1,i=typeof(e==null?void 0:e.scale_y)=="number"?e.scale_y:1;if(t===1&&i===1)return;let a=(o=this.transform.scale)!=null?o:1;typeof this.pixiObject.scale.set=="function"?this.pixiObject.scale.set(a*t,a*i):(this.pixiObject.scale.x=a*t,this.pixiObject.scale.y=a*i)}applyEffects(){var i,a,s,r,o,l,d,u,c;if(!this.pixiObject)return;let e=(i=this._config)==null?void 0:i.effects;if(!e||e.enabled===!1){this.pixiObject.filters=null;return}let t=[];if((a=e.blur)!=null&&a.enabled){let p=new W.BlurFilter;p.blur=(s=e.blur.strength)!=null?s:4,t.push(p)}if((r=e.shadow)!=null&&r.enabled){let p=e.shadow,g=new W.BlurFilter;g.blur=(o=p.blur)!=null?o:4,g.blendMode="multiply",t.push(g),(p.offsetX!==0||p.offsetY!==0)&&console.warn("[Effects] Drop shadow offset requires pixi-filters. Install: npm install pixi-filters")}if((l=e.glow)!=null&&l.enabled){let p=e.glow,g=new W.BlurFilter;if(g.blur=(d=p.blur)!=null?d:8,t.push(g),p.color){let m=new W.ColorMatrixFilter,f=typeof p.color=="string"?parseInt(p.color.replace("#",""),16):p.color;m.tint(f),t.push(m)}}(u=e.stroke)!=null&&u.enabled&&console.warn("[Effects] Stroke/outline effect requires pixi-filters. Install: npm install pixi-filters"),(c=e.distortion)!=null&&c.enabled&&console.warn("[Effects] Distortion effect requires pixi-filters or a displacement map. Install: npm install pixi-filters"),this.pixiObject.filters=t.length>0?t:null}applyIntro(){var u,c,p,g,m,f,C;let e=(u=this._config)==null?void 0:u.motion;if(!e||!((c=e.intro)!=null&&c.enabled)||!this.pixiObject)return;let t=e.intro,i=(t.duration||0)/1e3,a=(t.delay||0)/1e3,s=this.transform.position.y,r=this.transform.scale*(((g=(p=this._config)==null?void 0:p.effects)==null?void 0:g.scale_x)||1),o=this.transform.scale*(((f=(m=this._config)==null?void 0:m.effects)==null?void 0:f.scale_y)||1);if(this.pixiObject.alpha=(C=t.startAlpha)!=null?C:0,t.startScale!==void 0&&this.pixiObject.scale.set(r*t.startScale,o*t.startScale),t.startYOffset!==void 0&&(this.pixiObject.y=s+(t.startYOffset||0)),this._introTicker&&W.Ticker.shared.remove(this._introTicker),i<=0&&a<=0){this.pixiObject.alpha=this.renderer.alpha,this.pixiObject.y=this.transform.position.y,this.pixiObject.scale.set(r,o);return}let l=0,d=b=>{var R,H,z,T,E,S;if(l+=b.deltaTime/60,l<a)return;let h=i>0?Math.min(1,(l-a)/i):1,v=1-Math.pow(1-h,3),w=this.renderer.alpha,y=this.transform.scale*(((H=(R=this._config)==null?void 0:R.effects)==null?void 0:H.scale_x)||1),I=this.transform.scale*(((T=(z=this._config)==null?void 0:z.effects)==null?void 0:T.scale_y)||1),M=this.transform.position.y,B=this.transform.position.x;if(this.pixiObject.alpha=((E=t.startAlpha)!=null?E:0)+(w-((S=t.startAlpha)!=null?S:0))*v,t.startScale!==void 0){let A=t.startScale+(1-t.startScale)*v;this.pixiObject.scale.set(y*A,I*A)}t.startYOffset!==void 0&&(this.pixiObject.y=M+t.startYOffset+(M-(M+t.startYOffset))*v),h>=1&&(W.Ticker.shared.remove(d),this._introTicker=null,this.pixiObject.alpha=w,this.pixiObject.x=B,this.pixiObject.y=M,this.pixiObject.scale.set(y,I))};this._introTicker=d,W.Ticker.shared.add(d)}applyMotion(){var c,p,g,m,f,C;let e=(c=this._config)==null?void 0:c.motion,t=e&&e.enabled!==!1,i=JSON.stringify(e);if(this._lastMotionStr===i&&this._tickerCleanup)return;if(this._lastMotionStr=i,!t){this._tickerCleanup&&(this._tickerCleanup(),this._tickerCleanup=null);return}if(this._tickerCleanup&&this._tickerCleanup(),!(((p=e.pulse)==null?void 0:p.enabled)||((g=e.swing)==null?void 0:g.enabled)||((m=e.continuousMove)==null?void 0:m.enabled)||((f=e.continuousRotate)==null?void 0:f.enabled)||((C=e.orbit)==null?void 0:C.enabled)))return;let s=0,r=0,o=0,l=0,d=1/60,u=b=>{var z,T,E,S,A,L,G,ne,me,be,ye,ve,we,xe,q,Ie,nt,it,at,st,rt,ot,lt,ct,dt,pt;let h=((z=b.deltaTime)!=null?z:1)*d;s+=b.deltaTime*.05;let v=this.transform.scale,w=v*(((E=(T=this._config)==null?void 0:T.effects)==null?void 0:E.scale_x)||1),y=v*(((A=(S=this._config)==null?void 0:S.effects)==null?void 0:A.scale_y)||1),I=this.transform.position.x,M=this.transform.position.y,B=this.transform.rotation,R=0,H=0;if((L=e.swing)!=null&&L.enabled){let N=(G=e.swing.amplitude)!=null?G:10,K=(ne=e.swing.speed)!=null?ne:1,U=Math.sin(s*K)*N;e.swing.axis==="vertical"?H+=U:e.swing.axis==="both"?(R+=U,H+=U):R+=U}if((me=e.continuousMove)!=null&&me.enabled){let N=(be=e.continuousMove.axis)!=null?be:"x",K=Math.max(0,(ye=e.continuousMove.speed)!=null?ye:50),U=Math.sign((ve=e.continuousMove.direction)!=null?ve:1)||1,X=Math.max(0,(we=e.continuousMove.lifetime)!=null?we:0);r+=h;let De=X>0?Math.min(r,X):r,je=K*U*De;(N==="x"||N==="both")&&(R+=je),(N==="y"||N==="both")&&(H+=je)}if((xe=e.orbit)!=null&&xe.enabled){let N=Math.max(0,(q=e.orbit.radius)!=null?q:50),K=Math.max(0,(Ie=e.orbit.speed)!=null?Ie:45),U=Math.sign((nt=e.orbit.direction)!=null?nt:1)||1,X=K*Math.PI/180;l+=X*U*h;let De=(it=e.orbit.pivotOffsetX)!=null?it:0,je=(at=e.orbit.pivotOffsetY)!=null?at:0;R+=De+N*Math.cos(l),H+=je+N*Math.sin(l)}if(this.pixiObject.x=I+R,this.pixiObject.y=M+H,(st=e.pulse)!=null&&st.enabled){let N=(rt=e.pulse.intensity)!=null?rt:.1,K=(ot=e.pulse.speed)!=null?ot:1,X=1+Math.sin(s*K)*N;(lt=this.pixiObject.scale)!=null&<.set?this.pixiObject.scale.set(w*X,y*X):this.pixiObject.scale&&(this.pixiObject.scale.x=w*X,this.pixiObject.scale.y=y*X)}if((ct=e.continuousRotate)!=null&&ct.enabled){let N=Math.max(0,(dt=e.continuousRotate.speed)!=null?dt:90),K=Math.sign((pt=e.continuousRotate.direction)!=null?pt:1)||1,U=N*Math.PI/180;o+=U*K*h,this.pixiObject.rotation=B+o}};W.Ticker.shared.add(u),this._tickerCleanup=()=>{var b,h,v,w,y;if(W.Ticker.shared.remove(u),this.pixiObject){let I=this.transform.scale*(((h=(b=this._config)==null?void 0:b.effects)==null?void 0:h.scale_x)||1),M=this.transform.scale*(((w=(v=this._config)==null?void 0:v.effects)==null?void 0:w.scale_y)||1);this.pixiObject.x=this.transform.position.x,this.pixiObject.y=this.transform.position.y,this.pixiObject.rotation=this.transform.rotation,(y=this.pixiObject.scale)!=null&&y.set?this.pixiObject.scale.set(I,M):this.pixiObject.scale&&(this.pixiObject.scale.x=I,this.pixiObject.scale.y=M)}}}getComponent(e){return this._config[e]}getPosition(){return{...this.transform.position}}setPosition(e,t){this.transform.position={x:e,y:t},this.transform.syncToPixi(this.pixiObject)}getAlpha(){return this.renderer.alpha}setAlpha(e){this.renderer.alpha=e,this.renderer.syncToPixi(this.pixiObject)}getVisible(){return this.renderer.visible}setVisible(e){this.renderer.visible=e,this.renderer.syncToPixi(this.pixiObject)}},Xe=class{constructor(e){this.objects=new Map;this.onObjectRebuildRequired=null;this.config=e}create(e,t){let i=this.config.objects.get(e);if(!i)throw new Error(`Object config not found: ${e}`);let a=new Ct(e,i.object_config||e,t,i);return this.objects.set(e,a),a.onRebuildRequired=async(s,r)=>{if(this.onObjectRebuildRequired){console.log(`[GameObjectManager] Triggering rebuild for ${e}`);let o=await this.onObjectRebuildRequired(e,r);o&&this.objects.get(e)===o&&console.log(`[GameObjectManager] \u2705 Rebuilt ${e} successfully`)}else console.warn(`[GameObjectManager] Rebuild required for ${e} but no factory provided`),s.updateConfig(r)},a}get(e){return this.objects.get(e)}updateConfig(e){this.config=e;for(let[t,i]of this.objects.entries()){let a=e.objects.get(t);a&&i.updateConfig(a)}}getAll(){return Array.from(this.objects.values())}remove(e){let t=this.objects.get(e);t&&t.destroy(),this.objects.delete(e)}clear(){for(let e of this.objects.values())e.destroy();this.objects.clear()}};var Wt={"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 ta(n){let e=Wt[n];return e?e.family:(console.warn(`Font ID "${n}" not found in registry, using fallback`),"Arial, sans-serif")}function na(n){var t;let e=Wt[n];return e&&(t=e.weight)!=null?t:"400"}function ia(n,e){Wt[n]=e}function aa(){return Object.keys(Wt)}var Je=null;function vs(){return console.log("[LottieOverlay] getLottie called, lottieLib cached?",!!Je),console.log("[LottieOverlay] window.lottie exists?",typeof window!="undefined"&&!!window.lottie),Je||(typeof window!="undefined"&&window.lottie?(Je=window.lottie,console.log("[LottieOverlay] \u2705 Found window.lottie, cached it")):(console.warn("[LottieOverlay] \u274C lottie-web is not available globally. Make sure it is loaded before using Lottie animations."),console.log("[LottieOverlay] window keys:",typeof window!="undefined"?Object.keys(window).filter(n=>n.toLowerCase().includes("lottie")):"no window"),Je=null)),Je}function ws(n){return!n||n.startsWith("http://")||n.startsWith("https://")||n.startsWith("/")?n:`/${n.replace(/^\.\//,"")}`}function xs(n){try{let e=new XMLHttpRequest;return e.open("GET",ws(n),!1),e.send(null),e.status<200||e.status>=300||!e.responseText?null:JSON.parse(e.responseText)}catch{return null}}function sa(n){return!n||typeof n!="object"||!Array.isArray(n.layers)?null:(Array.isArray(n.assets)||(n.assets=[]),Array.isArray(n.chars)||(n.chars=[]),n)}function Nt(n){Je=n}function ra(n,e,t,i){var I,M,B,R,H,z,T,E,S,A,L,G,ne,me,be,ye,ve,we,xe;let a=t.objects.get(n);if(!a)return console.warn(`[LottieOverlay] Object config not found: ${n}`),null;let s=((I=a.effects)==null?void 0:I.lottie)||{},r=a.transform||{},o=a.render||{};if(s.enabled===!1||o.visible===!1)return null;let l=i==null?void 0:i[n],d=sa(l);if(!d){let q=(B=(M=a.render)==null?void 0:M.asset)==null?void 0:B.path;if(typeof q=="string"&&q.toLowerCase().endsWith(".json")){let Ie=xs(q);if(d=sa(Ie),d)try{i[n]=d}catch{}}}if(!d){let q=l&&typeof l=="object"?Object.prototype.toString.call(l):typeof l;return console.warn(`[LottieOverlay] Lottie JSON invalid for: ${n}`,{kind:q}),null}let u=vs();if(!u)return console.warn(`[LottieOverlay] lottie-web is not available. Cannot play animation: ${n}`),null;let c=(R=s.width)!=null?R:300,p=(H=s.height)!=null?H:300,g=(z=r.scale)!=null?z:1,m=((E=(T=r.position)==null?void 0:T.x)!=null?E:0)+((A=(S=r.offset)==null?void 0:S.x)!=null?A:0),f=((G=(L=r.position)==null?void 0:L.y)!=null?G:0)+((me=(ne=r.offset)==null?void 0:ne.y)!=null?me:0),C=(be=r.rotation)!=null?be:0,b=(ye=o.z_index)!=null?ye:100,h=(ve=o.alpha)!=null?ve:1,v=document.createElement("div");v.style.cssText=`
|
|
245
|
+
`,i.appendChild(e)}async function ii(i,e={}){let t=new sa.Application;await t.init({resizeTo:i,autoDensity:!0,resolution:window.devicePixelRatio||1,antialias:!0,backgroundAlpha:0});let n=r=>{var c,p,g,m;if(!t.renderer)return;let o=(c=r==null?void 0:r.width)!=null?c:i.clientWidth,l=(p=r==null?void 0:r.height)!=null?p:i.clientHeight,d=o&&o>0?o:(g=window.innerWidth)!=null?g:320,u=l&&l>0?l:(m=window.innerHeight)!=null?m:480;t.renderer.resize(d,u)};i.appendChild(t.canvas),i.style.position="relative",i.style.display="flex",i.style.flexDirection="column",i.style.alignItems="stretch",i.style.width="100%",i.style.height="100dvh",i.style.minHeight="100vh",i.style.maxWidth="100%",i.style.maxHeight="100%",i.style.boxSizing="border-box",i.style.overflow="hidden",e.background&&(i.style.background=e.background),n();let a=document.createElement("div");return a.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(";")),i.appendChild(a),yt.on("pause",()=>{t.ticker.stop(),document.querySelectorAll("audio").forEach(o=>o.pause())}),yt.on("resume",()=>{t.ticker.start(),document.querySelectorAll("audio").forEach(o=>{o.currentTime>0&&!o.ended&&o.play().catch(()=>{})})}),yt.on("resize",({payload:r})=>{n({width:r==null?void 0:r.width,height:r==null?void 0:r.height})}),window.addEventListener("resize",()=>n()),requestAnimationFrame(()=>n()),new ResizeObserver(r=>{let o=r[0];if(o&&o.contentRect.width>0&&o.contentRect.height>0){let l=Math.round(o.contentRect.width),d=Math.round(o.contentRect.height);if(n({width:l,height:d}),typeof window!="undefined"&&window.gameApp&&window.gameObjectManager){let u={width:l,height:d,dpr:Math.max(1,Math.floor(window.devicePixelRatio||1)),presetId:"auto-resize",isLandscape:l>d};window.dispatchEvent(new CustomEvent("handler-preview:screen",{detail:u}))}}}).observe(i),{app:t,stage:t.stage,overlay:a,applySize:n}}var Y=require("pixi.js"),At=class{constructor(e){var a,s;let t=e==null?void 0:e.position,n=e==null?void 0:e.offset;this._basePosition={x:typeof(t==null?void 0:t.x)=="number"?t.x:0,y:typeof(t==null?void 0:t.y)=="number"?t.y:0},this._offset={x:typeof(n==null?void 0:n.x)=="number"?n.x:0,y:typeof(n==null?void 0:n.y)=="number"?n.y:0},this.position={x:this._basePosition.x+this._offset.x,y:this._basePosition.y+this._offset.y},this.scale=(a=e==null?void 0:e.scale)!=null?a:1,this.rotation=(s=e==null?void 0:e.rotation)!=null?s:0}update(e){let t=e.position,n=e.offset;t!==void 0&&(this._basePosition={x:typeof(t==null?void 0:t.x)=="number"?t.x:0,y:typeof(t==null?void 0:t.y)=="number"?t.y:0}),n!==void 0&&(this._offset={x:typeof(n==null?void 0:n.x)=="number"?n.x:0,y:typeof(n==null?void 0:n.y)=="number"?n.y:0}),(t!==void 0||n!==void 0)&&(this.position={x:this._basePosition.x+this._offset.x,y:this._basePosition.y+this._offset.y}),e.scale!==void 0&&(this.scale=e.scale),e.rotation!==void 0&&(this.rotation=e.rotation)}syncToPixi(e){e&&(e.position.set(this.position.x,this.position.y),e.scale.set(this.scale),e.rotation=this.rotation)}},Tt=class{constructor(e){var t,n,a,s;this.z_index=(t=e==null?void 0:e.z_index)!=null?t:0,this.alpha=(n=e==null?void 0:e.alpha)!=null?n:1,this.visible=(a=e==null?void 0:e.visible)!=null?a:!0,this.tint=(s=e==null?void 0:e.tint)!=null?s:null}update(e){e.z_index!==void 0&&(this.z_index=e.z_index),e.alpha!==void 0&&(this.alpha=e.alpha),e.visible!==void 0&&(this.visible=e.visible),e.tint!==void 0&&(this.tint=e.tint)}syncToPixi(e,t){if(!e)return;if(e.zIndex=this.z_index,t!=null&&t.startsWith("ui_endgame_")||(e.alpha=this.alpha),e.visible=this.visible,this.tint!==null&&"tint"in e&&(e.tint=this.tint),t&&"texture"in e)try{let{AssetTextures:a}=require("handler-playable-sdk/pixi");if(a&&a[t]){let s=a[t];s&&(e.texture=s)}}catch{}}},Lt=class{constructor(e,t,n,a){this._tickerCleanup=null;this.onRebuildRequired=null;this.instanceId=e,this.objectConfig=t,this.pixiObject=n,this._config=a,this.transform=new At(a.transform),this.renderer=new Tt(a.render),this.sync()}sync(){this.transform.syncToPixi(this.pixiObject),this.renderer.syncToPixi(this.pixiObject,this.instanceId),this.applyAnchor(),this.applyEffectsScale(),this.applyEffects(),this.syncTextProperties(),(!this._initialized||this._shouldReplayIntro)&&(this.applyIntro(),this._initialized=!0,this._shouldReplayIntro=!1),this.applyMotion()}syncTextProperties(){var t;if(!this.pixiObject||!("text"in this.pixiObject))return;let e=(t=this._config)==null?void 0:t.ui;e&&(e.text!==void 0&&this.pixiObject.text!==e.text&&(this.pixiObject.text=e.text),this.pixiObject.style&&(e.fontSize!==void 0&&(this.pixiObject.style.fontSize=e.fontSize),e.color!==void 0&&(this.pixiObject.style.fill=e.color),e.align!==void 0&&(this.pixiObject.style.align=e.align)))}destroy(){this._tickerCleanup&&(this._tickerCleanup(),this._tickerCleanup=null),this._introTicker&&(Y.Ticker.shared.remove(this._introTicker),this._introTicker=null),this.pixiObject&&this.pixiObject.parent&&this.pixiObject.parent.removeChild(this.pixiObject)}updateConfig(e){var l,d,u,c,p,g,m,f,C,b,h;let t=(d=(l=this._config)==null?void 0:l.motion)==null?void 0:d.intro,n=(u=e==null?void 0:e.motion)==null?void 0:u.intro;n!=null&&n.enabled&&JSON.stringify(t)!==JSON.stringify(n)&&(this._shouldReplayIntro=!0);let a=(g=(p=(c=this._config)==null?void 0:c.render)==null?void 0:p.asset)==null?void 0:g.type,s=(f=(m=e==null?void 0:e.render)==null?void 0:m.asset)==null?void 0:f.type,r=(b=(C=this._config)==null?void 0:C.ui)==null?void 0:b.renderMode,o=(h=e==null?void 0:e.ui)==null?void 0:h.renderMode;if((a!==s||r!==o)&&(console.log(`[GameObject] Rebuild required for ${this.instanceId}: type changed from ${a}/${r} to ${s}/${o}`),this.onRebuildRequired)){this.onRebuildRequired(this,e);return}this._config=e,e.transform&&this.transform.update(e.transform),e.render&&this.renderer.update(e.render),this.sync()}applyAnchor(){var a,s,r,o;if(!this.pixiObject||!("anchor"in this.pixiObject)||!this.pixiObject.anchor)return;let e=(s=(a=this._config)==null?void 0:a.render)==null?void 0:s.anchor,t=(o=(r=this._config)==null?void 0:r.transform)==null?void 0:o.anchor,n=e&&typeof e=="object"?e:t&&typeof t=="object"?t:null;n&&typeof n.x=="number"&&typeof n.y=="number"&&this.pixiObject.anchor.set(n.x,n.y)}applyEffectsScale(){var s,r,o;if(!((s=this.pixiObject)!=null&&s.scale))return;let e=(r=this._config)==null?void 0:r.effects,t=typeof(e==null?void 0:e.scale_x)=="number"?e.scale_x:1,n=typeof(e==null?void 0:e.scale_y)=="number"?e.scale_y:1;if(t===1&&n===1)return;let a=(o=this.transform.scale)!=null?o:1;typeof this.pixiObject.scale.set=="function"?this.pixiObject.scale.set(a*t,a*n):(this.pixiObject.scale.x=a*t,this.pixiObject.scale.y=a*n)}applyEffects(){var n,a,s,r,o,l,d,u,c;if(!this.pixiObject)return;let e=(n=this._config)==null?void 0:n.effects;if(!e||e.enabled===!1){this.pixiObject.filters=null;return}let t=[];if((a=e.blur)!=null&&a.enabled){let p=new Y.BlurFilter;p.blur=(s=e.blur.strength)!=null?s:4,t.push(p)}if((r=e.shadow)!=null&&r.enabled){let p=e.shadow,g=new Y.BlurFilter;g.blur=(o=p.blur)!=null?o:4,g.blendMode="multiply",t.push(g),(p.offsetX!==0||p.offsetY!==0)&&console.warn("[Effects] Drop shadow offset requires pixi-filters. Install: npm install pixi-filters")}if((l=e.glow)!=null&&l.enabled){let p=e.glow,g=new Y.BlurFilter;if(g.blur=(d=p.blur)!=null?d:8,t.push(g),p.color){let m=new Y.ColorMatrixFilter,f=typeof p.color=="string"?parseInt(p.color.replace("#",""),16):p.color;m.tint(f),t.push(m)}}(u=e.stroke)!=null&&u.enabled&&console.warn("[Effects] Stroke/outline effect requires pixi-filters. Install: npm install pixi-filters"),(c=e.distortion)!=null&&c.enabled&&console.warn("[Effects] Distortion effect requires pixi-filters or a displacement map. Install: npm install pixi-filters"),this.pixiObject.filters=t.length>0?t:null}applyIntro(){var u,c,p,g,m,f,C;let e=(u=this._config)==null?void 0:u.motion;if(!e||!((c=e.intro)!=null&&c.enabled)||!this.pixiObject)return;let t=e.intro,n=(t.duration||0)/1e3,a=(t.delay||0)/1e3,s=this.transform.position.y,r=this.transform.scale*(((g=(p=this._config)==null?void 0:p.effects)==null?void 0:g.scale_x)||1),o=this.transform.scale*(((f=(m=this._config)==null?void 0:m.effects)==null?void 0:f.scale_y)||1);if(this.pixiObject.alpha=(C=t.startAlpha)!=null?C:0,t.startScale!==void 0&&this.pixiObject.scale.set(r*t.startScale,o*t.startScale),t.startYOffset!==void 0&&(this.pixiObject.y=s+(t.startYOffset||0)),this._introTicker&&Y.Ticker.shared.remove(this._introTicker),n<=0&&a<=0){this.pixiObject.alpha=this.renderer.alpha,this.pixiObject.y=this.transform.position.y,this.pixiObject.scale.set(r,o);return}let l=0,d=b=>{var R,H,z,T,S,E;if(l+=b.deltaTime/60,l<a)return;let h=n>0?Math.min(1,(l-a)/n):1,v=1-Math.pow(1-h,3),w=this.renderer.alpha,y=this.transform.scale*(((H=(R=this._config)==null?void 0:R.effects)==null?void 0:H.scale_x)||1),I=this.transform.scale*(((T=(z=this._config)==null?void 0:z.effects)==null?void 0:T.scale_y)||1),j=this.transform.position.y,B=this.transform.position.x;if(this.pixiObject.alpha=((S=t.startAlpha)!=null?S:0)+(w-((E=t.startAlpha)!=null?E:0))*v,t.startScale!==void 0){let A=t.startScale+(1-t.startScale)*v;this.pixiObject.scale.set(y*A,I*A)}t.startYOffset!==void 0&&(this.pixiObject.y=j+t.startYOffset+(j-(j+t.startYOffset))*v),h>=1&&(Y.Ticker.shared.remove(d),this._introTicker=null,this.pixiObject.alpha=w,this.pixiObject.x=B,this.pixiObject.y=j,this.pixiObject.scale.set(y,I))};this._introTicker=d,Y.Ticker.shared.add(d)}applyMotion(){var c,p,g,m,f,C;let e=(c=this._config)==null?void 0:c.motion,t=e&&e.enabled!==!1,n=JSON.stringify(e);if(this._lastMotionStr===n&&this._tickerCleanup)return;if(this._lastMotionStr=n,!t){this._tickerCleanup&&(this._tickerCleanup(),this._tickerCleanup=null);return}if(this._tickerCleanup&&this._tickerCleanup(),!(((p=e.pulse)==null?void 0:p.enabled)||((g=e.swing)==null?void 0:g.enabled)||((m=e.continuousMove)==null?void 0:m.enabled)||((f=e.continuousRotate)==null?void 0:f.enabled)||((C=e.orbit)==null?void 0:C.enabled)))return;let s=0,r=0,o=0,l=0,d=1/60,u=b=>{var z,T,S,E,A,L,G,ie,be,ye,ve,we,xe,Se,q,Pe,nt,at,st,rt,ot,lt,ct,dt,pt,ut;let h=((z=b.deltaTime)!=null?z:1)*d;s+=b.deltaTime*.05;let v=this.transform.scale,w=v*(((S=(T=this._config)==null?void 0:T.effects)==null?void 0:S.scale_x)||1),y=v*(((A=(E=this._config)==null?void 0:E.effects)==null?void 0:A.scale_y)||1),I=this.transform.position.x,j=this.transform.position.y,B=this.transform.rotation,R=0,H=0;if((L=e.swing)!=null&&L.enabled){let N=(G=e.swing.amplitude)!=null?G:10,K=(ie=e.swing.speed)!=null?ie:1,U=Math.sin(s*K)*N;e.swing.axis==="vertical"?H+=U:e.swing.axis==="both"?(R+=U,H+=U):R+=U}if((be=e.continuousMove)!=null&&be.enabled){let N=(ye=e.continuousMove.axis)!=null?ye:"x",K=Math.max(0,(ve=e.continuousMove.speed)!=null?ve:50),U=Math.sign((we=e.continuousMove.direction)!=null?we:1)||1,X=Math.max(0,(xe=e.continuousMove.lifetime)!=null?xe:0);r+=h;let Fe=X>0?Math.min(r,X):r,Me=K*U*Fe;(N==="x"||N==="both")&&(R+=Me),(N==="y"||N==="both")&&(H+=Me)}if((Se=e.orbit)!=null&&Se.enabled){let N=Math.max(0,(q=e.orbit.radius)!=null?q:50),K=Math.max(0,(Pe=e.orbit.speed)!=null?Pe:45),U=Math.sign((nt=e.orbit.direction)!=null?nt:1)||1,X=K*Math.PI/180;l+=X*U*h;let Fe=(at=e.orbit.pivotOffsetX)!=null?at:0,Me=(st=e.orbit.pivotOffsetY)!=null?st:0;R+=Fe+N*Math.cos(l),H+=Me+N*Math.sin(l)}if(this.pixiObject.x=I+R,this.pixiObject.y=j+H,(rt=e.pulse)!=null&&rt.enabled){let N=(ot=e.pulse.intensity)!=null?ot:.1,K=(lt=e.pulse.speed)!=null?lt:1,X=1+Math.sin(s*K)*N;(ct=this.pixiObject.scale)!=null&&ct.set?this.pixiObject.scale.set(w*X,y*X):this.pixiObject.scale&&(this.pixiObject.scale.x=w*X,this.pixiObject.scale.y=y*X)}if((dt=e.continuousRotate)!=null&&dt.enabled){let N=Math.max(0,(pt=e.continuousRotate.speed)!=null?pt:90),K=Math.sign((ut=e.continuousRotate.direction)!=null?ut:1)||1,U=N*Math.PI/180;o+=U*K*h,this.pixiObject.rotation=B+o}};Y.Ticker.shared.add(u),this._tickerCleanup=()=>{var b,h,v,w,y;if(Y.Ticker.shared.remove(u),this.pixiObject){let I=this.transform.scale*(((h=(b=this._config)==null?void 0:b.effects)==null?void 0:h.scale_x)||1),j=this.transform.scale*(((w=(v=this._config)==null?void 0:v.effects)==null?void 0:w.scale_y)||1);this.pixiObject.x=this.transform.position.x,this.pixiObject.y=this.transform.position.y,this.pixiObject.rotation=this.transform.rotation,(y=this.pixiObject.scale)!=null&&y.set?this.pixiObject.scale.set(I,j):this.pixiObject.scale&&(this.pixiObject.scale.x=I,this.pixiObject.scale.y=j)}}}getComponent(e){return this._config[e]}getPosition(){return{...this.transform.position}}setPosition(e,t){this.transform.position={x:e,y:t},this.transform.syncToPixi(this.pixiObject)}getAlpha(){return this.renderer.alpha}setAlpha(e){this.renderer.alpha=e,this.renderer.syncToPixi(this.pixiObject)}getVisible(){return this.renderer.visible}setVisible(e){this.renderer.visible=e,this.renderer.syncToPixi(this.pixiObject)}},Qe=class{constructor(e){this.objects=new Map;this.onObjectRebuildRequired=null;this.config=e}create(e,t){let n=this.config.objects.get(e);if(!n)throw new Error(`Object config not found: ${e}`);let a=new Lt(e,n.object_config||e,t,n);return this.objects.set(e,a),a.onRebuildRequired=async(s,r)=>{if(this.onObjectRebuildRequired){console.log(`[GameObjectManager] Triggering rebuild for ${e}`);let o=await this.onObjectRebuildRequired(e,r);o&&this.objects.get(e)===o&&console.log(`[GameObjectManager] \u2705 Rebuilt ${e} successfully`)}else console.warn(`[GameObjectManager] Rebuild required for ${e} but no factory provided`),s.updateConfig(r)},a}get(e){return this.objects.get(e)}updateConfig(e){this.config=e;for(let[t,n]of this.objects.entries()){let a=e.objects.get(t);a&&n.updateConfig(a)}}getAll(){return Array.from(this.objects.values())}remove(e){let t=this.objects.get(e);t&&t.destroy(),this.objects.delete(e)}clear(){for(let e of this.objects.values())e.destroy();this.objects.clear()}};var ni={"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 ra(i){let e=ni[i];return e?e.family:(console.warn(`Font ID "${i}" not found in registry, using fallback`),"Arial, sans-serif")}function oa(i){var t;let e=ni[i];return e&&(t=e.weight)!=null?t:"400"}function la(i,e){ni[i]=e}function ca(){return Object.keys(ni)}var et=null;function Ns(){return console.log("[LottieOverlay] getLottie called, lottieLib cached?",!!et),console.log("[LottieOverlay] window.lottie exists?",typeof window!="undefined"&&!!window.lottie),et||(typeof window!="undefined"&&window.lottie?(et=window.lottie,console.log("[LottieOverlay] \u2705 Found window.lottie, cached it")):(console.warn("[LottieOverlay] \u274C lottie-web is not available globally. Make sure it is loaded before using Lottie animations."),console.log("[LottieOverlay] window keys:",typeof window!="undefined"?Object.keys(window).filter(i=>i.toLowerCase().includes("lottie")):"no window"),et=null)),et}function Fs(i){return!i||i.startsWith("http://")||i.startsWith("https://")||i.startsWith("/")?i:`/${i.replace(/^\.\//,"")}`}function Bs(i){try{let e=new XMLHttpRequest;return e.open("GET",Fs(i),!1),e.send(null),e.status<200||e.status>=300||!e.responseText?null:JSON.parse(e.responseText)}catch{return null}}function da(i){return!i||typeof i!="object"||!Array.isArray(i.layers)?null:(Array.isArray(i.assets)||(i.assets=[]),Array.isArray(i.chars)||(i.chars=[]),i)}function Xt(i){et=i}function pa(i,e,t,n){var I,j,B,R,H,z,T,S,E,A,L,G,ie,be,ye,ve,we,xe,Se;let a=t.objects.get(i);if(!a)return console.warn(`[LottieOverlay] Object config not found: ${i}`),null;let s=((I=a.effects)==null?void 0:I.lottie)||{},r=a.transform||{},o=a.render||{};if(s.enabled===!1||o.visible===!1)return null;let l=n==null?void 0:n[i],d=da(l);if(!d){let q=(B=(j=a.render)==null?void 0:j.asset)==null?void 0:B.path;if(typeof q=="string"&&q.toLowerCase().endsWith(".json")){let Pe=Bs(q);if(d=da(Pe),d)try{n[i]=d}catch{}}}if(!d){let q=l&&typeof l=="object"?Object.prototype.toString.call(l):typeof l;return console.warn(`[LottieOverlay] Lottie JSON invalid for: ${i}`,{kind:q}),null}let u=Ns();if(!u)return console.warn(`[LottieOverlay] lottie-web is not available. Cannot play animation: ${i}`),null;let c=(R=s.width)!=null?R:300,p=(H=s.height)!=null?H:300,g=(z=r.scale)!=null?z:1,m=((S=(T=r.position)==null?void 0:T.x)!=null?S:0)+((A=(E=r.offset)==null?void 0:E.x)!=null?A:0),f=((G=(L=r.position)==null?void 0:L.y)!=null?G:0)+((be=(ie=r.offset)==null?void 0:ie.y)!=null?be:0),C=(ye=r.rotation)!=null?ye:0,b=(ve=o.z_index)!=null?ve:100,h=(we=o.alpha)!=null?we:1,v=document.createElement("div");v.style.cssText=`
|
|
246
246
|
position: absolute;
|
|
247
247
|
top: calc(50% + ${f}px);
|
|
248
248
|
left: calc(50% + ${m}px);
|
|
@@ -252,4 +252,4 @@ Style guidelines: ${i.summary}`;this.promptInput.value=a,this.currentPrompt=a}}c
|
|
|
252
252
|
pointer-events: none;
|
|
253
253
|
z-index: ${b};
|
|
254
254
|
opacity: ${h};
|
|
255
|
-
`,e.appendChild(v);let w;try{w=u.loadAnimation({container:v,renderer:s.renderer||"svg",loop:(we=s.loop)!=null?we:!1,autoplay:(xe=s.autoplay)!=null?xe:!0,animationData:d})}catch(q){return v.parentNode&&v.parentNode.removeChild(v),console.warn(`[LottieOverlay] Failed to start animation: ${n}`,q),null}s.speed!==void 0&&w.setSpeed(s.speed);let y=()=>{w.destroy(),v.parentNode&&v.parentNode.removeChild(v)};return s.loop||w.addEventListener("complete",y),{animation:w,cleanup:y}}Dt();mn();var Yt=class{constructor(e,t,i){this.systems=[];this.totalTime=0;this.context=null;this.root=e,this.config=t,this.destinationUrl=i}async createApp(e){if(this.context)return{app:this.app,gameObjectManager:this.gameObjectManager};let{app:t,stage:i}=await Vt(this.root,{background:e.background_color,text:e.text_color,primary:e.cta_background,cta_text:e.cta_text});this.app=t,this.stage=i,this.gameObjectManager=new Xe(this.config),this.stage.eventMode="passive",this.stage.interactive=!1,this.stage.interactiveChildren=!0,this.stage.sortableChildren=!0,this.context={app:this.app,stage:this.stage,config:this.config,gameObjectManager:this.gameObjectManager,destinationUrl:this.destinationUrl,root:this.root,engine:this};for(let a of this.systems)a.setContext(this.context);return{app:this.app,gameObjectManager:this.gameObjectManager}}async initSystems(){if(!this.context)throw new Error("[GameEngine] createApp() must be called before initSystems()");for(let e of this.systems)e.init&&await e.init()}async init(e){return await this.createApp(e),await this.initSystems(),{app:this.app,gameObjectManager:this.gameObjectManager}}registerSystems(e){this.systems.push(...e)}async start(){for(let e of this.systems)e.onStart&&await e.onStart();this.app.ticker.add(this.update.bind(this)),window.addEventListener("handler-preview:screen",e=>{let{width:t,height:i}=e.detail;this.resize(t,i)})}update(e){let t=e.deltaTime/60;this.totalTime+=t;for(let i of this.systems)i.update&&i.update(t,this.totalTime)}resize(e,t){for(let i of this.systems)i.onResize&&i.onResize(e,t)}updateConfig(e){this.config=e;for(let t of this.systems)t.context.config=e,t.onConfigUpdate&&t.onConfigUpdate(e)}destroy(){for(let e of this.systems)e.onDestroy&&e.onDestroy();this.app.ticker.remove(this.update.bind(this)),this.app.destroy(!0,{children:!0,texture:!1})}getApp(){return this.app}getGameObjectManager(){return this.gameObjectManager}getTotalTime(){return this.totalTime}getSystem(e){let t=this.systems.find(i=>i instanceof e);if(!t)throw new Error(`System ${e.name} not found!`);return t}};var Ze=class{setContext(e){this.context=e}};var Qe=class{constructor(){this.config=null}init(e){this.config=e}get(e){if(!this.config)throw new Error("RuntimeObjectRegistry not initialized. Call init() first.");return this.config.objects.get(e)}getAllIds(){if(!this.config)throw new Error("RuntimeObjectRegistry not initialized. Call init() first.");return Array.from(this.config.objects.keys())}has(e){return this.config?this.config.objects.has(e):!1}};var oa=Mt(require("pixi.js"),1),la=oa;typeof window!="undefined"&&(window.__basePixi=oa);gt();var he=require("pixi.js");gt();var ca=n=>n*Math.PI/180;function Es(n,e){var r,o,l,d,u;let t=e.ui;if(!(t!=null&&t.text))return null;let i="#ffffff";(r=e.render)!=null&&r.tint&&(i=e.render.tint);let a=new he.TextStyle({fontFamily:(o=t.font)!=null?o:"Arial",fontSize:(l=t.fontSize)!=null?l:16,fill:i,align:(d=t.align)!=null?d:"center",letterSpacing:(u=t.letterSpacing)!=null?u:0}),s=new he.Text({text:t.text,style:a});return s.label=n,s}function da(n){var u,c,p,g,m,f,C,b,h,v;let{stage:e,mainContainer:t,activeConfig:i,gameObjectManager:a,allowList:s,denyList:r}=n,o={},l={},d={};t.sortableChildren=!0;for(let[w,y]of i.objects.entries()){if(r!=null&&r.has(w)||s&&!s.has(w)||(y==null?void 0:y.enabled)===!1)continue;let I=(c=(u=y==null?void 0:y.render)==null?void 0:u.asset)==null?void 0:c.path,M=(g=(p=y==null?void 0:y.render)==null?void 0:p.asset)==null?void 0:g.type,B=!!(I&&M==="image"),R=!!((m=y==null?void 0:y.ui)!=null&&m.text),H=R?(f=y==null?void 0:y.ui)==null?void 0:f.renderMode:void 0,z;if(H==="png"&&B?z="png":H==="text"&&R?z="text":B?z="png":R?z="text":z="skip",z!=="skip"){if(z==="text"){let T=Es(w,y);if(!T)continue;let E=y.render;T.alpha=typeof(E==null?void 0:E.alpha)=="number"?E.alpha:1,T.visible=(E==null?void 0:E.visible)!==!1,T.zIndex=typeof(E==null?void 0:E.z_index)=="number"?E.z_index:0,E!=null&&E.anchor&&typeof E.anchor.x=="number"&&typeof E.anchor.y=="number"?T.anchor.set(E.anchor.x,E.anchor.y):T.anchor.set(.5,.5);let S=y.transform,A=(S==null?void 0:S.position)||(S==null?void 0:S.offset);A&&T.position.set((C=A.x)!=null?C:0,(b=A.y)!=null?b:0);let L=typeof(S==null?void 0:S.scale)=="number"?S.scale:1;T.scale.set(L,L);let G=typeof(S==null?void 0:S.rotation)=="number"?S.rotation:0;T.rotation=ca(G),T.parent||t.addChild(T);try{a.create(w,T)}catch{}o[w]=T,d[w]=T}else if(z==="png"){let T=Te[w]||(typeof he.Texture!="undefined"?he.Texture.EMPTY:void 0),E=new he.Sprite(T);E.label=w;let S=y.render;E.alpha=typeof(S==null?void 0:S.alpha)=="number"?S.alpha:1,E.visible=(S==null?void 0:S.visible)!==!1,E.zIndex=typeof(S==null?void 0:S.z_index)=="number"?S.z_index:0,S!=null&&S.anchor&&typeof S.anchor.x=="number"&&typeof S.anchor.y=="number"&&E.anchor.set(S.anchor.x,S.anchor.y);let A=y.transform,L=(A==null?void 0:A.position)||(A==null?void 0:A.offset);L&&E.position.set((h=L.x)!=null?h:0,(v=L.y)!=null?v:0);let G=typeof(A==null?void 0:A.scale)=="number"?A.scale:1;E.scale.set(G,G);let ne=typeof(A==null?void 0:A.rotation)=="number"?A.rotation:0;E.rotation=ca(ne),E.parent||t.addChild(E);try{a.create(w,E)}catch{}o[w]=E,l[w]=E}}}return t.parent||e.addChild(t),{objects:o,sprites:l,texts:d}}var Dn=class{constructor(){this.instanceCache=new Map;this.readyPromise=null;this.app=null;this.registry=new Qe}init(e,t){this.registry.init(e),this.app=t}updateConfig(e){this.registry.init(e),this.instanceCache.clear(),this.readyPromise=null}async ready(){this.readyPromise&&await this.readyPromise;let t=this.registry.getAllIds().filter(a=>!this.instanceCache.has(a));if(t.length===0)return;let i=async a=>{a.length&&(console.log("[Assets] Loading objects:",a),await Promise.all(a.map(async s=>{var o;let r=this.registry.get(s);if(!r){console.warn("[Assets] No config found for object:",s);return}try{let l=await Le.create(s,r,this.app);this.instanceCache.set(s,l),console.log("[Assets] Loaded object:",s,(o=l==null?void 0:l.constructor)==null?void 0:o.name)}catch(l){console.error("[Assets] Failed to load object:",s,l)}})))};return this.readyPromise=(async()=>{await i(t);let a=this.registry.getAllIds().filter(s=>!this.instanceCache.has(s));a.length>0&&(console.warn("[Assets] Retrying missing assets:",a),await i(a)),console.log("[Assets] Ready. Cached objects:",Array.from(this.instanceCache.keys()))})(),this.readyPromise}resetScene(){this.instanceCache.clear(),this.readyPromise=null}async reloadObject(e){let t=this.registry.get(e);if(t){let i=await Le.create(e,t,this.app);this.instanceCache.set(e,i)}}get(e){return this.instanceCache.get(e)}},pa=new Dn,ua=new Proxy(pa,{get(n,e){if(e in n&&typeof n[e]=="function")return n[e].bind(n);if(n.get(e))return n.get(e)}});function ga(n,e){pa.init(n,e)}gt();var Kt=class extends Ze{async init(){Ht(this.context.config,this.context.app),await Te.ready(),console.log("[AssetSystem] All assets preloaded and ready")}async onStart(){}onConfigUpdate(){console.log("[AssetSystem] Config updated - systems will refresh textures")}};var Qt=require("pixi.js"),fe={width:400,height:600,designWidth:400,scaleFactor:1},Tt={scale:1,position:1},en=[];function Ss(n,e,t,i,a,s,r){en.push({element:n,originalScale:s,positionHelper:e,heightPercent:a}),e(n,t,i,a,s,r,!1)}function Cs(){en.forEach(({element:n,originalScale:e,positionHelper:t,heightPercent:i})=>{let a=e*fe.scaleFactor;t(n,fe.width,fe.height,i,a,!0,!1)})}function ha(){en.length=0,console.log("[LAYOUT] Cleared all responsive elements")}function Jt(n,e){console.log(`[SCREEN] updateScreenState called: ${n}x${e}`),fe.width=n,fe.height=e,fe.scaleFactor=Math.min(n/fe.designWidth,1.15),Tt.scale=fe.scaleFactor,Tt.position=1,console.log(`[SCREEN] Global multipliers - scale: ${Tt.scale.toFixed(3)}`),Cs()}var O={layout:{scale_multiplier:1,position_offset:{x:0,y:0},debug_rect_visible:!0,debug_rect_color:16711680,debug_rect_thickness:4,debug_rect_scale_x:1,debug_rect_scale_y:1,screen_scale_x:1,screen_scale_y:1},engine:{scale:1,background_scale:1.05,background_offset_y:0,background_alpha:.98,label_pulse_speed:3,label_pulse_intensity:.03}};function As(n,e,t){let i=O[n];i&&i[e]!==void 0&&(i[e]=t,console.log(`Updated ${n}.${e} = ${t}`))}function Ts(){return O}var Ls={center:{x:.5,y:.5},"center-center":{x:.5,y:.5},middle:{x:.5,y:.5},"middle-center":{x:.5,y:.5},"top-left":{x:0,y:0},"top-center":{x:.5,y:0},"top-right":{x:1,y:0},"bottom-left":{x:0,y:1},"bottom-center":{x:.5,y:1},"bottom-right":{x:1,y:1},"left-center":{x:0,y:.5},"right-center":{x:1,y:.5},"center-left":{x:0,y:.5},"center-right":{x:1,y:.5},left:{x:0,y:.5},right:{x:1,y:.5},top:{x:.5,y:0},bottom:{x:.5,y:1}};function Xt(n,e){return typeof n=="number"&&Number.isFinite(n)?n:e}function $e(n,e={x:.5,y:.5}){var t;if(Array.isArray(n))return{x:Xt(n[0],e.x),y:Xt(n[1],e.y)};if(n&&typeof n=="object"){let i=n;return{x:Xt(i.x,e.x),y:Xt(i.y,e.y)}}if(typeof n=="string"){let i=n.trim().toLowerCase();return(t=Ls[i])!=null?t:e}return e}function et(n,e,t,i={}){var g,m,f,C,b,h;let a=$e(t),s=(g=i.inset)!=null?g:{},r=(m=i.padding)!=null?m:{x:0,y:0},o=((f=s.left)!=null?f:0)+r.x,l=((C=s.right)!=null?C:0)+r.x,d=((b=s.top)!=null?b:0)+r.y,u=((h=s.bottom)!=null?h:0)+r.y,c=Math.max(0,n-o-l),p=Math.max(0,e-d-u);return{x:o+c*a.x,y:d+p*a.y}}function tt(n,e,t,i={}){var f,C,b,h,v,w;let a=(f=i.inset)!=null?f:{},s=(C=i.padding)!=null?C:{x:0,y:0},r=((b=a.left)!=null?b:0)+s.x,o=((h=a.right)!=null?h:0)+s.x,l=((v=a.top)!=null?v:0)+s.y,d=((w=a.bottom)!=null?w:0)+s.y,u=Math.max(0,n-r-o),c=Math.max(0,e-l-d),p=$e(t,{x:.5,y:.5}),g=Math.min(Math.max(p.x,0),1),m=Math.min(Math.max(p.y,0),1);return{x:r+u*g,y:l+c*m}}function Zt(n,e,t,i={}){var u,c,p;if(!n)return;let a=i.positionRatio?tt(e,t,i.positionRatio,{inset:i.inset,padding:i.screenPadding}):et(e,t,i.anchor,{inset:i.inset,padding:i.screenPadding}),s=(u=i.offset)!=null?u:{x:0,y:0},r=a.x+s.x,o=a.y+s.y;n.anchor&&i.renderAnchor&&n.anchor.set(i.renderAnchor.x,i.renderAnchor.y),te(n,r,o);let l=(c=i.scale)!=null?c:1,d=(p=i.scaleMultiplier)!=null?p:1;(i.scale!==void 0||i.scaleMultiplier!==void 0)&&oe(n,l*d)}if(typeof window!="undefined"){let n=window.innerWidth,e=window.innerHeight,t=()=>{let i=window.innerWidth,a=window.innerHeight;(i!==n||a!==e)&&(n=i,e=a,Jt(i,a))};window.addEventListener("resize",t),window.addEventListener("orientationchange",()=>{setTimeout(t,100)}),window.mraid&&(window.mraid.addEventListener("viewableChange",t),window.mraid.addEventListener("sizeChange",t)),Jt(window.innerWidth,window.innerHeight),window.updateDebugConfig=As,window.getDebugConfig=Ts,window.copyConfig=Ds,window.applyConfig=At,window.applyConfigForRatio=Hs,window.positionAtBottom=fa,window.positionAtTop=js,window.positionAtCenter=Ms,window.positionAtLeft=_s,window.positionAtRight=Ps,window.positionAtBottomLeft=Os,window.positionAtBottomRight=Rs,window.positionAtTopLeft=zs,window.positionAtTopRight=$s,window.applyPositionContract=Is,console.log("\u{1F3AE} Debug Config Functions Available:"),console.log("\u2022 updateDebugConfig(category, key, value)"),console.log("\u2022 getDebugConfig()"),console.log("\u2022 copyConfig(presetName)"),console.log("\u2022 applyConfig(config)"),console.log("\u2022 applyConfigForRatio(width, height)"),console.log("\u{1F4CD} Positioning Helpers Available (with scale):"),console.log("\u2022 positionAtBottom(element, w, h, percent, scale)"),console.log("\u2022 positionAtTop(element, w, h, percent, scale)"),console.log("\u2022 positionAtCenter(element, w, h, offsetX, offsetY, scale)"),console.log("\u2022 positionAtLeft/Right(element, w, h, percent, scale)"),console.log("\u2022 Corner positions: BottomLeft/Right, TopLeft/Right (all with scale)"),console.log("\u2022 applyPositionContract(element, w, h, contract)"),console.log("Example: positionAtCenter(mySprite, 400, 600, 0, -50, 1.2)")}function tn(n,e,t=0){return n*e+t}function nn(n,e,t=0){return n*(1-e)+t}function an(n,e,t=0){return n*e+t}function sn(n,e,t=0){return n*(1-e)+t}function Q(n,e=0){return n/2+e}function ks(n,e){return n*e}function Is(n,e,t,i){var r,o,l,d,u,c,p,g,m,f,C,b,h,v,w,y,I,M,B,R;let a=0,s=0;switch(i.type){case"top":a=Q(e,(o=(r=i.offset)==null?void 0:r.x)!=null?o:0),s=tn(t,i.percent,(d=(l=i.offset)==null?void 0:l.y)!=null?d:0);break;case"bottom":a=Q(e,(c=(u=i.offset)==null?void 0:u.x)!=null?c:0),s=nn(t,i.percent,(g=(p=i.offset)==null?void 0:p.y)!=null?g:0);break;case"left":a=an(e,i.percent,(f=(m=i.offset)==null?void 0:m.x)!=null?f:0),s=Q(t,(b=(C=i.offset)==null?void 0:C.y)!=null?b:0);break;case"right":a=sn(e,i.percent,(v=(h=i.offset)==null?void 0:h.x)!=null?v:0),s=Q(t,(y=(w=i.offset)==null?void 0:w.y)!=null?y:0);break;case"center":a=Q(e,(M=(I=i.offset)==null?void 0:I.x)!=null?M:0),s=Q(t,(R=(B=i.offset)==null?void 0:B.y)!=null?R:0);break}n.position?n.position.set(a,s):(n.x=a,n.y=s),i.scale!==void 0&&i.scale!==1&&n.scale&&(typeof n.scale.set=="function"?n.scale.set(i.scale,i.scale):(n.scale.x=i.scale,n.scale.y=i.scale))}function fa(n,e,t,i=.2,a=1,s=!0,r=!1){let o=ks(t,i),l=nn(t,i/2);te(n,Q(e),l);let d=s?a*fe.scaleFactor:a;oe(n,d),r&&!en.find(u=>u.element===n)&&Ss(n,fa,e,t,i,a,s)}function js(n,e,t,i=.1,a=1){te(n,Q(e),tn(t,i)),oe(n,a)}function Ms(n,e,t,i=0,a=0,s=1){te(n,Q(e,i),Q(t,a)),oe(n,s)}function _s(n,e,t,i=.1,a=1){te(n,an(e,i),Q(t)),oe(n,a)}function Ps(n,e,t,i=.1,a=1){te(n,sn(e,i),Q(t)),oe(n,a)}function Os(n,e,t,i=.05,a=.05,s=1){te(n,an(e,a),nn(t,i)),oe(n,s)}function Rs(n,e,t,i=.05,a=.05,s=1){te(n,sn(e,a),nn(t,i)),oe(n,s)}function zs(n,e,t,i=.05,a=.05,s=1){te(n,an(e,a),tn(t,i)),oe(n,s)}function $s(n,e,t,i=.05,a=.05,s=1){te(n,sn(e,a),tn(t,i)),oe(n,s)}function te(n,e,t){n&&n.position?typeof n.position.set=="function"?n.position.set(e,t):(n.position.x=e,n.position.y=t):n&&(n.x=e,n.y=t)}function oe(n,e){e!==1&&n&&n.scale&&(typeof n.scale.set=="function"?n.scale.set(e,e):n.scale.x!==void 0&&n.scale.y!==void 0&&(n.scale.x=e,n.scale.y=e))}var ze={default:{layout:{scale_multiplier:1,position_offset:{x:0,y:0},debug_rect_visible:!0,debug_rect_color:16711680,debug_rect_thickness:4,debug_rect_scale_x:1,debug_rect_scale_y:1,screen_scale_x:1,screen_scale_y:1},engine:{scale:1,background_scale:1.05,background_offset_y:0,background_alpha:.98,label_pulse_speed:3,label_pulse_intensity:.03}},wide:{layout:{scale_multiplier:1,position_offset:{x:0,y:0},debug_rect_visible:!0,debug_rect_color:16711680,debug_rect_thickness:4,debug_rect_scale_x:1,debug_rect_scale_y:1,screen_scale_x:.9,screen_scale_y:1.1},engine:{scale:1,background_scale:1.1,background_offset_y:0,background_alpha:.95,label_pulse_speed:3,label_pulse_intensity:.03}},square:{layout:{scale_multiplier:1,position_offset:{x:0,y:0},debug_rect_visible:!0,debug_rect_color:16711680,debug_rect_thickness:4,debug_rect_scale_x:1,debug_rect_scale_y:1,screen_scale_x:.85,screen_scale_y:.85},engine:{scale:1,background_scale:1,background_offset_y:0,background_alpha:1,label_pulse_speed:3,label_pulse_intensity:.03}},tall:{layout:{scale_multiplier:1,position_offset:{x:0,y:0},debug_rect_visible:!0,debug_rect_color:16711680,debug_rect_thickness:4,debug_rect_scale_x:1,debug_rect_scale_y:1,screen_scale_x:1.1,screen_scale_y:.9},engine:{scale:1,background_scale:.95,background_offset_y:0,background_alpha:1,label_pulse_speed:3,label_pulse_intensity:.03}}};function Ds(n){return n&&ze[n]?JSON.parse(JSON.stringify(ze[n])):JSON.parse(JSON.stringify(O))}function At(n){Object.keys(n).forEach(e=>{let t=e;O[t]&&n[t]&&Object.assign(O[t],n[t])}),console.log("Config applied:",n)}function Hs(n,e){let t=n/e;t>1.6?(At(ze.wide),console.log("Applied WIDE config for ratio:",t)):t<.7?(At(ze.tall),console.log("Applied TALL config for ratio:",t)):t>.8&&t<1.2?(At(ze.square),console.log("Applied SQUARE config for ratio:",t)):(At(ze.default),console.log("Applied DEFAULT config for ratio:",t))}if(typeof window!="undefined"){let n=window;n.configPresets=ze,n.resolveAnchorVec2=n.resolveAnchorVec2||$e,n.resolveScreenAnchorPoint=n.resolveScreenAnchorPoint||et,n.resolveScreenRatioPoint=n.resolveScreenRatioPoint||tt}var Y=null;function ma(n,e,t,i,a,s={}){var G,ne,me,be,ye,ve,we,xe,q,Ie,nt,it,at,st,rt,ot,lt,ct,dt,pt,N,K,U,X,De,je,Hn,Nn,Fn,Bn,Un,Gn,qn,Vn;let r=(G=s.enableDebugLogs)!=null?G:!1;r&&(console.log("\u{1F3AF} [LAYOUT_DEBUGS] ===== STARTING LAYOUT CALCULATION ====="),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Screen dimensions:",{width:i.width,height:i.height}),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Time:",t),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Options:",s));let{mainContainer:o,label:l,background:d,backgroundTexture:u,app:c}=n;if(!c||!c.renderer){r&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] \u274C No app or renderer, skipping layout");return}r&&(console.log("\u{1F3AF} [LAYOUT_DEBUGS] App renderer dimensions:",{width:c.renderer.width,height:c.renderer.height}),console.log("\u{1F3AF} [LAYOUT_DEBUGS] App screen dimensions:",{width:c.screen.width,height:c.screen.height}));let p=i.width,g=i.height;r&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] Base dimensions:",{baseWidth:p,baseHeight:g});let m=p*O.layout.screen_scale_x,f=g*O.layout.screen_scale_y,C=p/2,b=e.engine.runtime||{},h=b.layout||{};r&&(console.log("\u{1F3AF} [LAYOUT_DEBUGS] Debug config:",{screen_scale_x:O.layout.screen_scale_x,screen_scale_y:O.layout.screen_scale_y}),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Calculated dimensions:",{width:m,height:f,midX:C}),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Engine runtime:",b),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Layout config:",h));let v=h.design_width_portrait||400,w=m/v;w=Math.min(w,1.15);let y=w*((ne=O.engine.scale)!=null?ne:1),I=(me=s.skipMainContainerTransform)!=null?me:!1;!I&&o&&o.scale&&(typeof o.scale.set=="function"?o.scale.set(y):(o.scale.x=y,o.scale.y=y));let M=(be=h.main_container_anchor)!=null?be:"center",B=(ye=h.main_container_position_ratio)!=null?ye:{x:.5,y:.5},R=(ve=h.main_container_offset)!=null?ve:{x:0,y:0},H=h.main_container_position_ratio?tt(p,g,B):et(p,g,M),z=H.x+R.x+O.layout.position_offset.x,T=H.y+R.y+O.layout.position_offset.y;if(!I&&o&&o.position&&(typeof o.position.set=="function"?o.position.set(z,T):(o.position.x=z,o.position.y=T)),a&&(o!=null&&o.toLocal))for(let[V,F]of e.objects.entries()){let _=F==null?void 0:F.transform;if(!_||((we=_.position_mode)!=null?we:"static")!=="static")continue;let k=(xe=a.get)==null?void 0:xe.call(a,V),ie=((q=k==null?void 0:k.getDisplayObject)==null?void 0:q.call(k))||(k==null?void 0:k.pixiObject)||k;if(!ie||ie.parent!==o)continue;let Lt=_.position_ratio!=null?tt(p,g,_.position_ratio):et(p,g,(Ie=_.anchor)!=null?Ie:"center"),kt=o.toLocal(new Qt.Point(Lt.x,Lt.y)),It=(nt=_.position)!=null?nt:{x:0,y:0},Me=kt.x+It.x,rn=kt.y+It.y;typeof(k==null?void 0:k.setPosition)=="function"?k.setPosition(Me,rn):(te(ie,Me,rn),(it=k==null?void 0:k.transform)!=null&&it.position&&(k.transform.position.x=Me,k.transform.position.y=rn))}let E=typeof window!="undefined"?window.__BUILD_SETTINGS__:null,A=((E==null?void 0:E.buildMode)||(typeof __BUILD_MODE__!="undefined"?__BUILD_MODE__:"dev"))==="dev";if(O.layout.debug_rect_visible&&A){(!Y||Y.parent!==c.stage)&&(Y==null||Y.destroy(),Y=new Qt.Graphics,Y.zIndex=9999,c.stage.addChild(Y)),Y.clear();let V=O.layout.debug_rect_scale_x,F=O.layout.debug_rect_scale_y,_=(p-4)*V,Ee=(g-4)*F,k=(p-_)/2,ie=(g-Ee)/2;r&&(console.log("\u{1F3AF} [LAYOUT_DEBUGS] ===== DEBUG RECT POSITIONING ====="),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Debug rect calculations:",{baseWidth:p,baseHeight:g,rectW:_,rectH:Ee,offsetX:k,offsetY:ie}),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Debug rect final position:",{x:2+k,y:2+ie,width:_,height:Ee})),Y.rect(2+k,2+ie,_,Ee).stroke({width:O.layout.debug_rect_thickness,color:O.layout.debug_rect_color})}else Y&&(Y.destroy(),Y=null);let L=((at=n.label)==null?void 0:at.config)||e.objects.get("label_1")||e.objects.get("ui_tutorial_1");if(l&&l.position&&L){let V=(rt=(st=L==null?void 0:L.transform)==null?void 0:st.anchor)!=null?rt:"center",F=(ot=L==null?void 0:L.transform)==null?void 0:ot.position_ratio,_=((lt=L==null?void 0:L.transform)==null?void 0:lt.offset)||{x:0,y:0};Zt(l,p,g,{anchor:V,positionRatio:F,offset:{x:_.x*y,y:_.y*y},renderAnchor:$e(V)})}if(l&&l.alpha>0){let V=1+Math.sin(t*O.engine.label_pulse_speed)*O.engine.label_pulse_intensity,F=(dt=(ct=L==null?void 0:L.transform)==null?void 0:ct.scale)!=null?dt:1,_=V*y*F;l.scale&&(typeof l.scale.set=="function"?l.scale.set(_):(l.scale.x=_,l.scale.y=_))}if(r&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] ===== BACKGROUND POSITIONING ====="),d){r&&(console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background object exists:",!!d),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background type:",(pt=d.constructor)==null?void 0:pt.name)),d.alpha=((K=(N=b.background)==null?void 0:N.alpha)!=null?K:.98)*O.engine.background_alpha,r&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background alpha set to:",d.alpha);let V=e.objects.get("background_1");r&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background config:",V);let F=(V==null?void 0:V.transform)||{};r&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background transform:",F);let _=F.offset||{x:0,y:0},Ee=((X=(U=b.background)==null?void 0:U.offset_y)!=null?X:0)+O.engine.background_offset_y,k=(De=F.anchor)!=null?De:"center",ie=F.position_ratio;if(r&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background positioning params:",{bgOffset:_,bgRuntimeOffsetY:Ee,bgScreenAnchor:k,bgPositionRatio:ie,baseWidth:p,baseHeight:g,finalScale:y}),Zt(d,p,g,{anchor:k,positionRatio:ie,offset:{x:_.x*y,y:_.y*y+Ee},renderAnchor:$e(k)}),r&&(console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background position after applyScreenAnchor:",{x:d.x,y:d.y,scaleX:(je=d.scale)==null?void 0:je.x,scaleY:(Hn=d.scale)==null?void 0:Hn.y,anchorX:(Nn=d.anchor)==null?void 0:Nn.x,anchorY:(Fn=d.anchor)==null?void 0:Fn.y,pivotX:(Bn=d.pivot)==null?void 0:Bn.x,pivotY:(Un=d.pivot)==null?void 0:Un.y,width:d.width,height:d.height}),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background texture dimensions:",{textureWidth:u==null?void 0:u.width,textureHeight:u==null?void 0:u.height})),u){let Lt=Math.max(m/u.width,f/u.height),kt=(qn=(Gn=b.background)==null?void 0:Gn.scale_multiplier)!=null?qn:1.05,It=(Vn=F.scale)!=null?Vn:1,Me=Lt*kt*O.engine.background_scale*It;d.scale&&(typeof d.scale.set=="function"?d.scale.set(Me):(d.scale.x=Me,d.scale.y=Me))}else d&&typeof d.clear=="function"&&(d.clear(),d.rect(-m/2,-f/2,m,f).fill({color:1444375}))}}function ba(n){var o,l,d;let{setState:e,updateLabelAlpha:t,updateHandAlpha:i,config:a,states:s}=n,r=((l=(o=a.engine)==null?void 0:o.runtime)==null?void 0:l.timeline)||{};e(s.showHook),setTimeout(()=>{t(1),i(1),e(s.waitInput),console.log("[GAME] \u23F3 Game ready for user input - tutorial shown")},(d=r.tutorial_delay_ms)!=null?d:1500)}0&&(module.exports={AssetCache,AssetLoader,AssetSystem,AssetTextures,Assets,BaseSystem,GameEngine,GameObject,GameObjectManager,ObjectFactory,Renderer,RuntimeObjectRegistry,Transform,applyScreenAnchor,basePixi,clearResponsiveElements,createPixiBase,getRegisteredFontIds,globalResponsiveMultipliers,initAssetTextures,initAssets,layout,playLottieOverlay,registerFont,registerType,resolveAnchorVec2,resolveFont,resolveFontWeight,resolveScreenAnchorPoint,resolveScreenRatioPoint,runInitSequence,setLottieInstance,spawnSceneFromConfig,updateScreenState});
|
|
255
|
+
`,e.appendChild(v);let w;try{w=u.loadAnimation({container:v,renderer:s.renderer||"svg",loop:(xe=s.loop)!=null?xe:!1,autoplay:(Se=s.autoplay)!=null?Se:!0,animationData:d})}catch(q){return v.parentNode&&v.parentNode.removeChild(v),console.warn(`[LottieOverlay] Failed to start animation: ${i}`,q),null}s.speed!==void 0&&w.setSpeed(s.speed);let y=()=>{w.destroy(),v.parentNode&&v.parentNode.removeChild(v)};return s.loop||w.addEventListener("complete",y),{animation:w,cleanup:y}}Ht();mi();var ai=class{constructor(e,t,n){this.systems=[];this.totalTime=0;this.context=null;this.root=e,this.config=t,this.destinationUrl=n}async createApp(e){if(this.context)return{app:this.app,gameObjectManager:this.gameObjectManager};let{app:t,stage:n}=await ii(this.root,{background:e.background_color,text:e.text_color,primary:e.cta_background,cta_text:e.cta_text});this.app=t,this.stage=n,this.gameObjectManager=new Qe(this.config),this.stage.eventMode="passive",this.stage.interactive=!1,this.stage.interactiveChildren=!0,this.stage.sortableChildren=!0,this.context={app:this.app,stage:this.stage,config:this.config,gameObjectManager:this.gameObjectManager,destinationUrl:this.destinationUrl,root:this.root,engine:this};for(let a of this.systems)a.setContext(this.context);return{app:this.app,gameObjectManager:this.gameObjectManager}}async initSystems(){if(!this.context)throw new Error("[GameEngine] createApp() must be called before initSystems()");for(let e of this.systems)e.init&&await e.init()}async init(e){return await this.createApp(e),await this.initSystems(),{app:this.app,gameObjectManager:this.gameObjectManager}}registerSystems(e){this.systems.push(...e)}async start(){for(let e of this.systems)e.onStart&&await e.onStart();this.app.ticker.add(this.update.bind(this)),window.addEventListener("handler-preview:screen",e=>{let{width:t,height:n}=e.detail;this.resize(t,n)})}update(e){let t=e.deltaTime/60;this.totalTime+=t;for(let n of this.systems)n.update&&n.update(t,this.totalTime)}resize(e,t){for(let n of this.systems)n.onResize&&n.onResize(e,t)}updateConfig(e){this.config=e;for(let t of this.systems)t.context.config=e,t.onConfigUpdate&&t.onConfigUpdate(e)}destroy(){for(let e of this.systems)e.onDestroy&&e.onDestroy();this.app.ticker.remove(this.update.bind(this)),this.app.destroy(!0,{children:!0,texture:!1})}getApp(){return this.app}getGameObjectManager(){return this.gameObjectManager}getTotalTime(){return this.totalTime}getSystem(e){let t=this.systems.find(n=>n instanceof e);if(!t)throw new Error(`System ${e.name} not found!`);return t}};var tt=class{setContext(e){this.context=e}};var it=class{constructor(){this.config=null}init(e){this.config=e}get(e){if(!this.config)throw new Error("RuntimeObjectRegistry not initialized. Call init() first.");return this.config.objects.get(e)}getAllIds(){if(!this.config)throw new Error("RuntimeObjectRegistry not initialized. Call init() first.");return Array.from(this.config.objects.keys())}has(e){return this.config?this.config.objects.has(e):!1}};var ua=jt(require("pixi.js"),1),ga=ua;typeof window!="undefined"&&(window.__basePixi=ua);ht();var me=require("pixi.js");ht();var ha=i=>i*Math.PI/180;function Us(i,e){var r,o,l,d,u;let t=e.ui;if(!(t!=null&&t.text))return null;let n="#ffffff";(r=e.render)!=null&&r.tint&&(n=e.render.tint);let a=new me.TextStyle({fontFamily:(o=t.font)!=null?o:"Arial",fontSize:(l=t.fontSize)!=null?l:16,fill:n,align:(d=t.align)!=null?d:"center",letterSpacing:(u=t.letterSpacing)!=null?u:0}),s=new me.Text({text:t.text,style:a});return s.label=i,s}function fa(i){var u,c,p,g,m,f,C,b,h,v;let{stage:e,mainContainer:t,activeConfig:n,gameObjectManager:a,allowList:s,denyList:r}=i,o={},l={},d={};t.sortableChildren=!0;for(let[w,y]of n.objects.entries()){if(r!=null&&r.has(w)||s&&!s.has(w)||(y==null?void 0:y.enabled)===!1)continue;let I=(c=(u=y==null?void 0:y.render)==null?void 0:u.asset)==null?void 0:c.path,j=(g=(p=y==null?void 0:y.render)==null?void 0:p.asset)==null?void 0:g.type,B=!!(I&&j==="image"),R=!!((m=y==null?void 0:y.ui)!=null&&m.text),H=R?(f=y==null?void 0:y.ui)==null?void 0:f.renderMode:void 0,z;if(H==="png"&&B?z="png":H==="text"&&R?z="text":B?z="png":R?z="text":z="skip",z!=="skip"){if(z==="text"){let T=Us(w,y);if(!T)continue;let S=y.render;T.alpha=typeof(S==null?void 0:S.alpha)=="number"?S.alpha:1,T.visible=(S==null?void 0:S.visible)!==!1,T.zIndex=typeof(S==null?void 0:S.z_index)=="number"?S.z_index:0,S!=null&&S.anchor&&typeof S.anchor.x=="number"&&typeof S.anchor.y=="number"?T.anchor.set(S.anchor.x,S.anchor.y):T.anchor.set(.5,.5);let E=y.transform,A=(E==null?void 0:E.position)||(E==null?void 0:E.offset);A&&T.position.set((C=A.x)!=null?C:0,(b=A.y)!=null?b:0);let L=typeof(E==null?void 0:E.scale)=="number"?E.scale:1;T.scale.set(L,L);let G=typeof(E==null?void 0:E.rotation)=="number"?E.rotation:0;T.rotation=ha(G),T.parent||t.addChild(T);try{a.create(w,T)}catch{}o[w]=T,d[w]=T}else if(z==="png"){let T=Le[w]||(typeof me.Texture!="undefined"?me.Texture.EMPTY:void 0),S=new me.Sprite(T);S.label=w;let E=y.render;S.alpha=typeof(E==null?void 0:E.alpha)=="number"?E.alpha:1,S.visible=(E==null?void 0:E.visible)!==!1,S.zIndex=typeof(E==null?void 0:E.z_index)=="number"?E.z_index:0,E!=null&&E.anchor&&typeof E.anchor.x=="number"&&typeof E.anchor.y=="number"&&S.anchor.set(E.anchor.x,E.anchor.y);let A=y.transform,L=(A==null?void 0:A.position)||(A==null?void 0:A.offset);L&&S.position.set((h=L.x)!=null?h:0,(v=L.y)!=null?v:0);let G=typeof(A==null?void 0:A.scale)=="number"?A.scale:1;S.scale.set(G,G);let ie=typeof(A==null?void 0:A.rotation)=="number"?A.rotation:0;S.rotation=ha(ie),S.parent||t.addChild(S);try{a.create(w,S)}catch{}o[w]=S,l[w]=S}}}return t.parent||e.addChild(t),{objects:o,sprites:l,texts:d}}var Di=class{constructor(){this.instanceCache=new Map;this.readyPromise=null;this.app=null;this.registry=new it}init(e,t){this.registry.init(e),this.app=t}updateConfig(e){this.registry.init(e),this.instanceCache.clear(),this.readyPromise=null}async ready(){this.readyPromise&&await this.readyPromise;let t=this.registry.getAllIds().filter(a=>!this.instanceCache.has(a));if(t.length===0)return;let n=async a=>{a.length&&(console.log("[Assets] Loading objects:",a),await Promise.all(a.map(async s=>{var o;let r=this.registry.get(s);if(!r){console.warn("[Assets] No config found for object:",s);return}try{let l=await ue.create(s,r,this.app);this.instanceCache.set(s,l),console.log("[Assets] Loaded object:",s,(o=l==null?void 0:l.constructor)==null?void 0:o.name)}catch(l){console.error("[Assets] Failed to load object:",s,l)}})))};return this.readyPromise=(async()=>{await n(t);let a=this.registry.getAllIds().filter(s=>!this.instanceCache.has(s));a.length>0&&(console.warn("[Assets] Retrying missing assets:",a),await n(a)),console.log("[Assets] Ready. Cached objects:",Array.from(this.instanceCache.keys()))})(),this.readyPromise}resetScene(){this.instanceCache.clear(),this.readyPromise=null}async reloadObject(e){let t=this.registry.get(e);if(t){let n=await ue.create(e,t,this.app);this.instanceCache.set(e,n)}}get(e){return this.instanceCache.get(e)}},ma=new Di,ba=new Proxy(ma,{get(i,e){if(e in i&&typeof i[e]=="function")return i[e].bind(i);if(i.get(e))return i.get(e)}});function ya(i,e){ma.init(i,e)}ht();var si=class extends tt{async init(){Nt(this.context.config,this.context.app),await Le.ready(),console.log("[AssetSystem] All assets preloaded and ready")}async onStart(){}onConfigUpdate(){console.log("[AssetSystem] Config updated - systems will refresh textures")}};function va(i){var o,l,d;let{setState:e,updateLabelAlpha:t,updateHandAlpha:n,config:a,states:s}=i,r=((l=(o=a.engine)==null?void 0:o.runtime)==null?void 0:l.timeline)||{};e(s.showHook),setTimeout(()=>{t(1),n(1),e(s.waitInput),console.log("[GAME] \u23F3 Game ready for user input - tutorial shown")},(d=r.tutorial_delay_ms)!=null?d:1500)}0&&(module.exports={AssetCache,AssetLoader,AssetSystem,AssetTextures,Assets,BaseSystem,GameEngine,GameObject,GameObjectManager,ObjectFactory,Renderer,RuntimeObjectRegistry,Transform,applyScreenAnchor,basePixi,clearResponsiveElements,createPixiBase,getRegisteredFontIds,globalResponsiveMultipliers,initAssetTextures,initAssets,layout,playLottieOverlay,registerFont,registerType,resolveAnchorVec2,resolveFont,resolveFontWeight,resolveScreenAnchorPoint,resolveScreenRatioPoint,runInitSequence,setLottieInstance,spawnSceneFromConfig,updateScreenState});
|