@tscircuit/eval 0.0.321 → 0.0.322

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.
@@ -948,7 +948,7 @@ Using plugins:`),be.forEach(function(je){vbt(je,Q,ge)}),I||console.log("\nUsing
948
948
  :is(button, input, select, textarea, optgroup, option)[disabled],
949
949
  optgroup[disabled] > option,
950
950
  fieldset[disabled]:not(fieldset[disabled] legend:first-of-type *)
951
- )`,enabled:":not(:disabled)",checked:":is(:is(input[type=radio], input[type=checkbox])[checked], option:selected)",required:":is(input, select, textarea)[required]",optional:":is(input, select, textarea):not([required])",selected:"option:is([selected], select:not([multiple]):not(:has(> option[selected])) > :first-of-type)",checkbox:"[type=checkbox]",file:"[type=file]",password:"[type=password]",radio:"[type=radio]",reset:"[type=reset]",image:"[type=image]",submit:"[type=submit]",parent:":not(:empty)",header:":is(h1, h2, h3, h4, h5, h6)",button:":is(button, input[type=button])",input:":is(input, textarea, select, button)",text:"input:is(:not([type!='']), [type=text])"};var Ju=Or(e1(),1);var aY={};function sY(r,e){return r===Ju.default.falseFunc?Ju.default.falseFunc:a=>e.isTag(a)&&r(a)}function iY(r,e){let a=e.getSiblings(r);if(a.length<=1)return[];let s=a.indexOf(r);return s<0||s===a.length-1?[]:a.slice(s+1).filter(e.isTag)}function nY(r){return{xmlMode:!!r.xmlMode,lowerCaseAttributeNames:!!r.lowerCaseAttributeNames,lowerCaseTags:!!r.lowerCaseTags,quirksMode:!!r.quirksMode,cacheResults:!!r.cacheResults,pseudos:r.pseudos,adapter:r.adapter,equals:r.equals}}var rY=(r,e,a,s,l)=>{let d=l(e,nY(a),s);return d===Ju.default.trueFunc?r:d===Ju.default.falseFunc?Ju.default.falseFunc:x=>d(x)&&r(x)},HR={is:rY,matches:rY,where:rY,not(r,e,a,s,l){let d=l(e,nY(a),s);return d===Ju.default.falseFunc?r:d===Ju.default.trueFunc?Ju.default.falseFunc:x=>!d(x)&&r(x)},has(r,e,a,s,l){let{adapter:d}=a,x=nY(a);x.relativeSelector=!0;let f=e.some(b=>b.some(Ib))?[aY]:void 0,m=l(e,x,f);if(m===Ju.default.falseFunc)return Ju.default.falseFunc;let D=sY(m,d);if(f&&m!==Ju.default.trueFunc){let{shouldTestNextSiblings:b=!1}=m;return E=>{if(!r(E))return!1;f[0]=E;let A=d.getChildren(E),B=b?[...A,...iY(E,d)]:A;return d.existsOne(D,B)}}return b=>r(b)&&d.existsOne(D,d.getChildren(b))}};function H8e(r,e,a,s,l){var d;let{name:x,data:f}=e;if(Array.isArray(f)){if(!(x in HR))throw new Error(`Unknown pseudo-class :${x}(${f})`);return HR[x](r,f,a,s,l)}let m=(d=a.pseudos)===null||d===void 0?void 0:d[x],D=typeof m=="string"?m:tY[x];if(typeof D=="string"){if(f!=null)throw new Error(`Pseudo ${x} doesn't have any arguments`);let b=Pb(D);return HR.is(r,b,a,s,l)}if(typeof m=="function")return eY(m,x,f,1),b=>m(b,f)&&r(b);if(x in kb)return kb[x](r,f,a,s);if(x in YR){let b=YR[x];return eY(b,x,f,2),E=>b(E,a,f)&&r(E)}throw new Error(`Unknown pseudo-class :${x}`)}function oY(r,e){let a=e.getParent(r);return a&&e.isTag(a)?a:null}function W8e(r,e,a,s,l){let{adapter:d,equals:x}=a;switch(e.type){case Kr.PseudoElement:throw new Error("Pseudo-elements are not supported by css-select");case Kr.ColumnCombinator:throw new Error("Column combinators are not yet supported by css-select");case Kr.Attribute:{if(e.namespace!=null)throw new Error("Namespaced attributes are not yet supported by css-select");return(!a.xmlMode||a.lowerCaseAttributeNames)&&(e.name=e.name.toLowerCase()),V8e[e.action](r,e,a)}case Kr.Pseudo:return H8e(r,e,a,s,l);case Kr.Tag:{if(e.namespace!=null)throw new Error("Namespaced tag names are not yet supported by css-select");let{name:f}=e;return(!a.xmlMode||a.lowerCaseTags)&&(f=f.toLowerCase()),function(D){return d.getName(D)===f&&r(D)}}case Kr.Descendant:{if(a.cacheResults===!1||typeof WeakSet>"u")return function(D){let b=D;for(;b=oY(b,d);)if(r(b))return!0;return!1};let f=new WeakSet;return function(D){let b=D;for(;b=oY(b,d);)if(!f.has(b)){if(d.isTag(b)&&r(b))return!0;f.add(b)}return!1}}case"_flexibleDescendant":return function(m){let D=m;do if(r(D))return!0;while(D=oY(D,d));return!1};case Kr.Parent:return function(m){return d.getChildren(m).some(D=>d.isTag(D)&&r(D))};case Kr.Child:return function(m){let D=d.getParent(m);return D!=null&&d.isTag(D)&&r(D)};case Kr.Sibling:return function(m){let D=d.getSiblings(m);for(let b=0;b<D.length;b++){let E=D[b];if(x(m,E))break;if(d.isTag(E)&&r(E))return!0}return!1};case Kr.Adjacent:return d.prevElementSibling?function(m){let D=d.prevElementSibling(m);return D!=null&&r(D)}:function(m){let D=d.getSiblings(m),b;for(let E=0;E<D.length;E++){let A=D[E];if(x(m,A))break;d.isTag(A)&&(b=A)}return!!b&&r(b)};case Kr.Universal:{if(e.namespace!=null&&e.namespace!=="*")throw new Error("Namespaced universal selectors are not yet supported by css-select");return r}}}function K8e(r,e,a){let s=WR(r,e,a);return sY(s,e.adapter)}function WR(r,e,a){let s=typeof r=="string"?Pb(r):r;return KR(s,e,a)}function J8e(r){return r.type===Kr.Pseudo&&(r.name==="scope"||Array.isArray(r.data)&&r.data.some(e=>e.some(J8e)))}var rjt={type:Kr.Descendant},njt={type:"_flexibleDescendant"},ajt={type:Kr.Pseudo,name:"scope",data:null};function sjt(r,{adapter:e},a){let s=!!a?.every(l=>{let d=e.isTag(l)&&e.getParent(l);return l===aY||d&&e.isTag(d)});for(let l of r){if(!(l.length>0&&Ib(l[0])&&l[0].type!==Kr.Descendant))if(s&&!l.some(J8e))l.unshift(rjt);else continue;l.unshift(ajt)}}function KR(r,e,a){var s;r.forEach(JX),a=(s=e.context)!==null&&s!==void 0?s:a;let l=Array.isArray(a),d=a&&(Array.isArray(a)?a:[a]);if(e.relativeSelector!==!1)sjt(r,e,d);else if(r.some(m=>m.length>0&&Ib(m[0])))throw new Error("Relative selectors are not allowed when the `relativeSelector` option is disabled");let x=!1,f=r.map(m=>{if(m.length>=2){let[D,b]=m;D.type!==Kr.Pseudo||D.name!=="scope"||(l&&b.type===Kr.Descendant?m[1]=njt:(b.type===Kr.Adjacent||b.type===Kr.Sibling)&&(x=!0))}return ijt(m,e,d)}).reduce(ojt,ed.default.falseFunc);return f.shouldTestNextSiblings=x,f}function ijt(r,e,a){var s;return r.reduce((l,d)=>l===ed.default.falseFunc?ed.default.falseFunc:W8e(l,d,e,a,KR),(s=e.rootFunc)!==null&&s!==void 0?s:ed.default.trueFunc)}function ojt(r,e){return e===ed.default.falseFunc||r===ed.default.trueFunc?r:r===ed.default.falseFunc||e===ed.default.trueFunc?e:function(s){return r(s)||e(s)}}var Z8e=(r,e)=>r===e,ujt={adapter:GR,equals:Z8e};function Q8e(r){var e,a,s,l;let d=r??ujt;return(e=d.adapter)!==null&&e!==void 0||(d.adapter=GR),(a=d.equals)!==null&&a!==void 0||(d.equals=(l=(s=d.adapter)===null||s===void 0?void 0:s.equals)!==null&&l!==void 0?l:Z8e),d}function cY(r){return function(a,s,l){let d=Q8e(s);return r(a,d,l)}}var Grr=cY(K8e),Xrr=cY(WR),Yrr=cY(KR);function e_e(r){return function(a,s,l){let d=Q8e(l);typeof a!="function"&&(a=WR(a,d,s));let x=cjt(s,d.adapter,a.shouldTestNextSiblings);return r(a,x,d)}}function cjt(r,e,a=!1){return a&&(r=ljt(r,e)),Array.isArray(r)?e.removeSubsets(r):e.getChildren(r)}function ljt(r,e){let a=Array.isArray(r)?r.slice(0):[r],s=a.length;for(let l=0;l<s;l++){let d=iY(a[l],e);a.push(...d)}return a}var lY=e_e((r,e,a)=>r===uY.default.falseFunc||!e||e.length===0?[]:a.adapter.findAll(r,e)),JR=e_e((r,e,a)=>r===uY.default.falseFunc||!e||e.length===0?null:a.adapter.findOne(r,e));Ge();Gt();Ge();var P_e=Or(fs(),1);Gt();var k_e=Or(fs(),1),M_e=Or(fs(),1);Gt();V0();gY();var DY=(r,e={})=>{let a=r._internal_store;if(!a){a={counts:{}},r._internal_store=a;for(let l of r){let d=l.type,x=l[`${d}_id`];if(!x)continue;let f=Number.parseInt(x.split("_").pop());Number.isNaN(f)||(a.counts[d]=Math.max(a.counts[d]??0,f))}}return new Proxy({},{get:(l,d)=>d==="toArray"?()=>r:{get:x=>r.find(f=>f.type===d&&f[`${d}_id`]===x),getUsing:x=>{let f=Object.keys(x);if(f.length!==1)throw new Error("getUsing requires exactly one key, e.g. { pcb_component_id }");let m=f[0],D=m.replace("_id",""),b=r.find(E=>E.type===D&&E[m]===x[m]);return b?r.find(E=>E.type===d&&E[`${d}_id`]===b[`${d}_id`]):null},getWhere:x=>{let f=Object.keys(x);return r.find(m=>m.type===d&&f.every(D=>m[D]===x[D]))},list:x=>{let f=x?Object.keys(x):[];return r.filter(m=>m.type===d&&f.every(D=>m[D]===x[D]))},insert:x=>{var D;(D=a.counts)[d]??(D[d]=-1),a.counts[d]++;let f=a.counts[d],m={type:d,[`${d}_id`]:`${d}_${f}`,...x};return e.validateInserts&&(Yf[d]??Xf).parse(m),r.push(m),m},delete:x=>{let f=r.find(m=>m[`${d}_id`]===x);f&&r.splice(r.indexOf(f),1)},update:(x,f)=>{let m=r.find(D=>D[`${d}_id`]===x);if(m)return Object.assign(m,f),m},select:x=>{if(d==="source_component")return r.find(f=>f.type==="source_component"&&f.name===x.replace(/\./g,""));if(d==="pcb_port"||d==="source_port"||d==="schematic_port"){let[f,m]=x.replace(/\./g,"").split(/[\s\>]+/),D=r.find(E=>E.type==="source_component"&&E.name===f);if(!D)return null;let b=r.find(E=>E.type==="source_port"&&E.source_component_id===D.source_component_id&&(E.name===m||(E.port_hints??[]).includes(m)));if(!b)return null;if(d==="source_port")return b;if(d==="pcb_port")return r.find(E=>E.type==="pcb_port"&&E.source_port_id===b.source_port_id);if(d==="schematic_port")return r.find(E=>E.type==="schematic_port"&&E.source_port_id===b.source_port_id)}}}})};DY.unparsed=DY;var f_e=DY;var Jar=Or(m_e(),1);Zo();function td(r){let e=r.width/2,a=r.height/2;return{minX:r.center.x-e,maxX:r.center.x+e,minY:r.center.y-a,maxY:r.center.y+a}}function ug(r,e){let a=td(r),s=td(e),l=Math.max(a.minX-s.maxX,s.minX-a.maxX,0),d=Math.max(a.minY-s.maxY,s.minY-a.maxY,0),x={x:0,y:0},f={x:0,y:0};return l===0&&d===0?{distance:0,pointA:r.center,pointB:e.center}:(x.x=ms(r.center.x,s.minX,s.maxX),x.y=ms(r.center.y,s.minY,s.maxY),f.x=ms(e.center.x,a.minX,a.maxX),f.y=ms(e.center.y,a.minY,a.maxY),{distance:Math.hypot(x.x-f.x,x.y-f.y),pointA:x,pointB:f})}function ms(r,e,a){return Math.max(e,Math.min(a,r))}function zb(r,e){let a=Number.POSITIVE_INFINITY,s={x:0,y:0},l={x:0,y:0};for(let d of r)for(let x of e){let{distance:f,pointA:m,pointB:D}=ug(d,x);f<a&&(a=f,s=m,l=D)}return{pointA:s,pointB:l,distance:a}}Zo();Zo();var v_e="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var C_e=(r=21)=>{let e="",a=crypto.getRandomValues(new Uint8Array(r|=0));for(;r--;)e+=v_e[a[r]&63];return e};Zo();var u1=(r,e)=>Math.abs(r.x-e.x)+Math.abs(r.y-e.y),__e=(r,e)=>{let a=e.x-r.x,s=e.y-r.y;return Math.abs(a)>Math.abs(s)?{dx:Math.sign(a),dy:0}:{dx:0,dy:Math.sign(s)}},w_e=(r,e,a)=>Math.abs(r.x-e.x)*Math.abs(a.dx)+Math.abs(r.y-e.y)*Math.abs(a.dy),T_e=(r,e=.1)=>`${Math.round(r.x/e)},${Math.round(r.y/e)}`,A_e=(r,e)=>Math.abs(r-e)<1e-4,I_e=(r,e,{viaDiameter:a=.5}={})=>{let s=[];for(let l=0;l<r.length-1;l++){let[d,x]=[r[l],r[l+1]],f=l-1>=0?r[l-1]:null,m=A_e(d.y,x.y),D=A_e(d.x,x.x);if(!m&&!D)throw new Error(`getObstaclesFromTrace currently only supports horizontal and vertical traces (not diagonals) Conflicting trace: ${e}, start: (${d.x}, ${d.y}), end: (${x.x}, ${x.y})`);let b={type:"rect",layers:[d.layer],center:{x:(d.x+x.x)/2,y:(d.y+x.y)/2},width:m?Math.abs(d.x-x.x):.1,height:D?Math.abs(d.y-x.y):.1,connectedTo:[e]};if(s.push(b),f&&f.layer===d.layer&&d.layer!==x.layer){let E={type:"rect",layers:[d.layer,x.layer],center:{x:d.x,y:d.y},connectedTo:[e],width:a,height:a};s.push(E)}}return s},j_e=class{constructor(r){q(this,"obstacles");q(this,"GRID_STEP",.1);this.obstacles=r.map(e=>({...e,left:e.center.x-e.width/2,right:e.center.x+e.width/2,top:e.center.y+e.height/2,bottom:e.center.y-e.height/2}))}getObstacleAt(r,e,a){a??(a=this.GRID_STEP);for(let s of this.obstacles){let l=s.width/2+a,d=s.height/2+a;if(r>=s.center.x-l&&r<=s.center.x+l&&e>=s.center.y-d&&e<=s.center.y+d)return s}return null}isObstacleAt(r,e,a){return this.getObstacleAt(r,e,a)!==null}getDirectionDistancesToNearestObstacle(r,e){let{GRID_STEP:a}=this,s={left:1/0,top:1/0,bottom:1/0,right:1/0};for(let l of this.obstacles)if(l.type==="rect"){let d=l.center.x-l.width/2-a,x=l.center.x+l.width/2+a,f=l.center.y+l.height/2+a,m=l.center.y-l.height/2-a;e>=m&&e<=f&&r>d&&(s.left=Math.min(s.left,r-x)),e>=m&&e<=f&&r<x&&(s.right=Math.min(s.right,d-r)),r>=d&&r<=x&&e<f&&(s.top=Math.min(s.top,m-e)),r>=d&&r<=x&&e>m&&(s.bottom=Math.min(s.bottom,e-f))}return s}getOrthoDirectionCollisionInfo(r,e,{margin:a=0}={}){let{x:s,y:l}=r,{dx:d,dy:x}=e,f=1/0,m=null;for(let D of this.obstacles){let b=D.left-a,E=D.right+a,A=D.top+a,B=D.bottom-a,w=null;d===1&&x===0?l>B&&l<A&&s<D.left&&(w=D.left-s):d===-1&&x===0?l>B&&l<A&&s>D.right&&(w=s-D.right):d===0&&x===1?s>b&&s<E&&l<D.bottom&&(w=D.bottom-l):d===0&&x===-1&&s>b&&s<E&&l>D.top&&(w=l-D.top),w!==null&&w<f&&(f=w,m=D)}return{dx:d,dy:x,wallDistance:f,obstacle:m}}getObstaclesOverlappingRegion(r){let e=[];for(let a of this.obstacles){let{left:s,right:l,top:d,bottom:x}=a;s<=r.maxX&&l>=r.minX&&d<=r.maxY&&x>=r.minY&&e.push(a)}return e}};function mjt(r){if(r.length<4)return r;let e=[{...r[0]}],a=r[0].layer;for(let s=1;s<r.length;s++){let l={start:r[s-1],end:r[s]},d=r[s].route_type==="via"||r[s-1].route_type==="via";if(r[s].layer!==a||d){e.push({...r[s]}),a=r[s].layer;continue}let x=!1,f=null,m=-1;for(let b=0;b<e.length-1;b++){let E={start:e[b],end:e[b+1]};if(E.start.layer===l.start.layer&&E.start.layer===l.start.layer){let A=gjt(E,l);if(A){x=!0,f={...A,layer:a},m=b;break}}}x&&f&&(e.splice(m+1),e.push(f));let D=e[e.length-1];(D.x!==r[s].x||D.y!==r[s].y)&&e.push(r[s])}return e}function gjt(r,e){if(r.start.x===r.end.x&&e.start.x===e.end.x||r.start.y===r.end.y&&e.start.y===e.end.y)return null;let a;if(r.start.x===r.end.x){let s=r.start.x,l=e.start.y;a={...r.start,x:s,y:l}}else{let s=e.start.x,l=r.start.y;a={...r.start,x:s,y:l}}return R_e(a,r)&&R_e(a,e)?a:null}function R_e(r,e){return r.x>=Math.min(e.start.x,e.end.x)&&r.x<=Math.max(e.start.x,e.end.x)&&r.y>=Math.min(e.start.y,e.end.y)&&r.y<=Math.max(e.start.y,e.end.y)}function Djt(r){let e=[r[0]];for(let a=1;a<r.length-1;a++){let[s,l,d]=[r[a-1],r[a],r[a+1]];e.push(l),!(l.route_type!=="wire"||s.route_type!=="wire"||d.route_type!=="wire")&&s.layer===l.layer&&l.layer!==d.layer&&e.push({route_type:"via",from_layer:l.layer,to_layer:d.layer,x:l.x,y:l.y})}return e.push(r[r.length-1]),e}var War=(0,k_e.default)("autorouter:shortenPathWithShortcuts");function yjt(r,e){if(r.length<=2)return r;let a=[r[0]];for(let s=1;s<r.length;s++){let l={start:a[a.length-1],end:r[s]},d=-1,x=l.start.x===l.end.x,f=l.start.y===l.end.y;for(let m=s+1;m<r.length;m++){if(m<=d)continue;let D={start:r[m],end:r[m+1]};if(!D.end)continue;let b=D.start.x===D.end.x,E=D.start.y===D.end.y,A=x&&b,B=f&&E;if(B&&A||!(A||B))continue;let P=!1,j=Math.min(l.start.x,l.end.x),O=Math.max(l.start.x,l.end.x),$=Math.min(D.start.x,D.end.x),ee=Math.max(D.start.x,D.end.x),X=Math.min(l.start.y,l.end.y),te=Math.max(l.start.y,l.end.y),L=Math.min(D.start.y,D.end.y),J=Math.max(D.start.y,D.end.y);if(B?P=j<=ee&&O>=$:A&&(P=X<=J&&te>=L),!P)continue;let U=[],W=a[a.length-1],Z=r[m+2];if(!Z)continue;B&&$<O&&Z.x===$&&U.push({x:$,y:l.start.y,layer:l.start.layer}),B&&ee>j&&Z.x===ee&&U.push({x:ee,y:l.start.y,layer:l.start.layer}),A&&L<te&&Z.y===L&&U.push({x:l.start.x,y:L,layer:l.start.layer}),A&&J>X&&Z.y===J&&U.push({x:l.start.x,y:J,layer:l.start.layer});let de=null;for(let oe of U)if(!(e(W,oe)||e(Z,oe))){de=oe;break}if(de){a.push(de),s=m+1,d=m+1;break}}d===-1&&a.push(r[s])}return a[a.length-1]!==r[r.length-1]&&a.push(r[r.length-1]),a}var o1=(0,P_e.default)("autorouting-dataset:astar"),N_e=class{constructor(r){q(this,"openSet",[]);q(this,"closedSet",new Set);q(this,"debug",!1);q(this,"debugSolutions");q(this,"debugMessage",null);q(this,"debugTraceCount",0);q(this,"input");q(this,"obstacles");q(this,"allObstacles");q(this,"startNode");q(this,"goalPoint");q(this,"GRID_STEP");q(this,"OBSTACLE_MARGIN");q(this,"MAX_ITERATIONS");q(this,"isRemovePathLoopsEnabled");q(this,"isShortenPathWithShortcutsEnabled");q(this,"GREEDY_MULTIPLIER",1.1);q(this,"iterations",-1);this.input=r.input,this.allObstacles=r.input.obstacles,this.startNode=r.startNode,this.goalPoint=r.goalPoint?{l:0,...r.goalPoint}:void 0,this.GRID_STEP=r.GRID_STEP??.1,this.OBSTACLE_MARGIN=r.OBSTACLE_MARGIN??.15,this.MAX_ITERATIONS=r.MAX_ITERATIONS??100,this.debug=r.debug??o1.enabled,this.isRemovePathLoopsEnabled=r.isRemovePathLoopsEnabled??!1,this.isShortenPathWithShortcutsEnabled=r.isShortenPathWithShortcutsEnabled??!1,this.debug&&(o1.enabled=!0),o1.enabled&&(this.debugSolutions={},this.debugMessage="")}getNeighbors(r){return[]}isSameNode(r,e){return u1(r,e)<this.GRID_STEP}computeG(r,e){return r.g+u1(r,e)}computeH(r){return u1(r,this.goalPoint)}getNodeName(r){return T_e(r,this.GRID_STEP)}solveOneStep(){this.iterations+=1;let{openSet:r,closedSet:e,GRID_STEP:a,goalPoint:s}=this;r.sort((f,m)=>f.f-m.f);let l=r.shift();if(this.computeH(l)<=a*2)return{solved:!0,current:l,newNeighbors:[]};this.closedSet.add(this.getNodeName(l));let x=[];for(let f of this.getNeighbors(l)){if(e.has(this.getNodeName(f)))continue;let m=this.computeG(l,f),D=this.openSet.find(b=>this.isSameNode(b,f));if(!D||m<D.g){let b=this.computeH(f),E=m+b*this.GREEDY_MULTIPLIER,A={...f,g:m,h:b,f:E,obstacleHit:f.obstacleHit??void 0,manDistFromParent:u1(l,f),nodesInPath:l.nodesInPath+1,parent:l,enterMarginCost:f.enterMarginCost,travelMarginCostFactor:f.travelMarginCostFactor};r.push(A),x.push(A)}}return o1.enabled&&(r.sort((f,m)=>f.f-m.f),this.drawDebugSolution({current:l,newNeighbors:x})),{solved:!1,current:l,newNeighbors:x}}getStartNode(r){return{x:r.pointsToConnect[0].x,y:r.pointsToConnect[0].y,manDistFromParent:0,f:0,g:0,h:0,nodesInPath:0,parent:null}}layerToIndex(r){return 0}indexToLayer(r){return"top"}preprocessConnectionBeforeSolving(r){return r}solveConnection(r){if(r.pointsToConnect.length>2)throw new Error("GeneralizedAstarAutorouter doesn't currently support 2+ points in a connection");r=this.preprocessConnectionBeforeSolving(r);let{pointsToConnect:e}=r;for(this.iterations=0,this.closedSet=new Set,this.startNode=this.getStartNode(r),this.goalPoint={...e[e.length-1],l:this.layerToIndex(e[e.length-1].layer)},this.openSet=[this.startNode];this.iterations<this.MAX_ITERATIONS;){let{solved:a,current:s}=this.solveOneStep();if(a){let l=[],d=s;for(;d;){let x=d.l;l.unshift({x:d.x,y:d.y,layer:x!==void 0?this.indexToLayer(x):e[0].layer}),d=d.parent}return o1.enabled&&(this.debugMessage+=`t${this.debugTraceCount}: ${this.iterations} iterations
951
+ )`,enabled:":not(:disabled)",checked:":is(:is(input[type=radio], input[type=checkbox])[checked], option:selected)",required:":is(input, select, textarea)[required]",optional:":is(input, select, textarea):not([required])",selected:"option:is([selected], select:not([multiple]):not(:has(> option[selected])) > :first-of-type)",checkbox:"[type=checkbox]",file:"[type=file]",password:"[type=password]",radio:"[type=radio]",reset:"[type=reset]",image:"[type=image]",submit:"[type=submit]",parent:":not(:empty)",header:":is(h1, h2, h3, h4, h5, h6)",button:":is(button, input[type=button])",input:":is(input, textarea, select, button)",text:"input:is(:not([type!='']), [type=text])"};var Ju=Or(e1(),1);var aY={};function sY(r,e){return r===Ju.default.falseFunc?Ju.default.falseFunc:a=>e.isTag(a)&&r(a)}function iY(r,e){let a=e.getSiblings(r);if(a.length<=1)return[];let s=a.indexOf(r);return s<0||s===a.length-1?[]:a.slice(s+1).filter(e.isTag)}function nY(r){return{xmlMode:!!r.xmlMode,lowerCaseAttributeNames:!!r.lowerCaseAttributeNames,lowerCaseTags:!!r.lowerCaseTags,quirksMode:!!r.quirksMode,cacheResults:!!r.cacheResults,pseudos:r.pseudos,adapter:r.adapter,equals:r.equals}}var rY=(r,e,a,s,l)=>{let d=l(e,nY(a),s);return d===Ju.default.trueFunc?r:d===Ju.default.falseFunc?Ju.default.falseFunc:x=>d(x)&&r(x)},HR={is:rY,matches:rY,where:rY,not(r,e,a,s,l){let d=l(e,nY(a),s);return d===Ju.default.falseFunc?r:d===Ju.default.trueFunc?Ju.default.falseFunc:x=>!d(x)&&r(x)},has(r,e,a,s,l){let{adapter:d}=a,x=nY(a);x.relativeSelector=!0;let f=e.some(b=>b.some(Ib))?[aY]:void 0,m=l(e,x,f);if(m===Ju.default.falseFunc)return Ju.default.falseFunc;let D=sY(m,d);if(f&&m!==Ju.default.trueFunc){let{shouldTestNextSiblings:b=!1}=m;return E=>{if(!r(E))return!1;f[0]=E;let A=d.getChildren(E),B=b?[...A,...iY(E,d)]:A;return d.existsOne(D,B)}}return b=>r(b)&&d.existsOne(D,d.getChildren(b))}};function H8e(r,e,a,s,l){var d;let{name:x,data:f}=e;if(Array.isArray(f)){if(!(x in HR))throw new Error(`Unknown pseudo-class :${x}(${f})`);return HR[x](r,f,a,s,l)}let m=(d=a.pseudos)===null||d===void 0?void 0:d[x],D=typeof m=="string"?m:tY[x];if(typeof D=="string"){if(f!=null)throw new Error(`Pseudo ${x} doesn't have any arguments`);let b=Pb(D);return HR.is(r,b,a,s,l)}if(typeof m=="function")return eY(m,x,f,1),b=>m(b,f)&&r(b);if(x in kb)return kb[x](r,f,a,s);if(x in YR){let b=YR[x];return eY(b,x,f,2),E=>b(E,a,f)&&r(E)}throw new Error(`Unknown pseudo-class :${x}`)}function oY(r,e){let a=e.getParent(r);return a&&e.isTag(a)?a:null}function W8e(r,e,a,s,l){let{adapter:d,equals:x}=a;switch(e.type){case Kr.PseudoElement:throw new Error("Pseudo-elements are not supported by css-select");case Kr.ColumnCombinator:throw new Error("Column combinators are not yet supported by css-select");case Kr.Attribute:{if(e.namespace!=null)throw new Error("Namespaced attributes are not yet supported by css-select");return(!a.xmlMode||a.lowerCaseAttributeNames)&&(e.name=e.name.toLowerCase()),V8e[e.action](r,e,a)}case Kr.Pseudo:return H8e(r,e,a,s,l);case Kr.Tag:{if(e.namespace!=null)throw new Error("Namespaced tag names are not yet supported by css-select");let{name:f}=e;return(!a.xmlMode||a.lowerCaseTags)&&(f=f.toLowerCase()),function(D){return d.getName(D)===f&&r(D)}}case Kr.Descendant:{if(a.cacheResults===!1||typeof WeakSet>"u")return function(D){let b=D;for(;b=oY(b,d);)if(r(b))return!0;return!1};let f=new WeakSet;return function(D){let b=D;for(;b=oY(b,d);)if(!f.has(b)){if(d.isTag(b)&&r(b))return!0;f.add(b)}return!1}}case"_flexibleDescendant":return function(m){let D=m;do if(r(D))return!0;while(D=oY(D,d));return!1};case Kr.Parent:return function(m){return d.getChildren(m).some(D=>d.isTag(D)&&r(D))};case Kr.Child:return function(m){let D=d.getParent(m);return D!=null&&d.isTag(D)&&r(D)};case Kr.Sibling:return function(m){let D=d.getSiblings(m);for(let b=0;b<D.length;b++){let E=D[b];if(x(m,E))break;if(d.isTag(E)&&r(E))return!0}return!1};case Kr.Adjacent:return d.prevElementSibling?function(m){let D=d.prevElementSibling(m);return D!=null&&r(D)}:function(m){let D=d.getSiblings(m),b;for(let E=0;E<D.length;E++){let A=D[E];if(x(m,A))break;d.isTag(A)&&(b=A)}return!!b&&r(b)};case Kr.Universal:{if(e.namespace!=null&&e.namespace!=="*")throw new Error("Namespaced universal selectors are not yet supported by css-select");return r}}}function K8e(r,e,a){let s=WR(r,e,a);return sY(s,e.adapter)}function WR(r,e,a){let s=typeof r=="string"?Pb(r):r;return KR(s,e,a)}function J8e(r){return r.type===Kr.Pseudo&&(r.name==="scope"||Array.isArray(r.data)&&r.data.some(e=>e.some(J8e)))}var rjt={type:Kr.Descendant},njt={type:"_flexibleDescendant"},ajt={type:Kr.Pseudo,name:"scope",data:null};function sjt(r,{adapter:e},a){let s=!!a?.every(l=>{let d=e.isTag(l)&&e.getParent(l);return l===aY||d&&e.isTag(d)});for(let l of r){if(!(l.length>0&&Ib(l[0])&&l[0].type!==Kr.Descendant))if(s&&!l.some(J8e))l.unshift(rjt);else continue;l.unshift(ajt)}}function KR(r,e,a){var s;r.forEach(JX),a=(s=e.context)!==null&&s!==void 0?s:a;let l=Array.isArray(a),d=a&&(Array.isArray(a)?a:[a]);if(e.relativeSelector!==!1)sjt(r,e,d);else if(r.some(m=>m.length>0&&Ib(m[0])))throw new Error("Relative selectors are not allowed when the `relativeSelector` option is disabled");let x=!1,f=r.map(m=>{if(m.length>=2){let[D,b]=m;D.type!==Kr.Pseudo||D.name!=="scope"||(l&&b.type===Kr.Descendant?m[1]=njt:(b.type===Kr.Adjacent||b.type===Kr.Sibling)&&(x=!0))}return ijt(m,e,d)}).reduce(ojt,ed.default.falseFunc);return f.shouldTestNextSiblings=x,f}function ijt(r,e,a){var s;return r.reduce((l,d)=>l===ed.default.falseFunc?ed.default.falseFunc:W8e(l,d,e,a,KR),(s=e.rootFunc)!==null&&s!==void 0?s:ed.default.trueFunc)}function ojt(r,e){return e===ed.default.falseFunc||r===ed.default.trueFunc?r:r===ed.default.falseFunc||e===ed.default.trueFunc?e:function(s){return r(s)||e(s)}}var Z8e=(r,e)=>r===e,ujt={adapter:GR,equals:Z8e};function Q8e(r){var e,a,s,l;let d=r??ujt;return(e=d.adapter)!==null&&e!==void 0||(d.adapter=GR),(a=d.equals)!==null&&a!==void 0||(d.equals=(l=(s=d.adapter)===null||s===void 0?void 0:s.equals)!==null&&l!==void 0?l:Z8e),d}function cY(r){return function(a,s,l){let d=Q8e(s);return r(a,d,l)}}var Grr=cY(K8e),Xrr=cY(WR),Yrr=cY(KR);function e_e(r){return function(a,s,l){let d=Q8e(l);typeof a!="function"&&(a=WR(a,d,s));let x=cjt(s,d.adapter,a.shouldTestNextSiblings);return r(a,x,d)}}function cjt(r,e,a=!1){return a&&(r=ljt(r,e)),Array.isArray(r)?e.removeSubsets(r):e.getChildren(r)}function ljt(r,e){let a=Array.isArray(r)?r.slice(0):[r],s=a.length;for(let l=0;l<s;l++){let d=iY(a[l],e);a.push(...d)}return a}var lY=e_e((r,e,a)=>r===uY.default.falseFunc||!e||e.length===0?[]:a.adapter.findAll(r,e)),JR=e_e((r,e,a)=>r===uY.default.falseFunc||!e||e.length===0?null:a.adapter.findOne(r,e));Ge();Gt();Ge();var P_e=Or(fs(),1);Gt();var k_e=Or(fs(),1),M_e=Or(fs(),1);Gt();V0();gY();var DY=(r,e={})=>{let a=r._internal_store;if(!a){a={counts:{}},r._internal_store=a;for(let l of r){let d=l.type,x=l[`${d}_id`];if(!x)continue;let f=Number.parseInt(x.split("_").pop());Number.isNaN(f)||(a.counts[d]=Math.max(a.counts[d]??0,f))}}return new Proxy({},{get:(l,d)=>d==="toArray"?()=>r:{get:x=>r.find(f=>f.type===d&&f[`${d}_id`]===x),getUsing:x=>{let f=Object.keys(x);if(f.length!==1)throw new Error("getUsing requires exactly one key, e.g. { pcb_component_id }");let m=f[0],D=m.replace("_id",""),b=r.find(E=>E.type===D&&E[m]===x[m]);return b?r.find(E=>E.type===d&&E[`${d}_id`]===b[`${d}_id`]):null},getWhere:x=>{let f=Object.keys(x);return r.find(m=>m.type===d&&f.every(D=>m[D]===x[D]))},list:x=>{let f=x?Object.keys(x):[];return r.filter(m=>m.type===d&&f.every(D=>m[D]===x[D]))},insert:x=>{var D;(D=a.counts)[d]??(D[d]=-1),a.counts[d]++;let f=a.counts[d],m={type:d,[`${d}_id`]:`${d}_${f}`,...x};return e.validateInserts&&(Yf[d]??Xf).parse(m),r.push(m),m},delete:x=>{let f=r.find(m=>m[`${d}_id`]===x);f&&r.splice(r.indexOf(f),1)},update:(x,f)=>{let m=r.find(D=>D.type===d&&D[`${d}_id`]===x);if(m)return Object.assign(m,f),m},select:x=>{if(d==="source_component")return r.find(f=>f.type==="source_component"&&f.name===x.replace(/\./g,""));if(d==="pcb_port"||d==="source_port"||d==="schematic_port"){let[f,m]=x.replace(/\./g,"").split(/[\s\>]+/),D=r.find(E=>E.type==="source_component"&&E.name===f);if(!D)return null;let b=r.find(E=>E.type==="source_port"&&E.source_component_id===D.source_component_id&&(E.name===m||(E.port_hints??[]).includes(m)));if(!b)return null;if(d==="source_port")return b;if(d==="pcb_port")return r.find(E=>E.type==="pcb_port"&&E.source_port_id===b.source_port_id);if(d==="schematic_port")return r.find(E=>E.type==="schematic_port"&&E.source_port_id===b.source_port_id)}}}})};DY.unparsed=DY;var f_e=DY;var Jar=Or(m_e(),1);Zo();function td(r){let e=r.width/2,a=r.height/2;return{minX:r.center.x-e,maxX:r.center.x+e,minY:r.center.y-a,maxY:r.center.y+a}}function ug(r,e){let a=td(r),s=td(e),l=Math.max(a.minX-s.maxX,s.minX-a.maxX,0),d=Math.max(a.minY-s.maxY,s.minY-a.maxY,0),x={x:0,y:0},f={x:0,y:0};return l===0&&d===0?{distance:0,pointA:r.center,pointB:e.center}:(x.x=ms(r.center.x,s.minX,s.maxX),x.y=ms(r.center.y,s.minY,s.maxY),f.x=ms(e.center.x,a.minX,a.maxX),f.y=ms(e.center.y,a.minY,a.maxY),{distance:Math.hypot(x.x-f.x,x.y-f.y),pointA:x,pointB:f})}function ms(r,e,a){return Math.max(e,Math.min(a,r))}function zb(r,e){let a=Number.POSITIVE_INFINITY,s={x:0,y:0},l={x:0,y:0};for(let d of r)for(let x of e){let{distance:f,pointA:m,pointB:D}=ug(d,x);f<a&&(a=f,s=m,l=D)}return{pointA:s,pointB:l,distance:a}}Zo();Zo();var v_e="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";var C_e=(r=21)=>{let e="",a=crypto.getRandomValues(new Uint8Array(r|=0));for(;r--;)e+=v_e[a[r]&63];return e};Zo();var u1=(r,e)=>Math.abs(r.x-e.x)+Math.abs(r.y-e.y),__e=(r,e)=>{let a=e.x-r.x,s=e.y-r.y;return Math.abs(a)>Math.abs(s)?{dx:Math.sign(a),dy:0}:{dx:0,dy:Math.sign(s)}},w_e=(r,e,a)=>Math.abs(r.x-e.x)*Math.abs(a.dx)+Math.abs(r.y-e.y)*Math.abs(a.dy),T_e=(r,e=.1)=>`${Math.round(r.x/e)},${Math.round(r.y/e)}`,A_e=(r,e)=>Math.abs(r-e)<1e-4,I_e=(r,e,{viaDiameter:a=.5}={})=>{let s=[];for(let l=0;l<r.length-1;l++){let[d,x]=[r[l],r[l+1]],f=l-1>=0?r[l-1]:null,m=A_e(d.y,x.y),D=A_e(d.x,x.x);if(!m&&!D)throw new Error(`getObstaclesFromTrace currently only supports horizontal and vertical traces (not diagonals) Conflicting trace: ${e}, start: (${d.x}, ${d.y}), end: (${x.x}, ${x.y})`);let b={type:"rect",layers:[d.layer],center:{x:(d.x+x.x)/2,y:(d.y+x.y)/2},width:m?Math.abs(d.x-x.x):.1,height:D?Math.abs(d.y-x.y):.1,connectedTo:[e]};if(s.push(b),f&&f.layer===d.layer&&d.layer!==x.layer){let E={type:"rect",layers:[d.layer,x.layer],center:{x:d.x,y:d.y},connectedTo:[e],width:a,height:a};s.push(E)}}return s},j_e=class{constructor(r){q(this,"obstacles");q(this,"GRID_STEP",.1);this.obstacles=r.map(e=>({...e,left:e.center.x-e.width/2,right:e.center.x+e.width/2,top:e.center.y+e.height/2,bottom:e.center.y-e.height/2}))}getObstacleAt(r,e,a){a??(a=this.GRID_STEP);for(let s of this.obstacles){let l=s.width/2+a,d=s.height/2+a;if(r>=s.center.x-l&&r<=s.center.x+l&&e>=s.center.y-d&&e<=s.center.y+d)return s}return null}isObstacleAt(r,e,a){return this.getObstacleAt(r,e,a)!==null}getDirectionDistancesToNearestObstacle(r,e){let{GRID_STEP:a}=this,s={left:1/0,top:1/0,bottom:1/0,right:1/0};for(let l of this.obstacles)if(l.type==="rect"){let d=l.center.x-l.width/2-a,x=l.center.x+l.width/2+a,f=l.center.y+l.height/2+a,m=l.center.y-l.height/2-a;e>=m&&e<=f&&r>d&&(s.left=Math.min(s.left,r-x)),e>=m&&e<=f&&r<x&&(s.right=Math.min(s.right,d-r)),r>=d&&r<=x&&e<f&&(s.top=Math.min(s.top,m-e)),r>=d&&r<=x&&e>m&&(s.bottom=Math.min(s.bottom,e-f))}return s}getOrthoDirectionCollisionInfo(r,e,{margin:a=0}={}){let{x:s,y:l}=r,{dx:d,dy:x}=e,f=1/0,m=null;for(let D of this.obstacles){let b=D.left-a,E=D.right+a,A=D.top+a,B=D.bottom-a,w=null;d===1&&x===0?l>B&&l<A&&s<D.left&&(w=D.left-s):d===-1&&x===0?l>B&&l<A&&s>D.right&&(w=s-D.right):d===0&&x===1?s>b&&s<E&&l<D.bottom&&(w=D.bottom-l):d===0&&x===-1&&s>b&&s<E&&l>D.top&&(w=l-D.top),w!==null&&w<f&&(f=w,m=D)}return{dx:d,dy:x,wallDistance:f,obstacle:m}}getObstaclesOverlappingRegion(r){let e=[];for(let a of this.obstacles){let{left:s,right:l,top:d,bottom:x}=a;s<=r.maxX&&l>=r.minX&&d<=r.maxY&&x>=r.minY&&e.push(a)}return e}};function mjt(r){if(r.length<4)return r;let e=[{...r[0]}],a=r[0].layer;for(let s=1;s<r.length;s++){let l={start:r[s-1],end:r[s]},d=r[s].route_type==="via"||r[s-1].route_type==="via";if(r[s].layer!==a||d){e.push({...r[s]}),a=r[s].layer;continue}let x=!1,f=null,m=-1;for(let b=0;b<e.length-1;b++){let E={start:e[b],end:e[b+1]};if(E.start.layer===l.start.layer&&E.start.layer===l.start.layer){let A=gjt(E,l);if(A){x=!0,f={...A,layer:a},m=b;break}}}x&&f&&(e.splice(m+1),e.push(f));let D=e[e.length-1];(D.x!==r[s].x||D.y!==r[s].y)&&e.push(r[s])}return e}function gjt(r,e){if(r.start.x===r.end.x&&e.start.x===e.end.x||r.start.y===r.end.y&&e.start.y===e.end.y)return null;let a;if(r.start.x===r.end.x){let s=r.start.x,l=e.start.y;a={...r.start,x:s,y:l}}else{let s=e.start.x,l=r.start.y;a={...r.start,x:s,y:l}}return R_e(a,r)&&R_e(a,e)?a:null}function R_e(r,e){return r.x>=Math.min(e.start.x,e.end.x)&&r.x<=Math.max(e.start.x,e.end.x)&&r.y>=Math.min(e.start.y,e.end.y)&&r.y<=Math.max(e.start.y,e.end.y)}function Djt(r){let e=[r[0]];for(let a=1;a<r.length-1;a++){let[s,l,d]=[r[a-1],r[a],r[a+1]];e.push(l),!(l.route_type!=="wire"||s.route_type!=="wire"||d.route_type!=="wire")&&s.layer===l.layer&&l.layer!==d.layer&&e.push({route_type:"via",from_layer:l.layer,to_layer:d.layer,x:l.x,y:l.y})}return e.push(r[r.length-1]),e}var War=(0,k_e.default)("autorouter:shortenPathWithShortcuts");function yjt(r,e){if(r.length<=2)return r;let a=[r[0]];for(let s=1;s<r.length;s++){let l={start:a[a.length-1],end:r[s]},d=-1,x=l.start.x===l.end.x,f=l.start.y===l.end.y;for(let m=s+1;m<r.length;m++){if(m<=d)continue;let D={start:r[m],end:r[m+1]};if(!D.end)continue;let b=D.start.x===D.end.x,E=D.start.y===D.end.y,A=x&&b,B=f&&E;if(B&&A||!(A||B))continue;let P=!1,j=Math.min(l.start.x,l.end.x),O=Math.max(l.start.x,l.end.x),$=Math.min(D.start.x,D.end.x),ee=Math.max(D.start.x,D.end.x),X=Math.min(l.start.y,l.end.y),te=Math.max(l.start.y,l.end.y),L=Math.min(D.start.y,D.end.y),J=Math.max(D.start.y,D.end.y);if(B?P=j<=ee&&O>=$:A&&(P=X<=J&&te>=L),!P)continue;let U=[],W=a[a.length-1],Z=r[m+2];if(!Z)continue;B&&$<O&&Z.x===$&&U.push({x:$,y:l.start.y,layer:l.start.layer}),B&&ee>j&&Z.x===ee&&U.push({x:ee,y:l.start.y,layer:l.start.layer}),A&&L<te&&Z.y===L&&U.push({x:l.start.x,y:L,layer:l.start.layer}),A&&J>X&&Z.y===J&&U.push({x:l.start.x,y:J,layer:l.start.layer});let de=null;for(let oe of U)if(!(e(W,oe)||e(Z,oe))){de=oe;break}if(de){a.push(de),s=m+1,d=m+1;break}}d===-1&&a.push(r[s])}return a[a.length-1]!==r[r.length-1]&&a.push(r[r.length-1]),a}var o1=(0,P_e.default)("autorouting-dataset:astar"),N_e=class{constructor(r){q(this,"openSet",[]);q(this,"closedSet",new Set);q(this,"debug",!1);q(this,"debugSolutions");q(this,"debugMessage",null);q(this,"debugTraceCount",0);q(this,"input");q(this,"obstacles");q(this,"allObstacles");q(this,"startNode");q(this,"goalPoint");q(this,"GRID_STEP");q(this,"OBSTACLE_MARGIN");q(this,"MAX_ITERATIONS");q(this,"isRemovePathLoopsEnabled");q(this,"isShortenPathWithShortcutsEnabled");q(this,"GREEDY_MULTIPLIER",1.1);q(this,"iterations",-1);this.input=r.input,this.allObstacles=r.input.obstacles,this.startNode=r.startNode,this.goalPoint=r.goalPoint?{l:0,...r.goalPoint}:void 0,this.GRID_STEP=r.GRID_STEP??.1,this.OBSTACLE_MARGIN=r.OBSTACLE_MARGIN??.15,this.MAX_ITERATIONS=r.MAX_ITERATIONS??100,this.debug=r.debug??o1.enabled,this.isRemovePathLoopsEnabled=r.isRemovePathLoopsEnabled??!1,this.isShortenPathWithShortcutsEnabled=r.isShortenPathWithShortcutsEnabled??!1,this.debug&&(o1.enabled=!0),o1.enabled&&(this.debugSolutions={},this.debugMessage="")}getNeighbors(r){return[]}isSameNode(r,e){return u1(r,e)<this.GRID_STEP}computeG(r,e){return r.g+u1(r,e)}computeH(r){return u1(r,this.goalPoint)}getNodeName(r){return T_e(r,this.GRID_STEP)}solveOneStep(){this.iterations+=1;let{openSet:r,closedSet:e,GRID_STEP:a,goalPoint:s}=this;r.sort((f,m)=>f.f-m.f);let l=r.shift();if(this.computeH(l)<=a*2)return{solved:!0,current:l,newNeighbors:[]};this.closedSet.add(this.getNodeName(l));let x=[];for(let f of this.getNeighbors(l)){if(e.has(this.getNodeName(f)))continue;let m=this.computeG(l,f),D=this.openSet.find(b=>this.isSameNode(b,f));if(!D||m<D.g){let b=this.computeH(f),E=m+b*this.GREEDY_MULTIPLIER,A={...f,g:m,h:b,f:E,obstacleHit:f.obstacleHit??void 0,manDistFromParent:u1(l,f),nodesInPath:l.nodesInPath+1,parent:l,enterMarginCost:f.enterMarginCost,travelMarginCostFactor:f.travelMarginCostFactor};r.push(A),x.push(A)}}return o1.enabled&&(r.sort((f,m)=>f.f-m.f),this.drawDebugSolution({current:l,newNeighbors:x})),{solved:!1,current:l,newNeighbors:x}}getStartNode(r){return{x:r.pointsToConnect[0].x,y:r.pointsToConnect[0].y,manDistFromParent:0,f:0,g:0,h:0,nodesInPath:0,parent:null}}layerToIndex(r){return 0}indexToLayer(r){return"top"}preprocessConnectionBeforeSolving(r){return r}solveConnection(r){if(r.pointsToConnect.length>2)throw new Error("GeneralizedAstarAutorouter doesn't currently support 2+ points in a connection");r=this.preprocessConnectionBeforeSolving(r);let{pointsToConnect:e}=r;for(this.iterations=0,this.closedSet=new Set,this.startNode=this.getStartNode(r),this.goalPoint={...e[e.length-1],l:this.layerToIndex(e[e.length-1].layer)},this.openSet=[this.startNode];this.iterations<this.MAX_ITERATIONS;){let{solved:a,current:s}=this.solveOneStep();if(a){let l=[],d=s;for(;d;){let x=d.l;l.unshift({x:d.x,y:d.y,layer:x!==void 0?this.indexToLayer(x):e[0].layer}),d=d.parent}return o1.enabled&&(this.debugMessage+=`t${this.debugTraceCount}: ${this.iterations} iterations
952
952
  `),this.isRemovePathLoopsEnabled&&(l=mjt(l)),this.isShortenPathWithShortcutsEnabled&&(l=yjt(l,(x,f)=>{if(x.x===f.x&&x.y===f.y)return!1;let m=this.obstacles.getOrthoDirectionCollisionInfo({x:x.x,y:x.y,l:this.layerToIndex(x.layer)??0},{dx:Math.sign(f.x-x.x),dy:Math.sign(f.y-x.y),dl:0},{margin:.05}),D=Math.sqrt((x.x-f.x)**2+(x.y-f.y)**2);return m.wallDistance<D})),{solved:!0,route:l,connectionName:r.name}}if(this.openSet.length===0)break}return o1.enabled&&(this.debugMessage+=`t${this.debugTraceCount}: ${this.iterations} iterations (failed)
953
953
  `),{solved:!1,connectionName:r.name}}createObstacleList({dominantLayer:r,connection:e,obstaclesFromTraces:a}){return new j_e(this.allObstacles.filter(s=>!s.connectedTo.includes(e.name)).filter(s=>s.layers.includes(r)).concat(a??[]))}postprocessConnectionSolveResult(r,e){return e}solve(){let r=[],e=[];this.debugTraceCount=0;for(let a of this.input.connections){let s=a.pointsToConnect[0].layer??"top";this.debugTraceCount+=1,this.obstacles=this.createObstacleList({dominantLayer:s,connection:a,obstaclesFromTraces:e});let l=this.solveConnection(a);l=this.postprocessConnectionSolveResult(a,l),r.push(l),o1.enabled&&this.drawDebugTraceObstacles(e),l.solved&&e.push(...I_e(l.route.map(d=>({x:d.x,y:d.y,layer:d.layer??s})),a.name))}return r}solveAndMapToTraces(){return this.solve().flatMap(e=>e.solved?[{type:"pcb_trace",pcb_trace_id:`pcb_trace_for_${e.connectionName}`,route:Djt(e.route.map(a=>({route_type:"wire",x:a.x,y:a.y,width:this.input.minTraceWidth,layer:a.layer})))}]:[])}getDebugGroup(){let r=`t${this.debugTraceCount}_iter[${this.iterations-1}]`;return this.iterations<30||this.iterations<100&&this.iterations%10===0||this.iterations<1e3&&this.iterations%100===0||!this.debugSolutions?r:null}drawDebugTraceObstacles(r){let{debugTraceCount:e,debugSolutions:a}=this;for(let s in a)s.startsWith(`t${e}_`)&&a[s].push(...r.map((l,d)=>({type:"pcb_smtpad",pcb_component_id:"",layer:l.layers[0],width:l.width,shape:"rect",x:l.center.x,y:l.center.y,pcb_smtpad_id:`trace_obstacle_${d}`,height:l.height})))}drawDebugSolution({current:r,newNeighbors:e}){let a=this.getDebugGroup();if(!a)return;let{openSet:s,debugTraceCount:l,debugSolutions:d}=this;d[a]??(d[a]=[]);let x=d[a];x.push({type:"pcb_fabrication_note_text",pcb_fabrication_note_text_id:`debug_note_${r.x}_${r.y}`,font:"tscircuit2024",font_size:.25,text:"X"+(r.l!==void 0?r.l:""),pcb_component_id:"",layer:"top",anchor_position:{x:r.x,y:r.y},anchor_alignment:"center"});for(let f=0;f<s.length;f++){let m=s[f];x.push({type:"pcb_fabrication_note_path",pcb_component_id:"",pcb_fabrication_note_path_id:`note_path_${m.x}_${m.y}`,layer:"top",route:[[0,.05],[.05,0],[0,-.05],[-.05,0],[0,.05]].map(([D,b])=>({x:m.x+D,y:m.y+b})),stroke_width:.01}),x.push({type:"pcb_fabrication_note_text",pcb_fabrication_note_text_id:`debug_note_${m.x}_${m.y}`,font:"tscircuit2024",font_size:.03,text:f.toString(),pcb_component_id:"",layer:"top",anchor_position:{x:m.x,y:m.y},anchor_alignment:"center"})}if(r.parent){let f=[],m=r;for(;m;)f.unshift(m),m=m.parent;x.push({type:"pcb_fabrication_note_path",pcb_component_id:"",pcb_fabrication_note_path_id:`note_path_${r.x}_${r.y}`,layer:"top",route:f,stroke_width:.01})}}},bjt=(0,M_e.default)("autorouting-dataset:infinite-grid-ijump-astar:get-distance-to-overcome-obstacle");function EY({node:r,travelDir:e,wallDir:a,obstacle:s,obstacles:l,obstaclesInRow:d=0,OBSTACLE_MARGIN:x=.15,SHOULD_DETECT_CONJOINED_OBSTACLES:f=!1,MAX_CONJOINED_OBSTACLES:m=20}){let D;if(e.dx===0?e.dy>0?D=s.center.y+s.height/2-r.y:D=r.y-(s.center.y-s.height/2):e.dx>0?D=s.center.x+s.width/2-r.x:D=r.x-(s.center.x-s.width/2),D+=x,f&&d<m){let b=l.getObstacleAt(r.x+e.dx*D+a.dx*(a.wallDistance+.001),r.y+e.dy*D+a.dy*(a.wallDistance+.001));if(b===s)return D;if(b&&b.type==="rect"){let E=e.dy===0,A=E?s.height:s.width;if((E?b.height:b.width)>A)return bjt("next obstacle on path is bigger, not trying to overcome it"),D;let w=EY({node:{x:r.x+e.dx*D,y:r.y+e.dy*D},travelDir:e,wallDir:a,obstacle:b,obstacles:l,obstaclesInRow:d+1,SHOULD_DETECT_CONJOINED_OBSTACLES:f,MAX_CONJOINED_OBSTACLES:m,OBSTACLE_MARGIN:x});D+=w}}return D}var Fjt=class extends N_e{constructor(){super(...arguments);q(this,"MAX_ITERATIONS",200)}getNeighbors(e){let a=this.obstacles,s=this.goalPoint,l;e.parent?l=__e(e.parent,e):l=__e(e,s);let d=[{dx:0,dy:1},{dx:1,dy:0},{dx:0,dy:-1},{dx:-1,dy:0}].filter(f=>f.dx===l.dx*-1&&f.dy===l.dy*-1?!1:!(f.dx===l.dx&&f.dy===l.dy&&e.parent?.obstacleHit)).map(f=>a.getOrthoDirectionCollisionInfo(e,f,{margin:this.OBSTACLE_MARGIN})).filter(f=>f.wallDistance>=this.OBSTACLE_MARGIN),x=[];for(let f of d){let m=null;e?.obstacleHit&&(m=EY({node:e,travelDir:f,wallDir:{...l,wallDistance:this.OBSTACLE_MARGIN},obstacle:e.obstacleHit,obstacles:a,OBSTACLE_MARGIN:this.OBSTACLE_MARGIN,SHOULD_DETECT_CONJOINED_OBSTACLES:!0}));let D=w_e(e,s,f),b=(f.dx===0||Math.sign(s.x-e.x)===f.dx)&&(f.dy===0||Math.sign(s.y-e.y)===f.dy);D<f.wallDistance&&D>0&&b?x.push({...f,travelDistance:D}):m!==null&&m<f.wallDistance?x.push({...f,travelDistance:m}):f.wallDistance!==1/0&&x.push({...f,travelDistance:f.wallDistance-this.OBSTACLE_MARGIN})}return x.filter(f=>!a.isObstacleAt(e.x+f.dx*f.travelDistance,e.y+f.dy*f.travelDistance)).map(f=>({x:e.x+f.dx*f.travelDistance,y:e.y+f.dy*f.travelDistance,obstacleHit:f.obstacle}))}};function Ejt(r,e=4){let{center:a,width:s,height:l,rotation:d}=r,x=[],f=d*Math.PI/180,m=Math.cos(f),D=Math.sin(f),b=(d%360+360)%360;if(l<=s?b>=45&&b<135||b>=225&&b<315:b>=135&&b<225||b>=315||b<45){let A=s/e;for(let B=0;B<e;B++){let w=(B-e/2+.5)*A,P=-w*m,j=-w*D,O=A*1.1,$=Math.abs(l*m)+Math.abs(A*D);x.push({center:{x:a.x+P,y:a.y+j},width:O,height:$})}}else{let A=l/e;for(let B=0;B<e;B++){let w=(B-e/2+.5)*A,P=-w*D,j=w*m,O=Math.abs(s*m)+Math.abs(A*D),$=A*1.1;x.push({center:{x:a.x+P,y:a.y+j},width:O,height:$})}}return x}var n5=["top","inner1","inner2","bottom"],O_e=(r,e)=>{let a=l=>e?l.concat(l.map(d=>e?.getNetConnectedToId(d)).filter(Boolean)):l,s=[];for(let l of r)if(l.type==="pcb_smtpad"){if(l.shape==="circle")s.push({type:"oval",layers:[l.layer],center:{x:l.x,y:l.y},width:l.radius*2,height:l.radius*2,connectedTo:a([l.pcb_smtpad_id])});else if(l.shape==="rect")s.push({type:"rect",layers:[l.layer],center:{x:l.x,y:l.y},width:l.width,height:l.height,connectedTo:a([l.pcb_smtpad_id])});else if(l.shape==="rotated_rect"){let d={center:{x:l.x,y:l.y},width:l.width,height:l.height,rotation:l.ccw_rotation},x=Ejt(d);for(let f of x)s.push({type:"rect",layers:[l.layer],center:f.center,width:f.width,height:f.height,connectedTo:a([l.pcb_smtpad_id])})}}else if(l.type==="pcb_keepout")l.shape==="circle"?s.push({type:"oval",layers:l.layers,center:{x:l.center.x,y:l.center.y},width:l.radius*2,height:l.radius*2,connectedTo:[]}):l.shape==="rect"&&s.push({type:"rect",layers:l.layers,center:{x:l.center.x,y:l.center.y},width:l.width,height:l.height,connectedTo:[]});else if(l.type==="pcb_hole")l.hole_shape==="oval"?s.push({type:"oval",center:{x:l.x,y:l.y},width:l.hole_width,height:l.hole_height,connectedTo:[]}):l.hole_shape==="square"?s.push({type:"rect",layers:n5,center:{x:l.x,y:l.y},width:l.hole_diameter,height:l.hole_diameter,connectedTo:[]}):(l.hole_shape==="round"||l.hole_shape==="circle")&&s.push({type:"rect",layers:n5,center:{x:l.x,y:l.y},width:l.hole_diameter,height:l.hole_diameter,connectedTo:[]});else if(l.type==="pcb_plated_hole")l.shape==="circle"?s.push({type:"oval",layers:n5,center:{x:l.x,y:l.y},width:l.outer_diameter,height:l.outer_diameter,connectedTo:a([l.pcb_plated_hole_id])}):(l.shape==="oval"||l.shape==="pill")&&s.push({type:"oval",layers:n5,center:{x:l.x,y:l.y},width:l.outer_width,height:l.outer_height,connectedTo:a([l.pcb_plated_hole_id])});else if(l.type==="pcb_trace"){let d=I_e(l.route.map(x=>({x:x.x,y:x.y,layer:"layer"in x?x.layer:x.from_layer})),l.source_trace_id);s.push(...d)}else l.type==="pcb_via"&&s.push({type:"rect",layers:l.layers,center:{x:l.x,y:l.y},connectedTo:[],width:l.outer_diameter,height:l.outer_diameter});return s};function S_e(r){let{pcbConnMap:e,goalElementId:a}=r;if(!a.startsWith("pcb_port_"))throw new Error(`Currently alternative goal boxes must have a goal id with prefix "pcb_port_" (got ${a})`);let s=e.getAllTracesConnectedToPort(a);return O_e(s).map(l=>({...l,connectedTo:[a]}))}var L_e=r=>{let{connection:e,pcbConnMap:a}=r;if(e.pointsToConnect.length!==2)throw new Error(`Connection must have exactly 2 points for alternative goal boxes (got ${e.pointsToConnect.length})`);let[s,l]=e.pointsToConnect;if(!s.pcb_port_id||!l.pcb_port_id)throw new Error(`Connection points must have pcb_port_id for alternative goal box calculation (got ${s.pcb_port_id} and ${l.pcb_port_id})`);let d=S_e({goalElementId:s.pcb_port_id,pcbConnMap:a}).concat([{center:s,width:.01,height:.01,connectedTo:[s.pcb_port_id],layers:[s.layer],type:"rect"}]),x=S_e({goalElementId:l.pcb_port_id,pcbConnMap:a}).concat([{center:l,width:.01,height:.01,connectedTo:[l.pcb_port_id],layers:[l.layer],type:"rect"}]);if(d.length<=1&&x.length<=1)return{...e,startPoint:s,endPoint:l,goalBoxes:[]};let f=zb(d,x),m,D,b;return d.length>=x.length?(m={...l,...f.pointB},D={...s,...f.pointA},b=d):(m={...s,...f.pointA},D={...l,...f.pointB},b=x),{startPoint:m,endPoint:D,goalBoxes:b,name:e.name,pointsToConnect:[m,D]}},vjt=(r,e={})=>{let a={minTraceWidth:.1};a.layerCount=e.layerCount??1,a.obstacles=O_e(r,e.connMap),a.connections=[];for(let l of r)if(l.type==="source_trace"){let d={name:l.source_trace_id,pointsToConnect:l.connected_source_port_ids.map(x=>{let f=f_e(r).pcb_port.getWhere({source_port_id:x});if(!f)throw new Error(`Could not find pcb_port for source_port_id "${x}"`);return{x:f.x,y:f.y,layer:f.layers?.[0]??"top",pcb_port_id:f.pcb_port_id}})};if(e.optimizeWithGoalBoxes){let x=new r5(r);d=L_e({connection:d,pcbConnMap:x})}a.connections.push(d),Cjt(a.obstacles,d.pointsToConnect,d.name)}let s={minX:1/0,maxX:-1/0,minY:1/0,maxY:-1/0};for(let l of a.obstacles)s.minX=Math.min(s.minX,l.center.x-l.width/2),s.maxX=Math.max(s.maxX,l.center.x+l.width/2),s.minY=Math.min(s.minY,l.center.y-l.height/2),s.maxY=Math.max(s.maxY,l.center.y+l.height/2);for(let l of a.connections)for(let d of l.pointsToConnect)s.minX=Math.min(s.minX,d.x),s.maxX=Math.max(s.maxX,d.x),s.minY=Math.min(s.minY,d.y),s.maxY=Math.max(s.maxY,d.y);return a.bounds=s,a},Cjt=(r,e,a)=>{for(let s of e)for(let l of r)_jt(s,l)&&l.connectedTo.push(a)};function _jt(r,e){let a=e.width/2,s=e.height/2;if(e.type==="rect")return r.x>=e.center.x-a&&r.x<=e.center.x+a&&r.y>=e.center.y-s&&r.y<=e.center.y+s;if(e.type==="oval"){let l=(r.x-e.center.x)/a,d=(r.y-e.center.y)/s;return l*l+d*d<=1}return!1}function B_e(r,e){let a=e.x>r.x?1:e.x<r.x?-1:0,s=e.y>r.y?1:e.y<r.y?-1:0,l=e.l>r.l?1:e.l<r.l?-1:0;return{dx:a,dy:s,dl:l}}var vY={1:["top"],2:["top","bottom"],4:["top","inner1","inner2","bottom"]},Ajt=r=>vY[r];function $_e(r,e){let s=vY[r].indexOf(e);if(s===-1)throw new Error(`Invalid layer for getLayerIndex (for layerCount === ${r}): "${e}"`);return s}function Rjt(r,e){let s=vY[r][e];if(!s)throw new Error(`Invalid index for indexToLayer (for layerCount === ${r}): "${e}"`);return s}var Sjt=class extends j_e{constructor(e,a){super([]);q(this,"obstacles");q(this,"GRID_STEP",.1);q(this,"layerCount");this.layerCount=e;let s=Ajt(e);this.obstacles=a.flatMap(l=>l.layers.filter(d=>s.includes(d)).map(d=>({...l,left:l.center.x-l.width/2,right:l.center.x+l.width/2,top:l.center.y+l.height/2,bottom:l.center.y-l.height/2,l:$_e(e,d)})))}getObstacleAt(e,a,s,l){l??(l=this.GRID_STEP);for(let d of this.obstacles){if(d.l!==s)continue;let x=d.width/2+l,f=d.height/2+l;if(e>=d.center.x-x&&e<=d.center.x+x&&a>=d.center.y-f&&a<=d.center.y+f)return d}return null}isObstacleAt(e,a,s,l){return this.getObstacleAt(e,a,s,l)!==null}getDirectionDistancesToNearestObstacle3d(e,a,s){let{GRID_STEP:l}=this,d={left:1/0,top:1/0,bottom:1/0,right:1/0};for(let x of this.obstacles)if(x.l===s&&x.type==="rect"){let f=x.center.x-x.width/2-l,m=x.center.x+x.width/2+l,D=x.center.y+x.height/2+l,b=x.center.y-x.height/2-l;a>=b&&a<=D&&e>f&&(d.left=Math.min(d.left,e-m)),a>=b&&a<=D&&e<m&&(d.right=Math.min(d.right,f-e)),e>=f&&e<=m&&a<D&&(d.top=Math.min(d.top,b-a)),e>=f&&e<=m&&a>b&&(d.bottom=Math.min(d.bottom,a-D))}return d}getOrthoDirectionCollisionInfo(e,a,{margin:s=0}={}){let{x:l,y:d,l:x}=e,{dx:f,dy:m,dl:D}=a,b=1/0,E=null;if(D!==0){let A=x+D;return this.isObstacleAt(l,d,A,s)?(b=1,E=this.getObstacleAt(l,d,A,s)):b=1,{dx:f,dy:m,dl:D,wallDistance:b,obstacle:E}}else{for(let A of this.obstacles){if(A.l!==x)continue;let B=A.left-s,w=A.right+s,P=A.top+s,j=A.bottom-s,O=null;f===1&&m===0?d>j&&d<P&&l<A.left&&(O=A.left-l):f===-1&&m===0?d>j&&d<P&&l>A.right&&(O=l-A.right):f===0&&m===1?l>B&&l<w&&d<A.bottom&&(O=A.bottom-d):f===0&&m===-1&&l>B&&l<w&&d>A.top&&(O=d-A.top),O!==null&&O<b&&(b=O,E=A)}return{dx:f,dy:m,dl:0,wallDistance:b,obstacle:E}}}getObstaclesOverlappingRegion(e){let a=[];for(let s of this.obstacles){if(s.l!==e.l)continue;let{left:l,right:d,top:x,bottom:f}=s;l<=e.maxX&&d>=e.minX&&x>=e.minY&&f<=e.maxY&&a.push(s)}return a}},a5=class extends N_e{constructor(e){super(e);q(this,"MAX_ITERATIONS",500);q(this,"VIA_COST",4);q(this,"VIA_DIAMETER",.5);q(this,"allowLayerChange",!0);q(this,"layerCount");q(this,"obstacles");q(this,"optimizeWithGoalBoxes");q(this,"connMap");q(this,"pcbConnMap");q(this,"GOAL_RUSH_FACTOR",1.1);q(this,"defaultGoalViaMargin",.5);q(this,"marginsWithCosts");this.layerCount=e.input.layerCount??2,this.MAX_ITERATIONS=e.MAX_ITERATIONS??this.MAX_ITERATIONS,this.VIA_COST=e.VIA_COST??this.VIA_COST,this.connMap=e.connMap,this.pcbConnMap=e.pcbConnMap??new r5,this.optimizeWithGoalBoxes=e.optimizeWithGoalBoxes??!1,this.obstacles=null,this.marginsWithCosts=e.marginsWithCosts??[{margin:1,enterCost:0,travelCostFactor:1},{margin:this.OBSTACLE_MARGIN,enterCost:10,travelCostFactor:2}]}get largestMargin(){return this.marginsWithCosts[0].margin}preprocessConnectionBeforeSolving(e){return this.optimizeWithGoalBoxes?L_e({connection:e,pcbConnMap:this.pcbConnMap}):e}postprocessConnectionSolveResult(e,a){if(!a.solved)return a;if(this.optimizeWithGoalBoxes){let s=a.route.map(l=>({x:l.x,y:l.y,route_type:"wire",layer:l.layer,width:this.input.minTraceWidth}));s[0].start_pcb_port_id=e.pointsToConnect[0].pcb_port_id,s[s.length-1].end_pcb_port_id=e.pointsToConnect[1].pcb_port_id,this.pcbConnMap.addTrace({type:"pcb_trace",pcb_trace_id:`postprocess_trace_${C_e(8)}`,route:s})}return a}createObstacleList({dominantLayer:e,connection:a,obstaclesFromTraces:s}){let l=this.connMap?this.connMap.getNetConnectedToId(a.name):a.name;if(!l)throw new Error(`The connection.name "${a.name}" wasn't present in the full connectivity map`);return new Sjt(this.layerCount,this.allObstacles.filter(d=>!d.connectedTo.includes(l)).concat(s??[]))}computeG(e,a){let s=e.g+u1(e,a)*(e.travelMarginCostFactor??1)+(a.enterMarginCost??0);return(a.l??e.l!==-1??-1)&&(s+=this.VIA_COST),s}computeH(e){let a=Math.abs(e.x-this.goalPoint.x),s=Math.abs(e.y-this.goalPoint.y),l=Math.abs(e.l-this.goalPoint.l);return(a+s)**this.GOAL_RUSH_FACTOR+l*this.VIA_COST}getStartNode(e){return{...super.getStartNode(e),l:this.layerToIndex(e.pointsToConnect[0].layer)}}layerToIndex(e){return $_e(this.layerCount,e)}indexToLayer(e){return Rjt(this.layerCount,e)}getNodeName(e){return`${T_e(e,this.GRID_STEP)}-${e.l??0}`}hasSpaceForVia(e,a){return e.every(s=>this.obstacles.getObstaclesOverlappingRegion({minX:a.x-this.VIA_DIAMETER/2-this.OBSTACLE_MARGIN,minY:a.y-this.VIA_DIAMETER/2-this.OBSTACLE_MARGIN,maxX:a.x+this.VIA_DIAMETER/2+this.OBSTACLE_MARGIN,maxY:a.y+this.VIA_DIAMETER/2+this.OBSTACLE_MARGIN,l:s}).length===0)}getNeighborsSurroundingGoal(e){let a=this.obstacles,s=this.goalPoint,l=[],d=[{dx:1,dy:0,dl:0},{dx:-1,dy:0,dl:0},{dx:0,dy:1,dl:0},{dx:0,dy:-1,dl:0}],x=this.VIA_DIAMETER+this.OBSTACLE_MARGIN+this.defaultGoalViaMargin;for(let f of d){let m={x:e.x+f.dx*x,y:e.y+f.dy*x,l:e.l+f.dl,obstacleHit:null};this.hasSpaceForVia([e.l,s.l],m)&&l.push(m)}return l}getNeighbors(e){let a=this.obstacles,s=this.goalPoint,l=u1(e,s);if(l<=this.OBSTACLE_MARGIN)return this.getNeighborsSurroundingGoal(e);let d;e.parent?d=B_e(e.parent,e):d=B_e(e,s);let x=[{dx:0,dy:1,dl:0},{dx:1,dy:0,dl:0},{dx:0,dy:-1,dl:0},{dx:-1,dy:0,dl:0}],f=l>this.VIA_DIAMETER+this.OBSTACLE_MARGIN,m=u1(e,this.startNode)>this.VIA_DIAMETER+this.OBSTACLE_MARGIN;this.allowLayerChange&&f&&m&&(e.l<this.layerCount-1&&x.push({dx:0,dy:0,dl:1}),e.l>0&&x.push({dx:0,dy:0,dl:-1}));let D=x.filter(E=>E.dx===d.dx*-1&&E.dy===d.dy*-1&&E.dl===d.dl*-1?!1:!(E.dx===d.dx&&E.dy===d.dy&&E.dl===d.dl&&e.parent?.obstacleHit)).map(E=>a.getOrthoDirectionCollisionInfo(e,E,{margin:this.OBSTACLE_MARGIN})).filter(E=>!(E.wallDistance<this.OBSTACLE_MARGIN)),b=[];for(let E of D){let A=E.dx===0&&E.dy===0&&E.dl===1,B=E.dx===0&&E.dy===0&&E.dl===-1;if((A||B)&&![e.l,e.l+E.dl].every($=>a.getObstaclesOverlappingRegion({minX:e.x-this.VIA_DIAMETER/2-this.OBSTACLE_MARGIN,minY:e.y-this.VIA_DIAMETER/2-this.OBSTACLE_MARGIN,maxX:e.x+this.VIA_DIAMETER/2+this.OBSTACLE_MARGIN,maxY:e.y+this.VIA_DIAMETER/2+this.OBSTACLE_MARGIN,l:$}).length===0))continue;if(A){e.l<this.layerCount-1&&b.push({...E,travelDistance:0,enterMarginCost:0,travelMarginCostFactor:1});continue}if(B){e.l>0&&b.push({...E,travelDistance:0,enterMarginCost:0,travelMarginCostFactor:1});continue}let w=null;e?.obstacleHit&&(w=EY({node:e,travelDir:E,wallDir:{...d,wallDistance:this.OBSTACLE_MARGIN},obstacle:e.obstacleHit,obstacles:a,OBSTACLE_MARGIN:this.OBSTACLE_MARGIN,SHOULD_DETECT_CONJOINED_OBSTACLES:!0}));let P=w_e(e,s,E),j=(E.dx===0||Math.sign(s.x-e.x)===E.dx)&&(E.dy===0||Math.sign(s.y-e.y)===E.dy);if(P<E.wallDistance&&P>0&&j){let O=e.l===s.l,$=0;!O&&Math.abs(P-l)<this.GRID_STEP&&($=this.VIA_DIAMETER+this.OBSTACLE_MARGIN+this.defaultGoalViaMargin),b.push({...E,travelDistance:P-$,enterMarginCost:0,travelMarginCostFactor:1})}else if(w!==null&&w<E.wallDistance){for(let{margin:O,enterCost:$,travelCostFactor:ee}of this.marginsWithCosts)w-this.OBSTACLE_MARGIN+O*2<E.wallDistance&&b.push({...E,travelDistance:w-this.OBSTACLE_MARGIN+O,enterMarginCost:$,travelMarginCostFactor:ee});if(E.wallDistance===1/0)b.push({...E,travelDistance:P,enterMarginCost:0,travelMarginCostFactor:1});else if(E.wallDistance>this.largestMargin)for(let{margin:O,enterCost:$,travelCostFactor:ee}of this.marginsWithCosts)E.wallDistance>this.largestMargin+O&&b.push({...E,travelDistance:E.wallDistance-O,enterMarginCost:$,travelMarginCostFactor:ee})}else if(E.wallDistance!==1/0)for(let{margin:O,enterCost:$,travelCostFactor:ee}of this.marginsWithCosts)E.wallDistance>O&&b.push({...E,travelDistance:E.wallDistance-O,enterMarginCost:$,travelMarginCostFactor:ee})}return b.map(E=>({x:e.x+E.dx*E.travelDistance,y:e.y+E.dy*E.travelDistance,l:e.l+E.dl,obstacleHit:E.obstacle,travelMarginCostFactor:E.travelMarginCostFactor,enterMarginCost:E.enterMarginCost}))}};function z_e(r){let e=vjt(r),a=new Fjt({input:e});return{solution:a.solveAndMapToTraces(),debugSolutions:a.debugSolutions,debugMessage:a.debugMessage}}Ge();Ge();Gt();Ge();Ge();Gt();Gt();Ge();Ge();Ge();Ge();Ge();Gt();Ge();Ge();Ge();Gt();Gt();Ge();Ge();Ge();Ge();Ge();Ge();Ge();Ge();Ge();Ge();Ge();Gt();Ge();Gt();Ge();Gt();Gt();Gt();Ge();Gt();Ge();Ge();Ge();Gt();Ge();Ge();Gt();Ge();Gt();Ge();Gt();Ge();Gt();Ge();Gt();Ge();Gt();Ge();Gt();Ge();Ge();Ge();Ge();Ge();Ge();Ge();Ge();Gt();Ge();Gt();Ge();Ge();Gt();Ge();Gt();Ge();Ge();Ge();Gt();Ge();Gt();Ge();Ge();Gt();Ge();Ge();Ge();Ge();Gt();Ge();Gt();Ge();Gt();Ge();Gt();Ge();Gt();Ge();Ge();Gt();Ge();Ge();Gt();Gt();Ge();Ge();Gt();Gt();Ge();Gt();Ge();Ge();Gt();Ge();Gt();Ge();Ge();Gt();Ge();Gt();Ge();Gt();Ge();Gt();Ge();Gt();Ge();Gt();Ge();Gt();Gt();Ge();Gt();Ge();Gt();Ge();Ge();Ge();var lr=r=>{};lr("extra props b");lr("missing props b");lr(!0);lr("property a has mismatched types");var Bjt=C.enum(["up","down","left","right"]),xsr=C.enum(["top-to-bottom","left-to-right","bottom-to-top","right-to-left"]);lr(!0);lr(!0);var G0=C.array(C.string().or(C.number()));lr(!0);var o5=C.object({x:Me,y:Me,z:Me}),wjt=C.object({x:C.union([C.number(),C.string()]),y:C.union([C.number(),C.string()]),z:C.union([C.number(),C.string()])}),Mp=C.object({rotationOffset:C.number().or(wjt).optional(),positionOffset:o5.optional(),size:o5.optional(),modelUnitToMmScale:Me.optional()});lr(!0);var Tjt=Mp.extend({stlUrl:C.string()}),Pjt=Mp.extend({objUrl:C.string(),mtlUrl:C.string().optional()}),Ijt=Mp.extend({gltfUrl:C.string()}),jjt=Mp.extend({glbUrl:C.string()}),kjt=Mp.extend({stepUrl:C.string()}),Njt=Mp.extend({wrlUrl:C.string()}),Mjt=Mp.extend({jscad:C.record(C.any())}),X_e=C.union([C.null(),C.string(),C.custom(r=>r&&typeof r=="object"&&"type"in r&&"props"in r),Tjt,Pjt,Ijt,jjt,kjt,Njt,Mjt]);lr(!0);var Ojt=C.custom(r=>!0),Ljt=C.custom(r=>!0),Ma=C.object({pcbX:Me.optional(),pcbY:Me.optional(),pcbRotation:Ba.optional(),pcbPositionAnchor:C.string().optional(),layer:ln.optional(),pcbMarginTop:Me.optional(),pcbMarginRight:Me.optional(),pcbMarginBottom:Me.optional(),pcbMarginLeft:Me.optional(),pcbMarginX:Me.optional(),pcbMarginY:Me.optional(),pcbRelative:C.boolean().optional(),relative:C.boolean().optional()});lr(!0);var u5=C.object({pcbX:Me.optional(),pcbY:Me.optional(),pcbRotation:Ba.optional(),pcbPositionAnchor:C.string().optional(),pcbMarginTop:Me.optional(),pcbMarginRight:Me.optional(),pcbMarginBottom:Me.optional(),pcbMarginLeft:Me.optional(),pcbMarginX:Me.optional(),pcbMarginY:Me.optional(),schMarginTop:Me.optional(),schMarginRight:Me.optional(),schMarginBottom:Me.optional(),schMarginLeft:Me.optional(),schMarginX:Me.optional(),schMarginY:Me.optional(),schX:Me.optional(),schY:Me.optional(),schRotation:Ba.optional(),layer:ln.optional(),footprint:Ojt.optional(),symbol:Ljt.optional(),relative:C.boolean().optional(),schRelative:C.boolean().optional(),pcbRelative:C.boolean().optional()});lr(!0);var $jt=C.object({supplierPartNumbers:C.record(qm,C.array(C.string())).optional()});lr(!0);var zjt=C.object({providesPower:C.boolean().optional(),requiresPower:C.boolean().optional(),providesGround:C.boolean().optional(),requiresGround:C.boolean().optional(),providesVoltage:C.union([C.string(),C.number()]).optional(),requiresVoltage:C.union([C.string(),C.number()]).optional(),doNotConnect:C.boolean().optional()});lr(!0);var gs=u5.merge($jt).extend({key:C.any().optional(),name:C.string(),cadModel:X_e.optional(),children:C.any().optional(),symbolName:C.string().optional(),doNotPlace:C.boolean().optional(),pinAttributes:C.record(C.string(),zjt).optional()});lr(!0);var _Y=["pin1","left","pin2","right"],c5=["pin1","left","anode","pos","pin2","right","cathode","neg"],Csr=Me.or(C.enum(["2x","3x","4x"])),Op=C.enum(["vertical","horizontal","pos_top","pos_bottom","pos_left","pos_right","neg_top","neg_bottom","neg_left","neg_right"]).describe("horizontal means pins go 1->2 rightward and vertical means pins go 1->2 downward (generally, positive on top)");lr(!0);var s5=C.object({pins:C.array(C.union([C.number(),C.string()])),direction:C.union([C.literal("top-to-bottom"),C.literal("left-to-right"),C.literal("bottom-to-top"),C.literal("right-to-left")])}),Ub=C.object({leftSize:C.number().optional().describe("@deprecated, use leftPinCount"),topSize:C.number().optional().describe("@deprecated, use topPinCount"),rightSize:C.number().optional().describe("@deprecated, use rightPinCount"),bottomSize:C.number().optional().describe("@deprecated, use bottomPinCount"),leftPinCount:C.number().optional(),rightPinCount:C.number().optional(),topPinCount:C.number().optional(),bottomPinCount:C.number().optional(),leftSide:s5.optional(),rightSide:s5.optional(),topSide:s5.optional(),bottomSide:s5.optional()}),Y_e=Ub;lr(!0);var l5=C.record(C.object({marginLeft:Me.optional(),marginRight:Me.optional(),marginTop:Me.optional(),marginBottom:Me.optional(),leftMargin:Me.optional(),rightMargin:Me.optional(),topMargin:Me.optional(),bottomMargin:Me.optional()}));lr(!0);var Qu=C.string().regex(/^[A-Za-z0-9_]+$/),Vb=C.object({x:Me,y:Me}),Gb=C.object({edit_event_id:C.string(),in_progress:C.boolean().optional(),created_at:C.number()});lr(!0);var qjt=Gb.extend({pcb_edit_event_type:C.literal("edit_component_location").describe("deprecated"),edit_event_type:C.literal("edit_pcb_component_location"),pcb_component_id:C.string(),original_center:C.object({x:C.number(),y:C.number()}),new_center:C.object({x:C.number(),y:C.number()})});lr(!0);var Ujt=Gb.extend({pcb_edit_event_type:C.literal("edit_trace_hint").describe("deprecated"),edit_event_type:C.literal("edit_pcb_trace_hint").optional(),pcb_port_id:C.string(),pcb_trace_hint_id:C.string().optional(),route:C.array(C.object({x:C.number(),y:C.number(),via:C.boolean().optional()}))});lr(!0);var Vjt=Gb.extend({edit_event_type:C.literal("edit_schematic_component_location"),schematic_component_id:C.string(),original_center:C.object({x:C.number(),y:C.number()}),new_center:C.object({x:C.number(),y:C.number()})});lr(!0);var $sr=Gb.extend({edit_event_type:C.literal("edit_pcb_group_location"),pcb_group_id:C.string(),original_center:C.object({x:C.number(),y:C.number()}),new_center:C.object({x:C.number(),y:C.number()})});lr(!0);var qsr=Gb.extend({edit_event_type:C.literal("edit_schematic_group_location"),schematic_group_id:C.string(),original_center:C.object({x:C.number(),y:C.number()}),new_center:C.object({x:C.number(),y:C.number()})});lr(!0);var Vsr=C.union([qjt,Ujt,Vjt]);lr(!0);var Gjt=C.object({selector:C.string(),relative_to:C.string().optional().default("group_center").describe("Can be a selector or 'group_center'"),center:fn});lr(!0);var Xjt=C.object({pcb_port_selector:C.string(),offsets:C.array(bo)});lr(!0);var Yjt=C.object({selector:C.string(),relative_to:C.string().optional().default("group_center").describe("Can be a selector or 'group_center'"),center:fn});lr(!0);var Hjt=C.object({pcb_placements:C.array(Gjt).optional(),manual_trace_hints:C.array(Xjt).optional(),schematic_placements:C.array(Yjt).optional()});lr(!0);var qb=C.object({layoutMode:C.enum(["grid","flex","match-adapt","relative","none"]).optional(),position:C.enum(["absolute","relative"]).optional(),grid:C.boolean().optional(),gridCols:C.number().or(C.string()).optional(),gridRows:C.number().or(C.string()).optional(),gridTemplateRows:C.string().optional(),gridTemplateColumns:C.string().optional(),gridTemplate:C.string().optional(),gridGap:C.number().or(C.string()).optional(),gridRowGap:C.number().or(C.string()).optional(),gridColumnGap:C.number().or(C.string()).optional(),flex:C.boolean().or(C.string()).optional(),flexDirection:C.enum(["row","column"]).optional(),alignItems:C.enum(["start","center","end","stretch"]).optional(),justifyContent:C.enum(["start","center","end","stretch","space-between","space-around","space-evenly"]).optional(),flexRow:C.boolean().optional(),flexColumn:C.boolean().optional(),gap:C.number().or(C.string()).optional(),pack:C.boolean().optional().describe("Pack the contents of this group using a packing strategy"),packOrderStrategy:C.enum(["largest_to_smallest","first_to_last","highest_to_lowest_pin_count"]).optional(),packPlacementStrategy:C.enum(["shortest_connection_along_outline"]).optional(),padding:pe.optional(),paddingLeft:pe.optional(),paddingRight:pe.optional(),paddingTop:pe.optional(),paddingBottom:pe.optional(),paddingX:pe.optional(),paddingY:pe.optional(),width:pe.optional(),height:pe.optional(),matchAdapt:C.boolean().optional(),matchAdaptTemplate:C.any().optional()});lr(!0);var q_e=C.object({strokeWidth:pe.optional(),dashed:C.boolean().optional(),solid:C.boolean().optional()}),Wjt=C.object({serverUrl:C.string().optional(),inputFormat:C.enum(["simplified","circuit-json"]).optional(),serverMode:C.enum(["job","solve-endpoint"]).optional(),serverCacheEnabled:C.boolean().optional(),cache:C.custom(r=>!0).optional(),traceClearance:pe.optional(),groupMode:C.enum(["sequential_trace","subcircuit","sequential-trace"]).optional(),algorithmFn:C.custom(r=>typeof r=="function"||r===void 0).optional(),preset:C.enum(["sequential_trace","subcircuit","auto","auto_local","auto_cloud","freerouting","sequential-trace","auto-local","auto-cloud"]).optional(),local:C.boolean().optional()}),H_e=C.union([Wjt,C.literal("sequential_trace"),C.literal("subcircuit"),C.literal("auto"),C.literal("auto_local"),C.literal("auto_cloud"),C.literal("freerouting"),C.literal("sequential-trace"),C.literal("auto-local"),C.literal("auto-cloud")]),W_e=u5.extend({name:C.string().optional(),children:C.any().optional(),schTitle:C.string().optional(),key:C.any().optional(),...qb.shape,grid:qb.shape.grid.describe("@deprecated use pcbGrid"),flex:qb.shape.flex.describe("@deprecated use pcbFlex"),pcbGrid:C.boolean().optional(),pcbGridCols:C.number().or(C.string()).optional(),pcbGridRows:C.number().or(C.string()).optional(),pcbGridTemplateRows:C.string().optional(),pcbGridTemplateColumns:C.string().optional(),pcbGridTemplate:C.string().optional(),pcbGridGap:C.number().or(C.string()).optional(),pcbGridRowGap:C.number().or(C.string()).optional(),pcbGridColumnGap:C.number().or(C.string()).optional(),pcbFlex:C.boolean().or(C.string()).optional(),pcbFlexGap:C.number().or(C.string()).optional(),pcbFlexDirection:C.enum(["row","column"]).optional(),pcbAlignItems:C.enum(["start","center","end","stretch"]).optional(),pcbJustifyContent:C.enum(["start","center","end","stretch","space-between","space-around","space-evenly"]).optional(),pcbFlexRow:C.boolean().optional(),pcbFlexColumn:C.boolean().optional(),pcbGap:C.number().or(C.string()).optional(),pcbPack:C.boolean().optional(),schGrid:C.boolean().optional(),schGridCols:C.number().or(C.string()).optional(),schGridRows:C.number().or(C.string()).optional(),schGridTemplateRows:C.string().optional(),schGridTemplateColumns:C.string().optional(),schGridTemplate:C.string().optional(),schGridGap:C.number().or(C.string()).optional(),schGridRowGap:C.number().or(C.string()).optional(),schGridColumnGap:C.number().or(C.string()).optional(),schFlex:C.boolean().or(C.string()).optional(),schFlexGap:C.number().or(C.string()).optional(),schFlexDirection:C.enum(["row","column"]).optional(),schAlignItems:C.enum(["start","center","end","stretch"]).optional(),schJustifyContent:C.enum(["start","center","end","stretch","space-between","space-around","space-evenly"]).optional(),schFlexRow:C.boolean().optional(),schFlexColumn:C.boolean().optional(),schGap:C.number().or(C.string()).optional(),schPack:C.boolean().optional(),schMatchAdapt:C.boolean().optional(),pcbWidth:pe.optional(),pcbHeight:pe.optional(),schWidth:pe.optional(),schHeight:pe.optional(),pcbLayout:qb.optional(),schLayout:qb.optional(),cellBorder:q_e.nullable().optional(),border:q_e.nullable().optional(),schPadding:pe.optional(),schPaddingLeft:pe.optional(),schPaddingRight:pe.optional(),schPaddingTop:pe.optional(),schPaddingBottom:pe.optional(),pcbPadding:pe.optional(),pcbPaddingLeft:pe.optional(),pcbPaddingRight:pe.optional(),pcbPaddingTop:pe.optional(),pcbPaddingBottom:pe.optional()}),K_e=C.custom(r=>"findPart"in r),AY=W_e.extend({manualEdits:Hjt.optional(),schAutoLayoutEnabled:C.boolean().optional(),schTraceAutoLabelEnabled:C.boolean().optional(),schMaxTraceDistance:Me.optional(),routingDisabled:C.boolean().optional(),defaultTraceWidth:pe.optional(),minTraceWidth:pe.optional(),partsEngine:K_e.optional(),pcbRouteCache:C.custom(r=>!0).optional(),autorouter:H_e.optional(),square:C.boolean().optional(),emptyArea:C.string().optional(),filledArea:C.string().optional(),width:Me.optional(),height:Me.optional(),outline:C.array(Vb).optional(),outlineOffsetX:Me.optional(),outlineOffsetY:Me.optional()}),Kjt=AY.extend({subcircuit:C.literal(!0)}),J_e=C.discriminatedUnion("subcircuit",[W_e.extend({subcircuit:C.literal(!1).optional()}),Kjt]);lr(!0);lr(!0);lr(!0);var RY=AY.extend({material:C.enum(["fr4","fr1"]).default("fr4"),layers:C.union([C.literal(2),C.literal(4)]).default(2),borderRadius:Me.optional()});lr(!0);var Qsr=AY.extend({padding:Me.optional(),paddingLeft:Me.optional(),paddingRight:Me.optional(),paddingTop:Me.optional(),paddingBottom:Me.optional()});lr(!0);var Jjt=C.string().or(C.array(C.string()).readonly()).or(C.array(C.string())),Zjt=C.custom().pipe(C.record(C.string(),Jjt)),Qjt=C.record(Qu,Qu.or(C.array(Qu).readonly()).or(C.array(Qu)));lr(!0);var ekt=C.object({manufacturerPartNumber:C.string().optional(),supplierPartNumber:C.record(qm,C.array(C.string())).optional()}),cg=gs.extend({manufacturerPartNumber:C.string().optional(),pinLabels:Qjt.optional(),showPinAliases:C.boolean().optional(),pcbPinLabels:C.record(C.string(),C.string()).optional(),internallyConnectedPins:C.array(C.array(C.union([C.string(),C.number()]))).optional(),externallyConnectedPins:C.array(C.array(C.string())).optional(),schPinArrangement:Ub.optional(),schPortArrangement:Ub.optional(),pinCompatibleVariants:C.array(ekt).optional(),schPinStyle:l5.optional(),schPinSpacing:Me.optional(),schWidth:Me.optional(),schHeight:Me.optional(),noSchematicRepresentation:C.boolean().optional(),connections:Zjt.optional()});lr(!0);var Z_e=cg;lr(!0);var SY=C.string().or(C.array(C.string()).readonly()).or(C.array(C.string())),c1=r=>C.record(C.enum(r),SY),BY=gs.extend({manufacturerPartNumber:C.string().optional(),pinLabels:C.record(C.number().or(Qu),Qu.or(C.array(Qu))).optional(),schPinStyle:l5.optional(),schPinSpacing:Me.optional(),schWidth:Me.optional(),schHeight:Me.optional(),schDirection:C.enum(["left","right"]).optional(),schPinArrangement:Y_e.optional(),schPortArrangement:Ub.optional(),pcbPinLabels:C.record(C.string(),C.string()).optional(),pinCount:C.union([C.literal(2),C.literal(3)]).optional(),internallyConnectedPins:C.array(C.array(C.union([C.string(),C.number()]))).optional(),connections:C.custom().pipe(C.record(C.string(),SY)).optional()});lr(!0);var Q_e=BY.extend({bridgedPins:C.array(C.array(C.string())).optional(),bridged:C.boolean().optional()});lr(!0);var uir=gs.extend({manufacturerPartNumber:C.string().optional(),pinLabels:C.record(C.number().or(Qu),Qu.or(C.array(Qu))).optional(),schPinStyle:l5.optional(),schPinSpacing:Me.optional(),schWidth:Me.optional(),schHeight:Me.optional(),schDirection:C.enum(["left","right"]).optional(),schPortArrangement:Ub.optional(),internallyConnectedPins:C.array(C.array(C.union([C.string(),C.number()]))).optional(),standard:C.enum(["usb_c","m2"]).optional()});lr(!0);var eAe=gs.extend({currentRating:C.union([C.number(),C.string()]),voltageRating:C.union([C.number(),C.string()]).optional(),schShowRatings:C.boolean().optional(),schOrientation:Op.optional(),connections:C.record(C.string(),C.union([C.string(),C.array(C.string()).readonly(),C.array(C.string())])).optional()}),i5=C.custom().transform(r=>{if(r!==void 0)return Me.parse(r)}),tAe=C.discriminatedUnion("shape",[Ma.omit({pcbRotation:!0,layer:!0}).extend({name:C.string().optional(),connectsTo:C.string().or(C.array(C.string())).optional(),shape:C.literal("circle"),holeDiameter:Me,outerDiameter:Me,portHints:G0.optional()}),Ma.omit({pcbRotation:!0,layer:!0}).extend({name:C.string().optional(),connectsTo:C.string().or(C.array(C.string())).optional(),shape:C.literal("oval"),outerWidth:Me,outerHeight:Me,holeWidth:i5,holeHeight:i5,innerWidth:Me.optional().describe("DEPRECATED use holeWidth"),innerHeight:Me.optional().describe("DEPRECATED use holeHeight"),portHints:G0.optional()}),Ma.omit({layer:!0}).extend({name:C.string().optional(),connectsTo:C.string().or(C.array(C.string())).optional(),shape:C.literal("pill"),rectPad:C.boolean().optional(),outerWidth:Me,outerHeight:Me,holeWidth:i5,holeHeight:i5,innerWidth:Me.optional().describe("DEPRECATED use holeWidth"),innerHeight:Me.optional().describe("DEPRECATED use holeHeight"),portHints:G0.optional()}),Ma.omit({pcbRotation:!0,layer:!0}).extend({name:C.string().optional(),connectsTo:C.string().or(C.array(C.string())).optional(),shape:C.literal("circular_hole_with_rect_pad"),holeDiameter:Me,rectPadWidth:Me,rectPadHeight:Me,holeShape:C.literal("circle").optional(),padShape:C.literal("rect").optional(),portHints:G0.optional(),pcbHoleOffsetX:Me.optional(),pcbHoleOffsetY:Me.optional()}),Ma.omit({pcbRotation:!0,layer:!0}).extend({name:C.string().optional(),connectsTo:C.string().or(C.array(C.string())).optional(),shape:C.literal("pill_hole_with_rect_pad"),holeShape:C.literal("pill"),padShape:C.literal("rect"),holeWidth:Me,holeHeight:Me,rectPadWidth:Me,rectPadHeight:Me,portHints:G0.optional()})]).refine(r=>("innerWidth"in r&&r.innerWidth!==void 0&&(r.holeWidth??(r.holeWidth=r.innerWidth)),"innerHeight"in r&&r.innerHeight!==void 0&&(r.holeHeight??(r.holeHeight=r.innerHeight)),r));lr(!0);var tkt=["pin1","pin2","pos","neg"],rAe=gs.extend({resistance:Bp,pullupFor:C.string().optional(),pullupTo:C.string().optional(),pulldownFor:C.string().optional(),pulldownTo:C.string().optional(),schOrientation:Op.optional(),connections:c1(tkt).optional()}),nAe=_Y;lr(!0);var aAe=gs.extend({maxResistance:Bp,pinVariant:C.enum(["two_pin","three_pin"]).optional()});lr(!0);var rkt=_Y,sAe=gs.extend({frequency:Mc,loadCapacitance:Xl,manufacturerPartNumber:C.string().optional(),mpn:C.string().optional(),pinVariant:C.enum(["two_pin","four_pin"]).optional(),schOrientation:Op.optional(),connections:c1(rkt).optional()});lr(!0);var iAe=gs.extend({frequency:Mc,loadCapacitance:Xl,pinVariant:C.enum(["no_ground","ground_pin","two_ground_pins"]).optional()});lr(!0);var Eir=RY.extend({leftPinCount:C.number().optional(),rightPinCount:C.number().optional(),topPinCount:C.number().optional(),bottomPinCount:C.number().optional(),leftPins:C.array(C.string()).optional(),rightPins:C.array(C.string()).optional(),topPins:C.array(C.string()).optional(),bottomPins:C.array(C.string()).optional(),pinPitch:Me.optional(),innerHoles:C.boolean().optional()});lr(!0);var nkt=["pin1","pin2","pos","neg","anode","cathode"],oAe=gs.extend({capacitance:Xl,maxVoltageRating:Us.optional(),schShowRatings:C.boolean().optional().default(!1),polarized:C.boolean().optional().default(!1),decouplingFor:C.string().optional(),decouplingTo:C.string().optional(),bypassFor:C.string().optional(),bypassTo:C.string().optional(),maxDecouplingTraceLength:C.number().optional(),schOrientation:Op.optional(),connections:c1(nkt).optional()}),uAe=c5;lr(!0);var Air=C.object({name:C.string(),connectsTo:C.string().or(C.array(C.string())).optional()});lr(!0);var Sir=C.object({name:C.string().optional(),pcbOnly:C.boolean().optional(),schOnly:C.boolean().optional()});lr(!0);var akt=C.object({pcb:C.literal(!0).optional(),xDist:Me,left:C.string(),right:C.string(),edgeToEdge:C.literal(!0).optional(),centerToCenter:C.literal(!0).optional()});lr(!0);var skt=C.object({pcb:C.literal(!0).optional(),yDist:Me,top:C.string(),bottom:C.string(),edgeToEdge:C.literal(!0).optional(),centerToCenter:C.literal(!0).optional()});lr(!0);var ikt=C.object({pcb:C.literal(!0).optional(),sameY:C.literal(!0).optional(),for:C.array(C.string())});lr(!0);var okt=C.object({pcb:C.literal(!0).optional(),sameX:C.literal(!0).optional(),for:C.array(C.string())});lr(!0);var cAe=C.union([akt,skt,ikt,okt]);lr(!0);var ukt=Ma.omit({layer:!0,pcbRotation:!0}).extend({name:C.string().optional(),shape:C.literal("rect"),width:Me,height:Me});lr(!0);var ckt=Ma.omit({layer:!0,pcbRotation:!0}).extend({name:C.string().optional(),shape:C.literal("circle"),radius:Me});lr(!0);var lkt=Ma.omit({layer:!0,pcbRotation:!0}).extend({name:C.string().optional(),shape:C.literal("polygon"),points:C.array(Vb)});lr(!0);var lAe=C.discriminatedUnion("shape",[ukt,ckt,lkt]),dkt=Ma.omit({pcbRotation:!0}).extend({name:C.string().optional(),shape:C.literal("rect"),width:Me,height:Me,portHints:G0.optional()});lr(!0);var pkt=Ma.omit({pcbRotation:!0}).extend({name:C.string().optional(),shape:C.literal("rotated_rect"),width:Me,height:Me,ccwRotation:C.number(),portHints:G0.optional()});lr(!0);var xkt=Ma.omit({pcbRotation:!0}).extend({name:C.string().optional(),shape:C.literal("circle"),radius:Me,portHints:G0.optional()});lr(!0);var fkt=Ma.omit({pcbRotation:!0}).extend({name:C.string().optional(),shape:C.literal("pill"),width:Me,height:Me,radius:Me,portHints:G0.optional()});lr(!0);var hkt=Ma.omit({pcbRotation:!0}).extend({name:C.string().optional(),shape:C.literal("polygon"),points:C.array(Vb),portHints:G0.optional()});lr(!0);var dAe=C.discriminatedUnion("shape",[xkt,dkt,pkt,fkt,hkt]);lr(!0);var mkt=Ma.omit({pcbRotation:!0}).extend({shape:C.literal("rect"),width:Me,height:Me});lr(!0);var gkt=Ma.omit({pcbRotation:!0}).extend({shape:C.literal("circle"),radius:Me});lr(!0);var Iir=C.union([gkt,mkt]);lr(!0);var pAe=Ma.omit({pcbRotation:!0}).extend({name:C.string().optional(),diameter:Me.optional(),radius:Me.optional()}).transform(r=>({...r,diameter:r.diameter??2*r.radius,radius:r.radius??r.diameter/2}));lr(!0);var CY=C.union([C.string(),C.custom(r=>!!r.getPortSelector)]),U_e=C.object({key:C.string().optional(),thickness:Me.optional(),schematicRouteHints:C.array(Vb).optional(),pcbRouteHints:C.array(bo).optional(),pcbPathRelativeTo:C.string().optional(),pcbPath:C.array(Vb).optional(),schDisplayLabel:C.string().optional(),schStroke:C.string().optional(),maxLength:Me.optional()}),xAe=C.union([U_e.extend({path:C.array(CY)}),U_e.extend({from:CY,to:CY})]),fAe=C.object({originalLayer:ln.default("top").optional()});lr(!0);var $ir=C.object({originalFacingDirection:C.enum(["up","down","left","right"]).default("right").optional()});lr(!0);var Dkt=C.number().or(C.string().endsWith("mAh")).transform(r=>{if(typeof r=="string"){let e=r.replace("mAh",""),a=Number.parseFloat(e);if(Number.isNaN(a))throw new Error("Invalid capacity");return a}return r}).describe("Battery capacity in mAh"),hAe=gs.extend({capacity:Dkt.optional(),voltage:Us.optional(),standard:C.enum(["AA","AAA","9V","CR2032","18650","C"]).optional(),schOrientation:Op.optional()});lr(!0);var ykt=C.enum(["vertical","horizontal"]).describe("vertical means pins go 1->2 downward and horizontal means pins go 1->2 rightward");lr(!0);var mAe=gs.extend({pinCount:C.number(),pitch:Me.optional(),schFacingDirection:C.enum(["up","down","left","right"]).optional(),gender:C.enum(["male","female","unpopulated"]).optional().default("male"),showSilkscreenPinLabels:C.boolean().optional(),pcbPinLabels:C.record(C.string(),C.string()).optional(),doubleRow:C.boolean().optional(),rightAngle:C.boolean().optional(),pcbOrientation:ykt.optional(),holeDiameter:Me.optional(),platedDiameter:Me.optional(),pinLabels:C.record(C.string(),Qu).or(C.array(Qu)).optional(),connections:C.custom().pipe(C.record(C.string(),SY)).optional(),facingDirection:C.enum(["left","right"]).optional(),schPinArrangement:Y_e.optional(),schPinStyle:l5.optional(),schPinSpacing:Me.optional(),schWidth:Me.optional(),schHeight:Me.optional()});lr(!0);var Hir=C.object({net:C.string().optional(),connection:C.string().optional(),schX:Me.optional(),schY:Me.optional(),schRotation:Ba.optional(),anchorSide:C.enum(["left","top","right","bottom"]).optional()});lr(!0);var gAe=C.object({net:C.string().optional(),connection:C.string().optional(),connectsTo:C.string().or(C.array(C.string())).optional(),schX:Me.optional(),schY:Me.optional(),schRotation:Ba.optional(),anchorSide:C.enum(["left","top","right","bottom"]).optional()});lr(!0);var DAe=cg.extend({});lr(!0);lr(!0);var bkt=["pin1","pin2","pin3","emitter","collector","base","gate","source","drain"],yAe=gs.extend({type:C.enum(["npn","pnp","bjt","jfet","mosfet","igbt"]),connections:c1(bkt).optional()});lr(!0);var bAe=gs.extend({channelType:C.enum(["n","p"]),mosfetMode:C.enum(["enhancement","depletion"])});lr(!0);var Fkt=_Y,FAe=gs.extend({inductance:OA,maxCurrentRating:C.union([C.string(),C.number()]).optional(),schOrientation:Op.optional(),connections:c1(Fkt).optional()});lr(!0);var Ekt=C.enum(["anode","cathode","pin1","pin2","pos","neg"]),vkt=C.string().or(C.array(C.string()).readonly()).or(C.array(C.string())),Ckt=C.record(Ekt,vkt),_kt=C.enum(["standard","schottky","zener","avalanche","photo","tvs"]),EAe=gs.extend({connections:Ckt.optional(),variant:_kt.optional().default("standard"),standard:C.boolean().optional(),schottky:C.boolean().optional(),zener:C.boolean().optional(),avalanche:C.boolean().optional(),photo:C.boolean().optional(),tvs:C.boolean().optional(),schOrientation:Op.optional()}).superRefine((r,e)=>{if([r.standard,r.schottky,r.zener,r.avalanche,r.photo,r.tvs].filter(Boolean).length>1)return e.addIssue({code:C.ZodIssueCode.custom,message:"Exactly one diode variant must be enabled",path:[]}),C.INVALID}).transform(r=>{let e={...r,standard:!1,schottky:!1,zener:!1,avalanche:!1,photo:!1,tvs:!1};if(r.standard)e.standard=!0;else if(r.schottky)e.schottky=!0;else if(r.zener)e.zener=!0;else if(r.photo)e.photo=!0;else if(r.tvs)e.tvs=!0;else switch(r.variant){case"standard":e.standard=!0;break;case"schottky":e.schottky=!0;break;case"zener":e.zener=!0;break;case"avalanche":e.avalanche=!0;break;case"photo":e.photo=!0;break;case"tvs":e.tvs=!0;break;default:e.standard=!0}return e}),vAe=c5;lr(!0);var CAe=gs.extend({color:C.string().optional(),wavelength:C.string().optional(),schDisplayValue:C.string().optional(),schOrientation:Op.optional(),connections:c1(c5).optional(),laser:C.boolean().optional()}),_Ae=c5,AAe=gs.extend({type:C.enum(["spst","spdt","dpst","dpdt"]).optional(),isNormallyClosed:C.boolean().optional().default(!1),spst:C.boolean().optional(),spdt:C.boolean().optional(),dpst:C.boolean().optional(),dpdt:C.boolean().optional()}).transform(r=>{let e={...r};switch(e.dpdt?e.type="dpdt":e.spst?e.type="spst":e.spdt?e.type="spdt":e.dpst&&(e.type="dpst"),e.type){case"spdt":e.spdt=!0;break;case"spst":e.spst=!0;break;case"dpst":e.dpst=!0;break;case"dpdt":e.dpdt=!0;break}return e});lr(!0);var RAe=Ma.extend({text:C.string(),anchorAlignment:C.enum(["center","top_left","top_right","bottom_left","bottom_right"]).default("center"),font:C.enum(["tscircuit2024"]).optional(),fontSize:pe.optional(),color:C.string().optional()}),SAe=Ma.omit({pcbX:!0,pcbY:!0,pcbRotation:!0}).extend({route:C.array(bo),strokeWidth:pe.optional(),color:C.string().optional()}),lor=C.object({layer:C.string().optional(),thickness:Me.optional(),route:C.array(bo)}),BAe=u5.extend({name:C.string().optional(),fromLayer:ln,toLayer:ln,holeDiameter:Me,outerDiameter:Me,connectsTo:C.string().or(C.array(C.string())).optional()});lr(!0);var wAe=gs.extend({footprintVariant:C.enum(["pad","through_hole"]).optional(),padShape:C.enum(["rect","circle"]).optional().default("circle"),padDiameter:Me.optional(),holeDiameter:Me.optional(),width:Me.optional(),height:Me.optional()}).refine(r=>r.footprintVariant!=="through_hole"||r.holeDiameter!==void 0,{message:"holeDiameter is required for through_hole testpoints"});lr(!0);var TAe=Ma.omit({pcbRotation:!0,layer:!0}).extend({connection:C.string()});lr(!0);var PAe=C.union([Ma.omit({pcbRotation:!0}).extend({shape:C.literal("circle"),radius:Me}),Ma.extend({shape:C.literal("rect"),width:Me,height:Me})]),For=C.object({name:C.string().optional(),layer:ln,connectsTo:C.string(),padMargin:Me.optional(),traceMargin:Me.optional()});lr(!0);var IAe=C.object({originalLayer:ln.default("top").optional(),children:C.any().optional()});lr(!0);var Akt=C.object({pcbX:Me.optional(),pcbY:Me.optional(),pcbZ:Me.optional()}),Rkt=Mp.extend({modelUrl:C.string()}),Skt=Rkt.merge(Akt);lr(!0);var jAe=C.union([C.null(),C.string(),Skt]),kAe=gs.extend({voltage:Us}),Bkt=["pin1","pin2","pos","neg"],wkt=C.union([C.string(),C.number()]).transform(r=>typeof r=="string"?r.endsWith("%")?parseFloat(r.slice(0,-1))/100:parseFloat(r):r).pipe(C.number().min(0,"Duty cycle must be non-negative").max(1,"Duty cycle cannot be greater than 100%")),Sor=gs.extend({voltage:Us.optional(),frequency:Mc.optional(),peakToPeakVoltage:Us.optional(),waveShape:C.enum(["sinewave","square","triangle","sawtooth"]).optional(),phase:Ba.optional(),dutyCycle:wkt.optional(),connections:c1(Bkt).optional()});lr(!0);var d5=C.enum(["top_left","top_center","top_right","center_left","center","center_right","bottom_left","bottom_center","bottom_right"]),NAe=C.object({schX:Me.optional(),schY:Me.optional(),width:Me.optional(),height:Me.optional(),overlay:C.array(C.string()).optional(),padding:Me.optional(),paddingLeft:Me.optional(),paddingRight:Me.optional(),paddingTop:Me.optional(),paddingBottom:Me.optional(),title:C.string().optional(),titleAlignment:d5.default("top_left"),titleColor:C.string().optional(),titleFontSize:Me.optional(),titleInside:C.boolean().default(!1),strokeStyle:C.enum(["solid","dashed"]).default("solid")}).refine(r=>r.width!==void 0&&r.height!==void 0||Array.isArray(r.overlay)&&r.overlay.length>0,{message:"Must provide either both `width` and `height`, or a non-empty `overlay` array."}).refine(r=>!(r.width!==void 0&&r.height!==void 0&&Array.isArray(r.overlay)&&r.overlay.length>0),{message:"Cannot provide both `width`/`height` and `overlay` at the same time."}),jor=C.object({x1:Me,y1:Me,x2:Me,y2:Me}),Tkt=C.enum(["center","left","right","top","bottom"]),MAe=C.object({schX:Me.optional(),schY:Me.optional(),text:C.string(),fontSize:C.number().default(1),anchor:C.union([Tkt.describe("legacy"),d5]).default("center"),color:C.string().default("#000000"),schRotation:Ba.default(0)}),$or=C.object({points:C.array(fn),isFilled:C.boolean().optional().default(!1),fillColor:C.enum(["red","blue"]).optional()}),OAe=C.object({schX:Me.optional(),schY:Me.optional(),children:C.any().optional(),cellPadding:Me.optional(),borderWidth:Me.optional(),anchor:d5.optional(),fontSize:Me.optional()});lr(!0);var LAe=C.object({children:C.any().optional(),height:Me.optional()});lr(!0);var $Ae=C.object({children:C.string().optional(),horizontalAlign:C.enum(["left","center","right"]).optional(),verticalAlign:C.enum(["top","middle","bottom"]).optional(),fontSize:Me.optional(),rowSpan:C.number().optional(),colSpan:C.number().optional(),width:Me.optional(),text:C.string().optional()});lr(!0);var zAe=Ma.extend({text:C.string(),anchorAlignment:d5.default("center"),font:C.enum(["tscircuit2024"]).optional(),fontSize:pe.optional(),isKnockout:C.boolean().optional(),knockoutPadding:pe.optional(),knockoutPaddingLeft:pe.optional(),knockoutPaddingRight:pe.optional(),knockoutPaddingTop:pe.optional(),knockoutPaddingBottom:pe.optional(),layers:C.array(ln).optional()}),qAe=Ma.omit({pcbX:!0,pcbY:!0,pcbRotation:!0}).extend({route:C.array(bo),strokeWidth:pe.optional()}),UAe=Ma.omit({pcbX:!0,pcbY:!0,pcbRotation:!0}).extend({strokeWidth:Me,x1:Me,y1:Me,x2:Me,y2:Me}),VAe=Ma.omit({pcbRotation:!0}).extend({filled:C.boolean().default(!0).optional(),stroke:C.enum(["dashed","solid","none"]).optional(),strokeWidth:Me.optional(),width:Me,height:Me}),GAe=Ma.omit({pcbRotation:!0}).extend({isFilled:C.boolean().optional(),isOutline:C.boolean().optional(),strokeWidth:Me.optional(),radius:Me}),V_e=C.object({x:Me,y:Me,via:C.boolean().optional(),toLayer:ln.optional()}),XAe=C.object({for:C.string().optional().describe("Selector for the port you're targeting, not required if you're inside a trace"),order:C.number().optional(),offset:bo.or(V_e).optional(),offsets:C.array(bo).or(C.array(V_e)).optional(),traceWidth:C.number().optional()}),sur=u5.extend({name:C.string(),pinNumber:C.number().optional(),aliases:C.array(C.string()).optional(),direction:Bjt}),Pkt=C.array(C.any()).describe("Circuit JSON"),Ikt=C.object({footprintCircuitJson:C.array(C.any()),cadModel:X_e.optional()}),G_e=C.function().args(C.string()).returns(C.promise(Ikt)).describe("A function that takes a path and returns Circuit JSON"),our=C.object({partsEngine:K_e.optional(),autorouter:H_e.optional(),registryApiUrl:C.string().optional(),cloudAutorouterUrl:C.string().optional(),projectName:C.string().optional(),projectBaseUrl:C.string().optional(),version:C.string().optional(),url:C.string().optional(),printBoardInformationToSilkscreen:C.boolean().optional(),localCacheEngine:C.any().optional(),pcbDisabled:C.boolean().optional(),schematicDisabled:C.boolean().optional(),partsEngineDisabled:C.boolean().optional(),footprintLibraryMap:C.record(C.string(),C.union([G_e,C.record(C.string(),C.union([Pkt,G_e]))])).optional()});lr(!0);Ge();Gt();Jl();Ge();var P1=Or(jc(),1);Jl();Ge();function Lp(){return new wY}var wY=class r{constructor(){q(this,"index",{});q(this,"array",[])}size(){return this.array.length}empty(){return this.array.length===0}itemAt(e){return this.array[e]}contains(e){return this.index[e.id()]!==void 0}find(e){let a=this.index[e.id()];return a===void 0?void 0:this.array[a]}setDefault(e,a){let s=this.index[e.id()];if(s===void 0){let l=new p5(e,a());return this.index[e.id()]=this.array.length,this.array.push(l),l}else return this.array[s]}insert(e,a){let s=new p5(e,a),l=this.index[e.id()];return l===void 0?(this.index[e.id()]=this.array.length,this.array.push(s)):this.array[l]=s,s}erase(e){let a=this.index[e.id()];if(a===void 0)return;this.index[e.id()]=void 0;let s=this.array[a],l=this.array.pop();return s!==l&&(this.array[a]=l,this.index[l.first.id()]=a),s}copy(){let e=new r;for(let a=0;a<this.array.length;a++){let s=this.array[a].copy();e.array[a]=s,e.index[s.first.id()]=a}return e}},p5=class r{constructor(e,a){q(this,"first");q(this,"second");this.first=e,this.second=a}copy(){return new r(this.first,this.second)}};var rd=class{constructor(e=""){q(this,"_name");q(this,"_value",0);q(this,"_context",null);q(this,"_id",jkt++);this._name=e}id(){return this._id}name(){return this._name}setName(e){this._name=e}context(){return this._context}setContext(e){this._context=e}value(){return this._value}setValue(e){this._value=e}plus(e){return new Xa(this,e)}minus(e){return new Xa(this,typeof e=="number"?-e:[-1,e])}multiply(e){return new Xa([e,this])}divide(e){return new Xa([1/e,this])}toJSON(){return{name:this._name,value:this._value}}toString(){return this._context+"["+this._name+":"+this._value+"]"}},jkt=0;var Xa=class r{constructor(){q(this,"_terms");q(this,"_constant");let e=kkt(arguments);this._terms=e.terms,this._constant=e.constant}terms(){return this._terms}constant(){return this._constant}value(){let e=this._constant;for(let a=0,s=this._terms.size();a<s;a++){let l=this._terms.itemAt(a);e+=l.first.value()*l.second}return e}plus(e){return new r(this,e)}minus(e){return new r(this,typeof e=="number"?-e:[-1,e])}multiply(e){return new r([e,this])}divide(e){return new r([1/e,this])}isConstant(){return this._terms.size()==0}toString(){let e=this._terms.array.map(function(a){return a.second+"*"+a.first.toString()}).join(" + ");return!this.isConstant()&&this._constant!==0&&(e+=" + "),e+=this._constant,e}};function kkt(r){let e=0,a=()=>0,s=Lp();for(let l=0,d=r.length;l<d;++l){let x=r[l];if(typeof x=="number")e+=x;else if(x instanceof rd)s.setDefault(x,a).second+=1;else if(x instanceof Xa){e+=x.constant();let f=x.terms();for(let m=0,D=f.size();m<D;m++){let b=f.itemAt(m);s.setDefault(b.first,a).second+=b.second}}else if(x instanceof Array){if(x.length!==2)throw new Error("array must have length 2");let f=x[0],m=x[1];if(typeof f!="number")throw new Error("array item 0 must be a number");if(m instanceof rd)s.setDefault(m,a).second+=f;else if(m instanceof Xa){e+=m.constant()*f;let D=m.terms();for(let b=0,E=D.size();b<E;b++){let A=D.itemAt(b);s.setDefault(A.first,a).second+=A.second*f}}else throw new Error("array item 1 must be a variable or expression")}else throw new Error("invalid Expression argument: "+x)}return{terms:s,constant:e}}var Lc=class Lc{static create(e,a,s,l=1){let d=0;return d+=Math.max(0,Math.min(1e3,e*l))*1e6,d+=Math.max(0,Math.min(1e3,a*l))*1e3,d+=Math.max(0,Math.min(1e3,s*l)),d}static clip(e){return Math.max(0,Math.min(Lc.required,e))}};q(Lc,"required",Lc.create(1e3,1e3,1e3)),q(Lc,"strong",Lc.create(1,0,0)),q(Lc,"medium",Lc.create(0,1,0)),q(Lc,"weak",Lc.create(0,0,1));var Oa=Lc;var Ds;(function(r){r[r.Le=0]="Le",r[r.Ge=1]="Ge",r[r.Eq=2]="Eq"})(Ds||(Ds={}));var Vs=class{constructor(e,a,s,l=Oa.required){q(this,"_expression");q(this,"_operator");q(this,"_strength");q(this,"_id",Nkt++);this._operator=a,this._strength=Oa.clip(l),s===void 0&&e instanceof Xa?this._expression=e:this._expression=e.minus(s)}id(){return this._id}expression(){return this._expression}op(){return this._operator}strength(){return this._strength}toString(){return this._expression.toString()+" "+["<=",">=","="][this._operator]+" 0 ("+this._strength.toString()+")"}},Nkt=0;var lg=class{constructor(){q(this,"maxIterations",1e3);q(this,"_cnMap",Mkt());q(this,"_rowMap",Okt());q(this,"_varMap",Lkt());q(this,"_editMap",$kt());q(this,"_infeasibleRows",[]);q(this,"_objective",new h5);q(this,"_artificial",null);q(this,"_idTick",0)}createConstraint(e,a,s,l=Oa.required){let d=new Vs(e,a,s,l);return this.addConstraint(d),d}addConstraint(e){if(this._cnMap.find(e)!==void 0)throw new Error("duplicate constraint");let s=this._createRow(e),l=s.row,d=s.tag,x=this._chooseSubject(l,d);if(x.type()===Qn.Invalid&&l.allDummies())if(x5(l.constant()))x=d.marker;else throw new Error("unsatisfiable constraint");if(x.type()===Qn.Invalid){if(!this._addWithArtificialVariable(l))throw new Error("unsatisfiable constraint")}else l.solveFor(x),this._substitute(x,l),this._rowMap.insert(x,l);this._cnMap.insert(e,d),this._optimize(this._objective)}removeConstraint(e){let a=this._cnMap.erase(e);if(a===void 0)throw new Error("unknown constraint");this._removeConstraintEffects(e,a.second);let s=a.second.marker,l=this._rowMap.erase(s);if(l===void 0){let d=this._getMarkerLeavingSymbol(s);if(d.type()===Qn.Invalid)throw new Error("failed to find leaving row");l=this._rowMap.erase(d),l.second.solveForEx(d,s),this._substitute(s,l.second)}this._optimize(this._objective)}hasConstraint(e){return this._cnMap.contains(e)}getConstraints(){return this._cnMap.array.map(({first:e})=>e)}addEditVariable(e,a){if(this._editMap.find(e)!==void 0)throw new Error("duplicate edit variable");if(a=Oa.clip(a),a===Oa.required)throw new Error("bad required strength");let l=new Xa(e),d=new Vs(l,Ds.Eq,void 0,a);this.addConstraint(d);let f={tag:this._cnMap.find(d).second,constraint:d,constant:0};this._editMap.insert(e,f)}removeEditVariable(e){let a=this._editMap.erase(e);if(a===void 0)throw new Error("unknown edit variable");this.removeConstraint(a.second.constraint)}hasEditVariable(e){return this._editMap.contains(e)}suggestValue(e,a){let s=this._editMap.find(e);if(s===void 0)throw new Error("unknown edit variable");let l=this._rowMap,d=s.second,x=a-d.constant;d.constant=a;let f=d.tag.marker,m=l.find(f);if(m!==void 0){m.second.add(-x)<0&&this._infeasibleRows.push(f),this._dualOptimize();return}let D=d.tag.other;if(m=l.find(D),m!==void 0){m.second.add(x)<0&&this._infeasibleRows.push(D),this._dualOptimize();return}for(let b=0,E=l.size();b<E;++b){let A=l.itemAt(b),B=A.second,w=B.coefficientFor(f);w!==0&&B.add(x*w)<0&&A.first.type()!==Qn.External&&this._infeasibleRows.push(A.first)}this._dualOptimize()}updateVariables(){let e=this._varMap,a=this._rowMap;for(let s=0,l=e.size();s<l;++s){let d=e.itemAt(s),x=a.find(d.second);x!==void 0?d.first.setValue(x.second.constant()):d.first.setValue(0)}}_getVarSymbol(e){let a=()=>this._makeSymbol(Qn.External);return this._varMap.setDefault(e,a).second}_createRow(e){let a=e.expression(),s=new h5(a.constant()),l=a.terms();for(let m=0,D=l.size();m<D;++m){let b=l.itemAt(m);if(!x5(b.second)){let E=this._getVarSymbol(b.first),A=this._rowMap.find(E);A!==void 0?s.insertRow(A.second,b.second):s.insertSymbol(E,b.second)}}let d=this._objective,x=e.strength(),f={marker:$p,other:$p};switch(e.op()){case Ds.Le:case Ds.Ge:{let m=e.op()===Ds.Le?1:-1,D=this._makeSymbol(Qn.Slack);if(f.marker=D,s.insertSymbol(D,m),x<Oa.required){let b=this._makeSymbol(Qn.Error);f.other=b,s.insertSymbol(b,-m),d.insertSymbol(b,x)}break}case Ds.Eq:{if(x<Oa.required){let m=this._makeSymbol(Qn.Error),D=this._makeSymbol(Qn.Error);f.marker=m,f.other=D,s.insertSymbol(m,-1),s.insertSymbol(D,1),d.insertSymbol(m,x),d.insertSymbol(D,x)}else{let m=this._makeSymbol(Qn.Dummy);f.marker=m,s.insertSymbol(m)}break}}return s.constant()<0&&s.reverseSign(),{row:s,tag:f}}_chooseSubject(e,a){let s=e.cells();for(let d=0,x=s.size();d<x;++d){let f=s.itemAt(d);if(f.first.type()===Qn.External)return f.first}let l=a.marker.type();return(l===Qn.Slack||l===Qn.Error)&&e.coefficientFor(a.marker)<0?a.marker:(l=a.other.type(),(l===Qn.Slack||l===Qn.Error)&&e.coefficientFor(a.other)<0?a.other:$p)}_addWithArtificialVariable(e){let a=this._makeSymbol(Qn.Slack);this._rowMap.insert(a,e.copy()),this._artificial=e.copy(),this._optimize(this._artificial);let s=x5(this._artificial.constant());this._artificial=null;let l=this._rowMap.erase(a);if(l!==void 0){let x=l.second;if(x.isConstant())return s;let f=this._anyPivotableSymbol(x);if(f.type()===Qn.Invalid)return!1;x.solveForEx(a,f),this._substitute(f,x),this._rowMap.insert(f,x)}let d=this._rowMap;for(let x=0,f=d.size();x<f;++x)d.itemAt(x).second.removeSymbol(a);return this._objective.removeSymbol(a),s}_substitute(e,a){let s=this._rowMap;for(let l=0,d=s.size();l<d;++l){let x=s.itemAt(l);x.second.substitute(e,a),x.second.constant()<0&&x.first.type()!==Qn.External&&this._infeasibleRows.push(x.first)}this._objective.substitute(e,a),this._artificial&&this._artificial.substitute(e,a)}_optimize(e){let a=0;for(;a<this.maxIterations;){let s=this._getEnteringSymbol(e);if(s.type()===Qn.Invalid)return;let l=this._getLeavingSymbol(s);if(l.type()===Qn.Invalid)throw new Error("the objective is unbounded");let d=this._rowMap.erase(l).second;d.solveForEx(l,s),this._substitute(s,d),this._rowMap.insert(s,d),a++}throw new Error("solver iterations exceeded")}_dualOptimize(){let e=this._rowMap,a=this._infeasibleRows;for(;a.length!==0;){let s=a.pop(),l=e.find(s);if(l!==void 0&&l.second.constant()<0){let d=this._getDualEnteringSymbol(l.second);if(d.type()===Qn.Invalid)throw new Error("dual optimize failed");let x=l.second;e.erase(s),x.solveForEx(s,d),this._substitute(d,x),e.insert(d,x)}}}_getEnteringSymbol(e){let a=e.cells();for(let s=0,l=a.size();s<l;++s){let d=a.itemAt(s),x=d.first;if(d.second<0&&x.type()!==Qn.Dummy)return x}return $p}_getDualEnteringSymbol(e){let a=Number.MAX_VALUE,s=$p,l=e.cells();for(let d=0,x=l.size();d<x;++d){let f=l.itemAt(d),m=f.first,D=f.second;if(D>0&&m.type()!==Qn.Dummy){let E=this._objective.coefficientFor(m)/D;E<a&&(a=E,s=m)}}return s}_getLeavingSymbol(e){let a=Number.MAX_VALUE,s=$p,l=this._rowMap;for(let d=0,x=l.size();d<x;++d){let f=l.itemAt(d),m=f.first;if(m.type()!==Qn.External){let D=f.second,b=D.coefficientFor(e);if(b<0){let E=-D.constant()/b;E<a&&(a=E,s=m)}}}return s}_getMarkerLeavingSymbol(e){let a=Number.MAX_VALUE,s=a,l=a,d=$p,x=d,f=d,m=d,D=this._rowMap;for(let b=0,E=D.size();b<E;++b){let A=D.itemAt(b),B=A.second,w=B.coefficientFor(e);if(w===0)continue;let P=A.first;if(P.type()===Qn.External)m=P;else if(w<0){let j=-B.constant()/w;j<s&&(s=j,x=P)}else{let j=B.constant()/w;j<l&&(l=j,f=P)}}return x!==d?x:f!==d?f:m}_removeConstraintEffects(e,a){a.marker.type()===Qn.Error&&this._removeMarkerEffects(a.marker,e.strength()),a.other.type()===Qn.Error&&this._removeMarkerEffects(a.other,e.strength())}_removeMarkerEffects(e,a){let s=this._rowMap.find(e);s!==void 0?this._objective.insertRow(s.second,-a):this._objective.insertSymbol(e,-a)}_anyPivotableSymbol(e){let a=e.cells();for(let s=0,l=a.size();s<l;++s){let d=a.itemAt(s),x=d.first.type();if(x===Qn.Slack||x===Qn.Error)return d.first}return $p}_makeSymbol(e){return new f5(e,this._idTick++)}};function x5(r){let e=1e-8;return r<0?-r<e:r<e}function Mkt(){return Lp()}function Okt(){return Lp()}function Lkt(){return Lp()}function $kt(){return Lp()}var Qn;(function(r){r[r.Invalid=0]="Invalid",r[r.External=1]="External",r[r.Slack=2]="Slack",r[r.Error=3]="Error",r[r.Dummy=4]="Dummy"})(Qn||(Qn={}));var f5=class{constructor(e,a){q(this,"_id");q(this,"_type");this._id=a,this._type=e}id(){return this._id}type(){return this._type}},$p=new f5(Qn.Invalid,-1),h5=class r{constructor(e=0){q(this,"_cellMap",Lp());q(this,"_constant");this._constant=e}cells(){return this._cellMap}constant(){return this._constant}isConstant(){return this._cellMap.empty()}allDummies(){let e=this._cellMap;for(let a=0,s=e.size();a<s;++a)if(e.itemAt(a).first.type()!==Qn.Dummy)return!1;return!0}copy(){let e=new r(this._constant);return e._cellMap=this._cellMap.copy(),e}add(e){return this._constant+=e}insertSymbol(e,a=1){let s=this._cellMap.setDefault(e,()=>0);x5(s.second+=a)&&this._cellMap.erase(e)}insertRow(e,a=1){this._constant+=e._constant*a;let s=e._cellMap;for(let l=0,d=s.size();l<d;++l){let x=s.itemAt(l);this.insertSymbol(x.first,x.second*a)}}removeSymbol(e){this._cellMap.erase(e)}reverseSign(){this._constant=-this._constant;let e=this._cellMap;for(let a=0,s=e.size();a<s;++a){let l=e.itemAt(a);l.second=-l.second}}solveFor(e){let a=this._cellMap,l=-1/a.erase(e).second;this._constant*=l;for(let d=0,x=a.size();d<x;++d)a.itemAt(d).second*=l}solveForEx(e,a){this.insertSymbol(e,-1),this.solveFor(a)}coefficientFor(e){let a=this._cellMap.find(e);return a!==void 0?a.second:0}substitute(e,a){let s=this._cellMap.erase(e);s!==void 0&&this.insertRow(a,s.second)}};var VBe=Or(fs(),1);Ge();Gt();Zo();var TY={};Bm(TY,{boundsAreaOverlap:()=>n4e,boundsDistance:()=>a4e,clamp:()=>ms,computeDistanceBetweenBoxes:()=>ug,distSq:()=>QAe,distance:()=>wi,doBoundsOverlap:()=>Yb,doSegmentsIntersect:()=>Qo,doesLineIntersectLine:()=>zp,doesSegmentIntersectRect:()=>WAe,findNearestPointsBetweenBoxSets:()=>zb,getBoundingBox:()=>td,getSegmentIntersection:()=>HAe,getUnitVectorFromDirection:()=>y5,getUnitVectorFromPointAToB:()=>D5,grid:()=>s4e,midpoint:()=>ZAe,onSegment:()=>pg,orientation:()=>dg,pointToBoundsDistance:()=>JAe,pointToBoxDistance:()=>KAe,pointToSegmentClosestPoint:()=>r4e,pointToSegmentDistance:()=>Gs,range:()=>e4e,segmentToBoundsMinDistance:()=>Xb,segmentToBoxMinDistance:()=>t4e,segmentToCircleMinDistance:()=>g5,segmentToSegmentMinDistance:()=>m5});function zp([r,e],[a,s],{lineThickness:l=0}={}){return l===0?Qo(r,e,a,s):zkt(r,e,a,s)<=l}function Qo(r,e,a,s){let l=dg(r,e,a),d=dg(r,e,s),x=dg(a,s,r),f=dg(a,s,e);return!!(l!==d&&x!==f||l===0&&pg(r,a,e)||d===0&&pg(r,s,e)||x===0&&pg(a,r,s)||f===0&&pg(a,e,s))}function dg(r,e,a){let s=(e.y-r.y)*(a.x-e.x)-(e.x-r.x)*(a.y-e.y);return s===0?0:s>0?1:2}function pg(r,e,a){return e.x<=Math.max(r.x,a.x)&&e.x>=Math.min(r.x,a.x)&&e.y<=Math.max(r.y,a.y)&&e.y>=Math.min(r.y,a.y)}function zkt(r,e,a,s){if(r.x===e.x&&r.y===e.y)return Gs(r,a,s);if(a.x===s.x&&a.y===s.y)return Gs(a,r,e);if(Qo(r,e,a,s))return 0;let l=[Gs(r,a,s),Gs(e,a,s),Gs(a,r,e),Gs(s,r,e)];return Math.min(...l)}function Gs(r,e,a){let s=(a.x-e.x)**2+(a.y-e.y)**2;if(s===0)return wi(r,e);let l=((r.x-e.x)*(a.x-e.x)+(r.y-e.y)*(a.y-e.y))/s;l=Math.max(0,Math.min(1,l));let d={x:e.x+l*(a.x-e.x),y:e.y+l*(a.y-e.y)};return wi(r,d)}function wi(r,e){let a=r.x-e.x,s=r.y-e.y;return Math.sqrt(a*a+s*s)}function HAe(r,e,a,s){let l=e.x-r.x,d=e.y-r.y,x=s.x-a.x,f=s.y-a.y,m=r.x-a.x,D=r.y-a.y,b=l*f-d*x;if(Math.abs(b)<1e-10)return null;let E=(D*x-m*f)/b,A=(l*D-d*m)/b,B=1e-9;if(E>=-B&&E<=1+B&&A>=-B&&A<=1+B){let w=r.x+E*l,P=r.y+E*d;return{x:w,y:P}}return null}function WAe(r,e,a){let s=m=>m.x>=a.minX&&m.x<=a.maxX&&m.y>=a.minY&&m.y<=a.maxY;if(s(r)||s(e))return!0;let l={x:a.minX,y:a.minY},d={x:a.maxX,y:a.minY},x={x:a.minX,y:a.maxY},f={x:a.maxX,y:a.maxY};return Qo(r,e,l,d)||Qo(r,e,d,f)||Qo(r,e,f,x)||Qo(r,e,x,l)}function KAe(r,e){let a=e.width/2,s=e.height/2,l=e.center.x-a,d=e.center.x+a,x=e.center.y-s,f=e.center.y+s;if(r.x>=l&&r.x<=d&&r.y>=x&&r.y<=f)return 0;let m=ms(r.x,l,d),D=ms(r.y,x,f);return wi(r,{x:m,y:D})}function JAe(r,e){if(r.x>=e.minX&&r.x<=e.maxX&&r.y>=e.minY&&r.y<=e.maxY)return 0;let a=ms(r.x,e.minX,e.maxX),s=ms(r.y,e.minY,e.maxY);return wi(r,{x:a,y:s})}function ZAe(r,e){return{x:(r.x+e.x)/2,y:(r.y+e.y)/2}}function QAe(r,e){let a=r.x-e.x,s=r.y-e.y;return a*a+s*s}function e4e(r,e,a=1){if(a===0)throw new Error("step cannot be 0");let s,l;e===void 0?(s=0,l=r):(s=r,l=e);let d=[];if(a>0)for(let x=s;x<l;x+=a)d.push(x);else for(let x=s;x>l;x+=a)d.push(x);return d}function m5(r,e,a,s){if(r.x===e.x&&r.y===e.y)return Gs(r,a,s);if(a.x===s.x&&a.y===s.y)return Gs(a,r,e);if(Qo(r,e,a,s))return 0;let l=[Gs(r,a,s),Gs(e,a,s),Gs(a,r,e),Gs(s,r,e)];return Math.min(...l)}function Xb(r,e,a){let s={x:a.minX,y:a.minY},l={x:a.maxX,y:a.minY},d={x:a.minX,y:a.maxY},x={x:a.maxX,y:a.maxY};if(Qo(r,e,s,l)||Qo(r,e,l,x)||Qo(r,e,x,d)||Qo(r,e,d,s)||r.x>=a.minX&&r.x<=a.maxX&&r.y>=a.minY&&r.y<=a.maxY&&e.x>=a.minX&&e.x<=a.maxX&&e.y>=a.minY&&e.y<=a.maxY)return 0;let f=[Gs(s,r,e),Gs(l,r,e),Gs(d,r,e),Gs(x,r,e)];if(r.x>=a.minX&&r.x<=a.maxX&&r.y>=a.minY&&r.y<=a.maxY||e.x>=a.minX&&e.x<=a.maxX&&e.y>=a.minY&&e.y<=a.maxY)return 0;if(r.x<a.minX||r.x>a.maxX||r.y<a.minY||r.y>a.maxY){let m=ms(r.x,a.minX,a.maxX),D=ms(r.y,a.minY,a.maxY);f.push(wi(r,{x:m,y:D}))}if(e.x<a.minX||e.x>a.maxX||e.y<a.minY||e.y>a.maxY){let m=ms(e.x,a.minX,a.maxX),D=ms(e.y,a.minY,a.maxY);f.push(wi(e,{x:m,y:D}))}return Math.min(...f)}function t4e(r,e,a){let s=a.width/2,l=a.height/2,d={minX:a.center.x-s,maxX:a.center.x+s,minY:a.center.y-l,maxY:a.center.y+l};return Xb(r,e,d)}function g5(r,e,a){let s={x:a.x,y:a.y};if(r.x===e.x&&r.y===e.y)return Math.max(0,wi(r,s)-a.radius);let l={x:e.x-r.x,y:e.y-r.y},d={x:s.x-r.x,y:s.y-r.y},x=l.x*l.x+l.y*l.y,f=Math.max(0,Math.min(1,(l.x*d.x+l.y*d.y)/x)),m={x:r.x+f*l.x,y:r.y+f*l.y},D=wi(m,s);return Math.max(0,D-a.radius)}function r4e(r,e,a){let s=a.x-e.x,l=a.y-e.y,d=s*s+l*l;if(d===0)return{x:e.x,y:e.y};let x=((r.x-e.x)*s+(r.y-e.y)*l)/d;return x=Math.max(0,Math.min(1,x)),{x:e.x+x*s,y:e.y+x*l}}var n4e=(r,e)=>{let a=Math.max(0,Math.min(r.maxX,e.maxX)-Math.max(r.minX,e.minX)),s=Math.max(0,Math.min(r.maxY,e.maxY)-Math.max(r.minY,e.minY));return a*s};var a4e=(r,e)=>{let a=r.maxX<e.minX?e.minX-r.maxX:e.maxX<r.minX?r.minX-e.maxX:0,s=r.maxY<e.minY?e.minY-r.maxY:e.maxY<r.minY?r.minY-e.maxY:0;return Math.sqrt(a*a+s*s)};var Yb=(r,e)=>!(r.maxX<e.minX||e.maxX<r.minX||r.maxY<e.minY||e.maxY<r.minY);var D5=(r,e)=>{let a={x:e.x-r.x,y:e.y-r.y},s=Math.sqrt(a.x**2+a.y**2);return{x:a.x/s,y:a.y/s}},y5=r=>{switch(r){case"up":return{x:0,y:1};case"down":return{x:0,y:-1};case"left":return{x:-1,y:0};case"right":return{x:1,y:0}}};function s4e({rows:r,cols:e,xSpacing:a,ySpacing:s,width:l,height:d,offsetX:x=0,offsetY:f=0,yDirection:m="cartesian",centered:D=!0}){let b=a??1,E=s??1,A=l??e*b,B=d??r*E,w=D?-A/2:0,P=D?-B/2:0,j=l?l/e:b,O=d?d/r:E,$=[];for(let ee=0;ee<r;ee++)for(let X=0;X<e;X++){let te=ee*e+X,L=x+w+X*j+j/2,J=f+ee*O+O/2,U=m==="cartesian"?f+P+(r-1-ee)*O+O/2:f+P+ee*O+O/2;$.push({index:te,center:{x:L,y:U},topLeft:{x:L-j/2,y:U+O/2},bottomRight:{x:L+j/2,y:U-O/2},row:ee,col:X})}return $}Gt();var qkt=(r,e,a)=>{let s=[{x:r.x,y:r.y}],l=(r.x+e.x)/2,d=(r.y+e.y)/2,x={x:e.x,y:e.y};switch(e.facingDirection){case"x+":x.x+=a;break;case"x-":x.x-=a;break;case"y+":x.y+=a;break;case"y-":x.y-=a;break}let f=r.facingDirection??"none",m=e.facingDirection??"none",D=A=>{let B=s[s.length-1];(B.x!==A.x||B.y!==A.y)&&s.push(A)},b=Math.abs(r.y-e.y)<=Math.max(1e-6,a*.1),E=Math.abs(r.x-e.x)<=Math.max(1e-6,a*.1);if(f==="none"&&m==="none")D({x:l,y:r.y}),D({x:l,y:e.y});else if(f==="x+"&&m==="y+")r.x>e.x&&r.y<e.y?(D({x:r.x+a,y:r.y}),D({x:r.x+a,y:e.y+a}),D({x:e.x,y:e.y+a})):!E&&!b&&r.x<e.x&&r.y>e.y?D({x:e.x,y:r.y}):E?(D({x:r.x+a,y:r.y}),D({x:r.x+a,y:e.y+a}),D({x:e.x,y:e.y+a})):r.x<e.x?(D({x:l,y:r.y}),D({x:l,y:x.y}),D({x:e.x,y:x.y})):r.y<=e.y+a?(D({x:r.x+a,y:r.y}),D({x:r.x+a,y:r.y+a}),D({x:e.x,y:r.y+a}),D({x:e.x,y:e.y})):(D({x:r.x+a,y:r.y}),D({x:r.x+a,y:(r.y+e.y)/2}),D({x:e.x,y:(r.y+e.y)/2}));else if(f==="x+"&&m==="x+"&&!b){let A=Math.max(r.x+a,x.x);D({x:A,y:r.y}),D({x:A,y:e.y})}else if(f==="x+"&&m==="x+"&&b)D({x:r.x+a,y:r.y}),D({x:r.x+a,y:r.y+a}),D({x:e.x+a,y:r.y+a}),D({x:e.x+a,y:e.y});else if(f==="x+"&&m==="y-")if(E&&r.y<=e.y)D({x:r.x+a,y:r.y}),D({x:r.x+a,y:d}),D({x:e.x,y:d});else if(E&&r.y>e.y)D({x:r.x+a,y:r.y}),D({x:r.x+a,y:e.y-a}),D({x:e.x,y:e.y-a});else if(r.x<e.x&&r.y<e.y)D({x:e.x,y:r.y});else if(r.x>e.x&&r.y<e.y){let A=r.x+a;D({x:A,y:r.y}),D({x:A,y:d}),D({x:e.x,y:d})}else if(r.x>e.x&&r.y>e.y){let A=r.x+a;D({x:A,y:r.y}),D({x:A,y:x.y}),D({x:e.x,y:x.y})}else r.y===e.y?(D({x:r.x+a,y:r.y}),D({x:r.x+a,y:r.y-a}),D({x:e.x,y:r.y-a})):(D({x:l,y:r.y}),D({x:l,y:x.y}),D({x:e.x,y:x.y}));else if(f==="x+"&&m==="x-"&&r.x+a>=e.x-a&&!b){let A=r.x+a;D({x:A,y:r.y}),D({x:A,y:d}),D({x:x.x,y:d}),D({x:x.x,y:x.y})}else f==="x+"&&m==="x-"&&b&&e.x>r.x||(f==="x+"&&m==="x-"&&b?(D({x:r.x+a,y:r.y}),D({x:r.x+a,y:r.y+a}),D({x:e.x-a,y:r.y+a}),D({x:e.x-a,y:r.y})):(f==="x+"&&D({x:r.x+a,y:r.y}),D({x:l,y:s[s.length-1].y}),D({x:l,y:x.y}),D({x:x.x,y:x.y})));return D({x:e.x,y:e.y}),s},xg=(r,e,a={})=>{let s=r,l=e,d=!1;(s.x>l.x||s.x===l.x&&s.y>l.y)&&(d=!0,[s,l]=[l,s]);let x=s.facingDirection==="x-",f=s.facingDirection==="y-",m=$=>{let ee=x?s.x-($.x-s.x):$.x,X=f?s.y-($.y-s.y):$.y,te=$.facingDirection;return x&&(te==="x+"?te="x-":te==="x-"&&(te="x+")),f&&(te==="y+"?te="y-":te==="y-"&&(te="y+")),{x:ee,y:X,facingDirection:te}},D=($,ee)=>{let X=$.x-ee.x,te=$.y-ee.y,L=ee.x+te,J=ee.y-X,U=$.facingDirection;switch(U){case"x+":U="y-";break;case"y-":U="x-";break;case"x-":U="y+";break;case"y+":U="x+";break}return{x:L,y:J,facingDirection:U}},b=($,ee)=>{let X=$.x-ee.x,te=$.y-ee.y;return{x:ee.x-te,y:ee.y+X}},E=x||f?m(s):s,A=x||f?m(l):l,B=E,w=A,P=!1;E.facingDirection==="y+"&&(P=!0,B={...E,facingDirection:"x+"},w=D(A,E));let j=a?.overshoot??.1*Math.max(Math.abs(B.x-w.x),Math.abs(B.y-w.y)),O=qkt(B,w,j);return P&&(O=O.map($=>b($,B))),(x||f)&&(O=O.map(({x:$,y:ee})=>({x:x?s.x-($-s.x):$,y:f?s.y-(ee-s.y):ee}))),d?O.reverse():O};var i4e={name:"@tscircuit/capacity-autorouter",main:"./dist/index.js",version:"0.0.107",type:"module",files:["dist"],scripts:{start:"cosmos",build:"tsup ./lib/index.ts --minify terser --external @tscircuit/core --external circuit-to-svg --format esm --dts --sourcemap",bench:"bun test tests/spatial-index-bench.test.ts",format:"biome format --write .","format:check":"biome format .","vercel-build":"cosmos-export","repomix:lib":"repomix --ignore 'testing/**,**/TwoRouteHighDensitySolver/**,**/RouteStitchingSolver/**,solvers/CapacitySegmentPointOptimizer/CapacitySegmentPointOptimizer.ts' lib","bug-report":"bun run scripts/download-bug-report.ts"},devDependencies:{"@biomejs/biome":"^1.9.4","@radix-ui/react-icons":"^1.3.2","@radix-ui/react-menubar":"^1.1.14","@react-hook/resize-observer":"^2.0.2","@tscircuit/checks":"^0.0.36","@tscircuit/circuit-json-util":"^0.0.46","@tscircuit/core":"^0.0.337","@tscircuit/math-utils":"^0.0.18","@types/bun":"^1.2.16","@types/fast-json-stable-stringify":"^2.1.2","@types/object-hash":"^3.0.6","@types/rbush":"^4.0.0","@types/react":"^19.0.8","@types/react-dom":"^19.0.3","@vercel/node":"^5.1.7","@vitejs/plugin-react":"^4.3.4","bun-match-svg":"^0.0.9","circuit-json-to-connectivity-map":"^0.0.19","circuit-to-svg":"^0.0.110",clsx:"^2.1.1",flatbush:"^4.4.0","graphics-debug":"^0.0.44",rbush:"^4.0.1",react:"18","react-cosmos":"^6.2.3","react-cosmos-plugin-vite":"^6.2.0","react-dom":"18","react-konva":"18",recharts:"^2.15.1","tailwind-merge":"^3.2.0",terser:"^5.43.1",tsup:"^8.3.6","use-mouse-matrix-transform":"^1.3.0",vite:"^6.0.11","vite-tsconfig-paths":"^5.1.4"},peerDependencies:{typescript:"^5.7.3"},dependencies:{"fast-json-stable-stringify":"^2.1.0","object-hash":"^3.0.0"}};Gt();Zo();ea();var KBe=Or(jc(),1);Gt();var d6e=Or(kY(),1),f6e=Or(kY(),1);var N5=(...r)=>{let e={points:[],lines:[],circles:[],rects:[]};return r.forEach((a,s)=>{a&&(a.lines&&(e.lines=[...e.lines||[],...a.lines.map(l=>({...l,step:s}))]),a.points&&(e.points=[...e.points||[],...a.points.map(l=>({...l,step:s}))]),a.circles&&(e.circles=[...e.circles||[],...a.circles.map(l=>({...l,step:s}))]),a.rects&&(e.rects=[...e.rects||[],...a.rects.map(l=>({...l,step:s}))]))}),e},_a=class{constructor(){q(this,"MAX_ITERATIONS",1e3);q(this,"solved",!1);q(this,"failed",!1);q(this,"iterations",0);q(this,"progress",0);q(this,"error",null);q(this,"activeSubSolver");q(this,"failedSubSolvers");q(this,"timeToSolve");q(this,"stats",{});q(this,"cacheHit");q(this,"cacheKey");q(this,"cacheToSolveSpaceTransform")}step(){if(!this.solved&&!this.failed){this.iterations++;try{this._step()}catch(r){throw this.error=`${this.constructor.name} error: ${r}`,console.error(this.error),this.failed=!0,r}!this.solved&&this.iterations>this.MAX_ITERATIONS&&this.tryFinalAcceptance(),!this.solved&&this.iterations>this.MAX_ITERATIONS&&(this.error=`${this.constructor.name} ran out of iterations`,console.error(this.error),this.failed=!0),"computeProgress"in this&&(this.progress=this.computeProgress())}}_step(){}getConstructorParams(){throw new Error("getConstructorParams not implemented")}solve(){let r=Date.now();for(;!this.solved&&!this.failed;)this.step();let e=Date.now();this.timeToSolve=e-r}visualize(){return{lines:[],points:[],rects:[],circles:[]}}tryFinalAcceptance(){}preview(){return{lines:[],points:[],rects:[],circles:[]}}};function tu(){return tu=Object.assign?Object.assign.bind():function(r){for(var e=1;e<arguments.length;e++){var a=arguments[e];for(var s in a)({}).hasOwnProperty.call(a,s)&&(r[s]=a[s])}return r},tu.apply(null,arguments)}function $5(r,e){return($5=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(a,s){return a.__proto__=s,a})(r,e)}function K4e(r){return(K4e=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)})(r)}function J4e(){try{var r=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(J4e=function(){return!!r})()}function YY(r){var e=typeof Map=="function"?new Map:void 0;return YY=function(a){if(a===null||!(function(l){try{return Function.toString.call(l).indexOf("[native code]")!==-1}catch{return typeof l=="function"}})(a))return a;if(typeof a!="function")throw new TypeError("Super expression must either be null or a function");if(e!==void 0){if(e.has(a))return e.get(a);e.set(a,s)}function s(){return(function(l,d,x){if(J4e())return Reflect.construct.apply(null,arguments);var f=[null];f.push.apply(f,d);var m=new(l.bind.apply(l,f));return x&&$5(m,x.prototype),m})(a,arguments,K4e(this).constructor)}return s.prototype=Object.create(a.prototype,{constructor:{value:s,enumerable:!1,writable:!0,configurable:!0}}),$5(s,a)},YY(r)}var eu=(function(r){var e,a;function s(l){var d;if(1)d=r.call(this,"An error occurred. See https://github.com/styled-components/polished/blob/main/src/internalHelpers/errors.md#"+l+" for more information.")||this;else for(var x,f,m;m<x;m++);return(function(D){if(D===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return D})(d)}return a=r,(e=s).prototype=Object.create(a.prototype),e.prototype.constructor=e,$5(e,a),s})(YY(Error));function F4e(r,e){return r.substr(-e.length)===e}var eNt=/^([+-]?(?:\d+|\d*\.\d+))([a-z]*|%)$/;function E4e(r){return typeof r!="string"?r:r.match(eNt)?parseFloat(r):r}var v4e=function(r){return function(e,a){a===void 0&&(a="16px");var s=e,l=a;if(typeof e=="string"){if(!F4e(e,"px"))throw new eu(69,r,e);s=E4e(e)}if(typeof a=="string"){if(!F4e(a,"px"))throw new eu(70,r,a);l=E4e(a)}if(typeof s=="string")throw new eu(71,e,r);if(typeof l=="string")throw new eu(72,a,r);return""+s/l+r}};v4e("em"),v4e("rem");function NY(r){return Math.round(255*r)}function tNt(r,e,a){return NY(r)+","+NY(e)+","+NY(a)}function rF(r,e,a,s){if(s===void 0&&(s=tNt),e===0)return s(a,a,a);var l=(r%360+360)%360/60,d=(1-Math.abs(2*a-1))*e,x=d*(1-Math.abs(l%2-1)),f=0,m=0,D=0;l>=0&&l<1?(f=d,m=x):l>=1&&l<2?(f=x,m=d):l>=2&&l<3?(m=d,D=x):l>=3&&l<4?(m=x,D=d):l>=4&&l<5?(f=x,D=d):l>=5&&l<6&&(f=d,D=x);var b=a-d/2;return s(f+b,m+b,D+b)}var C4e={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"00ffff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"0000ff",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"00ffff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"ff00ff",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"639",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},rNt=/^#[a-fA-F0-9]{6}$/,nNt=/^#[a-fA-F0-9]{8}$/,aNt=/^#[a-fA-F0-9]{3}$/,sNt=/^#[a-fA-F0-9]{4}$/,MY=/^rgb\(\s*(\d{1,3})\s*(?:,)?\s*(\d{1,3})\s*(?:,)?\s*(\d{1,3})\s*\)$/i,iNt=/^rgb(?:a)?\(\s*(\d{1,3})\s*(?:,)?\s*(\d{1,3})\s*(?:,)?\s*(\d{1,3})\s*(?:,|\/)\s*([-+]?\d*[.]?\d+[%]?)\s*\)$/i,oNt=/^hsl\(\s*(\d{0,3}[.]?[0-9]+(?:deg)?)\s*(?:,)?\s*(\d{1,3}[.]?[0-9]?)%\s*(?:,)?\s*(\d{1,3}[.]?[0-9]?)%\s*\)$/i,uNt=/^hsl(?:a)?\(\s*(\d{0,3}[.]?[0-9]+(?:deg)?)\s*(?:,)?\s*(\d{1,3}[.]?[0-9]?)%\s*(?:,)?\s*(\d{1,3}[.]?[0-9]?)%\s*(?:,|\/)\s*([-+]?\d*[.]?\d+[%]?)\s*\)$/i;function bg(r){if(typeof r!="string")throw new eu(3);var e=(function(A){if(typeof A!="string")return A;var B=A.toLowerCase();return C4e[B]?"#"+C4e[B]:A})(r);if(e.match(rNt))return{red:parseInt(""+e[1]+e[2],16),green:parseInt(""+e[3]+e[4],16),blue:parseInt(""+e[5]+e[6],16)};if(e.match(nNt)){var a=parseFloat((parseInt(""+e[7]+e[8],16)/255).toFixed(2));return{red:parseInt(""+e[1]+e[2],16),green:parseInt(""+e[3]+e[4],16),blue:parseInt(""+e[5]+e[6],16),alpha:a}}if(e.match(aNt))return{red:parseInt(""+e[1]+e[1],16),green:parseInt(""+e[2]+e[2],16),blue:parseInt(""+e[3]+e[3],16)};if(e.match(sNt)){var s=parseFloat((parseInt(""+e[4]+e[4],16)/255).toFixed(2));return{red:parseInt(""+e[1]+e[1],16),green:parseInt(""+e[2]+e[2],16),blue:parseInt(""+e[3]+e[3],16),alpha:s}}var l=MY.exec(e);if(l)return{red:parseInt(""+l[1],10),green:parseInt(""+l[2],10),blue:parseInt(""+l[3],10)};var d=iNt.exec(e.substring(0,50));if(d)return{red:parseInt(""+d[1],10),green:parseInt(""+d[2],10),blue:parseInt(""+d[3],10),alpha:parseFloat(""+d[4])>1?parseFloat(""+d[4])/100:parseFloat(""+d[4])};var x=oNt.exec(e);if(x){var f="rgb("+rF(parseInt(""+x[1],10),parseInt(""+x[2],10)/100,parseInt(""+x[3],10)/100)+")",m=MY.exec(f);if(!m)throw new eu(4,e,f);return{red:parseInt(""+m[1],10),green:parseInt(""+m[2],10),blue:parseInt(""+m[3],10)}}var D=uNt.exec(e.substring(0,50));if(D){var b="rgb("+rF(parseInt(""+D[1],10),parseInt(""+D[2],10)/100,parseInt(""+D[3],10)/100)+")",E=MY.exec(b);if(!E)throw new eu(4,e,b);return{red:parseInt(""+E[1],10),green:parseInt(""+E[2],10),blue:parseInt(""+E[3],10),alpha:parseFloat(""+D[4])>1?parseFloat(""+D[4])/100:parseFloat(""+D[4])}}throw new eu(5)}function Up(r){return(function(e){var a,s=e.red/255,l=e.green/255,d=e.blue/255,x=Math.max(s,l,d),f=Math.min(s,l,d),m=(x+f)/2;if(x===f)return e.alpha!==void 0?{hue:0,saturation:0,lightness:m,alpha:e.alpha}:{hue:0,saturation:0,lightness:m};var D=x-f,b=m>.5?D/(2-x-f):D/(x+f);switch(x){case s:a=(l-d)/D+(l<d?6:0);break;case l:a=(d-s)/D+2;break;default:a=(s-l)/D+4}return a*=60,e.alpha!==void 0?{hue:a,saturation:b,lightness:m,alpha:e.alpha}:{hue:a,saturation:b,lightness:m}})(bg(r))}var HY=function(r){return r.length===7&&r[1]===r[2]&&r[3]===r[4]&&r[5]===r[6]?"#"+r[1]+r[3]+r[5]:r};function p1(r){var e=r.toString(16);return e.length===1?"0"+e:e}function OY(r){return p1(Math.round(255*r))}function cNt(r,e,a){return HY("#"+OY(r)+OY(e)+OY(a))}function C5(r,e,a){return rF(r,e,a,cNt)}function WY(r,e,a){if(typeof r=="number"&&typeof e=="number"&&typeof a=="number")return HY("#"+p1(r)+p1(e)+p1(a));if(typeof r=="object"&&e===void 0&&a===void 0)return HY("#"+p1(r.red)+p1(r.green)+p1(r.blue));throw new eu(6)}function G5(r,e,a,s){if(typeof r=="string"&&typeof e=="number"){var l=bg(r);return"rgba("+l.red+","+l.green+","+l.blue+","+e+")"}if(typeof r=="number"&&typeof e=="number"&&typeof a=="number"&&typeof s=="number")return s>=1?WY(r,e,a):"rgba("+r+","+e+","+a+","+s+")";if(typeof r=="object"&&e===void 0&&a===void 0&&s===void 0)return r.alpha>=1?WY(r.red,r.green,r.blue):"rgba("+r.red+","+r.green+","+r.blue+","+r.alpha+")";throw new eu(7)}function Vp(r){if(typeof r!="object")throw new eu(8);if((function(e){return typeof e.red=="number"&&typeof e.green=="number"&&typeof e.blue=="number"&&typeof e.alpha=="number"})(r))return G5(r);if((function(e){return typeof e.red=="number"&&typeof e.green=="number"&&typeof e.blue=="number"&&(typeof e.alpha!="number"||e.alpha===void 0)})(r))return WY(r);if((function(e){return typeof e.hue=="number"&&typeof e.saturation=="number"&&typeof e.lightness=="number"&&typeof e.alpha=="number"})(r))return(function(e,a,s,l){if(typeof e=="number"&&typeof a=="number"&&typeof s=="number"&&typeof l=="number")return l>=1?C5(e,a,s):"rgba("+rF(e,a,s)+","+l+")";if(typeof e=="object"&&a===void 0&&s===void 0&&l===void 0)return e.alpha>=1?C5(e.hue,e.saturation,e.lightness):"rgba("+rF(e.hue,e.saturation,e.lightness)+","+e.alpha+")";throw new eu(2)})(r);if((function(e){return typeof e.hue=="number"&&typeof e.saturation=="number"&&typeof e.lightness=="number"&&(typeof e.alpha!="number"||e.alpha===void 0)})(r))return(function(e,a,s){if(typeof e=="number"&&typeof a=="number"&&typeof s=="number")return C5(e,a,s);if(typeof e=="object"&&a===void 0&&s===void 0)return C5(e.hue,e.saturation,e.lightness);throw new eu(1)})(r);throw new eu(8)}function Z4e(r,e,a){return function(){var s=a.concat(Array.prototype.slice.call(arguments));return s.length>=e?r.apply(this,s):Z4e(r,e,s)}}function fu(r){return Z4e(r,r.length,[])}fu(function(r,e){if(e==="transparent")return e;var a=Up(e);return Vp(tu({},a,{hue:a.hue+parseFloat(r)}))});function Eg(r,e,a){return Math.max(r,Math.min(e,a))}fu(function(r,e){if(e==="transparent")return e;var a=Up(e);return Vp(tu({},a,{lightness:Eg(0,1,a.lightness-parseFloat(r))}))});fu(function(r,e){if(e==="transparent")return e;var a=Up(e);return Vp(tu({},a,{saturation:Eg(0,1,a.saturation-parseFloat(r))}))});fu(function(r,e){if(e==="transparent")return e;var a=Up(e);return Vp(tu({},a,{lightness:Eg(0,1,a.lightness+parseFloat(r))}))});var Q4e=fu(function(r,e,a){if(e==="transparent")return a;if(a==="transparent")return e;if(r===0)return a;var s=bg(e),l=tu({},s,{alpha:typeof s.alpha=="number"?s.alpha:1}),d=bg(a),x=tu({},d,{alpha:typeof d.alpha=="number"?d.alpha:1}),f=l.alpha-x.alpha,m=2*parseFloat(r)-1,D=((m*f===-1?m:m+f)/(1+m*f)+1)/2,b=1-D;return G5({red:Math.floor(l.red*D+x.red*b),green:Math.floor(l.green*D+x.green*b),blue:Math.floor(l.blue*D+x.blue*b),alpha:l.alpha*parseFloat(r)+x.alpha*(1-parseFloat(r))})});fu(function(r,e){if(e==="transparent")return e;var a=bg(e);return G5(tu({},a,{alpha:Eg(0,1,(100*(typeof a.alpha=="number"?a.alpha:1)+100*parseFloat(r))/100)}))});fu(function(r,e){if(e==="transparent")return e;var a=Up(e);return Vp(tu({},a,{saturation:Eg(0,1,a.saturation+parseFloat(r))}))});fu(function(r,e){return e==="transparent"?e:Vp(tu({},Up(e),{hue:parseFloat(r)}))});fu(function(r,e){return e==="transparent"?e:Vp(tu({},Up(e),{lightness:parseFloat(r)}))});fu(function(r,e){return e==="transparent"?e:Vp(tu({},Up(e),{saturation:parseFloat(r)}))});fu(function(r,e){return e==="transparent"?e:Q4e(parseFloat(r),"rgb(0, 0, 0)",e)});fu(function(r,e){return e==="transparent"?e:Q4e(parseFloat(r),"rgb(255, 255, 255)",e)});var lNt=fu(function(r,e){if(e==="transparent")return e;var a=bg(e);return G5(tu({},a,{alpha:Eg(0,1,+(100*(typeof a.alpha=="number"?a.alpha:1)-100*parseFloat(r)).toFixed(2)/100)}))}),_4e=["blue","orange","purple","cyan","magenta","yellowgreen","darkgoldenrod","deeppink"],KY=(r,e)=>{let a={};for(let s=0;s<r.connections.length;s++){let l=r.connections[s],d=e?.getNetConnectedToId(l.name);d&&!a[d]&&(a[d]=`hsl(${300*s/r.connections.length}, 100%, 50%)`),a[l.name]=(d?a[d]:null)??`hsl(${340*s/r.connections.length}, 100%, 50%)`}return a},ys=(r,e)=>{try{return lNt(e,r)}catch(a){return console.error(a),r}},nF=(r,e)=>r==="top"?0:r==="bottom"?e-1:parseInt(r.slice(5)),X0=(r,e=1)=>{let a=(("width"in r?r.width:r)/.5/2)**1.1*e;return r.availableZ?.length===1&&a>1?1:a},dNt=(r,e=.5,a=16)=>{let s=0,l=r;for(;s<a&&!(X0({width:l})<=e);)l/=2,s++;return Math.max(1,s)};function e6e(r,e,a=0,s=r.length-1,l=pNt){for(;s>a;){if(s-a>600){let m=s-a+1,D=e-a+1,b=Math.log(m),E=.5*Math.exp(2*b/3),A=.5*Math.sqrt(b*E*(m-E)/m)*(D-m/2<0?-1:1);e6e(r,e,Math.max(a,Math.floor(e-D*E/m+A)),Math.min(s,Math.floor(e+(m-D)*E/m+A)),l)}let d=r[e],x=a,f=s;for(Wb(r,a,e),l(r[s],d)>0&&Wb(r,a,s);x<f;){for(Wb(r,x,f),x++,f--;l(r[x],d)<0;)x++;for(;l(r[f],d)>0;)f--}l(r[a],d)===0?Wb(r,a,f):(f++,Wb(r,f,s)),f<=e&&(a=f+1),e<=f&&(s=f-1)}}function Wb(r,e,a){let s=r[e];r[e]=r[a],r[a]=s}function pNt(r,e){return r<e?-1:r>e?1:0}var xNt=class{constructor(r=9){this._maxEntries=Math.max(4,r),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()}all(){return this._all(this.data,[])}search(r){let e=this.data,a=[];if(!A5(r,e))return a;let s=this.toBBox,l=[];for(;e;){for(let d=0;d<e.children.length;d++){let x=e.children[d],f=e.leaf?s(x):x;A5(r,f)&&(e.leaf?a.push(x):$Y(r,f)?this._all(x,a):l.push(x))}e=l.pop()}return a}collides(r){let e=this.data;if(!A5(r,e))return!1;let a=[];for(;e;){for(let s=0;s<e.children.length;s++){let l=e.children[s],d=e.leaf?this.toBBox(l):l;if(A5(r,d)){if(e.leaf||$Y(r,d))return!0;a.push(l)}}e=a.pop()}return!1}load(r){if(!r||!r.length)return this;if(r.length<this._minEntries){for(let a=0;a<r.length;a++)this.insert(r[a]);return this}let e=this._build(r.slice(),0,r.length-1,0);if(this.data.children.length)if(this.data.height===e.height)this._splitRoot(this.data,e);else{if(this.data.height<e.height){let a=this.data;this.data=e,e=a}this._insert(e,this.data.height-e.height-1,!0)}else this.data=e;return this}insert(r){return r&&this._insert(r,this.data.height-1),this}clear(){return this.data=gg([]),this}remove(r,e){if(!r)return this;let a=this.data,s=this.toBBox(r),l=[],d=[],x,f,m;for(;a||l.length;){if(a||(a=l.pop(),f=l[l.length-1],x=d.pop(),m=!0),a.leaf){let D=fNt(r,a.children,e);if(D!==-1)return a.children.splice(D,1),l.push(a),this._condense(l),this}m||a.leaf||!$Y(a,s)?f?(x++,a=f.children[x],m=!1):a=null:(l.push(a),d.push(x),x=0,f=a,a=a.children[0])}return this}toBBox(r){return r}compareMinX(r,e){return r.minX-e.minX}compareMinY(r,e){return r.minY-e.minY}toJSON(){return this.data}fromJSON(r){return this.data=r,this}_all(r,e){let a=[];for(;r;)r.leaf?e.push(...r.children):a.push(...r.children),r=a.pop();return e}_build(r,e,a,s){let l=a-e+1,d,x=this._maxEntries;if(l<=x)return d=gg(r.slice(e,a+1)),mg(d,this.toBBox),d;s||(s=Math.ceil(Math.log(l)/Math.log(x)),x=Math.ceil(l/Math.pow(x,s-1))),d=gg([]),d.leaf=!1,d.height=s;let f=Math.ceil(l/x),m=f*Math.ceil(Math.sqrt(x));A4e(r,e,a,m,this.compareMinX);for(let D=e;D<=a;D+=m){let b=Math.min(D+m-1,a);A4e(r,D,b,f,this.compareMinY);for(let E=D;E<=b;E+=f){let A=Math.min(E+f-1,b);d.children.push(this._build(r,E,A,s-1))}}return mg(d,this.toBBox),d}_chooseSubtree(r,e,a,s){for(;s.push(e),!e.leaf&&s.length-1!==a;){let l,d=1/0,x=1/0;for(let f=0;f<e.children.length;f++){let m=e.children[f],D=LY(m),b=gNt(r,m)-D;b<x?(x=b,d=D<d?D:d,l=m):b===x&&D<d&&(d=D,l=m)}e=l||e.children[0]}return e}_insert(r,e,a){let s=a?r:this.toBBox(r),l=[],d=this._chooseSubtree(s,this.data,e,l);for(d.children.push(r),Jb(d,s);e>=0&&l[e].children.length>this._maxEntries;)this._split(l,e),e--;this._adjustParentBBoxes(s,l,e)}_split(r,e){let a=r[e],s=a.children.length,l=this._minEntries;this._chooseSplitAxis(a,l,s);let d=this._chooseSplitIndex(a,l,s),x=gg(a.children.splice(d,a.children.length-d));x.height=a.height,x.leaf=a.leaf,mg(a,this.toBBox),mg(x,this.toBBox),e?r[e-1].children.push(x):this._splitRoot(a,x)}_splitRoot(r,e){this.data=gg([r,e]),this.data.height=r.height+1,this.data.leaf=!1,mg(this.data,this.toBBox)}_chooseSplitIndex(r,e,a){let s,l=1/0,d=1/0;for(let x=e;x<=a-e;x++){let f=Kb(r,0,x,this.toBBox),m=Kb(r,x,a,this.toBBox),D=DNt(f,m),b=LY(f)+LY(m);D<l?(l=D,s=x,d=b<d?b:d):D===l&&b<d&&(d=b,s=x)}return s||a-e}_chooseSplitAxis(r,e,a){let s=r.leaf?this.compareMinX:hNt,l=r.leaf?this.compareMinY:mNt;this._allDistMargin(r,e,a,s)<this._allDistMargin(r,e,a,l)&&r.children.sort(s)}_allDistMargin(r,e,a,s){r.children.sort(s);let l=this.toBBox,d=Kb(r,0,e,l),x=Kb(r,a-e,a,l),f=_5(d)+_5(x);for(let m=e;m<a-e;m++){let D=r.children[m];Jb(d,r.leaf?l(D):D),f+=_5(d)}for(let m=a-e-1;m>=e;m--){let D=r.children[m];Jb(x,r.leaf?l(D):D),f+=_5(x)}return f}_adjustParentBBoxes(r,e,a){for(let s=a;s>=0;s--)Jb(e[s],r)}_condense(r){for(let e,a=r.length-1;a>=0;a--)r[a].children.length===0?a>0?(e=r[a-1].children,e.splice(e.indexOf(r[a]),1)):this.clear():mg(r[a],this.toBBox)}};function fNt(r,e,a){if(!a)return e.indexOf(r);for(let s=0;s<e.length;s++)if(a(r,e[s]))return s;return-1}function mg(r,e){Kb(r,0,r.children.length,e,r)}function Kb(r,e,a,s,l){l||(l=gg(null)),l.minX=1/0,l.minY=1/0,l.maxX=-1/0,l.maxY=-1/0;for(let d=e;d<a;d++){let x=r.children[d];Jb(l,r.leaf?s(x):x)}return l}function Jb(r,e){return r.minX=Math.min(r.minX,e.minX),r.minY=Math.min(r.minY,e.minY),r.maxX=Math.max(r.maxX,e.maxX),r.maxY=Math.max(r.maxY,e.maxY),r}function hNt(r,e){return r.minX-e.minX}function mNt(r,e){return r.minY-e.minY}function LY(r){return(r.maxX-r.minX)*(r.maxY-r.minY)}function _5(r){return r.maxX-r.minX+(r.maxY-r.minY)}function gNt(r,e){return(Math.max(e.maxX,r.maxX)-Math.min(e.minX,r.minX))*(Math.max(e.maxY,r.maxY)-Math.min(e.minY,r.minY))}function DNt(r,e){let a=Math.max(r.minX,e.minX),s=Math.max(r.minY,e.minY),l=Math.min(r.maxX,e.maxX),d=Math.min(r.maxY,e.maxY);return Math.max(0,l-a)*Math.max(0,d-s)}function $Y(r,e){return r.minX<=e.minX&&r.minY<=e.minY&&e.maxX<=r.maxX&&e.maxY<=r.maxY}function A5(r,e){return e.minX<=r.maxX&&e.minY<=r.maxY&&e.maxX>=r.minX&&e.maxY>=r.minY}function gg(r){return{children:r,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function A4e(r,e,a,s,l){let d=[e,a];for(;d.length;){if((a=d.pop())-(e=d.pop())<=s)continue;let x=e+Math.ceil((a-e)/s/2)*s;e6e(r,x,e,a,l),d.push(e,x,x,a)}}var R4e=class{constructor(r=9){q(this,"tree");this.tree=new xNt(r)}insert(r,e,a,s,l){this.tree.insert({minX:e,minY:a,maxX:s,maxY:l,data:r})}bulkLoad(r){let e=r.map(({item:a,minX:s,minY:l,maxX:d,maxY:x})=>({minX:s,minY:l,maxX:d,maxY:x,data:a}));this.tree.load(e)}search(r,e,a,s){return this.tree.search({minX:r,minY:e,maxX:a,maxY:s}).map(l=>l.data)}clear(){this.tree.clear()}},yNt=class{constructor(){this.ids=[],this.values=[],this.length=0}clear(){this.length=0}push(r,e){let a=this.length++;for(;a>0;){let s=a-1>>1,l=this.values[s];if(e>=l)break;this.ids[a]=this.ids[s],this.values[a]=l,a=s}this.ids[a]=r,this.values[a]=e}pop(){if(this.length===0)return;let r=this.ids[0];if(this.length--,this.length>0){let e=this.ids[0]=this.ids[this.length],a=this.values[0]=this.values[this.length],s=this.length>>1,l=0;for(;l<s;){let d=1+(l<<1),x=d+1,f=this.ids[d],m=this.values[d],D=this.values[x];if(x<this.length&&D<m&&(d=x,f=this.ids[x],m=D),m>=a)break;this.ids[l]=f,this.values[l]=m,l=d}this.ids[l]=e,this.values[l]=a}return r}peek(){if(this.length!==0)return this.ids[0]}peekValue(){if(this.length!==0)return this.values[0]}shrink(){this.ids.length=this.values.length=this.length}},S4e=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],B4e=class t6e{static from(e,a=0){if(a%8!=0)throw new Error("byteOffset must be 8-byte aligned.");if(!e||e.byteLength===void 0||e.buffer)throw new Error("Data must be an instance of ArrayBuffer or SharedArrayBuffer.");let[s,l]=new Uint8Array(e,a+0,2);if(s!==251)throw new Error("Data does not appear to be in a Flatbush format.");let d=l>>4;if(d!==3)throw new Error(`Got v${d} data when expected v3.`);let x=S4e[15&l];if(!x)throw new Error("Unrecognized array type.");let[f]=new Uint16Array(e,a+2,1),[m]=new Uint32Array(e,a+4,1);return new t6e(m,f,x,void 0,e,a)}constructor(e,a=16,s=Float64Array,l=ArrayBuffer,d,x=0){if(e===void 0)throw new Error("Missing required argument: numItems.");if(isNaN(e)||e<=0)throw new Error(`Unexpected numItems value: ${e}.`);this.numItems=+e,this.nodeSize=Math.min(Math.max(+a,2),65535),this.byteOffset=x;let f=e,m=f;this._levelBounds=[4*f];do f=Math.ceil(f/this.nodeSize),m+=f,this._levelBounds.push(4*m);while(f!==1);this.ArrayType=s,this.IndexArrayType=m<16384?Uint16Array:Uint32Array;let D=S4e.indexOf(this.ArrayType),b=4*m*this.ArrayType.BYTES_PER_ELEMENT;if(D<0)throw new Error(`Unexpected typed array class: ${s}.`);d&&d.byteLength!==void 0&&!d.buffer?(this.data=d,this._boxes=new this.ArrayType(this.data,x+8,4*m),this._indices=new this.IndexArrayType(this.data,x+8+b,m),this._pos=4*m,this.minX=this._boxes[this._pos-4],this.minY=this._boxes[this._pos-3],this.maxX=this._boxes[this._pos-2],this.maxY=this._boxes[this._pos-1]):(this.data=new l(8+b+m*this.IndexArrayType.BYTES_PER_ELEMENT),this._boxes=new this.ArrayType(this.data,8,4*m),this._indices=new this.IndexArrayType(this.data,8+b,m),this._pos=0,this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0,new Uint8Array(this.data,0,2).set([251,48+D]),new Uint16Array(this.data,2,1)[0]=a,new Uint32Array(this.data,4,1)[0]=e),this._queue=new yNt}add(e,a,s=e,l=a){let d=this._pos>>2,x=this._boxes;return this._indices[d]=d,x[this._pos++]=e,x[this._pos++]=a,x[this._pos++]=s,x[this._pos++]=l,e<this.minX&&(this.minX=e),a<this.minY&&(this.minY=a),s>this.maxX&&(this.maxX=s),l>this.maxY&&(this.maxY=l),d}finish(){if(this._pos>>2!==this.numItems)throw new Error(`Added ${this._pos>>2} items when expected ${this.numItems}.`);let e=this._boxes;if(this.numItems<=this.nodeSize)return e[this._pos++]=this.minX,e[this._pos++]=this.minY,e[this._pos++]=this.maxX,void(e[this._pos++]=this.maxY);let a=this.maxX-this.minX||1,s=this.maxY-this.minY||1,l=new Uint32Array(this.numItems);for(let d=0,x=0;d<this.numItems;d++){let f=e[x++],m=e[x++],D=e[x++],b=e[x++],E=Math.floor(65535*((f+D)/2-this.minX)/a),A=Math.floor(65535*((m+b)/2-this.minY)/s);l[d]=FNt(E,A)}JY(l,e,this._indices,0,this.numItems-1,this.nodeSize);for(let d=0,x=0;d<this._levelBounds.length-1;d++){let f=this._levelBounds[d];for(;x<f;){let m=x,D=e[x++],b=e[x++],E=e[x++],A=e[x++];for(let B=1;B<this.nodeSize&&x<f;B++)D=Math.min(D,e[x++]),b=Math.min(b,e[x++]),E=Math.max(E,e[x++]),A=Math.max(A,e[x++]);this._indices[this._pos>>2]=m,e[this._pos++]=D,e[this._pos++]=b,e[this._pos++]=E,e[this._pos++]=A}}}search(e,a,s,l,d){if(this._pos!==this._boxes.length)throw new Error("Data not yet indexed - call index.finish().");let x=this._boxes.length-4,f=[],m=[];for(;x!==void 0;){let D=Math.min(x+4*this.nodeSize,T4e(x,this._levelBounds));for(let b=x;b<D;b+=4){if(s<this._boxes[b]||l<this._boxes[b+1]||e>this._boxes[b+2]||a>this._boxes[b+3])continue;let E=0|this._indices[b>>2];x>=4*this.numItems?f.push(E):(d===void 0||d(E))&&m.push(E)}x=f.pop()}return m}neighbors(e,a,s=1/0,l=1/0,d){if(this._pos!==this._boxes.length)throw new Error("Data not yet indexed - call index.finish().");let x=this._boxes.length-4,f=this._queue,m=[],D=l*l;e:for(;x!==void 0;){let b=Math.min(x+4*this.nodeSize,T4e(x,this._levelBounds));for(let E=x;E<b;E+=4){let A=0|this._indices[E>>2],B=w4e(e,this._boxes[E],this._boxes[E+2]),w=w4e(a,this._boxes[E+1],this._boxes[E+3]),P=B*B+w*w;P>D||(x>=4*this.numItems?f.push(A<<1,P):(d===void 0||d(A))&&f.push(1+(A<<1),P))}for(;f.length&&1&f.peek();)if(f.peekValue()>D||(m.push(f.pop()>>1),m.length===s))break e;x=f.length?f.pop()>>1:void 0}return f.clear(),m}};function w4e(r,e,a){return r<e?e-r:r<=a?0:r-a}function T4e(r,e){let a=0,s=e.length-1;for(;a<s;){let l=a+s>>1;e[l]>r?s=l:a=l+1}return e[a]}function JY(r,e,a,s,l,d){if(Math.floor(s/d)>=Math.floor(l/d))return;let x=r[s+l>>1],f=s-1,m=l+1;for(;;){do f++;while(r[f]<x);do m--;while(r[m]>x);if(f>=m)break;bNt(r,e,a,f,m)}JY(r,e,a,s,m,d),JY(r,e,a,m+1,l,d)}function bNt(r,e,a,s,l){let d=r[s];r[s]=r[l],r[l]=d;let x=4*s,f=4*l,m=e[x],D=e[x+1],b=e[x+2],E=e[x+3];e[x]=e[f],e[x+1]=e[f+1],e[x+2]=e[f+2],e[x+3]=e[f+3],e[f]=m,e[f+1]=D,e[f+2]=b,e[f+3]=E;let A=a[s];a[s]=a[l],a[l]=A}function FNt(r,e){let a=r^e,s=65535^a,l=65535^(r|e),d=r&(65535^e),x=a|s>>1,f=a>>1^a,m=l>>1^s&d>>1^l,D=a&l>>1^d>>1^d;a=x,s=f,l=m,d=D,x=a&a>>2^s&s>>2,f=a&s>>2^s&(a^s)>>2,m^=a&l>>2^s&d>>2,D^=s&l>>2^(a^s)&d>>2,a=x,s=f,l=m,d=D,x=a&a>>4^s&s>>4,f=a&s>>4^s&(a^s)>>4,m^=a&l>>4^s&d>>4,D^=s&l>>4^(a^s)&d>>4,a=x,s=f,l=m,d=D,m^=a&l>>8^s&d>>8,D^=s&l>>8^(a^s)&d>>8,a=m^m>>1,s=D^D>>1;let b=r^e,E=s|65535^(b|a);return b=16711935&(b|b<<8),b=252645135&(b|b<<4),b=858993459&(b|b<<2),b=1431655765&(b|b<<1),E=16711935&(E|E<<8),E=252645135&(E|E<<4),E=858993459&(E|E<<2),E=1431655765&(E|E<<1),(E<<1|b)>>>0}var ENt=class{constructor(r){q(this,"index");q(this,"items",[]);q(this,"currentIndex",0);q(this,"capacity");this.capacity=Math.max(1,r),this.index=new B4e(this.capacity)}insert(r,e,a,s,l){if(this.currentIndex>=this.index.numItems)throw new Error("Exceeded initial capacity");this.items[this.currentIndex]=r,this.index.add(e,a,s,l),this.currentIndex++}finish(){this.index.finish()}search(r,e,a,s){return this.index.search(r,e,a,s).map(l=>this.items[l]||null).filter(Boolean)}clear(){this.items=[],this.currentIndex=0,this.index=new B4e(this.capacity)}},r6e=class{constructor(r="native",e=[]){q(this,"idx");q(this,"storage",[]);r==="flatbush"?e.length===0?(this.idx=new R4e,r="rbush"):this.idx=new ENt(e.length):this.idx=r==="rbush"?new R4e:new class{constructor(){q(this,"shi",new vNt(e))}insert(a){}search(a,s,l,d){let x=(a+l)/2,f=(s+d)/2,m=l-a,D=d-s;return this.shi.getNodesInArea(x,f,m,D)}clear(){}},e.forEach(a=>this.insert(a)),r==="flatbush"&&e.length>0&&this.idx.finish?.()}insert(r){this.storage.push(r),this.idx.insert(r,r.center.x-r.width/2,r.center.y-r.height/2,r.center.x+r.width/2,r.center.y+r.height/2)}search(r){return this.idx.search(r.minX,r.minY,r.maxX,r.maxY)}searchArea(r,e,a,s){return this.search({minX:r-a/2,minY:e-s/2,maxX:r+a/2,maxY:e+s/2})}},vNt=class{constructor(r){q(this,"buckets");q(this,"CELL_SIZE",.4);this.obstacles=r,this.buckets=new Map;for(let e=0;e<r.length;e++){let a=r[e],s=a.center.x-a.width/2,l=a.center.y-a.height/2,d=a.center.x+a.width/2,x=a.center.y+a.height/2;for(let f=s;f<=d;f+=this.CELL_SIZE)for(let m=l;m<=x;m+=this.CELL_SIZE){let D=this.getBucketKey(f,m),b=this.buckets.get(D);b?b.push([a,e]):this.buckets.set(D,[[a,e]])}}}getBucketKey(r,e){return`${Math.floor(r/this.CELL_SIZE)}x${Math.floor(e/this.CELL_SIZE)}`}getNodesInArea(r,e,a,s){let l=[],d=new Set,x=e-s/2,f=r+a/2,m=e+s/2;for(let D=r-a/2;D<=f;D+=this.CELL_SIZE)for(let b=x;b<=m;b+=this.CELL_SIZE){let E=this.getBucketKey(D,b),A=this.buckets.get(E)||[];for(let B of A)d.has(B[1])||(d.add(B[1]),l.push(B[0]))}return l}},CNt=class{constructor(r){q(this,"buckets");q(this,"CELL_SIZE",5);this.targets=r,this.buckets=new Map;for(let e=0;e<r.length;e++){let a=r[e],s=Math.floor(a.bounds.minX/this.CELL_SIZE)*this.CELL_SIZE,l=Math.floor(a.bounds.minY/this.CELL_SIZE)*this.CELL_SIZE,d=a.bounds.maxX,x=a.bounds.maxY;for(let f=s;f<=d;f+=this.CELL_SIZE)for(let m=l;m<=x;m+=this.CELL_SIZE){let D=this.getBucketKey(f,m),b=this.buckets.get(D);b?b.push([a,e]):this.buckets.set(D,[[a,e]])}}}getBucketKey(r,e){return`${Math.floor(r/this.CELL_SIZE)}x${Math.floor(e/this.CELL_SIZE)}`}getTargetsInArea(r,e,a,s){let l=[],d=new Set,x=Math.floor((r-a/2)/this.CELL_SIZE)*this.CELL_SIZE,f=Math.floor((e-s/2)/this.CELL_SIZE)*this.CELL_SIZE,m=r+a/2,D=e+s/2;for(let b=x;b<=m;b+=this.CELL_SIZE)for(let E=f;E<=D;E+=this.CELL_SIZE){let A=this.getBucketKey(b,E),B=this.buckets.get(A)||[];for(let w of B)d.has(w[1])||(d.add(w[1]),l.push(w[0]))}return l}},_Nt=class extends _a{constructor(e,a={}){super();q(this,"unfinishedNodes");q(this,"finishedNodes");q(this,"nodeToXYOverlappingObstaclesMap");q(this,"layerCount");q(this,"MAX_DEPTH",4);q(this,"targets");q(this,"targetTree");q(this,"obstacleTree");q(this,"_nextNodeCounter",0);this.srj=e,this.opts=a,this.MAX_DEPTH=a?.capacityDepth??this.MAX_DEPTH,this.MAX_ITERATIONS=1e5,this.layerCount=e.layerCount??2;for(let x of e.obstacles)if(!x.zLayers){let f=[];for(let m of x.layers)f.push(nF(m,e.layerCount));x.zLayers=f}let s={x:(e.bounds.minX+e.bounds.maxX)/2,y:(e.bounds.minY+e.bounds.maxY)/2},l={width:e.bounds.maxX-e.bounds.minX,height:e.bounds.maxY-e.bounds.minY},d=Math.max(l.width,l.height);this.unfinishedNodes=[{capacityMeshNodeId:this.getNextNodeId(),center:s,width:d,height:d,layer:"top",availableZ:[0,1],_depth:0,_containsTarget:!0,_containsObstacle:!0,_completelyInsideObstacle:!1}],this.finishedNodes=[],this.nodeToXYOverlappingObstaclesMap=new Map,this.obstacleTree=new r6e("flatbush",this.srj.obstacles),this.targets=this.computeTargets(),this.targetTree=new CNt(this.targets)}computeTargets(){let e=[];for(let a of this.srj.connections)for(let s of a.pointsToConnect){let l=this.obstacleTree.searchArea(s.x,s.y,.01,.01).filter(f=>f.zLayers.some(m=>s.layer==="top"?m===0:m===1)),d={minX:s.x-.005,minY:s.y-.005,maxX:s.x+.005,maxY:s.y+.005};l.length>0&&(d={minX:Math.min(...l.map(f=>f.center.x-f.width/2)),minY:Math.min(...l.map(f=>f.center.y-f.height/2)),maxX:Math.max(...l.map(f=>f.center.x+f.width/2)),maxY:Math.max(...l.map(f=>f.center.y+f.height/2))});let x={...s,connectionName:a.name,availableZ:s.layer==="top"?[0]:[1],bounds:d};e.push(x)}return e}getNextNodeId(){return"cn"+this._nextNodeCounter++}getCapacityFromDepth(e){return(this.MAX_DEPTH-e+1)**2}getTargetIfNodeContainsTarget(e){let a=e.width>4*this.targetTree.CELL_SIZE?this.targets:this.targetTree.getTargetsInArea(e.center.x,e.center.y,e.width,e.height);for(let s of a)if(s.bounds.minX<=e.center.x+e.width/2&&s.bounds.maxX>=e.center.x-e.width/2&&s.bounds.minY<=e.center.y+e.height/2&&s.bounds.maxY>=e.center.y-e.height/2&&s.availableZ.some(l=>e.availableZ.includes(l)))return s;return null}getXYOverlappingObstacles(e){let a=this.nodeToXYOverlappingObstaclesMap.get(e.capacityMeshNodeId);if(a)return a;let s=[],l=e.center.x-e.width/2,d=e.center.x+e.width/2,x=e.center.y-e.height/2,f=e.center.y+e.height/2,m=e._parent?this.getXYOverlappingObstacles(e._parent):this.srj.obstacles;for(let D of m){let b=D.center.x-D.width/2,E=D.center.x+D.width/2,A=D.center.y-D.height/2,B=D.center.y+D.height/2;(d>=b&&l<=E&&f>=A&&x<=B||l>=b&&d<=E&&x>=A&&f<=B||b>=l&&E<=d&&A>=x&&B<=f)&&s.push(D)}return this.nodeToXYOverlappingObstaclesMap.set(e.capacityMeshNodeId,s),s}getXYZOverlappingObstacles(e){let a=this.getXYOverlappingObstacles(e),s=[];for(let l of a)e.availableZ.some(d=>l.zLayers.includes(d))&&s.push(l);return s}doesNodeOverlapObstacle(e){if(this.getXYZOverlappingObstacles(e).length>0)return!0;let a=e.center.x-e.width/2,s=e.center.x+e.width/2,l=e.center.y-e.height/2,d=e.center.y+e.height/2;return a<this.srj.bounds.minX||s>this.srj.bounds.maxX||l<this.srj.bounds.minY||d>this.srj.bounds.maxY}isNodeCompletelyInsideObstacle(e){let a=this.getXYZOverlappingObstacles(e),s=e.center.x-e.width/2,l=e.center.x+e.width/2,d=e.center.y-e.height/2,x=e.center.y+e.height/2;for(let f of a){let m=f.center.x-f.width/2,D=f.center.x+f.width/2,b=f.center.y-f.height/2,E=f.center.y+f.height/2;if(s>=m&&l<=D&&d>=b&&x<=E)return!0}return!1}getChildNodes(e){if(e._depth===this.MAX_DEPTH)return[];let a=[],s={width:e.width/2,height:e.height/2},l=[{x:e.center.x-s.width/2,y:e.center.y-s.height/2},{x:e.center.x+s.width/2,y:e.center.y-s.height/2},{x:e.center.x-s.width/2,y:e.center.y+s.height/2},{x:e.center.x+s.width/2,y:e.center.y+s.height/2}];for(let d of l){let x={capacityMeshNodeId:this.getNextNodeId(),center:d,width:s.width,height:s.height,layer:e.layer,availableZ:[0,1],_depth:(e._depth??0)+1,_parent:e};x._containsObstacle=this.doesNodeOverlapObstacle(x);let f=this.getTargetIfNodeContainsTarget(x);f&&(x._targetConnectionName=f.connectionName,x.availableZ=f.availableZ,x._containsTarget=!0),x._containsObstacle&&(x._completelyInsideObstacle=this.isNodeCompletelyInsideObstacle(x)),x._completelyInsideObstacle&&!x._containsTarget||a.push(x)}return a}shouldNodeBeXYSubdivided(e){return!(e._depth>=this.MAX_DEPTH)&&(!!e._containsTarget||!(!e._containsObstacle||e._completelyInsideObstacle))}_step(){let e=this.unfinishedNodes.pop();if(!e)return void(this.solved=!0);let a=this.getChildNodes(e),s=[],l=[];for(let d of a){let x=this.shouldNodeBeXYSubdivided(d);x?l.push(d):x||d._containsObstacle?!x&&d._containsTarget&&s.push(d):s.push(d)}this.unfinishedNodes.push(...l),this.finishedNodes.push(...s)}visualize(){let e={lines:[],points:[],rects:[],circles:[],coordinateSystem:"cartesian",title:"Capacity Mesh Visualization"};for(let s of this.srj.obstacles)e.rects.push({center:s.center,width:s.width,height:s.height,fill:s.zLayers?.length===1&&s.zLayers?.includes(1)?"rgba(0,0,255,0.3)":"rgba(255,0,0,0.3)",stroke:"red",label:["obstacle",`z: ${s.zLayers.join(",")}`].join(`
954
954
  `)});let a=[...this.finishedNodes,...this.unfinishedNodes];for(let s of a){let l=Math.min(...s.availableZ),d=this.unfinishedNodes.length>0&&s===this.unfinishedNodes[this.unfinishedNodes.length-1];e.rects.push({center:{x:s.center.x+l*s.width*.05,y:s.center.y-l*s.width*.05},width:Math.max(s.width-2,.8*s.width),height:Math.max(s.height-2,.8*s.height),fill:s._containsObstacle?"rgba(255,0,0,0.1)":{"0,1":"rgba(0,0,0,0.1)",0:"rgba(0,200,200, 0.1)",1:"rgba(0,0,200, 0.1)"}[s.availableZ.join(",")]??"rgba(0,200,200,0.1)",stroke:d?"rgba(255,165,0,0.5)":void 0,label:[s.capacityMeshNodeId,`availableZ: ${s.availableZ.join(",")}`,`target? ${s._containsTarget??!1}`,`obs? ${s._containsObstacle??!1}`,`${s.width.toFixed(2)}x${s.height.toFixed(2)}`,`capacity: ${X0(s).toFixed(2)}`].join(`
@@ -1046,7 +1046,7 @@ ${Object.keys(e).join(", ")}`);return a};function j1(r,e,a){globalThis.__tscircu
1046
1046
  var module = { exports };
1047
1047
  var circuit = globalThis.__tscircuit_circuit;
1048
1048
  ${r};
1049
- return module;`.trim();return Function(s).call(globalThis)}var ayr=Or(aB(),1);var hK=Or(aB(),1);var sB=r=>{let e=/^\s*import\s+(?:(?:[\w\s]+,\s*)?(?:\*\s+as\s+[\w\s]+|\{[\s\w,]+\}|\w+)\s+from\s*)?['"](.+?)['"]/gm,a=[],s;for(;(s=e.exec(r))!==null;)a.push(s[1]);let l=/^\s*export\s+(?:\*|(?:\{[\s\w,]+\}))\s+from\s*['"](.+?)['"]/gm,d;for(;(d=l.exec(r))!==null;)a.push(d[1]);return a};var nwe=Or(fs(),1);var iXt=[".glb",".kicad_mod",".gltf",".obj",".stl"],rwe=r=>iXt.some(e=>r.endsWith(e));var Zg=(0,nwe.default)("tsci:eval:import-local-file"),iB=async(r,e,a=0)=>{Zg("importLocalFile called with:",{importName:r});let{fsMap:s,preSuppliedImports:l}=e,d=rB(r,s);if(Zg("fsPath:",d),!e.fsMap[d])throw Zg("fsPath not found in fsMap:",d),new Error(`File "${d}" not found`);let x=s[d];if(Zg("fileContent:",x?.slice(0,100)),d.endsWith(".json")){let f=JSON.parse(x);l[d]={__esModule:!0,default:f}}else if(rwe(d)){let m=`${e.circuit.platform?.projectBaseUrl??""}/${d.startsWith("./")?d.slice(2):d}`;l[d]={__esModule:!0,default:m}}else if(d.endsWith(".tsx")||d.endsWith(".ts")){let f=sB(x);for(let D of f)l[D]||await k1(D,e,a+1,{cwd:qc(d)});let m=hK.transform(x,{presets:["react","typescript"],plugins:["transform-modules-commonjs"],filename:"virtual.tsx"});if(!m||!m.code)throw new Error("Failed to transform code");try{Zg("evalCompiledJs called with:",{code:m.code?.slice(0,100),dirname:qc(d)});let D=j1(m.code,l,qc(d));Zg("importRunResult:",{fsPath:d,importRunResult:D}),l[d]=D.exports}catch(D){throw new Error(`Eval compiled js error for "${r}": ${D.message}`)}}else if(d.endsWith(".js")){let f=hK.transform(x,{presets:["env"],plugins:["transform-modules-commonjs"],filename:d});if(!f||!f.code)throw new Error("Failed to transform JS code");l[d]=j1(f.code,l,qc(d)).exports}else throw new Error(`Unsupported file extension "${d.split(".").pop()}" for "${d}"`)};async function awe(r,e,a=0){let{preSuppliedImports:s}=e,l=r.replace("@tsci/","").replace(".","/"),{cjs:d,error:x}=await globalThis.fetch(`${e.cjsRegistryUrl}/${l}`).then(async f=>({cjs:await f.text(),error:null})).catch(f=>({error:f,cjs:null}));if(x){console.error("Error fetching import",r,x);return}try{s[r]=j1(d,s).exports}catch(f){console.error("Error importing snippet",f)}}function oXt(r,e,a){return{fsMap:e,extensions:[".js",".jsx",".ts",".tsx",".json"],basePath:a,modulePath:r}}function uXt(r,e){let a=`${r}/package.json`;if(!e.fsMap[a])return null;try{return JSON.parse(e.fsMap[a])}catch{return null}}function gK(r,e){if(e.fsMap[r])return r;for(let a of e.extensions){let s=r.replace(/\.js$|\.jsx$/,"")+a;if(e.fsMap[s])return s}return null}function mK(r,e,a){let s=`${r}/${e.replace(/^\.\//,"")}`;return gK(s,a)}function cXt(r,e,a,s){if(!e.exports)return null;let l=e.exports["."];if(a===""&&l&&typeof l=="string"){let f=mK(r,l,s);if(f)return f}let d=a?e.exports[`./${a}`]:null;if(d&&typeof d=="string"){let f=mK(r,d,s);if(f)return f}let x=e.exports.import;if(a===""&&x&&typeof x=="string"){let f=mK(r,x,s);if(f)return f}return null}function lXt(r,e,a){let s=e.module||e.main||"index.js",l=`${r}/${s}`;return gK(l,a)}function dXt(r,e,a){if(!e){for(let d of a.extensions){let x=`${r}/index${d}`;if(a.fsMap[x])return x}return null}let s=`${r}/${e}`,l=gK(s,a);if(l)return l;for(let d of a.extensions){let x=`${s}/index${d}`;if(a.fsMap[x])return x}return null}function swe(r,e){let a=e.modulePath.split("/"),s=a[0].startsWith("@")?a.slice(0,2).join("/"):a[0],l=a.slice(s.includes("/")?2:1).join("/"),d=`${r=="."?"":`${r}/`}node_modules/${s}`,x=uXt(d,e);if(x){let D=cXt(d,x,l,e);if(D)return D;let b=lXt(d,x,e);if(b)return b}let f=dXt(d,l,e);if(f)return f;let m=qc(r);return m&&m!==r?swe(m,e):null}function oB(r,e,a){let s=oXt(r,e,a);return swe(s.basePath,s)}var iwe=async(r,e,a=0)=>{let{preSuppliedImports:s}=e;if(s[r])return;let l=oB(r,e.fsMap,"");if(!l)throw new Error(`Node module "${r}" not found`);await iB(l,e,a),s[r]=s[l];let d=l.replace(/^node_modules\//,"");if(s[d]=s[l],l.endsWith("/index.tsx")||l.endsWith("/index.ts")||l.endsWith("/index.js")){let f=l.replace(/\/index\.(tsx?|js)$/,"").replace(/^node_modules\//,"");if(s[f]=s[l],f.startsWith("@")){let m=f.split("/");if(m.length>=2){let D=`${m[0]}/${m[1]}`;s[D]=s[l]}}}};var owe=Or(aB(),1);var uwe=Or(fs(),1);var pXt=(0,uwe.default)("tsci:eval:import-npm-package");function xXt(r){let e="https://cdn.jsdelivr.net/npm/";return r.startsWith(e)?r.substring(e.length).replace(/\/\+esm$/,""):r}async function DK(r,e,a=0){pXt(`importing npm package: ${r}`);let{preSuppliedImports:s}=e;if(s[r])return;let l=`https://cdn.jsdelivr.net/npm/${r}/+esm`,d,{content:x,error:f}=await globalThis.fetch(l).then(async A=>{if(d=A.url,!A.ok)throw new Error(`Could not fetch "${r}" from jsdelivr: ${A.statusText}`);return{content:await A.text(),error:null}}).catch(A=>({error:A,content:null}));if(f)throw console.error("Error fetching npm import",r,f),f;let m=xXt(d),D=qc(m),b=sB(x);for(let A of b)s[A]||await k1(A,e,a+1,{cwd:D});let E=owe.transform(x,{presets:["react","env"],plugins:["transform-modules-commonjs"],filename:r});if(!E.code)throw new Error(`Babel transpilation failed for ${r}`);try{let A=j1(E.code,s,D).exports;s[r]=A,s[m]=A,s[d]=A}catch(A){throw new Error(`Eval npm package error for "${r}": ${A.message}`)}}var lwe=Or(fs(),1),cwe=(0,lwe.default)("tsci:eval:import-eval-path");async function k1(r,e,a=0,s={}){cwe("importEvalPath called with:",{importName:r,depth:a,opts:s}),cwe(`${" ".repeat(a)}\u27A1\uFE0F`,r);let{preSuppliedImports:l}=e;if(l[r]||r.startsWith("./")&&l[r.slice(2)])return;if(a>5){console.log("Max depth for imports reached");return}if(r.startsWith("/npm/")){let f=r.replace(/^\/npm\//,"").replace(/\/\+esm$/,"");await DK(f,e,a);let m=l[f];m&&(l[r]=m);return}let d=KF(r,e.fsMap,s.cwd);if(d)return iB(d,e,a);if(oB(r,e.fsMap,s.cwd||""))return iwe(r,e,a);if(r.startsWith("@tsci/"))return awe(r,e,a);if(!r.startsWith(".")&&!r.startsWith("/"))return DK(r,e,a);throw new Error(`Unresolved import "${r}" ${s.cwd?`from directory "${s.cwd}"`:""}`)}var dwe=Or(fs(),1),fXt=(0,dwe.default)("tsci:eval:setupDefaultEntrypointIfNeeded"),pwe=r=>{if(!r.entrypoint&&!r.mainComponentPath)if("index.tsx"in r.fsMap)r.mainComponentPath="index.tsx";else if("index.ts"in r.fsMap)r.mainComponentPath="index.ts";else if(Object.keys(r.fsMap).filter(e=>e.endsWith(".tsx")).length===1)r.mainComponentPath=Object.keys(r.fsMap)[0];else if("tscircuit.config.json"in r.fsMap){let e=r.fsMap["tscircuit.config.json"];try{let a=JSON.parse(e);a.mainEntrypoint&&(r.entrypoint=a.mainEntrypoint)}catch(a){console.warn("Failed to parse tscircuit.config.json:",a)}}else throw new Error("Either entrypoint or mainComponentPath must be provided (no index file, could not infer entrypoint)");if(!r.entrypoint&&r.mainComponentPath){if(r.entrypoint="entrypoint.tsx",!r.fsMap[rB(r.mainComponentPath,r.fsMap)])throw new Error(`Main component path "${r.mainComponentPath}" not found in fsMap. Available paths: ${Object.keys(r.fsMap).join(", ")}`);r.fsMap[r.entrypoint]=`
1049
+ return module;`.trim();return Function(s).call(globalThis)}var ayr=Or(aB(),1);var hK=Or(aB(),1);var sB=r=>{let e=/^\s*import\s+(?:(?:[\w\s]+,\s*)?(?:\*\s+as\s+[\w\s]+|\{[\s\w,]+\}|\w+)\s+from\s*)?['"](.+?)['"]/gm,a=[],s;for(;(s=e.exec(r))!==null;)a.push(s[1]);let l=/^\s*export\s+(?:\*|(?:\{[\s\w,]+\}))\s+from\s*['"](.+?)['"]/gm,d;for(;(d=l.exec(r))!==null;)a.push(d[1]);return a};var nwe=Or(fs(),1);var iXt=[".glb",".kicad_mod",".gltf",".obj",".stl"],rwe=r=>iXt.some(e=>r.endsWith(e));var Zg=(0,nwe.default)("tsci:eval:import-local-file"),iB=async(r,e,a=0)=>{Zg("importLocalFile called with:",{importName:r});let{fsMap:s,preSuppliedImports:l}=e,d=rB(r,s),x=rwe(d);if(Zg("fsPath:",d),!e.fsMap[d]&&!x)throw Zg("fsPath not found in fsMap:",d),new Error(`File "${d}" not found`);let f=s[d];if(Zg("fileContent:",f?.slice(0,100)),d.endsWith(".json")){let m=JSON.parse(f);l[d]={__esModule:!0,default:m}}else if(x){let D=`${e.circuit.platform?.projectBaseUrl??""}/${d.startsWith("./")?d.slice(2):d}`;l[d]={__esModule:!0,default:D}}else if(d.endsWith(".tsx")||d.endsWith(".ts")){let m=sB(f);for(let b of m)l[b]||await k1(b,e,a+1,{cwd:qc(d)});let D=hK.transform(f,{presets:["react","typescript"],plugins:["transform-modules-commonjs"],filename:"virtual.tsx"});if(!D||!D.code)throw new Error("Failed to transform code");try{Zg("evalCompiledJs called with:",{code:D.code?.slice(0,100),dirname:qc(d)});let b=j1(D.code,l,qc(d));Zg("importRunResult:",{fsPath:d,importRunResult:b}),l[d]=b.exports}catch(b){throw new Error(`Eval compiled js error for "${r}": ${b.message}`)}}else if(d.endsWith(".js")){let m=hK.transform(f,{presets:["env"],plugins:["transform-modules-commonjs"],filename:d});if(!m||!m.code)throw new Error("Failed to transform JS code");l[d]=j1(m.code,l,qc(d)).exports}else throw new Error(`Unsupported file extension "${d.split(".").pop()}" for "${d}"`)};async function awe(r,e,a=0){let{preSuppliedImports:s}=e,l=r.replace("@tsci/","").replace(".","/"),{cjs:d,error:x}=await globalThis.fetch(`${e.cjsRegistryUrl}/${l}`).then(async f=>({cjs:await f.text(),error:null})).catch(f=>({error:f,cjs:null}));if(x){console.error("Error fetching import",r,x);return}try{s[r]=j1(d,s).exports}catch(f){console.error("Error importing snippet",f)}}function oXt(r,e,a){return{fsMap:e,extensions:[".js",".jsx",".ts",".tsx",".json"],basePath:a,modulePath:r}}function uXt(r,e){let a=`${r}/package.json`;if(!e.fsMap[a])return null;try{return JSON.parse(e.fsMap[a])}catch{return null}}function gK(r,e){if(e.fsMap[r])return r;for(let a of e.extensions){let s=r.replace(/\.js$|\.jsx$/,"")+a;if(e.fsMap[s])return s}return null}function mK(r,e,a){let s=`${r}/${e.replace(/^\.\//,"")}`;return gK(s,a)}function cXt(r,e,a,s){if(!e.exports)return null;let l=e.exports["."];if(a===""&&l&&typeof l=="string"){let f=mK(r,l,s);if(f)return f}let d=a?e.exports[`./${a}`]:null;if(d&&typeof d=="string"){let f=mK(r,d,s);if(f)return f}let x=e.exports.import;if(a===""&&x&&typeof x=="string"){let f=mK(r,x,s);if(f)return f}return null}function lXt(r,e,a){let s=e.module||e.main||"index.js",l=`${r}/${s}`;return gK(l,a)}function dXt(r,e,a){if(!e){for(let d of a.extensions){let x=`${r}/index${d}`;if(a.fsMap[x])return x}return null}let s=`${r}/${e}`,l=gK(s,a);if(l)return l;for(let d of a.extensions){let x=`${s}/index${d}`;if(a.fsMap[x])return x}return null}function swe(r,e){let a=e.modulePath.split("/"),s=a[0].startsWith("@")?a.slice(0,2).join("/"):a[0],l=a.slice(s.includes("/")?2:1).join("/"),d=`${r=="."?"":`${r}/`}node_modules/${s}`,x=uXt(d,e);if(x){let D=cXt(d,x,l,e);if(D)return D;let b=lXt(d,x,e);if(b)return b}let f=dXt(d,l,e);if(f)return f;let m=qc(r);return m&&m!==r?swe(m,e):null}function oB(r,e,a){let s=oXt(r,e,a);return swe(s.basePath,s)}var iwe=async(r,e,a=0)=>{let{preSuppliedImports:s}=e;if(s[r])return;let l=oB(r,e.fsMap,"");if(!l)throw new Error(`Node module "${r}" not found`);await iB(l,e,a),s[r]=s[l];let d=l.replace(/^node_modules\//,"");if(s[d]=s[l],l.endsWith("/index.tsx")||l.endsWith("/index.ts")||l.endsWith("/index.js")){let f=l.replace(/\/index\.(tsx?|js)$/,"").replace(/^node_modules\//,"");if(s[f]=s[l],f.startsWith("@")){let m=f.split("/");if(m.length>=2){let D=`${m[0]}/${m[1]}`;s[D]=s[l]}}}};var owe=Or(aB(),1);var uwe=Or(fs(),1);var pXt=(0,uwe.default)("tsci:eval:import-npm-package");function xXt(r){let e="https://cdn.jsdelivr.net/npm/";return r.startsWith(e)?r.substring(e.length).replace(/\/\+esm$/,""):r}async function DK(r,e,a=0){pXt(`importing npm package: ${r}`);let{preSuppliedImports:s}=e;if(s[r])return;let l=`https://cdn.jsdelivr.net/npm/${r}/+esm`,d,{content:x,error:f}=await globalThis.fetch(l).then(async A=>{if(d=A.url,!A.ok)throw new Error(`Could not fetch "${r}" from jsdelivr: ${A.statusText}`);return{content:await A.text(),error:null}}).catch(A=>({error:A,content:null}));if(f)throw console.error("Error fetching npm import",r,f),f;let m=xXt(d),D=qc(m),b=sB(x);for(let A of b)s[A]||await k1(A,e,a+1,{cwd:D});let E=owe.transform(x,{presets:["react","env"],plugins:["transform-modules-commonjs"],filename:r});if(!E.code)throw new Error(`Babel transpilation failed for ${r}`);try{let A=j1(E.code,s,D).exports;s[r]=A,s[m]=A,s[d]=A}catch(A){throw new Error(`Eval npm package error for "${r}": ${A.message}`)}}var lwe=Or(fs(),1),cwe=(0,lwe.default)("tsci:eval:import-eval-path");async function k1(r,e,a=0,s={}){cwe("importEvalPath called with:",{importName:r,depth:a,opts:s}),cwe(`${" ".repeat(a)}\u27A1\uFE0F`,r);let{preSuppliedImports:l}=e;if(l[r]||r.startsWith("./")&&l[r.slice(2)])return;if(a>5){console.log("Max depth for imports reached");return}if(r.startsWith("/npm/")){let f=r.replace(/^\/npm\//,"").replace(/\/\+esm$/,"");await DK(f,e,a);let m=l[f];m&&(l[r]=m);return}let d=KF(r,e.fsMap,s.cwd);if(d)return iB(d,e,a);if(oB(r,e.fsMap,s.cwd||""))return iwe(r,e,a);if(r.startsWith("@tsci/"))return awe(r,e,a);if(!r.startsWith(".")&&!r.startsWith("/"))return DK(r,e,a);throw new Error(`Unresolved import "${r}" ${s.cwd?`from directory "${s.cwd}"`:""}`)}var dwe=Or(fs(),1),fXt=(0,dwe.default)("tsci:eval:setupDefaultEntrypointIfNeeded"),pwe=r=>{if(!r.entrypoint&&!r.mainComponentPath)if("index.tsx"in r.fsMap)r.mainComponentPath="index.tsx";else if("index.ts"in r.fsMap)r.mainComponentPath="index.ts";else if(Object.keys(r.fsMap).filter(e=>e.endsWith(".tsx")).length===1)r.mainComponentPath=Object.keys(r.fsMap)[0];else if("tscircuit.config.json"in r.fsMap){let e=r.fsMap["tscircuit.config.json"];try{let a=JSON.parse(e);a.mainEntrypoint&&(r.entrypoint=a.mainEntrypoint)}catch(a){console.warn("Failed to parse tscircuit.config.json:",a)}}else throw new Error("Either entrypoint or mainComponentPath must be provided (no index file, could not infer entrypoint)");if(!r.entrypoint&&r.mainComponentPath){if(r.entrypoint="entrypoint.tsx",!r.fsMap[rB(r.mainComponentPath,r.fsMap)])throw new Error(`Main component path "${r.mainComponentPath}" not found in fsMap. Available paths: ${Object.keys(r.fsMap).join(", ")}`);r.fsMap[r.entrypoint]=`
1050
1050
  import * as UserComponents from "./${r.mainComponentPath}";
1051
1051
 
1052
1052
  ${r.mainComponentName?`
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tscircuit/eval",
3
3
  "main": "dist/lib/index.js",
4
- "version": "0.0.321",
4
+ "version": "0.0.322",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "build": "bun run build:lib && bun run build:webworker && bun run build:blob-url && bun run build:runner && bun run build:worker-wrapper",
@@ -25,8 +25,9 @@ export const importLocalFile = async (
25
25
  const { fsMap, preSuppliedImports } = ctx
26
26
 
27
27
  const fsPath = resolveFilePathOrThrow(importName, fsMap)
28
+ const isStaticAsset = isStaticAssetPath(fsPath)
28
29
  debug("fsPath:", fsPath)
29
- if (!ctx.fsMap[fsPath]) {
30
+ if (!ctx.fsMap[fsPath] && !isStaticAsset) {
30
31
  debug("fsPath not found in fsMap:", fsPath)
31
32
  throw new Error(`File "${fsPath}" not found`)
32
33
  }
@@ -38,7 +39,7 @@ export const importLocalFile = async (
38
39
  __esModule: true,
39
40
  default: jsonData,
40
41
  }
41
- } else if (isStaticAssetPath(fsPath)) {
42
+ } else if (isStaticAsset) {
42
43
  const platformConfig = ctx.circuit.platform
43
44
  // Use projectBaseUrl for static file imports
44
45
  const staticUrl = `${platformConfig?.projectBaseUrl ?? ""}/${fsPath.startsWith("./") ? fsPath.slice(2) : fsPath}`