@tscircuit/runframe 0.0.145 → 0.0.147
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 +2 -2
- package/dist/standalone.min.js +1 -1
- package/package.json +2 -2
package/dist/runner.js
CHANGED
|
@@ -390,7 +390,7 @@ var RunFrame = (props) => {
|
|
|
390
390
|
]
|
|
391
391
|
}
|
|
392
392
|
),
|
|
393
|
-
isRunning && /* @__PURE__ */ jsx("div", { className: "rf-flex rf-items-center", children: /* @__PURE__ */ jsx(
|
|
393
|
+
isRunning && /* @__PURE__ */ jsx("div", { className: "rf-flex rf-items-center rf-ml-1", children: /* @__PURE__ */ jsx(
|
|
394
394
|
Button,
|
|
395
395
|
{
|
|
396
396
|
onClick: (e) => {
|
|
@@ -403,7 +403,7 @@ var RunFrame = (props) => {
|
|
|
403
403
|
},
|
|
404
404
|
variant: "ghost",
|
|
405
405
|
size: "icon",
|
|
406
|
-
className: "rf-text-red-300 hover:rf-text-red-400 hover:!rf-bg-transparent
|
|
406
|
+
className: "rf-text-red-300 hover:rf-text-red-400 hover:!rf-bg-transparent [&>svg]:rf-text-red-300 [&>svg]:hover:rf-text-red-400 rf-flex rf-items-center rf-justify-center",
|
|
407
407
|
children: /* @__PURE__ */ jsx(
|
|
408
408
|
Square,
|
|
409
409
|
{
|
package/dist/standalone.min.js
CHANGED
|
@@ -13130,7 +13130,7 @@ searched component ${l.getString()}, which has ports: ${l.children.filter(c=>c.c
|
|
|
13130
13130
|
[zustand devtools middleware] Unsupported __setState action format.
|
|
13131
13131
|
When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(),
|
|
13132
13132
|
and value of this only key should be a state object. Example: { "type": "__setState", "state": { "abc123Store": { "foo": "bar" } } }
|
|
13133
|
-
`);const C=b.state[s];if(C==null)return;JSON.stringify(i.getState())!==JSON.stringify(C)&&v(C);return}i.dispatchFromDevtools&&typeof i.dispatch=="function"&&i.dispatch(b)});case"DISPATCH":switch(E.payload.type){case"RESET":return v(x),s===void 0?u==null?void 0:u.init(i.getState()):u==null?void 0:u.init(qF(l.name));case"COMMIT":if(s===void 0){u==null||u.init(i.getState());return}return u==null?void 0:u.init(qF(l.name));case"ROLLBACK":return Hpe(E.state,b=>{if(s===void 0){v(b),u==null||u.init(i.getState());return}v(b[s]),u==null||u.init(qF(l.name))});case"JUMP_TO_STATE":case"JUMP_TO_ACTION":return Hpe(E.state,b=>{if(s===void 0){v(b);return}JSON.stringify(i.getState())!==JSON.stringify(b[s])&&v(b[s])});case"IMPORT_STATE":{const{nextLiftedState:b}=E.payload,C=(S=b.computedStates.slice(-1)[0])==null?void 0:S.state;if(!C)return;v(s===void 0?C:C[s]),u==null||u.send(null,b);return}case"PAUSE_RECORDING":return h=!h}return}}),x},Hpe=(r,e)=>{let t;try{t=JSON.parse(r)}catch(n){console.error("[zustand devtools middleware] Could not parse the received json",n)}t!==void 0&&e(t)},XR=window.API_BASE_URL??"/api",Eat=vg("run-frame"),qpe=Eat.extend("store");async function wat(r,e){return(await(await fetch(`${XR}/files/upsert`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({file_path:r,text_content:e})})).json()).file}async function $pe(r){return(await(await fetch(`${XR}/files/get?file_path=${encodeURIComponent(r)}`)).json()).file}async function pmn(r){const e=r?`${XR}/events/list?since=${encodeURIComponent(r)}`:`${XR}/events/list`;return(await(await fetch(e)).json()).event_list}async function hmn(){const r=await fetch(`${XR}/files/list`),{file_list:e}=await r.json(),t=new Map;for(const n of e){const i=await $pe(n.file_path);t.set(n.file_path,i.text_content)}return t}const mmn=RCt()(dmn((r,e)=>({fsMap:new Map,lastEventTime:new Date().toISOString(),isPolling:!1,error:null,circuitJson:null,lastManualEditsChangeSentAt:0,recentEvents:[],loadInitialFiles:async()=>{const t=await hmn();qpe("loaded initial files",{fsMap:t}),r({fsMap:t})},upsertFile:async(t,n)=>{try{const i=await wat(t,n);r(a=>({fsMap:new Map(a.fsMap).set(i.file_path,i.text_content)}))}catch(i){r({error:i})}},getFile:async t=>{try{const n=await $pe(t);r(i=>({fsMap:new Map(i.fsMap).set(n.file_path,n.text_content)}))}catch(n){r({error:n})}},setCircuitJson:t=>{t!==e().circuitJson&&r({circuitJson:t})},startPolling:()=>{const t=async()=>{const n=e();if(n.isPolling){try{const i=await pmn(n.lastEventTime);if(i.length>0){r(s=>({recentEvents:[...s.recentEvents,...i].slice(0,100)}));const a=i[i.length-1].created_at,o=new Map(n.fsMap);for(const s of i)if(s.event_type==="FILE_UPDATED"){const l=await $pe(s.file_path);if(s.file_path==="manual_edits.json"&&Date.now()-n.lastManualEditsChangeSentAt<1e3)continue;o.set(l.file_path,l.text_content)}r({fsMap:o,lastEventTime:a})}}catch(i){r({error:i})}setTimeout(t,1e3)}};r({isPolling:!0}),t()},stopPolling:()=>{r({isPolling:!1})},pushEvent:async t=>{await fetch(`${window.API_BASE_URL??""}/api/events/create`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})},applyEditEventsAndUpdateManualEditsJson:async t=>{qpe("applyEditEventsAndUpdateManualEditsJson",{editEvents:t});const n=e();if(!n.circuitJson)return;const i=n.fsMap.get("manual-edits.json"),a=i?JSON.parse(i):{},o=Ctn({circuitJson:n.circuitJson,editEvents:t,manualEditsFile:a});qpe("updatedManualEditsFileContent",o),r(s=>({lastManualEditsChangeSentAt:Date.now(),fsMap:new Map(s.fsMap).set("manual-edits.json",JSON.stringify(o))})),await wat("manual-edits.json",JSON.stringify(o,null,2))}}),{name:"run-frame-store"})),vmn=(r,e)=>{const t={};for(const[n,i]of r.entries()){const a=e.get(n);a!==i&&(t[n]={old:i,new:a})}for(const[n,i]of e.entries())r.has(n)||(t[n]={old:void 0,new:i});return t},Tat=r=>{const e={};if(!r)return e;for(const n of K3)e[n]=0;const t=new Map;for(const n of r){const[,,i,a]=n.type.split(":");if(a==="start"){t.set(`${i}:${n.renderId}`,n);continue}if(a==="end"){const o=t.get(`${i}:${n.renderId}`);if(o){const s=n.createdAt-o.createdAt;e[i]=(e[i]||0)+s}}}return e},ymn=26,N8=vg("run-frame:RunFrame"),gmn=r=>{const[e,t]=mmn(C=>[C.circuitJson,C.setCircuitJson]),[n,i]=Ct.useState(null),[a,o]=Ct.useReducer((C,N)=>C+1,0),s=Ct.useRef(0),[l,c]=Ct.useState(!1),[u,f]=Ct.useState(null),[h,v]=Ct.useState(r.defaultActiveTab??"pcb");Ct.useEffect(()=>{r.debug&&vg.enable("run-frame*")},[r.debug]);const x=r.fsMap instanceof Map?r.fsMap:Object.entries(r.fsMap??{}).reduce((C,[N,U])=>C.set(N,U),new Map),E=Ct.useRef(null),S=Ct.useRef(null);Ct.useEffect(()=>{if(!x)return;const C=r.showRunButton&&a!==s.current;if(E.current&&e){const U=vmn(E.current,x);if(Object.keys(U).length>0)N8("code changes detected");else if(S.current!==r.entrypoint)N8("render triggered by entrypoint change");else if(!C){N8("render triggered without changes to fsMap, skipping");return}}if(r.showRunButton&&a===s.current)return;E.current=x,S.current=r.entrypoint,s.current=a,c(!0);async function N(){var de,ye,Se,Re,Te;N8("running render worker"),i(null);const U={progress:0},G=globalThis.runFrameWorker??await umn({webWorkerUrl:r.evalWebWorkerBlobUrl,verbose:!0});globalThis.runFrameWorker=G,(de=r.onRenderStarted)==null||de.call(r);const Z=x instanceof Map?Object.fromEntries(x.entries()):x;if(!Z[r.entrypoint]){i({error:`Entrypoint not found (entrypoint: "${r.entrypoint}", fsMapKeys: ${Object.keys(Z).join(", ")})`,stack:""});return}const $=new Set;let te=Date.now();if(G.on("renderable:renderLifecycle:anyEvent",Ce=>{U.lastRenderEvent=Ce,U.eventsProcessed=(U.eventsProcessed??0)+1,$.has(Ce.renderId)||$.add(Ce.renderId);const Me=$.size*ymn*2,Fe=U.eventsProcessed>$.size*2,Ie=U.eventsProcessed/Me,ke=1-Math.exp(-Ie*3);U.progress=Fe?ke:(1-Math.exp(-(U.eventsProcessed??0)/1e3))*.05,h==="render_log"&&(U.renderEvents=U.renderEvents??[],Ce.createdAt=Date.now(),U.renderEvents.push(Ce),Date.now()-te>500&&(U.phaseTimings=Tat(U.renderEvents??[]),te=Date.now())),f({...U})}),!(await G.executeWithFsMap({entrypoint:r.entrypoint,fsMap:Z}).then(()=>({success:!0})).catch(Ce=>{var Fe;const Me=Ce.message.includes(":")?Ce.message.replace(/[^:]+:/,""):Ce.message;return(Fe=r.onError)==null||Fe.call(r,Ce),i({error:Me,stack:Ce.stack}),console.error(Ce),{success:!1}})).success)return c(!1);const se=G.renderUntilSettled();N8("waiting for initial circuit json...");let fe=await G.getCircuitJson().catch(Ce=>{var Me;return N8("error getting initial circuit json",Ce),(Me=r.onError)==null||Me.call(r,Ce),i({error:Ce.message,stack:Ce.stack}),c(!1),null});fe&&(N8("got initial circuit json"),t(fe),(ye=r.onCircuitJsonChange)==null||ye.call(r,fe),(Se=r.onInitialRender)==null||Se.call(r,{circuitJson:fe}),await se,N8("getting final circuit json"),fe=await G.getCircuitJson(),(Re=r.onCircuitJsonChange)==null||Re.call(r,fe),t(fe),(Te=r.onRenderFinished)==null||Te.call(r,{circuitJson:fe}),h==="render_log"&&(U.phaseTimings=Tat(U.renderEvents??[])),U.progress=1,f({...U}),c(!1))}N()},[r.fsMap,r.entrypoint,a]);const b=Ct.useMemo(()=>`cj-${Math.random().toString(36).substring(2,15)}`,[e]);return _t.jsx(Jhn,{defaultActiveTab:r.defaultActiveTab,leftHeaderContent:_t.jsxs(_t.Fragment,{children:[r.showRunButton&&_t.jsxs("div",{className:"rf-relative rf-inline-flex",children:[_t.jsxs("button",{type:"button",onClick:()=>{o(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:l,children:["Run"," ",l?_t.jsx(zfe,{className:"rf-w-3 rf-h-3 rf-animate-spin"}):_t.jsx(IJe,{className:"rf-w-3 rf-h-3"})]}),l&&_t.jsx("div",{className:"rf-flex rf-items-center",children:_t.jsx(Ow,{onClick:C=>{C.stopPropagation(),c(!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
|
|
13133
|
+
`);const C=b.state[s];if(C==null)return;JSON.stringify(i.getState())!==JSON.stringify(C)&&v(C);return}i.dispatchFromDevtools&&typeof i.dispatch=="function"&&i.dispatch(b)});case"DISPATCH":switch(E.payload.type){case"RESET":return v(x),s===void 0?u==null?void 0:u.init(i.getState()):u==null?void 0:u.init(qF(l.name));case"COMMIT":if(s===void 0){u==null||u.init(i.getState());return}return u==null?void 0:u.init(qF(l.name));case"ROLLBACK":return Hpe(E.state,b=>{if(s===void 0){v(b),u==null||u.init(i.getState());return}v(b[s]),u==null||u.init(qF(l.name))});case"JUMP_TO_STATE":case"JUMP_TO_ACTION":return Hpe(E.state,b=>{if(s===void 0){v(b);return}JSON.stringify(i.getState())!==JSON.stringify(b[s])&&v(b[s])});case"IMPORT_STATE":{const{nextLiftedState:b}=E.payload,C=(S=b.computedStates.slice(-1)[0])==null?void 0:S.state;if(!C)return;v(s===void 0?C:C[s]),u==null||u.send(null,b);return}case"PAUSE_RECORDING":return h=!h}return}}),x},Hpe=(r,e)=>{let t;try{t=JSON.parse(r)}catch(n){console.error("[zustand devtools middleware] Could not parse the received json",n)}t!==void 0&&e(t)},XR=window.API_BASE_URL??"/api",Eat=vg("run-frame"),qpe=Eat.extend("store");async function wat(r,e){return(await(await fetch(`${XR}/files/upsert`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({file_path:r,text_content:e})})).json()).file}async function $pe(r){return(await(await fetch(`${XR}/files/get?file_path=${encodeURIComponent(r)}`)).json()).file}async function pmn(r){const e=r?`${XR}/events/list?since=${encodeURIComponent(r)}`:`${XR}/events/list`;return(await(await fetch(e)).json()).event_list}async function hmn(){const r=await fetch(`${XR}/files/list`),{file_list:e}=await r.json(),t=new Map;for(const n of e){const i=await $pe(n.file_path);t.set(n.file_path,i.text_content)}return t}const mmn=RCt()(dmn((r,e)=>({fsMap:new Map,lastEventTime:new Date().toISOString(),isPolling:!1,error:null,circuitJson:null,lastManualEditsChangeSentAt:0,recentEvents:[],loadInitialFiles:async()=>{const t=await hmn();qpe("loaded initial files",{fsMap:t}),r({fsMap:t})},upsertFile:async(t,n)=>{try{const i=await wat(t,n);r(a=>({fsMap:new Map(a.fsMap).set(i.file_path,i.text_content)}))}catch(i){r({error:i})}},getFile:async t=>{try{const n=await $pe(t);r(i=>({fsMap:new Map(i.fsMap).set(n.file_path,n.text_content)}))}catch(n){r({error:n})}},setCircuitJson:t=>{t!==e().circuitJson&&r({circuitJson:t})},startPolling:()=>{const t=async()=>{const n=e();if(n.isPolling){try{const i=await pmn(n.lastEventTime);if(i.length>0){r(s=>({recentEvents:[...s.recentEvents,...i].slice(0,100)}));const a=i[i.length-1].created_at,o=new Map(n.fsMap);for(const s of i)if(s.event_type==="FILE_UPDATED"){const l=await $pe(s.file_path);if(s.file_path==="manual_edits.json"&&Date.now()-n.lastManualEditsChangeSentAt<1e3)continue;o.set(l.file_path,l.text_content)}r({fsMap:o,lastEventTime:a})}}catch(i){r({error:i})}setTimeout(t,1e3)}};r({isPolling:!0}),t()},stopPolling:()=>{r({isPolling:!1})},pushEvent:async t=>{await fetch(`${window.API_BASE_URL??""}/api/events/create`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})},applyEditEventsAndUpdateManualEditsJson:async t=>{qpe("applyEditEventsAndUpdateManualEditsJson",{editEvents:t});const n=e();if(!n.circuitJson)return;const i=n.fsMap.get("manual-edits.json"),a=i?JSON.parse(i):{},o=Ctn({circuitJson:n.circuitJson,editEvents:t,manualEditsFile:a});qpe("updatedManualEditsFileContent",o),r(s=>({lastManualEditsChangeSentAt:Date.now(),fsMap:new Map(s.fsMap).set("manual-edits.json",JSON.stringify(o))})),await wat("manual-edits.json",JSON.stringify(o,null,2))}}),{name:"run-frame-store"})),vmn=(r,e)=>{const t={};for(const[n,i]of r.entries()){const a=e.get(n);a!==i&&(t[n]={old:i,new:a})}for(const[n,i]of e.entries())r.has(n)||(t[n]={old:void 0,new:i});return t},Tat=r=>{const e={};if(!r)return e;for(const n of K3)e[n]=0;const t=new Map;for(const n of r){const[,,i,a]=n.type.split(":");if(a==="start"){t.set(`${i}:${n.renderId}`,n);continue}if(a==="end"){const o=t.get(`${i}:${n.renderId}`);if(o){const s=n.createdAt-o.createdAt;e[i]=(e[i]||0)+s}}}return e},ymn=26,N8=vg("run-frame:RunFrame"),gmn=r=>{const[e,t]=mmn(C=>[C.circuitJson,C.setCircuitJson]),[n,i]=Ct.useState(null),[a,o]=Ct.useReducer((C,N)=>C+1,0),s=Ct.useRef(0),[l,c]=Ct.useState(!1),[u,f]=Ct.useState(null),[h,v]=Ct.useState(r.defaultActiveTab??"pcb");Ct.useEffect(()=>{r.debug&&vg.enable("run-frame*")},[r.debug]);const x=r.fsMap instanceof Map?r.fsMap:Object.entries(r.fsMap??{}).reduce((C,[N,U])=>C.set(N,U),new Map),E=Ct.useRef(null),S=Ct.useRef(null);Ct.useEffect(()=>{if(!x)return;const C=r.showRunButton&&a!==s.current;if(E.current&&e){const U=vmn(E.current,x);if(Object.keys(U).length>0)N8("code changes detected");else if(S.current!==r.entrypoint)N8("render triggered by entrypoint change");else if(!C){N8("render triggered without changes to fsMap, skipping");return}}if(r.showRunButton&&a===s.current)return;E.current=x,S.current=r.entrypoint,s.current=a,c(!0);async function N(){var de,ye,Se,Re,Te;N8("running render worker"),i(null);const U={progress:0},G=globalThis.runFrameWorker??await umn({webWorkerUrl:r.evalWebWorkerBlobUrl,verbose:!0});globalThis.runFrameWorker=G,(de=r.onRenderStarted)==null||de.call(r);const Z=x instanceof Map?Object.fromEntries(x.entries()):x;if(!Z[r.entrypoint]){i({error:`Entrypoint not found (entrypoint: "${r.entrypoint}", fsMapKeys: ${Object.keys(Z).join(", ")})`,stack:""});return}const $=new Set;let te=Date.now();if(G.on("renderable:renderLifecycle:anyEvent",Ce=>{U.lastRenderEvent=Ce,U.eventsProcessed=(U.eventsProcessed??0)+1,$.has(Ce.renderId)||$.add(Ce.renderId);const Me=$.size*ymn*2,Fe=U.eventsProcessed>$.size*2,Ie=U.eventsProcessed/Me,ke=1-Math.exp(-Ie*3);U.progress=Fe?ke:(1-Math.exp(-(U.eventsProcessed??0)/1e3))*.05,h==="render_log"&&(U.renderEvents=U.renderEvents??[],Ce.createdAt=Date.now(),U.renderEvents.push(Ce),Date.now()-te>500&&(U.phaseTimings=Tat(U.renderEvents??[]),te=Date.now())),f({...U})}),!(await G.executeWithFsMap({entrypoint:r.entrypoint,fsMap:Z}).then(()=>({success:!0})).catch(Ce=>{var Fe;const Me=Ce.message.includes(":")?Ce.message.replace(/[^:]+:/,""):Ce.message;return(Fe=r.onError)==null||Fe.call(r,Ce),i({error:Me,stack:Ce.stack}),console.error(Ce),{success:!1}})).success)return c(!1);const se=G.renderUntilSettled();N8("waiting for initial circuit json...");let fe=await G.getCircuitJson().catch(Ce=>{var Me;return N8("error getting initial circuit json",Ce),(Me=r.onError)==null||Me.call(r,Ce),i({error:Ce.message,stack:Ce.stack}),c(!1),null});fe&&(N8("got initial circuit json"),t(fe),(ye=r.onCircuitJsonChange)==null||ye.call(r,fe),(Se=r.onInitialRender)==null||Se.call(r,{circuitJson:fe}),await se,N8("getting final circuit json"),fe=await G.getCircuitJson(),(Re=r.onCircuitJsonChange)==null||Re.call(r,fe),t(fe),(Te=r.onRenderFinished)==null||Te.call(r,{circuitJson:fe}),h==="render_log"&&(U.phaseTimings=Tat(U.renderEvents??[])),U.progress=1,f({...U}),c(!1))}N()},[r.fsMap,r.entrypoint,a]);const b=Ct.useMemo(()=>`cj-${Math.random().toString(36).substring(2,15)}`,[e]);return _t.jsx(Jhn,{defaultActiveTab:r.defaultActiveTab,leftHeaderContent:_t.jsxs(_t.Fragment,{children:[r.showRunButton&&_t.jsxs("div",{className:"rf-relative rf-inline-flex",children:[_t.jsxs("button",{type:"button",onClick:()=>{o(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:l,children:["Run"," ",l?_t.jsx(zfe,{className:"rf-w-3 rf-h-3 rf-animate-spin"}):_t.jsx(IJe,{className:"rf-w-3 rf-h-3"})]}),l&&_t.jsx("div",{className:"rf-flex rf-items-center rf-ml-1",children:_t.jsx(Ow,{onClick:C=>{C.stopPropagation(),c(!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 [&>svg]:rf-text-red-300 [&>svg]:hover:rf-text-red-400 rf-flex rf-items-center rf-justify-center",children:_t.jsx(Nan,{className:"!rf-h-2.5 !rf-w-2.5",fill:"currentColor",stroke:"currentColor"})})})]}),r.leftHeaderContent]}),onActiveTabChange:v,circuitJson:e,circuitJsonKey:b,renderLog:u,isRunningCode:l,errorMessage:n==null?void 0:n.error,onEditEvent:r.onEditEvent,editEvents:r.editEvents})};Eat.extend("useEditEventController"),vg("run-frame:RunFrameWithApi"),wAe.createRoot(document.getElementById("root")).render(_t.jsx(od.StrictMode,{children:_t.jsx("div",{style:{width:"100vw",height:"100vh"},children:_t.jsx(gmn,{fsMap:{"main.tsx":`
|
|
13134
13134
|
circuit.add(
|
|
13135
13135
|
<board width="10mm" height="10mm">
|
|
13136
13136
|
<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.
|
|
5
|
+
"version": "0.0.147",
|
|
6
6
|
"exports": {
|
|
7
7
|
".": "./dist/preview.js",
|
|
8
8
|
"./preview": "./dist/preview.js",
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
"@tscircuit/core": "^0.0.301",
|
|
63
63
|
"@tscircuit/file-server": "^0.0.13",
|
|
64
64
|
"@tscircuit/pcb-viewer": "^1.11.29",
|
|
65
|
-
"@tscircuit/props": "^0.0.
|
|
65
|
+
"@tscircuit/props": "^0.0.139",
|
|
66
66
|
"@tscircuit/schematic-viewer": "2.0.9",
|
|
67
67
|
"circuit-to-svg": "^0.0.101",
|
|
68
68
|
"clsx": "^2.1.1",
|