handler-playable-sdk 0.3.2 → 0.3.4
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/AssetEditorModal-DBAGQINC.js +1 -0
- package/dist/AssetTextures-AZY5VKWH.js +1 -0
- package/dist/ConfigOverride-DFTDUTRQ.js +1 -0
- package/dist/chunk-C2CEUBBT.js +1325 -0
- package/dist/chunk-DEUORFXE.js +1 -0
- package/dist/chunk-DHSGG7NF.js +1 -0
- package/dist/chunk-E6WJCS24.js +46 -0
- package/dist/chunk-PWGHKK3J.js +1 -0
- package/dist/chunk-Q7FPWOA3.js +1 -0
- package/dist/config-7DI6U2YD.js +1 -0
- package/dist/index.cjs +1360 -0
- package/dist/index.css +4537 -1
- package/dist/index.d.cts +892 -0
- package/dist/index.d.ts +494 -39
- package/dist/index.js +1 -1
- package/dist/{loader-object-centric-C1QteFfG.d.mts → loader-object-centric-Ce6MVkQw.d.cts} +1 -1
- package/dist/{loader-object-centric-C1QteFfG.d.ts → loader-object-centric-Ce6MVkQw.d.ts} +1 -1
- package/dist/pixi/index.cjs +256 -0
- package/dist/pixi/index.css +4537 -1
- package/dist/pixi/{index.d.mts → index.d.cts} +156 -144
- package/dist/pixi/index.d.ts +156 -144
- package/dist/pixi/index.js +1 -27
- package/dist/three/index.cjs +363 -0
- package/dist/three/index.css +4537 -1
- package/dist/three/index.js +1 -134
- package/package.json +29 -18
- package/dist/ConfigOverride-6YH2ILBJ.mjs +0 -1
- package/dist/chunk-BDZGKN5O.mjs +0 -1
- package/dist/chunk-GYW3GFXA.mjs +0 -830
- package/dist/chunk-HN7I4BLB.mjs +0 -1
- package/dist/config-QLS2MDB6.mjs +0 -1
- package/dist/index.d.mts +0 -437
- package/dist/index.mjs +0 -1
- package/dist/pixi/index.mjs +0 -1
- package/dist/three/index.mjs +0 -118
- /package/dist/three/{index.d.mts → index.d.cts} +0 -0
|
@@ -0,0 +1,1325 @@
|
|
|
1
|
+
import{c as qa,d as Ne,e as Ga}from"./chunk-DEUORFXE.js";import{i as ar}from"./chunk-DHSGG7NF.js";import{c as et,d as Wa,g as ic,h as Ya,j as Va,l as nc,m as rc,n as Ka,o as ac}from"./chunk-PWGHKK3J.js";import{a as Fe,b as R,c as ig}from"./chunk-Q7FPWOA3.js";var tn=R(($0,ns)=>{"use strict";typeof process=="undefined"||!process.version||process.version.indexOf("v0.")===0||process.version.indexOf("v1.")===0&&process.version.indexOf("v1.8.")!==0?ns.exports={nextTick:ag}:ns.exports=process;function ag(e,t,i,n){if(typeof e!="function")throw new TypeError('"callback" argument must be a function');var r=arguments.length,a,s;switch(r){case 0:case 1:return process.nextTick(e);case 2:return process.nextTick(function(){e.call(null,t)});case 3:return process.nextTick(function(){e.call(null,t,i)});case 4:return process.nextTick(function(){e.call(null,t,i,n)});default:for(a=new Array(r-1),s=0;s<a.length;)a[s++]=arguments[s];return process.nextTick(function(){e.apply(null,a)})}}});var Mc=R((q0,Ic)=>{"use strict";var sg={}.toString;Ic.exports=Array.isArray||function(e){return sg.call(e)=="[object Array]"}});var rs=R((G0,Oc)=>{"use strict";Oc.exports=Fe("stream")});var nn=R((as,zc)=>{"use strict";var _r=Fe("buffer"),tt=_r.Buffer;function Dc(e,t){for(var i in e)t[i]=e[i]}tt.from&&tt.alloc&&tt.allocUnsafe&&tt.allocUnsafeSlow?zc.exports=_r:(Dc(_r,as),as.Buffer=ui);function ui(e,t,i){return tt(e,t,i)}Dc(tt,ui);ui.from=function(e,t,i){if(typeof e=="number")throw new TypeError("Argument must not be a number");return tt(e,t,i)};ui.alloc=function(e,t,i){if(typeof e!="number")throw new TypeError("Argument must be a number");var n=tt(e);return t!==void 0?typeof i=="string"?n.fill(t,i):n.fill(t):n.fill(0),n};ui.allocUnsafe=function(e){if(typeof e!="number")throw new TypeError("Argument must be a number");return tt(e)};ui.allocUnsafeSlow=function(e){if(typeof e!="number")throw new TypeError("Argument must be a number");return _r.SlowBuffer(e)}});var pi=R(ae=>{"use strict";function og(e){return Array.isArray?Array.isArray(e):Er(e)==="[object Array]"}ae.isArray=og;function lg(e){return typeof e=="boolean"}ae.isBoolean=lg;function cg(e){return e===null}ae.isNull=cg;function dg(e){return e==null}ae.isNullOrUndefined=dg;function ug(e){return typeof e=="number"}ae.isNumber=ug;function pg(e){return typeof e=="string"}ae.isString=pg;function fg(e){return typeof e=="symbol"}ae.isSymbol=fg;function hg(e){return e===void 0}ae.isUndefined=hg;function gg(e){return Er(e)==="[object RegExp]"}ae.isRegExp=gg;function mg(e){return typeof e=="object"&&e!==null}ae.isObject=mg;function bg(e){return Er(e)==="[object Date]"}ae.isDate=bg;function vg(e){return Er(e)==="[object Error]"||e instanceof Error}ae.isError=vg;function yg(e){return typeof e=="function"}ae.isFunction=yg;function xg(e){return e===null||typeof e=="boolean"||typeof e=="number"||typeof e=="string"||typeof e=="symbol"||typeof e=="undefined"}ae.isPrimitive=xg;ae.isBuffer=Fe("buffer").Buffer.isBuffer;function Er(e){return Object.prototype.toString.call(e)}});var jc=R((Y0,ss)=>{"use strict";typeof Object.create=="function"?ss.exports=function(t,i){i&&(t.super_=i,t.prototype=Object.create(i.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}))}:ss.exports=function(t,i){if(i){t.super_=i;var n=function(){};n.prototype=i.prototype,t.prototype=new n,t.prototype.constructor=t}}});var fi=R((V0,ls)=>{"use strict";try{if(os=Fe("util"),typeof os.inherits!="function")throw"";ls.exports=os.inherits}catch{ls.exports=jc()}var os});var Fc=R((K0,cs)=>{"use strict";function wg(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var Bc=nn().Buffer,rn=Fe("util");function _g(e,t,i){e.copy(t,i)}cs.exports=(function(){function e(){wg(this,e),this.head=null,this.tail=null,this.length=0}return e.prototype.push=function(i){var n={data:i,next:null};this.length>0?this.tail.next=n:this.head=n,this.tail=n,++this.length},e.prototype.unshift=function(i){var n={data:i,next:this.head};this.length===0&&(this.tail=n),this.head=n,++this.length},e.prototype.shift=function(){if(this.length!==0){var i=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,i}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(i){if(this.length===0)return"";for(var n=this.head,r=""+n.data;n=n.next;)r+=i+n.data;return r},e.prototype.concat=function(i){if(this.length===0)return Bc.alloc(0);for(var n=Bc.allocUnsafe(i>>>0),r=this.head,a=0;r;)_g(r.data,n,a),a+=r.data.length,r=r.next;return n},e})();rn&&rn.inspect&&rn.inspect.custom&&(cs.exports.prototype[rn.inspect.custom]=function(){var e=rn.inspect({length:this.length});return this.constructor.name+" "+e})});var ds=R((X0,Nc)=>{"use strict";var Sr=tn();function Eg(e,t){var i=this,n=this._readableState&&this._readableState.destroyed,r=this._writableState&&this._writableState.destroyed;return n||r?(t?t(e):e&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,Sr.nextTick(Ar,this,e)):Sr.nextTick(Ar,this,e)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,function(a){!t&&a?i._writableState?i._writableState.errorEmitted||(i._writableState.errorEmitted=!0,Sr.nextTick(Ar,i,a)):Sr.nextTick(Ar,i,a):t&&t(a)}),this)}function Sg(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function Ar(e,t){e.emit("error",t)}Nc.exports={destroy:Eg,undestroy:Sg}});var Uc=R((Z0,Hc)=>{"use strict";Hc.exports=Fe("util").deprecate});var ps=R((J0,Xc)=>{"use strict";var jt=tn();Xc.exports=X;function qc(e){var t=this;this.next=null,this.entry=null,this.finish=function(){Ug(t,e)}}var Ag=!process.browser&&["v0.10","v0.9."].indexOf(process.version.slice(0,5))>-1?setImmediate:jt.nextTick,hi;X.WritableState=sn;var Gc=Object.create(pi());Gc.inherits=fi();var Cg={deprecate:Uc()},Wc=rs(),kr=nn().Buffer,kg=(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:{}).Uint8Array||function(){};function Tg(e){return kr.from(e)}function Lg(e){return kr.isBuffer(e)||e instanceof kg}var Yc=ds();Gc.inherits(X,Wc);function Rg(){}function sn(e,t){hi=hi||Bt(),e=e||{};var i=t instanceof hi;this.objectMode=!!e.objectMode,i&&(this.objectMode=this.objectMode||!!e.writableObjectMode);var n=e.highWaterMark,r=e.writableHighWaterMark,a=this.objectMode?16:16*1024;n||n===0?this.highWaterMark=n:i&&(r||r===0)?this.highWaterMark=r:this.highWaterMark=a,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var s=e.decodeStrings===!1;this.decodeStrings=!s,this.defaultEncoding=e.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(o){jg(t,o)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new qc(this)}sn.prototype.getBuffer=function(){for(var t=this.bufferedRequest,i=[];t;)i.push(t),t=t.next;return i};(function(){try{Object.defineProperty(sn.prototype,"buffer",{get:Cg.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch{}})();var Cr;typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(Cr=Function.prototype[Symbol.hasInstance],Object.defineProperty(X,Symbol.hasInstance,{value:function(e){return Cr.call(this,e)?!0:this!==X?!1:e&&e._writableState instanceof sn}})):Cr=function(e){return e instanceof this};function X(e){if(hi=hi||Bt(),!Cr.call(X,this)&&!(this instanceof hi))return new X(e);this._writableState=new sn(e,this),this.writable=!0,e&&(typeof e.write=="function"&&(this._write=e.write),typeof e.writev=="function"&&(this._writev=e.writev),typeof e.destroy=="function"&&(this._destroy=e.destroy),typeof e.final=="function"&&(this._final=e.final)),Wc.call(this)}X.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))};function Pg(e,t){var i=new Error("write after end");e.emit("error",i),jt.nextTick(t,i)}function Ig(e,t,i,n){var r=!0,a=!1;return i===null?a=new TypeError("May not write null values to stream"):typeof i!="string"&&i!==void 0&&!t.objectMode&&(a=new TypeError("Invalid non-string/buffer chunk")),a&&(e.emit("error",a),jt.nextTick(n,a),r=!1),r}X.prototype.write=function(e,t,i){var n=this._writableState,r=!1,a=!n.objectMode&&Lg(e);return a&&!kr.isBuffer(e)&&(e=Tg(e)),typeof t=="function"&&(i=t,t=null),a?t="buffer":t||(t=n.defaultEncoding),typeof i!="function"&&(i=Rg),n.ended?Pg(this,i):(a||Ig(this,n,e,i))&&(n.pendingcb++,r=Og(this,n,a,e,t,i)),r};X.prototype.cork=function(){var e=this._writableState;e.corked++};X.prototype.uncork=function(){var e=this._writableState;e.corked&&(e.corked--,!e.writing&&!e.corked&&!e.bufferProcessing&&e.bufferedRequest&&Vc(this,e))};X.prototype.setDefaultEncoding=function(t){if(typeof t=="string"&&(t=t.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((t+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+t);return this._writableState.defaultEncoding=t,this};function Mg(e,t,i){return!e.objectMode&&e.decodeStrings!==!1&&typeof t=="string"&&(t=kr.from(t,i)),t}Object.defineProperty(X.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function Og(e,t,i,n,r,a){if(!i){var s=Mg(t,n,r);n!==s&&(i=!0,r="buffer",n=s)}var o=t.objectMode?1:n.length;t.length+=o;var c=t.length<t.highWaterMark;if(c||(t.needDrain=!0),t.writing||t.corked){var l=t.lastBufferedRequest;t.lastBufferedRequest={chunk:n,encoding:r,isBuf:i,callback:a,next:null},l?l.next=t.lastBufferedRequest:t.bufferedRequest=t.lastBufferedRequest,t.bufferedRequestCount+=1}else us(e,t,!1,o,n,r,a);return c}function us(e,t,i,n,r,a,s){t.writelen=n,t.writecb=s,t.writing=!0,t.sync=!0,i?e._writev(r,t.onwrite):e._write(r,a,t.onwrite),t.sync=!1}function Dg(e,t,i,n,r){--t.pendingcb,i?(jt.nextTick(r,n),jt.nextTick(an,e,t),e._writableState.errorEmitted=!0,e.emit("error",n)):(r(n),e._writableState.errorEmitted=!0,e.emit("error",n),an(e,t))}function zg(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}function jg(e,t){var i=e._writableState,n=i.sync,r=i.writecb;if(zg(i),t)Dg(e,i,n,t,r);else{var a=Kc(i);!a&&!i.corked&&!i.bufferProcessing&&i.bufferedRequest&&Vc(e,i),n?Ag($c,e,i,a,r):$c(e,i,a,r)}}function $c(e,t,i,n){i||Bg(e,t),t.pendingcb--,n(),an(e,t)}function Bg(e,t){t.length===0&&t.needDrain&&(t.needDrain=!1,e.emit("drain"))}function Vc(e,t){t.bufferProcessing=!0;var i=t.bufferedRequest;if(e._writev&&i&&i.next){var n=t.bufferedRequestCount,r=new Array(n),a=t.corkedRequestsFree;a.entry=i;for(var s=0,o=!0;i;)r[s]=i,i.isBuf||(o=!1),i=i.next,s+=1;r.allBuffers=o,us(e,t,!0,t.length,r,"",a.finish),t.pendingcb++,t.lastBufferedRequest=null,a.next?(t.corkedRequestsFree=a.next,a.next=null):t.corkedRequestsFree=new qc(t),t.bufferedRequestCount=0}else{for(;i;){var c=i.chunk,l=i.encoding,d=i.callback,u=t.objectMode?1:c.length;if(us(e,t,!1,u,c,l,d),i=i.next,t.bufferedRequestCount--,t.writing)break}i===null&&(t.lastBufferedRequest=null)}t.bufferedRequest=i,t.bufferProcessing=!1}X.prototype._write=function(e,t,i){i(new Error("_write() is not implemented"))};X.prototype._writev=null;X.prototype.end=function(e,t,i){var n=this._writableState;typeof e=="function"?(i=e,e=null,t=null):typeof t=="function"&&(i=t,t=null),e!=null&&this.write(e,t),n.corked&&(n.corked=1,this.uncork()),n.ending||Hg(this,n,i)};function Kc(e){return e.ending&&e.length===0&&e.bufferedRequest===null&&!e.finished&&!e.writing}function Fg(e,t){e._final(function(i){t.pendingcb--,i&&e.emit("error",i),t.prefinished=!0,e.emit("prefinish"),an(e,t)})}function Ng(e,t){!t.prefinished&&!t.finalCalled&&(typeof e._final=="function"?(t.pendingcb++,t.finalCalled=!0,jt.nextTick(Fg,e,t)):(t.prefinished=!0,e.emit("prefinish")))}function an(e,t){var i=Kc(t);return i&&(Ng(e,t),t.pendingcb===0&&(t.finished=!0,e.emit("finish"))),i}function Hg(e,t,i){t.ending=!0,an(e,t),i&&(t.finished?jt.nextTick(i):e.once("finish",i)),t.ended=!0,e.writable=!1}function Ug(e,t,i){var n=e.entry;for(e.entry=null;n;){var r=n.callback;t.pendingcb--,r(i),n=n.next}t.corkedRequestsFree.next=e}Object.defineProperty(X.prototype,"destroyed",{get:function(){return this._writableState===void 0?!1:this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}});X.prototype.destroy=Yc.destroy;X.prototype._undestroy=Yc.undestroy;X.prototype._destroy=function(e,t){this.end(),t(e)}});var Bt=R((Q0,ed)=>{"use strict";var Zc=tn(),$g=Object.keys||function(e){var t=[];for(var i in e)t.push(i);return t};ed.exports=it;var Jc=Object.create(pi());Jc.inherits=fi();var Qc=gs(),hs=ps();Jc.inherits(it,Qc);for(fs=$g(hs.prototype),Tr=0;Tr<fs.length;Tr++)Lr=fs[Tr],it.prototype[Lr]||(it.prototype[Lr]=hs.prototype[Lr]);var fs,Lr,Tr;function it(e){if(!(this instanceof it))return new it(e);Qc.call(this,e),hs.call(this,e),e&&e.readable===!1&&(this.readable=!1),e&&e.writable===!1&&(this.writable=!1),this.allowHalfOpen=!0,e&&e.allowHalfOpen===!1&&(this.allowHalfOpen=!1),this.once("end",qg)}Object.defineProperty(it.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function qg(){this.allowHalfOpen||this._writableState.ended||Zc.nextTick(Gg,this)}function Gg(e){e.end()}Object.defineProperty(it.prototype,"destroyed",{get:function(){return this._readableState===void 0||this._writableState===void 0?!1:this._readableState.destroyed&&this._writableState.destroyed},set:function(e){this._readableState===void 0||this._writableState===void 0||(this._readableState.destroyed=e,this._writableState.destroyed=e)}});it.prototype._destroy=function(e,t){this.push(null),this.end(),Zc.nextTick(t,e)}});var vs=R(id=>{"use strict";var bs=nn().Buffer,td=bs.isEncoding||function(e){switch(e=""+e,e&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function Wg(e){if(!e)return"utf8";for(var t;;)switch(e){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return e;default:if(t)return;e=(""+e).toLowerCase(),t=!0}}function Yg(e){var t=Wg(e);if(typeof t!="string"&&(bs.isEncoding===td||!td(e)))throw new Error("Unknown encoding: "+e);return t||e}id.StringDecoder=on;function on(e){this.encoding=Yg(e);var t;switch(this.encoding){case"utf16le":this.text=Qg,this.end=em,t=4;break;case"utf8":this.fillLast=Xg,t=4;break;case"base64":this.text=tm,this.end=im,t=3;break;default:this.write=nm,this.end=rm;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=bs.allocUnsafe(t)}on.prototype.write=function(e){if(e.length===0)return"";var t,i;if(this.lastNeed){if(t=this.fillLast(e),t===void 0)return"";i=this.lastNeed,this.lastNeed=0}else i=0;return i<e.length?t?t+this.text(e,i):this.text(e,i):t||""};on.prototype.end=Jg;on.prototype.text=Zg;on.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length};function ms(e){return e<=127?0:e>>5===6?2:e>>4===14?3:e>>3===30?4:e>>6===2?-1:-2}function Vg(e,t,i){var n=t.length-1;if(n<i)return 0;var r=ms(t[n]);return r>=0?(r>0&&(e.lastNeed=r-1),r):--n<i||r===-2?0:(r=ms(t[n]),r>=0?(r>0&&(e.lastNeed=r-2),r):--n<i||r===-2?0:(r=ms(t[n]),r>=0?(r>0&&(r===2?r=0:e.lastNeed=r-3),r):0))}function Kg(e,t,i){if((t[0]&192)!==128)return e.lastNeed=0,"\uFFFD";if(e.lastNeed>1&&t.length>1){if((t[1]&192)!==128)return e.lastNeed=1,"\uFFFD";if(e.lastNeed>2&&t.length>2&&(t[2]&192)!==128)return e.lastNeed=2,"\uFFFD"}}function Xg(e){var t=this.lastTotal-this.lastNeed,i=Kg(this,e,t);if(i!==void 0)return i;if(this.lastNeed<=e.length)return e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,t,0,e.length),this.lastNeed-=e.length}function Zg(e,t){var i=Vg(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=i;var n=e.length-(i-this.lastNeed);return e.copy(this.lastChar,0,n),e.toString("utf8",t,n)}function Jg(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+"\uFFFD":t}function Qg(e,t){if((e.length-t)%2===0){var i=e.toString("utf16le",t);if(i){var n=i.charCodeAt(i.length-1);if(n>=55296&&n<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],i.slice(0,-1)}return i}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function em(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var i=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,i)}return t}function tm(e,t){var i=(e.length-t)%3;return i===0?e.toString("base64",t):(this.lastNeed=3-i,this.lastTotal=3,i===1?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-i))}function im(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function nm(e){return e.toString(this.encoding)}function rm(e){return e&&e.length?this.write(e):""}});var gs=R((iw,hd)=>{"use strict";var mi=tn();hd.exports=$;var am=Mc(),ln;$.ReadableState=cd;var tw=Fe("events").EventEmitter,sd=function(e,t){return e.listeners(t).length},Es=rs(),cn=nn().Buffer,sm=(typeof global!="undefined"?global:typeof window!="undefined"?window:typeof self!="undefined"?self:{}).Uint8Array||function(){};function om(e){return cn.from(e)}function lm(e){return cn.isBuffer(e)||e instanceof sm}var od=Object.create(pi());od.inherits=fi();var ys=Fe("util"),N=void 0;ys&&ys.debuglog?N=ys.debuglog("stream"):N=function(){};var cm=Fc(),ld=ds(),gi;od.inherits($,Es);var xs=["error","close","destroy","pause","resume"];function dm(e,t,i){if(typeof e.prependListener=="function")return e.prependListener(t,i);!e._events||!e._events[t]?e.on(t,i):am(e._events[t])?e._events[t].unshift(i):e._events[t]=[i,e._events[t]]}function cd(e,t){ln=ln||Bt(),e=e||{};var i=t instanceof ln;this.objectMode=!!e.objectMode,i&&(this.objectMode=this.objectMode||!!e.readableObjectMode);var n=e.highWaterMark,r=e.readableHighWaterMark,a=this.objectMode?16:16*1024;n||n===0?this.highWaterMark=n:i&&(r||r===0)?this.highWaterMark=r:this.highWaterMark=a,this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new cm,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.destroyed=!1,this.defaultEncoding=e.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(gi||(gi=vs().StringDecoder),this.decoder=new gi(e.encoding),this.encoding=e.encoding)}function $(e){if(ln=ln||Bt(),!(this instanceof $))return new $(e);this._readableState=new cd(e,this),this.readable=!0,e&&(typeof e.read=="function"&&(this._read=e.read),typeof e.destroy=="function"&&(this._destroy=e.destroy)),Es.call(this)}Object.defineProperty($.prototype,"destroyed",{get:function(){return this._readableState===void 0?!1:this._readableState.destroyed},set:function(e){this._readableState&&(this._readableState.destroyed=e)}});$.prototype.destroy=ld.destroy;$.prototype._undestroy=ld.undestroy;$.prototype._destroy=function(e,t){this.push(null),t(e)};$.prototype.push=function(e,t){var i=this._readableState,n;return i.objectMode?n=!0:typeof e=="string"&&(t=t||i.defaultEncoding,t!==i.encoding&&(e=cn.from(e,t),t=""),n=!0),dd(this,e,t,!1,n)};$.prototype.unshift=function(e){return dd(this,e,null,!0,!1)};function dd(e,t,i,n,r){var a=e._readableState;if(t===null)a.reading=!1,hm(e,a);else{var s;r||(s=um(a,t)),s?e.emit("error",s):a.objectMode||t&&t.length>0?(typeof t!="string"&&!a.objectMode&&Object.getPrototypeOf(t)!==cn.prototype&&(t=om(t)),n?a.endEmitted?e.emit("error",new Error("stream.unshift() after end event")):ws(e,a,t,!0):a.ended?e.emit("error",new Error("stream.push() after EOF")):(a.reading=!1,a.decoder&&!i?(t=a.decoder.write(t),a.objectMode||t.length!==0?ws(e,a,t,!1):ud(e,a)):ws(e,a,t,!1))):n||(a.reading=!1)}return pm(a)}function ws(e,t,i,n){t.flowing&&t.length===0&&!t.sync?(e.emit("data",i),e.read(0)):(t.length+=t.objectMode?1:i.length,n?t.buffer.unshift(i):t.buffer.push(i),t.needReadable&&Rr(e)),ud(e,t)}function um(e,t){var i;return!lm(t)&&typeof t!="string"&&t!==void 0&&!e.objectMode&&(i=new TypeError("Invalid non-string/buffer chunk")),i}function pm(e){return!e.ended&&(e.needReadable||e.length<e.highWaterMark||e.length===0)}$.prototype.isPaused=function(){return this._readableState.flowing===!1};$.prototype.setEncoding=function(e){return gi||(gi=vs().StringDecoder),this._readableState.decoder=new gi(e),this._readableState.encoding=e,this};var nd=8388608;function fm(e){return e>=nd?e=nd:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}function rd(e,t){return e<=0||t.length===0&&t.ended?0:t.objectMode?1:e!==e?t.flowing&&t.length?t.buffer.head.data.length:t.length:(e>t.highWaterMark&&(t.highWaterMark=fm(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}$.prototype.read=function(e){N("read",e),e=parseInt(e,10);var t=this._readableState,i=e;if(e!==0&&(t.emittedReadable=!1),e===0&&t.needReadable&&(t.length>=t.highWaterMark||t.ended))return N("read: emitReadable",t.length,t.ended),t.length===0&&t.ended?_s(this):Rr(this),null;if(e=rd(e,t),e===0&&t.ended)return t.length===0&&_s(this),null;var n=t.needReadable;N("need readable",n),(t.length===0||t.length-e<t.highWaterMark)&&(n=!0,N("length less than watermark",n)),t.ended||t.reading?(n=!1,N("reading or ended",n)):n&&(N("do read"),t.reading=!0,t.sync=!0,t.length===0&&(t.needReadable=!0),this._read(t.highWaterMark),t.sync=!1,t.reading||(e=rd(i,t)));var r;return e>0?r=pd(e,t):r=null,r===null?(t.needReadable=!0,e=0):t.length-=e,t.length===0&&(t.ended||(t.needReadable=!0),i!==e&&t.ended&&_s(this)),r!==null&&this.emit("data",r),r};function hm(e,t){if(!t.ended){if(t.decoder){var i=t.decoder.end();i&&i.length&&(t.buffer.push(i),t.length+=t.objectMode?1:i.length)}t.ended=!0,Rr(e)}}function Rr(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(N("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?mi.nextTick(ad,e):ad(e))}function ad(e){N("emit readable"),e.emit("readable"),Ss(e)}function ud(e,t){t.readingMore||(t.readingMore=!0,mi.nextTick(gm,e,t))}function gm(e,t){for(var i=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length<t.highWaterMark&&(N("maybeReadMore read 0"),e.read(0),i!==t.length);)i=t.length;t.readingMore=!1}$.prototype._read=function(e){this.emit("error",new Error("_read() is not implemented"))};$.prototype.pipe=function(e,t){var i=this,n=this._readableState;switch(n.pipesCount){case 0:n.pipes=e;break;case 1:n.pipes=[n.pipes,e];break;default:n.pipes.push(e);break}n.pipesCount+=1,N("pipe count=%d opts=%j",n.pipesCount,t);var r=(!t||t.end!==!1)&&e!==process.stdout&&e!==process.stderr,a=r?o:g;n.endEmitted?mi.nextTick(a):i.once("end",a),e.on("unpipe",s);function s(b,v){N("onunpipe"),b===i&&v&&v.hasUnpiped===!1&&(v.hasUnpiped=!0,d())}function o(){N("onend"),e.end()}var c=mm(i);e.on("drain",c);var l=!1;function d(){N("cleanup"),e.removeListener("close",m),e.removeListener("finish",h),e.removeListener("drain",c),e.removeListener("error",f),e.removeListener("unpipe",s),i.removeListener("end",o),i.removeListener("end",g),i.removeListener("data",p),l=!0,n.awaitDrain&&(!e._writableState||e._writableState.needDrain)&&c()}var u=!1;i.on("data",p);function p(b){N("ondata"),u=!1;var v=e.write(b);v===!1&&!u&&((n.pipesCount===1&&n.pipes===e||n.pipesCount>1&&fd(n.pipes,e)!==-1)&&!l&&(N("false write response, pause",n.awaitDrain),n.awaitDrain++,u=!0),i.pause())}function f(b){N("onerror",b),g(),e.removeListener("error",f),sd(e,"error")===0&&e.emit("error",b)}dm(e,"error",f);function m(){e.removeListener("finish",h),g()}e.once("close",m);function h(){N("onfinish"),e.removeListener("close",m),g()}e.once("finish",h);function g(){N("unpipe"),i.unpipe(e)}return e.emit("pipe",i),n.flowing||(N("pipe resume"),i.resume()),e};function mm(e){return function(){var t=e._readableState;N("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,t.awaitDrain===0&&sd(e,"data")&&(t.flowing=!0,Ss(e))}}$.prototype.unpipe=function(e){var t=this._readableState,i={hasUnpiped:!1};if(t.pipesCount===0)return this;if(t.pipesCount===1)return e&&e!==t.pipes?this:(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,i),this);if(!e){var n=t.pipes,r=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var a=0;a<r;a++)n[a].emit("unpipe",this,{hasUnpiped:!1});return this}var s=fd(t.pipes,e);return s===-1?this:(t.pipes.splice(s,1),t.pipesCount-=1,t.pipesCount===1&&(t.pipes=t.pipes[0]),e.emit("unpipe",this,i),this)};$.prototype.on=function(e,t){var i=Es.prototype.on.call(this,e,t);if(e==="data")this._readableState.flowing!==!1&&this.resume();else if(e==="readable"){var n=this._readableState;!n.endEmitted&&!n.readableListening&&(n.readableListening=n.needReadable=!0,n.emittedReadable=!1,n.reading?n.length&&Rr(this):mi.nextTick(bm,this))}return i};$.prototype.addListener=$.prototype.on;function bm(e){N("readable nexttick read 0"),e.read(0)}$.prototype.resume=function(){var e=this._readableState;return e.flowing||(N("resume"),e.flowing=!0,vm(this,e)),this};function vm(e,t){t.resumeScheduled||(t.resumeScheduled=!0,mi.nextTick(ym,e,t))}function ym(e,t){t.reading||(N("resume read 0"),e.read(0)),t.resumeScheduled=!1,t.awaitDrain=0,e.emit("resume"),Ss(e),t.flowing&&!t.reading&&e.read(0)}$.prototype.pause=function(){return N("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(N("pause"),this._readableState.flowing=!1,this.emit("pause")),this};function Ss(e){var t=e._readableState;for(N("flow",t.flowing);t.flowing&&e.read()!==null;);}$.prototype.wrap=function(e){var t=this,i=this._readableState,n=!1;e.on("end",function(){if(N("wrapped end"),i.decoder&&!i.ended){var s=i.decoder.end();s&&s.length&&t.push(s)}t.push(null)}),e.on("data",function(s){if(N("wrapped data"),i.decoder&&(s=i.decoder.write(s)),!(i.objectMode&&s==null)&&!(!i.objectMode&&(!s||!s.length))){var o=t.push(s);o||(n=!0,e.pause())}});for(var r in e)this[r]===void 0&&typeof e[r]=="function"&&(this[r]=(function(s){return function(){return e[s].apply(e,arguments)}})(r));for(var a=0;a<xs.length;a++)e.on(xs[a],this.emit.bind(this,xs[a]));return this._read=function(s){N("wrapped _read",s),n&&(n=!1,e.resume())},this};Object.defineProperty($.prototype,"readableHighWaterMark",{enumerable:!1,get:function(){return this._readableState.highWaterMark}});$._fromList=pd;function pd(e,t){if(t.length===0)return null;var i;return t.objectMode?i=t.buffer.shift():!e||e>=t.length?(t.decoder?i=t.buffer.join(""):t.buffer.length===1?i=t.buffer.head.data:i=t.buffer.concat(t.length),t.buffer.clear()):i=xm(e,t.buffer,t.decoder),i}function xm(e,t,i){var n;return e<t.head.data.length?(n=t.head.data.slice(0,e),t.head.data=t.head.data.slice(e)):e===t.head.data.length?n=t.shift():n=i?wm(e,t):_m(e,t),n}function wm(e,t){var i=t.head,n=1,r=i.data;for(e-=r.length;i=i.next;){var a=i.data,s=e>a.length?a.length:e;if(s===a.length?r+=a:r+=a.slice(0,e),e-=s,e===0){s===a.length?(++n,i.next?t.head=i.next:t.head=t.tail=null):(t.head=i,i.data=a.slice(s));break}++n}return t.length-=n,r}function _m(e,t){var i=cn.allocUnsafe(e),n=t.head,r=1;for(n.data.copy(i),e-=n.data.length;n=n.next;){var a=n.data,s=e>a.length?a.length:e;if(a.copy(i,i.length-e,0,s),e-=s,e===0){s===a.length?(++r,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=a.slice(s));break}++r}return t.length-=r,i}function _s(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,mi.nextTick(Em,t,e))}function Em(e,t){!e.endEmitted&&e.length===0&&(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function fd(e,t){for(var i=0,n=e.length;i<n;i++)if(e[i]===t)return i;return-1}});var As=R((nw,bd)=>{"use strict";bd.exports=nt;var Pr=Bt(),md=Object.create(pi());md.inherits=fi();md.inherits(nt,Pr);function Sm(e,t){var i=this._transformState;i.transforming=!1;var n=i.writecb;if(!n)return this.emit("error",new Error("write callback called multiple times"));i.writechunk=null,i.writecb=null,t!=null&&this.push(t),n(e);var r=this._readableState;r.reading=!1,(r.needReadable||r.length<r.highWaterMark)&&this._read(r.highWaterMark)}function nt(e){if(!(this instanceof nt))return new nt(e);Pr.call(this,e),this._transformState={afterTransform:Sm.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable=!0,this._readableState.sync=!1,e&&(typeof e.transform=="function"&&(this._transform=e.transform),typeof e.flush=="function"&&(this._flush=e.flush)),this.on("prefinish",Am)}function Am(){var e=this;typeof this._flush=="function"?this._flush(function(t,i){gd(e,t,i)}):gd(this,null,null)}nt.prototype.push=function(e,t){return this._transformState.needTransform=!1,Pr.prototype.push.call(this,e,t)};nt.prototype._transform=function(e,t,i){throw new Error("_transform() is not implemented")};nt.prototype._write=function(e,t,i){var n=this._transformState;if(n.writecb=i,n.writechunk=e,n.writeencoding=t,!n.transforming){var r=this._readableState;(n.needTransform||r.needReadable||r.length<r.highWaterMark)&&this._read(r.highWaterMark)}};nt.prototype._read=function(e){var t=this._transformState;t.writechunk!==null&&t.writecb&&!t.transforming?(t.transforming=!0,this._transform(t.writechunk,t.writeencoding,t.afterTransform)):t.needTransform=!0};nt.prototype._destroy=function(e,t){var i=this;Pr.prototype._destroy.call(this,e,function(n){t(n),i.emit("close")})};function gd(e,t,i){if(t)return e.emit("error",t);if(i!=null&&e.push(i),e._writableState.length)throw new Error("Calling transform done when ws.length != 0");if(e._transformState.transforming)throw new Error("Calling transform done when still transforming");return e.push(null)}});var wd=R((rw,xd)=>{"use strict";xd.exports=dn;var vd=As(),yd=Object.create(pi());yd.inherits=fi();yd.inherits(dn,vd);function dn(e){if(!(this instanceof dn))return new dn(e);vd.call(this,e)}dn.prototype._transform=function(e,t,i){i(null,e)}});var Cs=R((ne,Ir)=>{"use strict";var He=Fe("stream");process.env.READABLE_STREAM==="disable"&&He?(Ir.exports=He,ne=Ir.exports=He.Readable,ne.Readable=He.Readable,ne.Writable=He.Writable,ne.Duplex=He.Duplex,ne.Transform=He.Transform,ne.PassThrough=He.PassThrough,ne.Stream=He):(ne=Ir.exports=gs(),ne.Stream=He||ne,ne.Readable=ne,ne.Writable=ps(),ne.Duplex=Bt(),ne.Transform=As(),ne.PassThrough=wd())});var rt=R(ge=>{"use strict";ge.base64=!0;ge.array=!0;ge.string=!0;ge.arraybuffer=typeof ArrayBuffer!="undefined"&&typeof Uint8Array!="undefined";ge.nodebuffer=typeof Buffer!="undefined";ge.uint8array=typeof Uint8Array!="undefined";if(typeof ArrayBuffer=="undefined")ge.blob=!1;else{ks=new ArrayBuffer(0);try{ge.blob=new Blob([ks],{type:"application/zip"}).size===0}catch{try{_d=self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder,Ts=new _d,Ts.append(ks),ge.blob=Ts.getBlob("application/zip").size===0}catch{ge.blob=!1}}}var ks,_d,Ts;try{ge.nodestream=!!Cs().Readable}catch{ge.nodestream=!1}});var Rs=R(Ls=>{"use strict";var Cm=G(),km=rt(),Ue="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";Ls.encode=function(e){for(var t=[],i,n,r,a,s,o,c,l=0,d=e.length,u=d,p=Cm.getTypeOf(e)!=="string";l<e.length;)u=d-l,p?(i=e[l++],n=l<d?e[l++]:0,r=l<d?e[l++]:0):(i=e.charCodeAt(l++),n=l<d?e.charCodeAt(l++):0,r=l<d?e.charCodeAt(l++):0),a=i>>2,s=(i&3)<<4|n>>4,o=u>1?(n&15)<<2|r>>6:64,c=u>2?r&63:64,t.push(Ue.charAt(a)+Ue.charAt(s)+Ue.charAt(o)+Ue.charAt(c));return t.join("")};Ls.decode=function(e){var t,i,n,r,a,s,o,c=0,l=0,d="data:";if(e.substr(0,d.length)===d)throw new Error("Invalid base64 input, it looks like a data url.");e=e.replace(/[^A-Za-z0-9+/=]/g,"");var u=e.length*3/4;if(e.charAt(e.length-1)===Ue.charAt(64)&&u--,e.charAt(e.length-2)===Ue.charAt(64)&&u--,u%1!==0)throw new Error("Invalid base64 input, bad content length.");var p;for(km.uint8array?p=new Uint8Array(u|0):p=new Array(u|0);c<e.length;)r=Ue.indexOf(e.charAt(c++)),a=Ue.indexOf(e.charAt(c++)),s=Ue.indexOf(e.charAt(c++)),o=Ue.indexOf(e.charAt(c++)),t=r<<2|a>>4,i=(a&15)<<4|s>>2,n=(s&3)<<6|o,p[l++]=t,s!==64&&(p[l++]=i),o!==64&&(p[l++]=n);return p}});var un=R((ow,Ed)=>{"use strict";Ed.exports={isNode:typeof Buffer!="undefined",newBufferFrom:function(e,t){if(Buffer.from&&Buffer.from!==Uint8Array.from)return Buffer.from(e,t);if(typeof e=="number")throw new Error('The "data" argument must not be a number');return new Buffer(e,t)},allocBuffer:function(e){if(Buffer.alloc)return Buffer.alloc(e);var t=new Buffer(e);return t.fill(0),t},isBuffer:function(e){return Buffer.isBuffer(e)},isStream:function(e){return e&&typeof e.on=="function"&&typeof e.pause=="function"&&typeof e.resume=="function"}}});var kd=R((lw,Cd)=>{"use strict";var Sd=global.MutationObserver||global.WebKitMutationObserver,bi;process.browser?Sd?(Ps=0,Ad=new Sd(pn),Is=global.document.createTextNode(""),Ad.observe(Is,{characterData:!0}),bi=function(){Is.data=Ps=++Ps%2}):!global.setImmediate&&typeof global.MessageChannel!="undefined"?(Ms=new global.MessageChannel,Ms.port1.onmessage=pn,bi=function(){Ms.port2.postMessage(0)}):"document"in global&&"onreadystatechange"in global.document.createElement("script")?bi=function(){var e=global.document.createElement("script");e.onreadystatechange=function(){pn(),e.onreadystatechange=null,e.parentNode.removeChild(e),e=null},global.document.documentElement.appendChild(e)}:bi=function(){setTimeout(pn,0)}:bi=function(){process.nextTick(pn)};var Ps,Ad,Is,Ms,Os,fn=[];function pn(){Os=!0;for(var e,t,i=fn.length;i;){for(t=fn,fn=[],e=-1;++e<i;)t[e]();i=fn.length}Os=!1}Cd.exports=Tm;function Tm(e){fn.push(e)===1&&!Os&&bi()}});var Od=R((cw,Md)=>{"use strict";var Td=kd();function vi(){}var se={},Ld=["REJECTED"],Ds=["FULFILLED"],Rd=["PENDING"];process.browser||(hn=["UNHANDLED"]);var hn;Md.exports=yt;function yt(e){if(typeof e!="function")throw new TypeError("resolver must be a function");this.state=Rd,this.queue=[],this.outcome=void 0,process.browser||(this.handled=hn),e!==vi&&Pd(this,e)}yt.prototype.finally=function(e){if(typeof e!="function")return this;var t=this.constructor;return this.then(i,n);function i(r){function a(){return r}return t.resolve(e()).then(a)}function n(r){function a(){throw r}return t.resolve(e()).then(a)}};yt.prototype.catch=function(e){return this.then(null,e)};yt.prototype.then=function(e,t){if(typeof e!="function"&&this.state===Ds||typeof t!="function"&&this.state===Ld)return this;var i=new this.constructor(vi);if(process.browser||this.handled===hn&&(this.handled=null),this.state!==Rd){var n=this.state===Ds?e:t;zs(i,n,this.outcome)}else this.queue.push(new gn(i,e,t));return i};function gn(e,t,i){this.promise=e,typeof t=="function"&&(this.onFulfilled=t,this.callFulfilled=this.otherCallFulfilled),typeof i=="function"&&(this.onRejected=i,this.callRejected=this.otherCallRejected)}gn.prototype.callFulfilled=function(e){se.resolve(this.promise,e)};gn.prototype.otherCallFulfilled=function(e){zs(this.promise,this.onFulfilled,e)};gn.prototype.callRejected=function(e){se.reject(this.promise,e)};gn.prototype.otherCallRejected=function(e){zs(this.promise,this.onRejected,e)};function zs(e,t,i){Td(function(){var n;try{n=t(i)}catch(r){return se.reject(e,r)}n===e?se.reject(e,new TypeError("Cannot resolve promise with itself")):se.resolve(e,n)})}se.resolve=function(e,t){var i=Id(Lm,t);if(i.status==="error")return se.reject(e,i.value);var n=i.value;if(n)Pd(e,n);else{e.state=Ds,e.outcome=t;for(var r=-1,a=e.queue.length;++r<a;)e.queue[r].callFulfilled(t)}return e};se.reject=function(e,t){e.state=Ld,e.outcome=t,process.browser||e.handled===hn&&Td(function(){e.handled===hn&&process.emit("unhandledRejection",t,e)});for(var i=-1,n=e.queue.length;++i<n;)e.queue[i].callRejected(t);return e};function Lm(e){var t=e&&e.then;if(e&&(typeof e=="object"||typeof e=="function")&&typeof t=="function")return function(){t.apply(e,arguments)}}function Pd(e,t){var i=!1;function n(o){i||(i=!0,se.reject(e,o))}function r(o){i||(i=!0,se.resolve(e,o))}function a(){t(r,n)}var s=Id(a);s.status==="error"&&n(s.value)}function Id(e,t){var i={};try{i.value=e(t),i.status="success"}catch(n){i.status="error",i.value=n}return i}yt.resolve=Rm;function Rm(e){return e instanceof this?e:se.resolve(new this(vi),e)}yt.reject=Pm;function Pm(e){var t=new this(vi);return se.reject(t,e)}yt.all=Im;function Im(e){var t=this;if(Object.prototype.toString.call(e)!=="[object Array]")return this.reject(new TypeError("must be an array"));var i=e.length,n=!1;if(!i)return this.resolve([]);for(var r=new Array(i),a=0,s=-1,o=new this(vi);++s<i;)c(e[s],s);return o;function c(l,d){t.resolve(l).then(u,function(p){n||(n=!0,se.reject(o,p))});function u(p){r[d]=p,++a===i&&!n&&(n=!0,se.resolve(o,r))}}}yt.race=Mm;function Mm(e){var t=this;if(Object.prototype.toString.call(e)!=="[object Array]")return this.reject(new TypeError("must be an array"));var i=e.length,n=!1;if(!i)return this.resolve([]);for(var r=-1,a=new this(vi);++r<i;)s(e[r]);return a;function s(o){t.resolve(o).then(function(c){n||(n=!0,se.resolve(a,c))},function(c){n||(n=!0,se.reject(a,c))})}}});var yi=R((dw,Dd)=>{"use strict";var js=null;typeof Promise!="undefined"?js=Promise:js=Od();Dd.exports={Promise:js}});var jd=R(zd=>{"use strict";(function(e,t){"use strict";if(e.setImmediate)return;var i=1,n={},r=!1,a=e.document,s;function o(v){typeof v!="function"&&(v=new Function(""+v));for(var y=new Array(arguments.length-1),x=0;x<y.length;x++)y[x]=arguments[x+1];var w={callback:v,args:y};return n[i]=w,s(i),i++}function c(v){delete n[v]}function l(v){var y=v.callback,x=v.args;switch(x.length){case 0:y();break;case 1:y(x[0]);break;case 2:y(x[0],x[1]);break;case 3:y(x[0],x[1],x[2]);break;default:y.apply(t,x);break}}function d(v){if(r)setTimeout(d,0,v);else{var y=n[v];if(y){r=!0;try{l(y)}finally{c(v),r=!1}}}}function u(){s=function(v){process.nextTick(function(){d(v)})}}function p(){if(e.postMessage&&!e.importScripts){var v=!0,y=e.onmessage;return e.onmessage=function(){v=!1},e.postMessage("","*"),e.onmessage=y,v}}function f(){var v="setImmediate$"+Math.random()+"$",y=function(x){x.source===e&&typeof x.data=="string"&&x.data.indexOf(v)===0&&d(+x.data.slice(v.length))};e.addEventListener?e.addEventListener("message",y,!1):e.attachEvent("onmessage",y),s=function(x){e.postMessage(v+x,"*")}}function m(){var v=new MessageChannel;v.port1.onmessage=function(y){var x=y.data;d(x)},s=function(y){v.port2.postMessage(y)}}function h(){var v=a.documentElement;s=function(y){var x=a.createElement("script");x.onreadystatechange=function(){d(y),x.onreadystatechange=null,v.removeChild(x),x=null},v.appendChild(x)}}function g(){s=function(v){setTimeout(d,0,v)}}var b=Object.getPrototypeOf&&Object.getPrototypeOf(e);b=b&&b.setTimeout?b:e,{}.toString.call(e.process)==="[object process]"?u():p()?f():e.MessageChannel?m():a&&"onreadystatechange"in a.createElement("script")?h():g(),b.setImmediate=o,b.clearImmediate=c})(typeof self=="undefined"?typeof global=="undefined"?zd:global:self)});var G=R(Z=>{"use strict";var xt=rt(),Om=Rs(),xi=un(),Bs=yi();jd();function Dm(e){var t=null;return xt.uint8array?t=new Uint8Array(e.length):t=new Array(e.length),Or(e,t)}Z.newBlob=function(e,t){Z.checkSupport("blob");try{return new Blob([e],{type:t})}catch{try{var i=self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder,n=new i;return n.append(e),n.getBlob(t)}catch{throw new Error("Bug : can't construct the Blob.")}}};function mn(e){return e}function Or(e,t){for(var i=0;i<e.length;++i)t[i]=e.charCodeAt(i)&255;return t}var Mr={stringifyByChunk:function(e,t,i){var n=[],r=0,a=e.length;if(a<=i)return String.fromCharCode.apply(null,e);for(;r<a;)t==="array"||t==="nodebuffer"?n.push(String.fromCharCode.apply(null,e.slice(r,Math.min(r+i,a)))):n.push(String.fromCharCode.apply(null,e.subarray(r,Math.min(r+i,a)))),r+=i;return n.join("")},stringifyByChar:function(e){for(var t="",i=0;i<e.length;i++)t+=String.fromCharCode(e[i]);return t},applyCanBeUsed:{uint8array:(function(){try{return xt.uint8array&&String.fromCharCode.apply(null,new Uint8Array(1)).length===1}catch{return!1}})(),nodebuffer:(function(){try{return xt.nodebuffer&&String.fromCharCode.apply(null,xi.allocBuffer(1)).length===1}catch{return!1}})()}};function bn(e){var t=65536,i=Z.getTypeOf(e),n=!0;if(i==="uint8array"?n=Mr.applyCanBeUsed.uint8array:i==="nodebuffer"&&(n=Mr.applyCanBeUsed.nodebuffer),n)for(;t>1;)try{return Mr.stringifyByChunk(e,i,t)}catch{t=Math.floor(t/2)}return Mr.stringifyByChar(e)}Z.applyFromCharCode=bn;function Dr(e,t){for(var i=0;i<e.length;i++)t[i]=e[i];return t}var wt={};wt.string={string:mn,array:function(e){return Or(e,new Array(e.length))},arraybuffer:function(e){return wt.string.uint8array(e).buffer},uint8array:function(e){return Or(e,new Uint8Array(e.length))},nodebuffer:function(e){return Or(e,xi.allocBuffer(e.length))}};wt.array={string:bn,array:mn,arraybuffer:function(e){return new Uint8Array(e).buffer},uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return xi.newBufferFrom(e)}};wt.arraybuffer={string:function(e){return bn(new Uint8Array(e))},array:function(e){return Dr(new Uint8Array(e),new Array(e.byteLength))},arraybuffer:mn,uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return xi.newBufferFrom(new Uint8Array(e))}};wt.uint8array={string:bn,array:function(e){return Dr(e,new Array(e.length))},arraybuffer:function(e){return e.buffer},uint8array:mn,nodebuffer:function(e){return xi.newBufferFrom(e)}};wt.nodebuffer={string:bn,array:function(e){return Dr(e,new Array(e.length))},arraybuffer:function(e){return wt.nodebuffer.uint8array(e).buffer},uint8array:function(e){return Dr(e,new Uint8Array(e.length))},nodebuffer:mn};Z.transformTo=function(e,t){if(t||(t=""),!e)return t;Z.checkSupport(e);var i=Z.getTypeOf(t),n=wt[i][e](t);return n};Z.resolve=function(e){for(var t=e.split("/"),i=[],n=0;n<t.length;n++){var r=t[n];r==="."||r===""&&n!==0&&n!==t.length-1||(r===".."?i.pop():i.push(r))}return i.join("/")};Z.getTypeOf=function(e){if(typeof e=="string")return"string";if(Object.prototype.toString.call(e)==="[object Array]")return"array";if(xt.nodebuffer&&xi.isBuffer(e))return"nodebuffer";if(xt.uint8array&&e instanceof Uint8Array)return"uint8array";if(xt.arraybuffer&&e instanceof ArrayBuffer)return"arraybuffer"};Z.checkSupport=function(e){var t=xt[e.toLowerCase()];if(!t)throw new Error(e+" is not supported by this platform")};Z.MAX_VALUE_16BITS=65535;Z.MAX_VALUE_32BITS=-1;Z.pretty=function(e){var t="",i,n;for(n=0;n<(e||"").length;n++)i=e.charCodeAt(n),t+="\\x"+(i<16?"0":"")+i.toString(16).toUpperCase();return t};Z.delay=function(e,t,i){setImmediate(function(){e.apply(i||null,t||[])})};Z.inherits=function(e,t){var i=function(){};i.prototype=t.prototype,e.prototype=new i};Z.extend=function(){var e={},t,i;for(t=0;t<arguments.length;t++)for(i in arguments[t])Object.prototype.hasOwnProperty.call(arguments[t],i)&&typeof e[i]=="undefined"&&(e[i]=arguments[t][i]);return e};Z.prepareContent=function(e,t,i,n,r){var a=Bs.Promise.resolve(t).then(function(s){var o=xt.blob&&(s instanceof Blob||["[object File]","[object Blob]"].indexOf(Object.prototype.toString.call(s))!==-1);return o&&typeof FileReader!="undefined"?new Bs.Promise(function(c,l){var d=new FileReader;d.onload=function(u){c(u.target.result)},d.onerror=function(u){l(u.target.error)},d.readAsArrayBuffer(s)}):s});return a.then(function(s){var o=Z.getTypeOf(s);return o?(o==="arraybuffer"?s=Z.transformTo("uint8array",s):o==="string"&&(r?s=Om.decode(s):i&&n!==!0&&(s=Dm(s))),s):Bs.Promise.reject(new Error("Can't read the data of '"+e+"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?"))})}});var me=R((fw,Fd)=>{"use strict";function Bd(e){this.name=e||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}Bd.prototype={push:function(e){this.emit("data",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit("error",e)}return!0},error:function(e){return this.isFinished?!1:(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit("error",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var i=0;i<this._listeners[e].length;i++)this._listeners[e][i].call(this,t)},pipe:function(e){return e.registerPrevious(this)},registerPrevious:function(e){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.streamInfo=e.streamInfo,this.mergeStreamInfo(),this.previous=e;var t=this;return e.on("data",function(i){t.processChunk(i)}),e.on("end",function(){t.end()}),e.on("error",function(i){t.error(i)}),this},pause:function(){return this.isPaused||this.isFinished?!1:(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;this.isPaused=!1;var e=!1;return this.generatedError&&(this.error(this.generatedError),e=!0),this.previous&&this.previous.resume(),!e},flush:function(){},processChunk:function(e){this.push(e)},withStreamInfo:function(e,t){return this.extraStreamInfo[e]=t,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var e in this.extraStreamInfo)Object.prototype.hasOwnProperty.call(this.extraStreamInfo,e)&&(this.streamInfo[e]=this.extraStreamInfo[e])},lock:function(){if(this.isLocked)throw new Error("The stream '"+this+"' has already been used.");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var e="Worker "+this.name;return this.previous?this.previous+" -> "+e:e}};Fd.exports=Bd});var _i=R(_t=>{"use strict";var wi=G(),Ft=rt(),zm=un(),zr=me(),vn=new Array(256);for(at=0;at<256;at++)vn[at]=at>=252?6:at>=248?5:at>=240?4:at>=224?3:at>=192?2:1;var at;vn[254]=vn[254]=1;var jm=function(e){var t,i,n,r,a,s=e.length,o=0;for(r=0;r<s;r++)i=e.charCodeAt(r),(i&64512)===55296&&r+1<s&&(n=e.charCodeAt(r+1),(n&64512)===56320&&(i=65536+(i-55296<<10)+(n-56320),r++)),o+=i<128?1:i<2048?2:i<65536?3:4;for(Ft.uint8array?t=new Uint8Array(o):t=new Array(o),a=0,r=0;a<o;r++)i=e.charCodeAt(r),(i&64512)===55296&&r+1<s&&(n=e.charCodeAt(r+1),(n&64512)===56320&&(i=65536+(i-55296<<10)+(n-56320),r++)),i<128?t[a++]=i:i<2048?(t[a++]=192|i>>>6,t[a++]=128|i&63):i<65536?(t[a++]=224|i>>>12,t[a++]=128|i>>>6&63,t[a++]=128|i&63):(t[a++]=240|i>>>18,t[a++]=128|i>>>12&63,t[a++]=128|i>>>6&63,t[a++]=128|i&63);return t},Bm=function(e,t){var i;for(t=t||e.length,t>e.length&&(t=e.length),i=t-1;i>=0&&(e[i]&192)===128;)i--;return i<0||i===0?t:i+vn[e[i]]>t?i:t},Fm=function(e){var t,i,n,r,a=e.length,s=new Array(a*2);for(i=0,t=0;t<a;){if(n=e[t++],n<128){s[i++]=n;continue}if(r=vn[n],r>4){s[i++]=65533,t+=r-1;continue}for(n&=r===2?31:r===3?15:7;r>1&&t<a;)n=n<<6|e[t++]&63,r--;if(r>1){s[i++]=65533;continue}n<65536?s[i++]=n:(n-=65536,s[i++]=55296|n>>10&1023,s[i++]=56320|n&1023)}return s.length!==i&&(s.subarray?s=s.subarray(0,i):s.length=i),wi.applyFromCharCode(s)};_t.utf8encode=function(t){return Ft.nodebuffer?zm.newBufferFrom(t,"utf-8"):jm(t)};_t.utf8decode=function(t){return Ft.nodebuffer?wi.transformTo("nodebuffer",t).toString("utf-8"):(t=wi.transformTo(Ft.uint8array?"uint8array":"array",t),Fm(t))};function jr(){zr.call(this,"utf-8 decode"),this.leftOver=null}wi.inherits(jr,zr);jr.prototype.processChunk=function(e){var t=wi.transformTo(Ft.uint8array?"uint8array":"array",e.data);if(this.leftOver&&this.leftOver.length){if(Ft.uint8array){var i=t;t=new Uint8Array(i.length+this.leftOver.length),t.set(this.leftOver,0),t.set(i,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=Bm(t),r=t;n!==t.length&&(Ft.uint8array?(r=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(r=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:_t.utf8decode(r),meta:e.meta})};jr.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:_t.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)};_t.Utf8DecodeWorker=jr;function Fs(){zr.call(this,"utf-8 encode")}wi.inherits(Fs,zr);Fs.prototype.processChunk=function(e){this.push({data:_t.utf8encode(e.data),meta:e.meta})};_t.Utf8EncodeWorker=Fs});var $d=R((gw,Ud)=>{"use strict";var Nd=me(),Hd=G();function Ns(e){Nd.call(this,"ConvertWorker to "+e),this.destType=e}Hd.inherits(Ns,Nd);Ns.prototype.processChunk=function(e){this.push({data:Hd.transformTo(this.destType,e.data),meta:e.meta})};Ud.exports=Ns});var Wd=R((mw,Gd)=>{"use strict";var qd=Cs().Readable,Nm=G();Nm.inherits(Hs,qd);function Hs(e,t,i){qd.call(this,t),this._helper=e;var n=this;e.on("data",function(r,a){n.push(r)||n._helper.pause(),i&&i(a)}).on("error",function(r){n.emit("error",r)}).on("end",function(){n.push(null)})}Hs.prototype._read=function(){this._helper.resume()};Gd.exports=Hs});var Us=R((bw,Kd)=>{"use strict";var Nt=G(),Hm=$d(),Um=me(),$m=Rs(),qm=rt(),Gm=yi(),Yd=null;if(qm.nodestream)try{Yd=Wd()}catch{}function Wm(e,t,i){switch(e){case"blob":return Nt.newBlob(Nt.transformTo("arraybuffer",t),i);case"base64":return $m.encode(t);default:return Nt.transformTo(e,t)}}function Ym(e,t){var i,n=0,r=null,a=0;for(i=0;i<t.length;i++)a+=t[i].length;switch(e){case"string":return t.join("");case"array":return Array.prototype.concat.apply([],t);case"uint8array":for(r=new Uint8Array(a),i=0;i<t.length;i++)r.set(t[i],n),n+=t[i].length;return r;case"nodebuffer":return Buffer.concat(t);default:throw new Error("concat : unsupported type '"+e+"'")}}function Vm(e,t){return new Gm.Promise(function(i,n){var r=[],a=e._internalType,s=e._outputType,o=e._mimeType;e.on("data",function(c,l){r.push(c),t&&t(l)}).on("error",function(c){r=[],n(c)}).on("end",function(){try{var c=Wm(s,Ym(a,r),o);i(c)}catch(l){n(l)}r=[]}).resume()})}function Vd(e,t,i){var n=t;switch(t){case"blob":case"arraybuffer":n="uint8array";break;case"base64":n="string";break}try{this._internalType=n,this._outputType=t,this._mimeType=i,Nt.checkSupport(n),this._worker=e.pipe(new Hm(n)),e.lock()}catch(r){this._worker=new Um("error"),this._worker.error(r)}}Vd.prototype={accumulate:function(e){return Vm(this,e)},on:function(e,t){var i=this;return e==="data"?this._worker.on(e,function(n){t.call(i,n.data,n.meta)}):this._worker.on(e,function(){Nt.delay(t,arguments,i)}),this},resume:function(){return Nt.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(e){if(Nt.checkSupport("nodestream"),this._outputType!=="nodebuffer")throw new Error(this._outputType+" is not supported by this method");return new Yd(this,{objectMode:this._outputType!=="nodebuffer"},e)}};Kd.exports=Vd});var $s=R(Pe=>{"use strict";Pe.base64=!1;Pe.binary=!1;Pe.dir=!1;Pe.createFolders=!0;Pe.date=null;Pe.compression=null;Pe.compressionOptions=null;Pe.comment=null;Pe.unixPermissions=null;Pe.dosPermissions=null});var qs=R((yw,Xd)=>{"use strict";var Br=G(),Fr=me(),Km=16*1024;function Ei(e){Fr.call(this,"DataWorker");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,e.then(function(i){t.dataIsReady=!0,t.data=i,t.max=i&&i.length||0,t.type=Br.getTypeOf(i),t.isPaused||t._tickAndRepeat()},function(i){t.error(i)})}Br.inherits(Ei,Fr);Ei.prototype.cleanUp=function(){Fr.prototype.cleanUp.call(this),this.data=null};Ei.prototype.resume=function(){return Fr.prototype.resume.call(this)?(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,Br.delay(this._tickAndRepeat,[],this)),!0):!1};Ei.prototype._tickAndRepeat=function(){this._tickScheduled=!1,!(this.isPaused||this.isFinished)&&(this._tick(),this.isFinished||(Br.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))};Ei.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=Km,t=null,i=Math.min(this.max,this.index+e);if(this.index>=this.max)return this.end();switch(this.type){case"string":t=this.data.substring(this.index,i);break;case"uint8array":t=this.data.subarray(this.index,i);break;case"array":case"nodebuffer":t=this.data.slice(this.index,i);break}return this.index=i,this.push({data:t,meta:{percent:this.max?this.index/this.max*100:0}})};Xd.exports=Ei});var Nr=R((xw,Jd)=>{"use strict";var Xm=G();function Zm(){for(var e,t=[],i=0;i<256;i++){e=i;for(var n=0;n<8;n++)e=e&1?3988292384^e>>>1:e>>>1;t[i]=e}return t}var Zd=Zm();function Jm(e,t,i,n){var r=Zd,a=n+i;e=e^-1;for(var s=n;s<a;s++)e=e>>>8^r[(e^t[s])&255];return e^-1}function Qm(e,t,i,n){var r=Zd,a=n+i;e=e^-1;for(var s=n;s<a;s++)e=e>>>8^r[(e^t.charCodeAt(s))&255];return e^-1}Jd.exports=function(t,i){if(typeof t=="undefined"||!t.length)return 0;var n=Xm.getTypeOf(t)!=="string";return n?Jm(i|0,t,t.length,0):Qm(i|0,t,t.length,0)}});var Ws=R((ww,eu)=>{"use strict";var Qd=me(),eb=Nr(),tb=G();function Gs(){Qd.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}tb.inherits(Gs,Qd);Gs.prototype.processChunk=function(e){this.streamInfo.crc32=eb(e.data,this.streamInfo.crc32||0),this.push(e)};eu.exports=Gs});var iu=R((_w,tu)=>{"use strict";var ib=G(),Ys=me();function Vs(e){Ys.call(this,"DataLengthProbe for "+e),this.propName=e,this.withStreamInfo(e,0)}ib.inherits(Vs,Ys);Vs.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}Ys.prototype.processChunk.call(this,e)};tu.exports=Vs});var Hr=R((Ew,au)=>{"use strict";var nu=yi(),ru=qs(),nb=Ws(),Ks=iu();function Xs(e,t,i,n,r){this.compressedSize=e,this.uncompressedSize=t,this.crc32=i,this.compression=n,this.compressedContent=r}Xs.prototype={getContentWorker:function(){var e=new ru(nu.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new Ks("data_length")),t=this;return e.on("end",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),e},getCompressedWorker:function(){return new ru(nu.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}};Xs.createWorkerFrom=function(e,t,i){return e.pipe(new nb).pipe(new Ks("uncompressedSize")).pipe(t.compressWorker(i)).pipe(new Ks("compressedSize")).withStreamInfo("compression",t)};au.exports=Xs});var cu=R((Sw,lu)=>{"use strict";var rb=Us(),ab=qs(),Zs=_i(),Js=Hr(),su=me(),Qs=function(e,t,i){this.name=e,this.dir=i.dir,this.date=i.date,this.comment=i.comment,this.unixPermissions=i.unixPermissions,this.dosPermissions=i.dosPermissions,this._data=t,this._dataBinary=i.binary,this.options={compression:i.compression,compressionOptions:i.compressionOptions}};Qs.prototype={internalStream:function(e){var t=null,i="string";try{if(!e)throw new Error("No output type specified.");i=e.toLowerCase();var n=i==="string"||i==="text";(i==="binarystring"||i==="text")&&(i="string"),t=this._decompressWorker();var r=!this._dataBinary;r&&!n&&(t=t.pipe(new Zs.Utf8EncodeWorker)),!r&&n&&(t=t.pipe(new Zs.Utf8DecodeWorker))}catch(a){t=new su("error"),t.error(a)}return new rb(t,i,"")},async:function(e,t){return this.internalStream(e).accumulate(t)},nodeStream:function(e,t){return this.internalStream(e||"nodebuffer").toNodejsStream(t)},_compressWorker:function(e,t){if(this._data instanceof Js&&this._data.compression.magic===e.magic)return this._data.getCompressedWorker();var i=this._decompressWorker();return this._dataBinary||(i=i.pipe(new Zs.Utf8EncodeWorker)),Js.createWorkerFrom(i,e,t)},_decompressWorker:function(){return this._data instanceof Js?this._data.getContentWorker():this._data instanceof su?this._data:new ab(this._data)}};var ou=["asText","asBinary","asNodeBuffer","asUint8Array","asArrayBuffer"],sb=function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")};for(Ur=0;Ur<ou.length;Ur++)Qs.prototype[ou[Ur]]=sb;var Ur;lu.exports=Qs});var st=R(de=>{"use strict";var ob=typeof Uint8Array!="undefined"&&typeof Uint16Array!="undefined"&&typeof Int32Array!="undefined";function lb(e,t){return Object.prototype.hasOwnProperty.call(e,t)}de.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var i=t.shift();if(i){if(typeof i!="object")throw new TypeError(i+"must be non-object");for(var n in i)lb(i,n)&&(e[n]=i[n])}}return e};de.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var cb={arraySet:function(e,t,i,n,r){if(t.subarray&&e.subarray){e.set(t.subarray(i,i+n),r);return}for(var a=0;a<n;a++)e[r+a]=t[i+a]},flattenChunks:function(e){var t,i,n,r,a,s;for(n=0,t=0,i=e.length;t<i;t++)n+=e[t].length;for(s=new Uint8Array(n),r=0,t=0,i=e.length;t<i;t++)a=e[t],s.set(a,r),r+=a.length;return s}},db={arraySet:function(e,t,i,n,r){for(var a=0;a<n;a++)e[r+a]=t[i+a]},flattenChunks:function(e){return[].concat.apply([],e)}};de.setTyped=function(e){e?(de.Buf8=Uint8Array,de.Buf16=Uint16Array,de.Buf32=Int32Array,de.assign(de,cb)):(de.Buf8=Array,de.Buf16=Array,de.Buf32=Array,de.assign(de,db))};de.setTyped(ob)});var Iu=R(Ci=>{"use strict";var ub=st(),pb=4,du=0,uu=1,fb=2;function Ai(e){for(var t=e.length;--t>=0;)e[t]=0}var hb=0,bu=1,gb=2,mb=3,bb=258,so=29,Sn=256,xn=Sn+1+so,Si=30,oo=19,vu=2*xn+1,Ht=15,eo=16,vb=7,lo=256,yu=16,xu=17,wu=18,ro=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],$r=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],yb=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],_u=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],xb=512,ot=new Array((xn+2)*2);Ai(ot);var yn=new Array(Si*2);Ai(yn);var wn=new Array(xb);Ai(wn);var _n=new Array(bb-mb+1);Ai(_n);var co=new Array(so);Ai(co);var qr=new Array(Si);Ai(qr);function to(e,t,i,n,r){this.static_tree=e,this.extra_bits=t,this.extra_base=i,this.elems=n,this.max_length=r,this.has_stree=e&&e.length}var Eu,Su,Au;function io(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function Cu(e){return e<256?wn[e]:wn[256+(e>>>7)]}function En(e,t){e.pending_buf[e.pending++]=t&255,e.pending_buf[e.pending++]=t>>>8&255}function pe(e,t,i){e.bi_valid>eo-i?(e.bi_buf|=t<<e.bi_valid&65535,En(e,e.bi_buf),e.bi_buf=t>>eo-e.bi_valid,e.bi_valid+=i-eo):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=i)}function $e(e,t,i){pe(e,i[t*2],i[t*2+1])}function ku(e,t){var i=0;do i|=e&1,e>>>=1,i<<=1;while(--t>0);return i>>>1}function wb(e){e.bi_valid===16?(En(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=e.bi_buf&255,e.bi_buf>>=8,e.bi_valid-=8)}function _b(e,t){var i=t.dyn_tree,n=t.max_code,r=t.stat_desc.static_tree,a=t.stat_desc.has_stree,s=t.stat_desc.extra_bits,o=t.stat_desc.extra_base,c=t.stat_desc.max_length,l,d,u,p,f,m,h=0;for(p=0;p<=Ht;p++)e.bl_count[p]=0;for(i[e.heap[e.heap_max]*2+1]=0,l=e.heap_max+1;l<vu;l++)d=e.heap[l],p=i[i[d*2+1]*2+1]+1,p>c&&(p=c,h++),i[d*2+1]=p,!(d>n)&&(e.bl_count[p]++,f=0,d>=o&&(f=s[d-o]),m=i[d*2],e.opt_len+=m*(p+f),a&&(e.static_len+=m*(r[d*2+1]+f)));if(h!==0){do{for(p=c-1;e.bl_count[p]===0;)p--;e.bl_count[p]--,e.bl_count[p+1]+=2,e.bl_count[c]--,h-=2}while(h>0);for(p=c;p!==0;p--)for(d=e.bl_count[p];d!==0;)u=e.heap[--l],!(u>n)&&(i[u*2+1]!==p&&(e.opt_len+=(p-i[u*2+1])*i[u*2],i[u*2+1]=p),d--)}}function Tu(e,t,i){var n=new Array(Ht+1),r=0,a,s;for(a=1;a<=Ht;a++)n[a]=r=r+i[a-1]<<1;for(s=0;s<=t;s++){var o=e[s*2+1];o!==0&&(e[s*2]=ku(n[o]++,o))}}function Eb(){var e,t,i,n,r,a=new Array(Ht+1);for(i=0,n=0;n<so-1;n++)for(co[n]=i,e=0;e<1<<ro[n];e++)_n[i++]=n;for(_n[i-1]=n,r=0,n=0;n<16;n++)for(qr[n]=r,e=0;e<1<<$r[n];e++)wn[r++]=n;for(r>>=7;n<Si;n++)for(qr[n]=r<<7,e=0;e<1<<$r[n]-7;e++)wn[256+r++]=n;for(t=0;t<=Ht;t++)a[t]=0;for(e=0;e<=143;)ot[e*2+1]=8,e++,a[8]++;for(;e<=255;)ot[e*2+1]=9,e++,a[9]++;for(;e<=279;)ot[e*2+1]=7,e++,a[7]++;for(;e<=287;)ot[e*2+1]=8,e++,a[8]++;for(Tu(ot,xn+1,a),e=0;e<Si;e++)yn[e*2+1]=5,yn[e*2]=ku(e,5);Eu=new to(ot,ro,Sn+1,xn,Ht),Su=new to(yn,$r,0,Si,Ht),Au=new to(new Array(0),yb,0,oo,vb)}function Lu(e){var t;for(t=0;t<xn;t++)e.dyn_ltree[t*2]=0;for(t=0;t<Si;t++)e.dyn_dtree[t*2]=0;for(t=0;t<oo;t++)e.bl_tree[t*2]=0;e.dyn_ltree[lo*2]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function Ru(e){e.bi_valid>8?En(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function Sb(e,t,i,n){Ru(e),n&&(En(e,i),En(e,~i)),ub.arraySet(e.pending_buf,e.window,t,i,e.pending),e.pending+=i}function pu(e,t,i,n){var r=t*2,a=i*2;return e[r]<e[a]||e[r]===e[a]&&n[t]<=n[i]}function no(e,t,i){for(var n=e.heap[i],r=i<<1;r<=e.heap_len&&(r<e.heap_len&&pu(t,e.heap[r+1],e.heap[r],e.depth)&&r++,!pu(t,n,e.heap[r],e.depth));)e.heap[i]=e.heap[r],i=r,r<<=1;e.heap[i]=n}function fu(e,t,i){var n,r,a=0,s,o;if(e.last_lit!==0)do n=e.pending_buf[e.d_buf+a*2]<<8|e.pending_buf[e.d_buf+a*2+1],r=e.pending_buf[e.l_buf+a],a++,n===0?$e(e,r,t):(s=_n[r],$e(e,s+Sn+1,t),o=ro[s],o!==0&&(r-=co[s],pe(e,r,o)),n--,s=Cu(n),$e(e,s,i),o=$r[s],o!==0&&(n-=qr[s],pe(e,n,o)));while(a<e.last_lit);$e(e,lo,t)}function ao(e,t){var i=t.dyn_tree,n=t.stat_desc.static_tree,r=t.stat_desc.has_stree,a=t.stat_desc.elems,s,o,c=-1,l;for(e.heap_len=0,e.heap_max=vu,s=0;s<a;s++)i[s*2]!==0?(e.heap[++e.heap_len]=c=s,e.depth[s]=0):i[s*2+1]=0;for(;e.heap_len<2;)l=e.heap[++e.heap_len]=c<2?++c:0,i[l*2]=1,e.depth[l]=0,e.opt_len--,r&&(e.static_len-=n[l*2+1]);for(t.max_code=c,s=e.heap_len>>1;s>=1;s--)no(e,i,s);l=a;do s=e.heap[1],e.heap[1]=e.heap[e.heap_len--],no(e,i,1),o=e.heap[1],e.heap[--e.heap_max]=s,e.heap[--e.heap_max]=o,i[l*2]=i[s*2]+i[o*2],e.depth[l]=(e.depth[s]>=e.depth[o]?e.depth[s]:e.depth[o])+1,i[s*2+1]=i[o*2+1]=l,e.heap[1]=l++,no(e,i,1);while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],_b(e,t),Tu(i,c,e.bl_count)}function hu(e,t,i){var n,r=-1,a,s=t[1],o=0,c=7,l=4;for(s===0&&(c=138,l=3),t[(i+1)*2+1]=65535,n=0;n<=i;n++)a=s,s=t[(n+1)*2+1],!(++o<c&&a===s)&&(o<l?e.bl_tree[a*2]+=o:a!==0?(a!==r&&e.bl_tree[a*2]++,e.bl_tree[yu*2]++):o<=10?e.bl_tree[xu*2]++:e.bl_tree[wu*2]++,o=0,r=a,s===0?(c=138,l=3):a===s?(c=6,l=3):(c=7,l=4))}function gu(e,t,i){var n,r=-1,a,s=t[1],o=0,c=7,l=4;for(s===0&&(c=138,l=3),n=0;n<=i;n++)if(a=s,s=t[(n+1)*2+1],!(++o<c&&a===s)){if(o<l)do $e(e,a,e.bl_tree);while(--o!==0);else a!==0?(a!==r&&($e(e,a,e.bl_tree),o--),$e(e,yu,e.bl_tree),pe(e,o-3,2)):o<=10?($e(e,xu,e.bl_tree),pe(e,o-3,3)):($e(e,wu,e.bl_tree),pe(e,o-11,7));o=0,r=a,s===0?(c=138,l=3):a===s?(c=6,l=3):(c=7,l=4)}}function Ab(e){var t;for(hu(e,e.dyn_ltree,e.l_desc.max_code),hu(e,e.dyn_dtree,e.d_desc.max_code),ao(e,e.bl_desc),t=oo-1;t>=3&&e.bl_tree[_u[t]*2+1]===0;t--);return e.opt_len+=3*(t+1)+5+5+4,t}function Cb(e,t,i,n){var r;for(pe(e,t-257,5),pe(e,i-1,5),pe(e,n-4,4),r=0;r<n;r++)pe(e,e.bl_tree[_u[r]*2+1],3);gu(e,e.dyn_ltree,t-1),gu(e,e.dyn_dtree,i-1)}function kb(e){var t=4093624447,i;for(i=0;i<=31;i++,t>>>=1)if(t&1&&e.dyn_ltree[i*2]!==0)return du;if(e.dyn_ltree[18]!==0||e.dyn_ltree[20]!==0||e.dyn_ltree[26]!==0)return uu;for(i=32;i<Sn;i++)if(e.dyn_ltree[i*2]!==0)return uu;return du}var mu=!1;function Tb(e){mu||(Eb(),mu=!0),e.l_desc=new io(e.dyn_ltree,Eu),e.d_desc=new io(e.dyn_dtree,Su),e.bl_desc=new io(e.bl_tree,Au),e.bi_buf=0,e.bi_valid=0,Lu(e)}function Pu(e,t,i,n){pe(e,(hb<<1)+(n?1:0),3),Sb(e,t,i,!0)}function Lb(e){pe(e,bu<<1,3),$e(e,lo,ot),wb(e)}function Rb(e,t,i,n){var r,a,s=0;e.level>0?(e.strm.data_type===fb&&(e.strm.data_type=kb(e)),ao(e,e.l_desc),ao(e,e.d_desc),s=Ab(e),r=e.opt_len+3+7>>>3,a=e.static_len+3+7>>>3,a<=r&&(r=a)):r=a=i+5,i+4<=r&&t!==-1?Pu(e,t,i,n):e.strategy===pb||a===r?(pe(e,(bu<<1)+(n?1:0),3),fu(e,ot,yn)):(pe(e,(gb<<1)+(n?1:0),3),Cb(e,e.l_desc.max_code+1,e.d_desc.max_code+1,s+1),fu(e,e.dyn_ltree,e.dyn_dtree)),Lu(e),n&&Ru(e)}function Pb(e,t,i){return e.pending_buf[e.d_buf+e.last_lit*2]=t>>>8&255,e.pending_buf[e.d_buf+e.last_lit*2+1]=t&255,e.pending_buf[e.l_buf+e.last_lit]=i&255,e.last_lit++,t===0?e.dyn_ltree[i*2]++:(e.matches++,t--,e.dyn_ltree[(_n[i]+Sn+1)*2]++,e.dyn_dtree[Cu(t)*2]++),e.last_lit===e.lit_bufsize-1}Ci._tr_init=Tb;Ci._tr_stored_block=Pu;Ci._tr_flush_block=Rb;Ci._tr_tally=Pb;Ci._tr_align=Lb});var uo=R((kw,Mu)=>{"use strict";function Ib(e,t,i,n){for(var r=e&65535|0,a=e>>>16&65535|0,s=0;i!==0;){s=i>2e3?2e3:i,i-=s;do r=r+t[n++]|0,a=a+r|0;while(--s);r%=65521,a%=65521}return r|a<<16|0}Mu.exports=Ib});var po=R((Tw,Ou)=>{"use strict";function Mb(){for(var e,t=[],i=0;i<256;i++){e=i;for(var n=0;n<8;n++)e=e&1?3988292384^e>>>1:e>>>1;t[i]=e}return t}var Ob=Mb();function Db(e,t,i,n){var r=Ob,a=n+i;e^=-1;for(var s=n;s<a;s++)e=e>>>8^r[(e^t[s])&255];return e^-1}Ou.exports=Db});var Gr=R((Lw,Du)=>{"use strict";Du.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}});var qu=R(We=>{"use strict";var ue=st(),Ee=Iu(),Fu=uo(),Et=po(),zb=Gr(),Gt=0,jb=1,Bb=3,Tt=4,zu=5,Ge=0,ju=1,Se=-2,Fb=-3,fo=-5,Nb=-1,Hb=1,Wr=2,Ub=3,$b=4,qb=0,Gb=2,Xr=8,Wb=9,Yb=15,Vb=8,Kb=29,Xb=256,go=Xb+1+Kb,Zb=30,Jb=19,Qb=2*go+1,ev=15,z=3,Ct=258,Ie=Ct+z+1,tv=32,Zr=42,mo=69,Yr=73,Vr=91,Kr=103,Ut=113,Cn=666,te=1,kn=2,$t=3,Li=4,iv=3;function kt(e,t){return e.msg=zb[t],t}function Bu(e){return(e<<1)-(e>4?9:0)}function At(e){for(var t=e.length;--t>=0;)e[t]=0}function St(e){var t=e.state,i=t.pending;i>e.avail_out&&(i=e.avail_out),i!==0&&(ue.arraySet(e.output,t.pending_buf,t.pending_out,i,e.next_out),e.next_out+=i,t.pending_out+=i,e.total_out+=i,e.avail_out-=i,t.pending-=i,t.pending===0&&(t.pending_out=0))}function re(e,t){Ee._tr_flush_block(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,St(e.strm)}function B(e,t){e.pending_buf[e.pending++]=t}function An(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=t&255}function nv(e,t,i,n){var r=e.avail_in;return r>n&&(r=n),r===0?0:(e.avail_in-=r,ue.arraySet(t,e.input,e.next_in,r,i),e.state.wrap===1?e.adler=Fu(e.adler,t,r,i):e.state.wrap===2&&(e.adler=Et(e.adler,t,r,i)),e.next_in+=r,e.total_in+=r,r)}function Nu(e,t){var i=e.max_chain_length,n=e.strstart,r,a,s=e.prev_length,o=e.nice_match,c=e.strstart>e.w_size-Ie?e.strstart-(e.w_size-Ie):0,l=e.window,d=e.w_mask,u=e.prev,p=e.strstart+Ct,f=l[n+s-1],m=l[n+s];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do if(r=t,!(l[r+s]!==m||l[r+s-1]!==f||l[r]!==l[n]||l[++r]!==l[n+1])){n+=2,r++;do;while(l[++n]===l[++r]&&l[++n]===l[++r]&&l[++n]===l[++r]&&l[++n]===l[++r]&&l[++n]===l[++r]&&l[++n]===l[++r]&&l[++n]===l[++r]&&l[++n]===l[++r]&&n<p);if(a=Ct-(p-n),n=p-Ct,a>s){if(e.match_start=t,s=a,a>=o)break;f=l[n+s-1],m=l[n+s]}}while((t=u[t&d])>c&&--i!==0);return s<=e.lookahead?s:e.lookahead}function qt(e){var t=e.w_size,i,n,r,a,s;do{if(a=e.window_size-e.lookahead-e.strstart,e.strstart>=t+(t-Ie)){ue.arraySet(e.window,e.window,t,t,0),e.match_start-=t,e.strstart-=t,e.block_start-=t,n=e.hash_size,i=n;do r=e.head[--i],e.head[i]=r>=t?r-t:0;while(--n);n=t,i=n;do r=e.prev[--i],e.prev[i]=r>=t?r-t:0;while(--n);a+=t}if(e.strm.avail_in===0)break;if(n=nv(e.strm,e.window,e.strstart+e.lookahead,a),e.lookahead+=n,e.lookahead+e.insert>=z)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+1])&e.hash_mask;e.insert&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+z-1])&e.hash_mask,e.prev[s&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=s,s++,e.insert--,!(e.lookahead+e.insert<z)););}while(e.lookahead<Ie&&e.strm.avail_in!==0)}function rv(e,t){var i=65535;for(i>e.pending_buf_size-5&&(i=e.pending_buf_size-5);;){if(e.lookahead<=1){if(qt(e),e.lookahead===0&&t===Gt)return te;if(e.lookahead===0)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+i;if((e.strstart===0||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,re(e,!1),e.strm.avail_out===0)||e.strstart-e.block_start>=e.w_size-Ie&&(re(e,!1),e.strm.avail_out===0))return te}return e.insert=0,t===Tt?(re(e,!0),e.strm.avail_out===0?$t:Li):(e.strstart>e.block_start&&(re(e,!1),e.strm.avail_out===0),te)}function ho(e,t){for(var i,n;;){if(e.lookahead<Ie){if(qt(e),e.lookahead<Ie&&t===Gt)return te;if(e.lookahead===0)break}if(i=0,e.lookahead>=z&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+z-1])&e.hash_mask,i=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),i!==0&&e.strstart-i<=e.w_size-Ie&&(e.match_length=Nu(e,i)),e.match_length>=z)if(n=Ee._tr_tally(e,e.strstart-e.match_start,e.match_length-z),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=z){e.match_length--;do e.strstart++,e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+z-1])&e.hash_mask,i=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart;while(--e.match_length!==0);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+1])&e.hash_mask;else n=Ee._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(n&&(re(e,!1),e.strm.avail_out===0))return te}return e.insert=e.strstart<z-1?e.strstart:z-1,t===Tt?(re(e,!0),e.strm.avail_out===0?$t:Li):e.last_lit&&(re(e,!1),e.strm.avail_out===0)?te:kn}function ki(e,t){for(var i,n,r;;){if(e.lookahead<Ie){if(qt(e),e.lookahead<Ie&&t===Gt)return te;if(e.lookahead===0)break}if(i=0,e.lookahead>=z&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+z-1])&e.hash_mask,i=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=z-1,i!==0&&e.prev_length<e.max_lazy_match&&e.strstart-i<=e.w_size-Ie&&(e.match_length=Nu(e,i),e.match_length<=5&&(e.strategy===Hb||e.match_length===z&&e.strstart-e.match_start>4096)&&(e.match_length=z-1)),e.prev_length>=z&&e.match_length<=e.prev_length){r=e.strstart+e.lookahead-z,n=Ee._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-z),e.lookahead-=e.prev_length-1,e.prev_length-=2;do++e.strstart<=r&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+z-1])&e.hash_mask,i=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart);while(--e.prev_length!==0);if(e.match_available=0,e.match_length=z-1,e.strstart++,n&&(re(e,!1),e.strm.avail_out===0))return te}else if(e.match_available){if(n=Ee._tr_tally(e,0,e.window[e.strstart-1]),n&&re(e,!1),e.strstart++,e.lookahead--,e.strm.avail_out===0)return te}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(n=Ee._tr_tally(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<z-1?e.strstart:z-1,t===Tt?(re(e,!0),e.strm.avail_out===0?$t:Li):e.last_lit&&(re(e,!1),e.strm.avail_out===0)?te:kn}function av(e,t){for(var i,n,r,a,s=e.window;;){if(e.lookahead<=Ct){if(qt(e),e.lookahead<=Ct&&t===Gt)return te;if(e.lookahead===0)break}if(e.match_length=0,e.lookahead>=z&&e.strstart>0&&(r=e.strstart-1,n=s[r],n===s[++r]&&n===s[++r]&&n===s[++r])){a=e.strstart+Ct;do;while(n===s[++r]&&n===s[++r]&&n===s[++r]&&n===s[++r]&&n===s[++r]&&n===s[++r]&&n===s[++r]&&n===s[++r]&&r<a);e.match_length=Ct-(a-r),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=z?(i=Ee._tr_tally(e,1,e.match_length-z),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(i=Ee._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),i&&(re(e,!1),e.strm.avail_out===0))return te}return e.insert=0,t===Tt?(re(e,!0),e.strm.avail_out===0?$t:Li):e.last_lit&&(re(e,!1),e.strm.avail_out===0)?te:kn}function sv(e,t){for(var i;;){if(e.lookahead===0&&(qt(e),e.lookahead===0)){if(t===Gt)return te;break}if(e.match_length=0,i=Ee._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,i&&(re(e,!1),e.strm.avail_out===0))return te}return e.insert=0,t===Tt?(re(e,!0),e.strm.avail_out===0?$t:Li):e.last_lit&&(re(e,!1),e.strm.avail_out===0)?te:kn}function qe(e,t,i,n,r){this.good_length=e,this.max_lazy=t,this.nice_length=i,this.max_chain=n,this.func=r}var Ti;Ti=[new qe(0,0,0,0,rv),new qe(4,4,8,4,ho),new qe(4,5,16,8,ho),new qe(4,6,32,32,ho),new qe(4,4,16,16,ki),new qe(8,16,32,32,ki),new qe(8,16,128,128,ki),new qe(8,32,128,256,ki),new qe(32,128,258,1024,ki),new qe(32,258,258,4096,ki)];function ov(e){e.window_size=2*e.w_size,At(e.head),e.max_lazy_match=Ti[e.level].max_lazy,e.good_match=Ti[e.level].good_length,e.nice_match=Ti[e.level].nice_length,e.max_chain_length=Ti[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=z-1,e.match_available=0,e.ins_h=0}function lv(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Xr,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new ue.Buf16(Qb*2),this.dyn_dtree=new ue.Buf16((2*Zb+1)*2),this.bl_tree=new ue.Buf16((2*Jb+1)*2),At(this.dyn_ltree),At(this.dyn_dtree),At(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new ue.Buf16(ev+1),this.heap=new ue.Buf16(2*go+1),At(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new ue.Buf16(2*go+1),At(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function Hu(e){var t;return!e||!e.state?kt(e,Se):(e.total_in=e.total_out=0,e.data_type=Gb,t=e.state,t.pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?Zr:Ut,e.adler=t.wrap===2?0:1,t.last_flush=Gt,Ee._tr_init(t),Ge)}function Uu(e){var t=Hu(e);return t===Ge&&ov(e.state),t}function cv(e,t){return!e||!e.state||e.state.wrap!==2?Se:(e.state.gzhead=t,Ge)}function $u(e,t,i,n,r,a){if(!e)return Se;var s=1;if(t===Nb&&(t=6),n<0?(s=0,n=-n):n>15&&(s=2,n-=16),r<1||r>Wb||i!==Xr||n<8||n>15||t<0||t>9||a<0||a>$b)return kt(e,Se);n===8&&(n=9);var o=new lv;return e.state=o,o.strm=e,o.wrap=s,o.gzhead=null,o.w_bits=n,o.w_size=1<<o.w_bits,o.w_mask=o.w_size-1,o.hash_bits=r+7,o.hash_size=1<<o.hash_bits,o.hash_mask=o.hash_size-1,o.hash_shift=~~((o.hash_bits+z-1)/z),o.window=new ue.Buf8(o.w_size*2),o.head=new ue.Buf16(o.hash_size),o.prev=new ue.Buf16(o.w_size),o.lit_bufsize=1<<r+6,o.pending_buf_size=o.lit_bufsize*4,o.pending_buf=new ue.Buf8(o.pending_buf_size),o.d_buf=1*o.lit_bufsize,o.l_buf=3*o.lit_bufsize,o.level=t,o.strategy=a,o.method=i,Uu(e)}function dv(e,t){return $u(e,t,Xr,Yb,Vb,qb)}function uv(e,t){var i,n,r,a;if(!e||!e.state||t>zu||t<0)return e?kt(e,Se):Se;if(n=e.state,!e.output||!e.input&&e.avail_in!==0||n.status===Cn&&t!==Tt)return kt(e,e.avail_out===0?fo:Se);if(n.strm=e,i=n.last_flush,n.last_flush=t,n.status===Zr)if(n.wrap===2)e.adler=0,B(n,31),B(n,139),B(n,8),n.gzhead?(B(n,(n.gzhead.text?1:0)+(n.gzhead.hcrc?2:0)+(n.gzhead.extra?4:0)+(n.gzhead.name?8:0)+(n.gzhead.comment?16:0)),B(n,n.gzhead.time&255),B(n,n.gzhead.time>>8&255),B(n,n.gzhead.time>>16&255),B(n,n.gzhead.time>>24&255),B(n,n.level===9?2:n.strategy>=Wr||n.level<2?4:0),B(n,n.gzhead.os&255),n.gzhead.extra&&n.gzhead.extra.length&&(B(n,n.gzhead.extra.length&255),B(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=Et(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=mo):(B(n,0),B(n,0),B(n,0),B(n,0),B(n,0),B(n,n.level===9?2:n.strategy>=Wr||n.level<2?4:0),B(n,iv),n.status=Ut);else{var s=Xr+(n.w_bits-8<<4)<<8,o=-1;n.strategy>=Wr||n.level<2?o=0:n.level<6?o=1:n.level===6?o=2:o=3,s|=o<<6,n.strstart!==0&&(s|=tv),s+=31-s%31,n.status=Ut,An(n,s),n.strstart!==0&&(An(n,e.adler>>>16),An(n,e.adler&65535)),e.adler=1}if(n.status===mo)if(n.gzhead.extra){for(r=n.pending;n.gzindex<(n.gzhead.extra.length&65535)&&!(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>r&&(e.adler=Et(e.adler,n.pending_buf,n.pending-r,r)),St(e),r=n.pending,n.pending===n.pending_buf_size));)B(n,n.gzhead.extra[n.gzindex]&255),n.gzindex++;n.gzhead.hcrc&&n.pending>r&&(e.adler=Et(e.adler,n.pending_buf,n.pending-r,r)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=Yr)}else n.status=Yr;if(n.status===Yr)if(n.gzhead.name){r=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>r&&(e.adler=Et(e.adler,n.pending_buf,n.pending-r,r)),St(e),r=n.pending,n.pending===n.pending_buf_size)){a=1;break}n.gzindex<n.gzhead.name.length?a=n.gzhead.name.charCodeAt(n.gzindex++)&255:a=0,B(n,a)}while(a!==0);n.gzhead.hcrc&&n.pending>r&&(e.adler=Et(e.adler,n.pending_buf,n.pending-r,r)),a===0&&(n.gzindex=0,n.status=Vr)}else n.status=Vr;if(n.status===Vr)if(n.gzhead.comment){r=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>r&&(e.adler=Et(e.adler,n.pending_buf,n.pending-r,r)),St(e),r=n.pending,n.pending===n.pending_buf_size)){a=1;break}n.gzindex<n.gzhead.comment.length?a=n.gzhead.comment.charCodeAt(n.gzindex++)&255:a=0,B(n,a)}while(a!==0);n.gzhead.hcrc&&n.pending>r&&(e.adler=Et(e.adler,n.pending_buf,n.pending-r,r)),a===0&&(n.status=Kr)}else n.status=Kr;if(n.status===Kr&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&St(e),n.pending+2<=n.pending_buf_size&&(B(n,e.adler&255),B(n,e.adler>>8&255),e.adler=0,n.status=Ut)):n.status=Ut),n.pending!==0){if(St(e),e.avail_out===0)return n.last_flush=-1,Ge}else if(e.avail_in===0&&Bu(t)<=Bu(i)&&t!==Tt)return kt(e,fo);if(n.status===Cn&&e.avail_in!==0)return kt(e,fo);if(e.avail_in!==0||n.lookahead!==0||t!==Gt&&n.status!==Cn){var c=n.strategy===Wr?sv(n,t):n.strategy===Ub?av(n,t):Ti[n.level].func(n,t);if((c===$t||c===Li)&&(n.status=Cn),c===te||c===$t)return e.avail_out===0&&(n.last_flush=-1),Ge;if(c===kn&&(t===jb?Ee._tr_align(n):t!==zu&&(Ee._tr_stored_block(n,0,0,!1),t===Bb&&(At(n.head),n.lookahead===0&&(n.strstart=0,n.block_start=0,n.insert=0))),St(e),e.avail_out===0))return n.last_flush=-1,Ge}return t!==Tt?Ge:n.wrap<=0?ju:(n.wrap===2?(B(n,e.adler&255),B(n,e.adler>>8&255),B(n,e.adler>>16&255),B(n,e.adler>>24&255),B(n,e.total_in&255),B(n,e.total_in>>8&255),B(n,e.total_in>>16&255),B(n,e.total_in>>24&255)):(An(n,e.adler>>>16),An(n,e.adler&65535)),St(e),n.wrap>0&&(n.wrap=-n.wrap),n.pending!==0?Ge:ju)}function pv(e){var t;return!e||!e.state?Se:(t=e.state.status,t!==Zr&&t!==mo&&t!==Yr&&t!==Vr&&t!==Kr&&t!==Ut&&t!==Cn?kt(e,Se):(e.state=null,t===Ut?kt(e,Fb):Ge))}function fv(e,t){var i=t.length,n,r,a,s,o,c,l,d;if(!e||!e.state||(n=e.state,s=n.wrap,s===2||s===1&&n.status!==Zr||n.lookahead))return Se;for(s===1&&(e.adler=Fu(e.adler,t,i,0)),n.wrap=0,i>=n.w_size&&(s===0&&(At(n.head),n.strstart=0,n.block_start=0,n.insert=0),d=new ue.Buf8(n.w_size),ue.arraySet(d,t,i-n.w_size,n.w_size,0),t=d,i=n.w_size),o=e.avail_in,c=e.next_in,l=e.input,e.avail_in=i,e.next_in=0,e.input=t,qt(n);n.lookahead>=z;){r=n.strstart,a=n.lookahead-(z-1);do n.ins_h=(n.ins_h<<n.hash_shift^n.window[r+z-1])&n.hash_mask,n.prev[r&n.w_mask]=n.head[n.ins_h],n.head[n.ins_h]=r,r++;while(--a);n.strstart=r,n.lookahead=z-1,qt(n)}return n.strstart+=n.lookahead,n.block_start=n.strstart,n.insert=n.lookahead,n.lookahead=0,n.match_length=n.prev_length=z-1,n.match_available=0,e.next_in=c,e.input=l,e.avail_in=o,n.wrap=s,Ge}We.deflateInit=dv;We.deflateInit2=$u;We.deflateReset=Uu;We.deflateResetKeep=Hu;We.deflateSetHeader=cv;We.deflate=uv;We.deflateEnd=pv;We.deflateSetDictionary=fv;We.deflateInfo="pako deflate (from Nodeca project)"});var bo=R(Ri=>{"use strict";var Jr=st(),Gu=!0,Wu=!0;try{String.fromCharCode.apply(null,[0])}catch{Gu=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{Wu=!1}var Tn=new Jr.Buf8(256);for(lt=0;lt<256;lt++)Tn[lt]=lt>=252?6:lt>=248?5:lt>=240?4:lt>=224?3:lt>=192?2:1;var lt;Tn[254]=Tn[254]=1;Ri.string2buf=function(e){var t,i,n,r,a,s=e.length,o=0;for(r=0;r<s;r++)i=e.charCodeAt(r),(i&64512)===55296&&r+1<s&&(n=e.charCodeAt(r+1),(n&64512)===56320&&(i=65536+(i-55296<<10)+(n-56320),r++)),o+=i<128?1:i<2048?2:i<65536?3:4;for(t=new Jr.Buf8(o),a=0,r=0;a<o;r++)i=e.charCodeAt(r),(i&64512)===55296&&r+1<s&&(n=e.charCodeAt(r+1),(n&64512)===56320&&(i=65536+(i-55296<<10)+(n-56320),r++)),i<128?t[a++]=i:i<2048?(t[a++]=192|i>>>6,t[a++]=128|i&63):i<65536?(t[a++]=224|i>>>12,t[a++]=128|i>>>6&63,t[a++]=128|i&63):(t[a++]=240|i>>>18,t[a++]=128|i>>>12&63,t[a++]=128|i>>>6&63,t[a++]=128|i&63);return t};function Yu(e,t){if(t<65534&&(e.subarray&&Wu||!e.subarray&&Gu))return String.fromCharCode.apply(null,Jr.shrinkBuf(e,t));for(var i="",n=0;n<t;n++)i+=String.fromCharCode(e[n]);return i}Ri.buf2binstring=function(e){return Yu(e,e.length)};Ri.binstring2buf=function(e){for(var t=new Jr.Buf8(e.length),i=0,n=t.length;i<n;i++)t[i]=e.charCodeAt(i);return t};Ri.buf2string=function(e,t){var i,n,r,a,s=t||e.length,o=new Array(s*2);for(n=0,i=0;i<s;){if(r=e[i++],r<128){o[n++]=r;continue}if(a=Tn[r],a>4){o[n++]=65533,i+=a-1;continue}for(r&=a===2?31:a===3?15:7;a>1&&i<s;)r=r<<6|e[i++]&63,a--;if(a>1){o[n++]=65533;continue}r<65536?o[n++]=r:(r-=65536,o[n++]=55296|r>>10&1023,o[n++]=56320|r&1023)}return Yu(o,n)};Ri.utf8border=function(e,t){var i;for(t=t||e.length,t>e.length&&(t=e.length),i=t-1;i>=0&&(e[i]&192)===128;)i--;return i<0||i===0?t:i+Tn[e[i]]>t?i:t}});var vo=R((Iw,Vu)=>{"use strict";function hv(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}Vu.exports=hv});var Ju=R(Pn=>{"use strict";var Ln=qu(),Rn=st(),xo=bo(),wo=Gr(),gv=vo(),Zu=Object.prototype.toString,mv=0,yo=4,Pi=0,Ku=1,Xu=2,bv=-1,vv=0,yv=8;function Wt(e){if(!(this instanceof Wt))return new Wt(e);this.options=Rn.assign({level:bv,method:yv,chunkSize:16384,windowBits:15,memLevel:8,strategy:vv,to:""},e||{});var t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new gv,this.strm.avail_out=0;var i=Ln.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(i!==Pi)throw new Error(wo[i]);if(t.header&&Ln.deflateSetHeader(this.strm,t.header),t.dictionary){var n;if(typeof t.dictionary=="string"?n=xo.string2buf(t.dictionary):Zu.call(t.dictionary)==="[object ArrayBuffer]"?n=new Uint8Array(t.dictionary):n=t.dictionary,i=Ln.deflateSetDictionary(this.strm,n),i!==Pi)throw new Error(wo[i]);this._dict_set=!0}}Wt.prototype.push=function(e,t){var i=this.strm,n=this.options.chunkSize,r,a;if(this.ended)return!1;a=t===~~t?t:t===!0?yo:mv,typeof e=="string"?i.input=xo.string2buf(e):Zu.call(e)==="[object ArrayBuffer]"?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;do{if(i.avail_out===0&&(i.output=new Rn.Buf8(n),i.next_out=0,i.avail_out=n),r=Ln.deflate(i,a),r!==Ku&&r!==Pi)return this.onEnd(r),this.ended=!0,!1;(i.avail_out===0||i.avail_in===0&&(a===yo||a===Xu))&&(this.options.to==="string"?this.onData(xo.buf2binstring(Rn.shrinkBuf(i.output,i.next_out))):this.onData(Rn.shrinkBuf(i.output,i.next_out)))}while((i.avail_in>0||i.avail_out===0)&&r!==Ku);return a===yo?(r=Ln.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===Pi):(a===Xu&&(this.onEnd(Pi),i.avail_out=0),!0)};Wt.prototype.onData=function(e){this.chunks.push(e)};Wt.prototype.onEnd=function(e){e===Pi&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=Rn.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};function _o(e,t){var i=new Wt(t);if(i.push(e,!0),i.err)throw i.msg||wo[i.err];return i.result}function xv(e,t){return t=t||{},t.raw=!0,_o(e,t)}function wv(e,t){return t=t||{},t.gzip=!0,_o(e,t)}Pn.Deflate=Wt;Pn.deflate=_o;Pn.deflateRaw=xv;Pn.gzip=wv});var ep=R((Ow,Qu)=>{"use strict";var Qr=30,_v=12;Qu.exports=function(t,i){var n,r,a,s,o,c,l,d,u,p,f,m,h,g,b,v,y,x,w,T,C,S,L,M,_;n=t.state,r=t.next_in,M=t.input,a=r+(t.avail_in-5),s=t.next_out,_=t.output,o=s-(i-t.avail_out),c=s+(t.avail_out-257),l=n.dmax,d=n.wsize,u=n.whave,p=n.wnext,f=n.window,m=n.hold,h=n.bits,g=n.lencode,b=n.distcode,v=(1<<n.lenbits)-1,y=(1<<n.distbits)-1;e:do{h<15&&(m+=M[r++]<<h,h+=8,m+=M[r++]<<h,h+=8),x=g[m&v];t:for(;;){if(w=x>>>24,m>>>=w,h-=w,w=x>>>16&255,w===0)_[s++]=x&65535;else if(w&16){T=x&65535,w&=15,w&&(h<w&&(m+=M[r++]<<h,h+=8),T+=m&(1<<w)-1,m>>>=w,h-=w),h<15&&(m+=M[r++]<<h,h+=8,m+=M[r++]<<h,h+=8),x=b[m&y];i:for(;;){if(w=x>>>24,m>>>=w,h-=w,w=x>>>16&255,w&16){if(C=x&65535,w&=15,h<w&&(m+=M[r++]<<h,h+=8,h<w&&(m+=M[r++]<<h,h+=8)),C+=m&(1<<w)-1,C>l){t.msg="invalid distance too far back",n.mode=Qr;break e}if(m>>>=w,h-=w,w=s-o,C>w){if(w=C-w,w>u&&n.sane){t.msg="invalid distance too far back",n.mode=Qr;break e}if(S=0,L=f,p===0){if(S+=d-w,w<T){T-=w;do _[s++]=f[S++];while(--w);S=s-C,L=_}}else if(p<w){if(S+=d+p-w,w-=p,w<T){T-=w;do _[s++]=f[S++];while(--w);if(S=0,p<T){w=p,T-=w;do _[s++]=f[S++];while(--w);S=s-C,L=_}}}else if(S+=p-w,w<T){T-=w;do _[s++]=f[S++];while(--w);S=s-C,L=_}for(;T>2;)_[s++]=L[S++],_[s++]=L[S++],_[s++]=L[S++],T-=3;T&&(_[s++]=L[S++],T>1&&(_[s++]=L[S++]))}else{S=s-C;do _[s++]=_[S++],_[s++]=_[S++],_[s++]=_[S++],T-=3;while(T>2);T&&(_[s++]=_[S++],T>1&&(_[s++]=_[S++]))}}else if((w&64)===0){x=b[(x&65535)+(m&(1<<w)-1)];continue i}else{t.msg="invalid distance code",n.mode=Qr;break e}break}}else if((w&64)===0){x=g[(x&65535)+(m&(1<<w)-1)];continue t}else if(w&32){n.mode=_v;break e}else{t.msg="invalid literal/length code",n.mode=Qr;break e}break}}while(r<a&&s<c);T=h>>3,r-=T,h-=T<<3,m&=(1<<h)-1,t.next_in=r,t.next_out=s,t.avail_in=r<a?5+(a-r):5-(r-a),t.avail_out=s<c?257+(c-s):257-(s-c),n.hold=m,n.bits=h}});var op=R((Dw,sp)=>{"use strict";var tp=st(),Ii=15,ip=852,np=592,rp=0,Eo=1,ap=2,Ev=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],Sv=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],Av=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],Cv=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];sp.exports=function(t,i,n,r,a,s,o,c){var l=c.bits,d=0,u=0,p=0,f=0,m=0,h=0,g=0,b=0,v=0,y=0,x,w,T,C,S,L=null,M=0,_,E=new tp.Buf16(Ii+1),A=new tp.Buf16(Ii+1),P=null,I=0,k,D,j;for(d=0;d<=Ii;d++)E[d]=0;for(u=0;u<r;u++)E[i[n+u]]++;for(m=l,f=Ii;f>=1&&E[f]===0;f--);if(m>f&&(m=f),f===0)return a[s++]=1<<24|64<<16|0,a[s++]=1<<24|64<<16|0,c.bits=1,0;for(p=1;p<f&&E[p]===0;p++);for(m<p&&(m=p),b=1,d=1;d<=Ii;d++)if(b<<=1,b-=E[d],b<0)return-1;if(b>0&&(t===rp||f!==1))return-1;for(A[1]=0,d=1;d<Ii;d++)A[d+1]=A[d]+E[d];for(u=0;u<r;u++)i[n+u]!==0&&(o[A[i[n+u]]++]=u);if(t===rp?(L=P=o,_=19):t===Eo?(L=Ev,M-=257,P=Sv,I-=257,_=256):(L=Av,P=Cv,_=-1),y=0,u=0,d=p,S=s,h=m,g=0,T=-1,v=1<<m,C=v-1,t===Eo&&v>ip||t===ap&&v>np)return 1;for(;;){k=d-g,o[u]<_?(D=0,j=o[u]):o[u]>_?(D=P[I+o[u]],j=L[M+o[u]]):(D=96,j=0),x=1<<d-g,w=1<<h,p=w;do w-=x,a[S+(y>>g)+w]=k<<24|D<<16|j|0;while(w!==0);for(x=1<<d-1;y&x;)x>>=1;if(x!==0?(y&=x-1,y+=x):y=0,u++,--E[d]===0){if(d===f)break;d=i[n+o[u]]}if(d>m&&(y&C)!==T){for(g===0&&(g=m),S+=p,h=d-g,b=1<<h;h+g<f&&(b-=E[h+g],!(b<=0));)h++,b<<=1;if(v+=1<<h,t===Eo&&v>ip||t===ap&&v>np)return 1;T=y&C,a[T]=m<<24|h<<16|S-s|0}}return y!==0&&(a[S+y]=d-g<<24|64<<16|0),c.bits=m,0}});var Up=R(Me=>{"use strict";var be=st(),Lo=uo(),Ye=po(),kv=ep(),In=op(),Tv=0,Mp=1,Op=2,lp=4,Lv=5,ea=6,Yt=0,Rv=1,Pv=2,Ae=-2,Dp=-3,Ro=-4,Iv=-5,cp=8,zp=1,dp=2,up=3,pp=4,fp=5,hp=6,gp=7,mp=8,bp=9,vp=10,na=11,ct=12,So=13,yp=14,Ao=15,xp=16,wp=17,_p=18,Ep=19,ta=20,ia=21,Sp=22,Ap=23,Cp=24,kp=25,Tp=26,Co=27,Lp=28,Rp=29,q=30,Po=31,Mv=32,Ov=852,Dv=592,zv=15,jv=zv;function Pp(e){return(e>>>24&255)+(e>>>8&65280)+((e&65280)<<8)+((e&255)<<24)}function Bv(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new be.Buf16(320),this.work=new be.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function jp(e){var t;return!e||!e.state?Ae:(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=t.wrap&1),t.mode=zp,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new be.Buf32(Ov),t.distcode=t.distdyn=new be.Buf32(Dv),t.sane=1,t.back=-1,Yt)}function Bp(e){var t;return!e||!e.state?Ae:(t=e.state,t.wsize=0,t.whave=0,t.wnext=0,jp(e))}function Fp(e,t){var i,n;return!e||!e.state||(n=e.state,t<0?(i=0,t=-t):(i=(t>>4)+1,t<48&&(t&=15)),t&&(t<8||t>15))?Ae:(n.window!==null&&n.wbits!==t&&(n.window=null),n.wrap=i,n.wbits=t,Bp(e))}function Np(e,t){var i,n;return e?(n=new Bv,e.state=n,n.window=null,i=Fp(e,t),i!==Yt&&(e.state=null),i):Ae}function Fv(e){return Np(e,jv)}var Ip=!0,ko,To;function Nv(e){if(Ip){var t;for(ko=new be.Buf32(512),To=new be.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(In(Mp,e.lens,0,288,ko,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;In(Op,e.lens,0,32,To,0,e.work,{bits:5}),Ip=!1}e.lencode=ko,e.lenbits=9,e.distcode=To,e.distbits=5}function Hp(e,t,i,n){var r,a=e.state;return a.window===null&&(a.wsize=1<<a.wbits,a.wnext=0,a.whave=0,a.window=new be.Buf8(a.wsize)),n>=a.wsize?(be.arraySet(a.window,t,i-a.wsize,a.wsize,0),a.wnext=0,a.whave=a.wsize):(r=a.wsize-a.wnext,r>n&&(r=n),be.arraySet(a.window,t,i-n,r,a.wnext),n-=r,n?(be.arraySet(a.window,t,i-n,n,0),a.wnext=n,a.whave=a.wsize):(a.wnext+=r,a.wnext===a.wsize&&(a.wnext=0),a.whave<a.wsize&&(a.whave+=r))),0}function Hv(e,t){var i,n,r,a,s,o,c,l,d,u,p,f,m,h,g=0,b,v,y,x,w,T,C,S,L=new be.Buf8(4),M,_,E=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&e.avail_in!==0)return Ae;i=e.state,i.mode===ct&&(i.mode=So),s=e.next_out,r=e.output,c=e.avail_out,a=e.next_in,n=e.input,o=e.avail_in,l=i.hold,d=i.bits,u=o,p=c,S=Yt;e:for(;;)switch(i.mode){case zp:if(i.wrap===0){i.mode=So;break}for(;d<16;){if(o===0)break e;o--,l+=n[a++]<<d,d+=8}if(i.wrap&2&&l===35615){i.check=0,L[0]=l&255,L[1]=l>>>8&255,i.check=Ye(i.check,L,2,0),l=0,d=0,i.mode=dp;break}if(i.flags=0,i.head&&(i.head.done=!1),!(i.wrap&1)||(((l&255)<<8)+(l>>8))%31){e.msg="incorrect header check",i.mode=q;break}if((l&15)!==cp){e.msg="unknown compression method",i.mode=q;break}if(l>>>=4,d-=4,C=(l&15)+8,i.wbits===0)i.wbits=C;else if(C>i.wbits){e.msg="invalid window size",i.mode=q;break}i.dmax=1<<C,e.adler=i.check=1,i.mode=l&512?vp:ct,l=0,d=0;break;case dp:for(;d<16;){if(o===0)break e;o--,l+=n[a++]<<d,d+=8}if(i.flags=l,(i.flags&255)!==cp){e.msg="unknown compression method",i.mode=q;break}if(i.flags&57344){e.msg="unknown header flags set",i.mode=q;break}i.head&&(i.head.text=l>>8&1),i.flags&512&&(L[0]=l&255,L[1]=l>>>8&255,i.check=Ye(i.check,L,2,0)),l=0,d=0,i.mode=up;case up:for(;d<32;){if(o===0)break e;o--,l+=n[a++]<<d,d+=8}i.head&&(i.head.time=l),i.flags&512&&(L[0]=l&255,L[1]=l>>>8&255,L[2]=l>>>16&255,L[3]=l>>>24&255,i.check=Ye(i.check,L,4,0)),l=0,d=0,i.mode=pp;case pp:for(;d<16;){if(o===0)break e;o--,l+=n[a++]<<d,d+=8}i.head&&(i.head.xflags=l&255,i.head.os=l>>8),i.flags&512&&(L[0]=l&255,L[1]=l>>>8&255,i.check=Ye(i.check,L,2,0)),l=0,d=0,i.mode=fp;case fp:if(i.flags&1024){for(;d<16;){if(o===0)break e;o--,l+=n[a++]<<d,d+=8}i.length=l,i.head&&(i.head.extra_len=l),i.flags&512&&(L[0]=l&255,L[1]=l>>>8&255,i.check=Ye(i.check,L,2,0)),l=0,d=0}else i.head&&(i.head.extra=null);i.mode=hp;case hp:if(i.flags&1024&&(f=i.length,f>o&&(f=o),f&&(i.head&&(C=i.head.extra_len-i.length,i.head.extra||(i.head.extra=new Array(i.head.extra_len)),be.arraySet(i.head.extra,n,a,f,C)),i.flags&512&&(i.check=Ye(i.check,n,f,a)),o-=f,a+=f,i.length-=f),i.length))break e;i.length=0,i.mode=gp;case gp:if(i.flags&2048){if(o===0)break e;f=0;do C=n[a+f++],i.head&&C&&i.length<65536&&(i.head.name+=String.fromCharCode(C));while(C&&f<o);if(i.flags&512&&(i.check=Ye(i.check,n,f,a)),o-=f,a+=f,C)break e}else i.head&&(i.head.name=null);i.length=0,i.mode=mp;case mp:if(i.flags&4096){if(o===0)break e;f=0;do C=n[a+f++],i.head&&C&&i.length<65536&&(i.head.comment+=String.fromCharCode(C));while(C&&f<o);if(i.flags&512&&(i.check=Ye(i.check,n,f,a)),o-=f,a+=f,C)break e}else i.head&&(i.head.comment=null);i.mode=bp;case bp:if(i.flags&512){for(;d<16;){if(o===0)break e;o--,l+=n[a++]<<d,d+=8}if(l!==(i.check&65535)){e.msg="header crc mismatch",i.mode=q;break}l=0,d=0}i.head&&(i.head.hcrc=i.flags>>9&1,i.head.done=!0),e.adler=i.check=0,i.mode=ct;break;case vp:for(;d<32;){if(o===0)break e;o--,l+=n[a++]<<d,d+=8}e.adler=i.check=Pp(l),l=0,d=0,i.mode=na;case na:if(i.havedict===0)return e.next_out=s,e.avail_out=c,e.next_in=a,e.avail_in=o,i.hold=l,i.bits=d,Pv;e.adler=i.check=1,i.mode=ct;case ct:if(t===Lv||t===ea)break e;case So:if(i.last){l>>>=d&7,d-=d&7,i.mode=Co;break}for(;d<3;){if(o===0)break e;o--,l+=n[a++]<<d,d+=8}switch(i.last=l&1,l>>>=1,d-=1,l&3){case 0:i.mode=yp;break;case 1:if(Nv(i),i.mode=ta,t===ea){l>>>=2,d-=2;break e}break;case 2:i.mode=wp;break;case 3:e.msg="invalid block type",i.mode=q}l>>>=2,d-=2;break;case yp:for(l>>>=d&7,d-=d&7;d<32;){if(o===0)break e;o--,l+=n[a++]<<d,d+=8}if((l&65535)!==(l>>>16^65535)){e.msg="invalid stored block lengths",i.mode=q;break}if(i.length=l&65535,l=0,d=0,i.mode=Ao,t===ea)break e;case Ao:i.mode=xp;case xp:if(f=i.length,f){if(f>o&&(f=o),f>c&&(f=c),f===0)break e;be.arraySet(r,n,a,f,s),o-=f,a+=f,c-=f,s+=f,i.length-=f;break}i.mode=ct;break;case wp:for(;d<14;){if(o===0)break e;o--,l+=n[a++]<<d,d+=8}if(i.nlen=(l&31)+257,l>>>=5,d-=5,i.ndist=(l&31)+1,l>>>=5,d-=5,i.ncode=(l&15)+4,l>>>=4,d-=4,i.nlen>286||i.ndist>30){e.msg="too many length or distance symbols",i.mode=q;break}i.have=0,i.mode=_p;case _p:for(;i.have<i.ncode;){for(;d<3;){if(o===0)break e;o--,l+=n[a++]<<d,d+=8}i.lens[E[i.have++]]=l&7,l>>>=3,d-=3}for(;i.have<19;)i.lens[E[i.have++]]=0;if(i.lencode=i.lendyn,i.lenbits=7,M={bits:i.lenbits},S=In(Tv,i.lens,0,19,i.lencode,0,i.work,M),i.lenbits=M.bits,S){e.msg="invalid code lengths set",i.mode=q;break}i.have=0,i.mode=Ep;case Ep:for(;i.have<i.nlen+i.ndist;){for(;g=i.lencode[l&(1<<i.lenbits)-1],b=g>>>24,v=g>>>16&255,y=g&65535,!(b<=d);){if(o===0)break e;o--,l+=n[a++]<<d,d+=8}if(y<16)l>>>=b,d-=b,i.lens[i.have++]=y;else{if(y===16){for(_=b+2;d<_;){if(o===0)break e;o--,l+=n[a++]<<d,d+=8}if(l>>>=b,d-=b,i.have===0){e.msg="invalid bit length repeat",i.mode=q;break}C=i.lens[i.have-1],f=3+(l&3),l>>>=2,d-=2}else if(y===17){for(_=b+3;d<_;){if(o===0)break e;o--,l+=n[a++]<<d,d+=8}l>>>=b,d-=b,C=0,f=3+(l&7),l>>>=3,d-=3}else{for(_=b+7;d<_;){if(o===0)break e;o--,l+=n[a++]<<d,d+=8}l>>>=b,d-=b,C=0,f=11+(l&127),l>>>=7,d-=7}if(i.have+f>i.nlen+i.ndist){e.msg="invalid bit length repeat",i.mode=q;break}for(;f--;)i.lens[i.have++]=C}}if(i.mode===q)break;if(i.lens[256]===0){e.msg="invalid code -- missing end-of-block",i.mode=q;break}if(i.lenbits=9,M={bits:i.lenbits},S=In(Mp,i.lens,0,i.nlen,i.lencode,0,i.work,M),i.lenbits=M.bits,S){e.msg="invalid literal/lengths set",i.mode=q;break}if(i.distbits=6,i.distcode=i.distdyn,M={bits:i.distbits},S=In(Op,i.lens,i.nlen,i.ndist,i.distcode,0,i.work,M),i.distbits=M.bits,S){e.msg="invalid distances set",i.mode=q;break}if(i.mode=ta,t===ea)break e;case ta:i.mode=ia;case ia:if(o>=6&&c>=258){e.next_out=s,e.avail_out=c,e.next_in=a,e.avail_in=o,i.hold=l,i.bits=d,kv(e,p),s=e.next_out,r=e.output,c=e.avail_out,a=e.next_in,n=e.input,o=e.avail_in,l=i.hold,d=i.bits,i.mode===ct&&(i.back=-1);break}for(i.back=0;g=i.lencode[l&(1<<i.lenbits)-1],b=g>>>24,v=g>>>16&255,y=g&65535,!(b<=d);){if(o===0)break e;o--,l+=n[a++]<<d,d+=8}if(v&&(v&240)===0){for(x=b,w=v,T=y;g=i.lencode[T+((l&(1<<x+w)-1)>>x)],b=g>>>24,v=g>>>16&255,y=g&65535,!(x+b<=d);){if(o===0)break e;o--,l+=n[a++]<<d,d+=8}l>>>=x,d-=x,i.back+=x}if(l>>>=b,d-=b,i.back+=b,i.length=y,v===0){i.mode=Tp;break}if(v&32){i.back=-1,i.mode=ct;break}if(v&64){e.msg="invalid literal/length code",i.mode=q;break}i.extra=v&15,i.mode=Sp;case Sp:if(i.extra){for(_=i.extra;d<_;){if(o===0)break e;o--,l+=n[a++]<<d,d+=8}i.length+=l&(1<<i.extra)-1,l>>>=i.extra,d-=i.extra,i.back+=i.extra}i.was=i.length,i.mode=Ap;case Ap:for(;g=i.distcode[l&(1<<i.distbits)-1],b=g>>>24,v=g>>>16&255,y=g&65535,!(b<=d);){if(o===0)break e;o--,l+=n[a++]<<d,d+=8}if((v&240)===0){for(x=b,w=v,T=y;g=i.distcode[T+((l&(1<<x+w)-1)>>x)],b=g>>>24,v=g>>>16&255,y=g&65535,!(x+b<=d);){if(o===0)break e;o--,l+=n[a++]<<d,d+=8}l>>>=x,d-=x,i.back+=x}if(l>>>=b,d-=b,i.back+=b,v&64){e.msg="invalid distance code",i.mode=q;break}i.offset=y,i.extra=v&15,i.mode=Cp;case Cp:if(i.extra){for(_=i.extra;d<_;){if(o===0)break e;o--,l+=n[a++]<<d,d+=8}i.offset+=l&(1<<i.extra)-1,l>>>=i.extra,d-=i.extra,i.back+=i.extra}if(i.offset>i.dmax){e.msg="invalid distance too far back",i.mode=q;break}i.mode=kp;case kp:if(c===0)break e;if(f=p-c,i.offset>f){if(f=i.offset-f,f>i.whave&&i.sane){e.msg="invalid distance too far back",i.mode=q;break}f>i.wnext?(f-=i.wnext,m=i.wsize-f):m=i.wnext-f,f>i.length&&(f=i.length),h=i.window}else h=r,m=s-i.offset,f=i.length;f>c&&(f=c),c-=f,i.length-=f;do r[s++]=h[m++];while(--f);i.length===0&&(i.mode=ia);break;case Tp:if(c===0)break e;r[s++]=i.length,c--,i.mode=ia;break;case Co:if(i.wrap){for(;d<32;){if(o===0)break e;o--,l|=n[a++]<<d,d+=8}if(p-=c,e.total_out+=p,i.total+=p,p&&(e.adler=i.check=i.flags?Ye(i.check,r,p,s-p):Lo(i.check,r,p,s-p)),p=c,(i.flags?l:Pp(l))!==i.check){e.msg="incorrect data check",i.mode=q;break}l=0,d=0}i.mode=Lp;case Lp:if(i.wrap&&i.flags){for(;d<32;){if(o===0)break e;o--,l+=n[a++]<<d,d+=8}if(l!==(i.total&4294967295)){e.msg="incorrect length check",i.mode=q;break}l=0,d=0}i.mode=Rp;case Rp:S=Rv;break e;case q:S=Dp;break e;case Po:return Ro;case Mv:default:return Ae}return e.next_out=s,e.avail_out=c,e.next_in=a,e.avail_in=o,i.hold=l,i.bits=d,(i.wsize||p!==e.avail_out&&i.mode<q&&(i.mode<Co||t!==lp))&&Hp(e,e.output,e.next_out,p-e.avail_out)?(i.mode=Po,Ro):(u-=e.avail_in,p-=e.avail_out,e.total_in+=u,e.total_out+=p,i.total+=p,i.wrap&&p&&(e.adler=i.check=i.flags?Ye(i.check,r,p,e.next_out-p):Lo(i.check,r,p,e.next_out-p)),e.data_type=i.bits+(i.last?64:0)+(i.mode===ct?128:0)+(i.mode===ta||i.mode===Ao?256:0),(u===0&&p===0||t===lp)&&S===Yt&&(S=Iv),S)}function Uv(e){if(!e||!e.state)return Ae;var t=e.state;return t.window&&(t.window=null),e.state=null,Yt}function $v(e,t){var i;return!e||!e.state||(i=e.state,(i.wrap&2)===0)?Ae:(i.head=t,t.done=!1,Yt)}function qv(e,t){var i=t.length,n,r,a;return!e||!e.state||(n=e.state,n.wrap!==0&&n.mode!==na)?Ae:n.mode===na&&(r=1,r=Lo(r,t,i,0),r!==n.check)?Dp:(a=Hp(e,t,i,i),a?(n.mode=Po,Ro):(n.havedict=1,Yt))}Me.inflateReset=Bp;Me.inflateReset2=Fp;Me.inflateResetKeep=jp;Me.inflateInit=Fv;Me.inflateInit2=Np;Me.inflate=Hv;Me.inflateEnd=Uv;Me.inflateGetHeader=$v;Me.inflateSetDictionary=qv;Me.inflateInfo="pako inflate (from Nodeca project)"});var Io=R((jw,$p)=>{"use strict";$p.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}});var Gp=R((Bw,qp)=>{"use strict";function Gv(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}qp.exports=Gv});var Yp=R(On=>{"use strict";var Mi=Up(),Mn=st(),ra=bo(),K=Io(),Mo=Gr(),Wv=vo(),Yv=Gp(),Wp=Object.prototype.toString;function Vt(e){if(!(this instanceof Vt))return new Vt(e);this.options=Mn.assign({chunkSize:16384,windowBits:0,to:""},e||{});var t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,t.windowBits===0&&(t.windowBits=-15)),t.windowBits>=0&&t.windowBits<16&&!(e&&e.windowBits)&&(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&(t.windowBits&15)===0&&(t.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new Wv,this.strm.avail_out=0;var i=Mi.inflateInit2(this.strm,t.windowBits);if(i!==K.Z_OK)throw new Error(Mo[i]);if(this.header=new Yv,Mi.inflateGetHeader(this.strm,this.header),t.dictionary&&(typeof t.dictionary=="string"?t.dictionary=ra.string2buf(t.dictionary):Wp.call(t.dictionary)==="[object ArrayBuffer]"&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(i=Mi.inflateSetDictionary(this.strm,t.dictionary),i!==K.Z_OK)))throw new Error(Mo[i])}Vt.prototype.push=function(e,t){var i=this.strm,n=this.options.chunkSize,r=this.options.dictionary,a,s,o,c,l,d=!1;if(this.ended)return!1;s=t===~~t?t:t===!0?K.Z_FINISH:K.Z_NO_FLUSH,typeof e=="string"?i.input=ra.binstring2buf(e):Wp.call(e)==="[object ArrayBuffer]"?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;do{if(i.avail_out===0&&(i.output=new Mn.Buf8(n),i.next_out=0,i.avail_out=n),a=Mi.inflate(i,K.Z_NO_FLUSH),a===K.Z_NEED_DICT&&r&&(a=Mi.inflateSetDictionary(this.strm,r)),a===K.Z_BUF_ERROR&&d===!0&&(a=K.Z_OK,d=!1),a!==K.Z_STREAM_END&&a!==K.Z_OK)return this.onEnd(a),this.ended=!0,!1;i.next_out&&(i.avail_out===0||a===K.Z_STREAM_END||i.avail_in===0&&(s===K.Z_FINISH||s===K.Z_SYNC_FLUSH))&&(this.options.to==="string"?(o=ra.utf8border(i.output,i.next_out),c=i.next_out-o,l=ra.buf2string(i.output,o),i.next_out=c,i.avail_out=n-c,c&&Mn.arraySet(i.output,i.output,o,c,0),this.onData(l)):this.onData(Mn.shrinkBuf(i.output,i.next_out))),i.avail_in===0&&i.avail_out===0&&(d=!0)}while((i.avail_in>0||i.avail_out===0)&&a!==K.Z_STREAM_END);return a===K.Z_STREAM_END&&(s=K.Z_FINISH),s===K.Z_FINISH?(a=Mi.inflateEnd(this.strm),this.onEnd(a),this.ended=!0,a===K.Z_OK):(s===K.Z_SYNC_FLUSH&&(this.onEnd(K.Z_OK),i.avail_out=0),!0)};Vt.prototype.onData=function(e){this.chunks.push(e)};Vt.prototype.onEnd=function(e){e===K.Z_OK&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=Mn.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};function Oo(e,t){var i=new Vt(t);if(i.push(e,!0),i.err)throw i.msg||Mo[i.err];return i.result}function Vv(e,t){return t=t||{},t.raw=!0,Oo(e,t)}On.Inflate=Vt;On.inflate=Oo;On.inflateRaw=Vv;On.ungzip=Oo});var Xp=R((Nw,Kp)=>{"use strict";var Kv=st().assign,Xv=Ju(),Zv=Yp(),Jv=Io(),Vp={};Kv(Vp,Xv,Zv,Jv);Kp.exports=Vp});var Jp=R(sa=>{"use strict";var Qv=typeof Uint8Array!="undefined"&&typeof Uint16Array!="undefined"&&typeof Uint32Array!="undefined",ey=Xp(),Zp=G(),aa=me(),ty=Qv?"uint8array":"array";sa.magic="\b\0";function Kt(e,t){aa.call(this,"FlateWorker/"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}Zp.inherits(Kt,aa);Kt.prototype.processChunk=function(e){this.meta=e.meta,this._pako===null&&this._createPako(),this._pako.push(Zp.transformTo(ty,e.data),!1)};Kt.prototype.flush=function(){aa.prototype.flush.call(this),this._pako===null&&this._createPako(),this._pako.push([],!0)};Kt.prototype.cleanUp=function(){aa.prototype.cleanUp.call(this),this._pako=null};Kt.prototype._createPako=function(){this._pako=new ey[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var e=this;this._pako.onData=function(t){e.push({data:t,meta:e.meta})}};sa.compressWorker=function(e){return new Kt("Deflate",e)};sa.uncompressWorker=function(){return new Kt("Inflate",{})}});var zo=R(Do=>{"use strict";var Qp=me();Do.STORE={magic:"\0\0",compressWorker:function(){return new Qp("STORE compression")},uncompressWorker:function(){return new Qp("STORE decompression")}};Do.DEFLATE=Jp()});var jo=R(Xt=>{"use strict";Xt.LOCAL_FILE_HEADER="PK";Xt.CENTRAL_FILE_HEADER="PK";Xt.CENTRAL_DIRECTORY_END="PK";Xt.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK\x07";Xt.ZIP64_CENTRAL_DIRECTORY_END="PK";Xt.DATA_DESCRIPTOR="PK\x07\b"});var rf=R((qw,nf)=>{"use strict";var Oi=G(),Di=me(),Bo=_i(),ef=Nr(),oa=jo(),H=function(e,t){var i="",n;for(n=0;n<t;n++)i+=String.fromCharCode(e&255),e=e>>>8;return i},iy=function(e,t){var i=e;return e||(i=t?16893:33204),(i&65535)<<16},ny=function(e){return(e||0)&63},tf=function(e,t,i,n,r,a){var s=e.file,o=e.compression,c=a!==Bo.utf8encode,l=Oi.transformTo("string",a(s.name)),d=Oi.transformTo("string",Bo.utf8encode(s.name)),u=s.comment,p=Oi.transformTo("string",a(u)),f=Oi.transformTo("string",Bo.utf8encode(u)),m=d.length!==s.name.length,h=f.length!==u.length,g,b,v="",y="",x="",w=s.dir,T=s.date,C={crc32:0,compressedSize:0,uncompressedSize:0};(!t||i)&&(C.crc32=e.crc32,C.compressedSize=e.compressedSize,C.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),!c&&(m||h)&&(S|=2048);var L=0,M=0;w&&(L|=16),r==="UNIX"?(M=798,L|=iy(s.unixPermissions,w)):(M=20,L|=ny(s.dosPermissions,w)),g=T.getUTCHours(),g=g<<6,g=g|T.getUTCMinutes(),g=g<<5,g=g|T.getUTCSeconds()/2,b=T.getUTCFullYear()-1980,b=b<<4,b=b|T.getUTCMonth()+1,b=b<<5,b=b|T.getUTCDate(),m&&(y=H(1,1)+H(ef(l),4)+d,v+="up"+H(y.length,2)+y),h&&(x=H(1,1)+H(ef(p),4)+f,v+="uc"+H(x.length,2)+x);var _="";_+=`
|
|
2
|
+
\0`,_+=H(S,2),_+=o.magic,_+=H(g,2),_+=H(b,2),_+=H(C.crc32,4),_+=H(C.compressedSize,4),_+=H(C.uncompressedSize,4),_+=H(l.length,2),_+=H(v.length,2);var E=oa.LOCAL_FILE_HEADER+_+l+v,A=oa.CENTRAL_FILE_HEADER+H(M,2)+_+H(p.length,2)+"\0\0\0\0"+H(L,4)+H(n,4)+l+v+p;return{fileRecord:E,dirRecord:A}},ry=function(e,t,i,n,r){var a="",s=Oi.transformTo("string",r(n));return a=oa.CENTRAL_DIRECTORY_END+"\0\0\0\0"+H(e,2)+H(e,2)+H(t,4)+H(i,4)+H(s.length,2)+s,a},ay=function(e){var t="";return t=oa.DATA_DESCRIPTOR+H(e.crc32,4)+H(e.compressedSize,4)+H(e.uncompressedSize,4),t};function Oe(e,t,i,n){Di.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=i,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}Oi.inherits(Oe,Di);Oe.prototype.push=function(e){var t=e.meta.percent||0,i=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,Di.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:i?(t+100*(i-n-1))/i:100}}))};Oe.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var i=tf(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:i.fileRecord,meta:{percent:0}})}else this.accumulate=!0};Oe.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,i=tf(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(i.dirRecord),t)this.push({data:ay(e),meta:{percent:100}});else for(this.push({data:i.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null};Oe.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t<this.dirRecords.length;t++)this.push({data:this.dirRecords[t],meta:{percent:100}});var i=this.bytesWritten-e,n=ry(this.dirRecords.length,i,e,this.zipComment,this.encodeFileName);this.push({data:n,meta:{percent:100}})};Oe.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()};Oe.prototype.registerPrevious=function(e){this._sources.push(e);var t=this;return e.on("data",function(i){t.processChunk(i)}),e.on("end",function(){t.closedSource(t.previous.streamInfo),t._sources.length?t.prepareNextSource():t.end()}),e.on("error",function(i){t.error(i)}),this};Oe.prototype.resume=function(){if(!Di.prototype.resume.call(this))return!1;if(!this.previous&&this._sources.length)return this.prepareNextSource(),!0;if(!this.previous&&!this._sources.length&&!this.generatedError)return this.end(),!0};Oe.prototype.error=function(e){var t=this._sources;if(!Di.prototype.error.call(this,e))return!1;for(var i=0;i<t.length;i++)try{t[i].error(e)}catch{}return!0};Oe.prototype.lock=function(){Di.prototype.lock.call(this);for(var e=this._sources,t=0;t<e.length;t++)e[t].lock()};nf.exports=Oe});var sf=R(af=>{"use strict";var sy=zo(),oy=rf(),ly=function(e,t){var i=e||t,n=sy[i];if(!n)throw new Error(i+" is not a valid compression method !");return n};af.generateWorker=function(e,t,i){var n=new oy(t.streamFiles,i,t.platform,t.encodeFileName),r=0;try{e.forEach(function(a,s){r++;var o=ly(s.options.compression,t.compression),c=s.options.compressionOptions||t.compressionOptions||{},l=s.dir,d=s.date;s._compressWorker(o,c).withStreamInfo("file",{name:a,dir:l,date:d,comment:s.comment||"",unixPermissions:s.unixPermissions,dosPermissions:s.dosPermissions}).pipe(n)}),n.entriesCount=r}catch(a){n.error(a)}return n}});var lf=R((Ww,of)=>{"use strict";var cy=G(),la=me();function Dn(e,t){la.call(this,"Nodejs stream input adapter for "+e),this._upstreamEnded=!1,this._bindStream(t)}cy.inherits(Dn,la);Dn.prototype._bindStream=function(e){var t=this;this._stream=e,e.pause(),e.on("data",function(i){t.push({data:i,meta:{percent:0}})}).on("error",function(i){t.isPaused?this.generatedError=i:t.error(i)}).on("end",function(){t.isPaused?t._upstreamEnded=!0:t.end()})};Dn.prototype.pause=function(){return la.prototype.pause.call(this)?(this._stream.pause(),!0):!1};Dn.prototype.resume=function(){return la.prototype.resume.call(this)?(this._upstreamEnded?this.end():this._stream.resume(),!0):!1};of.exports=Dn});var vf=R((Yw,bf)=>{"use strict";var dy=_i(),zn=G(),pf=me(),uy=Us(),ff=$s(),cf=Hr(),py=cu(),fy=sf(),df=un(),hy=lf(),hf=function(e,t,i){var n=zn.getTypeOf(t),r,a=zn.extend(i||{},ff);a.date=a.date||new Date,a.compression!==null&&(a.compression=a.compression.toUpperCase()),typeof a.unixPermissions=="string"&&(a.unixPermissions=parseInt(a.unixPermissions,8)),a.unixPermissions&&a.unixPermissions&16384&&(a.dir=!0),a.dosPermissions&&a.dosPermissions&16&&(a.dir=!0),a.dir&&(e=gf(e)),a.createFolders&&(r=gy(e))&&mf.call(this,r,!0);var s=n==="string"&&a.binary===!1&&a.base64===!1;(!i||typeof i.binary=="undefined")&&(a.binary=!s);var o=t instanceof cf&&t.uncompressedSize===0;(o||a.dir||!t||t.length===0)&&(a.base64=!1,a.binary=!0,t="",a.compression="STORE",n="string");var c=null;t instanceof cf||t instanceof pf?c=t:df.isNode&&df.isStream(t)?c=new hy(e,t):c=zn.prepareContent(e,t,a.binary,a.optimizedBinaryString,a.base64);var l=new py(e,c,a);this.files[e]=l},gy=function(e){e.slice(-1)==="/"&&(e=e.substring(0,e.length-1));var t=e.lastIndexOf("/");return t>0?e.substring(0,t):""},gf=function(e){return e.slice(-1)!=="/"&&(e+="/"),e},mf=function(e,t){return t=typeof t!="undefined"?t:ff.createFolders,e=gf(e),this.files[e]||hf.call(this,e,null,{dir:!0,createFolders:t}),this.files[e]};function uf(e){return Object.prototype.toString.call(e)==="[object RegExp]"}var my={load:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},forEach:function(e){var t,i,n;for(t in this.files)n=this.files[t],i=t.slice(this.root.length,t.length),i&&t.slice(0,this.root.length)===this.root&&e(i,n)},filter:function(e){var t=[];return this.forEach(function(i,n){e(i,n)&&t.push(n)}),t},file:function(e,t,i){if(arguments.length===1)if(uf(e)){var n=e;return this.filter(function(a,s){return!s.dir&&n.test(a)})}else{var r=this.files[this.root+e];return r&&!r.dir?r:null}else e=this.root+e,hf.call(this,e,t,i);return this},folder:function(e){if(!e)return this;if(uf(e))return this.filter(function(r,a){return a.dir&&e.test(r)});var t=this.root+e,i=mf.call(this,t),n=this.clone();return n.root=i.name,n},remove:function(e){e=this.root+e;var t=this.files[e];if(t||(e.slice(-1)!=="/"&&(e+="/"),t=this.files[e]),t&&!t.dir)delete this.files[e];else for(var i=this.filter(function(r,a){return a.name.slice(0,e.length)===e}),n=0;n<i.length;n++)delete this.files[i[n].name];return this},generate:function(){throw new Error("This method has been removed in JSZip 3.0, please check the upgrade guide.")},generateInternalStream:function(e){var t,i={};try{if(i=zn.extend(e||{},{streamFiles:!1,compression:"STORE",compressionOptions:null,type:"",platform:"DOS",comment:null,mimeType:"application/zip",encodeFileName:dy.utf8encode}),i.type=i.type.toLowerCase(),i.compression=i.compression.toUpperCase(),i.type==="binarystring"&&(i.type="string"),!i.type)throw new Error("No output type specified.");zn.checkSupport(i.type),(i.platform==="darwin"||i.platform==="freebsd"||i.platform==="linux"||i.platform==="sunos")&&(i.platform="UNIX"),i.platform==="win32"&&(i.platform="DOS");var n=i.comment||this.comment||"";t=fy.generateWorker(this,i,n)}catch(r){t=new pf("error"),t.error(r)}return new uy(t,i.type||"string",i.mimeType)},generateAsync:function(e,t){return this.generateInternalStream(e).accumulate(t)},generateNodeStream:function(e,t){return e=e||{},e.type||(e.type="nodebuffer"),this.generateInternalStream(e).toNodejsStream(t)}};bf.exports=my});var Fo=R((Vw,xf)=>{"use strict";var by=G();function yf(e){this.data=e,this.length=e.length,this.index=0,this.zero=0}yf.prototype={checkOffset:function(e){this.checkIndex(this.index+e)},checkIndex:function(e){if(this.length<this.zero+e||e<0)throw new Error("End of data reached (data length = "+this.length+", asked index = "+e+"). Corrupted zip ?")},setIndex:function(e){this.checkIndex(e),this.index=e},skip:function(e){this.setIndex(this.index+e)},byteAt:function(){},readInt:function(e){var t=0,i;for(this.checkOffset(e),i=this.index+e-1;i>=this.index;i--)t=(t<<8)+this.byteAt(i);return this.index+=e,t},readString:function(e){return by.transformTo("string",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC((e>>25&127)+1980,(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(e&31)<<1))}};xf.exports=yf});var No=R((Kw,_f)=>{"use strict";var wf=Fo(),vy=G();function zi(e){wf.call(this,e);for(var t=0;t<this.data.length;t++)e[t]=e[t]&255}vy.inherits(zi,wf);zi.prototype.byteAt=function(e){return this.data[this.zero+e]};zi.prototype.lastIndexOfSignature=function(e){for(var t=e.charCodeAt(0),i=e.charCodeAt(1),n=e.charCodeAt(2),r=e.charCodeAt(3),a=this.length-4;a>=0;--a)if(this.data[a]===t&&this.data[a+1]===i&&this.data[a+2]===n&&this.data[a+3]===r)return a-this.zero;return-1};zi.prototype.readAndCheckSignature=function(e){var t=e.charCodeAt(0),i=e.charCodeAt(1),n=e.charCodeAt(2),r=e.charCodeAt(3),a=this.readData(4);return t===a[0]&&i===a[1]&&n===a[2]&&r===a[3]};zi.prototype.readData=function(e){if(this.checkOffset(e),e===0)return[];var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t};_f.exports=zi});var Af=R((Xw,Sf)=>{"use strict";var Ef=Fo(),yy=G();function ji(e){Ef.call(this,e)}yy.inherits(ji,Ef);ji.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)};ji.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero};ji.prototype.readAndCheckSignature=function(e){var t=this.readData(4);return e===t};ji.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t};Sf.exports=ji});var Uo=R((Zw,kf)=>{"use strict";var Cf=No(),xy=G();function Ho(e){Cf.call(this,e)}xy.inherits(Ho,Cf);Ho.prototype.readData=function(e){if(this.checkOffset(e),e===0)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t};kf.exports=Ho});var Rf=R((Jw,Lf)=>{"use strict";var Tf=Uo(),wy=G();function $o(e){Tf.call(this,e)}wy.inherits($o,Tf);$o.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t};Lf.exports=$o});var qo=R((Qw,If)=>{"use strict";var ca=G(),Pf=rt(),_y=No(),Ey=Af(),Sy=Rf(),Ay=Uo();If.exports=function(e){var t=ca.getTypeOf(e);return ca.checkSupport(t),t==="string"&&!Pf.uint8array?new Ey(e):t==="nodebuffer"?new Sy(e):Pf.uint8array?new Ay(ca.transformTo("uint8array",e)):new _y(ca.transformTo("array",e))}});var zf=R((e1,Df)=>{"use strict";var Go=qo(),Lt=G(),Cy=Hr(),Mf=Nr(),da=_i(),ua=zo(),ky=rt(),Ty=0,Ly=3,Ry=function(e){for(var t in ua)if(Object.prototype.hasOwnProperty.call(ua,t)&&ua[t].magic===e)return ua[t];return null};function Of(e,t){this.options=e,this.loadOptions=t}Of.prototype={isEncrypted:function(){return(this.bitFlag&1)===1},useUTF8:function(){return(this.bitFlag&2048)===2048},readLocalPart:function(e){var t,i;if(e.skip(22),this.fileNameLength=e.readInt(2),i=e.readInt(2),this.fileName=e.readData(this.fileNameLength),e.skip(i),this.compressedSize===-1||this.uncompressedSize===-1)throw new Error("Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)");if(t=Ry(this.compressionMethod),t===null)throw new Error("Corrupted zip : compression "+Lt.pretty(this.compressionMethod)+" unknown (inner file : "+Lt.transformTo("string",this.fileName)+")");this.decompressed=new Cy(this.compressedSize,this.uncompressedSize,this.crc32,t,e.readData(this.compressedSize))},readCentralPart:function(e){this.versionMadeBy=e.readInt(2),e.skip(2),this.bitFlag=e.readInt(2),this.compressionMethod=e.readString(2),this.date=e.readDate(),this.crc32=e.readInt(4),this.compressedSize=e.readInt(4),this.uncompressedSize=e.readInt(4);var t=e.readInt(2);if(this.extraFieldsLength=e.readInt(2),this.fileCommentLength=e.readInt(2),this.diskNumberStart=e.readInt(2),this.internalFileAttributes=e.readInt(2),this.externalFileAttributes=e.readInt(4),this.localHeaderOffset=e.readInt(4),this.isEncrypted())throw new Error("Encrypted zip are not supported");e.skip(t),this.readExtraFields(e),this.parseZIP64ExtraField(e),this.fileComment=e.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var e=this.versionMadeBy>>8;this.dir=!!(this.externalFileAttributes&16),e===Ty&&(this.dosPermissions=this.externalFileAttributes&63),e===Ly&&(this.unixPermissions=this.externalFileAttributes>>16&65535),!this.dir&&this.fileNameStr.slice(-1)==="/"&&(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=Go(this.extraFields[1].value);this.uncompressedSize===Lt.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===Lt.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===Lt.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===Lt.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t=e.index+this.extraFieldsLength,i,n,r;for(this.extraFields||(this.extraFields={});e.index+4<t;)i=e.readInt(2),n=e.readInt(2),r=e.readData(n),this.extraFields[i]={id:i,length:n,value:r};e.setIndex(t)},handleUTF8:function(){var e=ky.uint8array?"uint8array":"array";if(this.useUTF8())this.fileNameStr=da.utf8decode(this.fileName),this.fileCommentStr=da.utf8decode(this.fileComment);else{var t=this.findExtraFieldUnicodePath();if(t!==null)this.fileNameStr=t;else{var i=Lt.transformTo(e,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(i)}var n=this.findExtraFieldUnicodeComment();if(n!==null)this.fileCommentStr=n;else{var r=Lt.transformTo(e,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(r)}}},findExtraFieldUnicodePath:function(){var e=this.extraFields[28789];if(e){var t=Go(e.value);return t.readInt(1)!==1||Mf(this.fileName)!==t.readInt(4)?null:da.utf8decode(t.readData(e.length-5))}return null},findExtraFieldUnicodeComment:function(){var e=this.extraFields[25461];if(e){var t=Go(e.value);return t.readInt(1)!==1||Mf(this.fileComment)!==t.readInt(4)?null:da.utf8decode(t.readData(e.length-5))}return null}};Df.exports=Of});var Ff=R((t1,Bf)=>{"use strict";var Py=qo(),dt=G(),De=jo(),Iy=zf(),My=rt();function jf(e){this.files=[],this.loadOptions=e}jf.prototype={checkSignature:function(e){if(!this.reader.readAndCheckSignature(e)){this.reader.index-=4;var t=this.reader.readString(4);throw new Error("Corrupted zip or bug: unexpected signature ("+dt.pretty(t)+", expected "+dt.pretty(e)+")")}},isSignature:function(e,t){var i=this.reader.index;this.reader.setIndex(e);var n=this.reader.readString(4),r=n===t;return this.reader.setIndex(i),r},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var e=this.reader.readData(this.zipCommentLength),t=My.uint8array?"uint8array":"array",i=dt.transformTo(t,e);this.zipComment=this.loadOptions.decodeFileName(i)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var e=this.zip64EndOfCentralSize-44,t=0,i,n,r;t<e;)i=this.reader.readInt(2),n=this.reader.readInt(4),r=this.reader.readData(n),this.zip64ExtensibleData[i]={id:i,length:n,value:r}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),this.disksCount>1)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var e,t;for(e=0;e<this.files.length;e++)t=this.files[e],this.reader.setIndex(t.localHeaderOffset),this.checkSignature(De.LOCAL_FILE_HEADER),t.readLocalPart(this.reader),t.handleUTF8(),t.processAttributes()},readCentralDir:function(){var e;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(De.CENTRAL_FILE_HEADER);)e=new Iy({zip64:this.zip64},this.loadOptions),e.readCentralPart(this.reader),this.files.push(e);if(this.centralDirRecords!==this.files.length&&this.centralDirRecords!==0&&this.files.length===0)throw new Error("Corrupted zip or bug: expected "+this.centralDirRecords+" records in central dir, got "+this.files.length)},readEndOfCentral:function(){var e=this.reader.lastIndexOfSignature(De.CENTRAL_DIRECTORY_END);if(e<0){var t=!this.isSignature(0,De.LOCAL_FILE_HEADER);throw t?new Error("Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html"):new Error("Corrupted zip: can't find end of central directory")}this.reader.setIndex(e);var i=e;if(this.checkSignature(De.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===dt.MAX_VALUE_16BITS||this.diskWithCentralDirStart===dt.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===dt.MAX_VALUE_16BITS||this.centralDirRecords===dt.MAX_VALUE_16BITS||this.centralDirSize===dt.MAX_VALUE_32BITS||this.centralDirOffset===dt.MAX_VALUE_32BITS){if(this.zip64=!0,e=this.reader.lastIndexOfSignature(De.ZIP64_CENTRAL_DIRECTORY_LOCATOR),e<0)throw new Error("Corrupted zip: can't find the ZIP64 end of central directory locator");if(this.reader.setIndex(e),this.checkSignature(De.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,De.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(De.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error("Corrupted zip: can't find the ZIP64 end of central directory");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(De.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var n=this.centralDirOffset+this.centralDirSize;this.zip64&&(n+=20,n+=12+this.zip64EndOfCentralSize);var r=i-n;if(r>0)this.isSignature(i,De.CENTRAL_FILE_HEADER)||(this.reader.zero=r);else if(r<0)throw new Error("Corrupted zip: missing "+Math.abs(r)+" bytes.")},prepareReader:function(e){this.reader=Py(e)},load:function(e){this.prepareReader(e),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}};Bf.exports=jf});var Uf=R((i1,Hf)=>{"use strict";var Wo=G(),pa=yi(),Oy=_i(),Dy=Ff(),zy=Ws(),Nf=un();function jy(e){return new pa.Promise(function(t,i){var n=e.decompressed.getContentWorker().pipe(new zy);n.on("error",function(r){i(r)}).on("end",function(){n.streamInfo.crc32!==e.decompressed.crc32?i(new Error("Corrupted zip : CRC32 mismatch")):t()}).resume()})}Hf.exports=function(e,t){var i=this;return t=Wo.extend(t||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:Oy.utf8decode}),Nf.isNode&&Nf.isStream(e)?pa.Promise.reject(new Error("JSZip can't accept a stream when loading a zip file.")):Wo.prepareContent("the loaded zip file",e,!0,t.optimizedBinaryString,t.base64).then(function(n){var r=new Dy(t);return r.load(n),r}).then(function(r){var a=[pa.Promise.resolve(r)],s=r.files;if(t.checkCRC32)for(var o=0;o<s.length;o++)a.push(jy(s[o]));return pa.Promise.all(a)}).then(function(r){for(var a=r.shift(),s=a.files,o=0;o<s.length;o++){var c=s[o],l=c.fileNameStr,d=Wo.resolve(c.fileNameStr);i.file(d,c.decompressed,{binary:!0,optimizedBinaryString:!0,date:c.date,dir:c.dir,comment:c.fileCommentStr.length?c.fileCommentStr:null,unixPermissions:c.unixPermissions,dosPermissions:c.dosPermissions,createFolders:t.createFolders}),c.dir||(i.file(d).unsafeOriginalName=l)}return a.zipComment.length&&(i.comment=a.zipComment),i})}});var qf=R((n1,$f)=>{"use strict";function Ce(){if(!(this instanceof Ce))return new Ce;if(arguments.length)throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.");this.files=Object.create(null),this.comment=null,this.root="",this.clone=function(){var e=new Ce;for(var t in this)typeof this[t]!="function"&&(e[t]=this[t]);return e}}Ce.prototype=vf();Ce.prototype.loadAsync=Uf();Ce.support=rt();Ce.defaults=$s();Ce.version="3.10.1";Ce.loadAsync=function(e,t){return new Ce().loadAsync(e,t)};Ce.external=yi();$f.exports=Ce});import{Application as yx}from"pixi.js";var vt={};function sr(e,t,i=!1){vt[e]||(vt[e]=[]),vt[e].push({fn:t,once:i})}function Xa(e,t){if(vt[e]){if(!t){delete vt[e];return}vt[e]=vt[e].filter(i=>i.fn!==t)}}function or(e,...t){let i=vt[e];if(i)for(let n of[...i])n.fn(...t),n.once&&Xa(e,n.fn)}function we(e,t){sr(e,t,!0)}var Q=null,Re=[],si=null;function lc(e){Q=e,Re=[],si!==null&&(clearTimeout(si),si=null)}function cc(){var e,t,i;return{endpoint:(Q==null?void 0:Q.endpoint)||"",transport:(Q==null?void 0:Q.transport)||"beacon",batchSize:(e=Q==null?void 0:Q.batchSize)!=null?e:10,flushIntervalMs:(t=Q==null?void 0:Q.flushIntervalMs)!=null?t:300,maxQueue:(i=Q==null?void 0:Q.maxQueue)!=null?i:200,debug:!!(Q!=null&&Q.debug)}}async function sc(e,t,i,n){let r=JSON.stringify(t);if(i==="beacon"&&typeof navigator!="undefined"&&typeof navigator.sendBeacon=="function")try{let a=navigator.sendBeacon(e,new Blob([r],{type:"application/json"}));n&&console.log("[handler.telemetry] beacon",a,t);return}catch(a){n&&console.warn("[handler.telemetry] beacon failed, fallback to fetch",a)}try{await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:r,keepalive:!0}),n&&console.log("[handler.telemetry] fetch",t)}catch(a){n&&console.warn("[handler.telemetry] fetch failed",a)}}function Za(e,t){let i=cc();if(t&&i.endpoint){if(Re.push(e),Re.length>i.maxQueue&&(Re=Re.slice(Re.length-i.maxQueue)),Re.length>=i.batchSize){oc();return}si===null&&(si=window.setTimeout(()=>{si=null,oc()},i.flushIntervalMs))}}async function oc(){let e=cc();if(!e.endpoint||Re.length===0)return;let t=Re.splice(0,e.batchSize);await sc(e.endpoint,{events:t},e.transport,e.debug),Re.length>0&&await sc(e.endpoint,{events:Re.splice(0,e.batchSize)},e.transport,e.debug)}var _e=0,ng=_e++,dc=_e++,uc=_e++,pc=_e++,fc=_e++,hc=_e++,gc=_e++,mc=_e++,bc=_e++,vc=_e++,yc=_e++,xc=_e++,W=ng;function wc(){return W===dc}function _c(){return W===uc}function Ec(){return W===pc}function Sc(){return W===fc}function oi(){return W===hc}function li(){return W===gc}function Ac(){return W===mc}function Cc(){return W===bc}function kc(){return W===vc}function Ja(){return W===yc}function Qa(){return W===xc}function Tc(){let e=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none",t=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed";if(e==="mraid")try{mraid.getState(),W=dc;return}catch{}else if(e==="dapi")try{dapi.isReady(),W=uc;return}catch{}if(t==="facebook")try{typeof FbPlayableAd!="undefined"&&(W=pc)}catch{}else if(t==="google")try{typeof ExitApi!="undefined"&&(W=fc)}catch{}else if(t==="mintegral")window.gameReady&&(W=hc);else if(t==="tapjoy")window.TJ_API&&(W=gc);else if(t==="tiktok")window.openAppStore&&(W=mc);else if(t==="smadex")try{window.smxTracking&&(W=bc)}catch{}else if(t==="snapchat")try{window.ScPlayableAd&&(W=vc)}catch{}else t==="vungle"?W=yc:(e==="nucleo"||t==="nucleo")&&(W=xc)}import es from"lottie-web";var Lc=es;typeof window!="undefined"&&(window.lottie=es,window.__baseLottie=es);function ee(e,t){let i=(r,a)=>a===0?r:i(a,r%a),n=i(e,t);return`${e/n}:${t/n}`}var l0=[{id:"iphone-15-pro-max",label:"iPhone 15 Pro Max",width:430,height:932,category:"iphone",ratio:ee(430,932)},{id:"iphone-15-pro",label:"iPhone 15 Pro",width:393,height:852,category:"iphone",ratio:ee(393,852)},{id:"iphone-15",label:"iPhone 15",width:393,height:852,category:"iphone",ratio:ee(393,852)},{id:"iphone-14",label:"iPhone 14",width:390,height:844,category:"iphone",ratio:ee(390,844)},{id:"iphone-se",label:"iPhone SE",width:375,height:667,category:"iphone",ratio:ee(375,667)},{id:"iphone-12-mini",label:"iPhone 12 Mini",width:360,height:780,category:"iphone",ratio:ee(360,780)}],c0=[{id:"pixel-8-pro",label:"Pixel 8 Pro",width:448,height:998,category:"android",ratio:ee(448,998)},{id:"pixel-8",label:"Pixel 8",width:412,height:915,category:"android",ratio:ee(412,915)},{id:"samsung-s24-ultra",label:"Samsung S24 Ultra",width:412,height:915,category:"android",ratio:ee(412,915)},{id:"samsung-s24",label:"Samsung S24",width:360,height:780,category:"android",ratio:ee(360,780)},{id:"samsung-a54",label:"Samsung A54",width:412,height:915,category:"android",ratio:ee(412,915)},{id:"oneplus-12",label:"OnePlus 12",width:412,height:915,category:"android",ratio:ee(412,915)}],d0=[{id:"ipad-pro-12",label:'iPad Pro 12.9"',width:1024,height:1366,category:"tablet",ratio:ee(1024,1366)},{id:"ipad-pro-11",label:'iPad Pro 11"',width:834,height:1194,category:"tablet",ratio:ee(834,1194)},{id:"ipad-air",label:"iPad Air",width:820,height:1180,category:"tablet",ratio:ee(820,1180)},{id:"ipad-mini",label:"iPad Mini",width:768,height:1024,category:"tablet",ratio:ee(768,1024)},{id:"samsung-tab-s9",label:"Samsung Tab S9",width:800,height:1280,category:"tablet",ratio:ee(800,1280)}],ts=[{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:ee(390,844),mraidScale:.7},{id:"ipad-mini",label:"iPad Mini",width:768,height:1024,category:"playable",ratio:ee(768,1024),mraidScale:.7}];var Rc=[...ts],Pc=[{category:"playable",label:"Playable Ad",devices:ts}],is=ts[0];function ci(e){return Rc.find(t=>t.id===e)||is}function u0(e){return Rc.filter(t=>t.category===e)}var lr=class{constructor(){this.root=null;this.listContainer=null;this.searchInput=null;this.selectedId=null;this.options=null;this.retryTimer=null;this.filterMode="all"}render(){return`
|
|
3
|
+
<div class="scene-panel scene-objects panel-accent-teal" data-panel="scene-objects" style="left:16px; top:72px;">
|
|
4
|
+
<div class="scene-panel-header" data-panel-handle>
|
|
5
|
+
<div class="panel-title">
|
|
6
|
+
<span class="panel-pill">Hierarchy</span>
|
|
7
|
+
<span class="panel-title-text">Scene Objects</span>
|
|
8
|
+
</div>
|
|
9
|
+
<div class="scene-panel-actions">
|
|
10
|
+
<button class="scene-panel-toggle" type="button" data-panel-toggle>\u25BE</button>
|
|
11
|
+
</div>
|
|
12
|
+
</div>
|
|
13
|
+
<div class="scene-panel-body">
|
|
14
|
+
<div class="scene-panel-search">
|
|
15
|
+
<input type="text" id="scene-object-search" placeholder="Search ids, tags, UI">
|
|
16
|
+
</div>
|
|
17
|
+
<div class="scene-panel-filters">
|
|
18
|
+
<button class="filter-chip active" type="button" data-filter="all">All</button>
|
|
19
|
+
<button class="filter-chip" type="button" data-filter="ui">UI</button>
|
|
20
|
+
<button class="filter-chip" type="button" data-filter="scene">Scene</button>
|
|
21
|
+
</div>
|
|
22
|
+
<div class="scene-object-list" data-object-list></div>
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
`}initialize(t,i){var r,a,s,o,c;this.options=i,this.root=t.querySelector('[data-panel="scene-objects"]'),this.listContainer=(r=this.root)==null?void 0:r.querySelector("[data-object-list]"),this.searchInput=(a=this.root)==null?void 0:a.querySelector("#scene-object-search"),(s=this.searchInput)==null||s.addEventListener("input",()=>this.refreshObjects());let n=Array.from(((o=this.root)==null?void 0:o.querySelectorAll("[data-filter]"))||[]);n.forEach(l=>{l.addEventListener("click",()=>{let d=l.dataset.filter;d&&(this.filterMode=d,n.forEach(u=>u.classList.toggle("active",u.dataset.filter===d)),this.refreshObjects())})}),(c=this.root)==null||c.addEventListener("click",l=>{let d=l.target;if(!d)return;let u=d.closest("[data-object-id]");if(!u)return;let p=u.dataset.objectId;p&&this.select(p)})}setSelected(t){if(this.selectedId=t,!this.listContainer)return;Array.from(this.listContainer.querySelectorAll("[data-object-id]")).forEach(n=>{n.classList.toggle("selected",n.dataset.objectId===t)})}refreshObjects(){var p;if(!this.listContainer)return;let t=window.getEditableObjectList,i=window.getEditableObjectConfig,n=window.refreshEditableConfigIndex;if(typeof n=="function"&&n(),typeof t!="function"){this.scheduleRetry();return}let r=t();if(!Array.isArray(r)||r.length===0){let f=window.__editableObjectConfigs;f&&typeof f.keys=="function"&&(r=Array.from(f.keys()))}if(!Array.isArray(r)||r.length===0){this.scheduleRetry();return}let a=(((p=this.searchInput)==null?void 0:p.value)||"").trim().toLowerCase(),s=[];r.forEach(f=>{var S,L,M,_;let m=typeof i=="function"?i(f):null;if(!m){let E=window.__editableObjectConfigs;E&&typeof E.get=="function"&&(m=(S=E.get(f))!=null?S:null)}let h=(((L=m==null?void 0:m.identity)==null?void 0:L.category)||"scene").toString(),g=(((M=m==null?void 0:m.identity)==null?void 0:M.id)||f).toString(),b=h.toLowerCase(),v=g.toLowerCase(),y=b.includes("ui")||v.startsWith("ui")||v.includes("label"),x=this.formatDisplayName(g||f),w=((_=m==null?void 0:m.render)==null?void 0:_.visible)===!1||(m==null?void 0:m.enabled)===!1,T=this.getObjectType(m),C={id:f,label:x,category:h,isUi:y,isUnused:w,objectType:T};(!a||C.id.toLowerCase().includes(a)||C.label.toLowerCase().includes(a))&&s.push(C)});let o=s.filter(f=>f.isUi&&!f.isUnused),c=s.filter(f=>!f.isUi&&!f.isUnused),l=s.filter(f=>f.isUnused),d=this.filterMode==="scene"?[]:o,u=this.filterMode==="ui"?[]:c;this.listContainer.innerHTML=`
|
|
26
|
+
${this.renderGroup("UI",d,!1)}
|
|
27
|
+
${this.renderGroup("Scene",u,!1)}
|
|
28
|
+
${l.length>0?this.renderGroup("Unused",l,!0):""}
|
|
29
|
+
`,this.setSelected(this.selectedId)}formatDisplayName(t){let i=t.replace(/^json\./,"").replace(/^ui\./,"").replace(/_\d+$/,"").replace(/\./g," ").replace(/_/g," ");return i=i.split(" ").map(n=>n.charAt(0).toUpperCase()+n.slice(1).toLowerCase()).join(" "),i}getObjectType(t){var i,n,r,a,s,o,c,l,d;return t?(i=t.ui)!=null&&i.text?"text":(a=(r=(n=t.render)==null?void 0:n.asset)==null?void 0:r.path)!=null&&a.endsWith(".json")?"animation":((o=(s=t.render)==null?void 0:s.asset)==null?void 0:o.type)==="image"||(c=t.render)!=null&&c.texture?"sprite":(d=(l=t.gameplay)==null?void 0:l.tuning)!=null&&d.panel_width?"graphics":"container":"container"}renderGroup(t,i,n=!1){if(!i.length)return"";let r=window.getEditableObjectConfig,a=i.map(s=>{var u,p;let o=typeof r=="function"?r(s.id):null;if(!o){let f=window.__editableObjectConfigs;f&&typeof f.get=="function"&&(o=(u=f.get(s.id))!=null?u:null)}let c=this.getTypeIconByType(s.objectType),l=this.getAssetPreview(o),d=(p=o==null?void 0:o.ui)!=null&&p.text?`"${o.ui.text.substring(0,12)}${o.ui.text.length>12?"...":""}"`:"";return`
|
|
30
|
+
<button class="scene-object-item ${n?"unused":""}" data-object-id="${s.id}">
|
|
31
|
+
<span class="scene-object-label">${s.label}</span>
|
|
32
|
+
${d?`<span class="scene-object-text-preview">${d}</span>`:""}
|
|
33
|
+
<span class="scene-object-badge ${s.isUi?"ui":"scene"}">${s.category}</span>
|
|
34
|
+
</button>
|
|
35
|
+
`}).join("");return`
|
|
36
|
+
<div class="scene-object-group ${n?"unused-group":""}">
|
|
37
|
+
<div class="scene-object-group-title">${t} <span class="scene-object-count">${i.length}</span></div>
|
|
38
|
+
<div class="scene-object-group-items">
|
|
39
|
+
${a}
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
`}getTypeIconByType(t){return{text:"\u{1F4DD}",sprite:"\u{1F5BC}\uFE0F",graphics:"\u2B1C",container:"\u{1F4E6}",animation:"\u{1F3AC}"}[t]||"\u{1F4E6}"}getTypeIcon(t){var n,r,a,s,o,c;if(!t)return"\u{1F4E6}";if((n=t.render)!=null&&n.texture){let l=t.render.texture;return l.includes("button")?"\u{1F518}":l.includes("key")?"\u{1F511}":"\u{1F5BC}\uFE0F"}if((r=t.ui)!=null&&r.text)return"\u{1F4DD}";if(((a=t.identity)==null?void 0:a.category)==="ui")return"\u{1F3A8}";if(t.effects||(o=(s=t.identity)==null?void 0:s.id)!=null&&o.includes("effect"))return"\u2728";if(t.audio)return"\u{1F50A}";let i=((c=t.identity)==null?void 0:c.id)||"";return i.includes("background")?"\u{1F5BC}\uFE0F":i.includes("character")?"\u{1F464}":i.includes("key")?"\u{1F511}":i.includes("draggable")?"\u{1F3AF}":i.includes("machine")?"\u2699\uFE0F":i.includes("tutorial")||i.includes("hand")?"\u{1F446}":"\u{1F4E6}"}getAssetPreview(t){var n;if(!t)return null;let i=(n=t.render)==null?void 0:n.texture;return i&&(i.endsWith(".png")||i.endsWith(".jpg")||i.endsWith(".jpeg"))?i.startsWith("library/")||i.startsWith("/raw/")?`/raw/${i.replace(/^\/raw\//,"")}`:`/raw/${i}`:null}getColorIndicator(t){var n,r,a,s;if(!t)return"";let i=((n=t.render)==null?void 0:n.background_color)||((a=(r=t.gameplay)==null?void 0:r.tuning)==null?void 0:a.panel_bg_color)||((s=t.ui)==null?void 0:s.backgroundColor);return i?`<span class="scene-object-color-dot" style="background-color: ${i}" title="${i}"></span>`:""}getMetadata(t){var n,r,a,s;if(!t)return"";let i=[];return((n=t.render)==null?void 0:n.visible)===!1&&i.push("hidden"),((r=t.render)==null?void 0:r.z_index)!==void 0&&i.push(`z:${t.render.z_index}`),((a=t.interaction)!=null&&a.clickable||(s=t.ui)!=null&&s.button)&&i.push("clickable"),i.length>0?i.join(" \u2022 "):""}scheduleRetry(){this.retryTimer||(this.retryTimer=window.setTimeout(()=>{this.retryTimer=null,this.refreshObjects()},400))}select(t){var i;this.selectedId=t,this.setSelected(t),(i=this.options)==null||i.onSelect(t)}};var cr=class{constructor(){this.root=null;this.infoEls={};this.options=null}render(){return`
|
|
43
|
+
<div class="scene-panel scene-tools panel-accent-amber" data-panel="scene-tools">
|
|
44
|
+
<div class="scene-panel-header" data-panel-handle>
|
|
45
|
+
<div class="panel-title">
|
|
46
|
+
<span class="panel-pill">Tools</span>
|
|
47
|
+
<span class="panel-title-text">Scene Tools</span>
|
|
48
|
+
</div>
|
|
49
|
+
<button class="scene-panel-toggle" type="button" data-panel-toggle>\u25BE</button>
|
|
50
|
+
</div>
|
|
51
|
+
<div class="scene-panel-body">
|
|
52
|
+
<div class="debug-section">
|
|
53
|
+
<div class="debug-section-title">Visualize</div>
|
|
54
|
+
<div class="debug-field">
|
|
55
|
+
<label>Scene Scale</label>
|
|
56
|
+
<input type="range" id="debug-scene-scale" min="0.4" max="1.6" step="0.05" value="1.0">
|
|
57
|
+
<span class="debug-value-display" id="debug-scene-scale-value">1.0</span>
|
|
58
|
+
</div>
|
|
59
|
+
<div class="debug-field checkbox-field">
|
|
60
|
+
<input type="checkbox" id="debug-highlight-object">
|
|
61
|
+
<label>Highlight bounds</label>
|
|
62
|
+
</div>
|
|
63
|
+
<div class="debug-field checkbox-field">
|
|
64
|
+
<input type="checkbox" id="debug-highlight-anchor">
|
|
65
|
+
<label>Highlight config anchor</label>
|
|
66
|
+
</div>
|
|
67
|
+
<div class="debug-field checkbox-field">
|
|
68
|
+
<input type="checkbox" id="debug-nudge-enabled">
|
|
69
|
+
<label>Enable arrow nudging</label>
|
|
70
|
+
</div>
|
|
71
|
+
<div id="debug-nudge-controls" class="debug-nudge hidden">
|
|
72
|
+
<div class="debug-field">
|
|
73
|
+
<label>Nudge step (px)</label>
|
|
74
|
+
<input type="number" id="debug-nudge-step" step="1" value="10">
|
|
75
|
+
</div>
|
|
76
|
+
<div class="debug-arrow-pad">
|
|
77
|
+
<button class="debug-arrow-btn" data-nudge="up">\u2191</button>
|
|
78
|
+
<button class="debug-arrow-btn" data-nudge="left">\u2190</button>
|
|
79
|
+
<button class="debug-arrow-btn" data-nudge="down">\u2193</button>
|
|
80
|
+
<button class="debug-arrow-btn" data-nudge="right">\u2192</button>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
|
|
85
|
+
<div class="debug-section">
|
|
86
|
+
<div class="debug-section-title">Splash Screen</div>
|
|
87
|
+
<div class="debug-field">
|
|
88
|
+
<label>Loading text</label>
|
|
89
|
+
<input type="text" id="debug-loading-text" placeholder="Y\xFCkleniyor...">
|
|
90
|
+
</div>
|
|
91
|
+
<div class="debug-field">
|
|
92
|
+
<label>Loading text scale</label>
|
|
93
|
+
<input type="range" id="debug-loading-text-scale" min="0.2" max="1.2" step="0.05" value="0.6">
|
|
94
|
+
<span class="debug-value-display" id="debug-loading-text-scale-value">0.6</span>
|
|
95
|
+
</div>
|
|
96
|
+
<div class="debug-field checkbox-field">
|
|
97
|
+
<input type="checkbox" id="debug-splash-on-start">
|
|
98
|
+
<label>Show on start</label>
|
|
99
|
+
</div>
|
|
100
|
+
<div class="debug-btn-group">
|
|
101
|
+
<button class="debug-btn" id="debug-show-splash">Show Splash Screen</button>
|
|
102
|
+
</div>
|
|
103
|
+
</div>
|
|
104
|
+
|
|
105
|
+
<div class="debug-section">
|
|
106
|
+
<div class="debug-section-title">Object Info</div>
|
|
107
|
+
<div class="debug-info-grid">
|
|
108
|
+
<div class="debug-info-row">
|
|
109
|
+
<span class="debug-info-label">Instance</span>
|
|
110
|
+
<span class="debug-info-value" id="debug-instance-id">\u2014</span>
|
|
111
|
+
</div>
|
|
112
|
+
<div class="debug-info-row">
|
|
113
|
+
<span class="debug-info-label">World X</span>
|
|
114
|
+
<span class="debug-info-value" id="debug-world-x">0</span>
|
|
115
|
+
</div>
|
|
116
|
+
<div class="debug-info-row">
|
|
117
|
+
<span class="debug-info-label">World Y</span>
|
|
118
|
+
<span class="debug-info-value" id="debug-world-y">0</span>
|
|
119
|
+
</div>
|
|
120
|
+
<div class="debug-info-row">
|
|
121
|
+
<span class="debug-info-label">Anchor X</span>
|
|
122
|
+
<span class="debug-info-value" id="debug-config-x">\u2014</span>
|
|
123
|
+
</div>
|
|
124
|
+
<div class="debug-info-row">
|
|
125
|
+
<span class="debug-info-label">Anchor Y</span>
|
|
126
|
+
<span class="debug-info-value" id="debug-config-y">\u2014</span>
|
|
127
|
+
</div>
|
|
128
|
+
</div>
|
|
129
|
+
</div>
|
|
130
|
+
|
|
131
|
+
<div class="debug-collapsible collapsed" data-advanced-settings>
|
|
132
|
+
<button class="debug-collapsible-header" type="button" data-advanced-toggle>
|
|
133
|
+
<span>Advanced Settings</span>
|
|
134
|
+
<span class="debug-collapsible-icon">\u25BE</span>
|
|
135
|
+
</button>
|
|
136
|
+
<div class="debug-collapsible-body">
|
|
137
|
+
<div class="debug-section">
|
|
138
|
+
<div class="debug-section-title">Global Settings</div>
|
|
139
|
+
<div class="debug-field">
|
|
140
|
+
<label>Scale Multiplier</label>
|
|
141
|
+
<input type="range" id="debug-layout-scale" min="0.1" max="2.0" step="0.05" value="1.0">
|
|
142
|
+
<span class="debug-value-display" id="debug-layout-scale-value">1.0</span>
|
|
143
|
+
</div>
|
|
144
|
+
<div class="debug-field">
|
|
145
|
+
<label>Position Offset X</label>
|
|
146
|
+
<input type="range" id="debug-layout-offset-x" min="-150" max="150" step="1" value="0">
|
|
147
|
+
<span class="debug-value-display" id="debug-layout-offset-x-value">0</span>
|
|
148
|
+
</div>
|
|
149
|
+
<div class="debug-field">
|
|
150
|
+
<label>Position Offset Y</label>
|
|
151
|
+
<input type="range" id="debug-layout-offset-y" min="-150" max="150" step="1" value="0">
|
|
152
|
+
<span class="debug-value-display" id="debug-layout-offset-y-value">0</span>
|
|
153
|
+
</div>
|
|
154
|
+
<div class="debug-field checkbox-field">
|
|
155
|
+
<input type="checkbox" id="debug-rect-visible" checked>
|
|
156
|
+
<label>Debug Rectangle Visible</label>
|
|
157
|
+
</div>
|
|
158
|
+
<div class="debug-field">
|
|
159
|
+
<label>Debug Rect Color</label>
|
|
160
|
+
<input type="color" id="debug-rect-color" value="#ff0000">
|
|
161
|
+
</div>
|
|
162
|
+
<div class="debug-field">
|
|
163
|
+
<label>Debug Rect Thickness</label>
|
|
164
|
+
<input type="range" id="debug-rect-thickness" min="1" max="10" step="1" value="4">
|
|
165
|
+
<span class="debug-value-display" id="debug-rect-thickness-value">4</span>
|
|
166
|
+
</div>
|
|
167
|
+
<div class="debug-field">
|
|
168
|
+
<label>Engine Scale</label>
|
|
169
|
+
<input type="range" id="debug-engine-scale" min="0.1" max="2.0" step="0.05" value="1.0">
|
|
170
|
+
<span class="debug-value-display" id="debug-engine-scale-value">1.0</span>
|
|
171
|
+
</div>
|
|
172
|
+
<div class="debug-field">
|
|
173
|
+
<label>Background Scale</label>
|
|
174
|
+
<input type="range" id="debug-background-scale" min="0.5" max="2.0" step="0.05" value="1.05">
|
|
175
|
+
<span class="debug-value-display" id="debug-background-scale-value">1.05</span>
|
|
176
|
+
</div>
|
|
177
|
+
<div class="debug-field">
|
|
178
|
+
<label>Label Pulse Speed</label>
|
|
179
|
+
<input type="range" id="debug-label-pulse-speed" min="0" max="10" step="0.1" value="3.0">
|
|
180
|
+
<span class="debug-value-display" id="debug-label-pulse-speed-value">3.0</span>
|
|
181
|
+
</div>
|
|
182
|
+
<div class="debug-field">
|
|
183
|
+
<label>Label Pulse Intensity</label>
|
|
184
|
+
<input type="range" id="debug-label-pulse-intensity" min="0" max="0.2" step="0.01" value="0.03">
|
|
185
|
+
<span class="debug-value-display" id="debug-label-pulse-intensity-value">0.03</span>
|
|
186
|
+
</div>
|
|
187
|
+
<div class="debug-field">
|
|
188
|
+
<label>Rope Length</label>
|
|
189
|
+
<input type="range" id="debug-rope-length" min="200" max="800" step="10" value="420">
|
|
190
|
+
<span class="debug-value-display" id="debug-rope-length-value">420</span>
|
|
191
|
+
</div>
|
|
192
|
+
<div class="debug-btn-group">
|
|
193
|
+
<button class="debug-btn danger" id="debug-reset">Reset Debug</button>
|
|
194
|
+
<button class="debug-btn" id="debug-export">Export Debug Config</button>
|
|
195
|
+
</div>
|
|
196
|
+
</div>
|
|
197
|
+
</div>
|
|
198
|
+
</div>
|
|
199
|
+
</div>
|
|
200
|
+
</div>
|
|
201
|
+
`}initialize(t,i){var g,b,v,y,x,w,T,C,S,L,M,_,E,A,P,I;this.options=i,this.root=t.querySelector('[data-panel="scene-tools"]');let n=(g=this.root)==null?void 0:g.querySelector("#debug-highlight-object");n==null||n.addEventListener("change",()=>{var k;return(k=this.options)==null?void 0:k.onHighlightObject(!!n.checked)});let r=(b=this.root)==null?void 0:b.querySelector("#debug-highlight-anchor");r==null||r.addEventListener("change",()=>{var k;return(k=this.options)==null?void 0:k.onHighlightAnchor(!!r.checked)});let a=(v=this.root)==null?void 0:v.querySelector("#debug-nudge-enabled"),s=(y=this.root)==null?void 0:y.querySelector("#debug-nudge-controls");if(a&&s){let k=()=>s.classList.toggle("hidden",!a.checked);a.addEventListener("change",k),k()}Array.from(((x=this.root)==null?void 0:x.querySelectorAll(".debug-arrow-btn"))||[]).forEach(k=>{k.addEventListener("click",()=>{var j,ie,ye,xe;switch(k.dataset.nudge){case"up":(j=this.options)==null||j.onNudge(0,-1);break;case"down":(ie=this.options)==null||ie.onNudge(0,1);break;case"left":(ye=this.options)==null||ye.onNudge(-1,0);break;case"right":(xe=this.options)==null||xe.onNudge(1,0);break;default:break}})});let l=(()=>{var D;let k=window.getEditableEngineConfig;if(typeof k=="function"){let j=k();return(D=j==null?void 0:j.splash)!=null?D:{}}return{}})(),d=(w=this.root)==null?void 0:w.querySelector("#debug-loading-text"),u=(T=this.root)==null?void 0:T.querySelector("#debug-loading-text-scale"),p=(C=this.root)==null?void 0:C.querySelector("#debug-loading-text-scale-value"),f=(S=this.root)==null?void 0:S.querySelector("#debug-splash-on-start"),m=(L=this.root)==null?void 0:L.querySelector("#debug-show-splash");if(d&&(d.value=typeof l.loading_text=="string"&&l.loading_text.length>0?l.loading_text:"Y\xFCkleniyor...",d.addEventListener("input",()=>{var k,D;(D=(k=this.options)==null?void 0:k.onUpdateSplash)==null||D.call(k,{loading_text:d.value})})),u){let k=typeof l.loading_text_scale=="number"?l.loading_text_scale:.6;u.value=k.toString(),p&&(p.textContent=k.toFixed(2)),u.addEventListener("input",()=>{var j,ie;let D=Number(u.value);p&&(p.textContent=Number.isFinite(D)?D.toFixed(2):"0.6"),Number.isFinite(D)&&((ie=(j=this.options)==null?void 0:j.onUpdateSplash)==null||ie.call(j,{loading_text_scale:D}))})}f&&(f.checked=!!l.show_on_start,f.addEventListener("change",()=>{var k,D;(D=(k=this.options)==null?void 0:k.onUpdateSplash)==null||D.call(k,{show_on_start:!!f.checked})})),m==null||m.addEventListener("click",()=>{var k,D;(D=(k=this.options)==null?void 0:k.onShowSplash)==null||D.call(k)}),this.infoEls={instance:(M=this.root)==null?void 0:M.querySelector("#debug-instance-id"),worldX:(_=this.root)==null?void 0:_.querySelector("#debug-world-x"),worldY:(E=this.root)==null?void 0:E.querySelector("#debug-world-y"),anchorX:(A=this.root)==null?void 0:A.querySelector("#debug-config-x"),anchorY:(P=this.root)==null?void 0:P.querySelector("#debug-config-y")};let h=(I=this.root)==null?void 0:I.querySelector("[data-advanced-toggle]");h&&h.addEventListener("click",()=>{let k=h.closest(".debug-collapsible");k==null||k.classList.toggle("collapsed")})}getNudgeStep(){var n,r;let t=(n=this.root)==null?void 0:n.querySelector("#debug-nudge-step"),i=Number((r=t==null?void 0:t.value)!=null?r:10);return Number.isFinite(i)?i:10}updateInfo(t){if(!t){this.infoEls.instance&&(this.infoEls.instance.textContent="\u2014"),this.infoEls.worldX&&(this.infoEls.worldX.textContent="0"),this.infoEls.worldY&&(this.infoEls.worldY.textContent="0"),this.infoEls.anchorX&&(this.infoEls.anchorX.textContent="\u2014"),this.infoEls.anchorY&&(this.infoEls.anchorY.textContent="\u2014");return}this.infoEls.instance&&(this.infoEls.instance.textContent=t.instanceId),this.infoEls.worldX&&(this.infoEls.worldX.textContent=t.worldX.toFixed(1)),this.infoEls.worldY&&(this.infoEls.worldY.textContent=t.worldY.toFixed(1)),this.infoEls.anchorX&&(this.infoEls.anchorX.textContent=t.anchorX==null?"\u2014":t.anchorX.toFixed(1)),this.infoEls.anchorY&&(this.infoEls.anchorY.textContent=t.anchorY==null?"\u2014":t.anchorY.toFixed(1))}};var dr=class{constructor(){this.root=null;this.slotsContainer=null;this.options=null;this.registry=null;this.expandedSlot=null}mergeRegistries(t,i){let n=t||{},r=i||{},a={slots:Array.isArray(r.slots)?[...r.slots]:[],libraryAssets:typeof r.libraryAssets=="object"&&r.libraryAssets?{...r.libraryAssets}:{},categories:Array.isArray(r.categories)?[...r.categories]:[]},s=Array.isArray(n.slots)?n.slots:[];if(s.length>0&&a.slots.length>0)for(let l of a.slots){let d=s.find(u=>(u==null?void 0:u.slotId)&&u.slotId===(l==null?void 0:l.slotId));d!=null&&d.currentAsset&&d.currentAsset!==(l==null?void 0:l.currentAsset)&&(l.currentAsset=d.currentAsset)}let o=n.libraryAssets||{};for(let[l,d]of Object.entries(o)){if(!Array.isArray(d))continue;a.libraryAssets[l]||(a.libraryAssets[l]=[]);let u=new Set((a.libraryAssets[l]||[]).map(p=>p==null?void 0:p.filename));for(let p of d){let f=p==null?void 0:p.filename;!f||u.has(f)||(a.libraryAssets[l].unshift(p),u.add(f))}}let c=new Set(a.categories||[]);for(let l of n.categories||[])typeof l=="string"&&c.add(l);return a.categories=Array.from(c),a}render(){return`
|
|
202
|
+
<div class="scene-panel library-panel panel-accent-purple" data-panel="library">
|
|
203
|
+
<div class="scene-panel-header" data-panel-handle>
|
|
204
|
+
<div class="panel-title">
|
|
205
|
+
<span class="panel-pill">\u{1F3A8}</span>
|
|
206
|
+
<span class="panel-title-text">Asset Library</span>
|
|
207
|
+
</div>
|
|
208
|
+
<div class="scene-panel-actions">
|
|
209
|
+
<button class="debug-btn debug-btn-sm" type="button" data-refresh-library title="Force Refresh Library">\u{1F504} Refresh</button>
|
|
210
|
+
<button class="debug-btn debug-btn-sm success" type="button" data-create-ai>\u2728 Create with AI</button>
|
|
211
|
+
<button class="scene-panel-toggle" type="button" data-panel-toggle>\u25BE</button>
|
|
212
|
+
</div>
|
|
213
|
+
</div>
|
|
214
|
+
<div class="scene-panel-body">
|
|
215
|
+
<div class="library-subtitle">Click slot to expand, select asset to apply, or use AI to edit/create</div>
|
|
216
|
+
<div class="library-slots" data-library-slots></div>
|
|
217
|
+
</div>
|
|
218
|
+
<div class="panel-resize-handle" data-panel-resize></div>
|
|
219
|
+
</div>
|
|
220
|
+
`}initialize(t,i){var a,s,o;this.options=i,this.root=t.querySelector('[data-panel="library"]'),this.slotsContainer=(a=this.root)==null?void 0:a.querySelector("[data-library-slots]");let n=(s=this.root)==null?void 0:s.querySelector("[data-create-ai]");n==null||n.addEventListener("click",()=>{this.handleCreateWithAI()});let r=(o=this.root)==null?void 0:o.querySelector("[data-refresh-library]");r==null||r.addEventListener("click",()=>{r.classList.add("pulse-anim"),this.refresh(),setTimeout(()=>r.classList.remove("pulse-anim"),500)}),this.loadAssetRegistry()}reRender(){console.log("[LIBRARY] Re-rendering slots..."),this.loadAssetRegistry()}async refresh(){console.log("[LIBRARY] Force refreshing asset registry...");try{let t=window.getEditableAssets,i=typeof t=="function"?t():null,n=await fetch(`/raw/assetRegistry.json?t=${Date.now()}`);if(n.ok){let r=await n.json(),a=this.mergeRegistries(i,r);window.getEditableAssets=()=>a,console.log("[LIBRARY] \u2705 Registry re-fetched successfully")}}catch(t){console.warn("[LIBRARY] Failed to re-fetch registry:",t)}this.loadAssetRegistry()}loadAssetRegistry(t=0){let i=window.getEditableAssets;if(typeof i=="function"){let n=i();if(n!=null&&n.slots&&Array.isArray(n.slots)&&n.slots.length>0){this.registry=n,console.log("[LIBRARY] Loaded slot-based registry:",this.registry.slots.length,"slots"),this.renderSlots();return}}t<15?(console.log(`[LIBRARY] Waiting for asset registry... (attempt ${t+1}/15)`),setTimeout(()=>this.loadAssetRegistry(t+1),200)):(console.warn("[LIBRARY] Failed to load asset registry"),this.slotsContainer&&(this.slotsContainer.innerHTML='<div class="library-info">No editable assets available</div>'))}renderSlots(){if(!this.slotsContainer||!this.registry)return;let t={};for(let n of this.registry.slots)t[n.category]||(t[n.category]=[]),t[n.category].push(n);let i=Date.now();this.slotsContainer.innerHTML="";for(let n of this.registry.categories){let r=t[n]||[];if(r.length===0)continue;let a=document.createElement("div");a.className="library-category";let s=document.createElement("div");s.className="library-category-header",s.textContent=this.formatCategoryName(n),a.appendChild(s);let o=document.createElement("div");o.className="library-category-slots";for(let c of r){let l=this.createSlotElement(c,i);o.appendChild(l)}a.appendChild(o),this.slotsContainer.appendChild(a)}}createSlotElement(t,i){let n=this.expandedSlot===t.slotId,r=document.createElement("div");r.className=`library-slot ${n?"expanded":""}`,r.dataset.slotId=t.slotId;let a=document.createElement("div");a.className="slot-header";let s=document.createElement("div");s.className="slot-current";let o=document.createElement("img");o.src=`/raw/${t.currentAsset}?t=${i}`,o.alt=t.displayName,o.className="slot-thumbnail",o.onerror=()=>{o.style.display="none"},s.appendChild(o),a.appendChild(s);let c=document.createElement("div");c.className="slot-info";let l=document.createElement("div");l.className="slot-name",l.textContent=t.displayName;let d=document.createElement("div");d.className="slot-asset",d.textContent=t.currentAsset,c.appendChild(l),c.appendChild(d),a.appendChild(c);let u=document.createElement("div");u.className="slot-actions";let p=document.createElement("button");p.className="slot-ai-edit",p.title="Edit with AI",p.textContent="\u2728 AI",p.addEventListener("click",async h=>{h.stopPropagation(),await this.handleAIEdit(t)}),u.appendChild(p);let f=document.createElement("button");f.className="slot-reset",f.title="Reset to default",f.textContent="\u21BA",f.addEventListener("click",async h=>{h.stopPropagation(),await this.handleReset(t)}),u.appendChild(f);let m=document.createElement("span");if(m.className="slot-expand-icon",m.textContent=n?"\u25BC":"\u25B6",u.appendChild(m),a.appendChild(u),a.addEventListener("click",()=>{this.expandedSlot=this.expandedSlot===t.slotId?null:t.slotId,this.renderSlots()}),r.appendChild(a),n){let h=this.createLibraryElement(t,i);r.appendChild(h)}return r}createLibraryElement(t,i){var a;let n=document.createElement("div");n.className="slot-library";let r=((a=this.registry)==null?void 0:a.libraryAssets[t.libraryFolder])||[];return this.fetchFolderAssets(t.libraryFolder,i).then(s=>{let o=new Map;for(let l of r)o.set(l.filename,l);for(let l of s)o.has(l.filename)||o.set(l.filename,l);let c=Array.from(o.values());if(c.length===0){n.innerHTML='<div class="library-empty">No alternative assets</div>';return}n.innerHTML="";for(let l of c){let d=document.createElement("div");d.className="library-item";let u=document.createElement("img");u.src=`/raw/library/${t.libraryFolder}/${l.filename}?t=${i}`,u.alt=l.displayName,u.className="library-thumbnail",u.onerror=()=>{u.style.opacity="0.3"},d.appendChild(u);let p=document.createElement("div");p.className="library-label",p.textContent=l.displayName,d.appendChild(p),d.addEventListener("click",async()=>{await this.handleApply(t,l.filename)}),n.appendChild(d)}}),n.innerHTML='<div class="library-loading">Loading assets...</div>',n}async fetchFolderAssets(t,i){try{let n=await fetch(`/raw/library/${t}/?t=${i}`);if(!n.ok)return[];let r=await n.text(),a=[],s=/href="([^"]+\.(png|jpg|jpeg))"/gi,o;for(;(o=s.exec(r))!==null;){let c=o[1];if(!c.startsWith("/")&&!c.startsWith("..")){let l=c.replace(/\.(png|jpg|jpeg)$/i,"").replace(/_/g," ");a.push({filename:c,displayName:l})}}return a}catch{return console.log("[LIBRARY] Could not fetch folder listing, using registry only"),[]}}async handleApply(t,i){var n;console.log("[LIBRARY] Applying asset:",i,"to slot:",t.slotId);try{await((n=this.options)==null?void 0:n.onApply(t.objectId,i,t.category)),t.currentAsset=i,this.renderSlots()}catch(r){console.error("[LIBRARY] Failed to apply asset:",r)}}async handleReset(t){var i;console.log("[LIBRARY] Resetting slot:",t.slotId,"to default:",t.defaultAsset);try{await((i=this.options)==null?void 0:i.onReset(t.objectId,t.defaultAsset,t.category)),t.currentAsset=t.defaultAsset,this.renderSlots()}catch(n){console.error("[LIBRARY] Failed to reset slot:",n)}}formatCategoryName(t){return t.replace(/_/g," ").split(" ").map(i=>i.charAt(0).toUpperCase()+i.slice(1)).join(" ")}async handleAIEdit(t){console.log("[Library] Opening AI Edit for slot:",t);let i=window.__openAiEditor;if(typeof i=="function"){let n=t.slotId||t.objectId,r="render.texture";t.category==="ui"&&(r="ui.image"),t.category==="audio"&&(r="audio.src"),i(n,`Edit ${t.displayName} with AI`,t.currentAsset,{objectId:t.objectId,path:r})}else console.warn("[Library] AI Editor not available"),alert("AI Editor is not available. Please ensure the Settings panel is loaded.")}handleCreateWithAI(){console.log("[Library] Opening AI Create modal");let t=window.__openAiEditor;typeof t=="function"?t("new_asset","Create new asset with AI"):(console.warn("[Library] AI Editor not available"),alert("AI Editor is not available. Please ensure the Settings panel is loaded."))}highlightSlot(t,i){if(!this.registry||!this.slotsContainer)return;let n=t.startsWith("json.")?t.replace("json.",""):t,r=this.registry.slots.find(a=>(a.objectId===n||a.slotId===n)&&(!i||a.category===i));r?(console.log("[LIBRARY] Highlighting slot:",r.slotId),this.expandedSlot=r.slotId,this.renderSlots(),setTimeout(()=>{var s;let a=(s=this.slotsContainer)==null?void 0:s.querySelector(`[data-slot-id="${r.slotId}"]`);a&&(a.scrollIntoView({behavior:"smooth",block:"center"}),a.classList.add("highlight-pulse"),setTimeout(()=>a.classList.remove("highlight-pulse"),3e3))},100)):console.warn("[LIBRARY] No slot found for highlight:",t,i)}};var ur=class{detectType(t,i,n){let r=t.toLowerCase();return typeof i=="string"&&i.match(/\.(png|jpg|jpeg|gif|webp)$/i)?"image":r.includes("color")||r.includes("tint")?"color":typeof i=="boolean"?"boolean":typeof i=="number"?"number":Array.isArray(i)?"array":typeof i=="object"&&i!==null?"object":"text"}isHexColor(t){return/^#[0-9a-fA-F]{6}$/i.test(t)}isImagePath(t){return/\.(png|jpg|jpeg|gif|svg)$/i.test(t)}};var pr=class{render(t,i,n,r){let a=n&&n.trim(),s=a?`/raw/${n}`:"";return`
|
|
221
|
+
<div class="inspector-property inspector-property-image">
|
|
222
|
+
<div class="property-header">
|
|
223
|
+
<label class="inspector-property-label">${this.formatLabel(i)}</label>
|
|
224
|
+
<div class="property-badges">
|
|
225
|
+
<span class="property-badge" title="Image Asset">IMG</span>
|
|
226
|
+
</div>
|
|
227
|
+
</div>
|
|
228
|
+
|
|
229
|
+
<div class="inspector-image-container">
|
|
230
|
+
${a?`
|
|
231
|
+
<div class="inspector-image-preview">
|
|
232
|
+
<img src="${s}" alt="${i}" onclick="window.open('${s}', '_blank')" />
|
|
233
|
+
<div class="preview-overlay">
|
|
234
|
+
<span class="preview-resolution" id="res-${t}-${i}">- x -</span>
|
|
235
|
+
</div>
|
|
236
|
+
</div>
|
|
237
|
+
`:`
|
|
238
|
+
<div class="inspector-image-placeholder">
|
|
239
|
+
<span>No Image Selected</span>
|
|
240
|
+
</div>
|
|
241
|
+
`}
|
|
242
|
+
|
|
243
|
+
<div class="inspector-image-details">
|
|
244
|
+
<div class="path-group">
|
|
245
|
+
<input type="text"
|
|
246
|
+
class="inspector-input inspector-input-path"
|
|
247
|
+
value="${n||""}"
|
|
248
|
+
data-property-path="${r}"
|
|
249
|
+
data-object-id="${t}"
|
|
250
|
+
placeholder="path/to/asset.png" />
|
|
251
|
+
</div>
|
|
252
|
+
|
|
253
|
+
<div class="inspector-image-actions">
|
|
254
|
+
<button class="inspector-btn inspector-btn-sm primary" data-action="library" data-path="${r}" data-object="${t}">
|
|
255
|
+
\u{1F4DA} Show in Library
|
|
256
|
+
</button>
|
|
257
|
+
<button class="inspector-btn inspector-btn-sm" data-action="ai-edit" data-path="${r}" data-object="${t}">
|
|
258
|
+
\u2728 AI Edit
|
|
259
|
+
</button>
|
|
260
|
+
<button class="inspector-btn inspector-btn-sm" data-action="upload" data-path="${r}" data-object="${t}">
|
|
261
|
+
\u{1F4E4}
|
|
262
|
+
</button>
|
|
263
|
+
<button class="inspector-btn inspector-btn-sm" data-action="reset" data-path="${r}" data-object="${t}">
|
|
264
|
+
\u21BA
|
|
265
|
+
</button>
|
|
266
|
+
</div>
|
|
267
|
+
</div>
|
|
268
|
+
</div>
|
|
269
|
+
</div>
|
|
270
|
+
`}formatLabel(t){return t.replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,i=>i.toUpperCase())}};var fr=class{render(t,i,n,r){let a=n||"#000000";return`
|
|
271
|
+
<div class="inspector-property inspector-property-color">
|
|
272
|
+
<label class="inspector-property-label">${this.formatLabel(i)}</label>
|
|
273
|
+
<div class="inspector-color-group">
|
|
274
|
+
<input type="color"
|
|
275
|
+
class="inspector-color-picker"
|
|
276
|
+
value="${a}"
|
|
277
|
+
data-property-path="${r}"
|
|
278
|
+
data-object-id="${t}" />
|
|
279
|
+
<input type="text"
|
|
280
|
+
class="inspector-input inspector-color-text"
|
|
281
|
+
value="${a}"
|
|
282
|
+
data-property-path="${r}"
|
|
283
|
+
data-object-id="${t}" />
|
|
284
|
+
</div>
|
|
285
|
+
</div>
|
|
286
|
+
`}formatLabel(t){return t.replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,i=>i.toUpperCase())}};var hr=class{render(t,i,n,r){return`
|
|
287
|
+
<div class="inspector-property inspector-property-number">
|
|
288
|
+
<label class="inspector-property-label">${this.formatLabel(i)}</label>
|
|
289
|
+
<input type="number"
|
|
290
|
+
class="inspector-input"
|
|
291
|
+
value="${n}"
|
|
292
|
+
data-property-path="${r}"
|
|
293
|
+
data-object-id="${t}"
|
|
294
|
+
step="any" />
|
|
295
|
+
</div>
|
|
296
|
+
`}formatLabel(t){return t.replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,i=>i.toUpperCase())}};var gr=class{render(t,i,n,r){let a=String(n||"");return`
|
|
297
|
+
<div class="inspector-property inspector-property-text">
|
|
298
|
+
<label class="inspector-property-label">${this.formatLabel(i)}</label>
|
|
299
|
+
<div class="inspector-input-group">
|
|
300
|
+
<input type="text"
|
|
301
|
+
class="inspector-input"
|
|
302
|
+
value="${a}"
|
|
303
|
+
data-property-path="${r}"
|
|
304
|
+
data-object-id="${t}" />
|
|
305
|
+
</div>
|
|
306
|
+
</div>
|
|
307
|
+
`}formatLabel(t){return t.replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,i=>i.toUpperCase())}};var mr=class{render(t,i,n,r){return`
|
|
308
|
+
<div class="inspector-property inspector-property-boolean">
|
|
309
|
+
<label class="inspector-property-label">
|
|
310
|
+
<input type="checkbox"
|
|
311
|
+
class="inspector-checkbox"
|
|
312
|
+
${n?"checked":""}
|
|
313
|
+
data-property-path="${r}"
|
|
314
|
+
data-object-id="${t}" />
|
|
315
|
+
<span>${this.formatLabel(i)}</span>
|
|
316
|
+
</label>
|
|
317
|
+
</div>
|
|
318
|
+
`}formatLabel(t){return t.replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,i=>i.toUpperCase())}};var br=class{render(t,i,n,r){if(!Array.isArray(n)||n.length===0)return`
|
|
319
|
+
<div class="inspector-property inspector-property-array">
|
|
320
|
+
<label class="inspector-property-label">${this.formatLabel(i)}</label>
|
|
321
|
+
<div class="inspector-array-empty">Empty array</div>
|
|
322
|
+
</div>
|
|
323
|
+
`;let a=n.map((s,o)=>typeof s=="string"?`<div class="inspector-array-item">\u2022 ${s}</div>`:typeof s=="object"?`<div class="inspector-array-item">\u2022 ${JSON.stringify(s)}</div>`:`<div class="inspector-array-item">\u2022 ${String(s)}</div>`).join("");return`
|
|
324
|
+
<div class="inspector-property inspector-property-array">
|
|
325
|
+
<label class="inspector-property-label">${this.formatLabel(i)} (${n.length} items)</label>
|
|
326
|
+
<div class="inspector-array-list">
|
|
327
|
+
${a}
|
|
328
|
+
</div>
|
|
329
|
+
</div>
|
|
330
|
+
`}formatLabel(t){return t.replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,i=>i.toUpperCase())}};var vr=class{constructor(t){this.registry=t}render(t,i,n,r){let a=[];for(let o in n){let c=n[o],l=`${r}.${o}`,d=this.registry.renderProperty(t,o,c,l);d&&a.push(d)}return a.length===0?"":a.length<=4&&a.every(o=>o.includes("inspector-property"))?`
|
|
331
|
+
<div class="inspector-subsection">
|
|
332
|
+
<div class="inspector-subsection-title">${this.formatLabel(i)}</div>
|
|
333
|
+
<div class="inspector-subsection-content">
|
|
334
|
+
${a.join("")}
|
|
335
|
+
</div>
|
|
336
|
+
</div>
|
|
337
|
+
`:`
|
|
338
|
+
<div class="inspector-property inspector-property-object">
|
|
339
|
+
<div class="inspector-object-header">${this.formatLabel(i)}</div>
|
|
340
|
+
<div class="inspector-object-body">
|
|
341
|
+
${a.join("")}
|
|
342
|
+
</div>
|
|
343
|
+
</div>
|
|
344
|
+
`}formatLabel(t){return t.replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,i=>i.toUpperCase())}};var yr=class{constructor(){this.typeDetector=new ur,this.imageRenderer=new pr,this.colorRenderer=new fr,this.numberRenderer=new hr,this.textRenderer=new gr,this.booleanRenderer=new mr,this.arrayRenderer=new br,this.objectRenderer=new vr(this)}renderProperty(t,i,n,r){switch(this.typeDetector.detectType(i,n)){case"image":return this.imageRenderer.render(t,i,n,r);case"color":return this.colorRenderer.render(t,i,n,r);case"number":return this.numberRenderer.render(t,i,n,r);case"boolean":return this.booleanRenderer.render(t,i,n,r);case"array":return this.arrayRenderer.render(t,i,n,r);case"object":return this.objectRenderer.render(t,i,n,r);default:return this.textRenderer.render(t,i,n,r)}}getTypeDetector(){return this.typeDetector}};var di=class{async updateProperty(t,i,n,r={}){console.log("[PropertyUpdateManager] Updating:",t,i,n);let a=window.getEditableObjectConfig;if(typeof a!="function"){console.error("[PropertyUpdateManager] getEditableObjectConfig not available");return}let s=a(t);if(!s){console.error("[PropertyUpdateManager] Config not found for:",t);return}this.setNestedProperty(s,i,n),et({objectId:t,path:i,value:n},{persist:!0});let o=window.applyEditableObjectConfig;typeof o=="function"?(await o(t,s),console.log("[PropertyUpdateManager] Applied config successfully")):console.warn("[PropertyUpdateManager] applyEditableObjectConfig not available"),this.triggerRefresh(t),r.refreshInspector&&window.dispatchEvent(new CustomEvent("inspector:refresh"))}setNestedProperty(t,i,n){let r=i.split("."),a=t;for(let o=0;o<r.length-1;o++){let c=r[o];a[c]||(a[c]={}),a=a[c]}let s=r[r.length-1];a[s]=n}getNestedProperty(t,i){let n=i.split("."),r=t;for(let a of n)if(r&&typeof r=="object"&&a in r)r=r[a];else return;return r}triggerRefresh(t){let i=window.__refreshHierarchy;typeof i=="function"&&i(),window.dispatchEvent(new CustomEvent("inspector:property-updated",{detail:{objectId:t}}))}};var xr=class{constructor(){this.updateManager=new di}async handleAction(t,i,n){console.log("[QuickActionsBar] Action:",t,i,n);let r=window.getEditableObjectConfig;if(typeof r!="function")return;let a=r(i);if(!a)return;let s=this.updateManager.getNestedProperty(a,n);if(t==="ai-convert"||t==="upload"||t==="library"){let o=n==="ui.text"||n==="render.asset.path",c=n==="render.asset.path";o&&(await this.prepareForImageConversion(i,a),t==="ai-convert"&&n!=="render.asset.path"&&(n="render.asset.path"))}switch(t){case"library":this.openLibrary(i,n,s);break;case"ai-edit":this.openAIEditor(i,n,s);break;case"upload":this.openUpload(i,n);break;case"reset":await this.resetToDefault(i,n);break;case"ai-convert":this.handleAiConvert(i,n,s);break;default:console.warn("[QuickActionsBar] Unknown action:",t)}}async prepareForImageConversion(t,i){var n,r;if(console.log("[QuickActionsBar] Preparing for image conversion:",t),i.render||(i.render={alpha:1,visible:!0}),(i.render.alpha===0||i.render.alpha===void 0)&&(i.render.alpha=1,await this.updateManager.updateProperty(t,"render.alpha",1)),(i.render.visible===!1||i.render.visible===void 0)&&(i.render.visible=!0,await this.updateManager.updateProperty(t,"render.visible",!0)),i.render.asset||(i.render.asset={type:"image",path:""}),i.render.asset.type!=="image"&&(i.render.asset.type="image",await this.updateManager.updateProperty(t,"render.asset",{type:"image",path:i.render.asset.path||""})),i.ui&&i.ui.renderMode!=="png"){await this.updateManager.updateProperty(t,"ui.renderMode","png",{refreshInspector:!0}),await this.updateManager.updateProperty(t,"render.tint","#ffffff");let s=((r=(n=i.transform)==null?void 0:n.scale)!=null?r:1)*.3;await this.updateManager.updateProperty(t,"transform.scale",s),console.log("[QuickActionsBar] Text to PNG conversion: set tint white, scale",s)}this.ensureSlotInRegistry(t,i)}ensureSlotInRegistry(t,i){var o,c,l;let n=window.getEditableAssets;if(typeof n!="function")return;let r=n();if(!r||!r.slots)return;let a=t.startsWith("json.")?t.replace("json.",""):t;if(!r.slots.some(d=>d.objectId===a||d.slotId===a)){let d=((o=i.identity)==null?void 0:o.category)||"ui";console.log("[QuickActionsBar] Adding new slot to registry for converted object:",a),r.slots.push({slotId:a,displayName:a.replace(/_/g," "),objectId:a,category:d,currentAsset:((l=(c=i.render)==null?void 0:c.asset)==null?void 0:l.path)||"",defaultAsset:"",libraryFolder:d,assetType:"image"}),r.categories&&!r.categories.includes(d)&&r.categories.push(d),r.libraryAssets&&!r.libraryAssets[d]&&(r.libraryAssets[d]=[]);let u=window.reRenderAssetLibrary;typeof u=="function"&&u()}}openLibrary(t,i,n){var a;let r=window.__debugContext;if(r){if(r.activeTab!=="library"){r.activeTab="library";let s=window.__updateWorkbenchTabs;typeof s=="function"&&s()}if(r.libraryPanel){let s=window.getEditableObjectConfig,o=s==null?void 0:s(t),c=(a=o==null?void 0:o.identity)==null?void 0:a.category;c||(c=i.split(".")[0]==="render"?"environment":"ui"),console.log("[QuickActionsBar] Highlighting library slot:",t,"category:",c),r.libraryPanel.highlightSlot(t,c)}}}openAIEditor(t,i,n){let r=window.__openAiEditor;if(typeof r=="function"){let a=i.split(".").pop()||i;r(a,`Edit ${a} for ${t}`,n,{objectId:t,path:i})}else console.warn("[QuickActionsBar] AI Editor not available")}openUpload(t,i){let n=document.createElement("input");n.type="file",n.accept="image/*",n.onchange=async r=>{var o;let a=(o=r.target.files)==null?void 0:o[0];if(!a)return;console.log("[QuickActionsBar] Preparing upload for:",a.name);let s=new FileReader;s.onload=async()=>{var l,d,u;let c=s.result;try{let p=window.getEditableObjectConfig,f=p==null?void 0:p(t),m=((l=f==null?void 0:f.identity)==null?void 0:l.category)||(i.split(".")[0]==="render"?"environment":"ui"),g=await(await fetch("/api/library/save",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({category:m,filename:a.name,data:c,overwrite:!0})})).json();if(g.success){console.log("[QuickActionsBar] \u2705 Uploaded and saved:",g.path),this.updateManager.updateProperty(t,i,g.path);let b=window.__debugContext;(u=(d=b==null?void 0:b.options)==null?void 0:d.onPropertyChange)==null||u.call(d,t,i,g.path);let v=window.addAssetToRegistry;typeof v=="function"&&v(m,a.name);let y=window.reRenderAssetLibrary;typeof y=="function"&&y(),window.dispatchEvent(new CustomEvent("inspector:refresh"))}else console.error("[QuickActionsBar] \u274C Upload failed:",g.error),alert(`Upload failed: ${g.error}`)}catch(p){console.error("[QuickActionsBar] \u274C Upload error:",p),alert("Upload failed. Check console.")}},s.readAsDataURL(a)},n.click()}async resetToDefault(t,i){console.log("[QuickActionsBar] Reset to default:",t,i);try{let n=await this.getDefaultValue(t,i);n!==void 0?(await this.updateManager.updateProperty(t,i,n),console.log("[QuickActionsBar] Reset to default value:",n)):alert("No default value found for this property.")}catch(n){console.error("[QuickActionsBar] Failed to reset to default:",n),alert("Failed to reset property. Check console for details.")}}async getDefaultValue(t,i){let n=i.split(".");if(n.length<2)return;let r=n[0],a=n.slice(1),s=window.__editableConfig;if(!(s!=null&&s.schemas))return;let o=null;if(s.schemas instanceof Map?o=s.schemas.get(r):typeof s.schemas=="object"&&(o=s.schemas[r]),!(o!=null&&o.defaults))return;let c=o.defaults;for(let l of a)if(c&&typeof c=="object")c=c[l];else return;return c}handleAiConvert(t,i,n){let r=window.__openAiEditor;if(typeof r=="function"){let s=`A single, high-quality, high-detail game UI icon/asset representing "${String(n||t.replace(/_/g," ").replace("json.",""))}". Modern stylized 3D rendered style, vibrant colors, soft lighting, isolated on solid magenta background, highly polished professional game art.`,o="render.asset.path";console.log("[QuickActionsBar] AI Convert for:",t,"from:",i,"to:",o),r(t,s,"",{objectId:t,path:o});let c=window.__debugContext;if(c){c.activeTab="ai";let l=window.__updateWorkbenchTabs;typeof l=="function"&&l()}}else console.warn("[QuickActionsBar] AI Editor not available")}};function rg(e,t){let i;return function(...r){let a=()=>{clearTimeout(i),e(...r)};clearTimeout(i),i=setTimeout(a,t)}}var wr=class{constructor(){this.root=null;this.contentContainer=null;this.selectedObjectId=null;this.options=null;this.showAdvanced=!1;this.rendererRegistry=new yr,this.updateManager=new di,this.quickActions=new xr,window.addEventListener("inspector:refresh",()=>{this.selectedObjectId&&this.loadObject(this.selectedObjectId)}),window.addEventListener("config:changed",()=>{})}render(){return`
|
|
345
|
+
<div class="scene-panel inspector-panel panel-accent-violet" data-panel="inspector" style="right:16px; top:72px;">
|
|
346
|
+
<div class="scene-panel-header" data-panel-handle>
|
|
347
|
+
<div class="panel-title">
|
|
348
|
+
<span class="panel-pill">Inspector</span>
|
|
349
|
+
<span class="panel-title-text">Properties</span>
|
|
350
|
+
</div>
|
|
351
|
+
<div class="scene-panel-actions">
|
|
352
|
+
<button class="debug-btn debug-btn-sm ${this.showAdvanced?"primary":""}" type="button" data-inspector-advanced title="Show Advanced Properties">\u2699\uFE0F</button>
|
|
353
|
+
<button class="scene-panel-toggle" type="button" data-panel-toggle>\u25BE</button>
|
|
354
|
+
</div>
|
|
355
|
+
</div>
|
|
356
|
+
<div class="scene-panel-body">
|
|
357
|
+
<div class="inspector-content" data-inspector-content>
|
|
358
|
+
<div class="inspector-empty">
|
|
359
|
+
<span class="inspector-empty-icon">\u{1F3AF}</span>
|
|
360
|
+
<span class="inspector-empty-text">Select an object to inspect</span>
|
|
361
|
+
</div>
|
|
362
|
+
</div>
|
|
363
|
+
</div>
|
|
364
|
+
</div>
|
|
365
|
+
`}initialize(t,i){var n;this.options=i,this.root=t.querySelector('[data-panel="inspector"]'),this.contentContainer=(n=this.root)==null?void 0:n.querySelector("[data-inspector-content]")}loadObject(t){this.selectedObjectId=t;let i=window.getEditableObjectConfig;if(typeof i!="function"){this.showError("Config system not ready");return}let n=i(t);if(!n){this.showError("Object not found");return}this.renderProperties(t,n)}renderProperties(t,i){if(!this.contentContainer)return;let n=[],r=i.identity||{},a=r.id||t,s=r.category||"unknown";n.push(`
|
|
366
|
+
<div class="inspector-header">
|
|
367
|
+
<div class="inspector-header-info">
|
|
368
|
+
<div class="inspector-object-name">${a}</div>
|
|
369
|
+
<div class="inspector-object-category">${s}</div>
|
|
370
|
+
</div>
|
|
371
|
+
${this.renderConversionButtons(t,i)}
|
|
372
|
+
</div>
|
|
373
|
+
`);let o=["ui","transform","render","gameplay","interaction","audio","effects","physics","motion","identity"];for(let c of o){let l=i[c];if(l){if(!this.showAdvanced&&!this.isSectionMeaningful(c,l,i))continue;n.push(this.renderSection(t,c,l,c))}}for(let c in i)if(!o.includes(c)&&typeof i[c]=="object"&&i[c]!==null){if(!this.showAdvanced&&!this.isSectionMeaningful(c,i[c],i))continue;n.push(this.renderSection(t,c,i[c],c))}this.contentContainer.innerHTML=n.join("")+this.renderFooter(i),this.attachEventListeners()}renderConversionButtons(t,i){var o,c,l,d;let n=!!i.ui,r=((o=i.ui)==null?void 0:o.renderMode)==="png"||((l=(c=i.render)==null?void 0:c.asset)==null?void 0:l.type)==="image";if(!(n||t.includes("ui_endgame")||t.includes("splash")||t.includes("button")||t.includes("label"))||r)return"";let s=(d=i.ui)!=null&&d.text?"ui.text":"render.asset.path";return`
|
|
374
|
+
<div class="inspector-quick-actions">
|
|
375
|
+
<button class="debug-btn debug-btn-sm success ai-simple-btn" type="button" data-convert-toggle>
|
|
376
|
+
\u2728 Convert to PNG
|
|
377
|
+
</button>
|
|
378
|
+
<div class="inspector-convert-menu hidden" data-convert-menu>
|
|
379
|
+
<button class="debug-btn debug-btn-sm" data-action="library" data-path="render.asset.path" data-object="${t}">\u{1F3A8} Library</button>
|
|
380
|
+
<button class="debug-btn debug-btn-sm" data-action="ai-convert" data-path="${s}" data-object="${t}">\u2728 AI</button>
|
|
381
|
+
<button class="debug-btn debug-btn-sm" data-action="upload" data-path="render.asset.path" data-object="${t}">\u{1F4E4} Upload</button>
|
|
382
|
+
</div>
|
|
383
|
+
</div>
|
|
384
|
+
`}renderFooter(t){let i=["motion","effects","ui","audio","physics","interaction","gameplay","visibility"],n=Object.keys(t),r=i.filter(a=>!n.includes(a));return r.length===0?"":`
|
|
385
|
+
<div class="inspector-footer">
|
|
386
|
+
<div class="inspector-add-component">
|
|
387
|
+
<select class="inspector-component-select" data-inspector-component-select>
|
|
388
|
+
<option value="" disabled selected>Add Component...</option>
|
|
389
|
+
${r.map(a=>`<option value="${a}">${this.formatLabel(a)}</option>`).join("")}
|
|
390
|
+
</select>
|
|
391
|
+
<button class="debug-btn debug-btn-sm primary" data-inspector-add-component-btn>Add</button>
|
|
392
|
+
</div>
|
|
393
|
+
</div>
|
|
394
|
+
`}renderSection(t,i,n,r){let a=[],s=["kind","renderMode","position_ratio","position_mode","responsive","slot_id","asset_type"];for(let o in n){if(!this.showAdvanced&&s.includes(o))continue;let c=n[o],l=`${r}.${o}`,d=this.rendererRegistry.renderProperty(t,o,c,l);d&&a.push(d)}return a.length===0?"":`
|
|
395
|
+
<div class="inspector-section" data-section="${i}">
|
|
396
|
+
<div class="inspector-section-header" data-section-toggle="${i}">
|
|
397
|
+
<span class="inspector-section-arrow">\u25BC</span>
|
|
398
|
+
<span class="inspector-section-icon">${this.getSectionIcon(i)}</span>
|
|
399
|
+
<span class="inspector-section-title">${this.formatLabel(i)}</span>
|
|
400
|
+
</div>
|
|
401
|
+
<div class="inspector-section-body" data-section-body="${i}">
|
|
402
|
+
${a.join("")}
|
|
403
|
+
</div>
|
|
404
|
+
</div>
|
|
405
|
+
`}attachEventListeners(){var l,d,u,p;if(!this.contentContainer)return;let t=this.contentContainer.querySelectorAll("[data-property-path]"),i=rg((f,m,h)=>{var g,b;this.updateManager.updateProperty(f,m,h),(b=(g=this.options)==null?void 0:g.onPropertyChange)==null||b.call(g,f,m,h)},300);t.forEach(f=>{let m=h=>{var y,x;let g=h.target,b=g.dataset.propertyPath,v=g.dataset.objectId;if(b&&v){let w=g.value;if(g.type==="checkbox")w=g.checked;else if(g.type==="number"&&(w=parseFloat(g.value),isNaN(w)))return;g.type==="text"||g.type==="range"||g.tagName==="TEXTAREA"?i(v,b,w):(this.updateManager.updateProperty(v,b,w),(x=(y=this.options)==null?void 0:y.onPropertyChange)==null||x.call(y,v,b,w))}};f.addEventListener("change",m),(f.tagName==="INPUT"||f.tagName==="TEXTAREA")&&f.addEventListener("input",m)}),this.contentContainer.querySelectorAll("[data-action]").forEach(f=>{f.addEventListener("click",m=>{let h=m.target,g=h.dataset.action,b=h.dataset.path,v=h.dataset.object;g&&b&&v&&this.quickActions.handleAction(g,v,b)})}),this.contentContainer.querySelectorAll("[data-section-toggle]").forEach(f=>{f.addEventListener("click",m=>{var b,v;let h=m.target,g=h.dataset.sectionToggle||((b=h.closest("[data-section-toggle]"))==null?void 0:b.getAttribute("data-section-toggle"));if(g){let y=(v=this.contentContainer)==null?void 0:v.querySelector(`[data-section="${g}"]`);y==null||y.classList.toggle("collapsed")}})});let a=(l=this.root)==null?void 0:l.querySelector("[data-inspector-advanced]");a==null||a.addEventListener("click",()=>{this.showAdvanced=!this.showAdvanced,this.selectedObjectId&&this.loadObject(this.selectedObjectId)});let s=(d=this.root)==null?void 0:d.querySelector("[data-convert-toggle]");s==null||s.addEventListener("click",()=>{var m;let f=(m=this.root)==null?void 0:m.querySelector("[data-convert-menu]");f==null||f.classList.toggle("hidden")});let o=(u=this.contentContainer)==null?void 0:u.querySelector("[data-inspector-add-component-btn]"),c=(p=this.contentContainer)==null?void 0:p.querySelector("[data-inspector-component-select]");o==null||o.addEventListener("click",async()=>{let f=c.value;f&&this.selectedObjectId&&await this.addComponent(this.selectedObjectId,f)})}async addComponent(t,i){console.log("[InspectorPanel] Adding component:",i,"to:",t);let n=window.getEditableObjectConfig,r=n==null?void 0:n(t);if(!r){console.error("[InspectorPanel] Failed to get config for:",t);return}let a=window.__editableConfig,s=a==null?void 0:a.schemas,o=null;s instanceof Map?o=s.get(i):s&&typeof s=="object"&&(o=s[i]),o||console.warn("[InspectorPanel] Schema not found for component:",i);let c=(o==null?void 0:o.defaults)||{enabled:!0};r[i]={...c},await this.updateManager.updateProperty(t,i,r[i]),this.loadObject(t),console.log("[InspectorPanel] Component added successfully")}isSectionMeaningful(t,i,n){var a,s;if(["identity","transform","render"].includes(t))return!0;if(!i||typeof i!="object"||t==="ui"&&((s=(a=n.render)==null?void 0:a.asset)==null?void 0:s.type)==="image")return!1;if(t==="interaction")return i.clickable===!0||i.draggable===!0;if(i.enabled===!0||i.active===!0||i.visible===!0)return!0;if(t==="ui")return!!(i.text||i.font||i.fontSize);let r=Object.keys(i);return r.length===0||r.length===1&&r[0]==="enabled"&&i.enabled===!1?!1:["audio","effects","physics","motion","gameplay"].includes(t)?i.enabled===!0:!0}showError(t){this.contentContainer&&(this.contentContainer.innerHTML=`
|
|
406
|
+
<div class="inspector-empty">
|
|
407
|
+
<span class="inspector-empty-icon">\u26A0\uFE0F</span>
|
|
408
|
+
<span class="inspector-empty-text">${t}</span>
|
|
409
|
+
</div>
|
|
410
|
+
`)}formatLabel(t){return t.replace(/_/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/\b\w/g,i=>i.toUpperCase())}getSectionIcon(t){return{identity:"\u{1F194}",transform:"\u{1F4D0}",render:"\u{1F3A8}",ui:"\u{1F4AC}",gameplay:"\u{1F3AE}",interaction:"\u{1F446}",audio:"\u{1F50A}",effects:"\u2728",motion:"\u{1F3AC}"}[t]||"\u{1F4E6}"}clear(){this.selectedObjectId=null,this.contentContainer&&(this.contentContainer.innerHTML=`
|
|
411
|
+
<div class="inspector-empty">
|
|
412
|
+
<span class="inspector-empty-icon">\u{1F3AF}</span>
|
|
413
|
+
<span class="inspector-empty-text">Select an object to inspect</span>
|
|
414
|
+
</div>
|
|
415
|
+
`)}};var nh=ig(qf(),1);function Yo(e){return new Promise((t,i)=>{let n=new FileReader;n.onerror=()=>i(new Error("FileReader failed")),n.onload=()=>t(String(n.result||"")),n.readAsDataURL(e)})}function Gf(e){var r;let[t,i]=e.split(","),n=t==null?void 0:t.match(/data:(.*?);base64/);return{base64:i!=null?i:"",mimeType:(r=n==null?void 0:n[1])!=null?r:"image/png"}}async function Wf(e){return await new Promise(t=>{let i=new Image;i.onload=()=>t({width:i.naturalWidth||i.width,height:i.naturalHeight||i.height}),i.onerror=()=>t(null),i.src=e})}async function fa(e){var t,i;try{console.log("[ImageUtils] Fetching image data from URL:",e);let n=await fetch(e);if(!n.ok)return console.warn("[ImageUtils] Fetch failed with status:",n.status,e),null;let r=await n.blob();console.log("[ImageUtils] Blob received, size:",r.size,"type:",r.type);let a=await Yo(r),s=await Wf(a),o=Gf(a);return console.log("[ImageUtils] Success resolution:",s==null?void 0:s.width,"x",s==null?void 0:s.height,"mime:",o.mimeType),{base64:o.base64,mimeType:o.mimeType,dataUrl:a,width:(t=s==null?void 0:s.width)!=null?t:0,height:(i=s==null?void 0:s.height)!=null?i:0}}catch(n){return console.error("[ImageUtils] Error fetching image data:",n),null}}async function Rt(e){var t,i;try{let n=await Yo(e),r=await Wf(n),a=Gf(n);return{base64:a.base64,mimeType:a.mimeType,dataUrl:n,width:(t=r==null?void 0:r.width)!=null?t:0,height:(i=r==null?void 0:r.height)!=null?i:0}}catch{return null}}function Yf(e){return Yo(e).then(t=>t).catch(()=>null)}function Vo(e,t){var i;try{let[n,r]=e.split(","),a=n.match(/data:(.*?);base64/),s=(i=a==null?void 0:a[1])!=null?i:"image/png",o=atob(r),c=new Uint8Array(o.length);for(let l=0;l<o.length;l++)c[l]=o.charCodeAt(l);return new File([c],t,{type:s})}catch{return null}}async function Bi(e,t=30){try{console.log("[ImageUtils] Removing background color...");let i=await new Promise((u,p)=>{let f=new Image;f.onload=()=>u(f),f.onerror=()=>p(new Error("Failed to load image")),f.src=e}),n=document.createElement("canvas");n.width=i.width,n.height=i.height;let r=n.getContext("2d");if(!r)return console.error("[ImageUtils] Failed to get canvas context"),e;r.drawImage(i,0,0);let a=r.getImageData(0,0,n.width,n.height),s=a.data,c=[{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(u=>({r:s[u.offset],g:s[u.offset+1],b:s[u.offset+2]})),l=0;for(let u=0;u<s.length;u+=4){let p=s[u],f=s[u+1],m=s[u+2],h=!1;for(let g of c)if(Math.sqrt(Math.pow(p-g.r,2)+Math.pow(f-g.g,2)+Math.pow(m-g.b,2))<t){h=!0;break}h&&(s[u+3]=0,l++)}return console.log(`[ImageUtils] Removed background from ${l} pixels (4-corner sampling, tolerance: ${t})`),r.putImageData(a,0,0),n.toDataURL("image/png")}catch(i){return console.error("[ImageUtils] Error removing background:",i),e}}function Vf(e,t){if(!e||!t)return"1:1";let i=e/t;return i>1.3?"16:9":i<.77?"9:16":"1:1"}function ut(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function oe(e){return typeof e=="string"?e:void 0}function Kf(e){return e.toLowerCase().endsWith(".png")?e.slice(0,-4):e}function By(e){var n,r,a;let t=(n=oe(e.id))!=null?n:oe(e.name);if(t)return t;let i=(r=oe(e.file))!=null?r:oe(e.asset);return i?Kf((a=i.split("/").pop())!=null?a:i):void 0}function Fy(e,t,i){var n,r,a;if(typeof t=="string")return{id:e,file:t,role:i};if(ut(t)){let s=(n=oe(t.file))!=null?n:oe(t.asset);return s?{id:(r=oe(t.id))!=null?r:e,file:s,role:(a=oe(t.role))!=null?a:i,dataUrl:oe(t.dataUrl),layout:t.layout}:null}return null}function Ko(e,t){var i,n,r;if(!e)return[];if(Array.isArray(e)){let a=[];for(let s of e){if(typeof s=="string"){let o=Kf((i=s.split("/").pop())!=null?i:s);a.push({id:o,file:s,role:t});continue}if(ut(s)){let o=By(s),c=(n=oe(s.file))!=null?n:oe(s.asset);if(!o||!c)continue;a.push({id:o,file:c,role:(r=oe(s.role))!=null?r:t,dataUrl:oe(s.dataUrl),layout:s.layout})}}return a}if(ut(e)){let a=[];for(let[s,o]of Object.entries(e)){let c=Fy(s,o,t);c&&a.push(c)}return a}return[]}function Ny(e){var t,i;return(i=(t=oe(e.brand_name))!=null?t:oe(e.brandName))!=null?i:oe(e.name)}function Hy(e){if(ut(e.brand_dna)&&ut(e.brand_dna.colors))return e.brand_dna;if(ut(e.colors)){let t={colors:e.colors};return typeof e.style=="string"&&(t.style=e.style),ut(e.fonts)&&(t.fonts=e.fonts),t}}function Uy(e){var i;let t=new Map;for(let n of e){let r=t.get(n.id);if(!r){t.set(n.id,n);continue}t.set(n.id,{...r,...n,file:n.file||r.file,role:n.role||r.role,dataUrl:n.dataUrl||r.dataUrl,layout:(i=n.layout)!=null?i:r.layout})}return Array.from(t.values())}function Xo(e,t={}){var s,o,c;let i=e.filter(ut),n=(o=(s=i.map(Ny).find(Boolean))!=null?s:t.defaultBrandName)!=null?o:"Imported Brand",r=(c=i.map(Hy).find(Boolean))!=null?c:{colors:{}},a=[];for(let l of i)"layers"in l&&a.push(...Ko(l.layers,"visual element")),"assets"in l&&a.push(...Ko(l.assets,"visual element")),ut(l.endgame)&&"assets"in l.endgame&&a.push(...Ko(l.endgame.assets,"endgame"));return{version:"1.0",brand_name:n,brand_dna:r,assets:Uy(a)}}import{GoogleGenAI as $y}from"@google/genai";async function ha(e,t,i=[],n={}){var r,a,s,o,c,l,d;try{if(!(e!=null&&e.trim()))throw new Error("Gemini API key is required");if(!(t!=null&&t.trim()))throw new Error("Prompt is required");for(let b=0;b<i.length;b++){let v=i[b];if(!v.base64||!v.mimeType)throw new Error(`Image ${b+1} is missing required data`);if(v.base64.length<1e3&&console.warn(`Image ${b+1} data appears very small, may be corrupted`),!v.mimeType.startsWith("image/"))throw new Error(`Image ${b+1} has invalid MIME type: ${v.mimeType}`)}let u=new $y({apiKey:e}),p="gemini-2.5-flash",f=[t];i.length>0&&i.forEach((b,v)=>{f.push({inlineData:{data:b.base64,mimeType:b.mimeType}}),console.log(`[Gemini] Added image ${v+1}: ${b.mimeType}, size: ${Math.round(b.base64.length/1024)}KB`)}),console.log(`[Gemini] Making request with ${i.length} images and prompt length: ${t.length}`);let m=await u.models.generateContent({model:p,contents:f}),h="",g=(s=(a=(r=m.candidates)==null?void 0:r[0])==null?void 0:a.content)==null?void 0:s.parts;if(g)for(let b of g)b.text&&(h+=b.text);if(!h.trim())throw new Error("Empty response from Gemini API");return console.log(`[Gemini] Response received, length: ${h.length}`),h}catch(u){throw console.error("[Gemini] API error:",u),(o=u.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."):(c=u.message)!=null&&c.includes("API_KEY_INVALID")?new Error("Invalid Gemini API key. Please check your API key configuration."):(l=u.message)!=null&&l.includes("QUOTA_EXCEEDED")?new Error("Gemini API quota exceeded. Please try again later or check your billing."):(d=u.message)!=null&&d.includes("SAFETY")?new Error("Content was flagged by Gemini safety filters. Please try with different images."):u}}import{GoogleGenAI as qy}from"@google/genai";async function Fi(e,t,i=[],n={}){try{console.info("[GEMINI-REAL-SDK] Initializing GoogleGenAI...");let r=new qy({apiKey:e}),a=[{text:t}];i.length>0&&i.forEach((o,c)=>{console.info(`[GEMINI-REAL-SDK] Adding image part ${c}`),a.push({inlineData:{mimeType:o.mimeType,data:o.base64}})}),console.info("[GEMINI-REAL-SDK] Calling generateContent with model: gemini-2.5-flash-image");let s=await r.models.generateContent({model:"gemini-2.5-flash-image",contents:a});if(console.info("[GEMINI-REAL-SDK] Received response from model"),!s.candidates||!s.candidates[0]||!s.candidates[0].content||!s.candidates[0].content.parts)throw new Error("Gemini 2.5 Flash Image returned invalid response structure.");for(let o of s.candidates[0].content.parts)if(o.text)console.log(o.text);else if(o.inlineData){let c=o.inlineData.data,l=o.inlineData.mimeType||"image/png";return console.info("[GEMINI-REAL-SDK] Found inline image data in response"),`data:${l};base64,${c}`}throw new Error("Gemini 2.5 Flash Image returned no image data.")}catch(r){throw console.error("[GEMINI-REAL-SDK] Error in generateImageWithGemini25Flash:",JSON.stringify(r,Object.getOwnPropertyNames(r),2)),r}}function Xf(e){let t=e.brandAssets.map(a=>{let s=`- ${a.id}: ${a.role}`;return a.layout&&(s+=` [pos: ${a.layout.x.toFixed(0)},${a.layout.y.toFixed(0)}, size: ${a.layout.w.toFixed(0)}x${a.layout.h.toFixed(0)}, z: ${a.layout.z}, opacity: ${a.layout.opacity}]`),s}).join(`
|
|
416
|
+
`)||"None",i=e.brandDna?`Colors: ${JSON.stringify(e.brandDna.colors)}, Style: ${e.brandDna.style||"not specified"}`:"Not provided",n=e.gameObjects.map(a=>typeof a=="string"?`- id: ${a}`:`- id: ${a.id}${a.category?`, category: ${a.category}`:""}${a.type?`, type: ${a.type}`:""}`).join(`
|
|
417
|
+
`),r="";if(e.brandConfig){let a=e.brandConfig,s=[];a.splash&&s.push(`SPLASH: title="${a.splash.title||""}", subtitle="${a.splash.subtitle||""}", button="${a.splash.button_label||""}"`),a.endgame&&s.push(`ENDGAME: title="${a.endgame.title||""}", subtitle="${a.endgame.subtitle||""}", cta="${a.endgame.cta_label||""}"`),a.tutorial&&s.push(`TUTORIAL: text="${a.tutorial.label_text||""}", helper="${a.tutorial.helper_text||""}"`),s.length>0&&(r=`
|
|
418
|
+
BRAND CONTENT:
|
|
419
|
+
${s.join(`
|
|
420
|
+
`)}
|
|
421
|
+
`)}return`
|
|
422
|
+
You are analyzing a brand's visual design for use in a playable ad game.
|
|
423
|
+
|
|
424
|
+
GAME CONTEXT:
|
|
425
|
+
${e.gamePrompt||"Simple game"}
|
|
426
|
+
|
|
427
|
+
GAME OBJECTS (need assets):
|
|
428
|
+
${n}
|
|
429
|
+
|
|
430
|
+
BRAND ASSETS PROVIDED:
|
|
431
|
+
${t}
|
|
432
|
+
|
|
433
|
+
BRAND DNA:
|
|
434
|
+
${i}
|
|
435
|
+
${r}
|
|
436
|
+
VISUAL REFERENCE: [See attached flat design image]
|
|
437
|
+
|
|
438
|
+
TASK:
|
|
439
|
+
1. Match brand assets to game objects where semantically appropriate
|
|
440
|
+
2. For unmatched game objects that need visuals, mark as GENERATE with a detailed prompt
|
|
441
|
+
3. For non-visual objects (text, effects, particles), mark as KEEP
|
|
442
|
+
|
|
443
|
+
RULES (IMPORTANT):
|
|
444
|
+
- Backgrounds should map to background objects
|
|
445
|
+
- Logos should map to logo/brand objects
|
|
446
|
+
- CTA/buttons should map to button objects
|
|
447
|
+
- Characters/elements may map to game elements
|
|
448
|
+
- Generate prompts should be detailed and include: subject, style, colors
|
|
449
|
+
- For EVERY decision, you MUST include:
|
|
450
|
+
- "confidence": number between 0.0 and 1.0
|
|
451
|
+
- "reason": short explanation of why this action was chosen
|
|
452
|
+
|
|
453
|
+
OUTPUT ONLY VALID JSON (no markdown, no explanation):
|
|
454
|
+
{
|
|
455
|
+
"mappings": [
|
|
456
|
+
{
|
|
457
|
+
"game_object": "object_id",
|
|
458
|
+
"action": "APPLY",
|
|
459
|
+
"brand_asset": "asset_id",
|
|
460
|
+
"confidence": 0.95,
|
|
461
|
+
"reason": "Logo asset matches brand logo object"
|
|
462
|
+
},
|
|
463
|
+
{
|
|
464
|
+
"game_object": "object_id",
|
|
465
|
+
"action": "GENERATE",
|
|
466
|
+
"generation_prompt": "Create a...",
|
|
467
|
+
"reference_asset": "logo",
|
|
468
|
+
"confidence": 0.72,
|
|
469
|
+
"reason": "CTA requires brand color and typography"
|
|
470
|
+
},
|
|
471
|
+
{
|
|
472
|
+
"game_object": "object_id",
|
|
473
|
+
"action": "KEEP",
|
|
474
|
+
"confidence": 0.9,
|
|
475
|
+
"reason": "Effect/particle object, no visual replacement needed"
|
|
476
|
+
}
|
|
477
|
+
]
|
|
478
|
+
}
|
|
479
|
+
`.trim()}function Zf(e){var r,a;let t=(r=e.brandDna)!=null&&r.colors?`Primary: ${e.brandDna.colors.primary}, Secondary: ${e.brandDna.colors.secondary||"N/A"}, Accent: ${e.brandDna.colors.accent||"N/A"}`:"Use provided reference colors",i=((a=e.brandDna)==null?void 0:a.style)||"modern gaming style",n=e.needsTransparency?"BACKGROUND: REQUIRED solid magenta #FF00FF (for transparency removal)":"BACKGROUND: Use brand colors naturally, fill the entire frame";return`
|
|
480
|
+
TASK: ${e.prompt}
|
|
481
|
+
|
|
482
|
+
BRAND STYLE:
|
|
483
|
+
- Colors: ${t}
|
|
484
|
+
- Style: ${i}
|
|
485
|
+
|
|
486
|
+
CHANGE_STRENGTH: 8/10
|
|
487
|
+
REFERENCE: ${e.hasReference?"provided (use as style guide for colors and aesthetics)":"none"}
|
|
488
|
+
${n}
|
|
489
|
+
|
|
490
|
+
OUTPUT CONSTRAINTS (MUST FOLLOW):
|
|
491
|
+
- Do NOT add extra text unless specifically requested
|
|
492
|
+
- Preserve aspect ratio${e.aspectRatio?` (target: ${e.aspectRatio})`:""}
|
|
493
|
+
- Keep padding under 5% of asset size
|
|
494
|
+
- No drop shadows unless explicitly requested
|
|
495
|
+
- No gradients on the background (solid ${e.needsTransparency?"magenta":"colors"} only)
|
|
496
|
+
- Center the subject in frame
|
|
497
|
+
|
|
498
|
+
OUTPUT:
|
|
499
|
+
Generate the requested asset matching the brand style.${e.needsTransparency?" Background MUST be solid magenta (#FF00FF).":""}
|
|
500
|
+
`.trim()}function Jf(e){return e.map(t=>{if(typeof t=="string"){let i=t,n,r;return i.includes("background")?(n="background",r="background"):i.includes("button")||i.includes("cta")?(n="ui",r="button"):i.includes("logo")?(n="ui",r="logo"):i.includes("title")||i.includes("subtitle")||i.includes("text")?(n="text",r="text"):i.includes("effect")||i.includes("confetti")||i.includes("particle")?(n="effects",r="effect"):i.includes("ui.")||i.includes("splash")||i.includes("endgame")?(n="ui",r="image"):(n="environment",r="interactive"),{id:i,category:n,type:r}}return t})}function Qf(e,t){return!(e.includes("background")&&(e.includes("_1")||e.includes("splash")||e.includes("endgame")||e.includes("main"))||t==="text"||t==="effects"&&e.includes("particle"))}async function eh(e){var s,o;let t=Jf(e.gameObjects),i={gamePrompt:e.gamePrompt,gameObjects:t,brandAssets:e.manifest.assets,brandDna:e.manifest.brand_dna,brandName:e.manifest.brand_name},n=Xf(i),r=[];if(e.flatDesignDataUrl)try{let c=th(e.flatDesignDataUrl);c&&c.base64&&c.mimeType?c.base64.length<100?console.warn("[Pipeline] Flat design data URL appears invalid (too short)"):(r.push(c),console.log("[Pipeline] Added flat design to analysis, size:",c.base64.length)):console.warn("[Pipeline] Failed to parse flat design data URL")}catch(c){console.warn("[Pipeline] Error processing flat design:",c)}console.log("[Pipeline] Running analysis chain with",r.length,"images...");let a;try{a=await ha(e.apiKey,n,r,{model:"gemini-2.5-flash"}),console.log("[Pipeline] Analysis response received")}catch(c){throw console.error("[Pipeline] Gemini API error:",c),(s=c.message)!=null&&s.includes("Unable to process input image")?new Error("Gemini API unable to process the uploaded images. Please try with different images or ensure they are valid PNG/JPG files under 10MB."):(o=c.message)!=null&&o.includes("image")?new Error("Image processing failed. Please ensure your images are valid and not corrupted."):c}return Gy(a,e.gameObjects)}function Gy(e,t){try{let i=e,n=e.match(/```(?:json)?\s*([\s\S]*?)```/);if(n)i=n[1].trim();else{let a=e.match(/\{[\s\S]*\}/);a&&(i=a[0])}let r=JSON.parse(i);return r.mappings&&Array.isArray(r.mappings)?{mappingResult:r,rawResponse:e,parsed:!0}:{mappingResult:{mappings:t.map(a=>({game_object:a,action:"KEEP",status:"Analysis response missing mappings[]"}))},rawResponse:e,parsed:!1,parseError:"Missing mappings[] array"}}catch(i){return{mappingResult:{mappings:t.map(n=>({game_object:n,action:"KEEP",status:"Analysis response was not valid JSON"}))},rawResponse:e,parsed:!1,parseError:i!=null&&i.message?String(i.message):"JSON parse failed"}}}async function Zo(e,t,i={}){var r;let n=t.mappings.filter(a=>a.action==="GENERATE");if(n.length===0){console.log("[Pipeline] No assets to generate");return}console.log(`[Pipeline] Generating ${n.length} assets...`);for(let a=0;a<n.length;a++){let s=n[a];(r=i.onProgress)==null||r.call(i,a+1,n.length,s.game_object);try{let o=await Wy(e,s);s.output_dataUrl=o,s.status="Generated \u2713"}catch(o){console.error(`[Pipeline] Failed to generate ${s.game_object}:`,o),s.status="Failed \u2717"}}console.log("[Pipeline] Generation chain complete")}async function Wy(e,t){if(!t.generation_prompt)throw new Error("No generation prompt provided");let i=[];if(t.reference_asset&&e.manifest){let o=e.manifest.assets.find(c=>c.id===t.reference_asset);if(o){let c=e.assetFiles.get(o.file);if(c){let l=await Rt(c);l&&i.push({base64:l.base64,mimeType:l.mimeType})}}}if(e.flatDesignDataUrl){let o=th(e.flatDesignDataUrl);o&&i.push(o)}let n=Qf(t.game_object),r={prompt:t.generation_prompt,hasReference:i.length>0,brandDna:e.manifest.brand_dna,needsTransparency:n},a=Zf(r);console.log(`[Pipeline] Generating asset for ${t.game_object}... (transparency: ${n})`);let s=await Fi(e.apiKey,a,i,{aspectRatio:"1:1",model:"gemini-2.5-flash-image"});return n&&await Bi(s)||s}function th(e){let[t,i]=e.split(","),n=t==null?void 0:t.match(/data:(.*?);base64/);return i&&n?{base64:i,mimeType:n[1]}:null}async function ih(e,t){let i=e.assets,n=[];Array.isArray(i)?n=i:i&&typeof i=="object"?n=Object.entries(i).map(([r,a])=>({id:r,file:String(a),role:"visual element"})):n=[],e.assets=n;for(let r of n){let a=t.get(r.file);if(a){let s=await Rt(a);s&&(r.dataUrl=s.dataUrl)}}}var ga=class{constructor(){this.root=null;this.currentTab="upload";this.uploadMethod="individual";this.uploadedJsons=new Map;this.normalizedManifest=null;this.flatDesignDataUrl=null;this.assetFiles=new Map;this.zipFile=null;this.mappingResult=null;this.analysisRawResponse=null;this.analysisParsedOk=null;this.analysisParseError=null;this.isAnalyzing=!1;this.isGenerating=!1}get manifest(){return this.normalizedManifest}render(){return`
|
|
501
|
+
<div class="scene-panel brand-vision-panel panel-accent-violet" data-panel="brand-vision">
|
|
502
|
+
<div class="scene-panel-header" data-panel-handle>
|
|
503
|
+
<div class="panel-title">
|
|
504
|
+
<span class="panel-pill">\u{1F3A8}</span>
|
|
505
|
+
<span class="panel-title-text">Brand Vision Mapper</span>
|
|
506
|
+
</div>
|
|
507
|
+
<div class="scene-panel-actions">
|
|
508
|
+
<button class="scene-panel-close" type="button" data-panel-close title="Close and return to dashboard">\u2715</button>
|
|
509
|
+
<button class="scene-panel-toggle" type="button" data-panel-toggle>\u25BE</button>
|
|
510
|
+
</div>
|
|
511
|
+
</div>
|
|
512
|
+
<div class="scene-panel-body">
|
|
513
|
+
<!-- TABS -->
|
|
514
|
+
<div class="ai-tabs">
|
|
515
|
+
<button class="ai-tab-btn active" data-vision-tab="upload">\u{1F4E4} Upload</button>
|
|
516
|
+
<button class="ai-tab-btn" data-vision-tab="mapping">\u{1F3AF} Mapping</button>
|
|
517
|
+
<button class="ai-tab-btn" data-vision-tab="apply">\u2705 Apply</button>
|
|
518
|
+
</div>
|
|
519
|
+
|
|
520
|
+
<!-- UPLOAD TAB -->
|
|
521
|
+
<div class="ai-tab-content active" data-vision-content="upload">
|
|
522
|
+
<div class="panel-section">
|
|
523
|
+
<div class="panel-section-title">1. API Key</div>
|
|
524
|
+
<input class="inspector-input" type="password" data-vision-api-key placeholder="Gemini API Key" value="AIzaSyC_Y9BG7U11ZcsQ9BP5lET7OifOzYuMssg">
|
|
525
|
+
</div>
|
|
526
|
+
|
|
527
|
+
<div class="panel-section">
|
|
528
|
+
<div class="panel-section-title">2. Upload Method</div>
|
|
529
|
+
<div class="inspector-row">
|
|
530
|
+
<select class="inspector-input" data-vision-upload-method style="flex:1;">
|
|
531
|
+
<option value="individual">Individual Files</option>
|
|
532
|
+
<option value="zip">ZIP Package</option>
|
|
533
|
+
</select>
|
|
534
|
+
</div>
|
|
535
|
+
</div>
|
|
536
|
+
|
|
537
|
+
<!-- INDIVIDUAL FILES UPLOAD -->
|
|
538
|
+
<div class="vision-upload-section active" data-vision-upload-section="individual">
|
|
539
|
+
<div class="panel-section">
|
|
540
|
+
<div class="panel-section-title">Brand Configs (JSON)</div>
|
|
541
|
+
<div class="inspector-row">
|
|
542
|
+
<button class="inspector-btn inspector-btn-sm" type="button" data-vision-upload-manifest>\u{1F4C4} Upload JSONs</button>
|
|
543
|
+
<input class="hidden" type="file" accept=".json" multiple data-vision-manifest-input>
|
|
544
|
+
<div class="inspector-text-sm" data-vision-manifest-status style="white-space: pre-wrap;">None</div>
|
|
545
|
+
</div>
|
|
546
|
+
</div>
|
|
547
|
+
|
|
548
|
+
<div class="panel-section">
|
|
549
|
+
<div class="panel-section-title">Asset Files (PNG)</div>
|
|
550
|
+
<div class="inspector-row">
|
|
551
|
+
<button class="inspector-btn inspector-btn-sm" type="button" data-vision-upload-assets>\u{1F4F7} Upload PNGs</button>
|
|
552
|
+
<input class="hidden" type="file" accept="image/*" multiple data-vision-assets-input>
|
|
553
|
+
<span class="inspector-text-sm" data-vision-assets-status>None</span>
|
|
554
|
+
</div>
|
|
555
|
+
</div>
|
|
556
|
+
|
|
557
|
+
<div class="panel-section">
|
|
558
|
+
<div class="panel-section-title">Flat Design (Style Reference)</div>
|
|
559
|
+
<div class="inspector-row">
|
|
560
|
+
<button class="inspector-btn inspector-btn-sm" type="button" data-vision-upload-flat>\u{1F3A8} Upload Flat Design</button>
|
|
561
|
+
<input class="hidden" type="file" accept="image/*" data-vision-flat-input>
|
|
562
|
+
<span class="inspector-text-sm" data-vision-flat-status>None</span>
|
|
563
|
+
</div>
|
|
564
|
+
<div class="vision-flat-preview" data-vision-flat-preview></div>
|
|
565
|
+
</div>
|
|
566
|
+
</div>
|
|
567
|
+
|
|
568
|
+
<!-- ZIP PACKAGE UPLOAD -->
|
|
569
|
+
<div class="vision-upload-section" data-vision-upload-section="zip">
|
|
570
|
+
<div class="panel-section">
|
|
571
|
+
<div class="panel-section-title">ZIP Package</div>
|
|
572
|
+
<div class="inspector-row">
|
|
573
|
+
<button class="inspector-btn inspector-btn-sm" type="button" data-vision-upload-zip>\u{1F4E6} Upload ZIP</button>
|
|
574
|
+
<input class="hidden" type="file" accept=".zip" data-vision-zip-input>
|
|
575
|
+
<span class="inspector-text-sm" data-vision-zip-status>None</span>
|
|
576
|
+
</div>
|
|
577
|
+
<div class="inspector-text-sm" style="margin-top: 8px; color: #888;">
|
|
578
|
+
ZIP should contain: assets/ folder with PNGs, brandDna.json, positionnormalizedpack.json
|
|
579
|
+
</div>
|
|
580
|
+
</div>
|
|
581
|
+
</div>
|
|
582
|
+
|
|
583
|
+
<div class="panel-section">
|
|
584
|
+
<div class="inspector-row">
|
|
585
|
+
<button class="inspector-btn primary" type="button" data-vision-analyze>\u{1F50D} Analyze & Map</button>
|
|
586
|
+
<span class="inspector-status" data-vision-upload-status>Ready</span>
|
|
587
|
+
</div>
|
|
588
|
+
</div>
|
|
589
|
+
</div>
|
|
590
|
+
|
|
591
|
+
<!-- MAPPING TAB -->
|
|
592
|
+
<div class="ai-tab-content" data-vision-content="mapping">
|
|
593
|
+
<div class="panel-section">
|
|
594
|
+
<div class="panel-section-title">Mapping Plan</div>
|
|
595
|
+
<div class="inspector-status" data-vision-mapping-status>Run analysis first</div>
|
|
596
|
+
<div class="vision-mapping-list" data-vision-mappings></div>
|
|
597
|
+
</div>
|
|
598
|
+
</div>
|
|
599
|
+
|
|
600
|
+
<!-- APPLY TAB -->
|
|
601
|
+
<div class="ai-tab-content" data-vision-content="apply">
|
|
602
|
+
<div class="panel-section">
|
|
603
|
+
<div class="panel-section-title">Generation & Apply</div>
|
|
604
|
+
<div class="inspector-row">
|
|
605
|
+
<button class="inspector-btn" type="button" data-vision-generate-all>\u{1F916} Generate Missing</button>
|
|
606
|
+
<button class="inspector-btn primary" type="button" data-vision-apply-all>\u2705 Apply All</button>
|
|
607
|
+
</div>
|
|
608
|
+
<div class="inspector-status" data-vision-apply-status>Ready</div>
|
|
609
|
+
<div class="vision-progress-list" data-vision-progress></div>
|
|
610
|
+
</div>
|
|
611
|
+
</div>
|
|
612
|
+
|
|
613
|
+
</div>
|
|
614
|
+
<div class="panel-resize-handle" data-panel-resize></div>
|
|
615
|
+
</div>
|
|
616
|
+
`}initialize(t,i){this.root=t.querySelector('[data-panel="brand-vision"]'),this.onClose=i,this.root&&(this.attachEventListeners(),this.setupResizeHandle())}attachEventListeners(){var i,n,r,a,s,o,c,l,d,u,p,f,m;if(!this.root)return;(i=this.root.querySelector("[data-panel-close]"))==null||i.addEventListener("click",()=>{if(this.onClose)this.onClose();else{let h="/dashboard";window.location.pathname!==h&&(window.location.href=h)}}),this.root.querySelectorAll("[data-vision-tab]").forEach(h=>{h.addEventListener("click",()=>{let g=h.dataset.visionTab;this.switchTab(g)})}),(n=this.root.querySelector("[data-vision-upload-method]"))==null||n.addEventListener("change",h=>{let g=h.target.value;this.switchUploadMethod(g)}),(r=this.root.querySelector("[data-vision-upload-manifest]"))==null||r.addEventListener("click",()=>{var h,g;(g=(h=this.root)==null?void 0:h.querySelector("[data-vision-manifest-input]"))==null||g.click()}),(a=this.root.querySelector("[data-vision-upload-zip]"))==null||a.addEventListener("click",()=>{var h,g;(g=(h=this.root)==null?void 0:h.querySelector("[data-vision-zip-input]"))==null||g.click()}),(s=this.root.querySelector("[data-vision-zip-input]"))==null||s.addEventListener("change",h=>{this.handleZipUpload(h)}),(o=this.root.querySelector("[data-vision-manifest-input]"))==null||o.addEventListener("change",h=>{this.handleManifestUpload(h)}),(c=this.root.querySelector("[data-vision-upload-assets]"))==null||c.addEventListener("click",()=>{var h,g;(g=(h=this.root)==null?void 0:h.querySelector("[data-vision-assets-input]"))==null||g.click()}),(l=this.root.querySelector("[data-vision-assets-input]"))==null||l.addEventListener("change",h=>{this.handleAssetsUpload(h)}),(d=this.root.querySelector("[data-vision-upload-flat]"))==null||d.addEventListener("click",()=>{var h,g;(g=(h=this.root)==null?void 0:h.querySelector("[data-vision-flat-input]"))==null||g.click()}),(u=this.root.querySelector("[data-vision-flat-input]"))==null||u.addEventListener("change",h=>{this.handleFlatDesignUpload(h)}),(p=this.root.querySelector("[data-vision-analyze]"))==null||p.addEventListener("click",()=>{this.runAnalysis()}),(f=this.root.querySelector("[data-vision-generate-all]"))==null||f.addEventListener("click",()=>{this.generateAllMissing()}),(m=this.root.querySelector("[data-vision-apply-all]"))==null||m.addEventListener("click",()=>{this.applyAll()});let t=this.root.querySelector("[data-vision-mappings]");t==null||t.addEventListener("click",h=>{let g=h.target;if(!g)return;let b=g.closest("[data-mapping-item]"),v=b==null?void 0:b.dataset.mappingItem;v&&(g.closest("[data-mapping-apply-one]")&&this.applyOne(v),g.closest("[data-mapping-save-one]")&&this.saveAndApplyOne(v),g.closest("[data-mapping-edit-one]")&&this.openEditorForOne(v),g.closest("[data-mapping-generate-one]")&&this.generateOne(v),g.closest("[data-mapping-copy-raw]")&&this.copyRawAnalysis())}),t==null||t.addEventListener("change",h=>{let g=h.target;if(!g||!this.mappingResult)return;let b=g.closest("[data-mapping-item]"),v=b==null?void 0:b.dataset.mappingItem;if(!v)return;let y=this.mappingResult.mappings.find(x=>x.game_object===v);y&&(g.matches("[data-mapping-action]")&&(y.action=String(g.value||"KEEP"),y.status="Edited",this.renderMappings()),g.matches("[data-mapping-brand-asset]")&&(y.brand_asset=String(g.value||""),y.status="Edited",this.renderMappings()))}),t==null||t.addEventListener("input",h=>{let g=h.target;if(!g||!this.mappingResult||!g.matches("[data-mapping-prompt]"))return;let b=g.closest("[data-mapping-item]"),v=b==null?void 0:b.dataset.mappingItem;if(!v)return;let y=this.mappingResult.mappings.find(x=>x.game_object===v);y&&(y.generation_prompt=String(g.value||""),y.status="Edited")})}switchTab(t){var i,n;this.root&&(this.currentTab=t,this.root.querySelectorAll("[data-vision-tab]").forEach(r=>r.classList.remove("active")),this.root.querySelectorAll("[data-vision-content]").forEach(r=>r.classList.remove("active")),(i=this.root.querySelector(`[data-vision-tab="${t}"]`))==null||i.classList.add("active"),(n=this.root.querySelector(`[data-vision-content="${t}"]`))==null||n.classList.add("active"))}switchUploadMethod(t){var i;this.root&&(this.uploadMethod=t,this.root.querySelectorAll("[data-vision-upload-section]").forEach(n=>{n.classList.remove("active")}),(i=this.root.querySelector(`[data-vision-upload-section="${t}"]`))==null||i.classList.add("active"))}async handleZipUpload(t){var r;let n=(r=t.target.files)==null?void 0:r[0];if(n){this.zipFile=n,this.setStatus("zip",`Selected: ${n.name} (${(n.size/1024/1024).toFixed(2)} MB)`);try{await this.processZipFile(n)}catch(a){console.error("[BrandVision] ZIP processing failed:",a),this.setStatus("zip",`Error: ${a instanceof Error?a.message:"Unknown error"}`)}}}async processZipFile(t){var s,o;let i=await nh.default.loadAsync(t),n=[],r=[];i.forEach((c,l)=>{let d=c.toLowerCase();d.endsWith(".json")?n.push({name:c,content:null}):d.startsWith("assets/")&&d.endsWith(".png")&&r.push({name:c,file:l})});for(let c of n)try{let l=await((s=i.file(c.name))==null?void 0:s.async("text"));l&&(c.content=JSON.parse(l))}catch(l){console.warn(`Failed to parse ${c.name}:`,l)}let a=new Map;for(let c of r)try{let l=await c.file.async("uint8array"),d=new Blob([l],{type:"image/png"}),u=c.name.split("/").pop()||c.name;console.log(`Processing ${u}, uint8array length: ${l.length}, blob size: ${d.size}`);let p;try{p=await this.blobToDataUrl(d)}catch(g){console.warn(`FileReader failed for ${u}, using fallback:`,g),p=`data:image/png;base64,${btoa(String.fromCharCode.apply(null,Array.from(l)))}`}if(console.log(`Data URL length: ${p.length}, starts with: ${p.substring(0,50)}...`),!p.startsWith("data:image/png;base64,")){console.warn(`Invalid data URL format for ${u}:`,p.substring(0,100));continue}let f=this.inferAssetCategory(u.replace(".png",""));console.log(`Saving ${u} to category: ${f}`);let h=await(await fetch("/api/library/save",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({category:f,filename:u,data:p,overwrite:!0})})).json();if(console.log(`Save result for ${u}:`,h),h.success){console.log(`\u2705 Saved PNG to library: ${u} (${f}) at ${h.path}`);let g=new File([d],u,{type:"image/png"});a.set(u,g)}else console.warn(`\u274C Failed to save ${u}:`,h.error)}catch(l){console.warn(`Failed to extract ${c.name}:`,l)}this.uploadedJsons.clear(),n.forEach(({name:c,content:l})=>{l&&this.uploadedJsons.set(c,l)}),this.assetFiles=a;try{this.normalizedManifest=Xo(Array.from(this.uploadedJsons.values()),{defaultBrandName:"Imported Brand"});let c=[];for(let[d,u]of a){let p=await this.fileToDataUrl(u);c.push({id:d.replace(".png",""),filename:d,dataUrl:p,category:this.inferAssetCategory(d.replace(".png",""))})}this.normalizedManifest&&(this.normalizedManifest.assets=c);let l=c.length;this.setStatus("zip",`\u2705 Processed: ${n.length} JSONs, ${l} PNGs
|
|
617
|
+
\u{1F3F7}\uFE0F Brand: ${((o=this.normalizedManifest)==null?void 0:o.brand_name)||"Imported Brand"}`),this.addAssetsToRegistry(c),this.refreshLibrary()}catch(c){console.error("[BrandVision] Failed to normalize ZIP manifest:",c),this.normalizedManifest=null,this.setStatus("zip","\u274C Failed to normalize manifest")}}async fileToDataUrl(t){return new Promise((i,n)=>{let r=new FileReader;r.onload=()=>i(r.result),r.onerror=n,r.readAsDataURL(t)})}async blobToDataUrl(t){return new Promise((i,n)=>{let r=new FileReader;r.onload=()=>{let a=r.result;console.log("FileReader result type:",typeof a,"length:",a.length),console.log("Data URL prefix:",a.substring(0,30)),i(a)},r.onerror=a=>{console.error("FileReader error:",a),n(a)},r.readAsDataURL(t)})}inferAssetCategory(t){let i=t.toLowerCase();return i.includes("background")||i.includes("bg")?"backgrounds":i.includes("ui")||i.includes("button")||i.includes("cta")||i.includes("logo")||i.includes("text")?"ui":i.includes("sparkle")||i.includes("effect")||i.includes("particle")?"effects":i.includes("bottle")||i.includes("product")||i.includes("item")?"products":"misc"}addAssetsToRegistry(t){let i=window.getEditableAssets;if(typeof i!="function")return;let n=i();if(!(n!=null&&n.libraryAssets))return;let r={};for(let a of t){let s=a.category||"misc";r[s]||(r[s]=[]),n.libraryAssets[s]||(n.libraryAssets[s]=[]),n.libraryAssets[s].some(c=>c.filename===a.filename)||(n.libraryAssets[s].unshift({filename:a.filename,displayName:a.id.replace(/_/g," ").replace(/\b\w/g,c=>c.toUpperCase())}),console.log(`[BrandVision] Added ${a.filename} to registry category ${s}`))}}refreshLibrary(){let t=window.refreshAssetLibrary;typeof t=="function"&&t();let i=window.reRenderAssetLibrary;typeof i=="function"&&i()}async handleManifestUpload(t){var a;let i=t.target,n=i.files;if(!n||n.length===0)return;this.uploadedJsons.clear(),this.normalizedManifest=null,this.mappingResult=null;let r="";for(let s of Array.from(n))try{let o=await s.text(),c=JSON.parse(o);this.uploadedJsons.set(s.name,c),c.layers?r+=`\u2705 Layers: ${s.name}
|
|
618
|
+
`:c.brand_dna||c.colors?r+=`\u2705 Brand: ${s.name}
|
|
619
|
+
`:r+=`\u2705 Loaded: ${s.name}
|
|
620
|
+
`}catch{r+=`\u274C Error in ${s.name}
|
|
621
|
+
`}try{this.normalizedManifest=Xo(Array.from(this.uploadedJsons.values()),{defaultBrandName:"Imported Brand"});let s=Array.isArray((a=this.normalizedManifest)==null?void 0:a.assets)?this.normalizedManifest.assets.length:0;r+=`
|
|
622
|
+
\u{1F4E6} Normalized manifest: ${s} assets`,r+=`
|
|
623
|
+
\u{1F3F7}\uFE0F Brand: ${this.normalizedManifest.brand_name||"Imported Brand"}`,console.info("[BrandVision] Normalized manifest",{jsonFiles:Array.from(this.uploadedJsons.keys()),assetsType:typeof this.normalizedManifest.assets,assetsCount:s,brandName:this.normalizedManifest.brand_name})}catch(s){console.error("[BrandVision] Failed to normalize manifest:",s),this.normalizedManifest=null,r+=`
|
|
624
|
+
\u274C Failed to normalize manifest`}i.value="",this.setStatus("manifest",r.trim())}async handleAssetsUpload(t){let n=t.target.files;if(!(!n||n.length===0)){for(let r of Array.from(n))this.assetFiles.set(r.name,r);this.setStatus("assets",`${this.assetFiles.size} files loaded`)}}async handleFlatDesignUpload(t){var a,s;let n=(a=t.target.files)==null?void 0:a[0];if(!n)return;let r=await Rt(n);if(r){this.flatDesignDataUrl=r.dataUrl,this.setStatus("flat",n.name);let o=(s=this.root)==null?void 0:s.querySelector("[data-vision-flat-preview]");o&&(o.innerHTML=`<img src="${r.dataUrl}" style="max-width:100%;max-height:100px;border-radius:4px;">`)}}async runAnalysis(){var n,r,a,s,o,c,l;if(this.isAnalyzing)return;let t=(a=(r=(n=this.root)==null?void 0:n.querySelector("[data-vision-api-key]"))==null?void 0:r.value)==null?void 0:a.trim();if(!t){this.setStatus("upload","Missing API key");return}let i=this.manifest;if(!i){this.setStatus("upload","Upload manifest first");return}Array.isArray(i.assets)||console.warn("[BrandVision] Manifest assets not array at analysis time; continuing with normalization fallback.",{assets:i.assets}),this.isAnalyzing=!0,this.setStatus("upload","Analyzing...");try{await ih(i,this.assetFiles);let d={apiKey:t,manifest:i,flatDesignDataUrl:this.flatDesignDataUrl,assetFiles:this.assetFiles,gameObjects:this.getGameObjects(),gamePrompt:await this.getGamePrompt()},u=await eh(d);this.mappingResult=u.mappingResult,this.analysisRawResponse=u.rawResponse,this.analysisParsedOk=u.parsed,this.analysisParseError=(s=u.parseError)!=null?s:null,this.renderMappings(),u.parsed?(this.setStatus("upload","Analysis complete"),this.setStatus("mapping",`${(l=(c=(o=this.mappingResult)==null?void 0:o.mappings)==null?void 0:c.length)!=null?l:0} objects mapped`)):(this.setStatus("upload","Analysis response was not JSON"),this.setStatus("mapping",`Parse failed: ${u.parseError||"Unknown error"}`)),this.switchTab("mapping")}catch(d){console.error("[BrandVision] Analysis failed:",d),this.setStatus("upload","Analysis failed")}finally{this.isAnalyzing=!1}}async generateAllMissing(){var i,n,r;if(this.isGenerating||!this.mappingResult||!this.manifest)return;let t=(r=(n=(i=this.root)==null?void 0:i.querySelector("[data-vision-api-key]"))==null?void 0:n.value)==null?void 0:r.trim();if(!t){this.setStatus("apply","Missing API key");return}this.isGenerating=!0;try{let a={apiKey:t,manifest:this.manifest,flatDesignDataUrl:this.flatDesignDataUrl,assetFiles:this.assetFiles,gameObjects:this.getGameObjects(),gamePrompt:await this.getGamePrompt()};await Zo(a,this.mappingResult,{onProgress:(s,o,c)=>{this.setStatus("apply",`Generating ${s}/${o}: ${c}`),this.renderMappings()}}),this.setStatus("apply","Generation complete"),this.renderMappings()}catch(a){console.error("[BrandVision] Generation failed:",a),this.setStatus("apply","Generation failed")}finally{this.isGenerating=!1}}renderMappings(){var o;let t=(o=this.root)==null?void 0:o.querySelector("[data-vision-mappings]");if(!t||!this.mappingResult)return;let i=this.manifest,n=this.getEngineAssets(),r=!!this.analysisRawResponse&&this.analysisParsedOk===!1,a=((i==null?void 0:i.assets)||[]).map(c=>`<option value="${c.id}">${c.id}</option>`).join(""),s=r?`
|
|
625
|
+
<div class="vision-raw-block">
|
|
626
|
+
<div class="inspector-text-sm" style="white-space: pre-wrap;">
|
|
627
|
+
\u26A0\uFE0F AI response was not valid JSON (${this.analysisParseError||"unknown error"}).
|
|
628
|
+
<button class="inspector-btn inspector-btn-sm" type="button" data-mapping-copy-raw style="margin-left:8px;">Copy raw</button>
|
|
629
|
+
</div>
|
|
630
|
+
<textarea class="inspector-input vision-raw-textarea" readonly>${this.analysisRawResponse||""}</textarea>
|
|
631
|
+
</div>
|
|
632
|
+
`:"";t.innerHTML=`
|
|
633
|
+
${s}
|
|
634
|
+
${this.mappingResult.mappings.map(c=>{var b;let l=n[c.game_object]||"",d=c.brand_asset||"",u=(b=i==null?void 0:i.assets)==null?void 0:b.find(v=>v.id===d),p=(u==null?void 0:u.dataUrl)||"",f=c.output_dataUrl||"",m=c.action==="GENERATE"?f:c.action==="APPLY"?p:"",h=!!m,g=`
|
|
635
|
+
<select class="inspector-input" data-mapping-brand-asset style="flex:1; padding:6px 8px;">
|
|
636
|
+
<option value="">Select brand asset\u2026</option>
|
|
637
|
+
${a.replace(`value="${d}"`,`value="${d}" selected`)}
|
|
638
|
+
</select>
|
|
639
|
+
`;return`
|
|
640
|
+
<div class="vision-mapping-item" data-mapping-item="${c.game_object}">
|
|
641
|
+
<div class="vision-mapping-header">
|
|
642
|
+
<span class="vision-mapping-object">${c.game_object}</span>
|
|
643
|
+
<select class="inspector-input vision-mapping-select" data-mapping-action>
|
|
644
|
+
<option value="APPLY" ${c.action==="APPLY"?"selected":""}>APPLY</option>
|
|
645
|
+
<option value="GENERATE" ${c.action==="GENERATE"?"selected":""}>GENERATE</option>
|
|
646
|
+
<option value="KEEP" ${c.action==="KEEP"?"selected":""}>KEEP</option>
|
|
647
|
+
</select>
|
|
648
|
+
</div>
|
|
649
|
+
|
|
650
|
+
${c.action==="APPLY"?`
|
|
651
|
+
<div class="inspector-row" style="margin-top:8px;">
|
|
652
|
+
${g}
|
|
653
|
+
<button class="inspector-btn inspector-btn-sm" type="button" data-mapping-edit-one>Edit/Crop\u2026</button>
|
|
654
|
+
</div>
|
|
655
|
+
`:""}
|
|
656
|
+
|
|
657
|
+
${c.action==="GENERATE"?`
|
|
658
|
+
<div style="margin-top:8px;">
|
|
659
|
+
<div class="inspector-text-sm" style="opacity:0.9;">Prompt</div>
|
|
660
|
+
<textarea class="inspector-input vision-mapping-prompt" data-mapping-prompt>${c.generation_prompt||""}</textarea>
|
|
661
|
+
<div class="inspector-row" style="margin-top:8px;">
|
|
662
|
+
<button class="inspector-btn inspector-btn-sm" type="button" data-mapping-generate-one>Generate</button>
|
|
663
|
+
<button class="inspector-btn inspector-btn-sm" type="button" data-mapping-edit-one>Edit/Crop\u2026</button>
|
|
664
|
+
</div>
|
|
665
|
+
</div>
|
|
666
|
+
`:""}
|
|
667
|
+
|
|
668
|
+
<div class="vision-mapping-row">
|
|
669
|
+
<div class="vision-mapping-current">
|
|
670
|
+
<div class="inspector-text-sm" style="opacity:0.8;">Current</div>
|
|
671
|
+
<div class="inspector-text-sm" style="white-space: pre-wrap; word-break: break-all;">${l||"(empty)"}</div>
|
|
672
|
+
</div>
|
|
673
|
+
<div class="vision-mapping-preview">
|
|
674
|
+
<div class="inspector-text-sm" style="opacity:0.8;">Preview</div>
|
|
675
|
+
${h?`<img src="${m}">`:'<div class="inspector-text-sm" style="opacity:0.6;">None</div>'}
|
|
676
|
+
</div>
|
|
677
|
+
</div>
|
|
678
|
+
|
|
679
|
+
<div class="vision-mapping-actions">
|
|
680
|
+
<button class="inspector-btn inspector-btn-sm primary" type="button" data-mapping-apply-one>Stage Override</button>
|
|
681
|
+
<button class="inspector-btn inspector-btn-sm success" type="button" data-mapping-save-one>Save to Library + Apply</button>
|
|
682
|
+
<span class="inspector-status vision-mapping-status">${c.status||"Ready"}</span>
|
|
683
|
+
</div>
|
|
684
|
+
</div>
|
|
685
|
+
`}).join("")}
|
|
686
|
+
`}async applyAll(){let t=await this.stageOverridesFromMappings({saveToLibrary:!1});this.setStatus("apply",t>0?`Staged ${t} asset overrides`:"No assets to stage")}getEngineAssets(){let t=window.getEditableEngineConfig;if(typeof t!="function")return{};let i=t();return i!=null&&i.assets&&typeof i.assets=="object"?i.assets:{}}getPreviewValueForMapping(t){if(!this.mappingResult||!this.manifest)return{value:null,source:"none"};let i=this.mappingResult.mappings.find(n=>n.game_object===t);if(!i)return{value:null,source:"none"};if(i.action==="GENERATE"&&i.output_dataUrl)return{value:i.output_dataUrl,source:"generated"};if(i.action==="APPLY"&&i.brand_asset){let n=this.manifest.assets.find(r=>r.id===i.brand_asset);if(n!=null&&n.dataUrl)return{value:n.dataUrl,source:"brand"}}return{value:null,source:"none"}}async stageOverridesFromMappings(t){if(!this.mappingResult)return 0;let i=0;for(let n of this.mappingResult.mappings){if(n.action==="KEEP"||n.action==="APPLY"&&!n.brand_asset||n.action==="GENERATE"&&!n.output_dataUrl)continue;let r=n.game_object,a=this.getPreviewValueForMapping(r);if(!a.value)continue;let s=t.saveToLibrary?await this.saveToLibraryAndReturnPath(r,a.value):a.value;s&&(await this.stageEngineAssetOverride(r,s),n.status=t.saveToLibrary?"Saved + staged \u2713":"Staged \u2713",i++)}return this.renderMappings(),i}async applyOne(t){var r;let i=this.getPreviewValueForMapping(t);if(!i.value){this.setStatus("apply",`No output to apply for ${t}`);return}await this.stageEngineAssetOverride(t,i.value);let n=(r=this.mappingResult)==null?void 0:r.mappings.find(a=>a.game_object===t);n&&(n.status="Staged \u2713"),this.renderMappings(),this.setStatus("apply",`Staged override for ${t}`)}async saveAndApplyOne(t){var a;let i=this.getPreviewValueForMapping(t);if(!i.value){this.setStatus("apply",`No output to save for ${t}`);return}let n=await this.saveToLibraryAndReturnPath(t,i.value);if(!n){this.setStatus("apply",`Save failed for ${t}`);return}await this.stageEngineAssetOverride(t,n);let r=(a=this.mappingResult)==null?void 0:a.mappings.find(s=>s.game_object===t);r&&(r.status="Saved + staged \u2713"),this.renderMappings(),this.setStatus("apply",`Saved + staged ${t}`)}openEditorForOne(t){if(!this.mappingResult)return;let i=this.mappingResult.mappings.find(s=>s.game_object===t);if(!i)return;let n=this.getPreviewValueForMapping(t),r=window.__openAiEditor;if(typeof r!="function"){this.setStatus("apply","AI editor not available");return}let a=i.action==="GENERATE"?i.generation_prompt:void 0;r(t,a,n.value||void 0,{path:`assets.${t}`})}async generateOne(t){var r,a,s;if(!this.mappingResult||this.isGenerating)return;let i=this.mappingResult.mappings.find(o=>o.game_object===t);if(!i)return;if(i.action="GENERATE",!i.generation_prompt){i.status="Missing prompt",this.renderMappings();return}let n=(s=(a=(r=this.root)==null?void 0:r.querySelector("[data-vision-api-key]"))==null?void 0:a.value)==null?void 0:s.trim();if(!n||!this.manifest){this.setStatus("apply","Missing API key or manifest");return}this.isGenerating=!0,i.status="Generating\u2026",this.renderMappings();try{let o={apiKey:n,manifest:this.manifest,flatDesignDataUrl:this.flatDesignDataUrl,assetFiles:this.assetFiles,gameObjects:this.getGameObjects(),gamePrompt:await this.getGamePrompt()};await Zo(o,{mappings:[i]}),i.status=i.output_dataUrl?"Generated \u2713":i.status||"Done"}catch(o){console.error("[BrandVision] generateOne failed:",o),i.status="Failed \u2717"}finally{this.isGenerating=!1,this.renderMappings()}}async stageEngineAssetOverride(t,i){let{applyConfigOverride:n}=await import("./ConfigOverride-DFTDUTRQ.js");n({path:`assets.${t}`,value:i},{silent:!0});let r=window.applyEditableEngineConfig;typeof r=="function"&&r({assets:{[t]:i}})}async saveToLibraryAndReturnPath(t,i){if(!/^(data:|blob:)/.test(i))return i;let n=this.inferCategoryFromAssetKey(t),r=`${t.replace(/[^a-zA-Z0-9_-]/g,"_")}_vision_${Date.now()}.png`;try{let s=await(await fetch("/api/library/save",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({category:n,filename:r,data:i,overwrite:!0})})).json();if(!(s!=null&&s.success)||!(s!=null&&s.path))return console.error("[BrandVision] Save to library failed:",(s==null?void 0:s.error)||s),null;let o=window.addAssetToRegistry;typeof o=="function"&&o(n,r);let c=window.refreshAssetLibrary;return typeof c=="function"&&c(),String(s.path)}catch(a){return console.error("[BrandVision] Save to library error:",a),null}}inferCategoryFromAssetKey(t){let i=window.getEditableAssets;if(typeof i=="function"){let r=i();if(r!=null&&r.slots&&Array.isArray(r.slots)){let s=r.slots.find(o=>o.slotId===t||o.currentAsset===t);if(s!=null&&s.category)return String(s.category)}let a=r==null?void 0:r.categories;if(Array.isArray(a)&&a.length>0){let s=t.toLowerCase(),o=c=>a.find(l=>l.toLowerCase().includes(c));return s.includes("bg")||s.includes("background")?o("background")||a[0]:(s.includes("cta")||s.includes("button")||s.includes("ui")||s.includes("logo"))&&o("ui")||a[0]}}let n=t.toLowerCase();return n.includes("bg")||n.includes("background")?"backgrounds":n.includes("cta")||n.includes("button")||n.includes("ui")||n.includes("logo")?"ui":"misc"}async copyRawAnalysis(){if(this.analysisRawResponse)try{await navigator.clipboard.writeText(this.analysisRawResponse),this.setStatus("mapping","Copied raw analysis to clipboard")}catch{this.setStatus("mapping","Clipboard not available")}}setStatus(t,i){var a;let n={manifest:"[data-vision-manifest-status]",assets:"[data-vision-assets-status]",flat:"[data-vision-flat-status]",zip:"[data-vision-zip-status]",upload:"[data-vision-upload-status]",mapping:"[data-vision-mapping-status]",apply:"[data-vision-apply-status]"},r=(a=this.root)==null?void 0:a.querySelector(n[t]);r&&(r.textContent=i)}getGameObjects(){let t=window.getEditableObjectList;return typeof t=="function"?t():[]}async getGamePrompt(){try{let t=await fetch("./configs/engine/game.prompt.json");if(t.ok)return(await t.json()).game_prompt||""}catch{}return""}setupResizeHandle(){if(!this.root)return;let t=this.root.querySelector("[data-panel-resize]");t&&t.addEventListener("pointerdown",i=>{let n=i.clientX,r=this.root.getBoundingClientRect().width,a=o=>{let c=Math.max(300,r+(o.clientX-n));this.root.style.width=`${c}px`},s=()=>{window.removeEventListener("pointermove",a),window.removeEventListener("pointerup",s)};window.addEventListener("pointermove",a),window.addEventListener("pointerup",s)})}refresh(){}};function rh(e,t={}){let{includeReference:i=!1,includeMagenta:n=!0,changeLevel:r=5}=t;return[`TASK: ${e}`,`CHANGE_STRENGTH: ${r}/10`,i?"REFERENCE: provided":"REFERENCE: none",n?"BACKGROUND: solid magenta #FF00FF (if possible)":""].filter(Boolean).join(`
|
|
687
|
+
`)}var Yy=["background_color","text_color","cta_background","cta_text","warning_text_color","endgame_title_color","endgame_subtitle_color","endgame_cta_text_color","endgame_cta_hint_color","endgame_footer_color"],Vy=["cta_hint","cta_label_end"],ah=[{key:"warning_text",objectId:"label.warning",property:"ui.text"},{key:"endgame_title",objectId:"ui.endgame.title",property:"ui.text"},{key:"endgame_subtitle",objectId:"ui.endgame.subtitle",property:"ui.text"},{key:"endgame_cta_text",objectId:"ui.endgame.cta",property:"ui.text"},{key:"endgame_cta_hint_text",objectId:"ui.endgame.cta.hint",property:"ui.text"},{key:"endgame_footer_text",objectId:"ui.endgame.footer",property:"ui.text"}],Ky=["brand.primary","brand.heading","brand.body","brand.warning"],ma=class{constructor(){this.root=null;this.assetsContainer=null;this.colorsContainer=null;this.fontsContainer=null;this.textsContainer=null;this.audioContainer=null;this.options=null;this.previewModal=null;this.autoApplyTimer=null;this.activePreviewKey=null;this.activePreviewValue=null;this.activePreviewFileInput=null;this.retryTimer=null;this.aiModal=null;this.aiTargetKey=null;this.aiKeyInput=null;this.aiPromptInput=null;this.aiStrengthInput=null;this.aiStrengthValue=null;this.aiModelSelect=null;this.aiModalSubtitle=null;this.aiGalleryToggle=null;this.aiGalleryEl=null;this.aiGalleryGrid=null;this.aiReferenceInput=null;this.aiReferenceName=null;this.aiReferenceFile=null;this.aiRemoveBgToggle=null;this.aiUseOutputToggle=null;this.aiGenerateBtn=null;this.aiApplyBtn=null;this.aiSaveLibraryBtn=null;this.aiCropBtn=null;this.aiDownloadBtn=null;this.aiPreviewImg=null;this.aiStatusEl=null;this.aiOutputDataUrl=null;this.aiBaseDataUrl=null;this.aiBaseValue=null;this.aiOutputKey=null;this.aiContext=null;this.aiBgToleranceInput=null;this.aiBgToleranceValue=null;this.aiRawOutputDataUrl=null;this.aiLoadingEl=null}render(){return`
|
|
688
|
+
<div class="scene-panel customize-panel panel-accent-blue" data-panel="customize-settings">
|
|
689
|
+
<div class="scene-panel-header" data-panel-handle>
|
|
690
|
+
<div class="panel-title">
|
|
691
|
+
<span class="panel-pill">Brand</span>
|
|
692
|
+
<span class="panel-title-text">Customize Settings</span>
|
|
693
|
+
</div>
|
|
694
|
+
<div class="scene-panel-actions">
|
|
695
|
+
<button class="scene-panel-toggle" type="button" data-panel-toggle>\u25BE</button>
|
|
696
|
+
</div>
|
|
697
|
+
</div>
|
|
698
|
+
<div class="scene-panel-body">
|
|
699
|
+
<div class="panel-section">
|
|
700
|
+
<div class="panel-section-title">Assets</div>
|
|
701
|
+
<div class="customize-list" data-customize-assets></div>
|
|
702
|
+
</div>
|
|
703
|
+
<div class="panel-section">
|
|
704
|
+
<div class="panel-section-title">UI Colors</div>
|
|
705
|
+
<div class="customize-grid" data-customize-colors></div>
|
|
706
|
+
</div>
|
|
707
|
+
<div class="panel-section">
|
|
708
|
+
<div class="panel-section-title">Fonts</div>
|
|
709
|
+
<div class="customize-grid" data-customize-fonts></div>
|
|
710
|
+
<div class="customize-help">Font IDs only (ex: brand.primary). Mapping is applied later.</div>
|
|
711
|
+
</div>
|
|
712
|
+
<div class="panel-section">
|
|
713
|
+
<div class="panel-section-title">Texts</div>
|
|
714
|
+
<div class="customize-list" data-customize-texts></div>
|
|
715
|
+
</div>
|
|
716
|
+
<div class="panel-section">
|
|
717
|
+
<div class="panel-section-title">Audio</div>
|
|
718
|
+
<div class="customize-list" data-customize-audio></div>
|
|
719
|
+
</div>
|
|
720
|
+
<div class="panel-section">
|
|
721
|
+
<div class="panel-section-title">Render Modes</div>
|
|
722
|
+
<div class="customize-list" data-customize-render-modes>
|
|
723
|
+
<div class="customize-row">
|
|
724
|
+
<label class="customize-toggle-label">
|
|
725
|
+
<input type="checkbox" data-render-mode="endgame-png" />
|
|
726
|
+
<span>EndGame PNG Mode</span>
|
|
727
|
+
</label>
|
|
728
|
+
<div class="customize-help">Convert all EndGame elements to PNG images</div>
|
|
729
|
+
</div>
|
|
730
|
+
<div class="customize-row">
|
|
731
|
+
<label class="customize-toggle-label">
|
|
732
|
+
<input type="checkbox" data-render-mode="splash-png" />
|
|
733
|
+
<span>Splash PNG Mode</span>
|
|
734
|
+
</label>
|
|
735
|
+
<div class="customize-help">Use a single full-screen PNG for splash</div>
|
|
736
|
+
</div>
|
|
737
|
+
</div>
|
|
738
|
+
</div>
|
|
739
|
+
<div class="debug-btn-group">
|
|
740
|
+
<button class="debug-btn primary" data-customize-apply>Apply & Restart</button>
|
|
741
|
+
</div>
|
|
742
|
+
</div>
|
|
743
|
+
<div class="panel-resize-handle" data-panel-resize></div>
|
|
744
|
+
</div>
|
|
745
|
+
`}initialize(t,i){var r,a,s,o,c,l;this.options=i,this.root=t.querySelector('[data-panel="customize-settings"]'),this.assetsContainer=(r=this.root)==null?void 0:r.querySelector("[data-customize-assets]"),this.colorsContainer=(a=this.root)==null?void 0:a.querySelector("[data-customize-colors]"),this.fontsContainer=(s=this.root)==null?void 0:s.querySelector("[data-customize-fonts]"),this.textsContainer=(o=this.root)==null?void 0:o.querySelector("[data-customize-texts]"),this.audioContainer=(c=this.root)==null?void 0:c.querySelector("[data-customize-audio]");let n=(l=this.root)==null?void 0:l.querySelector("[data-customize-apply]");n==null||n.addEventListener("click",()=>this.handleApply()),this.setupRenderModeHandlers(),this.setupResizeHandle(),this.refresh()}setupRenderModeHandlers(){var n,r;let t=(n=this.root)==null?void 0:n.querySelector('[data-render-mode="endgame-png"]'),i=(r=this.root)==null?void 0:r.querySelector('[data-render-mode="splash-png"]');t==null||t.addEventListener("change",()=>{this.applyEndgamePngMode(t.checked)}),i==null||i.addEventListener("change",()=>{this.applySplashPngMode(i.checked)})}applyEndgamePngMode(t){let i=window.getEditableObjectConfig,n=window.applyEditableObjectConfig;if(typeof i!="function"||typeof n!="function")return;let r=["ui_endgame_title_1","ui_endgame_subtitle_1","ui_endgame_logo_1","ui_endgame_cta_1"];for(let a of r){let s=i(a);s&&(s.ui||(s.ui={}),s.ui.renderMode=t?"png":"text",t&&(s.render||(s.render={}),s.render.asset||(s.render.asset={type:"image",path:""}),s.render.asset.type="image"),n(a,s))}console.log("[CustomizePanel] EndGame PNG mode:",t?"enabled":"disabled")}applySplashPngMode(t){let i=window.applyEditableEngineConfig;typeof i=="function"&&(i({splash:{type:t?"image":"text",image_path:t?"library/splash/splash.png":""}}),console.log("[CustomizePanel] Splash PNG mode:",t?"enabled":"disabled"))}openAiEditor(t,i,n,r){this.openAiModal(t,n,r),i&&this.aiPromptInput&&(this.aiPromptInput.value=i,this.setAiStatus("Prompt loaded."))}refresh(){var i,n,r,a,s,o,c,l;let t=this.getEngineSnapshot();if(console.log("[CustomizePanel] Refreshing with snapshot:",!!t),!t){this.scheduleRetry();return}console.log("[CustomizePanel] Snapshot assets count:",Object.keys(t.assets||{}).length),this.renderAssets(t.assets),this.renderColors((n=(i=t.runtime)==null?void 0:i.theme)!=null?n:{}),this.renderFonts((a=(r=t.runtime)==null?void 0:r.fonts)!=null?a:{}),this.renderTexts((o=(s=t.runtime)==null?void 0:s.ui)!=null?o:{}),this.renderAudio((l=(c=t.runtime)==null?void 0:c.audio)!=null?l:{})}getEngineSnapshot(){let t=window.getEditableEngineConfig;return typeof t!="function"?null:t()}renderAssets(t){if(!this.assetsContainer)return;this.assetsContainer.innerHTML="";let i=Object.entries(t!=null?t:{});if(!i.length){this.assetsContainer.innerHTML='<div class="customize-empty">No assets found.</div>',this.scheduleRetry();return}this.clearRetry(),i.forEach(([n,r])=>{var p;let a=document.createElement("div");a.className="customize-row";let s=document.createElement("span");s.className="customize-key",s.textContent=n;let o=document.createElement("input");o.type="text",o.value=r!=null?r:"",o.className="customize-input",o.dataset.assetKey=n,o.addEventListener("input",()=>{this.handleAssetValueChange(n,o)});let c=document.createElement("div");c.className="customize-actions";let l=document.createElement("button");l.type="button",l.className="customize-icon-btn",l.title="Preview asset",l.innerHTML=`
|
|
746
|
+
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
747
|
+
<path d="M12 5c5.2 0 9.2 3.7 10 6.8-.8 3.1-4.8 6.8-10 6.8S2.8 14.9 2 11.8C2.8 8.7 6.8 5 12 5z" />
|
|
748
|
+
<circle cx="12" cy="12" r="3.2" />
|
|
749
|
+
</svg>
|
|
750
|
+
`,l.addEventListener("click",()=>{this.previewAsset(n,o.value,o.dataset.assetType,u)});let d=document.createElement("button");d.type="button",d.className="customize-icon-btn",d.title="Upload asset",d.innerHTML=`
|
|
751
|
+
<svg viewBox="0 0 24 24" aria-hidden="true">
|
|
752
|
+
<path d="M12 3l4 4h-3v6h-2V7H8l4-4z" />
|
|
753
|
+
<path d="M5 14v4h14v-4h2v6H3v-6h2z" />
|
|
754
|
+
</svg>
|
|
755
|
+
`;let u=document.createElement("input");u.type="file",u.accept="image/*,audio/*,application/json",u.className="customize-file",u.addEventListener("change",()=>{var m;let f=(m=u.files)==null?void 0:m[0];f&&this.handleAssetUpload(f,o,n)}),d.addEventListener("click",()=>u.click()),c.appendChild(l),c.appendChild(d),c.appendChild(u),a.appendChild(s),a.appendChild(o),a.appendChild(c),(p=this.assetsContainer)==null||p.appendChild(a)})}renderColors(t){this.colorsContainer&&(this.colorsContainer.innerHTML="",Yy.forEach(i=>{var c,l,d;let n=(c=t==null?void 0:t[i])!=null?c:"#ffffff";if(i.includes("_text_color")||i.includes("_color")){let p={warning_text_color:{objectId:"label.warning",property:"render.tint"},endgame_title_color:{objectId:"ui.endgame.title",property:"render.tint"},endgame_subtitle_color:{objectId:"ui.endgame.subtitle",property:"render.tint"},endgame_cta_text_color:{objectId:"ui.endgame.cta",property:"render.tint"},endgame_cta_hint_color:{objectId:"ui.endgame.cta.hint",property:"render.tint"},endgame_footer_color:{objectId:"ui.endgame.footer",property:"render.tint"}}[i];p&&(n=(l=this.getObjectPropertyValue(p.objectId,p.property))!=null?l:"#ffffff")}let r=document.createElement("label");r.className="customize-color-field";let a=document.createElement("span");a.textContent=i.replace(/_/g," ");let s=document.createElement("input");s.type="color",s.value=n,s.dataset.colorKey=i;let o=document.createElement("input");o.type="text",o.value=n,o.className="customize-color-text",o.dataset.colorTextKey=i,s.addEventListener("input",()=>{o.value=s.value}),o.addEventListener("input",()=>{/^#([0-9a-fA-F]{6})$/.test(o.value)&&(s.value=o.value)}),r.appendChild(a),r.appendChild(s),r.appendChild(o),(d=this.colorsContainer)==null||d.appendChild(r)}))}renderFonts(t){this.fontsContainer&&(this.fontsContainer.innerHTML="",Ky.forEach(i=>{var s,o;let n=document.createElement("div");n.className="customize-row";let r=document.createElement("span");r.className="customize-key",r.textContent=i;let a=document.createElement("input");a.type="text",a.value=(s=t==null?void 0:t[i])!=null?s:i,a.className="customize-input",a.dataset.fontKey=i,n.appendChild(r),n.appendChild(a),(o=this.fontsContainer)==null||o.appendChild(n)}))}renderTexts(t){this.textsContainer&&(this.textsContainer.innerHTML="",Vy.forEach(i=>{var s,o;let n=document.createElement("div");n.className="customize-row";let r=document.createElement("span");r.className="customize-key",r.textContent=i;let a=document.createElement("input");a.type="text",a.value=(s=this.readUiValue(t,i))!=null?s:"",a.className="customize-input",a.dataset.textKey=i,n.appendChild(r),n.appendChild(a),(o=this.textsContainer)==null||o.appendChild(n)}),ah.forEach(({key:i,objectId:n})=>{var o,c;let r=document.createElement("div");r.className="customize-row";let a=document.createElement("span");a.className="customize-key",a.textContent=i;let s=document.createElement("input");s.type="text",s.value=(o=this.getObjectTextValue(n))!=null?o:"",s.className="customize-input",s.dataset.objectTextKey=i,r.appendChild(a),r.appendChild(s),(c=this.textsContainer)==null||c.appendChild(r)}))}renderAudio(t){if(!this.audioContainer)return;this.audioContainer.innerHTML="",["background_file","background_volume","click_file","click_volume","success_file","success_volume","complete_file","complete_volume"].forEach(n=>{var o,c;let r=document.createElement("div");r.className="customize-row";let a=document.createElement("span");a.className="customize-key",a.textContent=n.replace("_"," ");let s=document.createElement("input");s.type=n.includes("volume")?"number":"text",s.min="0",s.max="1",s.step="0.1",s.value=String((o=t==null?void 0:t[n])!=null?o:""),s.className="customize-input",s.dataset.audioKey=n,n.includes("file")&&(s.placeholder="audio file path"),r.appendChild(a),r.appendChild(s),(c=this.audioContainer)==null||c.appendChild(r)})}readUiValue(t,i){if(i.includes(".")){let r=i.split("."),a=t;for(let s of r){if(a==null)return null;a=a[s]}return typeof a=="string"?a:null}let n=t==null?void 0:t[i];return typeof n=="string"?n:null}getObjectTextValue(t){var r,a;let i=window.getEditableObjectConfig;if(typeof i!="function")return null;let n=i(t);return(a=(r=n==null?void 0:n.ui)==null?void 0:r.text)!=null?a:null}getObjectPropertyValue(t,i){let n=window.getEditableObjectConfig;if(typeof n!="function")return null;let r=n(t);if(!r)return null;let a=i.split("."),s=r;for(let o of a){if(s==null)return null;s=s[o]}return typeof s=="string"?s:null}handleApply(){this.handleApplyWithSource("manual")}handleApplyWithSource(t){if(console.log(`[CustomizePanel] handleApplyWithSource called with source: ${t}`),!this.root||!this.options)return;let i={};this.root.querySelectorAll("[data-asset-key]").forEach(o=>{let c=o;c.dataset.assetKey&&(i[c.dataset.assetKey]=c.value)}),console.log("[CustomizePanel] Assets being applied:",Object.keys(i).length,"total"),console.log("[CustomizePanel] Asset values:",i);let n={};this.root.querySelectorAll("[data-color-text-key]").forEach(o=>{let c=o,l=c.dataset.colorTextKey;l&&(l.includes("_text_color")||l.includes("_color")?this.applyTextColorToObject(l,c.value):n[l]=c.value)});let r={};this.root.querySelectorAll("[data-font-key]").forEach(o=>{let c=o,l=c.dataset.fontKey;l&&(r[l]=c.value)});let a={};this.root.querySelectorAll("[data-text-key]").forEach(o=>{let c=o,l=c.dataset.textKey;l&&(a[l]=c.value)});let s={};this.root.querySelectorAll("[data-audio-key]").forEach(o=>{let c=o,l=c.dataset.audioKey;if(l)if(l.includes("volume")){let d=parseFloat(c.value);s[l]=isNaN(d)?0:d}else s[l]=c.value}),this.root.querySelectorAll("[data-object-text-key]").forEach(o=>{let c=o,l=c.dataset.objectTextKey;if(!l)return;let d=ah.find(u=>u.key===l);d&&this.applyObjectPropertyValue(d.objectId,d.property,c.value)}),console.log("[CustomizePanel] Calling onApply callback to restart game with source:",t),this.options.onApply({assets:i,runtime:{theme:n,ui:a,fonts:r,audio:s}},{source:t})}setupAiPanel(){}setAiStatus(t){this.aiStatusEl&&(this.aiStatusEl.textContent=t)}getSelectedAssetKey(){return this.aiTargetKey}getSelectedAssetInput(){let t=this.getSelectedAssetKey();return!this.root||!t?null:this.root.querySelector(`input[data-asset-key="${t}"]`)}async getImageDataFromAsset(t){let i=this.resolveAssetUrls(t);console.log("[CustomizePanel] Resolving asset urls for AI:",t,i);for(let n of i)try{let r=await fa(n);if(r)return console.log("[CustomizePanel] Successfully fetched image data for AI"),{input:{base64:r.base64,mimeType:r.mimeType},dataUrl:r.dataUrl,width:r.width,height:r.height}}catch(r){console.warn("[CustomizePanel] Failed to fetch image data from:",n,r)}return console.error("[CustomizePanel] Could not load image data for AI from any URL"),null}async updateAiBasePreview(t){var r,a,s;let i=(t==null?void 0:t.trim())||"";if(!i){let o=this.getSelectedAssetInput();i=(a=(r=o==null?void 0:o.value)==null?void 0:r.trim())!=null?a:""}if(console.log("[CustomizePanel] updateAiBasePreview using value:",i),!i){this.aiBaseDataUrl=null,this.updateAiPreview();return}let n=await this.getImageDataFromAsset(i);this.aiBaseDataUrl=(s=n==null?void 0:n.dataUrl)!=null?s:null,this.updateAiPreview()}updateAiPreview(){if(!this.aiPreviewImg)return;let t=this.aiOutputDataUrl||this.aiBaseDataUrl||"";if(!t){this.aiPreviewImg.removeAttribute("src");return}this.aiPreviewImg.src=t}updateAiModalPreview(t,i){if(!t)return;let n=i!=null?i:this.activePreviewKey;if(!n||!this.aiOutputDataUrl||this.aiOutputKey!==n){t.classList.add("hidden");return}let r=t.querySelector(".asset-preview-ai-image");r&&(r.src=this.aiOutputDataUrl),t.classList.remove("hidden")}setAiLoading(t){this.aiLoadingEl&&this.aiLoadingEl.classList.toggle("active",t),this.aiGenerateBtn&&(this.aiGenerateBtn.disabled=t)}toggleAiGallery(){if(!this.aiGalleryEl||!this.aiGalleryToggle)return;let t=this.aiGalleryEl.classList.toggle("hidden");this.aiGalleryToggle.textContent=t?"Gallery":"Hide Gallery",t||this.renderAiGallery()}renderAiGallery(){if(!this.aiGalleryGrid)return;let t=this.getAiGalleryEntries();if(!t.length){this.aiGalleryGrid.innerHTML='<div class="ai-gallery-empty">No image assets found.</div>';return}this.aiGalleryGrid.innerHTML="",t.forEach(({key:i,value:n})=>{var c;let r=document.createElement("button");r.type="button",r.className="ai-gallery-item",i===this.aiTargetKey&&r.classList.add("active");let a=document.createElement("img");a.className="ai-gallery-thumb",a.alt=i;let s=this.resolveAssetUrls(n);s[0]&&(a.src=s[0]);let o=document.createElement("span");o.className="ai-gallery-label",o.textContent=i,r.appendChild(a),r.appendChild(o),r.addEventListener("click",()=>this.selectAiGalleryAsset(i)),(c=this.aiGalleryGrid)==null||c.appendChild(r)})}getAiGalleryEntries(){if(!this.root)return[];let t=[];return this.root.querySelectorAll("[data-asset-key]").forEach(i=>{var s,o;let n=i,r=n.dataset.assetKey,a=(o=(s=n.value)==null?void 0:s.trim())!=null?o:"";!r||!a||this.isAiGalleryImage(a)&&t.push({key:r,value:a})}),t}isAiGalleryImage(t){let i=t.trim();if(!i)return!1;if(/^(data:image|blob:)/.test(i))return!0;let n=i.split("?")[0].toLowerCase();return![".mp3",".wav",".ogg",".json"].some(r=>n.endsWith(r))}selectAiGalleryAsset(t){this.aiTargetKey!==t&&(this.aiTargetKey=t,this.aiOutputDataUrl=null,this.aiOutputKey=null,this.aiReferenceFile=null,this.aiBaseDataUrl=null,this.aiReferenceInput&&(this.aiReferenceInput.value=""),this.aiReferenceName&&(this.aiReferenceName.textContent="Optional"),this.aiModalSubtitle&&(this.aiModalSubtitle.textContent=t),this.setAiOutputButtonsEnabled(!1),this.updateAiBasePreview(),this.updateAiPreview(),this.renderAiGallery())}openAiModal(t,i,n){var o,c,l,d,u,p,f,m,h,g;this.closeAiModal(),this.aiTargetKey=t,this.aiBaseValue=i||null,this.aiContext=n||null,this.aiOutputDataUrl=null,this.aiOutputKey=null,this.aiReferenceFile=null,this.aiBaseDataUrl=null;let r=document.createElement("div");r.className="ai-modal",r.innerHTML=`
|
|
756
|
+
<div class="ai-modal-card">
|
|
757
|
+
<div class="ai-modal-header">
|
|
758
|
+
<div>
|
|
759
|
+
<div class="ai-modal-title">AI Image Edit</div>
|
|
760
|
+
<div class="ai-modal-subtitle">${t}</div>
|
|
761
|
+
</div>
|
|
762
|
+
<div class="ai-modal-actions">
|
|
763
|
+
<button class="ai-modal-gallery" type="button" data-ai-gallery-toggle>Gallery</button>
|
|
764
|
+
<button class="ai-modal-close" type="button">Close</button>
|
|
765
|
+
</div>
|
|
766
|
+
</div>
|
|
767
|
+
<div class="ai-panel">
|
|
768
|
+
<label class="ai-label">API Key</label>
|
|
769
|
+
<input type="password" class="ai-input" data-ai-key placeholder="Paste Gemini API key">
|
|
770
|
+
|
|
771
|
+
<label class="ai-label">Model</label>
|
|
772
|
+
<select class="ai-select" data-ai-model>
|
|
773
|
+
<option value="gemini-2.5-flash-image">Gemini 2.5 Flash (fast)</option>
|
|
774
|
+
<option value="gemini-3-pro-image-preview">Gemini 3 Pro (preview)</option>
|
|
775
|
+
</select>
|
|
776
|
+
|
|
777
|
+
<label class="ai-label">Prompt</label>
|
|
778
|
+
<textarea class="ai-textarea" data-ai-prompt placeholder="Describe the change"></textarea>
|
|
779
|
+
|
|
780
|
+
<div class="ai-row ai-strength">
|
|
781
|
+
<span class="ai-label">Change strength</span>
|
|
782
|
+
<input type="range" min="1" max="10" value="5" data-ai-strength>
|
|
783
|
+
<span class="ai-strength-value" data-ai-strength-value>5</span>
|
|
784
|
+
</div>
|
|
785
|
+
|
|
786
|
+
<div class="ai-gallery hidden" data-ai-gallery>
|
|
787
|
+
<div class="ai-gallery-grid" data-ai-gallery-grid></div>
|
|
788
|
+
</div>
|
|
789
|
+
|
|
790
|
+
<div class="ai-row">
|
|
791
|
+
<button class="ai-btn" type="button" data-ai-ref-button>Reference Image</button>
|
|
792
|
+
<input class="ai-file" type="file" accept="image/*" data-ai-ref-input>
|
|
793
|
+
<span class="ai-file-name" data-ai-ref-name>Optional</span>
|
|
794
|
+
</div>
|
|
795
|
+
|
|
796
|
+
<div class="ai-row ai-toggles">
|
|
797
|
+
<label><input type="checkbox" data-ai-remove-bg checked> Remove BG</label>
|
|
798
|
+
<label><input type="checkbox" data-ai-use-output> Use output as input</label>
|
|
799
|
+
</div>
|
|
800
|
+
|
|
801
|
+
<div class="ai-row ai-strength">
|
|
802
|
+
<span class="ai-label">BG removal sensitivity</span>
|
|
803
|
+
<input type="range" min="0" max="255" value="30" data-ai-bg-tolerance>
|
|
804
|
+
<span class="ai-strength-value" data-ai-bg-tolerance-value>30</span>
|
|
805
|
+
</div>
|
|
806
|
+
|
|
807
|
+
<div class="ai-row ai-actions">
|
|
808
|
+
<button class="debug-btn primary" type="button" data-ai-generate>Generate</button>
|
|
809
|
+
<button class="debug-btn" type="button" data-ai-apply disabled>Apply Output</button>
|
|
810
|
+
<button class="debug-btn success" type="button" data-ai-save-library disabled>\u{1F4BE} Save to Library</button>
|
|
811
|
+
<button class="debug-btn" type="button" data-ai-crop disabled>Crop Output</button>
|
|
812
|
+
<button class="debug-btn" type="button" data-ai-download disabled>Download</button>
|
|
813
|
+
</div>
|
|
814
|
+
|
|
815
|
+
<div class="ai-status" data-ai-status>Idle</div>
|
|
816
|
+
<div class="ai-loading" data-ai-loading>
|
|
817
|
+
<div class="ai-loading-ring"></div>
|
|
818
|
+
<div class="ai-loading-bar"></div>
|
|
819
|
+
<div class="ai-loading-text">Generating\u2026</div>
|
|
820
|
+
</div>
|
|
821
|
+
<div class="ai-preview">
|
|
822
|
+
<img data-ai-preview alt="AI output preview">
|
|
823
|
+
</div>
|
|
824
|
+
</div>
|
|
825
|
+
</div>
|
|
826
|
+
`;let a=r.querySelector(".ai-modal-close");a==null||a.addEventListener("click",()=>this.closeAiModal()),r.addEventListener("click",b=>{b.target===r&&this.closeAiModal()}),this.aiModal=r,this.aiKeyInput=r.querySelector("[data-ai-key]"),this.aiModelSelect=r.querySelector("[data-ai-model]"),this.aiPromptInput=r.querySelector("[data-ai-prompt]"),this.aiStrengthInput=r.querySelector("[data-ai-strength]"),this.aiStrengthValue=r.querySelector("[data-ai-strength-value]"),this.aiModalSubtitle=r.querySelector(".ai-modal-subtitle"),this.aiGalleryToggle=r.querySelector("[data-ai-gallery-toggle]"),this.aiGalleryEl=r.querySelector("[data-ai-gallery]"),this.aiGalleryGrid=r.querySelector("[data-ai-gallery-grid]"),this.aiReferenceInput=r.querySelector("[data-ai-ref-input]"),this.aiReferenceName=r.querySelector("[data-ai-ref-name]"),this.aiRemoveBgToggle=r.querySelector("[data-ai-remove-bg]"),this.aiUseOutputToggle=r.querySelector("[data-ai-use-output]"),this.aiGenerateBtn=r.querySelector("[data-ai-generate]"),this.aiApplyBtn=r.querySelector("[data-ai-apply]"),this.aiSaveLibraryBtn=r.querySelector("[data-ai-save-library]"),this.aiCropBtn=r.querySelector("[data-ai-crop]"),this.aiDownloadBtn=r.querySelector("[data-ai-download]"),this.aiPreviewImg=r.querySelector("[data-ai-preview]"),this.aiStatusEl=r.querySelector("[data-ai-status]"),this.aiLoadingEl=r.querySelector("[data-ai-loading]"),this.aiBgToleranceInput=r.querySelector("[data-ai-bg-tolerance]"),this.aiBgToleranceValue=r.querySelector("[data-ai-bg-tolerance-value]"),(o=this.aiRemoveBgToggle)==null||o.addEventListener("change",()=>{this.refreshAiOutputFromRaw()});let s=r.querySelector("[data-ai-ref-button]");s==null||s.addEventListener("click",()=>{var b;return(b=this.aiReferenceInput)==null?void 0:b.click()}),(c=this.aiGalleryToggle)==null||c.addEventListener("click",()=>this.toggleAiGallery()),(l=this.aiStrengthInput)==null||l.addEventListener("input",()=>{var v,y;let b=(y=(v=this.aiStrengthInput)==null?void 0:v.value)!=null?y:"5";this.aiStrengthValue&&(this.aiStrengthValue.textContent=b)}),(d=this.aiBgToleranceInput)==null||d.addEventListener("input",()=>{var v,y;let b=(y=(v=this.aiBgToleranceInput)==null?void 0:v.value)!=null?y:"30";this.aiBgToleranceValue&&(this.aiBgToleranceValue.textContent=b),this.refreshAiOutputFromRaw()}),(u=this.aiReferenceInput)==null||u.addEventListener("change",()=>{var v,y,x;let b=(x=(y=(v=this.aiReferenceInput)==null?void 0:v.files)==null?void 0:y[0])!=null?x:null;this.aiReferenceFile=b,this.aiReferenceName&&(this.aiReferenceName.textContent=b?`${b.name} (loaded)`:"Optional"),b&&this.setAiStatus(`Reference attached: ${b.name}`)}),(p=this.aiGenerateBtn)==null||p.addEventListener("click",()=>{this.handleAiGenerate()}),(f=this.aiApplyBtn)==null||f.addEventListener("click",()=>this.handleAiApply()),(m=this.aiSaveLibraryBtn)==null||m.addEventListener("click",()=>{this.handleAiSaveToLibrary()}),(h=this.aiCropBtn)==null||h.addEventListener("click",()=>{this.handleAiCrop()}),(g=this.aiDownloadBtn)==null||g.addEventListener("click",()=>this.handleAiDownload()),document.body.appendChild(r),this.setAiOutputButtonsEnabled(!1),this.setAiStatus("Ready."),this.updateAiBasePreview(i),this.updateAiPreview(),this.renderAiGallery()}closeAiModal(){this.aiModal&&(this.aiModal.remove(),this.aiModal=null),this.aiTargetKey=null,this.aiBaseValue=null,this.aiContext=null,this.aiKeyInput=null,this.aiModelSelect=null,this.aiPromptInput=null,this.aiStrengthInput=null,this.aiStrengthValue=null,this.aiModalSubtitle=null,this.aiGalleryToggle=null,this.aiGalleryEl=null,this.aiGalleryGrid=null,this.aiReferenceInput=null,this.aiReferenceName=null,this.aiReferenceFile=null,this.aiRemoveBgToggle=null,this.aiUseOutputToggle=null,this.aiGenerateBtn=null,this.aiApplyBtn=null,this.aiCropBtn=null,this.aiDownloadBtn=null,this.aiPreviewImg=null,this.aiStatusEl=null,this.aiLoadingEl=null,this.aiBgToleranceInput=null,this.aiBgToleranceValue=null}async handleAiGenerate(){var d,u,p,f,m,h,g,b,v,y,x,w,T,C,S,L,M,_,E,A;if(console.log("[CustomizePanel] handleAiGenerate clicked"),!this.aiGenerateBtn)return;let t=(p=(u=(d=this.aiKeyInput)==null?void 0:d.value)==null?void 0:u.trim())!=null?p:"",i=(m=(f=this.aiModelSelect)==null?void 0:f.value)!=null?m:"gemini-2.5-flash-image",n=(b=(g=(h=this.aiPromptInput)==null?void 0:h.value)==null?void 0:g.trim())!=null?b:"",r=(y=(v=this.aiRemoveBgToggle)==null?void 0:v.checked)!=null?y:!1,a=r,s=r,o=Number((w=(x=this.aiStrengthInput)==null?void 0:x.value)!=null?w:"5");if(!t){this.setAiStatus("Missing API key.");return}if(!n){this.setAiStatus("Add a prompt.");return}let c=this.getSelectedAssetInput(),l=((T=c==null?void 0:c.value)==null?void 0:T.trim())||((C=this.aiBaseValue)==null?void 0:C.trim())||"";if(!l&&!this.aiOutputDataUrl){this.setAiStatus("Select an asset first.");return}this.setAiLoading(!0),this.setAiStatus("Generating...");try{let P=null,I=(S=this.getSelectedAssetKey())!=null?S:"unknown",k=(L=this.aiUseOutputToggle)!=null&&L.checked&&this.aiOutputDataUrl?"ai-output":"asset-value";if((M=this.aiUseOutputToggle)!=null&&M.checked&&this.aiOutputDataUrl){let fe=Vo(this.aiOutputDataUrl,"ai-output.png");if(fe){let he=await Rt(fe);he&&(P={input:{base64:he.base64,mimeType:he.mimeType},dataUrl:he.dataUrl,width:he.width,height:he.height})}}if(P||(P=await this.getImageDataFromAsset(l)),!P){this.setAiStatus("Unable to load the base image.");return}let D=[P.input],j=!1;if(this.aiReferenceFile){let fe=await Rt(this.aiReferenceFile);fe?(D.push({base64:fe.base64,mimeType:fe.mimeType}),j=!0,this.setAiStatus(`Generating with reference: ${this.aiReferenceFile.name}`)):this.setAiStatus("Reference image failed to load, generating without reference.")}let ie=rh(n,{includeReference:j,includeMagenta:a,changeLevel:o}),ye=(E=(_=this.aiReferenceFile)==null?void 0:_.name)!=null?E:"none";console.info("[AI] Final prompt:",ie),console.info("[AI] Image sources:",{assetKey:I,base:k,reference:ye});let xe=Vf(P.width,P.height);console.info("[AI] CRITICAL: Calling generateImageWithGemini25Flash NOW...");let J=await Fi(t,ie,D,{aspectRatio:xe,model:i});console.info("[AI] CRITICAL: generateImageWithGemini25Flash returned! Length:",J==null?void 0:J.length),this.aiRawOutputDataUrl=J,await this.refreshAiOutputFromRaw()}catch(P){console.error("[CustomizePanel] AI Generate Error:",P),this.setAiStatus("Generation failed. Check console.")}finally{this.setAiLoading(!1),((A=this.aiStatusEl)==null?void 0:A.textContent)==="Generating..."&&this.setAiStatus("Ready.")}}async refreshAiOutputFromRaw(){var r,a,s,o;if(!this.aiRawOutputDataUrl)return;let t=(a=(r=this.aiRemoveBgToggle)==null?void 0:r.checked)!=null?a:!1,i=Number((o=(s=this.aiBgToleranceInput)==null?void 0:s.value)!=null?o:"30"),n=this.aiRawOutputDataUrl;if(t){let c=await Bi(this.aiRawOutputDataUrl,i);c&&(n=c)}this.setAiOutput(n),this.setAiStatus("Ready.")}setAiOutput(t){var n,r;this.aiOutputDataUrl=t,this.aiOutputKey=this.getSelectedAssetKey(),this.updateAiPreview(),this.setAiOutputButtonsEnabled(!0);let i=(n=this.previewModal)==null?void 0:n.querySelector("[data-asset-ai-preview]");this.updateAiModalPreview(i,(r=this.activePreviewKey)!=null?r:void 0)}setAiOutputButtonsEnabled(t){this.aiApplyBtn&&(this.aiApplyBtn.disabled=!t),this.aiSaveLibraryBtn&&(this.aiSaveLibraryBtn.disabled=!t),this.aiCropBtn&&(this.aiCropBtn.disabled=!t),this.aiDownloadBtn&&(this.aiDownloadBtn.disabled=!t)}handleAiApply(){var i,n,r;let t=this.getSelectedAssetInput();if(!this.aiOutputDataUrl){this.setAiStatus("Generate output first.");return}if(t)console.log("[CustomizePanel] Applying AI output to brand asset:",t.dataset.assetKey),t.value=this.aiOutputDataUrl,this.handleAssetValueChange((i=t.dataset.assetKey)!=null?i:"",t),this.setAiStatus("Applied. Restarting game...");else{let a=((n=this.aiContext)==null?void 0:n.objectId)||this.inferObjectIdFromAssetKey(this.aiTargetKey||""),s=((r=this.aiContext)==null?void 0:r.path)||this.inferPathFromAssetKey(this.aiTargetKey||"");if(a&&s)console.log("[CustomizePanel] Applying AI output directly to object:",a,s),this.applyObjectPropertyValue(a,s,this.aiOutputDataUrl),this.setAiStatus("Applied directly. Restarting game..."),window.dispatchEvent(new CustomEvent("inspector:refresh"));else{this.setAiStatus("No target input found to apply.");return}}setTimeout(()=>{this.closeAiModal()},500)}async handleAiSaveToLibrary(){var a,s,o;if(!this.aiOutputDataUrl){this.setAiStatus("Generate output first.");return}if(!this.getSelectedAssetKey()){this.setAiStatus("No asset selected.");return}let n=`${(this.aiTargetKey||"asset").replace(/[^a-zA-Z0-9_-]/g,"_")}_ai_${Date.now()}`,r=this.inferCategoryFromAssetKey(this.aiTargetKey||"");this.setAiStatus("Saving to library...");try{let l=await(await fetch("/api/library/save",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({category:r,filename:`${n}.png`,data:this.aiOutputDataUrl,overwrite:!0})})).json();if(l.success){console.log("[CustomizePanel] \u2705 Saved to library:",l.path),this.setAiStatus(`Saved as ${n}. Applying...`);let d=window.addAssetToRegistry;typeof d=="function"&&(console.log("[CustomizePanel] Logic: Adding to registry category:",r),d(r,`${n}.png`));let u=window.refreshAssetLibrary;typeof u=="function"&&(console.log("[CustomizePanel] Logic: Refreshing library panel"),u());let p=((a=this.aiContext)==null?void 0:a.objectId)||this.inferObjectIdFromAssetKey(this.aiTargetKey||""),f=((s=this.aiContext)==null?void 0:s.path)||this.inferPathFromAssetKey(this.aiTargetKey||""),m=this.getSelectedAssetInput();if(m&&(m.value=l.path,this.handleAssetValueChange((o=m.dataset.assetKey)!=null?o:"",m)),p&&f){console.log("[CustomizePanel] Saved and applying directly to object:",p,f);let h=window.applyAssetToSlot,g=/texture|image|sprite|asset\\.path/i.test(f)||/\\.(png|jpg|jpeg)$/i.test(String(l.path||""));if(typeof h=="function"&&g){let b=this.getFilenameFromPath(l.path);h(p,b,r)}else this.applyObjectPropertyValue(p,f,l.path);window.dispatchEvent(new CustomEvent("inspector:refresh"))}setTimeout(()=>{this.closeAiModal()},1e3)}else console.error("[CustomizePanel] \u274C Save failed:",l.error),this.setAiStatus(`Save failed: ${l.error}`)}catch(c){console.error("[CustomizePanel] \u274C Save error:",c),this.setAiStatus("Save failed. Check console.")}}inferCategoryFromAssetKey(t){var s;let i=(s=this.aiContext)==null?void 0:s.objectId,n=t||this.aiTargetKey||"",r=window.getEditableAssets;if(typeof r=="function"){let o=r();if(o!=null&&o.slots){let c=o.slots.find(l=>i&&l.objectId===i||l.currentAsset===n||l.slotId===n||l.currentAsset&&l.currentAsset.includes(n)||n.includes(l.slotId));if(c){let l=c.libraryFolder||c.category;if(l)return l}}}let a=n.toLowerCase();return a.includes("background")?"backgrounds":a.includes("character")?"characters":a.includes("key")?"collectedkeys":a.includes("draggable")?"draggables":a.includes("environment")||a.includes("env")||a.includes("hand")||a.includes("prop")||a.includes("item")||a.includes("decor")||a.includes("object")?"environment":a.includes("machine")?"machines":a.includes("tutorial")?"tutorial":a.includes("ui")||a.includes("button")||a.includes("label")||a.includes("icon")||a.includes("logo")||a.includes("cta")||a.includes("menu")||a.includes("overlay")?"ui":a.includes("effect")||a.includes("confetti")||a.includes("particle")?"effects":"ui"}inferObjectIdFromAssetKey(t){let i=window.getEditableAssets;if(typeof i!="function")return null;let n=i();if(!(n!=null&&n.slots))return null;let r=n.slots.find(a=>a.currentAsset===t||a.slotId===t);return(r==null?void 0:r.objectId)||null}inferPathFromAssetKey(t){let i=window.getEditableAssets;if(typeof i!="function")return null;let n=i();if(!(n!=null&&n.slots))return null;let r=n.slots.find(s=>s.currentAsset===t||s.slotId===t);if(!r)return null;let a=r.category;return a==="render"||a==="backgrounds"||a==="characters"?"render.texture":a==="ui"?"ui.image":a==="audio"?"audio.src":"render.texture"}getFilenameFromPath(t){if(!t)return"";let i=t.split("/");return i[i.length-1]}async handleAiCrop(){var o;if(!this.aiOutputDataUrl){this.setAiStatus("Generate output first.");return}let t=this.getSelectedAssetInput(),i=(o=t==null?void 0:t.value)!=null?o:"",n=await this.getImageDimensions(i);if(!n){this.setAiStatus("Unable to read target dimensions.");return}let r=Vo(this.aiOutputDataUrl,"ai-output.png");if(!r)return;let a=await this.showManualCropModal(r,n,i);if(!a)return;let s=await Yf(a);s&&this.setAiOutput(s)}handleAiDownload(){var n;if(!this.aiOutputDataUrl)return;let t=(n=this.getSelectedAssetKey())!=null?n:"ai-image",i=document.createElement("a");i.href=this.aiOutputDataUrl,i.download=`${t}-ai.png`,i.click()}handleAssetValueChange(t,i){this.previewModal&&this.closePreviewModal(),this.scheduleAutoApply(),this.updatePreviewIfOpen(t,i.value,i.dataset.assetType)}async handleAssetUpload(t,i,n){let r=i.value,a=t;if(t.type.startsWith("image/")){let c=await this.getImageDimensions(r);if(c){let l=await this.showManualCropModal(t,c,r);if(!l)return;a=l}}let s=URL.createObjectURL(a),o=i.dataset.objectUrl;if(o)try{URL.revokeObjectURL(o)}catch{}i.dataset.objectUrl=s,i.dataset.assetType=a.type,i.value=s,this.handleAssetValueChange(n,i)}scheduleAutoApply(){this.options&&(this.autoApplyTimer&&window.clearTimeout(this.autoApplyTimer),console.log("[CustomizePanel] Scheduling auto-apply in 250ms"),this.autoApplyTimer=window.setTimeout(()=>{this.autoApplyTimer=null,console.log("[CustomizePanel] Executing auto-apply now"),this.handleApplyWithSource("auto")},250))}previewAsset(t,i,n,r){if(!i)return;let a=this.resolveAssetUrls(i);if(a.length===0)return;let s=n||this.guessMimeType(i);this.activePreviewKey=t,this.activePreviewValue=i,this.activePreviewFileInput=r!=null?r:null,this.openPreviewModal(t,i,a,s)}resolveAssetUrls(t){let i=t.trim();if(!i)return[];if(console.log("[CustomizePanel] Resolving asset urls for:",i),/^(blob:|data:|https?:|\/)/.test(i))return console.log("[CustomizePanel] Path is absolute or data/blob, using as is"),[i];let n=i.replace(/^\.?\//,""),r=[];return n.startsWith("raw/")?r=[`/${n}`,`/assets/${n}`]:n.startsWith("assets/")?r=[`/${n}`]:r=[`/raw/${n}`,`/assets/raw/${n}`,`/assets/${n}`,`/${n}`],console.log("[CustomizePanel] Resolved to possible paths:",r),r}guessMimeType(t){let i=t.toLowerCase();return i.endsWith(".png")||i.endsWith(".jpg")||i.endsWith(".jpeg")||i.endsWith(".gif")||i.endsWith(".webp")||i.endsWith(".svg")?"image":i.endsWith(".mp3")||i.endsWith(".wav")||i.endsWith(".ogg")?"audio":i.endsWith(".json")?"json":"file"}openPreviewModal(t,i,n,r){this.closePreviewModal(!0);let a=document.createElement("div");a.className="asset-preview-modal",a.innerHTML=`
|
|
827
|
+
<div class="asset-preview-card">
|
|
828
|
+
<div class="asset-preview-header">
|
|
829
|
+
<div class="asset-preview-title">${t}</div>
|
|
830
|
+
<div class="asset-preview-actions">
|
|
831
|
+
<button class="asset-preview-change" type="button">Change</button>
|
|
832
|
+
<button class="asset-preview-ai" type="button">AI Edit</button>
|
|
833
|
+
<button class="asset-preview-close" type="button">Close</button>
|
|
834
|
+
</div>
|
|
835
|
+
</div>
|
|
836
|
+
<div class="asset-preview-body"></div>
|
|
837
|
+
<div class="asset-preview-ai-output hidden" data-asset-ai-preview>
|
|
838
|
+
<div class="asset-preview-ai-label">AI Output</div>
|
|
839
|
+
<img class="asset-preview-ai-image" alt="AI output preview">
|
|
840
|
+
</div>
|
|
841
|
+
</div>
|
|
842
|
+
`;let s=a.querySelector(".asset-preview-body"),o=a.querySelector(".asset-preview-close"),c=a.querySelector(".asset-preview-change"),l=a.querySelector(".asset-preview-ai"),d=a.querySelector("[data-asset-ai-preview]");if(o==null||o.addEventListener("click",()=>this.closePreviewModal()),l==null||l.addEventListener("click",()=>{console.log("[CustomizePanel] AI Edit clicked for:",t),this.openAiModal(t,i)}),c==null||c.addEventListener("click",()=>{console.log("[CustomizePanel] Change clicked for:",t),this.activePreviewFileInput&&this.activePreviewFileInput.click()}),a.addEventListener("click",u=>{u.target===a&&this.closePreviewModal()}),s)if(r==="image"){let u=document.createElement("img");this.loadWithFallback(u,n),s.appendChild(u)}else if(r==="audio"){let u=document.createElement("audio");u.controls=!0,this.loadWithFallback(u,n),s.appendChild(u)}else if(r==="json"){let u=document.createElement("pre");this.fetchWithFallback(n).then(p=>{u.textContent=p!=null?p:"Unable to load JSON."}),s.appendChild(u)}else{let u=document.createElement("a");u.href=n[0],u.target="_blank",u.rel="noreferrer",u.textContent="Open asset",s.appendChild(u)}document.body.appendChild(a),this.previewModal=a,this.updateAiModalPreview(d,t)}loadWithFallback(t,i){if(i.length===0)return;let n=0,r=()=>{n>=i.length||(t.src=i[n],n+=1)};t.addEventListener("error",r),r()}async fetchWithFallback(t){for(let i of t)try{let n=await fetch(i);if(!n.ok)continue;return await n.text()}catch{}return null}applyObjectPropertyValue(t,i,n){let r=window.getEditableObjectConfig,a=window.applyEditableObjectConfig;if(typeof r!="function"||typeof a!="function")return;let s=r(t);if(!s)return;let o=JSON.parse(JSON.stringify(s)),c=i.split("."),l=o;for(let d=0;d<c.length-1;d++){let u=c[d];l[u]=l[u]||{},l=l[u]}l[c[c.length-1]]=n,a(t,o)}applyTextColorToObject(t,i){let r={warning_text_color:{objectId:"label.warning",property:"render.tint"},endgame_title_color:{objectId:"ui.endgame.title",property:"render.tint"},endgame_subtitle_color:{objectId:"ui.endgame.subtitle",property:"render.tint"},endgame_cta_text_color:{objectId:"ui.endgame.cta",property:"render.tint"},endgame_cta_hint_color:{objectId:"ui.endgame.cta.hint",property:"render.tint"},endgame_footer_color:{objectId:"ui.endgame.footer",property:"render.tint"}}[t];r&&this.applyObjectPropertyValue(r.objectId,r.property,i)}closePreviewModal(t){this.previewModal&&(this.previewModal.remove(),this.previewModal=null),t||(this.activePreviewKey=null,this.activePreviewValue=null,this.activePreviewFileInput=null)}updatePreviewIfOpen(t,i,n){var a;if(!this.previewModal||this.activePreviewKey!==t)return;let r=i!=null?i:"";this.activePreviewValue!==r&&this.previewAsset(t,r,n,(a=this.activePreviewFileInput)!=null?a:void 0)}scheduleRetry(){this.retryTimer||(this.retryTimer=window.setTimeout(()=>{this.retryTimer=null,this.refresh()},350))}clearRetry(){this.retryTimer&&(window.clearTimeout(this.retryTimer),this.retryTimer=null)}setupResizeHandle(){if(!this.root)return;let t=this.root.querySelector("[data-panel-resize]");if(!t)return;let i=window.localStorage.getItem("customizePanelWidth"),n=i?Number(i):NaN;Number.isFinite(n)&&n>0&&(this.root.style.width=`${n}px`);let r=a=>{var p,f;a.preventDefault();let s=a.clientX,o=(f=(p=this.root)==null?void 0:p.getBoundingClientRect().width)!=null?f:0,c=260,l=620,d=m=>{let h=m.clientX-s,g=Math.min(l,Math.max(c,o+h));this.root&&(this.root.style.width=`${g}px`)},u=()=>{var h,g;window.removeEventListener("pointermove",d),window.removeEventListener("pointerup",u);let m=(g=(h=this.root)==null?void 0:h.getBoundingClientRect().width)!=null?g:0;m>0&&window.localStorage.setItem("customizePanelWidth",String(Math.round(m)))};window.addEventListener("pointermove",d),window.addEventListener("pointerup",u)};t.addEventListener("pointerdown",r)}async getImageDimensions(t){let i=this.resolveAssetUrls(t);if(i.length===0)return null;for(let n of i){let r=await this.loadImage(n);if(r!=null&&r.naturalWidth&&(r!=null&&r.naturalHeight))return{width:r.naturalWidth,height:r.naturalHeight}}return null}async loadImage(t){return await new Promise(i=>{let n=new Image;n.onload=()=>i(n),n.onerror=()=>i(null),n.src=t})}async showManualCropModal(t,i,n){let r=i.width/i.height,a=URL.createObjectURL(t),s=await this.loadImage(a);try{URL.revokeObjectURL(a)}catch{}if(!(s!=null&&s.naturalWidth)||!(s!=null&&s.naturalHeight))return null;let o=await this.loadImageForValue(n);return await new Promise(c=>{let l=document.createElement("div");l.className="asset-crop-modal";let d=Math.min(860,window.innerWidth-60),m=Math.max(220,Math.floor((d-32-16)/2)),h=Math.min(520,window.innerHeight-240),g=m,b=g/r;b>h&&(b=h,g=b*r),l.innerHTML=`
|
|
843
|
+
<div class="asset-crop-card" style="width:${d}px;">
|
|
844
|
+
<div class="asset-crop-header">
|
|
845
|
+
<div>
|
|
846
|
+
<div class="asset-crop-title">Crop to match current asset</div>
|
|
847
|
+
<div class="asset-crop-subtitle">${i.width}\xD7${i.height}px \u2022 ${r.toFixed(3)} ratio</div>
|
|
848
|
+
</div>
|
|
849
|
+
<button class="asset-crop-close" type="button">Close</button>
|
|
850
|
+
</div>
|
|
851
|
+
<div class="asset-crop-body">
|
|
852
|
+
<div class="asset-crop-column">
|
|
853
|
+
<div class="asset-crop-label">Crop</div>
|
|
854
|
+
<canvas class="asset-crop-canvas" width="${Math.round(g)}" height="${Math.round(b)}"></canvas>
|
|
855
|
+
</div>
|
|
856
|
+
<div class="asset-crop-column">
|
|
857
|
+
<div class="asset-crop-label">Compare</div>
|
|
858
|
+
<canvas class="asset-crop-preview" width="${Math.round(g)}" height="${Math.round(b)}"></canvas>
|
|
859
|
+
</div>
|
|
860
|
+
</div>
|
|
861
|
+
<div class="asset-crop-controls">
|
|
862
|
+
<label>Zoom</label>
|
|
863
|
+
<input class="asset-crop-zoom" type="range" min="0.5" max="3" step="0.01" value="1">
|
|
864
|
+
<span class="asset-crop-zoom-value">1.00\xD7</span>
|
|
865
|
+
<button class="asset-crop-reset" type="button">Center</button>
|
|
866
|
+
</div>
|
|
867
|
+
<div class="asset-crop-actions">
|
|
868
|
+
<button class="asset-crop-cancel" type="button">Cancel</button>
|
|
869
|
+
<button class="asset-crop-apply" type="button">Apply Crop</button>
|
|
870
|
+
</div>
|
|
871
|
+
</div>
|
|
872
|
+
`;let v=l.querySelector(".asset-crop-canvas"),y=l.querySelector(".asset-crop-preview"),x=l.querySelector(".asset-crop-zoom"),w=l.querySelector(".asset-crop-zoom-value"),T=l.querySelector(".asset-crop-close"),C=l.querySelector(".asset-crop-cancel"),S=l.querySelector(".asset-crop-apply"),L=l.querySelector(".asset-crop-reset");if(!v||!y||!x||!w){c(null);return}let M=v.getContext("2d"),_=y.getContext("2d");if(!M||!_){c(null);return}let E=s.naturalWidth,A=s.naturalHeight,P=Math.max(v.width/E,v.height/A),I=1,k=0,D=0,j=!1,ie=0,ye=0,xe=0,J=0,fe=()=>{let F=P*I,je=Math.max(0,(E*F-v.width)/2),Ze=Math.max(0,(A*F-v.height)/2);k=Math.min(je,Math.max(-je,k)),D=Math.min(Ze,Math.max(-Ze,D))},he=()=>{let F=P*I;M.clearRect(0,0,v.width,v.height);let je=v.width/2-E*F/2+k,Ze=v.height/2-A*F/2+D;if(M.drawImage(s,je,Ze,E*F,A*F),_.clearRect(0,0,y.width,y.height),o!=null&&o.naturalWidth&&(o!=null&&o.naturalHeight)){let Qe=Math.max(y.width/o.naturalWidth,y.height/o.naturalHeight),ai=y.width/2-o.naturalWidth*Qe/2,bt=y.height/2-o.naturalHeight*Qe/2;_.drawImage(o,ai,bt,o.naturalWidth*Qe,o.naturalHeight*Qe)}else _.fillStyle="rgba(255, 255, 255, 0.04)",_.fillRect(0,0,y.width,y.height),_.strokeStyle="rgba(255, 255, 255, 0.08)",_.strokeRect(4,4,y.width-8,y.height-8);let mt=y.width/v.width*(P*I),Je=k*(y.width/v.width),Dt=D*(y.height/v.height),ni=y.width/2-E*mt/2+Je,ri=y.height/2-A*mt/2+Dt;_.save(),_.globalAlpha=.7,_.drawImage(s,ni,ri,E*mt,A*mt),_.restore()},Ji=()=>{k=0,D=0,fe(),he()};x.addEventListener("input",()=>{I=Number(x.value),w.textContent=`${I.toFixed(2)}\xD7`,fe(),he()}),v.addEventListener("pointerdown",F=>{j=!0,ie=F.clientX,ye=F.clientY,xe=k,J=D,v.setPointerCapture(F.pointerId)}),v.addEventListener("pointermove",F=>{j&&(k=xe+(F.clientX-ie),D=J+(F.clientY-ye),fe(),he())}),v.addEventListener("pointerup",F=>{j=!1,v.releasePointerCapture(F.pointerId)}),v.addEventListener("pointerleave",()=>{j=!1});let ti=()=>{l.remove()},ii=()=>{ti(),c(null)},er=async()=>{let F=document.createElement("canvas");F.width=i.width,F.height=i.height;let je=F.getContext("2d");if(!je){ti(),c(null);return}let Ze=I,Je=Math.max(F.width/E,F.height/A)*Ze,Dt=F.width/v.width,ni=k*Dt,ri=D*Dt,Qe=F.width/2-E*Je/2+ni,ai=F.height/2-A*Je/2+ri;je.drawImage(s,Qe,ai,E*Je,A*Je);let bt=await new Promise(tr=>{F.toBlob(ir=>tr(ir),t.type||"image/png")});if(ti(),!bt){c(null);return}c(new File([bt],t.name,{type:bt.type}))};T==null||T.addEventListener("click",ii),C==null||C.addEventListener("click",ii),L==null||L.addEventListener("click",Ji),S==null||S.addEventListener("click",()=>{er()}),l.addEventListener("click",F=>{F.target===l&&ii()}),document.body.appendChild(l),Ji()})}async loadImageForValue(t){let i=this.resolveAssetUrls(t);if(!i.length)return null;for(let n of i){let r=await this.loadImage(n);if(r)return r}return null}};import{Assets as ba}from"pixi.js";async function sh(e,t,i){var n,r;console.log("[LIBRARY] applyAssetChange called with:",t,i);try{let a=Date.now(),o=`/${`raw/library/${t}/${i}`}?t=${a}`;console.log("[LIBRARY] Loading texture from:",o);let c=await ba.load(o);if(!c){console.error("[LIBRARY] Failed to load texture:",o);return}let l=window.CustomAssets,d=Object.keys(l||{}).filter(p=>{let f=t.replace(/s$/,"");return p.startsWith(f)||p.includes(f)});for(let p of d)Ne[p]=c,console.log("[LIBRARY] \u2705 Updated AssetTextures."+p),(n=l[p])!=null&&n.texture&&(l[p].texture=c,console.log("[LIBRARY] \u2705 Updated CustomAssets."+p+".texture"));let u=window.gameObjectManager;if(u)for(let p of d){let f=u.get(p);if(f){let m=((r=f.getDisplayObject)==null?void 0:r.call(f))||f.pixiObject||f;m!=null&&m.texture&&(m.texture=c,console.log("[LIBRARY] \u2705 Applied to display object:",p))}}}catch(a){console.error("[LIBRARY] Error applying asset change:",a)}}async function oh(e,t){var i,n,r;console.log("[LIBRARY] resetAsset called for:",t);try{let a=window.getEditableAssets,s=typeof a=="function"?a():null,o=(i=s==null?void 0:s.slots)==null?void 0:i.find(g=>g.category===t),c=o==null?void 0:o.defaultAsset;if(!c){console.warn("[LIBRARY] Could not find default asset for:",t);return}let l=Date.now(),d=`/raw/${c}?t=${l}`;console.log("[LIBRARY] Loading default texture from:",d);let u=await ba.load(d);if(!u){console.error("[LIBRARY] Failed to load default texture:",d);return}let p=window.CustomAssets,f=t.replace(/s$/,""),m=Object.keys(p||{}).filter(g=>g.startsWith(f)||g.includes(f));for(let g of m)Ne[g]=u,console.log("[LIBRARY] \u2705 Reset AssetTextures."+g),(n=p[g])!=null&&n.texture&&(p[g].texture=u,console.log("[LIBRARY] \u2705 Reset CustomAssets."+g+" to default"));let h=window.gameObjectManager;if(h)for(let g of m){let b=h.get(g);if(b){let v=((r=b.getDisplayObject)==null?void 0:r.call(b))||b.pixiObject||b;v!=null&&v.texture&&(v.texture=u,console.log("[LIBRARY] \u2705 Reset display object:",g))}}}catch(a){console.error("[LIBRARY] Error resetting asset:",a)}}async function lh(e,t,i,n){var r,a,s,o,c,l,d,u,p,f,m,h,g,b,v;console.log("[LIBRARY] applySlotAsset:",{objectId:t,assetFilename:i,category:n});try{let y=t.startsWith("json.")?t.replace("json.",""):t;console.log("[LIBRARY] Asset key:",y);let x=Date.now(),w=`/raw/library/${n}/${i}?t=${x}`;console.log("[LIBRARY] Loading texture from:",w);let T=await ba.load(w);if(!T){console.error("[LIBRARY] Failed to load texture:",w);return}console.log("[LIBRARY] \u2705 Texture loaded"),Ne[y]=T,console.log("[LIBRARY] \u2705 Updated AssetTextures."+y);let C=window.CustomAssets;C!=null&&C[y]&&(C[y].texture=T,console.log("[LIBRARY] \u2705 Updated legacy CustomAssets."+y));let S=window.gameObjectManager;if(console.log("[LIBRARY] gameObjectManager exists?",!!S),S){let M=Array.from(((r=S.keys)==null?void 0:r.call(S))||[]).slice(0,10);console.log("[LIBRARY] Available gameObject keys (first 10):",M);let _=S.get(y);if(console.log("[LIBRARY] gameObject for "+y+"?",!!_),_){let E=((a=_.getDisplayObject)==null?void 0:a.call(_))||_.pixiObject||_.pixi||_,A=(s=E==null?void 0:E.constructor)==null?void 0:s.name;if(console.log("[LIBRARY] displayObject:",E),console.log("[LIBRARY] displayObject type:",A),console.log("[LIBRARY] has texture?",!!(E!=null&&E.texture)),E!=null&&E.texture)E.texture=T,console.log("[LIBRARY] \u2705 Applied to display object:",y);else if(A==="Text"){console.log("[LIBRARY] \u{1F504} Converting Text to Sprite...");let{Sprite:P}=await import("pixi.js"),I=E.parent,k=(c=(o=I==null?void 0:I.getChildIndex)==null?void 0:o.call(I,E))!=null?c:0,D={x:E.x,y:E.y},j={x:(d=(l=E.anchor)==null?void 0:l.x)!=null?d:.5,y:(p=(u=E.anchor)==null?void 0:u.y)!=null?p:.5},ie={x:(m=(f=E.scale)==null?void 0:f.x)!=null?m:1,y:(g=(h=E.scale)==null?void 0:h.y)!=null?g:1},ye=(b=E.alpha)!=null?b:1,xe=(v=E.visible)!=null?v:!0,J=new P(T);J.anchor.set(j.x,j.y),J.position.set(D.x,D.y),J.scale.set(ie.x,ie.y),J.alpha=ye,J.visible=xe,I&&(I.removeChild(E),I.addChildAt(J,k),console.log("[LIBRARY] \u2705 Replaced Text with Sprite in parent")),_.pixiObject&&(_.pixiObject=J),_.pixi&&(_.pixi=J),console.log("[LIBRARY] \u2705 Text \u2192 Sprite conversion complete")}else if(E!=null&&E.children){let P=E.children.find(I=>I.texture);P?(P.texture=T,console.log("[LIBRARY] \u2705 Applied to child sprite")):console.warn("[LIBRARY] \u26A0\uFE0F No texture found in displayObject or children")}}}let L=`raw/library/${n}/${i}`;et({objectId:y,path:"render.asset.path",value:L}),console.log("[LIBRARY] \u2705 Staged config override for:",y,"path:",L)}catch(y){console.error("[LIBRARY] Error applying slot asset:",y)}}async function ch(e,t,i,n){var r;console.log("[LIBRARY] resetSlotAsset:",{objectId:t,defaultAsset:i,category:n});try{let a=t.startsWith("json.")?t.replace("json.",""):t,s=Date.now(),o=`/raw/${i}?t=${s}`;console.log("[LIBRARY] Loading default texture from:",o);let c=await ba.load(o);if(!c){console.error("[LIBRARY] Failed to load default texture:",o);return}Ne[a]=c,console.log("[LIBRARY] \u2705 Reset AssetTextures."+a);let l=window.CustomAssets;l!=null&&l[a]&&(l[a].texture=c,console.log("[LIBRARY] \u2705 Reset CustomAssets."+a+" to default"));let d=window.gameObjectManager;if(d){let u=d.get(a);if(u){let p=((r=u.getDisplayObject)==null?void 0:r.call(u))||u.pixiObject||u;p!=null&&p.texture&&(p.texture=c,console.log("[LIBRARY] \u2705 Reset display object:",a))}}et({objectId:a,path:"render.asset.path",value:i}),console.log("[LIBRARY] \u2705 Reset config override for:",a)}catch(a){console.error("[LIBRARY] Error resetting slot asset:",a)}}import{Graphics as hh,Point as Xy}from"pixi.js";import{Point as dh}from"pixi.js";var Pt=()=>window.debugConfig||{},uh=()=>window.resolveAnchorVec2||(e=>({x:.5,y:.5})),ph=()=>window.resolveScreenAnchorPoint||(()=>new dh),fh=()=>window.resolveScreenRatioPoint||(()=>new dh);function gh(e){va(e)&&(e.objectDebugRaf||(e.objectDebugRaf=window.requestAnimationFrame(()=>ya(e))))}function mh(e){e.objectDebugRaf&&(window.cancelAnimationFrame(e.objectDebugRaf),e.objectDebugRaf=null),Bn(e)}function va(e){return e.isDebugOpen}function ya(e){var a,s,o;if(!va(e)){e.objectDebugRaf=null;return}e.objectDebugRaf=window.requestAnimationFrame(()=>ya(e));let t=Jo(e);if(!t){jn(e,null),Bn(e);return}let i=Qo(e,t);if(!i){jn(e,null),Bn(e);return}let n=new Xy;(a=i.getGlobalPosition)==null||a.call(i,n);let r=el(e,i);jn(e,{instanceId:t,worldX:n.x,worldY:n.y,configX:(s=r==null?void 0:r.x)!=null?s:null,configY:(o=r==null?void 0:r.y)!=null?o:null}),e.highlightObject?rl(e,i):sl(e),e.highlightAnchor&&r?al(e,r):ol(e)}function Jo(e){var r;let t=e.selectedObjectId;if(!t)return null;let i=window.__editableObjectInstances,n=(r=i==null?void 0:i.get)==null?void 0:r.call(i,t);return Array.isArray(n)&&n.length>0?n[0]:t}function Qo(e,t){var r,a;let i=window.gameObjectManager,n=(r=i==null?void 0:i.get)==null?void 0:r.call(i,t);return n?((a=n.getDisplayObject)==null?void 0:a.call(n))||n.pixiObject||n:null}function Fn(e){let t=e.selectedObjectId;if(!t)return null;let i=window.getEditableObjectConfig;return typeof i!="function"?null:i(t)}function el(e,t){var s,o;let i=Fn(e);if(!i)return null;let n=(s=i.transform)!=null?s:{},r=tl(e);if(!r)return null;if(n.position_ratio!=null)return fh()(r.width,r.height,n.position_ratio);let a=(o=n.anchor)!=null?o:"center";return ph()(r.width,r.height,a)}function tl(e){var a;let t=(a=e.container)==null?void 0:a.querySelector(".game-container"),i=Number(t==null?void 0:t.dataset.screenWidth),n=Number(t==null?void 0:t.dataset.screenHeight);if(Number.isFinite(i)&&i>0&&Number.isFinite(n)&&n>0)return{width:i,height:n};let r=window.gameApp;return r!=null&&r.renderer?{width:r.renderer.width,height:r.renderer.height}:null}function il(e){let t=window.gameApp;return t!=null&&t.stage?(e.objectBoundsGfx&&e.objectBoundsGfx.parent!==t.stage&&(e.objectBoundsGfx.destroy(),e.objectBoundsGfx=null),e.objectBoundsGfx||(e.objectBoundsGfx=new hh,e.objectBoundsGfx.zIndex=999999,t.stage.addChild(e.objectBoundsGfx)),e.objectBoundsGfx):null}function nl(e){let t=window.gameApp;return t!=null&&t.stage?(e.objectAnchorGfx&&e.objectAnchorGfx.parent!==t.stage&&(e.objectAnchorGfx.destroy(),e.objectAnchorGfx=null),e.objectAnchorGfx||(e.objectAnchorGfx=new hh,e.objectAnchorGfx.zIndex=1e6,t.stage.addChild(e.objectAnchorGfx)),e.objectAnchorGfx):null}function rl(e,t){var r;let i=il(e);if(!i)return;let n=(r=t.getBounds)==null?void 0:r.call(t);n&&(i.clear(),i.rect(n.x,n.y,n.width,n.height).stroke({width:2,color:16726832,alpha:.9}))}function al(e,t){let i=nl(e);if(!i)return;let n=6;i.clear(),i.moveTo(t.x-n,t.y),i.lineTo(t.x+n,t.y),i.moveTo(t.x,t.y-n),i.lineTo(t.x,t.y+n),i.stroke({width:2,color:3066993,alpha:.9})}function sl(e){e.objectBoundsGfx&&e.objectBoundsGfx.clear()}function ol(e){e.objectAnchorGfx&&e.objectAnchorGfx.clear()}function Bn(e){e.objectBoundsGfx&&(e.objectBoundsGfx.destroy(),e.objectBoundsGfx=null),e.objectAnchorGfx&&(e.objectAnchorGfx.destroy(),e.objectAnchorGfx=null)}function jn(e,t){e.sceneToolsPanel.updateInfo(t?{instanceId:t.instanceId,worldX:t.worldX,worldY:t.worldY,anchorX:t.configX,anchorY:t.configY}:null)}function bh(e,t){return t.split(".").reduce((i,n)=>i?i[n]:void 0,e)}function vh(e,t,i){var s;let n=t.split("."),r=n.pop(),a=e;for(let o of n)a[o]=(s=a[o])!=null?s:{},a=a[o];a[r]=i}function ll(e){var n,r,a,s,o;if(!e)return!1;if((n=e.transform)!=null&&n.offset)return!0;let t=((a=(r=e.identity)==null?void 0:r.category)!=null?a:"").toString().toLowerCase(),i=((o=(s=e.identity)==null?void 0:s.id)!=null?o:"").toString().toLowerCase();return t.includes("ui")||i.startsWith("ui")||i.includes("label")}function wa(e){let t=Pt();t.layout&&(t.layout.scale_multiplier=1,t.layout.position_offset={x:0,y:0},t.layout.debug_rect_visible=!0,t.layout.debug_rect_color=16711680,t.layout.debug_rect_thickness=4),t.engine&&(t.engine.scale=1,t.engine.background_scale=1.05,t.engine.label_pulse_speed=3,t.engine.label_pulse_intensity=.03),t.physics&&(t.physics.rope_length=420),window.location.reload()}function yh(e){window.location.reload()}function _a(e){let t=JSON.stringify(Pt(),null,2);navigator.clipboard.writeText(t).then(()=>{alert("Debug config copied to clipboard!")}).catch(()=>{console.log(t),alert("Config logged to console (clipboard not available)")})}async function xh(e,t){var i,n,r;if(!(!e.configViewer||!e.container))try{let a=window.getEditableObjectConfig,s=typeof a=="function"?a(t):null;if(!s){let{loadObjectCentricConfig:o,loadObjectConfig:c}=await import("./config-7DI6U2YD.js"),u=(((i=(await o("scene.main")).scene)==null?void 0:i.objects)||[]).find(f=>f.object_config===t||f.instance_id===t);if(!u)return;let p=await c(u.object_config);console.log("[PREVIEW] Loaded object config (fallback)",t,p),xa(e,p),(n=e.configViewer)==null||n.style.setProperty("display","block");return}console.log("[PREVIEW] Loaded object config",t,s),xa(e,s),(r=e.configViewer)==null||r.style.setProperty("display","block");return}catch(a){console.error("[DEBUG] Failed to load object config:",a)}}function xa(e,t){var u,p,f,m,h,g,b,v,y,x;if(!e.container)return;let i=e.container.querySelector("#config-pos-x"),n=e.container.querySelector("#config-pos-y"),r=e.container.querySelector("#config-scale"),a=e.container.querySelector("#config-anchor-x"),s=e.container.querySelector("#config-anchor-y"),c=ll(t)?(u=t.transform)==null?void 0:u.offset:(p=t.transform)==null?void 0:p.position;i&&(i.value=String((f=c==null?void 0:c.x)!=null?f:0)),n&&(n.value=String((m=c==null?void 0:c.y)!=null?m:0)),r&&(r.value=String((g=(h=t.transform)==null?void 0:h.scale)!=null?g:1));let l=(x=(y=(b=t.transform)==null?void 0:b.anchor)!=null?y:(v=t.render)==null?void 0:v.anchor)!=null?x:{x:.5,y:.5},d=uh()(l);a&&(a.value=String(d.x)),s&&(s.value=String(d.y))}function wh(e){var c,l,d,u,p,f,m,h,g,b;let t=e.selectedObjectId;if(!t||!e.container)return;let i=(l=(c=e.container.querySelector("#config-pos-x"))==null?void 0:c.value)!=null?l:"0",n=(u=(d=e.container.querySelector("#config-pos-y"))==null?void 0:d.value)!=null?u:"0",r=(f=(p=e.container.querySelector("#config-scale"))==null?void 0:p.value)!=null?f:"1",a=(h=(m=e.container.querySelector("#config-anchor-x"))==null?void 0:m.value)!=null?h:"0.5",s=(b=(g=e.container.querySelector("#config-anchor-y"))==null?void 0:g.value)!=null?b:"0.5",o=`${t}:
|
|
873
|
+
position: (${i}, ${n})
|
|
874
|
+
scale: ${r}
|
|
875
|
+
anchor: (${a}, ${s})`;navigator.clipboard.writeText(o).then(()=>console.log("[DEBUG] Config values copied to clipboard")).catch(v=>console.error("[DEBUG] Failed to copy config values:",v))}async function cl(e,t){var u,p,f,m,h,g,b,v,y,x,w;if(console.log("[INSPECTOR] \u{1F527} applyObjectConfig called"),!e.container)return;let i=e.selectedObjectId;if(!i){console.warn("[PREVIEW] Apply object config clicked with no selection");return}let n=Number((p=(u=e.container.querySelector("#config-pos-x"))==null?void 0:u.value)!=null?p:0),r=Number((m=(f=e.container.querySelector("#config-pos-y"))==null?void 0:f.value)!=null?m:0),a=Number((g=(h=e.container.querySelector("#config-scale"))==null?void 0:h.value)!=null?g:1),s=Number((v=(b=e.container.querySelector("#config-anchor-x"))==null?void 0:b.value)!=null?v:.5),o=Number((x=(y=e.container.querySelector("#config-anchor-y"))==null?void 0:y.value)!=null?x:.5);console.log("[INSPECTOR] Applying config for:",i,{posX:n,posY:r,scale:a,anchorX:s,anchorY:o});let{applyConfigOverride:c}=await import("./ConfigOverride-DFTDUTRQ.js");c({objectId:i,path:"transform.position",value:{x:n,y:r}},{silent:t==null?void 0:t.silent}),c({objectId:i,path:"transform.scale",value:a},{silent:t==null?void 0:t.silent}),c({objectId:i,path:"transform.anchor",value:{x:s,y:o}},{silent:t==null?void 0:t.silent});let l=Fn(e);ll(l)&&c({objectId:i,path:"transform.offset",value:{x:n,y:r}},{silent:!0}),console.log("[INSPECTOR] Calling applyEditableObjectConfig...");let d=window.applyEditableObjectConfig;if(typeof d=="function"){let T=(w=window.getEditableObjectConfig)==null?void 0:w.call(window,i);T?(console.log("[INSPECTOR] \u2705 Calling applyEditableObjectConfig for:",i),d(i,T)):console.warn("[INSPECTOR] \u26A0\uFE0F No config found for:",i)}else console.warn("[INSPECTOR] \u26A0\uFE0F applyEditableObjectConfig not available")}async function _h(e,t,i){let{applyConfigOverride:n}=await import("./ConfigOverride-DFTDUTRQ.js");Object.entries(t.assets).forEach(([c,l])=>{n({path:`assets.${c}`,value:l},{silent:!0})}),Object.entries(t.runtime.theme).forEach(([c,l])=>{n({path:`runtime.theme.${c}`,value:l},{silent:!0})}),Object.entries(t.runtime.ui).forEach(([c,l])=>{n({path:`runtime.ui.${c}`,value:l},{silent:!0})}),Object.entries(t.runtime.fonts).forEach(([c,l])=>{n({path:`runtime.fonts.${c}`,value:l},{silent:!0})}),Object.entries(t.runtime.audio).forEach(([c,l])=>{n({path:`runtime.audio.${c}`,value:l},{silent:!0})});let r=window.applyEditableEngineConfig;if(typeof r=="function"){let c={theme:t.runtime.theme,fonts:t.runtime.fonts,audio:t.runtime.audio},l={};Object.entries(t.runtime.ui).forEach(([d,u])=>{var p;if(d)if(d.includes(".")){let f=d.split("."),m=l;for(let h=0;h<f.length-1;h++){let g=f[h];m[g]=(p=m[g])!=null?p:{},m=m[g]}m[f[f.length-1]]=u}else l[d]=u}),c.ui=l,r({runtime:c,assets:t.assets})}let a=Object.values(t.assets).some(c=>/^(blob:|data:)/.test(c)),s=(i==null?void 0:i.source)!=="auto"&&!a,o=window.__previewShell;s&&(o!=null&&o.refresh)&&o.refresh()}function Eh(e){e.selectedObjectId&&(e.objectAutoApplyTimer&&window.clearTimeout(e.objectAutoApplyTimer),e.objectAutoApplyTimer=window.setTimeout(()=>{e.objectAutoApplyTimer=null,cl(e,{silent:!0})},150))}var Zy=3e3;function Sh(e,t,i){let n=i!=null?i:e.offsetParent;if(!n)return;t.style.cursor="move";let r=0,a=0,s=0,o=0,c=!1,l=u=>{if(!c)return;let p=u.clientX-r,f=u.clientY-a;e.style.left=`${s+p}px`,e.style.top=`${o+f}px`},d=()=>{c&&(c=!1,window.removeEventListener("pointermove",l),window.removeEventListener("pointerup",d))};t.addEventListener("pointerdown",u=>{if(u.button!==0)return;let p=u.target;if(p!=null&&p.closest("button, input, select, textarea"))return;u.preventDefault();let f=e.getBoundingClientRect(),m=n.getBoundingClientRect();s=Math.max(0,f.left-m.left),o=Math.max(0,f.top-m.top);let h=f.width,g=f.height,b=m.width,v=m.height;s=Math.min(s,b-h),o=Math.min(o,v-g),r=u.clientX,a=u.clientY,e.style.left=`${s}px`,e.style.top=`${o}px`,e.style.right="auto",e.style.bottom="auto",e.style.zIndex=String(++Zy);let y=e.getBoundingClientRect();(y.left<0||y.top<0||y.right>window.innerWidth||y.bottom>window.innerHeight)&&(e.style.left="16px",e.style.top="72px",e.style.right="auto",e.style.bottom="auto"),c=!0,window.addEventListener("pointermove",l),window.addEventListener("pointerup",d)})}function Ah(e,t,i){t.style.cursor="nwse-resize";let n=0,r=0,a=0,s=0,o=!1,c=d=>{if(!o)return;let u=d.clientX-a,p=d.clientY-s,f=Math.max(100,n+u),m=Math.max(100,r+p);e.style.width=`${f}px`,e.style.height=`${m}px`,i==null||i(f,m)},l=()=>{o&&(o=!1,window.removeEventListener("pointermove",c),window.removeEventListener("pointerup",l))};t.addEventListener("pointerdown",d=>{if(d.button!==0)return;d.preventDefault(),d.stopPropagation();let u=e.getBoundingClientRect();n=u.width,r=u.height,a=d.clientX,s=d.clientY,o=!0,window.addEventListener("pointermove",c),window.addEventListener("pointerup",l)})}function dl(e,t){var h,g,b;let i=(b=(g=(h=e.container)==null?void 0:h.querySelector("#debug-overlay"))!=null?g:e.debugOverlay)!=null?b:t.offsetParent;if(!i)return;let n=i.getBoundingClientRect(),r=t.getBoundingClientRect(),a=12,s=Math.max(250,Math.floor(n.width-a*2)),o=Math.max(200,Math.floor(n.height-a*2));r.width>s&&(t.style.width=`${s}px`),r.height>o&&(t.style.height=`${o}px`);let c=t.getBoundingClientRect(),l=c.left-n.left,d=c.top-n.top,u=Math.max(a,n.width-c.width-a),p=Math.max(a,n.height-c.height-a),f=Math.min(Math.max(l,a),u),m=Math.min(Math.max(d,a),p);t.style.left=`${Math.round(f)}px`,t.style.top=`${Math.round(m)}px`,t.style.right="auto",t.style.bottom="auto"}function Zt(e){if(!e.container)return;let t=e.container.querySelector("#debug-workbench");if(!t)return;dl(e,t);let i={activeTab:e.activeTab,width:t.style.width,height:t.style.height,left:t.style.left,top:t.style.top};localStorage.setItem("preview_workbench_state",JSON.stringify(i))}function Ea(e){try{let t=localStorage.getItem("preview_workbench_state");if(!t)return;let i=JSON.parse(t);i.activeTab&&(e.activeTab=i.activeTab),window.requestAnimationFrame(()=>{var r;let n=(r=e.container)==null?void 0:r.querySelector("#debug-workbench");n&&(i.width&&(n.style.width=i.width),i.height&&(n.style.height=i.height),i.left&&(n.style.left=i.left,n.style.right="auto"),i.top&&(n.style.top=i.top,n.style.bottom="auto"),dl(e,n))})}catch(t){console.warn("[PREVIEW] Failed to load workbench state",t)}}function Ch(e,t){let i=t.getBoundingClientRect();(i.left<0||i.top<0||i.right>window.innerWidth||i.bottom>window.innerHeight)&&(console.warn("[Workbench] Workbench positioned outside viewport, repositioning..."),t.style.left="16px",t.style.top="72px",t.style.right="auto",t.style.bottom="auto",dl(e,t),Zt(e))}function kh(e){var r,a,s;if(!e.container)return;let t=e.container,i=t.querySelector("#debug-toggle");i||console.warn("[PREVIEW] Debug toggle not found in DOM"),i==null||i.addEventListener("click",()=>{var o;console.log("[PREVIEW] Debug toggle clicked"),(o=e.toggleDebug)==null||o.call(e)}),(r=t.querySelector("#debug-close"))==null||r.addEventListener("click",()=>{var o;return(o=e.toggleDebug)==null?void 0:o.call(e,!1)}),(a=t.querySelector("#debug-reset"))==null||a.addEventListener("click",()=>wa(e)),(s=t.querySelector("#debug-export"))==null||s.addEventListener("click",()=>_a(e)),t.querySelectorAll(".workbench-tab").forEach(o=>{o.addEventListener("click",()=>{let c=o.dataset.tab;e.activeTab=c,ul(e),Zt(e)})}),fl(e,t),pl(e,t)}function ul(e){if(!e.container)return;let t=e.container;t.querySelectorAll(".workbench-tab").forEach(r=>{let a=r.dataset.tab;r.classList.toggle("active",a===e.activeTab)}),t.querySelectorAll(".workbench-tab-panel").forEach(r=>{let a=r.dataset.tabPanel;r.classList.toggle("active",a===e.activeTab)})}function pl(e,t){ke(e,t,"debug-scene-scale","engine.scale","#debug-scene-scale-value"),ke(e,t,"debug-layout-scale","layout.scale_multiplier","#debug-layout-scale-value"),ke(e,t,"debug-layout-offset-x","layout.position_offset.x","#debug-layout-offset-x-value"),ke(e,t,"debug-layout-offset-y","layout.position_offset.y","#debug-layout-offset-y-value"),ke(e,t,"debug-rect-thickness","layout.debug_rect_thickness","#debug-rect-thickness-value"),ke(e,t,"debug-engine-scale","engine.scale","#debug-engine-scale-value"),ke(e,t,"debug-background-scale","engine.background_scale","#debug-background-scale-value"),ke(e,t,"debug-label-pulse-speed","engine.label_pulse_speed","#debug-label-pulse-speed-value"),ke(e,t,"debug-label-pulse-intensity","engine.label_pulse_intensity","#debug-label-pulse-intensity-value"),ke(e,t,"debug-rope-length","physics.rope_length","#debug-rope-length-value");let i=t.querySelector("#debug-rect-visible");i==null||i.addEventListener("change",()=>{let r=Pt();r.layout&&(r.layout.debug_rect_visible=!!i.checked)});let n=t.querySelector("#debug-rect-color");n==null||n.addEventListener("input",()=>{let r=n.value.replace("#",""),a=parseInt(r,16),s=Pt();s.layout&&(s.layout.debug_rect_color=Number.isFinite(a)?a:16711680)})}function Th(e){if(!e.container||!e.debugOverlay)return;let t=e.container.querySelector("#debug-workbench"),i=e.container.querySelector("#workbench-handle"),n=e.container.querySelector("#workbench-resize");t&&i&&(!t.style.left&&!t.style.right&&!t.style.top&&!t.style.bottom&&(t.style.right="16px",t.style.top="72px"),Sh(t,i,e.debugOverlay),i.addEventListener("pointerup",()=>{setTimeout(()=>{Zt(e),Ch(e,t)},10)})),t&&n&&Ah(t,n,()=>Zt(e)),Ea(e)}function fl(e,t){Array.from(t.querySelectorAll("[data-panel-toggle]")).forEach(n=>{n.addEventListener("click",()=>{let r=n.closest(".scene-panel");r&&r.classList.toggle("collapsed")})})}function ke(e,t,i,n,r){let a=t.querySelector(`#${i}`),s=t.querySelector(r);if(!a||!s)return;let o=bh(Pt(),n);typeof o=="number"&&(a.value=String(o),s.textContent=String(o)),a.addEventListener("input",()=>{let c=Number(a.value);s.textContent=String(c),vh(Pt(),n,c)})}var Sa=class{constructor(){this.container=null}initialize(t){this.container=t,window.addEventListener("config:changed",()=>{this.refreshPanel()}),this.refreshPanel()}render(){let t=nc(),{hasChanges:i,overrideCount:n,overrides:r}=t,a={};for(let c of r){let l=c.objectId||"Engine";a[l]||(a[l]=[]),a[l].push(c)}let s=localStorage.getItem("handler_last_applied"),o=s?new Date(parseInt(s)).toLocaleString():"Never";return`
|
|
876
|
+
<div class="config-persistence-panel">
|
|
877
|
+
<div class="persistence-status-bar ${i?"has-changes":"no-changes"}">
|
|
878
|
+
${i?`
|
|
879
|
+
<div class="status-box">
|
|
880
|
+
<span class="status-badge">UNAPPLIED</span>
|
|
881
|
+
<span class="status-text">${n} staging changes</span>
|
|
882
|
+
</div>
|
|
883
|
+
<div class="status-action-hint">Review below before applying to project</div>
|
|
884
|
+
`:`
|
|
885
|
+
<div class="status-box">
|
|
886
|
+
<span class="status-badge success">READY</span>
|
|
887
|
+
<span class="status-text">Configuration in sync with disk</span>
|
|
888
|
+
</div>
|
|
889
|
+
`}
|
|
890
|
+
</div>
|
|
891
|
+
|
|
892
|
+
<div class="persistence-main-actions">
|
|
893
|
+
<button
|
|
894
|
+
id="apply-to-project-btn"
|
|
895
|
+
class="persistence-btn primary-action"
|
|
896
|
+
${i?"":"disabled"}
|
|
897
|
+
title="Saves all staged changes to the actual configuration files on disk."
|
|
898
|
+
>
|
|
899
|
+
\u{1F4BE} APPLY ALL CHANGES TO PROJECT
|
|
900
|
+
</button>
|
|
901
|
+
</div>
|
|
902
|
+
|
|
903
|
+
${i?`
|
|
904
|
+
<div class="staging-area">
|
|
905
|
+
<div class="staging-header">
|
|
906
|
+
<span>Staging Area (Pending Review)</span>
|
|
907
|
+
<button class="staging-clear-all" id="clear-all-overrides">Discard All</button>
|
|
908
|
+
</div>
|
|
909
|
+
<div class="staging-list">
|
|
910
|
+
${Object.entries(a).map(([c,l])=>`
|
|
911
|
+
<div class="staging-group">
|
|
912
|
+
<div class="staging-group-title">
|
|
913
|
+
<span class="group-icon">${c==="Engine"?"\u2699\uFE0F":"\u{1F4E6}"}</span>
|
|
914
|
+
<span class="group-id">${c}</span>
|
|
915
|
+
</div>
|
|
916
|
+
<div class="staging-items">
|
|
917
|
+
${l.map(d=>`
|
|
918
|
+
<div class="staging-item">
|
|
919
|
+
<div class="item-path">${d.path}</div>
|
|
920
|
+
<div class="item-value" title="${JSON.stringify(d.value)}">
|
|
921
|
+
${this.formatValue(d.value)}
|
|
922
|
+
</div>
|
|
923
|
+
<button class="item-remove" data-remove-path="${d.path}" data-remove-id="${d.objectId||""}" title="Discard this change">\xD7</button>
|
|
924
|
+
</div>
|
|
925
|
+
`).join("")}
|
|
926
|
+
</div>
|
|
927
|
+
</div>
|
|
928
|
+
`).join("")}
|
|
929
|
+
</div>
|
|
930
|
+
</div>
|
|
931
|
+
`:`
|
|
932
|
+
<div class="persistence-empty-state">
|
|
933
|
+
<div class="empty-icon">\u{1F4C2}</div>
|
|
934
|
+
<p>No pending changes to review.</p>
|
|
935
|
+
<p class="empty-hint">Modify properties in the Inspector or change assets in the Library to see them here.</p>
|
|
936
|
+
</div>
|
|
937
|
+
`}
|
|
938
|
+
|
|
939
|
+
<div class="persistence-footer">
|
|
940
|
+
<div class="footer-row">
|
|
941
|
+
<span class="footer-label">Last Applied:</span>
|
|
942
|
+
<span class="footer-value">${o}</span>
|
|
943
|
+
</div>
|
|
944
|
+
<div class="footer-secondary-actions">
|
|
945
|
+
<button id="reset-to-applied-btn" class="footer-btn" ${i?"":"disabled"}>Reload State</button>
|
|
946
|
+
<button id="reset-to-original-btn" class="footer-btn danger">Factory Reset (Pristine)</button>
|
|
947
|
+
</div>
|
|
948
|
+
</div>
|
|
949
|
+
|
|
950
|
+
<div class="persistence-info">
|
|
951
|
+
<p><strong>Apply to Project</strong> writes the current preview state to your local .json files in /configs/ folder. This state will be used for the dashboard build.</p>
|
|
952
|
+
</div>
|
|
953
|
+
</div>
|
|
954
|
+
`}formatValue(t){return t===null?"null":typeof t=="string"?t.length>25?t.substring(0,22)+"...":t:typeof t=="object"?"{...}":String(t)}setupEventListeners(){if(!this.container)return;let t=this.container.querySelector("#apply-to-project-btn");t==null||t.addEventListener("click",async()=>{if(!(t.getAttribute("disabled")!==null||!confirm("This will permanently update your project configuration files on disk. Are you sure?")))try{t.textContent="\u23F3 Writing to disk...",t.setAttribute("disabled","true"),await rc(),this.showSuccessNotification(),this.refreshPanel()}catch(o){console.error("[ConfigPersistence] Apply failed:",o),alert(`\u274C Apply failed: ${o.message}`),t.textContent="\u{1F4BE} APPLY ALL CHANGES TO PROJECT",t.removeAttribute("disabled")}}),this.container.querySelectorAll(".item-remove").forEach(s=>{s.addEventListener("click",()=>{let o=s.dataset.removePath,c=s.dataset.removeId;ic(c||void 0,o)})});let n=this.container.querySelector("#clear-all-overrides");n==null||n.addEventListener("click",()=>{confirm("Discard all staged changes?")&&Ka()});let r=this.container.querySelector("#reset-to-applied-btn");r==null||r.addEventListener("click",()=>{confirm("Discard changes and reload last applied state?")&&Ka()});let a=this.container.querySelector("#reset-to-original-btn");a==null||a.addEventListener("click",async()=>{await ac()})}showSuccessNotification(){let t=document.createElement("div");t.className="persistence-notification success",t.innerHTML=`
|
|
955
|
+
<div class="notify-icon">\u2705</div>
|
|
956
|
+
<div class="notify-content">
|
|
957
|
+
<strong>Changes Applied!</strong>
|
|
958
|
+
<span>Project files updated.</span>
|
|
959
|
+
</div>
|
|
960
|
+
`,document.body.appendChild(t),setTimeout(()=>{t.classList.add("out"),setTimeout(()=>t.remove(),500)},3e3)}refreshPanel(){if(!this.container)return;let t=this.container.querySelector(".config-persistence-panel");t?t.outerHTML=this.render():this.container.innerHTML=this.render(),this.setupEventListeners()}};var Aa=class{constructor(){this.debugOverlay=null;this.isDebugOpen=!1;this.selectedObjectId=null;this.configViewer=null;this.container=null;this.objectAutoApplyTimer=null;this.objectDebugRaf=null;this.objectBoundsGfx=null;this.objectAnchorGfx=null;this.highlightObject=!1;this.highlightAnchor=!1;this.activeTab="hierarchy";this.sceneObjectsPanel=new lr;this.sceneToolsPanel=new cr;this.inspectorPanel=new wr;this.libraryPanel=new dr;this.brandVisionPanel=new ga;this.customizeSettingsPanel=new ma;this.configPersistencePanel=new Sa}applyAssetChange(t,i){return sh(this,t,i)}resetAsset(t){return oh(this,t)}applySlotAsset(t,i,n){return lh(this,t,i,n)}resetSlotAsset(t,i,n){return ch(this,t,i,n)}startObjectVisuals(){return gh(this)}stopObjectVisuals(){return mh(this)}shouldRunObjectVisuals(){return va(this)}updateObjectVisuals(){return ya(this)}getSelectedInstanceId(){return Jo(this)}getDisplayObjectById(t){return Qo(this,t)}getSelectedObjectConfig(){return Fn(this)}getConfigAnchorWorldPoint(t){return el(this,t)}getScreenSize(){return tl(this)}ensureBoundsGfx(){return il(this)}ensureAnchorGfx(){return nl(this)}drawBounds(t){return rl(this,t)}drawAnchor(t){return al(this,t)}clearBounds(){return sl(this)}clearAnchor(){return ol(this)}clearObjectVisuals(){return Bn(this)}updateObjectInfo(t){return jn(this,t)}resetDebugConfig(){return wa(this)}applyDebugConfig(){return yh(this)}exportDebugConfig(){return _a(this)}loadObjectConfig(t){return xh(this,t)}fillConfigViewer(t){return xa(this,t)}copyConfigValues(){return wh(this)}applyObjectConfig(t){return cl(this,t)}applyCustomizeSettings(t,i){return _h(this,t,i)}scheduleObjectAutoApply(){return Eh(this)}setupDebugEventListeners(){return kh(this)}setupDebugInputListeners(t){return pl(this,t)}setupPanelLayout(){return Th(this)}setupCollapsiblePanels(t){return fl(this,t)}setupRangeInput(t,i,n,r){return ke(this,t,i,n,r)}updateWorkbenchTabs(){return ul(this)}saveWorkbenchState(){return Zt(this)}loadWorkbenchState(){return Ea(this)}initialize(t){var i;this.container=t,this.debugOverlay=t.querySelector(".debug-overlay"),this.configViewer=t.querySelector("#config-viewer");try{let n=localStorage.getItem("preview_workbench_state");if(n){let r=JSON.parse(n);r.activeTab&&(this.activeTab=r.activeTab)}}catch(n){console.warn("[PREVIEW] Failed to load workbench tab state",n)}this.sceneObjectsPanel.initialize(t,{onSelect:n=>this.handleObjectSelect(n)}),this.libraryPanel.initialize(t,{onApply:(n,r,a)=>this.applySlotAsset(n,r,a),onReset:(n,r,a)=>this.resetSlotAsset(n,r,a)}),this.inspectorPanel.initialize(t,{onPropertyChange:(n,r,a)=>{console.log("[Inspector] Property changed:",n,r,a)}}),this.brandVisionPanel.initialize(t,()=>{this.toggleDebug(!1);let n="/dashboard";window.location.pathname!==n&&(window.location.href=n)}),this.customizeSettingsPanel.initialize(t,{onApply:(n,r)=>this.applyCustomizeSettings(n,r)}),this.configPersistencePanel.initialize(t),window.__openAiEditor=(n,r,a,s)=>{this.customizeSettingsPanel.openAiEditor(n,r,a,s)},this.setupPanelLayout(),this.updateWorkbenchTabs(),window.__debugContext=this,window.__updateWorkbenchTabs=()=>this.updateWorkbenchTabs(),this.isDebugOpen=!0,(i=this.debugOverlay)==null||i.classList.remove("hidden"),this.updateDebugBadge(),this.sceneObjectsPanel.refreshObjects(),window.__previewSelectObject=n=>this.selectObject(n),window.addEventListener("config:changed",n=>{var r,a;((r=n.detail)==null?void 0:r.action)!=="remove"&&((a=n.detail)==null?void 0:a.action)!=="clear_object"&&this.highlightChangesTab()}),window.applyAssetToSlot=(n,r,a)=>this.applySlotAsset(n,r,a),window.refreshAssetLibrary=()=>this.libraryPanel.refresh(),window.reRenderAssetLibrary=()=>this.libraryPanel.reRender(),window.getEngineSplashConfig=()=>{var r;let n=window.getActiveConfig;if(typeof n=="function"){let a=n();return((r=a==null?void 0:a.engine)==null?void 0:r.splash)||null}return null},window.addAssetToRegistry=(n,r)=>{let a=window.getEditableAssets;if(typeof a=="function"){let s=a();if(s!=null&&s.libraryAssets&&(s.libraryAssets[n]||(s.libraryAssets[n]=[]),!s.libraryAssets[n].some(c=>c.filename===r))){let c=r.replace(/\.(png|jpg|jpeg)$/i,"").replace(/_/g," ");s.libraryAssets[n].unshift({filename:r,displayName:c}),console.log(`[DEBUG] Added ${r} to registry category ${n}`)}}}}selectObject(t){this.handleObjectSelect(t),this.activeTab!=="inspector"&&(this.activeTab="inspector",this.updateWorkbenchTabs())}highlightChangesTab(){var i;let t=(i=this.container)==null?void 0:i.querySelector('[data-tab="changes"]');t&&t.classList.add("has-pending-changes")}getDebugOverlayHTML(){return`
|
|
961
|
+
<div class="debug-overlay hidden" id="debug-overlay">
|
|
962
|
+
<div class="debug-workbench" id="debug-workbench">
|
|
963
|
+
<div class="workbench-header" id="workbench-handle">
|
|
964
|
+
<div class="panel-title">
|
|
965
|
+
<span class="panel-pill">Workbench</span>
|
|
966
|
+
<span class="panel-title-text">Debug Console</span>
|
|
967
|
+
</div>
|
|
968
|
+
<div class="scene-panel-actions">
|
|
969
|
+
<button class="scene-panel-action" type="button" id="debug-close">Close</button>
|
|
970
|
+
</div>
|
|
971
|
+
</div>
|
|
972
|
+
<div class="workbench-tabs">
|
|
973
|
+
<button class="workbench-tab ${this.activeTab==="hierarchy"?"active":""}" data-tab="hierarchy">Hierarchy</button>
|
|
974
|
+
<button class="workbench-tab ${this.activeTab==="inspector"?"active":""}" data-tab="inspector">Inspector</button>
|
|
975
|
+
<button class="workbench-tab ${this.activeTab==="library"?"active":""}" data-tab="library">Library</button>
|
|
976
|
+
<button class="workbench-tab ${this.activeTab==="ai"?"active":""}" data-tab="ai">\u2728 AI Suite</button>
|
|
977
|
+
<button class="workbench-tab ${this.activeTab==="changes"?"active":""}" data-tab="changes">\u{1F4BE} Changes</button>
|
|
978
|
+
</div>
|
|
979
|
+
<div class="workbench-content">
|
|
980
|
+
<div class="workbench-tab-panel ${this.activeTab==="hierarchy"?"active":""}" data-tab-panel="hierarchy">
|
|
981
|
+
${this.sceneObjectsPanel.render()}
|
|
982
|
+
</div>
|
|
983
|
+
<div class="workbench-tab-panel ${this.activeTab==="inspector"?"active":""}" data-tab-panel="inspector">
|
|
984
|
+
${this.inspectorPanel.render()}
|
|
985
|
+
${this.sceneToolsPanel.render()}
|
|
986
|
+
</div>
|
|
987
|
+
<div class="workbench-tab-panel ${this.activeTab==="library"?"active":""}" data-tab-panel="library">
|
|
988
|
+
${this.libraryPanel.render()}
|
|
989
|
+
</div>
|
|
990
|
+
<div class="workbench-tab-panel ${this.activeTab==="ai"?"active":""}" data-tab-panel="ai">
|
|
991
|
+
${this.brandVisionPanel.render()}
|
|
992
|
+
${this.customizeSettingsPanel.render()}
|
|
993
|
+
</div>
|
|
994
|
+
<div class="workbench-tab-panel ${this.activeTab==="changes"?"active":""}" data-tab-panel="changes">
|
|
995
|
+
${this.configPersistencePanel.render()}
|
|
996
|
+
</div>
|
|
997
|
+
</div>
|
|
998
|
+
<div class="workbench-resize-handle" id="workbench-resize"></div>
|
|
999
|
+
</div>
|
|
1000
|
+
</div>
|
|
1001
|
+
`}refresh(){this.isDebugOpen&&(this.sceneObjectsPanel.refreshObjects(),this.libraryPanel.refresh(),this.brandVisionPanel.refresh(),this.selectedObjectId&&this.handleObjectSelect(this.selectedObjectId))}toggleDebug(t){var i;this.isDebugOpen=t!=null?t:!this.isDebugOpen,(i=this.debugOverlay)==null||i.classList.toggle("hidden",!this.isDebugOpen),this.updateDebugBadge(),this.isDebugOpen?this.refresh():this.stopObjectVisuals()}updateDebugBadge(){if(!this.container)return;let t=this.container.querySelector("#debug-badge");t&&t.classList.toggle("active",this.isDebugOpen)}handleObjectSelect(t){this.selectedObjectId=t,this.sceneObjectsPanel.setSelected(t),this.inspectorPanel.loadObject(t),this.loadObjectConfig(t),this.startObjectVisuals()}nudgeSelectedObject(t,i){var u,p,f,m,h,g,b,v,y;if(!this.container||!this.selectedObjectId)return;let r=this.sceneToolsPanel.getNudgeStep(),a=this.container.querySelector("#config-pos-x"),s=this.container.querySelector("#config-pos-y"),o=Number((u=a==null?void 0:a.value)!=null?u:0),c=Number((p=s==null?void 0:s.value)!=null?p:0);if(!Number.isFinite(o)||!Number.isFinite(c)){let x=this.getSelectedObjectConfig();o=(h=(m=(f=x==null?void 0:x.transform)==null?void 0:f.position)==null?void 0:m.x)!=null?h:0,c=(v=(b=(g=x==null?void 0:x.transform)==null?void 0:g.position)==null?void 0:b.y)!=null?v:0}let l=o+t*r,d=c+i*r;a&&(a.value=String(l)),s&&(s.value=String(d)),(y=this.configViewer)==null||y.style.setProperty("display","block"),this.scheduleObjectAutoApply()}};function Jy(e){return new Promise((t,i)=>{let n=new FileReader;n.onerror=()=>i(new Error("FileReader failed")),n.onload=()=>t(String(n.result||"")),n.readAsDataURL(e)})}function Qy(e){var r;let[t,i]=e.split(","),n=t==null?void 0:t.match(/data:(.*?);base64/);return{base64:i!=null?i:"",mimeType:(r=n==null?void 0:n[1])!=null?r:"image/png"}}function ex(e){return`
|
|
1002
|
+
Analyze these screenshots of a brand or game and extract its "Brand DNA".
|
|
1003
|
+
|
|
1004
|
+
Provide a concise summary (2-3 sentences) covering:
|
|
1005
|
+
1. Primary and secondary brand colors.
|
|
1006
|
+
2. The overall aesthetic "vibe" (e.g., minimalist, neon, glossy, retro, corporate).
|
|
1007
|
+
3. Common UI patterns (e.g., rounded buttons, flat icons).
|
|
1008
|
+
|
|
1009
|
+
Then, list the exact hex color codes (#RRGGBB) found in the screenshots.
|
|
1010
|
+
|
|
1011
|
+
FORMAT:
|
|
1012
|
+
Summary: [Your summary here]
|
|
1013
|
+
Palette: [#RRGGBB, #RRGGBB, ...]
|
|
1014
|
+
|
|
1015
|
+
${e?`
|
|
1016
|
+
ADDITIONAL RULES/NOTES:
|
|
1017
|
+
${e}`:""}
|
|
1018
|
+
`.trim()}function Lh(){let e=[],t="",i=null;return{async addSources(n){let r=[];for(let a of n){let s=await Jy(a),o=Qy(s),c={id:`${Date.now()}-${Math.random().toString(16).slice(2)}`,name:a.name,base64:o.base64,mimeType:o.mimeType,dataUrl:s};e.push(c),r.push(c)}return r},getSources(){return e.slice()},async analyze(n,r,a){if(e.length===0)throw new Error("No screenshots to analyze.");let s=ex(r),o=e.map(p=>({base64:p.base64,mimeType:p.mimeType})),c=await ha(n,s,o,{model:a}),l=t,d=[],u=c.split(`
|
|
1019
|
+
`);for(let p of u)if(p.toLowerCase().startsWith("summary:"))l=p.slice(8).trim();else if(p.toLowerCase().includes("palette:")){let f=p.match(/#[0-9A-Fa-f]{6}/g);f&&f.forEach(m=>{d.includes(m.toUpperCase())||d.push(m.toUpperCase())})}return(!l||l===t)&&(l=c.split(`
|
|
1020
|
+
Palette:`)[0].replace(/^Summary:\s*/i,"").trim()),i={summary:l,palette:d.slice(0,10)},i},setSummary(n){t=n,i&&(i={...i,summary:n})},getResult(){return i}}}var Jt="handler_api_key_";var Ni=class{static setKey(t,i,n){try{let r={key:this.encryptKey(i),created:Date.now(),lastUsed:Date.now(),label:n||t},a=`${Jt}${t}`;localStorage.setItem(a,JSON.stringify(r))}catch(r){console.error("[ApiKeyStorage] Failed to store API key:",r)}}static getKey(t){try{let i=`${Jt}${t}`,n=localStorage.getItem(i);if(!n)return null;let r=JSON.parse(n);return r.lastUsed=Date.now(),localStorage.setItem(i,JSON.stringify(r)),this.decryptKey(r.key)}catch(i){return console.error("[ApiKeyStorage] Failed to retrieve API key:",i),null}}static hasKey(t){let i=`${Jt}${t}`;return localStorage.getItem(i)!==null}static removeKey(t){try{let i=`${Jt}${t}`;localStorage.removeItem(i)}catch(i){console.error("[ApiKeyStorage] Failed to remove API key:",i)}}static getStoredServices(){let t=[];try{for(let i=0;i<localStorage.length;i++){let n=localStorage.key(i);if(n&&n.startsWith(Jt)){let r=n.substring(Jt.length),a=localStorage.getItem(n);if(a){let s=JSON.parse(a);t.push({service:r,label:s.label,created:s.created,lastUsed:s.lastUsed})}}}}catch(i){console.error("[ApiKeyStorage] Failed to get stored services:",i)}return t.sort((i,n)=>n.lastUsed-i.lastUsed)}static clearAll(){try{let t=[];for(let i=0;i<localStorage.length;i++){let n=localStorage.key(i);n&&n.startsWith(Jt)&&t.push(n)}t.forEach(i=>localStorage.removeItem(i))}catch(t){console.error("[ApiKeyStorage] Failed to clear API keys:",t)}}static encryptKey(t){try{let n="handler_preview_salt_2024"+t;return btoa(n)}catch(i){return console.warn("[ApiKeyStorage] Encryption failed, storing as-is:",i),t}}static decryptKey(t){try{let i=atob(t),n="handler_preview_salt_2024";return i.startsWith(n)?i.substring(n.length):i}catch(i){return console.warn("[ApiKeyStorage] Decryption failed, returning as-is:",i),t}}},hl=()=>Ni.getKey("gemini"),gl=(e,t)=>Ni.setKey("gemini",e,t),tx=()=>Ni.hasKey("gemini");window.ApiKeyStorage=Ni;window.getGeminiApiKey=hl;window.setGeminiApiKey=gl;window.hasGeminiApiKey=tx;var bl=class{constructor(){this.modal=null;this.options=null;this.analyzer=Lh();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(t){this.options=t,this.currentPrompt=t.initialPrompt||"",this.generatedImages=[],this.selectedImageIndex=-1,this.isGenerating=!1,this.createModal(),document.body.appendChild(this.modal),setTimeout(()=>{var i,n;(i=this.promptInput)==null||i.focus(),(n=this.promptInput)==null||n.select()},100)}createModal(){var i;let t=document.createElement("div");t.className="ai-modal",t.innerHTML=`
|
|
1021
|
+
<div class="ai-modal-card">
|
|
1022
|
+
<div class="ai-modal-header">
|
|
1023
|
+
<div class="ai-modal-actions">
|
|
1024
|
+
<button class="ai-modal-gallery" type="button" data-action="gallery">
|
|
1025
|
+
\u{1F5BC}\uFE0F Gallery
|
|
1026
|
+
</button>
|
|
1027
|
+
</div>
|
|
1028
|
+
<div>
|
|
1029
|
+
<div class="ai-modal-title">AI Image Editor</div>
|
|
1030
|
+
<div class="ai-modal-subtitle">${((i=this.options)==null?void 0:i.objectId)||"Unknown Object"}</div>
|
|
1031
|
+
</div>
|
|
1032
|
+
<button class="ai-modal-close" type="button" data-action="close">\xD7</button>
|
|
1033
|
+
</div>
|
|
1034
|
+
|
|
1035
|
+
<div class="ai-modal-body">
|
|
1036
|
+
<!-- PROMPT INPUT -->
|
|
1037
|
+
<div class="ai-section">
|
|
1038
|
+
<label class="ai-label">Prompt</label>
|
|
1039
|
+
<textarea
|
|
1040
|
+
class="ai-textarea"
|
|
1041
|
+
placeholder="Describe the image you want to generate..."
|
|
1042
|
+
rows="3"
|
|
1043
|
+
>${this.currentPrompt}</textarea>
|
|
1044
|
+
</div>
|
|
1045
|
+
|
|
1046
|
+
<!-- STRENGTH CONTROLS -->
|
|
1047
|
+
<div class="ai-section">
|
|
1048
|
+
<div class="ai-row ai-strength">
|
|
1049
|
+
<label class="ai-label">Creativity</label>
|
|
1050
|
+
<input
|
|
1051
|
+
type="range"
|
|
1052
|
+
class="ai-input"
|
|
1053
|
+
min="0.1"
|
|
1054
|
+
max="1.0"
|
|
1055
|
+
step="0.1"
|
|
1056
|
+
value="0.8"
|
|
1057
|
+
data-strength="creativity"
|
|
1058
|
+
/>
|
|
1059
|
+
<span class="ai-strength-value">0.8</span>
|
|
1060
|
+
</div>
|
|
1061
|
+
</div>
|
|
1062
|
+
|
|
1063
|
+
<!-- BRAND DNA -->
|
|
1064
|
+
<div class="ai-section">
|
|
1065
|
+
<div class="ai-row">
|
|
1066
|
+
<input type="checkbox" id="ai-use-dna" checked />
|
|
1067
|
+
<label for="ai-use-dna" class="ai-label">Apply Brand DNA</label>
|
|
1068
|
+
</div>
|
|
1069
|
+
</div>
|
|
1070
|
+
|
|
1071
|
+
<!-- PREVIEW AREA -->
|
|
1072
|
+
<div class="ai-section">
|
|
1073
|
+
<div class="ai-preview" data-preview>
|
|
1074
|
+
<div class="ai-preview-placeholder">
|
|
1075
|
+
Generated images will appear here
|
|
1076
|
+
</div>
|
|
1077
|
+
</div>
|
|
1078
|
+
</div>
|
|
1079
|
+
|
|
1080
|
+
<!-- LOADING INDICATOR -->
|
|
1081
|
+
<div class="ai-loading hidden" data-loading>
|
|
1082
|
+
<div class="ai-loading-ring"></div>
|
|
1083
|
+
<div class="ai-loading-text">Generating image...</div>
|
|
1084
|
+
</div>
|
|
1085
|
+
|
|
1086
|
+
<!-- GALLERY (hidden by default) -->
|
|
1087
|
+
<div class="ai-gallery hidden" data-gallery>
|
|
1088
|
+
<div class="ai-gallery-grid" data-gallery-grid></div>
|
|
1089
|
+
</div>
|
|
1090
|
+
</div>
|
|
1091
|
+
|
|
1092
|
+
<!-- ACTION BUTTONS -->
|
|
1093
|
+
<div class="ai-modal-actions">
|
|
1094
|
+
<button class="ai-btn" data-action="cancel">Cancel</button>
|
|
1095
|
+
<button class="ai-btn" data-action="generate" disabled>Generate</button>
|
|
1096
|
+
<button class="ai-btn primary" data-action="apply" disabled>Apply</button>
|
|
1097
|
+
</div>
|
|
1098
|
+
</div>
|
|
1099
|
+
`,this.modal=t,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 r;this.currentPrompt=((r=this.promptInput)==null?void 0:r.value)||"",this.updateGenerateButton()});let t=this.modal.querySelector('[data-strength="creativity"]'),i=this.modal.querySelector(".ai-strength-value");t==null||t.addEventListener("input",()=>{i.textContent=t.value}),this.modal.addEventListener("click",r=>{var o;let a=r.target;switch(a.dataset.action||((o=a.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",r=>{let a=r.target;if(a.classList.contains("ai-gallery-item")||a.closest(".ai-gallery-item")){let s=a.closest(".ai-gallery-item"),o=parseInt(s.dataset.index||"-1");o>=0&&this.selectImage(o)}}),this.modal.addEventListener("click",r=>{r.target===this.modal&&this.close()}),this.updateGenerateButton()}updateGenerateButton(){if(!this.generateBtn)return;let t=this.currentPrompt.trim().length>0;this.generateBtn.disabled=!t||this.isGenerating}async updatePromptFromDna(){var i;let t=(i=this.modal)==null?void 0:i.querySelector("#ai-use-dna");if(t!=null&&t.checked)try{let n=this.analyzer.getResult();if(n!=null&&n.summary&&this.promptInput){let r=`${this.currentPrompt}
|
|
1100
|
+
|
|
1101
|
+
Style guidelines: ${n.summary}`;this.promptInput.value=r,this.currentPrompt=r}}catch(n){console.warn("[AiEditorModal] Failed to apply brand DNA:",n)}}async generateImage(){var t,i,n,r;if(!(!this.options||this.isGenerating)){this.isGenerating=!0,this.updateGenerateButton(),(t=this.loadingEl)==null||t.classList.remove("hidden"),(i=this.previewEl)==null||i.classList.add("hidden");try{let a=this.getApiKey();if(!a){alert("Please set your Gemini API key first. You can do this in the AI Creative Suite panel.");return}let s=[];if(this.options.currentValue&&this.options.currentValue.startsWith("data:"))try{let l=await fa(this.options.currentValue);l&&(s=[{base64:l.base64,mimeType:l.mimeType}])}catch(l){console.warn("[AiEditorModal] Failed to load current image:",l)}let o=await Fi(a,this.currentPrompt,s,{aspectRatio:"1:1"}),c=await Bi(o);this.generatedImages.push(c||o),this.selectedImageIndex=this.generatedImages.length-1,this.updateGallery(),this.updatePreview(),this.updateApplyButton()}catch(a){console.error("[AiEditorModal] Generation failed:",a),alert(`Generation failed: ${a instanceof Error?a.message:"Unknown error"}`)}finally{this.isGenerating=!1,(n=this.loadingEl)==null||n.classList.add("hidden"),(r=this.previewEl)==null||r.classList.remove("hidden"),this.updateGenerateButton()}}}updateGallery(){if(!this.galleryEl)return;let t=this.galleryEl.querySelector("[data-gallery-grid]");t&&(t.innerHTML=this.generatedImages.map((i,n)=>`
|
|
1102
|
+
<div class="ai-gallery-item ${n===this.selectedImageIndex?"active":""}" data-index="${n}">
|
|
1103
|
+
<img class="ai-gallery-thumb" src="${i}" alt="Generated ${n+1}" />
|
|
1104
|
+
<div class="ai-gallery-label">#${n+1}</div>
|
|
1105
|
+
</div>
|
|
1106
|
+
`).join(""))}updatePreview(){if(!this.previewEl||this.selectedImageIndex<0)return;let t=this.generatedImages[this.selectedImageIndex];this.previewEl.innerHTML=`<img src="${t}" alt="Selected image" />`}selectImage(t){t<0||t>=this.generatedImages.length||(this.selectedImageIndex=t,this.updateGallery(),this.updatePreview(),this.updateApplyButton())}toggleGallery(){this.galleryEl&&this.galleryEl.classList.toggle("hidden")}updateApplyButton(){var i;let t=(i=this.modal)==null?void 0:i.querySelector('[data-action="apply"]');t&&(t.disabled=this.selectedImageIndex<0)}applySelectedImage(){var i;if(this.selectedImageIndex<0||!((i=this.options)!=null&&i.onApply))return;let t=this.generatedImages[this.selectedImageIndex];this.options.onApply(t),this.close()}getApiKey(){let t=hl();if(t)return t;try{let i=this.analyzer.getResult();if(i&&i.apiKey)return gl(i.apiKey,"From Brand DNA"),i.apiKey}catch(i){console.warn("[AiEditorModal] Failed to get API key from brand DNA:",i)}return null}close(){this.modal&&this.modal.parentNode&&this.modal.parentNode.removeChild(this.modal),this.modal=null,this.options=null}},ml=null;window.__openAiEditor=function(e,t,i,n){ml||(ml=new bl),ml.open({objectId:e,initialPrompt:t,currentValue:i,path:n==null?void 0:n.path,onApply:r=>{if(n!=null&&n.path){let a=window.updateManager;if(a)a.updateProperty(e,n.path,r);else{let s=window.getEditableObjectConfig,o=s==null?void 0:s(e);if(o){let c=n.path.split("."),l=o;for(let d=0;d<c.length-1;d++)l[c[d]]||(l[c[d]]={}),l=l[c[d]];l[c[c.length-1]]=r}}}window.dispatchEvent(new CustomEvent("inspector:refresh"))}})};var vl=class{constructor(){this.modal=null;this.options=null}open(t){this.options=t,this.createModal(),document.body.appendChild(this.modal)}createModal(){if(!this.options)return;let{assetPath:t,assetType:i,objectId:n}=this.options,r=n||"Asset Preview",a=document.createElement("div");a.className="asset-preview-modal",a.innerHTML=`
|
|
1107
|
+
<div class="asset-preview-card">
|
|
1108
|
+
<div class="asset-preview-header">
|
|
1109
|
+
<div class="asset-preview-title">${r}</div>
|
|
1110
|
+
<button class="asset-preview-close" data-action="close">\xD7</button>
|
|
1111
|
+
</div>
|
|
1112
|
+
|
|
1113
|
+
<div class="asset-preview-meta">
|
|
1114
|
+
<div>Type: ${i.toUpperCase()}</div>
|
|
1115
|
+
<div>Path: ${t||"None"}</div>
|
|
1116
|
+
</div>
|
|
1117
|
+
|
|
1118
|
+
<div class="asset-preview-body">
|
|
1119
|
+
${this.renderAssetContent(t,i)}
|
|
1120
|
+
</div>
|
|
1121
|
+
|
|
1122
|
+
<div class="asset-preview-actions">
|
|
1123
|
+
<button class="asset-preview-change" data-action="change">Change Asset</button>
|
|
1124
|
+
${i==="image"?'<button class="asset-preview-ai" data-action="edit">\u2728 AI Edit</button>':""}
|
|
1125
|
+
</div>
|
|
1126
|
+
</div>
|
|
1127
|
+
`,this.modal=a,this.attachEventListeners()}renderAssetContent(t,i){if(!t)return'<div class="asset-preview-placeholder">No asset selected</div>';switch(i){case"image":return`<img src="${this.resolveAssetUrl(t)}" alt="Asset preview" style="max-width: 100%; max-height: 400px; object-fit: contain;" />`;case"audio":let r=this.resolveAssetUrl(t);return`
|
|
1128
|
+
<audio controls style="width: 100%;">
|
|
1129
|
+
<source src="${r}" type="audio/mpeg">
|
|
1130
|
+
<source src="${r}" type="audio/wav">
|
|
1131
|
+
Your browser does not support the audio element.
|
|
1132
|
+
</audio>
|
|
1133
|
+
`;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;">${t}</pre>`;default:return`<div class="asset-preview-placeholder">Cannot preview ${i} assets</div>`}}resolveAssetUrl(t){return t.startsWith("data:")||t.startsWith("blob:")||t.startsWith("/")?t:`/raw/${t}`}attachEventListeners(){if(!this.modal)return;this.modal.addEventListener("click",n=>{let r=n.target;(r.dataset.action==="close"||r===this.modal)&&this.close()});let t=this.modal.querySelector('[data-action="change"]');t&&t.addEventListener("click",()=>{this.openAssetEditor()});let i=this.modal.querySelector('[data-action="edit"]');i&&i.addEventListener("click",()=>{this.openAiEditor(),this.close()})}openAssetEditor(){this.options&&import("./AssetEditorModal-DBAGQINC.js").then(({AssetEditorModal:t})=>{new t().show(this.options.objectId||"unknown",this.options.propertyPath||"",this.options.assetPath,n=>{var r;(r=this.options)!=null&&r.onChange&&this.options.onChange(n),this.close()})})}openAiEditor(){if(!this.options||this.options.assetType!=="image")return;let t=window.__openAiEditor;typeof t=="function"&&t(this.options.objectId||"asset","Edit this image asset",this.options.assetPath,{path:this.options.propertyPath,onApply:i=>{var n;(n=this.options)!=null&&n.onChange&&this.options.onChange(i)}})}close(){this.modal&&this.modal.parentNode&&this.modal.parentNode.removeChild(this.modal),this.modal=null,this.options=null}};window.openAssetPreview=function(e){new vl().open(e)};var yl=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(t){this.options=t,this.createModal(),this.loadImage(),document.body.appendChild(this.modal)}createModal(){let t=document.createElement("div");t.className="asset-crop-modal",t.innerHTML=`
|
|
1134
|
+
<div class="asset-crop-card">
|
|
1135
|
+
<div class="asset-crop-header">
|
|
1136
|
+
<div>
|
|
1137
|
+
<div class="asset-crop-title">Crop Image</div>
|
|
1138
|
+
<div class="asset-crop-subtitle">Drag to reposition, scroll to zoom</div>
|
|
1139
|
+
</div>
|
|
1140
|
+
<button class="asset-crop-close" data-action="close">\xD7</button>
|
|
1141
|
+
</div>
|
|
1142
|
+
|
|
1143
|
+
<div class="asset-crop-body">
|
|
1144
|
+
<div class="asset-crop-column">
|
|
1145
|
+
<div class="asset-crop-canvas-container">
|
|
1146
|
+
<canvas class="asset-crop-canvas"></canvas>
|
|
1147
|
+
</div>
|
|
1148
|
+
|
|
1149
|
+
<div class="asset-crop-controls">
|
|
1150
|
+
<div class="asset-crop-zoom">
|
|
1151
|
+
<label class="asset-crop-label">Zoom</label>
|
|
1152
|
+
<input type="range" min="0.1" max="3" step="0.1" value="1" class="asset-crop-zoom-slider" />
|
|
1153
|
+
<span class="asset-crop-zoom-value">1.0x</span>
|
|
1154
|
+
</div>
|
|
1155
|
+
|
|
1156
|
+
<div class="asset-crop-aspect">
|
|
1157
|
+
<label class="asset-crop-label">Aspect Ratio</label>
|
|
1158
|
+
<select class="asset-crop-aspect-select">
|
|
1159
|
+
<option value="free">Free</option>
|
|
1160
|
+
<option value="1:1">Square (1:1)</option>
|
|
1161
|
+
<option value="4:3">Standard (4:3)</option>
|
|
1162
|
+
<option value="16:9">Widescreen (16:9)</option>
|
|
1163
|
+
<option value="3:2">Photo (3:2)</option>
|
|
1164
|
+
</select>
|
|
1165
|
+
</div>
|
|
1166
|
+
|
|
1167
|
+
<button class="asset-crop-reset" data-action="reset">Reset</button>
|
|
1168
|
+
</div>
|
|
1169
|
+
</div>
|
|
1170
|
+
|
|
1171
|
+
<div class="asset-crop-column">
|
|
1172
|
+
<div class="asset-crop-preview">
|
|
1173
|
+
<div class="asset-crop-preview-label">Preview</div>
|
|
1174
|
+
<canvas class="asset-crop-preview-canvas"></canvas>
|
|
1175
|
+
</div>
|
|
1176
|
+
</div>
|
|
1177
|
+
</div>
|
|
1178
|
+
|
|
1179
|
+
<div class="asset-crop-actions">
|
|
1180
|
+
<button class="asset-crop-apply" data-action="cancel">Cancel</button>
|
|
1181
|
+
<button class="asset-crop-apply primary" data-action="apply">Apply Crop</button>
|
|
1182
|
+
</div>
|
|
1183
|
+
</div>
|
|
1184
|
+
`,this.modal=t,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 t=this.image.width/this.image.height,i=this.canvas.width/this.canvas.height;t>i?(this.cropHeight=this.image.height,this.cropWidth=this.cropHeight*i,this.cropX=(this.image.width-this.cropWidth)/2,this.cropY=0):(this.cropWidth=this.image.width,this.cropHeight=this.cropWidth/i,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(t){if(!this.image)return;let i=this.image.width/this.image.height,n=this.cropX+this.cropWidth/2,r=this.cropY+this.cropHeight/2;t>i?(this.cropWidth=Math.min(this.image.width,this.cropHeight*t),this.cropHeight=this.cropWidth/t):(this.cropHeight=Math.min(this.image.height,this.cropWidth/t),this.cropWidth=this.cropHeight*t),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,r-this.cropHeight/2))}fitToCanvas(){if(!this.image||!this.canvas)return;let t=this.canvas.width/this.cropWidth,i=this.canvas.height/this.cropHeight;this.scale=Math.min(t,i)*.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 t=this.panX,i=this.panY,n=this.cropWidth*this.scale,r=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(t,i,n,r),this.ctx.strokeStyle="#ffffff",this.ctx.lineWidth=2,this.ctx.strokeRect(t,i,n,r),this.ctx.fillStyle="#ffffff";let a=8;[[t,i],[t+n-a,i],[t,i+r-a],[t+n-a,i+r-a]].forEach(([o,c])=>{var l;(l=this.ctx)==null||l.fillRect(o,c,a,a)})}updatePreview(){if(!this.modal||!this.image)return;let t=this.modal.querySelector(".asset-crop-preview-canvas");if(!t)return;let i=t.getContext("2d");if(!i)return;let n=150;t.width=n,t.height=n;let r=n/this.cropWidth,a=n/this.cropHeight,s=Math.min(r,a),o=this.cropWidth*s,c=this.cropHeight*s,l=(n-o)/2,d=(n-c)/2;i.drawImage(this.image,this.cropX,this.cropY,this.cropWidth,this.cropHeight,l,d,o,c)}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 t=this.modal.querySelector(".asset-crop-zoom-slider");t==null||t.addEventListener("input",n=>{let r=parseFloat(n.target.value);this.setZoom(r)});let i=this.modal.querySelector(".asset-crop-aspect-select");i==null||i.addEventListener("change",n=>{let r=n.target.value;this.setAspectRatio(r)}),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(t){this.isDragging=!0,this.dragStartX=t.clientX,this.dragStartY=t.clientY,this.lastPanX=this.panX,this.lastPanY=this.panY,this.canvas.style.cursor="grabbing"}handleMouseMove(t){if(!this.isDragging)return;let i=t.clientX-this.dragStartX,n=t.clientY-this.dragStartY;this.panX=this.lastPanX+i,this.panY=this.lastPanY+n,this.constrainPan(),this.render()}handleMouseUp(){this.isDragging=!1,this.canvas.style.cursor="grab"}handleWheel(t){t.preventDefault();let i=t.deltaY>0?.9:1.1;this.setZoom(this.scale*i)}handleTouchStart(t){t.touches.length===1&&(this.isDragging=!0,this.dragStartX=t.touches[0].clientX,this.dragStartY=t.touches[0].clientY,this.lastPanX=this.panX,this.lastPanY=this.panY)}handleTouchMove(t){if(!this.isDragging||t.touches.length!==1)return;t.preventDefault();let i=t.touches[0].clientX-this.dragStartX,n=t.touches[0].clientY-this.dragStartY;this.panX=this.lastPanX+i,this.panY=this.lastPanY+n,this.constrainPan(),this.render()}handleTouchEnd(){this.isDragging=!1}setZoom(t){this.scale=Math.max(.1,Math.min(3,t)),this.updateZoomUI(),this.constrainPan(),this.render()}setAspectRatio(t){let i;switch(t){case"1:1":i=1;break;case"4:3":i=4/3;break;case"16:9":i=16/9;break;case"3:2":i=3/2;break;default:i=void 0}i&&this.applyAspectRatio(i),this.fitToCanvas(),this.render()}updateZoomUI(){if(!this.modal)return;let t=this.modal.querySelector(".asset-crop-zoom-value"),i=this.modal.querySelector(".asset-crop-zoom-slider");t&&(t.textContent=`${this.scale.toFixed(1)}x`),i&&(i.value=this.scale.toString())}constrainPan(){if(!this.canvas)return;let t=this.cropWidth*this.scale,i=this.cropHeight*this.scale;this.panX=Math.max(this.canvas.width-t,Math.min(0,this.panX)),this.panY=Math.max(this.canvas.height-i,Math.min(0,this.panY))}reset(){this.initializeCrop(),this.render()}applyCrop(){var r;if(!this.image||!((r=this.options)!=null&&r.onCrop))return;let t=document.createElement("canvas"),i=t.getContext("2d");if(!i)return;t.width=this.cropWidth,t.height=this.cropHeight,i.drawImage(this.image,this.cropX,this.cropY,this.cropWidth,this.cropHeight,0,0,this.cropWidth,this.cropHeight);let n=t.toDataURL("image/png");this.options.onCrop(n),this.close()}close(){this.modal&&this.modal.parentNode&&this.modal.parentNode.removeChild(this.modal);let t=this.options;this.modal=null,this.canvas=null,this.ctx=null,this.image=null,this.options=null,t!=null&&t.onCancel&&t.onCancel()}};window.openAssetCrop=function(e){new yl().open(e)};var xl=class{constructor(t={}){this.isLandscape=!1;this.autoScale=1;this.userScaleMultiplier=1;this.viewMode="single";this.comparePresets=[ci("playable-portrait"),ci("iphone-14"),ci("ipad-mini")];this.activeCompareId="playable-portrait";this.compareViewports=new Map;this.resizeObserver=null;this.rafFitHandle=null;this.ignoreNextWindowResize=!1;this.frameDragOffsetX=0;this.frameDragOffsetY=0;this.frameDragActive=!1;this.frameDragStartX=0;this.frameDragStartY=0;this.frameDragOriginX=0;this.frameDragOriginY=0;this.consolePanel=null;this.consoleMessages=[];this.isConsoleOpen=!1;this.hasInitialFit=!1;this.isMounted=!1;this.isInitialized=!1;this.gameReady=!1;this.resizeListenersDisabled=!1;this.compareSnapshotTimer=null;this.onWindowResize=t=>{if(this.ignoreNextWindowResize){this.ignoreNextWindowResize=!1;return}this.resizeListenersDisabled||!this.gameReady||this.scheduleFit()};this.onFrameDragMove=t=>{if(!this.frameDragActive)return;let i=t.clientX-this.frameDragStartX,n=t.clientY-this.frameDragStartY;this.frameDragOffsetX=this.frameDragOriginX+i,this.frameDragOffsetY=this.frameDragOriginY+n,this.applyFrameDrag()};this.onFrameDragEnd=()=>{this.frameDragActive&&(this.frameDragActive=!1,window.removeEventListener("pointermove",this.onFrameDragMove),window.removeEventListener("pointerup",this.onFrameDragEnd))};this.options=t,this.currentPreset=ci(t.defaultDevice||is.id),this.debugPanel=new Aa,this.container=this.createShell(),this.previewContainer=this.mustQuery(".preview-container"),this.singleStage=this.mustQuery('[data-preview-stage="single"]'),this.compareStage=this.mustQuery('[data-preview-stage="compare"]'),this.frameDragger=this.mustQuery(".frame-dragger"),this.frameWrapper=this.mustQuery(".frame-wrapper"),this.deviceFrame=this.mustQuery(".device-frame"),this.gameContainer=this.mustQuery(".game-container"),this.lastSinglePresetId=this.currentPreset.id,this.consolePanel=this.container.querySelector(".console-panel"),this.debugPanel.initialize(this.container),this.debugPanel.setupDebugEventListeners(),this.applyDeviceFrameStyles(),this.setupCompareViewports(),this.setupConsoleInterceptor(),this.setupObserversAndListeners(),this.setupFrameDragging(),this.setDevice(this.currentPreset.id,{suppressCallback:!0}),this.isInitialized=!0}mount(t=document.body){t.innerHTML="",t.appendChild(this.container),this.isMounted=!0,this.scheduleFit()}destroy(){if(this.disableResizeListeners(),this.resizeObserver){try{this.resizeObserver.disconnect()}catch{}this.resizeObserver=null}window.removeEventListener("resize",this.onWindowResize),this.rafFitHandle&&(cancelAnimationFrame(this.rafFitHandle),this.rafFitHandle=null),this.compareSnapshotTimer&&(window.clearInterval(this.compareSnapshotTimer),this.compareSnapshotTimer=null),this.gameReady=!1}getGameContainer(){return this.gameContainer}getScreen(){let t=this.getEffectivePreset();return{width:t.width,height:t.height}}getEffectivePreset(){var t;return this.isLandscape?{...this.currentPreset,width:this.currentPreset.height,height:this.currentPreset.width,ratio:((t=this.currentPreset.ratio)==null?void 0:t.split(":").reverse().join(":"))||this.currentPreset.ratio}:this.currentPreset}notifyGameLoaded(){this.gameReady=!0,this.enableResizeListeners(),this.scheduleFit(),this.debugPanel.refresh()}notifyGameDestroyed(){this.gameReady=!1,this.disableResizeListeners()}disableResizeListeners(){this.resizeListenersDisabled=!0,this.rafFitHandle&&(cancelAnimationFrame(this.rafFitHandle),this.rafFitHandle=null)}enableResizeListeners(){this.resizeListenersDisabled=!1}refresh(){this.options.onRefresh?this.options.onRefresh():window.location.reload()}setDevice(t,i={}){var r,a;let n=this.autoScale*this.userScaleMultiplier;this.isLandscape=!1,this.currentPreset=ci(t),this.viewMode==="single"&&(this.lastSinglePresetId=this.currentPreset.id),this.applyPresetDimensions(),this.fitToScreen({keepVisibleScale:n}),i.suppressCallback||(a=(r=this.options).onDeviceChange)==null||a.call(r,this.getEffectivePreset()),this.emitScreenChange()}createShell(){var i;let t=document.createElement("div");return t.className="preview-shell",t.innerHTML=`
|
|
1185
|
+
<div class="preview-toolbar">
|
|
1186
|
+
<div class="preview-toolbar-left">
|
|
1187
|
+
<span class="preview-logo">PREVIEWER</span>
|
|
1188
|
+
</div>
|
|
1189
|
+
|
|
1190
|
+
<div class="preview-toolbar-center">
|
|
1191
|
+
<div class="device-selector-wrapper">
|
|
1192
|
+
<select class="device-dropdown" id="device-select">
|
|
1193
|
+
${Pc.map(n=>`
|
|
1194
|
+
<optgroup label="${n.label}">
|
|
1195
|
+
${n.devices.map(r=>`
|
|
1196
|
+
<option value="${r.id}" ${r.id===this.currentPreset.id?"selected":""}>
|
|
1197
|
+
${r.label} (${r.width}\xD7${r.height})
|
|
1198
|
+
</option>
|
|
1199
|
+
`).join("")}
|
|
1200
|
+
</optgroup>
|
|
1201
|
+
`).join("")}
|
|
1202
|
+
</select>
|
|
1203
|
+
</div>
|
|
1204
|
+
|
|
1205
|
+
<div class="view-toggle" role="group" aria-label="Preview mode">
|
|
1206
|
+
<button class="view-toggle-btn active" data-view-toggle="single" type="button">Single</button>
|
|
1207
|
+
<button class="view-toggle-btn" data-view-toggle="compare" type="button">Compare 3</button>
|
|
1208
|
+
</div>
|
|
1209
|
+
|
|
1210
|
+
<button class="preview-btn icon-btn" id="rotate-btn" title="Rotate">
|
|
1211
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
1212
|
+
<path d="M21 12a9 9 0 11-9-9c2.52 0 4.93 1 6.74 2.74L21 8"/>
|
|
1213
|
+
<path d="M21 3v5h-5"/>
|
|
1214
|
+
</svg>
|
|
1215
|
+
</button>
|
|
1216
|
+
|
|
1217
|
+
<div class="toolbar-divider"></div>
|
|
1218
|
+
|
|
1219
|
+
<button class="preview-btn icon-btn" id="zoom-out-btn" title="Zoom Out">
|
|
1220
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
1221
|
+
<line x1="5" y1="12" x2="19" y2="12"></line>
|
|
1222
|
+
</svg>
|
|
1223
|
+
</button>
|
|
1224
|
+
|
|
1225
|
+
<span class="zoom-label" id="zoom-label">100%</span>
|
|
1226
|
+
|
|
1227
|
+
<button class="preview-btn icon-btn" id="zoom-in-btn" title="Zoom In">
|
|
1228
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
1229
|
+
<line x1="12" y1="5" x2="12" y2="19"></line>
|
|
1230
|
+
<line x1="5" y1="12" x2="19" y2="12"></line>
|
|
1231
|
+
</svg>
|
|
1232
|
+
</button>
|
|
1233
|
+
</div>
|
|
1234
|
+
|
|
1235
|
+
<div class="preview-toolbar-right">
|
|
1236
|
+
<button class="preview-btn" id="refresh-btn">Restart</button>
|
|
1237
|
+
<button class="preview-btn debug-toggle" id="debug-toggle">
|
|
1238
|
+
Scene Edit Panel <span class="debug-toggle-badge" id="debug-badge"></span>
|
|
1239
|
+
</button>
|
|
1240
|
+
<button class="preview-btn console-toggle" id="console-toggle">
|
|
1241
|
+
Console <span class="console-badge" id="console-badge">0</span>
|
|
1242
|
+
</button>
|
|
1243
|
+
</div>
|
|
1244
|
+
</div>
|
|
1245
|
+
|
|
1246
|
+
<div class="preview-main">
|
|
1247
|
+
<div class="preview-container">
|
|
1248
|
+
<div class="preview-stage" data-preview-stage="single">
|
|
1249
|
+
<div class="frame-dragger">
|
|
1250
|
+
<div class="frame-wrapper">
|
|
1251
|
+
<div class="device-frame">
|
|
1252
|
+
<div class="game-container"></div>
|
|
1253
|
+
</div>
|
|
1254
|
+
</div>
|
|
1255
|
+
</div>
|
|
1256
|
+
</div>
|
|
1257
|
+
|
|
1258
|
+
<div class="preview-stage hidden" data-preview-stage="compare">
|
|
1259
|
+
<div class="compare-grid" data-compare-grid>
|
|
1260
|
+
${this.comparePresets.map(n=>`
|
|
1261
|
+
<div class="compare-viewport" data-viewport="${n.id}">
|
|
1262
|
+
<div class="compare-header">
|
|
1263
|
+
<div class="compare-title">
|
|
1264
|
+
<span class="compare-title-text">${n.label}</span>
|
|
1265
|
+
<span class="compare-meta">${n.ratio} | ${n.width}x${n.height}</span>
|
|
1266
|
+
</div>
|
|
1267
|
+
<button class="compare-focus" data-compare-focus type="button">Focus</button>
|
|
1268
|
+
</div>
|
|
1269
|
+
<div class="compare-body">
|
|
1270
|
+
<div class="compare-slot" data-compare-slot></div>
|
|
1271
|
+
<div class="compare-ghost" data-compare-ghost>
|
|
1272
|
+
<div class="frame-wrapper" data-compare-wrapper>
|
|
1273
|
+
<div class="device-frame" data-compare-frame>
|
|
1274
|
+
<canvas class="snapshot-canvas" data-compare-snapshot></canvas>
|
|
1275
|
+
</div>
|
|
1276
|
+
</div>
|
|
1277
|
+
</div>
|
|
1278
|
+
<div class="compare-overlay" data-compare-overlay>Click to focus</div>
|
|
1279
|
+
</div>
|
|
1280
|
+
</div>
|
|
1281
|
+
`).join("")}
|
|
1282
|
+
</div>
|
|
1283
|
+
</div>
|
|
1284
|
+
</div>
|
|
1285
|
+
|
|
1286
|
+
${((i=this.debugPanel)==null?void 0:i.getDebugOverlayHTML())||""}
|
|
1287
|
+
|
|
1288
|
+
<div class="console-panel closed">
|
|
1289
|
+
<div class="console-header">
|
|
1290
|
+
<span class="console-title">Debug Console</span>
|
|
1291
|
+
<div class="console-actions">
|
|
1292
|
+
<button class="console-action-btn" id="console-clear">Clear</button>
|
|
1293
|
+
<button class="console-action-btn" id="console-close">Close</button>
|
|
1294
|
+
</div>
|
|
1295
|
+
</div>
|
|
1296
|
+
<div class="console-messages" id="console-messages"></div>
|
|
1297
|
+
</div>
|
|
1298
|
+
</div>
|
|
1299
|
+
`,this.setupEventListeners(t),t}setupEventListeners(t){var r,a,s,o,c,l,d;let i=t.querySelector("#device-select");i==null||i.addEventListener("change",u=>{if(this.viewMode==="compare")return;let p=u.target.value;this.setDevice(p)}),Array.from(t.querySelectorAll("[data-view-toggle]")).forEach(u=>{u.addEventListener("click",()=>{let p=u.dataset.viewToggle;p&&this.setViewMode(p)})}),(r=t.querySelector("#rotate-btn"))==null||r.addEventListener("click",()=>this.toggleRotation()),(a=t.querySelector("#zoom-in-btn"))==null||a.addEventListener("click",()=>this.adjustUserZoom(.1)),(s=t.querySelector("#zoom-out-btn"))==null||s.addEventListener("click",()=>this.adjustUserZoom(-.1)),(o=t.querySelector("#refresh-btn"))==null||o.addEventListener("click",()=>this.refresh()),(c=t.querySelector("#console-toggle"))==null||c.addEventListener("click",()=>this.toggleConsole()),(l=t.querySelector("#console-close"))==null||l.addEventListener("click",()=>this.toggleConsole(!1)),(d=t.querySelector("#console-clear"))==null||d.addEventListener("click",()=>this.clearConsole())}applyDeviceFrameStyles(){Object.assign(this.frameDragger.style,{display:"flex",justifyContent:"center",alignItems:"center",transform:"translate(0px, 0px)",touchAction:"none"}),Object.assign(this.frameWrapper.style,{display:"flex",justifyContent:"center",alignItems:"center",transformOrigin:"center center",transition:"transform 0.2s cubic-bezier(0.25, 0.46, 0.45, 0.94)",boxShadow:"0 20px 50px rgba(0,0,0,0.5)",borderRadius:"0px",willChange:"transform"}),Object.assign(this.deviceFrame.style,{overflow:"hidden",position:"relative",borderRadius:"0px"}),Object.assign(this.gameContainer.style,{position:"relative",overflow:"hidden",minWidth:"0px",minHeight:"0px"})}setupObserversAndListeners(){this.resizeObserver=new ResizeObserver(()=>{this.resizeListenersDisabled||!this.gameReady||this.scheduleFit()}),this.resizeObserver.observe(this.previewContainer),window.addEventListener("resize",this.onWindowResize,{passive:!0})}scheduleFit(){this.rafFitHandle&&cancelAnimationFrame(this.rafFitHandle),this.rafFitHandle=requestAnimationFrame(()=>{this.rafFitHandle=null,this.fitToScreen()})}applyPresetDimensions(){let t=this.getEffectivePreset(),i=`${t.width}px`,n=`${t.height}px`;this.deviceFrame.style.width=i,this.deviceFrame.style.height=n,this.gameContainer.style.width=i,this.gameContainer.style.height=n,this.gameContainer.style.maxWidth=i,this.gameContainer.style.maxHeight=n,this.gameContainer.style.minWidth=i,this.gameContainer.style.minHeight=n,this.gameContainer.dataset.screenWidth=String(t.width),this.gameContainer.dataset.screenHeight=String(t.height),this.container.style.setProperty("--preview-screen-width",String(t.width)),this.container.style.setProperty("--preview-screen-height",String(t.height))}fitToScreen(t){if(!this.previewContainer)return;let i=this.getEffectivePreset(),n=this.getFitBounds(),r=Math.max(0,n.width),a=Math.max(0,n.height);if(r<=0||a<=0)return;this.applyPresetDimensions(),this.viewMode==="compare"&&this.applyCompareDimensions();let s=r/i.width,o=a/i.height;if(this.autoScale=Math.max(.01,Math.min(s,o)),!this.hasInitialFit){this.hasInitialFit=!0;let c=.6;this.userScaleMultiplier=c/this.autoScale}t!=null&&t.keepVisibleScale&&t.keepVisibleScale>0&&(this.userScaleMultiplier=t.keepVisibleScale/this.autoScale),this.applyTransform(),this.viewMode==="compare"&&this.fitCompareGhosts(),this.emitScreenChange()}applyTransform(){let t=this.autoScale*this.userScaleMultiplier;this.frameWrapper.style.transform=`scale(${t})`;let i=this.container.querySelector("#zoom-label");i&&(i.textContent=`${Math.round(t*100)}%`)}applyFrameDrag(){this.frameDragger.style.transform=`translate(${this.frameDragOffsetX}px, ${this.frameDragOffsetY}px)`}setupFrameDragging(){this.frameDragger.addEventListener("pointerdown",t=>{this.gameContainer.contains(t.target)||t.button===0&&(t.preventDefault(),this.frameDragActive=!0,this.frameDragStartX=t.clientX,this.frameDragStartY=t.clientY,this.frameDragOriginX=this.frameDragOffsetX,this.frameDragOriginY=this.frameDragOffsetY,window.addEventListener("pointermove",this.onFrameDragMove),window.addEventListener("pointerup",this.onFrameDragEnd))})}adjustUserZoom(t){this.userScaleMultiplier=Math.max(.1,Math.min(6,this.userScaleMultiplier+t)),this.applyTransform(),this.emitScreenChange()}toggleRotation(){var i,n;if(this.viewMode==="compare")return;let t=this.autoScale*this.userScaleMultiplier;this.isLandscape=!this.isLandscape,this.applyPresetDimensions(),this.fitToScreen({keepVisibleScale:t}),(n=(i=this.options).onDeviceChange)==null||n.call(i,this.getEffectivePreset()),this.emitScreenChange()}emitScreenChange(){if(!this.gameReady)return;let t=this.getEffectivePreset(),i={width:t.width,height:t.height,dpr:Math.max(1,Math.floor(window.devicePixelRatio||1)),presetId:t.id,isLandscape:this.isLandscape};if(window.dispatchEvent(new CustomEvent("handler-preview:screen",{detail:i})),this.viewMode==="compare"&&this.refreshCompareSnapshots(),this.isInitialized&&this.isMounted&&this.gameReady){let n=window.gameApp;if(!(n!=null&&n.renderer))return;this.ignoreNextWindowResize=!0,window.dispatchEvent(new Event("resize"))}}safeStringify(t){var n;let i=new WeakSet;try{return JSON.stringify(t,(r,a)=>{if(typeof a=="object"&&a!==null){if(i.has(a))return"[Circular]";i.add(a)}return a},2)}catch{try{if(t&&((n=t.constructor)!=null&&n.name))return`[object ${t.constructor.name}]`}catch{}return String(t)}}setupConsoleInterceptor(){let t=console.log.bind(console),i=console.warn.bind(console),n=console.error.bind(console),r=console.info.bind(console),a=(s,...o)=>{let c=o.map(d=>typeof d=="object"?this.safeStringify(d):String(d)).join(" ");this.consoleMessages.push({type:s,message:c,timestamp:new Date}),this.appendConsoleMessage(this.consoleMessages[this.consoleMessages.length-1]);let l=this.container.querySelector("#console-badge");if(l){let d=this.consoleMessages.filter(u=>u.type==="error").length;l.textContent=d>0?`${d}!`:"0",l.classList.toggle("has-errors",d>0)}};console.log=(...s)=>{t(...s),a("log",...s)},console.warn=(...s)=>{i(...s),a("warn",...s)},console.error=(...s)=>{n(...s),a("error",...s)},console.info=(...s)=>{r(...s),a("info",...s)}}appendConsoleMessage(t){let i=this.container.querySelector("#console-messages");if(!i)return;let n=document.createElement("div");n.className=`console-msg type-${t.type}`;let r=t.timestamp.toLocaleTimeString();n.innerHTML=`<span class="time">${this.escapeHtml(r)}</span> <pre>${this.escapeHtml(t.message)}</pre>`,i.appendChild(n),i.scrollTop=i.scrollHeight}escapeHtml(t){return t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}toggleConsole(t){var i;this.isConsoleOpen=t!=null?t:!this.isConsoleOpen,(i=this.consolePanel)==null||i.classList.toggle("closed",!this.isConsoleOpen)}clearConsole(){this.consoleMessages=[];let t=this.container.querySelector("#console-messages");t&&(t.innerHTML="");let i=this.container.querySelector("#console-badge");i&&(i.textContent="0")}setupCompareViewports(){Array.from(this.container.querySelectorAll("[data-viewport]")).forEach(i=>{let n=i.dataset.viewport;if(!n)return;let r=this.comparePresets.find(u=>u.id===n);if(!r)return;let a=i.querySelector("[data-compare-slot]"),s=i.querySelector("[data-compare-ghost]"),o=i.querySelector("[data-compare-wrapper]"),c=i.querySelector("[data-compare-frame]"),l=i.querySelector("[data-compare-snapshot]"),d=i.querySelector("[data-compare-focus]");!a||!s||!o||!c||(i.addEventListener("click",u=>{let p=u.target;if(p!=null&&p.closest("[data-compare-focus]")){u.preventDefault(),this.activateCompareViewport(n);return}i.classList.contains("is-active")||this.activateCompareViewport(n)}),this.compareViewports.set(n,{preset:r,root:i,slot:a,ghost:s,wrapper:o,frame:c,canvas:l,focus:d}))})}setViewMode(t){if(this.viewMode===t)return;this.viewMode=t,this.container.classList.toggle("compare-mode",t==="compare"),this.singleStage.classList.toggle("hidden",t!=="single"),this.compareStage.classList.toggle("hidden",t!=="compare");let i=this.container.querySelector("#device-select");i&&(i.disabled=t==="compare");let n=this.container.querySelector("#rotate-btn");if(n&&(n.disabled=t==="compare"),this.updateViewToggleUI(),t==="compare"){this.lastSinglePresetId=this.currentPreset.id,this.activateCompareViewport(this.activeCompareId),this.refreshCompareSnapshots(),this.startCompareSnapshots();return}this.stopCompareSnapshots(),this.singleStage.appendChild(this.frameDragger),this.setDevice(this.lastSinglePresetId,{suppressCallback:!0}),this.fitToScreen()}updateViewToggleUI(){Array.from(this.container.querySelectorAll("[data-view-toggle]")).forEach(i=>{i.classList.toggle("active",i.dataset.viewToggle===this.viewMode)})}activateCompareViewport(t){var a,s;let i=this.compareViewports.get(t);if(!i)return;let n=this.autoScale*this.userScaleMultiplier,r=this.activeCompareId;r&&r!==t&&this.captureCompareSnapshot(r),this.activeCompareId=t,this.currentPreset=i.preset,this.isLandscape=!1,i.slot.appendChild(this.frameDragger),this.frameDragOffsetX=0,this.frameDragOffsetY=0,this.applyFrameDrag(),this.compareViewports.forEach((o,c)=>{o.root.classList.toggle("is-active",c===t),o.ghost.classList.toggle("hidden",c===t),o.focus&&(o.focus.textContent=c===t?"Live":"Focus")}),this.applyPresetDimensions(),this.applyCompareDimensions(),this.fitToScreen({keepVisibleScale:n}),(s=(a=this.options).onDeviceChange)==null||s.call(a,this.getEffectivePreset())}applyCompareDimensions(){this.compareViewports.forEach(t=>{let i=t.preset,n=`${i.width}px`,r=`${i.height}px`;t.frame.style.width=n,t.frame.style.height=r,t.canvas&&(t.canvas.width=i.width,t.canvas.height=i.height)})}fitCompareGhosts(){this.compareViewports.forEach(t=>{let i=t.root.querySelector(".compare-body");if(!i)return;let n=Math.max(0,i.clientWidth-24),r=Math.max(0,i.clientHeight-24);if(n<=0||r<=0)return;let a=n/t.preset.width,s=r/t.preset.height,o=Math.max(.01,Math.min(a,s));t.wrapper.style.transform=`scale(${o})`})}captureCompareSnapshot(t){let i=this.compareViewports.get(t);if(!(i!=null&&i.canvas))return;let n=this.gameContainer.querySelector("canvas");if(!n)return;let r=i.canvas.getContext("2d");if(!r)return;let a=i.canvas.width,s=i.canvas.height,o=Math.min(a/n.width,s/n.height),c=n.width*o,l=n.height*o,d=(a-c)/2,u=(s-l)/2;r.clearRect(0,0,a,s),r.drawImage(n,d,u,c,l)}refreshCompareSnapshots(){this.compareViewports.forEach((t,i)=>{i!==this.activeCompareId&&this.captureCompareSnapshot(i)})}startCompareSnapshots(){this.compareSnapshotTimer||(this.compareSnapshotTimer=window.setInterval(()=>{this.viewMode==="compare"&&this.refreshCompareSnapshots()},500))}stopCompareSnapshots(){this.compareSnapshotTimer&&(window.clearInterval(this.compareSnapshotTimer),this.compareSnapshotTimer=null)}getFitBounds(){if(this.viewMode!=="compare")return{width:this.previewContainer.clientWidth-40,height:this.previewContainer.clientHeight-40};let t=this.compareViewports.get(this.activeCompareId),i=t==null?void 0:t.root.querySelector(".compare-body");return i?{width:i.clientWidth-24,height:i.clientHeight-24}:{width:this.previewContainer.clientWidth-40,height:this.previewContainer.clientHeight-40}}mustQuery(t){let i=this.container.querySelector(t);if(!i)throw new Error(`PreviewShell missing element: ${t}`);return i}};function Rh(e={}){let t=new xl(e);return typeof window!="undefined"&&(window.__previewShell=t),t.mount(),t}import{Sprite as ix,Container as Ph}from"pixi.js";var nx=typeof __BUILD_MODE__!="undefined"?__BUILD_MODE__:"undefined",wl=nx;if(typeof window!="undefined")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);t!=null&&t.buildMode&&(wl=t.buildMode,console.log(`[ObjectFactory] Build mode overridden by settings: ${wl}`))}}catch{}var It=class{static async create(t,i,n){var c,l,d,u,p,f,m;console.log(`[ObjectFactory] create() called for: ${t}, __BUILD_MODE__: ${wl}`);let r=(c=i==null?void 0:i.render)==null?void 0:c.asset;if(!r){console.log(`[ObjectFactory] No asset definition for: ${t}, returning empty container`);let h=new Ph;return this.applyTransform(h,i==null?void 0:i.transform),h}let a=(l=i==null?void 0:i.identity)==null?void 0:l.id;console.log(`[ObjectFactory] Calling AssetLoader.load() for: ${t}, configId: ${a}, type: ${r.type}, path: ${r.path}`);let s=await qa.load(t,r,n,a);console.log(`[ObjectFactory] AssetLoader.load() completed for: ${t}, rawAsset type: ${(d=s==null?void 0:s.constructor)==null?void 0:d.name}`);let o;if(r.type==="image")console.log("[ObjectFactory] Creating Sprite from texture:",s,"for object:",t),o=new ix(s),console.log("[ObjectFactory] Created object:",o,"type:",(u=o==null?void 0:o.constructor)==null?void 0:u.name),this.applyTransform(o,i==null?void 0:i.transform);else if(r.type==="json")if(console.log("[ObjectFactory] JSON asset for",t,"rawAsset type:",(p=s==null?void 0:s.constructor)==null?void 0:p.name,s),s&&(((f=s.constructor)==null?void 0:f.name)==="Container"||s instanceof Ph)){console.warn("[ObjectFactory] JSON asset is Container (from cache), reloading JSON directly");let h=[r.path,`/assets/${r.path}`,`assets/${r.path}`,`../assets/${r.path}`],g=!1;for(let b of h)try{let v=await fetch(b);if(v.ok){o=await v.json(),console.log("[ObjectFactory] Reloaded JSON directly from:",b,"type:",(m=o==null?void 0:o.constructor)==null?void 0:m.name),g=!0;break}}catch{continue}g||(console.error("[ObjectFactory] Failed to reload JSON from any path"),o=s)}else o=s;else o=s,o&&typeof o=="object"&&("x"in o||"position"in o)&&this.applyTransform(o,i==null?void 0:i.transform);return o}static applyTransform(t,i){var n,r,a,s;!i||!t||(i.position&&("x"in t&&"y"in t?(t.x=(n=i.position.x)!=null?n:0,t.y=(r=i.position.y)!=null?r:0):"position"in t&&t.position&&t.position.set((a=i.position.x)!=null?a:0,(s=i.position.y)!=null?s:0)),i.scale!==void 0&&"scale"in t&&t.scale&&(typeof t.scale=="object"&&"set"in t.scale?t.scale.set(i.scale):t.scale=i.scale),i.rotation!==void 0&&"rotation"in t&&(t.rotation=i.rotation),i.anchor&&"anchor"in t&&t.anchor&&Array.isArray(i.anchor)&&("set"in t.anchor?t.anchor.set(i.anchor[0],i.anchor[1]):(t.anchor.x=i.anchor[0],t.anchor.y=i.anchor[1])))}};function Ih(e){try{if(e&&typeof e.keys=="function")return Array.from(e.keys())}catch{}return[]}function Mh(e){var t;return e?((t=e.getDisplayObject)==null?void 0:t.call(e))||e.pixiObject||e:null}function rx(e,t){if(!e||!(t!=null&&t.interaction))return;let i=t.interaction,n=i.enabled!==!1&&(i.draggable===!0||i.clickable===!0);e.eventMode=n?"static":"none",e.interactive=n,n&&(e.cursor=i.draggable?"move":"pointer")}function Oh(e,t){var a,s,o,c,l;if(!e||!t)return;let i=t.transform||{};rx(e,t);let n=i.offset||i.position;n&&typeof n.x=="number"&&typeof n.y=="number"&&((a=e.position)!=null&&a.set?e.position.set(n.x,n.y):(typeof e.x=="number"&&(e.x=n.x),typeof e.y=="number"&&(e.y=n.y))),typeof i.scale=="number"&&((s=e.scale)!=null&&s.set?e.scale.set(i.scale):e.scale&&(e.scale.x=i.scale,e.scale.y=i.scale));let r=(c=i.anchor)!=null?c:(o=t.render)==null?void 0:o.anchor;r&&((l=e.anchor)!=null&&l.set)&&typeof r.x=="number"&&typeof r.y=="number"&&e.anchor.set(r.x,r.y)}function Dh(e){if(typeof window=="undefined")return;let t=e==null?void 0:e.objects,i=Ih(t);window.__editableObjectConfigs=t;let n=new Map;i.forEach(r=>n.set(r,[r])),window.__editableObjectInstances=n,window.refreshEditableConfigIndex=()=>Dh(window.__editableConfig),window.getEditableObjectList=()=>{var r;return Ih((r=window.__editableConfig)==null?void 0:r.objects)},window.getEditableObjectConfig=r=>{var a,s,o,c;return(c=(o=(s=(a=window.__editableConfig)==null?void 0:a.objects)==null?void 0:s.get)==null?void 0:o.call(s,r))!=null?c:null},window.getEditableEngineConfig=()=>{let r=window.__editableConfig;if(console.log("[BRIDGE] getEditableEngineConfig called, cfg present:",!!r),!r)return null;if(r.engine&&r.objects instanceof Map){console.log("[BRIDGE] Detected ObjectCentricConfig, flattening...");let a={...r.engine,objects:r.objects,scene:r.scene};return console.log("[BRIDGE] Returned assets:",Object.keys(a.assets||{})),a}return r}}function ax(){if(typeof window=="undefined")return;let e=i=>{let n=String(i||"").trim();return n?/^(data:|blob:|https?:)/.test(n)||n.startsWith("/")?n:`/${n.replace(/^\.\//,"")}`:""},t=async(i,n)=>{var a,s,o;let r=e(n);if(r)try{let[{Assets:c},{AssetTextures:l}]=await Promise.all([import("pixi.js"),import("./AssetTextures-AZY5VKWH.js")]),d=Date.now(),u=/^(data:|blob:)/.test(r)?r:r+(r.includes("?")?`&t=${d}`:`?t=${d}`),p=await c.load(u);if(!p)return;l[i]=p;let f=window.CustomAssets;(a=f==null?void 0:f[i])!=null&&a.texture&&(f[i].texture=p);let m=window.gameObjectManager,h=(s=m==null?void 0:m.get)==null?void 0:s.call(m,i);if(h){let g=((o=h.getDisplayObject)==null?void 0:o.call(h))||h.pixiObject||h.pixi||h;if(g!=null&&g.texture)g.texture=p;else if(g!=null&&g.children){let b=g.children.find(v=>v==null?void 0:v.texture);b!=null&&b.texture&&(b.texture=p)}}}catch(c){console.warn("[LIVE-EDIT] Failed to reload Pixi texture for",i,c)}};window.applyLiveEditOverrides=i=>{try{let n=Ya();Array.isArray(n)&&n.length&&(window.__editableConfig=i,Wa(n,{silent:!0,persist:!1}))}catch{}},window.applyEngineOverrides=i=>{try{let n=Ya();Array.isArray(n)&&n.length&&(window.__editableConfig=i,Wa(n,{silent:!0,persist:!1}))}catch{}},window.applyEditableEngineConfig=i=>{let n=window.__editableConfig;if(n!=null&&n.engine){if(i.runtime)for(let[r,a]of Object.entries(i.runtime))et({path:`runtime.${r}`,value:a},{silent:!0,persist:!0});if(i.assets)for(let[r,a]of Object.entries(i.assets))et({path:`assets.${r}`,value:a},{silent:!0,persist:!0}),typeof a=="string"&&t(r,a);if(i.splash)for(let[r,a]of Object.entries(i.splash))et({path:`splash.${r}`,value:a},{silent:!0,persist:!0});i.runtime&&Object.assign(n.engine.runtime,i.runtime),i.assets&&Object.assign(n.engine.assets,i.assets),i.splash&&Object.assign(n.engine.splash,i.splash)}}}function _l(e){let{getConfig:t,gameObjectManager:i,onObjectConfigApplied:n}=e;i&&(i.onObjectRebuildRequired=async(a,s)=>{console.log(`[LIVE-EDIT] \u{1F3D7}\uFE0F Rebuilding object ${a} due to type change...`);let o=i.get(a),c=o==null?void 0:o.pixiObject,l=c==null?void 0:c.parent,d=l==null?void 0:l.children.indexOf(c);o?i.remove(a):c&&c.destroy();let u=window.gameApp,p=await It.create(a,s,u);l&&(d!==void 0&&d!==-1?l.addChildAt(p,d):l.addChild(p));let f=i.create(a,p);return console.log(`[LIVE-EDIT] \u2705 Rebuild complete for ${a}`),f}),typeof window!="undefined"&&(ax(),window.applyEditableObjectConfig=(a,s)=>{var o,c,l;console.log("[LIVE-EDIT] \u{1F504} applyEditableObjectConfig called for:",a);try{let d=window.__editableConfig;(o=d==null?void 0:d.objects)!=null&&o.set&&(d.objects.set(a,s),console.log("[LIVE-EDIT] \u2705 Updated config in __editableConfig"));let u=(c=i==null?void 0:i.get)==null?void 0:c.call(i,a);if(console.log("[LIVE-EDIT] gameObject found?",!!u),u&&(console.log("[LIVE-EDIT] gameObject type:",(l=u.constructor)==null?void 0:l.name),console.log("[LIVE-EDIT] has updateConfig?",typeof u.updateConfig=="function"),console.log("[LIVE-EDIT] has onConfigUpdate?",typeof u.onConfigUpdate=="function")),u&&typeof u.updateConfig=="function")console.log("[LIVE-EDIT] \u2705 Calling updateConfig()"),u.updateConfig(s);else if(u&&typeof u.onConfigUpdate=="function")console.log("[LIVE-EDIT] \u2705 Calling onConfigUpdate()"),u.onConfigUpdate();else{console.log("[LIVE-EDIT] \u26A0\uFE0F No updateConfig or onConfigUpdate, applying transform directly");let p=Mh(u);Oh(p,s)}}catch(d){console.error("[LIVE-EDIT] \u274C Error in applyEditableObjectConfig:",d)}});let r={async applyObjectConfig(a,s){var d,u;console.log("[BRIDGE] \u{1F504} applyObjectConfig called for:",a);let o=t();(d=o==null?void 0:o.objects)!=null&&d.set&&(o.objects.set(a,s),console.log("[BRIDGE] \u2705 Updated config"));let c=(u=i==null?void 0:i.get)==null?void 0:u.call(i,a);if(console.log("[BRIDGE] gameObject found?",!!c),c&&(console.log("[BRIDGE] has updateConfig?",typeof c.updateConfig=="function"),console.log("[BRIDGE] has onConfigUpdate?",typeof c.onConfigUpdate=="function")),c&&typeof c.updateConfig=="function")console.log("[BRIDGE] \u2705 Calling updateConfig()"),c.updateConfig(s);else if(c&&typeof c.onConfigUpdate=="function")console.log("[BRIDGE] \u2705 Calling onConfigUpdate()"),c.onConfigUpdate();else{console.log("[BRIDGE] \u26A0\uFE0F Applying transform directly");let p=Mh(c);Oh(p,s)}let l=[a];n==null||n(a,s,l)},rebuildIndexes(){let a=t();typeof window!="undefined"&&(window.__editableConfig=a,Dh(a))}};return r.rebuildIndexes(),r}import sx from"lottie-web";Cl(Lc);typeof window!="undefined"&&!window.lottie&&(window.lottie=sx);var Hi=null,ox=async()=>{if(!Hi){let e=typeof window!="undefined"?window.INLINE_ASSETS:null,t=(e==null?void 0:e["handler.config"])||(e==null?void 0:e["handler.config.json"]);if(t)try{if(t.startsWith("data:")){let n=atob(t.split(",")[1]);Hi=JSON.parse(n)}else Hi=JSON.parse(t);return Hi}catch(n){console.warn("[CONFIG] Failed to parse inline handler.config.json:",n)}Hi=await(await fetch("./handler.config.json")).json()}return Hi},kl,Hn,Bh,Ui,Sl,Al;function q_(e){kl=e.initGame,Hn=e.CustomAssets,Bh=e.updateScreenState,Ui=e.globalResponsiveMultipliers,Sl=e.layout,Al=e.clearResponsiveElements}var Ca="web_embed",Nn="https://example.com",zh={profile_id:Ca},Mt=null,Ve=null,El={width:0,height:0},lx=!0,G_=async()=>{var c,l,d,u;document.title="Handler Pixi Game";let e=await ox();zh={...e.ids||{},profile_id:Ca},Nn=e.destination_url||((l=(c=e.export_profiles)==null?void 0:c[Ca])==null?void 0:l.destination_url)||Nn,pt.init({ids:zh,profile:Ca,destinationUrl:Nn});let t=pt.getRoot();if(typeof __PREVIEW_SHELL__!="undefined"&&__PREVIEW_SHELL__){console.log("[BOOTSTRAP] Initializing Preview Shell..."),Ve=Rh({onDeviceChange:f=>{console.log(`[PREVIEW] Device switched to ${f.width}x${f.height}, restarting game...`),jh()},onRefresh:jh});let p=Ve.getGameContainer();p&&(t=p),window.addEventListener("handler-preview:screen",f=>{var v,y,x,w,T,C,S,L,M,_,E;let m=window.gameApp,h=window.gameObjectManager,{width:g,height:b}=f.detail;if(El.width=g,El.height=b,Bh(g,b),!(!m||!m.renderer)){h&&s(m,h);try{m.renderer.resize(g,b);let A=m.view;A&&(A.style.width="100%",A.style.height="100%",A.style.display="block")}catch(A){console.warn("[SCREEN] Error resizing renderer:",A);return}if(i&&h&&Sl)try{let A=(v=window.__mainContainer)!=null?v:m.stage,P=(S=(C=(w=window.__tutorialLabel)!=null?w:(x=(y=h.get("label_1"))==null?void 0:y.getDisplayObject)==null?void 0:x.call(y))!=null?C:(T=h.get("label_1"))==null?void 0:T.pixiObject)!=null?S:h.get("label_1"),I=h.get("background_1"),k=(E=(_=(M=window.__background)!=null?M:(L=I==null?void 0:I.getDisplayObject)==null?void 0:L.call(I))!=null?_:I==null?void 0:I.pixiObject)!=null?E:I;if(A){let D=A===m.stage;Sl({mainContainer:A,label:P,background:k,backgroundTexture:(k==null?void 0:k.texture)||null,app:m},i,0,El,h,{skipMainContainerTransform:D})}}catch(A){console.warn("[SCREEN] Error in layout:",A)}}})}let i=await ar("scene.main");window.__editableConfig=i,window.__editableConfigBaseline||(window.__editableConfigBaseline=Va(i),console.log("[BOOTSTRAP] Frozen config baseline for persistence")),(u=(d=i.engine.runtime)==null?void 0:d.layout)!=null&&u.design_width_portrait||(console.warn("[BOOTSTRAP] Config layout missing, retrying..."),await new Promise(p=>setTimeout(p,100)),i=await ar("scene.main"));let n=await kl(t,i,Nn,Ve);Mt=n.app;let r=n.gameObjectManager;window.gameApp=Mt,window.gameObjectManager=r;try{window.__liveEditBridge=_l({getConfig:()=>window.__editableConfig,gameObjectManager:r,assets:Hn})}catch(p){console.warn("[BOOTSTRAP] Failed to initialize live-edit bridge",p)}Ve&&Ve.notifyGameLoaded();let a=window.__debugScale;a&&typeof a=="number"&&(Ui.scale=a,console.log(`[DEBUG] Applied persisted debug scale: ${a}`)),s(Mt,r);function s(p,f){if(lx){console.log("[RESPONSIVE] Skipping global scaling; using config-driven layout");return}if(console.log("[RESPONSIVE] ===== APPLYING GLOBAL RESPONSIVE SCALING ====="),console.log(`[RESPONSIVE] Scale multiplier: ${Ui.scale.toFixed(3)}`),p.stage){let h=function(g,b=0){if(!g||!g.children)return;let v=" ".repeat(b);g.children.forEach((y,x)=>{if(y&&y.zIndex===9999){console.log(`${v}[RESPONSIVE] Skipping debug border (zIndex 9999)`);return}if(y&&y.scale){let w=y.scale.x||1,T=y.scale.y||1;y.__originalScale||(y.__originalScale={x:w,y:T},console.log(`${v}[RESPONSIVE] Stored original scale for child[${x}]: ${w.toFixed(3)}, ${T.toFixed(3)}`));let C=y.__originalScale.x*Ui.scale,S=y.__originalScale.y*Ui.scale;typeof y.scale.set=="function"?y.scale.set(C,S):(y.scale.x=C,y.scale.y=S),console.log(`${v}[RESPONSIVE] Child[${x}] scale: ${w.toFixed(3)}\u2192${y.scale.x.toFixed(3)} (type: ${y.constructor.name})`),h(y,b+1)}else y&&console.log(`${v}[RESPONSIVE] Child[${x}] has no scale (type: ${y.constructor.name})`)})};var m=h;console.log("[RESPONSIVE] Applying scale to PIXI stage children"),h(p.stage)}else console.warn("[RESPONSIVE] No app.stage found!");console.log("[REDDEBUG] Debug border left unscaled (fixed boundaries)"),console.log("[RESPONSIVE] ===== GLOBAL RESPONSIVE SCALING COMPLETE =====")}function o(p){if(p!==void 0){Ui.scale=p,console.log(`[RESPONSIVE] Updated global scale multiplier to: ${p.toFixed(3)}`);let f=window.gameApp,m=window.gameObjectManager;f&&m?(s(f,m),f.renderer&&(f.renderer.render(f.stage),console.log("[RESPONSIVE] Forced PIXI renderer update"))):console.warn(`[RESPONSIVE] No gameApp (${!!f}) or gameObjectManager (${!!m}) found in window for live update`)}}window.updateGlobalResponsiveMultipliers=o,pt.start()},jh=async()=>{var t,i,n,r;console.log("[PREVIEW] Restarting game in 1 seconds...");let e=(t=window.gameObjectManager)==null?void 0:t.get("character_1");if(e){let a=((i=e.getDisplayObject)==null?void 0:i.call(e))||e;a&&a.scale&&console.log(`[CHARACTER] Before restart - Current scale - x: ${((n=a.scale.x)!=null?n:1).toFixed(3)}, y: ${((r=a.scale.y)!=null?r:1).toFixed(3)}`)}if(Ve){Ve.notifyGameDestroyed();try{Al&&Al()}catch(a){console.warn("Failed to clear responsive elements",a)}setTimeout(()=>{console.log("[PREVIEW] Executing restart...");let a=Ve.getGameContainer(),s=window.gameObjectManager;if(s&&typeof s.clear=="function"&&(console.log("[PREVIEW] Clearing old GameObjectManager tickers..."),s.clear()),Mt){try{Mt.destroy(!0,{children:!0,texture:!1})}catch(o){console.warn("[PREVIEW] Destroy warning:",o)}Mt=null}window.gameApp=null,window.gameObjectManager=null,a&&(a.innerHTML="");try{typeof Hn.resetScene=="function"&&Hn.resetScene()}catch(o){console.warn("Asset reset failed",o)}setTimeout(()=>{ar("scene.main").then(o=>{window.__editableConfig=o,window.__editableConfigBaseline||(window.__editableConfigBaseline=Va(o)),kl(a,o,Nn).then(c=>{Mt=c.app,window.gameApp=Mt,window.gameObjectManager=c.gameObjectManager;try{window.__liveEditBridge=_l({getConfig:()=>window.__editableConfig,gameObjectManager:window.gameObjectManager,assets:Hn})}catch(l){console.warn("[BOOTSTRAP] Failed to re-initialize live-edit bridge",l)}Ve&&Ve.notifyGameLoaded(),console.log("[PREVIEW] Game restarted successfully");try{pt.start()}catch{}})})},100)},1e3)}};var Tl="0.3.1",cx=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"]),Gh={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"},Wh=Math.random().toString(36).slice(2),Gi=null,$i={...Gh},Yh="web_embed",Il={},$n,Ll=!1,Un=!1,Gn=!1,Vh=!1,zl=1,Ta=0,Pa=!1,ft=!1,qi="",Wi=Math.floor(window.innerWidth),Yi=Math.floor(window.innerHeight),Ml=Wi>Yi,ht=!1,qn=!1,Fh=!1,Nh=!1,Rl=!1,La=null,Qt=null,Ol=!1,Dl=!1,ka=new Map;function Kh(){if(!Qt)return null;let e=Date.now()-Qt;return!Number.isFinite(e)||e<0?null:e}function Pl(e){if(Ol)return;let t=Kh();t!==null&&(Ol=!0,O("session_time",{duration_ms:t,reason:e}))}function Hh(){if(Gi)return Gi;let e=document.createElement("div");return e.id="handler-root",e.setAttribute("data-handler-root","true"),document.body.appendChild(e),Gi=e,e}function Ra(e){switch(e){case"interaction":return"engagement";case"finish":return"complete";case"install":return"cta_click";default:return e}}function Xh(e,t){return{event_name:e,ts:Date.now(),session_id:Wh,deployment_id:$i.deployment_id,variant_id:$i.variant_id,export_profile_id:$i.profile_id,instance_id:$i.instance_id||"default",env:Yh==="mraid"?"mraid":"web",attribution:$n,payload:t}}function O(e,t){let i=Ra(e),n=Xh(i,t);Za(n,!!Il.analytics),or(i,n),i!==e&&or(e,n)}function Wn(){La&&(La(Wi,Yi),La=null)}function Vi(e){zl=e,O("volume",e)}function Ki(e){e&&(Vh=!0),!Gn&&(Gn=!0,O("pause"),Vi(0))}function Yn(e){!e&&Vh||Gn&&(Gn=!1,O("resume"),Vi(zl))}function Ot(e,t){Wi=Math.floor(e||window.innerWidth),Yi=Math.floor(t||window.innerHeight),Ml=Wi>Yi,O("resize",{width:Wi,height:Yi})}function dx(){if(wc())try{let e=mraid.getMaxSize();Ot(e.width,e.height);let t=()=>{mraid.isViewable()&&mraid.getState()!=="hidden"?Yn():Ki()};if(mraid.addEventListener("viewableChange",t),mraid.addEventListener("stateChange",t),mraid.addEventListener("sizeChange",()=>{let i=mraid.getMaxSize();Ot(i.width,i.height)}),mraid.getAudioVolume){let i=mraid.getAudioVolume();Vi(i?1:0)}if(mraid.addEventListener("audioVolumeChange",i=>{i!==null&&Vi(i>0?1:0)}),mraid.addEventListener("error",(i,n)=>{console.warn("mraid error:",i,"action:",n)}),Pa=!0,mraid.isViewable()&&mraid.getState()!=="hidden")ht=!0,O("boot"),O("view"),O("ready"),ft=!0,Wn();else{let i=()=>{ht=!0,O("boot"),O("view"),O("ready"),ft=!0,Wn()};mraid.addEventListener("ready",i)}}catch(e){console.warn("MRAID hook skipped",e)}}function ux(){if(_c())try{let e=dapi.getScreenSize();Ot(e.width,e.height),dapi.addEventListener("viewableChange",i=>{i.isViewable?Yn():Ki()}),dapi.addEventListener("adResized",i=>{let n=dapi.getScreenSize();Ot(i.width||n.width,i.height||n.height)});let t=dapi.getAudioVolume();if(Vi(t?1:0),dapi.addEventListener("audioVolumeChange",i=>Vi(i?1:0)),Pa=!0,dapi.isViewable())ht=!0,O("boot"),O("view"),O("ready"),ft=!0,Wn();else{let i=()=>{ht=!0,O("boot"),O("view"),O("ready"),ft=!0,Wn()};dapi.addEventListener("ready",i)}}catch(e){console.warn("DAPI hook skipped",e)}}function Uh(){let e=()=>{ht||document.visibilityState==="visible"&&(document.readyState==="complete"||document.readyState==="interactive")&&(ht=!0,O("boot"),O("view"),O("ready"),ft=!0,Wn(),qn&&(qn=!1,Ke.start()))};window.addEventListener("resize",()=>Ot()),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"?(Yn(),e()):Ki()}),document.readyState==="complete"||document.readyState==="interactive"?e():window.addEventListener("load",e),Pa=!0}function px(){let e=t=>{typeof TouchEvent!="undefined"&&t instanceof TouchEvent&&(Fh=!0),!(Fh&&t instanceof MouseEvent)&&(Ta+=1,Dl||(Dl=!0,O("first_interaction",{count:Ta})),O("interaction",Ta))};document.addEventListener("mousedown",e),document.addEventListener("touchstart",e)}function $h(e){var n,r,a,s,o,c,l,d,u,p,f,m;let t=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(t==="mraid"&&typeof mraid!="undefined")mraid.open(e||"");else if(t==="dapi"&&typeof dapi!="undefined")dapi.openStoreUrl();else if(li())(a=(r=window.TJ_API)==null?void 0:r.click)==null||a.call(r);else if(Ec())(o=(s=window.FbPlayableAd)==null?void 0:s.onCTAClick)==null||o.call(s);else if(kc())(l=(c=window.ScPlayableAd)==null?void 0:c.onCTAClick)==null||l.call(c);else if(Cc())try{(u=(d=window.smxTracking)==null?void 0:d.redirect)==null||u.call(d)}catch(h){console.warn("Smadex redirect failed",h)}else if(Sc()){let h=window.ExitApi;h&&typeof h.exit=="function"?h.exit(e||qi||""):e&&window.open(e)}else oi()?(p=window.install)==null||p.call(window):Ac()?(f=window.openAppStore)==null||f.call(window):Ja()?(m=parent==null?void 0:parent.postMessage)==null||m.call(parent,"download","*"):e&&window.open(e)}function fx(){let e=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed",t=i=>{if(!i)return;let n=new Image;n.src=i};if(e==="bigabid"){let i=window.BIGABID_BIDTIMEMACROS;if(!i)return;we("view",()=>t(i.mraid_viewable)),we("start",()=>t(i.game_viewable)),we("engagement",()=>t(i.engagement));let n=()=>t(i.complete);we("complete",n),sr("engagement",r=>{var a;((a=r==null?void 0:r.payload)==null?void 0:a.count)>3&&n()}),we("cta_click",()=>t(i.click))}else if(e==="inmobi"){let i=window.INMOBI_DSPMACROS;if(!i)return;we("view",()=>t(i.Ad_Load_Start)),we("start",()=>t(i.Ad_Viewable)),we("engagement",()=>t(i.First_Engagement)),we("complete",()=>t(i.Gameplay_Complete)),we("cta_click",()=>t(i.DSP_Click)),we("start",()=>{[5,10,15,20,25,30].forEach(n=>setTimeout(()=>t(i[`Spent_${n}_Seconds`]),n*1e3))})}}function hx(){if(!li())return;let e=window.TJ_API;e&&e.setPlayableAPI&&e.setPlayableAPI({skipAd:()=>{try{Ke.finish()}catch(t){console.warn("Tapjoy skip failed",t)}}})}function qh(){var t,i,n;let e=window.TJ_API;(t=e==null?void 0:e.objectiveComplete)==null||t.call(e),(i=e==null?void 0:e.playableFinished)==null||i.call(e),(n=e==null?void 0:e.gameplayFinished)==null||n.call(e)}function gx(){oi()&&(window.mintGameStart=()=>{Yn(!0),Ot()},window.mintGameClose=()=>{Ki(!0)})}function mx(){if(!Qa())return;let e=window.NUC;!e||!e.trigger||(Ke.on("cta_click",()=>{var t,i;return(i=(t=e.trigger).convert)==null?void 0:i.call(t,qi)}),Ke.on("complete",()=>{var t,i;return(i=(t=e.trigger).tryAgain)==null?void 0:i.call(t)}))}var Ke={init(e={},t){var i;if(Yh=e.profile||"web_embed",Il=e.consent||{},$i={...Gh,...e.ids||{}},Gi=e.rootEl||Gi,$n=void 0,lc((i=e.telemetry)!=null&&i.endpoint?e.telemetry:null),Qt=null,Ol=!1,Dl=!1,ka.clear(),qi=e.destinationUrl||(/android/i.test(navigator.userAgent)?"https://play.google.com/store":"https://www.apple.com/app-store/"),t&&(La=t),O("init"),document.body.oncontextmenu=()=>!1,Hh(),vx(Gi),Tc(),dx(),ux(),!Pa){if(document.readyState==="complete")Uh();else if(!Nh){Nh=!0;let n=()=>{Uh(),window.removeEventListener("load",n),document.removeEventListener("DOMContentLoaded",n)};window.addEventListener("load",n),document.addEventListener("DOMContentLoaded",n)}}px(),fx(),hx(),gx(),mx(),console.log(`%c @handler/playable-sdk %c v${Tl} `,"background: #007acc; color: #fff; font-size: 14px; padding: 4px 8px; border-top-left-radius: 4px; border-bottom-left-radius: 4px;","background: #e1e4e8; color: #333; font-size: 14px; padding: 4px 8px; border-top-right-radius: 4px; border-bottom-right-radius: 4px;"),ht&&!ft&&(O("boot"),O("view"),O("ready"),qn&&(qn=!1,Ke.start()),ft=!0),ft=ht},getRoot(){return Hh()},get version(){return Tl},get maxWidth(){return Wi},get maxHeight(){return Yi},get isLandscape(){return Ml},get isReady(){return ft},get isStarted(){return Ll},get isPaused(){return Gn},get isFinished(){return Un},get volume(){return zl},get interactions(){return Ta},on(e,t){sr(Ra(e),t)},off(e,t){Xa(Ra(e),t)},start(){var e,t;if(!Ll){if(!ht){qn=!0;return}if(Ll=!0,Qt||(Qt=Date.now()),O("start"),Ot(),oi())Ki(),(e=window.gameReady)==null||e.call(window);else if(li()){let i=window.TJ_API;(t=i==null?void 0:i.setPlayableBuild)==null||t.call(i,{orientation:Ml?"landscape":"portrait",buildID:Tl})}}},finish(){var e,t;Un||(Un=!0,O("complete"),Pl("complete"),oi()?(e=window.gameEnd)==null||e.call(window):Ja()?(t=parent==null?void 0:parent.postMessage)==null||t.call(parent,"complete","*"):li()&&qh())},install(e){if(!Un){Un=!0,li()?(qh(),setTimeout(()=>Ke.install(e),300)):(O("complete"),setTimeout(()=>Ke.install(e),0));return}Rl||(Rl=!0,setTimeout(()=>Rl=!1,500),O("cta_click"),O("conversion"),Pl("cta"),$h(e||qi))},emit(e,t){let i=Ra(e);if(!cx.has(i)&&i!=="resize"&&i!=="volume"&&!i.startsWith("custom."))throw new Error(`Event ${e} must be canonical or namespaced as custom.<mechanic_id>.<event>`);let n=Xh(i,t);Za(n,!!Il.analytics),or(i,n)},gameStart(){Ke.start()},gameEnd(){Ke.finish()},ctaClick(e,t){O("cta_click",{url:e||qi,manual:!0}),(t==null?void 0:t.open)!==!1&&$h(e||qi)},ctaShow(e){O("cta_show",e)},ctaDismiss(e){O("cta_dismiss",e)},getGameTimeMs(){return Kh()},endSession(e="manual"){Pl(e)},setAttribution(e){$n=e},abTest(e,t){if(!e)throw new Error("abTest requires experimentId");if(!Array.isArray(t)||t.length<2)throw new Error("abTest requires at least 2 variants");let i=Math.abs(bx(`${Wh}:${e}`))%t.length,n=t[i];return $n={...$n||{},experiment_id:e},$i.variant_id=n,O("ab_assign",{experiment_id:e,variant_id:n}),n},levelStart(e,t){Qt||(Qt=Date.now()),O("level_start",{level_id:e,...t})},levelComplete(e,t){O("level_complete",{level_id:e,...t})},levelFail(e,t){O("level_fail",{level_id:e,...t})},checkpoint(e,t){O("checkpoint",{checkpoint_id:e,...t})},reward(e,t){O("reward",{reward_id:e,...t})},tutorialStart(e,t){O("tutorial_start",{step_id:e,...t})},tutorialComplete(e,t){O("tutorial_complete",{step_id:e,...t})},tutorialSkip(e,t){O("tutorial_skip",{step_id:e,...t})},timerStart(e){e&&ka.set(e,Date.now())},timerEnd(e,t="custom",i){if(!e)return;let n=ka.get(e);if(!n)return;ka.delete(e);let r=Date.now()-n;if(!(!Number.isFinite(r)||r<0)){if(t==="custom"){O("engagement",{action:"timer",key:e,duration_ms:r,...i});return}O(t,{key:e,duration_ms:r,...i})}},fps(e,t){O("fps",{value:e,...t})},memory(e,t){O("memory",{bytes:e,...t})},assetLoadStart(e,t){O("asset_load_start",{asset_id:e,...t})},assetLoadComplete(e,t){O("asset_load_complete",{asset_id:e,...t})},reportError(e,t,i){O("error",{code:e,message:t,...i})},retry(){var e,t,i;if(oi())(e=window.gameRetry)==null||e.call(window);else if(Qa()){let n=window.NUC;(i=(t=n==null?void 0:n.trigger)==null?void 0:t.tryAgain)==null||i.call(t)}O("engagement",{action:"retry"})},pause(){Ki(!0)},resume(){Yn(!0)},resize(e,t){Ot(e,t)}},pt=Ke;function bx(e){let t=2166136261;for(let i=0;i<e.length;i++)t^=e.charCodeAt(i),t=Math.imul(t,16777619);return t|0}function vx(e){let t=document.createElement("script");t.type="text/javascript",t.textContent=`
|
|
1300
|
+
(function(){
|
|
1301
|
+
var events = ['touchstart','touchend','mousedown','keydown'];
|
|
1302
|
+
function unlock(){
|
|
1303
|
+
if(window.AudioContext && AudioContext.prototype.resume){
|
|
1304
|
+
if(!window.__handler_audio_ctx){
|
|
1305
|
+
window.__handler_audio_ctx = new AudioContext();
|
|
1306
|
+
}
|
|
1307
|
+
if(window.__handler_audio_ctx.state === 'suspended'){
|
|
1308
|
+
window.__handler_audio_ctx.resume();
|
|
1309
|
+
}
|
|
1310
|
+
}
|
|
1311
|
+
events.forEach(function(e){ document.removeEventListener(e, unlock); });
|
|
1312
|
+
}
|
|
1313
|
+
events.forEach(function(e){ document.addEventListener(e, unlock, false); });
|
|
1314
|
+
})();
|
|
1315
|
+
`,e.appendChild(t)}async function jl(e,t={}){let i=new yx;await i.init({resizeTo:e,autoDensity:!0,resolution:window.devicePixelRatio||1,antialias:!0,backgroundAlpha:0});let n=s=>{var u,p,f,m;if(!i.renderer)return;let o=(u=s==null?void 0:s.width)!=null?u:e.clientWidth,c=(p=s==null?void 0:s.height)!=null?p:e.clientHeight,l=o&&o>0?o:(f=window.innerWidth)!=null?f:320,d=c&&c>0?c:(m=window.innerHeight)!=null?m:480;i.renderer.resize(l,d)};e.innerHTML="",e.style.position="relative",e.style.display="flex",e.style.flexDirection="column",e.style.alignItems="stretch",e.style.width="100%",e.style.height="100dvh",e.style.minHeight="100vh",e.style.maxWidth="100%",e.style.maxHeight="100%",e.style.boxSizing="border-box",e.style.overflow="hidden",t.background&&(e.style.background=t.background),e.appendChild(i.canvas),n();let r=document.createElement("div");return r.setAttribute("style",["position:absolute","inset:0","display:flex","flex-direction:column","align-items:center","justify-content:flex-start","gap:12px","pointer-events:none","font-family:Arial,sans-serif","padding:20px 16px","padding-bottom:clamp(24px, 6vh, 96px)","box-sizing:border-box","z-index:2"].join(";")),e.appendChild(r),pt.on("pause",()=>{i.ticker.stop(),document.querySelectorAll("audio").forEach(o=>o.pause())}),pt.on("resume",()=>{i.ticker.start(),document.querySelectorAll("audio").forEach(o=>{o.currentTime>0&&!o.ended&&o.play().catch(()=>{})})}),pt.on("resize",({payload:s})=>{n({width:s==null?void 0:s.width,height:s==null?void 0:s.height})}),window.addEventListener("resize",()=>n()),requestAnimationFrame(()=>n()),new ResizeObserver(s=>{let o=s[0];if(o&&o.contentRect.width>0&&o.contentRect.height>0){let c=Math.round(o.contentRect.width),l=Math.round(o.contentRect.height);if(n({width:c,height:l}),typeof window!="undefined"&&window.gameApp&&window.gameObjectManager){let d={width:c,height:l,dpr:Math.max(1,Math.floor(window.devicePixelRatio||1)),presetId:"auto-resize",isLandscape:c>l};window.dispatchEvent(new CustomEvent("handler-preview:screen",{detail:d}))}}}).observe(e),{app:i,stage:i.stage,overlay:r,applySize:n}}import{BlurFilter as Bl,Ticker as Xi,ColorMatrixFilter as xx}from"pixi.js";var Ia=class{constructor(t){var i,n;this.position=(t==null?void 0:t.position)||(t==null?void 0:t.offset)||{x:0,y:0},this.scale=(i=t==null?void 0:t.scale)!=null?i:1,this.rotation=(n=t==null?void 0:t.rotation)!=null?n:0}update(t){let i=t.position||t.offset;i!==void 0&&(this.position={...i}),t.scale!==void 0&&(this.scale=t.scale),t.rotation!==void 0&&(this.rotation=t.rotation)}syncToPixi(t){t&&(t.position.set(this.position.x,this.position.y),t.scale.set(this.scale),t.rotation=this.rotation)}},Ma=class{constructor(t){var i,n,r,a;this.z_index=(i=t==null?void 0:t.z_index)!=null?i:0,this.alpha=(n=t==null?void 0:t.alpha)!=null?n:1,this.visible=(r=t==null?void 0:t.visible)!=null?r:!0,this.tint=(a=t==null?void 0:t.tint)!=null?a:null}update(t){t.z_index!==void 0&&(this.z_index=t.z_index),t.alpha!==void 0&&(this.alpha=t.alpha),t.visible!==void 0&&(this.visible=t.visible),t.tint!==void 0&&(this.tint=t.tint)}syncToPixi(t,i){if(!t)return;if(t.zIndex=this.z_index,i!=null&&i.startsWith("ui_endgame_")||(t.alpha=this.alpha),t.visible=this.visible,this.tint!==null&&"tint"in t&&(t.tint=this.tint),i&&"texture"in t)try{let{AssetTextures:r}=Fe("handler-playable-sdk/pixi");if(r&&r[i]){let a=r[i];a&&(t.texture=a)}}catch{}}},Oa=class{constructor(t,i,n,r){this._tickerCleanup=null;this.onRebuildRequired=null;this.instanceId=t,this.objectConfig=i,this.pixiObject=n,this._config=r,this.transform=new Ia(r.transform),this.renderer=new Ma(r.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 i;if(!this.pixiObject||!("text"in this.pixiObject))return;let t=(i=this._config)==null?void 0:i.ui;t&&(t.text!==void 0&&this.pixiObject.text!==t.text&&(this.pixiObject.text=t.text),this.pixiObject.style&&(t.fontSize!==void 0&&(this.pixiObject.style.fontSize=t.fontSize),t.color!==void 0&&(this.pixiObject.style.fill=t.color),t.align!==void 0&&(this.pixiObject.style.align=t.align)))}destroy(){this._tickerCleanup&&(this._tickerCleanup(),this._tickerCleanup=null),this._introTicker&&(Xi.shared.remove(this._introTicker),this._introTicker=null),this.pixiObject&&this.pixiObject.parent&&this.pixiObject.parent.removeChild(this.pixiObject)}updateConfig(t){var c,l,d,u,p,f,m,h,g,b,v;let i=(l=(c=this._config)==null?void 0:c.motion)==null?void 0:l.intro,n=(d=t==null?void 0:t.motion)==null?void 0:d.intro;n!=null&&n.enabled&&JSON.stringify(i)!==JSON.stringify(n)&&(this._shouldReplayIntro=!0);let r=(f=(p=(u=this._config)==null?void 0:u.render)==null?void 0:p.asset)==null?void 0:f.type,a=(h=(m=t==null?void 0:t.render)==null?void 0:m.asset)==null?void 0:h.type,s=(b=(g=this._config)==null?void 0:g.ui)==null?void 0:b.renderMode,o=(v=t==null?void 0:t.ui)==null?void 0:v.renderMode;if((r!==a||s!==o)&&(console.log(`[GameObject] Rebuild required for ${this.instanceId}: type changed from ${r}/${s} to ${a}/${o}`),this.onRebuildRequired)){this.onRebuildRequired(this,t);return}this._config=t,t.transform&&this.transform.update(t.transform),t.render&&this.renderer.update(t.render),this.sync()}applyAnchor(){var r,a,s,o;if(!this.pixiObject||!("anchor"in this.pixiObject)||!this.pixiObject.anchor)return;let t=(a=(r=this._config)==null?void 0:r.render)==null?void 0:a.anchor,i=(o=(s=this._config)==null?void 0:s.transform)==null?void 0:o.anchor,n=t&&typeof t=="object"?t:i&&typeof i=="object"?i:null;n&&typeof n.x=="number"&&typeof n.y=="number"&&this.pixiObject.anchor.set(n.x,n.y)}applyEffectsScale(){var a,s,o;if(!((a=this.pixiObject)!=null&&a.scale))return;let t=(s=this._config)==null?void 0:s.effects,i=typeof(t==null?void 0:t.scale_x)=="number"?t.scale_x:1,n=typeof(t==null?void 0:t.scale_y)=="number"?t.scale_y:1;if(i===1&&n===1)return;let r=(o=this.transform.scale)!=null?o:1;typeof this.pixiObject.scale.set=="function"?this.pixiObject.scale.set(r*i,r*n):(this.pixiObject.scale.x=r*i,this.pixiObject.scale.y=r*n)}applyEffects(){var n,r,a,s,o,c,l,d,u;if(!this.pixiObject)return;let t=(n=this._config)==null?void 0:n.effects;if(!t||t.enabled===!1){this.pixiObject.filters=null;return}let i=[];if((r=t.blur)!=null&&r.enabled){let p=new Bl;p.blur=(a=t.blur.strength)!=null?a:4,i.push(p)}if((s=t.shadow)!=null&&s.enabled){let p=t.shadow,f=new Bl;f.blur=(o=p.blur)!=null?o:4,f.blendMode="multiply",i.push(f),(p.offsetX!==0||p.offsetY!==0)&&console.warn("[Effects] Drop shadow offset requires pixi-filters. Install: npm install pixi-filters")}if((c=t.glow)!=null&&c.enabled){let p=t.glow,f=new Bl;if(f.blur=(l=p.blur)!=null?l:8,i.push(f),p.color){let m=new xx,h=typeof p.color=="string"?parseInt(p.color.replace("#",""),16):p.color;m.tint(h),i.push(m)}}(d=t.stroke)!=null&&d.enabled&&console.warn("[Effects] Stroke/outline effect requires pixi-filters. Install: npm install pixi-filters"),(u=t.distortion)!=null&&u.enabled&&console.warn("[Effects] Distortion effect requires pixi-filters or a displacement map. Install: npm install pixi-filters"),this.pixiObject.filters=i.length>0?i:null}applyIntro(){var d,u,p,f,m,h,g;let t=(d=this._config)==null?void 0:d.motion;if(!t||!((u=t.intro)!=null&&u.enabled)||!this.pixiObject)return;let i=t.intro,n=(i.duration||0)/1e3,r=(i.delay||0)/1e3,a=this.transform.position.y,s=this.transform.scale*(((f=(p=this._config)==null?void 0:p.effects)==null?void 0:f.scale_x)||1),o=this.transform.scale*(((h=(m=this._config)==null?void 0:m.effects)==null?void 0:h.scale_y)||1);if(this.pixiObject.alpha=(g=i.startAlpha)!=null?g:0,i.startScale!==void 0&&this.pixiObject.scale.set(s*i.startScale,o*i.startScale),i.startYOffset!==void 0&&(this.pixiObject.y=a+(i.startYOffset||0)),this._introTicker&&Xi.shared.remove(this._introTicker),n<=0&&r<=0){this.pixiObject.alpha=this.renderer.alpha,this.pixiObject.y=this.transform.position.y,this.pixiObject.scale.set(s,o);return}let c=0,l=b=>{var L,M,_,E,A,P;if(c+=b.deltaTime/60,c<r)return;let v=n>0?Math.min(1,(c-r)/n):1,y=1-Math.pow(1-v,3),x=this.renderer.alpha,w=this.transform.scale*(((M=(L=this._config)==null?void 0:L.effects)==null?void 0:M.scale_x)||1),T=this.transform.scale*(((E=(_=this._config)==null?void 0:_.effects)==null?void 0:E.scale_y)||1),C=this.transform.position.y,S=this.transform.position.x;if(this.pixiObject.alpha=((A=i.startAlpha)!=null?A:0)+(x-((P=i.startAlpha)!=null?P:0))*y,i.startScale!==void 0){let I=i.startScale+(1-i.startScale)*y;this.pixiObject.scale.set(w*I,T*I)}i.startYOffset!==void 0&&(this.pixiObject.y=C+i.startYOffset+(C-(C+i.startYOffset))*y),v>=1&&(Xi.shared.remove(l),this._introTicker=null,this.pixiObject.alpha=x,this.pixiObject.x=S,this.pixiObject.y=C,this.pixiObject.scale.set(w,T))};this._introTicker=l,Xi.shared.add(l)}applyMotion(){var r,a,s;let t=(r=this._config)==null?void 0:r.motion,i=t&&t.enabled!==!1,n=JSON.stringify(t);if(!(this._lastMotionStr===n&&this._tickerCleanup)){if(this._lastMotionStr=n,!i){this._tickerCleanup&&(this._tickerCleanup(),this._tickerCleanup=null);return}if(this._tickerCleanup&&this._tickerCleanup(),(a=t.pulse)!=null&&a.enabled||(s=t.swing)!=null&&s.enabled){let o=0,c=l=>{var h,g,b,v,y,x,w,T,C,S,L;o+=l.deltaTime*.05;let d=this.transform.scale,u=d*(((g=(h=this._config)==null?void 0:h.effects)==null?void 0:g.scale_x)||1),p=d*(((v=(b=this._config)==null?void 0:b.effects)==null?void 0:v.scale_y)||1),f=this.transform.position.x,m=this.transform.position.y;if((y=t.pulse)!=null&&y.enabled){let M=(x=t.pulse.intensity)!=null?x:.1,_=(w=t.pulse.speed)!=null?w:1,A=1+Math.sin(o*_)*M;(T=this.pixiObject.scale)!=null&&T.set?this.pixiObject.scale.set(u*A,p*A):this.pixiObject.scale&&(this.pixiObject.scale.x=u*A,this.pixiObject.scale.y=p*A)}if((C=t.swing)!=null&&C.enabled){let M=(S=t.swing.amplitude)!=null?S:10,_=(L=t.swing.speed)!=null?L:1,E=Math.sin(o*_)*M;t.swing.axis==="vertical"?this.pixiObject.y=m+E:t.swing.axis==="both"?(this.pixiObject.x=f+E,this.pixiObject.y=m+E):this.pixiObject.x=f+E}};Xi.shared.add(c),this._tickerCleanup=()=>{var l,d,u,p,f;if(Xi.shared.remove(c),this.pixiObject){let m=this.transform.scale*(((d=(l=this._config)==null?void 0:l.effects)==null?void 0:d.scale_x)||1),h=this.transform.scale*(((p=(u=this._config)==null?void 0:u.effects)==null?void 0:p.scale_y)||1);this.pixiObject.x=this.transform.position.x,this.pixiObject.y=this.transform.position.y,(f=this.pixiObject.scale)!=null&&f.set?this.pixiObject.scale.set(m,h):this.pixiObject.scale&&(this.pixiObject.scale.x=m,this.pixiObject.scale.y=h)}}}}}getComponent(t){return this._config[t]}getPosition(){return{...this.transform.position}}setPosition(t,i){this.transform.position={x:t,y:i},this.transform.syncToPixi(this.pixiObject)}getAlpha(){return this.renderer.alpha}setAlpha(t){this.renderer.alpha=t,this.renderer.syncToPixi(this.pixiObject)}getVisible(){return this.renderer.visible}setVisible(t){this.renderer.visible=t,this.renderer.syncToPixi(this.pixiObject)}},Vn=class{constructor(t){this.objects=new Map;this.onObjectRebuildRequired=null;this.config=t}create(t,i){let n=this.config.objects.get(t);if(!n)throw new Error(`Object config not found: ${t}`);let r=new Oa(t,n.object_config||t,i,n);return this.objects.set(t,r),r.onRebuildRequired=async(a,s)=>{if(this.onObjectRebuildRequired){console.log(`[GameObjectManager] Triggering rebuild for ${t}`);let o=await this.onObjectRebuildRequired(t,s);o&&this.objects.get(t)===o&&console.log(`[GameObjectManager] \u2705 Rebuilt ${t} successfully`)}else console.warn(`[GameObjectManager] Rebuild required for ${t} but no factory provided`),a.updateConfig(s)},r}get(t){return this.objects.get(t)}updateConfig(t){this.config=t;for(let[i,n]of this.objects.entries()){let r=t.objects.get(i);r&&n.updateConfig(r)}}getAll(){return Array.from(this.objects.values())}remove(t){let i=this.objects.get(t);i&&i.destroy(),this.objects.delete(t)}clear(){for(let t of this.objects.values())t.destroy();this.objects.clear()}};var Da={"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 wx(e){let t=Da[e];return t?t.family:(console.warn(`Font ID "${e}" not found in registry, using fallback`),"Arial, sans-serif")}function _x(e){var i;let t=Da[e];return t&&(i=t.weight)!=null?i:"400"}function Ex(e,t){Da[e]=t}function Sx(){return Object.keys(Da)}var Zi=null;function Ax(){return console.log("[LottieOverlay] getLottie called, lottieLib cached?",!!Zi),console.log("[LottieOverlay] window.lottie exists?",typeof window!="undefined"&&!!window.lottie),Zi||(typeof window!="undefined"&&window.lottie?(Zi=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(e=>e.toLowerCase().includes("lottie")):"no window"),Zi=null)),Zi}function Cl(e){Zi=e}function Cx(e,t,i,n){var w,T,C,S,L,M,_,E,A,P,I,k,D;let r=i.objects.get(e);if(!r)return console.warn(`[LottieOverlay] Object config not found: ${e}`),null;let a=((w=r.effects)==null?void 0:w.lottie)||{},s=r.transform||{},o=r.render||{};if(a.enabled===!1||o.visible===!1)return null;let c=n[e];if(!c||typeof c!="object")return console.warn(`[LottieOverlay] Asset data not found or invalid for: ${e}`),null;let l=Ax();if(!l)return console.warn(`[LottieOverlay] lottie-web is not available. Cannot play animation: ${e}`),null;let d=(T=a.width)!=null?T:300,u=(C=a.height)!=null?C:300,p=(S=s.scale)!=null?S:1,f=(M=(L=s.position)==null?void 0:L.x)!=null?M:0,m=(E=(_=s.position)==null?void 0:_.y)!=null?E:0,h=(A=s.rotation)!=null?A:0,g=(P=o.z_index)!=null?P:100,b=(I=o.alpha)!=null?I:1,v=document.createElement("div");v.style.cssText=`
|
|
1316
|
+
position: absolute;
|
|
1317
|
+
top: calc(50% + ${m}px);
|
|
1318
|
+
left: calc(50% + ${f}px);
|
|
1319
|
+
transform: translate(-50%, -50%) scale(${p}) rotate(${h}deg);
|
|
1320
|
+
width: ${d}px;
|
|
1321
|
+
height: ${u}px;
|
|
1322
|
+
pointer-events: none;
|
|
1323
|
+
z-index: ${g};
|
|
1324
|
+
opacity: ${b};
|
|
1325
|
+
`,t.appendChild(v);let y=l.loadAnimation({container:v,renderer:a.renderer||"svg",loop:(k=a.loop)!=null?k:!1,autoplay:(D=a.autoplay)!=null?D:!0,animationData:c});a.speed!==void 0&&y.setSpeed(a.speed);let x=()=>{y.destroy(),v.parentNode&&v.parentNode.removeChild(v)};return a.loop||y.addEventListener("complete",x),{animation:y,cleanup:x}}var Fl=class{constructor(t,i,n){this.systems=[];this.totalTime=0;this.root=t,this.config=i,this.destinationUrl=n}async init(t){let{app:i,stage:n}=await jl(this.root,{background:t.background_color,text:t.text_color,primary:t.cta_background,cta_text:t.cta_text});this.app=i,this.stage=n,this.gameObjectManager=new Vn(this.config),this.stage.eventMode="passive",this.stage.interactive=!1,this.stage.interactiveChildren=!0,this.stage.sortableChildren=!0;let r={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(r),a.init&&await a.init();return{app:this.app,gameObjectManager:this.gameObjectManager}}registerSystems(t){this.systems.push(...t)}async start(){for(let t of this.systems)t.onStart&&await t.onStart();this.app.ticker.add(this.update.bind(this)),window.addEventListener("handler-preview:screen",t=>{let{width:i,height:n}=t.detail;this.resize(i,n)})}update(t){let i=t.deltaTime/60;this.totalTime+=i;for(let n of this.systems)n.update&&n.update(i,this.totalTime)}resize(t,i){for(let n of this.systems)n.onResize&&n.onResize(t,i)}updateConfig(t){this.config=t;for(let i of this.systems)i.context.config=t,i.onConfigUpdate&&i.onConfigUpdate(t)}destroy(){for(let t of this.systems)t.onDestroy&&t.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(t){let i=this.systems.find(n=>n instanceof t);if(!i)throw new Error(`System ${t.name} not found!`);return i}};var Kn=class{setContext(t){this.context=t}};var Xn=class{constructor(){this.config=null}init(t){this.config=t}get(t){if(!this.config)throw new Error("RuntimeObjectRegistry not initialized. Call init() first.");return this.config.objects.get(t)}getAllIds(){if(!this.config)throw new Error("RuntimeObjectRegistry not initialized. Call init() first.");return Array.from(this.config.objects.keys())}has(t){return this.config?this.config.objects.has(t):!1}};import*as Zh from"pixi.js";var kx=Zh;typeof window!="undefined"&&(window.__basePixi=Zh);import{Sprite as Tx,Text as Lx,TextStyle as Rx,Texture as Jh}from"pixi.js";var Qh=e=>e*Math.PI/180;function Px(e,t){var s,o,c,l,d;let i=t.ui;if(!(i!=null&&i.text))return null;let n="#ffffff";(s=t.render)!=null&&s.tint&&(n=t.render.tint);let r=new Rx({fontFamily:(o=i.font)!=null?o:"Arial",fontSize:(c=i.fontSize)!=null?c:16,fill:n,align:(l=i.align)!=null?l:"center",letterSpacing:(d=i.letterSpacing)!=null?d:0}),a=new Lx({text:i.text,style:r});return a.label=e,a}function Ix(e){var d,u,p,f,m,h,g,b,v,y;let{stage:t,mainContainer:i,activeConfig:n,gameObjectManager:r,allowList:a,denyList:s}=e,o={},c={},l={};i.sortableChildren=!0;for(let[x,w]of n.objects.entries()){if(s!=null&&s.has(x)||a&&!a.has(x)||(w==null?void 0:w.enabled)===!1)continue;let T=(u=(d=w==null?void 0:w.render)==null?void 0:d.asset)==null?void 0:u.path,C=(f=(p=w==null?void 0:w.render)==null?void 0:p.asset)==null?void 0:f.type,S=!!(T&&C==="image"),L=!!((m=w==null?void 0:w.ui)!=null&&m.text),M=L?(h=w==null?void 0:w.ui)==null?void 0:h.renderMode:void 0,_;if(M==="png"&&S?_="png":M==="text"&&L?_="text":S?_="png":L?_="text":_="skip",_!=="skip"){if(_==="text"){let E=Px(x,w);if(!E)continue;let A=w.render;E.alpha=typeof(A==null?void 0:A.alpha)=="number"?A.alpha:1,E.visible=(A==null?void 0:A.visible)!==!1,E.zIndex=typeof(A==null?void 0:A.z_index)=="number"?A.z_index:0,A!=null&&A.anchor&&typeof A.anchor.x=="number"&&typeof A.anchor.y=="number"?E.anchor.set(A.anchor.x,A.anchor.y):E.anchor.set(.5,.5);let P=w.transform,I=(P==null?void 0:P.position)||(P==null?void 0:P.offset);I&&E.position.set((g=I.x)!=null?g:0,(b=I.y)!=null?b:0);let k=typeof(P==null?void 0:P.scale)=="number"?P.scale:1;E.scale.set(k,k);let D=typeof(P==null?void 0:P.rotation)=="number"?P.rotation:0;E.rotation=Qh(D),E.parent||i.addChild(E);try{r.create(x,E)}catch{}o[x]=E,l[x]=E}else if(_==="png"){let E=Ne[x]||(typeof Jh!="undefined"?Jh.EMPTY:void 0),A=new Tx(E);A.label=x;let P=w.render;A.alpha=typeof(P==null?void 0:P.alpha)=="number"?P.alpha:1,A.visible=(P==null?void 0:P.visible)!==!1,A.zIndex=typeof(P==null?void 0:P.z_index)=="number"?P.z_index:0,P!=null&&P.anchor&&typeof P.anchor.x=="number"&&typeof P.anchor.y=="number"&&A.anchor.set(P.anchor.x,P.anchor.y);let I=w.transform,k=(I==null?void 0:I.position)||(I==null?void 0:I.offset);k&&A.position.set((v=k.x)!=null?v:0,(y=k.y)!=null?y:0);let D=typeof(I==null?void 0:I.scale)=="number"?I.scale:1;A.scale.set(D,D);let j=typeof(I==null?void 0:I.rotation)=="number"?I.rotation:0;A.rotation=Qh(j),A.parent||i.addChild(A);try{r.create(x,A)}catch{}o[x]=A,c[x]=A}}}return i.parent||t.addChild(i),{objects:o,sprites:c,texts:l}}var Nl=class{constructor(){this.instanceCache=new Map;this.readyPromise=null;this.app=null;this.registry=new Xn}init(t,i){this.registry.init(t),this.app=i}updateConfig(t){this.registry.init(t),this.instanceCache.clear(),this.readyPromise=null}async ready(){this.readyPromise&&await this.readyPromise;let i=this.registry.getAllIds().filter(r=>!this.instanceCache.has(r));if(i.length===0)return;let n=async r=>{r.length&&(console.log("[Assets] Loading objects:",r),await Promise.all(r.map(async a=>{var o;let s=this.registry.get(a);if(!s){console.warn("[Assets] No config found for object:",a);return}try{let c=await It.create(a,s,this.app);this.instanceCache.set(a,c),console.log("[Assets] Loaded object:",a,(o=c==null?void 0:c.constructor)==null?void 0:o.name)}catch(c){console.error("[Assets] Failed to load object:",a,c)}})))};return this.readyPromise=(async()=>{await n(i);let r=this.registry.getAllIds().filter(a=>!this.instanceCache.has(a));r.length>0&&(console.warn("[Assets] Retrying missing assets:",r),await n(r)),console.log("[Assets] Ready. Cached objects:",Array.from(this.instanceCache.keys()))})(),this.readyPromise}resetScene(){this.instanceCache.clear(),this.readyPromise=null}async reloadObject(t){let i=this.registry.get(t);if(i){let n=await It.create(t,i,this.app);this.instanceCache.set(t,n)}}get(t){return this.instanceCache.get(t)}},eg=new Nl,Mx=new Proxy(eg,{get(e,t){if(t in e&&typeof e[t]=="function")return e[t].bind(e);if(e.get(t))return e.get(t)}});function Ox(e,t){eg.init(e,t)}var Hl=class extends Kn{async init(){Ga(this.context.config,this.context.app),await Ne.ready(),console.log("[AssetSystem] All assets preloaded and ready")}async onStart(){}onConfigUpdate(){console.log("[AssetSystem] Config updated - systems will refresh textures")}};import{Graphics as Dx,Point as zx}from"pixi.js";var gt={width:400,height:600,designWidth:400,scaleFactor:1},ja={scale:1,position:1},Ba=[];function jx(e,t,i,n,r,a,s){Ba.push({element:e,originalScale:a,positionHelper:t,heightPercent:r}),t(e,i,n,r,a,s,!1)}function Bx(){Ba.forEach(({element:e,originalScale:t,positionHelper:i,heightPercent:n})=>{let r=t*gt.scaleFactor;i(e,gt.width,gt.height,n,r,!0,!1)})}function Fx(){Ba.length=0,console.log("[LAYOUT] Cleared all responsive elements")}function Ul(e,t){console.log(`[SCREEN] updateScreenState called: ${e}x${t}`),gt.width=e,gt.height=t,gt.scaleFactor=Math.min(e/gt.designWidth,1.15),ja.scale=gt.scaleFactor,ja.position=1,console.log(`[SCREEN] Global multipliers - scale: ${ja.scale.toFixed(3)}`),Bx()}var Y={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 Nx(e,t,i){let n=Y[e];n&&n[t]!==void 0&&(n[t]=i,console.log(`Updated ${e}.${t} = ${i}`))}function Hx(){return Y}var Ux={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 za(e,t){return typeof e=="number"&&Number.isFinite(e)?e:t}function Fa(e,t={x:.5,y:.5}){var i;if(Array.isArray(e))return{x:za(e[0],t.x),y:za(e[1],t.y)};if(e&&typeof e=="object"){let n=e;return{x:za(n.x,t.x),y:za(n.y,t.y)}}if(typeof e=="string"){let n=e.trim().toLowerCase();return(i=Ux[n])!=null?i:t}return t}function Jn(e,t,i,n={}){var f,m,h,g,b,v;let r=Fa(i),a=(f=n.inset)!=null?f:{},s=(m=n.padding)!=null?m:{x:0,y:0},o=((h=a.left)!=null?h:0)+s.x,c=((g=a.right)!=null?g:0)+s.x,l=((b=a.top)!=null?b:0)+s.y,d=((v=a.bottom)!=null?v:0)+s.y,u=Math.max(0,e-o-c),p=Math.max(0,t-l-d);return{x:o+u*r.x,y:l+p*r.y}}function Qn(e,t,i,n={}){var h,g,b,v,y,x;let r=(h=n.inset)!=null?h:{},a=(g=n.padding)!=null?g:{x:0,y:0},s=((b=r.left)!=null?b:0)+a.x,o=((v=r.right)!=null?v:0)+a.x,c=((y=r.top)!=null?y:0)+a.y,l=((x=r.bottom)!=null?x:0)+a.y,d=Math.max(0,e-s-o),u=Math.max(0,t-c-l),p=Fa(i,{x:.5,y:.5}),f=Math.min(Math.max(p.x,0),1),m=Math.min(Math.max(p.y,0),1);return{x:s+d*f,y:c+u*m}}function $l(e,t,i,n={}){var d,u,p;if(!e)return;let r=n.positionRatio?Qn(t,i,n.positionRatio,{inset:n.inset,padding:n.screenPadding}):Jn(t,i,n.anchor,{inset:n.inset,padding:n.screenPadding}),a=(d=n.offset)!=null?d:{x:0,y:0},s=r.x+a.x,o=r.y+a.y;e.anchor&&n.renderAnchor&&e.anchor.set(n.renderAnchor.x,n.renderAnchor.y),ze(e,s,o);let c=(u=n.scale)!=null?u:1,l=(p=n.scaleMultiplier)!=null?p:1;(n.scale!==void 0||n.scaleMultiplier!==void 0)&&Xe(e,c*l)}if(typeof window!="undefined"){let e=window.innerWidth,t=window.innerHeight,i=()=>{let n=window.innerWidth,r=window.innerHeight;(n!==e||r!==t)&&(e=n,t=r,Ul(n,r))};window.addEventListener("resize",i),window.addEventListener("orientationchange",()=>{setTimeout(i,100)}),window.mraid&&(window.mraid.addEventListener("viewableChange",i),window.mraid.addEventListener("sizeChange",i)),Ul(window.innerWidth,window.innerHeight),window.updateDebugConfig=Nx,window.getDebugConfig=Hx,window.copyConfig=Qx,window.applyConfig=Zn,window.applyConfigForRatio=e0,window.positionAtBottom=tg,window.positionAtTop=Gx,window.positionAtCenter=Wx,window.positionAtLeft=Yx,window.positionAtRight=Vx,window.positionAtBottomLeft=Kx,window.positionAtBottomRight=Xx,window.positionAtTopLeft=Zx,window.positionAtTopRight=Jx,window.applyPositionContract=qx,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 Na(e,t,i=0){return e*t+i}function Ha(e,t,i=0){return e*(1-t)+i}function Ua(e,t,i=0){return e*t+i}function $a(e,t,i=0){return e*(1-t)+i}function Te(e,t=0){return e/2+t}function $x(e,t){return e*t}function qx(e,t,i,n){var s,o,c,l,d,u,p,f,m,h,g,b,v,y,x,w,T,C,S,L;let r=0,a=0;switch(n.type){case"top":r=Te(t,(o=(s=n.offset)==null?void 0:s.x)!=null?o:0),a=Na(i,n.percent,(l=(c=n.offset)==null?void 0:c.y)!=null?l:0);break;case"bottom":r=Te(t,(u=(d=n.offset)==null?void 0:d.x)!=null?u:0),a=Ha(i,n.percent,(f=(p=n.offset)==null?void 0:p.y)!=null?f:0);break;case"left":r=Ua(t,n.percent,(h=(m=n.offset)==null?void 0:m.x)!=null?h:0),a=Te(i,(b=(g=n.offset)==null?void 0:g.y)!=null?b:0);break;case"right":r=$a(t,n.percent,(y=(v=n.offset)==null?void 0:v.x)!=null?y:0),a=Te(i,(w=(x=n.offset)==null?void 0:x.y)!=null?w:0);break;case"center":r=Te(t,(C=(T=n.offset)==null?void 0:T.x)!=null?C:0),a=Te(i,(L=(S=n.offset)==null?void 0:S.y)!=null?L:0);break}e.position?e.position.set(r,a):(e.x=r,e.y=a),n.scale!==void 0&&n.scale!==1&&e.scale&&(typeof e.scale.set=="function"?e.scale.set(n.scale,n.scale):(e.scale.x=n.scale,e.scale.y=n.scale))}function tg(e,t,i,n=.2,r=1,a=!0,s=!1){let o=$x(i,n),c=Ha(i,n/2);ze(e,Te(t),c);let l=a?r*gt.scaleFactor:r;Xe(e,l),s&&!Ba.find(d=>d.element===e)&&jx(e,tg,t,i,n,r,a)}function Gx(e,t,i,n=.1,r=1){ze(e,Te(t),Na(i,n)),Xe(e,r)}function Wx(e,t,i,n=0,r=0,a=1){ze(e,Te(t,n),Te(i,r)),Xe(e,a)}function Yx(e,t,i,n=.1,r=1){ze(e,Ua(t,n),Te(i)),Xe(e,r)}function Vx(e,t,i,n=.1,r=1){ze(e,$a(t,n),Te(i)),Xe(e,r)}function Kx(e,t,i,n=.05,r=.05,a=1){ze(e,Ua(t,r),Ha(i,n)),Xe(e,a)}function Xx(e,t,i,n=.05,r=.05,a=1){ze(e,$a(t,r),Ha(i,n)),Xe(e,a)}function Zx(e,t,i,n=.05,r=.05,a=1){ze(e,Ua(t,r),Na(i,n)),Xe(e,a)}function Jx(e,t,i,n=.05,r=.05,a=1){ze(e,$a(t,r),Na(i,n)),Xe(e,a)}function ze(e,t,i){e&&e.position?typeof e.position.set=="function"?e.position.set(t,i):(e.position.x=t,e.position.y=i):e&&(e.x=t,e.y=i)}function Xe(e,t){t!==1&&e&&e.scale&&(typeof e.scale.set=="function"?e.scale.set(t,t):e.scale.x!==void 0&&e.scale.y!==void 0&&(e.scale.x=t,e.scale.y=t))}var ei={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 Qx(e){return e&&ei[e]?JSON.parse(JSON.stringify(ei[e])):JSON.parse(JSON.stringify(Y))}function Zn(e){Object.keys(e).forEach(t=>{let i=t;Y[i]&&e[i]&&Object.assign(Y[i],e[i])}),console.log("Config applied:",e)}function e0(e,t){let i=e/t;i>1.6?(Zn(ei.wide),console.log("Applied WIDE config for ratio:",i)):i<.7?(Zn(ei.tall),console.log("Applied TALL config for ratio:",i)):i>.8&&i<1.2?(Zn(ei.square),console.log("Applied SQUARE config for ratio:",i)):(Zn(ei.default),console.log("Applied DEFAULT config for ratio:",i))}if(typeof window!="undefined"){let e=window;e.configPresets=ei,e.resolveAnchorVec2=e.resolveAnchorVec2||Fa,e.resolveScreenAnchorPoint=e.resolveScreenAnchorPoint||Jn,e.resolveScreenRatioPoint=e.resolveScreenRatioPoint||Qn}var ve=null;function t0(e,t,i,n,r,a={}){var D,j,ie,ye,xe,J,fe,he,Ji,ti,ii,er,F,je,Ze,mt,Je,Dt,ni,ri,Qe,ai,bt,tr,ir,ql,Gl,Wl,Yl,Vl,Kl,Xl,Zl,Jl,Ql,ec,tc;let s=(D=a.enableDebugLogs)!=null?D:!1;s&&(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:",i),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Options:",a));let{mainContainer:o,label:c,background:l,backgroundTexture:d,app:u}=e;if(!u||!u.renderer){s&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] \u274C No app or renderer, skipping layout");return}s&&(console.log("\u{1F3AF} [LAYOUT_DEBUGS] App renderer dimensions:",{width:u.renderer.width,height:u.renderer.height}),console.log("\u{1F3AF} [LAYOUT_DEBUGS] App screen dimensions:",{width:u.screen.width,height:u.screen.height}));let p=n.width,f=n.height;s&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] Base dimensions:",{baseWidth:p,baseHeight:f});let m=p*Y.layout.screen_scale_x,h=f*Y.layout.screen_scale_y,g=p/2,b=t.engine.runtime||{},v=b.layout||{};s&&(console.log("\u{1F3AF} [LAYOUT_DEBUGS] Debug config:",{screen_scale_x:Y.layout.screen_scale_x,screen_scale_y:Y.layout.screen_scale_y}),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Calculated dimensions:",{width:m,height:h,midX:g}),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Engine runtime:",b),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Layout config:",v));let y=v.design_width_portrait||400,x=m/y;x=Math.min(x,1.15);let w=x*((j=Y.engine.scale)!=null?j:1),T=(ie=a.skipMainContainerTransform)!=null?ie:!1;!T&&o&&o.scale&&(typeof o.scale.set=="function"?o.scale.set(w):(o.scale.x=w,o.scale.y=w));let C=(ye=v.main_container_anchor)!=null?ye:"center",S=(xe=v.main_container_position_ratio)!=null?xe:{x:.5,y:.5},L=(J=v.main_container_offset)!=null?J:{x:0,y:0},M=v.main_container_position_ratio?Qn(p,f,S):Jn(p,f,C),_=M.x+L.x+Y.layout.position_offset.x,E=M.y+L.y+Y.layout.position_offset.y;if(!T&&o&&o.position&&(typeof o.position.set=="function"?o.position.set(_,E):(o.position.x=_,o.position.y=E)),r&&(o!=null&&o.toLocal))for(let[le,ce]of t.objects.entries()){let V=ce==null?void 0:ce.transform;if(!V||((fe=V.position_mode)!=null?fe:"static")!=="static")continue;let U=(he=r.get)==null?void 0:he.call(r,le),Be=((Ji=U==null?void 0:U.getDisplayObject)==null?void 0:Ji.call(U))||(U==null?void 0:U.pixiObject)||U;if(!Be||Be.parent!==o)continue;let Qi=V.position_ratio!=null?Qn(p,f,V.position_ratio):Jn(p,f,(ti=V.anchor)!=null?ti:"center"),nr=o.toLocal(new zx(Qi.x,Qi.y)),rr=(ii=V.position)!=null?ii:{x:0,y:0},en=nr.x+rr.x,zt=nr.y+rr.y;typeof(U==null?void 0:U.setPosition)=="function"?U.setPosition(en,zt):(ze(Be,en,zt),(er=U==null?void 0:U.transform)!=null&&er.position&&(U.transform.position.x=en,U.transform.position.y=zt))}let A=typeof window!="undefined"?window.__BUILD_SETTINGS__:null,I=((A==null?void 0:A.buildMode)||(typeof __BUILD_MODE__!="undefined"?__BUILD_MODE__:"dev"))==="dev";if(Y.layout.debug_rect_visible&&I){(!ve||ve.parent!==u.stage)&&(ve==null||ve.destroy(),ve=new Dx,ve.zIndex=9999,u.stage.addChild(ve)),ve.clear();let le=Y.layout.debug_rect_scale_x,ce=Y.layout.debug_rect_scale_y,V=(p-4)*le,Le=(f-4)*ce,U=(p-V)/2,Be=(f-Le)/2;s&&(console.log("\u{1F3AF} [LAYOUT_DEBUGS] ===== DEBUG RECT POSITIONING ====="),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Debug rect calculations:",{baseWidth:p,baseHeight:f,rectW:V,rectH:Le,offsetX:U,offsetY:Be}),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Debug rect final position:",{x:2+U,y:2+Be,width:V,height:Le})),ve.rect(2+U,2+Be,V,Le).stroke({width:Y.layout.debug_rect_thickness,color:Y.layout.debug_rect_color})}else ve&&(ve.destroy(),ve=null);let k=((F=e.label)==null?void 0:F.config)||t.objects.get("label_1")||t.objects.get("ui_tutorial_1");if(c&&c.position&&k){let le=(je=k==null?void 0:k.render)==null?void 0:je.anchor,ce=(mt=(Ze=k==null?void 0:k.transform)==null?void 0:Ze.anchor)!=null?mt:"center",V=(Je=k==null?void 0:k.transform)==null?void 0:Je.position_ratio,Le=((Dt=k==null?void 0:k.transform)==null?void 0:Dt.offset)||{x:0,y:0};$l(c,p,f,{anchor:ce,positionRatio:V,offset:{x:Le.x*w,y:Le.y*w},renderAnchor:le})}if(c&&c.alpha>0){let le=1+Math.sin(i*Y.engine.label_pulse_speed)*Y.engine.label_pulse_intensity,ce=(ri=(ni=k==null?void 0:k.transform)==null?void 0:ni.scale)!=null?ri:1,V=le*w*ce;c.scale&&(typeof c.scale.set=="function"?c.scale.set(V):(c.scale.x=V,c.scale.y=V))}if(s&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] ===== BACKGROUND POSITIONING ====="),l){s&&(console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background object exists:",!!l),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background type:",(Qe=l.constructor)==null?void 0:Qe.name)),l.alpha=((bt=(ai=b.background)==null?void 0:ai.alpha)!=null?bt:.98)*Y.engine.background_alpha,s&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background alpha set to:",l.alpha);let le=t.objects.get("background_1");s&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background config:",le);let ce=(le==null?void 0:le.transform)||{};s&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background transform:",ce);let V=ce.offset||{x:0,y:0},Le=((ir=(tr=b.background)==null?void 0:tr.offset_y)!=null?ir:0)+Y.engine.background_offset_y,U=(Gl=(ql=le==null?void 0:le.render)==null?void 0:ql.anchor)!=null?Gl:{x:.5,y:.5},Be=(Wl=ce.anchor)!=null?Wl:"center",Qi=ce.position_ratio;if(s&&console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background positioning params:",{bgOffset:V,bgRuntimeOffsetY:Le,bgRenderAnchor:U,bgScreenAnchor:Be,bgPositionRatio:Qi,baseWidth:p,baseHeight:f,finalScale:w}),$l(l,p,f,{anchor:Be,positionRatio:Qi,offset:{x:V.x*w,y:V.y*w+Le},renderAnchor:U}),s&&(console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background position after applyScreenAnchor:",{x:l.x,y:l.y,scaleX:(Yl=l.scale)==null?void 0:Yl.x,scaleY:(Vl=l.scale)==null?void 0:Vl.y,anchorX:(Kl=l.anchor)==null?void 0:Kl.x,anchorY:(Xl=l.anchor)==null?void 0:Xl.y,pivotX:(Zl=l.pivot)==null?void 0:Zl.x,pivotY:(Jl=l.pivot)==null?void 0:Jl.y,width:l.width,height:l.height}),console.log("\u{1F3AF} [LAYOUT_DEBUGS] Background texture dimensions:",{textureWidth:d==null?void 0:d.width,textureHeight:d==null?void 0:d.height})),d){let nr=Math.max(m/d.width,h/d.height),rr=(ec=(Ql=b.background)==null?void 0:Ql.scale_multiplier)!=null?ec:1.05,en=(tc=ce.scale)!=null?tc:1,zt=nr*rr*Y.engine.background_scale*en;l.scale&&(typeof l.scale.set=="function"?l.scale.set(zt):(l.scale.x=zt,l.scale.y=zt))}else l&&typeof l.clear=="function"&&(l.clear(),l.rect(-m/2,-h/2,m,h).fill({color:1444375}))}}function i0(e){var o,c,l;let{setState:t,updateLabelAlpha:i,updateHandAlpha:n,config:r,states:a}=e,s=((c=(o=r.engine)==null?void 0:o.runtime)==null?void 0:c.timeline)||{};t(a.showHook),setTimeout(()=>{i(1),n(1),t(a.waitInput),console.log("[GAME] \u23F3 Game ready for user input - tutorial shown")},(l=s.tutorial_delay_ms)!=null?l:1500)}export{Lc as a,jl as b,Ia as c,Ma as d,Oa as e,Vn as f,wx as g,_x as h,Ex as i,Sx as j,Cl as k,Cx as l,It as m,Fl as n,Kn as o,Xn as p,kx as q,Ix as r,Mx as s,Ox as t,Hl as u,ja as v,Fx as w,Ul as x,Fa as y,Jn as z,Qn as A,$l as B,t0 as C,i0 as D,Rc as E,Pc as F,is as G,ci as H,u0 as I,Aa as J,xl as K,Rh as L,_l as M,q_ as N,G_ as O,Ke as P,pt as Q};
|