@tscircuit/runframe 0.0.136 → 0.0.137

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/runner.js CHANGED
@@ -327,13 +327,13 @@ var RunFrame = (props) => {
327
327
  entrypoint: props.entrypoint,
328
328
  fsMap: fsMapObj
329
329
  }).then(() => ({ success: true })).catch((e) => {
330
- const message = e.message.split(":")[1];
330
+ const message = e.message.includes(":") ? e.message.replace(/[^:]+:/, "") : e.message;
331
331
  props.onError?.(e);
332
332
  setError({ error: message, stack: e.stack });
333
333
  console.error(e);
334
334
  return { success: false };
335
335
  });
336
- if (!evalResult.success) return;
336
+ if (!evalResult.success) return setIsRunning(false);
337
337
  const $renderResult = worker.renderUntilSettled();
338
338
  debug3("waiting for initial circuit json...");
339
339
  let circuitJson2 = await worker.getCircuitJson().catch((e) => {
@@ -22700,7 +22700,7 @@ void main() {
22700
22700
  [zustand devtools middleware] Unsupported __setState action format.
22701
22701
  When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(),
22702
22702
  and value of this only key should be a state object. Example: { "type": "__setState", "state": { "abc123Store": { "foo": "bar" } } }
22703
- `);const sl=nl.state[Ma];if(sl==null)return;JSON.stringify(Aa.getState())!==JSON.stringify(sl)&&el(sl);return}Aa.dispatchFromDevtools&&typeof Aa.dispatch=="function"&&Aa.dispatch(nl)});case"DISPATCH":switch(rl.payload.type){case"RESET":return el(tl),Ma===void 0?La==null?void 0:La.init(Aa.getState()):La==null?void 0:La.init(getTrackedConnectionState(Ra.name));case"COMMIT":if(Ma===void 0){La==null||La.init(Aa.getState());return}return La==null?void 0:La.init(getTrackedConnectionState(Ra.name));case"ROLLBACK":return parseJsonThen(rl.state,nl=>{if(Ma===void 0){el(nl),La==null||La.init(Aa.getState());return}el(nl[Ma]),La==null||La.init(getTrackedConnectionState(Ra.name))});case"JUMP_TO_STATE":case"JUMP_TO_ACTION":return parseJsonThen(rl.state,nl=>{if(Ma===void 0){el(nl);return}JSON.stringify(Aa.getState())!==JSON.stringify(nl[Ma])&&el(nl[Ma])});case"IMPORT_STATE":{const{nextLiftedState:nl}=rl.payload,sl=(il=nl.computedStates.slice(-1)[0])==null?void 0:il.state;if(!sl)return;el(Ma===void 0?sl:sl[Ma]),La==null||La.send(null,nl);return}case"PAUSE_RECORDING":return ka=!ka}return}}),tl},devtools=devtoolsImpl,parseJsonThen=(ua,J)=>{let la;try{la=JSON.parse(ua)}catch(xa){console.error("[zustand devtools middleware] Could not parse the received json",xa)}la!==void 0&&J(la)},API_BASE=window.API_BASE_URL??"/api",debug$2=Debug$1("run-frame"),debug$1=debug$2.extend("store");async function upsertFileApi(ua,J){return(await(await fetch(`${API_BASE}/files/upsert`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({file_path:ua,text_content:J})})).json()).file}async function getFileApi(ua){return(await(await fetch(`${API_BASE}/files/get?file_path=${encodeURIComponent(ua)}`)).json()).file}async function getEvents(ua){const J=ua?`${API_BASE}/events/list?since=${encodeURIComponent(ua)}`:`${API_BASE}/events/list`;return(await(await fetch(J)).json()).event_list}async function getInitialFilesApi(){const ua=await fetch(`${API_BASE}/files/list`),{file_list:J}=await ua.json(),la=new Map;for(const xa of J){const Aa=await getFileApi(xa.file_path);la.set(xa.file_path,Aa.text_content)}return la}const useRunFrameStore=create()(devtools((ua,J)=>({fsMap:new Map,lastEventTime:new Date().toISOString(),isPolling:!1,error:null,circuitJson:null,lastManualEditsChangeSentAt:0,recentEvents:[],loadInitialFiles:async()=>{const la=await getInitialFilesApi();debug$1("loaded initial files",{fsMap:la}),ua({fsMap:la})},upsertFile:async(la,xa)=>{try{const Aa=await upsertFileApi(la,xa);ua(ba=>({fsMap:new Map(ba.fsMap).set(Aa.file_path,Aa.text_content)}))}catch(Aa){ua({error:Aa})}},getFile:async la=>{try{const xa=await getFileApi(la);ua(Aa=>({fsMap:new Map(Aa.fsMap).set(xa.file_path,xa.text_content)}))}catch(xa){ua({error:xa})}},setCircuitJson:la=>{la!==J().circuitJson&&ua({circuitJson:la})},startPolling:()=>{const la=async()=>{const xa=J();if(xa.isPolling){try{const Aa=await getEvents(xa.lastEventTime);if(Aa.length>0){ua(Ma=>({recentEvents:[...Ma.recentEvents,...Aa].slice(0,100)}));const ba=Aa[Aa.length-1].created_at,Sa=new Map(xa.fsMap);for(const Ma of Aa)if(Ma.event_type==="FILE_UPDATED"){const Ra=await getFileApi(Ma.file_path);if(Ma.file_path==="manual_edits.json"&&Date.now()-xa.lastManualEditsChangeSentAt<1e3)continue;Sa.set(Ra.file_path,Ra.text_content)}ua({fsMap:Sa,lastEventTime:ba})}}catch(Aa){ua({error:Aa})}setTimeout(la,1e3)}};ua({isPolling:!0}),la()},stopPolling:()=>{ua({isPolling:!1})},pushEvent:async la=>{await fetch(`${window.API_BASE_URL??""}/api/events/create`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(la)})},applyEditEventsAndUpdateManualEditsJson:async la=>{debug$1("applyEditEventsAndUpdateManualEditsJson",{editEvents:la});const xa=J();if(!xa.circuitJson)return;const Aa=xa.fsMap.get("manual-edits.json"),ba=Aa?JSON.parse(Aa):{},Sa=applyEditEventsToManualEditsFile({circuitJson:xa.circuitJson,editEvents:la,manualEditsFile:ba});debug$1("updatedManualEditsFileContent",Sa),ua(Ma=>({lastManualEditsChangeSentAt:Date.now(),fsMap:new Map(Ma.fsMap).set("manual-edits.json",JSON.stringify(Sa))})),await upsertFileApi("manual-edits.json",JSON.stringify(Sa,null,2))}}),{name:"run-frame-store"})),getChangesBetweenFsMaps=(ua,J)=>{const la={};for(const[xa,Aa]of ua.entries()){const ba=J.get(xa);ba!==Aa&&(la[xa]={old:Aa,new:ba})}for(const[xa,Aa]of J.entries())ua.has(xa)||(la[xa]={old:void 0,new:Aa});return la},getPhaseTimingsFromRenderEvents=ua=>{const J={};if(!ua)return J;for(const xa of orderedRenderPhases)J[xa]=0;const la=new Map;for(const xa of ua){const[,,Aa,ba]=xa.type.split(":");if(ba==="start"){la.set(`${Aa}:${xa.renderId}`,xa);continue}if(ba==="end"){const Sa=la.get(`${Aa}:${xa.renderId}`);if(Sa){const Ma=xa.createdAt-Sa.createdAt;J[Aa]=(J[Aa]||0)+Ma}}}return J},numRenderPhases=26,debug=Debug$1("run-frame:RunFrame"),RunFrame=ua=>{const[J,la]=useRunFrameStore(sl=>[sl.circuitJson,sl.setCircuitJson]),[xa,Aa]=reactExports.useState(null),[ba,Sa]=reactExports.useReducer((sl,ll)=>sl+1,0),Ma=reactExports.useRef(0),[Ra,Ia]=reactExports.useState(!1),[La,Fa]=reactExports.useState(null),[ka,el]=reactExports.useState(ua.defaultActiveTab??"pcb");reactExports.useEffect(()=>{ua.debug&&Debug$1.enable("run-frame*")},[ua.debug]);const tl=ua.fsMap instanceof Map?ua.fsMap:Object.entries(ua.fsMap??{}).reduce((sl,[ll,dl])=>sl.set(ll,dl),new Map),rl=reactExports.useRef(null),il=reactExports.useRef(null);reactExports.useEffect(()=>{if(!tl)return;const sl=ua.showRunButton&&ba!==Ma.current;if(rl.current&&J){const dl=getChangesBetweenFsMaps(rl.current,tl);if(Object.keys(dl).length>0)debug("code changes detected");else if(il.current!==ua.entrypoint)debug("render triggered by entrypoint change");else if(!sl){debug("render triggered without changes to fsMap, skipping");return}}if(ua.showRunButton&&ba===Ma.current)return;rl.current=tl,il.current=ua.entrypoint,Ma.current=ba,Ia(!0);async function ll(){var Ol,ql,rc,sc,Kl;debug("running render worker"),Aa(null);const dl={progress:0},gl=globalThis.runFrameWorker??await createCircuitWebWorker({webWorkerUrl:ua.evalWebWorkerBlobUrl,verbose:!0});globalThis.runFrameWorker=gl,(Ol=ua.onRenderStarted)==null||Ol.call(ua);const _l=tl instanceof Map?Object.fromEntries(tl.entries()):tl;if(!_l[ua.entrypoint]){Aa({error:`Entrypoint not found (entrypoint: "${ua.entrypoint}", fsMapKeys: ${Object.keys(_l).join(", ")})`,stack:""});return}const vl=new Set;let Cl=Date.now();if(gl.on("renderable:renderLifecycle:anyEvent",Gl=>{dl.lastRenderEvent=Gl,dl.eventsProcessed=(dl.eventsProcessed??0)+1,vl.has(Gl.renderId)||vl.add(Gl.renderId);const kl=vl.size*numRenderPhases*2,Wl=dl.eventsProcessed>vl.size*2,tc=dl.eventsProcessed/kl,Zl=1-Math.exp(-tc*3);dl.progress=Wl?Zl:(1-Math.exp(-(dl.eventsProcessed??0)/1e3))*.05,ka==="render_log"&&(dl.renderEvents=dl.renderEvents??[],Gl.createdAt=Date.now(),dl.renderEvents.push(Gl),Date.now()-Cl>500&&(dl.phaseTimings=getPhaseTimingsFromRenderEvents(dl.renderEvents??[]),Cl=Date.now())),Fa({...dl})}),!(await gl.executeWithFsMap({entrypoint:ua.entrypoint,fsMap:_l}).then(()=>({success:!0})).catch(Gl=>{var Wl;const kl=Gl.message.split(":")[1];return(Wl=ua.onError)==null||Wl.call(ua,Gl),Aa({error:kl,stack:Gl.stack}),console.error(Gl),{success:!1}})).success)return;const Il=gl.renderUntilSettled();debug("waiting for initial circuit json...");let Fl=await gl.getCircuitJson().catch(Gl=>{var kl;return debug("error getting initial circuit json",Gl),(kl=ua.onError)==null||kl.call(ua,Gl),Aa({error:Gl.message,stack:Gl.stack}),Ia(!1),null});Fl&&(debug("got initial circuit json"),la(Fl),(ql=ua.onCircuitJsonChange)==null||ql.call(ua,Fl),(rc=ua.onInitialRender)==null||rc.call(ua,{circuitJson:Fl}),await Il,debug("getting final circuit json"),Fl=await gl.getCircuitJson(),(sc=ua.onCircuitJsonChange)==null||sc.call(ua,Fl),la(Fl),(Kl=ua.onRenderFinished)==null||Kl.call(ua,{circuitJson:Fl}),ka==="render_log"&&(dl.phaseTimings=getPhaseTimingsFromRenderEvents(dl.renderEvents??[])),dl.progress=1,Fa({...dl}),Ia(!1))}ll()},[ua.fsMap,ua.entrypoint,ba]);const nl=reactExports.useMemo(()=>`cj-${Math.random().toString(36).substring(2,15)}`,[J]);return jsxRuntimeExports.jsx(CircuitJsonPreview,{defaultActiveTab:ua.defaultActiveTab,leftHeaderContent:jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[ua.showRunButton&&jsxRuntimeExports.jsxs("div",{className:"rf-relative rf-inline-flex",children:[jsxRuntimeExports.jsxs("button",{type:"button",onClick:()=>{Sa(1)},className:"rf-flex rf-items-center rf-gap-2 rf-px-4 rf-py-2 rf-bg-blue-600 hover:rf-bg-blue-700 rf-text-white rf-rounded-md disabled:rf-opacity-50 transition-colors duration-200",disabled:Ra,children:["Run"," ",Ra?jsxRuntimeExports.jsx(LoaderCircle,{className:"rf-w-3 rf-h-3 rf-animate-spin"}):jsxRuntimeExports.jsx(Play,{className:"rf-w-3 rf-h-3"})]}),Ra&&jsxRuntimeExports.jsx("div",{className:"rf-flex rf-items-center",children:jsxRuntimeExports.jsx(Button,{onClick:sl=>{sl.stopPropagation(),Ia(!1),globalThis.runFrameWorker&&(globalThis.runFrameWorker.kill(),globalThis.runFrameWorker=null)},variant:"ghost",size:"icon",className:"rf-text-red-300 hover:rf-text-red-400 hover:!rf-bg-transparent -ml-4 [&>svg]:rf-text-red-300 [&>svg]:hover:rf-text-red-400 rf-flex rf-items-center rf-justify-center",children:jsxRuntimeExports.jsx(Square,{className:"!rf-h-2.5 !rf-w-2.5",fill:"currentColor",stroke:"currentColor"})})})]}),ua.leftHeaderContent]}),onActiveTabChange:el,circuitJson:J,circuitJsonKey:nl,renderLog:La,isRunningCode:Ra,errorMessage:xa==null?void 0:xa.error,onEditEvent:ua.onEditEvent,editEvents:ua.editEvents})};debug$2.extend("useEditEventController"),Debug$1("run-frame:RunFrameWithApi");const root=clientExports.createRoot(document.getElementById("root"));root.render(jsxRuntimeExports.jsx(React.StrictMode,{children:jsxRuntimeExports.jsx("div",{style:{width:"100vw",height:"100vh"},children:jsxRuntimeExports.jsx(RunFrame,{fsMap:{"main.tsx":`
22703
+ `);const sl=nl.state[Ma];if(sl==null)return;JSON.stringify(Aa.getState())!==JSON.stringify(sl)&&el(sl);return}Aa.dispatchFromDevtools&&typeof Aa.dispatch=="function"&&Aa.dispatch(nl)});case"DISPATCH":switch(rl.payload.type){case"RESET":return el(tl),Ma===void 0?La==null?void 0:La.init(Aa.getState()):La==null?void 0:La.init(getTrackedConnectionState(Ra.name));case"COMMIT":if(Ma===void 0){La==null||La.init(Aa.getState());return}return La==null?void 0:La.init(getTrackedConnectionState(Ra.name));case"ROLLBACK":return parseJsonThen(rl.state,nl=>{if(Ma===void 0){el(nl),La==null||La.init(Aa.getState());return}el(nl[Ma]),La==null||La.init(getTrackedConnectionState(Ra.name))});case"JUMP_TO_STATE":case"JUMP_TO_ACTION":return parseJsonThen(rl.state,nl=>{if(Ma===void 0){el(nl);return}JSON.stringify(Aa.getState())!==JSON.stringify(nl[Ma])&&el(nl[Ma])});case"IMPORT_STATE":{const{nextLiftedState:nl}=rl.payload,sl=(il=nl.computedStates.slice(-1)[0])==null?void 0:il.state;if(!sl)return;el(Ma===void 0?sl:sl[Ma]),La==null||La.send(null,nl);return}case"PAUSE_RECORDING":return ka=!ka}return}}),tl},devtools=devtoolsImpl,parseJsonThen=(ua,J)=>{let la;try{la=JSON.parse(ua)}catch(xa){console.error("[zustand devtools middleware] Could not parse the received json",xa)}la!==void 0&&J(la)},API_BASE=window.API_BASE_URL??"/api",debug$2=Debug$1("run-frame"),debug$1=debug$2.extend("store");async function upsertFileApi(ua,J){return(await(await fetch(`${API_BASE}/files/upsert`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({file_path:ua,text_content:J})})).json()).file}async function getFileApi(ua){return(await(await fetch(`${API_BASE}/files/get?file_path=${encodeURIComponent(ua)}`)).json()).file}async function getEvents(ua){const J=ua?`${API_BASE}/events/list?since=${encodeURIComponent(ua)}`:`${API_BASE}/events/list`;return(await(await fetch(J)).json()).event_list}async function getInitialFilesApi(){const ua=await fetch(`${API_BASE}/files/list`),{file_list:J}=await ua.json(),la=new Map;for(const xa of J){const Aa=await getFileApi(xa.file_path);la.set(xa.file_path,Aa.text_content)}return la}const useRunFrameStore=create()(devtools((ua,J)=>({fsMap:new Map,lastEventTime:new Date().toISOString(),isPolling:!1,error:null,circuitJson:null,lastManualEditsChangeSentAt:0,recentEvents:[],loadInitialFiles:async()=>{const la=await getInitialFilesApi();debug$1("loaded initial files",{fsMap:la}),ua({fsMap:la})},upsertFile:async(la,xa)=>{try{const Aa=await upsertFileApi(la,xa);ua(ba=>({fsMap:new Map(ba.fsMap).set(Aa.file_path,Aa.text_content)}))}catch(Aa){ua({error:Aa})}},getFile:async la=>{try{const xa=await getFileApi(la);ua(Aa=>({fsMap:new Map(Aa.fsMap).set(xa.file_path,xa.text_content)}))}catch(xa){ua({error:xa})}},setCircuitJson:la=>{la!==J().circuitJson&&ua({circuitJson:la})},startPolling:()=>{const la=async()=>{const xa=J();if(xa.isPolling){try{const Aa=await getEvents(xa.lastEventTime);if(Aa.length>0){ua(Ma=>({recentEvents:[...Ma.recentEvents,...Aa].slice(0,100)}));const ba=Aa[Aa.length-1].created_at,Sa=new Map(xa.fsMap);for(const Ma of Aa)if(Ma.event_type==="FILE_UPDATED"){const Ra=await getFileApi(Ma.file_path);if(Ma.file_path==="manual_edits.json"&&Date.now()-xa.lastManualEditsChangeSentAt<1e3)continue;Sa.set(Ra.file_path,Ra.text_content)}ua({fsMap:Sa,lastEventTime:ba})}}catch(Aa){ua({error:Aa})}setTimeout(la,1e3)}};ua({isPolling:!0}),la()},stopPolling:()=>{ua({isPolling:!1})},pushEvent:async la=>{await fetch(`${window.API_BASE_URL??""}/api/events/create`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(la)})},applyEditEventsAndUpdateManualEditsJson:async la=>{debug$1("applyEditEventsAndUpdateManualEditsJson",{editEvents:la});const xa=J();if(!xa.circuitJson)return;const Aa=xa.fsMap.get("manual-edits.json"),ba=Aa?JSON.parse(Aa):{},Sa=applyEditEventsToManualEditsFile({circuitJson:xa.circuitJson,editEvents:la,manualEditsFile:ba});debug$1("updatedManualEditsFileContent",Sa),ua(Ma=>({lastManualEditsChangeSentAt:Date.now(),fsMap:new Map(Ma.fsMap).set("manual-edits.json",JSON.stringify(Sa))})),await upsertFileApi("manual-edits.json",JSON.stringify(Sa,null,2))}}),{name:"run-frame-store"})),getChangesBetweenFsMaps=(ua,J)=>{const la={};for(const[xa,Aa]of ua.entries()){const ba=J.get(xa);ba!==Aa&&(la[xa]={old:Aa,new:ba})}for(const[xa,Aa]of J.entries())ua.has(xa)||(la[xa]={old:void 0,new:Aa});return la},getPhaseTimingsFromRenderEvents=ua=>{const J={};if(!ua)return J;for(const xa of orderedRenderPhases)J[xa]=0;const la=new Map;for(const xa of ua){const[,,Aa,ba]=xa.type.split(":");if(ba==="start"){la.set(`${Aa}:${xa.renderId}`,xa);continue}if(ba==="end"){const Sa=la.get(`${Aa}:${xa.renderId}`);if(Sa){const Ma=xa.createdAt-Sa.createdAt;J[Aa]=(J[Aa]||0)+Ma}}}return J},numRenderPhases=26,debug=Debug$1("run-frame:RunFrame"),RunFrame=ua=>{const[J,la]=useRunFrameStore(sl=>[sl.circuitJson,sl.setCircuitJson]),[xa,Aa]=reactExports.useState(null),[ba,Sa]=reactExports.useReducer((sl,ll)=>sl+1,0),Ma=reactExports.useRef(0),[Ra,Ia]=reactExports.useState(!1),[La,Fa]=reactExports.useState(null),[ka,el]=reactExports.useState(ua.defaultActiveTab??"pcb");reactExports.useEffect(()=>{ua.debug&&Debug$1.enable("run-frame*")},[ua.debug]);const tl=ua.fsMap instanceof Map?ua.fsMap:Object.entries(ua.fsMap??{}).reduce((sl,[ll,dl])=>sl.set(ll,dl),new Map),rl=reactExports.useRef(null),il=reactExports.useRef(null);reactExports.useEffect(()=>{if(!tl)return;const sl=ua.showRunButton&&ba!==Ma.current;if(rl.current&&J){const dl=getChangesBetweenFsMaps(rl.current,tl);if(Object.keys(dl).length>0)debug("code changes detected");else if(il.current!==ua.entrypoint)debug("render triggered by entrypoint change");else if(!sl){debug("render triggered without changes to fsMap, skipping");return}}if(ua.showRunButton&&ba===Ma.current)return;rl.current=tl,il.current=ua.entrypoint,Ma.current=ba,Ia(!0);async function ll(){var Ol,ql,rc,sc,Kl;debug("running render worker"),Aa(null);const dl={progress:0},gl=globalThis.runFrameWorker??await createCircuitWebWorker({webWorkerUrl:ua.evalWebWorkerBlobUrl,verbose:!0});globalThis.runFrameWorker=gl,(Ol=ua.onRenderStarted)==null||Ol.call(ua);const _l=tl instanceof Map?Object.fromEntries(tl.entries()):tl;if(!_l[ua.entrypoint]){Aa({error:`Entrypoint not found (entrypoint: "${ua.entrypoint}", fsMapKeys: ${Object.keys(_l).join(", ")})`,stack:""});return}const vl=new Set;let Cl=Date.now();if(gl.on("renderable:renderLifecycle:anyEvent",Gl=>{dl.lastRenderEvent=Gl,dl.eventsProcessed=(dl.eventsProcessed??0)+1,vl.has(Gl.renderId)||vl.add(Gl.renderId);const kl=vl.size*numRenderPhases*2,Wl=dl.eventsProcessed>vl.size*2,tc=dl.eventsProcessed/kl,Zl=1-Math.exp(-tc*3);dl.progress=Wl?Zl:(1-Math.exp(-(dl.eventsProcessed??0)/1e3))*.05,ka==="render_log"&&(dl.renderEvents=dl.renderEvents??[],Gl.createdAt=Date.now(),dl.renderEvents.push(Gl),Date.now()-Cl>500&&(dl.phaseTimings=getPhaseTimingsFromRenderEvents(dl.renderEvents??[]),Cl=Date.now())),Fa({...dl})}),!(await gl.executeWithFsMap({entrypoint:ua.entrypoint,fsMap:_l}).then(()=>({success:!0})).catch(Gl=>{var Wl;const kl=Gl.message.includes(":")?Gl.message.replace(/[^:]+:/,""):Gl.message;return(Wl=ua.onError)==null||Wl.call(ua,Gl),Aa({error:kl,stack:Gl.stack}),console.error(Gl),{success:!1}})).success)return Ia(!1);const Il=gl.renderUntilSettled();debug("waiting for initial circuit json...");let Fl=await gl.getCircuitJson().catch(Gl=>{var kl;return debug("error getting initial circuit json",Gl),(kl=ua.onError)==null||kl.call(ua,Gl),Aa({error:Gl.message,stack:Gl.stack}),Ia(!1),null});Fl&&(debug("got initial circuit json"),la(Fl),(ql=ua.onCircuitJsonChange)==null||ql.call(ua,Fl),(rc=ua.onInitialRender)==null||rc.call(ua,{circuitJson:Fl}),await Il,debug("getting final circuit json"),Fl=await gl.getCircuitJson(),(sc=ua.onCircuitJsonChange)==null||sc.call(ua,Fl),la(Fl),(Kl=ua.onRenderFinished)==null||Kl.call(ua,{circuitJson:Fl}),ka==="render_log"&&(dl.phaseTimings=getPhaseTimingsFromRenderEvents(dl.renderEvents??[])),dl.progress=1,Fa({...dl}),Ia(!1))}ll()},[ua.fsMap,ua.entrypoint,ba]);const nl=reactExports.useMemo(()=>`cj-${Math.random().toString(36).substring(2,15)}`,[J]);return jsxRuntimeExports.jsx(CircuitJsonPreview,{defaultActiveTab:ua.defaultActiveTab,leftHeaderContent:jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment,{children:[ua.showRunButton&&jsxRuntimeExports.jsxs("div",{className:"rf-relative rf-inline-flex",children:[jsxRuntimeExports.jsxs("button",{type:"button",onClick:()=>{Sa(1)},className:"rf-flex rf-items-center rf-gap-2 rf-px-4 rf-py-2 rf-bg-blue-600 hover:rf-bg-blue-700 rf-text-white rf-rounded-md disabled:rf-opacity-50 transition-colors duration-200",disabled:Ra,children:["Run"," ",Ra?jsxRuntimeExports.jsx(LoaderCircle,{className:"rf-w-3 rf-h-3 rf-animate-spin"}):jsxRuntimeExports.jsx(Play,{className:"rf-w-3 rf-h-3"})]}),Ra&&jsxRuntimeExports.jsx("div",{className:"rf-flex rf-items-center",children:jsxRuntimeExports.jsx(Button,{onClick:sl=>{sl.stopPropagation(),Ia(!1),globalThis.runFrameWorker&&(globalThis.runFrameWorker.kill(),globalThis.runFrameWorker=null)},variant:"ghost",size:"icon",className:"rf-text-red-300 hover:rf-text-red-400 hover:!rf-bg-transparent -ml-4 [&>svg]:rf-text-red-300 [&>svg]:hover:rf-text-red-400 rf-flex rf-items-center rf-justify-center",children:jsxRuntimeExports.jsx(Square,{className:"!rf-h-2.5 !rf-w-2.5",fill:"currentColor",stroke:"currentColor"})})})]}),ua.leftHeaderContent]}),onActiveTabChange:el,circuitJson:J,circuitJsonKey:nl,renderLog:La,isRunningCode:Ra,errorMessage:xa==null?void 0:xa.error,onEditEvent:ua.onEditEvent,editEvents:ua.editEvents})};debug$2.extend("useEditEventController"),Debug$1("run-frame:RunFrameWithApi");const root=clientExports.createRoot(document.getElementById("root"));root.render(jsxRuntimeExports.jsx(React.StrictMode,{children:jsxRuntimeExports.jsx("div",{style:{width:"100vw",height:"100vh"},children:jsxRuntimeExports.jsx(RunFrame,{fsMap:{"main.tsx":`
22704
22704
  circuit.add(
22705
22705
  <board width="10mm" height="10mm">
22706
22706
  <resistor name="R1" resistance="1k" footprint="0402" />
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@tscircuit/runframe",
3
3
  "main": "dist/preview.js",
4
4
  "type": "module",
5
- "version": "0.0.136",
5
+ "version": "0.0.137",
6
6
  "exports": {
7
7
  ".": "./dist/preview.js",
8
8
  "./preview": "./dist/preview.js",