livecode-static/sdk/react.js
2025-06-11 22:23:49 +08:00

2 lines
13 KiB
JavaScript

var ee=Object.create;var G=Object.defineProperty;var te=Object.getOwnPropertyDescriptor;var ne=Object.getOwnPropertyNames;var oe=Object.getPrototypeOf,se=Object.prototype.hasOwnProperty;var re=(d,h)=>()=>(h||d((h={exports:{}}).exports,h),h.exports);var ie=(d,h,b,u)=>{if(h&&typeof h=="object"||typeof h=="function")for(let L of ne(h))!se.call(d,L)&&L!==b&&G(d,L,{get:()=>h[L],enumerable:!(u=te(h,L))||u.enumerable});return d};var ae=(d,h,b)=>(b=d!=null?ee(oe(d)):{},ie(h||!d||!d.__esModule?G(b,"default",{value:d,enumerable:!0}):b,d));var X=re((ye,N)=>{var le=function(){var d=String.fromCharCode,h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$",u={};function L(o,e){if(!u[o]){u[o]={};for(var i=0;i<o.length;i++)u[o][o.charAt(i)]=i}return u[o][e]}var S={compressToBase64:function(o){if(o==null)return"";var e=S._compress(o,6,function(i){return h.charAt(i)});switch(e.length%4){default:case 0:return e;case 1:return e+"===";case 2:return e+"==";case 3:return e+"="}},decompressFromBase64:function(o){return o==null?"":o==""?null:S._decompress(o.length,32,function(e){return L(h,o.charAt(e))})},compressToUTF16:function(o){return o==null?"":S._compress(o,15,function(e){return d(e+32)})+" "},decompressFromUTF16:function(o){return o==null?"":o==""?null:S._decompress(o.length,16384,function(e){return o.charCodeAt(e)-32})},compressToUint8Array:function(o){for(var e=S.compress(o),i=new Uint8Array(e.length*2),n=0,r=e.length;n<r;n++){var m=e.charCodeAt(n);i[n*2]=m>>>8,i[n*2+1]=m%256}return i},decompressFromUint8Array:function(o){if(o==null)return S.decompress(o);for(var e=new Array(o.length/2),i=0,n=e.length;i<n;i++)e[i]=o[i*2]*256+o[i*2+1];var r=[];return e.forEach(function(m){r.push(d(m))}),S.decompress(r.join(""))},compressToEncodedURIComponent:function(o){return o==null?"":S._compress(o,6,function(e){return b.charAt(e)})},decompressFromEncodedURIComponent:function(o){return o==null?"":o==""?null:(o=o.replace(/ /g,"+"),S._decompress(o.length,32,function(e){return L(b,o.charAt(e))}))},compress:function(o){return S._compress(o,16,function(e){return d(e)})},_compress:function(o,e,i){if(o==null)return"";var n,r,m={},v={},g="",x="",E="",p=2,A=3,l=2,f=[],t=0,s=0,P;for(P=0;P<o.length;P+=1)if(g=o.charAt(P),Object.prototype.hasOwnProperty.call(m,g)||(m[g]=A++,v[g]=!0),x=E+g,Object.prototype.hasOwnProperty.call(m,x))E=x;else{if(Object.prototype.hasOwnProperty.call(v,E)){if(E.charCodeAt(0)<256){for(n=0;n<l;n++)t=t<<1,s==e-1?(s=0,f.push(i(t)),t=0):s++;for(r=E.charCodeAt(0),n=0;n<8;n++)t=t<<1|r&1,s==e-1?(s=0,f.push(i(t)),t=0):s++,r=r>>1}else{for(r=1,n=0;n<l;n++)t=t<<1|r,s==e-1?(s=0,f.push(i(t)),t=0):s++,r=0;for(r=E.charCodeAt(0),n=0;n<16;n++)t=t<<1|r&1,s==e-1?(s=0,f.push(i(t)),t=0):s++,r=r>>1}p--,p==0&&(p=Math.pow(2,l),l++),delete v[E]}else for(r=m[E],n=0;n<l;n++)t=t<<1|r&1,s==e-1?(s=0,f.push(i(t)),t=0):s++,r=r>>1;p--,p==0&&(p=Math.pow(2,l),l++),m[x]=A++,E=String(g)}if(E!==""){if(Object.prototype.hasOwnProperty.call(v,E)){if(E.charCodeAt(0)<256){for(n=0;n<l;n++)t=t<<1,s==e-1?(s=0,f.push(i(t)),t=0):s++;for(r=E.charCodeAt(0),n=0;n<8;n++)t=t<<1|r&1,s==e-1?(s=0,f.push(i(t)),t=0):s++,r=r>>1}else{for(r=1,n=0;n<l;n++)t=t<<1|r,s==e-1?(s=0,f.push(i(t)),t=0):s++,r=0;for(r=E.charCodeAt(0),n=0;n<16;n++)t=t<<1|r&1,s==e-1?(s=0,f.push(i(t)),t=0):s++,r=r>>1}p--,p==0&&(p=Math.pow(2,l),l++),delete v[E]}else for(r=m[E],n=0;n<l;n++)t=t<<1|r&1,s==e-1?(s=0,f.push(i(t)),t=0):s++,r=r>>1;p--,p==0&&(p=Math.pow(2,l),l++)}for(r=2,n=0;n<l;n++)t=t<<1|r&1,s==e-1?(s=0,f.push(i(t)),t=0):s++,r=r>>1;for(;;)if(t=t<<1,s==e-1){f.push(i(t));break}else s++;return f.join("")},decompress:function(o){return o==null?"":o==""?null:S._decompress(o.length,32768,function(e){return o.charCodeAt(e)})},_decompress:function(o,e,i){var n=[],r,m=4,v=4,g=3,x="",E=[],p,A,l,f,t,s,P,c={val:i(0),position:e,index:1};for(p=0;p<3;p+=1)n[p]=p;for(l=0,t=Math.pow(2,2),s=1;s!=t;)f=c.val&c.position,c.position>>=1,c.position==0&&(c.position=e,c.val=i(c.index++)),l|=(f>0?1:0)*s,s<<=1;switch(r=l){case 0:for(l=0,t=Math.pow(2,8),s=1;s!=t;)f=c.val&c.position,c.position>>=1,c.position==0&&(c.position=e,c.val=i(c.index++)),l|=(f>0?1:0)*s,s<<=1;P=d(l);break;case 1:for(l=0,t=Math.pow(2,16),s=1;s!=t;)f=c.val&c.position,c.position>>=1,c.position==0&&(c.position=e,c.val=i(c.index++)),l|=(f>0?1:0)*s,s<<=1;P=d(l);break;case 2:return""}for(n[3]=P,A=P,E.push(P);;){if(c.index>o)return"";for(l=0,t=Math.pow(2,g),s=1;s!=t;)f=c.val&c.position,c.position>>=1,c.position==0&&(c.position=e,c.val=i(c.index++)),l|=(f>0?1:0)*s,s<<=1;switch(P=l){case 0:for(l=0,t=Math.pow(2,8),s=1;s!=t;)f=c.val&c.position,c.position>>=1,c.position==0&&(c.position=e,c.val=i(c.index++)),l|=(f>0?1:0)*s,s<<=1;n[v++]=d(l),P=v-1,m--;break;case 1:for(l=0,t=Math.pow(2,16),s=1;s!=t;)f=c.val&c.position,c.position>>=1,c.position==0&&(c.position=e,c.val=i(c.index++)),l|=(f>0?1:0)*s,s<<=1;n[v++]=d(l),P=v-1,m--;break;case 2:return E.join("")}if(m==0&&(m=Math.pow(2,g),g++),n[P])x=n[P];else if(P===v)x=A+A.charAt(0);else return null;E.push(x),n[v++]=A+x.charAt(0),m--,A=x,m==0&&(m=Math.pow(2,g),g++)}}};return S}();typeof N!="undefined"&&N!=null&&(N.exports=le)});import{useEffect as F,useRef as de,useState as H}from"react";var J=ae(X());async function Y(d,h={}){var z;typeof d=="object"&&!(d instanceof HTMLElement)&&(d.headless||d.view==="headless")&&(h=d,d=null);let{config:b={},headless:u,loading:L="lazy",view:S}=h,o=u||S==="headless",e=null,i=null;if(typeof d=="string")e=document.querySelector(d);else if(d instanceof HTMLElement)e=d;else if(!(o&&typeof d=="object"))throw new Error("A valid container element is required.");if(!e)if(o)e=document.createElement("div"),W(e),document.body.appendChild(e);else throw new Error(`Cannot find element: "${d}"`);let n=new URL(ce(h)),r=n.origin;n.searchParams.set("embed","true"),n.searchParams.set("loading",o?"eager":L);let m=globalThis.process;n.searchParams.set("sdkVersion",((z=m==null?void 0:m.env)==null?void 0:z.SDK_VERSION)||"latest"),typeof b=="object"&&Object.keys(b).length>0&&n.searchParams.set("config","sdk");let v=h.params;typeof v=="object"&&Object.keys(v).length>0&&JSON.stringify(v).length<1800&&Object.keys(v).forEach(a=>{n.searchParams.set(a,encodeURIComponent(String(v[a])))});let g=!1,x="Cannot call API methods after calling `destroy()`.",p=await new Promise(a=>{var j,C,k,_,U,B,q,Q,Z;if(!e)return;let w=e.dataset.height||e.style.height;if(w&&!o){let I=isNaN(Number(w))?w:w+"px";e.style.height=I}e.dataset.defaultStyles!=="false"&&!o&&((j=e.style).backgroundColor||(j.backgroundColor="#fff"),(C=e.style).border||(C.border="1px solid black"),(k=e.style).borderRadius||(k.borderRadius="8px"),(_=e.style).boxSizing||(_.boxSizing="border-box"),(U=e.style).padding||(U.padding="0"),(B=e.style).width||(B.width="100%"),(q=e.style).height||(q.height=e.style.height||"300px"),e.style.minHeight="200px",e.style.flexGrow="1",(Q=e.style).overflow||(Q.overflow="hidden"),(Z=e.style).resize||(Z.resize="vertical"));let O="livecodes",M=e.querySelector(`iframe.${O}`),y=M||document.createElement("iframe");y.classList.add(O),y.setAttribute("allow","accelerometer; camera; encrypted-media; display-capture; geolocation; gyroscope; microphone; midi; clipboard-read; clipboard-write; web-share"),y.setAttribute("allowtransparency","true"),y.setAttribute("allowpaymentrequest","true"),y.setAttribute("allowfullscreen","true"),y.setAttribute("sandbox","allow-same-origin allow-downloads allow-forms allow-modals allow-orientation-lock allow-pointer-lock allow-popups allow-presentation allow-scripts");let R=L==="eager"?"eager":"lazy";y.setAttribute("loading",R),o?W(y):(y.style.height="100%",y.style.minHeight="200px",y.style.width="100%",y.style.margin="0",y.style.border="0",y.style.borderRadius=e.style.borderRadius),addEventListener("message",function I(T){var D;T.source!==y.contentWindow||T.origin!==r||((D=T.data)==null?void 0:D.type)!=="livecodes-init"||(removeEventListener("message",I),i=Number(T.data.payload.appVersion.replace(/^v/,"")))}),(!i||i<46)&&addEventListener("message",function I(T){var D,$;T.source!==y.contentWindow||T.origin!==r||((D=T.data)==null?void 0:D.type)!=="livecodes-get-config"||(removeEventListener("message",I),($=y.contentWindow)==null||$.postMessage({type:"livecodes-config",payload:b},r))}),y.onload=()=>{a(y)},y.src=n.href,M||e.appendChild(y)}),A=new Promise(a=>{addEventListener("message",function w(O){var M;O.source!==p.contentWindow||O.origin!==r||((M=O.data)==null?void 0:M.type)!=="livecodes-ready"||(removeEventListener("message",w),a(),A.settled=!0)})}),l=()=>g?Promise.reject(x):new Promise(async a=>{var O;A.settled&&a();let w={type:"livecodes-load"};(O=p.contentWindow)==null||O.postMessage(w,r),await A,a()}),f=(a,w)=>new Promise(async(O,M)=>{var R;if(g)return M(x);await l();let y=V();addEventListener("message",function j(C){var k,_;if(!(C.source!==p.contentWindow||C.origin!==r||((k=C.data)==null?void 0:k.type)!=="livecodes-api-response"||((_=C.data)==null?void 0:_.id)!==y)&&C.data.method===a){removeEventListener("message",j);let U=C.data.payload;U!=null&&U.error?M(U.error):O(U)}}),(R=p.contentWindow)==null||R.postMessage({method:a,id:y,args:w},r)}),t={},s=["load","ready","code","console","tests","destroy"],P=(a,w)=>{var O;if(g)throw new Error(x);return s.includes(a)?(f("watch",[a]),t[a]||(t[a]=[]),(O=t[a])==null||O.push(w),{remove:()=>{var M,y;t[a]=(M=t[a])==null?void 0:M.filter(R=>R!==w),((y=t[a])==null?void 0:y.length)===0&&f("watch",[a,"unsubscribe"])}}):{remove:()=>{}}},c=a=>({"livecodes-app-loaded":"load","livecodes-ready":"ready","livecodes-change":"code","livecodes-console":"console","livecodes-test-results":"tests","livecodes-destroy":"destroy"})[a];addEventListener("message",async a=>{var M,y,R,j;let w=c((y=(M=a.data)==null?void 0:M.type)!=null?y:"");if(a.source!==p.contentWindow||a.origin!==r||!w||!t[w])return;let O=(R=a.data)==null?void 0:R.payload;(j=t[w])==null||j.forEach(C=>{C(O)})});let K=()=>{var a;Object.values(t).forEach(w=>{w.length=0}),(a=p==null?void 0:p.remove)==null||a.call(p),g=!0};L==="lazy"&&"IntersectionObserver"in window&&new IntersectionObserver((w,O)=>{w.forEach(async M=>{M.isIntersecting&&(await l(),O.unobserve(e))})},{rootMargin:"150px"}).observe(e);function W(a){a.style.position="absolute",a.style.top="0",a.style.visibility="hidden",a.style.opacity="0"}let V=()=>(String(Math.random())+Date.now().toFixed()).replace("0.","");return{load:()=>l(),run:()=>f("run"),format:a=>f("format",[a]),getShareUrl:a=>f("getShareUrl",[a]),getConfig:a=>f("getConfig",[a]),setConfig:a=>f("setConfig",[a]),getCode:()=>f("getCode"),show:(a,w)=>f("show",[a,w]),runTests:()=>f("runTests"),onChange:a=>P("code",a),watch:P,exec:(a,...w)=>f("exec",[a,...w]),destroy:()=>A.settled?f("destroy").then(K):g?Promise.reject(x):(K(),Promise.resolve())}}function ce(d={}){let{appUrl:h="https://livecodes.io",params:b={},config:u={},headless:L,import:S,lite:o,view:e,...i}=d,n;try{n=new URL(h)}catch(v){throw new Error(`${h} is not a valid URL.`)}let r=new URLSearchParams;Object.entries(i).forEach(([v,g])=>{g!==void 0&&n.searchParams.set(v,String(g))});let m=d.view==="headless"||L;if(o&&(console.warn(`Deprecation notice: "lite" option is deprecated. Use "config: { mode: 'lite' }" instead.`),typeof u=="object"&&u.mode==null?u.mode="lite":n.searchParams.set("lite","true")),e&&(console.warn('Deprecation notice: The "view" option has been moved to "config.view". For headless mode use "headless: true".'),typeof u=="object"&&u.view==null&&e!=="headless"?u.view=e:n.searchParams.set("view",e)),typeof u=="string")try{new URL(u),n.searchParams.set("config",encodeURIComponent(u))}catch(v){throw new Error('"config" is not a valid URL or configuration object.')}else u&&typeof u=="object"&&Object.keys(u).length>0&&(u.title&&u.title!=="Untitled Project"&&n.searchParams.set("title",u.title),u.description&&u.description.length>0&&n.searchParams.set("description",u.description),r.set("config","code/"+(0,J.compressToEncodedURIComponent)(JSON.stringify(u))));if(b&&typeof b=="object"&&Object.keys(b).length>0)try{r.set("params",(0,J.compressToEncodedURIComponent)(JSON.stringify(b)))}catch(v){Object.keys(b).forEach(g=>{n.searchParams.set(g,encodeURIComponent(String(b[g])))})}return S&&n.searchParams.set("x",encodeURIComponent(S)),m&&n.searchParams.set("headless","true"),n.hash=r.toString(),n.href}import{jsx as ue}from"react/jsx-runtime";function fe(d){let h=de(null),[b,u]=H(d.className||""),[L,S]=H(d.style||{}),[o,e]=H(d.height),[i,n]=H(),[r,m]=H(JSON.stringify(d.config||"")),[v,g]=H("");return F(()=>{if(!h.current)return;let{className:x,style:E,height:p,sdkReady:A,config:l,...f}=d;if(u(x||""),S(E||{}),e(p),!i||v!==JSON.stringify(f))g(JSON.stringify(f)),i==null||i.destroy(),Y(h.current,{config:l,...f}).then(t=>{n(t),typeof A=="function"&&A(t)});else{if(r===JSON.stringify(l))return;m(JSON.stringify(l)),typeof l=="string"?fetch(l).then(t=>t.json()).then(t=>{i==null||i.setConfig(t)}):l&&i.setConfig(l)}},[d]),F(()=>()=>{i==null||i.destroy()},[]),ue("div",{ref:h,className:b,style:L,"data-height":o})}export{fe as default};