@tscircuit/runframe 0.0.2770 → 0.0.2772
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.
|
@@ -5487,7 +5487,7 @@ ${b.type}: ${k}
|
|
|
5487
5487
|
transition: opacity 0.2s;
|
|
5488
5488
|
margin-bottom: 10px;
|
|
5489
5489
|
color: red;
|
|
5490
|
-
`,bSi=({children:t,transform:e=H0(),elements:n})=>{const o=te.useRef(null),{isShowingDRCErrors:i,hoveredErrorId:r,focusedErrorId:s}=Dc(m=>({isShowingDRCErrors:m.is_showing_drc_errors,hoveredErrorId:m.hovered_error_id,focusedErrorId:m.focused_error_id})),a=s??r;if(!n)return z.jsx("div",{style:{position:"relative"},ref:o,children:t});const A=n.filter(m=>m.type==="pcb_trace_error"&&!m.message?.includes("Multiple components found with name")),c=n.filter(m=>m.type==="pcb_via_clearance_error"),l=n.filter(m=>m.type==="pcb_trace_error"&&m.message?.includes("Multiple components found with name")),g=Ran(n),u=Lan(n,a),h=m=>{const p=D7i({error:m,indexes:g});if(!p||typeof p.x!="number"||typeof p.y!="number")return null;const _=xt(e,p);return Number.isNaN(_.x)||Number.isNaN(_.y)?null:_};let d=null;return u&&(d=h(u)),z.jsxs("div",{style:{position:"relative"},ref:o,children:[t,A.map((m,p)=>{const _=hY(m,p),f=a===_;if(!f&&!i)return null;const I=h(m);if(!I)return null;const C=hze(I,o);return z.jsxs(te.Fragment,{children:[z.jsx(IAn,{errorCenter:I,isHighlighted:f}),z.jsx("div",{style:{position:"absolute",left:I.x-15,top:I.y-15,width:30,height:30,zIndex:xg.errorOverlay+5,cursor:"pointer",borderRadius:"50%"},onMouseEnter:y=>{const x=y.currentTarget.nextElementSibling;if(x){const E=x.querySelector(".error-message");E&&(E.style.opacity="1")}},onMouseLeave:y=>{if(!f){const x=y.currentTarget.nextElementSibling;if(x){const E=x.querySelector(".error-message");E&&(E.style.opacity="0")}}}}),z.jsx("div",{style:{position:"absolute",zIndex:f?200:100,left:C.left,top:C.top,color:f?"#ff4444":"red",textAlign:"center",fontFamily:"sans-serif",fontSize:12,display:i||f?"flex":"none",flexDirection:"column",alignItems:"center",pointerEvents:"none",transform:C.transform},children:z.jsx("div",{className:`error-message ${mze}`,style:{opacity:f?1:0,border:`1px solid ${f?"#ff4444":"red"}`},children:m.message})})]},_)}),c.map((m,p)=>{const _=hY(m,p),f=a===_;if(!f&&!i)return null;const I=h(m);if(!I)return null;const C=hze({x:I.x,y:I.y},o);return z.jsxs(te.Fragment,{children:[z.jsx(IAn,{errorCenter:I,isHighlighted:f}),z.jsx("div",{style:{position:"absolute",left:I.x-15,top:I.y-15,width:30,height:30,zIndex:xg.errorOverlay+5,cursor:"pointer",borderRadius:"50%"},onMouseEnter:y=>{const x=y.currentTarget.nextElementSibling;if(x){const E=x.querySelector(".error-message");E&&(E.style.opacity="1")}},onMouseLeave:y=>{if(!f){const x=y.currentTarget.nextElementSibling;if(x){const E=x.querySelector(".error-message");E&&(E.style.opacity="0")}}}}),z.jsx("div",{style:{position:"absolute",zIndex:f?xg.errorOverlay+10:xg.errorOverlay+1,left:C.left,top:C.top,color:f?"#ff4444":"red",textAlign:"center",fontFamily:"sans-serif",fontSize:12,display:"flex",flexDirection:"column",alignItems:"center",pointerEvents:"none",transform:C.transform},children:z.jsx("div",{className:`error-message ${mze}`,style:{opacity:f?1:0,border:`1px solid ${f?"#ff4444":"red"}`},children:m.message})})]},_)}),l.map((m,p)=>{const _=m.component_name||m.message?.match(/name "([^"]+)"/)?.[1];if(!_)return null;const f=n?.filter(y=>y.type==="source_component"&&y.name===_||y.type==="pcb_component"&&n?.find(x=>x.type==="source_component"&&x.source_component_id===y.source_component_id&&x.name===_))||[],I=hY(m,p),C=a===I;return!C&&!i?null:f.map((y,x)=>{let E={x:0,y:0};if(y.type==="pcb_component")E=y.center||{x:0,y:0};else if(y.type==="source_component"){const H=n?.find(G=>G.type==="pcb_component"&&G.source_component_id===y.source_component_id);H&&H.type==="pcb_component"&&(E=H.center||{x:0,y:0})}const B=xt(e,E);if(Number.isNaN(B.x)||Number.isNaN(B.y))return null;const b=Math.abs(e.a),k=Math.max(8,Math.min(30,.5*b)),T=hze(B,o);return z.jsxs(te.Fragment,{children:[z.jsx("svg",{style:{position:"absolute",left:0,top:0,pointerEvents:"none",mixBlendMode:"difference",zIndex:xg.errorOverlay},width:"100%",height:"100%",children:C?z.jsx("polygon",{points:`${B.x},${B.y-k*1.25} ${B.x+k},${B.y} ${B.x},${B.y+k*1.25} ${B.x-k},${B.y}`,fill:"#ff4444"}):z.jsx("circle",{cx:B.x,cy:B.y,r:k,fill:"none",stroke:C?"#ff4444":"red",strokeWidth:C?Math.max(2,k*.15):Math.max(1,k*.1),opacity:1})}),z.jsx("div",{style:{position:"absolute",left:B.x-(k+10),top:B.y-(k+10),width:(k+10)*2,height:(k+10)*2,zIndex:xg.errorOverlay+5,cursor:"pointer",borderRadius:"50%"},onMouseEnter:H=>{const G=H.currentTarget.nextElementSibling;if(G){const U=G.querySelector(".error-message");U&&(U.style.opacity="1")}},onMouseLeave:H=>{if(!C){const G=H.currentTarget.nextElementSibling;if(G){const U=G.querySelector(".error-message");U&&(U.style.opacity="0")}}}}),z.jsx("div",{style:{position:"absolute",zIndex:C?xg.errorOverlay+20:xg.errorOverlay+10,left:T.left,top:T.top,color:C?"#ff4444":"red",textAlign:"center",fontFamily:"sans-serif",fontSize:12,display:i||C?"flex":"none",flexDirection:"column",alignItems:"center",pointerEvents:"none",transform:T.transform},children:z.jsx("div",{className:`error-message ${mze}`,style:{opacity:C?1:0,border:`1px solid ${C?"#ff4444":"red"}`},children:m.message})})]},`${I}_${x}`)})}),d&&z.jsx(SSi,{center:d})]})};function QSi(t,e){return t.size!==e.size?!1:Array.from(t).every(n=>e.has(n))}var UP=t=>t?.type==="pcb_component",CAn=t=>t?.type==="pcb_group",vSi=t=>t?.type==="pcb_panel",pze=t=>t?.type==="pcb_board",Pu={MIN_LINE_LENGTH_FOR_LABEL:40,LABEL_OFFSET_ABOVE:2,LABEL_OFFSET_BELOW:-18,LABEL_OFFSET_RIGHT:8,LABEL_OFFSET_LEFT:-120,Y_LABEL_MIN_WIDTH:110,LINE_STROKE_WIDTH:1.5,LINE_DASH_PATTERN:"4,4",COMPONENT_MARKER_RADIUS:3,LABEL_FONT_SIZE:11,ANCHOR_MARKER_SIZE:6,ANCHOR_MARKER_STROKE_WIDTH:1.5},rE={OFFSET_LINE:"white",COMPONENT_MARKER_FILL:"#66ccff",COMPONENT_MARKER_STROKE:"white",LABEL_TEXT:"white"},_ze=({targets:t,transform:e,containerWidth:n,containerHeight:o})=>{if(t.length===0)return null;const i={color:rE.LABEL_TEXT,mixBlendMode:"difference",pointerEvents:"none",fontSize:Pu.LABEL_FONT_SIZE,fontFamily:"monospace",fontWeight:"bold"},r=new Map;return t.forEach(s=>{if(!r.has(s.anchor_id)){const a=xt(e,s.anchor);r.set(s.anchor_id,a)}}),z.jsx("div",{style:{position:"absolute",left:0,top:0,width:n,height:o,overflow:"hidden",pointerEvents:"none",zIndex:xg.dimensionOverlay},children:z.jsxs("svg",{style:{position:"absolute",left:0,top:0,pointerEvents:"none"},width:n,height:o,children:[t.map(s=>{const a=s.anchor,A=s.anchor_id,c=s.target,l=r.get(A),g=xt(e,c),u=c.x-a.x,h=c.y-a.y,d=Math.abs(g.x-l.x),m=Math.abs(g.y-l.y),p=g.y<l.y,_=g.x>l.x,f=p?Pu.LABEL_OFFSET_ABOVE:Pu.LABEL_OFFSET_BELOW,I=_?Pu.LABEL_OFFSET_RIGHT:Pu.LABEL_OFFSET_LEFT,C=d>Pu.MIN_LINE_LENGTH_FOR_LABEL,y=m>Pu.MIN_LINE_LENGTH_FOR_LABEL,x=`${s.display_offset_x??u.toFixed(2)}mm`,E=`${s.display_offset_y??h.toFixed(2)}mm`;return z.jsxs("g",{children:[z.jsx("line",{x1:l.x,y1:l.y,x2:g.x,y2:l.y,stroke:rE.OFFSET_LINE,strokeWidth:Pu.LINE_STROKE_WIDTH,strokeDasharray:Pu.LINE_DASH_PATTERN}),z.jsx("line",{x1:g.x,y1:l.y,x2:g.x,y2:g.y,stroke:rE.OFFSET_LINE,strokeWidth:Pu.LINE_STROKE_WIDTH,strokeDasharray:Pu.LINE_DASH_PATTERN}),s.type==="component"||s.type==="board"?z.jsx("circle",{cx:g.x,cy:g.y,r:Pu.COMPONENT_MARKER_RADIUS,fill:rE.COMPONENT_MARKER_FILL,stroke:rE.COMPONENT_MARKER_STROKE,strokeWidth:1}):z.jsxs(z.Fragment,{children:[z.jsx("line",{x1:g.x-Pu.ANCHOR_MARKER_SIZE,y1:g.y,x2:g.x+Pu.ANCHOR_MARKER_SIZE,y2:g.y,stroke:rE.OFFSET_LINE,strokeWidth:Pu.ANCHOR_MARKER_STROKE_WIDTH}),z.jsx("line",{x1:g.x,y1:g.y-Pu.ANCHOR_MARKER_SIZE,x2:g.x,y2:g.y+Pu.ANCHOR_MARKER_SIZE,stroke:rE.OFFSET_LINE,strokeWidth:Pu.ANCHOR_MARKER_STROKE_WIDTH})]}),C&&z.jsx("foreignObject",{x:Math.min(l.x,g.x),y:l.y+f,width:Math.abs(g.x-l.x),height:20,style:{overflow:"visible"},children:z.jsx("div",{style:{...i,textAlign:"center"},children:x})}),y&&z.jsx("foreignObject",{x:g.x+I,y:Math.min(l.y,g.y),width:Pu.Y_LABEL_MIN_WIDTH,height:Math.abs(g.y-l.y),style:{overflow:"visible"},children:z.jsx("div",{style:{...i,display:"flex",alignItems:"center",justifyContent:_?"flex-start":"flex-end",whiteSpace:"nowrap",padding:"0 4px",height:"100%"},children:E})})]},s.id)}),Array.from(r.entries()).map(([s,a])=>z.jsxs("g",{children:[z.jsx("line",{x1:a.x-Pu.ANCHOR_MARKER_SIZE,y1:a.y,x2:a.x+Pu.ANCHOR_MARKER_SIZE,y2:a.y,stroke:rE.OFFSET_LINE,strokeWidth:Pu.ANCHOR_MARKER_STROKE_WIDTH}),z.jsx("line",{x1:a.x,y1:a.y-Pu.ANCHOR_MARKER_SIZE,x2:a.x,y2:a.y+Pu.ANCHOR_MARKER_SIZE,stroke:rE.OFFSET_LINE,strokeWidth:Pu.ANCHOR_MARKER_STROKE_WIDTH})]},`anchor-${s}`))]})})},PSi=({elements:t,highlightedPrimitives:e,transform:n,containerWidth:o,containerHeight:i})=>{const r=t.filter(_=>pze(_)),s=t.filter(_=>UP(_)),a=t.filter(_=>CAn(_)),A=e.map(_=>UP(_._parent_pcb_component)?_._parent_pcb_component.pcb_component_id:UP(_._element)?_._element.pcb_component_id:null).filter(_=>!!_),c=new Set;if(A.forEach(_=>{const f=s.find(I=>I.pcb_component_id===_);f?.pcb_group_id&&c.add(f.pcb_group_id)}),!Dc(_=>_.is_showing_group_anchor_offsets)&&A.length===0)return null;const g=s.map(_=>{const f=_.positioned_relative_to_pcb_board_id;if(!f)return null;const I=r.find(C=>C.pcb_board_id===f);return I?{component:_,board:I,type:"component"}:null}).filter(_=>!!_),u=a.map(_=>{const f=_.positioned_relative_to_pcb_board_id;if(!f||!_.center)return null;const I=r.find(C=>C.pcb_board_id===f);return I?{group:_,board:I,type:"group"}:null}).filter(_=>!!_),h=[...g,...u];if(h.length===0)return null;const d=A.length===0,m=h.filter(_=>_.type==="component"?d||A.includes(_.component.pcb_component_id):d||c.has(_.group.pcb_group_id));if(m.length===0)return null;const p=m.map(_=>_.type==="component"?{id:`${_.board.pcb_board_id}-${_.component.pcb_component_id}-${_.type}`,anchor:_.board.center,anchor_id:_.board.pcb_board_id,target:_.component.center,type:"component",display_offset_x:_.component.display_offset_x,display_offset_y:_.component.display_offset_y}:{id:`${_.board.pcb_board_id}-${_.group.pcb_group_id}-${_.type}`,anchor:_.board.center,anchor_id:_.board.pcb_board_id,target:{x:_.group.anchor_position?.x??_.group.center.x,y:_.group.anchor_position?.y??_.group.center.y},type:"group",display_offset_x:_.group.display_offset_x,display_offset_y:_.group.display_offset_y}).filter(_=>!!_);return z.jsx(_ze,{targets:p,transform:n,containerWidth:o,containerHeight:i})},wSi=({elements:t,highlightedPrimitives:e,transform:n,containerWidth:o,containerHeight:i})=>{const r=t.filter(_=>CAn(_)),s=t.filter(_=>UP(_)),a=e.map(_=>UP(_._parent_pcb_component)?_._parent_pcb_component.pcb_component_id:UP(_._element)?_._element.pcb_component_id:null).filter(_=>!!_),A=(_,f)=>{if(f.has(_))return;f.add(_);const I=r.find(C=>C.pcb_group_id===_);I?.position_mode==="relative_to_group_anchor"&&I.positioned_relative_to_pcb_group_id&&A(I.positioned_relative_to_pcb_group_id,f)},c=new Set;if(a.forEach(_=>{const f=s.find(I=>I.pcb_component_id===_);f&&(f.position_mode==="relative_to_group_anchor"&&f.positioned_relative_to_pcb_group_id&&A(f.positioned_relative_to_pcb_group_id,c),f.pcb_group_id&&A(f.pcb_group_id,c))}),!Dc(_=>_.is_showing_group_anchor_offsets)&&a.length===0)return null;const g=s.map(_=>{if(_.position_mode==="relative_to_group_anchor"&&_.positioned_relative_to_pcb_group_id){const f=r.find(I=>I.pcb_group_id===_.positioned_relative_to_pcb_group_id);return f&&f.anchor_position?{component:_,parentGroup:f,type:"component"}:null}if(_.pcb_group_id){const f=r.find(I=>I.pcb_group_id===_.pcb_group_id);return f&&f.anchor_position?{component:_,parentGroup:f,type:"component"}:null}return null}).filter(_=>!!_),u=r.map(_=>{if(_.position_mode==="relative_to_group_anchor"&&_.positioned_relative_to_pcb_group_id){const f=r.find(I=>I.pcb_group_id===_.positioned_relative_to_pcb_group_id);if(f&&f.anchor_position&&_.anchor_position)return{group:_,parentGroup:f,type:"group"}}return null}).filter(_=>!!_),h=[...g,...u];if(h.length===0)return null;const d=a.length===0,m=h.filter(_=>_.type==="component"?d||a.includes(_.component.pcb_component_id):d||c.has(_.group.pcb_group_id)||c.has(_.parentGroup.pcb_group_id));if(m.length===0)return null;const p=m.map(_=>{const f=_.parentGroup.anchor_position;return f?_.type==="component"?_.component.center?{id:`${_.parentGroup.pcb_group_id}-${_.component.pcb_component_id}-${_.type}`,anchor:f,anchor_id:_.parentGroup.pcb_group_id,target:_.component.center,type:"component",display_offset_x:_.component.display_offset_x,display_offset_y:_.component.display_offset_y}:null:_.group.anchor_position?{id:`${_.parentGroup.pcb_group_id}-${_.group.pcb_group_id}-${_.type}`,anchor:f,anchor_id:_.parentGroup.pcb_group_id,target:_.group.anchor_position,type:"group",display_offset_x:_.group.display_offset_x,display_offset_y:_.group.display_offset_y}:null:null}).filter(_=>!!_);return z.jsx(_ze,{targets:p,transform:n,containerWidth:o,containerHeight:i})},MSi=(t,e)=>{const n=t.pcb_component_id,o=e.filter(i=>(i.type==="pcb_smtpad"||i.type==="pcb_plated_hole")&&i.pcb_component_id===n||i.type==="pcb_hole"&&i.pcb_component_id===n);return o.length===0?cze([t]):cze(o)},DSi=({elements:t,highlightedPrimitives:e,transform:n,containerWidth:o,containerHeight:i})=>{const r=new Map;for(const a of e)UP(a._parent_pcb_component)&&r.set(a._parent_pcb_component.pcb_component_id,a._parent_pcb_component),UP(a._element)&&r.set(a._element.pcb_component_id,a._element);if(r.size===0)return null;const s=[];for(const a of r.values()){const A=MSi(a,t);if(!A)continue;const c=a.positioned_relative_to_pcb_group_id??a.pcb_group_id,l=c?dY(t).pcb_group.get(c):null;s.push({component:a,bbox:A,group:l})}return s.length===0?null:z.jsx("div",{style:{position:"absolute",left:0,top:0,width:o,height:i,overflow:"hidden",pointerEvents:"none",zIndex:xg.dimensionOverlay},children:z.jsx("svg",{style:{position:"absolute",left:0,top:0,pointerEvents:"none"},width:o,height:i,children:s.map(({component:a,bbox:A,group:c})=>{const l=xt(n,{x:A.minX,y:A.maxY}),g=xt(n,{x:A.maxX,y:A.minY}),u={x:Math.min(l.x,g.x),y:Math.min(l.y,g.y),width:Math.abs(g.x-l.x),height:Math.abs(g.y-l.y)},h=a.center??{x:(A.minX+A.maxX)/2,y:(A.minY+A.maxY)/2},d=xt(n,h);return z.jsxs("g",{children:[z.jsx("rect",{x:u.x,y:u.y,width:u.width,height:u.height,fill:"none",stroke:"white",strokeWidth:1.5,strokeDasharray:"4,4"}),z.jsx("line",{x1:d.x-6,y1:d.y,x2:d.x+6,y2:d.y,stroke:rE.COMPONENT_MARKER_STROKE,strokeWidth:1.5}),z.jsx("line",{x1:d.x,y1:d.y-6,x2:d.x,y2:d.y+6,stroke:rE.COMPONENT_MARKER_STROKE,strokeWidth:1.5}),z.jsx("circle",{cx:d.x,cy:d.y,r:Pu.COMPONENT_MARKER_RADIUS,fill:rE.COMPONENT_MARKER_FILL,stroke:rE.COMPONENT_MARKER_STROKE,strokeWidth:1})]},a.pcb_component_id)})})})},NSi=({elements:t,highlightedPrimitives:e,transform:n,containerWidth:o,containerHeight:i})=>{const r=t.filter(h=>vSi(h)),s=t.filter(h=>pze(h)),a=e.map(h=>pze(h._element)?h._element.pcb_board_id:null).filter(h=>!!h);if(!Dc(h=>h.is_showing_group_anchor_offsets)&&a.length===0)return null;const c=s.map(h=>{const d=h.pcb_panel_id,m=h.position_mode;if(!d||m!=="relative_to_panel_anchor")return null;const p=r.find(_=>_.pcb_panel_id===d);return p?{board:h,panel:p,type:"board"}:null}).filter(h=>!!h);if(c.length===0)return null;const l=a.length===0,g=c.filter(h=>l||a.includes(h.board.pcb_board_id));if(g.length===0)return null;const u=g.map(h=>h.board.center?{id:`${h.panel.pcb_panel_id}-${h.board.pcb_board_id}-${h.type}`,anchor:h.panel.center,anchor_id:h.panel.pcb_panel_id,target:h.board.center,type:"board",display_offset_x:h.board.display_offset_x,display_offset_y:h.board.display_offset_y}:null).filter(h=>!!h);return z.jsx(_ze,{targets:u,transform:n,containerWidth:o,containerHeight:i})};function RSi(t){const{primitives:e,is_showing_multiple_traces_length:n,elements:o}=t,i=e.filter(A=>A._element.type==="pcb_trace"),r=o.filter(A=>A.type==="source_trace"),s=e.filter(A=>A._element.type!=="pcb_trace"),a=i.filter(A=>r.some(l=>A._element.source_trace_id===l.source_trace_id&&l.max_length!==void 0)||gze({primitiveElement:A._element,elements:o})!==null);if(!n)return[...s,...a];if(i.length>1){const A=i.reduce((c,l)=>{const g=c._element.trace_length;return l._element.trace_length<g?l:c},i[0]);return[...s,A]}return e}var TSi={position:"absolute",left:0,top:0,pointerEvents:"none",color:"red",fontFamily:"sans-serif",fontSize:12,textShadow:"0 0 2px black"},kSi=t=>{const{_element:e,_parent_pcb_component:n,_parent_source_component:o,_source_port:i}=t;switch(e.type){case"pcb_trace":return e.trace_length?`${e.trace_length.toFixed(3)}`:"";case"pcb_smtpad":case"pcb_plated_hole":{const r=[],s=Array.from(new Set((e.port_hints??[]).concat(i?.port_hints??[]))).filter(A=>!/^[0-9]+$/.test(A)).filter(A=>!A.includes("unnamed_")).sort((A,c)=>c.localeCompare(A)),a=o&&"name"in o&&o.name&&!o.name.includes("unnamed_")?o.name:null;return s.length>0?a?r.push(...s.map(A=>`${a}.${A}`)):r.push(...s):a&&r.push(a),r.join(", ")}default:return""}},FSi={top:"red",bottom:"aqua"},LSi=({primitive:t,mousePos:e,elements:n})=>{const[o,i]=te.useState(!1),r=t._element;te.useEffect(()=>{setTimeout(()=>{i(!0)},100)},[]);const[s,a,A,c]=[t.screen_x,t.screen_y,t.screen_w,t.screen_h],l=t.same_space_index??0,g=26,u=FSi[t?._element?.layer]??"red";let h=0;if(r.type==="pcb_smtpad"&&r?.shape==="rotated_rect"?h=r?.ccw_rotation??0:(r.type==="pcb_smtpad"&&(r?.shape==="pill"||r?.shape==="rotated_pill")&&"ccw_rotation"in t||r.type==="pcb_plated_hole"&&(r?.shape==="pill"||r?.shape==="oval")&&"ccw_rotation"in t)&&(h=r.ccw_rotation??0),r.type==="pcb_trace"){const p=Oan({primitiveElement:r,elements:n});return p?z.jsx("div",{style:{zIndex:xg.elementOverlay,position:"absolute",left:e.x+12,top:e.y+12,color:u,pointerEvents:"none"},children:z.jsxs("div",{style:{backgroundColor:"#f2efcc",color:p.isOverLength?"red":"black",textShadow:"none",WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale",padding:"4px 6px",borderRadius:"4px",fontSize:"11px",lineHeight:1.2,textAlign:"left",whiteSpace:"nowrap"},children:[p.text&&z.jsx("div",{children:p.text}),p.name&&z.jsx("div",{style:{marginTop:p.text?"2px":0},children:p.name})]})}):null}const d=kSi(t);return d.trim().length===0?null:z.jsx("div",{style:{zIndex:xg.elementOverlay,position:"absolute",left:s-A/2-8,top:a-c/2-8,width:A+16,height:c+16,color:u,transform:`rotate(${-h}deg)`,transformOrigin:"center center"},children:z.jsx("div",{style:{width:o?`calc(100% + ${g*2*l}px)`:"100%",height:o?`calc(100% + ${g*2*l}px)`:"100%",marginLeft:o?`${-g*l}px`:0,marginTop:o?`${-g*l}px`:0,border:`1px solid ${u}`,opacity:o||l===0?1:0,transition:"width 0.2s, height 0.2s, margin-left 0.2s, margin-top 0.2s, opacity 0.2s"},children:z.jsx("div",{style:{position:"absolute",bottom:c+20+g*l,marginRight:o?`${-g*l}px`:0,marginBottom:o?0:-g*l,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(${h}deg)`,minWidth:"45px",textAlign:"center"},children:d})})})},HSi=({highlightedPrimitives:t,mousePos:e,elements:n})=>{const[o,i]=Dc(a=>[a.is_moving_component,a.is_showing_multiple_traces_length]),r=t.some(a=>a._element.type==="pcb_smtpad")&&t.some(a=>a._element.type==="pcb_trace");let s=t;return r&&(s=s.filter(a=>a._element.type==="pcb_smtpad")),s=RSi({primitives:s,is_showing_multiple_traces_length:i,elements:n}),z.jsx("div",{style:TSi,children:!o&&s.map(a=>z.jsx(LSi,{primitive:a,mousePos:e,elements:n},a._pcb_drawing_object_id))})},eme=t=>{if(t.length===0)return null;let e=t[0].x,n=t[0].y,o=t[0].x,i=t[0].y;for(const r of t)r.x<e&&(e=r.x),r.y<n&&(n=r.y),r.x>o&&(o=r.x),r.y>i&&(i=r.y);return{center:{x:(e+o)/2,y:(n+i)/2},width:o-e,height:i-n}},yAn=(t,e)=>{if(e.length<3)return!1;let n=!1;for(let o=0,i=e.length-1;o<e.length;i=o++){const r=e[o].x,s=e[o].y,a=e[i].x,A=e[i].y;s>t.y!=A>t.y&&t.x<(a-r)*(t.y-s)/(A-s||Number.EPSILON)+r&&(n=!n)}return n},xAn=(t,e,n,o,i=!1)=>{const r=[];for(const s of t){if(!s._element||!i&&s._element.type==="pcb_trace"&&s.layer!==o)continue;if("x1"in s&&s._element?.type==="pcb_trace"){const c=Fd({x:e.x,y:e.y},{x:s.x1,y:s.y1},{x:s.x2,y:s.y2}),l=s.width||.5,g=Math.max(l*25,2)/n.a;c<g&&r.push(s);continue}if(s.pcb_drawing_type==="polygon"){const c=s.points.map(g=>({x:ct.parse(g.x),y:ct.parse(g.y)})),l=eme(c);if(!l||e.x<l.center.x-l.width/2||e.x>l.center.x+l.width/2||e.y<l.center.y-l.height/2||e.y>l.center.y+l.height/2)continue;yAn(e,c)&&r.push(s);continue}if(s.pcb_drawing_type==="polygon_with_arcs"){const c=s.brep_shape.outer_ring.vertices.map(g=>({x:ct.parse(g.x),y:ct.parse(g.y)})),l=eme(c);if(!l||e.x<l.center.x-l.width/2||e.x>l.center.x+l.width/2||e.y<l.center.y-l.height/2||e.y>l.center.y+l.height/2)continue;yAn(e,c)&&r.push(s);continue}if(!("x"in s&&"y"in s))continue;let a=0,A=0;if("w"in s&&"h"in s)a=s.w,A=s.h;else if("r"in s)a=s.r*2,A=s.r*2;else if("rX"in s&&"rY"in s)a=s.rX*2,A=s.rY*2;else continue;Math.abs(s.x-e.x)<a/2&&Math.abs(s.y-e.y)<A/2&&r.push(s)}return r},OSi=({elements:t,children:e,transform:n,primitives:o,selectedLayer:i,onMouseHoverOverPrimitives:r,disableHoverHighlights:s=!1})=>{const[a,A]=te.useState([]),[c,l]=te.useState({x:0,y:0}),[g,{width:u,height:h}]=Wq();te.useEffect(()=>{A([]),r([])},[i,r]);const d=te.useMemo(()=>{const p=[];if(s)return p;for(const _ of a){if(_._element?.type==="pcb_via"||_._element?.type==="pcb_component"||_?.layer==="drill"||_?.is_hoverable===!1)continue;let f=null,I=0,C=0;if(_.pcb_drawing_type==="polygon"){const B=eme(_.points);if(!B)continue;f=B.center,I=B.width,C=B.height}else if(_.pcb_drawing_type==="polygon_with_arcs"){const B=_.brep_shape.outer_ring.vertices.map(Q=>({x:Q.x,y:Q.y})),b=eme(B);if(!b)continue;f=b.center,I=b.width,C=b.height}else _.pcb_drawing_type==="line"?(f={x:(_.x1+_.x2)/2,y:(_.y1+_.y2)/2},I=Math.abs(_.x2-_.x1),C=Math.abs(_.y2-_.y1)):"x"in _&&"y"in _&&(f={x:_.x,y:_.y},I="w"in _?_.w:"r"in _?_.r*2:"rX"in _&&"rY"in _?_.rX*2:0,C="h"in _?_.h:"r"in _?_.r*2:"rX"in _&&"rY"in _?_.rY*2:0);if(!f)continue;const y=xt(n,f),x={w:I*n.a,h:C*n.a},E=p.filter(B=>y.x===B.screen_x&&y.y===B.screen_y&&x.w===B.screen_w&&x.h===B.screen_h).length;p.push({..._,x:f.x,y:f.y,w:I,h:C,screen_x:y.x,screen_y:y.y,screen_w:x.w,screen_h:x.h,same_space_index:E})}return p},[a,n,s]),m=(p,_,f,I)=>{l({x:p,y:_});const C=xt(e5(f),{x:p,y:_}),y=xAn(I,C,f,i);QSi(new Set(y.map(x=>x._pcb_drawing_object_id)),new Set(a.map(x=>x._pcb_drawing_object_id)))||(A(y),r(y))};return z.jsxs("div",{ref:g,style:{position:"relative",width:"100%",height:"100%"},onMouseMove:p=>{if(n){const _=p.currentTarget.getBoundingClientRect(),f=p.clientX-_.left,I=p.clientY-_.top;m(f,I,n,o)}},onTouchStart:p=>{if(n){const _=p.touches[0],f=p.currentTarget.getBoundingClientRect(),I=_.clientX-f.left,C=_.clientY-f.top;m(I,C,n,o)}},children:[e,z.jsx(HSi,{elements:t,mousePos:c,highlightedPrimitives:d}),n&&z.jsxs(z.Fragment,{children:[z.jsx(PSi,{elements:t,highlightedPrimitives:d,transform:n,containerWidth:u,containerHeight:h}),z.jsx(wSi,{elements:t,highlightedPrimitives:d,transform:n,containerWidth:u,containerHeight:h}),z.jsx(DSi,{elements:t,highlightedPrimitives:d,transform:n,containerWidth:u,containerHeight:h}),z.jsx(NSi,{elements:t,highlightedPrimitives:d,transform:n,containerWidth:u,containerHeight:h})]})]})},EAn=["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)"],GSi=({children:t,transform:e=H0(),elements:n=[],hoveredComponentIds:o=[]})=>{const[i,{width:r,height:s}]=Wq(),a=te.useRef(null),{is_showing_pcb_groups:A,pcb_group_view_mode:c,is_showing_group_anchor_offsets:l}=Dc(g=>({is_showing_pcb_groups:g.is_showing_pcb_groups,pcb_group_view_mode:g.pcb_group_view_mode,is_showing_group_anchor_offsets:g.is_showing_group_anchor_offsets}));return te.useEffect(()=>{const g=a.current;if(!g||!r||!s)return;g.width=r,g.height=s;const u=g.getContext("2d");if(!u||(u.clearRect(0,0,r,s),!A))return;const h=n.filter(x=>x.type==="pcb_group"),d=n.filter(x=>x.type==="pcb_component"),m=n.filter(x=>x.type==="source_group"),p=new Map(m.map(x=>[x.source_group_id,x])),_=h.filter(x=>{if(x.name?.toLowerCase().includes("subpanel"))return!1;if(c==="all")return!0;if(!x.source_group_id)return!1;const E=p.get(x.source_group_id);return E?E.was_automatically_named!==!0:!1}),f=new Map;m.forEach(x=>{const E=x;if(E.parent_source_group_id){const B=f.get(E.parent_source_group_id)||[];B.push(x.source_group_id),f.set(E.parent_source_group_id,B)}});const I=x=>{const E=[],B=f.get(x)||[];for(const b of B)E.push(b),E.push(...I(b));return E},C=x=>{const E=m.find(B=>B.source_group_id===x);return E?.parent_source_group_id?1+C(E.parent_source_group_id):0},y=new Set;if(o.length>0)for(const x of d){if(!o.includes(x.pcb_component_id))continue;const E=x.positioned_relative_to_pcb_group_id??x.pcb_group_id;E&&y.add(E)}_.forEach((x,E)=>{let B=d.filter(Me=>Me.pcb_group_id===x.pcb_group_id);if(x.source_group_id){const Me=I(x.source_group_id),Oe=h.filter(ke=>ke.source_group_id&&Me.includes(ke.source_group_id));for(const ke of Oe){const be=d.filter(He=>He.pcb_group_id===ke.pcb_group_id);B=[...B,...be]}}let b,Q,w,D,k=!1;if(x.center&&x.width&&x.height){k=!0;const Me=x.width/2,Oe=x.height/2;b=x.center.x-Me,w=x.center.x+Me,Q=x.center.y-Oe,D=x.center.y+Oe}else if(B.length===0||(b=1/0,Q=1/0,w=-1/0,D=-1/0,B.forEach(Me=>{if(Me.center&&typeof Me.width=="number"&&typeof Me.height=="number"){const Oe=Me.center.x-Me.width/2,ke=Me.center.x+Me.width/2,be=Me.center.y+Me.height/2,He=Me.center.y-Me.height/2;b=Math.min(b,Oe),w=Math.max(w,ke),Q=Math.min(Q,He),D=Math.max(D,be)}}),b===1/0||w===-1/0))return;const T=x.source_group_id?C(x.source_group_id):0,H=x.source_group_id?I(x.source_group_id).length>0:!1;if(!k){const ke=1+(H?.5:0);b-=ke,w+=ke,Q-=ke,D+=ke}const G=xt(e,{x:b,y:D}),U=xt(e,{x:w,y:D}),Y=xt(e,{x:b,y:Q}),j=xt(e,{x:w,y:Q}),ee=EAn[E%EAn.length];u.strokeStyle=ee,u.lineWidth=2;const W=Math.max(4,Math.min(12,8*Math.abs(e.a))),Z=Math.max(2,Math.min(6,4*Math.abs(e.a))),se=W*(H?1.3:1),ne=Z;u.setLineDash([se,ne]),u.beginPath(),u.moveTo(G.x,G.y),u.lineTo(U.x,U.y),u.lineTo(j.x,j.y),u.lineTo(Y.x,Y.y),u.closePath(),u.stroke();const le=Math.max(8,Math.min(12,10*Math.abs(e.a))),he=T==0||T==1?0:T*.11,Ie=le*(1-he),ce=4,fe=x.name||`Group ${E+1}`;u.font=`${Ie}px sans-serif`,u.setLineDash([]);const Ce=u.measureText(fe).width+ce*2,Qe=Ie+ce*2,Pe=G.x-5,pe=G.y-5,ve=3;if(u.fillStyle="rgba(0, 0, 0, 0.8)",u.beginPath(),u.roundRect(Pe,pe-Qe,Ce,Qe,ve),u.fill(),u.fillStyle=ee,u.textAlign="left",u.textBaseline="middle",u.fillText(fe,Pe+ce,pe-Qe/2),l&&y.has(x.pcb_group_id)&&!!x.anchor_position&&x.anchor_position){const Me=Array.isArray(x.anchor_position)?{x:x.anchor_position[0]??0,y:x.anchor_position[1]??0}:{x:x.anchor_position.x,y:x.anchor_position.y},Oe=xt(e,Me);u.strokeStyle="white",u.lineWidth=1.5,u.setLineDash([]);const ke=Math.max(4,Math.min(8,6*Math.abs(e.a)));u.beginPath(),u.moveTo(Oe.x-ke,Oe.y),u.lineTo(Oe.x+ke,Oe.y),u.stroke(),u.beginPath(),u.moveTo(Oe.x,Oe.y-ke),u.lineTo(Oe.x,Oe.y+ke),u.stroke()}})},[n,e,r,s,A,c,l,o]),z.jsxs("div",{ref:i,style:{position:"relative",width:"100%",height:"100%"},children:[t,z.jsx("canvas",{ref:a,style:{position:"absolute",top:0,left:0,pointerEvents:"none",zIndex:xg.pcbGroupOverlay,display:A?"block":"none"}})]})},YSi=({transform:t,soup:e,children:n})=>{const o=Dc(a=>a.is_showing_rats_nest),{netMap:i,idToNetMap:r}=te.useMemo(()=>Nan(e||[]),[e]),s=te.useMemo(()=>{if(!e||!o)return[];const a=u=>{const h=dY(e)[u.replace(/_\d+$/,"")].get(u);return h&&"x"in h&&"y"in h?{x:h.x,y:h.y}:null},A=(u,h)=>{const d=i[h]||[];let m=null,p=1/0;return d.forEach(_=>{const f=a(_);if(f){const I=Math.sqrt((u.x-f.x)**2+(u.y-f.y)**2);I<p&&I>0&&(p=I,m=f)}}),m},c=dY(e).pcb_port.list(),l=dY(e).source_trace.list(),g=[];return c.forEach((u,h)=>{const d=r[u.pcb_port_id];let m=!1;for(const f of l)f.connected_source_port_ids.includes(u.source_port_id)&&f.connected_source_net_ids.length>0&&(m=!0);if(!d)return;const p={x:u.x,y:u.y},_=A(p,d);_&&g.push({key:`${u.pcb_port_id}-${h}`,startPoint:p,endPoint:_,isInNet:m})}),g},[e,i,r,o]);return!e||!o?n:(t||(t=H0()),z.jsxs("div",{style:{position:"relative"},children:[n,z.jsx("svg",{style:{position:"absolute",left:0,top:0,width:"100%",height:"100%",pointerEvents:"none",opacity:.5,zIndex:xg.ratsNestOverlay},children:s.map(({key:a,startPoint:A,endPoint:c,isInNet:l})=>{const g=xt(t,A),u=xt(t,c);return z.jsx("line",{x1:g.x,y1:g.y,x2:u.x,y2:u.y,stroke:"white",strokeWidth:"1",strokeDasharray:l?"6,6":void 0},a)})})]}))},USi={version:"1.11.403"},d7=(t,e,n)=>{const o=Dc(s=>s.is_mouse_over_container),i=te.useRef(o),r=te.useRef(e);te.useEffect(()=>{i.current=o},[o]),te.useEffect(()=>{r.current=e},[e]),te.useEffect(()=>{if(!t)return;const s=a=>{const A=a.target;if(A.tagName==="INPUT"||A.tagName==="TEXTAREA"||A.isContentEditable)return;const c=t.split("+"),l=c.includes("ctrl"),g=c.includes("shift"),u=c.includes("alt"),h=c.includes("meta"),d=c[c.length-1],m=n?.current?n.current.contains(document.activeElement)||document.activeElement===n.current:!1;(i.current||m)&&(!l||a.ctrlKey)&&(!g||a.shiftKey)&&(!u||a.altKey)&&(!h||a.metaKey)&&a.key.toLowerCase()===d.toLowerCase()&&(a.preventDefault(),r.current())};return window.addEventListener("keydown",s),()=>{window.removeEventListener("keydown",s)}},[t])},KSi=()=>{const[t,e]=te.useState(!1);return te.useEffect(()=>{const n=()=>{e(window.innerWidth<=768)};return n(),window.addEventListener("resize",n),()=>window.removeEventListener("resize",n)},[]),t},$q=(t,e={stopPropagation:!0})=>{const n=te.useRef(0),o=te.useCallback(s=>{e.stopPropagation&&s.stopPropagation();const a=Date.now();a-n.current<300||(n.current=a,t?.(s))},[t,e.stopPropagation]),i=te.useCallback(s=>{s.preventDefault(),o(s)},[o]);return{onClick:o,onTouchEnd:i,style:{touchAction:"manipulation"}}},tme=uY`
|
|
5490
|
+
`,bSi=({children:t,transform:e=H0(),elements:n})=>{const o=te.useRef(null),{isShowingDRCErrors:i,hoveredErrorId:r,focusedErrorId:s}=Dc(m=>({isShowingDRCErrors:m.is_showing_drc_errors,hoveredErrorId:m.hovered_error_id,focusedErrorId:m.focused_error_id})),a=s??r;if(!n)return z.jsx("div",{style:{position:"relative"},ref:o,children:t});const A=n.filter(m=>m.type==="pcb_trace_error"&&!m.message?.includes("Multiple components found with name")),c=n.filter(m=>m.type==="pcb_via_clearance_error"),l=n.filter(m=>m.type==="pcb_trace_error"&&m.message?.includes("Multiple components found with name")),g=Ran(n),u=Lan(n,a),h=m=>{const p=D7i({error:m,indexes:g});if(!p||typeof p.x!="number"||typeof p.y!="number")return null;const _=xt(e,p);return Number.isNaN(_.x)||Number.isNaN(_.y)?null:_};let d=null;return u&&(d=h(u)),z.jsxs("div",{style:{position:"relative"},ref:o,children:[t,A.map((m,p)=>{const _=hY(m,p),f=a===_;if(!f&&!i)return null;const I=h(m);if(!I)return null;const C=hze(I,o);return z.jsxs(te.Fragment,{children:[z.jsx(IAn,{errorCenter:I,isHighlighted:f}),z.jsx("div",{style:{position:"absolute",left:I.x-15,top:I.y-15,width:30,height:30,zIndex:xg.errorOverlay+5,cursor:"pointer",borderRadius:"50%"},onMouseEnter:y=>{const x=y.currentTarget.nextElementSibling;if(x){const E=x.querySelector(".error-message");E&&(E.style.opacity="1")}},onMouseLeave:y=>{if(!f){const x=y.currentTarget.nextElementSibling;if(x){const E=x.querySelector(".error-message");E&&(E.style.opacity="0")}}}}),z.jsx("div",{style:{position:"absolute",zIndex:f?200:100,left:C.left,top:C.top,color:f?"#ff4444":"red",textAlign:"center",fontFamily:"sans-serif",fontSize:12,display:i||f?"flex":"none",flexDirection:"column",alignItems:"center",pointerEvents:"none",transform:C.transform},children:z.jsx("div",{className:`error-message ${mze}`,style:{opacity:f?1:0,border:`1px solid ${f?"#ff4444":"red"}`},children:m.message})})]},_)}),c.map((m,p)=>{const _=hY(m,p),f=a===_;if(!f&&!i)return null;const I=h(m);if(!I)return null;const C=hze({x:I.x,y:I.y},o);return z.jsxs(te.Fragment,{children:[z.jsx(IAn,{errorCenter:I,isHighlighted:f}),z.jsx("div",{style:{position:"absolute",left:I.x-15,top:I.y-15,width:30,height:30,zIndex:xg.errorOverlay+5,cursor:"pointer",borderRadius:"50%"},onMouseEnter:y=>{const x=y.currentTarget.nextElementSibling;if(x){const E=x.querySelector(".error-message");E&&(E.style.opacity="1")}},onMouseLeave:y=>{if(!f){const x=y.currentTarget.nextElementSibling;if(x){const E=x.querySelector(".error-message");E&&(E.style.opacity="0")}}}}),z.jsx("div",{style:{position:"absolute",zIndex:f?xg.errorOverlay+10:xg.errorOverlay+1,left:C.left,top:C.top,color:f?"#ff4444":"red",textAlign:"center",fontFamily:"sans-serif",fontSize:12,display:"flex",flexDirection:"column",alignItems:"center",pointerEvents:"none",transform:C.transform},children:z.jsx("div",{className:`error-message ${mze}`,style:{opacity:f?1:0,border:`1px solid ${f?"#ff4444":"red"}`},children:m.message})})]},_)}),l.map((m,p)=>{const _=m.component_name||m.message?.match(/name "([^"]+)"/)?.[1];if(!_)return null;const f=n?.filter(y=>y.type==="source_component"&&y.name===_||y.type==="pcb_component"&&n?.find(x=>x.type==="source_component"&&x.source_component_id===y.source_component_id&&x.name===_))||[],I=hY(m,p),C=a===I;return!C&&!i?null:f.map((y,x)=>{let E={x:0,y:0};if(y.type==="pcb_component")E=y.center||{x:0,y:0};else if(y.type==="source_component"){const H=n?.find(G=>G.type==="pcb_component"&&G.source_component_id===y.source_component_id);H&&H.type==="pcb_component"&&(E=H.center||{x:0,y:0})}const B=xt(e,E);if(Number.isNaN(B.x)||Number.isNaN(B.y))return null;const b=Math.abs(e.a),k=Math.max(8,Math.min(30,.5*b)),T=hze(B,o);return z.jsxs(te.Fragment,{children:[z.jsx("svg",{style:{position:"absolute",left:0,top:0,pointerEvents:"none",mixBlendMode:"difference",zIndex:xg.errorOverlay},width:"100%",height:"100%",children:C?z.jsx("polygon",{points:`${B.x},${B.y-k*1.25} ${B.x+k},${B.y} ${B.x},${B.y+k*1.25} ${B.x-k},${B.y}`,fill:"#ff4444"}):z.jsx("circle",{cx:B.x,cy:B.y,r:k,fill:"none",stroke:C?"#ff4444":"red",strokeWidth:C?Math.max(2,k*.15):Math.max(1,k*.1),opacity:1})}),z.jsx("div",{style:{position:"absolute",left:B.x-(k+10),top:B.y-(k+10),width:(k+10)*2,height:(k+10)*2,zIndex:xg.errorOverlay+5,cursor:"pointer",borderRadius:"50%"},onMouseEnter:H=>{const G=H.currentTarget.nextElementSibling;if(G){const U=G.querySelector(".error-message");U&&(U.style.opacity="1")}},onMouseLeave:H=>{if(!C){const G=H.currentTarget.nextElementSibling;if(G){const U=G.querySelector(".error-message");U&&(U.style.opacity="0")}}}}),z.jsx("div",{style:{position:"absolute",zIndex:C?xg.errorOverlay+20:xg.errorOverlay+10,left:T.left,top:T.top,color:C?"#ff4444":"red",textAlign:"center",fontFamily:"sans-serif",fontSize:12,display:i||C?"flex":"none",flexDirection:"column",alignItems:"center",pointerEvents:"none",transform:T.transform},children:z.jsx("div",{className:`error-message ${mze}`,style:{opacity:C?1:0,border:`1px solid ${C?"#ff4444":"red"}`},children:m.message})})]},`${I}_${x}`)})}),d&&z.jsx(SSi,{center:d})]})};function QSi(t,e){return t.size!==e.size?!1:Array.from(t).every(n=>e.has(n))}var UP=t=>t?.type==="pcb_component",CAn=t=>t?.type==="pcb_group",vSi=t=>t?.type==="pcb_panel",pze=t=>t?.type==="pcb_board",Pu={MIN_LINE_LENGTH_FOR_LABEL:40,LABEL_OFFSET_ABOVE:2,LABEL_OFFSET_BELOW:-18,LABEL_OFFSET_RIGHT:8,LABEL_OFFSET_LEFT:-120,Y_LABEL_MIN_WIDTH:110,LINE_STROKE_WIDTH:1.5,LINE_DASH_PATTERN:"4,4",COMPONENT_MARKER_RADIUS:3,LABEL_FONT_SIZE:11,ANCHOR_MARKER_SIZE:6,ANCHOR_MARKER_STROKE_WIDTH:1.5},rE={OFFSET_LINE:"white",COMPONENT_MARKER_FILL:"#66ccff",COMPONENT_MARKER_STROKE:"white",LABEL_TEXT:"white"},_ze=({targets:t,transform:e,containerWidth:n,containerHeight:o})=>{if(t.length===0)return null;const i={color:rE.LABEL_TEXT,mixBlendMode:"difference",pointerEvents:"none",fontSize:Pu.LABEL_FONT_SIZE,fontFamily:"monospace",fontWeight:"bold"},r=new Map;return t.forEach(s=>{if(!r.has(s.anchor_id)){const a=xt(e,s.anchor);r.set(s.anchor_id,a)}}),z.jsx("div",{style:{position:"absolute",left:0,top:0,width:n,height:o,overflow:"hidden",pointerEvents:"none",zIndex:xg.dimensionOverlay},children:z.jsxs("svg",{style:{position:"absolute",left:0,top:0,pointerEvents:"none"},width:n,height:o,children:[t.map(s=>{const a=s.anchor,A=s.anchor_id,c=s.target,l=r.get(A),g=xt(e,c),u=c.x-a.x,h=c.y-a.y,d=Math.abs(g.x-l.x),m=Math.abs(g.y-l.y),p=g.y<l.y,_=g.x>l.x,f=p?Pu.LABEL_OFFSET_ABOVE:Pu.LABEL_OFFSET_BELOW,I=_?Pu.LABEL_OFFSET_RIGHT:Pu.LABEL_OFFSET_LEFT,C=d>Pu.MIN_LINE_LENGTH_FOR_LABEL,y=m>Pu.MIN_LINE_LENGTH_FOR_LABEL,x=`${s.display_offset_x??u.toFixed(2)}mm`,E=`${s.display_offset_y??h.toFixed(2)}mm`;return z.jsxs("g",{children:[z.jsx("line",{x1:l.x,y1:l.y,x2:g.x,y2:l.y,stroke:rE.OFFSET_LINE,strokeWidth:Pu.LINE_STROKE_WIDTH,strokeDasharray:Pu.LINE_DASH_PATTERN}),z.jsx("line",{x1:g.x,y1:l.y,x2:g.x,y2:g.y,stroke:rE.OFFSET_LINE,strokeWidth:Pu.LINE_STROKE_WIDTH,strokeDasharray:Pu.LINE_DASH_PATTERN}),s.type==="component"||s.type==="board"?z.jsx("circle",{cx:g.x,cy:g.y,r:Pu.COMPONENT_MARKER_RADIUS,fill:rE.COMPONENT_MARKER_FILL,stroke:rE.COMPONENT_MARKER_STROKE,strokeWidth:1}):z.jsxs(z.Fragment,{children:[z.jsx("line",{x1:g.x-Pu.ANCHOR_MARKER_SIZE,y1:g.y,x2:g.x+Pu.ANCHOR_MARKER_SIZE,y2:g.y,stroke:rE.OFFSET_LINE,strokeWidth:Pu.ANCHOR_MARKER_STROKE_WIDTH}),z.jsx("line",{x1:g.x,y1:g.y-Pu.ANCHOR_MARKER_SIZE,x2:g.x,y2:g.y+Pu.ANCHOR_MARKER_SIZE,stroke:rE.OFFSET_LINE,strokeWidth:Pu.ANCHOR_MARKER_STROKE_WIDTH})]}),C&&z.jsx("foreignObject",{x:Math.min(l.x,g.x),y:l.y+f,width:Math.abs(g.x-l.x),height:20,style:{overflow:"visible"},children:z.jsx("div",{style:{...i,textAlign:"center"},children:x})}),y&&z.jsx("foreignObject",{x:g.x+I,y:Math.min(l.y,g.y),width:Pu.Y_LABEL_MIN_WIDTH,height:Math.abs(g.y-l.y),style:{overflow:"visible"},children:z.jsx("div",{style:{...i,display:"flex",alignItems:"center",justifyContent:_?"flex-start":"flex-end",whiteSpace:"nowrap",padding:"0 4px",height:"100%"},children:E})})]},s.id)}),Array.from(r.entries()).map(([s,a])=>z.jsxs("g",{children:[z.jsx("line",{x1:a.x-Pu.ANCHOR_MARKER_SIZE,y1:a.y,x2:a.x+Pu.ANCHOR_MARKER_SIZE,y2:a.y,stroke:rE.OFFSET_LINE,strokeWidth:Pu.ANCHOR_MARKER_STROKE_WIDTH}),z.jsx("line",{x1:a.x,y1:a.y-Pu.ANCHOR_MARKER_SIZE,x2:a.x,y2:a.y+Pu.ANCHOR_MARKER_SIZE,stroke:rE.OFFSET_LINE,strokeWidth:Pu.ANCHOR_MARKER_STROKE_WIDTH})]},`anchor-${s}`))]})})},PSi=({elements:t,highlightedPrimitives:e,transform:n,containerWidth:o,containerHeight:i})=>{const r=t.filter(_=>pze(_)),s=t.filter(_=>UP(_)),a=t.filter(_=>CAn(_)),A=e.map(_=>UP(_._parent_pcb_component)?_._parent_pcb_component.pcb_component_id:UP(_._element)?_._element.pcb_component_id:null).filter(_=>!!_),c=new Set;if(A.forEach(_=>{const f=s.find(I=>I.pcb_component_id===_);f?.pcb_group_id&&c.add(f.pcb_group_id)}),!Dc(_=>_.is_showing_group_anchor_offsets)&&A.length===0)return null;const g=s.map(_=>{const f=_.positioned_relative_to_pcb_board_id;if(!f)return null;const I=r.find(C=>C.pcb_board_id===f);return I?{component:_,board:I,type:"component"}:null}).filter(_=>!!_),u=a.map(_=>{const f=_.positioned_relative_to_pcb_board_id;if(!f||!_.center)return null;const I=r.find(C=>C.pcb_board_id===f);return I?{group:_,board:I,type:"group"}:null}).filter(_=>!!_),h=[...g,...u];if(h.length===0)return null;const d=A.length===0,m=h.filter(_=>_.type==="component"?d||A.includes(_.component.pcb_component_id):d||c.has(_.group.pcb_group_id));if(m.length===0)return null;const p=m.map(_=>_.type==="component"?{id:`${_.board.pcb_board_id}-${_.component.pcb_component_id}-${_.type}`,anchor:_.board.center,anchor_id:_.board.pcb_board_id,target:_.component.center,type:"component",display_offset_x:_.component.display_offset_x,display_offset_y:_.component.display_offset_y}:{id:`${_.board.pcb_board_id}-${_.group.pcb_group_id}-${_.type}`,anchor:_.board.center,anchor_id:_.board.pcb_board_id,target:{x:_.group.anchor_position?.x??_.group.center.x,y:_.group.anchor_position?.y??_.group.center.y},type:"group",display_offset_x:_.group.display_offset_x,display_offset_y:_.group.display_offset_y}).filter(_=>!!_);return z.jsx(_ze,{targets:p,transform:n,containerWidth:o,containerHeight:i})},wSi=({elements:t,highlightedPrimitives:e,transform:n,containerWidth:o,containerHeight:i})=>{const r=t.filter(_=>CAn(_)),s=t.filter(_=>UP(_)),a=e.map(_=>UP(_._parent_pcb_component)?_._parent_pcb_component.pcb_component_id:UP(_._element)?_._element.pcb_component_id:null).filter(_=>!!_),A=(_,f)=>{if(f.has(_))return;f.add(_);const I=r.find(C=>C.pcb_group_id===_);I?.position_mode==="relative_to_group_anchor"&&I.positioned_relative_to_pcb_group_id&&A(I.positioned_relative_to_pcb_group_id,f)},c=new Set;if(a.forEach(_=>{const f=s.find(I=>I.pcb_component_id===_);f&&(f.position_mode==="relative_to_group_anchor"&&f.positioned_relative_to_pcb_group_id&&A(f.positioned_relative_to_pcb_group_id,c),f.pcb_group_id&&A(f.pcb_group_id,c))}),!Dc(_=>_.is_showing_group_anchor_offsets)&&a.length===0)return null;const g=s.map(_=>{if(_.position_mode==="relative_to_group_anchor"&&_.positioned_relative_to_pcb_group_id){const f=r.find(I=>I.pcb_group_id===_.positioned_relative_to_pcb_group_id);return f&&f.anchor_position?{component:_,parentGroup:f,type:"component"}:null}if(_.pcb_group_id){const f=r.find(I=>I.pcb_group_id===_.pcb_group_id);return f&&f.anchor_position?{component:_,parentGroup:f,type:"component"}:null}return null}).filter(_=>!!_),u=r.map(_=>{if(_.position_mode==="relative_to_group_anchor"&&_.positioned_relative_to_pcb_group_id){const f=r.find(I=>I.pcb_group_id===_.positioned_relative_to_pcb_group_id);if(f&&f.anchor_position&&_.anchor_position)return{group:_,parentGroup:f,type:"group"}}return null}).filter(_=>!!_),h=[...g,...u];if(h.length===0)return null;const d=a.length===0,m=h.filter(_=>_.type==="component"?d||a.includes(_.component.pcb_component_id):d||c.has(_.group.pcb_group_id)||c.has(_.parentGroup.pcb_group_id));if(m.length===0)return null;const p=m.map(_=>{const f=_.parentGroup.anchor_position;return f?_.type==="component"?_.component.center?{id:`${_.parentGroup.pcb_group_id}-${_.component.pcb_component_id}-${_.type}`,anchor:f,anchor_id:_.parentGroup.pcb_group_id,target:_.component.center,type:"component",display_offset_x:_.component.display_offset_x,display_offset_y:_.component.display_offset_y}:null:_.group.anchor_position?{id:`${_.parentGroup.pcb_group_id}-${_.group.pcb_group_id}-${_.type}`,anchor:f,anchor_id:_.parentGroup.pcb_group_id,target:_.group.anchor_position,type:"group",display_offset_x:_.group.display_offset_x,display_offset_y:_.group.display_offset_y}:null:null}).filter(_=>!!_);return z.jsx(_ze,{targets:p,transform:n,containerWidth:o,containerHeight:i})},MSi=(t,e)=>{const n=t.pcb_component_id,o=e.filter(i=>(i.type==="pcb_smtpad"||i.type==="pcb_plated_hole")&&i.pcb_component_id===n||i.type==="pcb_hole"&&i.pcb_component_id===n);return o.length===0?cze([t]):cze(o)},DSi=({elements:t,highlightedPrimitives:e,transform:n,containerWidth:o,containerHeight:i})=>{const r=new Map;for(const a of e)UP(a._parent_pcb_component)&&r.set(a._parent_pcb_component.pcb_component_id,a._parent_pcb_component),UP(a._element)&&r.set(a._element.pcb_component_id,a._element);if(r.size===0)return null;const s=[];for(const a of r.values()){const A=MSi(a,t);if(!A)continue;const c=a.positioned_relative_to_pcb_group_id??a.pcb_group_id,l=c?dY(t).pcb_group.get(c):null;s.push({component:a,bbox:A,group:l})}return s.length===0?null:z.jsx("div",{style:{position:"absolute",left:0,top:0,width:o,height:i,overflow:"hidden",pointerEvents:"none",zIndex:xg.dimensionOverlay},children:z.jsx("svg",{style:{position:"absolute",left:0,top:0,pointerEvents:"none"},width:o,height:i,children:s.map(({component:a,bbox:A,group:c})=>{const l=xt(n,{x:A.minX,y:A.maxY}),g=xt(n,{x:A.maxX,y:A.minY}),u={x:Math.min(l.x,g.x),y:Math.min(l.y,g.y),width:Math.abs(g.x-l.x),height:Math.abs(g.y-l.y)},h=a.center??{x:(A.minX+A.maxX)/2,y:(A.minY+A.maxY)/2},d=xt(n,h);return z.jsxs("g",{children:[z.jsx("rect",{x:u.x,y:u.y,width:u.width,height:u.height,fill:"none",stroke:"white",strokeWidth:1.5,strokeDasharray:"4,4"}),z.jsx("line",{x1:d.x-6,y1:d.y,x2:d.x+6,y2:d.y,stroke:rE.COMPONENT_MARKER_STROKE,strokeWidth:1.5}),z.jsx("line",{x1:d.x,y1:d.y-6,x2:d.x,y2:d.y+6,stroke:rE.COMPONENT_MARKER_STROKE,strokeWidth:1.5}),z.jsx("circle",{cx:d.x,cy:d.y,r:Pu.COMPONENT_MARKER_RADIUS,fill:rE.COMPONENT_MARKER_FILL,stroke:rE.COMPONENT_MARKER_STROKE,strokeWidth:1})]},a.pcb_component_id)})})})},NSi=({elements:t,highlightedPrimitives:e,transform:n,containerWidth:o,containerHeight:i})=>{const r=t.filter(h=>vSi(h)),s=t.filter(h=>pze(h)),a=e.map(h=>pze(h._element)?h._element.pcb_board_id:null).filter(h=>!!h);if(!Dc(h=>h.is_showing_group_anchor_offsets)&&a.length===0)return null;const c=s.map(h=>{const d=h.pcb_panel_id,m=h.position_mode;if(!d||m!=="relative_to_panel_anchor")return null;const p=r.find(_=>_.pcb_panel_id===d);return p?{board:h,panel:p,type:"board"}:null}).filter(h=>!!h);if(c.length===0)return null;const l=a.length===0,g=c.filter(h=>l||a.includes(h.board.pcb_board_id));if(g.length===0)return null;const u=g.map(h=>h.board.center?{id:`${h.panel.pcb_panel_id}-${h.board.pcb_board_id}-${h.type}`,anchor:h.panel.center,anchor_id:h.panel.pcb_panel_id,target:h.board.center,type:"board",display_offset_x:h.board.display_offset_x,display_offset_y:h.board.display_offset_y}:null).filter(h=>!!h);return z.jsx(_ze,{targets:u,transform:n,containerWidth:o,containerHeight:i})};function RSi(t){const{primitives:e,is_showing_multiple_traces_length:n,elements:o}=t,i=e.filter(A=>A._element.type==="pcb_trace"),r=o.filter(A=>A.type==="source_trace"),s=e.filter(A=>A._element.type!=="pcb_trace"),a=i.filter(A=>r.some(l=>A._element.source_trace_id===l.source_trace_id&&l.max_length!==void 0)||gze({primitiveElement:A._element,elements:o})!==null);if(!n)return[...s,...a];if(i.length>1){const A=i.reduce((c,l)=>{const g=c._element.trace_length;return l._element.trace_length<g?l:c},i[0]);return[...s,A]}return e}var TSi={position:"absolute",left:0,top:0,pointerEvents:"none",color:"red",fontFamily:"sans-serif",fontSize:12,textShadow:"0 0 2px black"},kSi=t=>{const{_element:e,_parent_pcb_component:n,_parent_source_component:o,_source_port:i}=t;switch(e.type){case"pcb_trace":return e.trace_length?`${e.trace_length.toFixed(3)}`:"";case"pcb_smtpad":case"pcb_plated_hole":{const r=[],s=Array.from(new Set((e.port_hints??[]).concat(i?.port_hints??[]))).filter(A=>!/^[0-9]+$/.test(A)).filter(A=>!A.includes("unnamed_")).sort((A,c)=>c.localeCompare(A)),a=o&&"name"in o&&o.name&&!o.name.includes("unnamed_")?o.name:null;return s.length>0?a?r.push(...s.map(A=>`${a}.${A}`)):r.push(...s):a&&r.push(a),r.join(", ")}default:return""}},FSi={top:"red",bottom:"aqua"},LSi=({primitive:t,mousePos:e,elements:n})=>{const[o,i]=te.useState(!1),r=t._element;te.useEffect(()=>{setTimeout(()=>{i(!0)},100)},[]);const[s,a,A,c]=[t.screen_x,t.screen_y,t.screen_w,t.screen_h],l=t.same_space_index??0,g=26,u=FSi[t?._element?.layer]??"red";let h=0;if(r.type==="pcb_smtpad"&&r?.shape==="rotated_rect"?h=r?.ccw_rotation??0:(r.type==="pcb_smtpad"&&(r?.shape==="pill"||r?.shape==="rotated_pill")&&"ccw_rotation"in t||r.type==="pcb_plated_hole"&&(r?.shape==="pill"||r?.shape==="oval")&&"ccw_rotation"in t)&&(h=r.ccw_rotation??0),r.type==="pcb_trace"){const p=Oan({primitiveElement:r,elements:n});return p?z.jsx("div",{style:{zIndex:xg.elementOverlay,position:"absolute",left:e.x+12,top:e.y+12,color:u,pointerEvents:"none"},children:z.jsxs("div",{style:{backgroundColor:"#f2efcc",color:p.isOverLength?"red":"black",textShadow:"none",WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale",padding:"4px 6px",borderRadius:"4px",fontSize:"11px",lineHeight:1.2,textAlign:"left",whiteSpace:"nowrap"},children:[p.text&&z.jsx("div",{children:p.text}),p.name&&z.jsx("div",{style:{marginTop:p.text?"2px":0},children:p.name})]})}):null}const d=kSi(t);return d.trim().length===0?null:z.jsx("div",{style:{zIndex:xg.elementOverlay,position:"absolute",left:s-A/2-8,top:a-c/2-8,width:A+16,height:c+16,color:u,transform:`rotate(${-h}deg)`,transformOrigin:"center center"},children:z.jsx("div",{style:{width:o?`calc(100% + ${g*2*l}px)`:"100%",height:o?`calc(100% + ${g*2*l}px)`:"100%",marginLeft:o?`${-g*l}px`:0,marginTop:o?`${-g*l}px`:0,border:`1px solid ${u}`,opacity:o||l===0?1:0,transition:"width 0.2s, height 0.2s, margin-left 0.2s, margin-top 0.2s, opacity 0.2s"},children:z.jsx("div",{style:{position:"absolute",bottom:c+20+g*l,marginRight:o?`${-g*l}px`:0,marginBottom:o?0:-g*l,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(${h}deg)`,minWidth:"45px",textAlign:"center"},children:d})})})},HSi=({highlightedPrimitives:t,mousePos:e,elements:n})=>{const[o,i]=Dc(a=>[a.is_moving_component,a.is_showing_multiple_traces_length]),r=t.some(a=>a._element.type==="pcb_smtpad")&&t.some(a=>a._element.type==="pcb_trace");let s=t;return r&&(s=s.filter(a=>a._element.type==="pcb_smtpad")),s=RSi({primitives:s,is_showing_multiple_traces_length:i,elements:n}),z.jsx("div",{style:TSi,children:!o&&s.map(a=>z.jsx(LSi,{primitive:a,mousePos:e,elements:n},a._pcb_drawing_object_id))})},eme=t=>{if(t.length===0)return null;let e=t[0].x,n=t[0].y,o=t[0].x,i=t[0].y;for(const r of t)r.x<e&&(e=r.x),r.y<n&&(n=r.y),r.x>o&&(o=r.x),r.y>i&&(i=r.y);return{center:{x:(e+o)/2,y:(n+i)/2},width:o-e,height:i-n}},yAn=(t,e)=>{if(e.length<3)return!1;let n=!1;for(let o=0,i=e.length-1;o<e.length;i=o++){const r=e[o].x,s=e[o].y,a=e[i].x,A=e[i].y;s>t.y!=A>t.y&&t.x<(a-r)*(t.y-s)/(A-s||Number.EPSILON)+r&&(n=!n)}return n},xAn=(t,e,n,o,i=!1)=>{const r=[];for(const s of t){if(!s._element||!i&&s._element.type==="pcb_trace"&&s.layer!==o)continue;if("x1"in s&&s._element?.type==="pcb_trace"){const c=Fd({x:e.x,y:e.y},{x:s.x1,y:s.y1},{x:s.x2,y:s.y2}),l=s.width||.5,g=Math.max(l*25,2)/n.a;c<g&&r.push(s);continue}if(s.pcb_drawing_type==="polygon"){const c=s.points.map(g=>({x:ct.parse(g.x),y:ct.parse(g.y)})),l=eme(c);if(!l||e.x<l.center.x-l.width/2||e.x>l.center.x+l.width/2||e.y<l.center.y-l.height/2||e.y>l.center.y+l.height/2)continue;yAn(e,c)&&r.push(s);continue}if(s.pcb_drawing_type==="polygon_with_arcs"){const c=s.brep_shape.outer_ring.vertices.map(g=>({x:ct.parse(g.x),y:ct.parse(g.y)})),l=eme(c);if(!l||e.x<l.center.x-l.width/2||e.x>l.center.x+l.width/2||e.y<l.center.y-l.height/2||e.y>l.center.y+l.height/2)continue;yAn(e,c)&&r.push(s);continue}if(!("x"in s&&"y"in s))continue;let a=0,A=0;if("w"in s&&"h"in s)a=s.w,A=s.h;else if("r"in s)a=s.r*2,A=s.r*2;else if("rX"in s&&"rY"in s)a=s.rX*2,A=s.rY*2;else continue;Math.abs(s.x-e.x)<a/2&&Math.abs(s.y-e.y)<A/2&&r.push(s)}return r},OSi=({elements:t,children:e,transform:n,primitives:o,selectedLayer:i,onMouseHoverOverPrimitives:r})=>{const[s,a]=te.useState([]),[A,c]=te.useState({x:0,y:0}),[l,{width:g,height:u}]=Wq();te.useEffect(()=>{a([]),r([])},[i,o,r]);const h=te.useMemo(()=>{const m=[];for(const p of s){if(p._element?.type==="pcb_via"||p._element?.type==="pcb_component"||p?.layer==="drill"||p?.is_hoverable===!1)continue;let _=null,f=0,I=0;if(p.pcb_drawing_type==="polygon"){const E=eme(p.points);if(!E)continue;_=E.center,f=E.width,I=E.height}else if(p.pcb_drawing_type==="polygon_with_arcs"){const E=p.brep_shape.outer_ring.vertices.map(b=>({x:b.x,y:b.y})),B=eme(E);if(!B)continue;_=B.center,f=B.width,I=B.height}else p.pcb_drawing_type==="line"?(_={x:(p.x1+p.x2)/2,y:(p.y1+p.y2)/2},f=Math.abs(p.x2-p.x1),I=Math.abs(p.y2-p.y1)):"x"in p&&"y"in p&&(_={x:p.x,y:p.y},f="w"in p?p.w:"r"in p?p.r*2:"rX"in p&&"rY"in p?p.rX*2:0,I="h"in p?p.h:"r"in p?p.r*2:"rX"in p&&"rY"in p?p.rY*2:0);if(!_)continue;const C=xt(n,_),y={w:f*n.a,h:I*n.a},x=m.filter(E=>C.x===E.screen_x&&C.y===E.screen_y&&y.w===E.screen_w&&y.h===E.screen_h).length;m.push({...p,x:_.x,y:_.y,w:f,h:I,screen_x:C.x,screen_y:C.y,screen_w:y.w,screen_h:y.h,same_space_index:x})}return m},[s,n]),d=(m,p,_,f)=>{c({x:m,y:p});const I=xt(e5(_),{x:m,y:p}),C=xAn(f,I,_,i);QSi(new Set(C.map(y=>y._pcb_drawing_object_id)),new Set(s.map(y=>y._pcb_drawing_object_id)))||(a(C),r(C))};return z.jsxs("div",{ref:l,style:{position:"relative",width:"100%",height:"100%"},onMouseMove:m=>{if(n){const p=m.currentTarget.getBoundingClientRect(),_=m.clientX-p.left,f=m.clientY-p.top;d(_,f,n,o)}},onTouchStart:m=>{if(n){const p=m.touches[0],_=m.currentTarget.getBoundingClientRect(),f=p.clientX-_.left,I=p.clientY-_.top;d(f,I,n,o)}},children:[e,z.jsx(HSi,{elements:t,mousePos:A,highlightedPrimitives:h}),n&&z.jsxs(z.Fragment,{children:[z.jsx(PSi,{elements:t,highlightedPrimitives:h,transform:n,containerWidth:g,containerHeight:u}),z.jsx(wSi,{elements:t,highlightedPrimitives:h,transform:n,containerWidth:g,containerHeight:u}),z.jsx(DSi,{elements:t,highlightedPrimitives:h,transform:n,containerWidth:g,containerHeight:u}),z.jsx(NSi,{elements:t,highlightedPrimitives:h,transform:n,containerWidth:g,containerHeight:u})]})]})},EAn=["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)"],GSi=({children:t,transform:e=H0(),elements:n=[],hoveredComponentIds:o=[]})=>{const[i,{width:r,height:s}]=Wq(),a=te.useRef(null),{is_showing_pcb_groups:A,pcb_group_view_mode:c,is_showing_group_anchor_offsets:l}=Dc(g=>({is_showing_pcb_groups:g.is_showing_pcb_groups,pcb_group_view_mode:g.pcb_group_view_mode,is_showing_group_anchor_offsets:g.is_showing_group_anchor_offsets}));return te.useEffect(()=>{const g=a.current;if(!g||!r||!s)return;g.width=r,g.height=s;const u=g.getContext("2d");if(!u||(u.clearRect(0,0,r,s),!A))return;const h=n.filter(x=>x.type==="pcb_group"),d=n.filter(x=>x.type==="pcb_component"),m=n.filter(x=>x.type==="source_group"),p=new Map(m.map(x=>[x.source_group_id,x])),_=h.filter(x=>{if(x.name?.toLowerCase().includes("subpanel"))return!1;if(c==="all")return!0;if(!x.source_group_id)return!1;const E=p.get(x.source_group_id);return E?E.was_automatically_named!==!0:!1}),f=new Map;m.forEach(x=>{const E=x;if(E.parent_source_group_id){const B=f.get(E.parent_source_group_id)||[];B.push(x.source_group_id),f.set(E.parent_source_group_id,B)}});const I=x=>{const E=[],B=f.get(x)||[];for(const b of B)E.push(b),E.push(...I(b));return E},C=x=>{const E=m.find(B=>B.source_group_id===x);return E?.parent_source_group_id?1+C(E.parent_source_group_id):0},y=new Set;if(o.length>0)for(const x of d){if(!o.includes(x.pcb_component_id))continue;const E=x.positioned_relative_to_pcb_group_id??x.pcb_group_id;E&&y.add(E)}_.forEach((x,E)=>{let B=d.filter(Me=>Me.pcb_group_id===x.pcb_group_id);if(x.source_group_id){const Me=I(x.source_group_id),Oe=h.filter(ke=>ke.source_group_id&&Me.includes(ke.source_group_id));for(const ke of Oe){const be=d.filter(He=>He.pcb_group_id===ke.pcb_group_id);B=[...B,...be]}}let b,Q,w,D,k=!1;if(x.center&&x.width&&x.height){k=!0;const Me=x.width/2,Oe=x.height/2;b=x.center.x-Me,w=x.center.x+Me,Q=x.center.y-Oe,D=x.center.y+Oe}else if(B.length===0||(b=1/0,Q=1/0,w=-1/0,D=-1/0,B.forEach(Me=>{if(Me.center&&typeof Me.width=="number"&&typeof Me.height=="number"){const Oe=Me.center.x-Me.width/2,ke=Me.center.x+Me.width/2,be=Me.center.y+Me.height/2,He=Me.center.y-Me.height/2;b=Math.min(b,Oe),w=Math.max(w,ke),Q=Math.min(Q,He),D=Math.max(D,be)}}),b===1/0||w===-1/0))return;const T=x.source_group_id?C(x.source_group_id):0,H=x.source_group_id?I(x.source_group_id).length>0:!1;if(!k){const ke=1+(H?.5:0);b-=ke,w+=ke,Q-=ke,D+=ke}const G=xt(e,{x:b,y:D}),U=xt(e,{x:w,y:D}),Y=xt(e,{x:b,y:Q}),j=xt(e,{x:w,y:Q}),ee=EAn[E%EAn.length];u.strokeStyle=ee,u.lineWidth=2;const W=Math.max(4,Math.min(12,8*Math.abs(e.a))),Z=Math.max(2,Math.min(6,4*Math.abs(e.a))),se=W*(H?1.3:1),ne=Z;u.setLineDash([se,ne]),u.beginPath(),u.moveTo(G.x,G.y),u.lineTo(U.x,U.y),u.lineTo(j.x,j.y),u.lineTo(Y.x,Y.y),u.closePath(),u.stroke();const le=Math.max(8,Math.min(12,10*Math.abs(e.a))),he=T==0||T==1?0:T*.11,Ie=le*(1-he),ce=4,fe=x.name||`Group ${E+1}`;u.font=`${Ie}px sans-serif`,u.setLineDash([]);const Ce=u.measureText(fe).width+ce*2,Qe=Ie+ce*2,Pe=G.x-5,pe=G.y-5,ve=3;if(u.fillStyle="rgba(0, 0, 0, 0.8)",u.beginPath(),u.roundRect(Pe,pe-Qe,Ce,Qe,ve),u.fill(),u.fillStyle=ee,u.textAlign="left",u.textBaseline="middle",u.fillText(fe,Pe+ce,pe-Qe/2),l&&y.has(x.pcb_group_id)&&!!x.anchor_position&&x.anchor_position){const Me=Array.isArray(x.anchor_position)?{x:x.anchor_position[0]??0,y:x.anchor_position[1]??0}:{x:x.anchor_position.x,y:x.anchor_position.y},Oe=xt(e,Me);u.strokeStyle="white",u.lineWidth=1.5,u.setLineDash([]);const ke=Math.max(4,Math.min(8,6*Math.abs(e.a)));u.beginPath(),u.moveTo(Oe.x-ke,Oe.y),u.lineTo(Oe.x+ke,Oe.y),u.stroke(),u.beginPath(),u.moveTo(Oe.x,Oe.y-ke),u.lineTo(Oe.x,Oe.y+ke),u.stroke()}})},[n,e,r,s,A,c,l,o]),z.jsxs("div",{ref:i,style:{position:"relative",width:"100%",height:"100%"},children:[t,z.jsx("canvas",{ref:a,style:{position:"absolute",top:0,left:0,pointerEvents:"none",zIndex:xg.pcbGroupOverlay,display:A?"block":"none"}})]})},YSi=({transform:t,soup:e,children:n})=>{const o=Dc(a=>a.is_showing_rats_nest),{netMap:i,idToNetMap:r}=te.useMemo(()=>Nan(e||[]),[e]),s=te.useMemo(()=>{if(!e||!o)return[];const a=u=>{const h=dY(e)[u.replace(/_\d+$/,"")].get(u);return h&&"x"in h&&"y"in h?{x:h.x,y:h.y}:null},A=(u,h)=>{const d=i[h]||[];let m=null,p=1/0;return d.forEach(_=>{const f=a(_);if(f){const I=Math.sqrt((u.x-f.x)**2+(u.y-f.y)**2);I<p&&I>0&&(p=I,m=f)}}),m},c=dY(e).pcb_port.list(),l=dY(e).source_trace.list(),g=[];return c.forEach((u,h)=>{const d=r[u.pcb_port_id];let m=!1;for(const f of l)f.connected_source_port_ids.includes(u.source_port_id)&&f.connected_source_net_ids.length>0&&(m=!0);if(!d)return;const p={x:u.x,y:u.y},_=A(p,d);_&&g.push({key:`${u.pcb_port_id}-${h}`,startPoint:p,endPoint:_,isInNet:m})}),g},[e,i,r,o]);return!e||!o?n:(t||(t=H0()),z.jsxs("div",{style:{position:"relative"},children:[n,z.jsx("svg",{style:{position:"absolute",left:0,top:0,width:"100%",height:"100%",pointerEvents:"none",opacity:.5,zIndex:xg.ratsNestOverlay},children:s.map(({key:a,startPoint:A,endPoint:c,isInNet:l})=>{const g=xt(t,A),u=xt(t,c);return z.jsx("line",{x1:g.x,y1:g.y,x2:u.x,y2:u.y,stroke:"white",strokeWidth:"1",strokeDasharray:l?"6,6":void 0},a)})})]}))},USi={version:"1.11.404"},d7=(t,e,n)=>{const o=Dc(s=>s.is_mouse_over_container),i=te.useRef(o),r=te.useRef(e);te.useEffect(()=>{i.current=o},[o]),te.useEffect(()=>{r.current=e},[e]),te.useEffect(()=>{if(!t)return;const s=a=>{const A=a.target;if(A.tagName==="INPUT"||A.tagName==="TEXTAREA"||A.isContentEditable)return;const c=t.split("+"),l=c.includes("ctrl"),g=c.includes("shift"),u=c.includes("alt"),h=c.includes("meta"),d=c[c.length-1],m=n?.current?n.current.contains(document.activeElement)||document.activeElement===n.current:!1;(i.current||m)&&(!l||a.ctrlKey)&&(!g||a.shiftKey)&&(!u||a.altKey)&&(!h||a.metaKey)&&a.key.toLowerCase()===d.toLowerCase()&&(a.preventDefault(),r.current())};return window.addEventListener("keydown",s),()=>{window.removeEventListener("keydown",s)}},[t])},KSi=()=>{const[t,e]=te.useState(!1);return te.useEffect(()=>{const n=()=>{e(window.innerWidth<=768)};return n(),window.addEventListener("resize",n),()=>window.removeEventListener("resize",n)},[]),t},$q=(t,e={stopPropagation:!0})=>{const n=te.useRef(0),o=te.useCallback(s=>{e.stopPropagation&&s.stopPropagation();const a=Date.now();a-n.current<300||(n.current=a,t?.(s))},[t,e.stopPropagation]),i=te.useCallback(s=>{s.preventDefault(),o(s)},[o]);return{onClick:o,onTouchEnd:i,style:{touchAction:"manipulation"}}},tme=uY`
|
|
5491
5491
|
background: #222;
|
|
5492
5492
|
color: #eee;
|
|
5493
5493
|
border: 1px solid #555;
|
|
@@ -5544,7 +5544,7 @@ ${b.type}: ${k}
|
|
|
5544
5544
|
&:hover {
|
|
5545
5545
|
background-color: rgba(255, 255, 255, 0.1);
|
|
5546
5546
|
}
|
|
5547
|
-
`,...i,style:o,children:[z.jsx("input",{type:"radio",checked:e,onChange:()=>{},readOnly:!0}),z.jsx("span",{style:{color:"#eee"},children:t})]})},qSi=({children:t,elements:e,onContextMenuOpenChange:n,getNetAtPoint:o,xRayNetIds:i=[],onXRayNetsChange:r})=>{const s=KSi(),{isMouseOverContainer:a,setIsMouseOverContainer:A,selectedLayer:c,selectLayer:l,viewSettings:g,setIsShowingRatsNest:u,setIsShowingMultipleTracesLength:h,setIsShowingAutorouting:d,setIsShowingDrcErrors:m,setIsShowingDrcWarnings:p,setIsShowingCopperPours:_,setIsShowingCourtyards:f,setIsShowingPcbGroups:I,setIsShowingGroupAnchorOffsets:C,setIsShowingSolderMask:y,setIsShowingSilkscreen:x,setIsShowingFabricationNotes:E,setIsShowingPcbNotes:B,setPcbGroupViewMode:b,setHoveredErrorId:Q,setFocusedErrorId:w}=Dc(it=>({isMouseOverContainer:it.is_mouse_over_container,setIsMouseOverContainer:it.setIsMouseOverContainer,selectedLayer:it.selected_layer,selectLayer:it.selectLayer,viewSettings:{is_showing_rats_nest:it.is_showing_rats_nest,is_showing_multiple_traces_length:it.is_showing_multiple_traces_length,is_showing_autorouting:it.is_showing_autorouting,is_showing_drc_errors:it.is_showing_drc_errors,is_showing_drc_warnings:it.is_showing_drc_warnings,is_showing_copper_pours:it.is_showing_copper_pours,is_showing_courtyards:it.is_showing_courtyards,is_showing_pcb_groups:it.is_showing_pcb_groups,is_showing_group_anchor_offsets:it.is_showing_group_anchor_offsets,is_showing_solder_mask:it.is_showing_solder_mask,is_showing_silkscreen:it.is_showing_silkscreen,is_showing_fabrication_notes:it.is_showing_fabrication_notes,is_showing_pcb_notes:it.is_showing_pcb_notes,pcb_group_view_mode:it.pcb_group_view_mode},setIsShowingRatsNest:it.setIsShowingRatsNest,setIsShowingMultipleTracesLength:it.setIsShowingMultipleTracesLength,setIsShowingAutorouting:it.setIsShowingAutorouting,setIsShowingDrcErrors:it.setIsShowingDrcErrors,setIsShowingDrcWarnings:it.setIsShowingDrcWarnings,setIsShowingCopperPours:it.setIsShowingCopperPours,setIsShowingCourtyards:it.setIsShowingCourtyards,setIsShowingPcbGroups:it.setIsShowingPcbGroups,setIsShowingGroupAnchorOffsets:it.setIsShowingGroupAnchorOffsets,setIsShowingSolderMask:it.setIsShowingSolderMask,setIsShowingSilkscreen:it.setIsShowingSilkscreen,setIsShowingFabricationNotes:it.setIsShowingFabricationNotes,setIsShowingPcbNotes:it.setIsShowingPcbNotes,setPcbGroupViewMode:it.setPcbGroupViewMode,setHoveredErrorId:it.setHoveredErrorId,setFocusedErrorId:it.setFocusedErrorId})),[D,k]=te.useState(null),[T,H]=te.useState([]),[G,U]=te.useState(),[Y,j]=te.useState("Net"),ee=te.useRef(null),W=Dc(it=>it.in_edit_mode),Z=it=>{const Bt=it.currentTarget.getBoundingClientRect();return o?.({x:it.clientX-Bt.left,y:it.clientY-Bt.top})},ie=te.useCallback(()=>{k(null),n?.(!1)},[n]),[se,ne]=te.useState(!1),[le,he]=te.useState(!1),[Ie,ce]=te.useState(!1),[fe,de]=te.useState(!1),[Ce,Qe]=te.useState(!1);te.useEffect(()=>{const it=()=>de(!0),Bt=()=>de(!1),It=()=>Qe(!0),kt=()=>Qe(!1);return window.addEventListener("arm-dimension-tool",it),window.addEventListener("disarm-dimension-tool",Bt),window.addEventListener("arm-bounds-tool",It),window.addEventListener("disarm-bounds-tool",kt),()=>{window.removeEventListener("arm-dimension-tool",it),window.removeEventListener("disarm-dimension-tool",Bt),window.removeEventListener("arm-bounds-tool",It),window.removeEventListener("disarm-bounds-tool",kt)}},[]);const Pe=Xhe(e??[]),pe=Pe,ve=te.useRef(!1),we=te.useRef(null),Me={1:Pe[0]?()=>l(Pe[0]):()=>{},2:Pe[1]?()=>l(Pe[1]):()=>{},3:Pe[2]?()=>l(Pe[2]):()=>{},4:Pe[3]?()=>l(Pe[3]):()=>{},5:Pe[4]?()=>l(Pe[4]):()=>{},6:Pe[5]?()=>l(Pe[5]):()=>{},7:Pe[6]?()=>l(Pe[6]):()=>{},8:Pe[7]?()=>l(Pe[7]):()=>{},9:Pe[8]?()=>l(Pe[8]):()=>{},0:Pe[9]?()=>l(Pe[9]):()=>{}};d7("1",Me[1],we),d7("2",Me[2],we),d7("3",Me[3],we),d7("4",Me[4],we),d7("5",Me[5],we),d7("6",Me[6],we),d7("7",Me[7],we),d7("8",Me[8],we),d7("9",Me[9],we),d7("0",Me[0],we),te.useLayoutEffect(()=>{if(ve.current)return;ve.current=!0;const it=Bt=>{if(we.current){const It=we.current.getBoundingClientRect();Bt.clientX>=It.left&&Bt.clientX<=It.right&&Bt.clientY>=It.top&&Bt.clientY<=It.bottom&&A(!0)}document.removeEventListener("mousemove",it)};return document.addEventListener("mousemove",it),()=>{document.removeEventListener("mousemove",it)}},[A]);const Oe=te.useCallback(()=>{A(!0)},[A]),ke=te.useCallback(()=>{a||A(!0)},[a,A]),be=te.useCallback(()=>{A(!1),he(!1),ne(!1),ce(!1)},[A]),He=te.useCallback(()=>{he(!le)},[le]),ye=te.useCallback(()=>{const it=!Ie;ce(it),it&&ne(!1),it||Q(null)},[Ie,Q]),Fe=te.useCallback(()=>{ce(!1)},[]),Ye=te.useCallback(()=>{u(!g.is_showing_rats_nest)},[g.is_showing_rats_nest,u]),qe=te.useCallback(()=>{de(!0),Qe(!1),window.dispatchEvent(new Event("arm-dimension-tool"))},[]),st=te.useCallback(()=>{Qe(!0),de(!1),window.dispatchEvent(new Event("arm-bounds-tool"))},[]),At=te.useCallback(()=>{const it=!se;ne(it),it&&ce(!1)},[se]),nt=te.useCallback(it=>{it.stopPropagation()},[]);return z.jsxs("div",{ref:we,onPointerDown:it=>{ee.current={x:it.clientX,y:it.clientY}},onClick:it=>{if(it.detail>1||W||fe||Ce||it.target.closest("button, input, select, [role=menu]"))return;const Bt=ee.current;if(!Bt||Math.hypot(it.clientX-Bt.x,it.clientY-Bt.y)>4)return;const It=Z(it);if(!It)return;const kt=It.netId;i.includes(kt)?(r?.(i.filter(Ft=>Ft!==kt)),ie()):(U(kt),j(It.displayName),H(It.groups),n?.(!0),k({x:it.clientX,y:it.clientY}))},onDoubleClick:()=>{r?.([]),ie()},onContextMenu:it=>{it.preventDefault(),it.stopPropagation();const Bt=Z(it);U(Bt?.netId),j(Bt?.displayName??"Net"),H(Bt?.groups??[]),n?.(!0),k({x:it.clientX,y:it.clientY})},style:{position:"relative",zIndex:"999 !important"},onMouseEnter:Oe,onMouseLeave:be,onMouseMove:ke,children:[t,D&&z.jsx(VSi,{position:D,onClose:ie,xRayDisplayName:Y,xRayGroups:T.filter(it=>it.netIds.some(Bt=>!i.includes(Bt))),onXRayGroup:it=>r?.([...new Set([...i,...it.netIds])]),onXRayNet:G&&!i.includes(G)?()=>r?.([...i,G]):void 0,onExitXRayNet:i.length>0?()=>r?.([]):void 0}),z.jsxs("div",{style:{position:"absolute",bottom:4,right:8,pointerEvents:"none",color:"white",fontSize:11,opacity:a?.5:0,transition:"opacity 1s",transitionDelay:"2s",fontFamily:"sans-serif"},children:["@tscircuit/pcb-viewer@",USi.version]}),z.jsxs("div",{"data-toolbar-overlay":!0,onTouchStart:it=>it.stopPropagation(),onTouchEnd:it=>it.stopPropagation(),onTouchMove:it=>it.stopPropagation(),onMouseDown:nt,onMouseMove:nt,onMouseUp:nt,onPointerDown:nt,onPointerMove:nt,onPointerUp:nt,onWheel:nt,style:{position:"absolute",opacity:s||a?1:0,top:16,left:16,right:s?16:"auto",transition:a?"opacity 100ms linear":"opacity 300ms linear",zIndex:xg.toolbarOverlay,color:"red",display:"flex",flexWrap:"wrap",maxWidth:"550px",gap:4,fontSize:12,fontFamily:"sans-serif"},children:[z.jsxs(mY,{isSmallScreen:s,onClick:He,onMouseLeave:()=>{le&&he(!1)},children:[z.jsxs("div",{children:["layer:"," ",z.jsx("span",{style:{marginLeft:2,fontWeight:500,color:Xq[c]},children:c})]}),le&&z.jsx("div",{style:{marginTop:4,minWidth:120},children:pe.map(it=>z.jsx(XSi,{name:it,selected:it===c,onClick:()=>{l(it)}},it))})]}),z.jsx(jSi,{elements:e,isOpen:Ie,isSmallScreen:s,onToggle:ye,onClose:Fe,setHoveredErrorId:Q,setFocusedErrorId:w}),z.jsx(mY,{isSmallScreen:s,style:{},onClick:Ye,children:z.jsxs("div",{children:[g.is_showing_rats_nest?"✖ ":"","Rats Nest"]})}),z.jsx(mY,{isSmallScreen:s,style:fe?{backgroundColor:"#444"}:{},onClick:qe,children:z.jsx("div",{children:"📏"})}),z.jsx(mY,{isSmallScreen:s,style:Ce?{backgroundColor:"#444"}:{},onClick:st,children:z.jsx("div",{children:"Bounds"})}),z.jsx(mY,{isSmallScreen:s,onClick:At,children:z.jsxs("div",{children:[z.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"4px"},children:["View",z.jsx("span",{style:{fontSize:"8px",transform:se?"rotate(180deg)":"rotate(0)",transition:"transform 0.1s ease",display:"inline-block"},children:"▼"})]}),se&&z.jsxs("div",{style:{marginTop:4,minWidth:120},children:[z.jsx(V5,{label:"Show All Trace Lengths",checked:g.is_showing_multiple_traces_length,onClick:()=>{h(!g.is_showing_multiple_traces_length)}}),z.jsx(V5,{label:"Show Autorouting Animation",checked:g.is_showing_autorouting,onClick:()=>{d(!g.is_showing_autorouting)}}),z.jsx(V5,{label:"Show DRC Errors",checked:g.is_showing_drc_errors,onClick:()=>{m(!g.is_showing_drc_errors)}}),z.jsx(V5,{label:"Show DRC Warnings",checked:g.is_showing_drc_warnings,onClick:()=>{p(!g.is_showing_drc_warnings)}}),z.jsx(V5,{label:"Show Copper Pours",checked:g.is_showing_copper_pours,onClick:()=>{_(!g.is_showing_copper_pours)}}),z.jsx(V5,{label:"Show Courtyards",checked:g.is_showing_courtyards,onClick:()=>{f(!g.is_showing_courtyards)}}),z.jsx(V5,{label:"Show Solder Mask",checked:g.is_showing_solder_mask,onClick:()=>{y(!g.is_showing_solder_mask)}}),z.jsx(V5,{label:"Show Silkscreen",checked:g.is_showing_silkscreen,onClick:()=>{x(!g.is_showing_silkscreen)}}),z.jsx(V5,{label:"Show Fabrication Notes",checked:g.is_showing_fabrication_notes,onClick:()=>{E(!g.is_showing_fabrication_notes)}}),z.jsx(V5,{label:"Show PCB Notes",checked:g.is_showing_pcb_notes,onClick:()=>{B(!g.is_showing_pcb_notes)}}),z.jsx(V5,{label:"Show Group Anchor Offsets",checked:g.is_showing_group_anchor_offsets,onClick:()=>{C(!g.is_showing_group_anchor_offsets)}}),z.jsx(V5,{label:"Show PCB Groups",checked:g.is_showing_pcb_groups,onClick:()=>{I(!g.is_showing_pcb_groups)}}),g.is_showing_pcb_groups&&z.jsxs("div",{style:{marginLeft:16},children:[z.jsx(BAn,{label:"Show All Groups",checked:g.pcb_group_view_mode==="all",onClick:()=>{b("all")}}),z.jsx(BAn,{label:"Show Named Groups",checked:g.pcb_group_view_mode==="named_only",onClick:()=>{b("named_only")}})]})]})]})})]})]})},$Si=t=>t.type==="pcb_manual_edit_conflict_warning"||t.type==="pcb_connector_not_in_accessible_orientation_warning",ZSi=t=>t.type==="pcb_connector_not_in_accessible_orientation_warning"?`Connector faces ${t.facing_direction}; expected ${t.recommended_facing_direction}`:"Manual Edit Conflict",ebi=({children:t,transform:e=H0(),elements:n=[]})=>{const[o,{width:i,height:r}]=Wq(),s=te.useRef(null),a=Dc(A=>A.is_showing_drc_warnings);return te.useEffect(()=>{const A=s.current;if(!A||!i||!r)return;A.width=i,A.height=r;const c=A.getContext("2d");if(!c)return;c.clearRect(0,0,i,r);const l=n.filter(u=>u.type==="pcb_component"),g=n.filter($Si);c.strokeStyle=zi.board.drc_warning,c.lineWidth=2,g.forEach(u=>{const h=l.find(U=>U.pcb_component_id===u.pcb_component_id);if(!h)return;const{width:d,height:m,center:p}=h,_=xt(e,p),f=d*Math.abs(e.a),I=m*Math.abs(e.d),C=.1*Math.abs(e.a),y=f+C*2,x=I+C*2,E=_.x-y/2,B=_.y-x/2;c.beginPath(),c.rect(E,B,y,x),c.stroke();const b=ZSi(u),Q=4,w=Math.max(8,Math.min(12,10*Math.abs(e.a)));c.font=`${w}px sans-serif`;const k=c.measureText(b).width+Q*2,T=w+Q*2,H=E+(y-k)/2,G=B+x+5;c.fillStyle="rgba(0, 0, 0, 0.7)",c.beginPath(),c.roundRect(H,G,k,T,3),c.fill(),c.fillStyle=zi.board.drc_warning,c.textAlign="center",c.textBaseline="middle",c.fillText(b,H+k/2,G+T/2)})},[n,e,i,r,a]),a?z.jsxs("div",{ref:o,style:{position:"relative",width:"100%",height:"100%"},children:[t,z.jsx("canvas",{ref:s,style:{position:"absolute",top:0,left:0,pointerEvents:"none",zIndex:xg.warnings}})]}):z.jsx("div",{ref:o,style:{position:"relative",width:"100%",height:"100%"},children:t})},tbi=t=>{const{transform:e,elements:n}=t,{hoveredErrorId:o,focusedErrorId:i,isShowingCopperPours:r,selectedLayer:s}=Dc(b=>({hoveredErrorId:b.hovered_error_id,focusedErrorId:b.focused_error_id,isShowingCopperPours:b.is_showing_copper_pours,selectedLayer:b.selected_layer})),a=i??o,A=te.useMemo(()=>r?n:n.filter(b=>b.type!=="pcb_copper_pour"),[n,r]),c=te.useMemo(()=>{const b=S7i(n);return A.flatMap(Q=>b7i(Q,n,b))},[A,n]),l=te.useMemo(()=>Nan(n),[n]),[g,u]=te.useState([]);te.useEffect(()=>u([]),[l]);const h=te.useMemo(()=>g.length>0?A.filter(b=>Gan(b)&&g.includes(jq(b,l)??"")):void 0,[A,l,g]),d=b=>{if(!e)return;const Q=(k,T)=>({netId:k,displayName:O7i(T,n,l),groups:G7i(k,n,l)}),D=xAn(c,xt(e5(e),b),e,s,g.length>0).filter(k=>Gan(k._element)&&k.layer!=="drill");D.sort((k,T)=>+(T.layer===s)-+(k.layer===s));for(const k of D){const T=jq(k._element,l);if(T&&g.includes(T))return Q(T,k._element)}for(const k of D){const T=jq(k._element,l);if(T)return Q(T,k._element)}},[m,p]=te.useState({drawingObjectIdsWithMouseOver:new Set,primitiveIdsInMousedOverNet:[]}),[_,f]=te.useState([]),I=te.useRef(e??null),C=te.useRef(null),y=te.useMemo(()=>Ran(n),[n]),x=te.useMemo(()=>{if(!a)return[];const Q=n.filter(w=>w.type.includes("error")).find((w,D)=>hY(w,D)===a);return Q?k7i(Q):[]},[a,n]);te.useEffect(()=>{e&&(I.current=e)},[e]),te.useEffect(()=>()=>{Han(C.current)},[]),te.useEffect(()=>{if(!t.width||!t.height||!t.setTransform||!i)return;const b=Lan(n,i);if(!b)return;const Q=R7i({error:b,indexes:y});if(!Q)return;const w=I.current??e;if(!w)return;const D=T7i({bounds:Q,width:t.width,height:t.height});Han(C.current),H7i({startTransform:w,endTransform:D,durationMs:420,setAnimationFrameId:k=>{C.current=k},onUpdate:k=>{I.current=k,t.setTransform?.(k)}})},[i,n,y,t.height,t.setTransform,t.width]);const E=te.useMemo(()=>{if(g.length>0)return c;const b=[...m.primitiveIdsInMousedOverNet,...x];return Q7i({primitivesWithoutInteractionMetadata:c,drawingObjectIdsWithMouseOver:m.drawingObjectIdsWithMouseOver,primitiveIdsInMousedOverNet:b})},[c,m,x,g]),B=te.useCallback(b=>{const Q=[];for(const k of b)if(k._element){const T=l.getNetConnectedToId("pcb_port_id"in k._element?k._element?.pcb_port_id:"pcb_trace_id"in k._element?k._element?.pcb_trace_id:"");Q.push(...l.getIdsConnectedToNet(T))}const w=new Set(b.map(k=>k._pcb_drawing_object_id));p({drawingObjectIdsWithMouseOver:w,primitiveIdsInMousedOverNet:Q});const D=b.map(k=>k._parent_pcb_component?.type==="pcb_component"&&k._parent_pcb_component.pcb_component_id?k._parent_pcb_component.pcb_component_id:k._element?.type==="pcb_component"&&k._element.pcb_component_id?k._element.pcb_component_id:null).filter(k=>!!k);f(Array.from(new Set(D)))},[l]);return z.jsx(OSi,{elements:A,transform:e,primitives:c,selectedLayer:s,disableHoverHighlights:g.length>0,onMouseHoverOverPrimitives:B,children:z.jsx(BSi,{disabled:!t.allowEditing,transform:e,soup:n,cancelPanDrag:t.cancelPanDrag,onCreateEditEvent:t.onCreateEditEvent,onModifyEditEvent:t.onModifyEditEvent,children:z.jsx(xSi,{transform:e,focusOnHover:t.focusOnHover,primitives:c,onBoundsSelected:t.onBoundsSelected,cancelPanDrag:t.cancelPanDrag,children:z.jsx(qSi,{elements:n,getNetAtPoint:d,xRayNetIds:g,onXRayNetsChange:u,onContextMenuOpenChange:t.onContextMenuOpenChange,children:z.jsx(bSi,{transform:e,elements:n,children:z.jsx(YSi,{transform:e,soup:n,children:z.jsx(GSi,{transform:e,elements:n,hoveredComponentIds:_,children:z.jsx(lSi,{transform:e,debugGraphics:t.debugGraphics,children:z.jsx(ebi,{transform:e,elements:n,children:t.renderer==="canvas"?z.jsx(dze,{transform:e,primitives:E,elements:A,xRayElements:h,width:t.width,height:t.height,grid:t.grid}):z.jsx(Y8i,{transform:e,primitives:E,elements:n,xRayElements:h,width:t.width,height:t.height,grid:t.grid})})})})})})})})})})},nme=t=>Number.isFinite(t)?t.toFixed(4):"NaN",nbi=t=>{let e=5381;for(let n=0;n<t.length;n++)e=(e<<5)+e+t.charCodeAt(n);return Math.abs(e)},obi=t=>{if(!t?.length)return"0";const e=[];for(const i of t){if(!i?.type?.startsWith("pcb_"))continue;const r=U6i(i),s=cze([i]),a=[nme(s.minX),nme(s.minY),nme(s.maxX),nme(s.maxY)].join(",");let A=`${r}:${a}`;if(i.type==="pcb_trace"){const c=(i.route??[]).length;A+=`:${c}`;for(const l of i.route??[])l.route_type==="via"&&(A+=`:${l.tented_on_top}:${l.tented_on_bottom}`)}i.type==="pcb_board"&&(A+=`:${i.default_via_tented_on_top}:${i.default_via_tented_on_bottom}`),i.type==="pcb_via"&&(A+=`:${i.tented_on_top}:${i.tented_on_bottom}`),e.push(A)}if(e.length===0)return"0";e.sort();const n=e.join(","),o=nbi(n);return`${e.length}_${o.toString(36)}`},ibi=t=>{if(!t)return"empty";const e=t.find(o=>o.type==="pcb_board");if(!e)return"no-board";const n=o=>Math.round(o*1e3)/1e3;return e.outline?e.outline.map(o=>`${n(o.x)}_${n(o.y)}`).join(","):`${n(e.width)}_${n(e.height)}`},rbi=Wi($i(400,300),O0(40,-40)),fze=({circuitJson:t,debugGraphics:e,height:n=600,renderer:o="webgpu",initialState:i,allowEditing:r=!0,editEvents:s,onEditEventsChanged:a,onBoundsSelected:A,focusOnHover:c=!1,clickToInteractEnabled:l=!1,disablePcbGroups:g=!1})=>{const[u,h]=te.useState(o);te.useEffect(()=>h(o),[o]);const d=te.useMemo(()=>({renderer:u,setRenderer:h}),[u]),[m,p]=te.useState(!l),[_,f]=te.useState(!1),I=te.useRef(!1),[C,y]=Wq(),[x,E]=te.useState(rbi),B=te.useCallback(ne=>{if(I.current||ne instanceof MouseEvent&&(ne.button===2||(ne.buttons&2)!==0))return!1;const le=ne.target;return le instanceof Element?!le.closest("[data-toolbar-overlay]"):!0},[]),{ref:b,setTransform:Q,cancelDrag:w}=p7i({transform:x,onSetTransform:E,enabled:m&&!_,shouldDrag:B}),D=te.useCallback(ne=>{I.current=ne,ne&&w(),f(ne)},[w]);let[k,T]=te.useState([]);k=s??k;const H=te.useRef(!1),G=te.useRef(null),U=te.useMemo(()=>obi(t),[t]),Y=ibi(t),j=()=>{const ne=y?.width>0?y:{width:500,height:500},{center:le,width:he,height:Ie}=W.some(de=>de.type.startsWith("pcb_"))?X6i(W.filter(de=>de.type.startsWith("pcb_"))):{center:{x:0,y:0},width:.001,height:.001},ce=Math.min((ne.width??0)/he,(ne.height??0)/Ie,100)*.75,fe=Wi($i((ne.width??0)/2,(ne.height??0)/2),O0(ce,-ce,0,0),$i(-le.x,-le.y));Q(fe)};te.useEffect(()=>{y?.width&&t&&t.length!==0&&(H.current||(j(),H.current=!0))},[t,y]),te.useEffect(()=>{H.current===!0&&j()},[Y]);const ee=te.useMemo(()=>t?.filter(ne=>ne.type.startsWith("pcb_")||ne.type.startsWith("source_"))??[],[U]),W=te.useMemo(()=>ZOo({circuitJson:ee,editEvents:k}),[ee,k]),Z=ne=>{T([...k,ne]),a?.([...k,ne])},ie=ne=>{const le=k.map(he=>he.edit_event_id===ne.edit_event_id?{...he,...ne}:he);T(le),a?.(le)},se=te.useMemo(()=>({...i,...g&&{is_showing_pcb_groups:!1}}),[i,g]);return z.jsx(Ban.Provider,{value:d,children:z.jsxs("div",{ref:b,style:{position:"relative"},onContextMenu:ne=>ne.preventDefault(),children:[z.jsx("div",{ref:C,children:z.jsxs(o7i,{initialState:se,disablePcbGroups:g,children:[z.jsx(tbi,{renderer:u,transform:x,setTransform:Q,height:n,width:y.width,allowEditing:r,focusOnHover:c,onBoundsSelected:A,cancelPanDrag:w,onContextMenuOpenChange:D,onCreateEditEvent:Z,onModifyEditEvent:ie,grid:{spacing:1,view_window:{left:0,right:y.width||500,top:n,bottom:0}},elements:W,debugGraphics:e}),z.jsx(i7i,{})]})}),l&&!m&&z.jsx("div",{onClick:()=>{p(!0),j()},onTouchStart:ne=>{const le=ne.touches[0];G.current={x:le.clientX,y:le.clientY}},onTouchEnd:ne=>{const le=ne.changedTouches[0],he=G.current;if(!he)return;const Ie=Math.abs(le.clientX-he.x),ce=Math.abs(le.clientY-he.y);Ie<10&&ce<10&&(ne.preventDefault(),p(!0),j()),G.current=null},style:{position:"absolute",inset:0,cursor:"pointer",zIndex:xg.clickToInteractOverlay,display:"flex",alignItems:"center",justifyContent:"center",touchAction:"pan-x pan-y pinch-zoom"},children:z.jsx("div",{style:{backgroundColor:"rgba(0, 0, 0, 0.8)",color:"white",padding:"12px 24px",borderRadius:"8px",fontSize:"16px",pointerEvents:"none"},children:typeof window<"u"&&("ontouchstart"in window||navigator.maxTouchPoints>0)?"Touch to Interact":"Click to Interact"})})]})})};const sbi=({circuitJson:t,containerClassName:e,...n})=>{const o=te.useRef(null),[i,r]=te.useState(620);return te.useLayoutEffect(()=>{const s=()=>{if(o.current){const A=o.current.clientHeight,c=window.innerHeight;r(Math.min(Math.max(A,620),c))}};s();const a=new ResizeObserver(s);return o.current&&a.observe(o.current),window.addEventListener("resize",s),()=>{a.disconnect(),window.removeEventListener("resize",s)}},[]),z.jsx("div",{ref:o,className:e||"rf-w-full rf-h-full",children:z.jsx(fze,{...n,circuitJson:t,height:i})})},abi='*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-feature-settings:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]:where(:not([hidden=until-found])){display:none}:root{--radius:0.5rem}.rf-pointer-events-none{pointer-events:none}.rf-invisible{visibility:hidden}.rf-fixed{position:fixed}.rf-absolute{position:absolute}.rf-relative{position:relative}.rf-inset-0{inset:0}.-rf-left-2{left:-.5rem}.-rf-right-10{right:-2.5rem}.-rf-right-2{right:-.5rem}.-rf-right-4{right:-1rem}.-rf-right-6{right:-1.5rem}.-rf-right-7{right:-1.75rem}.-rf-right-8{right:-2rem}.-rf-right-9{right:-2.25rem}.rf-bottom-full{bottom:100%}.rf-left-0{left:0}.rf-left-1{left:.25rem}.rf-left-1\\/2{left:50%}.rf-left-2{left:.5rem}.rf-left-\\[50\\%\\]{left:50%}.rf-right-0{right:0}.rf-right-1{right:.25rem}.rf-right-4{right:1rem}.rf-right-\\[4px\\]{right:4px}.rf-top-0{top:0}.rf-top-1{top:.25rem}.rf-top-2{top:.5rem}.rf-top-2\\.5{top:.625rem}.rf-top-\\[50\\%\\]{top:50%}.rf-top-\\[6px\\]{top:6px}.\\!rf-z-\\[101\\]{z-index:101!important}.\\!rf-z-\\[200\\]{z-index:200!important}.rf-z-10{z-index:10}.rf-z-50{z-index:50}.rf-z-\\[100\\]{z-index:100}.rf-z-\\[101\\]{z-index:101}.rf-z-\\[102\\]{z-index:102}.rf-order-1{order:1}.rf-order-2{order:2}.rf-order-3{order:3}.rf-m-0{margin:0}.rf-m-1{margin:.25rem}.rf-m-6{margin:1.5rem}.-rf-mx-1,.rf--mx-1{margin-left:-.25rem;margin-right:-.25rem}.rf-mx-1{margin-left:.25rem;margin-right:.25rem}.rf-mx-2{margin-left:.5rem;margin-right:.5rem}.rf-mx-4{margin-left:1rem;margin-right:1rem}.rf-mx-auto{margin-left:auto;margin-right:auto}.rf-my-1{margin-bottom:.25rem;margin-top:.25rem}.rf-my-12{margin-bottom:3rem;margin-top:3rem}.rf-my-4{margin-bottom:1rem;margin-top:1rem}.rf-my-auto{margin-bottom:auto;margin-top:auto}.rf-mb-0{margin-bottom:0}.rf-mb-0\\.5{margin-bottom:.125rem}.rf-mb-1{margin-bottom:.25rem}.rf-mb-12{margin-bottom:3rem}.rf-mb-2{margin-bottom:.5rem}.rf-mb-3{margin-bottom:.75rem}.rf-mb-4{margin-bottom:1rem}.rf-mb-6{margin-bottom:1.5rem}.rf-mb-7{margin-bottom:1.75rem}.rf-mb-8{margin-bottom:2rem}.rf-ml-1{margin-left:.25rem}.rf-ml-2{margin-left:.5rem}.rf-ml-6{margin-left:1.5rem}.rf-ml-auto{margin-left:auto}.rf-mr-1{margin-right:.25rem}.rf-mr-2{margin-right:.5rem}.rf-mr-4{margin-right:1rem}.rf-mr-auto{margin-right:auto}.rf-mt-0{margin-top:0}.rf-mt-0\\.5{margin-top:.125rem}.rf-mt-1{margin-top:.25rem}.rf-mt-2{margin-top:.5rem}.rf-mt-3{margin-top:.75rem}.rf-mt-4{margin-top:1rem}.rf-mt-5{margin-top:1.25rem}.rf-mt-auto{margin-top:auto}.rf-block{display:block}.rf-inline-block{display:inline-block}.rf-inline{display:inline}.rf-flex{display:flex}.rf-inline-flex{display:inline-flex}.rf-grid{display:grid}.rf-hidden{display:none}.rf-aspect-\\[4\\/3\\]{aspect-ratio:4/3}.rf-aspect-square{aspect-ratio:1/1}.rf-aspect-video{aspect-ratio:16/9}.rf-size-14{height:3.5rem;width:3.5rem}.rf-size-2{height:.5rem;width:.5rem}.rf-size-3{height:.75rem;width:.75rem}.rf-size-4{height:1rem;width:1rem}.\\!rf-h-2{height:.5rem!important}.\\!rf-h-2\\.5{height:.625rem!important}.rf-h-0{height:0}.rf-h-0\\.5{height:.125rem}.rf-h-1{height:.25rem}.rf-h-10{height:2.5rem}.rf-h-12{height:3rem}.rf-h-2{height:.5rem}.rf-h-2\\.5{height:.625rem}.rf-h-20{height:5rem}.rf-h-24{height:6rem}.rf-h-3{height:.75rem}.rf-h-3\\.5{height:.875rem}.rf-h-4{height:1rem}.rf-h-5{height:1.25rem}.rf-h-6{height:1.5rem}.rf-h-60{height:15rem}.rf-h-64{height:16rem}.rf-h-7{height:1.75rem}.rf-h-8{height:2rem}.rf-h-9{height:2.25rem}.rf-h-\\[400px\\]{height:400px}.rf-h-\\[calc\\(100vh-52px\\)\\]{height:calc(100vh - 52px)}.rf-h-\\[calc\\(100vh-60px\\)\\]{height:calc(100vh - 60px)}.rf-h-\\[var\\(--radix-select-trigger-height\\)\\]{height:var(--radix-select-trigger-height)}.rf-h-auto{height:auto}.rf-h-fit{height:-moz-fit-content;height:fit-content}.rf-h-full{height:100%}.rf-h-px{height:1px}.rf-h-screen{height:100vh}.\\!rf-max-h-\\[40vh\\]{max-height:40vh!important}.\\!rf-max-h-\\[80vh\\]{max-height:80vh!important}.rf-max-h-16{max-height:4rem}.rf-max-h-20{max-height:5rem}.rf-max-h-24{max-height:6rem}.rf-max-h-28{max-height:7rem}.rf-max-h-32{max-height:8rem}.rf-max-h-64{max-height:16rem}.rf-max-h-96{max-height:24rem}.rf-max-h-\\[120px\\]{max-height:120px}.rf-max-h-\\[150px\\]{max-height:150px}.rf-max-h-\\[200px\\]{max-height:200px}.rf-max-h-\\[300px\\]{max-height:300px}.rf-max-h-\\[90vh\\]{max-height:90vh}.rf-max-h-full{max-height:100%}.rf-max-h-none{max-height:none}.rf-min-h-0{min-height:0}.rf-min-h-56{min-height:14rem}.rf-min-h-72{min-height:18rem}.rf-min-h-\\[100px\\]{min-height:100px}.rf-min-h-\\[200px\\]{min-height:200px}.rf-min-h-\\[300px\\]{min-height:300px}.rf-min-h-\\[360px\\]{min-height:360px}.rf-min-h-\\[400px\\]{min-height:400px}.rf-min-h-\\[620px\\]{min-height:620px}.rf-min-h-\\[calc\\(100vh-240px\\)\\]{min-height:calc(100vh - 240px)}.rf-min-h-full{min-height:100%}.\\!rf-w-2{width:.5rem!important}.\\!rf-w-2\\.5{width:.625rem!important}.\\!rf-w-\\[95vw\\]{width:95vw!important}.rf-w-1{width:.25rem}.rf-w-10{width:2.5rem}.rf-w-11{width:2.75rem}.rf-w-11\\/12{width:91.666667%}.rf-w-12{width:3rem}.rf-w-16{width:4rem}.rf-w-2{width:.5rem}.rf-w-2\\.5{width:.625rem}.rf-w-20{width:5rem}.rf-w-24{width:6rem}.rf-w-28{width:7rem}.rf-w-3{width:.75rem}.rf-w-3\\.5{width:.875rem}.rf-w-32{width:8rem}.rf-w-4{width:1rem}.rf-w-40{width:10rem}.rf-w-48{width:12rem}.rf-w-5{width:1.25rem}.rf-w-6{width:1.5rem}.rf-w-64{width:16rem}.rf-w-7{width:1.75rem}.rf-w-72{width:18rem}.rf-w-8{width:2rem}.rf-w-80{width:20rem}.rf-w-9{width:2.25rem}.rf-w-96{width:24rem}.rf-w-fit{width:-moz-fit-content;width:fit-content}.rf-w-full{width:100%}.rf-w-screen{width:100vw}.rf-min-w-0{min-width:0}.rf-min-w-10{min-width:2.5rem}.rf-min-w-16{min-width:4rem}.rf-min-w-32{min-width:8rem}.rf-min-w-80{min-width:20rem}.rf-min-w-96{min-width:24rem}.rf-min-w-\\[12px\\]{min-width:12px}.rf-min-w-\\[148px\\]{min-width:148px}.rf-min-w-\\[192px\\]{min-width:192px}.rf-min-w-\\[600px\\]{min-width:600px}.rf-min-w-\\[8rem\\]{min-width:8rem}.rf-min-w-\\[var\\(--radix-select-trigger-width\\)\\]{min-width:var(--radix-select-trigger-width)}.\\!rf-max-w-\\[95vw\\]{max-width:95vw!important}.rf-max-w-2xl{max-width:42rem}.rf-max-w-3xl{max-width:48rem}.rf-max-w-4xl{max-width:56rem}.rf-max-w-5xl{max-width:64rem}.rf-max-w-64{max-width:16rem}.rf-max-w-7xl{max-width:80rem}.rf-max-w-96{max-width:24rem}.rf-max-w-\\[1000px\\]{max-width:1000px}.rf-max-w-\\[150px\\]{max-width:150px}.rf-max-w-\\[200px\\]{max-width:200px}.rf-max-w-\\[320px\\]{max-width:320px}.rf-max-w-\\[40\\%\\]{max-width:40%}.rf-max-w-\\[600px\\]{max-width:600px}.rf-max-w-full{max-width:100%}.rf-max-w-lg{max-width:32rem}.rf-max-w-md{max-width:28rem}.rf-max-w-none{max-width:none}.rf-max-w-xl{max-width:36rem}.rf-max-w-xs{max-width:20rem}.rf-flex-1{flex:1 1 0%}.rf-flex-shrink-0,.rf-shrink-0{flex-shrink:0}.rf-flex-grow{flex-grow:1}.rf-table-auto{table-layout:auto}.rf-origin-\\[--radix-popover-content-transform-origin\\]{transform-origin:var(--radix-popover-content-transform-origin)}.-rf-translate-x-1{--tw-translate-x:-0.25rem}.-rf-translate-x-1,.-rf-translate-x-1\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rf-translate-x-1\\/2{--tw-translate-x:-50%}.-rf-translate-y-1{--tw-translate-y:-0.25rem}.-rf-translate-y-1,.rf--translate-x-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rf--translate-x-1{--tw-translate-x:-0.25rem}.rf--translate-x-1\\/2{--tw-translate-x:-50%}.rf--translate-x-1\\/2,.rf--translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rf--translate-y-0{--tw-translate-y:-0px}.rf--translate-y-1{--tw-translate-y:-0.25rem}.rf--translate-y-1,.rf-translate-x-\\[-50\\%\\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rf-translate-x-\\[-50\\%\\]{--tw-translate-x:-50%}.rf-translate-y-\\[-50\\%\\]{--tw-translate-y:-50%}.-rf-rotate-90,.rf-translate-y-\\[-50\\%\\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rf-rotate-90{--tw-rotate:-90deg}.rf-rotate-90{--tw-rotate:90deg}.rf-rotate-90,.rf-transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes rf-pulse{50%{opacity:.5}}.rf-animate-pulse{animation:rf-pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes rf-spin{to{transform:rotate(1turn)}}.rf-animate-spin{animation:rf-spin 1s linear infinite}.rf-cursor-default{cursor:default}.rf-cursor-not-allowed{cursor:not-allowed}.rf-cursor-pointer{cursor:pointer}.rf-select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.rf-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.rf-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.rf-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.rf-flex-row{flex-direction:row}.rf-flex-col{flex-direction:column}.rf-flex-col-reverse{flex-direction:column-reverse}.rf-flex-wrap{flex-wrap:wrap}.rf-place-content-center{place-content:center}.rf-place-items-center{place-items:center}.rf-items-start{align-items:flex-start}.rf-items-end{align-items:flex-end}.rf-items-center{align-items:center}.rf-items-baseline{align-items:baseline}.rf-items-stretch{align-items:stretch}.rf-justify-end{justify-content:flex-end}.rf-justify-center{justify-content:center}.rf-justify-between{justify-content:space-between}.rf-gap-0{gap:0}.rf-gap-1{gap:.25rem}.rf-gap-1\\.5{gap:.375rem}.rf-gap-2{gap:.5rem}.rf-gap-3{gap:.75rem}.rf-gap-4{gap:1rem}.rf-gap-5{gap:1.25rem}.rf-gap-6{gap:1.5rem}.rf-gap-8{gap:2rem}.rf-gap-x-5{-moz-column-gap:1.25rem;column-gap:1.25rem}.rf-gap-y-1{row-gap:.25rem}.rf-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.rf-space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.rf-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.rf-space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.rf-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.rf-space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.rf-divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.rf-overflow-auto{overflow:auto}.rf-overflow-hidden{overflow:hidden}.rf-overflow-visible{overflow:visible}.rf-overflow-x-auto{overflow-x:auto}.\\!rf-overflow-y-auto{overflow-y:auto!important}.rf-overflow-y-auto{overflow-y:auto}.rf-overflow-x-hidden{overflow-x:hidden}.rf-overflow-x-clip{overflow-x:clip}.rf-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rf-whitespace-normal{white-space:normal}.rf-whitespace-nowrap{white-space:nowrap}.rf-whitespace-pre-wrap{white-space:pre-wrap}.rf-text-nowrap{text-wrap:nowrap}.rf-break-words{overflow-wrap:break-word}.rf-break-all{word-break:break-all}.rf-rounded{border-radius:.25rem}.rf-rounded-2xl{border-radius:1rem}.rf-rounded-full{border-radius:9999px}.rf-rounded-lg{border-radius:var(--radius)}.rf-rounded-md{border-radius:calc(var(--radius) - 2px)}.rf-rounded-none{border-radius:0}.rf-rounded-sm{border-radius:calc(var(--radius) - 4px)}.rf-rounded-xl{border-radius:.75rem}.rf-border{border-width:1px}.rf-border-0{border-width:0}.rf-border-2{border-width:2px}.rf-border-y{border-top-width:1px}.rf-border-b,.rf-border-y{border-bottom-width:1px}.rf-border-l-2{border-left-width:2px}.rf-border-l-4{border-left-width:4px}.rf-border-r{border-right-width:1px}.rf-border-t{border-top-width:1px}.rf-border-none{border-style:none}.rf-border-blue-100{--tw-border-opacity:1;border-color:rgb(219 234 254/var(--tw-border-opacity,1))}.rf-border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}.rf-border-blue-300{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity,1))}.rf-border-blue-400{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity,1))}.rf-border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.rf-border-blue-600{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity,1))}.rf-border-border{border-color:hsl(var(--border))}.rf-border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity,1))}.rf-border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity,1))}.rf-border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.rf-border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.rf-border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.rf-border-green-400{--tw-border-opacity:1;border-color:rgb(74 222 128/var(--tw-border-opacity,1))}.rf-border-input{border-color:hsl(var(--input))}.rf-border-neutral-200{--tw-border-opacity:1;border-color:rgb(229 229 229/var(--tw-border-opacity,1))}.rf-border-orange-100{--tw-border-opacity:1;border-color:rgb(255 237 213/var(--tw-border-opacity,1))}.rf-border-orange-200{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity,1))}.rf-border-orange-500{--tw-border-opacity:1;border-color:rgb(249 115 22/var(--tw-border-opacity,1))}.rf-border-primary{border-color:hsl(var(--primary))}.rf-border-red-100{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity,1))}.rf-border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.rf-border-red-300{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity,1))}.rf-border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity,1))}.rf-border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.rf-border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity,1))}.rf-border-red-700{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity,1))}.rf-border-red-800{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity,1))}.rf-border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1))}.rf-border-slate-700{--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity,1))}.rf-border-slate-800{--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity,1))}.rf-border-slate-800\\/60{border-color:rgba(30,41,59,.6)}.rf-border-transparent{border-color:transparent}.rf-border-yellow-200{--tw-border-opacity:1;border-color:rgb(254 240 138/var(--tw-border-opacity,1))}.rf-border-zinc-100{--tw-border-opacity:1;border-color:rgb(244 244 245/var(--tw-border-opacity,1))}.rf-border-zinc-200{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity,1))}.rf-border-zinc-900{--tw-border-opacity:1;border-color:rgb(24 24 27/var(--tw-border-opacity,1))}.rf-border-l-blue-500{--tw-border-opacity:1;border-left-color:rgb(59 130 246/var(--tw-border-opacity,1))}.rf-border-t-blue-600{--tw-border-opacity:1;border-top-color:rgb(37 99 235/var(--tw-border-opacity,1))}.rf-bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}.rf-bg-amber-50\\/30{background-color:rgba(255,251,235,.3)}.rf-bg-background{background-color:hsl(var(--background))}.rf-bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.rf-bg-black\\/80{background-color:rgba(0,0,0,.8)}.rf-bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.rf-bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.rf-bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.rf-bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.rf-bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity,1))}.rf-bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.rf-bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.rf-bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.rf-bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity,1))}.rf-bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.rf-bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.rf-bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.rf-bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.rf-bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.rf-bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.rf-bg-green-300{--tw-bg-opacity:1;background-color:rgb(134 239 172/var(--tw-bg-opacity,1))}.rf-bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.rf-bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.rf-bg-muted{background-color:hsl(var(--muted))}.rf-bg-neutral-100{--tw-bg-opacity:1;background-color:rgb(245 245 245/var(--tw-bg-opacity,1))}.rf-bg-neutral-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.rf-bg-neutral-800{--tw-bg-opacity:1;background-color:rgb(38 38 38/var(--tw-bg-opacity,1))}.rf-bg-neutral-900{--tw-bg-opacity:1;background-color:rgb(23 23 23/var(--tw-bg-opacity,1))}.rf-bg-orange-100{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity,1))}.rf-bg-orange-400{--tw-bg-opacity:1;background-color:rgb(251 146 60/var(--tw-bg-opacity,1))}.rf-bg-orange-50{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity,1))}.rf-bg-orange-50\\/50{background-color:rgba(255,247,237,.5)}.rf-bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity,1))}.rf-bg-popover{background-color:hsl(var(--popover))}.rf-bg-purple-500{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity,1))}.rf-bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.rf-bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.rf-bg-red-50\\/50{background-color:rgba(254,242,242,.5)}.rf-bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.rf-bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.rf-bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.rf-bg-red-950{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity,1))}.rf-bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.rf-bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.rf-bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.rf-bg-transparent{background-color:transparent}.rf-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.rf-bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity,1))}.rf-bg-yellow-50{--tw-bg-opacity:1;background-color:rgb(254 252 232/var(--tw-bg-opacity,1))}.rf-bg-zinc-100{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.rf-bg-zinc-200{--tw-bg-opacity:1;background-color:rgb(228 228 231/var(--tw-bg-opacity,1))}.rf-bg-zinc-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.rf-bg-zinc-800{--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.rf-bg-zinc-900{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity,1))}.rf-bg-zinc-950{--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity,1))}.rf-bg-opacity-50{--tw-bg-opacity:0.5}.rf-bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.rf-from-blue-500{--tw-gradient-from:#3b82f6 var(--tw-gradient-from-position);--tw-gradient-to:rgba(59,130,246,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.rf-from-emerald-500{--tw-gradient-from:#10b981 var(--tw-gradient-from-position);--tw-gradient-to:rgba(16,185,129,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.rf-from-green-500{--tw-gradient-from:#22c55e var(--tw-gradient-from-position);--tw-gradient-to:rgba(34,197,94,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.rf-from-red-500{--tw-gradient-from:#ef4444 var(--tw-gradient-from-position);--tw-gradient-to:rgba(239,68,68,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.rf-to-blue-600{--tw-gradient-to:#2563eb var(--tw-gradient-to-position)}.rf-to-emerald-600{--tw-gradient-to:#059669 var(--tw-gradient-to-position)}.rf-to-green-600{--tw-gradient-to:#16a34a var(--tw-gradient-to-position)}.rf-to-red-600{--tw-gradient-to:#dc2626 var(--tw-gradient-to-position)}.rf-fill-amber-500{fill:#f59e0b}.rf-fill-current{fill:currentColor}.rf-stroke-1{stroke-width:1}.rf-object-contain{-o-object-fit:contain;object-fit:contain}.rf-object-cover{-o-object-fit:cover;object-fit:cover}.\\!rf-p-0{padding:0!important}.rf-p-0{padding:0}.rf-p-1{padding:.25rem}.rf-p-2{padding:.5rem}.rf-p-3{padding:.75rem}.rf-p-4{padding:1rem}.rf-p-5{padding:1.25rem}.rf-p-6{padding:1.5rem}.rf-p-8{padding:2rem}.rf-px-1{padding-left:.25rem;padding-right:.25rem}.rf-px-1\\.5{padding-left:.375rem;padding-right:.375rem}.rf-px-2{padding-left:.5rem;padding-right:.5rem}.rf-px-2\\.5{padding-left:.625rem;padding-right:.625rem}.rf-px-3{padding-left:.75rem;padding-right:.75rem}.rf-px-4{padding-left:1rem;padding-right:1rem}.rf-px-5{padding-left:1.25rem;padding-right:1.25rem}.rf-px-6{padding-left:1.5rem;padding-right:1.5rem}.rf-px-8{padding-left:2rem;padding-right:2rem}.rf-py-0{padding-bottom:0;padding-top:0}.rf-py-0\\.5{padding-bottom:.125rem;padding-top:.125rem}.rf-py-1{padding-bottom:.25rem;padding-top:.25rem}.rf-py-1\\.5{padding-bottom:.375rem;padding-top:.375rem}.rf-py-10{padding-bottom:2.5rem;padding-top:2.5rem}.rf-py-12{padding-bottom:3rem;padding-top:3rem}.rf-py-2{padding-bottom:.5rem;padding-top:.5rem}.rf-py-3{padding-bottom:.75rem;padding-top:.75rem}.rf-py-4{padding-bottom:1rem;padding-top:1rem}.rf-py-6{padding-bottom:1.5rem;padding-top:1.5rem}.rf-py-8{padding-bottom:2rem;padding-top:2rem}.rf-pb-0{padding-bottom:0}.rf-pb-1{padding-bottom:.25rem}.rf-pb-1\\.5{padding-bottom:.375rem}.rf-pb-2{padding-bottom:.5rem}.rf-pb-3{padding-bottom:.75rem}.rf-pb-4{padding-bottom:1rem}.rf-pb-px{padding-bottom:1px}.rf-pl-10{padding-left:2.5rem}.rf-pl-11{padding-left:2.75rem}.rf-pl-12{padding-left:3rem}.rf-pl-2{padding-left:.5rem}.rf-pl-4{padding-left:1rem}.rf-pl-8{padding-left:2rem}.rf-pr-2{padding-right:.5rem}.rf-pt-0{padding-top:0}.rf-pt-1{padding-top:.25rem}.rf-pt-2{padding-top:.5rem}.rf-pt-4{padding-top:1rem}.rf-text-left{text-align:left}.rf-text-center{text-align:center}.rf-text-right{text-align:right}.rf-align-bottom{vertical-align:bottom}.rf-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.rf-font-sans{font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.rf-text-2xl{font-size:1.5rem;line-height:2rem}.rf-text-3xl{font-size:1.875rem;line-height:2.25rem}.rf-text-\\[10px\\]{font-size:10px}.rf-text-\\[11px\\]{font-size:11px}.rf-text-\\[8px\\]{font-size:8px}.rf-text-base{font-size:1rem;line-height:1.5rem}.rf-text-lg{font-size:1.125rem;line-height:1.75rem}.rf-text-sm{font-size:.875rem;line-height:1.25rem}.rf-text-xl{font-size:1.25rem;line-height:1.75rem}.rf-text-xs{font-size:.75rem;line-height:1rem}.\\!rf-font-normal{font-weight:400!important}.rf-font-bold{font-weight:700}.rf-font-medium{font-weight:500}.rf-font-normal{font-weight:400}.rf-font-semibold{font-weight:600}.rf-uppercase{text-transform:uppercase}.rf-capitalize{text-transform:capitalize}.rf-tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.rf-leading-4{line-height:1rem}.rf-leading-5{line-height:1.25rem}.rf-leading-\\[0\\.95rem\\]{line-height:.95rem}.rf-leading-\\[1rem\\]{line-height:1rem}.rf-leading-none{line-height:1}.rf-leading-relaxed{line-height:1.625}.rf-leading-tight{line-height:1.25}.rf-tracking-tight{letter-spacing:-.025em}.rf-tracking-wide{letter-spacing:.025em}.rf-tracking-wider{letter-spacing:.05em}.rf-tracking-widest{letter-spacing:.1em}.rf-text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity,1))}.rf-text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.rf-text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.rf-text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.rf-text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.rf-text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.rf-text-blue-900{--tw-text-opacity:1;color:rgb(30 58 138/var(--tw-text-opacity,1))}.rf-text-current{color:currentColor}.rf-text-emerald-600{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity,1))}.rf-text-foreground{color:hsl(var(--foreground))}.rf-text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.rf-text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.rf-text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.rf-text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.rf-text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.rf-text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.rf-text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.rf-text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.rf-text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.rf-text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.rf-text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.rf-text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity,1))}.rf-text-green-900{--tw-text-opacity:1;color:rgb(20 83 45/var(--tw-text-opacity,1))}.rf-text-muted{color:hsl(var(--muted))}.rf-text-muted-foreground{color:hsl(var(--muted-foreground))}.rf-text-neutral-50{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.rf-text-neutral-500{--tw-text-opacity:1;color:rgb(115 115 115/var(--tw-text-opacity,1))}.rf-text-neutral-900{--tw-text-opacity:1;color:rgb(23 23 23/var(--tw-text-opacity,1))}.rf-text-neutral-950{--tw-text-opacity:1;color:rgb(10 10 10/var(--tw-text-opacity,1))}.rf-text-orange-400{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity,1))}.rf-text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity,1))}.rf-text-orange-600{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity,1))}.rf-text-orange-700{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity,1))}.rf-text-orange-800{--tw-text-opacity:1;color:rgb(154 52 18/var(--tw-text-opacity,1))}.rf-text-popover-foreground{color:hsl(var(--popover-foreground))}.rf-text-red-200{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity,1))}.rf-text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.rf-text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.rf-text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.rf-text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.rf-text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.rf-text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity,1))}.rf-text-red-900{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity,1))}.rf-text-slate-200{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity,1))}.rf-text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.rf-text-slate-50{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity,1))}.rf-text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}.rf-text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}.rf-text-slate-800{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity,1))}.rf-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.rf-text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity,1))}.rf-text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity,1))}.rf-text-yellow-600{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity,1))}.rf-text-yellow-700{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity,1))}.rf-text-yellow-900{--tw-text-opacity:1;color:rgb(113 63 18/var(--tw-text-opacity,1))}.rf-text-zinc-200{--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity,1))}.rf-text-zinc-300{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity,1))}.rf-text-zinc-400{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.rf-text-zinc-50{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.rf-text-zinc-500{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.rf-text-zinc-600{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity,1))}.rf-text-zinc-900{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.rf-text-zinc-950{--tw-text-opacity:1;color:rgb(9 9 11/var(--tw-text-opacity,1))}.rf-underline{text-decoration-line:underline}.rf-line-through{text-decoration-line:line-through}.rf-underline-offset-4{text-underline-offset:4px}.rf-accent-blue-600{accent-color:#2563eb}.rf-opacity-0{opacity:0}.rf-opacity-10{opacity:.1}.rf-opacity-100{opacity:1}.rf-opacity-25{opacity:.25}.rf-opacity-30{opacity:.3}.rf-opacity-50{opacity:.5}.rf-opacity-60{opacity:.6}.rf-opacity-70{opacity:.7}.rf-opacity-75{opacity:.75}.rf-shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.rf-shadow,.rf-shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.rf-shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.rf-shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.rf-shadow-md,.rf-shadow-none{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.rf-shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.rf-shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.rf-shadow-sm,.rf-shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.rf-shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.rf-outline-none{outline:2px solid transparent;outline-offset:2px}.rf-ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.rf-ring-blue-500{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.rf-ring-primary{--tw-ring-color:hsl(var(--primary))}.rf-ring-offset-background{--tw-ring-offset-color:hsl(var(--background))}.rf-ring-offset-white{--tw-ring-offset-color:#fff}.rf-transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.rf-transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.rf-transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.rf-transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.rf-transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.rf-duration-150{transition-duration:.15s}.rf-duration-200{transition-duration:.2s}.rf-ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0) scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0) scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}.rf-animate-in{animation-duration:.15s;animation-name:enter;--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial}.rf-fade-in-0{--tw-enter-opacity:0}.rf-zoom-in-95{--tw-enter-scale:.95}.rf-slide-in-from-left-1{--tw-enter-translate-x:-0.25rem}.rf-slide-out-to-left-1{--tw-exit-translate-x:-0.25rem}.rf-duration-150{animation-duration:.15s}.rf-duration-200{animation-duration:.2s}.rf-ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.no-scrollbar::-webkit-scrollbar{display:none}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.file\\:rf-border-0::file-selector-button{border-width:0}.file\\:rf-bg-transparent::file-selector-button{background-color:transparent}.file\\:rf-text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\\:rf-font-medium::file-selector-button{font-weight:500}.placeholder\\:rf-text-zinc-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.placeholder\\:rf-text-zinc-500::placeholder{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.hover\\:rf--translate-y-0\\.5:hover{--tw-translate-y:-0.125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\\:rf-border-blue-300:hover{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity,1))}.hover\\:rf-border-zinc-300:hover{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity,1))}.hover\\:\\!rf-bg-transparent:hover{background-color:transparent!important}.hover\\:rf-bg-blue-700:hover{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity,1))}.hover\\:rf-bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.hover\\:rf-bg-orange-100:hover{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity,1))}.hover\\:rf-bg-red-100:hover{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.hover\\:rf-bg-red-500\\/90:hover{background-color:rgba(239,68,68,.9)}.hover\\:rf-bg-slate-100:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.hover\\:rf-bg-slate-200:hover{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity,1))}.hover\\:rf-bg-slate-50:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.hover\\:rf-bg-zinc-100:hover{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.hover\\:rf-bg-zinc-100\\/80:hover{background-color:hsla(240,5%,96%,.8)}.hover\\:rf-bg-zinc-900\\/90:hover{background-color:rgba(24,24,27,.9)}.hover\\:rf-text-blue-800:hover{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.hover\\:rf-text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.hover\\:rf-text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.hover\\:rf-text-slate-800:hover{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity,1))}.hover\\:rf-text-slate-900:hover{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.hover\\:rf-text-zinc-900:hover{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.hover\\:rf-underline:hover{text-decoration-line:underline}.hover\\:rf-shadow-md:hover{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\\:rf-bg-gray-100:focus{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.focus\\:rf-bg-zinc-100:focus{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.focus\\:rf-text-gray-900:focus{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.focus\\:rf-text-zinc-900:focus{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.focus\\:rf-outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\\:rf-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\\:rf-ring-blue-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.focus\\:rf-ring-ring:focus{--tw-ring-color:hsl(var(--ring))}.focus\\:rf-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus-visible\\:rf-outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\\:rf-ring-1:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\\:rf-ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\\:rf-ring-zinc-900:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(24 24 27/var(--tw-ring-opacity,1))}.focus-visible\\:rf-ring-zinc-950:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(9 9 11/var(--tw-ring-opacity,1))}.focus-visible\\:rf-ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.disabled\\:rf-pointer-events-none:disabled{pointer-events:none}.disabled\\:rf-cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:rf-text-gray-500:disabled{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.disabled\\:rf-opacity-40:disabled{opacity:.4}.disabled\\:rf-opacity-50:disabled{opacity:.5}.rf-group:hover .group-hover\\:rf-scale-\\[1\\.03\\]{--tw-scale-x:1.03;--tw-scale-y:1.03;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rf-group:hover .group-hover\\:rf-opacity-100,.rf-group\\/bar:hover .group-hover\\/bar\\:rf-opacity-100{opacity:1}.rf-peer:disabled~.peer-disabled\\:rf-cursor-not-allowed{cursor:not-allowed}.rf-peer:disabled~.peer-disabled\\:rf-opacity-70{opacity:.7}.data-\\[disabled\\=true\\]\\:rf-pointer-events-none[data-disabled=true],.data-\\[disabled\\]\\:rf-pointer-events-none[data-disabled]{pointer-events:none}.data-\\[side\\=bottom\\]\\:rf-translate-y-1[data-side=bottom]{--tw-translate-y:0.25rem}.data-\\[side\\=bottom\\]\\:rf-translate-y-1[data-side=bottom],.data-\\[side\\=left\\]\\:-rf-translate-x-1[data-side=left]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\\[side\\=left\\]\\:-rf-translate-x-1[data-side=left]{--tw-translate-x:-0.25rem}.data-\\[side\\=right\\]\\:rf-translate-x-1[data-side=right]{--tw-translate-x:0.25rem}.data-\\[side\\=right\\]\\:rf-translate-x-1[data-side=right],.data-\\[side\\=top\\]\\:-rf-translate-y-1[data-side=top]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\\[side\\=top\\]\\:-rf-translate-y-1[data-side=top]{--tw-translate-y:-0.25rem}.data-\\[selected\\=true\\]\\:rf-bg-zinc-100[data-selected=true]{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.data-\\[state\\=active\\]\\:rf-bg-white[data-state=active]{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.data-\\[state\\=checked\\]\\:rf-bg-zinc-900[data-state=checked]{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity,1))}.data-\\[state\\=open\\]\\:rf-bg-zinc-100[data-state=open]{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.data-\\[selected\\=true\\]\\:rf-text-zinc-900[data-selected=true]{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.data-\\[state\\=active\\]\\:rf-text-zinc-950[data-state=active]{--tw-text-opacity:1;color:rgb(9 9 11/var(--tw-text-opacity,1))}.data-\\[state\\=checked\\]\\:rf-text-zinc-50[data-state=checked]{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.data-\\[disabled\\=true\\]\\:rf-opacity-50[data-disabled=true],.data-\\[disabled\\]\\:rf-opacity-50[data-disabled]{opacity:.5}.data-\\[state\\=active\\]\\:rf-shadow[data-state=active]{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.data-\\[state\\=open\\]\\:rf-animate-in[data-state=open]{animation-duration:.15s;animation-name:enter;--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial}.data-\\[state\\=closed\\]\\:rf-animate-out[data-state=closed]{animation-duration:.15s;animation-name:exit;--tw-exit-opacity:initial;--tw-exit-scale:initial;--tw-exit-rotate:initial;--tw-exit-translate-x:initial;--tw-exit-translate-y:initial}.data-\\[state\\=closed\\]\\:rf-fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\\[state\\=open\\]\\:rf-fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\\[state\\=closed\\]\\:rf-zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\\[state\\=open\\]\\:rf-zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\\[side\\=bottom\\]\\:rf-slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:-0.5rem}.data-\\[side\\=left\\]\\:rf-slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:0.5rem}.data-\\[side\\=right\\]\\:rf-slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:-0.5rem}.data-\\[side\\=top\\]\\:rf-slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:0.5rem}.data-\\[state\\=closed\\]\\:rf-slide-out-to-left-1\\/2[data-state=closed]{--tw-exit-translate-x:-50%}.data-\\[state\\=closed\\]\\:rf-slide-out-to-top-\\[48\\%\\][data-state=closed]{--tw-exit-translate-y:-48%}.data-\\[state\\=open\\]\\:rf-slide-in-from-left-1\\/2[data-state=open]{--tw-enter-translate-x:-50%}.data-\\[state\\=open\\]\\:rf-slide-in-from-top-\\[48\\%\\][data-state=open]{--tw-enter-translate-y:-48%}.dark\\:rf-border-zinc-50:is(.rf-dark *){--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity,1))}.dark\\:rf-border-zinc-800:is(.rf-dark *){--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity,1))}.dark\\:rf-bg-gray-700:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\\:rf-bg-gray-800:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\\:rf-bg-red-900:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.dark\\:rf-bg-zinc-50:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.dark\\:rf-bg-zinc-800:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.dark\\:rf-bg-zinc-900:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity,1))}.dark\\:rf-bg-zinc-950:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity,1))}.dark\\:rf-text-gray-500:is(.rf-dark *){--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.dark\\:rf-text-zinc-300:is(.rf-dark *){--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity,1))}.dark\\:rf-text-zinc-400:is(.rf-dark *){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.dark\\:rf-text-zinc-50:is(.rf-dark *){--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.dark\\:rf-text-zinc-900:is(.rf-dark *){--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.dark\\:rf-placeholder-zinc-400:is(.rf-dark *)::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(161 161 170/var(--tw-placeholder-opacity,1))}.dark\\:rf-placeholder-zinc-400:is(.rf-dark *)::placeholder{--tw-placeholder-opacity:1;color:rgb(161 161 170/var(--tw-placeholder-opacity,1))}.dark\\:rf-ring-offset-zinc-950:is(.rf-dark *){--tw-ring-offset-color:#09090b}.dark\\:placeholder\\:rf-text-zinc-400:is(.rf-dark *)::-moz-placeholder{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.dark\\:placeholder\\:rf-text-zinc-400:is(.rf-dark *)::placeholder{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.dark\\:hover\\:rf-bg-red-900\\/90:hover:is(.rf-dark *){background-color:rgba(127,29,29,.9)}.dark\\:hover\\:rf-bg-zinc-50\\/90:hover:is(.rf-dark *){background-color:hsla(0,0%,98%,.9)}.dark\\:hover\\:rf-bg-zinc-800:hover:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.dark\\:hover\\:rf-bg-zinc-800\\/80:hover:is(.rf-dark *){background-color:rgba(39,39,42,.8)}.dark\\:hover\\:rf-text-zinc-50:hover:is(.rf-dark *){--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.dark\\:focus\\:rf-bg-zinc-800:focus:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.dark\\:focus\\:rf-text-zinc-50:focus:is(.rf-dark *){--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.dark\\:focus-visible\\:rf-ring-zinc-300:focus-visible:is(.rf-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(212 212 216/var(--tw-ring-opacity,1))}.dark\\:data-\\[selected\\=true\\]\\:rf-bg-zinc-800[data-selected=true]:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.dark\\:data-\\[state\\=active\\]\\:rf-bg-zinc-950[data-state=active]:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity,1))}.dark\\:data-\\[state\\=checked\\]\\:rf-bg-zinc-50[data-state=checked]:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.dark\\:data-\\[state\\=open\\]\\:rf-bg-zinc-800[data-state=open]:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.dark\\:data-\\[selected\\=true\\]\\:rf-text-zinc-50[data-selected=true]:is(.rf-dark *){--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.dark\\:data-\\[state\\=active\\]\\:rf-text-zinc-50[data-state=active]:is(.rf-dark *){--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.dark\\:data-\\[state\\=checked\\]\\:rf-text-zinc-900[data-state=checked]:is(.rf-dark *){--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}@media (min-width:640px){.sm\\:rf-order-1{order:1}.sm\\:rf-order-2{order:2}.sm\\:rf-mt-0{margin-top:0}.sm\\:rf-mt-4{margin-top:1rem}.sm\\:rf-block{display:block}.sm\\:rf-inline{display:inline}.sm\\:rf-grid{display:grid}.sm\\:rf-hidden{display:none}.sm\\:rf-h-5{height:1.25rem}.sm\\:rf-w-1\\/2{width:50%}.sm\\:rf-w-5{width:1.25rem}.sm\\:rf-w-\\[90vw\\]{width:90vw}.sm\\:rf-w-auto{width:auto}.sm\\:rf-max-w-\\[500px\\]{max-width:500px}.sm\\:rf-max-w-md{max-width:28rem}.sm\\:rf-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\\:rf-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\\:rf-grid-cols-\\[1fr_auto\\]{grid-template-columns:1fr auto}.sm\\:rf-grid-cols-\\[minmax\\(0\\2c 1fr\\)_auto\\]{grid-template-columns:minmax(0,1fr) auto}.sm\\:rf-flex-row{flex-direction:row}.sm\\:rf-items-center{align-items:center}.sm\\:rf-justify-end{justify-content:flex-end}.sm\\:rf-gap-3{gap:.75rem}.sm\\:rf-gap-4{gap:1rem}.sm\\:rf-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.sm\\:rf-rounded-lg{border-radius:var(--radius)}.sm\\:rf-p-3{padding:.75rem}.sm\\:rf-p-6{padding:1.5rem}.sm\\:rf-px-4{padding-left:1rem;padding-right:1rem}.sm\\:rf-px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\\:rf-px-8{padding-left:2rem;padding-right:2rem}.sm\\:rf-py-10{padding-bottom:2.5rem;padding-top:2.5rem}.sm\\:rf-py-6{padding-bottom:1.5rem;padding-top:1.5rem}.sm\\:rf-text-left{text-align:left}.sm\\:rf-text-2xl{font-size:1.5rem;line-height:2rem}.sm\\:rf-text-3xl{font-size:1.875rem;line-height:2.25rem}.sm\\:rf-text-base{font-size:1rem;line-height:1.5rem}.sm\\:rf-text-sm{font-size:.875rem;line-height:1.25rem}.sm\\:rf-text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width:768px){.md\\:rf-w-52{width:13rem}.md\\:rf-w-auto{width:auto}.md\\:rf-min-w-0{min-width:0}.md\\:rf-max-w-\\[660px\\]{max-width:660px}.md\\:rf-max-w-lg{max-width:32rem}.md\\:rf-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\\:rf-grid-cols-\\[220px_1fr\\]{grid-template-columns:220px 1fr}.md\\:rf-flex-row{flex-direction:row}.md\\:rf-flex-col{flex-direction:column}.md\\:rf-overflow-y-auto{overflow-y:auto}.md\\:rf-overflow-x-hidden{overflow-x:hidden}.md\\:rf-border-b-0{border-bottom-width:0}.md\\:rf-border-r{border-right-width:1px}.md\\:rf-p-8{padding:2rem}.md\\:rf-py-8{padding-bottom:2rem;padding-top:2rem}.md\\:rf-text-3xl{font-size:1.875rem;line-height:2.25rem}}@media (min-width:1024px){.lg\\:rf-max-w-\\[720px\\]{max-width:720px}.lg\\:rf-max-w-xl{max-width:36rem}.lg\\:rf-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:1280px){.xl\\:rf-max-w-\\[800px\\]{max-width:800px}}.\\[\\&\\>span\\]\\:rf-line-clamp-1>span{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\\[\\&\\>svg\\]\\:rf-size-4>svg{height:1rem;width:1rem}.\\[\\&\\>svg\\]\\:rf-shrink-0>svg{flex-shrink:0}.\\[\\&\\>svg\\]\\:rf-text-red-300>svg{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.\\[\\&\\>svg\\]\\:hover\\:rf-text-red-400:hover>svg{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-py-1\\.5 [cmdk-group-heading]{padding-bottom:.375rem;padding-top:.375rem}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-font-medium [cmdk-group-heading]{font-weight:500}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-text-zinc-500 [cmdk-group-heading]{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.dark\\:\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-text-zinc-400 [cmdk-group-heading]:is(.rf-dark *){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.\\[\\&_\\[cmdk-group\\]\\:not\\(\\[hidden\\]\\)_\\~\\[cmdk-group\\]\\]\\:rf-pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\\[\\&_\\[cmdk-group\\]\\]\\:rf-px-2 [cmdk-group]{padding-left:.5rem;padding-right:.5rem}.\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:rf-h-5 [cmdk-input-wrapper] svg{height:1.25rem}.\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:rf-w-5 [cmdk-input-wrapper] svg{width:1.25rem}.\\[\\&_\\[cmdk-input\\]\\]\\:rf-h-12 [cmdk-input]{height:3rem}.\\[\\&_\\[cmdk-item\\]\\]\\:rf-px-2 [cmdk-item]{padding-left:.5rem;padding-right:.5rem}.\\[\\&_\\[cmdk-item\\]\\]\\:rf-py-3 [cmdk-item]{padding-bottom:.75rem;padding-top:.75rem}.\\[\\&_\\[cmdk-item\\]_svg\\]\\:rf-h-5 [cmdk-item] svg{height:1.25rem}.\\[\\&_\\[cmdk-item\\]_svg\\]\\:rf-w-5 [cmdk-item] svg{width:1.25rem}.\\[\\&_svg\\]\\:rf-pointer-events-none svg{pointer-events:none}.\\[\\&_svg\\]\\:rf-size-4 svg{height:1rem;width:1rem}.\\[\\&_svg\\]\\:rf-shrink-0 svg{flex-shrink:0}',Ize=()=>{te.useEffect(()=>{if(document.querySelector('style[data-styles="tscircuit-runframe"]'))return;const e=document.createElement("style");e.setAttribute("data-styles","tscircuit-runframe"),e.textContent=abi,document.head.appendChild(e)},[])},Abi=t=>{te.useEffect(()=>(t?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[t])};function SAn(t,e,n){const[o,i]=te.useState(()=>{if(n!==void 0)return n;try{const r=window.localStorage.getItem(t);return r?JSON.parse(r):e}catch(r){return console.error("Error reading from localStorage:",r),e}});return te.useEffect(()=>{try{window.localStorage.setItem(t,JSON.stringify(o))}catch(r){console.error("Error writing to localStorage:",r)}},[t,o]),[o,i]}const bAn=t=>`hsl(${AB.indexOf(t)*137.5%360}, 70%, 50%)`,cbi=({phaseTimings:t})=>{if(!t)return null;const e=Object.values(t).reduce((n,o)=>n+o,0);return z.jsxs("div",{className:"rf-space-y-2 rf-w-full rf-px-4",children:[z.jsx("div",{className:"rf-relative rf-h-8 rf-flex rf-rounded-sm",children:AB.map(n=>{const o=t[n]||0,i=o/e*100;return z.jsx("div",{className:"rf-group/bar rf-relative rf-overflow-visible",style:{width:`${i}%`,backgroundColor:bAn(n)},children:z.jsxs("div",{className:"rf-opacity-0 group-hover/bar:rf-opacity-100 rf-transition-opacity rf-absolute rf-bottom-full rf-left-1/2 rf-transform -rf-translate-x-1/2 rf-mb-2 rf-px-2 rf-py-1 rf-text-xs rf-whitespace-nowrap rf-rounded rf-bg-gray-900 rf-text-white rf-pointer-events-none",children:[n,": ",o.toFixed(1),"ms"]})},n)})}),z.jsxs("div",{className:"rf-text-xs rf-text-gray-500",children:["Total: ",e.toFixed(2),"ms"]})]})},lbi=t=>{if(t instanceof Blob)return t;if(t==null)return"";if(typeof t=="string")return t;if(typeof t=="object")try{return JSON.stringify(t,null,2)}catch{return String(t)}return String(t)},gbi=({renderLog:t,onRerunWithDebug:e})=>{const[n,o]=te.useState("chronological"),[i,r]=te.useState(""),s=[{value:"",label:"None"},{value:"DEBUG=Group_doInitialSchematicTraceRender",label:"DEBUG=Group_doInitialSchematicTraceRender"},{value:"DEBUG=Group_doInitialSchematicLayoutMatchpack",label:"DEBUG=Group_doInitialSchematicLayoutMatchpack"},{value:"DEBUG=Group_doInitialPcbLayoutPack",label:"DEBUG=Group_doInitialPcbLayoutPack"}];if(!t)return z.jsxs("div",{className:"rf-p-4 rf-bg-gray-100 rf-rounded-md",children:[z.jsx("div",{className:"rf-mb-4",children:"No render log, make sure this tab is open when you render"}),e&&z.jsxs("div",{className:"rf-flex rf-gap-2 rf-items-center",children:[z.jsx("select",{value:i,onChange:c=>r(c.target.value),className:"rf-px-3 rf-py-1 rf-border rf-rounded rf-text-xs rf-bg-white",children:s.map(c=>z.jsx("option",{value:c.value,children:c.label},c.value))}),z.jsx(Kc,{onClick:()=>e(i),size:"sm",className:"rf-text-xs",children:"Rerun Render with Debug"})]})]});const a=Object.entries(t?.phaseTimings??{});n==="chronological"?a.sort((c,l)=>AB.indexOf(c[0])-AB.indexOf(l[0])):a.sort((c,l)=>l[1]-c[1]);const A=a.reduce((c,[l,g])=>c+g,0);return z.jsxs("div",{className:"rf-bg-white",children:[z.jsxs("div",{className:"rf-flex rf-justify-between rf-items-center rf-mb-4",children:[z.jsx("div",{children:"Render Logs"}),z.jsxs("div",{className:"rf-flex rf-gap-4 rf-items-center",children:[e&&z.jsxs("div",{className:"rf-flex rf-gap-2 rf-items-center",children:[z.jsx("select",{value:i,onChange:c=>r(c.target.value),className:"rf-px-3 rf-py-1 rf-border rf-rounded rf-text-xs rf-bg-white",children:s.map(c=>z.jsx("option",{value:c.value,children:c.label},c.value))}),z.jsx(Kc,{onClick:()=>e(i),size:"sm",className:"rf-text-xs",children:"Rerun Render with Debug"})]}),z.jsx("div",{className:"rf-flex rf-gap-2 rf-items-center",children:z.jsxs("select",{onChange:c=>{if(c.target.value){const l=t?.debugOutputs?.find(g=>g.name===c.target.value);if(l){const g=lbi(l.content),u=g instanceof Blob?g:new Blob([g],{type:"text/plain"}),h=URL.createObjectURL(u),d=document.createElement("a");d.href=h,d.download=`debug-${l.name}.txt`,document.body.appendChild(d),d.click(),document.body.removeChild(d),URL.revokeObjectURL(h)}c.target.value=""}},disabled:!t?.debugOutputs||t.debugOutputs.length===0,className:"rf-px-3 rf-py-1 rf-border rf-rounded rf-text-xs rf-bg-white disabled:rf-opacity-50 disabled:rf-cursor-not-allowed",children:[z.jsx("option",{value:"",children:"Download Debug Output"}),t?.debugOutputs?.map(c=>z.jsx("option",{value:c.name,children:c.name},c.name))]})}),z.jsxs("div",{className:"rf-flex rf-text-xs rf-items-center",children:[z.jsx("div",{className:"rf-mr-2",children:"Sort by:"}),z.jsxs("select",{value:n,onChange:c=>o(c.target.value),className:"rf-px-2 rf-py-1 rf-border rf-rounded rf-text-xs",children:[z.jsx("option",{value:"chronological",children:"Phase Order"}),z.jsx("option",{value:"longest",children:"Duration"})]})]})]})]}),z.jsx(cbi,{phaseTimings:t.phaseTimings}),z.jsxs("table",{className:"rf-w-full rf-text-xs",children:[z.jsx("thead",{children:z.jsxs("tr",{children:[z.jsx("th",{className:"rf-text-left rf-p-2",children:"Phase Order"}),z.jsx("th",{className:"rf-text-left rf-p-2",children:"Phase"}),z.jsx("th",{className:"rf-text-left rf-p-2",children:"Duration (ms)"})]})}),z.jsx("tbody",{children:a.map(([c,l])=>z.jsxs("tr",{children:[z.jsx("td",{className:"rf-p-2",children:AB.indexOf(c)}),z.jsx("td",{className:"rf-p-2",children:c}),z.jsx("td",{className:"rf-p-2",children:z.jsx("div",{className:"rf-w-8",children:z.jsx("div",{className:"rf-h-2 rf-rounded-sm",style:{backgroundColor:bAn(c),width:`${l/A*100}%`}})})}),z.jsx("td",{className:"rf-p-2",children:z.jsxs("div",{className:"rf-flex w-full",children:[z.jsxs("span",{className:"rf-flex-grow",children:[l,"ms"]}),z.jsxs("span",{className:"rf-text-gray-500 rf-pr-2",children:[(l/A*100).toFixed(1),"%"]})]})})]},c))})]})]})};var ubi=8,Cze=t=>Math.hypot(t.a,t.b)||1,dbi=t=>[t.label,t.inlineLabel].filter(Boolean).join(`
|
|
5547
|
+
`,...i,style:o,children:[z.jsx("input",{type:"radio",checked:e,onChange:()=>{},readOnly:!0}),z.jsx("span",{style:{color:"#eee"},children:t})]})},qSi=({children:t,elements:e,onContextMenuOpenChange:n,getNetAtPoint:o,xRayNetIds:i=[],onXRayNetsChange:r})=>{const s=KSi(),{isMouseOverContainer:a,setIsMouseOverContainer:A,selectedLayer:c,selectLayer:l,viewSettings:g,setIsShowingRatsNest:u,setIsShowingMultipleTracesLength:h,setIsShowingAutorouting:d,setIsShowingDrcErrors:m,setIsShowingDrcWarnings:p,setIsShowingCopperPours:_,setIsShowingCourtyards:f,setIsShowingPcbGroups:I,setIsShowingGroupAnchorOffsets:C,setIsShowingSolderMask:y,setIsShowingSilkscreen:x,setIsShowingFabricationNotes:E,setIsShowingPcbNotes:B,setPcbGroupViewMode:b,setHoveredErrorId:Q,setFocusedErrorId:w}=Dc(it=>({isMouseOverContainer:it.is_mouse_over_container,setIsMouseOverContainer:it.setIsMouseOverContainer,selectedLayer:it.selected_layer,selectLayer:it.selectLayer,viewSettings:{is_showing_rats_nest:it.is_showing_rats_nest,is_showing_multiple_traces_length:it.is_showing_multiple_traces_length,is_showing_autorouting:it.is_showing_autorouting,is_showing_drc_errors:it.is_showing_drc_errors,is_showing_drc_warnings:it.is_showing_drc_warnings,is_showing_copper_pours:it.is_showing_copper_pours,is_showing_courtyards:it.is_showing_courtyards,is_showing_pcb_groups:it.is_showing_pcb_groups,is_showing_group_anchor_offsets:it.is_showing_group_anchor_offsets,is_showing_solder_mask:it.is_showing_solder_mask,is_showing_silkscreen:it.is_showing_silkscreen,is_showing_fabrication_notes:it.is_showing_fabrication_notes,is_showing_pcb_notes:it.is_showing_pcb_notes,pcb_group_view_mode:it.pcb_group_view_mode},setIsShowingRatsNest:it.setIsShowingRatsNest,setIsShowingMultipleTracesLength:it.setIsShowingMultipleTracesLength,setIsShowingAutorouting:it.setIsShowingAutorouting,setIsShowingDrcErrors:it.setIsShowingDrcErrors,setIsShowingDrcWarnings:it.setIsShowingDrcWarnings,setIsShowingCopperPours:it.setIsShowingCopperPours,setIsShowingCourtyards:it.setIsShowingCourtyards,setIsShowingPcbGroups:it.setIsShowingPcbGroups,setIsShowingGroupAnchorOffsets:it.setIsShowingGroupAnchorOffsets,setIsShowingSolderMask:it.setIsShowingSolderMask,setIsShowingSilkscreen:it.setIsShowingSilkscreen,setIsShowingFabricationNotes:it.setIsShowingFabricationNotes,setIsShowingPcbNotes:it.setIsShowingPcbNotes,setPcbGroupViewMode:it.setPcbGroupViewMode,setHoveredErrorId:it.setHoveredErrorId,setFocusedErrorId:it.setFocusedErrorId})),[D,k]=te.useState(null),[T,H]=te.useState([]),[G,U]=te.useState(),[Y,j]=te.useState("Net"),ee=te.useRef(null),W=Dc(it=>it.in_edit_mode),Z=it=>{const Bt=it.currentTarget.getBoundingClientRect();return o?.({x:it.clientX-Bt.left,y:it.clientY-Bt.top})},ie=te.useCallback(()=>{k(null),n?.(!1)},[n]),[se,ne]=te.useState(!1),[le,he]=te.useState(!1),[Ie,ce]=te.useState(!1),[fe,de]=te.useState(!1),[Ce,Qe]=te.useState(!1);te.useEffect(()=>{const it=()=>de(!0),Bt=()=>de(!1),It=()=>Qe(!0),kt=()=>Qe(!1);return window.addEventListener("arm-dimension-tool",it),window.addEventListener("disarm-dimension-tool",Bt),window.addEventListener("arm-bounds-tool",It),window.addEventListener("disarm-bounds-tool",kt),()=>{window.removeEventListener("arm-dimension-tool",it),window.removeEventListener("disarm-dimension-tool",Bt),window.removeEventListener("arm-bounds-tool",It),window.removeEventListener("disarm-bounds-tool",kt)}},[]);const Pe=Xhe(e??[]),pe=Pe,ve=te.useRef(!1),we=te.useRef(null),Me={1:Pe[0]?()=>l(Pe[0]):()=>{},2:Pe[1]?()=>l(Pe[1]):()=>{},3:Pe[2]?()=>l(Pe[2]):()=>{},4:Pe[3]?()=>l(Pe[3]):()=>{},5:Pe[4]?()=>l(Pe[4]):()=>{},6:Pe[5]?()=>l(Pe[5]):()=>{},7:Pe[6]?()=>l(Pe[6]):()=>{},8:Pe[7]?()=>l(Pe[7]):()=>{},9:Pe[8]?()=>l(Pe[8]):()=>{},0:Pe[9]?()=>l(Pe[9]):()=>{}};d7("1",Me[1],we),d7("2",Me[2],we),d7("3",Me[3],we),d7("4",Me[4],we),d7("5",Me[5],we),d7("6",Me[6],we),d7("7",Me[7],we),d7("8",Me[8],we),d7("9",Me[9],we),d7("0",Me[0],we),te.useLayoutEffect(()=>{if(ve.current)return;ve.current=!0;const it=Bt=>{if(we.current){const It=we.current.getBoundingClientRect();Bt.clientX>=It.left&&Bt.clientX<=It.right&&Bt.clientY>=It.top&&Bt.clientY<=It.bottom&&A(!0)}document.removeEventListener("mousemove",it)};return document.addEventListener("mousemove",it),()=>{document.removeEventListener("mousemove",it)}},[A]);const Oe=te.useCallback(()=>{A(!0)},[A]),ke=te.useCallback(()=>{a||A(!0)},[a,A]),be=te.useCallback(()=>{A(!1),he(!1),ne(!1),ce(!1)},[A]),He=te.useCallback(()=>{he(!le)},[le]),ye=te.useCallback(()=>{const it=!Ie;ce(it),it&&ne(!1),it||Q(null)},[Ie,Q]),Fe=te.useCallback(()=>{ce(!1)},[]),Ye=te.useCallback(()=>{u(!g.is_showing_rats_nest)},[g.is_showing_rats_nest,u]),qe=te.useCallback(()=>{de(!0),Qe(!1),window.dispatchEvent(new Event("arm-dimension-tool"))},[]),st=te.useCallback(()=>{Qe(!0),de(!1),window.dispatchEvent(new Event("arm-bounds-tool"))},[]),At=te.useCallback(()=>{const it=!se;ne(it),it&&ce(!1)},[se]),nt=te.useCallback(it=>{it.stopPropagation()},[]);return z.jsxs("div",{ref:we,onPointerDown:it=>{ee.current={x:it.clientX,y:it.clientY}},onClick:it=>{if(it.detail>1||W||fe||Ce||it.target.closest("button, input, select, [role=menu]"))return;const Bt=ee.current;if(!Bt||Math.hypot(it.clientX-Bt.x,it.clientY-Bt.y)>4)return;const It=Z(it);if(!It)return;const kt=It.netId;i.includes(kt)?(r?.(i.filter(Ft=>Ft!==kt)),ie()):(U(kt),j(It.displayName),H(It.groups),n?.(!0),k({x:it.clientX,y:it.clientY}))},onDoubleClick:()=>{r?.([]),ie()},onContextMenu:it=>{it.preventDefault(),it.stopPropagation();const Bt=Z(it);U(Bt?.netId),j(Bt?.displayName??"Net"),H(Bt?.groups??[]),n?.(!0),k({x:it.clientX,y:it.clientY})},style:{position:"relative",zIndex:"999 !important"},onMouseEnter:Oe,onMouseLeave:be,onMouseMove:ke,children:[t,D&&z.jsx(VSi,{position:D,onClose:ie,xRayDisplayName:Y,xRayGroups:T.filter(it=>it.netIds.some(Bt=>!i.includes(Bt))),onXRayGroup:it=>r?.([...new Set([...i,...it.netIds])]),onXRayNet:G&&!i.includes(G)?()=>r?.([...i,G]):void 0,onExitXRayNet:i.length>0?()=>r?.([]):void 0}),z.jsxs("div",{style:{position:"absolute",bottom:4,right:8,pointerEvents:"none",color:"white",fontSize:11,opacity:a?.5:0,transition:"opacity 1s",transitionDelay:"2s",fontFamily:"sans-serif"},children:["@tscircuit/pcb-viewer@",USi.version]}),z.jsxs("div",{"data-toolbar-overlay":!0,onTouchStart:it=>it.stopPropagation(),onTouchEnd:it=>it.stopPropagation(),onTouchMove:it=>it.stopPropagation(),onMouseDown:nt,onMouseMove:nt,onMouseUp:nt,onPointerDown:nt,onPointerMove:nt,onPointerUp:nt,onWheel:nt,style:{position:"absolute",opacity:s||a?1:0,top:16,left:16,right:s?16:"auto",transition:a?"opacity 100ms linear":"opacity 300ms linear",zIndex:xg.toolbarOverlay,color:"red",display:"flex",flexWrap:"wrap",maxWidth:"550px",gap:4,fontSize:12,fontFamily:"sans-serif"},children:[z.jsxs(mY,{isSmallScreen:s,onClick:He,onMouseLeave:()=>{le&&he(!1)},children:[z.jsxs("div",{children:["layer:"," ",z.jsx("span",{style:{marginLeft:2,fontWeight:500,color:Xq[c]},children:c})]}),le&&z.jsx("div",{style:{marginTop:4,minWidth:120},children:pe.map(it=>z.jsx(XSi,{name:it,selected:it===c,onClick:()=>{l(it)}},it))})]}),z.jsx(jSi,{elements:e,isOpen:Ie,isSmallScreen:s,onToggle:ye,onClose:Fe,setHoveredErrorId:Q,setFocusedErrorId:w}),z.jsx(mY,{isSmallScreen:s,style:{},onClick:Ye,children:z.jsxs("div",{children:[g.is_showing_rats_nest?"✖ ":"","Rats Nest"]})}),z.jsx(mY,{isSmallScreen:s,style:fe?{backgroundColor:"#444"}:{},onClick:qe,children:z.jsx("div",{children:"📏"})}),z.jsx(mY,{isSmallScreen:s,style:Ce?{backgroundColor:"#444"}:{},onClick:st,children:z.jsx("div",{children:"Bounds"})}),z.jsx(mY,{isSmallScreen:s,onClick:At,children:z.jsxs("div",{children:[z.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"4px"},children:["View",z.jsx("span",{style:{fontSize:"8px",transform:se?"rotate(180deg)":"rotate(0)",transition:"transform 0.1s ease",display:"inline-block"},children:"▼"})]}),se&&z.jsxs("div",{style:{marginTop:4,minWidth:120},children:[z.jsx(V5,{label:"Show All Trace Lengths",checked:g.is_showing_multiple_traces_length,onClick:()=>{h(!g.is_showing_multiple_traces_length)}}),z.jsx(V5,{label:"Show Autorouting Animation",checked:g.is_showing_autorouting,onClick:()=>{d(!g.is_showing_autorouting)}}),z.jsx(V5,{label:"Show DRC Errors",checked:g.is_showing_drc_errors,onClick:()=>{m(!g.is_showing_drc_errors)}}),z.jsx(V5,{label:"Show DRC Warnings",checked:g.is_showing_drc_warnings,onClick:()=>{p(!g.is_showing_drc_warnings)}}),z.jsx(V5,{label:"Show Copper Pours",checked:g.is_showing_copper_pours,onClick:()=>{_(!g.is_showing_copper_pours)}}),z.jsx(V5,{label:"Show Courtyards",checked:g.is_showing_courtyards,onClick:()=>{f(!g.is_showing_courtyards)}}),z.jsx(V5,{label:"Show Solder Mask",checked:g.is_showing_solder_mask,onClick:()=>{y(!g.is_showing_solder_mask)}}),z.jsx(V5,{label:"Show Silkscreen",checked:g.is_showing_silkscreen,onClick:()=>{x(!g.is_showing_silkscreen)}}),z.jsx(V5,{label:"Show Fabrication Notes",checked:g.is_showing_fabrication_notes,onClick:()=>{E(!g.is_showing_fabrication_notes)}}),z.jsx(V5,{label:"Show PCB Notes",checked:g.is_showing_pcb_notes,onClick:()=>{B(!g.is_showing_pcb_notes)}}),z.jsx(V5,{label:"Show Group Anchor Offsets",checked:g.is_showing_group_anchor_offsets,onClick:()=>{C(!g.is_showing_group_anchor_offsets)}}),z.jsx(V5,{label:"Show PCB Groups",checked:g.is_showing_pcb_groups,onClick:()=>{I(!g.is_showing_pcb_groups)}}),g.is_showing_pcb_groups&&z.jsxs("div",{style:{marginLeft:16},children:[z.jsx(BAn,{label:"Show All Groups",checked:g.pcb_group_view_mode==="all",onClick:()=>{b("all")}}),z.jsx(BAn,{label:"Show Named Groups",checked:g.pcb_group_view_mode==="named_only",onClick:()=>{b("named_only")}})]})]})]})})]})]})},$Si=t=>t.type==="pcb_manual_edit_conflict_warning"||t.type==="pcb_connector_not_in_accessible_orientation_warning",ZSi=t=>t.type==="pcb_connector_not_in_accessible_orientation_warning"?`Connector faces ${t.facing_direction}; expected ${t.recommended_facing_direction}`:"Manual Edit Conflict",ebi=({children:t,transform:e=H0(),elements:n=[]})=>{const[o,{width:i,height:r}]=Wq(),s=te.useRef(null),a=Dc(A=>A.is_showing_drc_warnings);return te.useEffect(()=>{const A=s.current;if(!A||!i||!r)return;A.width=i,A.height=r;const c=A.getContext("2d");if(!c)return;c.clearRect(0,0,i,r);const l=n.filter(u=>u.type==="pcb_component"),g=n.filter($Si);c.strokeStyle=zi.board.drc_warning,c.lineWidth=2,g.forEach(u=>{const h=l.find(U=>U.pcb_component_id===u.pcb_component_id);if(!h)return;const{width:d,height:m,center:p}=h,_=xt(e,p),f=d*Math.abs(e.a),I=m*Math.abs(e.d),C=.1*Math.abs(e.a),y=f+C*2,x=I+C*2,E=_.x-y/2,B=_.y-x/2;c.beginPath(),c.rect(E,B,y,x),c.stroke();const b=ZSi(u),Q=4,w=Math.max(8,Math.min(12,10*Math.abs(e.a)));c.font=`${w}px sans-serif`;const k=c.measureText(b).width+Q*2,T=w+Q*2,H=E+(y-k)/2,G=B+x+5;c.fillStyle="rgba(0, 0, 0, 0.7)",c.beginPath(),c.roundRect(H,G,k,T,3),c.fill(),c.fillStyle=zi.board.drc_warning,c.textAlign="center",c.textBaseline="middle",c.fillText(b,H+k/2,G+T/2)})},[n,e,i,r,a]),a?z.jsxs("div",{ref:o,style:{position:"relative",width:"100%",height:"100%"},children:[t,z.jsx("canvas",{ref:s,style:{position:"absolute",top:0,left:0,pointerEvents:"none",zIndex:xg.warnings}})]}):z.jsx("div",{ref:o,style:{position:"relative",width:"100%",height:"100%"},children:t})},tbi=t=>{const{transform:e,elements:n}=t,{hoveredErrorId:o,focusedErrorId:i,isShowingCopperPours:r,selectedLayer:s}=Dc(Q=>({hoveredErrorId:Q.hovered_error_id,focusedErrorId:Q.focused_error_id,isShowingCopperPours:Q.is_showing_copper_pours,selectedLayer:Q.selected_layer})),a=i??o,A=te.useMemo(()=>r?n:n.filter(Q=>Q.type!=="pcb_copper_pour"),[n,r]),c=te.useMemo(()=>{const Q=S7i(n);return A.flatMap(w=>b7i(w,n,Q))},[A,n]),l=te.useMemo(()=>Nan(n),[n]),[g,u]=te.useState([]);te.useEffect(()=>u([]),[l]);const h=te.useMemo(()=>g.length>0?A.filter(Q=>Gan(Q)&&g.includes(jq(Q,l)??"")):void 0,[A,l,g]),d=te.useMemo(()=>{if(!h)return c;const Q=new Set(h);return c.filter(w=>(w._element?.type==="pcb_smtpad"||w._element?.type==="pcb_plated_hole")&&Q.has(w._element))},[c,h]),m=Q=>{if(!e)return;const w=(T,H)=>({netId:T,displayName:O7i(H,n,l),groups:G7i(T,n,l)}),k=xAn(c,xt(e5(e),Q),e,s,g.length>0).filter(T=>Gan(T._element)&&T.layer!=="drill");k.sort((T,H)=>+(H.layer===s)-+(T.layer===s));for(const T of k){const H=jq(T._element,l);if(H&&g.includes(H))return w(H,T._element)}for(const T of k){const H=jq(T._element,l);if(H)return w(H,T._element)}},[p,_]=te.useState({drawingObjectIdsWithMouseOver:new Set,primitiveIdsInMousedOverNet:[]}),[f,I]=te.useState([]),C=te.useRef(e??null),y=te.useRef(null),x=te.useMemo(()=>Ran(n),[n]),E=te.useMemo(()=>{if(!a)return[];const w=n.filter(D=>D.type.includes("error")).find((D,k)=>hY(D,k)===a);return w?k7i(w):[]},[a,n]);te.useEffect(()=>{e&&(C.current=e)},[e]),te.useEffect(()=>()=>{Han(y.current)},[]),te.useEffect(()=>{if(!t.width||!t.height||!t.setTransform||!i)return;const Q=Lan(n,i);if(!Q)return;const w=R7i({error:Q,indexes:x});if(!w)return;const D=C.current??e;if(!D)return;const k=T7i({bounds:w,width:t.width,height:t.height});Han(y.current),H7i({startTransform:D,endTransform:k,durationMs:420,setAnimationFrameId:T=>{y.current=T},onUpdate:T=>{C.current=T,t.setTransform?.(T)}})},[i,n,x,t.height,t.setTransform,t.width]);const B=te.useMemo(()=>{if(g.length>0)return c;const Q=[...p.primitiveIdsInMousedOverNet,...E];return Q7i({primitivesWithoutInteractionMetadata:c,drawingObjectIdsWithMouseOver:p.drawingObjectIdsWithMouseOver,primitiveIdsInMousedOverNet:Q})},[c,p,E,g]),b=te.useCallback(Q=>{const w=[];for(const T of Q)if(T._element){const H=l.getNetConnectedToId("pcb_port_id"in T._element?T._element?.pcb_port_id:"pcb_trace_id"in T._element?T._element?.pcb_trace_id:"");w.push(...l.getIdsConnectedToNet(H))}const D=new Set(Q.map(T=>T._pcb_drawing_object_id));_({drawingObjectIdsWithMouseOver:D,primitiveIdsInMousedOverNet:w});const k=Q.map(T=>T._parent_pcb_component?.type==="pcb_component"&&T._parent_pcb_component.pcb_component_id?T._parent_pcb_component.pcb_component_id:T._element?.type==="pcb_component"&&T._element.pcb_component_id?T._element.pcb_component_id:null).filter(T=>!!T);I(Array.from(new Set(k)))},[l]);return z.jsx(OSi,{elements:A,transform:e,primitives:d,selectedLayer:s,onMouseHoverOverPrimitives:b,children:z.jsx(BSi,{disabled:!t.allowEditing,transform:e,soup:n,cancelPanDrag:t.cancelPanDrag,onCreateEditEvent:t.onCreateEditEvent,onModifyEditEvent:t.onModifyEditEvent,children:z.jsx(xSi,{transform:e,focusOnHover:t.focusOnHover,primitives:c,onBoundsSelected:t.onBoundsSelected,cancelPanDrag:t.cancelPanDrag,children:z.jsx(qSi,{elements:n,getNetAtPoint:m,xRayNetIds:g,onXRayNetsChange:u,onContextMenuOpenChange:t.onContextMenuOpenChange,children:z.jsx(bSi,{transform:e,elements:n,children:z.jsx(YSi,{transform:e,soup:n,children:z.jsx(GSi,{transform:e,elements:n,hoveredComponentIds:f,children:z.jsx(lSi,{transform:e,debugGraphics:t.debugGraphics,children:z.jsx(ebi,{transform:e,elements:n,children:t.renderer==="canvas"?z.jsx(dze,{transform:e,primitives:B,elements:A,xRayElements:h,width:t.width,height:t.height,grid:t.grid}):z.jsx(Y8i,{transform:e,primitives:B,elements:n,xRayElements:h,width:t.width,height:t.height,grid:t.grid})})})})})})})})})})},nme=t=>Number.isFinite(t)?t.toFixed(4):"NaN",nbi=t=>{let e=5381;for(let n=0;n<t.length;n++)e=(e<<5)+e+t.charCodeAt(n);return Math.abs(e)},obi=t=>{if(!t?.length)return"0";const e=[];for(const i of t){if(!i?.type?.startsWith("pcb_"))continue;const r=U6i(i),s=cze([i]),a=[nme(s.minX),nme(s.minY),nme(s.maxX),nme(s.maxY)].join(",");let A=`${r}:${a}`;if(i.type==="pcb_trace"){const c=(i.route??[]).length;A+=`:${c}`;for(const l of i.route??[])l.route_type==="via"&&(A+=`:${l.tented_on_top}:${l.tented_on_bottom}`)}i.type==="pcb_board"&&(A+=`:${i.default_via_tented_on_top}:${i.default_via_tented_on_bottom}`),i.type==="pcb_via"&&(A+=`:${i.tented_on_top}:${i.tented_on_bottom}`),e.push(A)}if(e.length===0)return"0";e.sort();const n=e.join(","),o=nbi(n);return`${e.length}_${o.toString(36)}`},ibi=t=>{if(!t)return"empty";const e=t.find(o=>o.type==="pcb_board");if(!e)return"no-board";const n=o=>Math.round(o*1e3)/1e3;return e.outline?e.outline.map(o=>`${n(o.x)}_${n(o.y)}`).join(","):`${n(e.width)}_${n(e.height)}`},rbi=Wi($i(400,300),O0(40,-40)),fze=({circuitJson:t,debugGraphics:e,height:n=600,renderer:o="webgpu",initialState:i,allowEditing:r=!0,editEvents:s,onEditEventsChanged:a,onBoundsSelected:A,focusOnHover:c=!1,clickToInteractEnabled:l=!1,disablePcbGroups:g=!1})=>{const[u,h]=te.useState(o);te.useEffect(()=>h(o),[o]);const d=te.useMemo(()=>({renderer:u,setRenderer:h}),[u]),[m,p]=te.useState(!l),[_,f]=te.useState(!1),I=te.useRef(!1),[C,y]=Wq(),[x,E]=te.useState(rbi),B=te.useCallback(ne=>{if(I.current||ne instanceof MouseEvent&&(ne.button===2||(ne.buttons&2)!==0))return!1;const le=ne.target;return le instanceof Element?!le.closest("[data-toolbar-overlay]"):!0},[]),{ref:b,setTransform:Q,cancelDrag:w}=p7i({transform:x,onSetTransform:E,enabled:m&&!_,shouldDrag:B}),D=te.useCallback(ne=>{I.current=ne,ne&&w(),f(ne)},[w]);let[k,T]=te.useState([]);k=s??k;const H=te.useRef(!1),G=te.useRef(null),U=te.useMemo(()=>obi(t),[t]),Y=ibi(t),j=()=>{const ne=y?.width>0?y:{width:500,height:500},{center:le,width:he,height:Ie}=W.some(de=>de.type.startsWith("pcb_"))?X6i(W.filter(de=>de.type.startsWith("pcb_"))):{center:{x:0,y:0},width:.001,height:.001},ce=Math.min((ne.width??0)/he,(ne.height??0)/Ie,100)*.75,fe=Wi($i((ne.width??0)/2,(ne.height??0)/2),O0(ce,-ce,0,0),$i(-le.x,-le.y));Q(fe)};te.useEffect(()=>{y?.width&&t&&t.length!==0&&(H.current||(j(),H.current=!0))},[t,y]),te.useEffect(()=>{H.current===!0&&j()},[Y]);const ee=te.useMemo(()=>t?.filter(ne=>ne.type.startsWith("pcb_")||ne.type.startsWith("source_"))??[],[U]),W=te.useMemo(()=>ZOo({circuitJson:ee,editEvents:k}),[ee,k]),Z=ne=>{T([...k,ne]),a?.([...k,ne])},ie=ne=>{const le=k.map(he=>he.edit_event_id===ne.edit_event_id?{...he,...ne}:he);T(le),a?.(le)},se=te.useMemo(()=>({...i,...g&&{is_showing_pcb_groups:!1}}),[i,g]);return z.jsx(Ban.Provider,{value:d,children:z.jsxs("div",{ref:b,style:{position:"relative"},onContextMenu:ne=>ne.preventDefault(),children:[z.jsx("div",{ref:C,children:z.jsxs(o7i,{initialState:se,disablePcbGroups:g,children:[z.jsx(tbi,{renderer:u,transform:x,setTransform:Q,height:n,width:y.width,allowEditing:r,focusOnHover:c,onBoundsSelected:A,cancelPanDrag:w,onContextMenuOpenChange:D,onCreateEditEvent:Z,onModifyEditEvent:ie,grid:{spacing:1,view_window:{left:0,right:y.width||500,top:n,bottom:0}},elements:W,debugGraphics:e}),z.jsx(i7i,{})]})}),l&&!m&&z.jsx("div",{onClick:()=>{p(!0),j()},onTouchStart:ne=>{const le=ne.touches[0];G.current={x:le.clientX,y:le.clientY}},onTouchEnd:ne=>{const le=ne.changedTouches[0],he=G.current;if(!he)return;const Ie=Math.abs(le.clientX-he.x),ce=Math.abs(le.clientY-he.y);Ie<10&&ce<10&&(ne.preventDefault(),p(!0),j()),G.current=null},style:{position:"absolute",inset:0,cursor:"pointer",zIndex:xg.clickToInteractOverlay,display:"flex",alignItems:"center",justifyContent:"center",touchAction:"pan-x pan-y pinch-zoom"},children:z.jsx("div",{style:{backgroundColor:"rgba(0, 0, 0, 0.8)",color:"white",padding:"12px 24px",borderRadius:"8px",fontSize:"16px",pointerEvents:"none"},children:typeof window<"u"&&("ontouchstart"in window||navigator.maxTouchPoints>0)?"Touch to Interact":"Click to Interact"})})]})})};const sbi=({circuitJson:t,containerClassName:e,...n})=>{const o=te.useRef(null),[i,r]=te.useState(620);return te.useLayoutEffect(()=>{const s=()=>{if(o.current){const A=o.current.clientHeight,c=window.innerHeight;r(Math.min(Math.max(A,620),c))}};s();const a=new ResizeObserver(s);return o.current&&a.observe(o.current),window.addEventListener("resize",s),()=>{a.disconnect(),window.removeEventListener("resize",s)}},[]),z.jsx("div",{ref:o,className:e||"rf-w-full rf-h-full",children:z.jsx(fze,{...n,circuitJson:t,height:i})})},abi='*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-feature-settings:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]:where(:not([hidden=until-found])){display:none}:root{--radius:0.5rem}.rf-pointer-events-none{pointer-events:none}.rf-invisible{visibility:hidden}.rf-fixed{position:fixed}.rf-absolute{position:absolute}.rf-relative{position:relative}.rf-inset-0{inset:0}.-rf-left-2{left:-.5rem}.-rf-right-10{right:-2.5rem}.-rf-right-2{right:-.5rem}.-rf-right-4{right:-1rem}.-rf-right-6{right:-1.5rem}.-rf-right-7{right:-1.75rem}.-rf-right-8{right:-2rem}.-rf-right-9{right:-2.25rem}.rf-bottom-full{bottom:100%}.rf-left-0{left:0}.rf-left-1{left:.25rem}.rf-left-1\\/2{left:50%}.rf-left-2{left:.5rem}.rf-left-\\[50\\%\\]{left:50%}.rf-right-0{right:0}.rf-right-1{right:.25rem}.rf-right-4{right:1rem}.rf-right-\\[4px\\]{right:4px}.rf-top-0{top:0}.rf-top-1{top:.25rem}.rf-top-2{top:.5rem}.rf-top-2\\.5{top:.625rem}.rf-top-\\[50\\%\\]{top:50%}.rf-top-\\[6px\\]{top:6px}.\\!rf-z-\\[101\\]{z-index:101!important}.\\!rf-z-\\[200\\]{z-index:200!important}.rf-z-10{z-index:10}.rf-z-50{z-index:50}.rf-z-\\[100\\]{z-index:100}.rf-z-\\[101\\]{z-index:101}.rf-z-\\[102\\]{z-index:102}.rf-order-1{order:1}.rf-order-2{order:2}.rf-order-3{order:3}.rf-m-0{margin:0}.rf-m-1{margin:.25rem}.rf-m-6{margin:1.5rem}.-rf-mx-1,.rf--mx-1{margin-left:-.25rem;margin-right:-.25rem}.rf-mx-1{margin-left:.25rem;margin-right:.25rem}.rf-mx-2{margin-left:.5rem;margin-right:.5rem}.rf-mx-4{margin-left:1rem;margin-right:1rem}.rf-mx-auto{margin-left:auto;margin-right:auto}.rf-my-1{margin-bottom:.25rem;margin-top:.25rem}.rf-my-12{margin-bottom:3rem;margin-top:3rem}.rf-my-4{margin-bottom:1rem;margin-top:1rem}.rf-my-auto{margin-bottom:auto;margin-top:auto}.rf-mb-0{margin-bottom:0}.rf-mb-0\\.5{margin-bottom:.125rem}.rf-mb-1{margin-bottom:.25rem}.rf-mb-12{margin-bottom:3rem}.rf-mb-2{margin-bottom:.5rem}.rf-mb-3{margin-bottom:.75rem}.rf-mb-4{margin-bottom:1rem}.rf-mb-6{margin-bottom:1.5rem}.rf-mb-7{margin-bottom:1.75rem}.rf-mb-8{margin-bottom:2rem}.rf-ml-1{margin-left:.25rem}.rf-ml-2{margin-left:.5rem}.rf-ml-6{margin-left:1.5rem}.rf-ml-auto{margin-left:auto}.rf-mr-1{margin-right:.25rem}.rf-mr-2{margin-right:.5rem}.rf-mr-4{margin-right:1rem}.rf-mr-auto{margin-right:auto}.rf-mt-0{margin-top:0}.rf-mt-0\\.5{margin-top:.125rem}.rf-mt-1{margin-top:.25rem}.rf-mt-2{margin-top:.5rem}.rf-mt-3{margin-top:.75rem}.rf-mt-4{margin-top:1rem}.rf-mt-5{margin-top:1.25rem}.rf-mt-auto{margin-top:auto}.rf-block{display:block}.rf-inline-block{display:inline-block}.rf-inline{display:inline}.rf-flex{display:flex}.rf-inline-flex{display:inline-flex}.rf-grid{display:grid}.rf-hidden{display:none}.rf-aspect-\\[4\\/3\\]{aspect-ratio:4/3}.rf-aspect-square{aspect-ratio:1/1}.rf-aspect-video{aspect-ratio:16/9}.rf-size-14{height:3.5rem;width:3.5rem}.rf-size-2{height:.5rem;width:.5rem}.rf-size-3{height:.75rem;width:.75rem}.rf-size-4{height:1rem;width:1rem}.\\!rf-h-2{height:.5rem!important}.\\!rf-h-2\\.5{height:.625rem!important}.rf-h-0{height:0}.rf-h-0\\.5{height:.125rem}.rf-h-1{height:.25rem}.rf-h-10{height:2.5rem}.rf-h-12{height:3rem}.rf-h-2{height:.5rem}.rf-h-2\\.5{height:.625rem}.rf-h-20{height:5rem}.rf-h-24{height:6rem}.rf-h-3{height:.75rem}.rf-h-3\\.5{height:.875rem}.rf-h-4{height:1rem}.rf-h-5{height:1.25rem}.rf-h-6{height:1.5rem}.rf-h-60{height:15rem}.rf-h-64{height:16rem}.rf-h-7{height:1.75rem}.rf-h-8{height:2rem}.rf-h-9{height:2.25rem}.rf-h-\\[400px\\]{height:400px}.rf-h-\\[calc\\(100vh-52px\\)\\]{height:calc(100vh - 52px)}.rf-h-\\[calc\\(100vh-60px\\)\\]{height:calc(100vh - 60px)}.rf-h-\\[var\\(--radix-select-trigger-height\\)\\]{height:var(--radix-select-trigger-height)}.rf-h-auto{height:auto}.rf-h-fit{height:-moz-fit-content;height:fit-content}.rf-h-full{height:100%}.rf-h-px{height:1px}.rf-h-screen{height:100vh}.\\!rf-max-h-\\[40vh\\]{max-height:40vh!important}.\\!rf-max-h-\\[80vh\\]{max-height:80vh!important}.rf-max-h-16{max-height:4rem}.rf-max-h-20{max-height:5rem}.rf-max-h-24{max-height:6rem}.rf-max-h-28{max-height:7rem}.rf-max-h-32{max-height:8rem}.rf-max-h-64{max-height:16rem}.rf-max-h-96{max-height:24rem}.rf-max-h-\\[120px\\]{max-height:120px}.rf-max-h-\\[150px\\]{max-height:150px}.rf-max-h-\\[200px\\]{max-height:200px}.rf-max-h-\\[300px\\]{max-height:300px}.rf-max-h-\\[90vh\\]{max-height:90vh}.rf-max-h-full{max-height:100%}.rf-max-h-none{max-height:none}.rf-min-h-0{min-height:0}.rf-min-h-56{min-height:14rem}.rf-min-h-72{min-height:18rem}.rf-min-h-\\[100px\\]{min-height:100px}.rf-min-h-\\[200px\\]{min-height:200px}.rf-min-h-\\[300px\\]{min-height:300px}.rf-min-h-\\[360px\\]{min-height:360px}.rf-min-h-\\[400px\\]{min-height:400px}.rf-min-h-\\[620px\\]{min-height:620px}.rf-min-h-\\[calc\\(100vh-240px\\)\\]{min-height:calc(100vh - 240px)}.rf-min-h-full{min-height:100%}.\\!rf-w-2{width:.5rem!important}.\\!rf-w-2\\.5{width:.625rem!important}.\\!rf-w-\\[95vw\\]{width:95vw!important}.rf-w-1{width:.25rem}.rf-w-10{width:2.5rem}.rf-w-11{width:2.75rem}.rf-w-11\\/12{width:91.666667%}.rf-w-12{width:3rem}.rf-w-16{width:4rem}.rf-w-2{width:.5rem}.rf-w-2\\.5{width:.625rem}.rf-w-20{width:5rem}.rf-w-24{width:6rem}.rf-w-28{width:7rem}.rf-w-3{width:.75rem}.rf-w-3\\.5{width:.875rem}.rf-w-32{width:8rem}.rf-w-4{width:1rem}.rf-w-40{width:10rem}.rf-w-48{width:12rem}.rf-w-5{width:1.25rem}.rf-w-6{width:1.5rem}.rf-w-64{width:16rem}.rf-w-7{width:1.75rem}.rf-w-72{width:18rem}.rf-w-8{width:2rem}.rf-w-80{width:20rem}.rf-w-9{width:2.25rem}.rf-w-96{width:24rem}.rf-w-fit{width:-moz-fit-content;width:fit-content}.rf-w-full{width:100%}.rf-w-screen{width:100vw}.rf-min-w-0{min-width:0}.rf-min-w-10{min-width:2.5rem}.rf-min-w-16{min-width:4rem}.rf-min-w-32{min-width:8rem}.rf-min-w-80{min-width:20rem}.rf-min-w-96{min-width:24rem}.rf-min-w-\\[12px\\]{min-width:12px}.rf-min-w-\\[148px\\]{min-width:148px}.rf-min-w-\\[192px\\]{min-width:192px}.rf-min-w-\\[600px\\]{min-width:600px}.rf-min-w-\\[8rem\\]{min-width:8rem}.rf-min-w-\\[var\\(--radix-select-trigger-width\\)\\]{min-width:var(--radix-select-trigger-width)}.\\!rf-max-w-\\[95vw\\]{max-width:95vw!important}.rf-max-w-2xl{max-width:42rem}.rf-max-w-3xl{max-width:48rem}.rf-max-w-4xl{max-width:56rem}.rf-max-w-5xl{max-width:64rem}.rf-max-w-64{max-width:16rem}.rf-max-w-7xl{max-width:80rem}.rf-max-w-96{max-width:24rem}.rf-max-w-\\[1000px\\]{max-width:1000px}.rf-max-w-\\[150px\\]{max-width:150px}.rf-max-w-\\[200px\\]{max-width:200px}.rf-max-w-\\[320px\\]{max-width:320px}.rf-max-w-\\[40\\%\\]{max-width:40%}.rf-max-w-\\[600px\\]{max-width:600px}.rf-max-w-full{max-width:100%}.rf-max-w-lg{max-width:32rem}.rf-max-w-md{max-width:28rem}.rf-max-w-none{max-width:none}.rf-max-w-xl{max-width:36rem}.rf-max-w-xs{max-width:20rem}.rf-flex-1{flex:1 1 0%}.rf-flex-shrink-0,.rf-shrink-0{flex-shrink:0}.rf-flex-grow{flex-grow:1}.rf-table-auto{table-layout:auto}.rf-origin-\\[--radix-popover-content-transform-origin\\]{transform-origin:var(--radix-popover-content-transform-origin)}.-rf-translate-x-1{--tw-translate-x:-0.25rem}.-rf-translate-x-1,.-rf-translate-x-1\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rf-translate-x-1\\/2{--tw-translate-x:-50%}.-rf-translate-y-1{--tw-translate-y:-0.25rem}.-rf-translate-y-1,.rf--translate-x-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rf--translate-x-1{--tw-translate-x:-0.25rem}.rf--translate-x-1\\/2{--tw-translate-x:-50%}.rf--translate-x-1\\/2,.rf--translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rf--translate-y-0{--tw-translate-y:-0px}.rf--translate-y-1{--tw-translate-y:-0.25rem}.rf--translate-y-1,.rf-translate-x-\\[-50\\%\\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rf-translate-x-\\[-50\\%\\]{--tw-translate-x:-50%}.rf-translate-y-\\[-50\\%\\]{--tw-translate-y:-50%}.-rf-rotate-90,.rf-translate-y-\\[-50\\%\\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rf-rotate-90{--tw-rotate:-90deg}.rf-rotate-90{--tw-rotate:90deg}.rf-rotate-90,.rf-transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes rf-pulse{50%{opacity:.5}}.rf-animate-pulse{animation:rf-pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes rf-spin{to{transform:rotate(1turn)}}.rf-animate-spin{animation:rf-spin 1s linear infinite}.rf-cursor-default{cursor:default}.rf-cursor-not-allowed{cursor:not-allowed}.rf-cursor-pointer{cursor:pointer}.rf-select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.rf-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.rf-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.rf-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.rf-flex-row{flex-direction:row}.rf-flex-col{flex-direction:column}.rf-flex-col-reverse{flex-direction:column-reverse}.rf-flex-wrap{flex-wrap:wrap}.rf-place-content-center{place-content:center}.rf-place-items-center{place-items:center}.rf-items-start{align-items:flex-start}.rf-items-end{align-items:flex-end}.rf-items-center{align-items:center}.rf-items-baseline{align-items:baseline}.rf-items-stretch{align-items:stretch}.rf-justify-end{justify-content:flex-end}.rf-justify-center{justify-content:center}.rf-justify-between{justify-content:space-between}.rf-gap-0{gap:0}.rf-gap-1{gap:.25rem}.rf-gap-1\\.5{gap:.375rem}.rf-gap-2{gap:.5rem}.rf-gap-3{gap:.75rem}.rf-gap-4{gap:1rem}.rf-gap-5{gap:1.25rem}.rf-gap-6{gap:1.5rem}.rf-gap-8{gap:2rem}.rf-gap-x-5{-moz-column-gap:1.25rem;column-gap:1.25rem}.rf-gap-y-1{row-gap:.25rem}.rf-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.rf-space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.rf-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.rf-space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.rf-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.rf-space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.rf-divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.rf-overflow-auto{overflow:auto}.rf-overflow-hidden{overflow:hidden}.rf-overflow-visible{overflow:visible}.rf-overflow-x-auto{overflow-x:auto}.\\!rf-overflow-y-auto{overflow-y:auto!important}.rf-overflow-y-auto{overflow-y:auto}.rf-overflow-x-hidden{overflow-x:hidden}.rf-overflow-x-clip{overflow-x:clip}.rf-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rf-whitespace-normal{white-space:normal}.rf-whitespace-nowrap{white-space:nowrap}.rf-whitespace-pre-wrap{white-space:pre-wrap}.rf-text-nowrap{text-wrap:nowrap}.rf-break-words{overflow-wrap:break-word}.rf-break-all{word-break:break-all}.rf-rounded{border-radius:.25rem}.rf-rounded-2xl{border-radius:1rem}.rf-rounded-full{border-radius:9999px}.rf-rounded-lg{border-radius:var(--radius)}.rf-rounded-md{border-radius:calc(var(--radius) - 2px)}.rf-rounded-none{border-radius:0}.rf-rounded-sm{border-radius:calc(var(--radius) - 4px)}.rf-rounded-xl{border-radius:.75rem}.rf-border{border-width:1px}.rf-border-0{border-width:0}.rf-border-2{border-width:2px}.rf-border-y{border-top-width:1px}.rf-border-b,.rf-border-y{border-bottom-width:1px}.rf-border-l-2{border-left-width:2px}.rf-border-l-4{border-left-width:4px}.rf-border-r{border-right-width:1px}.rf-border-t{border-top-width:1px}.rf-border-none{border-style:none}.rf-border-blue-100{--tw-border-opacity:1;border-color:rgb(219 234 254/var(--tw-border-opacity,1))}.rf-border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}.rf-border-blue-300{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity,1))}.rf-border-blue-400{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity,1))}.rf-border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.rf-border-blue-600{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity,1))}.rf-border-border{border-color:hsl(var(--border))}.rf-border-emerald-500{--tw-border-opacity:1;border-color:rgb(16 185 129/var(--tw-border-opacity,1))}.rf-border-gray-100{--tw-border-opacity:1;border-color:rgb(243 244 246/var(--tw-border-opacity,1))}.rf-border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.rf-border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.rf-border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.rf-border-green-400{--tw-border-opacity:1;border-color:rgb(74 222 128/var(--tw-border-opacity,1))}.rf-border-input{border-color:hsl(var(--input))}.rf-border-neutral-200{--tw-border-opacity:1;border-color:rgb(229 229 229/var(--tw-border-opacity,1))}.rf-border-orange-100{--tw-border-opacity:1;border-color:rgb(255 237 213/var(--tw-border-opacity,1))}.rf-border-orange-200{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity,1))}.rf-border-orange-500{--tw-border-opacity:1;border-color:rgb(249 115 22/var(--tw-border-opacity,1))}.rf-border-primary{border-color:hsl(var(--primary))}.rf-border-red-100{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity,1))}.rf-border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.rf-border-red-300{--tw-border-opacity:1;border-color:rgb(252 165 165/var(--tw-border-opacity,1))}.rf-border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity,1))}.rf-border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.rf-border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity,1))}.rf-border-red-700{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity,1))}.rf-border-red-800{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity,1))}.rf-border-slate-200{--tw-border-opacity:1;border-color:rgb(226 232 240/var(--tw-border-opacity,1))}.rf-border-slate-700{--tw-border-opacity:1;border-color:rgb(51 65 85/var(--tw-border-opacity,1))}.rf-border-slate-800{--tw-border-opacity:1;border-color:rgb(30 41 59/var(--tw-border-opacity,1))}.rf-border-slate-800\\/60{border-color:rgba(30,41,59,.6)}.rf-border-transparent{border-color:transparent}.rf-border-yellow-200{--tw-border-opacity:1;border-color:rgb(254 240 138/var(--tw-border-opacity,1))}.rf-border-zinc-100{--tw-border-opacity:1;border-color:rgb(244 244 245/var(--tw-border-opacity,1))}.rf-border-zinc-200{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity,1))}.rf-border-zinc-900{--tw-border-opacity:1;border-color:rgb(24 24 27/var(--tw-border-opacity,1))}.rf-border-l-blue-500{--tw-border-opacity:1;border-left-color:rgb(59 130 246/var(--tw-border-opacity,1))}.rf-border-t-blue-600{--tw-border-opacity:1;border-top-color:rgb(37 99 235/var(--tw-border-opacity,1))}.rf-bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}.rf-bg-amber-50\\/30{background-color:rgba(255,251,235,.3)}.rf-bg-background{background-color:hsl(var(--background))}.rf-bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.rf-bg-black\\/80{background-color:rgba(0,0,0,.8)}.rf-bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.rf-bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.rf-bg-blue-500{--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity,1))}.rf-bg-blue-600{--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.rf-bg-emerald-500{--tw-bg-opacity:1;background-color:rgb(16 185 129/var(--tw-bg-opacity,1))}.rf-bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.rf-bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.rf-bg-gray-300{--tw-bg-opacity:1;background-color:rgb(209 213 219/var(--tw-bg-opacity,1))}.rf-bg-gray-400{--tw-bg-opacity:1;background-color:rgb(156 163 175/var(--tw-bg-opacity,1))}.rf-bg-gray-50{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.rf-bg-gray-500{--tw-bg-opacity:1;background-color:rgb(107 114 128/var(--tw-bg-opacity,1))}.rf-bg-gray-700{--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.rf-bg-gray-800{--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.rf-bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity,1))}.rf-bg-green-100{--tw-bg-opacity:1;background-color:rgb(220 252 231/var(--tw-bg-opacity,1))}.rf-bg-green-300{--tw-bg-opacity:1;background-color:rgb(134 239 172/var(--tw-bg-opacity,1))}.rf-bg-green-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/var(--tw-bg-opacity,1))}.rf-bg-green-600{--tw-bg-opacity:1;background-color:rgb(22 163 74/var(--tw-bg-opacity,1))}.rf-bg-muted{background-color:hsl(var(--muted))}.rf-bg-neutral-100{--tw-bg-opacity:1;background-color:rgb(245 245 245/var(--tw-bg-opacity,1))}.rf-bg-neutral-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.rf-bg-neutral-800{--tw-bg-opacity:1;background-color:rgb(38 38 38/var(--tw-bg-opacity,1))}.rf-bg-neutral-900{--tw-bg-opacity:1;background-color:rgb(23 23 23/var(--tw-bg-opacity,1))}.rf-bg-orange-100{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity,1))}.rf-bg-orange-400{--tw-bg-opacity:1;background-color:rgb(251 146 60/var(--tw-bg-opacity,1))}.rf-bg-orange-50{--tw-bg-opacity:1;background-color:rgb(255 247 237/var(--tw-bg-opacity,1))}.rf-bg-orange-50\\/50{background-color:rgba(255,247,237,.5)}.rf-bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity,1))}.rf-bg-popover{background-color:hsl(var(--popover))}.rf-bg-purple-500{--tw-bg-opacity:1;background-color:rgb(168 85 247/var(--tw-bg-opacity,1))}.rf-bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.rf-bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.rf-bg-red-50\\/50{background-color:rgba(254,242,242,.5)}.rf-bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.rf-bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.rf-bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.rf-bg-red-950{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity,1))}.rf-bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.rf-bg-slate-800{--tw-bg-opacity:1;background-color:rgb(30 41 59/var(--tw-bg-opacity,1))}.rf-bg-slate-900{--tw-bg-opacity:1;background-color:rgb(15 23 42/var(--tw-bg-opacity,1))}.rf-bg-transparent{background-color:transparent}.rf-bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.rf-bg-yellow-100{--tw-bg-opacity:1;background-color:rgb(254 249 195/var(--tw-bg-opacity,1))}.rf-bg-yellow-50{--tw-bg-opacity:1;background-color:rgb(254 252 232/var(--tw-bg-opacity,1))}.rf-bg-zinc-100{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.rf-bg-zinc-200{--tw-bg-opacity:1;background-color:rgb(228 228 231/var(--tw-bg-opacity,1))}.rf-bg-zinc-50{--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.rf-bg-zinc-800{--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.rf-bg-zinc-900{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity,1))}.rf-bg-zinc-950{--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity,1))}.rf-bg-opacity-50{--tw-bg-opacity:0.5}.rf-bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.rf-from-blue-500{--tw-gradient-from:#3b82f6 var(--tw-gradient-from-position);--tw-gradient-to:rgba(59,130,246,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.rf-from-emerald-500{--tw-gradient-from:#10b981 var(--tw-gradient-from-position);--tw-gradient-to:rgba(16,185,129,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.rf-from-green-500{--tw-gradient-from:#22c55e var(--tw-gradient-from-position);--tw-gradient-to:rgba(34,197,94,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.rf-from-red-500{--tw-gradient-from:#ef4444 var(--tw-gradient-from-position);--tw-gradient-to:rgba(239,68,68,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.rf-to-blue-600{--tw-gradient-to:#2563eb var(--tw-gradient-to-position)}.rf-to-emerald-600{--tw-gradient-to:#059669 var(--tw-gradient-to-position)}.rf-to-green-600{--tw-gradient-to:#16a34a var(--tw-gradient-to-position)}.rf-to-red-600{--tw-gradient-to:#dc2626 var(--tw-gradient-to-position)}.rf-fill-amber-500{fill:#f59e0b}.rf-fill-current{fill:currentColor}.rf-stroke-1{stroke-width:1}.rf-object-contain{-o-object-fit:contain;object-fit:contain}.rf-object-cover{-o-object-fit:cover;object-fit:cover}.\\!rf-p-0{padding:0!important}.rf-p-0{padding:0}.rf-p-1{padding:.25rem}.rf-p-2{padding:.5rem}.rf-p-3{padding:.75rem}.rf-p-4{padding:1rem}.rf-p-5{padding:1.25rem}.rf-p-6{padding:1.5rem}.rf-p-8{padding:2rem}.rf-px-1{padding-left:.25rem;padding-right:.25rem}.rf-px-1\\.5{padding-left:.375rem;padding-right:.375rem}.rf-px-2{padding-left:.5rem;padding-right:.5rem}.rf-px-2\\.5{padding-left:.625rem;padding-right:.625rem}.rf-px-3{padding-left:.75rem;padding-right:.75rem}.rf-px-4{padding-left:1rem;padding-right:1rem}.rf-px-5{padding-left:1.25rem;padding-right:1.25rem}.rf-px-6{padding-left:1.5rem;padding-right:1.5rem}.rf-px-8{padding-left:2rem;padding-right:2rem}.rf-py-0{padding-bottom:0;padding-top:0}.rf-py-0\\.5{padding-bottom:.125rem;padding-top:.125rem}.rf-py-1{padding-bottom:.25rem;padding-top:.25rem}.rf-py-1\\.5{padding-bottom:.375rem;padding-top:.375rem}.rf-py-10{padding-bottom:2.5rem;padding-top:2.5rem}.rf-py-12{padding-bottom:3rem;padding-top:3rem}.rf-py-2{padding-bottom:.5rem;padding-top:.5rem}.rf-py-3{padding-bottom:.75rem;padding-top:.75rem}.rf-py-4{padding-bottom:1rem;padding-top:1rem}.rf-py-6{padding-bottom:1.5rem;padding-top:1.5rem}.rf-py-8{padding-bottom:2rem;padding-top:2rem}.rf-pb-0{padding-bottom:0}.rf-pb-1{padding-bottom:.25rem}.rf-pb-1\\.5{padding-bottom:.375rem}.rf-pb-2{padding-bottom:.5rem}.rf-pb-3{padding-bottom:.75rem}.rf-pb-4{padding-bottom:1rem}.rf-pb-px{padding-bottom:1px}.rf-pl-10{padding-left:2.5rem}.rf-pl-11{padding-left:2.75rem}.rf-pl-12{padding-left:3rem}.rf-pl-2{padding-left:.5rem}.rf-pl-4{padding-left:1rem}.rf-pl-8{padding-left:2rem}.rf-pr-2{padding-right:.5rem}.rf-pt-0{padding-top:0}.rf-pt-1{padding-top:.25rem}.rf-pt-2{padding-top:.5rem}.rf-pt-4{padding-top:1rem}.rf-text-left{text-align:left}.rf-text-center{text-align:center}.rf-text-right{text-align:right}.rf-align-bottom{vertical-align:bottom}.rf-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.rf-font-sans{font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.rf-text-2xl{font-size:1.5rem;line-height:2rem}.rf-text-3xl{font-size:1.875rem;line-height:2.25rem}.rf-text-\\[10px\\]{font-size:10px}.rf-text-\\[11px\\]{font-size:11px}.rf-text-\\[8px\\]{font-size:8px}.rf-text-base{font-size:1rem;line-height:1.5rem}.rf-text-lg{font-size:1.125rem;line-height:1.75rem}.rf-text-sm{font-size:.875rem;line-height:1.25rem}.rf-text-xl{font-size:1.25rem;line-height:1.75rem}.rf-text-xs{font-size:.75rem;line-height:1rem}.\\!rf-font-normal{font-weight:400!important}.rf-font-bold{font-weight:700}.rf-font-medium{font-weight:500}.rf-font-normal{font-weight:400}.rf-font-semibold{font-weight:600}.rf-uppercase{text-transform:uppercase}.rf-capitalize{text-transform:capitalize}.rf-tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.rf-leading-4{line-height:1rem}.rf-leading-5{line-height:1.25rem}.rf-leading-\\[0\\.95rem\\]{line-height:.95rem}.rf-leading-\\[1rem\\]{line-height:1rem}.rf-leading-none{line-height:1}.rf-leading-relaxed{line-height:1.625}.rf-leading-tight{line-height:1.25}.rf-tracking-tight{letter-spacing:-.025em}.rf-tracking-wide{letter-spacing:.025em}.rf-tracking-wider{letter-spacing:.05em}.rf-tracking-widest{letter-spacing:.1em}.rf-text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity,1))}.rf-text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.rf-text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.rf-text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.rf-text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.rf-text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.rf-text-blue-900{--tw-text-opacity:1;color:rgb(30 58 138/var(--tw-text-opacity,1))}.rf-text-current{color:currentColor}.rf-text-emerald-600{--tw-text-opacity:1;color:rgb(5 150 105/var(--tw-text-opacity,1))}.rf-text-foreground{color:hsl(var(--foreground))}.rf-text-gray-200{--tw-text-opacity:1;color:rgb(229 231 235/var(--tw-text-opacity,1))}.rf-text-gray-300{--tw-text-opacity:1;color:rgb(209 213 219/var(--tw-text-opacity,1))}.rf-text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity,1))}.rf-text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.rf-text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity,1))}.rf-text-gray-700{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.rf-text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity,1))}.rf-text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.rf-text-green-500{--tw-text-opacity:1;color:rgb(34 197 94/var(--tw-text-opacity,1))}.rf-text-green-600{--tw-text-opacity:1;color:rgb(22 163 74/var(--tw-text-opacity,1))}.rf-text-green-700{--tw-text-opacity:1;color:rgb(21 128 61/var(--tw-text-opacity,1))}.rf-text-green-800{--tw-text-opacity:1;color:rgb(22 101 52/var(--tw-text-opacity,1))}.rf-text-green-900{--tw-text-opacity:1;color:rgb(20 83 45/var(--tw-text-opacity,1))}.rf-text-muted{color:hsl(var(--muted))}.rf-text-muted-foreground{color:hsl(var(--muted-foreground))}.rf-text-neutral-50{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.rf-text-neutral-500{--tw-text-opacity:1;color:rgb(115 115 115/var(--tw-text-opacity,1))}.rf-text-neutral-900{--tw-text-opacity:1;color:rgb(23 23 23/var(--tw-text-opacity,1))}.rf-text-neutral-950{--tw-text-opacity:1;color:rgb(10 10 10/var(--tw-text-opacity,1))}.rf-text-orange-400{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity,1))}.rf-text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity,1))}.rf-text-orange-600{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity,1))}.rf-text-orange-700{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity,1))}.rf-text-orange-800{--tw-text-opacity:1;color:rgb(154 52 18/var(--tw-text-opacity,1))}.rf-text-popover-foreground{color:hsl(var(--popover-foreground))}.rf-text-red-200{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity,1))}.rf-text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.rf-text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.rf-text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.rf-text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.rf-text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.rf-text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity,1))}.rf-text-red-900{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity,1))}.rf-text-slate-200{--tw-text-opacity:1;color:rgb(226 232 240/var(--tw-text-opacity,1))}.rf-text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.rf-text-slate-50{--tw-text-opacity:1;color:rgb(248 250 252/var(--tw-text-opacity,1))}.rf-text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}.rf-text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}.rf-text-slate-800{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity,1))}.rf-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.rf-text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity,1))}.rf-text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity,1))}.rf-text-yellow-600{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity,1))}.rf-text-yellow-700{--tw-text-opacity:1;color:rgb(161 98 7/var(--tw-text-opacity,1))}.rf-text-yellow-900{--tw-text-opacity:1;color:rgb(113 63 18/var(--tw-text-opacity,1))}.rf-text-zinc-200{--tw-text-opacity:1;color:rgb(228 228 231/var(--tw-text-opacity,1))}.rf-text-zinc-300{--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity,1))}.rf-text-zinc-400{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.rf-text-zinc-50{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.rf-text-zinc-500{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.rf-text-zinc-600{--tw-text-opacity:1;color:rgb(82 82 91/var(--tw-text-opacity,1))}.rf-text-zinc-900{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.rf-text-zinc-950{--tw-text-opacity:1;color:rgb(9 9 11/var(--tw-text-opacity,1))}.rf-underline{text-decoration-line:underline}.rf-line-through{text-decoration-line:line-through}.rf-underline-offset-4{text-underline-offset:4px}.rf-accent-blue-600{accent-color:#2563eb}.rf-opacity-0{opacity:0}.rf-opacity-10{opacity:.1}.rf-opacity-100{opacity:1}.rf-opacity-25{opacity:.25}.rf-opacity-30{opacity:.3}.rf-opacity-50{opacity:.5}.rf-opacity-60{opacity:.6}.rf-opacity-70{opacity:.7}.rf-opacity-75{opacity:.75}.rf-shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.rf-shadow,.rf-shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.rf-shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.rf-shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.rf-shadow-md,.rf-shadow-none{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.rf-shadow-none{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000}.rf-shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.rf-shadow-sm,.rf-shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.rf-shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.rf-outline-none{outline:2px solid transparent;outline-offset:2px}.rf-ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.rf-ring-blue-500{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.rf-ring-primary{--tw-ring-color:hsl(var(--primary))}.rf-ring-offset-background{--tw-ring-offset-color:hsl(var(--background))}.rf-ring-offset-white{--tw-ring-offset-color:#fff}.rf-transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.rf-transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.rf-transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.rf-transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.rf-transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.rf-duration-150{transition-duration:.15s}.rf-duration-200{transition-duration:.2s}.rf-ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0) scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0) scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}.rf-animate-in{animation-duration:.15s;animation-name:enter;--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial}.rf-fade-in-0{--tw-enter-opacity:0}.rf-zoom-in-95{--tw-enter-scale:.95}.rf-slide-in-from-left-1{--tw-enter-translate-x:-0.25rem}.rf-slide-out-to-left-1{--tw-exit-translate-x:-0.25rem}.rf-duration-150{animation-duration:.15s}.rf-duration-200{animation-duration:.2s}.rf-ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.no-scrollbar::-webkit-scrollbar{display:none}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.file\\:rf-border-0::file-selector-button{border-width:0}.file\\:rf-bg-transparent::file-selector-button{background-color:transparent}.file\\:rf-text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\\:rf-font-medium::file-selector-button{font-weight:500}.placeholder\\:rf-text-zinc-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.placeholder\\:rf-text-zinc-500::placeholder{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.hover\\:rf--translate-y-0\\.5:hover{--tw-translate-y:-0.125rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\\:rf-border-blue-300:hover{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity,1))}.hover\\:rf-border-zinc-300:hover{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity,1))}.hover\\:\\!rf-bg-transparent:hover{background-color:transparent!important}.hover\\:rf-bg-blue-700:hover{--tw-bg-opacity:1;background-color:rgb(29 78 216/var(--tw-bg-opacity,1))}.hover\\:rf-bg-gray-50:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.hover\\:rf-bg-orange-100:hover{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity,1))}.hover\\:rf-bg-red-100:hover{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.hover\\:rf-bg-red-500\\/90:hover{background-color:rgba(239,68,68,.9)}.hover\\:rf-bg-slate-100:hover{--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.hover\\:rf-bg-slate-200:hover{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity,1))}.hover\\:rf-bg-slate-50:hover{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.hover\\:rf-bg-zinc-100:hover{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.hover\\:rf-bg-zinc-100\\/80:hover{background-color:hsla(240,5%,96%,.8)}.hover\\:rf-bg-zinc-900\\/90:hover{background-color:rgba(24,24,27,.9)}.hover\\:rf-text-blue-800:hover{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.hover\\:rf-text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.hover\\:rf-text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.hover\\:rf-text-slate-800:hover{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity,1))}.hover\\:rf-text-slate-900:hover{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.hover\\:rf-text-zinc-900:hover{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.hover\\:rf-underline:hover{text-decoration-line:underline}.hover\\:rf-shadow-md:hover{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.focus\\:rf-bg-gray-100:focus{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.focus\\:rf-bg-zinc-100:focus{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.focus\\:rf-text-gray-900:focus{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.focus\\:rf-text-zinc-900:focus{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.focus\\:rf-outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\\:rf-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\\:rf-ring-blue-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.focus\\:rf-ring-ring:focus{--tw-ring-color:hsl(var(--ring))}.focus\\:rf-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus-visible\\:rf-outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\\:rf-ring-1:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\\:rf-ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\\:rf-ring-zinc-900:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(24 24 27/var(--tw-ring-opacity,1))}.focus-visible\\:rf-ring-zinc-950:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(9 9 11/var(--tw-ring-opacity,1))}.focus-visible\\:rf-ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.disabled\\:rf-pointer-events-none:disabled{pointer-events:none}.disabled\\:rf-cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:rf-text-gray-500:disabled{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.disabled\\:rf-opacity-40:disabled{opacity:.4}.disabled\\:rf-opacity-50:disabled{opacity:.5}.rf-group:hover .group-hover\\:rf-scale-\\[1\\.03\\]{--tw-scale-x:1.03;--tw-scale-y:1.03;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rf-group:hover .group-hover\\:rf-opacity-100,.rf-group\\/bar:hover .group-hover\\/bar\\:rf-opacity-100{opacity:1}.rf-peer:disabled~.peer-disabled\\:rf-cursor-not-allowed{cursor:not-allowed}.rf-peer:disabled~.peer-disabled\\:rf-opacity-70{opacity:.7}.data-\\[disabled\\=true\\]\\:rf-pointer-events-none[data-disabled=true],.data-\\[disabled\\]\\:rf-pointer-events-none[data-disabled]{pointer-events:none}.data-\\[side\\=bottom\\]\\:rf-translate-y-1[data-side=bottom]{--tw-translate-y:0.25rem}.data-\\[side\\=bottom\\]\\:rf-translate-y-1[data-side=bottom],.data-\\[side\\=left\\]\\:-rf-translate-x-1[data-side=left]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\\[side\\=left\\]\\:-rf-translate-x-1[data-side=left]{--tw-translate-x:-0.25rem}.data-\\[side\\=right\\]\\:rf-translate-x-1[data-side=right]{--tw-translate-x:0.25rem}.data-\\[side\\=right\\]\\:rf-translate-x-1[data-side=right],.data-\\[side\\=top\\]\\:-rf-translate-y-1[data-side=top]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\\[side\\=top\\]\\:-rf-translate-y-1[data-side=top]{--tw-translate-y:-0.25rem}.data-\\[selected\\=true\\]\\:rf-bg-zinc-100[data-selected=true]{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.data-\\[state\\=active\\]\\:rf-bg-white[data-state=active]{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.data-\\[state\\=checked\\]\\:rf-bg-zinc-900[data-state=checked]{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity,1))}.data-\\[state\\=open\\]\\:rf-bg-zinc-100[data-state=open]{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.data-\\[selected\\=true\\]\\:rf-text-zinc-900[data-selected=true]{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.data-\\[state\\=active\\]\\:rf-text-zinc-950[data-state=active]{--tw-text-opacity:1;color:rgb(9 9 11/var(--tw-text-opacity,1))}.data-\\[state\\=checked\\]\\:rf-text-zinc-50[data-state=checked]{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.data-\\[disabled\\=true\\]\\:rf-opacity-50[data-disabled=true],.data-\\[disabled\\]\\:rf-opacity-50[data-disabled]{opacity:.5}.data-\\[state\\=active\\]\\:rf-shadow[data-state=active]{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.data-\\[state\\=open\\]\\:rf-animate-in[data-state=open]{animation-duration:.15s;animation-name:enter;--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial}.data-\\[state\\=closed\\]\\:rf-animate-out[data-state=closed]{animation-duration:.15s;animation-name:exit;--tw-exit-opacity:initial;--tw-exit-scale:initial;--tw-exit-rotate:initial;--tw-exit-translate-x:initial;--tw-exit-translate-y:initial}.data-\\[state\\=closed\\]\\:rf-fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\\[state\\=open\\]\\:rf-fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\\[state\\=closed\\]\\:rf-zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\\[state\\=open\\]\\:rf-zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\\[side\\=bottom\\]\\:rf-slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:-0.5rem}.data-\\[side\\=left\\]\\:rf-slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:0.5rem}.data-\\[side\\=right\\]\\:rf-slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:-0.5rem}.data-\\[side\\=top\\]\\:rf-slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:0.5rem}.data-\\[state\\=closed\\]\\:rf-slide-out-to-left-1\\/2[data-state=closed]{--tw-exit-translate-x:-50%}.data-\\[state\\=closed\\]\\:rf-slide-out-to-top-\\[48\\%\\][data-state=closed]{--tw-exit-translate-y:-48%}.data-\\[state\\=open\\]\\:rf-slide-in-from-left-1\\/2[data-state=open]{--tw-enter-translate-x:-50%}.data-\\[state\\=open\\]\\:rf-slide-in-from-top-\\[48\\%\\][data-state=open]{--tw-enter-translate-y:-48%}.dark\\:rf-border-zinc-50:is(.rf-dark *){--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity,1))}.dark\\:rf-border-zinc-800:is(.rf-dark *){--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity,1))}.dark\\:rf-bg-gray-700:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\\:rf-bg-gray-800:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\\:rf-bg-red-900:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.dark\\:rf-bg-zinc-50:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.dark\\:rf-bg-zinc-800:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.dark\\:rf-bg-zinc-900:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity,1))}.dark\\:rf-bg-zinc-950:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity,1))}.dark\\:rf-text-gray-500:is(.rf-dark *){--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.dark\\:rf-text-zinc-300:is(.rf-dark *){--tw-text-opacity:1;color:rgb(212 212 216/var(--tw-text-opacity,1))}.dark\\:rf-text-zinc-400:is(.rf-dark *){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.dark\\:rf-text-zinc-50:is(.rf-dark *){--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.dark\\:rf-text-zinc-900:is(.rf-dark *){--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.dark\\:rf-placeholder-zinc-400:is(.rf-dark *)::-moz-placeholder{--tw-placeholder-opacity:1;color:rgb(161 161 170/var(--tw-placeholder-opacity,1))}.dark\\:rf-placeholder-zinc-400:is(.rf-dark *)::placeholder{--tw-placeholder-opacity:1;color:rgb(161 161 170/var(--tw-placeholder-opacity,1))}.dark\\:rf-ring-offset-zinc-950:is(.rf-dark *){--tw-ring-offset-color:#09090b}.dark\\:placeholder\\:rf-text-zinc-400:is(.rf-dark *)::-moz-placeholder{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.dark\\:placeholder\\:rf-text-zinc-400:is(.rf-dark *)::placeholder{--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.dark\\:hover\\:rf-bg-red-900\\/90:hover:is(.rf-dark *){background-color:rgba(127,29,29,.9)}.dark\\:hover\\:rf-bg-zinc-50\\/90:hover:is(.rf-dark *){background-color:hsla(0,0%,98%,.9)}.dark\\:hover\\:rf-bg-zinc-800:hover:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.dark\\:hover\\:rf-bg-zinc-800\\/80:hover:is(.rf-dark *){background-color:rgba(39,39,42,.8)}.dark\\:hover\\:rf-text-zinc-50:hover:is(.rf-dark *){--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.dark\\:focus\\:rf-bg-zinc-800:focus:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.dark\\:focus\\:rf-text-zinc-50:focus:is(.rf-dark *){--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.dark\\:focus-visible\\:rf-ring-zinc-300:focus-visible:is(.rf-dark *){--tw-ring-opacity:1;--tw-ring-color:rgb(212 212 216/var(--tw-ring-opacity,1))}.dark\\:data-\\[selected\\=true\\]\\:rf-bg-zinc-800[data-selected=true]:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.dark\\:data-\\[state\\=active\\]\\:rf-bg-zinc-950[data-state=active]:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity,1))}.dark\\:data-\\[state\\=checked\\]\\:rf-bg-zinc-50[data-state=checked]:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.dark\\:data-\\[state\\=open\\]\\:rf-bg-zinc-800[data-state=open]:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.dark\\:data-\\[selected\\=true\\]\\:rf-text-zinc-50[data-selected=true]:is(.rf-dark *){--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.dark\\:data-\\[state\\=active\\]\\:rf-text-zinc-50[data-state=active]:is(.rf-dark *){--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.dark\\:data-\\[state\\=checked\\]\\:rf-text-zinc-900[data-state=checked]:is(.rf-dark *){--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}@media (min-width:640px){.sm\\:rf-order-1{order:1}.sm\\:rf-order-2{order:2}.sm\\:rf-mt-0{margin-top:0}.sm\\:rf-mt-4{margin-top:1rem}.sm\\:rf-block{display:block}.sm\\:rf-inline{display:inline}.sm\\:rf-grid{display:grid}.sm\\:rf-hidden{display:none}.sm\\:rf-h-5{height:1.25rem}.sm\\:rf-w-1\\/2{width:50%}.sm\\:rf-w-5{width:1.25rem}.sm\\:rf-w-\\[90vw\\]{width:90vw}.sm\\:rf-w-auto{width:auto}.sm\\:rf-max-w-\\[500px\\]{max-width:500px}.sm\\:rf-max-w-md{max-width:28rem}.sm\\:rf-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\\:rf-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\\:rf-grid-cols-\\[1fr_auto\\]{grid-template-columns:1fr auto}.sm\\:rf-grid-cols-\\[minmax\\(0\\2c 1fr\\)_auto\\]{grid-template-columns:minmax(0,1fr) auto}.sm\\:rf-flex-row{flex-direction:row}.sm\\:rf-items-center{align-items:center}.sm\\:rf-justify-end{justify-content:flex-end}.sm\\:rf-gap-3{gap:.75rem}.sm\\:rf-gap-4{gap:1rem}.sm\\:rf-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.sm\\:rf-rounded-lg{border-radius:var(--radius)}.sm\\:rf-p-3{padding:.75rem}.sm\\:rf-p-6{padding:1.5rem}.sm\\:rf-px-4{padding-left:1rem;padding-right:1rem}.sm\\:rf-px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\\:rf-px-8{padding-left:2rem;padding-right:2rem}.sm\\:rf-py-10{padding-bottom:2.5rem;padding-top:2.5rem}.sm\\:rf-py-6{padding-bottom:1.5rem;padding-top:1.5rem}.sm\\:rf-text-left{text-align:left}.sm\\:rf-text-2xl{font-size:1.5rem;line-height:2rem}.sm\\:rf-text-3xl{font-size:1.875rem;line-height:2.25rem}.sm\\:rf-text-base{font-size:1rem;line-height:1.5rem}.sm\\:rf-text-sm{font-size:.875rem;line-height:1.25rem}.sm\\:rf-text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width:768px){.md\\:rf-w-52{width:13rem}.md\\:rf-w-auto{width:auto}.md\\:rf-min-w-0{min-width:0}.md\\:rf-max-w-\\[660px\\]{max-width:660px}.md\\:rf-max-w-lg{max-width:32rem}.md\\:rf-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\\:rf-grid-cols-\\[220px_1fr\\]{grid-template-columns:220px 1fr}.md\\:rf-flex-row{flex-direction:row}.md\\:rf-flex-col{flex-direction:column}.md\\:rf-overflow-y-auto{overflow-y:auto}.md\\:rf-overflow-x-hidden{overflow-x:hidden}.md\\:rf-border-b-0{border-bottom-width:0}.md\\:rf-border-r{border-right-width:1px}.md\\:rf-p-8{padding:2rem}.md\\:rf-py-8{padding-bottom:2rem;padding-top:2rem}.md\\:rf-text-3xl{font-size:1.875rem;line-height:2.25rem}}@media (min-width:1024px){.lg\\:rf-max-w-\\[720px\\]{max-width:720px}.lg\\:rf-max-w-xl{max-width:36rem}.lg\\:rf-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:1280px){.xl\\:rf-max-w-\\[800px\\]{max-width:800px}}.\\[\\&\\>span\\]\\:rf-line-clamp-1>span{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\\[\\&\\>svg\\]\\:rf-size-4>svg{height:1rem;width:1rem}.\\[\\&\\>svg\\]\\:rf-shrink-0>svg{flex-shrink:0}.\\[\\&\\>svg\\]\\:rf-text-red-300>svg{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.\\[\\&\\>svg\\]\\:hover\\:rf-text-red-400:hover>svg{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-py-1\\.5 [cmdk-group-heading]{padding-bottom:.375rem;padding-top:.375rem}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-font-medium [cmdk-group-heading]{font-weight:500}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-text-zinc-500 [cmdk-group-heading]{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.dark\\:\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-text-zinc-400 [cmdk-group-heading]:is(.rf-dark *){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.\\[\\&_\\[cmdk-group\\]\\:not\\(\\[hidden\\]\\)_\\~\\[cmdk-group\\]\\]\\:rf-pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\\[\\&_\\[cmdk-group\\]\\]\\:rf-px-2 [cmdk-group]{padding-left:.5rem;padding-right:.5rem}.\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:rf-h-5 [cmdk-input-wrapper] svg{height:1.25rem}.\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:rf-w-5 [cmdk-input-wrapper] svg{width:1.25rem}.\\[\\&_\\[cmdk-input\\]\\]\\:rf-h-12 [cmdk-input]{height:3rem}.\\[\\&_\\[cmdk-item\\]\\]\\:rf-px-2 [cmdk-item]{padding-left:.5rem;padding-right:.5rem}.\\[\\&_\\[cmdk-item\\]\\]\\:rf-py-3 [cmdk-item]{padding-bottom:.75rem;padding-top:.75rem}.\\[\\&_\\[cmdk-item\\]_svg\\]\\:rf-h-5 [cmdk-item] svg{height:1.25rem}.\\[\\&_\\[cmdk-item\\]_svg\\]\\:rf-w-5 [cmdk-item] svg{width:1.25rem}.\\[\\&_svg\\]\\:rf-pointer-events-none svg{pointer-events:none}.\\[\\&_svg\\]\\:rf-size-4 svg{height:1rem;width:1rem}.\\[\\&_svg\\]\\:rf-shrink-0 svg{flex-shrink:0}',Ize=()=>{te.useEffect(()=>{if(document.querySelector('style[data-styles="tscircuit-runframe"]'))return;const e=document.createElement("style");e.setAttribute("data-styles","tscircuit-runframe"),e.textContent=abi,document.head.appendChild(e)},[])},Abi=t=>{te.useEffect(()=>(t?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[t])};function SAn(t,e,n){const[o,i]=te.useState(()=>{if(n!==void 0)return n;try{const r=window.localStorage.getItem(t);return r?JSON.parse(r):e}catch(r){return console.error("Error reading from localStorage:",r),e}});return te.useEffect(()=>{try{window.localStorage.setItem(t,JSON.stringify(o))}catch(r){console.error("Error writing to localStorage:",r)}},[t,o]),[o,i]}const bAn=t=>`hsl(${AB.indexOf(t)*137.5%360}, 70%, 50%)`,cbi=({phaseTimings:t})=>{if(!t)return null;const e=Object.values(t).reduce((n,o)=>n+o,0);return z.jsxs("div",{className:"rf-space-y-2 rf-w-full rf-px-4",children:[z.jsx("div",{className:"rf-relative rf-h-8 rf-flex rf-rounded-sm",children:AB.map(n=>{const o=t[n]||0,i=o/e*100;return z.jsx("div",{className:"rf-group/bar rf-relative rf-overflow-visible",style:{width:`${i}%`,backgroundColor:bAn(n)},children:z.jsxs("div",{className:"rf-opacity-0 group-hover/bar:rf-opacity-100 rf-transition-opacity rf-absolute rf-bottom-full rf-left-1/2 rf-transform -rf-translate-x-1/2 rf-mb-2 rf-px-2 rf-py-1 rf-text-xs rf-whitespace-nowrap rf-rounded rf-bg-gray-900 rf-text-white rf-pointer-events-none",children:[n,": ",o.toFixed(1),"ms"]})},n)})}),z.jsxs("div",{className:"rf-text-xs rf-text-gray-500",children:["Total: ",e.toFixed(2),"ms"]})]})},lbi=t=>{if(t instanceof Blob)return t;if(t==null)return"";if(typeof t=="string")return t;if(typeof t=="object")try{return JSON.stringify(t,null,2)}catch{return String(t)}return String(t)},gbi=({renderLog:t,onRerunWithDebug:e})=>{const[n,o]=te.useState("chronological"),[i,r]=te.useState(""),s=[{value:"",label:"None"},{value:"DEBUG=Group_doInitialSchematicTraceRender",label:"DEBUG=Group_doInitialSchematicTraceRender"},{value:"DEBUG=Group_doInitialSchematicLayoutMatchpack",label:"DEBUG=Group_doInitialSchematicLayoutMatchpack"},{value:"DEBUG=Group_doInitialPcbLayoutPack",label:"DEBUG=Group_doInitialPcbLayoutPack"}];if(!t)return z.jsxs("div",{className:"rf-p-4 rf-bg-gray-100 rf-rounded-md",children:[z.jsx("div",{className:"rf-mb-4",children:"No render log, make sure this tab is open when you render"}),e&&z.jsxs("div",{className:"rf-flex rf-gap-2 rf-items-center",children:[z.jsx("select",{value:i,onChange:c=>r(c.target.value),className:"rf-px-3 rf-py-1 rf-border rf-rounded rf-text-xs rf-bg-white",children:s.map(c=>z.jsx("option",{value:c.value,children:c.label},c.value))}),z.jsx(Kc,{onClick:()=>e(i),size:"sm",className:"rf-text-xs",children:"Rerun Render with Debug"})]})]});const a=Object.entries(t?.phaseTimings??{});n==="chronological"?a.sort((c,l)=>AB.indexOf(c[0])-AB.indexOf(l[0])):a.sort((c,l)=>l[1]-c[1]);const A=a.reduce((c,[l,g])=>c+g,0);return z.jsxs("div",{className:"rf-bg-white",children:[z.jsxs("div",{className:"rf-flex rf-justify-between rf-items-center rf-mb-4",children:[z.jsx("div",{children:"Render Logs"}),z.jsxs("div",{className:"rf-flex rf-gap-4 rf-items-center",children:[e&&z.jsxs("div",{className:"rf-flex rf-gap-2 rf-items-center",children:[z.jsx("select",{value:i,onChange:c=>r(c.target.value),className:"rf-px-3 rf-py-1 rf-border rf-rounded rf-text-xs rf-bg-white",children:s.map(c=>z.jsx("option",{value:c.value,children:c.label},c.value))}),z.jsx(Kc,{onClick:()=>e(i),size:"sm",className:"rf-text-xs",children:"Rerun Render with Debug"})]}),z.jsx("div",{className:"rf-flex rf-gap-2 rf-items-center",children:z.jsxs("select",{onChange:c=>{if(c.target.value){const l=t?.debugOutputs?.find(g=>g.name===c.target.value);if(l){const g=lbi(l.content),u=g instanceof Blob?g:new Blob([g],{type:"text/plain"}),h=URL.createObjectURL(u),d=document.createElement("a");d.href=h,d.download=`debug-${l.name}.txt`,document.body.appendChild(d),d.click(),document.body.removeChild(d),URL.revokeObjectURL(h)}c.target.value=""}},disabled:!t?.debugOutputs||t.debugOutputs.length===0,className:"rf-px-3 rf-py-1 rf-border rf-rounded rf-text-xs rf-bg-white disabled:rf-opacity-50 disabled:rf-cursor-not-allowed",children:[z.jsx("option",{value:"",children:"Download Debug Output"}),t?.debugOutputs?.map(c=>z.jsx("option",{value:c.name,children:c.name},c.name))]})}),z.jsxs("div",{className:"rf-flex rf-text-xs rf-items-center",children:[z.jsx("div",{className:"rf-mr-2",children:"Sort by:"}),z.jsxs("select",{value:n,onChange:c=>o(c.target.value),className:"rf-px-2 rf-py-1 rf-border rf-rounded rf-text-xs",children:[z.jsx("option",{value:"chronological",children:"Phase Order"}),z.jsx("option",{value:"longest",children:"Duration"})]})]})]})]}),z.jsx(cbi,{phaseTimings:t.phaseTimings}),z.jsxs("table",{className:"rf-w-full rf-text-xs",children:[z.jsx("thead",{children:z.jsxs("tr",{children:[z.jsx("th",{className:"rf-text-left rf-p-2",children:"Phase Order"}),z.jsx("th",{className:"rf-text-left rf-p-2",children:"Phase"}),z.jsx("th",{className:"rf-text-left rf-p-2",children:"Duration (ms)"})]})}),z.jsx("tbody",{children:a.map(([c,l])=>z.jsxs("tr",{children:[z.jsx("td",{className:"rf-p-2",children:AB.indexOf(c)}),z.jsx("td",{className:"rf-p-2",children:c}),z.jsx("td",{className:"rf-p-2",children:z.jsx("div",{className:"rf-w-8",children:z.jsx("div",{className:"rf-h-2 rf-rounded-sm",style:{backgroundColor:bAn(c),width:`${l/A*100}%`}})})}),z.jsx("td",{className:"rf-p-2",children:z.jsxs("div",{className:"rf-flex w-full",children:[z.jsxs("span",{className:"rf-flex-grow",children:[l,"ms"]}),z.jsxs("span",{className:"rf-text-gray-500 rf-pr-2",children:[(l/A*100).toFixed(1),"%"]})]})})]},c))})]})]})};var ubi=8,Cze=t=>Math.hypot(t.a,t.b)||1,dbi=t=>[t.label,t.inlineLabel].filter(Boolean).join(`
|
|
5548
5548
|
`),Zq=(t,e)=>Math.hypot(t.x-e.x,t.y-e.y),QAn=(t,e,n)=>{const o=n.x-e.x,i=n.y-e.y,r=o*o+i*i;if(r===0)return Zq(t,e);const s=((t.x-e.x)*o+(t.y-e.y)*i)/r,a=Math.max(0,Math.min(1,s));return Zq(t,{x:e.x+o*a,y:e.y+i*a})},hbi=(t,e,n)=>{const o=n.x-e.x,i=n.y-e.y,r=Math.hypot(o,i);return r===0?Zq(t,e):Math.abs(i*t.x-o*t.y+n.x*e.y-n.y*e.x)/r},yze=(t,e)=>{let n=!1;for(let o=0,i=e.length-1;o<e.length;i=o++){const r=e[o],s=e[i];r.y>t.y!=s.y>t.y&&t.x<(s.x-r.x)*(t.y-r.y)/(s.y-r.y)+r.x&&(n=!n)}return n},xze=(t,e,n,o=!1)=>{if(e.length===0)return!1;const i=o?e.length:e.length-1;for(let r=0;r<i;r+=1){const s=e[r],a=e[(r+1)%e.length];if(QAn(t,s,a)<=n)return!0}return!1},vAn=(t,e,n)=>Math.max(n,(t??2)*Cze(e)/2+4),US=(t,e)=>IA(t,e),Eze=(t,e,n,o)=>Zq(t,US(n,e))<=o,mbi=(t,e,n,o)=>{if(e.points.length===0)return!1;if(e.points.length===1)return Eze(t,e.points[0],n,o);const i=e.points.map(r=>US(n,r));return xze(t,i,vAn(e.strokeWidth,n,o))},pbi=(t,e,n,o)=>{const{origin:i,directionVector:r}=e;if(r.x===0&&r.y===0)return!1;const s=US(n,i),a=US(n,{x:i.x+r.x,y:i.y+r.y});return hbi(t,s,a)<=vAn(e.strokeWidth,n,o)},_bi=(t,e,n,o)=>{const i=APe(e,n).corners;return yze(t,i)||xze(t,i,o,!0)},fbi=(t,e,n,o)=>{const i=US(n,e.center),r=e.radius*Cze(n);return Zq(t,i)<=r+o},Ibi=(t,e,n,o)=>{if(e.points.length===0)return!1;if(e.points.length===1)return Eze(t,e.points[0],n,o);const i=e.points.map(r=>US(n,r));return yze(t,i)||xze(t,i,o,!0)},Cbi=(t,e,n,o)=>{const i=LW(e),r=US(n,i.shaftStart),s=US(n,i.shaftEnd),a=Math.max(o,i.shaftWidth*Cze(n)/2+4);return QAn(t,r,s)<=a?!0:i.heads.some(A=>{const c=[A.tip,A.leftWing,A.rightWing].map(l=>US(n,l));return yze(t,c)})};function ybi(t,e,n,o={}){const i=o.hitSlop??ubi;for(let s=(t.points?.length??0)-1;s>=0;s-=1){const a=t.points?.[s];if(a?.label&&Eze(n,a,e,i))return a.label}for(let s=(t.infiniteLines?.length??0)-1;s>=0;s-=1){const a=t.infiniteLines?.[s];if(a?.label&&pbi(n,a,e,i))return a.label}const r=t.lines?.map((s,a)=>({line:s,originalIndex:a})).sort((s,a)=>(s.line.zIndex??0)-(a.line.zIndex??0)||s.originalIndex-a.originalIndex)??[];for(let s=r.length-1;s>=0;s-=1){const a=r[s]?.line;if(a?.label&&mbi(n,a,e,i))return a.label}for(let s=(t.arrows?.length??0)-1;s>=0;s-=1){const a=t.arrows?.[s],A=a?dbi(a):"";if(!(!a||!A)&&Cbi(n,a,e,i))return A}for(let s=(t.polygons?.length??0)-1;s>=0;s-=1){const a=t.polygons?.[s];if(a?.label&&Ibi(n,a,e,i))return a.label}for(let s=(t.circles?.length??0)-1;s>=0;s-=1){const a=t.circles?.[s];if(a?.label&&fbi(n,a,e,i))return a.label}for(let s=(t.rects?.length??0)-1;s>=0;s-=1){const a=t.rects?.[s];if(a?.label&&_bi(n,a,e,i))return a.label}return null}const xbi=ws[typeof document<"u"&&document.createElement!==void 0?"useLayoutEffect":"useEffect"],Ebi=t=>{const e=te.useRef(t);return te.useEffect(()=>{e.current=t}),e};function Bbi(){}function PAn(t,e,n={}){const o=bbi(n.polyfill),i=Ebi(e);return xbi(()=>{let r=!1;const s=t&&"current"in t?t.current:t;if(!s)return Bbi;function a(A,c){r||i.current(A,c)}return o.subscribe(s,a),()=>{r=!0,o.unsubscribe(s,a)}},[t,o,i]),o.observer}function Sbi(t){let e=!1,n=[];const o=new Map,i=new(t||window.ResizeObserver)((r,s)=>{n=n.concat(r);function a(){const A=new Set;for(let c=0;c<n.length;c++){if(A.has(n[c].target))continue;A.add(n[c].target);const l=o.get(n[c].target);l?.forEach(g=>g(n[c],s))}n=[],e=!1}e||window.requestAnimationFrame(a),e=!0});return{observer:i,subscribe(r,s){var a;i.observe(r);const A=(a=o.get(r))!==null&&a!==void 0?a:[];A.push(s),o.set(r,A)},unsubscribe(r,s){var a;const A=(a=o.get(r))!==null&&a!==void 0?a:[];if(A.length===1){i.unobserve(r),o.delete(r);return}const c=A.indexOf(s);c!==-1&&A.splice(c,1),o.set(r,A)}}}let Bze;const bbi=t=>Bze||(Bze=Sbi(t));var Qbi=t=>{const e={minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0};for(const n of t.lines??[])for(const o of n.points??[])e.minX=Math.min(e.minX,o.x),e.minY=Math.min(e.minY,o.y),e.maxX=Math.max(e.maxX,o.x),e.maxY=Math.max(e.maxY,o.y);for(const n of t.rects??[]){const o=VEo(n);e.minX=Math.min(e.minX,o.minX),e.minY=Math.min(e.minY,o.minY),e.maxX=Math.max(e.maxX,o.maxX),e.maxY=Math.max(e.maxY,o.maxY)}for(const n of t.polygons??[])for(const o of n.points??[])e.minX=Math.min(e.minX,o.x),e.minY=Math.min(e.minY,o.y),e.maxX=Math.max(e.maxX,o.x),e.maxY=Math.max(e.maxY,o.y);for(const n of t.points??[])e.minX=Math.min(e.minX,n.x),e.minY=Math.min(e.minY,n.y),e.maxX=Math.max(e.maxX,n.x),e.maxY=Math.max(e.maxY,n.y);for(const n of t.circles??[])e.minX=Math.min(e.minX,n.center.x-n.radius),e.minY=Math.min(e.minY,n.center.y-n.radius),e.maxX=Math.max(e.maxX,n.center.x+n.radius),e.maxY=Math.max(e.maxY,n.center.y+n.radius);for(const n of t.arrows??[]){const o=Pwt(n);e.minX=Math.min(e.minX,o.minX),e.minY=Math.min(e.minY,o.minY),e.maxX=Math.max(e.maxX,o.maxX),e.maxY=Math.max(e.maxY,o.maxY)}for(const n of t.texts??[])e.minX=Math.min(e.minX,n.x),e.minY=Math.min(e.minY,n.y),e.maxX=Math.max(e.maxX,n.x),e.maxY=Math.max(e.maxY,n.y);return e};function wAn(t){const e=l=>!l||l.length===0?0:l.reduce((g,u)=>{const h=Number.isNaN(u.step)?0:u.step||0;return Math.max(g,h)},0),n=e(t.points),o=e(t.lines),i=e(t.infiniteLines),r=e(t.rects),s=e(t.polygons),a=e(t.circles),A=e(t.texts),c=e(t.arrows);return Math.max(n,o,i,r,s,a,A,c)}var vbi=t=>t.slice().sort((e,n)=>n.width*n.height-e.width*e.height);function Pbi(t){const{dimensionStart:e,dimensionEnd:n,screenDimensionStart:o,screenDimensionEnd:i,flipX:r,flipY:s}=t,a=n.x-e.x,A=n.y-e.y,c=Math.sqrt(a*a+A*A),l=i.x-o.x,g=i.y-o.y,u=Math.sqrt(l*l+g*g),h=Math.atan2(g,l)*(180/Math.PI),d=Math.abs(h)%90,p=Math.min(d,90-d)>15,_=(o.x+i.x)/2,f=(o.y+i.y)/2,I=15,C=h+90;let y=Math.cos(C*Math.PI/180)*I,x=Math.sin(C*Math.PI/180)*I;const E=l>0&&g<0,B=l>0&&g>0,b=l<0&&g>0;r!==s&&!E&&(y=-y,x=-x),E&&(y+=Math.cos(C*Math.PI/180)*-45,x+=Math.sin(C*Math.PI/180)*-45),B&&(y+=Math.cos(C*Math.PI/180)+-20,x+=Math.sin(C*Math.PI/180)+-10),b&&(y+=Math.cos(C*Math.PI/180)*10,x+=Math.sin(C*Math.PI/180)*10);const Q=_+y,w=f+x;return{distance:c,screenDistance:u,x:Q,y:w,show:c>.01&&u>30&&p}}function wbi(t){const{dimensionStart:e,dimensionEnd:n,screenDimensionStart:o,screenDimensionEnd:i,flipX:r,flipY:s}=t;return te.useMemo(()=>Pbi({dimensionStart:e,dimensionEnd:n,screenDimensionStart:o,screenDimensionEnd:i,flipX:r,flipY:s}),[e,n,o,i,r,s])}var Mbi=({children:t,transform:e})=>{e||(e=LEo());const[n,o]=te.useState(!1),[i,r]=te.useState(!1),[s,a]=te.useState({x:0,y:0}),[A,c]=te.useState({x:0,y:0}),l=te.useRef({x:0,y:0}),g=te.useRef(null),u=te.useRef(!1),d=g.current?.getBoundingClientRect(),m=te.useCallback(()=>{u.current=!0,g.current?.focus()},[]),p=te.useCallback(()=>{u.current=!1},[]);te.useEffect(()=>{const y=x=>{const E=g.current?.contains(document.activeElement)||document.activeElement===g.current;!u.current&&!E||(x.key==="d"&&(a({x:l.current.x,y:l.current.y}),c({x:l.current.x,y:l.current.y}),o(B=>!B),r(!0)),x.key==="Escape"&&(o(!1),r(!1)))};return window.addEventListener("keydown",y),()=>{window.removeEventListener("keydown",y)}},[]);const _=IA(e,s),f=IA(e,A),I={left:Math.min(_.x,f.x),right:Math.max(_.x,f.x),top:Math.min(_.y,f.y),bottom:Math.max(_.y,f.y),flipX:_.x>f.x,flipY:_.y>f.y,width:0,height:0};I.width=I.right-I.left,I.height=I.bottom-I.top;const C=wbi({dimensionStart:s,dimensionEnd:A,screenDimensionStart:_,screenDimensionEnd:f,flipX:I.flipX,flipY:I.flipY});return z.jsxs("div",{ref:g,tabIndex:0,style:{position:"relative"},onMouseMove:y=>{const x=y.currentTarget.getBoundingClientRect(),E=y.clientX-x.left,B=y.clientY-x.top,b=IA(oPe(e),{x:E,y:B});l.current.x=b.x,l.current.y=b.y,i&&c({x:b.x,y:b.y})},onMouseDown:()=>{i?r(!1):n&&o(!1)},onMouseEnter:m,onMouseLeave:p,children:[t,n&&z.jsxs(z.Fragment,{children:[C.show&&z.jsx("div",{style:{position:"absolute",left:C.x,top:C.y,color:"red",mixBlendMode:"difference",pointerEvents:"none",fontSize:12,fontFamily:"sans-serif",whiteSpace:"nowrap",zIndex:30},children:C.distance.toFixed(2)}),z.jsx("div",{style:{position:"absolute",left:I.left,width:I.width,textAlign:"center",top:_.y+2,color:"red",mixBlendMode:"difference",pointerEvents:"none",marginTop:I.flipY?0:-20,fontSize:12,fontFamily:"sans-serif",zIndex:30},children:Math.abs(s.x-A.x).toFixed(2)}),z.jsx("div",{style:{position:"absolute",left:f.x,height:I.height,display:"flex",flexDirection:"column",justifyContent:"center",top:I.top,color:"red",pointerEvents:"none",mixBlendMode:"difference",fontSize:12,fontFamily:"sans-serif",zIndex:30},children:z.jsx("div",{style:{marginLeft:I.flipX?"-100%":4,paddingRight:4},children:Math.abs(s.y-A.y).toFixed(2)})}),z.jsxs("svg",{style:{position:"absolute",left:0,top:0,pointerEvents:"none",mixBlendMode:"difference",zIndex:30},width:d?.width||"100%",height:d?.height||"100%",children:[z.jsx("defs",{children:z.jsx("marker",{id:"head",orient:"auto",markerWidth:"3",markerHeight:"4",refX:"2",refY:"2",children:z.jsx("path",{d:"M0,0 V4 L2,2 Z",fill:"red"})})}),z.jsx("line",{x1:_.x,y1:_.y,x2:f.x,y2:f.y,markerEnd:"url(#head)",strokeWidth:1.5,fill:"none",stroke:"red"}),z.jsx("line",{x1:_.x,y1:_.y,x2:f.x,y2:_.y,strokeWidth:1.5,fill:"none",strokeDasharray:"2,2",stroke:"red"}),z.jsx("line",{x1:f.x,y1:_.y,x2:f.x,y2:f.y,strokeWidth:1.5,fill:"none",strokeDasharray:"2,2",stroke:"red"})]}),z.jsxs("div",{style:{right:0,bottom:0,position:"absolute",color:"red",fontFamily:"sans-serif",fontSize:12,margin:4},children:["(",s.x.toFixed(2),",",s.y.toFixed(2),")",z.jsx("br",{}),"(",A.x.toFixed(2),",",A.y.toFixed(2),")",z.jsx("br",{}),"dist:"," ",Math.sqrt((A.x-s.x)**2+(A.y-s.y)**2).toFixed(2)]})]})]})},MAn=({label:t,onClose:e})=>z.jsx("div",{role:"dialog","aria-modal":"true","aria-label":"Object label",onClick:e,style:{position:"absolute",inset:0,display:"flex",alignItems:"center",justifyContent:"center",padding:16,background:"rgba(0, 0, 0, 0.28)"},children:z.jsxs("div",{onClick:n=>{n.stopPropagation()},style:{width:"min(420px, 100%)",background:"#fff",borderRadius:10,boxShadow:"0 12px 32px rgba(0, 0, 0, 0.2)",padding:16},children:[z.jsx("div",{style:{fontWeight:600,marginBottom:8},children:"Object label"}),z.jsx("div",{style:{whiteSpace:"pre-wrap",wordBreak:"break-word",marginBottom:16},children:t}),z.jsx("div",{style:{display:"flex",justifyContent:"flex-end"},children:z.jsx("button",{type:"button",onClick:e,children:"Close"})})]})}),DAn=(t,e,n,o,i,r)=>{const s=t-n,a=e-o,A=i-n,c=r-o,l=s*A+a*c,g=A*A+c*c;let u=-1;g!==0&&(u=l/g);let h=0,d=0;u<0?(h=n,d=o):u>1?(h=i,d=r):(h=n+u*A,d=o+u*c);const m=t-h,p=e-d;return Math.sqrt(m*m+p*p)},vB=(t,e)=>{try{return QEo(t,e)}catch{return e}},Dbi=({arrow:t,index:e,interactiveState:n})=>{const{realToScreen:o,onObjectClicked:i,setHoverTooltip:r}=n,[s,a]=te.useState(!1),A=te.useMemo(()=>LW(t),[t]),c=te.useMemo(()=>({shaftStart:IA(o,A.shaftStart),shaftEnd:IA(o,A.shaftEnd),heads:A.heads.map(y=>({tip:IA(o,y.tip),base:IA(o,y.base),leftWing:IA(o,y.leftWing),rightWing:IA(o,y.rightWing)}))}),[A,o]),l=Math.abs(o.a),g=12,u=A.shaftWidth*(l||1),h=g*.6,d=te.useMemo(()=>Rce(c.shaftStart,c.shaftEnd,{fontSize:g,strokeWidth:u,normalPadding:6,alongOffset:t.label?h:0}),[c,g,u,t.label,h]),m=te.useMemo(()=>Rce(c.shaftStart,c.shaftEnd,{fontSize:g,strokeWidth:u,normalPadding:12,alongOffset:t.inlineLabel?-h:0}),[c,g,u,t.inlineLabel,h]),p=t.color||Ud[e%Ud.length]||"black",_=s?vB(.2,p):p,f=[t.label,t.inlineLabel].filter(Boolean).join(`
|
|
5549
5549
|
`),I=t.label?m:d;te.useEffect(()=>{if(!(!s||!f))return r?.({text:f,x:I.x,y:I.y}),()=>{r?.(null)}},[s,r,I.x,I.y,f]);const C=y=>{const x=y.currentTarget.getBoundingClientRect(),E=y.clientX-x.left,B=y.clientY-x.top,b=10,w=[{from:c.shaftStart,to:c.shaftEnd},...c.heads.flatMap(D=>[{from:D.base,to:D.leftWing},{from:D.leftWing,to:D.tip},{from:D.tip,to:D.rightWing},{from:D.rightWing,to:D.base}])].some(({from:D,to:k})=>DAn(E,B,D.x,D.y,k.x,k.y)<b);a(w)};return z.jsx("div",{style:{position:"absolute",top:0,left:0,width:"100%",height:"100%",pointerEvents:"none"},children:z.jsxs("svg",{style:{width:"100%",height:"100%",pointerEvents:"auto"},onMouseMove:C,onMouseLeave:()=>{a(!1),r?.(null)},onClick:s?y=>{y.stopPropagation(),i?.({type:"arrow",index:e,object:t})}:void 0,children:[z.jsx("line",{x1:c.shaftStart.x,y1:c.shaftStart.y,x2:c.shaftEnd.x,y2:c.shaftEnd.y,stroke:_,strokeWidth:u,strokeLinecap:"round",pointerEvents:"stroke"}),c.heads.map((y,x)=>z.jsx("polygon",{points:`${y.tip.x},${y.tip.y} ${y.leftWing.x},${y.leftWing.y} ${y.rightWing.x},${y.rightWing.y}`,fill:_},x))]})})},Nbi=({circle:t,interactiveState:e,index:n})=>{const o=Ud[n%Ud.length];let{center:i,radius:r,fill:s,stroke:a,layer:A,step:c,label:l}=t;const{activeLayers:g,activeStep:u,realToScreen:h,onObjectClicked:d,setHoverTooltip:m}=e,[p,_]=te.useState(!1),f=IA(h,i),I=r*h.a;let C=s||o;return p&&(C=vB(.2,C),a=a&&vB(.2,a)),te.useEffect(()=>{if(!(!p||!l))return m?.({text:l,x:f.x,y:f.y-I}),()=>{m?.(null)}},[p,l,f.x,f.y,I,m]),z.jsx("div",{style:{position:"absolute",left:f.x-I,top:f.y-I,width:I*2,height:I*2,borderRadius:"50%",backgroundColor:C,border:a?`2px solid ${a}`:"none",cursor:"pointer",transition:"border-color 0.2s"},onMouseEnter:()=>_(!0),onMouseLeave:()=>{_(!1),m?.(null)},onClick:()=>d?.({type:"circle",index:n,object:t})})},Rbi=({x:t,y:e,onSaveCamera:n,onLoadCamera:o,onClearCamera:i,onAddMark:r,onClearMarks:s,onClose:a})=>{const A=te.useRef(null);te.useEffect(()=>{const h=d=>{A.current&&!A.current.contains(d.target)&&a()};return document.addEventListener("mousedown",h),()=>{document.removeEventListener("mousedown",h)}},[a]);const c={position:"absolute",left:t,top:e,backgroundColor:"white",border:"1px solid #ccc",borderRadius:3,boxShadow:"0 2px 6px rgba(0,0,0,0.1)",padding:0,zIndex:1e3,minWidth:160,fontSize:"12px"},l={padding:"4px 8px",cursor:"pointer",userSelect:"none",lineHeight:"1.5"},g=h=>{h.currentTarget.style.backgroundColor="#f5f5f5"},u=h=>{h.currentTarget.style.backgroundColor=""};return z.jsxs("div",{ref:A,style:c,children:[z.jsx("div",{style:l,onClick:()=>{n(),a()},onMouseEnter:g,onMouseLeave:u,children:"Save Camera Position"}),z.jsx("div",{style:l,onClick:()=>{o(),a()},onMouseEnter:g,onMouseLeave:u,children:"Load Camera Position"}),z.jsx("div",{style:l,onClick:()=>{i(),a()},onMouseEnter:g,onMouseLeave:u,children:"Clear Saved Camera Position"}),z.jsx("div",{style:l,onClick:()=>{r(),a()},onMouseEnter:g,onMouseLeave:u,children:"Add Mark"}),z.jsx("div",{style:l,onClick:()=>{s(),a()},onMouseEnter:g,onMouseLeave:u,children:"Clear Marks"})]})},Tbi=({infiniteLine:t,index:e,interactiveState:n,size:o})=>{const{realToScreen:i,onObjectClicked:r,setHoverTooltip:s}=n,[a,A]=te.useState(!1),c=xwt(i,o.width,o.height),l=ywt(t,c);if(!l)return null;const[g,u]=l,h=IA(i,g),d=IA(i,u),m=t.strokeColor??Ud[e%Ud.length],p=(t.strokeWidth??1/Math.abs(i.a))*Math.abs(i.a),_=(h.x+d.x)/2,f=(h.y+d.y)/2;return z.jsx("div",{style:{position:"absolute",top:0,left:0,width:o.width,height:o.height,pointerEvents:"none"},children:z.jsxs("svg",{style:{width:o.width,height:o.height,pointerEvents:"none"},children:[z.jsx("line",{x1:h.x,y1:h.y,x2:d.x,y2:d.y,stroke:"transparent",strokeWidth:p+10,pointerEvents:"stroke",onMouseEnter:()=>{A(!0),t.label&&s?.({text:t.label,x:_,y:f})},onMouseLeave:()=>{A(!1),s?.(null)},onClick:()=>r?.({type:"infinite-line",index:e,object:t})}),z.jsx("line",{x1:h.x,y1:h.y,x2:d.x,y2:d.y,stroke:a?vB(.2,m):m,strokeWidth:p,strokeDasharray:t.strokeDash?typeof t.strokeDash=="string"?t.strokeDash:t.strokeDash.map(I=>I*Math.abs(i.a)).join(","):void 0,pointerEvents:"none"})]})})},kbi=({line:t,index:e,interactiveState:n,size:o,mousePosition:i})=>{const{activeLayers:r,activeStep:s,realToScreen:a,onObjectClicked:A,setHoverTooltip:c}=n,{points:l,layer:g,step:u,strokeColor:h,strokeWidth:d=1/a.a,strokeDash:m}=t,p=l.map(B=>IA(a,B)),_=d*Math.abs(a.a),C=Math.max(_/2+3,6),y=C*2,x=te.useMemo(()=>{if(!i)return!1;for(let B=0;B<p.length-1;B++)if(DAn(i.x,i.y,p[B].x,p[B].y,p[B+1].x,p[B+1].y)<=C)return!0;return!1},[C,i,p]),E=h??Ud[e%Ud.length];return te.useEffect(()=>{if(!(!x||!t.label||!i))return c?.({text:t.label,x:i.x,y:i.y}),()=>{c?.(null)}},[x,t.label,i?.x,i?.y,c]),z.jsx("div",{style:{position:"absolute",top:0,left:0,width:o.width,height:o.height,pointerEvents:"none"},children:z.jsxs("svg",{style:{width:o.width,height:o.height,overflow:"visible",pointerEvents:"none"},children:[z.jsx("polyline",{points:p.map(B=>`${B.x},${B.y}`).join(" "),stroke:"transparent",fill:"none",strokeWidth:y,strokeLinecap:"round",strokeLinejoin:"round",pointerEvents:"stroke",onClick:x?()=>A?.({type:"line",index:e,object:t}):void 0}),z.jsx("polyline",{points:p.map(B=>`${B.x},${B.y}`).join(" "),stroke:x?vB(.2,E):E,fill:"none",strokeWidth:_,strokeDasharray:m?typeof m=="string"?m:`${m[0]*Math.abs(a.a)}, ${m[1]*Math.abs(a.a)}`:void 0,strokeLinecap:"round",strokeLinejoin:"round",pointerEvents:"none"})]})})},Fbi=({marker:t,transform:e})=>{const[n,o]=IA(e,[t.x,t.y]);return z.jsx("svg",{style:{position:"absolute",top:0,left:0,pointerEvents:"none",zIndex:900},children:z.jsxs("g",{transform:`translate(${n}, ${o})`,children:[z.jsx("circle",{r:7,fill:"rgba(255, 0, 0, 0.5)",stroke:"rgba(255, 0, 0, 0.8)",strokeWidth:2}),z.jsx("circle",{r:2,fill:"rgba(255, 0, 0, 0.9)"})]})})},Lbi=({point:t,interactiveState:e,index:n})=>{const{color:o,label:i,layer:r,step:s}=t,{activeLayers:a,activeStep:A,realToScreen:c,onObjectClicked:l,setHoverTooltip:g}=e,[u,h]=te.useState(!1),d=IA(c,t),m=10,p=`${i?`${i}
|
|
5550
5550
|
`:""}x: ${t.x.toFixed(2)}, y: ${t.y.toFixed(2)}`;return te.useEffect(()=>{if(u)return g?.({text:p,x:d.x,y:d.y-m/2}),()=>{g?.(null)}},[u,d.x,d.y,g,p]),z.jsx("div",{style:{position:"absolute",left:d.x-m/2,top:d.y-m/2,width:m,height:m,borderRadius:"50%",border:`2px solid ${u?vB(.2,o??Ud[n%Ud.length]):o??Ud[n%Ud.length]}`,cursor:"pointer",transition:"border-color 0.2s"},onMouseEnter:()=>h(!0),onMouseLeave:()=>{h(!1),g?.(null)},onClick:()=>l?.({type:"point",index:n,object:t})})},Hbi=({polygon:t,interactiveState:e,index:n})=>{const{points:o,fill:i,stroke:r,strokeWidth:s}=t,{realToScreen:a,onObjectClicked:A,setHoverTooltip:c}=e,[l,g]=te.useState(!1),u=!!(o&&o.length>0),h=u?o.map(U=>IA(a,U)):[],d=h.map(U=>U.x),m=h.map(U=>U.y),p=u?Math.min(...d):0,_=u?Math.max(...d):0,f=u?Math.min(...m):0,I=u?Math.max(...m):0,C=4,y=p-C,x=f-C,E=Math.max(_-p,0)+C*2,B=Math.max(I-f,0)+C*2,b=h.map(U=>({x:U.x-y,y:U.y-x})),Q=Ud[n%Ud.length],D=i!==void 0||r!==void 0?i||"transparent":Q,k=r,T=l?vB(.2,D):D,H=k?l?vB(.2,k):k:void 0,G=s===void 0?void 0:s*a.a;return te.useEffect(()=>{if(!(!u||!l||!t.label))return c?.({text:t.label,x:(p+_)/2,y:x}),()=>{c?.(null)}},[u,l,_,p,t.label,c,x]),u?z.jsx("div",{style:{position:"absolute",top:x,left:y,width:E,height:B,pointerEvents:"none"},children:z.jsx("svg",{width:E,height:B,style:{display:"block"},children:z.jsx("polygon",{points:b.map(U=>`${U.x},${U.y}`).join(" "),fill:T,stroke:H??"none",strokeWidth:G,pointerEvents:"all",onMouseEnter:()=>g(!0),onMouseLeave:()=>{g(!1),c?.(null)},onClick:()=>A?.({type:"polygon",index:n,object:t})})})}):null},Obi=({rect:t,interactiveState:e,index:n})=>{const o=Ud[n%Ud.length];let{fill:i,stroke:r}=t;const{activeLayers:s,activeStep:a,realToScreen:A,onObjectClicked:c,setHoverTooltip:l}=e,[g,u]=te.useState(!1),h=APe(t,A);let m=i!==void 0||r!==void 0?i||"transparent":o;return g&&(m=vB(.2,m),r=vB(.2,r)),te.useEffect(()=>{if(!(!g||!t.label))return l?.({text:t.label,x:h.center.x,y:h.center.y-h.height/2}),()=>{l?.(null)}},[g,h.center.x,h.center.y,h.height,t.label,l]),z.jsx("div",{style:{position:"absolute",left:h.center.x,top:h.center.y,width:h.width,height:h.height,transform:"translate(-50%, -50%)",pointerEvents:"none"},children:z.jsx("div",{style:{width:"100%",height:"100%",backgroundColor:m,border:r?`2px solid ${g?vB(.2,r):r}`:"none",boxSizing:"border-box",cursor:"pointer",transition:"border-color 0.2s",transformOrigin:"center",transform:`rotate(${h.angleDegrees}deg)`,pointerEvents:"auto"},onMouseEnter:()=>u(!0),onMouseLeave:()=>{u(!1),l?.(null)},onClick:()=>c?.({type:"rect",index:n,object:t})})})},Gbi=({textObj:t,interactiveState:e,index:n})=>{const{realToScreen:o,onObjectClicked:i}=e,{x:r,y:s,text:a,color:A,fontSize:c,anchorSide:l}=t,g=IA(o,{x:r,y:s}),h={top_left:"translate(0%, 0%)",top_center:"translate(-50%, 0%)",top_right:"translate(-100%, 0%)",center_left:"translate(0%, -50%)",center:"translate(-50%, -50%)",center_right:"translate(-100%, -50%)",bottom_left:"translate(0%, -100%)",bottom_center:"translate(-50%, -100%)",bottom_right:"translate(-100%, -100%)"}[l??"center"];return z.jsx("div",{style:{position:"absolute",left:g.x,top:g.y,transform:h,color:A||"black",fontSize:c??12,whiteSpace:"pre",cursor:"default"},onClick:()=>i?.({type:"text",index:n,object:t}),children:a})},NAn=({text:t})=>z.jsx("div",{style:{background:"white",border:"1px solid #ccc",boxShadow:"0 0 10px 0 rgba(0, 0, 0, 0.1)",borderRadius:"4px",padding:"4px 8px",fontSize:"12px",minWidth:"120px",maxWidth:"300px",whiteSpace:"pre-wrap",overflowWrap:"anywhere",zIndex:100},children:t}),z5=5,Ybi=(t,e)=>te.useMemo(()=>(n,o)=>{const i=IA(t,n),r=IA(t,o),s=-z5,a=e.width+z5,A=-z5,c=e.height+z5;if(i.x>=s&&i.x<=a&&i.y>=A&&i.y<=c||r.x>=s&&r.x<=a&&r.y>=A&&r.y<=c)return!0;const l=(g,u,h,d)=>{const m=(u.x-g.x)*(d.y-h.y)-(u.y-g.y)*(d.x-h.x);if(m===0)return!1;const p=((d.y-h.y)*(d.x-g.x)+(h.x-d.x)*(d.y-g.y))/m,_=((g.y-u.y)*(d.x-g.x)+(u.x-g.x)*(d.y-g.y))/m;return p>=0&&p<=1&&_>=0&&_<=1};return l(i,r,{x:s,y:A},{x:a,y:A})||l(i,r,{x:a,y:A},{x:a,y:c})||l(i,r,{x:s,y:c},{x:a,y:c})||l(i,r,{x:s,y:A},{x:s,y:c})},[t,e]),Ubi=(t,e)=>te.useMemo(()=>n=>{const o=IA(t,n);return o.x>=-z5&&o.x<=e.width+z5&&o.y>=-z5&&o.y<=e.height+z5},[t,e]),Kbi=({isPointOnScreen:t,doesLineIntersectViewport:e,filterLayerAndStep:n})=>te.useMemo(()=>o=>{if(!n(o))return!1;if(o.points.some(i=>t(i)))return!0;for(let i=0;i<o.points.length-1;i++)if(e(o.points[i],o.points[i+1]))return!0;return!!(o.points.length>2&&o.closed&&e(o.points[o.points.length-1],o.points[0]))},[t,e,n]),Vbi=({isPointOnScreen:t,filterLayerAndStep:e})=>te.useMemo(()=>n=>e(n)?t(n):!1,[t,e]),zbi=({realToScreen:t,isPointOnScreen:e,doesLineIntersectViewport:n,filterLayerAndStep:o})=>te.useMemo(()=>i=>{if(!o(i))return!1;const{center:r}=i,[s,a,A,c]=bwt(i,t);return e(r)||e(s)||e(a)||e(A)||e(c)?!0:n(s,a)||n(a,A)||n(A,c)||n(c,s)},[t,e,n,o]),Jbi=({isPointOnScreen:t,filterLayerAndStep:e,realToScreen:n,size:o})=>te.useMemo(()=>i=>{if(!e(i))return!1;const{center:r,radius:s}=i;if(t(r)||t({x:r.x+s,y:r.y})||t({x:r.x-s,y:r.y})||t({x:r.x,y:r.y+s})||t({x:r.x,y:r.y-s}))return!0;const a=IA(n,r),A=Math.abs(n.a),c=s*A,l=-z5,g=o.width+z5,u=-z5,h=o.height+z5;if(a.x>=l&&a.x<=g&&(Math.abs(a.y-u)<=c||Math.abs(a.y-h)<=c)||a.y>=u&&a.y<=h&&(Math.abs(a.x-l)<=c||Math.abs(a.x-g)<=c))return!0;const d=(p,_)=>{const f=a.x-p,I=a.y-_;return f*f+I*I},m=c*c;return d(l,u)<=m||d(g,u)<=m||d(l,h)<=m||d(g,h)<=m},[t,e,n,o]),Wbi=({isPointOnScreen:t,filterLayerAndStep:e})=>te.useMemo(()=>n=>e(n)?t({x:n.x,y:n.y}):!1,[t,e]),jbi=({isPointOnScreen:t,doesLineIntersectViewport:e})=>te.useMemo(()=>n=>{const o=LW(n),{shaftStart:i,shaftEnd:r,heads:s}=o;return t(i)||t(r)||s.some(A=>t(A.tip)||t(A.leftWing)||t(A.rightWing)||t(A.base))?!0:[[i,r],...s.flatMap(A=>[[A.base,A.leftWing],[A.leftWing,A.tip],[A.tip,A.rightWing],[A.rightWing,A.base]])].some(([A,c])=>e(A,c))},[t,e]),Xbi=({isPointOnScreen:t,doesLineIntersectViewport:e,filterLayerAndStep:n})=>te.useMemo(()=>o=>{if(!n(o)||!o.points||o.points.length===0)return!1;if(o.points.some(i=>t(i)))return!0;for(let i=0;i<o.points.length;i++){const r=o.points[i],s=o.points[(i+1)%o.points.length];if(e(r,s))return!0}return!1},[t,e,n]),qbi=1e3,$bi=({graphics:t,onObjectClicked:e,objectLimit:n,height:o=600,stepMetadata:i,alwaysShowToolbar:r=!1})=>{const[s,a]=te.useState(null),[A,c]=te.useState(null),[l,g]=te.useState(!0),[u,h]=te.useState({width:600,height:o}),[d,m]=te.useState(null),[p,_]=te.useState(!1),[f,I]=te.useState(null),[C,y]=te.useState([]),[x,E]=te.useState(null),[B,b]=te.useState(null),Q=Array.from(new Set([...t.lines?.map(It=>It.layer).filter(Boolean)??[],...t.infiniteLines?.map(It=>It.layer).filter(Boolean)??[],...t.rects?.map(It=>It.layer).filter(Boolean)??[],...t.polygons?.map(It=>It.layer).filter(Boolean)??[],...t.points?.map(It=>It.layer).filter(Boolean)??[],...t.texts?.map(It=>It.layer).filter(Boolean)??[],...t.circles?.map(It=>It.layer).filter(Boolean)??[]])),w=wAn(t),D=te.useMemo(()=>{const It=Qbi(t),kt=It.maxX-It.minX,Ft=It.maxY-It.minY;return{minX:It.minX-kt/10,minY:It.minY-Ft/10,maxX:It.maxX+kt/10,maxY:It.maxY+Ft/10}},[t]),k=te.useCallback(()=>{const It=window.location.pathname,kt=window.location.search;return`saved-camera-position-${It}${kt}`},[]),T=te.useCallback(()=>{const It=Math.max(D.maxX-D.minX,1),kt=Math.max(D.maxY-D.minY,1),Ft=Math.min(u.width/It,u.height/kt);return sPe(bv(u.width/2,u.height/2),aPe(Ft,-Ft),bv(-(D.maxX+D.minX)/2,-(D.maxY+D.minY)/2))},[u,D]),H=te.useCallback(()=>{try{const It=localStorage.getItem(k());if(It)return JSON.parse(It)}catch(It){console.error("Error loading saved data:",It)}return null},[k]),G=te.useCallback(()=>H()?.transform||null,[H]),{transform:U,ref:Y,setTransform:j}=Qrn({initialTransform:T()});PAn(Y,It=>{h({width:It.contentRect.width,height:It.contentRect.height})}),te.useEffect(()=>{const It=H();It?.markers&&y(It.markers)},[H]);const ee=te.useCallback(It=>{It.preventDefault();const kt=It.clientX,Ft=It.clientY,Ct=It.currentTarget.getBoundingClientRect(),Jt=Ct.left,Cn=Ct.top,Be=window.innerWidth,$e=window.innerHeight,_t=160,ut=100;let Xe=kt-Jt,pt=Ft-Cn;kt>Be/2&&(Xe=Xe-_t),Ft>$e/2&&(pt=pt-ut),m({x:Xe,y:pt,clientX:kt,clientY:Ft})},[]),W=te.useCallback((It,kt)=>{try{const Ft={transform:It,markers:kt};localStorage.setItem(k(),JSON.stringify(Ft))}catch(Ft){console.error("Error saving data:",Ft)}},[k]),Z=te.useCallback(()=>{W(U,C)},[W,U,C]),ie=te.useCallback(()=>{try{const It=G();It&&j(It)}catch(It){console.error("Error loading camera position:",It)}},[G,j]),se=te.useCallback(()=>{try{const It=T();W(It,C),j(It)}catch(It){console.error("Error clearing camera position:",It)}},[W,T,j,C]),ne=te.useCallback(()=>{if(d)try{const It={x:d.clientX,y:d.clientY},kt=Y.current?.getBoundingClientRect();if(kt){const Ft=It.x-kt.left,Ct=It.y-kt.top,Jt=oPe(U),[Cn,Be]=IA(Jt,[Ft,Ct]),$e={x:Cn,y:Be},_t=[...C,$e];y(_t);const ut=H();ut?.transform&&W(ut.transform,_t)}}catch(It){console.error("Error adding marker:",It)}},[d,Y,U,C,W]),le=te.useCallback(()=>{y([]);const It=H();It?.transform&&W(It.transform,[])},[H,W]),he=te.useCallback(It=>{switch(It.type){case"arrow":return[It.object.label,It.object.inlineLabel].filter(Boolean).join(`
|
|
@@ -5580,7 +5580,7 @@ test("${c} should solve problem correctly", () => {
|
|
|
5580
5580
|
// Add more specific assertions based on expected output
|
|
5581
5581
|
// expect(solver.netLabelPlacementSolver!.netLabelPlacements).toMatchInlineSnapshot()
|
|
5582
5582
|
})
|
|
5583
|
-
`,g=new Blob([l],{type:"text/plain"}),u=URL.createObjectURL(g),h=document.createElement("a");h.href=u,h.download=`${c}.test.ts`,h.click(),URL.revokeObjectURL(u)}catch(A){alert(`Error generating test.ts for ${t.getSolverName()}: ${A instanceof Error?A.message:String(A)}`)}o(!1)};return z.jsxs("div",{className:`relative ${e}`,ref:i,children:[z.jsx("button",{className:"px-2 py-1 rounded text-xs cursor-pointer",onClick:()=>o(!n),title:`Download options for ${t.getSolverName()}`,children:t.getSolverName()}),n&&z.jsxs("div",{className:"absolute top-full left-0 mt-1 bg-white border border-gray-300 rounded shadow-lg z-10 min-w-[150px]",children:[z.jsx("button",{className:"w-full text-left px-3 py-2 hover:bg-gray-100 text-xs",onClick:r,children:"Download JSON"}),z.jsx("button",{className:"w-full text-left px-3 py-2 hover:bg-gray-100 text-xs",onClick:s,children:"Download page.tsx"}),z.jsx("button",{className:"w-full text-left px-3 py-2 hover:bg-gray-100 text-xs",onClick:a,children:"Download test.ts"})]})]})},RAn=t=>t.activeSubSolver?[t,...RAn(t.activeSubSolver)]:[t],oQi=({solver:t})=>{const e=RAn(t);return z.jsx("div",{className:"flex gap-1 items-center text-sm pt-1",children:e.map((n,o)=>z.jsxs("div",{className:"flex items-center",children:[o>0&&z.jsx("span",{className:"text-gray-400 mx-1",children:"→"}),z.jsx(nQi,{solver:n})]},n.getSolverName()))})},iQi=({solver:t,triggerRender:e,animationSpeed:n=25,renderer:o,onRendererChange:i,onAnimationSpeedChange:r,onDownloadVisualization:s,onSolverStarted:a,onSolverCompleted:A})=>{const[c,l]=te.useReducer(B=>!B,!1),g=te.useRef(void 0),u=te.useRef(null),h="solver-debugger-last-iteration",[d,m]=te.useState(null),p=te.useRef(null),_=te.useMemo(()=>[{label:"Slow",value:250,description:"250ms"},{label:"Normal",value:100,description:"100ms"},{label:"Fast",value:10,description:"10ms"},{label:"Fast (2x)",value:5,description:"5ms"},{label:"Fast (10x)",value:1,description:"1ms"},{label:"Fast 20x",value:.5,description:"2 steps / 1ms"},{label:"Fast 100x",value:.1,description:"10 steps / 1ms"}],[]),f=()=>{const B=Math.max(1,n),b=n<1?Math.round(1/n):1;g.current=setInterval(()=>{if(t.solved||t.failed){g.current&&(clearInterval(g.current),g.current=void 0),l(),e(),A&&t.solved&&A(t);return}for(let Q=0;Q<b&&!(t.solved||t.failed);Q++)t.step();e()},B)},I=()=>{g.current&&(clearInterval(g.current),g.current=void 0)},C=()=>{!t.solved&&!t.failed&&(t.step(),e())},y=()=>{!t.solved&&!t.failed&&(a&&a(t),t.solve(),e(),A&&A(t))},x=()=>{c?(I(),l()):(l(),f())},E=()=>{if(t.solved||t.failed||c)return;u.current===null&&typeof window<"u"&&(u.current=window.localStorage.getItem(h));const B=window.prompt("Step until which iteration?",u.current??`${t.iterations}`);if(B===null)return;u.current=B,typeof window<"u"&&window.localStorage.setItem(h,B);const b=Number(B);if(!Number.isFinite(b)){window.alert("Please enter a valid number for the iteration");return}for(;t.iterations<b&&!t.solved&&!t.failed;)t.step();e(),t.solved&&A&&A(t)};return te.useEffect(()=>()=>{I()},[]),te.useEffect(()=>{(t.solved||t.failed)&&c&&(I(),l())},[t.solved,t.failed,c]),te.useEffect(()=>{c&&(I(),f())},[n,c]),te.useEffect(()=>{if(typeof document>"u")return;const B=b=>{p.current&&!p.current.contains(b.target)&&m(null)};return document.addEventListener("mousedown",B),()=>{document.removeEventListener("mousedown",B)}},[]),z.jsxs("div",{className:"space-y-2 p-2 border-b",children:[z.jsx("div",{className:"flex items-center",children:z.jsxs("div",{className:"flex items-center gap-2",ref:p,children:[z.jsxs("div",{className:"flex h-9 items-center space-x-1 rounded-md border border-slate-200 bg-white p-1 shadow-sm",children:[z.jsxs("div",{className:"relative",children:[z.jsx("button",{type:"button",onClick:()=>m(d==="renderer"?null:"renderer"),className:"flex select-none items-center rounded-sm px-3 py-1 text-sm font-medium outline-none focus:bg-slate-100 data-[state=open]:bg-slate-100","data-state":d==="renderer"?"open":"closed",children:"Renderer"}),d==="renderer"&&z.jsx("div",{className:"absolute left-0 z-50 mt-1 min-w-[10rem] rounded-md border border-slate-200 bg-white p-1 text-slate-950 shadow-md",children:["vector","canvas"].map(B=>z.jsxs("button",{type:"button",onClick:()=>{i(B),m(null)},className:"flex w-full items-center rounded-sm px-2 py-1.5 text-sm hover:bg-slate-100",children:[B==="vector"?"Vector":"Canvas",o===B&&z.jsx("span",{className:"ml-auto text-xs text-slate-500",children:"✓"})]},B))})]}),z.jsxs("div",{className:"relative",children:[z.jsx("button",{type:"button",onClick:()=>m(d==="debug"?null:"debug"),className:"flex select-none items-center rounded-sm px-3 py-1 text-sm font-medium outline-none focus:bg-slate-100 data-[state=open]:bg-slate-100","data-state":d==="debug"?"open":"closed",children:"Debug"}),d==="debug"&&z.jsx("div",{className:"absolute left-0 z-50 mt-1 min-w-[12rem] rounded-md border border-slate-200 bg-white p-1 text-slate-950 shadow-md",children:z.jsx("button",{type:"button",onClick:()=>{s(),m(null)},className:"flex w-full items-center rounded-sm px-2 py-1.5 text-sm hover:bg-slate-100",children:"Download Visualization"})})]}),z.jsxs("div",{className:"relative",children:[z.jsx("button",{type:"button",onClick:()=>m(d==="animation"?null:"animation"),className:"flex select-none items-center rounded-sm px-3 py-1 text-sm font-medium outline-none focus:bg-slate-100 data-[state=open]:bg-slate-100","data-state":d==="animation"?"open":"closed",children:"Animation"}),d==="animation"&&z.jsx("div",{className:"absolute left-0 z-50 mt-1 min-w-[12rem] rounded-md border border-slate-200 bg-white p-1 text-slate-950 shadow-md",children:_.map(B=>z.jsxs("button",{type:"button",onClick:()=>{r(B.value),m(null)},className:"flex w-full items-center rounded-sm px-2 py-1.5 text-sm hover:bg-slate-100",children:[B.label,z.jsx("span",{className:"ml-auto text-xs text-slate-500",children:B.description}),n===B.value&&z.jsx("span",{className:"ml-2 text-xs text-slate-500",children:"✓"})]},B.value))})]})]}),z.jsx(oQi,{solver:t})]})}),z.jsxs("div",{className:"flex gap-2 items-center flex-wrap",children:[z.jsx("button",{onClick:C,disabled:t.solved||t.failed||c,className:"bg-blue-500 hover:bg-blue-600 disabled:bg-gray-300 text-white px-3 py-1 rounded text-sm",children:"Step"}),z.jsx("button",{onClick:y,disabled:t.solved||t.failed||c,className:"bg-green-500 hover:bg-green-600 disabled:bg-gray-300 text-white px-3 py-1 rounded text-sm",children:"Solve"}),z.jsx("button",{onClick:x,disabled:t.solved||t.failed,className:`px-3 py-1 rounded text-white text-sm ${c?"bg-red-500 hover:bg-red-600":"bg-yellow-500 hover:bg-yellow-600"} disabled:bg-gray-300`,children:c?"Stop":"Animate"}),z.jsx("button",{onClick:E,disabled:t.solved||t.failed||c,className:"bg-orange-500 hover:bg-orange-600 disabled:bg-gray-300 text-white px-3 py-1 rounded text-sm",children:"Step Until Iteration"}),z.jsxs("div",{className:"text-sm text-gray-600",children:["Iterations: ",t.iterations]}),t.timeToSolve!==void 0&&z.jsxs("div",{className:"text-sm text-gray-600",children:["Time: ",(t.timeToSolve/1e3).toFixed(3),"s"]}),t.solved&&z.jsx("div",{className:"px-2 py-1 bg-green-100 text-green-800 rounded text-sm",children:"Solved"}),t.failed&&z.jsx("div",{className:"px-2 py-1 bg-red-100 text-red-800 rounded text-sm",children:"Failed"})]}),t.error&&z.jsxs("div",{className:"text-red-600 text-sm",children:["Error: ",t.error]})]})},rQi=t=>t!==null&&"pipelineDef"in t&&Array.isArray(t.pipelineDef),sQi=(t,e,n)=>{const o=t.currentPipelineStageIndex;return e<o?"Completed":e===o&&t.activeSubSolver?t.activeSubSolver.failed?"Failed":"In Progress":"Not Started"},aQi=(t,e)=>{const o=t.pipelineDef[e].solverName,i=sQi(t,e),r=t[o],s=t.firstIterationOfStage?.[o]??(e===t.currentPipelineStageIndex?t.iterations:null),a=t.iterations;let A=0;if(i==="Completed"){const u=t.pipelineDef[e+1],h=u?t.firstIterationOfStage?.[u.solverName]:void 0;h!==void 0&&s!==null?A=h-s:s!==null&&(A=a-s)}else i==="In Progress"&&s!==null&&(A=a-s);const c=t.timeSpentOnStage?.[o]??0;let l=0;i==="Completed"?l=1:i==="In Progress"&&r&&(l=r.progress??0);const g=r?.stats??null;return{index:e,name:o,status:i,firstIteration:s,iterations:A,progress:l,timeSpent:c,stats:g&&Object.keys(g).length>0?g:null,solverInstance:r??null}},AQi=({status:t})=>{const e={"Not Started":"text-blue-600","In Progress":"text-yellow-600",Completed:"text-green-600",Failed:"text-red-600"};return z.jsx("span",{className:`font-medium ${e[t]}`,children:t})},cQi=({progress:t})=>{if(t===0)return null;const e=Math.round(t*100);return z.jsxs("div",{className:"flex items-center gap-2",children:[z.jsx("div",{className:"w-20 h-2 bg-gray-200 rounded overflow-hidden",children:z.jsx("div",{className:"h-full bg-blue-500 transition-all duration-200",style:{width:`${e}%`}})}),z.jsxs("span",{className:"text-xs text-gray-500",children:[e,"%"]})]})},TAn=t=>{if(typeof t=="string")return t;if(typeof t=="number"||typeof t=="boolean"||typeof t=="bigint"||t==null)return String(t);if(typeof t=="object")try{return JSON.stringify(t)}catch{return String(t)}return String(t)},lQi=t=>Object.entries(t).map(([e,n])=>`${e}: ${TAn(n)}`).join(", "),gQi=({stats:t})=>{if(!t||Object.keys(t).length===0)return z.jsx("span",{children:"-"});const e=Object.entries(t),n=lQi(t);return z.jsxs("details",{className:"cursor-pointer",children:[z.jsx("summary",{className:"whitespace-nowrap overflow-hidden text-ellipsis max-w-[200px]",children:n}),z.jsx("div",{className:"mt-1 text-xs",children:e.map(([o,i])=>z.jsxs("div",{children:[o,": ",TAn(i)]},o))})]})},Sze=t=>{if(t===null||typeof t!="object")return t;if(Array.isArray(t))return t.map(Sze);const e={};for(const[n,o]of Object.entries(t))n.startsWith("_")||(e[n]=Sze(o));return e},uQi=(t,e)=>{try{if(typeof t.getConstructorParams!="function"){alert(`getConstructorParams() is not implemented for ${e}`);return}const n=Sze(t.getConstructorParams()),o=new Blob([JSON.stringify(n,null,2)],{type:"application/json"}),i=URL.createObjectURL(o),r=document.createElement("a");r.href=i,r.download=`${e}_input.json`,r.click(),URL.revokeObjectURL(i)}catch(n){alert(`Error downloading input for ${e}: ${n instanceof Error?n.message:String(n)}`)}},dQi=({expanded:t})=>z.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",className:`w-4 h-4 transition-transform duration-200 ${t?"rotate-90":""}`,children:z.jsx("path",{fillRule:"evenodd",d:"M4.5 5.653c0-1.426 1.529-2.33 2.779-1.643l11.54 6.348c1.295.712 1.295 2.573 0 3.285L7.28 19.991c-1.25.687-2.779-.217-2.779-1.643V5.653z",clipRule:"evenodd"})}),kAn=t=>{let e=t;for(;e.activeSubSolver;)e=e.activeSubSolver;return e},FAn=({solver:t,onStepUntilPhase:e,onDownloadInput:n,isNested:o=!1,indentLevel:i=0,triggerRender:r})=>{const[s,a]=te.useState(new Set),A=t.pipelineDef.map((p,_)=>aQi(t,_)),c=p=>{a(_=>{const f=new Set(_);return f.has(p)?f.delete(p):f.add(p),f})},l=p=>{e?.(p)},g=p=>{p.solverInstance&&(n?n(p.solverInstance,p.name):uQi(p.solverInstance,p.name))},u=p=>`${(p/1e3).toFixed(2)}s`,h=()=>{if(!t.solved&&!t.failed){const p=t.activeSubSolver;for(;!t.solved&&!t.failed&&(t.step(),!(t.activeSubSolver&&t.activeSubSolver!==p)););r?.()}},d=()=>{if(!t.solved&&!t.failed){const p=kAn(t);for(;!t.solved&&!t.failed&&(t.step(),kAn(t)===p););r?.()}},m=i*24;return z.jsxs("div",{className:o?"":"border-t border-gray-200",children:[!o&&z.jsxs("div",{className:"px-4 py-2 bg-gray-50 border-b border-gray-200 flex items-center justify-between",children:[z.jsx("h3",{className:"text-sm font-semibold text-gray-700",children:"Pipeline Stages"}),z.jsxs("div",{className:"flex gap-2",children:[z.jsx("button",{onClick:d,disabled:t.solved||t.failed,className:"bg-indigo-500 hover:bg-indigo-600 disabled:bg-gray-300 disabled:cursor-not-allowed cursor-pointer text-white px-3 py-1 rounded text-sm",children:"Next Solver"}),z.jsx("button",{onClick:h,disabled:t.solved||t.failed,className:"bg-purple-500 hover:bg-purple-600 disabled:bg-gray-300 disabled:cursor-not-allowed cursor-pointer text-white px-3 py-1 rounded text-sm",children:"Next Stage"})]})]}),z.jsx("div",{className:"overflow-x-auto",children:z.jsxs("table",{className:"w-full text-sm",children:[!o&&z.jsx("thead",{children:z.jsxs("tr",{className:"bg-gray-50 border-b border-gray-200",children:[z.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Stage"}),z.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Status"}),z.jsxs("th",{className:"px-4 py-2 text-center font-semibold text-gray-700",children:["i",z.jsx("sub",{children:"0"})]}),z.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Iterations"}),z.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Progress"}),z.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Time"}),z.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Stats"}),z.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Input"})]})}),z.jsx("tbody",{children:A.map(p=>{const _=rQi(p.solverInstance),f=s.has(p.name);return z.jsxs(ws.Fragment,{children:[z.jsxs("tr",{className:`border-b border-gray-100 ${p.status==="In Progress"?"bg-yellow-50":""}`,children:[z.jsx("td",{className:"px-4 py-2",children:z.jsxs("div",{className:"flex items-center gap-2",style:{paddingLeft:m},children:[_?z.jsx("button",{onClick:()=>c(p.name),className:"text-gray-500 hover:text-gray-700",title:f?"Collapse":"Expand",children:z.jsx(dQi,{expanded:f})}):z.jsx("span",{className:"w-4"}),z.jsx("span",{className:"text-gray-400 w-6",children:String(p.index+1).padStart(2,"0")}),z.jsx("button",{onClick:()=>l(p.name),disabled:p.status==="Completed"||t.solved||t.failed,className:"text-blue-500 hover:text-blue-700 disabled:text-gray-300 disabled:cursor-not-allowed",title:`Step until ${p.name} completes`,children:z.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",className:"w-4 h-4",children:z.jsx("path",{fillRule:"evenodd",d:"M4.5 5.653c0-1.426 1.529-2.33 2.779-1.643l11.54 6.348c1.295.712 1.295 2.573 0 3.285L7.28 19.991c-1.25.687-2.779-.217-2.779-1.643V5.653z",clipRule:"evenodd"})})}),z.jsx("span",{className:"font-medium text-gray-900",children:p.name})]})}),z.jsx("td",{className:"px-4 py-2",children:z.jsx(AQi,{status:p.status})}),z.jsx("td",{className:"px-4 py-2 text-center text-gray-600",children:p.firstIteration!==null?p.firstIteration:""}),z.jsx("td",{className:"px-4 py-2 text-gray-600",children:p.iterations}),z.jsx("td",{className:"px-4 py-2",children:z.jsx(cQi,{progress:p.progress})}),z.jsx("td",{className:"px-4 py-2 text-gray-600",children:u(p.timeSpent)}),z.jsx("td",{className:"px-4 py-2 text-gray-500",children:z.jsx(gQi,{stats:p.stats})}),z.jsx("td",{className:"px-4 py-2",children:p.solverInstance?z.jsxs("button",{onClick:()=>g(p),className:"flex items-center gap-1 text-blue-500 hover:text-blue-700",title:`Download input for ${p.name}`,children:[z.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",className:"w-4 h-4",children:z.jsx("path",{fillRule:"evenodd",d:"M12 2.25a.75.75 0 01.75.75v11.69l3.22-3.22a.75.75 0 111.06 1.06l-4.5 4.5a.75.75 0 01-1.06 0l-4.5-4.5a.75.75 0 111.06-1.06l3.22 3.22V3a.75.75 0 01.75-.75zm-9 13.5a.75.75 0 01.75.75v2.25a1.5 1.5 0 001.5 1.5h13.5a1.5 1.5 0 001.5-1.5V16.5a.75.75 0 011.5 0v2.25a3 3 0 01-3 3H5.25a3 3 0 01-3-3V16.5a.75.75 0 01.75-.75z",clipRule:"evenodd"})}),z.jsx("span",{children:"Input"})]}):null})]}),_&&f&&z.jsx("tr",{children:z.jsx("td",{colSpan:8,className:"p-0",children:z.jsx(FAn,{solver:p.solverInstance,onStepUntilPhase:e,onDownloadInput:n,isNested:!0,indentLevel:i+1,triggerRender:r})})})]},p.name)})})]})})]})};function hQi({graphics:t}){const e=t.points??[],n=t.lines??[],o=t.rects??[],i=t.circles??[],r=t.texts??[];let s=Number.POSITIVE_INFINITY,a=Number.POSITIVE_INFINITY,A=Number.NEGATIVE_INFINITY,c=Number.NEGATIVE_INFINITY;const l=(p,_)=>{typeof p=="number"&&(p<s&&(s=p),p>A&&(A=p)),typeof _=="number"&&(_<a&&(a=_),_>c&&(c=_))};for(const p of e)l(p.x,p.y);for(const p of n){const _=p.points??[];for(const f of _)l(f.x,f.y)}for(const p of o){const _=p.x??0,f=p.y??0,I=p.width??0,C=p.height??0;l(_,f),l(_+I,f+C)}for(const p of i){const _=p.x??0,f=p.y??0,I=p.radius??1;l(_-I,f-I),l(_+I,f+I)}for(const p of r)l(p.x,p.y);(!isFinite(s)||!isFinite(a)||!isFinite(A)||!isFinite(c))&&(s=-20,a=-20,A=20,c=20);const g=10,u=s-g,h=a-g,d=Math.max(1,A-s+2*g),m=Math.max(1,c-a+2*g);return z.jsxs("svg",{className:"w-full h-[400px] bg-white",viewBox:`${u} ${h} ${d} ${m}`,role:"img","aria-label":"Graphics fallback",children:[o.map((p,_)=>z.jsx("rect",{x:p.x??0,y:p.y??0,width:p.width??0,height:p.height??0,fill:"none",stroke:p.strokeColor??"black",strokeWidth:p.strokeWidth??1},`rect-${_}`)),n.map((p,_)=>z.jsx("polyline",{fill:"none",stroke:p.strokeColor??"black",strokeWidth:p.strokeWidth??1,points:(p.points??[]).map(f=>`${f.x??0},${f.y??0}`).join(" ")},`line-${_}`)),i.map((p,_)=>z.jsx("circle",{cx:p.x??0,cy:p.y??0,r:p.radius??1.5,fill:p.fillColor??"none",stroke:p.strokeColor??"black",strokeWidth:p.strokeWidth??1},`circle-${_}`)),e.map((p,_)=>z.jsx("circle",{cx:p.x??0,cy:p.y??0,r:p.radius??1.5,fill:p.color??"black"},`point-${_}`)),r.map((p,_)=>z.jsx("text",{x:p.x??0,y:p.y??0,fontSize:p.fontSize??10,fill:p.color??"black",children:p.text??""},`text-${_}`))]})}var mQi=class extends ws.Component{constructor(t){super(t),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(t){console.error("InteractiveGraphics render error:",t)}render(){return this.state.hasError?this.props.fallback:this.props.children}},pQi=({solver:t,createSolver:e,animationSpeed:n=25,onSolverStarted:o,onSolverCompleted:i})=>{const[r,s]=te.useReducer(f=>f+1,0),[a]=te.useState(()=>{if(e)return e();if(!t)throw new Error("GenericSolverDebugger requires solver or createSolver");return t}),[A,c]=te.useState(()=>typeof window>"u"?"vector":window.localStorage.getItem("solver-utils-renderer")==="canvas"?"canvas":"vector"),[l,g]=te.useState(n),u=te.useMemo(()=>{try{return a.visualize()||{points:[],lines:[],rects:[],circles:[]}}catch(f){return console.error("Visualization error:",f),{points:[],lines:[],rects:[],circles:[]}}},[a,r]),h=te.useMemo(()=>(u.rects?.length||0)===0&&(u.lines?.length||0)===0&&(u.points?.length||0)===0&&(u.circles?.length||0)===0,[u]);te.useEffect(()=>{if(!(typeof document>"u")&&!document.querySelector('script[src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"]')){const f=document.createElement("script");f.src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4",document.head.appendChild(f)}},[]),te.useEffect(()=>{g(n)},[n]);const d=a.pipelineDef!==void 0,m=f=>{const I=a;if(!a.solved&&!a.failed){for(;!a.solved&&!a.failed&&I.currentPipelineStageIndex<=I.pipelineDef.findIndex(C=>C.solverName===f);)a.step();s()}},p=()=>{const f=JSON.stringify(u,null,2),I=new Blob([f],{type:"application/json"}),C=URL.createObjectURL(I),y=document.createElement("a");y.download="visualization.json",y.href=C,document.body.appendChild(y),y.click(),document.body.removeChild(y),URL.revokeObjectURL(C)},_=f=>{c(f),typeof window<"u"&&window.localStorage.setItem("solver-utils-renderer",f)};return z.jsxs("div",{children:[z.jsx(iQi,{solver:a,triggerRender:s,animationSpeed:l,renderer:A,onRendererChange:_,onAnimationSpeedChange:g,onDownloadVisualization:p,onSolverStarted:o,onSolverCompleted:i}),h?z.jsx("div",{className:"p-4 text-gray-500",children:"No Graphics Yet"}):z.jsx(mQi,{fallback:z.jsx(hQi,{graphics:u}),children:A==="canvas"?z.jsx(tQi,{graphics:u}):z.jsx($bi,{graphics:u})}),d&&z.jsx(FAn,{solver:a,onStepUntilPhase:m,triggerRender:s})]})};const _Qi=()=>{te.useEffect(()=>{const t="tailwind-cdn-script";if(document.getElementById(t)||window.tailwind)return;const e=document.createElement("div");e.className="hidden",document.body.appendChild(e);const n=window.getComputedStyle(e).display==="none";if(document.body.removeChild(e),n)return;const o=document.createElement("script");o.id=t,o.src="https://cdn.tailwindcss.com",document.head.appendChild(o)},[])},fQi=1e3,sE=(t,e)=>{const{fileName:n,mimeType:o="text/plain"}=e,i=t instanceof Blob?t:new Blob([t],{type:o}),r=URL.createObjectURL(i),s=document.createElement("a");s.href=r,s.download=n,s.target="_blank",s.rel="noopener noreferrer",s.style.display="none",document.body.appendChild(s),s.click(),document.body.removeChild(s),setTimeout(()=>{URL.revokeObjectURL(r)},fQi)},bze=t=>{let e=t.trim().replace(/[\\/:*?"<>|]/g,"_").replace(/[\x00-\x1f]/g,"").replace(/^\.+/,"").replace(/\.+$/,"").replace(/\s+/g," ").replace(/_+/g,"_");return/^(con|prn|aux|nul|com[0-9]|lpt[0-9])$/i.test(e)&&(e=`_${e}`),e=e.slice(0,200),e||"untitled"},IQi=t=>{const e=t.solverConstructorArgs??[t.solverParams];if(t.solverName!=="AutoroutingPipelineSolver7_MultiGraph"||e.length!==1)return e;const[{input:n,options:o}]=e;return[n,o]},h7="https://github.com/tscircuit/tscircuit-autorouter/issues/new",LAn="https://github.com/tscircuit/copper-pour-solver/issues/new",HAn="https://github.com/tscircuit/calculate-packing/issues/new",CQi="https://github.com/tscircuit/matchpack/issues/new",OAn="https://github.com/tscircuit/schematic-trace-solver/issues/new?template=json-bug-report.yml",yQi={PackSolver2:HAn,LayoutPipelineSolver:CQi,AutoroutingPipelineSolver:h7,AssignableAutoroutingPipeline2:h7,AssignableAutoroutingPipeline3:h7,AutoroutingPipeline1_OriginalUnravel:h7,AutoroutingPipelineSolver3_HgPortPointPathing:h7,AutoroutingPipelineSolver4:h7,AutoroutingPipelineSolver5:h7,AutoroutingPipelineSolver7_MultiGraph:h7,AutoroutingPipelineSolver8:h7,CopperPourPipelineSolver:LAn,SchematicTracePipelineSolver:OAn},xQi=t=>t.toLowerCase().includes("pack")?cyi:t.toLowerCase().includes("rout")?jon:tyi,GAn=t=>{const e=yQi[t];if(e)return e;const n=t.toLowerCase();return n.includes("autorout")?h7:n.includes("schematic")&&n.includes("trace")?OAn:n.includes("copperpour")?LAn:n.includes("pack")?HAn:null},EQi=t=>`${bze(`${t.componentName}-${t.solverName}`)}-solver-input.json`,YAn=t=>{sE(JSON.stringify(t.solverParams,null,2),{fileName:EQi(t),mimeType:"application/json"})},BQi=({solverEvent:t})=>{const e=GAn(t.solverName);return z.jsxs("div",{className:"rf-flex rf-items-center rf-justify-end rf-gap-2 rf-border-b rf-border-gray-200 rf-bg-gray-50 rf-px-4 rf-py-2",children:[z.jsxs(Kc,{type:"button",variant:"outline",size:"sm",onClick:()=>YAn(t),children:[z.jsx(Iq,{className:"rf-w-4 rf-h-4"}),"Download"]}),e?z.jsx(Kc,{asChild:!0,variant:"outline",size:"sm",children:z.jsxs("a",{href:e,target:"_blank",rel:"noopener noreferrer",children:[z.jsx(Mde,{className:"rf-w-4 rf-h-4"}),"Report"]})}):z.jsxs(Kc,{type:"button",variant:"outline",size:"sm",disabled:!0,title:"No report link configured for this solver",children:[z.jsx(Mde,{className:"rf-w-4 rf-h-4"}),"Report"]})]})},SQi=({solverEvent:t})=>{const e=GAn(t.solverName);return e?z.jsx(Kc,{asChild:!0,variant:"ghost",size:"icon",className:"rf-h-8 rf-w-8",children:z.jsx("a",{href:e,target:"_blank",rel:"noopener noreferrer",title:"Report solver bug","aria-label":"Report solver bug",children:z.jsx(Mde,{className:"rf-w-4 rf-h-4"})})}):z.jsx(Kc,{type:"button",variant:"ghost",size:"icon",className:"rf-h-8 rf-w-8",disabled:!0,title:"No report link configured for this solver","aria-label":"Report solver bug",children:z.jsx(Mde,{className:"rf-w-4 rf-h-4"})})},bQi=({solverEvents:t=[]})=>{const[e,n]=te.useState(null);_Qi();const o=te.useMemo(()=>{const a=new Map;for(const A of t){const c=`${A.componentName}-${A.solverName}`;a.set(c,A)}return a},[t]),i=te.useMemo(()=>Array.from(o.keys()),[o]),r=e?o.get(e):null,s=te.useMemo(()=>{if(!r)return{instance:null,error:null,classFound:!1};const a=SDe[r.solverName];if(!a)return{instance:null,error:`Solver class "${r.solverName}" not found in SOLVERS registry. Available: ${Object.keys(SDe).join(", ")}`,classFound:!1};try{return{instance:new a(...IQi(r)),error:null,classFound:!0}}catch(A){const c=A instanceof Error?A.message:String(A);return console.error("Failed to reconstruct solver:",A),{instance:null,error:`Failed to instantiate solver: ${c}`,classFound:!0}}},[r]);return t.length===0?z.jsx("div",{className:"rf-p-4",children:z.jsx("div",{className:"rf-bg-gray-50 rf-rounded-md rf-border rf-border-gray-200",children:z.jsxs("div",{className:"rf-p-4",children:[z.jsx("h3",{className:"rf-text-lg rf-font-semibold rf-text-gray-800 rf-mb-3",children:"No Solvers Detected"}),z.jsx("p",{className:"rf-text-sm rf-text-gray-600",children:"Solvers will appear here when the circuit runs. Solvers are used for tasks like component packing and autorouting."})]})})}):z.jsxs("div",{className:"rf-flex rf-h-full rf-overflow-hidden",children:[z.jsxs("div",{className:"rf-w-64 rf-border-r rf-border-gray-200 rf-overflow-y-auto rf-flex-shrink-0",children:[z.jsxs("div",{className:"rf-text-xs rf-font-semibold rf-text-gray-500 rf-px-3 rf-py-2 rf-bg-gray-50 rf-border-b rf-border-gray-200",children:[i.length," ",i.length===1?"Solver":"Solvers"]}),i.map(a=>{const A=o.get(a),c=e===a;return z.jsx("div",{className:`rf-px-3 rf-py-2 rf-cursor-pointer rf-border-b rf-border-gray-100 ${c?"rf-bg-blue-50 rf-border-l-2 rf-border-l-blue-500":"hover:rf-bg-gray-50"}`,onClick:()=>n(a),children:(()=>{const l=xQi(A.solverName);return z.jsxs("div",{className:"rf-flex rf-items-center rf-gap-2",children:[z.jsx(l,{className:"rf-w-4 rf-h-4 rf-text-blue-500 rf-flex-shrink-0"}),z.jsxs("div",{className:"rf-flex-1 rf-min-w-0",children:[z.jsx("div",{className:"rf-text-sm rf-font-medium rf-text-gray-800 rf-truncate",children:A.componentName}),z.jsx("div",{className:"rf-text-xs rf-text-gray-500 rf-truncate",children:A.solverName})]})]})})()},a)})]}),z.jsx("div",{className:"rf-flex-1 rf-overflow-hidden",children:r?s.instance?z.jsxs("div",{className:"rf-flex rf-h-full rf-flex-col rf-overflow-y-auto",children:[z.jsx(BQi,{solverEvent:r}),z.jsx("div",{className:"rf-min-h-0 rf-flex-1",children:z.jsx(EB,{fallback:z.jsx("div",{className:"rf-p-4",children:z.jsxs("div",{className:"rf-bg-red-50 rf-rounded-md rf-border rf-border-red-200 rf-p-4",children:[z.jsx("h3",{className:"rf-text-lg rf-font-semibold rf-text-red-800 rf-mb-2",children:"Error Loading Solver Debugger"}),z.jsxs("p",{className:"rf-text-sm rf-text-red-600",children:["Failed to render the solver debugger for"," ",r.solverName]})]})}),children:z.jsx(pQi,{solver:s.instance})})})]}):z.jsxs("div",{className:"rf-p-4",children:[z.jsxs("div",{className:"rf-mb-4",children:[z.jsx("h3",{className:"rf-text-lg rf-font-semibold rf-text-gray-800",children:r.solverName}),z.jsxs("p",{className:"rf-text-sm rf-text-gray-500",children:["Component: ",r.componentName]})]}),s.error&&z.jsx("div",{className:`rf-rounded-md rf-border rf-p-4 rf-mb-4 ${s.classFound?"rf-bg-red-50 rf-border-red-200":"rf-bg-yellow-50 rf-border-yellow-200"}`,children:z.jsx("p",{className:`rf-text-sm ${s.classFound?"rf-text-red-700":"rf-text-yellow-700"}`,children:s.error})}),z.jsxs("div",{className:"rf-border rf-border-gray-200 rf-rounded-md rf-overflow-hidden",children:[z.jsxs("div",{className:"rf-px-3 rf-py-2 rf-bg-gray-50 rf-flex rf-items-center rf-justify-between rf-gap-2",children:[z.jsx("span",{className:"rf-text-sm rf-font-medium rf-text-gray-700",children:"Solver Parameters"}),z.jsxs("div",{className:"rf-flex rf-items-center rf-gap-1",children:[z.jsx(SQi,{solverEvent:r}),z.jsx(Kc,{type:"button",variant:"ghost",size:"icon",className:"rf-h-8 rf-w-8","aria-label":"Download solver input JSON",title:"Download solver input JSON",onClick:()=>YAn(r),children:z.jsx(Iq,{className:"rf-w-4 rf-h-4"})})]})]}),z.jsx("div",{className:"rf-p-3 rf-bg-white rf-border-t rf-border-gray-200",children:z.jsx("pre",{className:"rf-text-xs rf-font-mono rf-text-gray-600 rf-whitespace-pre-wrap rf-overflow-x-auto",children:JSON.stringify(r.solverParams,null,2)})})]})]}):z.jsx("div",{className:"rf-flex rf-items-center rf-justify-center rf-h-full",children:z.jsx("p",{className:"rf-text-sm rf-text-gray-500",children:"Select a solver from the list to view details"})})})]})},QQi=new Map([["custom","Custom"],["fanout","Fanout"],["single_layer_fanout","Single layer fanout"],["tscircuit_simplify","Simplify"]]),vQi=new Set(["tscircuit","default","auto","auto_local"]);function PQi(t){if(t==="FanoutSolver")return"Fanout";if(t==="AutoroutingPipelineSolver11_Simplification")return"Simplify";const e=t.match(/^AutoroutingPipeline(?:Solver)?(\d+)(?:_|$)/);if(e)return`Pipeline${e[1]}`;const n=t.match(/^AssignableAutoroutingPipeline(\d+)$/);return n?`Assignable${n[1]}`:t}function wQi(t){const e=t.autorouterName?.trim(),n=e?.replace(/-/g,"_"),o=n&&QQi.get(n);if(o)return o;if(n&&!vQi.has(n))return e;const i=t.solverName?.trim();if(i)return PQi(i);const r=t.autorouterVersion?.trim();if(r){const s=r.match(/^beta[_-]pipeline(\d+)$/);return s?`Pipeline${s[1]}`:r==="latest"?"default":r}return e?"default":"Unknown"}const Qze="#fbbf24";function MQi(t){const e=t.endSimpleRouteJson?.traces??[],n=new Set(e.flatMap(i=>[i.pcb_trace_id,i.__replaces_pcb_trace_id].filter(r=>r!==void 0)));return[...(t.startSimpleRouteJson?.traces??[]).filter(i=>!n.has(i.pcb_trace_id)),...e]}function UAn(t){const e=new Map((t.startSimpleRouteJson?.traces??[]).map(n=>[n.pcb_trace_id,n]));return(t.endSimpleRouteJson?.traces??[]).filter(n=>{const o=e.get(n.pcb_trace_id);return!o||!!n.__replaces_pcb_trace_id&&n.__replaces_pcb_trace_id!==o.__replaces_pcb_trace_id||JSON.stringify(o.route)!==JSON.stringify(n.route)}).map(n=>n.pcb_trace_id)}function DQi(t,e){return{outer_diameter:t.via_diameter??e.minViaPadDiameter??e.min_via_pad_diameter??e.minViaDiameter??.6,hole_diameter:t.via_hole_diameter??e.minViaHoleDiameter??e.min_via_hole_diameter??.3}}function KAn(t,e){const n=[];for(const a of t.route)a.route_type==="wire"?n.push({...a,layer:a.layer}):a.route_type==="via"?n.push({route_type:"via",x:a.x,y:a.y,from_layer:a.from_layer,to_layer:a.to_layer,...DQi(a,e)}):a.route_type==="through_obstacle"&&n.push({route_type:"through_pad",start:{...a.start},end:{...a.end},width:a.width,start_layer:a.from_layer,end_layer:a.to_layer,pcb_smtpad_id:a.circuitJsonMetadata?.pcb_smtpad_id,pcb_plated_hole_id:a.circuitJsonMetadata?.pcb_plated_hole_id});const o=a=>{let A=-1,c=Number.POSITIVE_INFINITY;return n.forEach((l,g)=>{if(l.route_type!=="wire")return;const u=Math.hypot(l.x-a.x,l.y-a.y);u<c&&(c=u,A=g)}),A},i=t.route.filter(a=>a.route_type==="jumper").map(a=>[o(a.start),o(a.end)].sort((A,c)=>A-c)).filter(([a,A])=>a>=0&&A>a).sort(([a],[A])=>a-A),r=[];let s=0;for(const[a,A]of i)a>=s&&r.push(n.slice(s,a+1)),s=Math.max(s,A);return s<n.length&&r.push(n.slice(s)),r}function NQi(t){const e=[],n=[],o=t.endSimpleRouteJson;if(!o)return{lines:e,circles:n};const i=new Set(UAn(t));for(const r of o.traces??[])if(i.has(r.pcb_trace_id))for(const s of KAn(r,o)){let a;for(const A of s){if(A.route_type==="through_pad"){a={...A.end,layer:A.end_layer,width:A.width};continue}const c=A.route_type==="wire"?A.layer:A.from_layer;a&&a.layer===c&&(a.x!==A.x||a.y!==A.y)&&e.push({points:[{x:a.x,y:a.y},{x:A.x,y:A.y}],strokeWidth:A.route_type==="wire"?A.width:a.width,strokeColor:Qze,layer:c}),A.route_type==="via"&&n.push({center:{x:A.x,y:A.y},radius:A.outer_diameter/2,stroke:Qze,fill:"transparent"}),a={x:A.x,y:A.y,layer:A.route_type==="wire"?A.layer:A.to_layer,width:A.route_type==="wire"?A.width:a?.width??o.minTraceWidth}}}return{coordinateSystem:"cartesian",lines:e,circles:n}}function RQi(t){const e=JSON.stringify(t);let n=2166136261;for(let o=0;o<e.length;o++)n=Math.imul(n^e.charCodeAt(o),16777619);return(n>>>0).toString(36)}const TQi=new Set(["pcb_trace","pcb_via","pcb_copper_pour","pcb_ground_plane","pcb_ground_plane_region","pcb_thermal_spoke","pcb_breakout_point"]);function kQi(t,e,n){const o=n==="input"?e.startSimpleRouteJson??e.errorSimpleRouteJson:e.endSimpleRouteJson,i=t.filter(c=>!TQi.has(c.type)&&!c.type.endsWith("_error")&&!c.type.endsWith("_warning"));if(!o)return i;const r=n==="input"?o.traces??[]:MQi(e),s=new Set(t.filter(c=>c.type==="source_trace").map(c=>c.source_trace_id)),a=["top",...Array.from({length:Math.max(0,o.layerCount-2)},(c,l)=>`inner${l+1}`),...o.layerCount>1?["bottom"]:[]],A=[];for(const c of r){const g=o.connections.find(h=>h.name===c.connection_name||h.source_trace_id===c.connection_name)?.source_trace_id??c.connection_name??"",u=KAn(c,o);for(const[h,d]of u.entries()){const m={type:"pcb_trace",pcb_trace_id:`${e.id}_${n}_${c.pcb_trace_id}_${h}_${RQi(d)}`,subcircuit_id:e.subcircuit_id??void 0,source_trace_id:s.has(g)?g:void 0,route:d};A.push(m);for(const[p,_]of d.entries()){if(_.route_type!=="via")continue;const f=a.indexOf(_.from_layer),I=a.indexOf(_.to_layer),C={type:"pcb_via",pcb_via_id:`${m.pcb_trace_id}_via_${p}`,pcb_trace_id:m.pcb_trace_id,subcircuit_id:e.subcircuit_id??void 0,x:_.x,y:_.y,outer_diameter:_.outer_diameter,hole_diameter:_.hole_diameter,layers:f>=0&&I>=0?a.slice(Math.min(f,I),Math.max(f,I)+1):[_.from_layer,_.to_layer]};A.push(C)}}}return[...i,...A]}const vze=(t,e)=>t.phaseName||`Phase ${t.phaseOrdinal??e+1}`,VAn=t=>t.componentDisplayName?.match(/name="([^"]+)"/)?.[1]?.replace(/^\./,"")||t.componentDisplayName||t.subcircuit_id||"Board",zAn=t=>t.startSimpleRouteJson??t.endSimpleRouteJson??t.errorSimpleRouteJson,FQi={is_showing_autorouting:!0,is_showing_rats_nest:!1,is_showing_drc_errors:!1,is_showing_drc_warnings:!1,is_showing_pcb_groups:!1},LQi=({circuitJson:t,phases:e=[],isRunning:n=!1})=>{const[o,i]=te.useState(null),[r,s]=te.useState("output"),[a,A]=te.useState(!0),[c,l]=te.useState(!1),g=te.useRef(null),[u,h]=te.useState(480),d=o?e.findIndex(T=>T.id===o.id&&zAn(T)===zAn(o)):-1,m=d<0?e.length-1:d,p=e[m],_=d<0,f=!!p?.endSimpleRouteJson,I=p?.startSimpleRouteJson??p?.errorSimpleRouteJson,C=!!I,y=r==="output"&&!f?"input":r==="input"&&!C?"output":r,x=y==="input"?I:p?.endSimpleRouteJson,E=te.useMemo(()=>!p||!x?null:kQi(t??[],p,y),[t,p,x,y]),B=te.useMemo(()=>p&&y==="output"&&a?NQi(p):{lines:[],circles:[]},[p,y,a]);if(te.useLayoutEffect(()=>{const T=g.current;if(!T)return;const H=()=>h(Math.max(360,T.clientHeight));H();const G=new ResizeObserver(H);return G.observe(T),()=>G.disconnect()},[!!p]),!p)return z.jsxs("div",{className:"rf-flex rf-min-h-[400px] rf-flex-col rf-items-center rf-justify-center rf-gap-3 rf-p-8 rf-text-center",children:[z.jsx(jon,{className:"rf-h-7 rf-w-7 rf-text-blue-500"}),z.jsx("h3",{className:"rf-text-base rf-font-medium",children:n?"Waiting for autorouting":"No autorouting captures"}),z.jsx("p",{className:"rf-max-w-md rf-text-sm rf-text-gray-500",children:n?"Phases appear as the circuit routes. Each capture includes its input and output on the PCB.":"Run a circuit with autorouting enabled to inspect its phases. A circuit JSON file alone does not include routing history."})]});const b=vze(p,m),Q=p.status==="running"&&n,w=!f,D=I?.connections.length,k=E?.filter(T=>T.type==="pcb_trace").length??0;return z.jsxs("div",{className:"rf-flex rf-h-full rf-min-h-[620px] rf-flex-col rf-bg-white md:rf-flex-row","data-testid":"autorouting-explorer",children:[z.jsxs("aside",{className:"rf-flex rf-shrink-0 rf-flex-col rf-border-b rf-border-gray-200 md:rf-w-52 md:rf-border-b-0 md:rf-border-r","aria-label":"Routing phases",children:[z.jsxs("div",{className:"rf-flex rf-items-center rf-justify-between rf-px-3 rf-py-2 rf-text-xs rf-text-gray-500",children:[z.jsx("span",{children:"Routing phases"}),z.jsx("span",{children:e.length})]}),z.jsx("div",{className:"rf-flex rf-gap-1 rf-overflow-x-auto rf-px-1.5 rf-pb-1.5 md:rf-flex-col md:rf-overflow-x-hidden md:rf-overflow-y-auto",children:e.map((T,H)=>{const G=UAn(T).length,U=T.endSimpleRouteJson?`${G} ${G===1?"trace":"traces"} routed`:T.status==="error"?"Failed":T.status==="running"&&n?"Routing…":"No output";return z.jsxs("button",{type:"button","aria-pressed":H===m,title:`${VAn(T)} · ${U}`,onClick:()=>i(T),className:Ur("rf-flex rf-min-w-[192px] rf-items-start rf-gap-2 rf-rounded-md rf-border rf-px-2 rf-py-2 rf-text-left md:rf-min-w-0",H===m?"rf-border-blue-200 rf-bg-blue-50":"rf-border-transparent hover:rf-bg-gray-50"),children:[z.jsx("span",{className:Ur("rf-flex rf-h-5 rf-w-5 rf-shrink-0 rf-items-center rf-justify-center rf-rounded-full rf-text-[11px]",H===m?"rf-bg-blue-600 rf-text-white":"rf-bg-gray-100 rf-text-gray-500"),children:H+1}),z.jsxs("span",{className:"rf-min-w-0 rf-flex-1",children:[z.jsxs("span",{className:"rf-flex rf-items-center rf-gap-1",children:[z.jsx("span",{className:"rf-min-w-0 rf-flex-1 rf-truncate rf-text-xs rf-font-medium rf-leading-5 rf-text-gray-800",title:vze(T,H),children:vze(T,H)}),T.status==="complete"?z.jsx(fq,{"aria-label":"Captured",className:"rf-h-3 rf-w-3 rf-shrink-0 rf-text-green-600"}):T.status==="error"?z.jsx(mKe,{"aria-label":"Failed",className:"rf-h-3 rf-w-3 rf-shrink-0 rf-text-red-500"}):n?z.jsx(Y5,{"aria-label":"Routing",className:"rf-h-3 rf-w-3 rf-shrink-0 rf-animate-spin rf-text-blue-500"}):null]}),z.jsxs("span",{className:"rf-block rf-text-[11px] rf-leading-4 rf-text-gray-500",children:[wQi(T)," · ",U]})]})]},T.id)})})]}),z.jsxs("div",{className:"rf-flex rf-min-w-0 rf-flex-1 rf-flex-col",children:[z.jsxs("div",{className:"rf-flex rf-flex-wrap rf-items-center rf-gap-3 rf-border-b rf-border-gray-200 rf-px-4 rf-py-3",children:[z.jsxs("h3",{className:"rf-mr-auto rf-flex rf-items-center rf-gap-2 rf-text-sm rf-font-medium",children:[b,z.jsxs("span",{className:"rf-text-xs rf-font-normal rf-text-gray-500",children:[m+1," of ",e.length]})]}),n&&z.jsx("button",{type:"button",onClick:()=>i(null),disabled:_,className:"rf-text-xs rf-text-blue-600 disabled:rf-text-gray-500",children:_?"Following latest":"Follow latest"}),z.jsx("div",{className:"rf-flex rf-rounded-md rf-bg-gray-100 rf-p-1","aria-label":"Phase snapshot",children:["input","output"].map(T=>z.jsx("button",{type:"button","aria-pressed":y===T,disabled:T==="input"?!C:!f,onClick:()=>s(T),className:Ur("rf-rounded rf-px-3 rf-py-1 rf-text-xs disabled:rf-opacity-40",y===T?"rf-bg-white rf-text-gray-900 rf-shadow-sm":"rf-text-gray-500"),children:T==="input"?"Input":"Output"},T))})]}),z.jsxs("div",{className:"rf-flex rf-flex-wrap rf-items-center rf-justify-between rf-gap-2 rf-px-4 rf-py-2 rf-text-xs rf-text-gray-600",children:[z.jsxs("label",{className:"rf-flex rf-items-center rf-gap-2",children:[z.jsx("input",{type:"checkbox",checked:a,disabled:y!=="output",onChange:T=>A(T.target.checked),className:"rf-accent-blue-600"}),z.jsx("span",{"aria-hidden":"true",className:"rf-inline-block rf-h-0.5 rf-w-3",style:{backgroundColor:Qze}}),"Highlight changes (all layers)"]}),z.jsxs("span",{children:[y==="input"?"Before this phase":"After this phase"," ","· ",k," traces"]})]}),w&&z.jsx("div",{className:Ur("rf-border-y rf-px-4 rf-py-2 rf-text-xs",p.status==="error"?"rf-border-red-100 rf-bg-red-50 rf-text-red-700":"rf-border-blue-100 rf-bg-blue-50 rf-text-blue-700"),role:"status",children:p.status==="error"?`Routing failed: ${p.error?.message||"No output was captured."}`:Q?"Routing in progress. Showing captured input until output is available.":"No output was captured for this phase. Showing the available input."}),z.jsx("div",{ref:g,className:"rf-relative rf-min-h-[360px] rf-flex-1","data-testid":"autorouting-pcb",children:E?z.jsx(fze,{circuitJson:E,height:u,allowEditing:!1,clickToInteractEnabled:!1,initialState:FQi,debugGraphics:B}):z.jsx("div",{className:"rf-p-6 rf-text-sm rf-text-gray-500",children:"No PCB snapshot available for this capture."})}),z.jsxs("div",{className:"rf-flex rf-flex-wrap rf-items-center rf-justify-between rf-gap-2 rf-border-t rf-border-gray-200 rf-px-4 rf-py-3 rf-text-xs rf-text-gray-500",children:[z.jsxs("span",{children:[D===void 0?"Input unavailable":`${D} input connections`,` · ${VAn(p)}`]}),z.jsxs("div",{className:"rf-flex rf-items-center rf-gap-4",children:[z.jsxs("button",{type:"button",disabled:!x,onClick:()=>sE(JSON.stringify(x,null,2),{fileName:`${p.id}-${y}.srj.json`,mimeType:"application/json"}),className:"rf-flex rf-items-center rf-gap-1 disabled:rf-opacity-40",children:[z.jsx(Iq,{className:"rf-h-3 rf-w-3"}),"Download SRJ"]}),z.jsxs("button",{type:"button","aria-expanded":c,onClick:()=>l(!c),className:"rf-flex rf-items-center rf-gap-1",children:[z.jsx(VG,{className:Ur("rf-h-3 rf-w-3",c&&"rf-rotate-90")}),"Inspect SRJ"]})]})]}),c&&z.jsx("pre",{className:"rf-m-0 rf-max-h-64 rf-overflow-auto rf-border-t rf-border-gray-200 rf-bg-gray-50 rf-p-4 rf-text-xs","aria-label":`${b} ${y} SRJ`,children:x?JSON.stringify(x,null,2):"No snapshot captured."})]})]})},JAn=({errorMessage:t,errorStack:e,circuitJsonErrors:n})=>{te.useEffect(()=>{if(t){const o=new Error(t);e&&(o.stack=e);try{UT.captureException(o)}catch{}}},[t,e]),te.useEffect(()=>{if(n&&n.length>0)for(const o of n){const i=new Error(o.message||"Circuit JSON Error");o.stack&&(i.stack=o.stack);try{UT.captureException(i,{error_type:o.type})}catch{}}},[n])},HQi=t=>{te.useEffect(()=>{try{Hxn(t)}catch{}},[t.source,t.component,t.isWebEmbedded,t.activeTab])},WAn="0.0.2769",OQi={version:WAn},Pze={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1},wze=new Map,ome=t=>{const e=wze.get(t);return e?Object.fromEntries(Object.entries(e.stores).map(([n,o])=>[n,o.getState()])):{}},GQi=(t,e,n)=>{if(t===void 0)return{type:"untracked",connection:e.connect(n)};const o=wze.get(n.name);if(o)return{type:"tracked",store:t,...o};const i={connection:e.connect(n),stores:{}};return wze.set(n.name,i),{type:"tracked",store:t,...i}},jAn=(t,e={})=>(n,o,i)=>{const{enabled:r,anonymousActionType:s,store:a,...A}=e;let c;try{c=(r??(Pze?"production":void 0)!=="production")&&window.__REDUX_DEVTOOLS_EXTENSION__}catch{}if(!c)return(Pze?"production":void 0)!=="production"&&r&&console.warn("[zustand devtools middleware] Please install/enable Redux devtools extension"),t(n,o,i);const{connection:l,...g}=GQi(a,c,A);let u=!0;i.setState=(m,p,_)=>{const f=n(m,p);if(!u)return f;const I=_===void 0?{type:s||"anonymous"}:typeof _=="string"?{type:_}:_;return a===void 0?(l?.send(I,o()),f):(l?.send({...I,type:`${a}/${I.type}`},{...ome(A.name),[a]:i.getState()}),f)};const h=(...m)=>{const p=u;u=!1,n(...m),u=p},d=t(i.setState,o,i);if(g.type==="untracked"?l?.init(d):(g.stores[g.store]=i,l?.init(Object.fromEntries(Object.entries(g.stores).map(([m,p])=>[m,m===g.store?d:p.getState()])))),i.dispatchFromDevtools&&typeof i.dispatch=="function"){let m=!1;const p=i.dispatch;i.dispatch=(..._)=>{(Pze?"production":void 0)!=="production"&&_[0].type==="__setState"&&!m&&(console.warn('[zustand devtools middleware] "__setState" action type is reserved to set state from the devtools. Avoid using it.'),m=!0),p(..._)}}return l.subscribe(m=>{var p;switch(m.type){case"ACTION":if(typeof m.payload!="string"){console.error("[zustand devtools middleware] Unsupported action format");return}return Mze(m.payload,_=>{if(_.type==="__setState"){if(a===void 0){h(_.state);return}Object.keys(_.state).length!==1&&console.error(`
|
|
5583
|
+
`,g=new Blob([l],{type:"text/plain"}),u=URL.createObjectURL(g),h=document.createElement("a");h.href=u,h.download=`${c}.test.ts`,h.click(),URL.revokeObjectURL(u)}catch(A){alert(`Error generating test.ts for ${t.getSolverName()}: ${A instanceof Error?A.message:String(A)}`)}o(!1)};return z.jsxs("div",{className:`relative ${e}`,ref:i,children:[z.jsx("button",{className:"px-2 py-1 rounded text-xs cursor-pointer",onClick:()=>o(!n),title:`Download options for ${t.getSolverName()}`,children:t.getSolverName()}),n&&z.jsxs("div",{className:"absolute top-full left-0 mt-1 bg-white border border-gray-300 rounded shadow-lg z-10 min-w-[150px]",children:[z.jsx("button",{className:"w-full text-left px-3 py-2 hover:bg-gray-100 text-xs",onClick:r,children:"Download JSON"}),z.jsx("button",{className:"w-full text-left px-3 py-2 hover:bg-gray-100 text-xs",onClick:s,children:"Download page.tsx"}),z.jsx("button",{className:"w-full text-left px-3 py-2 hover:bg-gray-100 text-xs",onClick:a,children:"Download test.ts"})]})]})},RAn=t=>t.activeSubSolver?[t,...RAn(t.activeSubSolver)]:[t],oQi=({solver:t})=>{const e=RAn(t);return z.jsx("div",{className:"flex gap-1 items-center text-sm pt-1",children:e.map((n,o)=>z.jsxs("div",{className:"flex items-center",children:[o>0&&z.jsx("span",{className:"text-gray-400 mx-1",children:"→"}),z.jsx(nQi,{solver:n})]},n.getSolverName()))})},iQi=({solver:t,triggerRender:e,animationSpeed:n=25,renderer:o,onRendererChange:i,onAnimationSpeedChange:r,onDownloadVisualization:s,onSolverStarted:a,onSolverCompleted:A})=>{const[c,l]=te.useReducer(B=>!B,!1),g=te.useRef(void 0),u=te.useRef(null),h="solver-debugger-last-iteration",[d,m]=te.useState(null),p=te.useRef(null),_=te.useMemo(()=>[{label:"Slow",value:250,description:"250ms"},{label:"Normal",value:100,description:"100ms"},{label:"Fast",value:10,description:"10ms"},{label:"Fast (2x)",value:5,description:"5ms"},{label:"Fast (10x)",value:1,description:"1ms"},{label:"Fast 20x",value:.5,description:"2 steps / 1ms"},{label:"Fast 100x",value:.1,description:"10 steps / 1ms"}],[]),f=()=>{const B=Math.max(1,n),b=n<1?Math.round(1/n):1;g.current=setInterval(()=>{if(t.solved||t.failed){g.current&&(clearInterval(g.current),g.current=void 0),l(),e(),A&&t.solved&&A(t);return}for(let Q=0;Q<b&&!(t.solved||t.failed);Q++)t.step();e()},B)},I=()=>{g.current&&(clearInterval(g.current),g.current=void 0)},C=()=>{!t.solved&&!t.failed&&(t.step(),e())},y=()=>{!t.solved&&!t.failed&&(a&&a(t),t.solve(),e(),A&&A(t))},x=()=>{c?(I(),l()):(l(),f())},E=()=>{if(t.solved||t.failed||c)return;u.current===null&&typeof window<"u"&&(u.current=window.localStorage.getItem(h));const B=window.prompt("Step until which iteration?",u.current??`${t.iterations}`);if(B===null)return;u.current=B,typeof window<"u"&&window.localStorage.setItem(h,B);const b=Number(B);if(!Number.isFinite(b)){window.alert("Please enter a valid number for the iteration");return}for(;t.iterations<b&&!t.solved&&!t.failed;)t.step();e(),t.solved&&A&&A(t)};return te.useEffect(()=>()=>{I()},[]),te.useEffect(()=>{(t.solved||t.failed)&&c&&(I(),l())},[t.solved,t.failed,c]),te.useEffect(()=>{c&&(I(),f())},[n,c]),te.useEffect(()=>{if(typeof document>"u")return;const B=b=>{p.current&&!p.current.contains(b.target)&&m(null)};return document.addEventListener("mousedown",B),()=>{document.removeEventListener("mousedown",B)}},[]),z.jsxs("div",{className:"space-y-2 p-2 border-b",children:[z.jsx("div",{className:"flex items-center",children:z.jsxs("div",{className:"flex items-center gap-2",ref:p,children:[z.jsxs("div",{className:"flex h-9 items-center space-x-1 rounded-md border border-slate-200 bg-white p-1 shadow-sm",children:[z.jsxs("div",{className:"relative",children:[z.jsx("button",{type:"button",onClick:()=>m(d==="renderer"?null:"renderer"),className:"flex select-none items-center rounded-sm px-3 py-1 text-sm font-medium outline-none focus:bg-slate-100 data-[state=open]:bg-slate-100","data-state":d==="renderer"?"open":"closed",children:"Renderer"}),d==="renderer"&&z.jsx("div",{className:"absolute left-0 z-50 mt-1 min-w-[10rem] rounded-md border border-slate-200 bg-white p-1 text-slate-950 shadow-md",children:["vector","canvas"].map(B=>z.jsxs("button",{type:"button",onClick:()=>{i(B),m(null)},className:"flex w-full items-center rounded-sm px-2 py-1.5 text-sm hover:bg-slate-100",children:[B==="vector"?"Vector":"Canvas",o===B&&z.jsx("span",{className:"ml-auto text-xs text-slate-500",children:"✓"})]},B))})]}),z.jsxs("div",{className:"relative",children:[z.jsx("button",{type:"button",onClick:()=>m(d==="debug"?null:"debug"),className:"flex select-none items-center rounded-sm px-3 py-1 text-sm font-medium outline-none focus:bg-slate-100 data-[state=open]:bg-slate-100","data-state":d==="debug"?"open":"closed",children:"Debug"}),d==="debug"&&z.jsx("div",{className:"absolute left-0 z-50 mt-1 min-w-[12rem] rounded-md border border-slate-200 bg-white p-1 text-slate-950 shadow-md",children:z.jsx("button",{type:"button",onClick:()=>{s(),m(null)},className:"flex w-full items-center rounded-sm px-2 py-1.5 text-sm hover:bg-slate-100",children:"Download Visualization"})})]}),z.jsxs("div",{className:"relative",children:[z.jsx("button",{type:"button",onClick:()=>m(d==="animation"?null:"animation"),className:"flex select-none items-center rounded-sm px-3 py-1 text-sm font-medium outline-none focus:bg-slate-100 data-[state=open]:bg-slate-100","data-state":d==="animation"?"open":"closed",children:"Animation"}),d==="animation"&&z.jsx("div",{className:"absolute left-0 z-50 mt-1 min-w-[12rem] rounded-md border border-slate-200 bg-white p-1 text-slate-950 shadow-md",children:_.map(B=>z.jsxs("button",{type:"button",onClick:()=>{r(B.value),m(null)},className:"flex w-full items-center rounded-sm px-2 py-1.5 text-sm hover:bg-slate-100",children:[B.label,z.jsx("span",{className:"ml-auto text-xs text-slate-500",children:B.description}),n===B.value&&z.jsx("span",{className:"ml-2 text-xs text-slate-500",children:"✓"})]},B.value))})]})]}),z.jsx(oQi,{solver:t})]})}),z.jsxs("div",{className:"flex gap-2 items-center flex-wrap",children:[z.jsx("button",{onClick:C,disabled:t.solved||t.failed||c,className:"bg-blue-500 hover:bg-blue-600 disabled:bg-gray-300 text-white px-3 py-1 rounded text-sm",children:"Step"}),z.jsx("button",{onClick:y,disabled:t.solved||t.failed||c,className:"bg-green-500 hover:bg-green-600 disabled:bg-gray-300 text-white px-3 py-1 rounded text-sm",children:"Solve"}),z.jsx("button",{onClick:x,disabled:t.solved||t.failed,className:`px-3 py-1 rounded text-white text-sm ${c?"bg-red-500 hover:bg-red-600":"bg-yellow-500 hover:bg-yellow-600"} disabled:bg-gray-300`,children:c?"Stop":"Animate"}),z.jsx("button",{onClick:E,disabled:t.solved||t.failed||c,className:"bg-orange-500 hover:bg-orange-600 disabled:bg-gray-300 text-white px-3 py-1 rounded text-sm",children:"Step Until Iteration"}),z.jsxs("div",{className:"text-sm text-gray-600",children:["Iterations: ",t.iterations]}),t.timeToSolve!==void 0&&z.jsxs("div",{className:"text-sm text-gray-600",children:["Time: ",(t.timeToSolve/1e3).toFixed(3),"s"]}),t.solved&&z.jsx("div",{className:"px-2 py-1 bg-green-100 text-green-800 rounded text-sm",children:"Solved"}),t.failed&&z.jsx("div",{className:"px-2 py-1 bg-red-100 text-red-800 rounded text-sm",children:"Failed"})]}),t.error&&z.jsxs("div",{className:"text-red-600 text-sm",children:["Error: ",t.error]})]})},rQi=t=>t!==null&&"pipelineDef"in t&&Array.isArray(t.pipelineDef),sQi=(t,e,n)=>{const o=t.currentPipelineStageIndex;return e<o?"Completed":e===o&&t.activeSubSolver?t.activeSubSolver.failed?"Failed":"In Progress":"Not Started"},aQi=(t,e)=>{const o=t.pipelineDef[e].solverName,i=sQi(t,e),r=t[o],s=t.firstIterationOfStage?.[o]??(e===t.currentPipelineStageIndex?t.iterations:null),a=t.iterations;let A=0;if(i==="Completed"){const u=t.pipelineDef[e+1],h=u?t.firstIterationOfStage?.[u.solverName]:void 0;h!==void 0&&s!==null?A=h-s:s!==null&&(A=a-s)}else i==="In Progress"&&s!==null&&(A=a-s);const c=t.timeSpentOnStage?.[o]??0;let l=0;i==="Completed"?l=1:i==="In Progress"&&r&&(l=r.progress??0);const g=r?.stats??null;return{index:e,name:o,status:i,firstIteration:s,iterations:A,progress:l,timeSpent:c,stats:g&&Object.keys(g).length>0?g:null,solverInstance:r??null}},AQi=({status:t})=>{const e={"Not Started":"text-blue-600","In Progress":"text-yellow-600",Completed:"text-green-600",Failed:"text-red-600"};return z.jsx("span",{className:`font-medium ${e[t]}`,children:t})},cQi=({progress:t})=>{if(t===0)return null;const e=Math.round(t*100);return z.jsxs("div",{className:"flex items-center gap-2",children:[z.jsx("div",{className:"w-20 h-2 bg-gray-200 rounded overflow-hidden",children:z.jsx("div",{className:"h-full bg-blue-500 transition-all duration-200",style:{width:`${e}%`}})}),z.jsxs("span",{className:"text-xs text-gray-500",children:[e,"%"]})]})},TAn=t=>{if(typeof t=="string")return t;if(typeof t=="number"||typeof t=="boolean"||typeof t=="bigint"||t==null)return String(t);if(typeof t=="object")try{return JSON.stringify(t)}catch{return String(t)}return String(t)},lQi=t=>Object.entries(t).map(([e,n])=>`${e}: ${TAn(n)}`).join(", "),gQi=({stats:t})=>{if(!t||Object.keys(t).length===0)return z.jsx("span",{children:"-"});const e=Object.entries(t),n=lQi(t);return z.jsxs("details",{className:"cursor-pointer",children:[z.jsx("summary",{className:"whitespace-nowrap overflow-hidden text-ellipsis max-w-[200px]",children:n}),z.jsx("div",{className:"mt-1 text-xs",children:e.map(([o,i])=>z.jsxs("div",{children:[o,": ",TAn(i)]},o))})]})},Sze=t=>{if(t===null||typeof t!="object")return t;if(Array.isArray(t))return t.map(Sze);const e={};for(const[n,o]of Object.entries(t))n.startsWith("_")||(e[n]=Sze(o));return e},uQi=(t,e)=>{try{if(typeof t.getConstructorParams!="function"){alert(`getConstructorParams() is not implemented for ${e}`);return}const n=Sze(t.getConstructorParams()),o=new Blob([JSON.stringify(n,null,2)],{type:"application/json"}),i=URL.createObjectURL(o),r=document.createElement("a");r.href=i,r.download=`${e}_input.json`,r.click(),URL.revokeObjectURL(i)}catch(n){alert(`Error downloading input for ${e}: ${n instanceof Error?n.message:String(n)}`)}},dQi=({expanded:t})=>z.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",className:`w-4 h-4 transition-transform duration-200 ${t?"rotate-90":""}`,children:z.jsx("path",{fillRule:"evenodd",d:"M4.5 5.653c0-1.426 1.529-2.33 2.779-1.643l11.54 6.348c1.295.712 1.295 2.573 0 3.285L7.28 19.991c-1.25.687-2.779-.217-2.779-1.643V5.653z",clipRule:"evenodd"})}),kAn=t=>{let e=t;for(;e.activeSubSolver;)e=e.activeSubSolver;return e},FAn=({solver:t,onStepUntilPhase:e,onDownloadInput:n,isNested:o=!1,indentLevel:i=0,triggerRender:r})=>{const[s,a]=te.useState(new Set),A=t.pipelineDef.map((p,_)=>aQi(t,_)),c=p=>{a(_=>{const f=new Set(_);return f.has(p)?f.delete(p):f.add(p),f})},l=p=>{e?.(p)},g=p=>{p.solverInstance&&(n?n(p.solverInstance,p.name):uQi(p.solverInstance,p.name))},u=p=>`${(p/1e3).toFixed(2)}s`,h=()=>{if(!t.solved&&!t.failed){const p=t.activeSubSolver;for(;!t.solved&&!t.failed&&(t.step(),!(t.activeSubSolver&&t.activeSubSolver!==p)););r?.()}},d=()=>{if(!t.solved&&!t.failed){const p=kAn(t);for(;!t.solved&&!t.failed&&(t.step(),kAn(t)===p););r?.()}},m=i*24;return z.jsxs("div",{className:o?"":"border-t border-gray-200",children:[!o&&z.jsxs("div",{className:"px-4 py-2 bg-gray-50 border-b border-gray-200 flex items-center justify-between",children:[z.jsx("h3",{className:"text-sm font-semibold text-gray-700",children:"Pipeline Stages"}),z.jsxs("div",{className:"flex gap-2",children:[z.jsx("button",{onClick:d,disabled:t.solved||t.failed,className:"bg-indigo-500 hover:bg-indigo-600 disabled:bg-gray-300 disabled:cursor-not-allowed cursor-pointer text-white px-3 py-1 rounded text-sm",children:"Next Solver"}),z.jsx("button",{onClick:h,disabled:t.solved||t.failed,className:"bg-purple-500 hover:bg-purple-600 disabled:bg-gray-300 disabled:cursor-not-allowed cursor-pointer text-white px-3 py-1 rounded text-sm",children:"Next Stage"})]})]}),z.jsx("div",{className:"overflow-x-auto",children:z.jsxs("table",{className:"w-full text-sm",children:[!o&&z.jsx("thead",{children:z.jsxs("tr",{className:"bg-gray-50 border-b border-gray-200",children:[z.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Stage"}),z.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Status"}),z.jsxs("th",{className:"px-4 py-2 text-center font-semibold text-gray-700",children:["i",z.jsx("sub",{children:"0"})]}),z.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Iterations"}),z.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Progress"}),z.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Time"}),z.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Stats"}),z.jsx("th",{className:"px-4 py-2 text-left font-semibold text-gray-700",children:"Input"})]})}),z.jsx("tbody",{children:A.map(p=>{const _=rQi(p.solverInstance),f=s.has(p.name);return z.jsxs(ws.Fragment,{children:[z.jsxs("tr",{className:`border-b border-gray-100 ${p.status==="In Progress"?"bg-yellow-50":""}`,children:[z.jsx("td",{className:"px-4 py-2",children:z.jsxs("div",{className:"flex items-center gap-2",style:{paddingLeft:m},children:[_?z.jsx("button",{onClick:()=>c(p.name),className:"text-gray-500 hover:text-gray-700",title:f?"Collapse":"Expand",children:z.jsx(dQi,{expanded:f})}):z.jsx("span",{className:"w-4"}),z.jsx("span",{className:"text-gray-400 w-6",children:String(p.index+1).padStart(2,"0")}),z.jsx("button",{onClick:()=>l(p.name),disabled:p.status==="Completed"||t.solved||t.failed,className:"text-blue-500 hover:text-blue-700 disabled:text-gray-300 disabled:cursor-not-allowed",title:`Step until ${p.name} completes`,children:z.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",className:"w-4 h-4",children:z.jsx("path",{fillRule:"evenodd",d:"M4.5 5.653c0-1.426 1.529-2.33 2.779-1.643l11.54 6.348c1.295.712 1.295 2.573 0 3.285L7.28 19.991c-1.25.687-2.779-.217-2.779-1.643V5.653z",clipRule:"evenodd"})})}),z.jsx("span",{className:"font-medium text-gray-900",children:p.name})]})}),z.jsx("td",{className:"px-4 py-2",children:z.jsx(AQi,{status:p.status})}),z.jsx("td",{className:"px-4 py-2 text-center text-gray-600",children:p.firstIteration!==null?p.firstIteration:""}),z.jsx("td",{className:"px-4 py-2 text-gray-600",children:p.iterations}),z.jsx("td",{className:"px-4 py-2",children:z.jsx(cQi,{progress:p.progress})}),z.jsx("td",{className:"px-4 py-2 text-gray-600",children:u(p.timeSpent)}),z.jsx("td",{className:"px-4 py-2 text-gray-500",children:z.jsx(gQi,{stats:p.stats})}),z.jsx("td",{className:"px-4 py-2",children:p.solverInstance?z.jsxs("button",{onClick:()=>g(p),className:"flex items-center gap-1 text-blue-500 hover:text-blue-700",title:`Download input for ${p.name}`,children:[z.jsx("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",className:"w-4 h-4",children:z.jsx("path",{fillRule:"evenodd",d:"M12 2.25a.75.75 0 01.75.75v11.69l3.22-3.22a.75.75 0 111.06 1.06l-4.5 4.5a.75.75 0 01-1.06 0l-4.5-4.5a.75.75 0 111.06-1.06l3.22 3.22V3a.75.75 0 01.75-.75zm-9 13.5a.75.75 0 01.75.75v2.25a1.5 1.5 0 001.5 1.5h13.5a1.5 1.5 0 001.5-1.5V16.5a.75.75 0 011.5 0v2.25a3 3 0 01-3 3H5.25a3 3 0 01-3-3V16.5a.75.75 0 01.75-.75z",clipRule:"evenodd"})}),z.jsx("span",{children:"Input"})]}):null})]}),_&&f&&z.jsx("tr",{children:z.jsx("td",{colSpan:8,className:"p-0",children:z.jsx(FAn,{solver:p.solverInstance,onStepUntilPhase:e,onDownloadInput:n,isNested:!0,indentLevel:i+1,triggerRender:r})})})]},p.name)})})]})})]})};function hQi({graphics:t}){const e=t.points??[],n=t.lines??[],o=t.rects??[],i=t.circles??[],r=t.texts??[];let s=Number.POSITIVE_INFINITY,a=Number.POSITIVE_INFINITY,A=Number.NEGATIVE_INFINITY,c=Number.NEGATIVE_INFINITY;const l=(p,_)=>{typeof p=="number"&&(p<s&&(s=p),p>A&&(A=p)),typeof _=="number"&&(_<a&&(a=_),_>c&&(c=_))};for(const p of e)l(p.x,p.y);for(const p of n){const _=p.points??[];for(const f of _)l(f.x,f.y)}for(const p of o){const _=p.x??0,f=p.y??0,I=p.width??0,C=p.height??0;l(_,f),l(_+I,f+C)}for(const p of i){const _=p.x??0,f=p.y??0,I=p.radius??1;l(_-I,f-I),l(_+I,f+I)}for(const p of r)l(p.x,p.y);(!isFinite(s)||!isFinite(a)||!isFinite(A)||!isFinite(c))&&(s=-20,a=-20,A=20,c=20);const g=10,u=s-g,h=a-g,d=Math.max(1,A-s+2*g),m=Math.max(1,c-a+2*g);return z.jsxs("svg",{className:"w-full h-[400px] bg-white",viewBox:`${u} ${h} ${d} ${m}`,role:"img","aria-label":"Graphics fallback",children:[o.map((p,_)=>z.jsx("rect",{x:p.x??0,y:p.y??0,width:p.width??0,height:p.height??0,fill:"none",stroke:p.strokeColor??"black",strokeWidth:p.strokeWidth??1},`rect-${_}`)),n.map((p,_)=>z.jsx("polyline",{fill:"none",stroke:p.strokeColor??"black",strokeWidth:p.strokeWidth??1,points:(p.points??[]).map(f=>`${f.x??0},${f.y??0}`).join(" ")},`line-${_}`)),i.map((p,_)=>z.jsx("circle",{cx:p.x??0,cy:p.y??0,r:p.radius??1.5,fill:p.fillColor??"none",stroke:p.strokeColor??"black",strokeWidth:p.strokeWidth??1},`circle-${_}`)),e.map((p,_)=>z.jsx("circle",{cx:p.x??0,cy:p.y??0,r:p.radius??1.5,fill:p.color??"black"},`point-${_}`)),r.map((p,_)=>z.jsx("text",{x:p.x??0,y:p.y??0,fontSize:p.fontSize??10,fill:p.color??"black",children:p.text??""},`text-${_}`))]})}var mQi=class extends ws.Component{constructor(t){super(t),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}componentDidCatch(t){console.error("InteractiveGraphics render error:",t)}render(){return this.state.hasError?this.props.fallback:this.props.children}},pQi=({solver:t,createSolver:e,animationSpeed:n=25,onSolverStarted:o,onSolverCompleted:i})=>{const[r,s]=te.useReducer(f=>f+1,0),[a]=te.useState(()=>{if(e)return e();if(!t)throw new Error("GenericSolverDebugger requires solver or createSolver");return t}),[A,c]=te.useState(()=>typeof window>"u"?"vector":window.localStorage.getItem("solver-utils-renderer")==="canvas"?"canvas":"vector"),[l,g]=te.useState(n),u=te.useMemo(()=>{try{return a.visualize()||{points:[],lines:[],rects:[],circles:[]}}catch(f){return console.error("Visualization error:",f),{points:[],lines:[],rects:[],circles:[]}}},[a,r]),h=te.useMemo(()=>(u.rects?.length||0)===0&&(u.lines?.length||0)===0&&(u.points?.length||0)===0&&(u.circles?.length||0)===0,[u]);te.useEffect(()=>{if(!(typeof document>"u")&&!document.querySelector('script[src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"]')){const f=document.createElement("script");f.src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4",document.head.appendChild(f)}},[]),te.useEffect(()=>{g(n)},[n]);const d=a.pipelineDef!==void 0,m=f=>{const I=a;if(!a.solved&&!a.failed){for(;!a.solved&&!a.failed&&I.currentPipelineStageIndex<=I.pipelineDef.findIndex(C=>C.solverName===f);)a.step();s()}},p=()=>{const f=JSON.stringify(u,null,2),I=new Blob([f],{type:"application/json"}),C=URL.createObjectURL(I),y=document.createElement("a");y.download="visualization.json",y.href=C,document.body.appendChild(y),y.click(),document.body.removeChild(y),URL.revokeObjectURL(C)},_=f=>{c(f),typeof window<"u"&&window.localStorage.setItem("solver-utils-renderer",f)};return z.jsxs("div",{children:[z.jsx(iQi,{solver:a,triggerRender:s,animationSpeed:l,renderer:A,onRendererChange:_,onAnimationSpeedChange:g,onDownloadVisualization:p,onSolverStarted:o,onSolverCompleted:i}),h?z.jsx("div",{className:"p-4 text-gray-500",children:"No Graphics Yet"}):z.jsx(mQi,{fallback:z.jsx(hQi,{graphics:u}),children:A==="canvas"?z.jsx(tQi,{graphics:u}):z.jsx($bi,{graphics:u})}),d&&z.jsx(FAn,{solver:a,onStepUntilPhase:m,triggerRender:s})]})};const _Qi=()=>{te.useEffect(()=>{const t="tailwind-cdn-script";if(document.getElementById(t)||window.tailwind)return;const e=document.createElement("div");e.className="hidden",document.body.appendChild(e);const n=window.getComputedStyle(e).display==="none";if(document.body.removeChild(e),n)return;const o=document.createElement("script");o.id=t,o.src="https://cdn.tailwindcss.com",document.head.appendChild(o)},[])},fQi=1e3,sE=(t,e)=>{const{fileName:n,mimeType:o="text/plain"}=e,i=t instanceof Blob?t:new Blob([t],{type:o}),r=URL.createObjectURL(i),s=document.createElement("a");s.href=r,s.download=n,s.target="_blank",s.rel="noopener noreferrer",s.style.display="none",document.body.appendChild(s),s.click(),document.body.removeChild(s),setTimeout(()=>{URL.revokeObjectURL(r)},fQi)},bze=t=>{let e=t.trim().replace(/[\\/:*?"<>|]/g,"_").replace(/[\x00-\x1f]/g,"").replace(/^\.+/,"").replace(/\.+$/,"").replace(/\s+/g," ").replace(/_+/g,"_");return/^(con|prn|aux|nul|com[0-9]|lpt[0-9])$/i.test(e)&&(e=`_${e}`),e=e.slice(0,200),e||"untitled"},IQi=t=>{const e=t.solverConstructorArgs??[t.solverParams];if(t.solverName!=="AutoroutingPipelineSolver7_MultiGraph"||e.length!==1)return e;const[{input:n,options:o}]=e;return[n,o]},h7="https://github.com/tscircuit/tscircuit-autorouter/issues/new",LAn="https://github.com/tscircuit/copper-pour-solver/issues/new",HAn="https://github.com/tscircuit/calculate-packing/issues/new",CQi="https://github.com/tscircuit/matchpack/issues/new",OAn="https://github.com/tscircuit/schematic-trace-solver/issues/new?template=json-bug-report.yml",yQi={PackSolver2:HAn,LayoutPipelineSolver:CQi,AutoroutingPipelineSolver:h7,AssignableAutoroutingPipeline2:h7,AssignableAutoroutingPipeline3:h7,AutoroutingPipeline1_OriginalUnravel:h7,AutoroutingPipelineSolver3_HgPortPointPathing:h7,AutoroutingPipelineSolver4:h7,AutoroutingPipelineSolver5:h7,AutoroutingPipelineSolver7_MultiGraph:h7,AutoroutingPipelineSolver8:h7,CopperPourPipelineSolver:LAn,SchematicTracePipelineSolver:OAn},xQi=t=>t.toLowerCase().includes("pack")?cyi:t.toLowerCase().includes("rout")?jon:tyi,GAn=t=>{const e=yQi[t];if(e)return e;const n=t.toLowerCase();return n.includes("autorout")?h7:n.includes("schematic")&&n.includes("trace")?OAn:n.includes("copperpour")?LAn:n.includes("pack")?HAn:null},EQi=t=>`${bze(`${t.componentName}-${t.solverName}`)}-solver-input.json`,YAn=t=>{sE(JSON.stringify(t.solverParams,null,2),{fileName:EQi(t),mimeType:"application/json"})},BQi=({solverEvent:t})=>{const e=GAn(t.solverName);return z.jsxs("div",{className:"rf-flex rf-items-center rf-justify-end rf-gap-2 rf-border-b rf-border-gray-200 rf-bg-gray-50 rf-px-4 rf-py-2",children:[z.jsxs(Kc,{type:"button",variant:"outline",size:"sm",onClick:()=>YAn(t),children:[z.jsx(Iq,{className:"rf-w-4 rf-h-4"}),"Download"]}),e?z.jsx(Kc,{asChild:!0,variant:"outline",size:"sm",children:z.jsxs("a",{href:e,target:"_blank",rel:"noopener noreferrer",children:[z.jsx(Mde,{className:"rf-w-4 rf-h-4"}),"Report"]})}):z.jsxs(Kc,{type:"button",variant:"outline",size:"sm",disabled:!0,title:"No report link configured for this solver",children:[z.jsx(Mde,{className:"rf-w-4 rf-h-4"}),"Report"]})]})},SQi=({solverEvent:t})=>{const e=GAn(t.solverName);return e?z.jsx(Kc,{asChild:!0,variant:"ghost",size:"icon",className:"rf-h-8 rf-w-8",children:z.jsx("a",{href:e,target:"_blank",rel:"noopener noreferrer",title:"Report solver bug","aria-label":"Report solver bug",children:z.jsx(Mde,{className:"rf-w-4 rf-h-4"})})}):z.jsx(Kc,{type:"button",variant:"ghost",size:"icon",className:"rf-h-8 rf-w-8",disabled:!0,title:"No report link configured for this solver","aria-label":"Report solver bug",children:z.jsx(Mde,{className:"rf-w-4 rf-h-4"})})},bQi=({solverEvents:t=[]})=>{const[e,n]=te.useState(null);_Qi();const o=te.useMemo(()=>{const a=new Map;for(const A of t){const c=`${A.componentName}-${A.solverName}`;a.set(c,A)}return a},[t]),i=te.useMemo(()=>Array.from(o.keys()),[o]),r=e?o.get(e):null,s=te.useMemo(()=>{if(!r)return{instance:null,error:null,classFound:!1};const a=SDe[r.solverName];if(!a)return{instance:null,error:`Solver class "${r.solverName}" not found in SOLVERS registry. Available: ${Object.keys(SDe).join(", ")}`,classFound:!1};try{return{instance:new a(...IQi(r)),error:null,classFound:!0}}catch(A){const c=A instanceof Error?A.message:String(A);return console.error("Failed to reconstruct solver:",A),{instance:null,error:`Failed to instantiate solver: ${c}`,classFound:!0}}},[r]);return t.length===0?z.jsx("div",{className:"rf-p-4",children:z.jsx("div",{className:"rf-bg-gray-50 rf-rounded-md rf-border rf-border-gray-200",children:z.jsxs("div",{className:"rf-p-4",children:[z.jsx("h3",{className:"rf-text-lg rf-font-semibold rf-text-gray-800 rf-mb-3",children:"No Solvers Detected"}),z.jsx("p",{className:"rf-text-sm rf-text-gray-600",children:"Solvers will appear here when the circuit runs. Solvers are used for tasks like component packing and autorouting."})]})})}):z.jsxs("div",{className:"rf-flex rf-h-full rf-overflow-hidden",children:[z.jsxs("div",{className:"rf-w-64 rf-border-r rf-border-gray-200 rf-overflow-y-auto rf-flex-shrink-0",children:[z.jsxs("div",{className:"rf-text-xs rf-font-semibold rf-text-gray-500 rf-px-3 rf-py-2 rf-bg-gray-50 rf-border-b rf-border-gray-200",children:[i.length," ",i.length===1?"Solver":"Solvers"]}),i.map(a=>{const A=o.get(a),c=e===a;return z.jsx("div",{className:`rf-px-3 rf-py-2 rf-cursor-pointer rf-border-b rf-border-gray-100 ${c?"rf-bg-blue-50 rf-border-l-2 rf-border-l-blue-500":"hover:rf-bg-gray-50"}`,onClick:()=>n(a),children:(()=>{const l=xQi(A.solverName);return z.jsxs("div",{className:"rf-flex rf-items-center rf-gap-2",children:[z.jsx(l,{className:"rf-w-4 rf-h-4 rf-text-blue-500 rf-flex-shrink-0"}),z.jsxs("div",{className:"rf-flex-1 rf-min-w-0",children:[z.jsx("div",{className:"rf-text-sm rf-font-medium rf-text-gray-800 rf-truncate",children:A.componentName}),z.jsx("div",{className:"rf-text-xs rf-text-gray-500 rf-truncate",children:A.solverName})]})]})})()},a)})]}),z.jsx("div",{className:"rf-flex-1 rf-overflow-hidden",children:r?s.instance?z.jsxs("div",{className:"rf-flex rf-h-full rf-flex-col rf-overflow-y-auto",children:[z.jsx(BQi,{solverEvent:r}),z.jsx("div",{className:"rf-min-h-0 rf-flex-1",children:z.jsx(EB,{fallback:z.jsx("div",{className:"rf-p-4",children:z.jsxs("div",{className:"rf-bg-red-50 rf-rounded-md rf-border rf-border-red-200 rf-p-4",children:[z.jsx("h3",{className:"rf-text-lg rf-font-semibold rf-text-red-800 rf-mb-2",children:"Error Loading Solver Debugger"}),z.jsxs("p",{className:"rf-text-sm rf-text-red-600",children:["Failed to render the solver debugger for"," ",r.solverName]})]})}),children:z.jsx(pQi,{solver:s.instance})})})]}):z.jsxs("div",{className:"rf-p-4",children:[z.jsxs("div",{className:"rf-mb-4",children:[z.jsx("h3",{className:"rf-text-lg rf-font-semibold rf-text-gray-800",children:r.solverName}),z.jsxs("p",{className:"rf-text-sm rf-text-gray-500",children:["Component: ",r.componentName]})]}),s.error&&z.jsx("div",{className:`rf-rounded-md rf-border rf-p-4 rf-mb-4 ${s.classFound?"rf-bg-red-50 rf-border-red-200":"rf-bg-yellow-50 rf-border-yellow-200"}`,children:z.jsx("p",{className:`rf-text-sm ${s.classFound?"rf-text-red-700":"rf-text-yellow-700"}`,children:s.error})}),z.jsxs("div",{className:"rf-border rf-border-gray-200 rf-rounded-md rf-overflow-hidden",children:[z.jsxs("div",{className:"rf-px-3 rf-py-2 rf-bg-gray-50 rf-flex rf-items-center rf-justify-between rf-gap-2",children:[z.jsx("span",{className:"rf-text-sm rf-font-medium rf-text-gray-700",children:"Solver Parameters"}),z.jsxs("div",{className:"rf-flex rf-items-center rf-gap-1",children:[z.jsx(SQi,{solverEvent:r}),z.jsx(Kc,{type:"button",variant:"ghost",size:"icon",className:"rf-h-8 rf-w-8","aria-label":"Download solver input JSON",title:"Download solver input JSON",onClick:()=>YAn(r),children:z.jsx(Iq,{className:"rf-w-4 rf-h-4"})})]})]}),z.jsx("div",{className:"rf-p-3 rf-bg-white rf-border-t rf-border-gray-200",children:z.jsx("pre",{className:"rf-text-xs rf-font-mono rf-text-gray-600 rf-whitespace-pre-wrap rf-overflow-x-auto",children:JSON.stringify(r.solverParams,null,2)})})]})]}):z.jsx("div",{className:"rf-flex rf-items-center rf-justify-center rf-h-full",children:z.jsx("p",{className:"rf-text-sm rf-text-gray-500",children:"Select a solver from the list to view details"})})})]})},QQi=new Map([["custom","Custom"],["fanout","Fanout"],["single_layer_fanout","Single layer fanout"],["tscircuit_simplify","Simplify"]]),vQi=new Set(["tscircuit","default","auto","auto_local"]);function PQi(t){if(t==="FanoutSolver")return"Fanout";if(t==="AutoroutingPipelineSolver11_Simplification")return"Simplify";const e=t.match(/^AutoroutingPipeline(?:Solver)?(\d+)(?:_|$)/);if(e)return`Pipeline${e[1]}`;const n=t.match(/^AssignableAutoroutingPipeline(\d+)$/);return n?`Assignable${n[1]}`:t}function wQi(t){const e=t.autorouterName?.trim(),n=e?.replace(/-/g,"_"),o=n&&QQi.get(n);if(o)return o;if(n&&!vQi.has(n))return e;const i=t.solverName?.trim();if(i)return PQi(i);const r=t.autorouterVersion?.trim();if(r){const s=r.match(/^beta[_-]pipeline(\d+)$/);return s?`Pipeline${s[1]}`:r==="latest"?"default":r}return e?"default":"Unknown"}const Qze="#fbbf24";function MQi(t){const e=t.endSimpleRouteJson?.traces??[],n=new Set(e.flatMap(i=>[i.pcb_trace_id,i.__replaces_pcb_trace_id].filter(r=>r!==void 0)));return[...(t.startSimpleRouteJson?.traces??[]).filter(i=>!n.has(i.pcb_trace_id)),...e]}function UAn(t){const e=new Map((t.startSimpleRouteJson?.traces??[]).map(n=>[n.pcb_trace_id,n]));return(t.endSimpleRouteJson?.traces??[]).filter(n=>{const o=e.get(n.pcb_trace_id);return!o||!!n.__replaces_pcb_trace_id&&n.__replaces_pcb_trace_id!==o.__replaces_pcb_trace_id||JSON.stringify(o.route)!==JSON.stringify(n.route)}).map(n=>n.pcb_trace_id)}function DQi(t,e){return{outer_diameter:t.via_diameter??e.minViaPadDiameter??e.min_via_pad_diameter??e.minViaDiameter??.6,hole_diameter:t.via_hole_diameter??e.minViaHoleDiameter??e.min_via_hole_diameter??.3}}function KAn(t,e){const n=[];for(const a of t.route)a.route_type==="wire"?n.push({...a,layer:a.layer}):a.route_type==="via"?n.push({route_type:"via",x:a.x,y:a.y,from_layer:a.from_layer,to_layer:a.to_layer,...DQi(a,e)}):a.route_type==="through_obstacle"&&n.push({route_type:"through_pad",start:{...a.start},end:{...a.end},width:a.width,start_layer:a.from_layer,end_layer:a.to_layer,pcb_smtpad_id:a.circuitJsonMetadata?.pcb_smtpad_id,pcb_plated_hole_id:a.circuitJsonMetadata?.pcb_plated_hole_id});const o=a=>{let A=-1,c=Number.POSITIVE_INFINITY;return n.forEach((l,g)=>{if(l.route_type!=="wire")return;const u=Math.hypot(l.x-a.x,l.y-a.y);u<c&&(c=u,A=g)}),A},i=t.route.filter(a=>a.route_type==="jumper").map(a=>[o(a.start),o(a.end)].sort((A,c)=>A-c)).filter(([a,A])=>a>=0&&A>a).sort(([a],[A])=>a-A),r=[];let s=0;for(const[a,A]of i)a>=s&&r.push(n.slice(s,a+1)),s=Math.max(s,A);return s<n.length&&r.push(n.slice(s)),r}function NQi(t){const e=[],n=[],o=t.endSimpleRouteJson;if(!o)return{lines:e,circles:n};const i=new Set(UAn(t));for(const r of o.traces??[])if(i.has(r.pcb_trace_id))for(const s of KAn(r,o)){let a;for(const A of s){if(A.route_type==="through_pad"){a={...A.end,layer:A.end_layer,width:A.width};continue}const c=A.route_type==="wire"?A.layer:A.from_layer;a&&a.layer===c&&(a.x!==A.x||a.y!==A.y)&&e.push({points:[{x:a.x,y:a.y},{x:A.x,y:A.y}],strokeWidth:A.route_type==="wire"?A.width:a.width,strokeColor:Qze,layer:c}),A.route_type==="via"&&n.push({center:{x:A.x,y:A.y},radius:A.outer_diameter/2,stroke:Qze,fill:"transparent"}),a={x:A.x,y:A.y,layer:A.route_type==="wire"?A.layer:A.to_layer,width:A.route_type==="wire"?A.width:a?.width??o.minTraceWidth}}}return{coordinateSystem:"cartesian",lines:e,circles:n}}function RQi(t){const e=JSON.stringify(t);let n=2166136261;for(let o=0;o<e.length;o++)n=Math.imul(n^e.charCodeAt(o),16777619);return(n>>>0).toString(36)}const TQi=new Set(["pcb_trace","pcb_via","pcb_copper_pour","pcb_ground_plane","pcb_ground_plane_region","pcb_thermal_spoke","pcb_breakout_point"]);function kQi(t,e,n){const o=n==="input"?e.startSimpleRouteJson??e.errorSimpleRouteJson:e.endSimpleRouteJson,i=t.filter(c=>!TQi.has(c.type)&&!c.type.endsWith("_error")&&!c.type.endsWith("_warning"));if(!o)return i;const r=n==="input"?o.traces??[]:MQi(e),s=new Set(t.filter(c=>c.type==="source_trace").map(c=>c.source_trace_id)),a=["top",...Array.from({length:Math.max(0,o.layerCount-2)},(c,l)=>`inner${l+1}`),...o.layerCount>1?["bottom"]:[]],A=[];for(const c of r){const g=o.connections.find(h=>h.name===c.connection_name||h.source_trace_id===c.connection_name)?.source_trace_id??c.connection_name??"",u=KAn(c,o);for(const[h,d]of u.entries()){const m={type:"pcb_trace",pcb_trace_id:`${e.id}_${n}_${c.pcb_trace_id}_${h}_${RQi(d)}`,subcircuit_id:e.subcircuit_id??void 0,source_trace_id:s.has(g)?g:void 0,route:d};A.push(m);for(const[p,_]of d.entries()){if(_.route_type!=="via")continue;const f=a.indexOf(_.from_layer),I=a.indexOf(_.to_layer),C={type:"pcb_via",pcb_via_id:`${m.pcb_trace_id}_via_${p}`,pcb_trace_id:m.pcb_trace_id,subcircuit_id:e.subcircuit_id??void 0,x:_.x,y:_.y,outer_diameter:_.outer_diameter,hole_diameter:_.hole_diameter,layers:f>=0&&I>=0?a.slice(Math.min(f,I),Math.max(f,I)+1):[_.from_layer,_.to_layer]};A.push(C)}}}return[...i,...A]}const vze=(t,e)=>t.phaseName||`Phase ${t.phaseOrdinal??e+1}`,VAn=t=>t.componentDisplayName?.match(/name="([^"]+)"/)?.[1]?.replace(/^\./,"")||t.componentDisplayName||t.subcircuit_id||"Board",zAn=t=>t.startSimpleRouteJson??t.endSimpleRouteJson??t.errorSimpleRouteJson,FQi={is_showing_autorouting:!0,is_showing_rats_nest:!1,is_showing_drc_errors:!1,is_showing_drc_warnings:!1,is_showing_pcb_groups:!1},LQi=({circuitJson:t,phases:e=[],isRunning:n=!1})=>{const[o,i]=te.useState(null),[r,s]=te.useState("output"),[a,A]=te.useState(!0),[c,l]=te.useState(!1),g=te.useRef(null),[u,h]=te.useState(480),d=o?e.findIndex(T=>T.id===o.id&&zAn(T)===zAn(o)):-1,m=d<0?e.length-1:d,p=e[m],_=d<0,f=!!p?.endSimpleRouteJson,I=p?.startSimpleRouteJson??p?.errorSimpleRouteJson,C=!!I,y=r==="output"&&!f?"input":r==="input"&&!C?"output":r,x=y==="input"?I:p?.endSimpleRouteJson,E=te.useMemo(()=>!p||!x?null:kQi(t??[],p,y),[t,p,x,y]),B=te.useMemo(()=>p&&y==="output"&&a?NQi(p):{lines:[],circles:[]},[p,y,a]);if(te.useLayoutEffect(()=>{const T=g.current;if(!T)return;const H=()=>h(Math.max(360,T.clientHeight));H();const G=new ResizeObserver(H);return G.observe(T),()=>G.disconnect()},[!!p]),!p)return z.jsxs("div",{className:"rf-flex rf-min-h-[400px] rf-flex-col rf-items-center rf-justify-center rf-gap-3 rf-p-8 rf-text-center",children:[z.jsx(jon,{className:"rf-h-7 rf-w-7 rf-text-blue-500"}),z.jsx("h3",{className:"rf-text-base rf-font-medium",children:n?"Waiting for autorouting":"No autorouting captures"}),z.jsx("p",{className:"rf-max-w-md rf-text-sm rf-text-gray-500",children:n?"Phases appear as the circuit routes. Each capture includes its input and output on the PCB.":"Run a circuit with autorouting enabled to inspect its phases. A circuit JSON file alone does not include routing history."})]});const b=vze(p,m),Q=p.status==="running"&&n,w=!f,D=I?.connections.length,k=E?.filter(T=>T.type==="pcb_trace").length??0;return z.jsxs("div",{className:"rf-flex rf-h-full rf-min-h-[620px] rf-flex-col rf-bg-white md:rf-flex-row","data-testid":"autorouting-explorer",children:[z.jsxs("aside",{className:"rf-flex rf-shrink-0 rf-flex-col rf-border-b rf-border-gray-200 md:rf-w-52 md:rf-border-b-0 md:rf-border-r","aria-label":"Routing phases",children:[z.jsxs("div",{className:"rf-flex rf-items-center rf-justify-between rf-px-3 rf-py-2 rf-text-xs rf-text-gray-500",children:[z.jsx("span",{children:"Routing phases"}),z.jsx("span",{children:e.length})]}),z.jsx("div",{className:"rf-flex rf-gap-1 rf-overflow-x-auto rf-px-1.5 rf-pb-1.5 md:rf-flex-col md:rf-overflow-x-hidden md:rf-overflow-y-auto",children:e.map((T,H)=>{const G=UAn(T).length,U=T.endSimpleRouteJson?`${G} ${G===1?"trace":"traces"} routed`:T.status==="error"?"Failed":T.status==="running"&&n?"Routing…":"No output";return z.jsxs("button",{type:"button","aria-pressed":H===m,title:`${VAn(T)} · ${U}`,onClick:()=>i(T),className:Ur("rf-flex rf-min-w-[192px] rf-items-start rf-gap-2 rf-rounded-md rf-border rf-px-2 rf-py-2 rf-text-left md:rf-min-w-0",H===m?"rf-border-blue-200 rf-bg-blue-50":"rf-border-transparent hover:rf-bg-gray-50"),children:[z.jsx("span",{className:Ur("rf-flex rf-h-5 rf-w-5 rf-shrink-0 rf-items-center rf-justify-center rf-rounded-full rf-text-[11px]",H===m?"rf-bg-blue-600 rf-text-white":"rf-bg-gray-100 rf-text-gray-500"),children:H+1}),z.jsxs("span",{className:"rf-min-w-0 rf-flex-1",children:[z.jsxs("span",{className:"rf-flex rf-items-center rf-gap-1",children:[z.jsx("span",{className:"rf-min-w-0 rf-flex-1 rf-truncate rf-text-xs rf-font-medium rf-leading-5 rf-text-gray-800",title:vze(T,H),children:vze(T,H)}),T.status==="complete"?z.jsx(fq,{"aria-label":"Captured",className:"rf-h-3 rf-w-3 rf-shrink-0 rf-text-green-600"}):T.status==="error"?z.jsx(mKe,{"aria-label":"Failed",className:"rf-h-3 rf-w-3 rf-shrink-0 rf-text-red-500"}):n?z.jsx(Y5,{"aria-label":"Routing",className:"rf-h-3 rf-w-3 rf-shrink-0 rf-animate-spin rf-text-blue-500"}):null]}),z.jsxs("span",{className:"rf-block rf-text-[11px] rf-leading-4 rf-text-gray-500",children:[wQi(T)," · ",U]})]})]},T.id)})})]}),z.jsxs("div",{className:"rf-flex rf-min-w-0 rf-flex-1 rf-flex-col",children:[z.jsxs("div",{className:"rf-flex rf-flex-wrap rf-items-center rf-gap-3 rf-border-b rf-border-gray-200 rf-px-4 rf-py-3",children:[z.jsxs("h3",{className:"rf-mr-auto rf-flex rf-items-center rf-gap-2 rf-text-sm rf-font-medium",children:[b,z.jsxs("span",{className:"rf-text-xs rf-font-normal rf-text-gray-500",children:[m+1," of ",e.length]})]}),n&&z.jsx("button",{type:"button",onClick:()=>i(null),disabled:_,className:"rf-text-xs rf-text-blue-600 disabled:rf-text-gray-500",children:_?"Following latest":"Follow latest"}),z.jsx("div",{className:"rf-flex rf-rounded-md rf-bg-gray-100 rf-p-1","aria-label":"Phase snapshot",children:["input","output"].map(T=>z.jsx("button",{type:"button","aria-pressed":y===T,disabled:T==="input"?!C:!f,onClick:()=>s(T),className:Ur("rf-rounded rf-px-3 rf-py-1 rf-text-xs disabled:rf-opacity-40",y===T?"rf-bg-white rf-text-gray-900 rf-shadow-sm":"rf-text-gray-500"),children:T==="input"?"Input":"Output"},T))})]}),z.jsxs("div",{className:"rf-flex rf-flex-wrap rf-items-center rf-justify-between rf-gap-2 rf-px-4 rf-py-2 rf-text-xs rf-text-gray-600",children:[z.jsxs("label",{className:"rf-flex rf-items-center rf-gap-2",children:[z.jsx("input",{type:"checkbox",checked:a,disabled:y!=="output",onChange:T=>A(T.target.checked),className:"rf-accent-blue-600"}),z.jsx("span",{"aria-hidden":"true",className:"rf-inline-block rf-h-0.5 rf-w-3",style:{backgroundColor:Qze}}),"Highlight changes (all layers)"]}),z.jsxs("span",{children:[y==="input"?"Before this phase":"After this phase"," ","· ",k," traces"]})]}),w&&z.jsx("div",{className:Ur("rf-border-y rf-px-4 rf-py-2 rf-text-xs",p.status==="error"?"rf-border-red-100 rf-bg-red-50 rf-text-red-700":"rf-border-blue-100 rf-bg-blue-50 rf-text-blue-700"),role:"status",children:p.status==="error"?`Routing failed: ${p.error?.message||"No output was captured."}`:Q?"Routing in progress. Showing captured input until output is available.":"No output was captured for this phase. Showing the available input."}),z.jsx("div",{ref:g,className:"rf-relative rf-min-h-[360px] rf-flex-1","data-testid":"autorouting-pcb",children:E?z.jsx(fze,{circuitJson:E,height:u,allowEditing:!1,clickToInteractEnabled:!1,initialState:FQi,debugGraphics:B}):z.jsx("div",{className:"rf-p-6 rf-text-sm rf-text-gray-500",children:"No PCB snapshot available for this capture."})}),z.jsxs("div",{className:"rf-flex rf-flex-wrap rf-items-center rf-justify-between rf-gap-2 rf-border-t rf-border-gray-200 rf-px-4 rf-py-3 rf-text-xs rf-text-gray-500",children:[z.jsxs("span",{children:[D===void 0?"Input unavailable":`${D} input connections`,` · ${VAn(p)}`]}),z.jsxs("div",{className:"rf-flex rf-items-center rf-gap-4",children:[z.jsxs("button",{type:"button",disabled:!x,onClick:()=>sE(JSON.stringify(x,null,2),{fileName:`${p.id}-${y}.srj.json`,mimeType:"application/json"}),className:"rf-flex rf-items-center rf-gap-1 disabled:rf-opacity-40",children:[z.jsx(Iq,{className:"rf-h-3 rf-w-3"}),"Download SRJ"]}),z.jsxs("button",{type:"button","aria-expanded":c,onClick:()=>l(!c),className:"rf-flex rf-items-center rf-gap-1",children:[z.jsx(VG,{className:Ur("rf-h-3 rf-w-3",c&&"rf-rotate-90")}),"Inspect SRJ"]})]})]}),c&&z.jsx("pre",{className:"rf-m-0 rf-max-h-64 rf-overflow-auto rf-border-t rf-border-gray-200 rf-bg-gray-50 rf-p-4 rf-text-xs","aria-label":`${b} ${y} SRJ`,children:x?JSON.stringify(x,null,2):"No snapshot captured."})]})]})},JAn=({errorMessage:t,errorStack:e,circuitJsonErrors:n})=>{te.useEffect(()=>{if(t){const o=new Error(t);e&&(o.stack=e);try{UT.captureException(o)}catch{}}},[t,e]),te.useEffect(()=>{if(n&&n.length>0)for(const o of n){const i=new Error(o.message||"Circuit JSON Error");o.stack&&(i.stack=o.stack);try{UT.captureException(i,{error_type:o.type})}catch{}}},[n])},HQi=t=>{te.useEffect(()=>{try{Hxn(t)}catch{}},[t.source,t.component,t.isWebEmbedded,t.activeTab])},WAn="0.0.2771",OQi={version:WAn},Pze={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1},wze=new Map,ome=t=>{const e=wze.get(t);return e?Object.fromEntries(Object.entries(e.stores).map(([n,o])=>[n,o.getState()])):{}},GQi=(t,e,n)=>{if(t===void 0)return{type:"untracked",connection:e.connect(n)};const o=wze.get(n.name);if(o)return{type:"tracked",store:t,...o};const i={connection:e.connect(n),stores:{}};return wze.set(n.name,i),{type:"tracked",store:t,...i}},jAn=(t,e={})=>(n,o,i)=>{const{enabled:r,anonymousActionType:s,store:a,...A}=e;let c;try{c=(r??(Pze?"production":void 0)!=="production")&&window.__REDUX_DEVTOOLS_EXTENSION__}catch{}if(!c)return(Pze?"production":void 0)!=="production"&&r&&console.warn("[zustand devtools middleware] Please install/enable Redux devtools extension"),t(n,o,i);const{connection:l,...g}=GQi(a,c,A);let u=!0;i.setState=(m,p,_)=>{const f=n(m,p);if(!u)return f;const I=_===void 0?{type:s||"anonymous"}:typeof _=="string"?{type:_}:_;return a===void 0?(l?.send(I,o()),f):(l?.send({...I,type:`${a}/${I.type}`},{...ome(A.name),[a]:i.getState()}),f)};const h=(...m)=>{const p=u;u=!1,n(...m),u=p},d=t(i.setState,o,i);if(g.type==="untracked"?l?.init(d):(g.stores[g.store]=i,l?.init(Object.fromEntries(Object.entries(g.stores).map(([m,p])=>[m,m===g.store?d:p.getState()])))),i.dispatchFromDevtools&&typeof i.dispatch=="function"){let m=!1;const p=i.dispatch;i.dispatch=(..._)=>{(Pze?"production":void 0)!=="production"&&_[0].type==="__setState"&&!m&&(console.warn('[zustand devtools middleware] "__setState" action type is reserved to set state from the devtools. Avoid using it.'),m=!0),p(..._)}}return l.subscribe(m=>{var p;switch(m.type){case"ACTION":if(typeof m.payload!="string"){console.error("[zustand devtools middleware] Unsupported action format");return}return Mze(m.payload,_=>{if(_.type==="__setState"){if(a===void 0){h(_.state);return}Object.keys(_.state).length!==1&&console.error(`
|
|
5584
5584
|
[zustand devtools middleware] Unsupported __setState action format.
|
|
5585
5585
|
When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(),
|
|
5586
5586
|
and value of this only key should be a state object. Example: { "type": "__setState", "state": { "abc123Store": { "foo": "bar" } } }
|