@tscircuit/runframe 0.0.867 → 0.0.868

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.
@@ -1333,7 +1333,7 @@ var useErrorTelemetry = ({
1333
1333
  };
1334
1334
 
1335
1335
  // package.json
1336
- var version = "0.0.866";
1336
+ var version = "0.0.867";
1337
1337
 
1338
1338
  // lib/hooks/use-eval-versions.ts
1339
1339
  import { useEffect as useEffect5, useMemo as useMemo2, useState as useState6 } from "react";
package/dist/preview.js CHANGED
@@ -8,7 +8,7 @@ import {
8
8
  linkify,
9
9
  useOrderDialog,
10
10
  useOrderDialogCli
11
- } from "./chunk-NRGI4PV6.js";
11
+ } from "./chunk-233HZGV3.js";
12
12
  export {
13
13
  BomTable,
14
14
  CadViewer,
package/dist/runner.js CHANGED
@@ -23,7 +23,7 @@ import {
23
23
  useRunFrameStore,
24
24
  useRunnerStore,
25
25
  useStyles
26
- } from "./chunk-NRGI4PV6.js";
26
+ } from "./chunk-233HZGV3.js";
27
27
 
28
28
  // lib/components/RunFrame/RunFrame.tsx
29
29
  import { createCircuitWebWorker } from "@tscircuit/eval/worker";
@@ -4970,7 +4970,7 @@ You passed in: '`+this.raw_options[o]+"'");return c},t.prototype._is_valid_selec
4970
4970
  `};e.exports=function(c,l){var u=r({},o,l);return c=t.html(c,u),u.ocd===!0?(u.newlines&&(u.sep=u.newlines),s(c,u)):c};function s(a,c){return i(a,c).replace(/^\s+/g,"").replace(/\s+$/g,`
4971
4971
  `).replace(/(\s*<!--)/g,`
4972
4972
  $1`).replace(/>(\s*)(?=<!--\s*\/)/g,"> ")}}}),vw=class{MAX_ITERATIONS=1e5;solved=!1;failed=!1;iterations=0;progress=0;error=null;activeSubSolver;failedSubSolvers;timeToSolve;stats={};step(){if(!this.solved&&!this.failed){this.iterations++;try{this._step()}catch(e){throw this.error=`${this.constructor.name} error: ${e}`,this.failed=!0,e}!this.solved&&this.iterations>this.MAX_ITERATIONS&&this.tryFinalAcceptance(),!this.solved&&this.iterations>this.MAX_ITERATIONS&&(this.error=`${this.constructor.name} ran out of iterations`,this.failed=!0),"computeProgress"in this&&(this.progress=this.computeProgress())}}_step(){}getConstructorParams(){throw new Error("getConstructorParams not implemented")}solve(){const e=Date.now();for(;!this.solved&&!this.failed;)this.step();const t=Date.now();this.timeToSolve=t-e}visualize(){return{lines:[],points:[],rects:[],circles:[]}}tryFinalAcceptance(){}preview(){return{lines:[],points:[],rects:[],circles:[]}}},RIe=class{netMap;idToNetMap;constructor(e){this.netMap=e,this.idToNetMap={};for(const[t,i]of Object.entries(e))for(const r of i)this.idToNetMap[r]=t}addConnections(e){for(const t of e){const i=new Set;for(const o of t){const s=this.idToNetMap[o];s&&i.add(s)}let r;if(i.size===0)r=`connectivity_net${Object.keys(this.netMap).length}`,this.netMap[r]=[];else if(i.size===1)r=i.values().next().value??`connectivity_net${Object.keys(this.netMap).length}`;else{r=i.values().next().value??`connectivity_net${Object.keys(this.netMap).length}`;for(const o of i)if(o!==r){const s=this.netMap[r],a=this.netMap[o];if(s&&a){s.push(...a),this.netMap[o]=s;for(const c of s)this.idToNetMap[c]=r}}}for(const o of t){const s=this.netMap[r];s&&!s.includes(o)&&s.push(o),this.idToNetMap[o]=r}}}getIdsConnectedToNet(e){return this.netMap[e]||[]}getNetConnectedToId(e){return this.idToNetMap[e]}areIdsConnected(e,t){if(e===t)return!0;const i=this.getNetConnectedToId(e);if(!i)return!1;const r=this.getNetConnectedToId(t);return r?i===r||r===e||r===e:!1}areAllIdsConnected(e){if(e.length===0)return!0;const t=this.getNetConnectedToId(e[0]);if(!t)return!1;for(const i of e){const r=this.getNetConnectedToId(i);if(r===void 0||r!==t)return!1}return!0}},PIe=n=>{const e=new RIe({});for(const i of n.directConnections)e.addConnections([i.netId?[i.netId,...i.pinIds]:i.pinIds]);const t=new RIe(e.netMap);for(const i of n.netConnections)t.addConnections([[i.netId,...i.pinIds]]);return{directConnMap:e,netConnMap:t}};function yUt(n,e={}){const t=n.length,i=e?.maxDistance??Number.POSITIVE_INFINITY;if(t<=1)return[];{const u=new Set;for(const d of n){if(u.has(d.pinId))throw new Error(`Duplicate pinId detected: "${d.pinId}"`);u.add(d.pinId)}}const r=(u,d)=>Math.abs(u.x-d.x)+Math.abs(u.y-d.y),o=new Array(t).fill(!1),s=new Array(t).fill(Number.POSITIVE_INFINITY),a=new Array(t).fill(-1);let c=0;for(let u=1;u<t;u++)n[u].pinId<n[c].pinId&&(c=u);s[c]=0;const l=[];for(let u=0;u<t;u++){let d=-1,h=Number.POSITIVE_INFINITY,f="";for(let m=0;m<t;m++)if(!o[m]){const y=s[m];(y<h||y===h&&(f===""||n[m].pinId<f))&&(h=y,f=n[m].pinId,d=m)}o[d]=!0,a[d]!==-1&&l.push([n[d].pinId,n[a[d]].pinId]);for(let m=0;m<t;m++)if(!o[m]){const y=r(n[d],n[m]),g=y>i?Number.POSITIVE_INFINITY:y;(g<s[m]||g===s[m]&&n[d].pinId<n[a[m]]?.pinId)&&(s[m]=g,a[m]=d)}}return l}var H2=(n,e=1)=>`hsl(${n.split("").reduce((i,r)=>i*31+r.charCodeAt(0),0)%360}, 100%, 50%, ${e})`,IIe=(n,e)=>{const{x:t,y:i}=n,{center:r,width:o,height:s}=e,a=r.y+s/2,c=r.y-s/2,l=r.x+o/2,u=r.x-o/2,d=a-i,h=i-c,f=l-t,m=t-u,y=Math.min(d,h,f,m);return y===d?"y+":y===h?"y-":y===f?"x+":"x-"},a4=(n,e={})=>{const{connectionAlpha:t=.8,chipAlpha:i=.8}=e,r={lines:[],points:[],rects:[]},o=new Map;for(const s of n.chips)for(const a of s.pins)o.set(a.pinId,a);for(const s of n.chips){r.rects.push({label:s.chipId,center:s.center,width:s.width,height:s.height,fill:H2(s.chipId,i)});for(const a of s.pins)r.points.push({label:`${a.pinId}
4973
- ${a._facingDirection??IIe(a,s)}`,x:a.x,y:a.y,color:H2(a.pinId,.8)})}for(const s of n.directConnections){const[a,c]=s.pinIds,l=o.get(a),u=o.get(c);r.lines.push({points:[{x:l.x,y:l.y},{x:u.x,y:u.y}],strokeColor:H2(s.netId??`${a}-${c}`,t)})}for(const s of n.netConnections){const a=s.pinIds.map(c=>o.get(c));for(let c=0;c<a.length-1;c++)for(let l=c+1;l<a.length;l++){const u=a[c],d=a[l];r.lines.push({points:[{x:u.x,y:u.y},{x:d.x,y:d.y}],strokeColor:H2(s.netId,t),strokeDash:"4 2"})}}return r},gUt=class extends vw{inputProblem;mspConnectionPairs=[];dcConnMap;globalConnMap;queuedDcNetIds;chipMap;maxMspPairDistance;pinMap;userNetIdByPinId;constructor({inputProblem:n}){super(),this.inputProblem=n,this.maxMspPairDistance=n.maxMspPairDistance??1;const{directConnMap:e,netConnMap:t}=PIe(n);this.dcConnMap=e,this.globalConnMap=t,this.pinMap={};for(const i of n.chips)for(const r of i.pins)this.pinMap[r.pinId]={...r,chipId:i.chipId};this.chipMap={};for(const i of n.chips)this.chipMap[i.chipId]=i;this.userNetIdByPinId={};for(const i of n.directConnections)if(i.netId){const[r,o]=i.pinIds;this.userNetIdByPinId[r]=i.netId,this.userNetIdByPinId[o]=i.netId}for(const i of n.netConnections)for(const r of i.pinIds)this.userNetIdByPinId[r]=i.netId;this.queuedDcNetIds=Object.keys(t.netMap)}getConstructorParams(){return{inputProblem:this.inputProblem}}_step(){if(this.queuedDcNetIds.length===0){this.solved=!0;return}const n=this.queuedDcNetIds.shift(),t=this.globalConnMap.getIdsConnectedToNet(n).filter(r=>!!this.pinMap[r]);if(t.length<=1)return;if(t.length===2){const[r,o]=t,s=this.pinMap[r],a=this.pinMap[o];if(Math.abs(s.x-a.x)+Math.abs(s.y-a.y)>this.maxMspPairDistance)return;const l=this.globalConnMap.getNetConnectedToId(r),u=this.userNetIdByPinId[r]??this.userNetIdByPinId[o];this.mspConnectionPairs.push({mspPairId:`${r}-${o}`,dcConnNetId:n,globalConnNetId:l,userNetId:u,pins:[s,a]});return}const i=yUt(t.map(r=>this.pinMap[r]).filter(Boolean),{maxDistance:this.maxMspPairDistance});for(const[r,o]of i){const s=this.globalConnMap.getNetConnectedToId(r),a=this.userNetIdByPinId[r]??this.userNetIdByPinId[o];this.mspConnectionPairs.push({mspPairId:`${r}-${o}`,dcConnNetId:n,globalConnNetId:s,userNetId:a,pins:[this.pinMap[r],this.pinMap[o]]})}}visualize(){const n=a4(this.inputProblem,{chipAlpha:.1,connectionAlpha:.1});for(const e of this.mspConnectionPairs)n.lines.push({points:[{x:e.pins[0].x,y:e.pins[0].y},{x:e.pins[1].x,y:e.pins[1].y}],strokeColor:H2(e.mspPairId,.75)});return n}},vUt=.6,xUt=1;Bie(eUt()),Bie(nUt()),Bie(_Ut(),1);function Vie(n){const e=[...n.points||[],...(n.lines||[]).flatMap(t=>t.points),...(n.rects||[]).flatMap(t=>{const i=t.width/2,r=t.height/2;return[{x:t.center.x-i,y:t.center.y-r},{x:t.center.x+i,y:t.center.y-r},{x:t.center.x-i,y:t.center.y+r},{x:t.center.x+i,y:t.center.y+r}]}),...(n.circles||[]).flatMap(t=>[{x:t.center.x-t.radius,y:t.center.y},{x:t.center.x+t.radius,y:t.center.y},{x:t.center.x,y:t.center.y-t.radius},{x:t.center.x,y:t.center.y+t.radius}]),...(n.texts||[]).flatMap(t=>{const i=t.fontSize??12,r=t.text.length*i*vUt,o=i*xUt,s=t.anchorSide??"center",a={top_left:{dx:0,dy:0},top_center:{dx:-r/2,dy:0},top_right:{dx:-r,dy:0},center_left:{dx:0,dy:-o/2},center:{dx:-r/2,dy:-o/2},center_right:{dx:-r,dy:-o/2},bottom_left:{dx:0,dy:-o},bottom_center:{dx:-r/2,dy:-o},bottom_right:{dx:-r,dy:-o}},{dx:c,dy:l}=a[s],u=t.x+c,d=t.y+l;return[{x:u,y:d},{x:u+r,y:d+o}]})];return e.length===0?{minX:-1,maxX:1,minY:-1,maxY:1}:e.reduce((t,i)=>({minX:Math.min(t.minX,i.x),maxX:Math.max(t.maxX,i.x),minY:Math.min(t.minY,i.y),maxY:Math.max(t.maxY,i.y)}),{minX:1/0,maxX:-1/0,minY:1/0,maxY:-1/0})}var bUt=class{constructor(){this.ids=[],this.values=[],this.length=0}clear(){this.length=0}push(e,t){let i=this.length++;for(;i>0;){const r=i-1>>1,o=this.values[r];if(t>=o)break;this.ids[i]=this.ids[r],this.values[i]=o,i=r}this.ids[i]=e,this.values[i]=t}pop(){if(this.length===0)return;const e=this.ids,t=this.values,i=e[0],r=--this.length;if(r>0){const o=e[r],s=t[r];let a=0;const c=r>>1;for(;a<c;){const l=(a<<1)+1,u=l+1,d=l+(+(u<r)&+(t[u]<t[l]));if(t[d]>=s)break;e[a]=e[d],t[a]=t[d],a=d}e[a]=o,t[a]=s}return i}peek(){return this.length>0?this.ids[0]:void 0}peekValue(){return this.length>0?this.values[0]:void 0}shrink(){this.ids.length=this.values.length=this.length}},NIe=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],qie=3,wUt=class Edt{static from(e,t=0){if(t%8!==0)throw new Error("byteOffset must be 8-byte aligned.");if(!e||e.byteLength===void 0||e.buffer)throw new Error("Data must be an instance of ArrayBuffer or SharedArrayBuffer.");const[i,r]=new Uint8Array(e,t+0,2);if(i!==251)throw new Error("Data does not appear to be in a Flatbush format.");const o=r>>4;if(o!==qie)throw new Error(`Got v${o} data when expected v${qie}.`);const s=NIe[r&15];if(!s)throw new Error("Unrecognized array type.");const[a]=new Uint16Array(e,t+2,1),[c]=new Uint32Array(e,t+4,1);return new Edt(c,a,s,void 0,e,t)}constructor(e,t=16,i=Float64Array,r=ArrayBuffer,o,s=0){if(e===void 0)throw new Error("Missing required argument: numItems.");if(isNaN(e)||e<=0)throw new Error(`Unexpected numItems value: ${e}.`);this.numItems=+e,this.nodeSize=Math.min(Math.max(+t,2),65535),this.byteOffset=s;let a=e,c=a;this._levelBounds=[a*4];do a=Math.ceil(a/this.nodeSize),c+=a,this._levelBounds.push(c*4);while(a!==1);this.ArrayType=i,this.IndexArrayType=c<16384?Uint16Array:Uint32Array;const l=NIe.indexOf(i),u=c*4*i.BYTES_PER_ELEMENT;if(l<0)throw new Error(`Unexpected typed array class: ${i}.`);if(o)this.data=o,this._boxes=new i(o,s+8,c*4),this._indices=new this.IndexArrayType(o,s+8+u,c),this._pos=c*4,this.minX=this._boxes[this._pos-4],this.minY=this._boxes[this._pos-3],this.maxX=this._boxes[this._pos-2],this.maxY=this._boxes[this._pos-1];else{const d=this.data=new r(8+u+c*this.IndexArrayType.BYTES_PER_ELEMENT);this._boxes=new i(d,8,c*4),this._indices=new this.IndexArrayType(d,8+u,c),this._pos=0,this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0,new Uint8Array(d,0,2).set([251,(qie<<4)+l]),new Uint16Array(d,2,1)[0]=t,new Uint32Array(d,4,1)[0]=e}this._queue=new bUt}add(e,t,i=e,r=t){const o=this._pos>>2,s=this._boxes;return this._indices[o]=o,s[this._pos++]=e,s[this._pos++]=t,s[this._pos++]=i,s[this._pos++]=r,e<this.minX&&(this.minX=e),t<this.minY&&(this.minY=t),i>this.maxX&&(this.maxX=i),r>this.maxY&&(this.maxY=r),o}finish(){if(this._pos>>2!==this.numItems)throw new Error(`Added ${this._pos>>2} items when expected ${this.numItems}.`);const e=this._boxes;if(this.numItems<=this.nodeSize){e[this._pos++]=this.minX,e[this._pos++]=this.minY,e[this._pos++]=this.maxX,e[this._pos++]=this.maxY;return}const t=this.maxX-this.minX||1,i=this.maxY-this.minY||1,r=new Uint32Array(this.numItems),o=65535;for(let s=0,a=0;s<this.numItems;s++){const c=e[a++],l=e[a++],u=e[a++],d=e[a++],h=Math.floor(o*((c+u)/2-this.minX)/t),f=Math.floor(o*((l+d)/2-this.minY)/i);r[s]=EUt(h,f)}Gie(r,e,this._indices,0,this.numItems-1,this.nodeSize);for(let s=0,a=0;s<this._levelBounds.length-1;s++){const c=this._levelBounds[s];for(;a<c;){const l=a;let u=e[a++],d=e[a++],h=e[a++],f=e[a++];for(let m=1;m<this.nodeSize&&a<c;m++)u=Math.min(u,e[a++]),d=Math.min(d,e[a++]),h=Math.max(h,e[a++]),f=Math.max(f,e[a++]);this._indices[this._pos>>2]=l,e[this._pos++]=u,e[this._pos++]=d,e[this._pos++]=h,e[this._pos++]=f}}}search(e,t,i,r,o){if(this._pos!==this._boxes.length)throw new Error("Data not yet indexed - call index.finish().");let s=this._boxes.length-4;const a=[],c=[];for(;s!==void 0;){const l=Math.min(s+this.nodeSize*4,kIe(s,this._levelBounds));for(let u=s;u<l;u+=4){const d=this._boxes[u];if(i<d)continue;const h=this._boxes[u+1];if(r<h)continue;const f=this._boxes[u+2];if(e>f)continue;const m=this._boxes[u+3];if(t>m)continue;const y=this._indices[u>>2]|0;s>=this.numItems*4?a.push(y):(o===void 0||o(y,d,h,f,m))&&c.push(y)}s=a.pop()}return c}neighbors(e,t,i=1/0,r=1/0,o){if(this._pos!==this._boxes.length)throw new Error("Data not yet indexed - call index.finish().");let s=this._boxes.length-4;const a=this._queue,c=[],l=r*r;e:for(;s!==void 0;){const u=Math.min(s+this.nodeSize*4,kIe(s,this._levelBounds));for(let d=s;d<u;d+=4){const h=this._indices[d>>2]|0,f=this._boxes[d],m=this._boxes[d+1],y=this._boxes[d+2],g=this._boxes[d+3],b=e<f?f-e:e>y?e-y:0,x=t<m?m-t:t>g?t-g:0,w=b*b+x*x;w>l||(s>=this.numItems*4?a.push(h<<1,w):(o===void 0||o(h))&&a.push((h<<1)+1,w))}for(;a.length&&a.peek()&1;)if(a.peekValue()>l||(c.push(a.pop()>>1),c.length===i))break e;s=a.length?a.pop()>>1:void 0}return a.clear(),c}};function kIe(n,e){let t=0,i=e.length-1;for(;t<i;){const r=t+i>>1;e[r]>n?i=r:t=r+1}return e[t]}function Gie(n,e,t,i,r,o){if(Math.floor(i/o)>=Math.floor(r/o))return;const s=n[i],a=n[i+r>>1],c=n[r];let l=c;const u=Math.max(s,a);c>u?l=u:u===s?l=Math.max(a,c):u===a&&(l=Math.max(s,c));let d=i-1,h=r+1;for(;;){do d++;while(n[d]<l);do h--;while(n[h]>l);if(d>=h)break;SUt(n,e,t,d,h)}Gie(n,e,t,i,h,o),Gie(n,e,t,h+1,r,o)}function SUt(n,e,t,i,r){const o=n[i];n[i]=n[r],n[r]=o;const s=4*i,a=4*r,c=e[s],l=e[s+1],u=e[s+2],d=e[s+3];e[s]=e[a],e[s+1]=e[a+1],e[s+2]=e[a+2],e[s+3]=e[a+3],e[a]=c,e[a+1]=l,e[a+2]=u,e[a+3]=d;const h=t[i];t[i]=t[r],t[r]=h}function EUt(n,e){let t=n^e,i=65535^t,r=65535^(n|e),o=n&(e^65535),s=t|i>>1,a=t>>1^t,c=r>>1^i&o>>1^r,l=t&r>>1^o>>1^o;t=s,i=a,r=c,o=l,s=t&t>>2^i&i>>2,a=t&i>>2^i&(t^i)>>2,c^=t&r>>2^i&o>>2,l^=i&r>>2^(t^i)&o>>2,t=s,i=a,r=c,o=l,s=t&t>>4^i&i>>4,a=t&i>>4^i&(t^i)>>4,c^=t&r>>4^i&o>>4,l^=i&r>>4^(t^i)&o>>4,t=s,i=a,r=c,o=l,c^=t&r>>8^i&o>>8,l^=i&r>>8^(t^i)&o>>8,t=c^c>>1,i=l^l>>1;let u=n^e,d=i|65535^(u|t);return u=(u|u<<8)&16711935,u=(u|u<<4)&252645135,u=(u|u<<2)&858993459,u=(u|u<<1)&1431655765,d=(d|d<<8)&16711935,d=(d|d<<4)&252645135,d=(d|d<<2)&858993459,d=(d|d<<1)&1431655765,(d<<1|u)>>>0}function pT(n){const e=n.width/2,t=n.height/2;return{minX:n.center.x-e,maxX:n.center.x+e,minY:n.center.y-t,maxY:n.center.y+t}}var OIe=class{chips;spatialIndex;spatialIndexIdToChip;constructor(n){this.chips=n.map(e=>({...e,bounds:pT(e),spatialIndexId:null})),this.spatialIndexIdToChip=new Map,this.spatialIndex=new wUt(n.length);for(const e of this.chips)e.spatialIndexId=this.spatialIndex.add(e.bounds.minX,e.bounds.minY,e.bounds.maxX,e.bounds.maxY),this.spatialIndexIdToChip.set(e.spatialIndexId,e);this.spatialIndex.finish()}getChipsInBounds(n){return this.spatialIndex.search(n.minX,n.minY,n.maxX,n.maxY).map(t=>this.spatialIndexIdToChip.get(t))}doesOrthogonalLineIntersectChip(n,e={}){const t=e.excludeChipIds??[],[i,r]=n,{x:o,y:s}=i,{x:a,y:c}=r;return this.getChipsInBounds({minX:Math.min(o,a),minY:Math.min(s,c),maxX:Math.max(o,a),maxY:Math.max(s,c)}).filter(u=>!t.includes(u.chipId)).length>0}},TUt=(n,e,t)=>{const i=[{x:n.x,y:n.y}],r=(n.x+e.x)/2,o=(n.y+e.y)/2,s={x:e.x,y:e.y};switch(e.facingDirection){case"x+":s.x+=t;break;case"x-":s.x-=t;break;case"y+":s.y+=t;break;case"y-":s.y-=t;break}const a=n.facingDirection??"none",c=e.facingDirection??"none",l=h=>{const f=i[i.length-1];(f.x!==h.x||f.y!==h.y)&&i.push(h)},u=Math.abs(n.y-e.y)<=Math.max(1e-6,t*.1),d=Math.abs(n.x-e.x)<=Math.max(1e-6,t*.1);if(a==="none"&&c==="none")l({x:r,y:n.y}),l({x:r,y:e.y});else if(a==="x+"&&c==="y+")n.x>e.x&&n.y<e.y?(l({x:n.x+t,y:n.y}),l({x:n.x+t,y:e.y+t}),l({x:e.x,y:e.y+t})):n.x<e.x&&n.y>e.y?l({x:e.x,y:n.y}):d?(l({x:n.x+t,y:n.y}),l({x:n.x+t,y:e.y+t}),l({x:e.x,y:e.y+t})):n.x<e.x?(l({x:r,y:n.y}),l({x:r,y:s.y}),l({x:e.x,y:s.y})):n.y<=e.y+t?(l({x:n.x+t,y:n.y}),l({x:n.x+t,y:n.y+t}),l({x:e.x,y:n.y+t}),l({x:e.x,y:e.y})):(l({x:n.x+t,y:n.y}),l({x:n.x+t,y:(n.y+e.y)/2}),l({x:e.x,y:(n.y+e.y)/2}));else if(a==="x+"&&c==="x+"&&!u){const h=Math.max(n.x+t,s.x);l({x:h,y:n.y}),l({x:h,y:e.y})}else if(a==="x+"&&c==="x+"&&u)l({x:n.x+t,y:n.y}),l({x:n.x+t,y:n.y+t}),l({x:e.x+t,y:n.y+t}),l({x:e.x+t,y:e.y});else if(a==="x+"&&c==="y-")if(d&&n.y<=e.y)l({x:n.x+t,y:n.y}),l({x:n.x+t,y:o}),l({x:e.x,y:o});else if(d&&n.y>e.y)l({x:n.x+t,y:n.y}),l({x:n.x+t,y:e.y-t}),l({x:e.x,y:e.y-t});else if(n.x<e.x&&n.y<e.y)l({x:e.x,y:n.y});else if(n.x>e.x&&n.y<e.y){const h=n.x+t;l({x:h,y:n.y}),l({x:h,y:o}),l({x:e.x,y:o})}else if(n.x>e.x&&n.y>e.y){const h=n.x+t;l({x:h,y:n.y}),l({x:h,y:s.y}),l({x:e.x,y:s.y})}else n.y===e.y?(l({x:n.x+t,y:n.y}),l({x:n.x+t,y:n.y-t}),l({x:e.x,y:n.y-t})):(l({x:r,y:n.y}),l({x:r,y:s.y}),l({x:e.x,y:s.y}));else if(a==="x+"&&c==="x-"&&n.x+t>=e.x-t&&e.y!==n.y){const h=n.x+t;l({x:h,y:n.y}),l({x:h,y:o}),l({x:s.x,y:o}),l({x:s.x,y:s.y})}else a==="x+"&&c==="x-"&&e.y===n.y&&e.x>n.x||(a==="x+"&&c==="x-"&&e.y===n.y?(l({x:n.x+t,y:n.y}),l({x:n.x+t,y:n.y+t}),l({x:e.x-t,y:n.y+t}),l({x:e.x-t,y:n.y})):(a==="x+"&&l({x:n.x+t,y:n.y}),l({x:r,y:i[i.length-1].y}),l({x:r,y:s.y}),l({x:s.x,y:s.y})));return l({x:e.x,y:e.y}),i},MUt=(n,e,t={})=>{let i=n,r=e,o=!1;(i.x>r.x||i.x===r.x&&i.y>r.y)&&(o=!0,[i,r]=[r,i]);const s=i.facingDirection==="x-",a=i.facingDirection==="y-",c=x=>{const w=s?i.x-(x.x-i.x):x.x,T=a?i.y-(x.y-i.y):x.y;let N=x.facingDirection;return s&&(N==="x+"?N="x-":N==="x-"&&(N="x+")),a&&(N==="y+"?N="y-":N==="y-"&&(N="y+")),{x:w,y:T,facingDirection:N}},l=(x,w)=>{const T=x.x-w.x,N=x.y-w.y,R=w.x+N,k=w.y-T;let M=x.facingDirection;switch(M){case"x+":M="y-";break;case"y-":M="x-";break;case"x-":M="y+";break;case"y+":M="x+";break}return{x:R,y:k,facingDirection:M}},u=(x,w)=>{const T=x.x-w.x,N=x.y-w.y;return{x:w.x-N,y:w.y+T}},d=s||a?c(i):i,h=s||a?c(r):r;let f=d,m=h,y=!1;d.facingDirection==="y+"&&(y=!0,f={...d,facingDirection:"x+"},m=l(h,d));const g=t?.overshoot??.1*Math.max(Math.abs(f.x-m.x),Math.abs(f.y-m.y));let b=TUt(f,m,g);return y&&(b=b.map(x=>u(x,f))),(s||a)&&(b=b.map(({x,y:w})=>({x:s?i.x-(x-i.x):x,y:a?i.y-(w-i.y):w}))),o?b.reverse():b},CUt=n=>{switch(n){case"x+":return{x:1,y:0};case"x-":return{x:-1,y:0};case"y+":return{x:0,y:1};case"y-":return{x:0,y:-1}}throw new Error(`Invalid facing direction: ${n}`)},fT=1e-6,TM=1e-6,AUt=(n,e)=>Math.abs(n.x-e.x)<fT||Math.abs(n.y-e.y)<fT,RUt=(n,e)=>{const t=Math.abs(n.x-e.x),i=Math.abs(n.y-e.y);if(t<fT&&i>=fT)return"vertical";if(i<fT&&t>=fT)return"horizontal";throw new Error("Non-orthogonal or degenerate segment detected.")},DIe=n=>{if(n.length<2)throw new Error("Polyline must have at least two points.");for(let e=0;e<n.length-1;e++){const t=n[e],i=n[e+1];if(!AUt(t,i))throw new Error("Polyline contains a non-orthogonal segment.");if(Math.abs(t.x-i.x)+Math.abs(t.y-i.y)<TM)throw new Error("Polyline contains a near-zero length segment.")}},PUt=(n,e=fT)=>{const t=n.slice().sort((r,o)=>r-o),i=[];for(const r of t)(i.length===0||Math.abs(r-i[i.length-1])>e)&&i.push(r);return i},LIe=(n,e=9)=>n.map(t=>`${t.x.toFixed(e)},${t.y.toFixed(e)}`).join("|"),IUt=(n,e=TM)=>{if(n.length===0)return[];const t=[{...n[0]}];for(let i=1;i<n.length;i++){const r=n[i],o=t[t.length-1];Math.abs(r.x-o.x)+Math.abs(r.y-o.y)>e&&t.push({...r})}return t},NUt=(n,e,t)=>{const i=[];for(const r of e)n==="x"?r.orientation==="vertical"&&typeof r.x=="number"&&i.push(r.x):r.orientation==="horizontal"&&typeof r.y=="number"&&i.push(r.y);return i.push(t),PUt(i)},kUt=(n,e,t)=>RUt(e,t)==="horizontal"?{axis:"y",facing:n.y<=e.y?"y+":"y-"}:{axis:"x",facing:n.x<=e.x?"x+":"x-"},OUt=n=>n.length===0?[[]]:n.reduce((e,t)=>e.flatMap(i=>t.map(r=>[...i,r])),[[]]),DUt=({baseElbow:n,guidelines:e})=>{const t=IUt(n);DIe(t);const i=t.length;if(i-1<5)return{elbowVariants:[t.map(m=>({...m}))],movableSegments:[]};const o=2,s=i-4,a=[],c=[],l=[],u=[];for(let m=o;m<=s;m++){const y=t[m-1],g=t[m],b=t[m+1],x=t[m+2],{axis:w,facing:T}=kUt(y,g,b);a.push({start:{...g},end:{...b},freedom:T,dir:CUt(T)}),c.push(m),l.push(w);const N=w==="x"?g.x:g.y,k=NUt(w,e,N).filter(M=>{if(w==="y"){const I=Math.abs(y.y-M),C=Math.abs(x.y-M);return I>TM&&C>TM}else{const I=Math.abs(y.x-M),C=Math.abs(x.x-M);return I>TM&&C>TM}});u.push(k)}const d=OUt(u),h=new Set,f=[];{const m=LIe(t);h.add(m),f.push(t.map(y=>({...y})))}for(const m of d){if(m.length===0)continue;const y=t.map(b=>({...b}));for(let b=0;b<c.length;b++){const x=c[b],w=l[b],T=m[b];typeof T!="number"||Number.isNaN(T)||(w==="y"?(y[x]={...y[x],y:T},y[x+1]={...y[x+1],y:T}):(y[x]={...y[x],x:T},y[x+1]={...y[x+1],x:T}))}try{DIe(y)}catch{continue}const g=LIe(y);h.has(g)||(h.add(g),f.push(y))}return{elbowVariants:f,movableSegments:a}},zIe=({guidelines:n,graphics:e})=>{const t=Vie(e),i=t.maxX-t.minX,r=t.maxY-t.minY;t.minX-=i*.3,t.maxX+=i*.3,t.minY-=r*.3,t.maxY+=r*.3;for(const o of n)o.orientation==="horizontal"&&e.lines.push({points:[{x:t.minX,y:o.y},{x:t.maxX,y:o.y}],strokeColor:"rgba(0, 0, 0, 0.5)",strokeDash:"2 2"}),o.orientation==="vertical"&&e.lines.push({points:[{x:o.x,y:t.minY},{x:o.x,y:t.maxY}],strokeColor:"rgba(0, 0, 0, 0.5)",strokeDash:"2 2"});return e},LUt=class extends vw{pins;inputProblem;guidelines;chipMap;movableSegments;baseElbow;allCandidatePaths;queuedCandidatePaths;chipObstacleSpatialIndex;solvedTracePath=null;constructor(n){super(),this.pins=n.pins,this.inputProblem=n.inputProblem,this.guidelines=n.guidelines,this.chipMap=n.chipMap,this.chipObstacleSpatialIndex=this.inputProblem._chipObstacleSpatialIndex||new OIe(this.inputProblem.chips),this.inputProblem._chipObstacleSpatialIndex||(this.inputProblem._chipObstacleSpatialIndex=this.chipObstacleSpatialIndex);for(const s of this.pins)if(!s._facingDirection){const a=this.chipMap[s.chipId];s._facingDirection=IIe(s,a)}const[e,t]=this.pins;this.baseElbow=MUt({x:e.x,y:e.y,facingDirection:e._facingDirection},{x:t.x,y:t.y,facingDirection:t._facingDirection},{overshoot:.2});const{elbowVariants:i,movableSegments:r}=DUt({baseElbow:this.baseElbow,guidelines:this.guidelines});this.movableSegments=r;const o=s=>{let a=0;for(let c=0;c<s.length-1;c++){const l=s[c+1].x-s[c].x,u=s[c+1].y-s[c].y;a+=Math.sqrt(l*l+u*u)}return a};this.allCandidatePaths=[this.baseElbow,...i],this.queuedCandidatePaths=[...this.allCandidatePaths].sort((s,a)=>o(s)-o(a))}getConstructorParams(){return{chipMap:this.chipMap,pins:this.pins,guidelines:this.guidelines,inputProblem:this.inputProblem}}_step(){if(this.queuedCandidatePaths.length===0){this.failed=!0,this.error="No more candidate elbows, everything had collisions";return}const n=this.queuedCandidatePaths.shift();for(let e=0;e<n.length-1;e++){const t=n[e],i=n[e+1];let r=[];const o=this.pins.some(l=>Math.abs(l.x-t.x)<1e-10&&Math.abs(l.y-t.y)<1e-10),s=this.pins.some(l=>Math.abs(l.x-i.x)<1e-10&&Math.abs(l.y-i.y)<1e-10);if(o){const l=this.pins.find(u=>Math.abs(u.x-t.x)<1e-10&&Math.abs(u.y-t.y)<1e-10);if(l){const u=pT(this.chipMap[l.chipId]),d=i.x-t.x,h=i.y-t.y,f=1e-9,m=Math.abs(t.x-u.minX)<1e-9,y=Math.abs(t.x-u.maxX)<1e-9,g=Math.abs(t.y-u.minY)<1e-9,b=Math.abs(t.y-u.maxY)<1e-9;if(m&&d>f||y&&d<-f||g&&h>f||b&&h<-f)return;r.includes(l.chipId)||r.push(l.chipId)}}if(s){const l=this.pins.find(u=>Math.abs(u.x-i.x)<1e-10&&Math.abs(u.y-i.y)<1e-10);if(l){const u=pT(this.chipMap[l.chipId]),d=t.x-i.x,h=t.y-i.y,f=1e-9,m=Math.abs(i.x-u.minX)<1e-9,y=Math.abs(i.x-u.maxX)<1e-9,g=Math.abs(i.y-u.minY)<1e-9,b=Math.abs(i.y-u.maxY)<1e-9;if(m&&d>f||y&&d<-f||g&&h>f||b&&h<-f)return;r.includes(l.chipId)||r.push(l.chipId)}}const a={excludeChipIds:r};if(this.chipObstacleSpatialIndex.doesOrthogonalLineIntersectChip([t,i],a))return}this.solvedTracePath=n,this.solved=!0}visualize(){const n=a4(this.inputProblem,{chipAlpha:.1,connectionAlpha:.1}),e=Vie(n),t=e.maxX-e.minX,i=e.maxY-e.minY;zIe({guidelines:this.guidelines,graphics:n});for(const{start:r,end:o,dir:s}of this.movableSegments){const a={x:(r.x+o.x)/2,y:(r.y+o.y)/2},c=Math.sqrt((r.x-o.x)**2+(r.y-o.y)**2);n.lines.push({points:[r,a,o],strokeColor:"rgba(0,0,255,0.5)",strokeDash:"2 2"}),n.lines.push({points:[a,{x:a.x+s.x*c*.1,y:a.y+s.y*c*.1}],strokeColor:"rgba(0,0,255,0.5)",strokeDash:"2 2"})}if(!this.solvedTracePath){this.queuedCandidatePaths.length>0&&n.lines.push({points:this.queuedCandidatePaths[0],strokeColor:"orange",strokeWidth:t*.005});for(let r=1;r<this.queuedCandidatePaths.length;r++){const o=this.queuedCandidatePaths[r],s=r/this.queuedCandidatePaths.length;n.lines.push({points:o.map(a=>({x:a.x+s*t*.005,y:a.y+s*i*.005})),strokeColor:H2(`${o.reduce((a,c)=>`${a},${c.x},${c.y}`,"")}`,.5),strokeDash:"8 8"})}}return this.solvedTracePath&&n.lines.push({points:this.solvedTracePath,strokeColor:"green"}),n}},zUt=class extends vw{inputProblem;guidelines;mspConnectionPairs;dcConnMap;globalConnMap;queuedConnectionPairs;chipMap;currentConnectionPair=null;solvedTracePaths=[];failedConnectionPairs=[];constructor(n){super(),this.inputProblem=n.inputProblem,this.mspConnectionPairs=n.mspConnectionPairs,this.dcConnMap=n.dcConnMap,this.globalConnMap=n.globalConnMap,this.guidelines=n.guidelines,this.chipMap=n.chipMap,this.queuedConnectionPairs=[...this.mspConnectionPairs]}getConstructorParams(){return{inputProblem:this.inputProblem,chipMap:this.chipMap,mspConnectionPairs:this.mspConnectionPairs,dcConnMap:this.dcConnMap,globalConnMap:this.globalConnMap,guidelines:this.guidelines}}_step(){if(this.activeSubSolver?.solved&&(this.solvedTracePaths.push({...this.currentConnectionPair,tracePath:this.activeSubSolver.solvedTracePath,mspConnectionPairIds:[this.currentConnectionPair.mspPairId],pinIds:[this.currentConnectionPair.pins[0].pinId,this.currentConnectionPair.pins[1].pinId]}),this.activeSubSolver=null,this.currentConnectionPair=null),this.activeSubSolver?.failed&&(this.currentConnectionPair&&this.failedConnectionPairs.push({...this.currentConnectionPair,error:this.activeSubSolver.error||void 0}),this.activeSubSolver=null,this.currentConnectionPair=null),this.activeSubSolver){this.activeSubSolver.step();return}const n=this.queuedConnectionPairs.shift();if(this.currentConnectionPair=n,!n){this.solved=!0;return}const{pins:e}=n;this.activeSubSolver=new LUt({inputProblem:this.inputProblem,pins:e,chipMap:this.chipMap,guidelines:this.guidelines})}visualize(){if(this.activeSubSolver)return this.activeSubSolver.visualize();const n=a4(this.inputProblem,{chipAlpha:.1,connectionAlpha:.1});zIe({guidelines:this.guidelines,graphics:n});for(const{mspPairId:e,tracePath:t}of this.solvedTracePaths)n.lines.push({points:t,strokeWidth:.005,strokeColor:"green"});for(const e of this.failedConnectionPairs)n.lines.push({points:[{x:e.pins[0].x,y:e.pins[0].y},{x:e.pins[1].x,y:e.pins[1].y}],strokeColor:"red",strokeDash:"4 2",strokeWidth:.004});return n}},FUt=class extends vw{overlappingTraceSegments;traceNetIslands;SHIFT_DISTANCE=.1;correctedTraceMap={};constructor(n){super(),this.overlappingTraceSegments=n.overlappingTraceSegments,this.traceNetIslands=n.traceNetIslands;for(const{connNetId:e,pathsWithOverlap:t}of this.overlappingTraceSegments)for(const{solvedTracePathIndex:i,traceSegmentIndex:r}of t){const o=this.traceNetIslands[e][i].mspPairId;this.correctedTraceMap[o]=this.traceNetIslands[e][i]}}_step(){const e=this.overlappingTraceSegments.map((r,o)=>{const s=Math.floor(o/2)+1;return(o%2===0?-s:s)*this.SHIFT_DISTANCE}),t=(r,o)=>Math.abs(r-o)<1e-6,i=(r,o)=>!!r&&!!o&&t(r.x,o.x)&&t(r.y,o.y);this.overlappingTraceSegments.forEach((r,o)=>{const s=e[o],a=new Map;for(const c of r.pathsWithOverlap)a.has(c.solvedTracePathIndex)||a.set(c.solvedTracePathIndex,new Set),a.get(c.solvedTracePathIndex).add(c.traceSegmentIndex);for(const[c,l]of a){const u=this.traceNetIslands[r.connNetId][c],d=this.correctedTraceMap[u.mspPairId]??u,h=d.tracePath.map(b=>({...b})),f=Array.from(l).sort((b,x)=>b-x),m=new Set,y=new Set;for(const b of f){if(b<0||b>=h.length-1||b===0||b===h.length-2)continue;const x=h[b],w=h[b+1],T=Math.abs(x.x-w.x)<1e-6,N=Math.abs(x.y-w.y)<1e-6;!T&&!N||(T?(m.has(b)||(x.x+=s,m.add(b)),m.has(b+1)||(w.x+=s,m.add(b+1))):N&&(y.has(b)||(x.y+=s,y.add(b)),y.has(b+1)||(w.y+=s,y.add(b+1))))}const g=[];for(const b of h)(g.length===0||!i(g[g.length-1],b))&&g.push(b);this.correctedTraceMap[u.mspPairId]={...d,tracePath:g}}}),this.solved=!0}visualize(){const n={lines:[],points:[],rects:[],circles:[]};for(const e of this.overlappingTraceSegments)for(const{solvedTracePathIndex:t,traceSegmentIndex:i}of e.pathsWithOverlap){const r=this.traceNetIslands[e.connNetId][t],o=r.tracePath[i],s=r.tracePath[i+1];n.lines.push({points:[o,s],strokeColor:"red",strokeWidth:.006})}for(const e of Object.values(this.correctedTraceMap))n.lines.push({points:e.tracePath,strokeColor:"blue",strokeDash:"4 2",strokeWidth:.004});return n}},BUt=class extends vw{inputProblem;inputTracePaths;globalConnMap;traceNetIslands={};correctedTraceMap={};constructor(n){super(),this.inputProblem=n.inputProblem,this.inputTracePaths=n.inputTracePaths,this.globalConnMap=n.globalConnMap;for(const e of this.inputTracePaths){const{mspPairId:t}=e;this.correctedTraceMap[t]=e}this.traceNetIslands=this.computeTraceNetIslands()}getConstructorParams(){return{inputProblem:this.inputProblem,inputTracePaths:this.inputTracePaths,globalConnMap:this.globalConnMap}}computeTraceNetIslands(){const n={};for(const e of this.inputTracePaths){const t=this.correctedTraceMap[e.mspPairId]??e,i=t.globalConnNetId;n[i]||(n[i]=[]),n[i].push(t)}return n}findNextOverlapIssue(){const e=Object.keys(this.traceNetIslands);for(let t=0;t<e.length;t++)for(let i=t+1;i<e.length;i++){const r=e[t],o=e[i],s=this.traceNetIslands[r]||[],a=this.traceNetIslands[o]||[],c=[],l=[],u=new Set,d=new Set,h=(f,m,y,g)=>{const b=Math.min(f,m),x=Math.max(f,m),w=Math.min(y,g),T=Math.max(y,g);return Math.min(x,T)-Math.max(b,w)>1e-6};for(let f=0;f<s.length;f++){const y=s[f].tracePath;for(let g=0;g<y.length-1;g++){const b=y[g],x=y[g+1],w=Math.abs(b.x-x.x)<1e-6,T=Math.abs(b.y-x.y)<1e-6;if(!(!w&&!T))for(let N=0;N<a.length;N++){const k=a[N].tracePath;for(let M=0;M<k.length-1;M++){const I=k[M],C=k[M+1],$=Math.abs(I.x-C.x)<1e-6,P=Math.abs(I.y-C.y)<1e-6;if(!(!$&&!P)){if(w&&$){if(Math.abs(b.x-I.x)<1e-6&&h(b.y,x.y,I.y,C.y)){const H=`${f}:${g}`,G=`${N}:${M}`;u.has(H)||(c.push({solvedTracePathIndex:f,traceSegmentIndex:g}),u.add(H)),d.has(G)||(l.push({solvedTracePathIndex:N,traceSegmentIndex:M}),d.add(G))}}else if(T&&P&&Math.abs(b.y-I.y)<1e-6&&h(b.x,x.x,I.x,C.x)){const H=`${f}:${g}`,G=`${N}:${M}`;u.has(H)||(c.push({solvedTracePathIndex:f,traceSegmentIndex:g}),u.add(H)),d.has(G)||(l.push({solvedTracePathIndex:N,traceSegmentIndex:M}),d.add(G))}}}}}}if(c.length>0&&l.length>0)return{overlappingTraceSegments:[{connNetId:r,pathsWithOverlap:c},{connNetId:o,pathsWithOverlap:l}]}}return null}_step(){if(this.activeSubSolver?.solved){for(const[t,i]of Object.entries(this.activeSubSolver.correctedTraceMap))this.correctedTraceMap[t]=i;this.activeSubSolver=null,this.traceNetIslands=this.computeTraceNetIslands()}if(this.activeSubSolver){this.activeSubSolver.step();return}const n=this.findNextOverlapIssue();if(n===null){this.solved=!0;return}const{overlappingTraceSegments:e}=n;this.activeSubSolver=new FUt({overlappingTraceSegments:e,traceNetIslands:this.traceNetIslands})}visualize(){if(this.activeSubSolver)return this.activeSubSolver.visualize();const n=a4(this.inputProblem);for(const e of Object.values(this.correctedTraceMap))n.lines.push({points:e.tracePath,strokeColor:"purple",strokeWidth:.005});return n}},FIe=.4,BIe=.2;function UIe(n){return n==="y+"||n==="y-"?{width:BIe,height:FIe}:{width:FIe,height:BIe}}function $Ie(n,e,t,i){switch(e){case"x+":return{x:n.x+t/2,y:n.y};case"x-":return{x:n.x-t/2,y:n.y};case"y+":return{x:n.x,y:n.y+i/2};case"y-":return{x:n.x,y:n.y-i/2}}}function jIe(n,e,t){return{minX:n.x-e/2,minY:n.y-t/2,maxX:n.x+e/2,maxY:n.y+t/2}}function UUt(n,e,t,i=1e-9){const r=Math.abs(n.x-e.x)<i,o=Math.abs(n.y-e.y)<i;if(!r&&!o)return!1;if(r){const s=n.x;if(s<t.minX-i||s>t.maxX+i)return!1;const a=Math.min(n.y,e.y),c=Math.max(n.y,e.y);return Math.min(c,t.maxY)-Math.max(a,t.minY)>i}else{const s=n.y;if(s<t.minY-i||s>t.maxY+i)return!1;const a=Math.min(n.x,e.x),c=Math.max(n.x,e.x);return Math.min(c,t.maxX)-Math.max(a,t.minX)>i}}function HIe(n,e,t,i){for(const[r,o]of Object.entries(e)){const s=o.tracePath;for(let a=0;a<s.length-1;a++)if(!(r===t&&a===i)&&UUt(s[a],s[a+1],n))return!0}return!1}function VIe(n){let e=0;const t=n.tracePath;for(let i=0;i<t.length-1;i++)e+=Math.abs(t[i+1].x-t[i].x)+Math.abs(t[i+1].y-t[i].y);return e}function qIe(n){const{inputProblem:e,inputTraceMap:t,globalConnNetId:i,fallbackTrace:r,mspConnectionPairIds:o}=n,s=Object.fromEntries(e.chips.map(h=>[h.chipId,h]));let a=Object.values(t).filter(h=>h.globalConnNetId===i);if(o&&o.length>0){const h=new Set(o);a=a.filter(f=>f.mspConnectionPairIds.some(m=>h.has(m)))}const c=new Set;for(const h of a)c.add(h.pins[0].chipId),c.add(h.pins[1].chipId);let l=null,u=-1;for(const h of c){const m=s[h]?.pins?.length??0;m>u&&(u=m,l=h)}const d=l==null?[]:a.filter(h=>h.pins[0].chipId===l||h.pins[1].chipId===l);return d.length>0?d.reduce((h,f)=>VIe(h)>=VIe(f)?h:f):r}function $Ut(n,e){return[{x:n.x,y:n.y},{x:(n.x+e.x)/2,y:(n.y+e.y)/2},{x:e.x,y:e.y}]}function jUt(n){const{inputProblem:e,inputTraceMap:t,chipObstacleSpatialIndex:i,overlappingSameNetTraceGroup:r,availableOrientations:o}=n,s=r.portOnlyPinId;if(!s)return{placement:null,testedCandidates:[],error:"No portOnlyPinId provided"};let a=null;for(const h of e.chips){const f=h.pins.find(m=>m.pinId===s);if(f){a={x:f.x,y:f.y};break}}if(!a)return{placement:null,testedCandidates:[],error:`Port-only pin not found: ${s}`};const c=o.length>0?o:["x+","x-","y+","y-"],l={x:a.x,y:a.y},u=h=>h==="x+"?{x:1,y:0}:h==="x-"?{x:-1,y:0}:h==="y+"?{x:0,y:1}:{x:0,y:-1},d=[];for(const h of c){const{width:f,height:m}=UIe(h),y=$Ie(l,h,f,m),g=u(h),b=.001,x={x:y.x+g.x*b,y:y.y+g.y*b},w=jIe(x,f,m);if(i.getChipsInBounds(w).length>0){d.push({center:x,width:f,height:m,bounds:w,anchor:l,orientation:h,status:"chip-collision",hostSegIndex:-1});continue}if(HIe(w,t,"",-1)){d.push({center:x,width:f,height:m,bounds:w,anchor:l,orientation:h,status:"trace-collision",hostSegIndex:-1});continue}return d.push({center:x,width:f,height:m,bounds:w,anchor:l,orientation:h,status:"ok",hostSegIndex:-1}),{placement:{globalConnNetId:r.globalConnNetId,dcConnNetId:void 0,netId:r.netId,mspConnectionPairIds:[],pinIds:[s],orientation:h,anchorPoint:l,width:f,height:m,center:x},testedCandidates:d}}return{placement:null,testedCandidates:d,error:"Could not place net label at port without collisions"}}function HUt(n){const e=a4(n.inputProblem),t=n.overlappingSameNetTraceGroup.globalConnNetId,i=qIe({inputProblem:n.inputProblem,inputTraceMap:n.inputTraceMap,globalConnNetId:t,fallbackTrace:n.overlappingSameNetTraceGroup.overlappingTraces}),r=H2(t,.9),o=H2(t,.5);for(const s of Object.values(n.inputTraceMap)){if(s.globalConnNetId!==t)continue;const a=i?s.mspPairId===i.mspPairId:!1;e.lines.push({points:s.tracePath,strokeColor:a?r:o,strokeWidth:a?.006:.003,strokeDash:a?void 0:"4 2"})}for(const s of n.testedCandidates){const a=s.status==="ok"?"rgba(0, 180, 0, 0.25)":s.status==="chip-collision"?"rgba(220, 0, 0, 0.25)":s.status==="trace-collision"?"rgba(220, 140, 0, 0.25)":"rgba(120, 120, 120, 0.15)",c=s.status==="ok"?"green":s.status==="chip-collision"?"red":s.status==="trace-collision"?"orange":"gray";e.rects.push({center:{x:(s.bounds.minX+s.bounds.maxX)/2,y:(s.bounds.minY+s.bounds.maxY)/2},width:s.width,height:s.height,fill:a,strokeColor:c}),e.points.push({x:s.anchor.x,y:s.anchor.y,color:c})}if(n.netLabelPlacement){const s=n.netLabelPlacement;e.rects.push({center:s.center,width:s.width,height:s.height,fill:"rgba(0, 128, 255, 0.35)",strokeColor:"blue"}),e.points.push({x:s.anchorPoint.x,y:s.anchorPoint.y,color:"blue"})}return e}var GIe=class extends vw{inputProblem;inputTraceMap;overlappingSameNetTraceGroup;availableOrientations;chipObstacleSpatialIndex;netLabelPlacement=null;testedCandidates=[];constructor(n){super(),this.inputProblem=n.inputProblem,this.inputTraceMap=n.inputTraceMap,this.overlappingSameNetTraceGroup=n.overlappingSameNetTraceGroup,this.availableOrientations=n.availableOrientations,this.chipObstacleSpatialIndex=n.inputProblem._chipObstacleSpatialIndex??new OIe(n.inputProblem.chips)}_step(){if(this.netLabelPlacement){this.solved=!0;return}if(this.overlappingSameNetTraceGroup.portOnlyPinId){const d=jUt({inputProblem:this.inputProblem,inputTraceMap:this.inputTraceMap,chipObstacleSpatialIndex:this.chipObstacleSpatialIndex,overlappingSameNetTraceGroup:this.overlappingSameNetTraceGroup,availableOrientations:this.availableOrientations});if(this.testedCandidates.push(...d.testedCandidates),d.placement){this.netLabelPlacement=d.placement,this.solved=!0;return}this.failed=!0,this.error=d.error??"Could not place net label at port without collisions";return}const n=this.overlappingSameNetTraceGroup.globalConnNetId;let e=qIe({inputProblem:this.inputProblem,inputTraceMap:this.inputTraceMap,globalConnNetId:n,fallbackTrace:this.overlappingSameNetTraceGroup.overlappingTraces,mspConnectionPairIds:this.overlappingSameNetTraceGroup.mspConnectionPairIds});if(!e){this.failed=!0,this.error="No host trace found for net label placement";return}const t=new Set(this.overlappingSameNetTraceGroup.mspConnectionPairIds??[]),i=Object.values(this.inputTraceMap).filter(d=>d.globalConnNetId===n&&(t.size===0||d.mspConnectionPairIds.some(h=>t.has(h)))),r=this.availableOrientations.length===1?[e,...i.filter(d=>d.mspPairId!==e.mspPairId)]:[e],o=this.availableOrientations.length>0?this.availableOrientations:["x+","x-","y+","y-"],s=this.availableOrientations.length===1,a=(d,h)=>{switch(d){case"y+":return h.y;case"y-":return-h.y;case"x+":return h.x;case"x-":return-h.x}};let c=null,l=-1/0;const u=1e-6;for(const d of r){const h=d.tracePath.slice();for(let f=0;f<h.length-1;f++){const m=h[f],y=h[f+1],g=Math.abs(m.y-y.y)<u,b=Math.abs(m.x-y.x)<u;if(!g&&!b)continue;const x=g?["y+","y-"]:["x+","x-"],w=o.filter(N=>x.includes(N));if(w.length===0)continue;const T=$Ut(m,y);for(const N of T)for(const R of w){const{width:k,height:M}=UIe(R),I=$Ie(N,R,k,M),C=R==="x+"?{x:1,y:0}:R==="x-"?{x:-1,y:0}:R==="y+"?{x:0,y:1}:{x:0,y:-1},$=1e-4,P={x:I.x+C.x*$,y:I.y+C.y*$},H=jIe(P,k,M);if(this.chipObstacleSpatialIndex.getChipsInBounds(H).length>0){this.testedCandidates.push({center:P,width:k,height:M,bounds:H,anchor:N,orientation:R,status:"chip-collision",hostSegIndex:f});continue}if(HIe(H,this.inputTraceMap,d.mspPairId,f)){this.testedCandidates.push({center:P,width:k,height:M,bounds:H,anchor:N,orientation:R,status:"trace-collision",hostSegIndex:f});continue}if(this.testedCandidates.push({center:P,width:k,height:M,bounds:H,anchor:N,orientation:R,status:"ok",hostSegIndex:f}),s){const X=a(R,N);X>l+1e-9&&(l=X,c={anchor:N,orientation:R,width:k,height:M,center:I,hostSegIndex:f,dcConnNetId:d.dcConnNetId,mspPairId:d.mspPairId,pinIds:[d.pins[0].pinId,d.pins[1].pinId]});continue}this.netLabelPlacement={globalConnNetId:this.overlappingSameNetTraceGroup.globalConnNetId,dcConnNetId:d.dcConnNetId,netId:this.overlappingSameNetTraceGroup.netId,mspConnectionPairIds:[d.mspPairId],pinIds:[d.pins[0].pinId,d.pins[1].pinId],orientation:R,anchorPoint:N,width:k,height:M,center:I},this.solved=!0;return}}}if(s&&c){this.netLabelPlacement={globalConnNetId:this.overlappingSameNetTraceGroup.globalConnNetId,dcConnNetId:c.dcConnNetId,netId:this.overlappingSameNetTraceGroup.netId,mspConnectionPairIds:[c.mspPairId],pinIds:c.pinIds,orientation:c.orientation,anchorPoint:c.anchor,width:c.width,height:c.height,center:c.center},this.solved=!0;return}this.failed=!0,this.error="Could not place net label without collisions"}visualize(){return HUt(this)}},VUt=class extends vw{inputProblem;inputTraceMap;overlappingSameNetTraceGroups;queuedOverlappingSameNetTraceGroups;netLabelPlacements=[];currentGroup=null;triedAnyOrientationFallbackForCurrentGroup=!1;constructor(n){super(),this.inputProblem=n.inputProblem,this.inputTraceMap=n.inputTraceMap,this.overlappingSameNetTraceGroups=this.computeOverlappingSameNetTraceGroups(),this.queuedOverlappingSameNetTraceGroups=[...this.overlappingSameNetTraceGroups]}computeOverlappingSameNetTraceGroups(){const n={};for(const r of Object.values(this.inputTraceMap)){const o=r.globalConnNetId;n[o]||(n[o]=[]),n[o].push(r)}const{netConnMap:e}=PIe(this.inputProblem),t={};for(const r of this.inputProblem.directConnections)if(r.netId){const[o,s]=r.pinIds;t[o]=r.netId,t[s]=r.netId}for(const r of this.inputProblem.netConnections)for(const o of r.pinIds)t[o]=r.netId;const i=[];for(const r of Object.keys(e.netMap)){const o=e.getIdsConnectedToNet(r),s={};for(const c of o)s[c]=new Set;for(const c of n[r]??[]){const l=c.pins[0].pinId,u=c.pins[1].pinId;s[l]&&s[u]&&(s[l].add(u),s[u].add(l))}const a=new Set;for(const c of o){if(a.has(c))continue;const l=[c],u=new Set;for(a.add(c);l.length>0;){const h=l.pop();u.add(h);for(const f of s[h]??[])a.has(f)||(a.add(f),l.push(f))}const d=(n[r]??[]).filter(h=>u.has(h.pins[0].pinId)&&u.has(h.pins[1].pinId));if(d.length>0){const h=b=>{let x=0;const w=b.tracePath;for(let T=0;T<w.length-1;T++)x+=Math.abs(w[T+1].x-w[T].x)+Math.abs(w[T+1].y-w[T].y);return x};let f=d[0],m=h(f);for(let b=1;b<d.length;b++){const x=h(d[b]);x>m&&(f=d[b],m=x)}let y=d.find(b=>b.userNetId!=null)?.userNetId;if(!y){for(const b of u)if(t[b]){y=t[b];break}}const g=Array.from(new Set(d.flatMap(b=>b.mspConnectionPairIds??[b.mspPairId])));i.push({globalConnNetId:r,netId:y,overlappingTraces:f,mspConnectionPairIds:g})}else for(const h of u){const f=t[h];f&&i.push({globalConnNetId:r,netId:f,portOnlyPinId:h})}}}return i}_step(){if(this.activeSubSolver?.solved){this.netLabelPlacements.push(this.activeSubSolver.netLabelPlacement),this.activeSubSolver=null,this.currentGroup=null,this.triedAnyOrientationFallbackForCurrentGroup=!1;return}if(this.activeSubSolver?.failed){const t=["x+","x-","y+","y-"],i=this.activeSubSolver.availableOrientations,r=i.length===4&&t.every(o=>i.includes(o));if(!this.triedAnyOrientationFallbackForCurrentGroup&&!r&&this.currentGroup){this.triedAnyOrientationFallbackForCurrentGroup=!0,this.activeSubSolver=new GIe({inputProblem:this.inputProblem,inputTraceMap:this.inputTraceMap,overlappingSameNetTraceGroup:this.currentGroup,availableOrientations:t});return}this.failed=!0,this.error=this.activeSubSolver.error;return}if(this.activeSubSolver){this.activeSubSolver.step();return}const n=this.queuedOverlappingSameNetTraceGroups.shift();if(!n){this.solved=!0;return}const e=n.netId??n.globalConnNetId;this.currentGroup=n,this.triedAnyOrientationFallbackForCurrentGroup=!1,this.activeSubSolver=new GIe({inputProblem:this.inputProblem,inputTraceMap:this.inputTraceMap,overlappingSameNetTraceGroup:n,availableOrientations:this.inputProblem.availableNetLabelOrientations[e]??["x+","x-","y+","y-"]})}visualize(){if(this.activeSubSolver)return this.activeSubSolver.visualize();const n=a4(this.inputProblem);for(const e of Object.values(this.inputTraceMap))n.lines.push({points:e.tracePath,strokeColor:"purple",strokeWidth:.005});for(const e of this.netLabelPlacements)n.rects.push({center:e.center,width:e.width,height:e.height,fill:H2(e.globalConnNetId,.35),strokeColor:H2(e.globalConnNetId,.9)}),n.points.push({x:e.anchorPoint.x,y:e.anchorPoint.y,color:H2(e.globalConnNetId,.9)});return n}},qUt=n=>(function*(){for(let e=0;e<n.length;e++)for(let t=0;t<n.length;t++)e!==t&&(yield[n[e],n[t]])})();function GUt(n,e){if(n.maxY<=e.minY)return(n.maxY+e.minY)/2;if(e.maxY<=n.minY)return(e.maxY+n.minY)/2;const t=Math.max(n.minY,e.minY),i=Math.min(n.maxY,e.maxY);return(t+i)/2}function YUt(n,e){if(n.maxX<=e.minX)return(n.maxX+e.minX)/2;if(e.maxX<=n.minX)return(e.maxX+n.minX)/2;const t=Math.max(n.minX,e.minX),i=Math.min(n.maxX,e.maxX);return(t+i)/2}var XUt=n=>{const e={minX:1/0,maxX:-1/0,minY:1/0,maxY:-1/0};for(const t of n.chips){const i=pT(t);e.minX=Math.min(e.minX,i.minX),e.maxX=Math.max(e.maxX,i.maxX),e.minY=Math.min(e.minY,i.minY),e.maxY=Math.max(e.maxY,i.maxY)}return e},DB=.1,WUt=class extends vw{inputProblem;guidelines;chipPairsGenerator;usedXGuidelines;usedYGuidelines;constructor(n){super(),this.inputProblem=n.inputProblem;const e=XUt(this.inputProblem);this.guidelines=[{orientation:"horizontal",y:e.minY-DB,x:void 0},{orientation:"horizontal",y:e.maxY+DB,x:void 0},{orientation:"vertical",y:void 0,x:e.minX-DB},{orientation:"vertical",y:void 0,x:e.maxX+DB}],this.chipPairsGenerator=qUt(this.inputProblem.chips),this.usedXGuidelines=new Set,this.usedYGuidelines=new Set}getConstructorParams(){return{inputProblem:this.inputProblem}}_step(){const{done:n,value:e}=this.chipPairsGenerator.next();if(n){this.solved=!0;return}const[t,i]=e,r=pT(t),o=pT(i),s=GUt(r,o),a=YUt(r,o);this.usedYGuidelines.has(s)||(this.usedYGuidelines.add(s),this.guidelines.push({orientation:"horizontal",y:s,x:void 0})),this.usedXGuidelines.has(a)||(this.usedXGuidelines.add(a),this.guidelines.push({orientation:"vertical",y:void 0,x:a}))}visualize(){const n=a4(this.inputProblem),e=Vie(n),t=e.maxX-e.minX,i=e.maxY-e.minY;e.minX-=t*.3,e.maxX+=t*.3,e.minY-=i*.3,e.maxY+=i*.3;for(const r of this.guidelines)r.orientation==="horizontal"&&n.lines.push({points:[{x:e.minX,y:r.y},{x:e.maxX,y:r.y}],strokeColor:"rgba(0, 0, 0, 0.5)",strokeDash:"2 2"}),r.orientation==="vertical"&&n.lines.push({points:[{x:r.x,y:e.minY},{x:r.x,y:e.maxY}],strokeColor:"rgba(0, 0, 0, 0.5)",strokeDash:"2 2"});return n}},ZUt=n=>{for(const e of n.chips){const t=pT(e);for(const i of e.pins){if(!(i.x>t.minX&&i.x<t.maxX&&i.y>t.minY&&i.y<t.maxY))continue;const o=i.x-t.minX,s=t.maxX-i.x,a=i.y-t.minY,c=t.maxY-i.y,l=Math.min(o,s,a,c);l===o?i.x=t.minX:l===s?i.x=t.maxX:l===a?i.y=t.minY:i.y=t.maxY,i._facingDirection=void 0}}},KUt=n=>{for(const e of n.chips){const t=e.width/2,i=e.height/2;let r=0,o=0;for(const c of e.pins){const l=Math.abs(c.x-e.center.x),u=Math.abs(c.y-e.center.y);l>r&&(r=l),u>o&&(o=u)}const s=Math.max(t,r),a=Math.max(i,o);if(s>t||a>i){e.width=s*2,e.height=a*2;for(const c of e.pins)c._facingDirection=void 0}}};function LR(n,e,t,i={}){return{solverName:n,solverClass:e,getConstructorParams:t,onSolved:i.onSolved}}var QUt=class extends vw{mspConnectionPairSolver;guidelinesSolver;schematicTraceLinesSolver;traceOverlapShiftSolver;netLabelPlacementSolver;startTimeOfPhase;endTimeOfPhase;timeSpentOnPhase;firstIterationOfPhase;inputProblem;pipelineDef=[LR("mspConnectionPairSolver",gUt,()=>[{inputProblem:this.inputProblem}],{onSolved:n=>{}}),LR("guidelinesSolver",WUt,()=>[{inputProblem:this.inputProblem}],{onSolved:n=>{}}),LR("schematicTraceLinesSolver",zUt,()=>[{mspConnectionPairs:this.mspConnectionPairSolver.mspConnectionPairs,dcConnMap:this.mspConnectionPairSolver.dcConnMap,globalConnMap:this.mspConnectionPairSolver.globalConnMap,inputProblem:this.inputProblem,guidelines:this.guidelinesSolver.guidelines,chipMap:this.mspConnectionPairSolver.chipMap}],{onSolved:n=>{}}),LR("traceOverlapShiftSolver",BUt,()=>[{inputProblem:this.inputProblem,inputTracePaths:this.schematicTraceLinesSolver.solvedTracePaths,globalConnMap:this.mspConnectionPairSolver.globalConnMap}],{onSolved:n=>{}}),LR("netLabelPlacementSolver",VUt,()=>[{inputProblem:this.inputProblem,inputTraceMap:this.traceOverlapShiftSolver?.correctedTraceMap??Object.fromEntries(this.schematicTraceLinesSolver.solvedTracePaths.map(n=>[n.mspPairId,n]))}],{onSolved:n=>{}})];constructor(n){super(),this.inputProblem=this.cloneAndCorrectInputProblem(n),this.MAX_ITERATIONS=1e6,this.startTimeOfPhase={},this.endTimeOfPhase={},this.timeSpentOnPhase={},this.firstIterationOfPhase={}}getConstructorParams(){return this.inputProblem}currentPipelineStepIndex=0;cloneAndCorrectInputProblem(n){const e=structuredClone({...n,_chipObstacleSpatialIndex:void 0});return KUt(e),ZUt(e),e}_step(){const n=this.pipelineDef[this.currentPipelineStepIndex];if(!n){this.solved=!0;return}if(this.activeSubSolver){this.activeSubSolver.step(),this.activeSubSolver.solved?(this.endTimeOfPhase[n.solverName]=performance.now(),this.timeSpentOnPhase[n.solverName]=this.endTimeOfPhase[n.solverName]-this.startTimeOfPhase[n.solverName],n.onSolved?.(this),this.activeSubSolver=null,this.currentPipelineStepIndex++):this.activeSubSolver.failed&&(this.error=this.activeSubSolver?.error,this.failed=!0,this.activeSubSolver=null);return}const e=n.getConstructorParams(this);this.activeSubSolver=new n.solverClass(...e),this[n.solverName]=this.activeSubSolver,this.timeSpentOnPhase[n.solverName]=0,this.startTimeOfPhase[n.solverName]=performance.now(),this.firstIterationOfPhase[n.solverName]=this.iterations}solveUntilPhase(n){for(;this.getCurrentPhase().toLowerCase()!==n.toLowerCase();)this.step()}getCurrentPhase(){return this.pipelineDef[this.currentPipelineStepIndex]?.solverName??"none"}visualize(){if(!this.solved&&this.activeSubSolver)return this.activeSubSolver.visualize();const n=[a4(this.inputProblem),...this.pipelineDef.map(e=>this[e.solverName]?.visualize()).filter(Boolean).map((e,t)=>{for(const i of e.rects??[])i.step=t;for(const i of e.points??[])i.step=t;for(const i of e.circles??[])i.step=t;for(const i of e.texts??[])i.step=t;for(const i of e.lines??[])i.step=t;return e})];return n.length===1?n[0]:{points:n.flatMap(e=>e.points||[]),rects:n.flatMap(e=>e.rects||[]),lines:n.flatMap(e=>e.lines||[]),circles:n.flatMap(e=>e.circles||[]),texts:n.flatMap(e=>e.texts||[])}}preview(){return this.activeSubSolver?this.activeSubSolver.preview():super.preview()}};/*! Bundled license information:
4973
+ ${a._facingDirection??IIe(a,s)}`,x:a.x,y:a.y,color:H2(a.pinId,.8)})}for(const s of n.directConnections){const[a,c]=s.pinIds,l=o.get(a),u=o.get(c);r.lines.push({points:[{x:l.x,y:l.y},{x:u.x,y:u.y}],strokeColor:H2(s.netId??`${a}-${c}`,t)})}for(const s of n.netConnections){const a=s.pinIds.map(c=>o.get(c));for(let c=0;c<a.length-1;c++)for(let l=c+1;l<a.length;l++){const u=a[c],d=a[l];r.lines.push({points:[{x:u.x,y:u.y},{x:d.x,y:d.y}],strokeColor:H2(s.netId,t),strokeDash:"4 2"})}}return r},gUt=class extends vw{inputProblem;mspConnectionPairs=[];dcConnMap;globalConnMap;queuedDcNetIds;chipMap;maxMspPairDistance;pinMap;userNetIdByPinId;constructor({inputProblem:n}){super(),this.inputProblem=n,this.maxMspPairDistance=n.maxMspPairDistance??1;const{directConnMap:e,netConnMap:t}=PIe(n);this.dcConnMap=e,this.globalConnMap=t,this.pinMap={};for(const i of n.chips)for(const r of i.pins)this.pinMap[r.pinId]={...r,chipId:i.chipId};this.chipMap={};for(const i of n.chips)this.chipMap[i.chipId]=i;this.userNetIdByPinId={};for(const i of n.directConnections)if(i.netId){const[r,o]=i.pinIds;this.userNetIdByPinId[r]=i.netId,this.userNetIdByPinId[o]=i.netId}for(const i of n.netConnections)for(const r of i.pinIds)this.userNetIdByPinId[r]=i.netId;this.queuedDcNetIds=Object.keys(t.netMap)}getConstructorParams(){return{inputProblem:this.inputProblem}}_step(){if(this.queuedDcNetIds.length===0){this.solved=!0;return}const n=this.queuedDcNetIds.shift(),t=this.globalConnMap.getIdsConnectedToNet(n).filter(r=>!!this.pinMap[r]);if(t.length<=1)return;if(t.length===2){const[r,o]=t,s=this.pinMap[r],a=this.pinMap[o];if(Math.abs(s.x-a.x)+Math.abs(s.y-a.y)>this.maxMspPairDistance)return;const l=this.globalConnMap.getNetConnectedToId(r),u=this.userNetIdByPinId[r]??this.userNetIdByPinId[o];this.mspConnectionPairs.push({mspPairId:`${r}-${o}`,dcConnNetId:n,globalConnNetId:l,userNetId:u,pins:[s,a]});return}const i=yUt(t.map(r=>this.pinMap[r]).filter(Boolean),{maxDistance:this.maxMspPairDistance});for(const[r,o]of i){const s=this.globalConnMap.getNetConnectedToId(r),a=this.userNetIdByPinId[r]??this.userNetIdByPinId[o];this.mspConnectionPairs.push({mspPairId:`${r}-${o}`,dcConnNetId:n,globalConnNetId:s,userNetId:a,pins:[this.pinMap[r],this.pinMap[o]]})}}visualize(){const n=a4(this.inputProblem,{chipAlpha:.1,connectionAlpha:.1});for(const e of this.mspConnectionPairs)n.lines.push({points:[{x:e.pins[0].x,y:e.pins[0].y},{x:e.pins[1].x,y:e.pins[1].y}],strokeColor:H2(e.mspPairId,.75)});return n}},vUt=.6,xUt=1;Bie(eUt()),Bie(nUt()),Bie(_Ut(),1);function Vie(n){const e=[...n.points||[],...(n.lines||[]).flatMap(t=>t.points),...(n.rects||[]).flatMap(t=>{const i=t.width/2,r=t.height/2;return[{x:t.center.x-i,y:t.center.y-r},{x:t.center.x+i,y:t.center.y-r},{x:t.center.x-i,y:t.center.y+r},{x:t.center.x+i,y:t.center.y+r}]}),...(n.circles||[]).flatMap(t=>[{x:t.center.x-t.radius,y:t.center.y},{x:t.center.x+t.radius,y:t.center.y},{x:t.center.x,y:t.center.y-t.radius},{x:t.center.x,y:t.center.y+t.radius}]),...(n.texts||[]).flatMap(t=>{const i=t.fontSize??12,r=t.text.length*i*vUt,o=i*xUt,s=t.anchorSide??"center",a={top_left:{dx:0,dy:0},top_center:{dx:-r/2,dy:0},top_right:{dx:-r,dy:0},center_left:{dx:0,dy:-o/2},center:{dx:-r/2,dy:-o/2},center_right:{dx:-r,dy:-o/2},bottom_left:{dx:0,dy:-o},bottom_center:{dx:-r/2,dy:-o},bottom_right:{dx:-r,dy:-o}},{dx:c,dy:l}=a[s],u=t.x+c,d=t.y+l;return[{x:u,y:d},{x:u+r,y:d+o}]})];return e.length===0?{minX:-1,maxX:1,minY:-1,maxY:1}:e.reduce((t,i)=>({minX:Math.min(t.minX,i.x),maxX:Math.max(t.maxX,i.x),minY:Math.min(t.minY,i.y),maxY:Math.max(t.maxY,i.y)}),{minX:1/0,maxX:-1/0,minY:1/0,maxY:-1/0})}var bUt=class{constructor(){this.ids=[],this.values=[],this.length=0}clear(){this.length=0}push(e,t){let i=this.length++;for(;i>0;){const r=i-1>>1,o=this.values[r];if(t>=o)break;this.ids[i]=this.ids[r],this.values[i]=o,i=r}this.ids[i]=e,this.values[i]=t}pop(){if(this.length===0)return;const e=this.ids,t=this.values,i=e[0],r=--this.length;if(r>0){const o=e[r],s=t[r];let a=0;const c=r>>1;for(;a<c;){const l=(a<<1)+1,u=l+1,d=l+(+(u<r)&+(t[u]<t[l]));if(t[d]>=s)break;e[a]=e[d],t[a]=t[d],a=d}e[a]=o,t[a]=s}return i}peek(){return this.length>0?this.ids[0]:void 0}peekValue(){return this.length>0?this.values[0]:void 0}shrink(){this.ids.length=this.values.length=this.length}},NIe=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],qie=3,wUt=class Edt{static from(e,t=0){if(t%8!==0)throw new Error("byteOffset must be 8-byte aligned.");if(!e||e.byteLength===void 0||e.buffer)throw new Error("Data must be an instance of ArrayBuffer or SharedArrayBuffer.");const[i,r]=new Uint8Array(e,t+0,2);if(i!==251)throw new Error("Data does not appear to be in a Flatbush format.");const o=r>>4;if(o!==qie)throw new Error(`Got v${o} data when expected v${qie}.`);const s=NIe[r&15];if(!s)throw new Error("Unrecognized array type.");const[a]=new Uint16Array(e,t+2,1),[c]=new Uint32Array(e,t+4,1);return new Edt(c,a,s,void 0,e,t)}constructor(e,t=16,i=Float64Array,r=ArrayBuffer,o,s=0){if(e===void 0)throw new Error("Missing required argument: numItems.");if(isNaN(e)||e<=0)throw new Error(`Unexpected numItems value: ${e}.`);this.numItems=+e,this.nodeSize=Math.min(Math.max(+t,2),65535),this.byteOffset=s;let a=e,c=a;this._levelBounds=[a*4];do a=Math.ceil(a/this.nodeSize),c+=a,this._levelBounds.push(c*4);while(a!==1);this.ArrayType=i,this.IndexArrayType=c<16384?Uint16Array:Uint32Array;const l=NIe.indexOf(i),u=c*4*i.BYTES_PER_ELEMENT;if(l<0)throw new Error(`Unexpected typed array class: ${i}.`);if(o)this.data=o,this._boxes=new i(o,s+8,c*4),this._indices=new this.IndexArrayType(o,s+8+u,c),this._pos=c*4,this.minX=this._boxes[this._pos-4],this.minY=this._boxes[this._pos-3],this.maxX=this._boxes[this._pos-2],this.maxY=this._boxes[this._pos-1];else{const d=this.data=new r(8+u+c*this.IndexArrayType.BYTES_PER_ELEMENT);this._boxes=new i(d,8,c*4),this._indices=new this.IndexArrayType(d,8+u,c),this._pos=0,this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0,new Uint8Array(d,0,2).set([251,(qie<<4)+l]),new Uint16Array(d,2,1)[0]=t,new Uint32Array(d,4,1)[0]=e}this._queue=new bUt}add(e,t,i=e,r=t){const o=this._pos>>2,s=this._boxes;return this._indices[o]=o,s[this._pos++]=e,s[this._pos++]=t,s[this._pos++]=i,s[this._pos++]=r,e<this.minX&&(this.minX=e),t<this.minY&&(this.minY=t),i>this.maxX&&(this.maxX=i),r>this.maxY&&(this.maxY=r),o}finish(){if(this._pos>>2!==this.numItems)throw new Error(`Added ${this._pos>>2} items when expected ${this.numItems}.`);const e=this._boxes;if(this.numItems<=this.nodeSize){e[this._pos++]=this.minX,e[this._pos++]=this.minY,e[this._pos++]=this.maxX,e[this._pos++]=this.maxY;return}const t=this.maxX-this.minX||1,i=this.maxY-this.minY||1,r=new Uint32Array(this.numItems),o=65535;for(let s=0,a=0;s<this.numItems;s++){const c=e[a++],l=e[a++],u=e[a++],d=e[a++],h=Math.floor(o*((c+u)/2-this.minX)/t),f=Math.floor(o*((l+d)/2-this.minY)/i);r[s]=EUt(h,f)}Gie(r,e,this._indices,0,this.numItems-1,this.nodeSize);for(let s=0,a=0;s<this._levelBounds.length-1;s++){const c=this._levelBounds[s];for(;a<c;){const l=a;let u=e[a++],d=e[a++],h=e[a++],f=e[a++];for(let m=1;m<this.nodeSize&&a<c;m++)u=Math.min(u,e[a++]),d=Math.min(d,e[a++]),h=Math.max(h,e[a++]),f=Math.max(f,e[a++]);this._indices[this._pos>>2]=l,e[this._pos++]=u,e[this._pos++]=d,e[this._pos++]=h,e[this._pos++]=f}}}search(e,t,i,r,o){if(this._pos!==this._boxes.length)throw new Error("Data not yet indexed - call index.finish().");let s=this._boxes.length-4;const a=[],c=[];for(;s!==void 0;){const l=Math.min(s+this.nodeSize*4,kIe(s,this._levelBounds));for(let u=s;u<l;u+=4){const d=this._boxes[u];if(i<d)continue;const h=this._boxes[u+1];if(r<h)continue;const f=this._boxes[u+2];if(e>f)continue;const m=this._boxes[u+3];if(t>m)continue;const y=this._indices[u>>2]|0;s>=this.numItems*4?a.push(y):(o===void 0||o(y,d,h,f,m))&&c.push(y)}s=a.pop()}return c}neighbors(e,t,i=1/0,r=1/0,o){if(this._pos!==this._boxes.length)throw new Error("Data not yet indexed - call index.finish().");let s=this._boxes.length-4;const a=this._queue,c=[],l=r*r;e:for(;s!==void 0;){const u=Math.min(s+this.nodeSize*4,kIe(s,this._levelBounds));for(let d=s;d<u;d+=4){const h=this._indices[d>>2]|0,f=this._boxes[d],m=this._boxes[d+1],y=this._boxes[d+2],g=this._boxes[d+3],b=e<f?f-e:e>y?e-y:0,x=t<m?m-t:t>g?t-g:0,w=b*b+x*x;w>l||(s>=this.numItems*4?a.push(h<<1,w):(o===void 0||o(h))&&a.push((h<<1)+1,w))}for(;a.length&&a.peek()&1;)if(a.peekValue()>l||(c.push(a.pop()>>1),c.length===i))break e;s=a.length?a.pop()>>1:void 0}return a.clear(),c}};function kIe(n,e){let t=0,i=e.length-1;for(;t<i;){const r=t+i>>1;e[r]>n?i=r:t=r+1}return e[t]}function Gie(n,e,t,i,r,o){if(Math.floor(i/o)>=Math.floor(r/o))return;const s=n[i],a=n[i+r>>1],c=n[r];let l=c;const u=Math.max(s,a);c>u?l=u:u===s?l=Math.max(a,c):u===a&&(l=Math.max(s,c));let d=i-1,h=r+1;for(;;){do d++;while(n[d]<l);do h--;while(n[h]>l);if(d>=h)break;SUt(n,e,t,d,h)}Gie(n,e,t,i,h,o),Gie(n,e,t,h+1,r,o)}function SUt(n,e,t,i,r){const o=n[i];n[i]=n[r],n[r]=o;const s=4*i,a=4*r,c=e[s],l=e[s+1],u=e[s+2],d=e[s+3];e[s]=e[a],e[s+1]=e[a+1],e[s+2]=e[a+2],e[s+3]=e[a+3],e[a]=c,e[a+1]=l,e[a+2]=u,e[a+3]=d;const h=t[i];t[i]=t[r],t[r]=h}function EUt(n,e){let t=n^e,i=65535^t,r=65535^(n|e),o=n&(e^65535),s=t|i>>1,a=t>>1^t,c=r>>1^i&o>>1^r,l=t&r>>1^o>>1^o;t=s,i=a,r=c,o=l,s=t&t>>2^i&i>>2,a=t&i>>2^i&(t^i)>>2,c^=t&r>>2^i&o>>2,l^=i&r>>2^(t^i)&o>>2,t=s,i=a,r=c,o=l,s=t&t>>4^i&i>>4,a=t&i>>4^i&(t^i)>>4,c^=t&r>>4^i&o>>4,l^=i&r>>4^(t^i)&o>>4,t=s,i=a,r=c,o=l,c^=t&r>>8^i&o>>8,l^=i&r>>8^(t^i)&o>>8,t=c^c>>1,i=l^l>>1;let u=n^e,d=i|65535^(u|t);return u=(u|u<<8)&16711935,u=(u|u<<4)&252645135,u=(u|u<<2)&858993459,u=(u|u<<1)&1431655765,d=(d|d<<8)&16711935,d=(d|d<<4)&252645135,d=(d|d<<2)&858993459,d=(d|d<<1)&1431655765,(d<<1|u)>>>0}function pT(n){const e=n.width/2,t=n.height/2;return{minX:n.center.x-e,maxX:n.center.x+e,minY:n.center.y-t,maxY:n.center.y+t}}var OIe=class{chips;spatialIndex;spatialIndexIdToChip;constructor(n){this.chips=n.map(e=>({...e,bounds:pT(e),spatialIndexId:null})),this.spatialIndexIdToChip=new Map,this.spatialIndex=new wUt(n.length);for(const e of this.chips)e.spatialIndexId=this.spatialIndex.add(e.bounds.minX,e.bounds.minY,e.bounds.maxX,e.bounds.maxY),this.spatialIndexIdToChip.set(e.spatialIndexId,e);this.spatialIndex.finish()}getChipsInBounds(n){return this.spatialIndex.search(n.minX,n.minY,n.maxX,n.maxY).map(t=>this.spatialIndexIdToChip.get(t))}doesOrthogonalLineIntersectChip(n,e={}){const t=e.excludeChipIds??[],[i,r]=n,{x:o,y:s}=i,{x:a,y:c}=r;return this.getChipsInBounds({minX:Math.min(o,a),minY:Math.min(s,c),maxX:Math.max(o,a),maxY:Math.max(s,c)}).filter(u=>!t.includes(u.chipId)).length>0}},TUt=(n,e,t)=>{const i=[{x:n.x,y:n.y}],r=(n.x+e.x)/2,o=(n.y+e.y)/2,s={x:e.x,y:e.y};switch(e.facingDirection){case"x+":s.x+=t;break;case"x-":s.x-=t;break;case"y+":s.y+=t;break;case"y-":s.y-=t;break}const a=n.facingDirection??"none",c=e.facingDirection??"none",l=h=>{const f=i[i.length-1];(f.x!==h.x||f.y!==h.y)&&i.push(h)},u=Math.abs(n.y-e.y)<=Math.max(1e-6,t*.1),d=Math.abs(n.x-e.x)<=Math.max(1e-6,t*.1);if(a==="none"&&c==="none")l({x:r,y:n.y}),l({x:r,y:e.y});else if(a==="x+"&&c==="y+")n.x>e.x&&n.y<e.y?(l({x:n.x+t,y:n.y}),l({x:n.x+t,y:e.y+t}),l({x:e.x,y:e.y+t})):n.x<e.x&&n.y>e.y?l({x:e.x,y:n.y}):d?(l({x:n.x+t,y:n.y}),l({x:n.x+t,y:e.y+t}),l({x:e.x,y:e.y+t})):n.x<e.x?(l({x:r,y:n.y}),l({x:r,y:s.y}),l({x:e.x,y:s.y})):n.y<=e.y+t?(l({x:n.x+t,y:n.y}),l({x:n.x+t,y:n.y+t}),l({x:e.x,y:n.y+t}),l({x:e.x,y:e.y})):(l({x:n.x+t,y:n.y}),l({x:n.x+t,y:(n.y+e.y)/2}),l({x:e.x,y:(n.y+e.y)/2}));else if(a==="x+"&&c==="x+"&&!u){const h=Math.max(n.x+t,s.x);l({x:h,y:n.y}),l({x:h,y:e.y})}else if(a==="x+"&&c==="x+"&&u)l({x:n.x+t,y:n.y}),l({x:n.x+t,y:n.y+t}),l({x:e.x+t,y:n.y+t}),l({x:e.x+t,y:e.y});else if(a==="x+"&&c==="y-")if(d&&n.y<=e.y)l({x:n.x+t,y:n.y}),l({x:n.x+t,y:o}),l({x:e.x,y:o});else if(d&&n.y>e.y)l({x:n.x+t,y:n.y}),l({x:n.x+t,y:e.y-t}),l({x:e.x,y:e.y-t});else if(n.x<e.x&&n.y<e.y)l({x:e.x,y:n.y});else if(n.x>e.x&&n.y<e.y){const h=n.x+t;l({x:h,y:n.y}),l({x:h,y:o}),l({x:e.x,y:o})}else if(n.x>e.x&&n.y>e.y){const h=n.x+t;l({x:h,y:n.y}),l({x:h,y:s.y}),l({x:e.x,y:s.y})}else n.y===e.y?(l({x:n.x+t,y:n.y}),l({x:n.x+t,y:n.y-t}),l({x:e.x,y:n.y-t})):(l({x:r,y:n.y}),l({x:r,y:s.y}),l({x:e.x,y:s.y}));else if(a==="x+"&&c==="x-"&&n.x+t>=e.x-t&&e.y!==n.y){const h=n.x+t;l({x:h,y:n.y}),l({x:h,y:o}),l({x:s.x,y:o}),l({x:s.x,y:s.y})}else a==="x+"&&c==="x-"&&e.y===n.y&&e.x>n.x||(a==="x+"&&c==="x-"&&e.y===n.y?(l({x:n.x+t,y:n.y}),l({x:n.x+t,y:n.y+t}),l({x:e.x-t,y:n.y+t}),l({x:e.x-t,y:n.y})):(a==="x+"&&l({x:n.x+t,y:n.y}),l({x:r,y:i[i.length-1].y}),l({x:r,y:s.y}),l({x:s.x,y:s.y})));return l({x:e.x,y:e.y}),i},MUt=(n,e,t={})=>{let i=n,r=e,o=!1;(i.x>r.x||i.x===r.x&&i.y>r.y)&&(o=!0,[i,r]=[r,i]);const s=i.facingDirection==="x-",a=i.facingDirection==="y-",c=x=>{const w=s?i.x-(x.x-i.x):x.x,T=a?i.y-(x.y-i.y):x.y;let N=x.facingDirection;return s&&(N==="x+"?N="x-":N==="x-"&&(N="x+")),a&&(N==="y+"?N="y-":N==="y-"&&(N="y+")),{x:w,y:T,facingDirection:N}},l=(x,w)=>{const T=x.x-w.x,N=x.y-w.y,R=w.x+N,k=w.y-T;let M=x.facingDirection;switch(M){case"x+":M="y-";break;case"y-":M="x-";break;case"x-":M="y+";break;case"y+":M="x+";break}return{x:R,y:k,facingDirection:M}},u=(x,w)=>{const T=x.x-w.x,N=x.y-w.y;return{x:w.x-N,y:w.y+T}},d=s||a?c(i):i,h=s||a?c(r):r;let f=d,m=h,y=!1;d.facingDirection==="y+"&&(y=!0,f={...d,facingDirection:"x+"},m=l(h,d));const g=t?.overshoot??.1*Math.max(Math.abs(f.x-m.x),Math.abs(f.y-m.y));let b=TUt(f,m,g);return y&&(b=b.map(x=>u(x,f))),(s||a)&&(b=b.map(({x,y:w})=>({x:s?i.x-(x-i.x):x,y:a?i.y-(w-i.y):w}))),o?b.reverse():b},CUt=n=>{switch(n){case"x+":return{x:1,y:0};case"x-":return{x:-1,y:0};case"y+":return{x:0,y:1};case"y-":return{x:0,y:-1}}throw new Error(`Invalid facing direction: ${n}`)},fT=1e-6,TM=1e-6,AUt=(n,e)=>Math.abs(n.x-e.x)<fT||Math.abs(n.y-e.y)<fT,RUt=(n,e)=>{const t=Math.abs(n.x-e.x),i=Math.abs(n.y-e.y);if(t<fT&&i>=fT)return"vertical";if(i<fT&&t>=fT)return"horizontal";throw new Error("Non-orthogonal or degenerate segment detected.")},DIe=n=>{if(n.length<2)throw new Error("Polyline must have at least two points.");for(let e=0;e<n.length-1;e++){const t=n[e],i=n[e+1];if(!AUt(t,i))throw new Error("Polyline contains a non-orthogonal segment.");if(Math.abs(t.x-i.x)+Math.abs(t.y-i.y)<TM)throw new Error("Polyline contains a near-zero length segment.")}},PUt=(n,e=fT)=>{const t=n.slice().sort((r,o)=>r-o),i=[];for(const r of t)(i.length===0||Math.abs(r-i[i.length-1])>e)&&i.push(r);return i},LIe=(n,e=9)=>n.map(t=>`${t.x.toFixed(e)},${t.y.toFixed(e)}`).join("|"),IUt=(n,e=TM)=>{if(n.length===0)return[];const t=[{...n[0]}];for(let i=1;i<n.length;i++){const r=n[i],o=t[t.length-1];Math.abs(r.x-o.x)+Math.abs(r.y-o.y)>e&&t.push({...r})}return t},NUt=(n,e,t)=>{const i=[];for(const r of e)n==="x"?r.orientation==="vertical"&&typeof r.x=="number"&&i.push(r.x):r.orientation==="horizontal"&&typeof r.y=="number"&&i.push(r.y);return i.push(t),PUt(i)},kUt=(n,e,t)=>RUt(e,t)==="horizontal"?{axis:"y",facing:n.y<=e.y?"y+":"y-"}:{axis:"x",facing:n.x<=e.x?"x+":"x-"},OUt=n=>n.length===0?[[]]:n.reduce((e,t)=>e.flatMap(i=>t.map(r=>[...i,r])),[[]]),DUt=({baseElbow:n,guidelines:e})=>{const t=IUt(n);DIe(t);const i=t.length;if(i-1<5)return{elbowVariants:[t.map(m=>({...m}))],movableSegments:[]};const o=2,s=i-4,a=[],c=[],l=[],u=[];for(let m=o;m<=s;m++){const y=t[m-1],g=t[m],b=t[m+1],x=t[m+2],{axis:w,facing:T}=kUt(y,g,b);a.push({start:{...g},end:{...b},freedom:T,dir:CUt(T)}),c.push(m),l.push(w);const N=w==="x"?g.x:g.y,k=NUt(w,e,N).filter(M=>{if(w==="y"){const I=Math.abs(y.y-M),C=Math.abs(x.y-M);return I>TM&&C>TM}else{const I=Math.abs(y.x-M),C=Math.abs(x.x-M);return I>TM&&C>TM}});u.push(k)}const d=OUt(u),h=new Set,f=[];{const m=LIe(t);h.add(m),f.push(t.map(y=>({...y})))}for(const m of d){if(m.length===0)continue;const y=t.map(b=>({...b}));for(let b=0;b<c.length;b++){const x=c[b],w=l[b],T=m[b];typeof T!="number"||Number.isNaN(T)||(w==="y"?(y[x]={...y[x],y:T},y[x+1]={...y[x+1],y:T}):(y[x]={...y[x],x:T},y[x+1]={...y[x+1],x:T}))}try{DIe(y)}catch{continue}const g=LIe(y);h.has(g)||(h.add(g),f.push(y))}return{elbowVariants:f,movableSegments:a}},zIe=({guidelines:n,graphics:e})=>{const t=Vie(e),i=t.maxX-t.minX,r=t.maxY-t.minY;t.minX-=i*.3,t.maxX+=i*.3,t.minY-=r*.3,t.maxY+=r*.3;for(const o of n)o.orientation==="horizontal"&&e.lines.push({points:[{x:t.minX,y:o.y},{x:t.maxX,y:o.y}],strokeColor:"rgba(0, 0, 0, 0.5)",strokeDash:"2 2"}),o.orientation==="vertical"&&e.lines.push({points:[{x:o.x,y:t.minY},{x:o.x,y:t.maxY}],strokeColor:"rgba(0, 0, 0, 0.5)",strokeDash:"2 2"});return e},LUt=class extends vw{pins;inputProblem;guidelines;chipMap;movableSegments;baseElbow;allCandidatePaths;queuedCandidatePaths;chipObstacleSpatialIndex;solvedTracePath=null;constructor(n){super(),this.pins=n.pins,this.inputProblem=n.inputProblem,this.guidelines=n.guidelines,this.chipMap=n.chipMap,this.chipObstacleSpatialIndex=this.inputProblem._chipObstacleSpatialIndex||new OIe(this.inputProblem.chips),this.inputProblem._chipObstacleSpatialIndex||(this.inputProblem._chipObstacleSpatialIndex=this.chipObstacleSpatialIndex);for(const s of this.pins)if(!s._facingDirection){const a=this.chipMap[s.chipId];s._facingDirection=IIe(s,a)}const[e,t]=this.pins;this.baseElbow=MUt({x:e.x,y:e.y,facingDirection:e._facingDirection},{x:t.x,y:t.y,facingDirection:t._facingDirection},{overshoot:.2});const{elbowVariants:i,movableSegments:r}=DUt({baseElbow:this.baseElbow,guidelines:this.guidelines});this.movableSegments=r;const o=s=>{let a=0;for(let c=0;c<s.length-1;c++){const l=s[c+1].x-s[c].x,u=s[c+1].y-s[c].y;a+=Math.sqrt(l*l+u*u)}return a};this.allCandidatePaths=[this.baseElbow,...i],this.queuedCandidatePaths=[...this.allCandidatePaths].sort((s,a)=>o(s)-o(a))}getConstructorParams(){return{chipMap:this.chipMap,pins:this.pins,guidelines:this.guidelines,inputProblem:this.inputProblem}}_step(){if(this.queuedCandidatePaths.length===0){this.failed=!0,this.error="No more candidate elbows, everything had collisions";return}const n=this.queuedCandidatePaths.shift();for(let e=0;e<n.length-1;e++){const t=n[e],i=n[e+1];let r=[];const o=this.pins.some(l=>Math.abs(l.x-t.x)<1e-10&&Math.abs(l.y-t.y)<1e-10),s=this.pins.some(l=>Math.abs(l.x-i.x)<1e-10&&Math.abs(l.y-i.y)<1e-10);if(o){const l=this.pins.find(u=>Math.abs(u.x-t.x)<1e-10&&Math.abs(u.y-t.y)<1e-10);if(l){const u=pT(this.chipMap[l.chipId]),d=i.x-t.x,h=i.y-t.y,f=1e-9,m=Math.abs(t.x-u.minX)<1e-9,y=Math.abs(t.x-u.maxX)<1e-9,g=Math.abs(t.y-u.minY)<1e-9,b=Math.abs(t.y-u.maxY)<1e-9;if(m&&d>f||y&&d<-f||g&&h>f||b&&h<-f)return;r.includes(l.chipId)||r.push(l.chipId)}}if(s){const l=this.pins.find(u=>Math.abs(u.x-i.x)<1e-10&&Math.abs(u.y-i.y)<1e-10);if(l){const u=pT(this.chipMap[l.chipId]),d=t.x-i.x,h=t.y-i.y,f=1e-9,m=Math.abs(i.x-u.minX)<1e-9,y=Math.abs(i.x-u.maxX)<1e-9,g=Math.abs(i.y-u.minY)<1e-9,b=Math.abs(i.y-u.maxY)<1e-9;if(m&&d>f||y&&d<-f||g&&h>f||b&&h<-f)return;r.includes(l.chipId)||r.push(l.chipId)}}const a={excludeChipIds:r};if(this.chipObstacleSpatialIndex.doesOrthogonalLineIntersectChip([t,i],a))return}this.solvedTracePath=n,this.solved=!0}visualize(){const n=a4(this.inputProblem,{chipAlpha:.1,connectionAlpha:.1}),e=Vie(n),t=e.maxX-e.minX,i=e.maxY-e.minY;zIe({guidelines:this.guidelines,graphics:n});for(const{start:r,end:o,dir:s}of this.movableSegments){const a={x:(r.x+o.x)/2,y:(r.y+o.y)/2},c=Math.sqrt((r.x-o.x)**2+(r.y-o.y)**2);n.lines.push({points:[r,a,o],strokeColor:"rgba(0,0,255,0.5)",strokeDash:"2 2"}),n.lines.push({points:[a,{x:a.x+s.x*c*.1,y:a.y+s.y*c*.1}],strokeColor:"rgba(0,0,255,0.5)",strokeDash:"2 2"})}if(!this.solvedTracePath){this.queuedCandidatePaths.length>0&&n.lines.push({points:this.queuedCandidatePaths[0],strokeColor:"orange",strokeWidth:t*.005});for(let r=1;r<this.queuedCandidatePaths.length;r++){const o=this.queuedCandidatePaths[r],s=r/this.queuedCandidatePaths.length;n.lines.push({points:o.map(a=>({x:a.x+s*t*.005,y:a.y+s*i*.005})),strokeColor:H2(`${o.reduce((a,c)=>`${a},${c.x},${c.y}`,"")}`,.5),strokeDash:"8 8"})}}return this.solvedTracePath&&n.lines.push({points:this.solvedTracePath,strokeColor:"green"}),n}},zUt=class extends vw{inputProblem;guidelines;mspConnectionPairs;dcConnMap;globalConnMap;queuedConnectionPairs;chipMap;currentConnectionPair=null;solvedTracePaths=[];failedConnectionPairs=[];constructor(n){super(),this.inputProblem=n.inputProblem,this.mspConnectionPairs=n.mspConnectionPairs,this.dcConnMap=n.dcConnMap,this.globalConnMap=n.globalConnMap,this.guidelines=n.guidelines,this.chipMap=n.chipMap,this.queuedConnectionPairs=[...this.mspConnectionPairs]}getConstructorParams(){return{inputProblem:this.inputProblem,chipMap:this.chipMap,mspConnectionPairs:this.mspConnectionPairs,dcConnMap:this.dcConnMap,globalConnMap:this.globalConnMap,guidelines:this.guidelines}}_step(){if(this.activeSubSolver?.solved&&(this.solvedTracePaths.push({...this.currentConnectionPair,tracePath:this.activeSubSolver.solvedTracePath,mspConnectionPairIds:[this.currentConnectionPair.mspPairId],pinIds:[this.currentConnectionPair.pins[0].pinId,this.currentConnectionPair.pins[1].pinId]}),this.activeSubSolver=null,this.currentConnectionPair=null),this.activeSubSolver?.failed&&(this.currentConnectionPair&&this.failedConnectionPairs.push({...this.currentConnectionPair,error:this.activeSubSolver.error||void 0}),this.activeSubSolver=null,this.currentConnectionPair=null),this.activeSubSolver){this.activeSubSolver.step();return}const n=this.queuedConnectionPairs.shift();if(this.currentConnectionPair=n,!n){this.solved=!0;return}const{pins:e}=n;this.activeSubSolver=new LUt({inputProblem:this.inputProblem,pins:e,chipMap:this.chipMap,guidelines:this.guidelines})}visualize(){if(this.activeSubSolver)return this.activeSubSolver.visualize();const n=a4(this.inputProblem,{chipAlpha:.1,connectionAlpha:.1});zIe({guidelines:this.guidelines,graphics:n});for(const{mspPairId:e,tracePath:t}of this.solvedTracePaths)n.lines.push({points:t,strokeWidth:.005,strokeColor:"green"});for(const e of this.failedConnectionPairs)n.lines.push({points:[{x:e.pins[0].x,y:e.pins[0].y},{x:e.pins[1].x,y:e.pins[1].y}],strokeColor:"red",strokeDash:"4 2",strokeWidth:.004});return n}},FUt=class extends vw{overlappingTraceSegments;traceNetIslands;SHIFT_DISTANCE=.1;correctedTraceMap={};constructor(n){super(),this.overlappingTraceSegments=n.overlappingTraceSegments,this.traceNetIslands=n.traceNetIslands;for(const{connNetId:e,pathsWithOverlap:t}of this.overlappingTraceSegments)for(const{solvedTracePathIndex:i,traceSegmentIndex:r}of t){const o=this.traceNetIslands[e][i].mspPairId;this.correctedTraceMap[o]=this.traceNetIslands[e][i]}}_step(){const e=this.overlappingTraceSegments.map((r,o)=>{const s=Math.floor(o/2)+1;return(o%2===0?-s:s)*this.SHIFT_DISTANCE}),t=(r,o)=>Math.abs(r-o)<1e-6,i=(r,o)=>!!r&&!!o&&t(r.x,o.x)&&t(r.y,o.y);this.overlappingTraceSegments.forEach((r,o)=>{const s=e[o],a=new Map;for(const c of r.pathsWithOverlap)a.has(c.solvedTracePathIndex)||a.set(c.solvedTracePathIndex,new Set),a.get(c.solvedTracePathIndex).add(c.traceSegmentIndex);for(const[c,l]of a){const u=this.traceNetIslands[r.connNetId][c],d=this.correctedTraceMap[u.mspPairId]??u,h=d.tracePath.map(b=>({...b})),f=Array.from(l).sort((b,x)=>b-x),m=new Set,y=new Set;for(const b of f){if(b<0||b>=h.length-1||b===0||b===h.length-2)continue;const x=h[b],w=h[b+1],T=Math.abs(x.x-w.x)<1e-6,N=Math.abs(x.y-w.y)<1e-6;!T&&!N||(T?(m.has(b)||(x.x+=s,m.add(b)),m.has(b+1)||(w.x+=s,m.add(b+1))):N&&(y.has(b)||(x.y+=s,y.add(b)),y.has(b+1)||(w.y+=s,y.add(b+1))))}const g=[];for(const b of h)(g.length===0||!i(g[g.length-1],b))&&g.push(b);this.correctedTraceMap[u.mspPairId]={...d,tracePath:g}}}),this.solved=!0}visualize(){const n={lines:[],points:[],rects:[],circles:[]};for(const e of this.overlappingTraceSegments)for(const{solvedTracePathIndex:t,traceSegmentIndex:i}of e.pathsWithOverlap){const r=this.traceNetIslands[e.connNetId][t],o=r.tracePath[i],s=r.tracePath[i+1];n.lines.push({points:[o,s],strokeColor:"red",strokeWidth:.006})}for(const e of Object.values(this.correctedTraceMap))n.lines.push({points:e.tracePath,strokeColor:"blue",strokeDash:"4 2",strokeWidth:.004});return n}},BUt=class extends vw{inputProblem;inputTracePaths;globalConnMap;traceNetIslands={};correctedTraceMap={};constructor(n){super(),this.inputProblem=n.inputProblem,this.inputTracePaths=n.inputTracePaths,this.globalConnMap=n.globalConnMap;for(const e of this.inputTracePaths){const{mspPairId:t}=e;this.correctedTraceMap[t]=e}this.traceNetIslands=this.computeTraceNetIslands()}getConstructorParams(){return{inputProblem:this.inputProblem,inputTracePaths:this.inputTracePaths,globalConnMap:this.globalConnMap}}computeTraceNetIslands(){const n={};for(const e of this.inputTracePaths){const t=this.correctedTraceMap[e.mspPairId]??e,i=t.globalConnNetId;n[i]||(n[i]=[]),n[i].push(t)}return n}findNextOverlapIssue(){const e=Object.keys(this.traceNetIslands);for(let t=0;t<e.length;t++)for(let i=t+1;i<e.length;i++){const r=e[t],o=e[i],s=this.traceNetIslands[r]||[],a=this.traceNetIslands[o]||[],c=[],l=[],u=new Set,d=new Set,h=(f,m,y,g)=>{const b=Math.min(f,m),x=Math.max(f,m),w=Math.min(y,g),T=Math.max(y,g);return Math.min(x,T)-Math.max(b,w)>1e-6};for(let f=0;f<s.length;f++){const y=s[f].tracePath;for(let g=0;g<y.length-1;g++){const b=y[g],x=y[g+1],w=Math.abs(b.x-x.x)<1e-6,T=Math.abs(b.y-x.y)<1e-6;if(!(!w&&!T))for(let N=0;N<a.length;N++){const k=a[N].tracePath;for(let M=0;M<k.length-1;M++){const I=k[M],C=k[M+1],$=Math.abs(I.x-C.x)<1e-6,P=Math.abs(I.y-C.y)<1e-6;if(!(!$&&!P)){if(w&&$){if(Math.abs(b.x-I.x)<1e-6&&h(b.y,x.y,I.y,C.y)){const H=`${f}:${g}`,G=`${N}:${M}`;u.has(H)||(c.push({solvedTracePathIndex:f,traceSegmentIndex:g}),u.add(H)),d.has(G)||(l.push({solvedTracePathIndex:N,traceSegmentIndex:M}),d.add(G))}}else if(T&&P&&Math.abs(b.y-I.y)<1e-6&&h(b.x,x.x,I.x,C.x)){const H=`${f}:${g}`,G=`${N}:${M}`;u.has(H)||(c.push({solvedTracePathIndex:f,traceSegmentIndex:g}),u.add(H)),d.has(G)||(l.push({solvedTracePathIndex:N,traceSegmentIndex:M}),d.add(G))}}}}}}if(c.length>0&&l.length>0)return{overlappingTraceSegments:[{connNetId:r,pathsWithOverlap:c},{connNetId:o,pathsWithOverlap:l}]}}return null}_step(){if(this.activeSubSolver?.solved){for(const[t,i]of Object.entries(this.activeSubSolver.correctedTraceMap))this.correctedTraceMap[t]=i;this.activeSubSolver=null,this.traceNetIslands=this.computeTraceNetIslands()}if(this.activeSubSolver){this.activeSubSolver.step();return}const n=this.findNextOverlapIssue();if(n===null){this.solved=!0;return}const{overlappingTraceSegments:e}=n;this.activeSubSolver=new FUt({overlappingTraceSegments:e,traceNetIslands:this.traceNetIslands})}visualize(){if(this.activeSubSolver)return this.activeSubSolver.visualize();const n=a4(this.inputProblem);for(const e of Object.values(this.correctedTraceMap))n.lines.push({points:e.tracePath,strokeColor:"purple",strokeWidth:.005});return n}},FIe=.45,BIe=.2;function UIe(n){return n==="y+"||n==="y-"?{width:BIe,height:FIe}:{width:FIe,height:BIe}}function $Ie(n,e,t,i){switch(e){case"x+":return{x:n.x+t/2,y:n.y};case"x-":return{x:n.x-t/2,y:n.y};case"y+":return{x:n.x,y:n.y+i/2};case"y-":return{x:n.x,y:n.y-i/2}}}function jIe(n,e,t){return{minX:n.x-e/2,minY:n.y-t/2,maxX:n.x+e/2,maxY:n.y+t/2}}function UUt(n,e,t,i=1e-9){const r=Math.abs(n.x-e.x)<i,o=Math.abs(n.y-e.y)<i;if(!r&&!o)return!1;if(r){const s=n.x;if(s<t.minX-i||s>t.maxX+i)return!1;const a=Math.min(n.y,e.y),c=Math.max(n.y,e.y);return Math.min(c,t.maxY)-Math.max(a,t.minY)>i}else{const s=n.y;if(s<t.minY-i||s>t.maxY+i)return!1;const a=Math.min(n.x,e.x),c=Math.max(n.x,e.x);return Math.min(c,t.maxX)-Math.max(a,t.minX)>i}}function HIe(n,e,t,i){for(const[r,o]of Object.entries(e)){const s=o.tracePath;for(let a=0;a<s.length-1;a++)if(!(r===t&&a===i)&&UUt(s[a],s[a+1],n))return!0}return!1}function VIe(n){let e=0;const t=n.tracePath;for(let i=0;i<t.length-1;i++)e+=Math.abs(t[i+1].x-t[i].x)+Math.abs(t[i+1].y-t[i].y);return e}function qIe(n){const{inputProblem:e,inputTraceMap:t,globalConnNetId:i,fallbackTrace:r,mspConnectionPairIds:o}=n,s=Object.fromEntries(e.chips.map(h=>[h.chipId,h]));let a=Object.values(t).filter(h=>h.globalConnNetId===i);if(o&&o.length>0){const h=new Set(o);a=a.filter(f=>f.mspConnectionPairIds.some(m=>h.has(m)))}const c=new Set;for(const h of a)c.add(h.pins[0].chipId),c.add(h.pins[1].chipId);let l=null,u=-1;for(const h of c){const m=s[h]?.pins?.length??0;m>u&&(u=m,l=h)}const d=l==null?[]:a.filter(h=>h.pins[0].chipId===l||h.pins[1].chipId===l);return d.length>0?d.reduce((h,f)=>VIe(h)>=VIe(f)?h:f):r}function $Ut(n,e){return[{x:n.x,y:n.y},{x:(n.x+e.x)/2,y:(n.y+e.y)/2},{x:e.x,y:e.y}]}function jUt(n){const{inputProblem:e,inputTraceMap:t,chipObstacleSpatialIndex:i,overlappingSameNetTraceGroup:r,availableOrientations:o}=n,s=r.portOnlyPinId;if(!s)return{placement:null,testedCandidates:[],error:"No portOnlyPinId provided"};let a=null;for(const h of e.chips){const f=h.pins.find(m=>m.pinId===s);if(f){a={x:f.x,y:f.y};break}}if(!a)return{placement:null,testedCandidates:[],error:`Port-only pin not found: ${s}`};const c=o.length>0?o:["x+","x-","y+","y-"],l={x:a.x,y:a.y},u=h=>h==="x+"?{x:1,y:0}:h==="x-"?{x:-1,y:0}:h==="y+"?{x:0,y:1}:{x:0,y:-1},d=[];for(const h of c){const{width:f,height:m}=UIe(h),y=$Ie(l,h,f,m),g=u(h),b=.001,x={x:y.x+g.x*b,y:y.y+g.y*b},w=jIe(x,f,m);if(i.getChipsInBounds(w).length>0){d.push({center:x,width:f,height:m,bounds:w,anchor:l,orientation:h,status:"chip-collision",hostSegIndex:-1});continue}if(HIe(w,t,"",-1)){d.push({center:x,width:f,height:m,bounds:w,anchor:l,orientation:h,status:"trace-collision",hostSegIndex:-1});continue}return d.push({center:x,width:f,height:m,bounds:w,anchor:l,orientation:h,status:"ok",hostSegIndex:-1}),{placement:{globalConnNetId:r.globalConnNetId,dcConnNetId:void 0,netId:r.netId,mspConnectionPairIds:[],pinIds:[s],orientation:h,anchorPoint:l,width:f,height:m,center:x},testedCandidates:d}}return{placement:null,testedCandidates:d,error:"Could not place net label at port without collisions"}}function HUt(n){const e=a4(n.inputProblem),t=n.overlappingSameNetTraceGroup.globalConnNetId,i=qIe({inputProblem:n.inputProblem,inputTraceMap:n.inputTraceMap,globalConnNetId:t,fallbackTrace:n.overlappingSameNetTraceGroup.overlappingTraces}),r=H2(t,.9),o=H2(t,.5);for(const s of Object.values(n.inputTraceMap)){if(s.globalConnNetId!==t)continue;const a=i?s.mspPairId===i.mspPairId:!1;e.lines.push({points:s.tracePath,strokeColor:a?r:o,strokeWidth:a?.006:.003,strokeDash:a?void 0:"4 2"})}for(const s of n.testedCandidates){const a=s.status==="ok"?"rgba(0, 180, 0, 0.25)":s.status==="chip-collision"?"rgba(220, 0, 0, 0.25)":s.status==="trace-collision"?"rgba(220, 140, 0, 0.25)":"rgba(120, 120, 120, 0.15)",c=s.status==="ok"?"green":s.status==="chip-collision"?"red":s.status==="trace-collision"?"orange":"gray";e.rects.push({center:{x:(s.bounds.minX+s.bounds.maxX)/2,y:(s.bounds.minY+s.bounds.maxY)/2},width:s.width,height:s.height,fill:a,strokeColor:c}),e.points.push({x:s.anchor.x,y:s.anchor.y,color:c})}if(n.netLabelPlacement){const s=n.netLabelPlacement;e.rects.push({center:s.center,width:s.width,height:s.height,fill:"rgba(0, 128, 255, 0.35)",strokeColor:"blue"}),e.points.push({x:s.anchorPoint.x,y:s.anchorPoint.y,color:"blue"})}return e}var GIe=class extends vw{inputProblem;inputTraceMap;overlappingSameNetTraceGroup;availableOrientations;chipObstacleSpatialIndex;netLabelPlacement=null;testedCandidates=[];constructor(n){super(),this.inputProblem=n.inputProblem,this.inputTraceMap=n.inputTraceMap,this.overlappingSameNetTraceGroup=n.overlappingSameNetTraceGroup,this.availableOrientations=n.availableOrientations,this.chipObstacleSpatialIndex=n.inputProblem._chipObstacleSpatialIndex??new OIe(n.inputProblem.chips)}_step(){if(this.netLabelPlacement){this.solved=!0;return}if(this.overlappingSameNetTraceGroup.portOnlyPinId){const d=jUt({inputProblem:this.inputProblem,inputTraceMap:this.inputTraceMap,chipObstacleSpatialIndex:this.chipObstacleSpatialIndex,overlappingSameNetTraceGroup:this.overlappingSameNetTraceGroup,availableOrientations:this.availableOrientations});if(this.testedCandidates.push(...d.testedCandidates),d.placement){this.netLabelPlacement=d.placement,this.solved=!0;return}this.failed=!0,this.error=d.error??"Could not place net label at port without collisions";return}const n=this.overlappingSameNetTraceGroup.globalConnNetId;let e=qIe({inputProblem:this.inputProblem,inputTraceMap:this.inputTraceMap,globalConnNetId:n,fallbackTrace:this.overlappingSameNetTraceGroup.overlappingTraces,mspConnectionPairIds:this.overlappingSameNetTraceGroup.mspConnectionPairIds});if(!e){this.failed=!0,this.error="No host trace found for net label placement";return}const t=new Set(this.overlappingSameNetTraceGroup.mspConnectionPairIds??[]),i=Object.values(this.inputTraceMap).filter(d=>d.globalConnNetId===n&&(t.size===0||d.mspConnectionPairIds.some(h=>t.has(h)))),r=this.availableOrientations.length===1?[e,...i.filter(d=>d.mspPairId!==e.mspPairId)]:[e],o=this.availableOrientations.length>0?this.availableOrientations:["x+","x-","y+","y-"],s=this.availableOrientations.length===1,a=(d,h)=>{switch(d){case"y+":return h.y;case"y-":return-h.y;case"x+":return h.x;case"x-":return-h.x}};let c=null,l=-1/0;const u=1e-6;for(const d of r){const h=d.tracePath.slice();for(let f=0;f<h.length-1;f++){const m=h[f],y=h[f+1],g=Math.abs(m.y-y.y)<u,b=Math.abs(m.x-y.x)<u;if(!g&&!b)continue;const x=g?["y+","y-"]:["x+","x-"],w=o.filter(N=>x.includes(N));if(w.length===0)continue;const T=$Ut(m,y);for(const N of T)for(const R of w){const{width:k,height:M}=UIe(R),I=$Ie(N,R,k,M),C=R==="x+"?{x:1,y:0}:R==="x-"?{x:-1,y:0}:R==="y+"?{x:0,y:1}:{x:0,y:-1},$=1e-4,P={x:I.x+C.x*$,y:I.y+C.y*$},H=jIe(P,k,M);if(this.chipObstacleSpatialIndex.getChipsInBounds(H).length>0){this.testedCandidates.push({center:P,width:k,height:M,bounds:H,anchor:N,orientation:R,status:"chip-collision",hostSegIndex:f});continue}if(HIe(H,this.inputTraceMap,d.mspPairId,f)){this.testedCandidates.push({center:P,width:k,height:M,bounds:H,anchor:N,orientation:R,status:"trace-collision",hostSegIndex:f});continue}if(this.testedCandidates.push({center:P,width:k,height:M,bounds:H,anchor:N,orientation:R,status:"ok",hostSegIndex:f}),s){const X=a(R,N);X>l+1e-9&&(l=X,c={anchor:N,orientation:R,width:k,height:M,center:I,hostSegIndex:f,dcConnNetId:d.dcConnNetId,mspPairId:d.mspPairId,pinIds:[d.pins[0].pinId,d.pins[1].pinId]});continue}this.netLabelPlacement={globalConnNetId:this.overlappingSameNetTraceGroup.globalConnNetId,dcConnNetId:d.dcConnNetId,netId:this.overlappingSameNetTraceGroup.netId,mspConnectionPairIds:[d.mspPairId],pinIds:[d.pins[0].pinId,d.pins[1].pinId],orientation:R,anchorPoint:N,width:k,height:M,center:I},this.solved=!0;return}}}if(s&&c){this.netLabelPlacement={globalConnNetId:this.overlappingSameNetTraceGroup.globalConnNetId,dcConnNetId:c.dcConnNetId,netId:this.overlappingSameNetTraceGroup.netId,mspConnectionPairIds:[c.mspPairId],pinIds:c.pinIds,orientation:c.orientation,anchorPoint:c.anchor,width:c.width,height:c.height,center:c.center},this.solved=!0;return}this.failed=!0,this.error="Could not place net label without collisions"}visualize(){return HUt(this)}},VUt=class extends vw{inputProblem;inputTraceMap;overlappingSameNetTraceGroups;queuedOverlappingSameNetTraceGroups;netLabelPlacements=[];currentGroup=null;triedAnyOrientationFallbackForCurrentGroup=!1;constructor(n){super(),this.inputProblem=n.inputProblem,this.inputTraceMap=n.inputTraceMap,this.overlappingSameNetTraceGroups=this.computeOverlappingSameNetTraceGroups(),this.queuedOverlappingSameNetTraceGroups=[...this.overlappingSameNetTraceGroups]}computeOverlappingSameNetTraceGroups(){const n={};for(const r of Object.values(this.inputTraceMap)){const o=r.globalConnNetId;n[o]||(n[o]=[]),n[o].push(r)}const{netConnMap:e}=PIe(this.inputProblem),t={};for(const r of this.inputProblem.directConnections)if(r.netId){const[o,s]=r.pinIds;t[o]=r.netId,t[s]=r.netId}for(const r of this.inputProblem.netConnections)for(const o of r.pinIds)t[o]=r.netId;const i=[];for(const r of Object.keys(e.netMap)){const o=e.getIdsConnectedToNet(r),s={};for(const c of o)s[c]=new Set;for(const c of n[r]??[]){const l=c.pins[0].pinId,u=c.pins[1].pinId;s[l]&&s[u]&&(s[l].add(u),s[u].add(l))}const a=new Set;for(const c of o){if(a.has(c))continue;const l=[c],u=new Set;for(a.add(c);l.length>0;){const h=l.pop();u.add(h);for(const f of s[h]??[])a.has(f)||(a.add(f),l.push(f))}const d=(n[r]??[]).filter(h=>u.has(h.pins[0].pinId)&&u.has(h.pins[1].pinId));if(d.length>0){const h=b=>{let x=0;const w=b.tracePath;for(let T=0;T<w.length-1;T++)x+=Math.abs(w[T+1].x-w[T].x)+Math.abs(w[T+1].y-w[T].y);return x};let f=d[0],m=h(f);for(let b=1;b<d.length;b++){const x=h(d[b]);x>m&&(f=d[b],m=x)}let y=d.find(b=>b.userNetId!=null)?.userNetId;if(!y){for(const b of u)if(t[b]){y=t[b];break}}const g=Array.from(new Set(d.flatMap(b=>b.mspConnectionPairIds??[b.mspPairId])));i.push({globalConnNetId:r,netId:y,overlappingTraces:f,mspConnectionPairIds:g})}else for(const h of u){const f=t[h];f&&i.push({globalConnNetId:r,netId:f,portOnlyPinId:h})}}}return i}_step(){if(this.activeSubSolver?.solved){this.netLabelPlacements.push(this.activeSubSolver.netLabelPlacement),this.activeSubSolver=null,this.currentGroup=null,this.triedAnyOrientationFallbackForCurrentGroup=!1;return}if(this.activeSubSolver?.failed){const t=["x+","x-","y+","y-"],i=this.activeSubSolver.availableOrientations,r=i.length===4&&t.every(o=>i.includes(o));if(!this.triedAnyOrientationFallbackForCurrentGroup&&!r&&this.currentGroup){this.triedAnyOrientationFallbackForCurrentGroup=!0,this.activeSubSolver=new GIe({inputProblem:this.inputProblem,inputTraceMap:this.inputTraceMap,overlappingSameNetTraceGroup:this.currentGroup,availableOrientations:t});return}this.failed=!0,this.error=this.activeSubSolver.error;return}if(this.activeSubSolver){this.activeSubSolver.step();return}const n=this.queuedOverlappingSameNetTraceGroups.shift();if(!n){this.solved=!0;return}const e=n.netId??n.globalConnNetId;this.currentGroup=n,this.triedAnyOrientationFallbackForCurrentGroup=!1,this.activeSubSolver=new GIe({inputProblem:this.inputProblem,inputTraceMap:this.inputTraceMap,overlappingSameNetTraceGroup:n,availableOrientations:this.inputProblem.availableNetLabelOrientations[e]??["x+","x-","y+","y-"]})}visualize(){if(this.activeSubSolver)return this.activeSubSolver.visualize();const n=a4(this.inputProblem);for(const e of Object.values(this.inputTraceMap))n.lines.push({points:e.tracePath,strokeColor:"purple",strokeWidth:.005});for(const e of this.netLabelPlacements)n.rects.push({center:e.center,width:e.width,height:e.height,fill:H2(e.globalConnNetId,.35),strokeColor:H2(e.globalConnNetId,.9)}),n.points.push({x:e.anchorPoint.x,y:e.anchorPoint.y,color:H2(e.globalConnNetId,.9)});return n}},qUt=n=>(function*(){for(let e=0;e<n.length;e++)for(let t=0;t<n.length;t++)e!==t&&(yield[n[e],n[t]])})();function GUt(n,e){if(n.maxY<=e.minY)return(n.maxY+e.minY)/2;if(e.maxY<=n.minY)return(e.maxY+n.minY)/2;const t=Math.max(n.minY,e.minY),i=Math.min(n.maxY,e.maxY);return(t+i)/2}function YUt(n,e){if(n.maxX<=e.minX)return(n.maxX+e.minX)/2;if(e.maxX<=n.minX)return(e.maxX+n.minX)/2;const t=Math.max(n.minX,e.minX),i=Math.min(n.maxX,e.maxX);return(t+i)/2}var XUt=n=>{const e={minX:1/0,maxX:-1/0,minY:1/0,maxY:-1/0};for(const t of n.chips){const i=pT(t);e.minX=Math.min(e.minX,i.minX),e.maxX=Math.max(e.maxX,i.maxX),e.minY=Math.min(e.minY,i.minY),e.maxY=Math.max(e.maxY,i.maxY)}return e},DB=.1,WUt=class extends vw{inputProblem;guidelines;chipPairsGenerator;usedXGuidelines;usedYGuidelines;constructor(n){super(),this.inputProblem=n.inputProblem;const e=XUt(this.inputProblem);this.guidelines=[{orientation:"horizontal",y:e.minY-DB,x:void 0},{orientation:"horizontal",y:e.maxY+DB,x:void 0},{orientation:"vertical",y:void 0,x:e.minX-DB},{orientation:"vertical",y:void 0,x:e.maxX+DB}],this.chipPairsGenerator=qUt(this.inputProblem.chips),this.usedXGuidelines=new Set,this.usedYGuidelines=new Set}getConstructorParams(){return{inputProblem:this.inputProblem}}_step(){const{done:n,value:e}=this.chipPairsGenerator.next();if(n){this.solved=!0;return}const[t,i]=e,r=pT(t),o=pT(i),s=GUt(r,o),a=YUt(r,o);this.usedYGuidelines.has(s)||(this.usedYGuidelines.add(s),this.guidelines.push({orientation:"horizontal",y:s,x:void 0})),this.usedXGuidelines.has(a)||(this.usedXGuidelines.add(a),this.guidelines.push({orientation:"vertical",y:void 0,x:a}))}visualize(){const n=a4(this.inputProblem),e=Vie(n),t=e.maxX-e.minX,i=e.maxY-e.minY;e.minX-=t*.3,e.maxX+=t*.3,e.minY-=i*.3,e.maxY+=i*.3;for(const r of this.guidelines)r.orientation==="horizontal"&&n.lines.push({points:[{x:e.minX,y:r.y},{x:e.maxX,y:r.y}],strokeColor:"rgba(0, 0, 0, 0.5)",strokeDash:"2 2"}),r.orientation==="vertical"&&n.lines.push({points:[{x:r.x,y:e.minY},{x:r.x,y:e.maxY}],strokeColor:"rgba(0, 0, 0, 0.5)",strokeDash:"2 2"});return n}},ZUt=n=>{for(const e of n.chips){const t=pT(e);for(const i of e.pins){if(!(i.x>t.minX&&i.x<t.maxX&&i.y>t.minY&&i.y<t.maxY))continue;const o=i.x-t.minX,s=t.maxX-i.x,a=i.y-t.minY,c=t.maxY-i.y,l=Math.min(o,s,a,c);l===o?i.x=t.minX:l===s?i.x=t.maxX:l===a?i.y=t.minY:i.y=t.maxY,i._facingDirection=void 0}}},KUt=n=>{for(const e of n.chips){const t=e.width/2,i=e.height/2;let r=0,o=0;for(const c of e.pins){const l=Math.abs(c.x-e.center.x),u=Math.abs(c.y-e.center.y);l>r&&(r=l),u>o&&(o=u)}const s=Math.max(t,r),a=Math.max(i,o);if(s>t||a>i){e.width=s*2,e.height=a*2;for(const c of e.pins)c._facingDirection=void 0}}};function LR(n,e,t,i={}){return{solverName:n,solverClass:e,getConstructorParams:t,onSolved:i.onSolved}}var QUt=class extends vw{mspConnectionPairSolver;guidelinesSolver;schematicTraceLinesSolver;traceOverlapShiftSolver;netLabelPlacementSolver;startTimeOfPhase;endTimeOfPhase;timeSpentOnPhase;firstIterationOfPhase;inputProblem;pipelineDef=[LR("mspConnectionPairSolver",gUt,()=>[{inputProblem:this.inputProblem}],{onSolved:n=>{}}),LR("guidelinesSolver",WUt,()=>[{inputProblem:this.inputProblem}],{onSolved:n=>{}}),LR("schematicTraceLinesSolver",zUt,()=>[{mspConnectionPairs:this.mspConnectionPairSolver.mspConnectionPairs,dcConnMap:this.mspConnectionPairSolver.dcConnMap,globalConnMap:this.mspConnectionPairSolver.globalConnMap,inputProblem:this.inputProblem,guidelines:this.guidelinesSolver.guidelines,chipMap:this.mspConnectionPairSolver.chipMap}],{onSolved:n=>{}}),LR("traceOverlapShiftSolver",BUt,()=>[{inputProblem:this.inputProblem,inputTracePaths:this.schematicTraceLinesSolver.solvedTracePaths,globalConnMap:this.mspConnectionPairSolver.globalConnMap}],{onSolved:n=>{}}),LR("netLabelPlacementSolver",VUt,()=>[{inputProblem:this.inputProblem,inputTraceMap:this.traceOverlapShiftSolver?.correctedTraceMap??Object.fromEntries(this.schematicTraceLinesSolver.solvedTracePaths.map(n=>[n.mspPairId,n]))}],{onSolved:n=>{}})];constructor(n){super(),this.inputProblem=this.cloneAndCorrectInputProblem(n),this.MAX_ITERATIONS=1e6,this.startTimeOfPhase={},this.endTimeOfPhase={},this.timeSpentOnPhase={},this.firstIterationOfPhase={}}getConstructorParams(){return this.inputProblem}currentPipelineStepIndex=0;cloneAndCorrectInputProblem(n){const e=structuredClone({...n,_chipObstacleSpatialIndex:void 0});return KUt(e),ZUt(e),e}_step(){const n=this.pipelineDef[this.currentPipelineStepIndex];if(!n){this.solved=!0;return}if(this.activeSubSolver){this.activeSubSolver.step(),this.activeSubSolver.solved?(this.endTimeOfPhase[n.solverName]=performance.now(),this.timeSpentOnPhase[n.solverName]=this.endTimeOfPhase[n.solverName]-this.startTimeOfPhase[n.solverName],n.onSolved?.(this),this.activeSubSolver=null,this.currentPipelineStepIndex++):this.activeSubSolver.failed&&(this.error=this.activeSubSolver?.error,this.failed=!0,this.activeSubSolver=null);return}const e=n.getConstructorParams(this);this.activeSubSolver=new n.solverClass(...e),this[n.solverName]=this.activeSubSolver,this.timeSpentOnPhase[n.solverName]=0,this.startTimeOfPhase[n.solverName]=performance.now(),this.firstIterationOfPhase[n.solverName]=this.iterations}solveUntilPhase(n){for(;this.getCurrentPhase().toLowerCase()!==n.toLowerCase();)this.step()}getCurrentPhase(){return this.pipelineDef[this.currentPipelineStepIndex]?.solverName??"none"}visualize(){if(!this.solved&&this.activeSubSolver)return this.activeSubSolver.visualize();const n=[a4(this.inputProblem),...this.pipelineDef.map(e=>this[e.solverName]?.visualize()).filter(Boolean).map((e,t)=>{for(const i of e.rects??[])i.step=t;for(const i of e.points??[])i.step=t;for(const i of e.circles??[])i.step=t;for(const i of e.texts??[])i.step=t;for(const i of e.lines??[])i.step=t;return e})];return n.length===1?n[0]:{points:n.flatMap(e=>e.points||[]),rects:n.flatMap(e=>e.rects||[]),lines:n.flatMap(e=>e.lines||[]),circles:n.flatMap(e=>e.circles||[]),texts:n.flatMap(e=>e.texts||[])}}preview(){return this.activeSubSolver?this.activeSubSolver.preview():super.preview()}};/*! Bundled license information:
4974
4974
 
4975
4975
  is-buffer/index.js:
4976
4976
  (*!
@@ -5598,7 +5598,7 @@ $1`).replace(/>(\s*)(?=<!--\s*\/)/g,"> ")}}}),TZe={};Vgn(TZe,{all_layers:()=>dme
5598
5598
  * Copyright (c) 2013-2015, 2017, Jon Schlinkert.
5599
5599
  * Released under the MIT License.
5600
5600
  *)
5601
- */const dbn=({containerClassName:n,...e})=>{const t=Ee.useRef(null),[i,r]=Ee.useState(620);return Ee.useLayoutEffect(()=>{const o=()=>{if(t.current){const a=t.current.clientHeight,c=window.innerHeight;r(Math.min(Math.max(a,620),c))}};o();const s=new ResizeObserver(o);return t.current&&s.observe(t.current),window.addEventListener("resize",o),()=>{s.disconnect(),window.removeEventListener("resize",o)}},[]),_e.jsx("div",{ref:t,className:n||"rf-w-full rf-h-full",children:_e.jsx(ubn,{...e,height:i})})},hbn='*,: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.17 | 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-10{z-index:10}.rf-z-50{z-index:50}.rf-z-\\[100\\]{z-index:100}.rf-order-1{order:1}.rf-order-2{order:2}.rf-order-3{order:3}.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-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-8{margin-bottom:2rem}.rf-ml-1{margin-left:.25rem}.rf-ml-2{margin-left:.5rem}.rf-ml-auto{margin-left:auto}.rf-mr-1{margin-right:.25rem}.rf-mr-2{margin-right:.5rem}.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-square{aspect-ratio:1/1}.rf-aspect-video{aspect-ratio:16/9}.rf-size-14{height:3.5rem;width:3.5rem}.rf-size-4{height:1rem;width:1rem}.\\!rf-h-2{height:.5rem!important}.\\!rf-h-2\\.5{height:.625rem!important}.\\!rf-h-3{height:.75rem!important}.\\!rf-h-full{height:100%!important}.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-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-\\[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-32{max-height:8rem}.rf-max-h-96{max-height:24rem}.rf-max-h-\\[200px\\]{max-height:200px}.rf-max-h-\\[300px\\]{max-height:300px}.rf-max-h-\\[500px\\]{max-height:500px}.rf-max-h-\\[90vh\\]{max-height:90vh}.rf-max-h-full{max-height:100%}.rf-min-h-0{min-height:0}.rf-min-h-\\[200px\\]{min-height:200px}.rf-min-h-\\[300px\\]{min-height:300px}.rf-min-h-\\[620px\\]{min-height:620px}.rf-min-h-\\[calc\\(100vh-240px\\)\\]{min-height:calc(100vh - 240px)}.\\!rf-w-2{width:.5rem!important}.\\!rf-w-2\\.5{width:.625rem!important}.rf-w-1{width:.25rem}.rf-w-1\\/2{width:50%}.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-72{width:18rem}.rf-w-8{width:2rem}.rf-w-9{width:2.25rem}.rf-w-96{width:24rem}.rf-w-\\[95\\%\\]{width:95%}.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-\\[148px\\]{min-width:148px}.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-\\[660px\\]{max-width:660px!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-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-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-y-1{--tw-translate-y:-0.25rem}.rf-translate-x-\\[-50\\%\\]{--tw-translate-x:-50%}.rf-translate-x-\\[-50\\%\\],.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-translate-y-\\[-50\\%\\]{--tw-translate-y:-50%}.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-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-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-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-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-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-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}.rf-truncate,.rf-whitespace-nowrap{white-space:nowrap}.rf-whitespace-pre-wrap{white-space:pre-wrap}.rf-break-words{overflow-wrap:break-word}.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-sm{border-radius:calc(var(--radius) - 4px)}.rf-rounded-xl{border-radius:.75rem}.rf-border{border-width:1px}.rf-border-2{border-width:2px}.rf-border-b{border-bottom-width:1px}.rf-border-t{border-top-width:1px}.rf-border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/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-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-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-200{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity,1))}.rf-border-primary{border-color:hsl(var(--primary))}.rf-border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/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-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-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-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-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/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-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-popover{background-color:hsl(var(--popover))}.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-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/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-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-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-opacity-50{--tw-bg-opacity:0.5}.rf-fill-current{fill:currentColor}.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-2{padding-left:.5rem;padding-right:.5rem}.rf-px-3{padding-left:.75rem;padding-right:.75rem}.rf-px-4{padding-left:1rem;padding-right:1rem}.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-2{padding-bottom:.5rem}.rf-pb-3{padding-bottom:.75rem}.rf-pb-4{padding-bottom:1rem}.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-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-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.rf-text-2xl{font-size:1.5rem;line-height:2rem}.rf-text-3xl{font-size:1.875rem;line-height:2.25rem}.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-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-5{line-height:1.25rem}.rf-leading-none{line-height:1}.rf-leading-relaxed{line-height:1.625}.rf-leading-tight{line-height:1.25}.rf-tracking-wide{letter-spacing:.025em}.rf-tracking-widest{letter-spacing:.1em}.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-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-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-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-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-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-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-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-opacity-0{opacity:0}.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-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-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.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-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-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-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-200{animation-duration:.2s}.rf-ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.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-border-blue-300:hover{--tw-border-opacity:1;border-color:rgb(147 197 253/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-red-500\\/90:hover{background-color:rgba(239,68,68,.9)}.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-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/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}.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-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-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-opacity-50:disabled{opacity:.5}.rf-group\\/bar:hover .group-hover\\/bar\\:rf-opacity-100{opacity:1}.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-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-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-inline{display:inline}.sm\\:rf-hidden{display:none}.sm\\:rf-w-auto{width: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-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-px-4{padding-left:1rem;padding-right:1rem}.sm\\:rf-text-left{text-align:left}.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-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}.\\[\\&\\>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}',pbn=()=>{Ee.useEffect(()=>{if(document.querySelector('style[data-styles="tscircuit-runframe"]'))return;const e=document.createElement("style");e.setAttribute("data-styles","tscircuit-runframe"),e.textContent=hbn,document.head.appendChild(e)},[])},fbn=n=>{Ee.useEffect(()=>(n?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[n])},CQe=n=>`hsl(${e2.indexOf(n)*137.5%360}, 70%, 50%)`,mbn=({phaseTimings:n})=>{if(!n)return null;const e=Object.values(n).reduce((t,i)=>t+i,0);return _e.jsxs("div",{className:"rf-space-y-2 rf-w-full rf-px-4",children:[_e.jsx("div",{className:"rf-relative rf-h-8 rf-flex rf-rounded-sm",children:e2.map(t=>{const i=n[t]||0,r=i/e*100;return _e.jsx("div",{className:"rf-group/bar rf-relative rf-overflow-visible",style:{width:`${r}%`,backgroundColor:CQe(t)},children:_e.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:[t,": ",i.toFixed(1),"ms"]})},t)})}),_e.jsxs("div",{className:"rf-text-xs rf-text-gray-500",children:["Total: ",e.toFixed(2),"ms"]})]})},_bn=({renderLog:n})=>{const[e,t]=Ee.useState("chronological");if(!n)return _e.jsx("div",{className:"rf-p-4 rf-bg-gray-100 rf-rounded-md",children:"No render log, make sure this tab is open when you render (TODO add a rerender button here)"});const i=Object.entries(n?.phaseTimings??{});e==="chronological"?i.sort((o,s)=>e2.indexOf(o[0])-e2.indexOf(s[0])):i.sort((o,s)=>s[1]-o[1]);const r=i.reduce((o,[s,a])=>o+a,0);return _e.jsxs("div",{className:"rf-bg-white",children:[_e.jsxs("div",{className:"rf-flex rf-justify-between rf-items-center",children:[_e.jsx("div",{children:"Render Logs"}),_e.jsxs("div",{className:"rf-mb-4 rf-pr-2 rf-flex rf-text-xs rf-items-center",children:[_e.jsx("div",{className:"rf-mr-2",children:"Sort by:"}),_e.jsxs("select",{value:e,onChange:o=>t(o.target.value),className:"rf-px-2 rf-py-1 rf-border rf-rounded rf-text-xs",children:[_e.jsx("option",{value:"chronological",children:"Phase Order"}),_e.jsx("option",{value:"longest",children:"Duration"})]})]})]}),_e.jsx(mbn,{phaseTimings:n.phaseTimings}),_e.jsxs("table",{className:"rf-w-full rf-text-xs",children:[_e.jsx("thead",{children:_e.jsxs("tr",{children:[_e.jsx("th",{className:"rf-text-left rf-p-2",children:"Phase Order"}),_e.jsx("th",{className:"rf-text-left rf-p-2",children:"Phase"}),_e.jsx("th",{className:"rf-text-left rf-p-2",children:"Duration (ms)"})]})}),_e.jsx("tbody",{children:i.map(([o,s])=>_e.jsxs("tr",{children:[_e.jsx("td",{className:"rf-p-2",children:e2.indexOf(o)}),_e.jsx("td",{className:"rf-p-2",children:o}),_e.jsx("td",{className:"rf-p-2",children:_e.jsx("div",{className:"rf-w-8",children:_e.jsx("div",{className:"rf-h-2 rf-rounded-sm",style:{backgroundColor:CQe(o),width:`${s/r*100}%`}})})}),_e.jsx("td",{className:"rf-p-2",children:_e.jsxs("div",{className:"rf-flex w-full",children:[_e.jsxs("span",{className:"rf-flex-grow",children:[s,"ms"]}),_e.jsxs("span",{className:"rf-text-gray-500 rf-pr-2",children:[(s/r*100).toFixed(1),"%"]})]})})]},o))})]})]})},AQe=({errorMessage:n,errorStack:e,circuitJsonErrors:t})=>{Ee.useEffect(()=>{if(n){const i=new Error(n);e&&(i.stack=e);try{cO.captureException(i)}catch{}}},[n,e]),Ee.useEffect(()=>{if(t&&t.length>0)for(const i of t){const r=new Error(i.message||"Circuit JSON Error");i.stack&&(r.stack=i.stack);try{cO.captureException(r,{error_type:i.type})}catch{}}},[t])},ybn="0.0.866";function gbn(n,e){const[t,i]=Ee.useState(()=>{try{const r=window.localStorage.getItem(n);return r?JSON.parse(r):e}catch(r){return console.error("Error reading from localStorage:",r),e}});return Ee.useEffect(()=>{try{window.localStorage.setItem(n,JSON.stringify(t))}catch(r){console.error("Error writing to localStorage:",r)}},[n,t]),[t,i]}const _me={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1},yme=new Map,Mj=n=>{const e=yme.get(n);return e?Object.fromEntries(Object.entries(e.stores).map(([t,i])=>[t,i.getState()])):{}},vbn=(n,e,t)=>{if(n===void 0)return{type:"untracked",connection:e.connect(t)};const i=yme.get(t.name);if(i)return{type:"tracked",store:n,...i};const r={connection:e.connect(t),stores:{}};return yme.set(t.name,r),{type:"tracked",store:n,...r}},RQe=(n,e={})=>(t,i,r)=>{const{enabled:o,anonymousActionType:s,store:a,...c}=e;let l;try{l=(o??(_me?"production":void 0)!=="production")&&window.__REDUX_DEVTOOLS_EXTENSION__}catch{}if(!l)return(_me?"production":void 0)!=="production"&&o&&console.warn("[zustand devtools middleware] Please install/enable Redux devtools extension"),n(t,i,r);const{connection:u,...d}=vbn(a,l,c);let h=!0;r.setState=(y,g,b)=>{const x=t(y,g);if(!h)return x;const w=b===void 0?{type:s||"anonymous"}:typeof b=="string"?{type:b}:b;return a===void 0?(u?.send(w,i()),x):(u?.send({...w,type:`${a}/${w.type}`},{...Mj(c.name),[a]:r.getState()}),x)};const f=(...y)=>{const g=h;h=!1,t(...y),h=g},m=n(r.setState,i,r);if(d.type==="untracked"?u?.init(m):(d.stores[d.store]=r,u?.init(Object.fromEntries(Object.entries(d.stores).map(([y,g])=>[y,y===d.store?m:g.getState()])))),r.dispatchFromDevtools&&typeof r.dispatch=="function"){let y=!1;const g=r.dispatch;r.dispatch=(...b)=>{(_me?"production":void 0)!=="production"&&b[0].type==="__setState"&&!y&&(console.warn('[zustand devtools middleware] "__setState" action type is reserved to set state from the devtools. Avoid using it.'),y=!0),g(...b)}}return u.subscribe(y=>{var g;switch(y.type){case"ACTION":if(typeof y.payload!="string"){console.error("[zustand devtools middleware] Unsupported action format");return}return gme(y.payload,b=>{if(b.type==="__setState"){if(a===void 0){f(b.state);return}Object.keys(b.state).length!==1&&console.error(`
5601
+ */const dbn=({containerClassName:n,...e})=>{const t=Ee.useRef(null),[i,r]=Ee.useState(620);return Ee.useLayoutEffect(()=>{const o=()=>{if(t.current){const a=t.current.clientHeight,c=window.innerHeight;r(Math.min(Math.max(a,620),c))}};o();const s=new ResizeObserver(o);return t.current&&s.observe(t.current),window.addEventListener("resize",o),()=>{s.disconnect(),window.removeEventListener("resize",o)}},[]),_e.jsx("div",{ref:t,className:n||"rf-w-full rf-h-full",children:_e.jsx(ubn,{...e,height:i})})},hbn='*,: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.17 | 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-10{z-index:10}.rf-z-50{z-index:50}.rf-z-\\[100\\]{z-index:100}.rf-order-1{order:1}.rf-order-2{order:2}.rf-order-3{order:3}.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-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-8{margin-bottom:2rem}.rf-ml-1{margin-left:.25rem}.rf-ml-2{margin-left:.5rem}.rf-ml-auto{margin-left:auto}.rf-mr-1{margin-right:.25rem}.rf-mr-2{margin-right:.5rem}.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-square{aspect-ratio:1/1}.rf-aspect-video{aspect-ratio:16/9}.rf-size-14{height:3.5rem;width:3.5rem}.rf-size-4{height:1rem;width:1rem}.\\!rf-h-2{height:.5rem!important}.\\!rf-h-2\\.5{height:.625rem!important}.\\!rf-h-3{height:.75rem!important}.\\!rf-h-full{height:100%!important}.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-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-\\[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-32{max-height:8rem}.rf-max-h-96{max-height:24rem}.rf-max-h-\\[200px\\]{max-height:200px}.rf-max-h-\\[300px\\]{max-height:300px}.rf-max-h-\\[500px\\]{max-height:500px}.rf-max-h-\\[90vh\\]{max-height:90vh}.rf-max-h-full{max-height:100%}.rf-min-h-0{min-height:0}.rf-min-h-\\[200px\\]{min-height:200px}.rf-min-h-\\[300px\\]{min-height:300px}.rf-min-h-\\[620px\\]{min-height:620px}.rf-min-h-\\[calc\\(100vh-240px\\)\\]{min-height:calc(100vh - 240px)}.\\!rf-w-2{width:.5rem!important}.\\!rf-w-2\\.5{width:.625rem!important}.rf-w-1{width:.25rem}.rf-w-1\\/2{width:50%}.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-72{width:18rem}.rf-w-8{width:2rem}.rf-w-9{width:2.25rem}.rf-w-96{width:24rem}.rf-w-\\[95\\%\\]{width:95%}.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-\\[148px\\]{min-width:148px}.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-\\[660px\\]{max-width:660px!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-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-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-y-1{--tw-translate-y:-0.25rem}.rf-translate-x-\\[-50\\%\\]{--tw-translate-x:-50%}.rf-translate-x-\\[-50\\%\\],.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-translate-y-\\[-50\\%\\]{--tw-translate-y:-50%}.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-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-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-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-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-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-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}.rf-truncate,.rf-whitespace-nowrap{white-space:nowrap}.rf-whitespace-pre-wrap{white-space:pre-wrap}.rf-break-words{overflow-wrap:break-word}.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-sm{border-radius:calc(var(--radius) - 4px)}.rf-rounded-xl{border-radius:.75rem}.rf-border{border-width:1px}.rf-border-2{border-width:2px}.rf-border-b{border-bottom-width:1px}.rf-border-t{border-top-width:1px}.rf-border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/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-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-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-200{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity,1))}.rf-border-primary{border-color:hsl(var(--primary))}.rf-border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/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-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-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-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-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/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-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-popover{background-color:hsl(var(--popover))}.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-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/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-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-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-opacity-50{--tw-bg-opacity:0.5}.rf-fill-current{fill:currentColor}.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-2{padding-left:.5rem;padding-right:.5rem}.rf-px-3{padding-left:.75rem;padding-right:.75rem}.rf-px-4{padding-left:1rem;padding-right:1rem}.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-2{padding-bottom:.5rem}.rf-pb-3{padding-bottom:.75rem}.rf-pb-4{padding-bottom:1rem}.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-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-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.rf-text-2xl{font-size:1.5rem;line-height:2rem}.rf-text-3xl{font-size:1.875rem;line-height:2.25rem}.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-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-5{line-height:1.25rem}.rf-leading-none{line-height:1}.rf-leading-relaxed{line-height:1.625}.rf-leading-tight{line-height:1.25}.rf-tracking-wide{letter-spacing:.025em}.rf-tracking-widest{letter-spacing:.1em}.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-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-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-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-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-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-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-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-opacity-0{opacity:0}.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-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-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.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-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-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-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-200{animation-duration:.2s}.rf-ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.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-border-blue-300:hover{--tw-border-opacity:1;border-color:rgb(147 197 253/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-red-500\\/90:hover{background-color:rgba(239,68,68,.9)}.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-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/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}.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-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-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-opacity-50:disabled{opacity:.5}.rf-group\\/bar:hover .group-hover\\/bar\\:rf-opacity-100{opacity:1}.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-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-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-inline{display:inline}.sm\\:rf-hidden{display:none}.sm\\:rf-w-auto{width: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-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-px-4{padding-left:1rem;padding-right:1rem}.sm\\:rf-text-left{text-align:left}.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-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}.\\[\\&\\>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}',pbn=()=>{Ee.useEffect(()=>{if(document.querySelector('style[data-styles="tscircuit-runframe"]'))return;const e=document.createElement("style");e.setAttribute("data-styles","tscircuit-runframe"),e.textContent=hbn,document.head.appendChild(e)},[])},fbn=n=>{Ee.useEffect(()=>(n?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[n])},CQe=n=>`hsl(${e2.indexOf(n)*137.5%360}, 70%, 50%)`,mbn=({phaseTimings:n})=>{if(!n)return null;const e=Object.values(n).reduce((t,i)=>t+i,0);return _e.jsxs("div",{className:"rf-space-y-2 rf-w-full rf-px-4",children:[_e.jsx("div",{className:"rf-relative rf-h-8 rf-flex rf-rounded-sm",children:e2.map(t=>{const i=n[t]||0,r=i/e*100;return _e.jsx("div",{className:"rf-group/bar rf-relative rf-overflow-visible",style:{width:`${r}%`,backgroundColor:CQe(t)},children:_e.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:[t,": ",i.toFixed(1),"ms"]})},t)})}),_e.jsxs("div",{className:"rf-text-xs rf-text-gray-500",children:["Total: ",e.toFixed(2),"ms"]})]})},_bn=({renderLog:n})=>{const[e,t]=Ee.useState("chronological");if(!n)return _e.jsx("div",{className:"rf-p-4 rf-bg-gray-100 rf-rounded-md",children:"No render log, make sure this tab is open when you render (TODO add a rerender button here)"});const i=Object.entries(n?.phaseTimings??{});e==="chronological"?i.sort((o,s)=>e2.indexOf(o[0])-e2.indexOf(s[0])):i.sort((o,s)=>s[1]-o[1]);const r=i.reduce((o,[s,a])=>o+a,0);return _e.jsxs("div",{className:"rf-bg-white",children:[_e.jsxs("div",{className:"rf-flex rf-justify-between rf-items-center",children:[_e.jsx("div",{children:"Render Logs"}),_e.jsxs("div",{className:"rf-mb-4 rf-pr-2 rf-flex rf-text-xs rf-items-center",children:[_e.jsx("div",{className:"rf-mr-2",children:"Sort by:"}),_e.jsxs("select",{value:e,onChange:o=>t(o.target.value),className:"rf-px-2 rf-py-1 rf-border rf-rounded rf-text-xs",children:[_e.jsx("option",{value:"chronological",children:"Phase Order"}),_e.jsx("option",{value:"longest",children:"Duration"})]})]})]}),_e.jsx(mbn,{phaseTimings:n.phaseTimings}),_e.jsxs("table",{className:"rf-w-full rf-text-xs",children:[_e.jsx("thead",{children:_e.jsxs("tr",{children:[_e.jsx("th",{className:"rf-text-left rf-p-2",children:"Phase Order"}),_e.jsx("th",{className:"rf-text-left rf-p-2",children:"Phase"}),_e.jsx("th",{className:"rf-text-left rf-p-2",children:"Duration (ms)"})]})}),_e.jsx("tbody",{children:i.map(([o,s])=>_e.jsxs("tr",{children:[_e.jsx("td",{className:"rf-p-2",children:e2.indexOf(o)}),_e.jsx("td",{className:"rf-p-2",children:o}),_e.jsx("td",{className:"rf-p-2",children:_e.jsx("div",{className:"rf-w-8",children:_e.jsx("div",{className:"rf-h-2 rf-rounded-sm",style:{backgroundColor:CQe(o),width:`${s/r*100}%`}})})}),_e.jsx("td",{className:"rf-p-2",children:_e.jsxs("div",{className:"rf-flex w-full",children:[_e.jsxs("span",{className:"rf-flex-grow",children:[s,"ms"]}),_e.jsxs("span",{className:"rf-text-gray-500 rf-pr-2",children:[(s/r*100).toFixed(1),"%"]})]})})]},o))})]})]})},AQe=({errorMessage:n,errorStack:e,circuitJsonErrors:t})=>{Ee.useEffect(()=>{if(n){const i=new Error(n);e&&(i.stack=e);try{cO.captureException(i)}catch{}}},[n,e]),Ee.useEffect(()=>{if(t&&t.length>0)for(const i of t){const r=new Error(i.message||"Circuit JSON Error");i.stack&&(r.stack=i.stack);try{cO.captureException(r,{error_type:i.type})}catch{}}},[t])},ybn="0.0.867";function gbn(n,e){const[t,i]=Ee.useState(()=>{try{const r=window.localStorage.getItem(n);return r?JSON.parse(r):e}catch(r){return console.error("Error reading from localStorage:",r),e}});return Ee.useEffect(()=>{try{window.localStorage.setItem(n,JSON.stringify(t))}catch(r){console.error("Error writing to localStorage:",r)}},[n,t]),[t,i]}const _me={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1},yme=new Map,Mj=n=>{const e=yme.get(n);return e?Object.fromEntries(Object.entries(e.stores).map(([t,i])=>[t,i.getState()])):{}},vbn=(n,e,t)=>{if(n===void 0)return{type:"untracked",connection:e.connect(t)};const i=yme.get(t.name);if(i)return{type:"tracked",store:n,...i};const r={connection:e.connect(t),stores:{}};return yme.set(t.name,r),{type:"tracked",store:n,...r}},RQe=(n,e={})=>(t,i,r)=>{const{enabled:o,anonymousActionType:s,store:a,...c}=e;let l;try{l=(o??(_me?"production":void 0)!=="production")&&window.__REDUX_DEVTOOLS_EXTENSION__}catch{}if(!l)return(_me?"production":void 0)!=="production"&&o&&console.warn("[zustand devtools middleware] Please install/enable Redux devtools extension"),n(t,i,r);const{connection:u,...d}=vbn(a,l,c);let h=!0;r.setState=(y,g,b)=>{const x=t(y,g);if(!h)return x;const w=b===void 0?{type:s||"anonymous"}:typeof b=="string"?{type:b}:b;return a===void 0?(u?.send(w,i()),x):(u?.send({...w,type:`${a}/${w.type}`},{...Mj(c.name),[a]:r.getState()}),x)};const f=(...y)=>{const g=h;h=!1,t(...y),h=g},m=n(r.setState,i,r);if(d.type==="untracked"?u?.init(m):(d.stores[d.store]=r,u?.init(Object.fromEntries(Object.entries(d.stores).map(([y,g])=>[y,y===d.store?m:g.getState()])))),r.dispatchFromDevtools&&typeof r.dispatch=="function"){let y=!1;const g=r.dispatch;r.dispatch=(...b)=>{(_me?"production":void 0)!=="production"&&b[0].type==="__setState"&&!y&&(console.warn('[zustand devtools middleware] "__setState" action type is reserved to set state from the devtools. Avoid using it.'),y=!0),g(...b)}}return u.subscribe(y=>{var g;switch(y.type){case"ACTION":if(typeof y.payload!="string"){console.error("[zustand devtools middleware] Unsupported action format");return}return gme(y.payload,b=>{if(b.type==="__setState"){if(a===void 0){f(b.state);return}Object.keys(b.state).length!==1&&console.error(`
5602
5602
  [zustand devtools middleware] Unsupported __setState action format.
5603
5603
  When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(),
5604
5604
  and value of this only key should be a state object. Example: { "type": "__setState", "state": { "abc123Store": { "foo": "bar" } } }
@@ -927,7 +927,7 @@ You passed in: '`+this.raw_options[o]+"'");return c},t.prototype._is_valid_selec
927
927
  `};e.exports=function(c,l){var u=r({},o,l);return c=t.html(c,u),u.ocd===!0?(u.newlines&&(u.sep=u.newlines),s(c,u)):c};function s(a,c){return i(a,c).replace(/^\s+/g,"").replace(/\s+$/g,`
928
928
  `).replace(/(\s*<!--)/g,`
929
929
  $1`).replace(/>(\s*)(?=<!--\s*\/)/g,"> ")}}}),iw=class{MAX_ITERATIONS=1e5;solved=!1;failed=!1;iterations=0;progress=0;error=null;activeSubSolver;failedSubSolvers;timeToSolve;stats={};step(){if(!this.solved&&!this.failed){this.iterations++;try{this._step()}catch(e){throw this.error=`${this.constructor.name} error: ${e}`,this.failed=!0,e}!this.solved&&this.iterations>this.MAX_ITERATIONS&&this.tryFinalAcceptance(),!this.solved&&this.iterations>this.MAX_ITERATIONS&&(this.error=`${this.constructor.name} ran out of iterations`,this.failed=!0),"computeProgress"in this&&(this.progress=this.computeProgress())}}_step(){}getConstructorParams(){throw new Error("getConstructorParams not implemented")}solve(){const e=Date.now();for(;!this.solved&&!this.failed;)this.step();const t=Date.now();this.timeToSolve=t-e}visualize(){return{lines:[],points:[],rects:[],circles:[]}}tryFinalAcceptance(){}preview(){return{lines:[],points:[],rects:[],circles:[]}}},eCe=class{netMap;idToNetMap;constructor(e){this.netMap=e,this.idToNetMap={};for(const[t,i]of Object.entries(e))for(const r of i)this.idToNetMap[r]=t}addConnections(e){for(const t of e){const i=new Set;for(const o of t){const s=this.idToNetMap[o];s&&i.add(s)}let r;if(i.size===0)r=`connectivity_net${Object.keys(this.netMap).length}`,this.netMap[r]=[];else if(i.size===1)r=i.values().next().value??`connectivity_net${Object.keys(this.netMap).length}`;else{r=i.values().next().value??`connectivity_net${Object.keys(this.netMap).length}`;for(const o of i)if(o!==r){const s=this.netMap[r],a=this.netMap[o];if(s&&a){s.push(...a),this.netMap[o]=s;for(const c of s)this.idToNetMap[c]=r}}}for(const o of t){const s=this.netMap[r];s&&!s.includes(o)&&s.push(o),this.idToNetMap[o]=r}}}getIdsConnectedToNet(e){return this.netMap[e]||[]}getNetConnectedToId(e){return this.idToNetMap[e]}areIdsConnected(e,t){if(e===t)return!0;const i=this.getNetConnectedToId(e);if(!i)return!1;const r=this.getNetConnectedToId(t);return r?i===r||r===e||r===e:!1}areAllIdsConnected(e){if(e.length===0)return!0;const t=this.getNetConnectedToId(e[0]);if(!t)return!1;for(const i of e){const r=this.getNetConnectedToId(i);if(r===void 0||r!==t)return!1}return!0}},tCe=n=>{const e=new eCe({});for(const i of n.directConnections)e.addConnections([i.netId?[i.netId,...i.pinIds]:i.pinIds]);const t=new eCe(e.netMap);for(const i of n.netConnections)t.addConnections([[i.netId,...i.pinIds]]);return{directConnMap:e,netConnMap:t}};function pPt(n,e={}){const t=n.length,i=e?.maxDistance??Number.POSITIVE_INFINITY;if(t<=1)return[];{const u=new Set;for(const d of n){if(u.has(d.pinId))throw new Error(`Duplicate pinId detected: "${d.pinId}"`);u.add(d.pinId)}}const r=(u,d)=>Math.abs(u.x-d.x)+Math.abs(u.y-d.y),o=new Array(t).fill(!1),s=new Array(t).fill(Number.POSITIVE_INFINITY),a=new Array(t).fill(-1);let c=0;for(let u=1;u<t;u++)n[u].pinId<n[c].pinId&&(c=u);s[c]=0;const l=[];for(let u=0;u<t;u++){let d=-1,h=Number.POSITIVE_INFINITY,f="";for(let m=0;m<t;m++)if(!o[m]){const y=s[m];(y<h||y===h&&(f===""||n[m].pinId<f))&&(h=y,f=n[m].pinId,d=m)}o[d]=!0,a[d]!==-1&&l.push([n[d].pinId,n[a[d]].pinId]);for(let m=0;m<t;m++)if(!o[m]){const y=r(n[d],n[m]),g=y>i?Number.POSITIVE_INFINITY:y;(g<s[m]||g===s[m]&&n[d].pinId<n[a[m]]?.pinId)&&(s[m]=g,a[m]=d)}}return l}var j2=(n,e=1)=>`hsl(${n.split("").reduce((i,r)=>i*31+r.charCodeAt(0),0)%360}, 100%, 50%, ${e})`,nCe=(n,e)=>{const{x:t,y:i}=n,{center:r,width:o,height:s}=e,a=r.y+s/2,c=r.y-s/2,l=r.x+o/2,u=r.x-o/2,d=a-i,h=i-c,f=l-t,m=t-u,y=Math.min(d,h,f,m);return y===d?"y+":y===h?"y-":y===f?"x+":"x-"},FS=(n,e={})=>{const{connectionAlpha:t=.8,chipAlpha:i=.8}=e,r={lines:[],points:[],rects:[]},o=new Map;for(const s of n.chips)for(const a of s.pins)o.set(a.pinId,a);for(const s of n.chips){r.rects.push({label:s.chipId,center:s.center,width:s.width,height:s.height,fill:j2(s.chipId,i)});for(const a of s.pins)r.points.push({label:`${a.pinId}
930
- ${a._facingDirection??nCe(a,s)}`,x:a.x,y:a.y,color:j2(a.pinId,.8)})}for(const s of n.directConnections){const[a,c]=s.pinIds,l=o.get(a),u=o.get(c);r.lines.push({points:[{x:l.x,y:l.y},{x:u.x,y:u.y}],strokeColor:j2(s.netId??`${a}-${c}`,t)})}for(const s of n.netConnections){const a=s.pinIds.map(c=>o.get(c));for(let c=0;c<a.length-1;c++)for(let l=c+1;l<a.length;l++){const u=a[c],d=a[l];r.lines.push({points:[{x:u.x,y:u.y},{x:d.x,y:d.y}],strokeColor:j2(s.netId,t),strokeDash:"4 2"})}}return r},fPt=class extends iw{inputProblem;mspConnectionPairs=[];dcConnMap;globalConnMap;queuedDcNetIds;chipMap;maxMspPairDistance;pinMap;userNetIdByPinId;constructor({inputProblem:n}){super(),this.inputProblem=n,this.maxMspPairDistance=n.maxMspPairDistance??1;const{directConnMap:e,netConnMap:t}=tCe(n);this.dcConnMap=e,this.globalConnMap=t,this.pinMap={};for(const i of n.chips)for(const r of i.pins)this.pinMap[r.pinId]={...r,chipId:i.chipId};this.chipMap={};for(const i of n.chips)this.chipMap[i.chipId]=i;this.userNetIdByPinId={};for(const i of n.directConnections)if(i.netId){const[r,o]=i.pinIds;this.userNetIdByPinId[r]=i.netId,this.userNetIdByPinId[o]=i.netId}for(const i of n.netConnections)for(const r of i.pinIds)this.userNetIdByPinId[r]=i.netId;this.queuedDcNetIds=Object.keys(t.netMap)}getConstructorParams(){return{inputProblem:this.inputProblem}}_step(){if(this.queuedDcNetIds.length===0){this.solved=!0;return}const n=this.queuedDcNetIds.shift(),t=this.globalConnMap.getIdsConnectedToNet(n).filter(r=>!!this.pinMap[r]);if(t.length<=1)return;if(t.length===2){const[r,o]=t,s=this.pinMap[r],a=this.pinMap[o];if(Math.abs(s.x-a.x)+Math.abs(s.y-a.y)>this.maxMspPairDistance)return;const l=this.globalConnMap.getNetConnectedToId(r),u=this.userNetIdByPinId[r]??this.userNetIdByPinId[o];this.mspConnectionPairs.push({mspPairId:`${r}-${o}`,dcConnNetId:n,globalConnNetId:l,userNetId:u,pins:[s,a]});return}const i=pPt(t.map(r=>this.pinMap[r]).filter(Boolean),{maxDistance:this.maxMspPairDistance});for(const[r,o]of i){const s=this.globalConnMap.getNetConnectedToId(r),a=this.userNetIdByPinId[r]??this.userNetIdByPinId[o];this.mspConnectionPairs.push({mspPairId:`${r}-${o}`,dcConnNetId:n,globalConnNetId:s,userNetId:a,pins:[this.pinMap[r],this.pinMap[o]]})}}visualize(){const n=FS(this.inputProblem,{chipAlpha:.1,connectionAlpha:.1});for(const e of this.mspConnectionPairs)n.lines.push({points:[{x:e.pins[0].x,y:e.pins[0].y},{x:e.pins[1].x,y:e.pins[1].y}],strokeColor:j2(e.mspPairId,.75)});return n}},mPt=.6,_Pt=1;Cte(ZRt()),Cte(QRt()),Cte(hPt(),1);function Nte(n){const e=[...n.points||[],...(n.lines||[]).flatMap(t=>t.points),...(n.rects||[]).flatMap(t=>{const i=t.width/2,r=t.height/2;return[{x:t.center.x-i,y:t.center.y-r},{x:t.center.x+i,y:t.center.y-r},{x:t.center.x-i,y:t.center.y+r},{x:t.center.x+i,y:t.center.y+r}]}),...(n.circles||[]).flatMap(t=>[{x:t.center.x-t.radius,y:t.center.y},{x:t.center.x+t.radius,y:t.center.y},{x:t.center.x,y:t.center.y-t.radius},{x:t.center.x,y:t.center.y+t.radius}]),...(n.texts||[]).flatMap(t=>{const i=t.fontSize??12,r=t.text.length*i*mPt,o=i*_Pt,s=t.anchorSide??"center",a={top_left:{dx:0,dy:0},top_center:{dx:-r/2,dy:0},top_right:{dx:-r,dy:0},center_left:{dx:0,dy:-o/2},center:{dx:-r/2,dy:-o/2},center_right:{dx:-r,dy:-o/2},bottom_left:{dx:0,dy:-o},bottom_center:{dx:-r/2,dy:-o},bottom_right:{dx:-r,dy:-o}},{dx:c,dy:l}=a[s],u=t.x+c,d=t.y+l;return[{x:u,y:d},{x:u+r,y:d+o}]})];return e.length===0?{minX:-1,maxX:1,minY:-1,maxY:1}:e.reduce((t,i)=>({minX:Math.min(t.minX,i.x),maxX:Math.max(t.maxX,i.x),minY:Math.min(t.minY,i.y),maxY:Math.max(t.maxY,i.y)}),{minX:1/0,maxX:-1/0,minY:1/0,maxY:-1/0})}var yPt=class{constructor(){this.ids=[],this.values=[],this.length=0}clear(){this.length=0}push(e,t){let i=this.length++;for(;i>0;){const r=i-1>>1,o=this.values[r];if(t>=o)break;this.ids[i]=this.ids[r],this.values[i]=o,i=r}this.ids[i]=e,this.values[i]=t}pop(){if(this.length===0)return;const e=this.ids,t=this.values,i=e[0],r=--this.length;if(r>0){const o=e[r],s=t[r];let a=0;const c=r>>1;for(;a<c;){const l=(a<<1)+1,u=l+1,d=l+(+(u<r)&+(t[u]<t[l]));if(t[d]>=s)break;e[a]=e[d],t[a]=t[d],a=d}e[a]=o,t[a]=s}return i}peek(){return this.length>0?this.ids[0]:void 0}peekValue(){return this.length>0?this.values[0]:void 0}shrink(){this.ids.length=this.values.length=this.length}},iCe=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],kte=3,gPt=class ept{static from(e,t=0){if(t%8!==0)throw new Error("byteOffset must be 8-byte aligned.");if(!e||e.byteLength===void 0||e.buffer)throw new Error("Data must be an instance of ArrayBuffer or SharedArrayBuffer.");const[i,r]=new Uint8Array(e,t+0,2);if(i!==251)throw new Error("Data does not appear to be in a Flatbush format.");const o=r>>4;if(o!==kte)throw new Error(`Got v${o} data when expected v${kte}.`);const s=iCe[r&15];if(!s)throw new Error("Unrecognized array type.");const[a]=new Uint16Array(e,t+2,1),[c]=new Uint32Array(e,t+4,1);return new ept(c,a,s,void 0,e,t)}constructor(e,t=16,i=Float64Array,r=ArrayBuffer,o,s=0){if(e===void 0)throw new Error("Missing required argument: numItems.");if(isNaN(e)||e<=0)throw new Error(`Unexpected numItems value: ${e}.`);this.numItems=+e,this.nodeSize=Math.min(Math.max(+t,2),65535),this.byteOffset=s;let a=e,c=a;this._levelBounds=[a*4];do a=Math.ceil(a/this.nodeSize),c+=a,this._levelBounds.push(c*4);while(a!==1);this.ArrayType=i,this.IndexArrayType=c<16384?Uint16Array:Uint32Array;const l=iCe.indexOf(i),u=c*4*i.BYTES_PER_ELEMENT;if(l<0)throw new Error(`Unexpected typed array class: ${i}.`);if(o)this.data=o,this._boxes=new i(o,s+8,c*4),this._indices=new this.IndexArrayType(o,s+8+u,c),this._pos=c*4,this.minX=this._boxes[this._pos-4],this.minY=this._boxes[this._pos-3],this.maxX=this._boxes[this._pos-2],this.maxY=this._boxes[this._pos-1];else{const d=this.data=new r(8+u+c*this.IndexArrayType.BYTES_PER_ELEMENT);this._boxes=new i(d,8,c*4),this._indices=new this.IndexArrayType(d,8+u,c),this._pos=0,this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0,new Uint8Array(d,0,2).set([251,(kte<<4)+l]),new Uint16Array(d,2,1)[0]=t,new Uint32Array(d,4,1)[0]=e}this._queue=new yPt}add(e,t,i=e,r=t){const o=this._pos>>2,s=this._boxes;return this._indices[o]=o,s[this._pos++]=e,s[this._pos++]=t,s[this._pos++]=i,s[this._pos++]=r,e<this.minX&&(this.minX=e),t<this.minY&&(this.minY=t),i>this.maxX&&(this.maxX=i),r>this.maxY&&(this.maxY=r),o}finish(){if(this._pos>>2!==this.numItems)throw new Error(`Added ${this._pos>>2} items when expected ${this.numItems}.`);const e=this._boxes;if(this.numItems<=this.nodeSize){e[this._pos++]=this.minX,e[this._pos++]=this.minY,e[this._pos++]=this.maxX,e[this._pos++]=this.maxY;return}const t=this.maxX-this.minX||1,i=this.maxY-this.minY||1,r=new Uint32Array(this.numItems),o=65535;for(let s=0,a=0;s<this.numItems;s++){const c=e[a++],l=e[a++],u=e[a++],d=e[a++],h=Math.floor(o*((c+u)/2-this.minX)/t),f=Math.floor(o*((l+d)/2-this.minY)/i);r[s]=xPt(h,f)}Ote(r,e,this._indices,0,this.numItems-1,this.nodeSize);for(let s=0,a=0;s<this._levelBounds.length-1;s++){const c=this._levelBounds[s];for(;a<c;){const l=a;let u=e[a++],d=e[a++],h=e[a++],f=e[a++];for(let m=1;m<this.nodeSize&&a<c;m++)u=Math.min(u,e[a++]),d=Math.min(d,e[a++]),h=Math.max(h,e[a++]),f=Math.max(f,e[a++]);this._indices[this._pos>>2]=l,e[this._pos++]=u,e[this._pos++]=d,e[this._pos++]=h,e[this._pos++]=f}}}search(e,t,i,r,o){if(this._pos!==this._boxes.length)throw new Error("Data not yet indexed - call index.finish().");let s=this._boxes.length-4;const a=[],c=[];for(;s!==void 0;){const l=Math.min(s+this.nodeSize*4,rCe(s,this._levelBounds));for(let u=s;u<l;u+=4){const d=this._boxes[u];if(i<d)continue;const h=this._boxes[u+1];if(r<h)continue;const f=this._boxes[u+2];if(e>f)continue;const m=this._boxes[u+3];if(t>m)continue;const y=this._indices[u>>2]|0;s>=this.numItems*4?a.push(y):(o===void 0||o(y,d,h,f,m))&&c.push(y)}s=a.pop()}return c}neighbors(e,t,i=1/0,r=1/0,o){if(this._pos!==this._boxes.length)throw new Error("Data not yet indexed - call index.finish().");let s=this._boxes.length-4;const a=this._queue,c=[],l=r*r;e:for(;s!==void 0;){const u=Math.min(s+this.nodeSize*4,rCe(s,this._levelBounds));for(let d=s;d<u;d+=4){const h=this._indices[d>>2]|0,f=this._boxes[d],m=this._boxes[d+1],y=this._boxes[d+2],g=this._boxes[d+3],x=e<f?f-e:e>y?e-y:0,b=t<m?m-t:t>g?t-g:0,w=x*x+b*b;w>l||(s>=this.numItems*4?a.push(h<<1,w):(o===void 0||o(h))&&a.push((h<<1)+1,w))}for(;a.length&&a.peek()&1;)if(a.peekValue()>l||(c.push(a.pop()>>1),c.length===i))break e;s=a.length?a.pop()>>1:void 0}return a.clear(),c}};function rCe(n,e){let t=0,i=e.length-1;for(;t<i;){const r=t+i>>1;e[r]>n?i=r:t=r+1}return e[t]}function Ote(n,e,t,i,r,o){if(Math.floor(i/o)>=Math.floor(r/o))return;const s=n[i],a=n[i+r>>1],c=n[r];let l=c;const u=Math.max(s,a);c>u?l=u:u===s?l=Math.max(a,c):u===a&&(l=Math.max(s,c));let d=i-1,h=r+1;for(;;){do d++;while(n[d]<l);do h--;while(n[h]>l);if(d>=h)break;vPt(n,e,t,d,h)}Ote(n,e,t,i,h,o),Ote(n,e,t,h+1,r,o)}function vPt(n,e,t,i,r){const o=n[i];n[i]=n[r],n[r]=o;const s=4*i,a=4*r,c=e[s],l=e[s+1],u=e[s+2],d=e[s+3];e[s]=e[a],e[s+1]=e[a+1],e[s+2]=e[a+2],e[s+3]=e[a+3],e[a]=c,e[a+1]=l,e[a+2]=u,e[a+3]=d;const h=t[i];t[i]=t[r],t[r]=h}function xPt(n,e){let t=n^e,i=65535^t,r=65535^(n|e),o=n&(e^65535),s=t|i>>1,a=t>>1^t,c=r>>1^i&o>>1^r,l=t&r>>1^o>>1^o;t=s,i=a,r=c,o=l,s=t&t>>2^i&i>>2,a=t&i>>2^i&(t^i)>>2,c^=t&r>>2^i&o>>2,l^=i&r>>2^(t^i)&o>>2,t=s,i=a,r=c,o=l,s=t&t>>4^i&i>>4,a=t&i>>4^i&(t^i)>>4,c^=t&r>>4^i&o>>4,l^=i&r>>4^(t^i)&o>>4,t=s,i=a,r=c,o=l,c^=t&r>>8^i&o>>8,l^=i&r>>8^(t^i)&o>>8,t=c^c>>1,i=l^l>>1;let u=n^e,d=i|65535^(u|t);return u=(u|u<<8)&16711935,u=(u|u<<4)&252645135,u=(u|u<<2)&858993459,u=(u|u<<1)&1431655765,d=(d|d<<8)&16711935,d=(d|d<<4)&252645135,d=(d|d<<2)&858993459,d=(d|d<<1)&1431655765,(d<<1|u)>>>0}function WE(n){const e=n.width/2,t=n.height/2;return{minX:n.center.x-e,maxX:n.center.x+e,minY:n.center.y-t,maxY:n.center.y+t}}var oCe=class{chips;spatialIndex;spatialIndexIdToChip;constructor(n){this.chips=n.map(e=>({...e,bounds:WE(e),spatialIndexId:null})),this.spatialIndexIdToChip=new Map,this.spatialIndex=new gPt(n.length);for(const e of this.chips)e.spatialIndexId=this.spatialIndex.add(e.bounds.minX,e.bounds.minY,e.bounds.maxX,e.bounds.maxY),this.spatialIndexIdToChip.set(e.spatialIndexId,e);this.spatialIndex.finish()}getChipsInBounds(n){return this.spatialIndex.search(n.minX,n.minY,n.maxX,n.maxY).map(t=>this.spatialIndexIdToChip.get(t))}doesOrthogonalLineIntersectChip(n,e={}){const t=e.excludeChipIds??[],[i,r]=n,{x:o,y:s}=i,{x:a,y:c}=r;return this.getChipsInBounds({minX:Math.min(o,a),minY:Math.min(s,c),maxX:Math.max(o,a),maxY:Math.max(s,c)}).filter(u=>!t.includes(u.chipId)).length>0}},bPt=(n,e,t)=>{const i=[{x:n.x,y:n.y}],r=(n.x+e.x)/2,o=(n.y+e.y)/2,s={x:e.x,y:e.y};switch(e.facingDirection){case"x+":s.x+=t;break;case"x-":s.x-=t;break;case"y+":s.y+=t;break;case"y-":s.y-=t;break}const a=n.facingDirection??"none",c=e.facingDirection??"none",l=h=>{const f=i[i.length-1];(f.x!==h.x||f.y!==h.y)&&i.push(h)},u=Math.abs(n.y-e.y)<=Math.max(1e-6,t*.1),d=Math.abs(n.x-e.x)<=Math.max(1e-6,t*.1);if(a==="none"&&c==="none")l({x:r,y:n.y}),l({x:r,y:e.y});else if(a==="x+"&&c==="y+")n.x>e.x&&n.y<e.y?(l({x:n.x+t,y:n.y}),l({x:n.x+t,y:e.y+t}),l({x:e.x,y:e.y+t})):n.x<e.x&&n.y>e.y?l({x:e.x,y:n.y}):d?(l({x:n.x+t,y:n.y}),l({x:n.x+t,y:e.y+t}),l({x:e.x,y:e.y+t})):n.x<e.x?(l({x:r,y:n.y}),l({x:r,y:s.y}),l({x:e.x,y:s.y})):n.y<=e.y+t?(l({x:n.x+t,y:n.y}),l({x:n.x+t,y:n.y+t}),l({x:e.x,y:n.y+t}),l({x:e.x,y:e.y})):(l({x:n.x+t,y:n.y}),l({x:n.x+t,y:(n.y+e.y)/2}),l({x:e.x,y:(n.y+e.y)/2}));else if(a==="x+"&&c==="x+"&&!u){const h=Math.max(n.x+t,s.x);l({x:h,y:n.y}),l({x:h,y:e.y})}else if(a==="x+"&&c==="x+"&&u)l({x:n.x+t,y:n.y}),l({x:n.x+t,y:n.y+t}),l({x:e.x+t,y:n.y+t}),l({x:e.x+t,y:e.y});else if(a==="x+"&&c==="y-")if(d&&n.y<=e.y)l({x:n.x+t,y:n.y}),l({x:n.x+t,y:o}),l({x:e.x,y:o});else if(d&&n.y>e.y)l({x:n.x+t,y:n.y}),l({x:n.x+t,y:e.y-t}),l({x:e.x,y:e.y-t});else if(n.x<e.x&&n.y<e.y)l({x:e.x,y:n.y});else if(n.x>e.x&&n.y<e.y){const h=n.x+t;l({x:h,y:n.y}),l({x:h,y:o}),l({x:e.x,y:o})}else if(n.x>e.x&&n.y>e.y){const h=n.x+t;l({x:h,y:n.y}),l({x:h,y:s.y}),l({x:e.x,y:s.y})}else n.y===e.y?(l({x:n.x+t,y:n.y}),l({x:n.x+t,y:n.y-t}),l({x:e.x,y:n.y-t})):(l({x:r,y:n.y}),l({x:r,y:s.y}),l({x:e.x,y:s.y}));else if(a==="x+"&&c==="x-"&&n.x+t>=e.x-t&&e.y!==n.y){const h=n.x+t;l({x:h,y:n.y}),l({x:h,y:o}),l({x:s.x,y:o}),l({x:s.x,y:s.y})}else a==="x+"&&c==="x-"&&e.y===n.y&&e.x>n.x||(a==="x+"&&c==="x-"&&e.y===n.y?(l({x:n.x+t,y:n.y}),l({x:n.x+t,y:n.y+t}),l({x:e.x-t,y:n.y+t}),l({x:e.x-t,y:n.y})):(a==="x+"&&l({x:n.x+t,y:n.y}),l({x:r,y:i[i.length-1].y}),l({x:r,y:s.y}),l({x:s.x,y:s.y})));return l({x:e.x,y:e.y}),i},wPt=(n,e,t={})=>{let i=n,r=e,o=!1;(i.x>r.x||i.x===r.x&&i.y>r.y)&&(o=!0,[i,r]=[r,i]);const s=i.facingDirection==="x-",a=i.facingDirection==="y-",c=b=>{const w=s?i.x-(b.x-i.x):b.x,T=a?i.y-(b.y-i.y):b.y;let N=b.facingDirection;return s&&(N==="x+"?N="x-":N==="x-"&&(N="x+")),a&&(N==="y+"?N="y-":N==="y-"&&(N="y+")),{x:w,y:T,facingDirection:N}},l=(b,w)=>{const T=b.x-w.x,N=b.y-w.y,R=w.x+N,k=w.y-T;let M=b.facingDirection;switch(M){case"x+":M="y-";break;case"y-":M="x-";break;case"x-":M="y+";break;case"y+":M="x+";break}return{x:R,y:k,facingDirection:M}},u=(b,w)=>{const T=b.x-w.x,N=b.y-w.y;return{x:w.x-N,y:w.y+T}},d=s||a?c(i):i,h=s||a?c(r):r;let f=d,m=h,y=!1;d.facingDirection==="y+"&&(y=!0,f={...d,facingDirection:"x+"},m=l(h,d));const g=t?.overshoot??.1*Math.max(Math.abs(f.x-m.x),Math.abs(f.y-m.y));let x=bPt(f,m,g);return y&&(x=x.map(b=>u(b,f))),(s||a)&&(x=x.map(({x:b,y:w})=>({x:s?i.x-(b-i.x):b,y:a?i.y-(w-i.y):w}))),o?x.reverse():x},SPt=n=>{switch(n){case"x+":return{x:1,y:0};case"x-":return{x:-1,y:0};case"y+":return{x:0,y:1};case"y-":return{x:0,y:-1}}throw new Error(`Invalid facing direction: ${n}`)},ZE=1e-6,z6=1e-6,EPt=(n,e)=>Math.abs(n.x-e.x)<ZE||Math.abs(n.y-e.y)<ZE,TPt=(n,e)=>{const t=Math.abs(n.x-e.x),i=Math.abs(n.y-e.y);if(t<ZE&&i>=ZE)return"vertical";if(i<ZE&&t>=ZE)return"horizontal";throw new Error("Non-orthogonal or degenerate segment detected.")},sCe=n=>{if(n.length<2)throw new Error("Polyline must have at least two points.");for(let e=0;e<n.length-1;e++){const t=n[e],i=n[e+1];if(!EPt(t,i))throw new Error("Polyline contains a non-orthogonal segment.");if(Math.abs(t.x-i.x)+Math.abs(t.y-i.y)<z6)throw new Error("Polyline contains a near-zero length segment.")}},MPt=(n,e=ZE)=>{const t=n.slice().sort((r,o)=>r-o),i=[];for(const r of t)(i.length===0||Math.abs(r-i[i.length-1])>e)&&i.push(r);return i},aCe=(n,e=9)=>n.map(t=>`${t.x.toFixed(e)},${t.y.toFixed(e)}`).join("|"),CPt=(n,e=z6)=>{if(n.length===0)return[];const t=[{...n[0]}];for(let i=1;i<n.length;i++){const r=n[i],o=t[t.length-1];Math.abs(r.x-o.x)+Math.abs(r.y-o.y)>e&&t.push({...r})}return t},APt=(n,e,t)=>{const i=[];for(const r of e)n==="x"?r.orientation==="vertical"&&typeof r.x=="number"&&i.push(r.x):r.orientation==="horizontal"&&typeof r.y=="number"&&i.push(r.y);return i.push(t),MPt(i)},RPt=(n,e,t)=>TPt(e,t)==="horizontal"?{axis:"y",facing:n.y<=e.y?"y+":"y-"}:{axis:"x",facing:n.x<=e.x?"x+":"x-"},PPt=n=>n.length===0?[[]]:n.reduce((e,t)=>e.flatMap(i=>t.map(r=>[...i,r])),[[]]),IPt=({baseElbow:n,guidelines:e})=>{const t=CPt(n);sCe(t);const i=t.length;if(i-1<5)return{elbowVariants:[t.map(m=>({...m}))],movableSegments:[]};const o=2,s=i-4,a=[],c=[],l=[],u=[];for(let m=o;m<=s;m++){const y=t[m-1],g=t[m],x=t[m+1],b=t[m+2],{axis:w,facing:T}=RPt(y,g,x);a.push({start:{...g},end:{...x},freedom:T,dir:SPt(T)}),c.push(m),l.push(w);const N=w==="x"?g.x:g.y,k=APt(w,e,N).filter(M=>{if(w==="y"){const I=Math.abs(y.y-M),C=Math.abs(b.y-M);return I>z6&&C>z6}else{const I=Math.abs(y.x-M),C=Math.abs(b.x-M);return I>z6&&C>z6}});u.push(k)}const d=PPt(u),h=new Set,f=[];{const m=aCe(t);h.add(m),f.push(t.map(y=>({...y})))}for(const m of d){if(m.length===0)continue;const y=t.map(x=>({...x}));for(let x=0;x<c.length;x++){const b=c[x],w=l[x],T=m[x];typeof T!="number"||Number.isNaN(T)||(w==="y"?(y[b]={...y[b],y:T},y[b+1]={...y[b+1],y:T}):(y[b]={...y[b],x:T},y[b+1]={...y[b+1],x:T}))}try{sCe(y)}catch{continue}const g=aCe(y);h.has(g)||(h.add(g),f.push(y))}return{elbowVariants:f,movableSegments:a}},cCe=({guidelines:n,graphics:e})=>{const t=Nte(e),i=t.maxX-t.minX,r=t.maxY-t.minY;t.minX-=i*.3,t.maxX+=i*.3,t.minY-=r*.3,t.maxY+=r*.3;for(const o of n)o.orientation==="horizontal"&&e.lines.push({points:[{x:t.minX,y:o.y},{x:t.maxX,y:o.y}],strokeColor:"rgba(0, 0, 0, 0.5)",strokeDash:"2 2"}),o.orientation==="vertical"&&e.lines.push({points:[{x:o.x,y:t.minY},{x:o.x,y:t.maxY}],strokeColor:"rgba(0, 0, 0, 0.5)",strokeDash:"2 2"});return e},NPt=class extends iw{pins;inputProblem;guidelines;chipMap;movableSegments;baseElbow;allCandidatePaths;queuedCandidatePaths;chipObstacleSpatialIndex;solvedTracePath=null;constructor(n){super(),this.pins=n.pins,this.inputProblem=n.inputProblem,this.guidelines=n.guidelines,this.chipMap=n.chipMap,this.chipObstacleSpatialIndex=this.inputProblem._chipObstacleSpatialIndex||new oCe(this.inputProblem.chips),this.inputProblem._chipObstacleSpatialIndex||(this.inputProblem._chipObstacleSpatialIndex=this.chipObstacleSpatialIndex);for(const s of this.pins)if(!s._facingDirection){const a=this.chipMap[s.chipId];s._facingDirection=nCe(s,a)}const[e,t]=this.pins;this.baseElbow=wPt({x:e.x,y:e.y,facingDirection:e._facingDirection},{x:t.x,y:t.y,facingDirection:t._facingDirection},{overshoot:.2});const{elbowVariants:i,movableSegments:r}=IPt({baseElbow:this.baseElbow,guidelines:this.guidelines});this.movableSegments=r;const o=s=>{let a=0;for(let c=0;c<s.length-1;c++){const l=s[c+1].x-s[c].x,u=s[c+1].y-s[c].y;a+=Math.sqrt(l*l+u*u)}return a};this.allCandidatePaths=[this.baseElbow,...i],this.queuedCandidatePaths=[...this.allCandidatePaths].sort((s,a)=>o(s)-o(a))}getConstructorParams(){return{chipMap:this.chipMap,pins:this.pins,guidelines:this.guidelines,inputProblem:this.inputProblem}}_step(){if(this.queuedCandidatePaths.length===0){this.failed=!0,this.error="No more candidate elbows, everything had collisions";return}const n=this.queuedCandidatePaths.shift();for(let e=0;e<n.length-1;e++){const t=n[e],i=n[e+1];let r=[];const o=this.pins.some(l=>Math.abs(l.x-t.x)<1e-10&&Math.abs(l.y-t.y)<1e-10),s=this.pins.some(l=>Math.abs(l.x-i.x)<1e-10&&Math.abs(l.y-i.y)<1e-10);if(o){const l=this.pins.find(u=>Math.abs(u.x-t.x)<1e-10&&Math.abs(u.y-t.y)<1e-10);if(l){const u=WE(this.chipMap[l.chipId]),d=i.x-t.x,h=i.y-t.y,f=1e-9,m=Math.abs(t.x-u.minX)<1e-9,y=Math.abs(t.x-u.maxX)<1e-9,g=Math.abs(t.y-u.minY)<1e-9,x=Math.abs(t.y-u.maxY)<1e-9;if(m&&d>f||y&&d<-f||g&&h>f||x&&h<-f)return;r.includes(l.chipId)||r.push(l.chipId)}}if(s){const l=this.pins.find(u=>Math.abs(u.x-i.x)<1e-10&&Math.abs(u.y-i.y)<1e-10);if(l){const u=WE(this.chipMap[l.chipId]),d=t.x-i.x,h=t.y-i.y,f=1e-9,m=Math.abs(i.x-u.minX)<1e-9,y=Math.abs(i.x-u.maxX)<1e-9,g=Math.abs(i.y-u.minY)<1e-9,x=Math.abs(i.y-u.maxY)<1e-9;if(m&&d>f||y&&d<-f||g&&h>f||x&&h<-f)return;r.includes(l.chipId)||r.push(l.chipId)}}const a={excludeChipIds:r};if(this.chipObstacleSpatialIndex.doesOrthogonalLineIntersectChip([t,i],a))return}this.solvedTracePath=n,this.solved=!0}visualize(){const n=FS(this.inputProblem,{chipAlpha:.1,connectionAlpha:.1}),e=Nte(n),t=e.maxX-e.minX,i=e.maxY-e.minY;cCe({guidelines:this.guidelines,graphics:n});for(const{start:r,end:o,dir:s}of this.movableSegments){const a={x:(r.x+o.x)/2,y:(r.y+o.y)/2},c=Math.sqrt((r.x-o.x)**2+(r.y-o.y)**2);n.lines.push({points:[r,a,o],strokeColor:"rgba(0,0,255,0.5)",strokeDash:"2 2"}),n.lines.push({points:[a,{x:a.x+s.x*c*.1,y:a.y+s.y*c*.1}],strokeColor:"rgba(0,0,255,0.5)",strokeDash:"2 2"})}if(!this.solvedTracePath){this.queuedCandidatePaths.length>0&&n.lines.push({points:this.queuedCandidatePaths[0],strokeColor:"orange",strokeWidth:t*.005});for(let r=1;r<this.queuedCandidatePaths.length;r++){const o=this.queuedCandidatePaths[r],s=r/this.queuedCandidatePaths.length;n.lines.push({points:o.map(a=>({x:a.x+s*t*.005,y:a.y+s*i*.005})),strokeColor:j2(`${o.reduce((a,c)=>`${a},${c.x},${c.y}`,"")}`,.5),strokeDash:"8 8"})}}return this.solvedTracePath&&n.lines.push({points:this.solvedTracePath,strokeColor:"green"}),n}},kPt=class extends iw{inputProblem;guidelines;mspConnectionPairs;dcConnMap;globalConnMap;queuedConnectionPairs;chipMap;currentConnectionPair=null;solvedTracePaths=[];failedConnectionPairs=[];constructor(n){super(),this.inputProblem=n.inputProblem,this.mspConnectionPairs=n.mspConnectionPairs,this.dcConnMap=n.dcConnMap,this.globalConnMap=n.globalConnMap,this.guidelines=n.guidelines,this.chipMap=n.chipMap,this.queuedConnectionPairs=[...this.mspConnectionPairs]}getConstructorParams(){return{inputProblem:this.inputProblem,chipMap:this.chipMap,mspConnectionPairs:this.mspConnectionPairs,dcConnMap:this.dcConnMap,globalConnMap:this.globalConnMap,guidelines:this.guidelines}}_step(){if(this.activeSubSolver?.solved&&(this.solvedTracePaths.push({...this.currentConnectionPair,tracePath:this.activeSubSolver.solvedTracePath,mspConnectionPairIds:[this.currentConnectionPair.mspPairId],pinIds:[this.currentConnectionPair.pins[0].pinId,this.currentConnectionPair.pins[1].pinId]}),this.activeSubSolver=null,this.currentConnectionPair=null),this.activeSubSolver?.failed&&(this.currentConnectionPair&&this.failedConnectionPairs.push({...this.currentConnectionPair,error:this.activeSubSolver.error||void 0}),this.activeSubSolver=null,this.currentConnectionPair=null),this.activeSubSolver){this.activeSubSolver.step();return}const n=this.queuedConnectionPairs.shift();if(this.currentConnectionPair=n,!n){this.solved=!0;return}const{pins:e}=n;this.activeSubSolver=new NPt({inputProblem:this.inputProblem,pins:e,chipMap:this.chipMap,guidelines:this.guidelines})}visualize(){if(this.activeSubSolver)return this.activeSubSolver.visualize();const n=FS(this.inputProblem,{chipAlpha:.1,connectionAlpha:.1});cCe({guidelines:this.guidelines,graphics:n});for(const{mspPairId:e,tracePath:t}of this.solvedTracePaths)n.lines.push({points:t,strokeWidth:.005,strokeColor:"green"});for(const e of this.failedConnectionPairs)n.lines.push({points:[{x:e.pins[0].x,y:e.pins[0].y},{x:e.pins[1].x,y:e.pins[1].y}],strokeColor:"red",strokeDash:"4 2",strokeWidth:.004});return n}},OPt=class extends iw{overlappingTraceSegments;traceNetIslands;SHIFT_DISTANCE=.1;correctedTraceMap={};constructor(n){super(),this.overlappingTraceSegments=n.overlappingTraceSegments,this.traceNetIslands=n.traceNetIslands;for(const{connNetId:e,pathsWithOverlap:t}of this.overlappingTraceSegments)for(const{solvedTracePathIndex:i,traceSegmentIndex:r}of t){const o=this.traceNetIslands[e][i].mspPairId;this.correctedTraceMap[o]=this.traceNetIslands[e][i]}}_step(){const e=this.overlappingTraceSegments.map((r,o)=>{const s=Math.floor(o/2)+1;return(o%2===0?-s:s)*this.SHIFT_DISTANCE}),t=(r,o)=>Math.abs(r-o)<1e-6,i=(r,o)=>!!r&&!!o&&t(r.x,o.x)&&t(r.y,o.y);this.overlappingTraceSegments.forEach((r,o)=>{const s=e[o],a=new Map;for(const c of r.pathsWithOverlap)a.has(c.solvedTracePathIndex)||a.set(c.solvedTracePathIndex,new Set),a.get(c.solvedTracePathIndex).add(c.traceSegmentIndex);for(const[c,l]of a){const u=this.traceNetIslands[r.connNetId][c],d=this.correctedTraceMap[u.mspPairId]??u,h=d.tracePath.map(x=>({...x})),f=Array.from(l).sort((x,b)=>x-b),m=new Set,y=new Set;for(const x of f){if(x<0||x>=h.length-1||x===0||x===h.length-2)continue;const b=h[x],w=h[x+1],T=Math.abs(b.x-w.x)<1e-6,N=Math.abs(b.y-w.y)<1e-6;!T&&!N||(T?(m.has(x)||(b.x+=s,m.add(x)),m.has(x+1)||(w.x+=s,m.add(x+1))):N&&(y.has(x)||(b.y+=s,y.add(x)),y.has(x+1)||(w.y+=s,y.add(x+1))))}const g=[];for(const x of h)(g.length===0||!i(g[g.length-1],x))&&g.push(x);this.correctedTraceMap[u.mspPairId]={...d,tracePath:g}}}),this.solved=!0}visualize(){const n={lines:[],points:[],rects:[],circles:[]};for(const e of this.overlappingTraceSegments)for(const{solvedTracePathIndex:t,traceSegmentIndex:i}of e.pathsWithOverlap){const r=this.traceNetIslands[e.connNetId][t],o=r.tracePath[i],s=r.tracePath[i+1];n.lines.push({points:[o,s],strokeColor:"red",strokeWidth:.006})}for(const e of Object.values(this.correctedTraceMap))n.lines.push({points:e.tracePath,strokeColor:"blue",strokeDash:"4 2",strokeWidth:.004});return n}},DPt=class extends iw{inputProblem;inputTracePaths;globalConnMap;traceNetIslands={};correctedTraceMap={};constructor(n){super(),this.inputProblem=n.inputProblem,this.inputTracePaths=n.inputTracePaths,this.globalConnMap=n.globalConnMap;for(const e of this.inputTracePaths){const{mspPairId:t}=e;this.correctedTraceMap[t]=e}this.traceNetIslands=this.computeTraceNetIslands()}getConstructorParams(){return{inputProblem:this.inputProblem,inputTracePaths:this.inputTracePaths,globalConnMap:this.globalConnMap}}computeTraceNetIslands(){const n={};for(const e of this.inputTracePaths){const t=this.correctedTraceMap[e.mspPairId]??e,i=t.globalConnNetId;n[i]||(n[i]=[]),n[i].push(t)}return n}findNextOverlapIssue(){const e=Object.keys(this.traceNetIslands);for(let t=0;t<e.length;t++)for(let i=t+1;i<e.length;i++){const r=e[t],o=e[i],s=this.traceNetIslands[r]||[],a=this.traceNetIslands[o]||[],c=[],l=[],u=new Set,d=new Set,h=(f,m,y,g)=>{const x=Math.min(f,m),b=Math.max(f,m),w=Math.min(y,g),T=Math.max(y,g);return Math.min(b,T)-Math.max(x,w)>1e-6};for(let f=0;f<s.length;f++){const y=s[f].tracePath;for(let g=0;g<y.length-1;g++){const x=y[g],b=y[g+1],w=Math.abs(x.x-b.x)<1e-6,T=Math.abs(x.y-b.y)<1e-6;if(!(!w&&!T))for(let N=0;N<a.length;N++){const k=a[N].tracePath;for(let M=0;M<k.length-1;M++){const I=k[M],C=k[M+1],U=Math.abs(I.x-C.x)<1e-6,P=Math.abs(I.y-C.y)<1e-6;if(!(!U&&!P)){if(w&&U){if(Math.abs(x.x-I.x)<1e-6&&h(x.y,b.y,I.y,C.y)){const H=`${f}:${g}`,G=`${N}:${M}`;u.has(H)||(c.push({solvedTracePathIndex:f,traceSegmentIndex:g}),u.add(H)),d.has(G)||(l.push({solvedTracePathIndex:N,traceSegmentIndex:M}),d.add(G))}}else if(T&&P&&Math.abs(x.y-I.y)<1e-6&&h(x.x,b.x,I.x,C.x)){const H=`${f}:${g}`,G=`${N}:${M}`;u.has(H)||(c.push({solvedTracePathIndex:f,traceSegmentIndex:g}),u.add(H)),d.has(G)||(l.push({solvedTracePathIndex:N,traceSegmentIndex:M}),d.add(G))}}}}}}if(c.length>0&&l.length>0)return{overlappingTraceSegments:[{connNetId:r,pathsWithOverlap:c},{connNetId:o,pathsWithOverlap:l}]}}return null}_step(){if(this.activeSubSolver?.solved){for(const[t,i]of Object.entries(this.activeSubSolver.correctedTraceMap))this.correctedTraceMap[t]=i;this.activeSubSolver=null,this.traceNetIslands=this.computeTraceNetIslands()}if(this.activeSubSolver){this.activeSubSolver.step();return}const n=this.findNextOverlapIssue();if(n===null){this.solved=!0;return}const{overlappingTraceSegments:e}=n;this.activeSubSolver=new OPt({overlappingTraceSegments:e,traceNetIslands:this.traceNetIslands})}visualize(){if(this.activeSubSolver)return this.activeSubSolver.visualize();const n=FS(this.inputProblem);for(const e of Object.values(this.correctedTraceMap))n.lines.push({points:e.tracePath,strokeColor:"purple",strokeWidth:.005});return n}},lCe=.4,uCe=.2;function dCe(n){return n==="y+"||n==="y-"?{width:uCe,height:lCe}:{width:lCe,height:uCe}}function hCe(n,e,t,i){switch(e){case"x+":return{x:n.x+t/2,y:n.y};case"x-":return{x:n.x-t/2,y:n.y};case"y+":return{x:n.x,y:n.y+i/2};case"y-":return{x:n.x,y:n.y-i/2}}}function pCe(n,e,t){return{minX:n.x-e/2,minY:n.y-t/2,maxX:n.x+e/2,maxY:n.y+t/2}}function LPt(n,e,t,i=1e-9){const r=Math.abs(n.x-e.x)<i,o=Math.abs(n.y-e.y)<i;if(!r&&!o)return!1;if(r){const s=n.x;if(s<t.minX-i||s>t.maxX+i)return!1;const a=Math.min(n.y,e.y),c=Math.max(n.y,e.y);return Math.min(c,t.maxY)-Math.max(a,t.minY)>i}else{const s=n.y;if(s<t.minY-i||s>t.maxY+i)return!1;const a=Math.min(n.x,e.x),c=Math.max(n.x,e.x);return Math.min(c,t.maxX)-Math.max(a,t.minX)>i}}function fCe(n,e,t,i){for(const[r,o]of Object.entries(e)){const s=o.tracePath;for(let a=0;a<s.length-1;a++)if(!(r===t&&a===i)&&LPt(s[a],s[a+1],n))return!0}return!1}function mCe(n){let e=0;const t=n.tracePath;for(let i=0;i<t.length-1;i++)e+=Math.abs(t[i+1].x-t[i].x)+Math.abs(t[i+1].y-t[i].y);return e}function _Ce(n){const{inputProblem:e,inputTraceMap:t,globalConnNetId:i,fallbackTrace:r,mspConnectionPairIds:o}=n,s=Object.fromEntries(e.chips.map(h=>[h.chipId,h]));let a=Object.values(t).filter(h=>h.globalConnNetId===i);if(o&&o.length>0){const h=new Set(o);a=a.filter(f=>f.mspConnectionPairIds.some(m=>h.has(m)))}const c=new Set;for(const h of a)c.add(h.pins[0].chipId),c.add(h.pins[1].chipId);let l=null,u=-1;for(const h of c){const m=s[h]?.pins?.length??0;m>u&&(u=m,l=h)}const d=l==null?[]:a.filter(h=>h.pins[0].chipId===l||h.pins[1].chipId===l);return d.length>0?d.reduce((h,f)=>mCe(h)>=mCe(f)?h:f):r}function zPt(n,e){return[{x:n.x,y:n.y},{x:(n.x+e.x)/2,y:(n.y+e.y)/2},{x:e.x,y:e.y}]}function FPt(n){const{inputProblem:e,inputTraceMap:t,chipObstacleSpatialIndex:i,overlappingSameNetTraceGroup:r,availableOrientations:o}=n,s=r.portOnlyPinId;if(!s)return{placement:null,testedCandidates:[],error:"No portOnlyPinId provided"};let a=null;for(const h of e.chips){const f=h.pins.find(m=>m.pinId===s);if(f){a={x:f.x,y:f.y};break}}if(!a)return{placement:null,testedCandidates:[],error:`Port-only pin not found: ${s}`};const c=o.length>0?o:["x+","x-","y+","y-"],l={x:a.x,y:a.y},u=h=>h==="x+"?{x:1,y:0}:h==="x-"?{x:-1,y:0}:h==="y+"?{x:0,y:1}:{x:0,y:-1},d=[];for(const h of c){const{width:f,height:m}=dCe(h),y=hCe(l,h,f,m),g=u(h),x=.001,b={x:y.x+g.x*x,y:y.y+g.y*x},w=pCe(b,f,m);if(i.getChipsInBounds(w).length>0){d.push({center:b,width:f,height:m,bounds:w,anchor:l,orientation:h,status:"chip-collision",hostSegIndex:-1});continue}if(fCe(w,t,"",-1)){d.push({center:b,width:f,height:m,bounds:w,anchor:l,orientation:h,status:"trace-collision",hostSegIndex:-1});continue}return d.push({center:b,width:f,height:m,bounds:w,anchor:l,orientation:h,status:"ok",hostSegIndex:-1}),{placement:{globalConnNetId:r.globalConnNetId,dcConnNetId:void 0,netId:r.netId,mspConnectionPairIds:[],pinIds:[s],orientation:h,anchorPoint:l,width:f,height:m,center:b},testedCandidates:d}}return{placement:null,testedCandidates:d,error:"Could not place net label at port without collisions"}}function BPt(n){const e=FS(n.inputProblem),t=n.overlappingSameNetTraceGroup.globalConnNetId,i=_Ce({inputProblem:n.inputProblem,inputTraceMap:n.inputTraceMap,globalConnNetId:t,fallbackTrace:n.overlappingSameNetTraceGroup.overlappingTraces}),r=j2(t,.9),o=j2(t,.5);for(const s of Object.values(n.inputTraceMap)){if(s.globalConnNetId!==t)continue;const a=i?s.mspPairId===i.mspPairId:!1;e.lines.push({points:s.tracePath,strokeColor:a?r:o,strokeWidth:a?.006:.003,strokeDash:a?void 0:"4 2"})}for(const s of n.testedCandidates){const a=s.status==="ok"?"rgba(0, 180, 0, 0.25)":s.status==="chip-collision"?"rgba(220, 0, 0, 0.25)":s.status==="trace-collision"?"rgba(220, 140, 0, 0.25)":"rgba(120, 120, 120, 0.15)",c=s.status==="ok"?"green":s.status==="chip-collision"?"red":s.status==="trace-collision"?"orange":"gray";e.rects.push({center:{x:(s.bounds.minX+s.bounds.maxX)/2,y:(s.bounds.minY+s.bounds.maxY)/2},width:s.width,height:s.height,fill:a,strokeColor:c}),e.points.push({x:s.anchor.x,y:s.anchor.y,color:c})}if(n.netLabelPlacement){const s=n.netLabelPlacement;e.rects.push({center:s.center,width:s.width,height:s.height,fill:"rgba(0, 128, 255, 0.35)",strokeColor:"blue"}),e.points.push({x:s.anchorPoint.x,y:s.anchorPoint.y,color:"blue"})}return e}var yCe=class extends iw{inputProblem;inputTraceMap;overlappingSameNetTraceGroup;availableOrientations;chipObstacleSpatialIndex;netLabelPlacement=null;testedCandidates=[];constructor(n){super(),this.inputProblem=n.inputProblem,this.inputTraceMap=n.inputTraceMap,this.overlappingSameNetTraceGroup=n.overlappingSameNetTraceGroup,this.availableOrientations=n.availableOrientations,this.chipObstacleSpatialIndex=n.inputProblem._chipObstacleSpatialIndex??new oCe(n.inputProblem.chips)}_step(){if(this.netLabelPlacement){this.solved=!0;return}if(this.overlappingSameNetTraceGroup.portOnlyPinId){const d=FPt({inputProblem:this.inputProblem,inputTraceMap:this.inputTraceMap,chipObstacleSpatialIndex:this.chipObstacleSpatialIndex,overlappingSameNetTraceGroup:this.overlappingSameNetTraceGroup,availableOrientations:this.availableOrientations});if(this.testedCandidates.push(...d.testedCandidates),d.placement){this.netLabelPlacement=d.placement,this.solved=!0;return}this.failed=!0,this.error=d.error??"Could not place net label at port without collisions";return}const n=this.overlappingSameNetTraceGroup.globalConnNetId;let e=_Ce({inputProblem:this.inputProblem,inputTraceMap:this.inputTraceMap,globalConnNetId:n,fallbackTrace:this.overlappingSameNetTraceGroup.overlappingTraces,mspConnectionPairIds:this.overlappingSameNetTraceGroup.mspConnectionPairIds});if(!e){this.failed=!0,this.error="No host trace found for net label placement";return}const t=new Set(this.overlappingSameNetTraceGroup.mspConnectionPairIds??[]),i=Object.values(this.inputTraceMap).filter(d=>d.globalConnNetId===n&&(t.size===0||d.mspConnectionPairIds.some(h=>t.has(h)))),r=this.availableOrientations.length===1?[e,...i.filter(d=>d.mspPairId!==e.mspPairId)]:[e],o=this.availableOrientations.length>0?this.availableOrientations:["x+","x-","y+","y-"],s=this.availableOrientations.length===1,a=(d,h)=>{switch(d){case"y+":return h.y;case"y-":return-h.y;case"x+":return h.x;case"x-":return-h.x}};let c=null,l=-1/0;const u=1e-6;for(const d of r){const h=d.tracePath.slice();for(let f=0;f<h.length-1;f++){const m=h[f],y=h[f+1],g=Math.abs(m.y-y.y)<u,x=Math.abs(m.x-y.x)<u;if(!g&&!x)continue;const b=g?["y+","y-"]:["x+","x-"],w=o.filter(N=>b.includes(N));if(w.length===0)continue;const T=zPt(m,y);for(const N of T)for(const R of w){const{width:k,height:M}=dCe(R),I=hCe(N,R,k,M),C=R==="x+"?{x:1,y:0}:R==="x-"?{x:-1,y:0}:R==="y+"?{x:0,y:1}:{x:0,y:-1},U=1e-4,P={x:I.x+C.x*U,y:I.y+C.y*U},H=pCe(P,k,M);if(this.chipObstacleSpatialIndex.getChipsInBounds(H).length>0){this.testedCandidates.push({center:P,width:k,height:M,bounds:H,anchor:N,orientation:R,status:"chip-collision",hostSegIndex:f});continue}if(fCe(H,this.inputTraceMap,d.mspPairId,f)){this.testedCandidates.push({center:P,width:k,height:M,bounds:H,anchor:N,orientation:R,status:"trace-collision",hostSegIndex:f});continue}if(this.testedCandidates.push({center:P,width:k,height:M,bounds:H,anchor:N,orientation:R,status:"ok",hostSegIndex:f}),s){const X=a(R,N);X>l+1e-9&&(l=X,c={anchor:N,orientation:R,width:k,height:M,center:I,hostSegIndex:f,dcConnNetId:d.dcConnNetId,mspPairId:d.mspPairId,pinIds:[d.pins[0].pinId,d.pins[1].pinId]});continue}this.netLabelPlacement={globalConnNetId:this.overlappingSameNetTraceGroup.globalConnNetId,dcConnNetId:d.dcConnNetId,netId:this.overlappingSameNetTraceGroup.netId,mspConnectionPairIds:[d.mspPairId],pinIds:[d.pins[0].pinId,d.pins[1].pinId],orientation:R,anchorPoint:N,width:k,height:M,center:I},this.solved=!0;return}}}if(s&&c){this.netLabelPlacement={globalConnNetId:this.overlappingSameNetTraceGroup.globalConnNetId,dcConnNetId:c.dcConnNetId,netId:this.overlappingSameNetTraceGroup.netId,mspConnectionPairIds:[c.mspPairId],pinIds:c.pinIds,orientation:c.orientation,anchorPoint:c.anchor,width:c.width,height:c.height,center:c.center},this.solved=!0;return}this.failed=!0,this.error="Could not place net label without collisions"}visualize(){return BPt(this)}},$Pt=class extends iw{inputProblem;inputTraceMap;overlappingSameNetTraceGroups;queuedOverlappingSameNetTraceGroups;netLabelPlacements=[];currentGroup=null;triedAnyOrientationFallbackForCurrentGroup=!1;constructor(n){super(),this.inputProblem=n.inputProblem,this.inputTraceMap=n.inputTraceMap,this.overlappingSameNetTraceGroups=this.computeOverlappingSameNetTraceGroups(),this.queuedOverlappingSameNetTraceGroups=[...this.overlappingSameNetTraceGroups]}computeOverlappingSameNetTraceGroups(){const n={};for(const r of Object.values(this.inputTraceMap)){const o=r.globalConnNetId;n[o]||(n[o]=[]),n[o].push(r)}const{netConnMap:e}=tCe(this.inputProblem),t={};for(const r of this.inputProblem.directConnections)if(r.netId){const[o,s]=r.pinIds;t[o]=r.netId,t[s]=r.netId}for(const r of this.inputProblem.netConnections)for(const o of r.pinIds)t[o]=r.netId;const i=[];for(const r of Object.keys(e.netMap)){const o=e.getIdsConnectedToNet(r),s={};for(const c of o)s[c]=new Set;for(const c of n[r]??[]){const l=c.pins[0].pinId,u=c.pins[1].pinId;s[l]&&s[u]&&(s[l].add(u),s[u].add(l))}const a=new Set;for(const c of o){if(a.has(c))continue;const l=[c],u=new Set;for(a.add(c);l.length>0;){const h=l.pop();u.add(h);for(const f of s[h]??[])a.has(f)||(a.add(f),l.push(f))}const d=(n[r]??[]).filter(h=>u.has(h.pins[0].pinId)&&u.has(h.pins[1].pinId));if(d.length>0){const h=x=>{let b=0;const w=x.tracePath;for(let T=0;T<w.length-1;T++)b+=Math.abs(w[T+1].x-w[T].x)+Math.abs(w[T+1].y-w[T].y);return b};let f=d[0],m=h(f);for(let x=1;x<d.length;x++){const b=h(d[x]);b>m&&(f=d[x],m=b)}let y=d.find(x=>x.userNetId!=null)?.userNetId;if(!y){for(const x of u)if(t[x]){y=t[x];break}}const g=Array.from(new Set(d.flatMap(x=>x.mspConnectionPairIds??[x.mspPairId])));i.push({globalConnNetId:r,netId:y,overlappingTraces:f,mspConnectionPairIds:g})}else for(const h of u){const f=t[h];f&&i.push({globalConnNetId:r,netId:f,portOnlyPinId:h})}}}return i}_step(){if(this.activeSubSolver?.solved){this.netLabelPlacements.push(this.activeSubSolver.netLabelPlacement),this.activeSubSolver=null,this.currentGroup=null,this.triedAnyOrientationFallbackForCurrentGroup=!1;return}if(this.activeSubSolver?.failed){const t=["x+","x-","y+","y-"],i=this.activeSubSolver.availableOrientations,r=i.length===4&&t.every(o=>i.includes(o));if(!this.triedAnyOrientationFallbackForCurrentGroup&&!r&&this.currentGroup){this.triedAnyOrientationFallbackForCurrentGroup=!0,this.activeSubSolver=new yCe({inputProblem:this.inputProblem,inputTraceMap:this.inputTraceMap,overlappingSameNetTraceGroup:this.currentGroup,availableOrientations:t});return}this.failed=!0,this.error=this.activeSubSolver.error;return}if(this.activeSubSolver){this.activeSubSolver.step();return}const n=this.queuedOverlappingSameNetTraceGroups.shift();if(!n){this.solved=!0;return}const e=n.netId??n.globalConnNetId;this.currentGroup=n,this.triedAnyOrientationFallbackForCurrentGroup=!1,this.activeSubSolver=new yCe({inputProblem:this.inputProblem,inputTraceMap:this.inputTraceMap,overlappingSameNetTraceGroup:n,availableOrientations:this.inputProblem.availableNetLabelOrientations[e]??["x+","x-","y+","y-"]})}visualize(){if(this.activeSubSolver)return this.activeSubSolver.visualize();const n=FS(this.inputProblem);for(const e of Object.values(this.inputTraceMap))n.lines.push({points:e.tracePath,strokeColor:"purple",strokeWidth:.005});for(const e of this.netLabelPlacements)n.rects.push({center:e.center,width:e.width,height:e.height,fill:j2(e.globalConnNetId,.35),strokeColor:j2(e.globalConnNetId,.9)}),n.points.push({x:e.anchorPoint.x,y:e.anchorPoint.y,color:j2(e.globalConnNetId,.9)});return n}},UPt=n=>(function*(){for(let e=0;e<n.length;e++)for(let t=0;t<n.length;t++)e!==t&&(yield[n[e],n[t]])})();function jPt(n,e){if(n.maxY<=e.minY)return(n.maxY+e.minY)/2;if(e.maxY<=n.minY)return(e.maxY+n.minY)/2;const t=Math.max(n.minY,e.minY),i=Math.min(n.maxY,e.maxY);return(t+i)/2}function HPt(n,e){if(n.maxX<=e.minX)return(n.maxX+e.minX)/2;if(e.maxX<=n.minX)return(e.maxX+n.minX)/2;const t=Math.max(n.minX,e.minX),i=Math.min(n.maxX,e.maxX);return(t+i)/2}var VPt=n=>{const e={minX:1/0,maxX:-1/0,minY:1/0,maxY:-1/0};for(const t of n.chips){const i=WE(t);e.minX=Math.min(e.minX,i.minX),e.maxX=Math.max(e.maxX,i.maxX),e.minY=Math.min(e.minY,i.minY),e.maxY=Math.max(e.maxY,i.maxY)}return e},dF=.1,qPt=class extends iw{inputProblem;guidelines;chipPairsGenerator;usedXGuidelines;usedYGuidelines;constructor(n){super(),this.inputProblem=n.inputProblem;const e=VPt(this.inputProblem);this.guidelines=[{orientation:"horizontal",y:e.minY-dF,x:void 0},{orientation:"horizontal",y:e.maxY+dF,x:void 0},{orientation:"vertical",y:void 0,x:e.minX-dF},{orientation:"vertical",y:void 0,x:e.maxX+dF}],this.chipPairsGenerator=UPt(this.inputProblem.chips),this.usedXGuidelines=new Set,this.usedYGuidelines=new Set}getConstructorParams(){return{inputProblem:this.inputProblem}}_step(){const{done:n,value:e}=this.chipPairsGenerator.next();if(n){this.solved=!0;return}const[t,i]=e,r=WE(t),o=WE(i),s=jPt(r,o),a=HPt(r,o);this.usedYGuidelines.has(s)||(this.usedYGuidelines.add(s),this.guidelines.push({orientation:"horizontal",y:s,x:void 0})),this.usedXGuidelines.has(a)||(this.usedXGuidelines.add(a),this.guidelines.push({orientation:"vertical",y:void 0,x:a}))}visualize(){const n=FS(this.inputProblem),e=Nte(n),t=e.maxX-e.minX,i=e.maxY-e.minY;e.minX-=t*.3,e.maxX+=t*.3,e.minY-=i*.3,e.maxY+=i*.3;for(const r of this.guidelines)r.orientation==="horizontal"&&n.lines.push({points:[{x:e.minX,y:r.y},{x:e.maxX,y:r.y}],strokeColor:"rgba(0, 0, 0, 0.5)",strokeDash:"2 2"}),r.orientation==="vertical"&&n.lines.push({points:[{x:r.x,y:e.minY},{x:r.x,y:e.maxY}],strokeColor:"rgba(0, 0, 0, 0.5)",strokeDash:"2 2"});return n}},GPt=n=>{for(const e of n.chips){const t=WE(e);for(const i of e.pins){if(!(i.x>t.minX&&i.x<t.maxX&&i.y>t.minY&&i.y<t.maxY))continue;const o=i.x-t.minX,s=t.maxX-i.x,a=i.y-t.minY,c=t.maxY-i.y,l=Math.min(o,s,a,c);l===o?i.x=t.minX:l===s?i.x=t.maxX:l===a?i.y=t.minY:i.y=t.maxY,i._facingDirection=void 0}}},YPt=n=>{for(const e of n.chips){const t=e.width/2,i=e.height/2;let r=0,o=0;for(const c of e.pins){const l=Math.abs(c.x-e.center.x),u=Math.abs(c.y-e.center.y);l>r&&(r=l),u>o&&(o=u)}const s=Math.max(t,r),a=Math.max(i,o);if(s>t||a>i){e.width=s*2,e.height=a*2;for(const c of e.pins)c._facingDirection=void 0}}};function JA(n,e,t,i={}){return{solverName:n,solverClass:e,getConstructorParams:t,onSolved:i.onSolved}}var XPt=class extends iw{mspConnectionPairSolver;guidelinesSolver;schematicTraceLinesSolver;traceOverlapShiftSolver;netLabelPlacementSolver;startTimeOfPhase;endTimeOfPhase;timeSpentOnPhase;firstIterationOfPhase;inputProblem;pipelineDef=[JA("mspConnectionPairSolver",fPt,()=>[{inputProblem:this.inputProblem}],{onSolved:n=>{}}),JA("guidelinesSolver",qPt,()=>[{inputProblem:this.inputProblem}],{onSolved:n=>{}}),JA("schematicTraceLinesSolver",kPt,()=>[{mspConnectionPairs:this.mspConnectionPairSolver.mspConnectionPairs,dcConnMap:this.mspConnectionPairSolver.dcConnMap,globalConnMap:this.mspConnectionPairSolver.globalConnMap,inputProblem:this.inputProblem,guidelines:this.guidelinesSolver.guidelines,chipMap:this.mspConnectionPairSolver.chipMap}],{onSolved:n=>{}}),JA("traceOverlapShiftSolver",DPt,()=>[{inputProblem:this.inputProblem,inputTracePaths:this.schematicTraceLinesSolver.solvedTracePaths,globalConnMap:this.mspConnectionPairSolver.globalConnMap}],{onSolved:n=>{}}),JA("netLabelPlacementSolver",$Pt,()=>[{inputProblem:this.inputProblem,inputTraceMap:this.traceOverlapShiftSolver?.correctedTraceMap??Object.fromEntries(this.schematicTraceLinesSolver.solvedTracePaths.map(n=>[n.mspPairId,n]))}],{onSolved:n=>{}})];constructor(n){super(),this.inputProblem=this.cloneAndCorrectInputProblem(n),this.MAX_ITERATIONS=1e6,this.startTimeOfPhase={},this.endTimeOfPhase={},this.timeSpentOnPhase={},this.firstIterationOfPhase={}}getConstructorParams(){return this.inputProblem}currentPipelineStepIndex=0;cloneAndCorrectInputProblem(n){const e=structuredClone({...n,_chipObstacleSpatialIndex:void 0});return YPt(e),GPt(e),e}_step(){const n=this.pipelineDef[this.currentPipelineStepIndex];if(!n){this.solved=!0;return}if(this.activeSubSolver){this.activeSubSolver.step(),this.activeSubSolver.solved?(this.endTimeOfPhase[n.solverName]=performance.now(),this.timeSpentOnPhase[n.solverName]=this.endTimeOfPhase[n.solverName]-this.startTimeOfPhase[n.solverName],n.onSolved?.(this),this.activeSubSolver=null,this.currentPipelineStepIndex++):this.activeSubSolver.failed&&(this.error=this.activeSubSolver?.error,this.failed=!0,this.activeSubSolver=null);return}const e=n.getConstructorParams(this);this.activeSubSolver=new n.solverClass(...e),this[n.solverName]=this.activeSubSolver,this.timeSpentOnPhase[n.solverName]=0,this.startTimeOfPhase[n.solverName]=performance.now(),this.firstIterationOfPhase[n.solverName]=this.iterations}solveUntilPhase(n){for(;this.getCurrentPhase().toLowerCase()!==n.toLowerCase();)this.step()}getCurrentPhase(){return this.pipelineDef[this.currentPipelineStepIndex]?.solverName??"none"}visualize(){if(!this.solved&&this.activeSubSolver)return this.activeSubSolver.visualize();const n=[FS(this.inputProblem),...this.pipelineDef.map(e=>this[e.solverName]?.visualize()).filter(Boolean).map((e,t)=>{for(const i of e.rects??[])i.step=t;for(const i of e.points??[])i.step=t;for(const i of e.circles??[])i.step=t;for(const i of e.texts??[])i.step=t;for(const i of e.lines??[])i.step=t;return e})];return n.length===1?n[0]:{points:n.flatMap(e=>e.points||[]),rects:n.flatMap(e=>e.rects||[]),lines:n.flatMap(e=>e.lines||[]),circles:n.flatMap(e=>e.circles||[]),texts:n.flatMap(e=>e.texts||[])}}preview(){return this.activeSubSolver?this.activeSubSolver.preview():super.preview()}};/*! Bundled license information:
930
+ ${a._facingDirection??nCe(a,s)}`,x:a.x,y:a.y,color:j2(a.pinId,.8)})}for(const s of n.directConnections){const[a,c]=s.pinIds,l=o.get(a),u=o.get(c);r.lines.push({points:[{x:l.x,y:l.y},{x:u.x,y:u.y}],strokeColor:j2(s.netId??`${a}-${c}`,t)})}for(const s of n.netConnections){const a=s.pinIds.map(c=>o.get(c));for(let c=0;c<a.length-1;c++)for(let l=c+1;l<a.length;l++){const u=a[c],d=a[l];r.lines.push({points:[{x:u.x,y:u.y},{x:d.x,y:d.y}],strokeColor:j2(s.netId,t),strokeDash:"4 2"})}}return r},fPt=class extends iw{inputProblem;mspConnectionPairs=[];dcConnMap;globalConnMap;queuedDcNetIds;chipMap;maxMspPairDistance;pinMap;userNetIdByPinId;constructor({inputProblem:n}){super(),this.inputProblem=n,this.maxMspPairDistance=n.maxMspPairDistance??1;const{directConnMap:e,netConnMap:t}=tCe(n);this.dcConnMap=e,this.globalConnMap=t,this.pinMap={};for(const i of n.chips)for(const r of i.pins)this.pinMap[r.pinId]={...r,chipId:i.chipId};this.chipMap={};for(const i of n.chips)this.chipMap[i.chipId]=i;this.userNetIdByPinId={};for(const i of n.directConnections)if(i.netId){const[r,o]=i.pinIds;this.userNetIdByPinId[r]=i.netId,this.userNetIdByPinId[o]=i.netId}for(const i of n.netConnections)for(const r of i.pinIds)this.userNetIdByPinId[r]=i.netId;this.queuedDcNetIds=Object.keys(t.netMap)}getConstructorParams(){return{inputProblem:this.inputProblem}}_step(){if(this.queuedDcNetIds.length===0){this.solved=!0;return}const n=this.queuedDcNetIds.shift(),t=this.globalConnMap.getIdsConnectedToNet(n).filter(r=>!!this.pinMap[r]);if(t.length<=1)return;if(t.length===2){const[r,o]=t,s=this.pinMap[r],a=this.pinMap[o];if(Math.abs(s.x-a.x)+Math.abs(s.y-a.y)>this.maxMspPairDistance)return;const l=this.globalConnMap.getNetConnectedToId(r),u=this.userNetIdByPinId[r]??this.userNetIdByPinId[o];this.mspConnectionPairs.push({mspPairId:`${r}-${o}`,dcConnNetId:n,globalConnNetId:l,userNetId:u,pins:[s,a]});return}const i=pPt(t.map(r=>this.pinMap[r]).filter(Boolean),{maxDistance:this.maxMspPairDistance});for(const[r,o]of i){const s=this.globalConnMap.getNetConnectedToId(r),a=this.userNetIdByPinId[r]??this.userNetIdByPinId[o];this.mspConnectionPairs.push({mspPairId:`${r}-${o}`,dcConnNetId:n,globalConnNetId:s,userNetId:a,pins:[this.pinMap[r],this.pinMap[o]]})}}visualize(){const n=FS(this.inputProblem,{chipAlpha:.1,connectionAlpha:.1});for(const e of this.mspConnectionPairs)n.lines.push({points:[{x:e.pins[0].x,y:e.pins[0].y},{x:e.pins[1].x,y:e.pins[1].y}],strokeColor:j2(e.mspPairId,.75)});return n}},mPt=.6,_Pt=1;Cte(ZRt()),Cte(QRt()),Cte(hPt(),1);function Nte(n){const e=[...n.points||[],...(n.lines||[]).flatMap(t=>t.points),...(n.rects||[]).flatMap(t=>{const i=t.width/2,r=t.height/2;return[{x:t.center.x-i,y:t.center.y-r},{x:t.center.x+i,y:t.center.y-r},{x:t.center.x-i,y:t.center.y+r},{x:t.center.x+i,y:t.center.y+r}]}),...(n.circles||[]).flatMap(t=>[{x:t.center.x-t.radius,y:t.center.y},{x:t.center.x+t.radius,y:t.center.y},{x:t.center.x,y:t.center.y-t.radius},{x:t.center.x,y:t.center.y+t.radius}]),...(n.texts||[]).flatMap(t=>{const i=t.fontSize??12,r=t.text.length*i*mPt,o=i*_Pt,s=t.anchorSide??"center",a={top_left:{dx:0,dy:0},top_center:{dx:-r/2,dy:0},top_right:{dx:-r,dy:0},center_left:{dx:0,dy:-o/2},center:{dx:-r/2,dy:-o/2},center_right:{dx:-r,dy:-o/2},bottom_left:{dx:0,dy:-o},bottom_center:{dx:-r/2,dy:-o},bottom_right:{dx:-r,dy:-o}},{dx:c,dy:l}=a[s],u=t.x+c,d=t.y+l;return[{x:u,y:d},{x:u+r,y:d+o}]})];return e.length===0?{minX:-1,maxX:1,minY:-1,maxY:1}:e.reduce((t,i)=>({minX:Math.min(t.minX,i.x),maxX:Math.max(t.maxX,i.x),minY:Math.min(t.minY,i.y),maxY:Math.max(t.maxY,i.y)}),{minX:1/0,maxX:-1/0,minY:1/0,maxY:-1/0})}var yPt=class{constructor(){this.ids=[],this.values=[],this.length=0}clear(){this.length=0}push(e,t){let i=this.length++;for(;i>0;){const r=i-1>>1,o=this.values[r];if(t>=o)break;this.ids[i]=this.ids[r],this.values[i]=o,i=r}this.ids[i]=e,this.values[i]=t}pop(){if(this.length===0)return;const e=this.ids,t=this.values,i=e[0],r=--this.length;if(r>0){const o=e[r],s=t[r];let a=0;const c=r>>1;for(;a<c;){const l=(a<<1)+1,u=l+1,d=l+(+(u<r)&+(t[u]<t[l]));if(t[d]>=s)break;e[a]=e[d],t[a]=t[d],a=d}e[a]=o,t[a]=s}return i}peek(){return this.length>0?this.ids[0]:void 0}peekValue(){return this.length>0?this.values[0]:void 0}shrink(){this.ids.length=this.values.length=this.length}},iCe=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],kte=3,gPt=class ept{static from(e,t=0){if(t%8!==0)throw new Error("byteOffset must be 8-byte aligned.");if(!e||e.byteLength===void 0||e.buffer)throw new Error("Data must be an instance of ArrayBuffer or SharedArrayBuffer.");const[i,r]=new Uint8Array(e,t+0,2);if(i!==251)throw new Error("Data does not appear to be in a Flatbush format.");const o=r>>4;if(o!==kte)throw new Error(`Got v${o} data when expected v${kte}.`);const s=iCe[r&15];if(!s)throw new Error("Unrecognized array type.");const[a]=new Uint16Array(e,t+2,1),[c]=new Uint32Array(e,t+4,1);return new ept(c,a,s,void 0,e,t)}constructor(e,t=16,i=Float64Array,r=ArrayBuffer,o,s=0){if(e===void 0)throw new Error("Missing required argument: numItems.");if(isNaN(e)||e<=0)throw new Error(`Unexpected numItems value: ${e}.`);this.numItems=+e,this.nodeSize=Math.min(Math.max(+t,2),65535),this.byteOffset=s;let a=e,c=a;this._levelBounds=[a*4];do a=Math.ceil(a/this.nodeSize),c+=a,this._levelBounds.push(c*4);while(a!==1);this.ArrayType=i,this.IndexArrayType=c<16384?Uint16Array:Uint32Array;const l=iCe.indexOf(i),u=c*4*i.BYTES_PER_ELEMENT;if(l<0)throw new Error(`Unexpected typed array class: ${i}.`);if(o)this.data=o,this._boxes=new i(o,s+8,c*4),this._indices=new this.IndexArrayType(o,s+8+u,c),this._pos=c*4,this.minX=this._boxes[this._pos-4],this.minY=this._boxes[this._pos-3],this.maxX=this._boxes[this._pos-2],this.maxY=this._boxes[this._pos-1];else{const d=this.data=new r(8+u+c*this.IndexArrayType.BYTES_PER_ELEMENT);this._boxes=new i(d,8,c*4),this._indices=new this.IndexArrayType(d,8+u,c),this._pos=0,this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0,new Uint8Array(d,0,2).set([251,(kte<<4)+l]),new Uint16Array(d,2,1)[0]=t,new Uint32Array(d,4,1)[0]=e}this._queue=new yPt}add(e,t,i=e,r=t){const o=this._pos>>2,s=this._boxes;return this._indices[o]=o,s[this._pos++]=e,s[this._pos++]=t,s[this._pos++]=i,s[this._pos++]=r,e<this.minX&&(this.minX=e),t<this.minY&&(this.minY=t),i>this.maxX&&(this.maxX=i),r>this.maxY&&(this.maxY=r),o}finish(){if(this._pos>>2!==this.numItems)throw new Error(`Added ${this._pos>>2} items when expected ${this.numItems}.`);const e=this._boxes;if(this.numItems<=this.nodeSize){e[this._pos++]=this.minX,e[this._pos++]=this.minY,e[this._pos++]=this.maxX,e[this._pos++]=this.maxY;return}const t=this.maxX-this.minX||1,i=this.maxY-this.minY||1,r=new Uint32Array(this.numItems),o=65535;for(let s=0,a=0;s<this.numItems;s++){const c=e[a++],l=e[a++],u=e[a++],d=e[a++],h=Math.floor(o*((c+u)/2-this.minX)/t),f=Math.floor(o*((l+d)/2-this.minY)/i);r[s]=xPt(h,f)}Ote(r,e,this._indices,0,this.numItems-1,this.nodeSize);for(let s=0,a=0;s<this._levelBounds.length-1;s++){const c=this._levelBounds[s];for(;a<c;){const l=a;let u=e[a++],d=e[a++],h=e[a++],f=e[a++];for(let m=1;m<this.nodeSize&&a<c;m++)u=Math.min(u,e[a++]),d=Math.min(d,e[a++]),h=Math.max(h,e[a++]),f=Math.max(f,e[a++]);this._indices[this._pos>>2]=l,e[this._pos++]=u,e[this._pos++]=d,e[this._pos++]=h,e[this._pos++]=f}}}search(e,t,i,r,o){if(this._pos!==this._boxes.length)throw new Error("Data not yet indexed - call index.finish().");let s=this._boxes.length-4;const a=[],c=[];for(;s!==void 0;){const l=Math.min(s+this.nodeSize*4,rCe(s,this._levelBounds));for(let u=s;u<l;u+=4){const d=this._boxes[u];if(i<d)continue;const h=this._boxes[u+1];if(r<h)continue;const f=this._boxes[u+2];if(e>f)continue;const m=this._boxes[u+3];if(t>m)continue;const y=this._indices[u>>2]|0;s>=this.numItems*4?a.push(y):(o===void 0||o(y,d,h,f,m))&&c.push(y)}s=a.pop()}return c}neighbors(e,t,i=1/0,r=1/0,o){if(this._pos!==this._boxes.length)throw new Error("Data not yet indexed - call index.finish().");let s=this._boxes.length-4;const a=this._queue,c=[],l=r*r;e:for(;s!==void 0;){const u=Math.min(s+this.nodeSize*4,rCe(s,this._levelBounds));for(let d=s;d<u;d+=4){const h=this._indices[d>>2]|0,f=this._boxes[d],m=this._boxes[d+1],y=this._boxes[d+2],g=this._boxes[d+3],x=e<f?f-e:e>y?e-y:0,b=t<m?m-t:t>g?t-g:0,w=x*x+b*b;w>l||(s>=this.numItems*4?a.push(h<<1,w):(o===void 0||o(h))&&a.push((h<<1)+1,w))}for(;a.length&&a.peek()&1;)if(a.peekValue()>l||(c.push(a.pop()>>1),c.length===i))break e;s=a.length?a.pop()>>1:void 0}return a.clear(),c}};function rCe(n,e){let t=0,i=e.length-1;for(;t<i;){const r=t+i>>1;e[r]>n?i=r:t=r+1}return e[t]}function Ote(n,e,t,i,r,o){if(Math.floor(i/o)>=Math.floor(r/o))return;const s=n[i],a=n[i+r>>1],c=n[r];let l=c;const u=Math.max(s,a);c>u?l=u:u===s?l=Math.max(a,c):u===a&&(l=Math.max(s,c));let d=i-1,h=r+1;for(;;){do d++;while(n[d]<l);do h--;while(n[h]>l);if(d>=h)break;vPt(n,e,t,d,h)}Ote(n,e,t,i,h,o),Ote(n,e,t,h+1,r,o)}function vPt(n,e,t,i,r){const o=n[i];n[i]=n[r],n[r]=o;const s=4*i,a=4*r,c=e[s],l=e[s+1],u=e[s+2],d=e[s+3];e[s]=e[a],e[s+1]=e[a+1],e[s+2]=e[a+2],e[s+3]=e[a+3],e[a]=c,e[a+1]=l,e[a+2]=u,e[a+3]=d;const h=t[i];t[i]=t[r],t[r]=h}function xPt(n,e){let t=n^e,i=65535^t,r=65535^(n|e),o=n&(e^65535),s=t|i>>1,a=t>>1^t,c=r>>1^i&o>>1^r,l=t&r>>1^o>>1^o;t=s,i=a,r=c,o=l,s=t&t>>2^i&i>>2,a=t&i>>2^i&(t^i)>>2,c^=t&r>>2^i&o>>2,l^=i&r>>2^(t^i)&o>>2,t=s,i=a,r=c,o=l,s=t&t>>4^i&i>>4,a=t&i>>4^i&(t^i)>>4,c^=t&r>>4^i&o>>4,l^=i&r>>4^(t^i)&o>>4,t=s,i=a,r=c,o=l,c^=t&r>>8^i&o>>8,l^=i&r>>8^(t^i)&o>>8,t=c^c>>1,i=l^l>>1;let u=n^e,d=i|65535^(u|t);return u=(u|u<<8)&16711935,u=(u|u<<4)&252645135,u=(u|u<<2)&858993459,u=(u|u<<1)&1431655765,d=(d|d<<8)&16711935,d=(d|d<<4)&252645135,d=(d|d<<2)&858993459,d=(d|d<<1)&1431655765,(d<<1|u)>>>0}function WE(n){const e=n.width/2,t=n.height/2;return{minX:n.center.x-e,maxX:n.center.x+e,minY:n.center.y-t,maxY:n.center.y+t}}var oCe=class{chips;spatialIndex;spatialIndexIdToChip;constructor(n){this.chips=n.map(e=>({...e,bounds:WE(e),spatialIndexId:null})),this.spatialIndexIdToChip=new Map,this.spatialIndex=new gPt(n.length);for(const e of this.chips)e.spatialIndexId=this.spatialIndex.add(e.bounds.minX,e.bounds.minY,e.bounds.maxX,e.bounds.maxY),this.spatialIndexIdToChip.set(e.spatialIndexId,e);this.spatialIndex.finish()}getChipsInBounds(n){return this.spatialIndex.search(n.minX,n.minY,n.maxX,n.maxY).map(t=>this.spatialIndexIdToChip.get(t))}doesOrthogonalLineIntersectChip(n,e={}){const t=e.excludeChipIds??[],[i,r]=n,{x:o,y:s}=i,{x:a,y:c}=r;return this.getChipsInBounds({minX:Math.min(o,a),minY:Math.min(s,c),maxX:Math.max(o,a),maxY:Math.max(s,c)}).filter(u=>!t.includes(u.chipId)).length>0}},bPt=(n,e,t)=>{const i=[{x:n.x,y:n.y}],r=(n.x+e.x)/2,o=(n.y+e.y)/2,s={x:e.x,y:e.y};switch(e.facingDirection){case"x+":s.x+=t;break;case"x-":s.x-=t;break;case"y+":s.y+=t;break;case"y-":s.y-=t;break}const a=n.facingDirection??"none",c=e.facingDirection??"none",l=h=>{const f=i[i.length-1];(f.x!==h.x||f.y!==h.y)&&i.push(h)},u=Math.abs(n.y-e.y)<=Math.max(1e-6,t*.1),d=Math.abs(n.x-e.x)<=Math.max(1e-6,t*.1);if(a==="none"&&c==="none")l({x:r,y:n.y}),l({x:r,y:e.y});else if(a==="x+"&&c==="y+")n.x>e.x&&n.y<e.y?(l({x:n.x+t,y:n.y}),l({x:n.x+t,y:e.y+t}),l({x:e.x,y:e.y+t})):n.x<e.x&&n.y>e.y?l({x:e.x,y:n.y}):d?(l({x:n.x+t,y:n.y}),l({x:n.x+t,y:e.y+t}),l({x:e.x,y:e.y+t})):n.x<e.x?(l({x:r,y:n.y}),l({x:r,y:s.y}),l({x:e.x,y:s.y})):n.y<=e.y+t?(l({x:n.x+t,y:n.y}),l({x:n.x+t,y:n.y+t}),l({x:e.x,y:n.y+t}),l({x:e.x,y:e.y})):(l({x:n.x+t,y:n.y}),l({x:n.x+t,y:(n.y+e.y)/2}),l({x:e.x,y:(n.y+e.y)/2}));else if(a==="x+"&&c==="x+"&&!u){const h=Math.max(n.x+t,s.x);l({x:h,y:n.y}),l({x:h,y:e.y})}else if(a==="x+"&&c==="x+"&&u)l({x:n.x+t,y:n.y}),l({x:n.x+t,y:n.y+t}),l({x:e.x+t,y:n.y+t}),l({x:e.x+t,y:e.y});else if(a==="x+"&&c==="y-")if(d&&n.y<=e.y)l({x:n.x+t,y:n.y}),l({x:n.x+t,y:o}),l({x:e.x,y:o});else if(d&&n.y>e.y)l({x:n.x+t,y:n.y}),l({x:n.x+t,y:e.y-t}),l({x:e.x,y:e.y-t});else if(n.x<e.x&&n.y<e.y)l({x:e.x,y:n.y});else if(n.x>e.x&&n.y<e.y){const h=n.x+t;l({x:h,y:n.y}),l({x:h,y:o}),l({x:e.x,y:o})}else if(n.x>e.x&&n.y>e.y){const h=n.x+t;l({x:h,y:n.y}),l({x:h,y:s.y}),l({x:e.x,y:s.y})}else n.y===e.y?(l({x:n.x+t,y:n.y}),l({x:n.x+t,y:n.y-t}),l({x:e.x,y:n.y-t})):(l({x:r,y:n.y}),l({x:r,y:s.y}),l({x:e.x,y:s.y}));else if(a==="x+"&&c==="x-"&&n.x+t>=e.x-t&&e.y!==n.y){const h=n.x+t;l({x:h,y:n.y}),l({x:h,y:o}),l({x:s.x,y:o}),l({x:s.x,y:s.y})}else a==="x+"&&c==="x-"&&e.y===n.y&&e.x>n.x||(a==="x+"&&c==="x-"&&e.y===n.y?(l({x:n.x+t,y:n.y}),l({x:n.x+t,y:n.y+t}),l({x:e.x-t,y:n.y+t}),l({x:e.x-t,y:n.y})):(a==="x+"&&l({x:n.x+t,y:n.y}),l({x:r,y:i[i.length-1].y}),l({x:r,y:s.y}),l({x:s.x,y:s.y})));return l({x:e.x,y:e.y}),i},wPt=(n,e,t={})=>{let i=n,r=e,o=!1;(i.x>r.x||i.x===r.x&&i.y>r.y)&&(o=!0,[i,r]=[r,i]);const s=i.facingDirection==="x-",a=i.facingDirection==="y-",c=b=>{const w=s?i.x-(b.x-i.x):b.x,T=a?i.y-(b.y-i.y):b.y;let N=b.facingDirection;return s&&(N==="x+"?N="x-":N==="x-"&&(N="x+")),a&&(N==="y+"?N="y-":N==="y-"&&(N="y+")),{x:w,y:T,facingDirection:N}},l=(b,w)=>{const T=b.x-w.x,N=b.y-w.y,R=w.x+N,k=w.y-T;let M=b.facingDirection;switch(M){case"x+":M="y-";break;case"y-":M="x-";break;case"x-":M="y+";break;case"y+":M="x+";break}return{x:R,y:k,facingDirection:M}},u=(b,w)=>{const T=b.x-w.x,N=b.y-w.y;return{x:w.x-N,y:w.y+T}},d=s||a?c(i):i,h=s||a?c(r):r;let f=d,m=h,y=!1;d.facingDirection==="y+"&&(y=!0,f={...d,facingDirection:"x+"},m=l(h,d));const g=t?.overshoot??.1*Math.max(Math.abs(f.x-m.x),Math.abs(f.y-m.y));let x=bPt(f,m,g);return y&&(x=x.map(b=>u(b,f))),(s||a)&&(x=x.map(({x:b,y:w})=>({x:s?i.x-(b-i.x):b,y:a?i.y-(w-i.y):w}))),o?x.reverse():x},SPt=n=>{switch(n){case"x+":return{x:1,y:0};case"x-":return{x:-1,y:0};case"y+":return{x:0,y:1};case"y-":return{x:0,y:-1}}throw new Error(`Invalid facing direction: ${n}`)},ZE=1e-6,z6=1e-6,EPt=(n,e)=>Math.abs(n.x-e.x)<ZE||Math.abs(n.y-e.y)<ZE,TPt=(n,e)=>{const t=Math.abs(n.x-e.x),i=Math.abs(n.y-e.y);if(t<ZE&&i>=ZE)return"vertical";if(i<ZE&&t>=ZE)return"horizontal";throw new Error("Non-orthogonal or degenerate segment detected.")},sCe=n=>{if(n.length<2)throw new Error("Polyline must have at least two points.");for(let e=0;e<n.length-1;e++){const t=n[e],i=n[e+1];if(!EPt(t,i))throw new Error("Polyline contains a non-orthogonal segment.");if(Math.abs(t.x-i.x)+Math.abs(t.y-i.y)<z6)throw new Error("Polyline contains a near-zero length segment.")}},MPt=(n,e=ZE)=>{const t=n.slice().sort((r,o)=>r-o),i=[];for(const r of t)(i.length===0||Math.abs(r-i[i.length-1])>e)&&i.push(r);return i},aCe=(n,e=9)=>n.map(t=>`${t.x.toFixed(e)},${t.y.toFixed(e)}`).join("|"),CPt=(n,e=z6)=>{if(n.length===0)return[];const t=[{...n[0]}];for(let i=1;i<n.length;i++){const r=n[i],o=t[t.length-1];Math.abs(r.x-o.x)+Math.abs(r.y-o.y)>e&&t.push({...r})}return t},APt=(n,e,t)=>{const i=[];for(const r of e)n==="x"?r.orientation==="vertical"&&typeof r.x=="number"&&i.push(r.x):r.orientation==="horizontal"&&typeof r.y=="number"&&i.push(r.y);return i.push(t),MPt(i)},RPt=(n,e,t)=>TPt(e,t)==="horizontal"?{axis:"y",facing:n.y<=e.y?"y+":"y-"}:{axis:"x",facing:n.x<=e.x?"x+":"x-"},PPt=n=>n.length===0?[[]]:n.reduce((e,t)=>e.flatMap(i=>t.map(r=>[...i,r])),[[]]),IPt=({baseElbow:n,guidelines:e})=>{const t=CPt(n);sCe(t);const i=t.length;if(i-1<5)return{elbowVariants:[t.map(m=>({...m}))],movableSegments:[]};const o=2,s=i-4,a=[],c=[],l=[],u=[];for(let m=o;m<=s;m++){const y=t[m-1],g=t[m],x=t[m+1],b=t[m+2],{axis:w,facing:T}=RPt(y,g,x);a.push({start:{...g},end:{...x},freedom:T,dir:SPt(T)}),c.push(m),l.push(w);const N=w==="x"?g.x:g.y,k=APt(w,e,N).filter(M=>{if(w==="y"){const I=Math.abs(y.y-M),C=Math.abs(b.y-M);return I>z6&&C>z6}else{const I=Math.abs(y.x-M),C=Math.abs(b.x-M);return I>z6&&C>z6}});u.push(k)}const d=PPt(u),h=new Set,f=[];{const m=aCe(t);h.add(m),f.push(t.map(y=>({...y})))}for(const m of d){if(m.length===0)continue;const y=t.map(x=>({...x}));for(let x=0;x<c.length;x++){const b=c[x],w=l[x],T=m[x];typeof T!="number"||Number.isNaN(T)||(w==="y"?(y[b]={...y[b],y:T},y[b+1]={...y[b+1],y:T}):(y[b]={...y[b],x:T},y[b+1]={...y[b+1],x:T}))}try{sCe(y)}catch{continue}const g=aCe(y);h.has(g)||(h.add(g),f.push(y))}return{elbowVariants:f,movableSegments:a}},cCe=({guidelines:n,graphics:e})=>{const t=Nte(e),i=t.maxX-t.minX,r=t.maxY-t.minY;t.minX-=i*.3,t.maxX+=i*.3,t.minY-=r*.3,t.maxY+=r*.3;for(const o of n)o.orientation==="horizontal"&&e.lines.push({points:[{x:t.minX,y:o.y},{x:t.maxX,y:o.y}],strokeColor:"rgba(0, 0, 0, 0.5)",strokeDash:"2 2"}),o.orientation==="vertical"&&e.lines.push({points:[{x:o.x,y:t.minY},{x:o.x,y:t.maxY}],strokeColor:"rgba(0, 0, 0, 0.5)",strokeDash:"2 2"});return e},NPt=class extends iw{pins;inputProblem;guidelines;chipMap;movableSegments;baseElbow;allCandidatePaths;queuedCandidatePaths;chipObstacleSpatialIndex;solvedTracePath=null;constructor(n){super(),this.pins=n.pins,this.inputProblem=n.inputProblem,this.guidelines=n.guidelines,this.chipMap=n.chipMap,this.chipObstacleSpatialIndex=this.inputProblem._chipObstacleSpatialIndex||new oCe(this.inputProblem.chips),this.inputProblem._chipObstacleSpatialIndex||(this.inputProblem._chipObstacleSpatialIndex=this.chipObstacleSpatialIndex);for(const s of this.pins)if(!s._facingDirection){const a=this.chipMap[s.chipId];s._facingDirection=nCe(s,a)}const[e,t]=this.pins;this.baseElbow=wPt({x:e.x,y:e.y,facingDirection:e._facingDirection},{x:t.x,y:t.y,facingDirection:t._facingDirection},{overshoot:.2});const{elbowVariants:i,movableSegments:r}=IPt({baseElbow:this.baseElbow,guidelines:this.guidelines});this.movableSegments=r;const o=s=>{let a=0;for(let c=0;c<s.length-1;c++){const l=s[c+1].x-s[c].x,u=s[c+1].y-s[c].y;a+=Math.sqrt(l*l+u*u)}return a};this.allCandidatePaths=[this.baseElbow,...i],this.queuedCandidatePaths=[...this.allCandidatePaths].sort((s,a)=>o(s)-o(a))}getConstructorParams(){return{chipMap:this.chipMap,pins:this.pins,guidelines:this.guidelines,inputProblem:this.inputProblem}}_step(){if(this.queuedCandidatePaths.length===0){this.failed=!0,this.error="No more candidate elbows, everything had collisions";return}const n=this.queuedCandidatePaths.shift();for(let e=0;e<n.length-1;e++){const t=n[e],i=n[e+1];let r=[];const o=this.pins.some(l=>Math.abs(l.x-t.x)<1e-10&&Math.abs(l.y-t.y)<1e-10),s=this.pins.some(l=>Math.abs(l.x-i.x)<1e-10&&Math.abs(l.y-i.y)<1e-10);if(o){const l=this.pins.find(u=>Math.abs(u.x-t.x)<1e-10&&Math.abs(u.y-t.y)<1e-10);if(l){const u=WE(this.chipMap[l.chipId]),d=i.x-t.x,h=i.y-t.y,f=1e-9,m=Math.abs(t.x-u.minX)<1e-9,y=Math.abs(t.x-u.maxX)<1e-9,g=Math.abs(t.y-u.minY)<1e-9,x=Math.abs(t.y-u.maxY)<1e-9;if(m&&d>f||y&&d<-f||g&&h>f||x&&h<-f)return;r.includes(l.chipId)||r.push(l.chipId)}}if(s){const l=this.pins.find(u=>Math.abs(u.x-i.x)<1e-10&&Math.abs(u.y-i.y)<1e-10);if(l){const u=WE(this.chipMap[l.chipId]),d=t.x-i.x,h=t.y-i.y,f=1e-9,m=Math.abs(i.x-u.minX)<1e-9,y=Math.abs(i.x-u.maxX)<1e-9,g=Math.abs(i.y-u.minY)<1e-9,x=Math.abs(i.y-u.maxY)<1e-9;if(m&&d>f||y&&d<-f||g&&h>f||x&&h<-f)return;r.includes(l.chipId)||r.push(l.chipId)}}const a={excludeChipIds:r};if(this.chipObstacleSpatialIndex.doesOrthogonalLineIntersectChip([t,i],a))return}this.solvedTracePath=n,this.solved=!0}visualize(){const n=FS(this.inputProblem,{chipAlpha:.1,connectionAlpha:.1}),e=Nte(n),t=e.maxX-e.minX,i=e.maxY-e.minY;cCe({guidelines:this.guidelines,graphics:n});for(const{start:r,end:o,dir:s}of this.movableSegments){const a={x:(r.x+o.x)/2,y:(r.y+o.y)/2},c=Math.sqrt((r.x-o.x)**2+(r.y-o.y)**2);n.lines.push({points:[r,a,o],strokeColor:"rgba(0,0,255,0.5)",strokeDash:"2 2"}),n.lines.push({points:[a,{x:a.x+s.x*c*.1,y:a.y+s.y*c*.1}],strokeColor:"rgba(0,0,255,0.5)",strokeDash:"2 2"})}if(!this.solvedTracePath){this.queuedCandidatePaths.length>0&&n.lines.push({points:this.queuedCandidatePaths[0],strokeColor:"orange",strokeWidth:t*.005});for(let r=1;r<this.queuedCandidatePaths.length;r++){const o=this.queuedCandidatePaths[r],s=r/this.queuedCandidatePaths.length;n.lines.push({points:o.map(a=>({x:a.x+s*t*.005,y:a.y+s*i*.005})),strokeColor:j2(`${o.reduce((a,c)=>`${a},${c.x},${c.y}`,"")}`,.5),strokeDash:"8 8"})}}return this.solvedTracePath&&n.lines.push({points:this.solvedTracePath,strokeColor:"green"}),n}},kPt=class extends iw{inputProblem;guidelines;mspConnectionPairs;dcConnMap;globalConnMap;queuedConnectionPairs;chipMap;currentConnectionPair=null;solvedTracePaths=[];failedConnectionPairs=[];constructor(n){super(),this.inputProblem=n.inputProblem,this.mspConnectionPairs=n.mspConnectionPairs,this.dcConnMap=n.dcConnMap,this.globalConnMap=n.globalConnMap,this.guidelines=n.guidelines,this.chipMap=n.chipMap,this.queuedConnectionPairs=[...this.mspConnectionPairs]}getConstructorParams(){return{inputProblem:this.inputProblem,chipMap:this.chipMap,mspConnectionPairs:this.mspConnectionPairs,dcConnMap:this.dcConnMap,globalConnMap:this.globalConnMap,guidelines:this.guidelines}}_step(){if(this.activeSubSolver?.solved&&(this.solvedTracePaths.push({...this.currentConnectionPair,tracePath:this.activeSubSolver.solvedTracePath,mspConnectionPairIds:[this.currentConnectionPair.mspPairId],pinIds:[this.currentConnectionPair.pins[0].pinId,this.currentConnectionPair.pins[1].pinId]}),this.activeSubSolver=null,this.currentConnectionPair=null),this.activeSubSolver?.failed&&(this.currentConnectionPair&&this.failedConnectionPairs.push({...this.currentConnectionPair,error:this.activeSubSolver.error||void 0}),this.activeSubSolver=null,this.currentConnectionPair=null),this.activeSubSolver){this.activeSubSolver.step();return}const n=this.queuedConnectionPairs.shift();if(this.currentConnectionPair=n,!n){this.solved=!0;return}const{pins:e}=n;this.activeSubSolver=new NPt({inputProblem:this.inputProblem,pins:e,chipMap:this.chipMap,guidelines:this.guidelines})}visualize(){if(this.activeSubSolver)return this.activeSubSolver.visualize();const n=FS(this.inputProblem,{chipAlpha:.1,connectionAlpha:.1});cCe({guidelines:this.guidelines,graphics:n});for(const{mspPairId:e,tracePath:t}of this.solvedTracePaths)n.lines.push({points:t,strokeWidth:.005,strokeColor:"green"});for(const e of this.failedConnectionPairs)n.lines.push({points:[{x:e.pins[0].x,y:e.pins[0].y},{x:e.pins[1].x,y:e.pins[1].y}],strokeColor:"red",strokeDash:"4 2",strokeWidth:.004});return n}},OPt=class extends iw{overlappingTraceSegments;traceNetIslands;SHIFT_DISTANCE=.1;correctedTraceMap={};constructor(n){super(),this.overlappingTraceSegments=n.overlappingTraceSegments,this.traceNetIslands=n.traceNetIslands;for(const{connNetId:e,pathsWithOverlap:t}of this.overlappingTraceSegments)for(const{solvedTracePathIndex:i,traceSegmentIndex:r}of t){const o=this.traceNetIslands[e][i].mspPairId;this.correctedTraceMap[o]=this.traceNetIslands[e][i]}}_step(){const e=this.overlappingTraceSegments.map((r,o)=>{const s=Math.floor(o/2)+1;return(o%2===0?-s:s)*this.SHIFT_DISTANCE}),t=(r,o)=>Math.abs(r-o)<1e-6,i=(r,o)=>!!r&&!!o&&t(r.x,o.x)&&t(r.y,o.y);this.overlappingTraceSegments.forEach((r,o)=>{const s=e[o],a=new Map;for(const c of r.pathsWithOverlap)a.has(c.solvedTracePathIndex)||a.set(c.solvedTracePathIndex,new Set),a.get(c.solvedTracePathIndex).add(c.traceSegmentIndex);for(const[c,l]of a){const u=this.traceNetIslands[r.connNetId][c],d=this.correctedTraceMap[u.mspPairId]??u,h=d.tracePath.map(x=>({...x})),f=Array.from(l).sort((x,b)=>x-b),m=new Set,y=new Set;for(const x of f){if(x<0||x>=h.length-1||x===0||x===h.length-2)continue;const b=h[x],w=h[x+1],T=Math.abs(b.x-w.x)<1e-6,N=Math.abs(b.y-w.y)<1e-6;!T&&!N||(T?(m.has(x)||(b.x+=s,m.add(x)),m.has(x+1)||(w.x+=s,m.add(x+1))):N&&(y.has(x)||(b.y+=s,y.add(x)),y.has(x+1)||(w.y+=s,y.add(x+1))))}const g=[];for(const x of h)(g.length===0||!i(g[g.length-1],x))&&g.push(x);this.correctedTraceMap[u.mspPairId]={...d,tracePath:g}}}),this.solved=!0}visualize(){const n={lines:[],points:[],rects:[],circles:[]};for(const e of this.overlappingTraceSegments)for(const{solvedTracePathIndex:t,traceSegmentIndex:i}of e.pathsWithOverlap){const r=this.traceNetIslands[e.connNetId][t],o=r.tracePath[i],s=r.tracePath[i+1];n.lines.push({points:[o,s],strokeColor:"red",strokeWidth:.006})}for(const e of Object.values(this.correctedTraceMap))n.lines.push({points:e.tracePath,strokeColor:"blue",strokeDash:"4 2",strokeWidth:.004});return n}},DPt=class extends iw{inputProblem;inputTracePaths;globalConnMap;traceNetIslands={};correctedTraceMap={};constructor(n){super(),this.inputProblem=n.inputProblem,this.inputTracePaths=n.inputTracePaths,this.globalConnMap=n.globalConnMap;for(const e of this.inputTracePaths){const{mspPairId:t}=e;this.correctedTraceMap[t]=e}this.traceNetIslands=this.computeTraceNetIslands()}getConstructorParams(){return{inputProblem:this.inputProblem,inputTracePaths:this.inputTracePaths,globalConnMap:this.globalConnMap}}computeTraceNetIslands(){const n={};for(const e of this.inputTracePaths){const t=this.correctedTraceMap[e.mspPairId]??e,i=t.globalConnNetId;n[i]||(n[i]=[]),n[i].push(t)}return n}findNextOverlapIssue(){const e=Object.keys(this.traceNetIslands);for(let t=0;t<e.length;t++)for(let i=t+1;i<e.length;i++){const r=e[t],o=e[i],s=this.traceNetIslands[r]||[],a=this.traceNetIslands[o]||[],c=[],l=[],u=new Set,d=new Set,h=(f,m,y,g)=>{const x=Math.min(f,m),b=Math.max(f,m),w=Math.min(y,g),T=Math.max(y,g);return Math.min(b,T)-Math.max(x,w)>1e-6};for(let f=0;f<s.length;f++){const y=s[f].tracePath;for(let g=0;g<y.length-1;g++){const x=y[g],b=y[g+1],w=Math.abs(x.x-b.x)<1e-6,T=Math.abs(x.y-b.y)<1e-6;if(!(!w&&!T))for(let N=0;N<a.length;N++){const k=a[N].tracePath;for(let M=0;M<k.length-1;M++){const I=k[M],C=k[M+1],U=Math.abs(I.x-C.x)<1e-6,P=Math.abs(I.y-C.y)<1e-6;if(!(!U&&!P)){if(w&&U){if(Math.abs(x.x-I.x)<1e-6&&h(x.y,b.y,I.y,C.y)){const H=`${f}:${g}`,G=`${N}:${M}`;u.has(H)||(c.push({solvedTracePathIndex:f,traceSegmentIndex:g}),u.add(H)),d.has(G)||(l.push({solvedTracePathIndex:N,traceSegmentIndex:M}),d.add(G))}}else if(T&&P&&Math.abs(x.y-I.y)<1e-6&&h(x.x,b.x,I.x,C.x)){const H=`${f}:${g}`,G=`${N}:${M}`;u.has(H)||(c.push({solvedTracePathIndex:f,traceSegmentIndex:g}),u.add(H)),d.has(G)||(l.push({solvedTracePathIndex:N,traceSegmentIndex:M}),d.add(G))}}}}}}if(c.length>0&&l.length>0)return{overlappingTraceSegments:[{connNetId:r,pathsWithOverlap:c},{connNetId:o,pathsWithOverlap:l}]}}return null}_step(){if(this.activeSubSolver?.solved){for(const[t,i]of Object.entries(this.activeSubSolver.correctedTraceMap))this.correctedTraceMap[t]=i;this.activeSubSolver=null,this.traceNetIslands=this.computeTraceNetIslands()}if(this.activeSubSolver){this.activeSubSolver.step();return}const n=this.findNextOverlapIssue();if(n===null){this.solved=!0;return}const{overlappingTraceSegments:e}=n;this.activeSubSolver=new OPt({overlappingTraceSegments:e,traceNetIslands:this.traceNetIslands})}visualize(){if(this.activeSubSolver)return this.activeSubSolver.visualize();const n=FS(this.inputProblem);for(const e of Object.values(this.correctedTraceMap))n.lines.push({points:e.tracePath,strokeColor:"purple",strokeWidth:.005});return n}},lCe=.45,uCe=.2;function dCe(n){return n==="y+"||n==="y-"?{width:uCe,height:lCe}:{width:lCe,height:uCe}}function hCe(n,e,t,i){switch(e){case"x+":return{x:n.x+t/2,y:n.y};case"x-":return{x:n.x-t/2,y:n.y};case"y+":return{x:n.x,y:n.y+i/2};case"y-":return{x:n.x,y:n.y-i/2}}}function pCe(n,e,t){return{minX:n.x-e/2,minY:n.y-t/2,maxX:n.x+e/2,maxY:n.y+t/2}}function LPt(n,e,t,i=1e-9){const r=Math.abs(n.x-e.x)<i,o=Math.abs(n.y-e.y)<i;if(!r&&!o)return!1;if(r){const s=n.x;if(s<t.minX-i||s>t.maxX+i)return!1;const a=Math.min(n.y,e.y),c=Math.max(n.y,e.y);return Math.min(c,t.maxY)-Math.max(a,t.minY)>i}else{const s=n.y;if(s<t.minY-i||s>t.maxY+i)return!1;const a=Math.min(n.x,e.x),c=Math.max(n.x,e.x);return Math.min(c,t.maxX)-Math.max(a,t.minX)>i}}function fCe(n,e,t,i){for(const[r,o]of Object.entries(e)){const s=o.tracePath;for(let a=0;a<s.length-1;a++)if(!(r===t&&a===i)&&LPt(s[a],s[a+1],n))return!0}return!1}function mCe(n){let e=0;const t=n.tracePath;for(let i=0;i<t.length-1;i++)e+=Math.abs(t[i+1].x-t[i].x)+Math.abs(t[i+1].y-t[i].y);return e}function _Ce(n){const{inputProblem:e,inputTraceMap:t,globalConnNetId:i,fallbackTrace:r,mspConnectionPairIds:o}=n,s=Object.fromEntries(e.chips.map(h=>[h.chipId,h]));let a=Object.values(t).filter(h=>h.globalConnNetId===i);if(o&&o.length>0){const h=new Set(o);a=a.filter(f=>f.mspConnectionPairIds.some(m=>h.has(m)))}const c=new Set;for(const h of a)c.add(h.pins[0].chipId),c.add(h.pins[1].chipId);let l=null,u=-1;for(const h of c){const m=s[h]?.pins?.length??0;m>u&&(u=m,l=h)}const d=l==null?[]:a.filter(h=>h.pins[0].chipId===l||h.pins[1].chipId===l);return d.length>0?d.reduce((h,f)=>mCe(h)>=mCe(f)?h:f):r}function zPt(n,e){return[{x:n.x,y:n.y},{x:(n.x+e.x)/2,y:(n.y+e.y)/2},{x:e.x,y:e.y}]}function FPt(n){const{inputProblem:e,inputTraceMap:t,chipObstacleSpatialIndex:i,overlappingSameNetTraceGroup:r,availableOrientations:o}=n,s=r.portOnlyPinId;if(!s)return{placement:null,testedCandidates:[],error:"No portOnlyPinId provided"};let a=null;for(const h of e.chips){const f=h.pins.find(m=>m.pinId===s);if(f){a={x:f.x,y:f.y};break}}if(!a)return{placement:null,testedCandidates:[],error:`Port-only pin not found: ${s}`};const c=o.length>0?o:["x+","x-","y+","y-"],l={x:a.x,y:a.y},u=h=>h==="x+"?{x:1,y:0}:h==="x-"?{x:-1,y:0}:h==="y+"?{x:0,y:1}:{x:0,y:-1},d=[];for(const h of c){const{width:f,height:m}=dCe(h),y=hCe(l,h,f,m),g=u(h),x=.001,b={x:y.x+g.x*x,y:y.y+g.y*x},w=pCe(b,f,m);if(i.getChipsInBounds(w).length>0){d.push({center:b,width:f,height:m,bounds:w,anchor:l,orientation:h,status:"chip-collision",hostSegIndex:-1});continue}if(fCe(w,t,"",-1)){d.push({center:b,width:f,height:m,bounds:w,anchor:l,orientation:h,status:"trace-collision",hostSegIndex:-1});continue}return d.push({center:b,width:f,height:m,bounds:w,anchor:l,orientation:h,status:"ok",hostSegIndex:-1}),{placement:{globalConnNetId:r.globalConnNetId,dcConnNetId:void 0,netId:r.netId,mspConnectionPairIds:[],pinIds:[s],orientation:h,anchorPoint:l,width:f,height:m,center:b},testedCandidates:d}}return{placement:null,testedCandidates:d,error:"Could not place net label at port without collisions"}}function BPt(n){const e=FS(n.inputProblem),t=n.overlappingSameNetTraceGroup.globalConnNetId,i=_Ce({inputProblem:n.inputProblem,inputTraceMap:n.inputTraceMap,globalConnNetId:t,fallbackTrace:n.overlappingSameNetTraceGroup.overlappingTraces}),r=j2(t,.9),o=j2(t,.5);for(const s of Object.values(n.inputTraceMap)){if(s.globalConnNetId!==t)continue;const a=i?s.mspPairId===i.mspPairId:!1;e.lines.push({points:s.tracePath,strokeColor:a?r:o,strokeWidth:a?.006:.003,strokeDash:a?void 0:"4 2"})}for(const s of n.testedCandidates){const a=s.status==="ok"?"rgba(0, 180, 0, 0.25)":s.status==="chip-collision"?"rgba(220, 0, 0, 0.25)":s.status==="trace-collision"?"rgba(220, 140, 0, 0.25)":"rgba(120, 120, 120, 0.15)",c=s.status==="ok"?"green":s.status==="chip-collision"?"red":s.status==="trace-collision"?"orange":"gray";e.rects.push({center:{x:(s.bounds.minX+s.bounds.maxX)/2,y:(s.bounds.minY+s.bounds.maxY)/2},width:s.width,height:s.height,fill:a,strokeColor:c}),e.points.push({x:s.anchor.x,y:s.anchor.y,color:c})}if(n.netLabelPlacement){const s=n.netLabelPlacement;e.rects.push({center:s.center,width:s.width,height:s.height,fill:"rgba(0, 128, 255, 0.35)",strokeColor:"blue"}),e.points.push({x:s.anchorPoint.x,y:s.anchorPoint.y,color:"blue"})}return e}var yCe=class extends iw{inputProblem;inputTraceMap;overlappingSameNetTraceGroup;availableOrientations;chipObstacleSpatialIndex;netLabelPlacement=null;testedCandidates=[];constructor(n){super(),this.inputProblem=n.inputProblem,this.inputTraceMap=n.inputTraceMap,this.overlappingSameNetTraceGroup=n.overlappingSameNetTraceGroup,this.availableOrientations=n.availableOrientations,this.chipObstacleSpatialIndex=n.inputProblem._chipObstacleSpatialIndex??new oCe(n.inputProblem.chips)}_step(){if(this.netLabelPlacement){this.solved=!0;return}if(this.overlappingSameNetTraceGroup.portOnlyPinId){const d=FPt({inputProblem:this.inputProblem,inputTraceMap:this.inputTraceMap,chipObstacleSpatialIndex:this.chipObstacleSpatialIndex,overlappingSameNetTraceGroup:this.overlappingSameNetTraceGroup,availableOrientations:this.availableOrientations});if(this.testedCandidates.push(...d.testedCandidates),d.placement){this.netLabelPlacement=d.placement,this.solved=!0;return}this.failed=!0,this.error=d.error??"Could not place net label at port without collisions";return}const n=this.overlappingSameNetTraceGroup.globalConnNetId;let e=_Ce({inputProblem:this.inputProblem,inputTraceMap:this.inputTraceMap,globalConnNetId:n,fallbackTrace:this.overlappingSameNetTraceGroup.overlappingTraces,mspConnectionPairIds:this.overlappingSameNetTraceGroup.mspConnectionPairIds});if(!e){this.failed=!0,this.error="No host trace found for net label placement";return}const t=new Set(this.overlappingSameNetTraceGroup.mspConnectionPairIds??[]),i=Object.values(this.inputTraceMap).filter(d=>d.globalConnNetId===n&&(t.size===0||d.mspConnectionPairIds.some(h=>t.has(h)))),r=this.availableOrientations.length===1?[e,...i.filter(d=>d.mspPairId!==e.mspPairId)]:[e],o=this.availableOrientations.length>0?this.availableOrientations:["x+","x-","y+","y-"],s=this.availableOrientations.length===1,a=(d,h)=>{switch(d){case"y+":return h.y;case"y-":return-h.y;case"x+":return h.x;case"x-":return-h.x}};let c=null,l=-1/0;const u=1e-6;for(const d of r){const h=d.tracePath.slice();for(let f=0;f<h.length-1;f++){const m=h[f],y=h[f+1],g=Math.abs(m.y-y.y)<u,x=Math.abs(m.x-y.x)<u;if(!g&&!x)continue;const b=g?["y+","y-"]:["x+","x-"],w=o.filter(N=>b.includes(N));if(w.length===0)continue;const T=zPt(m,y);for(const N of T)for(const R of w){const{width:k,height:M}=dCe(R),I=hCe(N,R,k,M),C=R==="x+"?{x:1,y:0}:R==="x-"?{x:-1,y:0}:R==="y+"?{x:0,y:1}:{x:0,y:-1},U=1e-4,P={x:I.x+C.x*U,y:I.y+C.y*U},H=pCe(P,k,M);if(this.chipObstacleSpatialIndex.getChipsInBounds(H).length>0){this.testedCandidates.push({center:P,width:k,height:M,bounds:H,anchor:N,orientation:R,status:"chip-collision",hostSegIndex:f});continue}if(fCe(H,this.inputTraceMap,d.mspPairId,f)){this.testedCandidates.push({center:P,width:k,height:M,bounds:H,anchor:N,orientation:R,status:"trace-collision",hostSegIndex:f});continue}if(this.testedCandidates.push({center:P,width:k,height:M,bounds:H,anchor:N,orientation:R,status:"ok",hostSegIndex:f}),s){const X=a(R,N);X>l+1e-9&&(l=X,c={anchor:N,orientation:R,width:k,height:M,center:I,hostSegIndex:f,dcConnNetId:d.dcConnNetId,mspPairId:d.mspPairId,pinIds:[d.pins[0].pinId,d.pins[1].pinId]});continue}this.netLabelPlacement={globalConnNetId:this.overlappingSameNetTraceGroup.globalConnNetId,dcConnNetId:d.dcConnNetId,netId:this.overlappingSameNetTraceGroup.netId,mspConnectionPairIds:[d.mspPairId],pinIds:[d.pins[0].pinId,d.pins[1].pinId],orientation:R,anchorPoint:N,width:k,height:M,center:I},this.solved=!0;return}}}if(s&&c){this.netLabelPlacement={globalConnNetId:this.overlappingSameNetTraceGroup.globalConnNetId,dcConnNetId:c.dcConnNetId,netId:this.overlappingSameNetTraceGroup.netId,mspConnectionPairIds:[c.mspPairId],pinIds:c.pinIds,orientation:c.orientation,anchorPoint:c.anchor,width:c.width,height:c.height,center:c.center},this.solved=!0;return}this.failed=!0,this.error="Could not place net label without collisions"}visualize(){return BPt(this)}},$Pt=class extends iw{inputProblem;inputTraceMap;overlappingSameNetTraceGroups;queuedOverlappingSameNetTraceGroups;netLabelPlacements=[];currentGroup=null;triedAnyOrientationFallbackForCurrentGroup=!1;constructor(n){super(),this.inputProblem=n.inputProblem,this.inputTraceMap=n.inputTraceMap,this.overlappingSameNetTraceGroups=this.computeOverlappingSameNetTraceGroups(),this.queuedOverlappingSameNetTraceGroups=[...this.overlappingSameNetTraceGroups]}computeOverlappingSameNetTraceGroups(){const n={};for(const r of Object.values(this.inputTraceMap)){const o=r.globalConnNetId;n[o]||(n[o]=[]),n[o].push(r)}const{netConnMap:e}=tCe(this.inputProblem),t={};for(const r of this.inputProblem.directConnections)if(r.netId){const[o,s]=r.pinIds;t[o]=r.netId,t[s]=r.netId}for(const r of this.inputProblem.netConnections)for(const o of r.pinIds)t[o]=r.netId;const i=[];for(const r of Object.keys(e.netMap)){const o=e.getIdsConnectedToNet(r),s={};for(const c of o)s[c]=new Set;for(const c of n[r]??[]){const l=c.pins[0].pinId,u=c.pins[1].pinId;s[l]&&s[u]&&(s[l].add(u),s[u].add(l))}const a=new Set;for(const c of o){if(a.has(c))continue;const l=[c],u=new Set;for(a.add(c);l.length>0;){const h=l.pop();u.add(h);for(const f of s[h]??[])a.has(f)||(a.add(f),l.push(f))}const d=(n[r]??[]).filter(h=>u.has(h.pins[0].pinId)&&u.has(h.pins[1].pinId));if(d.length>0){const h=x=>{let b=0;const w=x.tracePath;for(let T=0;T<w.length-1;T++)b+=Math.abs(w[T+1].x-w[T].x)+Math.abs(w[T+1].y-w[T].y);return b};let f=d[0],m=h(f);for(let x=1;x<d.length;x++){const b=h(d[x]);b>m&&(f=d[x],m=b)}let y=d.find(x=>x.userNetId!=null)?.userNetId;if(!y){for(const x of u)if(t[x]){y=t[x];break}}const g=Array.from(new Set(d.flatMap(x=>x.mspConnectionPairIds??[x.mspPairId])));i.push({globalConnNetId:r,netId:y,overlappingTraces:f,mspConnectionPairIds:g})}else for(const h of u){const f=t[h];f&&i.push({globalConnNetId:r,netId:f,portOnlyPinId:h})}}}return i}_step(){if(this.activeSubSolver?.solved){this.netLabelPlacements.push(this.activeSubSolver.netLabelPlacement),this.activeSubSolver=null,this.currentGroup=null,this.triedAnyOrientationFallbackForCurrentGroup=!1;return}if(this.activeSubSolver?.failed){const t=["x+","x-","y+","y-"],i=this.activeSubSolver.availableOrientations,r=i.length===4&&t.every(o=>i.includes(o));if(!this.triedAnyOrientationFallbackForCurrentGroup&&!r&&this.currentGroup){this.triedAnyOrientationFallbackForCurrentGroup=!0,this.activeSubSolver=new yCe({inputProblem:this.inputProblem,inputTraceMap:this.inputTraceMap,overlappingSameNetTraceGroup:this.currentGroup,availableOrientations:t});return}this.failed=!0,this.error=this.activeSubSolver.error;return}if(this.activeSubSolver){this.activeSubSolver.step();return}const n=this.queuedOverlappingSameNetTraceGroups.shift();if(!n){this.solved=!0;return}const e=n.netId??n.globalConnNetId;this.currentGroup=n,this.triedAnyOrientationFallbackForCurrentGroup=!1,this.activeSubSolver=new yCe({inputProblem:this.inputProblem,inputTraceMap:this.inputTraceMap,overlappingSameNetTraceGroup:n,availableOrientations:this.inputProblem.availableNetLabelOrientations[e]??["x+","x-","y+","y-"]})}visualize(){if(this.activeSubSolver)return this.activeSubSolver.visualize();const n=FS(this.inputProblem);for(const e of Object.values(this.inputTraceMap))n.lines.push({points:e.tracePath,strokeColor:"purple",strokeWidth:.005});for(const e of this.netLabelPlacements)n.rects.push({center:e.center,width:e.width,height:e.height,fill:j2(e.globalConnNetId,.35),strokeColor:j2(e.globalConnNetId,.9)}),n.points.push({x:e.anchorPoint.x,y:e.anchorPoint.y,color:j2(e.globalConnNetId,.9)});return n}},UPt=n=>(function*(){for(let e=0;e<n.length;e++)for(let t=0;t<n.length;t++)e!==t&&(yield[n[e],n[t]])})();function jPt(n,e){if(n.maxY<=e.minY)return(n.maxY+e.minY)/2;if(e.maxY<=n.minY)return(e.maxY+n.minY)/2;const t=Math.max(n.minY,e.minY),i=Math.min(n.maxY,e.maxY);return(t+i)/2}function HPt(n,e){if(n.maxX<=e.minX)return(n.maxX+e.minX)/2;if(e.maxX<=n.minX)return(e.maxX+n.minX)/2;const t=Math.max(n.minX,e.minX),i=Math.min(n.maxX,e.maxX);return(t+i)/2}var VPt=n=>{const e={minX:1/0,maxX:-1/0,minY:1/0,maxY:-1/0};for(const t of n.chips){const i=WE(t);e.minX=Math.min(e.minX,i.minX),e.maxX=Math.max(e.maxX,i.maxX),e.minY=Math.min(e.minY,i.minY),e.maxY=Math.max(e.maxY,i.maxY)}return e},dF=.1,qPt=class extends iw{inputProblem;guidelines;chipPairsGenerator;usedXGuidelines;usedYGuidelines;constructor(n){super(),this.inputProblem=n.inputProblem;const e=VPt(this.inputProblem);this.guidelines=[{orientation:"horizontal",y:e.minY-dF,x:void 0},{orientation:"horizontal",y:e.maxY+dF,x:void 0},{orientation:"vertical",y:void 0,x:e.minX-dF},{orientation:"vertical",y:void 0,x:e.maxX+dF}],this.chipPairsGenerator=UPt(this.inputProblem.chips),this.usedXGuidelines=new Set,this.usedYGuidelines=new Set}getConstructorParams(){return{inputProblem:this.inputProblem}}_step(){const{done:n,value:e}=this.chipPairsGenerator.next();if(n){this.solved=!0;return}const[t,i]=e,r=WE(t),o=WE(i),s=jPt(r,o),a=HPt(r,o);this.usedYGuidelines.has(s)||(this.usedYGuidelines.add(s),this.guidelines.push({orientation:"horizontal",y:s,x:void 0})),this.usedXGuidelines.has(a)||(this.usedXGuidelines.add(a),this.guidelines.push({orientation:"vertical",y:void 0,x:a}))}visualize(){const n=FS(this.inputProblem),e=Nte(n),t=e.maxX-e.minX,i=e.maxY-e.minY;e.minX-=t*.3,e.maxX+=t*.3,e.minY-=i*.3,e.maxY+=i*.3;for(const r of this.guidelines)r.orientation==="horizontal"&&n.lines.push({points:[{x:e.minX,y:r.y},{x:e.maxX,y:r.y}],strokeColor:"rgba(0, 0, 0, 0.5)",strokeDash:"2 2"}),r.orientation==="vertical"&&n.lines.push({points:[{x:r.x,y:e.minY},{x:r.x,y:e.maxY}],strokeColor:"rgba(0, 0, 0, 0.5)",strokeDash:"2 2"});return n}},GPt=n=>{for(const e of n.chips){const t=WE(e);for(const i of e.pins){if(!(i.x>t.minX&&i.x<t.maxX&&i.y>t.minY&&i.y<t.maxY))continue;const o=i.x-t.minX,s=t.maxX-i.x,a=i.y-t.minY,c=t.maxY-i.y,l=Math.min(o,s,a,c);l===o?i.x=t.minX:l===s?i.x=t.maxX:l===a?i.y=t.minY:i.y=t.maxY,i._facingDirection=void 0}}},YPt=n=>{for(const e of n.chips){const t=e.width/2,i=e.height/2;let r=0,o=0;for(const c of e.pins){const l=Math.abs(c.x-e.center.x),u=Math.abs(c.y-e.center.y);l>r&&(r=l),u>o&&(o=u)}const s=Math.max(t,r),a=Math.max(i,o);if(s>t||a>i){e.width=s*2,e.height=a*2;for(const c of e.pins)c._facingDirection=void 0}}};function JA(n,e,t,i={}){return{solverName:n,solverClass:e,getConstructorParams:t,onSolved:i.onSolved}}var XPt=class extends iw{mspConnectionPairSolver;guidelinesSolver;schematicTraceLinesSolver;traceOverlapShiftSolver;netLabelPlacementSolver;startTimeOfPhase;endTimeOfPhase;timeSpentOnPhase;firstIterationOfPhase;inputProblem;pipelineDef=[JA("mspConnectionPairSolver",fPt,()=>[{inputProblem:this.inputProblem}],{onSolved:n=>{}}),JA("guidelinesSolver",qPt,()=>[{inputProblem:this.inputProblem}],{onSolved:n=>{}}),JA("schematicTraceLinesSolver",kPt,()=>[{mspConnectionPairs:this.mspConnectionPairSolver.mspConnectionPairs,dcConnMap:this.mspConnectionPairSolver.dcConnMap,globalConnMap:this.mspConnectionPairSolver.globalConnMap,inputProblem:this.inputProblem,guidelines:this.guidelinesSolver.guidelines,chipMap:this.mspConnectionPairSolver.chipMap}],{onSolved:n=>{}}),JA("traceOverlapShiftSolver",DPt,()=>[{inputProblem:this.inputProblem,inputTracePaths:this.schematicTraceLinesSolver.solvedTracePaths,globalConnMap:this.mspConnectionPairSolver.globalConnMap}],{onSolved:n=>{}}),JA("netLabelPlacementSolver",$Pt,()=>[{inputProblem:this.inputProblem,inputTraceMap:this.traceOverlapShiftSolver?.correctedTraceMap??Object.fromEntries(this.schematicTraceLinesSolver.solvedTracePaths.map(n=>[n.mspPairId,n]))}],{onSolved:n=>{}})];constructor(n){super(),this.inputProblem=this.cloneAndCorrectInputProblem(n),this.MAX_ITERATIONS=1e6,this.startTimeOfPhase={},this.endTimeOfPhase={},this.timeSpentOnPhase={},this.firstIterationOfPhase={}}getConstructorParams(){return this.inputProblem}currentPipelineStepIndex=0;cloneAndCorrectInputProblem(n){const e=structuredClone({...n,_chipObstacleSpatialIndex:void 0});return YPt(e),GPt(e),e}_step(){const n=this.pipelineDef[this.currentPipelineStepIndex];if(!n){this.solved=!0;return}if(this.activeSubSolver){this.activeSubSolver.step(),this.activeSubSolver.solved?(this.endTimeOfPhase[n.solverName]=performance.now(),this.timeSpentOnPhase[n.solverName]=this.endTimeOfPhase[n.solverName]-this.startTimeOfPhase[n.solverName],n.onSolved?.(this),this.activeSubSolver=null,this.currentPipelineStepIndex++):this.activeSubSolver.failed&&(this.error=this.activeSubSolver?.error,this.failed=!0,this.activeSubSolver=null);return}const e=n.getConstructorParams(this);this.activeSubSolver=new n.solverClass(...e),this[n.solverName]=this.activeSubSolver,this.timeSpentOnPhase[n.solverName]=0,this.startTimeOfPhase[n.solverName]=performance.now(),this.firstIterationOfPhase[n.solverName]=this.iterations}solveUntilPhase(n){for(;this.getCurrentPhase().toLowerCase()!==n.toLowerCase();)this.step()}getCurrentPhase(){return this.pipelineDef[this.currentPipelineStepIndex]?.solverName??"none"}visualize(){if(!this.solved&&this.activeSubSolver)return this.activeSubSolver.visualize();const n=[FS(this.inputProblem),...this.pipelineDef.map(e=>this[e.solverName]?.visualize()).filter(Boolean).map((e,t)=>{for(const i of e.rects??[])i.step=t;for(const i of e.points??[])i.step=t;for(const i of e.circles??[])i.step=t;for(const i of e.texts??[])i.step=t;for(const i of e.lines??[])i.step=t;return e})];return n.length===1?n[0]:{points:n.flatMap(e=>e.points||[]),rects:n.flatMap(e=>e.rects||[]),lines:n.flatMap(e=>e.lines||[]),circles:n.flatMap(e=>e.circles||[]),texts:n.flatMap(e=>e.texts||[])}}preview(){return this.activeSubSolver?this.activeSubSolver.preview():super.preview()}};/*! Bundled license information:
931
931
 
932
932
  is-buffer/index.js:
933
933
  (*!
@@ -5612,7 +5612,7 @@ $1`).replace(/>(\s*)(?=<!--\s*\/)/g,"> ")}}}),hKe={};bvn(hKe,{all_layers:()=>Gme
5612
5612
  * Copyright (c) 2013-2015, 2017, Jon Schlinkert.
5613
5613
  * Released under the MIT License.
5614
5614
  *)
5615
- */const j9n=({containerClassName:n,...e})=>{const t=ge.useRef(null),[i,r]=ge.useState(620);return ge.useLayoutEffect(()=>{const o=()=>{if(t.current){const a=t.current.clientHeight,c=window.innerHeight;r(Math.min(Math.max(a,620),c))}};o();const s=new ResizeObserver(o);return t.current&&s.observe(t.current),window.addEventListener("resize",o),()=>{s.disconnect(),window.removeEventListener("resize",o)}},[]),he.jsx("div",{ref:t,className:n||"rf-w-full rf-h-full",children:he.jsx(U9n,{...e,height:i})})},H9n='*,: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.17 | 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-10{z-index:10}.rf-z-50{z-index:50}.rf-z-\\[100\\]{z-index:100}.rf-order-1{order:1}.rf-order-2{order:2}.rf-order-3{order:3}.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-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-8{margin-bottom:2rem}.rf-ml-1{margin-left:.25rem}.rf-ml-2{margin-left:.5rem}.rf-ml-auto{margin-left:auto}.rf-mr-1{margin-right:.25rem}.rf-mr-2{margin-right:.5rem}.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-square{aspect-ratio:1/1}.rf-aspect-video{aspect-ratio:16/9}.rf-size-14{height:3.5rem;width:3.5rem}.rf-size-4{height:1rem;width:1rem}.\\!rf-h-2{height:.5rem!important}.\\!rf-h-2\\.5{height:.625rem!important}.\\!rf-h-3{height:.75rem!important}.\\!rf-h-full{height:100%!important}.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-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-\\[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-32{max-height:8rem}.rf-max-h-96{max-height:24rem}.rf-max-h-\\[200px\\]{max-height:200px}.rf-max-h-\\[300px\\]{max-height:300px}.rf-max-h-\\[500px\\]{max-height:500px}.rf-max-h-\\[90vh\\]{max-height:90vh}.rf-max-h-full{max-height:100%}.rf-min-h-0{min-height:0}.rf-min-h-\\[200px\\]{min-height:200px}.rf-min-h-\\[300px\\]{min-height:300px}.rf-min-h-\\[620px\\]{min-height:620px}.rf-min-h-\\[calc\\(100vh-240px\\)\\]{min-height:calc(100vh - 240px)}.\\!rf-w-2{width:.5rem!important}.\\!rf-w-2\\.5{width:.625rem!important}.rf-w-1{width:.25rem}.rf-w-1\\/2{width:50%}.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-72{width:18rem}.rf-w-8{width:2rem}.rf-w-9{width:2.25rem}.rf-w-96{width:24rem}.rf-w-\\[95\\%\\]{width:95%}.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-\\[148px\\]{min-width:148px}.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-\\[660px\\]{max-width:660px!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-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-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-y-1{--tw-translate-y:-0.25rem}.rf-translate-x-\\[-50\\%\\]{--tw-translate-x:-50%}.rf-translate-x-\\[-50\\%\\],.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-translate-y-\\[-50\\%\\]{--tw-translate-y:-50%}.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-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-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-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-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-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-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}.rf-truncate,.rf-whitespace-nowrap{white-space:nowrap}.rf-whitespace-pre-wrap{white-space:pre-wrap}.rf-break-words{overflow-wrap:break-word}.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-sm{border-radius:calc(var(--radius) - 4px)}.rf-rounded-xl{border-radius:.75rem}.rf-border{border-width:1px}.rf-border-2{border-width:2px}.rf-border-b{border-bottom-width:1px}.rf-border-t{border-top-width:1px}.rf-border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/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-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-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-200{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity,1))}.rf-border-primary{border-color:hsl(var(--primary))}.rf-border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/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-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-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-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-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/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-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-popover{background-color:hsl(var(--popover))}.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-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/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-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-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-opacity-50{--tw-bg-opacity:0.5}.rf-fill-current{fill:currentColor}.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-2{padding-left:.5rem;padding-right:.5rem}.rf-px-3{padding-left:.75rem;padding-right:.75rem}.rf-px-4{padding-left:1rem;padding-right:1rem}.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-2{padding-bottom:.5rem}.rf-pb-3{padding-bottom:.75rem}.rf-pb-4{padding-bottom:1rem}.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-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-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.rf-text-2xl{font-size:1.5rem;line-height:2rem}.rf-text-3xl{font-size:1.875rem;line-height:2.25rem}.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-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-5{line-height:1.25rem}.rf-leading-none{line-height:1}.rf-leading-relaxed{line-height:1.625}.rf-leading-tight{line-height:1.25}.rf-tracking-wide{letter-spacing:.025em}.rf-tracking-widest{letter-spacing:.1em}.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-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-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-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-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-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-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-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-opacity-0{opacity:0}.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-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-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.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-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-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-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-200{animation-duration:.2s}.rf-ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.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-border-blue-300:hover{--tw-border-opacity:1;border-color:rgb(147 197 253/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-red-500\\/90:hover{background-color:rgba(239,68,68,.9)}.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-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/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}.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-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-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-opacity-50:disabled{opacity:.5}.rf-group\\/bar:hover .group-hover\\/bar\\:rf-opacity-100{opacity:1}.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-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-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-inline{display:inline}.sm\\:rf-hidden{display:none}.sm\\:rf-w-auto{width: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-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-px-4{padding-left:1rem;padding-right:1rem}.sm\\:rf-text-left{text-align:left}.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-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}.\\[\\&\\>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}',fJe=()=>{ge.useEffect(()=>{if(document.querySelector('style[data-styles="tscircuit-runframe"]'))return;const e=document.createElement("style");e.setAttribute("data-styles","tscircuit-runframe"),e.textContent=H9n,document.head.appendChild(e)},[])},V9n=n=>{ge.useEffect(()=>(n?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[n])},mJe=n=>`hsl(${ub.indexOf(n)*137.5%360}, 70%, 50%)`,q9n=({phaseTimings:n})=>{if(!n)return null;const e=Object.values(n).reduce((t,i)=>t+i,0);return he.jsxs("div",{className:"rf-space-y-2 rf-w-full rf-px-4",children:[he.jsx("div",{className:"rf-relative rf-h-8 rf-flex rf-rounded-sm",children:ub.map(t=>{const i=n[t]||0,r=i/e*100;return he.jsx("div",{className:"rf-group/bar rf-relative rf-overflow-visible",style:{width:`${r}%`,backgroundColor:mJe(t)},children:he.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:[t,": ",i.toFixed(1),"ms"]})},t)})}),he.jsxs("div",{className:"rf-text-xs rf-text-gray-500",children:["Total: ",e.toFixed(2),"ms"]})]})},G9n=({renderLog:n})=>{const[e,t]=ge.useState("chronological");if(!n)return he.jsx("div",{className:"rf-p-4 rf-bg-gray-100 rf-rounded-md",children:"No render log, make sure this tab is open when you render (TODO add a rerender button here)"});const i=Object.entries(n?.phaseTimings??{});e==="chronological"?i.sort((o,s)=>ub.indexOf(o[0])-ub.indexOf(s[0])):i.sort((o,s)=>s[1]-o[1]);const r=i.reduce((o,[s,a])=>o+a,0);return he.jsxs("div",{className:"rf-bg-white",children:[he.jsxs("div",{className:"rf-flex rf-justify-between rf-items-center",children:[he.jsx("div",{children:"Render Logs"}),he.jsxs("div",{className:"rf-mb-4 rf-pr-2 rf-flex rf-text-xs rf-items-center",children:[he.jsx("div",{className:"rf-mr-2",children:"Sort by:"}),he.jsxs("select",{value:e,onChange:o=>t(o.target.value),className:"rf-px-2 rf-py-1 rf-border rf-rounded rf-text-xs",children:[he.jsx("option",{value:"chronological",children:"Phase Order"}),he.jsx("option",{value:"longest",children:"Duration"})]})]})]}),he.jsx(q9n,{phaseTimings:n.phaseTimings}),he.jsxs("table",{className:"rf-w-full rf-text-xs",children:[he.jsx("thead",{children:he.jsxs("tr",{children:[he.jsx("th",{className:"rf-text-left rf-p-2",children:"Phase Order"}),he.jsx("th",{className:"rf-text-left rf-p-2",children:"Phase"}),he.jsx("th",{className:"rf-text-left rf-p-2",children:"Duration (ms)"})]})}),he.jsx("tbody",{children:i.map(([o,s])=>he.jsxs("tr",{children:[he.jsx("td",{className:"rf-p-2",children:ub.indexOf(o)}),he.jsx("td",{className:"rf-p-2",children:o}),he.jsx("td",{className:"rf-p-2",children:he.jsx("div",{className:"rf-w-8",children:he.jsx("div",{className:"rf-h-2 rf-rounded-sm",style:{backgroundColor:mJe(o),width:`${s/r*100}%`}})})}),he.jsx("td",{className:"rf-p-2",children:he.jsxs("div",{className:"rf-flex w-full",children:[he.jsxs("span",{className:"rf-flex-grow",children:[s,"ms"]}),he.jsxs("span",{className:"rf-text-gray-500 rf-pr-2",children:[(s/r*100).toFixed(1),"%"]})]})})]},o))})]})]})},_Je=({errorMessage:n,errorStack:e,circuitJsonErrors:t})=>{ge.useEffect(()=>{if(n){const i=new Error(n);e&&(i.stack=e);try{rB.captureException(i)}catch{}}},[n,e]),ge.useEffect(()=>{if(t&&t.length>0)for(const i of t){const r=new Error(i.message||"Circuit JSON Error");i.stack&&(r.stack=i.stack);try{rB.captureException(r,{error_type:i.type})}catch{}}},[t])},Y9n="0.0.866";function yJe(n,e){const[t,i]=ge.useState(()=>{try{const r=window.localStorage.getItem(n);return r?JSON.parse(r):e}catch(r){return console.error("Error reading from localStorage:",r),e}});return ge.useEffect(()=>{try{window.localStorage.setItem(n,JSON.stringify(t))}catch(r){console.error("Error writing to localStorage:",r)}},[n,t]),[t,i]}const Xj=y7e()(g7e(n=>({lastRunEvalVersion:void 0,setLastRunEvalVersion:e=>{n({lastRunEvalVersion:e})}}),{name:"runframe-runner-store"})),X9n=n=>{const[e,t]=ge.useState([]),[i,r]=ge.useState(null),[o,s]=ge.useState(""),[a,c]=yJe("eval-version-selection",null),l=Xj(f=>f.setLastRunEvalVersion),u=Xj(f=>f.lastRunEvalVersion);return ge.useEffect(()=>{n&&fetch("https://data.jsdelivr.com/v1/package/npm/@tscircuit/eval").then(f=>f.json()).then(f=>{if(Array.isArray(f?.versions)){let m=[...f.versions];f.tags?.latest&&(r(f.tags.latest),m=m.filter(y=>y!==f.tags.latest)),t(m)}}).catch(()=>{})},[n]),ge.useEffect(()=>{n&&(a?(window.TSCIRCUIT_LATEST_EVAL_VERSION=a,l(a)):i&&(window.TSCIRCUIT_LATEST_EVAL_VERSION=i,l(i)))},[n,a,i]),{versions:ge.useMemo(()=>e.filter(f=>f.includes(o)).slice(0,50),[e,o]),latestVersion:i,lastRunEvalVersion:u,search:o,setSearch:s,selectVersion:f=>{c(f),s("")}}},W9n=({snippetNames:n,onSelect:e,onCancel:t,isOpen:i})=>{const[r,o]=ge.useState(""),[s,a]=ge.useState("");if(!i)return null;const c=n.filter(d=>d.toLowerCase().includes(s.toLowerCase())),l=s&&!n.includes(s),u=d=>{d.key==="Enter"&&(c.length===1?o(c[0]):l&&o(s))};return he.jsx("div",{className:"rf-fixed rf-inset-0 rf-bg-black rf-bg-opacity-50 rf-flex rf-items-center rf-justify-center rf-z-[100]",children:he.jsxs("div",{className:"rf-bg-white rf-rounded-lg rf-p-6 rf-w-96",children:[he.jsx("h2",{className:"rf-text-lg rf-font-semibold rf-mb-4",children:"Select Snippet"}),he.jsx("input",{type:"text",className:"rf-w-full rf-px-4 rf-py-2 rf-border rf-rounded rf-mb-4",placeholder:"Search snippets or new snippet name...",value:s,onChange:d=>a(d.target.value),onKeyDown:u}),he.jsxs("div",{className:"rf-h-60 rf-overflow-y-auto",children:[c.map(d=>he.jsx("button",{type:"button",className:`w-full text-left px-4 py-2 rounded hover:bg-gray-100 ${r===d?"bg-blue-50":""}`,onClick:()=>o(d),children:d},d)),l&&he.jsxs("button",{type:"button",className:`w-full text-left px-4 py-2 rounded hover:bg-gray-100 text-blue-500 ${r===s?"bg-blue-50":""}`,onClick:()=>o(s),children:['Create new "',s,'"']})]}),he.jsxs("div",{className:"rf-mt-4 rf-flex rf-justify-end rf-gap-2",children:[he.jsx("button",{type:"button",className:"rf-px-4 rf-py-2 rf-text-gray-600 rf-hover:text-gray-800",onClick:t,children:"Cancel"}),he.jsx("button",{type:"button",className:"rf-px-4 rf-py-2 rf-bg-blue-500 rf-text-white rf-rounded rf-hover:bg-blue-600 rf-disabled:opacity-50",onClick:()=>r&&e(r),disabled:!r,children:r===s?`Create "${r}"`:`Save to ${r}`})]})]})})},Z9n=n=>{const e=ge.useRef(null),t=db(i=>i.recentEvents);ge.useEffect(()=>{if(t.length===0)return;const i=t[0];i.event_id!==e.current&&(n(i),e.current=i.event_id)},[t,n])};var Wj="Dialog",[gJe,vJe]=H5(Wj),[K9n,r5]=gJe(Wj),xJe=n=>{const{__scopeDialog:e,children:t,open:i,defaultOpen:r,onOpenChange:o,modal:s=!0}=n,a=ge.useRef(null),c=ge.useRef(null),[l,u]=QE({prop:i,defaultProp:r??!1,onChange:o,caller:Wj});return he.jsx(K9n,{scope:e,triggerRef:a,contentRef:c,contentId:bv(),titleId:bv(),descriptionId:bv(),open:l,onOpenChange:u,onOpenToggle:ge.useCallback(()=>u(d=>!d),[u]),modal:s,children:t})};xJe.displayName=Wj;var bJe="DialogTrigger",wJe=ge.forwardRef((n,e)=>{const{__scopeDialog:t,...i}=n,r=r5(bJe,t),o=R0(e,r.triggerRef);return he.jsx(Bc.button,{type:"button","aria-haspopup":"dialog","aria-expanded":r.open,"aria-controls":r.contentId,"data-state":Jme(r.open),...i,ref:o,onClick:gs(n.onClick,r.onOpenToggle)})});wJe.displayName=bJe;var Kme="DialogPortal",[Q9n,SJe]=gJe(Kme,{forceMount:void 0}),EJe=n=>{const{__scopeDialog:e,forceMount:t,children:i,container:r}=n,o=r5(Kme,e);return he.jsx(Q9n,{scope:e,forceMount:t,children:ge.Children.map(i,s=>he.jsx(J9,{present:t||o.open,children:he.jsx(gU,{asChild:!0,container:r,children:s})}))})};EJe.displayName=Kme;var Zj="DialogOverlay",TJe=ge.forwardRef((n,e)=>{const t=SJe(Zj,n.__scopeDialog),{forceMount:i=t.forceMount,...r}=n,o=r5(Zj,n.__scopeDialog);return o.modal?he.jsx(J9,{present:i||o.open,children:he.jsx(e2n,{...r,ref:e})}):null});TJe.displayName=Zj;var J9n=KE("DialogOverlay.RemoveScroll"),e2n=ge.forwardRef((n,e)=>{const{__scopeDialog:t,...i}=n,r=r5(Zj,t);return he.jsx(MU,{as:J9n,allowPinchZoom:!0,shards:[r.contentRef],children:he.jsx(Bc.div,{"data-state":Jme(r.open),...i,ref:e,style:{pointerEvents:"auto",...i.style}})})}),r8="DialogContent",MJe=ge.forwardRef((n,e)=>{const t=SJe(r8,n.__scopeDialog),{forceMount:i=t.forceMount,...r}=n,o=r5(r8,n.__scopeDialog);return he.jsx(J9,{present:i||o.open,children:o.modal?he.jsx(t2n,{...r,ref:e}):he.jsx(n2n,{...r,ref:e})})});MJe.displayName=r8;var t2n=ge.forwardRef((n,e)=>{const t=r5(r8,n.__scopeDialog),i=ge.useRef(null),r=R0(e,t.contentRef,i);return ge.useEffect(()=>{const o=i.current;if(o)return qfe(o)},[]),he.jsx(CJe,{...n,ref:r,trapFocus:t.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:gs(n.onCloseAutoFocus,o=>{o.preventDefault(),t.triggerRef.current?.focus()}),onPointerDownOutside:gs(n.onPointerDownOutside,o=>{const s=o.detail.originalEvent,a=s.button===0&&s.ctrlKey===!0;(s.button===2||a)&&o.preventDefault()}),onFocusOutside:gs(n.onFocusOutside,o=>o.preventDefault())})}),n2n=ge.forwardRef((n,e)=>{const t=r5(r8,n.__scopeDialog),i=ge.useRef(!1),r=ge.useRef(!1);return he.jsx(CJe,{...n,ref:e,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:o=>{n.onCloseAutoFocus?.(o),o.defaultPrevented||(i.current||t.triggerRef.current?.focus(),o.preventDefault()),i.current=!1,r.current=!1},onInteractOutside:o=>{n.onInteractOutside?.(o),o.defaultPrevented||(i.current=!0,o.detail.originalEvent.type==="pointerdown"&&(r.current=!0));const s=o.target;t.triggerRef.current?.contains(s)&&o.preventDefault(),o.detail.originalEvent.type==="focusin"&&r.current&&o.preventDefault()}})}),CJe=ge.forwardRef((n,e)=>{const{__scopeDialog:t,trapFocus:i,onOpenAutoFocus:r,onCloseAutoFocus:o,...s}=n,a=r5(r8,t),c=ge.useRef(null),l=R0(e,c);return Mfe(),he.jsxs(he.Fragment,{children:[he.jsx(sU,{asChild:!0,loop:!0,trapped:i,onMountAutoFocus:r,onUnmountAutoFocus:o,children:he.jsx(oU,{role:"dialog",id:a.contentId,"aria-describedby":a.descriptionId,"aria-labelledby":a.titleId,"data-state":Jme(a.open),...s,ref:l,onDismiss:()=>a.onOpenChange(!1)})}),he.jsxs(he.Fragment,{children:[he.jsx(r2n,{titleId:a.titleId}),he.jsx(s2n,{contentRef:c,descriptionId:a.descriptionId})]})]})}),Qme="DialogTitle",AJe=ge.forwardRef((n,e)=>{const{__scopeDialog:t,...i}=n,r=r5(Qme,t);return he.jsx(Bc.h2,{id:r.titleId,...i,ref:e})});AJe.displayName=Qme;var RJe="DialogDescription",PJe=ge.forwardRef((n,e)=>{const{__scopeDialog:t,...i}=n,r=r5(RJe,t);return he.jsx(Bc.p,{id:r.descriptionId,...i,ref:e})});PJe.displayName=RJe;var IJe="DialogClose",NJe=ge.forwardRef((n,e)=>{const{__scopeDialog:t,...i}=n,r=r5(IJe,t);return he.jsx(Bc.button,{type:"button",...i,ref:e,onClick:gs(n.onClick,()=>r.onOpenChange(!1))})});NJe.displayName=IJe;function Jme(n){return n?"open":"closed"}var kJe="DialogTitleWarning",[i2n,OJe]=aOt(kJe,{contentName:r8,titleName:Qme,docsSlug:"dialog"}),r2n=({titleId:n})=>{const e=OJe(kJe),t=`\`${e.contentName}\` requires a \`${e.titleName}\` for the component to be accessible for screen reader users.
5615
+ */const j9n=({containerClassName:n,...e})=>{const t=ge.useRef(null),[i,r]=ge.useState(620);return ge.useLayoutEffect(()=>{const o=()=>{if(t.current){const a=t.current.clientHeight,c=window.innerHeight;r(Math.min(Math.max(a,620),c))}};o();const s=new ResizeObserver(o);return t.current&&s.observe(t.current),window.addEventListener("resize",o),()=>{s.disconnect(),window.removeEventListener("resize",o)}},[]),he.jsx("div",{ref:t,className:n||"rf-w-full rf-h-full",children:he.jsx(U9n,{...e,height:i})})},H9n='*,: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.17 | 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-10{z-index:10}.rf-z-50{z-index:50}.rf-z-\\[100\\]{z-index:100}.rf-order-1{order:1}.rf-order-2{order:2}.rf-order-3{order:3}.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-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-8{margin-bottom:2rem}.rf-ml-1{margin-left:.25rem}.rf-ml-2{margin-left:.5rem}.rf-ml-auto{margin-left:auto}.rf-mr-1{margin-right:.25rem}.rf-mr-2{margin-right:.5rem}.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-square{aspect-ratio:1/1}.rf-aspect-video{aspect-ratio:16/9}.rf-size-14{height:3.5rem;width:3.5rem}.rf-size-4{height:1rem;width:1rem}.\\!rf-h-2{height:.5rem!important}.\\!rf-h-2\\.5{height:.625rem!important}.\\!rf-h-3{height:.75rem!important}.\\!rf-h-full{height:100%!important}.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-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-\\[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-32{max-height:8rem}.rf-max-h-96{max-height:24rem}.rf-max-h-\\[200px\\]{max-height:200px}.rf-max-h-\\[300px\\]{max-height:300px}.rf-max-h-\\[500px\\]{max-height:500px}.rf-max-h-\\[90vh\\]{max-height:90vh}.rf-max-h-full{max-height:100%}.rf-min-h-0{min-height:0}.rf-min-h-\\[200px\\]{min-height:200px}.rf-min-h-\\[300px\\]{min-height:300px}.rf-min-h-\\[620px\\]{min-height:620px}.rf-min-h-\\[calc\\(100vh-240px\\)\\]{min-height:calc(100vh - 240px)}.\\!rf-w-2{width:.5rem!important}.\\!rf-w-2\\.5{width:.625rem!important}.rf-w-1{width:.25rem}.rf-w-1\\/2{width:50%}.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-72{width:18rem}.rf-w-8{width:2rem}.rf-w-9{width:2.25rem}.rf-w-96{width:24rem}.rf-w-\\[95\\%\\]{width:95%}.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-\\[148px\\]{min-width:148px}.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-\\[660px\\]{max-width:660px!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-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-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-y-1{--tw-translate-y:-0.25rem}.rf-translate-x-\\[-50\\%\\]{--tw-translate-x:-50%}.rf-translate-x-\\[-50\\%\\],.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-translate-y-\\[-50\\%\\]{--tw-translate-y:-50%}.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-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-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-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-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-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-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}.rf-truncate,.rf-whitespace-nowrap{white-space:nowrap}.rf-whitespace-pre-wrap{white-space:pre-wrap}.rf-break-words{overflow-wrap:break-word}.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-sm{border-radius:calc(var(--radius) - 4px)}.rf-rounded-xl{border-radius:.75rem}.rf-border{border-width:1px}.rf-border-2{border-width:2px}.rf-border-b{border-bottom-width:1px}.rf-border-t{border-top-width:1px}.rf-border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/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-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-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-200{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity,1))}.rf-border-primary{border-color:hsl(var(--primary))}.rf-border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/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-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-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-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-50{--tw-bg-opacity:1;background-color:rgb(240 253 244/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-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-popover{background-color:hsl(var(--popover))}.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-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/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-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-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-opacity-50{--tw-bg-opacity:0.5}.rf-fill-current{fill:currentColor}.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-2{padding-left:.5rem;padding-right:.5rem}.rf-px-3{padding-left:.75rem;padding-right:.75rem}.rf-px-4{padding-left:1rem;padding-right:1rem}.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-2{padding-bottom:.5rem}.rf-pb-3{padding-bottom:.75rem}.rf-pb-4{padding-bottom:1rem}.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-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-font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.rf-text-2xl{font-size:1.5rem;line-height:2rem}.rf-text-3xl{font-size:1.875rem;line-height:2.25rem}.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-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-5{line-height:1.25rem}.rf-leading-none{line-height:1}.rf-leading-relaxed{line-height:1.625}.rf-leading-tight{line-height:1.25}.rf-tracking-wide{letter-spacing:.025em}.rf-tracking-widest{letter-spacing:.1em}.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-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-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-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-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-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-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-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-opacity-0{opacity:0}.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-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-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.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-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-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-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-200{animation-duration:.2s}.rf-ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.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-border-blue-300:hover{--tw-border-opacity:1;border-color:rgb(147 197 253/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-red-500\\/90:hover{background-color:rgba(239,68,68,.9)}.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-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/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}.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-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-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-opacity-50:disabled{opacity:.5}.rf-group\\/bar:hover .group-hover\\/bar\\:rf-opacity-100{opacity:1}.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-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-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-inline{display:inline}.sm\\:rf-hidden{display:none}.sm\\:rf-w-auto{width: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-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-px-4{padding-left:1rem;padding-right:1rem}.sm\\:rf-text-left{text-align:left}.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-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}.\\[\\&\\>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}',fJe=()=>{ge.useEffect(()=>{if(document.querySelector('style[data-styles="tscircuit-runframe"]'))return;const e=document.createElement("style");e.setAttribute("data-styles","tscircuit-runframe"),e.textContent=H9n,document.head.appendChild(e)},[])},V9n=n=>{ge.useEffect(()=>(n?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[n])},mJe=n=>`hsl(${ub.indexOf(n)*137.5%360}, 70%, 50%)`,q9n=({phaseTimings:n})=>{if(!n)return null;const e=Object.values(n).reduce((t,i)=>t+i,0);return he.jsxs("div",{className:"rf-space-y-2 rf-w-full rf-px-4",children:[he.jsx("div",{className:"rf-relative rf-h-8 rf-flex rf-rounded-sm",children:ub.map(t=>{const i=n[t]||0,r=i/e*100;return he.jsx("div",{className:"rf-group/bar rf-relative rf-overflow-visible",style:{width:`${r}%`,backgroundColor:mJe(t)},children:he.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:[t,": ",i.toFixed(1),"ms"]})},t)})}),he.jsxs("div",{className:"rf-text-xs rf-text-gray-500",children:["Total: ",e.toFixed(2),"ms"]})]})},G9n=({renderLog:n})=>{const[e,t]=ge.useState("chronological");if(!n)return he.jsx("div",{className:"rf-p-4 rf-bg-gray-100 rf-rounded-md",children:"No render log, make sure this tab is open when you render (TODO add a rerender button here)"});const i=Object.entries(n?.phaseTimings??{});e==="chronological"?i.sort((o,s)=>ub.indexOf(o[0])-ub.indexOf(s[0])):i.sort((o,s)=>s[1]-o[1]);const r=i.reduce((o,[s,a])=>o+a,0);return he.jsxs("div",{className:"rf-bg-white",children:[he.jsxs("div",{className:"rf-flex rf-justify-between rf-items-center",children:[he.jsx("div",{children:"Render Logs"}),he.jsxs("div",{className:"rf-mb-4 rf-pr-2 rf-flex rf-text-xs rf-items-center",children:[he.jsx("div",{className:"rf-mr-2",children:"Sort by:"}),he.jsxs("select",{value:e,onChange:o=>t(o.target.value),className:"rf-px-2 rf-py-1 rf-border rf-rounded rf-text-xs",children:[he.jsx("option",{value:"chronological",children:"Phase Order"}),he.jsx("option",{value:"longest",children:"Duration"})]})]})]}),he.jsx(q9n,{phaseTimings:n.phaseTimings}),he.jsxs("table",{className:"rf-w-full rf-text-xs",children:[he.jsx("thead",{children:he.jsxs("tr",{children:[he.jsx("th",{className:"rf-text-left rf-p-2",children:"Phase Order"}),he.jsx("th",{className:"rf-text-left rf-p-2",children:"Phase"}),he.jsx("th",{className:"rf-text-left rf-p-2",children:"Duration (ms)"})]})}),he.jsx("tbody",{children:i.map(([o,s])=>he.jsxs("tr",{children:[he.jsx("td",{className:"rf-p-2",children:ub.indexOf(o)}),he.jsx("td",{className:"rf-p-2",children:o}),he.jsx("td",{className:"rf-p-2",children:he.jsx("div",{className:"rf-w-8",children:he.jsx("div",{className:"rf-h-2 rf-rounded-sm",style:{backgroundColor:mJe(o),width:`${s/r*100}%`}})})}),he.jsx("td",{className:"rf-p-2",children:he.jsxs("div",{className:"rf-flex w-full",children:[he.jsxs("span",{className:"rf-flex-grow",children:[s,"ms"]}),he.jsxs("span",{className:"rf-text-gray-500 rf-pr-2",children:[(s/r*100).toFixed(1),"%"]})]})})]},o))})]})]})},_Je=({errorMessage:n,errorStack:e,circuitJsonErrors:t})=>{ge.useEffect(()=>{if(n){const i=new Error(n);e&&(i.stack=e);try{rB.captureException(i)}catch{}}},[n,e]),ge.useEffect(()=>{if(t&&t.length>0)for(const i of t){const r=new Error(i.message||"Circuit JSON Error");i.stack&&(r.stack=i.stack);try{rB.captureException(r,{error_type:i.type})}catch{}}},[t])},Y9n="0.0.867";function yJe(n,e){const[t,i]=ge.useState(()=>{try{const r=window.localStorage.getItem(n);return r?JSON.parse(r):e}catch(r){return console.error("Error reading from localStorage:",r),e}});return ge.useEffect(()=>{try{window.localStorage.setItem(n,JSON.stringify(t))}catch(r){console.error("Error writing to localStorage:",r)}},[n,t]),[t,i]}const Xj=y7e()(g7e(n=>({lastRunEvalVersion:void 0,setLastRunEvalVersion:e=>{n({lastRunEvalVersion:e})}}),{name:"runframe-runner-store"})),X9n=n=>{const[e,t]=ge.useState([]),[i,r]=ge.useState(null),[o,s]=ge.useState(""),[a,c]=yJe("eval-version-selection",null),l=Xj(f=>f.setLastRunEvalVersion),u=Xj(f=>f.lastRunEvalVersion);return ge.useEffect(()=>{n&&fetch("https://data.jsdelivr.com/v1/package/npm/@tscircuit/eval").then(f=>f.json()).then(f=>{if(Array.isArray(f?.versions)){let m=[...f.versions];f.tags?.latest&&(r(f.tags.latest),m=m.filter(y=>y!==f.tags.latest)),t(m)}}).catch(()=>{})},[n]),ge.useEffect(()=>{n&&(a?(window.TSCIRCUIT_LATEST_EVAL_VERSION=a,l(a)):i&&(window.TSCIRCUIT_LATEST_EVAL_VERSION=i,l(i)))},[n,a,i]),{versions:ge.useMemo(()=>e.filter(f=>f.includes(o)).slice(0,50),[e,o]),latestVersion:i,lastRunEvalVersion:u,search:o,setSearch:s,selectVersion:f=>{c(f),s("")}}},W9n=({snippetNames:n,onSelect:e,onCancel:t,isOpen:i})=>{const[r,o]=ge.useState(""),[s,a]=ge.useState("");if(!i)return null;const c=n.filter(d=>d.toLowerCase().includes(s.toLowerCase())),l=s&&!n.includes(s),u=d=>{d.key==="Enter"&&(c.length===1?o(c[0]):l&&o(s))};return he.jsx("div",{className:"rf-fixed rf-inset-0 rf-bg-black rf-bg-opacity-50 rf-flex rf-items-center rf-justify-center rf-z-[100]",children:he.jsxs("div",{className:"rf-bg-white rf-rounded-lg rf-p-6 rf-w-96",children:[he.jsx("h2",{className:"rf-text-lg rf-font-semibold rf-mb-4",children:"Select Snippet"}),he.jsx("input",{type:"text",className:"rf-w-full rf-px-4 rf-py-2 rf-border rf-rounded rf-mb-4",placeholder:"Search snippets or new snippet name...",value:s,onChange:d=>a(d.target.value),onKeyDown:u}),he.jsxs("div",{className:"rf-h-60 rf-overflow-y-auto",children:[c.map(d=>he.jsx("button",{type:"button",className:`w-full text-left px-4 py-2 rounded hover:bg-gray-100 ${r===d?"bg-blue-50":""}`,onClick:()=>o(d),children:d},d)),l&&he.jsxs("button",{type:"button",className:`w-full text-left px-4 py-2 rounded hover:bg-gray-100 text-blue-500 ${r===s?"bg-blue-50":""}`,onClick:()=>o(s),children:['Create new "',s,'"']})]}),he.jsxs("div",{className:"rf-mt-4 rf-flex rf-justify-end rf-gap-2",children:[he.jsx("button",{type:"button",className:"rf-px-4 rf-py-2 rf-text-gray-600 rf-hover:text-gray-800",onClick:t,children:"Cancel"}),he.jsx("button",{type:"button",className:"rf-px-4 rf-py-2 rf-bg-blue-500 rf-text-white rf-rounded rf-hover:bg-blue-600 rf-disabled:opacity-50",onClick:()=>r&&e(r),disabled:!r,children:r===s?`Create "${r}"`:`Save to ${r}`})]})]})})},Z9n=n=>{const e=ge.useRef(null),t=db(i=>i.recentEvents);ge.useEffect(()=>{if(t.length===0)return;const i=t[0];i.event_id!==e.current&&(n(i),e.current=i.event_id)},[t,n])};var Wj="Dialog",[gJe,vJe]=H5(Wj),[K9n,r5]=gJe(Wj),xJe=n=>{const{__scopeDialog:e,children:t,open:i,defaultOpen:r,onOpenChange:o,modal:s=!0}=n,a=ge.useRef(null),c=ge.useRef(null),[l,u]=QE({prop:i,defaultProp:r??!1,onChange:o,caller:Wj});return he.jsx(K9n,{scope:e,triggerRef:a,contentRef:c,contentId:bv(),titleId:bv(),descriptionId:bv(),open:l,onOpenChange:u,onOpenToggle:ge.useCallback(()=>u(d=>!d),[u]),modal:s,children:t})};xJe.displayName=Wj;var bJe="DialogTrigger",wJe=ge.forwardRef((n,e)=>{const{__scopeDialog:t,...i}=n,r=r5(bJe,t),o=R0(e,r.triggerRef);return he.jsx(Bc.button,{type:"button","aria-haspopup":"dialog","aria-expanded":r.open,"aria-controls":r.contentId,"data-state":Jme(r.open),...i,ref:o,onClick:gs(n.onClick,r.onOpenToggle)})});wJe.displayName=bJe;var Kme="DialogPortal",[Q9n,SJe]=gJe(Kme,{forceMount:void 0}),EJe=n=>{const{__scopeDialog:e,forceMount:t,children:i,container:r}=n,o=r5(Kme,e);return he.jsx(Q9n,{scope:e,forceMount:t,children:ge.Children.map(i,s=>he.jsx(J9,{present:t||o.open,children:he.jsx(gU,{asChild:!0,container:r,children:s})}))})};EJe.displayName=Kme;var Zj="DialogOverlay",TJe=ge.forwardRef((n,e)=>{const t=SJe(Zj,n.__scopeDialog),{forceMount:i=t.forceMount,...r}=n,o=r5(Zj,n.__scopeDialog);return o.modal?he.jsx(J9,{present:i||o.open,children:he.jsx(e2n,{...r,ref:e})}):null});TJe.displayName=Zj;var J9n=KE("DialogOverlay.RemoveScroll"),e2n=ge.forwardRef((n,e)=>{const{__scopeDialog:t,...i}=n,r=r5(Zj,t);return he.jsx(MU,{as:J9n,allowPinchZoom:!0,shards:[r.contentRef],children:he.jsx(Bc.div,{"data-state":Jme(r.open),...i,ref:e,style:{pointerEvents:"auto",...i.style}})})}),r8="DialogContent",MJe=ge.forwardRef((n,e)=>{const t=SJe(r8,n.__scopeDialog),{forceMount:i=t.forceMount,...r}=n,o=r5(r8,n.__scopeDialog);return he.jsx(J9,{present:i||o.open,children:o.modal?he.jsx(t2n,{...r,ref:e}):he.jsx(n2n,{...r,ref:e})})});MJe.displayName=r8;var t2n=ge.forwardRef((n,e)=>{const t=r5(r8,n.__scopeDialog),i=ge.useRef(null),r=R0(e,t.contentRef,i);return ge.useEffect(()=>{const o=i.current;if(o)return qfe(o)},[]),he.jsx(CJe,{...n,ref:r,trapFocus:t.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:gs(n.onCloseAutoFocus,o=>{o.preventDefault(),t.triggerRef.current?.focus()}),onPointerDownOutside:gs(n.onPointerDownOutside,o=>{const s=o.detail.originalEvent,a=s.button===0&&s.ctrlKey===!0;(s.button===2||a)&&o.preventDefault()}),onFocusOutside:gs(n.onFocusOutside,o=>o.preventDefault())})}),n2n=ge.forwardRef((n,e)=>{const t=r5(r8,n.__scopeDialog),i=ge.useRef(!1),r=ge.useRef(!1);return he.jsx(CJe,{...n,ref:e,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:o=>{n.onCloseAutoFocus?.(o),o.defaultPrevented||(i.current||t.triggerRef.current?.focus(),o.preventDefault()),i.current=!1,r.current=!1},onInteractOutside:o=>{n.onInteractOutside?.(o),o.defaultPrevented||(i.current=!0,o.detail.originalEvent.type==="pointerdown"&&(r.current=!0));const s=o.target;t.triggerRef.current?.contains(s)&&o.preventDefault(),o.detail.originalEvent.type==="focusin"&&r.current&&o.preventDefault()}})}),CJe=ge.forwardRef((n,e)=>{const{__scopeDialog:t,trapFocus:i,onOpenAutoFocus:r,onCloseAutoFocus:o,...s}=n,a=r5(r8,t),c=ge.useRef(null),l=R0(e,c);return Mfe(),he.jsxs(he.Fragment,{children:[he.jsx(sU,{asChild:!0,loop:!0,trapped:i,onMountAutoFocus:r,onUnmountAutoFocus:o,children:he.jsx(oU,{role:"dialog",id:a.contentId,"aria-describedby":a.descriptionId,"aria-labelledby":a.titleId,"data-state":Jme(a.open),...s,ref:l,onDismiss:()=>a.onOpenChange(!1)})}),he.jsxs(he.Fragment,{children:[he.jsx(r2n,{titleId:a.titleId}),he.jsx(s2n,{contentRef:c,descriptionId:a.descriptionId})]})]})}),Qme="DialogTitle",AJe=ge.forwardRef((n,e)=>{const{__scopeDialog:t,...i}=n,r=r5(Qme,t);return he.jsx(Bc.h2,{id:r.titleId,...i,ref:e})});AJe.displayName=Qme;var RJe="DialogDescription",PJe=ge.forwardRef((n,e)=>{const{__scopeDialog:t,...i}=n,r=r5(RJe,t);return he.jsx(Bc.p,{id:r.descriptionId,...i,ref:e})});PJe.displayName=RJe;var IJe="DialogClose",NJe=ge.forwardRef((n,e)=>{const{__scopeDialog:t,...i}=n,r=r5(IJe,t);return he.jsx(Bc.button,{type:"button",...i,ref:e,onClick:gs(n.onClick,()=>r.onOpenChange(!1))})});NJe.displayName=IJe;function Jme(n){return n?"open":"closed"}var kJe="DialogTitleWarning",[i2n,OJe]=aOt(kJe,{contentName:r8,titleName:Qme,docsSlug:"dialog"}),r2n=({titleId:n})=>{const e=OJe(kJe),t=`\`${e.contentName}\` requires a \`${e.titleName}\` for the component to be accessible for screen reader users.
5616
5616
 
5617
5617
  If you want to hide the \`${e.titleName}\`, you can wrap it with our VisuallyHidden component.
5618
5618
 
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@tscircuit/runframe",
3
3
  "main": "dist/preview.js",
4
4
  "type": "module",
5
- "version": "0.0.867",
5
+ "version": "0.0.868",
6
6
  "exports": {
7
7
  ".": "./dist/preview.js",
8
8
  "./preview": "./dist/preview.js",
@@ -53,7 +53,7 @@
53
53
  "@tscircuit/math-utils": "^0.0.19",
54
54
  "@tscircuit/pcb-viewer": "1.11.210",
55
55
  "@tscircuit/props": "^0.0.291",
56
- "@tscircuit/schematic-trace-solver": "^0.0.23",
56
+ "@tscircuit/schematic-trace-solver": "^0.0.25",
57
57
  "@tscircuit/schematic-viewer": "2.0.31",
58
58
  "@types/bun": "latest",
59
59
  "@types/debug": "^4.1.12",