@omnipad/vue 0.4.5 → 0.5.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.
@@ -1 +1 @@
1
- (function(w,l){typeof exports=="object"&&typeof module<"u"?l(exports,require("@omnipad/core"),require("@omnipad/core/utils"),require("vue")):typeof define=="function"&&define.amd?define(["exports","@omnipad/core","@omnipad/core/utils","vue"],l):(w=typeof globalThis<"u"?globalThis:w||self,l(w.OmnipadVue={},w.OmniPadCore,w.OmniPadCoreUtils,w.Vue))})(this,(function(w,l,b,e){"use strict";const v={};function D(t,n){v[t]=n}function z(t){const n=v[t];return n||e.defineComponent({render:()=>e.h("div",{style:"color:red"},`[Unknown: ${t}]`)})}function M(t){return!t||!v[t]?null:v[t]}function J(t){return t?!!v[t]:!1}function I(t,n,f={},i){const o=t(),s=e.shallowRef(),k=e.ref(),r=e.ref(),d=e.computed(()=>r.value?.layout),a=e.ref(null),u=P=>{s.value&&"bindDelegate"in s.value&&Object.entries(P).forEach(([p,C])=>{s.value.bindDelegate(p,C)})};let S={...n.value};e.watch(n,P=>{if(!s.value)return;const p=b.getObjectDiff(S,P);Object.keys(p).length>0&&s.value.updateConfig(p),S={...n.value}},{deep:!0}),e.onMounted(()=>{s.value=o,l.Registry.getInstance().register(o),"subscribeState"in o&&o.subscribeState(p=>k.value=p),"subscribeConfig"in o&&o.subscribeConfig(p=>r.value=p),i&&u(i);let P=null;if(a.value&&(a.value instanceof Element?P=a.value:a.value.$el instanceof Element&&(P=a.value.$el)),P instanceof Element){const p=l.ElementObserver.getInstance();if("bindRectProvider"in o){const C=b.createCachedProvider(()=>P.getBoundingClientRect());o.bindRectProvider(C.get,C.markDirty),p.observeResize(o.uid,P,()=>{o.markRectDirty()})}p.observeIntersect(o.uid,P,C=>{C||o.reset()})}l.WindowManager.getInstance().init()}),e.onUnmounted(()=>{l.ElementObserver.getInstance().disconnect(o.uid),s.value&&s.value.destroy()});const E="onPointerDown"in o?b.createPointerBridge(o,f):{};return{core:e.readonly(s),state:e.readonly(k),domEvents:E,effectiveConfig:e.readonly(r),effectiveLayout:d,elementRef:a,bindDelegates:u}}const X={class:"omnipad-virtual-layer-base omnipad-prevent"},G=e.defineComponent({__name:"VirtualLayerBase",props:{nodes:{}},setup(t){const n=t,f=e.computed(()=>(n.nodes||[]).map(i=>{let o=M(i.type);return!o&&i.config?.baseType&&(o=M(i.config.baseType)),o||(o=z(i.type)),{node:i,component:o}}));return(i,o)=>(e.openBlock(),e.createElementBlock("div",X,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f.value,s=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(s.component),{key:s.node.uid,"tree-node":s.node},null,8,["tree-node"]))),128)),e.renderSlot(i.$slots,"default",{},void 0,!0)]))}}),B=(t,n)=>{const f=t.__vccOpts||t;for(const[i,o]of n)f[i]=o;return f},L=B(G,[["__scopeId","data-v-d67cc501"]]),H=["treeNode","widgetId","parentId"];function V(t,n,f={},i=[]){const o=n.treeNode,s=o&&o.config?.baseType===t||o?.type===t?o:void 0;o&&!s&&console.warn(`[OmniPad-Validation] Type mismatch! Component expected "${t}", but received "${o.type}". Config ignored.`);const k=e.inject(l.CONTEXT.PARENT_ID_KEY,e.ref(void 0)),r=e.computed(()=>n.parentId||s?.config?.parentId||k.value),d=n.widgetId||s?.uid||b.generateUID(t);e.provide(l.CONTEXT.PARENT_ID_KEY,d);const a=new Set([...H,...i]),u=s?.config||{},S=b.getBusinessProps(n,a),E={...f,...u,...S,id:d,baseType:t,parentId:r.value,layout:{...f.layout||{},...u.layout||{},...S.layout||{}}},P=e.computed(()=>{const p=b.getBusinessProps(n,a);return{...p,parentId:r.value,layout:p.layout||void 0}});return{uid:d,initialConfig:E,reactiveConfig:P}}const ee=["id"],U=B(e.defineComponent({__name:"InputZone",props:{treeNode:{},widgetId:{},layout:{},preventFocusLoss:{}},setup(t){const n=t,f=e.useSlots(),i=e.ref(null),{uid:o,initialConfig:s,reactiveConfig:k}=V(l.CMP_TYPES.INPUT_ZONE,n),{core:r,state:d,domEvents:a,effectiveConfig:u,effectiveLayout:S,elementRef:E,bindDelegates:P}=I(()=>new l.InputZoneCore(o,s,n.treeNode?.type),k,{requireDirectHit:!0}),p=e.computed(()=>{const y=n.treeNode?.config?.dynamicWidgetId;return n.treeNode?.children?.filter($=>$.uid!==y)||[]}),C=e.computed(()=>{const $=(f.dynamicWidget?.()||[]).filter(x=>!(x.type===Comment||x.type===Text)),N=n.treeNode?.children?.find(x=>x.uid===n.treeNode?.config?.dynamicWidgetId),A=$.length>0;return $.length>1&&console.error(`[OmniPad-Validation] InputZone ${o} has multiple dynamic widgets in slot. Only the first one will be activated.`),A&&N&&console.warn(`[OmniPad-Validation] InputZone ${o} has both Slot and Config dynamic widgets. Config ignored.`),{nodeToRender:A?$[0]:N||null,isFromSlot:A}}),h=e.computed(()=>{const y=C.value.nodeToRender;return z(y.config?.baseType||y.type)});e.watch(i,y=>{e.nextTick(()=>{y&&y?.uid&&(r.value?.updateConfig({dynamicWidgetId:y.uid}),P({dynamicWidgetPointerDown:$=>{y.markRectDirty?.(),y.onPointerDown?.($)},dynamicWidgetPointerMove:y.onPointerMove,dynamicWidgetPointerUp:y.onPointerUp,dynamicWidgetPointerCancel:y.onPointerCancel}))})},{immediate:!0});const _=e.computed(()=>S.value?b.resolveLayoutStyle(S.value):{}),R=b.supportsContainerQueries(),m=e.computed(()=>{if(!d.value)return{display:"none"};if(!d.value?.isDynamicActive)return{visibility:"hidden",opacity:0};let y,$;const N=d?.value?.dynamicPosition;if(R)y=`${N.x}cqw`,$=`${N.y}cqh`;else{const A=r?.value?.rect;y=`${b.remap(N?.x||0,0,100,0,A?.width||0)}px`,$=`${b.remap(N?.y||0,0,100,0,A?.height||0)}px`}return{zIndex:100,"--dynamic-widget-mount-x":y,"--dynamic-widget-mount-y":$,visibility:"visible",opacity:1,pointerEvents:"auto"}}),c=y=>a?.onPointerDown?.(y),T=y=>a?.onPointerMove?.(y),g=y=>a?.onPointerUp?.(y),W=y=>a?.onPointerCancel?.(y);return(y,$)=>(e.openBlock(),e.createElementBlock("div",{id:e.unref(o),ref_key:"elementRef",ref:E,class:e.normalizeClass(["omnipad-input-zone omnipad-prevent",e.unref(u)?.cssClasses]),style:e.normalizeStyle(_.value)},[e.createVNode(L,{nodes:p.value},{default:e.withCtx(()=>[e.renderSlot(y.$slots,"default",{},void 0,!0)]),_:3},8,["nodes"]),C.value.nodeToRender||e.unref(r)?.isInterceptorRequired?(e.openBlock(),e.createElementBlock("div",{key:0,class:"omnipad-input-zone-trigger omnipad-prevent",onPointerdown:c,onPointermove:T,onPointerup:g,onPointercancel:W,onLostpointercapture:W},[e.createElementVNode("div",{class:"dynamic-widget-mount",style:e.normalizeStyle(m.value)},[C.value.isFromSlot?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(C.value.nodeToRender),{key:0,ref:N=>i.value=N},null,512)):C.value.nodeToRender?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(h.value),{key:1,ref:N=>i.value=N,"tree-node":C.value.nodeToRender},null,8,["tree-node"])):e.createCommentVNode("",!0)],4)],32)):e.createCommentVNode("",!0)],14,ee))}}),[["__scopeId","data-v-8b58e8ce"]]),te=["id"],Y=B(e.defineComponent({__name:"RootLayer",props:{treeNode:{},widgetId:{},layout:{}},setup(t){const n=t,{uid:f,initialConfig:i,reactiveConfig:o}=V(l.CMP_TYPES.ROOT_LAYER,n),{effectiveConfig:s,effectiveLayout:k,elementRef:r}=I(()=>new l.RootLayerCore(f,i,n.treeNode?.type),o),d=e.computed(()=>k.value?b.resolveLayoutStyle(k.value):{});return(a,u)=>(e.openBlock(),e.createElementBlock("div",{id:e.unref(f),ref_key:"elementRef",ref:r,class:e.normalizeClass(["omnipad-root-layer omnipad-prevent",e.unref(s)?.cssClasses]),style:e.normalizeStyle(d.value)},[e.createVNode(L,{nodes:t.treeNode?.children||[]},{default:e.withCtx(()=>[e.renderSlot(a.$slots,"default",{},void 0,!0)]),_:3},8,["nodes"])],14,te))}}),[["__scopeId","data-v-2e1f7fa1"]]),oe=["id"],ne={key:0,class:"omnipad-default-focus-border-feedback"},Z=B(e.defineComponent({__name:"TargetZone",props:{treeNode:{},widgetId:{},cursorEnabled:{type:Boolean},cursorAutoDelay:{},layout:{}},setup(t){const n=t,f={cursorAutoDelay:2500},{uid:i,initialConfig:o,reactiveConfig:s}=V(l.CMP_TYPES.TARGET_ZONE,n,f),{core:k,state:r,domEvents:d,effectiveConfig:a,effectiveLayout:u,elementRef:S}=I(()=>new l.TargetZoneCore(i,o,n.treeNode?.type),s,{},{dispatchKeyboardEvent:b.dispatchKeyboardEvent,dispatchPointerEventAtPos:b.dispatchPointerEventAtPos,reclaimFocusAtPos:b.reclaimFocusAtPos}),E=e.computed(()=>u.value?b.resolveLayoutStyle(u.value):{}),P=b.supportsContainerQueries(),p=e.computed(()=>{if(!r.value)return{display:"none"};let m,c;const T=r?.value?.position;if(P)m=`${T.x}cqw`,c=`${T.y}cqh`;else{const g=k?.value?.rect;m=`${b.remap(T?.x||0,0,100,0,g?.width||0)}px`,c=`${b.remap(T?.y||0,0,100,0,g?.height||0)}px`}return{"--omnipad-virtual-cursor-x":m,"--omnipad-virtual-cursor-y":c,opacity:r.value.isVisible?1:0}}),C=m=>d?.onPointerDown?.(m),h=m=>d?.onPointerMove?.(m),_=m=>d?.onPointerUp?.(m),R=m=>d?.onPointerCancel?.(m);return(m,c)=>(e.openBlock(),e.createElementBlock("div",{id:e.unref(i),ref_key:"elementRef",ref:S,class:e.normalizeClass(["omnipad-target-zone omnipad-prevent",e.unref(a)?.cssClasses]),style:e.normalizeStyle(E.value),onPointerdown:C,onPointermove:h,onPointerup:_,onPointercancel:R,onLostpointercapture:R},[e.renderSlot(m.$slots,"focus-feedback",{state:e.unref(r),isReturning:e.unref(r)?.isFocusReturning,cursorPos:e.unref(r)?.position},()=>[e.createVNode(e.Transition,{name:"omnipad-default-focus-fade"},{default:e.withCtx(()=>[e.unref(r)?.isFocusReturning?(e.openBlock(),e.createElementBlock("div",ne)):e.createCommentVNode("",!0)]),_:1})],!0),e.unref(a)?.cursorEnabled?(e.openBlock(),e.createElementBlock("div",{key:0,class:"omnipad-virtual-cursor",style:e.normalizeStyle(p.value)},[e.renderSlot(m.$slots,"cursor",{state:e.unref(r),isDown:e.unref(r)?.isPointerDown,isReturning:e.unref(r)?.isFocusReturning,cursorPos:e.unref(r)?.position},()=>[e.createElementVNode("div",{class:e.normalizeClass(["omnipad-default-cursor-dot",{"is-down":e.unref(r)?.isPointerDown}])},null,2)],!0)],4)):e.createCommentVNode("",!0),e.unref(a)?.cursorEnabled?(e.openBlock(),e.createElementBlock("div",{key:1,class:"omnipad-virtual-cursor",style:e.normalizeStyle(p.value)},[e.renderSlot(m.$slots,"with-cursor",{state:e.unref(r),isDown:e.unref(r)?.isPointerDown,isReturning:e.unref(r)?.isFocusReturning,cursorPos:e.unref(r)?.position},void 0,!0)],4)):e.createCommentVNode("",!0),e.renderSlot(m.$slots,"default",{state:e.unref(r),isDown:e.unref(r)?.isPointerDown,isReturning:e.unref(r)?.isFocusReturning,cursorPos:e.unref(r)?.position},void 0,!0)],46,oe))}}),[["__scopeId","data-v-ef213f3f"]]),re={class:"omnipad-button-content-layer"},ie={key:0,class:"omnipad-default-button-label"},O=B(e.defineComponent({__name:"VirtualButtonBase",props:{layout:{},isActive:{type:Boolean},label:{}},setup(t){const n=t,f=e.computed(()=>n.layout?b.resolveLayoutStyle(n.layout):{});return(i,o)=>(e.openBlock(),e.createElementBlock("div",{class:"omnipad-button-base omnipad-prevent",style:e.normalizeStyle(f.value),tabindex:"-1"},[e.renderSlot(i.$slots,"base",{isActive:t.isActive,label:t.label},()=>[e.createElementVNode("div",{class:e.normalizeClass(["omnipad-default-button-base",{"is-active":t.isActive}])},null,2)],!0),e.createElementVNode("div",re,[e.renderSlot(i.$slots,"default",{isActive:t.isActive,label:t.label},()=>[t.label?(e.openBlock(),e.createElementBlock("span",ie,e.toDisplayString(t.label),1)):e.createCommentVNode("",!0)],!0)])],4))}}),[["__scopeId","data-v-f6a6e082"]]),K=e.defineComponent({__name:"VirtualButton",props:{treeNode:{},widgetId:{},label:{},targetStageId:{},mapping:{},layout:{}},setup(t,{expose:n}){const f=t,i={label:"BTN"},{uid:o,initialConfig:s,reactiveConfig:k}=V(l.CMP_TYPES.BUTTON,f,i),{core:r,state:d,domEvents:a,effectiveConfig:u,effectiveLayout:S,elementRef:E}=I(()=>new l.ButtonCore(o,s,f.treeNode?.type),k),P=_=>a?.onPointerDown?.(_),p=_=>a?.onPointerMove?.(_),C=_=>a?.onPointerUp?.(_),h=_=>a?.onPointerCancel?.(_);return n({uid:o,onPointerDown:P,onPointerMove:p,onPointerUp:C,onPointerCancel:h,markRectDirty:()=>r.value?.markRectDirty}),(_,R)=>(e.openBlock(),e.createBlock(O,{id:e.unref(o),ref_key:"elementRef",ref:E,class:e.normalizeClass(["omnipad-button omnipad-prevent",e.unref(u)?.cssClasses]),layout:e.unref(S),label:e.unref(u)?.label,"is-active":e.unref(d)?.isPressed,onPointerdown:P,onPointerup:C,onPointercancel:h,onLostpointercapture:h},{base:e.withCtx(m=>[e.renderSlot(_.$slots,"base",e.normalizeProps(e.guardReactiveProps(m)))]),default:e.withCtx(m=>[e.renderSlot(_.$slots,"default",e.normalizeProps(e.guardReactiveProps(m)))]),_:3},8,["id","class","layout","label","is-active"]))}}),ae={class:"omnipad-axis-bg"},se={class:"omnipad-axis-content-layer"},F=B(e.defineComponent({__name:"VirtualAxisBase",props:{layout:{},isActive:{type:Boolean},vector:{},showStick:{type:Boolean},baseRadius:{}},setup(t){const n=t,f=e.computed(()=>n.layout?b.resolveLayoutStyle(n.layout):{}),i=b.supportsContainerQueries(),o=e.computed(()=>{const s=n.vector?.x||0,k=n.vector?.y||0,r=n.baseRadius?.x||0,d=n.baseRadius?.y||0,a=i?`${s*50}cqw`:`${s*r}px`,u=i?`${k*50}cqh`:`${k*d}px`,S=i?"100cqw":`${r*2}px`,E=i?"100cqh":`${d*2}px`;return{"--omnipad-axis-stick-container-x":a,"--omnipad-axis-stick-container-y":u,"--omnipad-axis-stick-width":S,"--omnipad-axis-stick-height":E,transition:n.isActive?"none":"transform 0.1s ease-out"}});return(s,k)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["omnipad-axis-base omnipad-prevent",{"is-active":t.isActive}]),style:e.normalizeStyle(f.value),tabindex:"-1"},[e.createElementVNode("div",ae,[e.renderSlot(s.$slots,"base",{isActive:t.isActive,vector:t.vector},void 0,!0)]),t.showStick?(e.openBlock(),e.createElementBlock("div",{key:0,class:"omnipad-axis-stick-container",style:e.normalizeStyle(o.value)},[e.renderSlot(s.$slots,"stick",{isActive:t.isActive,vector:t.vector},()=>[e.createElementVNode("div",{class:e.normalizeClass(["omnipad-default-axis-stick",{"is-active":t.isActive}])},null,2)],!0)],4)):e.createCommentVNode("",!0),e.createElementVNode("div",se,[e.renderSlot(s.$slots,"default",{isActive:t.isActive,vector:t.vector},void 0,!0)])],6))}}),[["__scopeId","data-v-95bb429e"]]),ce={class:"omnipad-dpad-cross-bg"},Q=B(e.defineComponent({__name:"VirtualDPad",props:{treeNode:{},widgetId:{},targetStageId:{},mapping:{},threshold:{},showStick:{},layout:{}},setup(t,{expose:n}){const f=t,i={showStick:!1,threshold:.3},{uid:o,initialConfig:s,reactiveConfig:k}=V(l.CMP_TYPES.D_PAD,f,i),{core:r,state:d,domEvents:a,effectiveConfig:u,effectiveLayout:S,elementRef:E}=I(()=>new l.DPadCore(o,s,f.treeNode?.type),k),P=b.supportsContainerQueries(),p=e.ref({x:0,y:0}),C=e.watchEffect(()=>{const c=r.value?.rect;c&&(p.value={x:c.width/2,y:c.height/2})});P&&C();const h=c=>a?.onPointerDown?.(c),_=c=>a?.onPointerMove?.(c),R=c=>a?.onPointerUp?.(c),m=c=>a?.onPointerCancel?.(c);return n({uid:o,onPointerDown:h,onPointerMove:_,onPointerUp:R,onPointerCancel:m,markRectDirty:()=>r.value?.markRectDirty()}),(c,T)=>(e.openBlock(),e.createBlock(F,{ref_key:"elementRef",ref:E,class:e.normalizeClass(["omnipad-dpad omnipad-prevent",e.unref(u)?.cssClasses]),layout:e.unref(S),"is-active":e.unref(d)?.isActive,vector:e.unref(d)?.vector,"show-stick":e.unref(u)?.showStick,"base-radius":p.value,onPointerdown:h,onPointermove:_,onPointerup:R,onPointercancel:m,onLostpointercapture:m},{base:e.withCtx(g=>[e.renderSlot(c.$slots,"base",e.normalizeProps(e.guardReactiveProps(g)),()=>[e.createElementVNode("div",ce,[e.createElementVNode("div",{class:e.normalizeClass(["dpad-arm top",{on:g.vector&&g.vector.y<-e.unref(u)?.threshold}])},null,2),e.createElementVNode("div",{class:e.normalizeClass(["dpad-arm bottom",{on:g.vector&&g.vector.y>e.unref(u)?.threshold}])},null,2),e.createElementVNode("div",{class:e.normalizeClass(["dpad-arm left",{on:g.vector&&g.vector.x<-e.unref(u)?.threshold}])},null,2),e.createElementVNode("div",{class:e.normalizeClass(["dpad-arm right",{on:g.vector&&g.vector.x>e.unref(u)?.threshold}])},null,2),T[0]||(T[0]=e.createElementVNode("div",{class:"dpad-center"},null,-1))])],!0)]),stick:e.withCtx(g=>[e.renderSlot(c.$slots,"stick",e.normalizeProps(e.guardReactiveProps(g)),void 0,!0)]),default:e.withCtx(g=>[e.renderSlot(c.$slots,"default",e.normalizeProps(e.guardReactiveProps(g)),void 0,!0)]),_:3},8,["class","layout","is-active","vector","show-stick","base-radius"]))}}),[["__scopeId","data-v-1bf11a90"]]),q=B(e.defineComponent({__name:"VirtualTrackpad",props:{treeNode:{},widgetId:{},label:{},sensitivity:{},targetStageId:{},mapping:{},layout:{}},setup(t,{expose:n}){const f=t,{uid:i,initialConfig:o,reactiveConfig:s}=V(l.CMP_TYPES.TRACKPAD,f,{label:"TRACKPAD",sensitivity:1}),{core:k,state:r,domEvents:d,effectiveConfig:a,effectiveLayout:u,elementRef:S}=I(()=>new l.TrackpadCore(i,o,f.treeNode?.type),s),E=h=>d?.onPointerDown?.(h),P=h=>d?.onPointerMove?.(h),p=h=>d?.onPointerUp?.(h),C=h=>d?.onPointerCancel?.(h);return n({uid:i,onPointerDown:E,onPointerMove:P,onPointerUp:p,onPointerCancel:C,markRectDirty:()=>k.value?.markRectDirty}),(h,_)=>(e.openBlock(),e.createBlock(O,{id:e.unref(i),ref_key:"elementRef",ref:S,class:e.normalizeClass(["omnipad-trackpad omnipad-prevent",e.unref(a)?.cssClasses]),layout:e.unref(u),label:e.unref(a)?.label,"is-active":e.unref(r)?.isPressed,onPointerdown:E,onPointermove:P,onPointerup:p,onPointercancel:C,onLostpointercapture:C},{base:e.withCtx(R=>[e.renderSlot(h.$slots,"base",e.normalizeProps(e.guardReactiveProps(R)),void 0,!0)]),default:e.withCtx(R=>[e.renderSlot(h.$slots,"default",e.normalizeProps(e.guardReactiveProps(R)),void 0,!0)]),_:3},8,["id","class","layout","label","is-active"]))}}),[["__scopeId","data-v-e9f8b8d7"]]),j=B(e.defineComponent({__name:"VirtualJoystick",props:{treeNode:{},widgetId:{},label:{},targetStageId:{},threshold:{},cursorMode:{},cursorSensitivity:{},mapping:{},layout:{}},setup(t,{expose:n}){const f=t,i={label:"PUSH",threshold:.2,cursorMode:!1,cursorSensitivity:1},{uid:o,initialConfig:s,reactiveConfig:k}=V(l.CMP_TYPES.JOYSTICK,f,i),{core:r,state:d,domEvents:a,effectiveConfig:u,effectiveLayout:S,elementRef:E}=I(()=>new l.JoystickCore(o,s,f.treeNode?.type),k),P=b.supportsContainerQueries(),p=e.ref({x:0,y:0}),C=e.watchEffect(()=>{const c=r.value?.rect;c&&(p.value={x:c.width/2,y:c.height/2})});P&&C();const h=c=>a?.onPointerDown?.(c),_=c=>a?.onPointerMove?.(c),R=c=>a?.onPointerUp?.(c),m=c=>a?.onPointerCancel?.(c);return n({uid:o,onPointerDown:h,onPointerMove:_,onPointerUp:R,onPointerCancel:m,markRectDirty:()=>r.value?.markRectDirty}),(c,T)=>(e.openBlock(),e.createBlock(F,{ref_key:"elementRef",ref:E,class:e.normalizeClass(["omnipad-joystick omnipad-prevent",e.unref(u)?.cssClasses]),layout:e.unref(S),"is-active":e.unref(d)?.isActive,vector:e.unref(d)?.vector,"show-stick":"","base-radius":p.value,onPointerdown:h,onPointermove:_,onPointerup:R,onPointercancel:m,onLostpointercapture:m},{base:e.withCtx(g=>[e.renderSlot(c.$slots,"base",e.normalizeProps(e.guardReactiveProps(g)),void 0,!0)]),stick:e.withCtx(()=>[e.createVNode(O,{layout:{height:"100%",width:"100%"},"is-active":e.unref(d)?.isPressed,label:e.unref(u)?.label},{base:e.withCtx(g=>[e.renderSlot(c.$slots,"stick-base",e.normalizeProps(e.guardReactiveProps(g)),void 0,!0)]),default:e.withCtx(g=>[e.renderSlot(c.$slots,"stick",e.normalizeProps(e.guardReactiveProps(g)),void 0,!0)]),_:3},8,["is-active","label"])]),default:e.withCtx(g=>[e.renderSlot(c.$slots,"default",e.normalizeProps(e.guardReactiveProps(g)),void 0,!0)]),_:3},8,["class","layout","is-active","vector","base-radius"]))}}),[["__scopeId","data-v-ec529d0c"]]);D(l.CMP_TYPES.BUTTON,K),D(l.CMP_TYPES.INPUT_ZONE,U),D(l.CMP_TYPES.ROOT_LAYER,Y),D(l.CMP_TYPES.TARGET_ZONE,Z),D(l.CMP_TYPES.TRACKPAD,q),D(l.CMP_TYPES.D_PAD,Q),D(l.CMP_TYPES.JOYSTICK,j),l.setGlobalSignalHandler(t=>{(t.type===l.ACTION_TYPES.KEYDOWN||t.type===l.ACTION_TYPES.KEYUP)&&b.dispatchKeyboardEvent(t.type,t.payload)}),w.InputZone=U,w.RootLayer=Y,w.TargetZone=Z,w.VirtualButton=K,w.VirtualDPad=Q,w.VirtualJoystick=j,w.VirtualTrackpad=q,w.getComponent=z,w.getComponentSafe=M,w.hasRegisteredComponent=J,w.registerComponent=D,Object.defineProperty(w,Symbol.toStringTag,{value:"Module"})}));
1
+ (function(_,u){typeof exports=="object"&&typeof module<"u"?u(exports,require("@omnipad/core"),require("@omnipad/core/dom"),require("vue"),require("@omnipad/core/utils")):typeof define=="function"&&define.amd?define(["exports","@omnipad/core","@omnipad/core/dom","vue","@omnipad/core/utils"],u):(_=typeof globalThis<"u"?globalThis:_||self,u(_.OmniPadVue={},_.OmniPadCore,_.OmniPadCoreDom,_.Vue,_.OmniPadCoreUtils))})(this,(function(_,u,w,e,$){"use strict";const x={};function D(t,o){x[t]=o}function O(t){const o=x[t];return o||e.defineComponent({render:()=>e.h("div",{style:"color:red"},`[Unknown: ${t}]`)})}function L(t){return!t||!x[t]?null:x[t]}function X(t){return t?!!x[t]:!1}function I(t,o,m={},c){const n=t(),l=e.shallowRef(),k=e.ref(),r=e.ref(),d=e.ref(null);let i;const y=e.ref(0),h=()=>{y.value=y.value%65535+1};e.watch(()=>r.value?.layout?.stickySelector,(a,f,g)=>{if(!a){i=null,h();return}let p=!1;if(i?p=i.updateSelector(a):(i=w.createWebStickyProvider(a),p=!0),!p)return;const s=i.getTarget();if(!s)return;const N=n.uid+"-sticky";w.ElementObserver.getInstance().observeResize(N,s,()=>{i?.markDirty(),n.markRectDirty()}),w.ElementObserver.getInstance().observeIntersect(N,s,P=>{P||n.reset()}),h(),g(()=>{w.ElementObserver.getInstance().disconnect(N)})},{immediate:!0});let E={...o.value};e.watch(o,a=>{if(!l.value)return;const f=$.getObjectDiff(E,a);Object.keys(f).length>0&&l.value.updateConfig(f),E={...o.value}},{deep:!0});const R=a=>{l.value&&"bindDelegate"in l.value&&Object.entries(a).forEach(([f,g])=>{l.value.bindDelegate(f,g)})};e.onMounted(()=>{l.value=n,u.Registry.getInstance().register(n),"subscribeState"in n&&n.subscribeState(f=>k.value=f),"subscribeConfig"in n&&n.subscribeConfig(f=>r.value=f),c&&R(c);let a=null;if(d.value&&(d.value instanceof Element?a=d.value:d.value.$el instanceof Element&&(a=d.value.$el)),a instanceof Element){const f=w.ElementObserver.getInstance();if("bindRectProvider"in n){const g=$.createCachedProvider(()=>a.getBoundingClientRect());n.bindRectProvider(g.get,()=>{g.markDirty(),i&&(i.markDirty(),h())}),f.observeResize(n.uid,a,()=>{n.markRectDirty()})}f.observeIntersect(n.uid,a,g=>{g||n.reset()})}w.WindowManager.getInstance().init()}),e.onUnmounted(()=>{w.ElementObserver.getInstance().disconnect(n.uid),w.ElementObserver.getInstance().disconnect(n.uid+"-sticky"),l.value&&l.value.destroy()});const S="onPointerDown"in n?w.createPointerBridge(n,m):{},b=e.computed(()=>{const a=r.value?.layout;if(!i||!y.value)return a;const f=i.getRect();return f?$.resolveStickyLayout(a,f):a});return{core:e.readonly(l),state:e.readonly(k),domEvents:S,effectiveConfig:e.readonly(r),effectiveLayout:b,elementRef:d,bindDelegates:R}}const G={class:"omnipad-virtual-layer-base omnipad-prevent"},H=e.defineComponent({__name:"VirtualLayerBase",props:{nodes:{}},setup(t){const o=t,m=e.computed(()=>(o.nodes||[]).map(c=>{let n=L(c.type);return!n&&c.config?.baseType&&(n=L(c.config.baseType)),n||(n=O(c.type)),{node:c,component:n}}));return(c,n)=>(e.openBlock(),e.createElementBlock("div",G,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.value,l=>(e.openBlock(),e.createBlock(e.resolveDynamicComponent(l.component),{key:l.node.uid,"tree-node":l.node},null,8,["tree-node"]))),128)),e.renderSlot(c.$slots,"default",{},void 0,!0)]))}}),B=(t,o)=>{const m=t.__vccOpts||t;for(const[c,n]of o)m[c]=n;return m},U=B(H,[["__scopeId","data-v-a172c7c0"]]),ee=["treeNode","widgetId","parentId"];function V(t,o,m={},c=[]){const n=o.treeNode,l=n&&n.config?.baseType===t||n?.type===t?n:void 0;n&&!l&&console.warn(`[OmniPad-Validation] Type mismatch! Component expected "${t}", but received "${n.type}". Config ignored.`);const k=e.inject(u.CONTEXT.PARENT_ID_KEY,e.ref(void 0)),r=e.computed(()=>o.parentId||l?.config?.parentId||k.value),d=e.computed(()=>o.widgetId||l?.uid||$.generateUID(t));e.provide(u.CONTEXT.PARENT_ID_KEY,d);const i=new Set([...ee,...c]),y=l?.config||{},h=$.getBusinessProps(o,i),E=e.computed(()=>({...m,...y,...h,id:d.value,baseType:t,parentId:r.value,layout:{...m.layout||{},...y.layout||{},...h.layout||{}}})),R=e.computed(()=>{const S=$.getBusinessProps(o,i);return{...S,parentId:r.value,layout:S.layout||void 0}});return{uid:d,initialConfig:E,reactiveConfig:R}}const te=["id"],Y=B(e.defineComponent({__name:"InputZone",props:{treeNode:{},widgetId:{},layout:{},preventFocusLoss:{}},setup(t){const o=t,m=e.useSlots(),c=e.ref(null),{uid:n,initialConfig:l,reactiveConfig:k}=V(u.CMP_TYPES.INPUT_ZONE,o),{core:r,state:d,domEvents:i,effectiveConfig:y,effectiveLayout:h,elementRef:E,bindDelegates:R}=I(()=>new u.InputZoneCore(n.value,l.value,o.treeNode?.type),k,{requireDirectHit:!0}),S=e.computed(()=>{const C=o.treeNode?.config?.dynamicWidgetId;return o.treeNode?.children?.filter(T=>T.uid!==C)||[]}),b=e.computed(()=>{const T=(m.dynamicWidget?.()||[]).filter(z=>!(z.type===Comment||z.type===Text)),v=o.treeNode?.children?.find(z=>z.uid===o.treeNode?.config?.dynamicWidgetId),A=T.length>0;return T.length>1&&console.error(`[OmniPad-Validation] InputZone ${n} has multiple dynamic widgets in slot. Only the first one will be activated.`),A&&v&&console.warn(`[OmniPad-Validation] InputZone ${n} has both Slot and Config dynamic widgets. Config ignored.`),{nodeToRender:A?T[0]:v||null,isFromSlot:A}}),a=e.computed(()=>{const C=b.value.nodeToRender;return O(C.config?.baseType||C.type)});e.watch(c,C=>{e.nextTick(()=>{C&&C?.uid&&(r.value?.updateConfig({dynamicWidgetId:C.uid}),R({dynamicWidgetPointerDown:T=>{C.markRectDirty?.(),C.onPointerDown?.(T)},dynamicWidgetPointerMove:C.onPointerMove,dynamicWidgetPointerUp:C.onPointerUp,dynamicWidgetPointerCancel:C.onPointerCancel}))})},{immediate:!0});const f=e.computed(()=>h.value?$.resolveLayoutStyle(h.value):{}),g=w.supportsContainerQueries(),p=e.computed(()=>{if(!d.value)return{display:"none"};if(!d.value?.isDynamicActive)return{visibility:"hidden",opacity:0};let C,T;const v=d?.value?.dynamicPosition;if(g)C=`${v.x}cqw`,T=`${v.y}cqh`;else{const A=r?.value?.rect;C=`${$.remap(v?.x||0,0,100,0,A?.width||0)}px`,T=`${$.remap(v?.y||0,0,100,0,A?.height||0)}px`}return{zIndex:100,"--dynamic-widget-mount-x":C,"--dynamic-widget-mount-y":T,visibility:"visible",opacity:1,pointerEvents:"auto"}}),s=C=>i?.onPointerDown?.(C),N=C=>i?.onPointerMove?.(C),P=C=>i?.onPointerUp?.(C),J=C=>i?.onPointerCancel?.(C);return(C,T)=>(e.openBlock(),e.createElementBlock("div",{id:e.unref(n),ref_key:"elementRef",ref:E,class:e.normalizeClass(["omnipad-input-zone omnipad-prevent",e.unref(y)?.cssClass]),style:e.normalizeStyle(f.value)},[e.createVNode(U,{nodes:S.value},{default:e.withCtx(()=>[e.renderSlot(C.$slots,"default",{},void 0,!0)]),_:3},8,["nodes"]),b.value.nodeToRender||e.unref(r)?.isInterceptorRequired?(e.openBlock(),e.createElementBlock("div",{key:0,class:"omnipad-input-zone-trigger omnipad-prevent",onPointerdown:s,onPointermove:N,onPointerup:P,onPointercancel:J,onLostpointercapture:J},[e.createElementVNode("div",{class:"dynamic-widget-mount",style:e.normalizeStyle(p.value)},[b.value.isFromSlot?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(b.value.nodeToRender),{key:0,ref:v=>c.value=v},null,512)):b.value.nodeToRender?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(a.value),{key:1,ref:v=>c.value=v,"tree-node":b.value.nodeToRender},null,8,["tree-node"])):e.createCommentVNode("",!0)],4)],32)):e.createCommentVNode("",!0)],14,te))}}),[["__scopeId","data-v-2f22290e"]]),ne=["id"],Z=B(e.defineComponent({__name:"RootLayer",props:{treeNode:{},widgetId:{},layout:{}},setup(t){const o=t,{uid:m,initialConfig:c,reactiveConfig:n}=V(u.CMP_TYPES.ROOT_LAYER,o),{effectiveConfig:l,effectiveLayout:k,elementRef:r}=I(()=>new u.RootLayerCore(m.value,c.value,o.treeNode?.type),n),d=e.computed(()=>k.value?$.resolveLayoutStyle(k.value):{});return(i,y)=>(e.openBlock(),e.createElementBlock("div",{id:e.unref(m),ref_key:"elementRef",ref:r,class:e.normalizeClass(["omnipad-root-layer omnipad-prevent",e.unref(l)?.cssClass]),style:e.normalizeStyle(d.value)},[e.createVNode(U,{nodes:t.treeNode?.children||[]},{default:e.withCtx(()=>[e.renderSlot(i.$slots,"default",{},void 0,!0)]),_:3},8,["nodes"])],14,ne))}}),[["__scopeId","data-v-ad8f02d4"]]),oe=["id"],re={key:0,class:"omnipad-default-focus-border-feedback"},K=B(e.defineComponent({__name:"TargetZone",props:{treeNode:{},widgetId:{},cursorEnabled:{type:Boolean},cursorAutoDelay:{},layout:{}},setup(t){const o=t,m={cursorAutoDelay:2500},{uid:c,initialConfig:n,reactiveConfig:l}=V(u.CMP_TYPES.TARGET_ZONE,o,m),{core:k,state:r,domEvents:d,effectiveConfig:i,effectiveLayout:y,elementRef:h}=I(()=>new u.TargetZoneCore(c.value,n.value,o.treeNode?.type),l,{},{dispatchKeyboardEvent:w.dispatchKeyboardEvent,dispatchPointerEventAtPos:w.dispatchPointerEventAtPos,reclaimFocusAtPos:w.reclaimFocusAtPos}),E=e.computed(()=>y.value?$.resolveLayoutStyle(y.value):{}),R=w.supportsContainerQueries(),S=e.computed(()=>{if(!r.value)return{display:"none"};let p,s;const N=r?.value?.position;if(R)p=`${N.x}cqw`,s=`${N.y}cqh`;else{const P=k?.value?.rect;p=`${$.remap(N?.x||0,0,100,0,P?.width||0)}px`,s=`${$.remap(N?.y||0,0,100,0,P?.height||0)}px`}return{"--omnipad-virtual-cursor-x":p,"--omnipad-virtual-cursor-y":s,opacity:r.value.isVisible?1:0}}),b=p=>d?.onPointerDown?.(p),a=p=>d?.onPointerMove?.(p),f=p=>d?.onPointerUp?.(p),g=p=>d?.onPointerCancel?.(p);return(p,s)=>(e.openBlock(),e.createElementBlock("div",{id:e.unref(c),ref_key:"elementRef",ref:h,class:e.normalizeClass(["omnipad-target-zone omnipad-prevent",e.unref(i)?.cssClass]),style:e.normalizeStyle(E.value),onPointerdown:b,onPointermove:a,onPointerup:f,onPointercancel:g,onLostpointercapture:g},[e.renderSlot(p.$slots,"focus-feedback",{state:e.unref(r),isReturning:e.unref(r)?.isFocusReturning,cursorPos:e.unref(r)?.position},()=>[e.createVNode(e.Transition,{name:"omnipad-default-focus-fade"},{default:e.withCtx(()=>[e.unref(r)?.isFocusReturning?(e.openBlock(),e.createElementBlock("div",re)):e.createCommentVNode("",!0)]),_:1})],!0),e.unref(i)?.cursorEnabled?(e.openBlock(),e.createElementBlock("div",{key:0,class:"omnipad-virtual-cursor",style:e.normalizeStyle(S.value)},[e.renderSlot(p.$slots,"cursor",{state:e.unref(r),isDown:e.unref(r)?.isPointerDown,isReturning:e.unref(r)?.isFocusReturning,cursorPos:e.unref(r)?.position},()=>[e.createElementVNode("div",{class:e.normalizeClass(["omnipad-default-cursor-dot",{"is-down":e.unref(r)?.isPointerDown}])},null,2)],!0)],4)):e.createCommentVNode("",!0),e.unref(i)?.cursorEnabled?(e.openBlock(),e.createElementBlock("div",{key:1,class:"omnipad-virtual-cursor",style:e.normalizeStyle(S.value)},[e.renderSlot(p.$slots,"with-cursor",{state:e.unref(r),isDown:e.unref(r)?.isPointerDown,isReturning:e.unref(r)?.isFocusReturning,cursorPos:e.unref(r)?.position},void 0,!0)],4)):e.createCommentVNode("",!0),e.renderSlot(p.$slots,"default",{state:e.unref(r),isDown:e.unref(r)?.isPointerDown,isReturning:e.unref(r)?.isFocusReturning,cursorPos:e.unref(r)?.position},void 0,!0)],46,oe))}}),[["__scopeId","data-v-b1782723"]]),ie={class:"omnipad-button-content-layer"},ae={key:0,class:"omnipad-default-button-label"},M=B(e.defineComponent({__name:"VirtualButtonBase",props:{layout:{},isActive:{type:Boolean},label:{}},setup(t){const o=t,m=e.computed(()=>o.layout?$.resolveLayoutStyle(o.layout):{});return(c,n)=>(e.openBlock(),e.createElementBlock("div",{class:"omnipad-button-base omnipad-prevent",style:e.normalizeStyle(m.value),tabindex:"-1"},[e.renderSlot(c.$slots,"base",{isActive:t.isActive,label:t.label},()=>[e.createElementVNode("div",{class:e.normalizeClass(["omnipad-default-button-base",{"is-active":t.isActive}])},null,2)],!0),e.createElementVNode("div",ie,[e.renderSlot(c.$slots,"default",{isActive:t.isActive,label:t.label},()=>[t.label?(e.openBlock(),e.createElementBlock("span",ae,e.toDisplayString(t.label),1)):e.createCommentVNode("",!0)],!0)])],4))}}),[["__scopeId","data-v-f6a6e082"]]),F=e.defineComponent({__name:"VirtualButton",props:{treeNode:{},widgetId:{},label:{},targetStageId:{},mapping:{},layout:{}},setup(t,{expose:o}){const m=t,c={label:"BTN"},{uid:n,initialConfig:l,reactiveConfig:k}=V(u.CMP_TYPES.BUTTON,m,c),{core:r,state:d,domEvents:i,effectiveConfig:y,effectiveLayout:h,elementRef:E}=I(()=>new u.ButtonCore(n.value,l.value,m.treeNode?.type),k),R=f=>i?.onPointerDown?.(f),S=f=>i?.onPointerMove?.(f),b=f=>i?.onPointerUp?.(f),a=f=>i?.onPointerCancel?.(f);return o({uid:n,onPointerDown:R,onPointerMove:S,onPointerUp:b,onPointerCancel:a,markRectDirty:()=>r.value?.markRectDirty}),(f,g)=>(e.openBlock(),e.createBlock(M,{id:e.unref(n),ref_key:"elementRef",ref:E,class:e.normalizeClass(["omnipad-button omnipad-prevent",e.unref(y)?.cssClass]),layout:e.unref(h),label:e.unref(y)?.label,"is-active":e.unref(d)?.isPressed,onPointerdown:R,onPointerup:b,onPointercancel:a,onLostpointercapture:a},{base:e.withCtx(p=>[e.renderSlot(f.$slots,"base",e.normalizeProps(e.guardReactiveProps(p)))]),default:e.withCtx(p=>[e.renderSlot(f.$slots,"default",e.normalizeProps(e.guardReactiveProps(p)))]),_:3},8,["id","class","layout","label","is-active"]))}}),se={class:"omnipad-axis-bg"},ce={class:"omnipad-axis-content-layer"},q=B(e.defineComponent({__name:"VirtualAxisBase",props:{layout:{},isActive:{type:Boolean},vector:{},showStick:{type:Boolean},baseRadius:{}},setup(t){const o=t,m=e.computed(()=>o.layout?$.resolveLayoutStyle(o.layout):{}),c=w.supportsContainerQueries(),n=e.computed(()=>{const l=o.vector?.x||0,k=o.vector?.y||0,r=o.baseRadius?.x||0,d=o.baseRadius?.y||0,i=c?`${l*50}cqw`:`${l*r}px`,y=c?`${k*50}cqh`:`${k*d}px`,h=c?"100cqw":`${r*2}px`,E=c?"100cqh":`${d*2}px`;return{"--omnipad-axis-stick-container-x":i,"--omnipad-axis-stick-container-y":y,"--omnipad-axis-stick-width":h,"--omnipad-axis-stick-height":E,transition:o.isActive?"none":"transform 0.1s ease-out"}});return(l,k)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["omnipad-axis-base omnipad-prevent",{"is-active":t.isActive}]),style:e.normalizeStyle(m.value),tabindex:"-1"},[e.createElementVNode("div",se,[e.renderSlot(l.$slots,"base",{isActive:t.isActive,vector:t.vector},void 0,!0)]),t.showStick?(e.openBlock(),e.createElementBlock("div",{key:0,class:"omnipad-axis-stick-container",style:e.normalizeStyle(n.value)},[e.renderSlot(l.$slots,"stick",{isActive:t.isActive,vector:t.vector},()=>[e.createElementVNode("div",{class:e.normalizeClass(["omnipad-default-axis-stick",{"is-active":t.isActive}])},null,2)],!0)],4)):e.createCommentVNode("",!0),e.createElementVNode("div",ce,[e.renderSlot(l.$slots,"default",{isActive:t.isActive,vector:t.vector},void 0,!0)])],6))}}),[["__scopeId","data-v-6ae17f17"]]),le={class:"omnipad-dpad-cross-bg"},Q=B(e.defineComponent({__name:"VirtualDPad",props:{treeNode:{},widgetId:{},targetStageId:{},mapping:{},threshold:{},showStick:{},layout:{}},setup(t,{expose:o}){const m=t,c={showStick:!1,threshold:.3},{uid:n,initialConfig:l,reactiveConfig:k}=V(u.CMP_TYPES.D_PAD,m,c),{core:r,state:d,domEvents:i,effectiveConfig:y,effectiveLayout:h,elementRef:E}=I(()=>new u.DPadCore(n.value,l.value,m.treeNode?.type),k),R=w.supportsContainerQueries(),S=e.ref({x:0,y:0}),b=e.watchEffect(()=>{const s=r.value?.rect;s&&(S.value={x:s.width/2,y:s.height/2})});R&&b();const a=s=>i?.onPointerDown?.(s),f=s=>i?.onPointerMove?.(s),g=s=>i?.onPointerUp?.(s),p=s=>i?.onPointerCancel?.(s);return o({uid:n,onPointerDown:a,onPointerMove:f,onPointerUp:g,onPointerCancel:p,markRectDirty:()=>r.value?.markRectDirty()}),(s,N)=>(e.openBlock(),e.createBlock(q,{ref_key:"elementRef",ref:E,class:e.normalizeClass(["omnipad-dpad omnipad-prevent",e.unref(y)?.cssClass]),layout:e.unref(h),"is-active":e.unref(d)?.isActive,vector:e.unref(d)?.vector,"show-stick":e.unref(y)?.showStick,"base-radius":S.value,onPointerdown:a,onPointermove:f,onPointerup:g,onPointercancel:p,onLostpointercapture:p},{base:e.withCtx(P=>[e.renderSlot(s.$slots,"base",e.normalizeProps(e.guardReactiveProps(P)),()=>[e.createElementVNode("div",le,[e.createElementVNode("div",{class:e.normalizeClass(["dpad-arm top",{on:P.vector&&P.vector.y<-e.unref(y)?.threshold}])},null,2),e.createElementVNode("div",{class:e.normalizeClass(["dpad-arm bottom",{on:P.vector&&P.vector.y>e.unref(y)?.threshold}])},null,2),e.createElementVNode("div",{class:e.normalizeClass(["dpad-arm left",{on:P.vector&&P.vector.x<-e.unref(y)?.threshold}])},null,2),e.createElementVNode("div",{class:e.normalizeClass(["dpad-arm right",{on:P.vector&&P.vector.x>e.unref(y)?.threshold}])},null,2),N[0]||(N[0]=e.createElementVNode("div",{class:"dpad-center"},null,-1))])],!0)]),stick:e.withCtx(P=>[e.renderSlot(s.$slots,"stick",e.normalizeProps(e.guardReactiveProps(P)),void 0,!0)]),default:e.withCtx(P=>[e.renderSlot(s.$slots,"default",e.normalizeProps(e.guardReactiveProps(P)),void 0,!0)]),_:3},8,["class","layout","is-active","vector","show-stick","base-radius"]))}}),[["__scopeId","data-v-8c030849"]]),j=B(e.defineComponent({__name:"VirtualTrackpad",props:{treeNode:{},widgetId:{},label:{},sensitivity:{},targetStageId:{},mapping:{},layout:{}},setup(t,{expose:o}){const m=t,{uid:c,initialConfig:n,reactiveConfig:l}=V(u.CMP_TYPES.TRACKPAD,m,{label:"TRACKPAD",sensitivity:1}),{core:k,state:r,domEvents:d,effectiveConfig:i,effectiveLayout:y,elementRef:h}=I(()=>new u.TrackpadCore(c.value,n.value,m.treeNode?.type),l),E=a=>d?.onPointerDown?.(a),R=a=>d?.onPointerMove?.(a),S=a=>d?.onPointerUp?.(a),b=a=>d?.onPointerCancel?.(a);return o({uid:c,onPointerDown:E,onPointerMove:R,onPointerUp:S,onPointerCancel:b,markRectDirty:()=>k.value?.markRectDirty}),(a,f)=>(e.openBlock(),e.createBlock(M,{id:e.unref(c),ref_key:"elementRef",ref:h,class:e.normalizeClass(["omnipad-trackpad omnipad-prevent",e.unref(i)?.cssClass]),layout:e.unref(y),label:e.unref(i)?.label,"is-active":e.unref(r)?.isPressed,onPointerdown:E,onPointermove:R,onPointerup:S,onPointercancel:b,onLostpointercapture:b},{base:e.withCtx(g=>[e.renderSlot(a.$slots,"base",e.normalizeProps(e.guardReactiveProps(g)),void 0,!0)]),default:e.withCtx(g=>[e.renderSlot(a.$slots,"default",e.normalizeProps(e.guardReactiveProps(g)),void 0,!0)]),_:3},8,["id","class","layout","label","is-active"]))}}),[["__scopeId","data-v-bacab613"]]),W=B(e.defineComponent({__name:"VirtualJoystick",props:{treeNode:{},widgetId:{},label:{},targetStageId:{},threshold:{},cursorMode:{},cursorSensitivity:{},mapping:{},layout:{}},setup(t,{expose:o}){const m=t,c={label:"PUSH",threshold:.2,cursorMode:!1,cursorSensitivity:1},{uid:n,initialConfig:l,reactiveConfig:k}=V(u.CMP_TYPES.JOYSTICK,m,c),{core:r,state:d,domEvents:i,effectiveConfig:y,effectiveLayout:h,elementRef:E}=I(()=>new u.JoystickCore(n.value,l.value,m.treeNode?.type),k),R=w.supportsContainerQueries(),S=e.ref({x:0,y:0}),b=e.watchEffect(()=>{const s=r.value?.rect;s&&(S.value={x:s.width/2,y:s.height/2})});R&&b();const a=s=>i?.onPointerDown?.(s),f=s=>i?.onPointerMove?.(s),g=s=>i?.onPointerUp?.(s),p=s=>i?.onPointerCancel?.(s);return o({uid:n,onPointerDown:a,onPointerMove:f,onPointerUp:g,onPointerCancel:p,markRectDirty:()=>r.value?.markRectDirty}),(s,N)=>(e.openBlock(),e.createBlock(q,{ref_key:"elementRef",ref:E,class:e.normalizeClass(["omnipad-joystick omnipad-prevent",e.unref(y)?.cssClass]),layout:e.unref(h),"is-active":e.unref(d)?.isActive,vector:e.unref(d)?.vector,"show-stick":"","base-radius":S.value,onPointerdown:a,onPointermove:f,onPointerup:g,onPointercancel:p,onLostpointercapture:p},{base:e.withCtx(P=>[e.renderSlot(s.$slots,"base",e.normalizeProps(e.guardReactiveProps(P)),void 0,!0)]),stick:e.withCtx(()=>[e.createVNode(M,{layout:{height:"100%",width:"100%"},"is-active":e.unref(d)?.isPressed,label:e.unref(y)?.label},{base:e.withCtx(P=>[e.renderSlot(s.$slots,"stick-base",e.normalizeProps(e.guardReactiveProps(P)),void 0,!0)]),default:e.withCtx(P=>[e.renderSlot(s.$slots,"stick",e.normalizeProps(e.guardReactiveProps(P)),void 0,!0)]),_:3},8,["is-active","label"])]),default:e.withCtx(P=>[e.renderSlot(s.$slots,"default",e.normalizeProps(e.guardReactiveProps(P)),void 0,!0)]),_:3},8,["class","layout","is-active","vector","base-radius"]))}}),[["__scopeId","data-v-ae628e53"]]);D(u.CMP_TYPES.BUTTON,F),D(u.CMP_TYPES.INPUT_ZONE,Y),D(u.CMP_TYPES.ROOT_LAYER,Z),D(u.CMP_TYPES.TARGET_ZONE,K),D(u.CMP_TYPES.TRACKPAD,j),D(u.CMP_TYPES.D_PAD,Q),D(u.CMP_TYPES.JOYSTICK,W),u.setGlobalSignalHandler(t=>{(t.type===u.ACTION_TYPES.KEYDOWN||t.type===u.ACTION_TYPES.KEYUP)&&w.dispatchKeyboardEvent(t.type,t.payload)}),_.InputZone=Y,_.RootLayer=Z,_.TargetZone=K,_.VirtualButton=F,_.VirtualDPad=Q,_.VirtualJoystick=W,_.VirtualTrackpad=j,_.getComponent=O,_.getComponentSafe=L,_.hasRegisteredComponent=X,_.registerComponent=D,Object.defineProperty(_,Symbol.toStringTag,{value:"Module"})}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@omnipad/vue",
3
- "version": "0.4.5",
3
+ "version": "0.5.0",
4
4
  "description": "",
5
5
  "main": "./dist/omnipad-vue.umd.js",
6
6
  "module": "./dist/omnipad-vue.mjs",
@@ -30,7 +30,7 @@
30
30
  "vue": "^3.2.0"
31
31
  },
32
32
  "dependencies": {
33
- "@omnipad/core": "0.4.5"
33
+ "@omnipad/core": "0.5.0"
34
34
  },
35
35
  "publishConfig": {
36
36
  "access": "public",