@omnipad/core 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
- import {e,h}from'../chunk-W7OR5ESR.mjs';export{j as addVec,D as applyAxialDeadzone,C as applyRadialDeadzone,l as clamp,s as clampVector,r as degToRad,p as getAngle,B as getDeadzoneScalar,o as getDistance,A as isVec2Equal,m as lerp,u as lockTo4Directions,t as lockTo8Directions,x as normalizeVec,v as percentToPx,w as pxToPercent,q as radToDeg,y as radToVec,z as remap,n as roundTo,k as scaleVec,i as subVec}from'../chunk-W7OR5ESR.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(o=>{let i=r[o],a=t[o];typeof i=="object"&&i!==null?JSON.stringify(i)!==JSON.stringify(a)&&(e[o]=i):i!==a&&(e[o]=i);}),e):{...r}}var v=(t,r,e="omnipad-prevent")=>{let i=document.elementsFromPoint(t,r).find(a=>!a.classList.contains(e));if(!i)return null;for(;i&&i.shadowRoot;){let c=i.shadowRoot.elementsFromPoint(t,r).find(f=>!f.classList.contains(e));if(!c||c===i)break;i=c;}return i},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,o)=>{let i=v(r,e);if(!i)return;let a={bubbles:true,cancelable:true,composed:true,clientX:r,clientY:e,view:window,...o};if(t.startsWith("pointer")){i.dispatchEvent(new PointerEvent(t,{isPrimary:true,pointerId:9999,pointerType:"mouse",...a}));let c=t.replace("pointer","mouse");i.dispatchEvent(new MouseEvent(c,a));}else i.dispatchEvent(new MouseEvent(t,a));},it=(t,r,e)=>{let o=v(t,r);if(!o)return;E()!==o&&(M(o),e());},g,ot=()=>(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 o=e.currentTarget;o&&T(o,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 o=e.currentTarget;o&&I(o,e.pointerId),t.onPointerUp(e);},onPointerCancel(e){if(!e.isTrusted||t.activePointerId!=null&&t.activePointerId!==e.pointerId)return;let o=e.currentTarget;o&&I(o,e.pointerId),t.onPointerCancel(e);}}}var S=(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 o=r.match(/[a-z%]+$/i),i=o?o[0].toLowerCase():"px";return C({value:e,unit:i})}var C=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"})},x=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(i=>{let a=t[i];if(a!=null){if(typeof a=="object"&&"unit"in a){let c=C(a);r[i]=x(c);}else if(typeof a=="string"||typeof a=="number"){let c=k(a);r[i]=x(c);}}}),t.zIndex!==void 0&&(r.zIndex=t.zIndex);let o={"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=o[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((i,a)=>{if(!i.id||!i.type)throw new Error(`[OmniPad-Validation] Item at index ${a} is missing "id" or "type".`);return {id:String(i.id),type:String(i.type),parentId:i.parentId?String(i.parentId):void 0,config:i.config||{}}}),o=t.gamepadMappings;return {meta:r,items:e,gamepadMappings:o}}function yt(t){let{items:r,gamepadMappings:e}=t,o=new Map,i=(n,s="node")=>m(n)?n:(o.has(n)||o.set(n,S(s)),o.get(n));r.forEach(n=>i(n.id,n.type));let a=[];e&&e.forEach(n=>{let s={};if(n.buttons){s.buttons={};for(let[u,d]of Object.entries(n.buttons))s.buttons[u]=i(d);}n.dpad&&(s.dpad=i(n.dpad)),n.leftStick&&(s.leftStick=i(n.leftStick)),n.rightStick&&(s.rightStick=i(n.rightStick)),a.push(s);});let c=new Map,f=[];r.forEach(n=>{n.parentId?(c.has(n.parentId)||c.set(n.parentId,[]),c.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=i(u.targetStageId)),u?.dynamicWidgetId&&(u.dynamicWidgetId=i(u.dynamicWidgetId));let h=(c.get(n.id)||[]).map(b=>l(b,new Set(s)));return {uid:i(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 o=h.getInstance(),i=[];if(!r||r.length===0)i=o.getAllEntities();else {let n=new Set;r.forEach(s=>{o.getEntitiesByRoot(s).forEach(d=>n.add(d));}),i=Array.from(n);}let a=new Map,c=0,f=n=>m(n)?n:(a.has(n)||a.set(n,`node_${++c}`),a.get(n)),l=i.map(n=>{let s=n.getConfig(),u=n.uid,d={...s};d.targetStageId&&(d.targetStageId=f(d.targetStageId)),d.dynamicWidgetId&&(d.dynamicWidgetId=f(d.dynamicWidgetId));let{id:h,parentId:b,...w}=d;return {id:f(u),type:n.type,parentId:s.parentId?f(s.parentId):void 0,config:w}}),p=[];return e&&e.forEach(n=>{let s={};if(n.buttons){s.buttons={};for(let[u,d]of Object.entries(n.buttons))a.has(d)&&(s.buttons[u]=a.get(d));}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}}function vt(t,r){let e={};for(let o in t)t[o]!==void 0&&!r.has(o)&&(e[o]=t[o]);return e}export{Z as createCachedProvider,at as createPointerBridge,nt as dispatchKeyboardEvent,rt as dispatchPointerEventAtPos,It as exportProfile,M as focusElement,S as generateUID,vt as getBusinessProps,E as getDeepActiveElement,v as getDeepElement,tt as getObjectDiff,m as isGlobalID,x as lengthToCss,k as parseLength,Pt as parseProfileJson,yt as parseProfileTrees,it as reclaimFocusAtPos,gt as resolveLayoutStyle,I as safeReleaseCapture,T as safeSetCapture,C as sanitizeParsedLength,ot 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.5",
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
  },