@kayelaa/canvas 0.2.9 → 0.2.12
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/index.cjs +4 -1
- package/dist/index.d.cts +5 -2
- package/dist/index.d.ts +5 -2
- package/dist/index.js +4 -1
- package/dist/jsx-dev-runtime.cjs +4 -1
- package/dist/jsx-dev-runtime.d.cts +2 -2
- package/dist/jsx-dev-runtime.d.ts +2 -2
- package/dist/jsx-dev-runtime.js +4 -1
- package/dist/jsx-runtime.cjs +4 -1
- package/dist/jsx-runtime.d.cts +7 -5
- package/dist/jsx-runtime.d.ts +7 -5
- package/dist/jsx-runtime.js +4 -1
- package/dist/{kayla-internals-BTafulRl.d.cts → kayla-internals-BRuWD6zz.d.ts} +106 -40
- package/dist/{kayla-internals-D5xAtIoY.d.ts → kayla-internals-D359_d9x.d.cts} +106 -40
- package/dist/kayla.cjs +4 -1
- package/dist/kayla.d.cts +3 -3
- package/dist/kayla.d.ts +3 -3
- package/dist/kayla.js +4 -1
- package/dist/{lea-BaZkxo5L.d.cts → lea-C5CjP5X2.d.cts} +36 -2
- package/dist/{lea-BaZkxo5L.d.ts → lea-C5CjP5X2.d.ts} +36 -2
- package/dist/lea.cjs +1 -1
- package/dist/lea.d.cts +1 -1
- package/dist/lea.d.ts +1 -1
- package/dist/lea.js +1 -1
- package/package.json +1 -1
package/dist/jsx-dev-runtime.js
CHANGED
|
@@ -1 +1,4 @@
|
|
|
1
|
-
var Pe=Object.defineProperty;var Ie=(i,e)=>{for(var n in e)Pe(i,n,{get:e[n],enumerable:!0})};var Ce={};Ie(Ce,{JSX:()=>Te,KMatrix2D:()=>be,KaylaContext:()=>te,KaylaFragment:()=>we,KaylaInternals:()=>G,KaylaRect:()=>L,Layer:()=>tt,createContext:()=>Ge,createElement:()=>ne,createGame:()=>_e,createReassignableObject:()=>Je,createRenderer:()=>De,createScene:()=>Ve,createUseHook:()=>et,self:()=>ge,setLogLevel:()=>Ze,useClick:()=>Oe,useContext:()=>Ye,useCurrentGame:()=>Be,useCurrentRenderer:()=>We,useCurrentScene:()=>ke,useCurrentTicker:()=>je,useDisposableRef:()=>Qe,useEffect:()=>re,useEntity:()=>qe,useExports:()=>oe,useFiber:()=>ve,useFiberControl:()=>xe,useGlobalClick:()=>Re,useGlobalPointer:()=>$e,useInitialization:()=>ie,useNextStack:()=>le,usePaint:()=>ae,usePointer:()=>Ne,useRect:()=>se,useRef:()=>ye,useSelf:()=>D,useShouldRefresh:()=>He,useState:()=>ze,useTick:()=>Xe,useViewportEffect:()=>Ue});var S=class{#e=new Map;constructor(){this.#e=new Map}on(e,n){let s=this.#e.get(e)||[];return s.push(n),this.#e.set(e,s),this}once(e,n){let s=(...a)=>{this.off(e,s),n(...a)};return this.on(e,s),this}off(e,n){let s=this.#e.get(e);if(!s)return this;let a=s.indexOf(n);return a>=0&&s.splice(a,1),this}emit(e,...n){let s=this.#e.get(e);if(!s||s.length===0){if(e==="error")throw n[0];return!1}return s.slice().forEach(a=>a(...n)),!0}removeAllListeners(e){return e?this.#e.delete(e):this.#e.clear(),this}listenerCount(e){return this.#e.get(e)?.length??0}},Q=class extends S{#e;#t;running;_rafId;_fps;_frameCount;_fpsTimer;_lastFrameTime;get canvas(){return this.#e}get ctx(){return this.#t}set canvas(e){this.#e=e,this.#t=e.getContext("2d"),this.updateCanvasResolution()}constructor(e,{viewportWidth:n,viewportHeight:s,cameraWidth:a,cameraHeight:l}={}){if(!k)throw new Error("Web-Only");super(),this.canvas=e,this.automatic=!0,this.#n=n??e.width,this.#r=s??e.height,this.#i=a??e.width,this.#s=l??e.height,this.running=!1,this._rafId=null,this._loop=this._loop.bind(this),this.updateCanvasResolution(),this._fps=60,this._frameCount=0,this._fpsTimer=0}automatic;retransform(){this.ctx.setTransform(1,0,0,1,0,0);let e=this.#i/this.#n,n=this.#s/this.#r;this.ctx.translate(this.#i/2,this.#s/2),this.ctx.scale(e,n),this.ctx.translate(-this.#n/2,-this.#r/2)}#n=0;#r=0;#i=0;#s=0;get viewportWidth(){return this.#n}set viewportWidth(e){this.#n=e,this.retransform(),this.emitViewportUpdate()}get width(){return this.#n}get height(){return this.#r}get centerX(){return this.#n/2}get centerY(){return this.#r/2}get left(){return 0}get top(){return 0}get right(){return this.#n}get bottom(){return this.#r}get viewportHeight(){return this.#r}set viewportHeight(e){this.#r=e,this.retransform(),this.emitViewportUpdate()}get cameraWidth(){return this.#i}set cameraWidth(e){this.#i=e,this.updateCanvasResolution(),this.retransform()}get cameraHeight(){return this.#s}set cameraHeight(e){this.#s=e,this.updateCanvasResolution(),this.retransform()}updateCanvasResolution(){this.canvas.width=this.#i,this.canvas.height=this.#s}emitViewportUpdate(){this.emit("viewport_update",{width:this.viewportWidth,height:this.viewportHeight})}applyTransform(){this.retransform()}get FPS(){return this._fps}_loop(){this.automatic&&this.update(),this._rafId=requestAnimationFrame(this._loop)}update(){if(!this.running||!k)return;let e=performance.now(),n=(e-(this._lastFrameTime??e))/1e3;this._lastFrameTime=e,this._frameCount++,this._fpsTimer+=n,this._fpsTimer>=1&&(this._fps=Math.round(this._frameCount/this._fpsTimer),this._frameCount=0,this._fpsTimer=0),this.ctx.clearRect(0,0,this.#i,this.#s),this.emit("draw",this.ctx)}start(){if(!this.running){if(!k||typeof globalThis.requestAnimationFrame>"u")throw new Error("Raf is not supported");this.running=!0,this._rafId=requestAnimationFrame(this._loop)}}stop(){if(!k||typeof globalThis.requestAnimationFrame>"u")throw new Error("Raf is not supported");this.running=!1,this._rafId!==null&&(cancelAnimationFrame(this._rafId),this._rafId=null)}},de=class extends S{setNow(e){this.#e=e}#e=0;__intervalId=null;__lastTime=0;constructor(e=16){super(),this.#t=e,this.speedHackDT=1}speedHackDT;get isRaf(){return this.tickInterval===1/0}#t=15;get tickInterval(){return this.#t}set tickInterval(e){this.#t=e,this.__intervalId&&(this.stop(),this.start())}now(){return this.#e}__tick(){let e=performance.now(),n=(e-this.__lastTime)/1e3*this.speedHackDT;this.__lastTime=e,!(k&&typeof this.__intervalId=="function"&&document.hidden)&&(this.#e+=n*1e3,this.emit("tick",n))}createTimeout(e){return new pe(e,this)}createTween(e,n=()=>{}){let s=new fe(e),a=(l=0)=>{if(s.finished){this.off("tick",a);return}s.update(l)};return s.on("finish",()=>{this.off("tick",a)}),s.on("delta",l=>{n(l)}),this.on("tick",a),s}start(){this.__intervalId===null&&(this.__lastTime=performance.now(),this.__intervalId=k&&!isFinite(this.tickInterval)?Ae(()=>this.__tick()).clear:setInterval(()=>this.__tick(),this.tickInterval))}stop(){this.__intervalId!==null&&(typeof this.__intervalId=="function"?this.__intervalId():clearInterval(this.__intervalId)),this.__intervalId=null}getSineMod(e,n=0){return .5+.5*Math.sin((this.now()%e/e+n)*2*Math.PI)}},Se;(t=>{function i(r){return r===!0?1:0}t.booleanExport=i;function e(r){return r===0?!1:r===1}t.booleanImport=e;function n(r){return`${r.x}|${r.y}`}t.vec2Export=n;function s(r){let[o,u]=r.split("|"),y=parseFloat(o),g=parseFloat(u);if(isNaN(y)||isNaN(g))throw new Error(`Invalid Vector2 string: ${r}`);return new M(y,g)}t.vec2Import=s,t.booleanMap={mapExport:i,mapImport:e};function l(r){return o=>Number(o.toFixed(r))}t.createRounder=l;function d(r=10){return{mapExport(o){return Math.round(o/r)},mapImport(o){return o*r}}}t.createLowPrecision=d;function f(r){return Math.round(r)}t.lightWeightRounder=f;function h(r=100){return{mapExport(o){return Math.round(o*r)},mapImport(o){return o/r}}}t.createPercent=h;function c(r){let o=new Map(Object.entries(r));return{mapExport:u=>o.get(u)??null,mapImport:u=>Array.from(o.entries()).find(([y,g])=>g===u)?.[0]??null}}t.createLookup=c;function p(r){let o=r*(180/Math.PI);return Math.round((o%360+360)%360)}t.radToDeg=p;function b(r){return r*(Math.PI/180)}t.degToRad=b,t.angleRadToDeg={mapExport:p,mapImport:b};function v(r=10){let o=d(r);return{mapExport(u){return o.mapExport(p(u))},mapImport(u){return o.mapImport(b(u))}}}t.createLowPrecisionRadToDeg=v})(Se||={});var N=class i extends S{name="";scaleRotate=0;scale=1;constructor(e,n=0,s=0){super(),this.autoTranslate=!1,this.name=e,this.z=0,this.___pos=new M(n,s),this.nonSerializableProperties=[],this.nonSerializableProperties.push("___pos","autoTranslate","arraySerializeMap"),this.forceSerializableProperties=[],this.forceSerializableProperties.push("x","y")}arraySerializeMap;autoTranslate;z;___pos;nonSerializableProperties;forceSerializableProperties;get pos(){return this.___pos}get x(){return this.pos.x}get y(){return this.pos.y}set x(e){this.pos.x=e}set y(e){this.pos.y=e}handleUpdate(e){if(this.update)try{this.emit("update",e),this.update(e)}catch(n){this.emit("error",n)}}handleDraw(e){if(!(U||!this.draw)){e.save(),this.autoTranslate&&e.translate(this.x,this.y);try{this.emit("draw",e),this.draw(e)}catch(n){this.emit("error",n)}e.restore()}}serialize(){if(Array.isArray(this.arraySerializeMap))return this.arraySerializeMap.map(([a,{mapExport:l}])=>{let d=Reflect.get(this,a);return l?l(d):d});let e=["_events","_eventsCount","_maxListeners","nonSerializableProperties","forceSerializableProperties"],n=[...Reflect.ownKeys(this),...this.forceSerializableProperties].filter(a=>!this.nonSerializableProperties.includes(a)&&!e.includes(a.toString())),s=Object.fromEntries(n.map(a=>{let l=Reflect.get(this,a);if(U&&typeof l=="number"){let d=l.toString().split("."),h=(d[1]?d[1].length:0)>2?Number(l.toFixed(2)):l;return[a,h]}return[a,l]}));return JSON.parse(JSON.stringify(s))}toLocal(e){return e.subtract(this.pos)}toWorld(e){return e.add(this.pos)}deserializeArray(e){return i.deserializeArray(this.arraySerializeMap,e)}static deserializeArray(e,n){if(!e||!Array.isArray(n))return n;let s={};for(let a=0;a<n.length;a++){let l=e[a];if(!l)break;let[d,{mapImport:f}]=l,h=n[a];if(f&&(h=f(h)),typeof d!="string")break;try{Reflect.set(s,d,h)}catch(c){console.error(c)}}return s}},J=class extends S{name="";entities=new Map;paused=!0;constructor(e){super(),this.name=e}handleUpdate(e){if(!this.paused){this.emit("update",e);for(let n of this.entities.values())n.handleUpdate(e)}}handleDraw(e){if(!U&&!this.paused){this.emit("draw",e);for(let n of[...this.entities.values()].sort((s,a)=>s.z-a.z))n.handleDraw(e)}}addEntity(e){if(!(e instanceof N))throw new Error("invalid entity");if(!e.name)throw new Error("Entity must have a name.");this.entities.set(e.name,e)}removeEntity(e){if(!(e instanceof N))throw new Error("invalid entity");this.entities.delete(e.name)}getEntity(e){return this.entities.get(e)}},Z=class{scenes;ticker;get centerX(){return this.width/2}get centerY(){return this.height/2}get left(){return 0}get top(){return 0}get right(){return this.width}get bottom(){return this.height}width;height;constructor(e,n,s=16){this.ticker=new de(s),this.scenes=new Map,this.width=e,this.height=n,this.ticker.on("tick",a=>{for(let l of this.scenes.values())l.paused||l.handleUpdate(a)})}addScene(e){if(!e.name)throw new Error("Scene must have a name.");e.paused=!1,this.scenes.set(e.name,e)}removeScene(e){e&&(e.paused=!0),this.scenes.delete(e.name)}now(){return this.ticker.now()}start(){this.ticker.start()}stop(){this.ticker.stop()}},P={lerp(i,e,n){return i+(e-i)*n},clamp(i,e,n){return Math.min(n,Math.max(e,i))},clamp01(i){return Math.min(1,Math.max(0,i))},easeLinear(i){return i},easeInQuad(i){return i*i},easeOutQuad(i){return 1-(1-i)*(1-i)},easeInOutQuad(i){return i<.5?2*i*i:1-Math.pow(-2*i+2,2)/2},easeInSine(i){return 1-Math.cos(i*Math.PI/2)},easeOutSine(i){return Math.sin(i*Math.PI/2)},easeInOutSine(i){return-(Math.cos(Math.PI*i)-1)/2},easeInExpo(i){return i===0?0:Math.pow(2,10*i-10)},easeOutExpo(i){return i===1?1:1-Math.pow(2,-10*i)},easeInOutExpo(i){return i===0?0:i===1?1:i<.5?Math.pow(2,20*i-10)/2:(2-Math.pow(2,-20*i+10))/2},smoothstep(i){return i=P.clamp(i,0,1),i*i*(3-2*i)},randomLerp(i,e){return P.lerp(i,e,Math.random())},randomInt(i,e){return Math.floor(Math.random()*(e-i+1))+i},randomArrayValue(i){return i[P.randomInt(0,i.length-1)]},createBezier(i,e,n,s){function a(f,h,c,p,b){let x=1-f;return x*x*x*h+3*x*x*f*c+3*x*f*f*p+f*f*f*b}function l(f,h,c,p,b){let x=1-f;return 3*x*x*(c-h)+6*x*f*(p-c)+3*f*f*(b-p)}function d(f){let h=f;for(let c=0;c<6;c++){let p=a(h,0,i,n,1),b=l(h,0,i,n,1);if(b===0)break;h-=(p-f)/b}return P.clamp(h,0,1)}return function(h){h=P.clamp(h,0,1);let c=d(h);return a(c,0,e,s,1)}},lengthSquared(...i){return i.reduce((e,n)=>e+n*n,0)},normalizeRad(i){let e=2*Math.PI;return i=i%e,i<0&&(i+=e),i},angleInvertY(i){return P.normalizeRad(-i)},degToRadFlipY(i){return P.angleInvertY(i*Math.PI/180)},minimalAngularDirection(i,e){i=P.normalizeRad(i),e=P.normalizeRad(e);let n=P.normalizeRad(e-i),s=P.normalizeRad(i-e);return n<=s?1:-1}},fe=class extends S{constructor({delta:e,ms:n,easing:s}){super(),this.delta=e,this.duration=n,this.elapsed=0,this.easing=s??(a=>a),this.lastValue=0,this.finished=!1}delta;duration;elapsed;lastValue;finished;easing;update(e){this.elapsed+=e*1e3;let n=P.clamp(this.elapsed/this.duration,0,1),s=this.easing(n),a=this.delta*s,l=a-this.lastValue;this.lastValue=a,this.emit("delta",l),n>=1&&(this.finished=!0,this.emit("finish",void 0))}},ee=class extends N{constructor(e,n=0,s=0,a=50,l=50){super(e,n,s),this.width=a,this.height=l}width;height;get left(){return this.x-this.width/2}set left(e){this.x=e+this.width/2}get right(){return this.x+this.width/2}set right(e){this.x=e-this.width/2}get top(){return this.y-this.height/2}set top(e){this.y=e+this.height/2}get bottom(){return this.y+this.height/2}set bottom(e){this.y=e-this.height/2}get lx(){return 0}get ly(){return 0}get lleft(){return-this.width/2}get lright(){return this.width/2}get ltop(){return-this.height/2}get lbottom(){return this.height/2}isCollidingWith(e){return!(this.right<e.left||this.left>e.right||this.bottom<e.top||this.top>e.bottom)}color="rgba(0, 0, 255, 0.3)";draw(e){e.translate(this.x,this.y),e.rotate(this.scaleRotate),e.fillStyle=this.color,e.fillRect(-this.width/2,-this.height/2,this.width,this.height)}},pe=class extends S{duration;ticker;elapsed;finished;_resolve;promise;_timeoutId;constructor(e,n=null){super(),this.duration=e,this.ticker=n,this.elapsed=0,this.finished=!1,this._resolve=null,this.promise=new Promise(s=>this._resolve=s),this.update=this.update.bind(this),this.ticker&&this.ticker.on("tick",this.update)}update(e=0){this.finished||(this.elapsed+=e*1e3,this.elapsed>=this.duration&&this.finish())}finish(){this.finished||(this.finished=!0,this.emit("finish",void 0),this._resolve&&this._resolve(),this.ticker&&this.ticker.off("tick",this.update))}start(){return this.ticker||(this._timeoutId=setTimeout(()=>this.finish(),this.duration)),this}cancel(){this.finished||(this.finished=!0,!this.ticker&&this._timeoutId!=null&&clearTimeout(this._timeoutId),this.ticker&&this.ticker.off("tick",this.update))}then(e,n){return this.promise.then(e,n)}after(e,n){return this.promise.then(e,n)}},M=class i{constructor(e=0,n=0){this.x=e,this.y=n}x;y;toJSON(){return{x:this.x,y:this.y,vec2:!0}}static isVec2(e){return e&&typeof e=="object"&&"x"in e&&"y"in e&&e.vec2===!0}static fromSerialized(e){return this.isVec2(e)?new this(e.x,e.y):null}rotate(e){let n=Math.cos(e),s=Math.sin(e);return new i(this.x*n-this.y*s,this.x*s+this.y*n)}static from(e){return new i(Math.cos(e),Math.sin(e))}isEmpty(){return Math.abs(this.x)<.01&&Math.abs(this.y)<.01}get angle(){return Math.atan2(this.y,this.x)}angleTo(e){return Math.atan2(e.y-this.y,e.x-this.x)}get length(){return Math.hypot(this.x,this.y)}get lengthSquared(){return this.x*this.x+this.y*this.y}normalized(){let e=this.length;return e===0?new i(0,0):new i(this.x/e,this.y/e)}consume(e){let n=this.length;n<=e?(this.x=0,this.y=0):this.overwite(this.scale((n-e)/n))}project(e){return e.scale(this.dotNormalized(e))}reflect(e){let n=this.dot(e);return this.subtract(e.scale(2*n))}dotNormalized(e){let n=this.normalized(),s=e.normalized();return n.x*s.x+n.y*s.y}lengthSquaredTo(e){let n=this.x-e.x,s=this.y-e.y;return n*n+s*s}dot(e){return this.x*e.x+this.y*e.y}distanceTo(e){return Math.hypot(this.x-e.x,this.y-e.y)}distanceToCheap(e){let n=this.x-e.x,s=this.y-e.y;return n*n+s*s}directionTo(e){return new i(e.x-this.x,e.y-this.y).normalized()}add(e){return new i(this.x+e.x,this.y+e.y)}addRaw(e){return new i(this.x+e,this.y+e)}overwite(e){this.x=e.x,this.y=e.y}subtract(e){return new i(this.x-e.x,this.y-e.y)}scale(e){return new i(this.x*e,this.y*e)}toString(){return`Vector2(${this.x}, ${this.y})`}clone(){return new i(this.x,this.y)}};function Fe(){return typeof process<"u"&&process.release?.name==="node"?"node":typeof window<"u"||typeof self<"u"?"web":"unknown"}var Ee=Fe(),U=Ee==="node",k=Ee==="web",X=class i{static unlock(){k&&this.audioCtx.state!=="running"&&this.audioCtx.resume()}static audioCtx=k?new AudioContext:null;static masterGain=k?this.audioCtx.createGain():null;static musicGain=k?this.audioCtx.createGain():null;static sfxGain=k?this.audioCtx.createGain():null;static{k&&(this.masterGain.gain.value=1,this.musicGain.gain.value=1,this.sfxGain.gain.value=1,this.sfxGain.connect(this.masterGain),this.musicGain.connect(this.masterGain),this.masterGain.connect(this.audioCtx.destination))}static get SFX_VOLUME(){return this.sfxGain.gain.value}static get MUSIC_VOLUME(){return this.musicGain.gain.value}static get VOLUME(){return this.masterGain.gain.value}static set SFX_VOLUME(e){this.sfxGain.gain.value=e}static set MUSIC_VOLUME(e){this.musicGain.gain.value=e}static set VOLUME(e){this.masterGain.gain.value=e}static noteToHz(e){return this.tuningFreq*Math.pow(2,(e-9)/12)}static tuningFreq=440;static audioBufferCache=new Map;static loops=new Map;static sfsx=new Map;static loopIdCounter=0;static CACHE_NAME="lia-audio-cache-v1";static async preLoad(e){if(this.audioBufferCache.has(e))return this.audioBufferCache.get(e);let n=i.CACHE_NAME,s,a;if(typeof caches<"u"&&(a=await caches.open(n),s=await a.match(e)),!s){if(s=await fetch(e),!s.ok)throw new Error(`Failed to fetch ${e}`);a&&await a.put(e,s.clone())}let l=await s.arrayBuffer(),d=await this.audioCtx.decodeAudioData(l);return this.audioBufferCache.set(e,d),d}static async getOnlyDownloadedCache(e){let n=i.CACHE_NAME;return await(await caches.open(n)).match(e)}static getCached(e){return this.audioBufferCache.get(e)||null}static async playSound(e,n=.2,s=1,a=!0){try{this.sfsx.has(e)&&this.sfsx.get(e).source.stop(),this.audioBufferCache.has(e)||await this.preLoad(e);let l=this.getCached(e);if(!l)return;let d=new O(l);d.buffer=l;let f=1-.12,h=1+.12;d.playbackRate=s??f+Math.random()*(h-f);let c=this.audioCtx.createGain();c.gain.value=n,d.tempGain=c,d.connect(c),c.connect(this.sfxGain),d.onended=()=>{d.disconnect(),c.disconnect()},d.start(),a&&this.sfsx.set(e,{source:d,gain:c})}catch(l){console.error(l)}}static async playLoop(e,n=1,{loopStart:s=0,loopEnd:a=null,exclusive:l=!0,skipMS:d=0}={}){if(l)for(let b of this.loops.keys())this.stopLoop(b);this.audioBufferCache.has(e)||await this.preLoad(e);let f=this.getCached(e);if(!f)return;let h=new O(f);h.buffer=f,h.loop=!0,typeof s=="number"&&(h.loopStart=s),typeof a=="number"&&(h.loopEnd=a);let c=this.audioCtx.createGain();c.gain.value=n,h.tempGain=c,h.playbackRate=1,h.onended=()=>{h.disconnect(),c.disconnect()},h.connect(c),c.connect(this.musicGain),h.start(0,d/1e3);let p=++this.loopIdCounter;return this.loops.set(p,{source:h,gain:c}),p}static stopLoop(e){let n=this.loops.get(e);n&&(n.source.stop(),n.source.notIndependent||(n.source.disconnect(),n.gain.disconnect()),this.loops.delete(e))}static async createLiaSource(e,{volume:n=1,speed:s=1,loop:a=!1,loopStart:l=0,loopEnd:d=null,isMusic:f=!1,gain:h=null}={}){try{this.audioBufferCache.has(e)||await this.preLoad(e);let c=this.getCached(e);if(!c)return null;let p=new O(c);p.loop=a,p.loopStart=l,p.loopEnd=typeof d=="number"?d:c.duration,p.playbackRate=s;let b=this.audioCtx.createGain();return b.gain.value=n,p.connect(b),p.tempGain=b,b.connect(h||(f?this.musicGain:this.sfxGain)),p.onended=()=>{p.disconnect(),b.disconnect()},p}catch(c){return console.error("Failed to create LiaAudioSrc:",c),null}}};var O=class{numberOfInputs;numberOfOutputs;constructor(e,n=X.audioCtx){this.context=n,this.buffer=e,this.source=null,this.startTime=0,this.pauseTime=0,this.playbackRate=1,this.isPlaying=!1,this.loop=!1,this.output=k?n.createGain():null,this.output.gain.value=1,this.channelCount=2,this.channelCountMode="max",this.channelInterpretation="speakers",this.numberOfInputs=0,this.numberOfOutputs=1,this.onended=null}channelCount;channelCountMode;channelInterpretation;onended;source;buffer;context;_createSource(){this.source&&(this.source.onended=null);let e=this.context.createBufferSource();return e.buffer=this.buffer,e.playbackRate.value=this.playbackRate,e.loop=this.loop,e.loopStart=this.loopStart,e.loopEnd=this.loopEnd>0?this.loopEnd:this.buffer.duration,e.connect(this.output),this.source=e,e.onended=()=>{this.source===e&&(this.isPlaying&&!this.loop&&(this.isPlaying=!1,this.pauseTime=0),typeof this.onended=="function"&&this.onended())},e}play({fadeIn:e=0,offset:n=null}={}){let s=n!==null?n:this.pauseTime;if(this.source){this.source.onended=null;try{this.source.stop()}catch{}}this.source=this._createSource(),this.startTime=this.context.currentTime-s/this.playbackRate,this.source.start(0,s),e>0?(this.output.gain.setValueAtTime(0,this.context.currentTime),this.output.gain.linearRampToValueAtTime(1,this.context.currentTime+e)):this.output.gain.setValueAtTime(1,this.context.currentTime),this.isPlaying=!0}start(e=0,n=0,s){this.isPlaying||(this.source=this._createSource(),this.startTime=this.context.currentTime+e-n/this.playbackRate,s!==void 0?this.source.start(this.context.currentTime+e,n,s):this.source.start(this.context.currentTime+e,n),this.pauseTime=n,this.isPlaying=!0)}pause({fadeOut:e=0}={}){if(!this.isPlaying)return;let n=this.getElapsed()/1e3;if(this.loop&&this.loopEnd>this.loopStart){let s=this.loopEnd-this.loopStart;n=this.loopStart+(n-this.loopStart)%s}if(this.isPlaying=!1,e>0){let s=this.context.currentTime;this.output.gain.setValueAtTime(this.output.gain.value,s),this.output.gain.linearRampToValueAtTime(0,s+e),setTimeout(()=>{if(this.source){this.source.onended=null;try{this.source.stop()}catch{}}this.pauseTime=n,this.output.gain.setValueAtTime(1,this.context.currentTime)},e*1e3)}else{if(this.source){this.source.onended=null;try{this.source.stop()}catch{}}this.pauseTime=n}}getElapsed(){return this.isPlaying?(this.context.currentTime-this.startTime)*this.playbackRate*1e3:this.pauseTime*1e3}setSpeed(e){if(e<=0)throw new Error("Playback rate must be positive");let n=this.getElapsed()/1e3;this.playbackRate=e,this.isPlaying&&(this.pause(),this.pauseTime=n,this.play())}setLoop(e=!0){this.loop=e,this.source&&(this.source.loop=e)}loop;playbackRate;startTime;tempGain=null;connect(e,n=0,s=0){if("value"in e)this.output.connect(e,n);else return this.output.connect(e,n,s),e}disconnect(e,n,s){e===void 0?this.output.disconnect():this.output.disconnect(e,n,s)}output;stop(e=0){if(this.notIndependent)return this.pause();if(!this.source)return;let n=this.context.currentTime+e;this.source.stop(n),this.isPlaying=!1,this.notIndependent||(this.pauseTime=0)}pauseTime;isPlaying;notIndependent=!1;loopStart=0;loopEnd=0},Me={osc:{enabled:!0,type:"sine",freq:440,detune:0},noise:{enabled:!1,level:.5},ampEnv:{attack:.005,decay:.1,sustain:0,release:.1,volume:.3},pitchEnv:{amount:0,decay:.2},filter:{enabled:!1,type:"lowpass",freq:1200,Q:1,envAmount:0,decay:.2},lfo:{enabled:!1,target:"freq",rate:8,depth:20},duration:.4},V=class i{constructor(e={}){this.ctx=X.audioCtx,this.cfg=structuredClone(Me),Object.assign(this.cfg,e)}ctx;cfg;play(e=X.sfxGain){let n=this.ctx,s=n.currentTime,a=this.cfg,l=n.createGain();l.gain.setValueAtTime(1e-4,s);let d=a.ampEnv;l.gain.exponentialRampToValueAtTime(d.volume,s+d.attack),l.gain.exponentialRampToValueAtTime(Math.max(1e-4,d.sustain*d.volume),s+d.attack+d.decay),l.gain.exponentialRampToValueAtTime(1e-4,s+a.duration+d.release);let f=l,h;a.filter.enabled&&(h=n.createBiquadFilter(),h.type=a.filter.type,h.frequency.value=a.filter.freq,h.Q.value=a.filter.Q,h.connect(l),f=h);let c;if(a.osc.enabled){if(c=n.createOscillator(),c.type=a.osc.type,c.frequency.value=a.osc.freq,c.detune.value=a.osc.detune,a.pitchEnv.amount!==0){let r=Math.pow(2,a.pitchEnv.amount/12);c.frequency.exponentialRampToValueAtTime(a.osc.freq*r,s+a.pitchEnv.decay)}c.connect(f),c.start(s),c.stop(s+a.duration+d.release)}let p;if(a.noise.enabled){let r=n.sampleRate*a.duration,o=n.createBuffer(1,r,n.sampleRate),u=o.getChannelData(0);for(let y=0;y<r;y++)u[y]=(Math.random()*2-1)*a.noise.level;p=n.createBufferSource(),p.buffer=o,p.connect(f),p.start(s),p.stop(s+a.duration+d.release)}let b,x;a.lfo.enabled&&c&&(b=n.createOscillator(),b.frequency.value=a.lfo.rate,x=n.createGain(),x.gain.value=a.lfo.depth,b.connect(x),a.lfo.target==="freq"?x.connect(c.frequency):a.lfo.target==="gain"?x.connect(l.gain):a.lfo.target==="filter"&&h&&x.connect(h.frequency),b.start(s),b.stop(s+a.duration)),l.connect(e);let v=[c,p,b,x,h,l],t=s+a.duration+d.release;setTimeout(()=>{v.forEach(r=>r?.disconnect())},(t-n.currentTime)*1e3)}getConfig(){return structuredClone(this.cfg)}setConfig(e){return Object.assign(this.cfg,e),this}getKey(e){return this.cfg[e]}setKey(e,n){return Object.assign(this.cfg[e],n),this}setFreq(e){return this.cfg.osc.freq=e,this}setWave(e){return this.cfg.osc.type=e,this}setVolume(e){return this.cfg.ampEnv.volume=e,this}setAmpEnv(e,n,s,a){return Object.assign(this.cfg.ampEnv,{attack:e,decay:n,sustain:s,release:a}),this}setPitchEnv(e,n){return Object.assign(this.cfg.pitchEnv,{amount:e,decay:n}),this}setNoiseEnabled(e){return this.cfg.noise.enabled=e,this}setNoiseLevel(e){return this.cfg.noise.level=e,this}setFilterEnabled(e){return this.cfg.filter.enabled=e,this}setFilter(e,n,s){return Object.assign(this.cfg.filter,{type:e,freq:n,Q:s,enabled:!0}),this}setLFOEnabled(e){return this.cfg.lfo.enabled=e,this}setLFO(e,n,s){return Object.assign(this.cfg.lfo,{target:e,rate:n,depth:s,enabled:!0}),this}setDuration(e){return this.cfg.duration=e,this}clone(){return new i(structuredClone(this.cfg))}},at=new V({osc:{enabled:!0,type:"square",freq:900,detune:0},ampEnv:{attack:.002,decay:.04,sustain:0,release:.02,volume:.15},duration:.05}),ot=new V({osc:{enabled:!0,type:"sine",freq:600,detune:0},ampEnv:{attack:.01,decay:.08,sustain:0,release:.04,volume:.12},duration:.1}),lt=new V({osc:{enabled:!0,type:"triangle",freq:500,detune:0},pitchEnv:{amount:12,decay:.15},ampEnv:{attack:.01,decay:.12,sustain:0,release:.05,volume:.25},duration:.18}),ut=new V({osc:{enabled:!0,type:"sawtooth",freq:1200,detune:0},pitchEnv:{amount:-24,decay:.3},ampEnv:{attack:.005,decay:.25,sustain:0,release:.05,volume:.3},duration:.35}),ht=new V({osc:{enabled:!0,type:"square",freq:180,detune:0},noise:{enabled:!0,level:.4},ampEnv:{attack:.002,decay:.15,sustain:0,release:.05,volume:.35},duration:.2});function me(i=12){let e=Date.now().toString(36),n=crypto.getRandomValues(new Uint8Array(4)),s=Array.from(n).map(a=>a.toString(36).padStart(2,"0")).join("");return(e+s).slice(0,i)}function Ae(i){let e=!0;function n(){e&&(i(),requestAnimationFrame(n))}return requestAnimationFrame(n),{clear:()=>e=!1}}function Le(){return U?!1:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}var ct=Le();function _e({width:i,height:e,updateHz:n="frames"}){return new G.KaylaGame(i,e,n==="frames"?1/0:n)}function Ve(i){let e=new J(i);return new G.KaylaScene(e)}function De(i){return new G.KaylaRenderer(i)}function ne(i,e){if(typeof i!="function")throw new Error("Invalid Element Type.");let n=e??{};return n.key??=i.name+"_"+me(),{type:i,props:n}}var L;(s=>{function i(a,l){return!(a.right<l.left||a.left>l.right||a.bottom<l.top||a.top>l.bottom)}s.rawCollision=i;function e(a,l,d){let f=l*Math.PI/180,h=Math.cos(f),c=Math.sin(f),p=1/0;return h>0&&(p=Math.min(p,(d.right-a.x)/h)),h<0&&(p=Math.min(p,(d.left-a.x)/h)),c>0&&(p=Math.min(p,(d.bottom-a.y)/c)),c<0&&(p=Math.min(p,(d.top-a.y)/c)),M.from(l).scale(p)}s.getCurrToBound=e;function n(a){let{left:l,right:d,top:f,bottom:h,width:c,height:p,x:b=0,y:x=0}=a;if(c===null||p===null)throw new Error("width and height are required");let v,t;if(l!=null&&d!=null){if(Math.abs(d-l-c)>1e-6)throw new Error("left, right, and width mismatch");v=l}else b!=null?v=b-c/2:l!=null?v=l:d!=null?v=d-c:v=0;if(f!=null&&h!=null){if(Math.abs(h-f-p)>1e-6)throw new Error("top, bottom, and height mismatch");t=f}else x!=null?t=x-p/2:f!=null?t=f:h!=null?t=h-p:t=0;return{left:v,right:v+c,top:t,bottom:t+p,width:c,height:p,x:v+c/2,y:t+p/2}}s.createRawRect=n})(L||={});var G;(x=>{class i extends Z{#e;#t;constructor(t,r,o){super(t,r,o),this.#e=new Set,this.#t=!1}delay(t){return this.ticker.createTimeout(t)}get started(){return this.#t}start(){if(!this.#t){for(let t of this.#e)t.start();this.#t=!0,super.start()}}stop(){if(this.#t){for(let t of this.#e)t.stop();this.#t=!1,super.stop()}}addRenderer(t){this.#e.has(t)||(this.#e.add(t),this.#t&&t.start(),t.game=this)}get mainRenderer(){return[...this.#e].at(0)}getRenderers(){return[...this.#e]}deleteRenderer(t){this.#e.has(t)&&(this.#e.delete(t),this.#t&&t.stop(),delete t.game)}}x.KaylaGame=i;class e extends Q{game;pointerX;pointerY;pointerEvents;onPointerDown;onPointerUp;onPointerCancel;onPointerMove;constructor(t){super(t),this.useDraw=this.useDraw.bind(this),this.on("draw",r=>{if(this.game)for(let o of this.game.scenes.values())o.handleDraw(r)}),this.pointerX=0,this.pointerY=0,this.pointerEvents=new S,this.pointerPosUpdater=this.pointerPosUpdater.bind(this),this.onPointerDown=r=>this.onPointerAll(r,"down"),this.onPointerUp=r=>this.onPointerAll(r,"up"),this.onPointerCancel=r=>this.onPointerAll(r,"cancel"),this.onPointerMove=r=>this.onPointerAll(r,"move")}pointerPosUpdater(t){this.pointerX=t.clientX,this.pointerY=t.clientY}onPointerAll(t,r){this.pointerPosUpdater(t);let o=e.getClickType(t);if(o!=="invalid"||r==="move"||r==="cancel"){t.preventDefault();let u=this.getMousePos();this.pointerEvents.emit("action",u,o,r)}}static getClickType(t){switch(t.button){case 0:return"left";case 1:return"middle";case 2:return"right";default:return"invalid"}}listenPointerUpdates(){this.canvas.addEventListener("pointermove",this.pointerPosUpdater),this.canvas.addEventListener("pointerdown",this.onPointerDown),this.canvas.addEventListener("pointerup",this.onPointerUp),this.canvas.addEventListener("pointercancel",this.onPointerCancel),this.canvas.addEventListener("pointermove",this.onPointerMove)}unlistenPointerUpdates(){this.canvas.removeEventListener("pointermove",this.pointerPosUpdater),this.canvas.removeEventListener("pointerdown",this.onPointerDown),this.canvas.removeEventListener("pointerup",this.onPointerUp),this.canvas.removeEventListener("pointermove",this.onPointerMove)}pointerPosToWorldPos(t,r){let o=this.canvas.getBoundingClientRect(),u=(t-o.left)/o.width,y=(r-o.top)/o.height,g=u*this.viewportWidth*this.cameraWidth/o.width,C=y*this.viewportHeight*this.cameraHeight/o.height;return new M(g,C)}getMousePos(){return this.pointerPosToWorldPos(this.pointerX,this.pointerY)}useDraw(t){let r=o=>{t(o,new s)};return this.on("draw",r),()=>{this.off("draw",r)}}attachTo(t){t.addRenderer(this),this.game=t}detach(){this.game&&this.game.deleteRenderer(this)}}x.KaylaRenderer=e;class n{current;saves;constructor(){this.saves=[]}useTick(t){if(!this.current)throw new Error("Hook 'useTick' must be executed in the top level scope of a component.");this.current.onTick[this.current.useStepCallIndex]=t,this.current.useStepCallIndex++}usePaint(t){if(!this.current)throw new Error("Hook 'usePaint' must be executed in the top level scope of a component.");this.current.onPaint[this.current.useDrawCallIndex]=t,this.current.useDrawCallIndex++}useEntity(){if(!this.current)throw new Error("Hook 'useEntity' must be executed in the top level scope of a component.");return ye(ge)}useSelf(t){if(!this.current)throw new Error("Hook 'useSelf' must be executed in the top level scope of a component.");let r=ye(null);return(r.current===null||r.current===void 0)&&(r.current=t()),r.current}useInitialization(t){if(!this.current)throw new Error("Hook 'useInitialization' must be executed in the top level scope of a component.");let r=this.current;r.onInits[this.current.useInitCallIndex]=t,r.useInitCallIndex++}useRect(){if(!this.current)throw new Error("Hook 'useRect' must be executed in the top level scope of a component.");return D(()=>new x.KaylaInternalRect(this.current))}useFiber(){if(!this.current)throw new Error("Hook 'useFiber' must be executed in the top level scope of a component.");return D(()=>this.current)}useFiberControl(){if(!this.current)throw new Error("Hook 'useFiberControl' must be executed in the top level scope of a component.");let t=this.current;return D(()=>({refresh:()=>t.refresh(),get childrenCount(){return t.lastChildren.length},setMaxChildren:r=>{t.setMaxChildren(r)},getMaxChildren:()=>t.getMaxChildren(),get maxSafeChildren(){return t.maxSafeChildren},get key(){return t.key},get getChildrenEntities(){return t.getChildrenEntities.bind(t)},get getEntityChain(){return t.getEntityChain.bind(t)},get getFiberChain(){return t.getFiberChain.bind(t)}}))}useCurrentTicker(){if(!this.current)throw new Error("Hook 'useCurrentTicker' must be executed in the top level scope of a component.");return this.current.getAttachedGame().ticker}useCurrentRenderer(){if(!this.current)throw new Error("Hook 'useCurrentRenderer' must be executed in the top level scope of a component.");return this.current.getAttachedGame().mainRenderer}useCurrentGame(){if(!this.current)throw new Error("Hook 'useCurrentGame' must be executed in the top level scope of a component.");return this.current.getAttachedGame()}useCurrentScene(){if(!this.current)throw new Error("Hook 'useCurrentScene' must be executed in the top level scope of a component.");return this.current.scene}useState(t,{alwaysRecall:r=!1}={}){if(!this.current)throw new Error("Hook 'useState' must be executed in the top level scope of a component.");let u=this.current.state[this.current.useStateCallIndex]??new a(this.current,t,{alwaysRecall:r});return this.current.state[this.current.useStateCallIndex]=u,this.current.useStateCallIndex++,u}useShouldRefresh(t){let r=this.current;if(!r)throw new Error("useShouldRefresh must be called inside a component");r.watchedDeps&&console.warn("useShouldRefresh called multiple times \u2014 using the last call"),r.watchedDeps=t}useRef(t){if(!this.current)throw new Error("Hook 'useRef' must be executed in the top level scope of a component.");let o=this.current.refs[this.current.useRefCallIndex]??d(t??null);return this.current.refs[this.current.useRefCallIndex]=o,this.current.useRefCallIndex++,o}useEffect(t){if(!this.current)throw new Error("Hook 'useEffect' must be executed in the top level scope of a component.");this.current.onEffect[this.current.useEffectCallIndex]=t,this.current.useEffectCallIndex++}useViewportEffect(t){if(!this.current)throw new Error("Hook 'useViewport' must be executed in the top level scope of a component.");this.current.onViewportEffect[this.current.useViewCallIndex]=t,this.current.useViewCallIndex++}useExports(t,r){if(!this.current)throw new Error("Hook 'useExports' must be executed in the top level scope of a component.");this.current.onExport=r}useGlobalPointer(t,r){if(!this.current)throw new Error("Hook 'useGlobalPointer/useGlobalClick' must be executed in the top level scope of a component.");r??={},this.current.onGlobalPointer[this.current.useGlobalClickCallIndex]={handler:t,config:r},this.current.useGlobalClickCallIndex++}usePointer(t,r){if(!this.current)throw new Error("Hook 'usePointer/useClick' must be executed in the top level scope of a component.");r??={};let o=this.current;Re((u,y,g)=>{let C=o.entity;if(!C)return;let E=C.getRawRect(),z=L.createRawRect({x:u.x,y:u.y,width:3,height:3});L.rawCollision(E,z)&&t(u,y,g)},r)}useContext(t){if(!this.current)throw new Error("Hook 'useContext' must be executed in the top level scope of a component.");return this.current.findContextValueFromInst(t)}save(){this.saves.push({current:this.current})}restore(){let t=this.saves.pop();if(!t)throw new Error("Cannot restore without saving.");this.current=t.current}logLevel="warn";logger={debug:(...t)=>{this.logLevel==="debug"&&console.debug(...t)},info:(...t)=>{["info","warn","debug"].includes(this.logLevel)&&console.info(...t)},warn:(...t)=>{["warn","debug"].includes(this.logLevel)&&console.warn(...t)},error:(...t)=>console.error(...t),withFiber:(t,r,o,...u)=>{let y=t?.fc?.name||"anonymous",g=t?.key?` key=${t.key}`:"";this.logger[r](`${o} <${y}${g}>`,...u)}}}x.GlobalKayla=n;class s{preventDefault(){this.#e=!0}#e=!1;isPrevented(){return this.#e}}x.KaylaEvent=s;class a{#e;#t;#n;alwaysRecall;constructor(t,r,{alwaysRecall:o=!1}={}){this.#t=t,this.#e=r??void 0,this.#n=Date.now(),this.alwaysRecall=o}get(){return this.#e}get 0(){return this.get()}1(t){this.set(t,{recall:!0})}legacy(){return[this[0],this[1].bind(this)]}add(t,{recall:r}={}){this.set(this.get()+t,{recall:r})}multiply(t,{recall:r}={}){this.set(this.get()*t,{recall:r})}set(t,{recall:r=!1}={}){let o=this.#e;if(t===o)return;this.#e=t;let y=Date.now()-this.#n;r&&y<67&&this.#t.global.logger.warn(`Hot structural state change <${this.#t.fc?.name||"anonymous"}> delta=${y}ms`),(r||this.alwaysRecall)&&this.#t.refresh(),this.#n=Date.now()}get value(){return this.#e}get lastChanged(){return this.#n}}x.KaylaInternalState=a;class l{#e;constructor(t){this.#e=t??void 0}#t;setSetter(t){this.#t=t}get current(){return this.#e}set current(t){this.#e=t,this.#t&&this.#t(this.#e)}}x.KaylaInternalRef=l;function d(v){return new l(v)}x.createReassignableRef=d;class f{state;refs;global;callProps;scene;exports;detectedParent;contextInfo;lastLayer;get childrenCount(){return this.lastChildren.length}maxSafeChildren;dynamicChildren;constructor(t,r,o){if(!o)throw new Error("Empty element");this.maxSafeChildren=40,this.scene=r,this.state=[],this.refs=[],this.onInits=[],this.onUnInits=[],this.fc=o.type,this.callProps=o.props??{},this.global=t,this.lastStateDeps=[],this.entity=null,this.lastChildren=[],this.onEffect=[],this.onUnEffect=[],this.onPaint=[],this.onTick=[],this.onGlobalPointer=[],this.pointerHook=this.pointerHook.bind(this),this.resizeHook=this.resizeHook.bind(this),this.contextInfo=null,this.detectedParent=null,this.dynamicChildren=[],this.key??=this.fc.name+"_"+me(),this.onViewportEffect=[],this.lastLayer=null}getCorrectMousePos(t){return t??=this.getAttachedRenderer().getMousePos(),this.lastLayer?.transform?this.lastLayer.transform.inverseV(t):t}getChildrenEntities(){return this.lastChildren.map(t=>t.entity)}pointerHook(t,r,o){t=this.getCorrectMousePos(t);try{for(let{handler:u,config:y}of this.onGlobalPointer)y.type??="any",y.action??="down",!(y.action!=="any"&&y.action!==o||y.type!=="any"&&y.type!==r)&&u(t,r,o)}catch(u){this.global.logger.error(u)}}resizeHook({width:t,height:r}){try{for(let o of this.onViewportEffect)o(this.getAttachedRenderer(),t,r)}catch(o){this.global.logger.error(o)}}bindEvents(){for(let t of[this.getAttachedRenderer()])t&&(t.pointerEvents.on("action",this.pointerHook),t.on("viewport_update",this.resizeHook))}unbindEvents(){for(let t of[this.getAttachedRenderer()])t&&(t.pointerEvents.off("action",this.pointerHook),t.off("viewport_update",this.resizeHook))}get key(){return this.callProps.key}set key(t){this.callProps.key=t}get children(){return this.callProps.children}set children(t){this.callProps.children=t}entity;onExport=()=>({});onEffect;onViewportEffect;onGlobalPointer;onInits;onUnInits;onUnEffect;onEffectDeps;onPaint;onTick;fc;useStateCallIndex=0;useEffectCallIndex=0;useGlobalClickCallIndex=0;useDrawCallIndex=0;useStepCallIndex=0;useRefCallIndex=0;useInitCallIndex=0;useViewCallIndex=0;lastStateDeps;watchedDeps;lastDepStamps=[];getAttachedRenderer(){return this.getAttachedGame().mainRenderer}getAttachedGame(){return this.scene.getGame()}setMaxChildren(t){if(this.maxSafeChildren=Math.max(0,t),this.global.logger.debug(`Max children limit updated to ${t} for <${this.fc?.name||"anonymous"} key=${this.key}>`),this.lastChildren.length>this.maxSafeChildren){let r=this.lastChildren.length-this.maxSafeChildren;this.global.logger.warn(`Child limit exceeded (${this.lastChildren.length} > ${this.maxSafeChildren}) \u2014 removing ${r} oldest children <${this.fc?.name||"anonymous"} key=${this.key}>`);let o=this.lastChildren.slice(0,this.maxSafeChildren),u=this.lastChildren.slice(this.maxSafeChildren);this.lastChildren=o;for(let y of u)y.unuse()}}getMaxChildren(){return this.maxSafeChildren??1/0}getFiberChain(){let t=[],r=this.detectedParent;for(;r;)t.push(r),r=r?.detectedParent;return t}getAllChildrenNestedFlattened(){let t=[],r=(o=[])=>{for(let u of o)t.push(u),u.lastChildren?.length&&r(u.lastChildren)};return r(this.lastChildren),t}getContextChain(){return this.getFiberChain().map(t=>t.contextInfo).filter(Boolean)}findContextValueFromInst(t){return this.getContextChain().find(r=>r.instance===t)?.value}getEntityChain(){return this.getFiberChain().map(t=>t.entity)}shouldFullRefresh(){if(this.isFirstUse||!this.watchedDeps||this.watchedDeps.length===0)return!0;for(let t=0;t<this.watchedDeps.length;t++){let r=this.watchedDeps[t],o=this.lastDepStamps[t]??0;if(r.lastChanged>o)return!0}return!1}captureDepStamps(){this.watchedDeps&&(this.lastDepStamps=this.watchedDeps.map(t=>t.lastChanged))}refresh(){if(!this.shouldFullRefresh())return;let t=this.fc?.name||"anonymous";if(!this.shouldFullRefresh()){this.global.logger.debug(`Refresh skipped <${t} key=${this.key}>`);return}this.global.logger.debug(`Refresh executed <${t} key=${this.key}> reason=${this.isFirstUse?"first":"deps-changed"}`),this.lastChildren.length>this.maxSafeChildren&&this.global.logger.warn(`High child count <${t} key=${this.key}> children=${this.lastChildren.length}`);let r;this.global.save(),this.global.current=this,this.useStateCallIndex=0,this.useRefCallIndex=0,this.useInitCallIndex=0,this.useViewCallIndex=0,this.useStateCallIndex=0,this.useDrawCallIndex=0,this.useStepCallIndex=0,this.useEffectCallIndex=0,this.useGlobalClickCallIndex=0;let o=[];try{let u=this.fc(this.callProps)??[];if(u&&!Array.isArray(u)&&(u=[u]),!Array.isArray(u))throw new Error("Non array or non undefined children received.");for(let y of u)if(y.type===this.fc)throw new Error("Circular Component.");o=u}catch(u){r=u}if(this.global.restore(),this.updateChildren(o,!0),r)throw r}updateChildren(t,r){try{let o=[...t,...this.dynamicChildren],u=[],y=[];for(let g of o){let C=g.props?.key,E;C!=null&&(E=this.lastChildren.find(z=>z.key===C)),E||(E=new f(this.global,this.scene,g)),E.callProps=g.props,E.detectedParent=this,y.push(E),u.push(E)}for(let g of this.lastChildren)u.includes(g)||g.unuse();this.lastChildren=y,this.captureDepStamps(),this.use();for(let g of this.lastChildren)try{g.refresh()}catch(C){console.error(C)}}catch(o){console.error(o)}}lastChildren;isFirstUse=!0;use(){try{let t=!0;if(this.lastStateDeps??=[],Array.isArray(this.onEffectDeps)&&(t=!0),t||this.isFirstUse){this.global.logger.debug(`Using <${this.fc?.name||"anonymous"} key=${this.key}> count=${this.onEffect.length}`);let r=this.isFirstUse;this.isFirstUse=!1,Array.isArray(this.onEffectDeps)&&(this.lastStateDeps=this.onEffectDeps.map(u=>({stamp:u.lastChanged,stateRef:u}))),this.entity&&this.scene.getScene().removeEntity(this.entity),this.entity&&this.entity.name!==this.key&&(this.entity=null),this.entity=this.entity??new h(this,this.key);for(let u of this.refs)u.current===ge&&(u.current=this.entity);if(this.callProps.ref instanceof l&&(this.callProps.ref.current=this.entity),this.exports=this.onExport(),this.callProps.exportsRef instanceof l&&(this.callProps.exportsRef.current=this.exports),this.entity&&this.entity!==this.entity&&this.global.logger.warn(`Entity name mismatch during refresh <${this.fc?.name} key=${this.key}>`),this.scene.getScene().addEntity(this.entity),r){this.onUnInits=[];for(let u of this.onInits){this.bindEvents();try{let y=u();typeof y=="function"&&this.onUnInits.push(y)}catch(y){throw this.global.logger.error("Initialization failed",this.fc?.name||"anonymous",y),y}}}try{for(let u of this.onUnEffect??[])u()}catch(u){console.error(u)}let o=this.onEffect.map(u=>u()).filter(u=>u!==void 0);this.onUnEffect=o}}catch(t){throw this.global.logger.error(`use() failed <${this.fc?.name||"anonymous"} key=${this.key}>`,t),t}}unuse(){this.global.logger.debug(`unuse called <${this.fc?.name||"anonymous"} key=${this.key}> children=${this.lastChildren.length}`),this.detectedParent=null,this.watchedDeps=void 0,this.lastDepStamps=[],this.unbindEvents();try{for(let t of this.onUnInits)t();for(let t of this.onUnEffect)t()}catch(t){this.global.logger.error(`Cleanup failed in unuse <${this.fc?.name||"anonymous"} key=${this.key}>`,t)}this.scene.getScene().removeEntity(this.entity);for(let t of this.lastChildren)t.unuse();this.lastChildren.length=0}}x.KaylaFiber=f;class h extends ee{#e;flags;getRawRect(){return L.createRawRect({x:this.x,y:this.y,width:this.width,height:this.height})}getFiber(){return this.#e}constructor(t,r){super(r,0,0,0,0),this.#e=t,this.flags=new Map,this.color="transparent"}setFlag(t,r){return this.flags.set(t,r)}getFlag(t){return this.flags.get(t)}removeFlag(t){return this.flags.delete(t)}update(t){le(()=>{let r=new s;if(this.#e&&this.#e.onTick)for(let o of this.#e.onTick)o(t,r);r.isPrevented()})}draw(t){let r=new s;if(this.#e&&this.#e.onPaint)for(let o of this.#e.onPaint)o(t,r);r.isPrevented()||super.draw(t)}getRect(){return new c(this.getFiber())}}x.KaylaRectEntity=h;class c{#e;constructor(t){this.#e=t}get color(){return this.#t(),this.entity.color}set color(t){this.#t(),this.entity.color=t}getRaw(){return L.createRawRect({x:this.x,y:this.y,width:this.width,height:this.height})}get entity(){return this.#e.entity??null}#t(){if(!this.#e)throw new Error("No fibers found.");if(!this.entity)throw new Error("The entity does NOT exist yet.")}isCollidingWith(t){return this.#t(),this.entity.isCollidingWith(t.entity)}get setFlag(){return this.#t(),this.entity.setFlag.bind(this.entity)}get getFlag(){return this.#t(),this.entity.getFlag.bind(this.entity)}get removeFlag(){return this.#t(),this.entity.removeFlag.bind(this.entity)}isHovered(){let t=this.getRaw(),r=this.#e.getCorrectMousePos(),o=L.createRawRect({x:r.x,y:r.y,width:3,height:3});return L.rawCollision(t,o)}get pos(){return this.#t(),this.entity.pos}get x(){return this.#t(),this.pos.x}set x(t){this.#t(),this.pos.x=t}get y(){return this.#t(),this.pos.y}set y(t){this.#t(),this.pos.y=t}get width(){return this.#t(),this.entity.width}set width(t){this.#t(),this.entity.width=t}get height(){return this.#t(),this.entity.height}set height(t){this.#t(),this.entity.height=t}get z(){return this.#t(),this.entity.z}set z(t){this.#t(),this.entity.z=t}get left(){return this.#t(),this.entity.left}set left(t){this.#t(),this.entity.left=t}get right(){return this.#t(),this.entity.right}set right(t){this.#t(),this.entity.right=t}get top(){return this.#t(),this.entity.top}set top(t){this.#t(),this.entity.top=t}get bottom(){return this.#t(),this.entity.bottom}set bottom(t){this.#t(),this.entity.bottom=t}get toLocal(){return this.entity.toLocal.bind(this.entity)}get toWorld(){return this.entity.toWorld.bind(this.entity)}}x.KaylaInternalRect=c;class p{#e;#t;constructor(t){this.#r=t,this.#n=null,this.#e=new Map,t.on("update",this.tickHandler.bind(this)),this.drawHandler=this.drawHandler.bind(this),t.handleDraw=this.drawHandler,this.#t=null}getLayers(){return this.#e}#n;#r;getFibers(){return this.getEntities().map(t=>t.getFiber())}getEntities(){return Array.from(this.getScene().entities.values())}getScene(){return this.#r}getGame(){return this.#n}getOrCreateLayer(t,r=0){return this.#e.has(t)||this.#e.set(t,{name:t,z:r,visible:!0,rootFiber:null}),this.#e.get(t)}getSortedLayers(){return Array.from(this.#e.values()).filter(t=>t.visible).sort((t,r)=>t.z-r.z)}setLayerVisible(t,r){let o=this.#e.get(t);o&&(o.visible=r)}handleDraw(t){if(U)return;let r=this.getScene();if(r.paused)return;r.emit("draw",t);let o=this.getSortedLayers(),u=[];for(let g of o){if(!g.visible)continue;let C=g.rootFiber;if(!C)continue;let E=C.getAllChildrenNestedFlattened().flat().map(K=>K.entity).filter(Boolean);if(u.push(...E),t.save(),g.transform){let K=g.transform;t.setTransform(K.a,K.b,K.c,K.d,K.e,K.f)}g.blendMode&&(t.globalCompositeOperation=g.blendMode??"source-over");let z=Array.from(E).sort((K,T)=>K.z-T.z);for(let K of z)K.getFiber().lastLayer=g,K.handleDraw(t);t.restore()}let y=[...r.entities.values()].filter(g=>!u.includes(g));for(let g of y.sort((C,E)=>C.z-E.z))g.getFiber().lastLayer=null,g.handleDraw(t)}drawHandler(t){return this.handleDraw(t)}attachTo(t){t.addScene(this.#r),this.#n=t}async spawn(t){this.#t&&(this.#t.unuse(),this.#t=null);let r=this.createFiber(t);this.#t=r,await this.#n.delay(0),r.refresh()}getRoot(){return this.#t??null}createFiber(t){return new f(x.singleGlobalInstance,this,t)}detach(){this.#n&&this.#n.removeScene(this.#r)}tickHandler(){}}x.KaylaScene=p,x.singleGlobalInstance=new x.GlobalKayla})(G||={});var te=class{#e;constructor(e){this.Provider=this.#t.bind(this),this.#e=e}get defaultValue(){return this.#e}#t({value:e=this.defaultValue,children:n}){let s=ve();return re(()=>{s.contextInfo={instance:this,value:e}}),oe(this.Provider,()=>({value:e})),n}Provider;Consumer};function Ge(i){return new te(i)}var m=G.singleGlobalInstance,ze=m.useState.bind(m),ye=m.useRef.bind(m),He=m.useShouldRefresh.bind(m),re=m.useEffect.bind(m),Ue=m.useViewportEffect.bind(m),Re=m.useGlobalPointer.bind(m),$e=m.useGlobalPointer.bind(m),Oe=m.usePointer.bind(m),Ne=m.usePointer.bind(m),ie=m.useInitialization.bind(m),se=m.useRect.bind(m),Xe=m.useTick.bind(m),ae=m.usePaint.bind(m),oe=m.useExports.bind(m),D=m.useSelf.bind(m),xe=m.useFiberControl.bind(m),ve=m.useFiber.bind(m),qe=m.useEntity.bind(m),Be=m.useCurrentGame.bind(m),We=m.useCurrentRenderer.bind(m),ke=m.useCurrentScene.bind(m),je=m.useCurrentTicker.bind(m),Ye=m.useContext.bind(m),ge=Symbol("self_ref");var le=i=>{Promise.resolve(1).then(()=>{try{i()}catch(e){console.error(e)}})},we=({children:i})=>Array.isArray(i)?[...i]:i;function Qe(i){return G.createReassignableRef(i)}function Je(i){if(typeof i!="object"||typeof i=="function"||i===null)return i;let e={current:i};return new Proxy({},{get(s,a,l){return a==="reassignSelf"?d=>{e.current=d}:Reflect.get(e.current,a,l)},set(s,a,l,d){return Reflect.set(e.current,a,l,d)},has(s,a){return Reflect.has(e.current,a)},ownKeys(s){return Reflect.ownKeys(e.current)},getOwnPropertyDescriptor(s,a){return Reflect.getOwnPropertyDescriptor(e.current,a)},deleteProperty(s,a){return Reflect.deleteProperty(e.current,a)}})}function Ze(i){m.logLevel=i}function et(i){let e=i.name||"anonymous-custom-hook";return function(s){let a=m.current;if(!a)throw new Error(`Custom hook '${e}' must be called inside a Kayla component`);let l=s??{};return i.memoize!==!1?D(()=>(a.global.logLevel==="debug"&&a.global.logger.debug(`Custom hook '${e}' initialized (memoized) <${a.fc?.name||"anonymous"} key=${a.key||"no-key"}>`),i.onUse(a,m,l))):(a.global.logLevel==="debug"&&a.global.logger.debug(`Custom hook '${e}' running (non-memoized) <${a.fc?.name||"anonymous"} key=${a.key||"no-key"}>`),i.onUse(a,m,l))}}var Te;(e=>e.id="kayla")(Te||={});var tt=({name:i,z:e=0,blend:n,visible:s=!0,children:a,transform:l})=>{let d=ke(),f=ve();return ie(()=>{let h=d.getOrCreateLayer(i,e);return h.blendMode=n,h.visible=s,h.rootFiber=f,h.transform=l??null,()=>{d.getLayers().delete(i)}}),a},be=class extends DOMMatrix{#e;constructor(){super(),this.#e=new DOMPoint}transformV(e){this.#e.x=e.x,this.#e.y=e.y;let n=this.#e.matrixTransform(this);return new M(n.x,n.y)}inverseV(e){let n=this.inverse();this.#e.x=e.x,this.#e.y=e.y;let s=this.#e.matrixTransform(n);return new M(s.x,s.y)}};Reflect.set(globalThis,"Kayla",Ce);var nt;(n=>(n.Flex=({align:s="stretch",children:a,direction:l="row",gap:d=0,justify:f="start",wrap:h="nowrap",getHeight:c,getWidth:p,getCenterX:b,getCenterY:x,color:v})=>{let t=xe(),r=se(),o=D(()=>({recalc(){let u=Number(d)||0,y=b(),g=x(),C=p(),E=c();r.x=y,r.y=g,r.width=C,r.height=E;let K=t.getChildrenEntities().filter(Boolean).map(w=>w.getRect()).filter(w=>w.getFlag("flex-ignored")!==!0),T=l==="row",A=T?r.width:r.height,it=T?r.height:r.width,ue=0,$=0,he=[],q=[];K.forEach(w=>{let B=T?w.width:w.height;ue+B>A&&h==="wrap"?(he.push({height:$,items:q}),q=[w],ue=B,$=T?w.height:w.width):(q.push(w),ue+=B+u,$=Math.max($,T?w.height:w.width))}),he.push({height:$,items:q});let ce=0;he.forEach((w,B)=>{let F=w.items,_=F.reduce((R,W)=>R+(T?W.width:W.height),0)+u*(F.length-1),I=0;f==="center"&&(I=(A-_)/2),f==="end"&&(I=A-_),f==="space-between"&&(I=0),f==="space-around"&&(I=(A-_)/(F.length*2)),f==="space-evenly"&&(I=(A-_)/(F.length+1)),F.forEach((R,W)=>{R.z=r.z+1;let H=T?R.width:R.height,j=T?R.height:R.width,Y=0;s==="center"&&(Y=(w.height-j)/2),s==="end"&&(Y=w.height-j),s==="stretch"&&(T?R.height=w.height:R.width=w.height),T?(R.x=I+H/2,R.y=ce+Y+j/2):(R.x=ce+Y+j/2,R.y=I+H/2),f==="space-between"&&W<F.length-1?I+=H+u+(A-_)/(F.length-1):f==="space-around"?I+=H+u+(A-_)/F.length:f==="space-evenly"?I+=H+u+(A-_)/(F.length+1):I+=H+u}),ce+=w.height+u})}}));return ae((u,y)=>{y.preventDefault(),u.fillStyle=v,u.fillRect(r.left,r.top,r.width,r.height)}),re(()=>{le(()=>{o.recalc()})}),oe(n.Flex,()=>({controls:o})),a},n.GenericBox=({color:s,width:a=20,height:l=20,x:d=0,y:f=0})=>{let h=se();ie(()=>{h.width=a,h.height=l,h.x=d,h.y=f}),ae((c,p)=>{p.preventDefault(),c.fillStyle=s,c.fillRect(h.left,h.top,h.width,h.height)})}))(nt||={});function bt(i,e,...n){if(typeof i=="string")throw new Error("Cannot use intrinsic elements.");return ne(i,{...e,children:e.children??n})}function rt(i,e,...n){if(typeof i=="string")throw new Error("Cannot use intrinsic elements.");return ne(i,{...e,children:e.children??n})}function xt(i,e){return rt(i,e)}var vt=we;export{vt as Fragment,bt as jsx,xt as jsxDEV,rt as jsxs};
|
|
1
|
+
var Me=Object.defineProperty;var Le=(r,e)=>{for(var n in e)Me(r,n,{get:e[n],enumerable:!0})};var Se={};Le(Se,{JSX:()=>ke,KMatrix2D:()=>Ce,KaylaContext:()=>ce,KaylaElement:()=>Y,KaylaFragment:()=>Re,KaylaInternals:()=>H,KaylaRect:()=>D,Layer:()=>ot,Rect:()=>ut,Text:()=>Ae,createContext:()=>Oe,createElement:()=>Q,createGame:()=>He,createReassignableObject:()=>it,createRenderer:()=>Ue,createScene:()=>$e,createUseHook:()=>at,safeValueRepresentation:()=>J,self:()=>ve,setLogLevel:()=>st,tinyUID:()=>lt,useClick:()=>We,useContext:()=>tt,useCurrentGame:()=>Qe,useCurrentRenderer:()=>Ze,useCurrentScene:()=>Fe,useCurrentTicker:()=>et,useDisposableRef:()=>rt,useEffect:()=>Z,useEntity:()=>Je,useExports:()=>pe,useFiber:()=>Ke,useFiberControl:()=>Ee,useGlobalClick:()=>Ie,useGlobalPointer:()=>Be,useInitialization:()=>de,useNextStack:()=>fe,usePaint:()=>ee,usePointer:()=>je,useRect:()=>O,useRef:()=>we,useSelf:()=>z,useShouldRefresh:()=>Xe,useState:()=>Ne,useSubstep:()=>nt,useTick:()=>Ye,useUsing:()=>ht,useViewportEffect:()=>qe});var M=class{#e=new Map;constructor(){this.#e=new Map}on(e,n){let i=this.#e.get(e)||[];return i.push(n),this.#e.set(e,i),this}once(e,n){let i=(...a)=>{this.off(e,i),n(...a)};return this.on(e,i),this}off(e,n){let i=this.#e.get(e);if(!i)return this;let a=i.indexOf(n);return a>=0&&i.splice(a,1),this}emit(e,...n){let i=this.#e.get(e);if(!i||i.length===0){if(e==="error")throw n[0];return!1}return i.slice().forEach(a=>a(...n)),!0}removeAllListeners(e){return e?this.#e.delete(e):this.#e.clear(),this}listenerCount(e){return this.#e.get(e)?.length??0}},oe=class extends M{#e;#t;running;_rafId;_fps;_frameCount;_fpsTimer;_lastFrameTime;get canvas(){return this.#e}get ctx(){return this.#t}set canvas(e){this.#e=e,this.#t=e.getContext("2d"),this.updateCanvasResolution()}constructor(e,{viewportWidth:n,viewportHeight:i,cameraWidth:a,cameraHeight:l}={}){if(!P)throw new Error("Web-Only");super(),this.canvas=e,this.automatic=!0,this.#n=n??e.width,this.#r=i??e.height,this.#i=a??e.width,this.#s=l??e.height,this.running=!1,this._rafId=null,this._loop=this._loop.bind(this),this.updateCanvasResolution(),this._fps=60,this._frameCount=0,this._fpsTimer=0}automatic;retransform(){this.ctx.setTransform(1,0,0,1,0,0);let e=this.#i/this.#n,n=this.#s/this.#r;this.ctx.translate(this.#i/2,this.#s/2),this.ctx.scale(e,n),this.ctx.translate(-this.#n/2,-this.#r/2)}#n=0;#r=0;#i=0;#s=0;get viewportWidth(){return this.#n}set viewportWidth(e){this.#n=e,this.retransform(),this.emitViewportUpdate()}get width(){return this.#n}get height(){return this.#r}get centerX(){return this.#n/2}get centerY(){return this.#r/2}get left(){return 0}get top(){return 0}get right(){return this.#n}get bottom(){return this.#r}get viewportHeight(){return this.#r}set viewportHeight(e){this.#r=e,this.retransform(),this.emitViewportUpdate()}get cameraWidth(){return this.#i}set cameraWidth(e){this.#i=e,this.updateCanvasResolution(),this.retransform()}get cameraHeight(){return this.#s}set cameraHeight(e){this.#s=e,this.updateCanvasResolution(),this.retransform()}updateCanvasResolution(){this.canvas.width=this.#i,this.canvas.height=this.#s}emitViewportUpdate(){this.emit("viewport_update",{width:this.viewportWidth,height:this.viewportHeight})}applyTransform(){this.retransform()}get FPS(){return this._fps}_loop(){this.automatic&&this.update(),this._rafId=requestAnimationFrame(this._loop)}update(){if(!this.running||!P)return;let e=performance.now(),n=(e-(this._lastFrameTime??e))/1e3;this._lastFrameTime=e,this._frameCount++,this._fpsTimer+=n,this._fpsTimer>=1&&(this._fps=Math.round(this._frameCount/this._fpsTimer),this._frameCount=0,this._fpsTimer=0),this.ctx.clearRect(0,0,this.#i,this.#s),this.emit("draw",this.ctx)}start(){if(!this.running){if(!P||typeof globalThis.requestAnimationFrame>"u")throw new Error("Raf is not supported");this.running=!0,this._rafId=requestAnimationFrame(this._loop)}}stop(){if(!P||typeof globalThis.requestAnimationFrame>"u")throw new Error("Raf is not supported");this.running=!1,this._rafId!==null&&(cancelAnimationFrame(this._rafId),this._rafId=null)}},be=class extends M{setNow(e){this.#e=e}#e=0;__intervalId=null;__lastTime=0;constructor(e=16){super(),this.#t=e,this.speedHackDT=1}speedHackDT;get isRaf(){return this.tickInterval===1/0}#t=15;get tickInterval(){return this.#t}set tickInterval(e){this.#t=e,this.__intervalId&&(this.stop(),this.start())}now(){return this.#e}__tick(){let e=performance.now(),n=(e-this.__lastTime)/1e3*this.speedHackDT;this.__lastTime=e,!(P&&typeof this.__intervalId=="function"&&document.hidden)&&(this.#e+=n*1e3,this.emit("tick",n))}createTimeout(e){return new xe(e,this)}createTween(e,n=()=>{}){let i=new ge(e),a=(l=0)=>{if(i.finished){this.off("tick",a);return}i.update(l)};return i.on("finish",()=>{this.off("tick",a)}),i.on("delta",l=>{n(l)}),this.on("tick",a),i}start(){this.__intervalId===null&&(this.__lastTime=performance.now(),this.__intervalId=P&&!isFinite(this.tickInterval)?Ge(()=>this.__tick()).clear:setInterval(()=>this.__tick(),this.tickInterval))}stop(){this.__intervalId!==null&&(typeof this.__intervalId=="function"?this.__intervalId():clearInterval(this.__intervalId)),this.__intervalId=null}getSineMod(e,n=0){return .5+.5*Math.sin((this.now()%e/e+n)*2*Math.PI)}getLoopMod(e,n=0){return(this.now()+n*e)%e/e}},_e;(R=>{function r(f){return f===!0?1:0}R.booleanExport=r;function e(f){return f===0?!1:f===1}R.booleanImport=e;function n(f){return`${f.x}|${f.y}`}R.vec2Export=n;function i(f){let[t,s]=f.split("|"),o=parseFloat(t),u=parseFloat(s);if(isNaN(o)||isNaN(u))throw new Error(`Invalid Vector2 string: ${f}`);return new A(o,u)}R.vec2Import=i,R.booleanMap={mapExport:r,mapImport:e};function l(f){return t=>Number(t.toFixed(f))}R.createRounder=l;function c(f=10){return{mapExport(t){return Math.round(t/f)},mapImport(t){return t*f}}}R.createLowPrecision=c;function p(f){return Math.round(f)}R.lightWeightRounder=p;function h(f=100){return{mapExport(t){return Math.round(t*f)},mapImport(t){return t/f}}}R.createPercent=h;function d(f){let t=new Map(Object.entries(f));return{mapExport:s=>t.get(s)??null,mapImport:s=>Array.from(t.entries()).find(([o,u])=>u===s)?.[0]??null}}R.createLookup=d;function m(f){let t=f*(180/Math.PI);return Math.round((t%360+360)%360)}R.radToDeg=m;function x(f){return f*(Math.PI/180)}R.degToRad=x,R.angleRadToDeg={mapExport:m,mapImport:x};function S(f=10){let t=c(f);return{mapExport(s){return t.mapExport(m(s))},mapImport(s){return t.mapImport(x(s))}}}R.createLowPrecisionRadToDeg=S})(_e||={});var q=class r extends M{name="";scaleRotate=0;scale=1;constructor(e,n=0,i=0){super(),this.autoTranslate=!1,this.name=e,this.z=0,this.___pos=new A(n,i),this.nonSerializableProperties=[],this.nonSerializableProperties.push("___pos","autoTranslate","arraySerializeMap"),this.forceSerializableProperties=[],this.forceSerializableProperties.push("x","y")}arraySerializeMap;autoTranslate;z;___pos;nonSerializableProperties;forceSerializableProperties;get pos(){return this.___pos}get x(){return this.pos.x}get y(){return this.pos.y}set x(e){this.pos.x=e}set y(e){this.pos.y=e}handleUpdate(e){if(this.update)try{this.emit("update",e),this.update(e)}catch(n){this.emit("error",n)}}handleDraw(e){if(!(_||!this.draw)){e.save(),this.autoTranslate&&e.translate(this.x,this.y);try{this.emit("draw",e),this.draw(e)}catch(n){this.emit("error",n)}e.restore()}}serialize(){if(Array.isArray(this.arraySerializeMap))return this.arraySerializeMap.map(([a,{mapExport:l}])=>{let c=Reflect.get(this,a);return l?l(c):c});let e=["_events","_eventsCount","_maxListeners","nonSerializableProperties","forceSerializableProperties"],n=[...Reflect.ownKeys(this),...this.forceSerializableProperties].filter(a=>!this.nonSerializableProperties.includes(a)&&!e.includes(a.toString())),i=Object.fromEntries(n.map(a=>{let l=Reflect.get(this,a);if(_&&typeof l=="number"){let c=l.toString().split("."),h=(c[1]?c[1].length:0)>2?Number(l.toFixed(2)):l;return[a,h]}return[a,l]}));return JSON.parse(JSON.stringify(i))}toLocal(e){return e.subtract(this.pos)}toWorld(e){return e.add(this.pos)}deserializeArray(e){return r.deserializeArray(this.arraySerializeMap,e)}static deserializeArray(e,n){if(!e||!Array.isArray(n))return n;let i={};for(let a=0;a<n.length;a++){let l=e[a];if(!l)break;let[c,{mapImport:p}]=l,h=n[a];if(p&&(h=p(h)),typeof c!="string")break;try{Reflect.set(i,c,h)}catch(d){console.error(d)}}return i}},le=class extends M{name="";entities=new Map;paused=!0;constructor(e){super(),this.name=e}handleUpdate(e){if(!this.paused){this.emit("update",e);for(let n of this.entities.values())n.handleUpdate(e)}}handleDraw(e){if(!_&&!this.paused){this.emit("draw",e);for(let n of[...this.entities.values()].sort((i,a)=>i.z-a.z))n.handleDraw(e)}}addEntity(e){if(!(e instanceof q))throw new Error("invalid entity");if(!e.name)throw new Error("Entity must have a name.");this.entities.set(e.name,e)}removeEntity(e){if(!(e instanceof q))throw new Error("invalid entity");this.entities.delete(e.name)}getEntity(e){return this.entities.get(e)}},ue=class{scenes;ticker;get centerX(){return this.width/2}get centerY(){return this.height/2}get left(){return 0}get top(){return 0}get right(){return this.width}get bottom(){return this.height}width;height;constructor(e,n,i=16){this.ticker=new be(i),this.scenes=new Map,this.width=e,this.height=n,this.ticker.on("tick",a=>{for(let l of this.scenes.values())l.paused||l.handleUpdate(a)})}addScene(e){if(!e.name)throw new Error("Scene must have a name.");e.paused=!1,this.scenes.set(e.name,e)}removeScene(e){e&&(e.paused=!0),this.scenes.delete(e.name)}now(){return this.ticker.now()}start(){this.ticker.start()}stop(){this.ticker.stop()}},I={lerp(r,e,n){return r+(e-r)*n},clamp(r,e,n){return Math.min(n,Math.max(e,r))},clamp01(r){return Math.min(1,Math.max(0,r))},easeLinear(r){return r},easeInQuad(r){return r*r},easeOutQuad(r){return 1-(1-r)*(1-r)},easeInOutQuad(r){return r<.5?2*r*r:1-Math.pow(-2*r+2,2)/2},easeInSine(r){return 1-Math.cos(r*Math.PI/2)},easeOutSine(r){return Math.sin(r*Math.PI/2)},easeInOutSine(r){return-(Math.cos(Math.PI*r)-1)/2},easeInExpo(r){return r===0?0:Math.pow(2,10*r-10)},easeOutExpo(r){return r===1?1:1-Math.pow(2,-10*r)},easeInOutExpo(r){return r===0?0:r===1?1:r<.5?Math.pow(2,20*r-10)/2:(2-Math.pow(2,-20*r+10))/2},smoothstep(r){return r=I.clamp(r,0,1),r*r*(3-2*r)},randomLerp(r,e){return I.lerp(r,e,Math.random())},randomInt(r,e){return Math.floor(Math.random()*(e-r+1))+r},randomArrayValue(r){return r[I.randomInt(0,r.length-1)]},createBezier(r,e,n,i){function a(p,h,d,m,x){let v=1-p;return v*v*v*h+3*v*v*p*d+3*v*p*p*m+p*p*p*x}function l(p,h,d,m,x){let v=1-p;return 3*v*v*(d-h)+6*v*p*(m-d)+3*p*p*(x-m)}function c(p){let h=p;for(let d=0;d<6;d++){let m=a(h,0,r,n,1),x=l(h,0,r,n,1);if(x===0)break;h-=(m-p)/x}return I.clamp(h,0,1)}return function(h){h=I.clamp(h,0,1);let d=c(h);return a(d,0,e,i,1)}},lengthSquared(...r){return r.reduce((e,n)=>e+n*n,0)},normalizeRad(r){let e=2*Math.PI;return r=r%e,r<0&&(r+=e),r},angleInvertY(r){return I.normalizeRad(-r)},degToRadFlipY(r){return I.angleInvertY(r*Math.PI/180)},minimalAngularDirection(r,e){r=I.normalizeRad(r),e=I.normalizeRad(e);let n=I.normalizeRad(e-r),i=I.normalizeRad(r-e);return n<=i?1:-1}},ge=class extends M{constructor({delta:e,ms:n,easing:i}){super(),this.delta=e,this.duration=n,this.elapsed=0,this.easing=i??(a=>a),this.lastValue=0,this.finished=!1}delta;duration;elapsed;lastValue;finished;easing;update(e){this.elapsed+=e*1e3;let n=I.clamp(this.elapsed/this.duration,0,1),i=this.easing(n),a=this.delta*i,l=a-this.lastValue;this.lastValue=a,this.emit("delta",l),n>=1&&(this.finished=!0,this.emit("finish",void 0))}},he=class extends q{constructor(e,n=0,i=0,a=50,l=50){super(e,n,i),this.width=a,this.height=l}width;height;get left(){return this.x-this.width/2}set left(e){this.x=e+this.width/2}get right(){return this.x+this.width/2}set right(e){this.x=e-this.width/2}get top(){return this.y-this.height/2}set top(e){this.y=e+this.height/2}get bottom(){return this.y+this.height/2}set bottom(e){this.y=e-this.height/2}get lx(){return 0}get ly(){return 0}get lleft(){return-this.width/2}get lright(){return this.width/2}get ltop(){return-this.height/2}get lbottom(){return this.height/2}isCollidingWith(e){return!(this.right<e.left||this.left>e.right||this.bottom<e.top||this.top>e.bottom)}color="rgba(0, 0, 255, 0.3)";draw(e){e.translate(this.x,this.y),e.rotate(this.scaleRotate),e.fillStyle=this.color,e.fillRect(-this.width/2,-this.height/2,this.width,this.height)}},xe=class extends M{duration;ticker;elapsed;finished;_resolve;promise;_timeoutId;constructor(e,n=null){super(),this.duration=e,this.ticker=n,this.elapsed=0,this.finished=!1,this._resolve=null,this.promise=new Promise(i=>this._resolve=i),this.update=this.update.bind(this),this.ticker&&this.ticker.on("tick",this.update)}update(e=0){this.finished||(this.elapsed+=e*1e3,this.elapsed>=this.duration&&this.finish())}finish(){this.finished||(this.finished=!0,this.emit("finish",void 0),this._resolve&&this._resolve(),this.ticker&&this.ticker.off("tick",this.update))}start(){return this.ticker||(this._timeoutId=setTimeout(()=>this.finish(),this.duration)),this}cancel(){this.finished||(this.finished=!0,!this.ticker&&this._timeoutId!=null&&clearTimeout(this._timeoutId),this.ticker&&this.ticker.off("tick",this.update))}then(e,n){return this.promise.then(e,n)}after(e,n){return this.promise.then(e,n)}},A=class r{constructor(e=0,n=0){this.x=e,this.y=n}x;y;toJSON(){return{x:this.x,y:this.y,vec2:!0}}static isVec2(e){return e&&typeof e=="object"&&"x"in e&&"y"in e&&e.vec2===!0}static fromSerialized(e){return this.isVec2(e)?new this(e.x,e.y):null}rotate(e){let n=Math.cos(e),i=Math.sin(e);return new r(this.x*n-this.y*i,this.x*i+this.y*n)}static from(e){return new r(Math.cos(e),Math.sin(e))}isEmpty(){return Math.abs(this.x)<.01&&Math.abs(this.y)<.01}get angle(){return Math.atan2(this.y,this.x)}angleTo(e){return Math.atan2(e.y-this.y,e.x-this.x)}get length(){return Math.hypot(this.x,this.y)}get lengthSquared(){return this.x*this.x+this.y*this.y}normalized(){let e=this.length;return e===0?new r(0,0):new r(this.x/e,this.y/e)}consume(e){let n=this.length;n<=e?(this.x=0,this.y=0):this.overwite(this.scale((n-e)/n))}project(e){return e.scale(this.dotNormalized(e))}reflect(e){let n=this.dot(e);return this.subtract(e.scale(2*n))}dotNormalized(e){let n=this.normalized(),i=e.normalized();return n.x*i.x+n.y*i.y}lengthSquaredTo(e){let n=this.x-e.x,i=this.y-e.y;return n*n+i*i}dot(e){return this.x*e.x+this.y*e.y}distanceTo(e){return Math.hypot(this.x-e.x,this.y-e.y)}distanceToCheap(e){let n=this.x-e.x,i=this.y-e.y;return n*n+i*i}directionTo(e){return new r(e.x-this.x,e.y-this.y).normalized()}add(e){return new r(this.x+e.x,this.y+e.y)}addRaw(e){return new r(this.x+e,this.y+e)}overwite(e){this.x=e.x,this.y=e.y}subtract(e){return new r(this.x-e.x,this.y-e.y)}scale(e){return new r(this.x*e,this.y*e)}toString(){return`Vector2(${this.x}, ${this.y})`}clone(){return new r(this.x,this.y)}};function De(){return typeof process<"u"&&process.release?.name==="node"?"node":typeof window<"u"||typeof self<"u"?"web":"unknown"}var Te=De(),_=Te==="node",P=Te==="web",B=class r{static unlock(){P&&this.audioCtx.state!=="running"&&this.audioCtx.resume()}static audioCtx=P?new AudioContext:null;static masterGain=P?this.audioCtx.createGain():null;static musicGain=P?this.audioCtx.createGain():null;static sfxGain=P?this.audioCtx.createGain():null;static{P&&(this.masterGain.gain.value=1,this.musicGain.gain.value=1,this.sfxGain.gain.value=1,this.sfxGain.connect(this.masterGain),this.musicGain.connect(this.masterGain),this.masterGain.connect(this.audioCtx.destination))}static get SFX_VOLUME(){return this.sfxGain.gain.value}static get MUSIC_VOLUME(){return this.musicGain.gain.value}static get VOLUME(){return this.masterGain.gain.value}static set SFX_VOLUME(e){this.sfxGain.gain.value=e}static set MUSIC_VOLUME(e){this.musicGain.gain.value=e}static set VOLUME(e){this.masterGain.gain.value=e}static noteToHz(e){return this.tuningFreq*Math.pow(2,(e-9)/12)}static tuningFreq=440;static audioBufferCache=new Map;static loops=new Map;static sfsx=new Map;static loopIdCounter=0;static CACHE_NAME="lia-audio-cache-v1";static async preLoad(e){if(this.audioBufferCache.has(e))return this.audioBufferCache.get(e);let n=r.CACHE_NAME,i,a;if(typeof caches<"u"&&(a=await caches.open(n),i=await a.match(e)),!i){if(i=await fetch(e),!i.ok)throw new Error(`Failed to fetch ${e}`);a&&await a.put(e,i.clone())}let l=await i.arrayBuffer(),c=await this.audioCtx.decodeAudioData(l);return this.audioBufferCache.set(e,c),c}static async getOnlyDownloadedCache(e){let n=r.CACHE_NAME;return await(await caches.open(n)).match(e)}static getCached(e){return this.audioBufferCache.get(e)||null}static async playSound(e,n=.2,i=1,a=!0){try{this.sfsx.has(e)&&this.sfsx.get(e).source.stop(),this.audioBufferCache.has(e)||await this.preLoad(e);let l=this.getCached(e);if(!l)return;let c=new X(l);c.buffer=l;let p=1-.12,h=1+.12;c.playbackRate=i??p+Math.random()*(h-p);let d=this.audioCtx.createGain();d.gain.value=n,c.tempGain=d,c.connect(d),d.connect(this.sfxGain),c.onended=()=>{c.disconnect(),d.disconnect()},c.start(),a&&this.sfsx.set(e,{source:c,gain:d})}catch(l){console.error(l)}}static async playLoop(e,n=1,{loopStart:i=0,loopEnd:a=null,exclusive:l=!0,skipMS:c=0}={}){if(l)for(let x of this.loops.keys())this.stopLoop(x);this.audioBufferCache.has(e)||await this.preLoad(e);let p=this.getCached(e);if(!p)return;let h=new X(p);h.buffer=p,h.loop=!0,typeof i=="number"&&(h.loopStart=i),typeof a=="number"&&(h.loopEnd=a);let d=this.audioCtx.createGain();d.gain.value=n,h.tempGain=d,h.playbackRate=1,h.onended=()=>{h.disconnect(),d.disconnect()},h.connect(d),d.connect(this.musicGain),h.start(0,c/1e3);let m=++this.loopIdCounter;return this.loops.set(m,{source:h,gain:d}),m}static stopLoop(e){let n=this.loops.get(e);n&&(n.source.stop(),n.source.notIndependent||(n.source.disconnect(),n.gain.disconnect()),this.loops.delete(e))}static async createLiaSource(e,{volume:n=1,speed:i=1,loop:a=!1,loopStart:l=0,loopEnd:c=null,isMusic:p=!1,gain:h=null}={}){try{this.audioBufferCache.has(e)||await this.preLoad(e);let d=this.getCached(e);if(!d)return null;let m=new X(d);m.loop=a,m.loopStart=l,m.loopEnd=typeof c=="number"?c:d.duration,m.playbackRate=i;let x=this.audioCtx.createGain();return x.gain.value=n,m.connect(x),m.tempGain=x,x.connect(h||(p?this.musicGain:this.sfxGain)),m.onended=()=>{m.disconnect(),x.disconnect()},m}catch(d){return console.error("Failed to create LiaAudioSrc:",d),null}}};var X=class{numberOfInputs;numberOfOutputs;constructor(e,n=B.audioCtx){this.context=n,this.buffer=e,this.source=null,this.startTime=0,this.pauseTime=0,this.playbackRate=1,this.isPlaying=!1,this.loop=!1,this.output=P?n.createGain():null,this.output.gain.value=1,this.channelCount=2,this.channelCountMode="max",this.channelInterpretation="speakers",this.numberOfInputs=0,this.numberOfOutputs=1,this.onended=null}channelCount;channelCountMode;channelInterpretation;onended;source;buffer;context;_createSource(){this.source&&(this.source.onended=null);let e=this.context.createBufferSource();return e.buffer=this.buffer,e.playbackRate.value=this.playbackRate,e.loop=this.loop,e.loopStart=this.loopStart,e.loopEnd=this.loopEnd>0?this.loopEnd:this.buffer.duration,e.connect(this.output),this.source=e,e.onended=()=>{this.source===e&&(this.isPlaying&&!this.loop&&(this.isPlaying=!1,this.pauseTime=0),typeof this.onended=="function"&&this.onended())},e}play({fadeIn:e=0,offset:n=null}={}){let i=n!==null?n:this.pauseTime;if(this.source){this.source.onended=null;try{this.source.stop()}catch{}}this.source=this._createSource(),this.startTime=this.context.currentTime-i/this.playbackRate,this.source.start(0,i),e>0?(this.output.gain.setValueAtTime(0,this.context.currentTime),this.output.gain.linearRampToValueAtTime(1,this.context.currentTime+e)):this.output.gain.setValueAtTime(1,this.context.currentTime),this.isPlaying=!0}start(e=0,n=0,i){this.isPlaying||(this.source=this._createSource(),this.startTime=this.context.currentTime+e-n/this.playbackRate,i!==void 0?this.source.start(this.context.currentTime+e,n,i):this.source.start(this.context.currentTime+e,n),this.pauseTime=n,this.isPlaying=!0)}pause({fadeOut:e=0}={}){if(!this.isPlaying)return;let n=this.getElapsed()/1e3;if(this.loop&&this.loopEnd>this.loopStart){let i=this.loopEnd-this.loopStart;n=this.loopStart+(n-this.loopStart)%i}if(this.isPlaying=!1,e>0){let i=this.context.currentTime;this.output.gain.setValueAtTime(this.output.gain.value,i),this.output.gain.linearRampToValueAtTime(0,i+e),setTimeout(()=>{if(this.source){this.source.onended=null;try{this.source.stop()}catch{}}this.pauseTime=n,this.output.gain.setValueAtTime(1,this.context.currentTime)},e*1e3)}else{if(this.source){this.source.onended=null;try{this.source.stop()}catch{}}this.pauseTime=n}}getElapsed(){return this.isPlaying?(this.context.currentTime-this.startTime)*this.playbackRate*1e3:this.pauseTime*1e3}setSpeed(e){if(e<=0)throw new Error("Playback rate must be positive");let n=this.getElapsed()/1e3;this.playbackRate=e,this.isPlaying&&(this.pause(),this.pauseTime=n,this.play())}setLoop(e=!0){this.loop=e,this.source&&(this.source.loop=e)}loop;playbackRate;startTime;tempGain=null;connect(e,n=0,i=0){if("value"in e)this.output.connect(e,n);else return this.output.connect(e,n,i),e}disconnect(e,n,i){e===void 0?this.output.disconnect():this.output.disconnect(e,n,i)}output;stop(e=0){if(this.notIndependent)return this.pause();if(!this.source)return;let n=this.context.currentTime+e;this.source.stop(n),this.isPlaying=!1,this.notIndependent||(this.pauseTime=0)}pauseTime;isPlaying;notIndependent=!1;loopStart=0;loopEnd=0},Ve={osc:{enabled:!0,type:"sine",freq:440,detune:0},noise:{enabled:!1,level:.5},ampEnv:{attack:.005,decay:.1,sustain:0,release:.1,volume:.3},pitchEnv:{amount:0,decay:.2},filter:{enabled:!1,type:"lowpass",freq:1200,Q:1,envAmount:0,decay:.2},lfo:{enabled:!1,target:"freq",rate:8,depth:20},duration:.4},G=class r{constructor(e={}){if(_)return this;this.ctx=B.audioCtx,this.cfg=structuredClone(Ve),Object.assign(this.cfg,e)}ctx;cfg;play(e=B.sfxGain){if(_)throw new Error("Cannot use Web APIs on node.");let n=this.ctx,i=n.currentTime,a=this.cfg,l=n.createGain();l.gain.setValueAtTime(1e-4,i);let c=a.ampEnv;l.gain.exponentialRampToValueAtTime(c.volume,i+c.attack),l.gain.exponentialRampToValueAtTime(Math.max(1e-4,c.sustain*c.volume),i+c.attack+c.decay),l.gain.exponentialRampToValueAtTime(1e-4,i+a.duration+c.release);let p=l,h;a.filter.enabled&&(h=n.createBiquadFilter(),h.type=a.filter.type,h.frequency.value=a.filter.freq,h.Q.value=a.filter.Q,h.connect(l),p=h);let d;if(a.osc.enabled){if(d=n.createOscillator(),d.type=a.osc.type,d.frequency.value=a.osc.freq,d.detune.value=a.osc.detune,a.pitchEnv.amount!==0){let f=Math.pow(2,a.pitchEnv.amount/12);d.frequency.exponentialRampToValueAtTime(a.osc.freq*f,i+a.pitchEnv.decay)}d.connect(p),d.start(i),d.stop(i+a.duration+c.release)}let m;if(a.noise.enabled){let f=n.sampleRate*a.duration,t=n.createBuffer(1,f,n.sampleRate),s=t.getChannelData(0);for(let o=0;o<f;o++)s[o]=(Math.random()*2-1)*a.noise.level;m=n.createBufferSource(),m.buffer=t,m.connect(p),m.start(i),m.stop(i+a.duration+c.release)}let x,v;a.lfo.enabled&&d&&(x=n.createOscillator(),x.frequency.value=a.lfo.rate,v=n.createGain(),v.gain.value=a.lfo.depth,x.connect(v),a.lfo.target==="freq"?v.connect(d.frequency):a.lfo.target==="gain"?v.connect(l.gain):a.lfo.target==="filter"&&h&&v.connect(h.frequency),x.start(i),x.stop(i+a.duration)),l.connect(e);let S=[d,m,x,v,h,l],R=i+a.duration+c.release;setTimeout(()=>{S.forEach(f=>f?.disconnect())},(R-n.currentTime)*1e3)}getConfig(){return structuredClone(this.cfg)}setConfig(e){return Object.assign(this.cfg,e),this}getKey(e){return this.cfg[e]}setKey(e,n){return Object.assign(this.cfg[e],n),this}setFreq(e){return this.cfg.osc.freq=e,this}setWave(e){return this.cfg.osc.type=e,this}setVolume(e){return this.cfg.ampEnv.volume=e,this}setAmpEnv(e,n,i,a){return Object.assign(this.cfg.ampEnv,{attack:e,decay:n,sustain:i,release:a}),this}setPitchEnv(e,n){return Object.assign(this.cfg.pitchEnv,{amount:e,decay:n}),this}setNoiseEnabled(e){return this.cfg.noise.enabled=e,this}setNoiseLevel(e){return this.cfg.noise.level=e,this}setFilterEnabled(e){return this.cfg.filter.enabled=e,this}setFilter(e,n,i){return Object.assign(this.cfg.filter,{type:e,freq:n,Q:i,enabled:!0}),this}setLFOEnabled(e){return this.cfg.lfo.enabled=e,this}setLFO(e,n,i){return Object.assign(this.cfg.lfo,{target:e,rate:n,depth:i,enabled:!0}),this}setDuration(e){return this.cfg.duration=e,this}clone(){return new r(structuredClone(this.cfg))}},ft=new G({osc:{enabled:!0,type:"square",freq:900,detune:0},ampEnv:{attack:.002,decay:.04,sustain:0,release:.02,volume:.15},duration:.05}),mt=new G({osc:{enabled:!0,type:"sine",freq:600,detune:0},ampEnv:{attack:.01,decay:.08,sustain:0,release:.04,volume:.12},duration:.1}),yt=new G({osc:{enabled:!0,type:"triangle",freq:500,detune:0},pitchEnv:{amount:12,decay:.15},ampEnv:{attack:.01,decay:.12,sustain:0,release:.05,volume:.25},duration:.18}),bt=new G({osc:{enabled:!0,type:"sawtooth",freq:1200,detune:0},pitchEnv:{amount:-24,decay:.3},ampEnv:{attack:.005,decay:.25,sustain:0,release:.05,volume:.3},duration:.35}),gt=new G({osc:{enabled:!0,type:"square",freq:180,detune:0},noise:{enabled:!0,level:.4},ampEnv:{attack:.002,decay:.15,sustain:0,release:.05,volume:.35},duration:.2});function j(r=12){let e=Date.now().toString(36),n=crypto.getRandomValues(new Uint8Array(4)),i=Array.from(n).map(a=>a.toString(36).padStart(2,"0")).join("");return(e+i).slice(0,r)}function Ge(r){let e=!0;function n(){e&&(r(),requestAnimationFrame(n))}return requestAnimationFrame(n),{clear:()=>e=!1}}function ze(){return _?!1:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}var xt=ze(),W=class r{static defaultInterval=1e3/60;handler;interval;accumulated;constructor(e=r.defaultInterval,n){this.handler=n??null,this.interval=e,this.accumulated=0}update(e){if(!this.handler)throw new Error("Missing handler.");if(this.interval<=.001){this.handler(this,0);return}this.accumulated+=e*1e3;let n=0;for(;this.accumulated>=this.interval;)this.accumulated-=this.interval,this.handler(this,n),n++}};function He({width:r,height:e,updateHz:n="frames"}){return new H.KaylaGame(r,e,n==="frames"?1/0:n)}function $e(r){let e=new le(r);return new H.KaylaScene(e)}function Ue(r,e){return new H.KaylaRenderer(r,e)}function Q(r,e){if(typeof r!="function")throw new Error("Invalid Element Type.");let n=e??{};n.key??=r.name+"_"+j();let i=Array.isArray(e.children)?[...e.children]:e.children?[e.children]:[];for(let l=0;l<i.length;l++){let c=i[l];if(typeof c!="object"||!(c instanceof Y))if(typeof c=="string")i[l]=Q(Ae,{color:"white",label:c,parentRect:null,x:0,y:0,size:20,align:"center"});else throw new Error("Invalid JSX Child Parameter.")}n.children=i;let a=new Y;return a.type=r,a.props=n,a}var Y=class{type;props},D;(i=>{function r(a,l){return!(a.right<l.left||a.left>l.right||a.bottom<l.top||a.top>l.bottom)}i.rawCollision=r;function e(a,l,c){let p=l*Math.PI/180,h=Math.cos(p),d=Math.sin(p),m=1/0;return h>0&&(m=Math.min(m,(c.right-a.x)/h)),h<0&&(m=Math.min(m,(c.left-a.x)/h)),d>0&&(m=Math.min(m,(c.bottom-a.y)/d)),d<0&&(m=Math.min(m,(c.top-a.y)/d)),A.from(l).scale(m)}i.getCurrToBound=e;function n(a){let{left:l,right:c,top:p,bottom:h,width:d,height:m,x=0,y:v=0}=a;if(d===null||m===null)throw new Error("width and height are required");let S,R;if(l!=null&&c!=null){if(Math.abs(c-l-d)>1e-6)throw new Error("left, right, and width mismatch");S=l}else x!=null?S=x-d/2:l!=null?S=l:c!=null?S=c-d:S=0;if(p!=null&&h!=null){if(Math.abs(h-p-m)>1e-6)throw new Error("top, bottom, and height mismatch");R=p}else v!=null?R=v-m/2:p!=null?R=p:h!=null?R=h-m:R=0;return{left:S,right:S+d,top:R,bottom:R+m,width:d,height:m,x:S+d/2,y:R+m/2}}i.createRawRect=n})(D||={});var H;(R=>{class r extends ue{#e;#t;constructor(t,s,o){super(t,s,o),this.#e=new Set,this.#t=!1}delay(t){return this.ticker.createTimeout(t)}get started(){return this.#t}start(){if(!this.#t){for(let t of this.#e)t.start();this.#t=!0,super.start()}}stop(){if(this.#t){for(let t of this.#e)t.stop();this.#t=!1,super.stop()}}addRenderer(t){this.#e.has(t)||(this.#e.add(t),this.#t&&t.start(),t.game=this)}get mainRenderer(){return[...this.#e].at(0)}getRenderers(){return[...this.#e]}deleteRenderer(t){this.#e.has(t)&&(this.#e.delete(t),this.#t&&t.stop(),delete t.game)}}R.KaylaGame=r;class e extends oe{game;pointerX;pointerY;pointerEvents;onPointerDown;onPointerUp;onPointerCancel;onPointerMove;isKaylaDisabled;constructor(t,s={}){super(t),this.isKaylaDisabled=s.disableKaylaBehavior,this.useDraw=this.useDraw.bind(this),this.on("draw",o=>{if(!s.noAutoDraw&&this.game)for(let u of this.game.scenes.values())u.handleDraw(o)}),this.pointerX=0,this.pointerY=0,this.pointerEvents=new M,this.pointerPosUpdater=this.pointerPosUpdater.bind(this),this.onPointerDown=o=>this.onPointerAll(o,"down"),this.onPointerUp=o=>this.onPointerAll(o,"up"),this.onPointerCancel=o=>this.onPointerAll(o,"cancel"),this.onPointerMove=o=>this.onPointerAll(o,"move")}pointerPosUpdater(t){this.pointerX=t.clientX,this.pointerY=t.clientY}onPointerAll(t,s){this.pointerPosUpdater(t);let o=e.getClickType(t);if(o!=="invalid"||s==="move"||s==="cancel"){t.preventDefault();let u=this.getMousePos();this.pointerEvents.emit("action",u,o,s)}}static getClickType(t){switch(t.button){case 0:return"left";case 1:return"middle";case 2:return"right";default:return"invalid"}}listenPointerUpdates(){this.canvas.addEventListener("pointermove",this.pointerPosUpdater),this.canvas.addEventListener("pointerdown",this.onPointerDown),this.canvas.addEventListener("pointerup",this.onPointerUp),this.canvas.addEventListener("pointercancel",this.onPointerCancel),this.canvas.addEventListener("pointermove",this.onPointerMove)}unlistenPointerUpdates(){this.canvas.removeEventListener("pointermove",this.pointerPosUpdater),this.canvas.removeEventListener("pointerdown",this.onPointerDown),this.canvas.removeEventListener("pointerup",this.onPointerUp),this.canvas.removeEventListener("pointermove",this.onPointerMove)}pointerPosToWorldPos(t,s){let o=this.canvas.getBoundingClientRect(),u=(t-o.left)/o.width,b=(s-o.top)/o.height,g=this.cameraWidth/o.width,w=this.cameraHeight/o.height,K=u*this.viewportWidth*this.cameraWidth/o.width/g,E=b*this.viewportHeight*this.cameraHeight/o.height/w;return new A(K,E)}camToViewportPos(t,s){let o=t/this.cameraWidth*this.viewportWidth,u=s/this.cameraHeight*this.viewportHeight;return new A(o,u)}pointerPosToWorldPosOLD(t,s){let o=this.canvas.getBoundingClientRect(),u=(t-o.left)/o.width,b=(s-o.top)/o.height,g=u*this.viewportWidth*this.cameraWidth/o.width,w=b*this.viewportHeight*this.cameraHeight/o.height;return new A(g,w)}getMousePos(){return this.pointerPosToWorldPos(this.pointerX,this.pointerY)}useDraw(t){let s=o=>{t(o,new l)};return this.on("draw",s),()=>{this.off("draw",s)}}attachTo(t){t.addRenderer(this),this.game=t}detach(){this.game&&this.game.deleteRenderer(this)}}R.KaylaRenderer=e;let n=Symbol("unlock_substepper");class i{#e;constructor(t){this.#e=t}[n](){return this.#e}get interval(){return this.#e.interval}}class a{current;saves;constructor(){this.saves=[]}useTick(t,s=null){if(!this.current)throw new Error("Hook 'useTick' must be executed in the top level scope of a component.");let o=t;this.current.onTick[this.current.useStepCallIndex]=o,this.current.onTickSubsteps[this.current.useStepCallIndex]=s,this.current.useStepCallIndex++}usePaint(t){if(!this.current)throw new Error("Hook 'usePaint' must be executed in the top level scope of a component.");this.current.onPaint[this.current.useDrawCallIndex]=t,this.current.useDrawCallIndex++}useEntity(){if(!this.current)throw new Error("Hook 'useEntity' must be executed in the top level scope of a component.");return we(ve)}useSelf(t){if(!this.current)throw new Error("Hook 'useSelf' must be executed in the top level scope of a component.");let s=we(null);return(s.current===null||s.current===void 0)&&(s.current=t()),s.current}useInitialization(t){if(!this.current)throw new Error("Hook 'useInitialization' must be executed in the top level scope of a component.");let s=this.current;s.onInits[this.current.useInitCallIndex]=t,s.useInitCallIndex++}useRect(t="self"){if(!this.current)throw new Error("Hook 'useRect' must be executed in the top level scope of a component.");if(t==="disposableSelf")return new R.KaylaInternalRect(this.current);let s=null;if(t==="self"&&(s=this.current),t==="parent"&&(s=this.current.detectedParent),!s)throw new Error("Missing valid target fiber.");return z(()=>new R.KaylaInternalRect(s))}useSubstep(t){t==="default"&&(t=W.defaultInterval);let s=z(()=>{let u=new W(0);return new i(u)}),o=s[n]();return o.interval=t,s}useFiber(){if(!this.current)throw new Error("Hook 'useFiber' must be executed in the top level scope of a component.");return z(()=>this.current)}useFiberControl(){if(!this.current)throw new Error("Hook 'useFiberControl' must be executed in the top level scope of a component.");let t=this.current;return z(()=>({refresh:()=>t.refresh(),toString(){return t.toString()},get childrenCount(){return t.lastChildren.length},setMaxChildren:s=>{t.setMaxChildren(s)},getMaxChildren:()=>t.getMaxChildren(),get maxSafeChildren(){return t.maxSafeChildren},get key(){return t.key},get getChildrenEntities(){return t.getChildrenEntities.bind(t)},get getEntityChain(){return t.getEntityChain.bind(t)},get getFiberChain(){return t.getFiberChain.bind(t)}}))}useCurrentTicker(){if(!this.current)throw new Error("Hook 'useCurrentTicker' must be executed in the top level scope of a component.");return this.current.getAttachedGame().ticker}useCurrentRenderer(){if(!this.current)throw new Error("Hook 'useCurrentRenderer' must be executed in the top level scope of a component.");return this.current.getAttachedGame().mainRenderer}useCurrentGame(){if(!this.current)throw new Error("Hook 'useCurrentGame' must be executed in the top level scope of a component.");return this.current.getAttachedGame()}useCurrentScene(){if(!this.current)throw new Error("Hook 'useCurrentScene' must be executed in the top level scope of a component.");return this.current.scene}useState(t,{alwaysRecall:s=!1}={}){if(!this.current)throw new Error("Hook 'useState' must be executed in the top level scope of a component.");let u=this.current.state[this.current.useStateCallIndex]??new c(this.current,t,{alwaysRecall:s});return this.current.state[this.current.useStateCallIndex]=u,this.current.useStateCallIndex++,u}useShouldRefresh(t){let s=this.current;if(!s)throw new Error("useShouldRefresh must be called inside a component");s.watchedDeps&&console.warn("useShouldRefresh called multiple times \u2014 using the last call"),s.watchedDeps=t}useRef(t){if(!this.current)throw new Error("Hook 'useRef' must be executed in the top level scope of a component.");let o=this.current.refs[this.current.useRefCallIndex]??h(t??null);return this.current.refs[this.current.useRefCallIndex]=o,this.current.useRefCallIndex++,o}useEffect(t){if(!this.current)throw new Error("Hook 'useEffect' must be executed in the top level scope of a component.");this.current.onEffect[this.current.useEffectCallIndex]=t,this.current.useEffectCallIndex++}useViewportEffect(t){if(!this.current)throw new Error("Hook 'useViewport' must be executed in the top level scope of a component.");this.current.onViewportEffect[this.current.useViewCallIndex]=t,this.current.useViewCallIndex++}useExports(t,s){if(!this.current)throw new Error("Hook 'useExports' must be executed in the top level scope of a component.");this.current.onExport=s}useGlobalPointer(t,s){if(!this.current)throw new Error("Hook 'useGlobalPointer/useGlobalClick' must be executed in the top level scope of a component.");s??={},this.current.onGlobalPointer[this.current.useGlobalClickCallIndex]={handler:t,config:s},this.current.useGlobalClickCallIndex++}usePointer(t,s){if(!this.current)throw new Error("Hook 'usePointer/useClick' must be executed in the top level scope of a component.");s??={};let o=this.current;Ie((u,b,g)=>{let w=o.entity;if(!w)return;let K=w.getRawRect(),E=D.createRawRect({x:u.x,y:u.y,width:3,height:3});D.rawCollision(K,E)&&t(u,b,g)},s)}useContext(t){if(!this.current)throw new Error("Hook 'useContext' must be executed in the top level scope of a component.");return this.current.findContextValueFromInst(t)}save(){this.saves.push({current:this.current})}restore(){let t=this.saves.pop();if(!t)throw new Error("Cannot restore without saving.");this.current=t.current}logLevel="warn";logger={debug:(...t)=>{this.logLevel==="debug"&&console.debug(...t)},info:(...t)=>{["info","warn","debug"].includes(this.logLevel)&&console.info(...t)},warn:(...t)=>{["warn","debug"].includes(this.logLevel)&&console.warn(...t)},error:(...t)=>console.error(...t),withFiber:(t,s,o,...u)=>{let b=t?.fc?.name||"anonymous",g=t?.key?` key=${t.key}`:"";this.logger[s](`${o} <${b}${g}>`,...u)}}}R.GlobalKayla=a;class l{preventDefault(){this.#e=!0}#e=!1;isPrevented(){return this.#e}}R.KaylaEvent=l;class c{#e;#t;#n;alwaysRecall;constructor(t,s,{alwaysRecall:o=!1}={}){this.#t=t,this.#e=s??void 0,this.#n=Date.now(),this.alwaysRecall=o}get(){return this.#e}get 0(){return this.get()}1(t){this.set(t,{recall:!0})}legacy(){return[this[0],this[1].bind(this)]}add(t,{recall:s}={}){this.set(this.get()+t,{recall:s})}multiply(t,{recall:s}={}){this.set(this.get()*t,{recall:s})}set(t,{recall:s=!1}={}){let o=this.#e;if(t===o)return;this.#e=t;let b=Date.now()-this.#n;s&&b<67&&this.#t.global.logger.warn(`Hot structural state change <${this.#t.fc?.name||"anonymous"}> delta=${b}ms`),(s||this.alwaysRecall)&&this.#t.refresh(),this.#n=Date.now()}get value(){return this.#e}get lastChanged(){return this.#n}}R.KaylaInternalState=c;class p{#e;constructor(t){this.#e=t??void 0}#t;setSetter(t){this.#t=t}get current(){return this.#e}set current(t){this.#e=t,this.#t&&this.#t(this.#e)}}R.KaylaInternalRef=p;function h(f){return new p(f)}R.createReassignableRef=h;class d{state;refs;global;callProps;scene;exports;detectedParent;contextInfo;lastLayer;get childrenCount(){return this.lastChildren.length}maxSafeChildren;dynamicChildren;constructor(t,s,o){if(!o)throw new Error("Empty element");this.maxSafeChildren=40,this.scene=s,this.state=[],this.refs=[],this.onInits=[],this.onUnInits=[],this.fc=o.type,this.callProps=o.props??{},this.global=t,this.lastStateDeps=[],this.entity=null,this.lastChildren=[],this.onEffect=[],this.onUnEffect=[],this.onPaint=[],this.onTick=[],this.onTickSubsteps=[],this.onGlobalPointer=[],this.pointerHook=this.pointerHook.bind(this),this.resizeHook=this.resizeHook.bind(this),this.contextInfo=null,this.detectedParent=null,this.dynamicChildren=[],this.key??=this.fc.name+"_"+j(),this.onViewportEffect=[],this.lastLayer=null}getCorrectMousePos(t){return t??=this.getAttachedRenderer().getMousePos(),this.lastLayer?.transform?this.lastLayer.transform.inverseV(t):t}getChildrenEntities(){return this.lastChildren.map(t=>t.entity)}pointerHook(t,s,o){t=this.getCorrectMousePos(t);try{for(let{handler:u,config:b}of this.onGlobalPointer)b.type??="any",b.action??="down",!(b.action!=="any"&&b.action!==o||b.type!=="any"&&b.type!==s)&&u(t,s,o)}catch(u){this.global.logger.error(u)}}resizeHook({width:t,height:s}){try{for(let o of this.onViewportEffect)o(this.getAttachedRenderer(),t,s)}catch(o){this.global.logger.error(o)}}bindEvents(){for(let t of[this.getAttachedRenderer()])t&&(t.pointerEvents.on("action",this.pointerHook),t.on("viewport_update",this.resizeHook))}unbindEvents(){for(let t of[this.getAttachedRenderer()])t&&(t.pointerEvents.off("action",this.pointerHook),t.off("viewport_update",this.resizeHook))}get key(){return this.callProps.key}set key(t){this.callProps.key=t}get children(){let t=this.callProps.children;return Array.isArray(t)?t:[t]}set children(t){this.callProps.children=t}entity;onExport=()=>({});onEffect;onViewportEffect;onGlobalPointer;onInits;onUnInits;onUnEffect;onEffectDeps;onPaint;onTick;onTickSubsteps;fc;useStateCallIndex=0;useEffectCallIndex=0;useGlobalClickCallIndex=0;useDrawCallIndex=0;useStepCallIndex=0;useRefCallIndex=0;useInitCallIndex=0;useViewCallIndex=0;lastStateDeps;watchedDeps;lastDepStamps=[];getAttachedRenderer(){return this.getAttachedGame().mainRenderer}getAttachedGame(){return this.scene.getGame()}setMaxChildren(t){if(this.maxSafeChildren=Math.max(0,t),this.global.logger.debug(`Max children limit updated to ${t} for <${this.fc?.name||"anonymous"} key=${this.key}>`),this.lastChildren.length>this.maxSafeChildren){let s=this.lastChildren.length-this.maxSafeChildren;this.global.logger.warn(`Child limit exceeded (${this.lastChildren.length} > ${this.maxSafeChildren}) \u2014 removing ${s} oldest children <${this.fc?.name||"anonymous"} key=${this.key}>`);let o=this.lastChildren.slice(0,this.maxSafeChildren),u=this.lastChildren.slice(this.maxSafeChildren);this.lastChildren=o;for(let b of u)b.unuse()}}getMaxChildren(){return this.maxSafeChildren??1/0}getFiberChain(){let t=[],s=this.detectedParent;for(;s;)t.push(s),s=s?.detectedParent;return t}getAllChildrenNestedFlattened(){let t=[],s=(o=[])=>{for(let u of o)t.push(u),u.lastChildren?.length&&s(u.lastChildren)};return s(this.lastChildren),t}getContextChain(){return this.getFiberChain().map(t=>t.contextInfo).filter(Boolean)}findContextValueFromInst(t){return this.getContextChain().find(s=>s.instance===t)?.value}getEntityChain(){return this.getFiberChain().map(t=>t.entity)}shouldFullRefresh(){if(this.isFirstUse||!this.watchedDeps||this.watchedDeps.length===0)return!0;for(let t=0;t<this.watchedDeps.length;t++){let s=this.watchedDeps[t],o=this.lastDepStamps[t]??0;if(s.lastChanged>o)return!0}return!1}captureDepStamps(){this.watchedDeps&&(this.lastDepStamps=this.watchedDeps.map(t=>t.lastChanged))}refresh(){if(!this.shouldFullRefresh())return;let t=this.fc?.name||"anonymous";if(!this.shouldFullRefresh()){this.global.logger.debug(`Refresh skipped <${t} key=${this.key}>`);return}this.global.logger.debug(`Refresh executed <${t} key=${this.key}> reason=${this.isFirstUse?"first":"deps-changed"}`),this.lastChildren.length>this.maxSafeChildren&&this.global.logger.warn(`High child count <${t} key=${this.key}> children=${this.lastChildren.length}`);let s;this.global.save(),this.global.current=this,this.useStateCallIndex=0,this.useRefCallIndex=0,this.useInitCallIndex=0,this.useViewCallIndex=0,this.useStateCallIndex=0,this.useDrawCallIndex=0,this.useStepCallIndex=0,this.useEffectCallIndex=0,this.useGlobalClickCallIndex=0;let o=[];try{let u=this.fc(this.callProps)??[];if(u&&!Array.isArray(u)&&(u=[u]),!Array.isArray(u))throw new Error("Non array or non undefined children received.");for(let b of u);o=u}catch(u){s=u}if(this.global.restore(),this.updateChildren(o,!0),s)throw s}updateChildren(t,s){try{let o=[...t,...this.dynamicChildren],u=[],b=[];for(let g of o){let w=g.props?.key,K;w!=null&&(K=this.lastChildren.find(E=>E.key===w)),K||(K=new d(this.global,this.scene,g)),K.callProps=g.props,K.key=w??`${g.type?.name??""}_${j()}`,K.detectedParent=this,b.push(K),u.push(K)}for(let g of this.lastChildren)u.includes(g)||g.unuse();this.lastChildren=b,this.captureDepStamps(),this.use();for(let g of this.lastChildren)try{g.refresh()}catch(w){console.error(w)}}catch(o){console.error(o)}}toString(){return this.getStringRepresentation(0," ")}lastChildren;isFirstUse=!0;use(){try{let t=!0;if(this.lastStateDeps??=[],Array.isArray(this.onEffectDeps)&&(t=!0),t||this.isFirstUse){this.global.logger.debug(`Using <${this.fc?.name||"anonymous"} key=${this.key}> count=${this.onEffect.length}`);let s=this.isFirstUse;this.isFirstUse=!1,Array.isArray(this.onEffectDeps)&&(this.lastStateDeps=this.onEffectDeps.map(u=>({stamp:u.lastChanged,stateRef:u}))),this.entity&&this.scene.getScene().removeEntity(this.entity),this.entity&&this.entity.name!==this.key&&(this.entity=null),this.entity=this.entity??new m(this,this.key);for(let u of this.refs)u.current===ve&&(u.current=this.entity);if(this.callProps.ref instanceof p&&(this.callProps.ref.current=this.entity),this.exports=this.onExport(),this.callProps.exportsRef instanceof p&&(this.callProps.exportsRef.current=this.exports),this.entity&&this.entity!==this.entity&&this.global.logger.warn(`Entity name mismatch during refresh <${this.fc?.name} key=${this.key}>`),this.scene.getScene().addEntity(this.entity),s){this.onUnInits=[];for(let u of this.onInits){this.bindEvents();try{let b=u();typeof b=="function"&&this.onUnInits.push(b)}catch(b){throw this.global.logger.error("Initialization failed",this.fc?.name||"anonymous",b),b}}}try{for(let u of this.onUnEffect??[])u()}catch(u){console.error(u)}let o=this.onEffect.map(u=>u()).filter(u=>u!==void 0);this.onUnEffect=o}}catch(t){throw this.global.logger.error(`use() failed <${this.fc?.name||"anonymous"} key=${this.key}>`,t),t}}unuse(){this.global.logger.debug(`unuse called <${this.fc?.name||"anonymous"} key=${this.key}> children=${this.lastChildren.length}`),this.detectedParent=null,this.watchedDeps=void 0,this.lastDepStamps=[],this.unbindEvents();try{for(let t of this.onUnInits)t();for(let t of this.onUnEffect)t()}catch(t){this.global.logger.error(`Cleanup failed in unuse <${this.fc?.name||"anonymous"} key=${this.key}>`,t)}this.scene.getScene().removeEntity(this.entity);for(let t of this.lastChildren)t.unuse();this.lastChildren.length=0}getStringRepresentation(t=0,s=" "){let o=s.repeat(t),u=this,b="",g=Object.entries(this.callProps);for(let E=0;E<g.length;E++){let[C,$]=g[E];if(["children"].includes(C))continue;b+=` ${C}=${typeof $=="string"?`${J($)}`:`{${J($,0)}}`}`}let w=Array.from(u.lastChildren).map(E=>E.getStringRepresentation(t+1,s)).join(""),K=u.fc.displayName??u.fc.name.replaceAll(" ","-");return w&&w.length>0?`${o}<${K}${b}>
|
|
2
|
+
${w}${o}</${K}>
|
|
3
|
+
`:`${o}<${K}${b}/>
|
|
4
|
+
`}}R.KaylaFiber=d;class m extends he{#e;flags;getRawRect(){return D.createRawRect({x:this.x,y:this.y,width:this.width,height:this.height})}getFiber(){return this.#e}constructor(t,s){super(s,0,0,0,0),this.#e=t,this.flags=new Map,this.color="transparent"}setFlag(t,s){return this.flags.set(t,s)}getFlag(t){return this.flags.get(t)}removeFlag(t){return this.flags.delete(t)}update(t){fe(()=>{let s=new l;if(this.#e&&this.#e.onTick){let o=0;for(let u of this.#e.onTick){let b=this.#e.onTickSubsteps.at(o)??null;if(b){let g=b[n]();g.handler=()=>{u(g.interval/1e3,s)},g.update(t)}else u(t,s);o++}}s.isPrevented()})}draw(t){let s=new l;if(this.#e&&this.#e.onPaint)for(let o of this.#e.onPaint)o(t,s);s.isPrevented()||super.draw(t)}getRect(){return new x(this.getFiber())}}R.KaylaRectEntity=m;class x{#e;constructor(t){this.#e=t}get color(){return this.#t(),this.entity.color}set color(t){this.#t(),this.entity.color=t}getRaw(){return D.createRawRect({x:this.x,y:this.y,width:this.width,height:this.height})}get entity(){return this.#e.entity??null}#t(){if(!this.#e)throw new Error("No fibers found.");if(!this.entity)throw new Error("The entity does NOT exist yet.")}isCollidingWith(t){return this.#t(),this.entity.isCollidingWith(t.entity)}get setFlag(){return this.#t(),this.entity.setFlag.bind(this.entity)}get getFlag(){return this.#t(),this.entity.getFlag.bind(this.entity)}get removeFlag(){return this.#t(),this.entity.removeFlag.bind(this.entity)}isHovered(){let t=this.getRaw(),s=this.#e.getCorrectMousePos(),o=D.createRawRect({x:s.x,y:s.y,width:3,height:3});return D.rawCollision(t,o)}get pos(){return this.#t(),this.entity.pos}get x(){return this.#t(),this.pos.x}set x(t){this.#t(),this.pos.x=t}get y(){return this.#t(),this.pos.y}set y(t){this.#t(),this.pos.y=t}get width(){return this.#t(),this.entity.width}set width(t){this.#t(),this.entity.width=t}get height(){return this.#t(),this.entity.height}set height(t){this.#t(),this.entity.height=t}get z(){return this.#t(),this.entity.z}set z(t){this.#t(),this.entity.z=t}get left(){return this.#t(),this.entity.left}set left(t){this.#t(),this.entity.left=t}get right(){return this.#t(),this.entity.right}set right(t){this.#t(),this.entity.right=t}get top(){return this.#t(),this.entity.top}set top(t){this.#t(),this.entity.top=t}get bottom(){return this.#t(),this.entity.bottom}set bottom(t){this.#t(),this.entity.bottom=t}get toLocal(){return this.entity.toLocal.bind(this.entity)}get toWorld(){return this.entity.toWorld.bind(this.entity)}}R.KaylaInternalRect=x;class v{#e;#t;constructor(t){this.#r=t,this.#n=null,this.#e=new Map,t.on("update",this.tickHandler.bind(this)),this.drawHandler=this.drawHandler.bind(this),t.handleDraw=this.drawHandler,this.#t=null}getLayers(){return this.#e}#n;#r;getFibers(){return this.getEntities().map(t=>t.getFiber())}getEntities(){return Array.from(this.getScene().entities.values())}getScene(){return this.#r}getGame(){return this.#n}getOrCreateLayer(t,s=0){return this.#e.has(t)||this.#e.set(t,{name:t,z:s,visible:!0,rootFiber:null}),this.#e.get(t)}getSortedLayers(){return Array.from(this.#e.values()).filter(t=>t.visible).sort((t,s)=>t.z-s.z)}setLayerVisible(t,s){let o=this.#e.get(t);o&&(o.visible=s)}handleDraw(t){if(_)return;let s=this.getScene();if(s.paused)return;s.emit("draw",t);let o=this.getSortedLayers(),u=[];for(let g of o){if(!g.visible)continue;let w=g.rootFiber;if(!w)continue;let K=w.getAllChildrenNestedFlattened().flat().map(C=>C.entity).filter(Boolean);if(u.push(...K),t.save(),g.transform){let C=g.transform;t.setTransform(C.a,C.b,C.c,C.d,C.e,C.f)}g.blendMode&&(t.globalCompositeOperation=g.blendMode??"source-over");let E=Array.from(K).sort((C,$)=>C.z-$.z);for(let C of E)C.getFiber().lastLayer=g,C.handleDraw(t);t.restore()}let b=[...s.entities.values()].filter(g=>!u.includes(g));for(let g of b.sort((w,K)=>w.z-K.z)){let w=g instanceof m?g.getFiber():null;w&&(w.lastLayer=null),g.handleDraw(t)}}drawHandler(t){return this.handleDraw(t)}attachTo(t){t.addScene(this.#r),this.#n=t}async spawn(t){this.#t&&(this.#t.unuse(),this.#t=null);let s=this.createFiber(t);this.#t=s,await this.#n.delay(0),s.refresh()}getRoot(){return this.#t??null}createFiber(t){return new d(R.singleGlobalInstance,this,t)}detach(){this.#n&&this.#n.removeScene(this.#r)}tickHandler(){}}R.KaylaScene=v,R.singleGlobalInstance=new R.GlobalKayla})(H||={});var ce=class{#e;constructor(e){this.Provider=this.#t.bind(this),this.#e=e,this.Provider.displayName="[[ KaylaContext ]].Provider"}get defaultValue(){return this.#e}#t({value:e=this.defaultValue,children:n}){let i=Ke();return Z(()=>{i.contextInfo={instance:this,value:e}}),pe(this.Provider,()=>({value:e})),n}Provider;Consumer};function Oe(r){return new ce(r)}var y=H.singleGlobalInstance,Ne=y.useState.bind(y),we=y.useRef.bind(y),Xe=y.useShouldRefresh.bind(y),Z=y.useEffect.bind(y),qe=y.useViewportEffect.bind(y),Ie=y.useGlobalPointer.bind(y),Be=y.useGlobalPointer.bind(y),We=y.usePointer.bind(y),je=y.usePointer.bind(y),de=y.useInitialization.bind(y),O=y.useRect.bind(y),Ye=y.useTick.bind(y),ee=y.usePaint.bind(y),pe=y.useExports.bind(y),z=y.useSelf.bind(y),Ee=y.useFiberControl.bind(y),Ke=y.useFiber.bind(y),Je=y.useEntity.bind(y),Qe=y.useCurrentGame.bind(y),Ze=y.useCurrentRenderer.bind(y),Fe=y.useCurrentScene.bind(y),et=y.useCurrentTicker.bind(y),tt=y.useContext.bind(y),nt=y.useSubstep.bind(y),ve=Symbol("self_ref");var fe=r=>{Promise.resolve(1).then(()=>{try{r()}catch(e){console.error(e)}})},Re=({children:r})=>Array.isArray(r)?[...r]:r;function rt(r){return H.createReassignableRef(r)}function it(r){if(typeof r!="object"||typeof r=="function"||r===null)return r;let e={current:r};return new Proxy({},{get(i,a,l){return a==="reassignSelf"?c=>{e.current=c}:Reflect.get(e.current,a,l)},set(i,a,l,c){return Reflect.set(e.current,a,l,c)},has(i,a){return Reflect.has(e.current,a)},ownKeys(i){return Reflect.ownKeys(e.current)},getOwnPropertyDescriptor(i,a){return Reflect.getOwnPropertyDescriptor(e.current,a)},deleteProperty(i,a){return Reflect.deleteProperty(e.current,a)}})}function st(r){y.logLevel=r}function at(r){let e=r.name||"anonymous-custom-hook";function n(...i){let a=y.current;if(!a)throw new Error(`Custom hook '${e}' must be called inside a Kayla component`);let l=i??[];return a.global.logLevel==="debug"&&a.global.logger.debug(`Custom hook '${e}' running (non-memoized) <${a.fc?.name||"anonymous"} key=${a.key||"no-key"}>`),r.onUse(a,y,...l)}return n.name=r.name,n}var ot=({name:r,z:e=0,blend:n,visible:i=!0,children:a,transform:l})=>{let c=Fe(),p=Ke();return de(()=>{let h=c.getOrCreateLayer(r,e);return h.blendMode=n,h.visible=i,h.rootFiber=p,h.transform=l??null,()=>{c.getLayers().delete(r)}}),a},Ce=class extends DOMMatrix{#e;constructor(){super(),this.#e=new DOMPoint}transformV(e){this.#e.x=e.x,this.#e.y=e.y;let n=this.#e.matrixTransform(this);return new A(n.x,n.y)}inverseV(e){let n=this.inverse();this.#e.x=e.x,this.#e.y=e.y;let i=this.#e.matrixTransform(n);return new A(i.x,i.y)}},J=(r,e=0)=>{try{if(Array.isArray(r))return`[ ${r.map(n=>J(n,e)).join(", ")} ]`;if(typeof r=="object"&&r!==null){let n=r.constructor?.name;return n!=="Object"&&n?`[[ ${n} ]]`:`{ ${Object.entries(r).map(([i,a])=>`${i}: ${J(a,e)}`).join(", ")} }`}return JSON.stringify(r,null,e)}catch{return"[[ Non-serializable ]]"}},ke;(e=>e.id="kayla")(ke||={});var lt=j,ut=({color:r,cx:e,cy:n,height:i,width:a,children:l})=>{let c=O();return Z(()=>{c.color=r??"red",c.x=e??0,c.y=n??0,c.width=a??1,c.height=i??1}),l},Ae=({label:r,size:e,align:n="center",parentRect:i,color:a,x:l,y:c,ox:p=0,oy:h=0})=>{i??=O("parent"),ee(d=>{d.fillStyle=a,d.font=`${e}px sans-serif`,d.textBaseline="middle",d.textAlign=n,d.fillText(r.toString(),(i?.x??l)+p,(i?.y??c)+h)})};function ht(r){switch(r){case"use":{y.current.use();break}case"unuse":{y.current.unuse();break}}}Reflect.set(globalThis,"Kayla",Se);var ct;(n=>(n.Flex=({align:i="stretch",children:a,direction:l="row",gap:c=0,justify:p="start",wrap:h="nowrap",getHeight:d,getWidth:m,getCenterX:x,getCenterY:v,color:S})=>{let R=Ee(),f=O(),t=z(()=>({recalc(){let s=Number(c)||0,o=x(),u=v(),b=m(),g=d();f.x=o,f.y=u,f.width=b,f.height=g;let K=R.getChildrenEntities().filter(Boolean).map(k=>k.getRect()).filter(k=>k.getFlag("flex-ignored")!==!0),E=l==="row",C=E?f.width:f.height,$=E?f.height:f.width,te=0,N=0,me=[],ne=[];K.forEach(k=>{let re=E?k.width:k.height;te+re>C&&h==="wrap"?(me.push({height:N,items:ne}),ne=[k],te=re,N=E?k.height:k.width):(ne.push(k),te+=re+s,N=Math.max(N,E?k.height:k.width))}),me.push({height:N,items:ne});let ye=0;me.forEach((k,re)=>{let L=k.items,V=L.reduce((T,ie)=>T+(E?ie.width:ie.height),0)+s*(L.length-1),F=0;p==="center"&&(F=(C-V)/2),p==="end"&&(F=C-V),p==="space-between"&&(F=0),p==="space-around"&&(F=(C-V)/(L.length*2)),p==="space-evenly"&&(F=(C-V)/(L.length+1)),L.forEach((T,ie)=>{T.z=f.z+1;let U=E?T.width:T.height,se=E?T.height:T.width,ae=0;i==="center"&&(ae=(k.height-se)/2),i==="end"&&(ae=k.height-se),i==="stretch"&&(E?T.height=k.height:T.width=k.height),E?(T.x=F+U/2,T.y=ye+ae+se/2):(T.x=ye+ae+se/2,T.y=F+U/2),p==="space-between"&&ie<L.length-1?F+=U+s+(C-V)/(L.length-1):p==="space-around"?F+=U+s+(C-V)/L.length:p==="space-evenly"?F+=U+s+(C-V)/(L.length+1):F+=U+s}),ye+=k.height+s})}}));return ee((s,o)=>{o.preventDefault(),s.fillStyle=S,s.fillRect(f.left,f.top,f.width,f.height)}),Z(()=>{fe(()=>{t.recalc()})}),pe(n.Flex,()=>({controls:t})),a},n.GenericBox=({color:i,width:a=20,height:l=20,x:c=0,y:p=0})=>{let h=O();de(()=>{h.width=a,h.height=l,h.x=c,h.y=p}),ee((d,m)=>{m.preventDefault(),d.fillStyle=i,d.fillRect(h.left,h.top,h.width,h.height)})}))(ct||={});function kt(r,e,n,...i){if(typeof r=="string")throw new Error("Cannot use intrinsic elements.");return Q(r,{...e,key:e.key??n,children:e.children??i})}function dt(r,e,n,...i){if(typeof r=="string")throw new Error("Cannot use intrinsic elements.");return Q(r,{...e,key:e.key??n,children:e.children??i})}function St(r,e,n){return dt(r,e,n)}var Tt=Re;export{Tt as Fragment,ke as JSX,kt as jsx,St as jsxDEV,dt as jsxs};
|
package/dist/jsx-runtime.cjs
CHANGED
|
@@ -1 +1,4 @@
|
|
|
1
|
-
"use strict";var de=Object.defineProperty;var Fe=Object.getOwnPropertyDescriptor;var Me=Object.getOwnPropertyNames;var Ae=Object.prototype.hasOwnProperty;var Ke=(r,e)=>{for(var n in e)de(r,n,{get:e[n],enumerable:!0})},Le=(r,e,n,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of Me(e))!Ae.call(r,a)&&a!==n&&de(r,a,{get:()=>e[a],enumerable:!(s=Fe(e,a))||s.enumerable});return r};var _e=r=>Le(de({},"__esModule",{value:!0}),r);var dt={};Ke(dt,{Fragment:()=>ct,jsx:()=>ut,jsxDEV:()=>ht,jsxs:()=>Se});module.exports=_e(dt);var Ee={};Ke(Ee,{JSX:()=>Ie,KMatrix2D:()=>xe,KaylaContext:()=>te,KaylaFragment:()=>Ce,KaylaInternals:()=>G,KaylaRect:()=>L,Layer:()=>ot,createContext:()=>Ne,createElement:()=>ne,createGame:()=>Ue,createReassignableObject:()=>it,createRenderer:()=>Oe,createScene:()=>$e,createUseHook:()=>at,self:()=>be,setLogLevel:()=>st,useClick:()=>je,useContext:()=>nt,useCurrentGame:()=>Ze,useCurrentRenderer:()=>et,useCurrentScene:()=>Pe,useCurrentTicker:()=>tt,useDisposableRef:()=>rt,useEffect:()=>re,useEntity:()=>Je,useExports:()=>oe,useFiber:()=>we,useFiberControl:()=>ve,useGlobalClick:()=>Te,useGlobalPointer:()=>We,useInitialization:()=>ie,useNextStack:()=>le,usePaint:()=>ae,usePointer:()=>Ye,useRect:()=>se,useRef:()=>ge,useSelf:()=>D,useShouldRefresh:()=>qe,useState:()=>Xe,useTick:()=>Qe,useViewportEffect:()=>Be});var S=class{#e=new Map;constructor(){this.#e=new Map}on(e,n){let s=this.#e.get(e)||[];return s.push(n),this.#e.set(e,s),this}once(e,n){let s=(...a)=>{this.off(e,s),n(...a)};return this.on(e,s),this}off(e,n){let s=this.#e.get(e);if(!s)return this;let a=s.indexOf(n);return a>=0&&s.splice(a,1),this}emit(e,...n){let s=this.#e.get(e);if(!s||s.length===0){if(e==="error")throw n[0];return!1}return s.slice().forEach(a=>a(...n)),!0}removeAllListeners(e){return e?this.#e.delete(e):this.#e.clear(),this}listenerCount(e){return this.#e.get(e)?.length??0}},Q=class extends S{#e;#t;running;_rafId;_fps;_frameCount;_fpsTimer;_lastFrameTime;get canvas(){return this.#e}get ctx(){return this.#t}set canvas(e){this.#e=e,this.#t=e.getContext("2d"),this.updateCanvasResolution()}constructor(e,{viewportWidth:n,viewportHeight:s,cameraWidth:a,cameraHeight:l}={}){if(!k)throw new Error("Web-Only");super(),this.canvas=e,this.automatic=!0,this.#n=n??e.width,this.#r=s??e.height,this.#i=a??e.width,this.#s=l??e.height,this.running=!1,this._rafId=null,this._loop=this._loop.bind(this),this.updateCanvasResolution(),this._fps=60,this._frameCount=0,this._fpsTimer=0}automatic;retransform(){this.ctx.setTransform(1,0,0,1,0,0);let e=this.#i/this.#n,n=this.#s/this.#r;this.ctx.translate(this.#i/2,this.#s/2),this.ctx.scale(e,n),this.ctx.translate(-this.#n/2,-this.#r/2)}#n=0;#r=0;#i=0;#s=0;get viewportWidth(){return this.#n}set viewportWidth(e){this.#n=e,this.retransform(),this.emitViewportUpdate()}get width(){return this.#n}get height(){return this.#r}get centerX(){return this.#n/2}get centerY(){return this.#r/2}get left(){return 0}get top(){return 0}get right(){return this.#n}get bottom(){return this.#r}get viewportHeight(){return this.#r}set viewportHeight(e){this.#r=e,this.retransform(),this.emitViewportUpdate()}get cameraWidth(){return this.#i}set cameraWidth(e){this.#i=e,this.updateCanvasResolution(),this.retransform()}get cameraHeight(){return this.#s}set cameraHeight(e){this.#s=e,this.updateCanvasResolution(),this.retransform()}updateCanvasResolution(){this.canvas.width=this.#i,this.canvas.height=this.#s}emitViewportUpdate(){this.emit("viewport_update",{width:this.viewportWidth,height:this.viewportHeight})}applyTransform(){this.retransform()}get FPS(){return this._fps}_loop(){this.automatic&&this.update(),this._rafId=requestAnimationFrame(this._loop)}update(){if(!this.running||!k)return;let e=performance.now(),n=(e-(this._lastFrameTime??e))/1e3;this._lastFrameTime=e,this._frameCount++,this._fpsTimer+=n,this._fpsTimer>=1&&(this._fps=Math.round(this._frameCount/this._fpsTimer),this._frameCount=0,this._fpsTimer=0),this.ctx.clearRect(0,0,this.#i,this.#s),this.emit("draw",this.ctx)}start(){if(!this.running){if(!k||typeof globalThis.requestAnimationFrame>"u")throw new Error("Raf is not supported");this.running=!0,this._rafId=requestAnimationFrame(this._loop)}}stop(){if(!k||typeof globalThis.requestAnimationFrame>"u")throw new Error("Raf is not supported");this.running=!1,this._rafId!==null&&(cancelAnimationFrame(this._rafId),this._rafId=null)}},fe=class extends S{setNow(e){this.#e=e}#e=0;__intervalId=null;__lastTime=0;constructor(e=16){super(),this.#t=e,this.speedHackDT=1}speedHackDT;get isRaf(){return this.tickInterval===1/0}#t=15;get tickInterval(){return this.#t}set tickInterval(e){this.#t=e,this.__intervalId&&(this.stop(),this.start())}now(){return this.#e}__tick(){let e=performance.now(),n=(e-this.__lastTime)/1e3*this.speedHackDT;this.__lastTime=e,!(k&&typeof this.__intervalId=="function"&&document.hidden)&&(this.#e+=n*1e3,this.emit("tick",n))}createTimeout(e){return new me(e,this)}createTween(e,n=()=>{}){let s=new pe(e),a=(l=0)=>{if(s.finished){this.off("tick",a);return}s.update(l)};return s.on("finish",()=>{this.off("tick",a)}),s.on("delta",l=>{n(l)}),this.on("tick",a),s}start(){this.__intervalId===null&&(this.__lastTime=performance.now(),this.__intervalId=k&&!isFinite(this.tickInterval)?ze(()=>this.__tick()).clear:setInterval(()=>this.__tick(),this.tickInterval))}stop(){this.__intervalId!==null&&(typeof this.__intervalId=="function"?this.__intervalId():clearInterval(this.__intervalId)),this.__intervalId=null}getSineMod(e,n=0){return .5+.5*Math.sin((this.now()%e/e+n)*2*Math.PI)}},Ve;(t=>{function r(i){return i===!0?1:0}t.booleanExport=r;function e(i){return i===0?!1:i===1}t.booleanImport=e;function n(i){return`${i.x}|${i.y}`}t.vec2Export=n;function s(i){let[o,u]=i.split("|"),y=parseFloat(o),g=parseFloat(u);if(isNaN(y)||isNaN(g))throw new Error(`Invalid Vector2 string: ${i}`);return new M(y,g)}t.vec2Import=s,t.booleanMap={mapExport:r,mapImport:e};function l(i){return o=>Number(o.toFixed(i))}t.createRounder=l;function d(i=10){return{mapExport(o){return Math.round(o/i)},mapImport(o){return o*i}}}t.createLowPrecision=d;function f(i){return Math.round(i)}t.lightWeightRounder=f;function h(i=100){return{mapExport(o){return Math.round(o*i)},mapImport(o){return o/i}}}t.createPercent=h;function c(i){let o=new Map(Object.entries(i));return{mapExport:u=>o.get(u)??null,mapImport:u=>Array.from(o.entries()).find(([y,g])=>g===u)?.[0]??null}}t.createLookup=c;function p(i){let o=i*(180/Math.PI);return Math.round((o%360+360)%360)}t.radToDeg=p;function b(i){return i*(Math.PI/180)}t.degToRad=b,t.angleRadToDeg={mapExport:p,mapImport:b};function v(i=10){let o=d(i);return{mapExport(u){return o.mapExport(p(u))},mapImport(u){return o.mapImport(b(u))}}}t.createLowPrecisionRadToDeg=v})(Ve||={});var N=class r extends S{name="";scaleRotate=0;scale=1;constructor(e,n=0,s=0){super(),this.autoTranslate=!1,this.name=e,this.z=0,this.___pos=new M(n,s),this.nonSerializableProperties=[],this.nonSerializableProperties.push("___pos","autoTranslate","arraySerializeMap"),this.forceSerializableProperties=[],this.forceSerializableProperties.push("x","y")}arraySerializeMap;autoTranslate;z;___pos;nonSerializableProperties;forceSerializableProperties;get pos(){return this.___pos}get x(){return this.pos.x}get y(){return this.pos.y}set x(e){this.pos.x=e}set y(e){this.pos.y=e}handleUpdate(e){if(this.update)try{this.emit("update",e),this.update(e)}catch(n){this.emit("error",n)}}handleDraw(e){if(!(U||!this.draw)){e.save(),this.autoTranslate&&e.translate(this.x,this.y);try{this.emit("draw",e),this.draw(e)}catch(n){this.emit("error",n)}e.restore()}}serialize(){if(Array.isArray(this.arraySerializeMap))return this.arraySerializeMap.map(([a,{mapExport:l}])=>{let d=Reflect.get(this,a);return l?l(d):d});let e=["_events","_eventsCount","_maxListeners","nonSerializableProperties","forceSerializableProperties"],n=[...Reflect.ownKeys(this),...this.forceSerializableProperties].filter(a=>!this.nonSerializableProperties.includes(a)&&!e.includes(a.toString())),s=Object.fromEntries(n.map(a=>{let l=Reflect.get(this,a);if(U&&typeof l=="number"){let d=l.toString().split("."),h=(d[1]?d[1].length:0)>2?Number(l.toFixed(2)):l;return[a,h]}return[a,l]}));return JSON.parse(JSON.stringify(s))}toLocal(e){return e.subtract(this.pos)}toWorld(e){return e.add(this.pos)}deserializeArray(e){return r.deserializeArray(this.arraySerializeMap,e)}static deserializeArray(e,n){if(!e||!Array.isArray(n))return n;let s={};for(let a=0;a<n.length;a++){let l=e[a];if(!l)break;let[d,{mapImport:f}]=l,h=n[a];if(f&&(h=f(h)),typeof d!="string")break;try{Reflect.set(s,d,h)}catch(c){console.error(c)}}return s}},J=class extends S{name="";entities=new Map;paused=!0;constructor(e){super(),this.name=e}handleUpdate(e){if(!this.paused){this.emit("update",e);for(let n of this.entities.values())n.handleUpdate(e)}}handleDraw(e){if(!U&&!this.paused){this.emit("draw",e);for(let n of[...this.entities.values()].sort((s,a)=>s.z-a.z))n.handleDraw(e)}}addEntity(e){if(!(e instanceof N))throw new Error("invalid entity");if(!e.name)throw new Error("Entity must have a name.");this.entities.set(e.name,e)}removeEntity(e){if(!(e instanceof N))throw new Error("invalid entity");this.entities.delete(e.name)}getEntity(e){return this.entities.get(e)}},Z=class{scenes;ticker;get centerX(){return this.width/2}get centerY(){return this.height/2}get left(){return 0}get top(){return 0}get right(){return this.width}get bottom(){return this.height}width;height;constructor(e,n,s=16){this.ticker=new fe(s),this.scenes=new Map,this.width=e,this.height=n,this.ticker.on("tick",a=>{for(let l of this.scenes.values())l.paused||l.handleUpdate(a)})}addScene(e){if(!e.name)throw new Error("Scene must have a name.");e.paused=!1,this.scenes.set(e.name,e)}removeScene(e){e&&(e.paused=!0),this.scenes.delete(e.name)}now(){return this.ticker.now()}start(){this.ticker.start()}stop(){this.ticker.stop()}},P={lerp(r,e,n){return r+(e-r)*n},clamp(r,e,n){return Math.min(n,Math.max(e,r))},clamp01(r){return Math.min(1,Math.max(0,r))},easeLinear(r){return r},easeInQuad(r){return r*r},easeOutQuad(r){return 1-(1-r)*(1-r)},easeInOutQuad(r){return r<.5?2*r*r:1-Math.pow(-2*r+2,2)/2},easeInSine(r){return 1-Math.cos(r*Math.PI/2)},easeOutSine(r){return Math.sin(r*Math.PI/2)},easeInOutSine(r){return-(Math.cos(Math.PI*r)-1)/2},easeInExpo(r){return r===0?0:Math.pow(2,10*r-10)},easeOutExpo(r){return r===1?1:1-Math.pow(2,-10*r)},easeInOutExpo(r){return r===0?0:r===1?1:r<.5?Math.pow(2,20*r-10)/2:(2-Math.pow(2,-20*r+10))/2},smoothstep(r){return r=P.clamp(r,0,1),r*r*(3-2*r)},randomLerp(r,e){return P.lerp(r,e,Math.random())},randomInt(r,e){return Math.floor(Math.random()*(e-r+1))+r},randomArrayValue(r){return r[P.randomInt(0,r.length-1)]},createBezier(r,e,n,s){function a(f,h,c,p,b){let x=1-f;return x*x*x*h+3*x*x*f*c+3*x*f*f*p+f*f*f*b}function l(f,h,c,p,b){let x=1-f;return 3*x*x*(c-h)+6*x*f*(p-c)+3*f*f*(b-p)}function d(f){let h=f;for(let c=0;c<6;c++){let p=a(h,0,r,n,1),b=l(h,0,r,n,1);if(b===0)break;h-=(p-f)/b}return P.clamp(h,0,1)}return function(h){h=P.clamp(h,0,1);let c=d(h);return a(c,0,e,s,1)}},lengthSquared(...r){return r.reduce((e,n)=>e+n*n,0)},normalizeRad(r){let e=2*Math.PI;return r=r%e,r<0&&(r+=e),r},angleInvertY(r){return P.normalizeRad(-r)},degToRadFlipY(r){return P.angleInvertY(r*Math.PI/180)},minimalAngularDirection(r,e){r=P.normalizeRad(r),e=P.normalizeRad(e);let n=P.normalizeRad(e-r),s=P.normalizeRad(r-e);return n<=s?1:-1}},pe=class extends S{constructor({delta:e,ms:n,easing:s}){super(),this.delta=e,this.duration=n,this.elapsed=0,this.easing=s??(a=>a),this.lastValue=0,this.finished=!1}delta;duration;elapsed;lastValue;finished;easing;update(e){this.elapsed+=e*1e3;let n=P.clamp(this.elapsed/this.duration,0,1),s=this.easing(n),a=this.delta*s,l=a-this.lastValue;this.lastValue=a,this.emit("delta",l),n>=1&&(this.finished=!0,this.emit("finish",void 0))}},ee=class extends N{constructor(e,n=0,s=0,a=50,l=50){super(e,n,s),this.width=a,this.height=l}width;height;get left(){return this.x-this.width/2}set left(e){this.x=e+this.width/2}get right(){return this.x+this.width/2}set right(e){this.x=e-this.width/2}get top(){return this.y-this.height/2}set top(e){this.y=e+this.height/2}get bottom(){return this.y+this.height/2}set bottom(e){this.y=e-this.height/2}get lx(){return 0}get ly(){return 0}get lleft(){return-this.width/2}get lright(){return this.width/2}get ltop(){return-this.height/2}get lbottom(){return this.height/2}isCollidingWith(e){return!(this.right<e.left||this.left>e.right||this.bottom<e.top||this.top>e.bottom)}color="rgba(0, 0, 255, 0.3)";draw(e){e.translate(this.x,this.y),e.rotate(this.scaleRotate),e.fillStyle=this.color,e.fillRect(-this.width/2,-this.height/2,this.width,this.height)}},me=class extends S{duration;ticker;elapsed;finished;_resolve;promise;_timeoutId;constructor(e,n=null){super(),this.duration=e,this.ticker=n,this.elapsed=0,this.finished=!1,this._resolve=null,this.promise=new Promise(s=>this._resolve=s),this.update=this.update.bind(this),this.ticker&&this.ticker.on("tick",this.update)}update(e=0){this.finished||(this.elapsed+=e*1e3,this.elapsed>=this.duration&&this.finish())}finish(){this.finished||(this.finished=!0,this.emit("finish",void 0),this._resolve&&this._resolve(),this.ticker&&this.ticker.off("tick",this.update))}start(){return this.ticker||(this._timeoutId=setTimeout(()=>this.finish(),this.duration)),this}cancel(){this.finished||(this.finished=!0,!this.ticker&&this._timeoutId!=null&&clearTimeout(this._timeoutId),this.ticker&&this.ticker.off("tick",this.update))}then(e,n){return this.promise.then(e,n)}after(e,n){return this.promise.then(e,n)}},M=class r{constructor(e=0,n=0){this.x=e,this.y=n}x;y;toJSON(){return{x:this.x,y:this.y,vec2:!0}}static isVec2(e){return e&&typeof e=="object"&&"x"in e&&"y"in e&&e.vec2===!0}static fromSerialized(e){return this.isVec2(e)?new this(e.x,e.y):null}rotate(e){let n=Math.cos(e),s=Math.sin(e);return new r(this.x*n-this.y*s,this.x*s+this.y*n)}static from(e){return new r(Math.cos(e),Math.sin(e))}isEmpty(){return Math.abs(this.x)<.01&&Math.abs(this.y)<.01}get angle(){return Math.atan2(this.y,this.x)}angleTo(e){return Math.atan2(e.y-this.y,e.x-this.x)}get length(){return Math.hypot(this.x,this.y)}get lengthSquared(){return this.x*this.x+this.y*this.y}normalized(){let e=this.length;return e===0?new r(0,0):new r(this.x/e,this.y/e)}consume(e){let n=this.length;n<=e?(this.x=0,this.y=0):this.overwite(this.scale((n-e)/n))}project(e){return e.scale(this.dotNormalized(e))}reflect(e){let n=this.dot(e);return this.subtract(e.scale(2*n))}dotNormalized(e){let n=this.normalized(),s=e.normalized();return n.x*s.x+n.y*s.y}lengthSquaredTo(e){let n=this.x-e.x,s=this.y-e.y;return n*n+s*s}dot(e){return this.x*e.x+this.y*e.y}distanceTo(e){return Math.hypot(this.x-e.x,this.y-e.y)}distanceToCheap(e){let n=this.x-e.x,s=this.y-e.y;return n*n+s*s}directionTo(e){return new r(e.x-this.x,e.y-this.y).normalized()}add(e){return new r(this.x+e.x,this.y+e.y)}addRaw(e){return new r(this.x+e,this.y+e)}overwite(e){this.x=e.x,this.y=e.y}subtract(e){return new r(this.x-e.x,this.y-e.y)}scale(e){return new r(this.x*e,this.y*e)}toString(){return`Vector2(${this.x}, ${this.y})`}clone(){return new r(this.x,this.y)}};function De(){return typeof process<"u"&&process.release?.name==="node"?"node":typeof window<"u"||typeof self<"u"?"web":"unknown"}var Re=De(),U=Re==="node",k=Re==="web",X=class r{static unlock(){k&&this.audioCtx.state!=="running"&&this.audioCtx.resume()}static audioCtx=k?new AudioContext:null;static masterGain=k?this.audioCtx.createGain():null;static musicGain=k?this.audioCtx.createGain():null;static sfxGain=k?this.audioCtx.createGain():null;static{k&&(this.masterGain.gain.value=1,this.musicGain.gain.value=1,this.sfxGain.gain.value=1,this.sfxGain.connect(this.masterGain),this.musicGain.connect(this.masterGain),this.masterGain.connect(this.audioCtx.destination))}static get SFX_VOLUME(){return this.sfxGain.gain.value}static get MUSIC_VOLUME(){return this.musicGain.gain.value}static get VOLUME(){return this.masterGain.gain.value}static set SFX_VOLUME(e){this.sfxGain.gain.value=e}static set MUSIC_VOLUME(e){this.musicGain.gain.value=e}static set VOLUME(e){this.masterGain.gain.value=e}static noteToHz(e){return this.tuningFreq*Math.pow(2,(e-9)/12)}static tuningFreq=440;static audioBufferCache=new Map;static loops=new Map;static sfsx=new Map;static loopIdCounter=0;static CACHE_NAME="lia-audio-cache-v1";static async preLoad(e){if(this.audioBufferCache.has(e))return this.audioBufferCache.get(e);let n=r.CACHE_NAME,s,a;if(typeof caches<"u"&&(a=await caches.open(n),s=await a.match(e)),!s){if(s=await fetch(e),!s.ok)throw new Error(`Failed to fetch ${e}`);a&&await a.put(e,s.clone())}let l=await s.arrayBuffer(),d=await this.audioCtx.decodeAudioData(l);return this.audioBufferCache.set(e,d),d}static async getOnlyDownloadedCache(e){let n=r.CACHE_NAME;return await(await caches.open(n)).match(e)}static getCached(e){return this.audioBufferCache.get(e)||null}static async playSound(e,n=.2,s=1,a=!0){try{this.sfsx.has(e)&&this.sfsx.get(e).source.stop(),this.audioBufferCache.has(e)||await this.preLoad(e);let l=this.getCached(e);if(!l)return;let d=new O(l);d.buffer=l;let f=1-.12,h=1+.12;d.playbackRate=s??f+Math.random()*(h-f);let c=this.audioCtx.createGain();c.gain.value=n,d.tempGain=c,d.connect(c),c.connect(this.sfxGain),d.onended=()=>{d.disconnect(),c.disconnect()},d.start(),a&&this.sfsx.set(e,{source:d,gain:c})}catch(l){console.error(l)}}static async playLoop(e,n=1,{loopStart:s=0,loopEnd:a=null,exclusive:l=!0,skipMS:d=0}={}){if(l)for(let b of this.loops.keys())this.stopLoop(b);this.audioBufferCache.has(e)||await this.preLoad(e);let f=this.getCached(e);if(!f)return;let h=new O(f);h.buffer=f,h.loop=!0,typeof s=="number"&&(h.loopStart=s),typeof a=="number"&&(h.loopEnd=a);let c=this.audioCtx.createGain();c.gain.value=n,h.tempGain=c,h.playbackRate=1,h.onended=()=>{h.disconnect(),c.disconnect()},h.connect(c),c.connect(this.musicGain),h.start(0,d/1e3);let p=++this.loopIdCounter;return this.loops.set(p,{source:h,gain:c}),p}static stopLoop(e){let n=this.loops.get(e);n&&(n.source.stop(),n.source.notIndependent||(n.source.disconnect(),n.gain.disconnect()),this.loops.delete(e))}static async createLiaSource(e,{volume:n=1,speed:s=1,loop:a=!1,loopStart:l=0,loopEnd:d=null,isMusic:f=!1,gain:h=null}={}){try{this.audioBufferCache.has(e)||await this.preLoad(e);let c=this.getCached(e);if(!c)return null;let p=new O(c);p.loop=a,p.loopStart=l,p.loopEnd=typeof d=="number"?d:c.duration,p.playbackRate=s;let b=this.audioCtx.createGain();return b.gain.value=n,p.connect(b),p.tempGain=b,b.connect(h||(f?this.musicGain:this.sfxGain)),p.onended=()=>{p.disconnect(),b.disconnect()},p}catch(c){return console.error("Failed to create LiaAudioSrc:",c),null}}};var O=class{numberOfInputs;numberOfOutputs;constructor(e,n=X.audioCtx){this.context=n,this.buffer=e,this.source=null,this.startTime=0,this.pauseTime=0,this.playbackRate=1,this.isPlaying=!1,this.loop=!1,this.output=k?n.createGain():null,this.output.gain.value=1,this.channelCount=2,this.channelCountMode="max",this.channelInterpretation="speakers",this.numberOfInputs=0,this.numberOfOutputs=1,this.onended=null}channelCount;channelCountMode;channelInterpretation;onended;source;buffer;context;_createSource(){this.source&&(this.source.onended=null);let e=this.context.createBufferSource();return e.buffer=this.buffer,e.playbackRate.value=this.playbackRate,e.loop=this.loop,e.loopStart=this.loopStart,e.loopEnd=this.loopEnd>0?this.loopEnd:this.buffer.duration,e.connect(this.output),this.source=e,e.onended=()=>{this.source===e&&(this.isPlaying&&!this.loop&&(this.isPlaying=!1,this.pauseTime=0),typeof this.onended=="function"&&this.onended())},e}play({fadeIn:e=0,offset:n=null}={}){let s=n!==null?n:this.pauseTime;if(this.source){this.source.onended=null;try{this.source.stop()}catch{}}this.source=this._createSource(),this.startTime=this.context.currentTime-s/this.playbackRate,this.source.start(0,s),e>0?(this.output.gain.setValueAtTime(0,this.context.currentTime),this.output.gain.linearRampToValueAtTime(1,this.context.currentTime+e)):this.output.gain.setValueAtTime(1,this.context.currentTime),this.isPlaying=!0}start(e=0,n=0,s){this.isPlaying||(this.source=this._createSource(),this.startTime=this.context.currentTime+e-n/this.playbackRate,s!==void 0?this.source.start(this.context.currentTime+e,n,s):this.source.start(this.context.currentTime+e,n),this.pauseTime=n,this.isPlaying=!0)}pause({fadeOut:e=0}={}){if(!this.isPlaying)return;let n=this.getElapsed()/1e3;if(this.loop&&this.loopEnd>this.loopStart){let s=this.loopEnd-this.loopStart;n=this.loopStart+(n-this.loopStart)%s}if(this.isPlaying=!1,e>0){let s=this.context.currentTime;this.output.gain.setValueAtTime(this.output.gain.value,s),this.output.gain.linearRampToValueAtTime(0,s+e),setTimeout(()=>{if(this.source){this.source.onended=null;try{this.source.stop()}catch{}}this.pauseTime=n,this.output.gain.setValueAtTime(1,this.context.currentTime)},e*1e3)}else{if(this.source){this.source.onended=null;try{this.source.stop()}catch{}}this.pauseTime=n}}getElapsed(){return this.isPlaying?(this.context.currentTime-this.startTime)*this.playbackRate*1e3:this.pauseTime*1e3}setSpeed(e){if(e<=0)throw new Error("Playback rate must be positive");let n=this.getElapsed()/1e3;this.playbackRate=e,this.isPlaying&&(this.pause(),this.pauseTime=n,this.play())}setLoop(e=!0){this.loop=e,this.source&&(this.source.loop=e)}loop;playbackRate;startTime;tempGain=null;connect(e,n=0,s=0){if("value"in e)this.output.connect(e,n);else return this.output.connect(e,n,s),e}disconnect(e,n,s){e===void 0?this.output.disconnect():this.output.disconnect(e,n,s)}output;stop(e=0){if(this.notIndependent)return this.pause();if(!this.source)return;let n=this.context.currentTime+e;this.source.stop(n),this.isPlaying=!1,this.notIndependent||(this.pauseTime=0)}pauseTime;isPlaying;notIndependent=!1;loopStart=0;loopEnd=0},Ge={osc:{enabled:!0,type:"sine",freq:440,detune:0},noise:{enabled:!1,level:.5},ampEnv:{attack:.005,decay:.1,sustain:0,release:.1,volume:.3},pitchEnv:{amount:0,decay:.2},filter:{enabled:!1,type:"lowpass",freq:1200,Q:1,envAmount:0,decay:.2},lfo:{enabled:!1,target:"freq",rate:8,depth:20},duration:.4},V=class r{constructor(e={}){this.ctx=X.audioCtx,this.cfg=structuredClone(Ge),Object.assign(this.cfg,e)}ctx;cfg;play(e=X.sfxGain){let n=this.ctx,s=n.currentTime,a=this.cfg,l=n.createGain();l.gain.setValueAtTime(1e-4,s);let d=a.ampEnv;l.gain.exponentialRampToValueAtTime(d.volume,s+d.attack),l.gain.exponentialRampToValueAtTime(Math.max(1e-4,d.sustain*d.volume),s+d.attack+d.decay),l.gain.exponentialRampToValueAtTime(1e-4,s+a.duration+d.release);let f=l,h;a.filter.enabled&&(h=n.createBiquadFilter(),h.type=a.filter.type,h.frequency.value=a.filter.freq,h.Q.value=a.filter.Q,h.connect(l),f=h);let c;if(a.osc.enabled){if(c=n.createOscillator(),c.type=a.osc.type,c.frequency.value=a.osc.freq,c.detune.value=a.osc.detune,a.pitchEnv.amount!==0){let i=Math.pow(2,a.pitchEnv.amount/12);c.frequency.exponentialRampToValueAtTime(a.osc.freq*i,s+a.pitchEnv.decay)}c.connect(f),c.start(s),c.stop(s+a.duration+d.release)}let p;if(a.noise.enabled){let i=n.sampleRate*a.duration,o=n.createBuffer(1,i,n.sampleRate),u=o.getChannelData(0);for(let y=0;y<i;y++)u[y]=(Math.random()*2-1)*a.noise.level;p=n.createBufferSource(),p.buffer=o,p.connect(f),p.start(s),p.stop(s+a.duration+d.release)}let b,x;a.lfo.enabled&&c&&(b=n.createOscillator(),b.frequency.value=a.lfo.rate,x=n.createGain(),x.gain.value=a.lfo.depth,b.connect(x),a.lfo.target==="freq"?x.connect(c.frequency):a.lfo.target==="gain"?x.connect(l.gain):a.lfo.target==="filter"&&h&&x.connect(h.frequency),b.start(s),b.stop(s+a.duration)),l.connect(e);let v=[c,p,b,x,h,l],t=s+a.duration+d.release;setTimeout(()=>{v.forEach(i=>i?.disconnect())},(t-n.currentTime)*1e3)}getConfig(){return structuredClone(this.cfg)}setConfig(e){return Object.assign(this.cfg,e),this}getKey(e){return this.cfg[e]}setKey(e,n){return Object.assign(this.cfg[e],n),this}setFreq(e){return this.cfg.osc.freq=e,this}setWave(e){return this.cfg.osc.type=e,this}setVolume(e){return this.cfg.ampEnv.volume=e,this}setAmpEnv(e,n,s,a){return Object.assign(this.cfg.ampEnv,{attack:e,decay:n,sustain:s,release:a}),this}setPitchEnv(e,n){return Object.assign(this.cfg.pitchEnv,{amount:e,decay:n}),this}setNoiseEnabled(e){return this.cfg.noise.enabled=e,this}setNoiseLevel(e){return this.cfg.noise.level=e,this}setFilterEnabled(e){return this.cfg.filter.enabled=e,this}setFilter(e,n,s){return Object.assign(this.cfg.filter,{type:e,freq:n,Q:s,enabled:!0}),this}setLFOEnabled(e){return this.cfg.lfo.enabled=e,this}setLFO(e,n,s){return Object.assign(this.cfg.lfo,{target:e,rate:n,depth:s,enabled:!0}),this}setDuration(e){return this.cfg.duration=e,this}clone(){return new r(structuredClone(this.cfg))}},mt=new V({osc:{enabled:!0,type:"square",freq:900,detune:0},ampEnv:{attack:.002,decay:.04,sustain:0,release:.02,volume:.15},duration:.05}),yt=new V({osc:{enabled:!0,type:"sine",freq:600,detune:0},ampEnv:{attack:.01,decay:.08,sustain:0,release:.04,volume:.12},duration:.1}),gt=new V({osc:{enabled:!0,type:"triangle",freq:500,detune:0},pitchEnv:{amount:12,decay:.15},ampEnv:{attack:.01,decay:.12,sustain:0,release:.05,volume:.25},duration:.18}),bt=new V({osc:{enabled:!0,type:"sawtooth",freq:1200,detune:0},pitchEnv:{amount:-24,decay:.3},ampEnv:{attack:.005,decay:.25,sustain:0,release:.05,volume:.3},duration:.35}),xt=new V({osc:{enabled:!0,type:"square",freq:180,detune:0},noise:{enabled:!0,level:.4},ampEnv:{attack:.002,decay:.15,sustain:0,release:.05,volume:.35},duration:.2});function ye(r=12){let e=Date.now().toString(36),n=crypto.getRandomValues(new Uint8Array(4)),s=Array.from(n).map(a=>a.toString(36).padStart(2,"0")).join("");return(e+s).slice(0,r)}function ze(r){let e=!0;function n(){e&&(r(),requestAnimationFrame(n))}return requestAnimationFrame(n),{clear:()=>e=!1}}function He(){return U?!1:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}var vt=He();function Ue({width:r,height:e,updateHz:n="frames"}){return new G.KaylaGame(r,e,n==="frames"?1/0:n)}function $e(r){let e=new J(r);return new G.KaylaScene(e)}function Oe(r){return new G.KaylaRenderer(r)}function ne(r,e){if(typeof r!="function")throw new Error("Invalid Element Type.");let n=e??{};return n.key??=r.name+"_"+ye(),{type:r,props:n}}var L;(s=>{function r(a,l){return!(a.right<l.left||a.left>l.right||a.bottom<l.top||a.top>l.bottom)}s.rawCollision=r;function e(a,l,d){let f=l*Math.PI/180,h=Math.cos(f),c=Math.sin(f),p=1/0;return h>0&&(p=Math.min(p,(d.right-a.x)/h)),h<0&&(p=Math.min(p,(d.left-a.x)/h)),c>0&&(p=Math.min(p,(d.bottom-a.y)/c)),c<0&&(p=Math.min(p,(d.top-a.y)/c)),M.from(l).scale(p)}s.getCurrToBound=e;function n(a){let{left:l,right:d,top:f,bottom:h,width:c,height:p,x:b=0,y:x=0}=a;if(c===null||p===null)throw new Error("width and height are required");let v,t;if(l!=null&&d!=null){if(Math.abs(d-l-c)>1e-6)throw new Error("left, right, and width mismatch");v=l}else b!=null?v=b-c/2:l!=null?v=l:d!=null?v=d-c:v=0;if(f!=null&&h!=null){if(Math.abs(h-f-p)>1e-6)throw new Error("top, bottom, and height mismatch");t=f}else x!=null?t=x-p/2:f!=null?t=f:h!=null?t=h-p:t=0;return{left:v,right:v+c,top:t,bottom:t+p,width:c,height:p,x:v+c/2,y:t+p/2}}s.createRawRect=n})(L||={});var G;(x=>{class r extends Z{#e;#t;constructor(t,i,o){super(t,i,o),this.#e=new Set,this.#t=!1}delay(t){return this.ticker.createTimeout(t)}get started(){return this.#t}start(){if(!this.#t){for(let t of this.#e)t.start();this.#t=!0,super.start()}}stop(){if(this.#t){for(let t of this.#e)t.stop();this.#t=!1,super.stop()}}addRenderer(t){this.#e.has(t)||(this.#e.add(t),this.#t&&t.start(),t.game=this)}get mainRenderer(){return[...this.#e].at(0)}getRenderers(){return[...this.#e]}deleteRenderer(t){this.#e.has(t)&&(this.#e.delete(t),this.#t&&t.stop(),delete t.game)}}x.KaylaGame=r;class e extends Q{game;pointerX;pointerY;pointerEvents;onPointerDown;onPointerUp;onPointerCancel;onPointerMove;constructor(t){super(t),this.useDraw=this.useDraw.bind(this),this.on("draw",i=>{if(this.game)for(let o of this.game.scenes.values())o.handleDraw(i)}),this.pointerX=0,this.pointerY=0,this.pointerEvents=new S,this.pointerPosUpdater=this.pointerPosUpdater.bind(this),this.onPointerDown=i=>this.onPointerAll(i,"down"),this.onPointerUp=i=>this.onPointerAll(i,"up"),this.onPointerCancel=i=>this.onPointerAll(i,"cancel"),this.onPointerMove=i=>this.onPointerAll(i,"move")}pointerPosUpdater(t){this.pointerX=t.clientX,this.pointerY=t.clientY}onPointerAll(t,i){this.pointerPosUpdater(t);let o=e.getClickType(t);if(o!=="invalid"||i==="move"||i==="cancel"){t.preventDefault();let u=this.getMousePos();this.pointerEvents.emit("action",u,o,i)}}static getClickType(t){switch(t.button){case 0:return"left";case 1:return"middle";case 2:return"right";default:return"invalid"}}listenPointerUpdates(){this.canvas.addEventListener("pointermove",this.pointerPosUpdater),this.canvas.addEventListener("pointerdown",this.onPointerDown),this.canvas.addEventListener("pointerup",this.onPointerUp),this.canvas.addEventListener("pointercancel",this.onPointerCancel),this.canvas.addEventListener("pointermove",this.onPointerMove)}unlistenPointerUpdates(){this.canvas.removeEventListener("pointermove",this.pointerPosUpdater),this.canvas.removeEventListener("pointerdown",this.onPointerDown),this.canvas.removeEventListener("pointerup",this.onPointerUp),this.canvas.removeEventListener("pointermove",this.onPointerMove)}pointerPosToWorldPos(t,i){let o=this.canvas.getBoundingClientRect(),u=(t-o.left)/o.width,y=(i-o.top)/o.height,g=u*this.viewportWidth*this.cameraWidth/o.width,C=y*this.viewportHeight*this.cameraHeight/o.height;return new M(g,C)}getMousePos(){return this.pointerPosToWorldPos(this.pointerX,this.pointerY)}useDraw(t){let i=o=>{t(o,new s)};return this.on("draw",i),()=>{this.off("draw",i)}}attachTo(t){t.addRenderer(this),this.game=t}detach(){this.game&&this.game.deleteRenderer(this)}}x.KaylaRenderer=e;class n{current;saves;constructor(){this.saves=[]}useTick(t){if(!this.current)throw new Error("Hook 'useTick' must be executed in the top level scope of a component.");this.current.onTick[this.current.useStepCallIndex]=t,this.current.useStepCallIndex++}usePaint(t){if(!this.current)throw new Error("Hook 'usePaint' must be executed in the top level scope of a component.");this.current.onPaint[this.current.useDrawCallIndex]=t,this.current.useDrawCallIndex++}useEntity(){if(!this.current)throw new Error("Hook 'useEntity' must be executed in the top level scope of a component.");return ge(be)}useSelf(t){if(!this.current)throw new Error("Hook 'useSelf' must be executed in the top level scope of a component.");let i=ge(null);return(i.current===null||i.current===void 0)&&(i.current=t()),i.current}useInitialization(t){if(!this.current)throw new Error("Hook 'useInitialization' must be executed in the top level scope of a component.");let i=this.current;i.onInits[this.current.useInitCallIndex]=t,i.useInitCallIndex++}useRect(){if(!this.current)throw new Error("Hook 'useRect' must be executed in the top level scope of a component.");return D(()=>new x.KaylaInternalRect(this.current))}useFiber(){if(!this.current)throw new Error("Hook 'useFiber' must be executed in the top level scope of a component.");return D(()=>this.current)}useFiberControl(){if(!this.current)throw new Error("Hook 'useFiberControl' must be executed in the top level scope of a component.");let t=this.current;return D(()=>({refresh:()=>t.refresh(),get childrenCount(){return t.lastChildren.length},setMaxChildren:i=>{t.setMaxChildren(i)},getMaxChildren:()=>t.getMaxChildren(),get maxSafeChildren(){return t.maxSafeChildren},get key(){return t.key},get getChildrenEntities(){return t.getChildrenEntities.bind(t)},get getEntityChain(){return t.getEntityChain.bind(t)},get getFiberChain(){return t.getFiberChain.bind(t)}}))}useCurrentTicker(){if(!this.current)throw new Error("Hook 'useCurrentTicker' must be executed in the top level scope of a component.");return this.current.getAttachedGame().ticker}useCurrentRenderer(){if(!this.current)throw new Error("Hook 'useCurrentRenderer' must be executed in the top level scope of a component.");return this.current.getAttachedGame().mainRenderer}useCurrentGame(){if(!this.current)throw new Error("Hook 'useCurrentGame' must be executed in the top level scope of a component.");return this.current.getAttachedGame()}useCurrentScene(){if(!this.current)throw new Error("Hook 'useCurrentScene' must be executed in the top level scope of a component.");return this.current.scene}useState(t,{alwaysRecall:i=!1}={}){if(!this.current)throw new Error("Hook 'useState' must be executed in the top level scope of a component.");let u=this.current.state[this.current.useStateCallIndex]??new a(this.current,t,{alwaysRecall:i});return this.current.state[this.current.useStateCallIndex]=u,this.current.useStateCallIndex++,u}useShouldRefresh(t){let i=this.current;if(!i)throw new Error("useShouldRefresh must be called inside a component");i.watchedDeps&&console.warn("useShouldRefresh called multiple times \u2014 using the last call"),i.watchedDeps=t}useRef(t){if(!this.current)throw new Error("Hook 'useRef' must be executed in the top level scope of a component.");let o=this.current.refs[this.current.useRefCallIndex]??d(t??null);return this.current.refs[this.current.useRefCallIndex]=o,this.current.useRefCallIndex++,o}useEffect(t){if(!this.current)throw new Error("Hook 'useEffect' must be executed in the top level scope of a component.");this.current.onEffect[this.current.useEffectCallIndex]=t,this.current.useEffectCallIndex++}useViewportEffect(t){if(!this.current)throw new Error("Hook 'useViewport' must be executed in the top level scope of a component.");this.current.onViewportEffect[this.current.useViewCallIndex]=t,this.current.useViewCallIndex++}useExports(t,i){if(!this.current)throw new Error("Hook 'useExports' must be executed in the top level scope of a component.");this.current.onExport=i}useGlobalPointer(t,i){if(!this.current)throw new Error("Hook 'useGlobalPointer/useGlobalClick' must be executed in the top level scope of a component.");i??={},this.current.onGlobalPointer[this.current.useGlobalClickCallIndex]={handler:t,config:i},this.current.useGlobalClickCallIndex++}usePointer(t,i){if(!this.current)throw new Error("Hook 'usePointer/useClick' must be executed in the top level scope of a component.");i??={};let o=this.current;Te((u,y,g)=>{let C=o.entity;if(!C)return;let E=C.getRawRect(),z=L.createRawRect({x:u.x,y:u.y,width:3,height:3});L.rawCollision(E,z)&&t(u,y,g)},i)}useContext(t){if(!this.current)throw new Error("Hook 'useContext' must be executed in the top level scope of a component.");return this.current.findContextValueFromInst(t)}save(){this.saves.push({current:this.current})}restore(){let t=this.saves.pop();if(!t)throw new Error("Cannot restore without saving.");this.current=t.current}logLevel="warn";logger={debug:(...t)=>{this.logLevel==="debug"&&console.debug(...t)},info:(...t)=>{["info","warn","debug"].includes(this.logLevel)&&console.info(...t)},warn:(...t)=>{["warn","debug"].includes(this.logLevel)&&console.warn(...t)},error:(...t)=>console.error(...t),withFiber:(t,i,o,...u)=>{let y=t?.fc?.name||"anonymous",g=t?.key?` key=${t.key}`:"";this.logger[i](`${o} <${y}${g}>`,...u)}}}x.GlobalKayla=n;class s{preventDefault(){this.#e=!0}#e=!1;isPrevented(){return this.#e}}x.KaylaEvent=s;class a{#e;#t;#n;alwaysRecall;constructor(t,i,{alwaysRecall:o=!1}={}){this.#t=t,this.#e=i??void 0,this.#n=Date.now(),this.alwaysRecall=o}get(){return this.#e}get 0(){return this.get()}1(t){this.set(t,{recall:!0})}legacy(){return[this[0],this[1].bind(this)]}add(t,{recall:i}={}){this.set(this.get()+t,{recall:i})}multiply(t,{recall:i}={}){this.set(this.get()*t,{recall:i})}set(t,{recall:i=!1}={}){let o=this.#e;if(t===o)return;this.#e=t;let y=Date.now()-this.#n;i&&y<67&&this.#t.global.logger.warn(`Hot structural state change <${this.#t.fc?.name||"anonymous"}> delta=${y}ms`),(i||this.alwaysRecall)&&this.#t.refresh(),this.#n=Date.now()}get value(){return this.#e}get lastChanged(){return this.#n}}x.KaylaInternalState=a;class l{#e;constructor(t){this.#e=t??void 0}#t;setSetter(t){this.#t=t}get current(){return this.#e}set current(t){this.#e=t,this.#t&&this.#t(this.#e)}}x.KaylaInternalRef=l;function d(v){return new l(v)}x.createReassignableRef=d;class f{state;refs;global;callProps;scene;exports;detectedParent;contextInfo;lastLayer;get childrenCount(){return this.lastChildren.length}maxSafeChildren;dynamicChildren;constructor(t,i,o){if(!o)throw new Error("Empty element");this.maxSafeChildren=40,this.scene=i,this.state=[],this.refs=[],this.onInits=[],this.onUnInits=[],this.fc=o.type,this.callProps=o.props??{},this.global=t,this.lastStateDeps=[],this.entity=null,this.lastChildren=[],this.onEffect=[],this.onUnEffect=[],this.onPaint=[],this.onTick=[],this.onGlobalPointer=[],this.pointerHook=this.pointerHook.bind(this),this.resizeHook=this.resizeHook.bind(this),this.contextInfo=null,this.detectedParent=null,this.dynamicChildren=[],this.key??=this.fc.name+"_"+ye(),this.onViewportEffect=[],this.lastLayer=null}getCorrectMousePos(t){return t??=this.getAttachedRenderer().getMousePos(),this.lastLayer?.transform?this.lastLayer.transform.inverseV(t):t}getChildrenEntities(){return this.lastChildren.map(t=>t.entity)}pointerHook(t,i,o){t=this.getCorrectMousePos(t);try{for(let{handler:u,config:y}of this.onGlobalPointer)y.type??="any",y.action??="down",!(y.action!=="any"&&y.action!==o||y.type!=="any"&&y.type!==i)&&u(t,i,o)}catch(u){this.global.logger.error(u)}}resizeHook({width:t,height:i}){try{for(let o of this.onViewportEffect)o(this.getAttachedRenderer(),t,i)}catch(o){this.global.logger.error(o)}}bindEvents(){for(let t of[this.getAttachedRenderer()])t&&(t.pointerEvents.on("action",this.pointerHook),t.on("viewport_update",this.resizeHook))}unbindEvents(){for(let t of[this.getAttachedRenderer()])t&&(t.pointerEvents.off("action",this.pointerHook),t.off("viewport_update",this.resizeHook))}get key(){return this.callProps.key}set key(t){this.callProps.key=t}get children(){return this.callProps.children}set children(t){this.callProps.children=t}entity;onExport=()=>({});onEffect;onViewportEffect;onGlobalPointer;onInits;onUnInits;onUnEffect;onEffectDeps;onPaint;onTick;fc;useStateCallIndex=0;useEffectCallIndex=0;useGlobalClickCallIndex=0;useDrawCallIndex=0;useStepCallIndex=0;useRefCallIndex=0;useInitCallIndex=0;useViewCallIndex=0;lastStateDeps;watchedDeps;lastDepStamps=[];getAttachedRenderer(){return this.getAttachedGame().mainRenderer}getAttachedGame(){return this.scene.getGame()}setMaxChildren(t){if(this.maxSafeChildren=Math.max(0,t),this.global.logger.debug(`Max children limit updated to ${t} for <${this.fc?.name||"anonymous"} key=${this.key}>`),this.lastChildren.length>this.maxSafeChildren){let i=this.lastChildren.length-this.maxSafeChildren;this.global.logger.warn(`Child limit exceeded (${this.lastChildren.length} > ${this.maxSafeChildren}) \u2014 removing ${i} oldest children <${this.fc?.name||"anonymous"} key=${this.key}>`);let o=this.lastChildren.slice(0,this.maxSafeChildren),u=this.lastChildren.slice(this.maxSafeChildren);this.lastChildren=o;for(let y of u)y.unuse()}}getMaxChildren(){return this.maxSafeChildren??1/0}getFiberChain(){let t=[],i=this.detectedParent;for(;i;)t.push(i),i=i?.detectedParent;return t}getAllChildrenNestedFlattened(){let t=[],i=(o=[])=>{for(let u of o)t.push(u),u.lastChildren?.length&&i(u.lastChildren)};return i(this.lastChildren),t}getContextChain(){return this.getFiberChain().map(t=>t.contextInfo).filter(Boolean)}findContextValueFromInst(t){return this.getContextChain().find(i=>i.instance===t)?.value}getEntityChain(){return this.getFiberChain().map(t=>t.entity)}shouldFullRefresh(){if(this.isFirstUse||!this.watchedDeps||this.watchedDeps.length===0)return!0;for(let t=0;t<this.watchedDeps.length;t++){let i=this.watchedDeps[t],o=this.lastDepStamps[t]??0;if(i.lastChanged>o)return!0}return!1}captureDepStamps(){this.watchedDeps&&(this.lastDepStamps=this.watchedDeps.map(t=>t.lastChanged))}refresh(){if(!this.shouldFullRefresh())return;let t=this.fc?.name||"anonymous";if(!this.shouldFullRefresh()){this.global.logger.debug(`Refresh skipped <${t} key=${this.key}>`);return}this.global.logger.debug(`Refresh executed <${t} key=${this.key}> reason=${this.isFirstUse?"first":"deps-changed"}`),this.lastChildren.length>this.maxSafeChildren&&this.global.logger.warn(`High child count <${t} key=${this.key}> children=${this.lastChildren.length}`);let i;this.global.save(),this.global.current=this,this.useStateCallIndex=0,this.useRefCallIndex=0,this.useInitCallIndex=0,this.useViewCallIndex=0,this.useStateCallIndex=0,this.useDrawCallIndex=0,this.useStepCallIndex=0,this.useEffectCallIndex=0,this.useGlobalClickCallIndex=0;let o=[];try{let u=this.fc(this.callProps)??[];if(u&&!Array.isArray(u)&&(u=[u]),!Array.isArray(u))throw new Error("Non array or non undefined children received.");for(let y of u)if(y.type===this.fc)throw new Error("Circular Component.");o=u}catch(u){i=u}if(this.global.restore(),this.updateChildren(o,!0),i)throw i}updateChildren(t,i){try{let o=[...t,...this.dynamicChildren],u=[],y=[];for(let g of o){let C=g.props?.key,E;C!=null&&(E=this.lastChildren.find(z=>z.key===C)),E||(E=new f(this.global,this.scene,g)),E.callProps=g.props,E.detectedParent=this,y.push(E),u.push(E)}for(let g of this.lastChildren)u.includes(g)||g.unuse();this.lastChildren=y,this.captureDepStamps(),this.use();for(let g of this.lastChildren)try{g.refresh()}catch(C){console.error(C)}}catch(o){console.error(o)}}lastChildren;isFirstUse=!0;use(){try{let t=!0;if(this.lastStateDeps??=[],Array.isArray(this.onEffectDeps)&&(t=!0),t||this.isFirstUse){this.global.logger.debug(`Using <${this.fc?.name||"anonymous"} key=${this.key}> count=${this.onEffect.length}`);let i=this.isFirstUse;this.isFirstUse=!1,Array.isArray(this.onEffectDeps)&&(this.lastStateDeps=this.onEffectDeps.map(u=>({stamp:u.lastChanged,stateRef:u}))),this.entity&&this.scene.getScene().removeEntity(this.entity),this.entity&&this.entity.name!==this.key&&(this.entity=null),this.entity=this.entity??new h(this,this.key);for(let u of this.refs)u.current===be&&(u.current=this.entity);if(this.callProps.ref instanceof l&&(this.callProps.ref.current=this.entity),this.exports=this.onExport(),this.callProps.exportsRef instanceof l&&(this.callProps.exportsRef.current=this.exports),this.entity&&this.entity!==this.entity&&this.global.logger.warn(`Entity name mismatch during refresh <${this.fc?.name} key=${this.key}>`),this.scene.getScene().addEntity(this.entity),i){this.onUnInits=[];for(let u of this.onInits){this.bindEvents();try{let y=u();typeof y=="function"&&this.onUnInits.push(y)}catch(y){throw this.global.logger.error("Initialization failed",this.fc?.name||"anonymous",y),y}}}try{for(let u of this.onUnEffect??[])u()}catch(u){console.error(u)}let o=this.onEffect.map(u=>u()).filter(u=>u!==void 0);this.onUnEffect=o}}catch(t){throw this.global.logger.error(`use() failed <${this.fc?.name||"anonymous"} key=${this.key}>`,t),t}}unuse(){this.global.logger.debug(`unuse called <${this.fc?.name||"anonymous"} key=${this.key}> children=${this.lastChildren.length}`),this.detectedParent=null,this.watchedDeps=void 0,this.lastDepStamps=[],this.unbindEvents();try{for(let t of this.onUnInits)t();for(let t of this.onUnEffect)t()}catch(t){this.global.logger.error(`Cleanup failed in unuse <${this.fc?.name||"anonymous"} key=${this.key}>`,t)}this.scene.getScene().removeEntity(this.entity);for(let t of this.lastChildren)t.unuse();this.lastChildren.length=0}}x.KaylaFiber=f;class h extends ee{#e;flags;getRawRect(){return L.createRawRect({x:this.x,y:this.y,width:this.width,height:this.height})}getFiber(){return this.#e}constructor(t,i){super(i,0,0,0,0),this.#e=t,this.flags=new Map,this.color="transparent"}setFlag(t,i){return this.flags.set(t,i)}getFlag(t){return this.flags.get(t)}removeFlag(t){return this.flags.delete(t)}update(t){le(()=>{let i=new s;if(this.#e&&this.#e.onTick)for(let o of this.#e.onTick)o(t,i);i.isPrevented()})}draw(t){let i=new s;if(this.#e&&this.#e.onPaint)for(let o of this.#e.onPaint)o(t,i);i.isPrevented()||super.draw(t)}getRect(){return new c(this.getFiber())}}x.KaylaRectEntity=h;class c{#e;constructor(t){this.#e=t}get color(){return this.#t(),this.entity.color}set color(t){this.#t(),this.entity.color=t}getRaw(){return L.createRawRect({x:this.x,y:this.y,width:this.width,height:this.height})}get entity(){return this.#e.entity??null}#t(){if(!this.#e)throw new Error("No fibers found.");if(!this.entity)throw new Error("The entity does NOT exist yet.")}isCollidingWith(t){return this.#t(),this.entity.isCollidingWith(t.entity)}get setFlag(){return this.#t(),this.entity.setFlag.bind(this.entity)}get getFlag(){return this.#t(),this.entity.getFlag.bind(this.entity)}get removeFlag(){return this.#t(),this.entity.removeFlag.bind(this.entity)}isHovered(){let t=this.getRaw(),i=this.#e.getCorrectMousePos(),o=L.createRawRect({x:i.x,y:i.y,width:3,height:3});return L.rawCollision(t,o)}get pos(){return this.#t(),this.entity.pos}get x(){return this.#t(),this.pos.x}set x(t){this.#t(),this.pos.x=t}get y(){return this.#t(),this.pos.y}set y(t){this.#t(),this.pos.y=t}get width(){return this.#t(),this.entity.width}set width(t){this.#t(),this.entity.width=t}get height(){return this.#t(),this.entity.height}set height(t){this.#t(),this.entity.height=t}get z(){return this.#t(),this.entity.z}set z(t){this.#t(),this.entity.z=t}get left(){return this.#t(),this.entity.left}set left(t){this.#t(),this.entity.left=t}get right(){return this.#t(),this.entity.right}set right(t){this.#t(),this.entity.right=t}get top(){return this.#t(),this.entity.top}set top(t){this.#t(),this.entity.top=t}get bottom(){return this.#t(),this.entity.bottom}set bottom(t){this.#t(),this.entity.bottom=t}get toLocal(){return this.entity.toLocal.bind(this.entity)}get toWorld(){return this.entity.toWorld.bind(this.entity)}}x.KaylaInternalRect=c;class p{#e;#t;constructor(t){this.#r=t,this.#n=null,this.#e=new Map,t.on("update",this.tickHandler.bind(this)),this.drawHandler=this.drawHandler.bind(this),t.handleDraw=this.drawHandler,this.#t=null}getLayers(){return this.#e}#n;#r;getFibers(){return this.getEntities().map(t=>t.getFiber())}getEntities(){return Array.from(this.getScene().entities.values())}getScene(){return this.#r}getGame(){return this.#n}getOrCreateLayer(t,i=0){return this.#e.has(t)||this.#e.set(t,{name:t,z:i,visible:!0,rootFiber:null}),this.#e.get(t)}getSortedLayers(){return Array.from(this.#e.values()).filter(t=>t.visible).sort((t,i)=>t.z-i.z)}setLayerVisible(t,i){let o=this.#e.get(t);o&&(o.visible=i)}handleDraw(t){if(U)return;let i=this.getScene();if(i.paused)return;i.emit("draw",t);let o=this.getSortedLayers(),u=[];for(let g of o){if(!g.visible)continue;let C=g.rootFiber;if(!C)continue;let E=C.getAllChildrenNestedFlattened().flat().map(K=>K.entity).filter(Boolean);if(u.push(...E),t.save(),g.transform){let K=g.transform;t.setTransform(K.a,K.b,K.c,K.d,K.e,K.f)}g.blendMode&&(t.globalCompositeOperation=g.blendMode??"source-over");let z=Array.from(E).sort((K,T)=>K.z-T.z);for(let K of z)K.getFiber().lastLayer=g,K.handleDraw(t);t.restore()}let y=[...i.entities.values()].filter(g=>!u.includes(g));for(let g of y.sort((C,E)=>C.z-E.z))g.getFiber().lastLayer=null,g.handleDraw(t)}drawHandler(t){return this.handleDraw(t)}attachTo(t){t.addScene(this.#r),this.#n=t}async spawn(t){this.#t&&(this.#t.unuse(),this.#t=null);let i=this.createFiber(t);this.#t=i,await this.#n.delay(0),i.refresh()}getRoot(){return this.#t??null}createFiber(t){return new f(x.singleGlobalInstance,this,t)}detach(){this.#n&&this.#n.removeScene(this.#r)}tickHandler(){}}x.KaylaScene=p,x.singleGlobalInstance=new x.GlobalKayla})(G||={});var te=class{#e;constructor(e){this.Provider=this.#t.bind(this),this.#e=e}get defaultValue(){return this.#e}#t({value:e=this.defaultValue,children:n}){let s=we();return re(()=>{s.contextInfo={instance:this,value:e}}),oe(this.Provider,()=>({value:e})),n}Provider;Consumer};function Ne(r){return new te(r)}var m=G.singleGlobalInstance,Xe=m.useState.bind(m),ge=m.useRef.bind(m),qe=m.useShouldRefresh.bind(m),re=m.useEffect.bind(m),Be=m.useViewportEffect.bind(m),Te=m.useGlobalPointer.bind(m),We=m.useGlobalPointer.bind(m),je=m.usePointer.bind(m),Ye=m.usePointer.bind(m),ie=m.useInitialization.bind(m),se=m.useRect.bind(m),Qe=m.useTick.bind(m),ae=m.usePaint.bind(m),oe=m.useExports.bind(m),D=m.useSelf.bind(m),ve=m.useFiberControl.bind(m),we=m.useFiber.bind(m),Je=m.useEntity.bind(m),Ze=m.useCurrentGame.bind(m),et=m.useCurrentRenderer.bind(m),Pe=m.useCurrentScene.bind(m),tt=m.useCurrentTicker.bind(m),nt=m.useContext.bind(m),be=Symbol("self_ref");var le=r=>{Promise.resolve(1).then(()=>{try{r()}catch(e){console.error(e)}})},Ce=({children:r})=>Array.isArray(r)?[...r]:r;function rt(r){return G.createReassignableRef(r)}function it(r){if(typeof r!="object"||typeof r=="function"||r===null)return r;let e={current:r};return new Proxy({},{get(s,a,l){return a==="reassignSelf"?d=>{e.current=d}:Reflect.get(e.current,a,l)},set(s,a,l,d){return Reflect.set(e.current,a,l,d)},has(s,a){return Reflect.has(e.current,a)},ownKeys(s){return Reflect.ownKeys(e.current)},getOwnPropertyDescriptor(s,a){return Reflect.getOwnPropertyDescriptor(e.current,a)},deleteProperty(s,a){return Reflect.deleteProperty(e.current,a)}})}function st(r){m.logLevel=r}function at(r){let e=r.name||"anonymous-custom-hook";return function(s){let a=m.current;if(!a)throw new Error(`Custom hook '${e}' must be called inside a Kayla component`);let l=s??{};return r.memoize!==!1?D(()=>(a.global.logLevel==="debug"&&a.global.logger.debug(`Custom hook '${e}' initialized (memoized) <${a.fc?.name||"anonymous"} key=${a.key||"no-key"}>`),r.onUse(a,m,l))):(a.global.logLevel==="debug"&&a.global.logger.debug(`Custom hook '${e}' running (non-memoized) <${a.fc?.name||"anonymous"} key=${a.key||"no-key"}>`),r.onUse(a,m,l))}}var Ie;(e=>e.id="kayla")(Ie||={});var ot=({name:r,z:e=0,blend:n,visible:s=!0,children:a,transform:l})=>{let d=Pe(),f=we();return ie(()=>{let h=d.getOrCreateLayer(r,e);return h.blendMode=n,h.visible=s,h.rootFiber=f,h.transform=l??null,()=>{d.getLayers().delete(r)}}),a},xe=class extends DOMMatrix{#e;constructor(){super(),this.#e=new DOMPoint}transformV(e){this.#e.x=e.x,this.#e.y=e.y;let n=this.#e.matrixTransform(this);return new M(n.x,n.y)}inverseV(e){let n=this.inverse();this.#e.x=e.x,this.#e.y=e.y;let s=this.#e.matrixTransform(n);return new M(s.x,s.y)}};Reflect.set(globalThis,"Kayla",Ee);var lt;(n=>(n.Flex=({align:s="stretch",children:a,direction:l="row",gap:d=0,justify:f="start",wrap:h="nowrap",getHeight:c,getWidth:p,getCenterX:b,getCenterY:x,color:v})=>{let t=ve(),i=se(),o=D(()=>({recalc(){let u=Number(d)||0,y=b(),g=x(),C=p(),E=c();i.x=y,i.y=g,i.width=C,i.height=E;let K=t.getChildrenEntities().filter(Boolean).map(w=>w.getRect()).filter(w=>w.getFlag("flex-ignored")!==!0),T=l==="row",A=T?i.width:i.height,ft=T?i.height:i.width,ue=0,$=0,he=[],q=[];K.forEach(w=>{let B=T?w.width:w.height;ue+B>A&&h==="wrap"?(he.push({height:$,items:q}),q=[w],ue=B,$=T?w.height:w.width):(q.push(w),ue+=B+u,$=Math.max($,T?w.height:w.width))}),he.push({height:$,items:q});let ce=0;he.forEach((w,B)=>{let F=w.items,_=F.reduce((R,W)=>R+(T?W.width:W.height),0)+u*(F.length-1),I=0;f==="center"&&(I=(A-_)/2),f==="end"&&(I=A-_),f==="space-between"&&(I=0),f==="space-around"&&(I=(A-_)/(F.length*2)),f==="space-evenly"&&(I=(A-_)/(F.length+1)),F.forEach((R,W)=>{R.z=i.z+1;let H=T?R.width:R.height,j=T?R.height:R.width,Y=0;s==="center"&&(Y=(w.height-j)/2),s==="end"&&(Y=w.height-j),s==="stretch"&&(T?R.height=w.height:R.width=w.height),T?(R.x=I+H/2,R.y=ce+Y+j/2):(R.x=ce+Y+j/2,R.y=I+H/2),f==="space-between"&&W<F.length-1?I+=H+u+(A-_)/(F.length-1):f==="space-around"?I+=H+u+(A-_)/F.length:f==="space-evenly"?I+=H+u+(A-_)/(F.length+1):I+=H+u}),ce+=w.height+u})}}));return ae((u,y)=>{y.preventDefault(),u.fillStyle=v,u.fillRect(i.left,i.top,i.width,i.height)}),re(()=>{le(()=>{o.recalc()})}),oe(n.Flex,()=>({controls:o})),a},n.GenericBox=({color:s,width:a=20,height:l=20,x:d=0,y:f=0})=>{let h=se();ie(()=>{h.width=a,h.height=l,h.x=d,h.y=f}),ae((c,p)=>{p.preventDefault(),c.fillStyle=s,c.fillRect(h.left,h.top,h.width,h.height)})}))(lt||={});function ut(r,e,...n){if(typeof r=="string")throw new Error("Cannot use intrinsic elements.");return ne(r,{...e,children:e.children??n})}function Se(r,e,...n){if(typeof r=="string")throw new Error("Cannot use intrinsic elements.");return ne(r,{...e,children:e.children??n})}function ht(r,e){return Se(r,e)}var ct=Ce;0&&(module.exports={Fragment,jsx,jsxDEV,jsxs});
|
|
1
|
+
"use strict";var ge=Object.defineProperty;var De=Object.getOwnPropertyDescriptor;var Ve=Object.getOwnPropertyNames;var Ge=Object.prototype.hasOwnProperty;var Pe=(r,e)=>{for(var n in e)ge(r,n,{get:e[n],enumerable:!0})},ze=(r,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of Ve(e))!Ge.call(r,a)&&a!==n&&ge(r,a,{get:()=>e[a],enumerable:!(i=De(e,a))||i.enumerable});return r};var He=r=>ze(ge({},"__esModule",{value:!0}),r);var vt={};Pe(vt,{Fragment:()=>wt,JSX:()=>me,jsx:()=>gt,jsxDEV:()=>xt,jsxs:()=>_e});module.exports=He(vt);var Te={};Pe(Te,{JSX:()=>me,KMatrix2D:()=>Ke,KaylaContext:()=>ce,KaylaElement:()=>Y,KaylaFragment:()=>Se,KaylaInternals:()=>H,KaylaRect:()=>D,Layer:()=>pt,Rect:()=>mt,Text:()=>Le,createContext:()=>je,createElement:()=>Q,createGame:()=>qe,createReassignableObject:()=>ht,createRenderer:()=>We,createScene:()=>Be,createUseHook:()=>dt,safeValueRepresentation:()=>J,self:()=>Ee,setLogLevel:()=>ct,tinyUID:()=>ft,useClick:()=>et,useContext:()=>ot,useCurrentGame:()=>it,useCurrentRenderer:()=>st,useCurrentScene:()=>Me,useCurrentTicker:()=>at,useDisposableRef:()=>ut,useEffect:()=>Z,useEntity:()=>rt,useExports:()=>pe,useFiber:()=>ke,useFiberControl:()=>Re,useGlobalClick:()=>Ae,useGlobalPointer:()=>Ze,useInitialization:()=>de,useNextStack:()=>fe,usePaint:()=>ee,usePointer:()=>tt,useRect:()=>O,useRef:()=>Ce,useSelf:()=>z,useShouldRefresh:()=>Je,useState:()=>Ye,useSubstep:()=>lt,useTick:()=>nt,useUsing:()=>yt,useViewportEffect:()=>Qe});var M=class{#e=new Map;constructor(){this.#e=new Map}on(e,n){let i=this.#e.get(e)||[];return i.push(n),this.#e.set(e,i),this}once(e,n){let i=(...a)=>{this.off(e,i),n(...a)};return this.on(e,i),this}off(e,n){let i=this.#e.get(e);if(!i)return this;let a=i.indexOf(n);return a>=0&&i.splice(a,1),this}emit(e,...n){let i=this.#e.get(e);if(!i||i.length===0){if(e==="error")throw n[0];return!1}return i.slice().forEach(a=>a(...n)),!0}removeAllListeners(e){return e?this.#e.delete(e):this.#e.clear(),this}listenerCount(e){return this.#e.get(e)?.length??0}},oe=class extends M{#e;#t;running;_rafId;_fps;_frameCount;_fpsTimer;_lastFrameTime;get canvas(){return this.#e}get ctx(){return this.#t}set canvas(e){this.#e=e,this.#t=e.getContext("2d"),this.updateCanvasResolution()}constructor(e,{viewportWidth:n,viewportHeight:i,cameraWidth:a,cameraHeight:l}={}){if(!P)throw new Error("Web-Only");super(),this.canvas=e,this.automatic=!0,this.#n=n??e.width,this.#r=i??e.height,this.#i=a??e.width,this.#s=l??e.height,this.running=!1,this._rafId=null,this._loop=this._loop.bind(this),this.updateCanvasResolution(),this._fps=60,this._frameCount=0,this._fpsTimer=0}automatic;retransform(){this.ctx.setTransform(1,0,0,1,0,0);let e=this.#i/this.#n,n=this.#s/this.#r;this.ctx.translate(this.#i/2,this.#s/2),this.ctx.scale(e,n),this.ctx.translate(-this.#n/2,-this.#r/2)}#n=0;#r=0;#i=0;#s=0;get viewportWidth(){return this.#n}set viewportWidth(e){this.#n=e,this.retransform(),this.emitViewportUpdate()}get width(){return this.#n}get height(){return this.#r}get centerX(){return this.#n/2}get centerY(){return this.#r/2}get left(){return 0}get top(){return 0}get right(){return this.#n}get bottom(){return this.#r}get viewportHeight(){return this.#r}set viewportHeight(e){this.#r=e,this.retransform(),this.emitViewportUpdate()}get cameraWidth(){return this.#i}set cameraWidth(e){this.#i=e,this.updateCanvasResolution(),this.retransform()}get cameraHeight(){return this.#s}set cameraHeight(e){this.#s=e,this.updateCanvasResolution(),this.retransform()}updateCanvasResolution(){this.canvas.width=this.#i,this.canvas.height=this.#s}emitViewportUpdate(){this.emit("viewport_update",{width:this.viewportWidth,height:this.viewportHeight})}applyTransform(){this.retransform()}get FPS(){return this._fps}_loop(){this.automatic&&this.update(),this._rafId=requestAnimationFrame(this._loop)}update(){if(!this.running||!P)return;let e=performance.now(),n=(e-(this._lastFrameTime??e))/1e3;this._lastFrameTime=e,this._frameCount++,this._fpsTimer+=n,this._fpsTimer>=1&&(this._fps=Math.round(this._frameCount/this._fpsTimer),this._frameCount=0,this._fpsTimer=0),this.ctx.clearRect(0,0,this.#i,this.#s),this.emit("draw",this.ctx)}start(){if(!this.running){if(!P||typeof globalThis.requestAnimationFrame>"u")throw new Error("Raf is not supported");this.running=!0,this._rafId=requestAnimationFrame(this._loop)}}stop(){if(!P||typeof globalThis.requestAnimationFrame>"u")throw new Error("Raf is not supported");this.running=!1,this._rafId!==null&&(cancelAnimationFrame(this._rafId),this._rafId=null)}},xe=class extends M{setNow(e){this.#e=e}#e=0;__intervalId=null;__lastTime=0;constructor(e=16){super(),this.#t=e,this.speedHackDT=1}speedHackDT;get isRaf(){return this.tickInterval===1/0}#t=15;get tickInterval(){return this.#t}set tickInterval(e){this.#t=e,this.__intervalId&&(this.stop(),this.start())}now(){return this.#e}__tick(){let e=performance.now(),n=(e-this.__lastTime)/1e3*this.speedHackDT;this.__lastTime=e,!(P&&typeof this.__intervalId=="function"&&document.hidden)&&(this.#e+=n*1e3,this.emit("tick",n))}createTimeout(e){return new ve(e,this)}createTween(e,n=()=>{}){let i=new we(e),a=(l=0)=>{if(i.finished){this.off("tick",a);return}i.update(l)};return i.on("finish",()=>{this.off("tick",a)}),i.on("delta",l=>{n(l)}),this.on("tick",a),i}start(){this.__intervalId===null&&(this.__lastTime=performance.now(),this.__intervalId=P&&!isFinite(this.tickInterval)?Ne(()=>this.__tick()).clear:setInterval(()=>this.__tick(),this.tickInterval))}stop(){this.__intervalId!==null&&(typeof this.__intervalId=="function"?this.__intervalId():clearInterval(this.__intervalId)),this.__intervalId=null}getSineMod(e,n=0){return .5+.5*Math.sin((this.now()%e/e+n)*2*Math.PI)}getLoopMod(e,n=0){return(this.now()+n*e)%e/e}},$e;(R=>{function r(f){return f===!0?1:0}R.booleanExport=r;function e(f){return f===0?!1:f===1}R.booleanImport=e;function n(f){return`${f.x}|${f.y}`}R.vec2Export=n;function i(f){let[t,s]=f.split("|"),o=parseFloat(t),u=parseFloat(s);if(isNaN(o)||isNaN(u))throw new Error(`Invalid Vector2 string: ${f}`);return new A(o,u)}R.vec2Import=i,R.booleanMap={mapExport:r,mapImport:e};function l(f){return t=>Number(t.toFixed(f))}R.createRounder=l;function c(f=10){return{mapExport(t){return Math.round(t/f)},mapImport(t){return t*f}}}R.createLowPrecision=c;function p(f){return Math.round(f)}R.lightWeightRounder=p;function h(f=100){return{mapExport(t){return Math.round(t*f)},mapImport(t){return t/f}}}R.createPercent=h;function d(f){let t=new Map(Object.entries(f));return{mapExport:s=>t.get(s)??null,mapImport:s=>Array.from(t.entries()).find(([o,u])=>u===s)?.[0]??null}}R.createLookup=d;function m(f){let t=f*(180/Math.PI);return Math.round((t%360+360)%360)}R.radToDeg=m;function x(f){return f*(Math.PI/180)}R.degToRad=x,R.angleRadToDeg={mapExport:m,mapImport:x};function S(f=10){let t=c(f);return{mapExport(s){return t.mapExport(m(s))},mapImport(s){return t.mapImport(x(s))}}}R.createLowPrecisionRadToDeg=S})($e||={});var q=class r extends M{name="";scaleRotate=0;scale=1;constructor(e,n=0,i=0){super(),this.autoTranslate=!1,this.name=e,this.z=0,this.___pos=new A(n,i),this.nonSerializableProperties=[],this.nonSerializableProperties.push("___pos","autoTranslate","arraySerializeMap"),this.forceSerializableProperties=[],this.forceSerializableProperties.push("x","y")}arraySerializeMap;autoTranslate;z;___pos;nonSerializableProperties;forceSerializableProperties;get pos(){return this.___pos}get x(){return this.pos.x}get y(){return this.pos.y}set x(e){this.pos.x=e}set y(e){this.pos.y=e}handleUpdate(e){if(this.update)try{this.emit("update",e),this.update(e)}catch(n){this.emit("error",n)}}handleDraw(e){if(!(_||!this.draw)){e.save(),this.autoTranslate&&e.translate(this.x,this.y);try{this.emit("draw",e),this.draw(e)}catch(n){this.emit("error",n)}e.restore()}}serialize(){if(Array.isArray(this.arraySerializeMap))return this.arraySerializeMap.map(([a,{mapExport:l}])=>{let c=Reflect.get(this,a);return l?l(c):c});let e=["_events","_eventsCount","_maxListeners","nonSerializableProperties","forceSerializableProperties"],n=[...Reflect.ownKeys(this),...this.forceSerializableProperties].filter(a=>!this.nonSerializableProperties.includes(a)&&!e.includes(a.toString())),i=Object.fromEntries(n.map(a=>{let l=Reflect.get(this,a);if(_&&typeof l=="number"){let c=l.toString().split("."),h=(c[1]?c[1].length:0)>2?Number(l.toFixed(2)):l;return[a,h]}return[a,l]}));return JSON.parse(JSON.stringify(i))}toLocal(e){return e.subtract(this.pos)}toWorld(e){return e.add(this.pos)}deserializeArray(e){return r.deserializeArray(this.arraySerializeMap,e)}static deserializeArray(e,n){if(!e||!Array.isArray(n))return n;let i={};for(let a=0;a<n.length;a++){let l=e[a];if(!l)break;let[c,{mapImport:p}]=l,h=n[a];if(p&&(h=p(h)),typeof c!="string")break;try{Reflect.set(i,c,h)}catch(d){console.error(d)}}return i}},le=class extends M{name="";entities=new Map;paused=!0;constructor(e){super(),this.name=e}handleUpdate(e){if(!this.paused){this.emit("update",e);for(let n of this.entities.values())n.handleUpdate(e)}}handleDraw(e){if(!_&&!this.paused){this.emit("draw",e);for(let n of[...this.entities.values()].sort((i,a)=>i.z-a.z))n.handleDraw(e)}}addEntity(e){if(!(e instanceof q))throw new Error("invalid entity");if(!e.name)throw new Error("Entity must have a name.");this.entities.set(e.name,e)}removeEntity(e){if(!(e instanceof q))throw new Error("invalid entity");this.entities.delete(e.name)}getEntity(e){return this.entities.get(e)}},ue=class{scenes;ticker;get centerX(){return this.width/2}get centerY(){return this.height/2}get left(){return 0}get top(){return 0}get right(){return this.width}get bottom(){return this.height}width;height;constructor(e,n,i=16){this.ticker=new xe(i),this.scenes=new Map,this.width=e,this.height=n,this.ticker.on("tick",a=>{for(let l of this.scenes.values())l.paused||l.handleUpdate(a)})}addScene(e){if(!e.name)throw new Error("Scene must have a name.");e.paused=!1,this.scenes.set(e.name,e)}removeScene(e){e&&(e.paused=!0),this.scenes.delete(e.name)}now(){return this.ticker.now()}start(){this.ticker.start()}stop(){this.ticker.stop()}},I={lerp(r,e,n){return r+(e-r)*n},clamp(r,e,n){return Math.min(n,Math.max(e,r))},clamp01(r){return Math.min(1,Math.max(0,r))},easeLinear(r){return r},easeInQuad(r){return r*r},easeOutQuad(r){return 1-(1-r)*(1-r)},easeInOutQuad(r){return r<.5?2*r*r:1-Math.pow(-2*r+2,2)/2},easeInSine(r){return 1-Math.cos(r*Math.PI/2)},easeOutSine(r){return Math.sin(r*Math.PI/2)},easeInOutSine(r){return-(Math.cos(Math.PI*r)-1)/2},easeInExpo(r){return r===0?0:Math.pow(2,10*r-10)},easeOutExpo(r){return r===1?1:1-Math.pow(2,-10*r)},easeInOutExpo(r){return r===0?0:r===1?1:r<.5?Math.pow(2,20*r-10)/2:(2-Math.pow(2,-20*r+10))/2},smoothstep(r){return r=I.clamp(r,0,1),r*r*(3-2*r)},randomLerp(r,e){return I.lerp(r,e,Math.random())},randomInt(r,e){return Math.floor(Math.random()*(e-r+1))+r},randomArrayValue(r){return r[I.randomInt(0,r.length-1)]},createBezier(r,e,n,i){function a(p,h,d,m,x){let v=1-p;return v*v*v*h+3*v*v*p*d+3*v*p*p*m+p*p*p*x}function l(p,h,d,m,x){let v=1-p;return 3*v*v*(d-h)+6*v*p*(m-d)+3*p*p*(x-m)}function c(p){let h=p;for(let d=0;d<6;d++){let m=a(h,0,r,n,1),x=l(h,0,r,n,1);if(x===0)break;h-=(m-p)/x}return I.clamp(h,0,1)}return function(h){h=I.clamp(h,0,1);let d=c(h);return a(d,0,e,i,1)}},lengthSquared(...r){return r.reduce((e,n)=>e+n*n,0)},normalizeRad(r){let e=2*Math.PI;return r=r%e,r<0&&(r+=e),r},angleInvertY(r){return I.normalizeRad(-r)},degToRadFlipY(r){return I.angleInvertY(r*Math.PI/180)},minimalAngularDirection(r,e){r=I.normalizeRad(r),e=I.normalizeRad(e);let n=I.normalizeRad(e-r),i=I.normalizeRad(r-e);return n<=i?1:-1}},we=class extends M{constructor({delta:e,ms:n,easing:i}){super(),this.delta=e,this.duration=n,this.elapsed=0,this.easing=i??(a=>a),this.lastValue=0,this.finished=!1}delta;duration;elapsed;lastValue;finished;easing;update(e){this.elapsed+=e*1e3;let n=I.clamp(this.elapsed/this.duration,0,1),i=this.easing(n),a=this.delta*i,l=a-this.lastValue;this.lastValue=a,this.emit("delta",l),n>=1&&(this.finished=!0,this.emit("finish",void 0))}},he=class extends q{constructor(e,n=0,i=0,a=50,l=50){super(e,n,i),this.width=a,this.height=l}width;height;get left(){return this.x-this.width/2}set left(e){this.x=e+this.width/2}get right(){return this.x+this.width/2}set right(e){this.x=e-this.width/2}get top(){return this.y-this.height/2}set top(e){this.y=e+this.height/2}get bottom(){return this.y+this.height/2}set bottom(e){this.y=e-this.height/2}get lx(){return 0}get ly(){return 0}get lleft(){return-this.width/2}get lright(){return this.width/2}get ltop(){return-this.height/2}get lbottom(){return this.height/2}isCollidingWith(e){return!(this.right<e.left||this.left>e.right||this.bottom<e.top||this.top>e.bottom)}color="rgba(0, 0, 255, 0.3)";draw(e){e.translate(this.x,this.y),e.rotate(this.scaleRotate),e.fillStyle=this.color,e.fillRect(-this.width/2,-this.height/2,this.width,this.height)}},ve=class extends M{duration;ticker;elapsed;finished;_resolve;promise;_timeoutId;constructor(e,n=null){super(),this.duration=e,this.ticker=n,this.elapsed=0,this.finished=!1,this._resolve=null,this.promise=new Promise(i=>this._resolve=i),this.update=this.update.bind(this),this.ticker&&this.ticker.on("tick",this.update)}update(e=0){this.finished||(this.elapsed+=e*1e3,this.elapsed>=this.duration&&this.finish())}finish(){this.finished||(this.finished=!0,this.emit("finish",void 0),this._resolve&&this._resolve(),this.ticker&&this.ticker.off("tick",this.update))}start(){return this.ticker||(this._timeoutId=setTimeout(()=>this.finish(),this.duration)),this}cancel(){this.finished||(this.finished=!0,!this.ticker&&this._timeoutId!=null&&clearTimeout(this._timeoutId),this.ticker&&this.ticker.off("tick",this.update))}then(e,n){return this.promise.then(e,n)}after(e,n){return this.promise.then(e,n)}},A=class r{constructor(e=0,n=0){this.x=e,this.y=n}x;y;toJSON(){return{x:this.x,y:this.y,vec2:!0}}static isVec2(e){return e&&typeof e=="object"&&"x"in e&&"y"in e&&e.vec2===!0}static fromSerialized(e){return this.isVec2(e)?new this(e.x,e.y):null}rotate(e){let n=Math.cos(e),i=Math.sin(e);return new r(this.x*n-this.y*i,this.x*i+this.y*n)}static from(e){return new r(Math.cos(e),Math.sin(e))}isEmpty(){return Math.abs(this.x)<.01&&Math.abs(this.y)<.01}get angle(){return Math.atan2(this.y,this.x)}angleTo(e){return Math.atan2(e.y-this.y,e.x-this.x)}get length(){return Math.hypot(this.x,this.y)}get lengthSquared(){return this.x*this.x+this.y*this.y}normalized(){let e=this.length;return e===0?new r(0,0):new r(this.x/e,this.y/e)}consume(e){let n=this.length;n<=e?(this.x=0,this.y=0):this.overwite(this.scale((n-e)/n))}project(e){return e.scale(this.dotNormalized(e))}reflect(e){let n=this.dot(e);return this.subtract(e.scale(2*n))}dotNormalized(e){let n=this.normalized(),i=e.normalized();return n.x*i.x+n.y*i.y}lengthSquaredTo(e){let n=this.x-e.x,i=this.y-e.y;return n*n+i*i}dot(e){return this.x*e.x+this.y*e.y}distanceTo(e){return Math.hypot(this.x-e.x,this.y-e.y)}distanceToCheap(e){let n=this.x-e.x,i=this.y-e.y;return n*n+i*i}directionTo(e){return new r(e.x-this.x,e.y-this.y).normalized()}add(e){return new r(this.x+e.x,this.y+e.y)}addRaw(e){return new r(this.x+e,this.y+e)}overwite(e){this.x=e.x,this.y=e.y}subtract(e){return new r(this.x-e.x,this.y-e.y)}scale(e){return new r(this.x*e,this.y*e)}toString(){return`Vector2(${this.x}, ${this.y})`}clone(){return new r(this.x,this.y)}};function Ue(){return typeof process<"u"&&process.release?.name==="node"?"node":typeof window<"u"||typeof self<"u"?"web":"unknown"}var Ie=Ue(),_=Ie==="node",P=Ie==="web",B=class r{static unlock(){P&&this.audioCtx.state!=="running"&&this.audioCtx.resume()}static audioCtx=P?new AudioContext:null;static masterGain=P?this.audioCtx.createGain():null;static musicGain=P?this.audioCtx.createGain():null;static sfxGain=P?this.audioCtx.createGain():null;static{P&&(this.masterGain.gain.value=1,this.musicGain.gain.value=1,this.sfxGain.gain.value=1,this.sfxGain.connect(this.masterGain),this.musicGain.connect(this.masterGain),this.masterGain.connect(this.audioCtx.destination))}static get SFX_VOLUME(){return this.sfxGain.gain.value}static get MUSIC_VOLUME(){return this.musicGain.gain.value}static get VOLUME(){return this.masterGain.gain.value}static set SFX_VOLUME(e){this.sfxGain.gain.value=e}static set MUSIC_VOLUME(e){this.musicGain.gain.value=e}static set VOLUME(e){this.masterGain.gain.value=e}static noteToHz(e){return this.tuningFreq*Math.pow(2,(e-9)/12)}static tuningFreq=440;static audioBufferCache=new Map;static loops=new Map;static sfsx=new Map;static loopIdCounter=0;static CACHE_NAME="lia-audio-cache-v1";static async preLoad(e){if(this.audioBufferCache.has(e))return this.audioBufferCache.get(e);let n=r.CACHE_NAME,i,a;if(typeof caches<"u"&&(a=await caches.open(n),i=await a.match(e)),!i){if(i=await fetch(e),!i.ok)throw new Error(`Failed to fetch ${e}`);a&&await a.put(e,i.clone())}let l=await i.arrayBuffer(),c=await this.audioCtx.decodeAudioData(l);return this.audioBufferCache.set(e,c),c}static async getOnlyDownloadedCache(e){let n=r.CACHE_NAME;return await(await caches.open(n)).match(e)}static getCached(e){return this.audioBufferCache.get(e)||null}static async playSound(e,n=.2,i=1,a=!0){try{this.sfsx.has(e)&&this.sfsx.get(e).source.stop(),this.audioBufferCache.has(e)||await this.preLoad(e);let l=this.getCached(e);if(!l)return;let c=new X(l);c.buffer=l;let p=1-.12,h=1+.12;c.playbackRate=i??p+Math.random()*(h-p);let d=this.audioCtx.createGain();d.gain.value=n,c.tempGain=d,c.connect(d),d.connect(this.sfxGain),c.onended=()=>{c.disconnect(),d.disconnect()},c.start(),a&&this.sfsx.set(e,{source:c,gain:d})}catch(l){console.error(l)}}static async playLoop(e,n=1,{loopStart:i=0,loopEnd:a=null,exclusive:l=!0,skipMS:c=0}={}){if(l)for(let x of this.loops.keys())this.stopLoop(x);this.audioBufferCache.has(e)||await this.preLoad(e);let p=this.getCached(e);if(!p)return;let h=new X(p);h.buffer=p,h.loop=!0,typeof i=="number"&&(h.loopStart=i),typeof a=="number"&&(h.loopEnd=a);let d=this.audioCtx.createGain();d.gain.value=n,h.tempGain=d,h.playbackRate=1,h.onended=()=>{h.disconnect(),d.disconnect()},h.connect(d),d.connect(this.musicGain),h.start(0,c/1e3);let m=++this.loopIdCounter;return this.loops.set(m,{source:h,gain:d}),m}static stopLoop(e){let n=this.loops.get(e);n&&(n.source.stop(),n.source.notIndependent||(n.source.disconnect(),n.gain.disconnect()),this.loops.delete(e))}static async createLiaSource(e,{volume:n=1,speed:i=1,loop:a=!1,loopStart:l=0,loopEnd:c=null,isMusic:p=!1,gain:h=null}={}){try{this.audioBufferCache.has(e)||await this.preLoad(e);let d=this.getCached(e);if(!d)return null;let m=new X(d);m.loop=a,m.loopStart=l,m.loopEnd=typeof c=="number"?c:d.duration,m.playbackRate=i;let x=this.audioCtx.createGain();return x.gain.value=n,m.connect(x),m.tempGain=x,x.connect(h||(p?this.musicGain:this.sfxGain)),m.onended=()=>{m.disconnect(),x.disconnect()},m}catch(d){return console.error("Failed to create LiaAudioSrc:",d),null}}};var X=class{numberOfInputs;numberOfOutputs;constructor(e,n=B.audioCtx){this.context=n,this.buffer=e,this.source=null,this.startTime=0,this.pauseTime=0,this.playbackRate=1,this.isPlaying=!1,this.loop=!1,this.output=P?n.createGain():null,this.output.gain.value=1,this.channelCount=2,this.channelCountMode="max",this.channelInterpretation="speakers",this.numberOfInputs=0,this.numberOfOutputs=1,this.onended=null}channelCount;channelCountMode;channelInterpretation;onended;source;buffer;context;_createSource(){this.source&&(this.source.onended=null);let e=this.context.createBufferSource();return e.buffer=this.buffer,e.playbackRate.value=this.playbackRate,e.loop=this.loop,e.loopStart=this.loopStart,e.loopEnd=this.loopEnd>0?this.loopEnd:this.buffer.duration,e.connect(this.output),this.source=e,e.onended=()=>{this.source===e&&(this.isPlaying&&!this.loop&&(this.isPlaying=!1,this.pauseTime=0),typeof this.onended=="function"&&this.onended())},e}play({fadeIn:e=0,offset:n=null}={}){let i=n!==null?n:this.pauseTime;if(this.source){this.source.onended=null;try{this.source.stop()}catch{}}this.source=this._createSource(),this.startTime=this.context.currentTime-i/this.playbackRate,this.source.start(0,i),e>0?(this.output.gain.setValueAtTime(0,this.context.currentTime),this.output.gain.linearRampToValueAtTime(1,this.context.currentTime+e)):this.output.gain.setValueAtTime(1,this.context.currentTime),this.isPlaying=!0}start(e=0,n=0,i){this.isPlaying||(this.source=this._createSource(),this.startTime=this.context.currentTime+e-n/this.playbackRate,i!==void 0?this.source.start(this.context.currentTime+e,n,i):this.source.start(this.context.currentTime+e,n),this.pauseTime=n,this.isPlaying=!0)}pause({fadeOut:e=0}={}){if(!this.isPlaying)return;let n=this.getElapsed()/1e3;if(this.loop&&this.loopEnd>this.loopStart){let i=this.loopEnd-this.loopStart;n=this.loopStart+(n-this.loopStart)%i}if(this.isPlaying=!1,e>0){let i=this.context.currentTime;this.output.gain.setValueAtTime(this.output.gain.value,i),this.output.gain.linearRampToValueAtTime(0,i+e),setTimeout(()=>{if(this.source){this.source.onended=null;try{this.source.stop()}catch{}}this.pauseTime=n,this.output.gain.setValueAtTime(1,this.context.currentTime)},e*1e3)}else{if(this.source){this.source.onended=null;try{this.source.stop()}catch{}}this.pauseTime=n}}getElapsed(){return this.isPlaying?(this.context.currentTime-this.startTime)*this.playbackRate*1e3:this.pauseTime*1e3}setSpeed(e){if(e<=0)throw new Error("Playback rate must be positive");let n=this.getElapsed()/1e3;this.playbackRate=e,this.isPlaying&&(this.pause(),this.pauseTime=n,this.play())}setLoop(e=!0){this.loop=e,this.source&&(this.source.loop=e)}loop;playbackRate;startTime;tempGain=null;connect(e,n=0,i=0){if("value"in e)this.output.connect(e,n);else return this.output.connect(e,n,i),e}disconnect(e,n,i){e===void 0?this.output.disconnect():this.output.disconnect(e,n,i)}output;stop(e=0){if(this.notIndependent)return this.pause();if(!this.source)return;let n=this.context.currentTime+e;this.source.stop(n),this.isPlaying=!1,this.notIndependent||(this.pauseTime=0)}pauseTime;isPlaying;notIndependent=!1;loopStart=0;loopEnd=0},Oe={osc:{enabled:!0,type:"sine",freq:440,detune:0},noise:{enabled:!1,level:.5},ampEnv:{attack:.005,decay:.1,sustain:0,release:.1,volume:.3},pitchEnv:{amount:0,decay:.2},filter:{enabled:!1,type:"lowpass",freq:1200,Q:1,envAmount:0,decay:.2},lfo:{enabled:!1,target:"freq",rate:8,depth:20},duration:.4},G=class r{constructor(e={}){if(_)return this;this.ctx=B.audioCtx,this.cfg=structuredClone(Oe),Object.assign(this.cfg,e)}ctx;cfg;play(e=B.sfxGain){if(_)throw new Error("Cannot use Web APIs on node.");let n=this.ctx,i=n.currentTime,a=this.cfg,l=n.createGain();l.gain.setValueAtTime(1e-4,i);let c=a.ampEnv;l.gain.exponentialRampToValueAtTime(c.volume,i+c.attack),l.gain.exponentialRampToValueAtTime(Math.max(1e-4,c.sustain*c.volume),i+c.attack+c.decay),l.gain.exponentialRampToValueAtTime(1e-4,i+a.duration+c.release);let p=l,h;a.filter.enabled&&(h=n.createBiquadFilter(),h.type=a.filter.type,h.frequency.value=a.filter.freq,h.Q.value=a.filter.Q,h.connect(l),p=h);let d;if(a.osc.enabled){if(d=n.createOscillator(),d.type=a.osc.type,d.frequency.value=a.osc.freq,d.detune.value=a.osc.detune,a.pitchEnv.amount!==0){let f=Math.pow(2,a.pitchEnv.amount/12);d.frequency.exponentialRampToValueAtTime(a.osc.freq*f,i+a.pitchEnv.decay)}d.connect(p),d.start(i),d.stop(i+a.duration+c.release)}let m;if(a.noise.enabled){let f=n.sampleRate*a.duration,t=n.createBuffer(1,f,n.sampleRate),s=t.getChannelData(0);for(let o=0;o<f;o++)s[o]=(Math.random()*2-1)*a.noise.level;m=n.createBufferSource(),m.buffer=t,m.connect(p),m.start(i),m.stop(i+a.duration+c.release)}let x,v;a.lfo.enabled&&d&&(x=n.createOscillator(),x.frequency.value=a.lfo.rate,v=n.createGain(),v.gain.value=a.lfo.depth,x.connect(v),a.lfo.target==="freq"?v.connect(d.frequency):a.lfo.target==="gain"?v.connect(l.gain):a.lfo.target==="filter"&&h&&v.connect(h.frequency),x.start(i),x.stop(i+a.duration)),l.connect(e);let S=[d,m,x,v,h,l],R=i+a.duration+c.release;setTimeout(()=>{S.forEach(f=>f?.disconnect())},(R-n.currentTime)*1e3)}getConfig(){return structuredClone(this.cfg)}setConfig(e){return Object.assign(this.cfg,e),this}getKey(e){return this.cfg[e]}setKey(e,n){return Object.assign(this.cfg[e],n),this}setFreq(e){return this.cfg.osc.freq=e,this}setWave(e){return this.cfg.osc.type=e,this}setVolume(e){return this.cfg.ampEnv.volume=e,this}setAmpEnv(e,n,i,a){return Object.assign(this.cfg.ampEnv,{attack:e,decay:n,sustain:i,release:a}),this}setPitchEnv(e,n){return Object.assign(this.cfg.pitchEnv,{amount:e,decay:n}),this}setNoiseEnabled(e){return this.cfg.noise.enabled=e,this}setNoiseLevel(e){return this.cfg.noise.level=e,this}setFilterEnabled(e){return this.cfg.filter.enabled=e,this}setFilter(e,n,i){return Object.assign(this.cfg.filter,{type:e,freq:n,Q:i,enabled:!0}),this}setLFOEnabled(e){return this.cfg.lfo.enabled=e,this}setLFO(e,n,i){return Object.assign(this.cfg.lfo,{target:e,rate:n,depth:i,enabled:!0}),this}setDuration(e){return this.cfg.duration=e,this}clone(){return new r(structuredClone(this.cfg))}},Et=new G({osc:{enabled:!0,type:"square",freq:900,detune:0},ampEnv:{attack:.002,decay:.04,sustain:0,release:.02,volume:.15},duration:.05}),Kt=new G({osc:{enabled:!0,type:"sine",freq:600,detune:0},ampEnv:{attack:.01,decay:.08,sustain:0,release:.04,volume:.12},duration:.1}),Rt=new G({osc:{enabled:!0,type:"triangle",freq:500,detune:0},pitchEnv:{amount:12,decay:.15},ampEnv:{attack:.01,decay:.12,sustain:0,release:.05,volume:.25},duration:.18}),kt=new G({osc:{enabled:!0,type:"sawtooth",freq:1200,detune:0},pitchEnv:{amount:-24,decay:.3},ampEnv:{attack:.005,decay:.25,sustain:0,release:.05,volume:.3},duration:.35}),St=new G({osc:{enabled:!0,type:"square",freq:180,detune:0},noise:{enabled:!0,level:.4},ampEnv:{attack:.002,decay:.15,sustain:0,release:.05,volume:.35},duration:.2});function j(r=12){let e=Date.now().toString(36),n=crypto.getRandomValues(new Uint8Array(4)),i=Array.from(n).map(a=>a.toString(36).padStart(2,"0")).join("");return(e+i).slice(0,r)}function Ne(r){let e=!0;function n(){e&&(r(),requestAnimationFrame(n))}return requestAnimationFrame(n),{clear:()=>e=!1}}function Xe(){return _?!1:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}var Tt=Xe(),W=class r{static defaultInterval=1e3/60;handler;interval;accumulated;constructor(e=r.defaultInterval,n){this.handler=n??null,this.interval=e,this.accumulated=0}update(e){if(!this.handler)throw new Error("Missing handler.");if(this.interval<=.001){this.handler(this,0);return}this.accumulated+=e*1e3;let n=0;for(;this.accumulated>=this.interval;)this.accumulated-=this.interval,this.handler(this,n),n++}};function qe({width:r,height:e,updateHz:n="frames"}){return new H.KaylaGame(r,e,n==="frames"?1/0:n)}function Be(r){let e=new le(r);return new H.KaylaScene(e)}function We(r,e){return new H.KaylaRenderer(r,e)}function Q(r,e){if(typeof r!="function")throw new Error("Invalid Element Type.");let n=e??{};n.key??=r.name+"_"+j();let i=Array.isArray(e.children)?[...e.children]:e.children?[e.children]:[];for(let l=0;l<i.length;l++){let c=i[l];if(typeof c!="object"||!(c instanceof Y))if(typeof c=="string")i[l]=Q(Le,{color:"white",label:c,parentRect:null,x:0,y:0,size:20,align:"center"});else throw new Error("Invalid JSX Child Parameter.")}n.children=i;let a=new Y;return a.type=r,a.props=n,a}var Y=class{type;props},D;(i=>{function r(a,l){return!(a.right<l.left||a.left>l.right||a.bottom<l.top||a.top>l.bottom)}i.rawCollision=r;function e(a,l,c){let p=l*Math.PI/180,h=Math.cos(p),d=Math.sin(p),m=1/0;return h>0&&(m=Math.min(m,(c.right-a.x)/h)),h<0&&(m=Math.min(m,(c.left-a.x)/h)),d>0&&(m=Math.min(m,(c.bottom-a.y)/d)),d<0&&(m=Math.min(m,(c.top-a.y)/d)),A.from(l).scale(m)}i.getCurrToBound=e;function n(a){let{left:l,right:c,top:p,bottom:h,width:d,height:m,x=0,y:v=0}=a;if(d===null||m===null)throw new Error("width and height are required");let S,R;if(l!=null&&c!=null){if(Math.abs(c-l-d)>1e-6)throw new Error("left, right, and width mismatch");S=l}else x!=null?S=x-d/2:l!=null?S=l:c!=null?S=c-d:S=0;if(p!=null&&h!=null){if(Math.abs(h-p-m)>1e-6)throw new Error("top, bottom, and height mismatch");R=p}else v!=null?R=v-m/2:p!=null?R=p:h!=null?R=h-m:R=0;return{left:S,right:S+d,top:R,bottom:R+m,width:d,height:m,x:S+d/2,y:R+m/2}}i.createRawRect=n})(D||={});var H;(R=>{class r extends ue{#e;#t;constructor(t,s,o){super(t,s,o),this.#e=new Set,this.#t=!1}delay(t){return this.ticker.createTimeout(t)}get started(){return this.#t}start(){if(!this.#t){for(let t of this.#e)t.start();this.#t=!0,super.start()}}stop(){if(this.#t){for(let t of this.#e)t.stop();this.#t=!1,super.stop()}}addRenderer(t){this.#e.has(t)||(this.#e.add(t),this.#t&&t.start(),t.game=this)}get mainRenderer(){return[...this.#e].at(0)}getRenderers(){return[...this.#e]}deleteRenderer(t){this.#e.has(t)&&(this.#e.delete(t),this.#t&&t.stop(),delete t.game)}}R.KaylaGame=r;class e extends oe{game;pointerX;pointerY;pointerEvents;onPointerDown;onPointerUp;onPointerCancel;onPointerMove;isKaylaDisabled;constructor(t,s={}){super(t),this.isKaylaDisabled=s.disableKaylaBehavior,this.useDraw=this.useDraw.bind(this),this.on("draw",o=>{if(!s.noAutoDraw&&this.game)for(let u of this.game.scenes.values())u.handleDraw(o)}),this.pointerX=0,this.pointerY=0,this.pointerEvents=new M,this.pointerPosUpdater=this.pointerPosUpdater.bind(this),this.onPointerDown=o=>this.onPointerAll(o,"down"),this.onPointerUp=o=>this.onPointerAll(o,"up"),this.onPointerCancel=o=>this.onPointerAll(o,"cancel"),this.onPointerMove=o=>this.onPointerAll(o,"move")}pointerPosUpdater(t){this.pointerX=t.clientX,this.pointerY=t.clientY}onPointerAll(t,s){this.pointerPosUpdater(t);let o=e.getClickType(t);if(o!=="invalid"||s==="move"||s==="cancel"){t.preventDefault();let u=this.getMousePos();this.pointerEvents.emit("action",u,o,s)}}static getClickType(t){switch(t.button){case 0:return"left";case 1:return"middle";case 2:return"right";default:return"invalid"}}listenPointerUpdates(){this.canvas.addEventListener("pointermove",this.pointerPosUpdater),this.canvas.addEventListener("pointerdown",this.onPointerDown),this.canvas.addEventListener("pointerup",this.onPointerUp),this.canvas.addEventListener("pointercancel",this.onPointerCancel),this.canvas.addEventListener("pointermove",this.onPointerMove)}unlistenPointerUpdates(){this.canvas.removeEventListener("pointermove",this.pointerPosUpdater),this.canvas.removeEventListener("pointerdown",this.onPointerDown),this.canvas.removeEventListener("pointerup",this.onPointerUp),this.canvas.removeEventListener("pointermove",this.onPointerMove)}pointerPosToWorldPos(t,s){let o=this.canvas.getBoundingClientRect(),u=(t-o.left)/o.width,b=(s-o.top)/o.height,g=this.cameraWidth/o.width,w=this.cameraHeight/o.height,K=u*this.viewportWidth*this.cameraWidth/o.width/g,E=b*this.viewportHeight*this.cameraHeight/o.height/w;return new A(K,E)}camToViewportPos(t,s){let o=t/this.cameraWidth*this.viewportWidth,u=s/this.cameraHeight*this.viewportHeight;return new A(o,u)}pointerPosToWorldPosOLD(t,s){let o=this.canvas.getBoundingClientRect(),u=(t-o.left)/o.width,b=(s-o.top)/o.height,g=u*this.viewportWidth*this.cameraWidth/o.width,w=b*this.viewportHeight*this.cameraHeight/o.height;return new A(g,w)}getMousePos(){return this.pointerPosToWorldPos(this.pointerX,this.pointerY)}useDraw(t){let s=o=>{t(o,new l)};return this.on("draw",s),()=>{this.off("draw",s)}}attachTo(t){t.addRenderer(this),this.game=t}detach(){this.game&&this.game.deleteRenderer(this)}}R.KaylaRenderer=e;let n=Symbol("unlock_substepper");class i{#e;constructor(t){this.#e=t}[n](){return this.#e}get interval(){return this.#e.interval}}class a{current;saves;constructor(){this.saves=[]}useTick(t,s=null){if(!this.current)throw new Error("Hook 'useTick' must be executed in the top level scope of a component.");let o=t;this.current.onTick[this.current.useStepCallIndex]=o,this.current.onTickSubsteps[this.current.useStepCallIndex]=s,this.current.useStepCallIndex++}usePaint(t){if(!this.current)throw new Error("Hook 'usePaint' must be executed in the top level scope of a component.");this.current.onPaint[this.current.useDrawCallIndex]=t,this.current.useDrawCallIndex++}useEntity(){if(!this.current)throw new Error("Hook 'useEntity' must be executed in the top level scope of a component.");return Ce(Ee)}useSelf(t){if(!this.current)throw new Error("Hook 'useSelf' must be executed in the top level scope of a component.");let s=Ce(null);return(s.current===null||s.current===void 0)&&(s.current=t()),s.current}useInitialization(t){if(!this.current)throw new Error("Hook 'useInitialization' must be executed in the top level scope of a component.");let s=this.current;s.onInits[this.current.useInitCallIndex]=t,s.useInitCallIndex++}useRect(t="self"){if(!this.current)throw new Error("Hook 'useRect' must be executed in the top level scope of a component.");if(t==="disposableSelf")return new R.KaylaInternalRect(this.current);let s=null;if(t==="self"&&(s=this.current),t==="parent"&&(s=this.current.detectedParent),!s)throw new Error("Missing valid target fiber.");return z(()=>new R.KaylaInternalRect(s))}useSubstep(t){t==="default"&&(t=W.defaultInterval);let s=z(()=>{let u=new W(0);return new i(u)}),o=s[n]();return o.interval=t,s}useFiber(){if(!this.current)throw new Error("Hook 'useFiber' must be executed in the top level scope of a component.");return z(()=>this.current)}useFiberControl(){if(!this.current)throw new Error("Hook 'useFiberControl' must be executed in the top level scope of a component.");let t=this.current;return z(()=>({refresh:()=>t.refresh(),toString(){return t.toString()},get childrenCount(){return t.lastChildren.length},setMaxChildren:s=>{t.setMaxChildren(s)},getMaxChildren:()=>t.getMaxChildren(),get maxSafeChildren(){return t.maxSafeChildren},get key(){return t.key},get getChildrenEntities(){return t.getChildrenEntities.bind(t)},get getEntityChain(){return t.getEntityChain.bind(t)},get getFiberChain(){return t.getFiberChain.bind(t)}}))}useCurrentTicker(){if(!this.current)throw new Error("Hook 'useCurrentTicker' must be executed in the top level scope of a component.");return this.current.getAttachedGame().ticker}useCurrentRenderer(){if(!this.current)throw new Error("Hook 'useCurrentRenderer' must be executed in the top level scope of a component.");return this.current.getAttachedGame().mainRenderer}useCurrentGame(){if(!this.current)throw new Error("Hook 'useCurrentGame' must be executed in the top level scope of a component.");return this.current.getAttachedGame()}useCurrentScene(){if(!this.current)throw new Error("Hook 'useCurrentScene' must be executed in the top level scope of a component.");return this.current.scene}useState(t,{alwaysRecall:s=!1}={}){if(!this.current)throw new Error("Hook 'useState' must be executed in the top level scope of a component.");let u=this.current.state[this.current.useStateCallIndex]??new c(this.current,t,{alwaysRecall:s});return this.current.state[this.current.useStateCallIndex]=u,this.current.useStateCallIndex++,u}useShouldRefresh(t){let s=this.current;if(!s)throw new Error("useShouldRefresh must be called inside a component");s.watchedDeps&&console.warn("useShouldRefresh called multiple times \u2014 using the last call"),s.watchedDeps=t}useRef(t){if(!this.current)throw new Error("Hook 'useRef' must be executed in the top level scope of a component.");let o=this.current.refs[this.current.useRefCallIndex]??h(t??null);return this.current.refs[this.current.useRefCallIndex]=o,this.current.useRefCallIndex++,o}useEffect(t){if(!this.current)throw new Error("Hook 'useEffect' must be executed in the top level scope of a component.");this.current.onEffect[this.current.useEffectCallIndex]=t,this.current.useEffectCallIndex++}useViewportEffect(t){if(!this.current)throw new Error("Hook 'useViewport' must be executed in the top level scope of a component.");this.current.onViewportEffect[this.current.useViewCallIndex]=t,this.current.useViewCallIndex++}useExports(t,s){if(!this.current)throw new Error("Hook 'useExports' must be executed in the top level scope of a component.");this.current.onExport=s}useGlobalPointer(t,s){if(!this.current)throw new Error("Hook 'useGlobalPointer/useGlobalClick' must be executed in the top level scope of a component.");s??={},this.current.onGlobalPointer[this.current.useGlobalClickCallIndex]={handler:t,config:s},this.current.useGlobalClickCallIndex++}usePointer(t,s){if(!this.current)throw new Error("Hook 'usePointer/useClick' must be executed in the top level scope of a component.");s??={};let o=this.current;Ae((u,b,g)=>{let w=o.entity;if(!w)return;let K=w.getRawRect(),E=D.createRawRect({x:u.x,y:u.y,width:3,height:3});D.rawCollision(K,E)&&t(u,b,g)},s)}useContext(t){if(!this.current)throw new Error("Hook 'useContext' must be executed in the top level scope of a component.");return this.current.findContextValueFromInst(t)}save(){this.saves.push({current:this.current})}restore(){let t=this.saves.pop();if(!t)throw new Error("Cannot restore without saving.");this.current=t.current}logLevel="warn";logger={debug:(...t)=>{this.logLevel==="debug"&&console.debug(...t)},info:(...t)=>{["info","warn","debug"].includes(this.logLevel)&&console.info(...t)},warn:(...t)=>{["warn","debug"].includes(this.logLevel)&&console.warn(...t)},error:(...t)=>console.error(...t),withFiber:(t,s,o,...u)=>{let b=t?.fc?.name||"anonymous",g=t?.key?` key=${t.key}`:"";this.logger[s](`${o} <${b}${g}>`,...u)}}}R.GlobalKayla=a;class l{preventDefault(){this.#e=!0}#e=!1;isPrevented(){return this.#e}}R.KaylaEvent=l;class c{#e;#t;#n;alwaysRecall;constructor(t,s,{alwaysRecall:o=!1}={}){this.#t=t,this.#e=s??void 0,this.#n=Date.now(),this.alwaysRecall=o}get(){return this.#e}get 0(){return this.get()}1(t){this.set(t,{recall:!0})}legacy(){return[this[0],this[1].bind(this)]}add(t,{recall:s}={}){this.set(this.get()+t,{recall:s})}multiply(t,{recall:s}={}){this.set(this.get()*t,{recall:s})}set(t,{recall:s=!1}={}){let o=this.#e;if(t===o)return;this.#e=t;let b=Date.now()-this.#n;s&&b<67&&this.#t.global.logger.warn(`Hot structural state change <${this.#t.fc?.name||"anonymous"}> delta=${b}ms`),(s||this.alwaysRecall)&&this.#t.refresh(),this.#n=Date.now()}get value(){return this.#e}get lastChanged(){return this.#n}}R.KaylaInternalState=c;class p{#e;constructor(t){this.#e=t??void 0}#t;setSetter(t){this.#t=t}get current(){return this.#e}set current(t){this.#e=t,this.#t&&this.#t(this.#e)}}R.KaylaInternalRef=p;function h(f){return new p(f)}R.createReassignableRef=h;class d{state;refs;global;callProps;scene;exports;detectedParent;contextInfo;lastLayer;get childrenCount(){return this.lastChildren.length}maxSafeChildren;dynamicChildren;constructor(t,s,o){if(!o)throw new Error("Empty element");this.maxSafeChildren=40,this.scene=s,this.state=[],this.refs=[],this.onInits=[],this.onUnInits=[],this.fc=o.type,this.callProps=o.props??{},this.global=t,this.lastStateDeps=[],this.entity=null,this.lastChildren=[],this.onEffect=[],this.onUnEffect=[],this.onPaint=[],this.onTick=[],this.onTickSubsteps=[],this.onGlobalPointer=[],this.pointerHook=this.pointerHook.bind(this),this.resizeHook=this.resizeHook.bind(this),this.contextInfo=null,this.detectedParent=null,this.dynamicChildren=[],this.key??=this.fc.name+"_"+j(),this.onViewportEffect=[],this.lastLayer=null}getCorrectMousePos(t){return t??=this.getAttachedRenderer().getMousePos(),this.lastLayer?.transform?this.lastLayer.transform.inverseV(t):t}getChildrenEntities(){return this.lastChildren.map(t=>t.entity)}pointerHook(t,s,o){t=this.getCorrectMousePos(t);try{for(let{handler:u,config:b}of this.onGlobalPointer)b.type??="any",b.action??="down",!(b.action!=="any"&&b.action!==o||b.type!=="any"&&b.type!==s)&&u(t,s,o)}catch(u){this.global.logger.error(u)}}resizeHook({width:t,height:s}){try{for(let o of this.onViewportEffect)o(this.getAttachedRenderer(),t,s)}catch(o){this.global.logger.error(o)}}bindEvents(){for(let t of[this.getAttachedRenderer()])t&&(t.pointerEvents.on("action",this.pointerHook),t.on("viewport_update",this.resizeHook))}unbindEvents(){for(let t of[this.getAttachedRenderer()])t&&(t.pointerEvents.off("action",this.pointerHook),t.off("viewport_update",this.resizeHook))}get key(){return this.callProps.key}set key(t){this.callProps.key=t}get children(){let t=this.callProps.children;return Array.isArray(t)?t:[t]}set children(t){this.callProps.children=t}entity;onExport=()=>({});onEffect;onViewportEffect;onGlobalPointer;onInits;onUnInits;onUnEffect;onEffectDeps;onPaint;onTick;onTickSubsteps;fc;useStateCallIndex=0;useEffectCallIndex=0;useGlobalClickCallIndex=0;useDrawCallIndex=0;useStepCallIndex=0;useRefCallIndex=0;useInitCallIndex=0;useViewCallIndex=0;lastStateDeps;watchedDeps;lastDepStamps=[];getAttachedRenderer(){return this.getAttachedGame().mainRenderer}getAttachedGame(){return this.scene.getGame()}setMaxChildren(t){if(this.maxSafeChildren=Math.max(0,t),this.global.logger.debug(`Max children limit updated to ${t} for <${this.fc?.name||"anonymous"} key=${this.key}>`),this.lastChildren.length>this.maxSafeChildren){let s=this.lastChildren.length-this.maxSafeChildren;this.global.logger.warn(`Child limit exceeded (${this.lastChildren.length} > ${this.maxSafeChildren}) \u2014 removing ${s} oldest children <${this.fc?.name||"anonymous"} key=${this.key}>`);let o=this.lastChildren.slice(0,this.maxSafeChildren),u=this.lastChildren.slice(this.maxSafeChildren);this.lastChildren=o;for(let b of u)b.unuse()}}getMaxChildren(){return this.maxSafeChildren??1/0}getFiberChain(){let t=[],s=this.detectedParent;for(;s;)t.push(s),s=s?.detectedParent;return t}getAllChildrenNestedFlattened(){let t=[],s=(o=[])=>{for(let u of o)t.push(u),u.lastChildren?.length&&s(u.lastChildren)};return s(this.lastChildren),t}getContextChain(){return this.getFiberChain().map(t=>t.contextInfo).filter(Boolean)}findContextValueFromInst(t){return this.getContextChain().find(s=>s.instance===t)?.value}getEntityChain(){return this.getFiberChain().map(t=>t.entity)}shouldFullRefresh(){if(this.isFirstUse||!this.watchedDeps||this.watchedDeps.length===0)return!0;for(let t=0;t<this.watchedDeps.length;t++){let s=this.watchedDeps[t],o=this.lastDepStamps[t]??0;if(s.lastChanged>o)return!0}return!1}captureDepStamps(){this.watchedDeps&&(this.lastDepStamps=this.watchedDeps.map(t=>t.lastChanged))}refresh(){if(!this.shouldFullRefresh())return;let t=this.fc?.name||"anonymous";if(!this.shouldFullRefresh()){this.global.logger.debug(`Refresh skipped <${t} key=${this.key}>`);return}this.global.logger.debug(`Refresh executed <${t} key=${this.key}> reason=${this.isFirstUse?"first":"deps-changed"}`),this.lastChildren.length>this.maxSafeChildren&&this.global.logger.warn(`High child count <${t} key=${this.key}> children=${this.lastChildren.length}`);let s;this.global.save(),this.global.current=this,this.useStateCallIndex=0,this.useRefCallIndex=0,this.useInitCallIndex=0,this.useViewCallIndex=0,this.useStateCallIndex=0,this.useDrawCallIndex=0,this.useStepCallIndex=0,this.useEffectCallIndex=0,this.useGlobalClickCallIndex=0;let o=[];try{let u=this.fc(this.callProps)??[];if(u&&!Array.isArray(u)&&(u=[u]),!Array.isArray(u))throw new Error("Non array or non undefined children received.");for(let b of u);o=u}catch(u){s=u}if(this.global.restore(),this.updateChildren(o,!0),s)throw s}updateChildren(t,s){try{let o=[...t,...this.dynamicChildren],u=[],b=[];for(let g of o){let w=g.props?.key,K;w!=null&&(K=this.lastChildren.find(E=>E.key===w)),K||(K=new d(this.global,this.scene,g)),K.callProps=g.props,K.key=w??`${g.type?.name??""}_${j()}`,K.detectedParent=this,b.push(K),u.push(K)}for(let g of this.lastChildren)u.includes(g)||g.unuse();this.lastChildren=b,this.captureDepStamps(),this.use();for(let g of this.lastChildren)try{g.refresh()}catch(w){console.error(w)}}catch(o){console.error(o)}}toString(){return this.getStringRepresentation(0," ")}lastChildren;isFirstUse=!0;use(){try{let t=!0;if(this.lastStateDeps??=[],Array.isArray(this.onEffectDeps)&&(t=!0),t||this.isFirstUse){this.global.logger.debug(`Using <${this.fc?.name||"anonymous"} key=${this.key}> count=${this.onEffect.length}`);let s=this.isFirstUse;this.isFirstUse=!1,Array.isArray(this.onEffectDeps)&&(this.lastStateDeps=this.onEffectDeps.map(u=>({stamp:u.lastChanged,stateRef:u}))),this.entity&&this.scene.getScene().removeEntity(this.entity),this.entity&&this.entity.name!==this.key&&(this.entity=null),this.entity=this.entity??new m(this,this.key);for(let u of this.refs)u.current===Ee&&(u.current=this.entity);if(this.callProps.ref instanceof p&&(this.callProps.ref.current=this.entity),this.exports=this.onExport(),this.callProps.exportsRef instanceof p&&(this.callProps.exportsRef.current=this.exports),this.entity&&this.entity!==this.entity&&this.global.logger.warn(`Entity name mismatch during refresh <${this.fc?.name} key=${this.key}>`),this.scene.getScene().addEntity(this.entity),s){this.onUnInits=[];for(let u of this.onInits){this.bindEvents();try{let b=u();typeof b=="function"&&this.onUnInits.push(b)}catch(b){throw this.global.logger.error("Initialization failed",this.fc?.name||"anonymous",b),b}}}try{for(let u of this.onUnEffect??[])u()}catch(u){console.error(u)}let o=this.onEffect.map(u=>u()).filter(u=>u!==void 0);this.onUnEffect=o}}catch(t){throw this.global.logger.error(`use() failed <${this.fc?.name||"anonymous"} key=${this.key}>`,t),t}}unuse(){this.global.logger.debug(`unuse called <${this.fc?.name||"anonymous"} key=${this.key}> children=${this.lastChildren.length}`),this.detectedParent=null,this.watchedDeps=void 0,this.lastDepStamps=[],this.unbindEvents();try{for(let t of this.onUnInits)t();for(let t of this.onUnEffect)t()}catch(t){this.global.logger.error(`Cleanup failed in unuse <${this.fc?.name||"anonymous"} key=${this.key}>`,t)}this.scene.getScene().removeEntity(this.entity);for(let t of this.lastChildren)t.unuse();this.lastChildren.length=0}getStringRepresentation(t=0,s=" "){let o=s.repeat(t),u=this,b="",g=Object.entries(this.callProps);for(let E=0;E<g.length;E++){let[C,$]=g[E];if(["children"].includes(C))continue;b+=` ${C}=${typeof $=="string"?`${J($)}`:`{${J($,0)}}`}`}let w=Array.from(u.lastChildren).map(E=>E.getStringRepresentation(t+1,s)).join(""),K=u.fc.displayName??u.fc.name.replaceAll(" ","-");return w&&w.length>0?`${o}<${K}${b}>
|
|
2
|
+
${w}${o}</${K}>
|
|
3
|
+
`:`${o}<${K}${b}/>
|
|
4
|
+
`}}R.KaylaFiber=d;class m extends he{#e;flags;getRawRect(){return D.createRawRect({x:this.x,y:this.y,width:this.width,height:this.height})}getFiber(){return this.#e}constructor(t,s){super(s,0,0,0,0),this.#e=t,this.flags=new Map,this.color="transparent"}setFlag(t,s){return this.flags.set(t,s)}getFlag(t){return this.flags.get(t)}removeFlag(t){return this.flags.delete(t)}update(t){fe(()=>{let s=new l;if(this.#e&&this.#e.onTick){let o=0;for(let u of this.#e.onTick){let b=this.#e.onTickSubsteps.at(o)??null;if(b){let g=b[n]();g.handler=()=>{u(g.interval/1e3,s)},g.update(t)}else u(t,s);o++}}s.isPrevented()})}draw(t){let s=new l;if(this.#e&&this.#e.onPaint)for(let o of this.#e.onPaint)o(t,s);s.isPrevented()||super.draw(t)}getRect(){return new x(this.getFiber())}}R.KaylaRectEntity=m;class x{#e;constructor(t){this.#e=t}get color(){return this.#t(),this.entity.color}set color(t){this.#t(),this.entity.color=t}getRaw(){return D.createRawRect({x:this.x,y:this.y,width:this.width,height:this.height})}get entity(){return this.#e.entity??null}#t(){if(!this.#e)throw new Error("No fibers found.");if(!this.entity)throw new Error("The entity does NOT exist yet.")}isCollidingWith(t){return this.#t(),this.entity.isCollidingWith(t.entity)}get setFlag(){return this.#t(),this.entity.setFlag.bind(this.entity)}get getFlag(){return this.#t(),this.entity.getFlag.bind(this.entity)}get removeFlag(){return this.#t(),this.entity.removeFlag.bind(this.entity)}isHovered(){let t=this.getRaw(),s=this.#e.getCorrectMousePos(),o=D.createRawRect({x:s.x,y:s.y,width:3,height:3});return D.rawCollision(t,o)}get pos(){return this.#t(),this.entity.pos}get x(){return this.#t(),this.pos.x}set x(t){this.#t(),this.pos.x=t}get y(){return this.#t(),this.pos.y}set y(t){this.#t(),this.pos.y=t}get width(){return this.#t(),this.entity.width}set width(t){this.#t(),this.entity.width=t}get height(){return this.#t(),this.entity.height}set height(t){this.#t(),this.entity.height=t}get z(){return this.#t(),this.entity.z}set z(t){this.#t(),this.entity.z=t}get left(){return this.#t(),this.entity.left}set left(t){this.#t(),this.entity.left=t}get right(){return this.#t(),this.entity.right}set right(t){this.#t(),this.entity.right=t}get top(){return this.#t(),this.entity.top}set top(t){this.#t(),this.entity.top=t}get bottom(){return this.#t(),this.entity.bottom}set bottom(t){this.#t(),this.entity.bottom=t}get toLocal(){return this.entity.toLocal.bind(this.entity)}get toWorld(){return this.entity.toWorld.bind(this.entity)}}R.KaylaInternalRect=x;class v{#e;#t;constructor(t){this.#r=t,this.#n=null,this.#e=new Map,t.on("update",this.tickHandler.bind(this)),this.drawHandler=this.drawHandler.bind(this),t.handleDraw=this.drawHandler,this.#t=null}getLayers(){return this.#e}#n;#r;getFibers(){return this.getEntities().map(t=>t.getFiber())}getEntities(){return Array.from(this.getScene().entities.values())}getScene(){return this.#r}getGame(){return this.#n}getOrCreateLayer(t,s=0){return this.#e.has(t)||this.#e.set(t,{name:t,z:s,visible:!0,rootFiber:null}),this.#e.get(t)}getSortedLayers(){return Array.from(this.#e.values()).filter(t=>t.visible).sort((t,s)=>t.z-s.z)}setLayerVisible(t,s){let o=this.#e.get(t);o&&(o.visible=s)}handleDraw(t){if(_)return;let s=this.getScene();if(s.paused)return;s.emit("draw",t);let o=this.getSortedLayers(),u=[];for(let g of o){if(!g.visible)continue;let w=g.rootFiber;if(!w)continue;let K=w.getAllChildrenNestedFlattened().flat().map(C=>C.entity).filter(Boolean);if(u.push(...K),t.save(),g.transform){let C=g.transform;t.setTransform(C.a,C.b,C.c,C.d,C.e,C.f)}g.blendMode&&(t.globalCompositeOperation=g.blendMode??"source-over");let E=Array.from(K).sort((C,$)=>C.z-$.z);for(let C of E)C.getFiber().lastLayer=g,C.handleDraw(t);t.restore()}let b=[...s.entities.values()].filter(g=>!u.includes(g));for(let g of b.sort((w,K)=>w.z-K.z)){let w=g instanceof m?g.getFiber():null;w&&(w.lastLayer=null),g.handleDraw(t)}}drawHandler(t){return this.handleDraw(t)}attachTo(t){t.addScene(this.#r),this.#n=t}async spawn(t){this.#t&&(this.#t.unuse(),this.#t=null);let s=this.createFiber(t);this.#t=s,await this.#n.delay(0),s.refresh()}getRoot(){return this.#t??null}createFiber(t){return new d(R.singleGlobalInstance,this,t)}detach(){this.#n&&this.#n.removeScene(this.#r)}tickHandler(){}}R.KaylaScene=v,R.singleGlobalInstance=new R.GlobalKayla})(H||={});var ce=class{#e;constructor(e){this.Provider=this.#t.bind(this),this.#e=e,this.Provider.displayName="[[ KaylaContext ]].Provider"}get defaultValue(){return this.#e}#t({value:e=this.defaultValue,children:n}){let i=ke();return Z(()=>{i.contextInfo={instance:this,value:e}}),pe(this.Provider,()=>({value:e})),n}Provider;Consumer};function je(r){return new ce(r)}var y=H.singleGlobalInstance,Ye=y.useState.bind(y),Ce=y.useRef.bind(y),Je=y.useShouldRefresh.bind(y),Z=y.useEffect.bind(y),Qe=y.useViewportEffect.bind(y),Ae=y.useGlobalPointer.bind(y),Ze=y.useGlobalPointer.bind(y),et=y.usePointer.bind(y),tt=y.usePointer.bind(y),de=y.useInitialization.bind(y),O=y.useRect.bind(y),nt=y.useTick.bind(y),ee=y.usePaint.bind(y),pe=y.useExports.bind(y),z=y.useSelf.bind(y),Re=y.useFiberControl.bind(y),ke=y.useFiber.bind(y),rt=y.useEntity.bind(y),it=y.useCurrentGame.bind(y),st=y.useCurrentRenderer.bind(y),Me=y.useCurrentScene.bind(y),at=y.useCurrentTicker.bind(y),ot=y.useContext.bind(y),lt=y.useSubstep.bind(y),Ee=Symbol("self_ref");var fe=r=>{Promise.resolve(1).then(()=>{try{r()}catch(e){console.error(e)}})},Se=({children:r})=>Array.isArray(r)?[...r]:r;function ut(r){return H.createReassignableRef(r)}function ht(r){if(typeof r!="object"||typeof r=="function"||r===null)return r;let e={current:r};return new Proxy({},{get(i,a,l){return a==="reassignSelf"?c=>{e.current=c}:Reflect.get(e.current,a,l)},set(i,a,l,c){return Reflect.set(e.current,a,l,c)},has(i,a){return Reflect.has(e.current,a)},ownKeys(i){return Reflect.ownKeys(e.current)},getOwnPropertyDescriptor(i,a){return Reflect.getOwnPropertyDescriptor(e.current,a)},deleteProperty(i,a){return Reflect.deleteProperty(e.current,a)}})}function ct(r){y.logLevel=r}function dt(r){let e=r.name||"anonymous-custom-hook";function n(...i){let a=y.current;if(!a)throw new Error(`Custom hook '${e}' must be called inside a Kayla component`);let l=i??[];return a.global.logLevel==="debug"&&a.global.logger.debug(`Custom hook '${e}' running (non-memoized) <${a.fc?.name||"anonymous"} key=${a.key||"no-key"}>`),r.onUse(a,y,...l)}return n.name=r.name,n}var pt=({name:r,z:e=0,blend:n,visible:i=!0,children:a,transform:l})=>{let c=Me(),p=ke();return de(()=>{let h=c.getOrCreateLayer(r,e);return h.blendMode=n,h.visible=i,h.rootFiber=p,h.transform=l??null,()=>{c.getLayers().delete(r)}}),a},Ke=class extends DOMMatrix{#e;constructor(){super(),this.#e=new DOMPoint}transformV(e){this.#e.x=e.x,this.#e.y=e.y;let n=this.#e.matrixTransform(this);return new A(n.x,n.y)}inverseV(e){let n=this.inverse();this.#e.x=e.x,this.#e.y=e.y;let i=this.#e.matrixTransform(n);return new A(i.x,i.y)}},J=(r,e=0)=>{try{if(Array.isArray(r))return`[ ${r.map(n=>J(n,e)).join(", ")} ]`;if(typeof r=="object"&&r!==null){let n=r.constructor?.name;return n!=="Object"&&n?`[[ ${n} ]]`:`{ ${Object.entries(r).map(([i,a])=>`${i}: ${J(a,e)}`).join(", ")} }`}return JSON.stringify(r,null,e)}catch{return"[[ Non-serializable ]]"}},me;(e=>e.id="kayla")(me||={});var ft=j,mt=({color:r,cx:e,cy:n,height:i,width:a,children:l})=>{let c=O();return Z(()=>{c.color=r??"red",c.x=e??0,c.y=n??0,c.width=a??1,c.height=i??1}),l},Le=({label:r,size:e,align:n="center",parentRect:i,color:a,x:l,y:c,ox:p=0,oy:h=0})=>{i??=O("parent"),ee(d=>{d.fillStyle=a,d.font=`${e}px sans-serif`,d.textBaseline="middle",d.textAlign=n,d.fillText(r.toString(),(i?.x??l)+p,(i?.y??c)+h)})};function yt(r){switch(r){case"use":{y.current.use();break}case"unuse":{y.current.unuse();break}}}Reflect.set(globalThis,"Kayla",Te);var bt;(n=>(n.Flex=({align:i="stretch",children:a,direction:l="row",gap:c=0,justify:p="start",wrap:h="nowrap",getHeight:d,getWidth:m,getCenterX:x,getCenterY:v,color:S})=>{let R=Re(),f=O(),t=z(()=>({recalc(){let s=Number(c)||0,o=x(),u=v(),b=m(),g=d();f.x=o,f.y=u,f.width=b,f.height=g;let K=R.getChildrenEntities().filter(Boolean).map(k=>k.getRect()).filter(k=>k.getFlag("flex-ignored")!==!0),E=l==="row",C=E?f.width:f.height,$=E?f.height:f.width,te=0,N=0,ye=[],ne=[];K.forEach(k=>{let re=E?k.width:k.height;te+re>C&&h==="wrap"?(ye.push({height:N,items:ne}),ne=[k],te=re,N=E?k.height:k.width):(ne.push(k),te+=re+s,N=Math.max(N,E?k.height:k.width))}),ye.push({height:N,items:ne});let be=0;ye.forEach((k,re)=>{let L=k.items,V=L.reduce((T,ie)=>T+(E?ie.width:ie.height),0)+s*(L.length-1),F=0;p==="center"&&(F=(C-V)/2),p==="end"&&(F=C-V),p==="space-between"&&(F=0),p==="space-around"&&(F=(C-V)/(L.length*2)),p==="space-evenly"&&(F=(C-V)/(L.length+1)),L.forEach((T,ie)=>{T.z=f.z+1;let U=E?T.width:T.height,se=E?T.height:T.width,ae=0;i==="center"&&(ae=(k.height-se)/2),i==="end"&&(ae=k.height-se),i==="stretch"&&(E?T.height=k.height:T.width=k.height),E?(T.x=F+U/2,T.y=be+ae+se/2):(T.x=be+ae+se/2,T.y=F+U/2),p==="space-between"&&ie<L.length-1?F+=U+s+(C-V)/(L.length-1):p==="space-around"?F+=U+s+(C-V)/L.length:p==="space-evenly"?F+=U+s+(C-V)/(L.length+1):F+=U+s}),be+=k.height+s})}}));return ee((s,o)=>{o.preventDefault(),s.fillStyle=S,s.fillRect(f.left,f.top,f.width,f.height)}),Z(()=>{fe(()=>{t.recalc()})}),pe(n.Flex,()=>({controls:t})),a},n.GenericBox=({color:i,width:a=20,height:l=20,x:c=0,y:p=0})=>{let h=O();de(()=>{h.width=a,h.height=l,h.x=c,h.y=p}),ee((d,m)=>{m.preventDefault(),d.fillStyle=i,d.fillRect(h.left,h.top,h.width,h.height)})}))(bt||={});function gt(r,e,n,...i){if(typeof r=="string")throw new Error("Cannot use intrinsic elements.");return Q(r,{...e,key:e.key??n,children:e.children??i})}function _e(r,e,n,...i){if(typeof r=="string")throw new Error("Cannot use intrinsic elements.");return Q(r,{...e,key:e.key??n,children:e.children??i})}function xt(r,e,n){return _e(r,e,n)}var wt=Se;0&&(module.exports={Fragment,JSX,jsx,jsxDEV,jsxs});
|
package/dist/jsx-runtime.d.cts
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { F as FC, b as FCProps, j as KaylaExportables, h as KaylaElement } from './kayla-internals-D359_d9x.cjs';
|
|
2
|
+
export { J as JSX } from './kayla-internals-D359_d9x.cjs';
|
|
3
|
+
import './lea-C5CjP5X2.cjs';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* jsx stuff
|
|
6
7
|
*/
|
|
7
|
-
declare function jsx(type: string | FC, props:
|
|
8
|
+
declare function jsx(type: string | FC, props: FCProps, key: string, ...children: any[]): KaylaElement<any>;
|
|
8
9
|
/**
|
|
9
10
|
* jsx stuff
|
|
10
11
|
*/
|
|
11
|
-
declare function jsxs(type: string | FC, props:
|
|
12
|
-
declare function jsxDEV(type: string | FC, props: any): KaylaElement<any>;
|
|
12
|
+
declare function jsxs(type: string | FC, props: FCProps, key: string, ...children: any[]): KaylaElement<any>;
|
|
13
|
+
declare function jsxDEV(type: string | FC, props: any, key: string): KaylaElement<any>;
|
|
14
|
+
|
|
13
15
|
declare const Fragment: FC<FCProps, Record<string, KaylaExportables>>;
|
|
14
16
|
|
|
15
17
|
export { Fragment, jsx, jsxDEV, jsxs };
|
package/dist/jsx-runtime.d.ts
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { F as FC, b as FCProps, j as KaylaExportables, h as KaylaElement } from './kayla-internals-BRuWD6zz.js';
|
|
2
|
+
export { J as JSX } from './kayla-internals-BRuWD6zz.js';
|
|
3
|
+
import './lea-C5CjP5X2.js';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* jsx stuff
|
|
6
7
|
*/
|
|
7
|
-
declare function jsx(type: string | FC, props:
|
|
8
|
+
declare function jsx(type: string | FC, props: FCProps, key: string, ...children: any[]): KaylaElement<any>;
|
|
8
9
|
/**
|
|
9
10
|
* jsx stuff
|
|
10
11
|
*/
|
|
11
|
-
declare function jsxs(type: string | FC, props:
|
|
12
|
-
declare function jsxDEV(type: string | FC, props: any): KaylaElement<any>;
|
|
12
|
+
declare function jsxs(type: string | FC, props: FCProps, key: string, ...children: any[]): KaylaElement<any>;
|
|
13
|
+
declare function jsxDEV(type: string | FC, props: any, key: string): KaylaElement<any>;
|
|
14
|
+
|
|
13
15
|
declare const Fragment: FC<FCProps, Record<string, KaylaExportables>>;
|
|
14
16
|
|
|
15
17
|
export { Fragment, jsx, jsxDEV, jsxs };
|