star-canvas 0.1.3 → 0.1.4
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 +2 -2
- package/dist/index.mjs +2 -2
- package/dist/legacy.cjs +2 -2
- package/dist/legacy.mjs +2 -2
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var A=Object.defineProperty;var U=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var V=Object.prototype.hasOwnProperty;var J=(a,
|
|
1
|
+
"use strict";var A=Object.defineProperty;var U=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var V=Object.prototype.hasOwnProperty;var J=(a,r)=>{for(var l in r)A(a,l,{get:r[l],enumerable:!0})},K=(a,r,l,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let s of j(r))!V.call(a,s)&&s!==l&&A(a,s,{get:()=>r[s],enumerable:!(t=U(r,s))||t.enumerable});return a};var Q=a=>K(A({},"__esModule",{value:!0}),a);var ne={};J(ne,{createDragState:()=>W,game:()=>te,version:()=>Z});module.exports=Q(ne);var Z="0.8.0",X={landscape:{width:640,height:360},portrait:{width:360,height:640},responsive:{}};function W(a){let r=null,l=0,t=0;return{point(s){return a(s)},grab(s,c){let{x:y,y:T}=a(s);r=c,l=y-c.x,t=T-c.y},move(s){if(r){let{x:c,y}=a(s);r.x=c-l,r.y=y-t}},release(){let s=r;return r=null,s},get dragging(){return r}}}function Y(){return typeof window<"u"&&typeof document<"u"}function ee(){if(!Y()||document.getElementById("star-canvas-base"))return;let a=document.createElement("style");a.id="star-canvas-base",a.textContent=`
|
|
2
2
|
html, body { height: 100%; }
|
|
3
3
|
body {
|
|
4
4
|
margin: 0; min-height: 100dvh; overflow: hidden; background: #000;
|
|
@@ -29,4 +29,4 @@
|
|
|
29
29
|
.star-ui textarea, .star-ui [data-interactive] {
|
|
30
30
|
pointer-events: auto;
|
|
31
31
|
}
|
|
32
|
-
`,document.head.appendChild(a)}function te(a,
|
|
32
|
+
`,document.head.appendChild(a)}function te(a,r={}){Y()&&(document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>q(a,r),{once:!0}):queueMicrotask(()=>q(a,r)))}function q(a,r){if(ee(),window.__STAR_DOM__?.destroy)try{window.__STAR_DOM__.destroy()}catch{}document.querySelectorAll(".star-ui, .star-canvas, .star-input").forEach(e=>e.remove());let l=document.createElement("div");l.className="star-ui",document.body.appendChild(l);let t=document.createElement("canvas");t.className="star-canvas",document.body.appendChild(t);let s=t.getContext("2d",r.contextAttributes??{alpha:!0});if(!s)throw new Error("[star-canvas] Failed to get 2D context");if(r.preventContextMenu!==!1){let e=n=>n.preventDefault();t.addEventListener("contextmenu",e)}let c=document.createElement("div");c.className="star-input",document.body.appendChild(c);let y=[],T=[],O=[],R=null,w=null;Object.defineProperty(t,"onclick",{get:()=>R,set:e=>{w&&(c.removeEventListener("click",w),w=null),R=e,e&&(w=n=>e.call(t,n),c.addEventListener("click",w))}});let F=t.addEventListener.bind(t),$=t.removeEventListener.bind(t),H=new WeakMap;t.addEventListener=function(e,n,o){if(/^(click|pointer|mouse|touch)/.test(e)&&typeof n=="function"){let i=(p=>n.call(t,p));H.set(n,i),c.addEventListener(e,i,o)}else F(e,n,o)},t.removeEventListener=function(e,n,o){if(/^(click|pointer|mouse|touch)/.test(e)&&typeof n=="function"){let i=H.get(n);i&&(c.removeEventListener(e,i,o),H.delete(n))}else $(e,n,o)};let B=r.preset??"landscape",D=X[B]??X.landscape,L=r.width??D.width,M=r.height??D.height,I=r.maxPixelRatio??2,k=r.pixelRatio??"device",S=r.fit??"contain",b=1,d=L??1,u=M??1,G=new Set,C=null,x=[];function N(){return Math.min(typeof k=="number"?Math.max(1,k):Math.max(1,window.devicePixelRatio||1),I)}function h(){b=N();let e=document.body.getBoundingClientRect(),n=Math.max(1,Math.floor(e.width||window.innerWidth||800)),o=Math.max(1,Math.floor(e.height||window.innerHeight||600));if(L&&M){d=L,u=M;let m=d/u,v=n/o,f=1;if(S==="contain"?f=v>m?o/u:n/d:S==="cover"&&(f=v>m?n/d:o/u),S==="stretch")t.style.width="100%",t.style.height="100%";else{let g=Math.floor(d*f),z=Math.floor(u*f);t.style.width=`${g}px`,t.style.height=`${z}px`,t.style.position="absolute",t.style.left=`${Math.floor((n-g)/2)}px`,t.style.top=`${Math.floor((o-z)/2)}px`}}else if(M){u=M;let m=n/o;d=Math.floor(u*m),t.style.width="100%",t.style.height="100%",t.style.position="absolute",t.style.left="0",t.style.top="0"}else if(L){d=L;let m=n/o;u=Math.floor(d/m),t.style.width="100%",t.style.height="100%",t.style.position="absolute",t.style.left="0",t.style.top="0"}else d=n,u=o,t.style.width=`${d}px`,t.style.height=`${u}px`,t.style.position="absolute",t.style.left="0",t.style.top="0";let i=Math.max(1,Math.floor(d*b)),p=Math.max(1,Math.floor(u*b));t.width!==i&&(t.width=i),t.height!==p&&(t.height=p),s.setTransform(b,0,0,b,0,0),G.forEach(m=>m())}let P=new ResizeObserver(h);P.observe(document.body),x.push(()=>P.disconnect()),window.addEventListener("resize",h),x.push(()=>window.removeEventListener("resize",h));let _=window.visualViewport;_&&(_.addEventListener("resize",h),x.push(()=>_.removeEventListener("resize",h)));let E={stage:document.body,canvas:t,ctx:s,get width(){return d},get height(){return u},get dpr(){return b},resize:h,toStagePoint:e=>{let n=t.getBoundingClientRect(),o=(e.clientX-n.left)*(d/n.width),i=(e.clientY-n.top)*(u/n.height);return o=Math.max(0,Math.min(d,o)),i=Math.max(0,Math.min(u,i)),{x:o,y:i}},createDrag:()=>W(E.toStagePoint),onTap:e=>{y.push(e)},onMove:e=>{T.push(e)},onRelease:e=>{O.push(e)},on:(e,n,o,i)=>{let p=v=>{let g=v.target?.closest?.(n);g&&o.call(g,v)};document.addEventListener(e,p,i);let m=()=>document.removeEventListener(e,p,i);return x.push(m),m},loop:e=>{let o=0,i=!1,p=0,m=v=>{if(!i)return;let f=p?Math.min((v-p)/1e3,.1):0;p=v;try{e(f,v)}catch(g){console.error("[star-canvas] Game loop error:",g)}o=requestAnimationFrame(m)};return C={get running(){return i},start(){i||(i=!0,p=performance.now(),o=requestAnimationFrame(m))},stop(){i&&(i=!1,cancelAnimationFrame(o))}},C.start(),C},ui:{root:l,render:e=>{l.innerHTML!==e&&(l.innerHTML=e)},el:e=>l.querySelector(e),all:e=>l.querySelectorAll(e)},destroy:()=>{C?.stop(),x.forEach(e=>e()),x=[],G.clear(),t.parentElement&&t.parentElement.removeChild(t),l.parentElement&&l.parentElement.removeChild(l),c.parentElement&&c.parentElement.removeChild(c)},scoped:e=>{s.save();try{e()}finally{s.restore()}}};c.addEventListener("pointerdown",e=>{let n={...E.toStagePoint(e),event:e};y.forEach(o=>o(n))}),c.addEventListener("pointermove",e=>{let n={...E.toStagePoint(e),event:e};T.forEach(o=>o(n))}),c.addEventListener("pointerup",e=>{let n={...E.toStagePoint(e),event:e};O.forEach(o=>o(n))}),window.__STAR_DOM__={destroy:E.destroy},requestAnimationFrame(()=>requestAnimationFrame(()=>{h();try{a(E)}catch(e){console.error("[star-canvas] Game initialization failed:",e)}}))}0&&(module.exports={createDragState,game,version});
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var U="0.8.0",z={landscape:{width:640,height:360},portrait:{width:360,height:640},responsive:{}};function B(m){let i=null,
|
|
1
|
+
var U="0.8.0",z={landscape:{width:640,height:360},portrait:{width:360,height:640},responsive:{}};function B(m){let i=null,d=0,t=0;return{point(u){return m(u)},grab(u,a){let{x:y,y:T}=m(u);i=a,d=y-a.x,t=T-a.y},move(u){if(i){let{x:a,y}=m(u);i.x=a-d,i.y=y-t}},release(){let u=i;return i=null,u},get dragging(){return i}}}function q(){return typeof window<"u"&&typeof document<"u"}function N(){if(!q()||document.getElementById("star-canvas-base"))return;let m=document.createElement("style");m.id="star-canvas-base",m.textContent=`
|
|
2
2
|
html, body { height: 100%; }
|
|
3
3
|
body {
|
|
4
4
|
margin: 0; min-height: 100dvh; overflow: hidden; background: #000;
|
|
@@ -29,4 +29,4 @@ var U="0.8.0",z={landscape:{width:640,height:360},portrait:{width:360,height:640
|
|
|
29
29
|
.star-ui textarea, .star-ui [data-interactive] {
|
|
30
30
|
pointer-events: auto;
|
|
31
31
|
}
|
|
32
|
-
`,document.head.appendChild(m)}function j(m,i={}){q()&&(document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>X(m,i),{once:!0}):queueMicrotask(()=>X(m,i)))}function X(m,i){if(N(),window.__STAR_DOM__?.destroy)try{window.__STAR_DOM__.destroy()}catch{}document.querySelectorAll(".star-ui, .star-canvas, .star-input").forEach(e=>e.remove());let
|
|
32
|
+
`,document.head.appendChild(m)}function j(m,i={}){q()&&(document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>X(m,i),{once:!0}):queueMicrotask(()=>X(m,i)))}function X(m,i){if(N(),window.__STAR_DOM__?.destroy)try{window.__STAR_DOM__.destroy()}catch{}document.querySelectorAll(".star-ui, .star-canvas, .star-input").forEach(e=>e.remove());let d=document.createElement("div");d.className="star-ui",document.body.appendChild(d);let t=document.createElement("canvas");t.className="star-canvas",document.body.appendChild(t);let u=t.getContext("2d",i.contextAttributes??{alpha:!0});if(!u)throw new Error("[star-canvas] Failed to get 2D context");if(i.preventContextMenu!==!1){let e=n=>n.preventDefault();t.addEventListener("contextmenu",e)}let a=document.createElement("div");a.className="star-input",document.body.appendChild(a);let y=[],T=[],A=[],O=null,w=null;Object.defineProperty(t,"onclick",{get:()=>O,set:e=>{w&&(a.removeEventListener("click",w),w=null),O=e,e&&(w=n=>e.call(t,n),a.addEventListener("click",w))}});let W=t.addEventListener.bind(t),Y=t.removeEventListener.bind(t),H=new WeakMap;t.addEventListener=function(e,n,r){if(/^(click|pointer|mouse|touch)/.test(e)&&typeof n=="function"){let o=(p=>n.call(t,p));H.set(n,o),a.addEventListener(e,o,r)}else W(e,n,r)},t.removeEventListener=function(e,n,r){if(/^(click|pointer|mouse|touch)/.test(e)&&typeof n=="function"){let o=H.get(n);o&&(a.removeEventListener(e,o,r),H.delete(n))}else Y(e,n,r)};let F=i.preset??"landscape",R=z[F]??z.landscape,L=i.width??R.width,M=i.height??R.height,D=i.maxPixelRatio??2,I=i.pixelRatio??"device",S=i.fit??"contain",b=1,s=L??1,l=M??1,k=new Set,C=null,x=[];function $(){return Math.min(typeof I=="number"?Math.max(1,I):Math.max(1,window.devicePixelRatio||1),D)}function h(){b=$();let e=document.body.getBoundingClientRect(),n=Math.max(1,Math.floor(e.width||window.innerWidth||800)),r=Math.max(1,Math.floor(e.height||window.innerHeight||600));if(L&&M){s=L,l=M;let c=s/l,v=n/r,f=1;if(S==="contain"?f=v>c?r/l:n/s:S==="cover"&&(f=v>c?n/s:r/l),S==="stretch")t.style.width="100%",t.style.height="100%";else{let g=Math.floor(s*f),P=Math.floor(l*f);t.style.width=`${g}px`,t.style.height=`${P}px`,t.style.position="absolute",t.style.left=`${Math.floor((n-g)/2)}px`,t.style.top=`${Math.floor((r-P)/2)}px`}}else if(M){l=M;let c=n/r;s=Math.floor(l*c),t.style.width="100%",t.style.height="100%",t.style.position="absolute",t.style.left="0",t.style.top="0"}else if(L){s=L;let c=n/r;l=Math.floor(s/c),t.style.width="100%",t.style.height="100%",t.style.position="absolute",t.style.left="0",t.style.top="0"}else s=n,l=r,t.style.width=`${s}px`,t.style.height=`${l}px`,t.style.position="absolute",t.style.left="0",t.style.top="0";let o=Math.max(1,Math.floor(s*b)),p=Math.max(1,Math.floor(l*b));t.width!==o&&(t.width=o),t.height!==p&&(t.height=p),u.setTransform(b,0,0,b,0,0),k.forEach(c=>c())}let G=new ResizeObserver(h);G.observe(document.body),x.push(()=>G.disconnect()),window.addEventListener("resize",h),x.push(()=>window.removeEventListener("resize",h));let _=window.visualViewport;_&&(_.addEventListener("resize",h),x.push(()=>_.removeEventListener("resize",h)));let E={stage:document.body,canvas:t,ctx:u,get width(){return s},get height(){return l},get dpr(){return b},resize:h,toStagePoint:e=>{let n=t.getBoundingClientRect(),r=(e.clientX-n.left)*(s/n.width),o=(e.clientY-n.top)*(l/n.height);return r=Math.max(0,Math.min(s,r)),o=Math.max(0,Math.min(l,o)),{x:r,y:o}},createDrag:()=>B(E.toStagePoint),onTap:e=>{y.push(e)},onMove:e=>{T.push(e)},onRelease:e=>{A.push(e)},on:(e,n,r,o)=>{let p=v=>{let g=v.target?.closest?.(n);g&&r.call(g,v)};document.addEventListener(e,p,o);let c=()=>document.removeEventListener(e,p,o);return x.push(c),c},loop:e=>{let r=0,o=!1,p=0,c=v=>{if(!o)return;let f=p?Math.min((v-p)/1e3,.1):0;p=v;try{e(f,v)}catch(g){console.error("[star-canvas] Game loop error:",g)}r=requestAnimationFrame(c)};return C={get running(){return o},start(){o||(o=!0,p=performance.now(),r=requestAnimationFrame(c))},stop(){o&&(o=!1,cancelAnimationFrame(r))}},C.start(),C},ui:{root:d,render:e=>{d.innerHTML!==e&&(d.innerHTML=e)},el:e=>d.querySelector(e),all:e=>d.querySelectorAll(e)},destroy:()=>{C?.stop(),x.forEach(e=>e()),x=[],k.clear(),t.parentElement&&t.parentElement.removeChild(t),d.parentElement&&d.parentElement.removeChild(d),a.parentElement&&a.parentElement.removeChild(a)},scoped:e=>{u.save();try{e()}finally{u.restore()}}};a.addEventListener("pointerdown",e=>{let n={...E.toStagePoint(e),event:e};y.forEach(r=>r(n))}),a.addEventListener("pointermove",e=>{let n={...E.toStagePoint(e),event:e};T.forEach(r=>r(n))}),a.addEventListener("pointerup",e=>{let n={...E.toStagePoint(e),event:e};A.forEach(r=>r(n))}),window.__STAR_DOM__={destroy:E.destroy},requestAnimationFrame(()=>requestAnimationFrame(()=>{h();try{m(E)}catch(e){console.error("[star-canvas] Game initialization failed:",e)}}))}export{B as createDragState,j as game,U as version};
|
package/dist/legacy.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var H=Object.defineProperty;var V=Object.getOwnPropertyDescriptor;var J=Object.getOwnPropertyNames;var K=Object.prototype.hasOwnProperty;var Q=(i,o)=>{for(var s in o)H(i,s,{get:o[s],enumerable:!0})},Z=(i,o,s,t)=>{if(o&&typeof o=="object"||typeof o=="function")for(let l of J(o))!K.call(i,l)&&l!==s&&H(i,l,{get:()=>o[l],enumerable:!(t=V(o,l))||t.enumerable});return i};var ee=i=>Z(H({},"__esModule",{value:!0}),i);var oe={};Q(oe,{createDragState:()=>_,game:()=>ne,version:()=>Y});module.exports=ee(oe);var Y="0.8.0",q={landscape:{width:640,height:360},portrait:{width:360,height:640},responsive:{}};function _(i){let o=null,s=0,t=0;return{point(l){return i(l)},grab(l,
|
|
1
|
+
"use strict";var H=Object.defineProperty;var V=Object.getOwnPropertyDescriptor;var J=Object.getOwnPropertyNames;var K=Object.prototype.hasOwnProperty;var Q=(i,o)=>{for(var s in o)H(i,s,{get:o[s],enumerable:!0})},Z=(i,o,s,t)=>{if(o&&typeof o=="object"||typeof o=="function")for(let l of J(o))!K.call(i,l)&&l!==s&&H(i,l,{get:()=>o[l],enumerable:!(t=V(o,l))||t.enumerable});return i};var ee=i=>Z(H({},"__esModule",{value:!0}),i);var oe={};Q(oe,{createDragState:()=>_,game:()=>ne,version:()=>Y});module.exports=ee(oe);var Y="0.8.0",q={landscape:{width:640,height:360},portrait:{width:360,height:640},responsive:{}};function _(i){let o=null,s=0,t=0;return{point(l){return i(l)},grab(l,c){let{x:y,y:T}=i(l);o=c,s=y-c.x,t=T-c.y},move(l){if(o){let{x:c,y}=i(l);o.x=c-s,o.y=y-t}},release(){let l=o;return o=null,l},get dragging(){return o}}}function F(){return typeof window<"u"&&typeof document<"u"}function te(){if(!F()||document.getElementById("star-canvas-base"))return;let i=document.createElement("style");i.id="star-canvas-base",i.textContent=`
|
|
2
2
|
html, body { height: 100%; }
|
|
3
3
|
body {
|
|
4
4
|
margin: 0; min-height: 100dvh; overflow: hidden; background: #000;
|
|
@@ -29,4 +29,4 @@
|
|
|
29
29
|
.star-ui textarea, .star-ui [data-interactive] {
|
|
30
30
|
pointer-events: auto;
|
|
31
31
|
}
|
|
32
|
-
`,document.head.appendChild(i)}function $(i,o={}){F()&&(document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>W(i,o),{once:!0}):queueMicrotask(()=>W(i,o)))}function W(i,o){if(te(),window.__STAR_DOM__?.destroy)try{window.__STAR_DOM__.destroy()}catch{}document.querySelectorAll(".star-ui, .star-canvas, .star-input").forEach(e=>e.remove());let s=document.createElement("div");s.className="star-ui",document.body.appendChild(s);let t=document.createElement("canvas");t.className="star-canvas",document.body.appendChild(t);let l=t.getContext("2d",o.contextAttributes??{alpha:!0});if(!l)throw new Error("[star-
|
|
32
|
+
`,document.head.appendChild(i)}function $(i,o={}){F()&&(document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>W(i,o),{once:!0}):queueMicrotask(()=>W(i,o)))}function W(i,o){if(te(),window.__STAR_DOM__?.destroy)try{window.__STAR_DOM__.destroy()}catch{}document.querySelectorAll(".star-ui, .star-canvas, .star-input").forEach(e=>e.remove());let s=document.createElement("div");s.className="star-ui",document.body.appendChild(s);let t=document.createElement("canvas");t.className="star-canvas",document.body.appendChild(t);let l=t.getContext("2d",o.contextAttributes??{alpha:!0});if(!l)throw new Error("[star-canvas] Failed to get 2D context");if(o.preventContextMenu!==!1){let e=n=>n.preventDefault();t.addEventListener("contextmenu",e)}let c=document.createElement("div");c.className="star-input",document.body.appendChild(c);let y=[],T=[],A=[],D=null,w=null;Object.defineProperty(t,"onclick",{get:()=>D,set:e=>{w&&(c.removeEventListener("click",w),w=null),D=e,e&&(w=n=>e.call(t,n),c.addEventListener("click",w))}});let B=t.addEventListener.bind(t),U=t.removeEventListener.bind(t),G=new WeakMap;t.addEventListener=function(e,n,r){if(/^(click|pointer|mouse|touch)/.test(e)&&typeof n=="function"){let a=(p=>n.call(t,p));G.set(n,a),c.addEventListener(e,a,r)}else B(e,n,r)},t.removeEventListener=function(e,n,r){if(/^(click|pointer|mouse|touch)/.test(e)&&typeof n=="function"){let a=G.get(n);a&&(c.removeEventListener(e,a,r),G.delete(n))}else U(e,n,r)};let N=o.preset??"landscape",I=q[N]??q.landscape,L=o.width??I.width,M=o.height??I.height,R=o.maxPixelRatio??2,k=o.pixelRatio??"device",O=o.fit??"contain",b=1,d=L??1,u=M??1,P=new Set,C=null,x=[];function j(){return Math.min(typeof k=="number"?Math.max(1,k):Math.max(1,window.devicePixelRatio||1),R)}function h(){b=j();let e=document.body.getBoundingClientRect(),n=Math.max(1,Math.floor(e.width||window.innerWidth||800)),r=Math.max(1,Math.floor(e.height||window.innerHeight||600));if(L&&M){d=L,u=M;let m=d/u,v=n/r,f=1;if(O==="contain"?f=v>m?r/u:n/d:O==="cover"&&(f=v>m?n/d:r/u),O==="stretch")t.style.width="100%",t.style.height="100%";else{let g=Math.floor(d*f),X=Math.floor(u*f);t.style.width=`${g}px`,t.style.height=`${X}px`,t.style.position="absolute",t.style.left=`${Math.floor((n-g)/2)}px`,t.style.top=`${Math.floor((r-X)/2)}px`}}else if(M){u=M;let m=n/r;d=Math.floor(u*m),t.style.width="100%",t.style.height="100%",t.style.position="absolute",t.style.left="0",t.style.top="0"}else if(L){d=L;let m=n/r;u=Math.floor(d/m),t.style.width="100%",t.style.height="100%",t.style.position="absolute",t.style.left="0",t.style.top="0"}else d=n,u=r,t.style.width=`${d}px`,t.style.height=`${u}px`,t.style.position="absolute",t.style.left="0",t.style.top="0";let a=Math.max(1,Math.floor(d*b)),p=Math.max(1,Math.floor(u*b));t.width!==a&&(t.width=a),t.height!==p&&(t.height=p),l.setTransform(b,0,0,b,0,0),P.forEach(m=>m())}let z=new ResizeObserver(h);z.observe(document.body),x.push(()=>z.disconnect()),window.addEventListener("resize",h),x.push(()=>window.removeEventListener("resize",h));let S=window.visualViewport;S&&(S.addEventListener("resize",h),x.push(()=>S.removeEventListener("resize",h)));let E={stage:document.body,canvas:t,ctx:l,get width(){return d},get height(){return u},get dpr(){return b},resize:h,toStagePoint:e=>{let n=t.getBoundingClientRect(),r=(e.clientX-n.left)*(d/n.width),a=(e.clientY-n.top)*(u/n.height);return r=Math.max(0,Math.min(d,r)),a=Math.max(0,Math.min(u,a)),{x:r,y:a}},createDrag:()=>_(E.toStagePoint),onTap:e=>{y.push(e)},onMove:e=>{T.push(e)},onRelease:e=>{A.push(e)},on:(e,n,r,a)=>{let p=v=>{let g=v.target?.closest?.(n);g&&r.call(g,v)};document.addEventListener(e,p,a);let m=()=>document.removeEventListener(e,p,a);return x.push(m),m},loop:e=>{let r=0,a=!1,p=0,m=v=>{if(!a)return;let f=p?Math.min((v-p)/1e3,.1):0;p=v;try{e(f,v)}catch(g){console.error("[star-canvas] Game loop error:",g)}r=requestAnimationFrame(m)};return C={get running(){return a},start(){a||(a=!0,p=performance.now(),r=requestAnimationFrame(m))},stop(){a&&(a=!1,cancelAnimationFrame(r))}},C.start(),C},ui:{root:s,render:e=>{s.innerHTML!==e&&(s.innerHTML=e)},el:e=>s.querySelector(e),all:e=>s.querySelectorAll(e)},destroy:()=>{C?.stop(),x.forEach(e=>e()),x=[],P.clear(),t.parentElement&&t.parentElement.removeChild(t),s.parentElement&&s.parentElement.removeChild(s),c.parentElement&&c.parentElement.removeChild(c)},scoped:e=>{l.save();try{e()}finally{l.restore()}}};c.addEventListener("pointerdown",e=>{let n={...E.toStagePoint(e),event:e};y.forEach(r=>r(n))}),c.addEventListener("pointermove",e=>{let n={...E.toStagePoint(e),event:e};T.forEach(r=>r(n))}),c.addEventListener("pointerup",e=>{let n={...E.toStagePoint(e),event:e};A.forEach(r=>r(n))}),window.__STAR_DOM__={destroy:E.destroy},requestAnimationFrame(()=>requestAnimationFrame(()=>{h();try{i(E)}catch(e){console.error("[star-canvas] Game initialization failed:",e)}}))}function ne(i,o={}){let s={preset:"responsive",...o};return $(i,s)}0&&(module.exports={createDragState,game,version});
|
package/dist/legacy.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var N="0.8.0",z={landscape:{width:640,height:360},portrait:{width:360,height:640},responsive:{}};function q(l){let i=null,s=0,t=0;return{point(m){return l(m)},grab(m,a){let{x:y,y:T}=l(m);i=a,s=y-a.x,t=T-a.y},move(m){if(i){let{x:a,y}=l(m);i.x=a-s,i.y=y-t}},release(){let m=i;return i=null,m},get dragging(){return i}}}function W(){return typeof window<"u"&&typeof document<"u"}function j(){if(!W()||document.getElementById("star-
|
|
1
|
+
var N="0.8.0",z={landscape:{width:640,height:360},portrait:{width:360,height:640},responsive:{}};function q(l){let i=null,s=0,t=0;return{point(m){return l(m)},grab(m,a){let{x:y,y:T}=l(m);i=a,s=y-a.x,t=T-a.y},move(m){if(i){let{x:a,y}=l(m);i.x=a-s,i.y=y-t}},release(){let m=i;return i=null,m},get dragging(){return i}}}function W(){return typeof window<"u"&&typeof document<"u"}function j(){if(!W()||document.getElementById("star-canvas-base"))return;let l=document.createElement("style");l.id="star-canvas-base",l.textContent=`
|
|
2
2
|
html, body { height: 100%; }
|
|
3
3
|
body {
|
|
4
4
|
margin: 0; min-height: 100dvh; overflow: hidden; background: #000;
|
|
@@ -29,4 +29,4 @@ var N="0.8.0",z={landscape:{width:640,height:360},portrait:{width:360,height:640
|
|
|
29
29
|
.star-ui textarea, .star-ui [data-interactive] {
|
|
30
30
|
pointer-events: auto;
|
|
31
31
|
}
|
|
32
|
-
`,document.head.appendChild(l)}function Y(l,i={}){W()&&(document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>X(l,i),{once:!0}):queueMicrotask(()=>X(l,i)))}function X(l,i){if(j(),window.__STAR_DOM__?.destroy)try{window.__STAR_DOM__.destroy()}catch{}document.querySelectorAll(".star-ui, .star-canvas, .star-input").forEach(e=>e.remove());let s=document.createElement("div");s.className="star-ui",document.body.appendChild(s);let t=document.createElement("canvas");t.className="star-canvas",document.body.appendChild(t);let m=t.getContext("2d",i.contextAttributes??{alpha:!0});if(!m)throw new Error("[star-
|
|
32
|
+
`,document.head.appendChild(l)}function Y(l,i={}){W()&&(document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>X(l,i),{once:!0}):queueMicrotask(()=>X(l,i)))}function X(l,i){if(j(),window.__STAR_DOM__?.destroy)try{window.__STAR_DOM__.destroy()}catch{}document.querySelectorAll(".star-ui, .star-canvas, .star-input").forEach(e=>e.remove());let s=document.createElement("div");s.className="star-ui",document.body.appendChild(s);let t=document.createElement("canvas");t.className="star-canvas",document.body.appendChild(t);let m=t.getContext("2d",i.contextAttributes??{alpha:!0});if(!m)throw new Error("[star-canvas] Failed to get 2D context");if(i.preventContextMenu!==!1){let e=n=>n.preventDefault();t.addEventListener("contextmenu",e)}let a=document.createElement("div");a.className="star-input",document.body.appendChild(a);let y=[],T=[],H=[],_=null,w=null;Object.defineProperty(t,"onclick",{get:()=>_,set:e=>{w&&(a.removeEventListener("click",w),w=null),_=e,e&&(w=n=>e.call(t,n),a.addEventListener("click",w))}});let F=t.addEventListener.bind(t),$=t.removeEventListener.bind(t),G=new WeakMap;t.addEventListener=function(e,n,o){if(/^(click|pointer|mouse|touch)/.test(e)&&typeof n=="function"){let r=(p=>n.call(t,p));G.set(n,r),a.addEventListener(e,r,o)}else F(e,n,o)},t.removeEventListener=function(e,n,o){if(/^(click|pointer|mouse|touch)/.test(e)&&typeof n=="function"){let r=G.get(n);r&&(a.removeEventListener(e,r,o),G.delete(n))}else $(e,n,o)};let B=i.preset??"landscape",A=z[B]??z.landscape,L=i.width??A.width,M=i.height??A.height,D=i.maxPixelRatio??2,I=i.pixelRatio??"device",O=i.fit??"contain",b=1,c=L??1,d=M??1,R=new Set,C=null,x=[];function U(){return Math.min(typeof I=="number"?Math.max(1,I):Math.max(1,window.devicePixelRatio||1),D)}function h(){b=U();let e=document.body.getBoundingClientRect(),n=Math.max(1,Math.floor(e.width||window.innerWidth||800)),o=Math.max(1,Math.floor(e.height||window.innerHeight||600));if(L&&M){c=L,d=M;let u=c/d,v=n/o,f=1;if(O==="contain"?f=v>u?o/d:n/c:O==="cover"&&(f=v>u?n/c:o/d),O==="stretch")t.style.width="100%",t.style.height="100%";else{let g=Math.floor(c*f),P=Math.floor(d*f);t.style.width=`${g}px`,t.style.height=`${P}px`,t.style.position="absolute",t.style.left=`${Math.floor((n-g)/2)}px`,t.style.top=`${Math.floor((o-P)/2)}px`}}else if(M){d=M;let u=n/o;c=Math.floor(d*u),t.style.width="100%",t.style.height="100%",t.style.position="absolute",t.style.left="0",t.style.top="0"}else if(L){c=L;let u=n/o;d=Math.floor(c/u),t.style.width="100%",t.style.height="100%",t.style.position="absolute",t.style.left="0",t.style.top="0"}else c=n,d=o,t.style.width=`${c}px`,t.style.height=`${d}px`,t.style.position="absolute",t.style.left="0",t.style.top="0";let r=Math.max(1,Math.floor(c*b)),p=Math.max(1,Math.floor(d*b));t.width!==r&&(t.width=r),t.height!==p&&(t.height=p),m.setTransform(b,0,0,b,0,0),R.forEach(u=>u())}let k=new ResizeObserver(h);k.observe(document.body),x.push(()=>k.disconnect()),window.addEventListener("resize",h),x.push(()=>window.removeEventListener("resize",h));let S=window.visualViewport;S&&(S.addEventListener("resize",h),x.push(()=>S.removeEventListener("resize",h)));let E={stage:document.body,canvas:t,ctx:m,get width(){return c},get height(){return d},get dpr(){return b},resize:h,toStagePoint:e=>{let n=t.getBoundingClientRect(),o=(e.clientX-n.left)*(c/n.width),r=(e.clientY-n.top)*(d/n.height);return o=Math.max(0,Math.min(c,o)),r=Math.max(0,Math.min(d,r)),{x:o,y:r}},createDrag:()=>q(E.toStagePoint),onTap:e=>{y.push(e)},onMove:e=>{T.push(e)},onRelease:e=>{H.push(e)},on:(e,n,o,r)=>{let p=v=>{let g=v.target?.closest?.(n);g&&o.call(g,v)};document.addEventListener(e,p,r);let u=()=>document.removeEventListener(e,p,r);return x.push(u),u},loop:e=>{let o=0,r=!1,p=0,u=v=>{if(!r)return;let f=p?Math.min((v-p)/1e3,.1):0;p=v;try{e(f,v)}catch(g){console.error("[star-canvas] Game loop error:",g)}o=requestAnimationFrame(u)};return C={get running(){return r},start(){r||(r=!0,p=performance.now(),o=requestAnimationFrame(u))},stop(){r&&(r=!1,cancelAnimationFrame(o))}},C.start(),C},ui:{root:s,render:e=>{s.innerHTML!==e&&(s.innerHTML=e)},el:e=>s.querySelector(e),all:e=>s.querySelectorAll(e)},destroy:()=>{C?.stop(),x.forEach(e=>e()),x=[],R.clear(),t.parentElement&&t.parentElement.removeChild(t),s.parentElement&&s.parentElement.removeChild(s),a.parentElement&&a.parentElement.removeChild(a)},scoped:e=>{m.save();try{e()}finally{m.restore()}}};a.addEventListener("pointerdown",e=>{let n={...E.toStagePoint(e),event:e};y.forEach(o=>o(n))}),a.addEventListener("pointermove",e=>{let n={...E.toStagePoint(e),event:e};T.forEach(o=>o(n))}),a.addEventListener("pointerup",e=>{let n={...E.toStagePoint(e),event:e};H.forEach(o=>o(n))}),window.__STAR_DOM__={destroy:E.destroy},requestAnimationFrame(()=>requestAnimationFrame(()=>{h();try{l(E)}catch(e){console.error("[star-canvas] Game initialization failed:",e)}}))}function K(l,i={}){let s={preset:"responsive",...i};return Y(l,s)}export{q as createDragState,K as game,N as version};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "star-canvas",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Canvas game utilities for reliable game initialization - part of Star SDK.",
|
|
6
6
|
"type": "module",
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
}
|
|
21
21
|
],
|
|
22
22
|
"skill": {
|
|
23
|
-
"name": "star-
|
|
24
|
-
"description": "Star
|
|
23
|
+
"name": "star-canvas-sdk",
|
|
24
|
+
"description": "Star Canvas SDK for canvas games and UI. Use when working with canvas rendering, game loops, sprites, input handling, UI overlays, or the game() initialization function."
|
|
25
25
|
}
|
|
26
26
|
},
|
|
27
27
|
"exports": {
|