@tscircuit/runframe 0.0.996 → 0.0.998
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.
|
@@ -5502,7 +5502,7 @@ $1`).replace(/>(\s*)(?=<!--\s*\/)/g,"> ")}}}),sye={};t5n(sye,{all_layers:()=>zye
|
|
|
5502
5502
|
transition: opacity 0.2s;
|
|
5503
5503
|
margin-bottom: 10px;
|
|
5504
5504
|
color: red;
|
|
5505
|
-
`,r3n=({children:t,transform:e=h0(),elements:n})=>{const i=Ee.useRef(null),{isShowingDRCErrors:r,hoveredErrorId:o}=yv(l=>({isShowingDRCErrors:l.is_showing_drc_errors,hoveredErrorId:l.hovered_error_id}));if(!n)return ye.jsx("div",{style:{position:"relative"},ref:i,children:t});const s=n.filter(l=>l.type==="pcb_trace_error"),a=n.filter(l=>l.type==="pcb_trace_error"&&l.message?.includes("Multiple components found with name")),c=new Map;return n.forEach(l=>{l.type==="pcb_port"&&c.set(l.pcb_port_id,l)}),ye.jsxs("div",{style:{position:"relative"},ref:i,children:[t,s.map((l,u)=>{const{pcb_port_ids:d,pcb_trace_id:h}=l,f=d?.[0]?c.get(d[0]):void 0,m=d?.[1]?c.get(d[1]):void 0,y=n?dE(n).pcb_trace.get(h):void 0,g=l.pcb_trace_error_id||`error_${u}_${l.error_type}_${l.message?.slice(0,20)}`,b=o===g;if(f&&m){const v=Yt(e,{x:f.x,y:f.y}),w=Yt(e,{x:m.x,y:m.y}),T=!(isNaN(v.x)||isNaN(v.y)||isNaN(w.x)||isNaN(w.y)),N={x:(v.x+w.x)/2,y:(v.y+w.y)/2};if(isNaN(N.x)||isNaN(N.y))return null;const R=Gye(N,i);return ye.jsxs(Ee.Fragment,{children:[ye.jsx(n3n,{screenPort1:v,screenPort2:w,errorCenter:N,canLineBeDrawn:T,isHighlighted:b}),ye.jsx("div",{style:{position:"absolute",left:N.x-15,top:N.y-15,width:30,height:30,zIndex:Wm.errorOverlay+5,cursor:"pointer",borderRadius:"50%"},onMouseEnter:P=>{const M=P.currentTarget.nextElementSibling;if(M){const I=M.querySelector(".error-message");I&&(I.style.opacity="1")}},onMouseLeave:P=>{if(!b){const M=P.currentTarget.nextElementSibling;if(M){const I=M.querySelector(".error-message");I&&(I.style.opacity="0")}}}}),ye.jsx("div",{style:{position:"absolute",zIndex:b?200:100,left:R.left,top:R.top,color:b?"#ff4444":"red",textAlign:"center",fontFamily:"sans-serif",fontSize:12,display:r||b?"flex":"none",flexDirection:"column",alignItems:"center",pointerEvents:"none",transform:R.transform},children:ye.jsx("div",{className:`error-message ${Yye}`,style:{opacity:b?1:0,border:`1px solid ${b?"#ff4444":"red"}`},children:l.message})})]},g)}if(y?.route&&(r||b)){const v=y.route.map(R=>Yt(e,{x:R.x,y:R.y}));if(v.some(R=>isNaN(R.x)||isNaN(R.y)))return null;const w=Math.floor(v.length/2),T=v[w],N=Gye(T,i);return ye.jsxs(Ee.Fragment,{children:[ye.jsx(i3n,{points:v,errorCenter:T,isHighlighted:b}),ye.jsx("div",{style:{position:"absolute",left:T.x-15,top:T.y-15,width:30,height:30,zIndex:Wm.errorOverlay+5,cursor:"pointer",borderRadius:"50%"},onMouseEnter:R=>{const P=R.currentTarget.nextElementSibling;if(P){const M=P.querySelector(".error-message");M&&(M.style.opacity="1")}},onMouseLeave:R=>{if(!b){const P=R.currentTarget.nextElementSibling;if(P){const M=P.querySelector(".error-message");M&&(M.style.opacity="0")}}}}),ye.jsx("div",{style:{position:"absolute",zIndex:b?Wm.errorOverlay+10:Wm.errorOverlay+1,left:N.left,top:N.top,color:b?"#ff4444":"red",textAlign:"center",fontFamily:"sans-serif",fontSize:12,display:"flex",flexDirection:"column",alignItems:"center",pointerEvents:"none",transform:N.transform},children:ye.jsx("div",{className:`error-message ${Yye}`,style:{opacity:b?1:0,border:`1px solid ${b?"#ff4444":"red"}`},children:l.message})})]},g)}return null}),a.map((l,u)=>{const d=l.component_name||l.message?.match(/name "([^"]+)"/)?.[1];if(!d)return null;const h=n?.filter(y=>y.type==="source_component"&&y.name===d||y.type==="pcb_component"&&n?.find(g=>g.type==="source_component"&&g.source_component_id===y.source_component_id&&g.name===d))||[],f=l.pcb_trace_error_id||`error_${u}_${l.error_type}_${l.message?.slice(0,20)}`,m=o===f;return!m&&!r?null:h.map((y,g)=>{let b={x:0,y:0};if(y.type==="pcb_component")b=y.center||{x:0,y:0};else if(y.type==="source_component"){const I=n?.find(A=>A.type==="pcb_component"&&A.source_component_id===y.source_component_id);I&&I.type==="pcb_component"&&(b=I.center||{x:0,y:0})}const v=Yt(e,b);if(isNaN(v.x)||isNaN(v.y))return null;const w=Math.abs(e.a),P=Math.max(8,Math.min(30,.5*w)),M=Gye(v,i);return ye.jsxs(Ee.Fragment,{children:[ye.jsx("svg",{style:{position:"absolute",left:0,top:0,pointerEvents:"none",mixBlendMode:"difference",zIndex:Wm.errorOverlay},width:"100%",height:"100%",children:m?ye.jsx("polygon",{points:`${v.x},${v.y-P*1.25} ${v.x+P},${v.y} ${v.x},${v.y+P*1.25} ${v.x-P},${v.y}`,fill:"#ff4444"}):ye.jsx("circle",{cx:v.x,cy:v.y,r:P,fill:"none",stroke:m?"#ff4444":"red",strokeWidth:m?Math.max(2,P*.15):Math.max(1,P*.1),opacity:1})}),ye.jsx("div",{style:{position:"absolute",left:v.x-(P+10),top:v.y-(P+10),width:(P+10)*2,height:(P+10)*2,zIndex:Wm.errorOverlay+5,cursor:"pointer",borderRadius:"50%"},onMouseEnter:I=>{const A=I.currentTarget.nextElementSibling;if(A){const $=A.querySelector(".error-message");$&&($.style.opacity="1")}},onMouseLeave:I=>{if(!m){const A=I.currentTarget.nextElementSibling;if(A){const $=A.querySelector(".error-message");$&&($.style.opacity="0")}}}}),ye.jsx("div",{style:{position:"absolute",zIndex:m?Wm.errorOverlay+20:Wm.errorOverlay+10,left:M.left,top:M.top,color:m?"#ff4444":"red",textAlign:"center",fontFamily:"sans-serif",fontSize:12,display:r||m?"flex":"none",flexDirection:"column",alignItems:"center",pointerEvents:"none",transform:M.transform},children:ye.jsx("div",{className:`error-message ${Yye}`,style:{opacity:m?1:0,border:`1px solid ${m?"#ff4444":"red"}`},children:l.message})})]},`${f}_${g}`)})})]})};function o3n({primitiveElement:t,elements:e}){let n=t.trace_length?`${t.trace_length.toFixed(3)}`:"";const i=dE(e).source_trace.get(t?.source_trace_id);if(i?.display_name&&(i?.max_length?n+=` / ${i.max_length}mm `:n+=" mm ",n+=`(${i.display_name})`),!n)return null;const r=t.trace_length&&i?.max_length&&t.trace_length>i.max_length;return{text:n,isOverLength:r}}function s3n(t){const{primitives:e,is_showing_multiple_traces_length:n,elements:i}=t,r=e.filter(c=>c._element.type==="pcb_trace"),o=i.filter(c=>c.type==="source_trace"),s=e.filter(c=>c._element.type!=="pcb_trace"),a=r.filter(c=>o.some(l=>c._element.type==="pcb_trace"&&c._element.source_trace_id===l.source_trace_id&&l.max_length!==void 0));if(!n)return[...s,...a];if(r.length>1){const c=r.reduce((l,u)=>{const d=l._element.trace_length;return u._element.trace_length<d?u:l},r[0]);return[...s,c]}return e}var a3n={position:"absolute",left:0,top:0,pointerEvents:"none",color:"red",fontFamily:"sans-serif",fontSize:12,textShadow:"0 0 2px black"},c3n=t=>{const{_element:e,_parent_pcb_component:n,_parent_source_component:i,_source_port:r}=t;switch(e.type){case"pcb_trace":return e.trace_length?`${e.trace_length.toFixed(3)}`:"";case"pcb_smtpad":case"pcb_plated_hole":{let o="";const s=Array.from(new Set((e.port_hints??[]).concat(r?.port_hints??[]))).filter(a=>!/^[0-9]+$/.test(a)).sort((a,c)=>c.localeCompare(a));return i&&"name"in i&&i.name&&(o+=`.${i.name}`,s.length>0&&(o+=" > ")),s.length>0&&(o+=s.map(a=>`.${a}`).join(", ")),o}default:return""}},l3n={top:"red",bottom:"aqua"},u3n=({primitive:t,mousePos:e,elements:n})=>{const[i,r]=Ee.useState(!1),o=t._element;Ee.useEffect(()=>{setTimeout(()=>{r(!0)},100)},[]);const[s,a,c,l]=[t.screen_x,t.screen_y,t.screen_w,t.screen_h],u=t.same_space_index??0,d=26,h=l3n[t?._element?.layer]??"red";let f=0;if(o.type==="pcb_smtpad"&&o?.shape==="rotated_rect"?f=o?.ccw_rotation??0:(o.type==="pcb_smtpad"&&(o?.shape==="pill"||o?.shape==="rotated_pill")&&"ccw_rotation"in t||o.type==="pcb_plated_hole"&&(o?.shape==="pill"||o?.shape==="oval")&&"ccw_rotation"in t)&&(f=o.ccw_rotation??0),o.type==="pcb_trace"){const y=o3n({primitiveElement:o,elements:n});if(!y)return null;const g=e.y-35;return ye.jsx("div",{style:{zIndex:Wm.elementOverlay,position:"absolute",left:e.x,top:g,color:h,pointerEvents:"none",transform:"translateX(-50%)"},children:ye.jsx("div",{style:{backgroundColor:"#f2efcc",color:y.isOverLength?"red":"black",textShadow:"none",WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale",padding:"6px 6px",borderRadius:"6px",fontSize:"14px",minWidth:"45px",textAlign:"center",whiteSpace:"nowrap"},children:y.text})})}return ye.jsx("div",{style:{zIndex:Wm.elementOverlay,position:"absolute",left:s-c/2-8,top:a-l/2-8,width:c+16,height:l+16,color:h,transform:`rotate(${-f}deg)`,transformOrigin:"center center"},children:ye.jsx("div",{style:{width:i?`calc(100% + ${d*2*u}px)`:"100%",height:i?`calc(100% + ${d*2*u}px)`:"100%",marginLeft:i?`${-d*u}px`:0,marginTop:i?`${-d*u}px`:0,border:`1px solid ${h}`,opacity:i||u===0?1:0,transition:"width 0.2s, height 0.2s, margin-left 0.2s, margin-top 0.2s, opacity 0.2s"},children:ye.jsx("div",{style:{position:"absolute",bottom:l+20+d*u,marginRight:i?`${-d*u}px`:0,marginBottom:i?0:-d*u,transition:"margin-right 0.2s, margin-bottom 0.2s",backgroundColor:"#f2efcc",color:"black",textShadow:"none",WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale",padding:"6px 6px",borderRadius:"6px",fontSize:"14px",transform:`rotate(${f}deg)`,minWidth:"45px",textAlign:"center"},children:c3n(t)})})})},d3n=({highlightedPrimitives:t,mousePos:e,elements:n})=>{const[i,r]=yv(a=>[a.is_moving_component,a.is_showing_multiple_traces_length]),o=t.some(a=>a._element.type==="pcb_smtpad")&&t.some(a=>a._element.type==="pcb_trace");let s=t;return o&&(s=s.filter(a=>a._element.type==="pcb_smtpad")),s=s3n({primitives:s,is_showing_multiple_traces_length:r,elements:n}),ye.jsx("div",{style:a3n,children:!i&&s.map((a,c)=>ye.jsx(u3n,{primitive:a,mousePos:e,elements:n},c))})};function h3n(t,e){return t.size!==e.size?!1:Array.from(t).every(n=>e.has(n))}function p3n(t,e,n){const i=(n.x-e.x)**2+(n.y-e.y)**2;if(i===0)return Lnt(t,e);let r=((t.x-e.x)*(n.x-e.x)+(t.y-e.y)*(n.y-e.y))/i;r=Math.max(0,Math.min(1,r));const o={x:e.x+r*(n.x-e.x),y:e.y+r*(n.y-e.y)};return Lnt(t,o)}function Lnt(t,e){const n=t.x-e.x,i=t.y-e.y;return Math.sqrt(n*n+i*i)}var f3n=(t,e,n)=>{const i=[];for(const r of t){if(!r._element)continue;if("x1"in r&&r._element?.type==="pcb_trace"){const a=p3n({x:e.x,y:e.y},{x:r.x1,y:r.y1},{x:r.x2,y:r.y2}),c=r.width||.5,l=Math.max(c*25,2)/n.a;a<l&&i.push(r);continue}if(!("x"in r&&"y"in r))continue;let o=0,s=0;if("w"in r&&"h"in r)o=r.w,s=r.h;else if("r"in r)o=r.r*2,s=r.r*2;else continue;Math.abs(r.x-e.x)<o/2&&Math.abs(r.y-e.y)<s/2&&i.push(r)}return i},m3n=({elements:t,children:e,transform:n,primitives:i,onMouseHoverOverPrimitives:r})=>{const[o,s]=Ee.useState([]),[a,c]=Ee.useState({x:0,y:0}),l=Ee.useMemo(()=>{const d=[];for(const h of o){if(h._element?.type==="pcb_via"||h._element?.type==="pcb_component"||h?.layer==="drill")continue;const f=Yt(n,h),m="w"in h?h.w:"r"in h?h.r*2:0,y="h"in h?h.h:"r"in h?h.r*2:0,g={w:m*n.a,h:y*n.a},b=d.filter(v=>f.x===v.screen_x&&f.y===v.screen_y&&g.w===v.screen_w&&g.h===v.screen_h).length;d.push({...h,screen_x:f.x,screen_y:f.y,screen_w:g.w,screen_h:g.h,same_space_index:b})}return d},[o,n]),u=(d,h,f,m)=>{c({x:d,y:h});const y=Yt(n5(f),{x:d,y:h}),g=f3n(m,y,f);h3n(new Set(g.map(b=>b._pcb_drawing_object_id)),new Set(o.map(b=>b._pcb_drawing_object_id)))||(s(g),r(g))};return ye.jsxs("div",{style:{position:"relative"},onMouseMove:d=>{if(n){const h=d.currentTarget.getBoundingClientRect(),f=d.clientX-h.left,m=d.clientY-h.top;u(f,m,n,i)}},onTouchStart:d=>{if(n){const h=d.touches[0],f=d.currentTarget.getBoundingClientRect(),m=h.clientX-f.left,y=h.clientY-f.top;u(m,y,n,i)}},children:[e,ye.jsx(d3n,{elements:t,mousePos:a,highlightedPrimitives:l})]})},Dnt=["rgb(255, 100, 100)","rgb(100, 255, 100)","rgb(100, 100, 255)","rgb(255, 255, 100)","rgb(255, 100, 255)","rgb(100, 255, 255)","rgb(255, 150, 100)","rgb(150, 100, 255)","rgb(100, 255, 150)","rgb(255, 100, 150)"],_3n=({children:t,transform:e=h0(),elements:n=[]})=>{const[i,{width:r,height:o}]=eV(),s=Ee.useRef(null),a=yv(c=>c.is_showing_pcb_groups);return Ee.useEffect(()=>{const c=s.current;if(!c||!r||!o)return;c.width=r,c.height=o;const l=c.getContext("2d");if(!l||(l.clearRect(0,0,r,o),!a))return;const u=n.filter(g=>g.type==="pcb_group"),d=n.filter(g=>g.type==="pcb_component"),h=n.filter(g=>g.type==="source_group"),f=new Map;h.forEach(g=>{const b=g;if(b.parent_source_group_id){const v=f.get(b.parent_source_group_id)||[];v.push(g.source_group_id),f.set(b.parent_source_group_id,v)}});const m=g=>{const b=[],v=f.get(g)||[];for(const w of v)b.push(w),b.push(...m(w));return b},y=g=>{const b=h.find(v=>v.source_group_id===g);return b?.parent_source_group_id?1+y(b.parent_source_group_id):0};u.forEach((g,b)=>{let v=d.filter(Je=>Je.pcb_group_id===g.pcb_group_id);if(g.source_group_id){const Je=m(g.source_group_id),st=u.filter(Se=>Se.source_group_id&&Je.includes(Se.source_group_id));for(const Se of st){const ut=d.filter(Ke=>Ke.pcb_group_id===Se.pcb_group_id);v=[...v,...ut]}}if(v.length===0)return;let w=1/0,T=1/0,N=-1/0,R=-1/0;if(v.forEach(Je=>{if(Je.center&&typeof Je.width=="number"&&typeof Je.height=="number"){const st=Je.center.x-Je.width/2,Se=Je.center.x+Je.width/2,ut=Je.center.y+Je.height/2,Ke=Je.center.y-Je.height/2;w=Math.min(w,st),N=Math.max(N,Se),T=Math.min(T,Ke),R=Math.max(R,ut)}}),w===1/0||N===-1/0)return;const P=g.source_group_id?y(g.source_group_id):0,M=g.source_group_id?m(g.source_group_id).length>0:!1,$=1+(M?.5:0);w-=$,N+=$,T-=$,R+=$;const k=Yt(e,{x:w,y:R}),V=Yt(e,{x:N,y:R}),X=Yt(e,{x:w,y:T}),W=Yt(e,{x:N,y:T}),K=Dnt[b%Dnt.length];l.strokeStyle=K,l.lineWidth=2;const te=Math.max(4,Math.min(12,8*Math.abs(e.a))),se=Math.max(2,Math.min(6,4*Math.abs(e.a))),be=te*(M?1.3:1),re=se;l.setLineDash([be,re]),l.beginPath(),l.moveTo(k.x,k.y),l.lineTo(V.x,V.y),l.lineTo(W.x,W.y),l.lineTo(X.x,X.y),l.closePath(),l.stroke();const ue=Math.max(8,Math.min(12,10*Math.abs(e.a))),he=P==0||P==1?0:P*.11,Me=ue*(1-he),Ie=4,De=g.name||`Group ${b+1}`;l.font=`${Me}px sans-serif`,l.setLineDash([]);const ke=l.measureText(De).width+Ie*2,ce=Me+Ie*2,we=k.x-5,xe=k.y-5,Ye=3;l.fillStyle="rgba(0, 0, 0, 0.8)",l.beginPath(),l.roundRect(we,xe-ce,ke,ce,Ye),l.fill(),l.fillStyle=K,l.textAlign="left",l.textBaseline="middle",l.fillText(De,we+Ie,xe-ce/2)})},[n,e,r,o,a]),ye.jsxs("div",{ref:i,style:{position:"relative",width:"100%",height:"100%"},children:[t,ye.jsx("canvas",{ref:s,style:{position:"absolute",top:0,left:0,pointerEvents:"none",zIndex:Wm.pcbGroupOverlay,display:a?"block":"none"}})]})},y3n=({transform:t,soup:e,children:n})=>{const i=yv(a=>a.is_showing_rats_nest),{netMap:r,idToNetMap:o}=Ee.useMemo(()=>Rnt(e||[]),[e]),s=Ee.useMemo(()=>{if(!e||!i)return[];const a=h=>{const f=dE(e)[h.replace(/_\d+$/,"")].get(h);return f&&"x"in f&&"y"in f?{x:f.x,y:f.y}:null},c=(h,f)=>{const m=r[f]||[];let y=null,g=1/0;return m.forEach(b=>{const v=a(b);if(v){const w=Math.sqrt((h.x-v.x)**2+(h.y-v.y)**2);w<g&&w>0&&(g=w,y=v)}}),y},l=dE(e).pcb_port.list(),u=dE(e).source_trace.list(),d=[];return l.forEach((h,f)=>{const m=o[h.pcb_port_id];let y=!1;for(const v of u)v.connected_source_port_ids.includes(h.source_port_id)&&v.connected_source_net_ids.length>0&&(y=!0);if(!m)return;const g={x:h.x,y:h.y},b=c(g,m);b&&d.push({key:`${h.pcb_port_id}-${f}`,startPoint:g,endPoint:b,isInNet:y})}),d},[e,r,o,i]);return!e||!i?n:(t||(t=h0()),ye.jsxs("div",{style:{position:"relative"},children:[n,ye.jsx("svg",{style:{position:"absolute",left:0,top:0,width:"100%",height:"100%",pointerEvents:"none",opacity:.5,zIndex:Wm.ratsNestOverlay},children:s.map(({key:a,startPoint:c,endPoint:l,isInNet:u})=>{const d=Yt(t,c),h=Yt(t,l);return ye.jsx("line",{x1:d.x,y1:d.y,x2:h.x,y2:h.y,stroke:"white",strokeWidth:"1",strokeDasharray:u?"6,6":void 0},a)})})]}))},g3n={version:"1.11.223"},pE=(t,e)=>{const n=yv(i=>i.is_mouse_over_container);Ee.useEffect(()=>{if(!t||typeof e!="function")return;const i=r=>{const o=t.split("+"),s=o.includes("ctrl"),a=o.includes("shift"),c=o.includes("alt"),l=o.includes("meta"),u=o[o.length-1];n&&(!s||r.ctrlKey)&&(!a||r.shiftKey)&&(!c||r.altKey)&&(!l||r.metaKey)&&r.key.toLowerCase()===u.toLowerCase()&&(r.preventDefault(),e())};return window.addEventListener("keydown",i),()=>{window.removeEventListener("keydown",i)}},[t,e])},b3n=()=>{const[t,e]=Ee.useState(!1);return Ee.useEffect(()=>{const n=()=>{e(window.innerWidth<=768)};return n(),window.addEventListener("resize",n),()=>window.removeEventListener("resize",n)},[]),t},x3n=({name:t,selected:e,onClick:n})=>ye.jsxs("div",{className:kN`
|
|
5505
|
+
`,r3n=({children:t,transform:e=h0(),elements:n})=>{const i=Ee.useRef(null),{isShowingDRCErrors:r,hoveredErrorId:o}=yv(l=>({isShowingDRCErrors:l.is_showing_drc_errors,hoveredErrorId:l.hovered_error_id}));if(!n)return ye.jsx("div",{style:{position:"relative"},ref:i,children:t});const s=n.filter(l=>l.type==="pcb_trace_error"),a=n.filter(l=>l.type==="pcb_trace_error"&&l.message?.includes("Multiple components found with name")),c=new Map;return n.forEach(l=>{l.type==="pcb_port"&&c.set(l.pcb_port_id,l)}),ye.jsxs("div",{style:{position:"relative"},ref:i,children:[t,s.map((l,u)=>{const{pcb_port_ids:d,pcb_trace_id:h}=l,f=d?.[0]?c.get(d[0]):void 0,m=d?.[1]?c.get(d[1]):void 0,y=n?dE(n).pcb_trace.get(h):void 0,g=l.pcb_trace_error_id||`error_${u}_${l.error_type}_${l.message?.slice(0,20)}`,b=o===g;if(f&&m){const v=Yt(e,{x:f.x,y:f.y}),w=Yt(e,{x:m.x,y:m.y}),T=!(isNaN(v.x)||isNaN(v.y)||isNaN(w.x)||isNaN(w.y)),N={x:(v.x+w.x)/2,y:(v.y+w.y)/2};if(isNaN(N.x)||isNaN(N.y))return null;const R=Gye(N,i);return ye.jsxs(Ee.Fragment,{children:[ye.jsx(n3n,{screenPort1:v,screenPort2:w,errorCenter:N,canLineBeDrawn:T,isHighlighted:b}),ye.jsx("div",{style:{position:"absolute",left:N.x-15,top:N.y-15,width:30,height:30,zIndex:Wm.errorOverlay+5,cursor:"pointer",borderRadius:"50%"},onMouseEnter:P=>{const M=P.currentTarget.nextElementSibling;if(M){const I=M.querySelector(".error-message");I&&(I.style.opacity="1")}},onMouseLeave:P=>{if(!b){const M=P.currentTarget.nextElementSibling;if(M){const I=M.querySelector(".error-message");I&&(I.style.opacity="0")}}}}),ye.jsx("div",{style:{position:"absolute",zIndex:b?200:100,left:R.left,top:R.top,color:b?"#ff4444":"red",textAlign:"center",fontFamily:"sans-serif",fontSize:12,display:r||b?"flex":"none",flexDirection:"column",alignItems:"center",pointerEvents:"none",transform:R.transform},children:ye.jsx("div",{className:`error-message ${Yye}`,style:{opacity:b?1:0,border:`1px solid ${b?"#ff4444":"red"}`},children:l.message})})]},g)}if(y?.route&&(r||b)){const v=y.route.map(R=>Yt(e,{x:R.x,y:R.y}));if(v.some(R=>isNaN(R.x)||isNaN(R.y)))return null;const w=Math.floor(v.length/2),T=v[w],N=Gye(T,i);return ye.jsxs(Ee.Fragment,{children:[ye.jsx(i3n,{points:v,errorCenter:T,isHighlighted:b}),ye.jsx("div",{style:{position:"absolute",left:T.x-15,top:T.y-15,width:30,height:30,zIndex:Wm.errorOverlay+5,cursor:"pointer",borderRadius:"50%"},onMouseEnter:R=>{const P=R.currentTarget.nextElementSibling;if(P){const M=P.querySelector(".error-message");M&&(M.style.opacity="1")}},onMouseLeave:R=>{if(!b){const P=R.currentTarget.nextElementSibling;if(P){const M=P.querySelector(".error-message");M&&(M.style.opacity="0")}}}}),ye.jsx("div",{style:{position:"absolute",zIndex:b?Wm.errorOverlay+10:Wm.errorOverlay+1,left:N.left,top:N.top,color:b?"#ff4444":"red",textAlign:"center",fontFamily:"sans-serif",fontSize:12,display:"flex",flexDirection:"column",alignItems:"center",pointerEvents:"none",transform:N.transform},children:ye.jsx("div",{className:`error-message ${Yye}`,style:{opacity:b?1:0,border:`1px solid ${b?"#ff4444":"red"}`},children:l.message})})]},g)}return null}),a.map((l,u)=>{const d=l.component_name||l.message?.match(/name "([^"]+)"/)?.[1];if(!d)return null;const h=n?.filter(y=>y.type==="source_component"&&y.name===d||y.type==="pcb_component"&&n?.find(g=>g.type==="source_component"&&g.source_component_id===y.source_component_id&&g.name===d))||[],f=l.pcb_trace_error_id||`error_${u}_${l.error_type}_${l.message?.slice(0,20)}`,m=o===f;return!m&&!r?null:h.map((y,g)=>{let b={x:0,y:0};if(y.type==="pcb_component")b=y.center||{x:0,y:0};else if(y.type==="source_component"){const I=n?.find(A=>A.type==="pcb_component"&&A.source_component_id===y.source_component_id);I&&I.type==="pcb_component"&&(b=I.center||{x:0,y:0})}const v=Yt(e,b);if(isNaN(v.x)||isNaN(v.y))return null;const w=Math.abs(e.a),P=Math.max(8,Math.min(30,.5*w)),M=Gye(v,i);return ye.jsxs(Ee.Fragment,{children:[ye.jsx("svg",{style:{position:"absolute",left:0,top:0,pointerEvents:"none",mixBlendMode:"difference",zIndex:Wm.errorOverlay},width:"100%",height:"100%",children:m?ye.jsx("polygon",{points:`${v.x},${v.y-P*1.25} ${v.x+P},${v.y} ${v.x},${v.y+P*1.25} ${v.x-P},${v.y}`,fill:"#ff4444"}):ye.jsx("circle",{cx:v.x,cy:v.y,r:P,fill:"none",stroke:m?"#ff4444":"red",strokeWidth:m?Math.max(2,P*.15):Math.max(1,P*.1),opacity:1})}),ye.jsx("div",{style:{position:"absolute",left:v.x-(P+10),top:v.y-(P+10),width:(P+10)*2,height:(P+10)*2,zIndex:Wm.errorOverlay+5,cursor:"pointer",borderRadius:"50%"},onMouseEnter:I=>{const A=I.currentTarget.nextElementSibling;if(A){const $=A.querySelector(".error-message");$&&($.style.opacity="1")}},onMouseLeave:I=>{if(!m){const A=I.currentTarget.nextElementSibling;if(A){const $=A.querySelector(".error-message");$&&($.style.opacity="0")}}}}),ye.jsx("div",{style:{position:"absolute",zIndex:m?Wm.errorOverlay+20:Wm.errorOverlay+10,left:M.left,top:M.top,color:m?"#ff4444":"red",textAlign:"center",fontFamily:"sans-serif",fontSize:12,display:r||m?"flex":"none",flexDirection:"column",alignItems:"center",pointerEvents:"none",transform:M.transform},children:ye.jsx("div",{className:`error-message ${Yye}`,style:{opacity:m?1:0,border:`1px solid ${m?"#ff4444":"red"}`},children:l.message})})]},`${f}_${g}`)})})]})};function o3n({primitiveElement:t,elements:e}){let n=t.trace_length?`${t.trace_length.toFixed(3)}`:"";const i=dE(e).source_trace.get(t?.source_trace_id);if(i?.display_name&&(i?.max_length?n+=` / ${i.max_length}mm `:n+=" mm ",n+=`(${i.display_name})`),!n)return null;const r=t.trace_length&&i?.max_length&&t.trace_length>i.max_length;return{text:n,isOverLength:r}}function s3n(t){const{primitives:e,is_showing_multiple_traces_length:n,elements:i}=t,r=e.filter(c=>c._element.type==="pcb_trace"),o=i.filter(c=>c.type==="source_trace"),s=e.filter(c=>c._element.type!=="pcb_trace"),a=r.filter(c=>o.some(l=>c._element.type==="pcb_trace"&&c._element.source_trace_id===l.source_trace_id&&l.max_length!==void 0));if(!n)return[...s,...a];if(r.length>1){const c=r.reduce((l,u)=>{const d=l._element.trace_length;return u._element.trace_length<d?u:l},r[0]);return[...s,c]}return e}var a3n={position:"absolute",left:0,top:0,pointerEvents:"none",color:"red",fontFamily:"sans-serif",fontSize:12,textShadow:"0 0 2px black"},c3n=t=>{const{_element:e,_parent_pcb_component:n,_parent_source_component:i,_source_port:r}=t;switch(e.type){case"pcb_trace":return e.trace_length?`${e.trace_length.toFixed(3)}`:"";case"pcb_smtpad":case"pcb_plated_hole":{let o="";const s=Array.from(new Set((e.port_hints??[]).concat(r?.port_hints??[]))).filter(a=>!/^[0-9]+$/.test(a)).sort((a,c)=>c.localeCompare(a));return i&&"name"in i&&i.name&&(o+=`.${i.name}`,s.length>0&&(o+=" > ")),s.length>0&&(o+=s.map(a=>`.${a}`).join(", ")),o}default:return""}},l3n={top:"red",bottom:"aqua"},u3n=({primitive:t,mousePos:e,elements:n})=>{const[i,r]=Ee.useState(!1),o=t._element;Ee.useEffect(()=>{setTimeout(()=>{r(!0)},100)},[]);const[s,a,c,l]=[t.screen_x,t.screen_y,t.screen_w,t.screen_h],u=t.same_space_index??0,d=26,h=l3n[t?._element?.layer]??"red";let f=0;if(o.type==="pcb_smtpad"&&o?.shape==="rotated_rect"?f=o?.ccw_rotation??0:(o.type==="pcb_smtpad"&&(o?.shape==="pill"||o?.shape==="rotated_pill")&&"ccw_rotation"in t||o.type==="pcb_plated_hole"&&(o?.shape==="pill"||o?.shape==="oval")&&"ccw_rotation"in t)&&(f=o.ccw_rotation??0),o.type==="pcb_trace"){const y=o3n({primitiveElement:o,elements:n});if(!y)return null;const g=e.y-35;return ye.jsx("div",{style:{zIndex:Wm.elementOverlay,position:"absolute",left:e.x,top:g,color:h,pointerEvents:"none",transform:"translateX(-50%)"},children:ye.jsx("div",{style:{backgroundColor:"#f2efcc",color:y.isOverLength?"red":"black",textShadow:"none",WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale",padding:"6px 6px",borderRadius:"6px",fontSize:"14px",minWidth:"45px",textAlign:"center",whiteSpace:"nowrap"},children:y.text})})}return ye.jsx("div",{style:{zIndex:Wm.elementOverlay,position:"absolute",left:s-c/2-8,top:a-l/2-8,width:c+16,height:l+16,color:h,transform:`rotate(${-f}deg)`,transformOrigin:"center center"},children:ye.jsx("div",{style:{width:i?`calc(100% + ${d*2*u}px)`:"100%",height:i?`calc(100% + ${d*2*u}px)`:"100%",marginLeft:i?`${-d*u}px`:0,marginTop:i?`${-d*u}px`:0,border:`1px solid ${h}`,opacity:i||u===0?1:0,transition:"width 0.2s, height 0.2s, margin-left 0.2s, margin-top 0.2s, opacity 0.2s"},children:ye.jsx("div",{style:{position:"absolute",bottom:l+20+d*u,marginRight:i?`${-d*u}px`:0,marginBottom:i?0:-d*u,transition:"margin-right 0.2s, margin-bottom 0.2s",backgroundColor:"#f2efcc",color:"black",textShadow:"none",WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale",padding:"6px 6px",borderRadius:"6px",fontSize:"14px",transform:`rotate(${f}deg)`,minWidth:"45px",textAlign:"center"},children:c3n(t)})})})},d3n=({highlightedPrimitives:t,mousePos:e,elements:n})=>{const[i,r]=yv(a=>[a.is_moving_component,a.is_showing_multiple_traces_length]),o=t.some(a=>a._element.type==="pcb_smtpad")&&t.some(a=>a._element.type==="pcb_trace");let s=t;return o&&(s=s.filter(a=>a._element.type==="pcb_smtpad")),s=s3n({primitives:s,is_showing_multiple_traces_length:r,elements:n}),ye.jsx("div",{style:a3n,children:!i&&s.map((a,c)=>ye.jsx(u3n,{primitive:a,mousePos:e,elements:n},c))})};function h3n(t,e){return t.size!==e.size?!1:Array.from(t).every(n=>e.has(n))}function p3n(t,e,n){const i=(n.x-e.x)**2+(n.y-e.y)**2;if(i===0)return Lnt(t,e);let r=((t.x-e.x)*(n.x-e.x)+(t.y-e.y)*(n.y-e.y))/i;r=Math.max(0,Math.min(1,r));const o={x:e.x+r*(n.x-e.x),y:e.y+r*(n.y-e.y)};return Lnt(t,o)}function Lnt(t,e){const n=t.x-e.x,i=t.y-e.y;return Math.sqrt(n*n+i*i)}var f3n=(t,e,n)=>{const i=[];for(const r of t){if(!r._element)continue;if("x1"in r&&r._element?.type==="pcb_trace"){const a=p3n({x:e.x,y:e.y},{x:r.x1,y:r.y1},{x:r.x2,y:r.y2}),c=r.width||.5,l=Math.max(c*25,2)/n.a;a<l&&i.push(r);continue}if(!("x"in r&&"y"in r))continue;let o=0,s=0;if("w"in r&&"h"in r)o=r.w,s=r.h;else if("r"in r)o=r.r*2,s=r.r*2;else continue;Math.abs(r.x-e.x)<o/2&&Math.abs(r.y-e.y)<s/2&&i.push(r)}return i},m3n=({elements:t,children:e,transform:n,primitives:i,onMouseHoverOverPrimitives:r})=>{const[o,s]=Ee.useState([]),[a,c]=Ee.useState({x:0,y:0}),l=Ee.useMemo(()=>{const d=[];for(const h of o){if(h._element?.type==="pcb_via"||h._element?.type==="pcb_component"||h?.layer==="drill")continue;const f=Yt(n,h),m="w"in h?h.w:"r"in h?h.r*2:0,y="h"in h?h.h:"r"in h?h.r*2:0,g={w:m*n.a,h:y*n.a},b=d.filter(v=>f.x===v.screen_x&&f.y===v.screen_y&&g.w===v.screen_w&&g.h===v.screen_h).length;d.push({...h,screen_x:f.x,screen_y:f.y,screen_w:g.w,screen_h:g.h,same_space_index:b})}return d},[o,n]),u=(d,h,f,m)=>{c({x:d,y:h});const y=Yt(n5(f),{x:d,y:h}),g=f3n(m,y,f);h3n(new Set(g.map(b=>b._pcb_drawing_object_id)),new Set(o.map(b=>b._pcb_drawing_object_id)))||(s(g),r(g))};return ye.jsxs("div",{style:{position:"relative"},onMouseMove:d=>{if(n){const h=d.currentTarget.getBoundingClientRect(),f=d.clientX-h.left,m=d.clientY-h.top;u(f,m,n,i)}},onTouchStart:d=>{if(n){const h=d.touches[0],f=d.currentTarget.getBoundingClientRect(),m=h.clientX-f.left,y=h.clientY-f.top;u(m,y,n,i)}},children:[e,ye.jsx(d3n,{elements:t,mousePos:a,highlightedPrimitives:l})]})},Dnt=["rgb(255, 100, 100)","rgb(100, 255, 100)","rgb(100, 100, 255)","rgb(255, 255, 100)","rgb(255, 100, 255)","rgb(100, 255, 255)","rgb(255, 150, 100)","rgb(150, 100, 255)","rgb(100, 255, 150)","rgb(255, 100, 150)"],_3n=({children:t,transform:e=h0(),elements:n=[]})=>{const[i,{width:r,height:o}]=eV(),s=Ee.useRef(null),a=yv(c=>c.is_showing_pcb_groups);return Ee.useEffect(()=>{const c=s.current;if(!c||!r||!o)return;c.width=r,c.height=o;const l=c.getContext("2d");if(!l||(l.clearRect(0,0,r,o),!a))return;const u=n.filter(g=>g.type==="pcb_group"),d=n.filter(g=>g.type==="pcb_component"),h=n.filter(g=>g.type==="source_group"),f=new Map;h.forEach(g=>{const b=g;if(b.parent_source_group_id){const v=f.get(b.parent_source_group_id)||[];v.push(g.source_group_id),f.set(b.parent_source_group_id,v)}});const m=g=>{const b=[],v=f.get(g)||[];for(const w of v)b.push(w),b.push(...m(w));return b},y=g=>{const b=h.find(v=>v.source_group_id===g);return b?.parent_source_group_id?1+y(b.parent_source_group_id):0};u.forEach((g,b)=>{let v=d.filter(Je=>Je.pcb_group_id===g.pcb_group_id);if(g.source_group_id){const Je=m(g.source_group_id),st=u.filter(Se=>Se.source_group_id&&Je.includes(Se.source_group_id));for(const Se of st){const ut=d.filter(Ke=>Ke.pcb_group_id===Se.pcb_group_id);v=[...v,...ut]}}if(v.length===0)return;let w=1/0,T=1/0,N=-1/0,R=-1/0;if(v.forEach(Je=>{if(Je.center&&typeof Je.width=="number"&&typeof Je.height=="number"){const st=Je.center.x-Je.width/2,Se=Je.center.x+Je.width/2,ut=Je.center.y+Je.height/2,Ke=Je.center.y-Je.height/2;w=Math.min(w,st),N=Math.max(N,Se),T=Math.min(T,Ke),R=Math.max(R,ut)}}),w===1/0||N===-1/0)return;const P=g.source_group_id?y(g.source_group_id):0,M=g.source_group_id?m(g.source_group_id).length>0:!1,$=1+(M?.5:0);w-=$,N+=$,T-=$,R+=$;const k=Yt(e,{x:w,y:R}),V=Yt(e,{x:N,y:R}),X=Yt(e,{x:w,y:T}),W=Yt(e,{x:N,y:T}),K=Dnt[b%Dnt.length];l.strokeStyle=K,l.lineWidth=2;const te=Math.max(4,Math.min(12,8*Math.abs(e.a))),se=Math.max(2,Math.min(6,4*Math.abs(e.a))),be=te*(M?1.3:1),re=se;l.setLineDash([be,re]),l.beginPath(),l.moveTo(k.x,k.y),l.lineTo(V.x,V.y),l.lineTo(W.x,W.y),l.lineTo(X.x,X.y),l.closePath(),l.stroke();const ue=Math.max(8,Math.min(12,10*Math.abs(e.a))),he=P==0||P==1?0:P*.11,Me=ue*(1-he),Ie=4,De=g.name||`Group ${b+1}`;l.font=`${Me}px sans-serif`,l.setLineDash([]);const ke=l.measureText(De).width+Ie*2,ce=Me+Ie*2,we=k.x-5,xe=k.y-5,Ye=3;l.fillStyle="rgba(0, 0, 0, 0.8)",l.beginPath(),l.roundRect(we,xe-ce,ke,ce,Ye),l.fill(),l.fillStyle=K,l.textAlign="left",l.textBaseline="middle",l.fillText(De,we+Ie,xe-ce/2)})},[n,e,r,o,a]),ye.jsxs("div",{ref:i,style:{position:"relative",width:"100%",height:"100%"},children:[t,ye.jsx("canvas",{ref:s,style:{position:"absolute",top:0,left:0,pointerEvents:"none",zIndex:Wm.pcbGroupOverlay,display:a?"block":"none"}})]})},y3n=({transform:t,soup:e,children:n})=>{const i=yv(a=>a.is_showing_rats_nest),{netMap:r,idToNetMap:o}=Ee.useMemo(()=>Rnt(e||[]),[e]),s=Ee.useMemo(()=>{if(!e||!i)return[];const a=h=>{const f=dE(e)[h.replace(/_\d+$/,"")].get(h);return f&&"x"in f&&"y"in f?{x:f.x,y:f.y}:null},c=(h,f)=>{const m=r[f]||[];let y=null,g=1/0;return m.forEach(b=>{const v=a(b);if(v){const w=Math.sqrt((h.x-v.x)**2+(h.y-v.y)**2);w<g&&w>0&&(g=w,y=v)}}),y},l=dE(e).pcb_port.list(),u=dE(e).source_trace.list(),d=[];return l.forEach((h,f)=>{const m=o[h.pcb_port_id];let y=!1;for(const v of u)v.connected_source_port_ids.includes(h.source_port_id)&&v.connected_source_net_ids.length>0&&(y=!0);if(!m)return;const g={x:h.x,y:h.y},b=c(g,m);b&&d.push({key:`${h.pcb_port_id}-${f}`,startPoint:g,endPoint:b,isInNet:y})}),d},[e,r,o,i]);return!e||!i?n:(t||(t=h0()),ye.jsxs("div",{style:{position:"relative"},children:[n,ye.jsx("svg",{style:{position:"absolute",left:0,top:0,width:"100%",height:"100%",pointerEvents:"none",opacity:.5,zIndex:Wm.ratsNestOverlay},children:s.map(({key:a,startPoint:c,endPoint:l,isInNet:u})=>{const d=Yt(t,c),h=Yt(t,l);return ye.jsx("line",{x1:d.x,y1:d.y,x2:h.x,y2:h.y,stroke:"white",strokeWidth:"1",strokeDasharray:u?"6,6":void 0},a)})})]}))},g3n={version:"1.11.224"},pE=(t,e)=>{const n=yv(i=>i.is_mouse_over_container);Ee.useEffect(()=>{if(!t||typeof e!="function")return;const i=r=>{const o=t.split("+"),s=o.includes("ctrl"),a=o.includes("shift"),c=o.includes("alt"),l=o.includes("meta"),u=o[o.length-1];n&&(!s||r.ctrlKey)&&(!a||r.shiftKey)&&(!c||r.altKey)&&(!l||r.metaKey)&&r.key.toLowerCase()===u.toLowerCase()&&(r.preventDefault(),e())};return window.addEventListener("keydown",i),()=>{window.removeEventListener("keydown",i)}},[t,e])},b3n=()=>{const[t,e]=Ee.useState(!1);return Ee.useEffect(()=>{const n=()=>{e(window.innerWidth<=768)};return n(),window.addEventListener("resize",n),()=>window.removeEventListener("resize",n)},[]),t},x3n=({name:t,selected:e,onClick:n})=>ye.jsxs("div",{className:kN`
|
|
5506
5506
|
margin-top: 2px;
|
|
5507
5507
|
padding: 4px;
|
|
5508
5508
|
padding-left: 8px;
|
package/dist/standalone.min.js
CHANGED
|
@@ -5536,7 +5536,7 @@ $1`).replace(/>(\s*)(?=<!--\s*\/)/g,"> ")}}}),Gye={};jwn(Gye,{all_layers:()=>wge
|
|
|
5536
5536
|
transition: opacity 0.2s;
|
|
5537
5537
|
margin-bottom: 10px;
|
|
5538
5538
|
color: red;
|
|
5539
|
-
`,G4n=({children:n,transform:e=p0(),elements:t})=>{const i=be.useRef(null),{isShowingDRCErrors:r,hoveredErrorId:o}=xv(l=>({isShowingDRCErrors:l.is_showing_drc_errors,hoveredErrorId:l.hovered_error_id}));if(!t)return he.jsx("div",{style:{position:"relative"},ref:i,children:n});const s=t.filter(l=>l.type==="pcb_trace_error"),a=t.filter(l=>l.type==="pcb_trace_error"&&l.message?.includes("Multiple components found with name")),c=new Map;return t.forEach(l=>{l.type==="pcb_port"&&c.set(l.pcb_port_id,l)}),he.jsxs("div",{style:{position:"relative"},ref:i,children:[n,s.map((l,u)=>{const{pcb_port_ids:d,pcb_trace_id:h}=l,f=d?.[0]?c.get(d[0]):void 0,m=d?.[1]?c.get(d[1]):void 0,y=t?_E(t).pcb_trace.get(h):void 0,g=l.pcb_trace_error_id||`error_${u}_${l.error_type}_${l.message?.slice(0,20)}`,b=o===g;if(f&&m){const v=Yt(e,{x:f.x,y:f.y}),w=Yt(e,{x:m.x,y:m.y}),T=!(isNaN(v.x)||isNaN(v.y)||isNaN(w.x)||isNaN(w.y)),N={x:(v.x+w.x)/2,y:(v.y+w.y)/2};if(isNaN(N.x)||isNaN(N.y))return null;const R=Pge(N,i);return he.jsxs(be.Fragment,{children:[he.jsx(H4n,{screenPort1:v,screenPort2:w,errorCenter:N,canLineBeDrawn:T,isHighlighted:b}),he.jsx("div",{style:{position:"absolute",left:N.x-15,top:N.y-15,width:30,height:30,zIndex:Km.errorOverlay+5,cursor:"pointer",borderRadius:"50%"},onMouseEnter:P=>{const M=P.currentTarget.nextElementSibling;if(M){const I=M.querySelector(".error-message");I&&(I.style.opacity="1")}},onMouseLeave:P=>{if(!b){const M=P.currentTarget.nextElementSibling;if(M){const I=M.querySelector(".error-message");I&&(I.style.opacity="0")}}}}),he.jsx("div",{style:{position:"absolute",zIndex:b?200:100,left:R.left,top:R.top,color:b?"#ff4444":"red",textAlign:"center",fontFamily:"sans-serif",fontSize:12,display:r||b?"flex":"none",flexDirection:"column",alignItems:"center",pointerEvents:"none",transform:R.transform},children:he.jsx("div",{className:`error-message ${Ige}`,style:{opacity:b?1:0,border:`1px solid ${b?"#ff4444":"red"}`},children:l.message})})]},g)}if(y?.route&&(r||b)){const v=y.route.map(R=>Yt(e,{x:R.x,y:R.y}));if(v.some(R=>isNaN(R.x)||isNaN(R.y)))return null;const w=Math.floor(v.length/2),T=v[w],N=Pge(T,i);return he.jsxs(be.Fragment,{children:[he.jsx(V4n,{points:v,errorCenter:T,isHighlighted:b}),he.jsx("div",{style:{position:"absolute",left:T.x-15,top:T.y-15,width:30,height:30,zIndex:Km.errorOverlay+5,cursor:"pointer",borderRadius:"50%"},onMouseEnter:R=>{const P=R.currentTarget.nextElementSibling;if(P){const M=P.querySelector(".error-message");M&&(M.style.opacity="1")}},onMouseLeave:R=>{if(!b){const P=R.currentTarget.nextElementSibling;if(P){const M=P.querySelector(".error-message");M&&(M.style.opacity="0")}}}}),he.jsx("div",{style:{position:"absolute",zIndex:b?Km.errorOverlay+10:Km.errorOverlay+1,left:N.left,top:N.top,color:b?"#ff4444":"red",textAlign:"center",fontFamily:"sans-serif",fontSize:12,display:"flex",flexDirection:"column",alignItems:"center",pointerEvents:"none",transform:N.transform},children:he.jsx("div",{className:`error-message ${Ige}`,style:{opacity:b?1:0,border:`1px solid ${b?"#ff4444":"red"}`},children:l.message})})]},g)}return null}),a.map((l,u)=>{const d=l.component_name||l.message?.match(/name "([^"]+)"/)?.[1];if(!d)return null;const h=t?.filter(y=>y.type==="source_component"&&y.name===d||y.type==="pcb_component"&&t?.find(g=>g.type==="source_component"&&g.source_component_id===y.source_component_id&&g.name===d))||[],f=l.pcb_trace_error_id||`error_${u}_${l.error_type}_${l.message?.slice(0,20)}`,m=o===f;return!m&&!r?null:h.map((y,g)=>{let b={x:0,y:0};if(y.type==="pcb_component")b=y.center||{x:0,y:0};else if(y.type==="source_component"){const I=t?.find(A=>A.type==="pcb_component"&&A.source_component_id===y.source_component_id);I&&I.type==="pcb_component"&&(b=I.center||{x:0,y:0})}const v=Yt(e,b);if(isNaN(v.x)||isNaN(v.y))return null;const w=Math.abs(e.a),P=Math.max(8,Math.min(30,.5*w)),M=Pge(v,i);return he.jsxs(be.Fragment,{children:[he.jsx("svg",{style:{position:"absolute",left:0,top:0,pointerEvents:"none",mixBlendMode:"difference",zIndex:Km.errorOverlay},width:"100%",height:"100%",children:m?he.jsx("polygon",{points:`${v.x},${v.y-P*1.25} ${v.x+P},${v.y} ${v.x},${v.y+P*1.25} ${v.x-P},${v.y}`,fill:"#ff4444"}):he.jsx("circle",{cx:v.x,cy:v.y,r:P,fill:"none",stroke:m?"#ff4444":"red",strokeWidth:m?Math.max(2,P*.15):Math.max(1,P*.1),opacity:1})}),he.jsx("div",{style:{position:"absolute",left:v.x-(P+10),top:v.y-(P+10),width:(P+10)*2,height:(P+10)*2,zIndex:Km.errorOverlay+5,cursor:"pointer",borderRadius:"50%"},onMouseEnter:I=>{const A=I.currentTarget.nextElementSibling;if(A){const U=A.querySelector(".error-message");U&&(U.style.opacity="1")}},onMouseLeave:I=>{if(!m){const A=I.currentTarget.nextElementSibling;if(A){const U=A.querySelector(".error-message");U&&(U.style.opacity="0")}}}}),he.jsx("div",{style:{position:"absolute",zIndex:m?Km.errorOverlay+20:Km.errorOverlay+10,left:M.left,top:M.top,color:m?"#ff4444":"red",textAlign:"center",fontFamily:"sans-serif",fontSize:12,display:r||m?"flex":"none",flexDirection:"column",alignItems:"center",pointerEvents:"none",transform:M.transform},children:he.jsx("div",{className:`error-message ${Ige}`,style:{opacity:m?1:0,border:`1px solid ${m?"#ff4444":"red"}`},children:l.message})})]},`${f}_${g}`)})})]})};function Y4n({primitiveElement:n,elements:e}){let t=n.trace_length?`${n.trace_length.toFixed(3)}`:"";const i=_E(e).source_trace.get(n?.source_trace_id);if(i?.display_name&&(i?.max_length?t+=` / ${i.max_length}mm `:t+=" mm ",t+=`(${i.display_name})`),!t)return null;const r=n.trace_length&&i?.max_length&&n.trace_length>i.max_length;return{text:t,isOverLength:r}}function q4n(n){const{primitives:e,is_showing_multiple_traces_length:t,elements:i}=n,r=e.filter(c=>c._element.type==="pcb_trace"),o=i.filter(c=>c.type==="source_trace"),s=e.filter(c=>c._element.type!=="pcb_trace"),a=r.filter(c=>o.some(l=>c._element.type==="pcb_trace"&&c._element.source_trace_id===l.source_trace_id&&l.max_length!==void 0));if(!t)return[...s,...a];if(r.length>1){const c=r.reduce((l,u)=>{const d=l._element.trace_length;return u._element.trace_length<d?u:l},r[0]);return[...s,c]}return e}var X4n={position:"absolute",left:0,top:0,pointerEvents:"none",color:"red",fontFamily:"sans-serif",fontSize:12,textShadow:"0 0 2px black"},W4n=n=>{const{_element:e,_parent_pcb_component:t,_parent_source_component:i,_source_port:r}=n;switch(e.type){case"pcb_trace":return e.trace_length?`${e.trace_length.toFixed(3)}`:"";case"pcb_smtpad":case"pcb_plated_hole":{let o="";const s=Array.from(new Set((e.port_hints??[]).concat(r?.port_hints??[]))).filter(a=>!/^[0-9]+$/.test(a)).sort((a,c)=>c.localeCompare(a));return i&&"name"in i&&i.name&&(o+=`.${i.name}`,s.length>0&&(o+=" > ")),s.length>0&&(o+=s.map(a=>`.${a}`).join(", ")),o}default:return""}},Z4n={top:"red",bottom:"aqua"},K4n=({primitive:n,mousePos:e,elements:t})=>{const[i,r]=be.useState(!1),o=n._element;be.useEffect(()=>{setTimeout(()=>{r(!0)},100)},[]);const[s,a,c,l]=[n.screen_x,n.screen_y,n.screen_w,n.screen_h],u=n.same_space_index??0,d=26,h=Z4n[n?._element?.layer]??"red";let f=0;if(o.type==="pcb_smtpad"&&o?.shape==="rotated_rect"?f=o?.ccw_rotation??0:(o.type==="pcb_smtpad"&&(o?.shape==="pill"||o?.shape==="rotated_pill")&&"ccw_rotation"in n||o.type==="pcb_plated_hole"&&(o?.shape==="pill"||o?.shape==="oval")&&"ccw_rotation"in n)&&(f=o.ccw_rotation??0),o.type==="pcb_trace"){const y=Y4n({primitiveElement:o,elements:t});if(!y)return null;const g=e.y-35;return he.jsx("div",{style:{zIndex:Km.elementOverlay,position:"absolute",left:e.x,top:g,color:h,pointerEvents:"none",transform:"translateX(-50%)"},children:he.jsx("div",{style:{backgroundColor:"#f2efcc",color:y.isOverLength?"red":"black",textShadow:"none",WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale",padding:"6px 6px",borderRadius:"6px",fontSize:"14px",minWidth:"45px",textAlign:"center",whiteSpace:"nowrap"},children:y.text})})}return he.jsx("div",{style:{zIndex:Km.elementOverlay,position:"absolute",left:s-c/2-8,top:a-l/2-8,width:c+16,height:l+16,color:h,transform:`rotate(${-f}deg)`,transformOrigin:"center center"},children:he.jsx("div",{style:{width:i?`calc(100% + ${d*2*u}px)`:"100%",height:i?`calc(100% + ${d*2*u}px)`:"100%",marginLeft:i?`${-d*u}px`:0,marginTop:i?`${-d*u}px`:0,border:`1px solid ${h}`,opacity:i||u===0?1:0,transition:"width 0.2s, height 0.2s, margin-left 0.2s, margin-top 0.2s, opacity 0.2s"},children:he.jsx("div",{style:{position:"absolute",bottom:l+20+d*u,marginRight:i?`${-d*u}px`:0,marginBottom:i?0:-d*u,transition:"margin-right 0.2s, margin-bottom 0.2s",backgroundColor:"#f2efcc",color:"black",textShadow:"none",WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale",padding:"6px 6px",borderRadius:"6px",fontSize:"14px",transform:`rotate(${f}deg)`,minWidth:"45px",textAlign:"center"},children:W4n(n)})})})},Q4n=({highlightedPrimitives:n,mousePos:e,elements:t})=>{const[i,r]=xv(a=>[a.is_moving_component,a.is_showing_multiple_traces_length]),o=n.some(a=>a._element.type==="pcb_smtpad")&&n.some(a=>a._element.type==="pcb_trace");let s=n;return o&&(s=s.filter(a=>a._element.type==="pcb_smtpad")),s=q4n({primitives:s,is_showing_multiple_traces_length:r,elements:t}),he.jsx("div",{style:X4n,children:!i&&s.map((a,c)=>he.jsx(K4n,{primitive:a,mousePos:e,elements:t},c))})};function J4n(n,e){return n.size!==e.size?!1:Array.from(n).every(t=>e.has(t))}function eEn(n,e,t){const i=(t.x-e.x)**2+(t.y-e.y)**2;if(i===0)return Cit(n,e);let r=((n.x-e.x)*(t.x-e.x)+(n.y-e.y)*(t.y-e.y))/i;r=Math.max(0,Math.min(1,r));const o={x:e.x+r*(t.x-e.x),y:e.y+r*(t.y-e.y)};return Cit(n,o)}function Cit(n,e){const t=n.x-e.x,i=n.y-e.y;return Math.sqrt(t*t+i*i)}var tEn=(n,e,t)=>{const i=[];for(const r of n){if(!r._element)continue;if("x1"in r&&r._element?.type==="pcb_trace"){const a=eEn({x:e.x,y:e.y},{x:r.x1,y:r.y1},{x:r.x2,y:r.y2}),c=r.width||.5,l=Math.max(c*25,2)/t.a;a<l&&i.push(r);continue}if(!("x"in r&&"y"in r))continue;let o=0,s=0;if("w"in r&&"h"in r)o=r.w,s=r.h;else if("r"in r)o=r.r*2,s=r.r*2;else continue;Math.abs(r.x-e.x)<o/2&&Math.abs(r.y-e.y)<s/2&&i.push(r)}return i},nEn=({elements:n,children:e,transform:t,primitives:i,onMouseHoverOverPrimitives:r})=>{const[o,s]=be.useState([]),[a,c]=be.useState({x:0,y:0}),l=be.useMemo(()=>{const d=[];for(const h of o){if(h._element?.type==="pcb_via"||h._element?.type==="pcb_component"||h?.layer==="drill")continue;const f=Yt(t,h),m="w"in h?h.w:"r"in h?h.r*2:0,y="h"in h?h.h:"r"in h?h.r*2:0,g={w:m*t.a,h:y*t.a},b=d.filter(v=>f.x===v.screen_x&&f.y===v.screen_y&&g.w===v.screen_w&&g.h===v.screen_h).length;d.push({...h,screen_x:f.x,screen_y:f.y,screen_w:g.w,screen_h:g.h,same_space_index:b})}return d},[o,t]),u=(d,h,f,m)=>{c({x:d,y:h});const y=Yt(a5(f),{x:d,y:h}),g=tEn(m,y,f);J4n(new Set(g.map(b=>b._pcb_drawing_object_id)),new Set(o.map(b=>b._pcb_drawing_object_id)))||(s(g),r(g))};return he.jsxs("div",{style:{position:"relative"},onMouseMove:d=>{if(t){const h=d.currentTarget.getBoundingClientRect(),f=d.clientX-h.left,m=d.clientY-h.top;u(f,m,t,i)}},onTouchStart:d=>{if(t){const h=d.touches[0],f=d.currentTarget.getBoundingClientRect(),m=h.clientX-f.left,y=h.clientY-f.top;u(m,y,t,i)}},children:[e,he.jsx(Q4n,{elements:n,mousePos:a,highlightedPrimitives:l})]})},Rit=["rgb(255, 100, 100)","rgb(100, 255, 100)","rgb(100, 100, 255)","rgb(255, 255, 100)","rgb(255, 100, 255)","rgb(100, 255, 255)","rgb(255, 150, 100)","rgb(150, 100, 255)","rgb(100, 255, 150)","rgb(255, 100, 150)"],iEn=({children:n,transform:e=p0(),elements:t=[]})=>{const[i,{width:r,height:o}]=AV(),s=be.useRef(null),a=xv(c=>c.is_showing_pcb_groups);return be.useEffect(()=>{const c=s.current;if(!c||!r||!o)return;c.width=r,c.height=o;const l=c.getContext("2d");if(!l||(l.clearRect(0,0,r,o),!a))return;const u=t.filter(g=>g.type==="pcb_group"),d=t.filter(g=>g.type==="pcb_component"),h=t.filter(g=>g.type==="source_group"),f=new Map;h.forEach(g=>{const b=g;if(b.parent_source_group_id){const v=f.get(b.parent_source_group_id)||[];v.push(g.source_group_id),f.set(b.parent_source_group_id,v)}});const m=g=>{const b=[],v=f.get(g)||[];for(const w of v)b.push(w),b.push(...m(w));return b},y=g=>{const b=h.find(v=>v.source_group_id===g);return b?.parent_source_group_id?1+y(b.parent_source_group_id):0};u.forEach((g,b)=>{let v=d.filter(Qe=>Qe.pcb_group_id===g.pcb_group_id);if(g.source_group_id){const Qe=m(g.source_group_id),ot=u.filter(Te=>Te.source_group_id&&Qe.includes(Te.source_group_id));for(const Te of ot){const ut=d.filter(Ke=>Ke.pcb_group_id===Te.pcb_group_id);v=[...v,...ut]}}if(v.length===0)return;let w=1/0,T=1/0,N=-1/0,R=-1/0;if(v.forEach(Qe=>{if(Qe.center&&typeof Qe.width=="number"&&typeof Qe.height=="number"){const ot=Qe.center.x-Qe.width/2,Te=Qe.center.x+Qe.width/2,ut=Qe.center.y+Qe.height/2,Ke=Qe.center.y-Qe.height/2;w=Math.min(w,ot),N=Math.max(N,Te),T=Math.min(T,Ke),R=Math.max(R,ut)}}),w===1/0||N===-1/0)return;const P=g.source_group_id?y(g.source_group_id):0,M=g.source_group_id?m(g.source_group_id).length>0:!1,U=1+(M?.5:0);w-=U,N+=U,T-=U,R+=U;const k=Yt(e,{x:w,y:R}),V=Yt(e,{x:N,y:R}),Y=Yt(e,{x:w,y:T}),W=Yt(e,{x:N,y:T}),K=Rit[b%Rit.length];l.strokeStyle=K,l.lineWidth=2;const ee=Math.max(4,Math.min(12,8*Math.abs(e.a))),ae=Math.max(2,Math.min(6,4*Math.abs(e.a))),ge=ee*(M?1.3:1),re=ae;l.setLineDash([ge,re]),l.beginPath(),l.moveTo(k.x,k.y),l.lineTo(V.x,V.y),l.lineTo(W.x,W.y),l.lineTo(Y.x,Y.y),l.closePath(),l.stroke();const oe=Math.max(8,Math.min(12,10*Math.abs(e.a))),pe=P==0||P==1?0:P*.11,Ee=oe*(1-pe),Re=4,Oe=g.name||`Group ${b+1}`;l.font=`${Ee}px sans-serif`,l.setLineDash([]);const Ne=l.measureText(Oe).width+Re*2,le=Ee+Re*2,Se=k.x-5,xe=k.y-5,Ye=3;l.fillStyle="rgba(0, 0, 0, 0.8)",l.beginPath(),l.roundRect(Se,xe-le,Ne,le,Ye),l.fill(),l.fillStyle=K,l.textAlign="left",l.textBaseline="middle",l.fillText(Oe,Se+Re,xe-le/2)})},[t,e,r,o,a]),he.jsxs("div",{ref:i,style:{position:"relative",width:"100%",height:"100%"},children:[n,he.jsx("canvas",{ref:s,style:{position:"absolute",top:0,left:0,pointerEvents:"none",zIndex:Km.pcbGroupOverlay,display:a?"block":"none"}})]})},rEn=({transform:n,soup:e,children:t})=>{const i=xv(a=>a.is_showing_rats_nest),{netMap:r,idToNetMap:o}=be.useMemo(()=>wit(e||[]),[e]),s=be.useMemo(()=>{if(!e||!i)return[];const a=h=>{const f=_E(e)[h.replace(/_\d+$/,"")].get(h);return f&&"x"in f&&"y"in f?{x:f.x,y:f.y}:null},c=(h,f)=>{const m=r[f]||[];let y=null,g=1/0;return m.forEach(b=>{const v=a(b);if(v){const w=Math.sqrt((h.x-v.x)**2+(h.y-v.y)**2);w<g&&w>0&&(g=w,y=v)}}),y},l=_E(e).pcb_port.list(),u=_E(e).source_trace.list(),d=[];return l.forEach((h,f)=>{const m=o[h.pcb_port_id];let y=!1;for(const v of u)v.connected_source_port_ids.includes(h.source_port_id)&&v.connected_source_net_ids.length>0&&(y=!0);if(!m)return;const g={x:h.x,y:h.y},b=c(g,m);b&&d.push({key:`${h.pcb_port_id}-${f}`,startPoint:g,endPoint:b,isInNet:y})}),d},[e,r,o,i]);return!e||!i?t:(n||(n=p0()),he.jsxs("div",{style:{position:"relative"},children:[t,he.jsx("svg",{style:{position:"absolute",left:0,top:0,width:"100%",height:"100%",pointerEvents:"none",opacity:.5,zIndex:Km.ratsNestOverlay},children:s.map(({key:a,startPoint:c,endPoint:l,isInNet:u})=>{const d=Yt(n,c),h=Yt(n,l);return he.jsx("line",{x1:d.x,y1:d.y,x2:h.x,y2:h.y,stroke:"white",strokeWidth:"1",strokeDasharray:u?"6,6":void 0},a)})})]}))},oEn={version:"1.11.223"},gE=(n,e)=>{const t=xv(i=>i.is_mouse_over_container);be.useEffect(()=>{if(!n||typeof e!="function")return;const i=r=>{const o=n.split("+"),s=o.includes("ctrl"),a=o.includes("shift"),c=o.includes("alt"),l=o.includes("meta"),u=o[o.length-1];t&&(!s||r.ctrlKey)&&(!a||r.shiftKey)&&(!c||r.altKey)&&(!l||r.metaKey)&&r.key.toLowerCase()===u.toLowerCase()&&(r.preventDefault(),e())};return window.addEventListener("keydown",i),()=>{window.removeEventListener("keydown",i)}},[n,e])},sEn=()=>{const[n,e]=be.useState(!1);return be.useEffect(()=>{const t=()=>{e(window.innerWidth<=768)};return t(),window.addEventListener("resize",t),()=>window.removeEventListener("resize",t)},[]),n},aEn=({name:n,selected:e,onClick:t})=>he.jsxs("div",{className:GN`
|
|
5539
|
+
`,G4n=({children:n,transform:e=p0(),elements:t})=>{const i=be.useRef(null),{isShowingDRCErrors:r,hoveredErrorId:o}=xv(l=>({isShowingDRCErrors:l.is_showing_drc_errors,hoveredErrorId:l.hovered_error_id}));if(!t)return he.jsx("div",{style:{position:"relative"},ref:i,children:n});const s=t.filter(l=>l.type==="pcb_trace_error"),a=t.filter(l=>l.type==="pcb_trace_error"&&l.message?.includes("Multiple components found with name")),c=new Map;return t.forEach(l=>{l.type==="pcb_port"&&c.set(l.pcb_port_id,l)}),he.jsxs("div",{style:{position:"relative"},ref:i,children:[n,s.map((l,u)=>{const{pcb_port_ids:d,pcb_trace_id:h}=l,f=d?.[0]?c.get(d[0]):void 0,m=d?.[1]?c.get(d[1]):void 0,y=t?_E(t).pcb_trace.get(h):void 0,g=l.pcb_trace_error_id||`error_${u}_${l.error_type}_${l.message?.slice(0,20)}`,b=o===g;if(f&&m){const v=Yt(e,{x:f.x,y:f.y}),w=Yt(e,{x:m.x,y:m.y}),T=!(isNaN(v.x)||isNaN(v.y)||isNaN(w.x)||isNaN(w.y)),N={x:(v.x+w.x)/2,y:(v.y+w.y)/2};if(isNaN(N.x)||isNaN(N.y))return null;const R=Pge(N,i);return he.jsxs(be.Fragment,{children:[he.jsx(H4n,{screenPort1:v,screenPort2:w,errorCenter:N,canLineBeDrawn:T,isHighlighted:b}),he.jsx("div",{style:{position:"absolute",left:N.x-15,top:N.y-15,width:30,height:30,zIndex:Km.errorOverlay+5,cursor:"pointer",borderRadius:"50%"},onMouseEnter:P=>{const M=P.currentTarget.nextElementSibling;if(M){const I=M.querySelector(".error-message");I&&(I.style.opacity="1")}},onMouseLeave:P=>{if(!b){const M=P.currentTarget.nextElementSibling;if(M){const I=M.querySelector(".error-message");I&&(I.style.opacity="0")}}}}),he.jsx("div",{style:{position:"absolute",zIndex:b?200:100,left:R.left,top:R.top,color:b?"#ff4444":"red",textAlign:"center",fontFamily:"sans-serif",fontSize:12,display:r||b?"flex":"none",flexDirection:"column",alignItems:"center",pointerEvents:"none",transform:R.transform},children:he.jsx("div",{className:`error-message ${Ige}`,style:{opacity:b?1:0,border:`1px solid ${b?"#ff4444":"red"}`},children:l.message})})]},g)}if(y?.route&&(r||b)){const v=y.route.map(R=>Yt(e,{x:R.x,y:R.y}));if(v.some(R=>isNaN(R.x)||isNaN(R.y)))return null;const w=Math.floor(v.length/2),T=v[w],N=Pge(T,i);return he.jsxs(be.Fragment,{children:[he.jsx(V4n,{points:v,errorCenter:T,isHighlighted:b}),he.jsx("div",{style:{position:"absolute",left:T.x-15,top:T.y-15,width:30,height:30,zIndex:Km.errorOverlay+5,cursor:"pointer",borderRadius:"50%"},onMouseEnter:R=>{const P=R.currentTarget.nextElementSibling;if(P){const M=P.querySelector(".error-message");M&&(M.style.opacity="1")}},onMouseLeave:R=>{if(!b){const P=R.currentTarget.nextElementSibling;if(P){const M=P.querySelector(".error-message");M&&(M.style.opacity="0")}}}}),he.jsx("div",{style:{position:"absolute",zIndex:b?Km.errorOverlay+10:Km.errorOverlay+1,left:N.left,top:N.top,color:b?"#ff4444":"red",textAlign:"center",fontFamily:"sans-serif",fontSize:12,display:"flex",flexDirection:"column",alignItems:"center",pointerEvents:"none",transform:N.transform},children:he.jsx("div",{className:`error-message ${Ige}`,style:{opacity:b?1:0,border:`1px solid ${b?"#ff4444":"red"}`},children:l.message})})]},g)}return null}),a.map((l,u)=>{const d=l.component_name||l.message?.match(/name "([^"]+)"/)?.[1];if(!d)return null;const h=t?.filter(y=>y.type==="source_component"&&y.name===d||y.type==="pcb_component"&&t?.find(g=>g.type==="source_component"&&g.source_component_id===y.source_component_id&&g.name===d))||[],f=l.pcb_trace_error_id||`error_${u}_${l.error_type}_${l.message?.slice(0,20)}`,m=o===f;return!m&&!r?null:h.map((y,g)=>{let b={x:0,y:0};if(y.type==="pcb_component")b=y.center||{x:0,y:0};else if(y.type==="source_component"){const I=t?.find(A=>A.type==="pcb_component"&&A.source_component_id===y.source_component_id);I&&I.type==="pcb_component"&&(b=I.center||{x:0,y:0})}const v=Yt(e,b);if(isNaN(v.x)||isNaN(v.y))return null;const w=Math.abs(e.a),P=Math.max(8,Math.min(30,.5*w)),M=Pge(v,i);return he.jsxs(be.Fragment,{children:[he.jsx("svg",{style:{position:"absolute",left:0,top:0,pointerEvents:"none",mixBlendMode:"difference",zIndex:Km.errorOverlay},width:"100%",height:"100%",children:m?he.jsx("polygon",{points:`${v.x},${v.y-P*1.25} ${v.x+P},${v.y} ${v.x},${v.y+P*1.25} ${v.x-P},${v.y}`,fill:"#ff4444"}):he.jsx("circle",{cx:v.x,cy:v.y,r:P,fill:"none",stroke:m?"#ff4444":"red",strokeWidth:m?Math.max(2,P*.15):Math.max(1,P*.1),opacity:1})}),he.jsx("div",{style:{position:"absolute",left:v.x-(P+10),top:v.y-(P+10),width:(P+10)*2,height:(P+10)*2,zIndex:Km.errorOverlay+5,cursor:"pointer",borderRadius:"50%"},onMouseEnter:I=>{const A=I.currentTarget.nextElementSibling;if(A){const U=A.querySelector(".error-message");U&&(U.style.opacity="1")}},onMouseLeave:I=>{if(!m){const A=I.currentTarget.nextElementSibling;if(A){const U=A.querySelector(".error-message");U&&(U.style.opacity="0")}}}}),he.jsx("div",{style:{position:"absolute",zIndex:m?Km.errorOverlay+20:Km.errorOverlay+10,left:M.left,top:M.top,color:m?"#ff4444":"red",textAlign:"center",fontFamily:"sans-serif",fontSize:12,display:r||m?"flex":"none",flexDirection:"column",alignItems:"center",pointerEvents:"none",transform:M.transform},children:he.jsx("div",{className:`error-message ${Ige}`,style:{opacity:m?1:0,border:`1px solid ${m?"#ff4444":"red"}`},children:l.message})})]},`${f}_${g}`)})})]})};function Y4n({primitiveElement:n,elements:e}){let t=n.trace_length?`${n.trace_length.toFixed(3)}`:"";const i=_E(e).source_trace.get(n?.source_trace_id);if(i?.display_name&&(i?.max_length?t+=` / ${i.max_length}mm `:t+=" mm ",t+=`(${i.display_name})`),!t)return null;const r=n.trace_length&&i?.max_length&&n.trace_length>i.max_length;return{text:t,isOverLength:r}}function q4n(n){const{primitives:e,is_showing_multiple_traces_length:t,elements:i}=n,r=e.filter(c=>c._element.type==="pcb_trace"),o=i.filter(c=>c.type==="source_trace"),s=e.filter(c=>c._element.type!=="pcb_trace"),a=r.filter(c=>o.some(l=>c._element.type==="pcb_trace"&&c._element.source_trace_id===l.source_trace_id&&l.max_length!==void 0));if(!t)return[...s,...a];if(r.length>1){const c=r.reduce((l,u)=>{const d=l._element.trace_length;return u._element.trace_length<d?u:l},r[0]);return[...s,c]}return e}var X4n={position:"absolute",left:0,top:0,pointerEvents:"none",color:"red",fontFamily:"sans-serif",fontSize:12,textShadow:"0 0 2px black"},W4n=n=>{const{_element:e,_parent_pcb_component:t,_parent_source_component:i,_source_port:r}=n;switch(e.type){case"pcb_trace":return e.trace_length?`${e.trace_length.toFixed(3)}`:"";case"pcb_smtpad":case"pcb_plated_hole":{let o="";const s=Array.from(new Set((e.port_hints??[]).concat(r?.port_hints??[]))).filter(a=>!/^[0-9]+$/.test(a)).sort((a,c)=>c.localeCompare(a));return i&&"name"in i&&i.name&&(o+=`.${i.name}`,s.length>0&&(o+=" > ")),s.length>0&&(o+=s.map(a=>`.${a}`).join(", ")),o}default:return""}},Z4n={top:"red",bottom:"aqua"},K4n=({primitive:n,mousePos:e,elements:t})=>{const[i,r]=be.useState(!1),o=n._element;be.useEffect(()=>{setTimeout(()=>{r(!0)},100)},[]);const[s,a,c,l]=[n.screen_x,n.screen_y,n.screen_w,n.screen_h],u=n.same_space_index??0,d=26,h=Z4n[n?._element?.layer]??"red";let f=0;if(o.type==="pcb_smtpad"&&o?.shape==="rotated_rect"?f=o?.ccw_rotation??0:(o.type==="pcb_smtpad"&&(o?.shape==="pill"||o?.shape==="rotated_pill")&&"ccw_rotation"in n||o.type==="pcb_plated_hole"&&(o?.shape==="pill"||o?.shape==="oval")&&"ccw_rotation"in n)&&(f=o.ccw_rotation??0),o.type==="pcb_trace"){const y=Y4n({primitiveElement:o,elements:t});if(!y)return null;const g=e.y-35;return he.jsx("div",{style:{zIndex:Km.elementOverlay,position:"absolute",left:e.x,top:g,color:h,pointerEvents:"none",transform:"translateX(-50%)"},children:he.jsx("div",{style:{backgroundColor:"#f2efcc",color:y.isOverLength?"red":"black",textShadow:"none",WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale",padding:"6px 6px",borderRadius:"6px",fontSize:"14px",minWidth:"45px",textAlign:"center",whiteSpace:"nowrap"},children:y.text})})}return he.jsx("div",{style:{zIndex:Km.elementOverlay,position:"absolute",left:s-c/2-8,top:a-l/2-8,width:c+16,height:l+16,color:h,transform:`rotate(${-f}deg)`,transformOrigin:"center center"},children:he.jsx("div",{style:{width:i?`calc(100% + ${d*2*u}px)`:"100%",height:i?`calc(100% + ${d*2*u}px)`:"100%",marginLeft:i?`${-d*u}px`:0,marginTop:i?`${-d*u}px`:0,border:`1px solid ${h}`,opacity:i||u===0?1:0,transition:"width 0.2s, height 0.2s, margin-left 0.2s, margin-top 0.2s, opacity 0.2s"},children:he.jsx("div",{style:{position:"absolute",bottom:l+20+d*u,marginRight:i?`${-d*u}px`:0,marginBottom:i?0:-d*u,transition:"margin-right 0.2s, margin-bottom 0.2s",backgroundColor:"#f2efcc",color:"black",textShadow:"none",WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale",padding:"6px 6px",borderRadius:"6px",fontSize:"14px",transform:`rotate(${f}deg)`,minWidth:"45px",textAlign:"center"},children:W4n(n)})})})},Q4n=({highlightedPrimitives:n,mousePos:e,elements:t})=>{const[i,r]=xv(a=>[a.is_moving_component,a.is_showing_multiple_traces_length]),o=n.some(a=>a._element.type==="pcb_smtpad")&&n.some(a=>a._element.type==="pcb_trace");let s=n;return o&&(s=s.filter(a=>a._element.type==="pcb_smtpad")),s=q4n({primitives:s,is_showing_multiple_traces_length:r,elements:t}),he.jsx("div",{style:X4n,children:!i&&s.map((a,c)=>he.jsx(K4n,{primitive:a,mousePos:e,elements:t},c))})};function J4n(n,e){return n.size!==e.size?!1:Array.from(n).every(t=>e.has(t))}function eEn(n,e,t){const i=(t.x-e.x)**2+(t.y-e.y)**2;if(i===0)return Cit(n,e);let r=((n.x-e.x)*(t.x-e.x)+(n.y-e.y)*(t.y-e.y))/i;r=Math.max(0,Math.min(1,r));const o={x:e.x+r*(t.x-e.x),y:e.y+r*(t.y-e.y)};return Cit(n,o)}function Cit(n,e){const t=n.x-e.x,i=n.y-e.y;return Math.sqrt(t*t+i*i)}var tEn=(n,e,t)=>{const i=[];for(const r of n){if(!r._element)continue;if("x1"in r&&r._element?.type==="pcb_trace"){const a=eEn({x:e.x,y:e.y},{x:r.x1,y:r.y1},{x:r.x2,y:r.y2}),c=r.width||.5,l=Math.max(c*25,2)/t.a;a<l&&i.push(r);continue}if(!("x"in r&&"y"in r))continue;let o=0,s=0;if("w"in r&&"h"in r)o=r.w,s=r.h;else if("r"in r)o=r.r*2,s=r.r*2;else continue;Math.abs(r.x-e.x)<o/2&&Math.abs(r.y-e.y)<s/2&&i.push(r)}return i},nEn=({elements:n,children:e,transform:t,primitives:i,onMouseHoverOverPrimitives:r})=>{const[o,s]=be.useState([]),[a,c]=be.useState({x:0,y:0}),l=be.useMemo(()=>{const d=[];for(const h of o){if(h._element?.type==="pcb_via"||h._element?.type==="pcb_component"||h?.layer==="drill")continue;const f=Yt(t,h),m="w"in h?h.w:"r"in h?h.r*2:0,y="h"in h?h.h:"r"in h?h.r*2:0,g={w:m*t.a,h:y*t.a},b=d.filter(v=>f.x===v.screen_x&&f.y===v.screen_y&&g.w===v.screen_w&&g.h===v.screen_h).length;d.push({...h,screen_x:f.x,screen_y:f.y,screen_w:g.w,screen_h:g.h,same_space_index:b})}return d},[o,t]),u=(d,h,f,m)=>{c({x:d,y:h});const y=Yt(a5(f),{x:d,y:h}),g=tEn(m,y,f);J4n(new Set(g.map(b=>b._pcb_drawing_object_id)),new Set(o.map(b=>b._pcb_drawing_object_id)))||(s(g),r(g))};return he.jsxs("div",{style:{position:"relative"},onMouseMove:d=>{if(t){const h=d.currentTarget.getBoundingClientRect(),f=d.clientX-h.left,m=d.clientY-h.top;u(f,m,t,i)}},onTouchStart:d=>{if(t){const h=d.touches[0],f=d.currentTarget.getBoundingClientRect(),m=h.clientX-f.left,y=h.clientY-f.top;u(m,y,t,i)}},children:[e,he.jsx(Q4n,{elements:n,mousePos:a,highlightedPrimitives:l})]})},Rit=["rgb(255, 100, 100)","rgb(100, 255, 100)","rgb(100, 100, 255)","rgb(255, 255, 100)","rgb(255, 100, 255)","rgb(100, 255, 255)","rgb(255, 150, 100)","rgb(150, 100, 255)","rgb(100, 255, 150)","rgb(255, 100, 150)"],iEn=({children:n,transform:e=p0(),elements:t=[]})=>{const[i,{width:r,height:o}]=AV(),s=be.useRef(null),a=xv(c=>c.is_showing_pcb_groups);return be.useEffect(()=>{const c=s.current;if(!c||!r||!o)return;c.width=r,c.height=o;const l=c.getContext("2d");if(!l||(l.clearRect(0,0,r,o),!a))return;const u=t.filter(g=>g.type==="pcb_group"),d=t.filter(g=>g.type==="pcb_component"),h=t.filter(g=>g.type==="source_group"),f=new Map;h.forEach(g=>{const b=g;if(b.parent_source_group_id){const v=f.get(b.parent_source_group_id)||[];v.push(g.source_group_id),f.set(b.parent_source_group_id,v)}});const m=g=>{const b=[],v=f.get(g)||[];for(const w of v)b.push(w),b.push(...m(w));return b},y=g=>{const b=h.find(v=>v.source_group_id===g);return b?.parent_source_group_id?1+y(b.parent_source_group_id):0};u.forEach((g,b)=>{let v=d.filter(Qe=>Qe.pcb_group_id===g.pcb_group_id);if(g.source_group_id){const Qe=m(g.source_group_id),ot=u.filter(Te=>Te.source_group_id&&Qe.includes(Te.source_group_id));for(const Te of ot){const ut=d.filter(Ke=>Ke.pcb_group_id===Te.pcb_group_id);v=[...v,...ut]}}if(v.length===0)return;let w=1/0,T=1/0,N=-1/0,R=-1/0;if(v.forEach(Qe=>{if(Qe.center&&typeof Qe.width=="number"&&typeof Qe.height=="number"){const ot=Qe.center.x-Qe.width/2,Te=Qe.center.x+Qe.width/2,ut=Qe.center.y+Qe.height/2,Ke=Qe.center.y-Qe.height/2;w=Math.min(w,ot),N=Math.max(N,Te),T=Math.min(T,Ke),R=Math.max(R,ut)}}),w===1/0||N===-1/0)return;const P=g.source_group_id?y(g.source_group_id):0,M=g.source_group_id?m(g.source_group_id).length>0:!1,U=1+(M?.5:0);w-=U,N+=U,T-=U,R+=U;const k=Yt(e,{x:w,y:R}),V=Yt(e,{x:N,y:R}),Y=Yt(e,{x:w,y:T}),W=Yt(e,{x:N,y:T}),K=Rit[b%Rit.length];l.strokeStyle=K,l.lineWidth=2;const ee=Math.max(4,Math.min(12,8*Math.abs(e.a))),ae=Math.max(2,Math.min(6,4*Math.abs(e.a))),ge=ee*(M?1.3:1),re=ae;l.setLineDash([ge,re]),l.beginPath(),l.moveTo(k.x,k.y),l.lineTo(V.x,V.y),l.lineTo(W.x,W.y),l.lineTo(Y.x,Y.y),l.closePath(),l.stroke();const oe=Math.max(8,Math.min(12,10*Math.abs(e.a))),pe=P==0||P==1?0:P*.11,Ee=oe*(1-pe),Re=4,Oe=g.name||`Group ${b+1}`;l.font=`${Ee}px sans-serif`,l.setLineDash([]);const Ne=l.measureText(Oe).width+Re*2,le=Ee+Re*2,Se=k.x-5,xe=k.y-5,Ye=3;l.fillStyle="rgba(0, 0, 0, 0.8)",l.beginPath(),l.roundRect(Se,xe-le,Ne,le,Ye),l.fill(),l.fillStyle=K,l.textAlign="left",l.textBaseline="middle",l.fillText(Oe,Se+Re,xe-le/2)})},[t,e,r,o,a]),he.jsxs("div",{ref:i,style:{position:"relative",width:"100%",height:"100%"},children:[n,he.jsx("canvas",{ref:s,style:{position:"absolute",top:0,left:0,pointerEvents:"none",zIndex:Km.pcbGroupOverlay,display:a?"block":"none"}})]})},rEn=({transform:n,soup:e,children:t})=>{const i=xv(a=>a.is_showing_rats_nest),{netMap:r,idToNetMap:o}=be.useMemo(()=>wit(e||[]),[e]),s=be.useMemo(()=>{if(!e||!i)return[];const a=h=>{const f=_E(e)[h.replace(/_\d+$/,"")].get(h);return f&&"x"in f&&"y"in f?{x:f.x,y:f.y}:null},c=(h,f)=>{const m=r[f]||[];let y=null,g=1/0;return m.forEach(b=>{const v=a(b);if(v){const w=Math.sqrt((h.x-v.x)**2+(h.y-v.y)**2);w<g&&w>0&&(g=w,y=v)}}),y},l=_E(e).pcb_port.list(),u=_E(e).source_trace.list(),d=[];return l.forEach((h,f)=>{const m=o[h.pcb_port_id];let y=!1;for(const v of u)v.connected_source_port_ids.includes(h.source_port_id)&&v.connected_source_net_ids.length>0&&(y=!0);if(!m)return;const g={x:h.x,y:h.y},b=c(g,m);b&&d.push({key:`${h.pcb_port_id}-${f}`,startPoint:g,endPoint:b,isInNet:y})}),d},[e,r,o,i]);return!e||!i?t:(n||(n=p0()),he.jsxs("div",{style:{position:"relative"},children:[t,he.jsx("svg",{style:{position:"absolute",left:0,top:0,width:"100%",height:"100%",pointerEvents:"none",opacity:.5,zIndex:Km.ratsNestOverlay},children:s.map(({key:a,startPoint:c,endPoint:l,isInNet:u})=>{const d=Yt(n,c),h=Yt(n,l);return he.jsx("line",{x1:d.x,y1:d.y,x2:h.x,y2:h.y,stroke:"white",strokeWidth:"1",strokeDasharray:u?"6,6":void 0},a)})})]}))},oEn={version:"1.11.224"},gE=(n,e)=>{const t=xv(i=>i.is_mouse_over_container);be.useEffect(()=>{if(!n||typeof e!="function")return;const i=r=>{const o=n.split("+"),s=o.includes("ctrl"),a=o.includes("shift"),c=o.includes("alt"),l=o.includes("meta"),u=o[o.length-1];t&&(!s||r.ctrlKey)&&(!a||r.shiftKey)&&(!c||r.altKey)&&(!l||r.metaKey)&&r.key.toLowerCase()===u.toLowerCase()&&(r.preventDefault(),e())};return window.addEventListener("keydown",i),()=>{window.removeEventListener("keydown",i)}},[n,e])},sEn=()=>{const[n,e]=be.useState(!1);return be.useEffect(()=>{const t=()=>{e(window.innerWidth<=768)};return t(),window.addEventListener("resize",t),()=>window.removeEventListener("resize",t)},[]),n},aEn=({name:n,selected:e,onClick:t})=>he.jsxs("div",{className:GN`
|
|
5540
5540
|
margin-top: 2px;
|
|
5541
5541
|
padding: 4px;
|
|
5542
5542
|
padding-left: 8px;
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@tscircuit/runframe",
|
|
3
3
|
"main": "dist/preview.js",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "0.0.
|
|
5
|
+
"version": "0.0.998",
|
|
6
6
|
"exports": {
|
|
7
7
|
".": "./dist/preview.js",
|
|
8
8
|
"./preview": "./dist/preview.js",
|
|
@@ -45,14 +45,14 @@
|
|
|
45
45
|
"@resvg/resvg-wasm": "^2.6.2",
|
|
46
46
|
"@tscircuit/3d-viewer": "^0.0.402",
|
|
47
47
|
"@tscircuit/assembly-viewer": "^0.0.5",
|
|
48
|
-
"@tscircuit/checks": "^0.0.
|
|
48
|
+
"@tscircuit/checks": "^0.0.77",
|
|
49
49
|
"@tscircuit/create-snippet-url": "^0.0.9",
|
|
50
50
|
"@tscircuit/eval": "^0.0.337",
|
|
51
51
|
"@tscircuit/fake-snippets": "^0.0.87",
|
|
52
52
|
"@tscircuit/file-server": "^0.0.31",
|
|
53
53
|
"@tscircuit/footprinter": "^0.0.236",
|
|
54
54
|
"@tscircuit/math-utils": "^0.0.25",
|
|
55
|
-
"@tscircuit/pcb-viewer": "1.11.
|
|
55
|
+
"@tscircuit/pcb-viewer": "1.11.225",
|
|
56
56
|
"@tscircuit/props": "^0.0.337",
|
|
57
57
|
"@tscircuit/schematic-trace-solver": "^0.0.38",
|
|
58
58
|
"@tscircuit/schematic-viewer": "2.0.44",
|