@omnipad/core 0.4.4 → 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
- import {e,g as g$1}from'../chunk-ETLJK7NP.mjs';export{i as addVec,C as applyAxialDeadzone,B as applyRadialDeadzone,k as clamp,r as clampVector,q as degToRad,o as getAngle,A as getDeadzoneScalar,n as getDistance,z as isVec2Equal,l as lerp,t as lockTo4Directions,s as lockTo8Directions,w as normalizeVec,u as percentToPx,v as pxToPercent,p as radToDeg,x as radToVec,y as remap,m as roundTo,j as scaleVec,h as subVec}from'../chunk-ETLJK7NP.mjs';function Z(t){let r=null,e=true;return {get:()=>((e||!r)&&(r=t(),e=false),r),markDirty:()=>{e=true;}}}function tt(t,r){let e={};return t?(Object.keys(r).forEach(i=>{let o=r[i],a=t[i];typeof o=="object"&&o!==null?JSON.stringify(o)!==JSON.stringify(a)&&(e[i]=o):o!==a&&(e[i]=o);}),e):{...r}}var v=(t,r,e="omnipad-prevent")=>{let o=document.elementsFromPoint(t,r).find(a=>!a.classList.contains(e));if(!o)return null;for(;o&&o.shadowRoot;){let d=o.shadowRoot.elementsFromPoint(t,r).find(f=>!f.classList.contains(e));if(!d||d===o)break;o=d;}return o},E=()=>{let t=document.activeElement;for(;t&&t.shadowRoot&&t.shadowRoot.activeElement;)t=t.shadowRoot.activeElement;return t},M=t=>{E()!==t&&(t.hasAttribute("tabindex")||t.setAttribute("tabindex","-1"),t.focus());},nt=(t,r)=>{let e=new KeyboardEvent(t,{...r,which:r.keyCode,bubbles:true,cancelable:true,view:window});window.dispatchEvent(e);},rt=(t,r,e,i)=>{let o=v(r,e);if(!o)return;let a={bubbles:true,cancelable:true,composed:true,clientX:r,clientY:e,view:window,...i};if(t.startsWith("pointer")){o.dispatchEvent(new PointerEvent(t,{isPrimary:true,pointerId:9999,pointerType:"mouse",...a}));let d=t.replace("pointer","mouse");o.dispatchEvent(new MouseEvent(d,a));}else o.dispatchEvent(new MouseEvent(t,a));},ot=(t,r,e)=>{let i=v(t,r);if(!i)return;E()!==i&&(M(i),e());},g,it=()=>(g!==void 0||(g=typeof window<"u"&&!!window.CSS?.supports?.("width: 1cqw")),g),T=(t,r)=>{if(t instanceof Element)try{t.setPointerCapture(r);}catch(e){import.meta.env?.DEV&&console.warn("[Omnipad-DOM] Failed to set pointer capture:",e);}},I=(t,r)=>{if(t instanceof Element&&t.hasPointerCapture(r))try{t.releasePointerCapture(r);}catch{}};function at(t,r={}){return {onPointerDown(e){if(!e.isTrusted||r?.requireDirectHit&&e.target!==e.currentTarget||t.activePointerId!=null)return;e.cancelable&&e.preventDefault(),e.stopPropagation();let i=e.currentTarget;i&&T(i,e.pointerId),t.onPointerDown(e);},onPointerMove(e){e.isTrusted&&(t.activePointerId!=null&&t.activePointerId!==e.pointerId||(e.cancelable&&e.preventDefault(),t.onPointerMove(e)));},onPointerUp(e){if(!e.isTrusted||t.activePointerId!=null&&t.activePointerId!==e.pointerId)return;e.cancelable&&e.preventDefault();let i=e.currentTarget;i&&I(i,e.pointerId),t.onPointerUp(e);},onPointerCancel(e){if(!e.isTrusted||t.activePointerId!=null&&t.activePointerId!==e.pointerId)return;let i=e.currentTarget;i&&I(i,e.pointerId),t.onPointerCancel(e);}}}var C=(t="omnipad")=>{let r=Date.now().toString(36),e=Math.random().toString(36).substring(2,6);return `${t}-${r}-${e}`};function m(t){return t.startsWith("$")}function k(t){if(t==null)return {value:0,unit:"px"};if(typeof t=="number")return {value:Number.isFinite(t)?t:0,unit:"px"};let r=t.trim(),e=parseFloat(r);if(isNaN(e))return {value:0,unit:"px"};let i=r.match(/[a-z%]+$/i),o=i?i[0].toLowerCase():"px";return w({value:e,unit:o})}var w=t=>{let{value:r,unit:e$1}=t;return e.includes(e$1)?{value:r,unit:e$1}:(console.warn(`[Omnipad-Core] Blocked invalid CSS unit: ${e$1}`),{value:r,unit:"px"})},S=t=>`${t.value}${t.unit}`,gt=t=>{if(Object.keys(t??{}).length===0)return {};let r={};r.position="absolute",t.isSquare&&(r.aspectRatio="1/1"),["left","top","right","bottom","width","height"].forEach(o=>{let a=t[o];if(a!=null){if(typeof a=="object"&&"unit"in a){let d=w(a);r[o]=S(d);}else if(typeof a=="string"||typeof a=="number"){let d=k(a);r[o]=S(d);}}}),t.zIndex!==void 0&&(r.zIndex=t.zIndex);let i={"top-left":"translate(0, 0)","top-center":"translate(-50%, 0)","top-right":"translate(-100%, 0)","center-left":"translate(0, -50%)",center:"translate(-50%, -50%)","center-right":"translate(-100%, -50%)","bottom-left":"translate(0, -100%)","bottom-center":"translate(-50%, -100%)","bottom-right":"translate(-100%, -100%)"};return t.anchor&&(r.transform=i[t.anchor]),r};function Pt(t){if(!t||typeof t!="object")throw new Error("[OmniPad-Validation] Profile must be a valid JSON object.");if(!Array.isArray(t.items))throw new Error('[OmniPad-Validation] "items" must be an array.');let r={name:t.meta?.name||"Untitled Profile",version:t.meta?.version||"1.0.0",author:t.meta?.author||"Unknown"},e=t.items.map((o,a)=>{if(!o.id||!o.type)throw new Error(`[OmniPad-Validation] Item at index ${a} is missing "id" or "type".`);return {id:String(o.id),type:String(o.type),parentId:o.parentId?String(o.parentId):void 0,config:o.config||{}}}),i=t.gamepadMappings;return {meta:r,items:e,gamepadMappings:i}}function yt(t){let{items:r,gamepadMappings:e}=t,i=new Map,o=(n,s="node")=>m(n)?n:(i.has(n)||i.set(n,C(s)),i.get(n));r.forEach(n=>o(n.id,n.type));let a=[];e&&e.forEach(n=>{let s={};if(n.buttons){s.buttons={};for(let[u,c]of Object.entries(n.buttons))s.buttons[u]=o(c);}n.dpad&&(s.dpad=o(n.dpad)),n.leftStick&&(s.leftStick=o(n.leftStick)),n.rightStick&&(s.rightStick=o(n.rightStick)),a.push(s);});let d=new Map,f=[];r.forEach(n=>{n.parentId?(d.has(n.parentId)||d.set(n.parentId,[]),d.get(n.parentId).push(n)):f.push(n);});let l=(n,s)=>{if(s.has(n.id))throw new Error(`[Omnipad-Core] Circular dependency detected at node: ${n.id}`);s.add(n.id);let u={...n.config};u?.targetStageId&&(u.targetStageId=o(u.targetStageId)),u?.dynamicWidgetId&&(u.dynamicWidgetId=o(u.dynamicWidgetId));let h=(d.get(n.id)||[]).map(b=>l(b,new Set(s)));return {uid:o(n.id),type:n.type,config:u,children:h}},p={};return f.forEach(n=>{p[n.id]=l(n,new Set);}),{roots:p,runtimeGamepadMappings:a}}function It(t,r,e){let i=g$1.getInstance(),o=[];if(!r||r.length===0)o=i.getAllEntities();else {let n=new Set;r.forEach(s=>{i.getEntitiesByRoot(s).forEach(c=>n.add(c));}),o=Array.from(n);}let a=new Map,d=0,f=n=>m(n)?n:(a.has(n)||a.set(n,`node_${++d}`),a.get(n)),l=o.map(n=>{let s=n.getConfig(),u=n.uid,c={...s};c.targetStageId&&(c.targetStageId=f(c.targetStageId)),c.dynamicWidgetId&&(c.dynamicWidgetId=f(c.dynamicWidgetId));let{id:h,parentId:b,...x}=c;return {id:f(u),type:n.type,parentId:s.parentId?f(s.parentId):void 0,config:x}}),p=[];return e&&e.forEach(n=>{let s={};if(n.buttons){s.buttons={};for(let[u,c]of Object.entries(n.buttons))a.has(c)&&(s.buttons[u]=a.get(c));}n.dpad&&a.has(n.dpad)&&(s.dpad=a.get(n.dpad)),n.leftStick&&a.has(n.leftStick)&&(s.leftStick=a.get(n.leftStick)),n.rightStick&&a.has(n.rightStick)&&(s.rightStick=a.get(n.rightStick)),Object.keys(s).length>0?p.push(s):p.push({});}),{meta:t,items:l,gamepadMappings:Object.keys(p).length>0?p:void 0}}export{Z as createCachedProvider,at as createPointerBridge,nt as dispatchKeyboardEvent,rt as dispatchPointerEventAtPos,It as exportProfile,M as focusElement,C as generateUID,E as getDeepActiveElement,v as getDeepElement,tt as getObjectDiff,m as isGlobalID,S as lengthToCss,k as parseLength,Pt as parseProfileJson,yt as parseProfileTrees,ot as reclaimFocusAtPos,gt as resolveLayoutStyle,I as safeReleaseCapture,T as safeSetCapture,w as sanitizeParsedLength,it as supportsContainerQueries};
1
+ export{b as addVec,v as applyAxialDeadzone,u as applyRadialDeadzone,d as clamp,k as clampVector,j as degToRad,h as getAngle,t as getDeadzoneScalar,g as getDistance,s as isVec2Equal,e as lerp,m as lockTo4Directions,l as lockTo8Directions,p as normalizeVec,n as percentToPx,o as pxToPercent,i as radToDeg,q as radToVec,r as remap,f as roundTo,c as scaleVec,a as subVec}from'../chunk-V7AHGFPB.mjs';import {d,h,i}from'../chunk-MKVX5ALC.mjs';export{b as DANGEROUS_KEYWORDS,k as StickyProvider,i as compressLayoutBox,a as createCachedProvider,g as lengthToCss,e as parseLength,j as resolveLayoutStyle,l as resolveStickyLayout,d as sanitizeCssClass,c as sanitizeDomString,f as sanitizeParsedLength,h as validateLayoutBox}from'../chunk-MKVX5ALC.mjs';import {h as h$1}from'../chunk-PACTGVBB.mjs';function tt(r,a){let s={};return r?(Object.keys(a).forEach(i=>{let e=a[i],o=r[i];typeof e=="object"&&e!==null?JSON.stringify(e)!==JSON.stringify(o)&&(s[i]=e):e!==o&&(s[i]=e);}),s):{...a}}var P=(r="omnipad")=>{let a=Date.now().toString(36),s=Math.random().toString(36).substring(2,6);return `${r}-${a}-${s}`};function l(r){return r.startsWith("$")}function st(r){if(!r||typeof r!="object")throw new Error("[OmniPad-Validation] Profile must be a valid JSON object.");if(!Array.isArray(r.items))throw new Error('[OmniPad-Validation] "items" must be an array.');let a={name:r.meta?.name||"Untitled Profile",version:r.meta?.version||"1.0.0",author:r.meta?.author||"Unknown"},s=r.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:h(e.config.layout),cssClass:d(e.config.cssClass)}}}),i=r.gamepadMappings;return {meta:a,items:s,gamepadMappings:i}}function dt(r){let{items:a,gamepadMappings:s}=r,i=new Map,e=(t,n="node")=>l(t)?t:(i.has(t)||i.set(t,P(n)),i.get(t));a.forEach(t=>e(t.id,t.type));let o=[];s&&s.forEach(t=>{let n={};if(t.buttons){n.buttons={};for(let[f,d]of Object.entries(t.buttons))n.buttons[f]=e(d);}t.dpad&&(n.dpad=e(t.dpad)),t.leftStick&&(n.leftStick=e(t.leftStick)),t.rightStick&&(n.rightStick=e(t.rightStick)),o.push(n);});let p=new Map,g=[];a.forEach(t=>{t.parentId?(p.has(t.parentId)||p.set(t.parentId,[]),p.get(t.parentId).push(t)):g.push(t);});let u=(t,n)=>{if(n.has(t.id))throw new Error(`[OmniPad-Core] Circular dependency detected at node: ${t.id}`);n.add(t.id);let f={...t.config};f?.targetStageId&&(f.targetStageId=e(f.targetStageId)),f?.dynamicWidgetId&&(f.dynamicWidgetId=e(f.dynamicWidgetId));let y=(p.get(t.id)||[]).map(m=>u(m,new Set(n)));return {uid:e(t.id),type:t.type,config:f,children:y}},c={};return g.forEach(t=>{c[t.id]=u(t,new Set);}),{roots:c,runtimeGamepadMappings:o}}function ft(r,a,s){let i$1=h$1.getInstance(),e=[];if(!a||a.length===0)e=i$1.getAllEntities();else {let t=new Set;a.forEach(n=>{i$1.getEntitiesByRoot(n).forEach(d=>t.add(d));}),e=Array.from(t);}let o=new Map,p=0,g=t=>l(t)?t:(o.has(t)||o.set(t,`node_${++p}`),o.get(t)),u=e.map(t=>{let n=t.getConfig(),f=t.uid,d={...n};d.targetStageId&&(d.targetStageId=g(d.targetStageId)),d.dynamicWidgetId&&(d.dynamicWidgetId=g(d.dynamicWidgetId));let{id:y,parentId:m,...h}=d;return {id:g(f),type:t.type,parentId:n.parentId?g(n.parentId):void 0,config:{...h,layout:i(h.layout)}}}),c=[];return s&&s.forEach(t=>{let n={};if(t.buttons){n.buttons={};for(let[f,d]of Object.entries(t.buttons))o.has(d)&&(n.buttons[f]=o.get(d));}t.dpad&&o.has(t.dpad)&&(n.dpad=o.get(t.dpad)),t.leftStick&&o.has(t.leftStick)&&(n.leftStick=o.get(t.leftStick)),t.rightStick&&o.has(t.rightStick)&&(n.rightStick=o.get(t.rightStick)),Object.keys(n).length>0?c.push(n):c.push({});}),{meta:r,items:u,gamepadMappings:Object.keys(c).length>0?c:void 0}}function gt(r,a){let s={};for(let i in r)r[i]!==void 0&&!a.has(i)&&(s[i]=r[i]);return s}export{ft as exportProfile,P as generateUID,gt as getBusinessProps,tt as getObjectDiff,l as isGlobalID,st as parseProfileJson,dt as parseProfileTrees};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@omnipad/core",
3
- "version": "0.4.4",
3
+ "version": "0.5.0",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -16,6 +16,11 @@
16
16
  "types": "./dist/utils/index.d.ts",
17
17
  "import": "./dist/utils/index.mjs",
18
18
  "require": "./dist/utils/index.cjs"
19
+ },
20
+ "./dom": {
21
+ "types": "./dist/dom/index.d.ts",
22
+ "import": "./dist/dom/index.mjs",
23
+ "require": "./dist/dom/index.cjs"
19
24
  }
20
25
  },
21
26
  "typesVersions": {
@@ -25,6 +30,9 @@
25
30
  ],
26
31
  "utils": [
27
32
  "./dist/utils/index.d.ts"
33
+ ],
34
+ "dom": [
35
+ "./dist/dom/index.d.ts"
28
36
  ]
29
37
  }
30
38
  },