@omnipad/core 0.4.5 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- 'use strict';var chunk4J2ZANLB_cjs=require('./chunk-4J2ZANLB.cjs');var x=Symbol.for("omnipad.gamepad_manager.instance"),it={A:0,B:1,X:2,Y:3,LB:4,RB:5,LT:6,RT:7,Select:8,Start:9,L3:10,R3:11,Up:12,Down:13,Left:14,Right:15},M=class c{constructor(){chunk4J2ZANLB_cjs.a(this,"isRunning",false);chunk4J2ZANLB_cjs.a(this,"config",null);chunk4J2ZANLB_cjs.a(this,"lastButtonStates",[]);chunk4J2ZANLB_cjs.a(this,"loop",()=>{if(!this.isRunning)return;let i=navigator.getGamepads();this.config?.forEach((t,e)=>{let s=i[e];s&&s.connected&&t&&(this.lastButtonStates[e]||(this.lastButtonStates[e]=[]),this.processButtons(s,t,e),this.processDPad(s,t),this.processAxes(s,t));}),requestAnimationFrame(this.loop);});}static getInstance(){let i=globalThis;return i[x]||(i[x]=new c),i[x]}setConfig(i){this.config=i;}getConfig(){return this.config}start(){this.isRunning||(this.isRunning=true,window.addEventListener("gamepadconnected",i=>{undefined?.DEV&&console.log("[Omnipad-Core] Gamepad Connected:",i.gamepad.id);}),window.addEventListener("gamepaddisconnected",()=>{undefined?.DEV&&console.log("[Omnipad-Core] Gamepad disconnected.");}),this.loop());}stop(){this.isRunning=false;}processButtons(i,t,e){t.buttons&&Object.entries(t.buttons).forEach(([s,o])=>{let n=it[s];if(n===void 0||!i.buttons[n])return;let l=i.buttons[n].pressed,u=this.lastButtonStates[e][n]||false;l&&!u?this.triggerVirtualEntity(o,"down"):!l&&u&&this.triggerVirtualEntity(o,"up"),this.lastButtonStates[e][n]=l;});}processDPad(i,t){let e=t?.dpad;if(!e)return;let s=i.buttons[12]?.pressed?-1:0,o=i.buttons[13]?.pressed?1:0,n=i.buttons[14]?.pressed?-1:0,l=i.buttons[15]?.pressed?1:0,u=n+l,v=s+o;this.triggerVirtualEntity(e,"vector",{x:u,y:v});}processAxes(i,t){let e=t?.deadzone??.1;if(t?.leftStick){let s=Math.abs(i.axes[0])>e?i.axes[0]:0,o=Math.abs(i.axes[1])>e?i.axes[1]:0;this.triggerVirtualEntity(t.leftStick,"vector",{x:s,y:o});}if(t?.rightStick){let s=Math.abs(i.axes[2])>e?i.axes[2]:0,o=Math.abs(i.axes[3])>e?i.axes[3]:0;this.triggerVirtualEntity(t.rightStick,"vector",{x:s,y:o});}}triggerVirtualEntity(i,t,e){let s=chunk4J2ZANLB_cjs.h.getInstance().getEntity(i);!s||s.activePointerId!=null||(t==="down"&&typeof s.triggerDown=="function"&&s.triggerDown(),t==="up"&&typeof s.triggerUp=="function"&&s.triggerUp(),t==="vector"&&typeof s.triggerVector=="function"&&e&&s.triggerVector(e.x,e.y));}};var R=typeof globalThis<"u"&&globalThis.requestAnimationFrame?globalThis.requestAnimationFrame.bind(globalThis):c=>setTimeout(c,16),st=typeof globalThis<"u"&&globalThis.cancelAnimationFrame?globalThis.cancelAnimationFrame.bind(globalThis):c=>clearTimeout(c);function T(c){let i=false,t;return function(e){t=e,i||(i=true,R(()=>{c(t),i=false;}));}}function z(c){let i=null,t=()=>{c(),i=R(t);};return {start:()=>{i===null&&t();},stop:()=>{i!==null&&(st(i),i=null);}}}var Z=(c=2)=>new Promise(i=>{let t=0,e=()=>{++t>=c?i():R(e);};R(e);});var O=Symbol.for("omnipad.element_observer.instance"),k=class c{constructor(){chunk4J2ZANLB_cjs.a(this,"_ro");chunk4J2ZANLB_cjs.a(this,"_roRegistry",new Map);chunk4J2ZANLB_cjs.a(this,"_elToRoCb",new WeakMap);chunk4J2ZANLB_cjs.a(this,"_io");chunk4J2ZANLB_cjs.a(this,"_ioRegistry",new Map);chunk4J2ZANLB_cjs.a(this,"_elToIoCb",new WeakMap);let i=T(t=>{for(let e of t)this._elToRoCb.get(e.target)?.();});this._ro=new ResizeObserver(t=>{i(t);}),this._io=new IntersectionObserver(t=>{for(let e of t)this._elToIoCb.get(e.target)?.(e.isIntersecting);},{threshold:0});}static getInstance(){let i=globalThis;return i[O]||(i[O]=new c),i[O]}observeResize(i,t,e){this.unobserveResize(i),this._roRegistry.set(i,t),this._elToRoCb.set(t,e),this._ro.observe(t);}unobserveResize(i){let t=this._roRegistry.get(i);t&&(this._ro.unobserve(t),this._elToRoCb.delete(t),this._roRegistry.delete(i));}observeIntersect(i,t,e){this.unobserveIntersect(i),this._ioRegistry.set(i,t),this._elToIoCb.set(t,e),this._io.observe(t);}unobserveIntersect(i){let t=this._ioRegistry.get(i);t&&(this._io.unobserve(t),this._elToIoCb.delete(t),this._ioRegistry.delete(i));}disconnect(i){this.unobserveResize(i),this.unobserveIntersect(i);}};var _=Symbol.for("omnipad.window_manager.instance"),Y=class c{constructor(){chunk4J2ZANLB_cjs.a(this,"_isListening",false);chunk4J2ZANLB_cjs.a(this,"throttledReset");chunk4J2ZANLB_cjs.a(this,"handleGlobalReset",()=>{undefined?.DEV&&console.debug("[OmniPad-Core] Safety reset triggered by environment change."),chunk4J2ZANLB_cjs.h.getInstance().resetAll(),chunk4J2ZANLB_cjs.h.getInstance().markAllRectDirty();});chunk4J2ZANLB_cjs.a(this,"handleResizeReset",()=>{this.throttledReset(null);});chunk4J2ZANLB_cjs.a(this,"handleBlurReset",()=>{this.handleGlobalReset();});chunk4J2ZANLB_cjs.a(this,"handleScrollReset",()=>{this.throttledReset(null);});chunk4J2ZANLB_cjs.a(this,"handleVisibilityChangeReset",()=>{document.visibilityState==="hidden"&&this.handleGlobalReset();});this.throttledReset=T(()=>{this.handleGlobalReset();});}static getInstance(){let i=globalThis;return i[_]||(i[_]=new c),i[_]}init(){this._isListening||(window.addEventListener("resize",this.handleResizeReset),window.addEventListener("blur",this.handleBlurReset),window.addEventListener("scroll",this.handleScrollReset,{capture:true,passive:true}),document.addEventListener("visibilitychange",this.handleVisibilityChangeReset),this._isListening=true,undefined?.DEV&&console.log("[OmniPad-Core] Global WindowManager monitoring started."));}async toggleFullscreen(i){let t=i||document.documentElement;try{document.fullscreenElement?(this.handleGlobalReset(),await document.exitFullscreen()):(this.handleGlobalReset(),await t.requestFullscreen());}catch(e){console.error("[OmniPad-Core] Fullscreen toggle failed:",e);}}isFullscreen(){return !!document.fullscreenElement}destroy(){window.removeEventListener("resize",this.handleResizeReset),window.removeEventListener("blur",this.handleBlurReset),window.removeEventListener("scroll",this.handleScrollReset,{capture:true}),window.removeEventListener("visibilitychange",this.handleVisibilityChangeReset),this._isListening=false;}};var A=class{constructor(){chunk4J2ZANLB_cjs.a(this,"listeners",new Set);}subscribe(i){return this.listeners.add(i),()=>this.listeners.delete(i)}emit(i){this.listeners.forEach(t=>{try{t(i);}catch(e){console.error("[OmniPad-Core] Emitter callback error:",e);}});}clear(){this.listeners.clear();}};var d=class{constructor(i,t,e,s){chunk4J2ZANLB_cjs.a(this,"uid");chunk4J2ZANLB_cjs.a(this,"type");chunk4J2ZANLB_cjs.a(this,"config");chunk4J2ZANLB_cjs.a(this,"state");chunk4J2ZANLB_cjs.a(this,"rectProvider",null);chunk4J2ZANLB_cjs.a(this,"_onMarkDirtyCb",null);chunk4J2ZANLB_cjs.a(this,"stateEmitter",new A);chunk4J2ZANLB_cjs.a(this,"configEmitter",new A);this.uid=i,this.type=t,this.config=e,this.state=s;}getConfig(){return this.config}subscribeConfig(i){return i(this.config),this.configEmitter.subscribe(i)}updateConfig(i){this.config={...this.config,...i},this.configEmitter.emit(this.config);}getState(){return this.state}setState(i){this.state={...this.state,...i},this.stateEmitter.emit(this.state);}subscribeState(i){return i(this.state),this.stateEmitter.subscribe(i)}destroy(){this.reset(),this.stateEmitter.clear(),this.configEmitter.clear(),chunk4J2ZANLB_cjs.h.getInstance().unregister(this.uid);}get rect(){return this.rectProvider?this.rectProvider():null}bindRectProvider(i,t){this.rectProvider=i,t&&(this._onMarkDirtyCb=t);}markRectDirty(){this._onMarkDirtyCb?.();}};var p=class{constructor(i,t){chunk4J2ZANLB_cjs.a(this,"isPressed",false);chunk4J2ZANLB_cjs.a(this,"mapping");chunk4J2ZANLB_cjs.a(this,"targetId");this.update(i,t);}update(i,t){this.isPressed&&this.reset(),this.targetId=i,this.mapping=this.hydrate(t);}hydrate(i){if(!i)return;let t={...i};if(t.type==="mouse")return t.button=t.button??0,t;let{key:e,code:s,keyCode:o}=t;if(e||s||o){t.type="keyboard";let n=Object.values(chunk4J2ZANLB_cjs.b).find(l=>l.code===s||l.key===e||l.keyCode===o);n&&(t.key=e??n.key,t.code=s??n.code,t.keyCode=o??n.keyCode);}return t}press(){if(!this.mapping||this.isPressed)return;this.isPressed=true;let i=this.mapping.type==="keyboard"?chunk4J2ZANLB_cjs.d.KEYDOWN:chunk4J2ZANLB_cjs.d.MOUSEDOWN;this.emitSignal(i);}release(i=true){if(!this.mapping||!this.isPressed)return;this.isPressed=false;let t=this.mapping.type==="keyboard"?chunk4J2ZANLB_cjs.d.KEYUP:chunk4J2ZANLB_cjs.d.MOUSEUP;this.emitSignal(t),this.mapping.type==="mouse"&&i&&this.emitSignal(chunk4J2ZANLB_cjs.d.CLICK);}move(i){this.mapping?.type==="mouse"&&this.emitSignal(chunk4J2ZANLB_cjs.d.MOUSEMOVE,i);}reset(){this.isPressed&&this.release(false);}async tap(i=true){this.isPressed||(this.press(),await Z(2),this.isPressed&&this.release(i));}emitSignal(i,t={}){!this.targetId||!this.mapping||chunk4J2ZANLB_cjs.h.getInstance().broadcastSignal({targetStageId:this.targetId,type:i,payload:{key:this.mapping.key,code:this.mapping.code,keyCode:this.mapping.keyCode,button:this.mapping.button,point:this.mapping.fixedPoint,...t}});}};var V={isActive:false,isPressed:false,pointerId:null,value:0},B=class extends d{constructor(t,e,s){super(t,s||chunk4J2ZANLB_cjs.c.BUTTON,e,V);chunk4J2ZANLB_cjs.a(this,"emitter");this.emitter=new p(e.targetStageId,e.mapping);}get activePointerId(){return this.state.pointerId}onPointerDown(t){this.setState({isActive:true,isPressed:true,pointerId:t.pointerId}),this.emitter.press();}onPointerUp(t){!this.state.isActive||t.pointerId!==this.state.pointerId||this.handleRelease(true);}onPointerCancel(){this.handleRelease(false);}onPointerMove(){}reset(){this.setState(V),this.emitter.reset();}updateConfig(t){super.updateConfig(t),this.emitter.update(this.config.targetStageId,this.config.mapping);}handleRelease(t){this.setState(V),this.emitter.release(t);}triggerDown(){this.state.isPressed||(this.setState({isActive:true,isPressed:true}),this.emitter.press());}triggerUp(){this.state.isPressed&&(this.setState({isActive:false,isPressed:false}),this.emitter.release(true));}};var q={isActive:false,pointerId:null,vector:{x:0,y:0}},j=.002,J=.3,G=class extends d{constructor(t,e,s){super(t,s||chunk4J2ZANLB_cjs.c.D_PAD,e,q);chunk4J2ZANLB_cjs.a(this,"emitters");let o=e.targetStageId;this.emitters={up:new p(o,e.mapping?.up),down:new p(o,e.mapping?.down),left:new p(o,e.mapping?.left),right:new p(o,e.mapping?.right)};}get activePointerId(){return this.state.pointerId}onPointerDown(t){this.setState({isActive:true,pointerId:t.pointerId,vector:{x:0,y:0}}),this.processInput(t,true);}onPointerMove(t){!this.state.isActive||t.pointerId!==this.state.pointerId||this.processInput(t);}onPointerUp(t){!this.state.isActive||t.pointerId!==this.state.pointerId||this.reset();}onPointerCancel(){this.reset();}processInput(t,e=false){if(!this.state.isActive)return;let s=this.rect;if(!s)return;let o=s.left+s.width/2,n=s.top+s.height/2,l=s.width/2,u=s.height/2,v=(t.clientX-o)/l,P=(t.clientY-n)/u;if(e&&(v!=chunk4J2ZANLB_cjs.l(v,-1,1)||P!=chunk4J2ZANLB_cjs.l(P,-1,1))){this.setState({vector:{x:0,y:0}}),this.markRectDirty();return}let C={x:chunk4J2ZANLB_cjs.l(v,-1,1),y:chunk4J2ZANLB_cjs.l(P,-1,1)};chunk4J2ZANLB_cjs.A(C,this.state.vector,j)||(this.setState({vector:C}),this.handleDigitalKeys(C));}handleDigitalKeys(t){let e=this.config.threshold??.3;t.y<-e?(this.emitters.up.press(),this.emitters.down.release()):t.y>e?(this.emitters.down.press(),this.emitters.up.release()):(this.emitters.up.release(),this.emitters.down.release()),t.x<-e?(this.emitters.left.press(),this.emitters.right.release()):t.x>e?(this.emitters.right.press(),this.emitters.left.release()):(this.emitters.left.release(),this.emitters.right.release());}reset(){this.emitters.up.reset(),this.emitters.down.reset(),this.emitters.left.reset(),this.emitters.right.reset(),this.setState(q);}updateConfig(t){super.updateConfig(t),this.emitters.up.update(this.config.targetStageId,this.config.mapping?.up),this.emitters.down.update(this.config.targetStageId,this.config.mapping?.down),this.emitters.left.update(this.config.targetStageId,this.config.mapping?.left),this.emitters.right.update(this.config.targetStageId,this.config.mapping?.right);}triggerVector(t,e){let s=this.config.threshold??.3;if(Math.abs(t)<s&&Math.abs(e)<s){this.state.isActive&&this.reset();return}this.state.isActive||this.setState({isActive:true});let o=chunk4J2ZANLB_cjs.m(this.state.vector.x,t,J),n=chunk4J2ZANLB_cjs.m(this.state.vector.y,e,J),l={x:o,y:n};chunk4J2ZANLB_cjs.A(l,this.state.vector,j)||(this.setState({vector:l}),this.handleDigitalKeys(l));}};var rt={isDynamicActive:false,dynamicPointerId:null,dynamicPosition:{x:0,y:0}},H=class extends d{constructor(t,e,s){super(t,s||chunk4J2ZANLB_cjs.c.INPUT_ZONE,e,rt);chunk4J2ZANLB_cjs.a(this,"delegates",{dynamicWidgetPointerDown:()=>{},dynamicWidgetPointerMove:()=>{},dynamicWidgetPointerUp:()=>{},dynamicWidgetPointerCancel:()=>{}});}bindDelegate(t,e){Object.prototype.hasOwnProperty.call(this.delegates,t)?this.delegates[t]=e:undefined?.DEV&&console.warn(`[Omnipad-Core] TargetZone attempted to bind unknown delegate: ${t}`);}get activePointerId(){return this.state.dynamicPointerId}onPointerDown(t){if(this.state.isDynamicActive)return;let e=this.calculateRelativePosition(t.clientX,t.clientY);this.setState({isDynamicActive:true,dynamicPointerId:t.pointerId,dynamicPosition:e}),this.delegates.dynamicWidgetPointerDown?.(t);}onPointerMove(t){this.state.isDynamicActive&&this.delegates.dynamicWidgetPointerMove?.(t);}onPointerUp(t){this.delegates.dynamicWidgetPointerUp?.(t),this.reset();}onPointerCancel(t){this.delegates.dynamicWidgetPointerCancel?.(t),this.reset();}calculateRelativePosition(t,e){let s=this.rect;return s?{x:chunk4J2ZANLB_cjs.w(t-s.left,s.width),y:chunk4J2ZANLB_cjs.w(e-s.top,s.height)}:{x:0,y:0}}get isInterceptorRequired(){return !!(this.config.dynamicWidgetId||this.config.preventFocusLoss)}reset(){this.setState({isDynamicActive:false,dynamicPointerId:null});}};var I=class{constructor(i={}){chunk4J2ZANLB_cjs.a(this,"options");chunk4J2ZANLB_cjs.a(this,"startTime",0);chunk4J2ZANLB_cjs.a(this,"startPos",{x:0,y:0});chunk4J2ZANLB_cjs.a(this,"lastTapTime",0);chunk4J2ZANLB_cjs.a(this,"hasMoved",false);chunk4J2ZANLB_cjs.a(this,"isDoubleTapHolding",false);this.options={tapTime:250,tapDistance:10,doubleTapGap:300,...i};}onPointerDown(i,t){let e=Date.now();this.startTime=e,this.startPos={x:i,y:t},this.hasMoved=false,e-this.lastTapTime<this.options.doubleTapGap?(this.isDoubleTapHolding=true,this.options.onDoubleTapHoldStart?.()):this.isDoubleTapHolding=false;}onPointerMove(i,t){this.hasMoved||Math.hypot(i-this.startPos.x,t-this.startPos.y)>this.options.tapDistance&&(this.hasMoved=true);}onPointerUp(){let i=Date.now(),t=i-this.startTime;this.isDoubleTapHolding?(this.isDoubleTapHolding=false,this.options.onDoubleTapHoldEnd?.(),this.lastTapTime=0):t<=this.options.tapTime&&!this.hasMoved&&(this.options.onTap?.(),i-this.lastTapTime<this.options.doubleTapGap?(this.options.onDoubleTap?.(),this.lastTapTime=0):this.lastTapTime=i);}reset(){this.isDoubleTapHolding&&this.options.onDoubleTapHoldEnd?.(),this.isDoubleTapHolding=false,this.hasMoved=false,this.startTime=0,this.lastTapTime=0;}};var $={isActive:false,isPressed:false,pointerId:null,value:0,vector:{x:0,y:0}},U=.002,Q=.3,L=class extends d{constructor(t,e,s){super(t,s||chunk4J2ZANLB_cjs.c.JOYSTICK,e,$);chunk4J2ZANLB_cjs.a(this,"emitters");chunk4J2ZANLB_cjs.a(this,"stickEmitter");chunk4J2ZANLB_cjs.a(this,"cursorEmitter");chunk4J2ZANLB_cjs.a(this,"gesture");chunk4J2ZANLB_cjs.a(this,"ticker");let o=e.targetStageId,n=e.mapping||{};this.emitters={up:new p(o,n.up),down:new p(o,n.down),left:new p(o,n.left),right:new p(o,n.right)},this.stickEmitter=new p(o,n.stick),this.cursorEmitter=new p(o,{type:"mouse"}),this.gesture=new I({onTap:async()=>{this.setState({isPressed:true}),await this.stickEmitter.tap(),this.setState({isPressed:false});},onDoubleTapHoldStart:()=>{this.setState({isPressed:true}),this.stickEmitter.press();},onDoubleTapHoldEnd:()=>{this.setState({isPressed:false}),this.stickEmitter.release(false);}}),this.ticker=z(()=>{this.handleCursorTick();});}get activePointerId(){return this.state.pointerId}onPointerDown(t){this.setState({isActive:true,pointerId:t.pointerId,vector:{x:0,y:0}}),this.gesture.onPointerDown(t.clientX,t.clientY),this.processInput(t,true);}onPointerMove(t){!this.state.isActive||t.pointerId!==this.state.pointerId||(this.gesture.onPointerMove(t.clientX,t.clientY),this.config.cursorMode&&this.ticker.start(),this.processInput(t));}onPointerUp(t){!this.state.isActive||t.pointerId!==this.state.pointerId||(this.gesture.onPointerUp(),this.handleRelease());}onPointerCancel(){this.handleRelease();}handleRelease(){this.setState({isActive:false,pointerId:null,vector:{x:0,y:0}}),this.ticker.stop(),Object.values(this.emitters).forEach(t=>t?.reset());}processInput(t,e=false){if(!this.state.isActive)return;let s=this.rect;if(!s)return;let o=s.left+s.width/2,n=s.top+s.height/2,l=s.width/2,u=s.height/2,v=(t.clientX-o)/l,P=(t.clientY-n)/u;if(e&&(v!=chunk4J2ZANLB_cjs.l(v,-1,1)||P!=chunk4J2ZANLB_cjs.l(P,-1,1))){this.setState({vector:{x:0,y:0}}),this.markRectDirty();return}let D=chunk4J2ZANLB_cjs.C({x:v,y:P},1,this.config.threshold||.15);chunk4J2ZANLB_cjs.A(D,this.state.vector,U)||(this.setState({vector:D}),this.handleDigitalKeys(D));}handleCursorTick(){let{vector:t,isActive:e}=this.state;if(!e||!this.config.cursorMode||chunk4J2ZANLB_cjs.A(t,{x:0,y:0},U)){this.ticker.stop();return}let s=this.config.cursorSensitivity??1,o={x:t.x*Math.abs(t.x)*s,y:t.y*Math.abs(t.y)*s};(Math.abs(o.x)>0||Math.abs(o.y)>0)&&this.cursorEmitter.move({delta:o});}handleDigitalKeys(t){let e=this.config.threshold??.3;t.y<-e?(this.emitters.up.press(),this.emitters.down.release()):t.y>e?(this.emitters.down.press(),this.emitters.up.release()):(this.emitters.up.release(),this.emitters.down.release()),t.x<-e?(this.emitters.left.press(),this.emitters.right.release()):t.x>e?(this.emitters.right.press(),this.emitters.left.release()):(this.emitters.left.release(),this.emitters.right.release());}reset(){this.setState($),this.gesture.reset(),this.handleRelease(),this.stickEmitter.reset(),this.cursorEmitter.reset();}updateConfig(t){super.updateConfig(t);let e=this.config.targetStageId,s=this.config.mapping||{};this.emitters.up.update(e,s.up),this.emitters.down.update(e,s.down),this.emitters.left.update(e,s.left),this.emitters.right.update(e,s.right),this.stickEmitter.update(e,s.stick),this.cursorEmitter.update(e);}triggerDown(){this.state.isPressed||(this.setState({isActive:true,isPressed:true}),this.stickEmitter.press());}triggerUp(){this.state.isPressed&&(this.setState({isActive:false,isPressed:false}),this.stickEmitter.release(true));}triggerVector(t,e){let s=this.config.threshold??.15;if(Math.hypot(t,e)<s){this.state.isActive&&this.handleRelease();return}this.state.isActive||this.setState({isActive:true});let n=chunk4J2ZANLB_cjs.m(this.state.vector.x,t,Q),l=chunk4J2ZANLB_cjs.m(this.state.vector.y,e,Q),u={x:n,y:l};chunk4J2ZANLB_cjs.A(u,this.state.vector,U)||(this.setState({vector:u}),this.handleDigitalKeys(u)),this.config.cursorMode&&this.ticker.start();}};var ot={isHighlighted:false},F=class extends d{constructor(i,t,e){super(i,e||chunk4J2ZANLB_cjs.c.ROOT_LAYER,t,ot);}reset(){}};var nt={position:{x:50,y:50},isVisible:false,isPointerDown:false,isFocusReturning:false},y=1,N=class extends d{constructor(t,e,s){super(t,s||chunk4J2ZANLB_cjs.c.TARGET_ZONE,e,nt);chunk4J2ZANLB_cjs.a(this,"hideTimer",null);chunk4J2ZANLB_cjs.a(this,"focusFeedbackTimer",null);chunk4J2ZANLB_cjs.a(this,"throttledMoveExecution");chunk4J2ZANLB_cjs.a(this,"delegates",{dispatchKeyboardEvent:()=>{},dispatchPointerEventAtPos:()=>{},reclaimFocusAtPos:()=>{}});this.throttledMoveExecution=T(o=>{this.executeMouseAction(chunk4J2ZANLB_cjs.d.POINTERMOVE,o);});}bindDelegate(t,e){Object.prototype.hasOwnProperty.call(this.delegates,t)?this.delegates[t]=e:undefined?.DEV&&console.warn(`[Omnipad-Core] TargetZone attempted to bind unknown delegate: ${t}`);}get activePointerId(){return null}onPointerDown(t){this.processPhysicalEvent(t,chunk4J2ZANLB_cjs.d.MOUSEDOWN);}onPointerMove(t){this.processPhysicalEvent(t,chunk4J2ZANLB_cjs.d.MOUSEMOVE);}onPointerUp(t){this.processPhysicalEvent(t,chunk4J2ZANLB_cjs.d.MOUSEUP),this.processPhysicalEvent(t,chunk4J2ZANLB_cjs.d.CLICK);}onPointerCancel(t){this.processPhysicalEvent(t,chunk4J2ZANLB_cjs.d.MOUSEUP);}processPhysicalEvent(t,e){let s=this.rect;if(!s)return;let o={x:chunk4J2ZANLB_cjs.w(t.clientX-s.left,s.width),y:chunk4J2ZANLB_cjs.w(t.clientY-s.top,s.height)};this.handleSignal({targetStageId:this.uid,type:e,payload:{point:o,button:t.button}});}handleSignal(t){let{type:e,payload:s}=t;switch(this.ensureFocus(),e){case chunk4J2ZANLB_cjs.d.KEYDOWN:case chunk4J2ZANLB_cjs.d.KEYUP:this.delegates.dispatchKeyboardEvent?.(e,s);break;case chunk4J2ZANLB_cjs.d.MOUSEMOVE:s.point?this.updateCursorPosition(s.point):s.delta&&this.updateCursorPositionByDelta(s.delta),this.config.cursorEnabled&&this.showCursor(),this.throttledMoveExecution(s);break;case chunk4J2ZANLB_cjs.d.MOUSEDOWN:case chunk4J2ZANLB_cjs.d.MOUSEUP:case chunk4J2ZANLB_cjs.d.CLICK:s.point&&this.updateCursorPosition(s.point),this.config.cursorEnabled&&this.showCursor(),this.executeMouseAction(e.startsWith(chunk4J2ZANLB_cjs.d.MOUSE)?e.replace(chunk4J2ZANLB_cjs.d.MOUSE,chunk4J2ZANLB_cjs.d.POINTER):e,s);break}}executeMouseAction(t,e){let s=this.rect;if(!s)return;t===chunk4J2ZANLB_cjs.d.POINTERDOWN&&this.setState({isPointerDown:true}),t===chunk4J2ZANLB_cjs.d.POINTERUP&&this.setState({isPointerDown:false});let o=e.point||this.state.position,n=chunk4J2ZANLB_cjs.l(s.left+chunk4J2ZANLB_cjs.v(o.x,s.width),s.left+y,s.left+s.width-y),l=chunk4J2ZANLB_cjs.l(s.top+chunk4J2ZANLB_cjs.v(o.y,s.height),s.top+y,s.top+s.height-y);this.delegates.dispatchPointerEventAtPos?.(t,n,l,{button:e.button??0,buttons:this.state.isPointerDown?1:0,pressure:this.state.isPointerDown?.5:0});}ensureFocus(){let t=this.rect;if(!t)return;let e=chunk4J2ZANLB_cjs.l(t.left+chunk4J2ZANLB_cjs.v(this.state.position.x,t.width),t.left+y,t.left+t.width-y),s=chunk4J2ZANLB_cjs.l(t.top+chunk4J2ZANLB_cjs.v(this.state.position.y,t.height),t.top+y,t.top+t.height-y);this.delegates.reclaimFocusAtPos?.(e,s,()=>this.triggerFocusFeedback());}triggerFocusFeedback(){this.setState({isFocusReturning:true}),this.focusFeedbackTimer&&clearTimeout(this.focusFeedbackTimer),this.focusFeedbackTimer=setTimeout(()=>this.setState({isFocusReturning:false}),500);}updateCursorPosition(t){chunk4J2ZANLB_cjs.A(t,this.state.position)||this.setState({position:{...t}});}updateCursorPositionByDelta(t){if(chunk4J2ZANLB_cjs.A(t,{x:0,y:0}))return;let e=this.rect;if(!e)return;let s=chunk4J2ZANLB_cjs.w(t.x,e.width),o=chunk4J2ZANLB_cjs.w(t.y,e.height);this.updateCursorPosition({x:chunk4J2ZANLB_cjs.l(this.state.position.x+s,0,100),y:chunk4J2ZANLB_cjs.l(this.state.position.y+o,0,100)});}showCursor(){this.setState({isVisible:true}),this.hideTimer&&clearTimeout(this.hideTimer),this.config.cursorAutoDelay&&this.config.cursorAutoDelay>0&&(this.hideTimer=setTimeout(()=>this.setState({isVisible:false}),this.config.cursorAutoDelay));}reset(){this.state.isPointerDown&&this.executeMouseAction(chunk4J2ZANLB_cjs.d.POINTERUP,{}),this.hideTimer&&clearTimeout(this.hideTimer),this.focusFeedbackTimer&&clearTimeout(this.focusFeedbackTimer),this.setState({isVisible:false,isPointerDown:false,isFocusReturning:false});}};var tt={isActive:false,isPressed:false,pointerId:null,value:0},W=class extends d{constructor(t,e,s){super(t,s||chunk4J2ZANLB_cjs.c.TRACKPAD,e,tt);chunk4J2ZANLB_cjs.a(this,"lastPointerPos",{x:0,y:0});chunk4J2ZANLB_cjs.a(this,"gesture");chunk4J2ZANLB_cjs.a(this,"emitter");let o=e.mapping||{type:"mouse"};this.emitter=new p(e.targetStageId,o),this.gesture=new I({onTap:()=>{this.setState({isPressed:true}),this.emitter.tap();},onDoubleTapHoldStart:()=>{this.setState({isPressed:true}),this.emitter.press();},onDoubleTapHoldEnd:()=>{this.setState({isPressed:false}),this.emitter.release(false);}});}get activePointerId(){return this.state.pointerId}onPointerDown(t){this.lastPointerPos={x:t.clientX,y:t.clientY},this.gesture.onPointerDown(t.clientX,t.clientY),this.setState({isActive:true,pointerId:t.pointerId});}onPointerMove(t){!this.state.isActive||t.pointerId!==this.state.pointerId||(this.gesture.onPointerMove(t.clientX,t.clientY),this.processInput(t));}processInput(t){if(!this.state.isActive)return;let e=t.clientX-this.lastPointerPos.x,s=t.clientY-this.lastPointerPos.y,o=this.rect;if(!o)return;let n=e/o.width*100*(this.config.sensitivity??1),l=s/o.height*100*(this.config.sensitivity??1),u={x:n,y:l};chunk4J2ZANLB_cjs.A(u,{x:0,y:0})||this.emitter.move({delta:u}),this.lastPointerPos={x:t.clientX,y:t.clientY};}onPointerUp(t){!this.state.isActive||t.pointerId!==this.state.pointerId||(this.gesture.onPointerUp(),this.handleRelease());}onPointerCancel(){this.handleRelease();}reset(){this.gesture.reset(),this.emitter.reset(),this.handleRelease();}updateConfig(t){super.updateConfig(t),this.emitter.update(this.config.targetStageId,this.config.mapping);}handleRelease(){this.setState(tt);}};var Ue={ActionTypes:chunk4J2ZANLB_cjs.d,Context:chunk4J2ZANLB_cjs.f,Keys:chunk4J2ZANLB_cjs.b,Types:chunk4J2ZANLB_cjs.c};Object.defineProperty(exports,"ACTION_TYPES",{enumerable:true,get:function(){return chunk4J2ZANLB_cjs.d}});Object.defineProperty(exports,"CMP_TYPES",{enumerable:true,get:function(){return chunk4J2ZANLB_cjs.c}});Object.defineProperty(exports,"CONTEXT",{enumerable:true,get:function(){return chunk4J2ZANLB_cjs.f}});Object.defineProperty(exports,"KEYS",{enumerable:true,get:function(){return chunk4J2ZANLB_cjs.b}});Object.defineProperty(exports,"Registry",{enumerable:true,get:function(){return chunk4J2ZANLB_cjs.h}});Object.defineProperty(exports,"VALID_UNITS",{enumerable:true,get:function(){return chunk4J2ZANLB_cjs.e}});Object.defineProperty(exports,"setGlobalSignalHandler",{enumerable:true,get:function(){return chunk4J2ZANLB_cjs.g}});exports.BaseEntity=d;exports.ButtonCore=B;exports.DPadCore=G;exports.ElementObserver=k;exports.GamepadManager=M;exports.InputZoneCore=H;exports.JoystickCore=L;exports.OmniPad=Ue;exports.RootLayerCore=F;exports.TargetZoneCore=N;exports.TrackpadCore=W;exports.WindowManager=Y;
1
+ 'use strict';var chunkOVV5DKL6_cjs=require('./chunk-OVV5DKL6.cjs'),chunkNB4FTDOP_cjs=require('./chunk-NB4FTDOP.cjs'),chunk52YF3VHH_cjs=require('./chunk-52YF3VHH.cjs'),chunkHCOFKHVV_cjs=require('./chunk-HCOFKHVV.cjs');function Tt(n,s){if(!(!n||!s)&&"bindDelegate"in n&&typeof n.bindDelegate=="function"){let t=Object.entries(s);for(let i=0;i<t.length;i++){let[e,o]=t[i];typeof o=="function"&&n.bindDelegate(e,o);}}}function Et(n,s,t,i,e){if(!n.uid)return ()=>{};let o=n.uid;if("bindRectProvider"in n){let c=n,d=chunk52YF3VHH_cjs.f(()=>i(s));c.bindRectProvider(d.get,()=>{d.markDirty(),e&&e.markDirty();}),t.observeResize(o,s,()=>{c.markRectDirty();});}if("reset"in n){let c=n;t.observeIntersect(o,s,d=>{d||c.reset();});}return ()=>{t.disconnect(o);}}function It(n=[],s){return n?.filter(t=>t.uid!==s)||[]}function St(n,s){return chunkOVV5DKL6_cjs.a(n,s)}function Ct(n,s,t,i,e,o){let c=chunkOVV5DKL6_cjs.c(i,e,o);return c.id=s,c.baseType=n,c.parentId=t,c.layout=chunkOVV5DKL6_cjs.c(i.layout,e.layout,o.layout),c}function At(n,s=[],t){let i=s?.find(o=>o.uid===t),e=n.length>0;return n.length>1&&console.error(`[OmniPad-Validation] InputZone ${t} has multiple dynamic widgets in slot. Only the first one will be activated.`),e&&i&&console.warn(`[OmniPad-Validation] InputZone ${t} has both Slot and Config dynamic widgets. Config ignored.`),{nodeToRender:e?n[0]:i||null,isFromSlot:e}}function Dt(n,s){if(!n||Object.keys(n??{}).length===0)return;if(!(n.config?.baseType===s||n.type===s)){undefined?.DEV&&console.warn(`[OmniPad-Validation] Type mismatch! Expected "${s}", received "${n.type}". Config ignored.`);return}return n}function Rt(n){if(!n||typeof n!="object")throw new Error("[OmniPad-Validation] Profile must be a valid JSON object.");if(n=chunk52YF3VHH_cjs.m(n),!Array.isArray(n.items))throw new Error('[OmniPad-Validation] "items" must be an array.');let s={name:n.meta?.name||"Untitled Profile",version:n.meta?.version||"1.0.0",author:n.meta?.author||"Unknown"},t=n.items.map((e,o)=>{if(!e.id||!e.type)throw new Error(`[OmniPad-Validation] Item at index ${o} is missing "id" or "type".`);return {id:String(e.id),type:String(e.type),parentId:e.parentId?String(e.parentId):void 0,config:{...e.config,layout:chunk52YF3VHH_cjs.M(e.config.layout),cssClass:chunk52YF3VHH_cjs.l(e.config.cssClass)}}}),i=n.gamepadMappings;return {meta:s,items:t,gamepadMappings:i}}function Nt(n){let{items:s,gamepadMappings:t}=n,i=new Map,e=(r,p="node")=>chunk52YF3VHH_cjs.h(r)?r:(i.has(r)||i.set(r,chunk52YF3VHH_cjs.g(p)),i.get(r));s.forEach(r=>e(r.id,r.type));let o=[];t&&t.forEach(r=>{let p={};if(r.buttons){p.buttons={};for(let[u,b]of Object.entries(r.buttons))p.buttons[u]=e(b);}r.dpad&&(p.dpad=e(r.dpad)),r.leftStick&&(p.leftStick=e(r.leftStick)),r.rightStick&&(p.rightStick=e(r.rightStick)),o.push(p);});let c=new Map,d=[];s.forEach(r=>{r.parentId?(c.has(r.parentId)||c.set(r.parentId,[]),c.get(r.parentId).push(r)):d.push(r);});let h=(r,p)=>{if(p.has(r.id))throw new Error(`[OmniPad-Core] Circular dependency detected at node: ${r.id}`);p.add(r.id);let u={...r.config};u?.targetStageId&&(u.targetStageId=e(u.targetStageId)),u?.dynamicWidgetId&&(u.dynamicWidgetId=e(u.dynamicWidgetId));let V=(c.get(r.id)||[]).map(K=>h(K,new Set(p)));return {uid:e(r.id),type:r.type,config:u,children:V}},f={};return d.forEach(r=>{f[r.id]=h(r,new Set);}),{roots:f,runtimeGamepadMappings:o}}function Yt(n,s,t){let i=chunkNB4FTDOP_cjs.b.getInstance(),e=[];if(!s||s.length===0)e=i.getAllEntities();else {let r=new Set;s.forEach(p=>{i.getEntitiesByRoot(p).forEach(b=>r.add(b));}),e=Array.from(r);}let o=new Map,c=0,d=r=>chunk52YF3VHH_cjs.h(r)?r:(o.has(r)||o.set(r,`node_${++c}`),o.get(r)),h=e.map(r=>{let p=r.getConfig(),u=r.uid,b={...p};b.targetStageId&&(b.targetStageId=d(b.targetStageId)),b.dynamicWidgetId&&(b.dynamicWidgetId=d(b.dynamicWidgetId));let{id:V,parentId:K,...W}=b;return {id:d(u),type:r.type,parentId:p.parentId?d(p.parentId):void 0,config:{...W,layout:chunk52YF3VHH_cjs.N(W.layout)}}}),f=[];return t&&t.forEach(r=>{let p={};if(r.buttons){p.buttons={};for(let[u,b]of Object.entries(r.buttons))o.has(b)&&(p.buttons[u]=o.get(b));}r.dpad&&o.has(r.dpad)&&(p.dpad=o.get(r.dpad)),r.leftStick&&o.has(r.leftStick)&&(p.leftStick=o.get(r.leftStick)),r.rightStick&&o.has(r.rightStick)&&(p.rightStick=o.get(r.rightStick)),Object.keys(p).length>0?f.push(p):f.push({});}),{meta:n,items:h,gamepadMappings:Object.keys(f).length>0?f:void 0}}var x=class{constructor(){chunkHCOFKHVV_cjs.a(this,"listeners",new Set);}subscribe(s){return this.listeners.add(s),()=>this.listeners.delete(s)}emit(s){this.listeners.forEach(t=>{try{t(s);}catch(i){console.error("[OmniPad-Core] Emitter callback error:",i);}});}clear(){this.listeners.clear();}};var g=class{constructor(s,t,i,e){chunkHCOFKHVV_cjs.a(this,"uid");chunkHCOFKHVV_cjs.a(this,"type");chunkHCOFKHVV_cjs.a(this,"config");chunkHCOFKHVV_cjs.a(this,"state");chunkHCOFKHVV_cjs.a(this,"rectProvider",null);chunkHCOFKHVV_cjs.a(this,"_onMarkDirtyCb",null);chunkHCOFKHVV_cjs.a(this,"stateEmitter",new x);chunkHCOFKHVV_cjs.a(this,"configEmitter",new x);this.uid=s,this.type=t,this.config=i,this.state=e;}getConfig(){return this.config}subscribeConfig(s){return s(this.config),this.configEmitter.subscribe(s)}updateConfig(s){this.config={...this.config,...s},this.configEmitter.emit(this.config);}getState(){return this.state}setState(s){this.state={...this.state,...s},this.stateEmitter.emit(this.state);}subscribeState(s){return s(this.state),this.stateEmitter.subscribe(s)}destroy(){this.reset(),this.stateEmitter.clear(),this.configEmitter.clear(),chunkNB4FTDOP_cjs.b.getInstance().unregister(this.uid);}get rect(){return this.rectProvider?this.rectProvider():null}bindRectProvider(s,t){this.rectProvider=s,t&&(this._onMarkDirtyCb=t);}markRectDirty(){this._onMarkDirtyCb?.();}};var it=32,dt=255,m=class{constructor(s,t){chunkHCOFKHVV_cjs.a(this,"isPressed",false);chunkHCOFKHVV_cjs.a(this,"mapping");chunkHCOFKHVV_cjs.a(this,"targetId");this.update(s,t);}update(s,t){this.isPressed&&this.reset(),this.targetId=s,this.mapping=typeof t=="string"?chunk52YF3VHH_cjs.a[t]??void 0:this.hydrate(t);}hydrate(s){if(!s||typeof s!="object")return;let{type:t,key:i,code:e,keyCode:o,button:c,fixedPoint:d}=s;if(t==="mouse")return {type:"mouse",button:typeof c=="number"&&c>=0&&c<=2?c:0,fixedPoint:d&&typeof d.x=="number"?{x:Number(d.x),y:Number(d.y)}:void 0};let h=typeof i=="string"?i.substring(0,it):void 0,f=typeof e=="string"?e.substring(0,it):void 0,r=typeof o=="number"&&Number.isFinite(o)?Math.floor(Math.min(o,dt)):void 0;if(h||f||r){let p=Object.values(chunk52YF3VHH_cjs.a).find(u=>u.type!=="keyboard"?false:u.code===f||u.key===h||u.keyCode===r);return p?{type:"keyboard",key:h??p.key,code:f??p.code,keyCode:r??p.keyCode}:{type:"keyboard",key:h||"unknown",code:f||"Unknown",keyCode:r||0}}}press(){if(!this.mapping||this.isPressed)return;this.isPressed=true;let s=this.mapping.type==="keyboard"?chunk52YF3VHH_cjs.c.KEYDOWN:chunk52YF3VHH_cjs.c.MOUSEDOWN;this.emitSignal(s);}release(s=true){if(!this.mapping||!this.isPressed)return;this.isPressed=false;let t=this.mapping.type==="keyboard"?chunk52YF3VHH_cjs.c.KEYUP:chunk52YF3VHH_cjs.c.MOUSEUP;this.emitSignal(t),this.mapping.type==="mouse"&&s&&this.emitSignal(chunk52YF3VHH_cjs.c.CLICK);}move(s){this.mapping?.type==="mouse"&&this.emitSignal(chunk52YF3VHH_cjs.c.MOUSEMOVE,s);}reset(){this.isPressed&&this.release(false);}async tap(s=true){this.isPressed||(this.press(),await chunkNB4FTDOP_cjs.g(2),this.isPressed&&this.release(s));}emitSignal(s,t={}){this.mapping&&chunkNB4FTDOP_cjs.b.getInstance().broadcastSignal({targetStageId:this.targetId||"",type:s,payload:{key:this.mapping.key,code:this.mapping.code,keyCode:this.mapping.keyCode,button:this.mapping.button,point:this.mapping.fixedPoint,...t}});}};var k={isActive:false,isPressed:false,pointerId:null,value:0},O=class extends g{constructor(t,i,e){super(t,e||chunk52YF3VHH_cjs.b.BUTTON,i,k);chunkHCOFKHVV_cjs.a(this,"emitter");this.emitter=new m(i.targetStageId,i.mapping);}get activePointerId(){return this.state.pointerId}onPointerDown(t){this.setState({isActive:true,isPressed:true,pointerId:t.pointerId}),this.emitter.press();}onPointerUp(t){!this.state.isActive||t.pointerId!==this.state.pointerId||this.handleRelease(true);}onPointerCancel(){this.handleRelease(false);}onPointerMove(){}reset(){this.setState(k),this.emitter.reset();}updateConfig(t){super.updateConfig(t),this.emitter.update(this.config.targetStageId,this.config.mapping);}handleRelease(t){this.setState(k),this.emitter.release(t);}triggerDown(){this.state.isPressed||(this.setState({isActive:true,isPressed:true}),this.emitter.press());}triggerUp(){this.state.isPressed&&(this.setState({isActive:false,isPressed:false}),this.emitter.release(true));}};var st={isActive:false,pointerId:null,vector:{x:0,y:0}},rt=.15,ot=.002,nt=.3,R=class extends g{constructor(t,i,e){super(t,e||chunk52YF3VHH_cjs.b.D_PAD,i,st);chunkHCOFKHVV_cjs.a(this,"emitters");let o=i.targetStageId;this.emitters={up:new m(o,i.mapping?.up),down:new m(o,i.mapping?.down),left:new m(o,i.mapping?.left),right:new m(o,i.mapping?.right)};}get activePointerId(){return this.state.pointerId}onPointerDown(t){this.setState({isActive:true,pointerId:t.pointerId,vector:{x:0,y:0}}),this.processInput(t,true);}onPointerMove(t){!this.state.isActive||t.pointerId!==this.state.pointerId||this.processInput(t);}onPointerUp(t){!this.state.isActive||t.pointerId!==this.state.pointerId||this.reset();}onPointerCancel(){this.reset();}processInput(t,i=false){if(!this.state.isActive)return;let e=this.rect;if(!e)return;let o=e.left+e.width/2,c=e.top+e.height/2,d=e.width/2,h=e.height/2,f=(t.clientX-o)/d,r=(t.clientY-c)/h;if(i&&(f!=chunk52YF3VHH_cjs.q(f,-1,1)||r!=chunk52YF3VHH_cjs.q(r,-1,1))){this.setState({vector:{x:0,y:0}}),this.markRectDirty();return}let p={x:chunk52YF3VHH_cjs.q(f,-1,1),y:chunk52YF3VHH_cjs.q(r,-1,1)};chunk52YF3VHH_cjs.F(p,this.state.vector,ot)||(this.setState({vector:p}),this.handleDigitalKeys(p));}handleDigitalKeys(t){let i=this.config.threshold??rt;t.y<-i?(this.emitters.up.press(),this.emitters.down.release()):t.y>i?(this.emitters.down.press(),this.emitters.up.release()):(this.emitters.up.release(),this.emitters.down.release()),t.x<-i?(this.emitters.left.press(),this.emitters.right.release()):t.x>i?(this.emitters.right.press(),this.emitters.left.release()):(this.emitters.left.release(),this.emitters.right.release());}reset(){this.emitters.up.reset(),this.emitters.down.reset(),this.emitters.left.reset(),this.emitters.right.reset(),this.setState(st);}updateConfig(t){super.updateConfig(t),this.emitters.up.update(this.config.targetStageId,this.config.mapping?.up),this.emitters.down.update(this.config.targetStageId,this.config.mapping?.down),this.emitters.left.update(this.config.targetStageId,this.config.mapping?.left),this.emitters.right.update(this.config.targetStageId,this.config.mapping?.right);}triggerVector(t,i){let e=this.config.threshold??rt;if(Math.abs(t)<e&&Math.abs(i)<e){this.state.isActive&&this.reset();return}this.state.isActive||this.setState({isActive:true});let o=chunk52YF3VHH_cjs.r(this.state.vector.x,t,nt),c=chunk52YF3VHH_cjs.r(this.state.vector.y,i,nt),d={x:o,y:c};chunk52YF3VHH_cjs.F(d,this.state.vector,ot)||(this.setState({vector:d}),this.handleDigitalKeys(d));}};var lt={isDynamicActive:false,dynamicPointerId:null,dynamicPosition:{x:0,y:0}},N=class extends g{constructor(t,i,e){super(t,e||chunk52YF3VHH_cjs.b.INPUT_ZONE,i,lt);chunkHCOFKHVV_cjs.a(this,"delegates",{dynamicWidgetPointerDown:()=>{},dynamicWidgetPointerMove:()=>{},dynamicWidgetPointerUp:()=>{},dynamicWidgetPointerCancel:()=>{}});}bindDelegate(t,i){Object.prototype.hasOwnProperty.call(this.delegates,t)?this.delegates[t]=i:undefined?.DEV&&console.warn(`[OmniPad-Core] TargetZone attempted to bind unknown delegate: ${t}`);}get activePointerId(){return this.state.dynamicPointerId}onPointerDown(t){if(this.state.isDynamicActive)return;let i=this.calculateRelativePosition(t.clientX,t.clientY);this.setState({isDynamicActive:true,dynamicPointerId:t.pointerId,dynamicPosition:i}),this.delegates.dynamicWidgetPointerDown?.(t);}onPointerMove(t){this.state.isDynamicActive&&this.delegates.dynamicWidgetPointerMove?.(t);}onPointerUp(t){this.delegates.dynamicWidgetPointerUp?.(t),this.reset();}onPointerCancel(t){this.delegates.dynamicWidgetPointerCancel?.(t),this.reset();}calculateRelativePosition(t,i){let e=this.rect;return e?{x:chunk52YF3VHH_cjs.B(t-e.left,e.width),y:chunk52YF3VHH_cjs.B(i-e.top,e.height)}:{x:0,y:0}}get isInterceptorRequired(){return !!(this.config.dynamicWidgetId||this.config.preventFocusLoss)}reset(){this.setState({isDynamicActive:false,dynamicPointerId:null});}};var C=class{constructor(s={}){chunkHCOFKHVV_cjs.a(this,"options");chunkHCOFKHVV_cjs.a(this,"startTime",0);chunkHCOFKHVV_cjs.a(this,"startPos",{x:0,y:0});chunkHCOFKHVV_cjs.a(this,"lastTapTime",0);chunkHCOFKHVV_cjs.a(this,"hasMoved",false);chunkHCOFKHVV_cjs.a(this,"isDoubleTapHolding",false);this.options={tapTime:250,tapDistance:10,doubleTapGap:300,...s};}onPointerDown(s,t){let i=Date.now();this.startTime=i,this.startPos={x:s,y:t},this.hasMoved=false,i-this.lastTapTime<this.options.doubleTapGap?(this.isDoubleTapHolding=true,this.options.onDoubleTapHoldStart?.()):this.isDoubleTapHolding=false;}onPointerMove(s,t){this.hasMoved||Math.hypot(s-this.startPos.x,t-this.startPos.y)>this.options.tapDistance&&(this.hasMoved=true);}onPointerUp(){let s=Date.now(),t=s-this.startTime;this.isDoubleTapHolding?(this.isDoubleTapHolding=false,this.options.onDoubleTapHoldEnd?.(),this.lastTapTime=0):t<=this.options.tapTime&&!this.hasMoved&&(this.options.onTap?.(),s-this.lastTapTime<this.options.doubleTapGap?(this.options.onDoubleTap?.(),this.lastTapTime=0):this.lastTapTime=s);}reset(){this.isDoubleTapHolding&&this.options.onDoubleTapHoldEnd?.(),this.isDoubleTapHolding=false,this.hasMoved=false,this.startTime=0,this.lastTapTime=0;}};var at={isActive:false,isPressed:false,pointerId:null,value:0,vector:{x:0,y:0}},Y=.15,U=.002,ct=.3,H=class extends g{constructor(t,i,e){super(t,e||chunk52YF3VHH_cjs.b.JOYSTICK,i,at);chunkHCOFKHVV_cjs.a(this,"emitters");chunkHCOFKHVV_cjs.a(this,"stickEmitter");chunkHCOFKHVV_cjs.a(this,"cursorEmitter");chunkHCOFKHVV_cjs.a(this,"gesture");chunkHCOFKHVV_cjs.a(this,"ticker");let o=i.targetStageId,c=i.mapping||{};this.emitters={up:new m(o,c.up),down:new m(o,c.down),left:new m(o,c.left),right:new m(o,c.right)},this.stickEmitter=new m(o,c.stick),this.cursorEmitter=new m(o,"Mouse"),this.gesture=new C({onTap:async()=>{this.setState({isPressed:true}),await this.stickEmitter.tap(),this.setState({isPressed:false});},onDoubleTapHoldStart:()=>{this.setState({isPressed:true}),this.stickEmitter.press();},onDoubleTapHoldEnd:()=>{this.setState({isPressed:false}),this.stickEmitter.release(false);}}),this.ticker=chunkNB4FTDOP_cjs.f(()=>{this.handleCursorTick();});}get activePointerId(){return this.state.pointerId}onPointerDown(t){this.setState({isActive:true,pointerId:t.pointerId,vector:{x:0,y:0}}),this.gesture.onPointerDown(t.clientX,t.clientY),this.processInput(t,true);}onPointerMove(t){!this.state.isActive||t.pointerId!==this.state.pointerId||(this.gesture.onPointerMove(t.clientX,t.clientY),this.config.cursorMode&&this.ticker.start(),this.processInput(t));}onPointerUp(t){!this.state.isActive||t.pointerId!==this.state.pointerId||(this.gesture.onPointerUp(),this.handleRelease());}onPointerCancel(){this.handleRelease();}handleRelease(){this.setState({isActive:false,pointerId:null,vector:{x:0,y:0}}),this.ticker.stop(),Object.values(this.emitters).forEach(t=>t?.reset());}processInput(t,i=false){if(!this.state.isActive)return;let e=this.rect;if(!e)return;let o=e.left+e.width/2,c=e.top+e.height/2,d=e.width/2,h=e.height/2,f=(t.clientX-o)/d,r=(t.clientY-c)/h;if(i&&(f!=chunk52YF3VHH_cjs.q(f,-1,1)||r!=chunk52YF3VHH_cjs.q(r,-1,1))){this.setState({vector:{x:0,y:0}}),this.markRectDirty();return}let u=chunk52YF3VHH_cjs.H({x:f,y:r},1,this.config.threshold??Y);chunk52YF3VHH_cjs.F(u,this.state.vector,U)||(this.setState({vector:u}),this.handleDigitalKeys(u));}handleCursorTick(){let{vector:t,isActive:i}=this.state;if(!i||!this.config.cursorMode||chunk52YF3VHH_cjs.F(t,{x:0,y:0},U)){this.ticker.stop();return}let e=this.config.cursorSensitivity??1,o={x:t.x*Math.abs(t.x)*e,y:t.y*Math.abs(t.y)*e};(Math.abs(o.x)>0||Math.abs(o.y)>0)&&this.cursorEmitter.move({delta:o});}handleDigitalKeys(t){let i=this.config.threshold??Y;t.y<-i?(this.emitters.up.press(),this.emitters.down.release()):t.y>i?(this.emitters.down.press(),this.emitters.up.release()):(this.emitters.up.release(),this.emitters.down.release()),t.x<-i?(this.emitters.left.press(),this.emitters.right.release()):t.x>i?(this.emitters.right.press(),this.emitters.left.release()):(this.emitters.left.release(),this.emitters.right.release());}reset(){this.setState(at),this.gesture.reset(),this.handleRelease(),this.stickEmitter.reset(),this.cursorEmitter.reset();}updateConfig(t){super.updateConfig(t);let i=this.config.targetStageId,e=this.config.mapping||{};this.emitters.up.update(i,e.up),this.emitters.down.update(i,e.down),this.emitters.left.update(i,e.left),this.emitters.right.update(i,e.right),this.stickEmitter.update(i,e.stick),this.cursorEmitter.update(i);}triggerDown(){this.state.isPressed||(this.setState({isActive:true,isPressed:true}),this.stickEmitter.press());}triggerUp(){this.state.isPressed&&(this.setState({isActive:false,isPressed:false}),this.stickEmitter.release(true));}triggerVector(t,i){let e=this.config.threshold??Y;if(Math.hypot(t,i)<e){this.state.isActive&&this.handleRelease();return}this.state.isActive||this.setState({isActive:true});let c=chunk52YF3VHH_cjs.r(this.state.vector.x,t,ct),d=chunk52YF3VHH_cjs.r(this.state.vector.y,i,ct),h={x:c,y:d};chunk52YF3VHH_cjs.F(h,this.state.vector,U)||(this.setState({vector:h}),this.handleDigitalKeys(h)),this.config.cursorMode&&this.ticker.start();}};var ut={isHighlighted:false},F=class extends g{constructor(s,t,i){super(s,i||chunk52YF3VHH_cjs.b.ROOT_LAYER,t,ut);}reset(){}};var ht={position:{x:50,y:50},isVisible:false,isPointerDown:false,isFocusReturning:false},E=1,_=class extends g{constructor(t,i,e){super(t,e||chunk52YF3VHH_cjs.b.TARGET_ZONE,i,ht);chunkHCOFKHVV_cjs.a(this,"hideTimer",null);chunkHCOFKHVV_cjs.a(this,"focusFeedbackTimer",null);chunkHCOFKHVV_cjs.a(this,"throttledMoveExecution");chunkHCOFKHVV_cjs.a(this,"delegates",{dispatchKeyboardEvent:()=>{},dispatchPointerEventAtPos:()=>{},reclaimFocusAtPos:()=>{}});this.throttledMoveExecution=chunkNB4FTDOP_cjs.e(o=>{this.executeMouseAction(chunk52YF3VHH_cjs.c.POINTERMOVE,o);});}bindDelegate(t,i){Object.prototype.hasOwnProperty.call(this.delegates,t)?this.delegates[t]=i:undefined?.DEV&&console.warn(`[OmniPad-Core] TargetZone attempted to bind unknown delegate: ${t}`);}get activePointerId(){return null}onPointerDown(t){this.processPhysicalEvent(t,chunk52YF3VHH_cjs.c.MOUSEDOWN);}onPointerMove(t){this.processPhysicalEvent(t,chunk52YF3VHH_cjs.c.MOUSEMOVE);}onPointerUp(t){this.processPhysicalEvent(t,chunk52YF3VHH_cjs.c.MOUSEUP),this.processPhysicalEvent(t,chunk52YF3VHH_cjs.c.CLICK);}onPointerCancel(t){this.processPhysicalEvent(t,chunk52YF3VHH_cjs.c.MOUSEUP);}processPhysicalEvent(t,i){let e=this.rect;if(!e)return;let o={x:chunk52YF3VHH_cjs.B(t.clientX-e.left,e.width),y:chunk52YF3VHH_cjs.B(t.clientY-e.top,e.height)};this.handleSignal({targetStageId:this.uid,type:i,payload:{point:o,button:t.button}});}handleSignal(t){let{type:i,payload:e}=t;switch(this.ensureFocus(),i){case chunk52YF3VHH_cjs.c.KEYDOWN:case chunk52YF3VHH_cjs.c.KEYUP:this.delegates.dispatchKeyboardEvent?.(i,e);break;case chunk52YF3VHH_cjs.c.MOUSEMOVE:e.point?this.updateCursorPosition(e.point):e.delta&&this.updateCursorPositionByDelta(e.delta),this.config.cursorEnabled&&this.showCursor(),this.throttledMoveExecution(e);break;case chunk52YF3VHH_cjs.c.MOUSEDOWN:case chunk52YF3VHH_cjs.c.MOUSEUP:case chunk52YF3VHH_cjs.c.CLICK:e.point&&this.updateCursorPosition(e.point),this.config.cursorEnabled&&this.showCursor(),this.executeMouseAction(i.startsWith(chunk52YF3VHH_cjs.c.MOUSE)?i.replace(chunk52YF3VHH_cjs.c.MOUSE,chunk52YF3VHH_cjs.c.POINTER):i,e);break}}executeMouseAction(t,i){let e=this.rect;if(!e)return;t===chunk52YF3VHH_cjs.c.POINTERDOWN&&this.setState({isPointerDown:true}),t===chunk52YF3VHH_cjs.c.POINTERUP&&this.setState({isPointerDown:false});let o=i.point||this.state.position,c=chunk52YF3VHH_cjs.q(e.left+chunk52YF3VHH_cjs.A(o.x,e.width),e.left+E,e.left+e.width-E),d=chunk52YF3VHH_cjs.q(e.top+chunk52YF3VHH_cjs.A(o.y,e.height),e.top+E,e.top+e.height-E);this.delegates.dispatchPointerEventAtPos?.(t,c,d,{button:i.button??0,buttons:this.state.isPointerDown?1:0,pressure:this.state.isPointerDown?.5:0});}ensureFocus(){let t=this.rect;if(!t)return;let i=chunk52YF3VHH_cjs.q(t.left+chunk52YF3VHH_cjs.A(this.state.position.x,t.width),t.left+E,t.left+t.width-E),e=chunk52YF3VHH_cjs.q(t.top+chunk52YF3VHH_cjs.A(this.state.position.y,t.height),t.top+E,t.top+t.height-E);this.delegates.reclaimFocusAtPos?.(i,e,()=>this.triggerFocusFeedback());}triggerFocusFeedback(){this.setState({isFocusReturning:true}),this.focusFeedbackTimer&&clearTimeout(this.focusFeedbackTimer),this.focusFeedbackTimer=setTimeout(()=>this.setState({isFocusReturning:false}),500);}updateCursorPosition(t){chunk52YF3VHH_cjs.F(t,this.state.position)||this.setState({position:{...t}});}updateCursorPositionByDelta(t){if(chunk52YF3VHH_cjs.F(t,{x:0,y:0}))return;let i=this.rect;if(!i)return;let e=chunk52YF3VHH_cjs.B(t.x,i.width),o=chunk52YF3VHH_cjs.B(t.y,i.height);this.updateCursorPosition({x:chunk52YF3VHH_cjs.q(this.state.position.x+e,0,100),y:chunk52YF3VHH_cjs.q(this.state.position.y+o,0,100)});}showCursor(){this.setState({isVisible:true}),this.hideTimer&&clearTimeout(this.hideTimer),this.config.cursorAutoDelay&&this.config.cursorAutoDelay>0&&(this.hideTimer=setTimeout(()=>this.setState({isVisible:false}),this.config.cursorAutoDelay));}reset(){this.state.isPointerDown&&this.executeMouseAction(chunk52YF3VHH_cjs.c.POINTERUP,{}),this.hideTimer&&clearTimeout(this.hideTimer),this.focusFeedbackTimer&&clearTimeout(this.focusFeedbackTimer),this.setState({isVisible:false,isPointerDown:false,isFocusReturning:false});}};var pt={isActive:false,isPressed:false,pointerId:null,value:0},B=class extends g{constructor(t,i,e){super(t,e||chunk52YF3VHH_cjs.b.TRACKPAD,i,pt);chunkHCOFKHVV_cjs.a(this,"lastPointerPos",{x:0,y:0});chunkHCOFKHVV_cjs.a(this,"gesture");chunkHCOFKHVV_cjs.a(this,"emitter");let o=i.mapping||"Mouse";this.emitter=new m(i.targetStageId,o),this.gesture=new C({onTap:()=>{this.setState({isPressed:true}),this.emitter.tap();},onDoubleTapHoldStart:()=>{this.setState({isPressed:true}),this.emitter.press();},onDoubleTapHoldEnd:()=>{this.setState({isPressed:false}),this.emitter.release(false);}});}get activePointerId(){return this.state.pointerId}onPointerDown(t){this.lastPointerPos={x:t.clientX,y:t.clientY},this.gesture.onPointerDown(t.clientX,t.clientY),this.setState({isActive:true,pointerId:t.pointerId});}onPointerMove(t){!this.state.isActive||t.pointerId!==this.state.pointerId||(this.gesture.onPointerMove(t.clientX,t.clientY),this.processInput(t));}processInput(t){if(!this.state.isActive)return;let i=t.clientX-this.lastPointerPos.x,e=t.clientY-this.lastPointerPos.y,o=this.rect;if(!o)return;let c=i/o.width*100*(this.config.sensitivity??1),d=e/o.height*100*(this.config.sensitivity??1),h={x:c,y:d};chunk52YF3VHH_cjs.F(h,{x:0,y:0})||this.emitter.move({delta:h}),this.lastPointerPos={x:t.clientX,y:t.clientY};}onPointerUp(t){!this.state.isActive||t.pointerId!==this.state.pointerId||(this.gesture.onPointerUp(),this.handleRelease());}onPointerCancel(){this.handleRelease();}reset(){this.gesture.reset(),this.emitter.reset(),this.handleRelease();}updateConfig(t){super.updateConfig(t),this.emitter.update(this.config.targetStageId,this.config.mapping);}handleRelease(){this.setState(pt);}};var di={ActionTypes:chunk52YF3VHH_cjs.c,Context:chunk52YF3VHH_cjs.e,Keys:chunk52YF3VHH_cjs.a,Types:chunk52YF3VHH_cjs.b};Object.defineProperty(exports,"Registry",{enumerable:true,get:function(){return chunkNB4FTDOP_cjs.b}});Object.defineProperty(exports,"StickyController",{enumerable:true,get:function(){return chunkNB4FTDOP_cjs.d}});Object.defineProperty(exports,"StickyProvider",{enumerable:true,get:function(){return chunkNB4FTDOP_cjs.c}});Object.defineProperty(exports,"setGlobalSignalHandler",{enumerable:true,get:function(){return chunkNB4FTDOP_cjs.a}});Object.defineProperty(exports,"ACTION_TYPES",{enumerable:true,get:function(){return chunk52YF3VHH_cjs.c}});Object.defineProperty(exports,"CMP_TYPES",{enumerable:true,get:function(){return chunk52YF3VHH_cjs.b}});Object.defineProperty(exports,"CONTEXT",{enumerable:true,get:function(){return chunk52YF3VHH_cjs.e}});Object.defineProperty(exports,"KEYS",{enumerable:true,get:function(){return chunk52YF3VHH_cjs.a}});Object.defineProperty(exports,"VALID_UNITS",{enumerable:true,get:function(){return chunk52YF3VHH_cjs.d}});Object.defineProperty(exports,"OMNIPAD_IPC_SIGNATURE",{enumerable:true,get:function(){return chunkHCOFKHVV_cjs.b}});exports.BaseEntity=g;exports.ButtonCore=O;exports.DPadCore=R;exports.InputZoneCore=N;exports.JoystickCore=H;exports.OmniPad=di;exports.RootLayerCore=F;exports.TargetZoneCore=_;exports.TrackpadCore=B;exports.bindEntityDelegates=Tt;exports.exportProfile=Yt;exports.filterNotDynamicChildren=It;exports.getOverrideProps=St;exports.mergeWidgetConfig=Ct;exports.parseProfileJson=Rt;exports.parseProfileTrees=Nt;exports.resolveDynamicWidget=At;exports.setupSpatialLogic=Et;exports.validateWidgetNode=Dt;