handler-playable-sdk 0.1.0 → 0.1.2

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.
@@ -0,0 +1,93 @@
1
+ import{b as it}from"../chunk-HFNWDPEC.mjs";import*as I from"three";async function An(e,t={}){let n=()=>{let c=e.style.width&&e.style.width!=="auto"?parseFloat(e.style.width):e.clientWidth||window.innerWidth||320,u=e.style.height&&e.style.height!=="auto"?parseFloat(e.style.height):e.clientHeight||window.innerHeight||480;return{width:c,height:u}};e.innerHTML="",e.style.position="relative",e.style.display="block",e.style.width=e.style.width||"100%",e.style.height=e.style.height||"100%",e.style.minHeight=e.style.minHeight||"100%",e.style.maxWidth="100%",e.style.maxHeight="100%",e.style.boxSizing="border-box",e.style.overflow="hidden",t.background&&(e.style.background=t.background);let o=document.createElement("div");o.setAttribute("style",["position:absolute","inset:0","width:100%","height:100%","display:block",`background:${t.background||"transparent"}`,"color:var(--h-text, #f4f6ff)",'font-family:var(--h-font-main, "Inter", "Helvetica Neue", Arial, sans-serif)',"box-sizing:border-box"].join(";")),e.appendChild(o);let a=document.createElement("div");a.setAttribute("style",["position:absolute","inset:0","width:100%","height:100%","pointer-events:auto"].join(";")),o.appendChild(a);let s=new I.Scene,{width:i,height:l}=n(),p=new I.OrthographicCamera(-i/2,i/2,l/2,-l/2,.1,1e3);p.position.set(0,0,1),p.lookAt(0,0,0);let r=new I.WebGLRenderer({antialias:!0,alpha:!0,preserveDrawingBuffer:!0});r.setPixelRatio(window.devicePixelRatio||1),r.setSize(i,l),r.setClearColor(0,0),r.domElement.style.position="absolute",r.domElement.style.top="0",r.domElement.style.left="0",r.domElement.style.width="100%",r.domElement.style.height="100%",r.domElement.style.display="block",r.domElement.style.pointerEvents="auto",a.appendChild(r.domElement);let m=c=>{let u=n(),f=typeof(c==null?void 0:c.width)=="number"?c.width:u.width,y=typeof(c==null?void 0:c.height)=="number"?c.height:u.height;r.setSize(f,y),r.setPixelRatio(window.devicePixelRatio||1),p.left=-f/2,p.right=f/2,p.top=y/2,p.bottom=-y/2,p.updateProjectionMatrix()};requestAnimationFrame(()=>m());let h=!1;it.on("pause",()=>{h=!0,document.querySelectorAll("audio").forEach(u=>u.pause())}),it.on("resume",()=>{h=!1,document.querySelectorAll("audio").forEach(u=>{u.currentTime>0&&!u.ended&&u.play().catch(()=>{})})}),it.on("resize",({payload:c})=>{m({width:c==null?void 0:c.width,height:c==null?void 0:c.height})}),window.addEventListener("resize",()=>m());let d=document.createElement("div");return d.setAttribute("style",["position:absolute","inset:0","display:flex","flex-direction:column","align-items:center","justify-content:flex-start","gap:12px","pointer-events:none","font-family:Arial,sans-serif","padding:20px 16px","padding-bottom:clamp(24px, 6vh, 96px)","box-sizing:border-box","z-index:2"].join(";")),e.appendChild(d),{scene:s,camera:p,renderer:r,overlay:d,applySize:m}}import*as S from"three";var rt=class{constructor(t){var n,o;this.position=(t==null?void 0:t.position)||{x:0,y:0},this.scale=(n=t==null?void 0:t.scale)!=null?n:1,this.rotation=(o=t==null?void 0:t.rotation)!=null?o:0}update(t){t.position!==void 0&&(this.position={...t.position}),t.scale!==void 0&&(this.scale=t.scale),t.rotation!==void 0&&(this.rotation=t.rotation)}syncToThree(t){t.position.set(this.position.x,this.position.y,0),t.scale.set(this.scale,this.scale,this.scale),t.rotation.z=this.rotation}},lt=class{constructor(t){var n,o,a,s;this.z_index=(n=t==null?void 0:t.z_index)!=null?n:0,this.alpha=(o=t==null?void 0:t.alpha)!=null?o:1,this.visible=(a=t==null?void 0:t.visible)!=null?a:!0,this.tint=(s=t==null?void 0:t.tint)!=null?s:null}update(t){t.z_index!==void 0&&(this.z_index=t.z_index),t.alpha!==void 0&&(this.alpha=t.alpha),t.visible!==void 0&&(this.visible=t.visible),t.tint!==void 0&&(this.tint=t.tint)}syncToThree(t){if(t.renderOrder=this.z_index,t.visible=this.visible,t instanceof S.Mesh&&t.material&&(Array.isArray(t.material)?t.material.forEach(n=>{n instanceof S.Material&&(n.opacity=this.alpha,n.transparent=this.alpha<1)}):t.material instanceof S.Material&&(t.material.opacity=this.alpha,t.material.transparent=this.alpha<1)),this.tint!==null&&t instanceof S.Mesh&&t.material){let n=typeof this.tint=="string"?new S.Color(this.tint):new S.Color(this.tint);Array.isArray(t.material)?t.material.forEach(o=>{(o instanceof S.MeshBasicMaterial||o instanceof S.MeshStandardMaterial)&&o.color.copy(n)}):(t.material instanceof S.MeshBasicMaterial||t.material instanceof S.MeshStandardMaterial)&&t.material.color.copy(n)}}},ct=class{constructor(t,n,o,a){this.instanceId=t,this.objectConfig=n,this.threeObject=o,this._config=a,this.transform=new rt(a.transform),this.renderer=new lt(a.render),this.sync()}sync(){this.transform.syncToThree(this.threeObject),this.renderer.syncToThree(this.threeObject)}updateConfig(t){this._config=t,t.transform&&this.transform.update(t.transform),t.render&&this.renderer.update(t.render),this.sync()}getComponent(t){return this._config[t]}getPosition(){return{...this.transform.position}}setPosition(t,n){this.transform.position={x:t,y:n},this.transform.syncToThree(this.threeObject)}getAlpha(){return this.renderer.alpha}setAlpha(t){this.renderer.alpha=t,this.renderer.syncToThree(this.threeObject)}getVisible(){return this.renderer.visible}setVisible(t){this.renderer.visible=t,this.renderer.syncToThree(this.threeObject)}},Tt=class{constructor(t){this.objects=new Map;this.config=t}create(t,n){let o=this.config.objects.get(t);if(!o)throw new Error(`Object config not found: ${t}`);let a=new ct(t,o.object_config||t,n,o);return this.objects.set(t,a),a}get(t){return this.objects.get(t)}updateConfig(t){this.config=t;for(let[n,o]of this.objects.entries()){let a=t.objects.get(n);a&&o.updateConfig(a)}}getAll(){return Array.from(this.objects.values())}remove(t){this.objects.delete(t)}clear(){this.objects.clear()}};var pt={"brand.primary":{family:"Arial, sans-serif",weight:"400"},"brand.warning":{family:"Arial Black, Arial, sans-serif",weight:"900"},"brand.heading":{family:"Arial Black, Arial, sans-serif",weight:"800"},"brand.body":{family:"Arial, sans-serif",weight:"400"}};function G(e){let t=pt[e];return t?t.family:(console.warn(`Font ID "${e}" not found in registry, using fallback`),"Arial, sans-serif")}function X(e){var n;let t=pt[e];return t&&(n=t.weight)!=null?n:"400"}function Fn(e,t){pt[e]=t}function Ln(){return Object.keys(pt)}import*as U from"three";function Z(e){return{element:e,get alpha(){return parseFloat(e.style.opacity||"1")},set alpha(t){e.style.opacity=t.toString()},get visible(){return e.style.display!=="none"},set visible(t){e.style.display=t?"":"none"},position:{set(t,n){e.style.left=`${t}px`,e.style.top=`${n}px`},get x(){return parseFloat(e.style.left||"0")},get y(){return parseFloat(e.style.top||"0")}},scale:{set(t,n){e.style.transform=`scale(${t})`},get x(){let t=e.style.transform.match(/scale\(([^)]+)\)/);return t?parseFloat(t[1]):1}}}}function Dn(e,t,n){var Lt,Dt,kt,Wt,zt,Yt,Bt,Pt,Gt,Xt,qt,Nt,Vt,Jt,Kt,Qt,Zt,jt,Ot,It,Ut,te,ee,ne,ae,se,oe,ie,re,le,ce,pe,me,de,ue,he,ye,fe,ge,be,Te,xe,_e,Ee,we,Se,He,ve,Re,Ce,Me,$e,Ae,Fe,Le,De,ke,We,ze,Ye,Be,Pe;let o=e.objects.get("ui_endgame_1"),a=e.objects.get("ui_endgame_logo_1"),s=e.objects.get("ui_endgame_title_1"),i=e.objects.get("ui_endgame_subtitle_1"),l=e.objects.get("ui_endgame_footer_1"),p=e.objects.get("ui_endgame_cta_1"),r=e.objects.get("ui_endgame_cta_hint_1"),m=e.objects.get("ui_endgame_hand_1"),h=e.engine.runtime||{},d=((Lt=o==null?void 0:o.gameplay)==null?void 0:Lt.tuning)||{},c=(o==null?void 0:o.render)||{},u=(Dt=d.panel_width)!=null?Dt:320,f=(kt=d.panel_height)!=null?kt:400,y=(Wt=d.panel_padding)!=null?Wt:32,w=(zt=d.panel_radius)!=null?zt:24,b=c.background_color||d.panel_bg_color||"#1a0a0a",T=c.background_alpha!==void 0&&c.background_alpha!==null?c.background_alpha:(Yt=d.panel_bg_alpha)!=null?Yt:.98,g=c.border_color||d.panel_border_color||"#ffffff",_=(Bt=d.panel_border_width)!=null?Bt:2,R=(Pt=d.panel_border_alpha)!=null?Pt:.3,x=document.createElement("div");x.style.cssText=`
2
+ position: absolute;
3
+ width: ${u}px;
4
+ height: ${f}px;
5
+ background: ${b};
6
+ opacity: ${T};
7
+ border: ${_}px solid ${g};
8
+ border-opacity: ${R};
9
+ border-radius: ${w}px;
10
+ display: flex;
11
+ flex-direction: column;
12
+ align-items: center;
13
+ justify-content: center;
14
+ transform: translate(-50%, -50%);
15
+ opacity: 0;
16
+ visibility: hidden;
17
+ pointer-events: auto;
18
+ `;let M=Z(x);M.element=x;let k=((Gt=a==null?void 0:a.gameplay)==null?void 0:Gt.tuning)||{},H=(a==null?void 0:a.transform)||{},C=(Xt=k.logo_size)!=null?Xt:56,D=(qt=H.scale)!=null?qt:1,W=(Vt=(Nt=H.offset)==null?void 0:Nt.y)!=null?Vt:-130,j=(Jt=k.logo_alpha)!=null?Jt:1,q=new U.SpriteMaterial({map:n||void 0,transparent:!0,alphaTest:.1}),E=new U.Sprite(q);E.position.set(0,W,0),E.material.opacity=0;let z=0,N=0;if(n&&(z=((Kt=n.image)==null?void 0:Kt.width)||100,N=((Qt=n.image)==null?void 0:Qt.height)||100),z>0&&N>0){let O=z/N,gt,bt;O>1?(gt=C,bt=C/O):(bt=C,gt=C*O);let Mn=gt/z*D,$n=bt/N*D;E.scale.set(Mn,$n,1)}else{let O=C/100*D;E.scale.set(O,O,1)}E.targetAlpha=j,E.baseScaleX=E.scale.x,E.baseScaleY=E.scale.y;let $=s==null?void 0:s.ui,Y=((Zt=s==null?void 0:s.gameplay)==null?void 0:Zt.tuning)||{},qe=($==null?void 0:$.text)||"MISSION ACCOMPLISHED",xt=($==null?void 0:$.font)||"brand.heading",Ne=($==null?void 0:$.fontSize)||24,Ve=(jt=$==null?void 0:$.letterSpacing)!=null?jt:1,nt=(Ot=s==null?void 0:s.render)==null?void 0:Ot.tint,Je=typeof nt=="string"?nt:nt?`#${nt.toString(16).padStart(6,"0")}`:"#00FF88",Ke=u-y*2-30,Qe=Y.font_weight_override?Y.font_weight_override:X(xt),V=document.createElement("div");V.textContent=qe,V.style.cssText=`
19
+ font-family: ${G(xt)};
20
+ font-size: ${Ne}px;
21
+ font-weight: ${Qe};
22
+ color: ${Je};
23
+ text-align: center;
24
+ letter-spacing: ${Ve}px;
25
+ -webkit-text-stroke: ${(It=Y.stroke_width)!=null?It:2}px ${Y.stroke_color||"#000000"};
26
+ text-shadow: ${(Ut=Y.shadow_distance)!=null?Ut:4}px ${(te=Y.shadow_distance)!=null?te:4}px ${(ee=Y.shadow_blur)!=null?ee:8}px rgba(0,0,0,${(ne=Y.shadow_alpha)!=null?ne:.9});
27
+ opacity: 0;
28
+ position: absolute;
29
+ transform: translate(-50%, -50%);
30
+ white-space: nowrap;
31
+ max-width: ${Ke}px;
32
+ `;let _t=(ae=d.title_offset_y)!=null?ae:30,Ze=_t+((se=Y.animation_start_y_offset)!=null?se:-20);V.style.top=`${Ze}px`,V.style.left="50%";let Et=Z(V);Et.element=V,x.appendChild(V);let A=i==null?void 0:i.ui,wt=((oe=i==null?void 0:i.gameplay)==null?void 0:oe.tuning)||{},je=(A==null?void 0:A.text)||"RESCUE COMPLETE",St=(A==null?void 0:A.font)||"brand.body",Oe=(A==null?void 0:A.fontSize)||11,Ie=(ie=A==null?void 0:A.letterSpacing)!=null?ie:.5,at=(re=i==null?void 0:i.render)==null?void 0:re.tint,Ue=typeof at=="string"?at:at?`#${at.toString(16).padStart(6,"0")}`:"#B0B0B0",J=document.createElement("div");J.textContent=je,J.style.cssText=`
33
+ font-family: ${G(St)};
34
+ font-size: ${Oe}px;
35
+ font-weight: ${X(St)};
36
+ color: ${Ue};
37
+ text-align: center;
38
+ letter-spacing: ${Ie}px;
39
+ opacity: 0;
40
+ position: absolute;
41
+ transform: translate(-50%, -50%);
42
+ white-space: nowrap;
43
+ `;let tn=_t+20+((le=wt.animation_start_y_offset)!=null?le:-10);J.style.top=`${tn}px`,J.style.left="50%";let dt=Z(J);dt.element=J,dt.animationStartYOffset=(ce=wt.animation_start_y_offset)!=null?ce:-10,x.appendChild(J);let B=l==null?void 0:l.ui,Ht=((pe=l==null?void 0:l.gameplay)==null?void 0:pe.tuning)||{},en=(B==null?void 0:B.text)||((me=h.ui)==null?void 0:me.cta_hint)||"Continue the adventure!",vt=(B==null?void 0:B.font)||"brand.body",nn=(B==null?void 0:B.fontSize)||16,st=(de=l==null?void 0:l.render)==null?void 0:de.tint,an=typeof st=="string"?st:st?`#${st.toString(16).padStart(6,"0")}`:"#FFFFFF",sn=(ue=Ht.max_width)!=null?ue:u-y*2,on=(he=Ht.line_height)!=null?he:1.4,K=document.createElement("div");K.textContent=en,K.style.cssText=`
44
+ font-family: ${G(vt)};
45
+ font-size: ${nn}px;
46
+ font-weight: ${X(vt)};
47
+ color: ${an};
48
+ text-align: center;
49
+ opacity: 0;
50
+ position: absolute;
51
+ transform: translate(-50%, -50%);
52
+ max-width: ${sn}px;
53
+ line-height: ${on};
54
+ word-wrap: break-word;
55
+ `;let rn=(ye=d.footer_offset_y)!=null?ye:120;K.style.top=`${rn}px`,K.style.left="50%";let ut=Z(K);ut.element=K;let ln=((fe=l==null?void 0:l.render)==null?void 0:fe.alpha)!==void 0&&((ge=l==null?void 0:l.render)==null?void 0:ge.alpha)!==null?l.render.alpha:1;ut.targetAlpha=ln,x.appendChild(K);let P=((be=p==null?void 0:p.gameplay)==null?void 0:be.tuning)||{},F=p==null?void 0:p.ui,cn=(Te=P.button_width)!=null?Te:260,pn=(xe=P.button_height)!=null?xe:56,mn=(_e=P.button_radius)!=null?_e:16,dn=P.button_bg_color||((Ee=h.theme)==null?void 0:Ee.cta_background)||"#ffb43b",un=(we=P.button_bg_alpha)!=null?we:1,hn=P.button_border_color||"#ffffff",yn=(Se=P.button_border_width)!=null?Se:2,Zn=(He=P.button_border_alpha)!=null?He:.2,ht=(ve=d.cta_offset_y)!=null?ve:160,v=document.createElement("button");v.style.cssText=`
56
+ width: ${cn}px;
57
+ height: ${pn}px;
58
+ background: ${dn};
59
+ opacity: ${un};
60
+ border: ${yn}px solid ${hn};
61
+ border-radius: ${mn}px;
62
+ cursor: pointer;
63
+ opacity: 0;
64
+ position: absolute;
65
+ transform: translate(-50%, -50%);
66
+ box-shadow: inset 0 0 1px rgba(0,0,0,0.15);
67
+ `,v.style.top=`${ht}px`,v.style.left="50%";let Rt=Z(v);Rt.element=v,x.appendChild(v);let fn=(F==null?void 0:F.text)||((Re=h.ui)==null?void 0:Re.cta_label_end)||"DOWNLOAD",Ct=(F==null?void 0:F.font)||"brand.heading",gn=(F==null?void 0:F.fontSize)||20,bn=P.button_text_color||((Ce=h.theme)==null?void 0:Ce.cta_text)||"#1a0a0a";v.textContent=fn,v.style.fontFamily=G(Ct),v.style.fontSize=`${gn}px`,v.style.fontWeight=String(X(Ct)),v.style.color=bn,v.style.letterSpacing=`${(Me=F==null?void 0:F.letterSpacing)!=null?Me:1}px`;let Mt=Z(v);Mt.element=v;let L=r==null?void 0:r.ui,$t=(($e=r==null?void 0:r.gameplay)==null?void 0:$e.tuning)||{},Tn=(L==null?void 0:L.text)||"Play the full game",At=(L==null?void 0:L.font)||"brand.body",xn=(L==null?void 0:L.fontSize)||11,_n=(Ae=L==null?void 0:L.letterSpacing)!=null?Ae:0,ot=(Fe=r==null?void 0:r.render)==null?void 0:Fe.tint,En=typeof ot=="string"?ot:ot?`#${ot.toString(16).padStart(6,"0")}`:"#CCCCCC",Q=document.createElement("div");Q.textContent=Tn,Q.style.cssText=`
68
+ font-family: ${G(At)};
69
+ font-size: ${xn}px;
70
+ font-weight: ${X(At)};
71
+ color: ${En};
72
+ text-align: center;
73
+ letter-spacing: ${_n}px;
74
+ opacity: 0;
75
+ position: absolute;
76
+ transform: translate(-50%, -50%);
77
+ white-space: nowrap;
78
+ `;let wn=ht+35+((Le=$t.animation_start_y_offset)!=null?Le:5);Q.style.top=`${wn}px`,Q.style.left="50%";let yt=Z(Q);yt.element=Q,yt.animationStartYOffset=(De=$t.animation_start_y_offset)!=null?De:5,x.appendChild(Q);let ft=((ke=m==null?void 0:m.gameplay)==null?void 0:ke.tuning)||{},Sn=(We=ft.hand_offset_x)!=null?We:50,Hn=(ze=ft.hand_offset_y)!=null?ze:50,vn=(Be=(Ye=m==null?void 0:m.transform)==null?void 0:Ye.scale)!=null?Be:.1875,Rn=(Pe=ft.hand_scale_multiplier)!=null?Pe:2.5,Cn=new U.SpriteMaterial({map:t||void 0,transparent:!0,alphaTest:.1}),et=new U.Sprite(Cn),Ft=vn*Rn*100;return et.scale.set(Ft,Ft,1),et.position.set(Sn,ht+Hn,0),et.material.opacity=0,et.visible=!1,{panel:M,logo:E,title:Et,subtitle:dt,footer:ut,ctaButton:Rt,ctaText:Mt,ctaHint:yt,hand:et}}function kn(e,t,n){var R,x,M,k,H,C,D,W;let o=t.objects.get("ui_endgame_1"),a=((R=o==null?void 0:o.gameplay)==null?void 0:R.tuning)||{},s=(x=a.animation_duration_ms)!=null?x:800,i=(M=a.fade_in_duration_ms)!=null?M:600,l=(k=a.scale_animation_intensity)!=null?k:.1,p=(H=a.logo_animation_delay_ms)!=null?H:100,r=(C=a.title_animation_delay_ms)!=null?C:200,m=(D=a.footer_animation_delay_ms)!=null?D:300,h=(W=a.cta_animation_delay_ms)!=null?W:400,{panel:d,logo:c,title:u,subtitle:f,footer:y,ctaButton:w,ctaText:b,ctaHint:T}=e;d.visible=!0,d.element.style.visibility="visible";let g=Date.now(),_=()=>{let j=Date.now()-g,q=Math.min(j/i,1),E=1-Math.pow(1-q,3);d.alpha=E,d.element.style.opacity=E.toString();let z=1+l*(1-E);d.element.style.transform=`translate(-50%, -50%) scale(${z})`,q<1?requestAnimationFrame(_):(setTimeout(()=>Wn(c,s,t),p),setTimeout(()=>{zn(u,s),setTimeout(()=>Yn(f,s),50)},r),setTimeout(()=>Bn(y,s),m),setTimeout(()=>{Pn(w,b,s),setTimeout(()=>Gn(T,s),50),n&&n()},h))};_()}function Wn(e,t,n){var d,c,u,f,y;let o=n==null?void 0:n.objects.get("ui_endgame_logo_1"),s=(c=(((d=o==null?void 0:o.gameplay)==null?void 0:d.tuning)||{}).animation_start_scale)!=null?c:1.2,i=Date.now(),l=e.material.opacity,p=(u=e.targetAlpha)!=null?u:1,r=(f=e.baseScaleX)!=null?f:e.scale.x,m=(y=e.baseScaleY)!=null?y:e.scale.y,h=()=>{let w=Date.now()-i,b=Math.min(w/t,1),T=1-Math.pow(1-b,2);e.material.opacity=l+(p-l)*T;let g=s+(1-s)*T;e.scale.set(r*g,m*g,1),b<1&&requestAnimationFrame(h)};h()}function zn(e,t){let n=Date.now(),o=parseFloat(e.element.style.opacity||"0"),a=parseFloat(e.element.style.top||"0"),s=()=>{let i=Date.now()-n,l=Math.min(i/t,1),p=1-Math.pow(1-l,2);e.element.style.opacity=(o+(1-o)*p).toString(),e.element.style.top=`${a-20*(1-p)}px`,l<1&&requestAnimationFrame(s)};s()}function Yn(e,t){var l;let n=Date.now(),o=parseFloat(e.element.style.opacity||"0"),a=parseFloat(e.element.style.top||"0"),s=a-((l=e.animationStartYOffset)!=null?l:-10),i=()=>{let p=Date.now()-n,r=Math.min(p/t,1),m=1-Math.pow(1-r,2);e.element.style.opacity=(o+(1-o)*m).toString(),e.element.style.top=`${a+(s-a)*m}px`,r<1&&requestAnimationFrame(i)};i()}function Bn(e,t){var i;let n=Date.now(),o=parseFloat(e.element.style.opacity||"0"),a=(i=e.targetAlpha)!=null?i:1,s=()=>{let l=Date.now()-n,p=Math.min(l/t,1),r=1-Math.pow(1-p,2);e.element.style.opacity=(o+(a-o)*r).toString(),p<1&&requestAnimationFrame(s)};s()}function Pn(e,t,n){let o=Date.now(),a=parseFloat(e.element.style.opacity||"0"),s=()=>{let i=Date.now()-o,l=Math.min(i/n,1),p=1-Math.pow(1-l,2);e.element.style.opacity=(a+(1-a)*p).toString(),t.element.style.opacity=(a+(1-a)*p).toString(),e.element.style.transform=`translate(-50%, -50%) scale(${1+.1*(1-p)})`,l<1&&requestAnimationFrame(s)};s()}function Gn(e,t){var l;let n=Date.now(),o=parseFloat(e.element.style.opacity||"0"),a=parseFloat(e.element.style.top||"0"),s=a-((l=e.animationStartYOffset)!=null?l:5),i=()=>{let p=Date.now()-n,r=Math.min(p/t,1),m=1-Math.pow(1-r,2);e.element.style.opacity=(o+(1-o)*m).toString(),e.element.style.top=`${a+(s-a)*m}px`,r<1&&requestAnimationFrame(i)};i()}function Xn(e,t,n,o){var m,h,d,c;let a=n.objects.get("ui_endgame_hand_1"),s=((m=a==null?void 0:a.gameplay)==null?void 0:m.tuning)||{},i=(h=s.click_animation_duration_ms)!=null?h:600,l=(d=s.click_delay_ms)!=null?d:2e3,p=(c=s.click_repeat_delay_ms)!=null?c:3e3,r=()=>{var x,M;e.visible=!0,e.material.opacity=1;let u=e.position.x,f=e.position.y,y=(x=s.hand_offset_x)!=null?x:50,w=(M=s.hand_offset_y)!=null?M:50,b=t.element.getBoundingClientRect(),T=y,g=w,_=Date.now(),R=()=>{var E,z,N;let k=Date.now()-_,H=Math.min(k/i,1),C=H<.5?2*H*H:1-Math.pow(-2*H+2,2)/2;e.position.set(u+(T-u)*C,f+(g-f)*C,0);let D=(z=(E=a==null?void 0:a.transform)==null?void 0:E.scale)!=null?z:.1875,W=(N=s.hand_scale_multiplier)!=null?N:2.5,j=D*W*100,q=j+j*.2*Math.sin(H*Math.PI);e.scale.set(q,q,1),H<1?requestAnimationFrame(R):(t.element.style.transform="translate(-50%, -50%) scale(0.95)",setTimeout(()=>{t.element.style.transform="translate(-50%, -50%) scale(1)",o()},100),setTimeout(()=>{e.material.opacity=0,setTimeout(()=>{e.position.set(u,f,0),r()},p)},500))};R()};setTimeout(r,l)}import*as mt from"three";function qn(e,t,n){var h,d,c,u;let o=t.objects.get("hand_tutorial_1"),a=((h=o==null?void 0:o.gameplay)==null?void 0:h.tuning)||{},s=(o==null?void 0:o.render)||{},i=(o==null?void 0:o.transform)||{},l=new mt.SpriteMaterial({map:e||void 0,transparent:!0,alphaTest:.1}),p=new mt.Sprite(l);p.position.set(n.x,n.y,0),p.material.opacity=0;let r=(d=a.hand_scale_multiplier)!=null?d:2.5,m=(c=i.scale)!=null?c:.1875;return p.scale.set(m*r*100,m*r*100,1),p.renderOrder=(u=s.z_index)!=null?u:99999,p}function Nn(e){var u,f,y,w,b,T,g,_,R;let t=e.objects.get("ui_tutorial_1"),n=t==null?void 0:t.ui,o=(t==null?void 0:t.render)||{},a=((u=e.engine.runtime)==null?void 0:u.ui_styles)||{},s=((f=e.engine.runtime)==null?void 0:f.ui)||{},i=(n==null?void 0:n.text)||s.tutorial_label||s.label_text||"CLEAN!",l=(n==null?void 0:n.font)||"brand.warning",p=(n==null?void 0:n.fontSize)||a.label_font_size||52,r=(w=n==null?void 0:n.letterSpacing)!=null?w:(y=a.label_letter_spacing)!=null?y:-1,m=(n==null?void 0:n.align)||"center",h=o.tint,d=typeof h=="string"?h:h?`#${h.toString(16).padStart(6,"0")}`:a.label_fill||"#FFF1C1",c=document.createElement("div");return c.textContent=i,c.style.cssText=`
79
+ font-family: ${G(l)};
80
+ font-size: ${p}px;
81
+ font-weight: ${X(l)};
82
+ color: ${d};
83
+ text-align: ${m};
84
+ letter-spacing: ${r}px;
85
+ text-shadow: ${(b=a.label_shadow_distance)!=null?b:2}px ${(T=a.label_shadow_distance)!=null?T:2}px ${(g=a.label_shadow_blur)!=null?g:4}px rgba(0,0,0,${(_=a.label_shadow_alpha)!=null?_:.8});
86
+ -webkit-text-stroke: ${a.label_stroke||"#8B0000"} 2px;
87
+ opacity: ${(R=o.alpha)!=null?R:0};
88
+ visibility: ${o.visible!==!1?"visible":"hidden"};
89
+ pointer-events: none;
90
+ position: absolute;
91
+ transform: translate(-50%, -50%);
92
+ white-space: nowrap;
93
+ `,c}function Vn(e,t,n,o,a){var p,r,m,h,d,c,u;let s=a.objects.get("hand_tutorial_1"),i=((p=s==null?void 0:s.gameplay)==null?void 0:p.tuning)||{},l=(s==null?void 0:s.transform)||{};if(!o){let f=(r=i.animation_duration)!=null?r:1.5,y=n%f/f,w=y<.5?2*y*y:-1+(4-2*y)*y,b=(m=i.x_offset)!=null?m:0,T=(h=i.y_offset)!=null?h:0,g=(d=i.animation_range)!=null?d:40,_=g*.7,R=g,x=t.x+b+_,M=t.y+T+R,k=x+_,H=M+R;e.position.set(x+(k-x)*w,M+(H-M)*w,0);let C=(c=l.scale)!=null?c:.1875,D=(u=i.hand_scale_multiplier)!=null?u:2.5,W=C*D*100;e.scale.set(W,W,1)}}import*as tt from"three";var Ge=new tt.TextureLoader;async function Xe(e,t,n=16777215,o=!1){try{let s=(globalThis.INLINE_ASSETS||{})[e];return await Ge.loadAsync(s||e)}catch{console.warn(`Asset missing: ${e}. Using placeholder.`);let s=document.createElement("canvas");s.width=64,s.height=64;let i=s.getContext("2d");return i&&(i.fillStyle=`#${n.toString(16).padStart(6,"0")}`,o?i.fillRect(0,0,30,60):(i.beginPath(),i.arc(32,32,30,0,Math.PI*2),i.fill(),i.fillRect(27,32,10,40))),new tt.CanvasTexture(s)}}async function Jn(e,t,n){var u,f,y,w;let a=(globalThis.INLINE_ASSETS||{})[e]||e,s;try{s=await Ge.loadAsync(a),console.log("[character] loaded sheet",{path:e,sourceUsed:a})}catch(b){let _=((n.gameplay.character_sheet||{}).fallback_color||"#ff00ff").replace("#","");s=await Xe(e,t,parseInt(_,16),!0),console.warn("[character] fallback loadAsset used",{path:e,err:b})}if(!s)return[];let i=n.gameplay.character_sheet||{},l=(u=i.cols)!=null?u:3,p=(f=i.rows)!=null?f:2,r=((y=s.image)==null?void 0:y.width)||0,m=((w=s.image)==null?void 0:w.height)||0,h=r/l,d=m/p;if(!Number.isFinite(h)||!Number.isFinite(d)||h<=0||d<=0)return[s];let c=[];for(let b=0;b<p;b++)for(let T=0;T<l;T++){let g=document.createElement("canvas");g.width=h,g.height=d;let _=g.getContext("2d");_&&s.image&&_.drawImage(s.image,T*h,b*d,h,d,0,0,h,d),c.push(new tt.CanvasTexture(g))}return c.length>2&&c.push(...c.slice(1,-1).reverse()),console.log("[character] frames prepared",{count:c.length}),c}function Kn(e,t){var h,d,c,u;let n=t.gameplay.brush||{},o=t.theme.brush_color||"#ffffff",a=(h=n.radius)!=null?h:20,s=(d=n.inner_radius)!=null?d:15,i=(c=n.alpha)!=null?c:.8,l=(u=n.inner_alpha)!=null?u:.3,p=n.inner_color||"#ffffff",r=document.createElement("canvas");r.width=a*2,r.height=a*2;let m=r.getContext("2d");return m&&(m.clearRect(0,0,r.width,r.height),m.beginPath(),m.arc(a,a,a,0,Math.PI*2),m.fillStyle=o,m.globalAlpha=i,m.fill(),m.beginPath(),m.arc(a,a,s,0,Math.PI*2),m.fillStyle=p,m.globalAlpha=l,m.fill()),new tt.CanvasTexture(r)}export{ct as GameObject,Tt as GameObjectManager,lt as Renderer,rt as Transform,Xn as animateHandClick,kn as animatePanelEntrance,Kn as createBrushTexture,Dn as createEndGamePanel,qn as createHandTutorial,An as createThreeBase,Nn as createTutorialLabel,Ln as getRegisteredFontIds,Xe as loadAsset,Jn as loadCharacterFrames,Fn as registerFont,G as resolveFont,X as resolveFontWeight,Vn as updateHandAnimation};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "handler-playable-sdk",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Handler Playable SDK v0.1 with contract-aligned surface (root sandbox, canonical event envelope).",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -15,10 +15,15 @@
15
15
  "types": "./dist/pixi/index.d.ts",
16
16
  "import": "./dist/pixi/index.mjs",
17
17
  "require": "./dist/pixi/index.js"
18
+ },
19
+ "./three": {
20
+ "types": "./dist/three/index.d.ts",
21
+ "import": "./dist/three/index.mjs",
22
+ "require": "./dist/three/index.js"
18
23
  }
19
24
  },
20
25
  "scripts": {
21
- "build": "tsup src/index.ts src/pixi/index.ts --format cjs,esm --dts --clean --minify",
26
+ "build": "tsup src/index.ts src/pixi/index.ts src/three/index.ts --format cjs,esm --dts --clean --minify",
22
27
  "lint": "eslint 'src/**/*.{ts,tsx}'",
23
28
  "typecheck": "tsc --noEmit",
24
29
  "prepublishOnly": "npm run build"
@@ -38,16 +43,22 @@
38
43
  "README.md"
39
44
  ],
40
45
  "peerDependencies": {
41
- "pixi.js": "^8.0.0"
46
+ "pixi.js": "^8.0.0",
47
+ "three": "^0.160.0"
42
48
  },
43
49
  "peerDependenciesMeta": {
44
50
  "pixi.js": {
45
51
  "optional": true
52
+ },
53
+ "three": {
54
+ "optional": true
46
55
  }
47
56
  },
48
57
  "devDependencies": {
58
+ "@types/three": "^0.160.0",
49
59
  "eslint": "^8.57.1",
50
60
  "pixi.js": "^8.8.1",
61
+ "three": "^0.160.0",
51
62
  "ts-node": "^10.9.2",
52
63
  "tsup": "^8.4.0",
53
64
  "typescript": "^5.7.2"
@@ -1,17 +0,0 @@
1
- var u={};function I(e,t,n=!1){u[e]||(u[e]=[]),u[e].push({fn:t,once:n})}function V(e,t){if(u[e]){if(!t){delete u[e];return}u[e]=u[e].filter(n=>n.fn!==t)}}function P(e,...t){let n=u[e];if(n)for(let i of[...n])i.fn(...t),i.once&&V(e,i.fn)}function a(e,t){I(e,t,!0)}var R={name:"handler-playable-sdk",version:"0.1.0",description:"Handler Playable SDK v0.1 with contract-aligned surface (root sandbox, canonical event envelope).",main:"dist/index.js",module:"dist/index.mjs",types:"dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.mjs",require:"./dist/index.js"},"./pixi":{types:"./dist/pixi/index.d.ts",import:"./dist/pixi/index.mjs",require:"./dist/pixi/index.js"}},scripts:{build:"tsup src/index.ts src/pixi/index.ts --format cjs,esm --dts --clean --minify",lint:"eslint 'src/**/*.{ts,tsx}'",typecheck:"tsc --noEmit",prepublishOnly:"npm run build"},author:"Handler",license:"MIT",publishConfig:{access:"public"},repository:{type:"git",url:"https://github.com/HandlerAIGames/handler-playable-sdk.git"},files:["dist","LICENSE","README.md"],peerDependencies:{"pixi.js":"^8.0.0"},peerDependenciesMeta:{"pixi.js":{optional:!0}},devDependencies:{eslint:"^8.57.1","pixi.js":"^8.8.1","ts-node":"^10.9.2",tsup:"^8.4.0",typescript:"^5.7.2"}};var s=0,Se=s++,Z=s++,ee=s++,te=s++,ne=s++,ie=s++,oe=s++,re=s++,ae=s++,se=s++,de=s++,le=s++,r=Se;function ce(){return r===Z}function ue(){return r===ee}function fe(){return r===te}function pe(){return r===ne}function g(){return r===ie}function y(){return r===oe}function me(){return r===re}function ge(){return r===ae}function ye(){return r===se}function H(){return r===de}function F(){return r===le}function we(){let e=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none",t=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed";if(e==="mraid")try{mraid.getState(),r=Z;return}catch{}else if(e==="dapi")try{dapi.isReady(),r=ee;return}catch{}if(t==="facebook")try{typeof FbPlayableAd!="undefined"&&(r=te)}catch{}else if(t==="google")try{typeof ExitApi!="undefined"&&(r=ne)}catch{}else if(t==="mintegral")window.gameReady&&(r=ie);else if(t==="tapjoy")window.TJ_API&&(r=oe);else if(t==="tiktok")window.openAppStore&&(r=re);else if(t==="smadex")try{window.smxTracking&&(r=ae)}catch{}else if(t==="snapchat")try{window.ScPlayableAd&&(r=se)}catch{}else t==="vungle"?r=de:(e==="nucleo"||t==="nucleo")&&(r=le)}var Ee={mechanic_id:"TODO_mechanic_id",variant_id:"TODO_variant_id",deployment_id:"TODO_deployment_id",export_id:"TODO_export_id",profile_id:"TODO_profile_id",instance_id:"default"},Ce=Math.random().toString(36).slice(2),w=null,A={...Ee},Ae="web_embed",De={},G=!1,E=!1,T=!1,ke=!1,B=1,W=0,z=!1,d=!1,j="",b=Math.floor(window.innerWidth),h=Math.floor(window.innerHeight),K=b>h,l=!1,k=!1,be=!1,he=!1,U=!1,M=null;function _e(){if(w)return w;let e=document.createElement("div");return e.id="handler-root",e.setAttribute("data-handler-root","true"),document.body.appendChild(e),w=e,e}function N(e){switch(e){case"interaction":return"engagement";case"finish":return"complete";case"install":return"cta_click";default:return e}}function Te(e,t){return{event_name:e,ts:Date.now(),session_id:Ce,deployment_id:A.deployment_id,variant_id:A.variant_id,export_profile_id:A.profile_id,instance_id:A.instance_id||"default",env:Ae==="mraid"?"mraid":"web",payload:t}}function o(e,t){let n=N(e),i=Te(n,t);P(n,i),n!==e&&P(e,i)}function O(){M&&(M(b,h),M=null)}function _(e){B=e,o("volume",e)}function v(e){e&&(ke=!0),!T&&(T=!0,o("pause"),_(0))}function S(e){!e&&ke||T&&(T=!1,o("resume"),_(B))}function p(e,t){b=Math.floor(e||window.innerWidth),h=Math.floor(t||window.innerHeight),K=b>h,o("resize",{width:b,height:h})}function Le(){if(ce())try{let e=mraid.getMaxSize();p(e.width,e.height);let t=()=>{mraid.isViewable()&&mraid.getState()!=="hidden"?S():v()};if(mraid.addEventListener("viewableChange",t),mraid.addEventListener("stateChange",t),mraid.addEventListener("sizeChange",()=>{let n=mraid.getMaxSize();p(n.width,n.height)}),mraid.getAudioVolume){let n=mraid.getAudioVolume();_(n?1:0)}if(mraid.addEventListener("audioVolumeChange",n=>{n!==null&&_(n>0?1:0)}),mraid.addEventListener("error",(n,i)=>{console.warn("mraid error:",n,"action:",i)}),z=!0,mraid.isViewable()&&mraid.getState()!=="hidden")l=!0,o("boot"),o("view"),o("ready"),d=!0,O();else{let n=()=>{l=!0,o("boot"),o("view"),o("ready"),d=!0,O()};mraid.addEventListener("ready",n)}}catch(e){console.warn("MRAID hook skipped",e)}}function Ie(){if(ue())try{let e=dapi.getScreenSize();p(e.width,e.height),dapi.addEventListener("viewableChange",n=>{n.isViewable?S():v()}),dapi.addEventListener("adResized",n=>{let i=dapi.getScreenSize();p(n.width||i.width,n.height||i.height)});let t=dapi.getAudioVolume();if(_(t?1:0),dapi.addEventListener("audioVolumeChange",n=>_(n?1:0)),z=!0,dapi.isViewable())l=!0,o("boot"),o("view"),o("ready"),d=!0,O();else{let n=()=>{l=!0,o("boot"),o("view"),o("ready"),d=!0,O()};dapi.addEventListener("ready",n)}}catch(e){console.warn("DAPI hook skipped",e)}}function ve(){let e=()=>{l||document.visibilityState==="visible"&&(document.readyState==="complete"||document.readyState==="interactive")&&(l=!0,o("boot"),o("view"),o("ready"),d=!0,O(),k&&(k=!1,f.start()))};window.addEventListener("resize",()=>p()),document.addEventListener("visibilitychange",()=>{document.visibilityState==="visible"?(S(),e()):v()}),document.readyState==="complete"||document.readyState==="interactive"?e():window.addEventListener("load",e),z=!0}function Pe(){let e=t=>{typeof TouchEvent!="undefined"&&t instanceof TouchEvent&&(be=!0),!(be&&t instanceof MouseEvent)&&(W+=1,o("interaction",W))};document.addEventListener("mousedown",e),document.addEventListener("touchstart",e)}function Re(e){var i,c,x,C,J,D,q,L,$,X,Y,Q;let t=typeof AD_PROTOCOL!="undefined"?AD_PROTOCOL:"none";if((typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed")==="google")try{(i=window.ExitApi)==null||i.exit();return}catch{}if(t==="mraid"&&typeof mraid!="undefined")mraid.open(e||"");else if(t==="dapi"&&typeof dapi!="undefined")dapi.openStoreUrl();else if(y())(x=(c=window.TJ_API)==null?void 0:c.click)==null||x.call(c);else if(fe())(J=(C=window.FbPlayableAd)==null?void 0:C.onCTAClick)==null||J.call(C);else if(ye())(q=(D=window.ScPlayableAd)==null?void 0:D.onCTAClick)==null||q.call(D);else if(ge())try{($=(L=window.smxTracking)==null?void 0:L.redirect)==null||$.call(L)}catch(m){console.warn("Smadex redirect failed",m)}else if(pe()){let m=window.ExitApi;m&&typeof m.exit=="function"?m.exit(e||j||""):e&&window.open(e)}else g()?(X=window.install)==null||X.call(window):me()?(Y=window.openAppStore)==null||Y.call(window):H()?(Q=parent==null?void 0:parent.postMessage)==null||Q.call(parent,"download","*"):e&&window.open(e)}function Me(){let e=typeof AD_NETWORK!="undefined"?AD_NETWORK:"web_embed",t=n=>{if(!n)return;let i=new Image;i.src=n};if(e==="bigabid"){let n=window.BIGABID_BIDTIMEMACROS;if(!n)return;a("view",()=>t(n.mraid_viewable)),a("start",()=>t(n.game_viewable)),a("engagement",()=>t(n.engagement));let i=()=>t(n.complete);a("complete",i),I("engagement",c=>{var x;((x=c==null?void 0:c.payload)==null?void 0:x.count)>3&&i()}),a("cta_click",()=>t(n.click))}else if(e==="inmobi"){let n=window.INMOBI_DSPMACROS;if(!n)return;a("view",()=>t(n.Ad_Load_Start)),a("start",()=>t(n.Ad_Viewable)),a("engagement",()=>t(n.First_Engagement)),a("complete",()=>t(n.Gameplay_Complete)),a("cta_click",()=>t(n.DSP_Click)),a("start",()=>{[5,10,15,20,25,30].forEach(i=>setTimeout(()=>t(n[`Spent_${i}_Seconds`]),i*1e3))})}}function Ne(){if(!y())return;let e=window.TJ_API;e&&e.setPlayableAPI&&e.setPlayableAPI({skipAd:()=>{try{f.finish()}catch(t){console.warn("Tapjoy skip failed",t)}}})}function xe(){var t,n,i;let e=window.TJ_API;(t=e==null?void 0:e.objectiveComplete)==null||t.call(e),(n=e==null?void 0:e.playableFinished)==null||n.call(e),(i=e==null?void 0:e.gameplayFinished)==null||i.call(e)}function je(){g()&&(window.mintGameStart=()=>{S(!0),p()},window.mintGameClose=()=>{v(!0)})}function ze(){if(!F())return;let e=window.NUC;!e||!e.trigger||(f.on("cta_click",()=>{var t,n;return(n=(t=e.trigger).convert)==null?void 0:n.call(t,j)}),f.on("complete",()=>{var t,n;return(n=(t=e.trigger).tryAgain)==null?void 0:n.call(t)}))}var f={init(e={},t){if(Ae=e.profile||"web_embed",De=e.consent||{},A={...Ee,...e.ids||{}},w=e.rootEl||w,j=e.destinationUrl||(/android/i.test(navigator.userAgent)?"https://play.google.com/store":"https://www.apple.com/app-store/"),t&&(M=t),o("init"),document.body.oncontextmenu=()=>!1,_e(),Ve(w),we(),Le(),Ie(),!z){if(document.readyState==="complete")ve();else if(!he){he=!0;let n=()=>{ve(),window.removeEventListener("load",n),document.removeEventListener("DOMContentLoaded",n)};window.addEventListener("load",n),document.addEventListener("DOMContentLoaded",n)}}Pe(),Me(),Ne(),je(),ze(),console.log(`%c @handler/playable-sdk %c v${R.version||"0.0.0"} `,"background: #007acc; color: #fff; font-size: 14px; padding: 4px 8px; border-top-left-radius: 4px; border-bottom-left-radius: 4px;","background: #e1e4e8; color: #333; font-size: 14px; padding: 4px 8px; border-top-right-radius: 4px; border-bottom-right-radius: 4px;"),l&&!d&&(o("boot"),o("view"),o("ready"),k&&(k=!1,f.start()),d=!0),d=l},getRoot(){return _e()},get version(){return R.version||"0.0.0"},get maxWidth(){return b},get maxHeight(){return h},get isLandscape(){return K},get isReady(){return d},get isStarted(){return G},get isPaused(){return T},get isFinished(){return E},get volume(){return B},get interactions(){return W},on(e,t){I(N(e),t)},off(e,t){V(N(e),t)},start(){var e,t;if(!G){if(!l){k=!0;return}if(G=!0,o("start"),p(),g())v(),(e=window.gameReady)==null||e.call(window);else if(y()){let n=window.TJ_API;(t=n==null?void 0:n.setPlayableBuild)==null||t.call(n,{orientation:K?"landscape":"portrait",buildID:R.version||"dev"})}}},finish(){var e,t;E||(E=!0,o("complete"),g()?(e=window.gameEnd)==null||e.call(window):H()?(t=parent==null?void 0:parent.postMessage)==null||t.call(parent,"complete","*"):y()&&xe())},install(e){if(!E){E=!0,y()?(xe(),setTimeout(()=>f.install(e),300)):(o("complete"),setTimeout(()=>f.install(e),0));return}U||(U=!0,setTimeout(()=>U=!1,500),o("cta_click"),o("conversion"),Re(e||j))},emit(e,t){let n=N(e);if(!["view","boot","start","engagement","complete","cta_click","conversion","retry","pause","resume","resize","volume","error"].includes(n)&&!n.startsWith("custom."))throw new Error(`Event ${e} must be canonical or namespaced as custom.<mechanic_id>.<event>`);let i=Te(n,t);P(n,i)},retry(){var e,t,n;if(g())(e=window.gameRetry)==null||e.call(window);else if(F()){let i=window.NUC;(n=(t=i==null?void 0:i.trigger)==null?void 0:t.tryAgain)==null||n.call(t)}o("engagement",{action:"retry"})},pause(){v(!0)},resume(){S(!0)},resize(e,t){p(e,t)}},Be=f;function Ve(e){let t=document.createElement("script");t.type="text/javascript",t.textContent=`
2
- (function(){
3
- var events = ['touchstart','touchend','mousedown','keydown'];
4
- function unlock(){
5
- if(window.AudioContext && AudioContext.prototype.resume){
6
- if(!window.__handler_audio_ctx){
7
- window.__handler_audio_ctx = new AudioContext();
8
- }
9
- if(window.__handler_audio_ctx.state === 'suspended'){
10
- window.__handler_audio_ctx.resume();
11
- }
12
- }
13
- events.forEach(function(e){ document.removeEventListener(e, unlock); });
14
- }
15
- events.forEach(function(e){ document.addEventListener(e, unlock, false); });
16
- })();
17
- `,e.appendChild(t)}export{f as a,Be as b};