@tscircuit/runframe 0.0.1585 → 0.0.1586
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/standalone.min.js
CHANGED
|
@@ -5686,7 +5686,7 @@ test("${g} should solve problem correctly", () => {
|
|
|
5686
5686
|
// Add more specific assertions based on expected output
|
|
5687
5687
|
// expect(solver.netLabelPlacementSolver!.netLabelPlacements).toMatchInlineSnapshot()
|
|
5688
5688
|
})
|
|
5689
|
-
`,I=new Blob([c],{type:"text/plain"}),l=URL.createObjectURL(I),B=document.createElement("a");B.href=l,B.download=`${g}.test.ts`,B.click(),URL.revokeObjectURL(l)}catch(a){alert(`Error generating test.ts for ${t.constructor.name}: ${a instanceof Error?a.message:String(a)}`)}i(!1)};return W.jsxs("div",{className:`relative ${A}`,ref:n,children:[W.jsx("button",{className:"px-2 py-1 rounded text-xs cursor-pointer",onClick:()=>i(!e),title:`Download options for ${t.constructor.name}`,children:t.constructor.name}),e&&W.jsxs("div",{className:"absolute top-full left-0 mt-1 bg-white border border-gray-300 rounded shadow-lg z-10 min-w-[150px]",children:[W.jsx("button",{className:"w-full text-left px-3 py-2 hover:bg-gray-100 text-xs",onClick:o,children:"Download JSON"}),W.jsx("button",{className:"w-full text-left px-3 py-2 hover:bg-gray-100 text-xs",onClick:s,children:"Download page.tsx"}),W.jsx("button",{className:"w-full text-left px-3 py-2 hover:bg-gray-100 text-xs",onClick:r,children:"Download test.ts"})]})]})},oIe=t=>t.activeSubSolver?[t,...oIe(t.activeSubSolver)]:[t],t9t=({solver:t})=>{const A=oIe(t);return W.jsx("div",{className:"flex gap-1 items-center text-sm pt-1",children:A.map((e,i)=>W.jsxs("div",{className:"flex items-center",children:[i>0&&W.jsx("span",{className:"text-gray-400 mx-1",children:"→"}),W.jsx(e9t,{solver:e})]},e.constructor.name))})},i9t=({solver:t,triggerRender:A,animationSpeed:e=25,onSolverStarted:i,onSolverCompleted:n})=>{const[o,s]=V.useReducer(Q=>!Q,!1),r=V.useRef(void 0),a=()=>{!t.solved&&!t.failed&&(t.step(),A())},g=()=>{!t.solved&&!t.failed&&(i&&i(t),t.solve(),A(),n&&n(t))},c=()=>{o?(r.current&&(clearInterval(r.current),r.current=void 0),s()):(s(),r.current=setInterval(()=>{if(t.solved||t.failed){r.current&&(clearInterval(r.current),r.current=void 0),s(),A(),n&&t.solved&&n(t);return}t.step(),A()},e))},I=()=>{const Q=t;if(Q.getCurrentPhase&&!t.solved&&!t.failed){const h=Q.getCurrentPhase();for(;Q.getCurrentPhase()===h&&!t.solved&&!t.failed;)t.step();A()}},l=()=>{if(t.solved||t.failed||o)return;const Q=window.prompt("Step until which iteration?",`${t.iterations}`);if(Q===null)return;const h=Number(Q);if(!Number.isFinite(h)){window.alert("Please enter a valid number for the iteration");return}for(;t.iterations<h&&!t.solved&&!t.failed;)t.step();A(),t.solved&&n&&n(t)};V.useEffect(()=>()=>{r.current&&clearInterval(r.current)},[]),V.useEffect(()=>{(t.solved||t.failed)&&o&&(r.current&&(clearInterval(r.current),r.current=void 0),s())},[t.solved,t.failed,o]);const B=t.getCurrentPhase!==void 0,C=B?t.getCurrentPhase():null;return W.jsxs("div",{className:"space-y-2 p-2 border-b",children:[W.jsx("div",{className:"flex items-center",children:W.jsx(t9t,{solver:t})}),W.jsxs("div",{className:"flex gap-2 items-center flex-wrap",children:[W.jsx("button",{onClick:a,disabled:t.solved||t.failed||o,className:"bg-blue-500 hover:bg-blue-600 disabled:bg-gray-300 text-white px-3 py-1 rounded text-sm",children:"Step"}),W.jsx("button",{onClick:g,disabled:t.solved||t.failed||o,className:"bg-green-500 hover:bg-green-600 disabled:bg-gray-300 text-white px-3 py-1 rounded text-sm",children:"Solve"}),W.jsx("button",{onClick:c,disabled:t.solved||t.failed,className:`px-3 py-1 rounded text-white text-sm ${o?"bg-red-500 hover:bg-red-600":"bg-yellow-500 hover:bg-yellow-600"} disabled:bg-gray-300`,children:o?"Stop":"Animate"}),W.jsx("button",{onClick:l,disabled:t.solved||t.failed||o,className:"bg-orange-500 hover:bg-orange-600 disabled:bg-gray-300 text-white px-3 py-1 rounded text-sm",children:"Step Until Iteration"}),B&&W.jsx("button",{onClick:I,disabled:t.solved||t.failed||o,className:"bg-purple-500 hover:bg-purple-600 disabled:bg-gray-300 text-white px-3 py-1 rounded text-sm",children:"Next Stage"}),W.jsxs("div",{className:"text-sm text-gray-600",children:["Iterations: ",t.iterations]}),t.timeToSolve!==void 0&&W.jsxs("div",{className:"text-sm text-gray-600",children:["Time: ",(t.timeToSolve/1e3).toFixed(3),"s"]}),C&&W.jsxs("div",{className:"text-sm text-gray-600",children:["Phase: ",W.jsx("span",{className:"font-medium",children:C})]}),t.solved&&W.jsx("div",{className:"px-2 py-1 bg-green-100 text-green-800 rounded text-sm",children:"Solved"}),t.failed&&W.jsx("div",{className:"px-2 py-1 bg-red-100 text-red-800 rounded text-sm",children:"Failed"})]}),t.error&&W.jsxs("div",{className:"text-red-600 text-sm",children:["Error: ",t.error]})]})},n9t=(t,A,e)=>{const i=t.currentPipelineStepIndex;return A<i?"Completed":A===i&&t.activeSubSolver?t.activeSubSolver.failed?"Failed":"In Progress":"Not Started"},o9t=(t,A)=>{const i=t.pipelineDef[A].solverName,n=n9t(t,A),o=t[i],s=t.firstIterationOfPhase?.[i]??null,r=t.iterations;let a=0;if(n==="Completed"){const l=t.pipelineDef[A+1],B=l?t.firstIterationOfPhase?.[l.solverName]:void 0;B!==void 0&&s!==null?a=B-s:s!==null&&(a=r-s)}else n==="In Progress"&&s!==null&&(a=r-s);const g=t.timeSpentOnPhase?.[i]??0;let c=0;n==="Completed"?c=1:n==="In Progress"&&o&&(c=o.progress??0);const I=o?.stats??null;return{index:A,name:i,status:n,firstIteration:s,iterations:a,progress:c,timeSpent:g,stats:I&&Object.keys(I).length>0?I:null,solverInstance:o??null}},s9t=({status:t})=>{const A={"Not Started":"text-blue-600","In Progress":"text-yellow-600",Completed:"text-green-600",Failed:"text-red-600"};return W.jsx("span",{className:`font-medium ${A[t]}`,children:t})},r9t=({progress:t})=>{if(t===0)return null;const A=Math.round(t*100);return W.jsxs("div",{className:"flex items-center gap-2",children:[W.jsx("div",{className:"w-20 h-2 bg-gray-200 rounded overflow-hidden",children:W.jsx("div",{className:"h-full bg-blue-500 transition-all duration-200",style:{width:`${A}%`}})}),W.jsxs("span",{className:"text-xs text-gray-500",children:[A,"%"]})]})},a9t=t=>Object.entries(t).map(([A,e])=>`${A}: ${e}`).join(", "),g9t=({stats:t})=>{if(!t||Object.keys(t).length===0)return W.jsx("span",{children:"-"});const A=Object.entries(t),e=a9t(t);return W.jsxs("details",{className:"cursor-pointer",children:[W.jsx("summary",{className:"whitespace-nowrap overflow-hidden text-ellipsis max-w-[200px]",children:e}),W.jsx("div",{className:"mt-1 text-xs",children:A.map(([i,n])=>W.jsxs("div",{children:[i,": ",String(n)]},i))})]})},qfA=t=>{if(t===null||typeof t!="object")return t;if(Array.isArray(t))return t.map(qfA);const A={};for(const[e,i]of Object.entries(t))e.startsWith("_")||(A[e]=qfA(i));return A},c9t=(t,A)=>{try{if(typeof t.getConstructorParams!="function"){alert(`getConstructorParams() is not implemented for ${A}`);return}const e=qfA(t.getConstructorParams()),i=new Blob([JSON.stringify(e,null,2)],{type:"application/json"}),n=URL.createObjectURL(i),o=document.createElement("a");o.href=n,o.download=`${A}_input.json`,o.click(),URL.revokeObjectURL(n)}catch(e){alert(`Error downloading input for ${A}: ${e instanceof Error?e.message:String(e)}`)}},I9t=({solver:t,onStepUntilPhase:A,onDownloadInput:e})=>{const i=t.pipelineDef.map((r,a)=>o9t(t,a)),n=r=>{A?.(r)},o=r=>{r.solverInstance&&(e?e(r.solverInstance,r.name):c9t(r.solverInstance,r.name))},s=r=>`${(r/1e3).toFixed(2)}s`;return W.jsxs("div",{className:"border-t border-gray-200",children:[W.jsx("div",{className:"px-4 py-2 bg-gray-50 border-b border-gray-200",children:W.jsx("h3",{className:"text-sm font-semibold text-gray-700",children:"Pipeline Steps"})}),W.jsx("div",{className:"overflow-x-auto",children:W.jsxs("table",{className:"w-full text-sm",children:[W.jsx("thead",{children:W.jsxs("tr",{className:"bg-gray-50 border-b border-gray-200",children:[W.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Step"}),W.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Status"}),W.jsxs("th",{className:"px-4 py-2 text-center font-semibold text-gray-700",children:["i",W.jsx("sub",{children:"0"})]}),W.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Iterations"}),W.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Progress"}),W.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Time"}),W.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Stats"}),W.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Input"})]})}),W.jsx("tbody",{children:i.map(r=>W.jsxs("tr",{className:`border-b border-gray-100 ${r.status==="In Progress"?"bg-yellow-50":""}`,children:[W.jsx("td",{className:"px-4 py-2",children:W.jsxs("div",{className:"flex items-center gap-2",children:[W.jsx("span",{className:"text-gray-400 w-6",children:String(r.index+1).padStart(2,"0")}),W.jsx("button",{onClick:()=>n(r.name),disabled:r.status==="Completed"||t.solved||t.failed,className:"text-blue-500 hover:text-blue-700 disabled:text-gray-300 disabled:cursor-not-allowed",title:`Step until ${r.name} completes`,children:W.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",className:"w-4 h-4",children:W.jsx("path",{fillRule:"evenodd",d:"M4.5 5.653c0-1.426 1.529-2.33 2.779-1.643l11.54 6.348c1.295.712 1.295 2.573 0 3.285L7.28 19.991c-1.25.687-2.779-.217-2.779-1.643V5.653z",clipRule:"evenodd"})})}),W.jsx("span",{className:"font-medium text-gray-900",children:r.name})]})}),W.jsx("td",{className:"px-4 py-2",children:W.jsx(s9t,{status:r.status})}),W.jsx("td",{className:"px-4 py-2 text-center text-gray-600",children:r.firstIteration!==null?r.firstIteration:""}),W.jsx("td",{className:"px-4 py-2 text-gray-600",children:r.iterations}),W.jsx("td",{className:"px-4 py-2",children:W.jsx(r9t,{progress:r.progress})}),W.jsx("td",{className:"px-4 py-2 text-gray-600",children:s(r.timeSpent)}),W.jsx("td",{className:"px-4 py-2 text-gray-500",children:W.jsx(g9t,{stats:r.stats})}),W.jsx("td",{className:"px-4 py-2",children:r.solverInstance?W.jsxs("button",{onClick:()=>o(r),className:"flex items-center gap-1 text-blue-500 hover:text-blue-700",title:`Download input for ${r.name}`,children:[W.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",className:"w-4 h-4",children:W.jsx("path",{fillRule:"evenodd",d:"M12 2.25a.75.75 0 01.75.75v11.69l3.22-3.22a.75.75 0 111.06 1.06l-4.5 4.5a.75.75 0 01-1.06 0l-4.5-4.5a.75.75 0 111.06-1.06l3.22 3.22V3a.75.75 0 01.75-.75zm-9 13.5a.75.75 0 01.75.75v2.25a1.5 1.5 0 001.5 1.5h13.5a1.5 1.5 0 001.5-1.5V16.5a.75.75 0 011.5 0v2.25a3 3 0 01-3 3H5.25a3 3 0 01-3-3V16.5a.75.75 0 01.75-.75z",clipRule:"evenodd"})}),W.jsx("span",{children:"Input"})]}):null})]},r.name))})]})})]})},l9t=class extends tn.Component{constructor(t){super(t),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(t){console.error("InteractiveGraphics render error:",t)}render(){return this.state.hasError?this.props.fallback:this.props.children}};function B9t({graphics:t}){const A=t.points??[],e=t.lines??[],i=t.rects??[],n=t.circles??[],o=t.texts??[];let s=Number.POSITIVE_INFINITY,r=Number.POSITIVE_INFINITY,a=Number.NEGATIVE_INFINITY,g=Number.NEGATIVE_INFINITY;const c=(h,E)=>{typeof h=="number"&&(h<s&&(s=h),h>a&&(a=h)),typeof E=="number"&&(E<r&&(r=E),E>g&&(g=E))};for(const h of A)c(h.x,h.y);for(const h of e){const E=h.points??[];for(const u of E)c(u.x,u.y)}for(const h of i){const E=h.x??0,u=h.y??0,d=h.width??0,p=h.height??0;c(E,u),c(E+d,u+p)}for(const h of n){const E=h.x??0,u=h.y??0,d=h.radius??1;c(E-d,u-d),c(E+d,u+d)}for(const h of o)c(h.x,h.y);(!isFinite(s)||!isFinite(r)||!isFinite(a)||!isFinite(g))&&(s=-20,r=-20,a=20,g=20);const I=10,l=s-I,B=r-I,C=Math.max(1,a-s+2*I),Q=Math.max(1,g-r+2*I);return W.jsxs("svg",{className:"w-full h-[400px] bg-white",viewBox:`${l} ${B} ${C} ${Q}`,role:"img","aria-label":"Graphics fallback",children:[i.map((h,E)=>W.jsx("rect",{x:h.x??0,y:h.y??0,width:h.width??0,height:h.height??0,fill:"none",stroke:h.strokeColor??"black",strokeWidth:h.strokeWidth??1},`rect-${E}`)),e.map((h,E)=>W.jsx("polyline",{fill:"none",stroke:h.strokeColor??"black",strokeWidth:h.strokeWidth??1,points:(h.points??[]).map(u=>`${u.x??0},${u.y??0}`).join(" ")},`line-${E}`)),n.map((h,E)=>W.jsx("circle",{cx:h.x??0,cy:h.y??0,r:h.radius??1.5,fill:h.fillColor??"none",stroke:h.strokeColor??"black",strokeWidth:h.strokeWidth??1},`circle-${E}`)),A.map((h,E)=>W.jsx("circle",{cx:h.x??0,cy:h.y??0,r:h.radius??1.5,fill:h.color??"black"},`point-${E}`)),o.map((h,E)=>W.jsx("text",{x:h.x??0,y:h.y??0,fontSize:h.fontSize??10,fill:h.color??"black",children:h.text??""},`text-${E}`))]})}var C9t=({solver:t,animationSpeed:A=25,onSolverStarted:e,onSolverCompleted:i})=>{const[n,o]=V.useReducer(c=>c+1,0),s=V.useMemo(()=>{try{return t.visualize()||{points:[],lines:[],rects:[],circles:[]}}catch(c){return console.error("Visualization error:",c),{points:[],lines:[],rects:[],circles:[]}}},[t,n]),r=V.useMemo(()=>(s.rects?.length||0)===0&&(s.lines?.length||0)===0&&(s.points?.length||0)===0&&(s.circles?.length||0)===0,[s]);V.useEffect(()=>{if(!(typeof document>"u")&&!document.querySelector('script[src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"]')){const c=document.createElement("script");c.src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4",document.head.appendChild(c)}},[]);const a=t.pipelineDef!==void 0,g=c=>{const I=t;if(!t.solved&&!t.failed){for(;!t.solved&&!t.failed&&I.currentPipelineStepIndex<=I.pipelineDef.findIndex(l=>l.solverName===c);)t.step();o()}};return W.jsxs("div",{children:[W.jsx(i9t,{solver:t,triggerRender:o,animationSpeed:A,onSolverStarted:e,onSolverCompleted:i}),r?W.jsx("div",{className:"p-4 text-gray-500",children:"No Graphics Yet"}):W.jsx(l9t,{fallback:W.jsx(B9t,{graphics:s}),children:W.jsx(A9t,{graphics:s})}),a&&W.jsx(I9t,{solver:t,onStepUntilPhase:g})]})};const Q9t=()=>{V.useEffect(()=>{const t="tailwind-cdn-script";if(document.getElementById(t)||window.tailwind)return;const A=document.createElement("div");A.className="hidden",document.body.appendChild(A);const e=window.getComputedStyle(A).display==="none";if(document.body.removeChild(A),e)return;const i=document.createElement("script");i.id=t,i.src="https://cdn.tailwindcss.com",document.head.appendChild(i)},[])},h9t=t=>t.toLowerCase().includes("pack")?bMt:t.toLowerCase().includes("rout")?GMt:lMt,E9t=({solverEvents:t=[]})=>{const[A,e]=V.useState(null);Q9t();const i=V.useMemo(()=>{const r=new Map;for(const a of t){const g=`${a.componentName}-${a.solverName}`;r.set(g,a)}return r},[t]),n=V.useMemo(()=>Array.from(i.keys()),[i]),o=A?i.get(A):null,s=V.useMemo(()=>{if(!o)return{instance:null,error:null,classFound:!1};const r=VnA[o.solverName];if(!r)return{instance:null,error:`Solver class "${o.solverName}" not found in SOLVERS registry. Available: ${Object.keys(VnA).join(", ")}`,classFound:!1};try{const a=o.solverParams,g=a?.input!==void 0?a.input:a;return{instance:new r(g),error:null,classFound:!0}}catch(a){const g=a instanceof Error?a.message:String(a);return console.error("Failed to reconstruct solver:",a),{instance:null,error:`Failed to instantiate solver: ${g}`,classFound:!0}}},[o]);return t.length===0?W.jsx("div",{className:"rf-p-4",children:W.jsx("div",{className:"rf-bg-gray-50 rf-rounded-md rf-border rf-border-gray-200",children:W.jsxs("div",{className:"rf-p-4",children:[W.jsx("h3",{className:"rf-text-lg rf-font-semibold rf-text-gray-800 rf-mb-3",children:"No Solvers Detected"}),W.jsx("p",{className:"rf-text-sm rf-text-gray-600",children:"Solvers will appear here when the circuit runs. Solvers are used for tasks like component packing and autorouting."})]})})}):W.jsxs("div",{className:"rf-flex rf-h-full rf-overflow-hidden",children:[W.jsxs("div",{className:"rf-w-64 rf-border-r rf-border-gray-200 rf-overflow-y-auto rf-flex-shrink-0",children:[W.jsxs("div",{className:"rf-text-xs rf-font-semibold rf-text-gray-500 rf-px-3 rf-py-2 rf-bg-gray-50 rf-border-b rf-border-gray-200",children:[n.length," ",n.length===1?"Solver":"Solvers"]}),n.map(r=>{const a=i.get(r),g=A===r;return W.jsx("div",{className:`rf-px-3 rf-py-2 rf-cursor-pointer rf-border-b rf-border-gray-100 ${g?"rf-bg-blue-50 rf-border-l-2 rf-border-l-blue-500":"hover:rf-bg-gray-50"}`,onClick:()=>e(r),children:(()=>{const c=h9t(a.solverName);return W.jsxs("div",{className:"rf-flex rf-items-center rf-gap-2",children:[W.jsx(c,{className:"rf-w-4 rf-h-4 rf-text-blue-500 rf-flex-shrink-0"}),W.jsxs("div",{className:"rf-flex-1 rf-min-w-0",children:[W.jsx("div",{className:"rf-text-sm rf-font-medium rf-text-gray-800 rf-truncate",children:a.componentName}),W.jsx("div",{className:"rf-text-xs rf-text-gray-500 rf-truncate",children:a.solverName})]})]})})()},r)})]}),W.jsx("div",{className:"rf-flex-1 rf-overflow-hidden",children:o?s.instance?W.jsx(Yy,{fallback:W.jsx("div",{className:"rf-p-4",children:W.jsxs("div",{className:"rf-bg-red-50 rf-rounded-md rf-border rf-border-red-200 rf-p-4",children:[W.jsx("h3",{className:"rf-text-lg rf-font-semibold rf-text-red-800 rf-mb-2",children:"Error Loading Solver Debugger"}),W.jsxs("p",{className:"rf-text-sm rf-text-red-600",children:["Failed to render the solver debugger for"," ",o.solverName]})]})}),children:W.jsx(C9t,{solver:s.instance})}):W.jsxs("div",{className:"rf-p-4",children:[W.jsxs("div",{className:"rf-mb-4",children:[W.jsx("h3",{className:"rf-text-lg rf-font-semibold rf-text-gray-800",children:o.solverName}),W.jsxs("p",{className:"rf-text-sm rf-text-gray-500",children:["Component: ",o.componentName]})]}),s.error&&W.jsx("div",{className:`rf-rounded-md rf-border rf-p-4 rf-mb-4 ${s.classFound?"rf-bg-red-50 rf-border-red-200":"rf-bg-yellow-50 rf-border-yellow-200"}`,children:W.jsx("p",{className:`rf-text-sm ${s.classFound?"rf-text-red-700":"rf-text-yellow-700"}`,children:s.error})}),W.jsxs("div",{className:"rf-border rf-border-gray-200 rf-rounded-md rf-overflow-hidden",children:[W.jsx("div",{className:"rf-px-3 rf-py-2 rf-bg-gray-50",children:W.jsx("span",{className:"rf-text-sm rf-font-medium rf-text-gray-700",children:"Solver Parameters"})}),W.jsx("div",{className:"rf-p-3 rf-bg-white rf-border-t rf-border-gray-200",children:W.jsx("pre",{className:"rf-text-xs rf-font-mono rf-text-gray-600 rf-whitespace-pre-wrap rf-overflow-x-auto",children:JSON.stringify(o.solverParams,null,2)})})]})]}):W.jsx("div",{className:"rf-flex rf-items-center rf-justify-center rf-h-full",children:W.jsx("p",{className:"rf-text-sm rf-text-gray-500",children:"Select a solver from the list to view details"})})})]})},sIe=({errorMessage:t,errorStack:A,circuitJsonErrors:e})=>{V.useEffect(()=>{if(t){const i=new Error(t);A&&(i.stack=A);try{Y5.captureException(i)}catch{}}},[t,A]),V.useEffect(()=>{if(e&&e.length>0)for(const i of e){const n=new Error(i.message||"Circuit JSON Error");i.stack&&(n.stack=i.stack);try{Y5.captureException(n,{error_type:i.type})}catch{}}},[e])},rIe="0.0.1584",u9t={version:rIe},j9=mYA()(wYA(t=>({lastRunEvalVersion:void 0,setLastRunEvalVersion:A=>{t({lastRunEvalVersion:A})}}),{name:"runframe-runner-store"})),d9t=t=>{const[A,e]=V.useState([]),[i,n]=V.useState(null),[o,s]=V.useState(""),[r,a]=s1("eval-version-selection",null),g=j9(B=>B.setLastRunEvalVersion),c=j9(B=>B.lastRunEvalVersion);return V.useEffect(()=>{t&&fetch("https://data.jsdelivr.com/v1/package/npm/@tscircuit/eval").then(B=>B.json()).then(B=>{if(Array.isArray(B?.versions)){let C=[...B.versions];B.tags?.latest&&(n(B.tags.latest),C=C.filter(Q=>Q!==B.tags.latest)),e(C)}}).catch(()=>{})},[t]),V.useEffect(()=>{t&&(r?(window.TSCIRCUIT_LATEST_EVAL_VERSION=r,g(r)):i&&(window.TSCIRCUIT_LATEST_EVAL_VERSION=i,g(i)))},[t,r,i]),{versions:V.useMemo(()=>A.filter(B=>B.includes(o)).slice(0,50),[A,o]),latestVersion:i,lastRunEvalVersion:c,search:o,setSearch:s,selectVersion:B=>{a(B),s("")}}},p9t=({snippetNames:t,onSelect:A,onCancel:e,isOpen:i})=>{const[n,o]=V.useState(""),[s,r]=V.useState("");if(!i)return null;const a=t.filter(I=>I.toLowerCase().includes(s.toLowerCase())),g=s&&!t.includes(s),c=I=>{I.key==="Enter"&&(a.length===1?o(a[0]):g&&o(s))};return W.jsx("div",{className:"rf-fixed rf-inset-0 rf-bg-black rf-bg-opacity-50 rf-flex rf-items-center rf-justify-center rf-z-[100]",children:W.jsxs("div",{className:"rf-bg-white rf-rounded-lg rf-p-6 rf-w-96",children:[W.jsx("h2",{className:"rf-text-lg rf-font-semibold rf-mb-4",children:"Select Snippet"}),W.jsx("input",{type:"text",className:"rf-w-full rf-px-4 rf-py-2 rf-border rf-rounded rf-mb-4",placeholder:"Search snippets or new snippet name...",value:s,onChange:I=>r(I.target.value),onKeyDown:c}),W.jsxs("div",{className:"rf-h-60 rf-overflow-y-auto",children:[a.map(I=>W.jsx("button",{type:"button",className:`w-full text-left px-4 py-2 rounded hover:bg-gray-100 ${n===I?"bg-blue-50":""}`,onClick:()=>o(I),children:I},I)),g&&W.jsxs("button",{type:"button",className:`w-full text-left px-4 py-2 rounded hover:bg-gray-100 text-blue-500 ${n===s?"bg-blue-50":""}`,onClick:()=>o(s),children:['Create new "',s,'"']})]}),W.jsxs("div",{className:"rf-mt-4 rf-flex rf-justify-end rf-gap-2",children:[W.jsx("button",{type:"button",className:"rf-px-4 rf-py-2 rf-text-gray-600 rf-hover:text-gray-800",onClick:e,children:"Cancel"}),W.jsx("button",{type:"button",className:"rf-px-4 rf-py-2 rf-bg-blue-500 rf-text-white rf-rounded rf-hover:bg-blue-600 rf-disabled:opacity-50",onClick:()=>n&&A(n),disabled:!n,children:n===s?`Create "${n}"`:`Save to ${n}`})]})]})})},f9t=t=>{const A=V.useRef(null),e=qI(i=>i.recentEvents);V.useEffect(()=>{if(e.length===0)return;const i=e[0];i.event_id!==A.current&&(t(i),A.current=i.event_id)},[e,t])};function y9t(t){const A=m9t(t),e=V.forwardRef((i,n)=>{const{children:o,...s}=i,r=V.Children.toArray(o),a=r.find(D9t);if(a){const g=a.props.children,c=r.map(I=>I===a?V.Children.count(g)>1?V.Children.only(null):V.isValidElement(g)?g.props.children:null:I);return W.jsx(A,{...s,ref:n,children:V.isValidElement(g)?V.cloneElement(g,void 0,c):null})}return W.jsx(A,{...s,ref:n,children:o})});return e.displayName=`${t}.Slot`,e}function m9t(t){const A=V.forwardRef((e,i)=>{const{children:n,...o}=e;if(V.isValidElement(n)){const s=b9t(n),r=S9t(o,n.props);return n.type!==V.Fragment&&(r.ref=i?rf(i,s):s),V.cloneElement(n,r)}return V.Children.count(n)>1?V.Children.only(null):null});return A.displayName=`${t}.SlotClone`,A}var w9t=Symbol("radix.slottable");function D9t(t){return V.isValidElement(t)&&typeof t.type=="function"&&"__radixId"in t.type&&t.type.__radixId===w9t}function S9t(t,A){const e={...A};for(const i in A){const n=t[i],o=A[i];/^on[A-Z]/.test(i)?n&&o?e[i]=(...r)=>{const a=o(...r);return n(...r),a}:n&&(e[i]=n):i==="style"?e[i]={...n,...o}:i==="className"&&(e[i]=[n,o].filter(Boolean).join(" "))}return{...t,...e}}function b9t(t){let A=Object.getOwnPropertyDescriptor(t.props,"ref")?.get,e=A&&"isReactWarning"in A&&A.isReactWarning;return e?t.ref:(A=Object.getOwnPropertyDescriptor(t,"ref")?.get,e=A&&"isReactWarning"in A&&A.isReactWarning,e?t.props.ref:t.props.ref||t.ref)}var z9="Dialog",[aIe,gIe]=Jm(z9),[x9t,Qw]=aIe(z9),cIe=t=>{const{__scopeDialog:A,children:e,open:i,defaultOpen:n,onOpenChange:o,modal:s=!0}=t,r=V.useRef(null),a=V.useRef(null),[g,c]=Yx({prop:i,defaultProp:n??!1,onChange:o,caller:z9});return W.jsx(x9t,{scope:A,triggerRef:r,contentRef:a,contentId:wE(),titleId:wE(),descriptionId:wE(),open:g,onOpenChange:c,onOpenToggle:V.useCallback(()=>c(I=>!I),[c]),modal:s,children:e})};cIe.displayName=z9;var IIe="DialogTrigger",lIe=V.forwardRef((t,A)=>{const{__scopeDialog:e,...i}=t,n=Qw(IIe,e),o=EI(A,n.triggerRef);return W.jsx(qa.button,{type:"button","aria-haspopup":"dialog","aria-expanded":n.open,"aria-controls":n.contentId,"data-state":ZfA(n.open),...i,ref:o,onClick:Hn(t.onClick,n.onOpenToggle)})});lIe.displayName=IIe;var OfA="DialogPortal",[_9t,BIe]=aIe(OfA,{forceMount:void 0}),CIe=t=>{const{__scopeDialog:A,forceMount:e,children:i,container:n}=t,o=Qw(OfA,A);return W.jsx(_9t,{scope:A,forceMount:e,children:V.Children.map(i,s=>W.jsx(u0,{present:e||o.open,children:W.jsx(ZZ,{asChild:!0,container:n,children:s})}))})};CIe.displayName=OfA;var X9="DialogOverlay",QIe=V.forwardRef((t,A)=>{const e=BIe(X9,t.__scopeDialog),{forceMount:i=e.forceMount,...n}=t,o=Qw(X9,t.__scopeDialog);return o.modal?W.jsx(u0,{present:i||o.open,children:W.jsx(F9t,{...n,ref:A})}):null});QIe.displayName=X9;var k9t=y9t("DialogOverlay.RemoveScroll"),F9t=V.forwardRef((t,A)=>{const{__scopeDialog:e,...i}=t,n=Qw(X9,e);return W.jsx(tV,{as:k9t,allowPinchZoom:!0,shards:[n.contentRef],children:W.jsx(qa.div,{"data-state":ZfA(n.open),...i,ref:A,style:{pointerEvents:"auto",...i.style}})})}),MG="DialogContent",hIe=V.forwardRef((t,A)=>{const e=BIe(MG,t.__scopeDialog),{forceMount:i=e.forceMount,...n}=t,o=Qw(MG,t.__scopeDialog);return W.jsx(u0,{present:i||o.open,children:o.modal?W.jsx(G9t,{...n,ref:A}):W.jsx(R9t,{...n,ref:A})})});hIe.displayName=MG;var G9t=V.forwardRef((t,A)=>{const e=Qw(MG,t.__scopeDialog),i=V.useRef(null),n=EI(A,e.contentRef,i);return V.useEffect(()=>{const o=i.current;if(o)return OuA(o)},[]),W.jsx(EIe,{...t,ref:n,trapFocus:e.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:Hn(t.onCloseAutoFocus,o=>{o.preventDefault(),e.triggerRef.current?.focus()}),onPointerDownOutside:Hn(t.onPointerDownOutside,o=>{const s=o.detail.originalEvent,r=s.button===0&&s.ctrlKey===!0;(s.button===2||r)&&o.preventDefault()}),onFocusOutside:Hn(t.onFocusOutside,o=>o.preventDefault())})}),R9t=V.forwardRef((t,A)=>{const e=Qw(MG,t.__scopeDialog),i=V.useRef(!1),n=V.useRef(!1);return W.jsx(EIe,{...t,ref:A,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:o=>{t.onCloseAutoFocus?.(o),o.defaultPrevented||(i.current||e.triggerRef.current?.focus(),o.preventDefault()),i.current=!1,n.current=!1},onInteractOutside:o=>{t.onInteractOutside?.(o),o.defaultPrevented||(i.current=!0,o.detail.originalEvent.type==="pointerdown"&&(n.current=!0));const s=o.target;e.triggerRef.current?.contains(s)&&o.preventDefault(),o.detail.originalEvent.type==="focusin"&&n.current&&o.preventDefault()}})}),EIe=V.forwardRef((t,A)=>{const{__scopeDialog:e,trapFocus:i,onOpenAutoFocus:n,onCloseAutoFocus:o,...s}=t,r=Qw(MG,e),a=V.useRef(null),g=EI(A,a);return buA(),W.jsxs(W.Fragment,{children:[W.jsx(NZ,{asChild:!0,loop:!0,trapped:i,onMountAutoFocus:n,onUnmountAutoFocus:o,children:W.jsx(nY,{role:"dialog",id:r.contentId,"aria-describedby":r.descriptionId,"aria-labelledby":r.titleId,"data-state":ZfA(r.open),...s,ref:g,onDismiss:()=>r.onOpenChange(!1)})}),W.jsxs(W.Fragment,{children:[W.jsx(N9t,{titleId:r.titleId}),W.jsx(L9t,{contentRef:a,descriptionId:r.descriptionId})]})]})}),WfA="DialogTitle",uIe=V.forwardRef((t,A)=>{const{__scopeDialog:e,...i}=t,n=Qw(WfA,e);return W.jsx(qa.h2,{id:n.titleId,...i,ref:A})});uIe.displayName=WfA;var dIe="DialogDescription",pIe=V.forwardRef((t,A)=>{const{__scopeDialog:e,...i}=t,n=Qw(dIe,e);return W.jsx(qa.p,{id:n.descriptionId,...i,ref:A})});pIe.displayName=dIe;var fIe="DialogClose",yIe=V.forwardRef((t,A)=>{const{__scopeDialog:e,...i}=t,n=Qw(fIe,e);return W.jsx(qa.button,{type:"button",...i,ref:A,onClick:Hn(t.onClick,()=>n.onOpenChange(!1))})});yIe.displayName=fIe;function ZfA(t){return t?"open":"closed"}var mIe="DialogTitleWarning",[M9t,wIe]=XXe(mIe,{contentName:MG,titleName:WfA,docsSlug:"dialog"}),N9t=({titleId:t})=>{const A=wIe(mIe),e=`\`${A.contentName}\` requires a \`${A.titleName}\` for the component to be accessible for screen reader users.
|
|
5689
|
+
`,I=new Blob([c],{type:"text/plain"}),l=URL.createObjectURL(I),B=document.createElement("a");B.href=l,B.download=`${g}.test.ts`,B.click(),URL.revokeObjectURL(l)}catch(a){alert(`Error generating test.ts for ${t.constructor.name}: ${a instanceof Error?a.message:String(a)}`)}i(!1)};return W.jsxs("div",{className:`relative ${A}`,ref:n,children:[W.jsx("button",{className:"px-2 py-1 rounded text-xs cursor-pointer",onClick:()=>i(!e),title:`Download options for ${t.constructor.name}`,children:t.constructor.name}),e&&W.jsxs("div",{className:"absolute top-full left-0 mt-1 bg-white border border-gray-300 rounded shadow-lg z-10 min-w-[150px]",children:[W.jsx("button",{className:"w-full text-left px-3 py-2 hover:bg-gray-100 text-xs",onClick:o,children:"Download JSON"}),W.jsx("button",{className:"w-full text-left px-3 py-2 hover:bg-gray-100 text-xs",onClick:s,children:"Download page.tsx"}),W.jsx("button",{className:"w-full text-left px-3 py-2 hover:bg-gray-100 text-xs",onClick:r,children:"Download test.ts"})]})]})},oIe=t=>t.activeSubSolver?[t,...oIe(t.activeSubSolver)]:[t],t9t=({solver:t})=>{const A=oIe(t);return W.jsx("div",{className:"flex gap-1 items-center text-sm pt-1",children:A.map((e,i)=>W.jsxs("div",{className:"flex items-center",children:[i>0&&W.jsx("span",{className:"text-gray-400 mx-1",children:"→"}),W.jsx(e9t,{solver:e})]},e.constructor.name))})},i9t=({solver:t,triggerRender:A,animationSpeed:e=25,onSolverStarted:i,onSolverCompleted:n})=>{const[o,s]=V.useReducer(Q=>!Q,!1),r=V.useRef(void 0),a=()=>{!t.solved&&!t.failed&&(t.step(),A())},g=()=>{!t.solved&&!t.failed&&(i&&i(t),t.solve(),A(),n&&n(t))},c=()=>{o?(r.current&&(clearInterval(r.current),r.current=void 0),s()):(s(),r.current=setInterval(()=>{if(t.solved||t.failed){r.current&&(clearInterval(r.current),r.current=void 0),s(),A(),n&&t.solved&&n(t);return}t.step(),A()},e))},I=()=>{const Q=t;if(Q.getCurrentPhase&&!t.solved&&!t.failed){const h=Q.getCurrentPhase();for(;Q.getCurrentPhase()===h&&!t.solved&&!t.failed;)t.step();A()}},l=()=>{if(t.solved||t.failed||o)return;const Q=window.prompt("Step until which iteration?",`${t.iterations}`);if(Q===null)return;const h=Number(Q);if(!Number.isFinite(h)){window.alert("Please enter a valid number for the iteration");return}for(;t.iterations<h&&!t.solved&&!t.failed;)t.step();A(),t.solved&&n&&n(t)};V.useEffect(()=>()=>{r.current&&clearInterval(r.current)},[]),V.useEffect(()=>{(t.solved||t.failed)&&o&&(r.current&&(clearInterval(r.current),r.current=void 0),s())},[t.solved,t.failed,o]);const B=t.getCurrentPhase!==void 0,C=B?t.getCurrentPhase():null;return W.jsxs("div",{className:"space-y-2 p-2 border-b",children:[W.jsx("div",{className:"flex items-center",children:W.jsx(t9t,{solver:t})}),W.jsxs("div",{className:"flex gap-2 items-center flex-wrap",children:[W.jsx("button",{onClick:a,disabled:t.solved||t.failed||o,className:"bg-blue-500 hover:bg-blue-600 disabled:bg-gray-300 text-white px-3 py-1 rounded text-sm",children:"Step"}),W.jsx("button",{onClick:g,disabled:t.solved||t.failed||o,className:"bg-green-500 hover:bg-green-600 disabled:bg-gray-300 text-white px-3 py-1 rounded text-sm",children:"Solve"}),W.jsx("button",{onClick:c,disabled:t.solved||t.failed,className:`px-3 py-1 rounded text-white text-sm ${o?"bg-red-500 hover:bg-red-600":"bg-yellow-500 hover:bg-yellow-600"} disabled:bg-gray-300`,children:o?"Stop":"Animate"}),W.jsx("button",{onClick:l,disabled:t.solved||t.failed||o,className:"bg-orange-500 hover:bg-orange-600 disabled:bg-gray-300 text-white px-3 py-1 rounded text-sm",children:"Step Until Iteration"}),B&&W.jsx("button",{onClick:I,disabled:t.solved||t.failed||o,className:"bg-purple-500 hover:bg-purple-600 disabled:bg-gray-300 text-white px-3 py-1 rounded text-sm",children:"Next Stage"}),W.jsxs("div",{className:"text-sm text-gray-600",children:["Iterations: ",t.iterations]}),t.timeToSolve!==void 0&&W.jsxs("div",{className:"text-sm text-gray-600",children:["Time: ",(t.timeToSolve/1e3).toFixed(3),"s"]}),C&&W.jsxs("div",{className:"text-sm text-gray-600",children:["Phase: ",W.jsx("span",{className:"font-medium",children:C})]}),t.solved&&W.jsx("div",{className:"px-2 py-1 bg-green-100 text-green-800 rounded text-sm",children:"Solved"}),t.failed&&W.jsx("div",{className:"px-2 py-1 bg-red-100 text-red-800 rounded text-sm",children:"Failed"})]}),t.error&&W.jsxs("div",{className:"text-red-600 text-sm",children:["Error: ",t.error]})]})},n9t=(t,A,e)=>{const i=t.currentPipelineStepIndex;return A<i?"Completed":A===i&&t.activeSubSolver?t.activeSubSolver.failed?"Failed":"In Progress":"Not Started"},o9t=(t,A)=>{const i=t.pipelineDef[A].solverName,n=n9t(t,A),o=t[i],s=t.firstIterationOfPhase?.[i]??null,r=t.iterations;let a=0;if(n==="Completed"){const l=t.pipelineDef[A+1],B=l?t.firstIterationOfPhase?.[l.solverName]:void 0;B!==void 0&&s!==null?a=B-s:s!==null&&(a=r-s)}else n==="In Progress"&&s!==null&&(a=r-s);const g=t.timeSpentOnPhase?.[i]??0;let c=0;n==="Completed"?c=1:n==="In Progress"&&o&&(c=o.progress??0);const I=o?.stats??null;return{index:A,name:i,status:n,firstIteration:s,iterations:a,progress:c,timeSpent:g,stats:I&&Object.keys(I).length>0?I:null,solverInstance:o??null}},s9t=({status:t})=>{const A={"Not Started":"text-blue-600","In Progress":"text-yellow-600",Completed:"text-green-600",Failed:"text-red-600"};return W.jsx("span",{className:`font-medium ${A[t]}`,children:t})},r9t=({progress:t})=>{if(t===0)return null;const A=Math.round(t*100);return W.jsxs("div",{className:"flex items-center gap-2",children:[W.jsx("div",{className:"w-20 h-2 bg-gray-200 rounded overflow-hidden",children:W.jsx("div",{className:"h-full bg-blue-500 transition-all duration-200",style:{width:`${A}%`}})}),W.jsxs("span",{className:"text-xs text-gray-500",children:[A,"%"]})]})},a9t=t=>Object.entries(t).map(([A,e])=>`${A}: ${e}`).join(", "),g9t=({stats:t})=>{if(!t||Object.keys(t).length===0)return W.jsx("span",{children:"-"});const A=Object.entries(t),e=a9t(t);return W.jsxs("details",{className:"cursor-pointer",children:[W.jsx("summary",{className:"whitespace-nowrap overflow-hidden text-ellipsis max-w-[200px]",children:e}),W.jsx("div",{className:"mt-1 text-xs",children:A.map(([i,n])=>W.jsxs("div",{children:[i,": ",String(n)]},i))})]})},qfA=t=>{if(t===null||typeof t!="object")return t;if(Array.isArray(t))return t.map(qfA);const A={};for(const[e,i]of Object.entries(t))e.startsWith("_")||(A[e]=qfA(i));return A},c9t=(t,A)=>{try{if(typeof t.getConstructorParams!="function"){alert(`getConstructorParams() is not implemented for ${A}`);return}const e=qfA(t.getConstructorParams()),i=new Blob([JSON.stringify(e,null,2)],{type:"application/json"}),n=URL.createObjectURL(i),o=document.createElement("a");o.href=n,o.download=`${A}_input.json`,o.click(),URL.revokeObjectURL(n)}catch(e){alert(`Error downloading input for ${A}: ${e instanceof Error?e.message:String(e)}`)}},I9t=({solver:t,onStepUntilPhase:A,onDownloadInput:e})=>{const i=t.pipelineDef.map((r,a)=>o9t(t,a)),n=r=>{A?.(r)},o=r=>{r.solverInstance&&(e?e(r.solverInstance,r.name):c9t(r.solverInstance,r.name))},s=r=>`${(r/1e3).toFixed(2)}s`;return W.jsxs("div",{className:"border-t border-gray-200",children:[W.jsx("div",{className:"px-4 py-2 bg-gray-50 border-b border-gray-200",children:W.jsx("h3",{className:"text-sm font-semibold text-gray-700",children:"Pipeline Steps"})}),W.jsx("div",{className:"overflow-x-auto",children:W.jsxs("table",{className:"w-full text-sm",children:[W.jsx("thead",{children:W.jsxs("tr",{className:"bg-gray-50 border-b border-gray-200",children:[W.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Step"}),W.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Status"}),W.jsxs("th",{className:"px-4 py-2 text-center font-semibold text-gray-700",children:["i",W.jsx("sub",{children:"0"})]}),W.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Iterations"}),W.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Progress"}),W.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Time"}),W.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Stats"}),W.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Input"})]})}),W.jsx("tbody",{children:i.map(r=>W.jsxs("tr",{className:`border-b border-gray-100 ${r.status==="In Progress"?"bg-yellow-50":""}`,children:[W.jsx("td",{className:"px-4 py-2",children:W.jsxs("div",{className:"flex items-center gap-2",children:[W.jsx("span",{className:"text-gray-400 w-6",children:String(r.index+1).padStart(2,"0")}),W.jsx("button",{onClick:()=>n(r.name),disabled:r.status==="Completed"||t.solved||t.failed,className:"text-blue-500 hover:text-blue-700 disabled:text-gray-300 disabled:cursor-not-allowed",title:`Step until ${r.name} completes`,children:W.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",className:"w-4 h-4",children:W.jsx("path",{fillRule:"evenodd",d:"M4.5 5.653c0-1.426 1.529-2.33 2.779-1.643l11.54 6.348c1.295.712 1.295 2.573 0 3.285L7.28 19.991c-1.25.687-2.779-.217-2.779-1.643V5.653z",clipRule:"evenodd"})})}),W.jsx("span",{className:"font-medium text-gray-900",children:r.name})]})}),W.jsx("td",{className:"px-4 py-2",children:W.jsx(s9t,{status:r.status})}),W.jsx("td",{className:"px-4 py-2 text-center text-gray-600",children:r.firstIteration!==null?r.firstIteration:""}),W.jsx("td",{className:"px-4 py-2 text-gray-600",children:r.iterations}),W.jsx("td",{className:"px-4 py-2",children:W.jsx(r9t,{progress:r.progress})}),W.jsx("td",{className:"px-4 py-2 text-gray-600",children:s(r.timeSpent)}),W.jsx("td",{className:"px-4 py-2 text-gray-500",children:W.jsx(g9t,{stats:r.stats})}),W.jsx("td",{className:"px-4 py-2",children:r.solverInstance?W.jsxs("button",{onClick:()=>o(r),className:"flex items-center gap-1 text-blue-500 hover:text-blue-700",title:`Download input for ${r.name}`,children:[W.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",className:"w-4 h-4",children:W.jsx("path",{fillRule:"evenodd",d:"M12 2.25a.75.75 0 01.75.75v11.69l3.22-3.22a.75.75 0 111.06 1.06l-4.5 4.5a.75.75 0 01-1.06 0l-4.5-4.5a.75.75 0 111.06-1.06l3.22 3.22V3a.75.75 0 01.75-.75zm-9 13.5a.75.75 0 01.75.75v2.25a1.5 1.5 0 001.5 1.5h13.5a1.5 1.5 0 001.5-1.5V16.5a.75.75 0 011.5 0v2.25a3 3 0 01-3 3H5.25a3 3 0 01-3-3V16.5a.75.75 0 01.75-.75z",clipRule:"evenodd"})}),W.jsx("span",{children:"Input"})]}):null})]},r.name))})]})})]})},l9t=class extends tn.Component{constructor(t){super(t),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(t){console.error("InteractiveGraphics render error:",t)}render(){return this.state.hasError?this.props.fallback:this.props.children}};function B9t({graphics:t}){const A=t.points??[],e=t.lines??[],i=t.rects??[],n=t.circles??[],o=t.texts??[];let s=Number.POSITIVE_INFINITY,r=Number.POSITIVE_INFINITY,a=Number.NEGATIVE_INFINITY,g=Number.NEGATIVE_INFINITY;const c=(h,E)=>{typeof h=="number"&&(h<s&&(s=h),h>a&&(a=h)),typeof E=="number"&&(E<r&&(r=E),E>g&&(g=E))};for(const h of A)c(h.x,h.y);for(const h of e){const E=h.points??[];for(const u of E)c(u.x,u.y)}for(const h of i){const E=h.x??0,u=h.y??0,d=h.width??0,p=h.height??0;c(E,u),c(E+d,u+p)}for(const h of n){const E=h.x??0,u=h.y??0,d=h.radius??1;c(E-d,u-d),c(E+d,u+d)}for(const h of o)c(h.x,h.y);(!isFinite(s)||!isFinite(r)||!isFinite(a)||!isFinite(g))&&(s=-20,r=-20,a=20,g=20);const I=10,l=s-I,B=r-I,C=Math.max(1,a-s+2*I),Q=Math.max(1,g-r+2*I);return W.jsxs("svg",{className:"w-full h-[400px] bg-white",viewBox:`${l} ${B} ${C} ${Q}`,role:"img","aria-label":"Graphics fallback",children:[i.map((h,E)=>W.jsx("rect",{x:h.x??0,y:h.y??0,width:h.width??0,height:h.height??0,fill:"none",stroke:h.strokeColor??"black",strokeWidth:h.strokeWidth??1},`rect-${E}`)),e.map((h,E)=>W.jsx("polyline",{fill:"none",stroke:h.strokeColor??"black",strokeWidth:h.strokeWidth??1,points:(h.points??[]).map(u=>`${u.x??0},${u.y??0}`).join(" ")},`line-${E}`)),n.map((h,E)=>W.jsx("circle",{cx:h.x??0,cy:h.y??0,r:h.radius??1.5,fill:h.fillColor??"none",stroke:h.strokeColor??"black",strokeWidth:h.strokeWidth??1},`circle-${E}`)),A.map((h,E)=>W.jsx("circle",{cx:h.x??0,cy:h.y??0,r:h.radius??1.5,fill:h.color??"black"},`point-${E}`)),o.map((h,E)=>W.jsx("text",{x:h.x??0,y:h.y??0,fontSize:h.fontSize??10,fill:h.color??"black",children:h.text??""},`text-${E}`))]})}var C9t=({solver:t,animationSpeed:A=25,onSolverStarted:e,onSolverCompleted:i})=>{const[n,o]=V.useReducer(c=>c+1,0),s=V.useMemo(()=>{try{return t.visualize()||{points:[],lines:[],rects:[],circles:[]}}catch(c){return console.error("Visualization error:",c),{points:[],lines:[],rects:[],circles:[]}}},[t,n]),r=V.useMemo(()=>(s.rects?.length||0)===0&&(s.lines?.length||0)===0&&(s.points?.length||0)===0&&(s.circles?.length||0)===0,[s]);V.useEffect(()=>{if(!(typeof document>"u")&&!document.querySelector('script[src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"]')){const c=document.createElement("script");c.src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4",document.head.appendChild(c)}},[]);const a=t.pipelineDef!==void 0,g=c=>{const I=t;if(!t.solved&&!t.failed){for(;!t.solved&&!t.failed&&I.currentPipelineStepIndex<=I.pipelineDef.findIndex(l=>l.solverName===c);)t.step();o()}};return W.jsxs("div",{children:[W.jsx(i9t,{solver:t,triggerRender:o,animationSpeed:A,onSolverStarted:e,onSolverCompleted:i}),r?W.jsx("div",{className:"p-4 text-gray-500",children:"No Graphics Yet"}):W.jsx(l9t,{fallback:W.jsx(B9t,{graphics:s}),children:W.jsx(A9t,{graphics:s})}),a&&W.jsx(I9t,{solver:t,onStepUntilPhase:g})]})};const Q9t=()=>{V.useEffect(()=>{const t="tailwind-cdn-script";if(document.getElementById(t)||window.tailwind)return;const A=document.createElement("div");A.className="hidden",document.body.appendChild(A);const e=window.getComputedStyle(A).display==="none";if(document.body.removeChild(A),e)return;const i=document.createElement("script");i.id=t,i.src="https://cdn.tailwindcss.com",document.head.appendChild(i)},[])},h9t=t=>t.toLowerCase().includes("pack")?bMt:t.toLowerCase().includes("rout")?GMt:lMt,E9t=({solverEvents:t=[]})=>{const[A,e]=V.useState(null);Q9t();const i=V.useMemo(()=>{const r=new Map;for(const a of t){const g=`${a.componentName}-${a.solverName}`;r.set(g,a)}return r},[t]),n=V.useMemo(()=>Array.from(i.keys()),[i]),o=A?i.get(A):null,s=V.useMemo(()=>{if(!o)return{instance:null,error:null,classFound:!1};const r=VnA[o.solverName];if(!r)return{instance:null,error:`Solver class "${o.solverName}" not found in SOLVERS registry. Available: ${Object.keys(VnA).join(", ")}`,classFound:!1};try{const a=o.solverParams,g=a?.input!==void 0?a.input:a;return{instance:new r(g),error:null,classFound:!0}}catch(a){const g=a instanceof Error?a.message:String(a);return console.error("Failed to reconstruct solver:",a),{instance:null,error:`Failed to instantiate solver: ${g}`,classFound:!0}}},[o]);return t.length===0?W.jsx("div",{className:"rf-p-4",children:W.jsx("div",{className:"rf-bg-gray-50 rf-rounded-md rf-border rf-border-gray-200",children:W.jsxs("div",{className:"rf-p-4",children:[W.jsx("h3",{className:"rf-text-lg rf-font-semibold rf-text-gray-800 rf-mb-3",children:"No Solvers Detected"}),W.jsx("p",{className:"rf-text-sm rf-text-gray-600",children:"Solvers will appear here when the circuit runs. Solvers are used for tasks like component packing and autorouting."})]})})}):W.jsxs("div",{className:"rf-flex rf-h-full rf-overflow-hidden",children:[W.jsxs("div",{className:"rf-w-64 rf-border-r rf-border-gray-200 rf-overflow-y-auto rf-flex-shrink-0",children:[W.jsxs("div",{className:"rf-text-xs rf-font-semibold rf-text-gray-500 rf-px-3 rf-py-2 rf-bg-gray-50 rf-border-b rf-border-gray-200",children:[n.length," ",n.length===1?"Solver":"Solvers"]}),n.map(r=>{const a=i.get(r),g=A===r;return W.jsx("div",{className:`rf-px-3 rf-py-2 rf-cursor-pointer rf-border-b rf-border-gray-100 ${g?"rf-bg-blue-50 rf-border-l-2 rf-border-l-blue-500":"hover:rf-bg-gray-50"}`,onClick:()=>e(r),children:(()=>{const c=h9t(a.solverName);return W.jsxs("div",{className:"rf-flex rf-items-center rf-gap-2",children:[W.jsx(c,{className:"rf-w-4 rf-h-4 rf-text-blue-500 rf-flex-shrink-0"}),W.jsxs("div",{className:"rf-flex-1 rf-min-w-0",children:[W.jsx("div",{className:"rf-text-sm rf-font-medium rf-text-gray-800 rf-truncate",children:a.componentName}),W.jsx("div",{className:"rf-text-xs rf-text-gray-500 rf-truncate",children:a.solverName})]})]})})()},r)})]}),W.jsx("div",{className:"rf-flex-1 rf-overflow-hidden",children:o?s.instance?W.jsx(Yy,{fallback:W.jsx("div",{className:"rf-p-4",children:W.jsxs("div",{className:"rf-bg-red-50 rf-rounded-md rf-border rf-border-red-200 rf-p-4",children:[W.jsx("h3",{className:"rf-text-lg rf-font-semibold rf-text-red-800 rf-mb-2",children:"Error Loading Solver Debugger"}),W.jsxs("p",{className:"rf-text-sm rf-text-red-600",children:["Failed to render the solver debugger for"," ",o.solverName]})]})}),children:W.jsx(C9t,{solver:s.instance})}):W.jsxs("div",{className:"rf-p-4",children:[W.jsxs("div",{className:"rf-mb-4",children:[W.jsx("h3",{className:"rf-text-lg rf-font-semibold rf-text-gray-800",children:o.solverName}),W.jsxs("p",{className:"rf-text-sm rf-text-gray-500",children:["Component: ",o.componentName]})]}),s.error&&W.jsx("div",{className:`rf-rounded-md rf-border rf-p-4 rf-mb-4 ${s.classFound?"rf-bg-red-50 rf-border-red-200":"rf-bg-yellow-50 rf-border-yellow-200"}`,children:W.jsx("p",{className:`rf-text-sm ${s.classFound?"rf-text-red-700":"rf-text-yellow-700"}`,children:s.error})}),W.jsxs("div",{className:"rf-border rf-border-gray-200 rf-rounded-md rf-overflow-hidden",children:[W.jsx("div",{className:"rf-px-3 rf-py-2 rf-bg-gray-50",children:W.jsx("span",{className:"rf-text-sm rf-font-medium rf-text-gray-700",children:"Solver Parameters"})}),W.jsx("div",{className:"rf-p-3 rf-bg-white rf-border-t rf-border-gray-200",children:W.jsx("pre",{className:"rf-text-xs rf-font-mono rf-text-gray-600 rf-whitespace-pre-wrap rf-overflow-x-auto",children:JSON.stringify(o.solverParams,null,2)})})]})]}):W.jsx("div",{className:"rf-flex rf-items-center rf-justify-center rf-h-full",children:W.jsx("p",{className:"rf-text-sm rf-text-gray-500",children:"Select a solver from the list to view details"})})})]})},sIe=({errorMessage:t,errorStack:A,circuitJsonErrors:e})=>{V.useEffect(()=>{if(t){const i=new Error(t);A&&(i.stack=A);try{Y5.captureException(i)}catch{}}},[t,A]),V.useEffect(()=>{if(e&&e.length>0)for(const i of e){const n=new Error(i.message||"Circuit JSON Error");i.stack&&(n.stack=i.stack);try{Y5.captureException(n,{error_type:i.type})}catch{}}},[e])},rIe="0.0.1585",u9t={version:rIe},j9=mYA()(wYA(t=>({lastRunEvalVersion:void 0,setLastRunEvalVersion:A=>{t({lastRunEvalVersion:A})}}),{name:"runframe-runner-store"})),d9t=t=>{const[A,e]=V.useState([]),[i,n]=V.useState(null),[o,s]=V.useState(""),[r,a]=s1("eval-version-selection",null),g=j9(B=>B.setLastRunEvalVersion),c=j9(B=>B.lastRunEvalVersion);return V.useEffect(()=>{t&&fetch("https://data.jsdelivr.com/v1/package/npm/@tscircuit/eval").then(B=>B.json()).then(B=>{if(Array.isArray(B?.versions)){let C=[...B.versions];B.tags?.latest&&(n(B.tags.latest),C=C.filter(Q=>Q!==B.tags.latest)),e(C)}}).catch(()=>{})},[t]),V.useEffect(()=>{t&&(r?(window.TSCIRCUIT_LATEST_EVAL_VERSION=r,g(r)):i&&(window.TSCIRCUIT_LATEST_EVAL_VERSION=i,g(i)))},[t,r,i]),{versions:V.useMemo(()=>A.filter(B=>B.includes(o)).slice(0,50),[A,o]),latestVersion:i,lastRunEvalVersion:c,search:o,setSearch:s,selectVersion:B=>{a(B),s("")}}},p9t=({snippetNames:t,onSelect:A,onCancel:e,isOpen:i})=>{const[n,o]=V.useState(""),[s,r]=V.useState("");if(!i)return null;const a=t.filter(I=>I.toLowerCase().includes(s.toLowerCase())),g=s&&!t.includes(s),c=I=>{I.key==="Enter"&&(a.length===1?o(a[0]):g&&o(s))};return W.jsx("div",{className:"rf-fixed rf-inset-0 rf-bg-black rf-bg-opacity-50 rf-flex rf-items-center rf-justify-center rf-z-[100]",children:W.jsxs("div",{className:"rf-bg-white rf-rounded-lg rf-p-6 rf-w-96",children:[W.jsx("h2",{className:"rf-text-lg rf-font-semibold rf-mb-4",children:"Select Snippet"}),W.jsx("input",{type:"text",className:"rf-w-full rf-px-4 rf-py-2 rf-border rf-rounded rf-mb-4",placeholder:"Search snippets or new snippet name...",value:s,onChange:I=>r(I.target.value),onKeyDown:c}),W.jsxs("div",{className:"rf-h-60 rf-overflow-y-auto",children:[a.map(I=>W.jsx("button",{type:"button",className:`w-full text-left px-4 py-2 rounded hover:bg-gray-100 ${n===I?"bg-blue-50":""}`,onClick:()=>o(I),children:I},I)),g&&W.jsxs("button",{type:"button",className:`w-full text-left px-4 py-2 rounded hover:bg-gray-100 text-blue-500 ${n===s?"bg-blue-50":""}`,onClick:()=>o(s),children:['Create new "',s,'"']})]}),W.jsxs("div",{className:"rf-mt-4 rf-flex rf-justify-end rf-gap-2",children:[W.jsx("button",{type:"button",className:"rf-px-4 rf-py-2 rf-text-gray-600 rf-hover:text-gray-800",onClick:e,children:"Cancel"}),W.jsx("button",{type:"button",className:"rf-px-4 rf-py-2 rf-bg-blue-500 rf-text-white rf-rounded rf-hover:bg-blue-600 rf-disabled:opacity-50",onClick:()=>n&&A(n),disabled:!n,children:n===s?`Create "${n}"`:`Save to ${n}`})]})]})})},f9t=t=>{const A=V.useRef(null),e=qI(i=>i.recentEvents);V.useEffect(()=>{if(e.length===0)return;const i=e[0];i.event_id!==A.current&&(t(i),A.current=i.event_id)},[e,t])};function y9t(t){const A=m9t(t),e=V.forwardRef((i,n)=>{const{children:o,...s}=i,r=V.Children.toArray(o),a=r.find(D9t);if(a){const g=a.props.children,c=r.map(I=>I===a?V.Children.count(g)>1?V.Children.only(null):V.isValidElement(g)?g.props.children:null:I);return W.jsx(A,{...s,ref:n,children:V.isValidElement(g)?V.cloneElement(g,void 0,c):null})}return W.jsx(A,{...s,ref:n,children:o})});return e.displayName=`${t}.Slot`,e}function m9t(t){const A=V.forwardRef((e,i)=>{const{children:n,...o}=e;if(V.isValidElement(n)){const s=b9t(n),r=S9t(o,n.props);return n.type!==V.Fragment&&(r.ref=i?rf(i,s):s),V.cloneElement(n,r)}return V.Children.count(n)>1?V.Children.only(null):null});return A.displayName=`${t}.SlotClone`,A}var w9t=Symbol("radix.slottable");function D9t(t){return V.isValidElement(t)&&typeof t.type=="function"&&"__radixId"in t.type&&t.type.__radixId===w9t}function S9t(t,A){const e={...A};for(const i in A){const n=t[i],o=A[i];/^on[A-Z]/.test(i)?n&&o?e[i]=(...r)=>{const a=o(...r);return n(...r),a}:n&&(e[i]=n):i==="style"?e[i]={...n,...o}:i==="className"&&(e[i]=[n,o].filter(Boolean).join(" "))}return{...t,...e}}function b9t(t){let A=Object.getOwnPropertyDescriptor(t.props,"ref")?.get,e=A&&"isReactWarning"in A&&A.isReactWarning;return e?t.ref:(A=Object.getOwnPropertyDescriptor(t,"ref")?.get,e=A&&"isReactWarning"in A&&A.isReactWarning,e?t.props.ref:t.props.ref||t.ref)}var z9="Dialog",[aIe,gIe]=Jm(z9),[x9t,Qw]=aIe(z9),cIe=t=>{const{__scopeDialog:A,children:e,open:i,defaultOpen:n,onOpenChange:o,modal:s=!0}=t,r=V.useRef(null),a=V.useRef(null),[g,c]=Yx({prop:i,defaultProp:n??!1,onChange:o,caller:z9});return W.jsx(x9t,{scope:A,triggerRef:r,contentRef:a,contentId:wE(),titleId:wE(),descriptionId:wE(),open:g,onOpenChange:c,onOpenToggle:V.useCallback(()=>c(I=>!I),[c]),modal:s,children:e})};cIe.displayName=z9;var IIe="DialogTrigger",lIe=V.forwardRef((t,A)=>{const{__scopeDialog:e,...i}=t,n=Qw(IIe,e),o=EI(A,n.triggerRef);return W.jsx(qa.button,{type:"button","aria-haspopup":"dialog","aria-expanded":n.open,"aria-controls":n.contentId,"data-state":ZfA(n.open),...i,ref:o,onClick:Hn(t.onClick,n.onOpenToggle)})});lIe.displayName=IIe;var OfA="DialogPortal",[_9t,BIe]=aIe(OfA,{forceMount:void 0}),CIe=t=>{const{__scopeDialog:A,forceMount:e,children:i,container:n}=t,o=Qw(OfA,A);return W.jsx(_9t,{scope:A,forceMount:e,children:V.Children.map(i,s=>W.jsx(u0,{present:e||o.open,children:W.jsx(ZZ,{asChild:!0,container:n,children:s})}))})};CIe.displayName=OfA;var X9="DialogOverlay",QIe=V.forwardRef((t,A)=>{const e=BIe(X9,t.__scopeDialog),{forceMount:i=e.forceMount,...n}=t,o=Qw(X9,t.__scopeDialog);return o.modal?W.jsx(u0,{present:i||o.open,children:W.jsx(F9t,{...n,ref:A})}):null});QIe.displayName=X9;var k9t=y9t("DialogOverlay.RemoveScroll"),F9t=V.forwardRef((t,A)=>{const{__scopeDialog:e,...i}=t,n=Qw(X9,e);return W.jsx(tV,{as:k9t,allowPinchZoom:!0,shards:[n.contentRef],children:W.jsx(qa.div,{"data-state":ZfA(n.open),...i,ref:A,style:{pointerEvents:"auto",...i.style}})})}),MG="DialogContent",hIe=V.forwardRef((t,A)=>{const e=BIe(MG,t.__scopeDialog),{forceMount:i=e.forceMount,...n}=t,o=Qw(MG,t.__scopeDialog);return W.jsx(u0,{present:i||o.open,children:o.modal?W.jsx(G9t,{...n,ref:A}):W.jsx(R9t,{...n,ref:A})})});hIe.displayName=MG;var G9t=V.forwardRef((t,A)=>{const e=Qw(MG,t.__scopeDialog),i=V.useRef(null),n=EI(A,e.contentRef,i);return V.useEffect(()=>{const o=i.current;if(o)return OuA(o)},[]),W.jsx(EIe,{...t,ref:n,trapFocus:e.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:Hn(t.onCloseAutoFocus,o=>{o.preventDefault(),e.triggerRef.current?.focus()}),onPointerDownOutside:Hn(t.onPointerDownOutside,o=>{const s=o.detail.originalEvent,r=s.button===0&&s.ctrlKey===!0;(s.button===2||r)&&o.preventDefault()}),onFocusOutside:Hn(t.onFocusOutside,o=>o.preventDefault())})}),R9t=V.forwardRef((t,A)=>{const e=Qw(MG,t.__scopeDialog),i=V.useRef(!1),n=V.useRef(!1);return W.jsx(EIe,{...t,ref:A,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:o=>{t.onCloseAutoFocus?.(o),o.defaultPrevented||(i.current||e.triggerRef.current?.focus(),o.preventDefault()),i.current=!1,n.current=!1},onInteractOutside:o=>{t.onInteractOutside?.(o),o.defaultPrevented||(i.current=!0,o.detail.originalEvent.type==="pointerdown"&&(n.current=!0));const s=o.target;e.triggerRef.current?.contains(s)&&o.preventDefault(),o.detail.originalEvent.type==="focusin"&&n.current&&o.preventDefault()}})}),EIe=V.forwardRef((t,A)=>{const{__scopeDialog:e,trapFocus:i,onOpenAutoFocus:n,onCloseAutoFocus:o,...s}=t,r=Qw(MG,e),a=V.useRef(null),g=EI(A,a);return buA(),W.jsxs(W.Fragment,{children:[W.jsx(NZ,{asChild:!0,loop:!0,trapped:i,onMountAutoFocus:n,onUnmountAutoFocus:o,children:W.jsx(nY,{role:"dialog",id:r.contentId,"aria-describedby":r.descriptionId,"aria-labelledby":r.titleId,"data-state":ZfA(r.open),...s,ref:g,onDismiss:()=>r.onOpenChange(!1)})}),W.jsxs(W.Fragment,{children:[W.jsx(N9t,{titleId:r.titleId}),W.jsx(L9t,{contentRef:a,descriptionId:r.descriptionId})]})]})}),WfA="DialogTitle",uIe=V.forwardRef((t,A)=>{const{__scopeDialog:e,...i}=t,n=Qw(WfA,e);return W.jsx(qa.h2,{id:n.titleId,...i,ref:A})});uIe.displayName=WfA;var dIe="DialogDescription",pIe=V.forwardRef((t,A)=>{const{__scopeDialog:e,...i}=t,n=Qw(dIe,e);return W.jsx(qa.p,{id:n.descriptionId,...i,ref:A})});pIe.displayName=dIe;var fIe="DialogClose",yIe=V.forwardRef((t,A)=>{const{__scopeDialog:e,...i}=t,n=Qw(fIe,e);return W.jsx(qa.button,{type:"button",...i,ref:A,onClick:Hn(t.onClick,()=>n.onOpenChange(!1))})});yIe.displayName=fIe;function ZfA(t){return t?"open":"closed"}var mIe="DialogTitleWarning",[M9t,wIe]=XXe(mIe,{contentName:MG,titleName:WfA,docsSlug:"dialog"}),N9t=({titleId:t})=>{const A=wIe(mIe),e=`\`${A.contentName}\` requires a \`${A.titleName}\` for the component to be accessible for screen reader users.
|
|
5690
5690
|
|
|
5691
5691
|
If you want to hide the \`${A.titleName}\`, you can wrap it with our VisuallyHidden component.
|
|
5692
5692
|
|
|
@@ -5823,8 +5823,8 @@ ${a.join(`
|
|
|
5823
5823
|
`)}};NA.register(Wni);var qhe=class mbA extends NA{static token="locked";static parentToken="group";token="locked";value;constructor(A){super(),this.value=A}static fromSexprPrimitives(A){if(A.length===0)return new mbA(!0);const e=pi(A[0]);return new mbA(e==="yes")}getString(){return this.value?"(locked yes)":"(locked no)"}};NA.register(qhe);var Ohe=class Iwe extends NA{static token="members";static parentToken="group";token="members";members;constructor(A){super(),this.members=A}static fromSexprPrimitives(A){const e=[];for(const i of A){const n=pi(i);n&&e.push(n)}return new Iwe(e)}getString(){return this.members.length===0?"(members)":`(members ${this.members.map(e=>`"${e}"`).join(" ")})`}};NA.register(Ohe);var _wA=class lwe extends NA{static token="end";static parentToken="segment";token="end";_x;_y;constructor(A,e){super(),this._x=A,this._y=e}static fromSexprPrimitives(A){const[e,i]=A,n=ai(e),o=ai(i);if(n===void 0||o===void 0)throw new Error("end expects two numeric arguments");return new lwe(n,o)}get x(){return this._x}set x(A){this._x=A}get y(){return this._y}set y(A){this._y=A}toObject(){return{x:this._x,y:this._y}}getChildren(){return[]}getString(){return`(end ${this._x} ${this._y})`}};NA.register(_wA);var Zni=new Set(["true","yes","1"]),Whe=class HX extends Gl{static token="locked";static parentToken="segment";token="locked";constructor(A){super(A)}static fromSexprPrimitives(A){const[e]=A;return typeof e=="boolean"?new HX(e):typeof e=="string"?new HX(Zni.has(e.toLowerCase())):new HX(!1)}getString(){return`(locked ${this.value?"yes":"no"})`}};NA.register(Whe);var iz=class Bwe extends NA{static token="net";static parentToken="segment";token="net";_id;_name;constructor(A,e){super(),this._id=A,this._name=e}static fromSexprPrimitives(A){const[e,i]=A,n=ai(e);if(n===void 0)throw new Error("net expects a numeric identifier");const o=i===void 0?void 0:pi(i);return new Bwe(n,o??void 0)}get id(){return this._id}set id(A){this._id=A}get name(){return this._name}set name(A){this._name=A===""?void 0:A}toObject(){return this._name===void 0?{id:this._id}:{id:this._id,name:this._name}}getChildren(){return[]}getString(){const A=this._name?` ${Qn(this._name)}`:"";return`(net ${this._id}${A})`}};NA.register(iz);var kwA=class Cwe extends NA{static token="start";static parentToken="segment";token="start";_x;_y;constructor(A,e){super(),this._x=A,this._y=e}static fromSexprPrimitives(A){const[e,i]=A,n=ai(e),o=ai(i);if(n===void 0||o===void 0)throw new Error("start expects two numeric arguments");return new Cwe(n,o)}get x(){return this._x}set x(A){this._x=A}get y(){return this._y}set y(A){this._y=A}toObject(){return{x:this._x,y:this._y}}getChildren(){return[]}getString(){return`(start ${this._x} ${this._y})`}};NA.register(kwA);var Zhe=new Set(["start","end","width","layer","net","tstamp","uuid","locked"]),FwA=class Qwe extends NA{static token="segment";token="segment";_sxStart;_sxEnd;_sxWidth;_sxLayer;_sxNet;_sxTstamp;_sxUuid;_sxLocked;constructor(A={}){super(),A.start!==void 0&&(this.start=A.start),A.end!==void 0&&(this.end=A.end),A.width!==void 0&&(this.width=A.width),A.layer!==void 0&&(this.layer=A.layer),A.net!==void 0&&(this.net=A.net),A.tstamp!==void 0&&(this.tstamp=A.tstamp),A.uuid!==void 0&&(this.uuid=A.uuid),A.locked!==void 0&&(this.locked=A.locked)}static fromSexprPrimitives(A){const e=new Qwe,{propertyMap:i,arrayPropertyMap:n}=NA.parsePrimitivesToClassProperties(A,this.token),o=Object.keys(i).filter(r=>!Zhe.has(r));if(o.length>0)throw new Error(`Unsupported child tokens inside segment expression: ${o.join(", ")}`);for(const[r,a]of Object.entries(n)){if(!Zhe.has(r))throw new Error(`Unsupported child tokens inside segment expression: ${r}`);if(a.length>1)throw new Error(`Segment does not support repeated child tokens: ${r}`)}e._sxStart=n.start?.[0]??i.start,e._sxEnd=n.end?.[0]??i.end,e._sxWidth=n.width?.[0]??i.width,e._sxLayer=n.layer?.[0]??i.layer,e._sxNet=n.net?.[0]??i.net;const s=n.locked?.[0]??i.locked;return e._sxLocked=s&&s.value?s:void 0,e._sxTstamp=n.tstamp?.[0]??i.tstamp,e._sxUuid=n.uuid?.[0]??i.uuid,e}get start(){return this._sxStart}set start(A){this._sxStart=this.normalizeStart(A)}get end(){return this._sxEnd}set end(A){this._sxEnd=this.normalizeEnd(A)}get startPoint(){return this._sxStart?.toObject()}get endPoint(){return this._sxEnd?.toObject()}get width(){return this._sxWidth?.value}set width(A){if(A===void 0){this._sxWidth=void 0;return}this._sxWidth=A instanceof Gr?A:new Gr(A)}get widthClass(){return this._sxWidth}set widthClass(A){this._sxWidth=A}get layer(){return this._sxLayer}set layer(A){if(A===void 0){this._sxLayer=void 0;return}if(A instanceof yr){this._sxLayer=A;return}const e=Array.isArray(A)?A:[A];this._sxLayer=new yr(e)}get net(){return this._sxNet}set net(A){if(A===void 0){this._sxNet=void 0;return}if(A instanceof iz){this._sxNet=A;return}this._sxNet=new iz(A.id,A.name)}get tstamp(){return this._sxTstamp}set tstamp(A){if(A===void 0){this._sxTstamp=void 0;return}this._sxTstamp=A instanceof Xg?A:new Xg(A)}get uuid(){return this._sxUuid}set uuid(A){if(A===void 0){this._sxUuid=void 0;return}this._sxUuid=A instanceof Li?A:new Li(A)}get locked(){return this._sxLocked?.value??!1}set locked(A){this._sxLocked=A?new Whe(!0):void 0}getChildren(){const A=[];return this._sxStart&&A.push(this._sxStart),this._sxEnd&&A.push(this._sxEnd),this._sxWidth&&A.push(this._sxWidth),this._sxLayer&&A.push(this._sxLayer),this._sxNet&&A.push(this._sxNet),this._sxLocked&&A.push(this._sxLocked),this._sxTstamp&&A.push(this._sxTstamp),this._sxUuid&&A.push(this._sxUuid),A}normalizeStart(A){if(A!==void 0)return A instanceof kwA?A:new kwA(A.x,A.y)}normalizeEnd(A){if(A!==void 0)return A instanceof _wA?A:new _wA(A.x,A.y)}};NA.register(FwA);var Vhe=class hwe extends NA{static token="zone";token="zone";_rawChildren=[];static fromSexprPrimitives(A){const e=new hwe;return e._rawChildren=[...A],e}get rawChildren(){return[...this._rawChildren]}set rawChildren(A){this._rawChildren=[...A]}getChildren(){return[]}getString(){const A=["(zone"];for(const e of this._rawChildren)A.push(` ${Gh(e)}`);return A.push(")"),A.join(`
|
|
5824
5824
|
`)}};NA.register(Vhe);var nz=class Ewe extends NA{static token="layers";token="layers";_names=[];constructor(A=[]){super(),this.names=A}static fromSexprPrimitives(A){const e=A.map(i=>typeof i=="string"||typeof i=="number"?String(i):Gh(i));return new Ewe(e)}get names(){return[...this._names]}set names(A){this._names=A.map(e=>String(e))}getString(){return`(layers ${this._names.map(e=>/^[^\s()"]+$/u.test(e)&&!["nil","#t","#f"].includes(e)?e:Qn(e)).join(" ")})`}};NA.register(nz);var tT=class extends NA{_value;quoteStringValue=!1;constructor(t){super(),this._value=t}static fromSexprPrimitives(t){const[A]=t,e=this.parsePrimitiveValue(A),i=this;return new i(e)}static parsePrimitiveValue(t){const A=pi(t);if(A===void 0)throw new Error(`${this.name} expects a primitive value`);return A}get value(){return this._value}set value(t){this._value=t}getChildren(){return[]}formatValue(){return typeof this._value=="string"?this.quoteStringValue?Qn(this._value):this._value:`${this._value}`}getString(){return`(${this.token} ${this.formatValue()})`}},Vni=class extends NA{_values;constructor(t){super(),this._values=t}static fromSexprPrimitives(t){const A=t.map(i=>{const n=ai(i);if(n===void 0)throw new Error(`${this.name} expects numeric primitives but received ${i}`);return n}),e=this;return new e(A)}get values(){return[...this._values]}set values(t){this._values=[...t]}getChildren(){return[]}getString(){return`(${this.token} ${this._values.join(" ")})`}},jni=class extends NA{_x;_y;constructor(t,A){super(),this._x=t,this._y=A}static fromSexprPrimitives(t){const[A,e]=t,i=ai(A),n=ai(e);if(i===void 0||n===void 0)throw new Error(`${this.name} expects two numeric values`);const o=this;return new o(i,n)}get x(){return this._x}set x(t){this._x=t}get y(){return this._y}set y(t){this._y=t}getChildren(){return[]}getString(){return`(${this.token} ${this._x} ${this._y})`}},mr=class extends tT{static parentToken="pcbplotparams"},om=class extends mr{static parsePrimitiveValue(t){const A=ai(t);if(A===void 0)throw new Error(`pcbplotparams ${this.token} expects a numeric value`);return A}},jhe=class extends mr{static token="layerselection";token="layerselection"};NA.register(jhe);var zhe=class extends mr{static token="plot_on_all_layers_selection";token="plot_on_all_layers_selection"};NA.register(zhe);var Xhe=class extends om{static token="dashed_line_dash_ratio";token="dashed_line_dash_ratio"};NA.register(Xhe);var $he=class extends om{static token="dashed_line_gap_ratio";token="dashed_line_gap_ratio"};NA.register($he);var AEe=class extends om{static token="svgprecision";token="svgprecision"};NA.register(AEe);var eEe=class extends om{static token="linewidth";token="linewidth"};NA.register(eEe);var tEe=class extends om{static token="mode";token="mode"};NA.register(tEe);var iEe=class extends om{static token="hpglpennumber";token="hpglpennumber"};NA.register(iEe);var nEe=class extends om{static token="hpglpenspeed";token="hpglpenspeed"};NA.register(nEe);var oEe=class extends om{static token="hpglpendiameter";token="hpglpendiameter"};NA.register(oEe);var sEe=class extends om{static token="hpglpenoverlay";token="hpglpenoverlay"};NA.register(sEe);var rEe=class extends om{static token="outputformat";token="outputformat"};NA.register(rEe);var aEe=class extends om{static token="drillshape";token="drillshape"};NA.register(aEe);var gEe=class extends om{static token="scaleselection";token="scaleselection"};NA.register(gEe);var cEe=class extends mr{static token="disableapertmacros";token="disableapertmacros"};NA.register(cEe);var IEe=class extends mr{static token="usegerberextensions";token="usegerberextensions"};NA.register(IEe);var lEe=class extends mr{static token="usegerberattributes";token="usegerberattributes"};NA.register(lEe);var BEe=class extends mr{static token="usegerberadvancedattributes";token="usegerberadvancedattributes"};NA.register(BEe);var CEe=class extends mr{static token="creategerberjobfile";token="creategerberjobfile"};NA.register(CEe);var QEe=class extends mr{static token="excludeedgelayer";token="excludeedgelayer"};NA.register(QEe);var hEe=class extends mr{static token="plotframeref";token="plotframeref"};NA.register(hEe);var EEe=class extends mr{static token="viasonmask";token="viasonmask"};NA.register(EEe);var uEe=class extends mr{static token="useauxorigin";token="useauxorigin"};NA.register(uEe);var dEe=class extends mr{static token="pdf_front_fp_property_popups";token="pdf_front_fp_property_popups"};NA.register(dEe);var pEe=class extends mr{static token="pdf_back_fp_property_popups";token="pdf_back_fp_property_popups"};NA.register(pEe);var fEe=class extends mr{static token="pdf_metadata";token="pdf_metadata"};NA.register(fEe);var yEe=class extends mr{static token="pdf_single_document";token="pdf_single_document"};NA.register(yEe);var mEe=class extends mr{static token="dxfpolygonmode";token="dxfpolygonmode"};NA.register(mEe);var wEe=class extends mr{static token="dxfimperialunits";token="dxfimperialunits"};NA.register(wEe);var DEe=class extends mr{static token="dxfusepcbnewfont";token="dxfusepcbnewfont"};NA.register(DEe);var SEe=class extends mr{static token="psnegative";token="psnegative"};NA.register(SEe);var bEe=class extends mr{static token="psa4output";token="psa4output"};NA.register(bEe);var xEe=class extends mr{static token="plotreference";token="plotreference"};NA.register(xEe);var _Ee=class extends mr{static token="plotvalue";token="plotvalue"};NA.register(_Ee);var kEe=class extends mr{static token="plotothertext";token="plotothertext"};NA.register(kEe);var FEe=class extends mr{static token="plotinvisibletext";token="plotinvisibletext"};NA.register(FEe);var GEe=class extends mr{static token="padsonsilk";token="padsonsilk"};NA.register(GEe);var REe=class extends mr{static token="sketchpadsonfab";token="sketchpadsonfab"};NA.register(REe);var MEe=class extends mr{static token="plotpadnumbers";token="plotpadnumbers"};NA.register(MEe);var NEe=class extends mr{static token="hidednponfab";token="hidednponfab"};NA.register(NEe);var vEe=class extends mr{static token="sketchdnponfab";token="sketchdnponfab"};NA.register(vEe);var LEe=class extends mr{static token="crossoutdnponfab";token="crossoutdnponfab"};NA.register(LEe);var UEe=class extends mr{static token="subtractmaskfromsilk";token="subtractmaskfromsilk"};NA.register(UEe);var HEe=class extends mr{static token="plot_black_and_white";token="plot_black_and_white"};NA.register(HEe);var YEe=class extends mr{static token="mirror";token="mirror"};NA.register(YEe);var JEe=class extends mr{static token="outputdirectory";token="outputdirectory";quoteStringValue=!0};NA.register(JEe);var TEe=class extends mr{static token="plot_on_all_layers";token="plot_on_all_layers"};NA.register(TEe);var KEe=class extends mr{static token="plotinvisible";token="plotinvisible"};NA.register(KEe);var zni={layerselection:"layerselection",plot_on_all_layers_selection:"plot_on_all_layers_selection",disableapertmacros:"disableapertmacros",usegerberextensions:"usegerberextensions",usegerberattributes:"usegerberattributes",usegerberadvancedattributes:"usegerberadvancedattributes",creategerberjobfile:"creategerberjobfile",excludeedgelayer:"excludeedgelayer",dashed_line_dash_ratio:"dashed_line_dash_ratio",dashed_line_gap_ratio:"dashed_line_gap_ratio",svgprecision:"svgprecision",linewidth:"linewidth",plotframeref:"plotframeref",plotreference:"plotreference",plotvalue:"plotvalue",plotothertext:"plotothertext",plotinvisibletext:"plotinvisibletext",padsonsilk:"padsonsilk",sketchpadsonfab:"sketchpadsonfab",plotpadnumbers:"plotpadnumbers",hidednponfab:"hidednponfab",sketchdnponfab:"sketchdnponfab",crossoutdnponfab:"crossoutdnponfab",subtractmaskfromsilk:"subtractmaskfromsilk",plot_black_and_white:"plot_black_and_white",plot_on_all_layers:"plot_on_all_layers",plotinvisible:"plotinvisible",mode:"mode",useauxorigin:"useauxorigin",viasonmask:"viasonmask",hpglpennumber:"hpglpennumber",hpglpenspeed:"hpglpenspeed",hpglpendiameter:"hpglpendiameter",hpglpenoverlay:"hpglpenoverlay",pdf_front_fp_property_popups:"pdf_front_fp_property_popups",pdf_back_fp_property_popups:"pdf_back_fp_property_popups",pdf_metadata:"pdf_metadata",pdf_single_document:"pdf_single_document",dxfpolygonmode:"dxfpolygonmode",dxfimperialunits:"dxfimperialunits",dxfusepcbnewfont:"dxfusepcbnewfont",psnegative:"psnegative",psa4output:"psa4output",mirror:"mirror",outputformat:"outputformat",drillshape:"drillshape",scaleselection:"scaleselection",outputdirectory:"outputdirectory"},Xni=["layerselection","plot_on_all_layers_selection","disableapertmacros","usegerberextensions","usegerberattributes","usegerberadvancedattributes","creategerberjobfile","excludeedgelayer","dashed_line_dash_ratio","dashed_line_gap_ratio","svgprecision","linewidth","plotframeref","plotreference","plotvalue","plotothertext","mode","useauxorigin","viasonmask","hpglpennumber","hpglpenspeed","hpglpendiameter","hpglpenoverlay","pdf_front_fp_property_popups","pdf_back_fp_property_popups","pdf_metadata","pdf_single_document","dxfpolygonmode","dxfimperialunits","dxfusepcbnewfont","psnegative","psa4output","plot_black_and_white","plot_on_all_layers","plotinvisible","plotinvisibletext","padsonsilk","sketchpadsonfab","plotpadnumbers","hidednponfab","sketchdnponfab","crossoutdnponfab","subtractmaskfromsilk","outputformat","mirror","drillshape","scaleselection","outputdirectory"],GwA=class uwe extends NA{static token="pcbplotparams";static parentToken="setup";token="pcbplotparams";_properties={};static fromSexprPrimitives(A){const e=new uwe,{propertyMap:i}=NA.parsePrimitivesToClassProperties(A,this.token);for(const[n,o]of Object.entries(i)){const s=zni[n];if(!s)throw new Error(`Unsupported pcbplotparams token: ${n}`);e._properties[s]=o}return e}getChildren(){const A=[];for(const e of Xni){const i=this._properties[e];i&&A.push(i)}return A}clearProperty(A){delete this._properties[A]}setStringProperty(A,e,i){if(e===void 0){this.clearProperty(A);return}this._properties[A]=new i(e)}setNumberProperty(A,e,i){if(e===void 0){this.clearProperty(A);return}this._properties[A]=new i(e)}setStringOrNumberProperty(A,e,i){if(e===void 0){this.clearProperty(A);return}this._properties[A]=new i(e)}get layerselection(){return this._properties.layerselection?.value}set layerselection(A){this.setStringOrNumberProperty("layerselection",A,jhe)}get plot_on_all_layers_selection(){return this._properties.plot_on_all_layers_selection?.value}set plot_on_all_layers_selection(A){this.setStringOrNumberProperty("plot_on_all_layers_selection",A,zhe)}get disableapertmacros(){return this._properties.disableapertmacros?.value}set disableapertmacros(A){this.setStringProperty("disableapertmacros",A,cEe)}get usegerberextensions(){return this._properties.usegerberextensions?.value}set usegerberextensions(A){this.setStringProperty("usegerberextensions",A,IEe)}get usegerberattributes(){return this._properties.usegerberattributes?.value}set usegerberattributes(A){this.setStringProperty("usegerberattributes",A,lEe)}get usegerberadvancedattributes(){return this._properties.usegerberadvancedattributes?.value}set usegerberadvancedattributes(A){this.setStringProperty("usegerberadvancedattributes",A,BEe)}get creategerberjobfile(){return this._properties.creategerberjobfile?.value}set creategerberjobfile(A){this.setStringProperty("creategerberjobfile",A,CEe)}get excludeedgelayer(){return this._properties.excludeedgelayer?.value}set excludeedgelayer(A){this.setStringProperty("excludeedgelayer",A,QEe)}get dashed_line_dash_ratio(){return this._properties.dashed_line_dash_ratio?.value}set dashed_line_dash_ratio(A){this.setNumberProperty("dashed_line_dash_ratio",A,Xhe)}get dashed_line_gap_ratio(){return this._properties.dashed_line_gap_ratio?.value}set dashed_line_gap_ratio(A){this.setNumberProperty("dashed_line_gap_ratio",A,$he)}get svgprecision(){return this._properties.svgprecision?.value}set svgprecision(A){this.setNumberProperty("svgprecision",A,AEe)}get linewidth(){return this._properties.linewidth?.value}set linewidth(A){this.setNumberProperty("linewidth",A,eEe)}get plotframeref(){return this._properties.plotframeref?.value}set plotframeref(A){this.setStringProperty("plotframeref",A,hEe)}get plotreference(){return this._properties.plotreference?.value}set plotreference(A){this.setStringProperty("plotreference",A,xEe)}get plotvalue(){return this._properties.plotvalue?.value}set plotvalue(A){this.setStringProperty("plotvalue",A,_Ee)}get plotothertext(){return this._properties.plotothertext?.value}set plotothertext(A){this.setStringProperty("plotothertext",A,kEe)}get plotinvisibletext(){return this._properties.plotinvisibletext?.value}set plotinvisibletext(A){this.setStringProperty("plotinvisibletext",A,FEe)}get padsonsilk(){return this._properties.padsonsilk?.value}set padsonsilk(A){this.setStringProperty("padsonsilk",A,GEe)}get plotpadnumbers(){return this._properties.plotpadnumbers?.value}set plotpadnumbers(A){this.setStringProperty("plotpadnumbers",A,MEe)}get sketchpadsonfab(){return this._properties.sketchpadsonfab?.value}set sketchpadsonfab(A){this.setStringProperty("sketchpadsonfab",A,REe)}get hidednponfab(){return this._properties.hidednponfab?.value}set hidednponfab(A){this.setStringProperty("hidednponfab",A,NEe)}get sketchdnponfab(){return this._properties.sketchdnponfab?.value}set sketchdnponfab(A){this.setStringProperty("sketchdnponfab",A,vEe)}get crossoutdnponfab(){return this._properties.crossoutdnponfab?.value}set crossoutdnponfab(A){this.setStringProperty("crossoutdnponfab",A,LEe)}get subtractmaskfromsilk(){return this._properties.subtractmaskfromsilk?.value}set subtractmaskfromsilk(A){this.setStringProperty("subtractmaskfromsilk",A,UEe)}get plot_black_and_white(){return this._properties.plot_black_and_white?.value}set plot_black_and_white(A){this.setStringProperty("plot_black_and_white",A,HEe)}get plot_on_all_layers(){return this._properties.plot_on_all_layers?.value}set plot_on_all_layers(A){this.setStringProperty("plot_on_all_layers",A,TEe)}get plotinvisible(){return this._properties.plotinvisible?.value}set plotinvisible(A){this.setStringProperty("plotinvisible",A,KEe)}get mode(){return this._properties.mode?.value}set mode(A){this.setNumberProperty("mode",A,tEe)}get useauxorigin(){return this._properties.useauxorigin?.value}set useauxorigin(A){this.setStringProperty("useauxorigin",A,uEe)}get viasonmask(){return this._properties.viasonmask?.value}set viasonmask(A){this.setStringProperty("viasonmask",A,EEe)}get hpglpennumber(){return this._properties.hpglpennumber?.value}set hpglpennumber(A){this.setNumberProperty("hpglpennumber",A,iEe)}get hpglpenspeed(){return this._properties.hpglpenspeed?.value}set hpglpenspeed(A){this.setNumberProperty("hpglpenspeed",A,nEe)}get hpglpendiameter(){return this._properties.hpglpendiameter?.value}set hpglpendiameter(A){this.setNumberProperty("hpglpendiameter",A,oEe)}get hpglpenoverlay(){return this._properties.hpglpenoverlay?.value}set hpglpenoverlay(A){this.setNumberProperty("hpglpenoverlay",A,sEe)}get pdf_front_fp_property_popups(){return this._properties.pdf_front_fp_property_popups?.value}set pdf_front_fp_property_popups(A){this.setStringProperty("pdf_front_fp_property_popups",A,dEe)}get pdf_back_fp_property_popups(){return this._properties.pdf_back_fp_property_popups?.value}set pdf_back_fp_property_popups(A){this.setStringProperty("pdf_back_fp_property_popups",A,pEe)}get pdf_metadata(){return this._properties.pdf_metadata?.value}set pdf_metadata(A){this.setStringProperty("pdf_metadata",A,fEe)}get pdf_single_document(){return this._properties.pdf_single_document?.value}set pdf_single_document(A){this.setStringProperty("pdf_single_document",A,yEe)}get dxfpolygonmode(){return this._properties.dxfpolygonmode?.value}set dxfpolygonmode(A){this.setStringProperty("dxfpolygonmode",A,mEe)}get dxfimperialunits(){return this._properties.dxfimperialunits?.value}set dxfimperialunits(A){this.setStringProperty("dxfimperialunits",A,wEe)}get dxfusepcbnewfont(){return this._properties.dxfusepcbnewfont?.value}set dxfusepcbnewfont(A){this.setStringProperty("dxfusepcbnewfont",A,DEe)}get psnegative(){return this._properties.psnegative?.value}set psnegative(A){this.setStringProperty("psnegative",A,SEe)}get psa4output(){return this._properties.psa4output?.value}set psa4output(A){this.setStringProperty("psa4output",A,bEe)}get mirror(){return this._properties.mirror?.value}set mirror(A){this.setStringProperty("mirror",A,YEe)}get outputformat(){return this._properties.outputformat?.value}set outputformat(A){this.setNumberProperty("outputformat",A,rEe)}get drillshape(){return this._properties.drillshape?.value}set drillshape(A){this.setNumberProperty("drillshape",A,aEe)}get scaleselection(){return this._properties.scaleselection?.value}set scaleselection(A){this.setNumberProperty("scaleselection",A,gEe)}get outputdirectory(){return this._properties.outputdirectory?.value}set outputdirectory(A){this.setStringProperty("outputdirectory",A,JEe)}};NA.register(GwA);var oz=class extends tT{static parentToken="setup"},RwA=class extends oz{static token="zone_45_only";token="zone_45_only"};NA.register(RwA);var MwA=class extends oz{static token="allow_soldermask_bridges_in_footprints";token="allow_soldermask_bridges_in_footprints"};NA.register(MwA);var NwA=class extends oz{static token="visible_elements";token="visible_elements"};NA.register(NwA);var vwA=class extends oz{static token="uvias_allowed";token="uvias_allowed"};NA.register(vwA);var LwA=class dwe extends NA{static token="tenting";static parentToken="setup";token="tenting";_sides=[];constructor(A=[]){super(),this.sides=A}static fromSexprPrimitives(A){const e=A.map(i=>pi(i)).filter(i=>i!==void 0);return new dwe(e)}get sides(){return[...this._sides]}set sides(A){this._sides=A.map(e=>String(e))}getChildren(){return[]}getString(){return this._sides.length===0?"(tenting)":`(tenting ${this._sides.join(" ")})`}};NA.register(LwA);var iT=class extends Vni{static parentToken="setup"},PEe=class extends jni{static parentToken="setup"},UwA=class extends iT{static token="pcb_text_size";token="pcb_text_size"};NA.register(UwA);var HwA=class extends iT{static token="mod_text_size";token="mod_text_size"};NA.register(HwA);var YwA=class extends iT{static token="pad_size";token="pad_size"};NA.register(YwA);var JwA=class extends iT{static token="pad_to_paste_clearance_values";token="pad_to_paste_clearance_values"};NA.register(JwA);var TwA=class extends iT{static token="trace_width";token="trace_width"};NA.register(TwA);var KwA=class extends PEe{static token="aux_axis_origin";token="aux_axis_origin"};NA.register(KwA);var PwA=class extends PEe{static token="grid_origin";token="grid_origin"};NA.register(PwA);var cB=class extends tT{static parentToken="setup";static parsePrimitiveValue(t){const A=ai(t);if(A===void 0)throw new Error(`${this.name} expects a numeric value`);return A}},qwA=class extends cB{static token="pad_to_mask_clearance";token="pad_to_mask_clearance"};NA.register(qwA);var OwA=class extends cB{static token="solder_mask_min_width";token="solder_mask_min_width"};NA.register(OwA);var WwA=class extends cB{static token="pad_to_paste_clearance";token="pad_to_paste_clearance"};NA.register(WwA);var ZwA=class extends cB{static token="pad_to_paste_clearance_ratio";token="pad_to_paste_clearance_ratio"};NA.register(ZwA);var VwA=class extends cB{static token="last_trace_width";token="last_trace_width"};NA.register(VwA);var jwA=class extends cB{static token="trace_clearance";token="trace_clearance"};NA.register(jwA);var zwA=class extends cB{static token="zone_clearance";token="zone_clearance"};NA.register(zwA);var XwA=class extends cB{static token="trace_min";token="trace_min"};NA.register(XwA);var $wA=class extends cB{static token="segment_width";token="segment_width"};NA.register($wA);var ADA=class extends cB{static token="edge_width";token="edge_width"};NA.register(ADA);var eDA=class extends cB{static token="via_size";token="via_size"};NA.register(eDA);var tDA=class extends cB{static token="via_drill";token="via_drill"};NA.register(tDA);var iDA=class extends cB{static token="via_min_size";token="via_min_size"};NA.register(iDA);var nDA=class extends cB{static token="via_min_drill";token="via_min_drill"};NA.register(nDA);var oDA=class extends cB{static token="uvia_size";token="uvia_size"};NA.register(oDA);var sDA=class extends cB{static token="uvia_drill";token="uvia_drill"};NA.register(sDA);var rDA=class extends cB{static token="uvia_min_size";token="uvia_min_size"};NA.register(rDA);var aDA=class extends cB{static token="uvia_min_drill";token="uvia_min_drill"};NA.register(aDA);var gDA=class extends cB{static token="pcb_text_width";token="pcb_text_width"};NA.register(gDA);var cDA=class extends cB{static token="mod_edge_width";token="mod_edge_width"};NA.register(cDA);var IDA=class extends cB{static token="mod_text_width";token="mod_text_width"};NA.register(IDA);var lDA=class extends cB{static token="pad_drill";token="pad_drill"};NA.register(lDA);var nT=class extends tT{static parentToken="stackup"},qEe=class extends nT{static token="copper_finish";token="copper_finish";quoteStringValue=!0};NA.register(qEe);var OEe=class extends nT{static token="dielectric_constraints";token="dielectric_constraints"};NA.register(OEe);var WEe=class extends nT{static token="edge_connector";token="edge_connector"};NA.register(WEe);var ZEe=class extends nT{static token="castellated_pads";token="castellated_pads"};NA.register(ZEe);var VEe=class extends nT{static token="edge_plating";token="edge_plating"};NA.register(VEe);var N1=class extends tT{static parentToken="layer"},BDA=class extends N1{static token="type";token="type";quoteStringValue=!0};NA.register(BDA);var CDA=class extends N1{static token="color";token="color";quoteStringValue=!0};NA.register(CDA);var QDA=class extends N1{static token="thickness";token="thickness";static parsePrimitiveValue(t){const A=ai(t);if(A===void 0)throw new Error("Stackup layer thickness expects a numeric value");return A}};NA.register(QDA);var hDA=class extends N1{static token="material";token="material";quoteStringValue=!0};NA.register(hDA);var EDA=class extends N1{static token="epsilon_r";token="epsilon_r";static parsePrimitiveValue(t){const A=ai(t);if(A===void 0)throw new Error("Stackup layer epsilon_r expects a numeric value");return A}};NA.register(EDA);var uDA=class extends N1{static token="loss_tangent";token="loss_tangent";static parsePrimitiveValue(t){const A=ai(t);if(A===void 0)throw new Error("Stackup layer loss_tangent expects a numeric value");return A}};NA.register(uDA);var jEe=class pwe extends NA{static token="layer";static parentToken="stackup";token="layer";_name;_number;_sxType;_sxColor;_sxThickness;_sxMaterial;_sxEpsilonR;_sxLossTangent;constructor(A,e={}){super(),this._name=A,this._number=e.number,this._sxType=e.type,this._sxColor=e.color,this._sxThickness=e.thickness,this._sxMaterial=e.material,this._sxEpsilonR=e.epsilonR,this._sxLossTangent=e.lossTangent}static fromSexprPrimitives(A){if(A.length===0)throw new Error("Stackup layer requires at least a name");const e=pi(A[0]);if(e===void 0)throw new Error("Stackup layer name must be a string");let i=1,n;const o=A[i],s=ai(o);s!==void 0&&(n=s,i+=1);const r=A.slice(i),{propertyMap:a}=NA.parsePrimitivesToClassProperties(r,this.token);return new pwe(e,{number:n,type:a.type,color:a.color,thickness:a.thickness,material:a.material,epsilonR:a.epsilon_r,lossTangent:a.loss_tangent})}get name(){return this._name}set name(A){const e=pi(A);if(e===void 0)throw new Error("Stackup layer name must be a string");this._name=e}get number(){return this._number}set number(A){if(A===void 0){this._number=void 0;return}const e=ai(A);if(e===void 0)throw new Error("Stackup layer number must be numeric");this._number=e}get type(){return this._sxType?.value}set type(A){if(A===void 0){this._sxType=void 0;return}this._sxType=A instanceof BDA?A:new BDA(A)}get color(){return this._sxColor?.value}set color(A){if(A===void 0){this._sxColor=void 0;return}this._sxColor=A instanceof CDA?A:new CDA(A)}get thickness(){return this._sxThickness?.value}set thickness(A){if(A===void 0){this._sxThickness=void 0;return}this._sxThickness=A instanceof QDA?A:new QDA(A)}get material(){return this._sxMaterial?.value}set material(A){if(A===void 0){this._sxMaterial=void 0;return}this._sxMaterial=A instanceof hDA?A:new hDA(A)}get epsilonR(){return this._sxEpsilonR?.value}set epsilonR(A){if(A===void 0){this._sxEpsilonR=void 0;return}this._sxEpsilonR=A instanceof EDA?A:new EDA(A)}get lossTangent(){return this._sxLossTangent?.value}set lossTangent(A){if(A===void 0){this._sxLossTangent=void 0;return}this._sxLossTangent=A instanceof uDA?A:new uDA(A)}getChildren(){const A=[];return this._sxType&&A.push(this._sxType),this._sxColor&&A.push(this._sxColor),this._sxThickness&&A.push(this._sxThickness),this._sxMaterial&&A.push(this._sxMaterial),this._sxEpsilonR&&A.push(this._sxEpsilonR),this._sxLossTangent&&A.push(this._sxLossTangent),A}getString(){const A=`(layer ${Qn(this._name)}${this._number!==void 0?` ${this._number}`:""}`,e=this.getChildren();if(e.length===0)return`${A})`;const i=[A];for(const n of e)i.push(n.getStringIndented());return i.push(")"),i.join(`
|
|
5825
5825
|
`)}};NA.register(jEe);var dDA=class fwe extends NA{static token="stackup";static parentToken="setup";token="stackup";_layers=[];_sxCopperFinish;_sxDielectricConstraints;_sxEdgeConnector;_sxCastellatedPads;_sxEdgePlating;constructor(A={}){super(),this.layers=A.layers??[],this._sxCopperFinish=A.copperFinish,this._sxDielectricConstraints=A.dielectricConstraints,this._sxEdgeConnector=A.edgeConnector,this._sxCastellatedPads=A.castellatedPads,this._sxEdgePlating=A.edgePlating}static fromSexprPrimitives(A){const{propertyMap:e,arrayPropertyMap:i}=NA.parsePrimitivesToClassProperties(A,this.token);return new fwe({layers:i.layer??[],copperFinish:e.copper_finish,dielectricConstraints:e.dielectric_constraints,edgeConnector:e.edge_connector,castellatedPads:e.castellated_pads,edgePlating:e.edge_plating})}get layers(){return[...this._layers]}set layers(A){this._layers=A.map(e=>{if(!(e instanceof jEe))throw new Error("Stackup layers must be StackupLayer instances");return e})}get copperFinish(){return this._sxCopperFinish?.value}set copperFinish(A){this._sxCopperFinish=A?new qEe(A):void 0}get dielectricConstraints(){return this._sxDielectricConstraints?.value}set dielectricConstraints(A){this._sxDielectricConstraints=A?new OEe(A):void 0}get edgeConnector(){return this._sxEdgeConnector?.value}set edgeConnector(A){this._sxEdgeConnector=A?new WEe(A):void 0}get castellatedPads(){return this._sxCastellatedPads?.value}set castellatedPads(A){this._sxCastellatedPads=A?new ZEe(A):void 0}get edgePlating(){return this._sxEdgePlating?.value}set edgePlating(A){this._sxEdgePlating=A?new VEe(A):void 0}getChildren(){const A=[...this._layers],e=[this._sxCopperFinish,this._sxDielectricConstraints,this._sxEdgeConnector,this._sxCastellatedPads,this._sxEdgePlating];for(const i of e)i&&A.push(i);return A}};NA.register(dDA);var $ni={stackup:"stackup",pcbplotparams:"pcbPlotParams",pad_to_mask_clearance:"padToMaskClearance",solder_mask_min_width:"solderMaskMinWidth",pad_to_paste_clearance:"padToPasteClearance",pad_to_paste_clearance_ratio:"padToPasteClearanceRatio",last_trace_width:"lastTraceWidth",trace_clearance:"traceClearance",zone_clearance:"zoneClearance",zone_45_only:"zone45Only",trace_min:"traceMin",segment_width:"segmentWidth",edge_width:"edgeWidth",via_size:"viaSize",via_drill:"viaDrill",via_min_size:"viaMinSize",via_min_drill:"viaMinDrill",uvias_allowed:"uviasAllowed",uvia_size:"uviaSize",uvia_drill:"uviaDrill",uvia_min_size:"uviaMinSize",uvia_min_drill:"uviaMinDrill",pcb_text_width:"pcbTextWidth",pcb_text_size:"pcbTextSize",mod_edge_width:"modEdgeWidth",mod_text_size:"modTextSize",mod_text_width:"modTextWidth",pad_size:"padSize",pad_drill:"padDrill",allow_soldermask_bridges_in_footprints:"allowSoldermaskBridgesInFootprints",tenting:"tenting",aux_axis_origin:"auxAxisOrigin",grid_origin:"gridOrigin",visible_elements:"visibleElements",pad_to_paste_clearance_values:"padToPasteClearanceValues",trace_width:"traceWidth"},Aoi=["stackup","padToMaskClearance","solderMaskMinWidth","padToPasteClearance","padToPasteClearanceRatio","lastTraceWidth","traceClearance","zoneClearance","zone45Only","traceMin","segmentWidth","edgeWidth","viaSize","viaDrill","viaMinSize","viaMinDrill","uviaSize","uviaDrill","uviasAllowed","uviaMinSize","uviaMinDrill","pcbTextWidth","pcbTextSize","modEdgeWidth","modTextSize","modTextWidth","padSize","padDrill","allowSoldermaskBridgesInFootprints","tenting","auxAxisOrigin","gridOrigin","visibleElements","padToPasteClearanceValues","traceWidth","pcbPlotParams"],pDA=class ywe extends NA{static token="setup";token="setup";_properties={};static fromSexprPrimitives(A){const e=new ywe,{propertyMap:i}=NA.parsePrimitivesToClassProperties(A,this.token);for(const[n,o]of Object.entries(i)){const s=$ni[n];if(!s)throw new Error(`Unsupported setup property token: ${n}`);e._properties[s]=o}return e}getChildren(){const A=[];for(const e of Aoi){const i=this._properties[e];i&&A.push(i)}return A}setProperty(A,e){if(e){this._properties[A]=e;return}delete this._properties[A]}setNumberProperty(A,e,i){if(e===void 0){delete this._properties[A];return}this._properties[A]=new i(e)}getPropertyInstance(A,e){const i=this._properties[A];return i instanceof e?i:void 0}get stackup(){return this.getPropertyInstance("stackup",dDA)}set stackup(A){if(A!==void 0&&!(A instanceof dDA))throw new Error("stackup must be a Stackup instance");this.setProperty("stackup",A)}get pcbPlotParams(){return this.getPropertyInstance("pcbPlotParams",GwA)}set pcbPlotParams(A){if(A!==void 0&&!(A instanceof GwA))throw new Error("pcbPlotParams must be a PcbPlotParams instance");this.setProperty("pcbPlotParams",A)}get padToMaskClearance(){return this.getPropertyInstance("padToMaskClearance",qwA)?.value}set padToMaskClearance(A){this.setNumberProperty("padToMaskClearance",A,qwA)}get solderMaskMinWidth(){return this.getPropertyInstance("solderMaskMinWidth",OwA)?.value}set solderMaskMinWidth(A){this.setNumberProperty("solderMaskMinWidth",A,OwA)}get padToPasteClearance(){return this.getPropertyInstance("padToPasteClearance",WwA)?.value}set padToPasteClearance(A){this.setNumberProperty("padToPasteClearance",A,WwA)}get padToPasteClearanceRatio(){return this.getPropertyInstance("padToPasteClearanceRatio",ZwA)?.value}set padToPasteClearanceRatio(A){this.setNumberProperty("padToPasteClearanceRatio",A,ZwA)}get lastTraceWidth(){return this.getPropertyInstance("lastTraceWidth",VwA)?.value}set lastTraceWidth(A){this.setNumberProperty("lastTraceWidth",A,VwA)}get traceClearance(){return this.getPropertyInstance("traceClearance",jwA)?.value}set traceClearance(A){this.setNumberProperty("traceClearance",A,jwA)}get zoneClearance(){return this.getPropertyInstance("zoneClearance",zwA)?.value}set zoneClearance(A){this.setNumberProperty("zoneClearance",A,zwA)}get zone45Only(){return this.getPropertyInstance("zone45Only",RwA)?.value}set zone45Only(A){this.setProperty("zone45Only",A===void 0?void 0:new RwA(A))}get traceMin(){return this.getPropertyInstance("traceMin",XwA)?.value}set traceMin(A){this.setNumberProperty("traceMin",A,XwA)}get segmentWidth(){return this.getPropertyInstance("segmentWidth",$wA)?.value}set segmentWidth(A){this.setNumberProperty("segmentWidth",A,$wA)}get edgeWidth(){return this.getPropertyInstance("edgeWidth",ADA)?.value}set edgeWidth(A){this.setNumberProperty("edgeWidth",A,ADA)}get viaSize(){return this.getPropertyInstance("viaSize",eDA)?.value}set viaSize(A){this.setNumberProperty("viaSize",A,eDA)}get viaDrill(){return this.getPropertyInstance("viaDrill",tDA)?.value}set viaDrill(A){this.setNumberProperty("viaDrill",A,tDA)}get viaMinSize(){return this.getPropertyInstance("viaMinSize",iDA)?.value}set viaMinSize(A){this.setNumberProperty("viaMinSize",A,iDA)}get viaMinDrill(){return this.getPropertyInstance("viaMinDrill",nDA)?.value}set viaMinDrill(A){this.setNumberProperty("viaMinDrill",A,nDA)}get uviasAllowed(){return this.getPropertyInstance("uviasAllowed",vwA)?.value}set uviasAllowed(A){this.setProperty("uviasAllowed",A===void 0?void 0:new vwA(A))}get uviaSize(){return this.getPropertyInstance("uviaSize",oDA)?.value}set uviaSize(A){this.setNumberProperty("uviaSize",A,oDA)}get uviaDrill(){return this.getPropertyInstance("uviaDrill",sDA)?.value}set uviaDrill(A){this.setNumberProperty("uviaDrill",A,sDA)}get uviaMinSize(){return this.getPropertyInstance("uviaMinSize",rDA)?.value}set uviaMinSize(A){this.setNumberProperty("uviaMinSize",A,rDA)}get uviaMinDrill(){return this.getPropertyInstance("uviaMinDrill",aDA)?.value}set uviaMinDrill(A){this.setNumberProperty("uviaMinDrill",A,aDA)}get pcbTextWidth(){return this.getPropertyInstance("pcbTextWidth",gDA)?.value}set pcbTextWidth(A){this.setNumberProperty("pcbTextWidth",A,gDA)}get pcbTextSize(){return this.getPropertyInstance("pcbTextSize",UwA)?.values}set pcbTextSize(A){if(A===void 0){delete this._properties.pcbTextSize;return}this.setProperty("pcbTextSize",new UwA(A))}get modEdgeWidth(){return this.getPropertyInstance("modEdgeWidth",cDA)?.value}set modEdgeWidth(A){this.setNumberProperty("modEdgeWidth",A,cDA)}get modTextSize(){return this.getPropertyInstance("modTextSize",HwA)?.values}set modTextSize(A){if(A===void 0){delete this._properties.modTextSize;return}this.setProperty("modTextSize",new HwA(A))}get modTextWidth(){return this.getPropertyInstance("modTextWidth",IDA)?.value}set modTextWidth(A){this.setNumberProperty("modTextWidth",A,IDA)}get padSize(){return this.getPropertyInstance("padSize",YwA)?.values}set padSize(A){if(A===void 0){delete this._properties.padSize;return}this.setProperty("padSize",new YwA(A))}get padDrill(){return this.getPropertyInstance("padDrill",lDA)?.value}set padDrill(A){this.setNumberProperty("padDrill",A,lDA)}get allowSoldermaskBridgesInFootprints(){return this.getPropertyInstance("allowSoldermaskBridgesInFootprints",MwA)?.value}set allowSoldermaskBridgesInFootprints(A){this.setProperty("allowSoldermaskBridgesInFootprints",A===void 0?void 0:new MwA(A))}get tenting(){return this.getPropertyInstance("tenting",LwA)?.sides}set tenting(A){if(A===void 0){delete this._properties.tenting;return}this.setProperty("tenting",new LwA(A))}get auxAxisOrigin(){const A=this.getPropertyInstance("auxAxisOrigin",KwA);if(A)return{x:A.x,y:A.y}}set auxAxisOrigin(A){if(!A){delete this._properties.auxAxisOrigin;return}this.setProperty("auxAxisOrigin",new KwA(A.x,A.y))}get gridOrigin(){const A=this.getPropertyInstance("gridOrigin",PwA);if(A)return{x:A.x,y:A.y}}set gridOrigin(A){if(!A){delete this._properties.gridOrigin;return}this.setProperty("gridOrigin",new PwA(A.x,A.y))}get visibleElements(){return this.getPropertyInstance("visibleElements",NwA)?.value}set visibleElements(A){this.setProperty("visibleElements",A===void 0?void 0:new NwA(A))}get padToPasteClearanceValues(){return this.getPropertyInstance("padToPasteClearanceValues",JwA)?.values}set padToPasteClearanceValues(A){if(A===void 0){delete this._properties.padToPasteClearanceValues;return}this.setProperty("padToPasteClearanceValues",new JwA(A))}get traceWidth(){return this.getPropertyInstance("traceWidth",TwA)?.values}set traceWidth(A){if(A===void 0){delete this._properties.traceWidth;return}this.setProperty("traceWidth",new TwA(A))}};NA.register(pDA);var zEe=class extends ra{static token="thickness";static parentToken="general";token="thickness"};NA.register(zEe);var XEe=class mwe extends NA{static token="legacy_teardrops";static parentToken="general";token="legacy_teardrops";_enabled;constructor(A){super(),this._enabled=A}static fromSexprPrimitives(A){const e=pi(A[0]);if(e===void 0)throw new Error("legacy_teardrops expects a string value");const i=/^(yes|true)$/iu.test(e);return new mwe(i)}get enabled(){return this._enabled}set enabled(A){this._enabled=A}getChildren(){return[]}getString(){return`(legacy_teardrops ${this._enabled?"yes":"no"})`}};NA.register(XEe);var $Ee=new Set(["thickness","legacy_teardrops"]),fDA=class wwe extends NA{static token="general";static parentToken="kicad_pcb";token="general";_sxThickness;_sxLegacyTeardrops;static fromSexprPrimitives(A){const e=new wwe,{propertyMap:i,arrayPropertyMap:n}=NA.parsePrimitivesToClassProperties(A,this.token);for(const o of Object.keys(i))if(!$Ee.has(o))throw new Error(`general encountered unsupported child token "${o}"`);for(const[o,s]of Object.entries(n)){if(!$Ee.has(o))throw new Error(`general encountered unsupported child token "${o}"`);if(s.length>1)throw new Error(`general encountered repeated child token "${o}"`)}return e._sxThickness=n.thickness?.[0]??i.thickness,e._sxLegacyTeardrops=n.legacy_teardrops?.[0]??i.legacy_teardrops,e}get thickness(){return this._sxThickness?.value}set thickness(A){this._sxThickness=A===void 0?void 0:new zEe(A)}get legacyTeardrops(){return this._sxLegacyTeardrops?.enabled}set legacyTeardrops(A){if(A===void 0){this._sxLegacyTeardrops=void 0;return}this._sxLegacyTeardrops=new XEe(A)}getChildren(){const A=[];return this._sxThickness&&A.push(this._sxThickness),this._sxLegacyTeardrops&&A.push(this._sxLegacyTeardrops),A}};NA.register(fDA);var Rl=class Dwe extends NA{static token="__pcb_layer_definition__";static parentToken="layers";token="__pcb_layer_definition__";_index;_name;_type;_userName;constructor(A){super(),this._index=A.index,this._name=A.name,this._type=A.type,this._userName=A.userName}static fromPrimitive(A){if(!Array.isArray(A)||A.length<3)throw new Error(`layers entry must be an array with at least index, name, and type: ${JSON.stringify(A)}`);const[e,i,n,o]=A,s=ai(e),r=pi(i),a=pi(n),g=o===void 0?void 0:pi(o);if(s===void 0||r===void 0||a===void 0)throw new Error(`layers entry is missing required values: ${JSON.stringify(A)}`);return new Dwe({index:s,name:r,type:a,userName:g})}get index(){return this._index}set index(A){this._index=A}get name(){return this._name}set name(A){this._name=A}get type(){return this._type}set type(A){this._type=A}get userName(){return this._userName}set userName(A){this._userName=A}getChildren(){return[]}getString(){if(this._index===void 0||this._name===void 0||this._type===void 0)return"()";const A=[String(this._index),Qn(this._name),this._type];return this._userName!==void 0&&A.push(Qn(this._userName)),`(${A.join(" ")})`}};NA.register(Rl);var yDA=class Swe extends NA{static token="layers";static parentToken="kicad_pcb";token="layers";_definitions=[];static fromSexprPrimitives(A){const e=new Swe;return e._definitions=A.map(i=>Rl.fromPrimitive(i)),e}get definitions(){return[...this._definitions]}set definitions(A){this._definitions=[...A]}getChildren(){return[...this._definitions]}};NA.register(yDA);var sz=class bwe extends NA{static token="net";static parentToken="kicad_pcb";token="net";_id;_name;constructor(A,e){super(),this._id=A,this._name=e}static fromSexprPrimitives(A){const e=ai(A[0]),i=pi(A[1]);if(e===void 0||i===void 0)throw new Error("net requires numeric id and string name");return new bwe(e,i)}get id(){return this._id}set id(A){this._id=A}get name(){return this._name}set name(A){this._name=A}getChildren(){return[]}getString(){return`(net ${this._id} ${Qn(this._name)})`}};NA.register(sz);var mDA=class extends ra{static token="version";static parentToken="kicad_pcb";token="version"};NA.register(mDA);var eoi=t=>/^[A-Za-z0-9._-]+$/.test(t),wDA=class extends em{static token="generator";static parentToken="kicad_pcb";token="generator";getString(){return`(generator ${eoi(this.value)?this.value:Qn(this.value)})`}};NA.register(wDA);var toi=t=>/^[A-Za-z0-9._-]+$/.test(t),DDA=class extends em{static token="generator_version";static parentToken="kicad_pcb";token="generator_version";getString(){return`(generator_version ${toi(this.value)?this.value:Qn(this.value)})`}};NA.register(DDA);var SDA=class xwe extends NA{static token="net";static parentToken="via";token="net";_id;_name;constructor(A,e){super(),this._id=A,this._name=e}static fromSexprPrimitives(A){const e=ai(A[0]);if(e===void 0)throw new Error("via net requires a numeric id");const i=A.length>1?pi(A[1]):void 0;return new xwe(e,i)}get id(){return this._id}set id(A){this._id=A}get name(){return this._name}set name(A){this._name=A}getChildren(){return[]}getString(){return this._name!==void 0?`(net ${this._id} ${Qn(this._name)})`:`(net ${this._id})`}};NA.register(SDA);var ioi=new Set(["locked","free","remove_unused_layers","keep_end_layers"]),bDA=class _we extends NA{static token="via";token="via";_type;_locked=!1;_free=!1;_removeUnusedLayers=!1;_keepEndLayers=!1;_sxAt;_size;_drill;_sxLayers;_sxNet;_sxUuid;_sxTstamp;_sxTeardrops;constructor(A={}){super(),A.type!==void 0&&(this.type=A.type),A.locked!==void 0&&(this.locked=A.locked),A.free!==void 0&&(this.free=A.free),A.removeUnusedLayers!==void 0&&(this.removeUnusedLayers=A.removeUnusedLayers),A.keepEndLayers!==void 0&&(this.keepEndLayers=A.keepEndLayers),A.at!==void 0&&(this.at=A.at),A.size!==void 0&&(this.size=A.size),A.drill!==void 0&&(this.drill=A.drill),A.layers!==void 0&&(this.layers=A.layers),A.net!==void 0&&(this.net=A.net),A.uuid!==void 0&&(this.uuid=A.uuid),A.tstamp!==void 0&&(this.tstamp=A.tstamp),A.teardrops!==void 0&&(this.teardrops=A.teardrops)}static fromSexprPrimitives(A){const e=new _we;for(const i of A){if(typeof i=="string"){e.consumeBareToken(i);continue}if(!Array.isArray(i)||i.length===0)throw new Error(`via encountered unsupported primitive child: ${JSON.stringify(i)}`);const[n,...o]=i;if(typeof n!="string")throw new Error(`via encountered child with non-string token: ${JSON.stringify(i)}`);e.consumeNode(n,o)}return e}consumeBareToken(A){if(A==="blind"||A==="micro"){this._type=A;return}if(!ioi.has(A))throw new Error(`via encountered unsupported flag "${A}"`);switch(A){case"locked":this._locked=!0;break;case"free":this._free=!0;break;case"remove_unused_layers":this._removeUnusedLayers=!0;break;case"keep_end_layers":this._keepEndLayers=!0;break}}consumeNode(A,e){switch(A){case"type":{const i=pi(e[0]);if(i===void 0)throw new Error("via type expects a string value");this._type=i;return}case"locked":this._locked=this.parseYesNo(e);return;case"free":this._free=this.parseYesNo(e);return;case"remove_unused_layers":this._removeUnusedLayers=this.parseYesNo(e);return;case"keep_end_layers":this._keepEndLayers=this.parseYesNo(e);return;case"at":{const i=NA.parsePrimitiveSexpr(["at",...e],{parentToken:this.token});if(!(i instanceof zg))throw new Error("via failed to parse at child");this._sxAt=i;return}case"size":{const i=ai(e[0]);if(i===void 0)throw new Error("via size expects a numeric value");this._size=i;return}case"drill":{const i=ai(e[0]);if(i===void 0)throw new Error("via drill expects a numeric value");this._drill=i;return}case"layers":{this._sxLayers=nz.fromSexprPrimitives(e);return}case"net":{this._sxNet=SDA.fromSexprPrimitives(e);return}case"teardrops":{this._sxTeardrops=yhe.fromSexprPrimitives(e);return}case"uuid":{const i=pi(e[0]);if(i===void 0)throw new Error("via uuid expects a string value");this._sxUuid=new Li(i);return}case"tstamp":{const i=pi(e[0]);if(i===void 0)throw new Error("via tstamp expects a string value");this._sxTstamp=new Xg(i);return}default:throw new Error(`via encountered unsupported child token "${A}"`)}}parseYesNo(A){if(A.length===0)return!0;const e=pi(A[0]);if(e===void 0)throw new Error("Expected string when parsing via boolean child");return/^(yes|true)$/iu.test(e)}get type(){return this._type}set type(A){this._type=A}get locked(){return this._locked}set locked(A){this._locked=A}get free(){return this._free}set free(A){this._free=A}get removeUnusedLayers(){return this._removeUnusedLayers}set removeUnusedLayers(A){this._removeUnusedLayers=A}get keepEndLayers(){return this._keepEndLayers}set keepEndLayers(A){this._keepEndLayers=A}get at(){return this._sxAt}set at(A){this._sxAt=A!==void 0?zg.from(A):void 0}get size(){return this._size}set size(A){this._size=A}get drill(){return this._drill}set drill(A){this._drill=A}get layers(){return this._sxLayers}set layers(A){if(A===void 0){this._sxLayers=void 0;return}this._sxLayers=A instanceof nz?A:new nz(A)}get net(){return this._sxNet}set net(A){this._sxNet=A}get uuid(){return this._sxUuid}set uuid(A){if(A===void 0){this._sxUuid=void 0;return}this._sxUuid=A instanceof Li?A:new Li(A)}get teardrops(){return this._sxTeardrops}set teardrops(A){this._sxTeardrops=A}get tstamp(){return this._sxTstamp}set tstamp(A){if(A===void 0){this._sxTstamp=void 0;return}this._sxTstamp=A instanceof Xg?A:new Xg(A)}getChildren(){const A=[];return this._sxAt&&A.push(this._sxAt),this._sxLayers&&A.push(this._sxLayers),this._sxNet&&A.push(this._sxNet),this._sxUuid&&A.push(this._sxUuid),this._sxTstamp&&A.push(this._sxTstamp),this._sxTeardrops&&A.push(this._sxTeardrops),A}getString(){const A=["(via"];return this._type!==void 0&&A.push(` (type ${this._type})`),this._locked&&A.push(" (locked)"),this._free&&A.push(" (free)"),this._removeUnusedLayers&&A.push(" (remove_unused_layers)"),this._keepEndLayers&&A.push(" (keep_end_layers)"),this._sxAt&&A.push(this._sxAt.getStringIndented()),this._size!==void 0&&A.push(` (size ${this._size})`),this._drill!==void 0&&A.push(` (drill ${this._drill})`),this._sxLayers&&A.push(this._sxLayers.getStringIndented()),this._sxNet&&A.push(this._sxNet.getStringIndented()),this._sxUuid&&A.push(this._sxUuid.getStringIndented()),this._sxTstamp&&A.push(this._sxTstamp.getStringIndented()),this._sxTeardrops&&A.push(this._sxTeardrops.getStringIndented()),A.push(")"),A.join(`
|
|
5826
|
-
`)}};NA.register(bDA);var xDA=class kwe extends NA{static token="kicad_pcb";token="kicad_pcb";_sxVersion;_sxGenerator;_sxGeneratorVersion;_sxGeneral;_sxPaper;_sxTitleBlock;_sxLayers;_sxSetup;_properties=[];_nets=[];_footprints=[];_images=[];_segments=[];_grLines=[];_grTexts=[];_grPolys=[];_grRects=[];_vias=[];_zones=[];_otherChildren=[];constructor(A={}){super(),A.version!==void 0&&(this.version=A.version),A.generator!==void 0&&(this.generator=A.generator),A.generatorVersion!==void 0&&(this.generatorVersion=A.generatorVersion),A.general!==void 0&&(this.general=A.general),A.paper!==void 0&&(this.paper=A.paper),A.titleBlock!==void 0&&(this.titleBlock=A.titleBlock),A.layers!==void 0&&(this.layers=A.layers),A.setup!==void 0&&(this.setup=A.setup),A.properties!==void 0&&(this.properties=A.properties),A.nets!==void 0&&(this.nets=A.nets),A.footprints!==void 0&&(this.footprints=A.footprints),A.images!==void 0&&(this.images=A.images),A.segments!==void 0&&(this.segments=A.segments),A.graphicLines!==void 0&&(this.graphicLines=A.graphicLines),A.graphicTexts!==void 0&&(this.graphicTexts=A.graphicTexts),A.graphicPolys!==void 0&&(this.graphicPolys=A.graphicPolys),A.graphicRects!==void 0&&(this.graphicRects=A.graphicRects),A.vias!==void 0&&(this.vias=A.vias),A.zones!==void 0&&(this.zones=A.zones),A.otherChildren!==void 0&&(this.otherChildren=A.otherChildren)}static fromSexprPrimitives(A){const e=new kwe;for(const i of A){if(!Array.isArray(i)||i.length===0)throw new Error(`kicad_pcb encountered unsupported primitive child: ${JSON.stringify(i)}`);const n=NA.parsePrimitiveSexpr(i,{parentToken:this.token});if(!(n instanceof NA))throw new Error(`kicad_pcb expected SxClass child, received ${JSON.stringify(i)}`);e.consumeChild(n)}return e}consumeChild(A){if(A instanceof mDA){this._sxVersion=A;return}if(A instanceof wDA){this._sxGenerator=A;return}if(A instanceof DDA){this._sxGeneratorVersion=A;return}if(A instanceof fDA){this._sxGeneral=A;return}if(A instanceof Tj){this._sxPaper=A;return}if(A instanceof jCe){this._sxTitleBlock=A;return}if(A instanceof yDA){this._sxLayers=A;return}if(A instanceof pDA){this._sxSetup=A;return}if(A instanceof G1){this._properties.push(A);return}if(A instanceof sz){this._nets.push(A);return}if(A instanceof uwA){this._footprints.push(A);return}if(A instanceof XCe){this._images.push(A);return}if(A instanceof FwA){this._segments.push(A);return}if(A instanceof ez){this._grLines.push(A);return}if(A instanceof tz){this._grTexts.push(A);return}if(A instanceof Khe){this._grPolys.push(A);return}if(A instanceof Yhe){this._grRects.push(A);return}if(A instanceof bDA){this._vias.push(A);return}if(A instanceof Vhe){this._zones.push(A);return}this._otherChildren.push(A)}get version(){return this._sxVersion?.value}set version(A){this._sxVersion=A===void 0?void 0:new mDA(A)}get generator(){return this._sxGenerator?.value}set generator(A){this._sxGenerator=A===void 0?void 0:new wDA(A)}get generatorVersion(){return this._sxGeneratorVersion?.value}set generatorVersion(A){this._sxGeneratorVersion=A===void 0?void 0:new DDA(A)}get general(){return this._sxGeneral}set general(A){this._sxGeneral=A}get paper(){return this._sxPaper}set paper(A){this._sxPaper=A}get titleBlock(){return this._sxTitleBlock}set titleBlock(A){this._sxTitleBlock=A}get layers(){return this._sxLayers}set layers(A){this._sxLayers=A}get setup(){return this._sxSetup}set setup(A){this._sxSetup=A}get properties(){return[...this._properties]}set properties(A){this._properties=[...A]}get nets(){return[...this._nets]}set nets(A){this._nets=[...A]}get footprints(){return[...this._footprints]}set footprints(A){this._footprints=[...A]}get images(){return[...this._images]}set images(A){this._images=[...A]}get segments(){return[...this._segments]}set segments(A){this._segments=[...A]}get graphicLines(){return[...this._grLines]}set graphicLines(A){this._grLines=[...A]}get graphicTexts(){return[...this._grTexts]}set graphicTexts(A){this._grTexts=[...A]}get graphicPolys(){return[...this._grPolys]}set graphicPolys(A){this._grPolys=[...A]}get graphicRects(){return[...this._grRects]}set graphicRects(A){this._grRects=[...A]}get vias(){return[...this._vias]}set vias(A){this._vias=[...A]}get zones(){return[...this._zones]}set zones(A){this._zones=[...A]}get otherChildren(){return[...this._otherChildren]}set otherChildren(A){this._otherChildren=[...A]}getChildren(){const A=[];return this._sxVersion&&A.push(this._sxVersion),this._sxGenerator&&A.push(this._sxGenerator),this._sxGeneratorVersion&&A.push(this._sxGeneratorVersion),this._sxGeneral&&A.push(this._sxGeneral),this._sxPaper&&A.push(this._sxPaper),this._sxTitleBlock&&A.push(this._sxTitleBlock),this._sxLayers&&A.push(this._sxLayers),this._sxSetup&&A.push(this._sxSetup),A.push(...this._properties),A.push(...this._nets),A.push(...this._footprints),A.push(...this._images),A.push(...this._segments),A.push(...this._grLines),A.push(...this._grTexts),A.push(...this._grPolys),A.push(...this._grRects),A.push(...this._vias),A.push(...this._zones),A.push(...this._otherChildren),A}};NA.register(xDA);var Aue=t=>NA.parse(t),vE=class{MAX_ITERATIONS=1e3;iteration=0;finished=!1;input;ctx;constructor(t,A){this.input=t,this.ctx=A}step(){if(this.iteration++,this.iteration>this.MAX_ITERATIONS)throw new Error("Max iterations reached");this._step()}_step(){throw new Error("Not implemented")}runUntilFinished(){for(;!this.finished;)this.step()}getOutput(){throw new Error("Not implemented")}},noi=class extends vE{_step(){const{kicadSch:t,schematicPaperSize:A}=this.ctx;if(!t)throw new Error("KicadSch instance not initialized in context");t.version=20250114;const e=new Tj;e.size=A?.name??"A4",t.paper=e,t.uuid=new Li(crypto.randomUUID()),this.finished=!0}getOutput(){return this.ctx.kicadSch}};function KG(t,A){if(t.manufacturer_part_number)return _DA(t.manufacturer_part_number);const e=ooi(t.ftype),i=A?.footprinter_string;return _DA(i?`${e}_${i}`:e)}function ooi(t){if(!t)return"component";let A=t.replace(/^simple_/,"");return A||"component"}function _DA(t){return t.replace(/[\\\/:\s]+/g,"_").replace(/_+/g,"_").replace(/^_|_$/g,"").trim()||"component"}function eue(t){return t?t.match(/^([A-Za-z]+)/)?.[1]?.toUpperCase()??"U":"U"}var tue={simple_resistor:"R",simple_capacitor:"C",simple_inductor:"L",simple_diode:"D",simple_led:"D",simple_chip:"U",simple_transistor:"Q",simple_mosfet:"Q",simple_fuse:"F",simple_switch:"SW",simple_push_button:"SW",simple_potentiometer:"RV",simple_crystal:"Y",simple_resonator:"Y",simple_pin_header:"J",simple_pinout:"J",simple_test_point:"TP",simple_battery:"BT"},soi=/^[A-Za-z]+\d+$/;function iue(t){return t?soi.test(t.trim()):!1}function rz(t){const A=t?.ftype;if(A&&tue[A])return tue[A];const e=t?.name;return iue(e),eue(e)}function roi(t){const A=t?.name;return iue(A)?A.trim():`${rz(t)}?`}function nue(t){return t in yQ}function oue(t,A,e,i){if(i)return`Custom:${i}`;if(t.type!=="source_component")return A.symbol_name?nue(A.symbol_name)?`Device:${A.symbol_name}`:`Custom:${A.symbol_name}`:"Device:Component";if(A.symbol_name)return nue(A.symbol_name)?`Device:${A.symbol_name}`:`Custom:${A.symbol_name}`;const n=KG(t,e);return`Device:${rz(t)}_${n}`}var aoi=class extends vE{processedSymbolNames=new Set;_step(){const{kicadSch:t,db:A}=this.ctx,e=new fQe,i=[];this.processedSymbolNames=new Set;const n=A.schematic_component.list();for(const s of n){const r=this.createLibrarySymbolForComponent(s);r&&i.push(r)}const o=A.schematic_net_label?.list?.()||[];for(const s of o)if(s.symbol_name){const r=s.source_net_id?A.source_net.get(s.source_net_id)?.is_power:!1,a=s.source_net_id?A.source_net.get(s.source_net_id)?.is_ground:!1;if(r||a){const c=this.createLibrarySymbolForNetLabel({netLabel:s,isPower:r??!1,isGround:a??!1});c&&i.push(c)}}e.symbols=i,t&&(t.libSymbols=e),this.finished=!0}createLibrarySymbolForComponent(t){const{db:A}=this.ctx,e=t.source_component_id?A.source_component.get(t.source_component_id):null;if(!e)return null;const i=A.cad_component?.list()?.find(c=>c.source_component_id===e.source_component_id);let n=t.schematic_symbol_id;if(!n){const c=this.ctx.circuitJson.find(I=>(I.type==="schematic_line"||I.type==="schematic_circle"||I.type==="schematic_path")&&I.schematic_component_id===t.schematic_component_id&&I.schematic_symbol_id);c&&(n=c.schematic_symbol_id)}if(n)return this.createLibrarySymbolFromSchematicSymbol(t,e,i,n);const o=t.symbol_name||(e.ftype==="simple_chip"?`generic_chip_${t.source_component_id}`:null);if(!o)return null;const s=this.getSymbolData(o,t);if(!s)return null;const r=oue(e,t,i),a=e.ftype==="simple_chip",g=KG(e,i);return this.createLibrarySymbol({libId:r,symbolData:s,isChip:a,schematicComponent:t,description:this.getDescription(e),keywords:this.getKeywords(e),fpFilters:this.getFpFilters(e),footprintRef:g?`tscircuit:${g}`:"",referencePrefix:rz(e)})}createLibrarySymbolFromSchematicSymbol(t,A,e,i){const{db:n}=this.ctx,o=this.ctx.circuitJson.find(c=>c.type==="schematic_symbol"&&c.schematic_symbol_id===i);if(!o)return null;let s;if(o.name)s=o.name;else{const c=KG(A,e);c?s=c:s=`custom_${A.ftype||"component"}_${i}`}const r=`Custom:${s}`;if(this.processedSymbolNames.has(r))return null;this.processedSymbolNames.add(r);const a=this.buildSymbolDataFromSchematicPrimitives(i,o,t.schematic_component_id),g=KG(A,e);return this.createLibrarySymbol({libId:r,symbolData:a,isChip:!1,schematicComponent:t,description:this.getDescription(A),keywords:this.getKeywords(A),fpFilters:this.getFpFilters(A),footprintRef:g?`tscircuit:${g}`:"",referencePrefix:rz(A)})}buildSymbolDataFromSchematicPrimitives(t,A,e){const{circuitJson:i}=this.ctx,n=i.filter(c=>c.type==="schematic_circle"&&c.schematic_symbol_id===t),o=i.filter(c=>c.type==="schematic_line"&&c.schematic_symbol_id===t),s=i.filter(c=>c.type==="schematic_path"&&c.schematic_symbol_id===t);let r=i.filter(c=>c.type==="schematic_port"&&c.schematic_symbol_id===t);r.length===0&&e&&(r=i.filter(c=>c.type==="schematic_port"&&c.schematic_component_id===e&&c.display_pin_label));const a=[];for(const c of n)a.push({type:"circle",x:c.center?.x??0,y:c.center?.y??0,radius:c.radius??.5,fill:c.is_filled??!1,fillColor:c.fill_color});for(const c of o)a.push({type:"path",points:[{x:c.x1??0,y:c.y1??0},{x:c.x2??0,y:c.y2??0}]});for(const c of s)c.points&&c.points.length>0&&a.push({type:"path",points:c.points,fill:c.is_filled??!1,fillColor:c.fill_color});const g=r.map((c,I)=>({x:c.center?.x??0,y:c.center?.y??0,labels:[c.display_pin_label||`${c.pin_number||I+1}`],pinNumber:c.pin_number||I+1,facingDirection:c.facing_direction}));return g.sort((c,I)=>c.pinNumber-I.pinNumber),{center:A.center||{x:0,y:0},size:A.size||{width:1,height:1},primitives:a,ports:g}}createLibrarySymbolForNetLabel({netLabel:t,isPower:A,isGround:e}){const i=t.symbol_name;if(!i)return null;const n=yQ[i];if(!n)return null;const o=`Custom:${i}`;return this.createLibrarySymbol({libId:o,symbolData:n,isChip:!1,schematicComponent:void 0,description:A?"Power net label":e?"Ground net label":"Net symbol",keywords:A?"power net":e?"ground net":"net",fpFilters:"",referencePrefix:o.split(":")[1]?.[0]||"U"})}getSymbolData(t,A){return t.startsWith("generic_chip_")?this.createGenericChipSymbolData(A,this.ctx.db):yQ[t]||null}createGenericChipSymbolData(t,A){const e=A.schematic_port.list().filter(r=>r.schematic_component_id===t.schematic_component_id).sort((r,a)=>(r.pin_number||0)-(a.pin_number||0)),i=t.size?.width||1.5,n=t.size?.height||1,o={type:"path",points:[{x:-i/2,y:-n/2},{x:i/2,y:-n/2},{x:i/2,y:n/2},{x:-i/2,y:n/2},{x:-i/2,y:-n/2}]},s=e.map(r=>{const a=r.center.x-t.center.x,g=r.center.y-t.center.y;return{x:a,y:g,labels:[r.display_pin_label||`${r.pin_number||1}`],pinNumber:r.pin_number||1}});return{center:{x:0,y:0},primitives:[o],ports:s,size:{width:i,height:n}}}createLibrarySymbol({libId:t,symbolData:A,isChip:e,schematicComponent:i,description:n,keywords:o,fpFilters:s,footprintRef:r="",referencePrefix:a}){const g=new F1({libraryId:t,excludeFromSim:!1,inBom:!0,onBoard:!0}),c=new iQe;c.hide=!e,g._sxPinNumbers=c;const I=new nQe;I.offset=e?1.27:0,g._sxPinNames=I,this.addSymbolProperties({symbol:g,libId:t,description:n,keywords:o,fpFilters:s,footprintRef:r,referencePrefix:a});const l=this.createDrawingSubsymbol({libId:t,symbolData:A,isChip:e});g.subSymbols.push(l);const B=this.createPinSubsymbol({libId:t,symbolData:A,isChip:e,schematicComponent:i});return g.subSymbols.push(B),g._sxEmbeddedFonts=new Pj(!1),g}addSymbolProperties({symbol:t,libId:A,description:e,keywords:i,fpFilters:n,footprintRef:o="",referencePrefix:s}){const r=s||A.split(":")[1]?.[0]||"U",a=[{key:"Reference",value:r,id:0,at:[2.032,0,90],hide:!1},{key:"Value",value:r,id:1,at:[0,0,90],hide:!1},{key:"Footprint",value:o,id:2,at:[-1.778,0,90],hide:!0},{key:"Datasheet",value:"~",id:3,at:[0,0,0],hide:!0},{key:"Description",value:e,id:4,at:[0,0,0],hide:!0},{key:"ki_keywords",value:i,id:5,at:[0,0,0],hide:!0},{key:"ki_fp_filters",value:n,id:6,at:[0,0,0],hide:!0}];for(const g of a)t.properties.push(new nm({key:g.key,value:g.value,id:g.id,at:g.at,effects:this.createTextEffects(1.27,g.hide)}))}getDescription(t){return t?.ftype==="simple_resistor"?"Resistor":t?.ftype==="simple_capacitor"?"Capacitor":t?.ftype==="simple_chip"?"Integrated Circuit":"Component"}getKeywords(t){return t?.ftype==="simple_resistor"?"R res resistor":t?.ftype==="simple_capacitor"?"C cap capacitor":t?.ftype==="simple_chip"?"U IC chip":""}getFpFilters(t){return t?.ftype==="simple_resistor"?"R_*":t?.ftype==="simple_capacitor"?"C_*":(t?.ftype==="simple_chip","*")}createDrawingSubsymbol({libId:t,symbolData:A,isChip:e}){const i=new F1({libraryId:`${t.split(":")[1]}_0_1`}),n=this.ctx.c2kMatSch?.a||15;for(const o of A.primitives||[])if(o.type==="path"&&o.points){const s=e||o.fill?"background":"none",r=this.createPolylineFromPoints({points:o.points,scale:n,center:A.center,fillType:s});i.polylines.push(r)}else if(o.type==="circle"){const s=this.createCircleFromPrimitive({primitive:o,scale:n,center:A.center});i.circles.push(s)}return i}createPolylineFromPoints({points:t,scale:A,center:e,fillType:i}){const n=new AQe,o=e?.x??0,s=e?.y??0,r=dh(A,A),a=t.map(l=>{const B=Pt(r,{x:l.x-o,y:l.y-s});return new HQ(B.x,B.y)}),g=new TC(a);n.points=g;const c=new WD;c.width=.254,c.type="default",n.stroke=c;const I=new gQe;return I.type=i,n.fill=I,n}createCircleFromPrimitive({primitive:t,scale:A,center:e}){const i=new lQe,n=e?.x??0,o=e?.y??0,s=dh(A,A),r=Pt(s,{x:t.x-n,y:t.y-o}),a=i;a._sxCenter=new rQe(r.x,r.y),a._sxRadius=new aQe(t.radius*A);const g=new WD;g.width=.254,g.type="default",a._sxStroke=g;const c=new cQe;return c.type=t.fill?"background":"none",a._sxFill=c,i}createPinSubsymbol({libId:t,symbolData:A,isChip:e,schematicComponent:i}){const n=new F1({libraryId:`${t.split(":")[1]}_1_1`});for(let o=0;o<(A.ports?.length||0);o++){const s=A.ports[o],r=new Wj;r.pinElectricalType="passive",r.pinGraphicStyle="line";const{x:a,y:g,angle:c}=this.calculatePinPosition(s,A.center,A.size,e,o,i);r.at=[a,g,c],r.length=e?6:1.27;const I=new im;I.size={height:1.27,width:1.27};const l=new tm({font:I}),B=s.labels?.[0]||"~";r._sxName=new amA({value:B,effects:l});const C=new im;C.size={height:1.27,width:1.27};const Q=new tm({font:C}),h=s.pinNumber?.toString()||`${o+1}`;r._sxNumber=new CQe({value:h,effects:Q}),n.pins.push(r)}return n}calculatePinPosition(t,A,e,i,n,o){const s=this.ctx.c2kMatSch?.a||15;let r=t.x??0,a=t.y??0,g=!1;if(n!==void 0&&o){const d=this.ctx.db.schematic_port.list().filter(p=>p.schematic_component_id===o.schematic_component_id).sort((p,m)=>(p.pin_number||0)-(m.pin_number||0));if(d[n]){const p=d[n];r=p.center.x-o.center.x,a=p.center.y-o.center.y,g=!0}}let c,I;if(g)c=r,I=a;else{const d=A?.x??0,p=A?.y??0;c=r-d,I=a-p}const l=dh(s,s),B=Pt(l,{x:c,y:I});let C;if(i&&e){const d=e.width/2,p=e.height/2,m=Math.abs(c)/d,w=Math.abs(I)/p;C=m>w}else C=Math.abs(c)>Math.abs(I);let Q=B.x,h=B.y;const E=6;if(i&&e){const d=e.width/2*s,p=e.height/2*s;C?(Q=c>0?d:-d,h=I*s):(Q=c*s,h=I>0?p:-p)}let u=0;return C?c>0?i?(u=180,Q=Q+E):u=0:i?(u=0,Q=Q-E):u=180:I>0?i?(u=270,h=h+E):u=90:i?(u=90,h=h-E):u=270,{x:Q,y:h,angle:u}}createTextEffects(t,A){const e=new im;return e.size={height:t,width:t},new tm({font:e,hiddenText:A})}getOutput(){if(!this.ctx.kicadSch)throw new Error("kicadSch is not initialized");return this.ctx.kicadSch}},goi=class extends vE{_step(){const{kicadSch:t,db:A}=this.ctx,e=A.schematic_component.list();if(e.length===0){this.finished=!0;return}const i=[];for(const n of e){const o=n.source_component_id?A.source_component.get(n.source_component_id):null;if(!o||!this.ctx.c2kMatSch)continue;const{x:s,y:r}=Pt(this.ctx.c2kMatSch,{x:n.center.x,y:n.center.y}),a=crypto.randomUUID(),g=new F1({at:[s,r,0],unit:1,excludeFromSim:!1,inBom:!0,onBoard:!0,dnp:!1,uuid:a,fieldsAutoplaced:!0}),c=A.cad_component?.list()?.find(Y=>Y.source_component_id===o.source_component_id);let I,l=n.schematic_symbol_id;if(!l){const Y=this.ctx.circuitJson.find(H=>(H.type==="schematic_line"||H.type==="schematic_circle"||H.type==="schematic_path")&&H.schematic_component_id===n.schematic_component_id&&H.schematic_symbol_id);Y&&(l=Y.schematic_symbol_id)}if(l){const Y=this.ctx.circuitJson.find(H=>H.type==="schematic_symbol"&&H.schematic_symbol_id===l);if(Y?.name)I=Y.name;else{const H=KG(o,c);H?I=H:I=`custom_${o.ftype||"component"}_${l}`}}const B=oue(o,n,c,I),C=new omA(B);g._sxLibId=C;const{reference:Q,value:h,description:E}=this.getComponentMetadata(o),{refTextPos:u,valTextPos:d}=this.getTextPositions(n,{x:s,y:r}),p=new nm({key:"Reference",value:Q,id:0,at:[u.x,u.y,0],effects:this.createTextEffects(1.27,!1)}),m=o.ftype==="simple_chip",w=new nm({key:"Value",value:h,id:1,at:[d.x,d.y,0],effects:this.createTextEffects(1.27,m)}),D=new nm({key:"Footprint",value:"",id:2,at:[s-1.778,r,90],effects:this.createTextEffects(1.27,!0)}),b=new nm({key:"Datasheet",value:"~",id:3,at:[s,r,0],effects:this.createTextEffects(1.27,!0)}),k=new nm({key:"Description",value:E,id:4,at:[s,r,0],effects:this.createTextEffects(1.27,!0)});g.properties.push(p,w,D,b,k);let x=A.schematic_port.list().filter(Y=>Y.schematic_component_id===n.schematic_component_id);if(l){const Y=x.filter(H=>H.display_pin_label);Y.length>0&&(x=Y)}x.sort((Y,H)=>(Y.pin_number||0)-(H.pin_number||0));for(let Y=0;Y<x.length;Y++){const H=x[Y];if(!H)continue;const O=new Wj;O.numberString=`${H.pin_number||Y+1}`,O.uuid=crypto.randomUUID(),g.pins.push(O)}const N=new gmA,M=new ImA(""),L=new lmA(`/${t?.uuid?.value||""}`);L.reference=Q,L.unit=1,M.paths.push(L),N.projects.push(M),g._sxInstances=N,i.push(g)}t&&(t.symbols=i),this.finished=!0}getTextPositions(t,A){const i=(this.ctx.db.schematic_text?.list?.()?.filter(B=>B.schematic_component_id===t.schematic_component_id)||[]).find(B=>B.text&&B.text.length>0);if(i&&this.ctx.c2kMatSch){const B=Pt(this.ctx.c2kMatSch,{x:i.position.x,y:i.position.y}),C={x:A.x,y:A.y+6};return{refTextPos:B,valTextPos:C}}const n=t.symbol_name,o=yQ[n];if(!o)return{refTextPos:{x:A.x,y:A.y-6},valTextPos:{x:A.x,y:A.y+6}};let s=null,r=null;for(const B of o.primitives)B.type==="text"&&(B.text==="{REF}"?s=B:B.text==="{VAL}"&&(r=B));const a=o.center||{x:0,y:0},c=n.includes("_down")||n.includes("_up")?.15:0,I=s&&this.ctx.c2kMatSch?Pt(this.ctx.c2kMatSch,{x:t.center.x+(s.x-a.x)+c,y:t.center.y+(s.y-a.y)}):{x:A.x,y:A.y-6},l=r&&this.ctx.c2kMatSch?Pt(this.ctx.c2kMatSch,{x:t.center.x+(r.x-a.x)+c,y:t.center.y+(r.y-a.y)}):{x:A.x,y:A.y+6};return{refTextPos:I,valTextPos:l}}getComponentMetadata(t){const A=t.name||"?",e=roi(t);return t.ftype==="simple_resistor"?{reference:e,value:t.display_resistance||"R",description:"Resistor"}:t.ftype==="simple_capacitor"?{reference:e,value:t.display_capacitance||"C",description:"Capacitor"}:t.ftype==="simple_inductor"?{reference:e,value:t.display_inductance||"L",description:"Inductor"}:t.ftype==="simple_diode"?{reference:e,value:"D",description:"Diode"}:t.ftype==="simple_chip"?{reference:e,value:A,description:"Integrated Circuit"}:t.ftype==="simple_led"?{reference:e,value:t.manufacturer_part_number||"",description:"LED"}:t.ftype==="simple_switch"?{reference:e,value:t.manufacturer_part_number||"",description:"Switch"}:{reference:e,value:A,description:"Component"}}createTextEffects(t,A=!1,e){const i=new im;i.size={height:t,width:t};const n=e?new zJ({horizontal:e}):void 0;return new tm({font:i,hiddenText:A,justify:n})}getOutput(){if(!this.ctx.kicadSch)throw new Error("kicadSch is not initialized");return this.ctx.kicadSch}},coi=class extends vE{_step(){const{kicadSch:t,db:A}=this.ctx,e=A.schematic_net_label?.list?.()||[];if(e.length===0){this.finished=!0;return}if(!this.ctx.c2kMatSch){this.finished=!0;return}const i=[],n=[];for(const o of e){const s=o.text||"",r=o.symbol_name;if(r){const a=this.createSymbolFromNetLabel(o,s,r);a&&i.push(a)}else{const a=this.createGlobalLabel(o,s);a&&n.push(a)}}if(t&&i.length>0){const o=t.symbols||[];t.symbols=[...o,...i]}t&&n.length>0&&(t.globalLabels=[...t.globalLabels||[],...n]),this.finished=!0}createSymbolFromNetLabel(t,A,e){if(!this.ctx.c2kMatSch)return null;const{x:i,y:n}=Pt(this.ctx.c2kMatSch,{x:t.anchor_position?.x??t.center?.x??0,y:t.anchor_position?.y??t.center?.y??0}),o=crypto.randomUUID(),s=new F1({at:[i,n,0],unit:1,excludeFromSim:!1,inBom:!0,onBoard:!0,dnp:!1,uuid:o,fieldsAutoplaced:!0}),r=`Custom:${e}`,a=new omA(r);s._sxLibId=a;const g=e.includes("_up")||e.toLowerCase().includes("vcc"),c=g?-4:4,I=g?-6:6,l=new nm({key:"Reference",value:A,id:0,at:[i,n+c,0],effects:this.createTextEffects(1.27,!1)}),B=new nm({key:"Value",value:A,id:1,at:[i,n+I,0],effects:this.createTextEffects(1.27,!0)}),C=new nm({key:"Footprint",value:"",id:2,at:[i-1.778,n,90],effects:this.createTextEffects(1.27,!0)}),Q=new nm({key:"Datasheet",value:"~",id:3,at:[i,n,0],effects:this.createTextEffects(1.27,!0)}),h=new nm({key:"Description",value:`Power/Net symbol: ${A}`,id:4,at:[i,n,0],effects:this.createTextEffects(1.27,!0)});s.properties.push(l,B,C,Q,h);const E=new Wj;E.numberString="1",E.uuid=crypto.randomUUID(),s.pins.push(E);const{kicadSch:u}=this.ctx,d=new gmA,p=new ImA(""),m=new lmA(`/${u?.uuid?.value||""}`);return m.reference=A,m.unit=1,p.paths.push(m),d.projects.push(p),s._sxInstances=d,s}createGlobalLabel(t,A){if(!this.ctx.c2kMatSch||!this.ctx.kicadSch)return null;const{x:e,y:i}=Pt(this.ctx.c2kMatSch,{x:t.anchor_position?.x??t.center?.x??0,y:t.anchor_position?.y??t.center?.y??0}),n=t.anchor_side||"left",s={left:0,right:180,top:270,bottom:90}[n]||0,a={left:{horizontal:"left"},right:{horizontal:"right"},top:{vertical:"top"},bottom:{vertical:"bottom"}}[n]||{},g=this.createTextEffects(1.27,!1);return Object.keys(a).length>0&&(g.justify=new zJ(a)),new kQe({value:A,at:[e,i,s],effects:g,uuid:crypto.randomUUID(),fieldsAutoplaced:!0})}createTextEffects(t,A=!1){const e=new im;return e.size={height:t,width:t},new tm({font:e,hiddenText:A})}getOutput(){if(!this.ctx.kicadSch)throw new Error("kicadSch is not initialized");return this.ctx.kicadSch}},Ioi=class extends vE{_step(){const{kicadSch:t,db:A}=this.ctx;if(!t)throw new Error("KicadSch instance not initialized in context");const e=A.schematic_trace.list();if(e.length===0){this.finished=!0;return}const i=[],n=[];for(const o of e){for(const s of o.edges){const r=this.createWireFromEdge(s);i.push(r)}for(const s of o.junctions){const r=this.createJunction(s);n.push(r)}}t.wires=i,t.junctions=n,this.finished=!0}createWireFromEdge(t){const A=new mQe;if(!this.ctx.c2kMatSch)throw new Error("Schematic transformation matrix not initialized in context");const e=Pt(this.ctx.c2kMatSch,{x:t.from.x,y:t.from.y}),i=Pt(this.ctx.c2kMatSch,{x:t.to.x,y:t.to.y}),n=e.x,o=e.y,s=i.x,r=i.y,a=new TC([new HQ(n,o),new HQ(s,r)]);A.points=a;const g=new WD;return g.width=0,g.type="default",A.stroke=g,A.uuid=crypto.randomUUID(),A}createJunction(t){if(!this.ctx.c2kMatSch)throw new Error("Schematic transformation matrix not initialized in context");const{x:A,y:e}=Pt(this.ctx.c2kMatSch,{x:t.x,y:t.y}),i=new wQe({at:[A,e],diameter:0});return i.uuid=crypto.randomUUID(),i}getOutput(){return this.ctx.kicadSch}},loi=class extends vE{_step(){const{kicadSch:t}=this.ctx;if(!t)throw new Error("KicadSch instance not initialized in context");const A=new hmA,e=new RQe;e.value="/";const i=new MQe("1");e.pages=[i],A.paths=[e],t.sheetInstances=A,t.embeddedFonts=new Pj(!1),this.finished=!0}getOutput(){return this.ctx.kicadSch}};function Boi(t){const A=t.schematic_component.list(),e=t.schematic_trace.list();let i=1/0,n=1/0,o=-1/0,s=-1/0;for(const g of A){const c=g.size?.width??0,I=g.size?.height??0;i=Math.min(i,g.center.x-c/2),n=Math.min(n,g.center.y-I/2),o=Math.max(o,g.center.x+c/2),s=Math.max(s,g.center.y+I/2)}for(const g of e)for(const c of g.edges)i=Math.min(i,c.from.x,c.to.x),n=Math.min(n,c.from.y,c.to.y),o=Math.max(o,c.from.x,c.to.x),s=Math.max(s,c.from.y,c.to.y);i===1/0&&(i=0,n=0,o=0,s=0);const r=(i+o)/2,a=(n+s)/2;return{center:{x:r,y:a},bounds:{minX:i,minY:n,maxX:o,maxY:s}}}var az=[{name:"A4",width:297,height:210},{name:"A3",width:420,height:297},{name:"A2",width:594,height:420},{name:"A1",width:841,height:594},{name:"A0",width:1189,height:841}];function Coi(t,A,e=20){const i=t+2*e,n=A+2*e;for(let o=0;o<az.length;o++){const s=az[o];if(i<=s.width&&n<=s.height)return s}return az[az.length-1]}var sue=class{ctx;pipeline;currentStageIndex=0;finished=!1;get currentStage(){return this.pipeline[this.currentStageIndex]}constructor(t){const e=_a(t),{center:i,bounds:n}=Boi(e),o=(n.maxX-n.minX)*15,s=(n.maxY-n.minY)*15,r=Coi(o,s),a=r.width/2,g=r.height/2;this.ctx={db:e,circuitJson:t,kicadSch:new umA({generator:"circuit-json-to-kicad",generatorVersion:"0.0.1"}),schematicPaperSize:r,c2kMatSch:iB(Qr(a,g),dh(15,-15),Qr(-i.x,-i.y))},this.pipeline=[new noi(t,this.ctx),new aoi(t,this.ctx),new goi(t,this.ctx),new coi(t,this.ctx),new Ioi(t,this.ctx),new loi(t,this.ctx)]}step(){if(!this.currentStage){this.finished=!0;return}this.currentStage.step(),this.currentStage.finished&&this.currentStageIndex++}runUntilFinished(){for(;!this.finished;)this.step()}getOutput(){return this.ctx.kicadSch}getOutputString(){return this.ctx.kicadSch.getString()}},Qoi=class extends vE{_step(){const{kicadPcb:t,db:A}=this.ctx;if(!t)throw new Error("KicadPcb instance not initialized in context");const i=A.pcb_board?.list()?.[0]?.num_layers??2;this.ctx.numLayers=i,t.version=20241229;const n=new Tj;n.size="A4",t.paper=n;const o=new fDA;o.thickness=1.6,t.general=o;const s=new pDA;s.padToMaskClearance=0,t.setup=s;const r=new yDA,a=[new Rl({index:0,name:"F.Cu",type:"signal"})];for(let g=1;g<i-1;g++)a.push(new Rl({index:g,name:`In${g}.Cu`,type:"signal"}));a.push(new Rl({index:31,name:"B.Cu",type:"signal"})),a.push(new Rl({index:32,name:"B.Adhes",type:"user"}),new Rl({index:33,name:"F.Adhes",type:"user"}),new Rl({index:34,name:"B.Paste",type:"user"}),new Rl({index:35,name:"F.Paste",type:"user"}),new Rl({index:36,name:"B.SilkS",type:"user"}),new Rl({index:37,name:"F.SilkS",type:"user"}),new Rl({index:38,name:"B.Mask",type:"user"}),new Rl({index:39,name:"F.Mask",type:"user"}),new Rl({index:40,name:"Dwgs.User",type:"user"}),new Rl({index:41,name:"Cmts.User",type:"user"}),new Rl({index:42,name:"Eco1.User",type:"user"}),new Rl({index:43,name:"Eco2.User",type:"user"}),new Rl({index:44,name:"Edge.Cuts",type:"user"}),new Rl({index:45,name:"Margin",type:"user"}),new Rl({index:46,name:"B.CrtYd",type:"user"}),new Rl({index:47,name:"F.CrtYd",type:"user"}),new Rl({index:48,name:"B.Fab",type:"user"}),new Rl({index:49,name:"F.Fab",type:"user"})),r.definitions=a,t.layers=r,this.finished=!0}getOutput(){return this.ctx.kicadPcb}},hoi=class extends vE{_step(){const{kicadPcb:t}=this.ctx;if(!t)throw new Error("KicadPcb instance not initialized in context");this.ctx.pcbNetMap=new Map;const A=new Map,e=this.ctx.db.source_net?.list()??[];for(const r of e){const a=r.subcircuit_connectivity_map_key||r.source_net_id;if(!a)continue;const g=r.name||r.source_net_id||"",c=g&&g.trim().length>0?g:a;A.set(a,c)}const i=this.ctx.db.source_trace?.list()??[];for(const r of i){let a=r.subcircuit_connectivity_map_key;if(!a&&r.connected_source_net_ids?.length)for(const g of r.connected_source_net_ids){const c=this.ctx.db.source_net?.get(g);if(c?.subcircuit_connectivity_map_key&&c.subcircuit_connectivity_map_key.length>0){a=c.subcircuit_connectivity_map_key;break}}if(a&&!A.has(a)){const g=r.display_name||r.source_trace_id||"",c=g&&g.trim().length>0?g:a;A.set(a,c)}}const n=Array.from(A.entries()).sort((r,a)=>r[0].localeCompare(a[0])),o=[];o.push(new sz(0,""));let s=1;for(const[r,a]of n){const g=new sz(s,a);o.push(g);const c={id:s,name:a};this.ctx.pcbNetMap.set(r,c),s++}t.nets=o,this.finished=!0}getOutput(){return this.ctx.kicadPcb}};function Eoi(t){let A=0;for(let i=0;i<t.length;i++){const n=t.charCodeAt(i);A=(A<<5)-A+n,A=A&A}let e="";for(let i=0;i<4;i++){let n=A;for(let o=0;o<t.length;o++)n=(n<<5)-n+t.charCodeAt(o)+i*31,n=n&n;e+=Math.abs(n).toString(16).padStart(8,"0")}return e}function VD(t){const A=Eoi(t);return`${A.slice(0,8)}-${A.slice(8,12)}-${A.slice(12,16)}-${A.slice(16,20)}-${A.slice(20,32)}`}function uoi(t,A){const e=[];for(const i of t){const n=i.center.x-A.x,o=-(i.center.y-A.y),r={top:"F.SilkS",bottom:"B.SilkS"}[i.layer]||i.layer||"F.SilkS",a=new ewA({center:{x:n,y:o},end:{x:n+i.radius,y:o},layer:r,stroke:new WD,fill:!1});a.stroke&&(a.stroke.width=i.stroke_width||.05,a.stroke.type="default"),e.push(a)}return e}function doi(t,A){const e=[];for(const i of t){const n=i.center.x-A.x,o=-(i.center.y-A.y),r={top:"F.CrtYd",bottom:"B.CrtYd"}[i.layer]||"F.CrtYd",a=new ewA({center:{x:n,y:o},end:{x:n+i.radius,y:o},layer:r,stroke:new WD,fill:!1});a.stroke&&(a.stroke.width=.05,a.stroke.type="default"),e.push(a)}return e}function poi(t,A){const e=[];for(const i of t){const n=i.center.x-A.x,o=-(i.center.y-A.y),s=i.width/2,r=i.height/2,g={top:"F.Fab",bottom:"B.Fab"}[i.layer]||i.layer||"F.Fab",c=new zj({start:{x:n-s,y:o-r},end:{x:n+s,y:o+r},layer:g,stroke:new WD,fill:!1});c.stroke&&(c.stroke.width=i.stroke_width||.1,c.stroke.type="default"),e.push(c)}return e}function foi(t,A){const e=[];for(const i of t){const n=i.center.x-A.x,o=-(i.center.y-A.y),s=i.width/2,r=i.height/2,a="F.Fab",g=new zj({start:{x:n-s,y:o-r},end:{x:n+s,y:o+r},layer:a,stroke:new WD,fill:!1});g.stroke&&(g.stroke.width=i.stroke_width||.1,g.stroke.type="default"),e.push(g)}return e}function yoi(t,A){const e=[];for(const i of t){const n=i.center.x-A.x,o=-(i.center.y-A.y),s=i.width/2,r=i.height/2,g={top:"F.CrtYd",bottom:"B.CrtYd"}[i.layer]||"F.CrtYd",c=new zj({start:{x:n-s,y:o-r},end:{x:n+s,y:o+r},layer:g,stroke:new WD,fill:!1});c.stroke&&(c.stroke.width=.05,c.stroke.type="default"),e.push(c)}return e}function moi(t,A){const e=[];for(const i of t){if(!i.outline||i.outline.length<2)continue;const o={top:"F.CrtYd",bottom:"B.CrtYd"}[i.layer]||"F.CrtYd",s=i.outline.map(g=>{const c=g.x-A.x,I=-(g.y-A.y);return new HQ(c,I)}),r=new bhe;r.points=new TC(s),r.layer=o,r.fill=!1;const a=new WD;a.width=.05,a.type="default",r.stroke=a,e.push(r)}return e}function woi({textElement:t,componentCenter:A,componentRotation:e=0}){if(!t.text||!t.anchor_position)return null;const i=t.anchor_position.x-A.x,n=-(t.anchor_position.y-A.y),o=e!==0?Gm(e*Math.PI/180):Gu(),s=Pt(o,{x:i,y:n}),r={x:s.x,y:s.y},g={top:"F.SilkS",bottom:"B.SilkS"}[t.layer]||t.layer||"F.SilkS",c=(t.font_size||1)/1.5,I=new im;I.size={width:c,height:c};const l=new tm({font:I}),B=t.ccw_rotation||0;return new qmA({type:"user",text:t.text,position:{x:r.x,y:r.y,angle:B},layer:g,effects:l})}function Doi(t,A,e,i){const n=[];for(const o of t){const s=woi({textElement:o,componentCenter:A,componentRotation:e});s&&(i&&o.text===i&&(s.type="reference"),n.push(s))}return n}function Soi(t,A,e){const i=[];for(const n of t){const o=n.anchor_position.x-A.x,s=-(n.anchor_position.y-A.y),r=e!==0?Gm(e*Math.PI/180):Gu(),a=Pt(r,{x:o,y:s}),g=n.font_size||1,c=new im;c.size={width:g,height:g};const I=new tm({font:c}),l=new qmA({type:"user",text:n.text,position:{x:a.x,y:a.y,angle:0},layer:"F.Fab",effects:I});i.push(l)}return i}function boi(t,A){const e=[],i=t.model_step_url||t.model_wrl_url;if(!i)return e;const n=new QwA(i);if(t.position&&(n.offset={x:(t.position.x||0)-A.x,y:-((t.position.y||0)-A.y),z:t.position.z||0}),t.rotation&&(n.rotate={x:t.rotation.x||0,y:t.rotation.y||0,z:t.rotation.z||0}),t.model_unit_to_mm_scale_factor){const o=t.model_unit_to_mm_scale_factor;n.scale={x:o,y:o,z:o}}return e.push(n),e}function xoi({pcbPad:t,componentCenter:A,padNumber:e,componentRotation:i=0,netInfo:n,componentId:o}){let s,r;if("x"in t&&"y"in t)s=t.x,r=t.y;else if("points"in t&&Array.isArray(t.points)){const u=t.points;s=u.reduce((d,p)=>d+p.x,0)/u.length,r=u.reduce((d,p)=>d+p.y,0)/u.length}else throw new Error("Pad must have either x/y coordinates or points array");const a=iB(i!==0?Gm(i*Math.PI/180):{a:1,b:0,c:0,d:1,e:0,f:0},dh(1,-1),Qr(-A.x,-A.y)),g=Pt(a,{x:s,y:r}),I={top:"F.Cu",bottom:"B.Cu"}[t.layer]||"F.Cu";let l,B,C,Q;if(t.shape==="circle")l="circle",B=["radius"in t?t.radius*2:.5,"radius"in t?t.radius*2:.5];else if(t.shape==="polygon"&&"points"in t){const u=t.points,d=iB(dh(1,-1),Qr(-s,-r)),p=u.map(w=>{const D=Pt(d,{x:w.x,y:w.y});return new HQ(D.x,D.y)}),m=new YmA;m.contours=[new TC(p)],m.width=0,m.filled=!0,Q=new che,Q.addGraphic(m),l="custom",C=new WQe,C.anchor="circle",B=[.2,.2]}else l="rect",B=["width"in t?t.width:.5,"height"in t?t.height:.5];const h=`pad:${o}:${e}:${g.x},${g.y}`,E=new jj({number:String(e),padType:"smd",shape:l,at:[g.x,g.y,0],size:B,layers:[`${I}`,`${I==="F.Cu"?"F":"B"}.Paste`,`${I==="F.Cu"?"F":"B"}.Mask`],uuid:VD(h)});return C&&(E.options=C),Q&&(E.primitives=Q),n&&(E.net=new MmA(n.id,n.name)),E}function _oi(t,A,e,i,n,o){const s=[];let r=n;for(const a of t){const g=o(a.pcb_port_id),c=xoi({pcbPad:a,componentCenter:A,padNumber:r,componentRotation:e,netInfo:g,componentId:i});s.push(c),r++}return{pads:s,nextPadNumber:r}}function koi({platedHole:t,componentCenter:A,padNumber:e,componentRotation:i=0,netInfo:n,componentId:o}){if(!("x"in t&&"y"in t))return null;const s=t.x-A.x,r=-(t.y-A.y),a=i!==0?Gm(i*Math.PI/180):Gu(),g=Pt(a,{x:s,y:r});let c="circle",I,l,B=0;const C="hole_offset_x"in t||"hole_offset_y"in t;let Q;if(C){const u={x:t.hole_offset_x??0,y:t.hole_offset_y??0};(u.x!==0||u.y!==0)&&(Q=Pt(a,{x:-u.x,y:u.y}))}t.shape==="circle"?(c="circle",I=[t.outer_diameter,t.outer_diameter],l=new ZD({diameter:t.hole_diameter,offset:Q})):t.shape==="pill"||t.shape==="oval"?(c="oval",I=[t.outer_width,t.outer_height],l=new ZD({oval:!0,diameter:t.hole_width,width:t.hole_height,offset:Q})):t.shape==="pill_hole_with_rect_pad"?(c="rect",I=[t.rect_pad_width,t.rect_pad_height],l=new ZD({oval:!0,diameter:t.hole_width,width:t.hole_height,offset:Q})):t.shape==="circular_hole_with_rect_pad"?(c="rect",I=[t.rect_pad_width,t.rect_pad_height],l=new ZD({diameter:t.hole_diameter,offset:Q})):t.shape==="rotated_pill_hole_with_rect_pad"?(c="rect",I=[t.rect_pad_width,t.rect_pad_height],l=new ZD({oval:!0,diameter:t.hole_width,width:t.hole_height,offset:Q}),B=t.rect_ccw_rotation||0):(c="circle",I=[1.6,1.6],l=new ZD({diameter:.8,offset:Q}));const h=`thruhole:${o}:${e}:${g.x},${g.y}`,E=new jj({number:String(e),padType:"thru_hole",shape:c,at:[g.x,g.y,B],size:I,drill:l,layers:["*.Cu","*.Mask"],removeUnusedLayers:!1,uuid:VD(h)});return n&&(E.net=new MmA(n.id,n.name)),E}function Foi(t,A,e,i,n,o){const s=[];let r=n;for(const a of t){const g=o(a.pcb_port_id),c=koi({platedHole:a,componentCenter:A,padNumber:r,componentRotation:e,netInfo:g,componentId:i});c&&(s.push(c),r++)}return{pads:s,nextPadNumber:r}}function Goi({pcbHole:t,componentCenter:A,componentRotation:e=0}){if(!("x"in t&&"y"in t))return null;const i=t.x-A.x,n=-(t.y-A.y),o=e!==0?Gm(e*Math.PI/180):Gu(),s=Pt(o,{x:i,y:n});let r="circle",a,g;if(t.hole_shape==="circle"){r="circle";const c=t.hole_diameter;a=[c,c],g=new ZD({diameter:c})}else if(t.hole_shape==="oval"){r="oval";const c=t.hole_width,I=t.hole_height;a=[c,I],g=new ZD({oval:!0,diameter:c,width:I})}else{r="circle";const c="hole_diameter"in t?t.hole_diameter:1;a=[c,c],g=new ZD({diameter:c})}return new jj({number:"",padType:"np_thru_hole",shape:r,at:[s.x,s.y,0],size:a,drill:g,layers:["*.Cu","*.Mask"],removeUnusedLayers:!1,uuid:crypto.randomUUID()})}function Roi(t,A,e){const i=[];for(const n of t){const o=Goi({pcbHole:n,componentCenter:A,componentRotation:e});o&&i.push(o)}return i}var Moi=class extends vE{componentsProcessed=0;pcbComponents=[];getNetInfoForPcbPort(t){if(!t)return;const A=this.ctx.db.pcb_port?.get(t);if(!A)return;const e=A.source_port_id;if(!e)return;const i=this.ctx.db.source_port?.get(e);if(!i)return;const n=i.subcircuit_connectivity_map_key;if(n)return this.ctx.pcbNetMap?.get(n)}getCadComponentForPcbComponent(t){return(this.ctx.db.cad_component?.list()||[]).find(e=>e.pcb_component_id===t)}constructor(t,A){super(t,A),this.pcbComponents=this.ctx.db.pcb_component.list()}_step(){const{kicadPcb:t,c2kMatPcb:A}=this.ctx;if(!t)throw new Error("KicadPcb instance not initialized in context");if(!A)throw new Error("PCB transformation matrix not initialized in context");if(this.componentsProcessed>=this.pcbComponents.length){this.finished=!0;return}const e=this.pcbComponents[this.componentsProcessed],i=e.source_component_id?this.ctx.db.source_component.get(e.source_component_id):null,n=this.getCadComponentForPcbComponent(e.pcb_component_id),o=i?KG(i,n):"Unknown",s=Pt(A,{x:e.center.x,y:e.center.y}),r=`footprint:${e.pcb_component_id}:${s.x},${s.y}`,a=new uwA({libraryLink:`tscircuit:${o}`,layer:"F.Cu",at:[s.x,s.y,e.rotation||0],uuid:VD(r)}),g=a.fpTexts,c=this.ctx.db.pcb_silkscreen_text?.list().filter(H=>H.pcb_component_id===e.pcb_component_id)||[];g.push(...Doi(c,e.center,e.rotation||0,i?.name));const I=this.ctx.db.pcb_note_text?.list().filter(H=>H.pcb_component_id===e.pcb_component_id)||[];g.push(...Soi(I,e.center,e.rotation||0)),a.fpTexts=g;const l=a.fpPads,B=H=>this.getNetInfoForPcbPort(H),C=this.ctx.db.pcb_smtpad?.list().filter(H=>H.pcb_component_id===e.pcb_component_id)||[],{pads:Q,nextPadNumber:h}=_oi(C,e.center,e.rotation||0,e.pcb_component_id,1,B);l.push(...Q);const E=this.ctx.db.pcb_plated_hole?.list().filter(H=>H.pcb_component_id===e.pcb_component_id)||[],{pads:u}=Foi(E,e.center,e.rotation||0,e.pcb_component_id,h,B);l.push(...u);const d=this.ctx.db.pcb_hole?.list().filter(H=>H.subcircuit_id===e.subcircuit_id)||[],p=Roi(d,e.center,e.rotation||0);l.push(...p),a.fpPads=l;const m=this.ctx.db.pcb_silkscreen_circle?.list().filter(H=>H.pcb_component_id===e.pcb_component_id)||[],w=a.fpCircles??[];w.push(...uoi(m,e.center));const D=this.ctx.db.pcb_courtyard_circle?.list().filter(H=>H.pcb_component_id===e.pcb_component_id)||[];w.push(...doi(D,e.center)),a.fpCircles=w;const b=this.ctx.db.pcb_fabrication_note_rect?.list().filter(H=>H.pcb_component_id===e.pcb_component_id)||[],k=a.fpRects??[];k.push(...poi(b,e.center));const x=this.ctx.db.pcb_note_rect?.list().filter(H=>H.pcb_component_id===e.pcb_component_id)||[];k.push(...foi(x,e.center));const N=this.ctx.db.pcb_courtyard_rect?.list().filter(H=>H.pcb_component_id===e.pcb_component_id)||[];k.push(...yoi(N,e.center)),a.fpRects=k;const M=this.ctx.db.pcb_courtyard_outline?.list().filter(H=>H.pcb_component_id===e.pcb_component_id)||[],L=moi(M,e.center);if(L.length>0&&(a.fpPolys=L),n){const H=boi(n,e.center);H.length>0&&(a.models=H)}const Y=t.footprints;Y.push(a),t.footprints=Y,this.componentsProcessed++}getOutput(){return this.ctx.kicadPcb}},Noi={top:"F.Cu",bottom:"B.Cu",inner1:"In1.Cu",inner2:"In2.Cu",inner3:"In3.Cu",inner4:"In4.Cu",inner5:"In5.Cu",inner6:"In6.Cu"};function voi(t){return t&&(Noi[t]||t)||"F.Cu"}function Loi(t){const A=["F.Cu"];for(let e=1;e<t-1;e++)A.push(`In${e}.Cu`);return A.push("B.Cu"),A}var Uoi=class extends vE{tracesProcessed=0;pcbTraces=[];constructor(t,A){super(t,A),this.pcbTraces=this.ctx.db.pcb_trace.list()}_step(){const{kicadPcb:t,c2kMatPcb:A,pcbNetMap:e}=this.ctx;if(!t)throw new Error("KicadPcb instance not initialized in context");if(!A)throw new Error("PCB transformation matrix not initialized in context");if(this.tracesProcessed>=this.pcbTraces.length){this.finished=!0;return}const i=this.pcbTraces[this.tracesProcessed];if(!i.route||i.route.length<2){this.tracesProcessed++;return}let n=i.route[0]?.layer;for(let o=0;o<i.route.length-1;o++){const s=i.route[o],r=i.route[o+1],a=Pt(A,{x:s.x,y:s.y}),g=Pt(A,{x:r.x,y:r.y});let c;if(e){let h=i.subcircuit_connectivity_map_key;if(!h&&i.source_trace_id){const E=this.ctx.db.source_trace?.get(i.source_trace_id);if(E&&(h=E.subcircuit_connectivity_map_key,!h&&E.connected_source_net_ids?.length))for(const u of E.connected_source_net_ids){const d=this.ctx.db.source_net?.get(u);if(d?.subcircuit_connectivity_map_key){h=d.subcircuit_connectivity_map_key;break}}}if(!h&&typeof i.connection_name=="string"){const E=this.ctx.db.source_net?.get(i.connection_name);E?.subcircuit_connectivity_map_key&&(h=E.subcircuit_connectivity_map_key)}h&&(c=e.get(h))}const I=s.layer??r.layer??n,l=voi(I),B=`segment:${a.x},${a.y}:${g.x},${g.y}:${l}:${c?.id??0}`,C=new FwA({start:{x:a.x,y:a.y},end:{x:g.x,y:g.y},layer:l,width:i.width||.25,net:new iz(c?.id??0),uuid:VD(B)}),Q=t.segments;Q.push(C),t.segments=Q,s.layer&&(n=s.layer),r.layer&&(n=r.layer)}this.tracesProcessed++}getOutput(){return this.ctx.kicadPcb}},Hoi=class extends vE{viasProcessed=0;pcbVias=[];constructor(t,A){super(t,A),this.pcbVias=this.ctx.db.pcb_via?.list()||[]}_step(){const{kicadPcb:t,c2kMatPcb:A,pcbNetMap:e}=this.ctx;if(!t)throw new Error("KicadPcb instance not initialized in context");if(!A)throw new Error("PCB transformation matrix not initialized in context");if(this.viasProcessed>=this.pcbVias.length){this.finished=!0;return}const i=this.pcbVias[this.viasProcessed],n=Pt(A,{x:i.x,y:i.y});let o;if(e){let I=i.subcircuit_connectivity_map_key;if(!I&&i.pcb_trace_id){const l=this.ctx.db.pcb_trace?.get(i.pcb_trace_id);if(l&&("subcircuit_connectivity_map_key"in l&&(I=l.subcircuit_connectivity_map_key),!I&&l.source_trace_id)){const B=this.ctx.db.source_trace?.get(l.source_trace_id);if(B&&("subcircuit_connectivity_map_key"in B&&(I=B.subcircuit_connectivity_map_key),!I&&B.connected_source_net_ids?.length))for(const C of B.connected_source_net_ids){const Q=this.ctx.db.source_net?.get(C);if(Q?.subcircuit_connectivity_map_key){I=Q.subcircuit_connectivity_map_key;break}}}}if(!I&&i.connection_name){const l=this.ctx.db.source_net?.get(i.connection_name);l?.subcircuit_connectivity_map_key&&(I=l.subcircuit_connectivity_map_key)}I&&(o=e.get(I))}const s=this.ctx.numLayers??2,r=i.layers?i.layers.map(I=>I==="top"?"F.Cu":I==="bottom"?"B.Cu":`In${I.replace("inner","")}.Cu`):Loi(s),a=`via:${n.x},${n.y}:${i.outer_diameter||.8}:${i.hole_diameter||.4}:${o?.id??0}`,g=new bDA({at:[n.x,n.y],size:i.outer_diameter||.8,drill:i.hole_diameter||.4,layers:r,net:new SDA(o?.id??0),uuid:VD(a)}),c=t.vias;c.push(g),t.vias=c,this.viasProcessed++}getOutput(){return this.ctx.kicadPcb}};function Yoi({textElement:t,c2kMatPcb:A}){if(!t.text||!t.anchor_position)return null;const e=Pt(A,{x:t.anchor_position.x,y:t.anchor_position.y}),n={top:"F.Fab",bottom:"B.Fab"}[t.layer]||t.layer||"F.Fab",o=(t.font_size||1)/1.5,s=new im;s.size={width:o,height:o};const r=new zJ,a=t.anchor_alignment||"center";switch(a){case"top_left":r.horizontal="left",r.vertical="top";break;case"top_right":r.horizontal="right",r.vertical="top";break;case"bottom_left":r.horizontal="left",r.vertical="bottom";break;case"bottom_right":r.horizontal="right",r.vertical="bottom";break}const g=new tm({font:s});a!=="center"&&(g.justify=r);const c=new zg([e.x,e.y,0]),I=new tz({text:t.text,layer:n,effects:g});return I.position=c,I}function Joi({textElement:t,c2kMatPcb:A}){if(!t.text||!t.anchor_position)return null;const e=Pt(A,{x:t.anchor_position.x,y:t.anchor_position.y}),n={top:"F.SilkS",bottom:"B.SilkS"}[t.layer]||t.layer||"F.SilkS",o=(t.font_size||1)/1.5,s=new im;s.size={width:o,height:o};const r=new zJ,a=t.anchor_alignment||"center";switch(a){case"top_left":r.horizontal="left",r.vertical="top";break;case"top_right":r.horizontal="right",r.vertical="top";break;case"bottom_left":r.horizontal="left",r.vertical="bottom";break;case"bottom_right":r.horizontal="right",r.vertical="bottom";break}const g=new tm({font:s});a!=="center"&&(g.justify=r);const c=t.ccw_rotation||0,I=new zg([e.x,e.y,c]),l=new tz({text:t.text,layer:n,effects:g});return l.position=I,l}var Toi=class extends vE{_step(){const{kicadPcb:t,c2kMatPcb:A}=this.ctx;if(!t)throw new Error("KicadPcb instance not initialized in context");if(!A)throw new Error("PCB transformation matrix not initialized in context");const e=this.ctx.db.pcb_silkscreen_path?.list()||[];for(const s of e)if(!(!s.route||s.route.length<2))for(let r=0;r<s.route.length-1;r++){const a=s.route[r],g=s.route[r+1];if(!a||!g)continue;const c=Pt(A,{x:a.x,y:a.y}),I=Pt(A,{x:g.x,y:g.y}),B={top:"F.SilkS",bottom:"B.SilkS"}[s.layer]||s.layer||"F.SilkS",C=new ez({start:{x:c.x,y:c.y},end:{x:I.x,y:I.y},layer:B,width:s.stroke_width||.15}),Q=t.graphicLines;Q.push(C),t.graphicLines=Q}const i=this.ctx.db.pcb_silkscreen_text?.list().filter(s=>!s.pcb_component_id)||[];for(const s of i){const r=Joi({textElement:s,c2kMatPcb:A});if(r){const a=t.graphicTexts;a.push(r),t.graphicTexts=a}}const n=this.ctx.db.pcb_fabrication_note_text?.list()||[];for(const s of n){const r=Yoi({textElement:s,c2kMatPcb:A});if(r){const a=t.graphicTexts;a.push(r),t.graphicTexts=a}}const o=this.ctx.db.pcb_board?.list()||[];if(o.length>0){const s=o[0];if(!s){this.finished=!0;return}let r;if(s.outline&&s.outline.length>0)r=s.outline;else{const g=s.width?s.width/2:0,c=s.height?s.height/2:0;r=[{x:s.center.x-g,y:s.center.y-c},{x:s.center.x+g,y:s.center.y-c},{x:s.center.x+g,y:s.center.y+c},{x:s.center.x-g,y:s.center.y+c}]}const a=r.map(g=>Pt(A,g));for(let g=0;g<a.length;g++){const c=a[g],I=a[(g+1)%a.length];if(!c||!I)continue;const l=new ez({start:{x:c.x,y:c.y},end:{x:I.x,y:I.y},layer:"Edge.Cuts",width:.1}),B=t.graphicLines;B.push(l),t.graphicLines=B}}this.finished=!0}getOutput(){return this.ctx.kicadPcb}},rue=class{ctx;pipeline;currentStageIndex=0;finished=!1;get currentStage(){return this.pipeline[this.currentStageIndex]}constructor(t){this.ctx={db:_a(t),circuitJson:t,kicadPcb:new xDA({generator:"circuit-json-to-kicad",generatorVersion:"0.0.1"}),c2kMatPcb:iB(Qr(100,100),dh(1,-1))},this.pipeline=[new Qoi(t,this.ctx),new hoi(t,this.ctx),new Moi(t,this.ctx),new Uoi(t,this.ctx),new Hoi(t,this.ctx),new Toi(t,this.ctx)]}step(){if(!this.currentStage){this.finished=!0;return}this.currentStage.step(),this.currentStage.finished&&this.currentStageIndex++}runUntilFinished(){for(;!this.finished;)this.step()}getOutput(){return this.ctx.kicadPcb}getOutputString(){return this.ctx.kicadPcb.getString()}},Koi=class{ctx;project;constructor(t,A={}){const e=A.projectName??t?.project?.name??"circuit-json-project",i=A.schematicFilename??`${e}.kicad_sch`,n=A.pcbFilename??`${e}.kicad_pcb`,o=new Date().toISOString();this.ctx={db:_a(t),circuitJson:t},this.project={version:1,head:{generator:"circuit-json-to-kicad",generator_version:"0.0.1",project_name:e,created:o,modified:o},meta:{version:1},text_variables:{},libraries:{pinned_symbol_libs:[],pinned_footprint_libs:[]},boards:[],cvpcb:{meta:{version:0}},erc:{meta:{version:0},erc_exclusions:[]},net_settings:{meta:{version:1},last_net_id:0,classes:[]},pcbnew:{page_layout_descr_file:"",last_paths:{}},schematic:{meta:{version:1},page_layout_descr_file:"",last_opened_files:[i]},board:{meta:{version:1},last_opened_board:n},sheets:[[Math.random().toString(36).substring(2,15),"Root"]]}}runUntilFinished(){}getOutput(){return this.project}getOutputString(){return`${JSON.stringify(this.project,null,2)}
|
|
5827
|
-
`}},Poi=class extends vE{_step(){const t=new sue(this.ctx.circuitJson);t.runUntilFinished(),this.ctx.kicadSchString=t.getOutputString();const A=new rue(this.ctx.circuitJson);A.runUntilFinished(),this.ctx.kicadPcbString=A.getOutputString(),this.finished=!0}getOutput(){return this.ctx.libraryOutput}},qoi=class extends vE{isCustomSymbol(t){return t?.startsWith("Custom:")??!1}_step(){const t=this.ctx.kicadSchString,A=this.ctx.fpLibraryName??"tscircuit";if(!t)throw new Error("Schematic content not available. Run GenerateKicadSchAndPcbStage first.");const e=new Map;try{const n=Aue(t).find(r=>r instanceof umA);if(!n){this.ctx.symbolEntries=[],this.finished=!0;return}const o=n.libSymbols;if(!o){this.ctx.symbolEntries=[],this.finished=!0;return}const s=o.symbols??[];for(const r of s){const a=this.isCustomSymbol(r.libraryId),g=this.sanitizeSymbolName(r.libraryId);e.has(g)||(r.libraryId=g,this.updateFootprintProperty(r,A),e.set(g,{symbolName:g,symbol:r,isBuiltin:!a}))}}catch(i){console.warn("Failed to parse schematic for symbol extraction:",i)}this.ctx.symbolEntries=Array.from(e.values()),this.finished=!0}updateFootprintProperty(t,A){const e=t.properties??[];for(const i of e)if(i.key==="Footprint"&&i.value){const n=i.value.split(":");n.length>1?i.value=`${A}:${n[1]}`:i.value.trim()&&(i.value=`${A}:${i.value}`)}}sanitizeSymbolName(t){if(!t)return"symbol";const A=t.split(":");return(A.length>1?A[1]:A[0])?.replace(/[\\\/]/g,"-").trim()||"symbol"}getOutput(){return this.ctx.libraryOutput}},Ooi=20240108,Woi="pcbnew",Zoi="8.0";function Voi(t){const A=t.split(/[/\\]/);return A[A.length-1]||t}var joi=class extends vE{findCustomFootprintNames(){const t=new Set,A=this.ctx.db.cad_component?.list()??[],e=this.ctx.db.source_component;for(const i of A)if(!i.footprinter_string){const n=i.source_component_id?e?.get(i.source_component_id):null;if(n){const o=KG(n,i);t.add(o)}}return t}_step(){const t=this.ctx.kicadPcbString,A=this.ctx.fpLibraryName??"tscircuit";if(!t)throw new Error("PCB content not available. Run GenerateKicadSchAndPcbStage first.");const e=this.findCustomFootprintNames(),i=new Map;try{const o=Aue(t).find(r=>r instanceof xDA);if(!o){this.ctx.footprintEntries=[],this.finished=!0;return}const s=o.footprints??[];for(const r of s){const a=this.sanitizeFootprint({footprint:r,fpLibraryName:A,customFootprintNames:e});i.has(a.footprintName)||i.set(a.footprintName,a)}}catch(n){console.warn("Failed to parse PCB for footprint extraction:",n)}this.ctx.footprintEntries=Array.from(i.values()),this.finished=!0}sanitizeFootprint({footprint:t,fpLibraryName:A,customFootprintNames:e}){const n=(t.libraryLink??"footprint").split(":"),o=(n.length>1?n[1]:n[0])?.replace(/[\\\/]/g,"-").trim()||"footprint",s=!e.has(o);if(t.libraryLink=o,t.position=zg.from([0,0,0]),t.locked=!1,t.placed=!1,t.version=Ooi,t.generator=Woi,t.generatorVersion=Zoi,t.descr||(t.descr=""),t.tags||(t.tags=""),t.embeddedFonts||(t.embeddedFonts=new Pj(!1)),!t.attr){const d=new YQe,p=(t.fpPads??[]).map(m=>m.padType);p.some(m=>m.includes("thru_hole"))?d.type="through_hole":p.some(m=>m.includes("smd"))&&(d.type="smd"),t.attr=d}t.uuid=void 0,t.path=void 0,t.sheetfile=void 0,t.sheetname=void 0;const r=new im;r.size={width:1.27,height:1.27},r.thickness=.15;const a=new tm({font:r}),g=t.fpPads??[];let c=0,I=0;for(const d of g){const p=d.at,m=d.size;if(p&&m){const w=p.y??0,D=m.height??0,b=w-D/2,k=w+D/2;c=Math.min(c,b),I=Math.max(I,k)}}const l=c-.5,B=I+.5;t.properties=[new G1({key:"Reference",value:"REF**",position:[0,l,0],layer:"F.SilkS",uuid:VD(`${o}-property-Reference`),effects:a}),new G1({key:"Value",value:"Val**",position:[0,B,0],layer:"F.Fab",uuid:VD(`${o}-property-Value`),effects:a}),new G1({key:"Datasheet",value:"",position:[0,0,0],layer:"F.Fab",hidden:!0,uuid:VD(`${o}-property-Datasheet`),effects:a}),new G1({key:"Description",value:"",position:[0,0,0],layer:"F.Fab",hidden:!0,uuid:VD(`${o}-property-Description`),effects:a})];const C=t.fpTexts??[];for(const d of C)d.uuid=void 0,d.type==="reference"?d.text="REF**":d.type==="value"&&d.text.trim().length===0&&(d.text=o);t.fpTexts=C;const Q=t.fpPads??[];for(let d=0;d<Q.length;d++){const p=Q[d];p&&(p.uuid=VD(`${o}-pad-${p.number??d}`),p.net=void 0)}t.fpPads=Q;const h=t.models??[],E=[],u=[];for(const d of h)if(d.path){const p=Voi(d.path),m=`../../3dmodels/${A}.3dshapes/${p}`,w=new QwA(m);d.offset&&(w.offset=d.offset),d.scale&&(w.scale=d.scale),d.rotate&&(w.rotate=d.rotate),E.push(w),u.push(d.path)}return t.models=E,{footprintName:o,kicadModString:t.getString(),model3dSourcePaths:u,isBuiltin:s}}getOutput(){return this.ctx.libraryOutput}},zoi=20211014,Xoi="circuit-json-to-kicad",$oi=class extends vE{_step(){const t=this.ctx.symbolEntries??[],A=this.generateSymbolLibrary(t);this.ctx.libraryOutput||(this.ctx.libraryOutput={kicadSymString:"",symbols:[],footprints:[],fpLibTableString:"",symLibTableString:"",model3dSourcePaths:[]}),this.ctx.libraryOutput.kicadSymString=A,this.finished=!0}generateSymbolLibrary(t){return new dQe({version:zoi,generator:Xoi,symbols:t.map(e=>e.symbol)}).getString()}getOutput(){return this.ctx.libraryOutput}},Asi=class extends vE{_step(){const t=this.ctx.libraryName??"tscircuit",A=this.ctx.fpLibraryName??"tscircuit",e=this.ctx.footprintEntries??[],i=this.ctx.symbolEntries??[],n=new Set;for(const r of e)for(const a of r.model3dSourcePaths)n.add(a);const o=this.generateFpLibTable(A),s=this.generateSymLibTable(t);this.ctx.libraryOutput||(this.ctx.libraryOutput={kicadSymString:"",symbols:[],footprints:[],fpLibTableString:"",symLibTableString:"",model3dSourcePaths:[]}),this.ctx.libraryOutput.symbols=i,this.ctx.libraryOutput.footprints=e,this.ctx.libraryOutput.fpLibTableString=o,this.ctx.libraryOutput.symLibTableString=s,this.ctx.libraryOutput.model3dSourcePaths=Array.from(n),this.finished=!0}generateFpLibTable(t){return`(fp_lib_table
|
|
5826
|
+
`)}};NA.register(bDA);var xDA=class kwe extends NA{static token="kicad_pcb";token="kicad_pcb";_sxVersion;_sxGenerator;_sxGeneratorVersion;_sxGeneral;_sxPaper;_sxTitleBlock;_sxLayers;_sxSetup;_properties=[];_nets=[];_footprints=[];_images=[];_segments=[];_grLines=[];_grTexts=[];_grPolys=[];_grRects=[];_vias=[];_zones=[];_otherChildren=[];constructor(A={}){super(),A.version!==void 0&&(this.version=A.version),A.generator!==void 0&&(this.generator=A.generator),A.generatorVersion!==void 0&&(this.generatorVersion=A.generatorVersion),A.general!==void 0&&(this.general=A.general),A.paper!==void 0&&(this.paper=A.paper),A.titleBlock!==void 0&&(this.titleBlock=A.titleBlock),A.layers!==void 0&&(this.layers=A.layers),A.setup!==void 0&&(this.setup=A.setup),A.properties!==void 0&&(this.properties=A.properties),A.nets!==void 0&&(this.nets=A.nets),A.footprints!==void 0&&(this.footprints=A.footprints),A.images!==void 0&&(this.images=A.images),A.segments!==void 0&&(this.segments=A.segments),A.graphicLines!==void 0&&(this.graphicLines=A.graphicLines),A.graphicTexts!==void 0&&(this.graphicTexts=A.graphicTexts),A.graphicPolys!==void 0&&(this.graphicPolys=A.graphicPolys),A.graphicRects!==void 0&&(this.graphicRects=A.graphicRects),A.vias!==void 0&&(this.vias=A.vias),A.zones!==void 0&&(this.zones=A.zones),A.otherChildren!==void 0&&(this.otherChildren=A.otherChildren)}static fromSexprPrimitives(A){const e=new kwe;for(const i of A){if(!Array.isArray(i)||i.length===0)throw new Error(`kicad_pcb encountered unsupported primitive child: ${JSON.stringify(i)}`);const n=NA.parsePrimitiveSexpr(i,{parentToken:this.token});if(!(n instanceof NA))throw new Error(`kicad_pcb expected SxClass child, received ${JSON.stringify(i)}`);e.consumeChild(n)}return e}consumeChild(A){if(A instanceof mDA){this._sxVersion=A;return}if(A instanceof wDA){this._sxGenerator=A;return}if(A instanceof DDA){this._sxGeneratorVersion=A;return}if(A instanceof fDA){this._sxGeneral=A;return}if(A instanceof Tj){this._sxPaper=A;return}if(A instanceof jCe){this._sxTitleBlock=A;return}if(A instanceof yDA){this._sxLayers=A;return}if(A instanceof pDA){this._sxSetup=A;return}if(A instanceof G1){this._properties.push(A);return}if(A instanceof sz){this._nets.push(A);return}if(A instanceof uwA){this._footprints.push(A);return}if(A instanceof XCe){this._images.push(A);return}if(A instanceof FwA){this._segments.push(A);return}if(A instanceof ez){this._grLines.push(A);return}if(A instanceof tz){this._grTexts.push(A);return}if(A instanceof Khe){this._grPolys.push(A);return}if(A instanceof Yhe){this._grRects.push(A);return}if(A instanceof bDA){this._vias.push(A);return}if(A instanceof Vhe){this._zones.push(A);return}this._otherChildren.push(A)}get version(){return this._sxVersion?.value}set version(A){this._sxVersion=A===void 0?void 0:new mDA(A)}get generator(){return this._sxGenerator?.value}set generator(A){this._sxGenerator=A===void 0?void 0:new wDA(A)}get generatorVersion(){return this._sxGeneratorVersion?.value}set generatorVersion(A){this._sxGeneratorVersion=A===void 0?void 0:new DDA(A)}get general(){return this._sxGeneral}set general(A){this._sxGeneral=A}get paper(){return this._sxPaper}set paper(A){this._sxPaper=A}get titleBlock(){return this._sxTitleBlock}set titleBlock(A){this._sxTitleBlock=A}get layers(){return this._sxLayers}set layers(A){this._sxLayers=A}get setup(){return this._sxSetup}set setup(A){this._sxSetup=A}get properties(){return[...this._properties]}set properties(A){this._properties=[...A]}get nets(){return[...this._nets]}set nets(A){this._nets=[...A]}get footprints(){return[...this._footprints]}set footprints(A){this._footprints=[...A]}get images(){return[...this._images]}set images(A){this._images=[...A]}get segments(){return[...this._segments]}set segments(A){this._segments=[...A]}get graphicLines(){return[...this._grLines]}set graphicLines(A){this._grLines=[...A]}get graphicTexts(){return[...this._grTexts]}set graphicTexts(A){this._grTexts=[...A]}get graphicPolys(){return[...this._grPolys]}set graphicPolys(A){this._grPolys=[...A]}get graphicRects(){return[...this._grRects]}set graphicRects(A){this._grRects=[...A]}get vias(){return[...this._vias]}set vias(A){this._vias=[...A]}get zones(){return[...this._zones]}set zones(A){this._zones=[...A]}get otherChildren(){return[...this._otherChildren]}set otherChildren(A){this._otherChildren=[...A]}getChildren(){const A=[];return this._sxVersion&&A.push(this._sxVersion),this._sxGenerator&&A.push(this._sxGenerator),this._sxGeneratorVersion&&A.push(this._sxGeneratorVersion),this._sxGeneral&&A.push(this._sxGeneral),this._sxPaper&&A.push(this._sxPaper),this._sxTitleBlock&&A.push(this._sxTitleBlock),this._sxLayers&&A.push(this._sxLayers),this._sxSetup&&A.push(this._sxSetup),A.push(...this._properties),A.push(...this._nets),A.push(...this._footprints),A.push(...this._images),A.push(...this._segments),A.push(...this._grLines),A.push(...this._grTexts),A.push(...this._grPolys),A.push(...this._grRects),A.push(...this._vias),A.push(...this._zones),A.push(...this._otherChildren),A}};NA.register(xDA);var Aue=t=>NA.parse(t),vE=class{MAX_ITERATIONS=1e3;iteration=0;finished=!1;input;ctx;constructor(t,A){this.input=t,this.ctx=A}step(){if(this.iteration++,this.iteration>this.MAX_ITERATIONS)throw new Error("Max iterations reached");this._step()}_step(){throw new Error("Not implemented")}runUntilFinished(){for(;!this.finished;)this.step()}getOutput(){throw new Error("Not implemented")}},noi=class extends vE{_step(){const{kicadSch:t,schematicPaperSize:A}=this.ctx;if(!t)throw new Error("KicadSch instance not initialized in context");t.version=20250114;const e=new Tj;e.size=A?.name??"A4",t.paper=e,t.uuid=new Li(crypto.randomUUID()),this.finished=!0}getOutput(){return this.ctx.kicadSch}};function KG(t,A){if(t.manufacturer_part_number)return _DA(t.manufacturer_part_number);const e=ooi(t.ftype),i=A?.footprinter_string;return _DA(i?`${e}_${i}`:e)}function ooi(t){if(!t)return"component";let A=t.replace(/^simple_/,"");return A||"component"}function _DA(t){return t.replace(/[\\\/:\s]+/g,"_").replace(/_+/g,"_").replace(/^_|_$/g,"").trim()||"component"}function eue(t){return t?t.match(/^([A-Za-z]+)/)?.[1]?.toUpperCase()??"U":"U"}var tue={simple_resistor:"R",simple_capacitor:"C",simple_inductor:"L",simple_diode:"D",simple_led:"D",simple_chip:"U",simple_transistor:"Q",simple_mosfet:"Q",simple_fuse:"F",simple_switch:"SW",simple_push_button:"SW",simple_potentiometer:"RV",simple_crystal:"Y",simple_resonator:"Y",simple_pin_header:"J",simple_pinout:"J",simple_test_point:"TP",simple_battery:"BT"},soi=/^[A-Za-z]+\d+$/;function iue(t){return t?soi.test(t.trim()):!1}function rz(t){const A=t?.ftype;if(A&&tue[A])return tue[A];const e=t?.name;return iue(e),eue(e)}function roi(t){const A=t?.name;return iue(A)?A.trim():`${rz(t)}?`}function nue(t){return t in yQ}function oue(t,A,e,i){if(i)return`Custom:${i}`;if(t.type!=="source_component")return A.symbol_name?nue(A.symbol_name)?`Device:${A.symbol_name}`:`Custom:${A.symbol_name}`:"Device:Component";if(A.symbol_name)return nue(A.symbol_name)?`Device:${A.symbol_name}`:`Custom:${A.symbol_name}`;const n=KG(t,e);return`Device:${rz(t)}_${n}`}var aoi=class extends vE{processedSymbolNames=new Set;_step(){const{kicadSch:t,db:A}=this.ctx,e=new fQe,i=[];this.processedSymbolNames=new Set;const n=A.schematic_component.list();for(const s of n){const r=this.createLibrarySymbolForComponent(s);r&&i.push(r)}const o=A.schematic_net_label?.list?.()||[];for(const s of o)if(s.symbol_name){const r=s.source_net_id?A.source_net.get(s.source_net_id)?.is_power:!1,a=s.source_net_id?A.source_net.get(s.source_net_id)?.is_ground:!1;if(r||a){const c=this.createLibrarySymbolForNetLabel({netLabel:s,isPower:r??!1,isGround:a??!1});c&&i.push(c)}}e.symbols=i,t&&(t.libSymbols=e),this.finished=!0}createLibrarySymbolForComponent(t){const{db:A}=this.ctx,e=t.source_component_id?A.source_component.get(t.source_component_id):null;if(!e)return null;const i=A.cad_component?.list()?.find(c=>c.source_component_id===e.source_component_id);let n=t.schematic_symbol_id;if(!n){const c=this.ctx.circuitJson.find(I=>(I.type==="schematic_line"||I.type==="schematic_circle"||I.type==="schematic_path")&&I.schematic_component_id===t.schematic_component_id&&I.schematic_symbol_id);c&&(n=c.schematic_symbol_id)}if(n)return this.createLibrarySymbolFromSchematicSymbol(t,e,i,n);const o=t.symbol_name||(e.ftype==="simple_chip"?`generic_chip_${t.source_component_id}`:null);if(!o)return null;const s=this.getSymbolData(o,t);if(!s)return null;const r=oue(e,t,i),a=e.ftype==="simple_chip",g=KG(e,i);return this.createLibrarySymbol({libId:r,symbolData:s,isChip:a,schematicComponent:t,description:this.getDescription(e),keywords:this.getKeywords(e),fpFilters:this.getFpFilters(e),footprintRef:g?`tscircuit:${g}`:"",referencePrefix:rz(e)})}createLibrarySymbolFromSchematicSymbol(t,A,e,i){const{db:n}=this.ctx,o=this.ctx.circuitJson.find(c=>c.type==="schematic_symbol"&&c.schematic_symbol_id===i);if(!o)return null;let s;if(o.name)s=o.name;else{const c=KG(A,e);c?s=c:s=`custom_${A.ftype||"component"}_${i}`}const r=`Custom:${s}`;if(this.processedSymbolNames.has(r))return null;this.processedSymbolNames.add(r);const a=this.buildSymbolDataFromSchematicPrimitives(i,o,t.schematic_component_id),g=KG(A,e);return this.createLibrarySymbol({libId:r,symbolData:a,isChip:!1,schematicComponent:t,description:this.getDescription(A),keywords:this.getKeywords(A),fpFilters:this.getFpFilters(A),footprintRef:g?`tscircuit:${g}`:"",referencePrefix:rz(A)})}buildSymbolDataFromSchematicPrimitives(t,A,e){const{circuitJson:i}=this.ctx,n=i.filter(c=>c.type==="schematic_circle"&&c.schematic_symbol_id===t),o=i.filter(c=>c.type==="schematic_line"&&c.schematic_symbol_id===t),s=i.filter(c=>c.type==="schematic_path"&&c.schematic_symbol_id===t);let r=i.filter(c=>c.type==="schematic_port"&&"schematic_symbol_id"in c&&c.schematic_symbol_id===t);if(r.length===0&&e&&(r=i.filter(c=>c.type==="schematic_port"&&c.schematic_component_id===e&&c.display_pin_label!==void 0),r.length===0)){const c=i.filter(l=>l.type==="schematic_port"&&l.schematic_component_id===e),I=new Set;r=c.filter(l=>{const B=l.pin_number;if(B!==void 0){if(I.has(B))return!1;I.add(B)}return!0})}const a=[];for(const c of n)a.push({type:"circle",x:c.center?.x??0,y:c.center?.y??0,radius:c.radius??.5,fill:c.is_filled??!1,fillColor:c.fill_color});for(const c of o)a.push({type:"path",points:[{x:c.x1??0,y:c.y1??0},{x:c.x2??0,y:c.y2??0}]});for(const c of s)c.points&&c.points.length>0&&a.push({type:"path",points:c.points,fill:c.is_filled??!1,fillColor:c.fill_color});const g=r.map((c,I)=>({x:c.center?.x??0,y:c.center?.y??0,labels:[c.display_pin_label||`${c.pin_number||I+1}`],pinNumber:c.pin_number||I+1,facingDirection:c.facing_direction}));return g.sort((c,I)=>c.pinNumber-I.pinNumber),{center:A.center||{x:0,y:0},size:A.size||{width:1,height:1},primitives:a,ports:g}}createLibrarySymbolForNetLabel({netLabel:t,isPower:A,isGround:e}){const i=t.symbol_name;if(!i)return null;const n=yQ[i];if(!n)return null;const o=`Custom:${i}`;return this.createLibrarySymbol({libId:o,symbolData:n,isChip:!1,schematicComponent:void 0,description:A?"Power net label":e?"Ground net label":"Net symbol",keywords:A?"power net":e?"ground net":"net",fpFilters:"",referencePrefix:o.split(":")[1]?.[0]||"U"})}getSymbolData(t,A){return t.startsWith("generic_chip_")?this.createGenericChipSymbolData(A,this.ctx.db):yQ[t]||null}createGenericChipSymbolData(t,A){const e=A.schematic_port.list().filter(r=>r.schematic_component_id===t.schematic_component_id).sort((r,a)=>(r.pin_number||0)-(a.pin_number||0)),i=t.size?.width||1.5,n=t.size?.height||1,o={type:"path",points:[{x:-i/2,y:-n/2},{x:i/2,y:-n/2},{x:i/2,y:n/2},{x:-i/2,y:n/2},{x:-i/2,y:-n/2}]},s=e.map(r=>{const a=r.center.x-t.center.x,g=r.center.y-t.center.y;return{x:a,y:g,labels:[r.display_pin_label||`${r.pin_number||1}`],pinNumber:r.pin_number||1}});return{center:{x:0,y:0},primitives:[o],ports:s,size:{width:i,height:n}}}createLibrarySymbol({libId:t,symbolData:A,isChip:e,schematicComponent:i,description:n,keywords:o,fpFilters:s,footprintRef:r="",referencePrefix:a}){const g=new F1({libraryId:t,excludeFromSim:!1,inBom:!0,onBoard:!0}),c=new iQe;c.hide=!e,g._sxPinNumbers=c;const I=new nQe;I.offset=e?1.27:0,g._sxPinNames=I,this.addSymbolProperties({symbol:g,libId:t,description:n,keywords:o,fpFilters:s,footprintRef:r,referencePrefix:a});const l=this.createDrawingSubsymbol({libId:t,symbolData:A,isChip:e});g.subSymbols.push(l);const B=this.createPinSubsymbol({libId:t,symbolData:A,isChip:e,schematicComponent:i});return g.subSymbols.push(B),g._sxEmbeddedFonts=new Pj(!1),g}addSymbolProperties({symbol:t,libId:A,description:e,keywords:i,fpFilters:n,footprintRef:o="",referencePrefix:s}){const r=s||A.split(":")[1]?.[0]||"U",a=[{key:"Reference",value:r,id:0,at:[2.032,0,90],hide:!1},{key:"Value",value:r,id:1,at:[0,0,90],hide:!1},{key:"Footprint",value:o,id:2,at:[-1.778,0,90],hide:!0},{key:"Datasheet",value:"~",id:3,at:[0,0,0],hide:!0},{key:"Description",value:e,id:4,at:[0,0,0],hide:!0},{key:"ki_keywords",value:i,id:5,at:[0,0,0],hide:!0},{key:"ki_fp_filters",value:n,id:6,at:[0,0,0],hide:!0}];for(const g of a)t.properties.push(new nm({key:g.key,value:g.value,id:g.id,at:g.at,effects:this.createTextEffects(1.27,g.hide)}))}getDescription(t){return t?.ftype==="simple_resistor"?"Resistor":t?.ftype==="simple_capacitor"?"Capacitor":t?.ftype==="simple_chip"?"Integrated Circuit":"Component"}getKeywords(t){return t?.ftype==="simple_resistor"?"R res resistor":t?.ftype==="simple_capacitor"?"C cap capacitor":t?.ftype==="simple_chip"?"U IC chip":""}getFpFilters(t){return t?.ftype==="simple_resistor"?"R_*":t?.ftype==="simple_capacitor"?"C_*":(t?.ftype==="simple_chip","*")}createDrawingSubsymbol({libId:t,symbolData:A,isChip:e}){const i=new F1({libraryId:`${t.split(":")[1]}_0_1`}),n=15.24,o=this.ctx.c2kMatSch?.a||15,s=e?o:n;for(const r of A.primitives||[])if(r.type==="path"&&r.points){const a=e||r.fill?"background":"none",g=this.createPolylineFromPoints({points:r.points,scale:s,center:A.center,fillType:a});i.polylines.push(g)}else if(r.type==="circle"){const a=this.createCircleFromPrimitive({primitive:r,scale:s,center:A.center});i.circles.push(a)}return i}createPolylineFromPoints({points:t,scale:A,center:e,fillType:i}){const n=new AQe,o=e?.x??0,s=e?.y??0,r=dh(A,A),a=t.map(l=>{const B=Pt(r,{x:l.x-o,y:l.y-s});return new HQ(B.x,B.y)}),g=new TC(a);n.points=g;const c=new WD;c.width=.254,c.type="default",n.stroke=c;const I=new gQe;return I.type=i,n.fill=I,n}createCircleFromPrimitive({primitive:t,scale:A,center:e}){const i=new lQe,n=e?.x??0,o=e?.y??0,s=dh(A,A),r=Pt(s,{x:t.x-n,y:t.y-o}),a=i;a._sxCenter=new rQe(r.x,r.y),a._sxRadius=new aQe(t.radius*A);const g=new WD;g.width=.254,g.type="default",a._sxStroke=g;const c=new cQe;return c.type=t.fill?"background":"none",a._sxFill=c,i}createPinSubsymbol({libId:t,symbolData:A,isChip:e,schematicComponent:i}){const n=new F1({libraryId:`${t.split(":")[1]}_1_1`});for(let o=0;o<(A.ports?.length||0);o++){const s=A.ports[o],r=new Wj;r.pinElectricalType="passive",r.pinGraphicStyle="line";const{x:a,y:g,angle:c}=this.calculatePinPosition(s,A.center,A.size,e,o,i);r.at=[a,g,c];const I=6,l=2.54;r.length=e?I:l;const B=new im;B.size={height:1.27,width:1.27};const C=new tm({font:B}),Q=s.labels?.[0]||"~";r._sxName=new amA({value:Q,effects:C});const h=new im;h.size={height:1.27,width:1.27};const E=new tm({font:h}),u=s.pinNumber?.toString()||`${o+1}`;r._sxNumber=new CQe({value:u,effects:E}),n.pins.push(r)}return n}calculatePinPosition(t,A,e,i,n,o){const r=this.ctx.c2kMatSch?.a||15,a=i?r:15.24;let g=t.x??0,c=t.y??0,I=!1;if(i&&n!==void 0&&o){const m=this.ctx.db.schematic_port.list().filter(w=>w.schematic_component_id===o.schematic_component_id).sort((w,D)=>(w.pin_number||0)-(D.pin_number||0));if(m[n]){const w=m[n];g=w.center.x-o.center.x,c=w.center.y-o.center.y,I=!0}}let l,B;if(I)l=g,B=c;else{const m=A?.x??0,w=A?.y??0;l=g-m,B=c-w}const C=dh(a,a),Q=Pt(C,{x:l,y:B});let h;if(i&&e){const m=e.width/2,w=e.height/2,D=Math.abs(l)/m,b=Math.abs(B)/w;h=D>b}else h=Math.abs(l)>Math.abs(B);let E=Q.x,u=Q.y;const d=6;if(i&&e){const m=e.width/2*a,w=e.height/2*a;h?(E=l>0?m:-m,u=B*a):(E=l*a,u=B>0?w:-w)}let p=0;return h?l>0?(p=180,i&&(E=E+d)):(p=0,i&&(E=E-d)):B>0?(p=270,i&&(u=u+d)):(p=90,i&&(u=u-d)),{x:E,y:u,angle:p}}createTextEffects(t,A){const e=new im;return e.size={height:t,width:t},new tm({font:e,hiddenText:A})}getOutput(){if(!this.ctx.kicadSch)throw new Error("kicadSch is not initialized");return this.ctx.kicadSch}},goi=class extends vE{_step(){const{kicadSch:t,db:A}=this.ctx,e=A.schematic_component.list();if(e.length===0){this.finished=!0;return}const i=[];for(const n of e){const o=n.source_component_id?A.source_component.get(n.source_component_id):null;if(!o||!this.ctx.c2kMatSch)continue;const{x:s,y:r}=Pt(this.ctx.c2kMatSch,{x:n.center.x,y:n.center.y}),a=crypto.randomUUID(),g=new F1({at:[s,r,0],unit:1,excludeFromSim:!1,inBom:!0,onBoard:!0,dnp:!1,uuid:a,fieldsAutoplaced:!0}),c=A.cad_component?.list()?.find(Y=>Y.source_component_id===o.source_component_id);let I,l=n.schematic_symbol_id;if(!l){const Y=this.ctx.circuitJson.find(H=>(H.type==="schematic_line"||H.type==="schematic_circle"||H.type==="schematic_path")&&H.schematic_component_id===n.schematic_component_id&&H.schematic_symbol_id);Y&&(l=Y.schematic_symbol_id)}if(l){const Y=this.ctx.circuitJson.find(H=>H.type==="schematic_symbol"&&H.schematic_symbol_id===l);if(Y?.name)I=Y.name;else{const H=KG(o,c);H?I=H:I=`custom_${o.ftype||"component"}_${l}`}}const B=oue(o,n,c,I),C=new omA(B);g._sxLibId=C;const{reference:Q,value:h,description:E}=this.getComponentMetadata(o),{refTextPos:u,valTextPos:d}=this.getTextPositions(n,{x:s,y:r}),p=new nm({key:"Reference",value:Q,id:0,at:[u.x,u.y,0],effects:this.createTextEffects(1.27,!1)}),m=o.ftype==="simple_chip",w=new nm({key:"Value",value:h,id:1,at:[d.x,d.y,0],effects:this.createTextEffects(1.27,m)}),D=new nm({key:"Footprint",value:"",id:2,at:[s-1.778,r,90],effects:this.createTextEffects(1.27,!0)}),b=new nm({key:"Datasheet",value:"~",id:3,at:[s,r,0],effects:this.createTextEffects(1.27,!0)}),k=new nm({key:"Description",value:E,id:4,at:[s,r,0],effects:this.createTextEffects(1.27,!0)});g.properties.push(p,w,D,b,k);let x=A.schematic_port.list().filter(Y=>Y.schematic_component_id===n.schematic_component_id);if(l){const Y=x.filter(H=>H.display_pin_label);Y.length>0&&(x=Y)}x.sort((Y,H)=>(Y.pin_number||0)-(H.pin_number||0));for(let Y=0;Y<x.length;Y++){const H=x[Y];if(!H)continue;const O=new Wj;O.numberString=`${H.pin_number||Y+1}`,O.uuid=crypto.randomUUID(),g.pins.push(O)}const N=new gmA,M=new ImA(""),L=new lmA(`/${t?.uuid?.value||""}`);L.reference=Q,L.unit=1,M.paths.push(L),N.projects.push(M),g._sxInstances=N,i.push(g)}t&&(t.symbols=i),this.finished=!0}getTextPositions(t,A){const i=(this.ctx.db.schematic_text?.list?.()?.filter(B=>B.schematic_component_id===t.schematic_component_id)||[]).find(B=>B.text&&B.text.length>0);if(i&&this.ctx.c2kMatSch){const B=Pt(this.ctx.c2kMatSch,{x:i.position.x,y:i.position.y}),C={x:A.x,y:A.y+6};return{refTextPos:B,valTextPos:C}}const n=t.symbol_name,o=yQ[n];if(!o)return{refTextPos:{x:A.x,y:A.y-6},valTextPos:{x:A.x,y:A.y+6}};let s=null,r=null;for(const B of o.primitives)B.type==="text"&&(B.text==="{REF}"?s=B:B.text==="{VAL}"&&(r=B));const a=o.center||{x:0,y:0},c=n.includes("_down")||n.includes("_up")?.15:0,I=s&&this.ctx.c2kMatSch?Pt(this.ctx.c2kMatSch,{x:t.center.x+(s.x-a.x)+c,y:t.center.y+(s.y-a.y)}):{x:A.x,y:A.y-6},l=r&&this.ctx.c2kMatSch?Pt(this.ctx.c2kMatSch,{x:t.center.x+(r.x-a.x)+c,y:t.center.y+(r.y-a.y)}):{x:A.x,y:A.y+6};return{refTextPos:I,valTextPos:l}}getComponentMetadata(t){const A=t.name||"?",e=roi(t);return t.ftype==="simple_resistor"?{reference:e,value:t.display_resistance||"R",description:"Resistor"}:t.ftype==="simple_capacitor"?{reference:e,value:t.display_capacitance||"C",description:"Capacitor"}:t.ftype==="simple_inductor"?{reference:e,value:t.display_inductance||"L",description:"Inductor"}:t.ftype==="simple_diode"?{reference:e,value:"D",description:"Diode"}:t.ftype==="simple_chip"?{reference:e,value:A,description:"Integrated Circuit"}:t.ftype==="simple_led"?{reference:e,value:t.manufacturer_part_number||"",description:"LED"}:t.ftype==="simple_switch"?{reference:e,value:t.manufacturer_part_number||"",description:"Switch"}:{reference:e,value:A,description:"Component"}}createTextEffects(t,A=!1,e){const i=new im;i.size={height:t,width:t};const n=e?new zJ({horizontal:e}):void 0;return new tm({font:i,hiddenText:A,justify:n})}getOutput(){if(!this.ctx.kicadSch)throw new Error("kicadSch is not initialized");return this.ctx.kicadSch}},coi=class extends vE{_step(){const{kicadSch:t,db:A}=this.ctx,e=A.schematic_net_label?.list?.()||[];if(e.length===0){this.finished=!0;return}if(!this.ctx.c2kMatSch){this.finished=!0;return}const i=[],n=[];for(const o of e){const s=o.text||"",r=o.symbol_name;if(r){const a=this.createSymbolFromNetLabel(o,s,r);a&&i.push(a)}else{const a=this.createGlobalLabel(o,s);a&&n.push(a)}}if(t&&i.length>0){const o=t.symbols||[];t.symbols=[...o,...i]}t&&n.length>0&&(t.globalLabels=[...t.globalLabels||[],...n]),this.finished=!0}createSymbolFromNetLabel(t,A,e){if(!this.ctx.c2kMatSch)return null;const{x:i,y:n}=Pt(this.ctx.c2kMatSch,{x:t.anchor_position?.x??t.center?.x??0,y:t.anchor_position?.y??t.center?.y??0}),o=crypto.randomUUID(),s=new F1({at:[i,n,0],unit:1,excludeFromSim:!1,inBom:!0,onBoard:!0,dnp:!1,uuid:o,fieldsAutoplaced:!0}),r=`Custom:${e}`,a=new omA(r);s._sxLibId=a;const g=e.includes("_up")||e.toLowerCase().includes("vcc"),c=g?-4:4,I=g?-6:6,l=new nm({key:"Reference",value:A,id:0,at:[i,n+c,0],effects:this.createTextEffects(1.27,!1)}),B=new nm({key:"Value",value:A,id:1,at:[i,n+I,0],effects:this.createTextEffects(1.27,!0)}),C=new nm({key:"Footprint",value:"",id:2,at:[i-1.778,n,90],effects:this.createTextEffects(1.27,!0)}),Q=new nm({key:"Datasheet",value:"~",id:3,at:[i,n,0],effects:this.createTextEffects(1.27,!0)}),h=new nm({key:"Description",value:`Power/Net symbol: ${A}`,id:4,at:[i,n,0],effects:this.createTextEffects(1.27,!0)});s.properties.push(l,B,C,Q,h);const E=new Wj;E.numberString="1",E.uuid=crypto.randomUUID(),s.pins.push(E);const{kicadSch:u}=this.ctx,d=new gmA,p=new ImA(""),m=new lmA(`/${u?.uuid?.value||""}`);return m.reference=A,m.unit=1,p.paths.push(m),d.projects.push(p),s._sxInstances=d,s}createGlobalLabel(t,A){if(!this.ctx.c2kMatSch||!this.ctx.kicadSch)return null;const{x:e,y:i}=Pt(this.ctx.c2kMatSch,{x:t.anchor_position?.x??t.center?.x??0,y:t.anchor_position?.y??t.center?.y??0}),n=t.anchor_side||"left",s={left:0,right:180,top:270,bottom:90}[n]||0,a={left:{horizontal:"left"},right:{horizontal:"right"},top:{vertical:"top"},bottom:{vertical:"bottom"}}[n]||{},g=this.createTextEffects(1.27,!1);return Object.keys(a).length>0&&(g.justify=new zJ(a)),new kQe({value:A,at:[e,i,s],effects:g,uuid:crypto.randomUUID(),fieldsAutoplaced:!0})}createTextEffects(t,A=!1){const e=new im;return e.size={height:t,width:t},new tm({font:e,hiddenText:A})}getOutput(){if(!this.ctx.kicadSch)throw new Error("kicadSch is not initialized");return this.ctx.kicadSch}},Ioi=class extends vE{_step(){const{kicadSch:t,db:A}=this.ctx;if(!t)throw new Error("KicadSch instance not initialized in context");const e=A.schematic_trace.list();if(e.length===0){this.finished=!0;return}const i=[],n=[];for(const o of e){for(const s of o.edges){const r=this.createWireFromEdge(s);i.push(r)}for(const s of o.junctions){const r=this.createJunction(s);n.push(r)}}t.wires=i,t.junctions=n,this.finished=!0}createWireFromEdge(t){const A=new mQe;if(!this.ctx.c2kMatSch)throw new Error("Schematic transformation matrix not initialized in context");const e=Pt(this.ctx.c2kMatSch,{x:t.from.x,y:t.from.y}),i=Pt(this.ctx.c2kMatSch,{x:t.to.x,y:t.to.y}),n=e.x,o=e.y,s=i.x,r=i.y,a=new TC([new HQ(n,o),new HQ(s,r)]);A.points=a;const g=new WD;return g.width=0,g.type="default",A.stroke=g,A.uuid=crypto.randomUUID(),A}createJunction(t){if(!this.ctx.c2kMatSch)throw new Error("Schematic transformation matrix not initialized in context");const{x:A,y:e}=Pt(this.ctx.c2kMatSch,{x:t.x,y:t.y}),i=new wQe({at:[A,e],diameter:0});return i.uuid=crypto.randomUUID(),i}getOutput(){return this.ctx.kicadSch}},loi=class extends vE{_step(){const{kicadSch:t}=this.ctx;if(!t)throw new Error("KicadSch instance not initialized in context");const A=new hmA,e=new RQe;e.value="/";const i=new MQe("1");e.pages=[i],A.paths=[e],t.sheetInstances=A,t.embeddedFonts=new Pj(!1),this.finished=!0}getOutput(){return this.ctx.kicadSch}};function Boi(t){const A=t.schematic_component.list(),e=t.schematic_trace.list();let i=1/0,n=1/0,o=-1/0,s=-1/0;for(const g of A){const c=g.size?.width??0,I=g.size?.height??0;i=Math.min(i,g.center.x-c/2),n=Math.min(n,g.center.y-I/2),o=Math.max(o,g.center.x+c/2),s=Math.max(s,g.center.y+I/2)}for(const g of e)for(const c of g.edges)i=Math.min(i,c.from.x,c.to.x),n=Math.min(n,c.from.y,c.to.y),o=Math.max(o,c.from.x,c.to.x),s=Math.max(s,c.from.y,c.to.y);i===1/0&&(i=0,n=0,o=0,s=0);const r=(i+o)/2,a=(n+s)/2;return{center:{x:r,y:a},bounds:{minX:i,minY:n,maxX:o,maxY:s}}}var az=[{name:"A4",width:297,height:210},{name:"A3",width:420,height:297},{name:"A2",width:594,height:420},{name:"A1",width:841,height:594},{name:"A0",width:1189,height:841}];function Coi(t,A,e=20){const i=t+2*e,n=A+2*e;for(let o=0;o<az.length;o++){const s=az[o];if(i<=s.width&&n<=s.height)return s}return az[az.length-1]}var sue=class{ctx;pipeline;currentStageIndex=0;finished=!1;get currentStage(){return this.pipeline[this.currentStageIndex]}constructor(t){const e=_a(t),{center:i,bounds:n}=Boi(e),o=(n.maxX-n.minX)*15,s=(n.maxY-n.minY)*15,r=Coi(o,s),a=r.width/2,g=r.height/2;this.ctx={db:e,circuitJson:t,kicadSch:new umA({generator:"circuit-json-to-kicad",generatorVersion:"0.0.1"}),schematicPaperSize:r,c2kMatSch:iB(Qr(a,g),dh(15,-15),Qr(-i.x,-i.y))},this.pipeline=[new noi(t,this.ctx),new aoi(t,this.ctx),new goi(t,this.ctx),new coi(t,this.ctx),new Ioi(t,this.ctx),new loi(t,this.ctx)]}step(){if(!this.currentStage){this.finished=!0;return}this.currentStage.step(),this.currentStage.finished&&this.currentStageIndex++}runUntilFinished(){for(;!this.finished;)this.step()}getOutput(){return this.ctx.kicadSch}getOutputString(){return this.ctx.kicadSch.getString()}},Qoi=class extends vE{_step(){const{kicadPcb:t,db:A}=this.ctx;if(!t)throw new Error("KicadPcb instance not initialized in context");const i=A.pcb_board?.list()?.[0]?.num_layers??2;this.ctx.numLayers=i,t.version=20241229;const n=new Tj;n.size="A4",t.paper=n;const o=new fDA;o.thickness=1.6,t.general=o;const s=new pDA;s.padToMaskClearance=0,t.setup=s;const r=new yDA,a=[new Rl({index:0,name:"F.Cu",type:"signal"})];for(let g=1;g<i-1;g++)a.push(new Rl({index:g,name:`In${g}.Cu`,type:"signal"}));a.push(new Rl({index:31,name:"B.Cu",type:"signal"})),a.push(new Rl({index:32,name:"B.Adhes",type:"user"}),new Rl({index:33,name:"F.Adhes",type:"user"}),new Rl({index:34,name:"B.Paste",type:"user"}),new Rl({index:35,name:"F.Paste",type:"user"}),new Rl({index:36,name:"B.SilkS",type:"user"}),new Rl({index:37,name:"F.SilkS",type:"user"}),new Rl({index:38,name:"B.Mask",type:"user"}),new Rl({index:39,name:"F.Mask",type:"user"}),new Rl({index:40,name:"Dwgs.User",type:"user"}),new Rl({index:41,name:"Cmts.User",type:"user"}),new Rl({index:42,name:"Eco1.User",type:"user"}),new Rl({index:43,name:"Eco2.User",type:"user"}),new Rl({index:44,name:"Edge.Cuts",type:"user"}),new Rl({index:45,name:"Margin",type:"user"}),new Rl({index:46,name:"B.CrtYd",type:"user"}),new Rl({index:47,name:"F.CrtYd",type:"user"}),new Rl({index:48,name:"B.Fab",type:"user"}),new Rl({index:49,name:"F.Fab",type:"user"})),r.definitions=a,t.layers=r,this.finished=!0}getOutput(){return this.ctx.kicadPcb}},hoi=class extends vE{_step(){const{kicadPcb:t}=this.ctx;if(!t)throw new Error("KicadPcb instance not initialized in context");this.ctx.pcbNetMap=new Map;const A=new Map,e=this.ctx.db.source_net?.list()??[];for(const r of e){const a=r.subcircuit_connectivity_map_key||r.source_net_id;if(!a)continue;const g=r.name||r.source_net_id||"",c=g&&g.trim().length>0?g:a;A.set(a,c)}const i=this.ctx.db.source_trace?.list()??[];for(const r of i){let a=r.subcircuit_connectivity_map_key;if(!a&&r.connected_source_net_ids?.length)for(const g of r.connected_source_net_ids){const c=this.ctx.db.source_net?.get(g);if(c?.subcircuit_connectivity_map_key&&c.subcircuit_connectivity_map_key.length>0){a=c.subcircuit_connectivity_map_key;break}}if(a&&!A.has(a)){const g=r.display_name||r.source_trace_id||"",c=g&&g.trim().length>0?g:a;A.set(a,c)}}const n=Array.from(A.entries()).sort((r,a)=>r[0].localeCompare(a[0])),o=[];o.push(new sz(0,""));let s=1;for(const[r,a]of n){const g=new sz(s,a);o.push(g);const c={id:s,name:a};this.ctx.pcbNetMap.set(r,c),s++}t.nets=o,this.finished=!0}getOutput(){return this.ctx.kicadPcb}};function Eoi(t){let A=0;for(let i=0;i<t.length;i++){const n=t.charCodeAt(i);A=(A<<5)-A+n,A=A&A}let e="";for(let i=0;i<4;i++){let n=A;for(let o=0;o<t.length;o++)n=(n<<5)-n+t.charCodeAt(o)+i*31,n=n&n;e+=Math.abs(n).toString(16).padStart(8,"0")}return e}function VD(t){const A=Eoi(t);return`${A.slice(0,8)}-${A.slice(8,12)}-${A.slice(12,16)}-${A.slice(16,20)}-${A.slice(20,32)}`}function uoi(t,A){const e=[];for(const i of t){const n=i.center.x-A.x,o=-(i.center.y-A.y),r={top:"F.SilkS",bottom:"B.SilkS"}[i.layer]||i.layer||"F.SilkS",a=new ewA({center:{x:n,y:o},end:{x:n+i.radius,y:o},layer:r,stroke:new WD,fill:!1});a.stroke&&(a.stroke.width=i.stroke_width||.05,a.stroke.type="default"),e.push(a)}return e}function doi(t,A){const e=[];for(const i of t){const n=i.center.x-A.x,o=-(i.center.y-A.y),r={top:"F.CrtYd",bottom:"B.CrtYd"}[i.layer]||"F.CrtYd",a=new ewA({center:{x:n,y:o},end:{x:n+i.radius,y:o},layer:r,stroke:new WD,fill:!1});a.stroke&&(a.stroke.width=.05,a.stroke.type="default"),e.push(a)}return e}function poi(t,A){const e=[];for(const i of t){const n=i.center.x-A.x,o=-(i.center.y-A.y),s=i.width/2,r=i.height/2,g={top:"F.Fab",bottom:"B.Fab"}[i.layer]||i.layer||"F.Fab",c=new zj({start:{x:n-s,y:o-r},end:{x:n+s,y:o+r},layer:g,stroke:new WD,fill:!1});c.stroke&&(c.stroke.width=i.stroke_width||.1,c.stroke.type="default"),e.push(c)}return e}function foi(t,A){const e=[];for(const i of t){const n=i.center.x-A.x,o=-(i.center.y-A.y),s=i.width/2,r=i.height/2,a="F.Fab",g=new zj({start:{x:n-s,y:o-r},end:{x:n+s,y:o+r},layer:a,stroke:new WD,fill:!1});g.stroke&&(g.stroke.width=i.stroke_width||.1,g.stroke.type="default"),e.push(g)}return e}function yoi(t,A){const e=[];for(const i of t){const n=i.center.x-A.x,o=-(i.center.y-A.y),s=i.width/2,r=i.height/2,g={top:"F.CrtYd",bottom:"B.CrtYd"}[i.layer]||"F.CrtYd",c=new zj({start:{x:n-s,y:o-r},end:{x:n+s,y:o+r},layer:g,stroke:new WD,fill:!1});c.stroke&&(c.stroke.width=.05,c.stroke.type="default"),e.push(c)}return e}function moi(t,A){const e=[];for(const i of t){if(!i.outline||i.outline.length<2)continue;const o={top:"F.CrtYd",bottom:"B.CrtYd"}[i.layer]||"F.CrtYd",s=i.outline.map(g=>{const c=g.x-A.x,I=-(g.y-A.y);return new HQ(c,I)}),r=new bhe;r.points=new TC(s),r.layer=o,r.fill=!1;const a=new WD;a.width=.05,a.type="default",r.stroke=a,e.push(r)}return e}function woi({textElement:t,componentCenter:A,componentRotation:e=0}){if(!t.text||!t.anchor_position)return null;const i=t.anchor_position.x-A.x,n=-(t.anchor_position.y-A.y),o=e!==0?Gm(e*Math.PI/180):Gu(),s=Pt(o,{x:i,y:n}),r={x:s.x,y:s.y},g={top:"F.SilkS",bottom:"B.SilkS"}[t.layer]||t.layer||"F.SilkS",c=(t.font_size||1)/1.5,I=new im;I.size={width:c,height:c};const l=new tm({font:I}),B=t.ccw_rotation||0;return new qmA({type:"user",text:t.text,position:{x:r.x,y:r.y,angle:B},layer:g,effects:l})}function Doi(t,A,e,i){const n=[];for(const o of t){const s=woi({textElement:o,componentCenter:A,componentRotation:e});s&&(i&&o.text===i&&(s.type="reference"),n.push(s))}return n}function Soi(t,A,e){const i=[];for(const n of t){const o=n.anchor_position.x-A.x,s=-(n.anchor_position.y-A.y),r=e!==0?Gm(e*Math.PI/180):Gu(),a=Pt(r,{x:o,y:s}),g=n.font_size||1,c=new im;c.size={width:g,height:g};const I=new tm({font:c}),l=new qmA({type:"user",text:n.text,position:{x:a.x,y:a.y,angle:0},layer:"F.Fab",effects:I});i.push(l)}return i}function boi(t,A){const e=[],i=t.model_step_url||t.model_wrl_url;if(!i)return e;const n=new QwA(i);if(t.position&&(n.offset={x:(t.position.x||0)-A.x,y:-((t.position.y||0)-A.y),z:t.position.z||0}),t.rotation&&(n.rotate={x:t.rotation.x||0,y:t.rotation.y||0,z:t.rotation.z||0}),t.model_unit_to_mm_scale_factor){const o=t.model_unit_to_mm_scale_factor;n.scale={x:o,y:o,z:o}}return e.push(n),e}function xoi({pcbPad:t,componentCenter:A,padNumber:e,componentRotation:i=0,netInfo:n,componentId:o}){let s,r;if("x"in t&&"y"in t)s=t.x,r=t.y;else if("points"in t&&Array.isArray(t.points)){const u=t.points;s=u.reduce((d,p)=>d+p.x,0)/u.length,r=u.reduce((d,p)=>d+p.y,0)/u.length}else throw new Error("Pad must have either x/y coordinates or points array");const a=iB(i!==0?Gm(i*Math.PI/180):{a:1,b:0,c:0,d:1,e:0,f:0},dh(1,-1),Qr(-A.x,-A.y)),g=Pt(a,{x:s,y:r}),I={top:"F.Cu",bottom:"B.Cu"}[t.layer]||"F.Cu";let l,B,C,Q;if(t.shape==="circle")l="circle",B=["radius"in t?t.radius*2:.5,"radius"in t?t.radius*2:.5];else if(t.shape==="polygon"&&"points"in t){const u=t.points,d=iB(dh(1,-1),Qr(-s,-r)),p=u.map(w=>{const D=Pt(d,{x:w.x,y:w.y});return new HQ(D.x,D.y)}),m=new YmA;m.contours=[new TC(p)],m.width=0,m.filled=!0,Q=new che,Q.addGraphic(m),l="custom",C=new WQe,C.anchor="circle",B=[.2,.2]}else l="rect",B=["width"in t?t.width:.5,"height"in t?t.height:.5];const h=`pad:${o}:${e}:${g.x},${g.y}`,E=new jj({number:String(e),padType:"smd",shape:l,at:[g.x,g.y,0],size:B,layers:[`${I}`,`${I==="F.Cu"?"F":"B"}.Paste`,`${I==="F.Cu"?"F":"B"}.Mask`],uuid:VD(h)});return C&&(E.options=C),Q&&(E.primitives=Q),n&&(E.net=new MmA(n.id,n.name)),E}function _oi(t,A,e,i,n,o){const s=[];let r=n;for(const a of t){const g=o(a.pcb_port_id),c=xoi({pcbPad:a,componentCenter:A,padNumber:r,componentRotation:e,netInfo:g,componentId:i});s.push(c),r++}return{pads:s,nextPadNumber:r}}function koi({platedHole:t,componentCenter:A,padNumber:e,componentRotation:i=0,netInfo:n,componentId:o}){if(!("x"in t&&"y"in t))return null;const s=t.x-A.x,r=-(t.y-A.y),a=i!==0?Gm(i*Math.PI/180):Gu(),g=Pt(a,{x:s,y:r});let c="circle",I,l,B=0;const C="hole_offset_x"in t||"hole_offset_y"in t;let Q;if(C){const u={x:t.hole_offset_x??0,y:t.hole_offset_y??0};(u.x!==0||u.y!==0)&&(Q=Pt(a,{x:-u.x,y:u.y}))}t.shape==="circle"?(c="circle",I=[t.outer_diameter,t.outer_diameter],l=new ZD({diameter:t.hole_diameter,offset:Q})):t.shape==="pill"||t.shape==="oval"?(c="oval",I=[t.outer_width,t.outer_height],l=new ZD({oval:!0,diameter:t.hole_width,width:t.hole_height,offset:Q})):t.shape==="pill_hole_with_rect_pad"?(c="rect",I=[t.rect_pad_width,t.rect_pad_height],l=new ZD({oval:!0,diameter:t.hole_width,width:t.hole_height,offset:Q})):t.shape==="circular_hole_with_rect_pad"?(c="rect",I=[t.rect_pad_width,t.rect_pad_height],l=new ZD({diameter:t.hole_diameter,offset:Q})):t.shape==="rotated_pill_hole_with_rect_pad"?(c="rect",I=[t.rect_pad_width,t.rect_pad_height],l=new ZD({oval:!0,diameter:t.hole_width,width:t.hole_height,offset:Q}),B=t.rect_ccw_rotation||0):(c="circle",I=[1.6,1.6],l=new ZD({diameter:.8,offset:Q}));const h=`thruhole:${o}:${e}:${g.x},${g.y}`,E=new jj({number:String(e),padType:"thru_hole",shape:c,at:[g.x,g.y,B],size:I,drill:l,layers:["*.Cu","*.Mask"],removeUnusedLayers:!1,uuid:VD(h)});return n&&(E.net=new MmA(n.id,n.name)),E}function Foi(t,A,e,i,n,o){const s=[];let r=n;for(const a of t){const g=o(a.pcb_port_id),c=koi({platedHole:a,componentCenter:A,padNumber:r,componentRotation:e,netInfo:g,componentId:i});c&&(s.push(c),r++)}return{pads:s,nextPadNumber:r}}function Goi({pcbHole:t,componentCenter:A,componentRotation:e=0}){if(!("x"in t&&"y"in t))return null;const i=t.x-A.x,n=-(t.y-A.y),o=e!==0?Gm(e*Math.PI/180):Gu(),s=Pt(o,{x:i,y:n});let r="circle",a,g;if(t.hole_shape==="circle"){r="circle";const c=t.hole_diameter;a=[c,c],g=new ZD({diameter:c})}else if(t.hole_shape==="oval"){r="oval";const c=t.hole_width,I=t.hole_height;a=[c,I],g=new ZD({oval:!0,diameter:c,width:I})}else{r="circle";const c="hole_diameter"in t?t.hole_diameter:1;a=[c,c],g=new ZD({diameter:c})}return new jj({number:"",padType:"np_thru_hole",shape:r,at:[s.x,s.y,0],size:a,drill:g,layers:["*.Cu","*.Mask"],removeUnusedLayers:!1,uuid:crypto.randomUUID()})}function Roi(t,A,e){const i=[];for(const n of t){const o=Goi({pcbHole:n,componentCenter:A,componentRotation:e});o&&i.push(o)}return i}var Moi=class extends vE{componentsProcessed=0;pcbComponents=[];getNetInfoForPcbPort(t){if(!t)return;const A=this.ctx.db.pcb_port?.get(t);if(!A)return;const e=A.source_port_id;if(!e)return;const i=this.ctx.db.source_port?.get(e);if(!i)return;const n=i.subcircuit_connectivity_map_key;if(n)return this.ctx.pcbNetMap?.get(n)}getCadComponentForPcbComponent(t){return(this.ctx.db.cad_component?.list()||[]).find(e=>e.pcb_component_id===t)}constructor(t,A){super(t,A),this.pcbComponents=this.ctx.db.pcb_component.list()}_step(){const{kicadPcb:t,c2kMatPcb:A}=this.ctx;if(!t)throw new Error("KicadPcb instance not initialized in context");if(!A)throw new Error("PCB transformation matrix not initialized in context");if(this.componentsProcessed>=this.pcbComponents.length){this.finished=!0;return}const e=this.pcbComponents[this.componentsProcessed],i=e.source_component_id?this.ctx.db.source_component.get(e.source_component_id):null,n=this.getCadComponentForPcbComponent(e.pcb_component_id),o=i?KG(i,n):"Unknown",s=Pt(A,{x:e.center.x,y:e.center.y}),r=`footprint:${e.pcb_component_id}:${s.x},${s.y}`,a=new uwA({libraryLink:`tscircuit:${o}`,layer:"F.Cu",at:[s.x,s.y,e.rotation||0],uuid:VD(r)}),g=a.fpTexts,c=this.ctx.db.pcb_silkscreen_text?.list().filter(H=>H.pcb_component_id===e.pcb_component_id)||[];g.push(...Doi(c,e.center,e.rotation||0,i?.name));const I=this.ctx.db.pcb_note_text?.list().filter(H=>H.pcb_component_id===e.pcb_component_id)||[];g.push(...Soi(I,e.center,e.rotation||0)),a.fpTexts=g;const l=a.fpPads,B=H=>this.getNetInfoForPcbPort(H),C=this.ctx.db.pcb_smtpad?.list().filter(H=>H.pcb_component_id===e.pcb_component_id)||[],{pads:Q,nextPadNumber:h}=_oi(C,e.center,e.rotation||0,e.pcb_component_id,1,B);l.push(...Q);const E=this.ctx.db.pcb_plated_hole?.list().filter(H=>H.pcb_component_id===e.pcb_component_id)||[],{pads:u}=Foi(E,e.center,e.rotation||0,e.pcb_component_id,h,B);l.push(...u);const d=this.ctx.db.pcb_hole?.list().filter(H=>H.subcircuit_id===e.subcircuit_id)||[],p=Roi(d,e.center,e.rotation||0);l.push(...p),a.fpPads=l;const m=this.ctx.db.pcb_silkscreen_circle?.list().filter(H=>H.pcb_component_id===e.pcb_component_id)||[],w=a.fpCircles??[];w.push(...uoi(m,e.center));const D=this.ctx.db.pcb_courtyard_circle?.list().filter(H=>H.pcb_component_id===e.pcb_component_id)||[];w.push(...doi(D,e.center)),a.fpCircles=w;const b=this.ctx.db.pcb_fabrication_note_rect?.list().filter(H=>H.pcb_component_id===e.pcb_component_id)||[],k=a.fpRects??[];k.push(...poi(b,e.center));const x=this.ctx.db.pcb_note_rect?.list().filter(H=>H.pcb_component_id===e.pcb_component_id)||[];k.push(...foi(x,e.center));const N=this.ctx.db.pcb_courtyard_rect?.list().filter(H=>H.pcb_component_id===e.pcb_component_id)||[];k.push(...yoi(N,e.center)),a.fpRects=k;const M=this.ctx.db.pcb_courtyard_outline?.list().filter(H=>H.pcb_component_id===e.pcb_component_id)||[],L=moi(M,e.center);if(L.length>0&&(a.fpPolys=L),n){const H=boi(n,e.center);H.length>0&&(a.models=H)}const Y=t.footprints;Y.push(a),t.footprints=Y,this.componentsProcessed++}getOutput(){return this.ctx.kicadPcb}},Noi={top:"F.Cu",bottom:"B.Cu",inner1:"In1.Cu",inner2:"In2.Cu",inner3:"In3.Cu",inner4:"In4.Cu",inner5:"In5.Cu",inner6:"In6.Cu"};function voi(t){return t&&(Noi[t]||t)||"F.Cu"}function Loi(t){const A=["F.Cu"];for(let e=1;e<t-1;e++)A.push(`In${e}.Cu`);return A.push("B.Cu"),A}var Uoi=class extends vE{tracesProcessed=0;pcbTraces=[];constructor(t,A){super(t,A),this.pcbTraces=this.ctx.db.pcb_trace.list()}_step(){const{kicadPcb:t,c2kMatPcb:A,pcbNetMap:e}=this.ctx;if(!t)throw new Error("KicadPcb instance not initialized in context");if(!A)throw new Error("PCB transformation matrix not initialized in context");if(this.tracesProcessed>=this.pcbTraces.length){this.finished=!0;return}const i=this.pcbTraces[this.tracesProcessed];if(!i.route||i.route.length<2){this.tracesProcessed++;return}let n=i.route[0]?.layer;for(let o=0;o<i.route.length-1;o++){const s=i.route[o],r=i.route[o+1],a=Pt(A,{x:s.x,y:s.y}),g=Pt(A,{x:r.x,y:r.y});let c;if(e){let h=i.subcircuit_connectivity_map_key;if(!h&&i.source_trace_id){const E=this.ctx.db.source_trace?.get(i.source_trace_id);if(E&&(h=E.subcircuit_connectivity_map_key,!h&&E.connected_source_net_ids?.length))for(const u of E.connected_source_net_ids){const d=this.ctx.db.source_net?.get(u);if(d?.subcircuit_connectivity_map_key){h=d.subcircuit_connectivity_map_key;break}}}if(!h&&typeof i.connection_name=="string"){const E=this.ctx.db.source_net?.get(i.connection_name);E?.subcircuit_connectivity_map_key&&(h=E.subcircuit_connectivity_map_key)}h&&(c=e.get(h))}const I=s.layer??r.layer??n,l=voi(I),B=`segment:${a.x},${a.y}:${g.x},${g.y}:${l}:${c?.id??0}`,C=new FwA({start:{x:a.x,y:a.y},end:{x:g.x,y:g.y},layer:l,width:i.width||.25,net:new iz(c?.id??0),uuid:VD(B)}),Q=t.segments;Q.push(C),t.segments=Q,s.layer&&(n=s.layer),r.layer&&(n=r.layer)}this.tracesProcessed++}getOutput(){return this.ctx.kicadPcb}},Hoi=class extends vE{viasProcessed=0;pcbVias=[];constructor(t,A){super(t,A),this.pcbVias=this.ctx.db.pcb_via?.list()||[]}_step(){const{kicadPcb:t,c2kMatPcb:A,pcbNetMap:e}=this.ctx;if(!t)throw new Error("KicadPcb instance not initialized in context");if(!A)throw new Error("PCB transformation matrix not initialized in context");if(this.viasProcessed>=this.pcbVias.length){this.finished=!0;return}const i=this.pcbVias[this.viasProcessed],n=Pt(A,{x:i.x,y:i.y});let o;if(e){let I=i.subcircuit_connectivity_map_key;if(!I&&i.pcb_trace_id){const l=this.ctx.db.pcb_trace?.get(i.pcb_trace_id);if(l&&("subcircuit_connectivity_map_key"in l&&(I=l.subcircuit_connectivity_map_key),!I&&l.source_trace_id)){const B=this.ctx.db.source_trace?.get(l.source_trace_id);if(B&&("subcircuit_connectivity_map_key"in B&&(I=B.subcircuit_connectivity_map_key),!I&&B.connected_source_net_ids?.length))for(const C of B.connected_source_net_ids){const Q=this.ctx.db.source_net?.get(C);if(Q?.subcircuit_connectivity_map_key){I=Q.subcircuit_connectivity_map_key;break}}}}if(!I&&i.connection_name){const l=this.ctx.db.source_net?.get(i.connection_name);l?.subcircuit_connectivity_map_key&&(I=l.subcircuit_connectivity_map_key)}I&&(o=e.get(I))}const s=this.ctx.numLayers??2,r=i.layers?i.layers.map(I=>I==="top"?"F.Cu":I==="bottom"?"B.Cu":`In${I.replace("inner","")}.Cu`):Loi(s),a=`via:${n.x},${n.y}:${i.outer_diameter||.8}:${i.hole_diameter||.4}:${o?.id??0}`,g=new bDA({at:[n.x,n.y],size:i.outer_diameter||.8,drill:i.hole_diameter||.4,layers:r,net:new SDA(o?.id??0),uuid:VD(a)}),c=t.vias;c.push(g),t.vias=c,this.viasProcessed++}getOutput(){return this.ctx.kicadPcb}};function Yoi({textElement:t,c2kMatPcb:A}){if(!t.text||!t.anchor_position)return null;const e=Pt(A,{x:t.anchor_position.x,y:t.anchor_position.y}),n={top:"F.Fab",bottom:"B.Fab"}[t.layer]||t.layer||"F.Fab",o=(t.font_size||1)/1.5,s=new im;s.size={width:o,height:o};const r=new zJ,a=t.anchor_alignment||"center";switch(a){case"top_left":r.horizontal="left",r.vertical="top";break;case"top_right":r.horizontal="right",r.vertical="top";break;case"bottom_left":r.horizontal="left",r.vertical="bottom";break;case"bottom_right":r.horizontal="right",r.vertical="bottom";break}const g=new tm({font:s});a!=="center"&&(g.justify=r);const c=new zg([e.x,e.y,0]),I=new tz({text:t.text,layer:n,effects:g});return I.position=c,I}function Joi({textElement:t,c2kMatPcb:A}){if(!t.text||!t.anchor_position)return null;const e=Pt(A,{x:t.anchor_position.x,y:t.anchor_position.y}),n={top:"F.SilkS",bottom:"B.SilkS"}[t.layer]||t.layer||"F.SilkS",o=(t.font_size||1)/1.5,s=new im;s.size={width:o,height:o};const r=new zJ,a=t.anchor_alignment||"center";switch(a){case"top_left":r.horizontal="left",r.vertical="top";break;case"top_right":r.horizontal="right",r.vertical="top";break;case"bottom_left":r.horizontal="left",r.vertical="bottom";break;case"bottom_right":r.horizontal="right",r.vertical="bottom";break}const g=new tm({font:s});a!=="center"&&(g.justify=r);const c=t.ccw_rotation||0,I=new zg([e.x,e.y,c]),l=new tz({text:t.text,layer:n,effects:g});return l.position=I,l}var Toi=class extends vE{_step(){const{kicadPcb:t,c2kMatPcb:A}=this.ctx;if(!t)throw new Error("KicadPcb instance not initialized in context");if(!A)throw new Error("PCB transformation matrix not initialized in context");const e=this.ctx.db.pcb_silkscreen_path?.list()||[];for(const s of e)if(!(!s.route||s.route.length<2))for(let r=0;r<s.route.length-1;r++){const a=s.route[r],g=s.route[r+1];if(!a||!g)continue;const c=Pt(A,{x:a.x,y:a.y}),I=Pt(A,{x:g.x,y:g.y}),B={top:"F.SilkS",bottom:"B.SilkS"}[s.layer]||s.layer||"F.SilkS",C=new ez({start:{x:c.x,y:c.y},end:{x:I.x,y:I.y},layer:B,width:s.stroke_width||.15}),Q=t.graphicLines;Q.push(C),t.graphicLines=Q}const i=this.ctx.db.pcb_silkscreen_text?.list().filter(s=>!s.pcb_component_id)||[];for(const s of i){const r=Joi({textElement:s,c2kMatPcb:A});if(r){const a=t.graphicTexts;a.push(r),t.graphicTexts=a}}const n=this.ctx.db.pcb_fabrication_note_text?.list()||[];for(const s of n){const r=Yoi({textElement:s,c2kMatPcb:A});if(r){const a=t.graphicTexts;a.push(r),t.graphicTexts=a}}const o=this.ctx.db.pcb_board?.list()||[];if(o.length>0){const s=o[0];if(!s){this.finished=!0;return}let r;if(s.outline&&s.outline.length>0)r=s.outline;else{const g=s.width?s.width/2:0,c=s.height?s.height/2:0;r=[{x:s.center.x-g,y:s.center.y-c},{x:s.center.x+g,y:s.center.y-c},{x:s.center.x+g,y:s.center.y+c},{x:s.center.x-g,y:s.center.y+c}]}const a=r.map(g=>Pt(A,g));for(let g=0;g<a.length;g++){const c=a[g],I=a[(g+1)%a.length];if(!c||!I)continue;const l=new ez({start:{x:c.x,y:c.y},end:{x:I.x,y:I.y},layer:"Edge.Cuts",width:.1}),B=t.graphicLines;B.push(l),t.graphicLines=B}}this.finished=!0}getOutput(){return this.ctx.kicadPcb}},rue=class{ctx;pipeline;currentStageIndex=0;finished=!1;get currentStage(){return this.pipeline[this.currentStageIndex]}constructor(t){this.ctx={db:_a(t),circuitJson:t,kicadPcb:new xDA({generator:"circuit-json-to-kicad",generatorVersion:"0.0.1"}),c2kMatPcb:iB(Qr(100,100),dh(1,-1))},this.pipeline=[new Qoi(t,this.ctx),new hoi(t,this.ctx),new Moi(t,this.ctx),new Uoi(t,this.ctx),new Hoi(t,this.ctx),new Toi(t,this.ctx)]}step(){if(!this.currentStage){this.finished=!0;return}this.currentStage.step(),this.currentStage.finished&&this.currentStageIndex++}runUntilFinished(){for(;!this.finished;)this.step()}getOutput(){return this.ctx.kicadPcb}getOutputString(){return this.ctx.kicadPcb.getString()}},Koi=class{ctx;project;constructor(t,A={}){const e=A.projectName??t?.project?.name??"circuit-json-project",i=A.schematicFilename??`${e}.kicad_sch`,n=A.pcbFilename??`${e}.kicad_pcb`,o=new Date().toISOString();this.ctx={db:_a(t),circuitJson:t},this.project={version:1,head:{generator:"circuit-json-to-kicad",generator_version:"0.0.1",project_name:e,created:o,modified:o},meta:{version:1},text_variables:{},libraries:{pinned_symbol_libs:[],pinned_footprint_libs:[]},boards:[],cvpcb:{meta:{version:0}},erc:{meta:{version:0},erc_exclusions:[]},net_settings:{meta:{version:1},last_net_id:0,classes:[]},pcbnew:{page_layout_descr_file:"",last_paths:{}},schematic:{meta:{version:1},page_layout_descr_file:"",last_opened_files:[i]},board:{meta:{version:1},last_opened_board:n},sheets:[[Math.random().toString(36).substring(2,15),"Root"]]}}runUntilFinished(){}getOutput(){return this.project}getOutputString(){return`${JSON.stringify(this.project,null,2)}
|
|
5827
|
+
`}},Poi=class extends vE{_step(){const t=new sue(this.ctx.circuitJson);t.runUntilFinished(),this.ctx.kicadSchString=t.getOutputString();const A=new rue(this.ctx.circuitJson);A.runUntilFinished(),this.ctx.kicadPcbString=A.getOutputString(),this.finished=!0}getOutput(){return this.ctx.libraryOutput}},qoi=class extends vE{isCustomSymbol(t){return t?.startsWith("Custom:")??!1}_step(){const t=this.ctx.kicadSchString,A=this.ctx.fpLibraryName??"tscircuit";if(!t)throw new Error("Schematic content not available. Run GenerateKicadSchAndPcbStage first.");const e=new Map;try{const n=Aue(t).find(r=>r instanceof umA);if(!n){this.ctx.symbolEntries=[],this.finished=!0;return}const o=n.libSymbols;if(!o){this.ctx.symbolEntries=[],this.finished=!0;return}const s=o.symbols??[];for(const r of s){const a=this.isCustomSymbol(r.libraryId),g=this.sanitizeSymbolName(r.libraryId);e.has(g)||(r.libraryId=g,this.updateFootprintProperty(r,A),a||this.snapPinPositionsToGrid(r),e.set(g,{symbolName:g,symbol:r,isBuiltin:!a}))}}catch(i){console.warn("Failed to parse schematic for symbol extraction:",i)}this.ctx.symbolEntries=Array.from(e.values()),this.finished=!0}updateFootprintProperty(t,A){const e=t.properties??[];for(const i of e)if(i.key==="Footprint"&&i.value){const n=i.value.split(":");n.length>1?i.value=`${A}:${n[1]}`:i.value.trim()&&(i.value=`${A}:${i.value}`)}}sanitizeSymbolName(t){if(!t)return"symbol";const A=t.split(":");return(A.length>1?A[1]:A[0])?.replace(/[\\\/]/g,"-").trim()||"symbol"}snapPinPositionsToGrid(t){for(const e of t.subSymbols??[]){for(const i of e.pins??[])i.at&&(i.at.x=Math.round(i.at.x/1.27)*1.27,i.at.y=Math.round(i.at.y/1.27)*1.27);for(const i of e.polylines??[])if(i.points?.points)for(const n of i.points.points)"x"in n&&"y"in n&&(n.x=Math.round(n.x/1.27)*1.27,n.y=Math.round(n.y/1.27)*1.27)}}getOutput(){return this.ctx.libraryOutput}},Ooi=20240108,Woi="pcbnew",Zoi="8.0";function Voi(t){const A=t.split(/[/\\]/);return A[A.length-1]||t}var joi=class extends vE{findCustomFootprintNames(){const t=new Set,A=this.ctx.db.cad_component?.list()??[],e=this.ctx.db.source_component;for(const i of A)if(!i.footprinter_string){const n=i.source_component_id?e?.get(i.source_component_id):null;if(n){const o=KG(n,i);t.add(o)}}return t}_step(){const t=this.ctx.kicadPcbString,A=this.ctx.fpLibraryName??"tscircuit";if(!t)throw new Error("PCB content not available. Run GenerateKicadSchAndPcbStage first.");const e=this.findCustomFootprintNames(),i=new Map;try{const o=Aue(t).find(r=>r instanceof xDA);if(!o){this.ctx.footprintEntries=[],this.finished=!0;return}const s=o.footprints??[];for(const r of s){const a=this.sanitizeFootprint({footprint:r,fpLibraryName:A,customFootprintNames:e});i.has(a.footprintName)||i.set(a.footprintName,a)}}catch(n){console.warn("Failed to parse PCB for footprint extraction:",n)}this.ctx.footprintEntries=Array.from(i.values()),this.finished=!0}sanitizeFootprint({footprint:t,fpLibraryName:A,customFootprintNames:e}){const n=(t.libraryLink??"footprint").split(":"),o=(n.length>1?n[1]:n[0])?.replace(/[\\\/]/g,"-").trim()||"footprint",s=!e.has(o);if(t.libraryLink=o,t.position=zg.from([0,0,0]),t.locked=!1,t.placed=!1,t.version=Ooi,t.generator=Woi,t.generatorVersion=Zoi,t.descr||(t.descr=""),t.tags||(t.tags=""),t.embeddedFonts||(t.embeddedFonts=new Pj(!1)),!t.attr){const d=new YQe,p=(t.fpPads??[]).map(m=>m.padType);p.some(m=>m.includes("thru_hole"))?d.type="through_hole":p.some(m=>m.includes("smd"))&&(d.type="smd"),t.attr=d}t.uuid=void 0,t.path=void 0,t.sheetfile=void 0,t.sheetname=void 0;const r=new im;r.size={width:1.27,height:1.27},r.thickness=.15;const a=new tm({font:r}),g=t.fpPads??[];let c=0,I=0;for(const d of g){const p=d.at,m=d.size;if(p&&m){const w=p.y??0,D=m.height??0,b=w-D/2,k=w+D/2;c=Math.min(c,b),I=Math.max(I,k)}}const l=c-.5,B=I+.5;t.properties=[new G1({key:"Reference",value:"REF**",position:[0,l,0],layer:"F.SilkS",uuid:VD(`${o}-property-Reference`),effects:a}),new G1({key:"Value",value:"Val**",position:[0,B,0],layer:"F.Fab",uuid:VD(`${o}-property-Value`),effects:a}),new G1({key:"Datasheet",value:"",position:[0,0,0],layer:"F.Fab",hidden:!0,uuid:VD(`${o}-property-Datasheet`),effects:a}),new G1({key:"Description",value:"",position:[0,0,0],layer:"F.Fab",hidden:!0,uuid:VD(`${o}-property-Description`),effects:a})];const C=t.fpTexts??[];for(const d of C)d.uuid=void 0,d.type==="reference"?d.text="REF**":d.type==="value"&&d.text.trim().length===0&&(d.text=o);t.fpTexts=C;const Q=t.fpPads??[];for(let d=0;d<Q.length;d++){const p=Q[d];p&&(p.uuid=VD(`${o}-pad-${p.number??d}`),p.net=void 0)}t.fpPads=Q;const h=t.models??[],E=[],u=[];for(const d of h)if(d.path){const p=Voi(d.path),m=`../../3dmodels/${A}.3dshapes/${p}`,w=new QwA(m);d.offset&&(w.offset=d.offset),d.scale&&(w.scale=d.scale),d.rotate&&(w.rotate=d.rotate),E.push(w),u.push(d.path)}return t.models=E,{footprintName:o,kicadModString:t.getString(),model3dSourcePaths:u,isBuiltin:s}}getOutput(){return this.ctx.libraryOutput}},zoi=20211014,Xoi="circuit-json-to-kicad",$oi=class extends vE{_step(){const t=this.ctx.symbolEntries??[],A=this.generateSymbolLibrary(t);this.ctx.libraryOutput||(this.ctx.libraryOutput={kicadSymString:"",symbols:[],footprints:[],fpLibTableString:"",symLibTableString:"",model3dSourcePaths:[]}),this.ctx.libraryOutput.kicadSymString=A,this.finished=!0}generateSymbolLibrary(t){return new dQe({version:zoi,generator:Xoi,symbols:t.map(e=>e.symbol)}).getString()}getOutput(){return this.ctx.libraryOutput}},Asi=class extends vE{_step(){const t=this.ctx.libraryName??"tscircuit",A=this.ctx.fpLibraryName??"tscircuit",e=this.ctx.footprintEntries??[],i=this.ctx.symbolEntries??[],n=new Set;for(const r of e)for(const a of r.model3dSourcePaths)n.add(a);const o=this.generateFpLibTable(A),s=this.generateSymLibTable(t);this.ctx.libraryOutput||(this.ctx.libraryOutput={kicadSymString:"",symbols:[],footprints:[],fpLibTableString:"",symLibTableString:"",model3dSourcePaths:[]}),this.ctx.libraryOutput.symbols=i,this.ctx.libraryOutput.footprints=e,this.ctx.libraryOutput.fpLibTableString=o,this.ctx.libraryOutput.symLibTableString=s,this.ctx.libraryOutput.model3dSourcePaths=Array.from(n),this.finished=!0}generateFpLibTable(t){return`(fp_lib_table
|
|
5828
5828
|
(version 7)
|
|
5829
5829
|
(lib (name "${t}") (type "KiCad") (uri "\${KIPRJMOD}/${t}.pretty") (options "") (descr "Generated by circuit-json-to-kicad"))
|
|
5830
5830
|
)
|
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.1586",
|
|
6
6
|
"exports": {
|
|
7
7
|
".": "./dist/preview.js",
|
|
8
8
|
"./preview": "./dist/preview.js",
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
"circuit-json-to-bom-csv": "^0.0.8",
|
|
70
70
|
"circuit-json-to-gerber": "^0.0.46",
|
|
71
71
|
"circuit-json-to-gltf": "^0.0.56",
|
|
72
|
-
"circuit-json-to-kicad": "^0.0.
|
|
72
|
+
"circuit-json-to-kicad": "^0.0.69",
|
|
73
73
|
"circuit-json-to-lbrn": "^0.0.4",
|
|
74
74
|
"circuit-json-to-pnp-csv": "^0.0.7",
|
|
75
75
|
"circuit-json-to-step": "^0.0.13",
|