tscircuit 0.0.1043 → 0.0.1044-libonly

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.
@@ -5760,7 +5760,7 @@ You passed in: '`+this.raw_options[n]+"'");return g},e.prototype._is_valid_selec
5760
5760
  `);break}}return s}}}),DRt=yg({"node_modules/pretty/index.js"(t,A){var e=uRt(),i=wRt(),o=Fee(),n={unformatted:["code","pre","em","strong","span"],indent_inner_html:!0,indent_char:" ",indent_size:2,sep:`
5761
5761
  `};A.exports=function(g,a){var I=o({},n,a);return g=e.html(g,I),I.ocd===!0?(I.newlines&&(I.sep=I.newlines),s(g,I)):g};function s(r,g){return i(r,g).replace(/^\s+/g,"").replace(/\s+$/g,`
5762
5762
  `).replace(/(\s*<!--)/g,`
5763
- $1`).replace(/>(\s*)(?=<!--\s*\/)/g,"> ")}}});function _ee(t,A,e){if(!A||!e)return;let i=t.get(A);i||(i=new Set,t.set(A,i)),i.add(e);let o=t.get(e);o||(o=new Set,t.set(e,o)),o.add(A)}function mRt(t,A){if(!A.subcircuit_id&&!A.source_group_id)return[...t];const e=new Map;for(const s of t){const r=s[`${s.type}_id`];typeof r=="string"&&e.set(r,s)}const i=new Map;for(const s of t){const r=Object.entries(s);for(const[g,a]of r)if(g!=="parent_source_group_id"){if(g.endsWith("_id")&&typeof a=="string"){const I=e.get(a);_ee(i,s,I)}else if(g.endsWith("_ids")&&Array.isArray(a)){for(const I of a)if(typeof I=="string"){const c=e.get(I);_ee(i,s,c)}}}}const o=[],n=new Set;for(const s of t)(A.subcircuit_id&&s.subcircuit_id===A.subcircuit_id||A.source_group_id&&(s.source_group_id===A.source_group_id||Array.isArray(s.member_source_group_ids)&&s.member_source_group_ids.includes(A.source_group_id)))&&(o.push(s),n.add(s));for(;o.length>0;){const s=o.shift(),r=i.get(s);if(r)for(const g of r)n.has(g)||(n.add(g),o.push(g))}return t.filter(s=>n.has(s))}var d5=(t,A={})=>{const e=t;let i=e._internal_store;if(!i){i={counts:{},editCount:0},e._internal_store=i;for(const n of e){const s=n.type,r=n[`${s}_id`];if(!r)continue;const g=Number.parseInt(r.split("_").pop());Number.isNaN(g)||(i.counts[s]=Math.max(i.counts[s]??0,g))}}return new Proxy({},{get:(n,s)=>{if(s==="toArray")return()=>(e.editCount=i.editCount,e);if(s==="editCount")return i.editCount;if(s==="subtree")return g=>d5(mRt(e,g),A);const r=s;return{get:g=>e.find(a=>a.type===r&&a[`${r}_id`]===g),getUsing:g=>{const a=Object.keys(g);if(a.length!==1)throw new Error("getUsing requires exactly one key, e.g. { pcb_component_id }");const I=a[0],c=I.replace("_id",""),B=e.find(C=>C.type===c&&C[I]===g[I]);return B?e.find(C=>C.type===r&&C[`${r}_id`]===B[`${r}_id`]):null},getWhere:g=>{const a=Object.keys(g);return e.find(I=>I.type===r&&a.every(c=>I[c]===g[c]))},list:g=>{const a=g?Object.keys(g):[];return e.filter(I=>I.type===r&&a.every(c=>I[c]===g[c]))},insert:g=>{i.counts[r]??=-1,i.counts[r]++;const a=i.counts[r],I={type:r,[`${r}_id`]:`${r}_${a}`,...g};return A.validateInserts&&(UAe[r]??ylA).parse(I),e.push(I),i.editCount++,I},delete:g=>{const a=e.find(I=>I[`${r}_id`]===g);a&&(e.splice(e.indexOf(a),1),i.editCount++)},update:(g,a)=>{const I=e.find(c=>c.type===r&&c[`${r}_id`]===g);return I?(Object.assign(I,a),i.editCount++,I):null},select:g=>{if(r==="source_component")return e.find(a=>a.type==="source_component"&&a.name===g.replace(/\./g,""));if(r==="pcb_port"||r==="source_port"||r==="schematic_port"){const[a,I]=g.replace(/\./g,"").split(/[\s\>]+/),c=e.find(C=>C.type==="source_component"&&C.name===a);if(!c)return null;const B=e.find(C=>C.type==="source_port"&&C.source_component_id===c.source_component_id&&(C.name===I||(C.port_hints??[]).includes(I)));if(!B)return null;if(r==="source_port")return B;if(r==="pcb_port")return e.find(C=>C.type==="pcb_port"&&C.source_port_id===B.source_port_id);if(r==="schematic_port")return e.find(C=>C.type==="schematic_port"&&C.source_port_id===B.source_port_id)}}}}})};d5.unparsed=d5;var Ck=d5;function WlA(t){const A=t.type;return`${A}:${t[`${A}_id`]}`}var Ree=(t,A={})=>{let e=t._internal_store_indexed;if(!e){e={counts:{},editCount:0,indexes:{}};for(const s of t){const r=s.type,g=s[`${r}_id`];if(!g)continue;const a=Number.parseInt(g.split("_").pop()||"");Number.isNaN(a)||(e.counts[r]=Math.max(e.counts[r]??0,a))}const o=A.indexConfig||{},n=e.indexes;if(o.byId&&(n.byId=new Map),o.byType&&(n.byType=new Map),o.byRelation&&(n.byRelation=new Map),o.bySubcircuit&&(n.bySubcircuit=new Map),o.byCustomField&&o.byCustomField.length>0){n.byCustomField=new Map;for(const s of o.byCustomField)n.byCustomField.set(s,new Map)}for(const s of t){if(o.byId){const r=WlA(s);n.byId.set(r,s)}if(o.byType){const r=n.byType.get(s.type)||[];r.push(s),n.byType.set(s.type,r)}if(o.byRelation){const r=Object.entries(s);for(const[g,a]of r)if(g.endsWith("_id")&&g!==`${s.type}_id`&&typeof a=="string"){const I=n.byRelation.get(g)||new Map,c=I.get(a)||[];c.push(s),I.set(a,c),n.byRelation.set(g,I)}}if(o.bySubcircuit&&"subcircuit_id"in s){const r=s.subcircuit_id;if(r&&typeof r=="string"){const g=n.bySubcircuit.get(r)||[];g.push(s),n.bySubcircuit.set(r,g)}}if(o.byCustomField&&n.byCustomField){for(const r of o.byCustomField)if(r in s){const g=s[r];if(g!==void 0&&(typeof g=="string"||typeof g=="number")){const a=String(g),I=n.byCustomField.get(r),c=I.get(a)||[];c.push(s),I.set(a,c)}}}}t._internal_store_indexed=e}return new Proxy({},{get:(o,n)=>{if(n==="toArray")return()=>(t.editCount=e.editCount,t);if(n==="editCount")return e.editCount;const s=n;return{get:r=>{const g=A.indexConfig||{};return g.byId&&e.indexes.byId?e.indexes.byId.get(`${s}:${r}`)||null:g.byType&&e.indexes.byType?(e.indexes.byType.get(s)||[]).find(I=>I[`${s}_id`]===r)||null:t.find(a=>a.type===s&&a[`${s}_id`]===r)||null},getUsing:r=>{const g=A.indexConfig||{},a=Object.keys(r);if(a.length!==1)throw new Error("getUsing requires exactly one key, e.g. { pcb_component_id }");const I=a[0],c=I.replace("_id","");if(g.byRelation&&e.indexes.byRelation){const C=e.indexes.byRelation.get(I);if(C){const l=(C.get(r[I])||[]).find(h=>h.type===c);if(!l)return null;const E=l[`${s}_id`];return g.byId&&e.indexes.byId?e.indexes.byId.get(`${s}:${E}`)||null:g.byType&&e.indexes.byType?(e.indexes.byType.get(s)||[]).find(u=>u[`${s}_id`]===E)||null:t.find(h=>h.type===s&&h[`${s}_id`]===E)||null}}const B=t.find(C=>C.type===c&&C[I]===r[I]);return B&&t.find(C=>C.type===s&&C[`${s}_id`]===B[`${s}_id`])||null},getWhere:r=>{const g=A.indexConfig||{},a=Object.keys(r);if(a.length===1&&g.byCustomField&&e.indexes.byCustomField){const I=a[0],c=e.indexes.byCustomField.get(I);if(c){const B=String(r[I]);return(c.get(B)||[]).find(Q=>Q.type===s)||null}}if("subcircuit_id"in r&&g.bySubcircuit&&e.indexes.bySubcircuit){const I=r.subcircuit_id;return(e.indexes.bySubcircuit.get(I)||[]).find(B=>B.type===s&&a.every(C=>B[C]===r[C]))||null}return g.byType&&e.indexes.byType?(e.indexes.byType.get(s)||[]).find(c=>a.every(B=>c[B]===r[B]))||null:t.find(I=>I.type===s&&a.every(c=>I[c]===r[c]))||null},list:r=>{const g=A.indexConfig||{},a=r?Object.keys(r):[];if(a.length===0&&g.byType&&e.indexes.byType)return e.indexes.byType.get(s)||[];if(a.length===1&&a[0]==="subcircuit_id"&&g.bySubcircuit&&e.indexes.bySubcircuit){const c=r.subcircuit_id;return(e.indexes.bySubcircuit.get(c)||[]).filter(C=>C.type===s)}let I;return g.byType&&e.indexes.byType?I=e.indexes.byType.get(s)||[]:I=t.filter(c=>c.type===s),a.length>0?I.filter(c=>a.every(B=>c[B]===r[B])):I},insert:r=>{e.counts[s]??=-1,e.counts[s]++;const g=e.counts[s],a={type:s,[`${s}_id`]:`${s}_${g}`,...r};A.validateInserts&&(UAe[s]??ylA).parse(a),t.push(a),e.editCount++;const I=A.indexConfig||{};if(I.byId&&e.indexes.byId){const c=WlA(a);e.indexes.byId.set(c,a)}if(I.byType&&e.indexes.byType){const c=e.indexes.byType.get(s)||[];c.push(a),e.indexes.byType.set(s,c)}if(I.byRelation&&e.indexes.byRelation){const c=Object.entries(a);for(const[B,C]of c)if(B.endsWith("_id")&&B!==`${a.type}_id`&&typeof C=="string"){const Q=e.indexes.byRelation.get(B)||new Map,l=Q.get(C)||[];l.push(a),Q.set(C,l),e.indexes.byRelation.set(B,Q)}}if(I.bySubcircuit&&e.indexes.bySubcircuit&&"subcircuit_id"in a){const c=a.subcircuit_id;if(c&&typeof c=="string"){const B=e.indexes.bySubcircuit.get(c)||[];B.push(a),e.indexes.bySubcircuit.set(c,B)}}if(I.byCustomField&&e.indexes.byCustomField){for(const c of I.byCustomField)if(c in a){const B=a[c];if(B!==void 0&&(typeof B=="string"||typeof B=="number")){const C=String(B),Q=e.indexes.byCustomField.get(c),l=Q.get(C)||[];l.push(a),Q.set(C,l)}}}return a},delete:r=>{const g=A.indexConfig||{};let a;if(g.byId&&e.indexes.byId?a=e.indexes.byId.get(`${s}:${r}`):g.byType&&e.indexes.byType?a=(e.indexes.byType.get(s)||[]).find(B=>B[`${s}_id`]===r):a=t.find(c=>c[`${s}_id`]===r),!a)return;const I=t.indexOf(a);if(I>=0&&(t.splice(I,1),e.editCount++),g.byId&&e.indexes.byId){const c=WlA(a);e.indexes.byId.delete(c)}if(g.byType&&e.indexes.byType){const B=(e.indexes.byType.get(s)||[]).filter(C=>C[`${s}_id`]!==r);e.indexes.byType.set(s,B)}if(g.byRelation&&e.indexes.byRelation)for(const[c,B]of e.indexes.byRelation.entries())for(const[C,Q]of B.entries()){const l=Q.filter(E=>E!==a);l.length===0?B.delete(C):B.set(C,l)}if(g.bySubcircuit&&e.indexes.bySubcircuit&&"subcircuit_id"in a){const c=a.subcircuit_id;if(c){const C=(e.indexes.bySubcircuit.get(c)||[]).filter(Q=>Q!==a);C.length===0?e.indexes.bySubcircuit.delete(c):e.indexes.bySubcircuit.set(c,C)}}if(g.byCustomField&&e.indexes.byCustomField)for(const c of e.indexes.byCustomField.values())for(const[B,C]of c.entries()){const Q=C.filter(l=>l!==a);Q.length===0?c.delete(B):c.set(B,Q)}},update:(r,g)=>{const a=A.indexConfig||{};let I;if(a.byId&&e.indexes.byId?I=e.indexes.byId.get(`${s}:${r}`):a.byType&&e.indexes.byType?I=(e.indexes.byType.get(s)||[]).find(B=>B[`${s}_id`]===r):I=t.find(c=>c.type===s&&c[`${s}_id`]===r),!I)return null;if(a.byRelation&&e.indexes.byRelation){const c=Object.entries(I);for(const[B,C]of c)if(B.endsWith("_id")&&B!==`${I.type}_id`&&typeof C=="string"&&B in g&&g[B]!==C){const Q=e.indexes.byRelation.get(B);if(Q){const E=(Q.get(C)||[]).filter(h=>h!==I);E.length===0?Q.delete(C):Q.set(C,E)}}}if(a.bySubcircuit&&e.indexes.bySubcircuit&&"subcircuit_id"in I&&"subcircuit_id"in g){const c=I.subcircuit_id,B=g.subcircuit_id;if(c!==B){const Q=(e.indexes.bySubcircuit.get(c)||[]).filter(l=>l!==I);Q.length===0?e.indexes.bySubcircuit.delete(c):e.indexes.bySubcircuit.set(c,Q)}}if(a.byCustomField&&e.indexes.byCustomField){for(const c of a.byCustomField)if(c in I&&c in g&&I[c]!==g[c]){const B=e.indexes.byCustomField.get(c);if(B){const C=String(I[c]),l=(B.get(C)||[]).filter(E=>E!==I);l.length===0?B.delete(C):B.set(C,l)}}}if(Object.assign(I,g),e.editCount++,a.byRelation&&e.indexes.byRelation){const c=Object.entries(I);for(const[B,C]of c)if(B.endsWith("_id")&&B!==`${I.type}_id`&&typeof C=="string"&&B in g){const Q=e.indexes.byRelation.get(B)||new Map,l=Q.get(C)||[];l.includes(I)||(l.push(I),Q.set(C,l),e.indexes.byRelation.set(B,Q))}}if(a.bySubcircuit&&e.indexes.bySubcircuit&&"subcircuit_id"in I&&"subcircuit_id"in g){const c=I.subcircuit_id;if(c&&typeof c=="string"){const B=e.indexes.bySubcircuit.get(c)||[];B.includes(I)||(B.push(I),e.indexes.bySubcircuit.set(c,B))}}if(a.byCustomField&&e.indexes.byCustomField){for(const c of a.byCustomField)if(c in I&&c in g){const B=I[c];if(B!==void 0&&(typeof B=="string"||typeof B=="number")){const C=String(B),Q=e.indexes.byCustomField.get(c),l=Q.get(C)||[];l.includes(I)||(l.push(I),Q.set(C,l))}}}return I},select:r=>{if(s==="source_component")return t.find(g=>g.type==="source_component"&&g.name===r.replace(/\./g,""))||null;if(s==="pcb_port"||s==="source_port"||s==="schematic_port"){const[g,a]=r.replace(/\./g,"").split(/[\s\>]+/),I=t.find(B=>B.type==="source_component"&&B.name===g);if(!I)return null;const c=t.find(B=>B.type==="source_port"&&B.source_component_id===I.source_component_id&&(B.name===a||(B.port_hints??[]).includes(a)));if(!c)return null;if(s==="source_port")return c;if(s==="pcb_port")return t.find(B=>B.type==="pcb_port"&&B.source_port_id===c.source_port_id)||null;if(s==="schematic_port")return t.find(B=>B.type==="schematic_port"&&B.source_port_id===c.source_port_id)||null}return null}}}})};Ree.unparsed=Ree;var SRt=t=>{const A=t.type;return t[`${A}_id`]},bRt=t=>{let A=Number.POSITIVE_INFINITY,e=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY,o=Number.NEGATIVE_INFINITY;for(const n of t){if(!n.type.startsWith("pcb_"))continue;let s,r,g,a;if("x"in n&&"y"in n&&(s=Number(n.x),r=Number(n.y)),"outer_diameter"in n&&(g=Number(n.outer_diameter),a=Number(n.outer_diameter)),"width"in n&&(g=Number(n.width)),"height"in n&&(a=Number(n.height)),"center"in n&&(s=n.center.x,r=n.center.y),s!==void 0&&r!==void 0)A=Math.min(A,s),e=Math.min(e,r),i=Math.max(i,s),o=Math.max(o,r),g!==void 0&&a!==void 0&&(A=Math.min(A,s-g/2),e=Math.min(e,r-a/2),i=Math.max(i,s+g/2),o=Math.max(o,r+a/2)),"radius"in n&&(A=Math.min(A,s-n.radius),e=Math.min(e,r-n.radius),i=Math.max(i,s+n.radius),o=Math.max(o,r+n.radius));else if(n.type==="pcb_trace")for(const I of n.route)A=Math.min(A,I.x),e=Math.min(e,I.y),i=Math.max(i,I.x),o=Math.max(o,I.y)}return{minX:A,minY:e,maxX:i,maxY:o}};function kRt(t){let A=0;if(t.length==0)return A;for(var e=0;e<t.length;e++){var i=t.charCodeAt(e);A=(A<<5)-A+i,A=A&A}return Math.abs(A)}var Nee=[["#69d2e7","#a7dbd8","#e0e4cc","#f38630","#fa6900"],["#fe4365","#fc9d9a","#f9cdad","#c8c8a9","#83af9b"],["#ecd078","#d95b43","#c02942","#542437","#53777a"],["#556270","#4ecdc4","#c7f464","#ff6b6b","#c44d58"],["#774f38","#e08e79","#f1d4af","#ece5ce","#c5e0dc"],["#e8ddcb","#cdb380","#036564","#033649","#031634"],["#490a3d","#bd1550","#e97f02","#f8ca00","#8a9b0f"],["#594f4f","#547980","#45ada8","#9de0ad","#e5fcc2"],["#00a0b0","#6a4a3c","#cc333f","#eb6841","#edc951"],["#e94e77","#d68189","#c6a49a","#c6e5d9","#f4ead5"],["#3fb8af","#7fc7af","#dad8a7","#ff9e9d","#ff3d7f"],["#d9ceb2","#948c75","#d5ded9","#7a6a53","#99b2b7"],["#ffffff","#cbe86b","#f2e9e1","#1c140d","#cbe86b"],["#efffcd","#dce9be","#555152","#2e2633","#99173c"],["#343838","#005f6b","#008c9e","#00b4cc","#00dffc"],["#413e4a","#73626e","#b38184","#f0b49e","#f7e4be"],["#ff4e50","#fc913a","#f9d423","#ede574","#e1f5c4"],["#99b898","#fecea8","#ff847c","#e84a5f","#2a363b"],["#655643","#80bca3","#f6f7bd","#e6ac27","#bf4d28"],["#00a8c6","#40c0cb","#f9f2e7","#aee239","#8fbe00"],["#351330","#424254","#64908a","#e8caa4","#cc2a41"],["#554236","#f77825","#d3ce3d","#f1efa5","#60b99a"],["#5d4157","#838689","#a8caba","#cad7b2","#ebe3aa"],["#8c2318","#5e8c6a","#88a65e","#bfb35a","#f2c45a"],["#fad089","#ff9c5b","#f5634a","#ed303c","#3b8183"],["#ff4242","#f4fad2","#d4ee5e","#e1edb9","#f0f2eb"],["#f8b195","#f67280","#c06c84","#6c5b7b","#355c7d"],["#d1e751","#ffffff","#000000","#4dbce9","#26ade4"],["#1b676b","#519548","#88c425","#bef202","#eafde6"],["#5e412f","#fcebb6","#78c0a8","#f07818","#f0a830"],["#bcbdac","#cfbe27","#f27435","#f02475","#3b2d38"],["#452632","#91204d","#e4844a","#e8bf56","#e2f7ce"],["#eee6ab","#c5bc8e","#696758","#45484b","#36393b"],["#f0d8a8","#3d1c00","#86b8b1","#f2d694","#fa2a00"],["#2a044a","#0b2e59","#0d6759","#7ab317","#a0c55f"],["#f04155","#ff823a","#f2f26f","#fff7bd","#95cfb7"],["#b9d7d9","#668284","#2a2829","#493736","#7b3b3b"],["#bbbb88","#ccc68d","#eedd99","#eec290","#eeaa88"],["#b3cc57","#ecf081","#ffbe40","#ef746f","#ab3e5b"],["#a3a948","#edb92e","#f85931","#ce1836","#009989"],["#300030","#480048","#601848","#c04848","#f07241"],["#67917a","#170409","#b8af03","#ccbf82","#e33258"],["#aab3ab","#c4cbb7","#ebefc9","#eee0b7","#e8caaf"],["#e8d5b7","#0e2430","#fc3a51","#f5b349","#e8d5b9"],["#ab526b","#bca297","#c5ceae","#f0e2a4","#f4ebc3"],["#607848","#789048","#c0d860","#f0f0d8","#604848"],["#b6d8c0","#c8d9bf","#dadabd","#ecdbbc","#fedcba"],["#a8e6ce","#dcedc2","#ffd3b5","#ffaaa6","#ff8c94"],["#3e4147","#fffedf","#dfba69","#5a2e2e","#2a2c31"],["#fc354c","#29221f","#13747d","#0abfbc","#fcf7c5"],["#cc0c39","#e6781e","#c8cf02","#f8fcc1","#1693a7"],["#1c2130","#028f76","#b3e099","#ffeaad","#d14334"],["#a7c5bd","#e5ddcb","#eb7b59","#cf4647","#524656"],["#dad6ca","#1bb0ce","#4f8699","#6a5e72","#563444"],["#5c323e","#a82743","#e15e32","#c0d23e","#e5f04c"],["#edebe6","#d6e1c7","#94c7b6","#403b33","#d3643b"],["#fdf1cc","#c6d6b8","#987f69","#e3ad40","#fcd036"],["#230f2b","#f21d41","#ebebbc","#bce3c5","#82b3ae"],["#b9d3b0","#81bda4","#b28774","#f88f79","#f6aa93"],["#3a111c","#574951","#83988e","#bcdea5","#e6f9bc"],["#5e3929","#cd8c52","#b7d1a3","#dee8be","#fcf7d3"],["#1c0113","#6b0103","#a30006","#c21a01","#f03c02"],["#000000","#9f111b","#b11623","#292c37","#cccccc"],["#382f32","#ffeaf2","#fcd9e5","#fbc5d8","#f1396d"],["#e3dfba","#c8d6bf","#93ccc6","#6cbdb5","#1a1f1e"],["#f6f6f6","#e8e8e8","#333333","#990100","#b90504"],["#1b325f","#9cc4e4","#e9f2f9","#3a89c9","#f26c4f"],["#a1dbb2","#fee5ad","#faca66","#f7a541","#f45d4c"],["#c1b398","#605951","#fbeec2","#61a6ab","#accec0"],["#5e9fa3","#dcd1b4","#fab87f","#f87e7b","#b05574"],["#951f2b","#f5f4d7","#e0dfb1","#a5a36c","#535233"],["#8dccad","#988864","#fea6a2","#f9d6ac","#ffe9af"],["#2d2d29","#215a6d","#3ca2a2","#92c7a3","#dfece6"],["#413d3d","#040004","#c8ff00","#fa023c","#4b000f"],["#eff3cd","#b2d5ba","#61ada0","#248f8d","#605063"],["#ffefd3","#fffee4","#d0ecea","#9fd6d2","#8b7a5e"],["#cfffdd","#b4dec1","#5c5863","#a85163","#ff1f4c"],["#9dc9ac","#fffec7","#f56218","#ff9d2e","#919167"],["#4e395d","#827085","#8ebe94","#ccfc8e","#dc5b3e"],["#a8a7a7","#cc527a","#e8175d","#474747","#363636"],["#f8edd1","#d88a8a","#474843","#9d9d93","#c5cfc6"],["#046d8b","#309292","#2fb8ac","#93a42a","#ecbe13"],["#f38a8a","#55443d","#a0cab5","#cde9ca","#f1edd0"],["#a70267","#f10c49","#fb6b41","#f6d86b","#339194"],["#ff003c","#ff8a00","#fabe28","#88c100","#00c176"],["#ffedbf","#f7803c","#f54828","#2e0d23","#f8e4c1"],["#4e4d4a","#353432","#94ba65","#2790b0","#2b4e72"],["#0ca5b0","#4e3f30","#fefeeb","#f8f4e4","#a5b3aa"],["#4d3b3b","#de6262","#ffb88c","#ffd0b3","#f5e0d3"],["#fffbb7","#a6f6af","#66b6ab","#5b7c8d","#4f2958"],["#edf6ee","#d1c089","#b3204d","#412e28","#151101"],["#9d7e79","#ccac95","#9a947c","#748b83","#5b756c"],["#fcfef5","#e9ffe1","#cdcfb7","#d6e6c3","#fafbe3"],["#9cddc8","#bfd8ad","#ddd9ab","#f7af63","#633d2e"],["#30261c","#403831","#36544f","#1f5f61","#0b8185"],["#aaff00","#ffaa00","#ff00aa","#aa00ff","#00aaff"],["#d1313d","#e5625c","#f9bf76","#8eb2c5","#615375"],["#ffe181","#eee9e5","#fad3b2","#ffba7f","#ff9c97"],["#73c8a9","#dee1b6","#e1b866","#bd5532","#373b44"],["#805841","#dcf7f3","#fffcdd","#ffd8d8","#f5a2a2"]],GRt=t=>{let{x:A,y:e,width:i,height:o}={...t,...t.size,...t.center,...t.position};if(t.x1!==void 0&&t.x2!==void 0&&t.y1!==void 0&&t.y2!==void 0&&(A=(t.x1+t.x2)/2,e=(t.y1+t.y2)/2,i=Math.abs(t.x1-t.x2),o=Math.abs(t.y1-t.y2)),t.points&&Array.isArray(t.points)&&t.points.length>0){const r=t.points.map(C=>C.x),g=t.points.map(C=>C.y),a=Math.min(...r),I=Math.max(...r),c=Math.min(...g),B=Math.max(...g);A=(a+I)/2,e=(c+B)/2,i=I-a,o=B-c}const n=t.text||t.name||t.source?.text||t.source?.name||"?",s=t;return A===void 0||e===void 0?null:(i===void 0&&"outer_diameter"in t&&(i=t.outer_diameter,o=t.outer_diameter),(i===void 0||o===void 0)&&(i=.1,o=.1),{x:A,y:e,width:i,height:o,title:n,content:s,bg_color:Nee[kRt(t.type||n)%Nee.length]?.[4]??"#f00"})},xRt=t=>!!t,FRt=t=>{const A=t.filter(a=>a.type.startsWith("pcb_")||a.type.startsWith("schematic_")).concat(t.filter(a=>a.type==="pcb_trace"||a.type==="schematic_trace").flatMap(a=>a.route)).map(a=>GRt(a)).filter(xRt);if(A.length===0)return{center:{x:0,y:0},width:0,height:0};let e=A[0].x-A[0].width/2,i=A[0].x+A[0].width/2,o=A[0].y-A[0].height/2,n=A[0].y+A[0].height/2;for(const a of A.slice(1))e=Math.min(e,a.x-a.width/2),i=Math.max(i,a.x+a.width/2),o=Math.min(o,a.y-a.height/2),n=Math.max(n,a.y+a.height/2);const s=i-e,r=n-o;return{center:{x:e+s/2,y:o+r/2},width:s,height:r}},RD={IS_SHOWING_PCB_GROUPS:"pcb_viewer_is_showing_pcb_groups",PCB_GROUP_VIEW_MODE:"pcb_viewer_group_view_mode",IS_SHOWING_COPPER_POURS:"pcb_viewer_is_showing_copper_pours",IS_SHOWING_GROUP_ANCHOR_OFFSETS:"pcb_viewer_is_showing_group_anchor_offsets",IS_SHOWING_SOLDER_MASK:"pcb_viewer_is_showing_solder_mask"},p5=(t,A)=>{if(typeof window>"u")return A;try{const e=localStorage.getItem(t);return e!==null?JSON.parse(e):A}catch{return A}},f5=(t,A)=>{if(!(typeof window>"u"))try{localStorage.setItem(t,JSON.stringify(A))}catch{}},_Rt=(t,A)=>{if(typeof window>"u")return A;try{const e=localStorage.getItem(t);return e!==null?JSON.parse(e):A}catch{return A}},RRt=(t,A)=>{if(!(typeof window>"u"))try{localStorage.setItem(t,JSON.stringify(A))}catch{}},NRt="named_only",MRt=(t={},A=!1)=>MNA(e=>({selected_layer:"top",pcb_viewer_id:`pcb_viewer_${Math.random().toString().slice(2,10)}`,in_edit_mode:!1,in_move_footprint_mode:!1,in_draw_trace_mode:!1,is_moving_component:!1,is_drawing_trace:!1,is_mouse_over_container:!1,is_showing_multiple_traces_length:!1,is_showing_rats_nest:!1,is_showing_autorouting:!0,is_showing_drc_errors:!0,is_showing_copper_pours:p5(RD.IS_SHOWING_COPPER_POURS,!0),is_showing_pcb_groups:A?!1:p5(RD.IS_SHOWING_PCB_GROUPS,!0),is_showing_group_anchor_offsets:p5(RD.IS_SHOWING_GROUP_ANCHOR_OFFSETS,!0),is_showing_solder_mask:p5(RD.IS_SHOWING_SOLDER_MASK,!1),pcb_group_view_mode:A?"all":_Rt(RD.PCB_GROUP_VIEW_MODE,NRt),hovered_error_id:null,...t,selectLayer:i=>e({selected_layer:i}),setEditMode:i=>e({in_edit_mode:i!=="off",in_move_footprint_mode:i==="move_footprint",in_draw_trace_mode:i==="draw_trace",is_moving_component:!1,is_drawing_trace:!1}),setIsShowingRatsNest:i=>e({is_showing_rats_nest:i}),setIsMovingComponent:i=>e({is_moving_component:i}),setIsDrawingTrace:i=>e({is_drawing_trace:i}),setIsMouseOverContainer:i=>e({is_mouse_over_container:i}),setIsShowingMultipleTracesLength:i=>e({is_showing_multiple_traces_length:i}),setIsShowingAutorouting:i=>e({is_showing_autorouting:i}),setIsShowingDrcErrors:i=>e({is_showing_drc_errors:i}),setIsShowingCopperPours:i=>{f5(RD.IS_SHOWING_COPPER_POURS,i),e({is_showing_copper_pours:i})},setIsShowingPcbGroups:i=>{A||(f5(RD.IS_SHOWING_PCB_GROUPS,i),e({is_showing_pcb_groups:i}))},setIsShowingGroupAnchorOffsets:i=>{f5(RD.IS_SHOWING_GROUP_ANCHOR_OFFSETS,i),e({is_showing_group_anchor_offsets:i})},setIsShowingSolderMask:i=>{f5(RD.IS_SHOWING_SOLDER_MASK,i),e({is_showing_solder_mask:i})},setPcbGroupViewMode:i=>{A||(RRt(RD.PCB_GROUP_VIEW_MODE,i),e({pcb_group_view_mode:i}))},setHoveredErrorId:i=>e({hovered_error_id:i})})),al=t=>{const A=$.useContext(Mee);return PNA(A,t)},Mee=$.createContext(null),vRt=({children:t,initialState:A,disablePcbGroups:e})=>{const i=$.useMemo(()=>MRt(A,e),[e]);return Z.jsx(Mee.Provider,{value:i,children:t})},URt=()=>{const t=al(e=>e.pcb_viewer_id),A=(e,i)=>Ja(e,{containerId:t,...i});return A.error=(e,i)=>Ja.error(e,{containerId:t,...i}),A.promise=Ja.promise,A},LRt=()=>{$.useEffect(()=>{s_t()},[]);const t=al(A=>A.pcb_viewer_id);return Z.jsx(n_t,{position:"top-center",containerId:t})},HRt=function(){},vee=typeof window<"u",YRt=vee?$.useLayoutEffect:$.useEffect,JRt=YRt,Uee={x:0,y:0,width:0,height:0,top:0,left:0,bottom:0,right:0};function KRt(){var t=$.useState(null),A=t[0],e=t[1],i=$.useState(Uee),o=i[0],n=i[1],s=$.useMemo(function(){return new window.ResizeObserver(function(r){if(r[0]){var g=r[0].contentRect,a=g.x,I=g.y,c=g.width,B=g.height,C=g.top,Q=g.left,l=g.bottom,E=g.right;n({x:a,y:I,width:c,height:B,top:C,left:Q,bottom:l,right:E})}})},[]);return JRt(function(){if(A)return s.observe(A),function(){s.disconnect()}},[A]),[e,o]}var uL=vee&&typeof window.ResizeObserver<"u"?KRt:function(){return[HRt,Uee]},Lee=({initialTransform:t,initialTouch1:A,initialTouch2:e,finalTouch1:i,finalTouch2:o})=>{if(!i||!o)return t;const n={x:(A.x+e.x)/2,y:(A.y+e.y)/2},s={x:(i.x+o.x)/2,y:(i.y+o.y)/2},r=Math.hypot(e.x-A.x,e.y-A.y),g=Math.hypot(o.x-i.x,o.y-i.y),a=r===0?1:g/r,I=s.x-n.x,c=s.y-n.y;return zi(so(I,c),so(n.x,n.y),Ra(a,a),so(-n.x,-n.y),t)},TRt=(t={})=>{const A=$.useRef(null),[e,i]=$.useState(0),o=t.canvasElm??A.current,[n,s]=$.useState(t.initialTransform??Zg()),[r,g]=$.useState(0),[a,I]=$.useReducer(p=>p+1,0),c=$.useCallback(p=>{t.onSetTransform&&t.onSetTransform(p),t.transform||s(p)},[t.onSetTransform,s]),B=$.useCallback(p=>{c(p),I()},[c]),C=t.transform??n,Q=$.useCallback(()=>{i(Date.now())},[]),l=$.useRef("none"),E=$.useRef(null),h=$.useRef(null);$.useEffect(()=>{const p=t.canvasElm??A.current;if(p&&!o){g(r+1);return}if(!p){const j=setTimeout(()=>{g(r+1)},100);return()=>clearTimeout(j)}let f=t.transform??n,b={x:0,y:0},D={x:0,y:0},k=!1;const m=j=>({x:j.pageX-p.getBoundingClientRect().left-window.scrollX,y:j.pageY-p.getBoundingClientRect().top-window.scrollY});function F(j){t.enabled!==!1&&(t.shouldDrag&&!t.shouldDrag(j)||(b=m(j),!(Date.now()-e<100)&&(k=!0,j.preventDefault())))}function G(j){if(!k||t.enabled===!1||t.shouldDrag&&!t.shouldDrag(j))return;D=m(j);const eA=zi(so(D.x-b.x,D.y-b.y),f);c(eA),f=eA,k=!1}function U(j){if(m(j),!k||t.enabled===!1||t.shouldDrag&&!t.shouldDrag(j))return;D=m(j);const eA=zi(so(D.x-b.x,D.y-b.y),f);c(eA)}function M(j){if(t.enabled===!1||t.shouldDrag&&!t.shouldDrag(j))return;const eA=m(j),nA=zi(so(eA.x,eA.y),Ra(1-j.deltaY/1e3,1-j.deltaY/1e3),so(-eA.x,-eA.y),f);c(nA),f=nA,j.preventDefault()}function J(j){if(!k||t.shouldDrag&&!t.shouldDrag(j))return;if(p){const nA=p.getBoundingClientRect();if(j.clientX>=nA.left+10&&j.clientX<=nA.right-10&&j.clientY>=nA.top+10&&j.clientY<=nA.bottom-10)return}k=!1,D=m(j);const eA=zi(so(D.x-b.x,D.y-b.y),f);c(eA),f=eA}function P(j){if(j.preventDefault(),t.enabled!==!1){if(j.touches.length===1){l.current="drag";const eA=j.touches[0];E.current={initialTransform:f,initialTouch:{x:eA.clientX,y:eA.clientY}}}else if(j.touches.length===2){l.current="pinch";const eA=j.touches[0],nA=j.touches[1];h.current={initialTransform:f,initialTouch1:{x:eA.clientX,y:eA.clientY},initialTouch2:{x:nA.clientX,y:nA.clientY},finalTouch1:null,finalTouch2:null}}}}function q(j){if(j.preventDefault(),t.enabled!==!1){if(l.current==="drag"&&j.touches.length===1&&E.current){const eA=j.touches[0],nA={x:eA.clientX,y:eA.clientY},IA=nA.x-E.current.initialTouch.x,iA=nA.y-E.current.initialTouch.y,oA=zi(so(IA,iA),E.current.initialTransform);c(oA)}else if(l.current==="pinch"&&j.touches.length===2&&h.current){const eA=j.touches[0],nA=j.touches[1];h.current.finalTouch1={x:eA.clientX,y:eA.clientY},h.current.finalTouch2={x:nA.clientX,y:nA.clientY};const IA=Lee(h.current);c(IA)}}}function O(j){j.preventDefault();const eA=j.changedTouches[0];if(l.current==="drag"&&E.current&&eA){const nA={x:eA.clientX,y:eA.clientY},IA=nA.x-E.current.initialTouch.x,iA=nA.y-E.current.initialTouch.y,oA=zi(so(IA,iA),E.current.initialTransform);c(oA),f=oA}else if(l.current==="pinch"&&h.current){const nA=Lee(h.current);c(nA),f=nA}l.current="none",E.current=null,h.current=null}return p.addEventListener("mousedown",F),p.addEventListener("mouseup",G),window.addEventListener("mousemove",U),p.addEventListener("mouseout",J),p.addEventListener("wheel",M),p.addEventListener("touchstart",P,{passive:!1}),p.addEventListener("touchmove",q,{passive:!1}),p.addEventListener("touchend",O,{passive:!1}),p.addEventListener("touchcancel",O,{passive:!1}),()=>{p.removeEventListener("mousedown",F),p.removeEventListener("mouseup",G),window.removeEventListener("mousemove",U),p.removeEventListener("mouseout",J),p.removeEventListener("wheel",M),p.removeEventListener("touchstart",P),p.removeEventListener("touchmove",q),p.removeEventListener("touchend",O),p.removeEventListener("touchcancel",O)}},[o,r,a,e,t.enabled,t.shouldDrag]);const u=$.useCallback(p=>Ce(C,p),[C]);return{ref:A,transform:C,applyTransformToPoint:u,setTransform:B,cancelDrag:Q}},qRt=TRt;function PRt(t){const A=new Map;let e=0;function i(o){for(const[,s]of A)if(s.has(o))return s;const n=new Set;return A.set(`connectivity_net${e++}`,n),n}for(const o of t){let n=null;for(const s of o){if(!n)n=i(s);else if(!n.has(s)){const r=i(s);if(r!==n){for(const g of r)n.add(g);A.delete(Array.from(A.entries()).find(([,g])=>g===r)[0])}}n.add(s)}}return Object.fromEntries(Array.from(A.entries()).map(([o,n])=>[o,Array.from(n)]))}var ORt=class{netMap;idToNetMap;constructor(t){this.netMap=t,this.idToNetMap={};for(const[A,e]of Object.entries(t))for(const i of e)this.idToNetMap[i]=A}addConnections(t){for(const A of t){const e=new Set;for(const o of A){const n=this.idToNetMap[o];n&&e.add(n)}let i;if(e.size===0)i=`connectivity_net${Object.keys(this.netMap).length}`,this.netMap[i]=[];else if(e.size===1)i=e.values().next().value??`connectivity_net${Object.keys(this.netMap).length}`;else{i=e.values().next().value??`connectivity_net${Object.keys(this.netMap).length}`;for(const o of e)if(o!==i){this.netMap[i].push(...this.netMap[o]),this.netMap[o]=this.netMap[i];for(const n of this.netMap[i])this.idToNetMap[n]=i}}for(const o of A)this.netMap[i].includes(o)||this.netMap[i].push(o),this.idToNetMap[o]=i}}getIdsConnectedToNet(t){return this.netMap[t]||[]}getNetConnectedToId(t){return this.idToNetMap[t]}areIdsConnected(t,A){if(t===A)return!0;const e=this.getNetConnectedToId(t);if(!e)return!1;const i=this.getNetConnectedToId(A);return i?e===i||i===t||i===t:!1}areAllIdsConnected(t){const A=this.getNetConnectedToId(t[0]);for(const e of t){const i=this.getNetConnectedToId(e);if(i===void 0||i!==A)return!1}return!0}},Hee=t=>{const A=[];for(const i of t)if(i.type==="source_trace")A.push([i.source_trace_id,...i.connected_source_port_ids??[],...i.connected_source_net_ids??[]].filter(Boolean));else if(i.type==="pcb_port"){const{pcb_port_id:o,source_port_id:n}=i;n&&o&&A.push([n,o])}else if(i.type==="pcb_smtpad"){const{pcb_smtpad_id:o,pcb_port_id:n}=i;n&&o&&A.push([o,n])}else if(i.type==="pcb_plated_hole"){const{pcb_plated_hole_id:o,pcb_port_id:n}=i;n&&o&&A.push([o,n])}else if(i.type==="pcb_trace"){const{pcb_trace_id:o,source_trace_id:n}=i,s=Array.isArray(i.route)?i.route.filter(r=>r&&r.route_type==="wire"):[];if(n&&o&&A.push([o,n]),Array.isArray(s)){const r=s.find(a=>a&&a.start_pcb_port_id)?.start_pcb_port_id,g=s.find(a=>a&&a.end_pcb_port_id)?.end_pcb_port_id;r&&o&&g&&A.push([r,o,g])}}else if(i.type==="pcb_via"){const{pcb_via_id:o,pcb_trace_id:n}=i;n&&o&&A.push([o,n])}else if(i.type==="source_component"&&i.internally_connected_source_port_ids)for(const o of i.internally_connected_source_port_ids)A.push(o);const e=PRt(A);return new ORt(e)};function WRt({primitivesWithoutInteractionMetadata:t,drawingObjectIdsWithMouseOver:A,primitiveIdsInMousedOverNet:e}){const i=[];for(const o of t){const n={...o};o?.layer==="drill"?(n.is_in_highlighted_net=!1,n.is_mouse_over=!1):A.has(o._pcb_drawing_object_id)?n.is_mouse_over=!0:o._element&&("pcb_trace_id"in o._element&&e.includes(o._element.pcb_trace_id)||"pcb_port_id"in o._element&&e.includes(o._element.pcb_port_id))?n.is_in_highlighted_net=!0:(n.is_in_highlighted_net=!1,n.is_mouse_over=!1),i.push(n)}return i}function ZRt(t,A){if(t.length<2)throw new Error("Stroke must have at least two points");const e=t.map(c=>Array.isArray(c)?{x:c[0],y:c[1]}:c),i=[],o=[];function n(c,B){const C=B.x-c.x,Q=B.y-c.y,l=Math.sqrt(C*C+Q*Q);return{x:-Q/l,y:C/l}}function s(c,B,C,Q){const l=Q/2,E={x:c.x+B.x*l*C,y:c.y+B.y*l*C};C>0?i.push(E):o.unshift(E)}const r=n(e[0],e[1]),g=e[0].trace_width??A;s(e[0],r,1,g),s(e[0],r,-1,g);for(let c=1;c<e.length-1;c++){const B=e[c-1],C=e[c],Q=e[c+1],l=n(B,C),E=n(C,Q),h=l.x+E.x,u=l.y+E.y,p=Math.sqrt(h*h+u*u),f=C.trace_width??A;if(p/2>2*(f/2))s(C,l,1,f),s(C,E,1,f),s(C,l,-1,f),s(C,E,-1,f);else{const D=1/p;s(C,{x:h*D,y:u*D},1,f),s(C,{x:h*D,y:u*D},-1,f)}}const a=n(e[e.length-2],e[e.length-1]),I=e[e.length-1].trace_width??A;return s(e[e.length-1],a,1,I),s(e[e.length-1],a,-1,I),[...i,...o]}var VRt=(t,A)=>{const{x:e,y:i,width:o,height:n,layer:s,rect_border_radius:r}=t,g=t.corner_radius??r??0,a=[{_pcb_drawing_object_id:Dr("rect"),pcb_drawing_type:"rect",x:e,y:i,w:o,h:n,layer:s||"top",_element:t,_parent_pcb_component:A._parent_pcb_component,_parent_source_component:A._parent_source_component,_source_port:A._source_port,roundness:g,...t.shape==="rotated_rect"&&t.ccw_rotation!==void 0?{ccw_rotation:t.ccw_rotation}:{}}];if(t.is_covered_with_solder_mask){const I=s==="bottom"?"soldermask_with_copper_bottom":"soldermask_with_copper_top",B={...{_pcb_drawing_object_id:Dr("rect"),pcb_drawing_type:"rect",x:e,y:i,w:o,h:n,layer:I,_element:t,_parent_pcb_component:A._parent_pcb_component,_parent_source_component:A._parent_source_component,_source_port:A._source_port,roundness:g,...t.shape==="rotated_rect"&&t.ccw_rotation!==void 0?{ccw_rotation:t.ccw_rotation}:{}},..."solder_mask_color"in t&&t.solder_mask_color?{color:t.solder_mask_color}:{}};a.push(B)}return a},jRt=(t,A)=>{const{x:e,y:i,radius:o,layer:n}=t,s=[{_pcb_drawing_object_id:Dr("circle"),pcb_drawing_type:"circle",x:e,y:i,r:o,layer:n||"top",_element:t,_parent_pcb_component:A._parent_pcb_component,_parent_source_component:A._parent_source_component,_source_port:A._source_port}];if(t.is_covered_with_solder_mask){const r=n==="bottom"?"soldermask_with_copper_bottom":"soldermask_with_copper_top",g={_pcb_drawing_object_id:Dr("circle"),pcb_drawing_type:"circle",x:e,y:i,r:o,layer:r,_element:t,_parent_pcb_component:A._parent_pcb_component,_parent_source_component:A._parent_source_component,_source_port:A._source_port,..."solder_mask_color"in t&&t.solder_mask_color?{color:t.solder_mask_color}:{}};s.push(g)}return s},zRt=(t,A)=>{const{layer:e,points:i}=t,o=[{_pcb_drawing_object_id:Dr("polygon"),pcb_drawing_type:"polygon",points:Gx(i),layer:e||"top",_element:t,_parent_pcb_component:A._parent_pcb_component,_parent_source_component:A._parent_source_component,_source_port:A._source_port}];if(t.is_covered_with_solder_mask){const n=e==="bottom"?"soldermask_with_copper_bottom":"soldermask_with_copper_top",s={_pcb_drawing_object_id:Dr("polygon"),pcb_drawing_type:"polygon",points:Gx(i),layer:n,_element:t,_parent_pcb_component:A._parent_pcb_component,_parent_source_component:A._parent_source_component,_source_port:A._source_port,..."solder_mask_color"in t&&t.solder_mask_color?{color:t.solder_mask_color}:{}};o.push(s)}return o},XRt=(t,A)=>{const{x:e,y:i,width:o,height:n,layer:s}=t,r=[{_pcb_drawing_object_id:Dr("pill"),pcb_drawing_type:"pill",x:e,y:i,w:o,h:n,layer:s||"top",_element:t,_parent_pcb_component:A._parent_pcb_component,_parent_source_component:A._parent_source_component,_source_port:A._source_port}];if(t.is_covered_with_solder_mask){const g=s==="bottom"?"soldermask_with_copper_bottom":"soldermask_with_copper_top",a={_pcb_drawing_object_id:Dr("pill"),pcb_drawing_type:"pill",x:e,y:i,w:o,h:n,layer:g,_element:t,_parent_pcb_component:A._parent_pcb_component,_parent_source_component:A._parent_source_component,_source_port:A._source_port,..."solder_mask_color"in t&&t.solder_mask_color?{color:t.solder_mask_color}:{}};r.push(a)}return r},$Rt=(t,A)=>{const{x:e,y:i,width:o,height:n,layer:s,ccw_rotation:r}=t,g=[{_pcb_drawing_object_id:Dr("pill"),pcb_drawing_type:"pill",x:e,y:i,w:o,h:n,layer:s||"top",_element:t,_parent_pcb_component:A._parent_pcb_component,_parent_source_component:A._parent_source_component,_source_port:A._source_port,ccw_rotation:r}];if(t.is_covered_with_solder_mask){const a=s==="bottom"?"soldermask_with_copper_bottom":"soldermask_with_copper_top",I={_pcb_drawing_object_id:Dr("pill"),pcb_drawing_type:"pill",x:e,y:i,w:o,h:n,layer:a,_element:t,_parent_pcb_component:A._parent_pcb_component,_parent_source_component:A._parent_source_component,_source_port:A._source_port,ccw_rotation:r,..."solder_mask_color"in t&&t.solder_mask_color?{color:t.solder_mask_color}:{}};g.push(I)}return g},ANt=(t,A)=>{const{_parent_pcb_component:e,_parent_source_component:i}=A,o=t,n=typeof o.font_size=="string"?Et.parse(o.font_size):o.font_size??.2;let s;return o.knockout_padding&&(s={left:typeof o.knockout_padding.left=="string"?Et.parse(o.knockout_padding.left):o.knockout_padding.left,top:typeof o.knockout_padding.top=="string"?Et.parse(o.knockout_padding.top):o.knockout_padding.top,bottom:typeof o.knockout_padding.bottom=="string"?Et.parse(o.knockout_padding.bottom):o.knockout_padding.bottom,right:typeof o.knockout_padding.right=="string"?Et.parse(o.knockout_padding.right):o.knockout_padding.right}),[{_pcb_drawing_object_id:Dr("text"),pcb_drawing_type:"text",x:o.anchor_position.x,y:o.anchor_position.y,layer:o.layer,align:o.anchor_alignment??"center",text:o.text,size:n,ccw_rotation:o.ccw_rotation,is_mirrored:o.is_mirrored,is_knockout:o.is_knockout,knockout_padding:s,_element:t,_parent_pcb_component:e,_parent_source_component:i}]},Xo=0,Dr=t=>`${t}_${Xo++}`,Gx=t=>(t??[]).map(A=>({x:Et.parse(A.x),y:Et.parse(A.y)})),eNt=(t,A)=>{const e="pcb_component_id"in t?A.find(s=>s.type==="pcb_component"&&s.pcb_component_id===t.pcb_component_id):void 0,i=e&&"source_component_id"in e?A.find(s=>s.type==="source_component"&&s.source_component_id===e.source_component_id):void 0,o="source_port_id"in t?t.source_port_id:"pcb_port_id"in t?Ck(A).pcb_port.get(t.pcb_port_id)?.source_port_id:void 0,n=o?A.find(s=>s.type==="source_port"&&s.source_port_id===o):void 0;switch(t.type){case"pcb_panel":{const{width:s,height:r,center:g}=t,a=g?.x??0,I=g?.y??0;return[{_pcb_drawing_object_id:`line_${Xo++}`,pcb_drawing_type:"line",x1:a-s/2,y1:I-r/2,x2:a+s/2,y2:I-r/2,width:1,zoomIndependent:!0,layer:"board",_element:t},{_pcb_drawing_object_id:`line_${Xo++}`,pcb_drawing_type:"line",x1:a-s/2,y1:I+r/2,x2:a+s/2,y2:I+r/2,width:1,zoomIndependent:!0,layer:"board",_element:t},{_pcb_drawing_object_id:`line_${Xo++}`,pcb_drawing_type:"line",x1:a-s/2,y1:I-r/2,x2:a-s/2,y2:I+r/2,width:1,zoomIndependent:!0,layer:"board",_element:t},{_pcb_drawing_object_id:`line_${Xo++}`,pcb_drawing_type:"line",x1:a+s/2,y1:I-r/2,x2:a+s/2,y2:I+r/2,width:1,zoomIndependent:!0,layer:"board",_element:t}]}case"pcb_board":{const{width:s,height:r,center:g,outline:a}=t,I=[];return A.some(B=>B.type==="pcb_smtpad"&&B.is_covered_with_solder_mask===!0)&&(a&&a.length>2?(I.push({_pcb_drawing_object_id:`polygon_${Xo++}`,pcb_drawing_type:"polygon",points:Gx(a),layer:"soldermask_top",_element:t}),I.push({_pcb_drawing_object_id:`polygon_${Xo++}`,pcb_drawing_type:"polygon",points:Gx(a),layer:"soldermask_bottom",_element:t})):s&&r&&(I.push({_pcb_drawing_object_id:`rect_${Xo++}`,pcb_drawing_type:"rect",x:g.x,y:g.y,w:s,h:r,layer:"soldermask_top",_element:t}),I.push({_pcb_drawing_object_id:`rect_${Xo++}`,pcb_drawing_type:"rect",x:g.x,y:g.y,w:s,h:r,layer:"soldermask_bottom",_element:t}))),a&&a.length>2?I.push(...a.map((B,C,Q)=>({_pcb_drawing_object_id:`line_${Xo++}`,pcb_drawing_type:"line",x1:B.x,y1:B.y,x2:C===Q.length-1?Q[0].x:Q[C+1].x,y2:C===Q.length-1?Q[0].y:Q[C+1].y,width:1,zoomIndependent:!0,layer:"board",_element:t}))):I.push({_pcb_drawing_object_id:`line_${Xo++}`,pcb_drawing_type:"line",x1:g.x-s/2,y1:g.y-r/2,x2:g.x+s/2,y2:g.y-r/2,width:1,zoomIndependent:!0,layer:"board",_element:t},{_pcb_drawing_object_id:`line_${Xo++}`,pcb_drawing_type:"line",x1:g.x-s/2,y1:g.y+r/2,x2:g.x+s/2,y2:g.y+r/2,width:1,zoomIndependent:!0,layer:"board",_element:t},{_pcb_drawing_object_id:`line_${Xo++}`,pcb_drawing_type:"line",x1:g.x-s/2,y1:g.y-r/2,x2:g.x-s/2,y2:g.y+r/2,width:1,zoomIndependent:!0,layer:"board",_element:t},{_pcb_drawing_object_id:`line_${Xo++}`,pcb_drawing_type:"line",x1:g.x+s/2,y1:g.y-r/2,x2:g.x+s/2,y2:g.y+r/2,width:1,zoomIndependent:!0,layer:"board",_element:t}),I}case"pcb_smtpad":{const s={_parent_pcb_component:e,_parent_source_component:i,_source_port:n};return t.shape==="rect"||t.shape==="rotated_rect"?VRt(t,s):t.shape==="circle"?jRt(t,s):t.shape==="polygon"?zRt(t,s):t.shape==="pill"?XRt(t,s):t.shape==="rotated_pill"?$Rt(t,s):[]}case"pcb_hole":{if(t.hole_shape==="circle"||!t.hole_shape){const{x:s,y:r,hole_diameter:g}=t;return[{_pcb_drawing_object_id:`circle_${Xo++}`,pcb_drawing_type:"circle",x:s,y:r,r:g/2,layer:"drill",_element:t,_parent_pcb_component:e,_parent_source_component:i}]}else if(t.hole_shape==="pill"||t.hole_shape==="rotated_pill"){const{x:s,y:r,hole_width:g,hole_height:a}=t;return typeof g!="number"||typeof a!="number"?[]:[{_pcb_drawing_object_id:`pill_${Xo++}`,pcb_drawing_type:"pill",x:s,y:r,w:g,h:a,layer:"drill",_element:t,_parent_pcb_component:e,_parent_source_component:i,ccw_rotation:t.ccw_rotation}]}else if(t.hole_shape==="rect"){const{x:s,y:r,hole_width:g,hole_height:a}=t;return typeof g!="number"||typeof a!="number"?[]:[{_pcb_drawing_object_id:`rect_${Xo++}`,pcb_drawing_type:"rect",x:s,y:r,w:g,h:a,layer:"drill",_element:t,_parent_pcb_component:e,_parent_source_component:i}]}return[]}case"pcb_plated_hole":if(t.shape==="circle"){const{x:s,y:r,hole_diameter:g,outer_diameter:a}=t;return[{_pcb_drawing_object_id:`circle_${Xo++}`,pcb_drawing_type:"circle",x:s,y:r,r:a/2,layer:"top",_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n},{_pcb_drawing_object_id:`circle_${Xo++}`,pcb_drawing_type:"circle",x:s,y:r,r:g/2,layer:"drill",_element:t}]}else if(t.shape==="oval"){const{x:s,y:r,outer_height:g,outer_width:a,hole_height:I,hole_width:c}=t;return[{_pcb_drawing_object_id:`oval_${Xo++}`,pcb_drawing_type:"oval",x:s,y:r,rX:a/2,rY:g/2,layer:"top",_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n},{_pcb_drawing_object_id:`oval_${Xo++}`,_element:t,pcb_drawing_type:"oval",x:s,y:r,rX:c/2,rY:I/2,layer:"drill"}]}else if(t.shape==="pill"){const{x:s,y:r,outer_height:g,outer_width:a,hole_height:I,hole_width:c}=t;return[{_pcb_drawing_object_id:`pill_${Xo++}`,pcb_drawing_type:"pill",x:s,y:r,w:a,h:g,layer:"top",_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n,ccw_rotation:t.ccw_rotation},{_pcb_drawing_object_id:`pill_${Xo++}`,_element:t,pcb_drawing_type:"pill",x:s,y:r,w:c,h:I,layer:"drill",ccw_rotation:t.ccw_rotation}]}else if(t.shape==="circular_hole_with_rect_pad"){const{x:s,y:r,hole_diameter:g,rect_pad_width:a,rect_pad_height:I,rect_border_radius:c}=t,B=t.hole_offset_x??0,C=t.hole_offset_y??0;return[{_pcb_drawing_object_id:`rect_${Xo++}`,pcb_drawing_type:"rect",x:s,y:r,w:a,h:I,layer:"top",_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n,roundness:c},{_pcb_drawing_object_id:`rect_${Xo++}`,pcb_drawing_type:"rect",x:s,y:r,w:a,h:I,layer:"bottom",_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n,roundness:c},{_pcb_drawing_object_id:`circle_${Xo++}`,_element:t,pcb_drawing_type:"circle",x:s+B,y:r+C,r:g/2,layer:"drill"}]}else if(t.shape==="pill_hole_with_rect_pad"){const{x:s,y:r,hole_width:g,hole_height:a,rect_pad_width:I,rect_pad_height:c,rect_border_radius:B}=t;return[{_pcb_drawing_object_id:`rect_${Xo++}`,pcb_drawing_type:"rect",x:s,y:r,w:I,h:c,layer:"top",_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n,roundness:B},{_pcb_drawing_object_id:`rect_${Xo++}`,pcb_drawing_type:"rect",x:s,y:r,w:I,h:c,layer:"bottom",_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n,roundness:B},{_pcb_drawing_object_id:`pill_${Xo++}`,_element:t,pcb_drawing_type:"pill",x:s,y:r,w:g,h:a,layer:"drill"}]}else if(t.shape==="rotated_pill_hole_with_rect_pad"){const{x:s,y:r,hole_width:g,hole_height:a,hole_ccw_rotation:I,rect_pad_width:c,rect_pad_height:B,rect_ccw_rotation:C,rect_border_radius:Q}=t;return[{_pcb_drawing_object_id:`rect_${Xo++}`,pcb_drawing_type:"rect",x:s,y:r,w:c,h:B,layer:"top",_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n,ccw_rotation:C,roundness:Q},{_pcb_drawing_object_id:`rect_${Xo++}`,pcb_drawing_type:"rect",x:s,y:r,w:c,h:B,layer:"bottom",_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n,ccw_rotation:C,roundness:Q},{_pcb_drawing_object_id:`pill_${Xo++}`,_element:t,pcb_drawing_type:"pill",x:s,y:r,w:g,h:a,layer:"drill",ccw_rotation:I}]}else if(t.shape==="hole_with_polygon_pad"){const{x:s,y:r,pad_outline:g,hole_shape:a,hole_diameter:I,hole_width:c,hole_height:B,layers:C}=t,Q=Et.parse(t.hole_offset_x??0),l=Et.parse(t.hole_offset_y??0),E=g,h=[];if(E&&Array.isArray(E)){const f=Gx(E).map(b=>({x:b.x+s,y:b.y+r}));for(const b of C||["top","bottom"])h.push({_pcb_drawing_object_id:`polygon_${Xo++}`,pcb_drawing_type:"polygon",points:f,layer:b,_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n})}const u={x:s+Q,y:r+l},p=[];return a==="circle"?p.push({_pcb_drawing_object_id:`circle_${Xo++}`,pcb_drawing_type:"circle",x:u.x,y:u.y,r:(I??0)/2,layer:"drill",_element:t,_parent_pcb_component:e,_parent_source_component:i}):a==="oval"?p.push({_pcb_drawing_object_id:`oval_${Xo++}`,pcb_drawing_type:"oval",x:u.x,y:u.y,rX:(c??0)/2,rY:(B??0)/2,layer:"drill",_element:t,_parent_pcb_component:e,_parent_source_component:i}):(a==="pill"||a==="rotated_pill")&&p.push({_pcb_drawing_object_id:`pill_${Xo++}`,pcb_drawing_type:"pill",x:u.x,y:u.y,w:c??0,h:B??0,layer:"drill",_element:t,_parent_pcb_component:e,_parent_source_component:i,ccw_rotation:t.ccw_rotation}),[...h,...p]}else return[];case"pcb_keepout":{if(t.shape==="circle"){const{center:s,radius:r}=t;return[{_pcb_drawing_object_id:`circle_${Xo++}`,pcb_drawing_type:"circle",x:s.x,y:s.y,r,layer:"top",_element:t,_parent_pcb_component:e,_parent_source_component:i,mesh_fill:!0}]}else if(t.shape==="rect"){const{center:s,width:r,height:g}=t;return[{_pcb_drawing_object_id:`rect_${Xo++}`,pcb_drawing_type:"rect",x:s.x,y:s.y,w:r,h:g,layer:"top",_element:t,_parent_pcb_component:e,_parent_source_component:i,mesh_fill:!0}]}break}case"pcb_trace":{const s=[];if(t.route_thickness_mode==="interpolated"){const a=t.route.map(B=>({x:B.x,y:B.y,trace_width:B.route_type==="wire"?B.width:.5})),I=ZRt(a,.5),c=t.route[0].layer;return s.push({_pcb_drawing_object_id:`polygon_${Xo++}`,_element:t,pcb_drawing_type:"polygon",points:I,layer:c}),t.route.forEach(B=>{B.route_type==="via"&&s.push({_pcb_drawing_object_id:`circle_${Xo++}`,_element:t,pcb_drawing_type:"circle",x:B.x,y:B.y,r:B.outer_diameter/2,layer:B.from_layer})}),s}let r=null,g=null;for(const a of t.route)a.route_type==="wire"&&(r!==null&&g!==null&&s.push({_pcb_drawing_object_id:`line_${Xo++}`,_element:t,pcb_drawing_type:"line",x1:r,y1:g,x2:a.x,y2:a.y,width:a.width,squareCap:!1,layer:a.layer}),r=a.x,g=a.y);return s}case"pcb_via":{const{x:s,y:r,outer_diameter:g,hole_diameter:a}=t,I=t.from_layer,c=t.to_layer,B=t.layers,C=[];I&&c?C.push(I,c):B&&Array.isArray(B)?C.push(...B):C.push("top","bottom");const Q=[];for(const l of C)Q.push({_pcb_drawing_object_id:`circle_${Xo++}`,pcb_drawing_type:"circle",x:s,y:r,r:g/2,layer:l,_element:t,_parent_pcb_component:e,_parent_source_component:i});return Q.push({_pcb_drawing_object_id:`circle_${Xo++}`,pcb_drawing_type:"circle",x:s,y:r,r:a/2,layer:"drill",_element:t}),Q}case"pcb_silkscreen_rect":return[{_pcb_drawing_object_id:`rect_${Xo++}`,pcb_drawing_type:"rect",x:t.center.x,y:t.center.y,w:t.width,h:t.height,layer:t.layer==="bottom"?"bottom_silkscreen":"top_silkscreen",stroke_width:t.stroke_width,is_filled:t.is_filled,has_stroke:t.has_stroke,is_stroke_dashed:t.is_stroke_dashed,roundness:t.corner_radius,_element:t}];case"pcb_silkscreen_circle":return[{_pcb_drawing_object_id:`circle_${Xo++}`,pcb_drawing_type:"circle",x:t.center.x,y:t.center.y,r:t.radius,layer:t.layer==="bottom"?"bottom_silkscreen":"top_silkscreen"}];case"pcb_silkscreen_oval":return[{_pcb_drawing_object_id:`oval_${Xo++}`,pcb_drawing_type:"oval",x:t.center.x,y:t.center.y,rX:t.radius_x/2,rY:t.radius_y/2,layer:t.layer==="bottom"?"bottom_silkscreen":"top_silkscreen"}];case"pcb_silkscreen_pill":return[{_pcb_drawing_object_id:`pill_${Xo++}`,pcb_drawing_type:"pill",x:t.center.x,y:t.center.y,w:t.width,h:t.height,layer:t.layer==="bottom"?"bottom_silkscreen":"top_silkscreen"}];case"pcb_silkscreen_line":return[{_pcb_drawing_object_id:`line_${Xo++}`,pcb_drawing_type:"line",x1:t.x1,y1:t.y1,x2:t.x2,y2:t.y2,width:.1,squareCap:!1,layer:t.layer==="bottom"?"bottom_silkscreen":"top_silkscreen"}];case"pcb_fabrication_note_rect":{const s=t,r=s.layer==="bottom"?"bottom_fabrication":"top_fabrication",g=s.has_stroke!==void 0?s.has_stroke:typeof s.stroke_width=="number"?s.stroke_width>0:void 0;return[{_pcb_drawing_object_id:Dr("pcb_fabrication_note_rect"),pcb_drawing_type:"rect",x:s.center.x,y:s.center.y,w:s.width,h:s.height,roundness:s.corner_radius,layer:r,stroke_width:s.stroke_width,is_filled:s.is_filled,has_stroke:g,is_stroke_dashed:s.is_stroke_dashed,color:s.color,_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n}]}case"pcb_fabrication_note_path":case"pcb_silkscreen_path":{const{pcb_component_id:s,route:r,type:g}=t;let a;if(g==="pcb_silkscreen_path")return a=t.layer==="bottom"?"bottom_silkscreen":"top_silkscreen",r.slice(0,-1).map((I,c)=>{const B=r[c+1];return{_pcb_drawing_object_id:`line_${Xo++}`,pcb_drawing_type:"line",x1:I.x,y1:I.y,x2:B.x,y2:B.y,width:t.stroke_width??.1,squareCap:!1,layer:a,_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n}}).filter(Boolean);if(g==="pcb_fabrication_note_path")return a="top_fabrication",r.slice(0,-1).map((I,c)=>{const B=r[c+1];return{_pcb_drawing_object_id:`line_${Xo++}`,pcb_drawing_type:"line",x1:I.x,y1:I.y,x2:B.x,y2:B.y,width:t.stroke_width??.1,squareCap:!1,layer:a,color:t.color,_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n}}).filter(Boolean)}case"pcb_silkscreen_text":return[{_pcb_drawing_object_id:`text_${Xo++}`,pcb_drawing_type:"text",x:t.anchor_position.x,y:t.anchor_position.y,layer:t.layer==="bottom"?"bottom_silkscreen":"top_silkscreen",align:t.anchor_alignment??"center",text:t.text,size:t.font_size,ccw_rotation:t.ccw_rotation}];case"pcb_copper_text":return ANt(t,{_parent_pcb_component:e,_parent_source_component:i});case"pcb_copper_pour":{const s=t;switch(s.shape){case"rect":{const{center:r,width:g,height:a,layer:I,rotation:c}=s;return[{_pcb_drawing_object_id:Dr("pcb_copper_pour_rect"),pcb_drawing_type:"rect",x:r.x,y:r.y,w:g,h:a,layer:I,_element:t,ccw_rotation:c}]}case"polygon":{const{points:r,layer:g}=s;return[{_pcb_drawing_object_id:Dr("pcb_copper_pour_polygon"),pcb_drawing_type:"polygon",points:Gx(r),layer:g,_element:t}]}case"brep":{const{brep_shape:r,layer:g}=s;return[{_pcb_drawing_object_id:Dr("pcb_copper_pour_brep"),pcb_drawing_type:"polygon_with_arcs",brep_shape:r,layer:g,_element:t}]}}return[]}case"pcb_fabrication_note_dimension":{const s=t,{from:r,to:g,text:a,font_size:I,arrow_size:c}=s,B=t.layer==="bottom"?"bottom_fabrication":"top_fabrication",C=[],Q=typeof c=="number"&&!Number.isNaN(c)?c:1;C.push({_pcb_drawing_object_id:Dr("pcb_fabrication_note_dimension"),pcb_drawing_type:"line",x1:r.x,y1:r.y,x2:g.x,y2:g.y,width:.05,squareCap:!1,layer:B,_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n});const l=g.x-r.x,E=g.y-r.y,h=Math.sqrt(l*l+E*E)||1,u=l/h,p=E/h,f=Math.PI/6,b=r.x+Q*(u*Math.cos(f)-p*Math.sin(f)),D=r.y+Q*(u*Math.sin(f)+p*Math.cos(f)),k=r.x+Q*(u*Math.cos(-f)-p*Math.sin(-f)),m=r.y+Q*(u*Math.sin(-f)+p*Math.cos(-f));C.push({_pcb_drawing_object_id:Dr("pcb_fabrication_note_dimension"),pcb_drawing_type:"line",x1:r.x,y1:r.y,x2:b,y2:D,width:.05,squareCap:!1,layer:B,_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n}),C.push({_pcb_drawing_object_id:Dr("pcb_fabrication_note_dimension"),pcb_drawing_type:"line",x1:r.x,y1:r.y,x2:k,y2:m,width:.05,squareCap:!1,layer:B,_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n});const F=g.x-Q*(u*Math.cos(f)-p*Math.sin(f)),G=g.y-Q*(u*Math.sin(f)+p*Math.cos(f)),U=g.x-Q*(u*Math.cos(-f)-p*Math.sin(-f)),M=g.y-Q*(u*Math.sin(-f)+p*Math.cos(-f));if(C.push({_pcb_drawing_object_id:Dr("pcb_fabrication_note_dimension"),pcb_drawing_type:"line",x1:g.x,y1:g.y,x2:F,y2:G,width:.05,squareCap:!1,layer:B,_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n}),C.push({_pcb_drawing_object_id:Dr("pcb_fabrication_note_dimension"),pcb_drawing_type:"line",x1:g.x,y1:g.y,x2:U,y2:M,width:.05,squareCap:!1,layer:B,_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n}),a){const J=(I??1)*1.5,P=-p,q=u,O=(r.x+g.x)/2,j=(r.y+g.y)/2;let eA=J;Math.abs(u)>Math.abs(p)?eA=j>=0?J:-J:eA=O>=0?-J:J,C.push({_pcb_drawing_object_id:Dr("pcb_fabrication_note_dimension"),pcb_drawing_type:"text",x:(r.x+g.x)/2+P*eA,y:(r.y+g.y)/2+q*eA,layer:B,align:"center",text:a,size:I,_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n})}return C}case"pcb_fabrication_note_text":return[{_pcb_drawing_object_id:Dr("text"),pcb_drawing_type:"text",x:t.anchor_position.x,y:t.anchor_position.y,layer:t.layer==="bottom"?"bottom_fabrication":"top_fabrication",size:t.font_size,align:t.anchor_alignment??"center",text:t.text,color:t.color,_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n}];case"pcb_cutout":switch(t.shape){case"rect":{const s=t,r=s.corner_radius,g=s.rotation??s.rotation;return[{_pcb_drawing_object_id:Dr("pcb_cutout_rect"),pcb_drawing_type:"rect",x:s.center.x,y:s.center.y,w:s.width,h:s.height,layer:"drill",roundness:r,ccw_rotation:g,_element:t,_parent_pcb_component:e,_parent_source_component:i}]}case"circle":{const s=t;return[{_pcb_drawing_object_id:Dr("pcb_cutout_circle"),pcb_drawing_type:"circle",x:s.center.x,y:s.center.y,r:s.radius,layer:"drill",_element:t,_parent_pcb_component:e,_parent_source_component:i}]}case"polygon":{const s=t;return[{_pcb_drawing_object_id:Dr("pcb_cutout_polygon"),pcb_drawing_type:"polygon",points:Gx(s.points),layer:"drill",_element:t,_parent_pcb_component:e,_parent_source_component:i}]}default:return console.warn(`Unsupported pcb_cutout shape: ${t.shape}`),[]}case"pcb_note_line":{const s=t;return[{_pcb_drawing_object_id:Dr("pcb_note_line"),pcb_drawing_type:"line",x1:s.x1,y1:s.y1,x2:s.x2,y2:s.y2,width:s.stroke_width??.1,squareCap:!1,layer:"notes",color:s.color,_element:t,_parent_pcb_component:e,_parent_source_component:i}]}case"pcb_note_rect":{const s=t;return[{_pcb_drawing_object_id:Dr("pcb_note_rect"),pcb_drawing_type:"rect",x:s.center.x,y:s.center.y,w:s.width,h:s.height,layer:"notes",stroke_width:s.stroke_width,is_filled:s.is_filled,has_stroke:s.has_stroke,is_stroke_dashed:s.is_stroke_dashed,color:s.color,roundness:s.corner_radius,_element:t,_parent_pcb_component:e,_parent_source_component:i}]}case"pcb_note_path":{const s=t,{route:r,stroke_width:g}=s;return r.slice(0,-1).map((a,I)=>{const c=r[I+1];return{_pcb_drawing_object_id:Dr("pcb_note_path"),pcb_drawing_type:"line",x1:a.x,y1:a.y,x2:c.x,y2:c.y,width:g??.1,squareCap:!1,layer:"notes",color:s.color,_element:t,_parent_pcb_component:e,_parent_source_component:i}}).filter(Boolean)}case"pcb_note_text":{const s=t;return[{_pcb_drawing_object_id:Dr("pcb_note_text"),pcb_drawing_type:"text",x:s.anchor_position.x,y:s.anchor_position.y,layer:"notes",align:s.anchor_alignment??"center",text:s.text||"",size:s.font_size,color:s.color,_element:t,_parent_pcb_component:e,_parent_source_component:i}]}case"pcb_note_dimension":{const s=t,{from:r,to:g,text:a,font_size:I,arrow_size:c}=s,B=[];B.push({_pcb_drawing_object_id:Dr("pcb_note_dimension"),pcb_drawing_type:"line",x1:r.x,y1:r.y,x2:g.x,y2:g.y,width:.05,squareCap:!1,color:s.color,layer:"notes",_element:t,_parent_pcb_component:e,_parent_source_component:i});const C=g.x-r.x,Q=g.y-r.y,l=Math.sqrt(C*C+Q*Q),E=C/l,h=Q/l,u=Math.PI/6,p=r.x+c*(E*Math.cos(u)-h*Math.sin(u)),f=r.y+c*(E*Math.sin(u)+h*Math.cos(u)),b=r.x+c*(E*Math.cos(-u)-h*Math.sin(-u)),D=r.y+c*(E*Math.sin(-u)+h*Math.cos(-u));B.push({_pcb_drawing_object_id:Dr("pcb_note_dimension"),pcb_drawing_type:"line",x1:r.x,y1:r.y,x2:p,y2:f,width:.05,squareCap:!1,layer:"notes",_element:t}),B.push({_pcb_drawing_object_id:Dr("pcb_note_dimension"),pcb_drawing_type:"line",x1:r.x,y1:r.y,x2:b,y2:D,width:.05,squareCap:!1,layer:"notes",_element:t});const k=g.x-c*(E*Math.cos(u)-h*Math.sin(u)),m=g.y-c*(E*Math.sin(u)+h*Math.cos(u)),F=g.x-c*(E*Math.cos(-u)-h*Math.sin(-u)),G=g.y-c*(E*Math.sin(-u)+h*Math.cos(-u));if(B.push({_pcb_drawing_object_id:Dr("pcb_note_dimension"),pcb_drawing_type:"line",x1:g.x,y1:g.y,x2:k,y2:m,width:.05,squareCap:!1,layer:"notes",_element:t}),B.push({_pcb_drawing_object_id:Dr("pcb_note_dimension"),pcb_drawing_type:"line",x1:g.x,y1:g.y,x2:F,y2:G,width:.05,squareCap:!1,layer:"notes",_element:t}),a){const U=I*1.5,M=-h,J=E,P=(r.x+g.x)/2,q=(r.y+g.y)/2;let O=U;Math.abs(E)>Math.abs(h)?O=q>=0?U:-U:O=P>=0?-U:U,B.push({_pcb_drawing_object_id:Dr("pcb_note_dimension"),pcb_drawing_type:"text",x:(r.x+g.x)/2+M*O,y:(r.y+g.y)/2+J*O,layer:"notes",align:"center",text:a,size:I,_element:t})}return B}}return[]},UI={board:{anchor:"rgb(255, 38, 226)",aux_items:"rgb(255, 255, 255)",b_adhes:"rgb(0, 0, 132)",b_crtyd:"rgb(255, 38, 226)",b_fab:"rgb(88, 93, 132)",b_mask:"rgba(2, 255, 238, 0.400)",b_paste:"rgb(0, 194, 194)",b_silks:"rgb(242, 237, 161)",background:"rgb(0, 16, 35)",cmts_user:"rgb(89, 148, 220)",copper:{b:"rgb(77, 127, 196)",f:"rgb(200, 52, 52)",in1:"rgb(127, 200, 127)",in10:"rgb(237, 124, 51)",in11:"rgb(91, 195, 235)",in12:"rgb(247, 111, 142)",in13:"rgb(167, 165, 198)",in14:"rgb(40, 204, 217)",in15:"rgb(232, 178, 167)",in16:"rgb(242, 237, 161)",in17:"rgb(237, 124, 51)",in18:"rgb(91, 195, 235)",in19:"rgb(247, 111, 142)",in2:"rgb(206, 125, 44)",in20:"rgb(167, 165, 198)",in21:"rgb(40, 204, 217)",in22:"rgb(232, 178, 167)",in23:"rgb(242, 237, 161)",in24:"rgb(237, 124, 51)",in25:"rgb(91, 195, 235)",in26:"rgb(247, 111, 142)",in27:"rgb(167, 165, 198)",in28:"rgb(40, 204, 217)",in29:"rgb(232, 178, 167)",in3:"rgb(79, 203, 203)",in30:"rgb(242, 237, 161)",in4:"rgb(219, 98, 139)",in5:"rgb(167, 165, 198)",in6:"rgb(40, 204, 217)",in7:"rgb(232, 178, 167)",in8:"rgb(242, 237, 161)",in9:"rgb(141, 203, 129)"},cursor:"rgb(255, 255, 255)",drc:"rgb(194, 194, 194)",drc_error:"rgba(215, 91, 107, 0.800)",drc_exclusion:"rgb(255, 255, 255)",drc_warning:"rgba(255, 208, 66, 0.902)",dwgs_user:"rgb(194, 194, 194)",eco1_user:"rgb(180, 219, 210)",eco2_user:"rgb(216, 200, 82)",edge_cuts:"rgb(208, 210, 205)",f_adhes:"rgb(132, 0, 132)",f_crtyd:"rgb(255, 0, 245)",f_fab:"rgb(175, 175, 175)",f_mask:"rgba(216, 100, 255, 0.400)",f_paste:"rgba(180, 160, 154, 0.902)",f_silks:"rgb(242, 237, 161)",footprint_text_back:"rgb(0, 0, 132)",footprint_text_front:"rgb(194, 194, 194)",footprint_text_invisible:"rgb(132, 132, 132)",grid:"rgb(132, 132, 132)",grid_axes:"rgb(194, 194, 194)",margin:"rgb(255, 38, 226)",microvia:"rgb(0, 132, 132)",no_connect:"rgb(0, 0, 132)",pad_back:"rgb(77, 127, 196)",pad_front:"rgb(200, 52, 52)",pad_plated_hole:"rgb(194, 194, 0)",pad_through_hole:"rgb(227, 183, 46)",plated_hole:"rgb(26, 196, 210)",ratsnest:"rgba(245, 255, 213, 0.702)",select_overlay:"rgb(4, 255, 67)",soldermaskWithCopper:{top:"rgb(18, 82, 50)",bottom:"rgb(77, 127, 196)"},soldermask:{top:"rgb(12, 55, 33)",bottom:"rgb(12, 55, 33)"},through_via:"rgb(236, 236, 236)",user_1:"rgb(194, 194, 194)",user_2:"rgb(89, 148, 220)",user_3:"rgb(180, 219, 210)",user_4:"rgb(216, 200, 82)",user_5:"rgb(194, 194, 194)",user_6:"rgb(89, 148, 220)",user_7:"rgb(180, 219, 210)",user_8:"rgb(216, 200, 82)",user_9:"rgb(232, 178, 167)",via_blind_buried:"rgb(187, 151, 38)",via_hole:"rgb(227, 183, 46)",via_micro:"rgb(0, 132, 132)",via_through:"rgb(236, 236, 236)",worksheet:"rgb(200, 114, 171)"}},Hp=(t,A=1)=>{if(Math.abs(t.a)!==Math.abs(t.d))throw new Error("Cannot scale non-uniformly");return A*Math.abs(t.a)},rI={elementOverlay:40,dimensionOverlay:40,editTraceHintOverlay:40,errorOverlay:40,pcbGroupOverlay:35,ratsNestOverlay:30,toolbarOverlay:70,warnings:30,topLayer:20,clickToInteractOverlay:100},y5={red:"red",black:"black",green:"green",board:"rgb(255, 255, 255)",other:"#eee",top:UI.board.copper.f,inner1:UI.board.copper.in1,inner2:UI.board.copper.in2,inner3:UI.board.copper.in3,inner4:UI.board.copper.in4,inner5:UI.board.copper.in5,inner6:UI.board.copper.in6,inner7:UI.board.copper.in7,inner8:UI.board.copper.in8,bottom:UI.board.copper.b,drill:UI.board.anchor,keepout:UI.board.background,tkeepout:UI.board.b_crtyd,tplace:UI.board.b_silks,top_silkscreen:UI.board.f_silks,bottom_silkscreen:UI.board.b_silks,top_fabrication:UI.board.f_fab,bottom_fabrication:UI.board.b_fab,soldermask_top:UI.board.soldermask.top,soldermask_bottom:UI.board.soldermask.bottom,soldermask_with_copper_top:UI.board.soldermaskWithCopper.top,soldermask_with_copper_bottom:UI.board.soldermaskWithCopper.bottom,notes:UI.board.user_2,...UI.board},tNt=["inner6","inner5","inner4","inner3","inner2","inner1","bottom","soldermask_bottom","bottom_silkscreen","top","soldermask_top","top_silkscreen","soldermask_with_copper_bottom","soldermask_with_copper_top","board"],iNt=class{canvasLayerMap;ctxLayerMap;aperture;transform;foregroundLayer="top";lastPoint;constructor(t){this.canvasLayerMap=t,this.ctxLayerMap=Object.fromEntries(Object.entries(t).map(([A,e])=>[A,e.getContext("2d")])),this.transform=Zg(),this.transform.d*=-1,this.transform=zi(this.transform,so(0,-500)),this.lastPoint={x:0,y:0},this.equip({})}clear(){for(const t of Object.values(this.ctxLayerMap))t.clearRect(0,0,t.canvas.width,t.canvas.height)}equip(t){this.aperture={fontSize:0,shape:"circle",mode:"add",size:0,color:"red",layer:"top",opacity:this.foregroundLayer===t.color?1:.5,...t}}drawMeshPattern(t,A,e,i,o,n=45){const s=this.getLayerCtx(),[r,g]=Ce(this.transform,[t,A]),[a,I]=Ce(this.transform,[t+e,A+i]),c=Hp(this.transform,o);s.lineWidth=1,s.strokeStyle=this.aperture.color;const B=C=>{const Q=Math.sin(C),l=Math.cos(C),E=Math.sqrt(Math.pow(a-r,2)+Math.pow(I-g,2));for(let h=-E;h<=E;h+=c)s.beginPath(),s.moveTo(r+h*l-E*Q,g+h*Q+E*l),s.lineTo(r+h*l+E*Q,g+h*Q-E*l),s.stroke()};B(n*Math.PI/180),B((n+90)*Math.PI/180)}rect({x:t,y:A,w:e,h:i,mesh_fill:o,is_filled:n=!0,has_stroke:s,is_stroke_dashed:r,stroke_width:g,roundness:a}){const[I,c]=Ce(this.transform,[t-e/2,A-i/2]),[B,C]=Ce(this.transform,[t+e/2,A+i/2]);this.applyAperture();const Q=this.getLayerCtx(),l=a?Hp(this.transform,a):0,E=s===void 0?n===!1:s;if(o)Q.save(),Q.beginPath(),l>0&&Q.roundRect?Q.roundRect(I,c,B-I,C-c,l):Q.rect(I,c,B-I,C-c),Q.clip(),this.drawMeshPattern(t-e/2,A-i/2,e,i,.15),Q.restore(),l>0&&Q.roundRect?(Q.beginPath(),Q.roundRect(I,c,B-I,C-c,l),Q.stroke()):Q.strokeRect(I,c,B-I,C-c);else if(n!==!1&&(l>0&&Q.roundRect?(Q.beginPath(),Q.roundRect(I,c,B-I,C-c,l),Q.fill()):Q.fillRect(I,c,B-I,C-c)),E){const h=Q.lineWidth;if(g!==void 0&&(Q.lineWidth=Hp(this.transform,g)),r){let u=[];const p=Math.abs(this.transform.a);if(p>0){const b=.1*p,D=b*1.3;b>.5&&(u=[b,D])}Q.setLineDash(u)}l>0&&Q.roundRect?(Q.beginPath(),Q.roundRect(I,c,B-I,C-c,l),Q.stroke()):Q.strokeRect(I,c,B-I,C-c),r&&Q.setLineDash([]),g!==void 0&&(Q.lineWidth=h)}}rotatedRect(t,A,e,i,o,n,s){const r=this.getLayerCtx();this.applyAperture();const[g,a]=Ce(this.transform,[t-e/2,A-i/2]),[I,c]=Ce(this.transform,[t+e/2,A+i/2]),B=n?Hp(this.transform,n):0;r.save();const[C,Q]=Ce(this.transform,[t,A]);r.translate(C,Q);const l=360-o;o&&r.rotate(l*Math.PI/180),r.translate(-C,-Q),s?(r.beginPath(),B>0&&r.roundRect?r.roundRect(g,a,I-g,c-a,B):r.rect(g,a,I-g,c-a),r.clip(),this.drawMeshPattern(t-e/2,A-i/2,e,i,.15),B>0&&r.roundRect?(r.beginPath(),r.roundRect(g,a,I-g,c-a,B),r.stroke()):r.strokeRect(g,a,I-g,c-a)):B>0&&r.roundRect?(r.beginPath(),r.roundRect(g,a,I-g,c-a,B),r.fill()):r.fillRect(g,a,I-g,c-a),r.restore()}rotatedPill(t,A,e,i,o){const n=this.getLayerCtx();this.applyAperture(),n.save();const[s,r]=Ce(this.transform,[t,A]);n.translate(s,r);const g=360-o;o&&n.rotate(g*Math.PI/180),n.translate(-s,-r),this.pill(t,A,e,i),n.restore()}circle(t,A,e,i){const o=Hp(this.transform,e),[n,s]=Ce(this.transform,[t,A]);this.applyAperture();const r=this.getLayerCtx();i?(r.save(),r.beginPath(),r.arc(n,s,o,0,2*Math.PI),r.clip(),this.drawMeshPattern(t-e,A-e,e*2,e*2,.15),r.restore(),r.beginPath(),r.arc(n,s,o,0,2*Math.PI),r.stroke()):(r.beginPath(),r.arc(n,s,o,0,2*Math.PI),r.fill())}oval(t,A,e,i){const o=Hp(this.transform,e),n=Hp(this.transform,i),[s,r]=Ce(this.transform,[t,A]);this.applyAperture();const g=this.getLayerCtx();g.beginPath(),g.ellipse(s,r,o,n,0,0,2*Math.PI),g.fill(),g.closePath()}pill(t,A,e,i){const[o,n]=Ce(this.transform,[t-e/2,A+i/2]),s=Hp(this.transform,e),r=Hp(this.transform,i),g=Math.min(s,r)/2;this.applyAperture();const a=this.getLayerCtx();a.beginPath(),a.arc(o+g,n+g,g,Math.PI,Math.PI*1.5),a.arc(o+s-g,n+g,g,Math.PI*1.5,0),a.arc(o+s-g,n+r-g,g,0,Math.PI*.5),a.arc(o+g,n+r-g,g,Math.PI*.5,Math.PI),a.fill(),a.closePath()}polygon(t){if(t.length<3)return;this.applyAperture();const A=this.getLayerCtx(),e=t.map(o=>Ce(this.transform,[o.x,o.y]));A.beginPath(),A.moveTo(e[0][0],e[0][1]);for(let o=1;o<e.length;o++)A.lineTo(e[o][0],e[o][1]);A.closePath(),A.fill("evenodd");const i=Hp(this.transform,this.aperture.size);i>0&&(A.lineWidth=i,A.stroke())}debugText(t,A,e){const[i,o]=Ce(this.transform,[A,e]);this.applyAperture();const n=this.getLayerCtx();n.font="10px sans-serif",n.fillText(t,i,o)}getLayerCtx(){const t=this.ctxLayerMap[this.aperture.layer];if(!t)throw new Error(`No context for layer "${this.aperture.layer}"`);return t}orderAndFadeLayers(){const{canvasLayerMap:t,foregroundLayer:A}=this,e=A==="top"?"top_silkscreen":A==="bottom"?"bottom_silkscreen":void 0,i=A==="top"?"soldermask_with_copper_top":A==="bottom"?"soldermask_with_copper_bottom":void 0,o=new Set([A,"drill","other","board",...e?[e]:[],...i?[i]:[]]),n=[A,...e?[e]:[],...i?[i]:[]],s=[...tNt.filter(r=>!n.includes(r)),A,...i?[i]:[],"drill",...e?[e]:[]];s.forEach((r,g)=>{const a=t[r];a&&(a.style.zIndex=`${rI.topLayer-(s.length-g)}`,a.style.opacity=o.has(r)?"1":"0.5")})}applyAperture(){const{transform:t,aperture:A}=this;let{size:e,mode:i,color:o,fontSize:n,layer:s}=A;s in this.ctxLayerMap||(this.aperture.layer="other");const r=this.getLayerCtx();if(!r)throw new Error(`No context for layer "${this.foregroundLayer}"`);if(o||(o="undefined"),r.lineWidth=Hp(t,e),r.lineCap="round",i==="add"){r.globalCompositeOperation="source-over";let g=y5[o.toLowerCase()];if(!g)try{g=tee(o).rgb().toString()}catch{console.warn(`Invalid color format: '${o}'`),g="white"}r.fillStyle=g,r.strokeStyle=g}else r.globalCompositeOperation="destination-out",r.fillStyle="rgba(0,0,0,1)",r.strokeStyle="rgba(0,0,0,1)";r.font=`${Hp(Uy(t),n)}px sans-serif`}moveTo(t,A){this.lastPoint={x:t,y:A}}lineTo(t,A){const[e,i]=Ce(this.transform,[t,A]),{size:o,shape:n,mode:s}=this.aperture,r=Hp(this.transform,o);let{lastPoint:g}=this;const a=Ce(this.transform,g);this.applyAperture();const I=this.getLayerCtx();n==="square"&&I.fillRect(a.x-r/2,a.y-r/2,r,r),I.beginPath(),I.moveTo(a.x,a.y),I.lineTo(e,i),I.stroke(),I.closePath(),n==="square"&&I.fillRect(e-r/2,i-r/2,r,r),this.lastPoint={x:t,y:A}}polygonWithArcs(t){const A=this.getLayerCtx(),e=i=>{if(i.vertices.length===0)return;const o=i.vertices[0],n=Ce(this.transform,[o.x,o.y]);A.moveTo(n[0],n[1]);for(let s=0;s<i.vertices.length;s++){const r=i.vertices[s],g=i.vertices[(s+1)%i.vertices.length];if(r.bulge&&r.bulge!==0){const a=r.bulge,I=g.x-r.x,c=g.y-r.y,B=Math.sqrt(I*I+c*c);if(B<1e-9){const M=Ce(this.transform,[g.x,g.y]);A.lineTo(M[0],M[1]);continue}const C=4*Math.atan(a),Q=Math.abs(B/(2*Math.sin(C/2))),l=(r.x+g.x)/2,E=(r.y+g.y)/2,h=I/B,p=-(c/B),f=h,b=Math.sqrt(Math.max(0,Q*Q-(B/2)**2)),D=l+b*p*Math.sign(a),k=E+b*f*Math.sign(a),m=Math.atan2(r.y-k,r.x-D);let F=Math.atan2(g.y-k,g.x-D);a>0&&F<m?F+=2*Math.PI:a<0&&F>m&&(F-=2*Math.PI);const G=Ce(this.transform,[D,k]),U=Hp(this.transform,Q);A.arc(G[0],G[1],U,-m,-F,a>0)}else{const a=Ce(this.transform,[g.x,g.y]);A.lineTo(a[0],a[1])}}A.closePath()};if(A.beginPath(),e(t.outer_ring),t.inner_rings)for(const i of t.inner_rings)e(i);A.fill("evenodd")}};function Yee(t){const{lines:A,anchorPoint:e,ccwRotation:i}=t;if(!i)return A;const o=i*Math.PI/180,n=aB(o),s=zi(so(e.x,e.y),n,so(-e.x,-e.y));return Ce(s,e),A.map(r=>({...r,x1:Ce(s,{x:r.x1,y:r.y1}).x,y1:Ce(s,{x:r.x1,y:r.y1}).y,x2:Ce(s,{x:r.x2,y:r.y2}).x,y2:Ce(s,{x:r.x2,y:r.y2}).y}))}var oNt=.6,Jee=.2,Kee=(()=>{const A=["a","c","e","m","n","o","r","s","u","x"].map(e=>CL[e]).filter(e=>e&&e.length>0).map(e=>Math.min(...e.map(i=>Math.min(i.y1,i.y2))));return A.length>0?Math.min(...A):0})(),nNt=t=>t>="a"&&t<="z"?Kee:0,Tee=t=>{const A=t.size*.7,e=A*oNt,i=A*Jee,o=A*Jee,n=t.text.split(/\r?\n/),s=t.text.length>0&&A>0,r=s?n.length:0,g=s?n.map(C=>C.length===0?0:C.length*e+(C.length-1)*i):[],a=g.length>0?Math.max(...g):0,c=/[a-z]/.test(t.text)?Kee*A:0,B=r>0?r*A+(r-1)*o+c:0;return{text_lines:n,line_count:r,line_widths:g,target_height:A,target_width_char:e,space_between_chars:i,space_between_lines:o,width:a,height:B}},qee=t=>{const A=Tee(t);return{width:A.width,height:A.height,lineHeight:A.target_height,lineSpacing:A.space_between_lines,lineCount:A.line_count}},Pee=t=>{const{text_lines:A,line_count:e,line_widths:i,target_height:o,target_width_char:n,space_between_chars:s,space_between_lines:r,width:g}=Tee(t);if(o<=0||e===0)return[];const a=o/12,I=[];for(let c=0;c<e;c++){const B=-c*(o+r),C=i[c],Q=(g-C)/2;let l=t.x+Q;for(let E=0;E<A[c].length;E++){const h=A[c][E],u=CL[h]??CL[h.toUpperCase()],p=nNt(h);if(!u){l+=n+s;continue}for(const{x1:f,y1:b,x2:D,y2:k}of u){const m=b-p,F=k-p;I.push({_pcb_drawing_object_id:Dr("line"),pcb_drawing_type:"line",x1:l+n*f,y1:t.y+B+o*m,x2:l+n*D,y2:t.y+B+o*F,width:a,layer:t.layer,unit:t.unit,color:t.color})}l+=n+s}}return I};function ND(t){const e=t.color??y5[t.layer];let i=tee(e);return t._element?.type==="pcb_copper_pour"&&(i=i.alpha(.7)),t.is_mouse_over||t.is_in_highlighted_net?i.lighten(.5).rgb().toString():i.rgb().toString()}var Oee=(t,A)=>{t.equip({size:A.zoomIndependent?A.width/t.transform.a:A.width,shape:A.squareCap?"square":"circle",color:ND(A),layer:A.layer}),t.moveTo(A.x1,A.y1),t.lineTo(A.x2,A.y2)},sNt=(t,A,e)=>{switch(e){case"top_left":return{x:0,y:-A};case"top_center":return{x:-t/2,y:-A};case"top_right":return{x:-t,y:-A};case"center_left":return{x:0,y:-A/2};case"center":return{x:-t/2,y:-A/2};case"center_right":return{x:-t,y:-A/2};case"bottom_left":return{x:0,y:0};case"bottom_center":return{x:-t/2,y:0};case"bottom_right":return{x:-t,y:0};default:return{x:0,y:0}}},Wee=t=>t.layer==="bottom_silkscreen"||t.layer==="bottom"?t.is_mirrored!==!1:t.is_mirrored===!0,rNt=(t,A)=>{t.equip({fontSize:A.size,color:ND(A),layer:A.layer});const{width:e,height:i}=qee(A),o=sNt(e,i,A.align);A.x??=0,A.y??=0;const n={x:A.x,y:A.y};let s=Pee({...A,x:A.x+o.x,y:A.y+o.y});if(Wee(A)&&(s=s.map(r=>({...r,x1:2*A.x-r.x1,x2:2*A.x-r.x2}))),A.ccw_rotation){const r={lines:s,anchorPoint:n,ccwRotation:A.ccw_rotation};s=Yee(r)}for(const r of s)Oee(t,r)},gNt=(t,A)=>{const{width:e,height:i,lineHeight:o}=qee(A);A.x??=0,A.y??=0;const n=A.knockout_padding??{left:A.size*.5,right:A.size*.5,top:A.size*.3,bottom:A.size*.3},s=e+n.left+n.right,r=i+n.top+n.bottom,g=e/2,a=o-i/2,I=A.x-g,c=A.y-a,B={x:A.x,y:A.y},C={_pcb_drawing_object_id:`knockout_rect_${A._pcb_drawing_object_id}`,x:A.x,y:A.y,w:s,h:r,layer:A.layer,ccw_rotation:A.ccw_rotation};A.ccw_rotation?Vee(t,C):Zee(t,C);let Q=Pee({...A,x:I,y:c});if(Wee(A)&&(Q=Q.map(l=>({...l,x1:2*A.x-l.x1,x2:2*A.x-l.x2}))),A.ccw_rotation){const l={lines:Q,anchorPoint:B,ccwRotation:A.ccw_rotation};Q=Yee(l)}for(const l of Q)t.equip({size:l.width,shape:"circle",color:"black",layer:A.layer,mode:"subtract"}),t.moveTo(l.x1,l.y1),t.lineTo(l.x2,l.y2);t.equip({mode:"add"})},Zee=(t,A)=>{t.equip({color:ND(A),layer:A.layer,size:A.stroke_width}),t.rect({x:A.x,y:A.y,w:A.w,h:A.h,mesh_fill:A.mesh_fill,is_filled:A.is_filled,has_stroke:A.has_stroke,is_stroke_dashed:A.is_stroke_dashed,stroke_width:A.stroke_width,roundness:A.roundness})},Vee=(t,A)=>{t.equip({color:ND(A),layer:A.layer}),t.rotatedRect(A.x,A.y,A.w,A.h,A.ccw_rotation,A.roundness,A.mesh_fill)},aNt=(t,A)=>{t.equip({color:ND(A),layer:A.layer}),t.rotatedPill(A.x,A.y,A.w,A.h,A.ccw_rotation)},INt=(t,A)=>{t.equip({color:ND(A),layer:A.layer}),t.circle(A.x,A.y,A.r,A.mesh_fill)},cNt=(t,A)=>{t.equip({color:ND(A),layer:A.layer}),t.oval(A.x,A.y,A.rX,A.rY)},BNt=(t,A)=>{t.equip({color:ND(A),layer:A.layer}),t.pill(A.x,A.y,A.w,A.h)},CNt=(t,A)=>{t.equip({color:ND(A),layer:A.layer}),t.polygon(A.points)},QNt=(t,A)=>{t.equip({color:ND(A),layer:A.layer}),t.polygonWithArcs(A.brep_shape)},lNt=(t,A)=>{switch(A.pcb_drawing_type){case"line":return Oee(t,A);case"text":return A.is_knockout?gNt(t,A):rNt(t,A);case"rect":return A.ccw_rotation?Vee(t,A):Zee(t,A);case"circle":return INt(t,A);case"oval":return cNt(t,A);case"pill":return A.ccw_rotation?aNt(t,A):BNt(t,A);case"polygon":return CNt(t,A);case"polygon_with_arcs":return QNt(t,A)}},ENt=(t,A)=>{for(const e of A)lNt(t,e)},hNt=["board","bottom_silkscreen","bottom","soldermask_bottom","top","soldermask_top","soldermask_with_copper_bottom","soldermask_with_copper_top","top_silkscreen","inner1","inner2","inner3","inner4","inner5","inner6","drill","notes","other"],uNt=({primitives:t,transform:A,grid:e,width:i=500,height:o=500})=>{const n=$.useRef({}),s=al(g=>g.selected_layer),r=al(g=>g.is_showing_solder_mask);return $.useEffect(()=>{if(!n.current||Object.keys(n.current).length===0)return;const g=Object.fromEntries(Object.entries(n.current).filter(([c,B])=>!(!B||!r&&c.includes("soldermask"))));if(Object.keys(g).length===0)return;const a=new iNt(g);A&&(a.transform=A),a.clear(),a.foregroundLayer=s;const I=r?t:t.filter(c=>!c.layer?.includes("soldermask"));ENt(a,I),a.orderAndFadeLayers()},[t,A,s,r]),Z.jsxs("div",{style:{backgroundColor:"black",width:i,height:o,position:"relative"},children:[Z.jsx(blA.SuperGrid,{textColor:"rgba(0,255,0,0.8)",majorColor:"rgba(0,255,0,0.4)",minorColor:"rgba(0,255,0,0.2)",screenSpaceCellSize:200,width:i,height:o,transform:A,stringifyCoord:(g,a,I)=>`${blA.toMMSI(g,I)}, ${blA.toMMSI(a,I)}`}),hNt.filter(g=>r?!0:!g.includes("soldermask")).map(g=>g.replace(/-/g,"")).map((g,a)=>Z.jsx("canvas",{className:`pcb-layer-${g}`,ref:I=>{n.current??={},I?n.current[g]=I:delete n.current[g]},style:{position:"absolute",zIndex:a,left:0,top:0,pointerEvents:"none"},width:i,height:o},g))]})},dNt=.6,pNt=1;wee(gRt()),wee(DRt());var w5=["rgba(239, 68, 68, 0.8)","rgba(249, 115, 22, 0.8)","rgba(245, 158, 11, 0.8)","rgba(234, 179, 8, 0.8)","rgba(132, 204, 22, 0.8)","rgba(34, 197, 94, 0.8)","rgba(16, 185, 129, 0.8)","rgba(20, 184, 166, 0.8)","rgba(6, 182, 212, 0.8)","rgba(14, 165, 233, 0.8)","rgba(59, 130, 246, 0.8)","rgba(99, 102, 241, 0.8)","rgba(139, 92, 246, 0.8)","rgba(168, 85, 247, 0.8)","rgba(217, 70, 239, 0.8)","rgba(236, 72, 153, 0.8)","rgba(249, 168, 212, 0.8)","rgba(161, 161, 170, 0.8)"];function jee(t,A,e,i={}){const o=i.padding??40,n=i.yFlip??!1;let s;if("center"in t){const I=t.width/2,c=t.height/2;s={minX:t.center.x-I,maxX:t.center.x+I,minY:t.center.y-c,maxY:t.center.y+c}}else s=t;const r=s.maxX-s.minX||1,g=s.maxY-s.minY||1,a=Math.min((A-2*o)/r,(e-2*o)/g);return zi(so(A/2,e/2),Ra(a,n?-a:a),so(-(s.minX+r/2),-(s.minY+g/2)))}function fNt(t){const A=[...t.points||[],...(t.lines||[]).flatMap(e=>e.points),...(t.rects||[]).flatMap(e=>{const i=e.width/2,o=e.height/2;return[{x:e.center.x-i,y:e.center.y-o},{x:e.center.x+i,y:e.center.y-o},{x:e.center.x-i,y:e.center.y+o},{x:e.center.x+i,y:e.center.y+o}]}),...(t.circles||[]).flatMap(e=>[{x:e.center.x-e.radius,y:e.center.y},{x:e.center.x+e.radius,y:e.center.y},{x:e.center.x,y:e.center.y-e.radius},{x:e.center.x,y:e.center.y+e.radius}]),...(t.texts||[]).flatMap(e=>{const i=e.fontSize??12,o=e.text.length*i*dNt,n=i*pNt,s=e.anchorSide??"center",r={top_left:{dx:0,dy:0},top_center:{dx:-o/2,dy:0},top_right:{dx:-o,dy:0},center_left:{dx:0,dy:-n/2},center:{dx:-o/2,dy:-n/2},center_right:{dx:-o,dy:-n/2},bottom_left:{dx:0,dy:-n},bottom_center:{dx:-o/2,dy:-n},bottom_right:{dx:-o,dy:-n}},{dx:g,dy:a}=r[s],I=e.x+g,c=e.y+a;return[{x:I,y:c},{x:I+o,y:c+n}]})];return A.length===0?{minX:-1,maxX:1,minY:-1,maxY:1}:A.reduce((e,i)=>({minX:Math.min(e.minX,i.x),maxX:Math.max(e.maxX,i.x),minY:Math.min(e.minY,i.y),maxY:Math.max(e.maxY,i.y)}),{minX:1/0,maxX:-1/0,minY:1/0,maxY:-1/0})}function yNt(t,A,e={}){const i=A instanceof HTMLCanvasElement?A.getContext("2d"):A;if(!i)throw new Error("Could not get 2D context from canvas");const o=A instanceof HTMLCanvasElement?A.width:A.canvas.width,n=A instanceof HTMLCanvasElement?A.height:A.canvas.height;let s;if(e.transform)s=e.transform;else if(e.viewbox)s=jee(e.viewbox,o,n,{padding:e.padding,yFlip:e.yFlip});else{const r=fNt(t),g=t.coordinateSystem==="cartesian";s=jee(r,o,n,{padding:e.padding??40,yFlip:g})}i.clearRect(0,0,o,n),i.save(),t.rects&&t.rects.length>0&&t.rects.forEach(r=>{const g=r.width/2,a=r.height/2,I=Ce(s,{x:r.center.x-g,y:r.center.y-a}),c=Ce(s,{x:r.center.x+g,y:r.center.y+a}),B=Math.abs(c.x-I.x),C=Math.abs(c.y-I.y);i.beginPath(),i.rect(Math.min(I.x,c.x),Math.min(I.y,c.y),B,C),r.fill&&(i.fillStyle=r.fill,i.fill()),r.stroke&&(i.strokeStyle=r.stroke,i.stroke())}),t.circles&&t.circles.length>0&&t.circles.forEach(r=>{const g=Ce(s,r.center),a=r.radius*Math.abs(s.a);i.beginPath(),i.arc(g.x,g.y,a,0,2*Math.PI),r.fill&&(i.fillStyle=r.fill,i.fill()),r.stroke&&(i.strokeStyle=r.stroke??"transparent",i.stroke())}),t.lines&&t.lines.length>0&&t.lines.forEach((r,g)=>{if(r.points.length===0)return;i.beginPath();const a=Ce(s,r.points[0]);i.moveTo(a.x,a.y);for(let I=1;I<r.points.length;I++){const c=Ce(s,r.points[I]);i.lineTo(c.x,c.y)}if(i.strokeStyle=r.strokeColor||w5[g%w5.length],r.strokeWidth?i.lineWidth=r.strokeWidth*s.a:i.lineWidth=2,i.lineCap="round",r.strokeDash)if(typeof r.strokeDash=="string"){let I;if(r.strokeDash.includes(","))I=r.strokeDash.split(",").map(c=>parseFloat(c.trim())).filter(c=>!Number.isNaN(c));else{const c=parseFloat(r.strokeDash.trim());I=Number.isNaN(c)?[]:[c]}i.setLineDash(I)}else i.setLineDash(r.strokeDash.map(I=>I*Math.abs(s.a)));else i.setLineDash([]);i.stroke()}),t.points&&t.points.length>0&&t.points.forEach((r,g)=>{const a=Ce(s,r);i.beginPath(),i.arc(a.x,a.y,3,0,2*Math.PI),i.fillStyle=r.color||w5[g%w5.length],i.fill(),r.label&&!e.disableLabels&&(i.fillStyle=r.color||"black",i.font="12px sans-serif",i.fillText(r.label,a.x+5,a.y-5))}),t.texts&&t.texts.length>0&&t.texts.forEach(r=>{const g=Ce(s,{x:r.x,y:r.y});i.fillStyle=r.color||"black",i.font=`${(r.fontSize??12)*Math.abs(s.a)}px sans-serif`;const a=r.anchorSide??"center",I={top_left:"left",center_left:"left",bottom_left:"left",top_center:"center",center:"center",bottom_center:"center",top_right:"right",center_right:"right",bottom_right:"right"},c={top_left:"top",top_center:"top",top_right:"top",center_left:"middle",center:"middle",center_right:"middle",bottom_left:"bottom",bottom_center:"bottom",bottom_right:"bottom"};i.textAlign=I[a],i.textBaseline=c[a],i.fillText(r.text,g.x,g.y)}),i.restore()}var wNt=({children:t,transform:A,debugGraphics:e})=>{const i=$.useRef(null),[o,{width:n,height:s}]=uL(),r=al(g=>g.is_showing_autorouting);return $.useEffect(()=>{r&&i.current&&e&&n&&s&&(i.current.width=n,i.current.height=s,yNt(e,i.current,{transform:A,disableLabels:!0}))},[e,A,n,s,r]),r?Z.jsxs("div",{ref:o,style:{position:"relative",width:"100%",height:"100%"},children:[t,Z.jsx("canvas",{ref:i,style:{position:"absolute",top:0,left:0,opacity:.5,zIndex:100,width:"100%",height:"100%",pointerEvents:"none"}})]}):t},DNt=({children:t,transform:A=Zg(),elements:e=[]})=>{const[i,{width:o,height:n}]=uL(),s=$.useRef(null);return $.useEffect(()=>{const r=s.current;if(!r||!o||!n)return;r.width=o,r.height=n;const g=r.getContext("2d");if(!g)return;g.clearRect(0,0,o,n);const a=e.filter(c=>c.type==="pcb_component"),I=e.filter(c=>c.type==="pcb_manual_edit_conflict_warning");g.strokeStyle=UI.board.drc_warning,g.lineWidth=2,I.forEach(c=>{const B=a.find(O=>O.pcb_component_id===c.pcb_component_id);if(!B)return;const{width:C,height:Q,center:l}=B,E=Ce(A,l),h=C*Math.abs(A.a),u=Q*Math.abs(A.d),p=.1*Math.abs(A.a),f=h+p*2,b=u+p*2,D=E.x-f/2,k=E.y-b/2;g.beginPath(),g.rect(D,k,f,b),g.stroke();const m="Manual Edit Conflict",F=4,G=Math.max(8,Math.min(12,10*Math.abs(A.a)));g.font=`${G}px sans-serif`;const M=g.measureText(m).width+F*2,J=G+F*2,P=D+(f-M)/2,q=k+b+5;g.fillStyle="rgba(0, 0, 0, 0.7)",g.beginPath(),g.roundRect(P,q,M,J,3),g.fill(),g.fillStyle=UI.board.drc_warning,g.textAlign="center",g.textBaseline="middle",g.fillText(m,P+M/2,q+J/2)})},[e,A,o,n]),Z.jsxs("div",{ref:i,style:{position:"relative",width:"100%",height:"100%"},children:[t,Z.jsx("canvas",{ref:s,style:{position:"absolute",top:0,left:0,pointerEvents:"none",zIndex:rI.warnings}})]})},D5=(t,A,e)=>e(t,A),zee=(t,A,e,i,o)=>{const n=o*Math.PI/180,s=Math.cos(n),r=Math.sin(n),g=t-e,a=A-i,I=g*s-a*r,c=g*r+a*s;return{x:I+e,y:c+i}},dL=t=>{if(t.length===0)return null;let A=t[0].x,e=t[0].x,i=t[0].y,o=t[0].y;for(const n of t)A=D5(A,n.x,Math.min),e=D5(e,n.x,Math.max),i=D5(i,n.y,Math.min),o=D5(o,n.y,Math.max);return{minX:A,maxX:e,minY:i,maxY:o}},mNt=(t,A)=>({minX:Math.min(t.minX,A.minX),maxX:Math.max(t.maxX,A.maxX),minY:Math.min(t.minY,A.minY),maxY:Math.max(t.maxY,A.maxY)}),SNt=(t,A)=>t?mNt(t,A):A,bNt=t=>{switch(t.pcb_drawing_type){case"line":{const A=(t.width??0)/2,e=[{x:t.x1,y:t.y1},{x:t.x2,y:t.y2}],i=dL(e);return i?{minX:i.minX-A,maxX:i.maxX+A,minY:i.minY-A,maxY:i.maxY+A}:null}case"rect":{const A=t.w/2,e=t.h/2,i=[{x:t.x-A,y:t.y-e},{x:t.x+A,y:t.y-e},{x:t.x+A,y:t.y+e},{x:t.x-A,y:t.y+e}],o=t.ccw_rotation??0,n=o===0?i:i.map(s=>zee(s.x,s.y,t.x,t.y,o));return dL(n)}case"circle":return{minX:t.x-t.r,maxX:t.x+t.r,minY:t.y-t.r,maxY:t.y+t.r};case"oval":return{minX:t.x-t.rX,maxX:t.x+t.rX,minY:t.y-t.rY,maxY:t.y+t.rY};case"pill":{const A=t.w/2,e=t.h/2,i=[{x:t.x-A,y:t.y-e},{x:t.x+A,y:t.y-e},{x:t.x+A,y:t.y+e},{x:t.x-A,y:t.y+e}],o=t.ccw_rotation??0,n=o===0?i:i.map(s=>zee(s.x,s.y,t.x,t.y,o));return dL(n)}case"polygon":return dL(t.points);case"polygon_with_arcs":{const A=t.brep_shape.outer_ring.vertices.map(e=>({x:e.x,y:e.y}));return dL(A)}case"text":{const A=t.size??0,e=t.text?t.text.length*A*.6:0,i=A;if(e===0&&i===0)return{minX:t.x,maxX:t.x,minY:t.y,maxY:t.y};const o=e/2,n=i/2;return{minX:t.x-o,maxX:t.x+o,minY:t.y-n,maxY:t.y+n}}default:return null}};function kNt(t){const{dimensionStart:A,dimensionEnd:e,screenDimensionStart:i,screenDimensionEnd:o,flipX:n,flipY:s}=t,r=e.x-A.x,g=e.y-A.y,a=Math.sqrt(r*r+g*g),I=o.x-i.x,c=o.y-i.y,B=Math.sqrt(I*I+c*c),C=Math.atan2(c,I)*(180/Math.PI),Q=Math.abs(C)%90,E=Math.min(Q,90-Q)>15,h=(i.x+o.x)/2,u=(i.y+o.y)/2,p=15,f=C+90;let b=Math.cos(f*Math.PI/180)*p,D=Math.sin(f*Math.PI/180)*p;const k=I>0&&c<0,m=I>0&&c>0,F=I<0&&c>0;n!==s&&!k&&(b=-b,D=-D),k&&(b+=Math.cos(f*Math.PI/180)*-45,D+=Math.sin(f*Math.PI/180)*-45),m&&(b+=Math.cos(f*Math.PI/180)+-20,D+=Math.sin(f*Math.PI/180)+-10),F&&(b+=Math.cos(f*Math.PI/180)*10,D+=Math.sin(f*Math.PI/180)*10);const G=h+b,U=u+D;return{distance:a,screenDistance:B,x:G,y:U,show:a>.01&&B>30&&E}}function GNt(t){const{dimensionStart:A,dimensionEnd:e,screenDimensionStart:i,screenDimensionEnd:o,flipX:n,flipY:s}=t;return $.useMemo(()=>kNt({dimensionStart:A,dimensionEnd:e,screenDimensionStart:i,screenDimensionEnd:o,flipX:n,flipY:s}),[A,e,i,o,n,s])}var xNt=(t,A,e)=>{const i=e*Math.PI/180,o=Math.cos(i),n=Math.sin(i),s=t.x-A.x,r=t.y-A.y,g=s*o-r*n,a=s*n+r*o;return{x:g+A.x,y:a+A.y}},Xee=(t,A,e,i)=>{const o={top_left:{x:t.x-A,y:t.y-e},top_center:{x:t.x,y:t.y-e},top_right:{x:t.x+A,y:t.y-e},center_left:{x:t.x-A,y:t.y},center:{x:t.x,y:t.y},center_right:{x:t.x+A,y:t.y},bottom_left:{x:t.x-A,y:t.y+e},bottom_center:{x:t.x,y:t.y+e},bottom_right:{x:t.x+A,y:t.y+e}};return i===0?Object.entries(o).map(([n,s])=>({anchor:n,point:s})):Object.entries(o).map(([n,s])=>({anchor:n,point:xNt(s,t,i)}))},FNt=t=>{switch(t.pcb_drawing_type){case"rect":{const A=t.ccw_rotation??0;return Xee({x:t.x,y:t.y},t.w/2,t.h/2,A)}case"pill":{const A=t.ccw_rotation??0;return Xee({x:t.x,y:t.y},t.w/2,t.h/2,A)}case"circle":return[{anchor:"circle_center",point:{x:t.x,y:t.y}},{anchor:"circle_right",point:{x:t.x+t.r,y:t.y}},{anchor:"circle_left",point:{x:t.x-t.r,y:t.y}},{anchor:"circle_top",point:{x:t.x,y:t.y-t.r}},{anchor:"circle_bottom",point:{x:t.x,y:t.y+t.r}}];case"oval":return[{anchor:"oval_center",point:{x:t.x,y:t.y}},{anchor:"oval_right",point:{x:t.x+t.rX,y:t.y}},{anchor:"oval_left",point:{x:t.x-t.rX,y:t.y}},{anchor:"oval_top",point:{x:t.x,y:t.y-t.rY}},{anchor:"oval_bottom",point:{x:t.x,y:t.y+t.rY}}];case"line":{const A={x:(t.x1+t.x2)/2,y:(t.y1+t.y2)/2};return[{anchor:"line_start",point:{x:t.x1,y:t.y1}},{anchor:"line_mid",point:A},{anchor:"line_end",point:{x:t.x2,y:t.y2}}]}case"polygon":return t.points.map((A,e)=>({anchor:`polygon_vertex_${e}`,point:A}));case"polygon_with_arcs":return t.brep_shape.outer_ring.vertices.map((A,e)=>({anchor:`polygon_with_arcs_vertex_${e}`,point:{x:A.x,y:A.y}}));default:return[]}},_Nt=16,xx=5,$ee=t=>{if(t.pcb_drawing_type==="text")return!0;const A=t._element;if(!A||typeof A!="object")return!1;const e=typeof A.type=="string"?A.type:void 0;return e?!!(e.startsWith("pcb_silkscreen_")||e.startsWith("pcb_note_")||e==="pcb_text"||e.startsWith("pcb_fabrication_note_")&&e!=="pcb_fabrication_note_rect"):!1},RNt=({children:t,transform:A,focusOnHover:e=!1,primitives:i=[]})=>{A||(A=Zg());const[o,n]=$.useState(!1),[s,r]=$.useState(!1),[g,a]=$.useState(!1),[I,c]=$.useState({start:null,end:null}),B=$.useCallback(()=>{g&&(a(!1),window.dispatchEvent(new Event("disarm-dimension-tool")))},[g]),[C,Q]=$.useState({x:0,y:0}),[l,E]=$.useState({x:0,y:0}),h=$.useRef({x:0,y:0}),u=$.useRef(null),f=u.current?.getBoundingClientRect(),b=$.useMemo(()=>{const P=new Map;for(const q of i){if(!q._element||$ee(q)||q.pcb_drawing_type==="pill"||q.pcb_drawing_type==="rect"&&q.ccw_rotation&&q.ccw_rotation!==0)continue;const O=bNt(q);if(!O)continue;const j=P.get(q._element);P.set(q._element,SNt(j??void 0,O))}return P},[i]),D=$.useMemo(()=>{const P=[];for(const q of i){if(!q._element||$ee(q))continue;const O=FNt(q);if(O.length!==0)for(const j of O)P.push({anchor:j.anchor,point:j.point,element:q._element})}return P},[i]),k=$.useMemo(()=>{const P=[];b.forEach((q,O)=>{if(!q)return;const j=(q.minX+q.maxX)/2,eA=(q.minY+q.maxY)/2,nA={top_left:{x:q.minX,y:q.minY},top_center:{x:j,y:q.minY},top_right:{x:q.maxX,y:q.minY},center_left:{x:q.minX,y:eA},center:{x:j,y:eA},center_right:{x:q.maxX,y:eA},bottom_left:{x:q.minX,y:q.maxY},bottom_center:{x:j,y:q.maxY},bottom_right:{x:q.maxX,y:q.maxY}};for(const[IA,iA]of Object.entries(nA))P.push({anchor:IA,point:iA,element:O})});for(const q of D)P.push(q);return P.push({anchor:"origin",point:{x:0,y:0},element:null}),P},[b,D]),m=$.useMemo(()=>k.map((P,q)=>({...P,id:`${q}-${P.anchor}`,screenPoint:Ce(A,P.point)})),[k,A]),F=$.useCallback(P=>{if(m.length===0)return{point:P,id:null};const q=Ce(A,P);let O=null;for(const j of m){const eA=j.screenPoint.x-q.x,nA=j.screenPoint.y-q.y,IA=Math.hypot(eA,nA);IA>_Nt||(!O||IA<O.distance)&&(O={distance:IA,id:j.id,point:j.point})}return O?{point:O.point,id:O.id}:{point:P,id:null}},[m,A]);$.useEffect(()=>{const P=u.current,q=nA=>{if(nA.key==="d"){const IA=F({x:h.current.x,y:h.current.y});Q({x:IA.point.x,y:IA.point.y}),E({x:IA.point.x,y:IA.point.y}),c({start:IA.id,end:IA.id}),o?(n(!1),r(!1),c({start:null,end:null})):(n(!0),r(!0)),B()}nA.key==="Escape"&&(n(!1),r(!1),c({start:null,end:null}),B())},O=()=>{a(!0)},j=()=>{P&&window.addEventListener("keydown",q)},eA=()=>{P&&window.removeEventListener("keydown",q)};return window.addEventListener("arm-dimension-tool",O),P&&(P.addEventListener("focus",j),P.addEventListener("blur",eA),P.addEventListener("mouseenter",j),P.addEventListener("mouseleave",eA)),()=>{window.removeEventListener("arm-dimension-tool",O),B(),P&&(P.removeEventListener("focus",j),P.removeEventListener("blur",eA),P.removeEventListener("mouseenter",j),P.removeEventListener("mouseleave",eA))}},[u,o,B,F]);const G=Ce(A,C),U=Ce(A,l),M={left:Math.min(G.x,U.x),right:Math.max(G.x,U.x),top:Math.min(G.y,U.y),bottom:Math.max(G.y,U.y),flipX:G.x>U.x,flipY:G.y>U.y,width:0,height:0};M.width=M.right-M.left,M.height=M.bottom-M.top;const J=GNt({dimensionStart:C,dimensionEnd:l,screenDimensionStart:G,screenDimensionEnd:U,flipX:M.flipX,flipY:M.flipY});return Z.jsxs("div",{ref:u,tabIndex:0,style:{position:"relative"},onMouseEnter:()=>{e&&u.current&&u.current.focus()},onMouseLeave:()=>{u.current&&u.current.blur()},onMouseMove:P=>{const q=P.currentTarget.getBoundingClientRect(),O=P.clientX-q.left,j=P.clientY-q.top,eA=Ce(Uy(A),{x:O,y:j});if(h.current.x=eA.x,h.current.y=eA.y,s){const nA=F(eA);E({x:nA.point.x,y:nA.point.y}),c(IA=>({...IA,end:nA.id}))}},onMouseDown:P=>{const q=P.currentTarget.getBoundingClientRect(),O=P.clientX-q.left,j=P.clientY-q.top,eA=Ce(Uy(A),{x:O,y:j});if(g&&!o){const nA=F(eA);Q({x:nA.point.x,y:nA.point.y}),E({x:nA.point.x,y:nA.point.y}),c({start:nA.id,end:nA.id}),n(!0),r(!0),B()}else s?(r(!1),c(nA=>({...nA,end:null}))):o&&(n(!1),c({start:null,end:null}))},children:[t,o&&Z.jsxs(Z.Fragment,{children:[J.show&&Z.jsx("div",{style:{position:"absolute",left:J.x,top:J.y,color:"red",mixBlendMode:"difference",pointerEvents:"none",fontSize:12,fontFamily:"sans-serif",whiteSpace:"nowrap",zIndex:rI.dimensionOverlay},children:J.distance.toFixed(2)}),Z.jsx("div",{style:{position:"absolute",left:M.left,width:M.width,textAlign:"center",top:G.y+2,color:"red",mixBlendMode:"difference",pointerEvents:"none",marginTop:M.flipY?0:-20,fontSize:12,fontFamily:"sans-serif",zIndex:rI.dimensionOverlay},children:Math.abs(C.x-l.x).toFixed(2)}),Z.jsx("div",{style:{position:"absolute",left:U.x,height:M.height,display:"flex",flexDirection:"column",justifyContent:"center",top:M.top,color:"red",pointerEvents:"none",mixBlendMode:"difference",fontSize:12,fontFamily:"sans-serif",zIndex:rI.dimensionOverlay},children:Z.jsx("div",{style:{marginLeft:M.flipX?"-100%":4,paddingRight:4},children:Math.abs(C.y-l.y).toFixed(2)})}),Z.jsxs("svg",{style:{position:"absolute",left:0,top:0,pointerEvents:"none",mixBlendMode:"difference",zIndex:rI.dimensionOverlay},width:f.width,height:f.height,children:[Z.jsx("defs",{children:Z.jsx("marker",{id:"head",orient:"auto",markerWidth:"3",markerHeight:"4",refX:"2",refY:"2",children:Z.jsx("path",{d:"M0,0 V4 L2,2 Z",fill:"red"})})}),Z.jsx("line",{x1:G.x,y1:G.y,x2:U.x,y2:U.y,markerEnd:"url(#head)",strokeWidth:1.5,fill:"none",stroke:"red"}),Z.jsx("line",{x1:G.x,y1:G.y,x2:U.x,y2:G.y,strokeWidth:1.5,fill:"none",strokeDasharray:"2,2",stroke:"red"}),Z.jsx("line",{x1:U.x,y1:G.y,x2:U.x,y2:U.y,strokeWidth:1.5,fill:"none",strokeDasharray:"2,2",stroke:"red"})]}),s&&m.map(P=>{const q=P.id===I.start||P.id===I.end,O=xx/2;return Z.jsxs("svg",{width:xx,height:xx,style:{position:"absolute",left:P.screenPoint.x-O,top:P.screenPoint.y-O,pointerEvents:"none",zIndex:rI.dimensionOverlay},children:[Z.jsx("line",{x1:0,y1:0,x2:xx,y2:xx,stroke:q?"#66ccff":"white",strokeWidth:1}),Z.jsx("line",{x1:xx,y1:0,x2:0,y2:xx,stroke:q?"#66ccff":"white",strokeWidth:1})]},P.id)}),Z.jsxs("div",{style:{right:0,bottom:0,position:"absolute",color:"red",fontFamily:"sans-serif",fontSize:12,margin:4},children:["(",C.x.toFixed(2),",",C.y.toFixed(2),")",Z.jsx("br",{}),"(",l.x.toFixed(2),",",l.y.toFixed(2),")",Z.jsx("br",{}),"dist:"," ",Math.sqrt((l.x-C.x)**2+(l.y-C.y)**2).toFixed(2)]})]})]})},NNt=(t,A,e=0)=>{const i=t.width/2,o=t.height/2,n=t.center.x-i-e,s=t.center.x+i+e,r=t.center.y-o-e,g=t.center.y+o+e;return A.x>n&&A.x<s&&A.y>r&&A.y<g},MNt=({children:t,disabled:A,transform:e,soup:i,cancelPanDrag:o,onCreateEditEvent:n,onModifyEditEvent:s})=>{e||(e=Zg());const r=$.useRef(null),[g,a]=$.useState(null),[I,c]=$.useState(null),B=g!==null;al(E=>E.in_edit_mode);const C=al(E=>E.in_move_footprint_mode),Q=al(E=>E.setIsMovingComponent),l=A||!C;return Z.jsxs("div",{ref:r,style:{position:"relative",overflow:"hidden"},onMouseDown:E=>{if(l)return;const h=E.currentTarget.getBoundingClientRect(),u=E.clientX-h.left,p=E.clientY-h.top;if(Number.isNaN(u)||Number.isNaN(p))return;const f=Ce(Uy(e),{x:u,y:p});let b=!1;for(const D of i)if(D.type==="pcb_component"&&NNt(D,f,10/e.a)){o(),a(D.pcb_component_id),b=!0;const k=Math.random().toString();c({dragStart:f,originalCenter:D.center,dragEnd:f,edit_event_id:k}),n({edit_event_id:k,edit_event_type:"edit_pcb_component_location",pcb_edit_event_type:"edit_component_location",pcb_component_id:D.pcb_component_id,original_center:D.center,new_center:D.center,in_progress:!0,created_at:Date.now()}),Q(!0);break}if(b||a(null),b)return E.preventDefault(),!1},onMouseMove:E=>{if(!g||!I)return;const h=E.currentTarget.getBoundingClientRect(),u=E.clientX-h.left,p=E.clientY-h.top;if(Number.isNaN(u)||Number.isNaN(p))return;const f=Ce(Uy(e),{x:u,y:p});c({...I,dragEnd:f}),s({edit_event_id:I.edit_event_id,new_center:{x:I.originalCenter.x+f.x-I.dragStart.x,y:I.originalCenter.y+f.y-I.dragStart.y}})},onMouseUp:E=>{g&&(a(null),Q(!1),I&&(s({edit_event_id:I.edit_event_id,in_progress:!1}),c(null)))},children:[t,!l&&i.filter(E=>E.type==="pcb_component").map(E=>{if(!E?.center)return null;const h=Ce(e,E.center);return Z.jsx("div",{style:{position:"absolute",pointerEvents:"none",left:h.x,top:h.y,width:E.width*e.a+20,height:E.height*e.a+20,transform:"translate(-50%, -50%)",background:B&&g===E.pcb_component_id?"rgba(255, 0, 0, 0.2)":""}},E.pcb_component_id)})]})},vNt=({hotkeys:t})=>($.useEffect(()=>{const A=e=>{t.forEach(i=>{e.key===i.key&&i.onUse()})};return window.addEventListener("keydown",A),()=>{window.removeEventListener("keydown",A)}},[t]),Z.jsx("div",{className:qN`
5763
+ $1`).replace(/>(\s*)(?=<!--\s*\/)/g,"> ")}}});function _ee(t,A,e){if(!A||!e)return;let i=t.get(A);i||(i=new Set,t.set(A,i)),i.add(e);let o=t.get(e);o||(o=new Set,t.set(e,o)),o.add(A)}function mRt(t,A){if(!A.subcircuit_id&&!A.source_group_id)return[...t];const e=new Map;for(const s of t){const r=s[`${s.type}_id`];typeof r=="string"&&e.set(r,s)}const i=new Map;for(const s of t){const r=Object.entries(s);for(const[g,a]of r)if(g!=="parent_source_group_id"){if(g.endsWith("_id")&&typeof a=="string"){const I=e.get(a);_ee(i,s,I)}else if(g.endsWith("_ids")&&Array.isArray(a)){for(const I of a)if(typeof I=="string"){const c=e.get(I);_ee(i,s,c)}}}}const o=[],n=new Set;for(const s of t)(A.subcircuit_id&&s.subcircuit_id===A.subcircuit_id||A.source_group_id&&(s.source_group_id===A.source_group_id||Array.isArray(s.member_source_group_ids)&&s.member_source_group_ids.includes(A.source_group_id)))&&(o.push(s),n.add(s));for(;o.length>0;){const s=o.shift(),r=i.get(s);if(r)for(const g of r)n.has(g)||(n.add(g),o.push(g))}return t.filter(s=>n.has(s))}var d5=(t,A={})=>{const e=t;let i=e._internal_store;if(!i){i={counts:{},editCount:0},e._internal_store=i;for(const n of e){const s=n.type,r=n[`${s}_id`];if(!r)continue;const g=Number.parseInt(r.split("_").pop());Number.isNaN(g)||(i.counts[s]=Math.max(i.counts[s]??0,g))}}return new Proxy({},{get:(n,s)=>{if(s==="toArray")return()=>(e.editCount=i.editCount,e);if(s==="editCount")return i.editCount;if(s==="subtree")return g=>d5(mRt(e,g),A);const r=s;return{get:g=>e.find(a=>a.type===r&&a[`${r}_id`]===g),getUsing:g=>{const a=Object.keys(g);if(a.length!==1)throw new Error("getUsing requires exactly one key, e.g. { pcb_component_id }");const I=a[0],c=I.replace("_id",""),B=e.find(C=>C.type===c&&C[I]===g[I]);return B?e.find(C=>C.type===r&&C[`${r}_id`]===B[`${r}_id`]):null},getWhere:g=>{const a=Object.keys(g);return e.find(I=>I.type===r&&a.every(c=>I[c]===g[c]))},list:g=>{const a=g?Object.keys(g):[];return e.filter(I=>I.type===r&&a.every(c=>I[c]===g[c]))},insert:g=>{i.counts[r]??=-1,i.counts[r]++;const a=i.counts[r],I={type:r,[`${r}_id`]:`${r}_${a}`,...g};return A.validateInserts&&(UAe[r]??ylA).parse(I),e.push(I),i.editCount++,I},delete:g=>{const a=e.find(I=>I[`${r}_id`]===g);a&&(e.splice(e.indexOf(a),1),i.editCount++)},update:(g,a)=>{const I=e.find(c=>c.type===r&&c[`${r}_id`]===g);return I?(Object.assign(I,a),i.editCount++,I):null},select:g=>{if(r==="source_component")return e.find(a=>a.type==="source_component"&&a.name===g.replace(/\./g,""));if(r==="pcb_port"||r==="source_port"||r==="schematic_port"){const[a,I]=g.replace(/\./g,"").split(/[\s\>]+/),c=e.find(C=>C.type==="source_component"&&C.name===a);if(!c)return null;const B=e.find(C=>C.type==="source_port"&&C.source_component_id===c.source_component_id&&(C.name===I||(C.port_hints??[]).includes(I)));if(!B)return null;if(r==="source_port")return B;if(r==="pcb_port")return e.find(C=>C.type==="pcb_port"&&C.source_port_id===B.source_port_id);if(r==="schematic_port")return e.find(C=>C.type==="schematic_port"&&C.source_port_id===B.source_port_id)}}}}})};d5.unparsed=d5;var Ck=d5;function WlA(t){const A=t.type;return`${A}:${t[`${A}_id`]}`}var Ree=(t,A={})=>{let e=t._internal_store_indexed;if(!e){e={counts:{},editCount:0,indexes:{}};for(const s of t){const r=s.type,g=s[`${r}_id`];if(!g)continue;const a=Number.parseInt(g.split("_").pop()||"");Number.isNaN(a)||(e.counts[r]=Math.max(e.counts[r]??0,a))}const o=A.indexConfig||{},n=e.indexes;if(o.byId&&(n.byId=new Map),o.byType&&(n.byType=new Map),o.byRelation&&(n.byRelation=new Map),o.bySubcircuit&&(n.bySubcircuit=new Map),o.byCustomField&&o.byCustomField.length>0){n.byCustomField=new Map;for(const s of o.byCustomField)n.byCustomField.set(s,new Map)}for(const s of t){if(o.byId){const r=WlA(s);n.byId.set(r,s)}if(o.byType){const r=n.byType.get(s.type)||[];r.push(s),n.byType.set(s.type,r)}if(o.byRelation){const r=Object.entries(s);for(const[g,a]of r)if(g.endsWith("_id")&&g!==`${s.type}_id`&&typeof a=="string"){const I=n.byRelation.get(g)||new Map,c=I.get(a)||[];c.push(s),I.set(a,c),n.byRelation.set(g,I)}}if(o.bySubcircuit&&"subcircuit_id"in s){const r=s.subcircuit_id;if(r&&typeof r=="string"){const g=n.bySubcircuit.get(r)||[];g.push(s),n.bySubcircuit.set(r,g)}}if(o.byCustomField&&n.byCustomField){for(const r of o.byCustomField)if(r in s){const g=s[r];if(g!==void 0&&(typeof g=="string"||typeof g=="number")){const a=String(g),I=n.byCustomField.get(r),c=I.get(a)||[];c.push(s),I.set(a,c)}}}}t._internal_store_indexed=e}return new Proxy({},{get:(o,n)=>{if(n==="toArray")return()=>(t.editCount=e.editCount,t);if(n==="editCount")return e.editCount;const s=n;return{get:r=>{const g=A.indexConfig||{};return g.byId&&e.indexes.byId?e.indexes.byId.get(`${s}:${r}`)||null:g.byType&&e.indexes.byType?(e.indexes.byType.get(s)||[]).find(I=>I[`${s}_id`]===r)||null:t.find(a=>a.type===s&&a[`${s}_id`]===r)||null},getUsing:r=>{const g=A.indexConfig||{},a=Object.keys(r);if(a.length!==1)throw new Error("getUsing requires exactly one key, e.g. { pcb_component_id }");const I=a[0],c=I.replace("_id","");if(g.byRelation&&e.indexes.byRelation){const C=e.indexes.byRelation.get(I);if(C){const l=(C.get(r[I])||[]).find(h=>h.type===c);if(!l)return null;const E=l[`${s}_id`];return g.byId&&e.indexes.byId?e.indexes.byId.get(`${s}:${E}`)||null:g.byType&&e.indexes.byType?(e.indexes.byType.get(s)||[]).find(u=>u[`${s}_id`]===E)||null:t.find(h=>h.type===s&&h[`${s}_id`]===E)||null}}const B=t.find(C=>C.type===c&&C[I]===r[I]);return B&&t.find(C=>C.type===s&&C[`${s}_id`]===B[`${s}_id`])||null},getWhere:r=>{const g=A.indexConfig||{},a=Object.keys(r);if(a.length===1&&g.byCustomField&&e.indexes.byCustomField){const I=a[0],c=e.indexes.byCustomField.get(I);if(c){const B=String(r[I]);return(c.get(B)||[]).find(Q=>Q.type===s)||null}}if("subcircuit_id"in r&&g.bySubcircuit&&e.indexes.bySubcircuit){const I=r.subcircuit_id;return(e.indexes.bySubcircuit.get(I)||[]).find(B=>B.type===s&&a.every(C=>B[C]===r[C]))||null}return g.byType&&e.indexes.byType?(e.indexes.byType.get(s)||[]).find(c=>a.every(B=>c[B]===r[B]))||null:t.find(I=>I.type===s&&a.every(c=>I[c]===r[c]))||null},list:r=>{const g=A.indexConfig||{},a=r?Object.keys(r):[];if(a.length===0&&g.byType&&e.indexes.byType)return e.indexes.byType.get(s)||[];if(a.length===1&&a[0]==="subcircuit_id"&&g.bySubcircuit&&e.indexes.bySubcircuit){const c=r.subcircuit_id;return(e.indexes.bySubcircuit.get(c)||[]).filter(C=>C.type===s)}let I;return g.byType&&e.indexes.byType?I=e.indexes.byType.get(s)||[]:I=t.filter(c=>c.type===s),a.length>0?I.filter(c=>a.every(B=>c[B]===r[B])):I},insert:r=>{e.counts[s]??=-1,e.counts[s]++;const g=e.counts[s],a={type:s,[`${s}_id`]:`${s}_${g}`,...r};A.validateInserts&&(UAe[s]??ylA).parse(a),t.push(a),e.editCount++;const I=A.indexConfig||{};if(I.byId&&e.indexes.byId){const c=WlA(a);e.indexes.byId.set(c,a)}if(I.byType&&e.indexes.byType){const c=e.indexes.byType.get(s)||[];c.push(a),e.indexes.byType.set(s,c)}if(I.byRelation&&e.indexes.byRelation){const c=Object.entries(a);for(const[B,C]of c)if(B.endsWith("_id")&&B!==`${a.type}_id`&&typeof C=="string"){const Q=e.indexes.byRelation.get(B)||new Map,l=Q.get(C)||[];l.push(a),Q.set(C,l),e.indexes.byRelation.set(B,Q)}}if(I.bySubcircuit&&e.indexes.bySubcircuit&&"subcircuit_id"in a){const c=a.subcircuit_id;if(c&&typeof c=="string"){const B=e.indexes.bySubcircuit.get(c)||[];B.push(a),e.indexes.bySubcircuit.set(c,B)}}if(I.byCustomField&&e.indexes.byCustomField){for(const c of I.byCustomField)if(c in a){const B=a[c];if(B!==void 0&&(typeof B=="string"||typeof B=="number")){const C=String(B),Q=e.indexes.byCustomField.get(c),l=Q.get(C)||[];l.push(a),Q.set(C,l)}}}return a},delete:r=>{const g=A.indexConfig||{};let a;if(g.byId&&e.indexes.byId?a=e.indexes.byId.get(`${s}:${r}`):g.byType&&e.indexes.byType?a=(e.indexes.byType.get(s)||[]).find(B=>B[`${s}_id`]===r):a=t.find(c=>c[`${s}_id`]===r),!a)return;const I=t.indexOf(a);if(I>=0&&(t.splice(I,1),e.editCount++),g.byId&&e.indexes.byId){const c=WlA(a);e.indexes.byId.delete(c)}if(g.byType&&e.indexes.byType){const B=(e.indexes.byType.get(s)||[]).filter(C=>C[`${s}_id`]!==r);e.indexes.byType.set(s,B)}if(g.byRelation&&e.indexes.byRelation)for(const[c,B]of e.indexes.byRelation.entries())for(const[C,Q]of B.entries()){const l=Q.filter(E=>E!==a);l.length===0?B.delete(C):B.set(C,l)}if(g.bySubcircuit&&e.indexes.bySubcircuit&&"subcircuit_id"in a){const c=a.subcircuit_id;if(c){const C=(e.indexes.bySubcircuit.get(c)||[]).filter(Q=>Q!==a);C.length===0?e.indexes.bySubcircuit.delete(c):e.indexes.bySubcircuit.set(c,C)}}if(g.byCustomField&&e.indexes.byCustomField)for(const c of e.indexes.byCustomField.values())for(const[B,C]of c.entries()){const Q=C.filter(l=>l!==a);Q.length===0?c.delete(B):c.set(B,Q)}},update:(r,g)=>{const a=A.indexConfig||{};let I;if(a.byId&&e.indexes.byId?I=e.indexes.byId.get(`${s}:${r}`):a.byType&&e.indexes.byType?I=(e.indexes.byType.get(s)||[]).find(B=>B[`${s}_id`]===r):I=t.find(c=>c.type===s&&c[`${s}_id`]===r),!I)return null;if(a.byRelation&&e.indexes.byRelation){const c=Object.entries(I);for(const[B,C]of c)if(B.endsWith("_id")&&B!==`${I.type}_id`&&typeof C=="string"&&B in g&&g[B]!==C){const Q=e.indexes.byRelation.get(B);if(Q){const E=(Q.get(C)||[]).filter(h=>h!==I);E.length===0?Q.delete(C):Q.set(C,E)}}}if(a.bySubcircuit&&e.indexes.bySubcircuit&&"subcircuit_id"in I&&"subcircuit_id"in g){const c=I.subcircuit_id,B=g.subcircuit_id;if(c!==B){const Q=(e.indexes.bySubcircuit.get(c)||[]).filter(l=>l!==I);Q.length===0?e.indexes.bySubcircuit.delete(c):e.indexes.bySubcircuit.set(c,Q)}}if(a.byCustomField&&e.indexes.byCustomField){for(const c of a.byCustomField)if(c in I&&c in g&&I[c]!==g[c]){const B=e.indexes.byCustomField.get(c);if(B){const C=String(I[c]),l=(B.get(C)||[]).filter(E=>E!==I);l.length===0?B.delete(C):B.set(C,l)}}}if(Object.assign(I,g),e.editCount++,a.byRelation&&e.indexes.byRelation){const c=Object.entries(I);for(const[B,C]of c)if(B.endsWith("_id")&&B!==`${I.type}_id`&&typeof C=="string"&&B in g){const Q=e.indexes.byRelation.get(B)||new Map,l=Q.get(C)||[];l.includes(I)||(l.push(I),Q.set(C,l),e.indexes.byRelation.set(B,Q))}}if(a.bySubcircuit&&e.indexes.bySubcircuit&&"subcircuit_id"in I&&"subcircuit_id"in g){const c=I.subcircuit_id;if(c&&typeof c=="string"){const B=e.indexes.bySubcircuit.get(c)||[];B.includes(I)||(B.push(I),e.indexes.bySubcircuit.set(c,B))}}if(a.byCustomField&&e.indexes.byCustomField){for(const c of a.byCustomField)if(c in I&&c in g){const B=I[c];if(B!==void 0&&(typeof B=="string"||typeof B=="number")){const C=String(B),Q=e.indexes.byCustomField.get(c),l=Q.get(C)||[];l.includes(I)||(l.push(I),Q.set(C,l))}}}return I},select:r=>{if(s==="source_component")return t.find(g=>g.type==="source_component"&&g.name===r.replace(/\./g,""))||null;if(s==="pcb_port"||s==="source_port"||s==="schematic_port"){const[g,a]=r.replace(/\./g,"").split(/[\s\>]+/),I=t.find(B=>B.type==="source_component"&&B.name===g);if(!I)return null;const c=t.find(B=>B.type==="source_port"&&B.source_component_id===I.source_component_id&&(B.name===a||(B.port_hints??[]).includes(a)));if(!c)return null;if(s==="source_port")return c;if(s==="pcb_port")return t.find(B=>B.type==="pcb_port"&&B.source_port_id===c.source_port_id)||null;if(s==="schematic_port")return t.find(B=>B.type==="schematic_port"&&B.source_port_id===c.source_port_id)||null}return null}}}})};Ree.unparsed=Ree;var SRt=t=>{const A=t.type;return t[`${A}_id`]},bRt=t=>{let A=Number.POSITIVE_INFINITY,e=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY,o=Number.NEGATIVE_INFINITY;for(const n of t){if(!n.type.startsWith("pcb_"))continue;let s,r,g,a;if("x"in n&&"y"in n&&(s=Number(n.x),r=Number(n.y)),"outer_diameter"in n&&(g=Number(n.outer_diameter),a=Number(n.outer_diameter)),"width"in n&&(g=Number(n.width)),"height"in n&&(a=Number(n.height)),"center"in n&&(s=n.center.x,r=n.center.y),s!==void 0&&r!==void 0)A=Math.min(A,s),e=Math.min(e,r),i=Math.max(i,s),o=Math.max(o,r),g!==void 0&&a!==void 0&&(A=Math.min(A,s-g/2),e=Math.min(e,r-a/2),i=Math.max(i,s+g/2),o=Math.max(o,r+a/2)),"radius"in n&&(A=Math.min(A,s-n.radius),e=Math.min(e,r-n.radius),i=Math.max(i,s+n.radius),o=Math.max(o,r+n.radius));else if(n.type==="pcb_trace")for(const I of n.route)A=Math.min(A,I.x),e=Math.min(e,I.y),i=Math.max(i,I.x),o=Math.max(o,I.y)}return{minX:A,minY:e,maxX:i,maxY:o}};function kRt(t){let A=0;if(t.length==0)return A;for(var e=0;e<t.length;e++){var i=t.charCodeAt(e);A=(A<<5)-A+i,A=A&A}return Math.abs(A)}var Nee=[["#69d2e7","#a7dbd8","#e0e4cc","#f38630","#fa6900"],["#fe4365","#fc9d9a","#f9cdad","#c8c8a9","#83af9b"],["#ecd078","#d95b43","#c02942","#542437","#53777a"],["#556270","#4ecdc4","#c7f464","#ff6b6b","#c44d58"],["#774f38","#e08e79","#f1d4af","#ece5ce","#c5e0dc"],["#e8ddcb","#cdb380","#036564","#033649","#031634"],["#490a3d","#bd1550","#e97f02","#f8ca00","#8a9b0f"],["#594f4f","#547980","#45ada8","#9de0ad","#e5fcc2"],["#00a0b0","#6a4a3c","#cc333f","#eb6841","#edc951"],["#e94e77","#d68189","#c6a49a","#c6e5d9","#f4ead5"],["#3fb8af","#7fc7af","#dad8a7","#ff9e9d","#ff3d7f"],["#d9ceb2","#948c75","#d5ded9","#7a6a53","#99b2b7"],["#ffffff","#cbe86b","#f2e9e1","#1c140d","#cbe86b"],["#efffcd","#dce9be","#555152","#2e2633","#99173c"],["#343838","#005f6b","#008c9e","#00b4cc","#00dffc"],["#413e4a","#73626e","#b38184","#f0b49e","#f7e4be"],["#ff4e50","#fc913a","#f9d423","#ede574","#e1f5c4"],["#99b898","#fecea8","#ff847c","#e84a5f","#2a363b"],["#655643","#80bca3","#f6f7bd","#e6ac27","#bf4d28"],["#00a8c6","#40c0cb","#f9f2e7","#aee239","#8fbe00"],["#351330","#424254","#64908a","#e8caa4","#cc2a41"],["#554236","#f77825","#d3ce3d","#f1efa5","#60b99a"],["#5d4157","#838689","#a8caba","#cad7b2","#ebe3aa"],["#8c2318","#5e8c6a","#88a65e","#bfb35a","#f2c45a"],["#fad089","#ff9c5b","#f5634a","#ed303c","#3b8183"],["#ff4242","#f4fad2","#d4ee5e","#e1edb9","#f0f2eb"],["#f8b195","#f67280","#c06c84","#6c5b7b","#355c7d"],["#d1e751","#ffffff","#000000","#4dbce9","#26ade4"],["#1b676b","#519548","#88c425","#bef202","#eafde6"],["#5e412f","#fcebb6","#78c0a8","#f07818","#f0a830"],["#bcbdac","#cfbe27","#f27435","#f02475","#3b2d38"],["#452632","#91204d","#e4844a","#e8bf56","#e2f7ce"],["#eee6ab","#c5bc8e","#696758","#45484b","#36393b"],["#f0d8a8","#3d1c00","#86b8b1","#f2d694","#fa2a00"],["#2a044a","#0b2e59","#0d6759","#7ab317","#a0c55f"],["#f04155","#ff823a","#f2f26f","#fff7bd","#95cfb7"],["#b9d7d9","#668284","#2a2829","#493736","#7b3b3b"],["#bbbb88","#ccc68d","#eedd99","#eec290","#eeaa88"],["#b3cc57","#ecf081","#ffbe40","#ef746f","#ab3e5b"],["#a3a948","#edb92e","#f85931","#ce1836","#009989"],["#300030","#480048","#601848","#c04848","#f07241"],["#67917a","#170409","#b8af03","#ccbf82","#e33258"],["#aab3ab","#c4cbb7","#ebefc9","#eee0b7","#e8caaf"],["#e8d5b7","#0e2430","#fc3a51","#f5b349","#e8d5b9"],["#ab526b","#bca297","#c5ceae","#f0e2a4","#f4ebc3"],["#607848","#789048","#c0d860","#f0f0d8","#604848"],["#b6d8c0","#c8d9bf","#dadabd","#ecdbbc","#fedcba"],["#a8e6ce","#dcedc2","#ffd3b5","#ffaaa6","#ff8c94"],["#3e4147","#fffedf","#dfba69","#5a2e2e","#2a2c31"],["#fc354c","#29221f","#13747d","#0abfbc","#fcf7c5"],["#cc0c39","#e6781e","#c8cf02","#f8fcc1","#1693a7"],["#1c2130","#028f76","#b3e099","#ffeaad","#d14334"],["#a7c5bd","#e5ddcb","#eb7b59","#cf4647","#524656"],["#dad6ca","#1bb0ce","#4f8699","#6a5e72","#563444"],["#5c323e","#a82743","#e15e32","#c0d23e","#e5f04c"],["#edebe6","#d6e1c7","#94c7b6","#403b33","#d3643b"],["#fdf1cc","#c6d6b8","#987f69","#e3ad40","#fcd036"],["#230f2b","#f21d41","#ebebbc","#bce3c5","#82b3ae"],["#b9d3b0","#81bda4","#b28774","#f88f79","#f6aa93"],["#3a111c","#574951","#83988e","#bcdea5","#e6f9bc"],["#5e3929","#cd8c52","#b7d1a3","#dee8be","#fcf7d3"],["#1c0113","#6b0103","#a30006","#c21a01","#f03c02"],["#000000","#9f111b","#b11623","#292c37","#cccccc"],["#382f32","#ffeaf2","#fcd9e5","#fbc5d8","#f1396d"],["#e3dfba","#c8d6bf","#93ccc6","#6cbdb5","#1a1f1e"],["#f6f6f6","#e8e8e8","#333333","#990100","#b90504"],["#1b325f","#9cc4e4","#e9f2f9","#3a89c9","#f26c4f"],["#a1dbb2","#fee5ad","#faca66","#f7a541","#f45d4c"],["#c1b398","#605951","#fbeec2","#61a6ab","#accec0"],["#5e9fa3","#dcd1b4","#fab87f","#f87e7b","#b05574"],["#951f2b","#f5f4d7","#e0dfb1","#a5a36c","#535233"],["#8dccad","#988864","#fea6a2","#f9d6ac","#ffe9af"],["#2d2d29","#215a6d","#3ca2a2","#92c7a3","#dfece6"],["#413d3d","#040004","#c8ff00","#fa023c","#4b000f"],["#eff3cd","#b2d5ba","#61ada0","#248f8d","#605063"],["#ffefd3","#fffee4","#d0ecea","#9fd6d2","#8b7a5e"],["#cfffdd","#b4dec1","#5c5863","#a85163","#ff1f4c"],["#9dc9ac","#fffec7","#f56218","#ff9d2e","#919167"],["#4e395d","#827085","#8ebe94","#ccfc8e","#dc5b3e"],["#a8a7a7","#cc527a","#e8175d","#474747","#363636"],["#f8edd1","#d88a8a","#474843","#9d9d93","#c5cfc6"],["#046d8b","#309292","#2fb8ac","#93a42a","#ecbe13"],["#f38a8a","#55443d","#a0cab5","#cde9ca","#f1edd0"],["#a70267","#f10c49","#fb6b41","#f6d86b","#339194"],["#ff003c","#ff8a00","#fabe28","#88c100","#00c176"],["#ffedbf","#f7803c","#f54828","#2e0d23","#f8e4c1"],["#4e4d4a","#353432","#94ba65","#2790b0","#2b4e72"],["#0ca5b0","#4e3f30","#fefeeb","#f8f4e4","#a5b3aa"],["#4d3b3b","#de6262","#ffb88c","#ffd0b3","#f5e0d3"],["#fffbb7","#a6f6af","#66b6ab","#5b7c8d","#4f2958"],["#edf6ee","#d1c089","#b3204d","#412e28","#151101"],["#9d7e79","#ccac95","#9a947c","#748b83","#5b756c"],["#fcfef5","#e9ffe1","#cdcfb7","#d6e6c3","#fafbe3"],["#9cddc8","#bfd8ad","#ddd9ab","#f7af63","#633d2e"],["#30261c","#403831","#36544f","#1f5f61","#0b8185"],["#aaff00","#ffaa00","#ff00aa","#aa00ff","#00aaff"],["#d1313d","#e5625c","#f9bf76","#8eb2c5","#615375"],["#ffe181","#eee9e5","#fad3b2","#ffba7f","#ff9c97"],["#73c8a9","#dee1b6","#e1b866","#bd5532","#373b44"],["#805841","#dcf7f3","#fffcdd","#ffd8d8","#f5a2a2"]],GRt=t=>{let{x:A,y:e,width:i,height:o}={...t,...t.size,...t.center,...t.position};if(t.x1!==void 0&&t.x2!==void 0&&t.y1!==void 0&&t.y2!==void 0&&(A=(t.x1+t.x2)/2,e=(t.y1+t.y2)/2,i=Math.abs(t.x1-t.x2),o=Math.abs(t.y1-t.y2)),t.points&&Array.isArray(t.points)&&t.points.length>0){const r=t.points.map(C=>C.x),g=t.points.map(C=>C.y),a=Math.min(...r),I=Math.max(...r),c=Math.min(...g),B=Math.max(...g);A=(a+I)/2,e=(c+B)/2,i=I-a,o=B-c}const n=t.text||t.name||t.source?.text||t.source?.name||"?",s=t;return A===void 0||e===void 0?null:(i===void 0&&"outer_diameter"in t&&(i=t.outer_diameter,o=t.outer_diameter),(i===void 0||o===void 0)&&(i=.1,o=.1),{x:A,y:e,width:i,height:o,title:n,content:s,bg_color:Nee[kRt(t.type||n)%Nee.length]?.[4]??"#f00"})},xRt=t=>!!t,FRt=t=>{const A=t.filter(a=>a.type.startsWith("pcb_")||a.type.startsWith("schematic_")).concat(t.filter(a=>a.type==="pcb_trace"||a.type==="schematic_trace").flatMap(a=>a.route)).map(a=>GRt(a)).filter(xRt);if(A.length===0)return{center:{x:0,y:0},width:0,height:0};let e=A[0].x-A[0].width/2,i=A[0].x+A[0].width/2,o=A[0].y-A[0].height/2,n=A[0].y+A[0].height/2;for(const a of A.slice(1))e=Math.min(e,a.x-a.width/2),i=Math.max(i,a.x+a.width/2),o=Math.min(o,a.y-a.height/2),n=Math.max(n,a.y+a.height/2);const s=i-e,r=n-o;return{center:{x:e+s/2,y:o+r/2},width:s,height:r}},RD={IS_SHOWING_PCB_GROUPS:"pcb_viewer_is_showing_pcb_groups",PCB_GROUP_VIEW_MODE:"pcb_viewer_group_view_mode",IS_SHOWING_COPPER_POURS:"pcb_viewer_is_showing_copper_pours",IS_SHOWING_GROUP_ANCHOR_OFFSETS:"pcb_viewer_is_showing_group_anchor_offsets",IS_SHOWING_SOLDER_MASK:"pcb_viewer_is_showing_solder_mask"},p5=(t,A)=>{if(typeof window>"u")return A;try{const e=localStorage.getItem(t);return e!==null?JSON.parse(e):A}catch{return A}},f5=(t,A)=>{if(!(typeof window>"u"))try{localStorage.setItem(t,JSON.stringify(A))}catch{}},_Rt=(t,A)=>{if(typeof window>"u")return A;try{const e=localStorage.getItem(t);return e!==null?JSON.parse(e):A}catch{return A}},RRt=(t,A)=>{if(!(typeof window>"u"))try{localStorage.setItem(t,JSON.stringify(A))}catch{}},NRt="named_only",MRt=(t={},A=!1)=>MNA(e=>({selected_layer:"top",pcb_viewer_id:`pcb_viewer_${Math.random().toString().slice(2,10)}`,in_edit_mode:!1,in_move_footprint_mode:!1,in_draw_trace_mode:!1,is_moving_component:!1,is_drawing_trace:!1,is_mouse_over_container:!1,is_showing_multiple_traces_length:!1,is_showing_rats_nest:!1,is_showing_autorouting:!0,is_showing_drc_errors:!0,is_showing_copper_pours:p5(RD.IS_SHOWING_COPPER_POURS,!0),is_showing_pcb_groups:A?!1:p5(RD.IS_SHOWING_PCB_GROUPS,!0),is_showing_group_anchor_offsets:p5(RD.IS_SHOWING_GROUP_ANCHOR_OFFSETS,!0),is_showing_solder_mask:p5(RD.IS_SHOWING_SOLDER_MASK,!1),pcb_group_view_mode:A?"all":_Rt(RD.PCB_GROUP_VIEW_MODE,NRt),hovered_error_id:null,...t,selectLayer:i=>e({selected_layer:i}),setEditMode:i=>e({in_edit_mode:i!=="off",in_move_footprint_mode:i==="move_footprint",in_draw_trace_mode:i==="draw_trace",is_moving_component:!1,is_drawing_trace:!1}),setIsShowingRatsNest:i=>e({is_showing_rats_nest:i}),setIsMovingComponent:i=>e({is_moving_component:i}),setIsDrawingTrace:i=>e({is_drawing_trace:i}),setIsMouseOverContainer:i=>e({is_mouse_over_container:i}),setIsShowingMultipleTracesLength:i=>e({is_showing_multiple_traces_length:i}),setIsShowingAutorouting:i=>e({is_showing_autorouting:i}),setIsShowingDrcErrors:i=>e({is_showing_drc_errors:i}),setIsShowingCopperPours:i=>{f5(RD.IS_SHOWING_COPPER_POURS,i),e({is_showing_copper_pours:i})},setIsShowingPcbGroups:i=>{A||(f5(RD.IS_SHOWING_PCB_GROUPS,i),e({is_showing_pcb_groups:i}))},setIsShowingGroupAnchorOffsets:i=>{f5(RD.IS_SHOWING_GROUP_ANCHOR_OFFSETS,i),e({is_showing_group_anchor_offsets:i})},setIsShowingSolderMask:i=>{f5(RD.IS_SHOWING_SOLDER_MASK,i),e({is_showing_solder_mask:i})},setPcbGroupViewMode:i=>{A||(RRt(RD.PCB_GROUP_VIEW_MODE,i),e({pcb_group_view_mode:i}))},setHoveredErrorId:i=>e({hovered_error_id:i})})),al=t=>{const A=$.useContext(Mee);return PNA(A,t)},Mee=$.createContext(null),vRt=({children:t,initialState:A,disablePcbGroups:e})=>{const i=$.useMemo(()=>MRt(A,e),[e]);return Z.jsx(Mee.Provider,{value:i,children:t})},URt=()=>{const t=al(e=>e.pcb_viewer_id),A=(e,i)=>Ja(e,{containerId:t,...i});return A.error=(e,i)=>Ja.error(e,{containerId:t,...i}),A.promise=Ja.promise,A},LRt=()=>{$.useEffect(()=>{s_t()},[]);const t=al(A=>A.pcb_viewer_id);return Z.jsx(n_t,{position:"top-center",containerId:t})},HRt=function(){},vee=typeof window<"u",YRt=vee?$.useLayoutEffect:$.useEffect,JRt=YRt,Uee={x:0,y:0,width:0,height:0,top:0,left:0,bottom:0,right:0};function KRt(){var t=$.useState(null),A=t[0],e=t[1],i=$.useState(Uee),o=i[0],n=i[1],s=$.useMemo(function(){return new window.ResizeObserver(function(r){if(r[0]){var g=r[0].contentRect,a=g.x,I=g.y,c=g.width,B=g.height,C=g.top,Q=g.left,l=g.bottom,E=g.right;n({x:a,y:I,width:c,height:B,top:C,left:Q,bottom:l,right:E})}})},[]);return JRt(function(){if(A)return s.observe(A),function(){s.disconnect()}},[A]),[e,o]}var uL=vee&&typeof window.ResizeObserver<"u"?KRt:function(){return[HRt,Uee]},Lee=({initialTransform:t,initialTouch1:A,initialTouch2:e,finalTouch1:i,finalTouch2:o})=>{if(!i||!o)return t;const n={x:(A.x+e.x)/2,y:(A.y+e.y)/2},s={x:(i.x+o.x)/2,y:(i.y+o.y)/2},r=Math.hypot(e.x-A.x,e.y-A.y),g=Math.hypot(o.x-i.x,o.y-i.y),a=r===0?1:g/r,I=s.x-n.x,c=s.y-n.y;return zi(so(I,c),so(n.x,n.y),Ra(a,a),so(-n.x,-n.y),t)},TRt=(t={})=>{const A=$.useRef(null),[e,i]=$.useState(0),o=t.canvasElm??A.current,[n,s]=$.useState(t.initialTransform??Zg()),[r,g]=$.useState(0),[a,I]=$.useReducer(p=>p+1,0),c=$.useCallback(p=>{t.onSetTransform&&t.onSetTransform(p),t.transform||s(p)},[t.onSetTransform,s]),B=$.useCallback(p=>{c(p),I()},[c]),C=t.transform??n,Q=$.useCallback(()=>{i(Date.now())},[]),l=$.useRef("none"),E=$.useRef(null),h=$.useRef(null);$.useEffect(()=>{const p=t.canvasElm??A.current;if(p&&!o){g(r+1);return}if(!p){const j=setTimeout(()=>{g(r+1)},100);return()=>clearTimeout(j)}let f=t.transform??n,b={x:0,y:0},D={x:0,y:0},k=!1;const m=j=>({x:j.pageX-p.getBoundingClientRect().left-window.scrollX,y:j.pageY-p.getBoundingClientRect().top-window.scrollY});function F(j){t.enabled!==!1&&(t.shouldDrag&&!t.shouldDrag(j)||(b=m(j),!(Date.now()-e<100)&&(k=!0,j.preventDefault())))}function G(j){if(!k||t.enabled===!1||t.shouldDrag&&!t.shouldDrag(j))return;D=m(j);const eA=zi(so(D.x-b.x,D.y-b.y),f);c(eA),f=eA,k=!1}function U(j){if(m(j),!k||t.enabled===!1||t.shouldDrag&&!t.shouldDrag(j))return;D=m(j);const eA=zi(so(D.x-b.x,D.y-b.y),f);c(eA)}function M(j){if(t.enabled===!1||t.shouldDrag&&!t.shouldDrag(j))return;const eA=m(j),nA=zi(so(eA.x,eA.y),Ra(1-j.deltaY/1e3,1-j.deltaY/1e3),so(-eA.x,-eA.y),f);c(nA),f=nA,j.preventDefault()}function J(j){if(!k||t.shouldDrag&&!t.shouldDrag(j))return;if(p){const nA=p.getBoundingClientRect();if(j.clientX>=nA.left+10&&j.clientX<=nA.right-10&&j.clientY>=nA.top+10&&j.clientY<=nA.bottom-10)return}k=!1,D=m(j);const eA=zi(so(D.x-b.x,D.y-b.y),f);c(eA),f=eA}function P(j){if(j.preventDefault(),t.enabled!==!1){if(j.touches.length===1){l.current="drag";const eA=j.touches[0];E.current={initialTransform:f,initialTouch:{x:eA.clientX,y:eA.clientY}}}else if(j.touches.length===2){l.current="pinch";const eA=j.touches[0],nA=j.touches[1];h.current={initialTransform:f,initialTouch1:{x:eA.clientX,y:eA.clientY},initialTouch2:{x:nA.clientX,y:nA.clientY},finalTouch1:null,finalTouch2:null}}}}function q(j){if(j.preventDefault(),t.enabled!==!1){if(l.current==="drag"&&j.touches.length===1&&E.current){const eA=j.touches[0],nA={x:eA.clientX,y:eA.clientY},IA=nA.x-E.current.initialTouch.x,iA=nA.y-E.current.initialTouch.y,oA=zi(so(IA,iA),E.current.initialTransform);c(oA)}else if(l.current==="pinch"&&j.touches.length===2&&h.current){const eA=j.touches[0],nA=j.touches[1];h.current.finalTouch1={x:eA.clientX,y:eA.clientY},h.current.finalTouch2={x:nA.clientX,y:nA.clientY};const IA=Lee(h.current);c(IA)}}}function O(j){j.preventDefault();const eA=j.changedTouches[0];if(l.current==="drag"&&E.current&&eA){const nA={x:eA.clientX,y:eA.clientY},IA=nA.x-E.current.initialTouch.x,iA=nA.y-E.current.initialTouch.y,oA=zi(so(IA,iA),E.current.initialTransform);c(oA),f=oA}else if(l.current==="pinch"&&h.current){const nA=Lee(h.current);c(nA),f=nA}l.current="none",E.current=null,h.current=null}return p.addEventListener("mousedown",F),p.addEventListener("mouseup",G),window.addEventListener("mousemove",U),p.addEventListener("mouseout",J),p.addEventListener("wheel",M),p.addEventListener("touchstart",P,{passive:!1}),p.addEventListener("touchmove",q,{passive:!1}),p.addEventListener("touchend",O,{passive:!1}),p.addEventListener("touchcancel",O,{passive:!1}),()=>{p.removeEventListener("mousedown",F),p.removeEventListener("mouseup",G),window.removeEventListener("mousemove",U),p.removeEventListener("mouseout",J),p.removeEventListener("wheel",M),p.removeEventListener("touchstart",P),p.removeEventListener("touchmove",q),p.removeEventListener("touchend",O),p.removeEventListener("touchcancel",O)}},[o,r,a,e,t.enabled,t.shouldDrag]);const u=$.useCallback(p=>Ce(C,p),[C]);return{ref:A,transform:C,applyTransformToPoint:u,setTransform:B,cancelDrag:Q}},qRt=TRt;function PRt(t){const A=new Map;let e=0;function i(o){for(const[,s]of A)if(s.has(o))return s;const n=new Set;return A.set(`connectivity_net${e++}`,n),n}for(const o of t){let n=null;for(const s of o){if(!n)n=i(s);else if(!n.has(s)){const r=i(s);if(r!==n){for(const g of r)n.add(g);A.delete(Array.from(A.entries()).find(([,g])=>g===r)[0])}}n.add(s)}}return Object.fromEntries(Array.from(A.entries()).map(([o,n])=>[o,Array.from(n)]))}var ORt=class{netMap;idToNetMap;constructor(t){this.netMap=t,this.idToNetMap={};for(const[A,e]of Object.entries(t))for(const i of e)this.idToNetMap[i]=A}addConnections(t){for(const A of t){const e=new Set;for(const o of A){const n=this.idToNetMap[o];n&&e.add(n)}let i;if(e.size===0)i=`connectivity_net${Object.keys(this.netMap).length}`,this.netMap[i]=[];else if(e.size===1)i=e.values().next().value??`connectivity_net${Object.keys(this.netMap).length}`;else{i=e.values().next().value??`connectivity_net${Object.keys(this.netMap).length}`;for(const o of e)if(o!==i){this.netMap[i].push(...this.netMap[o]),this.netMap[o]=this.netMap[i];for(const n of this.netMap[i])this.idToNetMap[n]=i}}for(const o of A)this.netMap[i].includes(o)||this.netMap[i].push(o),this.idToNetMap[o]=i}}getIdsConnectedToNet(t){return this.netMap[t]||[]}getNetConnectedToId(t){return this.idToNetMap[t]}areIdsConnected(t,A){if(t===A)return!0;const e=this.getNetConnectedToId(t);if(!e)return!1;const i=this.getNetConnectedToId(A);return i?e===i||i===t||i===t:!1}areAllIdsConnected(t){const A=this.getNetConnectedToId(t[0]);for(const e of t){const i=this.getNetConnectedToId(e);if(i===void 0||i!==A)return!1}return!0}},Hee=t=>{const A=[];for(const i of t)if(i.type==="source_trace")A.push([i.source_trace_id,...i.connected_source_port_ids??[],...i.connected_source_net_ids??[]].filter(Boolean));else if(i.type==="pcb_port"){const{pcb_port_id:o,source_port_id:n}=i;n&&o&&A.push([n,o])}else if(i.type==="pcb_smtpad"){const{pcb_smtpad_id:o,pcb_port_id:n}=i;n&&o&&A.push([o,n])}else if(i.type==="pcb_plated_hole"){const{pcb_plated_hole_id:o,pcb_port_id:n}=i;n&&o&&A.push([o,n])}else if(i.type==="pcb_trace"){const{pcb_trace_id:o,source_trace_id:n}=i,s=Array.isArray(i.route)?i.route.filter(r=>r&&r.route_type==="wire"):[];if(n&&o&&A.push([o,n]),Array.isArray(s)){const r=s.find(a=>a?.start_pcb_port_id)?.start_pcb_port_id,g=s.find(a=>a?.end_pcb_port_id)?.end_pcb_port_id;r&&o&&g&&A.push([r,o,g])}}else if(i.type==="pcb_via"){const{pcb_via_id:o,pcb_trace_id:n}=i;n&&o&&A.push([o,n])}else if(i.type==="source_component"&&i.internally_connected_source_port_ids)for(const o of i.internally_connected_source_port_ids)A.push(o);const e=PRt(A);return new ORt(e)};function WRt({primitivesWithoutInteractionMetadata:t,drawingObjectIdsWithMouseOver:A,primitiveIdsInMousedOverNet:e}){const i=[];for(const o of t){const n={...o};o?.layer==="drill"?(n.is_in_highlighted_net=!1,n.is_mouse_over=!1):A.has(o._pcb_drawing_object_id)?n.is_mouse_over=!0:o._element&&("pcb_trace_id"in o._element&&e.includes(o._element.pcb_trace_id)||"pcb_port_id"in o._element&&e.includes(o._element.pcb_port_id))?n.is_in_highlighted_net=!0:(n.is_in_highlighted_net=!1,n.is_mouse_over=!1),i.push(n)}return i}function ZRt(t,A){if(t.length<2)throw new Error("Stroke must have at least two points");const e=t.map(c=>Array.isArray(c)?{x:c[0],y:c[1]}:c),i=[],o=[];function n(c,B){const C=B.x-c.x,Q=B.y-c.y,l=Math.sqrt(C*C+Q*Q);return{x:-Q/l,y:C/l}}function s(c,B,C,Q){const l=Q/2,E={x:c.x+B.x*l*C,y:c.y+B.y*l*C};C>0?i.push(E):o.unshift(E)}const r=n(e[0],e[1]),g=e[0].trace_width??A;s(e[0],r,1,g),s(e[0],r,-1,g);for(let c=1;c<e.length-1;c++){const B=e[c-1],C=e[c],Q=e[c+1],l=n(B,C),E=n(C,Q),h=l.x+E.x,u=l.y+E.y,p=Math.sqrt(h*h+u*u),f=C.trace_width??A;if(p/2>2*(f/2))s(C,l,1,f),s(C,E,1,f),s(C,l,-1,f),s(C,E,-1,f);else{const D=1/p;s(C,{x:h*D,y:u*D},1,f),s(C,{x:h*D,y:u*D},-1,f)}}const a=n(e[e.length-2],e[e.length-1]),I=e[e.length-1].trace_width??A;return s(e[e.length-1],a,1,I),s(e[e.length-1],a,-1,I),[...i,...o]}var VRt=(t,A)=>{const{x:e,y:i,width:o,height:n,layer:s,rect_border_radius:r}=t,g=t.corner_radius??r??0,a=[{_pcb_drawing_object_id:Dr("rect"),pcb_drawing_type:"rect",x:e,y:i,w:o,h:n,layer:s||"top",_element:t,_parent_pcb_component:A._parent_pcb_component,_parent_source_component:A._parent_source_component,_source_port:A._source_port,roundness:g,...t.shape==="rotated_rect"&&t.ccw_rotation!==void 0?{ccw_rotation:t.ccw_rotation}:{}}];if(t.is_covered_with_solder_mask){const I=s==="bottom"?"soldermask_with_copper_bottom":"soldermask_with_copper_top",B={...{_pcb_drawing_object_id:Dr("rect"),pcb_drawing_type:"rect",x:e,y:i,w:o,h:n,layer:I,_element:t,_parent_pcb_component:A._parent_pcb_component,_parent_source_component:A._parent_source_component,_source_port:A._source_port,roundness:g,...t.shape==="rotated_rect"&&t.ccw_rotation!==void 0?{ccw_rotation:t.ccw_rotation}:{}},..."solder_mask_color"in t&&t.solder_mask_color?{color:t.solder_mask_color}:{}};a.push(B)}return a},jRt=(t,A)=>{const{x:e,y:i,radius:o,layer:n}=t,s=[{_pcb_drawing_object_id:Dr("circle"),pcb_drawing_type:"circle",x:e,y:i,r:o,layer:n||"top",_element:t,_parent_pcb_component:A._parent_pcb_component,_parent_source_component:A._parent_source_component,_source_port:A._source_port}];if(t.is_covered_with_solder_mask){const r=n==="bottom"?"soldermask_with_copper_bottom":"soldermask_with_copper_top",g={_pcb_drawing_object_id:Dr("circle"),pcb_drawing_type:"circle",x:e,y:i,r:o,layer:r,_element:t,_parent_pcb_component:A._parent_pcb_component,_parent_source_component:A._parent_source_component,_source_port:A._source_port,..."solder_mask_color"in t&&t.solder_mask_color?{color:t.solder_mask_color}:{}};s.push(g)}return s},zRt=(t,A)=>{const{layer:e,points:i}=t,o=[{_pcb_drawing_object_id:Dr("polygon"),pcb_drawing_type:"polygon",points:Gx(i),layer:e||"top",_element:t,_parent_pcb_component:A._parent_pcb_component,_parent_source_component:A._parent_source_component,_source_port:A._source_port}];if(t.is_covered_with_solder_mask){const n=e==="bottom"?"soldermask_with_copper_bottom":"soldermask_with_copper_top",s={_pcb_drawing_object_id:Dr("polygon"),pcb_drawing_type:"polygon",points:Gx(i),layer:n,_element:t,_parent_pcb_component:A._parent_pcb_component,_parent_source_component:A._parent_source_component,_source_port:A._source_port,..."solder_mask_color"in t&&t.solder_mask_color?{color:t.solder_mask_color}:{}};o.push(s)}return o},XRt=(t,A)=>{const{x:e,y:i,width:o,height:n,layer:s}=t,r=[{_pcb_drawing_object_id:Dr("pill"),pcb_drawing_type:"pill",x:e,y:i,w:o,h:n,layer:s||"top",_element:t,_parent_pcb_component:A._parent_pcb_component,_parent_source_component:A._parent_source_component,_source_port:A._source_port}];if(t.is_covered_with_solder_mask){const g=s==="bottom"?"soldermask_with_copper_bottom":"soldermask_with_copper_top",a={_pcb_drawing_object_id:Dr("pill"),pcb_drawing_type:"pill",x:e,y:i,w:o,h:n,layer:g,_element:t,_parent_pcb_component:A._parent_pcb_component,_parent_source_component:A._parent_source_component,_source_port:A._source_port,..."solder_mask_color"in t&&t.solder_mask_color?{color:t.solder_mask_color}:{}};r.push(a)}return r},$Rt=(t,A)=>{const{x:e,y:i,width:o,height:n,layer:s,ccw_rotation:r}=t,g=[{_pcb_drawing_object_id:Dr("pill"),pcb_drawing_type:"pill",x:e,y:i,w:o,h:n,layer:s||"top",_element:t,_parent_pcb_component:A._parent_pcb_component,_parent_source_component:A._parent_source_component,_source_port:A._source_port,ccw_rotation:r}];if(t.is_covered_with_solder_mask){const a=s==="bottom"?"soldermask_with_copper_bottom":"soldermask_with_copper_top",I={_pcb_drawing_object_id:Dr("pill"),pcb_drawing_type:"pill",x:e,y:i,w:o,h:n,layer:a,_element:t,_parent_pcb_component:A._parent_pcb_component,_parent_source_component:A._parent_source_component,_source_port:A._source_port,ccw_rotation:r,..."solder_mask_color"in t&&t.solder_mask_color?{color:t.solder_mask_color}:{}};g.push(I)}return g},ANt=(t,A)=>{const{_parent_pcb_component:e,_parent_source_component:i}=A,o=t,n=typeof o.font_size=="string"?Et.parse(o.font_size):o.font_size??.2;let s;return o.knockout_padding&&(s={left:typeof o.knockout_padding.left=="string"?Et.parse(o.knockout_padding.left):o.knockout_padding.left,top:typeof o.knockout_padding.top=="string"?Et.parse(o.knockout_padding.top):o.knockout_padding.top,bottom:typeof o.knockout_padding.bottom=="string"?Et.parse(o.knockout_padding.bottom):o.knockout_padding.bottom,right:typeof o.knockout_padding.right=="string"?Et.parse(o.knockout_padding.right):o.knockout_padding.right}),[{_pcb_drawing_object_id:Dr("text"),pcb_drawing_type:"text",x:o.anchor_position.x,y:o.anchor_position.y,layer:o.layer,align:o.anchor_alignment??"center",text:o.text,size:n,ccw_rotation:o.ccw_rotation,is_mirrored:o.is_mirrored,is_knockout:o.is_knockout,knockout_padding:s,_element:t,_parent_pcb_component:e,_parent_source_component:i}]},Xo=0,Dr=t=>`${t}_${Xo++}`,Gx=t=>(t??[]).map(A=>({x:Et.parse(A.x),y:Et.parse(A.y)})),eNt=(t,A)=>{const e="pcb_component_id"in t?A.find(s=>s.type==="pcb_component"&&s.pcb_component_id===t.pcb_component_id):void 0,i=e&&"source_component_id"in e?A.find(s=>s.type==="source_component"&&s.source_component_id===e.source_component_id):void 0,o="source_port_id"in t?t.source_port_id:"pcb_port_id"in t?Ck(A).pcb_port.get(t.pcb_port_id)?.source_port_id:void 0,n=o?A.find(s=>s.type==="source_port"&&s.source_port_id===o):void 0;switch(t.type){case"pcb_panel":{const{width:s,height:r,center:g}=t,a=g?.x??0,I=g?.y??0;return[{_pcb_drawing_object_id:`line_${Xo++}`,pcb_drawing_type:"line",x1:a-s/2,y1:I-r/2,x2:a+s/2,y2:I-r/2,width:1,zoomIndependent:!0,layer:"board",_element:t},{_pcb_drawing_object_id:`line_${Xo++}`,pcb_drawing_type:"line",x1:a-s/2,y1:I+r/2,x2:a+s/2,y2:I+r/2,width:1,zoomIndependent:!0,layer:"board",_element:t},{_pcb_drawing_object_id:`line_${Xo++}`,pcb_drawing_type:"line",x1:a-s/2,y1:I-r/2,x2:a-s/2,y2:I+r/2,width:1,zoomIndependent:!0,layer:"board",_element:t},{_pcb_drawing_object_id:`line_${Xo++}`,pcb_drawing_type:"line",x1:a+s/2,y1:I-r/2,x2:a+s/2,y2:I+r/2,width:1,zoomIndependent:!0,layer:"board",_element:t}]}case"pcb_board":{const{width:s,height:r,center:g,outline:a}=t,I=[];return A.some(B=>B.type==="pcb_smtpad"&&B.is_covered_with_solder_mask===!0)&&(a&&a.length>2?(I.push({_pcb_drawing_object_id:`polygon_${Xo++}`,pcb_drawing_type:"polygon",points:Gx(a),layer:"soldermask_top",_element:t}),I.push({_pcb_drawing_object_id:`polygon_${Xo++}`,pcb_drawing_type:"polygon",points:Gx(a),layer:"soldermask_bottom",_element:t})):s&&r&&(I.push({_pcb_drawing_object_id:`rect_${Xo++}`,pcb_drawing_type:"rect",x:g.x,y:g.y,w:s,h:r,layer:"soldermask_top",_element:t}),I.push({_pcb_drawing_object_id:`rect_${Xo++}`,pcb_drawing_type:"rect",x:g.x,y:g.y,w:s,h:r,layer:"soldermask_bottom",_element:t}))),a&&a.length>2?I.push(...a.map((B,C,Q)=>({_pcb_drawing_object_id:`line_${Xo++}`,pcb_drawing_type:"line",x1:B.x,y1:B.y,x2:C===Q.length-1?Q[0].x:Q[C+1].x,y2:C===Q.length-1?Q[0].y:Q[C+1].y,width:1,zoomIndependent:!0,layer:"board",_element:t}))):I.push({_pcb_drawing_object_id:`line_${Xo++}`,pcb_drawing_type:"line",x1:g.x-s/2,y1:g.y-r/2,x2:g.x+s/2,y2:g.y-r/2,width:1,zoomIndependent:!0,layer:"board",_element:t},{_pcb_drawing_object_id:`line_${Xo++}`,pcb_drawing_type:"line",x1:g.x-s/2,y1:g.y+r/2,x2:g.x+s/2,y2:g.y+r/2,width:1,zoomIndependent:!0,layer:"board",_element:t},{_pcb_drawing_object_id:`line_${Xo++}`,pcb_drawing_type:"line",x1:g.x-s/2,y1:g.y-r/2,x2:g.x-s/2,y2:g.y+r/2,width:1,zoomIndependent:!0,layer:"board",_element:t},{_pcb_drawing_object_id:`line_${Xo++}`,pcb_drawing_type:"line",x1:g.x+s/2,y1:g.y-r/2,x2:g.x+s/2,y2:g.y+r/2,width:1,zoomIndependent:!0,layer:"board",_element:t}),I}case"pcb_smtpad":{const s={_parent_pcb_component:e,_parent_source_component:i,_source_port:n};return t.shape==="rect"||t.shape==="rotated_rect"?VRt(t,s):t.shape==="circle"?jRt(t,s):t.shape==="polygon"?zRt(t,s):t.shape==="pill"?XRt(t,s):t.shape==="rotated_pill"?$Rt(t,s):[]}case"pcb_hole":{if(t.hole_shape==="circle"||!t.hole_shape){const{x:s,y:r,hole_diameter:g}=t;return[{_pcb_drawing_object_id:`circle_${Xo++}`,pcb_drawing_type:"circle",x:s,y:r,r:g/2,layer:"drill",_element:t,_parent_pcb_component:e,_parent_source_component:i}]}else if(t.hole_shape==="pill"||t.hole_shape==="rotated_pill"){const{x:s,y:r,hole_width:g,hole_height:a}=t;return typeof g!="number"||typeof a!="number"?[]:[{_pcb_drawing_object_id:`pill_${Xo++}`,pcb_drawing_type:"pill",x:s,y:r,w:g,h:a,layer:"drill",_element:t,_parent_pcb_component:e,_parent_source_component:i,ccw_rotation:t.ccw_rotation}]}else if(t.hole_shape==="rect"){const{x:s,y:r,hole_width:g,hole_height:a}=t;return typeof g!="number"||typeof a!="number"?[]:[{_pcb_drawing_object_id:`rect_${Xo++}`,pcb_drawing_type:"rect",x:s,y:r,w:g,h:a,layer:"drill",_element:t,_parent_pcb_component:e,_parent_source_component:i}]}return[]}case"pcb_plated_hole":if(t.shape==="circle"){const{x:s,y:r,hole_diameter:g,outer_diameter:a}=t;return[{_pcb_drawing_object_id:`circle_${Xo++}`,pcb_drawing_type:"circle",x:s,y:r,r:a/2,layer:"top",_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n},{_pcb_drawing_object_id:`circle_${Xo++}`,pcb_drawing_type:"circle",x:s,y:r,r:g/2,layer:"drill",_element:t}]}else if(t.shape==="oval"){const{x:s,y:r,outer_height:g,outer_width:a,hole_height:I,hole_width:c}=t;return[{_pcb_drawing_object_id:`oval_${Xo++}`,pcb_drawing_type:"oval",x:s,y:r,rX:a/2,rY:g/2,layer:"top",_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n},{_pcb_drawing_object_id:`oval_${Xo++}`,_element:t,pcb_drawing_type:"oval",x:s,y:r,rX:c/2,rY:I/2,layer:"drill"}]}else if(t.shape==="pill"){const{x:s,y:r,outer_height:g,outer_width:a,hole_height:I,hole_width:c}=t;return[{_pcb_drawing_object_id:`pill_${Xo++}`,pcb_drawing_type:"pill",x:s,y:r,w:a,h:g,layer:"top",_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n,ccw_rotation:t.ccw_rotation},{_pcb_drawing_object_id:`pill_${Xo++}`,_element:t,pcb_drawing_type:"pill",x:s,y:r,w:c,h:I,layer:"drill",ccw_rotation:t.ccw_rotation}]}else if(t.shape==="circular_hole_with_rect_pad"){const{x:s,y:r,hole_diameter:g,rect_pad_width:a,rect_pad_height:I,rect_border_radius:c}=t,B=t.hole_offset_x??0,C=t.hole_offset_y??0;return[{_pcb_drawing_object_id:`rect_${Xo++}`,pcb_drawing_type:"rect",x:s,y:r,w:a,h:I,layer:"top",_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n,roundness:c},{_pcb_drawing_object_id:`rect_${Xo++}`,pcb_drawing_type:"rect",x:s,y:r,w:a,h:I,layer:"bottom",_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n,roundness:c},{_pcb_drawing_object_id:`circle_${Xo++}`,_element:t,pcb_drawing_type:"circle",x:s+B,y:r+C,r:g/2,layer:"drill"}]}else if(t.shape==="pill_hole_with_rect_pad"){const{x:s,y:r,hole_width:g,hole_height:a,rect_pad_width:I,rect_pad_height:c,rect_border_radius:B}=t;return[{_pcb_drawing_object_id:`rect_${Xo++}`,pcb_drawing_type:"rect",x:s,y:r,w:I,h:c,layer:"top",_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n,roundness:B},{_pcb_drawing_object_id:`rect_${Xo++}`,pcb_drawing_type:"rect",x:s,y:r,w:I,h:c,layer:"bottom",_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n,roundness:B},{_pcb_drawing_object_id:`pill_${Xo++}`,_element:t,pcb_drawing_type:"pill",x:s,y:r,w:g,h:a,layer:"drill"}]}else if(t.shape==="rotated_pill_hole_with_rect_pad"){const{x:s,y:r,hole_width:g,hole_height:a,hole_ccw_rotation:I,rect_pad_width:c,rect_pad_height:B,rect_ccw_rotation:C,rect_border_radius:Q}=t;return[{_pcb_drawing_object_id:`rect_${Xo++}`,pcb_drawing_type:"rect",x:s,y:r,w:c,h:B,layer:"top",_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n,ccw_rotation:C,roundness:Q},{_pcb_drawing_object_id:`rect_${Xo++}`,pcb_drawing_type:"rect",x:s,y:r,w:c,h:B,layer:"bottom",_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n,ccw_rotation:C,roundness:Q},{_pcb_drawing_object_id:`pill_${Xo++}`,_element:t,pcb_drawing_type:"pill",x:s,y:r,w:g,h:a,layer:"drill",ccw_rotation:I}]}else if(t.shape==="hole_with_polygon_pad"){const{x:s,y:r,pad_outline:g,hole_shape:a,hole_diameter:I,hole_width:c,hole_height:B,layers:C}=t,Q=Et.parse(t.hole_offset_x??0),l=Et.parse(t.hole_offset_y??0),E=g,h=[];if(E&&Array.isArray(E)){const f=Gx(E).map(b=>({x:b.x+s,y:b.y+r}));for(const b of C||["top","bottom"])h.push({_pcb_drawing_object_id:`polygon_${Xo++}`,pcb_drawing_type:"polygon",points:f,layer:b,_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n})}const u={x:s+Q,y:r+l},p=[];return a==="circle"?p.push({_pcb_drawing_object_id:`circle_${Xo++}`,pcb_drawing_type:"circle",x:u.x,y:u.y,r:(I??0)/2,layer:"drill",_element:t,_parent_pcb_component:e,_parent_source_component:i}):a==="oval"?p.push({_pcb_drawing_object_id:`oval_${Xo++}`,pcb_drawing_type:"oval",x:u.x,y:u.y,rX:(c??0)/2,rY:(B??0)/2,layer:"drill",_element:t,_parent_pcb_component:e,_parent_source_component:i}):(a==="pill"||a==="rotated_pill")&&p.push({_pcb_drawing_object_id:`pill_${Xo++}`,pcb_drawing_type:"pill",x:u.x,y:u.y,w:c??0,h:B??0,layer:"drill",_element:t,_parent_pcb_component:e,_parent_source_component:i,ccw_rotation:t.ccw_rotation}),[...h,...p]}else return[];case"pcb_keepout":{if(t.shape==="circle"){const{center:s,radius:r}=t;return[{_pcb_drawing_object_id:`circle_${Xo++}`,pcb_drawing_type:"circle",x:s.x,y:s.y,r,layer:"top",_element:t,_parent_pcb_component:e,_parent_source_component:i,mesh_fill:!0}]}else if(t.shape==="rect"){const{center:s,width:r,height:g}=t;return[{_pcb_drawing_object_id:`rect_${Xo++}`,pcb_drawing_type:"rect",x:s.x,y:s.y,w:r,h:g,layer:"top",_element:t,_parent_pcb_component:e,_parent_source_component:i,mesh_fill:!0}]}break}case"pcb_trace":{const s=[];if(t.route_thickness_mode==="interpolated"){const a=t.route.map(B=>({x:B.x,y:B.y,trace_width:B.route_type==="wire"?B.width:.5})),I=ZRt(a,.5),c=t.route[0].layer;return s.push({_pcb_drawing_object_id:`polygon_${Xo++}`,_element:t,pcb_drawing_type:"polygon",points:I,layer:c}),t.route.forEach(B=>{B.route_type==="via"&&s.push({_pcb_drawing_object_id:`circle_${Xo++}`,_element:t,pcb_drawing_type:"circle",x:B.x,y:B.y,r:B.outer_diameter/2,layer:B.from_layer})}),s}let r=null,g=null;for(const a of t.route)a.route_type==="wire"&&(r!==null&&g!==null&&s.push({_pcb_drawing_object_id:`line_${Xo++}`,_element:t,pcb_drawing_type:"line",x1:r,y1:g,x2:a.x,y2:a.y,width:a.width,squareCap:!1,layer:a.layer}),r=a.x,g=a.y);return s}case"pcb_via":{const{x:s,y:r,outer_diameter:g,hole_diameter:a}=t,I=t.from_layer,c=t.to_layer,B=t.layers,C=[];I&&c?C.push(I,c):B&&Array.isArray(B)?C.push(...B):C.push("top","bottom");const Q=[];for(const l of C)Q.push({_pcb_drawing_object_id:`circle_${Xo++}`,pcb_drawing_type:"circle",x:s,y:r,r:g/2,layer:l,_element:t,_parent_pcb_component:e,_parent_source_component:i});return Q.push({_pcb_drawing_object_id:`circle_${Xo++}`,pcb_drawing_type:"circle",x:s,y:r,r:a/2,layer:"drill",_element:t}),Q}case"pcb_silkscreen_rect":return[{_pcb_drawing_object_id:`rect_${Xo++}`,pcb_drawing_type:"rect",x:t.center.x,y:t.center.y,w:t.width,h:t.height,layer:t.layer==="bottom"?"bottom_silkscreen":"top_silkscreen",stroke_width:t.stroke_width,is_filled:t.is_filled,has_stroke:t.has_stroke,is_stroke_dashed:t.is_stroke_dashed,roundness:t.corner_radius,_element:t}];case"pcb_silkscreen_circle":return[{_pcb_drawing_object_id:`circle_${Xo++}`,pcb_drawing_type:"circle",x:t.center.x,y:t.center.y,r:t.radius,layer:t.layer==="bottom"?"bottom_silkscreen":"top_silkscreen"}];case"pcb_silkscreen_oval":return[{_pcb_drawing_object_id:`oval_${Xo++}`,pcb_drawing_type:"oval",x:t.center.x,y:t.center.y,rX:t.radius_x/2,rY:t.radius_y/2,layer:t.layer==="bottom"?"bottom_silkscreen":"top_silkscreen"}];case"pcb_silkscreen_pill":return[{_pcb_drawing_object_id:`pill_${Xo++}`,pcb_drawing_type:"pill",x:t.center.x,y:t.center.y,w:t.width,h:t.height,layer:t.layer==="bottom"?"bottom_silkscreen":"top_silkscreen"}];case"pcb_silkscreen_line":return[{_pcb_drawing_object_id:`line_${Xo++}`,pcb_drawing_type:"line",x1:t.x1,y1:t.y1,x2:t.x2,y2:t.y2,width:.1,squareCap:!1,layer:t.layer==="bottom"?"bottom_silkscreen":"top_silkscreen"}];case"pcb_fabrication_note_rect":{const s=t,r=s.layer==="bottom"?"bottom_fabrication":"top_fabrication",g=s.has_stroke!==void 0?s.has_stroke:typeof s.stroke_width=="number"?s.stroke_width>0:void 0;return[{_pcb_drawing_object_id:Dr("pcb_fabrication_note_rect"),pcb_drawing_type:"rect",x:s.center.x,y:s.center.y,w:s.width,h:s.height,roundness:s.corner_radius,layer:r,stroke_width:s.stroke_width,is_filled:s.is_filled,has_stroke:g,is_stroke_dashed:s.is_stroke_dashed,color:s.color,_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n}]}case"pcb_fabrication_note_path":case"pcb_silkscreen_path":{const{pcb_component_id:s,route:r,type:g}=t;let a;if(g==="pcb_silkscreen_path")return a=t.layer==="bottom"?"bottom_silkscreen":"top_silkscreen",r.slice(0,-1).map((I,c)=>{const B=r[c+1];return{_pcb_drawing_object_id:`line_${Xo++}`,pcb_drawing_type:"line",x1:I.x,y1:I.y,x2:B.x,y2:B.y,width:t.stroke_width??.1,squareCap:!1,layer:a,_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n}}).filter(Boolean);if(g==="pcb_fabrication_note_path")return a="top_fabrication",r.slice(0,-1).map((I,c)=>{const B=r[c+1];return{_pcb_drawing_object_id:`line_${Xo++}`,pcb_drawing_type:"line",x1:I.x,y1:I.y,x2:B.x,y2:B.y,width:t.stroke_width??.1,squareCap:!1,layer:a,color:t.color,_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n}}).filter(Boolean)}case"pcb_silkscreen_text":return[{_pcb_drawing_object_id:`text_${Xo++}`,pcb_drawing_type:"text",x:t.anchor_position.x,y:t.anchor_position.y,layer:t.layer==="bottom"?"bottom_silkscreen":"top_silkscreen",align:t.anchor_alignment??"center",text:t.text,size:t.font_size,ccw_rotation:t.ccw_rotation}];case"pcb_copper_text":return ANt(t,{_parent_pcb_component:e,_parent_source_component:i});case"pcb_copper_pour":{const s=t;switch(s.shape){case"rect":{const{center:r,width:g,height:a,layer:I,rotation:c}=s;return[{_pcb_drawing_object_id:Dr("pcb_copper_pour_rect"),pcb_drawing_type:"rect",x:r.x,y:r.y,w:g,h:a,layer:I,_element:t,ccw_rotation:c}]}case"polygon":{const{points:r,layer:g}=s;return[{_pcb_drawing_object_id:Dr("pcb_copper_pour_polygon"),pcb_drawing_type:"polygon",points:Gx(r),layer:g,_element:t}]}case"brep":{const{brep_shape:r,layer:g}=s;return[{_pcb_drawing_object_id:Dr("pcb_copper_pour_brep"),pcb_drawing_type:"polygon_with_arcs",brep_shape:r,layer:g,_element:t}]}}return[]}case"pcb_fabrication_note_dimension":{const s=t,{from:r,to:g,text:a,font_size:I,arrow_size:c}=s,B=t.layer==="bottom"?"bottom_fabrication":"top_fabrication",C=[],Q=typeof c=="number"&&!Number.isNaN(c)?c:1;C.push({_pcb_drawing_object_id:Dr("pcb_fabrication_note_dimension"),pcb_drawing_type:"line",x1:r.x,y1:r.y,x2:g.x,y2:g.y,width:.05,squareCap:!1,layer:B,_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n});const l=g.x-r.x,E=g.y-r.y,h=Math.sqrt(l*l+E*E)||1,u=l/h,p=E/h,f=Math.PI/6,b=r.x+Q*(u*Math.cos(f)-p*Math.sin(f)),D=r.y+Q*(u*Math.sin(f)+p*Math.cos(f)),k=r.x+Q*(u*Math.cos(-f)-p*Math.sin(-f)),m=r.y+Q*(u*Math.sin(-f)+p*Math.cos(-f));C.push({_pcb_drawing_object_id:Dr("pcb_fabrication_note_dimension"),pcb_drawing_type:"line",x1:r.x,y1:r.y,x2:b,y2:D,width:.05,squareCap:!1,layer:B,_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n}),C.push({_pcb_drawing_object_id:Dr("pcb_fabrication_note_dimension"),pcb_drawing_type:"line",x1:r.x,y1:r.y,x2:k,y2:m,width:.05,squareCap:!1,layer:B,_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n});const F=g.x-Q*(u*Math.cos(f)-p*Math.sin(f)),G=g.y-Q*(u*Math.sin(f)+p*Math.cos(f)),U=g.x-Q*(u*Math.cos(-f)-p*Math.sin(-f)),M=g.y-Q*(u*Math.sin(-f)+p*Math.cos(-f));if(C.push({_pcb_drawing_object_id:Dr("pcb_fabrication_note_dimension"),pcb_drawing_type:"line",x1:g.x,y1:g.y,x2:F,y2:G,width:.05,squareCap:!1,layer:B,_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n}),C.push({_pcb_drawing_object_id:Dr("pcb_fabrication_note_dimension"),pcb_drawing_type:"line",x1:g.x,y1:g.y,x2:U,y2:M,width:.05,squareCap:!1,layer:B,_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n}),a){const J=(I??1)*1.5,P=-p,q=u,O=(r.x+g.x)/2,j=(r.y+g.y)/2;let eA=J;Math.abs(u)>Math.abs(p)?eA=j>=0?J:-J:eA=O>=0?-J:J,C.push({_pcb_drawing_object_id:Dr("pcb_fabrication_note_dimension"),pcb_drawing_type:"text",x:(r.x+g.x)/2+P*eA,y:(r.y+g.y)/2+q*eA,layer:B,align:"center",text:a,size:I,_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n})}return C}case"pcb_fabrication_note_text":return[{_pcb_drawing_object_id:Dr("text"),pcb_drawing_type:"text",x:t.anchor_position.x,y:t.anchor_position.y,layer:t.layer==="bottom"?"bottom_fabrication":"top_fabrication",size:t.font_size,align:t.anchor_alignment??"center",text:t.text,color:t.color,_element:t,_parent_pcb_component:e,_parent_source_component:i,_source_port:n}];case"pcb_cutout":switch(t.shape){case"rect":{const s=t,r=s.corner_radius,g=s.rotation??s.rotation;return[{_pcb_drawing_object_id:Dr("pcb_cutout_rect"),pcb_drawing_type:"rect",x:s.center.x,y:s.center.y,w:s.width,h:s.height,layer:"drill",roundness:r,ccw_rotation:g,_element:t,_parent_pcb_component:e,_parent_source_component:i}]}case"circle":{const s=t;return[{_pcb_drawing_object_id:Dr("pcb_cutout_circle"),pcb_drawing_type:"circle",x:s.center.x,y:s.center.y,r:s.radius,layer:"drill",_element:t,_parent_pcb_component:e,_parent_source_component:i}]}case"polygon":{const s=t;return[{_pcb_drawing_object_id:Dr("pcb_cutout_polygon"),pcb_drawing_type:"polygon",points:Gx(s.points),layer:"drill",_element:t,_parent_pcb_component:e,_parent_source_component:i}]}default:return console.warn(`Unsupported pcb_cutout shape: ${t.shape}`),[]}case"pcb_note_line":{const s=t;return[{_pcb_drawing_object_id:Dr("pcb_note_line"),pcb_drawing_type:"line",x1:s.x1,y1:s.y1,x2:s.x2,y2:s.y2,width:s.stroke_width??.1,squareCap:!1,layer:"notes",color:s.color,_element:t,_parent_pcb_component:e,_parent_source_component:i}]}case"pcb_note_rect":{const s=t;return[{_pcb_drawing_object_id:Dr("pcb_note_rect"),pcb_drawing_type:"rect",x:s.center.x,y:s.center.y,w:s.width,h:s.height,layer:"notes",stroke_width:s.stroke_width,is_filled:s.is_filled,has_stroke:s.has_stroke,is_stroke_dashed:s.is_stroke_dashed,color:s.color,roundness:s.corner_radius,_element:t,_parent_pcb_component:e,_parent_source_component:i}]}case"pcb_note_path":{const s=t,{route:r,stroke_width:g}=s;return r.slice(0,-1).map((a,I)=>{const c=r[I+1];return{_pcb_drawing_object_id:Dr("pcb_note_path"),pcb_drawing_type:"line",x1:a.x,y1:a.y,x2:c.x,y2:c.y,width:g??.1,squareCap:!1,layer:"notes",color:s.color,_element:t,_parent_pcb_component:e,_parent_source_component:i}}).filter(Boolean)}case"pcb_note_text":{const s=t;return[{_pcb_drawing_object_id:Dr("pcb_note_text"),pcb_drawing_type:"text",x:s.anchor_position.x,y:s.anchor_position.y,layer:"notes",align:s.anchor_alignment??"center",text:s.text||"",size:s.font_size,color:s.color,_element:t,_parent_pcb_component:e,_parent_source_component:i}]}case"pcb_note_dimension":{const s=t,{from:r,to:g,text:a,font_size:I,arrow_size:c}=s,B=[];B.push({_pcb_drawing_object_id:Dr("pcb_note_dimension"),pcb_drawing_type:"line",x1:r.x,y1:r.y,x2:g.x,y2:g.y,width:.05,squareCap:!1,color:s.color,layer:"notes",_element:t,_parent_pcb_component:e,_parent_source_component:i});const C=g.x-r.x,Q=g.y-r.y,l=Math.sqrt(C*C+Q*Q),E=C/l,h=Q/l,u=Math.PI/6,p=r.x+c*(E*Math.cos(u)-h*Math.sin(u)),f=r.y+c*(E*Math.sin(u)+h*Math.cos(u)),b=r.x+c*(E*Math.cos(-u)-h*Math.sin(-u)),D=r.y+c*(E*Math.sin(-u)+h*Math.cos(-u));B.push({_pcb_drawing_object_id:Dr("pcb_note_dimension"),pcb_drawing_type:"line",x1:r.x,y1:r.y,x2:p,y2:f,width:.05,squareCap:!1,layer:"notes",_element:t}),B.push({_pcb_drawing_object_id:Dr("pcb_note_dimension"),pcb_drawing_type:"line",x1:r.x,y1:r.y,x2:b,y2:D,width:.05,squareCap:!1,layer:"notes",_element:t});const k=g.x-c*(E*Math.cos(u)-h*Math.sin(u)),m=g.y-c*(E*Math.sin(u)+h*Math.cos(u)),F=g.x-c*(E*Math.cos(-u)-h*Math.sin(-u)),G=g.y-c*(E*Math.sin(-u)+h*Math.cos(-u));if(B.push({_pcb_drawing_object_id:Dr("pcb_note_dimension"),pcb_drawing_type:"line",x1:g.x,y1:g.y,x2:k,y2:m,width:.05,squareCap:!1,layer:"notes",_element:t}),B.push({_pcb_drawing_object_id:Dr("pcb_note_dimension"),pcb_drawing_type:"line",x1:g.x,y1:g.y,x2:F,y2:G,width:.05,squareCap:!1,layer:"notes",_element:t}),a){const U=I*1.5,M=-h,J=E,P=(r.x+g.x)/2,q=(r.y+g.y)/2;let O=U;Math.abs(E)>Math.abs(h)?O=q>=0?U:-U:O=P>=0?-U:U,B.push({_pcb_drawing_object_id:Dr("pcb_note_dimension"),pcb_drawing_type:"text",x:(r.x+g.x)/2+M*O,y:(r.y+g.y)/2+J*O,layer:"notes",align:"center",text:a,size:I,_element:t})}return B}}return[]},UI={board:{anchor:"rgb(255, 38, 226)",aux_items:"rgb(255, 255, 255)",b_adhes:"rgb(0, 0, 132)",b_crtyd:"rgb(255, 38, 226)",b_fab:"rgb(88, 93, 132)",b_mask:"rgba(2, 255, 238, 0.400)",b_paste:"rgb(0, 194, 194)",b_silks:"rgb(242, 237, 161)",background:"rgb(0, 16, 35)",cmts_user:"rgb(89, 148, 220)",copper:{b:"rgb(77, 127, 196)",f:"rgb(200, 52, 52)",in1:"rgb(127, 200, 127)",in10:"rgb(237, 124, 51)",in11:"rgb(91, 195, 235)",in12:"rgb(247, 111, 142)",in13:"rgb(167, 165, 198)",in14:"rgb(40, 204, 217)",in15:"rgb(232, 178, 167)",in16:"rgb(242, 237, 161)",in17:"rgb(237, 124, 51)",in18:"rgb(91, 195, 235)",in19:"rgb(247, 111, 142)",in2:"rgb(206, 125, 44)",in20:"rgb(167, 165, 198)",in21:"rgb(40, 204, 217)",in22:"rgb(232, 178, 167)",in23:"rgb(242, 237, 161)",in24:"rgb(237, 124, 51)",in25:"rgb(91, 195, 235)",in26:"rgb(247, 111, 142)",in27:"rgb(167, 165, 198)",in28:"rgb(40, 204, 217)",in29:"rgb(232, 178, 167)",in3:"rgb(79, 203, 203)",in30:"rgb(242, 237, 161)",in4:"rgb(219, 98, 139)",in5:"rgb(167, 165, 198)",in6:"rgb(40, 204, 217)",in7:"rgb(232, 178, 167)",in8:"rgb(242, 237, 161)",in9:"rgb(141, 203, 129)"},cursor:"rgb(255, 255, 255)",drc:"rgb(194, 194, 194)",drc_error:"rgba(215, 91, 107, 0.800)",drc_exclusion:"rgb(255, 255, 255)",drc_warning:"rgba(255, 208, 66, 0.902)",dwgs_user:"rgb(194, 194, 194)",eco1_user:"rgb(180, 219, 210)",eco2_user:"rgb(216, 200, 82)",edge_cuts:"rgb(208, 210, 205)",f_adhes:"rgb(132, 0, 132)",f_crtyd:"rgb(255, 0, 245)",f_fab:"rgb(175, 175, 175)",f_mask:"rgba(216, 100, 255, 0.400)",f_paste:"rgba(180, 160, 154, 0.902)",f_silks:"rgb(242, 237, 161)",footprint_text_back:"rgb(0, 0, 132)",footprint_text_front:"rgb(194, 194, 194)",footprint_text_invisible:"rgb(132, 132, 132)",grid:"rgb(132, 132, 132)",grid_axes:"rgb(194, 194, 194)",margin:"rgb(255, 38, 226)",microvia:"rgb(0, 132, 132)",no_connect:"rgb(0, 0, 132)",pad_back:"rgb(77, 127, 196)",pad_front:"rgb(200, 52, 52)",pad_plated_hole:"rgb(194, 194, 0)",pad_through_hole:"rgb(227, 183, 46)",plated_hole:"rgb(26, 196, 210)",ratsnest:"rgba(245, 255, 213, 0.702)",select_overlay:"rgb(4, 255, 67)",soldermaskWithCopper:{top:"rgb(18, 82, 50)",bottom:"rgb(77, 127, 196)"},soldermask:{top:"rgb(12, 55, 33)",bottom:"rgb(12, 55, 33)"},through_via:"rgb(236, 236, 236)",user_1:"rgb(194, 194, 194)",user_2:"rgb(89, 148, 220)",user_3:"rgb(180, 219, 210)",user_4:"rgb(216, 200, 82)",user_5:"rgb(194, 194, 194)",user_6:"rgb(89, 148, 220)",user_7:"rgb(180, 219, 210)",user_8:"rgb(216, 200, 82)",user_9:"rgb(232, 178, 167)",via_blind_buried:"rgb(187, 151, 38)",via_hole:"rgb(227, 183, 46)",via_micro:"rgb(0, 132, 132)",via_through:"rgb(236, 236, 236)",worksheet:"rgb(200, 114, 171)"}},Hp=(t,A=1)=>{if(Math.abs(t.a)!==Math.abs(t.d))throw new Error("Cannot scale non-uniformly");return A*Math.abs(t.a)},rI={elementOverlay:40,dimensionOverlay:40,editTraceHintOverlay:40,errorOverlay:40,pcbGroupOverlay:35,ratsNestOverlay:30,toolbarOverlay:70,warnings:30,topLayer:20,clickToInteractOverlay:100},y5={red:"red",black:"black",green:"green",board:"rgb(255, 255, 255)",other:"#eee",top:UI.board.copper.f,inner1:UI.board.copper.in1,inner2:UI.board.copper.in2,inner3:UI.board.copper.in3,inner4:UI.board.copper.in4,inner5:UI.board.copper.in5,inner6:UI.board.copper.in6,inner7:UI.board.copper.in7,inner8:UI.board.copper.in8,bottom:UI.board.copper.b,drill:UI.board.anchor,keepout:UI.board.background,tkeepout:UI.board.b_crtyd,tplace:UI.board.b_silks,top_silkscreen:UI.board.f_silks,bottom_silkscreen:UI.board.b_silks,top_fabrication:UI.board.f_fab,bottom_fabrication:UI.board.b_fab,soldermask_top:UI.board.soldermask.top,soldermask_bottom:UI.board.soldermask.bottom,soldermask_with_copper_top:UI.board.soldermaskWithCopper.top,soldermask_with_copper_bottom:UI.board.soldermaskWithCopper.bottom,notes:UI.board.user_2,...UI.board},tNt=["inner6","inner5","inner4","inner3","inner2","inner1","bottom","soldermask_bottom","bottom_silkscreen","top","soldermask_top","top_silkscreen","soldermask_with_copper_bottom","soldermask_with_copper_top","board"],iNt=class{canvasLayerMap;ctxLayerMap;aperture;transform;foregroundLayer="top";lastPoint;constructor(t){this.canvasLayerMap=t,this.ctxLayerMap=Object.fromEntries(Object.entries(t).map(([A,e])=>[A,e.getContext("2d")])),this.transform=Zg(),this.transform.d*=-1,this.transform=zi(this.transform,so(0,-500)),this.lastPoint={x:0,y:0},this.equip({})}clear(){for(const t of Object.values(this.ctxLayerMap))t.clearRect(0,0,t.canvas.width,t.canvas.height)}equip(t){this.aperture={fontSize:0,shape:"circle",mode:"add",size:0,color:"red",layer:"top",opacity:this.foregroundLayer===t.color?1:.5,...t}}drawMeshPattern(t,A,e,i,o,n=45){const s=this.getLayerCtx(),[r,g]=Ce(this.transform,[t,A]),[a,I]=Ce(this.transform,[t+e,A+i]),c=Hp(this.transform,o);s.lineWidth=1,s.strokeStyle=this.aperture.color;const B=C=>{const Q=Math.sin(C),l=Math.cos(C),E=Math.sqrt(Math.pow(a-r,2)+Math.pow(I-g,2));for(let h=-E;h<=E;h+=c)s.beginPath(),s.moveTo(r+h*l-E*Q,g+h*Q+E*l),s.lineTo(r+h*l+E*Q,g+h*Q-E*l),s.stroke()};B(n*Math.PI/180),B((n+90)*Math.PI/180)}rect({x:t,y:A,w:e,h:i,mesh_fill:o,is_filled:n=!0,has_stroke:s,is_stroke_dashed:r,stroke_width:g,roundness:a}){const[I,c]=Ce(this.transform,[t-e/2,A-i/2]),[B,C]=Ce(this.transform,[t+e/2,A+i/2]);this.applyAperture();const Q=this.getLayerCtx(),l=a?Hp(this.transform,a):0,E=s===void 0?n===!1:s;if(o)Q.save(),Q.beginPath(),l>0&&Q.roundRect?Q.roundRect(I,c,B-I,C-c,l):Q.rect(I,c,B-I,C-c),Q.clip(),this.drawMeshPattern(t-e/2,A-i/2,e,i,.15),Q.restore(),l>0&&Q.roundRect?(Q.beginPath(),Q.roundRect(I,c,B-I,C-c,l),Q.stroke()):Q.strokeRect(I,c,B-I,C-c);else if(n!==!1&&(l>0&&Q.roundRect?(Q.beginPath(),Q.roundRect(I,c,B-I,C-c,l),Q.fill()):Q.fillRect(I,c,B-I,C-c)),E){const h=Q.lineWidth;if(g!==void 0&&(Q.lineWidth=Hp(this.transform,g)),r){let u=[];const p=Math.abs(this.transform.a);if(p>0){const b=.1*p,D=b*1.3;b>.5&&(u=[b,D])}Q.setLineDash(u)}l>0&&Q.roundRect?(Q.beginPath(),Q.roundRect(I,c,B-I,C-c,l),Q.stroke()):Q.strokeRect(I,c,B-I,C-c),r&&Q.setLineDash([]),g!==void 0&&(Q.lineWidth=h)}}rotatedRect(t,A,e,i,o,n,s){const r=this.getLayerCtx();this.applyAperture();const[g,a]=Ce(this.transform,[t-e/2,A-i/2]),[I,c]=Ce(this.transform,[t+e/2,A+i/2]),B=n?Hp(this.transform,n):0;r.save();const[C,Q]=Ce(this.transform,[t,A]);r.translate(C,Q);const l=360-o;o&&r.rotate(l*Math.PI/180),r.translate(-C,-Q),s?(r.beginPath(),B>0&&r.roundRect?r.roundRect(g,a,I-g,c-a,B):r.rect(g,a,I-g,c-a),r.clip(),this.drawMeshPattern(t-e/2,A-i/2,e,i,.15),B>0&&r.roundRect?(r.beginPath(),r.roundRect(g,a,I-g,c-a,B),r.stroke()):r.strokeRect(g,a,I-g,c-a)):B>0&&r.roundRect?(r.beginPath(),r.roundRect(g,a,I-g,c-a,B),r.fill()):r.fillRect(g,a,I-g,c-a),r.restore()}rotatedPill(t,A,e,i,o){const n=this.getLayerCtx();this.applyAperture(),n.save();const[s,r]=Ce(this.transform,[t,A]);n.translate(s,r);const g=360-o;o&&n.rotate(g*Math.PI/180),n.translate(-s,-r),this.pill(t,A,e,i),n.restore()}circle(t,A,e,i){const o=Hp(this.transform,e),[n,s]=Ce(this.transform,[t,A]);this.applyAperture();const r=this.getLayerCtx();i?(r.save(),r.beginPath(),r.arc(n,s,o,0,2*Math.PI),r.clip(),this.drawMeshPattern(t-e,A-e,e*2,e*2,.15),r.restore(),r.beginPath(),r.arc(n,s,o,0,2*Math.PI),r.stroke()):(r.beginPath(),r.arc(n,s,o,0,2*Math.PI),r.fill())}oval(t,A,e,i){const o=Hp(this.transform,e),n=Hp(this.transform,i),[s,r]=Ce(this.transform,[t,A]);this.applyAperture();const g=this.getLayerCtx();g.beginPath(),g.ellipse(s,r,o,n,0,0,2*Math.PI),g.fill(),g.closePath()}pill(t,A,e,i){const[o,n]=Ce(this.transform,[t-e/2,A+i/2]),s=Hp(this.transform,e),r=Hp(this.transform,i),g=Math.min(s,r)/2;this.applyAperture();const a=this.getLayerCtx();a.beginPath(),a.arc(o+g,n+g,g,Math.PI,Math.PI*1.5),a.arc(o+s-g,n+g,g,Math.PI*1.5,0),a.arc(o+s-g,n+r-g,g,0,Math.PI*.5),a.arc(o+g,n+r-g,g,Math.PI*.5,Math.PI),a.fill(),a.closePath()}polygon(t){if(t.length<3)return;this.applyAperture();const A=this.getLayerCtx(),e=t.map(o=>Ce(this.transform,[o.x,o.y]));A.beginPath(),A.moveTo(e[0][0],e[0][1]);for(let o=1;o<e.length;o++)A.lineTo(e[o][0],e[o][1]);A.closePath(),A.fill("evenodd");const i=Hp(this.transform,this.aperture.size);i>0&&(A.lineWidth=i,A.stroke())}debugText(t,A,e){const[i,o]=Ce(this.transform,[A,e]);this.applyAperture();const n=this.getLayerCtx();n.font="10px sans-serif",n.fillText(t,i,o)}getLayerCtx(){const t=this.ctxLayerMap[this.aperture.layer];if(!t)throw new Error(`No context for layer "${this.aperture.layer}"`);return t}orderAndFadeLayers(){const{canvasLayerMap:t,foregroundLayer:A}=this,e=A==="top"?"top_silkscreen":A==="bottom"?"bottom_silkscreen":void 0,i=A==="top"?"soldermask_with_copper_top":A==="bottom"?"soldermask_with_copper_bottom":void 0,o=new Set([A,"drill","other","board",...e?[e]:[],...i?[i]:[]]),n=[A,...e?[e]:[],...i?[i]:[]],s=[...tNt.filter(r=>!n.includes(r)),A,...i?[i]:[],"drill",...e?[e]:[]];s.forEach((r,g)=>{const a=t[r];a&&(a.style.zIndex=`${rI.topLayer-(s.length-g)}`,a.style.opacity=o.has(r)?"1":"0.5")})}applyAperture(){const{transform:t,aperture:A}=this;let{size:e,mode:i,color:o,fontSize:n,layer:s}=A;s in this.ctxLayerMap||(this.aperture.layer="other");const r=this.getLayerCtx();if(!r)throw new Error(`No context for layer "${this.foregroundLayer}"`);if(o||(o="undefined"),r.lineWidth=Hp(t,e),r.lineCap="round",i==="add"){r.globalCompositeOperation="source-over";let g=y5[o.toLowerCase()];if(!g)try{g=tee(o).rgb().toString()}catch{console.warn(`Invalid color format: '${o}'`),g="white"}r.fillStyle=g,r.strokeStyle=g}else r.globalCompositeOperation="destination-out",r.fillStyle="rgba(0,0,0,1)",r.strokeStyle="rgba(0,0,0,1)";r.font=`${Hp(Uy(t),n)}px sans-serif`}moveTo(t,A){this.lastPoint={x:t,y:A}}lineTo(t,A){const[e,i]=Ce(this.transform,[t,A]),{size:o,shape:n,mode:s}=this.aperture,r=Hp(this.transform,o);let{lastPoint:g}=this;const a=Ce(this.transform,g);this.applyAperture();const I=this.getLayerCtx();n==="square"&&I.fillRect(a.x-r/2,a.y-r/2,r,r),I.beginPath(),I.moveTo(a.x,a.y),I.lineTo(e,i),I.stroke(),I.closePath(),n==="square"&&I.fillRect(e-r/2,i-r/2,r,r),this.lastPoint={x:t,y:A}}polygonWithArcs(t){const A=this.getLayerCtx(),e=i=>{if(i.vertices.length===0)return;const o=i.vertices[0],n=Ce(this.transform,[o.x,o.y]);A.moveTo(n[0],n[1]);for(let s=0;s<i.vertices.length;s++){const r=i.vertices[s],g=i.vertices[(s+1)%i.vertices.length];if(r.bulge&&r.bulge!==0){const a=r.bulge,I=g.x-r.x,c=g.y-r.y,B=Math.sqrt(I*I+c*c);if(B<1e-9){const M=Ce(this.transform,[g.x,g.y]);A.lineTo(M[0],M[1]);continue}const C=4*Math.atan(a),Q=Math.abs(B/(2*Math.sin(C/2))),l=(r.x+g.x)/2,E=(r.y+g.y)/2,h=I/B,p=-(c/B),f=h,b=Math.sqrt(Math.max(0,Q*Q-(B/2)**2)),D=l+b*p*Math.sign(a),k=E+b*f*Math.sign(a),m=Math.atan2(r.y-k,r.x-D);let F=Math.atan2(g.y-k,g.x-D);a>0&&F<m?F+=2*Math.PI:a<0&&F>m&&(F-=2*Math.PI);const G=Ce(this.transform,[D,k]),U=Hp(this.transform,Q);A.arc(G[0],G[1],U,-m,-F,a>0)}else{const a=Ce(this.transform,[g.x,g.y]);A.lineTo(a[0],a[1])}}A.closePath()};if(A.beginPath(),e(t.outer_ring),t.inner_rings)for(const i of t.inner_rings)e(i);A.fill("evenodd")}};function Yee(t){const{lines:A,anchorPoint:e,ccwRotation:i}=t;if(!i)return A;const o=i*Math.PI/180,n=aB(o),s=zi(so(e.x,e.y),n,so(-e.x,-e.y));return Ce(s,e),A.map(r=>({...r,x1:Ce(s,{x:r.x1,y:r.y1}).x,y1:Ce(s,{x:r.x1,y:r.y1}).y,x2:Ce(s,{x:r.x2,y:r.y2}).x,y2:Ce(s,{x:r.x2,y:r.y2}).y}))}var oNt=.6,Jee=.2,Kee=(()=>{const A=["a","c","e","m","n","o","r","s","u","x"].map(e=>CL[e]).filter(e=>e&&e.length>0).map(e=>Math.min(...e.map(i=>Math.min(i.y1,i.y2))));return A.length>0?Math.min(...A):0})(),nNt=t=>t>="a"&&t<="z"?Kee:0,Tee=t=>{const A=t.size*.7,e=A*oNt,i=A*Jee,o=A*Jee,n=t.text.split(/\r?\n/),s=t.text.length>0&&A>0,r=s?n.length:0,g=s?n.map(C=>C.length===0?0:C.length*e+(C.length-1)*i):[],a=g.length>0?Math.max(...g):0,c=/[a-z]/.test(t.text)?Kee*A:0,B=r>0?r*A+(r-1)*o+c:0;return{text_lines:n,line_count:r,line_widths:g,target_height:A,target_width_char:e,space_between_chars:i,space_between_lines:o,width:a,height:B}},qee=t=>{const A=Tee(t);return{width:A.width,height:A.height,lineHeight:A.target_height,lineSpacing:A.space_between_lines,lineCount:A.line_count}},Pee=t=>{const{text_lines:A,line_count:e,line_widths:i,target_height:o,target_width_char:n,space_between_chars:s,space_between_lines:r,width:g}=Tee(t);if(o<=0||e===0)return[];const a=o/12,I=[];for(let c=0;c<e;c++){const B=-c*(o+r),C=i[c],Q=(g-C)/2;let l=t.x+Q;for(let E=0;E<A[c].length;E++){const h=A[c][E],u=CL[h]??CL[h.toUpperCase()],p=nNt(h);if(!u){l+=n+s;continue}for(const{x1:f,y1:b,x2:D,y2:k}of u){const m=b-p,F=k-p;I.push({_pcb_drawing_object_id:Dr("line"),pcb_drawing_type:"line",x1:l+n*f,y1:t.y+B+o*m,x2:l+n*D,y2:t.y+B+o*F,width:a,layer:t.layer,unit:t.unit,color:t.color})}l+=n+s}}return I};function ND(t){const e=t.color??y5[t.layer];let i=tee(e);return t._element?.type==="pcb_copper_pour"&&(i=i.alpha(.7)),t.is_mouse_over||t.is_in_highlighted_net?i.lighten(.5).rgb().toString():i.rgb().toString()}var Oee=(t,A)=>{t.equip({size:A.zoomIndependent?A.width/t.transform.a:A.width,shape:A.squareCap?"square":"circle",color:ND(A),layer:A.layer}),t.moveTo(A.x1,A.y1),t.lineTo(A.x2,A.y2)},sNt=(t,A,e)=>{switch(e){case"top_left":return{x:0,y:-A};case"top_center":return{x:-t/2,y:-A};case"top_right":return{x:-t,y:-A};case"center_left":return{x:0,y:-A/2};case"center":return{x:-t/2,y:-A/2};case"center_right":return{x:-t,y:-A/2};case"bottom_left":return{x:0,y:0};case"bottom_center":return{x:-t/2,y:0};case"bottom_right":return{x:-t,y:0};default:return{x:0,y:0}}},Wee=t=>t.layer==="bottom_silkscreen"||t.layer==="bottom"?t.is_mirrored!==!1:t.is_mirrored===!0,rNt=(t,A)=>{t.equip({fontSize:A.size,color:ND(A),layer:A.layer});const{width:e,height:i}=qee(A),o=sNt(e,i,A.align);A.x??=0,A.y??=0;const n={x:A.x,y:A.y};let s=Pee({...A,x:A.x+o.x,y:A.y+o.y});if(Wee(A)&&(s=s.map(r=>({...r,x1:2*A.x-r.x1,x2:2*A.x-r.x2}))),A.ccw_rotation){const r={lines:s,anchorPoint:n,ccwRotation:A.ccw_rotation};s=Yee(r)}for(const r of s)Oee(t,r)},gNt=(t,A)=>{const{width:e,height:i,lineHeight:o}=qee(A);A.x??=0,A.y??=0;const n=A.knockout_padding??{left:A.size*.5,right:A.size*.5,top:A.size*.3,bottom:A.size*.3},s=e+n.left+n.right,r=i+n.top+n.bottom,g=e/2,a=o-i/2,I=A.x-g,c=A.y-a,B={x:A.x,y:A.y},C={_pcb_drawing_object_id:`knockout_rect_${A._pcb_drawing_object_id}`,x:A.x,y:A.y,w:s,h:r,layer:A.layer,ccw_rotation:A.ccw_rotation};A.ccw_rotation?Vee(t,C):Zee(t,C);let Q=Pee({...A,x:I,y:c});if(Wee(A)&&(Q=Q.map(l=>({...l,x1:2*A.x-l.x1,x2:2*A.x-l.x2}))),A.ccw_rotation){const l={lines:Q,anchorPoint:B,ccwRotation:A.ccw_rotation};Q=Yee(l)}for(const l of Q)t.equip({size:l.width,shape:"circle",color:"black",layer:A.layer,mode:"subtract"}),t.moveTo(l.x1,l.y1),t.lineTo(l.x2,l.y2);t.equip({mode:"add"})},Zee=(t,A)=>{t.equip({color:ND(A),layer:A.layer,size:A.stroke_width}),t.rect({x:A.x,y:A.y,w:A.w,h:A.h,mesh_fill:A.mesh_fill,is_filled:A.is_filled,has_stroke:A.has_stroke,is_stroke_dashed:A.is_stroke_dashed,stroke_width:A.stroke_width,roundness:A.roundness})},Vee=(t,A)=>{t.equip({color:ND(A),layer:A.layer}),t.rotatedRect(A.x,A.y,A.w,A.h,A.ccw_rotation,A.roundness,A.mesh_fill)},aNt=(t,A)=>{t.equip({color:ND(A),layer:A.layer}),t.rotatedPill(A.x,A.y,A.w,A.h,A.ccw_rotation)},INt=(t,A)=>{t.equip({color:ND(A),layer:A.layer}),t.circle(A.x,A.y,A.r,A.mesh_fill)},cNt=(t,A)=>{t.equip({color:ND(A),layer:A.layer}),t.oval(A.x,A.y,A.rX,A.rY)},BNt=(t,A)=>{t.equip({color:ND(A),layer:A.layer}),t.pill(A.x,A.y,A.w,A.h)},CNt=(t,A)=>{t.equip({color:ND(A),layer:A.layer}),t.polygon(A.points)},QNt=(t,A)=>{t.equip({color:ND(A),layer:A.layer}),t.polygonWithArcs(A.brep_shape)},lNt=(t,A)=>{switch(A.pcb_drawing_type){case"line":return Oee(t,A);case"text":return A.is_knockout?gNt(t,A):rNt(t,A);case"rect":return A.ccw_rotation?Vee(t,A):Zee(t,A);case"circle":return INt(t,A);case"oval":return cNt(t,A);case"pill":return A.ccw_rotation?aNt(t,A):BNt(t,A);case"polygon":return CNt(t,A);case"polygon_with_arcs":return QNt(t,A)}},ENt=(t,A)=>{for(const e of A)lNt(t,e)},hNt=["board","bottom_silkscreen","bottom","soldermask_bottom","top","soldermask_top","soldermask_with_copper_bottom","soldermask_with_copper_top","top_silkscreen","inner1","inner2","inner3","inner4","inner5","inner6","drill","notes","other"],uNt=({primitives:t,transform:A,grid:e,width:i=500,height:o=500})=>{const n=$.useRef({}),s=al(g=>g.selected_layer),r=al(g=>g.is_showing_solder_mask);return $.useEffect(()=>{if(!n.current||Object.keys(n.current).length===0)return;const g=Object.fromEntries(Object.entries(n.current).filter(([c,B])=>!(!B||!r&&c.includes("soldermask"))));if(Object.keys(g).length===0)return;const a=new iNt(g);A&&(a.transform=A),a.clear(),a.foregroundLayer=s;const I=r?t:t.filter(c=>!c.layer?.includes("soldermask"));ENt(a,I),a.orderAndFadeLayers()},[t,A,s,r]),Z.jsxs("div",{style:{backgroundColor:"black",width:i,height:o,position:"relative"},children:[Z.jsx(blA.SuperGrid,{textColor:"rgba(0,255,0,0.8)",majorColor:"rgba(0,255,0,0.4)",minorColor:"rgba(0,255,0,0.2)",screenSpaceCellSize:200,width:i,height:o,transform:A,stringifyCoord:(g,a,I)=>`${blA.toMMSI(g,I)}, ${blA.toMMSI(a,I)}`}),hNt.filter(g=>r?!0:!g.includes("soldermask")).map(g=>g.replace(/-/g,"")).map((g,a)=>Z.jsx("canvas",{className:`pcb-layer-${g}`,ref:I=>{n.current??={},I?n.current[g]=I:delete n.current[g]},style:{position:"absolute",zIndex:a,left:0,top:0,pointerEvents:"none"},width:i,height:o},g))]})},dNt=.6,pNt=1;wee(gRt()),wee(DRt());var w5=["rgba(239, 68, 68, 0.8)","rgba(249, 115, 22, 0.8)","rgba(245, 158, 11, 0.8)","rgba(234, 179, 8, 0.8)","rgba(132, 204, 22, 0.8)","rgba(34, 197, 94, 0.8)","rgba(16, 185, 129, 0.8)","rgba(20, 184, 166, 0.8)","rgba(6, 182, 212, 0.8)","rgba(14, 165, 233, 0.8)","rgba(59, 130, 246, 0.8)","rgba(99, 102, 241, 0.8)","rgba(139, 92, 246, 0.8)","rgba(168, 85, 247, 0.8)","rgba(217, 70, 239, 0.8)","rgba(236, 72, 153, 0.8)","rgba(249, 168, 212, 0.8)","rgba(161, 161, 170, 0.8)"];function jee(t,A,e,i={}){const o=i.padding??40,n=i.yFlip??!1;let s;if("center"in t){const I=t.width/2,c=t.height/2;s={minX:t.center.x-I,maxX:t.center.x+I,minY:t.center.y-c,maxY:t.center.y+c}}else s=t;const r=s.maxX-s.minX||1,g=s.maxY-s.minY||1,a=Math.min((A-2*o)/r,(e-2*o)/g);return zi(so(A/2,e/2),Ra(a,n?-a:a),so(-(s.minX+r/2),-(s.minY+g/2)))}function fNt(t){const A=[...t.points||[],...(t.lines||[]).flatMap(e=>e.points),...(t.rects||[]).flatMap(e=>{const i=e.width/2,o=e.height/2;return[{x:e.center.x-i,y:e.center.y-o},{x:e.center.x+i,y:e.center.y-o},{x:e.center.x-i,y:e.center.y+o},{x:e.center.x+i,y:e.center.y+o}]}),...(t.circles||[]).flatMap(e=>[{x:e.center.x-e.radius,y:e.center.y},{x:e.center.x+e.radius,y:e.center.y},{x:e.center.x,y:e.center.y-e.radius},{x:e.center.x,y:e.center.y+e.radius}]),...(t.texts||[]).flatMap(e=>{const i=e.fontSize??12,o=e.text.length*i*dNt,n=i*pNt,s=e.anchorSide??"center",r={top_left:{dx:0,dy:0},top_center:{dx:-o/2,dy:0},top_right:{dx:-o,dy:0},center_left:{dx:0,dy:-n/2},center:{dx:-o/2,dy:-n/2},center_right:{dx:-o,dy:-n/2},bottom_left:{dx:0,dy:-n},bottom_center:{dx:-o/2,dy:-n},bottom_right:{dx:-o,dy:-n}},{dx:g,dy:a}=r[s],I=e.x+g,c=e.y+a;return[{x:I,y:c},{x:I+o,y:c+n}]})];return A.length===0?{minX:-1,maxX:1,minY:-1,maxY:1}:A.reduce((e,i)=>({minX:Math.min(e.minX,i.x),maxX:Math.max(e.maxX,i.x),minY:Math.min(e.minY,i.y),maxY:Math.max(e.maxY,i.y)}),{minX:1/0,maxX:-1/0,minY:1/0,maxY:-1/0})}function yNt(t,A,e={}){const i=A instanceof HTMLCanvasElement?A.getContext("2d"):A;if(!i)throw new Error("Could not get 2D context from canvas");const o=A instanceof HTMLCanvasElement?A.width:A.canvas.width,n=A instanceof HTMLCanvasElement?A.height:A.canvas.height;let s;if(e.transform)s=e.transform;else if(e.viewbox)s=jee(e.viewbox,o,n,{padding:e.padding,yFlip:e.yFlip});else{const r=fNt(t),g=t.coordinateSystem==="cartesian";s=jee(r,o,n,{padding:e.padding??40,yFlip:g})}i.clearRect(0,0,o,n),i.save(),t.rects&&t.rects.length>0&&t.rects.forEach(r=>{const g=r.width/2,a=r.height/2,I=Ce(s,{x:r.center.x-g,y:r.center.y-a}),c=Ce(s,{x:r.center.x+g,y:r.center.y+a}),B=Math.abs(c.x-I.x),C=Math.abs(c.y-I.y);i.beginPath(),i.rect(Math.min(I.x,c.x),Math.min(I.y,c.y),B,C),r.fill&&(i.fillStyle=r.fill,i.fill()),r.stroke&&(i.strokeStyle=r.stroke,i.stroke())}),t.circles&&t.circles.length>0&&t.circles.forEach(r=>{const g=Ce(s,r.center),a=r.radius*Math.abs(s.a);i.beginPath(),i.arc(g.x,g.y,a,0,2*Math.PI),r.fill&&(i.fillStyle=r.fill,i.fill()),r.stroke&&(i.strokeStyle=r.stroke??"transparent",i.stroke())}),t.lines&&t.lines.length>0&&t.lines.forEach((r,g)=>{if(r.points.length===0)return;i.beginPath();const a=Ce(s,r.points[0]);i.moveTo(a.x,a.y);for(let I=1;I<r.points.length;I++){const c=Ce(s,r.points[I]);i.lineTo(c.x,c.y)}if(i.strokeStyle=r.strokeColor||w5[g%w5.length],r.strokeWidth?i.lineWidth=r.strokeWidth*s.a:i.lineWidth=2,i.lineCap="round",r.strokeDash)if(typeof r.strokeDash=="string"){let I;if(r.strokeDash.includes(","))I=r.strokeDash.split(",").map(c=>parseFloat(c.trim())).filter(c=>!Number.isNaN(c));else{const c=parseFloat(r.strokeDash.trim());I=Number.isNaN(c)?[]:[c]}i.setLineDash(I)}else i.setLineDash(r.strokeDash.map(I=>I*Math.abs(s.a)));else i.setLineDash([]);i.stroke()}),t.points&&t.points.length>0&&t.points.forEach((r,g)=>{const a=Ce(s,r);i.beginPath(),i.arc(a.x,a.y,3,0,2*Math.PI),i.fillStyle=r.color||w5[g%w5.length],i.fill(),r.label&&!e.disableLabels&&(i.fillStyle=r.color||"black",i.font="12px sans-serif",i.fillText(r.label,a.x+5,a.y-5))}),t.texts&&t.texts.length>0&&t.texts.forEach(r=>{const g=Ce(s,{x:r.x,y:r.y});i.fillStyle=r.color||"black",i.font=`${(r.fontSize??12)*Math.abs(s.a)}px sans-serif`;const a=r.anchorSide??"center",I={top_left:"left",center_left:"left",bottom_left:"left",top_center:"center",center:"center",bottom_center:"center",top_right:"right",center_right:"right",bottom_right:"right"},c={top_left:"top",top_center:"top",top_right:"top",center_left:"middle",center:"middle",center_right:"middle",bottom_left:"bottom",bottom_center:"bottom",bottom_right:"bottom"};i.textAlign=I[a],i.textBaseline=c[a],i.fillText(r.text,g.x,g.y)}),i.restore()}var wNt=({children:t,transform:A,debugGraphics:e})=>{const i=$.useRef(null),[o,{width:n,height:s}]=uL(),r=al(g=>g.is_showing_autorouting);return $.useEffect(()=>{r&&i.current&&e&&n&&s&&(i.current.width=n,i.current.height=s,yNt(e,i.current,{transform:A,disableLabels:!0}))},[e,A,n,s,r]),r?Z.jsxs("div",{ref:o,style:{position:"relative",width:"100%",height:"100%"},children:[t,Z.jsx("canvas",{ref:i,style:{position:"absolute",top:0,left:0,opacity:.5,zIndex:100,width:"100%",height:"100%",pointerEvents:"none"}})]}):t},DNt=({children:t,transform:A=Zg(),elements:e=[]})=>{const[i,{width:o,height:n}]=uL(),s=$.useRef(null);return $.useEffect(()=>{const r=s.current;if(!r||!o||!n)return;r.width=o,r.height=n;const g=r.getContext("2d");if(!g)return;g.clearRect(0,0,o,n);const a=e.filter(c=>c.type==="pcb_component"),I=e.filter(c=>c.type==="pcb_manual_edit_conflict_warning");g.strokeStyle=UI.board.drc_warning,g.lineWidth=2,I.forEach(c=>{const B=a.find(O=>O.pcb_component_id===c.pcb_component_id);if(!B)return;const{width:C,height:Q,center:l}=B,E=Ce(A,l),h=C*Math.abs(A.a),u=Q*Math.abs(A.d),p=.1*Math.abs(A.a),f=h+p*2,b=u+p*2,D=E.x-f/2,k=E.y-b/2;g.beginPath(),g.rect(D,k,f,b),g.stroke();const m="Manual Edit Conflict",F=4,G=Math.max(8,Math.min(12,10*Math.abs(A.a)));g.font=`${G}px sans-serif`;const M=g.measureText(m).width+F*2,J=G+F*2,P=D+(f-M)/2,q=k+b+5;g.fillStyle="rgba(0, 0, 0, 0.7)",g.beginPath(),g.roundRect(P,q,M,J,3),g.fill(),g.fillStyle=UI.board.drc_warning,g.textAlign="center",g.textBaseline="middle",g.fillText(m,P+M/2,q+J/2)})},[e,A,o,n]),Z.jsxs("div",{ref:i,style:{position:"relative",width:"100%",height:"100%"},children:[t,Z.jsx("canvas",{ref:s,style:{position:"absolute",top:0,left:0,pointerEvents:"none",zIndex:rI.warnings}})]})},D5=(t,A,e)=>e(t,A),zee=(t,A,e,i,o)=>{const n=o*Math.PI/180,s=Math.cos(n),r=Math.sin(n),g=t-e,a=A-i,I=g*s-a*r,c=g*r+a*s;return{x:I+e,y:c+i}},dL=t=>{if(t.length===0)return null;let A=t[0].x,e=t[0].x,i=t[0].y,o=t[0].y;for(const n of t)A=D5(A,n.x,Math.min),e=D5(e,n.x,Math.max),i=D5(i,n.y,Math.min),o=D5(o,n.y,Math.max);return{minX:A,maxX:e,minY:i,maxY:o}},mNt=(t,A)=>({minX:Math.min(t.minX,A.minX),maxX:Math.max(t.maxX,A.maxX),minY:Math.min(t.minY,A.minY),maxY:Math.max(t.maxY,A.maxY)}),SNt=(t,A)=>t?mNt(t,A):A,bNt=t=>{switch(t.pcb_drawing_type){case"line":{const A=(t.width??0)/2,e=[{x:t.x1,y:t.y1},{x:t.x2,y:t.y2}],i=dL(e);return i?{minX:i.minX-A,maxX:i.maxX+A,minY:i.minY-A,maxY:i.maxY+A}:null}case"rect":{const A=t.w/2,e=t.h/2,i=[{x:t.x-A,y:t.y-e},{x:t.x+A,y:t.y-e},{x:t.x+A,y:t.y+e},{x:t.x-A,y:t.y+e}],o=t.ccw_rotation??0,n=o===0?i:i.map(s=>zee(s.x,s.y,t.x,t.y,o));return dL(n)}case"circle":return{minX:t.x-t.r,maxX:t.x+t.r,minY:t.y-t.r,maxY:t.y+t.r};case"oval":return{minX:t.x-t.rX,maxX:t.x+t.rX,minY:t.y-t.rY,maxY:t.y+t.rY};case"pill":{const A=t.w/2,e=t.h/2,i=[{x:t.x-A,y:t.y-e},{x:t.x+A,y:t.y-e},{x:t.x+A,y:t.y+e},{x:t.x-A,y:t.y+e}],o=t.ccw_rotation??0,n=o===0?i:i.map(s=>zee(s.x,s.y,t.x,t.y,o));return dL(n)}case"polygon":return dL(t.points);case"polygon_with_arcs":{const A=t.brep_shape.outer_ring.vertices.map(e=>({x:e.x,y:e.y}));return dL(A)}case"text":{const A=t.size??0,e=t.text?t.text.length*A*.6:0,i=A;if(e===0&&i===0)return{minX:t.x,maxX:t.x,minY:t.y,maxY:t.y};const o=e/2,n=i/2;return{minX:t.x-o,maxX:t.x+o,minY:t.y-n,maxY:t.y+n}}default:return null}};function kNt(t){const{dimensionStart:A,dimensionEnd:e,screenDimensionStart:i,screenDimensionEnd:o,flipX:n,flipY:s}=t,r=e.x-A.x,g=e.y-A.y,a=Math.sqrt(r*r+g*g),I=o.x-i.x,c=o.y-i.y,B=Math.sqrt(I*I+c*c),C=Math.atan2(c,I)*(180/Math.PI),Q=Math.abs(C)%90,E=Math.min(Q,90-Q)>15,h=(i.x+o.x)/2,u=(i.y+o.y)/2,p=15,f=C+90;let b=Math.cos(f*Math.PI/180)*p,D=Math.sin(f*Math.PI/180)*p;const k=I>0&&c<0,m=I>0&&c>0,F=I<0&&c>0;n!==s&&!k&&(b=-b,D=-D),k&&(b+=Math.cos(f*Math.PI/180)*-45,D+=Math.sin(f*Math.PI/180)*-45),m&&(b+=Math.cos(f*Math.PI/180)+-20,D+=Math.sin(f*Math.PI/180)+-10),F&&(b+=Math.cos(f*Math.PI/180)*10,D+=Math.sin(f*Math.PI/180)*10);const G=h+b,U=u+D;return{distance:a,screenDistance:B,x:G,y:U,show:a>.01&&B>30&&E}}function GNt(t){const{dimensionStart:A,dimensionEnd:e,screenDimensionStart:i,screenDimensionEnd:o,flipX:n,flipY:s}=t;return $.useMemo(()=>kNt({dimensionStart:A,dimensionEnd:e,screenDimensionStart:i,screenDimensionEnd:o,flipX:n,flipY:s}),[A,e,i,o,n,s])}var xNt=(t,A,e)=>{const i=e*Math.PI/180,o=Math.cos(i),n=Math.sin(i),s=t.x-A.x,r=t.y-A.y,g=s*o-r*n,a=s*n+r*o;return{x:g+A.x,y:a+A.y}},Xee=(t,A,e,i)=>{const o={top_left:{x:t.x-A,y:t.y-e},top_center:{x:t.x,y:t.y-e},top_right:{x:t.x+A,y:t.y-e},center_left:{x:t.x-A,y:t.y},center:{x:t.x,y:t.y},center_right:{x:t.x+A,y:t.y},bottom_left:{x:t.x-A,y:t.y+e},bottom_center:{x:t.x,y:t.y+e},bottom_right:{x:t.x+A,y:t.y+e}};return i===0?Object.entries(o).map(([n,s])=>({anchor:n,point:s})):Object.entries(o).map(([n,s])=>({anchor:n,point:xNt(s,t,i)}))},FNt=t=>{switch(t.pcb_drawing_type){case"rect":{const A=t.ccw_rotation??0;return Xee({x:t.x,y:t.y},t.w/2,t.h/2,A)}case"pill":{const A=t.ccw_rotation??0;return Xee({x:t.x,y:t.y},t.w/2,t.h/2,A)}case"circle":return[{anchor:"circle_center",point:{x:t.x,y:t.y}},{anchor:"circle_right",point:{x:t.x+t.r,y:t.y}},{anchor:"circle_left",point:{x:t.x-t.r,y:t.y}},{anchor:"circle_top",point:{x:t.x,y:t.y-t.r}},{anchor:"circle_bottom",point:{x:t.x,y:t.y+t.r}}];case"oval":return[{anchor:"oval_center",point:{x:t.x,y:t.y}},{anchor:"oval_right",point:{x:t.x+t.rX,y:t.y}},{anchor:"oval_left",point:{x:t.x-t.rX,y:t.y}},{anchor:"oval_top",point:{x:t.x,y:t.y-t.rY}},{anchor:"oval_bottom",point:{x:t.x,y:t.y+t.rY}}];case"line":{const A={x:(t.x1+t.x2)/2,y:(t.y1+t.y2)/2};return[{anchor:"line_start",point:{x:t.x1,y:t.y1}},{anchor:"line_mid",point:A},{anchor:"line_end",point:{x:t.x2,y:t.y2}}]}case"polygon":return t.points.map((A,e)=>({anchor:`polygon_vertex_${e}`,point:A}));case"polygon_with_arcs":return t.brep_shape.outer_ring.vertices.map((A,e)=>({anchor:`polygon_with_arcs_vertex_${e}`,point:{x:A.x,y:A.y}}));default:return[]}},_Nt=16,xx=5,$ee=t=>{if(t.pcb_drawing_type==="text")return!0;const A=t._element;if(!A||typeof A!="object")return!1;const e=typeof A.type=="string"?A.type:void 0;return e?!!(e.startsWith("pcb_silkscreen_")||e.startsWith("pcb_note_")||e==="pcb_text"||e.startsWith("pcb_fabrication_note_")&&e!=="pcb_fabrication_note_rect"):!1},RNt=({children:t,transform:A,focusOnHover:e=!1,primitives:i=[]})=>{A||(A=Zg());const[o,n]=$.useState(!1),[s,r]=$.useState(!1),[g,a]=$.useState(!1),[I,c]=$.useState({start:null,end:null}),B=$.useCallback(()=>{g&&(a(!1),window.dispatchEvent(new Event("disarm-dimension-tool")))},[g]),[C,Q]=$.useState({x:0,y:0}),[l,E]=$.useState({x:0,y:0}),h=$.useRef({x:0,y:0}),u=$.useRef(null),f=u.current?.getBoundingClientRect(),b=$.useMemo(()=>{const P=new Map;for(const q of i){if(!q._element||$ee(q)||q.pcb_drawing_type==="pill"||q.pcb_drawing_type==="rect"&&q.ccw_rotation&&q.ccw_rotation!==0)continue;const O=bNt(q);if(!O)continue;const j=P.get(q._element);P.set(q._element,SNt(j??void 0,O))}return P},[i]),D=$.useMemo(()=>{const P=[];for(const q of i){if(!q._element||$ee(q))continue;const O=FNt(q);if(O.length!==0)for(const j of O)P.push({anchor:j.anchor,point:j.point,element:q._element})}return P},[i]),k=$.useMemo(()=>{const P=[];b.forEach((q,O)=>{if(!q)return;const j=(q.minX+q.maxX)/2,eA=(q.minY+q.maxY)/2,nA={top_left:{x:q.minX,y:q.minY},top_center:{x:j,y:q.minY},top_right:{x:q.maxX,y:q.minY},center_left:{x:q.minX,y:eA},center:{x:j,y:eA},center_right:{x:q.maxX,y:eA},bottom_left:{x:q.minX,y:q.maxY},bottom_center:{x:j,y:q.maxY},bottom_right:{x:q.maxX,y:q.maxY}};for(const[IA,iA]of Object.entries(nA))P.push({anchor:IA,point:iA,element:O})});for(const q of D)P.push(q);return P.push({anchor:"origin",point:{x:0,y:0},element:null}),P},[b,D]),m=$.useMemo(()=>k.map((P,q)=>({...P,id:`${q}-${P.anchor}`,screenPoint:Ce(A,P.point)})),[k,A]),F=$.useCallback(P=>{if(m.length===0)return{point:P,id:null};const q=Ce(A,P);let O=null;for(const j of m){const eA=j.screenPoint.x-q.x,nA=j.screenPoint.y-q.y,IA=Math.hypot(eA,nA);IA>_Nt||(!O||IA<O.distance)&&(O={distance:IA,id:j.id,point:j.point})}return O?{point:O.point,id:O.id}:{point:P,id:null}},[m,A]);$.useEffect(()=>{const P=u.current,q=nA=>{if(nA.key==="d"){const IA=F({x:h.current.x,y:h.current.y});Q({x:IA.point.x,y:IA.point.y}),E({x:IA.point.x,y:IA.point.y}),c({start:IA.id,end:IA.id}),o?(n(!1),r(!1),c({start:null,end:null})):(n(!0),r(!0)),B()}nA.key==="Escape"&&(n(!1),r(!1),c({start:null,end:null}),B())},O=()=>{a(!0)},j=()=>{P&&window.addEventListener("keydown",q)},eA=()=>{P&&window.removeEventListener("keydown",q)};return window.addEventListener("arm-dimension-tool",O),P&&(P.addEventListener("focus",j),P.addEventListener("blur",eA),P.addEventListener("mouseenter",j),P.addEventListener("mouseleave",eA)),()=>{window.removeEventListener("arm-dimension-tool",O),B(),P&&(P.removeEventListener("focus",j),P.removeEventListener("blur",eA),P.removeEventListener("mouseenter",j),P.removeEventListener("mouseleave",eA))}},[u,o,B,F]);const G=Ce(A,C),U=Ce(A,l),M={left:Math.min(G.x,U.x),right:Math.max(G.x,U.x),top:Math.min(G.y,U.y),bottom:Math.max(G.y,U.y),flipX:G.x>U.x,flipY:G.y>U.y,width:0,height:0};M.width=M.right-M.left,M.height=M.bottom-M.top;const J=GNt({dimensionStart:C,dimensionEnd:l,screenDimensionStart:G,screenDimensionEnd:U,flipX:M.flipX,flipY:M.flipY});return Z.jsxs("div",{ref:u,tabIndex:0,style:{position:"relative"},onMouseEnter:()=>{e&&u.current&&u.current.focus()},onMouseLeave:()=>{u.current&&u.current.blur()},onMouseMove:P=>{const q=P.currentTarget.getBoundingClientRect(),O=P.clientX-q.left,j=P.clientY-q.top,eA=Ce(Uy(A),{x:O,y:j});if(h.current.x=eA.x,h.current.y=eA.y,s){const nA=F(eA);E({x:nA.point.x,y:nA.point.y}),c(IA=>({...IA,end:nA.id}))}},onMouseDown:P=>{const q=P.currentTarget.getBoundingClientRect(),O=P.clientX-q.left,j=P.clientY-q.top,eA=Ce(Uy(A),{x:O,y:j});if(g&&!o){const nA=F(eA);Q({x:nA.point.x,y:nA.point.y}),E({x:nA.point.x,y:nA.point.y}),c({start:nA.id,end:nA.id}),n(!0),r(!0),B()}else s?(r(!1),c(nA=>({...nA,end:null}))):o&&(n(!1),c({start:null,end:null}))},children:[t,o&&Z.jsxs(Z.Fragment,{children:[J.show&&Z.jsx("div",{style:{position:"absolute",left:J.x,top:J.y,color:"red",mixBlendMode:"difference",pointerEvents:"none",fontSize:12,fontFamily:"sans-serif",whiteSpace:"nowrap",zIndex:rI.dimensionOverlay},children:J.distance.toFixed(2)}),Z.jsx("div",{style:{position:"absolute",left:M.left,width:M.width,textAlign:"center",top:G.y+2,color:"red",mixBlendMode:"difference",pointerEvents:"none",marginTop:M.flipY?0:-20,fontSize:12,fontFamily:"sans-serif",zIndex:rI.dimensionOverlay},children:Math.abs(C.x-l.x).toFixed(2)}),Z.jsx("div",{style:{position:"absolute",left:U.x,height:M.height,display:"flex",flexDirection:"column",justifyContent:"center",top:M.top,color:"red",pointerEvents:"none",mixBlendMode:"difference",fontSize:12,fontFamily:"sans-serif",zIndex:rI.dimensionOverlay},children:Z.jsx("div",{style:{marginLeft:M.flipX?"-100%":4,paddingRight:4},children:Math.abs(C.y-l.y).toFixed(2)})}),Z.jsxs("svg",{style:{position:"absolute",left:0,top:0,pointerEvents:"none",mixBlendMode:"difference",zIndex:rI.dimensionOverlay},width:f.width,height:f.height,children:[Z.jsx("defs",{children:Z.jsx("marker",{id:"head",orient:"auto",markerWidth:"3",markerHeight:"4",refX:"2",refY:"2",children:Z.jsx("path",{d:"M0,0 V4 L2,2 Z",fill:"red"})})}),Z.jsx("line",{x1:G.x,y1:G.y,x2:U.x,y2:U.y,markerEnd:"url(#head)",strokeWidth:1.5,fill:"none",stroke:"red"}),Z.jsx("line",{x1:G.x,y1:G.y,x2:U.x,y2:G.y,strokeWidth:1.5,fill:"none",strokeDasharray:"2,2",stroke:"red"}),Z.jsx("line",{x1:U.x,y1:G.y,x2:U.x,y2:U.y,strokeWidth:1.5,fill:"none",strokeDasharray:"2,2",stroke:"red"})]}),s&&m.map(P=>{const q=P.id===I.start||P.id===I.end,O=xx/2;return Z.jsxs("svg",{width:xx,height:xx,style:{position:"absolute",left:P.screenPoint.x-O,top:P.screenPoint.y-O,pointerEvents:"none",zIndex:rI.dimensionOverlay},children:[Z.jsx("line",{x1:0,y1:0,x2:xx,y2:xx,stroke:q?"#66ccff":"white",strokeWidth:1}),Z.jsx("line",{x1:xx,y1:0,x2:0,y2:xx,stroke:q?"#66ccff":"white",strokeWidth:1})]},P.id)}),Z.jsxs("div",{style:{right:0,bottom:0,position:"absolute",color:"red",fontFamily:"sans-serif",fontSize:12,margin:4},children:["(",C.x.toFixed(2),",",C.y.toFixed(2),")",Z.jsx("br",{}),"(",l.x.toFixed(2),",",l.y.toFixed(2),")",Z.jsx("br",{}),"dist:"," ",Math.sqrt((l.x-C.x)**2+(l.y-C.y)**2).toFixed(2)]})]})]})},NNt=(t,A,e=0)=>{const i=t.width/2,o=t.height/2,n=t.center.x-i-e,s=t.center.x+i+e,r=t.center.y-o-e,g=t.center.y+o+e;return A.x>n&&A.x<s&&A.y>r&&A.y<g},MNt=({children:t,disabled:A,transform:e,soup:i,cancelPanDrag:o,onCreateEditEvent:n,onModifyEditEvent:s})=>{e||(e=Zg());const r=$.useRef(null),[g,a]=$.useState(null),[I,c]=$.useState(null),B=g!==null;al(E=>E.in_edit_mode);const C=al(E=>E.in_move_footprint_mode),Q=al(E=>E.setIsMovingComponent),l=A||!C;return Z.jsxs("div",{ref:r,style:{position:"relative",overflow:"hidden"},onMouseDown:E=>{if(l)return;const h=E.currentTarget.getBoundingClientRect(),u=E.clientX-h.left,p=E.clientY-h.top;if(Number.isNaN(u)||Number.isNaN(p))return;const f=Ce(Uy(e),{x:u,y:p});let b=!1;for(const D of i)if(D.type==="pcb_component"&&NNt(D,f,10/e.a)){o(),a(D.pcb_component_id),b=!0;const k=Math.random().toString();c({dragStart:f,originalCenter:D.center,dragEnd:f,edit_event_id:k}),n({edit_event_id:k,edit_event_type:"edit_pcb_component_location",pcb_edit_event_type:"edit_component_location",pcb_component_id:D.pcb_component_id,original_center:D.center,new_center:D.center,in_progress:!0,created_at:Date.now()}),Q(!0);break}if(b||a(null),b)return E.preventDefault(),!1},onMouseMove:E=>{if(!g||!I)return;const h=E.currentTarget.getBoundingClientRect(),u=E.clientX-h.left,p=E.clientY-h.top;if(Number.isNaN(u)||Number.isNaN(p))return;const f=Ce(Uy(e),{x:u,y:p});c({...I,dragEnd:f}),s({edit_event_id:I.edit_event_id,new_center:{x:I.originalCenter.x+f.x-I.dragStart.x,y:I.originalCenter.y+f.y-I.dragStart.y}})},onMouseUp:E=>{g&&(a(null),Q(!1),I&&(s({edit_event_id:I.edit_event_id,in_progress:!1}),c(null)))},children:[t,!l&&i.filter(E=>E.type==="pcb_component").map(E=>{if(!E?.center)return null;const h=Ce(e,E.center);return Z.jsx("div",{style:{position:"absolute",pointerEvents:"none",left:h.x,top:h.y,width:E.width*e.a+20,height:E.height*e.a+20,transform:"translate(-50%, -50%)",background:B&&g===E.pcb_component_id?"rgba(255, 0, 0, 0.2)":""}},E.pcb_component_id)})]})},vNt=({hotkeys:t})=>($.useEffect(()=>{const A=e=>{t.forEach(i=>{e.key===i.key&&i.onUse()})};return window.addEventListener("keydown",A),()=>{window.removeEventListener("keydown",A)}},[t]),Z.jsx("div",{className:qN`
5764
5764
  display: flex;
5765
5765
  flex-direction: column;
5766
5766
  font-family: sans-serif;
@@ -5799,7 +5799,7 @@ $1`).replace(/>(\s*)(?=<!--\s*\/)/g,"> ")}}});function _ee(t,A,e){if(!A||!e)retu
5799
5799
  transition: opacity 0.2s;
5800
5800
  margin-bottom: 10px;
5801
5801
  color: red;
5802
- `,KNt=({children:t,transform:A=Zg(),elements:e})=>{const i=$.useRef(null),{isShowingDRCErrors:o,hoveredErrorId:n}=al(a=>({isShowingDRCErrors:a.is_showing_drc_errors,hoveredErrorId:a.hovered_error_id}));if(!e)return Z.jsx("div",{style:{position:"relative"},ref:i,children:t});const s=e.filter(a=>a.type==="pcb_trace_error"),r=e.filter(a=>a.type==="pcb_trace_error"&&a.message?.includes("Multiple components found with name")),g=new Map;return e.forEach(a=>{a.type==="pcb_port"&&g.set(a.pcb_port_id,a)}),Z.jsxs("div",{style:{position:"relative"},ref:i,children:[t,s.map((a,I)=>{const{pcb_port_ids:c,pcb_trace_id:B}=a,C=c?.[0]?g.get(c[0]):void 0,Q=c?.[1]?g.get(c[1]):void 0,l=e?Ck(e).pcb_trace.get(B):void 0,E=a.pcb_trace_error_id||`error_${I}_${a.error_type}_${a.message?.slice(0,20)}`,h=n===E;if(C&&Q){const u=Ce(A,{x:C.x,y:C.y}),p=Ce(A,{x:Q.x,y:Q.y}),f=!(isNaN(u.x)||isNaN(u.y)||isNaN(p.x)||isNaN(p.y)),b={x:(u.x+p.x)/2,y:(u.y+p.y)/2};if(isNaN(b.x)||isNaN(b.y))return null;const D=ZlA(b,i);return Z.jsxs($.Fragment,{children:[Z.jsx(YNt,{screenPort1:u,screenPort2:p,errorCenter:b,canLineBeDrawn:f,isHighlighted:h}),Z.jsx("div",{style:{position:"absolute",left:b.x-15,top:b.y-15,width:30,height:30,zIndex:rI.errorOverlay+5,cursor:"pointer",borderRadius:"50%"},onMouseEnter:k=>{const m=k.currentTarget.nextElementSibling;if(m){const F=m.querySelector(".error-message");F&&(F.style.opacity="1")}},onMouseLeave:k=>{if(!h){const m=k.currentTarget.nextElementSibling;if(m){const F=m.querySelector(".error-message");F&&(F.style.opacity="0")}}}}),Z.jsx("div",{style:{position:"absolute",zIndex:h?200:100,left:D.left,top:D.top,color:h?"#ff4444":"red",textAlign:"center",fontFamily:"sans-serif",fontSize:12,display:o||h?"flex":"none",flexDirection:"column",alignItems:"center",pointerEvents:"none",transform:D.transform},children:Z.jsx("div",{className:`error-message ${VlA}`,style:{opacity:h?1:0,border:`1px solid ${h?"#ff4444":"red"}`},children:a.message})})]},E)}if(l?.route&&(o||h)){const u=l.route.map(D=>Ce(A,{x:D.x,y:D.y}));if(u.some(D=>isNaN(D.x)||isNaN(D.y)))return null;const p=Math.floor(u.length/2),f=u[p],b=ZlA(f,i);return Z.jsxs($.Fragment,{children:[Z.jsx(JNt,{points:u,errorCenter:f,isHighlighted:h}),Z.jsx("div",{style:{position:"absolute",left:f.x-15,top:f.y-15,width:30,height:30,zIndex:rI.errorOverlay+5,cursor:"pointer",borderRadius:"50%"},onMouseEnter:D=>{const k=D.currentTarget.nextElementSibling;if(k){const m=k.querySelector(".error-message");m&&(m.style.opacity="1")}},onMouseLeave:D=>{if(!h){const k=D.currentTarget.nextElementSibling;if(k){const m=k.querySelector(".error-message");m&&(m.style.opacity="0")}}}}),Z.jsx("div",{style:{position:"absolute",zIndex:h?rI.errorOverlay+10:rI.errorOverlay+1,left:b.left,top:b.top,color:h?"#ff4444":"red",textAlign:"center",fontFamily:"sans-serif",fontSize:12,display:"flex",flexDirection:"column",alignItems:"center",pointerEvents:"none",transform:b.transform},children:Z.jsx("div",{className:`error-message ${VlA}`,style:{opacity:h?1:0,border:`1px solid ${h?"#ff4444":"red"}`},children:a.message})})]},E)}return null}),r.map((a,I)=>{const c=a.component_name||a.message?.match(/name "([^"]+)"/)?.[1];if(!c)return null;const B=e?.filter(l=>l.type==="source_component"&&l.name===c||l.type==="pcb_component"&&e?.find(E=>E.type==="source_component"&&E.source_component_id===l.source_component_id&&E.name===c))||[],C=a.pcb_trace_error_id||`error_${I}_${a.error_type}_${a.message?.slice(0,20)}`,Q=n===C;return!Q&&!o?null:B.map((l,E)=>{let h={x:0,y:0};if(l.type==="pcb_component")h=l.center||{x:0,y:0};else if(l.type==="source_component"){const F=e?.find(G=>G.type==="pcb_component"&&G.source_component_id===l.source_component_id);F&&F.type==="pcb_component"&&(h=F.center||{x:0,y:0})}const u=Ce(A,h);if(isNaN(u.x)||isNaN(u.y))return null;const p=Math.abs(A.a),k=Math.max(8,Math.min(30,.5*p)),m=ZlA(u,i);return Z.jsxs($.Fragment,{children:[Z.jsx("svg",{style:{position:"absolute",left:0,top:0,pointerEvents:"none",mixBlendMode:"difference",zIndex:rI.errorOverlay},width:"100%",height:"100%",children:Q?Z.jsx("polygon",{points:`${u.x},${u.y-k*1.25} ${u.x+k},${u.y} ${u.x},${u.y+k*1.25} ${u.x-k},${u.y}`,fill:"#ff4444"}):Z.jsx("circle",{cx:u.x,cy:u.y,r:k,fill:"none",stroke:Q?"#ff4444":"red",strokeWidth:Q?Math.max(2,k*.15):Math.max(1,k*.1),opacity:1})}),Z.jsx("div",{style:{position:"absolute",left:u.x-(k+10),top:u.y-(k+10),width:(k+10)*2,height:(k+10)*2,zIndex:rI.errorOverlay+5,cursor:"pointer",borderRadius:"50%"},onMouseEnter:F=>{const G=F.currentTarget.nextElementSibling;if(G){const U=G.querySelector(".error-message");U&&(U.style.opacity="1")}},onMouseLeave:F=>{if(!Q){const G=F.currentTarget.nextElementSibling;if(G){const U=G.querySelector(".error-message");U&&(U.style.opacity="0")}}}}),Z.jsx("div",{style:{position:"absolute",zIndex:Q?rI.errorOverlay+20:rI.errorOverlay+10,left:m.left,top:m.top,color:Q?"#ff4444":"red",textAlign:"center",fontFamily:"sans-serif",fontSize:12,display:o||Q?"flex":"none",flexDirection:"column",alignItems:"center",pointerEvents:"none",transform:m.transform},children:Z.jsx("div",{className:`error-message ${VlA}`,style:{opacity:Q?1:0,border:`1px solid ${Q?"#ff4444":"red"}`},children:a.message})})]},`${C}_${E}`)})})]})};function TNt(t,A){return t.size!==A.size?!1:Array.from(t).every(e=>A.has(e))}function qNt({primitiveElement:t,elements:A}){let e=t.trace_length?`${t.trace_length.toFixed(3)}`:"";const i=Ck(A).source_trace.get(t?.source_trace_id);if(i?.display_name&&(i?.max_length?e+=` / ${i.max_length}mm `:e+=" mm ",e+=`(${i.display_name})`),!e)return null;const o=t.trace_length&&i?.max_length&&t.trace_length>i.max_length;return{text:e,isOverLength:o}}function PNt(t){const{primitives:A,is_showing_multiple_traces_length:e,elements:i}=t,o=A.filter(g=>g._element.type==="pcb_trace"),n=i.filter(g=>g.type==="source_trace"),s=A.filter(g=>g._element.type!=="pcb_trace"),r=o.filter(g=>n.some(a=>g._element.type==="pcb_trace"&&g._element.source_trace_id===a.source_trace_id&&a.max_length!==void 0));if(!e)return[...s,...r];if(o.length>1){const g=o.reduce((a,I)=>{const c=a._element.trace_length;return I._element.trace_length<c?I:a},o[0]);return[...s,g]}return A}var ONt={position:"absolute",left:0,top:0,pointerEvents:"none",color:"red",fontFamily:"sans-serif",fontSize:12,textShadow:"0 0 2px black"},WNt=t=>{const{_element:A,_parent_pcb_component:e,_parent_source_component:i,_source_port:o}=t;switch(A.type){case"pcb_trace":return A.trace_length?`${A.trace_length.toFixed(3)}`:"";case"pcb_smtpad":case"pcb_plated_hole":{const n=[],s=Array.from(new Set((A.port_hints??[]).concat(o?.port_hints??[]))).filter(g=>!/^[0-9]+$/.test(g)).filter(g=>!g.includes("unnamed_")).sort((g,a)=>a.localeCompare(g)),r=i&&"name"in i&&i.name&&!i.name.includes("unnamed_")?i.name:null;return s.length>0?r?n.push(...s.map(g=>`${r}.${g}`)):n.push(...s):r&&n.push(r),n.join(", ")}default:return""}},ZNt={top:"red",bottom:"aqua"},VNt=({primitive:t,mousePos:A,elements:e})=>{const[i,o]=$.useState(!1),n=t._element;$.useEffect(()=>{setTimeout(()=>{o(!0)},100)},[]);const[s,r,g,a]=[t.screen_x,t.screen_y,t.screen_w,t.screen_h],I=t.same_space_index??0,c=26,B=ZNt[t?._element?.layer]??"red";let C=0;if(n.type==="pcb_smtpad"&&n?.shape==="rotated_rect"?C=n?.ccw_rotation??0:(n.type==="pcb_smtpad"&&(n?.shape==="pill"||n?.shape==="rotated_pill")&&"ccw_rotation"in t||n.type==="pcb_plated_hole"&&(n?.shape==="pill"||n?.shape==="oval")&&"ccw_rotation"in t)&&(C=n.ccw_rotation??0),n.type==="pcb_trace"){const E=qNt({primitiveElement:n,elements:e});if(!E)return null;const h=A.y-35;return Z.jsx("div",{style:{zIndex:rI.elementOverlay,position:"absolute",left:A.x,top:h,color:B,pointerEvents:"none",transform:"translateX(-50%)"},children:Z.jsx("div",{style:{backgroundColor:"#f2efcc",color:E.isOverLength?"red":"black",textShadow:"none",WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale",padding:"6px 6px",borderRadius:"6px",fontSize:"14px",minWidth:"45px",textAlign:"center",whiteSpace:"nowrap"},children:E.text})})}const Q=WNt(t);return Q.trim().length===0?null:Z.jsx("div",{style:{zIndex:rI.elementOverlay,position:"absolute",left:s-g/2-8,top:r-a/2-8,width:g+16,height:a+16,color:B,transform:`rotate(${-C}deg)`,transformOrigin:"center center"},children:Z.jsx("div",{style:{width:i?`calc(100% + ${c*2*I}px)`:"100%",height:i?`calc(100% + ${c*2*I}px)`:"100%",marginLeft:i?`${-c*I}px`:0,marginTop:i?`${-c*I}px`:0,border:`1px solid ${B}`,opacity:i||I===0?1:0,transition:"width 0.2s, height 0.2s, margin-left 0.2s, margin-top 0.2s, opacity 0.2s"},children:Z.jsx("div",{style:{position:"absolute",bottom:a+20+c*I,marginRight:i?`${-c*I}px`:0,marginBottom:i?0:-c*I,transition:"margin-right 0.2s, margin-bottom 0.2s",backgroundColor:"#f2efcc",color:"black",textShadow:"none",WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale",padding:"6px 6px",borderRadius:"6px",fontSize:"14px",transform:`rotate(${C}deg)`,minWidth:"45px",textAlign:"center"},children:Q})})})},jNt=({highlightedPrimitives:t,mousePos:A,elements:e})=>{const[i,o]=al(r=>[r.is_moving_component,r.is_showing_multiple_traces_length]),n=t.some(r=>r._element.type==="pcb_smtpad")&&t.some(r=>r._element.type==="pcb_trace");let s=t;return n&&(s=s.filter(r=>r._element.type==="pcb_smtpad")),s=PNt({primitives:s,is_showing_multiple_traces_length:o,elements:e}),Z.jsx("div",{style:ONt,children:!i&&s.map((r,g)=>Z.jsx(VNt,{primitive:r,mousePos:A,elements:e},g))})},Gn={MIN_LINE_LENGTH_FOR_LABEL:40,LABEL_OFFSET_ABOVE:2,LABEL_OFFSET_BELOW:-18,LABEL_OFFSET_RIGHT:8,LABEL_OFFSET_LEFT:-80,LINE_STROKE_WIDTH:1.5,LINE_DASH_PATTERN:"4,4",COMPONENT_MARKER_RADIUS:3,LABEL_FONT_SIZE:11,ANCHOR_MARKER_SIZE:6,ANCHOR_MARKER_STROKE_WIDTH:1.5},tE={OFFSET_LINE:"white",COMPONENT_MARKER_FILL:"#66ccff",COMPONENT_MARKER_STROKE:"white",LABEL_TEXT:"white"},PN=t=>t?.type==="pcb_component",Ate=t=>t?.type==="pcb_group",zNt=t=>t?.type==="pcb_board",XNt=({elements:t,highlightedPrimitives:A,transform:e,containerWidth:i,containerHeight:o})=>{const n=t.filter(u=>zNt(u)),s=t.filter(u=>PN(u)),r=t.filter(u=>Ate(u)),g=A.map(u=>PN(u._parent_pcb_component)?u._parent_pcb_component.pcb_component_id:PN(u._element)?u._element.pcb_component_id:null).filter(u=>!!u),a=new Set;if(g.forEach(u=>{const p=s.find(f=>f.pcb_component_id===u);p?.pcb_group_id&&a.add(p.pcb_group_id)}),!al(u=>u.is_showing_group_anchor_offsets)&&g.length===0)return null;const c=s.map(u=>{const p=u.positioned_relative_to_pcb_board_id;if(!p)return null;const f=n.find(b=>b.pcb_board_id===p);return f?{component:u,board:f,type:"component"}:null}).filter(u=>!!u),B=r.map(u=>{const p=u.positioned_relative_to_pcb_board_id;if(!p||!u.center)return null;const f=n.find(b=>b.pcb_board_id===p);return f?{group:u,board:f,type:"group"}:null}).filter(u=>!!u),C=[...c,...B];if(C.length===0)return null;const Q=g.length===0,l={color:tE.LABEL_TEXT,mixBlendMode:"difference",pointerEvents:"none",fontSize:Gn.LABEL_FONT_SIZE,fontFamily:"monospace",fontWeight:"bold"},E=C.filter(u=>u.type==="component"?Q||g.includes(u.component.pcb_component_id):Q||a.has(u.group.pcb_group_id));if(E.length===0)return null;const h=new Map;return Z.jsx("div",{style:{position:"absolute",left:0,top:0,width:i,height:o,overflow:"hidden",pointerEvents:"none",zIndex:rI.dimensionOverlay},children:Z.jsxs("svg",{style:{position:"absolute",left:0,top:0,pointerEvents:"none"},width:i,height:o,children:[E.map(u=>{const p=u.board.center,f=u.board.pcb_board_id;let b,D,k,m;if(u.type==="component")b=u.component.center,D=u.component.pcb_component_id,k=u.component.display_offset_x,m=u.component.display_offset_y;else{if(!u.group.center)return null;b={x:u.group.center.x,y:u.group.center.y},D=u.group.pcb_group_id,k=u.group.display_offset_x,m=u.group.display_offset_y}if(!h.has(f)){const gA=Ce(e,p);h.set(f,gA)}const F=h.get(f),G=Ce(e,b),U=b.x-p.x,M=b.y-p.y,J=Math.abs(G.x-F.x),P=Math.abs(G.y-F.y),q=G.y<F.y,O=G.x>F.x,j=q?Gn.LABEL_OFFSET_ABOVE:Gn.LABEL_OFFSET_BELOW,eA=O?Gn.LABEL_OFFSET_RIGHT:Gn.LABEL_OFFSET_LEFT,nA=J>Gn.MIN_LINE_LENGTH_FOR_LABEL,IA=P>Gn.MIN_LINE_LENGTH_FOR_LABEL,iA=k??`Board Δx: ${U.toFixed(2)}mm`,oA=m??`Board Δy: ${M.toFixed(2)}mm`;return Z.jsxs("g",{children:[Z.jsx("line",{x1:F.x,y1:F.y,x2:G.x,y2:F.y,stroke:tE.OFFSET_LINE,strokeWidth:Gn.LINE_STROKE_WIDTH,strokeDasharray:Gn.LINE_DASH_PATTERN}),Z.jsx("line",{x1:G.x,y1:F.y,x2:G.x,y2:G.y,stroke:tE.OFFSET_LINE,strokeWidth:Gn.LINE_STROKE_WIDTH,strokeDasharray:Gn.LINE_DASH_PATTERN}),u.type==="component"?Z.jsx("circle",{cx:G.x,cy:G.y,r:Gn.COMPONENT_MARKER_RADIUS,fill:tE.COMPONENT_MARKER_FILL,stroke:tE.COMPONENT_MARKER_STROKE,strokeWidth:1}):Z.jsxs(Z.Fragment,{children:[Z.jsx("line",{x1:G.x-Gn.ANCHOR_MARKER_SIZE,y1:G.y,x2:G.x+Gn.ANCHOR_MARKER_SIZE,y2:G.y,stroke:tE.OFFSET_LINE,strokeWidth:Gn.ANCHOR_MARKER_STROKE_WIDTH}),Z.jsx("line",{x1:G.x,y1:G.y-Gn.ANCHOR_MARKER_SIZE,x2:G.x,y2:G.y+Gn.ANCHOR_MARKER_SIZE,stroke:tE.OFFSET_LINE,strokeWidth:Gn.ANCHOR_MARKER_STROKE_WIDTH})]}),nA&&Z.jsx("foreignObject",{x:Math.min(F.x,G.x),y:F.y+j,width:Math.abs(G.x-F.x),height:20,style:{overflow:"visible"},children:Z.jsx("div",{style:{...l,textAlign:"center"},children:iA})}),IA&&Z.jsx("foreignObject",{x:G.x+eA,y:Math.min(F.y,G.y),width:20,height:Math.abs(G.y-F.y),style:{overflow:"visible"},children:Z.jsx("div",{style:{...l,display:"flex",alignItems:"center",height:"100%"},children:oA})})]},`${u.board.pcb_board_id}-${D}-${u.type}`)}),Array.from(h.entries()).map(([u,p])=>Z.jsxs("g",{children:[Z.jsx("line",{x1:p.x-Gn.ANCHOR_MARKER_SIZE,y1:p.y,x2:p.x+Gn.ANCHOR_MARKER_SIZE,y2:p.y,stroke:tE.OFFSET_LINE,strokeWidth:Gn.ANCHOR_MARKER_STROKE_WIDTH}),Z.jsx("line",{x1:p.x,y1:p.y-Gn.ANCHOR_MARKER_SIZE,x2:p.x,y2:p.y+Gn.ANCHOR_MARKER_SIZE,stroke:tE.OFFSET_LINE,strokeWidth:Gn.ANCHOR_MARKER_STROKE_WIDTH})]},`anchor-${u}`))]})})},$Nt=({elements:t,highlightedPrimitives:A,transform:e,containerWidth:i,containerHeight:o})=>{const n=t.filter(u=>Ate(u)),s=t.filter(u=>PN(u)),r=A.map(u=>PN(u._parent_pcb_component)?u._parent_pcb_component.pcb_component_id:PN(u._element)?u._element.pcb_component_id:null).filter(u=>!!u),g=(u,p)=>{if(p.has(u))return;p.add(u);const f=n.find(b=>b.pcb_group_id===u);f?.position_mode==="relative_to_group_anchor"&&f.positioned_relative_to_pcb_group_id&&g(f.positioned_relative_to_pcb_group_id,p)},a=new Set;if(r.forEach(u=>{const p=s.find(f=>f.pcb_component_id===u);p&&(p.position_mode==="relative_to_group_anchor"&&p.positioned_relative_to_pcb_group_id&&g(p.positioned_relative_to_pcb_group_id,a),p.pcb_group_id&&g(p.pcb_group_id,a))}),!al(u=>u.is_showing_group_anchor_offsets)&&r.length===0)return null;const c=s.map(u=>{if(u.position_mode==="relative_to_group_anchor"&&u.positioned_relative_to_pcb_group_id){const p=n.find(f=>f.pcb_group_id===u.positioned_relative_to_pcb_group_id);return p&&p.anchor_position?{component:u,parentGroup:p,type:"component"}:null}if(u.pcb_group_id){const p=n.find(f=>f.pcb_group_id===u.pcb_group_id);return p&&p.anchor_position?{component:u,parentGroup:p,type:"component"}:null}return null}).filter(u=>!!u),B=n.map(u=>{if(u.position_mode==="relative_to_group_anchor"&&u.positioned_relative_to_pcb_group_id){const p=n.find(f=>f.pcb_group_id===u.positioned_relative_to_pcb_group_id);if(p&&p.anchor_position&&u.center)return{group:u,parentGroup:p,type:"group"}}return null}).filter(u=>!!u),C=[...c,...B];if(C.length===0)return null;const Q=r.length===0,l={color:tE.LABEL_TEXT,mixBlendMode:"difference",pointerEvents:"none",fontSize:Gn.LABEL_FONT_SIZE,fontFamily:"monospace",fontWeight:"bold"},E=C.filter(u=>u.type==="component"?Q||r.includes(u.component.pcb_component_id):Q||a.has(u.group.pcb_group_id)||a.has(u.parentGroup.pcb_group_id));if(E.length===0)return null;const h=new Map;return E.forEach(u=>{if(!u.parentGroup.anchor_position)return;const p=Ce(e,u.parentGroup.anchor_position);h.set(u.parentGroup.pcb_group_id,p)}),Z.jsx("div",{style:{position:"absolute",left:0,top:0,width:i,height:o,overflow:"hidden",pointerEvents:"none",zIndex:rI.dimensionOverlay},children:Z.jsxs("svg",{style:{position:"absolute",left:0,top:0,pointerEvents:"none"},width:i,height:o,children:[E.map(u=>{const p=u.parentGroup.anchor_position;if(!p)return null;const f={x:p.x,y:p.y};let b=null,D,k,m;if(u.type==="component"){const gA=u.component.center;if(!gA)return null;b={x:gA.x,y:gA.y},D=u.component.pcb_component_id,k=u.component.display_offset_x,m=u.component.display_offset_y}else{if(!u.group.center)return null;b={x:u.group.center.x,y:u.group.center.y},D=u.group.pcb_group_id,k=u.group.display_offset_x,m=u.group.display_offset_y}const F=b.x-f.x,G=b.y-f.y,U=Ce(e,f),M=Ce(e,b),J=Math.abs(M.x-U.x),P=Math.abs(M.y-U.y),q=M.y<U.y,O=M.x>U.x,j=q?Gn.LABEL_OFFSET_ABOVE:Gn.LABEL_OFFSET_BELOW,eA=O?Gn.LABEL_OFFSET_RIGHT:Gn.LABEL_OFFSET_LEFT,nA=J>Gn.MIN_LINE_LENGTH_FOR_LABEL,IA=P>Gn.MIN_LINE_LENGTH_FOR_LABEL,iA=k??`Δx: ${F.toFixed(2)}mm`,oA=m??`Δy: ${G.toFixed(2)}mm`;return Z.jsxs("g",{children:[Z.jsx("line",{x1:U.x,y1:U.y,x2:M.x,y2:U.y,stroke:tE.OFFSET_LINE,strokeWidth:Gn.LINE_STROKE_WIDTH,strokeDasharray:Gn.LINE_DASH_PATTERN}),Z.jsx("line",{x1:M.x,y1:U.y,x2:M.x,y2:M.y,stroke:tE.OFFSET_LINE,strokeWidth:Gn.LINE_STROKE_WIDTH,strokeDasharray:Gn.LINE_DASH_PATTERN}),u.type==="component"?Z.jsx("circle",{cx:M.x,cy:M.y,r:Gn.COMPONENT_MARKER_RADIUS,fill:tE.COMPONENT_MARKER_FILL,stroke:tE.COMPONENT_MARKER_STROKE,strokeWidth:1}):Z.jsxs(Z.Fragment,{children:[Z.jsx("line",{x1:M.x-Gn.ANCHOR_MARKER_SIZE,y1:M.y,x2:M.x+Gn.ANCHOR_MARKER_SIZE,y2:M.y,stroke:tE.OFFSET_LINE,strokeWidth:Gn.ANCHOR_MARKER_STROKE_WIDTH}),Z.jsx("line",{x1:M.x,y1:M.y-Gn.ANCHOR_MARKER_SIZE,x2:M.x,y2:M.y+Gn.ANCHOR_MARKER_SIZE,stroke:tE.OFFSET_LINE,strokeWidth:Gn.ANCHOR_MARKER_STROKE_WIDTH})]}),nA&&Z.jsx("foreignObject",{x:Math.min(U.x,M.x),y:U.y+j,width:Math.abs(M.x-U.x),height:20,style:{overflow:"visible"},children:Z.jsx("div",{style:{...l,textAlign:"center"},children:iA})}),IA&&Z.jsx("foreignObject",{x:M.x+eA,y:Math.min(U.y,M.y),width:20,height:Math.abs(M.y-U.y),style:{overflow:"visible"},children:Z.jsx("div",{style:{...l,display:"flex",alignItems:"center",height:"100%"},children:oA})})]},`${u.parentGroup.pcb_group_id}-${D}-${u.type}`)}),Array.from(h.entries()).map(([u,p])=>Z.jsxs("g",{children:[Z.jsx("line",{x1:p.x-Gn.ANCHOR_MARKER_SIZE,y1:p.y,x2:p.x+Gn.ANCHOR_MARKER_SIZE,y2:p.y,stroke:tE.OFFSET_LINE,strokeWidth:Gn.ANCHOR_MARKER_STROKE_WIDTH}),Z.jsx("line",{x1:p.x,y1:p.y-Gn.ANCHOR_MARKER_SIZE,x2:p.x,y2:p.y+Gn.ANCHOR_MARKER_SIZE,stroke:tE.OFFSET_LINE,strokeWidth:Gn.ANCHOR_MARKER_STROKE_WIDTH})]},`anchor-${u}`))]})})},m5=t=>{if(t.length===0)return null;let A=t[0].x,e=t[0].y,i=t[0].x,o=t[0].y;for(const n of t)n.x<A&&(A=n.x),n.y<e&&(e=n.y),n.x>i&&(i=n.x),n.y>o&&(o=n.y);return{center:{x:(A+i)/2,y:(e+o)/2},width:i-A,height:o-e}},ete=(t,A)=>{if(A.length<3)return!1;let e=!1;for(let i=0,o=A.length-1;i<A.length;o=i++){const n=A[i].x,s=A[i].y,r=A[o].x,g=A[o].y;s>t.y!=g>t.y&&t.x<(r-n)*(t.y-s)/(g-s||Number.EPSILON)+n&&(e=!e)}return e},AMt=(t,A,e)=>{const i=[];for(const o of t){if(!o._element)continue;if("x1"in o&&o._element?.type==="pcb_trace"){const r=r_t({x:A.x,y:A.y},{x:o.x1,y:o.y1},{x:o.x2,y:o.y2}),g=o.width||.5,a=Math.max(g*25,2)/e.a;r<a&&i.push(o);continue}if(o.pcb_drawing_type==="polygon"){const r=o.points.map(a=>({x:Et.parse(a.x),y:Et.parse(a.y)})),g=m5(r);if(!g||A.x<g.center.x-g.width/2||A.x>g.center.x+g.width/2||A.y<g.center.y-g.height/2||A.y>g.center.y+g.height/2)continue;ete(A,r)&&i.push(o);continue}if(o.pcb_drawing_type==="polygon_with_arcs"){const r=o.brep_shape.outer_ring.vertices.map(a=>({x:Et.parse(a.x),y:Et.parse(a.y)})),g=m5(r);if(!g||A.x<g.center.x-g.width/2||A.x>g.center.x+g.width/2||A.y<g.center.y-g.height/2||A.y>g.center.y+g.height/2)continue;ete(A,r)&&i.push(o);continue}if(!("x"in o&&"y"in o))continue;let n=0,s=0;if("w"in o&&"h"in o)n=o.w,s=o.h;else if("r"in o)n=o.r*2,s=o.r*2;else if("rX"in o&&"rY"in o)n=o.rX*2,s=o.rY*2;else continue;Math.abs(o.x-A.x)<n/2&&Math.abs(o.y-A.y)<s/2&&i.push(o)}return i},eMt=({elements:t,children:A,transform:e,primitives:i,onMouseHoverOverPrimitives:o})=>{const[n,s]=$.useState([]),[r,g]=$.useState({x:0,y:0}),[a,{width:I,height:c}]=uL(),B=$.useMemo(()=>{const Q=[];for(const l of n){if(l._element?.type==="pcb_via"||l._element?.type==="pcb_component"||l?.layer==="drill")continue;let E=null,h=0,u=0;if(l.pcb_drawing_type==="polygon"){const D=m5(l.points);if(!D)continue;E=D.center,h=D.width,u=D.height}else if(l.pcb_drawing_type==="polygon_with_arcs"){const D=l.brep_shape.outer_ring.vertices.map(m=>({x:m.x,y:m.y})),k=m5(D);if(!k)continue;E=k.center,h=k.width,u=k.height}else"x"in l&&"y"in l&&(E={x:l.x,y:l.y},h="w"in l?l.w:"r"in l?l.r*2:"rX"in l&&"rY"in l?l.rX*2:0,u="h"in l?l.h:"r"in l?l.r*2:"rX"in l&&"rY"in l?l.rY*2:0);if(!E)continue;const p=Ce(e,E),f={w:h*e.a,h:u*e.a},b=Q.filter(D=>p.x===D.screen_x&&p.y===D.screen_y&&f.w===D.screen_w&&f.h===D.screen_h).length;Q.push({...l,x:E.x,y:E.y,w:h,h:u,screen_x:p.x,screen_y:p.y,screen_w:f.w,screen_h:f.h,same_space_index:b})}return Q},[n,e]),C=(Q,l,E,h)=>{g({x:Q,y:l});const u=Ce(Uy(E),{x:Q,y:l}),p=AMt(h,u,E);TNt(new Set(p.map(f=>f._pcb_drawing_object_id)),new Set(n.map(f=>f._pcb_drawing_object_id)))||(s(p),o(p))};return Z.jsxs("div",{ref:a,style:{position:"relative",width:"100%",height:"100%"},onMouseMove:Q=>{if(e){const l=Q.currentTarget.getBoundingClientRect(),E=Q.clientX-l.left,h=Q.clientY-l.top;C(E,h,e,i)}},onTouchStart:Q=>{if(e){const l=Q.touches[0],E=Q.currentTarget.getBoundingClientRect(),h=l.clientX-E.left,u=l.clientY-E.top;C(h,u,e,i)}},children:[A,Z.jsx(jNt,{elements:t,mousePos:r,highlightedPrimitives:B}),e&&Z.jsxs(Z.Fragment,{children:[Z.jsx(XNt,{elements:t,highlightedPrimitives:B,transform:e,containerWidth:I,containerHeight:c}),Z.jsx($Nt,{elements:t,highlightedPrimitives:B,transform:e,containerWidth:I,containerHeight:c})]})]})},tte=["rgb(255, 100, 100)","rgb(100, 255, 100)","rgb(100, 100, 255)","rgb(255, 255, 100)","rgb(255, 100, 255)","rgb(100, 255, 255)","rgb(255, 150, 100)","rgb(150, 100, 255)","rgb(100, 255, 150)","rgb(255, 100, 150)"],tMt=({children:t,transform:A=Zg(),elements:e=[],hoveredComponentIds:i=[]})=>{const[o,{width:n,height:s}]=uL(),r=$.useRef(null),{is_showing_pcb_groups:g,pcb_group_view_mode:a,is_showing_group_anchor_offsets:I}=al(c=>({is_showing_pcb_groups:c.is_showing_pcb_groups,pcb_group_view_mode:c.pcb_group_view_mode,is_showing_group_anchor_offsets:c.is_showing_group_anchor_offsets}));return $.useEffect(()=>{const c=r.current;if(!c||!n||!s)return;c.width=n,c.height=s;const B=c.getContext("2d");if(!B||(B.clearRect(0,0,n,s),!g))return;const C=e.filter(D=>D.type==="pcb_group"),Q=e.filter(D=>D.type==="pcb_component"),l=e.filter(D=>D.type==="source_group"),E=new Map(l.map(D=>[D.source_group_id,D])),h=C.filter(D=>{if(a==="all")return!0;if(!D.source_group_id)return!1;const k=E.get(D.source_group_id);return k?k.was_automatically_named!==!0:!1}),u=new Map;l.forEach(D=>{const k=D;if(k.parent_source_group_id){const m=u.get(k.parent_source_group_id)||[];m.push(D.source_group_id),u.set(k.parent_source_group_id,m)}});const p=D=>{const k=[],m=u.get(D)||[];for(const F of m)k.push(F),k.push(...p(F));return k},f=D=>{const k=l.find(m=>m.source_group_id===D);return k?.parent_source_group_id?1+f(k.parent_source_group_id):0},b=new Set;if(i.length>0)for(const D of Q){if(!i.includes(D.pcb_component_id))continue;const k=D.positioned_relative_to_pcb_group_id??D.pcb_group_id;k&&b.add(k)}h.forEach((D,k)=>{let m=Q.filter(SA=>SA.pcb_group_id===D.pcb_group_id);if(D.source_group_id){const SA=p(D.source_group_id),hA=C.filter(NA=>NA.source_group_id&&SA.includes(NA.source_group_id));for(const NA of hA){const FA=Q.filter(KA=>KA.pcb_group_id===NA.pcb_group_id);m=[...m,...FA]}}if(m.length===0)return;let F=1/0,G=1/0,U=-1/0,M=-1/0;if(m.forEach(SA=>{if(SA.center&&typeof SA.width=="number"&&typeof SA.height=="number"){const hA=SA.center.x-SA.width/2,NA=SA.center.x+SA.width/2,FA=SA.center.y+SA.height/2,KA=SA.center.y-SA.height/2;F=Math.min(F,hA),U=Math.max(U,NA),G=Math.min(G,KA),M=Math.max(M,FA)}}),F===1/0||U===-1/0)return;const J=D.source_group_id?f(D.source_group_id):0,P=D.source_group_id?p(D.source_group_id).length>0:!1,j=1+(P?.5:0);F-=j,U+=j,G-=j,M+=j;const eA=Ce(A,{x:F,y:M}),nA=Ce(A,{x:U,y:M}),IA=Ce(A,{x:F,y:G}),iA=Ce(A,{x:U,y:G}),oA=tte[k%tte.length];B.strokeStyle=oA,B.lineWidth=2;const gA=Math.max(4,Math.min(12,8*Math.abs(A.a))),lA=Math.max(2,Math.min(6,4*Math.abs(A.a))),xA=gA*(P?1.3:1),MA=lA;B.setLineDash([xA,MA]),B.beginPath(),B.moveTo(eA.x,eA.y),B.lineTo(nA.x,nA.y),B.lineTo(iA.x,iA.y),B.lineTo(IA.x,IA.y),B.closePath(),B.stroke();const vA=Math.max(8,Math.min(12,10*Math.abs(A.a))),QA=J==0||J==1?0:J*.11,kA=vA*(1-QA),bA=4,qA=D.name||`Group ${k+1}`;B.font=`${kA}px sans-serif`,B.setLineDash([]);const ge=B.measureText(qA).width+bA*2,DA=kA+bA*2,_A=eA.x-5,CA=eA.y-5,BA=3;if(B.fillStyle="rgba(0, 0, 0, 0.8)",B.beginPath(),B.roundRect(_A,CA-DA,ge,DA,BA),B.fill(),B.fillStyle=oA,B.textAlign="left",B.textBaseline="middle",B.fillText(qA,_A+bA,CA-DA/2),I&&b.has(D.pcb_group_id)&&!!D.anchor_position&&D.anchor_position){const SA=Array.isArray(D.anchor_position)?{x:D.anchor_position[0]??0,y:D.anchor_position[1]??0}:{x:D.anchor_position.x,y:D.anchor_position.y},hA=Ce(A,SA);B.strokeStyle="white",B.lineWidth=1.5,B.setLineDash([]);const NA=Math.max(4,Math.min(8,6*Math.abs(A.a)));B.beginPath(),B.moveTo(hA.x-NA,hA.y),B.lineTo(hA.x+NA,hA.y),B.stroke(),B.beginPath(),B.moveTo(hA.x,hA.y-NA),B.lineTo(hA.x,hA.y+NA),B.stroke()}})},[e,A,n,s,g,a,I,i]),Z.jsxs("div",{ref:o,style:{position:"relative",width:"100%",height:"100%"},children:[t,Z.jsx("canvas",{ref:r,style:{position:"absolute",top:0,left:0,pointerEvents:"none",zIndex:rI.pcbGroupOverlay,display:g?"block":"none"}})]})},iMt=({transform:t,soup:A,children:e})=>{const i=al(r=>r.is_showing_rats_nest),{netMap:o,idToNetMap:n}=$.useMemo(()=>Hee(A||[]),[A]),s=$.useMemo(()=>{if(!A||!i)return[];const r=B=>{const C=Ck(A)[B.replace(/_\d+$/,"")].get(B);return C&&"x"in C&&"y"in C?{x:C.x,y:C.y}:null},g=(B,C)=>{const Q=o[C]||[];let l=null,E=1/0;return Q.forEach(h=>{const u=r(h);if(u){const p=Math.sqrt((B.x-u.x)**2+(B.y-u.y)**2);p<E&&p>0&&(E=p,l=u)}}),l},a=Ck(A).pcb_port.list(),I=Ck(A).source_trace.list(),c=[];return a.forEach((B,C)=>{const Q=n[B.pcb_port_id];let l=!1;for(const u of I)u.connected_source_port_ids.includes(B.source_port_id)&&u.connected_source_net_ids.length>0&&(l=!0);if(!Q)return;const E={x:B.x,y:B.y},h=g(E,Q);h&&c.push({key:`${B.pcb_port_id}-${C}`,startPoint:E,endPoint:h,isInNet:l})}),c},[A,o,n,i]);return!A||!i?e:(t||(t=Zg()),Z.jsxs("div",{style:{position:"relative"},children:[e,Z.jsx("svg",{style:{position:"absolute",left:0,top:0,width:"100%",height:"100%",pointerEvents:"none",opacity:.5,zIndex:rI.ratsNestOverlay},children:s.map(({key:r,startPoint:g,endPoint:a,isInNet:I})=>{const c=Ce(t,g),B=Ce(t,a);return Z.jsx("line",{x1:c.x,y1:c.y,x2:B.x,y2:B.y,stroke:"white",strokeWidth:"1",strokeDasharray:I?"6,6":void 0},r)})})]}))},oMt={version:"1.11.284"},Qk=(t,A)=>{const e=al(i=>i.is_mouse_over_container);$.useEffect(()=>{if(!t||typeof A!="function")return;const i=o=>{const n=t.split("+"),s=n.includes("ctrl"),r=n.includes("shift"),g=n.includes("alt"),a=n.includes("meta"),I=n[n.length-1];e&&(!s||o.ctrlKey)&&(!r||o.shiftKey)&&(!g||o.altKey)&&(!a||o.metaKey)&&o.key.toLowerCase()===I.toLowerCase()&&(o.preventDefault(),A())};return window.addEventListener("keydown",i),()=>{window.removeEventListener("keydown",i)}},[t,A])},nMt=()=>{const[t,A]=$.useState(!1);return $.useEffect(()=>{const e=()=>{A(window.innerWidth<=768)};return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]),t},sMt=({name:t,selected:A,onClick:e})=>Z.jsxs("div",{className:qN`
5802
+ `,KNt=({children:t,transform:A=Zg(),elements:e})=>{const i=$.useRef(null),{isShowingDRCErrors:o,hoveredErrorId:n}=al(a=>({isShowingDRCErrors:a.is_showing_drc_errors,hoveredErrorId:a.hovered_error_id}));if(!e)return Z.jsx("div",{style:{position:"relative"},ref:i,children:t});const s=e.filter(a=>a.type==="pcb_trace_error"),r=e.filter(a=>a.type==="pcb_trace_error"&&a.message?.includes("Multiple components found with name")),g=new Map;return e.forEach(a=>{a.type==="pcb_port"&&g.set(a.pcb_port_id,a)}),Z.jsxs("div",{style:{position:"relative"},ref:i,children:[t,s.map((a,I)=>{const{pcb_port_ids:c,pcb_trace_id:B}=a,C=c?.[0]?g.get(c[0]):void 0,Q=c?.[1]?g.get(c[1]):void 0,l=e?Ck(e).pcb_trace.get(B):void 0,E=a.pcb_trace_error_id||`error_${I}_${a.error_type}_${a.message?.slice(0,20)}`,h=n===E;if(C&&Q){const u=Ce(A,{x:C.x,y:C.y}),p=Ce(A,{x:Q.x,y:Q.y}),f=!(isNaN(u.x)||isNaN(u.y)||isNaN(p.x)||isNaN(p.y)),b={x:(u.x+p.x)/2,y:(u.y+p.y)/2};if(isNaN(b.x)||isNaN(b.y))return null;const D=ZlA(b,i);return Z.jsxs($.Fragment,{children:[Z.jsx(YNt,{screenPort1:u,screenPort2:p,errorCenter:b,canLineBeDrawn:f,isHighlighted:h}),Z.jsx("div",{style:{position:"absolute",left:b.x-15,top:b.y-15,width:30,height:30,zIndex:rI.errorOverlay+5,cursor:"pointer",borderRadius:"50%"},onMouseEnter:k=>{const m=k.currentTarget.nextElementSibling;if(m){const F=m.querySelector(".error-message");F&&(F.style.opacity="1")}},onMouseLeave:k=>{if(!h){const m=k.currentTarget.nextElementSibling;if(m){const F=m.querySelector(".error-message");F&&(F.style.opacity="0")}}}}),Z.jsx("div",{style:{position:"absolute",zIndex:h?200:100,left:D.left,top:D.top,color:h?"#ff4444":"red",textAlign:"center",fontFamily:"sans-serif",fontSize:12,display:o||h?"flex":"none",flexDirection:"column",alignItems:"center",pointerEvents:"none",transform:D.transform},children:Z.jsx("div",{className:`error-message ${VlA}`,style:{opacity:h?1:0,border:`1px solid ${h?"#ff4444":"red"}`},children:a.message})})]},E)}if(l?.route&&(o||h)){const u=l.route.map(D=>Ce(A,{x:D.x,y:D.y}));if(u.some(D=>isNaN(D.x)||isNaN(D.y)))return null;const p=Math.floor(u.length/2),f=u[p],b=ZlA(f,i);return Z.jsxs($.Fragment,{children:[Z.jsx(JNt,{points:u,errorCenter:f,isHighlighted:h}),Z.jsx("div",{style:{position:"absolute",left:f.x-15,top:f.y-15,width:30,height:30,zIndex:rI.errorOverlay+5,cursor:"pointer",borderRadius:"50%"},onMouseEnter:D=>{const k=D.currentTarget.nextElementSibling;if(k){const m=k.querySelector(".error-message");m&&(m.style.opacity="1")}},onMouseLeave:D=>{if(!h){const k=D.currentTarget.nextElementSibling;if(k){const m=k.querySelector(".error-message");m&&(m.style.opacity="0")}}}}),Z.jsx("div",{style:{position:"absolute",zIndex:h?rI.errorOverlay+10:rI.errorOverlay+1,left:b.left,top:b.top,color:h?"#ff4444":"red",textAlign:"center",fontFamily:"sans-serif",fontSize:12,display:"flex",flexDirection:"column",alignItems:"center",pointerEvents:"none",transform:b.transform},children:Z.jsx("div",{className:`error-message ${VlA}`,style:{opacity:h?1:0,border:`1px solid ${h?"#ff4444":"red"}`},children:a.message})})]},E)}return null}),r.map((a,I)=>{const c=a.component_name||a.message?.match(/name "([^"]+)"/)?.[1];if(!c)return null;const B=e?.filter(l=>l.type==="source_component"&&l.name===c||l.type==="pcb_component"&&e?.find(E=>E.type==="source_component"&&E.source_component_id===l.source_component_id&&E.name===c))||[],C=a.pcb_trace_error_id||`error_${I}_${a.error_type}_${a.message?.slice(0,20)}`,Q=n===C;return!Q&&!o?null:B.map((l,E)=>{let h={x:0,y:0};if(l.type==="pcb_component")h=l.center||{x:0,y:0};else if(l.type==="source_component"){const F=e?.find(G=>G.type==="pcb_component"&&G.source_component_id===l.source_component_id);F&&F.type==="pcb_component"&&(h=F.center||{x:0,y:0})}const u=Ce(A,h);if(isNaN(u.x)||isNaN(u.y))return null;const p=Math.abs(A.a),k=Math.max(8,Math.min(30,.5*p)),m=ZlA(u,i);return Z.jsxs($.Fragment,{children:[Z.jsx("svg",{style:{position:"absolute",left:0,top:0,pointerEvents:"none",mixBlendMode:"difference",zIndex:rI.errorOverlay},width:"100%",height:"100%",children:Q?Z.jsx("polygon",{points:`${u.x},${u.y-k*1.25} ${u.x+k},${u.y} ${u.x},${u.y+k*1.25} ${u.x-k},${u.y}`,fill:"#ff4444"}):Z.jsx("circle",{cx:u.x,cy:u.y,r:k,fill:"none",stroke:Q?"#ff4444":"red",strokeWidth:Q?Math.max(2,k*.15):Math.max(1,k*.1),opacity:1})}),Z.jsx("div",{style:{position:"absolute",left:u.x-(k+10),top:u.y-(k+10),width:(k+10)*2,height:(k+10)*2,zIndex:rI.errorOverlay+5,cursor:"pointer",borderRadius:"50%"},onMouseEnter:F=>{const G=F.currentTarget.nextElementSibling;if(G){const U=G.querySelector(".error-message");U&&(U.style.opacity="1")}},onMouseLeave:F=>{if(!Q){const G=F.currentTarget.nextElementSibling;if(G){const U=G.querySelector(".error-message");U&&(U.style.opacity="0")}}}}),Z.jsx("div",{style:{position:"absolute",zIndex:Q?rI.errorOverlay+20:rI.errorOverlay+10,left:m.left,top:m.top,color:Q?"#ff4444":"red",textAlign:"center",fontFamily:"sans-serif",fontSize:12,display:o||Q?"flex":"none",flexDirection:"column",alignItems:"center",pointerEvents:"none",transform:m.transform},children:Z.jsx("div",{className:`error-message ${VlA}`,style:{opacity:Q?1:0,border:`1px solid ${Q?"#ff4444":"red"}`},children:a.message})})]},`${C}_${E}`)})})]})};function TNt(t,A){return t.size!==A.size?!1:Array.from(t).every(e=>A.has(e))}function qNt({primitiveElement:t,elements:A}){let e=t.trace_length?`${t.trace_length.toFixed(3)}`:"";const i=Ck(A).source_trace.get(t?.source_trace_id);if(i?.display_name&&(i?.max_length?e+=` / ${i.max_length}mm `:e+=" mm ",e+=`(${i.display_name})`),!e)return null;const o=t.trace_length&&i?.max_length&&t.trace_length>i.max_length;return{text:e,isOverLength:o}}function PNt(t){const{primitives:A,is_showing_multiple_traces_length:e,elements:i}=t,o=A.filter(g=>g._element.type==="pcb_trace"),n=i.filter(g=>g.type==="source_trace"),s=A.filter(g=>g._element.type!=="pcb_trace"),r=o.filter(g=>n.some(a=>g._element.type==="pcb_trace"&&g._element.source_trace_id===a.source_trace_id&&a.max_length!==void 0));if(!e)return[...s,...r];if(o.length>1){const g=o.reduce((a,I)=>{const c=a._element.trace_length;return I._element.trace_length<c?I:a},o[0]);return[...s,g]}return A}var ONt={position:"absolute",left:0,top:0,pointerEvents:"none",color:"red",fontFamily:"sans-serif",fontSize:12,textShadow:"0 0 2px black"},WNt=t=>{const{_element:A,_parent_pcb_component:e,_parent_source_component:i,_source_port:o}=t;switch(A.type){case"pcb_trace":return A.trace_length?`${A.trace_length.toFixed(3)}`:"";case"pcb_smtpad":case"pcb_plated_hole":{const n=[],s=Array.from(new Set((A.port_hints??[]).concat(o?.port_hints??[]))).filter(g=>!/^[0-9]+$/.test(g)).filter(g=>!g.includes("unnamed_")).sort((g,a)=>a.localeCompare(g)),r=i&&"name"in i&&i.name&&!i.name.includes("unnamed_")?i.name:null;return s.length>0?r?n.push(...s.map(g=>`${r}.${g}`)):n.push(...s):r&&n.push(r),n.join(", ")}default:return""}},ZNt={top:"red",bottom:"aqua"},VNt=({primitive:t,mousePos:A,elements:e})=>{const[i,o]=$.useState(!1),n=t._element;$.useEffect(()=>{setTimeout(()=>{o(!0)},100)},[]);const[s,r,g,a]=[t.screen_x,t.screen_y,t.screen_w,t.screen_h],I=t.same_space_index??0,c=26,B=ZNt[t?._element?.layer]??"red";let C=0;if(n.type==="pcb_smtpad"&&n?.shape==="rotated_rect"?C=n?.ccw_rotation??0:(n.type==="pcb_smtpad"&&(n?.shape==="pill"||n?.shape==="rotated_pill")&&"ccw_rotation"in t||n.type==="pcb_plated_hole"&&(n?.shape==="pill"||n?.shape==="oval")&&"ccw_rotation"in t)&&(C=n.ccw_rotation??0),n.type==="pcb_trace"){const E=qNt({primitiveElement:n,elements:e});if(!E)return null;const h=A.y-35;return Z.jsx("div",{style:{zIndex:rI.elementOverlay,position:"absolute",left:A.x,top:h,color:B,pointerEvents:"none",transform:"translateX(-50%)"},children:Z.jsx("div",{style:{backgroundColor:"#f2efcc",color:E.isOverLength?"red":"black",textShadow:"none",WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale",padding:"6px 6px",borderRadius:"6px",fontSize:"14px",minWidth:"45px",textAlign:"center",whiteSpace:"nowrap"},children:E.text})})}const Q=WNt(t);return Q.trim().length===0?null:Z.jsx("div",{style:{zIndex:rI.elementOverlay,position:"absolute",left:s-g/2-8,top:r-a/2-8,width:g+16,height:a+16,color:B,transform:`rotate(${-C}deg)`,transformOrigin:"center center"},children:Z.jsx("div",{style:{width:i?`calc(100% + ${c*2*I}px)`:"100%",height:i?`calc(100% + ${c*2*I}px)`:"100%",marginLeft:i?`${-c*I}px`:0,marginTop:i?`${-c*I}px`:0,border:`1px solid ${B}`,opacity:i||I===0?1:0,transition:"width 0.2s, height 0.2s, margin-left 0.2s, margin-top 0.2s, opacity 0.2s"},children:Z.jsx("div",{style:{position:"absolute",bottom:a+20+c*I,marginRight:i?`${-c*I}px`:0,marginBottom:i?0:-c*I,transition:"margin-right 0.2s, margin-bottom 0.2s",backgroundColor:"#f2efcc",color:"black",textShadow:"none",WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale",padding:"6px 6px",borderRadius:"6px",fontSize:"14px",transform:`rotate(${C}deg)`,minWidth:"45px",textAlign:"center"},children:Q})})})},jNt=({highlightedPrimitives:t,mousePos:A,elements:e})=>{const[i,o]=al(r=>[r.is_moving_component,r.is_showing_multiple_traces_length]),n=t.some(r=>r._element.type==="pcb_smtpad")&&t.some(r=>r._element.type==="pcb_trace");let s=t;return n&&(s=s.filter(r=>r._element.type==="pcb_smtpad")),s=PNt({primitives:s,is_showing_multiple_traces_length:o,elements:e}),Z.jsx("div",{style:ONt,children:!i&&s.map((r,g)=>Z.jsx(VNt,{primitive:r,mousePos:A,elements:e},g))})},Gn={MIN_LINE_LENGTH_FOR_LABEL:40,LABEL_OFFSET_ABOVE:2,LABEL_OFFSET_BELOW:-18,LABEL_OFFSET_RIGHT:8,LABEL_OFFSET_LEFT:-80,LINE_STROKE_WIDTH:1.5,LINE_DASH_PATTERN:"4,4",COMPONENT_MARKER_RADIUS:3,LABEL_FONT_SIZE:11,ANCHOR_MARKER_SIZE:6,ANCHOR_MARKER_STROKE_WIDTH:1.5},tE={OFFSET_LINE:"white",COMPONENT_MARKER_FILL:"#66ccff",COMPONENT_MARKER_STROKE:"white",LABEL_TEXT:"white"},PN=t=>t?.type==="pcb_component",Ate=t=>t?.type==="pcb_group",zNt=t=>t?.type==="pcb_board",XNt=({elements:t,highlightedPrimitives:A,transform:e,containerWidth:i,containerHeight:o})=>{const n=t.filter(u=>zNt(u)),s=t.filter(u=>PN(u)),r=t.filter(u=>Ate(u)),g=A.map(u=>PN(u._parent_pcb_component)?u._parent_pcb_component.pcb_component_id:PN(u._element)?u._element.pcb_component_id:null).filter(u=>!!u),a=new Set;if(g.forEach(u=>{const p=s.find(f=>f.pcb_component_id===u);p?.pcb_group_id&&a.add(p.pcb_group_id)}),!al(u=>u.is_showing_group_anchor_offsets)&&g.length===0)return null;const c=s.map(u=>{const p=u.positioned_relative_to_pcb_board_id;if(!p)return null;const f=n.find(b=>b.pcb_board_id===p);return f?{component:u,board:f,type:"component"}:null}).filter(u=>!!u),B=r.map(u=>{const p=u.positioned_relative_to_pcb_board_id;if(!p||!u.center)return null;const f=n.find(b=>b.pcb_board_id===p);return f?{group:u,board:f,type:"group"}:null}).filter(u=>!!u),C=[...c,...B];if(C.length===0)return null;const Q=g.length===0,l={color:tE.LABEL_TEXT,mixBlendMode:"difference",pointerEvents:"none",fontSize:Gn.LABEL_FONT_SIZE,fontFamily:"monospace",fontWeight:"bold"},E=C.filter(u=>u.type==="component"?Q||g.includes(u.component.pcb_component_id):Q||a.has(u.group.pcb_group_id));if(E.length===0)return null;const h=new Map;return Z.jsx("div",{style:{position:"absolute",left:0,top:0,width:i,height:o,overflow:"hidden",pointerEvents:"none",zIndex:rI.dimensionOverlay},children:Z.jsxs("svg",{style:{position:"absolute",left:0,top:0,pointerEvents:"none"},width:i,height:o,children:[E.map(u=>{const p=u.board.center,f=u.board.pcb_board_id;let b,D,k,m;if(u.type==="component")b=u.component.center,D=u.component.pcb_component_id,k=u.component.display_offset_x,m=u.component.display_offset_y;else{if(!u.group.center)return null;b={x:u.group.center.x,y:u.group.center.y},D=u.group.pcb_group_id,k=u.group.display_offset_x,m=u.group.display_offset_y}if(!h.has(f)){const gA=Ce(e,p);h.set(f,gA)}const F=h.get(f),G=Ce(e,b),U=b.x-p.x,M=b.y-p.y,J=Math.abs(G.x-F.x),P=Math.abs(G.y-F.y),q=G.y<F.y,O=G.x>F.x,j=q?Gn.LABEL_OFFSET_ABOVE:Gn.LABEL_OFFSET_BELOW,eA=O?Gn.LABEL_OFFSET_RIGHT:Gn.LABEL_OFFSET_LEFT,nA=J>Gn.MIN_LINE_LENGTH_FOR_LABEL,IA=P>Gn.MIN_LINE_LENGTH_FOR_LABEL,iA=k??`Board Δx: ${U.toFixed(2)}mm`,oA=m??`Board Δy: ${M.toFixed(2)}mm`;return Z.jsxs("g",{children:[Z.jsx("line",{x1:F.x,y1:F.y,x2:G.x,y2:F.y,stroke:tE.OFFSET_LINE,strokeWidth:Gn.LINE_STROKE_WIDTH,strokeDasharray:Gn.LINE_DASH_PATTERN}),Z.jsx("line",{x1:G.x,y1:F.y,x2:G.x,y2:G.y,stroke:tE.OFFSET_LINE,strokeWidth:Gn.LINE_STROKE_WIDTH,strokeDasharray:Gn.LINE_DASH_PATTERN}),u.type==="component"?Z.jsx("circle",{cx:G.x,cy:G.y,r:Gn.COMPONENT_MARKER_RADIUS,fill:tE.COMPONENT_MARKER_FILL,stroke:tE.COMPONENT_MARKER_STROKE,strokeWidth:1}):Z.jsxs(Z.Fragment,{children:[Z.jsx("line",{x1:G.x-Gn.ANCHOR_MARKER_SIZE,y1:G.y,x2:G.x+Gn.ANCHOR_MARKER_SIZE,y2:G.y,stroke:tE.OFFSET_LINE,strokeWidth:Gn.ANCHOR_MARKER_STROKE_WIDTH}),Z.jsx("line",{x1:G.x,y1:G.y-Gn.ANCHOR_MARKER_SIZE,x2:G.x,y2:G.y+Gn.ANCHOR_MARKER_SIZE,stroke:tE.OFFSET_LINE,strokeWidth:Gn.ANCHOR_MARKER_STROKE_WIDTH})]}),nA&&Z.jsx("foreignObject",{x:Math.min(F.x,G.x),y:F.y+j,width:Math.abs(G.x-F.x),height:20,style:{overflow:"visible"},children:Z.jsx("div",{style:{...l,textAlign:"center"},children:iA})}),IA&&Z.jsx("foreignObject",{x:G.x+eA,y:Math.min(F.y,G.y),width:20,height:Math.abs(G.y-F.y),style:{overflow:"visible"},children:Z.jsx("div",{style:{...l,display:"flex",alignItems:"center",height:"100%"},children:oA})})]},`${u.board.pcb_board_id}-${D}-${u.type}`)}),Array.from(h.entries()).map(([u,p])=>Z.jsxs("g",{children:[Z.jsx("line",{x1:p.x-Gn.ANCHOR_MARKER_SIZE,y1:p.y,x2:p.x+Gn.ANCHOR_MARKER_SIZE,y2:p.y,stroke:tE.OFFSET_LINE,strokeWidth:Gn.ANCHOR_MARKER_STROKE_WIDTH}),Z.jsx("line",{x1:p.x,y1:p.y-Gn.ANCHOR_MARKER_SIZE,x2:p.x,y2:p.y+Gn.ANCHOR_MARKER_SIZE,stroke:tE.OFFSET_LINE,strokeWidth:Gn.ANCHOR_MARKER_STROKE_WIDTH})]},`anchor-${u}`))]})})},$Nt=({elements:t,highlightedPrimitives:A,transform:e,containerWidth:i,containerHeight:o})=>{const n=t.filter(u=>Ate(u)),s=t.filter(u=>PN(u)),r=A.map(u=>PN(u._parent_pcb_component)?u._parent_pcb_component.pcb_component_id:PN(u._element)?u._element.pcb_component_id:null).filter(u=>!!u),g=(u,p)=>{if(p.has(u))return;p.add(u);const f=n.find(b=>b.pcb_group_id===u);f?.position_mode==="relative_to_group_anchor"&&f.positioned_relative_to_pcb_group_id&&g(f.positioned_relative_to_pcb_group_id,p)},a=new Set;if(r.forEach(u=>{const p=s.find(f=>f.pcb_component_id===u);p&&(p.position_mode==="relative_to_group_anchor"&&p.positioned_relative_to_pcb_group_id&&g(p.positioned_relative_to_pcb_group_id,a),p.pcb_group_id&&g(p.pcb_group_id,a))}),!al(u=>u.is_showing_group_anchor_offsets)&&r.length===0)return null;const c=s.map(u=>{if(u.position_mode==="relative_to_group_anchor"&&u.positioned_relative_to_pcb_group_id){const p=n.find(f=>f.pcb_group_id===u.positioned_relative_to_pcb_group_id);return p&&p.anchor_position?{component:u,parentGroup:p,type:"component"}:null}if(u.pcb_group_id){const p=n.find(f=>f.pcb_group_id===u.pcb_group_id);return p&&p.anchor_position?{component:u,parentGroup:p,type:"component"}:null}return null}).filter(u=>!!u),B=n.map(u=>{if(u.position_mode==="relative_to_group_anchor"&&u.positioned_relative_to_pcb_group_id){const p=n.find(f=>f.pcb_group_id===u.positioned_relative_to_pcb_group_id);if(p&&p.anchor_position&&u.center)return{group:u,parentGroup:p,type:"group"}}return null}).filter(u=>!!u),C=[...c,...B];if(C.length===0)return null;const Q=r.length===0,l={color:tE.LABEL_TEXT,mixBlendMode:"difference",pointerEvents:"none",fontSize:Gn.LABEL_FONT_SIZE,fontFamily:"monospace",fontWeight:"bold"},E=C.filter(u=>u.type==="component"?Q||r.includes(u.component.pcb_component_id):Q||a.has(u.group.pcb_group_id)||a.has(u.parentGroup.pcb_group_id));if(E.length===0)return null;const h=new Map;return E.forEach(u=>{if(!u.parentGroup.anchor_position)return;const p=Ce(e,u.parentGroup.anchor_position);h.set(u.parentGroup.pcb_group_id,p)}),Z.jsx("div",{style:{position:"absolute",left:0,top:0,width:i,height:o,overflow:"hidden",pointerEvents:"none",zIndex:rI.dimensionOverlay},children:Z.jsxs("svg",{style:{position:"absolute",left:0,top:0,pointerEvents:"none"},width:i,height:o,children:[E.map(u=>{const p=u.parentGroup.anchor_position;if(!p)return null;const f={x:p.x,y:p.y};let b=null,D,k,m;if(u.type==="component"){const gA=u.component.center;if(!gA)return null;b={x:gA.x,y:gA.y},D=u.component.pcb_component_id,k=u.component.display_offset_x,m=u.component.display_offset_y}else{if(!u.group.center)return null;b={x:u.group.center.x,y:u.group.center.y},D=u.group.pcb_group_id,k=u.group.display_offset_x,m=u.group.display_offset_y}const F=b.x-f.x,G=b.y-f.y,U=Ce(e,f),M=Ce(e,b),J=Math.abs(M.x-U.x),P=Math.abs(M.y-U.y),q=M.y<U.y,O=M.x>U.x,j=q?Gn.LABEL_OFFSET_ABOVE:Gn.LABEL_OFFSET_BELOW,eA=O?Gn.LABEL_OFFSET_RIGHT:Gn.LABEL_OFFSET_LEFT,nA=J>Gn.MIN_LINE_LENGTH_FOR_LABEL,IA=P>Gn.MIN_LINE_LENGTH_FOR_LABEL,iA=k??`Δx: ${F.toFixed(2)}mm`,oA=m??`Δy: ${G.toFixed(2)}mm`;return Z.jsxs("g",{children:[Z.jsx("line",{x1:U.x,y1:U.y,x2:M.x,y2:U.y,stroke:tE.OFFSET_LINE,strokeWidth:Gn.LINE_STROKE_WIDTH,strokeDasharray:Gn.LINE_DASH_PATTERN}),Z.jsx("line",{x1:M.x,y1:U.y,x2:M.x,y2:M.y,stroke:tE.OFFSET_LINE,strokeWidth:Gn.LINE_STROKE_WIDTH,strokeDasharray:Gn.LINE_DASH_PATTERN}),u.type==="component"?Z.jsx("circle",{cx:M.x,cy:M.y,r:Gn.COMPONENT_MARKER_RADIUS,fill:tE.COMPONENT_MARKER_FILL,stroke:tE.COMPONENT_MARKER_STROKE,strokeWidth:1}):Z.jsxs(Z.Fragment,{children:[Z.jsx("line",{x1:M.x-Gn.ANCHOR_MARKER_SIZE,y1:M.y,x2:M.x+Gn.ANCHOR_MARKER_SIZE,y2:M.y,stroke:tE.OFFSET_LINE,strokeWidth:Gn.ANCHOR_MARKER_STROKE_WIDTH}),Z.jsx("line",{x1:M.x,y1:M.y-Gn.ANCHOR_MARKER_SIZE,x2:M.x,y2:M.y+Gn.ANCHOR_MARKER_SIZE,stroke:tE.OFFSET_LINE,strokeWidth:Gn.ANCHOR_MARKER_STROKE_WIDTH})]}),nA&&Z.jsx("foreignObject",{x:Math.min(U.x,M.x),y:U.y+j,width:Math.abs(M.x-U.x),height:20,style:{overflow:"visible"},children:Z.jsx("div",{style:{...l,textAlign:"center"},children:iA})}),IA&&Z.jsx("foreignObject",{x:M.x+eA,y:Math.min(U.y,M.y),width:20,height:Math.abs(M.y-U.y),style:{overflow:"visible"},children:Z.jsx("div",{style:{...l,display:"flex",alignItems:"center",height:"100%"},children:oA})})]},`${u.parentGroup.pcb_group_id}-${D}-${u.type}`)}),Array.from(h.entries()).map(([u,p])=>Z.jsxs("g",{children:[Z.jsx("line",{x1:p.x-Gn.ANCHOR_MARKER_SIZE,y1:p.y,x2:p.x+Gn.ANCHOR_MARKER_SIZE,y2:p.y,stroke:tE.OFFSET_LINE,strokeWidth:Gn.ANCHOR_MARKER_STROKE_WIDTH}),Z.jsx("line",{x1:p.x,y1:p.y-Gn.ANCHOR_MARKER_SIZE,x2:p.x,y2:p.y+Gn.ANCHOR_MARKER_SIZE,stroke:tE.OFFSET_LINE,strokeWidth:Gn.ANCHOR_MARKER_STROKE_WIDTH})]},`anchor-${u}`))]})})},m5=t=>{if(t.length===0)return null;let A=t[0].x,e=t[0].y,i=t[0].x,o=t[0].y;for(const n of t)n.x<A&&(A=n.x),n.y<e&&(e=n.y),n.x>i&&(i=n.x),n.y>o&&(o=n.y);return{center:{x:(A+i)/2,y:(e+o)/2},width:i-A,height:o-e}},ete=(t,A)=>{if(A.length<3)return!1;let e=!1;for(let i=0,o=A.length-1;i<A.length;o=i++){const n=A[i].x,s=A[i].y,r=A[o].x,g=A[o].y;s>t.y!=g>t.y&&t.x<(r-n)*(t.y-s)/(g-s||Number.EPSILON)+n&&(e=!e)}return e},AMt=(t,A,e)=>{const i=[];for(const o of t){if(!o._element)continue;if("x1"in o&&o._element?.type==="pcb_trace"){const r=r_t({x:A.x,y:A.y},{x:o.x1,y:o.y1},{x:o.x2,y:o.y2}),g=o.width||.5,a=Math.max(g*25,2)/e.a;r<a&&i.push(o);continue}if(o.pcb_drawing_type==="polygon"){const r=o.points.map(a=>({x:Et.parse(a.x),y:Et.parse(a.y)})),g=m5(r);if(!g||A.x<g.center.x-g.width/2||A.x>g.center.x+g.width/2||A.y<g.center.y-g.height/2||A.y>g.center.y+g.height/2)continue;ete(A,r)&&i.push(o);continue}if(o.pcb_drawing_type==="polygon_with_arcs"){const r=o.brep_shape.outer_ring.vertices.map(a=>({x:Et.parse(a.x),y:Et.parse(a.y)})),g=m5(r);if(!g||A.x<g.center.x-g.width/2||A.x>g.center.x+g.width/2||A.y<g.center.y-g.height/2||A.y>g.center.y+g.height/2)continue;ete(A,r)&&i.push(o);continue}if(!("x"in o&&"y"in o))continue;let n=0,s=0;if("w"in o&&"h"in o)n=o.w,s=o.h;else if("r"in o)n=o.r*2,s=o.r*2;else if("rX"in o&&"rY"in o)n=o.rX*2,s=o.rY*2;else continue;Math.abs(o.x-A.x)<n/2&&Math.abs(o.y-A.y)<s/2&&i.push(o)}return i},eMt=({elements:t,children:A,transform:e,primitives:i,onMouseHoverOverPrimitives:o})=>{const[n,s]=$.useState([]),[r,g]=$.useState({x:0,y:0}),[a,{width:I,height:c}]=uL(),B=$.useMemo(()=>{const Q=[];for(const l of n){if(l._element?.type==="pcb_via"||l._element?.type==="pcb_component"||l?.layer==="drill")continue;let E=null,h=0,u=0;if(l.pcb_drawing_type==="polygon"){const D=m5(l.points);if(!D)continue;E=D.center,h=D.width,u=D.height}else if(l.pcb_drawing_type==="polygon_with_arcs"){const D=l.brep_shape.outer_ring.vertices.map(m=>({x:m.x,y:m.y})),k=m5(D);if(!k)continue;E=k.center,h=k.width,u=k.height}else"x"in l&&"y"in l&&(E={x:l.x,y:l.y},h="w"in l?l.w:"r"in l?l.r*2:"rX"in l&&"rY"in l?l.rX*2:0,u="h"in l?l.h:"r"in l?l.r*2:"rX"in l&&"rY"in l?l.rY*2:0);if(!E)continue;const p=Ce(e,E),f={w:h*e.a,h:u*e.a},b=Q.filter(D=>p.x===D.screen_x&&p.y===D.screen_y&&f.w===D.screen_w&&f.h===D.screen_h).length;Q.push({...l,x:E.x,y:E.y,w:h,h:u,screen_x:p.x,screen_y:p.y,screen_w:f.w,screen_h:f.h,same_space_index:b})}return Q},[n,e]),C=(Q,l,E,h)=>{g({x:Q,y:l});const u=Ce(Uy(E),{x:Q,y:l}),p=AMt(h,u,E);TNt(new Set(p.map(f=>f._pcb_drawing_object_id)),new Set(n.map(f=>f._pcb_drawing_object_id)))||(s(p),o(p))};return Z.jsxs("div",{ref:a,style:{position:"relative",width:"100%",height:"100%"},onMouseMove:Q=>{if(e){const l=Q.currentTarget.getBoundingClientRect(),E=Q.clientX-l.left,h=Q.clientY-l.top;C(E,h,e,i)}},onTouchStart:Q=>{if(e){const l=Q.touches[0],E=Q.currentTarget.getBoundingClientRect(),h=l.clientX-E.left,u=l.clientY-E.top;C(h,u,e,i)}},children:[A,Z.jsx(jNt,{elements:t,mousePos:r,highlightedPrimitives:B}),e&&Z.jsxs(Z.Fragment,{children:[Z.jsx(XNt,{elements:t,highlightedPrimitives:B,transform:e,containerWidth:I,containerHeight:c}),Z.jsx($Nt,{elements:t,highlightedPrimitives:B,transform:e,containerWidth:I,containerHeight:c})]})]})},tte=["rgb(255, 100, 100)","rgb(100, 255, 100)","rgb(100, 100, 255)","rgb(255, 255, 100)","rgb(255, 100, 255)","rgb(100, 255, 255)","rgb(255, 150, 100)","rgb(150, 100, 255)","rgb(100, 255, 150)","rgb(255, 100, 150)"],tMt=({children:t,transform:A=Zg(),elements:e=[],hoveredComponentIds:i=[]})=>{const[o,{width:n,height:s}]=uL(),r=$.useRef(null),{is_showing_pcb_groups:g,pcb_group_view_mode:a,is_showing_group_anchor_offsets:I}=al(c=>({is_showing_pcb_groups:c.is_showing_pcb_groups,pcb_group_view_mode:c.pcb_group_view_mode,is_showing_group_anchor_offsets:c.is_showing_group_anchor_offsets}));return $.useEffect(()=>{const c=r.current;if(!c||!n||!s)return;c.width=n,c.height=s;const B=c.getContext("2d");if(!B||(B.clearRect(0,0,n,s),!g))return;const C=e.filter(D=>D.type==="pcb_group"),Q=e.filter(D=>D.type==="pcb_component"),l=e.filter(D=>D.type==="source_group"),E=new Map(l.map(D=>[D.source_group_id,D])),h=C.filter(D=>{if(a==="all")return!0;if(!D.source_group_id)return!1;const k=E.get(D.source_group_id);return k?k.was_automatically_named!==!0:!1}),u=new Map;l.forEach(D=>{const k=D;if(k.parent_source_group_id){const m=u.get(k.parent_source_group_id)||[];m.push(D.source_group_id),u.set(k.parent_source_group_id,m)}});const p=D=>{const k=[],m=u.get(D)||[];for(const F of m)k.push(F),k.push(...p(F));return k},f=D=>{const k=l.find(m=>m.source_group_id===D);return k?.parent_source_group_id?1+f(k.parent_source_group_id):0},b=new Set;if(i.length>0)for(const D of Q){if(!i.includes(D.pcb_component_id))continue;const k=D.positioned_relative_to_pcb_group_id??D.pcb_group_id;k&&b.add(k)}h.forEach((D,k)=>{let m=Q.filter(SA=>SA.pcb_group_id===D.pcb_group_id);if(D.source_group_id){const SA=p(D.source_group_id),hA=C.filter(NA=>NA.source_group_id&&SA.includes(NA.source_group_id));for(const NA of hA){const FA=Q.filter(KA=>KA.pcb_group_id===NA.pcb_group_id);m=[...m,...FA]}}if(m.length===0)return;let F=1/0,G=1/0,U=-1/0,M=-1/0;if(m.forEach(SA=>{if(SA.center&&typeof SA.width=="number"&&typeof SA.height=="number"){const hA=SA.center.x-SA.width/2,NA=SA.center.x+SA.width/2,FA=SA.center.y+SA.height/2,KA=SA.center.y-SA.height/2;F=Math.min(F,hA),U=Math.max(U,NA),G=Math.min(G,KA),M=Math.max(M,FA)}}),F===1/0||U===-1/0)return;const J=D.source_group_id?f(D.source_group_id):0,P=D.source_group_id?p(D.source_group_id).length>0:!1,j=1+(P?.5:0);F-=j,U+=j,G-=j,M+=j;const eA=Ce(A,{x:F,y:M}),nA=Ce(A,{x:U,y:M}),IA=Ce(A,{x:F,y:G}),iA=Ce(A,{x:U,y:G}),oA=tte[k%tte.length];B.strokeStyle=oA,B.lineWidth=2;const gA=Math.max(4,Math.min(12,8*Math.abs(A.a))),lA=Math.max(2,Math.min(6,4*Math.abs(A.a))),xA=gA*(P?1.3:1),MA=lA;B.setLineDash([xA,MA]),B.beginPath(),B.moveTo(eA.x,eA.y),B.lineTo(nA.x,nA.y),B.lineTo(iA.x,iA.y),B.lineTo(IA.x,IA.y),B.closePath(),B.stroke();const vA=Math.max(8,Math.min(12,10*Math.abs(A.a))),QA=J==0||J==1?0:J*.11,kA=vA*(1-QA),bA=4,qA=D.name||`Group ${k+1}`;B.font=`${kA}px sans-serif`,B.setLineDash([]);const ge=B.measureText(qA).width+bA*2,DA=kA+bA*2,_A=eA.x-5,CA=eA.y-5,BA=3;if(B.fillStyle="rgba(0, 0, 0, 0.8)",B.beginPath(),B.roundRect(_A,CA-DA,ge,DA,BA),B.fill(),B.fillStyle=oA,B.textAlign="left",B.textBaseline="middle",B.fillText(qA,_A+bA,CA-DA/2),I&&b.has(D.pcb_group_id)&&!!D.anchor_position&&D.anchor_position){const SA=Array.isArray(D.anchor_position)?{x:D.anchor_position[0]??0,y:D.anchor_position[1]??0}:{x:D.anchor_position.x,y:D.anchor_position.y},hA=Ce(A,SA);B.strokeStyle="white",B.lineWidth=1.5,B.setLineDash([]);const NA=Math.max(4,Math.min(8,6*Math.abs(A.a)));B.beginPath(),B.moveTo(hA.x-NA,hA.y),B.lineTo(hA.x+NA,hA.y),B.stroke(),B.beginPath(),B.moveTo(hA.x,hA.y-NA),B.lineTo(hA.x,hA.y+NA),B.stroke()}})},[e,A,n,s,g,a,I,i]),Z.jsxs("div",{ref:o,style:{position:"relative",width:"100%",height:"100%"},children:[t,Z.jsx("canvas",{ref:r,style:{position:"absolute",top:0,left:0,pointerEvents:"none",zIndex:rI.pcbGroupOverlay,display:g?"block":"none"}})]})},iMt=({transform:t,soup:A,children:e})=>{const i=al(r=>r.is_showing_rats_nest),{netMap:o,idToNetMap:n}=$.useMemo(()=>Hee(A||[]),[A]),s=$.useMemo(()=>{if(!A||!i)return[];const r=B=>{const C=Ck(A)[B.replace(/_\d+$/,"")].get(B);return C&&"x"in C&&"y"in C?{x:C.x,y:C.y}:null},g=(B,C)=>{const Q=o[C]||[];let l=null,E=1/0;return Q.forEach(h=>{const u=r(h);if(u){const p=Math.sqrt((B.x-u.x)**2+(B.y-u.y)**2);p<E&&p>0&&(E=p,l=u)}}),l},a=Ck(A).pcb_port.list(),I=Ck(A).source_trace.list(),c=[];return a.forEach((B,C)=>{const Q=n[B.pcb_port_id];let l=!1;for(const u of I)u.connected_source_port_ids.includes(B.source_port_id)&&u.connected_source_net_ids.length>0&&(l=!0);if(!Q)return;const E={x:B.x,y:B.y},h=g(E,Q);h&&c.push({key:`${B.pcb_port_id}-${C}`,startPoint:E,endPoint:h,isInNet:l})}),c},[A,o,n,i]);return!A||!i?e:(t||(t=Zg()),Z.jsxs("div",{style:{position:"relative"},children:[e,Z.jsx("svg",{style:{position:"absolute",left:0,top:0,width:"100%",height:"100%",pointerEvents:"none",opacity:.5,zIndex:rI.ratsNestOverlay},children:s.map(({key:r,startPoint:g,endPoint:a,isInNet:I})=>{const c=Ce(t,g),B=Ce(t,a);return Z.jsx("line",{x1:c.x,y1:c.y,x2:B.x,y2:B.y,stroke:"white",strokeWidth:"1",strokeDasharray:I?"6,6":void 0},r)})})]}))},oMt={version:"1.11.285"},Qk=(t,A)=>{const e=al(i=>i.is_mouse_over_container);$.useEffect(()=>{if(!t||typeof A!="function")return;const i=o=>{const n=t.split("+"),s=n.includes("ctrl"),r=n.includes("shift"),g=n.includes("alt"),a=n.includes("meta"),I=n[n.length-1];e&&(!s||o.ctrlKey)&&(!r||o.shiftKey)&&(!g||o.altKey)&&(!a||o.metaKey)&&o.key.toLowerCase()===I.toLowerCase()&&(o.preventDefault(),A())};return window.addEventListener("keydown",i),()=>{window.removeEventListener("keydown",i)}},[t,A])},nMt=()=>{const[t,A]=$.useState(!1);return $.useEffect(()=>{const e=()=>{A(window.innerWidth<=768)};return e(),window.addEventListener("resize",e),()=>window.removeEventListener("resize",e)},[]),t},sMt=({name:t,selected:A,onClick:e})=>Z.jsxs("div",{className:qN`
5803
5803
  margin-top: 2px;
5804
5804
  padding: 4px;
5805
5805
  padding-left: 8px;
@@ -5884,7 +5884,7 @@ $1`).replace(/>(\s*)(?=<!--\s*\/)/g,"> ")}}});function _ee(t,A,e){if(!A||!e)retu
5884
5884
  * Copyright (c) 2013-2015, 2017, Jon Schlinkert.
5885
5885
  * Released under the MIT License.
5886
5886
  *)
5887
- */const CMt=({containerClassName:t,...A})=>{const e=$.useRef(null),[i,o]=$.useState(620);return $.useLayoutEffect(()=>{const n=()=>{if(e.current){const r=e.current.clientHeight,g=window.innerHeight;o(Math.min(Math.max(r,620),g))}};n();const s=new ResizeObserver(n);return e.current&&s.observe(e.current),window.addEventListener("resize",n),()=>{s.disconnect(),window.removeEventListener("resize",n)}},[]),Z.jsx("div",{ref:e,className:t||"rf-w-full rf-h-full",children:Z.jsx(BMt,{...A,height:i})})},QMt='*,: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.18 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-feature-settings:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]:where(:not([hidden=until-found])){display:none}:root{--radius:0.5rem}.rf-pointer-events-none{pointer-events:none}.rf-invisible{visibility:hidden}.rf-fixed{position:fixed}.rf-absolute{position:absolute}.rf-relative{position:relative}.rf-inset-0{inset:0}.-rf-left-2{left:-.5rem}.-rf-right-10{right:-2.5rem}.-rf-right-2{right:-.5rem}.-rf-right-4{right:-1rem}.-rf-right-6{right:-1.5rem}.-rf-right-7{right:-1.75rem}.-rf-right-8{right:-2rem}.-rf-right-9{right:-2.25rem}.rf-bottom-full{bottom:100%}.rf-left-0{left:0}.rf-left-1{left:.25rem}.rf-left-1\\/2{left:50%}.rf-left-2{left:.5rem}.rf-left-\\[50\\%\\]{left:50%}.rf-right-0{right:0}.rf-right-1{right:.25rem}.rf-right-4{right:1rem}.rf-right-\\[4px\\]{right:4px}.rf-top-0{top:0}.rf-top-1{top:.25rem}.rf-top-2{top:.5rem}.rf-top-2\\.5{top:.625rem}.rf-top-\\[50\\%\\]{top:50%}.rf-top-\\[6px\\]{top:6px}.\\!rf-z-\\[101\\]{z-index:101!important}.\\!rf-z-\\[200\\]{z-index:200!important}.rf-z-10{z-index:10}.rf-z-50{z-index:50}.rf-z-\\[100\\]{z-index:100}.rf-z-\\[101\\]{z-index:101}.rf-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-0{margin-bottom:0}.rf-mb-0\\.5{margin-bottom:.125rem}.rf-mb-1{margin-bottom:.25rem}.rf-mb-12{margin-bottom:3rem}.rf-mb-2{margin-bottom:.5rem}.rf-mb-3{margin-bottom:.75rem}.rf-mb-4{margin-bottom:1rem}.rf-mb-6{margin-bottom:1.5rem}.rf-mb-8{margin-bottom:2rem}.rf-ml-1{margin-left:.25rem}.rf-ml-2{margin-left:.5rem}.rf-ml-6{margin-left:1.5rem}.rf-ml-auto{margin-left:auto}.rf-mr-1{margin-right:.25rem}.rf-mr-2{margin-right:.5rem}.rf-mr-4{margin-right:1rem}.rf-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-20{height:5rem}.rf-h-24{height:6rem}.rf-h-3{height:.75rem}.rf-h-3\\.5{height:.875rem}.rf-h-4{height:1rem}.rf-h-5{height:1.25rem}.rf-h-6{height:1.5rem}.rf-h-60{height:15rem}.rf-h-64{height:16rem}.rf-h-7{height:1.75rem}.rf-h-8{height:2rem}.rf-h-9{height:2.25rem}.rf-h-\\[400px\\]{height:400px}.rf-h-\\[calc\\(100vh-52px\\)\\]{height:calc(100vh - 52px)}.rf-h-\\[calc\\(100vh-60px\\)\\]{height:calc(100vh - 60px)}.rf-h-\\[var\\(--radix-select-trigger-height\\)\\]{height:var(--radix-select-trigger-height)}.rf-h-auto{height:auto}.rf-h-fit{height:-moz-fit-content;height:fit-content}.rf-h-full{height:100%}.rf-h-px{height:1px}.rf-h-screen{height:100vh}.\\!rf-max-h-\\[40vh\\]{max-height:40vh!important}.rf-max-h-16{max-height:4rem}.rf-max-h-20{max-height:5rem}.rf-max-h-24{max-height:6rem}.rf-max-h-28{max-height:7rem}.rf-max-h-32{max-height:8rem}.rf-max-h-96{max-height:24rem}.rf-max-h-\\[120px\\]{max-height:120px}.rf-max-h-\\[150px\\]{max-height:150px}.rf-max-h-\\[200px\\]{max-height:200px}.rf-max-h-\\[300px\\]{max-height:300px}.rf-max-h-\\[70vh\\]{max-height:70vh}.rf-max-h-\\[90vh\\]{max-height:90vh}.rf-max-h-full{max-height:100%}.rf-min-h-0{min-height:0}.rf-min-h-\\[100px\\]{min-height:100px}.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-min-h-full{min-height:100%}.\\!rf-w-2{width:.5rem!important}.\\!rf-w-2\\.5{width:.625rem!important}.\\!rf-w-\\[95vw\\]{width:95vw!important}.rf-w-1{width:.25rem}.rf-w-10{width:2.5rem}.rf-w-11{width:2.75rem}.rf-w-11\\/12{width:91.666667%}.rf-w-12{width:3rem}.rf-w-16{width:4rem}.rf-w-2{width:.5rem}.rf-w-2\\.5{width:.625rem}.rf-w-20{width:5rem}.rf-w-24{width:6rem}.rf-w-28{width:7rem}.rf-w-3{width:.75rem}.rf-w-3\\.5{width:.875rem}.rf-w-32{width:8rem}.rf-w-4{width:1rem}.rf-w-40{width:10rem}.rf-w-48{width:12rem}.rf-w-5{width:1.25rem}.rf-w-6{width:1.5rem}.rf-w-64{width:16rem}.rf-w-72{width:18rem}.rf-w-8{width:2rem}.rf-w-80{width:20rem}.rf-w-9{width:2.25rem}.rf-w-96{width:24rem}.rf-w-fit{width:-moz-fit-content;width:fit-content}.rf-w-full{width:100%}.rf-w-screen{width:100vw}.rf-min-w-0{min-width:0}.rf-min-w-10{min-width:2.5rem}.rf-min-w-16{min-width:4rem}.rf-min-w-32{min-width:8rem}.rf-min-w-80{min-width:20rem}.rf-min-w-96{min-width:24rem}.rf-min-w-\\[148px\\]{min-width:148px}.rf-min-w-\\[600px\\]{min-width:600px}.rf-min-w-\\[8rem\\]{min-width:8rem}.rf-min-w-\\[var\\(--radix-select-trigger-width\\)\\]{min-width:var(--radix-select-trigger-width)}.\\!rf-max-w-\\[95vw\\]{max-width:95vw!important}.rf-max-w-2xl{max-width:42rem}.rf-max-w-3xl{max-width:48rem}.rf-max-w-4xl{max-width:56rem}.rf-max-w-5xl{max-width:64rem}.rf-max-w-64{max-width:16rem}.rf-max-w-96{max-width:24rem}.rf-max-w-\\[1000px\\]{max-width:1000px}.rf-max-w-\\[150px\\]{max-width:150px}.rf-max-w-\\[200px\\]{max-width:200px}.rf-max-w-\\[40\\%\\]{max-width:40%}.rf-max-w-\\[600px\\]{max-width:600px}.rf-max-w-full{max-width:100%}.rf-max-w-lg{max-width:32rem}.rf-max-w-md{max-width:28rem}.rf-max-w-none{max-width:none}.rf-max-w-xl{max-width:36rem}.rf-max-w-xs{max-width:20rem}.rf-flex-1{flex:1 1 0%}.rf-flex-shrink-0,.rf-shrink-0{flex-shrink:0}.rf-flex-grow{flex-grow:1}.rf-table-auto{table-layout:auto}.rf-origin-\\[--radix-popover-content-transform-origin\\]{transform-origin:var(--radix-popover-content-transform-origin)}.-rf-translate-x-1{--tw-translate-x:-0.25rem}.-rf-translate-x-1,.-rf-translate-x-1\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rf-translate-x-1\\/2{--tw-translate-x:-50%}.-rf-translate-y-1{--tw-translate-y:-0.25rem}.-rf-translate-y-1,.rf--translate-x-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rf--translate-x-1{--tw-translate-x:-0.25rem}.rf--translate-x-1\\/2{--tw-translate-x:-50%}.rf--translate-x-1\\/2,.rf--translate-y-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-rotate-90{--tw-rotate:90deg}.rf-rotate-90,.rf-transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes rf-pulse{50%{opacity:.5}}.rf-animate-pulse{animation:rf-pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes rf-spin{to{transform:rotate(1turn)}}.rf-animate-spin{animation:rf-spin 1s linear infinite}.rf-cursor-default{cursor:default}.rf-cursor-not-allowed{cursor:not-allowed}.rf-cursor-pointer{cursor:pointer}.rf-select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.rf-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.rf-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.rf-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.rf-flex-row{flex-direction:row}.rf-flex-col{flex-direction:column}.rf-flex-col-reverse{flex-direction:column-reverse}.rf-flex-wrap{flex-wrap:wrap}.rf-place-content-center{place-content:center}.rf-place-items-center{place-items:center}.rf-items-start{align-items:flex-start}.rf-items-end{align-items:flex-end}.rf-items-center{align-items:center}.rf-items-baseline{align-items:baseline}.rf-items-stretch{align-items:stretch}.rf-justify-end{justify-content:flex-end}.rf-justify-center{justify-content:center}.rf-justify-between{justify-content:space-between}.rf-gap-0{gap:0}.rf-gap-1{gap:.25rem}.rf-gap-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-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.rf-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.rf-space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.rf-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.rf-space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.rf-divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.rf-overflow-auto{overflow:auto}.\\!rf-overflow-hidden{overflow:hidden!important}.rf-overflow-hidden{overflow:hidden}.rf-overflow-visible{overflow:visible}.rf-overflow-x-auto{overflow-x:auto}.\\!rf-overflow-y-auto{overflow-y:auto!important}.rf-overflow-y-auto{overflow-y:auto}.rf-overflow-x-hidden{overflow-x:hidden}.rf-overflow-x-clip{overflow-x:clip}.rf-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rf-whitespace-normal{white-space:normal}.rf-whitespace-nowrap{white-space:nowrap}.rf-whitespace-pre-wrap{white-space:pre-wrap}.rf-text-nowrap{text-wrap:nowrap}.rf-break-words{overflow-wrap:break-word}.rf-break-all{word-break:break-all}.rf-rounded{border-radius:.25rem}.rf-rounded-2xl{border-radius:1rem}.rf-rounded-full{border-radius:9999px}.rf-rounded-lg{border-radius:var(--radius)}.rf-rounded-md{border-radius:calc(var(--radius) - 2px)}.rf-rounded-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-l-2{border-left-width:2px}.rf-border-l-4{border-left-width:4px}.rf-border-t{border-top-width:1px}.rf-border-none{border-style:none}.rf-border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}.rf-border-blue-300{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity,1))}.rf-border-blue-400{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity,1))}.rf-border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.rf-border-blue-600{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity,1))}.rf-border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.rf-border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.rf-border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.rf-border-green-400{--tw-border-opacity:1;border-color:rgb(74 222 128/var(--tw-border-opacity,1))}.rf-border-input{border-color:hsl(var(--input))}.rf-border-neutral-200{--tw-border-opacity:1;border-color:rgb(229 229 229/var(--tw-border-opacity,1))}.rf-border-orange-100{--tw-border-opacity:1;border-color:rgb(255 237 213/var(--tw-border-opacity,1))}.rf-border-orange-200{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity,1))}.rf-border-orange-500{--tw-border-opacity:1;border-color:rgb(249 115 22/var(--tw-border-opacity,1))}.rf-border-primary{border-color:hsl(var(--primary))}.rf-border-red-100{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity,1))}.rf-border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.rf-border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity,1))}.rf-border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.rf-border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity,1))}.rf-border-red-700{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity,1))}.rf-border-red-800{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity,1))}.rf-border-zinc-200{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity,1))}.rf-border-zinc-900{--tw-border-opacity:1;border-color:rgb(24 24 27/var(--tw-border-opacity,1))}.rf-border-t-blue-600{--tw-border-opacity:1;border-top-color:rgb(37 99 235/var(--tw-border-opacity,1))}.rf-bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}.rf-bg-amber-50\\/30{background-color:rgba(255,251,235,.3)}.rf-bg-background{background-color:hsl(var(--background))}.rf-bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.rf-bg-black\\/80{background-color:rgba(0,0,0,.8)}.rf-bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.rf-bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.rf-bg-blue-50\\/30{background-color:rgba(239,246,255,.3)}.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-orange-50\\/50{background-color:rgba(255,247,237,.5)}.rf-bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity,1))}.rf-bg-popover{background-color:hsl(var(--popover))}.rf-bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.rf-bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.rf-bg-red-50\\/50{background-color:hsla(0,86%,97%,.5)}.rf-bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.rf-bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.rf-bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.rf-bg-red-950{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity,1))}.rf-bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.rf-bg-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-zinc-950{--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity,1))}.rf-bg-opacity-50{--tw-bg-opacity:0.5}.rf-fill-amber-500{fill:#f59e0b}.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-1{padding-bottom:.25rem}.rf-pb-2{padding-bottom:.5rem}.rf-pb-3{padding-bottom:.75rem}.rf-pb-4{padding-bottom:1rem}.rf-pb-px{padding-bottom:1px}.rf-pl-10{padding-left:2.5rem}.rf-pl-11{padding-left:2.75rem}.rf-pl-12{padding-left:3rem}.rf-pl-2{padding-left:.5rem}.rf-pl-4{padding-left:1rem}.rf-pl-8{padding-left:2rem}.rf-pr-2{padding-right:.5rem}.rf-pt-0{padding-top:0}.rf-pt-1{padding-top:.25rem}.rf-pt-2{padding-top:.5rem}.rf-pt-4{padding-top:1rem}.rf-text-left{text-align:left}.rf-text-center{text-align:center}.rf-text-right{text-align:right}.rf-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-\\[0\\.95rem\\]{line-height:.95rem}.rf-leading-\\[1rem\\]{line-height:1rem}.rf-leading-none{line-height:1}.rf-leading-relaxed{line-height:1.625}.rf-leading-tight{line-height:1.25}.rf-tracking-wide{letter-spacing:.025em}.rf-tracking-widest{letter-spacing:.1em}.rf-text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity,1))}.rf-text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.rf-text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.rf-text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.rf-text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.rf-text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.rf-text-blue-900{--tw-text-opacity:1;color:rgb(30 58 138/var(--tw-text-opacity,1))}.rf-text-current{color:currentColor}.rf-text-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-400{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity,1))}.rf-text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity,1))}.rf-text-orange-600{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity,1))}.rf-text-orange-700{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity,1))}.rf-text-orange-800{--tw-text-opacity:1;color:rgb(154 52 18/var(--tw-text-opacity,1))}.rf-text-popover-foreground{color:hsl(var(--popover-foreground))}.rf-text-red-200{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity,1))}.rf-text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.rf-text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.rf-text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.rf-text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.rf-text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.rf-text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity,1))}.rf-text-red-900{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity,1))}.rf-text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.rf-text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}.rf-text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}.rf-text-slate-800{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity,1))}.rf-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.rf-text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity,1))}.rf-text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity,1))}.rf-text-yellow-600{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity,1))}.rf-text-yellow-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-70{opacity:.7}.rf-opacity-75{opacity:.75}.rf-shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.rf-shadow,.rf-shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.rf-shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.rf-shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.rf-shadow-md,.rf-shadow-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-transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.rf-duration-150{transition-duration:.15s}.rf-duration-200{transition-duration:.2s}.rf-ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0) scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0) scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}.rf-slide-in-from-left-1{--tw-enter-translate-x:-0.25rem}.rf-slide-out-to-left-1{--tw-exit-translate-x:-0.25rem}.rf-duration-150{animation-duration:.15s}.rf-duration-200{animation-duration:.2s}.rf-ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.no-scrollbar::-webkit-scrollbar{display:none}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.file\\:rf-border-0::file-selector-button{border-width:0}.file\\:rf-bg-transparent::file-selector-button{background-color:transparent}.file\\:rf-text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\\:rf-font-medium::file-selector-button{font-weight:500}.placeholder\\:rf-text-zinc-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.placeholder\\:rf-text-zinc-500::placeholder{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.hover\\:rf-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-orange-100:hover{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity,1))}.hover\\:rf-bg-red-100:hover{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.hover\\:rf-bg-red-500\\/90:hover{background-color:rgba(239,68,68,.9)}.hover\\:rf-bg-slate-200:hover{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity,1))}.hover\\:rf-bg-zinc-100:hover{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.hover\\:rf-bg-zinc-100\\/80:hover{background-color:hsla(240,5%,96%,.8)}.hover\\:rf-bg-zinc-900\\/90:hover{background-color:rgba(24,24,27,.9)}.hover\\:rf-text-blue-800:hover{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.hover\\:rf-text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.hover\\:rf-text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.hover\\:rf-text-slate-800:hover{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity,1))}.hover\\:rf-text-slate-900:hover{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.hover\\:rf-text-zinc-900:hover{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.hover\\:rf-underline:hover{text-decoration-line:underline}.focus\\:rf-bg-gray-100:focus{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.focus\\:rf-bg-zinc-100:focus{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.focus\\:rf-text-gray-900:focus{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.focus\\:rf-text-zinc-900:focus{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.focus\\:rf-outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\\:rf-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\\:rf-ring-blue-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.focus\\:rf-ring-ring:focus{--tw-ring-color:hsl(var(--ring))}.focus\\:rf-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus-visible\\:rf-outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\\:rf-ring-1:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\\:rf-ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\\:rf-ring-zinc-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:hover .group-hover\\:rf-opacity-100,.rf-group\\/bar:hover .group-hover\\/bar\\:rf-opacity-100{opacity:1}.rf-peer:disabled~.peer-disabled\\:rf-cursor-not-allowed{cursor:not-allowed}.rf-peer:disabled~.peer-disabled\\:rf-opacity-70{opacity:.7}.data-\\[disabled\\=true\\]\\:rf-pointer-events-none[data-disabled=true],.data-\\[disabled\\]\\:rf-pointer-events-none[data-disabled]{pointer-events:none}.data-\\[side\\=bottom\\]\\:rf-translate-y-1[data-side=bottom]{--tw-translate-y:0.25rem}.data-\\[side\\=bottom\\]\\:rf-translate-y-1[data-side=bottom],.data-\\[side\\=left\\]\\:-rf-translate-x-1[data-side=left]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\\[side\\=left\\]\\:-rf-translate-x-1[data-side=left]{--tw-translate-x:-0.25rem}.data-\\[side\\=right\\]\\:rf-translate-x-1[data-side=right]{--tw-translate-x:0.25rem}.data-\\[side\\=right\\]\\:rf-translate-x-1[data-side=right],.data-\\[side\\=top\\]\\:-rf-translate-y-1[data-side=top]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\\[side\\=top\\]\\:-rf-translate-y-1[data-side=top]{--tw-translate-y:-0.25rem}.data-\\[selected\\=true\\]\\:rf-bg-zinc-100[data-selected=true]{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.data-\\[state\\=active\\]\\:rf-bg-white[data-state=active]{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.data-\\[state\\=checked\\]\\:rf-bg-zinc-900[data-state=checked]{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity,1))}.data-\\[state\\=open\\]\\:rf-bg-zinc-100[data-state=open]{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.data-\\[selected\\=true\\]\\:rf-text-zinc-900[data-selected=true]{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.data-\\[state\\=active\\]\\:rf-text-zinc-950[data-state=active]{--tw-text-opacity:1;color:rgb(9 9 11/var(--tw-text-opacity,1))}.data-\\[state\\=checked\\]\\:rf-text-zinc-50[data-state=checked]{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.data-\\[disabled\\=true\\]\\:rf-opacity-50[data-disabled=true],.data-\\[disabled\\]\\:rf-opacity-50[data-disabled]{opacity:.5}.data-\\[state\\=active\\]\\:rf-shadow[data-state=active]{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.data-\\[state\\=open\\]\\:rf-animate-in[data-state=open]{animation-duration:.15s;animation-name:enter;--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial}.data-\\[state\\=closed\\]\\:rf-animate-out[data-state=closed]{animation-duration:.15s;animation-name:exit;--tw-exit-opacity:initial;--tw-exit-scale:initial;--tw-exit-rotate:initial;--tw-exit-translate-x:initial;--tw-exit-translate-y:initial}.data-\\[state\\=closed\\]\\:rf-fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\\[state\\=open\\]\\:rf-fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\\[state\\=closed\\]\\:rf-zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\\[state\\=open\\]\\:rf-zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\\[side\\=bottom\\]\\:rf-slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:-0.5rem}.data-\\[side\\=left\\]\\:rf-slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:0.5rem}.data-\\[side\\=right\\]\\:rf-slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:-0.5rem}.data-\\[side\\=top\\]\\:rf-slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:0.5rem}.data-\\[state\\=closed\\]\\:rf-slide-out-to-left-1\\/2[data-state=closed]{--tw-exit-translate-x:-50%}.data-\\[state\\=closed\\]\\:rf-slide-out-to-top-\\[48\\%\\][data-state=closed]{--tw-exit-translate-y:-48%}.data-\\[state\\=open\\]\\:rf-slide-in-from-left-1\\/2[data-state=open]{--tw-enter-translate-x:-50%}.data-\\[state\\=open\\]\\:rf-slide-in-from-top-\\[48\\%\\][data-state=open]{--tw-enter-translate-y:-48%}.dark\\:rf-border-zinc-50:is(.rf-dark *){--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity,1))}.dark\\:rf-border-zinc-800:is(.rf-dark *){--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity,1))}.dark\\:rf-bg-gray-700:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\\:rf-bg-gray-800:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\\:rf-bg-red-900:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.dark\\:rf-bg-zinc-50:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.dark\\:rf-bg-zinc-800:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.dark\\:rf-bg-zinc-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-mt-4{margin-top:1rem}.sm\\:rf-block{display:block}.sm\\:rf-inline{display:inline}.sm\\:rf-grid{display:grid}.sm\\:rf-hidden{display:none}.sm\\:rf-h-5{height:1.25rem}.sm\\:rf-w-1\\/2{width:50%}.sm\\:rf-w-5{width:1.25rem}.sm\\:rf-w-\\[90vw\\]{width:90vw}.sm\\:rf-w-auto{width:auto}.sm\\:rf-max-w-\\[500px\\]{max-width:500px}.sm\\:rf-max-w-md{max-width:28rem}.sm\\:rf-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\\:rf-grid-cols-\\[1fr_auto\\]{grid-template-columns:1fr auto}.sm\\:rf-flex-row{flex-direction:row}.sm\\:rf-items-center{align-items:center}.sm\\:rf-justify-end{justify-content:flex-end}.sm\\:rf-gap-3{gap:.75rem}.sm\\:rf-gap-4{gap:1rem}.sm\\:rf-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.sm\\:rf-justify-self-end{justify-self:end}.sm\\:rf-rounded-lg{border-radius:var(--radius)}.sm\\:rf-p-3{padding:.75rem}.sm\\:rf-p-6{padding:1.5rem}.sm\\:rf-px-4{padding-left:1rem;padding-right:1rem}.sm\\:rf-px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\\:rf-py-6{padding-bottom:1.5rem;padding-top:1.5rem}.sm\\:rf-text-left{text-align:left}.sm\\:rf-text-right{text-align:right}.sm\\:rf-text-2xl{font-size:1.5rem;line-height:2rem}.sm\\:rf-text-base{font-size:1rem;line-height:1.5rem}.sm\\:rf-text-sm{font-size:.875rem;line-height:1.25rem}.sm\\:rf-text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width:768px){.md\\:rf-w-auto{width:auto}.md\\:rf-max-w-\\[660px\\]{max-width:660px}.md\\:rf-max-w-lg{max-width:32rem}.md\\:rf-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\\:rf-p-8{padding:2rem}.md\\:rf-py-8{padding-bottom:2rem;padding-top:2rem}.md\\:rf-text-3xl{font-size:1.875rem;line-height:2.25rem}}@media (min-width:1024px){.lg\\:rf-max-w-\\[720px\\]{max-width:720px}.lg\\:rf-max-w-xl{max-width:36rem}}@media (min-width:1280px){.xl\\:rf-max-w-\\[800px\\]{max-width:800px}}.\\[\\&\\>span\\]\\:rf-line-clamp-1>span{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\\[\\&\\>svg\\]\\:rf-size-4>svg{height:1rem;width:1rem}.\\[\\&\\>svg\\]\\:rf-shrink-0>svg{flex-shrink:0}.\\[\\&\\>svg\\]\\:rf-text-red-300>svg{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.\\[\\&\\>svg\\]\\:hover\\:rf-text-red-400:hover>svg{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-py-1\\.5 [cmdk-group-heading]{padding-bottom:.375rem;padding-top:.375rem}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-font-medium [cmdk-group-heading]{font-weight:500}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-text-zinc-500 [cmdk-group-heading]{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.dark\\:\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-text-zinc-400 [cmdk-group-heading]:is(.rf-dark *){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.\\[\\&_\\[cmdk-group\\]\\:not\\(\\[hidden\\]\\)_\\~\\[cmdk-group\\]\\]\\:rf-pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\\[\\&_\\[cmdk-group\\]\\]\\:rf-px-2 [cmdk-group]{padding-left:.5rem;padding-right:.5rem}.\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:rf-h-5 [cmdk-input-wrapper] svg{height:1.25rem}.\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:rf-w-5 [cmdk-input-wrapper] svg{width:1.25rem}.\\[\\&_\\[cmdk-input\\]\\]\\:rf-h-12 [cmdk-input]{height:3rem}.\\[\\&_\\[cmdk-item\\]\\]\\:rf-px-2 [cmdk-item]{padding-left:.5rem;padding-right:.5rem}.\\[\\&_\\[cmdk-item\\]\\]\\:rf-py-3 [cmdk-item]{padding-bottom:.75rem;padding-top:.75rem}.\\[\\&_\\[cmdk-item\\]_svg\\]\\:rf-h-5 [cmdk-item] svg{height:1.25rem}.\\[\\&_\\[cmdk-item\\]_svg\\]\\:rf-w-5 [cmdk-item] svg{width:1.25rem}.\\[\\&_svg\\]\\:rf-pointer-events-none svg{pointer-events:none}.\\[\\&_svg\\]\\:rf-size-4 svg{height:1rem;width:1rem}.\\[\\&_svg\\]\\:rf-shrink-0 svg{flex-shrink:0}',b5=()=>{$.useEffect(()=>{if(document.querySelector('style[data-styles="tscircuit-runframe"]'))return;const A=document.createElement("style");A.setAttribute("data-styles","tscircuit-runframe"),A.textContent=QMt,document.head.appendChild(A)},[])},lMt=t=>{$.useEffect(()=>(t?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[t])};function ON(t,A){const[e,i]=$.useState(()=>{try{const o=window.localStorage.getItem(t);return o?JSON.parse(o):A}catch(o){return console.error("Error reading from localStorage:",o),A}});return $.useEffect(()=>{try{window.localStorage.setItem(t,JSON.stringify(e))}catch(o){console.error("Error writing to localStorage:",o)}},[t,e]),[e,i]}const ote=t=>`hsl(${wp.indexOf(t)*137.5%360}, 70%, 50%)`,EMt=({phaseTimings:t})=>{if(!t)return null;const A=Object.values(t).reduce((e,i)=>e+i,0);return Z.jsxs("div",{className:"rf-space-y-2 rf-w-full rf-px-4",children:[Z.jsx("div",{className:"rf-relative rf-h-8 rf-flex rf-rounded-sm",children:wp.map(e=>{const i=t[e]||0,o=i/A*100;return Z.jsx("div",{className:"rf-group/bar rf-relative rf-overflow-visible",style:{width:`${o}%`,backgroundColor:ote(e)},children:Z.jsxs("div",{className:"rf-opacity-0 group-hover/bar:rf-opacity-100 rf-transition-opacity rf-absolute rf-bottom-full rf-left-1/2 rf-transform -rf-translate-x-1/2 rf-mb-2 rf-px-2 rf-py-1 rf-text-xs rf-whitespace-nowrap rf-rounded rf-bg-gray-900 rf-text-white rf-pointer-events-none",children:[e,": ",i.toFixed(1),"ms"]})},e)})}),Z.jsxs("div",{className:"rf-text-xs rf-text-gray-500",children:["Total: ",A.toFixed(2),"ms"]})]})},hMt=t=>{if(t instanceof Blob)return t;if(t==null)return"";if(typeof t=="string")return t;if(typeof t=="object")try{return JSON.stringify(t,null,2)}catch{return String(t)}return String(t)},uMt=({renderLog:t,onRerunWithDebug:A})=>{const[e,i]=$.useState("chronological"),[o,n]=$.useState(""),s=[{value:"",label:"None"},{value:"DEBUG=Group_doInitialSchematicTraceRender",label:"DEBUG=Group_doInitialSchematicTraceRender"},{value:"DEBUG=Group_doInitialSchematicLayoutMatchpack",label:"DEBUG=Group_doInitialSchematicLayoutMatchpack"},{value:"DEBUG=Group_doInitialPcbLayoutPack",label:"DEBUG=Group_doInitialPcbLayoutPack"}];if(!t)return Z.jsxs("div",{className:"rf-p-4 rf-bg-gray-100 rf-rounded-md",children:[Z.jsx("div",{className:"rf-mb-4",children:"No render log, make sure this tab is open when you render"}),A&&Z.jsxs("div",{className:"rf-flex rf-gap-2 rf-items-center",children:[Z.jsx("select",{value:o,onChange:a=>n(a.target.value),className:"rf-px-3 rf-py-1 rf-border rf-rounded rf-text-xs rf-bg-white",children:s.map(a=>Z.jsx("option",{value:a.value,children:a.label},a.value))}),Z.jsx(Ng,{onClick:()=>A(o),size:"sm",className:"rf-text-xs",children:"Rerun Render with Debug"})]})]});const r=Object.entries(t?.phaseTimings??{});e==="chronological"?r.sort((a,I)=>wp.indexOf(a[0])-wp.indexOf(I[0])):r.sort((a,I)=>I[1]-a[1]);const g=r.reduce((a,[I,c])=>a+c,0);return Z.jsxs("div",{className:"rf-bg-white",children:[Z.jsxs("div",{className:"rf-flex rf-justify-between rf-items-center rf-mb-4",children:[Z.jsx("div",{children:"Render Logs"}),Z.jsxs("div",{className:"rf-flex rf-gap-4 rf-items-center",children:[A&&Z.jsxs("div",{className:"rf-flex rf-gap-2 rf-items-center",children:[Z.jsx("select",{value:o,onChange:a=>n(a.target.value),className:"rf-px-3 rf-py-1 rf-border rf-rounded rf-text-xs rf-bg-white",children:s.map(a=>Z.jsx("option",{value:a.value,children:a.label},a.value))}),Z.jsx(Ng,{onClick:()=>A(o),size:"sm",className:"rf-text-xs",children:"Rerun Render with Debug"})]}),Z.jsx("div",{className:"rf-flex rf-gap-2 rf-items-center",children:Z.jsxs("select",{onChange:a=>{if(a.target.value){const I=t?.debugOutputs?.find(c=>c.name===a.target.value);if(I){const c=hMt(I.content),B=c instanceof Blob?c:new Blob([c],{type:"text/plain"}),C=URL.createObjectURL(B),Q=document.createElement("a");Q.href=C,Q.download=`debug-${I.name}.txt`,document.body.appendChild(Q),Q.click(),document.body.removeChild(Q),URL.revokeObjectURL(C)}a.target.value=""}},disabled:!t?.debugOutputs||t.debugOutputs.length===0,className:"rf-px-3 rf-py-1 rf-border rf-rounded rf-text-xs rf-bg-white disabled:rf-opacity-50 disabled:rf-cursor-not-allowed",children:[Z.jsx("option",{value:"",children:"Download Debug Output"}),t?.debugOutputs?.map(a=>Z.jsx("option",{value:a.name,children:a.name},a.name))]})}),Z.jsxs("div",{className:"rf-flex rf-text-xs rf-items-center",children:[Z.jsx("div",{className:"rf-mr-2",children:"Sort by:"}),Z.jsxs("select",{value:e,onChange:a=>i(a.target.value),className:"rf-px-2 rf-py-1 rf-border rf-rounded rf-text-xs",children:[Z.jsx("option",{value:"chronological",children:"Phase Order"}),Z.jsx("option",{value:"longest",children:"Duration"})]})]})]})]}),Z.jsx(EMt,{phaseTimings:t.phaseTimings}),Z.jsxs("table",{className:"rf-w-full rf-text-xs",children:[Z.jsx("thead",{children:Z.jsxs("tr",{children:[Z.jsx("th",{className:"rf-text-left rf-p-2",children:"Phase Order"}),Z.jsx("th",{className:"rf-text-left rf-p-2",children:"Phase"}),Z.jsx("th",{className:"rf-text-left rf-p-2",children:"Duration (ms)"})]})}),Z.jsx("tbody",{children:r.map(([a,I])=>Z.jsxs("tr",{children:[Z.jsx("td",{className:"rf-p-2",children:wp.indexOf(a)}),Z.jsx("td",{className:"rf-p-2",children:a}),Z.jsx("td",{className:"rf-p-2",children:Z.jsx("div",{className:"rf-w-8",children:Z.jsx("div",{className:"rf-h-2 rf-rounded-sm",style:{backgroundColor:ote(a),width:`${I/g*100}%`}})})}),Z.jsx("td",{className:"rf-p-2",children:Z.jsxs("div",{className:"rf-flex w-full",children:[Z.jsxs("span",{className:"rf-flex-grow",children:[I,"ms"]}),Z.jsxs("span",{className:"rf-text-gray-500 rf-pr-2",children:[(I/g*100).toFixed(1),"%"]})]})})]},a))})]})]})},nte=({errorMessage:t,errorStack:A,circuitJsonErrors:e})=>{$.useEffect(()=>{if(t){const i=new Error(t);A&&(i.stack=A);try{W4.captureException(i)}catch{}}},[t,A]),$.useEffect(()=>{if(e&&e.length>0)for(const i of e){const o=new Error(i.message||"Circuit JSON Error");i.stack&&(o.stack=i.stack);try{W4.captureException(o,{error_type:i.type})}catch{}}},[e])},ste="0.0.1387",dMt={version:ste},k5=ONA()(WNA(t=>({lastRunEvalVersion:void 0,setLastRunEvalVersion:A=>{t({lastRunEvalVersion:A})}}),{name:"runframe-runner-store"})),pMt=t=>{const[A,e]=$.useState([]),[i,o]=$.useState(null),[n,s]=$.useState(""),[r,g]=ON("eval-version-selection",null),a=k5(C=>C.setLastRunEvalVersion),I=k5(C=>C.lastRunEvalVersion);return $.useEffect(()=>{t&&fetch("https://data.jsdelivr.com/v1/package/npm/@tscircuit/eval").then(C=>C.json()).then(C=>{if(Array.isArray(C?.versions)){let Q=[...C.versions];C.tags?.latest&&(o(C.tags.latest),Q=Q.filter(l=>l!==C.tags.latest)),e(Q)}}).catch(()=>{})},[t]),$.useEffect(()=>{t&&(r?(window.TSCIRCUIT_LATEST_EVAL_VERSION=r,a(r)):i&&(window.TSCIRCUIT_LATEST_EVAL_VERSION=i,a(i)))},[t,r,i]),{versions:$.useMemo(()=>A.filter(C=>C.includes(n)).slice(0,50),[A,n]),latestVersion:i,lastRunEvalVersion:I,search:n,setSearch:s,selectVersion:C=>{g(C),s("")}}},fMt=({snippetNames:t,onSelect:A,onCancel:e,isOpen:i})=>{const[o,n]=$.useState(""),[s,r]=$.useState("");if(!i)return null;const g=t.filter(c=>c.toLowerCase().includes(s.toLowerCase())),a=s&&!t.includes(s),I=c=>{c.key==="Enter"&&(g.length===1?n(g[0]):a&&n(s))};return Z.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:Z.jsxs("div",{className:"rf-bg-white rf-rounded-lg rf-p-6 rf-w-96",children:[Z.jsx("h2",{className:"rf-text-lg rf-font-semibold rf-mb-4",children:"Select Snippet"}),Z.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:c=>r(c.target.value),onKeyDown:I}),Z.jsxs("div",{className:"rf-h-60 rf-overflow-y-auto",children:[g.map(c=>Z.jsx("button",{type:"button",className:`w-full text-left px-4 py-2 rounded hover:bg-gray-100 ${o===c?"bg-blue-50":""}`,onClick:()=>n(c),children:c},c)),a&&Z.jsxs("button",{type:"button",className:`w-full text-left px-4 py-2 rounded hover:bg-gray-100 text-blue-500 ${o===s?"bg-blue-50":""}`,onClick:()=>n(s),children:['Create new "',s,'"']})]}),Z.jsxs("div",{className:"rf-mt-4 rf-flex rf-justify-end rf-gap-2",children:[Z.jsx("button",{type:"button",className:"rf-px-4 rf-py-2 rf-text-gray-600 rf-hover:text-gray-800",onClick:e,children:"Cancel"}),Z.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:()=>o&&A(o),disabled:!o,children:o===s?`Create "${o}"`:`Save to ${o}`})]})]})})},yMt=t=>{const A=$.useRef(null),e=xc(i=>i.recentEvents);$.useEffect(()=>{if(e.length===0)return;const i=e[0];i.event_id!==A.current&&(t(i),A.current=i.event_id)},[e,t])};var G5="Dialog",[rte,gte]=jw(G5),[wMt,Qw]=rte(G5),ate=t=>{const{__scopeDialog:A,children:e,open:i,defaultOpen:o,onOpenChange:n,modal:s=!0}=t,r=$.useRef(null),g=$.useRef(null),[a,I]=SG({prop:i,defaultProp:o??!1,onChange:n,caller:G5});return Z.jsx(wMt,{scope:A,triggerRef:r,contentRef:g,contentId:ou(),titleId:ou(),descriptionId:ou(),open:a,onOpenChange:I,onOpenToggle:$.useCallback(()=>I(c=>!c),[I]),modal:s,children:e})};ate.displayName=G5;var Ite="DialogTrigger",cte=$.forwardRef((t,A)=>{const{__scopeDialog:e,...i}=t,o=Qw(Ite,e),n=BB(A,o.triggerRef);return Z.jsx(sr.button,{type:"button","aria-haspopup":"dialog","aria-expanded":o.open,"aria-controls":o.contentId,"data-state":XlA(o.open),...i,ref:n,onClick:rn(t.onClick,o.onOpenToggle)})});cte.displayName=Ite;var jlA="DialogPortal",[DMt,Bte]=rte(jlA,{forceMount:void 0}),Cte=t=>{const{__scopeDialog:A,forceMount:e,children:i,container:o}=t,n=Qw(jlA,A);return Z.jsx(DMt,{scope:A,forceMount:e,children:$.Children.map(i,s=>Z.jsx(q0,{present:e||n.open,children:Z.jsx($O,{asChild:!0,container:o,children:s})}))})};Cte.displayName=jlA;var x5="DialogOverlay",Qte=$.forwardRef((t,A)=>{const e=Bte(x5,t.__scopeDialog),{forceMount:i=e.forceMount,...o}=t,n=Qw(x5,t.__scopeDialog);return n.modal?Z.jsx(q0,{present:i||n.open,children:Z.jsx(SMt,{...o,ref:A})}):null});Qte.displayName=x5;var mMt=mG("DialogOverlay.RemoveScroll"),SMt=$.forwardRef((t,A)=>{const{__scopeDialog:e,...i}=t,o=Qw(x5,e);return Z.jsx(r8,{as:mMt,allowPinchZoom:!0,shards:[o.contentRef],children:Z.jsx(sr.div,{"data-state":XlA(o.open),...i,ref:A,style:{pointerEvents:"auto",...i.style}})})}),Rx="DialogContent",lte=$.forwardRef((t,A)=>{const e=Bte(Rx,t.__scopeDialog),{forceMount:i=e.forceMount,...o}=t,n=Qw(Rx,t.__scopeDialog);return Z.jsx(q0,{present:i||n.open,children:n.modal?Z.jsx(bMt,{...o,ref:A}):Z.jsx(kMt,{...o,ref:A})})});lte.displayName=Rx;var bMt=$.forwardRef((t,A)=>{const e=Qw(Rx,t.__scopeDialog),i=$.useRef(null),o=BB(A,e.contentRef,i);return $.useEffect(()=>{const n=i.current;if(n)return KCA(n)},[]),Z.jsx(Ete,{...t,ref:o,trapFocus:e.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:rn(t.onCloseAutoFocus,n=>{n.preventDefault(),e.triggerRef.current?.focus()}),onPointerDownOutside:rn(t.onPointerDownOutside,n=>{const s=n.detail.originalEvent,r=s.button===0&&s.ctrlKey===!0;(s.button===2||r)&&n.preventDefault()}),onFocusOutside:rn(t.onFocusOutside,n=>n.preventDefault())})}),kMt=$.forwardRef((t,A)=>{const e=Qw(Rx,t.__scopeDialog),i=$.useRef(!1),o=$.useRef(!1);return Z.jsx(Ete,{...t,ref:A,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:n=>{t.onCloseAutoFocus?.(n),n.defaultPrevented||(i.current||e.triggerRef.current?.focus(),n.preventDefault()),i.current=!1,o.current=!1},onInteractOutside:n=>{t.onInteractOutside?.(n),n.defaultPrevented||(i.current=!0,n.detail.originalEvent.type==="pointerdown"&&(o.current=!0));const s=n.target;e.triggerRef.current?.contains(s)&&n.preventDefault(),n.detail.originalEvent.type==="focusin"&&o.current&&n.preventDefault()}})}),Ete=$.forwardRef((t,A)=>{const{__scopeDialog:e,trapFocus:i,onOpenAutoFocus:o,onCloseAutoFocus:n,...s}=t,r=Qw(Rx,e),g=$.useRef(null),a=BB(A,g);return wCA(),Z.jsxs(Z.Fragment,{children:[Z.jsx(JO,{asChild:!0,loop:!0,trapped:i,onMountAutoFocus:o,onUnmountAutoFocus:n,children:Z.jsx(YO,{role:"dialog",id:r.contentId,"aria-describedby":r.descriptionId,"aria-labelledby":r.titleId,"data-state":XlA(r.open),...s,ref:a,onDismiss:()=>r.onOpenChange(!1)})}),Z.jsxs(Z.Fragment,{children:[Z.jsx(xMt,{titleId:r.titleId}),Z.jsx(_Mt,{contentRef:g,descriptionId:r.descriptionId})]})]})}),zlA="DialogTitle",hte=$.forwardRef((t,A)=>{const{__scopeDialog:e,...i}=t,o=Qw(zlA,e);return Z.jsx(sr.h2,{id:o.titleId,...i,ref:A})});hte.displayName=zlA;var ute="DialogDescription",dte=$.forwardRef((t,A)=>{const{__scopeDialog:e,...i}=t,o=Qw(ute,e);return Z.jsx(sr.p,{id:o.descriptionId,...i,ref:A})});dte.displayName=ute;var pte="DialogClose",fte=$.forwardRef((t,A)=>{const{__scopeDialog:e,...i}=t,o=Qw(pte,e);return Z.jsx(sr.button,{type:"button",...i,ref:A,onClick:rn(t.onClick,()=>o.onOpenChange(!1))})});fte.displayName=pte;function XlA(t){return t?"open":"closed"}var yte="DialogTitleWarning",[GMt,wte]=WTe(yte,{contentName:Rx,titleName:zlA,docsSlug:"dialog"}),xMt=({titleId:t})=>{const A=wte(yte),e=`\`${A.contentName}\` requires a \`${A.titleName}\` for the component to be accessible for screen reader users.
5887
+ */const CMt=({containerClassName:t,...A})=>{const e=$.useRef(null),[i,o]=$.useState(620);return $.useLayoutEffect(()=>{const n=()=>{if(e.current){const r=e.current.clientHeight,g=window.innerHeight;o(Math.min(Math.max(r,620),g))}};n();const s=new ResizeObserver(n);return e.current&&s.observe(e.current),window.addEventListener("resize",n),()=>{s.disconnect(),window.removeEventListener("resize",n)}},[]),Z.jsx("div",{ref:e,className:t||"rf-w-full rf-h-full",children:Z.jsx(BMt,{...A,height:i})})},QMt='*,: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.18 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-feature-settings:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]:where(:not([hidden=until-found])){display:none}:root{--radius:0.5rem}.rf-pointer-events-none{pointer-events:none}.rf-invisible{visibility:hidden}.rf-fixed{position:fixed}.rf-absolute{position:absolute}.rf-relative{position:relative}.rf-inset-0{inset:0}.-rf-left-2{left:-.5rem}.-rf-right-10{right:-2.5rem}.-rf-right-2{right:-.5rem}.-rf-right-4{right:-1rem}.-rf-right-6{right:-1.5rem}.-rf-right-7{right:-1.75rem}.-rf-right-8{right:-2rem}.-rf-right-9{right:-2.25rem}.rf-bottom-full{bottom:100%}.rf-left-0{left:0}.rf-left-1{left:.25rem}.rf-left-1\\/2{left:50%}.rf-left-2{left:.5rem}.rf-left-\\[50\\%\\]{left:50%}.rf-right-0{right:0}.rf-right-1{right:.25rem}.rf-right-4{right:1rem}.rf-right-\\[4px\\]{right:4px}.rf-top-0{top:0}.rf-top-1{top:.25rem}.rf-top-2{top:.5rem}.rf-top-2\\.5{top:.625rem}.rf-top-\\[50\\%\\]{top:50%}.rf-top-\\[6px\\]{top:6px}.\\!rf-z-\\[101\\]{z-index:101!important}.\\!rf-z-\\[200\\]{z-index:200!important}.rf-z-10{z-index:10}.rf-z-50{z-index:50}.rf-z-\\[100\\]{z-index:100}.rf-z-\\[101\\]{z-index:101}.rf-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-0{margin-bottom:0}.rf-mb-0\\.5{margin-bottom:.125rem}.rf-mb-1{margin-bottom:.25rem}.rf-mb-12{margin-bottom:3rem}.rf-mb-2{margin-bottom:.5rem}.rf-mb-3{margin-bottom:.75rem}.rf-mb-4{margin-bottom:1rem}.rf-mb-6{margin-bottom:1.5rem}.rf-mb-8{margin-bottom:2rem}.rf-ml-1{margin-left:.25rem}.rf-ml-2{margin-left:.5rem}.rf-ml-6{margin-left:1.5rem}.rf-ml-auto{margin-left:auto}.rf-mr-1{margin-right:.25rem}.rf-mr-2{margin-right:.5rem}.rf-mr-4{margin-right:1rem}.rf-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-20{height:5rem}.rf-h-24{height:6rem}.rf-h-3{height:.75rem}.rf-h-3\\.5{height:.875rem}.rf-h-4{height:1rem}.rf-h-5{height:1.25rem}.rf-h-6{height:1.5rem}.rf-h-60{height:15rem}.rf-h-64{height:16rem}.rf-h-7{height:1.75rem}.rf-h-8{height:2rem}.rf-h-9{height:2.25rem}.rf-h-\\[400px\\]{height:400px}.rf-h-\\[calc\\(100vh-52px\\)\\]{height:calc(100vh - 52px)}.rf-h-\\[calc\\(100vh-60px\\)\\]{height:calc(100vh - 60px)}.rf-h-\\[var\\(--radix-select-trigger-height\\)\\]{height:var(--radix-select-trigger-height)}.rf-h-auto{height:auto}.rf-h-fit{height:-moz-fit-content;height:fit-content}.rf-h-full{height:100%}.rf-h-px{height:1px}.rf-h-screen{height:100vh}.\\!rf-max-h-\\[40vh\\]{max-height:40vh!important}.rf-max-h-16{max-height:4rem}.rf-max-h-20{max-height:5rem}.rf-max-h-24{max-height:6rem}.rf-max-h-28{max-height:7rem}.rf-max-h-32{max-height:8rem}.rf-max-h-96{max-height:24rem}.rf-max-h-\\[120px\\]{max-height:120px}.rf-max-h-\\[150px\\]{max-height:150px}.rf-max-h-\\[200px\\]{max-height:200px}.rf-max-h-\\[300px\\]{max-height:300px}.rf-max-h-\\[70vh\\]{max-height:70vh}.rf-max-h-\\[90vh\\]{max-height:90vh}.rf-max-h-full{max-height:100%}.rf-min-h-0{min-height:0}.rf-min-h-\\[100px\\]{min-height:100px}.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-min-h-full{min-height:100%}.\\!rf-w-2{width:.5rem!important}.\\!rf-w-2\\.5{width:.625rem!important}.\\!rf-w-\\[95vw\\]{width:95vw!important}.rf-w-1{width:.25rem}.rf-w-10{width:2.5rem}.rf-w-11{width:2.75rem}.rf-w-11\\/12{width:91.666667%}.rf-w-12{width:3rem}.rf-w-16{width:4rem}.rf-w-2{width:.5rem}.rf-w-2\\.5{width:.625rem}.rf-w-20{width:5rem}.rf-w-24{width:6rem}.rf-w-28{width:7rem}.rf-w-3{width:.75rem}.rf-w-3\\.5{width:.875rem}.rf-w-32{width:8rem}.rf-w-4{width:1rem}.rf-w-40{width:10rem}.rf-w-48{width:12rem}.rf-w-5{width:1.25rem}.rf-w-6{width:1.5rem}.rf-w-64{width:16rem}.rf-w-72{width:18rem}.rf-w-8{width:2rem}.rf-w-80{width:20rem}.rf-w-9{width:2.25rem}.rf-w-96{width:24rem}.rf-w-fit{width:-moz-fit-content;width:fit-content}.rf-w-full{width:100%}.rf-w-screen{width:100vw}.rf-min-w-0{min-width:0}.rf-min-w-10{min-width:2.5rem}.rf-min-w-16{min-width:4rem}.rf-min-w-32{min-width:8rem}.rf-min-w-80{min-width:20rem}.rf-min-w-96{min-width:24rem}.rf-min-w-\\[148px\\]{min-width:148px}.rf-min-w-\\[600px\\]{min-width:600px}.rf-min-w-\\[8rem\\]{min-width:8rem}.rf-min-w-\\[var\\(--radix-select-trigger-width\\)\\]{min-width:var(--radix-select-trigger-width)}.\\!rf-max-w-\\[95vw\\]{max-width:95vw!important}.rf-max-w-2xl{max-width:42rem}.rf-max-w-3xl{max-width:48rem}.rf-max-w-4xl{max-width:56rem}.rf-max-w-5xl{max-width:64rem}.rf-max-w-64{max-width:16rem}.rf-max-w-96{max-width:24rem}.rf-max-w-\\[1000px\\]{max-width:1000px}.rf-max-w-\\[150px\\]{max-width:150px}.rf-max-w-\\[200px\\]{max-width:200px}.rf-max-w-\\[40\\%\\]{max-width:40%}.rf-max-w-\\[600px\\]{max-width:600px}.rf-max-w-full{max-width:100%}.rf-max-w-lg{max-width:32rem}.rf-max-w-md{max-width:28rem}.rf-max-w-none{max-width:none}.rf-max-w-xl{max-width:36rem}.rf-max-w-xs{max-width:20rem}.rf-flex-1{flex:1 1 0%}.rf-flex-shrink-0,.rf-shrink-0{flex-shrink:0}.rf-flex-grow{flex-grow:1}.rf-table-auto{table-layout:auto}.rf-origin-\\[--radix-popover-content-transform-origin\\]{transform-origin:var(--radix-popover-content-transform-origin)}.-rf-translate-x-1{--tw-translate-x:-0.25rem}.-rf-translate-x-1,.-rf-translate-x-1\\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-rf-translate-x-1\\/2{--tw-translate-x:-50%}.-rf-translate-y-1{--tw-translate-y:-0.25rem}.-rf-translate-y-1,.rf--translate-x-1{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rf--translate-x-1{--tw-translate-x:-0.25rem}.rf--translate-x-1\\/2{--tw-translate-x:-50%}.rf--translate-x-1\\/2,.rf--translate-y-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-rotate-90{--tw-rotate:90deg}.rf-rotate-90,.rf-transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes rf-pulse{50%{opacity:.5}}.rf-animate-pulse{animation:rf-pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes rf-spin{to{transform:rotate(1turn)}}.rf-animate-spin{animation:rf-spin 1s linear infinite}.rf-cursor-default{cursor:default}.rf-cursor-not-allowed{cursor:not-allowed}.rf-cursor-pointer{cursor:pointer}.rf-select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.rf-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.rf-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.rf-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.rf-flex-row{flex-direction:row}.rf-flex-col{flex-direction:column}.rf-flex-col-reverse{flex-direction:column-reverse}.rf-flex-wrap{flex-wrap:wrap}.rf-place-content-center{place-content:center}.rf-place-items-center{place-items:center}.rf-items-start{align-items:flex-start}.rf-items-end{align-items:flex-end}.rf-items-center{align-items:center}.rf-items-baseline{align-items:baseline}.rf-items-stretch{align-items:stretch}.rf-justify-end{justify-content:flex-end}.rf-justify-center{justify-content:center}.rf-justify-between{justify-content:space-between}.rf-gap-0{gap:0}.rf-gap-1{gap:.25rem}.rf-gap-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-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.rf-space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.rf-space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.rf-space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.rf-space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.rf-divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.rf-overflow-auto{overflow:auto}.\\!rf-overflow-hidden{overflow:hidden!important}.rf-overflow-hidden{overflow:hidden}.rf-overflow-visible{overflow:visible}.rf-overflow-x-auto{overflow-x:auto}.\\!rf-overflow-y-auto{overflow-y:auto!important}.rf-overflow-y-auto{overflow-y:auto}.rf-overflow-x-hidden{overflow-x:hidden}.rf-overflow-x-clip{overflow-x:clip}.rf-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rf-whitespace-normal{white-space:normal}.rf-whitespace-nowrap{white-space:nowrap}.rf-whitespace-pre-wrap{white-space:pre-wrap}.rf-text-nowrap{text-wrap:nowrap}.rf-break-words{overflow-wrap:break-word}.rf-break-all{word-break:break-all}.rf-rounded{border-radius:.25rem}.rf-rounded-2xl{border-radius:1rem}.rf-rounded-full{border-radius:9999px}.rf-rounded-lg{border-radius:var(--radius)}.rf-rounded-md{border-radius:calc(var(--radius) - 2px)}.rf-rounded-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-l-2{border-left-width:2px}.rf-border-l-4{border-left-width:4px}.rf-border-t{border-top-width:1px}.rf-border-none{border-style:none}.rf-border-blue-200{--tw-border-opacity:1;border-color:rgb(191 219 254/var(--tw-border-opacity,1))}.rf-border-blue-300{--tw-border-opacity:1;border-color:rgb(147 197 253/var(--tw-border-opacity,1))}.rf-border-blue-400{--tw-border-opacity:1;border-color:rgb(96 165 250/var(--tw-border-opacity,1))}.rf-border-blue-500{--tw-border-opacity:1;border-color:rgb(59 130 246/var(--tw-border-opacity,1))}.rf-border-blue-600{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity,1))}.rf-border-gray-200{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.rf-border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.rf-border-green-200{--tw-border-opacity:1;border-color:rgb(187 247 208/var(--tw-border-opacity,1))}.rf-border-green-400{--tw-border-opacity:1;border-color:rgb(74 222 128/var(--tw-border-opacity,1))}.rf-border-input{border-color:hsl(var(--input))}.rf-border-neutral-200{--tw-border-opacity:1;border-color:rgb(229 229 229/var(--tw-border-opacity,1))}.rf-border-orange-100{--tw-border-opacity:1;border-color:rgb(255 237 213/var(--tw-border-opacity,1))}.rf-border-orange-200{--tw-border-opacity:1;border-color:rgb(254 215 170/var(--tw-border-opacity,1))}.rf-border-orange-500{--tw-border-opacity:1;border-color:rgb(249 115 22/var(--tw-border-opacity,1))}.rf-border-primary{border-color:hsl(var(--primary))}.rf-border-red-100{--tw-border-opacity:1;border-color:rgb(254 226 226/var(--tw-border-opacity,1))}.rf-border-red-200{--tw-border-opacity:1;border-color:rgb(254 202 202/var(--tw-border-opacity,1))}.rf-border-red-400{--tw-border-opacity:1;border-color:rgb(248 113 113/var(--tw-border-opacity,1))}.rf-border-red-500{--tw-border-opacity:1;border-color:rgb(239 68 68/var(--tw-border-opacity,1))}.rf-border-red-600{--tw-border-opacity:1;border-color:rgb(220 38 38/var(--tw-border-opacity,1))}.rf-border-red-700{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity,1))}.rf-border-red-800{--tw-border-opacity:1;border-color:rgb(153 27 27/var(--tw-border-opacity,1))}.rf-border-zinc-200{--tw-border-opacity:1;border-color:rgb(228 228 231/var(--tw-border-opacity,1))}.rf-border-zinc-900{--tw-border-opacity:1;border-color:rgb(24 24 27/var(--tw-border-opacity,1))}.rf-border-t-blue-600{--tw-border-opacity:1;border-top-color:rgb(37 99 235/var(--tw-border-opacity,1))}.rf-bg-amber-50{--tw-bg-opacity:1;background-color:rgb(255 251 235/var(--tw-bg-opacity,1))}.rf-bg-amber-50\\/30{background-color:rgba(255,251,235,.3)}.rf-bg-background{background-color:hsl(var(--background))}.rf-bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.rf-bg-black\\/80{background-color:rgba(0,0,0,.8)}.rf-bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.rf-bg-blue-50{--tw-bg-opacity:1;background-color:rgb(239 246 255/var(--tw-bg-opacity,1))}.rf-bg-blue-50\\/30{background-color:rgba(239,246,255,.3)}.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-orange-50\\/50{background-color:rgba(255,247,237,.5)}.rf-bg-orange-500{--tw-bg-opacity:1;background-color:rgb(249 115 22/var(--tw-bg-opacity,1))}.rf-bg-popover{background-color:hsl(var(--popover))}.rf-bg-red-100{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.rf-bg-red-50{--tw-bg-opacity:1;background-color:rgb(254 242 242/var(--tw-bg-opacity,1))}.rf-bg-red-50\\/50{background-color:hsla(0,86%,97%,.5)}.rf-bg-red-500{--tw-bg-opacity:1;background-color:rgb(239 68 68/var(--tw-bg-opacity,1))}.rf-bg-red-600{--tw-bg-opacity:1;background-color:rgb(220 38 38/var(--tw-bg-opacity,1))}.rf-bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.rf-bg-red-950{--tw-bg-opacity:1;background-color:rgb(69 10 10/var(--tw-bg-opacity,1))}.rf-bg-slate-50{--tw-bg-opacity:1;background-color:rgb(248 250 252/var(--tw-bg-opacity,1))}.rf-bg-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-zinc-950{--tw-bg-opacity:1;background-color:rgb(9 9 11/var(--tw-bg-opacity,1))}.rf-bg-opacity-50{--tw-bg-opacity:0.5}.rf-fill-amber-500{fill:#f59e0b}.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-1{padding-bottom:.25rem}.rf-pb-2{padding-bottom:.5rem}.rf-pb-3{padding-bottom:.75rem}.rf-pb-4{padding-bottom:1rem}.rf-pb-px{padding-bottom:1px}.rf-pl-10{padding-left:2.5rem}.rf-pl-11{padding-left:2.75rem}.rf-pl-12{padding-left:3rem}.rf-pl-2{padding-left:.5rem}.rf-pl-4{padding-left:1rem}.rf-pl-8{padding-left:2rem}.rf-pr-2{padding-right:.5rem}.rf-pt-0{padding-top:0}.rf-pt-1{padding-top:.25rem}.rf-pt-2{padding-top:.5rem}.rf-pt-4{padding-top:1rem}.rf-text-left{text-align:left}.rf-text-center{text-align:center}.rf-text-right{text-align:right}.rf-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-\\[0\\.95rem\\]{line-height:.95rem}.rf-leading-\\[1rem\\]{line-height:1rem}.rf-leading-none{line-height:1}.rf-leading-relaxed{line-height:1.625}.rf-leading-tight{line-height:1.25}.rf-tracking-wide{letter-spacing:.025em}.rf-tracking-widest{letter-spacing:.1em}.rf-text-amber-500{--tw-text-opacity:1;color:rgb(245 158 11/var(--tw-text-opacity,1))}.rf-text-black{--tw-text-opacity:1;color:rgb(0 0 0/var(--tw-text-opacity,1))}.rf-text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.rf-text-blue-600{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.rf-text-blue-700{--tw-text-opacity:1;color:rgb(29 78 216/var(--tw-text-opacity,1))}.rf-text-blue-800{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.rf-text-blue-900{--tw-text-opacity:1;color:rgb(30 58 138/var(--tw-text-opacity,1))}.rf-text-current{color:currentColor}.rf-text-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-400{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity,1))}.rf-text-orange-500{--tw-text-opacity:1;color:rgb(249 115 22/var(--tw-text-opacity,1))}.rf-text-orange-600{--tw-text-opacity:1;color:rgb(234 88 12/var(--tw-text-opacity,1))}.rf-text-orange-700{--tw-text-opacity:1;color:rgb(194 65 12/var(--tw-text-opacity,1))}.rf-text-orange-800{--tw-text-opacity:1;color:rgb(154 52 18/var(--tw-text-opacity,1))}.rf-text-popover-foreground{color:hsl(var(--popover-foreground))}.rf-text-red-200{--tw-text-opacity:1;color:rgb(254 202 202/var(--tw-text-opacity,1))}.rf-text-red-300{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.rf-text-red-400{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.rf-text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity,1))}.rf-text-red-600{--tw-text-opacity:1;color:rgb(220 38 38/var(--tw-text-opacity,1))}.rf-text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity,1))}.rf-text-red-800{--tw-text-opacity:1;color:rgb(153 27 27/var(--tw-text-opacity,1))}.rf-text-red-900{--tw-text-opacity:1;color:rgb(127 29 29/var(--tw-text-opacity,1))}.rf-text-slate-400{--tw-text-opacity:1;color:rgb(148 163 184/var(--tw-text-opacity,1))}.rf-text-slate-500{--tw-text-opacity:1;color:rgb(100 116 139/var(--tw-text-opacity,1))}.rf-text-slate-600{--tw-text-opacity:1;color:rgb(71 85 105/var(--tw-text-opacity,1))}.rf-text-slate-800{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity,1))}.rf-text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.rf-text-yellow-400{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity,1))}.rf-text-yellow-500{--tw-text-opacity:1;color:rgb(234 179 8/var(--tw-text-opacity,1))}.rf-text-yellow-600{--tw-text-opacity:1;color:rgb(202 138 4/var(--tw-text-opacity,1))}.rf-text-yellow-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-70{opacity:.7}.rf-opacity-75{opacity:.75}.rf-shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.rf-shadow,.rf-shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.rf-shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.rf-shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.rf-shadow-md,.rf-shadow-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-transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.rf-duration-150{transition-duration:.15s}.rf-duration-200{transition-duration:.2s}.rf-ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0) scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0) scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}.rf-slide-in-from-left-1{--tw-enter-translate-x:-0.25rem}.rf-slide-out-to-left-1{--tw-exit-translate-x:-0.25rem}.rf-duration-150{animation-duration:.15s}.rf-duration-200{animation-duration:.2s}.rf-ease-in-out{animation-timing-function:cubic-bezier(.4,0,.2,1)}.no-scrollbar::-webkit-scrollbar{display:none}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.file\\:rf-border-0::file-selector-button{border-width:0}.file\\:rf-bg-transparent::file-selector-button{background-color:transparent}.file\\:rf-text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\\:rf-font-medium::file-selector-button{font-weight:500}.placeholder\\:rf-text-zinc-500::-moz-placeholder{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.placeholder\\:rf-text-zinc-500::placeholder{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.hover\\:rf-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-orange-100:hover{--tw-bg-opacity:1;background-color:rgb(255 237 213/var(--tw-bg-opacity,1))}.hover\\:rf-bg-red-100:hover{--tw-bg-opacity:1;background-color:rgb(254 226 226/var(--tw-bg-opacity,1))}.hover\\:rf-bg-red-500\\/90:hover{background-color:rgba(239,68,68,.9)}.hover\\:rf-bg-slate-200:hover{--tw-bg-opacity:1;background-color:rgb(226 232 240/var(--tw-bg-opacity,1))}.hover\\:rf-bg-zinc-100:hover{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.hover\\:rf-bg-zinc-100\\/80:hover{background-color:hsla(240,5%,96%,.8)}.hover\\:rf-bg-zinc-900\\/90:hover{background-color:rgba(24,24,27,.9)}.hover\\:rf-text-blue-800:hover{--tw-text-opacity:1;color:rgb(30 64 175/var(--tw-text-opacity,1))}.hover\\:rf-text-gray-700:hover{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.hover\\:rf-text-red-400:hover{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.hover\\:rf-text-slate-800:hover{--tw-text-opacity:1;color:rgb(30 41 59/var(--tw-text-opacity,1))}.hover\\:rf-text-slate-900:hover{--tw-text-opacity:1;color:rgb(15 23 42/var(--tw-text-opacity,1))}.hover\\:rf-text-zinc-900:hover{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.hover\\:rf-underline:hover{text-decoration-line:underline}.focus\\:rf-bg-gray-100:focus{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.focus\\:rf-bg-zinc-100:focus{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.focus\\:rf-text-gray-900:focus{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.focus\\:rf-text-zinc-900:focus{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.focus\\:rf-outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\\:rf-ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\\:rf-ring-blue-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.focus\\:rf-ring-ring:focus{--tw-ring-color:hsl(var(--ring))}.focus\\:rf-ring-offset-2:focus{--tw-ring-offset-width:2px}.focus-visible\\:rf-outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\\:rf-ring-1:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\\:rf-ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\\:rf-ring-zinc-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:hover .group-hover\\:rf-opacity-100,.rf-group\\/bar:hover .group-hover\\/bar\\:rf-opacity-100{opacity:1}.rf-peer:disabled~.peer-disabled\\:rf-cursor-not-allowed{cursor:not-allowed}.rf-peer:disabled~.peer-disabled\\:rf-opacity-70{opacity:.7}.data-\\[disabled\\=true\\]\\:rf-pointer-events-none[data-disabled=true],.data-\\[disabled\\]\\:rf-pointer-events-none[data-disabled]{pointer-events:none}.data-\\[side\\=bottom\\]\\:rf-translate-y-1[data-side=bottom]{--tw-translate-y:0.25rem}.data-\\[side\\=bottom\\]\\:rf-translate-y-1[data-side=bottom],.data-\\[side\\=left\\]\\:-rf-translate-x-1[data-side=left]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\\[side\\=left\\]\\:-rf-translate-x-1[data-side=left]{--tw-translate-x:-0.25rem}.data-\\[side\\=right\\]\\:rf-translate-x-1[data-side=right]{--tw-translate-x:0.25rem}.data-\\[side\\=right\\]\\:rf-translate-x-1[data-side=right],.data-\\[side\\=top\\]\\:-rf-translate-y-1[data-side=top]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\\[side\\=top\\]\\:-rf-translate-y-1[data-side=top]{--tw-translate-y:-0.25rem}.data-\\[selected\\=true\\]\\:rf-bg-zinc-100[data-selected=true]{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.data-\\[state\\=active\\]\\:rf-bg-white[data-state=active]{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.data-\\[state\\=checked\\]\\:rf-bg-zinc-900[data-state=checked]{--tw-bg-opacity:1;background-color:rgb(24 24 27/var(--tw-bg-opacity,1))}.data-\\[state\\=open\\]\\:rf-bg-zinc-100[data-state=open]{--tw-bg-opacity:1;background-color:rgb(244 244 245/var(--tw-bg-opacity,1))}.data-\\[selected\\=true\\]\\:rf-text-zinc-900[data-selected=true]{--tw-text-opacity:1;color:rgb(24 24 27/var(--tw-text-opacity,1))}.data-\\[state\\=active\\]\\:rf-text-zinc-950[data-state=active]{--tw-text-opacity:1;color:rgb(9 9 11/var(--tw-text-opacity,1))}.data-\\[state\\=checked\\]\\:rf-text-zinc-50[data-state=checked]{--tw-text-opacity:1;color:rgb(250 250 250/var(--tw-text-opacity,1))}.data-\\[disabled\\=true\\]\\:rf-opacity-50[data-disabled=true],.data-\\[disabled\\]\\:rf-opacity-50[data-disabled]{opacity:.5}.data-\\[state\\=active\\]\\:rf-shadow[data-state=active]{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.data-\\[state\\=open\\]\\:rf-animate-in[data-state=open]{animation-duration:.15s;animation-name:enter;--tw-enter-opacity:initial;--tw-enter-scale:initial;--tw-enter-rotate:initial;--tw-enter-translate-x:initial;--tw-enter-translate-y:initial}.data-\\[state\\=closed\\]\\:rf-animate-out[data-state=closed]{animation-duration:.15s;animation-name:exit;--tw-exit-opacity:initial;--tw-exit-scale:initial;--tw-exit-rotate:initial;--tw-exit-translate-x:initial;--tw-exit-translate-y:initial}.data-\\[state\\=closed\\]\\:rf-fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\\[state\\=open\\]\\:rf-fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\\[state\\=closed\\]\\:rf-zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\\[state\\=open\\]\\:rf-zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\\[side\\=bottom\\]\\:rf-slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:-0.5rem}.data-\\[side\\=left\\]\\:rf-slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:0.5rem}.data-\\[side\\=right\\]\\:rf-slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:-0.5rem}.data-\\[side\\=top\\]\\:rf-slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:0.5rem}.data-\\[state\\=closed\\]\\:rf-slide-out-to-left-1\\/2[data-state=closed]{--tw-exit-translate-x:-50%}.data-\\[state\\=closed\\]\\:rf-slide-out-to-top-\\[48\\%\\][data-state=closed]{--tw-exit-translate-y:-48%}.data-\\[state\\=open\\]\\:rf-slide-in-from-left-1\\/2[data-state=open]{--tw-enter-translate-x:-50%}.data-\\[state\\=open\\]\\:rf-slide-in-from-top-\\[48\\%\\][data-state=open]{--tw-enter-translate-y:-48%}.dark\\:rf-border-zinc-50:is(.rf-dark *){--tw-border-opacity:1;border-color:rgb(250 250 250/var(--tw-border-opacity,1))}.dark\\:rf-border-zinc-800:is(.rf-dark *){--tw-border-opacity:1;border-color:rgb(39 39 42/var(--tw-border-opacity,1))}.dark\\:rf-bg-gray-700:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(55 65 81/var(--tw-bg-opacity,1))}.dark\\:rf-bg-gray-800:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(31 41 55/var(--tw-bg-opacity,1))}.dark\\:rf-bg-red-900:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity,1))}.dark\\:rf-bg-zinc-50:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(250 250 250/var(--tw-bg-opacity,1))}.dark\\:rf-bg-zinc-800:is(.rf-dark *){--tw-bg-opacity:1;background-color:rgb(39 39 42/var(--tw-bg-opacity,1))}.dark\\:rf-bg-zinc-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-mt-4{margin-top:1rem}.sm\\:rf-block{display:block}.sm\\:rf-inline{display:inline}.sm\\:rf-grid{display:grid}.sm\\:rf-hidden{display:none}.sm\\:rf-h-5{height:1.25rem}.sm\\:rf-w-1\\/2{width:50%}.sm\\:rf-w-5{width:1.25rem}.sm\\:rf-w-\\[90vw\\]{width:90vw}.sm\\:rf-w-auto{width:auto}.sm\\:rf-max-w-\\[500px\\]{max-width:500px}.sm\\:rf-max-w-md{max-width:28rem}.sm\\:rf-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\\:rf-grid-cols-\\[1fr_auto\\]{grid-template-columns:1fr auto}.sm\\:rf-flex-row{flex-direction:row}.sm\\:rf-items-center{align-items:center}.sm\\:rf-justify-end{justify-content:flex-end}.sm\\:rf-gap-3{gap:.75rem}.sm\\:rf-gap-4{gap:1rem}.sm\\:rf-space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.sm\\:rf-justify-self-end{justify-self:end}.sm\\:rf-rounded-lg{border-radius:var(--radius)}.sm\\:rf-p-3{padding:.75rem}.sm\\:rf-p-6{padding:1.5rem}.sm\\:rf-px-4{padding-left:1rem;padding-right:1rem}.sm\\:rf-px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\\:rf-py-6{padding-bottom:1.5rem;padding-top:1.5rem}.sm\\:rf-text-left{text-align:left}.sm\\:rf-text-right{text-align:right}.sm\\:rf-text-2xl{font-size:1.5rem;line-height:2rem}.sm\\:rf-text-base{font-size:1rem;line-height:1.5rem}.sm\\:rf-text-sm{font-size:.875rem;line-height:1.25rem}.sm\\:rf-text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width:768px){.md\\:rf-w-auto{width:auto}.md\\:rf-max-w-\\[660px\\]{max-width:660px}.md\\:rf-max-w-lg{max-width:32rem}.md\\:rf-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\\:rf-p-8{padding:2rem}.md\\:rf-py-8{padding-bottom:2rem;padding-top:2rem}.md\\:rf-text-3xl{font-size:1.875rem;line-height:2.25rem}}@media (min-width:1024px){.lg\\:rf-max-w-\\[720px\\]{max-width:720px}.lg\\:rf-max-w-xl{max-width:36rem}}@media (min-width:1280px){.xl\\:rf-max-w-\\[800px\\]{max-width:800px}}.\\[\\&\\>span\\]\\:rf-line-clamp-1>span{display:-webkit-box;overflow:hidden;-webkit-box-orient:vertical;-webkit-line-clamp:1}.\\[\\&\\>svg\\]\\:rf-size-4>svg{height:1rem;width:1rem}.\\[\\&\\>svg\\]\\:rf-shrink-0>svg{flex-shrink:0}.\\[\\&\\>svg\\]\\:rf-text-red-300>svg{--tw-text-opacity:1;color:rgb(252 165 165/var(--tw-text-opacity,1))}.\\[\\&\\>svg\\]\\:hover\\:rf-text-red-400:hover>svg{--tw-text-opacity:1;color:rgb(248 113 113/var(--tw-text-opacity,1))}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-py-1\\.5 [cmdk-group-heading]{padding-bottom:.375rem;padding-top:.375rem}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-font-medium [cmdk-group-heading]{font-weight:500}.\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-text-zinc-500 [cmdk-group-heading]{--tw-text-opacity:1;color:rgb(113 113 122/var(--tw-text-opacity,1))}.dark\\:\\[\\&_\\[cmdk-group-heading\\]\\]\\:rf-text-zinc-400 [cmdk-group-heading]:is(.rf-dark *){--tw-text-opacity:1;color:rgb(161 161 170/var(--tw-text-opacity,1))}.\\[\\&_\\[cmdk-group\\]\\:not\\(\\[hidden\\]\\)_\\~\\[cmdk-group\\]\\]\\:rf-pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.\\[\\&_\\[cmdk-group\\]\\]\\:rf-px-2 [cmdk-group]{padding-left:.5rem;padding-right:.5rem}.\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:rf-h-5 [cmdk-input-wrapper] svg{height:1.25rem}.\\[\\&_\\[cmdk-input-wrapper\\]_svg\\]\\:rf-w-5 [cmdk-input-wrapper] svg{width:1.25rem}.\\[\\&_\\[cmdk-input\\]\\]\\:rf-h-12 [cmdk-input]{height:3rem}.\\[\\&_\\[cmdk-item\\]\\]\\:rf-px-2 [cmdk-item]{padding-left:.5rem;padding-right:.5rem}.\\[\\&_\\[cmdk-item\\]\\]\\:rf-py-3 [cmdk-item]{padding-bottom:.75rem;padding-top:.75rem}.\\[\\&_\\[cmdk-item\\]_svg\\]\\:rf-h-5 [cmdk-item] svg{height:1.25rem}.\\[\\&_\\[cmdk-item\\]_svg\\]\\:rf-w-5 [cmdk-item] svg{width:1.25rem}.\\[\\&_svg\\]\\:rf-pointer-events-none svg{pointer-events:none}.\\[\\&_svg\\]\\:rf-size-4 svg{height:1rem;width:1rem}.\\[\\&_svg\\]\\:rf-shrink-0 svg{flex-shrink:0}',b5=()=>{$.useEffect(()=>{if(document.querySelector('style[data-styles="tscircuit-runframe"]'))return;const A=document.createElement("style");A.setAttribute("data-styles","tscircuit-runframe"),A.textContent=QMt,document.head.appendChild(A)},[])},lMt=t=>{$.useEffect(()=>(t?document.body.style.overflow="hidden":document.body.style.overflow="",()=>{document.body.style.overflow=""}),[t])};function ON(t,A){const[e,i]=$.useState(()=>{try{const o=window.localStorage.getItem(t);return o?JSON.parse(o):A}catch(o){return console.error("Error reading from localStorage:",o),A}});return $.useEffect(()=>{try{window.localStorage.setItem(t,JSON.stringify(e))}catch(o){console.error("Error writing to localStorage:",o)}},[t,e]),[e,i]}const ote=t=>`hsl(${wp.indexOf(t)*137.5%360}, 70%, 50%)`,EMt=({phaseTimings:t})=>{if(!t)return null;const A=Object.values(t).reduce((e,i)=>e+i,0);return Z.jsxs("div",{className:"rf-space-y-2 rf-w-full rf-px-4",children:[Z.jsx("div",{className:"rf-relative rf-h-8 rf-flex rf-rounded-sm",children:wp.map(e=>{const i=t[e]||0,o=i/A*100;return Z.jsx("div",{className:"rf-group/bar rf-relative rf-overflow-visible",style:{width:`${o}%`,backgroundColor:ote(e)},children:Z.jsxs("div",{className:"rf-opacity-0 group-hover/bar:rf-opacity-100 rf-transition-opacity rf-absolute rf-bottom-full rf-left-1/2 rf-transform -rf-translate-x-1/2 rf-mb-2 rf-px-2 rf-py-1 rf-text-xs rf-whitespace-nowrap rf-rounded rf-bg-gray-900 rf-text-white rf-pointer-events-none",children:[e,": ",i.toFixed(1),"ms"]})},e)})}),Z.jsxs("div",{className:"rf-text-xs rf-text-gray-500",children:["Total: ",A.toFixed(2),"ms"]})]})},hMt=t=>{if(t instanceof Blob)return t;if(t==null)return"";if(typeof t=="string")return t;if(typeof t=="object")try{return JSON.stringify(t,null,2)}catch{return String(t)}return String(t)},uMt=({renderLog:t,onRerunWithDebug:A})=>{const[e,i]=$.useState("chronological"),[o,n]=$.useState(""),s=[{value:"",label:"None"},{value:"DEBUG=Group_doInitialSchematicTraceRender",label:"DEBUG=Group_doInitialSchematicTraceRender"},{value:"DEBUG=Group_doInitialSchematicLayoutMatchpack",label:"DEBUG=Group_doInitialSchematicLayoutMatchpack"},{value:"DEBUG=Group_doInitialPcbLayoutPack",label:"DEBUG=Group_doInitialPcbLayoutPack"}];if(!t)return Z.jsxs("div",{className:"rf-p-4 rf-bg-gray-100 rf-rounded-md",children:[Z.jsx("div",{className:"rf-mb-4",children:"No render log, make sure this tab is open when you render"}),A&&Z.jsxs("div",{className:"rf-flex rf-gap-2 rf-items-center",children:[Z.jsx("select",{value:o,onChange:a=>n(a.target.value),className:"rf-px-3 rf-py-1 rf-border rf-rounded rf-text-xs rf-bg-white",children:s.map(a=>Z.jsx("option",{value:a.value,children:a.label},a.value))}),Z.jsx(Ng,{onClick:()=>A(o),size:"sm",className:"rf-text-xs",children:"Rerun Render with Debug"})]})]});const r=Object.entries(t?.phaseTimings??{});e==="chronological"?r.sort((a,I)=>wp.indexOf(a[0])-wp.indexOf(I[0])):r.sort((a,I)=>I[1]-a[1]);const g=r.reduce((a,[I,c])=>a+c,0);return Z.jsxs("div",{className:"rf-bg-white",children:[Z.jsxs("div",{className:"rf-flex rf-justify-between rf-items-center rf-mb-4",children:[Z.jsx("div",{children:"Render Logs"}),Z.jsxs("div",{className:"rf-flex rf-gap-4 rf-items-center",children:[A&&Z.jsxs("div",{className:"rf-flex rf-gap-2 rf-items-center",children:[Z.jsx("select",{value:o,onChange:a=>n(a.target.value),className:"rf-px-3 rf-py-1 rf-border rf-rounded rf-text-xs rf-bg-white",children:s.map(a=>Z.jsx("option",{value:a.value,children:a.label},a.value))}),Z.jsx(Ng,{onClick:()=>A(o),size:"sm",className:"rf-text-xs",children:"Rerun Render with Debug"})]}),Z.jsx("div",{className:"rf-flex rf-gap-2 rf-items-center",children:Z.jsxs("select",{onChange:a=>{if(a.target.value){const I=t?.debugOutputs?.find(c=>c.name===a.target.value);if(I){const c=hMt(I.content),B=c instanceof Blob?c:new Blob([c],{type:"text/plain"}),C=URL.createObjectURL(B),Q=document.createElement("a");Q.href=C,Q.download=`debug-${I.name}.txt`,document.body.appendChild(Q),Q.click(),document.body.removeChild(Q),URL.revokeObjectURL(C)}a.target.value=""}},disabled:!t?.debugOutputs||t.debugOutputs.length===0,className:"rf-px-3 rf-py-1 rf-border rf-rounded rf-text-xs rf-bg-white disabled:rf-opacity-50 disabled:rf-cursor-not-allowed",children:[Z.jsx("option",{value:"",children:"Download Debug Output"}),t?.debugOutputs?.map(a=>Z.jsx("option",{value:a.name,children:a.name},a.name))]})}),Z.jsxs("div",{className:"rf-flex rf-text-xs rf-items-center",children:[Z.jsx("div",{className:"rf-mr-2",children:"Sort by:"}),Z.jsxs("select",{value:e,onChange:a=>i(a.target.value),className:"rf-px-2 rf-py-1 rf-border rf-rounded rf-text-xs",children:[Z.jsx("option",{value:"chronological",children:"Phase Order"}),Z.jsx("option",{value:"longest",children:"Duration"})]})]})]})]}),Z.jsx(EMt,{phaseTimings:t.phaseTimings}),Z.jsxs("table",{className:"rf-w-full rf-text-xs",children:[Z.jsx("thead",{children:Z.jsxs("tr",{children:[Z.jsx("th",{className:"rf-text-left rf-p-2",children:"Phase Order"}),Z.jsx("th",{className:"rf-text-left rf-p-2",children:"Phase"}),Z.jsx("th",{className:"rf-text-left rf-p-2",children:"Duration (ms)"})]})}),Z.jsx("tbody",{children:r.map(([a,I])=>Z.jsxs("tr",{children:[Z.jsx("td",{className:"rf-p-2",children:wp.indexOf(a)}),Z.jsx("td",{className:"rf-p-2",children:a}),Z.jsx("td",{className:"rf-p-2",children:Z.jsx("div",{className:"rf-w-8",children:Z.jsx("div",{className:"rf-h-2 rf-rounded-sm",style:{backgroundColor:ote(a),width:`${I/g*100}%`}})})}),Z.jsx("td",{className:"rf-p-2",children:Z.jsxs("div",{className:"rf-flex w-full",children:[Z.jsxs("span",{className:"rf-flex-grow",children:[I,"ms"]}),Z.jsxs("span",{className:"rf-text-gray-500 rf-pr-2",children:[(I/g*100).toFixed(1),"%"]})]})})]},a))})]})]})},nte=({errorMessage:t,errorStack:A,circuitJsonErrors:e})=>{$.useEffect(()=>{if(t){const i=new Error(t);A&&(i.stack=A);try{W4.captureException(i)}catch{}}},[t,A]),$.useEffect(()=>{if(e&&e.length>0)for(const i of e){const o=new Error(i.message||"Circuit JSON Error");i.stack&&(o.stack=i.stack);try{W4.captureException(o,{error_type:i.type})}catch{}}},[e])},ste="0.0.1388",dMt={version:ste},k5=ONA()(WNA(t=>({lastRunEvalVersion:void 0,setLastRunEvalVersion:A=>{t({lastRunEvalVersion:A})}}),{name:"runframe-runner-store"})),pMt=t=>{const[A,e]=$.useState([]),[i,o]=$.useState(null),[n,s]=$.useState(""),[r,g]=ON("eval-version-selection",null),a=k5(C=>C.setLastRunEvalVersion),I=k5(C=>C.lastRunEvalVersion);return $.useEffect(()=>{t&&fetch("https://data.jsdelivr.com/v1/package/npm/@tscircuit/eval").then(C=>C.json()).then(C=>{if(Array.isArray(C?.versions)){let Q=[...C.versions];C.tags?.latest&&(o(C.tags.latest),Q=Q.filter(l=>l!==C.tags.latest)),e(Q)}}).catch(()=>{})},[t]),$.useEffect(()=>{t&&(r?(window.TSCIRCUIT_LATEST_EVAL_VERSION=r,a(r)):i&&(window.TSCIRCUIT_LATEST_EVAL_VERSION=i,a(i)))},[t,r,i]),{versions:$.useMemo(()=>A.filter(C=>C.includes(n)).slice(0,50),[A,n]),latestVersion:i,lastRunEvalVersion:I,search:n,setSearch:s,selectVersion:C=>{g(C),s("")}}},fMt=({snippetNames:t,onSelect:A,onCancel:e,isOpen:i})=>{const[o,n]=$.useState(""),[s,r]=$.useState("");if(!i)return null;const g=t.filter(c=>c.toLowerCase().includes(s.toLowerCase())),a=s&&!t.includes(s),I=c=>{c.key==="Enter"&&(g.length===1?n(g[0]):a&&n(s))};return Z.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:Z.jsxs("div",{className:"rf-bg-white rf-rounded-lg rf-p-6 rf-w-96",children:[Z.jsx("h2",{className:"rf-text-lg rf-font-semibold rf-mb-4",children:"Select Snippet"}),Z.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:c=>r(c.target.value),onKeyDown:I}),Z.jsxs("div",{className:"rf-h-60 rf-overflow-y-auto",children:[g.map(c=>Z.jsx("button",{type:"button",className:`w-full text-left px-4 py-2 rounded hover:bg-gray-100 ${o===c?"bg-blue-50":""}`,onClick:()=>n(c),children:c},c)),a&&Z.jsxs("button",{type:"button",className:`w-full text-left px-4 py-2 rounded hover:bg-gray-100 text-blue-500 ${o===s?"bg-blue-50":""}`,onClick:()=>n(s),children:['Create new "',s,'"']})]}),Z.jsxs("div",{className:"rf-mt-4 rf-flex rf-justify-end rf-gap-2",children:[Z.jsx("button",{type:"button",className:"rf-px-4 rf-py-2 rf-text-gray-600 rf-hover:text-gray-800",onClick:e,children:"Cancel"}),Z.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:()=>o&&A(o),disabled:!o,children:o===s?`Create "${o}"`:`Save to ${o}`})]})]})})},yMt=t=>{const A=$.useRef(null),e=xc(i=>i.recentEvents);$.useEffect(()=>{if(e.length===0)return;const i=e[0];i.event_id!==A.current&&(t(i),A.current=i.event_id)},[e,t])};var G5="Dialog",[rte,gte]=jw(G5),[wMt,Qw]=rte(G5),ate=t=>{const{__scopeDialog:A,children:e,open:i,defaultOpen:o,onOpenChange:n,modal:s=!0}=t,r=$.useRef(null),g=$.useRef(null),[a,I]=SG({prop:i,defaultProp:o??!1,onChange:n,caller:G5});return Z.jsx(wMt,{scope:A,triggerRef:r,contentRef:g,contentId:ou(),titleId:ou(),descriptionId:ou(),open:a,onOpenChange:I,onOpenToggle:$.useCallback(()=>I(c=>!c),[I]),modal:s,children:e})};ate.displayName=G5;var Ite="DialogTrigger",cte=$.forwardRef((t,A)=>{const{__scopeDialog:e,...i}=t,o=Qw(Ite,e),n=BB(A,o.triggerRef);return Z.jsx(sr.button,{type:"button","aria-haspopup":"dialog","aria-expanded":o.open,"aria-controls":o.contentId,"data-state":XlA(o.open),...i,ref:n,onClick:rn(t.onClick,o.onOpenToggle)})});cte.displayName=Ite;var jlA="DialogPortal",[DMt,Bte]=rte(jlA,{forceMount:void 0}),Cte=t=>{const{__scopeDialog:A,forceMount:e,children:i,container:o}=t,n=Qw(jlA,A);return Z.jsx(DMt,{scope:A,forceMount:e,children:$.Children.map(i,s=>Z.jsx(q0,{present:e||n.open,children:Z.jsx($O,{asChild:!0,container:o,children:s})}))})};Cte.displayName=jlA;var x5="DialogOverlay",Qte=$.forwardRef((t,A)=>{const e=Bte(x5,t.__scopeDialog),{forceMount:i=e.forceMount,...o}=t,n=Qw(x5,t.__scopeDialog);return n.modal?Z.jsx(q0,{present:i||n.open,children:Z.jsx(SMt,{...o,ref:A})}):null});Qte.displayName=x5;var mMt=mG("DialogOverlay.RemoveScroll"),SMt=$.forwardRef((t,A)=>{const{__scopeDialog:e,...i}=t,o=Qw(x5,e);return Z.jsx(r8,{as:mMt,allowPinchZoom:!0,shards:[o.contentRef],children:Z.jsx(sr.div,{"data-state":XlA(o.open),...i,ref:A,style:{pointerEvents:"auto",...i.style}})})}),Rx="DialogContent",lte=$.forwardRef((t,A)=>{const e=Bte(Rx,t.__scopeDialog),{forceMount:i=e.forceMount,...o}=t,n=Qw(Rx,t.__scopeDialog);return Z.jsx(q0,{present:i||n.open,children:n.modal?Z.jsx(bMt,{...o,ref:A}):Z.jsx(kMt,{...o,ref:A})})});lte.displayName=Rx;var bMt=$.forwardRef((t,A)=>{const e=Qw(Rx,t.__scopeDialog),i=$.useRef(null),o=BB(A,e.contentRef,i);return $.useEffect(()=>{const n=i.current;if(n)return KCA(n)},[]),Z.jsx(Ete,{...t,ref:o,trapFocus:e.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:rn(t.onCloseAutoFocus,n=>{n.preventDefault(),e.triggerRef.current?.focus()}),onPointerDownOutside:rn(t.onPointerDownOutside,n=>{const s=n.detail.originalEvent,r=s.button===0&&s.ctrlKey===!0;(s.button===2||r)&&n.preventDefault()}),onFocusOutside:rn(t.onFocusOutside,n=>n.preventDefault())})}),kMt=$.forwardRef((t,A)=>{const e=Qw(Rx,t.__scopeDialog),i=$.useRef(!1),o=$.useRef(!1);return Z.jsx(Ete,{...t,ref:A,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:n=>{t.onCloseAutoFocus?.(n),n.defaultPrevented||(i.current||e.triggerRef.current?.focus(),n.preventDefault()),i.current=!1,o.current=!1},onInteractOutside:n=>{t.onInteractOutside?.(n),n.defaultPrevented||(i.current=!0,n.detail.originalEvent.type==="pointerdown"&&(o.current=!0));const s=n.target;e.triggerRef.current?.contains(s)&&n.preventDefault(),n.detail.originalEvent.type==="focusin"&&o.current&&n.preventDefault()}})}),Ete=$.forwardRef((t,A)=>{const{__scopeDialog:e,trapFocus:i,onOpenAutoFocus:o,onCloseAutoFocus:n,...s}=t,r=Qw(Rx,e),g=$.useRef(null),a=BB(A,g);return wCA(),Z.jsxs(Z.Fragment,{children:[Z.jsx(JO,{asChild:!0,loop:!0,trapped:i,onMountAutoFocus:o,onUnmountAutoFocus:n,children:Z.jsx(YO,{role:"dialog",id:r.contentId,"aria-describedby":r.descriptionId,"aria-labelledby":r.titleId,"data-state":XlA(r.open),...s,ref:a,onDismiss:()=>r.onOpenChange(!1)})}),Z.jsxs(Z.Fragment,{children:[Z.jsx(xMt,{titleId:r.titleId}),Z.jsx(_Mt,{contentRef:g,descriptionId:r.descriptionId})]})]})}),zlA="DialogTitle",hte=$.forwardRef((t,A)=>{const{__scopeDialog:e,...i}=t,o=Qw(zlA,e);return Z.jsx(sr.h2,{id:o.titleId,...i,ref:A})});hte.displayName=zlA;var ute="DialogDescription",dte=$.forwardRef((t,A)=>{const{__scopeDialog:e,...i}=t,o=Qw(ute,e);return Z.jsx(sr.p,{id:o.descriptionId,...i,ref:A})});dte.displayName=ute;var pte="DialogClose",fte=$.forwardRef((t,A)=>{const{__scopeDialog:e,...i}=t,o=Qw(pte,e);return Z.jsx(sr.button,{type:"button",...i,ref:A,onClick:rn(t.onClick,()=>o.onOpenChange(!1))})});fte.displayName=pte;function XlA(t){return t?"open":"closed"}var yte="DialogTitleWarning",[GMt,wte]=WTe(yte,{contentName:Rx,titleName:zlA,docsSlug:"dialog"}),xMt=({titleId:t})=>{const A=wte(yte),e=`\`${A.contentName}\` requires a \`${A.titleName}\` for the component to be accessible for screen reader users.
5888
5888
 
5889
5889
  If you want to hide the \`${A.titleName}\`, you can wrap it with our VisuallyHidden component.
5890
5890
 
package/package.json CHANGED
@@ -3,14 +3,13 @@
3
3
  "main": "dist/index.js",
4
4
  "types": "dist/index.d.ts",
5
5
  "type": "module",
6
- "version": "0.0.1043",
6
+ "version": "0.0.1044-libonly",
7
7
  "repository": {
8
8
  "type": "git",
9
9
  "url": "https://github.com/tscircuit/tscircuit"
10
10
  },
11
11
  "files": [
12
12
  "dist",
13
- "cli.mjs",
14
13
  "globals.d.ts"
15
14
  ],
16
15
  "scripts": {
@@ -29,10 +28,6 @@
29
28
  },
30
29
  "./browser": "./dist/browser.min.js"
31
30
  },
32
- "bin": {
33
- "tsci": "cli.mjs",
34
- "tscircuit": "cli.mjs"
35
- },
36
31
  "devDependencies": {
37
32
  "@types/bun": "^1.2.16",
38
33
  "esbuild": "^0.20.2",
@@ -54,7 +49,6 @@
54
49
  "@tscircuit/checks": "^0.0.87",
55
50
  "@tscircuit/circuit-json-flex": "^0.0.3",
56
51
  "@tscircuit/circuit-json-util": "^0.0.73",
57
- "@tscircuit/cli": "^0.1.638",
58
52
  "@tscircuit/copper-pour-solver": "^0.0.14",
59
53
  "@tscircuit/core": "^0.0.924",
60
54
  "@tscircuit/eval": "^0.0.537",
@@ -65,7 +59,7 @@
65
59
  "@tscircuit/miniflex": "^0.0.4",
66
60
  "@tscircuit/ngspice-spice-engine": "^0.0.8",
67
61
  "@tscircuit/props": "^0.0.427",
68
- "@tscircuit/runframe": "^0.0.1388",
62
+ "@tscircuit/runframe": "^0.0.1389",
69
63
  "@tscircuit/schematic-match-adapt": "^0.0.16",
70
64
  "@tscircuit/schematic-trace-solver": "^v0.0.45",
71
65
  "@tscircuit/simple-3d-svg": "^0.0.41",
@@ -106,4 +100,4 @@
106
100
  "tslib": "^2.8.1",
107
101
  "zod": "^3.25.67"
108
102
  }
109
- }
103
+ }
package/cli.mjs DELETED
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env bun
2
-
3
- import { createRequire } from "node:module";
4
- const require = createRequire(import.meta.url);
5
-
6
- // Use require to import package.json
7
- const packageJson = require("./package.json");
8
- global.TSCIRCUIT_VERSION = packageJson.version;
9
-
10
- async function main() {
11
- await import("@tscircuit/cli");
12
- }
13
-
14
- main();