d6856b5a76
Source ref: develop Source commit:1ad217cfecTarget branch: main Previous target:02ecd59dd1Release base:02ecd59dd1Previous source:290ecd21a0Included commits since previous source:1ad217cfMerge pull request #306 from earthtojake/release/0.4.210409d80aRelease 0.4.210cbb1b01Merge pull request #265 from knewnothing-git/add-dfam-check-skill757591acfix(dfam-check): carry p05_mm through per_bodyf666a97dfix(dfam-check): guard degenerate meshes, cover advertised formatscb6f984bfix(dfam-check): address maintainer review on #265a63a4325test(dfam-check): verify measurements against known-by-construction parts27f92ee9feat(dfam-check): measure meshes against per-process DfAM limits
1007 lines
1.0 MiB
Plaintext
1007 lines
1.0 MiB
Plaintext
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/parseUrdf-lbXYJY8h.js","assets/vendor-react-7jnMmQ9s.js","assets/vendor-ui-KJd670JQ.js","assets/vendor-icons-cUeeSVuj.js","assets/vendor-three-C9GQa7gb.js","assets/parseSdf-BBt1QL9V.js"])))=>i.map(i=>d[i]);
|
||
import{r as h,j as d,i as k3}from"./vendor-react-7jnMmQ9s.js";import{S as o2,T as i2,C as W0,O as s2,a as a2,P as l2,R as D3,b as c2,D as u2,c as L3,d as F3,e as j3,A as z3,f as B3,g as V3,h as $3,i as d2,j as G3,k as U3,I as H3,l as W3,m as K3,n as q3,o as Y3,p as X3,q as Z3,r as J3,s as Q3,t as eB,u as tB,v as nB,w as rB,x as oB,y as iB,z as sB,B as aB,E as lB,F as cB,G as uB,H as dB,J as fB,K as mB,L as pB,M as hB,N as gB,Q as yB,U as bB,V as xB,W as SB,X as EB,Y as wB,Z as vB,_ as AB,$ as CB,a0 as MB,a1 as IB,a2 as NB,a3 as TB,a4 as _B,a5 as RB,a6 as PB,a7 as OB,a8 as kB,a9 as DB,aa as LB,ab as FB,ac as jB,ad as zB,ae as BB,af as VB,ag as $B,ah as GB,ai as UB,aj as HB,ak as WB}from"./vendor-ui-KJd670JQ.js";import{X as Kc,P as KB,C as fm,L as qB,a as YB,B as XB,b as ZB,D as JB,F as QB,c as e5,T as t5,d as iv,e as f2,f as n5,g as r5,h as o5,E as sv,i as av,S as i5,j as m2,k as s5,l as a5,m as lv,n as qu,o as l5,p as p2,M as c5,q as u5,R as d5,r as Vf,s as h2,A as f5,t as m5,u as p5,v as Yu,w as g2,x as y2,y as h5,z as g5,G as y5,H as b5,U as x5,I as S5,J as E5,K as b2,N as w5,O as v5,Q as A5,V as x2,W as C5,Y as M5,Z as I5,_ as N5,$ as T5,a0 as S2,a1 as _5,a2 as R5,a3 as P5,a4 as O5,a5 as k5,a6 as D5}from"./vendor-icons-cUeeSVuj.js";import{M as $r,V as Ue,a as Rl,S as E2,B as bc,P as w2,L as Il,T as _p,b as v2,c as Ha,d as L5,D as A2,F as VM,e as $b,f as F5,R as j5,g as z5,G as $M,h as sy,i as oS,j as GM,C as iS,E as B5,k as V5,l as $5,m as G5,n as U5,o as H5}from"./vendor-three-C9GQa7gb.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))r(o);new MutationObserver(o=>{for(const i of o)if(i.type==="childList")for(const s of i.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&r(s)}).observe(document,{childList:!0,subtree:!0});function n(o){const i={};return o.integrity&&(i.integrity=o.integrity),o.referrerPolicy&&(i.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?i.credentials="include":o.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(o){if(o.ep)return;o.ep=!0;const i=n(o);fetch(o.href,i)}})();function C2(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(n=C2(e[t]))&&(r&&(r+=" "),r+=n)}else for(n in e)e[n]&&(r&&(r+=" "),r+=n);return r}function M2(){for(var e,t,n=0,r="",o=arguments.length;n<o;n++)(e=arguments[n])&&(t=C2(e))&&(r&&(r+=" "),r+=t);return r}const UM=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,HM=M2,Xh=(e,t)=>n=>{var r;if(t?.variants==null)return HM(e,n?.class,n?.className);const{variants:o,defaultVariants:i}=t,s=Object.keys(o).map(c=>{const u=n?.[c],f=i?.[c];if(u===null)return null;const m=UM(u)||UM(f);return o[c][m]}),a=n&&Object.entries(n).reduce((c,u)=>{let[f,m]=u;return m===void 0||(c[f]=m),c},{}),l=t==null||(r=t.compoundVariants)===null||r===void 0?void 0:r.reduce((c,u)=>{let{class:f,className:m,...p}=u;return Object.entries(p).every(b=>{let[y,x]=b;return Array.isArray(x)?x.includes({...i,...a}[y]):{...i,...a}[y]===x})?[...c,f,m]:c},[]);return HM(e,s,l,n?.class,n?.className)},cv=520,W5=cv,K5=1024,q5=`(max-width: ${cv-1}px)`,Pf=Object.freeze({DESKTOP:"desktop",MOBILE:"mobile"});function K0(e){const t=Number(e);return Number.isFinite(t)?t>=W5?Pf.DESKTOP:Pf.MOBILE:Pf.DESKTOP}function sS(e){return K0(e)===Pf.MOBILE}function Y5(e){return K0(e)===Pf.DESKTOP}function X5(e){const t=Number(e);return Number.isFinite(t)?t>=cv&&t<K5:!1}function Z5(e){return Y5(e)}function J5(){const[e,t]=h.useState(()=>typeof window>"u"?!1:sS(window.innerWidth));return h.useEffect(()=>{const n=window.matchMedia(q5),r=()=>{t(sS(window.innerWidth))};return n.addEventListener("change",r),t(sS(window.innerWidth)),()=>n.removeEventListener("change",r)},[]),!!e}const Q5=(e,t)=>{const n=new Array(e.length+t.length);for(let r=0;r<e.length;r++)n[r]=e[r];for(let r=0;r<t.length;r++)n[e.length+r]=t[r];return n},eV=(e,t)=>({classGroupId:e,validator:t}),I2=(e=new Map,t=null,n)=>({nextPart:e,validators:t,classGroupId:n}),Gb="-",WM=[],tV="arbitrary..",nV=e=>{const t=oV(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:s=>{if(s.startsWith("[")&&s.endsWith("]"))return rV(s);const a=s.split(Gb),l=a[0]===""&&a.length>1?1:0;return N2(a,l,t)},getConflictingClassGroupIds:(s,a)=>{if(a){const l=r[s],c=n[s];return l?c?Q5(c,l):l:c||WM}return n[s]||WM}}},N2=(e,t,n)=>{if(e.length-t===0)return n.classGroupId;const o=e[t],i=n.nextPart.get(o);if(i){const c=N2(e,t+1,i);if(c)return c}const s=n.validators;if(s===null)return;const a=t===0?e.join(Gb):e.slice(t).join(Gb),l=s.length;for(let c=0;c<l;c++){const u=s[c];if(u.validator(a))return u.classGroupId}},rV=e=>e.slice(1,-1).indexOf(":")===-1?void 0:(()=>{const t=e.slice(1,-1),n=t.indexOf(":"),r=t.slice(0,n);return r?tV+r:void 0})(),oV=e=>{const{theme:t,classGroups:n}=e;return iV(n,t)},iV=(e,t)=>{const n=I2();for(const r in e){const o=e[r];uv(o,n,r,t)}return n},uv=(e,t,n,r)=>{const o=e.length;for(let i=0;i<o;i++){const s=e[i];sV(s,t,n,r)}},sV=(e,t,n,r)=>{if(typeof e=="string"){aV(e,t,n);return}if(typeof e=="function"){lV(e,t,n,r);return}cV(e,t,n,r)},aV=(e,t,n)=>{const r=e===""?t:T2(t,e);r.classGroupId=n},lV=(e,t,n,r)=>{if(uV(e)){uv(e(r),t,n,r);return}t.validators===null&&(t.validators=[]),t.validators.push(eV(n,e))},cV=(e,t,n,r)=>{const o=Object.entries(e),i=o.length;for(let s=0;s<i;s++){const[a,l]=o[s];uv(l,T2(t,a),n,r)}},T2=(e,t)=>{let n=e;const r=t.split(Gb),o=r.length;for(let i=0;i<o;i++){const s=r[i];let a=n.nextPart.get(s);a||(a=I2(),n.nextPart.set(s,a)),n=a}return n},uV=e=>"isThemeGetter"in e&&e.isThemeGetter===!0,dV=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,n=Object.create(null),r=Object.create(null);const o=(i,s)=>{n[i]=s,t++,t>e&&(t=0,r=n,n=Object.create(null))};return{get(i){let s=n[i];if(s!==void 0)return s;if((s=r[i])!==void 0)return o(i,s),s},set(i,s){i in n?n[i]=s:o(i,s)}}},X1="!",KM=":",fV=[],qM=(e,t,n,r,o)=>({modifiers:e,hasImportantModifier:t,baseClassName:n,maybePostfixModifierPosition:r,isExternal:o}),mV=e=>{const{prefix:t,experimentalParseClassName:n}=e;let r=o=>{const i=[];let s=0,a=0,l=0,c;const u=o.length;for(let y=0;y<u;y++){const x=o[y];if(s===0&&a===0){if(x===KM){i.push(o.slice(l,y)),l=y+1;continue}if(x==="/"){c=y;continue}}x==="["?s++:x==="]"?s--:x==="("?a++:x===")"&&a--}const f=i.length===0?o:o.slice(l);let m=f,p=!1;f.endsWith(X1)?(m=f.slice(0,-1),p=!0):f.startsWith(X1)&&(m=f.slice(1),p=!0);const b=c&&c>l?c-l:void 0;return qM(i,p,m,b)};if(t){const o=t+KM,i=r;r=s=>s.startsWith(o)?i(s.slice(o.length)):qM(fV,!1,s,void 0,!0)}if(n){const o=r;r=i=>n({className:i,parseClassName:o})}return r},pV=e=>{const t=new Map;return e.orderSensitiveModifiers.forEach((n,r)=>{t.set(n,1e6+r)}),n=>{const r=[];let o=[];for(let i=0;i<n.length;i++){const s=n[i],a=s[0]==="[",l=t.has(s);a||l?(o.length>0&&(o.sort(),r.push(...o),o=[]),r.push(s)):o.push(s)}return o.length>0&&(o.sort(),r.push(...o)),r}},hV=e=>({cache:dV(e.cacheSize),parseClassName:mV(e),sortModifiers:pV(e),...nV(e)}),gV=/\s+/,yV=(e,t)=>{const{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:o,sortModifiers:i}=t,s=[],a=e.trim().split(gV);let l="";for(let c=a.length-1;c>=0;c-=1){const u=a[c],{isExternal:f,modifiers:m,hasImportantModifier:p,baseClassName:b,maybePostfixModifierPosition:y}=n(u);if(f){l=u+(l.length>0?" "+l:l);continue}let x=!!y,S=r(x?b.substring(0,y):b);if(!S){if(!x){l=u+(l.length>0?" "+l:l);continue}if(S=r(b),!S){l=u+(l.length>0?" "+l:l);continue}x=!1}const E=m.length===0?"":m.length===1?m[0]:i(m).join(":"),C=p?E+X1:E,A=C+S;if(s.indexOf(A)>-1)continue;s.push(A);const N=o(S,x);for(let w=0;w<N.length;++w){const _=N[w];s.push(C+_)}l=u+(l.length>0?" "+l:l)}return l},bV=(...e)=>{let t=0,n,r,o="";for(;t<e.length;)(n=e[t++])&&(r=_2(n))&&(o&&(o+=" "),o+=r);return o},_2=e=>{if(typeof e=="string")return e;let t,n="";for(let r=0;r<e.length;r++)e[r]&&(t=_2(e[r]))&&(n&&(n+=" "),n+=t);return n},xV=(e,...t)=>{let n,r,o,i;const s=l=>{const c=t.reduce((u,f)=>f(u),e());return n=hV(c),r=n.cache.get,o=n.cache.set,i=a,a(l)},a=l=>{const c=r(l);if(c)return c;const u=yV(l,n);return o(l,u),u};return i=s,(...l)=>i(bV(...l))},SV=[],Lo=e=>{const t=n=>n[e]||SV;return t.isThemeGetter=!0,t},R2=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,P2=/^\((?:(\w[\w-]*):)?(.+)\)$/i,EV=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,wV=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,vV=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,AV=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,CV=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,MV=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,sc=e=>EV.test(e),Zt=e=>!!e&&!Number.isNaN(Number(e)),ac=e=>!!e&&Number.isInteger(Number(e)),aS=e=>e.endsWith("%")&&Zt(e.slice(0,-1)),cl=e=>wV.test(e),O2=()=>!0,IV=e=>vV.test(e)&&!AV.test(e),dv=()=>!1,NV=e=>CV.test(e),TV=e=>MV.test(e),_V=e=>!Ve(e)&&!Ge(e),RV=e=>qc(e,L2,dv),Ve=e=>R2.test(e),bu=e=>qc(e,F2,IV),YM=e=>qc(e,zV,Zt),PV=e=>qc(e,z2,O2),OV=e=>qc(e,j2,dv),XM=e=>qc(e,k2,dv),kV=e=>qc(e,D2,TV),ay=e=>qc(e,B2,NV),Ge=e=>P2.test(e),Qm=e=>ad(e,F2),DV=e=>ad(e,j2),ZM=e=>ad(e,k2),LV=e=>ad(e,L2),FV=e=>ad(e,D2),ly=e=>ad(e,B2,!0),jV=e=>ad(e,z2,!0),qc=(e,t,n)=>{const r=R2.exec(e);return r?r[1]?t(r[1]):n(r[2]):!1},ad=(e,t,n=!1)=>{const r=P2.exec(e);return r?r[1]?t(r[1]):n:!1},k2=e=>e==="position"||e==="percentage",D2=e=>e==="image"||e==="url",L2=e=>e==="length"||e==="size"||e==="bg-size",F2=e=>e==="length",zV=e=>e==="number",j2=e=>e==="family-name",z2=e=>e==="number"||e==="weight",B2=e=>e==="shadow",BV=()=>{const e=Lo("color"),t=Lo("font"),n=Lo("text"),r=Lo("font-weight"),o=Lo("tracking"),i=Lo("leading"),s=Lo("breakpoint"),a=Lo("container"),l=Lo("spacing"),c=Lo("radius"),u=Lo("shadow"),f=Lo("inset-shadow"),m=Lo("text-shadow"),p=Lo("drop-shadow"),b=Lo("blur"),y=Lo("perspective"),x=Lo("aspect"),S=Lo("ease"),E=Lo("animate"),C=()=>["auto","avoid","all","avoid-page","page","left","right","column"],A=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],N=()=>[...A(),Ge,Ve],w=()=>["auto","hidden","clip","visible","scroll"],_=()=>["auto","contain","none"],I=()=>[Ge,Ve,l],R=()=>[sc,"full","auto",...I()],O=()=>[ac,"none","subgrid",Ge,Ve],F=()=>["auto",{span:["full",ac,Ge,Ve]},ac,Ge,Ve],V=()=>[ac,"auto",Ge,Ve],$=()=>["auto","min","max","fr",Ge,Ve],K=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],U=()=>["start","end","center","stretch","center-safe","end-safe"],Y=()=>["auto",...I()],D=()=>[sc,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...I()],j=()=>[sc,"screen","full","dvw","lvw","svw","min","max","fit",...I()],ee=()=>[sc,"screen","full","lh","dvh","lvh","svh","min","max","fit",...I()],X=()=>[e,Ge,Ve],ve=()=>[...A(),ZM,XM,{position:[Ge,Ve]}],q=()=>["no-repeat",{repeat:["","x","y","space","round"]}],re=()=>["auto","cover","contain",LV,RV,{size:[Ge,Ve]}],Be=()=>[aS,Qm,bu],Me=()=>["","none","full",c,Ge,Ve],He=()=>["",Zt,Qm,bu],de=()=>["solid","dashed","dotted","double"],me=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],we=()=>[Zt,aS,ZM,XM],ce=()=>["","none",b,Ge,Ve],Ee=()=>["none",Zt,Ge,Ve],Jt=()=>["none",Zt,Ge,Ve],mt=()=>[Zt,Ge,Ve],je=()=>[sc,"full",...I()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[cl],breakpoint:[cl],color:[O2],container:[cl],"drop-shadow":[cl],ease:["in","out","in-out"],font:[_V],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[cl],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[cl],shadow:[cl],spacing:["px",Zt],text:[cl],"text-shadow":[cl],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",sc,Ve,Ge,x]}],container:["container"],columns:[{columns:[Zt,Ve,Ge,a]}],"break-after":[{"break-after":C()}],"break-before":[{"break-before":C()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:N()}],overflow:[{overflow:w()}],"overflow-x":[{"overflow-x":w()}],"overflow-y":[{"overflow-y":w()}],overscroll:[{overscroll:_()}],"overscroll-x":[{"overscroll-x":_()}],"overscroll-y":[{"overscroll-y":_()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:R()}],"inset-x":[{"inset-x":R()}],"inset-y":[{"inset-y":R()}],start:[{"inset-s":R(),start:R()}],end:[{"inset-e":R(),end:R()}],"inset-bs":[{"inset-bs":R()}],"inset-be":[{"inset-be":R()}],top:[{top:R()}],right:[{right:R()}],bottom:[{bottom:R()}],left:[{left:R()}],visibility:["visible","invisible","collapse"],z:[{z:[ac,"auto",Ge,Ve]}],basis:[{basis:[sc,"full","auto",a,...I()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[Zt,sc,"auto","initial","none",Ve]}],grow:[{grow:["",Zt,Ge,Ve]}],shrink:[{shrink:["",Zt,Ge,Ve]}],order:[{order:[ac,"first","last","none",Ge,Ve]}],"grid-cols":[{"grid-cols":O()}],"col-start-end":[{col:F()}],"col-start":[{"col-start":V()}],"col-end":[{"col-end":V()}],"grid-rows":[{"grid-rows":O()}],"row-start-end":[{row:F()}],"row-start":[{"row-start":V()}],"row-end":[{"row-end":V()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":$()}],"auto-rows":[{"auto-rows":$()}],gap:[{gap:I()}],"gap-x":[{"gap-x":I()}],"gap-y":[{"gap-y":I()}],"justify-content":[{justify:[...K(),"normal"]}],"justify-items":[{"justify-items":[...U(),"normal"]}],"justify-self":[{"justify-self":["auto",...U()]}],"align-content":[{content:["normal",...K()]}],"align-items":[{items:[...U(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...U(),{baseline:["","last"]}]}],"place-content":[{"place-content":K()}],"place-items":[{"place-items":[...U(),"baseline"]}],"place-self":[{"place-self":["auto",...U()]}],p:[{p:I()}],px:[{px:I()}],py:[{py:I()}],ps:[{ps:I()}],pe:[{pe:I()}],pbs:[{pbs:I()}],pbe:[{pbe:I()}],pt:[{pt:I()}],pr:[{pr:I()}],pb:[{pb:I()}],pl:[{pl:I()}],m:[{m:Y()}],mx:[{mx:Y()}],my:[{my:Y()}],ms:[{ms:Y()}],me:[{me:Y()}],mbs:[{mbs:Y()}],mbe:[{mbe:Y()}],mt:[{mt:Y()}],mr:[{mr:Y()}],mb:[{mb:Y()}],ml:[{ml:Y()}],"space-x":[{"space-x":I()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":I()}],"space-y-reverse":["space-y-reverse"],size:[{size:D()}],"inline-size":[{inline:["auto",...j()]}],"min-inline-size":[{"min-inline":["auto",...j()]}],"max-inline-size":[{"max-inline":["none",...j()]}],"block-size":[{block:["auto",...ee()]}],"min-block-size":[{"min-block":["auto",...ee()]}],"max-block-size":[{"max-block":["none",...ee()]}],w:[{w:[a,"screen",...D()]}],"min-w":[{"min-w":[a,"screen","none",...D()]}],"max-w":[{"max-w":[a,"screen","none","prose",{screen:[s]},...D()]}],h:[{h:["screen","lh",...D()]}],"min-h":[{"min-h":["screen","lh","none",...D()]}],"max-h":[{"max-h":["screen","lh",...D()]}],"font-size":[{text:["base",n,Qm,bu]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[r,jV,PV]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",aS,Ve]}],"font-family":[{font:[DV,OV,t]}],"font-features":[{"font-features":[Ve]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[o,Ge,Ve]}],"line-clamp":[{"line-clamp":[Zt,"none",Ge,YM]}],leading:[{leading:[i,...I()]}],"list-image":[{"list-image":["none",Ge,Ve]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",Ge,Ve]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:X()}],"text-color":[{text:X()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...de(),"wavy"]}],"text-decoration-thickness":[{decoration:[Zt,"from-font","auto",Ge,bu]}],"text-decoration-color":[{decoration:X()}],"underline-offset":[{"underline-offset":[Zt,"auto",Ge,Ve]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:I()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",Ge,Ve]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",Ge,Ve]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:ve()}],"bg-repeat":[{bg:q()}],"bg-size":[{bg:re()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},ac,Ge,Ve],radial:["",Ge,Ve],conic:[ac,Ge,Ve]},FV,kV]}],"bg-color":[{bg:X()}],"gradient-from-pos":[{from:Be()}],"gradient-via-pos":[{via:Be()}],"gradient-to-pos":[{to:Be()}],"gradient-from":[{from:X()}],"gradient-via":[{via:X()}],"gradient-to":[{to:X()}],rounded:[{rounded:Me()}],"rounded-s":[{"rounded-s":Me()}],"rounded-e":[{"rounded-e":Me()}],"rounded-t":[{"rounded-t":Me()}],"rounded-r":[{"rounded-r":Me()}],"rounded-b":[{"rounded-b":Me()}],"rounded-l":[{"rounded-l":Me()}],"rounded-ss":[{"rounded-ss":Me()}],"rounded-se":[{"rounded-se":Me()}],"rounded-ee":[{"rounded-ee":Me()}],"rounded-es":[{"rounded-es":Me()}],"rounded-tl":[{"rounded-tl":Me()}],"rounded-tr":[{"rounded-tr":Me()}],"rounded-br":[{"rounded-br":Me()}],"rounded-bl":[{"rounded-bl":Me()}],"border-w":[{border:He()}],"border-w-x":[{"border-x":He()}],"border-w-y":[{"border-y":He()}],"border-w-s":[{"border-s":He()}],"border-w-e":[{"border-e":He()}],"border-w-bs":[{"border-bs":He()}],"border-w-be":[{"border-be":He()}],"border-w-t":[{"border-t":He()}],"border-w-r":[{"border-r":He()}],"border-w-b":[{"border-b":He()}],"border-w-l":[{"border-l":He()}],"divide-x":[{"divide-x":He()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":He()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...de(),"hidden","none"]}],"divide-style":[{divide:[...de(),"hidden","none"]}],"border-color":[{border:X()}],"border-color-x":[{"border-x":X()}],"border-color-y":[{"border-y":X()}],"border-color-s":[{"border-s":X()}],"border-color-e":[{"border-e":X()}],"border-color-bs":[{"border-bs":X()}],"border-color-be":[{"border-be":X()}],"border-color-t":[{"border-t":X()}],"border-color-r":[{"border-r":X()}],"border-color-b":[{"border-b":X()}],"border-color-l":[{"border-l":X()}],"divide-color":[{divide:X()}],"outline-style":[{outline:[...de(),"none","hidden"]}],"outline-offset":[{"outline-offset":[Zt,Ge,Ve]}],"outline-w":[{outline:["",Zt,Qm,bu]}],"outline-color":[{outline:X()}],shadow:[{shadow:["","none",u,ly,ay]}],"shadow-color":[{shadow:X()}],"inset-shadow":[{"inset-shadow":["none",f,ly,ay]}],"inset-shadow-color":[{"inset-shadow":X()}],"ring-w":[{ring:He()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:X()}],"ring-offset-w":[{"ring-offset":[Zt,bu]}],"ring-offset-color":[{"ring-offset":X()}],"inset-ring-w":[{"inset-ring":He()}],"inset-ring-color":[{"inset-ring":X()}],"text-shadow":[{"text-shadow":["none",m,ly,ay]}],"text-shadow-color":[{"text-shadow":X()}],opacity:[{opacity:[Zt,Ge,Ve]}],"mix-blend":[{"mix-blend":[...me(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":me()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[Zt]}],"mask-image-linear-from-pos":[{"mask-linear-from":we()}],"mask-image-linear-to-pos":[{"mask-linear-to":we()}],"mask-image-linear-from-color":[{"mask-linear-from":X()}],"mask-image-linear-to-color":[{"mask-linear-to":X()}],"mask-image-t-from-pos":[{"mask-t-from":we()}],"mask-image-t-to-pos":[{"mask-t-to":we()}],"mask-image-t-from-color":[{"mask-t-from":X()}],"mask-image-t-to-color":[{"mask-t-to":X()}],"mask-image-r-from-pos":[{"mask-r-from":we()}],"mask-image-r-to-pos":[{"mask-r-to":we()}],"mask-image-r-from-color":[{"mask-r-from":X()}],"mask-image-r-to-color":[{"mask-r-to":X()}],"mask-image-b-from-pos":[{"mask-b-from":we()}],"mask-image-b-to-pos":[{"mask-b-to":we()}],"mask-image-b-from-color":[{"mask-b-from":X()}],"mask-image-b-to-color":[{"mask-b-to":X()}],"mask-image-l-from-pos":[{"mask-l-from":we()}],"mask-image-l-to-pos":[{"mask-l-to":we()}],"mask-image-l-from-color":[{"mask-l-from":X()}],"mask-image-l-to-color":[{"mask-l-to":X()}],"mask-image-x-from-pos":[{"mask-x-from":we()}],"mask-image-x-to-pos":[{"mask-x-to":we()}],"mask-image-x-from-color":[{"mask-x-from":X()}],"mask-image-x-to-color":[{"mask-x-to":X()}],"mask-image-y-from-pos":[{"mask-y-from":we()}],"mask-image-y-to-pos":[{"mask-y-to":we()}],"mask-image-y-from-color":[{"mask-y-from":X()}],"mask-image-y-to-color":[{"mask-y-to":X()}],"mask-image-radial":[{"mask-radial":[Ge,Ve]}],"mask-image-radial-from-pos":[{"mask-radial-from":we()}],"mask-image-radial-to-pos":[{"mask-radial-to":we()}],"mask-image-radial-from-color":[{"mask-radial-from":X()}],"mask-image-radial-to-color":[{"mask-radial-to":X()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":A()}],"mask-image-conic-pos":[{"mask-conic":[Zt]}],"mask-image-conic-from-pos":[{"mask-conic-from":we()}],"mask-image-conic-to-pos":[{"mask-conic-to":we()}],"mask-image-conic-from-color":[{"mask-conic-from":X()}],"mask-image-conic-to-color":[{"mask-conic-to":X()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:ve()}],"mask-repeat":[{mask:q()}],"mask-size":[{mask:re()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",Ge,Ve]}],filter:[{filter:["","none",Ge,Ve]}],blur:[{blur:ce()}],brightness:[{brightness:[Zt,Ge,Ve]}],contrast:[{contrast:[Zt,Ge,Ve]}],"drop-shadow":[{"drop-shadow":["","none",p,ly,ay]}],"drop-shadow-color":[{"drop-shadow":X()}],grayscale:[{grayscale:["",Zt,Ge,Ve]}],"hue-rotate":[{"hue-rotate":[Zt,Ge,Ve]}],invert:[{invert:["",Zt,Ge,Ve]}],saturate:[{saturate:[Zt,Ge,Ve]}],sepia:[{sepia:["",Zt,Ge,Ve]}],"backdrop-filter":[{"backdrop-filter":["","none",Ge,Ve]}],"backdrop-blur":[{"backdrop-blur":ce()}],"backdrop-brightness":[{"backdrop-brightness":[Zt,Ge,Ve]}],"backdrop-contrast":[{"backdrop-contrast":[Zt,Ge,Ve]}],"backdrop-grayscale":[{"backdrop-grayscale":["",Zt,Ge,Ve]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[Zt,Ge,Ve]}],"backdrop-invert":[{"backdrop-invert":["",Zt,Ge,Ve]}],"backdrop-opacity":[{"backdrop-opacity":[Zt,Ge,Ve]}],"backdrop-saturate":[{"backdrop-saturate":[Zt,Ge,Ve]}],"backdrop-sepia":[{"backdrop-sepia":["",Zt,Ge,Ve]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":I()}],"border-spacing-x":[{"border-spacing-x":I()}],"border-spacing-y":[{"border-spacing-y":I()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",Ge,Ve]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[Zt,"initial",Ge,Ve]}],ease:[{ease:["linear","initial",S,Ge,Ve]}],delay:[{delay:[Zt,Ge,Ve]}],animate:[{animate:["none",E,Ge,Ve]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[y,Ge,Ve]}],"perspective-origin":[{"perspective-origin":N()}],rotate:[{rotate:Ee()}],"rotate-x":[{"rotate-x":Ee()}],"rotate-y":[{"rotate-y":Ee()}],"rotate-z":[{"rotate-z":Ee()}],scale:[{scale:Jt()}],"scale-x":[{"scale-x":Jt()}],"scale-y":[{"scale-y":Jt()}],"scale-z":[{"scale-z":Jt()}],"scale-3d":["scale-3d"],skew:[{skew:mt()}],"skew-x":[{"skew-x":mt()}],"skew-y":[{"skew-y":mt()}],transform:[{transform:[Ge,Ve,"","none","gpu","cpu"]}],"transform-origin":[{origin:N()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:je()}],"translate-x":[{"translate-x":je()}],"translate-y":[{"translate-y":je()}],"translate-z":[{"translate-z":je()}],"translate-none":["translate-none"],accent:[{accent:X()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:X()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",Ge,Ve]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":I()}],"scroll-mx":[{"scroll-mx":I()}],"scroll-my":[{"scroll-my":I()}],"scroll-ms":[{"scroll-ms":I()}],"scroll-me":[{"scroll-me":I()}],"scroll-mbs":[{"scroll-mbs":I()}],"scroll-mbe":[{"scroll-mbe":I()}],"scroll-mt":[{"scroll-mt":I()}],"scroll-mr":[{"scroll-mr":I()}],"scroll-mb":[{"scroll-mb":I()}],"scroll-ml":[{"scroll-ml":I()}],"scroll-p":[{"scroll-p":I()}],"scroll-px":[{"scroll-px":I()}],"scroll-py":[{"scroll-py":I()}],"scroll-ps":[{"scroll-ps":I()}],"scroll-pe":[{"scroll-pe":I()}],"scroll-pbs":[{"scroll-pbs":I()}],"scroll-pbe":[{"scroll-pbe":I()}],"scroll-pt":[{"scroll-pt":I()}],"scroll-pr":[{"scroll-pr":I()}],"scroll-pb":[{"scroll-pb":I()}],"scroll-pl":[{"scroll-pl":I()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",Ge,Ve]}],fill:[{fill:["none",...X()]}],"stroke-w":[{stroke:[Zt,Qm,bu,YM]}],stroke:[{stroke:["none",...X()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","inset-bs","inset-be","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pbs","pbe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mbs","mbe","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-bs","border-w-be","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-bs","border-color-be","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mbs","scroll-mbe","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pbs","scroll-pbe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}},VV=xV(BV);function J(...e){return VV(M2(e))}const fv=Xh("inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",xs:"h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9","icon-xs":"size-6 rounded-md [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-8","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}}),Gt=h.forwardRef(function({className:t,variant:n="default",size:r="default",asChild:o=!1,...i},s){const a=o?o2:"button";return d.jsx(a,{ref:s,"data-slot":"button","data-variant":n,"data-size":r,className:J(fv({variant:n,size:r,className:t})),...i})});function ss({className:e,type:t,...n}){return d.jsx("input",{type:t,"data-slot":"input",className:J("h-9 w-full min-w-0 rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none selection:bg-primary selection:text-primary-foreground file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm dark:bg-input/30","focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50","aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40",e),...n})}function V2({...e}){return d.jsx(D3,{"data-slot":"sheet",...e})}h.forwardRef(function({...t},n){return d.jsx(i2,{ref:n,"data-slot":"sheet-trigger",...t})});h.forwardRef(function({...t},n){return d.jsx(W0,{ref:n,"data-slot":"sheet-close",...t})});function $V({...e}){return d.jsx(l2,{"data-slot":"sheet-portal",...e})}const GV=h.forwardRef(function({className:t,...n},r){return d.jsx(s2,{ref:r,"data-slot":"sheet-overlay",className:J("fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0",t),...n})}),$2=h.forwardRef(function({className:t,overlayClassName:n,children:r,side:o="right",showCloseButton:i=!0,...s},a){return d.jsxs($V,{children:[d.jsx(GV,{className:n}),d.jsxs(a2,{ref:a,"data-slot":"sheet-content",className:J("cad-glass-popover fixed z-50 flex flex-col gap-4 shadow-lg transition ease-in-out data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:animate-in data-[state=open]:duration-500",o==="right"&&"inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm",o==="left"&&"inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",o==="top"&&"inset-x-0 top-0 h-auto border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",o==="bottom"&&"inset-x-0 bottom-0 h-auto border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",t),...s,children:[r,i&&d.jsxs(W0,{className:"absolute top-4 right-4 rounded-xs opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:ring-2 focus:ring-ring focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none data-[state=open]:bg-secondary",children:[d.jsx(Kc,{className:"size-4"}),d.jsx("span",{className:"sr-only",children:"Close"})]})]})]})});function G2({className:e,...t}){return d.jsx("div",{"data-slot":"sheet-header",className:J("flex flex-col gap-1.5 p-4",e),...t})}function U2({className:e,...t}){return d.jsx(c2,{"data-slot":"sheet-title",className:J("font-semibold text-foreground",e),...t})}function H2({className:e,...t}){return d.jsx(u2,{"data-slot":"sheet-description",className:J("text-sm text-muted-foreground",e),...t})}function q0({delayDuration:e=0,...t}){return d.jsx(B3,{"data-slot":"tooltip-provider",delayDuration:e,...t})}function mv({...e}){return d.jsx(V3,{"data-slot":"tooltip",...e})}const pv=h.forwardRef(function({...t},n){return d.jsx(L3,{ref:n,"data-slot":"tooltip-trigger",...t})}),hv=h.forwardRef(function({className:t,arrowClassName:n,sideOffset:r=0,children:o,...i},s){return d.jsx(F3,{children:d.jsxs(j3,{ref:s,"data-slot":"tooltip-content",sideOffset:r,className:J("cad-glass-popover z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in rounded-md border border-border bg-popover px-3 py-1.5 text-xs text-balance text-popover-foreground shadow-lg shadow-black/10 fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95",t),...i,children:[o,d.jsx(z3,{className:J("z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-popover fill-popover",n)})]})})}),UV="16rem",HV="3rem",WV="b",W2=h.createContext(null);function Zh(){const e=h.useContext(W2);if(!e)throw new Error("useSidebar must be used within a SidebarProvider.");return e}function KV({defaultOpen:e=!0,defaultMobileOpen:t=!1,open:n,onOpenChange:r,mobileOpen:o,onMobileOpenChange:i,className:s,style:a,children:l,...c}){const u=J5(),[f,m]=h.useState(t),[p,b]=h.useState(e),y=n??p,x=o??f,S=h.useCallback(w=>{const _=typeof w=="function"?w(y):w;r?r(_):b(_)},[r,y]),E=h.useCallback(w=>{const _=typeof w=="function"?w(x):w;i?i(_):m(_)},[i,x]),C=h.useCallback(()=>u?E(w=>!w):S(w=>!w),[u,S,E]);h.useEffect(()=>{const w=_=>{_.key===WV&&(_.metaKey||_.ctrlKey)&&(_.preventDefault(),C())};return window.addEventListener("keydown",w),()=>window.removeEventListener("keydown",w)},[C]);const A=y?"expanded":"collapsed",N=h.useMemo(()=>({state:A,open:y,setOpen:S,isMobile:u,openMobile:x,setOpenMobile:E,toggleSidebar:C}),[A,y,S,u,x,E,C]);return d.jsx(W2.Provider,{value:N,children:d.jsx(q0,{delayDuration:0,children:d.jsx("div",{"data-slot":"sidebar-wrapper",style:{"--sidebar-width":UV,"--sidebar-width-icon":HV,...a},className:J("group/sidebar-wrapper flex min-h-svh w-full has-data-[variant=inset]:bg-sidebar",s),...c,children:l})})})}function qV({className:e,onClick:t,...n}){const{toggleSidebar:r}=Zh();return d.jsxs(Gt,{"data-sidebar":"trigger","data-slot":"sidebar-trigger",variant:"ghost",size:"icon",className:J("size-7",e),onClick:o=>{t?.(o),r()},...n,children:[d.jsx(KB,{}),d.jsx("span",{className:"sr-only",children:"Toggle Sidebar"})]})}function YV({className:e,...t}){return d.jsx("main",{"data-slot":"sidebar-inset",className:J("relative flex w-full flex-1 flex-col bg-transparent","md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2",e),...t})}function XV({className:e,...t}){return d.jsx(ss,{"data-slot":"sidebar-input","data-sidebar":"input",className:J("cad-glass-control h-8 w-full shadow-none",e),...t})}function ZV({className:e,...t}){return d.jsx("div",{"data-slot":"sidebar-header","data-sidebar":"header",className:J("flex flex-col gap-2 p-2",e),...t})}function JV({className:e,...t}){return d.jsx("div",{"data-slot":"sidebar-content","data-sidebar":"content",className:J("flex min-h-0 flex-1 flex-col gap-2 overflow-hidden",e),...t})}function QV({className:e,...t}){return d.jsx("div",{"data-slot":"sidebar-group","data-sidebar":"group",className:J("relative flex w-full min-w-0 flex-col py-2",e),...t})}function e$({className:e,...t}){return d.jsx("div",{"data-slot":"sidebar-group-content","data-sidebar":"group-content",className:J("w-full text-sm",e),...t})}function t$({className:e,...t}){return d.jsx("ul",{"data-slot":"sidebar-menu","data-sidebar":"menu",className:J("flex w-full min-w-0 flex-col gap-1",e),...t})}function K2({className:e,...t}){return d.jsx("li",{"data-slot":"sidebar-menu-item","data-sidebar":"menu-item",className:J("group/menu-item relative",e),...t})}const n$=Xh("peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm ring-sidebar-ring outline-hidden transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0",{variants:{variant:{default:"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",outline:"bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_var(--sidebar-accent)]"},size:{default:"h-8 text-sm",sm:"h-7 text-xs",lg:"h-12 text-sm group-data-[collapsible=icon]:p-0!"}},defaultVariants:{variant:"default",size:"default"}});function q2({asChild:e=!1,isActive:t=!1,variant:n="default",size:r="default",tooltip:o,className:i,...s}){const a=e?o2:"button",{isMobile:l,state:c}=Zh(),u=d.jsx(a,{"data-slot":"sidebar-menu-button","data-sidebar":"menu-button","data-size":r,"data-active":t,className:J(n$({variant:n,size:r}),i),...s});return o?(typeof o=="string"&&(o={children:o}),d.jsxs(mv,{children:[d.jsx(pv,{asChild:!0,children:u}),d.jsx(hv,{side:"right",align:"center",hidden:c!=="collapsed"||l,...o})]})):u}function r$({className:e,...t}){return d.jsx("ul",{"data-slot":"sidebar-menu-sub","data-sidebar":"menu-sub",className:J("mx-2 flex min-w-0 translate-x-px flex-col gap-1 border-l border-sidebar-border px-2 py-1","group-data-[collapsible=icon]:hidden",e),...t})}function JM({className:e,...t}){return d.jsx("li",{"data-slot":"sidebar-menu-sub-item","data-sidebar":"menu-sub-item",className:J("group/menu-sub-item relative",e),...t})}const o$=/^\s*([^#\s]*)#([^\s]*)/,i$=/^o((?:\d+)(?:\.\d+)*)$/,s$=/^o((?:\d+)(?:\.\d+)*)\.([sfev])(\d+)$/,a$=/^([sfev])(\d+)$/,l$=/^m\d+$/i,Y2="[A-Za-z_][A-Za-z0-9_:]*",c$=new RegExp(`^(${Y2})$`),u$=new RegExp(`^(${Y2})\\.([sfev])(\\d+)$`),d$=/^(?:o\d+(?:\.\d+)*(?:\.[sfev]\d+)?|[sfev]\d+|m\d+)$/i;function X2(e){return d$.test(String(e||"").trim())}function ep(e){return e==="s"?"shape":e==="f"?"face":e==="e"?"edge":"vertex"}function Z2(e){let t=String(e||"").replace(/\\/g,"/").trim().replace(/^\/+|\/+$/g,"");return!t||t.split("/").some(n=>!n||n==="."||n==="..")?"":t}function gv(e,{inheritedOccurrenceId:t="",inheritedLabel:n=""}={}){const r=String(e||"").trim().replace(/^#/,"");if(!r)return null;const o=r.match(s$);if(o){const a=`o${o[1]}`,l=o[2],c=Number(o[3]);return{selectorType:ep(l),occurrenceId:a,ordinal:c,kind:l,canonical:`${a}.${l}${c}`}}const i=r.match(i$);if(i)return{selectorType:"occurrence",occurrenceId:`o${i[1]}`,ordinal:null,kind:"",canonical:`o${i[1]}`};const s=r.match(a$);if(s){const a=s[1],l=Number(s[2]);return t?{selectorType:ep(a),occurrenceId:t,ordinal:l,kind:a,canonical:`${t}.${a}${l}`}:n?{selectorType:ep(a),occurrenceId:"",ordinal:l,kind:a,label:n,canonical:`${n}.${a}${l}`}:{selectorType:ep(a),occurrenceId:"",ordinal:l,kind:a,canonical:`${a}${l}`}}if(!l$.test(r)){const a=r.match(u$);if(a){const c=a[1],u=a[2],f=Number(a[3]);return{selectorType:ep(u),occurrenceId:"",ordinal:f,kind:u,label:c,canonical:`${c}.${u}${f}`}}const l=r.match(c$);if(l){const c=l[1];return{selectorType:"label",occurrenceId:"",ordinal:null,kind:"",label:c,canonical:c}}}return{selectorType:"opaque",occurrenceId:"",ordinal:null,kind:"",canonical:r}}function f$(e,t={}){return gv(e,t)}function yv(e){const t=Array.isArray(e)?e.flatMap(i=>String(i||"").split(",")):String(e||"").split(","),n=[];let r="",o="";for(const i of t){const s=gv(i,{inheritedOccurrenceId:r,inheritedLabel:o});s&&(n.push(s.canonical),s.occurrenceId?(r=s.occurrenceId,o=""):s.label&&(o=s.label,r=""))}return n}function Z1(e){const t=yv(e),n=[...new Set(t.filter(Boolean))],r={occurrence:1,label:1,shape:2,face:3,edge:4,vertex:5,opaque:6};return n.map((o,i)=>({selector:o,index:i,parsed:gv(o)})).sort((o,i)=>{const s=o.parsed?.occurrenceId||"",a=i.parsed?.occurrenceId||"";if(s!==a)return s.localeCompare(a);const l=r[o.parsed?.selectorType]??99,c=r[i.parsed?.selectorType]??99;if(l!==c)return l-c;const u=Number(o.parsed?.ordinal||0),f=Number(i.parsed?.ordinal||0);return u!==f?u-f:o.selector!==i.selector?o.selector.localeCompare(i.selector):o.index-i.index}).map(o=>o.selector)}function Jh(e){const t=String(e||"").trim().match(o$);if(!t)return null;const n=String(t[1]||"").trim(),r=String(t[2]||"").trim();return{token:t[0],cadPath:n,selectors:yv(r)}}function zc({cadPath:e="",selector:t="",selectors:n}={}){const r=String(e||"").trim(),o=Z1(n!==void 0?n:t?[t]:[]);return`${r}#${o.join(",")}`}const m$=.001,p$=.05,h$=1/Math.cos(150/2*(Math.PI/180)),$f=1e-6;function Y0(e,t,n,r){const o=[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]],s=(t[0]*e[0]+t[1]*e[1]+t[2]*e[2])*(1-n);return[e[0]*n+o[0]*r+t[0]*s,e[1]*n+o[1]*r+t[1]*s,e[2]*n+o[2]*r+t[2]*s]}function bv(e,t,n,r,o){const i=Y0([e[0]-t[0],e[1]-t[1],e[2]-t[2]],n,r,o);return[i[0]+t[0],i[1]+t[1],i[2]+t[2]]}function g$(e,t){return e<-$f||Math.abs(e)<=$f&&t<0?[-e,-t]:[e,t]}function y$(e,t){const n=[Number(e?.start?.[0])||0,Number(e?.start?.[1])||0],r=[Number(e?.end?.[0])||0,Number(e?.end?.[1])||0],o=r[0]-n[0],i=r[1]-n[1],s=Math.hypot(o,i);if(!(s>$f))return null;const a=[o/s,i/s],l=g$(-a[1],a[0]);return{p:n,mid:[(n[0]+r[0])/2,(n[1]+r[1])/2],n:l,seg:[n,r],angle:Number.isFinite(t)?t:0}}function b$(e,t){return{p:[e,0],mid:[e,0],n:[1,0],seg:null,angle:Number.isFinite(t)?t:0}}function X0(e,t,n){return e.n[0]*(t-e.p[0])+e.n[1]*(n-e.p[1])}function Z0({bendAxesX:e=null,bendLines:t=null,bendAnglesRad:n=null,thicknessScale:r=1,miterEpsilon:o=p$}={}){const i=Array.isArray(n)?n:[];let s=[];Array.isArray(t)&&t.length?s=t.map((m,p)=>y$(m,i[p])).filter(Boolean):Array.isArray(e)&&(s=e.filter(m=>Number.isFinite(m)).map((m,p)=>b$(m,i[p])));const a=s.map(m=>s.reduce((p,b)=>b!==m&&X0(b,m.mid[0],m.mid[1])>$f?p+1:p,0));s=s.map((m,p)=>({bend:m,index:p,depth:a[p]})).sort((m,p)=>m.depth-p.depth||m.index-p.index).map(m=>m.bend);const l=Number.isFinite(r)?r:1,c=Math.max(l,m$),u=s.some(m=>m.angle!==0),f=u?x$(s):[];return{bends:s,scale:c,anyAngle:u,pivots:f,miterEpsilon:o}}function x$(e){const t=[];for(const n of e){let r=[n.p[0],n.p[1],0],o=[n.n[1],-n.n[0],0];for(const i of t)X0(i.bend,n.mid[0],n.mid[1])>$f&&i.rotates&&(r=bv(r,i.p3,i.a3,i.cos,i.sin),o=Y0(o,i.a3,i.cos,i.sin));t.push({bend:n,p3:r,a3:o,angle:n.angle,cos:Math.cos(n.angle),sin:Math.sin(n.angle),halfCos:Math.cos(n.angle/2),halfSin:Math.sin(n.angle/2),rotates:n.angle!==0})}return t}function S$(e){const{scale:t,anyAngle:n}=Z0(e);return t===1&&!n}function E$(e,t,n,r){let o=[e,t,0],i=[0,0,1];for(let s=0;s<n;s+=1){const a=r[s];a.rotates&&X0(a.bend,e,t)>$f&&(o=bv(o,a.p3,a.a3,a.cos,a.sin),i=Y0(i,a.a3,a.cos,a.sin))}return{point:o,normal:i}}function Ac(e,t,n,{scale:r,anyAngle:o,pivots:i,miterEpsilon:s}){let a=[e,t,n*r];if(!o)return a;for(let l=0;l<i.length;l+=1){const c=i[l],u=X0(c.bend,e,t);if(!(u<-s)){if(u<=s){const f=[e-c.bend.n[0]*u,t-c.bend.n[1]*u],m=E$(f[0],f[1],l,i),p=Y0(m.normal,c.a3,c.halfCos,c.halfSin),b=Math.min(1/Math.max(Math.abs(c.halfCos),1e-6),h$),y=n*r*b;return[m.point[0]+p[0]*y,m.point[1]+p[1]*y,m.point[2]+p[2]*y]}c.rotates&&(a=bv(a,c.p3,c.a3,c.cos,c.sin))}}return a}function w$(e,t,n){const r=Z0(n);for(let o=0;o<e.length;o+=3){const[i,s,a]=Ac(e[o],e[o+1],e[o+2],r);t[o]=i,t[o+1]=s,t[o+2]=a}return t}function J1(e){let t=1/0,n=-1/0,r=0;for(let o=0;o<e.length;o+=3){const i=e[o+1],s=Math.abs(e[o+2]);i<t&&(t=i),i>n&&(n=i),s>r&&(r=s)}return Number.isFinite(t)||(t=0,n=0),{yMin:t,yMax:n,zMax:r}}const v$=.3;function A$(e,t){const n=Z0(t);if(!n.bends.length)return new Float32Array(0);const{yMin:r,yMax:o,zMax:i}=J1(e),s=i+v$/Math.max(n.scale,1e-6),a=new Float32Array(n.bends.length*6);let l=0;for(const c of n.bends){const u=c.seg||[[c.p[0],r],[c.p[0],o]],[f,m,p]=Ac(u[0][0],u[0][1],s,n),[b,y,x]=Ac(u[1][0],u[1][1],s,n);a[l]=f,a[l+1]=m,a[l+2]=p,a[l+3]=b,a[l+4]=y,a[l+5]=x,l+=6}return a}const Hs=1e-6,xl=1e-4;function J2(e){let t=0;for(let n=0;n<e.length;n+=1){const[r,o]=e[n],[i,s]=e[(n+1)%e.length];t+=r*s-i*o}return t/2}function C$(e){return Math.abs(J2(e))}function Ub(e){const t=J2(e);if(Math.abs(t)<=Hs){const o=e.reduce((i,[s,a])=>[i[0]+s,i[1]+a],[0,0]);return[o[0]/e.length,o[1]/e.length]}let n=0,r=0;for(let o=0;o<e.length;o+=1){const[i,s]=e[o],[a,l]=e[(o+1)%e.length],c=i*l-a*s;n+=(i+a)*c,r+=(s+l)*c}return[n/(6*t),r/(6*t)]}function Nl(e,t){return(t[0]-e.origin[0])*e.normal[0]+(t[1]-e.origin[1])*e.normal[1]}function Rp(e,t){return(t[0]-e.origin[0])*e.direction[0]+(t[1]-e.origin[1])*e.direction[1]}function Q1(e){const t=[];for(const n of e){const r=t[t.length-1];(!r||Math.hypot(n[0]-r[0],n[1]-r[1])>xl)&&t.push(n)}for(;t.length>1;){const n=t[0],r=t[t.length-1];if(Math.hypot(n[0]-r[0],n[1]-r[1])<=xl){t.pop();continue}break}return t}function M$(e,t){const n=(f,m,p,b)=>f*b-m*p,[r,o]=[e.start,e.end],[i,s]=[t.start,t.end],a=n(s[0]-i[0],s[1]-i[1],r[0]-i[0],r[1]-i[1]),l=n(s[0]-i[0],s[1]-i[1],o[0]-i[0],o[1]-i[1]),c=n(o[0]-r[0],o[1]-r[1],i[0]-r[0],i[1]-r[1]),u=n(o[0]-r[0],o[1]-r[1],s[0]-r[0],s[1]-r[1]);return a>0!=l>0&&c>0!=u>0}function I$(e,t,n){const r=n[0]-t[0],o=n[1]-t[1],i=r*r+o*o;if(i<=Hs)return Math.hypot(e[0]-t[0],e[1]-t[1]);const s=Math.max(0,Math.min(1,((e[0]-t[0])*r+(e[1]-t[1])*o)/i));return Math.hypot(e[0]-(t[0]+s*r),e[1]-(t[1]+s*o))}function QM(e,t){let n=1/0;for(let r=0;r<t.length;r+=1)n=Math.min(n,I$(e,t[r],t[(r+1)%t.length]));return n}function eI(e,t,n=.05){const r=e.bendLine.start,o=e.bendLine.end,i=QM(r,t.outerLoop),s=QM(o,t.outerLoop),a=9;let l=0;for(let c=1;c<a;c+=1){const u=c/a,f=[r[0]+u*(o[0]-r[0]),r[1]+u*(o[1]-r[1])];tE(f,t.outerLoop)&&(l+=1)}return{crosses:i<=n&&s<=n&&l===a-1,startGap:i,endGap:s,interiorFraction:l/(a-1)}}function tI(e,t){let n=null;for(let r=0;r<e.length;r+=1){const o=e[r],i=e[(r+1)%e.length],s=i[0]-o[0],a=i[1]-o[1],l=s*s+a*a;if(l<=Hs)continue;const c=Math.max(0,Math.min(1,((t[0]-o[0])*s+(t[1]-o[1])*a)/l)),u=[o[0]+c*s,o[1]+c*a],f=Math.hypot(t[0]-u[0],t[1]-u[1]);(!n||f<n.distance)&&(n={edgeIndex:r,t:c,point:u,distance:f})}return n}function N$(e,t,n){const r=tI(e,t),o=tI(e,n);if(!r||!o)return null;const[i,s]=r.edgeIndex+r.t<=o.edgeIndex+o.t?[r,o]:[o,r];if(i.edgeIndex===s.edgeIndex&&Math.abs(i.t-s.t)<=Hs)return null;const a=[i.point];for(let c=i.edgeIndex+1;c<=s.edgeIndex;c+=1)a.push(e[c%e.length]);a.push(s.point);const l=[s.point];for(let c=s.edgeIndex+1;c<=i.edgeIndex+e.length;c+=1)l.push(e[c%e.length]);return l.push(i.point),[Q1(a),Q1(l)]}function nI(e,t,n,r){const o=n*t.halfWidth,i=y=>n*Nl(t,y)>=t.halfWidth-xl,s=y=>{const x=Rp(t,y);return x>=r.min-xl&&x<=r.max+xl},a=y=>[t.origin[0]+y*t.direction[0]+o*t.normal[0],t.origin[1]+y*t.direction[1]+o*t.normal[1]],l=(y,x)=>{const S=n*Nl(t,y)-t.halfWidth,C=n*Nl(t,x)-t.halfWidth-S;if(Math.abs(C)<=Hs)return null;const A=-S/C;return[y[0]+A*(x[0]-y[0]),y[1]+A*(x[1]-y[1])]},c=(y,x,S)=>{const E=Rp(t,y),A=Rp(t,x)-E;if(Math.abs(A)<=Hs)return null;const N=(S-E)/A;return N<-xl||N>1+xl?null:[y[0]+N*(x[0]-y[0]),y[1]+N*(x[1]-y[1])]},u=y=>{let x=0;for(;x<y.length;){const w=e[y[x]];if(i(w)||!s(w))break;x+=1}if(x>=y.length)return null;const S=e[y[x]];if(i(S)){const w=x>0?e[y[x-1]]:null,_=w?l(w,S):null;return{drop:x,insert:_?[_]:[]}}const C=Rp(t,S)>r.max?r.max:r.min,A=x>0?e[y[x-1]]:null,N=A?c(A,S,C):null;return{drop:x,insert:N?[a(C),N]:[a(C)]}},f=e.map((y,x)=>x),m=u(f),p=u([...f].reverse());if(!m||!p)return[];const b=e.slice(m.drop,e.length-p.drop);return Q1([...m.insert,...b,...[...p.insert].reverse()])}function T$(e,t,n){const r=N$(e,t.bendLine.start,t.bendLine.end);if(!r)return null;const o=r.map(s=>s.length>=3&&Nl(t,Ub(s))>=0?1:-1);if(o[0]===o[1])return null;const i=o[0]===1?0:1;return{positive:nI(r[i],t,1,n),negative:nI(r[1-i],t,-1,n)}}function _$(e,t,{tolerance:n=.05}={}){let r=[{loop:e,sides:[]}];for(let s=0;s<t.length;s+=1){const a=t[s];let l=-1,c=null;for(let E=0;E<r.length;E+=1){const C=eI(a,{outerLoop:r[E].loop},n);if(C.crosses){l=E;break}(!c||C.interiorFraction>c.interiorFraction)&&(c=C)}if(l<0){if(r.filter(A=>eI(a,{outerLoop:A.loop},n).interiorFraction>0).length>1){const A=t.slice(0,s).map((N,w)=>({other:N,otherIndex:w})).filter(({other:N})=>M$(a.bendLine,N.bendLine)).map(({otherIndex:N})=>`bend ${N+1}`);throw new Error(`DXF 3D bend preview cannot fold crossing bend lines: bend ${s+1} crosses ${A.length?A.join(" and "):"another bend"} inside the material. One blank cannot be folded along both -- a brake needs each fold to separate two faces, and at the crossing all four quarters would have to move at once. Add a relief cut at the crossing, or shorten one line so the folds meet end to end.`)}const C=Math.max(c?.startGap||0,c?.endGap||0);throw new Error(`DXF 3D bend preview requires a fold line that runs edge to edge: bend ${s+1}, from (${a.bendLine.start[0].toFixed(3)}, ${a.bendLine.start[1].toFixed(3)}) to (${a.bendLine.end[0].toFixed(3)}, ${a.bendLine.end[1].toFixed(3)}), does not cut any face of the blank in two (its ends stop ${C.toFixed(3)} mm short of the material's edge). Extend the bend line, or add relief cuts at its ends so the fold really does separate the two faces.`)}const u=r[l],f=Q2(a),m={min:f.min,max:f.max},p=T$(u.loop,a,m),b=p?.negative||[],y=p?.positive||[];if(b.length<3||y.length<3)throw new Error(`DXF 3D bend preview could not split the blank at bend ${s+1}: its bend radius band covers the whole face.`);const x={loop:b,sides:[...u.sides,{foldIndex:s,side:-1}]},S={loop:y,sides:[...u.sides,{foldIndex:s,side:1}]};r=[...r.slice(0,l),x,S,...r.slice(l+1)]}const o=r.map((s,a)=>({id:`region-${a}`,index:a,outerLoop:s.loop,holeLoops:[],sides:t.map((l,c)=>({foldIndex:c,side:Nl(l,Ub(s.loop))>=0?1:-1})),area:C$(s.loop),centroid:Ub(s.loop)})),i=R$(o,t);return{regions:o,adjacency:i}}function eE(e,t){return e.sides.find(n=>n.foldIndex===t)?.side||0}function R$(e,t){const n=[];return t.forEach((r,o)=>{let i=null;for(let s=0;s<e.length;s+=1)for(let a=s+1;a<e.length;a+=1){if(eE(e[s],o)===eE(e[a],o))continue;const l=P$(e[s],e[a],r);l<=xl||(!i||l>i.contactLength)&&(i={foldIndex:o,regions:[s,a],contactLength:l})}i&&n.push(i)}),n}function P$(e,t,n){const r=Hb(e,n),o=Hb(t,n);return!r||!o?0:Math.max(0,Math.min(r.max,o.max)-Math.max(r.min,o.min))}function Hb(e,t){let n=1/0,r=-1/0;for(const o of e.outerLoop){const i=Math.abs(Nl(t,o));if(Math.abs(i-t.halfWidth)>.001)continue;const s=(o[0]-t.origin[0])*t.direction[0]+(o[1]-t.origin[1])*t.direction[1];n=Math.min(n,s),r=Math.max(r,s)}return Number.isFinite(n)&&r>n?{min:n,max:r}:null}function O$(e,t){const n=Math.abs(e.angleRadians);if(n<=1e-9||e.halfWidth<=Hs)return new $r().identity();const r=e.angleRadians<0?-1:1,o=e.halfWidth,i=e.neutralRadius,s=new Ue(e.normal[0],0,e.normal[1]).multiplyScalar(t>=0?1:-1),a=new Ue(e.direction[0],0,e.direction[1]),l=new $r().makeBasis(s,new Ue(0,1,0),a),c=new $r().makeTranslation(e.origin[0],0,e.origin[1]),u=new $r().makeTranslation(-o,0,0).multiply(new $r().makeRotationAxis(new Ue(0,0,1),r*n)).multiply(new $r().makeTranslation(o,0,0)),f=new Ue(o,0,0).applyMatrix4(u),m=new Ue(-o+i*Math.sin(n),r*i*(1-Math.cos(n)),0),p=new $r().makeTranslation(m.x-f.x,m.y-f.y,0).multiply(u);return c.clone().multiply(l).multiply(p).multiply(l.clone().invert()).multiply(c.clone().invert())}function k$(e,t,n){const r=e.map(()=>new $r().identity());if(!e.length)return{placements:r,rootIndex:-1,parents:[]};const o=e.map(()=>0);for(const u of n)o[u.regions[0]]+=1,o[u.regions[1]]+=1;const i=e.reduce((u,f,m)=>o[m]!==o[u]?o[m]>o[u]?m:u:f.area>e[u].area?m:u,0),s=e.map(()=>[]);for(const u of n){const[f,m]=u.regions;s[f].push({region:m,foldIndex:u.foldIndex}),s[m].push({region:f,foldIndex:u.foldIndex})}const a=e.map(()=>null),l=e.map(()=>!1);l[i]=!0;const c=[i];for(;c.length;){const u=c.shift();for(const f of s[u]){if(l[f.region])continue;l[f.region]=!0,a[f.region]={region:u,foldIndex:f.foldIndex};const m=t[f.foldIndex],p=eE(e[f.region],f.foldIndex);r[f.region]=r[u].clone().multiply(O$(m,p)),c.push(f.region)}}return{placements:r,rootIndex:i,parents:a,visited:l}}function D$({bendLine:e,angleRadians:t,insideRadiusMm:n=0,kFactor:r=.5,halfThicknessMm:o=1}){const i=e.end[0]-e.start[0],s=e.end[1]-e.start[1],a=Math.hypot(i,s);if(!(a>Hs))return null;const l=[i/a,s/a],c=[-l[1],l[0]],u=n>0?n:Math.max(o*2*.6,Hs),f=u+r*o*2,m=Math.abs(t);return{bendLine:e,origin:[e.start[0],e.start[1]],direction:l,normal:c,angleRadians:t,neutralRadius:f,insideRadius:u,halfWidth:m>1e-9?f*m/2:0,length:a}}function Q2(e){const t=o=>(o[0]-e.origin[0])*e.direction[0]+(o[1]-e.origin[1])*e.direction[1],n=t(e.bendLine.start),r=t(e.bendLine.end);return{min:Math.min(n,r),max:Math.max(n,r)}}function tE(e,t){let n=!1;for(let r=0,o=t.length-1;r<t.length;o=r,r+=1){const[i,s]=t[r],[a,l]=t[o];s>e[1]!=l>e[1]&&e[0]<(a-i)*(e[1]-s)/(l-s||Hs)+i&&(n=!n)}return n}function L$(e,t,n){for(const r of t){for(let s=0;s<n.length;s+=1){const a=n[s];if(a.halfWidth<=Hs)continue;const l=Q2(a),c=r.map(b=>Rp(a,b));if(Math.min(...c)>l.max+a.halfWidth||Math.max(...c)<l.min-a.halfWidth)continue;const f=r.map(b=>Nl(a,b)),m=f.some(b=>Math.abs(b)<a.halfWidth-xl),p=f.some(b=>b>0)&&f.some(b=>b<0);if(m||p)throw new Error(`DXF 3D bend preview does not support holes crossing bend radius bands: a cutout crosses bend ${s+1}`)}const o=Ub(r),i=e.find(s=>tE(o,s.outerLoop))||e.find(s=>r.every(a=>tE(a,s.outerLoop)));i&&i.holeLoops.push(r)}return e}function F$(e,t){const n=new Ue(e.normal[0],0,e.normal[1]).multiplyScalar(t>=0?1:-1),r=new Ue(e.direction[0],0,e.direction[1]),o=new $r().makeBasis(n,new Ue(0,1,0),r);return new $r().makeTranslation(e.origin[0],0,e.origin[1]).multiply(o)}function j$({foldLine:e,side:t,span:n,halfThickness:r,parentMatrix:o=new $r().identity(),segments:i=0}){const s=Math.abs(e.angleRadians);if(s<=1e-9||!n||n.max-n.min<=Hs)return{triangles:[],edges:[]};const a=e.angleRadians<0?-1:1,l=e.neutralRadius,c=Math.max(i||Math.ceil(s/(Math.PI/18)+1),2),u=o.clone().multiply(F$(e,t)),f=(S,E,C)=>new Ue(S,E,C).applyMatrix4(u).toArray(),m={u:-e.halfWidth,y:a*l},p=[];for(let S=0;S<=c;S+=1){const E=S/c*s,C=m.u+l*Math.sin(E),A=m.y-a*l*Math.cos(E),N=Math.sin(E)*a,w=-Math.cos(E);p.push({u:C,y:A,outer:[C+N*r*a,A+w*r*a],inner:[C-N*r*a,A-w*r*a]})}const b=[],y=[],x=(S,E,C,A)=>{b.push([S,E,C],[S,C,A])};for(let S=0;S<p.length-1;S+=1){const E=p[S],C=p[S+1];for(const A of["outer","inner"]){const N=A==="inner",w=f(E[A][0],E[A][1],n.min),_=f(C[A][0],C[A][1],n.min),I=f(C[A][0],C[A][1],n.max),R=f(E[A][0],E[A][1],n.max);N?x(w,R,I,_):x(w,_,I,R)}for(const[A,N]of[[n.min,!1],[n.max,!0]]){const w=f(E.outer[0],E.outer[1],A),_=f(C.outer[0],C.outer[1],A),I=f(C.inner[0],C.inner[1],A),R=f(E.inner[0],E.inner[1],A);N?x(w,R,I,_):x(w,_,I,R)}}for(const S of["outer","inner"])for(const E of[n.min,n.max])for(let C=0;C<p.length-1;C+=1)y.push([f(p[C][S][0],p[C][S][1],E),f(p[C+1][S][0],p[C+1][S][1],E)]);return{triangles:b,edges:y}}const nE=2,rI=.2,oI=25,rE=0,iI=0,sI=180,gb={UP:"up",DOWN:"down"},aI=1e3,z$=.35,B$=10,V$=160,lI=.04,kc=.001;function Dc(e,t,n){return Math.min(Math.max(e,t),n)}function Ri(e,t=0){const n=Number(e);return Number.isFinite(n)?n:t}function Sf(e){return!Array.isArray(e)||e.length<2?[0,0]:[Ri(e[0]),Ri(e[1])]}function xv(e,t,n=kc){return Math.abs(e[0]-t[0])<=n&&Math.abs(e[1]-t[1])<=n}function tp(e){return`${Math.round(e[0]*aI)}:${Math.round(e[1]*aI)}`}function oE(e){return[...e].reverse()}function eP(e){return e.length>1&&xv(e[0],e[e.length-1])?e.slice(0,-1):e}function tP(e){const t=[];for(const n of e)t.length&&xv(t[t.length-1],n)||t.push(n);return eP(t)}function $$(e,t){const n=Math.max(Math.abs(e),.01),r=Dc(1-z$/n,-1,1),o=r<=-1?Math.PI/8:Dc(2*Math.acos(r),Math.PI/64,Math.PI/10);return Dc(Math.ceil(Math.max(Math.abs(t),Math.PI/36)/o),B$,V$)}function nP(e,t,n,r){const o=Ri(n)*Math.PI/180,i=Ri(r)*Math.PI/180,s=$$(t,i),a=[];for(let l=0;l<=s;l+=1){const c=l/s,u=o+i*c;a.push([e[0]+t*Math.cos(u),e[1]+t*Math.sin(u)])}return a}function cI(e,t){const n=nP(e,t,0,360);return eP(n)}function iE(e){if(!Array.isArray(e)||e.length<3)return 0;let t=0;for(let n=0;n<e.length;n+=1){const r=e[n],o=e[(n+1)%e.length];t+=r[0]*o[1]-o[0]*r[1]}return t/2}function Gf(e,{clockwise:t}){const n=tP(e);if(n.length<3)return n;const r=n.map(([i,s])=>new Rl(i,s)),o=E2.isClockWise(r);return t&&!o||!t&&o?oE(n):n}function Sv(e){const t=e?.geometry||{},n=Array.isArray(t.lines)?t.lines:[],r=Array.isArray(t.arcs)?t.arcs:[],o=Array.isArray(t.circles)?t.circles:[],i=[],s=[],a=[],l=[];for(const c of n){const u=Sf(c?.start),f=Sf(c?.end),m=String(c?.kind||"").trim().toLowerCase();if(m==="bend"){a.push([u,f]);continue}if(!xv(u,f)){if(m==="engrave"){l.push([u,f]);continue}m&&m!=="cut"||i.push({points:[u,f]})}}for(const c of r){const u=Sf(c?.center),f=Math.max(Ri(c?.radius),0);if(f<=0)continue;const m=String(c?.kind||"").trim().toLowerCase(),p=nP(u,f,Ri(c?.startAngleDeg),Ri(c?.sweepAngleDeg));if(m==="bend"){a.push([p[0],p[p.length-1]]);continue}if(m==="engrave"){l.push(p);continue}m&&m!=="cut"||i.push({points:p})}for(const c of o){const u=Sf(c?.center),f=Math.max(Ri(c?.radius),0);if(f<=0)continue;const m=String(c?.kind||"").trim().toLowerCase();if(m==="engrave"){const p=cI(u,f);l.push([...p,p[0]]);continue}m&&m!=="cut"||s.push(cI(u,f))}return{cutPrimitives:i,cutCircleLoops:s,bendLines:a,engravePolylines:l}}function rP(e){const t=new Map,n=new Set,r=[],o=[],i=(s,a)=>{const l=t.get(s);if(l){l.push(a);return}t.set(s,[a])};e.forEach((s,a)=>{const l=tp(s.points[0]),c=tp(s.points[s.points.length-1]);i(l,{index:a,reverse:!1}),i(c,{index:a,reverse:!0})});for(let s=0;s<e.length;s+=1){if(n.has(s))continue;n.add(s);let a=[...e[s].points],l=0;const c=()=>{const f=tp(a[0]);let m=tp(a[a.length-1]);for(;m!==f;){const p=(t.get(m)||[]).filter(({index:S})=>!n.has(S));if(!p.length)return!1;const b=p[0];n.add(b.index);const y=e[b.index].points,x=b.reverse?oE(y):y;if(a=a.concat(x.slice(1)),m=tp(x[x.length-1]),l+=1,l>e.length+4)throw new Error("DXF preview contour walk did not terminate")}return!0};let u=c();if(u||(a=oE(a),u=c()),u){a=tP(a),a.length>=3&&r.push(a);continue}a.length>=2&&o.push(a)}return{loops:r,openChains:o}}function G$(e){const{cutPrimitives:t,cutCircleLoops:n,bendLines:r}=Sv(e);if(!t.length&&!n.length)throw new Error("DXF preview requires cut-layer contour geometry");const{loops:o}=rP(t);for(const i of n)i.length>=3&&o.push(i);if(!o.length)throw new Error("DXF preview could not resolve any closed cut contours");return{loops:o,bendLines:r}}function U$(e){const{cutPrimitives:t,engravePolylines:n}=Sv(e),{openChains:r}=rP(t);return[...n,...r]}function H$(e,t){const n=Sf(e?.[0]),r=Sf(e?.[1]),o=r[1]<n[1]?[r,n]:[n,r];return{id:`bend-${t+1}`,index:t,start:o[0],end:o[1],x:(o[0][0]+o[1][0])/2,yMin:Math.min(o[0][1],o[1][1]),yMax:Math.max(o[0][1],o[1][1])}}function oP(e){return e.map((t,n)=>H$(t,n)).sort((t,n)=>{const r=t.x-n.x;return Math.abs(r)>kc?r:t.yMin-n.yMin}).map((t,n)=>({...t,id:`bend-${n+1}`,index:n}))}function iP(e){const{bendLines:t}=Sv(e);return oP(t)}function W$(e,t){e.forEach((n,r)=>{if(Ih(t?.[r]?.angleDeg,0)===0)return;if(Math.hypot(n.end[0]-n.start[0],n.end[1]-n.start[1])<=kc)throw new Error("DXF bend line length is too small for preview bending")})}function sP(e){return String(e||"").trim().toLowerCase()===gb.DOWN?gb.DOWN:gb.UP}function Ih(e,t=rE){const n=Dc(Ri(t,rE),iI,sI),r=Ri(e,n);return Dc(r,iI,sI)}function K$(e,t=nE){const n=Dc(Ri(t,nE),rI,oI),r=Ri(e,n);return r<=0?n:Dc(r,rI,oI)}function q$(e,t){const n=iP(e),r=Array.isArray(t)?t:[];return n.map((o,i)=>{const s=r[i]&&typeof r[i]=="object"?r[i]:{};return{id:o.id,direction:sP(s.direction),angleDeg:Ih(s.angleDeg,rE)}})}function Y$(e){let t=Number.POSITIVE_INFINITY,n=Number.POSITIVE_INFINITY,r=Number.NEGATIVE_INFINITY,o=Number.NEGATIVE_INFINITY;for(const i of e)t=Math.min(t,i[0]),n=Math.min(n,i[1]),r=Math.max(r,i[0]),o=Math.max(o,i[1]);return{minX:t,minY:n,maxX:r,maxY:o}}function X$(e,t,n){const r=(e[1]-t[1])*(n[0]-t[0])-(e[0]-t[0])*(n[1]-t[1]);if(Math.abs(r)>kc)return!1;const o=(e[0]-t[0])*(n[0]-t[0])+(e[1]-t[1])*(n[1]-t[1]);if(o<-kc)return!1;const i=(n[0]-t[0])**2+(n[1]-t[1])**2;return o<=i+kc}function aP(e,t){let n=!1;for(let r=0,o=t.length-1;r<t.length;o=r,r+=1){const i=t[r],s=t[o];if(X$(e,s,i))return!0;if(!(i[1]>e[1]!=s[1]>e[1]))continue;const l=s[0]+(e[1]-s[1])*(i[0]-s[0])/(i[1]-s[1]);e[0]<l&&(n=!n)}return n}function Z$(e){const t=e.map((r,o)=>({loop:r,index:o,parentIndex:-1,depth:-1,area:Math.abs(iE(r))}));for(let r=0;r<t.length;r+=1){const o=t[r],i=o.loop[0];let s=-1,a=Number.POSITIVE_INFINITY;for(let l=0;l<t.length;l+=1){if(l===r)continue;const c=t[l];c.area<=o.area+kc||c.area>=a||aP(i,c.loop)&&(s=l,a=c.area)}o.parentIndex=s}const n=r=>{const o=t[r];return o.depth>=0||(o.depth=o.parentIndex<0?0:n(o.parentIndex)+1),o.depth};for(let r=0;r<t.length;r+=1)n(r);return t}function J$(e){const t=Z$(e),n=[];for(const r of t){if(r.depth%2!==0)continue;const o=Gf(r.loop,{clockwise:!0}),i=Y$(o),s=t.filter(a=>a.parentIndex===r.index&&a.depth%2===1).map(a=>Gf(a.loop,{clockwise:!1}));n.push({index:n.length,transformIndex:0,leftX:i.minX,rightX:i.maxX,outerLoop:o,holeLoops:s,isLeftExterior:!0,isRightExterior:!0})}if(!n.length)throw new Error("DXF preview could not build flat extrusion geometry");return n}function Q$(e,t,n,r,o){const i=[(t.start[0]+t.end[0])/2,(t.start[1]+t.end[1])/2];if(n>=0){const a=r.find(l=>l.foldIndex===n);if(a){const[l,c]=a.regions;return o[c]?.region===l?l:c}}const s=e.findIndex(a=>aP(i,a.outerLoop));return s>=0?s:0}function eG(e,t,n){for(const r of n.foldLines||[]){if(r.halfWidth<=kc)continue;const o=Math.abs(Nl(r,e)),i=Math.abs(Nl(r,t));if(Math.abs(o-r.halfWidth)<=.001&&Math.abs(i-r.halfWidth)<=.001)return!0}return!1}function lP(e,t,n,r,o){const i=e.length/3;e.push(...n,...r,...o),t.push(i,i+1,i+2)}function tG(e,t,n,r=!0){const o=t[0]-e[0],i=t[2]-e[2],s=n[0]-e[0],a=n[2]-e[2],l=i*s-o*a;return r&&l<0||!r&&l>0?[e,n,t]:[e,t,n]}function Vu(e,t){const[n,r,o]=t,i=e.elements;return[i[0]*n+i[4]*r+i[8]*o+i[12],i[1]*n+i[5]*r+i[9]*o+i[13],i[2]*n+i[6]*r+i[10]*o+i[14]]}function Wb(e,t,n,r,o,i,s){const a=tG(Vu(n,r),Vu(n,o),Vu(n,i),s);lP(e,t,a[0],a[1],a[2])}function Kb(e,t,n,r){return e.push(t,n,r),e.length/3-1}function lS(e,t,n,r,o){const i=Vu(n,r),s=Vu(n,o),a=Kb(e,i[0],i[1],i[2]),l=Kb(e,s[0],s[1],s[2]);t.push(a,l)}function uI(e,t,n,r,o,i,s=()=>!1){for(let a=0;a<r.length;a+=1){const l=r[a],c=r[(a+1)%r.length];s(l,c)||(Wb(e,t,n,[l[0],o,l[1]],[c[0],o,c[1]],[c[0],i,c[1]],!0),Wb(e,t,n,[l[0],o,l[1]],[c[0],i,c[1]],[l[0],i,l[1]],!0))}}function dI(e,t,n,r,o,i,s=()=>!1){for(let a=0;a<r.length;a+=1){const l=r[a],c=r[(a+1)%r.length];s(l,c)||(lS(e,t,n,[l[0],o,l[1]],[c[0],o,c[1]]),lS(e,t,n,[l[0],i,l[1]],[c[0],i,c[1]]),lS(e,t,n,[l[0],o,l[1]],[l[0],i,l[1]]))}}function nG(e){return(sP(e?.direction)===gb.DOWN?-1:1)*(Ih(e?.angleDeg)*Math.PI/180)}function rG(e){if(!e.length)return{min:[0,0,0],max:[0,0,0]};let t=Number.POSITIVE_INFINITY,n=Number.POSITIVE_INFINITY,r=Number.POSITIVE_INFINITY,o=Number.NEGATIVE_INFINITY,i=Number.NEGATIVE_INFINITY,s=Number.NEGATIVE_INFINITY;for(let a=0;a<e.length;a+=3){const l=e[a],c=e[a+1],u=e[a+2];t=Math.min(t,l),n=Math.min(n,c),r=Math.min(r,u),o=Math.max(o,l),i=Math.max(i,c),s=Math.max(s,u)}return{min:[t,n,r],max:[o,i,s]}}function oG(e){const{loops:t,bendLines:n}=G$(e),r=[...t].sort((a,l)=>Math.abs(iE(l))-Math.abs(iE(a))),o=Gf(r[0]||[],{clockwise:!0});if(!o.length)throw new Error("DXF preview requires one outer contour");const i=r.slice(1).map(a=>Gf(a,{clockwise:!1})),s=oP(n);return{loops:r,outerLoop:o,holeLoops:i,bendLines:s}}function iG(e,t,n=null,r=null){const o=r?.guideElevationSign===-1?-1:1,{loops:i,outerLoop:s,holeLoops:a,bendLines:l}=oG(e),c=K$(t,Ri(e?.defaultThicknessMm,nE)),u=q$(e,n);W$(l,u);const f=c/2;let m,p,b;const y=l.some((R,O)=>Ih(u?.[O]?.angleDeg,0)!==0);let x=[];if(l.length&&y){const R=[],O=[];l.forEach((Y,D)=>{const j=u?.[D];if(Ih(j?.angleDeg,0)===0){O.push({bendLine:Y,foldIndex:-1});return}const X=D$({bendLine:Y,angleRadians:nG(j),insideRadiusMm:Ri(r?.bendInsideRadiusMm,0),kFactor:Dc(Ri(r?.bendKFactor,.5),.05,.95),halfThicknessMm:f});if(!X)throw new Error("DXF bend line length is too small for preview bending");O.push({bendLine:Y,foldIndex:R.length}),R.push(X)});const{regions:F,adjacency:V}=_$(s,R);L$(F,a,R);const{placements:$,parents:K}=k$(F,R,V);m=F.map((Y,D)=>({index:D,transformIndex:D,outerLoop:Gf(Y.outerLoop,{clockwise:!0}),holeLoops:Y.holeLoops.map(j=>Gf(j,{clockwise:!1})),region:Y,foldLines:R})),b=$,x=V.map(Y=>{const[D,j]=Y.regions,ee=K[j]?.region===D,X=ee?D:j,ve=ee?j:D,q=R[Y.foldIndex],re=F[ve].sides.find(He=>He.foldIndex===Y.foldIndex)?.side||1,Be=Hb(F[X],q),Me=Hb(F[ve],q);return!Be||!Me?null:j$({foldLine:q,side:re,span:{min:Math.max(Be.min,Me.min),max:Math.min(Be.max,Me.max)},halfThickness:f,parentMatrix:$[X]})}).filter(Boolean);const U=o*(f+lI);p=O.flatMap(({bendLine:Y,foldIndex:D})=>{const j=Q$(F,Y,D,V,K),ee=b[j]||new $r().identity();return[...Vu(ee,[Y.start[0],U,Y.start[1]]),...Vu(ee,[Y.end[0],U,Y.end[1]])]})}else{m=J$(i),b=[new $r().identity()];const R=o*(f+lI);p=l.flatMap(O=>[O.start[0],R,O.start[1],O.end[0],R,O.end[1]])}const S=[],E=[],C=[],A=[];for(const R of m){const O=b[R.transformIndex]||b[b.length-1]||new $r().identity(),F=R.outerLoop.map(([Y,D])=>new Rl(Y,D)),V=R.holeLoops.map(Y=>Y.map(([D,j])=>new Rl(D,j))),$=E2.triangulateShape(F,V),K=F.concat(...V);for(const Y of $){const D=K[Y[0]],j=K[Y[1]],ee=K[Y[2]];Wb(S,E,O,[D.x,f,D.y],[j.x,f,j.y],[ee.x,f,ee.y],!0),Wb(S,E,O,[D.x,-f,D.y],[j.x,-f,j.y],[ee.x,-f,ee.y],!1)}const U=R.foldLines?(Y,D)=>eG(Y,D,R):()=>!1;uI(S,E,O,R.outerLoop,f,-f,U),dI(C,A,O,R.outerLoop,f,-f,U);for(const Y of R.holeLoops)uI(S,E,O,Y,f,-f),dI(C,A,O,Y,f,-f)}for(const R of x){for(const[O,F,V]of R.triangles)lP(S,E,O,F,V);for(const[O,F]of R.edges){Kb(C,O[0],O[1],O[2]),Kb(C,F[0],F[1],F[2]);const V=C.length/3-2;A.push(V,V+1)}}const N=S.length/3,w=new Float32Array(S.length+C.length);w.set(S,0),w.set(C,S.length);const _=new Uint32Array(A.length);for(let R=0;R<A.length;R+=1)_[R]=A[R]+N;return{format_version:"dxf-preview-mesh-v2",has_source_colors:!1,bounds:rG(w),vertex_count:w.length/3,triangle_count:E.length/3,edge_index_count:_.length,vertices:w,colors:new Float32Array(0),normals:new Float32Array(0),indices:new Uint32Array(E),edge_indices:_,guide_line_segments:new Float32Array(p),parts:[]}}const sG=48,fI=8;function aG(e){return typeof e=="string"?e:""}function cP(e,t,n,r,o,i){e.push(t,i,n,r,i,o)}function lG(e,t){const n=Math.max(fI,t),r=Math.min(1,Math.abs(e)/(Math.PI*2));return Math.max(fI,Math.ceil(n*r))}function uP(e,t,n,r){const[o,i]=t.center||[0,0],s=Number(t.radius);if(!Number.isFinite(s)||s<=0)return;const a=Number(t.startAngle??t.start_angle??0),l=Number(t.endAngle??t.end_angle??0);if(!Number.isFinite(a)||!Number.isFinite(l))return;const c=a*Math.PI/180;let u=(l-a)*Math.PI/180;u<=0&&(u+=Math.PI*2);const f=lG(u,r);let m=null;for(let p=0;p<=f;p+=1){const b=c+u*(p/f),y=[o+s*Math.cos(b),i+s*Math.sin(b)];m&&cP(e,m[0],m[1],y[0],y[1],n),m=y}}function cG(e,t,n,r){uP(e,{center:t.center,radius:t.radius,startAngle:0,endAngle:360},n,r)}function uG(e,t=null){const n=e?.geometry,r=Number(t?.elevation)||0,o=Number(t?.arcSegments)||sG,i=new Map,s=l=>{const c=aG(l);return i.has(c)||i.set(c,[]),i.get(c)};if(!n||typeof n!="object")return{layers:[]};for(const l of Array.isArray(n.lines)?n.lines:[]){const c=l?.start,u=l?.end;!Array.isArray(c)||!Array.isArray(u)||cP(s(l.layer),c[0],c[1],u[0],u[1],r)}for(const l of Array.isArray(n.arcs)?n.arcs:[])uP(s(l?.layer),l,r,o);for(const l of Array.isArray(n.circles)?n.circles:[])cG(s(l?.layer),l,r,o);const a=[];for(const[l,c]of i)c.length&&a.push({name:l,positions:new Float32Array(c)});return{layers:a}}function dG(e){const t=[1/0,1/0,1/0],n=[-1/0,-1/0,-1/0];for(const r of e?.layers||[]){const{positions:o}=r;for(let i=0;i<o.length;i+=3)for(let s=0;s<3;s+=1){const a=o[i+s];a<t[s]&&(t[s]=a),a>n[s]&&(n[s]=a)}}return Number.isFinite(t[0])?{min:t,max:n}:null}const Fs="__step_model__",Qp="__model__",Nh="step-topology:",fG=new Set(["occurrence","shape","face","edge"]);function Ct(e,t=""){return String(e??t).trim()}function mG(e){const t=Number(e);return!Number.isFinite(t)||t<1?null:Math.floor(t)}function sE(e){const t=Ct(e);return t?t.split(/[\\/]/).filter(Boolean).pop()||t:""}function pG(e){return Ct(e).replace(/\.(?:step|stp)$/i,"")||"STEP part"}function fa(e){return Ct(e?.id||e?.occurrenceId)}function Ev(e){return Ct(e?.displayName||e?.name||e?.label||e?.sourcePath&&sE(e.sourcePath)||e?.partSourcePath&&sE(e.partSourcePath)||e?.id,"STEP")}function dP(e){return Ct(e?.detail||e?.summary||e?.shortSummary)}function Yr(e){return Array.isArray(e?.children)?e.children:[]}function hG(e){const t=Ct(e?.nodeType);return t.startsWith("topology-")?t.slice(9):""}function fP(e){const t=Array.isArray(e?.leafPartIds)?e.leafPartIds.map(s=>Ct(s)).filter(Boolean):[];if(t.length)return[...new Set(t)];const n=Ct(e?.nodeType),r=fa(e);if(n==="part"&&r)return[r];const o=[],i=[...Yr(e)].reverse();for(;i.length;){const s=i.pop(),a=Ct(s?.nodeType),l=Yr(s);if(l.length){for(let c=l.length-1;c>=0;c-=1)i.push(l[c]);continue}if(a==="part"){const c=fa(s);c&&o.push(c)}}return[...new Set(o)]}function gG({selectedEntry:e=null,meshData:t=null}={}){const n=Ct(e?.file&&sE(e.file)||"STEP part");return{id:Fs,occurrenceId:"",nodeType:"part",displayName:n,name:n,sourceKind:"entry",leafPartIds:[Qp],bbox:t?.bounds||null,children:[]}}function yG({selectedEntry:e=null,assemblyRoot:t=null,meshData:n=null}={}){return t&&typeof t=="object"?t:n?gG({selectedEntry:e,meshData:n}):null}function bG(e,t){if(!t)return!0;const n=Ct(t).toLowerCase();return n?[Ev(e),dP(e),fa(e),e?.occurrenceId,e?.topologyReferenceId,e?.displaySelector,e?.sourcePath,e?.partSourcePath].map(o=>Ct(o).toLowerCase()).join(" ").includes(n):!0}function Xu(e){return Ct(e?.displaySelector||e?.normalizedSelector||e?.id)}function xG(e){const t=Ct(e);return t?t.split(".").filter(Boolean).pop()||t:""}function SG(e){const t=Ct(e);if(!t)return"";const n=t.match(/^(.*)\.[sfe]\d+$/i);return n?n[1]:t}function mP(e){return Ct(e?.selectorType)==="occurrence"?Xu(e):Ct(e?.occurrenceId)||SG(Xu(e))}function EG(e){const t=e?.pickData&&typeof e.pickData=="object"?e.pickData:{};return Ct(e?.name||e?.sourceName||t.name||t.sourceName)}function pP(e){const t=Ct(e?.selectorType),n=Xu(e),r=xG(n),o=EG(e),i=Ct(e?.summary||e?.shortSummary);return t==="occurrence"?i||o||n||"Occurrence":t==="shape"?o||(r?`Shape ${r}`:"Shape"):t==="face"?r?`Face ${r}`:"Face":t==="edge"?r?`Edge ${r}`:"Edge":i||n||"Topology"}function wG(e){const t=Ct(e?.selectorType),n=Xu(e),r=pP(e),o=Ct(e?.summary||e?.shortSummary);return t==="occurrence"?o&&o!==n&&o!==r?n:"":t==="shape"?o&&o!==r?o:n:o}function wv(e,t,n){return`${Nh}${e||"part"}:${t}:${n||"item"}`}function cS(e,t){const n=Number(e?.rowIndex),r=Number(t?.rowIndex);return Number.isFinite(n)&&Number.isFinite(r)&&n!==r?n-r:Number.isFinite(n)?-1:Number.isFinite(r)?1:Xu(e).localeCompare(Xu(t))}function cy({reference:e,selectorType:t,partId:n,occurrenceId:r}){const o=Xu(e);return{id:wv(n,t,o||Ct(e?.id)),nodeType:`topology-${t}`,displayName:pP(e),detail:wG(e),topologyReferenceId:Ct(e?.id),displaySelector:o,partId:n,occurrenceId:r,shapeId:Ct(e?.shapeId),children:[]}}function vG({partId:e,occurrenceId:t,children:n}){const r=wv(e,"occurrence",t);return{id:r,nodeType:"topology-occurrence",displayName:t||"Occurrence",detail:"",topologyReferenceId:r,displaySelector:t,partId:e,occurrenceId:t,children:n}}function AG({partNode:e,partId:t,children:n}){const r=pG(Ev(e));return{id:wv(t,"folder","faces-edges"),nodeType:"topology-folder",displayName:r,name:r,detail:"",topologyReferenceId:"",displaySelector:"",partId:t,selectionPartId:t,leafPartIds:[Qp],visualOnly:!0,children:n}}function mI(e){const t=Ct(e);if(!t)return[];const n=[t];if(t.startsWith("#")&&n.push(t.slice(1)),t.startsWith(Nh)){const r=Ct(t.split(":").pop());r&&n.push(r)}return[...new Set(n.filter(Boolean))]}function CG(e,t,n){return Ct(t?.nodeType)!=="topology-occurrence"?!1:n===1?!0:hP(e,t)}function hP(e,t){if(Ct(t?.nodeType)!=="topology-occurrence")return!1;const n=Ct(t?.occurrenceId||t?.displaySelector);if(!n)return!1;const r=[fa(e),e?.occurrenceId,e?.sourceOccurrenceId,e?.sourceRootTargetOccurrenceId,e?.topologyReferenceId,e?.displaySelector,e?.displayName,e?.name,e?.label].flatMap(mI);return[n,fa(t),t?.topologyReferenceId,t?.displaySelector,t?.displayName,t?.name,t?.label].flatMap(mI).some(i=>r.includes(i))}function MG(e,t){const n=Array.isArray(t)?t:[];return n.flatMap(r=>CG(e,r,n.length)?Yr(r):[r])}function IG(e,t){const n=Array.isArray(t)?t:[];return!n.length||Ct(e?.nodeType)!=="part"||fa(e)!==Fs?n:[AG({partNode:e,partId:Fs,children:n})]}function NG(e,t){return Ct(e?.partId)||Ct(t)}function np(e,t,n,r,o=0){const i=Ct(n),s=Ct(r);if(!i||!s)return;const a=`${i}\0${s}`;t.has(a)||(t.add(a),e.push({partId:i,occurrenceId:s,priority:Number.isFinite(Number(o))?Number(o):0}))}function TG(e){const t=[],n=new Set,r=e?[e]:[];for(;r.length;){const o=r.pop(),i=Yr(o);for(let a=i.length-1;a>=0;a-=1)r.push(i[a]);if(Ct(o?.nodeType)!=="part")continue;const s=fa(o);if(s){np(t,n,s,s,0),np(t,n,s,o?.occurrenceId,0);for(const a of fP(o))np(t,n,s,a,1);np(t,n,s,o?.sourceOccurrenceId,2),np(t,n,s,o?.sourceRootTargetOccurrenceId,2)}}return t.sort((o,i)=>i.occurrenceId.length-o.occurrenceId.length||o.priority-i.priority)}function _G(e,t){const n=Ct(e),r=Ct(t);return!!(n&&r&&(n===r||n.startsWith(`${r}.`)))}function RG(e=null,t=[]){const n=Array.isArray(t)?t:[],r=TG(e);if(!n.length||!r.length)return n;let o=!1;const i=n.map(s=>{if(!s||typeof s!="object"||Ct(s.partId))return s;const a=mP(s),l=r.find(c=>_G(a,c.occurrenceId));return l?(o=!0,{...s,partId:l.partId}):s});return o?i:n}function PG(e,t){const n=new Map;for(const r of Array.isArray(e)?e:[]){const o=Ct(r?.selectorType);if(!fG.has(o))continue;const i=NG(r,t),s=mP(r);if(!i||!s)continue;let a=n.get(i);a||(a=new Map,n.set(i,a));let l=a.get(s);l||(l={occurrence:null,shapes:[],faces:[],edges:[]},a.set(s,l)),o==="occurrence"?l.occurrence=r:o==="shape"?l.shapes.push(r):o==="face"?l.faces.push(r):o==="edge"&&l.edges.push(r)}return new Map([...n.entries()].map(([r,o])=>{const i=[...o.entries()].sort(([s],[a])=>s.localeCompare(a)).map(([s,a])=>{const l=[...a.shapes.sort(cS).map(c=>cy({reference:c,selectorType:"shape",partId:r,occurrenceId:s})),...a.faces.sort(cS).map(c=>cy({reference:c,selectorType:"face",partId:r,occurrenceId:s})),...a.edges.sort(cS).map(c=>cy({reference:c,selectorType:"edge",partId:r,occurrenceId:s}))];return a.occurrence?{...cy({reference:a.occurrence,selectorType:"occurrence",partId:r,occurrenceId:s}),children:l}:vG({partId:r,occurrenceId:s,children:l})});return[r,i]}))}function OG({root:e=null,references:t=[],fallbackPartId:n="",topologyPartIds:r=null}={}){if(!e||typeof e!="object")return e;const o=r==null?null:new Set((Array.isArray(r)?r:[r]).map(a=>Ct(a)).filter(Boolean)),i=PG(t,n||fa(e));if(!i.size)return e;function s(a){const l=fa(a),c=Yr(a).map(m=>s(m)),f=(!o||o.has(l))&&Ct(a?.nodeType)==="part"?IG(a,MG(a,i.get(l)||[])):[];return!c.length&&!f.length?a:{...a,children:[...c,...f]}}return s(e)}function gP(e,t){return!t||bG(e,t)?!0:Yr(e).some(n=>gP(n,t))}function vv(e,t=[],{query:n="",omitRoot:r=!1,rootChildLimit:o=null,showAllRootChildren:i=!0}={}){if(!e)return[];const s=new Set((Array.isArray(t)?t:[]).map(p=>Ct(p)).filter(Boolean)),a=Ct(n).toLowerCase(),l=mG(o),c=!!(l&&i!==!0&&!a),u=[];function f(p){return c?p.slice(0,l):p}function m(p,b,y={},x=null){if(a&&!gP(p,a))return;const S=fa(p),E=Yr(p),C=E.length>0,N=!!(a&&C)||s.has(S),w=x&&hP(x,p);if(w||u.push({id:S,node:p,label:Ev(p),detail:dP(p),nodeType:Ct(p?.nodeType),topologyType:hG(p),topologyReferenceId:Ct(p?.topologyReferenceId),depth:b,hasChildren:C,expanded:N,leafPartIds:fP(p)}),!C||!N&&!w)return;const _=y.isRoot?f(E):E;for(const I of _)m(I,w?b:b+1,{},p)}if(r)for(const p of f(Yr(e)))m(p,0,{},e);else m(e,0,{isRoot:!0});return u}function kG(e,t){const n=Ct(t);if(!e||!n)return[];const r=[];function o(i){const s=fa(i);if(r.push(s),s===n)return!0;for(const a of Yr(i))if(o(a))return!0;return r.pop(),!1}return o(e)?r.slice(0,-1).filter(Boolean):[]}function DG(e){if(!e||typeof e.getSelection!="function")return null;try{return e.getSelection()}catch{return null}}function LG(e){if(!e||typeof e.rangeCount!="number"||typeof e.getRangeAt!="function")return[];const t=[];for(let n=0;n<e.rangeCount;n+=1)try{t.push(e.getRangeAt(n))}catch{return t}return t}function FG(e,t){if(!(!e||typeof e.removeAllRanges!="function"||typeof e.addRange!="function"))try{e.removeAllRanges();for(const n of t)e.addRange(n)}catch{}}function pI(e){if(!(!e||typeof e.focus!="function"))try{e.focus({preventScroll:!0})}catch{try{e.focus()}catch{}}}function jG(e){const t=globalThis.document;if(!t?.body||typeof t.createElement!="function"||typeof t.execCommand!="function")return!1;const n=t.activeElement,r=DG(t),o=LG(r),i=t.createElement("textarea");i.value=e,i.setAttribute("readonly",""),i.setAttribute("aria-hidden","true"),i.style.position="fixed",i.style.top="0",i.style.left="-9999px",i.style.width="1px",i.style.height="1px",i.style.opacity="0",t.body.appendChild(i),pI(i),i.select();let s=!1;try{s=t.execCommand("copy")}finally{t.body.removeChild(i),FG(r,o),n&&n!==i&&pI(n)}return s}function zG(e,t){if(!e||typeof e!="object")throw new Error("Failed to encode screenshot");const n=String(e.type||t).trim();return!n||e.type===n?e:e.slice(0,e.size,n)}function yP(e){const t=String(e?.name||"").toLowerCase(),n=String(e?.message||e||"").toLowerCase();return t.includes("notallowed")||t.includes("security")||n.includes("permission")||n.includes("denied")||n.includes("not allowed")}function BG(e){return yP(e)?new Error("Clipboard image copy is blocked in this browser."):e instanceof Error?e:new Error("Clipboard image copy failed")}function VG(e){return yP(e)?new Error("Clipboard paste is blocked in this browser"):e instanceof Error?e:new Error("Clipboard paste failed")}async function $G(e,{type:t="image/png"}={}){const n=globalThis.navigator?.clipboard,r=globalThis.ClipboardItem,o=String(t||"image/png").trim()||"image/png",i=Promise.resolve(e).then(a=>zG(a,o));if(!n?.write||typeof r!="function")throw new Error("Clipboard image copy is not supported in this browser");let s;try{s=new r({[o]:i})}catch{const a=await i,l=String(a.type||o).trim()||o;s=new r({[l]:a})}try{await n.write([s])}catch(a){throw i.catch(()=>{}),BG(a)}return await i}async function js(e){const t=String(e??""),n=globalThis.navigator?.clipboard;let r=null;if(typeof n?.writeText=="function")try{await n.writeText(t);return}catch(o){r=o}if(!jG(t))throw r instanceof Error?r:new Error("Clipboard is unavailable")}async function GG(){const e=globalThis.navigator?.clipboard;if(typeof e?.readText!="function")throw new Error("Clipboard paste is unavailable");try{return await e.readText()}catch(t){throw VG(t)}}const UG="Download was blocked by the browser";function bP(e){return String(e||"").trim()}function HG(e){const t=bP(e);return t?`Downloading ${t}`:"Downloading file"}function WG(){const e=globalThis.document;if(!e||typeof e.createElement!="function")throw new Error("Downloads are not available in this browser");return e}function KG(e){if(typeof e.click!="function")throw new Error("Downloads are not available in this browser");try{e.click()}catch(t){throw t instanceof Error?t:new Error(UG)}}function aE(e,{filename:t=""}={}){const n=String(e||"").trim();if(!n)throw new Error("No download URL is available");const r=WG(),o=r.createElement("a");o.href=n,o.rel="noopener";const i=bP(t);i&&(o.download=i),o.style&&(o.style.display="none"),r.body?.appendChild?.(o);try{KG(o)}finally{r.body?.removeChild?.(o)}return{filename:i,message:HG(i),status:"requested"}}function qG(e,{filename:t=""}={}){if(!e||typeof e!="object")throw new Error("No download data is available");const n=globalThis.URL;if(typeof n?.createObjectURL!="function")throw new Error("Downloads are not available in this browser");const r=n.createObjectURL(e);try{return aE(r,{filename:t})}finally{const o=()=>{n.revokeObjectURL?.(r)};typeof globalThis.setTimeout=="function"?globalThis.setTimeout(o,1e3):o()}}function YG(e,{fieldName:t="camera vector",required:n=!1,nonZero:r=!1,strict:o=!0}={}){if(e==null){if(n&&o)throw new Error(`${t} must be a three-number array`);return null}if(!Array.isArray(e)||e.length<3){if(o)throw new Error(`${t} must be a three-number array`);return null}const i=[Number(e[0]),Number(e[1]),Number(e[2])];if(!i.every(Number.isFinite)){if(o)throw new Error(`${t} must contain only finite numbers`);return null}if(r&&i[0]**2+i[1]**2+i[2]**2<=1e-12){if(o)throw new Error(`${t} must not be the zero vector`);return null}return i}function XG(e){return YG(e,{strict:!1})}function lE(e,t=1,{fieldName:n="camera.zoom",strict:r=!1}={}){if(e==null||e==="")return t;const o=Number(e);if(Number.isFinite(o)&&o>0)return o;if(r)throw new Error(`${n} must be a positive finite number`);return t}function _i(e){return String(e||"").trim()}const Vr=Object.freeze({PERSPECTIVE:"perspective",ORTHOGRAPHIC:"orthographic"});function Bc(e,t=Vr.PERSPECTIVE){const n=String(e||"").trim().toLowerCase();return n===Vr.ORTHOGRAPHIC?Vr.ORTHOGRAPHIC:n===Vr.PERSPECTIVE?Vr.PERSPECTIVE:t===Vr.ORTHOGRAPHIC?Vr.ORTHOGRAPHIC:Vr.PERSPECTIVE}function uS(e){return XG(e)}function sa(e){if(!e||typeof e!="object")return null;const t=uS(e.position),n=uS(e.target),r=uS(e.up);if(!t||!n||!r)return null;const o={position:t,target:n,up:r};Object.prototype.hasOwnProperty.call(e,"zoom")&&(o.zoom=lE(e.zoom,1)),Object.prototype.hasOwnProperty.call(e,"projection")&&(o.projection=Bc(e.projection));const i=_i(e.modelKey),s=_i(e.sceneScaleMode),a=_i(e.coordinateSystem);return i&&(o.modelKey=i),s&&(o.sceneScaleMode=s),a&&(o.coordinateSystem=a),o}function ZG(e,{modelKey:t="",sceneScaleMode:n="",coordinateSystem:r=""}={}){const o=sa(e);if(!o)return null;const i=_i(t),s=_i(n),a=_i(r);return i&&(o.modelKey=i),s&&(o.sceneScaleMode=s),a&&(o.coordinateSystem=a),o}function dS(e,t){return sa(typeof e<"u"?e:t)}function fS(e,t,n=1e-4){if(e===t)return!0;if(!Array.isArray(e)||!Array.isArray(t)||e.length!==t.length)return!1;for(let r=0;r<e.length;r+=1)if(Math.abs((Number(e[r])||0)-(Number(t[r])||0))>n)return!1;return!0}function xP(e,t,n=1e-4){return e===t?!0:!e||!t?!e&&!t:fS(e.position,t.position,n)&&fS(e.target,t.target,n)&&fS(e.up,t.up,n)&&Math.abs(lE(e.zoom,1)-lE(t.zoom,1))<=n&&Bc(e.projection)===Bc(t.projection)&&_i(e.modelKey)===_i(t.modelKey)&&_i(e.sceneScaleMode)===_i(t.sceneScaleMode)&&_i(e.coordinateSystem)===_i(t.coordinateSystem)}function mS(e,{modelKey:t="",sceneScaleMode:n="",coordinateSystem:r="",requireModelKey:o=!1,requireSceneScaleMode:i=!1,requireCoordinateSystem:s=!1}={}){const a=sa(e);if(!a)return!1;const l=_i(t);if(o&&l&&a.modelKey!==l||l&&a.modelKey&&a.modelKey!==l)return!1;const c=_i(n);if(i&&c&&a.sceneScaleMode!==c||c&&a.sceneScaleMode&&a.sceneScaleMode!==c)return!1;const u=_i(r);return!(s&&u&&a.coordinateSystem!==u||u&&a.coordinateSystem&&a.coordinateSystem!==u)}const Kr={NONE:"none",AUTO:"auto",ASSEMBLY:"assembly",PARTS:"parts",MEASURE:"measure"},qb=Object.freeze(["x","y","z"]),Th=Object.freeze({x:0,y:0,z:0}),Yb=Object.freeze({enabled:!1,axis:"x",offset:Th.x,offsets:Th,invert:!1}),hI=Object.freeze({x:0,y:1,z:2}),SP=1e-6;function Uf(e,t){const n=Number(e);return Number.isFinite(n)?n:t}function EP(e,t,n){return Math.min(Math.max(e,t),n)}function Va(e=null){const t=e&&typeof e=="object"?e:{},n=qb.includes(String(t.axis||"").toLowerCase())?String(t.axis).toLowerCase():Yb.axis,r=t.offsets&&typeof t.offsets=="object"?t.offsets:{},o=Uf(t.offset,Yb.offset),i=Object.fromEntries(qb.map(c=>[c,EP(Uf(r[c],c===n?o:Th[c]),0,1)])),s=i[n],a=s>SP;return{enabled:(t.enabled===!0?!0:t.enabled===!1?!1:a)&&a,axis:n,offset:s,offsets:i,invert:t.invert===!0}}function JG(e,t){const n=Va(e),r=Va(t);return n.enabled===r.enabled&&n.axis===r.axis&&Math.abs(n.offset-r.offset)<1e-6&&qb.every(o=>Math.abs((n.offsets?.[o]??Th[o])-(r.offsets?.[o]??Th[o]))<1e-6)&&n.invert===r.invert}function wP(e){return hI[String(e||"").toLowerCase()]??hI.x}function vP(e,t){const n=wP(t),r=Uf(e?.min?.[n],0),o=Uf(e?.max?.[n],r);return r<=o?{min:r,max:o}:{min:o,max:r}}function QG(e,t){const n=Va(t),{min:r,max:o}=vP(e,n.axis);return r+(o-r)*n.offset}function e4(e,t,n=1e-5){if(!e||!t||typeof e.distanceToPoint!="function")return!0;const r=Math.abs(Uf(n,1e-5));return e.distanceToPoint(t)>=-r}function t4(e,t){const n=Va(e),r=t&&typeof t=="object"?t:{},o=Object.prototype.hasOwnProperty.call(r,"enabled"),i=Object.prototype.hasOwnProperty.call(r,"offset")||r.offsets&&typeof r.offsets=="object",s=qb.includes(String(r.axis||"").toLowerCase())?String(r.axis).toLowerCase():n.axis,a={...n.offsets,...r.offsets&&typeof r.offsets=="object"?r.offsets:{}};Object.prototype.hasOwnProperty.call(r,"offset")&&(a[s]=r.offset);const l=EP(Uf(a[s],0),0,1);return Va({...n,...r,...!o&&i?{enabled:l>SP}:{},axis:s,offsets:a,offset:a[s]})}const $t=Object.freeze({HIDDEN_EDGES:"hidden_edges",HIDDEN_LINES_REMOVED:"hidden_lines_removed",RENDERED:"rendered",SOLID:"solid",TRANSPARENT:"transparent",UNSHADED:"unshaded",WIREFRAME:"wireframe"}),n4=Object.freeze(Object.values($t)),r4=/^#(?:[0-9a-fA-F]{3}){1,2}$/,ku="#132232",AP="#8dc5ff",o4=Object.freeze(["feature","tangent","seam","degenerate"]),cE=Object.freeze({feature:Object.freeze({color:ku,opacity:1,thickness:1.15}),tangent:Object.freeze({color:ku,opacity:.5,thickness:1.15}),seam:Object.freeze({color:ku,opacity:.85,thickness:1.15}),degenerate:Object.freeze({color:ku,opacity:1,thickness:0})}),J0=Object.freeze({enabled:!0,color:ku,thickness:1,classes:cE,highlightColor:AP,highlightOpacity:1,highlightThickness:3,silhouette:!1,silhouetteScale:0});Object.freeze({...J0,enabled:!1});const CP=Object.freeze({enabled:!1,amount:0});Object.freeze({mode:$t.SOLID,clip:Yb,exploded:CP,edges:J0});function _h(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function i4(e,t,n){return Math.min(Math.max(e,t),n)}function Du(e,t,n=-1/0,r=1/0){const o=Number(e);return Number.isFinite(o)?i4(o,n,r):t}function Xb(e,t){const n=String(e||"").trim();return r4.test(n)?n.length===4?`#${n[1]}${n[1]}${n[2]}${n[2]}${n[3]}${n[3]}`.toLowerCase():n.toLowerCase():t}function gI(e,t=!1){return typeof e=="boolean"?e:t}function s4(e={},t=cE,n=ku){const r=_h(e)?e:{},o=Xb(n,ku);return Object.fromEntries(o4.map(i=>{const s=_h(r[i])?r[i]:{},a=t?.[i]||cE[i];return[i,{color:Xb(s.color,o),opacity:Du(s.opacity,a.opacity,0,1),thickness:Du(s.thickness,a.thickness,0,6)}]}))}function Zu(e=null,t=J0){const n=_h(e)?e:{},r=Xb(n.color,t.color),o={enabled:gI(n.enabled,t.enabled),color:r,thickness:Du(n.thickness,t.thickness,.5,6),classes:s4(n.classes,t.classes,r),highlightColor:Xb(n.highlightColor,t.highlightColor||AP),highlightOpacity:Du(n.highlightOpacity,t.highlightOpacity||1,0,1),highlightThickness:Du(n.highlightThickness,t.highlightThickness||3,.5,6),silhouette:gI(n.silhouette,t.silhouette||!1),silhouetteScale:Du(n.silhouetteScale,t.silhouetteScale||0,0,.04)};return typeof n.depthTest=="boolean"&&(o.depthTest=n.depthTest),o}function a4(e){return String(e||"").trim().toLowerCase().replace(/\s+/g,"_").replace(/-/g,"_")}function ga(e){const t=a4(e);return t?t==="wire"||t==="wire_frame"?$t.WIREFRAME:t==="edges"||t==="edge"||t==="shaded_edges"||t==="shaded_with_edges"||t==="with_edges"?$t.SOLID:t==="shaded"||t==="shaded_without_edges"||t==="without_edges"?$t.RENDERED:t==="translucent"||t==="xray"||t==="x_ray"||t==="see_through"?$t.TRANSPARENT:t==="hidden_edge"||t==="hidden_edges_visible"||t==="hidden_edge_display"||t==="shaded_hidden_edges"?$t.HIDDEN_EDGES:t==="visible_edges"||t==="visible_edges_only"||t==="hidden_lines"||t==="hidden_line_removed"||t==="hidden_lines_removed"||t==="hidden_edges_removed"?$t.HIDDEN_LINES_REMOVED:t==="flat"?$t.UNSHADED:t==="theme"||t==="material"||t==="materials"?$t.RENDERED:n4.includes(t)?t:$t.SOLID:$t.SOLID}function MP(e=null){const t=_h(e)?e:{};return{enabled:!!t.enabled,amount:Du(t.amount,CP.amount,0,1)}}function $i(e=null){const t=_h(e)?e:{};return{mode:ga(t.mode),clip:Va(t.clip),exploded:MP(t.exploded),edges:Zu(t.edges)}}function l4(e,t){const n=$i(e),r=$i(t);return n.mode===r.mode&&JG(n.clip,r.clip)&&JSON.stringify(n.exploded)===JSON.stringify(r.exploded)&&JSON.stringify(n.edges)===JSON.stringify(r.edges)}function c4(e){return $i(e).edges}function Fl(e){return ga(e)===$t.WIREFRAME}function Q0(e){return[$t.SOLID,$t.TRANSPARENT,$t.HIDDEN_EDGES,$t.HIDDEN_LINES_REMOVED].includes(ga(e))}function u4(e){return![$t.RENDERED,$t.UNSHADED].includes(ga(e))}function d4(e,t=null){const n=ga(e);return n===$t.WIREFRAME||Q0(n)}function ex(e){return[$t.TRANSPARENT,$t.HIDDEN_EDGES].includes(ga(e))}function f4(e){return[$t.TRANSPARENT,$t.HIDDEN_LINES_REMOVED,$t.WIREFRAME].includes(ga(e))}function m4(e){return[$t.UNSHADED,$t.HIDDEN_LINES_REMOVED,$t.WIREFRAME].includes(ga(e))}function Zb(e,t=1){const n=ga(e);if(n===$t.WIREFRAME)return .035;if(n===$t.TRANSPARENT)return .22;if(n===$t.HIDDEN_LINES_REMOVED)return .045;const r=Number(t);return Number.isFinite(r)?r:1}const p4=/^#(?:[0-9a-fA-F]{3}){1,2}$/,Rh=50,h4=J0;function IP(e,t,n){return Math.min(Math.max(e,t),n)}function rn(e,t,n=-1/0,r=1/0){const o=Number(e);return Number.isFinite(o)?IP(o,n,r):t}function Gn(e,t){const n=String(e||"").trim();return p4.test(n)?n.length===4?`#${n[1]}${n[1]}${n[2]}${n[2]}${n[3]}${n[3]}`.toLowerCase():n.toLowerCase():t}function NP(e,t=Ne?.materials?.defaultColor||"#ffffff"){const r=(Array.isArray(e)?e:[e]).map(o=>Gn(o,"")).filter(Boolean).slice(0,Rh);return r.length?r:[Gn(t,"#ffffff")]}function Av(e={},t=0){const n=NP(e.fillColors,e.defaultColor||Ne?.materials?.defaultColor||"#ffffff"),o=Xo(e.cycleColors,Ne?.materials?.cycleColors||!1)?Math.max(Math.floor(Number(t)||0),0)%n.length:0;return n[o]}function g4(e,t="#000000"){const n=Gn(e,t),r=n.length===4?`#${n[1]}${n[1]}${n[2]}${n[2]}${n[3]}${n[3]}`:n,o=i=>{const s=parseInt(r.slice(i,i+2),16)/255;return s<=.03928?s/12.92:((s+.055)/1.055)**2.4};return{r:o(1),g:o(3),b:o(5)}}function Cu(e,t="#000000"){const n=g4(e,t);return .2126*n.r+.7152*n.g+.0722*n.b}function Xo(e,t=!1){return typeof e=="boolean"?e:t}function y4(e,t="solid"){const n=String(e||"").trim().toLowerCase();return["solid","linear","radial","transparent"].includes(n)?n:t}function b4(e,t="multiply"){const n=String(e||"").trim().toLowerCase();return["multiply","blend"].includes(n)?n:t}const gr=Object.freeze({STAGE:"stage",GRID:"grid",NONE:"none"}),ln=Object.freeze({SYSTEM:"system",LIGHT:"light",DARK:"dark"}),x4=Object.freeze(Object.values(ln));function Jb(e,t=ln.SYSTEM){const n=String(e||"").trim().toLowerCase();return x4.includes(n)?n:t}const TP=Object.freeze([Object.freeze(["background","solidColor"]),Object.freeze(["background","linearStart"]),Object.freeze(["background","linearEnd"]),Object.freeze(["background","radialInner"]),Object.freeze(["background","radialOuter"]),Object.freeze(["floor","color"]),Object.freeze(["floor","gridCenterColor"]),Object.freeze(["floor","gridCellColor"]),Object.freeze(["floor","grid","centerColor"]),Object.freeze(["floor","grid","cellColor"]),Object.freeze(["floor","axis","color"]),Object.freeze(["lighting","directional","color"]),Object.freeze(["lighting","spot","color"]),Object.freeze(["lighting","point","color"]),Object.freeze(["lighting","ambient","color"]),Object.freeze(["lighting","hemisphere","skyColor"]),Object.freeze(["lighting","hemisphere","groundColor"])]);function uE(e,t){return t.reduce((n,r)=>n&&typeof n=="object"?n[r]:void 0,e)}function _P(e,t,n){let r=e;for(let o=0;o<t.length-1;o+=1){const i=t[o];(!r[i]||typeof r[i]!="object"||Array.isArray(r[i]))&&(r[i]={}),r=r[i]}r[t[t.length-1]]=n}function RP(e){return JSON.parse(JSON.stringify(e))}function Qb(e={},t=e){const n={};for(const r of TP){const o=uE(t,r)||"#ffffff";_P(n,r,Gn(uE(e,r),o))}return n}function Cv(e={},t=e){return Object.freeze({light:Qb(e,e),dark:Qb(t,e)})}function Yc(e,t,n=Cv(e,e)){return Object.freeze({...e,colorMode:Jb(t),modeColors:n})}function S4(e={},t=Ne){const n=e&&typeof e=="object"?e:{},r=t&&typeof t=="object"?t:Ne,o=r?.modeColors&&typeof r.modeColors=="object"?r.modeColors:Cv(r,r);return{light:Qb(n.light,o.light||r),dark:Qb(n.dark,o.dark||r)}}function PP(e,t={}){for(const n of TP){const r=uE(t,n);r&&_P(e,n,r)}}const Mv=.25,Iv=4,e0=Object.freeze({enabled:!1,color:"#6b7280",opacity:.5}),E4=1e3,dE=Object.freeze({enabled:!0,gridCenterColor:"#6b7280",gridCellColor:"#cbd5e1",gridOpacity:.18,gridDensity:1,centerColor:"#6b7280",cellColor:"#cbd5e1",opacity:.18,density:1}),Pp=Object.freeze({enabled:!0,color:"#6b7f95",intensity:.46,position:Object.freeze({x:120,y:80,z:210})}),Op=Object.freeze({enabled:!0,color:"#6db6e8",intensity:.04,position:Object.freeze({x:-260,y:240,z:180})});function w4(e,t=gr.STAGE){const n=String(e||"").trim().toLowerCase();return n==="glass"?gr.STAGE:Object.values(gr).includes(n)?n:t}const t0=Object.freeze([{id:"studio-hdri-43",label:"Studio HDRI 43",url:"https://static.morflax.com/textures/env/Studio_HDRI_43.jpg"},{id:"studio-hdri-41",label:"Studio HDRI 41",url:"https://static.morflax.com/textures/env/Studio_HDRI_41.jpg"},{id:"studio-hdri-12",label:"Studio HDRI 12",url:"https://static.morflax.com/textures/env/Studio_HDRI_12.jpg"},{id:"studio-hdri-17",label:"Studio HDRI 17",url:"https://static.morflax.com/textures/env/Studio_HDRI_17.jpg"},{id:"studio-hdri-22",label:"Studio HDRI 22",url:"https://static.morflax.com/textures/env/Studio_HDRI_22.jpg"},{id:"colorful-1",label:"Colorful 1",url:"https://static.morflax.com/textures/env/colorful-1.jpg"},{id:"colorful-dark-1",label:"Colorful Dark 1",url:"https://static.morflax.com/textures/env/colorful-dark-1.jpg"}]),n0=Object.freeze(["#b6c4ce","#f4a7a7","#f8c77e","#f7e38d","#b9e88f","#8fe3c0","#92d7f5","#a9b8ff","#c7a8ff","#f2a7d9"]),eh=Object.freeze(["#4cc9f0"]),th=Object.freeze(["#ff4faf"]),nh=Object.freeze(["#b9856e"]),rh=Object.freeze(["#073a20"]),OP="#66ff99",v4="#b7ffc9",A4=Object.freeze({feature:Object.freeze({opacity:1,thickness:1.6}),tangent:Object.freeze({opacity:.9,thickness:1.15}),seam:Object.freeze({opacity:.92,thickness:1}),degenerate:Object.freeze({opacity:.72,thickness:.8})}),C4=Object.freeze({...h4,enabled:!0,color:OP,classes:A4,highlightColor:v4,highlightOpacity:1,highlightThickness:3}),yI=Object.freeze(["#b6c4ce","#8f9aa3","#d3dae0","#68737d"]);function gi(e,t,n=.5){const r=Gn(e,"#000000"),o=Gn(t,r),i=IP(Number(n),0,1),s=a=>{const l=parseInt(r.slice(a,a+2),16),c=parseInt(o.slice(a,a+2),16);return Math.round(l+(c-l)*i).toString(16).padStart(2,"0")};return`#${s(1)}${s(3)}${s(5)}`}function M4(e,t){const n=Array.isArray(e)?e:[],r=Array.isArray(t)?t:[],o=Math.max(n.length,r.length);return Object.freeze(o?Array.from({length:o},(i,s)=>{const a=n[s]||n.at(-1)||"#ffffff",l=r[s]||r.at(-1)||a;return gi(a,l)}):["#ffffff"])}function Nv(e,t={}){const n=Gn(e,"#f1f5f9"),r=Cu(n)>=.36;return{axis:{enabled:Xo(t.enabled,!1),color:Gn(t.color,r?gi(n,"#0f172a",.62):gi(n,"#f8fafc",.58)),opacity:rn(t.opacity,e0.opacity,0,1)}}}function Ki(e,t={}){const n=Gn(e,"#f1f5f9"),r=Xo(t.enabled,!1),o=Cu(n)>=.36,i=Gn(t.centerColor,o?gi(n,"#0f172a",.48):gi(n,"#f8fafc",.46)),s=Gn(t.cellColor,o?gi(n,"#475569",.26):gi(n,"#cbd5e1",.22)),a=rn(t.opacity,dE.opacity,0,1),l=rn(t.density,dE.density,Mv,Iv);return{gridCenterColor:i,gridCellColor:s,gridOpacity:a,gridDensity:l,grid:{enabled:r,centerColor:i,cellColor:s,opacity:a,density:l},centerColor:i,cellColor:s,opacity:a,density:l}}const mm=Object.freeze({cycleColors:!1,overrideSourceColors:!1,tintMode:"blend",tintStrength:0,saturation:1.05,contrast:1.1,brightness:1.02,roughness:.32,metalness:.32,clearcoat:.5,clearcoatRoughness:.24,opacity:1,envMapIntensity:1.5,emissiveIntensity:.02}),Ud=Object.freeze({materials:{defaultColor:n0[0],fillColors:n0,cycleColors:!1,overrideSourceColors:!1,tintMode:"blend",tintStrength:0,saturation:1.18,contrast:1.12,brightness:1.02,roughness:.58,metalness:.02,clearcoat:.12,clearcoatRoughness:.42,opacity:1,envMapIntensity:.42,emissiveIntensity:.02},background:{type:"linear",solidColor:"#edf5fb",linearStart:"#fbfdff",linearEnd:"#b8cadb",linearAngle:135,radialInner:"#ffffff",radialOuter:"#b3c4d4"},floor:{mode:gr.STAGE,color:"#edf3f8",roughness:.7,reflectivity:.14,shadowOpacity:.16,horizonBlend:.18,...Ki("#edf3f8",{opacity:.2}),enabled:!1},environment:{enabled:!0,presetId:"studio-hdri-43",intensity:.32,rotationY:-.25,useAsBackground:!1},lighting:{toneMappingExposure:1.16,directional:{enabled:!0,color:"#ffffff",intensity:1.16,position:{x:-210,y:260,z:270}},spot:{enabled:!0,color:"#f4fbff",intensity:.52,angle:.74,distance:0,position:{x:190,y:210,z:170}},point:{enabled:!0,color:"#ffe2ba",intensity:.28,distance:0,position:{x:-240,y:110,z:-210}},ambient:{enabled:!0,color:"#ffffff",intensity:.4},hemisphere:{enabled:!0,skyColor:"#ffffff",groundColor:"#d6e2ee",intensity:1.12}}}),hi=Object.freeze({materials:{defaultColor:n0[0],fillColors:n0,cycleColors:!1,overrideSourceColors:!1,tintMode:"blend",tintStrength:0,saturation:1.2,contrast:1.14,brightness:1.06,roughness:.54,metalness:.02,clearcoat:.14,clearcoatRoughness:.4,opacity:1,envMapIntensity:.5,emissiveIntensity:.03},background:{type:"linear",solidColor:"#081b2d",linearStart:"#18304a",linearEnd:"#030914",linearAngle:135,radialInner:"#174267",radialOuter:"#030914"},floor:{mode:gr.STAGE,color:"#0a2238",roughness:.38,reflectivity:.1,shadowOpacity:.42,horizonBlend:.1,...Ki("#0a2238",{opacity:.22}),enabled:!1},environment:{enabled:!0,presetId:"studio-hdri-43",intensity:.18,rotationY:-.25,useAsBackground:!1},lighting:{toneMappingExposure:1.22,directional:{enabled:!0,color:"#ffffff",intensity:1.42,position:{x:-210,y:260,z:270}},spot:{enabled:!0,color:"#70c4ff",intensity:.24,angle:.74,distance:0,position:{x:190,y:210,z:170}},point:{enabled:!0,color:"#9bd0ff",intensity:.36,distance:0,position:{x:-240,y:110,z:-210}},ambient:{enabled:!0,color:"#c6d8ea",intensity:.24},hemisphere:{enabled:!0,skyColor:"#ffffff",groundColor:"#020713",intensity:.98}}}),gc=Object.freeze({...hi,materials:{...hi.materials,defaultColor:yI[0],fillColors:yI},background:{...hi.background,solidColor:"#151617",linearStart:"#2a2b2d",linearEnd:"#070809",radialInner:"#303133",radialOuter:"#070809"},floor:{...hi.floor,color:"#171819",...Ki("#171819",{opacity:.22})}}),bI=M4(hi.materials.fillColors,gc.materials.fillColors),lc=Object.freeze({...hi,materials:{...hi.materials,defaultColor:bI[0],fillColors:bI},background:{...hi.background,solidColor:gi(hi.background.solidColor,gc.background.solidColor),linearStart:gi(hi.background.linearStart,gc.background.linearStart),linearEnd:gi(hi.background.linearEnd,gc.background.linearEnd),radialInner:gi(hi.background.radialInner,gc.background.radialInner),radialOuter:gi(hi.background.radialOuter,gc.background.radialOuter)},floor:{...hi.floor,color:gi(hi.floor.color,gc.floor.color),...Ki(gi(hi.floor.color,gc.floor.color),{opacity:.22})}}),xI="#062a42",I4=Object.freeze({projection:Vr.PERSPECTIVE,materials:{...mm,defaultColor:eh[0],fillColors:eh,saturation:1.15},background:{type:"radial",solidColor:"#04131f",linearStart:"#07253a",linearEnd:"#020a12",linearAngle:128,radialInner:"#0a5e8f",radialOuter:"#020a12"},floor:{mode:gr.STAGE,color:xI,roughness:.42,reflectivity:.28,shadowOpacity:.5,horizonBlend:.32,...Ki(xI,{enabled:!1,opacity:.18}),enabled:!0},environment:{enabled:!0,presetId:"studio-hdri-43",intensity:.6,rotationY:-.35,useAsBackground:!1},lighting:{toneMappingExposure:1.22,directional:{enabled:!0,color:"#eaf4ff",intensity:2.2,position:{x:-190,y:240,z:300}},fill:{enabled:!0,color:"#9db8cc",intensity:.38,position:{x:120,y:80,z:210}},rim:{enabled:!0,color:"#7fd4ff",intensity:1.4,position:{x:-320,y:260,z:160}},spot:{enabled:!0,color:"#59c4ff",intensity:.5,angle:.7,distance:0,position:{x:190,y:210,z:170}},point:{enabled:!0,color:"#9bd0ff",intensity:.3,distance:0,position:{x:-240,y:110,z:-210}},ambient:{enabled:!0,color:"#cfe2f2",intensity:.2},hemisphere:{enabled:!0,skyColor:"#dcedfa",groundColor:"#03121d",intensity:.8}}}),SI="#2b0e20",N4=Object.freeze({projection:Vr.PERSPECTIVE,materials:{...mm,defaultColor:th[0],fillColors:th,saturation:1.2},background:{type:"radial",solidColor:"#1d0a16",linearStart:"#7a1a52",linearEnd:"#170812",linearAngle:140,radialInner:"#6e1348",radialOuter:"#12060e"},floor:{mode:gr.STAGE,color:SI,roughness:.4,reflectivity:.3,shadowOpacity:.52,horizonBlend:.3,...Ki(SI,{enabled:!1,opacity:.18}),enabled:!0},environment:{enabled:!0,presetId:"studio-hdri-43",intensity:.6,rotationY:-.35,useAsBackground:!1},lighting:{toneMappingExposure:1.22,directional:{enabled:!0,color:"#fff0f6",intensity:2.2,position:{x:-190,y:240,z:300}},fill:{enabled:!0,color:"#b295a6",intensity:.36,position:{x:120,y:80,z:210}},rim:{enabled:!0,color:"#ff8fd0",intensity:1.4,position:{x:-320,y:260,z:160}},spot:{enabled:!0,color:"#ff5fb0",intensity:.5,angle:.7,distance:0,position:{x:190,y:210,z:170}},point:{enabled:!0,color:"#d998ff",intensity:.28,distance:0,position:{x:-240,y:110,z:-210}},ambient:{enabled:!0,color:"#e8d3de",intensity:.2},hemisphere:{enabled:!0,skyColor:"#f4dcea",groundColor:"#170812",intensity:.78}}}),EI="#d9a97c",T4=Object.freeze({projection:Vr.PERSPECTIVE,materials:{...mm,defaultColor:nh[0],fillColors:nh,saturation:1.1,roughness:.38,metalness:.22,envMapIntensity:1.2},background:{type:"linear",solidColor:"#f3eadc",linearStart:"#f7ead8",linearEnd:"#c88d5d",linearAngle:162,radialInner:"#f7ead8",radialOuter:"#b06c43"},floor:{mode:gr.STAGE,color:EI,roughness:.5,reflectivity:.22,shadowOpacity:.42,horizonBlend:.26,...Ki(EI,{enabled:!1,opacity:.18}),enabled:!0},environment:{enabled:!0,presetId:"studio-hdri-43",intensity:.55,rotationY:-.25,useAsBackground:!1},lighting:{toneMappingExposure:1.16,directional:{enabled:!0,color:"#fff0dc",intensity:2.1,position:{x:-190,y:240,z:300}},fill:{enabled:!0,color:"#d8b795",intensity:.45,position:{x:120,y:80,z:210}},rim:{enabled:!0,color:"#ffd7ad",intensity:.85,position:{x:-320,y:260,z:160}},spot:{enabled:!0,color:"#ffe3c4",intensity:.4,angle:.7,distance:0,position:{x:190,y:210,z:170}},point:{enabled:!0,color:"#ff9e63",intensity:.25,distance:0,position:{x:-240,y:110,z:-210}},ambient:{enabled:!0,color:"#f5e7d5",intensity:.28},hemisphere:{enabled:!0,skyColor:"#fff4e4",groundColor:"#a86b40",intensity:.9}}}),wI="#02120a",_4=Object.freeze({projection:Vr.PERSPECTIVE,materials:{...mm,defaultColor:rh[0],fillColors:rh,saturation:1.15,roughness:.4,metalness:.25,envMapIntensity:.9,emissiveIntensity:.04},edges:{...C4},background:{type:"radial",solidColor:"#020403",linearStart:"#031109",linearEnd:"#000000",linearAngle:180,radialInner:"#06301b",radialOuter:"#000201"},floor:{mode:gr.GRID,color:wI,roughness:.35,reflectivity:.32,shadowOpacity:.55,horizonBlend:.24,...Ki(wI,{enabled:!0,centerColor:OP,cellColor:"#0f5230",opacity:.42,density:1.15}),enabled:!1},environment:{enabled:!0,presetId:"studio-hdri-43",intensity:.35,rotationY:-.35,useAsBackground:!1},lighting:{toneMappingExposure:1.2,directional:{enabled:!0,color:"#eafff2",intensity:2,position:{x:-190,y:240,z:300}},fill:{enabled:!0,color:"#7da98d",intensity:.35,position:{x:120,y:80,z:210}},rim:{enabled:!0,color:"#66ff99",intensity:1.2,position:{x:-320,y:260,z:160}},spot:{enabled:!0,color:"#4dff8a",intensity:.45,angle:.7,distance:0,position:{x:190,y:210,z:170}},point:{enabled:!0,color:"#9dffc0",intensity:.25,distance:0,position:{x:-240,y:110,z:-210}},ambient:{enabled:!0,color:"#cfe8d8",intensity:.2},hemisphere:{enabled:!0,skyColor:"#d8ffe8",groundColor:"#01130a",intensity:.75}}}),rp="#f0f4f9",oh="#e2e9f0",Tv=Object.freeze({...Ud,projection:Vr.ORTHOGRAPHIC,background:{...Ud.background,type:"solid",solidColor:rp,linearStart:rp,linearEnd:rp,radialInner:rp,radialOuter:rp},floor:{...Ud.floor,color:oh,enabled:!1,...Ki(oh,{enabled:!0,opacity:.16}),...Nv(oh,{enabled:!0,opacity:.28})},environment:{...Ud.environment,enabled:!1},lighting:{...Ud.lighting,hemisphere:{...Ud.lighting.hemisphere,groundColor:"#c7d5e3"}}}),pS="#202832",R4=Object.freeze({...lc,background:{...lc.background,solidColor:"#181f28",linearStart:"#242e3a",linearEnd:"#0c1016",radialInner:"#293443",radialOuter:"#0c1016"},floor:{...lc.floor,color:pS,enabled:!1,...Ki(pS,{enabled:!0,opacity:.16}),...Nv(pS,{enabled:!0,opacity:.28})},lighting:{...lc.lighting,spot:{...lc.lighting.spot,color:"#b3d4f2"},point:{...lc.lighting.point,color:"#bfd8f0"},ambient:{...lc.lighting.ambient,color:"#dfe7f0"},hemisphere:{...lc.lighting.hemisphere,groundColor:"#333d4b"}}}),fE=Yc(Tv,ln.LIGHT),kP=RP(Tv);PP(kP,Cv(Tv,R4).dark);const P4=Yc(kP,ln.DARK),vI=Object.freeze(["#c9c2bb","#c98d55","#8e969e","#a9784e"]),AI="#131418",O4=Object.freeze({projection:Vr.PERSPECTIVE,materials:{...mm,defaultColor:vI[0],fillColors:vI},background:{type:"radial",solidColor:"#121317",linearStart:"#1c1d22",linearEnd:"#0a0a0d",linearAngle:135,radialInner:"#191a1f",radialOuter:"#0a0a0d"},floor:{mode:gr.STAGE,color:AI,roughness:.55,reflectivity:.16,shadowOpacity:.58,horizonBlend:.34,...Ki(AI,{enabled:!0,opacity:.09}),enabled:!0},environment:{enabled:!0,presetId:"studio-hdri-43",intensity:.65,rotationY:-.35,useAsBackground:!1},lighting:{toneMappingExposure:1.24,directional:{enabled:!0,color:"#fff3e4",intensity:2.5,position:{x:-190,y:240,z:300}},fill:{enabled:!0,color:"#a6a9ad",intensity:.42,position:{x:120,y:80,z:210}},rim:{enabled:!0,color:"#d9e6f5",intensity:1.3,position:{x:-320,y:260,z:160}},spot:{enabled:!0,color:"#e8e5df",intensity:.35,angle:.7,distance:0,position:{x:190,y:210,z:170}},point:{enabled:!0,color:"#9fc4e8",intensity:.3,distance:0,position:{x:-240,y:110,z:-210}},ambient:{enabled:!0,color:"#d5d7da",intensity:.24},hemisphere:{enabled:!0,skyColor:"#e5e7ea",groundColor:"#1b1c1f",intensity:.85}}}),k4=Yc(O4,ln.DARK),CI=Object.freeze(["#3b82f6","#f97352","#fbbf24","#34d399","#a78bfa","#f472b6"]),MI="#eef1f5",D4=Object.freeze({projection:Vr.PERSPECTIVE,materials:{...mm,defaultColor:CI[0],fillColors:CI,cycleColors:!1,saturation:1.32,contrast:1.12,brightness:1.04,roughness:.3,metalness:.26,clearcoat:.55,clearcoatRoughness:.2,envMapIntensity:1.2},background:{type:"radial",solidColor:"#f2f4f7",linearStart:"#ffffff",linearEnd:"#dde2e9",linearAngle:135,radialInner:"#ffffff",radialOuter:"#dbe0e7"},floor:{mode:gr.STAGE,color:MI,roughness:.3,reflectivity:.34,shadowOpacity:.3,horizonBlend:.42,...Ki(MI,{enabled:!1,opacity:.12}),enabled:!0},environment:{enabled:!0,presetId:"studio-hdri-43",intensity:.9,rotationY:-.35,useAsBackground:!1},lighting:{toneMappingExposure:1.12,directional:{enabled:!0,color:"#ffffff",intensity:2.2,position:{x:-190,y:240,z:300}},fill:{enabled:!0,color:"#dfe6ee",intensity:.5,position:{x:120,y:80,z:210}},rim:{enabled:!0,color:"#ffffff",intensity:.9,position:{x:-320,y:260,z:160}},spot:{enabled:!0,color:"#ffffff",intensity:.3,angle:.7,distance:0,position:{x:190,y:210,z:170}},point:{enabled:!0,color:"#ffd9a8",intensity:.25,distance:0,position:{x:-240,y:110,z:-210}},ambient:{enabled:!0,color:"#ffffff",intensity:.3},hemisphere:{enabled:!0,skyColor:"#ffffff",groundColor:"#c9d2dc",intensity:.9}}}),L4=Yc(D4,ln.LIGHT),F4=Yc(I4,ln.DARK),j4=Yc(N4,ln.DARK),z4=Yc(T4,ln.LIGHT),B4=Yc(_4,ln.DARK),Hf=Object.freeze([{id:"workbench-light",label:"Light",description:"Balanced CAD workbench lighting on a light canvas.",preview:{background:"#f0f4f9",modelColor:"#b6c4ce",accentColor:"#4ea7d8"},settings:fE},{id:"workbench-dark",label:"Dark",description:"Balanced CAD workbench lighting on a deep blue-slate canvas.",preview:{background:"#181f28",modelColor:"#b6c4ce",accentColor:"#4ea7d8"},settings:P4},{id:"cinematic",label:"Cinematic",description:"Filmic studio stage with warm key lighting, copper accents, and a glossy charcoal floor.",preview:{background:"radial-gradient(circle at 42% 32%, #23242a 0%, #0a0a0d 78%)",modelColor:"#c9c2bb",accentColor:"#c98d55"},settings:k4},{id:"vibrant",label:"Vibrant",description:"Bright studio cove with punchy color and photoreal reflections.",preview:{background:"radial-gradient(circle at 42% 32%, #ffffff 0%, #dbe0e7 78%)",modelColor:"#3b82f6",accentColor:"#f97352"},settings:L4},{id:"blue",label:"Blue",description:"Single cyan fill on a deep-navy stage with cyan rim lighting.",preview:{background:eh[0],modelColor:eh[0],accentColor:eh[0]},settings:F4},{id:"pink",label:"Magenta",description:"Saturated magenta fill on a near-black stage with magenta rim glow.",preview:{background:th[0],modelColor:th[0],accentColor:th[0]},settings:j4},{id:"clay-sunrise",label:"Clay",description:"Warm clay fill on a satin terracotta stage with golden-hour light.",preview:{background:nh[0],modelColor:nh[0],accentColor:nh[0]},settings:z4},{id:"terminal",label:"Terminal",description:"Phosphor-green linework on a glossy black stage with a green grid floor.",preview:{background:rh[0],modelColor:rh[0],accentColor:rh[0]},settings:B4}]),V4=Object.freeze({workbench:"workbench-light",light:"workbench-light",dark:"workbench-dark"}),$4="snapshot",G4=Object.freeze({...fE,floor:{...fE.floor,shadowOpacity:0,...Ki(oh,{enabled:!1,opacity:0}),...Nv(oh,{enabled:!1,opacity:0})}}),U4=Object.freeze({id:$4,label:"Snapshot",description:"Workbench Light with the grid and origin axis removed, for headless renders.",preview:{background:"#f0f4f9",modelColor:"#b6c4ce",accentColor:"#4ea7d8"},settings:G4}),DP=Object.freeze([U4]),H4="workbench-light",tx="system",Pl="custom",ua=tx,_v=Object.freeze(Hf.find(e=>e.id===H4)||Hf[0]),Ne=Object.freeze(_v.settings);function LP({prefersDark:e=!1}={}){return e===!0?"workbench-dark":"workbench-light"}function Qh(e){const t=String(e||"").trim();return t===tx||t===Pl?t:FP(t)}function W4(e,{custom:t=null,prefersDark:n=!1}={}){const r=Qh(e)||ua;if(r===Pl&&t)return Pi(t);const o=r===Pl||r===tx?LP({prefersDark:n}):r;return X4(o)}const K4=new Set(t0.map(e=>e.id));function q4(e){const t=String(e||"").trim();return K4.has(t)?t:Ne.environment.presetId}function op(e,t){return{x:rn(e?.x,t.x,-5e3,5e3),y:rn(e?.y,t.y,-5e3,5e3),z:rn(e?.z,t.z,-5e3,5e3)}}function II(e={}){return JSON.stringify({colorMode:e?.colorMode||ln.SYSTEM,projection:e?.projection||"",modeColors:e?.modeColors||{},materials:e?.materials||{},background:e?.background||{},floor:e?.floor||{},environment:e?.environment||{},lighting:e?.lighting||{},edges:e?.edges||null})}function Pi(e={}){const t=e&&typeof e=="object"?e:{},n=t.materials&&typeof t.materials=="object"?t.materials:{},r=t.background&&typeof t.background=="object"?t.background:{},o=t.environment&&typeof t.environment=="object"?t.environment:{},i=t.floor&&typeof t.floor=="object"?t.floor:{},s=t.lighting&&typeof t.lighting=="object"?t.lighting:{},a=Gn(n.defaultColor||n.tintColor,Ne.materials.defaultColor),l=NP(n.fillColors,a),c=Gn(i.color,Ne.floor?.color||"#141416"),u=w4(i.mode,Ne.floor?.mode||gr.STAGE),f=i.grid&&typeof i.grid=="object"&&!Array.isArray(i.grid)?i.grid:{},m=i.axis&&typeof i.axis=="object"&&!Array.isArray(i.axis)?i.axis:{},p=Ki(c),b=Gn(f.centerColor??i.gridCenterColor??i.gridCenter,p.centerColor),y=Gn(f.cellColor??i.gridCellColor??i.gridCell,p.cellColor),x=rn(f.opacity??i.gridOpacity,p.opacity,0,1),S=rn(f.density??i.gridDensity,p.density,Mv,Iv),C={colorMode:Jb(t.colorMode,Ne?.colorMode||ln.SYSTEM),projection:Bc(t.projection,Ne?.projection||Vr.ORTHOGRAPHIC),materials:{defaultColor:l[0]||a,fillColors:l,cycleColors:Xo(n.cycleColors,Ne.materials.cycleColors||!1),overrideSourceColors:Xo(n.overrideSourceColors,Ne.materials.overrideSourceColors||!1),tintMode:b4(n.tintMode,Ne.materials.tintMode),tintStrength:rn(n.tintStrength,Ne.materials.tintStrength,0,1),saturation:rn(n.saturation,Ne.materials.saturation,0,2.5),contrast:rn(n.contrast,Ne.materials.contrast,0,2.5),brightness:rn(n.brightness,Ne.materials.brightness,0,2),roughness:rn(n.roughness,Ne.materials.roughness,0,1),metalness:rn(n.metalness,Ne.materials.metalness,0,1),clearcoat:rn(n.clearcoat,Ne.materials.clearcoat,0,1),clearcoatRoughness:rn(n.clearcoatRoughness,Ne.materials.clearcoatRoughness,0,1),opacity:rn(n.opacity,Ne.materials.opacity,0,1),envMapIntensity:rn(n.envMapIntensity,Ne.materials.envMapIntensity,0,4),emissiveIntensity:rn(n.emissiveIntensity,Ne.materials.emissiveIntensity,0,2)},background:{type:y4(r.type,Ne.background.type),solidColor:Gn(r.solidColor,Ne.background.solidColor),linearStart:Gn(r.linearStart,Ne.background.linearStart),linearEnd:Gn(r.linearEnd,Ne.background.linearEnd),linearAngle:rn(r.linearAngle,Ne.background.linearAngle,-360,360),radialInner:Gn(r.radialInner,Ne.background.radialInner),radialOuter:Gn(r.radialOuter,Ne.background.radialOuter)},floor:{mode:u,enabled:Xo(i.enabled,u!==gr.NONE),followModel:Xo(i.followModel,Ne.floor?.followModel??!0),color:c,roughness:rn(i.roughness,Ne.floor?.roughness??.72,0,1),reflectivity:rn(i.reflectivity,Ne.floor?.reflectivity??.12,0,1),shadowOpacity:rn(i.shadowOpacity,Ne.floor?.shadowOpacity??.45,0,1),horizonBlend:rn(i.horizonBlend,Ne.floor?.horizonBlend??0,0,1),gridCenterColor:b,gridCellColor:y,gridOpacity:x,gridDensity:S,grid:{enabled:Xo(f.enabled,u===gr.GRID),centerColor:b,cellColor:y,opacity:x,density:S},axis:{enabled:Xo(m.enabled,e0.enabled),color:Gn(m.color,b),opacity:rn(m.opacity,e0.opacity,0,1)}},environment:{enabled:Xo(o.enabled,Ne.environment.enabled),presetId:q4(o.presetId),intensity:rn(o.intensity,Ne.environment.intensity,0,4),rotationY:rn(o.rotationY,Ne.environment.rotationY,-Math.PI*2,Math.PI*2),useAsBackground:Xo(o.useAsBackground,Ne.environment.useAsBackground)},lighting:{toneMappingExposure:rn(s.toneMappingExposure,Ne.lighting.toneMappingExposure,.05,6),directional:{enabled:Xo(s.directional?.enabled,Ne.lighting.directional.enabled),color:Gn(s.directional?.color,Ne.lighting.directional.color),intensity:rn(s.directional?.intensity,Ne.lighting.directional.intensity,0,20),position:op(s.directional?.position,Ne.lighting.directional.position)},fill:{enabled:Xo(s.fill?.enabled,Ne.lighting.fill?.enabled??Pp.enabled),color:Gn(s.fill?.color,Ne.lighting.fill?.color||Pp.color),intensity:rn(s.fill?.intensity,Ne.lighting.fill?.intensity??Pp.intensity,0,20),position:op(s.fill?.position,Ne.lighting.fill?.position||Pp.position)},rim:{enabled:Xo(s.rim?.enabled,Ne.lighting.rim?.enabled??Op.enabled),color:Gn(s.rim?.color,Ne.lighting.rim?.color||Op.color),intensity:rn(s.rim?.intensity,Ne.lighting.rim?.intensity??Op.intensity,0,20),position:op(s.rim?.position,Ne.lighting.rim?.position||Op.position)},spot:{enabled:Xo(s.spot?.enabled,Ne.lighting.spot.enabled),color:Gn(s.spot?.color,Ne.lighting.spot.color),intensity:rn(s.spot?.intensity,Ne.lighting.spot.intensity,0,20),angle:rn(s.spot?.angle,Ne.lighting.spot.angle,.01,Math.PI/2),distance:rn(s.spot?.distance,Ne.lighting.spot.distance,0,5e3),position:op(s.spot?.position,Ne.lighting.spot.position)},point:{enabled:Xo(s.point?.enabled,Ne.lighting.point.enabled),color:Gn(s.point?.color,Ne.lighting.point.color),intensity:rn(s.point?.intensity,Ne.lighting.point.intensity,0,20),distance:rn(s.point?.distance,Ne.lighting.point.distance,0,5e3),position:op(s.point?.position,Ne.lighting.point.position)},ambient:{enabled:Xo(s.ambient?.enabled,Ne.lighting.ambient.enabled),color:Gn(s.ambient?.color,Ne.lighting.ambient.color),intensity:rn(s.ambient?.intensity,Ne.lighting.ambient.intensity,0,20)},hemisphere:{enabled:Xo(s.hemisphere?.enabled,Ne.lighting.hemisphere.enabled),skyColor:Gn(s.hemisphere?.skyColor,Ne.lighting.hemisphere.skyColor),groundColor:Gn(s.hemisphere?.groundColor,Ne.lighting.hemisphere.groundColor),intensity:rn(s.hemisphere?.intensity,Ne.lighting.hemisphere.intensity,0,20)}}};return t.edges&&typeof t.edges=="object"&&!Array.isArray(t.edges)&&(C.edges=Zu(t.edges)),C.modeColors=S4(t.modeColors,C),C}function Y4(e=Ne){return Pi(JSON.parse(JSON.stringify(e)))}function FP(e){const t=String(e||"").trim(),n=V4[t]||t;return Hf.some(r=>r.id===n)||DP.some(r=>r.id===n)?n:""}function jP(e){const t=FP(e);return Hf.find(n=>n.id===t)||DP.find(n=>n.id===t)||_v}function X4(e){return Y4(jP(e).settings)}function zP(e){return Z4(e)}function Z4(e){const t=II(Pi(e));for(const n of Hf)if(II(Pi(n.settings))===t)return n.id;return null}function J4(e={},{prefersDark:t=!1,systemFallback:n=ln.LIGHT}={}){const r=Jb(e?.colorMode,Ne?.colorMode||ln.SYSTEM);return r===ln.SYSTEM?t===!0||Jb(n,ln.LIGHT)===ln.DARK?ln.DARK:ln.LIGHT:r}function Rv(e={},t={}){const n=Pi(e),r=J4(n,t),o=RP(n);return o.colorMode=r,PP(o,n.modeColors?.[r]),Pi(o)}function Q4(e={}){const t=e.background||{},n=t.type||"solid",r=Ne?.background?.solidColor||"#ffffff";return n==="linear"?(Cu(t.linearStart,r)+Cu(t.linearEnd,r))/2:n==="radial"?(Cu(t.radialInner,r)+Cu(t.radialOuter,r))/2:Cu(t.solidColor,r)}function BP(e,t={}){const n=Rv(e,t);return Q4(n)>=.3?"light":"dark"}function eU(e={},t={}){const r=Rv(e,t).background||{};return r.type==="linear"?gi(r.linearStart,r.linearEnd):r.type==="radial"?gi(r.radialInner,r.radialOuter):Gn(r.solidColor,Ne?.background?.solidColor||"#ffffff")}function NI(e){return t0.find(t=>t.id===e)||t0[0]}function tU(e){return e instanceof Float32Array}function Pv(e){return e instanceof Uint32Array}function Fa(e,t){return Math.hypot(Number(t?.[0]||0)-Number(e?.[0]||0),Number(t?.[1]||0)-Number(e?.[1]||0),Number(t?.[2]||0)-Number(e?.[2]||0))}function nU(e){const t=[1/0,1/0,1/0],n=[-1/0,-1/0,-1/0];for(const r of e)for(let o=0;o+2<r.length;o+=3)t[0]=Math.min(t[0],r[o]),t[1]=Math.min(t[1],r[o+1]),t[2]=Math.min(t[2],r[o+2]),n[0]=Math.max(n[0],r[o]),n[1]=Math.max(n[1],r[o+1]),n[2]=Math.max(n[2],r[o+2]);return!Number.isFinite(t[0])||!Number.isFinite(n[0])?null:{min:t,max:n}}function rU(e){const t=nU(e);return t?Math.max(1e-5,Fa(t.min,t.max)*1e-7):1e-5}function r0(e,t){const n=Number(t)*3;return!Number.isInteger(t)||n<0||n+2>=e.edgePositions.length?null:[e.edgePositions[n],e.edgePositions[n+1],e.edgePositions[n+2]]}function o0(e){return new Set((Array.isArray(e)?e:[e]).map(t=>String(t||"").trim()).filter(Boolean))}function VP(e){const t=(Array.isArray(e)?e:[e]).map(n=>String(n||"").trim().toLowerCase()).filter(Boolean);return t.length?new Set(t):null}function oU(e,t){const n=String(e||"").trim();if(!n||!t?.size)return!1;for(const r of t)if(n===r||n.startsWith(`${r}.`))return!0;return!1}function TI(e,t){return oU(e?.occurrenceId||e?.partId||e?.id,t)}function iU(e,t,n){return!(t.size&&!TI(e,t)||n.size&&TI(e,n))}function sU(e,t){if(!t?.size)return!0;const n=String(e?.visibilityClass||"feature").trim().toLowerCase()||"feature";return t.has(n)}function $P(e,t,n,r){return iU(e,t,n)&&sU(e,r)}function mE(e,t,n=1e-7){if(!t)return;const r=e.length>=3?[e[e.length-3],e[e.length-2],e[e.length-1]]:null;(!r||Fa(r,t)>n)&&e.push(t[0],t[1],t[2])}function pE(e,t,n){const r=[];let o=[],i=null;for(let s=t;s<t+n;s+=1){const a=Number(e.edgeIndices[s*2]),l=Number(e.edgeIndices[s*2+1]),c=r0(e,a),u=r0(e,l);!c||!u||Fa(c,u)<=1e-10||(i&&Fa(i,c)>1e-5&&(o.length>=6&&r.push(new Float32Array(o)),o=[],i=null),i||mE(o,c),mE(o,u),i=u)}return o.length>=6&&r.push(new Float32Array(o)),r}function aU(e,t,n,r){const o=[];let i=-1,s=0;const a=()=>{i>=0&&s>0&&o.push(...pE(e,i,s)),i=-1,s=0};for(let l=0;l<r;l+=1)Number(t[l])===n?(i<0&&(i=l),s+=1):a();return a(),o}function GP(e,t){const n=t*3;return[e[n],e[n+1],e[n+2]]}function hE(e){return GP(e,0)}function gE(e){return GP(e,Math.floor(e.length/3)-1)}function _I(e){const t=[];for(let n=e.length-3;n>=0;n-=3)t.push(e[n],e[n+1],e[n+2]);return t}function uy(e,t,{skipFirst:n=!0,tolerance:r=1e-7}={}){const o=n?3:0;for(let i=o;i+2<t.length;i+=3)mE(e,[t[i],t[i+1],t[i+2]],r)}function lU(e,t){if(e.length<12)return e;const n=hE(e),r=gE(e);if(Fa(n,r)>t)return e;const o=Array.from(e);return o[o.length-3]=o[0],o[o.length-2]=o[1],o[o.length-1]=o[2],new Float32Array(o)}function RI(e){if(!Array.isArray(e)||e.length<=1)return e||[];const t=rU(e),n=e.filter(r=>r?.length>=6).map(r=>Array.from(r));for(let r=0;r<n.length;r+=1){let o=!0;for(;o;){o=!1;for(let i=r+1;i<n.length;i+=1){const s=n[r],a=n[i],l=hE(s),c=gE(s),u=hE(a),f=gE(a);let m=null;if(Fa(c,u)<=t?(m=[...s],uy(m,a,{tolerance:t})):Fa(c,f)<=t?(m=[...s],uy(m,_I(a),{tolerance:t})):Fa(l,f)<=t?(m=[...a],uy(m,s,{tolerance:t})):Fa(l,u)<=t&&(m=_I(a),uy(m,s,{tolerance:t})),m){n[r]=m,n.splice(i,1),o=!0;break}}}}return n.filter(r=>r.length>=6).map(r=>lU(new Float32Array(r),t))}function Ov(e){const t=e?.proxy||{};return tU(t.edgePositions)&&Pv(t.edgeIndices)&&t.edgePositions.length>=6&&t.edgeIndices.length>=2}function cU(e){return!e?.surfaceEdgeRendering&&Number(e?.schemaVersion||0)<3&&Ov(e)}function PI(e,{includePartIds:t=[],excludePartIds:n=[],visibilityClasses:r=null}={}){if(!Ov(e))return null;const o=e.proxy,i=Math.floor(o.edgeIndices.length/2);if(i<=0)return null;const s=o0(t),a=o0(n),l=s.size>0||a.size>0,c=VP(r),u=Array.isArray(e.edges)?e.edges:[],f=!!(c?.size&&u.length),m=l||f,p=Pv(o.edgeIds)?o.edgeIds:null,b=new Float32Array(i*6);let y=0;const x=S=>{const E=Number(o.edgeIndices[S*2]),C=Number(o.edgeIndices[S*2+1]),A=r0(o,E),N=r0(o,C);!A||!N||Fa(A,N)<=1e-10||(b[y]=A[0],b[y+1]=A[1],b[y+2]=A[2],b[y+3]=N[0],b[y+4]=N[1],b[y+5]=N[2],y+=6)};if(m){if(!u.length)return null;for(let S=0;S<u.length;S+=1){const E=u[S];if(!$P(E,s,a,c))continue;const C=Number(E?.segmentStart||0),A=Number(E?.segmentCount||0);if(Number.isInteger(C)&&Number.isInteger(A)&&C>=0&&A>0&&C+A<=i){for(let N=C;N<C+A;N+=1)x(N);continue}if(p)for(let N=0;N<i;N+=1)Number(p[N])===S&&x(N)}}else for(let S=0;S<i;S+=1)x(S);return y<=0?null:y===b.length?b:b.subarray(0,y)}function uU(e,{includePartIds:t=[],excludePartIds:n=[],visibilityClasses:r=null}={}){if(!Ov(e))return[];const o=e.proxy,i=Math.floor(o.edgeIndices.length/2);if(i<=0)return[];const s=Array.isArray(e.edges)?e.edges:[],a=Pv(o.edgeIds)?o.edgeIds:null,l=o0(t),c=o0(n),u=l.size>0||c.size>0,f=VP(r),m=!!(f?.size&&s.length),p=u||m,b=[];if(s.length){for(let y=0;y<s.length;y+=1){const x=s[y];if(!x||!$P(x,l,c,f))continue;const S=Number(x.segmentStart||0),E=Number(x.segmentCount||0);Number.isInteger(S)&&Number.isInteger(E)&&S>=0&&E>0&&S+E<=i?b.push(...pE(o,S,E)):a&&b.push(...aU(o,a,y,i))}return RI(b)}if(p)return[];for(let y=0;y<i;y+=1)a&&Number(a[y]),b.push(...pE(o,y,1));return RI(b)}function bi(e,t,n){return Math.min(Math.max(e,t),n)}const pm=0,dU=.0045,fU=25e-5,mU=.006,hS=new Set(["tangent","seam"]),pU=.006,hU=25e-5,gU=.008,UP=Object.freeze(["feature"]),yU=Object.freeze(["feature","tangent","seam","degenerate"]),HP=1200,WP=18e4,bU=/^#(?:[0-9a-fA-F]{3}){1,2}$/,gS=Object.freeze({feature:Object.freeze({color:"#132232",opacity:1,thickness:1.15}),tangent:Object.freeze({color:"#132232",opacity:.5,thickness:1.15}),seam:Object.freeze({color:"#132232",opacity:.85,thickness:1.15}),degenerate:Object.freeze({color:"#132232",opacity:1,thickness:0})});function i0(e=1,{visibilityClass:t=""}={}){const n=Number.isFinite(Number(e))?Math.max(1,Number(e)):1,r=String(t||"").trim().toLowerCase(),o=hS.has(r)?pU:dU,i=hS.has(r)?hU:fU,s=hS.has(r)?gU:mU;return bi(o+Math.max(0,n-1)*i,o,s)}function xU(e){const t=e?.getAttribute?.("position"),n=t?.array;return!t?.count||!n?.length?null:n}function KP(e,t){if(!e)return;const n=bi(Number(t)||0,0,1),r=n<.999;e.opacity=n,e.depthWrite=!1,e.transparent!==r&&(e.transparent=r,e.needsUpdate=!0)}function SU(e,t,n){const r=Math.max(1,Math.floor(Number(t)||1)),o=Math.max(1,Math.floor(Number(n)||1));for(const i of e||[])i?.resolution?.set?.(r,o)}function qP(e={},t,n=null){n?.add?.(t),e.registerScreenSpaceLineMaterial?.(t)}function YP(e={},t,n=null){n?.delete?.(t),e.unregisterScreenSpaceLineMaterial?.(t)}function dy(e){return(Array.isArray(e)?e:[e]).map(t=>String(t||"").trim()).filter(Boolean)}function EU(e,t=[]){const n=String(e||"").trim();return!n||!t.length?!1:t.some(r=>n===r||n.startsWith(`${r}.`))}function OI(e,t=[]){return EU(e?.occurrenceId||e?.partId||e?.id,t)}function wU(e,{includePartIds:t=[],excludePartIds:n=[],visibilityClasses:r=[]}={}){if(t.length&&!OI(e,t)||n.length&&OI(e,n))return!1;if(r.length){const o=String(e?.visibilityClass||"feature").trim().toLowerCase()||"feature";if(!r.includes(o))return!1}return!0}function vU(e,t={}){const n=Array.isArray(e?.edges)?e.edges:[];if(!n.length)return!1;let r=0,o=0;for(const i of n){if(!wU(i,t))continue;const s=Number.isFinite(Number(i?.segmentCount))?Math.max(1,Number(i.segmentCount)):1;if(r+=1,o+=(s+1)*3,r>HP||o>WP)return!1}return r>0}function AU(e,t=UP){const n=(Array.isArray(e)?e:[e]).map(r=>String(r||"").trim().toLowerCase()).filter(Boolean);return n.length?n:t}function kI(e,t){const n=String(e||"").trim();return bU.test(n)?n.length===4?`#${n[1]}${n[1]}${n[2]}${n[2]}${n[3]}${n[3]}`.toLowerCase():n.toLowerCase():t}function CU(e={},t={},n=UP){const r=e?.classes&&typeof e.classes=="object"?e.classes:null,o=r?[]:AU(e?.visibilityClasses,n),i=Number.isFinite(Number(e?.opacity))?bi(Number(e.opacity),0,1):t?.edgeOpacity??.84,s=Number.isFinite(Number(e?.thickness))?bi(Number(e.thickness),.5,6):t?.edgeThickness??1,a=kI(e?.color,t?.edge||"#18181b");return r?yU.map(l=>{const c=r[l]||gS[l],u=Number.isFinite(Number(c.opacity))?bi(Number(c.opacity),0,1):gS[l].opacity,f=Number.isFinite(Number(c.thickness))?bi(Number(c.thickness),0,6):gS[l].thickness,m=kI(c.color,a);return f<=0||u<=0?null:{classId:l,color:m,opacity:u,thickness:f}}).filter(Boolean):o.map(l=>({classId:l,color:a,opacity:i,thickness:s}))}function MU(e){return Array.isArray(e?.edges)&&e.edges.some(t=>String(t?.visibilityClass||"").trim())}function $u(e={},t,{color:n,opacity:r=1,lineWidth:o=1,renderOrder:i=3,depthTest:s=!0,depthWrite:a=!1,depthBias:l=pm}={},c=null){const u=e.LineSegments2,f=e.LineSegmentsGeometry,m=e.LineMaterial;if(!u||!f||!m||!(Array.isArray(t)||ArrayBuffer.isView(t))||!t.length)return null;const p=new f;p.setPositions(t);const b=XP(m,{color:n,opacity:r,lineWidth:o,depthTest:s,depthWrite:a,depthBias:l});qP(e,b,c);const y=new u(p,b);return y.renderOrder=i,y.frustumCulled=!1,y.userData.beforeDispose=()=>{YP(e,b,c)},y.userData.disposeGeometry=!0,y.userData.disposeMaterial=!0,y}function XP(e,{color:t,opacity:n=1,lineWidth:r=1,depthTest:o=!0,depthWrite:i=!1,depthBias:s=pm}={}){const a=new e({color:t,linewidth:r,opacity:n,depthTest:o,depthWrite:i,toneMapped:!1,worldUnits:!1});return KP(a,n),kv(a,s),a}function kv(e,t=pm){const n=bi(Number(t)||0,0,.01);return!e||n<=0||(e.polygonOffset=!0,e.polygonOffsetFactor=0,e.polygonOffsetUnits=-bi(Math.round(n*1e3),1,10),e.needsUpdate=!0),e}function DI(e={},t,{color:n,opacity:r=1,lineWidth:o=1,renderOrder:i=3,depthTest:s=!0,depthWrite:a=!1,depthBias:l=pm}={},c=null){const u=e.Line2,f=e.LineGeometry,m=e.LineMaterial;if(!u||!f||!m||!(Array.isArray(t)||ArrayBuffer.isView(t))||t.length<6)return null;const p=new f;p.setPositions(t);const b=XP(m,{color:n,opacity:r,lineWidth:o,depthTest:s,depthWrite:a,depthBias:l});qP(e,b,c);const y=new u(p,b);return y.renderOrder=i,y.frustumCulled=!1,y.userData.beforeDispose=()=>{YP(e,b,c)},y.userData.disposeGeometry=!0,y.userData.disposeMaterial=!0,y}function LI(e={},t,{color:n,opacity:r=1,lineWidth:o=1,renderOrder:i=3,depthTest:s=!0,depthWrite:a=!1,depthBias:l=pm}={}){const c=e.THREE;if(!c||!(Array.isArray(t)||ArrayBuffer.isView(t))||t.length<6)return null;const u=new c.BufferGeometry,f=t instanceof Float32Array?t:new Float32Array(t);u.setAttribute("position",new c.BufferAttribute(f,3));const m=new c.LineBasicMaterial({color:n,linewidth:Number.isFinite(Number(o))?Number(o):1,transparent:Number(r)<.999,opacity:bi(Number(r)||0,0,1),depthTest:s,depthWrite:a,toneMapped:!1});kv(m,l);const p=new c.Line(u,m);return p.renderOrder=i,p.frustumCulled=!1,p.userData.disposeGeometry=!0,p.userData.disposeMaterial=!0,p}function IU(e={},t,{color:n,opacity:r=1,renderOrder:o=3,depthTest:i=!0,depthWrite:s=!1,depthBias:a=pm}={}){const l=e.THREE;if(!l||!(Array.isArray(t)||ArrayBuffer.isView(t))||t.length<6)return null;const c=new l.BufferGeometry,u=t instanceof Float32Array?t:new Float32Array(t);c.setAttribute("position",new l.BufferAttribute(u,3));const f=new l.LineBasicMaterial({color:n,transparent:Number(r)<.999,opacity:bi(Number(r)||0,0,1),depthTest:i,depthWrite:s,toneMapped:!1});kv(f,a);const m=new l.LineSegments(c,f);return m.renderOrder=o,m.frustumCulled=!1,m.userData.disposeGeometry=!0,m.userData.disposeMaterial=!0,m}function NU(e,t,n,r=null){const o=xU(t);return o?$u(e,o,n,r):null}function TU(e={},{geometry:t,edgeSettings:n,baseTheme:r,partId:o,displayMode:i,thickness:s,wireframeEdgeColor:a=""},l=null){const c=e.THREE,u=Fl(i),f=n?.depthTest!==!1,m=Number.isFinite(Number(n?.opacity))?bi(Number(n.opacity),0,1):r?.edgeOpacity??.84,p=u?a||n?.color||r?.edge||"#18181b":n?.color||r?.edge||"#18181b";if(u&&c){const y=Math.max(m,.9),x=new c.LineBasicMaterial({color:p,transparent:y<.999,opacity:y,depthTest:!1,depthWrite:!1,toneMapped:!1}),S=new c.LineSegments(t,x);return S.renderOrder=4,S.frustumCulled=!1,S.userData.partId=o,{edgeMesh:S,edgeMaterial:x}}const b=NU(e,t,{color:p,opacity:m,lineWidth:Number.isFinite(Number(s))?Number(s):1,renderOrder:3,depthTest:f,depthWrite:!1,depthBias:i0(s)},l);return b?(b.userData.partId=o,{edgeMesh:b,edgeMaterial:b.material}):{edgeMesh:null,edgeMaterial:null}}function Dv(e={},t,n,r,o=null){const i=dy(n?.includePartIds),s=dy(n?.excludePartIds),a=dy(n?.focusedPartIds),l=dy(n?.highlightPartIds),c=CU(n,r).filter(_=>_.classId==="feature"||MU(t)),u=c.map(_=>_.classId),f=Number.isFinite(Number(n?.opacity))?bi(Number(n.opacity),0,1):r?.edgeOpacity??.84,m=Number.isFinite(Number(n?.highlightOpacity))?bi(Number(n.highlightOpacity),0,1):f,p=Number.isFinite(Number(n?.dimmedOpacity))?bi(Number(n.dimmedOpacity),0,1):f,b=Number.isFinite(Number(n?.thickness))?bi(Number(n.thickness),.5,6):r?.edgeThickness??1,y={color:n?.color||r?.edge||"#18181b",lineWidth:b,renderOrder:3,depthTest:n?.depthTest!==!1,depthWrite:!1,depthBias:i0(b)},x=(_,I)=>$u(e,_,I,o)||IU(e,_,I),S=(_,I={})=>(Number.isFinite(Number(I.lineWidth))?Number(I.lineWidth):1)<=1.05?LI(e,_,I)||DI(e,_,I,o):DI(e,_,I,o)||LI(e,_,I),E=_=>{const I=_.filter(Boolean);if(!I.length)return null;if(I.length===1)return I[0];const R=e.THREE?new e.THREE.Group:null;if(!R)return I[0];for(const O of I)R.add(O);return R},C=(_,I)=>{if(!e.THREE||!Array.isArray(_)||!_.length)return null;const R=_.reduce((O,F)=>O+(F?.length||0),0);return _.length>HP||R>WP?null:E(_.map(O=>S(O,I)))},A=(_,I={})=>{const R=Number.isFinite(Number(I.lineWidth))?Number(I.lineWidth):_.thickness,O={includePartIds:I.includePartIds||i,excludePartIds:I.excludePartIds||s,visibilityClasses:[_.classId]},F={...y,...I,color:I.color||_.color||y.color,lineWidth:R,opacity:Number.isFinite(Number(I.opacity))?I.opacity:_.opacity,depthBias:Number.isFinite(Number(I.depthBias))?I.depthBias:i0(R,{visibilityClass:_.classId})},V=vU(t,O)?uU(t,O):[],$=C(V,F);if($)return $;const K=PI(t,{...O});return K?.length?x(K,F):null};if(l.length){const _=PI(t,{includePartIds:l,visibilityClasses:u});if(!_?.length)return null;const I=x(_,{...y,color:n?.highlightColor||y.color,opacity:m,depthBias:Number.isFinite(Number(n?.highlightDepthBias))?bi(Number(n.highlightDepthBias),0,.01):0,renderOrder:Number.isFinite(Number(n?.highlightRenderOrder))?Number(n.highlightRenderOrder):26});return I&&(I.name="TopologyDisplayEdgeHighlights",I.userData.partId="__topology_highlight__"),I}if(a.length&&e.THREE){const _=new e.THREE.Group;for(const I of c){const R=A(I,{excludePartIds:a,opacity:Math.min(p,I.opacity),renderOrder:3}),O=A(I,{includePartIds:a,opacity:I.opacity,renderOrder:4});R&&_.add(R),O&&_.add(O)}return _.children.length?(_.name="TopologyDisplayEdges",_.userData.partId="__topology__",_):null}const N=c.map(_=>A(_)),w=E(N);return w?(w.name="TopologyDisplayEdges",w.userData.partId="__topology__",w):null}const FI=1,_U=/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;function Oi(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function On(e,t=""){return String(e??t).trim()||t}function Io(e,t=0){const n=Number(e);return Number.isFinite(n)?n:t}function RU(e,t,n){return Math.min(Math.max(e,t),n)}function ZP(e){const t=On(e,"number").toLowerCase();return["number","boolean","enum","select","color","string","button"].includes(t)?t==="select"?"enum":t:"number"}function PU(e){return(Array.isArray(e)?e:[]).map(t=>{if(Oi(t)){const r=On(t.value);return r?{value:r,label:On(t.label,r)}:null}const n=On(t);return n?{value:n,label:n}:null}).filter(Boolean)}function OU(e,t){const n=Oi(t)?t:{},r=ZP(n.type),o=Io(n.min,0),i=Math.max(Io(n.max,r==="number"?1:o),o),s=PU(n.options||n.values),a=r==="boolean"?!1:r==="color"?"#ffffff":r==="enum"?s[0]?.value||"":r==="string"?"":0;return{id:e,type:r,label:On(n.label,e),description:On(n.description),unit:On(n.unit),min:o,max:i,step:Math.max(Io(n.step,r==="number"?.01:1),0),defaultValue:JP({type:r,min:o,max:i,options:s},n.default??n.defaultValue??a),options:s}}function JP(e,t){const n=ZP(e?.type);if(n==="boolean")return t===!0;if(n==="color"){const i=On(t,On(e?.defaultValue,"#ffffff"));return _U.test(i)?i:"#ffffff"}if(n==="enum"){const i=Array.isArray(e?.options)?e.options:[],s=On(t,i[0]?.value||"");return i.some(a=>a.value===s)?s:i[0]?.value||""}if(n==="string")return String(t??"");if(n==="button")return Math.max(0,Math.floor(Io(t,0)));const r=Io(e?.min,0),o=Math.max(Io(e?.max,r),r);return RU(Io(t,Io(e?.defaultValue,r)),r,o)}function kU(e){return Object.entries(Oi(e)?e:{}).map(([t,n])=>OU(On(t),n)).filter(t=>t.id)}function DU(e){const t=On(e).replace(/\\/g,"/");if(!t||t.startsWith("/")||/^[A-Za-z]:\//.test(t)||/^[a-z][a-z0-9+.-]*:/i.test(t))return"";const n=t.split("/").filter(o=>o&&o!==".");if(!n.length||n.some(o=>o===".."))return"";const r=n.join("/");return/\.(step|stp)$/i.test(r)?r:""}function LU(e){return Z2(String(e||"").replace(/\.(step|stp)$/i,""))}function FU(e){const t=Oi(e)?e:{};return{...t,path:DU(t.path)}}function jU(e,t){if(!Oi(e)&&!t.path)return null;const n=Oi(e)?{...e}:{};return t.path?n.path=t.path:delete n.path,Object.keys(n).length?n:null}function zU(e,t=""){const n=Oi(e)?e:{},r=On(n.ref),o=Jh(r);if(o)return zc({selectors:o.selectors});const i=r.startsWith("#")?r.slice(1):"",s=yv(i||n.selector||n.selectors||n.occurrence||n.occurrences||[]);return s.length?zc({selectors:s}):r}function BU(e,{cadPath:t=""}={}){return Object.entries(Oi(e)?e:{}).map(([n,r])=>{const o=Oi(r)?r:{},i=On(n);return i?{id:i,label:On(o.label,i),description:On(o.description),ref:zU(o,t),names:yl(Array.isArray(o.names)?o.names:o.names?[o.names]:[]),partIds:Array.isArray(o.partIds)?o.partIds.map(s=>On(s)).filter(Boolean):[],axis:QP(o.axis,[0,0,1]),origin:$U(o.origin,null)}:null}).filter(Boolean)}function VU(e){return Object.entries(Oi(e)?e:{}).map(([t,n])=>{const r=Oi(n)?n:{},o=On(t);return o?{id:o,label:On(r.label,o),description:On(r.description),duration:Math.max(Io(r.duration??r.durationSeconds,1),.001),loop:r.loop!==!1,update:typeof r.update=="function"?r.update:null,raw:r}:null}).filter(Boolean)}function QP(e,t=[0,0,0]){const n=Array.isArray(e)?e:t;return[Io(n?.[0],t[0]||0),Io(n?.[1],t[1]||0),Io(n?.[2],t[2]||0)]}function $U(e,t=[0,0,0]){return!Array.isArray(e)&&t===null?null:QP(e,t||[0,0,0])}function GU(e,{url:t="",cadPath:n=""}={}){if(!Oi(e))throw new Error("STEP runtime module must export an object");const r=Oi(e.manifest)?e.manifest:e,o=Number(r.schemaVersion||e.schemaVersion||1);if(o!==FI)throw new Error(`Unsupported STEP runtime module schemaVersion ${o||"unknown"}`);const i=FU(r.step),s=LU(i.path),a=s||Z2(n)||"",l=kU(r.parameters),c=Object.fromEntries(l.map(p=>[p.id,p])),u=Object.fromEntries(l.map(p=>[p.id,p.defaultValue])),f=jU(r.step,i),m={...r,schemaVersion:FI};return f?m.step=f:delete m.step,{url:On(t),cadPath:a,step:{path:i.path,cadPath:s||a,explicit:!!i.path,inferred:!i.path&&!!a},module:e,manifest:m,features:BU(r.features,{cadPath:a}),parameters:l,parameterMap:c,defaultParameterValues:u,animations:VU(r.animations)}}async function UU(e,t={}){const n=await import(e);return GU(n?.default??n,{url:e,...t})}function yb(e,t={}){const n=e?.parameterMap||{};return Object.fromEntries(Object.values(n).map(r=>[r.id,JP(r,Oi(t)&&Object.hasOwn(t,r.id)?t[r.id]:r.defaultValue)]))}function HU(e){const t=Array.isArray(e?.min)?e.min:[0,0,0],n=Array.isArray(e?.max)?e.max:t;return[(Io(t[0])+Io(n[0]))/2,(Io(t[1])+Io(n[1]))/2,(Io(t[2])+Io(n[2]))/2]}function WU(e){const t=(Array.isArray(e)?e:[]).filter(o=>Array.isArray(o?.min)&&Array.isArray(o?.max));if(!t.length)return null;const n=[1/0,1/0,1/0],r=[-1/0,-1/0,-1/0];for(const o of t)for(let i=0;i<3;i+=1)n[i]=Math.min(n[i],Io(o.min[i])),r[i]=Math.max(r[i],Io(o.max[i]));return{min:n,max:r}}function yE(e,t){const n=On(e),r=Array.isArray(t?.parts)?t.parts:[];return!n||!r.length?[]:r.filter(o=>[o?.id,o?.occurrenceId].map(s=>On(s)).filter(Boolean).some(s=>s===n||s.startsWith(`${n}.`)||n.startsWith(`${s}.`))).map(o=>On(o.id||o.occurrenceId)).filter(Boolean)}function KU(e,t){const n=On(e),r=Array.isArray(t?.parts)?t.parts:[];return!n||!r.length?[]:r.filter(o=>On(o?.name)===n).map(o=>On(o.id||o.occurrenceId)).filter(Boolean)}function jI(e,t){const n=On(e);return!n||!t?null:t.referenceByNormalizedSelector?.get(n)||t.referenceByDisplaySelector?.get(n)||t.referenceMap?.get(n)||null}function yl(e){return[...new Set((Array.isArray(e)?e:[]).map(t=>On(t)).filter(Boolean))]}function qU(e){const t=Jh(e?.ref);return t?t.selectors.length?t.selectors:["__model__"]:[]}function s0(e,{meshData:t=null,selectorRuntime:n=null}={}){const r=Array.isArray(t?.parts)?t.parts:[],o=new Map(r.map(s=>[On(s.id||s.occurrenceId),s])),i=r.length?r.map(s=>On(s.id||s.occurrenceId)).filter(Boolean):["__model__"];return Object.fromEntries((Array.isArray(e?.features)?e.features:[]).map(s=>{const a=qU(s),l=a.map(y=>y==="__model__"?null:jI(y,n)).filter(Boolean),c=a.flatMap(y=>{if(y==="__model__")return i;const x=f$(y);if(x?.occurrenceId)return yE(x.occurrenceId,t);const S=jI(y,n);return yE(S?.partId||S?.occurrenceId||y,t)}),u=Array.isArray(s.names)?s.names:[],f=u.flatMap(y=>KU(y,t)),m=yl([...s.partIds,...c,...f]),p=m.map(y=>o.get(y)).filter(Boolean),b=WU(p.map(y=>y.bounds))||t?.bounds||null;return[s.id,{...s,selectors:a,references:l,partIds:m,parts:p,bounds:b,center:s.origin||HU(b),transform:p.length===1&&p[0]?.transform||null,transforms:p.map(y=>y?.transform||null),missing:m.length===0&&(u.length>0||a.length>0&&a[0]!=="__model__")}]}))}function Ef(e,t,n){if(Array.isArray(e))return yl(e.flatMap(s=>Ef(s,t,n)));if(Oi(e)){if(Array.isArray(e.partIds))return yl(e.partIds);if(e.partId)return yl([e.partId]);if(e.feature)return Ef(e.feature,t,n);if(e.ref)return Ef(e.ref,t,n)}const r=On(e);if(!r)return[];if(r==="*"||r==="all"||r==="__all__"){const s=Array.isArray(n?.parts)?n.parts:[];return s.length?yl(s.map(a=>a?.id||a?.occurrenceId)):["__model__"]}const o=t?.[r];if(o)return yl(o.partIds);const i=Jh(r);if(i){const s=i.selectors.length?i.selectors:["*"];return yl(s.flatMap(a=>Ef(a,t,n)))}return yl(yE(r,n))}function Oa(e,t=0){const n=Number(e);return Number.isFinite(n)?n:t}function YU(e,t,n){return Math.min(Math.max(e,t),n)}function a0(e){return[...new Set((Array.isArray(e)?e:[]).map(t=>String(t||"").trim()).filter(Boolean))]}function eO(e,t){const n=new e.Matrix4;return!Array.isArray(t)||t.length!==16?(n.identity(),n):(n.set(Number(t[0])||0,Number(t[1])||0,Number(t[2])||0,Number(t[3])||0,Number(t[4])||0,Number(t[5])||0,Number(t[6])||0,Number(t[7])||0,Number(t[8])||0,Number(t[9])||0,Number(t[10])||0,Number(t[11])||0,Number(t[12])||0,Number(t[13])||0,Number(t[14])||0,Number(t[15])||0),n)}function tO(e,t,n=!0){return e?.partTransformsBaked===!1?t?.transform||null:!n||e?.partTransformsBaked===!0?null:t?.transform||null}function Lv(e,t=[0,0,0]){return Array.isArray(e)||ArrayBuffer.isView(e)?[Oa(e[0],t[0]||0),Oa(e[1],t[1]||0),Oa(e[2],t[2]||0)]:e&&typeof e=="object"?[Oa(e.x,t[0]||0),Oa(e.y,t[1]||0),Oa(e.z,t[2]||0)]:[...t]}function bE(e,t,n=[0,0,0]){const r=Lv(t,n);return new e.Vector3(r[0],r[1],r[2])}function XU(e,t={}){const n=bE(e,t.axis,[0,0,1]);n.lengthSq()<=1e-12&&n.set(0,0,1),n.normalize();const r=bE(e,t.origin,[0,0,0]),o=Number.isFinite(Number(t.angleRad))?Number(t.angleRad):Oa(t.angleDeg,0)*Math.PI/180;return new e.Matrix4().makeTranslation(r.x,r.y,r.z).multiply(new e.Matrix4().makeRotationAxis(n,o)).multiply(new e.Matrix4().makeTranslation(-r.x,-r.y,-r.z))}function ZU(e,t={}){const n=t.scale??t,r=Array.isArray(n)||ArrayBuffer.isView(n)?Lv(n,[1,1,1]):[Oa(n,1),Oa(n,1),Oa(n,1)],o=bE(e,t.origin,[0,0,0]);return new e.Matrix4().makeTranslation(o.x,o.y,o.z).multiply(new e.Matrix4().makeScale(r[0],r[1],r[2])).multiply(new e.Matrix4().makeTranslation(-o.x,-o.y,-o.z))}function JU(e,t){const n=Lv(t,[0,0,0]);return new e.Matrix4().makeTranslation(n[0],n[1],n[2])}function QU(e,t={}){if(!t||typeof t!="object")return new e.Matrix4;if(Array.isArray(t.matrix)&&t.matrix.length===16)return eO(e,t.matrix);const n=new e.Matrix4;return t.scale!==void 0&&n.premultiply(ZU(e,t)),t.rotate&&typeof t.rotate=="object"&&n.premultiply(XU(e,t.rotate)),t.translate!==void 0&&n.premultiply(JU(e,t.translate)),n}function eH(e,t={}){if(!t||typeof t!="object")return new e.Matrix4;const n=Array.isArray(t.transforms)?t.transforms:[t],r=new e.Matrix4;for(const o of n)r.premultiply(QU(e,o));return r}function tH(e,t=1e-6){if(!e?.elements||e.elements.length!==16)return!1;const n=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];return e.elements.some((r,o)=>Math.abs(Number(r)-n[o])>t)}function nO(e){for(const t of Array.isArray(e)?e:[])t.effectMatrix=null,t.effectStyle=null,t.effectVisible=null,t.effectHighlighted=!1}function nH(e,t){const n=Array.isArray(e?.parts)?e.parts.map(o=>String(o?.id||o?.occurrenceId||"").trim()).filter(Boolean):[];if(n.length)return a0(n);const r=(Array.isArray(t)?t:[]).map(o=>String(o?.partId||"").trim()).filter(Boolean);return a0(r.length?r:["__model__"])}function xE(e,t,n,r){if(e&&typeof e=="object"&&!Array.isArray(e)){if(Array.isArray(e.partIds))return a0(e.partIds);if(e.partId)return a0([e.partId]);if(e.feature)return xE(e.feature,t,n,r);if(e.ref)return Ef(String(e.ref),t,n)}const o=String(e||"").trim();return o==="*"||o==="all"||o==="__all__"?nH(n,r):Ef(e,t,n)}function l0(e,{meshData:t,features:n,runtime:r,effectsByPartId:o,onTransformEffect:i}){const s=l=>{const c=String(l||"").trim();if(!c)return null;const u=o.get(c)||{matrix:null,style:null,visible:null,highlighted:!1};return o.set(c,u),u},a=(l,c)=>{const u=xE(l,n,t,r?.displayRecords);for(const f of u){const m=s(f);m&&c(m,f)}return u};return{transform(l,c){const u=eH(e,c),f=a(l,m=>{m.matrix=m.matrix?m.matrix.clone().premultiply(u):u.clone()});f.length&&tH(u)&&i?.({target:l,spec:c,partIds:f,matrix:u.clone()})},style(l,c={}){!c||typeof c!="object"||a(l,u=>{u.style={...u.style||{},...c}})},visible(l,c=!0){a(l,u=>{u.visible=c!==!1})},highlight(l,c=!0){a(l,u=>{u.highlighted=c!==!1})},clear(l){const c=xE(l,n,t,r?.displayRecords);for(const u of c)o.delete(u)}}}function rH(e={}){const t=Math.max(Number(e.duration)||0,0),n=Math.max(Number(e.elapsedSec)||0,0);return{elapsed:n,elapsedSec:n,duration:t,progress:t>0?YU(n/t,0,1):0,cycle:t>0?n/t:0,playing:e.playing===!0,speed:Math.max(Number(e.speed)||1,0)}}function Ph({runtime:e,stepModuleRuntime:t,features:n,effects:r,cleanup:o}){const i=t?.definition||null;return{THREE:e?.THREE,scene:e?.scene,modelGroup:e?.modelGroup,edgesGroup:e?.edgesGroup,runtime:e,manifest:i?.manifest||{},module:i?.module||null,cadPath:t?.cadPath||i?.cadPath||"",params:t?.parameterValues||{},features:n,effects:r,time:rH(t?.animationState),cleanup:typeof o=="function"?o:()=>{},requestRender:()=>e?.requestRender?.()}}function rO(e,t,n){nO(t);for(const r of Array.isArray(t)?t:[]){const o=n.get(String(r?.partId||"").trim());o&&(r.effectMatrix=o.matrix instanceof e.Matrix4?o.matrix.clone():null,r.effectStyle=o.style&&typeof o.style=="object"?{...o.style}:null,r.effectVisible=o.visible,r.effectHighlighted=o.highlighted===!0)}}function yS(e,t,n){if(!t||!(n instanceof e.Matrix4))return;t.matrixAutoUpdate=!1;const r=t.matrix instanceof e.Matrix4?t.matrix:new e.Matrix4;r.copy(n),t.matrix=r,t.matrixWorldNeedsUpdate=!0}function Fv(e,t){if(!t||!e?.Matrix4)return null;const n=[t.effectMatrix,t.explodedViewMatrix].filter(o=>o instanceof e.Matrix4);if(!n.length)return null;const r=new e.Matrix4;for(const o of n)r.premultiply(o);return r}function oH(e,t){const n=eO(e,t?.baseTransform),r=Fv(e,t);return r?r.multiply(n):n}function Sl(e,t){if(!t)return;const n=oH(e,t);yS(e,t.mesh,n),yS(e,t.edges,n),yS(e,t.silhouette,n)}const iH=30,sH=.9,aH=.6,oO=.55,iO=.35,sO=.55,aO=.12,lO=.05;function cO(e,t,n){return Math.min(Math.max(e,t),n)}function c0(e,t,n,r){if(!n?.isColor)return null;if(!t?.isColor)return n;const o=cO(Number.isFinite(Number(r))?Number(r):1,0,1);return t.clone().lerp(n,o)}const lH=`
|
||
uniform float cadGhostCoverage;
|
||
|
||
float cadGhostBayer2(vec2 a) {
|
||
a = floor(a);
|
||
return fract(dot(a, vec2(0.5, a.y * 0.75)));
|
||
}
|
||
|
||
float cadGhostBayer4(vec2 a) {
|
||
return cadGhostBayer2(0.5 * a) * 0.25 + cadGhostBayer2(a);
|
||
}
|
||
|
||
float cadGhostBayer8(vec2 a) {
|
||
return cadGhostBayer4(0.5 * a) * 0.25 + cadGhostBayer2(a);
|
||
}
|
||
`;function cH(e,{color:t=null,coverage:n=aH,opacity:r=sH}={}){const o=new e.MeshBasicMaterial({color:t?.isColor?t.clone():new e.Color("#4f9dff"),transparent:!0,opacity:r,depthTest:!0,depthFunc:e.GreaterDepth,depthWrite:!1,side:e.FrontSide,toneMapped:!1}),i={value:cO(Number(n),0,1)};return o.userData.cadGhostCoverageUniform=i,o.onBeforeCompile=s=>{s.uniforms.cadGhostCoverage=i,s.fragmentShader=s.fragmentShader.replace("void main() {",`${lH}
|
||
void main() {
|
||
if (cadGhostCoverage <= cadGhostBayer8(gl_FragCoord.xy)) discard;
|
||
`)},o.customProgramCacheKey=()=>"cadPartOcclusionGhost",o}function uH(e,t){if(t?.ghostMesh)return t.ghostMesh;const n=t?.geometry||t?.mesh?.geometry;if(!n||typeof t?.mesh?.add!="function")return null;const r=cH(e,{color:t.baseColor});r.clippingPlanes=t.material?.clippingPlanes||null;const o=new e.Mesh(n,r);return o.renderOrder=iH,o.visible=!1,o.castShadow=!1,o.receiveShadow=!1,o.userData.partId=t.partId,o.userData.isOcclusionGhost=!0,t.mesh.add(o),t.ghostMesh=o,t.ghostMaterial=r,o}function uO(e,t,{visible:n=!1,color:r=null}={}){if(!t)return null;if(!n)return t.ghostMesh&&(t.ghostMesh.visible=!1),t.ghostMesh||null;const o=uH(e,t);return o?(o.visible=!0,r?.isColor&&t.ghostMaterial?.color?.copy&&t.ghostMaterial.color.copy(r),o):null}const Xr=Object.freeze({CAD:"cad",URDF:"urdf"}),dH=Object.freeze({[Xr.CAD]:Object.freeze({minModelRadius:1,minGridSize:280,lightingScopeRadius:140,lightingReferenceModelRadius:760}),[Xr.URDF]:Object.freeze({minModelRadius:.05,minGridSize:.28,lightingScopeRadius:.14,lightingReferenceModelRadius:.76})}),fH=Object.freeze({[Xr.CAD]:Object.freeze({minExtent:60,normalBias:.024,radius:14}),[Xr.URDF]:Object.freeze({minExtent:.55,normalBias:12e-6,radius:14})});function hm(e){return e===Xr.URDF?Xr.URDF:Xr.CAD}function ya(e){return dH[hm(e)]}function ld(e,t){const n=Number(e);return Math.max(Number.isFinite(n)?n:0,ya(t).minModelRadius)}function mH(e){return ya(e).minGridSize/2}function pH(e){return ya(e).lightingScopeRadius}function hH(e,t){const n=hm(t),r=ya(n),o=ld(e,n),i=Math.max(Number(r.lightingReferenceModelRadius)||0,r.minModelRadius);return o/i*r.lightingScopeRadius}function gH(e,{radius:t=0,keyLightDistance:n=0}={}){const r=hm(e),o=fH[r],i=ld(t,r),s=Math.max(i*2.8,o.minExtent),a=r===Xr.URDF?Math.max(i*8,Math.max(Number(n)||0,0)+i*6+1):Math.max(i*8,320);return{scopeRadius:i,extent:s,far:a,normalBias:o.normalBias,radius:o.radius}}const yH=Xr,jv=.84,zI=16,BI="#8dc5ff",VI="#4f9dff",bH=.08,xH=.12,SH=23,EH=26,wH=.035,vH=/^#(?:[0-9a-fA-F]{3}){1,2}$/,Wf="__model__",zo=Object.freeze({surface:"#f4f4f5",surfaceRoughness:.92,surfaceMetalness:.03,surfaceClearcoat:0,surfaceClearcoatRoughness:.6,edge:"#18181b",edgeThickness:1,edgeOpacity:jv}),u0="_cad_edge_barycentric",d0="_cad_edge_class",AH=Object.freeze(["feature","tangent","seam","degenerate"]),$I=Object.freeze({feature:Object.freeze({color:"#132232",thickness:1.15,opacity:1}),tangent:Object.freeze({color:"#132232",thickness:1.15,opacity:.5}),seam:Object.freeze({color:"#132232",thickness:1.15,opacity:.85}),degenerate:Object.freeze({color:"#132232",thickness:0,opacity:1})}),GI=new WeakMap;function CH(e){const t=e?.geometrySource;return t&&typeof t=="object"?t:e}function Pn(e,t,n){return Math.min(Math.max(e,t),n)}function Vt(e,t=0){return Number.isFinite(Number(e))?Number(e):t}function UI(e){return Array.isArray(e)?e:[]}function za(e,t=1){return(Array.isArray(e)||ArrayBuffer.isView(e))&&e.length>=t&&e.length%t===0}function dO(e){return hm(e)}function SE(e){const t=[1/0,1/0,1/0],n=[-1/0,-1/0,-1/0];for(let r=0;r+2<(e?.length||0);r+=3){const o=Number(e[r]),i=Number(e[r+1]),s=Number(e[r+2]);[o,i,s].every(Number.isFinite)&&(t[0]=Math.min(t[0],o),t[1]=Math.min(t[1],i),t[2]=Math.min(t[2],s),n[0]=Math.max(n[0],o),n[1]=Math.max(n[1],i),n[2]=Math.max(n[2],s))}return!t.every(Number.isFinite)||!n.every(Number.isFinite)?{min:[0,0,0],max:[1,1,1]}:{min:t,max:n}}function bb(e,t,n=yH.CAD){const r=dO(n),o=ya(r),i=Array.isArray(t?.min)?t.min:[0,0,0],s=Array.isArray(t?.max)?t.max:[1,1,1],a=new e.Vector3((Vt(i[0])+Vt(s[0],1))/2,(Vt(i[1])+Vt(s[1],1))/2,(Vt(i[2])+Vt(s[2],1))/2),l=new e.Vector3(Math.max(Vt(s[0],1)-Vt(i[0]),o.minModelRadius),Math.max(Vt(s[1],1)-Vt(i[1]),o.minModelRadius),Math.max(Vt(s[2],1)-Vt(i[2]),o.minModelRadius));return{center:a,size:l,radius:ld(l.length()/2,r)}}function fO(e){const t=CH(e);let n=GI.get(t);return n||(n={whole:new Map,part:new Map,edge:new Map},GI.set(t,n)),n}function MH(e){return e.map((t,n)=>String(t?.id||t?.occurrenceId||`part:${n}`)).join("|")}function mO(e){return e&&(e.userData={...e.userData||{},cadSceneCachedGeometry:!0}),e}function IH(e){const t=Array.isArray(e)?e:[e];for(const n of t)n?.map?.dispose?.(),n?.alphaMap?.dispose?.(),n?.dispose?.()}function pO(e,{disposeCachedGeometry:t=!1}={}){if(e){for(;e.children?.length;)pO(e.children[0],{disposeCachedGeometry:t});e.parent?.remove(e),typeof e.userData?.beforeDispose=="function"&&(e.userData.beforeDispose(e),delete e.userData.beforeDispose),(t||e.geometry?.userData?.cadSceneCachedGeometry!==!0)&&e.geometry?.dispose?.(),IH(e.material)}}function bS(e,t={}){for(;e?.children?.length;)pO(e.children[0],t)}function hO(e,t,n,r){const o=za(n,3);if(!r&&o){t.setAttribute("normal",new e.BufferAttribute(new Float32Array(n),3));return}t.computeVertexNormals()}function EE(e,t,n,r=0,o=0){const i=n?.surfaceEdgeBarycentric,s=n?.surfaceEdgeClass,a=Math.max(0,Math.floor(Number(r)||0))*3,l=Math.max(0,Math.floor(Number(o)||0))*3;!(i instanceof Float32Array)||!(s instanceof Uint8Array)||l<=0||i.length<a+l||s.length<a+l||(t.setAttribute(u0,new e.BufferAttribute(i.slice(a,a+l),3)),t.setAttribute(d0,new e.BufferAttribute(s.slice(a,a+l),3)))}function NH(e){const t=e?.getAttribute?.(u0),n=e?.getAttribute?.(d0);return t?.itemSize===3&&n?.itemSize===3&&t.count>0&&t.count===n.count}function Gu(e,t){const n=String(t||"").trim();if(!vH.test(n))return null;const r=n.length===4?`#${n[1]}${n[1]}${n[2]}${n[2]}${n[3]}${n[3]}`:n;return new e.Color(r)}function zv(e,t,n={},{applyTint:r=!0}={}){const o=(t||new e.Color("#ffffff")).clone(),i=Pn(Number(n.tintStrength)||0,0,1);if(r&&i>0){const c=new e.Color(n.defaultColor||n.tintColor||"#ffffff");n.tintMode==="blend"?o.lerp(c,i):o.lerp(o.clone().multiply(c),i)}const s=Pn(Number(n.saturation)||1,0,2.5);if(Math.abs(s-1)>1e-4){const c={};o.getHSL(c),o.setHSL(c.h,Pn(c.s*s,0,1),c.l)}const a=Pn(Number(n.contrast)||1,0,2.5),l=Pn(Number(n.brightness)||1,0,2);return o.r=Pn(((o.r-.5)*a+.5)*l,0,1),o.g=Pn(((o.g-.5)*a+.5)*l,0,1),o.b=Pn(((o.b-.5)*a+.5)*l,0,1),o}function TH(e,t,n={}){if(!za(t,3))return null;const r=new Float32Array(t.length),o=new e.Color;for(let i=0;i+2<t.length;i+=3){o.setRGB(Pn(Number(t[i])||0,0,1),Pn(Number(t[i+1])||0,0,1),Pn(Number(t[i+2])||0,0,1));const s=zv(e,o,n);r[i]=s.r,r[i+1]=s.g,r[i+2]=s.b}return r}function gO(e){return!!e?.has_source_colors&&za(e?.colors,3)}function _H(e,t){return gO(e)?t&&Object.hasOwn(t,"hasSourceColors")?!!t.hasSourceColors:!0:!1}function RH(e,t={},n=0){return new e.Color(Av(t,n))}function HI(e,t={},n=0){return zv(e,RH(e,t,n),t,{applyTint:!1})}function yO(e,{hasVertexColors:t=!1,sourceColor:n=null,materialSettings:r,fallbackColor:o="#ffffff",fillIndex:i=0,forceFill:s=!1}){return s?HI(e,r,i):t?new e.Color("#ffffff"):n?zv(e,n,r):HI(e,{...r,defaultColor:o||r?.defaultColor},i)}function PH(e={},t,n="#132232"){const r=$I[t]||$I.feature,o=e?.classes?.[t]||{};return{color:o.color||n||r.color,thickness:Pn(Number.isFinite(Number(o.thickness))?Number(o.thickness):r.thickness,0,6),opacity:Pn(Number.isFinite(Number(o.opacity))?Number(o.opacity):r.opacity,0,1)}}function OH(e,t,n={},r=zo){const o=n?.color||r?.edge||zo.edge,i=Object.fromEntries(AH.map(l=>[l,PH(n,l,o)])),s=new e.Color(o),a=Object.fromEntries(Object.entries(i).map(([l,c])=>[l,Gu(e,c.color)||s.clone()]));t.userData.cadSurfaceEdges=!0,t.userData.cadSurfaceEdgeBaseColor=s.clone(),t.userData.cadSurfaceEdgeColor=s.clone(),t.userData.cadSurfaceEdgeBaseClassSettings=Object.fromEntries(Object.entries(i).map(([l,c])=>[l,{...c}])),t.extensions={...t.extensions||{},derivatives:!0},t.onBeforeCompile=l=>{const c=t.userData.cadSurfaceEdgeColor?.isColor?t.userData.cadSurfaceEdgeColor:s;t.userData.cadSurfaceEdgeShader=l,l.uniforms.cadSurfaceEdgeColor={value:c.clone()},l.uniforms.cadSurfaceFeatureColor={value:a.feature.clone()},l.uniforms.cadSurfaceTangentColor={value:a.tangent.clone()},l.uniforms.cadSurfaceSeamColor={value:a.seam.clone()},l.uniforms.cadSurfaceDegenerateColor={value:a.degenerate.clone()},l.uniforms.cadSurfaceFeatureThickness={value:i.feature.thickness},l.uniforms.cadSurfaceTangentThickness={value:i.tangent.thickness},l.uniforms.cadSurfaceSeamThickness={value:i.seam.thickness},l.uniforms.cadSurfaceDegenerateThickness={value:i.degenerate.thickness},l.uniforms.cadSurfaceFeatureOpacity={value:i.feature.opacity},l.uniforms.cadSurfaceTangentOpacity={value:i.tangent.opacity},l.uniforms.cadSurfaceSeamOpacity={value:i.seam.opacity},l.uniforms.cadSurfaceDegenerateOpacity={value:i.degenerate.opacity},l.vertexShader=l.vertexShader.replace("#include <common>",`#include <common>
|
||
attribute vec3 ${u0};
|
||
attribute vec3 ${d0};
|
||
varying vec3 vCadSurfaceEdgeBarycentric;
|
||
varying vec3 vCadSurfaceEdgeClass;`).replace("#include <begin_vertex>",`#include <begin_vertex>
|
||
vCadSurfaceEdgeBarycentric = ${u0};
|
||
vCadSurfaceEdgeClass = ${d0};`),l.fragmentShader=l.fragmentShader.replace("#include <common>",`#include <common>
|
||
uniform vec3 cadSurfaceEdgeColor;
|
||
uniform vec3 cadSurfaceFeatureColor;
|
||
uniform vec3 cadSurfaceTangentColor;
|
||
uniform vec3 cadSurfaceSeamColor;
|
||
uniform vec3 cadSurfaceDegenerateColor;
|
||
uniform float cadSurfaceFeatureThickness;
|
||
uniform float cadSurfaceTangentThickness;
|
||
uniform float cadSurfaceSeamThickness;
|
||
uniform float cadSurfaceDegenerateThickness;
|
||
uniform float cadSurfaceFeatureOpacity;
|
||
uniform float cadSurfaceTangentOpacity;
|
||
uniform float cadSurfaceSeamOpacity;
|
||
uniform float cadSurfaceDegenerateOpacity;
|
||
varying vec3 vCadSurfaceEdgeBarycentric;
|
||
varying vec3 vCadSurfaceEdgeClass;
|
||
|
||
float cadSurfaceEdgeThicknessFor(float classCode) {
|
||
if (classCode < 0.5) {
|
||
return 0.0;
|
||
}
|
||
if (abs(classCode - 2.0) < 0.5) {
|
||
return cadSurfaceTangentThickness;
|
||
}
|
||
if (abs(classCode - 3.0) < 0.5) {
|
||
return cadSurfaceSeamThickness;
|
||
}
|
||
if (abs(classCode - 4.0) < 0.5) {
|
||
return cadSurfaceDegenerateThickness;
|
||
}
|
||
return cadSurfaceFeatureThickness;
|
||
}
|
||
|
||
float cadSurfaceEdgeOpacityFor(float classCode) {
|
||
if (classCode < 0.5) {
|
||
return 0.0;
|
||
}
|
||
if (abs(classCode - 2.0) < 0.5) {
|
||
return cadSurfaceTangentOpacity;
|
||
}
|
||
if (abs(classCode - 3.0) < 0.5) {
|
||
return cadSurfaceSeamOpacity;
|
||
}
|
||
if (abs(classCode - 4.0) < 0.5) {
|
||
return cadSurfaceDegenerateOpacity;
|
||
}
|
||
return cadSurfaceFeatureOpacity;
|
||
}
|
||
|
||
vec3 cadSurfaceEdgeColorFor(float classCode) {
|
||
if (classCode < 0.5) {
|
||
return cadSurfaceEdgeColor;
|
||
}
|
||
if (abs(classCode - 2.0) < 0.5) {
|
||
return cadSurfaceTangentColor;
|
||
}
|
||
if (abs(classCode - 3.0) < 0.5) {
|
||
return cadSurfaceSeamColor;
|
||
}
|
||
if (abs(classCode - 4.0) < 0.5) {
|
||
return cadSurfaceDegenerateColor;
|
||
}
|
||
return cadSurfaceFeatureColor;
|
||
}
|
||
|
||
float cadSurfaceEdgeCoverage(float barycentric, float classCode) {
|
||
float thickness = cadSurfaceEdgeThicknessFor(classCode);
|
||
float opacity = cadSurfaceEdgeOpacityFor(classCode);
|
||
if (thickness <= 0.0 || opacity <= 0.0) {
|
||
return 0.0;
|
||
}
|
||
float pixelDistance = barycentric / max(fwidth(barycentric), 1e-6);
|
||
float halfWidth = max(thickness * 0.5, 0.001);
|
||
float coverage = 1.0 - smoothstep(max(halfWidth - 0.75, 0.0), halfWidth + 0.75, pixelDistance);
|
||
return clamp(coverage * opacity, 0.0, 1.0);
|
||
}
|
||
|
||
vec4 cadSurfaceEdgeLayerFor(float barycentric, float classCode) {
|
||
float edgeAlpha = cadSurfaceEdgeCoverage(barycentric, classCode);
|
||
return vec4(cadSurfaceEdgeColorFor(classCode), edgeAlpha);
|
||
}
|
||
|
||
vec4 cadSurfaceEdgeLayer() {
|
||
vec4 edge0 = cadSurfaceEdgeLayerFor(vCadSurfaceEdgeBarycentric.x, vCadSurfaceEdgeClass.x);
|
||
vec4 edge1 = cadSurfaceEdgeLayerFor(vCadSurfaceEdgeBarycentric.y, vCadSurfaceEdgeClass.y);
|
||
vec4 edge2 = cadSurfaceEdgeLayerFor(vCadSurfaceEdgeBarycentric.z, vCadSurfaceEdgeClass.z);
|
||
vec4 edge = edge0;
|
||
if (edge1.a > edge.a) {
|
||
edge = edge1;
|
||
}
|
||
if (edge2.a > edge.a) {
|
||
edge = edge2;
|
||
}
|
||
return edge;
|
||
}`).replace("#include <opaque_fragment>",`vec4 cadSurfaceEdgeMix = cadSurfaceEdgeLayer();
|
||
if (cadSurfaceEdgeMix.a > 0.0) {
|
||
outgoingLight = mix(outgoingLight, cadSurfaceEdgeMix.rgb, cadSurfaceEdgeMix.a);
|
||
}
|
||
#include <opaque_fragment>`)},t.customProgramCacheKey=()=>"cad-surface-edges-v2"}function kH(e,t,{color:n,useVertexColors:r=!1,edgeSettings:o=null}={}){const i=Number.isFinite(Number(t?.surfaceOpacity))?Number(t.surfaceOpacity):1,s=new e.MeshPhysicalMaterial({color:n||t?.surface||zo.surface,roughness:Number.isFinite(Number(t?.surfaceRoughness))?Number(t.surfaceRoughness):zo.surfaceRoughness,metalness:Number.isFinite(Number(t?.surfaceMetalness))?Number(t.surfaceMetalness):zo.surfaceMetalness,clearcoat:Number.isFinite(Number(t?.surfaceClearcoat))?Number(t.surfaceClearcoat):zo.surfaceClearcoat,clearcoatRoughness:Number.isFinite(Number(t?.surfaceClearcoatRoughness))?Number(t.surfaceClearcoatRoughness):zo.surfaceClearcoatRoughness,side:e.DoubleSide,vertexColors:r,transparent:i<.999,opacity:i,emissive:0,emissiveIntensity:0,polygonOffset:!1,polygonOffsetFactor:0,polygonOffsetUnits:0});return o?.enabled&&OH(e,s,o,t),s}function DH(e,t,n=0){return new e.MeshBasicMaterial({color:Av(t||{},n),transparent:!0,opacity:.035,depthWrite:!1})}function LH(e,{color:t,useVertexColors:n=!1,opacity:r=1}={}){return new e.MeshBasicMaterial({color:t||zo.surface,side:e.DoubleSide,vertexColors:n,transparent:r<.999,opacity:r,depthWrite:r>=.999})}function FH(e,t,n){return Gu(e,t?.color||n?.sourceColor)}function jH(e,t=1){const n=Number(e?.opacity);return Number.isFinite(n)?Pn(n,0,1):t}function zH(e,t){const n=Array.isArray(t)?t:[],r=n.map(o=>String(o?.color||"").trim().toLowerCase()).filter(Boolean);return r.length?r.length!==n.length||new Set(r).size>1:!1}function BH(e){return(Array.isArray(e)?e:[]).some(n=>{const r=Number(n?.opacity);return Number.isFinite(r)&&Pn(r,0,1)<.999})}function VH(e){const t=new e.BufferGeometry;return t.setAttribute("position",new e.BufferAttribute(new Float32Array(0),3)),t}function $H(e,t){return[String(e?.occurrenceId||""),String(e?.id||""),String(e?.partSourcePath||e?.sourcePath||""),String(e?.label||e?.name||""),String(t).padStart(8,"0")].join("\0")}function GH(e=[]){return new Map([...e].map((t,n)=>({part:t,key:$H(t,n)})).sort((t,n)=>t.key.localeCompare(n.key)).map(({part:t},n)=>[t,n]))}function bO(e,t,n,r){const o=fO(t),i=o.part.get(n)||o.whole.get(n);if(i)return i;const s=r();return s?.geometry?(mO(s.geometry),n===Wf?o.whole.set(n,s):o.part.set(n,s),s):null}function UH(e,t,n,r=!1){const o=String(n?.id||n?.occurrenceId||"").trim(),i=n?.sourceMesh&&typeof n.sourceMesh=="object"?n.sourceMesh:null,s=i&&n?.hasSourceColors?"source-colors":"flat",l=(i?`source:${String(n?.sourceMeshKey||n?.meshUrl||n?.partFileRef||o||"").trim()}:${s}`:"")||o||`${Vt(n?.vertexOffset)}:${Vt(n?.triangleOffset)}`;return bO(e,t,l,()=>{const c=i?0:Vt(n?.vertexOffset,0),u=i?Math.floor((i.vertices?.length||0)/3):Vt(n?.vertexCount,0),f=i?0:Vt(n?.triangleOffset,0),m=i?Math.floor((i.indices?.length||0)/3):Vt(n?.triangleCount,0);if(u<=0||m<=0)return null;let p,b,y,x;if(i)p=i.vertices||new Float32Array(0),b=n?.hasSourceColors&&za(i.colors,3)&&i.colors.length===p.length?new Float32Array(i.colors):null,y=za(i.normals,3)?i.normals:null,x=i.indices||new Uint32Array(0);else{const E=c*3,C=E+u*3;p=t.vertices.slice(E,C),b=_H(t,n)?new Float32Array(t.colors.slice(E,C)):null,y=za(t.normals,3)?t.normals.slice(E,C):null;const A=t.indices.slice(f*3,f*3+m*3);x=new Uint32Array(A.length);for(let N=0;N<A.length;N+=1)x[N]=Math.max(0,Number(A[N])-c)}if(!x.length)return null;const S=new e.BufferGeometry;return S.setAttribute("position",new e.BufferAttribute(p instanceof Float32Array?p:new Float32Array(p),3)),S.setIndex(new e.BufferAttribute(x instanceof Uint32Array?x:new Uint32Array(x),1)),b&&b.length===p.length&&S.setAttribute("color",new e.BufferAttribute(new Float32Array(b),3)),i?EE(e,S,i,0,u):EE(e,S,t,c,u),hO(e,S,y,r),S.computeBoundingSphere(),{geometry:S,rawColors:b}})}function HH(e,t,n=!1){return bO(e,t,Wf,()=>{const r=new e.BufferGeometry;r.setAttribute("position",new e.BufferAttribute(new Float32Array(t.vertices||[]),3)),r.setIndex(new e.BufferAttribute(new Uint32Array(t.indices||[]),1));const o=gO(t)&&t.colors?.length===t.vertices?.length?new Float32Array(t.colors):null;return o&&r.setAttribute("color",new e.BufferAttribute(new Float32Array(o),3)),EE(e,r,t,0,Math.floor((t.vertices?.length||0)/3)),hO(e,r,t.normals,n),r.computeBoundingSphere(),{geometry:r,rawColors:o}})}function WH(e,t,n){if(!t?.geometry||!t.rawColors||!t.hasVertexColors)return;const r=TH(e,t.rawColors,n);if(!r)return;const o=t.geometry.getAttribute("color");if(o?.array?.length===r.length){o.array.set(r),o.needsUpdate=!0;return}t.geometry.setAttribute("color",new e.BufferAttribute(r,3))}function WI(e,t,n){if(!za(t,3)||!za(n,2))return null;const r=Math.floor(t.length/3),o=Math.floor(n.length/2);if(o<=0)return null;const i=new Float32Array(o*6);let s=0;for(let c=0;c+1<n.length;c+=2){const u=Number(n[c]),f=Number(n[c+1]);if(!Number.isInteger(u)||!Number.isInteger(f)||u<0||f<0||u>=r||f>=r)continue;const m=u*3,p=f*3;i[s]=Number(t[m]),i[s+1]=Number(t[m+1]),i[s+2]=Number(t[m+2]),i[s+3]=Number(t[p]),i[s+4]=Number(t[p+1]),i[s+5]=Number(t[p+2]),s+=6}if(!s)return null;const a=new e.BufferGeometry,l=s===i.length?i:i.subarray(0,s);return a.setAttribute("position",new e.BufferAttribute(l,3)),a}function KH(e,t,n,r,o,i={}){const s=fO(t),a=n?String(n?.id||n?.occurrenceId||"").trim():Wf,l=n?.sourceMesh?String(n?.sourceMeshKey||n?.meshUrl||n?.partFileRef||"").trim():"",c=`${o}:${l?`source:${l}`:a||Wf}`,u=s.edge.get(c);if(u)return u;let f=null;if(Fl(o))f=new e.WireframeGeometry(r);else if(n){const m=Vt(n?.edgeIndexOffset,0),p=Vt(n?.edgeIndexCount,0);if(p>=2&&za(t?.edge_indices,2)){const y=typeof t.edge_indices.subarray=="function"?t.edge_indices.subarray(m,m+p):t.edge_indices.slice(m,m+p);f=WI(e,t.vertices,y)}f||=new e.EdgesGeometry(r,zI)}else za(t?.edge_indices,2)&&(f=WI(e,t.vertices,t.edge_indices));return f||=new e.EdgesGeometry(r,zI),f.getAttribute("position")?.count||(f.dispose(),f=VH(e)),mO(f),s.edge.set(c,f),f}function qH(e=null,t=null){const n=Number.isFinite(Number(t?.edgeThickness))?Number(t.edgeThickness):zo.edgeThickness;return Number.isFinite(Number(e?.thickness))?Pn(Number(e.thickness),.5,6):n}function YH(e,t){if(!e)return;const n=Pn(Number(t)||0,0,1),r=n<.999;e.opacity=n,e.depthWrite=!1,e.transparent!==r&&(e.transparent=r,e.needsUpdate=!0)}function XH(e,t,n,r,o,i){const s=Fl(i),a=r?.depthTest===!1?!1:!s,l=new e.LineBasicMaterial({color:r?.color||n?.edge||zo.edge,transparent:!0,opacity:s?Math.max(Vt(r?.opacity,.92),.9):Vt(r?.opacity,n?.edgeOpacity??jv),depthTest:a,depthWrite:!1}),c=new e.LineSegments(t,l);return c.userData.partId=o,{object:c,material:l}}function ZH(e){if(!e)return{object:null,material:null};const t=e.object||e.edgeMesh||e.mesh||e.line||null;return{object:t,material:e.material||e.edgeMaterial||t?.material||null}}function JH(e=null){if(!e||typeof e!="object")return{mode:"basic"};const t=String(e.mode||e.type||"").trim().toLowerCase();return{...e,mode:t==="screen-space"||t==="screenspace"?"screen-space":"basic",wireframeEdgeColor:String(e.wireframeEdgeColor||"").trim()}}function QH(e,t={}){e.edgeRendering=t;for(const n of["Line2","LineGeometry","LineSegments2","LineSegmentsGeometry","LineMaterial"])e[n]=t[n]||t.constructors?.[n]||null}function e6(e,t,n,r){const o=r*Pn(Vt(n?.silhouetteScale,.004),0,.04);if(!(o>0))return null;const i=new e.ShaderMaterial({uniforms:{color:{value:new e.Color(n?.color||zo.edge)},opacity:{value:Pn(Vt(n?.opacity,.9),0,1)},offset:{value:o}},vertexShader:`
|
||
uniform float offset;
|
||
void main() {
|
||
vec3 displaced = position + normal * offset;
|
||
gl_Position = projectionMatrix * modelViewMatrix * vec4(displaced, 1.0);
|
||
}
|
||
`,fragmentShader:`
|
||
uniform vec3 color;
|
||
uniform float opacity;
|
||
void main() {
|
||
gl_FragColor = vec4(color, opacity);
|
||
}
|
||
`,side:e.BackSide,transparent:!0,depthTest:!0,depthWrite:!1}),s=new e.Mesh(t,i);return s.renderOrder=-1,s}function t6(e,t,n={}){return n.silhouette!==!1&&!Fl(t)&&e.silhouette===!0&&(e.enabled===!0||n.silhouette===!0)}function xO(e,t){const n=Array.isArray(t?.min)?t.min:[0,0,0],r=Array.isArray(t?.max)?t.max:n;return new e.Vector3((Vt(n[0])+Vt(r[0]))/2,(Vt(n[1])+Vt(r[1]))/2,(Vt(n[2])+Vt(r[2]))/2)}function SO(e,t,n,{baseTheme:r=zo,displayMode:o=$t.SOLID}={}){if(t?.instanced||!t?.material||!n)return;const i=Fl(o),s=n.overrideSourceColors===!0||i,a=!s&&!!t.hasVertexColors;if(t.useVertexColors=a,t.baseColor=yO(e,{hasVertexColors:a,sourceColor:s?null:t.sourceColor||null,materialSettings:n,fallbackColor:n?.defaultColor||r?.surface||zo.surface,fillIndex:t.fillIndex||0,forceFill:s||!t.hasSourceColor}),t.material.vertexColors=a,i){t.material.color&&t.baseColor&&t.material.color.copy(t.baseColor),t.baseOpacity=Zb(o,.035),t.material.opacity=t.baseOpacity,t.material.transparent=!0,t.material.depthWrite=!1,t.material.needsUpdate=!0;return}WH(e,t,n);const l=t.sourcePart?.material&&typeof t.sourcePart.material=="object"?t.sourcePart.material:null,c=f=>{const m=l?Number(l[f]):NaN;return Pn(Number.isFinite(m)?m:Number(n[f])||0,0,1)};t.material.roughness=c("roughness"),t.material.metalness=c("metalness"),t.material.clearcoat=c("clearcoat"),t.material.clearcoatRoughness=c("clearcoatRoughness");const u=Number.isFinite(Number(t.sourceOpacity))?Pn(Number(t.sourceOpacity),0,1):1;t.baseOpacity=Pn(Zb(o,n.opacity)*u,0,1),t.material.opacity=t.baseOpacity,t.material.transparent=t.baseOpacity<.999,t.material.depthWrite=o===$t.TRANSPARENT?!1:t.baseOpacity>=.999,t.material.envMapIntensity=Math.max(Number(n.envMapIntensity)||0,0),t.material.color&&t.baseColor&&t.material.color.copy(t.baseColor),t.baseEmissiveIntensity=Pn(Number(n.emissiveIntensity)||0,0,2),t.baseEmissiveColor=t.baseColor?t.baseColor.clone():null,"emissive"in t.material&&t.material.emissive&&(t.baseEmissiveColor&&t.baseEmissiveIntensity>0?t.material.emissive.copy(t.baseEmissiveColor):t.material.emissive.set(0),t.material.emissiveIntensity=t.baseEmissiveIntensity),t.material.needsUpdate=!0}function n6(e){return(Array.isArray(e)?e:[e]).map(t=>String(t||"").trim()).filter(Boolean)}function KI(e){const t=String(e||"").trim();return t.startsWith("#")?t.slice(1).trim():t}function fy(e,t){if(!t?.size)return!1;if(t.has(Wf))return!0;const n=KI(e);if(!n)return!1;for(const r of t){const o=KI(r);if(o&&(n===o||n.startsWith(`${o}.`)))return!0}return!1}function r6(e,t,n){return t?(Number.isFinite(Number(e[n]))||(e[n]=Number.isFinite(Number(t.renderOrder))?Number(t.renderOrder):0),e[n]):0}function qI(e,t,n,r,o){if(!t)return;const i=r6(e,t,n);t.renderOrder=r?o:i}function o6(e,t,n,{writeTransparentDepth:r=!0}={}){const o=e?.material;if(!o)return;Object.hasOwn(e,"baseDepthWrite")||(e.baseDepthWrite=o.depthWrite!==!1);const i=t||n<.999;o.transparent!==i&&(o.transparent=i,o.needsUpdate=!0),o.depthWrite=i&&!r?!1:e.baseDepthWrite}const i6=Object.freeze({feature:"cadSurfaceFeatureOpacity",tangent:"cadSurfaceTangentOpacity",seam:"cadSurfaceSeamOpacity",degenerate:"cadSurfaceDegenerateOpacity"}),s6=Object.freeze({feature:"cadSurfaceFeatureColor",tangent:"cadSurfaceTangentColor",seam:"cadSurfaceSeamColor",degenerate:"cadSurfaceDegenerateColor"});function a6(e,t,n,r=null){const o=t?.material,i=o?.userData;if(!o||i?.cadSurfaceEdges!==!0)return;const s=n?.isColor?n:Gu(e,n)||i.cadSurfaceEdgeBaseColor;if(s?.isColor){i.cadSurfaceEdgeColor=s.clone();const f=i.cadSurfaceEdgeShader?.uniforms?.cadSurfaceEdgeColor;f?.value?.copy&&f.value.copy(s)}const a=r!=null&&Number.isFinite(Number(r))?Pn(Number(r),0,1):null,l=i.cadSurfaceEdgeBaseClassSettings||{},c=i.cadSurfaceEdgeShader?.uniforms||null,u=a!==null||s?.isColor&&i.cadSurfaceEdgeBaseColor?.isColor&&!s.equals(i.cadSurfaceEdgeBaseColor);for(const[f,m]of Object.entries(s6)){const p=Gu(e,l[f]?.color)||i.cadSurfaceEdgeBaseColor,b=u?s:p;b?.isColor&&c?.[m]?.value?.copy&&c[m].value.copy(b)}for(const[f,m]of Object.entries(i6)){const p=Number(l[f]?.opacity),b=a===null?Number.isFinite(p)?p:null:a;b!==null&&(i[`cadSurfaceEdge${f}Opacity`]=b,c?.[m]&&(c[m].value=b))}}function l6(e,t,{baseTheme:n=zo,edgeSettings:r,hiddenPartIds:o,hoveredPartId:i,focusedPartId:s,selectedPartIds:a,showEdges:l=!0}={}){const c=new Set(Array.isArray(o)?o:[]),u=new Set(Array.isArray(a)?a:[]),f=new Set((Array.isArray(i)?i:[i]).map(I=>String(I||"").trim()).filter(Boolean)),m=r?.color||n?.edge||zo.edge,p=Number.isFinite(Number(n?.surfaceOpacity))?Number(n.surfaceOpacity):1,b=new Set(n6(s)),y=b.size>0,x=Number.isFinite(Number(r?.opacity))?Pn(Number(r.opacity),0,1):n?.edgeOpacity??zo.edgeOpacity??jv,S=Number.isFinite(Number(r?.highlightOpacity))?Pn(Number(r.highlightOpacity),0,1):1,E=String(r?.highlightColor||VI).trim()||VI,C=String(r?.hoverColor||BI).trim()||BI,A=new e.Color(C),N=new e.Color(C),w=new e.Color(E),_=new e.Color(E);for(const I of Array.isArray(t)?t:[]){if(!I?.mesh||!I?.material)continue;const R=I.effectStyle&&typeof I.effectStyle=="object"?I.effectStyle:{},O=I.effectVisible===!1,F=Gu(e,R.color),V=Gu(e,R.edgeColor),$=Gu(e,R.emissive),K=fy(I.partId,c),U=!K&&(fy(I.partId,u)||I.effectHighlighted===!0),Y=!K&&!O&&!U&&fy(I.partId,f),D=!K&&!O&&y&&fy(I.partId,b),j=!K&&!O&&y&&!D,ee=U||Y;I.mesh.visible=!O,I.edges&&(I.edges.visible=l&&!O),I.silhouette&&(I.silhouette.visible=!O),qI(I,I.mesh,"baseMeshRenderOrder",ee,SH),qI(I,I.edges,"baseEdgeRenderOrder",ee,EH);const X=Number.isFinite(Number(I.baseOpacity))?Number(I.baseOpacity):p,ve=Number.isFinite(Number(R.opacity))?Pn(Number(R.opacity),0,1):1,q=Number.isFinite(Number(R.edgeOpacity))?Pn(Number(R.edgeOpacity),0,1):ve,re=U?S*q:Y?S*sO*q:null,Be=Math.min(X*ve,wH),Me=U?Pn(X*ve+xH,0,1):Y?Pn(X*ve+bH,0,1):X*ve,He=K||j?Be:Me;o6(I,K||j||ee,He,{writeTransparentDepth:!K&&!j}),I.material.opacity=He;const de=U?c0(e,I.baseColor,w,oO):Y?c0(e,I.baseColor,A,iO):null;I.baseColor&&I.material.color&&I.material.color.copy(de||F||I.baseColor),"emissive"in I.material&&I.material.emissive&&(U?I.material.emissive.copy(w):Y?I.material.emissive.copy(A):I.baseEmissiveColor&&I.baseEmissiveIntensity>0?I.material.emissive.copy(I.baseEmissiveColor):I.material.emissive.set(0),I.material.emissiveIntensity=U?aO:Y?lO:Pn($?Number(R.emissiveIntensity)||.22:Number(I.baseEmissiveIntensity)||0,0,2),!U&&!Y&&$&&I.material.emissive.copy($));const me=U?_:Y?N:V||m;a6(e,I,me,re),I.edgeMaterial&&(I.edgeMaterial.color?.set?.(me),YH(I.edgeMaterial,U||Y?re:K||j?He:x*q)),uO(e,I,{visible:U&&!K&&!O,color:w})}}function c6(e){for(const t of Array.isArray(e)?e:[])t.effectMatrix=null,t.effectStyle=null,t.effectVisible=null,t.effectHighlighted=!1}function u6(e,t){const n=Array.isArray(t?.min)?t.min:[0,0,0],r=Array.isArray(t?.max)?t.max:[1,1,1];return[[n[0],n[1],n[2]],[n[0],n[1],r[2]],[n[0],r[1],n[2]],[n[0],r[1],r[2]],[r[0],n[1],n[2]],[r[0],n[1],r[2]],[r[0],r[1],n[2]],[r[0],r[1],r[2]]].map(o=>new e.Vector3(Vt(o[0]),Vt(o[1]),Vt(o[2])))}function d6(e,t,n=null){if(!t||!Array.isArray(t.min)||!Array.isArray(t.max))return null;if(!(n instanceof e.Matrix4))return{min:[...t.min],max:[...t.max]};const r=u6(e,t).map(s=>s.applyMatrix4(n)),o=[1/0,1/0,1/0],i=[-1/0,-1/0,-1/0];for(const s of r)o[0]=Math.min(o[0],s.x),o[1]=Math.min(o[1],s.y),o[2]=Math.min(o[2],s.z),i[0]=Math.max(i[0],s.x),i[1]=Math.max(i[1],s.y),i[2]=Math.max(i[2],s.z);return o.every(Number.isFinite)&&i.every(Number.isFinite)?{min:o,max:i}:null}function f6(e){const t=[1/0,1/0,1/0],n=[-1/0,-1/0,-1/0];let r=0;for(const o of Array.isArray(e)?e:[])if(!(!o||!Array.isArray(o.min)||!Array.isArray(o.max))){r+=1;for(let i=0;i<3;i+=1)t[i]=Math.min(t[i],Vt(o.min[i])),n[i]=Math.max(n[i],Vt(o.max[i]))}return r>0&&t.every(Number.isFinite)&&n.every(Number.isFinite)?{min:t,max:n}:null}function EO(e,t,n=null){const r=[];for(const o of Array.isArray(t)?t:[]){if(!o||o.effectVisible===!1)continue;const i=Fv(e,o);r.push(d6(e,o.partBounds,i))}return f6(r)||n}function m6(e,t,n,r,o={}){const i=n?.definition||null,s=i?.module||null;if(!i||!s?.setup)return;const a=new Map,l=s0(i,{meshData:r,selectorRuntime:n?.selectorRuntime||null}),c=Ph({runtime:t,stepModuleRuntime:n,features:l,effects:l0(e,{meshData:r,features:l,runtime:t,effectsByPartId:a}),cleanup:u=>{typeof u=="function"&&t.cleanups.push(u)}});try{s.setup(c)}catch(u){o.onWarning?.({title:"STEP parameter setup failed",message:u instanceof Error?u.message:String(u),error:u})}}function YI(e,t,n={}){for(;e.cleanups.length;)try{e.cleanups.pop()?.()}catch(i){n.onWarning?.({title:"STEP parameter cleanup failed",message:i instanceof Error?i.message:String(i),error:i})}const r=t?.definition?.module||null;if(!r?.dispose)return;const o=Ph({runtime:e,stepModuleRuntime:t,features:{},effects:{},cleanup:()=>{}});try{r.dispose(o)}catch(i){n.onWarning?.({title:"STEP parameter dispose failed",message:i instanceof Error?i.message:String(i),error:i})}}function p6(e,t,n,r,o={}){const i=n?.definition||null,s=i?.module||null;if(!i||!s){c6(t.displayRecords);for(const f of t.displayRecords)Sl(e,f);return t.baseBounds}const a=new Map,l=s0(i,{meshData:r,selectorRuntime:n?.selectorRuntime||null}),c=l0(e,{meshData:r,features:l,runtime:t,effectsByPartId:a}),u=Ph({runtime:t,stepModuleRuntime:n,features:l,effects:c,cleanup:f=>{typeof f=="function"&&t.cleanups.push(f)}});try{s.update?.(u),s.render?.(u)}catch(f){o.onWarning?.({title:"STEP parameter update failed",message:f instanceof Error?f.message:String(f),error:f})}rO(e,t.displayRecords,a);for(const f of t.displayRecords)Sl(e,f);return EO(e,t.displayRecords,t.baseBounds)}function wO(e,t,n,r=null){const o=Va(t);if(!o.enabled||!n)return null;const i=wP(o.axis),s=Array.isArray(n?.min)?n.min:[0,0,0],a=Array.isArray(n?.max)?n.max:s,l=Vt(s[i]),c=Vt(a[i]),u=Math.min(l,c),f=Math.max(l,c),m=u+(f-u)*o.offset,p=new e.Vector3(i===0?1:0,i===1?1:0,i===2?1:0);o.invert&&p.multiplyScalar(-1);const b=r?.clone?r.clone():new e.Vector3(0,0,0);return b.setComponent(i,b.getComponent(i)+m),new e.Plane().setFromNormalAndCoplanarPoint(p,b)}function Lu(e,t){if(!e)return;const n=Array.isArray(e)?e:[e],r=Array.isArray(t)&&t.length>0;for(const o of n){if(!o)continue;const i=o.userData?.cadClipPlaneEnabled===!0,s=Number(o.userData?.cadClipPlaneCount)||0,a=o.clipping===!0;o.clippingPlanes=r?t:null,o.clipIntersection=!1,o.clipShadows=r,"clipping"in o&&(o.clipping=r),o.userData={...o.userData||{},cadClipPlaneEnabled:r,cadClipPlaneCount:r?t.length:0},(i!==r||s!==(r?t.length:0)||a!==(o.clipping===!0))&&(o.needsUpdate=!0)}}function h6(e,t,n,r=null){const o=wO(e.THREE,t,n,r),i=o?[o]:[];e.activeClipPlane=o,e.activeClipPlanes=i;for(const s of e.displayRecords)Lu(s.material,i),Lu(s.edgeMaterial,i),Lu(s.silhouette?.material,i),Lu(s.ghostMaterial,i)}function XI(e={}){return e&&typeof e=="object"?e:{}}function g6(e){return Array.isArray(e)?e:String(e||"").trim().split(",")}function y6(e){const t=String(e||"").trim();return t?(t.startsWith("#")?t.slice(1):t).split(",").map(r=>r.trim()).filter(Boolean):[]}function xS(e){return g6(e).flatMap(y6)}function ZI(e,t,{descendants:n=!1}={}){const r=String(e||"").trim(),o=String(t||"").trim();return!r||!o?!1:r===o||n&&r.startsWith(`${o}.`)}function JI(e,t){const n=String(t||"").trim();return n?[e?.id,e?.occurrenceId].some(r=>ZI(r,n,{descendants:!0}))?!0:[e?.name,e?.label,e?.linkName].some(r=>ZI(r,n)):!1}function b6(e){const t=[1/0,1/0,1/0],n=[-1/0,-1/0,-1/0];let r=0;for(const o of Array.isArray(e)?e:[]){const i=o?.bounds;if(!(!Array.isArray(i?.min)||!Array.isArray(i?.max))){r+=1;for(let s=0;s<3;s+=1)t[s]=Math.min(t[s],Number(i.min[s])),n[s]=Math.max(n[s],Number(i.max[s]))}}return r>0&&t.every(Number.isFinite)&&n.every(Number.isFinite)?{min:t,max:n}:null}function x6(e,t={}){const n=Array.isArray(e?.parts)?e.parts:[];if(!n.length)return e;const r=[...xS(t.focus),...xS(t.refs)],o=xS(t.hide);if(!r.length&&!o.length)return e;const i=n.filter(s=>r.length&&!r.some(a=>JI(s,a))?!1:!o.some(a=>JI(s,a)));if(!i.length)throw new Error("No renderable parts remain after applying focus/hide filters");return{...e,parts:i,bounds:b6(i)||e.bounds}}function S6(e,t={}){return t.materialSettings&&typeof t.materialSettings=="object"?t.materialSettings:e.materials||{}}function vO(e){return e?.partTransformsBaked===!1}function AO(e,t,n){if(Array.isArray(n.parts))return n.parts.filter(o=>Vt(o?.vertexCount)>0&&Vt(o?.triangleCount)>0);const r=UI(e?.parts).filter(o=>Vt(o?.vertexCount)>0&&Vt(o?.triangleCount)>0);if(!r.length)return[];if(n.renderPartsIndividually===!0)return r;if(n.renderPartsIndividually===!1){const o=UI(n.pickableParts).filter(s=>Vt(s?.vertexCount)>0&&Vt(s?.triangleCount)>0);return o.length?o:vO(e)||zH(e,r)||BH(r)||t?.materials?.cycleColors===!0&&Array.isArray(t?.materials?.fillColors)&&t.materials.fillColors.length>1?r:[]}return r}function E6(e,t,n,r,o){const i=t.edgeSettings,s=t.baseTheme,a=t.displayMode,c=t.edgeRendering?.mode==="screen-space"?TU(t,{geometry:r,edgeSettings:i,baseTheme:s,partId:n.partId,displayMode:a,thickness:qH(i,s),wireframeEdgeColor:t.edgeRendering?.wireframeEdgeColor||""},t.screenSpaceLineMaterials):XH(e,r,s,i,n.partId,a),{object:u,material:f}=ZH(c);u&&(u.userData.partId=n.partId,n.edges=u,n.edgeMaterial=f,n.baseEdgeColor=f?.color?.isColor?f.color.clone():new e.Color(i?.color||s?.edge||zo.edge),n.baseEdgeOpacity=Number.isFinite(Number(f?.opacity))?Number(f.opacity):1,t.edgesGroup.add(u))}function w6(e,t,n,r){const o=t.theme,i=t.materialSettings,s=t.displayMode,a=t.baseTheme,l=t.edgeSettings,c=n.bounds||SE(n.vertices||[]),{radius:u}=bb(e,c,t.scale),f=t6(l,s,r),m=AO(n,o,r),p=GH(m),b=m.length===0,y=[],x=({part:S=null,geometryEntry:E,fillIndex:C=0,baseTransform:A=null})=>{const N=S?String(S?.id||S?.occurrenceId||`part:${y.length}`):Wf,w=Fl(s),_=i.overrideSourceColors===!0||w,I=!!E.geometry.getAttribute("color"),R=!w&&!ex(s)&&l.enabled&&NH(E.geometry),O=FH(e,S,n),F=jH(S),V=I||!!O,$=!_&&I,K=yO(e,{hasVertexColors:$,sourceColor:_?null:O,materialSettings:i,fallbackColor:i.defaultColor||a?.surface||zo.surface,fillIndex:C,forceFill:_||!V}),U=w?DH(e,i,C):m4(s)?LH(e,{color:K,useVertexColors:$,opacity:Zb(s,i.opacity)}):kH(e,a,{color:K,useVertexColors:$,edgeSettings:R?l:null});l.enabled&&!w&&!R&&(U.polygonOffset=!0,U.polygonOffsetFactor=1,U.polygonOffsetUnits=1);const Y=new e.Mesh(E.geometry,U);Y.castShadow=!0,Y.receiveShadow=!1,Y.userData.partId=N;const D=S?r.callbacks?.faceIdsForPart?.(S):r.callbacks?.faceIdsForMesh?.(n);D&&(Y.userData.faceIds=D),t.modelGroup.add(Y);const j={partId:N,sourcePart:S||null,mesh:Y,ghostMesh:null,ghostMaterial:null,edges:null,silhouette:null,material:U,edgeMaterial:null,baseColor:K,sourceColor:O,sourceOpacity:F,baseTransform:A,partCenter:xO(e,S?.bounds||c),partBounds:S?.bounds||S?.sourceBounds||c,effectMatrix:null,effectStyle:null,effectVisible:null,effectHighlighted:!1,fillIndex:C,hasSourceColor:V,hasVertexColors:$,useVertexColors:$,rawColors:E.rawColors,geometry:E.geometry,baseOpacity:Number.isFinite(Number(U.opacity))?Number(U.opacity):1,baseEmissiveColor:K?K.clone():null,baseEmissiveIntensity:0,baseEdgeColor:null,baseEdgeOpacity:1};if(f){const ee=e6(e,E.geometry,l,u);ee&&(j.silhouette=ee,t.modelGroup.add(ee))}r.selection?.showEdges!==!1&&!R&&(l.enabled||w)&&E6(e,t,j,KH(e,n,S,E.geometry,s,l)),SO(e,j,i,{baseTheme:a,displayMode:s}),Sl(e,j),y.push(j)};if(b){const S=HH(e,n,r.recomputeNormals===!0);S&&x({geometryEntry:S,fillIndex:0})}else for(const S of m){const E=UH(e,n,S,r.recomputeNormals===!0);E&&x({part:S,geometryEntry:E,fillIndex:p.get(S)??y.length,baseTransform:tO(n,S,r.renderPartsIndividually===!0)})}return y}function QI(e,t,n){const r=Zu(t?.edges);return JSON.stringify({meshData:e?"mesh":"",displayMode:ga(n.displayMode),parts:MH(AO(e,t,n)),recomputeNormals:n.recomputeNormals===!0,edgeSettings:r,silhouette:n.silhouette!==!1&&r.silhouette===!0&&(r.enabled!==!1||n.silhouette===!0),edgeRendering:n.edgeRendering?.mode||"basic",wireframeEdgeColor:n.edgeRendering?.wireframeEdgeColor||""})}function eN(e={}){const t=ga(e.displayMode),n=e.theme||e.themeSettings||e.settings||void 0,r=Pi(n),o=Zu(n?.edges),i=e.applyDisplayModeEdgePolicy!==!1,s={...r,edges:i?{...o,enabled:u4(t)&&(Q0(t)||o.enabled===!0),depthTest:ex(t)?!1:o.depthTest}:o},a=dO(e.scale??e.sceneScale??e.sceneScaleMode),l=e.callbacks&&typeof e.callbacks=="object"?e.callbacks:{},c=e.baseTheme&&typeof e.baseTheme=="object"?e.baseTheme:zo;return{...e,theme:s,displayMode:t,scale:a,callbacks:l,baseTheme:c,selection:XI(e.selection),filterSelection:e.filterSelection===!1?{}:XI(e.filterSelection??e.selection),clip:Va(e.clip),stepParameters:e.stepParameters||null,parameterSetup:e.parameterSetup!==!1,materialSettings:S6(s,e),edgeRendering:JH(e.edgeRendering)}}function SS(e,t){e.theme=t.theme,e.displayMode=t.displayMode,e.scale=t.scale,e.baseTheme=t.baseTheme,e.edgeSettings={...Zu(t.theme?.edges),depthTest:ex(t.displayMode)?!1:void 0},e.materialSettings=t.materialSettings,QH(e,t.edgeRendering)}function v6(e){return e?.meshData||e}function A6(e,t,n={}){if(!e)throw new Error("buildModel requires THREE");const r=v6(t),o=eN(n),i=x6(r,o.filterSelection),s=new e.Group,a=new e.Group,l=new e.Group;s.name="CadSceneRoot",a.name="CadSceneModel",l.name="CadSceneEdges",s.add(a),s.add(l);const c=i?.bounds||SE(i?.vertices||[]),u={THREE:e,root:s,modelGroup:a,edgesGroup:l,displayRecords:[],records:[],baseBounds:c,bounds:c,modelBounds:c,modelRadius:bb(e,c,o.scale).radius,cleanups:[],activeClipPlane:null,activeClipPlanes:[],screenSpaceLineMaterials:new Set,syncScreenSpaceLineMaterials(C,A){SU(u.screenSpaceLineMaterials,C,A)},registerScreenSpaceLineMaterial(C){C?.resolution?.set&&u.screenSpaceLineMaterials.add(C)},unregisterScreenSpaceLineMaterial(C){u.screenSpaceLineMaterials.delete(C)},requestRender:()=>{}};SS(u,o);let f=!1,m=o,p="",b=null,y=!1;const x=(C=m)=>{bS(a),bS(l),SS(u,C),u.baseBounds=i?.bounds||SE(i?.vertices||[]),u.displayRecords=w6(e,u,i,C),u.records=u.displayRecords,u.bounds=u.baseBounds,u.modelBounds=u.baseBounds,u.modelRadius=bb(e,u.baseBounds,u.scale).radius,p=QI(i,u.theme,C)},S=(C=m)=>{SS(u,C);for(const _ of u.displayRecords)SO(e,_,u.materialSettings,{baseTheme:u.baseTheme,displayMode:u.displayMode});const A=C.parameterSetup!==!1,N=C.stepParameters||null;(b!==N||y!==A)&&(y&&YI(u,b,C.callbacks),b=N,y=A,y&&m6(e,u,b,i,C.callbacks));const w=p6(e,u,b,i,C.callbacks);u.bounds=w||u.baseBounds,u.modelBounds=u.bounds,u.modelRadius=bb(e,u.bounds,u.scale).radius,l6(e,u.displayRecords,{baseTheme:u.baseTheme,edgeSettings:u.edgeSettings,...C.selection,showEdges:C.selection?.showEdges!==!1}),h6(u,C.clip,u.bounds,C.modelOffset||a.position)};x(m),S(m);const E={source:t,meshData:i,root:s,modelGroup:a,edgesGroup:l,get displayRecords(){return u.displayRecords},get records(){return u.displayRecords},get bounds(){return u.bounds},get radius(){return u.modelRadius},get runtime(){return u},update(C={}){if(f)return E;const A={...m,...C,selection:{...m.selection||{},...C.selection||{}},callbacks:{...m.callbacks||{},...C.callbacks||{}}};return Object.prototype.hasOwnProperty.call(C,"theme")&&!Object.prototype.hasOwnProperty.call(C,"materialSettings")&&delete A.materialSettings,m=eN(A),QI(i,m.theme,m)!==p&&x(m),S(m),E},dispose(){f||(f=!0,y&&YI(u,b,m.callbacks),bS(s))}};return E}function C6({meshData:e=null,renderPartsIndividually:t=!1,fillRotationParts:n=!1,sourceColorParts:r=!1,pickableParts:o=null,pickMode:i=Kr.AUTO}={}){const s=Array.isArray(e?.parts)?e.parts:[],a=Array.isArray(o)?o:[],l=!!(t||n||r||vO(e)),c=a.length>0&&(i===Kr.PARTS||i===Kr.ASSEMBLY||i===Kr.AUTO),u=l?s:c?a:[];return{renderParts:u.length>0,parts:u}}const Tr=Object.freeze({FREEHAND:"freehand",LINE:"line",SURFACE_LINE:"surface-line",ARROW:"arrow",DOUBLE_ARROW:"double-arrow",RECTANGLE:"rectangle",CIRCLE:"circle",FILL:"fill",ERASE:"erase"});function wE(e,t,n){return Math.min(Math.max(e,t),n)}function xb(e,t,n){const r=n[0]-t[0],o=n[1]-t[1];if(Math.abs(r)<1e-9&&Math.abs(o)<1e-9)return Math.hypot(e[0]-t[0],e[1]-t[1]);const i=wE(((e[0]-t[0])*r+(e[1]-t[1])*o)/(r*r+o*o),0,1),s=[t[0]+r*i,t[1]+o*i];return Math.hypot(e[0]-s[0],e[1]-s[1])}function CO(e,t){let n=!1;for(let r=0,o=t.length-1;r<t.length;o=r,r+=1){const i=t[r],s=t[o];if(xb(e,i,s)<=1e-4)return!0;i[1]>e[1]!=s[1]>e[1]&&e[0]<(s[0]-i[0])*(e[1]-i[1])/(s[1]-i[1]||1e-9)+i[0]&&(n=!n)}return n}function tN(e,t){const n=t.getBoundingClientRect(),r=n.width||1,o=n.height||1;return{x:wE((e.clientX-n.left)/r,0,1),y:wE((e.clientY-n.top)/o,0,1)}}function Al(e,t,n){return[e.x*t,e.y*n]}function M6(e,t,n){const r=Array.isArray(e?.points)?e.points:[];if(r.length<2)return 0;let o=0;for(let i=1;i<r.length;i+=1){const s=Al(r[i-1],t,n),a=Al(r[i],t,n);o+=Math.hypot(a[0]-s[0],a[1]-s[1])}return o}function Bv(e){return Array.isArray(e?.points)?e.points.filter(t=>t&&Number.isFinite(t.x)&&Number.isFinite(t.y)):[]}function MO(e){return Array.isArray(e?.fillPoints)?e.fillPoints.filter(t=>t&&Number.isFinite(t.x)&&Number.isFinite(t.y)):[]}function Vv(e){return e?.tool===Tr.FILL}function IO(e){return e?.tool===Tr.SURFACE_LINE&&!!e?.surfaceLine}function I6(e){return e?.tool===Tr.RECTANGLE||e?.tool===Tr.CIRCLE}function $v(e){return!!e&&e.tool!==Tr.ERASE&&e.tool!==Tr.FILL&&e.tool!==Tr.SURFACE_LINE}function N6(e){return e===Tr.LINE||e===Tr.SURFACE_LINE||e===Tr.ARROW||e===Tr.DOUBLE_ARROW||e===Tr.RECTANGLE||e===Tr.CIRCLE}function T6(e,t,n,r){if(Vv(t)){const l=Al(e,n,r),c=MO(t).map(f=>Al(f,n,r));if(c.length<3)return 1/0;if(CO(l,c))return 0;let u=1/0;for(let f=0;f<c.length;f+=1){const m=c[f],p=c[(f+1)%c.length];u=Math.min(u,xb(l,m,p))}return u}const o=Bv(t);if(!o.length)return 1/0;const i=Al(e,n,r),s=o.map(l=>Al(l,n,r));if(s.length===1){const l=s[0];return Math.hypot(i[0]-l[0],i[1]-l[1])}if(t.tool===Tr.RECTANGLE){const l=s[0],c=s[s.length-1],u=[[l[0],l[1]],[c[0],l[1]],[c[0],c[1]],[l[0],c[1]]];let f=1/0;for(let m=0;m<u.length;m+=1){const p=u[m],b=u[(m+1)%u.length];f=Math.min(f,xb(i,p,b))}return f}if(t.tool===Tr.CIRCLE){const l=s[0],c=s[s.length-1],u=Math.hypot(c[0]-l[0],c[1]-l[1]);return Math.abs(Math.hypot(i[0]-l[0],i[1]-l[1])-u)}let a=1/0;for(let l=1;l<s.length;l+=1){const c=s[l-1],u=s[l];a=Math.min(a,xb(i,c,u))}return a}const nN="#ef4444",rN="rgba(255, 255, 255, 0.94)",f0=4,oN=8,_6=18,R6=2.5,P6=4,O6=16,k6="rgba(239, 68, 68, 0.22)",D6="rgba(239, 68, 68, 0.16)",L6=420,iN=96,ES=28,Hd=72,NO=56,TO=.92,F6="#ef4444";function Kf(e,t,n){return Math.min(Math.max(e,t),n)}function m0(e,t,n=1e-4){return Math.abs(e[0]-t[0])<=n&&Math.abs(e[1]-t[1])<=n}function j6(e){let t=0;for(const n of Array.isArray(e)?e:[]){const r=/^stroke-(\d+)$/.exec(String(n?.id||""));if(!r)continue;const o=Number(r[1]);Number.isFinite(o)&&o>t&&(t=o)}return t}function z6(e,t){return[[e[0],e[1]],[t[0],e[1]],[t[0],t[1]],[e[0],t[1]]]}function B6(e,t,n=56){const r=Math.hypot(t[0]-e[0],t[1]-e[1]);if(r<1e-4)return[e];const o=Math.max(n,12),i=[];for(let s=0;s<=o;s+=1){const a=s/o*Math.PI*2;i.push([e[0]+Math.cos(a)*r,e[1]+Math.sin(a)*r])}return i}function V6(e,t,n){const r=Bv(e).map(o=>Al(o,t,n));if(r.length<2)return r;if(e.tool===Tr.RECTANGLE){const o=z6(r[0],r[r.length-1]);return[...o,o[0]]}return e.tool===Tr.CIRCLE?B6(r[0],r[r.length-1]):r}function sN(e,t,n,r){const o=n[0]-t[0],i=n[1]-t[1],s=Math.hypot(o,i);if(s<1)return;const a=o/s,l=i/s,c=Math.PI/7,u=Math.max(_6,r*3.25),f=Math.cos(c),m=Math.sin(c),p=[n[0]-u*(a*f-l*m),n[1]-u*(l*f+a*m)],b=[n[0]-u*(a*f+l*m),n[1]-u*(l*f-a*m)];e.beginPath(),e.moveTo(n[0],n[1]),e.lineTo(p[0],p[1]),e.moveTo(n[0],n[1]),e.lineTo(b[0],b[1]),e.stroke()}function $6(e,t,n){e.beginPath(),e.arc(t[0],t[1],n*.65,0,Math.PI*2),e.fill()}function G6(e,t){e.beginPath(),t.forEach((n,r)=>{if(r===0){e.moveTo(n[0],n[1]);return}e.lineTo(n[0],n[1])}),e.stroke()}function U6(e,t,n){const r=Math.min(t[0],n[0]),o=Math.min(t[1],n[1]),i=Math.abs(n[0]-t[0]),s=Math.abs(n[1]-t[1]);e.strokeRect(r,o,i,s)}function H6(e,t,n){const r=Math.hypot(n[0]-t[0],n[1]-t[1]);e.beginPath(),e.arc(t[0],t[1],r,0,Math.PI*2),e.stroke()}function W6(e,t,n,r,{color:o,alpha:i=1}){const s=MO(t);if(s.length<3)return;const a=s.map(l=>Al(l,n,r));e.save(),e.globalAlpha=i,e.fillStyle=o,e.beginPath(),a.forEach((l,c)=>{if(c===0){e.moveTo(l[0],l[1]);return}e.lineTo(l[0],l[1])}),e.closePath(),e.fill(),e.restore()}function kp(e,t,n,r,{color:o,lineWidth:i,alpha:s=1}){if(Vv(t))return;const a=Bv(t);if(!a.length)return;const l=a.map(c=>Al(c,n,r));if(e.save(),e.globalAlpha=s,e.strokeStyle=o,e.fillStyle=o,e.lineCap="round",e.lineJoin="round",e.lineWidth=i,l.length===1){$6(e,l[0],i),e.restore();return}if(t.tool===Tr.RECTANGLE){U6(e,l[0],l[l.length-1]),e.restore();return}if(t.tool===Tr.CIRCLE){H6(e,l[0],l[l.length-1]),e.restore();return}G6(e,l),(t.tool===Tr.ARROW||t.tool===Tr.DOUBLE_ARROW)&&sN(e,l[l.length-2],l[l.length-1],i),t.tool===Tr.DOUBLE_ARROW&&sN(e,l[1],l[0],i),e.restore()}function K6(e,t){if(typeof OffscreenCanvas<"u")return new OffscreenCanvas(e,t);const n=document.createElement("canvas");return n.width=e,n.height=t,n}function q6(e,t,n){if(!$v(e)||I6(e))return[];const r=V6(e,t,n);if(r.length<2)return[];const o=e?.tool===Tr.FREEHAND&&r.length>2;return[{strokeId:String(e?.id||""),point:r[0],allowSelfConnect:o},{strokeId:String(e?.id||""),point:r[r.length-1],allowSelfConnect:o}]}function Y6(e,t){if(!Array.isArray(e)||e.length<2||t<=0)return[];const n=[];for(let i=0;i<e.length;i+=1)for(let s=i+1;s<e.length;s+=1){const a=e[i],l=e[s];if(a.strokeId&&a.strokeId===l.strokeId&&!(a.allowSelfConnect&&l.allowSelfConnect))continue;const u=Math.hypot(a.point[0]-l.point[0],a.point[1]-l.point[1]);u<=t&&n.push({leftIndex:i,rightIndex:s,distance:u})}n.sort((i,s)=>i.distance-s.distance);const r=new Set,o=[];for(const i of n)r.has(i.leftIndex)||r.has(i.rightIndex)||(r.add(i.leftIndex),r.add(i.rightIndex),o.push([e[i.leftIndex].point,e[i.rightIndex].point]));return o}function aN(e,t,n,{gapPx:r=0,lineWidth:o=f0}={}){const s=K6(t,n).getContext("2d",{willReadFrequently:!0});if(!s)return null;s.clearRect(0,0,t,n);const a=Array.isArray(e)?e.filter($v):[];for(const u of a)kp(s,u,t,n,{color:"#000000",lineWidth:o,alpha:1});if(r>0){const u=Y6(a.flatMap(f=>q6(f,t,n)),Math.max(r,o*1.15));if(u.length){s.save(),s.strokeStyle="#000000",s.lineWidth=o,s.lineCap="round";for(const[f,m]of u)s.beginPath(),s.moveTo(f[0],f[1]),s.lineTo(m[0],m[1]),s.stroke();s.restore()}}const{data:l}=s.getImageData(0,0,t,n),c=new Uint8Array(t*n);for(let u=0;u<c.length;u+=1)c[u]=l[u*4+3]>20?1:0;return c}function _O(e,t,n,r,o,i=5){const s=Kf(Math.round(r),0,t-1),a=Kf(Math.round(o),0,n-1);for(let l=0;l<=i;l+=1){let c=null,u=1/0;for(let f=-l;f<=l;f+=1)for(let m=-l;m<=l;m+=1){const p=s+m,b=a+f;if(p<0||b<0||p>=t||b>=n||e[b*t+p])continue;const y=Math.hypot(m,f);y<u&&(u=y,c=[p,b])}if(c)return c}return null}function X6(e,t,n,r){const o=_O(e,t,n,r[0],r[1]);if(!o)return null;const i=new Uint8Array(t*n),s=new Int32Array(t*n);let a=0,l=0;const c=o[1]*t+o[0];s[l++]=c,i[c]=1;let u=0,f=!1;for(;a<l;){const m=s[a++];u+=1;const p=m%t,b=m/t|0;if((p===0||b===0||p===t-1||b===n-1)&&(f=!0),p>0){const y=m-1;!e[y]&&!i[y]&&(i[y]=1,s[l++]=y)}if(p+1<t){const y=m+1;!e[y]&&!i[y]&&(i[y]=1,s[l++]=y)}if(b>0){const y=m-t;!e[y]&&!i[y]&&(i[y]=1,s[l++]=y)}if(b+1<n){const y=m+t;!e[y]&&!i[y]&&(i[y]=1,s[l++]=y)}}return{mask:i,area:u,touchesEdge:f,seed:o}}function vE(e){let t=0;for(let n=0,r=e.length-1;n<e.length;r=n,n+=1)t+=e[r][0]*e[n][1]-e[n][0]*e[r][1];return t/2}function RO(e){const t=[];for(const n of e)(!t.length||!m0(t[t.length-1],n))&&t.push(n);return t.length>1&&m0(t[0],t[t.length-1])&&t.pop(),t}function Gv(e){const t=RO(e);if(t.length<3)return t;const n=[];for(let r=0;r<t.length;r+=1){const o=t[(r+t.length-1)%t.length],i=t[r],s=t[(r+1)%t.length],a=(i[0]-o[0])*(s[1]-i[1])-(i[1]-o[1])*(s[0]-i[0]);Math.abs(a)>1e-4&&n.push(i)}return n.length>=3?n:t}function PO(e,t=160){if(e.length<=t)return e;const n=e.length/t,r=[];let o=0;for(let i=0;i<t;i+=1)r.push(e[Math.floor(o)%e.length]),o+=n;return RO(r)}function lN(e){return`${e[0]},${e[1]}`}function Z6(e,t,n){const r=[],o=new Map,i=(l,c)=>{const u=r.length;r.push([l,c]);const f=lN(l),m=o.get(f);if(m){m.push(u);return}o.set(f,[u])};for(let l=0;l<n;l+=1)for(let c=0;c<t;c+=1)e[l*t+c]&&((l===0||!e[(l-1)*t+c])&&i([c,l],[c+1,l]),(c===t-1||!e[l*t+c+1])&&i([c+1,l],[c+1,l+1]),(l===n-1||!e[(l+1)*t+c])&&i([c+1,l+1],[c,l+1]),(c===0||!e[l*t+c-1])&&i([c,l+1],[c,l]));const s=new Uint8Array(r.length),a=[];for(let l=0;l<r.length;l+=1){if(s[l])continue;const c=[];let u=l,f=0;for(;u!==-1&&!s[u]&&f<r.length+4;){s[u]=1;const[m,p]=r[u];if(c.length||c.push(m),c.push(p),m0(p,c[0]))break;u=(o.get(lN(p))||[]).find(y=>!s[y])??-1,f+=1}if(c.length>=4&&m0(c[0],c[c.length-1])){const m=Gv(c.slice(0,-1));m.length>=3&&a.push(m)}}return a}function OO(e,t,n){return e.map(r=>({x:Kf(r[0]/t,0,1),y:Kf(r[1]/n,0,1)}))}function J6(e,t,n,r){const o=Z6(e,t,n);if(!o.length)return null;const i=[r[0]+.5,r[1]+.5],s=o.filter(u=>CO(i,u)),l=(s.length?s:o).reduce((u,f)=>u?Math.abs(vE(f))>Math.abs(vE(u))?f:u:f,null);if(!l)return null;const c=PO(Gv(l));return c.length>=3?OO(c,t,n):null}function cN(e,t,n){for(let r=1;r<e.length;r+=1){const o=(t+n*r+e.length)%e.length;if(Number.isFinite(e[o]))return{value:e[o],offset:r}}return null}function Q6(e,t,n,r){const o=_O(e,t,n,r[0],r[1]);if(!o)return null;const i=Math.hypot(t,n),s=Array.from({length:Hd},()=>null);for(let y=0;y<Hd;y+=1){const x=y/Hd*Math.PI*2,S=Math.cos(x),E=Math.sin(x);for(let C=1;C<i;C+=1){const A=Math.round(o[0]+S*C),N=Math.round(o[1]+E*C);if(A<0||N<0||A>=t||N>=n)break;if(e[N*t+A]){s[y]=Math.max(C-1.5,1);break}}}const a=s.filter(Number.isFinite);if(a.length<Math.max(12,Math.floor(Hd/4)))return null;const l=[...a].sort((y,x)=>y-x),c=l[Math.floor(l.length/2)]||1;let f=s.map((y,x)=>{if(Number.isFinite(y))return y;const S=cN(s,x,-1),E=cN(s,x,1);if(S&&E){const C=S.offset+E.offset;return(S.value*E.offset+E.value*S.offset)/Math.max(C,1)}return S?S.value:E?E.value:c});for(let y=0;y<2;y+=1)f=f.map((x,S)=>{const E=f[(S+f.length-1)%f.length],C=f[(S+1)%f.length];return(E+x*2+C)/4});const m=f.map((y,x)=>{const S=x/Hd*Math.PI*2;return[Kf(o[0]+Math.cos(S)*y,0,t),Kf(o[1]+Math.sin(S)*y,0,n)]}),p=PO(Gv(m),Hd);if(p.length<3)return null;const b=Math.abs(vE(p));return b<NO||b>t*n*TO?null:OO(p,t,n)}function eW(e,t,n){const r=Array.isArray(t)?t.filter($v):[];if(!r.length)return null;const o=n.width||1,i=n.height||1,s=Math.max(o,i,1),a=Math.min(1,L6/s),l=Math.max(iN,Math.round(o*a)),c=Math.max(iN,Math.round(i*a)),u=[e.x*(l-1),e.y*(c-1)],f=Math.max(3,f0*a+3),m=[{gapPx:0,guessed:!1},{gapPx:ES*.45*a,guessed:!0},{gapPx:ES*a,guessed:!0}];for(const y of m){const x=aN(r,l,c,{gapPx:y.gapPx,lineWidth:f});if(!x)continue;const S=X6(x,l,c,u);if(!S||S.area<NO||S.touchesEdge||S.area>l*c*TO)continue;const E=J6(S.mask,l,c,S.seed);if(E?.length>=3)return{tool:Tr.FILL,points:[e],fillPoints:E,guessed:y.guessed}}const p=aN(r,l,c,{gapPx:ES*a,lineWidth:f});if(!p)return null;const b=Q6(p,l,c,u);return!b?.length||b.length<3?null:{tool:Tr.FILL,points:[e],fillPoints:b,guessed:!0}}function uN(e,t,n=null){if(!e)return;const r=e.getContext("2d");if(!r)return;const o=e.width,i=e.height;r.clearRect(0,0,o,i);const s=Array.isArray(t)?t:[];for(const a of s)Vv(a)&&W6(r,a,o,i,{color:a?.guessed?D6:k6,alpha:1});for(const a of s)IO(a)||(kp(r,a,o,i,{color:rN,lineWidth:oN}),kp(r,a,o,i,{color:nN,lineWidth:f0}));n&&(kp(r,n,o,i,{color:rN,lineWidth:oN,alpha:.78}),kp(r,n,o,i,{color:nN,lineWidth:f0,alpha:.9}))}const tW=5e5;function nW(e,t=1){return(Array.isArray(e)||ArrayBuffer.isView(e))&&e.length>=t&&e.length%t===0}function rW(e,{triangleLimit:t=tW}={}){return nW(e?.edge_indices,2)?!0:Math.floor((e?.indices?.length||0)/3)<=t}function oW({edgesVisible:e=!1,topologyDisplayEdgesVisible:t=!1,displayEdgesVisible:n=!1,wireframeMode:r=!1}={}){return!!(e&&!t&&(n||r))}const Cc=100,Mc=50,iW="#38bdf8",sW="#1e3a8a",aW="#bae6fd",lW=3.25,cW=.155,uW=.238;function Sb(e,t,n){return Math.min(Math.max(e,t),n)}function dW(e){const t=Array.isArray(e?.center)?e.center:[0,0,0],n=[Number(t[0]),Number(t[1]),Number(t[2])];return n.every(Number.isFinite)?n:[0,0,0]}function fW(e,t){if(!e?.THREE||!e?.modelGroup)return null;const{THREE:n}=e;e.modelGroup.updateMatrixWorld(!0);const r=e.controls?.target;if(r&&Number.isFinite(r.x)&&Number.isFinite(r.y)&&Number.isFinite(r.z))return r.clone();const o=dW(t),i=new n.Vector3(...o);return e.modelGroup.localToWorld(i),i}function ma(e,t){if(!e?.THREE||!e?.camera||!e?.modelGroup)return null;const n=fW(e,t);if(!n)return null;const r=e.modelGroup.worldToLocal(n.clone()),o=[r.x,r.y,r.z],i=e.camera.position.distanceTo(n),s=Math.max(Number(e.modelRadius||0),.08),a=Math.max(s*.12,.025),l=Math.max(s*3.2,a*3),c=Sb(i*uW,a,l),u=i>1e-4?Math.min(c,i*.92):c;return{centerLocal:o,centerWorld:n,radius:u}}function kO(e,t,n=e?.raycaster?.ray){if(!e?.THREE||!e?.modelGroup||!n)return null;const r=ma(e,t);if(!r)return null;const{THREE:o}=e,i=new o.Vector3,s=new o.Sphere(r.centerWorld,r.radius);if(!n.intersectSphere(s,i))return null;const a=e.modelGroup.worldToLocal(i.clone());return{point:[a.x,a.y,a.z],source:"sphere"}}function mW(e,t,n){if(!e?.THREE||!e?.camera||!n)return null;const{THREE:r}=e,o=new r.Vector3;e.camera.getWorldPosition(o);const s=new r.Vector3(Number(n.x)||0,Number(n.y)||0,.5).unproject(e.camera).sub(o).normalize();return kO(e,t,new r.Ray(o,s))}function qf(e){return e?`${e.x}:${e.y}`:""}function Vc(e){return e&&Number.isInteger(e.x)&&Number.isInteger(e.y)&&e.x>=0&&e.x<Cc&&e.y>=0&&e.y<Mc}function pW(e,t,n){if(!e?.THREE||!e?.camera||!e?.modelGroup||!Array.isArray(n)||n.length<3)return null;const r=ma(e,t);if(!r)return null;const{THREE:o}=e,i=new o.Vector3(Number(n[0]),Number(n[1]),Number(n[2]));if(![i.x,i.y,i.z].every(Number.isFinite))return null;e.modelGroup.updateMatrixWorld(!0),e.modelGroup.localToWorld(i);const s=i.sub(r.centerWorld);if(s.lengthSq()<=1e-12)return null;s.normalize();let a=Math.atan2(s.z,-s.x);a<0&&(a+=Math.PI*2);const l=Math.acos(Sb(s.y,-1,1)),c=Sb(a/(Math.PI*2),0,.999999),u=Sb(l/Math.PI,0,.999999);return{x:Math.floor(c*Cc),y:Math.floor(u*Mc)}}function Yf(e,t){const n=mW(e,t,e?.urdfPosePickerPointerNdc);return n?.point?pW(e,t,n.point):null}function Dp(e,t,n){const r=t*Math.PI*2,o=n*Math.PI,i=Math.sin(o);return new e.Vector3(-Math.cos(r)*i,Math.cos(o),Math.sin(r)*i)}function Nc(e,t,n,r){return Dp(e,(t.x+n)/Cc,(t.y+r)/Mc)}function hW(e){const t=[],n=o=>{t.push(o.x,o.y,o.z)};for(let o=1;o<Mc;o+=1){const i=o/Mc;for(let s=0;s<Cc;s+=1)n(Dp(e,s/Cc,i)),n(Dp(e,(s+1)/Cc,i))}for(let o=0;o<Cc;o+=1){const i=o/Cc;for(let s=0;s<Mc;s+=1)n(Dp(e,i,s/Mc)),n(Dp(e,i,(s+1)/Mc))}const r=new e.BufferGeometry;return r.setAttribute("position",new e.BufferAttribute(new Float32Array(t),3)),r}function Eb(e,t){if(!e?.THREE||!Vc(t))return null;const{THREE:n}=e,r=1.0015,o=[Nc(n,t,0,0),Nc(n,t,1,0),Nc(n,t,1,1),Nc(n,t,0,1)].map(s=>s.multiplyScalar(r)),i=new n.BufferGeometry;return i.setAttribute("position",new n.BufferAttribute(new Float32Array([o[0].x,o[0].y,o[0].z,o[1].x,o[1].y,o[1].z,o[2].x,o[2].y,o[2].z,o[0].x,o[0].y,o[0].z,o[2].x,o[2].y,o[2].z,o[3].x,o[3].y,o[3].z]),3)),i.computeVertexNormals(),i}function wb(e,t){if(!e?.THREE||!Vc(t))return null;const{THREE:n}=e,r=1.0045,o=[Nc(n,t,0,0),Nc(n,t,1,0),Nc(n,t,1,1),Nc(n,t,0,1)].map(i=>i.multiplyScalar(r));return new Float32Array([o[0].x,o[0].y,o[0].z,o[1].x,o[1].y,o[1].z,o[1].x,o[1].y,o[1].z,o[2].x,o[2].y,o[2].z,o[2].x,o[2].y,o[2].z,o[3].x,o[3].y,o[3].z,o[3].x,o[3].y,o[3].z,o[0].x,o[0].y,o[0].z])}function gW(e,t){const n=ma(e,t);if(!e?.THREE||!n)return null;const{THREE:r}=e,o=hW(r),i=new r.LineBasicMaterial({color:iW,transparent:!0,opacity:cW,depthTest:!1,depthWrite:!1,toneMapped:!1}),s=new r.LineSegments(o,i);return s.position.set(...n.centerLocal),s.scale.setScalar(n.radius),s.renderOrder=28,s.frustumCulled=!1,s.onBeforeRender=()=>{const a=ma(e,t);a&&(s.position.set(...a.centerLocal),s.scale.setScalar(a.radius))},s.userData.disposeGeometry=!0,s.userData.disposeMaterial=!0,s}function yW(e,t){const n=ma(e,t),r=Yf(e,t),o=Eb(e,r)||Eb(e,{x:0,y:0});if(!e?.THREE||!n||!o)return null;const{THREE:i}=e,s=new i.MeshBasicMaterial({color:sW,transparent:!1,opacity:1,side:i.DoubleSide,blending:i.NoBlending,depthTest:!1,depthWrite:!1,toneMapped:!1}),a=new i.Mesh(o,s);return a.position.set(...n.centerLocal),a.scale.setScalar(n.radius),a.renderOrder=80,a.frustumCulled=!1,a.visible=Vc(r),a.userData.lastHoverCellKey=qf(r),e.urdfPosePickerHoverCellMesh=a,a.onBeforeRender=()=>{const l=ma(e,t),c=Yf(e,t),u=qf(c);if(a.visible=Vc(c),!(!l||!a.visible)){if(a.position.set(...l.centerLocal),a.scale.setScalar(l.radius),a.userData.lastHoverCellKey!==u){const f=Eb(e,c);if(!f)return;a.geometry?.dispose?.(),a.geometry=f}a.userData.lastHoverCellKey=u}},a.userData.disposeGeometry=!0,a.userData.disposeMaterial=!0,a}function bW(e,t){const n=ma(e,t),r=Yf(e,t),o=wb(e,r)||wb(e,{x:0,y:0});if(!e?.THREE||!n||!o)return null;const i=$u(e,o,{color:aW,opacity:.98,lineWidth:lW,renderOrder:82,depthTest:!1,depthWrite:!1});return i?(i.position.set(...n.centerLocal),i.scale.setScalar(n.radius),i.visible=Vc(r),i.userData.lastHoverCellKey=qf(r),e.urdfPosePickerHoverCellOutline=i,i.onBeforeRender=()=>{const s=ma(e,t),a=Yf(e,t),l=qf(a);if(i.visible=Vc(a),!(!s||!i.visible)){if(i.position.set(...s.centerLocal),i.scale.setScalar(s.radius),i.userData.lastHoverCellKey!==l){const c=wb(e,a);if(!c)return;i.geometry?.setPositions?.(c),i.geometry?.computeBoundingSphere?.()}i.userData.lastHoverCellKey=l}},i):null}function xW(e,t,n){if(!e?.THREE||!t)return!1;const r=ma(e,n),o=Yf(e,n),i=qf(o);if(t.visible=Vc(o),!r||!t.visible)return t.userData.lastHoverCellKey="",!1;if(t.position.set(...r.centerLocal),t.scale.setScalar(r.radius),t.userData.lastHoverCellKey===i)return!0;const s=Eb(e,o);return s?(t.geometry?.dispose?.(),t.geometry=s,t.userData.lastHoverCellKey=i,!0):(t.visible=!1,t.userData.lastHoverCellKey="",!1)}function SW(e,t,n){if(!e?.THREE||!t)return!1;const r=ma(e,n),o=Yf(e,n),i=qf(o);if(t.visible=Vc(o),!r||!t.visible)return t.userData.lastHoverCellKey="",!1;if(t.position.set(...r.centerLocal),t.scale.setScalar(r.radius),t.userData.lastHoverCellKey===i)return!0;const s=wb(e,o);return s?(t.geometry?.setPositions?.(s),t.geometry?.computeBoundingSphere?.(),t.userData.lastHoverCellKey=i,!0):(t.visible=!1,t.userData.lastHoverCellKey="",!1)}function my(e,t){const n=xW(e,e?.urdfPosePickerHoverCellMesh,t),r=SW(e,e?.urdfPosePickerHoverCellOutline,t);return n||r}const tr={sceneBackground:"#09090b",surface:"#f4f4f5",surfaceRoughness:.92,surfaceMetalness:.03,surfaceClearcoat:0,surfaceClearcoatRoughness:.6,edge:"#18181b",edgeThickness:1,edgeOpacity:.84,selected:"#2563eb",hover:"#0ea5e9",gridCenter:"#3f3f46",gridCell:"#27272a",gridOpacity:.16,stageFloorColor:"#141416",stageFloorOpacity:.78,stageFloorRoughness:.92,stageFloorMetalness:0,stageFloorTransmission:0,stageFloorIor:1.35,stageFloorThickness:.035,stageFloorAttenuationDistance:4,viewPlanePalette:{axis:{x:{front:[250,88,79],back:[122,32,28]},y:{front:[92,233,123],back:[30,99,46]},z:{front:[84,131,255],back:[30,53,126]}},center:{fill:[252,215,74],stroke:[255,235,153]},shell:{inner:[24,31,48],outer:[8,12,20],stroke:[148,163,184]}}},Ba={SOLID:"solid",LINEAR:"linear",RADIAL:"radial",TRANSPARENT:"transparent"},Oh=/^#(?:[0-9a-fA-F]{3}){1,2}$/,dN=1024,wS=512,EW=3,fN="#dbeafe",mN="#111827";function er(e,t,n){return Math.min(Math.max(e,t),n)}function nx(e,t=""){const n=String(e||"").trim();return Oh.test(n)?n.length===4?`#${n[1]}${n[1]}${n[2]}${n[2]}${n[3]}${n[3]}`.toLowerCase():n.toLowerCase():t}function vS(e){const t=e/255;return t<=.03928?t/12.92:((t+.055)/1.055)**2.4}function pN(e){const t=nx(e,"#000000"),n=parseInt(t.slice(1,3),16),r=parseInt(t.slice(3,5),16),o=parseInt(t.slice(5,7),16);return .2126*vS(n)+.7152*vS(r)+.0722*vS(o)}function wW(e,t){const n=pN(e),r=pN(t),o=Math.max(n,r),i=Math.min(n,r);return(o+.05)/(i+.05)}function AS(e,t){const n=t.map(r=>nx(r,"")).filter(Boolean);return n.length?Math.min(...n.map(r=>wW(e,r))):1/0}function vW(e={},t=tr){const n=e?.background||{},r=String(n.type||"").trim().toLowerCase(),o=[];r===Ba.LINEAR?o.push(n.linearStart,n.linearEnd):r===Ba.RADIAL?o.push(n.radialInner,n.radialOuter):r===Ba.SOLID&&o.push(n.solidColor);const i=o.map(s=>nx(s,"")).filter(Boolean);return i.length?i:[t?.sceneBackground,tr.sceneBackground]}function AW({edgeColor:e="",themeSettings:t={},viewerTheme:n=tr,minimumContrastRatio:r=EW}={}){const o=nx(e,""),i=vW(t,n);return o&&AS(o,i)>=r?o:AS(fN,i)>=AS(mN,i)?fN:mN}function DO(e,t,n){return e?.[t]??tr[t]??n}function xu(e,t,n){const r=Number(DO(e,t,n));return Number.isFinite(r)?r:n}function CW(e,t=gr.STAGE){const n=String(e||"").trim().toLowerCase();return n==="glass"?gr.STAGE:Object.values(gr).includes(n)?n:t}function LO(e){return Array.isArray(e)?e.filter(Boolean):e?[e]:[]}function Fu(e,t,n=1){const r=new e.Color(t||"#000000");return`rgba(${Math.round(r.r*255)}, ${Math.round(r.g*255)}, ${Math.round(r.b*255)}, ${er(n,0,1)})`}function MW(e){const t=LO(e);return t.length?t.map((n,r)=>{if(typeof n=="string")return{offset:t.length===1?0:r/(t.length-1),color:n};const o=t.length===1?0:r/(t.length-1),i=Number(n?.offset);return{offset:Number.isFinite(i)?er(i,0,1):o,color:n?.color||n?.value||"#000000"}}).sort((n,r)=>n.offset-r.offset):[]}function IW(e,t,n=null){const r=String(n?.type||"").trim().toLowerCase(),o=!!r,i=o?r===Ba.LINEAR?[{offset:0,color:n.linearStart||"#000000"},{offset:1,color:n.linearEnd||"#ffffff"}]:r===Ba.RADIAL?[{offset:0,color:n.radialInner||"#000000"},{offset:1,color:n.radialOuter||"#ffffff"}]:[]:MW(t?.sceneBackgroundGradient),s=o?[]:LO(t?.sceneBackgroundGlow);if(!i.length&&!s.length)return null;const a=document.createElement("canvas");a.width=dN,a.height=dN;const l=a.getContext("2d");if(!l)return null;if(l.fillStyle=o?n.solidColor||tr.sceneBackground:t?.sceneBackground||tr.sceneBackground,l.fillRect(0,0,a.width,a.height),i.length)if(r===Ba.RADIAL){const u=l.createRadialGradient(a.width/2,a.height/2,a.width*.1,a.width/2,a.height/2,a.width*.75);for(const f of i)u.addColorStop(f.offset,f.color);l.fillStyle=u,l.fillRect(0,0,a.width,a.height)}else{const f=(Number.isFinite(Number(n?.linearAngle))?Number(n.linearAngle):180)*Math.PI/180,m=a.width/2,p=a.height/2,b=Math.max(a.width,a.height),y=m-Math.cos(f)*b,x=p-Math.sin(f)*b,S=m+Math.cos(f)*b,E=p+Math.sin(f)*b,C=l.createLinearGradient(y,x,S,E);for(const A of i)C.addColorStop(A.offset,A.color);l.fillStyle=C,l.fillRect(0,0,a.width,a.height)}for(const u of s){const f=Number(u?.x),m=Number(u?.y),p=Number.isFinite(f)?er(f,0,1):.5,b=Number.isFinite(m)?er(m,0,1):.5,y=Math.max(Number(u?.radius)||0,.08),x=er(Number(u?.opacity)||0,0,1);if(x<=0)continue;const S=a.width*p,E=a.height*b,C=a.width*y,A=l.createRadialGradient(S,E,0,S,E,C);A.addColorStop(0,Fu(e,u?.color||"#ffffff",x)),A.addColorStop(.5,Fu(e,u?.color||"#ffffff",x*.3)),A.addColorStop(1,Fu(e,u?.color||"#ffffff",0)),l.fillStyle=A,l.fillRect(0,0,a.width,a.height)}const c=new e.CanvasTexture(a);return c.colorSpace=e.SRGBColorSpace,c.minFilter=e.LinearFilter,c.magFilter=e.LinearFilter,c.generateMipmaps=!1,c}function ih(e){e?.dispose?.()}function NW(e,t,n=null){if(!(!e?.THREE||!e?.scene)){if(String(n?.type||"").toLowerCase()===Ba.TRANSPARENT){ih(e.sceneBackgroundTexture),e.sceneBackgroundTexture=null,e.scene.background=null,e.renderer?.setClearAlpha?.(0);return}if(e.renderer?.setClearAlpha?.(1),ih(e.sceneBackgroundTexture),e.sceneBackgroundTexture=IW(e.THREE,t,n),e.sceneBackgroundTexture){e.scene.background=e.sceneBackgroundTexture;return}e.scene.background=new e.THREE.Color(n?.solidColor||t.sceneBackground||tr.sceneBackground)}}function oa(e,t,n="#000000"){const r=String(t||"").trim(),o=String(n||"#000000").trim(),i=Oh.test(r)?r:o;try{return new e.Color(i)}catch{return new e.Color(Oh.test(o)?o:"#000000")}}function TW(e,t={},n=tr){const r=n?.stageFloorColor||n?.sceneBackground||tr.stageFloorColor,o=String(t?.type||"").trim().toLowerCase();return o===Ba.LINEAR?oa(e,t.linearStart,r).lerp(oa(e,t.linearEnd,r),.7):o===Ba.RADIAL?oa(e,t.radialInner,r).lerp(oa(e,t.radialOuter,r),.72):o===Ba.SOLID?oa(e,t.solidColor,r):oa(e,r,tr.stageFloorColor)}function FO(e={}){const t=e?.materials||{},n=e?.environment||{},r=er(Number(t.roughness)||0,0,1),o=er(Number(t.clearcoat)||0,0,1),i=n?.enabled?er((Number(t.envMapIntensity)||0)*(Number(n.intensity)||0)/3,0,1):0;return er(o*.5+(1-r)*.25+i*.35,0,1)}function _W(e,t,n={}){const r=String(n?.floor?.color||"").trim();if(Oh.test(r))return oa(e,r,t?.stageFloorColor||tr.stageFloorColor);const o=TW(e,n?.background,t),i=FO(n);if(i>=.35){const m={};o.getHSL(m);const p=o.clone(),b=m.l<.42?er(m.l+.012,.06,.14):er(m.l-.045,.36,.78);return p.setHSL(m.h,er(m.s*.14,0,.04),b),p}const s=oa(e,n?.lighting?.hemisphere?.groundColor,t?.stageFloorColor||tr.stageFloorColor),a=oa(e,n?.materials?.defaultColor,"#ffffff"),l=o.clone().lerp(s,.42-i*.24).lerp(a,.07-i*.04).lerp(o,i*.5),c={},u={};l.getHSL(c),o.getHSL(u);const f=u.l<.42?er(Math.max(c.l,u.l+(.055-i*.035)),.1-i*.04,.34-i*.13):er(Math.min(c.l,u.l-.075),.38,.78);return l.setHSL(c.h,er(c.s*(.58-i*.2),.025,.38),f),l}function Of(e,t,n,r=0,o=1){const i=Number(e?.floor?.[t]);return Number.isFinite(i)?er(i,r,o):n}function RW(e,t,n){const r=er(Number(n)||0,0,1);if(r<=.001||typeof document>"u")return null;const o=document.createElement("canvas");o.width=wS,o.height=wS;const i=o.getContext("2d");if(!i)return null;const s=wS/2,a=i.createRadialGradient(s,s,0,s,s,s);a.addColorStop(0,Fu(e,t,r)),a.addColorStop(.28,Fu(e,t,r*.56)),a.addColorStop(.62,Fu(e,t,r*.16)),a.addColorStop(1,Fu(e,t,0)),i.fillStyle=a,i.fillRect(0,0,o.width,o.height);const l=new e.CanvasTexture(o);return l.colorSpace=e.SRGBColorSpace,l.minFilter=e.LinearFilter,l.magFilter=e.LinearFilter,l.generateMipmaps=!1,l}function PW(e,t,n=Xr.CAD){const r=ya(n),o=Math.max(Number(e)||0,r.minModelRadius);return Math.min(Math.max(Number(t)||0,0)*.24,o*8)}function OW(e,t,n,r,o,i=0){const s=FO(n),a=Of(n,"horizonBlend",0,0,1),l=Of(n,"reflectivity",.12,0,1),c=_W(e,t,n),u=Of(n,"roughness",er(xu(t,"stageFloorRoughness",.92)-s*.48,.16,1),0,1),f=a<=.001?1:er((xu(t,"stageFloorOpacity",.78)-s*.02)*(1-a*.3),.62,1),m={};c.getHSL(m);const p=m.l<.18,b=p?c.clone().lerp(new e.Color("#1c5f8f"),.5):new e.Color("#ffffff"),y=p?er(l*.38,0,.06):er(l*1.4,.04,.36),x=p?er(l*.22,0,.05):er(l*.58+s*.12,0,.9),S=p?er(Math.max(u*.95,.35),.35,.85):er(u*.62,.04,.8),E=er(Number(n?.materials?.envMapIntensity||0)*(n?.environment?.enabled?Number(n?.environment?.intensity||0):0)*(.08+s*.1)+l*.48,0,1.15),C=new e.MeshPhysicalMaterial({color:c,roughness:u,metalness:er(xu(t,"stageFloorMetalness",0)+l*.06,0,.18),clearcoat:x,clearcoatRoughness:S,reflectivity:l,specularColor:b,specularIntensity:y,transmission:er(xu(t,"stageFloorTransmission",tr.stageFloorTransmission)+s*.005,0,.02),ior:xu(t,"stageFloorIor",tr.stageFloorIor),thickness:xu(t,"stageFloorThickness",tr.stageFloorThickness),attenuationDistance:xu(t,"stageFloorAttenuationDistance",tr.stageFloorAttenuationDistance),transparent:f<.999,opacity:f,side:e.FrontSide,depthWrite:f>=.999,envMapIntensity:E}),A=new e.Mesh(new e.PlaneGeometry(1,1,1,1),C);return A.position.set(0,0,o+i),A.scale.set(r,r,1),A.receiveShadow=!1,A.castShadow=!1,A.renderOrder=-3,A}function kW(e,t,n,r,o,i,s=.008){const a=t?.lighting?.spot||{};if(a.enabled===!1)return null;const l=Of(t,"reflectivity",.12,0,1),c=Of(t,"shadowOpacity",.45,0,1),u=Math.max(Number(a.intensity)||0,0),f=er(.025+u*.11+l*.32-c*.06,0,.36),m=RW(e,a.color||"#ffffff",f);if(!m)return null;const p=PW(n,r,i),b=new e.MeshBasicMaterial({map:m,transparent:!0,opacity:1,depthWrite:!1,blending:e.AdditiveBlending,side:e.FrontSide,toneMapped:!0}),y=new e.Mesh(new e.PlaneGeometry(1,1,1,1),b);return y.position.set(0,0,o+s),y.scale.set(p*1.45,p,1),y.receiveShadow=!1,y.castShadow=!1,y.renderOrder=-2.8,y}function DW(e,t,n,r,o=.01){const i=Of(t,"shadowOpacity",.45,0,1);if(i<=.001)return null;const s=new e.ShadowMaterial({color:0,opacity:i,transparent:!0,depthWrite:!1}),a=new e.Mesh(new e.PlaneGeometry(1,1,1,1),s);return a.position.set(0,0,r+o),a.scale.set(n,n,1),a.receiveShadow=!0,a.castShadow=!1,a.renderOrder=-2,a}function ip(e){if(!e?.spotLight?.target?.position)return;const t=Number(e.gridFloorZ),n=e.floorMode!==gr.NONE&&Number.isFinite(t)?t:0;e.spotLight.target.position.set(0,0,n),e.spotLight.target.updateMatrixWorld?.()}function LW(e,t=Xr.CAD){const n=ya(t),r=ld(e,t);return Math.max(n.minGridSize*80,r*160)}const Ju=1.04,wf=1e-6;function Br(e,t=0){const n=Number(e);return Number.isFinite(n)?n:t}function AE(e){return String(e||"").trim()}function FW(e,t){const n=AE(e);if(!t?.size||t.has("__model__"))return!0;if(!n)return!1;for(const r of t){const o=AE(String(r||"").startsWith("#")?String(r||"").slice(1):r);if(n===o||n.startsWith(`${o}.`))return!0}return!1}function rx(e){return Array.isArray(e?.min)&&Array.isArray(e?.max)&&e.min.length>=3&&e.max.length>=3}function jO(e){return e?.isVector3?[e.x,e.y,e.z]:Array.isArray(e)||ArrayBuffer.isView(e)?[Br(e[0]),Br(e[1]),Br(e[2])]:[0,0,0]}function hN(e,t){if(!t)return null;const[n,r,o]=jO(t),i=new e.Vector3(n,r,o);return i.lengthSq()>wf?i.normalize():null}function kh(e=[]){const t=[1/0,1/0,1/0],n=[-1/0,-1/0,-1/0];let r=0;for(const o of Array.isArray(e)?e:[])if(rx(o)){r+=1;for(let i=0;i<3;i+=1)t[i]=Math.min(t[i],Br(o.min[i])),n[i]=Math.max(n[i],Br(o.max[i]))}return r>0&&t.every(Number.isFinite)&&n.every(Number.isFinite)?{min:t,max:n}:null}function jW(e,t=null){if(!rx(e))return null;const n=jO(t);return{min:e.min.slice(0,3).map((r,o)=>Br(r)+n[o]),max:e.max.slice(0,3).map((r,o)=>Br(r)+n[o])}}function zW(e=[],{partIds:t=null,translationByRecord:n=null}={}){const r=t instanceof Set&&t.size>0?t:null,o=[];for(const i of Array.isArray(e)?e:[]){if(!i||!rx(i.partBounds))continue;const s=AE(i.partId);if(r&&!FW(s,r))continue;const a=n instanceof Map?n.get(i):null;o.push(jW(i.partBounds,a))}return kh(o)}function BW(e,t,{offset:n=null}={}){if(!e?.Vector3||!rx(t))return null;const r=new e.Vector3((Br(t.min[0])+Br(t.max[0]))/2,(Br(t.min[1])+Br(t.max[1]))/2,(Br(t.min[2])+Br(t.max[2]))/2);n?.isVector3&&r.add(n);const o=new e.Vector3(Math.max(Br(t.max[0])-Br(t.min[0]),0),Math.max(Br(t.max[1])-Br(t.min[1]),0),Math.max(Br(t.max[2])-Br(t.min[2]),0)).length()/2;return{center:r,radius:o}}function VW(e,t,{aspect:n=e?.aspect||1,minRadius:r=0,padding:o=Ju}={}){const i=Math.max(Br(e?.fov,48),wf),s=Math.max(Br(t)*Math.max(Br(o,Ju),wf),Br(r)),a=i*Math.PI/360,l=Math.atan(Math.tan(a)*Math.max(Br(n,1),wf)),c=Math.max(Math.min(a,l),wf);return s/Math.sin(c)}function $W(e,{camera:t,controls:n,bounds:r,modelOffset:o=null,frameAspect:i=t?.aspect||1,minRadius:s=0,padding:a=Ju,defaultDirection:l=[2.1,-1.65,1.08],viewDirection:c=null,viewUp:u=null}={}){if(!e?.Vector3||!t||!n)return null;const f=BW(e,r,{offset:o});if(!f||!Number.isFinite(f.radius))return null;const m=t.position.clone().sub(n.target),p=hN(e,c)||(m.lengthSq()>wf?m.normalize():new e.Vector3(...l).normalize()),b=hN(e,u)||t.up.clone(),y=VW(t,f.radius,{aspect:i,minRadius:s,padding:a}),x=f.center.clone().add(p.multiplyScalar(y));return{center:f.center,radius:f.radius,distance:y,position:x,target:f.center.clone(),up:b,zoom:t.zoom}}const GW=28,UW=1.25;function p0(e,t,n){return Math.min(Math.max(e,t),n)}function HW(e){const t=Number(e);return Number.isFinite(t)?p0(t,Mv,Iv):dE.density}function WW(e={},t={}){const n=t?.grid||{};return{centerColor:n?.centerColor||t?.gridCenterColor||t?.gridCenter||e?.gridCenter||tr.gridCenter,cellColor:n?.cellColor||t?.gridCellColor||t?.gridCell||e?.gridCell||tr.gridCell,opacity:Number.isFinite(Number(n?.opacity))?p0(Number(n.opacity),0,1):Number.isFinite(Number(t?.gridOpacity))?p0(Number(t.gridOpacity),0,1):e?.gridOpacity??tr.gridOpacity}}function KW(e,t,n={}){const r=HW(n?.grid?.density??n?.gridDensity),o=ld(e,t),i=UW*r,s=o*2*Ju/i;let a=Math.max(2,Math.round(GW*r));return a%2!==0&&(a+=1),{size:s*a,cellSize:s,divisions:a}}function qW(e,t,n,r=0,o=Xr.CAD,i=gr.STAGE,{disposeSceneObject:s=()=>{},floorSettings:a={}}={}){if(!e?.THREE||!e?.scene)return;e.gridRadius=n,e.gridFloorZ=r;const l=a?.grid?.enabled===!0||i===gr.GRID;if(e.floorMode=l?gr.GRID:i,!l){s(e.gridHelper),e.gridHelper=null,e.gridConfig=null;return}const c={...KW(n,o,a),...WW(t,a)},u=e.gridConfig;if(u&&u.size===c.size&&u.cellSize===c.cellSize&&u.divisions===c.divisions&&u.centerColor===c.centerColor&&u.cellColor===c.cellColor&&u.opacity===c.opacity){e.gridHelper&&(e.gridHelper.rotation.x=Math.PI/2),e.gridHelper?.position.set(0,0,r);return}s(e.gridHelper),e.gridHelper=new e.THREE.GridHelper(c.size,c.divisions,c.centerColor,c.cellColor);const f=Array.isArray(e.gridHelper.material)?e.gridHelper.material:[e.gridHelper.material];for(const m of f)m.transparent=!0,m.opacity=c.opacity,m.depthWrite=!1,m.toneMapped=!1;e.gridHelper.rotation.x=Math.PI/2,e.gridHelper.position.set(0,0,r),e.scene.add(e.gridHelper),e.gridConfig=c}function YW(e,t={},n={}){const r=n?.axis||{};return{color:r.color||n?.grid?.centerColor||t?.gridCenter||tr.gridCenter,opacity:p0(Number.isFinite(Number(r.opacity))?Number(r.opacity):e0.opacity,0,1),length:Math.max(e,1)*E4}}function XW(e,t,n,r=0,{disposeSceneObject:o=()=>{},floorSettings:i={}}={}){if(!e?.THREE||!e?.scene)return;const s=e.THREE;if(i?.axis?.enabled!==!0){o(e.originAxis),e.originAxis=null,e.originAxisConfig=null;return}const a=YW(n,t,i),l=e.originAxisConfig;if(e.originAxis&&l&&l.color===a.color&&l.opacity===a.opacity&&l.length===a.length){e.originAxis.position.set(0,0,r);return}o(e.originAxis);const c=new s.BufferGeometry().setFromPoints([new s.Vector3(0,0,-a.length),new s.Vector3(0,0,a.length)]),u=new s.LineBasicMaterial({color:a.color,transparent:!0,opacity:a.opacity,depthWrite:!1,toneMapped:!1});e.originAxis=new s.Line(c,u),e.originAxis.position.set(0,0,r),e.scene.add(e.originAxis),e.originAxisConfig=a}function Ls(e,t,n){return Math.min(Math.max(e,t),n)}function sh(e,t){const n=String(t||"").trim();if(!Oh.test(n))return null;const r=n.length===4?`#${n[1]}${n[1]}${n[2]}${n[2]}${n[3]}${n[3]}`:n;return new e.Color(r)}function zO(e,t,n={},{applyTint:r=!0}={}){const o=(t||new e.Color("#ffffff")).clone(),i=Ls(Number(n.tintStrength)||0,0,1);if(r&&i>0){const c=oa(e,n.defaultColor||n.tintColor,"#ffffff");n.tintMode==="blend"?o.lerp(c,i):o.lerp(o.clone().multiply(c),i)}const s=Ls(Number(n.saturation)||1,0,2.5);if(Math.abs(s-1)>1e-4){const c={};o.getHSL(c),o.setHSL(c.h,Ls(c.s*s,0,1),c.l)}const a=Ls(Number(n.contrast)||1,0,2.5),l=Ls(Number(n.brightness)||1,0,2);return o.r=Ls(((o.r-.5)*a+.5)*l,0,1),o.g=Ls(((o.g-.5)*a+.5)*l,0,1),o.b=Ls(((o.b-.5)*a+.5)*l,0,1),o}function ZW(e,t={},n=0){return oa(e,Av(t,n),t?.defaultColor||tr.surface)}function gN(e,t={},n=0){return zO(e,ZW(e,t,n),t,{applyTint:!1})}function JW(e,{hasVertexColors:t=!1,sourceColor:n=null,materialSettings:r,fallbackColor:o="#ffffff",fillIndex:i=0,forceFill:s=!1}){return s?gN(e,r,i):t?new e.Color("#ffffff"):n?zO(e,n,r):gN(e,{...r,defaultColor:o||r?.defaultColor},i)}function QW(e,t,n,{displayMode:r=$t.SOLID}={}){if(!t?.material||!n)return;const o=Fl(r),i=n.overrideSourceColors===!0||o,s=!i&&!!t.hasVertexColors,a=s;t.useVertexColors=a,t.baseColor=JW(e,{hasVertexColors:s,sourceColor:i?null:t.sourceColor||null,materialSettings:n,fallbackColor:n?.defaultColor||tr.surface,fillIndex:t.fillIndex||0,forceFill:i}),t.material.vertexColors=a;const l=t.sourcePart?.material&&typeof t.sourcePart.material=="object"?t.sourcePart.material:null,c=m=>{const p=l?Number(l[m]):NaN;return Ls(Number.isFinite(p)?p:Number(n[m])||0,0,1)};t.material.roughness=c("roughness"),t.material.metalness=c("metalness"),t.material.clearcoat=c("clearcoat"),t.material.clearcoatRoughness=c("clearcoatRoughness");const u=Number(t.sourceOpacity),f=Number.isFinite(u)?Ls(u,0,1):1;t.baseOpacity=Ls(Zb(r,(Number(n.opacity)||0)*f),0,1),t.material.opacity=t.baseOpacity,t.material.transparent=o||t.baseOpacity<.999,t.material.depthWrite=r===$t.TRANSPARENT||o?!1:t.baseOpacity>=.999,t.material.envMapIntensity=Math.max(Number(n.envMapIntensity)||0,0),t.material.color&&t.baseColor&&t.material.color.copy(t.baseColor),t.baseEmissiveIntensity=Ls(Number(n.emissiveIntensity)||0,0,2),t.baseEmissiveColor=t.baseColor?t.baseColor.clone():null,"emissive"in t.material&&t.material.emissive&&(t.baseEmissiveColor&&t.baseEmissiveIntensity>0?t.material.emissive.copy(t.baseEmissiveColor):t.material.emissive.set(0),t.material.emissiveIntensity=t.baseEmissiveIntensity),t.material.needsUpdate=!0}const yN="#8dc5ff",h0="#4f9dff",e8="#2563eb",t8=3;function n8(e){const t=String(e?.pickData?.surfaceType||e?.pickData?.surface?.type||"").trim().toLowerCase();return!t||t.includes("plane")||t.includes("planar")}function BO(e,t){if(!n8(t))return[0,0,0];const n=Array.isArray(t?.pickData?.normal)?t.pickData.normal:null;if(!e?.camera||!e?.modelGroup||!n||n.length<3)return[0,0,0];const r=Math.hypot(n[0],n[1],n[2]);if(r<=1e-9)return[0,0,0];const o=[n[0]/r,n[1]/r,n[2]/r],i=Array.isArray(t?.pickData?.center)?t.pickData.center:[0,0,0],s=e.modelGroup.position,a=[Number(i[0]||0)+Number(s?.x||0),Number(i[1]||0)+Number(s?.y||0),Number(i[2]||0)+Number(s?.z||0)],l=[e.camera.position.x-a[0],e.camera.position.y-a[1],e.camera.position.z-a[2]],c=o[0]*l[0]+o[1]*l[1]+o[2]*l[2]>=0?1:-1,u=Math.max(Number(e.modelRadius||1)*75e-5,.015);return[o[0]*c*u,o[1]*c*u,o[2]*c*u]}function r8(e,t,n,r){const o=n?.proxy||{},i=Number(r?.pickData?.triangleStart||0),s=Number(r?.pickData?.triangleCount||0);if(!(o.facePositions instanceof Float32Array)||!(o.faceIndices instanceof Uint32Array)||s<=0)return null;const a=o.faceIndices.slice(i*3,(i+s)*3);if(!a.length)return null;const l=BO(e,r),c=new Float32Array(a.length*3);let u=0;for(const m of a){const p=Number(m)*3;c[u]=o.facePositions[p]+l[0],c[u+1]=o.facePositions[p+1]+l[1],c[u+2]=o.facePositions[p+2]+l[2],u+=3}const f=new t.BufferGeometry;return f.setAttribute("position",new t.BufferAttribute(c,3)),f}function o8(e,t,n){const r=Number(n?.rowIndex);if(!Number.isInteger(r)||!Array.isArray(e?.displayRecords))return null;const o=BO(e,n),i=new t.Vector3,s=[];for(const l of e.displayRecords){const c=l?.mesh,u=c?.geometry,f=c?.userData?.faceIds,m=u?.getAttribute?.("position"),p=u?.getIndex?.();if(!(f instanceof Uint32Array)||!m||!p||!p.count)continue;const b=Math.min(f.length,Math.floor(p.count/3));for(let y=0;y<b;y+=1)if(Number(f[y])===r)for(let x=0;x<3;x+=1){const S=p.getX(y*3+x);i.set(m.getX(S),m.getY(S),m.getZ(S)),i.applyMatrix4(c.matrix),s.push(i.x+o[0],i.y+o[1],i.z+o[2])}}if(!s.length)return null;const a=new t.BufferGeometry;return a.setAttribute("position",new t.BufferAttribute(new Float32Array(s),3)),a}function i8(e,t){const n=String(t?.occurrenceId||t?.pickData?.occurrenceId||"").trim();if(!n||!Array.isArray(e?.displayRecords))return null;let r=null,o=-1;for(const i of e.displayRecords){const s=String(i?.partId||"").trim();!s||s==="__model__"||n!==s&&!n.startsWith(`${s}.`)||s.length>o&&(r=i,o=s.length)}return r}function s8(e,t){const r=i8(e,t)?.explodedViewMatrix;return r?.elements?.length===16?r:null}function Uv(e,t){const n=e?.proxy||{},r=Number(t?.pickData?.segmentStart||0),o=Number(t?.pickData?.segmentCount||0);if(!(n.edgePositions instanceof Float32Array)||!(n.edgeIndices instanceof Uint32Array)||o<=0)return null;const i=n.edgeIndices.slice(r*2,(r+o)*2);if(!i.length)return null;const s=new Float32Array(o*6);let a=0;for(let l=0;l+1<i.length;l+=2){const c=i[l]*3,u=i[l+1]*3;s[a]=n.edgePositions[c],s[a+1]=n.edgePositions[c+1],s[a+2]=n.edgePositions[c+2],s[a+3]=n.edgePositions[u],s[a+4]=n.edgePositions[u+1],s[a+5]=n.edgePositions[u+2],a+=6}return a===s.length?s:s.subarray(0,a)}function a8(e,t){const n=Array.isArray(t?.pickData?.adjacentSelectors)?t.pickData.adjacentSelectors:[];if(!n.length)return null;const r=[];for(const o of n){const i=e?.referenceByDisplaySelector?.get?.(o)||e?.referenceByNormalizedSelector?.get?.(o)||null,s=Uv(e,i);s?.length&&r.push(...s)}return r.length?r:null}function l8(e,t){return a8(e,t)}function c8(e,t,n,{color:r,opacity:o,renderOrder:i=27}={}){const s=Array.isArray(n?.pickData?.center)?n.pickData.center:null;if(!s||s.length<3)return null;const a=Math.max(Number(e?.modelRadius||1)*.0045,.2),l=new t.SphereGeometry(a,16,16),c=new t.MeshBasicMaterial({color:r,transparent:!0,opacity:o,depthTest:!0,depthWrite:!1,toneMapped:!1}),u=new t.Mesh(l,c);return u.position.set(s[0],s[1],s[2]),u.renderOrder=i,u}const u8=.84,d8=23,f8=26,m8=.08,p8=.12,Lp=.035;function pl(e,t,n){return Math.min(Math.max(e,t),n)}function h8(e,{edgeSettings:t=null}={}){const n=String(t?.highlightColor||h0).trim()||h0,r=String(t?.hoverColor||yN).trim()||yN;return{hoveredSurfaceColor:new e.Color(r),hoveredEdgeColor:new e.Color(r),selectedSurfaceColor:new e.Color(n),selectedEdgeColor:new e.Color(n)}}function bl(e){return(Array.isArray(e)?e:[e]).map(t=>String(t||"").trim()).filter(Boolean)}function bN(e){const t=String(e||"").trim();return t.startsWith("#")?t.slice(1).trim():t}function Fp(e,t){if(!t?.size)return!1;if(t.has("__model__"))return!0;const n=bN(e);if(!n)return!1;for(const r of t){const o=bN(r);if(o&&(n===o||n.startsWith(`${o}.`)))return!0}return!1}function g8(e,t){if(!t?.size)return!0;const n=String(e?.partId||"").trim();return n?Fp(n,t):t.has("__model__")}function y8(e,t,n){return t?(Number.isFinite(Number(e[n]))||(e[n]=Number.isFinite(Number(t.renderOrder))?Number(t.renderOrder):0),e[n]):0}function xN(e,t,n,r,o){if(!t)return;const i=y8(e,t,n);t.renderOrder=r?o:i}function b8(e,t,n,{writeTransparentDepth:r=!0}={}){const o=e?.material;if(!o)return;Object.hasOwn(e,"baseDepthWrite")||(e.baseDepthWrite=o.depthWrite!==!1);const i=t||n<.999;o.transparent!==i&&(o.transparent=i,o.needsUpdate=!0),o.depthWrite=i&&!r?!1:e.baseDepthWrite}const x8=Object.freeze({feature:"cadSurfaceFeatureOpacity",tangent:"cadSurfaceTangentOpacity",seam:"cadSurfaceSeamOpacity",degenerate:"cadSurfaceDegenerateOpacity"}),S8=Object.freeze({feature:"cadSurfaceFeatureColor",tangent:"cadSurfaceTangentColor",seam:"cadSurfaceSeamColor",degenerate:"cadSurfaceDegenerateColor"});function E8(e,t,n,r=null){const o=t?.material,i=o?.userData;if(!o||i?.cadSurfaceEdges!==!0)return;const s=n?.isColor?n:sh(e,n)||i.cadSurfaceEdgeBaseColor;if(s?.isColor){i.cadSurfaceEdgeColor=s.clone();const f=i.cadSurfaceEdgeShader?.uniforms?.cadSurfaceEdgeColor;f?.value?.copy&&f.value.copy(s)}const a=r!=null&&Number.isFinite(Number(r))?pl(Number(r),0,1):null,l=i.cadSurfaceEdgeBaseClassSettings||{},c=i.cadSurfaceEdgeShader?.uniforms||null,u=a!==null||s?.isColor&&i.cadSurfaceEdgeBaseColor?.isColor&&!s.equals(i.cadSurfaceEdgeBaseColor);for(const[f,m]of Object.entries(S8)){const p=sh(e,l[f]?.color)||i.cadSurfaceEdgeBaseColor,b=u?s:p;b?.isColor&&c?.[m]?.value?.copy&&c[m].value.copy(b)}for(const[f,m]of Object.entries(x8)){const p=Number(l[f]?.opacity),b=a===null?Number.isFinite(p)?p:null:a;b!==null&&(i[`cadSurfaceEdge${f}Opacity`]=b,c?.[m]&&(c[m].value=b))}}function py(e,t,{viewerTheme:n,edgeSettings:r,hiddenPartIds:o,hoveredPartId:i,focusedPartId:s,selectedPartIds:a,showEdges:l,displayMode:c=$t.SOLID}){const u=new Set(Array.isArray(o)?o:[]),f=new Set(Array.isArray(a)?a:[]),m=new Set((Array.isArray(i)?i:[i]).map(I=>String(I||"").trim()).filter(Boolean)),p=r?.color||n?.edge||tr.edge,b=Number.isFinite(Number(n?.surfaceOpacity))?Number(n.surfaceOpacity):1,y=new Set(bl(s)),x=y.size>0,S=Number.isFinite(Number(r?.opacity))?pl(Number(r.opacity),0,1):n?.edgeOpacity??tr.edgeOpacity??u8,E=f4(c),C=Number.isFinite(Number(r?.highlightOpacity))?pl(Number(r.highlightOpacity),0,1):1,{hoveredSurfaceColor:A,hoveredEdgeColor:N,selectedSurfaceColor:w,selectedEdgeColor:_}=h8(e,{edgeSettings:r});for(const I of Array.isArray(t)?t:[]){const R=I.effectStyle&&typeof I.effectStyle=="object"?I.effectStyle:{},O=I.effectVisible===!1,F=sh(e,R.color),V=sh(e,R.edgeColor),$=sh(e,R.emissive),K=Fp(I.partId,u),U=!K&&(Fp(I.partId,f)||I.effectHighlighted===!0),Y=!K&&!O&&!U&&Fp(I.partId,m),D=!K&&!O&&x&&Fp(I.partId,y),j=!K&&!O&&x&&!D,ee=U||Y,X=U?c0(e,I.baseColor,w,oO):Y?c0(e,I.baseColor,A,iO):null,ve=U?_:Y?N:null,q=I.mesh.userData?.dxfHiddenForCurved===!0;I.mesh.visible=!O&&!K&&!q,I.edges&&(I.edges.visible=l&&!O&&!K&&!q),xN(I,I.mesh,"baseMeshRenderOrder",ee,d8),xN(I,I.edges,"baseEdgeRenderOrder",ee,f8);const re=Number.isFinite(Number(I.baseOpacity))?Number(I.baseOpacity):b,Be=Number.isFinite(Number(R.opacity))?pl(Number(R.opacity),0,1):1,Me=Number.isFinite(Number(R.edgeOpacity))?pl(Number(R.edgeOpacity),0,1):Be,He=U?C*Me:Y?C*sO*Me:null,de=Math.min(re*Be,Lp),me=re*Be,we=ee?pl(E?me+(U?p8:m8)*Be:C*Be,0,1):me,ce=K?0:j?de:we;b8(I,K||j||ee,ce,{writeTransparentDepth:!K&&!j&&!E}),I.material.opacity=ce,I.baseColor&&I.material.color&&I.material.color.copy(X||F||I.mesh.userData?.dxfMaterialTint||I.baseColor),"emissive"in I.material&&I.material.emissive&&(U?I.material.emissive.copy(w):Y?I.material.emissive.copy(A):I.baseEmissiveColor&&I.baseEmissiveIntensity>0?I.material.emissive.copy(I.baseEmissiveColor):I.material.emissive.set(0),I.material.emissiveIntensity=U?aO:Y?lO:pl($?Number(R.emissiveIntensity)||.22:Number(I.baseEmissiveIntensity)||0,0,2),!U&&!Y&&$&&I.material.emissive.copy($));const Ee=ve||V||p;E8(e,I,Ee,He),I.edgeMaterial&&(I.edgeMaterial.color.set(Ee),KP(I.edgeMaterial,U||Y?He:K||j?ce:S*Me)),uO(e,I,{visible:U&&!K&&!O,color:w})}}const g0=Object.freeze([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),w8=/^#(?:[0-9a-fA-F]{3}){1,2}$/,hy=32,gy=24,CS=12;function MS(e){return e<=.04045?e/12.92:((e+.055)/1.055)**2.4}function CE(e){const t=String(e||"").trim();if(!w8.test(t))return null;const n=t.length===4?`#${t[1]}${t[1]}${t[2]}${t[2]}${t[3]}${t[3]}`:t;return[MS(Number.parseInt(n.slice(1,3),16)/255),MS(Number.parseInt(n.slice(3,5),16)/255),MS(Number.parseInt(n.slice(5,7),16)/255)]}function us(e,t=g0){return!Array.isArray(e)||e.length!==16?[...t]:e.map((n,r)=>Number.isFinite(Number(n))?Number(n):t[r])}function ox(e,t=[0,0,1]){return!Array.isArray(e)||e.length<3?[...t]:[Number.isFinite(Number(e[0]))?Number(e[0]):t[0],Number.isFinite(Number(e[1]))?Number(e[1]):t[1],Number.isFinite(Number(e[2]))?Number(e[2]):t[2]]}function VO(e){const[t,n,r]=ox(e,[0,0,1]),o=Math.hypot(t,n,r);return o<=1e-9?[0,0,1]:[t/o,n/o,r/o]}function kf(e,t){const n=us(e),r=us(t),o=new Array(16).fill(0);for(let i=0;i<4;i+=1)for(let s=0;s<4;s+=1){let a=0;for(let l=0;l<4;l+=1)a+=n[i*4+l]*r[l*4+s];o[i*4+s]=a}return o}function v8(e,t,n){return[1,0,0,Number.isFinite(Number(e))?Number(e):0,0,1,0,Number.isFinite(Number(t))?Number(t):0,0,0,1,Number.isFinite(Number(n))?Number(n):0,0,0,0,1]}function A8(e,t,n){const r=Number.isFinite(Number(e))?Number(e):0,o=Number.isFinite(Number(t))?Number(t):0,i=Number.isFinite(Number(n))?Number(n):0,s=Math.sin(r),a=Math.cos(r),l=Math.sin(o),c=Math.cos(o),u=Math.sin(i),f=Math.cos(i);return[f*c,f*l*s-u*a,f*l*a+u*s,0,u*c,u*l*s+f*a,u*l*a-f*s,0,-l,c*s,c*a,0,0,0,0,1]}function Jue(e){const t=Array.isArray(e)?e:[];return kf(v8(t[0],t[1],t[2]),A8(t[3],t[4],t[5]))}function C8(e,t){const[n,r,o]=VO(e),i=Math.cos(t),s=Math.sin(t),a=1-i;return[i+n*n*a,n*r*a-o*s,n*o*a+r*s,0,r*n*a+o*s,i+r*r*a,r*o*a-n*s,0,o*n*a-r*s,o*r*a+n*s,i+o*o*a,0,0,0,0,1]}function y0(e,t){const n=us(e),[r,o,i]=ox(t,[0,0,0]);return[n[0]*r+n[1]*o+n[2]*i+n[3],n[4]*r+n[5]*o+n[6]*i+n[7],n[8]*r+n[9]*o+n[10]*i+n[11]]}function $O(e){const t=us(e);return[t[0],t[4],t[8],-(t[0]*t[3]+t[4]*t[7]+t[8]*t[11]),t[1],t[5],t[9],-(t[1]*t[3]+t[5]*t[7]+t[9]*t[11]),t[2],t[6],t[10],-(t[2]*t[3]+t[6]*t[7]+t[10]*t[11]),0,0,0,1]}function M8(e,t){const n=Array.isArray(e?.min)?e.min:[0,0,0],r=Array.isArray(e?.max)?e.max:[0,0,0],i=[[n[0],n[1],n[2]],[n[0],n[1],r[2]],[n[0],r[1],n[2]],[n[0],r[1],r[2]],[r[0],n[1],n[2]],[r[0],n[1],r[2]],[r[0],r[1],n[2]],[r[0],r[1],r[2]]].map(c=>y0(t,c)),s=i.map(c=>c[0]),a=i.map(c=>c[1]),l=i.map(c=>c[2]);return{min:[Math.min(...s),Math.min(...a),Math.min(...l)],max:[Math.max(...s),Math.max(...a),Math.max(...l)]}}function Qu(e){const t=(Array.isArray(e)?e:[]).filter(Boolean);if(!t.length)return{min:[0,0,0],max:[0,0,0]};const n=t.flatMap(i=>[i.min[0],i.max[0]]),r=t.flatMap(i=>[i.min[1],i.max[1]]),o=t.flatMap(i=>[i.min[2],i.max[2]]);return{min:[Math.min(...n),Math.min(...r),Math.min(...o)],max:[Math.max(...n),Math.max(...r),Math.max(...o)]}}function I8(e){const t=Array.isArray(e?.joints)?e.joints:[];return Object.fromEntries(t.filter(n=>String(n?.type||"")!=="fixed"&&!n?.mimic).map(n=>[String(n?.name||""),Number(n?.defaultValueDeg)||0]).filter(([n])=>n))}function Lc(e,t){const n=Number(e?.defaultValueDeg)||0,r=String(e?.type||"");if(r==="fixed")return n;const o=Number.isFinite(Number(t))?Number(t):n;if(r==="continuous")return o;const i=Number.isFinite(Number(e?.minValueDeg))?Number(e.minValueDeg):o,s=Number.isFinite(Number(e?.maxValueDeg))?Number(e.maxValueDeg):o;return Math.min(Math.max(o,i),Math.max(i,s))}function GO(e){const t=String(e?.type||"fixed");return t==="continuous"||t==="revolute"}function N8(e,t){const n=Lc(e,t);return GO(e)?n*Math.PI/180:n}function T8(e,t){const n=Number.isFinite(Number(t))?Number(t):0;return GO(e)?n*180/Math.PI:n}function _8(e,t){const[n,r,o]=VO(e),i=Number.isFinite(Number(t))?Number(t):0;return[1,0,0,n*i,0,1,0,r*i,0,0,1,o*i,0,0,0,1]}function R8(e,t){const n=String(e?.type||"fixed"),r=us(e?.originTransform),o=us(e?.preMotionTransform,r),i=us(e?.postMotionTransform);if(n==="fixed")return kf(o,i);const s=ox(e?.axis??e?.axisInJointFrame??e?.axisInParentFrame,[0,0,1]);let a;if(n==="prismatic")a=_8(s,Lc(e,t));else{const l=Lc(e,t)*Math.PI/180;a=C8(s,l)}return kf(kf(o,a),i)}function UO(e,t,n,r=new Set){const o=String(e?.name||"");if(!e?.mimic)return Lc(e,n?.[o]);if(r.has(o))return Lc(e,e?.defaultValueDeg);r.add(o);const i=e.mimic,s=t.get(String(i.joint||"")),a=s?UO(s,t,n,r):Number(n?.[i.joint])||0;r.delete(o);const l=s?N8(s,a):a,c=Number.isFinite(Number(i.multiplier))?Number(i.multiplier):1,u=Number.isFinite(Number(i.offset))?Number(i.offset):0;return Lc(e,T8(e,c*l+u))}function Hv(e,t={}){const n=String(e?.rootLink||""),r=us(e?.rootWorldTransform),o=Array.isArray(e?.joints)?e.joints:[],i=new Map(o.map(c=>[String(c?.name||""),c]).filter(([c])=>c)),s=new Map;if(!n)return s;const a=new Map;for(const c of o){const u=String(c?.parentLink||"");if(!u)continue;const f=a.get(u)||[];f.push(c),a.set(u,f)}const l=(c,u)=>{s.set(c,u);const f=a.get(c)||[];for(const m of f){const p=String(m?.childLink||"");if(!p)continue;const b=UO(m,i,t),y=kf(u,R8(m,b));l(p,y)}};return l(n,r),s}function ME(e,t,n,r){const o=String(n||"").trim(),i=String(r||"").trim();if(!o||!i)return null;const s=Hv(e,t),a=s.get(o),l=s.get(i);return!a||!l?null:y0($O(l),y0(a,[0,0,0]))}function P8(e,t,n,r){const o=String(r||"").trim();if(!o)return null;const s=Hv(e,t).get(o);return s?y0($O(s),n):null}function O8(e,t,n){const r=t||n;return r?e instanceof Map?e.get(r)||null:e&&typeof e=="object"&&e[r]||null:null}function Wv(e,t){return{min:e,max:t}}function Kv(e,t,n,r){return{vertices:new Float32Array(e),normals:new Float32Array(t),indices:new Uint32Array(n),colors:new Float32Array(0),edge_indices:new Uint32Array(0),bounds:r,has_source_colors:!1}}function k8(e){const[t,n,r]=ox(e,[1,1,1]),o=t/2,i=n/2,s=r/2,a=[],l=[],c=[],u=[[[1,0,0],[[o,-i,-s],[o,i,-s],[o,i,s],[o,-i,s]]],[[-1,0,0],[[-o,i,-s],[-o,-i,-s],[-o,-i,s],[-o,i,s]]],[[0,1,0],[[-o,i,-s],[o,i,-s],[o,i,s],[-o,i,s]]],[[0,-1,0],[[o,-i,-s],[-o,-i,-s],[-o,-i,s],[o,-i,s]]],[[0,0,1],[[-o,-i,s],[o,-i,s],[o,i,s],[-o,i,s]]],[[0,0,-1],[[-o,i,-s],[o,i,-s],[o,-i,-s],[-o,-i,-s]]]];for(const[f,m]of u){const p=a.length/3;for(const b of m)a.push(...b),l.push(...f);c.push(p,p+1,p+2,p,p+2,p+3)}return Kv(a,l,c,Wv([-o,-i,-s],[o,i,s]))}function D8(e,t){const n=Number.isFinite(Number(e))?Number(e):.5,r=(Number.isFinite(Number(t))?Number(t):1)/2,o=[],i=[],s=[];for(let a=0;a<hy;a+=1){const l=(a+1)%hy,c=a/hy*Math.PI*2,u=l/hy*Math.PI*2,f=Math.cos(c)*n,m=Math.sin(c)*n,p=Math.cos(u)*n,b=Math.sin(u)*n,y=o.length/3;o.push(f,m,-r,p,b,-r,p,b,r,f,m,r),i.push(Math.cos(c),Math.sin(c),0,Math.cos(u),Math.sin(u),0,Math.cos(u),Math.sin(u),0,Math.cos(c),Math.sin(c),0),s.push(y,y+1,y+2,y,y+2,y+3);const x=o.length/3;o.push(0,0,r,f,m,r,p,b,r),i.push(0,0,1,0,0,1,0,0,1),s.push(x,x+1,x+2);const S=o.length/3;o.push(0,0,-r,p,b,-r,f,m,-r),i.push(0,0,-1,0,0,-1,0,0,-1),s.push(S,S+1,S+2)}return Kv(o,i,s,Wv([-n,-n,-r],[n,n,r]))}function L8(e){const t=Number.isFinite(Number(e))?Number(e):.5,n=[],r=[],o=[];for(let s=0;s<=CS;s+=1){const a=s/CS*Math.PI,l=Math.sin(a),c=Math.cos(a);for(let u=0;u<=gy;u+=1){const f=u/gy*Math.PI*2,m=Math.cos(f)*l,p=Math.sin(f)*l,b=c;n.push(m*t,p*t,b*t),r.push(m,p,b)}}const i=gy+1;for(let s=0;s<CS;s+=1)for(let a=0;a<gy;a+=1){const l=s*i+a,c=l+i;o.push(l,c,l+1,c,c+1,l+1)}return Kv(n,r,o,Wv([-t,-t,-t],[t,t,t]))}function F8(e){const t=String(e?.type||"").trim().toLowerCase();return t==="box"?k8(e?.size):t==="cylinder"?D8(e?.radius,e?.length):t==="sphere"?L8(e?.radius):null}function j8(e,t){const n=Array.isArray(e?.links)?e.links:[],r=[];for(const o of n){const i=String(o?.name||""),s=Array.isArray(o?.visuals)?o.visuals:[];for(const a of s){const l=String(a?.meshUrl||""),c=String(a?.partFileRef||""),u=a?.primitive?F8(a.primitive):O8(t,l,c);u&&r.push({linkName:i,meshUrl:l,partFileRef:c,visual:a,partMesh:u})}}return r}function z8(e,t,n={}){const r=j8(e,t);if(n?.lightweight===!0||n?.mode==="source-parts"){const x=[];let S=!1;for(let E=0;E<r.length;E+=1){const{linkName:C,meshUrl:A,partFileRef:N,partMesh:w,visual:_}=r[E],I=w.vertices||new Float32Array(0),R=w.indices||new Uint32Array(0),O=Math.floor(I.length/3),F=Math.floor(R.length/3),$=String(_?.color||"").trim(),U=!!CE($)||IE(w);S||=SN($,w);const Y=String(_?.label||_?.instanceId||_?.id||A||N).trim();x.push({id:String(_?.id||`${C}:${A||N}`),name:Y,label:Y,occurrenceId:String(_?.occurrenceId||"").trim(),instanceId:String(_?.instanceId||"").trim(),color:$,meshUrl:A,partFileRef:N,linkName:C,localTransform:us(_?.localTransform),sourceBounds:w.bounds,bounds:w.bounds,transform:[...g0],hasSourceColors:U,sourceMesh:w,sourceMeshKey:String(A||N||_?.id||`visual:${E+1}`),vertexOffset:0,vertexCount:O,triangleOffset:0,triangleCount:F,edgeIndexOffset:0,edgeIndexCount:0})}return{vertices:new Float32Array([0,0,0,0,0,0,0,0,0]),indices:new Uint32Array([0,1,2]),normals:new Float32Array([0,0,1,0,0,1,0,0,1]),colors:new Float32Array(0),edge_indices:new Uint32Array(0),bounds:Qu(x.map(E=>E.bounds)),parts:x,has_source_colors:S,lightweightGeometry:!0,geometrySource:{type:"urdf-source-parts",urdfData:e,meshesByUrl:t}}}let i=0,s=0,a=!1;for(const x of r){const S=x.partMesh;i+=Math.floor((S.vertices?.length||0)/3),s+=S.indices?.length||0;const E=String(x.visual?.color||"").trim();a||=SN(E,S)}const l=a,c=new Float32Array(i*3),u=new Float32Array(i*3),f=new Uint32Array(s),m=l?new Float32Array(i*3).fill(1):new Float32Array(0),p=[];let b=0,y=0;for(let x=0;x<r.length;x+=1){const S=r[x],{linkName:E,meshUrl:C,partFileRef:A,partMesh:N,visual:w}=S,_=N.vertices||new Float32Array(0),I=N.normals||new Float32Array(0),R=N.colors||new Float32Array(0),O=N.indices||new Uint32Array(0),F=b,V=Math.floor(y/3),$=Math.floor(_.length/3),K=Math.floor(O.length/3),Y=String(w?.color||"").trim(),D=CE(Y),j=!!D||IE(N);if(c.set(_,F*3),I.length===_.length&&u.set(I,F*3),l&&j)if(D)for(let X=0;X<$;X+=1){const ve=(F+X)*3;m[ve]=D[0],m[ve+1]=D[1],m[ve+2]=D[2]}else R.length===_.length&&m.set(R,F*3);for(let X=0;X<O.length;X+=1)f[y+X]=O[X]+F;const ee=String(w?.label||w?.instanceId||w?.id||C||A).trim();p.push({id:String(w?.id||`${E}:${C||A}`),name:ee,label:ee,occurrenceId:String(w?.occurrenceId||"").trim(),instanceId:String(w?.instanceId||"").trim(),color:Y,meshUrl:C,partFileRef:A,linkName:E,localTransform:us(w?.localTransform),sourceBounds:N.bounds,bounds:N.bounds,transform:[...g0],hasSourceColors:j,vertexOffset:F,vertexCount:$,triangleOffset:V,triangleCount:K,edgeIndexOffset:0,edgeIndexCount:0}),b+=$,y+=O.length}return{vertices:c,indices:f,normals:u,colors:m,edge_indices:new Uint32Array(0),bounds:Qu(p.map(x=>x.bounds)),parts:p,has_source_colors:l}}function IE(e){return!!e?.has_source_colors&&e.colors?.length>0&&e.colors.length===e.vertices?.length}function SN(e,t){return!!CE(e)||!e&&IE(t)}function B8(e,t,n={},r=null){const o=Hv(e,n);if(r instanceof Map)for(const[l,c]of r.entries())o.set(String(l||""),us(c));else if(r&&typeof r=="object")for(const[l,c]of Object.entries(r))o.set(String(l||""),us(c));const i=Array.isArray(t?.parts)?t.parts:[],s=t?.geometrySource&&typeof t.geometrySource=="object"?t.geometrySource:t,a=i.map(l=>{const c=o.get(String(l?.linkName||""))||[...g0],u=us(l?.localTransform),f=kf(c,u),m=l?.sourceBounds||l?.bounds;return{...l,transform:f,bounds:M8(m,f)}});return{meshData:{...t,geometrySource:s,bounds:Qu(a.map(l=>l.bounds)),parts:a},linkWorldTransforms:o}}function V8(e,t,n={},r=null){const o=B8(e,t,n,r);return!t||typeof t!="object"?o:(t.geometrySource=o.meshData.geometrySource||t.geometrySource||t,t.bounds=o.meshData.bounds,t.parts=o.meshData.parts,{...o,meshData:t})}function gm(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function jp(e,t,n){const r=e?.tables?.[n],o=e?.[t];return!Array.isArray(r)||!Array.isArray(o)?[]:o.filter(Array.isArray).map(i=>Object.fromEntries(r.map((s,a)=>[s,i[a]])))}function EN(e,t,n,r){const o=e?.relations?.[n];if(Array.isArray(o)||ArrayBuffer.isView(o))return o;const i=e?.relations?.[r];return typeof i=="string"&&t?.[i]?t[i]:[]}function $8(e,t,n,r){const o=e?.[n]?.[r];return typeof o=="string"&&t?.[o]?t[o]:new Uint32Array(0)}function ah(e,t){if(!e||!t.startsWith(`${e}.`))return t;const n=t.slice(e.length+1);return n.startsWith("s")||n.startsWith("f")||n.startsWith("e")?n:t}function G8(e){return e==="occurrence"?"Occurrence":e==="shape"?"Shape":e==="face"?"Face":"Edge"}function $a(e,t){if(!Array.isArray(t)||t.length<3)return t;if(!Array.isArray(e)||e.length<16)return[Number(t[0]),Number(t[1]),Number(t[2])];const n=Number(t[0]),r=Number(t[1]),o=Number(t[2]);return[e[0]*n+e[1]*r+e[2]*o+e[3],e[4]*n+e[5]*r+e[6]*o+e[7],e[8]*n+e[9]*r+e[10]*o+e[11]]}function wN(e){const t=Number(e?.[0]||0),n=Number(e?.[1]||0),r=Number(e?.[2]||0),o=Math.hypot(t,n,r);return o<=1e-9?null:[t/o,n/o,r/o]}function eg(e,t){return!Array.isArray(t)||t.length<3||!Array.isArray(e)||e.length<16?wN(t||[]):wN([e[0]*t[0]+e[1]*t[1]+e[2]*t[2],e[4]*t[0]+e[5]*t[1]+e[6]*t[2],e[8]*t[0]+e[9]*t[1]+e[10]*t[2]])}function $c(e,t){if(!gm(t))return t;const n=Array.isArray(t.min)?t.min:[0,0,0],r=Array.isArray(t.max)?t.max:[0,0,0],o=[[n[0],n[1],n[2]],[n[0],n[1],r[2]],[n[0],r[1],n[2]],[n[0],r[1],r[2]],[r[0],n[1],n[2]],[r[0],n[1],r[2]],[r[0],r[1],n[2]],[r[0],r[1],r[2]]].map(l=>$a(e,l)),i=o.map(l=>l[0]),s=o.map(l=>l[1]),a=o.map(l=>l[2]);return{min:[Math.min(...i),Math.min(...s),Math.min(...a)],max:[Math.max(...i),Math.max(...s),Math.max(...a)]}}function qv(e,t){if(!gm(t))return t;const n=new Set(["origin","center","location"]),r=new Set(["axis","direction","normal"]);return Object.fromEntries(Object.entries(t).map(([o,i])=>n.has(o)&&Array.isArray(i)&&i.length===3?[o,$a(e,i)]:r.has(o)&&Array.isArray(i)&&i.length===3?[o,eg(e,i)]:[o,i]))}function HO(e,t){return Array.isArray(t)?t.map(n=>Array.isArray(n)&&n.length>=3?$a(e,n):n):t}function U8(e,t){return Array.isArray(t)?t.map(n=>gm(n)&&Array.isArray(n.points)?{...n,points:HO(e,n.points)}:n):t}function H8(e,t){if(!gm(t))return t;const n=new Set(["origin","center","location"]),r=new Set(["axis","direction","normal","xDir","yDir"]);return Object.fromEntries(Object.entries(t).map(([o,i])=>n.has(o)&&Array.isArray(i)&&i.length===3?[o,$a(e,i)]:r.has(o)&&Array.isArray(i)&&i.length===3?[o,eg(e,i)]:[o,i]))}function NE(e,t){if(!(e instanceof Float32Array)||!Array.isArray(t)||t.length<16)return e;const n=new Float32Array(e.length);for(let r=0;r<e.length;r+=3){const o=$a(t,[e[r],e[r+1],e[r+2]]);n[r]=o[0],n[r+1]=o[1],n[r+2]=o[2]}return n}function W8(e,t){return!gm(e)||!Array.isArray(t)||t.length<16?e:{...e,bbox:e.bbox?$c(t,e.bbox):e.bbox,center:Array.isArray(e.center)?$a(t,e.center):e.center,normal:Array.isArray(e.normal)?eg(t,e.normal):e.normal,params:e.params?qv(t,e.params):e.params,loops:Array.isArray(e.loops)?e.loops.map(n=>HO(t,n)):e.loops,loopsMeta:U8(t,e.loopsMeta),surface:H8(t,e.surface),centroid:Array.isArray(e.centroid)?$a(t,e.centroid):e.centroid,transform:t}}function K8(e,t,n){return n?`topology|${n}|${t}|${e}`:e}function q8(e,t){if(e==="occurrence")return String(t.name||t.sourceName||t.id||"").trim();if(e==="shape"){const n=String(t.name||t.sourceName||"").trim(),r=`${t.kind||"shape"}${t.volume?` volume=${t.volume}`:t.area?` area=${t.area}`:""}`;return n?`${n} ${r}`:r}return e==="face"?`${t.surfaceType||"face"} area=${t.area??0}`:`${t.curveType||"edge"} length=${t.length??0}`}function Y8(e,t){const n=String(e||"").trim(),r=String(t||"").trim();return!r||n===r||n.startsWith(`${r}.`)}function Yv(e,t){const n=String(e||"").trim();if(!n||!t||typeof t!="object"||!Y8(n,t.sourceOccurrenceId))return"";const r=String(t.sourceRootOccurrenceId||"").trim(),o=String(t.targetRootOccurrenceId||"").trim();if(!r||!o)return"";if(n===r)return o;const i=`${r}.`;return n.startsWith(i)?`${o}.${n.slice(i.length)}`:""}function Xv(e,t,n,r,o="",i=null){if(!t||!Number.isFinite(Number(n)))return"";if(i&&typeof i=="object"){const a=e==="occurrence"?String(t?.id||"").trim():String(t?.occurrenceId||"").trim(),l=Yv(a,i);return l?e==="occurrence"?l:`${l}.${e==="shape"?"s":e==="face"?"f":"e"}${n+1}`:""}const s=String(o||"").trim();return s?e==="occurrence"?s:`${s}.${e==="shape"?"s":e==="face"?"f":"e"}${n+1}`:ah(r,String(t?.id||"").trim())}function X8(e,t,n="",r=null){const o=String(e||"").trim();if(!o)return"";const i=o.match(/^(.*)\.([sfe]\d+)$/i);if(!i)return ah(t,o);const s=String(i[1]||"").trim(),a=String(i[2]||"").trim();if(!s||!a)return ah(t,o);if(r&&typeof r=="object"){const c=Yv(s,r);return c?`${c}.${a}`:""}const l=String(n||"").trim();return l?`${l}.${a}`:ah(t,o)}function Z8(e,t,n,r="",o=null){if(e==="occurrence")return"";const i=String(t?.occurrenceId||"").trim();return i?o&&typeof o=="object"?Yv(i,o):String(r||"").trim()||ah(n,i):""}function J8(e,t,n,r,o,i,s,a,l,c){const u=Number(e?.[i]||0),f=Number(e?.[s]||0),m=[],p=Math.min(t?.length||0,u+f);for(let b=u;b<p;b+=1){const y=t[b],x=Number(y),S=n[x],E=Xv(a,S,x,r,l,c)||String(S?.[o]||"").trim();E&&m.push(E)}return m}function yy({selectorType:e,row:t,rowIndex:n,singleOccurrenceId:r,copyCadPath:o,partId:i,selectorTransform:s,relationRows:a,targetRows:l,targetKey:c,startKey:u,countKey:f,remapOccurrenceId:m="",remapOccurrencePrefix:p=null,targetSelectorType:b=""}){const y=Xv(e,t,n,r,m,p),x=y,S=K8(x,e,i),E=q8(e,t),C=zc({cadPath:o,selector:x}),A=a&&l?J8(t,a,l,r,c,u,f,b,m,p):[];return{id:S,selectorType:e,normalizedSelector:y,displaySelector:x,label:`${G8(e)} ${x}`,summary:E,shortSummary:E,copyText:C,partId:i,occurrenceId:Z8(e,t,r,m,p),shapeId:X8(t.shapeId,r,m,p),rowIndex:n,pickData:{selectorType:e,rowIndex:n,name:t.name||null,sourceName:t.sourceName||null,kind:t.kind||null,bbox:t.bbox||null,surfaceType:t.surfaceType||null,curveType:t.curveType||null,length:Number.isFinite(Number(t.length))?Number(t.length):null,area:Number.isFinite(Number(t.area))?Number(t.area):null,center:t.center||null,normal:t.normal||null,params:t.params||null,triangleStart:t.triangleStart??0,triangleCount:t.triangleCount??0,segmentStart:t.segmentStart??0,segmentCount:t.segmentCount??0,adjacentSelectors:A,transform:s||null}}}function Q8(e){return[...new Set(e.map(t=>String(t.occurrenceId||"").trim()).filter(Boolean))].sort()}function zp(e,t){return!Array.isArray(t)||t.length<16?e:e.map(n=>({...n,transform:Array.isArray(n.transform)?n.transform:t,bbox:n.bbox?$c(t,n.bbox):n.bbox,center:Array.isArray(n.center)?$a(t,n.center):n.center,normal:Array.isArray(n.normal)?eg(t,n.normal):n.normal,params:n.params?qv(t,n.params):n.params}))}function e9(e,t){return!e||!Array.isArray(t)||t.length<16?e:{...e,bbox:e.bbox?$c(t,e.bbox):e.bbox,center:Array.isArray(e.center)?$a(t,e.center):e.center,normal:Array.isArray(e.normal)?eg(t,e.normal):e.normal,params:e.params?qv(t,e.params):e.params}}function vN(e,t){const n=Array.isArray(t?.[0])?t:[t],r=n.map(()=>0);return e.map(o=>{const i={...o};return n.forEach(([s,a],l)=>{const c=Math.max(0,Number(o?.[a]||0));i[s]=r[l],i[a]=c,r[l]+=c}),i})}function WO(e,{copyCadPath:t="",partId:n="",transform:r=null,remapOccurrenceId:o="",remapOccurrencePrefix:i=null}={}){const s=e?.manifest||{},a=e?.buffers||{},l=EN(s,a,"faceEdgeRows","faceEdgeRowsView"),c=EN(s,a,"edgeFaceRows","edgeFaceRowsView"),u=zp(jp(s,"occurrences","occurrenceColumns"),r),f=zp(jp(s,"shapes","shapeColumns"),r),m=vN(zp(jp(s,"faces","faceColumns"),r),[["edgeStart","edgeCount"]]),p=vN(zp(jp(s,"edges","edgeColumns"),r),[["faceStart","faceCount"]]),b=Q8(f),y=b.length===1?b[0]:"",x={facePositions:NE(a.facePositions,r),faceIndices:a.faceIndices||new Uint32Array(0),faceIds:a.faceIds||new Uint32Array(0),faceRuns:$8(s,a,"faceProxy","runsView"),faceRunColumns:Array.isArray(s?.faceProxy?.runColumns)?s.faceProxy.runColumns:[],edgePositions:NE(a.edgePositions,r),edgeIndices:a.edgeIndices||new Uint32Array(0),edgeIds:a.edgeIds||new Uint32Array(0),faceEdgeRows:l,edgeFaceRows:c},S=[];S.push(...u.map((R,O)=>yy({selectorType:"occurrence",row:R,rowIndex:O,singleOccurrenceId:y,copyCadPath:t,partId:n,selectorTransform:r,remapOccurrenceId:o,remapOccurrencePrefix:i}))),S.push(...f.map((R,O)=>yy({selectorType:"shape",row:R,rowIndex:O,singleOccurrenceId:y,copyCadPath:t,partId:n,selectorTransform:r,remapOccurrenceId:o,remapOccurrencePrefix:i}))),S.push(...m.map((R,O)=>yy({selectorType:"face",row:R,rowIndex:O,singleOccurrenceId:y,copyCadPath:t,partId:n,selectorTransform:r,relationRows:l,targetRows:p,targetKey:"id",startKey:"edgeStart",countKey:"edgeCount",remapOccurrenceId:o,remapOccurrencePrefix:i,targetSelectorType:"edge"}))),S.push(...p.map((R,O)=>yy({selectorType:"edge",row:R,rowIndex:O,singleOccurrenceId:y,copyCadPath:t,partId:n,selectorTransform:r,relationRows:c,targetRows:m,targetKey:"id",startKey:"faceStart",countKey:"faceCount",remapOccurrenceId:o,remapOccurrencePrefix:i,targetSelectorType:"face"})));const E=S.filter(R=>String(R?.normalizedSelector||"").trim()),C=new Map(E.map(R=>[R.id,R])),A=new Map(E.map(R=>[R.normalizedSelector,R])),N=new Map(E.map(R=>[R.displaySelector,R])),w=new Map(E.filter(R=>R.selectorType==="face").map(R=>[R.rowIndex,R])),_=new Map(E.filter(R=>R.selectorType==="edge").map(R=>[R.rowIndex,R])),I=new Map(u.map((R,O)=>[O,Xv("occurrence",R,O,y,o,i)||String(R?.id||"").trim()]));return{schemaVersion:Number(s.schemaVersion||1),surfaceEdgeRendering:!!s?.capabilities?.surfaceEdgeRendering,capabilities:s.capabilities||null,cadPath:t||String(s.cadRef||"").trim(),stepHash:String(s.stepHash||""),bbox:r?$c(r,s.bbox||{}):s.bbox,occurrences:u,shapes:f,faces:m,edges:p,vertices:[],references:E,referenceMap:C,referenceByNormalizedSelector:A,referenceByDisplaySelector:N,faceReferenceByRowIndex:w,edgeReferenceByRowIndex:_,vertexReferenceByRowIndex:new Map,occurrenceIdByRowIndex:I,faceReferenceMap:new Map(E.filter(R=>R.selectorType==="face").map(R=>[R.id,R])),edgeReferenceMap:new Map(E.filter(R=>R.selectorType==="edge").map(R=>[R.id,R])),vertexReferenceMap:new Map,singleOccurrenceId:y,proxy:x}}function t9(e,{transform:t=null}={}){const n=e?.manifest||{};if(String(n.profile||"")==="surface-edges"){const f=n.edgeRendering&&typeof n.edgeRendering=="object"?n.edgeRendering:{};return{schemaVersion:Number(n.schemaVersion||1),surfaceEdgeRendering:!0,edgeRendering:{visibilityClasses:Array.isArray(f.visibilityClasses)?f.visibilityClasses.map(m=>String(m||"").trim()).filter(Boolean):[],generatedVisibilityClasses:Array.isArray(f.generatedVisibilityClasses)?f.generatedVisibilityClasses.map(m=>String(m||"").trim()).filter(Boolean):[],visibilityClassCounts:f.visibilityClassCounts||{},generatedVisibilityClassCounts:f.generatedVisibilityClassCounts||{}},stepHash:String(n.stepHash||""),bbox:t?$c(t,n.bbox||{}):n.bbox,edges:[],proxy:{edgePositions:new Float32Array(0),edgeIndices:new Uint32Array(0),edgeIds:new Uint32Array(0)}}}const r=e?.buffers||{},o=n?.edgeProxy||{},i=String(o.positionsView||"edgePositions"),s=String(o.indicesView||"edgeIndices"),a=String(o.edgeIdsView||"edgeIds"),l=r[i]instanceof Float32Array?r[i]:new Float32Array(0),c=r[s]instanceof Uint32Array?r[s]:new Uint32Array(0),u=r[a]instanceof Uint32Array?r[a]:new Uint32Array(0);return{schemaVersion:Number(n.schemaVersion||1),stepHash:String(n.stepHash||""),bbox:t?$c(t,n.bbox||{}):n.bbox,edges:zp(jp(n,"edges","edgeColumns"),t),proxy:{edgePositions:NE(l,t),edgeIndices:c,edgeIds:u}}}function KO(e){return(e instanceof Map?[...e.entries()]:gm(e)?Object.entries(e):[]).map(([n,r])=>[String(n||"").trim(),Array.isArray(r)&&r.length>=16?r.slice(0,16).map(o=>Number(o)):null]).filter(([n,r])=>n&&r&&r.every(Number.isFinite))}function n9(e,t){const n=String(t||"").trim(),r=e.find(([i])=>i==="__model__"||i==="*"||i==="__all__")?.[1]||null;let o=null;for(const[i,s]of e)i==="__model__"||i==="*"||i==="__all__"||n&&(n===i||n.startsWith(`${i}.`))&&(!o||i.length>o[0].length)&&(o=[i,s]);return o?.[1]||r}function r9(e,t){return t==="occurrence"?String(e?.id||"").trim():String(e?.occurrenceId||e?.partId||"").trim()}function o9(e){const t=new Map;for(const n of Array.isArray(e?.references)?e.references:[]){const r=String(n?.selectorType||"").trim(),o=Number(n?.rowIndex),i=String(n?.occurrenceId||"").trim();if(!r||!Number.isInteger(o)||!i)continue;let s=t.get(r);s||(s=new Map,t.set(r,s)),s.has(o)||s.set(o,i)}return e?.occurrenceIdByRowIndex instanceof Map&&t.set("occurrence",e.occurrenceIdByRowIndex),t}function Bp(e,t,n,r=null){const o=[];return{rows:(Array.isArray(e)?e:[]).map((s,a)=>{const l=String(r?.get(a)||"").trim()||r9(s,t),c=n9(n,l);return o.push(c),c?e9(s,c):s}),transforms:o}}function i9(e,t){return t?{...e,pickData:W8(e.pickData,t)}:e}function TE({positions:e,indices:t,ids:n,rowTransforms:r,elementSize:o}){if(!(e instanceof Float32Array)||!(t instanceof Uint32Array)||!t.length||!(n instanceof Uint32Array)||!n.length)return{positions:e,indices:t,ids:n};const i=Math.floor(t.length/o),s=new Float32Array(i*o*3),a=new Uint32Array(i*o),l=new Uint32Array(i);let c=0;for(let u=0;u<i;u+=1){const f=Number(n[u]),m=Number.isInteger(f)&&r[f]||null;l[u]=Number.isInteger(f)?f:0;for(let p=0;p<o;p+=1){const y=Number(t[u*o+p])*3,x=c*3,S=[e[y],e[y+1],e[y+2]],E=m?$a(m,S):S;s[x]=E[0],s[x+1]=E[1],s[x+2]=E[2],a[u*o+p]=c,c+=1}}return{positions:s,indices:a,ids:l}}function s9(e,t=null){const n=KO(t);if(!e||!n.length)return e||null;const r=o9(e),o=Bp(e.occurrences,"occurrence",n,r.get("occurrence")),i=Bp(e.shapes,"shape",n,r.get("shape")),s=Bp(e.faces,"face",n,r.get("face")),a=Bp(e.edges,"edge",n,r.get("edge")),l={occurrence:o.transforms,shape:i.transforms,face:s.transforms,edge:a.transforms,vertex:[]},c=(Array.isArray(e.references)?e.references:[]).map(E=>i9(E,l[E?.selectorType]?.[Number(E?.rowIndex)]||null)),u=new Map(c.map(E=>[E.id,E])),f=new Map(c.map(E=>[E.normalizedSelector,E])),m=new Map(c.map(E=>[E.displaySelector,E])),p=new Map(c.filter(E=>E.selectorType==="face").map(E=>[E.rowIndex,E])),b=new Map(c.filter(E=>E.selectorType==="edge").map(E=>[E.rowIndex,E])),y=e.proxy||{},x=TE({positions:y.facePositions,indices:y.faceIndices,ids:y.faceIds,rowTransforms:s.transforms,elementSize:3}),S=TE({positions:y.edgePositions,indices:y.edgeIndices,ids:y.edgeIds,rowTransforms:a.transforms,elementSize:2});return{...e,bbox:e.bbox?$c(n.find(([E])=>E==="__model__"||E==="*"||E==="__all__")?.[1],e.bbox):e.bbox,occurrences:o.rows,shapes:i.rows,faces:s.rows,edges:a.rows,references:c,referenceMap:u,referenceByNormalizedSelector:f,referenceByDisplaySelector:m,faceReferenceByRowIndex:p,edgeReferenceByRowIndex:b,faceReferenceMap:new Map(c.filter(E=>E.selectorType==="face").map(E=>[E.id,E])),edgeReferenceMap:new Map(c.filter(E=>E.selectorType==="edge").map(E=>[E.id,E])),proxy:{...y,facePositions:x.positions,faceIndices:x.indices,faceIds:x.ids,edgePositions:S.positions,edgeIndices:S.indices,edgeIds:S.ids}}}function a9(e){const t=(Array.isArray(e)?e:[]).filter(Boolean);if(!t.length)return null;if(t.length===1)return t[0];let n=0,r=0,o=0,i=0,s=0,a=0,l=0;for(const de of t){const me=de.proxy||{};n+=me.facePositions?.length||0,r+=me.faceIndices?.length||0,o+=me.faceIds?.length||0,i+=me.faceRuns?.length||0,s+=me.edgePositions?.length||0,a+=me.edgeIndices?.length||0,l+=me.edgeIds?.length||0}const c=new Float32Array(n),u=new Uint32Array(r),f=new Uint32Array(o),m=new Float32Array(s),p=new Uint32Array(a),b=new Uint32Array(l),y=Array.isArray(t[0]?.proxy?.faceRunColumns)&&t[0].proxy.faceRunColumns.length?t[0].proxy.faceRunColumns:["occurrenceRow","primitiveIndex","triangleStart","triangleCount","faceRow"],x=y.length,S=Math.max(0,y.indexOf("occurrenceRow")),E=Math.max(0,y.indexOf("faceRow")),C=new Uint32Array(i);let A=0;const N=[],w=[],_=[],I=[],R=[],O=new Map;let F=0,V=0,$=0,K=0,U=0,Y=0,D=0,j=0,ee=0,X=0,ve=0,q=0,re=0,Be=0;for(const de of t){const me=F,we=V,ce=$,Ee=K,Jt=re,mt=Be;for(const ye of de.occurrences||[])N.push(ye);for(const ye of de.shapes||[])w.push(ye);for(const ye of de.faces||[])_.push(ye);for(const ye of de.edges||[])I.push(ye);for(const ye of de.references||[]){const Ie=ye?.selectorType,Je=Ie==="face"?me:Ie==="edge"?we:Ie==="occurrence"?ce:Ie==="shape"?Ee:0,et=Number(ye?.rowIndex);let Xt=Number.isFinite(et)?{...ye,rowIndex:et+Je}:{...ye};const st=ye?.pickData;st&&typeof st=="object"&&(Ie==="edge"&&Number.isFinite(Number(st.segmentStart))?Xt={...Xt,pickData:{...st,segmentStart:Number(st.segmentStart)+mt}}:Ie==="face"&&Number.isFinite(Number(st.triangleStart))&&(Xt={...Xt,pickData:{...st,triangleStart:Number(st.triangleStart)+Jt}})),R.push(Xt)}for(const[ye,Ie]of de.occurrenceIdByRowIndex||new Map)O.set(Number(ye)+ce,Ie);const je=de.proxy||{};if(je.facePositions instanceof Float32Array&&(c.set(je.facePositions,U),U+=je.facePositions.length),je.faceIndices instanceof Uint32Array){for(let ye=0;ye<je.faceIndices.length;ye+=1)u[Y+ye]=je.faceIndices[ye]+j;Y+=je.faceIndices.length}if(je.faceIds instanceof Uint32Array){for(let ye=0;ye<je.faceIds.length;ye+=1)f[D+ye]=je.faceIds[ye]+me;D+=je.faceIds.length}if(j+=Math.floor((je.facePositions?.length||0)/3),re+=Math.floor((je.faceIndices?.length||0)/3),je.faceRuns instanceof Uint32Array&&je.faceRuns.length){for(let ye=0;ye+x<=je.faceRuns.length;ye+=x){for(let Ie=0;Ie<x;Ie+=1)C[A+ye+Ie]=je.faceRuns[ye+Ie];C[A+ye+S]=je.faceRuns[ye+S]+ce,C[A+ye+E]=je.faceRuns[ye+E]+me}A+=je.faceRuns.length}if(je.edgePositions instanceof Float32Array&&(m.set(je.edgePositions,ee),ee+=je.edgePositions.length),je.edgeIndices instanceof Uint32Array){for(let ye=0;ye<je.edgeIndices.length;ye+=1)p[X+ye]=je.edgeIndices[ye]+q;X+=je.edgeIndices.length}if(je.edgeIds instanceof Uint32Array){for(let ye=0;ye<je.edgeIds.length;ye+=1)b[ve+ye]=je.edgeIds[ye]+we;ve+=je.edgeIds.length}q+=Math.floor((je.edgePositions?.length||0)/3),Be+=Math.floor((je.edgeIndices?.length||0)/2),F+=(de.faces||[]).length,V+=(de.edges||[]).length,$+=(de.occurrences||[]).length,K+=(de.shapes||[]).length}const Me=R.filter(de=>String(de?.normalizedSelector||"").trim()),He=t[0];return{...He,bbox:Qu(t.map(de=>de.bbox))||He.bbox,occurrences:N,shapes:w,faces:_,edges:I,vertices:[],references:Me,referenceMap:new Map(Me.map(de=>[de.id,de])),referenceByNormalizedSelector:new Map(Me.map(de=>[de.normalizedSelector,de])),referenceByDisplaySelector:new Map(Me.map(de=>[de.displaySelector,de])),faceReferenceByRowIndex:new Map(Me.filter(de=>de.selectorType==="face").map(de=>[de.rowIndex,de])),edgeReferenceByRowIndex:new Map(Me.filter(de=>de.selectorType==="edge").map(de=>[de.rowIndex,de])),faceReferenceMap:new Map(Me.filter(de=>de.selectorType==="face").map(de=>[de.id,de])),edgeReferenceMap:new Map(Me.filter(de=>de.selectorType==="edge").map(de=>[de.id,de])),occurrenceIdByRowIndex:O,singleOccurrenceId:"",proxy:{...He.proxy||{},facePositions:c,faceIndices:u,faceIds:f,faceRuns:C,faceRunColumns:y,edgePositions:m,edgeIndices:p,edgeIds:b}}}function l9(e,t=null){const n=KO(t);if(!e||!n.length)return e||null;const r=Bp(e.edges,"edge",n),o=e.proxy||{},i=TE({positions:o.edgePositions,indices:o.edgeIndices,ids:o.edgeIds,rowTransforms:r.transforms,elementSize:2}),s=n.find(([a])=>a==="__model__"||a==="*"||a==="__all__")?.[1]||null;return{...e,bbox:s&&e.bbox?$c(s,e.bbox):e.bbox,edges:r.rows,proxy:{...o,edgePositions:i.positions,edgeIndices:i.indices,edgeIds:i.ids}}}const AN=new WeakMap,c9=new WeakMap,u9=new WeakMap,d9=32;function CN(e,t={}){for(const n of Array.isArray(e)?e:[]){const r=n?.material;r&&(r.polygonOffset=!1,r.polygonOffsetFactor=0,r.polygonOffsetUnits=0,r.needsUpdate=!0)}}function qO(e){if(e){for(;e.children?.length;)qO(e.children[0]);if(e.parent?.remove?.(e),typeof e.userData?.beforeDispose=="function"&&(e.userData.beforeDispose(e),delete e.userData.beforeDispose),e.userData?.disposeGeometry!==!1&&e.geometry?.dispose?.(),e.userData?.disposeMaterial!==!1){const t=Array.isArray(e.material)?e.material:[e.material];for(const n of t)n?.dispose?.()}}}function f9(e,t=1e-6){if(!e?.elements||e.elements.length!==16)return!1;const n=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];return e.elements.some((r,o)=>Math.abs(Number(r)-n[o])>t)}function m9(e){if(!e?.elements||e.elements.length!==16)return null;const t=e.elements;return[t[0],t[4],t[8],t[12],t[1],t[5],t[9],t[13],t[2],t[6],t[10],t[14],t[3],t[7],t[11],t[15]]}function p9(e){const t=Number(e);return Number.isFinite(t)?String(t):"0"}function h9(e){return e?.size?[...e.entries()].map(([t,n])=>{const r=Array.isArray(n)||ArrayBuffer.isView(n)?Array.from(n,p9):[];return`${String(t||"").trim()}:${r.join(",")}`}).sort().join("|"):""}function MN(e,t,n,r){if(!t||!n?.size)return null;const o=h9(n);if(!o)return null;let i=e.get(t);if(i||(i=new Map,e.set(t,i)),i.has(o))return i.get(o);const s=r(t,n);return i.set(o,s),i.size>d9&&i.delete(i.keys().next().value),s}function g9(e){const t=new Map;for(const n of Array.isArray(e)?e:[]){const r=String(n?.partId||"").trim();if(!r||!n?.effectMatrix||!f9(n.effectMatrix))continue;const o=m9(n.effectMatrix);o&&t.set(r,o)}return t}function IN(e){return Array.isArray(e?.edges)&&e.edges.some(t=>String(t?.visibilityClass||"").trim())}function y9(e,t){const n=Array.isArray(e?.edges)?e.edges:[],r=Array.isArray(t?.edges)?t.edges:[],o=n.every((i,s)=>{const a=r[s]||{},l=Number(i?.segmentStart),c=Number(a?.segmentStart),u=Number(i?.segmentCount),f=Number(a?.segmentCount);return(!Number.isFinite(l)||!Number.isFinite(c)||l===c)&&(!Number.isFinite(u)||!Number.isFinite(f)||u===f)});return!!(n.length&&n.length===r.length&&o&&!IN(e)&&IN(t))}function b9(e){return!!(e?.surfaceEdgeRendering||Number(e?.schemaVersion||0)>=3)}function x9(e,t){if(!y9(e,t))return e||null;const n=AN.get(e);if(n?.selectorRuntime===t)return n.runtime;const r={...e,edges:e.edges.map((o,i)=>({...o,visibilityClass:t.edges[i]?.visibilityClass||"feature"}))};return AN.set(e,{selectorRuntime:t,runtime:r}),r}function IS({selectorRuntime:e=null,displayEdgeRuntime:t=null,displayRecords:n=null,transformDisplayEdges:r=!0}={}){const o=g9(n),i=x9(t,e),s=o.size&&e?MN(c9,e,o,s9):null,a=r&&o.size&&i?MN(u9,i,o,l9):null,l=s||e||null,c=a||i||null;return{selectorTransforms:o,transformCount:o.size,transformedSelectorRuntime:s,transformedDisplayEdgeRuntime:a,selectorRuntime:l,displayEdgeRuntime:c,topologyRuntime:c||l}}function NS({edgesVisible:e=!1,wireframeMode:t=!1,cadEdgeSource:n=!1,displayEdgeRuntime:r=null,selectorRuntime:o=null,edgeSettings:i=null}={}){return!!(e&&!t&&n&&!b9(r||o)&&cU(r||o))}function NN({transformDetected:e=!1,topologyDisplayEdgesVisible:t=!1,displayEdgeRuntime:n=null,displayRecords:r=[]}={}){return!!(e&&t&&n&&Array.isArray(r)&&r.length>1)}function vf(e){return(Array.isArray(e)?e:[e]).map(t=>String(t||"").trim()).filter(Boolean)}function TN(e,t=[]){const n=String(e||"").trim();if(!n)return!1;for(const r of t)if(n===r||n.startsWith(`${r}.`))return!0;return!1}function Zv(e=[]){const t=[],n=new Set;for(const r of Array.isArray(e)?e:[]){const o=String(r?.partId||"").trim();!o||n.has(o)||(n.add(o),t.push(r))}return t}function S9(e=[]){return Zv(e).map(t=>String(t.partId||"").trim())}function E9(e={},t=[],n={},r=.035,{transformByRecord:o=!1,displayRecords:i=[]}={}){const s=a=>Number.isFinite(Number(a))?Number(a):null;return JSON.stringify({color:String(e?.color||""),opacity:s(e?.opacity),thickness:s(e?.thickness),includePartIds:vf(e?.includePartIds),excludePartIds:vf(e?.excludePartIds),visibilityClasses:vf(e?.visibilityClasses),classes:e?.classes&&typeof e.classes=="object"?Object.fromEntries(Object.entries(e.classes).map(([a,l])=>[a,{color:String(l?.color||""),opacity:s(l?.opacity),thickness:s(l?.thickness)}])):null,highlightColor:String(e?.highlightColor||""),highlightOpacity:s(e?.highlightOpacity),highlightRenderOrder:s(e?.highlightRenderOrder),focusedPartIds:vf(t),dimmedOpacity:r,baseEdge:String(n?.edge||""),baseEdgeOpacity:s(n?.edgeOpacity),baseEdgeThickness:s(n?.edgeThickness),transformByRecord:o===!0,recordPartIds:o===!0?S9(i):[]})}function YO(e,t,n){const r=e?.THREE;if(!r||!t)return!1;const o=Fv(r,n)||new r.Matrix4;t.matrixAutoUpdate=!1;const i=t.matrix instanceof r.Matrix4?t.matrix:new r.Matrix4,s=!i.equals(o);s&&(i.copy(o),t.matrix=i,t.matrixWorldNeedsUpdate=!0);const a=n?.mesh?.visible!==!1&&n?.effectVisible!==!1;return t.visible!==a?(t.visible=a,!0):s}function XO(e,t,n=[]){if(!t?.children?.length)return!1;const r=new Map;for(const i of Zv(n))r.set(String(i.partId||"").trim(),i);let o=!1;for(const i of t.children){const s=String(i?.userData?.cadTopologyDisplayRecordPartId||"").trim(),a=r.get(s)||null;if(!a){i.visible!==!1&&(i.visible=!1,o=!0);continue}o=YO(e,i,a)||o}return o&&e.edgesGroup?.updateMatrixWorld?.(!0),o}function _E(e,t=[]){return XO(e,e?.topologyDisplayEdgeLine,t)}function ZO(e,t,{edgeSettings:n={},focusedPartIds:r=[],viewerTheme:o={},dimmedOpacity:i=.035,displayRecords:s=[]}={}){if(!e?.THREE||!t)return null;const a=Zv(s);if(!a.length)return null;const l=new e.THREE.Group,c=vf(r),u=vf(n?.highlightPartIds),f=Number.isFinite(Number(n?.opacity))?Number(n.opacity):null;for(const m of a){const p=String(m?.partId||"").trim();if(!p||u.length&&!TN(p,u))continue;const b=c.length&&!TN(p,c)?i:f,y=u.length?{...n,highlightPartIds:[p]}:{...n,includePartIds:[p],...b!==null?{opacity:b}:{}},x=Dv(e,t,y,o);x&&(x.userData={...x.userData||{},cadTopologyDisplayRecordPartId:p},YO(e,x,m),l.add(x))}return l.children.length?(l.name="TopologyDisplayEdges",l.userData.partId="__topology__",l.userData.disposeGeometry=!1,l.userData.disposeMaterial=!1,l):null}function by(e,t,{visible:n=!1,edgeSettings:r={},focusedPartIds:o=[],viewerTheme:i={},dimmedOpacity:s=.035,transformByRecord:a=!1,displayRecords:l=[],syncClip:c=null}={}){if(!e?.THREE||!e?.edgesGroup)return!1;const u=n?t:null,f=u?E9(r,o,i,s,{transformByRecord:a,displayRecords:l}):"",m=e.topologyDisplayEdgeLine||null;if(m&&m.userData?.cadTopologyDisplayEdgeRuntime===u&&m.userData?.cadTopologyDisplayEdgeSettingsKey===f){const b=a?XO(e,m,l):!1;return b&&(CN(e.displayRecords,r),c?.(e),e.requestRender?.()),b}if(m&&(e.edgesGroup.remove(m),qO(m),e.topologyDisplayEdgeLine=null),!u)return c?.(e),e.requestRender?.(),!0;const p=a?ZO(e,u,{edgeSettings:r,focusedPartIds:o,viewerTheme:i,dimmedOpacity:s,displayRecords:l}):Dv(e,u,{...r,focusedPartIds:o,dimmedOpacity:s},i);return p?(p.userData={...p.userData||{},cadTopologyDisplayEdgeRuntime:u,cadTopologyDisplayEdgeSettingsKey:f},e.topologyDisplayEdgeLine=p,e.edgesGroup.add(p),e.edgesGroup.updateMatrixWorld?.(!0),CN(e.displayRecords,r),c?.(e),e.requestRender?.(),!0):(c?.(e),e.requestRender?.(),!0)}const Fc=1e-6,w9=Math.PI*(3-Math.sqrt(5)),v9=3,A9=1.5,C9=.45,_N=.8,M9=.05,RN=.5,I9=.05,N9=10;function RE(e,t,n){return Math.min(Math.max(e,t),n)}function ao(e,t=0){const n=Number(e);return Number.isFinite(n)?n:t}function Ga(e){return(Array.isArray(e)||ArrayBuffer.isView(e))&&e.length>=3}function T9(e){const n=String(e||"").trim().match(/^o\d+(?:\.\d+)*/i);return n?n[0].split(".").filter(Boolean):[]}function JO(e,t=[0,0,0]){const n=Ga(e?.min)?e.min:null,r=Ga(e?.max)?e.max:null;return!n||!r?[...t]:[(ao(n[0])+ao(r[0]))/2,(ao(n[1])+ao(r[1]))/2,(ao(n[2])+ao(r[2]))/2]}function ju(e,t){const n=Ga(e?.min)?e.min:null,r=Ga(e?.max)?e.max:null;return!n||!r?0:Math.max(ao(r[t])-ao(n[t]),0)}function QO(e){const t=ju(e,0),n=ju(e,1),r=ju(e,2);return Math.sqrt(t*t+n*n+r*r)/2}function _9(e){const t=[1/0,1/0,1/0],n=[-1/0,-1/0,-1/0];let r=0;for(const o of Array.isArray(e)?e:[])if(!(!Ga(o?.min)||!Ga(o?.max))){r+=1;for(let i=0;i<3;i+=1)t[i]=Math.min(t[i],ao(o.min[i])),n[i]=Math.max(n[i],ao(o.max[i]))}return r>0&&t.every(Number.isFinite)&&n.every(Number.isFinite)?{min:t,max:n}:null}function R9(e){const t=e?.partBounds;return Ga(t?.min)&&Ga(t?.max)?t:null}function P9(e){const t=String(e?.partId||"").trim();return!!(e?.mesh&&t&&t!=="__model__")}function O9(e){const t=e.filter(o=>o.length>0);if(!t.length)return 0;const n=Math.min(...t.map(o=>o.length));let r=0;for(;r<n&&t.every(o=>o[r]===t[0][r]);)r+=1;return Math.min(r,n-1)}function PN(e,t){const n=new Map;for(const r of e){const o=r.segments.length>t?r.segments.slice(0,t+1).join("."):r.partId,i=n.get(o)||{key:o,entries:[],depth:r.segments.length>t?t+1:t};i.entries.push(r),n.set(o,i)}return[...n.values()]}function ek(e,t,n,r){const o=_9(t.map(l=>l.bounds)),i={key:e,entries:t,bounds:o,center:JO(o,[0,0,0]),radius:QO(o),order:Math.min(...t.map(l=>l.index)),children:[]};if(r<=0||t.length<2)return i;let s=PN(t,n),a=n;for(;s.length===1&&s[0].depth>a;)a=s[0].depth,s=PN(t,a);return s.length<2||(i.children=s.map(l=>ek(l.key,l.entries,l.depth,r-1)).sort((l,c)=>l.order-c.order)),i}function Af(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function k9(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function TS(e){return Math.hypot(e[0],e[1],e[2])}function D9(e,t){const n=t*w9,r=[0,0,0],[o,i]=[0,1,2].filter(s=>s!==e);return r[o]=Math.cos(n),r[i]=Math.sin(n),r}function L9(e,t,n,r){const o=_N**(n-1),i=[t.center[0]-e.center[0],t.center[1]-e.center[1],t.center[2]-e.center[2]],s=Math.hypot(i[0],i[1],i[2]);if(!(s<=Math.max(e.radius*M9,Fc))){const x=Af(i,1/s),S=(s*A9+t.radius*C9)*o;return Af(x,S)}if(r.count===0)return r.count+=1,null;const l=r.count;r.count+=1;const c=[ju(t.bounds,0),ju(t.bounds,1),ju(t.bounds,2)],u=c.indexOf(Math.max(...c)),f=ju(e.bounds,u),m=l%2===1?1:-1,p=Math.ceil(l/2),b=(f+c[u])*.55*p*_N**(n-1);if(b<=Fc)return Af(D9(u,l),Math.max(t.radius,Fc));const y=[0,0,0];return y[u]=m,Af(y,b)}function ON(e,t){return t?{min:[ao(e.min[0])+t[0],ao(e.min[1])+t[1],ao(e.min[2])+t[2]],max:[ao(e.max[0])+t[0],ao(e.max[1])+t[1],ao(e.max[2])+t[2]]}:e}function F9(e,t){const n=[];for(let r=0;r<3;r+=1){const o=Math.min(ao(e.max[r]),ao(t.max[r]))-Math.max(ao(e.min[r]),ao(t.min[r]));if(o<=0)return null;n.push(o)}return n}function j9(e,t){const n=e.children;if(n.length<2)return;const r=Math.max(e.radius*I9,Fc);for(let o=0;o<N9;o+=1){let i=!1;for(let s=0;s<n.length;s+=1)for(let a=s+1;a<n.length;a+=1){const l=n[s],c=n[a],u=t.get(l)||null,f=t.get(c)||null;if(!u&&!f)continue;const m=F9(ON(l.bounds,u),ON(c.bounds,f));if(!m)continue;const p=u?f?TS(u)>=TS(f)?l:c:l:c,b=t.get(p),y=TS(b);if(y<=Fc)continue;const x=Af(b,1/y);let S=1/0;for(let E=0;E<3;E+=1)Math.abs(x[E])>.25&&(S=Math.min(S,(m[E]+r)/Math.abs(x[E])));Number.isFinite(S)&&(t.set(p,k9(b,Af(x,S))),i=!0)}if(!i)return}}function z9(e){if(e<=1)return[[0,1]];const t=1/(1+(e-1)*(1-RN));return Array.from({length:e},(n,r)=>{const o=r*t*(1-RN);return[o,Math.min(o+t,1)]})}function B9(e=[],t=null){const n=(Array.isArray(e)?e:[]).filter(P9),r={entries:[],records:n,levelCount:0};if(n.length<2)return r;const o=n.map((p,b)=>({record:p,index:b,partId:String(p.partId||"").trim(),segments:T9(p.partId),bounds:R9(p)})).filter(p=>p.bounds);if(o.length<2)return r;const i=O9(o.map(p=>p.segments)),s=ek("",o,i,v9);if(!s.children.length)return r;t&&Ga(t.min)&&Ga(t.max)&&(s.bounds=t,s.center=JO(t,s.center),s.radius=QO(t));const a=new Map;let l=0;const c=[{node:s,level:1}];for(;c.length;){const{node:p,level:b}=c.shift(),y={count:0},x=[...p.children].sort((E,C)=>C.radius-E.radius),S=new Map;for(const E of x)S.set(E,L9(p,E,b,y));j9(p,S);for(const E of p.children){const C=S.get(E);if(C){l=Math.max(l,b);for(const A of E.entries){const N=a.get(A.record)||[];N.push({vector:C,level:b}),a.set(A.record,N)}}E.children.length&&c.push({node:E,level:b+1})}}if(!l)return r;const u=z9(l),f=p=>u[Math.min(p,l)-1],m=[];for(const[p,b]of a)m.push({record:p,partId:String(p.partId||"").trim(),contributions:b.map(y=>({vector:y.vector,window:f(y.level)}))});return{entries:m,records:n,levelCount:l}}function V9(e,t){const n=e?.[0]??0,r=e?.[1]??1,o=RE((RE(ao(t),0,1)-n)/Math.max(r-n,Fc),0,1);return o*o*(3-2*o)}function $9(e,t){const n=[0,0,0];for(const r of e?.contributions||[]){const o=V9(r.window,t);o<=Fc||(n[0]+=r.vector[0]*o,n[1]+=r.vector[1]*o,n[2]+=r.vector[2]*o)}return n}function G9(e,t,n=1){if(!e?.Matrix4||!t)return;const r=new Set;for(const o of t.entries||[]){const i=o?.record;if(!i)continue;const s=$9(o,n);i.explodedViewMatrix=Math.hypot(s[0],s[1],s[2])>Fc?new e.Matrix4().makeTranslation(s[0],s[1],s[2]):null,r.add(i)}for(const o of t.records||[])o&&!r.has(o)&&(o.explodedViewMatrix=null)}function kN(e=[]){for(const t of Array.isArray(e)?e:[])t&&(t.explodedViewMatrix=null)}function U9(e){return 1-(1-RE(ao(e),0,1))**3}function Bn(e,t=0){return Number.isFinite(Number(e))?Number(e):t}function DN(e){return String(e??"").trim()}function H9(e,t){if(!e?.hasVisibleModel)return!1;const n=DN(e.activeModelKey),r=DN(t);return n||r?n===r:!0}function sp(e,t,n,{followModel:r=!1}={}){const o=Bn(t?.z);if(!r)return o;const i=Array.isArray(e?.min)?Bn(e.min[2]):Bn(e?.min?.z);return Math.min(o,o+i)}function Vp(e,t,n,r,{shadowMapSize:o=2048}={}){const i=Array.isArray(n?.min)?n.min:[0,0,0],s=Array.isArray(n?.max)?n.max:[0,0,0],a=ld(new e.Vector3(Bn(s[0])-Bn(i[0]),Bn(s[1])-Bn(i[1]),Bn(s[2])-Bn(i[2])).length()/2,r);if(t.modelBounds={min:i,max:s},t.modelRadius=a,t.keyLight?.shadow?.camera){const l=typeof t.keyLight.position?.length=="function"?t.keyLight.position.length():0,c=gH(r,{radius:a,keyLightDistance:l});t.keyLight.shadow.mapSize.set(o,o),t.keyLight.shadow.bias=-25e-5,t.keyLight.shadow.normalBias=c.normalBias,t.keyLight.shadow.radius=c.radius,t.keyLight.shadow.camera.left=-c.extent,t.keyLight.shadow.camera.right=c.extent,t.keyLight.shadow.camera.top=c.extent,t.keyLight.shadow.camera.bottom=-c.extent,t.keyLight.shadow.camera.near=.1,t.keyLight.shadow.camera.far=c.far,t.keyLight.shadow.camera.updateProjectionMatrix?.()}return{boundsMin:i,boundsMax:s,radius:a}}function ap(e,t){e?.traverse&&e.traverse(n=>{Lu(n?.material,t)})}function Su(e,t){if(!e?.THREE)return;const n=wO(e.THREE,t,e.modelBounds,e.modelGroup?.position),r=n?[n]:[];e.activeClipPlane=n,e.activeClipPlanes=r,e.renderer&&(e.renderer.localClippingEnabled=!0);for(const o of Array.isArray(e.displayRecords)?e.displayRecords:[])Lu(o.material,r),Lu(o.edgeMaterial,r);ap(e.facePickGroup,r),ap(e.edgePickGroup,r),ap(e.vertexPickGroup,r),ap(e.surfaceLineGroup,r),ap(e.topologyDisplayEdgeLine,r)}const tk=0,W9=1,K9=2,LN=2,_S=1.25,FN=1,lh=32,ix=65535,q9=Math.pow(2,-24),RS=Symbol("SKIP_GENERATION");function Y9(e){return e.index?e.index.count:e.attributes.position.count}function ym(e){return Y9(e)/3}function X9(e,t=ArrayBuffer){return e>65535?new Uint32Array(new t(4*e)):new Uint16Array(new t(2*e))}function Z9(e,t){if(!e.index){const n=e.attributes.position.count,r=t.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer,o=X9(n,r);e.setIndex(new bc(o,1));for(let i=0;i<n;i++)o[i]=i}}function nk(e,t){const n=ym(e),r=t||e.drawRange,o=r.start/3,i=(r.start+r.count)/3,s=Math.max(0,o),a=Math.min(n,i)-s;return[{offset:Math.floor(s),count:Math.floor(a)}]}function rk(e,t){if(!e.groups||!e.groups.length)return nk(e,t);const n=[],r=new Set,o=t||e.drawRange,i=o.start/3,s=(o.start+o.count)/3;for(const l of e.groups){const c=l.start/3,u=(l.start+l.count)/3;r.add(Math.max(i,c)),r.add(Math.min(s,u))}const a=Array.from(r.values()).sort((l,c)=>l-c);for(let l=0;l<a.length-1;l++){const c=a[l],u=a[l+1];n.push({offset:Math.floor(c),count:Math.floor(u-c)})}return n}function J9(e,t){const n=ym(e),r=rk(e,t).sort((s,a)=>s.offset-a.offset),o=r[r.length-1];o.count=Math.min(n-o.offset,o.count);let i=0;return r.forEach(({count:s})=>i+=s),n!==i}function PS(e,t,n,r,o){let i=1/0,s=1/0,a=1/0,l=-1/0,c=-1/0,u=-1/0,f=1/0,m=1/0,p=1/0,b=-1/0,y=-1/0,x=-1/0;for(let S=t*6,E=(t+n)*6;S<E;S+=6){const C=e[S+0],A=e[S+1],N=C-A,w=C+A;N<i&&(i=N),w>l&&(l=w),C<f&&(f=C),C>b&&(b=C);const _=e[S+2],I=e[S+3],R=_-I,O=_+I;R<s&&(s=R),O>c&&(c=O),_<m&&(m=_),_>y&&(y=_);const F=e[S+4],V=e[S+5],$=F-V,K=F+V;$<a&&(a=$),K>u&&(u=K),F<p&&(p=F),F>x&&(x=F)}r[0]=i,r[1]=s,r[2]=a,r[3]=l,r[4]=c,r[5]=u,o[0]=f,o[1]=m,o[2]=p,o[3]=b,o[4]=y,o[5]=x}function Q9(e,t=null,n=null,r=null){const o=e.attributes.position,i=e.index?e.index.array:null,s=ym(e),a=o.normalized;let l;t===null?(l=new Float32Array(s*6*4),n=0,r=s):(l=t,n=n||0,r=r||s);const c=o.array,u=o.offset||0;let f=3;o.isInterleavedBufferAttribute&&(f=o.data.stride);const m=["getX","getY","getZ"];for(let p=n;p<n+r;p++){const b=p*3,y=p*6;let x=b+0,S=b+1,E=b+2;i&&(x=i[x],S=i[S],E=i[E]),a||(x=x*f+u,S=S*f+u,E=E*f+u);for(let C=0;C<3;C++){let A,N,w;a?(A=o[m[C]](x),N=o[m[C]](S),w=o[m[C]](E)):(A=c[x+C],N=c[S+C],w=c[E+C]);let _=A;N<_&&(_=N),w<_&&(_=w);let I=A;N>I&&(I=N),w>I&&(I=w);const R=(I-_)/2,O=C*2;l[y+O+0]=_+R,l[y+O+1]=R+(Math.abs(_)+R)*q9}}return l}function so(e,t,n){return n.min.x=t[e],n.min.y=t[e+1],n.min.z=t[e+2],n.max.x=t[e+3],n.max.y=t[e+4],n.max.z=t[e+5],n}function jN(e){let t=-1,n=-1/0;for(let r=0;r<3;r++){const o=e[r+3]-e[r];o>n&&(n=o,t=r)}return t}function zN(e,t){t.set(e)}function BN(e,t,n){let r,o;for(let i=0;i<3;i++){const s=i+3;r=e[i],o=t[i],n[i]=r<o?r:o,r=e[s],o=t[s],n[s]=r>o?r:o}}function xy(e,t,n){for(let r=0;r<3;r++){const o=t[e+2*r],i=t[e+2*r+1],s=o-i,a=o+i;s<n[r]&&(n[r]=s),a>n[r+3]&&(n[r+3]=a)}}function lp(e){const t=e[3]-e[0],n=e[4]-e[1],r=e[5]-e[2];return 2*(t*n+n*r+r*t)}const hl=32,eK=(e,t)=>e.candidate-t.candidate,cc=new Array(hl).fill().map(()=>({count:0,bounds:new Float32Array(6),rightCacheBounds:new Float32Array(6),leftCacheBounds:new Float32Array(6),candidate:0})),Sy=new Float32Array(6);function tK(e,t,n,r,o,i){let s=-1,a=0;if(i===tk)s=jN(t),s!==-1&&(a=(t[s]+t[s+3])/2);else if(i===W9)s=jN(e),s!==-1&&(a=nK(n,r,o,s));else if(i===K9){const l=lp(e);let c=_S*o;const u=r*6,f=(r+o)*6;for(let m=0;m<3;m++){const p=t[m],x=(t[m+3]-p)/hl;if(o<hl/4){const S=[...cc];S.length=o;let E=0;for(let A=u;A<f;A+=6,E++){const N=S[E];N.candidate=n[A+2*m],N.count=0;const{bounds:w,leftCacheBounds:_,rightCacheBounds:I}=N;for(let R=0;R<3;R++)I[R]=1/0,I[R+3]=-1/0,_[R]=1/0,_[R+3]=-1/0,w[R]=1/0,w[R+3]=-1/0;xy(A,n,w)}S.sort(eK);let C=o;for(let A=0;A<C;A++){const N=S[A];for(;A+1<C&&S[A+1].candidate===N.candidate;)S.splice(A+1,1),C--}for(let A=u;A<f;A+=6){const N=n[A+2*m];for(let w=0;w<C;w++){const _=S[w];N>=_.candidate?xy(A,n,_.rightCacheBounds):(xy(A,n,_.leftCacheBounds),_.count++)}}for(let A=0;A<C;A++){const N=S[A],w=N.count,_=o-N.count,I=N.leftCacheBounds,R=N.rightCacheBounds;let O=0;w!==0&&(O=lp(I)/l);let F=0;_!==0&&(F=lp(R)/l);const V=FN+_S*(O*w+F*_);V<c&&(s=m,c=V,a=N.candidate)}}else{for(let C=0;C<hl;C++){const A=cc[C];A.count=0,A.candidate=p+x+C*x;const N=A.bounds;for(let w=0;w<3;w++)N[w]=1/0,N[w+3]=-1/0}for(let C=u;C<f;C+=6){let w=~~((n[C+2*m]-p)/x);w>=hl&&(w=hl-1);const _=cc[w];_.count++,xy(C,n,_.bounds)}const S=cc[hl-1];zN(S.bounds,S.rightCacheBounds);for(let C=hl-2;C>=0;C--){const A=cc[C],N=cc[C+1];BN(A.bounds,N.rightCacheBounds,A.rightCacheBounds)}let E=0;for(let C=0;C<hl-1;C++){const A=cc[C],N=A.count,w=A.bounds,I=cc[C+1].rightCacheBounds;N!==0&&(E===0?zN(w,Sy):BN(w,Sy,Sy)),E+=N;let R=0,O=0;E!==0&&(R=lp(Sy)/l);const F=o-E;F!==0&&(O=lp(I)/l);const V=FN+_S*(R*E+O*F);V<c&&(s=m,c=V,a=A.candidate)}}}}else console.warn(`MeshBVH: Invalid build strategy value ${i} used.`);return{axis:s,pos:a}}function nK(e,t,n,r){let o=0;for(let i=t,s=t+n;i<s;i++)o+=e[i*6+r*2];return o/n}class OS{constructor(){this.boundingData=new Float32Array(6)}}function rK(e,t,n,r,o,i){let s=r,a=r+o-1;const l=i.pos,c=i.axis*2;for(;;){for(;s<=a&&n[s*6+c]<l;)s++;for(;s<=a&&n[a*6+c]>=l;)a--;if(s<a){for(let u=0;u<3;u++){let f=t[s*3+u];t[s*3+u]=t[a*3+u],t[a*3+u]=f}for(let u=0;u<6;u++){let f=n[s*6+u];n[s*6+u]=n[a*6+u],n[a*6+u]=f}s++,a--}else return s}}function oK(e,t,n,r,o,i){let s=r,a=r+o-1;const l=i.pos,c=i.axis*2;for(;;){for(;s<=a&&n[s*6+c]<l;)s++;for(;s<=a&&n[a*6+c]>=l;)a--;if(s<a){let u=e[s];e[s]=e[a],e[a]=u;for(let f=0;f<6;f++){let m=n[s*6+f];n[s*6+f]=n[a*6+f],n[a*6+f]=m}s++,a--}else return s}}function Gi(e,t){return t[e+15]===65535}function cs(e,t){return t[e+6]}function Bs(e,t){return t[e+14]}function Vs(e){return e+8}function $s(e,t){return t[e+6]}function ok(e,t){return t[e+7]}let ik,$p,vb,sk;const iK=Math.pow(2,32);function PE(e){return"count"in e?1:1+PE(e.left)+PE(e.right)}function sK(e,t,n){return ik=new Float32Array(n),$p=new Uint32Array(n),vb=new Uint16Array(n),sk=new Uint8Array(n),OE(e,t)}function OE(e,t){const n=e/4,r=e/2,o="count"in t,i=t.boundingData;for(let s=0;s<6;s++)ik[n+s]=i[s];if(o)if(t.buffer){const s=t.buffer;sk.set(new Uint8Array(s),e);for(let a=e,l=e+s.byteLength;a<l;a+=lh){const c=a/2;Gi(c,vb)||($p[a/4+6]+=n)}return e+s.byteLength}else{const s=t.offset,a=t.count;return $p[n+6]=s,vb[r+14]=a,vb[r+15]=ix,e+lh}else{const s=t.left,a=t.right,l=t.splitAxis;let c;if(c=OE(e+lh,s),c/4>iK)throw new Error("MeshBVH: Cannot store child pointer greater than 32 bits.");return $p[n+6]=c/4,c=OE(c,a),$p[n+7]=l,c}}function aK(e,t){const n=(e.index?e.index.count:e.attributes.position.count)/3,r=n>2**16,o=r?4:2,i=t?new SharedArrayBuffer(n*o):new ArrayBuffer(n*o),s=r?new Uint32Array(i):new Uint16Array(i);for(let a=0,l=s.length;a<l;a++)s[a]=a;return s}function lK(e,t,n,r,o){const{maxDepth:i,verbose:s,maxLeafTris:a,strategy:l,onProgress:c,indirect:u}=o,f=e._indirectBuffer,m=e.geometry,p=m.index?m.index.array:null,b=u?oK:rK,y=ym(m),x=new Float32Array(6);let S=!1;const E=new OS;return PS(t,n,r,E.boundingData,x),A(E,n,r,x),E;function C(N){c&&c(N/y)}function A(N,w,_,I=null,R=0){if(!S&&R>=i&&(S=!0,s&&(console.warn(`MeshBVH: Max depth of ${i} reached when generating BVH. Consider increasing maxDepth.`),console.warn(m))),_<=a||R>=i)return C(w+_),N.offset=w,N.count=_,N;const O=tK(N.boundingData,I,t,w,_,l);if(O.axis===-1)return C(w+_),N.offset=w,N.count=_,N;const F=b(f,p,t,w,_,O);if(F===w||F===w+_)C(w+_),N.offset=w,N.count=_;else{N.splitAxis=O.axis;const V=new OS,$=w,K=F-w;N.left=V,PS(t,$,K,V.boundingData,x),A(V,$,K,x,R+1);const U=new OS,Y=F,D=_-K;N.right=U,PS(t,Y,D,U.boundingData,x),A(U,Y,D,x,R+1)}return N}}function cK(e,t){const n=e.geometry;t.indirect&&(e._indirectBuffer=aK(n,t.useSharedArrayBuffer),J9(n,t.range)&&!t.verbose&&console.warn('MeshBVH: Provided geometry contains groups or a range that do not fully span the vertex contents while using the "indirect" option. BVH may incorrectly report intersections on unrendered portions of the geometry.')),e._indirectBuffer||Z9(n,t);const r=t.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer,o=Q9(n),i=t.indirect?nk(n,t.range):rk(n,t.range);e._roots=i.map(s=>{const a=lK(e,o,s.offset,s.count,t),l=PE(a),c=new r(lh*l);return sK(0,a,c),c})}class Ol{constructor(){this.min=1/0,this.max=-1/0}setFromPointsField(t,n){let r=1/0,o=-1/0;for(let i=0,s=t.length;i<s;i++){const l=t[i][n];r=l<r?l:r,o=l>o?l:o}this.min=r,this.max=o}setFromPoints(t,n){let r=1/0,o=-1/0;for(let i=0,s=n.length;i<s;i++){const a=n[i],l=t.dot(a);r=l<r?l:r,o=l>o?l:o}this.min=r,this.max=o}isSeparated(t){return this.min>t.max||t.min>this.max}}Ol.prototype.setFromBox=(function(){const e=new Ue;return function(n,r){const o=r.min,i=r.max;let s=1/0,a=-1/0;for(let l=0;l<=1;l++)for(let c=0;c<=1;c++)for(let u=0;u<=1;u++){e.x=o.x*l+i.x*(1-l),e.y=o.y*c+i.y*(1-c),e.z=o.z*u+i.z*(1-u);const f=n.dot(e);s=Math.min(f,s),a=Math.max(f,a)}this.min=s,this.max=a}})();const uK=(function(){const e=new Ue,t=new Ue,n=new Ue;return function(o,i,s){const a=o.start,l=e,c=i.start,u=t;n.subVectors(a,c),e.subVectors(o.end,o.start),t.subVectors(i.end,i.start);const f=n.dot(u),m=u.dot(l),p=u.dot(u),b=n.dot(l),x=l.dot(l)*p-m*m;let S,E;x!==0?S=(f*m-b*p)/x:S=0,E=(f+S*m)/p,s.x=S,s.y=E}})(),Jv=(function(){const e=new Rl,t=new Ue,n=new Ue;return function(o,i,s,a){uK(o,i,e);let l=e.x,c=e.y;if(l>=0&&l<=1&&c>=0&&c<=1){o.at(l,s),i.at(c,a);return}else if(l>=0&&l<=1){c<0?i.at(0,a):i.at(1,a),o.closestPointToPoint(a,!0,s);return}else if(c>=0&&c<=1){l<0?o.at(0,s):o.at(1,s),i.closestPointToPoint(s,!0,a);return}else{let u;l<0?u=o.start:u=o.end;let f;c<0?f=i.start:f=i.end;const m=t,p=n;if(o.closestPointToPoint(f,!0,t),i.closestPointToPoint(u,!0,n),m.distanceToSquared(f)<=p.distanceToSquared(u)){s.copy(m),a.copy(f);return}else{s.copy(u),a.copy(p);return}}}})(),dK=(function(){const e=new Ue,t=new Ue,n=new w2,r=new Il;return function(i,s){const{radius:a,center:l}=i,{a:c,b:u,c:f}=s;if(r.start=c,r.end=u,r.closestPointToPoint(l,!0,e).distanceTo(l)<=a||(r.start=c,r.end=f,r.closestPointToPoint(l,!0,e).distanceTo(l)<=a)||(r.start=u,r.end=f,r.closestPointToPoint(l,!0,e).distanceTo(l)<=a))return!0;const y=s.getPlane(n);if(Math.abs(y.distanceToPoint(l))<=a){const S=y.projectPoint(l,t);if(s.containsPoint(S))return!0}return!1}})(),fK=1e-15;function kS(e){return Math.abs(e)<fK}class pa extends _p{constructor(...t){super(...t),this.isExtendedTriangle=!0,this.satAxes=new Array(4).fill().map(()=>new Ue),this.satBounds=new Array(4).fill().map(()=>new Ol),this.points=[this.a,this.b,this.c],this.sphere=new v2,this.plane=new w2,this.needsUpdate=!0}intersectsSphere(t){return dK(t,this)}update(){const t=this.a,n=this.b,r=this.c,o=this.points,i=this.satAxes,s=this.satBounds,a=i[0],l=s[0];this.getNormal(a),l.setFromPoints(a,o);const c=i[1],u=s[1];c.subVectors(t,n),u.setFromPoints(c,o);const f=i[2],m=s[2];f.subVectors(n,r),m.setFromPoints(f,o);const p=i[3],b=s[3];p.subVectors(r,t),b.setFromPoints(p,o),this.sphere.setFromPoints(this.points),this.plane.setFromNormalAndCoplanarPoint(a,t),this.needsUpdate=!1}}pa.prototype.closestPointToSegment=(function(){const e=new Ue,t=new Ue,n=new Il;return function(o,i=null,s=null){const{start:a,end:l}=o,c=this.points;let u,f=1/0;for(let m=0;m<3;m++){const p=(m+1)%3;n.start.copy(c[m]),n.end.copy(c[p]),Jv(n,o,e,t),u=e.distanceToSquared(t),u<f&&(f=u,i&&i.copy(e),s&&s.copy(t))}return this.closestPointToPoint(a,e),u=a.distanceToSquared(e),u<f&&(f=u,i&&i.copy(e),s&&s.copy(a)),this.closestPointToPoint(l,e),u=l.distanceToSquared(e),u<f&&(f=u,i&&i.copy(e),s&&s.copy(l)),Math.sqrt(f)}})();pa.prototype.intersectsTriangle=(function(){const e=new pa,t=new Array(3),n=new Array(3),r=new Ol,o=new Ol,i=new Ue,s=new Ue,a=new Ue,l=new Ue,c=new Ue,u=new Il,f=new Il,m=new Il,p=new Ue;function b(y,x,S){const E=y.points;let C=0,A=-1;for(let N=0;N<3;N++){const{start:w,end:_}=u;w.copy(E[N]),_.copy(E[(N+1)%3]),u.delta(s);const I=kS(x.distanceToPoint(w));if(kS(x.normal.dot(s))&&I){S.copy(u),C=2;break}const R=x.intersectLine(u,p);if(!R&&I&&p.copy(w),(R||I)&&!kS(p.distanceTo(_))){if(C<=1)(C===1?S.start:S.end).copy(p),I&&(A=C);else if(C>=2){(A===1?S.start:S.end).copy(p),C=2;break}if(C++,C===2&&A===-1)break}}return C}return function(x,S=null,E=!1){this.needsUpdate&&this.update(),x.isExtendedTriangle?x.needsUpdate&&x.update():(e.copy(x),e.update(),x=e);const C=this.plane,A=x.plane;if(Math.abs(C.normal.dot(A.normal))>1-1e-10){const N=this.satBounds,w=this.satAxes;n[0]=x.a,n[1]=x.b,n[2]=x.c;for(let R=0;R<4;R++){const O=N[R],F=w[R];if(r.setFromPoints(F,n),O.isSeparated(r))return!1}const _=x.satBounds,I=x.satAxes;t[0]=this.a,t[1]=this.b,t[2]=this.c;for(let R=0;R<4;R++){const O=_[R],F=I[R];if(r.setFromPoints(F,t),O.isSeparated(r))return!1}for(let R=0;R<4;R++){const O=w[R];for(let F=0;F<4;F++){const V=I[F];if(i.crossVectors(O,V),r.setFromPoints(i,t),o.setFromPoints(i,n),r.isSeparated(o))return!1}}return S&&(E||console.warn("ExtendedTriangle.intersectsTriangle: Triangles are coplanar which does not support an output edge. Setting edge to 0, 0, 0."),S.start.set(0,0,0),S.end.set(0,0,0)),!0}else{const N=b(this,A,f);if(N===1&&x.containsPoint(f.end))return S&&(S.start.copy(f.end),S.end.copy(f.end)),!0;if(N!==2)return!1;const w=b(x,C,m);if(w===1&&this.containsPoint(m.end))return S&&(S.start.copy(m.end),S.end.copy(m.end)),!0;if(w!==2)return!1;if(f.delta(a),m.delta(l),a.dot(l)<0){let $=m.start;m.start=m.end,m.end=$}const _=f.start.dot(a),I=f.end.dot(a),R=m.start.dot(a),O=m.end.dot(a),F=I<R,V=_<O;return _!==O&&R!==I&&F===V?!1:(S&&(c.subVectors(f.start,m.start),c.dot(a)>0?S.start.copy(f.start):S.start.copy(m.start),c.subVectors(f.end,m.end),c.dot(a)<0?S.end.copy(f.end):S.end.copy(m.end)),!0)}}})();pa.prototype.distanceToPoint=(function(){const e=new Ue;return function(n){return this.closestPointToPoint(n,e),n.distanceTo(e)}})();pa.prototype.distanceToTriangle=(function(){const e=new Ue,t=new Ue,n=["a","b","c"],r=new Il,o=new Il;return function(s,a=null,l=null){const c=a||l?r:null;if(this.intersectsTriangle(s,c))return(a||l)&&(a&&c.getCenter(a),l&&c.getCenter(l)),0;let u=1/0;for(let f=0;f<3;f++){let m;const p=n[f],b=s[p];this.closestPointToPoint(b,e),m=b.distanceToSquared(e),m<u&&(u=m,a&&a.copy(e),l&&l.copy(b));const y=this[p];s.closestPointToPoint(y,e),m=y.distanceToSquared(e),m<u&&(u=m,a&&a.copy(y),l&&l.copy(e))}for(let f=0;f<3;f++){const m=n[f],p=n[(f+1)%3];r.set(this[m],this[p]);for(let b=0;b<3;b++){const y=n[b],x=n[(b+1)%3];o.set(s[y],s[x]),Jv(r,o,e,t);const S=e.distanceToSquared(t);S<u&&(u=S,a&&a.copy(e),l&&l.copy(t))}}return Math.sqrt(u)}})();class ki{constructor(t,n,r){this.isOrientedBox=!0,this.min=new Ue,this.max=new Ue,this.matrix=new $r,this.invMatrix=new $r,this.points=new Array(8).fill().map(()=>new Ue),this.satAxes=new Array(3).fill().map(()=>new Ue),this.satBounds=new Array(3).fill().map(()=>new Ol),this.alignedSatBounds=new Array(3).fill().map(()=>new Ol),this.needsUpdate=!1,t&&this.min.copy(t),n&&this.max.copy(n),r&&this.matrix.copy(r)}set(t,n,r){this.min.copy(t),this.max.copy(n),this.matrix.copy(r),this.needsUpdate=!0}copy(t){this.min.copy(t.min),this.max.copy(t.max),this.matrix.copy(t.matrix),this.needsUpdate=!0}}ki.prototype.update=(function(){return function(){const t=this.matrix,n=this.min,r=this.max,o=this.points;for(let c=0;c<=1;c++)for(let u=0;u<=1;u++)for(let f=0;f<=1;f++){const m=1*c|2*u|4*f,p=o[m];p.x=c?r.x:n.x,p.y=u?r.y:n.y,p.z=f?r.z:n.z,p.applyMatrix4(t)}const i=this.satBounds,s=this.satAxes,a=o[0];for(let c=0;c<3;c++){const u=s[c],f=i[c],m=1<<c,p=o[m];u.subVectors(a,p),f.setFromPoints(u,o)}const l=this.alignedSatBounds;l[0].setFromPointsField(o,"x"),l[1].setFromPointsField(o,"y"),l[2].setFromPointsField(o,"z"),this.invMatrix.copy(this.matrix).invert(),this.needsUpdate=!1}})();ki.prototype.intersectsBox=(function(){const e=new Ol;return function(n){this.needsUpdate&&this.update();const r=n.min,o=n.max,i=this.satBounds,s=this.satAxes,a=this.alignedSatBounds;if(e.min=r.x,e.max=o.x,a[0].isSeparated(e)||(e.min=r.y,e.max=o.y,a[1].isSeparated(e))||(e.min=r.z,e.max=o.z,a[2].isSeparated(e)))return!1;for(let l=0;l<3;l++){const c=s[l],u=i[l];if(e.setFromBox(c,n),u.isSeparated(e))return!1}return!0}})();ki.prototype.intersectsTriangle=(function(){const e=new pa,t=new Array(3),n=new Ol,r=new Ol,o=new Ue;return function(s){this.needsUpdate&&this.update(),s.isExtendedTriangle?s.needsUpdate&&s.update():(e.copy(s),e.update(),s=e);const a=this.satBounds,l=this.satAxes;t[0]=s.a,t[1]=s.b,t[2]=s.c;for(let m=0;m<3;m++){const p=a[m],b=l[m];if(n.setFromPoints(b,t),p.isSeparated(n))return!1}const c=s.satBounds,u=s.satAxes,f=this.points;for(let m=0;m<3;m++){const p=c[m],b=u[m];if(n.setFromPoints(b,f),p.isSeparated(n))return!1}for(let m=0;m<3;m++){const p=l[m];for(let b=0;b<4;b++){const y=u[b];if(o.crossVectors(p,y),n.setFromPoints(o,t),r.setFromPoints(o,f),n.isSeparated(r))return!1}}return!0}})();ki.prototype.closestPointToPoint=(function(){return function(t,n){return this.needsUpdate&&this.update(),n.copy(t).applyMatrix4(this.invMatrix).clamp(this.min,this.max).applyMatrix4(this.matrix),n}})();ki.prototype.distanceToPoint=(function(){const e=new Ue;return function(n){return this.closestPointToPoint(n,e),n.distanceTo(e)}})();ki.prototype.distanceToBox=(function(){const e=["x","y","z"],t=new Array(12).fill().map(()=>new Il),n=new Array(12).fill().map(()=>new Il),r=new Ue,o=new Ue;return function(s,a=0,l=null,c=null){if(this.needsUpdate&&this.update(),this.intersectsBox(s))return(l||c)&&(s.getCenter(o),this.closestPointToPoint(o,r),s.closestPointToPoint(r,o),l&&l.copy(r),c&&c.copy(o)),0;const u=a*a,f=s.min,m=s.max,p=this.points;let b=1/0;for(let x=0;x<8;x++){const S=p[x];o.copy(S).clamp(f,m);const E=S.distanceToSquared(o);if(E<b&&(b=E,l&&l.copy(S),c&&c.copy(o),E<u))return Math.sqrt(E)}let y=0;for(let x=0;x<3;x++)for(let S=0;S<=1;S++)for(let E=0;E<=1;E++){const C=(x+1)%3,A=(x+2)%3,N=S<<C|E<<A,w=1<<x|S<<C|E<<A,_=p[N],I=p[w];t[y].set(_,I);const O=e[x],F=e[C],V=e[A],$=n[y],K=$.start,U=$.end;K[O]=f[O],K[F]=S?f[F]:m[F],K[V]=E?f[V]:m[F],U[O]=m[O],U[F]=S?f[F]:m[F],U[V]=E?f[V]:m[F],y++}for(let x=0;x<=1;x++)for(let S=0;S<=1;S++)for(let E=0;E<=1;E++){o.x=x?m.x:f.x,o.y=S?m.y:f.y,o.z=E?m.z:f.z,this.closestPointToPoint(o,r);const C=o.distanceToSquared(r);if(C<b&&(b=C,l&&l.copy(r),c&&c.copy(o),C<u))return Math.sqrt(C)}for(let x=0;x<12;x++){const S=t[x];for(let E=0;E<12;E++){const C=n[E];Jv(S,C,r,o);const A=r.distanceToSquared(o);if(A<b&&(b=A,l&&l.copy(r),c&&c.copy(o),A<u))return Math.sqrt(A)}}return Math.sqrt(b)}})();class Qv{constructor(t){this._getNewPrimitive=t,this._primitives=[]}getPrimitive(){const t=this._primitives;return t.length===0?this._getNewPrimitive():t.pop()}releasePrimitive(t){this._primitives.push(t)}}class mK extends Qv{constructor(){super(()=>new pa)}}const Gs=new mK;class pK{constructor(){this.float32Array=null,this.uint16Array=null,this.uint32Array=null;const t=[];let n=null;this.setBuffer=r=>{n&&t.push(n),n=r,this.float32Array=new Float32Array(r),this.uint16Array=new Uint16Array(r),this.uint32Array=new Uint32Array(r)},this.clearBuffer=()=>{n=null,this.float32Array=null,this.uint16Array=null,this.uint32Array=null,t.length!==0&&this.setBuffer(t.pop())}}}const _r=new pK;let Tc,Cf;const Wd=[],Ey=new Qv(()=>new Ha);function hK(e,t,n,r,o,i){Tc=Ey.getPrimitive(),Cf=Ey.getPrimitive(),Wd.push(Tc,Cf),_r.setBuffer(e._roots[t]);const s=kE(0,e.geometry,n,r,o,i);_r.clearBuffer(),Ey.releasePrimitive(Tc),Ey.releasePrimitive(Cf),Wd.pop(),Wd.pop();const a=Wd.length;return a>0&&(Cf=Wd[a-1],Tc=Wd[a-2]),s}function kE(e,t,n,r,o=null,i=0,s=0){const{float32Array:a,uint16Array:l,uint32Array:c}=_r;let u=e*2;if(Gi(u,l)){const m=cs(e,c),p=Bs(u,l);return so(e,a,Tc),r(m,p,!1,s,i+e,Tc)}else{let m=function(V){const{uint16Array:$,uint32Array:K}=_r;let U=V*2;for(;!Gi(U,$);)V=Vs(V),U=V*2;return cs(V,K)},p=function(V){const{uint16Array:$,uint32Array:K}=_r;let U=V*2;for(;!Gi(U,$);)V=$s(V,K),U=V*2;return cs(V,K)+Bs(U,$)};const b=Vs(e),y=$s(e,c);let x=b,S=y,E,C,A,N;if(o&&(A=Tc,N=Cf,so(x,a,A),so(S,a,N),E=o(A),C=o(N),C<E)){x=y,S=b;const V=E;E=C,C=V,A=N}A||(A=Tc,so(x,a,A));const w=Gi(x*2,l),_=n(A,w,E,s+1,i+x);let I;if(_===LN){const V=m(x),K=p(x)-V;I=r(V,K,!0,s+1,i+x,A)}else I=_&&kE(x,t,n,r,o,i,s+1);if(I)return!0;N=Cf,so(S,a,N);const R=Gi(S*2,l),O=n(N,R,C,s+1,i+S);let F;if(O===LN){const V=m(S),K=p(S)-V;F=r(V,K,!0,s+1,i+S,N)}else F=O&&kE(S,t,n,r,o,i,s+1);return!!F}}const cp=new Ue,DS=new Ue;function gK(e,t,n={},r=0,o=1/0){const i=r*r,s=o*o;let a=1/0,l=null;if(e.shapecast({boundsTraverseOrder:u=>(cp.copy(t).clamp(u.min,u.max),cp.distanceToSquared(t)),intersectsBounds:(u,f,m)=>m<a&&m<s,intersectsTriangle:(u,f)=>{u.closestPointToPoint(t,cp);const m=t.distanceToSquared(cp);return m<a&&(DS.copy(cp),a=m,l=f),m<i}}),a===1/0)return null;const c=Math.sqrt(a);return n.point?n.point.copy(DS):n.point=DS.clone(),n.distance=c,n.faceIndex=l,n}const Kd=new Ue,qd=new Ue,Yd=new Ue,wy=new Rl,vy=new Rl,Ay=new Rl,VN=new Ue,$N=new Ue,GN=new Ue,Cy=new Ue;function yK(e,t,n,r,o,i,s,a){let l;if(i===L5?l=e.intersectTriangle(r,n,t,!0,o):l=e.intersectTriangle(t,n,r,i!==A2,o),l===null)return null;const c=e.origin.distanceTo(o);return c<s||c>a?null:{distance:c,point:o.clone()}}function bK(e,t,n,r,o,i,s,a,l,c,u){Kd.fromBufferAttribute(t,i),qd.fromBufferAttribute(t,s),Yd.fromBufferAttribute(t,a);const f=yK(e,Kd,qd,Yd,Cy,l,c,u);if(f){r&&(wy.fromBufferAttribute(r,i),vy.fromBufferAttribute(r,s),Ay.fromBufferAttribute(r,a),f.uv=_p.getInterpolation(Cy,Kd,qd,Yd,wy,vy,Ay,new Rl)),o&&(wy.fromBufferAttribute(o,i),vy.fromBufferAttribute(o,s),Ay.fromBufferAttribute(o,a),f.uv1=_p.getInterpolation(Cy,Kd,qd,Yd,wy,vy,Ay,new Rl)),n&&(VN.fromBufferAttribute(n,i),$N.fromBufferAttribute(n,s),GN.fromBufferAttribute(n,a),f.normal=_p.getInterpolation(Cy,Kd,qd,Yd,VN,$N,GN,new Ue),f.normal.dot(e.direction)>0&&f.normal.multiplyScalar(-1));const m={a:i,b:s,c:a,normal:new Ue,materialIndex:0};_p.getNormal(Kd,qd,Yd,m.normal),f.face=m,f.faceIndex=i}return f}function sx(e,t,n,r,o,i,s){const a=r*3;let l=a+0,c=a+1,u=a+2;const f=e.index;e.index&&(l=f.getX(l),c=f.getX(c),u=f.getX(u));const{position:m,normal:p,uv:b,uv1:y}=e.attributes,x=bK(n,m,p,b,y,l,c,u,t,i,s);return x?(x.faceIndex=r,o&&o.push(x),x):null}function To(e,t,n,r){const o=e.a,i=e.b,s=e.c;let a=t,l=t+1,c=t+2;n&&(a=n.getX(a),l=n.getX(l),c=n.getX(c)),o.x=r.getX(a),o.y=r.getY(a),o.z=r.getZ(a),i.x=r.getX(l),i.y=r.getY(l),i.z=r.getZ(l),s.x=r.getX(c),s.y=r.getY(c),s.z=r.getZ(c)}function xK(e,t,n,r,o,i,s,a){const{geometry:l,_indirectBuffer:c}=e;for(let u=r,f=r+o;u<f;u++)sx(l,t,n,u,i,s,a)}function SK(e,t,n,r,o,i,s){const{geometry:a,_indirectBuffer:l}=e;let c=1/0,u=null;for(let f=r,m=r+o;f<m;f++){let p;p=sx(a,t,n,f,null,i,s),p&&p.distance<c&&(u=p,c=p.distance)}return u}function EK(e,t,n,r,o,i,s){const{geometry:a}=n,{index:l}=a,c=a.attributes.position;for(let u=e,f=t+e;u<f;u++){let m;if(m=u,To(s,m*3,l,c),s.needsUpdate=!0,r(s,m,o,i))return!0}return!1}function wK(e,t=null){t&&Array.isArray(t)&&(t=new Set(t));const n=e.geometry,r=n.index?n.index.array:null,o=n.attributes.position;let i,s,a,l,c=0;const u=e._roots;for(let m=0,p=u.length;m<p;m++)i=u[m],s=new Uint32Array(i),a=new Uint16Array(i),l=new Float32Array(i),f(0,c),c+=i.byteLength;function f(m,p,b=!1){const y=m*2;if(a[y+15]===ix){const S=s[m+6],E=a[y+14];let C=1/0,A=1/0,N=1/0,w=-1/0,_=-1/0,I=-1/0;for(let R=3*S,O=3*(S+E);R<O;R++){let F=r[R];const V=o.getX(F),$=o.getY(F),K=o.getZ(F);V<C&&(C=V),V>w&&(w=V),$<A&&(A=$),$>_&&(_=$),K<N&&(N=K),K>I&&(I=K)}return l[m+0]!==C||l[m+1]!==A||l[m+2]!==N||l[m+3]!==w||l[m+4]!==_||l[m+5]!==I?(l[m+0]=C,l[m+1]=A,l[m+2]=N,l[m+3]=w,l[m+4]=_,l[m+5]=I,!0):!1}else{const S=m+8,E=s[m+6],C=S+p,A=E+p;let N=b,w=!1,_=!1;t?N||(w=t.has(C),_=t.has(A),N=!w&&!_):(w=!0,_=!0);const I=N||w,R=N||_;let O=!1;I&&(O=f(S,p,N));let F=!1;R&&(F=f(E,p,N));const V=O||F;if(V)for(let $=0;$<3;$++){const K=S+$,U=E+$,Y=l[K],D=l[K+3],j=l[U],ee=l[U+3];l[m+$]=Y<j?Y:j,l[m+$+3]=D>ee?D:ee}return V}}}function Gc(e,t,n,r,o){let i,s,a,l,c,u;const f=1/n.direction.x,m=1/n.direction.y,p=1/n.direction.z,b=n.origin.x,y=n.origin.y,x=n.origin.z;let S=t[e],E=t[e+3],C=t[e+1],A=t[e+3+1],N=t[e+2],w=t[e+3+2];return f>=0?(i=(S-b)*f,s=(E-b)*f):(i=(E-b)*f,s=(S-b)*f),m>=0?(a=(C-y)*m,l=(A-y)*m):(a=(A-y)*m,l=(C-y)*m),i>l||a>s||((a>i||isNaN(i))&&(i=a),(l<s||isNaN(s))&&(s=l),p>=0?(c=(N-x)*p,u=(w-x)*p):(c=(w-x)*p,u=(N-x)*p),i>u||c>s)?!1:((c>i||i!==i)&&(i=c),(u<s||s!==s)&&(s=u),i<=o&&s>=r)}function vK(e,t,n,r,o,i,s,a){const{geometry:l,_indirectBuffer:c}=e;for(let u=r,f=r+o;u<f;u++){let m=c?c[u]:u;sx(l,t,n,m,i,s,a)}}function AK(e,t,n,r,o,i,s){const{geometry:a,_indirectBuffer:l}=e;let c=1/0,u=null;for(let f=r,m=r+o;f<m;f++){let p;p=sx(a,t,n,l?l[f]:f,null,i,s),p&&p.distance<c&&(u=p,c=p.distance)}return u}function CK(e,t,n,r,o,i,s){const{geometry:a}=n,{index:l}=a,c=a.attributes.position;for(let u=e,f=t+e;u<f;u++){let m;if(m=n.resolveTriangleIndex(u),To(s,m*3,l,c),s.needsUpdate=!0,r(s,m,o,i))return!0}return!1}function MK(e,t,n,r,o,i,s){_r.setBuffer(e._roots[t]),DE(0,e,n,r,o,i,s),_r.clearBuffer()}function DE(e,t,n,r,o,i,s){const{float32Array:a,uint16Array:l,uint32Array:c}=_r,u=e*2;if(Gi(u,l)){const m=cs(e,c),p=Bs(u,l);xK(t,n,r,m,p,o,i,s)}else{const m=Vs(e);Gc(m,a,r,i,s)&&DE(m,t,n,r,o,i,s);const p=$s(e,c);Gc(p,a,r,i,s)&&DE(p,t,n,r,o,i,s)}}const IK=["x","y","z"];function NK(e,t,n,r,o,i){_r.setBuffer(e._roots[t]);const s=LE(0,e,n,r,o,i);return _r.clearBuffer(),s}function LE(e,t,n,r,o,i){const{float32Array:s,uint16Array:a,uint32Array:l}=_r;let c=e*2;if(Gi(c,a)){const f=cs(e,l),m=Bs(c,a);return SK(t,n,r,f,m,o,i)}else{const f=ok(e,l),m=IK[f],b=r.direction[m]>=0;let y,x;b?(y=Vs(e),x=$s(e,l)):(y=$s(e,l),x=Vs(e));const E=Gc(y,s,r,o,i)?LE(y,t,n,r,o,i):null;if(E){const N=E.point[m];if(b?N<=s[x+f]:N>=s[x+f+3])return E}const A=Gc(x,s,r,o,i)?LE(x,t,n,r,o,i):null;return E&&A?E.distance<=A.distance?E:A:E||A||null}}const My=new Ha,Xd=new pa,Zd=new pa,up=new $r,UN=new ki,Iy=new ki;function TK(e,t,n,r){_r.setBuffer(e._roots[t]);const o=FE(0,e,n,r);return _r.clearBuffer(),o}function FE(e,t,n,r,o=null){const{float32Array:i,uint16Array:s,uint32Array:a}=_r;let l=e*2;if(o===null&&(n.boundingBox||n.computeBoundingBox(),UN.set(n.boundingBox.min,n.boundingBox.max,r),o=UN),Gi(l,s)){const u=t.geometry,f=u.index,m=u.attributes.position,p=n.index,b=n.attributes.position,y=cs(e,a),x=Bs(l,s);if(up.copy(r).invert(),n.boundsTree)return so(e,i,Iy),Iy.matrix.copy(up),Iy.needsUpdate=!0,n.boundsTree.shapecast({intersectsBounds:E=>Iy.intersectsBox(E),intersectsTriangle:E=>{E.a.applyMatrix4(r),E.b.applyMatrix4(r),E.c.applyMatrix4(r),E.needsUpdate=!0;for(let C=y*3,A=(x+y)*3;C<A;C+=3)if(To(Zd,C,f,m),Zd.needsUpdate=!0,E.intersectsTriangle(Zd))return!0;return!1}});for(let S=y*3,E=(x+y)*3;S<E;S+=3){To(Xd,S,f,m),Xd.a.applyMatrix4(up),Xd.b.applyMatrix4(up),Xd.c.applyMatrix4(up),Xd.needsUpdate=!0;for(let C=0,A=p.count;C<A;C+=3)if(To(Zd,C,p,b),Zd.needsUpdate=!0,Xd.intersectsTriangle(Zd))return!0}}else{const u=e+8,f=a[e+6];return so(u,i,My),!!(o.intersectsBox(My)&&FE(u,t,n,r,o)||(so(f,i,My),o.intersectsBox(My)&&FE(f,t,n,r,o)))}}const Ny=new $r,LS=new ki,dp=new ki,_K=new Ue,RK=new Ue,PK=new Ue,OK=new Ue;function kK(e,t,n,r={},o={},i=0,s=1/0){t.boundingBox||t.computeBoundingBox(),LS.set(t.boundingBox.min,t.boundingBox.max,n),LS.needsUpdate=!0;const a=e.geometry,l=a.attributes.position,c=a.index,u=t.attributes.position,f=t.index,m=Gs.getPrimitive(),p=Gs.getPrimitive();let b=_K,y=RK,x=null,S=null;o&&(x=PK,S=OK);let E=1/0,C=null,A=null;return Ny.copy(n).invert(),dp.matrix.copy(Ny),e.shapecast({boundsTraverseOrder:N=>LS.distanceToBox(N),intersectsBounds:(N,w,_)=>_<E&&_<s?(w&&(dp.min.copy(N.min),dp.max.copy(N.max),dp.needsUpdate=!0),!0):!1,intersectsRange:(N,w)=>{if(t.boundsTree)return t.boundsTree.shapecast({boundsTraverseOrder:I=>dp.distanceToBox(I),intersectsBounds:(I,R,O)=>O<E&&O<s,intersectsRange:(I,R)=>{for(let O=I,F=I+R;O<F;O++){To(p,3*O,f,u),p.a.applyMatrix4(n),p.b.applyMatrix4(n),p.c.applyMatrix4(n),p.needsUpdate=!0;for(let V=N,$=N+w;V<$;V++){To(m,3*V,c,l),m.needsUpdate=!0;const K=m.distanceToTriangle(p,b,x);if(K<E&&(y.copy(b),S&&S.copy(x),E=K,C=V,A=O),K<i)return!0}}}});{const _=ym(t);for(let I=0,R=_;I<R;I++){To(p,3*I,f,u),p.a.applyMatrix4(n),p.b.applyMatrix4(n),p.c.applyMatrix4(n),p.needsUpdate=!0;for(let O=N,F=N+w;O<F;O++){To(m,3*O,c,l),m.needsUpdate=!0;const V=m.distanceToTriangle(p,b,x);if(V<E&&(y.copy(b),S&&S.copy(x),E=V,C=O,A=I),V<i)return!0}}}}}),Gs.releasePrimitive(m),Gs.releasePrimitive(p),E===1/0?null:(r.point?r.point.copy(y):r.point=y.clone(),r.distance=E,r.faceIndex=C,o&&(o.point?o.point.copy(S):o.point=S.clone(),o.point.applyMatrix4(Ny),y.applyMatrix4(Ny),o.distance=y.sub(o.point).length(),o.faceIndex=A),r)}function DK(e,t=null){t&&Array.isArray(t)&&(t=new Set(t));const n=e.geometry,r=n.index?n.index.array:null,o=n.attributes.position;let i,s,a,l,c=0;const u=e._roots;for(let m=0,p=u.length;m<p;m++)i=u[m],s=new Uint32Array(i),a=new Uint16Array(i),l=new Float32Array(i),f(0,c),c+=i.byteLength;function f(m,p,b=!1){const y=m*2;if(a[y+15]===ix){const S=s[m+6],E=a[y+14];let C=1/0,A=1/0,N=1/0,w=-1/0,_=-1/0,I=-1/0;for(let R=S,O=S+E;R<O;R++){const F=3*e.resolveTriangleIndex(R);for(let V=0;V<3;V++){let $=F+V;$=r?r[$]:$;const K=o.getX($),U=o.getY($),Y=o.getZ($);K<C&&(C=K),K>w&&(w=K),U<A&&(A=U),U>_&&(_=U),Y<N&&(N=Y),Y>I&&(I=Y)}}return l[m+0]!==C||l[m+1]!==A||l[m+2]!==N||l[m+3]!==w||l[m+4]!==_||l[m+5]!==I?(l[m+0]=C,l[m+1]=A,l[m+2]=N,l[m+3]=w,l[m+4]=_,l[m+5]=I,!0):!1}else{const S=m+8,E=s[m+6],C=S+p,A=E+p;let N=b,w=!1,_=!1;t?N||(w=t.has(C),_=t.has(A),N=!w&&!_):(w=!0,_=!0);const I=N||w,R=N||_;let O=!1;I&&(O=f(S,p,N));let F=!1;R&&(F=f(E,p,N));const V=O||F;if(V)for(let $=0;$<3;$++){const K=S+$,U=E+$,Y=l[K],D=l[K+3],j=l[U],ee=l[U+3];l[m+$]=Y<j?Y:j,l[m+$+3]=D>ee?D:ee}return V}}}function LK(e,t,n,r,o,i,s){_r.setBuffer(e._roots[t]),jE(0,e,n,r,o,i,s),_r.clearBuffer()}function jE(e,t,n,r,o,i,s){const{float32Array:a,uint16Array:l,uint32Array:c}=_r,u=e*2;if(Gi(u,l)){const m=cs(e,c),p=Bs(u,l);vK(t,n,r,m,p,o,i,s)}else{const m=Vs(e);Gc(m,a,r,i,s)&&jE(m,t,n,r,o,i,s);const p=$s(e,c);Gc(p,a,r,i,s)&&jE(p,t,n,r,o,i,s)}}const FK=["x","y","z"];function jK(e,t,n,r,o,i){_r.setBuffer(e._roots[t]);const s=zE(0,e,n,r,o,i);return _r.clearBuffer(),s}function zE(e,t,n,r,o,i){const{float32Array:s,uint16Array:a,uint32Array:l}=_r;let c=e*2;if(Gi(c,a)){const f=cs(e,l),m=Bs(c,a);return AK(t,n,r,f,m,o,i)}else{const f=ok(e,l),m=FK[f],b=r.direction[m]>=0;let y,x;b?(y=Vs(e),x=$s(e,l)):(y=$s(e,l),x=Vs(e));const E=Gc(y,s,r,o,i)?zE(y,t,n,r,o,i):null;if(E){const N=E.point[m];if(b?N<=s[x+f]:N>=s[x+f+3])return E}const A=Gc(x,s,r,o,i)?zE(x,t,n,r,o,i):null;return E&&A?E.distance<=A.distance?E:A:E||A||null}}const Ty=new Ha,Jd=new pa,Qd=new pa,fp=new $r,HN=new ki,_y=new ki;function zK(e,t,n,r){_r.setBuffer(e._roots[t]);const o=BE(0,e,n,r);return _r.clearBuffer(),o}function BE(e,t,n,r,o=null){const{float32Array:i,uint16Array:s,uint32Array:a}=_r;let l=e*2;if(o===null&&(n.boundingBox||n.computeBoundingBox(),HN.set(n.boundingBox.min,n.boundingBox.max,r),o=HN),Gi(l,s)){const u=t.geometry,f=u.index,m=u.attributes.position,p=n.index,b=n.attributes.position,y=cs(e,a),x=Bs(l,s);if(fp.copy(r).invert(),n.boundsTree)return so(e,i,_y),_y.matrix.copy(fp),_y.needsUpdate=!0,n.boundsTree.shapecast({intersectsBounds:E=>_y.intersectsBox(E),intersectsTriangle:E=>{E.a.applyMatrix4(r),E.b.applyMatrix4(r),E.c.applyMatrix4(r),E.needsUpdate=!0;for(let C=y,A=x+y;C<A;C++)if(To(Qd,3*t.resolveTriangleIndex(C),f,m),Qd.needsUpdate=!0,E.intersectsTriangle(Qd))return!0;return!1}});for(let S=y,E=x+y;S<E;S++){const C=t.resolveTriangleIndex(S);To(Jd,3*C,f,m),Jd.a.applyMatrix4(fp),Jd.b.applyMatrix4(fp),Jd.c.applyMatrix4(fp),Jd.needsUpdate=!0;for(let A=0,N=p.count;A<N;A+=3)if(To(Qd,A,p,b),Qd.needsUpdate=!0,Jd.intersectsTriangle(Qd))return!0}}else{const u=e+8,f=a[e+6];return so(u,i,Ty),!!(o.intersectsBox(Ty)&&BE(u,t,n,r,o)||(so(f,i,Ty),o.intersectsBox(Ty)&&BE(f,t,n,r,o)))}}const Ry=new $r,FS=new ki,mp=new ki,BK=new Ue,VK=new Ue,$K=new Ue,GK=new Ue;function UK(e,t,n,r={},o={},i=0,s=1/0){t.boundingBox||t.computeBoundingBox(),FS.set(t.boundingBox.min,t.boundingBox.max,n),FS.needsUpdate=!0;const a=e.geometry,l=a.attributes.position,c=a.index,u=t.attributes.position,f=t.index,m=Gs.getPrimitive(),p=Gs.getPrimitive();let b=BK,y=VK,x=null,S=null;o&&(x=$K,S=GK);let E=1/0,C=null,A=null;return Ry.copy(n).invert(),mp.matrix.copy(Ry),e.shapecast({boundsTraverseOrder:N=>FS.distanceToBox(N),intersectsBounds:(N,w,_)=>_<E&&_<s?(w&&(mp.min.copy(N.min),mp.max.copy(N.max),mp.needsUpdate=!0),!0):!1,intersectsRange:(N,w)=>{if(t.boundsTree){const _=t.boundsTree;return _.shapecast({boundsTraverseOrder:I=>mp.distanceToBox(I),intersectsBounds:(I,R,O)=>O<E&&O<s,intersectsRange:(I,R)=>{for(let O=I,F=I+R;O<F;O++){const V=_.resolveTriangleIndex(O);To(p,3*V,f,u),p.a.applyMatrix4(n),p.b.applyMatrix4(n),p.c.applyMatrix4(n),p.needsUpdate=!0;for(let $=N,K=N+w;$<K;$++){const U=e.resolveTriangleIndex($);To(m,3*U,c,l),m.needsUpdate=!0;const Y=m.distanceToTriangle(p,b,x);if(Y<E&&(y.copy(b),S&&S.copy(x),E=Y,C=$,A=O),Y<i)return!0}}}})}else{const _=ym(t);for(let I=0,R=_;I<R;I++){To(p,3*I,f,u),p.a.applyMatrix4(n),p.b.applyMatrix4(n),p.c.applyMatrix4(n),p.needsUpdate=!0;for(let O=N,F=N+w;O<F;O++){const V=e.resolveTriangleIndex(O);To(m,3*V,c,l),m.needsUpdate=!0;const $=m.distanceToTriangle(p,b,x);if($<E&&(y.copy(b),S&&S.copy(x),E=$,C=O,A=I),$<i)return!0}}}}}),Gs.releasePrimitive(m),Gs.releasePrimitive(p),E===1/0?null:(r.point?r.point.copy(y):r.point=y.clone(),r.distance=E,r.faceIndex=C,o&&(o.point?o.point.copy(S):o.point=S.clone(),o.point.applyMatrix4(Ry),y.applyMatrix4(Ry),o.distance=y.sub(o.point).length(),o.faceIndex=A),r)}function HK(){return typeof SharedArrayBuffer<"u"}const ch=new _r.constructor,b0=new _r.constructor,xc=new Qv(()=>new Ha),ef=new Ha,tf=new Ha,jS=new Ha,zS=new Ha;let BS=!1;function WK(e,t,n,r){if(BS)throw new Error("MeshBVH: Recursive calls to bvhcast not supported.");BS=!0;const o=e._roots,i=t._roots;let s,a=0,l=0;const c=new $r().copy(n).invert();for(let u=0,f=o.length;u<f;u++){ch.setBuffer(o[u]),l=0;const m=xc.getPrimitive();so(0,ch.float32Array,m),m.applyMatrix4(c);for(let p=0,b=i.length;p<b&&(b0.setBuffer(i[p]),s=Qs(0,0,n,c,r,a,l,0,0,m),b0.clearBuffer(),l+=i[p].length,!s);p++);if(xc.releasePrimitive(m),ch.clearBuffer(),a+=o[u].length,s)break}return BS=!1,s}function Qs(e,t,n,r,o,i=0,s=0,a=0,l=0,c=null,u=!1){let f,m;u?(f=b0,m=ch):(f=ch,m=b0);const p=f.float32Array,b=f.uint32Array,y=f.uint16Array,x=m.float32Array,S=m.uint32Array,E=m.uint16Array,C=e*2,A=t*2,N=Gi(C,y),w=Gi(A,E);let _=!1;if(w&&N)u?_=o(cs(t,S),Bs(t*2,E),cs(e,b),Bs(e*2,y),l,s+t,a,i+e):_=o(cs(e,b),Bs(e*2,y),cs(t,S),Bs(t*2,E),a,i+e,l,s+t);else if(w){const I=xc.getPrimitive();so(t,x,I),I.applyMatrix4(n);const R=Vs(e),O=$s(e,b);so(R,p,ef),so(O,p,tf);const F=I.intersectsBox(ef),V=I.intersectsBox(tf);_=F&&Qs(t,R,r,n,o,s,i,l,a+1,I,!u)||V&&Qs(t,O,r,n,o,s,i,l,a+1,I,!u),xc.releasePrimitive(I)}else{const I=Vs(t),R=$s(t,S);so(I,x,jS),so(R,x,zS);const O=c.intersectsBox(jS),F=c.intersectsBox(zS);if(O&&F)_=Qs(e,I,n,r,o,i,s,a,l+1,c,u)||Qs(e,R,n,r,o,i,s,a,l+1,c,u);else if(O)if(N)_=Qs(e,I,n,r,o,i,s,a,l+1,c,u);else{const V=xc.getPrimitive();V.copy(jS).applyMatrix4(n);const $=Vs(e),K=$s(e,b);so($,p,ef),so(K,p,tf);const U=V.intersectsBox(ef),Y=V.intersectsBox(tf);_=U&&Qs(I,$,r,n,o,s,i,l,a+1,V,!u)||Y&&Qs(I,K,r,n,o,s,i,l,a+1,V,!u),xc.releasePrimitive(V)}else if(F)if(N)_=Qs(e,R,n,r,o,i,s,a,l+1,c,u);else{const V=xc.getPrimitive();V.copy(zS).applyMatrix4(n);const $=Vs(e),K=$s(e,b);so($,p,ef),so(K,p,tf);const U=V.intersectsBox(ef),Y=V.intersectsBox(tf);_=U&&Qs(R,$,r,n,o,s,i,l,a+1,V,!u)||Y&&Qs(R,K,r,n,o,s,i,l,a+1,V,!u),xc.releasePrimitive(V)}}return _}const Py=new ki,WN=new Ha,KK={strategy:tk,maxDepth:40,maxLeafTris:10,useSharedArrayBuffer:!1,setBoundingBox:!0,onProgress:null,indirect:!1,verbose:!0,range:null};class ax{static serialize(t,n={}){n={cloneBuffers:!0,...n};const r=t.geometry,o=t._roots,i=t._indirectBuffer,s=r.getIndex();let a;return n.cloneBuffers?a={roots:o.map(l=>l.slice()),index:s?s.array.slice():null,indirectBuffer:i?i.slice():null}:a={roots:o,index:s?s.array:null,indirectBuffer:i},a}static deserialize(t,n,r={}){r={setIndex:!0,indirect:!!t.indirectBuffer,...r};const{index:o,roots:i,indirectBuffer:s}=t,a=new ax(n,{...r,[RS]:!0});if(a._roots=i,a._indirectBuffer=s||null,r.setIndex){const l=n.getIndex();if(l===null){const c=new bc(t.index,1,!1);n.setIndex(c)}else l.array!==o&&(l.array.set(o),l.needsUpdate=!0)}return a}get indirect(){return!!this._indirectBuffer}constructor(t,n={}){if(t.isBufferGeometry){if(t.index&&t.index.isInterleavedBufferAttribute)throw new Error("MeshBVH: InterleavedBufferAttribute is not supported for the index attribute.")}else throw new Error("MeshBVH: Only BufferGeometries are supported.");if(n=Object.assign({...KK,[RS]:!1},n),n.useSharedArrayBuffer&&!HK())throw new Error("MeshBVH: SharedArrayBuffer is not available.");this.geometry=t,this._roots=null,this._indirectBuffer=null,n[RS]||(cK(this,n),!t.boundingBox&&n.setBoundingBox&&(t.boundingBox=this.getBoundingBox(new Ha))),this.resolveTriangleIndex=n.indirect?r=>this._indirectBuffer[r]:r=>r}refit(t=null){return(this.indirect?DK:wK)(this,t)}traverse(t,n=0){const r=this._roots[n],o=new Uint32Array(r),i=new Uint16Array(r);s(0);function s(a,l=0){const c=a*2,u=i[c+15]===ix;if(u){const f=o[a+6],m=i[c+14];t(l,u,new Float32Array(r,a*4,6),f,m)}else{const f=a+lh/4,m=o[a+6],p=o[a+7];t(l,u,new Float32Array(r,a*4,6),p)||(s(f,l+1),s(m,l+1))}}}raycast(t,n=VM,r=0,o=1/0){const i=this._roots,s=this.geometry,a=[],l=n.isMaterial,c=Array.isArray(n),u=s.groups,f=l?n.side:n,m=this.indirect?LK:MK;for(let p=0,b=i.length;p<b;p++){const y=c?n[u[p].materialIndex].side:f,x=a.length;if(m(this,p,y,t,a,r,o),c){const S=u[p].materialIndex;for(let E=x,C=a.length;E<C;E++)a[E].face.materialIndex=S}}return a}raycastFirst(t,n=VM,r=0,o=1/0){const i=this._roots,s=this.geometry,a=n.isMaterial,l=Array.isArray(n);let c=null;const u=s.groups,f=a?n.side:n,m=this.indirect?jK:NK;for(let p=0,b=i.length;p<b;p++){const y=l?n[u[p].materialIndex].side:f,x=m(this,p,y,t,r,o);x!=null&&(c==null||x.distance<c.distance)&&(c=x,l&&(x.face.materialIndex=u[p].materialIndex))}return c}intersectsGeometry(t,n){let r=!1;const o=this._roots,i=this.indirect?zK:TK;for(let s=0,a=o.length;s<a&&(r=i(this,s,t,n),!r);s++);return r}shapecast(t){const n=Gs.getPrimitive(),r=this.indirect?CK:EK;let{boundsTraverseOrder:o,intersectsBounds:i,intersectsRange:s,intersectsTriangle:a}=t;if(s&&a){const f=s;s=(m,p,b,y,x)=>f(m,p,b,y,x)?!0:r(m,p,this,a,b,y,n)}else s||(a?s=(f,m,p,b)=>r(f,m,this,a,p,b,n):s=(f,m,p)=>p);let l=!1,c=0;const u=this._roots;for(let f=0,m=u.length;f<m;f++){const p=u[f];if(l=hK(this,f,i,s,o,c),l)break;c+=p.byteLength}return Gs.releasePrimitive(n),l}bvhcast(t,n,r){let{intersectsRanges:o,intersectsTriangles:i}=r;const s=Gs.getPrimitive(),a=this.geometry.index,l=this.geometry.attributes.position,c=this.indirect?b=>{const y=this.resolveTriangleIndex(b);To(s,y*3,a,l)}:b=>{To(s,b*3,a,l)},u=Gs.getPrimitive(),f=t.geometry.index,m=t.geometry.attributes.position,p=t.indirect?b=>{const y=t.resolveTriangleIndex(b);To(u,y*3,f,m)}:b=>{To(u,b*3,f,m)};if(i){const b=(y,x,S,E,C,A,N,w)=>{for(let _=S,I=S+E;_<I;_++){p(_),u.a.applyMatrix4(n),u.b.applyMatrix4(n),u.c.applyMatrix4(n),u.needsUpdate=!0;for(let R=y,O=y+x;R<O;R++)if(c(R),s.needsUpdate=!0,i(s,u,R,_,C,A,N,w))return!0}return!1};if(o){const y=o;o=function(x,S,E,C,A,N,w,_){return y(x,S,E,C,A,N,w,_)?!0:b(x,S,E,C,A,N,w,_)}}else o=b}return WK(this,t,n,o)}intersectsBox(t,n){return Py.set(t.min,t.max,n),Py.needsUpdate=!0,this.shapecast({intersectsBounds:r=>Py.intersectsBox(r),intersectsTriangle:r=>Py.intersectsTriangle(r)})}intersectsSphere(t){return this.shapecast({intersectsBounds:n=>t.intersectsBox(n),intersectsTriangle:n=>n.intersectsSphere(t)})}closestPointToGeometry(t,n,r={},o={},i=0,s=1/0){return(this.indirect?UK:kK)(this,t,n,r,o,i,s)}closestPointToPoint(t,n={},r=0,o=1/0){return gK(this,t,n,r,o)}getBoundingBox(t){return t.makeEmpty(),this._roots.forEach(r=>{so(0,new Float32Array(r),WN),t.union(WN)}),t}}function KN(e,t,n){return e===null?null:(e.point.applyMatrix4(t.matrixWorld),e.distance=e.point.distanceTo(n.ray.origin),e.object=t,e)}const Oy=new j5,qN=new Ue,YN=new $r,qK=$b.prototype.raycast,YK=F5.prototype.raycast,XN=new Ue,ii=new $b,ky=[];function XK(e,t){this.isBatchedMesh?ZK.call(this,e,t):JK.call(this,e,t)}function ZK(e,t){if(this.boundsTrees){const n=this.boundsTrees,r=this._drawInfo,o=this._drawRanges,i=this.matrixWorld;ii.material=this.material,ii.geometry=this.geometry;const s=ii.geometry.boundsTree,a=ii.geometry.drawRange;ii.geometry.boundingSphere===null&&(ii.geometry.boundingSphere=new v2);for(let l=0,c=r.length;l<c;l++){if(!this.getVisibleAt(l))continue;const u=r[l].geometryIndex;if(ii.geometry.boundsTree=n[u],this.getMatrixAt(l,ii.matrixWorld).premultiply(i),!ii.geometry.boundsTree){this.getBoundingBoxAt(u,ii.geometry.boundingBox),this.getBoundingSphereAt(u,ii.geometry.boundingSphere);const f=o[u];ii.geometry.setDrawRange(f.start,f.count)}ii.raycast(e,ky);for(let f=0,m=ky.length;f<m;f++){const p=ky[f];p.object=this,p.batchId=l,t.push(p)}ky.length=0}ii.geometry.boundsTree=s,ii.geometry.drawRange=a,ii.material=null,ii.geometry=null}else YK.call(this,e,t)}function JK(e,t){if(this.geometry.boundsTree){if(this.material===void 0)return;YN.copy(this.matrixWorld).invert(),Oy.copy(e.ray).applyMatrix4(YN),XN.setFromMatrixScale(this.matrixWorld),qN.copy(Oy.direction).multiply(XN);const n=qN.length(),r=e.near/n,o=e.far/n,i=this.geometry.boundsTree;if(e.firstHitOnly===!0){const s=KN(i.raycastFirst(Oy,this.material,r,o),this,e);s&&t.push(s)}else{const s=i.raycast(Oy,this.material,r,o);for(let a=0,l=s.length;a<l;a++){const c=KN(s[a],this,e);c&&t.push(c)}}}else qK.call(this,e,t)}const ak=Object.freeze({indirect:!0}),lk=25e5;function ck(e){if(e?.index)return Math.floor(e.index.count/3);const t=e?.attributes?.position;return t?Math.floor(t.count/3):0}function VE(e){if(typeof globalThis.requestIdleCallback=="function"){globalThis.requestIdleCallback(()=>e(),{timeout:2e3});return}setTimeout(e,0)}function uk(e){e?.isMesh&&(e.raycast=XK)}function QK(e,t){if(!e||e.boundsTree||e.userData.__bvhSkipped)return;const n=ck(e);if(!n||n>t||!e.attributes?.position){e.userData.__bvhSkipped=!0;return}try{e.boundsTree=new ax(e,ak)}catch{e.userData.__bvhSkipped=!0}}function e7(e,{maxTriangles:t=lk}={}){const n=Array.isArray(e?.displayRecords)?e.displayRecords:[],r=[];for(const i of n){const s=i?.mesh,a=s?.geometry;a&&(uk(s),!a.boundsTree&&!a.userData.__bvhSkipped&&!a.userData.__bvhQueued&&(a.userData.__bvhQueued=!0,r.push(a)))}const o=()=>{const i=r.shift();i&&(delete i.userData.__bvhQueued,QK(i,t),r.length&&VE(o))};r.length&&VE(o)}function t7(e,t,{maxTriangles:n=lk}={}){const r=e?.facePickMesh,o=t?.proxy;if(!r?.geometry||!o)return;uk(r);const i=o.__facePickBvh;if(i&&i.__builtFromIndexArray===o.faceIndices){r.geometry.boundsTree=i;return}o.__facePickBvhPending||o.__facePickBvhSkipped||(o.__facePickBvhPending=!0,VE(()=>{o.__facePickBvhPending=!1;const a=e?.facePickMesh?.geometry;if(!(!a||a.index?.array!==o.faceIndices)){if(ck(a)>n){o.__facePickBvhSkipped=!0;return}try{const l=new ax(a,ak);l.__builtFromIndexArray=o.faceIndices,o.__facePickBvh=l,a.boundsTree=l}catch{o.__facePickBvhSkipped=!0}}}))}const dk=4294967295;function n7(e,t){const n=t?.proxy||{};if(!(n.facePositions instanceof Float32Array)||!(n.faceIndices instanceof Uint32Array)||!n.faceIndices.length)return null;const r=new e.BufferGeometry;r.setAttribute("position",new e.BufferAttribute(n.facePositions,3)),r.setIndex(new e.BufferAttribute(n.faceIndices,1));const o=new e.MeshBasicMaterial({color:16777215,side:e.DoubleSide,transparent:!0,opacity:0,depthWrite:!1,toneMapped:!1,colorWrite:!1}),i=new e.Mesh(r,o);return i.userData.faceIds=n.faceIds||new Uint32Array(0),i.frustumCulled=!1,i}function r7(e){const t=Array.isArray(e?.proxy?.faceRunColumns)&&e.proxy.faceRunColumns.length?e.proxy.faceRunColumns:["occurrenceRow","primitiveIndex","triangleStart","triangleCount","faceRow"];return{stride:t.length,occurrenceRow:Math.max(0,t.indexOf("occurrenceRow")),primitiveIndex:Math.max(0,t.indexOf("primitiveIndex")),triangleStart:Math.max(0,t.indexOf("triangleStart")),triangleCount:Math.max(0,t.indexOf("triangleCount")),faceRow:Math.max(0,t.indexOf("faceRow"))}}function eA(e,t){const n=t?.proxy?.faceRuns,r=Math.max(0,Math.floor(Number(e?.triangleCount||0)));if(!(n instanceof Uint32Array)||!n.length||r<=0)return null;const o=String(e?.occurrenceId||e?.id||"").trim();if(!o)return null;const i=Math.max(0,Math.floor(Number(e?.primitiveIndex||0))),s=r7(t),a=new Uint32Array(r);a.fill(dk);const l=Array.isArray(e?.sourcePartRanges)?e.sourcePartRanges.map(u=>({occurrenceId:String(u?.occurrenceId||"").trim(),primitiveIndex:Math.max(0,Math.floor(Number(u?.primitiveIndex||0))),triangleOffset:Math.max(0,Math.floor(Number(u?.triangleOffset||0))),triangleCount:Math.max(0,Math.floor(Number(u?.triangleCount||0)))})).filter(u=>u.occurrenceId&&u.triangleCount>0):[];let c=!1;for(let u=0;u+s.stride<=n.length;u+=s.stride){const f=t?.occurrenceIdByRowIndex?.get?.(Number(n[u+s.occurrenceRow])),m=Number(n[u+s.triangleStart]),p=Number(n[u+s.triangleCount]),b=Number(n[u+s.faceRow]);if(!Number.isInteger(m)||!Number.isInteger(p)||!Number.isInteger(b)||m<0||p<=0||b<0)continue;if(l.length){for(const x of l){if(f!==x.occurrenceId||Number(n[u+s.primitiveIndex])!==x.primitiveIndex||m>=x.triangleCount)continue;const S=x.triangleOffset+m,E=Math.min(x.triangleOffset+m+p,x.triangleOffset+x.triangleCount,r);E<=S||S>=r||(a.fill(b,S,E),c=!0)}continue}if(f!==o||Number(n[u+s.primitiveIndex])!==i||m>=r)continue;const y=Math.min(m+p,r);a.fill(b,m,y),c=!0}return c?a:null}function fk(e,t){const n=Math.floor((e?.indices?.length||0)/3),r=Array.isArray(e?.parts)?e.parts:[];if(n<=0||!r.length)return null;const o=new Uint32Array(n);o.fill(dk);let i=!1;for(const s of r){const a=eA(s,t);if(!a)continue;const l=Math.max(0,Math.floor(Number(s?.triangleOffset||0))),c=Math.min(l+a.length,o.length);c<=l||(o.set(a.subarray(0,c-l),l),i=!0)}return i?o:null}function o7(e,t){const n=e?.sourcePart||e?.part||null,r=String(n?.id||n?.occurrenceId||"").trim();return r&&r===t?n:null}function ZN(e,t,n){const r=Array.isArray(e?.displayRecords)?e.displayRecords:[];if(!r.length)return;const o=new Map((Array.isArray(t?.parts)?t.parts:[]).map(i=>[String(i?.id||""),i]).filter(([i])=>i));for(const i of r){const s=i?.mesh;if(!s?.userData)continue;let a=null;const l=String(i?.partId||"").trim();if(l&&l!=="__model__"){const c=o.get(l)||o7(i,l);a=c?eA(c,n):null}else a=fk(t,n);a?s.userData.faceIds=a:delete s.userData.faceIds}}function i7(e,t){const n=t?.proxy||{};if(!(n.edgePositions instanceof Float32Array)||!(n.edgeIndices instanceof Uint32Array)||!n.edgeIndices.length)return null;const r=new e.BufferGeometry;r.setAttribute("position",new e.BufferAttribute(n.edgePositions,3)),r.setIndex(new e.BufferAttribute(n.edgeIndices,1));const o=new e.LineBasicMaterial({color:16777215,transparent:!0,opacity:0,depthWrite:!1,toneMapped:!1}),i=new e.LineSegments(r,o);return i.userData.edgeIds=n.edgeIds||new Uint32Array(0),i.frustumCulled=!1,i}function s7(e,t){const n=t?.proxy||{};if(!(n.vertexPositions instanceof Float32Array)||!n.vertexPositions.length)return null;const r=new e.BufferGeometry;r.setAttribute("position",new e.BufferAttribute(n.vertexPositions,3));const o=new e.PointsMaterial({color:16777215,transparent:!0,opacity:0,size:1.5,sizeAttenuation:!1,depthWrite:!1,toneMapped:!1}),i=new e.Points(r,o);return i.userData.vertexIds=n.vertexIds||new Uint32Array(0),i.frustumCulled=!1,i}function VS(e,t){if(typeof t=="function"){t(e);return}for(;e?.children?.length;)e.remove(e.children[0])}function $S(e,t,n=null,{clearSceneGroup:r=null}={}){if(!e?.THREE||!e?.facePickGroup||!e?.edgePickGroup||!e?.vertexPickGroup)return;VS(e.facePickGroup,r),VS(e.edgePickGroup,r),VS(e.vertexPickGroup,r),e.facePickMesh=null,e.edgePickLines=null,e.vertexPickPoints=null,e.edgePickObjects=[];const o=n7(e.THREE,t);o&&(e.facePickMesh=o,e.facePickGroup.add(o));const i=i7(e.THREE,t);i&&(e.edgePickLines=i,e.edgePickGroup.add(i),e.edgePickObjects=[i]);const s=s7(e.THREE,t);s&&(e.vertexPickPoints=s,e.vertexPickGroup.add(s)),n?(e.facePickGroup.position.copy(n),e.edgePickGroup.position.copy(n),e.vertexPickGroup.position.copy(n)):(e.facePickGroup.position.set(0,0,0),e.edgePickGroup.position.set(0,0,0),e.vertexPickGroup.position.set(0,0,0)),e.facePickGroup.updateMatrixWorld(!0),e.edgePickGroup.updateMatrixWorld(!0),e.vertexPickGroup.updateMatrixWorld(!0),t7(e,t)}const a7=new Set(["","SPHERICAL_SURFACE","TOROIDAL_SURFACE","BSPLINE_SURFACE"]);function l7(e){return Math.hypot(e[0],e[1],e[2])}function $E(e){const t=l7(e);return t<=1e-9?null:[e[0]/t,e[1]/t,e[2]/t]}function mk(e,t){return[Number(e[0])-Number(t[0]),Number(e[1])-Number(t[1]),Number(e[2])-Number(t[2])]}function uh(e,t){return Number(e[0])*Number(t[0])+Number(e[1])*Number(t[1])+Number(e[2])*Number(t[2])}function c7(e,t){let n=e;for(;n-t>Math.PI;)n-=Math.PI*2;for(;n-t<-Math.PI;)n+=Math.PI*2;return n}function JN(e){return Array.isArray(e)&&e.length>=3?[Number(e[0]),Number(e[1]),Number(e[2])]:null}function QN(e){return Array.isArray(e)&&e.length>=2?[Number(e[0]),Number(e[1])]:null}function u7(e,t){if(!Array.isArray(e)||!Array.isArray(t?.origin)||!Array.isArray(t?.xDir)||!Array.isArray(t?.yDir))return null;const n=mk(e,t.origin);return[uh(n,t.xDir),uh(n,t.yDir)]}function d7(e,t,n=null){if(!Array.isArray(e)||!Array.isArray(t?.origin)||!Array.isArray(t?.axis)||!Array.isArray(t?.xDir)||!Array.isArray(t?.yDir)||Number(t?.radius)<=0)return null;const r=Number(t.radius),o=mk(e,t.origin),i=uh(o,t.axis),s=[o[0]-Number(t.axis[0])*i,o[1]-Number(t.axis[1])*i,o[2]-Number(t.axis[2])*i],a=Math.atan2(uh(s,t.yDir),uh(s,t.xDir)),l=Number(n);return[(Number.isFinite(l)?c7(a,l):a)*r,i]}function f7(e,t,n=null){return!e||!Array.isArray(t)||t.length<3?null:e.type==="PLANE"&&Array.isArray(e.origin)&&Array.isArray(e.xDir)&&Array.isArray(e.yDir)?u7(t,e):e.type==="CYLINDRICAL_SURFACE"&&Array.isArray(e.origin)&&Array.isArray(e.axis)&&Array.isArray(e.xDir)&&Array.isArray(e.yDir)&&Number(e.radius)>0?d7(t,e,n):null}function m7(e,t){if(!e||!Array.isArray(t)||t.length<2)return null;if(e.type==="PLANE"&&Array.isArray(e.origin)&&Array.isArray(e.xDir)&&Array.isArray(e.yDir))return[e.origin[0]+e.xDir[0]*t[0]+e.yDir[0]*t[1],e.origin[1]+e.xDir[1]*t[0]+e.yDir[1]*t[1],e.origin[2]+e.xDir[2]*t[0]+e.yDir[2]*t[1]];if(e.type==="CYLINDRICAL_SURFACE"&&Array.isArray(e.origin)&&Array.isArray(e.axis)&&Array.isArray(e.xDir)&&Array.isArray(e.yDir)&&Number(e.radius)>0){const n=Number(e.radius),r=t[0]/n,o=Math.cos(r),i=Math.sin(r);return[e.origin[0]+e.axis[0]*t[1]+n*(e.xDir[0]*o+e.yDir[0]*i),e.origin[1]+e.axis[1]*t[1]+n*(e.xDir[1]*o+e.yDir[1]*i),e.origin[2]+e.axis[2]*t[1]+n*(e.xDir[2]*o+e.yDir[2]*i)]}return null}function p7(e,t){if(!e||!Array.isArray(t)||t.length<2)return null;if(e.type==="PLANE")return $E(e.normal||[]);if(e.type==="CYLINDRICAL_SURFACE"&&Array.isArray(e.xDir)&&Array.isArray(e.yDir)&&Number(e.radius)>0){const n=t[0]/Number(e.radius);return $E([e.xDir[0]*Math.cos(n)+e.yDir[0]*Math.sin(n),e.xDir[1]*Math.cos(n)+e.yDir[1]*Math.sin(n),e.xDir[2]*Math.cos(n)+e.yDir[2]*Math.sin(n)])}return null}function h7(e,t,{segments:n=48,offset:r=.04}={}){const o=e?.pickData?.surface||{},i=JN(t?.startPoint),s=JN(t?.endPoint),a=QN(t?.startUv),l=QN(t?.endUv);if(o.type==="PLANE"&&i&&s){const c=$E(e?.pickData?.normal||o.normal||[]),u=p=>c?[p[0]+c[0]*r,p[1]+c[1]*r,p[2]+c[2]*r]:p,f=u(i),m=u(s);return[f[0],f[1],f[2],m[0],m[1],m[2]]}if(o.type==="CYLINDRICAL_SURFACE"&&a&&l){const c=[],u=Math.max(4,Math.round(Number(n)||48));let f=null;for(let m=0;m<=u;m+=1){const p=m/u,b=[a[0]+(l[0]-a[0])*p,a[1]+(l[1]-a[1])*p],y=m7(o,b);if(!y)continue;const x=p7(o,b),S=x?[y[0]+x[0]*r,y[1]+x[1]*r,y[2]+x[2]*r]:y;f&&c.push(f[0],f[1],f[2],S[0],S[1],S[2]),f=S}return c}return i&&s?[i[0],i[1],i[2],s[0],s[1],s[2]]:[]}function g7(e){const t=String(e||"").split(",");if(t.length!==2)throw new Error("Screenshot capture failed");const r=t[0].match(/data:(.*?);base64/)?.[1]||"image/png",o=atob(t[1]),i=new Uint8Array(o.length);for(let s=0;s<o.length;s+=1)i[s]=o.charCodeAt(s);return new Blob([i],{type:r})}async function y7(e){return new Promise((t,n)=>{if(!e){n(new Error("Screenshot capture failed"));return}if(typeof e.toBlob=="function"){e.toBlob(r=>{if(r){t(r);return}n(new Error("Screenshot capture failed"))},"image/png");return}try{t(g7(e.toDataURL("image/png")))}catch(r){n(r)}})}function pk(e,t,n){const r=Math.max(1,Math.floor(Number(t)||1)),o=Math.max(1,Math.floor(Number(n)||1)),i=Math.min(Math.max(0,Math.floor(Number(e?.x)||0)),r-1),s=Math.min(Math.max(0,Math.floor(Number(e?.y)||0)),o-1),a=Math.max(1,r-i),l=Math.max(1,o-s),c=Math.min(Math.max(1,Math.floor(Number(e?.width)||a)),a),u=Math.min(Math.max(1,Math.floor(Number(e?.height)||l)),l);return{x:i,y:s,width:c,height:u,isFullFrame:i===0&&s===0&&c===r&&u===o}}function eT(e){const t=String(e||"").trim().toLowerCase();return!t||t==="transparent"||/^[a-z]+\(\s*[^,]+,\s*[^,]+,\s*[^,]+,\s*0(?:\.0+)?%?\s*\)$/.test(t)?!0:/^[a-z]+\([^)]*\/\s*0(?:\.0+)?%?\s*\)$/.test(t)}function b7(e,t="#ffffff"){const n=globalThis.window?.getComputedStyle||globalThis.getComputedStyle;let r=e||null;const o=new Set;for(;r&&!o.has(r);){o.add(r);const s=typeof n=="function"?n(r)?.backgroundColor:"";if(!eT(s))return s;r=r.parentElement||null}const i=globalThis.document?.body||null;if(i&&!o.has(i)&&typeof n=="function"){const s=n(i)?.backgroundColor;if(!eT(s))return s}return t}function x7(e,t,n,r,{backgroundColor:o="",crop:i=null,overlayCanvas:s=null}={}){if(!e||!t)throw new Error("Screenshot capture failed");const a=pk(i,n,r),l=String(o||"").trim(),c=e.fillStyle;l&&(e.fillStyle="#ffffff",e.fillStyle=l,e.fillRect(0,0,a.width,a.height)),e.drawImage(t,a.x,a.y,a.width,a.height,0,0,a.width,a.height),e.fillStyle=c,s&&e.drawImage(s,a.x,a.y,a.width,a.height,0,0,a.width,a.height)}async function S7(e,t,{backgroundColor:n="",crop:r=null}={}){const o=e?.renderer,i=e?.scene,s=e?.camera,a=o?.domElement?.width||0,l=o?.domElement?.height||0;if(!o||!i||!s||a<=0||l<=0)throw new Error("Screenshot capture failed");const c=o.getRenderTarget(),u=o.xr?.enabled===!0;try{o.xr&&(o.xr.enabled=!1),o.setRenderTarget(null),o.render(i,s)}finally{o.setRenderTarget(c),o.xr&&(o.xr.enabled=u)}const f=pk(r,a,l),m=document.createElement("canvas");m.width=f.width,m.height=f.height;const p=m.getContext("2d");if(!p)throw new Error("Screenshot capture failed");return x7(p,o.domElement,a,l,{backgroundColor:n,crop:f,overlayCanvas:t}),y7(m)}const E7=/(?:error creating webgl context|webgl context could not be created|failed to create webgl|webgl is not supported)/i,w7=/(?:swiftshader|llvmpipe|softpipe|software rasterizer|lavapipe)/i;function tA(e){return e instanceof Error?e.message:String(e||"")}function hk(e){return E7.test(tA(e))}function v7(e){const t=e?.getContext?.();if(!t)return!1;let n="";try{const o=t.getExtension?.("WEBGL_debug_renderer_info")?.UNMASKED_RENDERER_WEBGL??t.RENDERER;n=String(t.getParameter?.(o)||"")}catch{return!1}return w7.test(n)}function A7(e){const t=tA(e).trim();return hk(e)?{severity:"error",blocking:!0,summary:"WebGL unavailable",title:"Browser WebGL is unavailable",message:"CAD Viewer needs browser WebGL to render 3D models, but this browser could not create a WebGL context.",resolution:"Enable hardware acceleration or software WebGL in the browser, update the graphics or Mesa drivers, then reload CAD Viewer. In Chrome, check chrome://gpu for the WebGL status."}:{severity:"error",blocking:!0,summary:"CAD Viewer startup failed",title:"CAD Viewer could not start",message:t||"The 3D renderer failed before CAD Viewer finished starting.",resolution:"Reload CAD Viewer. If the problem persists, check the browser console for the renderer startup error."}}const Q=Object.freeze({STEP:"step",STL:"stl",THREE_MF:"3mf",GLB:"glb",DXF:"dxf",IMPLICIT:"implicit",URDF:"urdf",SRDF:"srdf",SDF:"sdf"}),C7=Object.freeze([Q.STL,Q.THREE_MF,Q.GLB]),M7=Object.freeze([Q.URDF,Q.SRDF,Q.SDF]);function kl(e){return String(e||"").trim().toLowerCase()}function I7(e,{defaultFormat:t=Q.STEP}={}){const n=kl(e||t);return n==="stp"?Q.STEP:n==="gltf"?Q.GLB:n===Q.STEP||n===Q.STL||n===Q.THREE_MF||n===Q.GLB||n===Q.DXF||n===Q.IMPLICIT||n===Q.URDF||n===Q.SRDF||n===Q.SDF?n:t}function lx(e){return kl(e?.kind)}function Nr(e){const t=lx(e);return t===Q.DXF?Q.DXF:t===Q.STL?Q.STL:t===Q.THREE_MF?Q.THREE_MF:t===Q.GLB||t==="gltf"?Q.GLB:t===Q.IMPLICIT?Q.IMPLICIT:t===Q.URDF?Q.URDF:t===Q.SRDF?Q.SRDF:t===Q.SDF?Q.SDF:Q.STEP}const N7=Object.freeze([Q.DXF,Q.IMPLICIT]);function gk(e){return N7.includes(lx(e))?Q.GLB:Nr(e)}function yk(e){return C7.includes(kl(e))}function GS(e){return M7.includes(kl(e))}function T7(e){const t=kl(e);return yk(t)?t:Q.GLB}function cd(e){return T7(gk(e))}function tT(e){if(!e)return"";const t=lx(e);return t===Q.DXF?Q.DXF:t===Q.URDF?Q.URDF:t===Q.SRDF?Q.SRDF:t===Q.SDF?Q.SDF:t===Q.IMPLICIT?Q.IMPLICIT:Nr(e)===Q.STEP?Q.STEP:yk(Nr(e))?"mesh":""}function _7(e,{baseUrl:t=""}={}){const n=String(e||"").trim();if(!n)return"";let r=n;try{r=new URL(n,t||"http://localhost/").pathname}catch{r=n.split("?")[0].split("#")[0]}const o=r.toLowerCase(),i=o.lastIndexOf("/"),s=o.lastIndexOf(".");return s>i?o.slice(s):""}function R7(e){const t=kl(e).replace(/^\./,"");return t==="step"||t==="stp"?Q.STEP:t==="stl"?Q.STL:t==="3mf"?Q.THREE_MF:t==="glb"||t==="gltf"?Q.GLB:t==="implicit"||t==="implicit.js"||t==="implicit.mjs"?Q.IMPLICIT:t==="dxf"?Q.DXF:t==="urdf"?Q.URDF:t==="srdf"?Q.SRDF:t==="sdf"?Q.SDF:""}function nT(e,t={}){const n=String(e||"").trim();let r=n;try{r=new URL(n,t.baseUrl||"http://localhost/").pathname}catch{r=n.split("?")[0].split("#")[0]}const o=r.toLowerCase();return o.endsWith(".implicit.js")||o.endsWith(".implicit.mjs")?Q.IMPLICIT:R7(_7(e,t))}const bk="text-to-cad",Ft={PENDING:"pending",LOADING:"loading",READY:"ready",ERROR:"error"},zn={IDLE:"idle",DISABLED:"disabled",LOADING:"loading",READY:"ready",ERROR:"error"},Cr={REFERENCES:"references",DRAW:"draw",MEASURE:"measure",PAN:"pan"},an={FREEHAND:"freehand",LINE:"line",SURFACE_LINE:"surface-line",ARROW:"arrow",DOUBLE_ARROW:"double-arrow",RECTANGLE:"rectangle",CIRCLE:"circle",FILL:"fill",ERASE:"erase"},Us=Object.freeze({MESH:"mesh",IMPLICIT:"implicit",ROBOT:"robot"}),Ic=Object.freeze({SIDECAR:"sidecar",MODULE:"module"}),Mo=Object.freeze({MESH:"mesh",DRAWING:"drawing",IMPLICIT:"implicit",ROBOT:"robot"}),Mr=Object.freeze({LOADING:"loading",DXF:"dxf",IMPLICIT:"implicit",ROBOT:"robot",STEP:"step",STL_MESH:"stl-mesh",THREE_MF_MESH:"3mf-mesh",GLB_MESH:"glb-mesh"}),P7=Object.freeze({select:!0,pan:!0,draw:!0,orbit:!0,screenshot:!0}),US=Object.freeze({content:Us.MESH,assetKind:Mo.MESH,iconKind:Mr.STL_MESH,sheetKind:"mesh",label:"STL",parts:!1,topology:!1,measure:!0,exploded:!1,displayModes:!1,clip:!1,planView:!1,themeProjection:!0,params:null,animations:!1,artifactManaged:!1,exportFormats:Object.freeze([])}),HS=Object.freeze({content:Us.ROBOT,assetKind:Mo.ROBOT,iconKind:Mr.ROBOT,sheetKind:Q.URDF,label:"URDF",sceneScale:"urdf",parts:!1,topology:!1,measure:!1,exploded:!1,displayModes:!1,clip:!1,planView:!1,themeProjection:!0,params:null,animations:!1,posePicker:!0,artifactManaged:!1,exportFormats:Object.freeze([])}),_a=Object.freeze({content:Us.MESH,assetKind:Mo.MESH,iconKind:Mr.STEP,sheetKind:"",label:"",sceneScale:"cad",tools:P7,parts:!1,topology:!1,measure:!1,exploded:!1,displayModes:!1,clip:!1,planView:!1,themeProjection:!0,params:null,animations:!1,posePicker:!1,artifactManaged:!1,rebuildCommand:"",exportFormats:Object.freeze([])}),O7=Object.freeze({[Q.STEP]:Object.freeze({..._a,iconKind:Mr.STEP,sheetKind:Q.STEP,label:"STEP",parts:!0,topology:!0,measure:!0,exploded:!0,displayModes:!0,clip:!0,params:Ic.SIDECAR,animations:!0,artifactManaged:!0,rebuildCommand:"python -m cadgen.step_artifact_cli --repo-root . --step",exportFormats:Object.freeze(["step","3mf","stl","glb"])}),[Q.STL]:Object.freeze({..._a,...US,label:"STL"}),[Q.THREE_MF]:Object.freeze({..._a,...US,iconKind:Mr.THREE_MF_MESH,label:"3MF"}),[Q.GLB]:Object.freeze({..._a,...US,iconKind:Mr.GLB_MESH,label:"GLB"}),[Q.DXF]:Object.freeze({..._a,assetKind:Mo.DRAWING,iconKind:Mr.DXF,sheetKind:Q.DXF,label:"DXF",planView:!0,artifactManaged:!0,exportFormats:Object.freeze(["dxf"])}),[Q.IMPLICIT]:Object.freeze({..._a,content:Us.IMPLICIT,assetKind:Mo.IMPLICIT,iconKind:Mr.IMPLICIT,sheetKind:Q.IMPLICIT,label:"Implicit",params:Ic.MODULE,animations:!0,artifactManaged:!1,exportFormats:Object.freeze(["stl","glb","3mf"])}),[Q.URDF]:Object.freeze({..._a,...HS,label:"URDF"}),[Q.SRDF]:Object.freeze({..._a,...HS,sheetKind:Q.SRDF,label:"SRDF"}),[Q.SDF]:Object.freeze({..._a,...HS,sheetKind:Q.SDF,label:"SDF"})}),k7=Object.freeze({stp:Q.STEP,gltf:Q.GLB});function hs(e){const t=kl(e),n=k7[t]||t;return O7[n]||_a}function Mf(e,t){return hs(e).tools?.[t]===!0}function vu(e,t){return hs(e)[t]===!0}function Dh(e){return hs(e).content}function WS(e){return hs(e).params||""}function Lh(e){return hs(e).label}function rT(e){return hs(e).exportFormats}function Ab(e){return hs(e).artifactManaged===!0}function gf(e){return hs(e).assetKind}function oT(e){return hs(e).iconKind}function D7(e,t){const n=String(hs(e).rebuildCommand||"").trim(),r=String(t||"").trim();return n&&r?`${n} ${r}`:""}const KS=Object.freeze({x:[1,0,0],y:[0,1,0],z:[0,0,1]}),qS=Object.freeze({axis:{x:{front:[250,88,79],back:[122,32,28]},y:{front:[92,233,123],back:[30,99,46]},z:{front:[84,131,255],back:[30,53,126]}},center:{fill:[252,215,74],stroke:[255,235,153]}}),L7="6.71875rem";function Tl(e,t,n){return Math.min(Math.max(e,t),n)}function F7(e,t=""){return typeof e=="number"&&Number.isFinite(e)&&e>0?`${e}px`:String(e||"").trim()||t}function GE(e){const[t=0,n=0,r=0]=Array.isArray(e)?e:[0,0,0];return[Math.round(Tl(t,0,255)),Math.round(Tl(n,0,255)),Math.round(Tl(r,0,255))]}function iT(e,t,n){const r=Tl(n,0,1),o=GE(e),i=GE(t);return[o[0]+(i[0]-o[0])*r,o[1]+(i[1]-o[1])*r,o[2]+(i[2]-o[2])*r]}function nf(e,t=1){const[n,r,o]=GE(e);return`rgba(${n}, ${r}, ${o}, ${Tl(t,0,1)})`}function Dy(e,t){if(!Array.isArray(e)||e.length<3)return[...t];const n=Number(e[0]),r=Number(e[1]),o=Number(e[2]);return!Number.isFinite(n)||!Number.isFinite(r)||!Number.isFinite(o)?[...t]:[Tl(n,0,255),Tl(r,0,255),Tl(o,0,255)]}function j7(e){const t=e?.viewPlanePalette||{},n=t?.axis||{},r={};for(const o of["x","y","z"]){const i=qS.axis[o],s=n?.[o]||{};r[o]={front:Dy(s.front,i.front),back:Dy(s.back,i.back)}}return{axis:r,center:{fill:Dy(t?.center?.fill,qS.center.fill),stroke:Dy(t?.center?.stroke,qS.center.stroke)}}}function YS(e,t){if(!Array.isArray(e)||e.length!==3)return[...t];const n=Number(e[0]),r=Number(e[1]),o=Number(e[2]);if(!Number.isFinite(n)||!Number.isFinite(r)||!Number.isFinite(o))return[...t];const i=Math.hypot(n,r,o);return i<1e-6?[...t]:[n/i,r/i,o/i]}function z7(e){return{x:YS(e?.x,KS.x),y:YS(e?.y,KS.y),z:YS(e?.z,KS.z)}}function B7(e,t){const[n=0,r=0,o=0]=Array.isArray(t)?t:[0,0,0];return[e.x[0]*n+e.y[0]*r+e.z[0]*o,e.x[1]*n+e.y[1]*r+e.z[1]*o,e.x[2]*n+e.y[2]*r+e.z[2]*o]}function V7(e){const t=String(e?.id||"");return t.startsWith("x")?"x":t.startsWith("y")?"y":"z"}function $7({showViewPlane:e,previewMode:t,isLoading:n,meshData:r,viewPlaneOffsetRight:o,viewPlaneOffsetBottom:i=16,activeViewPlaneFace:s,viewPlaneFaces:a,viewPlaneOrientation:l,viewerTheme:c,compact:u=!1,variant:f="3d",viewPlaneSize:m,viewPlaneHeader:p=null,activateViewPlaneFace:b,activateDefaultViewPlane:y}){const[x,S]=h.useState("");if(!e||t||n||!r)return null;const E=z7(l),C=j7(c),N=(Array.isArray(a)?a:[]).map(D=>{const j=V7(D),ee=C.axis[j]||C.axis.z,[X,ve,q]=B7(E,D.direction),re=Tl((q+1)/2,0,1),Be=iT(ee.back,ee.front,re),Me=iT([10,16,28],ee.front,re*.82+.08);return{id:D.id,title:D.title,x:50+X*28,y:50-ve*28,z:q,depth:re,radius:4.95+re*1.05,fill:nf(Be),edge:nf(Me),stem:nf(Be,.32+re*.48)}}).sort((D,j)=>D.z-j.z),w=N.filter(D=>D.z<0),_=N.filter(D=>D.z>=0),I=f==="2d",R=!u&&!I?F7(m,L7):"",O=u||I?"h-20 w-20":"",F=R?{width:R,height:R}:void 0,V=I?"cad-glass-surface pointer-events-auto relative rounded-md border border-sidebar-border text-sidebar-foreground shadow-sm transition duration-150":"pointer-events-auto relative text-sidebar-foreground transition duration-150",$=I?"2D view selector":"Perspective selector",K=typeof i=="number"?`${i}px`:i,U=x==="__default__",Y=D=>{const j=s===D.id,ee=x===D.id;return d.jsxs("g",{role:"button",tabIndex:0,"aria-label":D.title,"aria-pressed":j,className:"group cursor-pointer focus:outline-none",onPointerDown:X=>{X.stopPropagation()},onPointerEnter:()=>{S(D.id)},onPointerMove:()=>{S(D.id)},onPointerLeave:()=>{S(X=>X===D.id?"":X)},onMouseEnter:()=>{S(D.id)},onMouseMove:()=>{S(D.id)},onMouseLeave:()=>{S(X=>X===D.id?"":X)},onFocus:()=>{S(D.id)},onBlur:()=>{S(X=>X===D.id?"":X)},onClick:X=>{X.stopPropagation(),b(D.id)},onKeyDown:X=>{X.key!=="Enter"&&X.key!==" "||(X.preventDefault(),X.stopPropagation(),b(D.id))},children:[d.jsx("circle",{cx:D.x,cy:D.y,r:D.radius+4.4,className:"transition-opacity duration-150",opacity:ee?1:0,fill:D.fill,fillOpacity:"0.12",stroke:"var(--sidebar-foreground)",strokeOpacity:"0.72",strokeWidth:"1.1"}),d.jsx("circle",{cx:D.x,cy:D.y,r:D.radius+(j?2.1:0),fill:"none",stroke:j?"var(--sidebar-foreground)":"transparent",strokeWidth:j?1.6:0}),d.jsx("circle",{cx:D.x,cy:D.y,r:D.radius,className:"transition-transform duration-150 ease-out",style:{transform:ee?"scale(1.1)":"scale(1)",transformBox:"fill-box",transformOrigin:"center"},fill:D.fill,stroke:j?"var(--sidebar-foreground)":D.edge,strokeWidth:j?1.35:1})]},D.id)};return d.jsxs("div",{className:"pointer-events-none absolute z-30 flex flex-col items-end gap-1",style:{right:`${o}px`,bottom:K},children:[p?d.jsx("div",{className:"pointer-events-auto",onPointerDown:D=>{D.stopPropagation()},children:p}):null,d.jsx("div",{className:`${V} ${O}`,style:F,onPointerDown:D=>{D.stopPropagation()},children:d.jsxs("svg",{className:"absolute inset-0 h-full w-full",viewBox:"0 0 100 100","aria-label":$,children:[d.jsx("defs",{children:d.jsxs("radialGradient",{id:"view-sphere-shell",cx:"34%",cy:"28%",r:"74%",children:[d.jsx("stop",{offset:"0%",stopColor:"var(--sidebar)"}),d.jsx("stop",{offset:"100%",stopColor:"var(--sidebar)"})]})}),I?d.jsxs(d.Fragment,{children:[d.jsx("rect",{x:"15",y:"15",width:"70",height:"70",rx:"8",fill:"url(#view-sphere-shell)",stroke:"var(--sidebar-border)",strokeWidth:"0.75"}),d.jsx("line",{x1:"22",y1:"50",x2:"78",y2:"50",fill:"none",stroke:"color-mix(in oklch, var(--sidebar-foreground) 18%, transparent)",strokeWidth:"1",strokeLinecap:"round"}),d.jsx("line",{x1:"50",y1:"22",x2:"50",y2:"78",fill:"none",stroke:"color-mix(in oklch, var(--sidebar-foreground) 18%, transparent)",strokeWidth:"1",strokeLinecap:"round"})]}):d.jsxs(d.Fragment,{children:[d.jsx("circle",{cx:"50",cy:"50",r:"44",fill:"url(#view-sphere-shell)",stroke:"var(--sidebar-border)",strokeWidth:"0.75"}),d.jsx("ellipse",{cx:"50",cy:"50",rx:"30",ry:"11.8",fill:"none",stroke:"color-mix(in oklch, var(--sidebar-foreground) 12%, transparent)",strokeWidth:"0.8"}),d.jsx("ellipse",{cx:"50",cy:"50",rx:"14",ry:"30",fill:"none",stroke:"color-mix(in oklch, var(--sidebar-foreground) 12%, transparent)",strokeWidth:"0.8"})]}),w.map(D=>d.jsx("line",{x1:"50",y1:"50",x2:D.x,y2:D.y,stroke:D.stem,strokeWidth:1.6+D.depth*.8,strokeLinecap:"round",pointerEvents:"none"},`${D.id}-stem`)),w.map(D=>Y(D)),d.jsxs("g",{role:"button",tabIndex:0,"aria-label":I?"Fit 2D view":"Reset to default isometric view",className:"group cursor-pointer focus:outline-none",onPointerDown:D=>{D.stopPropagation()},onPointerEnter:()=>{S("__default__")},onPointerMove:()=>{S("__default__")},onPointerLeave:()=>{S(D=>D==="__default__"?"":D)},onMouseEnter:()=>{S("__default__")},onMouseMove:()=>{S("__default__")},onMouseLeave:()=>{S(D=>D==="__default__"?"":D)},onFocus:()=>{S("__default__")},onBlur:()=>{S(D=>D==="__default__"?"":D)},onClick:D=>{D.stopPropagation(),y?.()},onKeyDown:D=>{D.key!=="Enter"&&D.key!==" "||(D.preventDefault(),D.stopPropagation(),y?.())},children:[d.jsx("circle",{cx:"50",cy:"50",r:"10.2",fill:"transparent",stroke:"none"}),d.jsx("circle",{cx:"50",cy:"50",r:"11.4",className:"transition-opacity duration-150",opacity:U?1:0,fill:nf(C.center.fill,.16),stroke:"var(--sidebar-foreground)",strokeOpacity:"0.72",strokeWidth:"1.1"}),d.jsx("circle",{cx:"50",cy:"50",r:"7.3",className:"transition-transform duration-150 ease-out",style:{transform:U?"scale(1.1)":"scale(1)",transformBox:"fill-box",transformOrigin:"center"},fill:nf(C.center.fill,.95),stroke:nf(C.center.stroke,.72),strokeWidth:"1.05"})]}),_.map(D=>d.jsx("line",{x1:"50",y1:"50",x2:D.x,y2:D.y,stroke:D.stem,strokeWidth:1.6+D.depth*.8,strokeLinecap:"round",pointerEvents:"none"},`${D.id}-stem-front`)),_.map(D=>Y(D))]})})]})}const G7=/^#(?:[0-9a-fA-F]{3}){1,2}$/,U7=50,H7="#132232",xk="#8dc5ff",W7=Object.freeze(["feature","tangent","seam","degenerate"]),UE=Object.freeze({feature:Object.freeze({opacity:1,thickness:1.15}),tangent:Object.freeze({opacity:.5,thickness:1.15}),seam:Object.freeze({opacity:.85,thickness:1.15}),degenerate:Object.freeze({opacity:1,thickness:0})}),bm=Object.freeze({enabled:!0,color:H7,thickness:1,classes:UE,highlightColor:xk,highlightOpacity:1,highlightThickness:3,silhouette:!1,silhouetteScale:0}),tg=Object.freeze({...bm,enabled:!1});function Sk(e,t,n){return Math.min(Math.max(e,t),n)}function Ht(e,t,n=-1/0,r=1/0){const o=Number(e);return Number.isFinite(o)?Sk(o,n,r):t}function Ar(e,t){const n=String(e||"").trim();return G7.test(n)?n.length===4?`#${n[1]}${n[1]}${n[2]}${n[2]}${n[3]}${n[3]}`.toLowerCase():n.toLowerCase():t}function K7(e,t=De?.materials?.defaultColor||"#ffffff"){const r=(Array.isArray(e)?e:[e]).map(o=>Ar(o,"")).filter(Boolean).slice(0,U7);return r.length?r:[Ar(t,"#ffffff")]}function q7(e,t="#000000"){const n=Ar(e,t),r=n.length===4?`#${n[1]}${n[1]}${n[2]}${n[2]}${n[3]}${n[3]}`:n,o=i=>{const s=parseInt(r.slice(i,i+2),16)/255;return s<=.03928?s/12.92:((s+.055)/1.055)**2.4};return{r:o(1),g:o(3),b:o(5)}}function Y7(e,t="#000000"){const n=q7(e,t);return .2126*n.r+.7152*n.g+.0722*n.b}function ts(e,t=!1){return typeof e=="boolean"?e:t}function X7(e,t="solid"){const n=String(e||"").trim().toLowerCase();return["solid","linear","radial","transparent"].includes(n)?n:t}function Z7(e,t="multiply"){const n=String(e||"").trim().toLowerCase();return["multiply","blend"].includes(n)?n:t}function J7(e={},t=UE){const n=e&&typeof e=="object"?e:{};return Object.fromEntries(W7.map(r=>{const o=n[r]&&typeof n[r]=="object"?n[r]:{},i=t?.[r]||UE[r],s=o.enabled===!1;return[r,{opacity:Ht(o.opacity,i.opacity,0,1),thickness:s?0:Ht(o.thickness,i.thickness,0,6)}]}))}const _c=Object.freeze({enabled:!0,color:"#6b7f95",intensity:.46,position:Object.freeze({x:120,y:80,z:210})}),zu=Object.freeze({enabled:!0,color:"#6db6e8",intensity:.04,position:Object.freeze({x:-260,y:240,z:180})}),Hi=Object.freeze({STAGE:"stage",GRID:"grid",NONE:"none"}),ai=Object.freeze({SYSTEM:"system",LIGHT:"light",DARK:"dark"}),Q7=Object.freeze(Object.values(ai));function x0(e,t=ai.SYSTEM){const n=String(e||"").trim().toLowerCase();return Q7.includes(n)?n:t}const Ek=Object.freeze([Object.freeze(["edges","color"]),Object.freeze(["background","solidColor"]),Object.freeze(["background","linearStart"]),Object.freeze(["background","linearEnd"]),Object.freeze(["background","radialInner"]),Object.freeze(["background","radialOuter"]),Object.freeze(["floor","color"]),Object.freeze(["floor","gridCenterColor"]),Object.freeze(["floor","gridCellColor"]),Object.freeze(["lighting","directional","color"]),Object.freeze(["lighting","spot","color"]),Object.freeze(["lighting","point","color"]),Object.freeze(["lighting","ambient","color"]),Object.freeze(["lighting","hemisphere","skyColor"]),Object.freeze(["lighting","hemisphere","groundColor"])]);function HE(e,t){return t.reduce((n,r)=>n&&typeof n=="object"?n[r]:void 0,e)}function wk(e,t,n){let r=e;for(let o=0;o<t.length-1;o+=1){const i=t[o];(!r[i]||typeof r[i]!="object"||Array.isArray(r[i]))&&(r[i]={}),r=r[i]}r[t[t.length-1]]=n}function vk(e){return JSON.parse(JSON.stringify(e))}function S0(e={},t=e){const n={};for(const r of Ek){const o=HE(t,r)||"#ffffff";wk(n,r,Ar(HE(e,r),o))}return n}function nA(e={},t=e){return Object.freeze({light:S0(e,e),dark:S0(t,e)})}function xm(e,t,n=nA(e,e)){return Object.freeze({...e,colorMode:x0(t),modeColors:n})}function eq(e={},t=De){const n=e&&typeof e=="object"?e:{},r=t&&typeof t=="object"?t:De,o=r?.modeColors&&typeof r.modeColors=="object"?r.modeColors:nA(r,r);return{light:S0(n.light,o.light||r),dark:S0(n.dark,o.dark||r)}}function tq(e,t={}){for(const n of Ek){const r=HE(t,n);r&&wk(e,n,r)}}const Ak=.25,Ck=4,sT=Object.freeze({gridCenterColor:"#6b7280",gridCellColor:"#cbd5e1",gridOpacity:.18,gridDensity:1});function nq(e,t=Hi.STAGE){const n=String(e||"").trim().toLowerCase();return n==="glass"?Hi.STAGE:Object.values(Hi).includes(n)?n:t}const rq=Object.freeze([{id:"studio-hdri-43",label:"Studio HDRI 43",url:"https://static.morflax.com/textures/env/Studio_HDRI_43.jpg"},{id:"studio-hdri-41",label:"Studio HDRI 41",url:"https://static.morflax.com/textures/env/Studio_HDRI_41.jpg"},{id:"studio-hdri-12",label:"Studio HDRI 12",url:"https://static.morflax.com/textures/env/Studio_HDRI_12.jpg"},{id:"studio-hdri-17",label:"Studio HDRI 17",url:"https://static.morflax.com/textures/env/Studio_HDRI_17.jpg"},{id:"studio-hdri-22",label:"Studio HDRI 22",url:"https://static.morflax.com/textures/env/Studio_HDRI_22.jpg"},{id:"colorful-1",label:"Colorful 1",url:"https://static.morflax.com/textures/env/colorful-1.jpg"},{id:"colorful-dark-1",label:"Colorful Dark 1",url:"https://static.morflax.com/textures/env/colorful-dark-1.jpg"}]),E0=Object.freeze(["#b6c4ce","#f4a7a7","#f8c77e","#f7e38d","#b9e88f","#8fe3c0","#92d7f5","#a9b8ff","#c7a8ff","#f2a7d9"]),dh=Object.freeze(["#4cc9f0"]),fh=Object.freeze(["#ff4faf"]),mh=Object.freeze(["#b9856e"]),Sc=Object.freeze(["#178f9f","#ef7459"]),ph=Object.freeze(["#0b7a3f"]),Mk="#66ff99",oq="#b7ffc9",iq=Object.freeze({feature:Object.freeze({opacity:1,thickness:1.15}),tangent:Object.freeze({opacity:.84,thickness:.95}),seam:Object.freeze({opacity:.92,thickness:1}),degenerate:Object.freeze({opacity:.72,thickness:.8})}),sq=Object.freeze({...bm,enabled:!0,color:Mk,classes:iq,highlightColor:oq,highlightOpacity:1,highlightThickness:3}),aT=Object.freeze(["#b6c4ce","#8f9aa3","#d3dae0","#68737d"]);function zs(e,t,n=.5){const r=Ar(e,"#000000"),o=Ar(t,r),i=Sk(Number(n),0,1),s=a=>{const l=parseInt(r.slice(a,a+2),16),c=parseInt(o.slice(a,a+2),16);return Math.round(l+(c-l)*i).toString(16).padStart(2,"0")};return`#${s(1)}${s(3)}${s(5)}`}function aq(e,t){const n=Array.isArray(e)?e:[],r=Array.isArray(t)?t:[],o=Math.max(n.length,r.length);return Object.freeze(o?Array.from({length:o},(i,s)=>{const a=n[s]||n.at(-1)||"#ffffff",l=r[s]||r.at(-1)||a;return zs(a,l)}):["#ffffff"])}function ba(e,t={}){const n=Ar(e,"#f1f5f9"),r=Y7(n)>=.36;return{gridCenterColor:r?zs(n,"#0f172a",.48):zs(n,"#f8fafc",.46),gridCellColor:r?zs(n,"#475569",.26):zs(n,"#cbd5e1",.22),gridOpacity:Ht(t.opacity,sT.gridOpacity,0,1),gridDensity:Ht(t.density,sT.gridDensity,Ak,Ck)}}const as=Object.freeze({materials:{defaultColor:E0[0],fillColors:E0,cycleColors:!1,overrideSourceColors:!1,tintMode:"blend",tintStrength:0,saturation:1.18,contrast:1.12,brightness:1.02,roughness:.58,metalness:.02,clearcoat:.12,clearcoatRoughness:.42,opacity:1,envMapIntensity:.42,emissiveIntensity:.02},edges:{...bm},background:{type:"linear",solidColor:"#edf5fb",linearStart:"#fbfdff",linearEnd:"#b8cadb",linearAngle:135,radialInner:"#ffffff",radialOuter:"#b3c4d4"},floor:{mode:Hi.STAGE,color:"#edf3f8",roughness:.7,reflectivity:.14,shadowOpacity:.16,horizonBlend:.18,...ba("#edf3f8",{opacity:.2})},environment:{enabled:!0,presetId:"studio-hdri-43",intensity:.32,rotationY:-.25,useAsBackground:!1},lighting:{toneMappingExposure:1.16,directional:{enabled:!0,color:"#ffffff",intensity:1.16,position:{x:-210,y:260,z:270}},spot:{enabled:!0,color:"#f4fbff",intensity:.52,angle:.74,distance:0,position:{x:190,y:210,z:170}},point:{enabled:!0,color:"#ffe2ba",intensity:.28,distance:0,position:{x:-240,y:110,z:-210}},ambient:{enabled:!0,color:"#ffffff",intensity:.4},hemisphere:{enabled:!0,skyColor:"#ffffff",groundColor:"#d6e2ee",intensity:1.12}}}),lr=Object.freeze({materials:{defaultColor:E0[0],fillColors:E0,cycleColors:!1,overrideSourceColors:!1,tintMode:"blend",tintStrength:0,saturation:1.2,contrast:1.14,brightness:1.06,roughness:.54,metalness:.02,clearcoat:.14,clearcoatRoughness:.4,opacity:1,envMapIntensity:.5,emissiveIntensity:.03},edges:{...tg},background:{type:"linear",solidColor:"#081b2d",linearStart:"#18304a",linearEnd:"#030914",linearAngle:135,radialInner:"#174267",radialOuter:"#030914"},floor:{mode:Hi.STAGE,color:"#0a2238",roughness:.38,reflectivity:.1,shadowOpacity:.42,horizonBlend:.1,...ba("#0a2238",{opacity:.22})},environment:{enabled:!0,presetId:"studio-hdri-43",intensity:.18,rotationY:-.25,useAsBackground:!1},lighting:{toneMappingExposure:1.22,directional:{enabled:!0,color:"#ffffff",intensity:1.42,position:{x:-210,y:260,z:270}},spot:{enabled:!0,color:"#70c4ff",intensity:.24,angle:.74,distance:0,position:{x:190,y:210,z:170}},point:{enabled:!0,color:"#9bd0ff",intensity:.36,distance:0,position:{x:-240,y:110,z:-210}},ambient:{enabled:!0,color:"#c6d8ea",intensity:.24},hemisphere:{enabled:!0,skyColor:"#ffffff",groundColor:"#020713",intensity:.98}}}),yc=Object.freeze({...lr,materials:{...lr.materials,defaultColor:aT[0],fillColors:aT},background:{...lr.background,solidColor:"#151617",linearStart:"#2a2b2d",linearEnd:"#070809",radialInner:"#303133",radialOuter:"#070809"},floor:{...lr.floor,color:"#171819",...ba("#171819",{opacity:.22})}}),lT=aq(lr.materials.fillColors,yc.materials.fillColors),uc=Object.freeze({...lr,materials:{...lr.materials,defaultColor:lT[0],fillColors:lT},edges:{...bm},background:{...lr.background,solidColor:zs(lr.background.solidColor,yc.background.solidColor),linearStart:zs(lr.background.linearStart,yc.background.linearStart),linearEnd:zs(lr.background.linearEnd,yc.background.linearEnd),radialInner:zs(lr.background.radialInner,yc.background.radialInner),radialOuter:zs(lr.background.radialOuter,yc.background.radialOuter)},floor:{...lr.floor,color:zs(lr.floor.color,yc.floor.color),...ba(zs(lr.floor.color,yc.floor.color),{opacity:.22})}}),lq=Object.freeze({materials:{...lr.materials,defaultColor:dh[0],fillColors:dh,cycleColors:!1},edges:{...tg},background:{type:"radial",solidColor:"#04131f",linearStart:"#07253a",linearEnd:"#0b8edc",linearAngle:128,radialInner:"#0b8edc",radialOuter:"#02070c"},floor:{mode:Hi.STAGE,color:"#06324f",roughness:.58,reflectivity:.2,shadowOpacity:.3,horizonBlend:.18,...ba("#06324f",{opacity:.24})},environment:lr.environment,lighting:lr.lighting}),cq=Object.freeze({materials:{...lr.materials,defaultColor:fh[0],fillColors:fh,cycleColors:!1},edges:{...tg},background:{type:"radial",solidColor:"#281323",linearStart:"#7a1a52",linearEnd:"#301426",linearAngle:140,radialInner:"#7f1a55",radialOuter:"#25101f"},floor:{mode:Hi.STAGE,color:"#4a1833",roughness:.56,reflectivity:.2,shadowOpacity:.26,horizonBlend:.22,...ba("#4a1833",{opacity:.24})},environment:lr.environment,lighting:lr.lighting}),uq=Object.freeze({materials:{...lr.materials,defaultColor:mh[0],fillColors:mh,cycleColors:!1},edges:{...tg},background:{type:"linear",solidColor:"#f3eadc",linearStart:"#f7ead8",linearEnd:"#c88d5d",linearAngle:162,radialInner:"#f7ead8",radialOuter:"#b06c43"},floor:{mode:Hi.STAGE,color:"#d4a070",roughness:.72,reflectivity:.14,shadowOpacity:.34,horizonBlend:.12,...ba("#d4a070",{opacity:.18})},environment:lr.environment,lighting:lr.lighting}),dq=Object.freeze({materials:{...as.materials,defaultColor:Sc[0],fillColors:Sc,cycleColors:!0},edges:{...tg},background:{type:"linear",solidColor:"#dff7f7",linearStart:"#fff4d6",linearEnd:"#47c5d6",linearAngle:152,radialInner:"#fff8e8",radialOuter:"#1a8fb5"},floor:{mode:Hi.STAGE,color:"#f2d59b",roughness:.74,reflectivity:.18,shadowOpacity:.2,horizonBlend:.2,...ba("#f2d59b",{opacity:.18})},environment:{enabled:!0,presetId:"studio-hdri-12",intensity:.36,rotationY:-.18,useAsBackground:!1},lighting:{toneMappingExposure:1.18,directional:{enabled:!0,color:"#fff7df",intensity:1.3,position:{x:-220,y:280,z:250}},spot:{enabled:!0,color:"#e4fbff",intensity:.36,angle:.72,distance:0,position:{x:190,y:210,z:170}},point:{enabled:!0,color:"#ffd08a",intensity:.24,distance:0,position:{x:-240,y:110,z:-210}},ambient:{enabled:!0,color:"#fff8e6",intensity:.34},hemisphere:{enabled:!0,skyColor:"#bff8ff",groundColor:"#f2d59b",intensity:1.04}}}),fq=Object.freeze({materials:{...lr.materials,defaultColor:ph[0],fillColors:ph,cycleColors:!1},edges:{...sq},background:{type:"radial",solidColor:"#020403",linearStart:"#031109",linearEnd:"#000000",linearAngle:180,radialInner:"#062414",radialOuter:"#000201"},floor:{mode:Hi.GRID,color:"#020403",roughness:.58,reflectivity:.12,shadowOpacity:.35,horizonBlend:0,gridCenterColor:Mk,gridCellColor:"#0c3d22",gridOpacity:.34,gridDensity:1.15},environment:lr.environment,lighting:lr.lighting}),pp="#f0f4f9",cT="#e2e9f0",uT=Object.freeze({...as,background:{...as.background,type:"solid",solidColor:pp,linearStart:pp,linearEnd:pp,radialInner:pp,radialOuter:pp},edges:{...bm},floor:{...as.floor,color:cT,...ba(cT,{opacity:.2})},environment:{...as.environment,enabled:!1},lighting:{...as.lighting,hemisphere:{...as.lighting.hemisphere,groundColor:"#c7d5e3"}}}),dT="#202832",mq=Object.freeze({...uc,edges:{...bm,color:"#1c2836"},background:{...uc.background,solidColor:"#181f28",linearStart:"#242e3a",linearEnd:"#0c1016",radialInner:"#293443",radialOuter:"#0c1016"},floor:{...uc.floor,color:dT,...ba(dT,{opacity:.22})},lighting:{...uc.lighting,spot:{...uc.lighting.spot,color:"#b3d4f2"},point:{...uc.lighting.point,color:"#bfd8f0"},ambient:{...uc.lighting.ambient,color:"#dfe7f0"},hemisphere:{...uc.lighting.hemisphere,groundColor:"#333d4b"}}}),rA=xm(uT,ai.SYSTEM,nA(uT,mq)),pq=xm(lq,ai.DARK),hq=xm(cq,ai.DARK),gq=xm(uq,ai.LIGHT),yq=xm(dq,ai.LIGHT),bq=xm(fq,ai.DARK),w0=Object.freeze([{id:"workbench",label:"Workbench",description:"Balanced CAD workbench lighting with system-aware light and dark canvas colors.",preview:{background:"#f0f4f9",modelColor:"#b6c4ce",accentColor:"#4ea7d8"},settings:rA},{id:"blue",label:"Blue",description:"Single cyan fill against deep-navy CAD lighting.",preview:{background:dh[0],modelColor:dh[0],accentColor:dh[0]},settings:pq},{id:"pink",label:"Magenta",description:"Single saturated magenta fill against a near-black studio backdrop.",preview:{background:fh[0],modelColor:fh[0],accentColor:fh[0]},settings:hq},{id:"clay-sunrise",label:"Clay",description:"Single warm clay fill with a soft presentation stage.",preview:{background:mh[0],modelColor:mh[0],accentColor:mh[0]},settings:gq},{id:"beach",label:"Beach",description:"Two-color aqua-and-coral fill with warm beach presentation lighting.",preview:{background:`linear-gradient(135deg, ${Sc[0]} 0%, ${Sc[0]} 50%, ${Sc[1]} 50%, ${Sc[1]} 100%)`,modelColor:Sc[0],accentColor:Sc[1]},settings:yq},{id:"terminal",label:"Terminal",description:"Single terminal-green fill with green CAD edge linework and a dark grid floor.",preview:{background:ph[0],modelColor:ph[0],accentColor:ph[0]},settings:bq}]),xq=Object.freeze({cinematic:"workbench",light:"workbench",dark:"workbench",charcoal:"workbench",darkoal:"workbench","dark-2":"workbench"}),Sq="workbench",Ik=Object.freeze(w0.find(e=>e.id===Sq)||w0[0]),De=Object.freeze(Ik.settings),Eq=new Set(rq.map(e=>e.id)),wq=Object.freeze({defaultColor:"#aeb9c3",tintStrength:.28,saturation:.42,contrast:1.02,brightness:.94,roughness:.46,metalness:.02,clearcoat:.18,clearcoatRoughness:.34,opacity:1,envMapIntensity:.58}),vq=Object.freeze({defaultColor:"#aeb9c3",tintMode:"blend",tintStrength:.08,saturation:1,contrast:1.04,brightness:1.02,roughness:.46,metalness:.02,clearcoat:.18,clearcoatRoughness:.34,opacity:1,envMapIntensity:.58,emissiveIntensity:.06}),Aq=Object.freeze({defaultColor:"#aeb9c3",tintMode:"blend",tintStrength:0,saturation:1.34,contrast:1.02,brightness:.82,roughness:.76,metalness:0,clearcoat:0,clearcoatRoughness:.72,opacity:1,envMapIntensity:.08,emissiveIntensity:.01}),Cq=Object.freeze({defaultColor:"#bcc8d4",tintMode:"blend",tintStrength:0,saturation:1.18,contrast:1.07,brightness:1.04,roughness:.58,metalness:.02,clearcoat:.12,clearcoatRoughness:.42,opacity:1,envMapIntensity:.42,emissiveIntensity:.02}),Mq=Object.freeze({defaultColor:"#748899",tintMode:"blend",tintStrength:0,saturation:1.18,contrast:1.07,brightness:1.04,roughness:.58,metalness:.02,clearcoat:.12,clearcoatRoughness:.42,opacity:1,envMapIntensity:.42,emissiveIntensity:.02}),Iq=Object.freeze({defaultColor:"#556c7f",tintMode:"blend",tintStrength:0,saturation:1.18,contrast:1.12,brightness:1.02,roughness:.58,metalness:.02,clearcoat:.12,clearcoatRoughness:.42,opacity:1,envMapIntensity:.42,emissiveIntensity:.02}),Nq=Object.freeze({enabled:!1,color:"#8fa1b5",thickness:1}),Tq=Object.freeze({enabled:!0,color:"#8fa1b5",thickness:1.65}),_q=Object.freeze({enabled:!1,color:"#8fa1b5",thickness:1}),Rq=Object.freeze({enabled:!1,color:"#8fa1b5",thickness:1}),Nk=Object.freeze({solidColor:"#050711",linearStart:"#02040b",linearEnd:"#252f47",linearAngle:90,radialInner:"#171d30",radialOuter:"#02040b"}),Pq=Nk,Oq=Object.freeze({solidColor:"#0a0f18",linearStart:"#08111c",linearEnd:"#1f2c3d",linearAngle:90,radialInner:"#182337",radialOuter:"#08111c"}),kq=Object.freeze({mode:Hi.STAGE,color:"#141a29",roughness:.62,reflectivity:.22,shadowOpacity:.24,horizonBlend:.28}),Dq=Object.freeze({mode:Hi.STAGE,color:"#141a29",roughness:.62,reflectivity:.06,shadowOpacity:.24,horizonBlend:.12}),Lq=Object.freeze({mode:Hi.STAGE,color:"#121a24",roughness:.86,reflectivity:.06,shadowOpacity:.24,horizonBlend:.28}),Fq=Object.freeze({enabled:!0,presetId:"studio-hdri-43",intensity:.46,rotationY:-.35,useAsBackground:!1}),jq=Object.freeze({enabled:!1,presetId:"studio-hdri-43",intensity:0,rotationY:-.35,useAsBackground:!1}),zq=Object.freeze({toneMappingExposure:1.2,directional:{enabled:!0,color:"#f1f6fb",intensity:2.45,position:{x:-190,y:300,z:210}},spot:{enabled:!0,color:"#dbeafe",intensity:1.34,angle:.72,distance:0,position:{x:160,y:245,z:126}},point:{enabled:!0,color:"#8fb6d8",intensity:.34,distance:0,position:{x:-260,y:95,z:-220}},ambient:{enabled:!0,color:"#1e293b",intensity:.2},hemisphere:{enabled:!0,skyColor:"#dbe7f3",groundColor:"#070a14",intensity:.68}}),Bq=Object.freeze({toneMappingExposure:1.03,directional:{enabled:!0,color:"#f1f6fb",intensity:1.28,position:{x:-190,y:300,z:210}},spot:{enabled:!0,color:"#dbeafe",intensity:.18,angle:.72,distance:0,position:{x:160,y:245,z:126}},point:{enabled:!0,color:"#8fb6d8",intensity:.08,distance:0,position:{x:-260,y:95,z:-220}},ambient:{enabled:!0,color:"#1e293b",intensity:.42},hemisphere:{enabled:!0,skyColor:"#dbe7f3",groundColor:"#070a14",intensity:.92}});function Vq(e){const t=String(e||"").trim();return Eq.has(t)?t:De.environment.presetId}function hp(e,t){return{x:Ht(e?.x,t.x,-5e3,5e3),y:Ht(e?.y,t.y,-5e3,5e3),z:Ht(e?.z,t.z,-5e3,5e3)}}function Tk(e,t){return typeof t=="number"?Math.abs((Number(e)||0)-t)<1e-6:t&&typeof t=="object"?!e||typeof e!="object"?!1:Object.entries(t).every(([n,r])=>Tk(e[n],r)):e===t}function rf(e,t){return t.some(n=>Tk(e,n))}function $q(e){const t=rf(e?.materials,[wq,vq,Aq,Cq,Mq,Iq,as.materials]),n=rf(e?.edges,[Nq,Tq,_q,Rq,as.edges]),r=rf(e?.floor,[kq,Dq,Lq,as.floor]),o=rf(e?.environment,[Fq,jq,as.environment,rA.environment]),i=rf(e?.background,[Nk,Pq,Oq,as.background]),s=rf(e?.lighting,[zq,Bq,as.lighting]);return t&&n&&i&&r&&o&&s}function Xf(e={}){const t=e&&typeof e=="object"?e:{},n=t.materials&&typeof t.materials=="object"?t.materials:{},r=t.background&&typeof t.background=="object"?t.background:{},o=t.environment&&typeof t.environment=="object"?t.environment:{},i=t.floor&&typeof t.floor=="object"?t.floor:{},s=t.edges&&typeof t.edges=="object"?t.edges:{},a=t.lighting&&typeof t.lighting=="object"?t.lighting:{},l=!!(t.materials&&typeof t.materials=="object"),c=l&&!Object.hasOwn(n,"tintMode"),u=l&&!Object.hasOwn(n,"emissiveIntensity"),f=Ar(n.defaultColor||n.tintColor,De.materials.defaultColor),m=K7(n.fillColors,f),p=Ar(i.color,De.floor?.color||"#141416"),b=ba(p),x={colorMode:x0(t.colorMode,De?.colorMode||ai.SYSTEM),materials:{defaultColor:m[0]||f,fillColors:m,cycleColors:ts(n.cycleColors,De.materials.cycleColors||!1),overrideSourceColors:ts(n.overrideSourceColors,De.materials.overrideSourceColors||!1),tintMode:Z7(n.tintMode,c?"multiply":De.materials.tintMode),tintStrength:Ht(n.tintStrength,De.materials.tintStrength,0,1),saturation:Ht(n.saturation,De.materials.saturation,0,2.5),contrast:Ht(n.contrast,De.materials.contrast,0,2.5),brightness:Ht(n.brightness,De.materials.brightness,0,2),roughness:Ht(n.roughness,De.materials.roughness,0,1),metalness:Ht(n.metalness,De.materials.metalness,0,1),clearcoat:Ht(n.clearcoat,De.materials.clearcoat,0,1),clearcoatRoughness:Ht(n.clearcoatRoughness,De.materials.clearcoatRoughness,0,1),opacity:Ht(n.opacity,De.materials.opacity,0,1),envMapIntensity:Ht(n.envMapIntensity,De.materials.envMapIntensity,0,4),emissiveIntensity:Ht(n.emissiveIntensity,u?0:De.materials.emissiveIntensity,0,2)},edges:{enabled:ts(s.enabled,De.edges.enabled),color:Ar(s.color,De.edges.color),thickness:Ht(s.thickness,De.edges.thickness,.5,6),classes:J7(s.classes,De.edges.classes),highlightColor:Ar(s.highlightColor,De.edges.highlightColor||xk),highlightOpacity:Ht(s.highlightOpacity,De.edges.highlightOpacity||1,0,1),highlightThickness:Ht(s.highlightThickness,De.edges.highlightThickness||3,.5,6),silhouette:ts(s.silhouette,De.edges.silhouette||!1),silhouetteScale:Ht(s.silhouetteScale,De.edges.silhouetteScale||.004,0,.04)},background:{type:X7(r.type,De.background.type),solidColor:Ar(r.solidColor,De.background.solidColor),linearStart:Ar(r.linearStart,De.background.linearStart),linearEnd:Ar(r.linearEnd,De.background.linearEnd),linearAngle:Ht(r.linearAngle,De.background.linearAngle,-360,360),radialInner:Ar(r.radialInner,De.background.radialInner),radialOuter:Ar(r.radialOuter,De.background.radialOuter)},floor:{mode:nq(i.mode,De.floor?.mode||Hi.STAGE),color:p,roughness:Ht(i.roughness,De.floor?.roughness??.72,0,1),reflectivity:Ht(i.reflectivity,De.floor?.reflectivity??.12,0,1),shadowOpacity:Ht(i.shadowOpacity,De.floor?.shadowOpacity??.45,0,1),horizonBlend:Ht(i.horizonBlend,De.floor?.horizonBlend??0,0,1),gridCenterColor:Ar(i.gridCenterColor??i.gridCenter,b.gridCenterColor),gridCellColor:Ar(i.gridCellColor??i.gridCell,b.gridCellColor),gridOpacity:Ht(i.gridOpacity,b.gridOpacity,0,1),gridDensity:Ht(i.gridDensity,b.gridDensity,Ak,Ck)},environment:{enabled:ts(o.enabled,De.environment.enabled),presetId:Vq(o.presetId),intensity:Ht(o.intensity,De.environment.intensity,0,4),rotationY:Ht(o.rotationY,De.environment.rotationY,-Math.PI*2,Math.PI*2),useAsBackground:ts(o.useAsBackground,De.environment.useAsBackground)},lighting:{toneMappingExposure:Ht(a.toneMappingExposure,De.lighting.toneMappingExposure,.05,6),directional:{enabled:ts(a.directional?.enabled,De.lighting.directional.enabled),color:Ar(a.directional?.color,De.lighting.directional.color),intensity:Ht(a.directional?.intensity,De.lighting.directional.intensity,0,20),position:hp(a.directional?.position,De.lighting.directional.position)},fill:{enabled:ts(a.fill?.enabled,_c.enabled),color:Ar(a.fill?.color,_c.color),intensity:Ht(a.fill?.intensity,_c.intensity,0,20),position:hp(a.fill?.position,_c.position)},rim:{enabled:ts(a.rim?.enabled,zu.enabled),color:Ar(a.rim?.color,zu.color),intensity:Ht(a.rim?.intensity,zu.intensity,0,20),position:hp(a.rim?.position,zu.position)},spot:{enabled:ts(a.spot?.enabled,De.lighting.spot.enabled),color:Ar(a.spot?.color,De.lighting.spot.color),intensity:Ht(a.spot?.intensity,De.lighting.spot.intensity,0,20),angle:Ht(a.spot?.angle,De.lighting.spot.angle,.01,Math.PI/2),distance:Ht(a.spot?.distance,De.lighting.spot.distance,0,5e3),position:hp(a.spot?.position,De.lighting.spot.position)},point:{enabled:ts(a.point?.enabled,De.lighting.point.enabled),color:Ar(a.point?.color,De.lighting.point.color),intensity:Ht(a.point?.intensity,De.lighting.point.intensity,0,20),distance:Ht(a.point?.distance,De.lighting.point.distance,0,5e3),position:hp(a.point?.position,De.lighting.point.position)},ambient:{enabled:ts(a.ambient?.enabled,De.lighting.ambient.enabled),color:Ar(a.ambient?.color,De.lighting.ambient.color),intensity:Ht(a.ambient?.intensity,De.lighting.ambient.intensity,0,20)},hemisphere:{enabled:ts(a.hemisphere?.enabled,De.lighting.hemisphere.enabled),skyColor:Ar(a.hemisphere?.skyColor,De.lighting.hemisphere.skyColor),groundColor:Ar(a.hemisphere?.groundColor,De.lighting.hemisphere.groundColor),intensity:Ht(a.hemisphere?.intensity,De.lighting.hemisphere.intensity,0,20)}}};return x.modeColors=eq(t.modeColors,x),!Object.hasOwn(t,"colorMode")&&!Object.hasOwn(t,"modeColors")&&$q(x)?Xf(vk(rA)):x}function Gq(e=De){return Xf(JSON.parse(JSON.stringify(e)))}function Uq(e){const t=String(e||"").trim(),n=xq[t]||t;return w0.some(r=>r.id===n)?n:""}function Hq(e){const t=Uq(e);return w0.find(n=>n.id===t)||Ik}function Wq(e){return Gq(Hq(e).settings)}function Kq(e){return Wq(e)}function qq(e={},{prefersDark:t=!1,systemFallback:n=ai.LIGHT}={}){const r=x0(e?.colorMode,De?.colorMode||ai.SYSTEM);return r===ai.SYSTEM?t===!0||x0(n,ai.LIGHT)===ai.DARK?ai.DARK:ai.LIGHT:r}function Yq(e={},t={}){const n=Xf(e),r=qq(n,t),o=vk(n);return o.colorMode=r,tq(o,n.modeColors?.[r]),Xf(o)}function Xq(e={},{defaultThemeId:t="workbench"}={}){return typeof e.theme=="string"?{themeId:e.theme,settings:null}:e.theme&&typeof e.theme=="object"&&!Array.isArray(e.theme)?{themeId:t,settings:e.theme}:{themeId:t,settings:null}}function Zq(e={},{defaultThemeId:t="workbench"}={}){const n=Xq(e,{defaultThemeId:t}),r=Kq(n.themeId||t),o=Xf(n.settings||r);return typeof e.theme=="string"?Yq(o,{prefersDark:!1}):o}const na=Object.freeze({resolutionScale:2,interactionResolutionScale:1.25,detail:1.25,normalSmoothing:1,modelColors:!0,shadows:!0,ambientOcclusion:!0,rimLight:!0}),Gp=Object.freeze({resolutionScale:Object.freeze({min:.5,max:5,step:.05}),interactionResolutionScale:Object.freeze({min:.25,max:4,step:.05}),detail:Object.freeze({min:.25,max:8,step:.05}),normalSmoothing:Object.freeze({min:.25,max:5,step:.05})}),fT=96,Jq=.75;function Ly(e,t,{min:n=-1/0,max:r=1/0}={}){const o=Number(e),i=Number.isFinite(o)?o:t;return Math.min(Math.max(i,n),r)}function Fy(e,t){return typeof e=="boolean"?e:t}function Ws(e={}){const t=e&&typeof e=="object"?e:{};return{resolutionScale:Ly(t.resolutionScale,na.resolutionScale,Gp.resolutionScale),interactionResolutionScale:Ly(t.interactionResolutionScale,na.interactionResolutionScale,Gp.interactionResolutionScale),detail:Ly(t.detail,na.detail,Gp.detail),normalSmoothing:Ly(t.normalSmoothing,na.normalSmoothing,Gp.normalSmoothing),modelColors:Fy(t.modelColors,na.modelColors),shadows:Fy(t.shadows,na.shadows),ambientOcclusion:Fy(t.ambientOcclusion,na.ambientOcclusion),rimLight:Fy(t.rimLight,na.rimLight)}}function Qq(e={},{interaction:t=!1}={}){const n=Ws(e);return t?n.interactionResolutionScale:n.resolutionScale}function eY(e={},{interaction:t=!1}={}){const n=Ws(e);if(!t)return n;const r=e&&typeof e=="object"?e:{},o=Number.isFinite(Number(r.stepBudget))?Math.max(1,Math.floor(Number(r.stepBudget))):fT;return{...n,detail:Math.min(n.detail,Jq),stepBudget:Math.min(o,fT),shadows:!1,ambientOcclusion:!1}}function tY(e,t){const n=Ws(e),r=Ws(t);return Object.keys(na).every(o=>n[o]===r[o])}const nY=/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;function Zf(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Wi(e,t=""){return String(e??t).trim()||t}function El(e,t=0){const n=Number(e);return Number.isFinite(n)?n:t}function rY(e,t,n){return Math.min(Math.max(e,t),n)}function _k(e){const t=Wi(e,"number").toLowerCase();return["number","boolean","enum","select","color","string","button"].includes(t)?t==="select"?"enum":t:"number"}function oY(e){return(Array.isArray(e)?e:[]).map(t=>{if(Zf(t)){const r=Wi(t.value);return r?{value:r,label:Wi(t.label,r)}:null}const n=Wi(t);return n?{value:n,label:n}:null}).filter(Boolean)}function ed(e,t){const n=_k(e?.type);if(n==="boolean")return t===!0;if(n==="color"){const i=Wi(t,Wi(e?.defaultValue,"#ffffff"));return nY.test(i)?i:"#ffffff"}if(n==="enum"){const i=Array.isArray(e?.options)?e.options:[],s=Wi(t,i[0]?.value||"");return i.some(a=>a.value===s)?s:i[0]?.value||""}if(n==="string")return String(t??"");if(n==="button")return Math.max(0,Math.floor(El(t,0)));const r=El(e?.min,0),o=Math.max(El(e?.max,r),r);return rY(El(t,El(e?.defaultValue,r)),r,o)}function iY(e,t){const n=Zf(t)?t:{},r=_k(n.type),o=El(n.min,0),i=Math.max(El(n.max,r==="number"?1:o),o),s=oY(n.options||n.values),a=r==="boolean"?!1:r==="color"?"#ffffff":r==="enum"?s[0]?.value||"":r==="string"?"":0;return{id:e,type:r,label:Wi(n.label,e),description:Wi(n.description),unit:Wi(n.unit),min:o,max:i,step:Math.max(El(n.step,r==="number"?.01:1),0),defaultValue:ed({type:r,min:o,max:i,options:s},n.default??n.defaultValue??a),options:s}}function sY(e){return(Array.isArray(e)?e.map(n=>[n?.id,n]):Object.entries(Zf(e)?e:{})).map(([n,r])=>iY(Wi(n),r)).filter(n=>n.id)}function aY(e){return Object.fromEntries((Array.isArray(e)?e:[]).filter(t=>t?.id).map(t=>[t.id,t]))}function Jf(e,t={}){const n=e?.parameterMap||{};return Object.fromEntries(Object.values(n).map(r=>[r.id,ed(r,Zf(t)&&Object.hasOwn(t,r.id)?t[r.id]:r.defaultValue)]))}function lY(e){return(Array.isArray(e)?e.map(n=>[n?.id,n]):Object.entries(Zf(e)?e:{})).map(([n,r])=>{const o=Zf(r)?r:{},i=Wi(n);return i?{id:i,label:Wi(o.label,i),description:Wi(o.description),duration:Math.max(El(o.duration??o.durationSeconds,1),.001),loop:o.loop!==!1,update:typeof o.update=="function"?o.update:null,raw:o}:null}).filter(Boolean)}class cY extends Error{}function ta(e){throw new cY(String(e))}function Ra(e){return JSON.stringify(String(e))}function uY(e){return typeof e=="boolean"?e?"true":"false":((typeof e!="number"||!Number.isFinite(e))&&ta(`literal ${String(e)}`),Object.is(e,-0)?"-0":String(e))}function v0(e){return e==="float"||e==="int"||e==="bool"?"s":e==="vec2"?2:e==="vec3"?3:e==="vec4"?4:null}const dY=new Set(["float","int","bool","length","dot"]),mT={vec2:2,vec3:3,vec4:4,cross:3},fY=new Set(["abs","sign","floor","ceil","fract","sqrt","exp","log","sin","cos","tan","asin","acos","normalize"]),mY=new Set(["min","max","clamp","mix","smoothstep","mod","pow"]);function pY(e){let t=null;for(const n of e){if(n===null)return null;if(typeof n=="number"){if(t!==null&&t!==n)return null;t=n}}return t===null?"s":t}function Mu(e,t){if(!(!e||typeof e!="object"))switch(e.type){case"var":{const n=v0(e.varType);t.has(e.name)&&t.get(e.name)!==n?t.set(e.name,null):t.set(e.name,n);return}case"block":for(const n of e.body)Mu(n,t);return;case"if":Mu(e.consequent,t),Mu(e.alternate,t);return;case"for":Mu(e.init,t),Mu(e.body,t);return}}const pT={"+":"add","-":"sub","*":"mul","/":"div"};class Rk{constructor(t,n,r){this.context=t,this.fn=n,this.name=r,this.types=new Map;for(const o of n.params)this.types.set(o.name,v0(o.type));Mu(n.body,this.types),this.tempCount=0,this.guardCount=0}temp(){const t=`t${this.tempCount}`;return this.tempCount+=1,t}guard(){const t=`g${this.guardCount}`;return this.guardCount+=1,t}isLocal(t){return this.types.has(t)}readRef(t){return this.isLocal(t)?`l_${t}`:this.context.globalTypes.has(t)?`G[${Ra(t)}]`:(ta(`unknown identifier ${t}`),"")}shapeOfName(t){return this.isLocal(t)?this.types.get(t):this.context.globalTypes.get(t)??null}writeStmt(t,n,{shape:r=null,fresh:o=!1}={}){const s=!o&&r!=="s"?`H.cloneValue(${n})`:n;return`${this.readRef(t)} = ${s}`}emitArith(t,n,r){if(n.shape==="s"&&r.shape==="s")return{code:`(${n.code} ${t} ${r.code})`,shape:"s"};if(typeof n.shape=="number"&&(r.shape==="s"||n.shape===r.shape)){const i=this.temp(),s=this.temp(),a=n.shape,l=u=>r.shape==="s"?`${i}[${u}] ${t} ${s}`:`${i}[${u}] ${t} ${s}[${u}]`,c=Array.from({length:a},(u,f)=>l(f)).join(", ");return{code:`(${i} = ${n.code}, ${s} = ${r.code}, [${c}])`,shape:a}}if(n.shape==="s"&&typeof r.shape=="number"){const i=this.temp(),s=this.temp(),a=Array.from({length:r.shape},(l,c)=>`${i} ${t} ${s}[${c}]`).join(", ");return{code:`(${i} = ${n.code}, ${s} = ${r.code}, [${a}])`,shape:r.shape}}const o=typeof n.shape=="number"?typeof r.shape=="number"?Math.max(n.shape,r.shape):n.shape:typeof r.shape=="number"?r.shape:null;return{code:`H.${pT[t]}(${n.code}, ${r.code})`,shape:o}}emitExpression(t){switch(t.type){case"literal":return{code:uY(t.value),shape:"s"};case"identifier":return{code:this.readRef(t.name),shape:this.shapeOfName(t.name)};case"member":{const n=this.emitExpression(t.object),r=String(t.property),o=r.length===1?"s":r.length,i=[...r].map(c=>({x:0,y:1,z:2,w:3,r:0,g:1,b:2,a:3,s:0,t:1,p:2,q:3})[c]);if(!(i.every(c=>c!==void 0)&&typeof n.shape=="number"&&i.every(c=>c<n.shape)))return{code:`H.getSwizzle(${n.code}, ${Ra(t.property)})`,shape:i.every(c=>c!==void 0)?o:null};if(i.length===1)return{code:`(${n.code})[${i[0]}]`,shape:"s"};const a=this.temp(),l=i.map(c=>`${a}[${c}]`).join(", ");return{code:`(${a} = ${n.code}, [${l}])`,shape:o}}case"unary":{const n=this.emitExpression(t.argument);if(t.op==="-"){if(n.shape==="s")return{code:`(-(${n.code}))`,shape:"s"};if(typeof n.shape=="number"){const r=this.temp(),o=Array.from({length:n.shape},(i,s)=>`-${r}[${s}]`).join(", ");return{code:`(${r} = ${n.code}, [${o}])`,shape:n.shape}}return{code:`H.neg(${n.code})`,shape:n.shape}}return t.op==="!"?{code:`(!H.truthy(${n.code}))`,shape:"s"}:{code:`(${n.code})`,shape:n.shape}}case"update":{t.argument?.type!=="identifier"&&ta("update of a non-identifier");const n=this.shapeOfName(t.argument.name),r=this.temp(),o=this.temp(),i=this.readRef(t.argument.name),s=n==="s"?`${o} = ${r} ${t.op==="++"?"+":"-"} 1`:`${o} = H.${t.op==="++"?"add":"sub"}(${r}, 1)`,a=this.writeStmt(t.argument.name,o,{shape:n});return{code:`(${r} = ${i}, ${s}, ${a}, ${t.prefix?o:r})`,shape:n}}case"binary":{if(t.op==="&&"||t.op==="||"){const o=this.emitExpression(t.left),i=this.emitExpression(t.right);return{code:`(H.truthy(${o.code}) ${t.op} H.truthy(${i.code}))`,shape:"s"}}const n=this.emitExpression(t.left),r=this.emitExpression(t.right);if(pT[t.op])return this.emitArith(t.op,n,r);switch(t.op){case"<":case">":case"<=":case">=":return{code:`(${n.code} ${t.op} ${r.code})`,shape:"s"};case"==":return{code:`(${n.code} === ${r.code})`,shape:"s"};case"!=":return{code:`(${n.code} !== ${r.code})`,shape:"s"};default:ta(`operator ${t.op}`)}return{code:"",shape:null}}case"ternary":{const n=this.emitExpression(t.condition),r=this.emitExpression(t.consequent),o=this.emitExpression(t.alternate);return{code:`(H.truthy(${n.code}) ? ${r.code} : ${o.code})`,shape:r.shape===o.shape?r.shape:null}}case"assign":return this.emitAssign(t);case"call":{const n=t.callee?.type==="identifier"?t.callee.name:"",r=t.args.map(i=>this.emitExpression(i)),o=r.map(i=>i.code).join(", ");if(this.context.builtins[n]){this.context.usedBuiltins.add(n);let i=null;return dY.has(n)?i="s":n in mT?i=mT[n]:fY.has(n)?i=r[0]?.shape??null:mY.has(n)&&(i=pY(r.map(s=>s.shape))),{code:`B_${n}(${o})`,shape:i}}return this.context.functionShapes.has(n)?{code:`f_${n}(${o})`,shape:this.context.functionShapes.get(n)}:(ta(`unknown function ${n}`),{code:"",shape:null})}default:return ta(`expression node ${t?.type}`),{code:"",shape:null}}}emitAssign(t){const n=this.temp(),r=this.emitExpression(t.right),o=(i,s)=>{if(t.op==="=")return{code:n,shape:r.shape};const a={"+=":"+","-=":"-","*=":"*"}[t.op]??"/";return this.emitArith(a,{code:i,shape:s},{code:n,shape:r.shape})};if(t.left?.type==="identifier"){const i=t.left.name,s=o(this.readRef(i),this.shapeOfName(i)),a=this.temp(),l=this.writeStmt(i,a,{shape:s.shape});return{code:`(${n} = ${r.code}, ${a} = ${s.code}, ${l}, ${a})`,shape:s.shape}}if(t.left?.type==="member"&&t.left.object?.type==="identifier"){const i=t.left.object.name,s=this.temp(),a=this.temp(),l=Ra(t.left.property),c=String(t.left.property).length===1?"s":String(t.left.property).length,u=o(`H.getSwizzle(${s}, ${l})`,c),f=this.writeStmt(i,s,{shape:this.shapeOfName(i)});return{code:`(${n} = ${r.code}, ${s} = ${this.readRef(i)}, ${a} = ${u.code}, H.setSwizzle(${s}, ${l}, ${a}), ${f}, ${a})`,shape:u.shape}}return ta("assignment target"),{code:"",shape:null}}emitStatement(t){switch(t.type){case"empty":return";";case"block":return`{
|
||
${t.body.map(n=>this.emitStatement(n)).join(`
|
||
`)}
|
||
}`;case"var":{t.init||ta("var without initializer");const n=`H.castValue(${this.emitExpression(t.init).code}, ${Ra(t.varType)})`;return`${this.writeStmt(t.name,n,{fresh:!0})};`}case"expr":return`${this.emitExpression(t.expression).code};`;case"return":return t.expression||ta("bare return"),`return H.castValue(${this.emitExpression(t.expression).code}, ${Ra(this.fn.returnType)});`;case"if":{const n=this.emitStatement(t.consequent),r=t.alternate?` else ${this.emitStatement(t.alternate)}`:"";return`if (H.truthy(${this.emitExpression(t.condition).code})) ${n}${r}`}case"break":return"break;";case"continue":return"continue;";case"for":{const n=this.guard(),r=t.init?this.emitStatement(t.init):";",o=t.update?`(${this.emitExpression(t.update).code}, ${n} += 1)`:`${n} += 1`,i=t.condition?`if (!H.truthy(${this.emitExpression(t.condition).code})) break;
|
||
`:"";return`${r}
|
||
${n} = 0;
|
||
for (;; ${o}) {
|
||
if (${n} >= 10000) { throw new Error("GLSL for-loop exceeded exporter safety limit"); }
|
||
${i}${this.emitStatement(t.body)}
|
||
}`}default:return ta(`statement node ${t?.type}`),""}}emit(){const t=this.fn.params.map((a,l)=>`a${l}`),n=this.fn.params.map((a,l)=>`let l_${a.name} = H.castValue(a${l}, ${Ra(a.type)});`),r=this.emitStatement(this.fn.body),o=new Set(this.fn.params.map(a=>a.name)),i=[...this.types.keys()].filter(a=>!o.has(a)),s=[...i.length?[`let ${i.map(a=>`l_${a}`).join(", ")};`]:[],...this.tempCount?[`let ${Array.from({length:this.tempCount},(a,l)=>`t${l}`).join(", ")};`]:[],...this.guardCount?[`let ${Array.from({length:this.guardCount},(a,l)=>`g${l}`).join(", ")};`]:[]];return`function f_${this.name}(${t.join(", ")}) {
|
||
${n.join(`
|
||
`)}
|
||
${s.join(`
|
||
`)}
|
||
${r}
|
||
return H.defaultValueForType(${Ra(this.fn.returnType)});
|
||
}`}}class hY extends Rk{constructor(t){super(t,{params:[],body:{type:"block",body:[]},returnType:"void"},"globals"),this.types=new Map}readRef(t){return this.context.globalTypes.has(t)?`G[${Ra(t)}]`:(ta(`unknown global identifier ${t}`),"")}shapeOfName(t){return this.context.globalTypes.get(t)??null}}function gY(e,t,n,r){try{const{BUILTINS:o,tokenize:i,Parser:s,helpers:a}=r,l=new s(i(t)).parseProgram();for(const w of l.functions.values())if(w.params?.some(_=>_.qualifiers?.includes("inout")))return null;if(!l.functions.has(n))return null;const c=Object.create(null);c.PI=Math.PI,c.TWO_PI=Math.PI*2;const u=new Map([["PI","s"],["TWO_PI","s"]]);for(const[w,_]of Object.entries(e?.uniforms||{}))c[w]=a.cloneValue(a.castValue(_?.value,_?.type)),u.set(w,v0(_?.type));for(const w of l.globals)Mu(w,u);const f=new Map([...l.functions.entries()].map(([w,_])=>[w,v0(_.returnType)])),m={builtins:o,usedBuiltins:new Set,functionShapes:f,globalTypes:u},p=[];for(const[w,_]of l.functions.entries())p.push(new Rk(m,_,w).emit());const b=new hY(m),y=l.globals.map(w=>b.emitStatement(w)),x=[...b.tempCount?[`let ${Array.from({length:b.tempCount},(w,_)=>`t${_}`).join(", ")};`]:[],...b.guardCount?[`let ${Array.from({length:b.guardCount},(w,_)=>`g${_}`).join(", ")};`]:[]],S=[...m.usedBuiltins].map(w=>`const B_${w} = BUILTINS[${Ra(w)}];`),E=[...l.functions.keys()].map(w=>`${Ra(w)}: f_${w}`),C=`"use strict";
|
||
${S.join(`
|
||
`)}
|
||
${p.join(`
|
||
`)}
|
||
${x.join(`
|
||
`)}
|
||
${y.join(`
|
||
`)}
|
||
return { ${E.join(", ")} };`,N=new Function("H","BUILTINS","G",C)(a,o,c);return{compiled:!0,call(w,_){const I=N[w];if(!I)throw new Error(`Unknown GLSL function: ${w}`);return I(..._)}}}catch{return null}}var yY={};function xi(e){return Array.isArray(e)}function Dl(e,t=0){const n=Number(e);return Number.isFinite(n)?n:t}function yi(e){return xi(e)?e.some(t=>yi(t)):!!e}function oA(e,t){const n=[];for(const r of e)xi(r)?n.push(...r):n.push(r);return n.length===0&&n.push(0),n.length===1?Array.from({length:t},()=>Dl(n[0])):Array.from({length:t},(r,o)=>Dl(n[o],0))}function pr(e=0,t=void 0){return oA(t===void 0?[e]:[e,t],2)}function Si(e=0,t=void 0,n=void 0){return oA(t===void 0&&n===void 0?[e]:[e,t,n],3)}function iA(e=0,t=void 0,n=void 0,r=void 0){return oA(t===void 0&&n===void 0&&r===void 0?[e]:[e,t,n,r],4)}function Qn(e,t){return xi(e)?e.map(n=>t(n)):t(e)}function Ua(e,t,n){if(xi(e)&&xi(t)){const r=Math.max(e.length,t.length);return Array.from({length:r},(o,i)=>n(e[i]??0,t[i]??0))}return xi(e)?e.map(r=>n(r,t)):xi(t)?t.map(r=>n(e,r)):n(e,t)}function jo(e,t){return Ua(e,t,(n,r)=>n+r)}function on(e,t){return Ua(e,t,(n,r)=>n-r)}function ot(e,t){return Ua(e,t,(n,r)=>n*r)}function Ui(e,t){return Ua(e,t,(n,r)=>n/r)}function sA(e){return Qn(e,t=>-t)}function A0(e){return Qn(e,Math.abs)}function Pk(e,t){return Ua(e,t,Math.min)}function Fh(e,t){return Ua(e,t,Math.max)}function yf(e,t,n){return Pk(Fh(e,t),n)}function WE(e,t,n){return jo(ot(e,on(1,n)),ot(t,n))}function bY(e,t,n){const r=yf(Ui(on(n,e),on(t,e)),0,1);return ot(ot(r,r),on(3,ot(2,r)))}function aA(e,t){return Ua(e,t,(n,r)=>n-r*Math.floor(n/r))}function oo(e){return xi(e)?Math.hypot(...e):Math.abs(e)}function Un(e,t){const n=xi(e)?e:[e],r=xi(t)?t:[t],o=Math.max(n.length,r.length);let i=0;for(let s=0;s<o;s+=1)i+=(n[s]??0)*(r[s]??0);return i}function hT(e,t){const n=Si(e),r=Si(t);return[n[1]*r[2]-n[2]*r[1],n[2]*r[0]-n[0]*r[2],n[0]*r[1]-n[1]*r[0]]}function If(e){const t=oo(e);return t>1e-12?Ui(e,t):ot(e,0)}function Ok(e){const t={x:0,y:1,z:2,w:3,r:0,g:1,b:2,a:3,s:0,t:1,p:2,q:3};return String(e||"").split("").map(n=>t[n])}function co(e,t){const n=Ok(t);if(!n.length||n.some(i=>i===void 0))throw new Error(`Unsupported GLSL member access: .${t}`);const r=xi(e)?e:[e],o=n.map(i=>r[i]??0);return o.length===1?o[0]:o}function kk(e,t,n){if(!xi(e))throw new Error(`Cannot assign .${t} on a scalar value`);const r=Ok(t),o=xi(n)?n:[n];return r.forEach((i,s)=>{if(i===void 0)throw new Error(`Unsupported GLSL member assignment: .${t}`);e[i]=Dl(o[s],o[0]??0)}),e}function Dk(e,t,n,r,o){const i=(o-r)/(n-t);return(e-t)*i+r}function xY(e,t,n,r,o){return Math.min(Math.max(Dk(e,t,n,r,o),r),o)}function SY(e,t){return(e-t)/(e+t)}function EY(e,t,n){return e*Math.cos(n)+t*Math.sin(n)}function cx(e,t){if(xi(e)||xi(t))return Ua(e,t,cx);const n=t*.5,r=t*.25,o=aA(e+n,t);return r-Math.abs(o-n)}function ux(e,t){return jo(cx(e,t),ot(t,.25))}function Lk(e,t){return cx(on(e,ot(t,.5)),t)}function KE(e,t){return jo(Lk(e,t),ot(t,.25))}function ng(e,t){return on(aA(jo(e,ot(t,.5)),t),ot(t,.5))}function gT(e,t,n){const r=Math.max(n,0),o=Fh(jo(pr(e,t),r),0);return Math.min(-r,Math.max(e,t))+oo(o)}function yT(e,t,n){return Math.max(Math.max(e,t),(e+t+n)*.7071067811865476)}function bT(e,t,n){const r=Math.max(n,1e-6)*.5;return r*Math.log(Math.exp(e/r)+Math.exp(t/r))}function xT(e,t,n,r){const o=Math.max(n,0),i=Math.max(r,1e-6),s=Fh(jo(pr(e,t),o),0);return Math.min(-o,Math.max(e,t))+Math.pow(Math.pow(s[0],i)+Math.pow(s[1],i),1/i)}function ST(e,t,n){const r=Math.max(e,t),o=Math.max(n,0);if(o<=0)return r;const i=e+t-Math.sqrt(e*e+t*t),s=Math.min(Math.max((r+o)/o,0),1),a=s*s*(3-2*s);return r<-o?r:WE(r,i,a)}const nt={float:(e=0)=>Dl(e),int:(e=0)=>Math.trunc(Dl(e)),bool:(e=!1)=>yi(e),vec2:pr,vec3:Si,vec4:iA,abs:A0,min:Pk,max:Fh,clamp:yf,mix:WE,smoothstep:bY,mod:aA,length:oo,dot:Un,cross:hT,normalize:If,sin:e=>Qn(e,Math.sin),cos:e=>Qn(e,Math.cos),tan:e=>Qn(e,Math.tan),atan:(...e)=>e.length>=2?Math.atan2(e[0],e[1]):Qn(e[0],Math.atan),pow:(e,t)=>Ua(e,t,Math.pow),sqrt:e=>Qn(e,Math.sqrt),exp:e=>Qn(e,Math.exp),log:e=>Qn(e,Math.log),floor:e=>Qn(e,Math.floor),ceil:e=>Qn(e,Math.ceil),fract:e=>Qn(e,t=>t-Math.floor(t)),sign:e=>Qn(e,Math.sign),radians:e=>Qn(e,t=>t*Math.PI/180),degrees:e=>Qn(e,t=>t*180/Math.PI),asin:e=>Qn(e,Math.asin),acos:e=>Qn(e,Math.acos),sinh:e=>Qn(e,Math.sinh),cosh:e=>Qn(e,Math.cosh),tanh:e=>Qn(e,Math.tanh),asinh:e=>Qn(e,Math.asinh),acosh:e=>Qn(e,Math.acosh),atanh:e=>Qn(e,Math.atanh),exp2:e=>Qn(e,t=>2**t),log2:e=>Qn(e,Math.log2),inversesqrt:e=>Qn(e,t=>1/Math.sqrt(t)),trunc:e=>Qn(e,Math.trunc),round:e=>Qn(e,Math.round),roundEven:e=>Qn(e,t=>{const n=Math.round(t);return Math.abs(t%1)===.5&&n%2!==0?n-Math.sign(t):n}),step:(e,t)=>Ua(e,t,(n,r)=>r<n?0:1),distance:(e,t)=>oo(on(e,t)),reflect:(e,t)=>on(e,ot(t,2*Un(t,e))),implicit_clamp01:e=>yf(e,0,1),implicit_linear_map:Dk,implicit_ramp:xY,implicit_two_body_field:SY,implicit_two_body_polar:EY,implicit_triangle_wave_even:cx,implicit_triangle_wave_even_positive:ux,implicit_triangle_wave_odd:Lk,implicit_triangle_wave_odd_positive:KE,implicit_repeat_centered:ng,implicit_intersect_sharp:(e,t)=>Math.max(e,t),implicit_union_sharp:(e,t)=>Math.min(e,t),implicit_intersect_round:gT,implicit_union_round:(e,t,n)=>-gT(-e,-t,n),implicit_intersect_chamfer:yT,implicit_union_chamfer:(e,t,n)=>-yT(-e,-t,n),implicit_intersect_exp:bT,implicit_union_exp:(e,t,n)=>-bT(-e,-t,n),implicit_intersect_lp_norm:xT,implicit_union_lp_norm:(e,t,n,r)=>-xT(-e,-t,n,r),implicit_intersect_rvachev:ST,implicit_union_rvachev:(e,t,n)=>-ST(-e,-t,n),implicit_plane2:(e,t,n)=>Un(on(e,t),If(n)),implicit_line_segment2:(e,t,n)=>{const r=on(n,t),o=Un(r,r);if(o<1e-12)return oo(on(e,t));const i=yf(Un(on(e,t),r)/o,0,1);return oo(on(e,jo(t,ot(i,r))))},implicit_sphere:(e,t,n)=>oo(on(e,t))-n,implicit_box_centered:(e,t,n)=>{const r=on(A0(on(e,n)),ot(t,.5));return oo(Fh(r,0))+Math.min(Math.max(r[0],Math.max(r[1],r[2])),0)},implicit_plane:(e,t,n)=>Un(on(e,t),If(n)),implicit_line_segment:(e,t,n)=>{const r=on(n,t),o=Un(r,r);if(o<1e-12)return oo(on(e,t));const i=yf(Un(on(e,t),r)/o,0,1);return oo(on(e,jo(t,ot(i,r))))},implicit_torus:(e,t,n)=>{const r=pr(oo(co(e,"xy"))-t,co(e,"z"));return oo(r)-n},implicit_axis:(e,t,n)=>{const r=oo(n);if(r<1e-12)return oo(on(e,t));const o=Ui(n,r),i=on(e,t);return oo(on(i,ot(Un(i,o),o)))},implicit_cylinder:(e,t,n,r)=>nt.implicit_axis(e,t,n)-r,implicit_cylinder_capped:(e,t,n,r)=>{const o=on(n,t),i=nt.implicit_cylinder(e,t,o,r),s=-nt.implicit_plane(e,t,o),a=nt.implicit_plane(e,n,o);return Math.max(i,Math.max(s,a))},implicit_capsule:(e,t,n,r)=>nt.implicit_line_segment(e,t,n)-r,implicit_cone_capsule:(e,t,n,r,o)=>{const i=on(n,t),s=Un(i,i);if(s<1e-12)return nt.implicit_sphere(e,t,r);const a=yf(Un(on(e,t),i)/s,0,1),l=WE(r,o,a);return oo(on(e,jo(t,ot(a,i))))-l},implicit_cone:(e,t,n,r)=>{const o=oo(n);if(o<1e-12)return oo(on(e,t));const i=Ui(n,o),s=on(e,t),a=Un(s,i);return oo(on(s,ot(a,i)))-a*Math.tan(r)},implicit_cone_capped:(e,t,n,r,o)=>{const i=on(n,t),s=oo(i);if(s<1e-12)return nt.implicit_sphere(e,t,r);const a=Math.atan2(Math.abs(o-r),s),l=r<o?nt.implicit_cone(e,t,i,a)-r:nt.implicit_cone(e,n,sA(i),a)-o,c=-nt.implicit_plane(e,t,i),u=nt.implicit_plane(e,n,i);return Math.max(l,Math.max(c,u))},implicit_shell:(e,t,n=0)=>Math.abs(e+n*t*.5)-t*.5,implicit_rotate_axis:(e,t,n,r)=>{const o=If(n),i=on(e,t),s=Math.cos(r),a=Math.sin(r);return jo(jo(jo(t,ot(i,s)),ot(hT(o,i),a)),ot(o,Un(o,i)*(1-s)))},implicit_remap_cylindrical:(e,t)=>{const n=oo(co(e,"xy")),r=Math.atan2(e[1],e[0]);return Si(n,r*(t/(Math.PI*2)),e[2])},implicit_tpms_gyroid:(e,t,n)=>{const r=ot(e,Ui(Math.PI*2,t)),o=co(r,"yzx");return Un(n,ot(nt.sin(r),nt.cos(o)))*(t[0]+t[1]+t[2])/18},implicit_tpms_schwarz:(e,t,n,r)=>{const o=ot(e,Ui(Math.PI*2,t)),i=co(o,"yzx"),s=jo(Si(-(1-r)),ot(nt.sin(o),r));return Un(n,ot(nt.cos(i),s))*(t[0]+t[1]+t[2])/36},implicit_diamond:()=>0};nt.implicit_tpms_diamond=(e,t,n,r)=>{const o=ot(e,Ui(Math.PI*2,t)),i=co(o,"yzx"),s=co(o,"zxy"),a=nt.sin(o),l=nt.cos(i),c=nt.cos(s),u=1-r,f=u*a[0]*a[1]*a[2],m=Un(n,ot(ot(a,l),jo(ot(c,u),Si(r))));return(f+m)*(t[0]+t[1]+t[2])/(6*2.8284271247461903*2)};nt.implicit_tpms_lidinoid=(e,t,n,r)=>{const o=ot(e,Ui(Math.PI*2,t)),i=co(o,"yzx"),s=co(o,"zxy"),a=nt.cos(ot(2,o)),l=co(a,"yzx"),c=1-r,u=Un(n,ot(ot(nt.sin(s),nt.cos(i)),jo(ot(nt.sin(ot(2,o)),c),Si(r)))),f=c*Un(a,l);return(u-f)*(t[0]+t[1]+t[2])/72};nt.implicit_tpms_neovius=(e,t,n,r)=>{const o=ot(e,Ui(Math.PI*2,t)),i=ot(nt.cos(o),n),s=-Un(i,Si(1)),a=(1-r)*(4/3)*i[0]*i[1]*i[2];return(s-a)*(t[0]+t[1]+t[2])/(6*(26/3))};nt.implicit_tpms_split_p=(e,t,n,r,o)=>{const i=ot(e,Ui(Math.PI*2,t)),s=co(i,"yzx"),a=co(i,"zxy"),l=nt.sin(ot(2,i)),c=nt.cos(ot(2,i)),u=-n*Un(ot(ot(l,nt.cos(s)),nt.sin(a)),Si(1)),f=r*Un(ot(l,c),Si(1)),m=o*Un(c,Si(1));return(u+f+m)*(t[0]+t[1]+t[2])/36};nt.implicit_tpms_iwp=(e,t,n)=>{const r=ot(e,Ui(Math.PI*2,t)),o=co(r,"yzx"),i=2*Un(ot(ot(n,nt.cos(r)),nt.cos(o)),Si(1)),s=Un(nt.cos(ot(2,r)),Si(1));return(i-s)*(t[0]+t[1]+t[2])/48};nt.implicit_cubic_grid=(e,t)=>{const n=ux(e,t);return Math.min(n[0],Math.min(n[1],n[2]))};nt.implicit_square_honeycomb=(e,t)=>{const n=ux(co(e,"xy"),t);return Math.min(n[0],n[1])};nt.implicit_square_honeycomb_reinforced=(e,t,n,r,o)=>{const i=co(e,"xy"),s=ux(i,t),a=Math.min(s[0],s[1]),l=ng(i,t),c=Math.PI*n;let u=Math.abs(nt.implicit_plane2(l,pr(0),pr(Math.cos(c),Math.sin(c))));if(o>.5){const f=Math.PI*r,m=Math.abs(nt.implicit_plane2(l,pr(0),pr(Math.cos(f),Math.sin(f))));u=Math.min(u,m)}return Math.min(a,u)};nt.implicit_square_diagonal_honeycomb=(e,t)=>{const n=pr(t[0]+t[1]),r=ng(co(e,"xy"),n),o=Math.abs(nt.implicit_plane2(r,pr(0),pr(t[1],t[0]))),i=Math.abs(nt.implicit_plane2(r,pr(0),pr(t[1],-t[0])));return Math.min(o,i)};nt.implicit_octet_honeycomb=(e,t)=>{const n=co(e,"xy"),r=nt.implicit_square_honeycomb(e,t),o=KE(n,t),i=Math.min(o[0],o[1]),s=oo(t)*.5,a=pr((n[0]+n[1])/1.4142135623730951,(n[0]-n[1])/1.4142135623730951),l=KE(a,pr(s));return Math.min(Math.min(r,i),Math.min(l[0],l[1]))};nt.implicit_hexagonal_honeycomb=(e,t,n)=>{const r=co(e,"xy"),o=ot(t,.5),i=ot(t,.25),s=pr(0,(1-n)*o[1]),a=pr(o[0],n*o[1]),l=A0(ng(r,t)),c=pr(l[0]-o[0],o[1]-l[1]),u=Math.min(nt.implicit_line_segment2(l,s,pr(0,t[1])),Math.min(nt.implicit_line_segment2(l,s,a),nt.implicit_line_segment2(l,s,pr(-a[0],a[1])))),f=Math.min(nt.implicit_line_segment2(c,s,pr(0,t[1])),Math.min(nt.implicit_line_segment2(c,s,a),nt.implicit_line_segment2(c,s,pr(-a[0],a[1]))));return l[0]<i[0]?u:f};nt.implicit_triangular_honeycomb=(e,t)=>{const n=A0(ng(co(e,"xy"),t)),r=ot(t,.5),o=ot(t,.25),i=pr(0,1),s=If(pr(t[1],t[0])),a=If(pr(t[1],-t[0])),l=Math.min(Math.abs(Un(n,i)),Math.min(Math.abs(Un(n,s)),Math.abs(Un(n,a)))),c=on(n,r),u=Math.min(Math.abs(Un(c,i)),Math.min(Math.abs(Un(c,s)),Math.abs(Un(c,a))));return n[1]<o[1]?l:u};const gp=new Set(["float","int","bool","vec2","vec3","vec4"]),XS=new Set(["const","highp","mediump","lowp","in","out","inout","uniform","varying"]),wY=["<=",">=","==","!=","&&","||","+=","-=","*=","/=","++","--"];function vY(e){return String(e||"").replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/.*$/gm,"")}function Fk(e){const t=[],n=vY(e);let r=0;for(;r<n.length;){const o=n[r];if(/\s/.test(o)){r+=1;continue}const i=n.slice(r).match(/^(?:\d+\.\d*|\.\d+|\d+)(?:[eE][+-]?\d+)?/);if(i){t.push({type:"number",value:Number(i[0])}),r+=i[0].length;continue}const s=n.slice(r).match(/^[A-Za-z_][A-Za-z0-9_]*/);if(s){t.push({type:"identifier",value:s[0]}),r+=s[0].length;continue}const a=wY.find(l=>n.startsWith(l,r));if(a){t.push({type:"operator",value:a}),r+=a.length;continue}t.push({type:"punct",value:o}),r+=1}return t}class jk{constructor(t){this.tokens=t,this.index=0}peek(t=0){return this.tokens[this.index+t]||null}consume(t=null){const n=this.peek();if(!n)throw new Error(`Expected ${t||"token"}, reached end of GLSL source`);if(t!==null&&n.value!==t)throw new Error(`Expected ${t}, got ${n.value}`);return this.index+=1,n}match(t){return this.peek()?.value===t?(this.index+=1,!0):!1}skipQualifiers(){const t=[];for(;XS.has(this.peek()?.value);)t.push(this.consume().value);return t}parseProgram(){const t=[],n=new Map;for(;this.peek();){this.skipQualifiers();const r=this.peek()?.value;if(!gp.has(r)&&r!=="void"){this.consume();continue}this.consume();const o=this.consume().value;if(this.match("(")){const i=[];if(!this.match(")")){do{const s=this.skipQualifiers(),a=this.consume().value,l=this.consume().value;i.push({type:a,name:l,qualifiers:s})}while(this.match(","));this.consume(")")}n.set(o,{name:o,params:i,returnType:r,body:this.parseBlock()})}else{let i={type:"literal",value:0};this.match("=")&&(i=this.parseExpression()),this.consume(";"),t.push({type:"var",varType:r,name:o,init:i})}}return{globals:t,functions:n}}parseBlock(){this.consume("{");const t=[];for(;this.peek()&&this.peek().value!=="}";)t.push(this.parseStatement());return this.consume("}"),{type:"block",body:t}}parseStatement(){if(this.peek()?.value==="{")return this.parseBlock();if(this.match(";"))return{type:"empty"};if(this.match("return")){const n=this.parseExpression();return this.consume(";"),{type:"return",expression:n}}if(this.match("break"))return this.consume(";"),{type:"break"};if(this.match("continue"))return this.consume(";"),{type:"continue"};if(this.match("if")){this.consume("(");const n=this.parseExpression();this.consume(")");const r=this.parseStatement(),o=this.match("else")?this.parseStatement():null;return{type:"if",condition:n,consequent:r,alternate:o}}if(this.match("for")){this.consume("(");const n=this.parseForPart(";");this.consume(";");const r=this.peek()?.value===";"?null:this.parseExpression();this.consume(";");const o=this.peek()?.value===")"?null:this.parseExpression();return this.consume(")"),{type:"for",init:n,condition:r,update:o,body:this.parseStatement()}}if(gp.has(this.peek()?.value)||XS.has(this.peek()?.value)&&gp.has(this.peek(1)?.value)){const n=this.parseVariableDeclaration();return this.consume(";"),n}const t=this.parseExpression();return this.consume(";"),{type:"expr",expression:t}}parseForPart(){return gp.has(this.peek()?.value)||XS.has(this.peek()?.value)&&gp.has(this.peek(1)?.value)?this.parseVariableDeclaration():this.peek()?.value===";"?{type:"empty"}:{type:"expr",expression:this.parseExpression()}}parseVariableDeclaration(){this.skipQualifiers();const t=this.consume().value,n=this.consume().value;let r={type:"literal",value:lA(t)};return this.match("=")&&(r=this.parseExpression()),{type:"var",varType:t,name:n,init:r}}parseExpression(){return this.parseAssignment()}parseAssignment(){const t=this.parseTernary(),n=this.peek()?.value;return["=","+=","-=","*=","/="].includes(n)?(this.consume(),{type:"assign",op:n,left:t,right:this.parseAssignment()}):t}parseTernary(){const t=this.parseLogicalOr();if(!this.match("?"))return t;const n=this.parseExpression();return this.consume(":"),{type:"ternary",condition:t,consequent:n,alternate:this.parseExpression()}}parseLogicalOr(){let t=this.parseLogicalAnd();for(;this.match("||");)t={type:"binary",op:"||",left:t,right:this.parseLogicalAnd()};return t}parseLogicalAnd(){let t=this.parseEquality();for(;this.match("&&");)t={type:"binary",op:"&&",left:t,right:this.parseEquality()};return t}parseEquality(){let t=this.parseComparison();for(;["==","!="].includes(this.peek()?.value);)t={type:"binary",op:this.consume().value,left:t,right:this.parseComparison()};return t}parseComparison(){let t=this.parseAdditive();for(;["<",">","<=",">="].includes(this.peek()?.value);)t={type:"binary",op:this.consume().value,left:t,right:this.parseAdditive()};return t}parseAdditive(){let t=this.parseMultiplicative();for(;["+","-"].includes(this.peek()?.value);)t={type:"binary",op:this.consume().value,left:t,right:this.parseMultiplicative()};return t}parseMultiplicative(){let t=this.parseUnary();for(;["*","/"].includes(this.peek()?.value);)t={type:"binary",op:this.consume().value,left:t,right:this.parseUnary()};return t}parseUnary(){return this.match("+")?this.parseUnary():this.match("-")?{type:"unary",op:"-",argument:this.parseUnary()}:this.match("!")?{type:"unary",op:"!",argument:this.parseUnary()}:this.match("++")?{type:"update",op:"++",argument:this.parseUnary(),prefix:!0}:this.match("--")?{type:"update",op:"--",argument:this.parseUnary(),prefix:!0}:this.parsePostfix()}parsePostfix(){let t=this.parsePrimary();for(;;){if(this.match(".")){t={type:"member",object:t,property:this.consume().value};continue}if(this.match("(")){const n=[];if(!this.match(")")){do n.push(this.parseExpression());while(this.match(","));this.consume(")")}t={type:"call",callee:t,args:n};continue}if(this.match("++")){t={type:"update",op:"++",argument:t,prefix:!1};continue}if(this.match("--")){t={type:"update",op:"--",argument:t,prefix:!1};continue}break}return t}parsePrimary(){const t=this.consume();if(t.type==="number")return{type:"literal",value:t.value};if(t.value==="true"||t.value==="false")return{type:"literal",value:t.value==="true"};if(t.value==="("){const n=this.parseExpression();return this.consume(")"),n}if(t.type==="identifier")return{type:"identifier",name:t.value};throw new Error(`Unexpected GLSL token: ${t.value}`)}}function lA(e){return e==="bool"?!1:e==="vec2"?pr(0):e==="vec3"?Si(0):e==="vec4"?iA(0):0}class zk{constructor(t){this.value=t}}class Bk{}class Vk{}const AY=Object.freeze(new Bk),CY=Object.freeze(new Vk);class ET{constructor(t=null){this.parent=t,this.values=new Map}has(t){return this.values.has(t)||!!this.parent?.has(t)}get(t){if(this.values.has(t))return this.values.get(t);if(this.parent)return this.parent.get(t);throw new Error(`Unknown GLSL identifier: ${t}`)}set(t,n){if(this.values.has(t)){this.values.set(t,hh(n));return}if(this.parent?.has(t)){this.parent.set(t,n);return}this.values.set(t,hh(n))}define(t,n){this.values.set(t,hh(n))}}function hh(e){return xi(e)?[...e]:e}function gh(e,t){return t==="int"?Math.trunc(Dl(e)):t==="float"?Dl(e):t==="bool"?yi(e):t==="vec2"?pr(e):t==="vec3"?Si(e):t==="vec4"?iA(e):e}function MY(e,t,n){switch(e){case"+":return jo(t,n);case"-":return on(t,n);case"*":return ot(t,n);case"/":return Ui(t,n);case"<":return t<n;case">":return t>n;case"<=":return t<=n;case">=":return t>=n;case"==":return t===n;case"!=":return t!==n;case"&&":return yi(t)&&yi(n);case"||":return yi(t)||yi(n);default:throw new Error(`Unsupported GLSL operator: ${e}`)}}function qE(e,t,n){if(e.type==="identifier")return{get:()=>t.get(e.name),set:r=>(t.set(e.name,r),r)};if(e.type==="member"){const r=qE(e.object,t);return{get:()=>co(r.get(),e.property),set:o=>{const i=r.get();return kk(i,e.property,o),r.set(i),o}}}throw new Error("Unsupported GLSL assignment target")}function Fo(e,t,n){switch(e.type){case"literal":return hh(e.value);case"identifier":return t.get(e.name);case"member":return co(Fo(e.object,t,n),e.property);case"unary":{const r=Fo(e.argument,t,n);return e.op==="-"?sA(r):e.op==="!"?!yi(r):r}case"update":{const r=qE(e.argument,t),o=r.get(),i=e.op==="++"?jo(o,1):on(o,1);return r.set(i),e.prefix?i:o}case"binary":return e.op==="&&"?yi(Fo(e.left,t,n))&&yi(Fo(e.right,t,n)):e.op==="||"?yi(Fo(e.left,t,n))||yi(Fo(e.right,t,n)):MY(e.op,Fo(e.left,t,n),Fo(e.right,t,n));case"ternary":return yi(Fo(e.condition,t,n))?Fo(e.consequent,t,n):Fo(e.alternate,t,n);case"assign":{const r=qE(e.left,t),o=Fo(e.right,t,n),i=r.get(),s=e.op==="="?o:e.op==="+="?jo(i,o):e.op==="-="?on(i,o):e.op==="*="?ot(i,o):Ui(i,o);return r.set(s)}case"call":{const r=e.callee.type==="identifier"?e.callee.name:"",o=e.args.map(i=>Fo(i,t,n));return nt[r]?nt[r](...o):n.call(r,o)}default:throw new Error(`Unsupported GLSL expression node: ${e.type}`)}}function Iu(e,t,n){switch(e.type){case"empty":return;case"block":for(const r of e.body)Iu(r,t,n);return;case"var":t.define(e.name,gh(Fo(e.init,t,n),e.varType));return;case"expr":Fo(e.expression,t,n);return;case"return":throw new zk(Fo(e.expression,t,n));case"if":yi(Fo(e.condition,t,n))?Iu(e.consequent,t,n):e.alternate&&Iu(e.alternate,t,n);return;case"break":throw AY;case"continue":throw CY;case"for":{Iu(e.init,t,n);for(let r=0;r<1e4;r+=1){if(e.condition&&!yi(Fo(e.condition,t,n)))return;try{Iu(e.body,t,n)}catch(o){if(o instanceof Bk)return;if(!(o instanceof Vk))throw o}e.update&&Fo(e.update,t,n)}throw new Error("GLSL for-loop exceeded exporter safety limit")}default:throw new Error(`Unsupported GLSL statement node: ${e.type}`)}}function $k(e){const t=String(e||"").trim();if(!t)throw new Error("Implicit CAD model has no GLSL source");return`${t}
|
||
|
||
float implicit_distance(vec3 p) {
|
||
return sdf(p);
|
||
}
|
||
`}function IY(e){const t=String(e||"").trim();if(!t)throw new Error("Implicit CAD model has no GLSL source");const n=/\bvec3\s+color\s*\(/.test(t);return`${t}
|
||
|
||
vec3 implicit_color(vec3 p, vec3 normal) {
|
||
${n?"return color(p, normal);":"return vec3(0.831372549, 0.831372549, 0.847058824);"}
|
||
}
|
||
`}function Gk(e,t,n){const r=new jk(Fk(t)).parseProgram();for(const[s,a]of r.functions){const l=a.params?.find(c=>c.qualifiers?.includes("inout"));if(l)throw new Error(`Unsupported GLSL: '${s}' uses an inout parameter ('${l.name}'). CPU evaluation (baking, export, field checks) cannot honour inout; GPU rendering is unaffected.`)}if(!r.functions.has(n))throw new Error(`Implicit CAD GLSL source did not define ${n}`);const o=new ET;for(const[s,a]of Object.entries({PI:Math.PI,TWO_PI:Math.PI*2}))o.define(s,a);for(const[s,a]of Object.entries(e?.uniforms||{}))o.define(s,gh(a?.value,a?.type));const i={call(s,a){const l=r.functions.get(s);if(!l)throw new Error(`Unknown GLSL function: ${s}`);const c=new ET(o);l.params.forEach((u,f)=>{c.define(u.name,gh(a[f],u.type))});try{Iu(l.body,c,i)}catch(u){if(u instanceof zk)return gh(u.value,l.returnType);throw u}return lA(l.returnType)}};for(const s of r.globals)Iu(s,o,i);return i}function NY(e,t,n){if(!(typeof process<"u"&&yY?.IMPLICIT_SDF_FORCE_INTERPRET==="1")){const o=gY(e,t,n,TY);if(o)return o}return Gk(e,t,n)}function Uk(e){const t=$k(e?.glslSource||e?.distanceSource),n=NY(e,t,"implicit_distance"),r=(o,i,s)=>Dl(n.call("implicit_distance",[Si(o,i,s)]),1e6);return r.compiled=n.compiled===!0,r}const TY={BUILTINS:nt,tokenize:Fk,Parser:jk,helpers:{add:jo,sub:on,mul:ot,div:Ui,neg:sA,truthy:yi,castValue:gh,cloneValue:hh,defaultValueForType:lA,finiteNumber:Dl,getSwizzle:co,setSwizzle:kk},normalizedDistanceSource:$k,normalizedColorSource:IY,createImplicitCadProgramRuntime:Gk},Hk="implicit.js/0.1.0",YE="implicit",yh=Object.freeze({min:[-50,-50,-50],max:[50,50,50]}),Cb=Object.freeze([4,8,16,32,64,128,256,512]),_Y=5,RY=9,PY=32,cA="#f4f4f5",XE=/^#(?:[0-9a-fA-F]{3}){1,2}$/,OY=/^[A-Za-z_][A-Za-z0-9_]*$/,wT=Object.freeze(new Set(["float","int","bool","vec2","vec3","vec4"])),Wk=Object.freeze({number:"float",boolean:"bool",color:"vec3",button:"int"});function Uc(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function ms(e,t=0){const n=Number(e);return Number.isFinite(n)?n:t}function Up(e,t){const n=Number(e);return Number.isFinite(n)&&n>0?n:t}function vT(e,t){const n=Array.isArray(e)||ArrayBuffer.isView(e)?e:[];return[0,1,2].map(r=>ms(n[r],t[r]||0))}function kY(e,t,n=[]){const r=Array.isArray(e)||ArrayBuffer.isView(e)?e:[];return Array.from({length:t},(o,i)=>ms(r[i],n[i]||0))}function uA(e,t=yh){const n=Up(e,null),r=n?{min:[-n,-n,-n],max:[n,n,n]}:Array.isArray(e)&&e.length>=2?{min:e[0],max:e[1]}:Uc(e)?e:t,o=vT(r.min,yh.min),i=vT(r.max,yh.max);for(let s=0;s<3;s+=1)if(i[s]<=o[s]){const a=(o[s]+i[s])/2;o[s]=a-.5,i[s]=a+.5}return{min:o,max:i}}function jh(e){return{min:[...e.min],max:[...e.max]}}function DY(e){return e==null||String(e).trim().toLowerCase()==="auto"?!1:!(Uc(e)&&e.auto===!0)}function Kk(e){return[e.max[0]-e.min[0],e.max[1]-e.min[1],e.max[2]-e.min[2]]}function AT(e,t,n){const r=Math.max(ms(n,0),.25);return uA({min:[e[0]-r,e[1]-r,e[2]-r],max:[t[0]+r,t[1]+r,t[2]+r]})}function CT(e,t,n){const o=Kk(t).map(u=>u/Math.max(n-1,1)),i=Math.max(Math.min(...o)*.35,.002),s=[1/0,1/0,1/0],a=[-1/0,-1/0,-1/0];let l=0,c=!1;for(let u=0;u<n;u+=1){const f=t.min[2]+o[2]*u;for(let m=0;m<n;m+=1){const p=t.min[1]+o[1]*m;for(let b=0;b<n;b+=1){const y=t.min[0]+o[0]*b,x=ms(e(y,p,f),1e6);x>i||(l+=1,s[0]=Math.min(s[0],y),s[1]=Math.min(s[1],p),s[2]=Math.min(s[2],f),a[0]=Math.max(a[0],y),a[1]=Math.max(a[1],p),a[2]=Math.max(a[2],f),x<=0&&(b===0||m===0||u===0||b===n-1||m===n-1||u===n-1)&&(c=!0))}}}return{hitCount:l,hitMin:s,hitMax:a,boundaryTouch:c,step:o,threshold:i}}function LY(e,t){const n=e.parameters.filter(o=>o.type==="number").filter(o=>!qk(o)).reduce((o,i)=>{const s=Math.abs(ms(t[i.id],0));return Math.max(o,s)},1),r=Math.max(n*3,4);return Cb.find(o=>o>=r)||Cb[Cb.length-1]}function FY(e,t,n){let r=null;try{r=Uk(e)}catch{return jh(yh)}let o=null;const i=LY(t,n.params);for(const s of Cb.filter(a=>a>=i)){const a=uA(s),l=CT(r,a,_Y);if(!l.hitCount)continue;const c=Math.max(Math.max(...l.step)*1.5,s*.06,.5);if(o=AT(l.hitMin,l.hitMax,c),!l.boundaryTouch)break}if(!o)return jh(yh);for(let s=0;s<1;s+=1){const a=CT(r,o,RY);if(!a.hitCount)break;const l=Math.max(Math.max(...a.step)*1.1,Math.max(...Kk(o))*.025,.25);o=AT(a.hitMin,a.hitMax,l)}return o}function qk(e){const t=String(e?.unit||"").trim().toLowerCase();if(t==="deg"||t==="rad")return!0;const n=`${e?.id||""} ${e?.label||""}`.toLowerCase();return["angle","phase","rotation","rotate","orbit","spin","yaw","pitch","roll"].some(r=>n.includes(r))}function jY(e,t,n){const r=e.parameters.filter(o=>!qk(o)).filter(o=>Wk[o.type]).filter(o=>o.type!=="color").map(o=>{const i=t[o.id];return typeof i=="number"?`${o.id}:${Number.isFinite(i)?i.toPrecision(8):"0"}`:typeof i=="boolean"?`${o.id}:${i?"1":"0"}`:`${o.id}:${String(i??"")}`}).join(";");return`${n.length}:${r}`}function zY(e,t,n){return e?e.map.has(t)?jh(e.map.get(t)):n&&e.last?jh(e.last):null:null}function BY(e,t,n){if(!e)return;const r=jh(n);for(e.map.set(t,r),e.last=r;e.map.size>PY;){const o=e.map.keys().next().value;e.map.delete(o)}}function VY(e,t,n,r,o){if(DY(e))return{bounds:uA(e),source:"explicit"};const i=jY(n,r.params,t.glslSource),s=zY(o,i,r.animationState.playing);if(s)return{bounds:s,source:"auto"};const a=FY(t,n,r);return BY(o,i,a),{bounds:a,source:"auto"}}function Yk(e,t=cA){const n=String(e||"").trim();return XE.test(n)?n:t}function $Y(e,t=cA){const n=Yk(e,t),r=n.length===4?`${n[1]}${n[1]}${n[2]}${n[2]}${n[3]}${n[3]}`:n.slice(1);return[parseInt(r.slice(0,2),16)/255,parseInt(r.slice(2,4),16)/255,parseInt(r.slice(4,6),16)/255]}function ra(e,t){return typeof e=="function"?e(t):e}function GY(){const e={};return{color:Yk(e.color,cA),roughness:Math.min(Math.max(ms(e.roughness,.75),0),1),metalness:Math.min(Math.max(ms(e.metalness,.02),0),1)}}function UY(e){return typeof e=="function"?e():Uc(e)?e.default!==void 0?typeof e.default=="function"?e.default():e.default:e.model!==void 0?typeof e.model=="function"?e.model():e.model:e:e}function HY(e,t={}){const n=ra(e,t),r=Uc(n)&&Object.hasOwn(n,"value")?ra(n.value,t):n,o=Uc(n)?String(n.type||n.kind||"").trim().toLowerCase():"",i=wT.has(o)?o:typeof r=="boolean"?"bool":typeof r=="number"?"float":typeof r=="string"&&XE.test(r)?"vec3":Array.isArray(r)||ArrayBuffer.isView(r)?`vec${Math.min(Math.max(r.length,2),4)}`:"";if(!wT.has(i))return null;if(i==="bool")return{type:i,value:r===!0};if(i==="int")return{type:i,value:Math.trunc(ms(r,0))};if(i==="float")return{type:i,value:ms(r,0)};if(typeof r=="string"&&XE.test(r))return{type:i,value:$Y(r)};const s=Number(i.slice(3)),a=Array.from({length:s},()=>0);return{type:i,value:kY(r,s,a)}}function WY(e=[],t={}){return Object.fromEntries(e.map(n=>{const r=String(n?.id||"").trim();if(!OY.test(r)||r.startsWith("gl_"))throw new Error(`Implicit CAD param "${r}" is not a valid GLSL uniform identifier.`);const o=Wk[n.type];if(!o)return null;const i=HY({type:o,value:t[n.id]});return i?[r,i]:null}).filter(Boolean))}function KY(e,t={}){return String(ra(e.glsl??e.glslSource,t)||"").trim()}function qY(e={}){return{activeId:String(e?.activeId||"").trim(),playing:e?.playing===!0,elapsedSec:Math.max(ms(e?.elapsedSec??e?.elapsed,0),0),speed:Math.min(Math.max(ms(e?.speed,1),.1),5)}}function YY(e,t){const n=Array.isArray(e?.animations)?e.animations:[];if(!n.length)return null;const r=String(t||"").trim();return n.find(o=>o.id===r)||n[0]||null}function XY(e,t={},n={}){const r=Jf(e,t),o=qY(n),i=YY(e,o.activeId),s=Math.max(Number(i?.duration)||0,.001),a=Math.min(o.elapsedSec,s),l=i?Math.min(Math.max(a/s,0),1):0;return{...r,params:r,parameterValues:r,animation:i,animationState:{...o,activeId:i?.id||o.activeId,duration:i?.duration||0,loop:i?.loop!==!1},elapsed:a,elapsedSec:a,duration:i?.duration||0,progress:l,cycle:s>0?a/s:0,t:a,time:a}}function ZY(e,t,n={},r={},{sourceUrl:o="",autoBoundsCache:i=null}={}){const s=XY(t,n,r),a=e;if(!Uc(a))throw new Error("Implicit CAD module must export an object, or a function returning an object.");const l=WY(t.parameters,s.params),c=KY(a,s);if(!c)throw new Error("Implicit CAD module must export GLSL code in glsl.");const u=VY(ra(a.bounds,s),{glslSource:c,uniforms:l},t,s,i),f=u.bounds,m=[f.max[0]-f.min[0],f.max[1]-f.min[1],f.max[2]-f.min[2]],p=[(f.min[0]+f.max[0])/2,(f.min[1]+f.max[1])/2,(f.min[2]+f.max[2])/2],b=Math.max(Math.hypot(m[0],m[1],m[2])/2,.001),y=ra(a.render,s),x=Uc(y)?y:{},S=Up(ra(x.epsilon,s),Math.max(b*7e-4,.002)),E=Up(ra(x.normalEpsilon,s),Math.max(S*2.5,b*.001)),C=Math.min(Math.max(ms(ra(x.stepScale,s),.45),.05),1),A=Up(ra(x.maxStep,s),Math.max(b*.035,S*10));return{schema:String(a.schema||Hk),kind:YE,name:String(a.name||a.title||"Implicit CAD").trim()||"Implicit CAD",description:String(a.description||"").trim(),units:String(a.units||"mm").trim()||"mm",sourceUrl:String(o||a.sourceUrl||"").trim(),parameters:t.parameters,parameterMap:t.parameterMap,defaultParameterValues:t.defaultParameterValues,parameterValues:s.params,animations:t.animations,animationState:s.animationState,glslSource:c,distanceSource:c,colorSource:/\bvec3\s+color\s*\(/.test(c)?c:"",uniforms:l,uniformSignature:Object.entries(l).map(([N,w])=>`${N}:${w.type}`).sort().join(";"),bounds:f,boundsSource:u.source,center:p,size:m,radius:b,material:GY(),background:{},maxSteps:Math.max(16,Math.min(Math.floor(ms(ra(x.steps,s),192)),768)),maxDistance:Up(ra(x.maxDistance,s),b*8),stepScale:C,maxStep:A,epsilon:S,normalEpsilon:E}}function JY(e,{sourceUrl:t=""}={}){const n=UY(e);if(!Uc(n))throw new Error("Implicit CAD module must export an object, or a function returning an object.");if(n.kind===YE&&n.glslSource&&Array.isArray(n.parameters))return n.definition?n:{...n,definition:null};const r=sY(n.params),o=aY(r),i={map:new Map,last:null},s={schema:String(n.schema||Hk),kind:YE,name:String(n.name||n.title||"Implicit CAD").trim()||"Implicit CAD",description:String(n.description||"").trim(),units:String(n.units||"mm").trim()||"mm",sourceUrl:String(t||n.sourceUrl||"").trim(),parameters:r,parameterMap:o,defaultParameterValues:{},animations:lY(n.animations),buildModel(l={},c={}){return ZY(n,s,l,c,{sourceUrl:t,autoBoundsCache:i})}};return s.defaultParameterValues=Jf(s,n.values||{}),{...s.buildModel(s.defaultParameterValues),definition:s}}function Sm(e,{sourceUrl:t=""}={}){return JY(e,{sourceUrl:t})}const Cl={sceneBackground:"#09090b",surface:"#f4f4f5",surfaceRoughness:.92,surfaceMetalness:.03},QY=/^#(?:[0-9a-fA-F]{3}){1,2}$/;function eX(e,t,n){return e?.[t]??Cl[t]??n}function dc(e,t,n){return Math.min(Math.max(e,t),n)}function tX(e={},t=Cl.surface){const n=Array.isArray(e.fillColors)?e.fillColors:[];return String(n[0]||e.defaultColor||t||Cl.surface)}function dA(e,t){const n=String(t||"").trim();if(!QY.test(n))return null;const r=n.length===4?`#${n[1]}${n[1]}${n[2]}${n[2]}${n[3]}${n[3]}`:n;return new e.Color(r)}function MT(e,t,n={},{applyTint:r=!0}={}){const o=(t||new e.Color("#ffffff")).clone(),i=dc(Number(n.tintStrength)||0,0,1);if(r&&i>0){const c=dA(e,n.defaultColor||n.tintColor)||new e.Color("#ffffff");n.tintMode==="blend"?o.lerp(c,i):o.lerp(o.clone().multiply(c),i)}const s=dc(Number(n.saturation)||1,0,2.5);if(Math.abs(s-1)>1e-4){const c={};o.getHSL(c),o.setHSL(c.h,dc(c.s*s,0,1),c.l)}const a=dc(Number(n.contrast)||1,0,2.5),l=dc(Number(n.brightness)||1,0,2);return o.r=dc(((o.r-.5)*a+.5)*l,0,1),o.g=dc(((o.g-.5)*a+.5)*l,0,1),o.b=dc(((o.b-.5)*a+.5)*l,0,1),o}function nX(e,{hasVertexColors:t=!1,sourceColor:n=null,materialSettings:r={},fallbackColor:o=Cl.surface,forceFill:i=!1}={}){if(i||!n){const s=dA(e,tX(r,o))||new e.Color(o||Cl.surface);return MT(e,s,r,{applyTint:!1})}return t?new e.Color("#ffffff"):MT(e,n,r)}const Mb="#0b1020",rX=25,oX=.45,iX=.75,sX=.015,Ib="workbench";function ZS(e,t,n){return Math.min(Math.max(e,t),n)}function bt(e,t=0){const n=Number(e);return Number.isFinite(n)?n:t}function aX(e){return[ZS(Number(e?.r)||0,0,1),ZS(Number(e?.g)||0,0,1),ZS(Number(e?.b)||0,0,1)]}function lX(e){const t=String(e||"").trim().toLowerCase();return t==="linear"?1:t==="radial"?2:0}function cX(e,t=180){const n=Number(e);return(Number.isFinite(n)?n:t)*Math.PI/180}function uX(e={}){return Object.entries(e).map(([t,n])=>`uniform ${n.type} ${t};`).sort().join(`
|
||
`)}const Wr=Object.freeze({toneMappingExposure:1.16,directional:{color:"#ffffff",intensity:1.16,position:{x:-210,y:260,z:270}},spot:{color:"#f4fbff",intensity:.52,position:{x:190,y:210,z:170}},point:{color:"#ffe2ba",intensity:.28,position:{x:-240,y:110,z:-210}},ambient:{color:"#ffffff",intensity:.4},hemisphere:{skyColor:"#ffffff",groundColor:"#d6e2ee",intensity:1.12},environmentAmbientScale:1,rimColor:"#6db6e8",rimIntensity:.08,floorShadowOpacity:.16});function dX(e){const t=Math.min(Math.max(bt(e,0),0),1);return t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Bi(e,t,n){const r=Ml(e,n),o=Math.max(bt(t,0),0);return r.map(i=>dX(i)*o)}function Uu(e,t){const n=e&&typeof e=="object"?e:t,r=bt(n?.x,t.x),o=bt(n?.y,t.y),i=bt(n?.z,t.z),s=Math.hypot(r,o,i);return s>1e-9?[r/s,o/s,i/s]:Uu(t,{x:0,y:0,z:1})}function Xk(e){const t=[e.max[0]-e.min[0],e.max[1]-e.min[1],e.max[2]-e.min[2]];return Math.max(Math.hypot(t[0],t[1],t[2])*1.2,.001)}function fA(e,t=null,{estimate:n=!0}={}){const r=`${e.bounds.min.join(",")}|${e.bounds.max.join(",")}`;if(t?.implicitFloorBounds){if(t.implicitFloorBoundsKey===r)return t.implicitFloorBounds;const i=t.implicitFloorDeclaredBounds;if(i){const s=[...e.bounds.min,...e.bounds.max],a=Math.max(bt(e.radius,1),1e-6);let l=0;for(let c=0;c<6;c+=1)l=Math.max(l,Math.abs(bt(i[c],0)-bt(s[c],0)));if(l<a*.05)return t.implicitFloorBounds}}let o=null;try{o=n?_X(e):TX(e)}catch{o=null}return o?(t&&(t.implicitFloorBounds=o,t.implicitFloorBoundsKey=r,t.implicitFloorDeclaredBounds=[...e.bounds.min,...e.bounds.max]),o):e.bounds}function Zk(e,t){!e?.uniforms?.uFloorZ||!e.uniforms.uFloorCenter||!e.uniforms.uFloorFadeRadius||(e.uniforms.uFloorZ.value=t.min[2],e.uniforms.uFloorCenter.value.set((t.min[0]+t.max[0])/2,(t.min[1]+t.max[1])/2),e.uniforms.uFloorFadeRadius.value=Xk(t))}async function fX(e,t){const n=Sm(t);await eD(n);const r=fA(n,e?.userData||null,{estimate:!1});return Zk(e,r),r}function Jk(e,t,n=[]){const r=Array.isArray(n)||ArrayBuffer.isView(n)?n:[];return t==="vec2"?new e.Vector2(bt(r[0],0),bt(r[1],0)):t==="vec3"?new e.Vector3(bt(r[0],0),bt(r[1],0),bt(r[2],0)):new e.Vector4(bt(r[0],0),bt(r[1],0),bt(r[2],0),bt(r[3],0))}function mX(e,t){return t?.type==="bool"?t.value===!0:t?.type==="int"?Math.trunc(bt(t.value,0)):t?.type==="vec2"||t?.type==="vec3"||t?.type==="vec4"?Jk(e,t.type,t.value):bt(t?.value,0)}function pX(e,t,n){if(t){if(n?.type==="bool"){t.value=n.value===!0;return}if(n?.type==="int"){t.value=Math.trunc(bt(n.value,0));return}if(n?.type==="vec2"||n?.type==="vec3"||n?.type==="vec4"){const r=Jk(e,n.type,n.value);t.value?.copy?t.value.copy(r):t.value=r;return}t.value=bt(n?.value,0)}}function ZE(e){return/[A-Za-z0-9_]/.test(e||"")}function hX(e,t){for(let n=t-1;n>=0;n-=1){const r=e[n];if(!/\s/.test(r))return r}return""}function gX(e,t){for(let n=t;n<e.length;n+=1){const r=e[n];if(!/\s/.test(r))return r}return""}function yX(e,t){const n=Math.max(e.lastIndexOf(";",t-1),e.lastIndexOf("{",t-1),e.lastIndexOf("}",t-1),e.lastIndexOf(`
|
||
`,t-1));return e.slice(n+1,t)}function bX(e,t){const n=e.lastIndexOf("for",t);if(n<0)return!1;const r=Math.max(e.lastIndexOf(";",n-1),e.lastIndexOf("{",n-1),e.lastIndexOf("}",n-1),e.lastIndexOf(`
|
||
`,n-1));if(n<r)return!1;const o=e.indexOf("(",n),i=o>=0?e.indexOf(")",o):-1;return o>=0&&o<t&&i>=t}function xX(e,t){const n=e[t-1];if(n!=="+"&&n!=="-")return!1;const r=e[t-2];return r!=="e"&&r!=="E"?!1:/[0-9.]/.test(e[t-3]||"")}const IT=/\b(?:int|uint)\s+([A-Za-z_]\w*)/g;function SX(e){const t=new Set;let n;for(IT.lastIndex=0;(n=IT.exec(e))!==null;)t.add(n[1]);return t}function EX(e,t){let n=t-1;for(;n>=0&&/\s/.test(e[n]);)n-=1;if(e[n]!=="=")return"";const r=e[n-1];if(r!=="="&&r!=="!"&&r!=="<"&&r!==">")return"";let o=n-2;for(;o>=0&&/\s/.test(e[o]);)o-=1;let i=o;for(;i>=0&&ZE(e[i]);)i-=1;return e.slice(i+1,o+1)}function wX(e,t,n,r){const o=hX(e,t),i=gX(e,n);if(o==="."||i==="."||ZE(o)||ZE(i)||i==="["||o==="["||o&&!/[+\-*/=(,{?:]/.test(o)||i&&!/[,);}\]+\-*/?:]/.test(i)||xX(e,t))return!1;const s=EX(e,t);if(s&&r?.has(s)||bX(e,t))return!1;const a=yX(e,t);return!/\b(?:int|ivec[234]|uint|uvec[234])\b/.test(a)}function vX(e){const t=String(e||""),n=SX(t);let r="",o=0;for(;o<t.length;){const i=t[o],s=t[o+1];if(i==="/"&&(s==="/"||s==="*")){const l=s==="/"?t.indexOf(`
|
||
`,o+2):t.indexOf("*/",o+2),c=l<0?t.length:s==="/"?l:l+2;r+=t.slice(o,c),o=c;continue}const a=t.slice(o).match(/^\d+/);if(a){const l=a[0],c=o+l.length;r+=wX(t,o,c,n)?`${l}.0`:l,o=c;continue}r+=i,o+=1}return r}function Ml(e,t=Mb){const n=String(e||t).trim(),r=/^#(?:[0-9a-fA-F]{3}){1,2}$/.test(n)?n:t,o=r.length===4?`${r[1]}${r[1]}${r[2]}${r[2]}${r[3]}${r[3]}`:r.slice(1);return[parseInt(o.slice(0,2),16)/255,parseInt(o.slice(2,4),16)/255,parseInt(o.slice(4,6),16)/255]}function mA(e){if(e?.bounds?.min&&e?.bounds?.max)return e.bounds;const t=Math.max(bt(e?.radius,1),.001),n=Array.isArray(e?.center)?e.center:[0,0,0];return{min:[n[0]-t,n[1]-t,n[2]-t],max:[n[0]+t,n[1]+t,n[2]+t]}}function AX(e){return[Math.max(bt(e?.max?.[0],1)-bt(e?.min?.[0],-1),.001),Math.max(bt(e?.max?.[1],1)-bt(e?.min?.[1],-1),.001),Math.max(bt(e?.max?.[2],1)-bt(e?.min?.[2],-1),.001)]}function CX(e,t,n){const r=Math.max(bt(n,0),0);return{min:[e[0]-r,e[1]-r,e[2]-r],max:[t[0]+r,t[1]+r,t[2]+r]}}const MX=32,aa=new Map;function pA(e,t){const n=String(e?.glslSource||e?.distanceSource||"");let r="";try{r=JSON.stringify(e?.uniforms??null)}catch{r="?"}return`${JSON.stringify(t)}|${r}|${n}`}function IX(e){const t=String(e?.glslSource||e?.distanceSource||"").length;return t>16e3?9:t>8e3?11:t>4e3?17:rX}function NX(e,t){for(aa.set(e,t);aa.size>MX;)aa.delete(aa.keys().next().value)}function TX(e){if(e?.frameBounds?.min&&e?.frameBounds?.max)return e.frameBounds;const t=mA(e);return aa.get(pA(e,t))||null}function*Qk(e,t,n){let r=null;try{r=Uk(e)}catch{return t}const o=IX(e),i=AX(t),s=i.map(b=>b/Math.max(o-1,1)),a=Math.max(Math.min(...s)*oX,bt(e?.epsilon,.002)*12,.01),l=[1/0,1/0,1/0],c=[-1/0,-1/0,-1/0];let u=0;try{for(let b=0;b<o;b+=1){const y=t.min[0]+s[0]*b;for(let x=0;x<o;x+=1){const S=t.min[1]+s[1]*x;for(let E=0;E<o;E+=1){const C=t.min[2]+s[2]*E;bt(r(y,S,C),1e6)>a||(u+=1,l[0]=Math.min(l[0],y),l[1]=Math.min(l[1],S),l[2]=Math.min(l[2],C),c[0]=Math.max(c[0],y),c[1]=Math.max(c[1],S),c[2]=Math.max(c[2],C))}yield}}}catch{return t}if(!u)return t;const f=Math.max(Math.max(...s)*iX,Math.max(...i)*sX,bt(e?.epsilon,.002)*20,.25),m=CX(l,c,f),p={min:m.min.map((b,y)=>Math.max(b,t.min[y])),max:m.max.map((b,y)=>Math.min(b,t.max[y]))};return NX(n,p),p}function _X(e){const t=mA(e);if(e?.frameBounds?.min&&e?.frameBounds?.max)return e.frameBounds;const n=pA(e,t);if(aa.has(n)){const i=aa.get(n);return aa.delete(n),aa.set(n,i),i}const r=Qk(e,t,n);let o=r.next();for(;!o.done;)o=r.next();return o.value||t}const jy=new Map;async function eD(e){const t=mA(e);if(e?.frameBounds?.min&&e?.frameBounds?.max)return e.frameBounds;const n=pA(e,t);if(aa.has(n))return aa.get(n);if(jy.has(n))return jy.get(n);const r=(async()=>{const o=()=>typeof performance<"u"?performance.now():Date.now(),i=Qk(e,t,n);let s=o(),a=i.next();for(;!a.done;)o()-s>=10&&(await new Promise(l=>setTimeout(l,0)),s=o()),a=i.next();return a.value||t})().finally(()=>{jy.delete(n)});return jy.set(n,r),r}const RX=`float implicit_clamp01(float value) {
|
||
return clamp(value, 0.0, 1.0);
|
||
}
|
||
|
||
float implicit_linear_map(float value, float inMin, float inMax, float outMin, float outMax) {
|
||
float slope = (outMax - outMin) / (inMax - inMin);
|
||
return (value - inMin) * slope + outMin;
|
||
}
|
||
|
||
float implicit_ramp(float value, float inMin, float inMax, float outMin, float outMax) {
|
||
return clamp(implicit_linear_map(value, inMin, inMax, outMin, outMax), outMin, outMax);
|
||
}
|
||
|
||
float implicit_two_body_field(float a, float b) {
|
||
return (a - b) / (a + b);
|
||
}
|
||
|
||
float implicit_two_body_polar(float a, float b, float angle) {
|
||
return a * cos(angle) + b * sin(angle);
|
||
}
|
||
|
||
float implicit_triangle_wave_even(float value, float period) {
|
||
float halfPeriod = period * 0.5;
|
||
float quarterPeriod = period * 0.25;
|
||
float wrapped = mod(value + halfPeriod, period);
|
||
return quarterPeriod - abs(wrapped - halfPeriod);
|
||
}
|
||
|
||
vec2 implicit_triangle_wave_even(vec2 value, vec2 period) {
|
||
return vec2(
|
||
implicit_triangle_wave_even(value.x, period.x),
|
||
implicit_triangle_wave_even(value.y, period.y)
|
||
);
|
||
}
|
||
|
||
vec3 implicit_triangle_wave_even(vec3 value, vec3 period) {
|
||
return vec3(
|
||
implicit_triangle_wave_even(value.x, period.x),
|
||
implicit_triangle_wave_even(value.y, period.y),
|
||
implicit_triangle_wave_even(value.z, period.z)
|
||
);
|
||
}
|
||
|
||
float implicit_triangle_wave_even_positive(float value, float period) {
|
||
return implicit_triangle_wave_even(value, period) + period * 0.25;
|
||
}
|
||
|
||
vec2 implicit_triangle_wave_even_positive(vec2 value, vec2 period) {
|
||
return vec2(
|
||
implicit_triangle_wave_even_positive(value.x, period.x),
|
||
implicit_triangle_wave_even_positive(value.y, period.y)
|
||
);
|
||
}
|
||
|
||
vec3 implicit_triangle_wave_even_positive(vec3 value, vec3 period) {
|
||
return vec3(
|
||
implicit_triangle_wave_even_positive(value.x, period.x),
|
||
implicit_triangle_wave_even_positive(value.y, period.y),
|
||
implicit_triangle_wave_even_positive(value.z, period.z)
|
||
);
|
||
}
|
||
|
||
float implicit_triangle_wave_odd(float value, float period) {
|
||
return implicit_triangle_wave_even(value - period * 0.5, period);
|
||
}
|
||
|
||
vec2 implicit_triangle_wave_odd(vec2 value, vec2 period) {
|
||
return vec2(
|
||
implicit_triangle_wave_odd(value.x, period.x),
|
||
implicit_triangle_wave_odd(value.y, period.y)
|
||
);
|
||
}
|
||
|
||
vec3 implicit_triangle_wave_odd(vec3 value, vec3 period) {
|
||
return vec3(
|
||
implicit_triangle_wave_odd(value.x, period.x),
|
||
implicit_triangle_wave_odd(value.y, period.y),
|
||
implicit_triangle_wave_odd(value.z, period.z)
|
||
);
|
||
}
|
||
|
||
float implicit_triangle_wave_odd_positive(float value, float period) {
|
||
return implicit_triangle_wave_odd(value, period) + period * 0.25;
|
||
}
|
||
|
||
vec2 implicit_triangle_wave_odd_positive(vec2 value, vec2 period) {
|
||
return vec2(
|
||
implicit_triangle_wave_odd_positive(value.x, period.x),
|
||
implicit_triangle_wave_odd_positive(value.y, period.y)
|
||
);
|
||
}
|
||
|
||
vec3 implicit_triangle_wave_odd_positive(vec3 value, vec3 period) {
|
||
return vec3(
|
||
implicit_triangle_wave_odd_positive(value.x, period.x),
|
||
implicit_triangle_wave_odd_positive(value.y, period.y),
|
||
implicit_triangle_wave_odd_positive(value.z, period.z)
|
||
);
|
||
}
|
||
|
||
vec2 implicit_repeat_centered(vec2 p, vec2 period) {
|
||
return mod(p + period * 0.5, period) - period * 0.5;
|
||
}
|
||
|
||
vec3 implicit_repeat_centered(vec3 p, vec3 period) {
|
||
return mod(p + period * 0.5, period) - period * 0.5;
|
||
}
|
||
|
||
float implicit_intersect_sharp(float a, float b) {
|
||
return max(a, b);
|
||
}
|
||
|
||
float implicit_union_sharp(float a, float b) {
|
||
return min(a, b);
|
||
}
|
||
|
||
float implicit_intersect_round(float a, float b, float radius) {
|
||
float k = max(radius, 0.0);
|
||
vec2 q = max(vec2(a, b) + k, 0.0);
|
||
return min(-k, max(a, b)) + length(q);
|
||
}
|
||
|
||
float implicit_union_round(float a, float b, float radius) {
|
||
return -implicit_intersect_round(-a, -b, radius);
|
||
}
|
||
|
||
float implicit_intersect_chamfer(float a, float b, float radius) {
|
||
return max(max(a, b), (a + b + radius) * 0.7071067811865476);
|
||
}
|
||
|
||
float implicit_union_chamfer(float a, float b, float radius) {
|
||
return -implicit_intersect_chamfer(-a, -b, radius);
|
||
}
|
||
|
||
float implicit_intersect_exp(float a, float b, float radius) {
|
||
float k = max(radius, 1.0e-6) * 0.5;
|
||
return k * log(exp(a / k) + exp(b / k));
|
||
}
|
||
|
||
float implicit_union_exp(float a, float b, float radius) {
|
||
return -implicit_intersect_exp(-a, -b, radius);
|
||
}
|
||
|
||
float implicit_intersect_lp_norm(float a, float b, float radius, float normPower) {
|
||
float k = max(radius, 0.0);
|
||
float p = max(normPower, 1.0e-6);
|
||
vec2 q = max(vec2(a, b) + k, 0.0);
|
||
return min(-k, max(a, b)) + pow(pow(q.x, p) + pow(q.y, p), 1.0 / p);
|
||
}
|
||
|
||
float implicit_union_lp_norm(float a, float b, float radius, float normPower) {
|
||
return -implicit_intersect_lp_norm(-a, -b, radius, normPower);
|
||
}
|
||
|
||
float implicit_intersect_rvachev(float a, float b, float radius) {
|
||
float sharp = max(a, b);
|
||
float k = max(radius, 0.0);
|
||
if (k <= 0.0) {
|
||
return sharp;
|
||
}
|
||
float r0 = a + b - sqrt(a * a + b * b);
|
||
float t = clamp((sharp + k) / k, 0.0, 1.0);
|
||
float s = t * t * (3.0 - 2.0 * t);
|
||
return sharp < -k ? sharp : mix(sharp, r0, s);
|
||
}
|
||
|
||
float implicit_union_rvachev(float a, float b, float radius) {
|
||
return -implicit_intersect_rvachev(-a, -b, radius);
|
||
}
|
||
|
||
float implicit_plane2(vec2 p, vec2 origin, vec2 normal) {
|
||
vec2 n = normalize(normal);
|
||
return dot(p - origin, n);
|
||
}
|
||
|
||
float implicit_line_segment2(vec2 p, vec2 a, vec2 b) {
|
||
vec2 segment = b - a;
|
||
float segmentLengthSq = dot(segment, segment);
|
||
if (segmentLengthSq < 1.0e-12) {
|
||
return length(p - a);
|
||
}
|
||
float t = clamp(dot(p - a, segment) / segmentLengthSq, 0.0, 1.0);
|
||
return length(p - (a + t * segment));
|
||
}
|
||
|
||
float implicit_sphere(vec3 p, vec3 center, float radius) {
|
||
return length(p - center) - radius;
|
||
}
|
||
|
||
float implicit_box_centered(vec3 p, vec3 size, vec3 center) {
|
||
vec3 q = abs(p - center) - size * 0.5;
|
||
return length(max(q, 0.0)) + min(max(q.x, max(q.y, q.z)), 0.0);
|
||
}
|
||
|
||
float implicit_plane(vec3 p, vec3 origin, vec3 normal) {
|
||
vec3 n = normalize(normal);
|
||
return dot(p - origin, n);
|
||
}
|
||
|
||
float implicit_line_segment(vec3 p, vec3 a, vec3 b) {
|
||
vec3 segment = b - a;
|
||
float segmentLengthSq = dot(segment, segment);
|
||
if (segmentLengthSq < 1.0e-12) {
|
||
return length(p - a);
|
||
}
|
||
float t = clamp(dot(p - a, segment) / segmentLengthSq, 0.0, 1.0);
|
||
return length(p - (a + t * segment));
|
||
}
|
||
|
||
float implicit_torus(vec3 p, float majorRadius, float minorRadius) {
|
||
vec2 q = vec2(length(p.xy) - majorRadius, p.z);
|
||
return length(q) - minorRadius;
|
||
}
|
||
|
||
float implicit_axis(vec3 p, vec3 origin, vec3 direction) {
|
||
float directionLength = length(direction);
|
||
if (directionLength < 1.0e-12) {
|
||
return length(p - origin);
|
||
}
|
||
vec3 axis = direction / directionLength;
|
||
vec3 toPoint = p - origin;
|
||
return length(toPoint - dot(toPoint, axis) * axis);
|
||
}
|
||
|
||
float implicit_cylinder(vec3 p, vec3 origin, vec3 direction, float radius) {
|
||
return implicit_axis(p, origin, direction) - radius;
|
||
}
|
||
|
||
float implicit_cylinder_capped(vec3 p, vec3 a, vec3 b, float radius) {
|
||
vec3 axis = b - a;
|
||
float side = implicit_cylinder(p, a, axis, radius);
|
||
float capA = -implicit_plane(p, a, axis);
|
||
float capB = implicit_plane(p, b, axis);
|
||
return max(side, max(capA, capB));
|
||
}
|
||
|
||
float implicit_capsule(vec3 p, vec3 a, vec3 b, float radius) {
|
||
return implicit_line_segment(p, a, b) - radius;
|
||
}
|
||
|
||
float implicit_cone_capsule(vec3 p, vec3 a, vec3 b, float radiusA, float radiusB) {
|
||
vec3 axis = b - a;
|
||
float axisLengthSq = dot(axis, axis);
|
||
if (axisLengthSq < 1.0e-12) {
|
||
return implicit_sphere(p, a, radiusA);
|
||
}
|
||
float t = clamp(dot(p - a, axis) / axisLengthSq, 0.0, 1.0);
|
||
float radius = mix(radiusA, radiusB, t);
|
||
return length(p - (a + t * axis)) - radius;
|
||
}
|
||
|
||
float implicit_cone(vec3 p, vec3 apex, vec3 direction, float halfAngle) {
|
||
float directionLength = length(direction);
|
||
if (directionLength < 1.0e-12) {
|
||
return length(p - apex);
|
||
}
|
||
vec3 axis = direction / directionLength;
|
||
vec3 toPoint = p - apex;
|
||
float axial = dot(toPoint, axis);
|
||
float perpendicular = length(toPoint - axial * axis);
|
||
return perpendicular - axial * tan(halfAngle);
|
||
}
|
||
|
||
float implicit_cone_capped(vec3 p, vec3 a, vec3 b, float radiusA, float radiusB) {
|
||
vec3 axis = b - a;
|
||
float axisLength = length(axis);
|
||
if (axisLength < 1.0e-12) {
|
||
return implicit_sphere(p, a, radiusA);
|
||
}
|
||
float halfAngle = atan(abs(radiusB - radiusA), axisLength);
|
||
float coneDistance = radiusA < radiusB
|
||
? implicit_cone(p, a, axis, halfAngle) - radiusA
|
||
: implicit_cone(p, b, -axis, halfAngle) - radiusB;
|
||
float capA = -implicit_plane(p, a, axis);
|
||
float capB = implicit_plane(p, b, axis);
|
||
return max(coneDistance, max(capA, capB));
|
||
}
|
||
|
||
float implicit_shell(float distanceValue, float thickness, float bias) {
|
||
float halfThickness = thickness * 0.5;
|
||
return abs(distanceValue + bias * halfThickness) - halfThickness;
|
||
}
|
||
|
||
vec3 implicit_rotate_axis(vec3 p, vec3 origin, vec3 direction, float angle) {
|
||
vec3 k = normalize(direction);
|
||
vec3 local = p - origin;
|
||
float c = cos(angle);
|
||
float s = sin(angle);
|
||
return origin + local * c + cross(k, local) * s + k * dot(k, local) * (1.0 - c);
|
||
}
|
||
|
||
vec3 implicit_remap_cylindrical(vec3 p, float circumference) {
|
||
float radial = length(p.xy);
|
||
float theta = atan(p.y, p.x);
|
||
return vec3(radial, theta * (circumference / 6.283185307179586), p.z);
|
||
}
|
||
|
||
float implicit_tpms_gyroid(vec3 p, vec3 period, vec3 drop) {
|
||
vec3 xyz = p * (6.283185307179586 / period);
|
||
vec3 yzx = xyz.yzx;
|
||
float field = dot(drop, sin(xyz) * cos(yzx));
|
||
return field * (period.x + period.y + period.z) / 18.0;
|
||
}
|
||
|
||
float implicit_tpms_schwarz(vec3 p, vec3 period, vec3 drop, float gyroidBlend) {
|
||
vec3 xyz = p * (6.283185307179586 / period);
|
||
vec3 yzx = xyz.yzx;
|
||
vec3 mixTerm = vec3(-(1.0 - gyroidBlend)) + sin(xyz) * gyroidBlend;
|
||
float field = dot(drop, cos(yzx) * mixTerm);
|
||
return field * (period.x + period.y + period.z) / 36.0;
|
||
}
|
||
|
||
float implicit_tpms_diamond(vec3 p, vec3 period, vec3 drop, float gyroidBlend) {
|
||
vec3 xyz = p * (6.283185307179586 / period);
|
||
vec3 yzx = xyz.yzx;
|
||
vec3 zxy = xyz.zxy;
|
||
vec3 sinXyz = sin(xyz);
|
||
vec3 cosYzx = cos(yzx);
|
||
vec3 cosZxy = cos(zxy);
|
||
float blendFactor = 1.0 - gyroidBlend;
|
||
float term1 = blendFactor * sinXyz.x * sinXyz.y * sinXyz.z;
|
||
float term2 = dot(drop, sinXyz * cosYzx * (cosZxy * blendFactor + vec3(gyroidBlend)));
|
||
return (term1 + term2) * (period.x + period.y + period.z) / (6.0 * 2.8284271247461903 * 2.0);
|
||
}
|
||
|
||
float implicit_tpms_lidinoid(vec3 p, vec3 period, vec3 drop, float gyroidBlend) {
|
||
vec3 xyz = p * (6.283185307179586 / period);
|
||
vec3 yzx = xyz.yzx;
|
||
vec3 zxy = xyz.zxy;
|
||
vec3 cos2Xyz = cos(2.0 * xyz);
|
||
vec3 cos2Yzx = cos2Xyz.yzx;
|
||
float blendFactor = 1.0 - gyroidBlend;
|
||
float term1 = dot(drop, sin(zxy) * cos(yzx) * (sin(2.0 * xyz) * blendFactor + vec3(gyroidBlend)));
|
||
float term2 = blendFactor * dot(cos2Xyz, cos2Yzx);
|
||
return (term1 - term2) * (period.x + period.y + period.z) / 72.0;
|
||
}
|
||
|
||
float implicit_tpms_neovius(vec3 p, vec3 period, vec3 drop, float schwarzBlend) {
|
||
vec3 xyz = p * (6.283185307179586 / period);
|
||
vec3 cosDrop = cos(xyz) * drop;
|
||
float term1 = -dot(cosDrop, vec3(1.0));
|
||
float term2 = (1.0 - schwarzBlend) * (4.0 / 3.0) * cosDrop.x * cosDrop.y * cosDrop.z;
|
||
return (term1 - term2) * (period.x + period.y + period.z) / (6.0 * (26.0 / 3.0));
|
||
}
|
||
|
||
float implicit_tpms_split_p(vec3 p, vec3 period, float lidinoidBlend, float gyroidOctave, float schwarzOctave) {
|
||
vec3 xyz = p * (6.283185307179586 / period);
|
||
vec3 yzx = xyz.yzx;
|
||
vec3 zxy = xyz.zxy;
|
||
vec3 sin2Xyz = sin(2.0 * xyz);
|
||
vec3 cos2Xyz = cos(2.0 * xyz);
|
||
float term1 = -lidinoidBlend * dot(sin2Xyz * cos(yzx) * sin(zxy), vec3(1.0));
|
||
float term2 = gyroidOctave * dot(sin2Xyz * cos2Xyz, vec3(1.0));
|
||
float term3 = schwarzOctave * dot(cos2Xyz, vec3(1.0));
|
||
return (term1 + term2 + term3) * (period.x + period.y + period.z) / 36.0;
|
||
}
|
||
|
||
float implicit_tpms_iwp(vec3 p, vec3 period, vec3 drop) {
|
||
vec3 xyz = p * (6.283185307179586 / period);
|
||
vec3 yzx = xyz.yzx;
|
||
float term1 = 2.0 * dot(drop * cos(xyz) * cos(yzx), vec3(1.0));
|
||
float term2 = dot(cos(2.0 * xyz), vec3(1.0));
|
||
return (term1 - term2) * (period.x + period.y + period.z) / 48.0;
|
||
}
|
||
|
||
float implicit_cubic_grid(vec3 p, vec3 size) {
|
||
vec3 d = implicit_triangle_wave_even_positive(p, size);
|
||
return min(d.x, min(d.y, d.z));
|
||
}
|
||
|
||
float implicit_square_honeycomb(vec3 p, vec2 size) {
|
||
vec2 d = implicit_triangle_wave_even_positive(p.xy, size);
|
||
return min(d.x, d.y);
|
||
}
|
||
|
||
float implicit_square_honeycomb_reinforced(vec3 p, vec2 size, float rotation, float rotation2, float hasRotation2) {
|
||
vec2 pxy = p.xy;
|
||
vec2 grid = implicit_triangle_wave_even_positive(pxy, size);
|
||
float squareGrid = min(grid.x, grid.y);
|
||
vec2 repeated = implicit_repeat_centered(pxy, size);
|
||
float angle = 3.141592653589793 * rotation;
|
||
float diagonal = abs(implicit_plane2(repeated, vec2(0.0), vec2(cos(angle), sin(angle))));
|
||
if (hasRotation2 > 0.5) {
|
||
float angle2 = 3.141592653589793 * rotation2;
|
||
float diagonal2 = abs(implicit_plane2(repeated, vec2(0.0), vec2(cos(angle2), sin(angle2))));
|
||
diagonal = min(diagonal, diagonal2);
|
||
}
|
||
return min(squareGrid, diagonal);
|
||
}
|
||
|
||
float implicit_square_diagonal_honeycomb(vec3 p, vec2 size) {
|
||
vec2 period = vec2(size.x + size.y);
|
||
vec2 repeated = implicit_repeat_centered(p.xy, period);
|
||
float positive = abs(implicit_plane2(repeated, vec2(0.0), vec2(size.y, size.x)));
|
||
float negative = abs(implicit_plane2(repeated, vec2(0.0), vec2(size.y, -size.x)));
|
||
return min(positive, negative);
|
||
}
|
||
|
||
float implicit_octet_honeycomb(vec3 p, vec2 size) {
|
||
vec2 pxy = p.xy;
|
||
float square = implicit_square_honeycomb(p, size);
|
||
vec2 oddGrid = implicit_triangle_wave_odd_positive(pxy, size);
|
||
float planeGrid = min(oddGrid.x, oddGrid.y);
|
||
float diagonalPeriod = length(size) * 0.5;
|
||
vec2 rotated = vec2((pxy.x + pxy.y) / 1.4142135623730951, (pxy.x - pxy.y) / 1.4142135623730951);
|
||
vec2 diagonal = implicit_triangle_wave_odd_positive(rotated, vec2(diagonalPeriod));
|
||
return min(min(square, planeGrid), min(diagonal.x, diagonal.y));
|
||
}
|
||
|
||
float implicit_hexagonal_honeycomb(vec3 p, vec2 size, float setback) {
|
||
vec2 pxy = p.xy;
|
||
vec2 halfSize = size * 0.5;
|
||
vec2 quarterSize = size * 0.25;
|
||
vec2 starCenter = vec2(0.0, (1.0 - setback) * halfSize.y);
|
||
vec2 transition = vec2(halfSize.x, setback * halfSize.y);
|
||
vec2 folded = abs(implicit_repeat_centered(pxy, size));
|
||
vec2 reflected = vec2(folded.x - halfSize.x, halfSize.y - folded.y);
|
||
|
||
float foldedStar = min(
|
||
implicit_line_segment2(folded, starCenter, vec2(0.0, size.y)),
|
||
min(
|
||
implicit_line_segment2(folded, starCenter, transition),
|
||
implicit_line_segment2(folded, starCenter, vec2(-transition.x, transition.y))
|
||
)
|
||
);
|
||
float reflectedStar = min(
|
||
implicit_line_segment2(reflected, starCenter, vec2(0.0, size.y)),
|
||
min(
|
||
implicit_line_segment2(reflected, starCenter, transition),
|
||
implicit_line_segment2(reflected, starCenter, vec2(-transition.x, transition.y))
|
||
)
|
||
);
|
||
return folded.x < quarterSize.x ? foldedStar : reflectedStar;
|
||
}
|
||
|
||
float implicit_triangular_honeycomb(vec3 p, vec2 size) {
|
||
vec2 folded = abs(implicit_repeat_centered(p.xy, size));
|
||
vec2 halfSize = size * 0.5;
|
||
vec2 quarterSize = size * 0.25;
|
||
vec2 normalH = vec2(0.0, 1.0);
|
||
vec2 normalP60 = normalize(vec2(size.y, size.x));
|
||
vec2 normalN60 = normalize(vec2(size.y, -size.x));
|
||
float foldedStar = min(
|
||
abs(dot(folded, normalH)),
|
||
min(abs(dot(folded, normalP60)), abs(dot(folded, normalN60)))
|
||
);
|
||
vec2 shifted = folded - halfSize;
|
||
float shiftedStar = min(
|
||
abs(dot(shifted, normalH)),
|
||
min(abs(dot(shifted, normalP60)), abs(dot(shifted, normalN60)))
|
||
);
|
||
return folded.y < quarterSize.y ? foldedStar : shiftedStar;
|
||
}`;function PX(e){const t=Math.max(16,Math.min(Math.floor(bt(e.maxSteps,192)),768)),n=e.uniforms&&typeof e.uniforms=="object"?e.uniforms:{},r=uX(n),o=vX(e.glslSource||e.distanceSource),i=/\bvec3\s+color\s*\(\s*vec3\s+\w+\s*,\s*vec3\s+\w+\s*\)/.test(o);return`
|
||
precision highp float;
|
||
|
||
uniform vec2 uResolution;
|
||
uniform vec3 uCameraPosition;
|
||
uniform mat4 uCameraWorld;
|
||
uniform mat4 uProjectionInverse;
|
||
uniform vec3 uBoundsMin;
|
||
uniform vec3 uBoundsMax;
|
||
uniform vec3 uSurfaceColor;
|
||
uniform vec3 uBackgroundColor;
|
||
uniform vec3 uBackgroundColorA;
|
||
uniform vec3 uBackgroundColorB;
|
||
uniform float uBackgroundMode;
|
||
uniform float uBackgroundAngle;
|
||
uniform float uBackgroundAlpha;
|
||
uniform float uPaintBackground;
|
||
uniform float uOrthographic;
|
||
uniform float uUseProceduralColor;
|
||
uniform float uHitEpsilon;
|
||
uniform float uNormalEpsilon;
|
||
uniform float uMaxDistance;
|
||
uniform float uStepScale;
|
||
uniform float uMaxStep;
|
||
uniform float uStepBudget;
|
||
uniform float uShadowStrength;
|
||
uniform float uAmbientOcclusionStrength;
|
||
uniform float uRimStrength;
|
||
uniform float uExposure;
|
||
uniform vec3 uHemiSky;
|
||
uniform vec3 uHemiGround;
|
||
uniform vec3 uAmbientLight;
|
||
uniform vec3 uKeyColor;
|
||
uniform vec3 uKeyDir;
|
||
uniform vec3 uFillColor;
|
||
uniform vec3 uFillDir;
|
||
uniform vec3 uBounceColor;
|
||
uniform vec3 uBounceDir;
|
||
uniform vec3 uRimColor;
|
||
uniform float uFloorEnabled;
|
||
uniform float uFloorShadowOpacity;
|
||
uniform float uFloorZ;
|
||
uniform vec2 uFloorCenter;
|
||
uniform float uFloorFadeRadius;
|
||
${r}
|
||
varying vec2 vUv;
|
||
|
||
const int IMPLICIT_MAX_STEPS = ${t};
|
||
|
||
${RX}
|
||
|
||
${o}
|
||
|
||
float implicit_distance(vec3 p) {
|
||
return sdf(p);
|
||
}
|
||
|
||
vec3 implicit_color(vec3 p, vec3 normal) {
|
||
${i?"return clamp(color(p, normal), vec3(0.0), vec3(1.0));":"return vec3(1.0);"}
|
||
}
|
||
|
||
float implicit_scene_sdf(vec3 p) {
|
||
return implicit_distance(p);
|
||
}
|
||
|
||
vec2 implicit_ray_slab(float origin, float direction, float boundsMin, float boundsMax) {
|
||
if (abs(direction) < 1.0e-8) {
|
||
return origin < boundsMin || origin > boundsMax
|
||
? vec2(1.0, -1.0)
|
||
: vec2(-1.0e20, 1.0e20);
|
||
}
|
||
float invDirection = 1.0 / direction;
|
||
float nearPlane = (boundsMin - origin) * invDirection;
|
||
float farPlane = (boundsMax - origin) * invDirection;
|
||
return vec2(min(nearPlane, farPlane), max(nearPlane, farPlane));
|
||
}
|
||
|
||
vec2 implicit_ray_bounds(vec3 origin, vec3 direction, vec3 boundsMin, vec3 boundsMax) {
|
||
vec2 x = implicit_ray_slab(origin.x, direction.x, boundsMin.x, boundsMax.x);
|
||
vec2 y = implicit_ray_slab(origin.y, direction.y, boundsMin.y, boundsMax.y);
|
||
vec2 z = implicit_ray_slab(origin.z, direction.z, boundsMin.z, boundsMax.z);
|
||
float tMin = max(max(x.x, y.x), z.x);
|
||
float tMax = min(min(x.y, y.y), z.y);
|
||
return vec2(tMin, tMax);
|
||
}
|
||
|
||
vec3 implicit_estimate_normal(vec3 p) {
|
||
float e = uNormalEpsilon;
|
||
vec2 k = vec2(1.0, -1.0);
|
||
return normalize(
|
||
k.xyy * implicit_scene_sdf(p + k.xyy * e) +
|
||
k.yyx * implicit_scene_sdf(p + k.yyx * e) +
|
||
k.yxy * implicit_scene_sdf(p + k.yxy * e) +
|
||
k.xxx * implicit_scene_sdf(p + k.xxx * e)
|
||
);
|
||
}
|
||
|
||
float implicit_ambient_occlusion(vec3 p, vec3 normal) {
|
||
float occlusion = 0.0;
|
||
float scale = 1.0;
|
||
for (int sampleIndex = 1; sampleIndex <= 5; sampleIndex += 1) {
|
||
float distanceAlongNormal = 0.018 * float(sampleIndex) * uMaxDistance;
|
||
float sampled = implicit_scene_sdf(p + normal * distanceAlongNormal);
|
||
occlusion += (distanceAlongNormal - sampled) * scale;
|
||
scale *= 0.58;
|
||
}
|
||
// Gentler floor than a typical raymarcher: the mesh viewer has no SSAO, so
|
||
// heavy AO reads as "implicit models render darker".
|
||
return clamp(1.0 - 0.045 * occlusion, 0.62, 1.0);
|
||
}
|
||
|
||
float implicit_soft_shadow(vec3 origin, vec3 direction, float maxDistance) {
|
||
// Tight penumbra and a higher floor keep self-shadowing close to the mesh
|
||
// viewer's crisp PCF shadows instead of dimming broad surface areas.
|
||
float shadow = 1.0;
|
||
float t = uHitEpsilon * 8.0;
|
||
for (int shadowStep = 0; shadowStep < 28; shadowStep += 1) {
|
||
if (t >= maxDistance) {
|
||
break;
|
||
}
|
||
float h = implicit_scene_sdf(origin + direction * t);
|
||
if (h < uHitEpsilon) {
|
||
return 0.32;
|
||
}
|
||
shadow = min(shadow, 22.0 * h / t);
|
||
t += clamp(h, uHitEpsilon * 3.0, maxDistance * 0.08);
|
||
}
|
||
return clamp(shadow, 0.32, 1.0);
|
||
}
|
||
|
||
vec3 implicit_srgb_to_linear(vec3 c) {
|
||
c = clamp(c, vec3(0.0), vec3(1.0));
|
||
vec3 low = c / 12.92;
|
||
vec3 high = pow((c + 0.055) / 1.055, vec3(2.4));
|
||
return mix(low, high, step(vec3(0.04045), c));
|
||
}
|
||
|
||
vec3 implicit_linear_to_srgb(vec3 c) {
|
||
c = clamp(c, vec3(0.0), vec3(1.0));
|
||
vec3 low = c * 12.92;
|
||
vec3 high = 1.055 * pow(c, vec3(1.0 / 2.4)) - 0.055;
|
||
return mix(low, high, step(vec3(0.0031308), c));
|
||
}
|
||
|
||
// THREE.js ACESFilmicToneMapping port so implicit shading matches the mesh
|
||
// viewer's renderer output transform.
|
||
vec3 implicit_rrt_odt_fit(vec3 v) {
|
||
vec3 a = v * (v + 0.0245786) - 0.000090537;
|
||
vec3 b = v * (0.983729 * v + 0.4329510) + 0.238081;
|
||
return a / b;
|
||
}
|
||
|
||
vec3 implicit_aces_tone_map(vec3 color) {
|
||
const mat3 acesInput = mat3(
|
||
vec3(0.59719, 0.07600, 0.02840),
|
||
vec3(0.35458, 0.90834, 0.13383),
|
||
vec3(0.04823, 0.01566, 0.83777)
|
||
);
|
||
const mat3 acesOutput = mat3(
|
||
vec3(1.60475, -0.10208, -0.00327),
|
||
vec3(-0.53108, 1.10813, -0.07276),
|
||
vec3(-0.07367, -0.00605, 1.07602)
|
||
);
|
||
color *= 1.0 / 0.6;
|
||
color = acesInput * color;
|
||
color = implicit_rrt_odt_fit(color);
|
||
color = acesOutput * color;
|
||
return clamp(color, vec3(0.0), vec3(1.0));
|
||
}
|
||
|
||
// Sharper than implicit_soft_shadow so the stage shadow stays a tight contact
|
||
// shadow like the mesh viewer's PCF shadow map instead of a broad blob.
|
||
float implicit_floor_shadow(vec3 origin, vec3 direction, float maxDistance) {
|
||
float shadow = 1.0;
|
||
float t = uHitEpsilon * 8.0;
|
||
for (int shadowStep = 0; shadowStep < 32; shadowStep += 1) {
|
||
if (t >= maxDistance) {
|
||
break;
|
||
}
|
||
float h = implicit_scene_sdf(origin + direction * t);
|
||
if (h < uHitEpsilon) {
|
||
return 0.0;
|
||
}
|
||
shadow = min(shadow, 30.0 * h / t);
|
||
t += clamp(h, uHitEpsilon * 3.0, maxDistance * 0.05);
|
||
}
|
||
return clamp(shadow, 0.0, 1.0);
|
||
}
|
||
|
||
// How much a ray that misses the model is darkened by the stage-floor shadow,
|
||
// matching the mesh viewer's shadow-catcher plane under the part. 0 = unshadowed.
|
||
float implicit_floor_shadow_strength(vec3 rayOrigin, vec3 rayDirection) {
|
||
float shadowStrength = clamp(uShadowStrength, 0.0, 1.0);
|
||
if (uFloorEnabled < 0.5 || shadowStrength < 0.001 || rayDirection.z > -1.0e-5) {
|
||
return 0.0;
|
||
}
|
||
float tFloor = (uFloorZ - rayOrigin.z) / rayDirection.z;
|
||
if (tFloor <= 0.0) {
|
||
return 0.0;
|
||
}
|
||
vec3 floorPoint = rayOrigin + rayDirection * tFloor;
|
||
float fade = 1.0 - smoothstep(uFloorFadeRadius * 0.5, uFloorFadeRadius, length(floorPoint.xy - uFloorCenter));
|
||
if (fade < 0.002) {
|
||
return 0.0;
|
||
}
|
||
vec3 shadowOrigin = vec3(floorPoint.xy, uFloorZ + max(uHitEpsilon * 6.0, uFloorFadeRadius * 0.0001));
|
||
float lit = implicit_floor_shadow(shadowOrigin, uKeyDir, uFloorFadeRadius * 1.5);
|
||
float occlusion = clamp(1.0 - lit, 0.0, 1.0);
|
||
return occlusion * fade * clamp(uFloorShadowOpacity, 0.0, 1.0) * shadowStrength;
|
||
}
|
||
|
||
// A miss either paints this pass's own background (standalone renderers: the
|
||
// snapshot CLI and renderImplicitCadToDataUrl) or leaves the pixel to whatever
|
||
// is already in the framebuffer (the CAD Viewer, where the shared scene draws
|
||
// the themed background, grid and stage floor and this pass composites over
|
||
// them). In the composited case the shadow is emitted as black-with-alpha, so
|
||
// ordinary blending darkens the floor underneath exactly as multiplying the
|
||
// background used to.
|
||
vec4 implicit_miss_color(vec3 backgroundColor, vec3 rayOrigin, vec3 rayDirection) {
|
||
float strength = implicit_floor_shadow_strength(rayOrigin, rayDirection);
|
||
if (uPaintBackground > 0.5) {
|
||
return vec4(backgroundColor * (1.0 - strength), uBackgroundAlpha);
|
||
}
|
||
return vec4(0.0, 0.0, 0.0, strength);
|
||
}
|
||
|
||
vec3 implicit_background_color(vec2 uv) {
|
||
if (uBackgroundMode < 0.5) {
|
||
return uBackgroundColor;
|
||
}
|
||
// NOTE: this backdrop only paints in HEADLESS/standalone implicit renders. In the viewer
|
||
// the raymarch pass composites over the shared stage, so the on-screen backdrop comes
|
||
// from cadjs/lib/viewer/stageTheme.js and these ramps are not what you are looking at.
|
||
// The two do NOT agree: the canvas path ramps linearly between stops (radial 0.1 -> 0.75
|
||
// of the texture width), this one uses a smoothstep over 0..0.72. See the theme
|
||
// conformance section of viewer/docs/render-types.md before changing either.
|
||
if (uBackgroundMode < 1.5) {
|
||
vec2 direction = normalize(vec2(cos(uBackgroundAngle), sin(uBackgroundAngle)));
|
||
float t = dot(uv - vec2(0.5), direction) * 0.7071067811865476 + 0.5;
|
||
return mix(uBackgroundColorA, uBackgroundColorB, clamp(t, 0.0, 1.0));
|
||
}
|
||
float radial = smoothstep(0.0, 0.72, length(uv - vec2(0.5)));
|
||
return mix(uBackgroundColorA, uBackgroundColorB, radial);
|
||
}
|
||
|
||
// Perspective and orthographic are opposite constructions, and the difference is the
|
||
// whole reason an implicit could not render under an ortho camera: a pinhole fans ONE
|
||
// origin into per-pixel directions, while a parallel projection shares ONE direction
|
||
// across per-pixel origins. Feeding an ortho projection matrix to the pinhole path
|
||
// yields garbage directions, and the model vanishes.
|
||
struct ImplicitRay {
|
||
vec3 origin;
|
||
vec3 direction;
|
||
};
|
||
|
||
ImplicitRay implicit_camera_ray(vec2 uv) {
|
||
vec2 ndc = uv * 2.0 - 1.0;
|
||
vec4 clip = vec4(ndc, -1.0, 1.0);
|
||
vec4 view = uProjectionInverse * clip;
|
||
ImplicitRay ray;
|
||
if (uOrthographic > 0.5) {
|
||
// Unproject to a point on the near plane, then march along the camera's forward
|
||
// axis: every ray is parallel, offset across the image plane.
|
||
vec3 viewPoint = view.xyz / max(abs(view.w), 1.0e-6);
|
||
ray.origin = (uCameraWorld * vec4(viewPoint.xy, viewPoint.z, 1.0)).xyz;
|
||
ray.direction = normalize(-uCameraWorld[2].xyz);
|
||
return ray;
|
||
}
|
||
ray.origin = uCameraPosition;
|
||
ray.direction = normalize((uCameraWorld * vec4(view.xy, -1.0, 0.0)).xyz);
|
||
return ray;
|
||
}
|
||
|
||
void main() {
|
||
vec2 screenUv = gl_FragCoord.xy / uResolution;
|
||
vec3 backgroundColor = implicit_background_color(screenUv);
|
||
ImplicitRay cameraRay = implicit_camera_ray(screenUv);
|
||
vec3 rayOrigin = cameraRay.origin;
|
||
vec3 rayDirection = cameraRay.direction;
|
||
vec2 boundsHit = implicit_ray_bounds(rayOrigin, rayDirection, uBoundsMin, uBoundsMax);
|
||
float t = max(boundsHit.x, 0.0);
|
||
float tEnd = min(boundsHit.y, uMaxDistance);
|
||
if (boundsHit.x > boundsHit.y || tEnd < 0.0) {
|
||
gl_FragColor = implicit_miss_color(backgroundColor, rayOrigin, rayDirection);
|
||
return;
|
||
}
|
||
|
||
bool hit = false;
|
||
float previousT = t;
|
||
vec3 p = rayOrigin;
|
||
for (int stepIndex = 0; stepIndex < IMPLICIT_MAX_STEPS; stepIndex += 1) {
|
||
if (float(stepIndex) >= uStepBudget) {
|
||
break;
|
||
}
|
||
previousT = t;
|
||
p = rayOrigin + rayDirection * t;
|
||
float distanceValue = implicit_scene_sdf(p);
|
||
float hitEpsilon = max(uHitEpsilon, t * 0.00028);
|
||
if (distanceValue < hitEpsilon) {
|
||
hit = true;
|
||
break;
|
||
}
|
||
float stepDistance = max(distanceValue * uStepScale, uHitEpsilon * 0.25);
|
||
t += min(stepDistance, uMaxStep);
|
||
if (t > tEnd) {
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (!hit) {
|
||
gl_FragColor = implicit_miss_color(backgroundColor, rayOrigin, rayDirection);
|
||
return;
|
||
}
|
||
|
||
float refineNear = previousT;
|
||
float refineFar = t;
|
||
for (int refineIndex = 0; refineIndex < 5; refineIndex += 1) {
|
||
float mid = (refineNear + refineFar) * 0.5;
|
||
float midDistance = implicit_scene_sdf(rayOrigin + rayDirection * mid);
|
||
if (midDistance > 0.0) {
|
||
refineNear = mid;
|
||
} else {
|
||
refineFar = mid;
|
||
}
|
||
}
|
||
p = rayOrigin + rayDirection * refineFar;
|
||
vec3 normal = implicit_estimate_normal(p);
|
||
vec3 viewDirection = normalize(rayOrigin - p);
|
||
float shadowStrength = clamp(uShadowStrength, 0.0, 1.0);
|
||
float shadow = 1.0;
|
||
if (shadowStrength > 0.001) {
|
||
shadow = mix(
|
||
1.0,
|
||
implicit_soft_shadow(p + normal * uHitEpsilon * 4.0, uKeyDir, uMaxDistance * 0.55),
|
||
shadowStrength
|
||
);
|
||
}
|
||
float ambientOcclusionStrength = clamp(uAmbientOcclusionStrength, 0.0, 1.0);
|
||
float ao = 1.0;
|
||
if (ambientOcclusionStrength > 0.001) {
|
||
ao = mix(1.0, implicit_ambient_occlusion(p, normal), ambientOcclusionStrength);
|
||
}
|
||
vec3 sourceColor = clamp(implicit_color(p, normal), vec3(0.0), vec3(1.0));
|
||
vec3 surfaceColor = implicit_srgb_to_linear(mix(uSurfaceColor, sourceColor, clamp(uUseProceduralColor, 0.0, 1.0)));
|
||
// Match the mesh viewer's light rig: hemisphere + ambient indirect terms,
|
||
// key/fill/bounce directional terms with a Lambert 1/pi factor, then the
|
||
// same ACES filmic tone mapping and sRGB encode THREE.js applies.
|
||
vec3 irradiance = (mix(uHemiGround, uHemiSky, normal.z * 0.5 + 0.5) + uAmbientLight) * ao;
|
||
irradiance += uKeyColor * clamp(dot(normal, uKeyDir), 0.0, 1.0) * shadow;
|
||
irradiance += uFillColor * clamp(dot(normal, uFillDir), 0.0, 1.0);
|
||
irradiance += uBounceColor * clamp(dot(normal, uBounceDir), 0.0, 1.0);
|
||
vec3 color = surfaceColor * irradiance * 0.3183098861837907;
|
||
float rim = pow(1.0 - clamp(dot(normal, viewDirection), 0.0, 1.0), 2.4);
|
||
color += uRimColor * rim * clamp(uRimStrength, 0.0, 1.0);
|
||
color = implicit_aces_tone_map(color * uExposure);
|
||
color = implicit_linear_to_srgb(color);
|
||
gl_FragColor = vec4(color, 1.0);
|
||
}
|
||
`}function tD(e){const t=Sm(e);return[t.maxSteps,t.uniformSignature||"",t.glslSource].join(`
|
||
---implicit-cad-shader-key---
|
||
`)}function OX(){return`
|
||
varying vec2 vUv;
|
||
void main() {
|
||
vUv = uv;
|
||
gl_Position = vec4(position.xy, 0.0, 1.0);
|
||
}
|
||
`}function kX(e,t){const n=Sm(t),r=Object.fromEntries(Object.entries(n.uniforms||{}).map(([a,l])=>[a,{value:mX(e,l)}])),o={},i=fA(n,o,{estimate:!1}),s=new e.ShaderMaterial({name:"ImplicitCadRaymarchMaterial",depthTest:!1,depthWrite:!1,transparent:!0,uniforms:{uResolution:{value:new e.Vector2(1,1)},uCameraPosition:{value:new e.Vector3},uCameraWorld:{value:new e.Matrix4},uProjectionInverse:{value:new e.Matrix4},uBoundsMin:{value:new e.Vector3(...n.bounds.min)},uBoundsMax:{value:new e.Vector3(...n.bounds.max)},uSurfaceColor:{value:new e.Vector3(...Ml(n.material.color,"#f4f4f5"))},uBackgroundColor:{value:new e.Vector3(...Ml(n.background.color,Mb))},uBackgroundColorA:{value:new e.Vector3(...Ml(n.background.color,Mb))},uBackgroundColorB:{value:new e.Vector3(...Ml(n.background.color,Mb))},uBackgroundMode:{value:0},uBackgroundAngle:{value:Math.PI},uBackgroundAlpha:{value:n.background.transparent?0:1},uPaintBackground:{value:1},uOrthographic:{value:0},uUseProceduralColor:{value:n.colorSource?1:0},uHitEpsilon:{value:n.epsilon},uNormalEpsilon:{value:n.normalEpsilon},uMaxDistance:{value:n.maxDistance},uStepScale:{value:n.stepScale},uMaxStep:{value:n.maxStep},uStepBudget:{value:n.maxSteps},uShadowStrength:{value:1},uAmbientOcclusionStrength:{value:1},uRimStrength:{value:1},uExposure:{value:Wr.toneMappingExposure},uHemiSky:{value:new e.Vector3(...Bi(Wr.hemisphere.skyColor,Wr.hemisphere.intensity,"#ffffff"))},uHemiGround:{value:new e.Vector3(...Bi(Wr.hemisphere.groundColor,Wr.hemisphere.intensity,"#d6e2ee"))},uAmbientLight:{value:new e.Vector3(...Bi(Wr.ambient.color,Wr.ambient.intensity,"#ffffff"))},uKeyColor:{value:new e.Vector3(...Bi(Wr.directional.color,Wr.directional.intensity,"#ffffff"))},uKeyDir:{value:new e.Vector3(...Uu(Wr.directional.position,Wr.directional.position))},uFillColor:{value:new e.Vector3(...Bi(Wr.spot.color,Wr.spot.intensity,"#f4fbff"))},uFillDir:{value:new e.Vector3(...Uu(Wr.spot.position,Wr.spot.position))},uBounceColor:{value:new e.Vector3(...Bi(Wr.point.color,Wr.point.intensity,"#ffe2ba"))},uBounceDir:{value:new e.Vector3(...Uu(Wr.point.position,Wr.point.position))},uRimColor:{value:new e.Vector3(...Bi(Wr.rimColor,Wr.rimIntensity,"#6db6e8"))},uFloorEnabled:{value:1},uFloorShadowOpacity:{value:Wr.floorShadowOpacity},uFloorZ:{value:i.min[2]},uFloorCenter:{value:new e.Vector2((i.min[0]+i.max[0])/2,(i.min[1]+i.max[1])/2)},uFloorFadeRadius:{value:Xk(i)},...r},vertexShader:OX(),fragmentShader:PX(n)});return Object.assign(s.userData,o),s}function DX(e,t,n){if(!t?.uniforms)return;const r=Sm(n);t.uniforms.uBoundsMin&&t.uniforms.uBoundsMin.value.set(...r.bounds.min),t.uniforms.uBoundsMax&&t.uniforms.uBoundsMax.value.set(...r.bounds.max),t.uniforms.uMaxDistance&&(t.uniforms.uMaxDistance.value=r.maxDistance),Zk(t,fA(r,t.userData,{estimate:!1}));for(const[o,i]of Object.entries(r.uniforms||{}))pX(e,t.uniforms[o],i)}function NT({theme:e=Ib,themeSettings:t=null}={}){return t&&typeof t=="object"&&!Array.isArray(t)?Xf(t):Zq({theme:e||Ib},{defaultThemeId:Ib})}function LX(e,t){const n=t?.lighting||{},r=Wr;e.uExposure&&(e.uExposure.value=Math.max(bt(n.toneMappingExposure,r.toneMappingExposure),.05));const o=n.hemisphere||r.hemisphere,i=o.enabled===!1?0:bt(o.intensity,r.hemisphere.intensity);if(e.uHemiSky&&e.uHemiSky.value.set(...Bi(o.skyColor,i,r.hemisphere.skyColor)),e.uHemiGround&&e.uHemiGround.value.set(...Bi(o.groundColor,i,r.hemisphere.groundColor)),e.uAmbientLight){const f=n.ambient||r.ambient,m=f.enabled===!1?0:bt(f.intensity,r.ambient.intensity),p=Bi(f.color,m,r.ambient.color),b=t?.environment||{},y=b.enabled===!1?0:Math.max(bt(b.intensity,0),0)*r.environmentAmbientScale;e.uAmbientLight.value.set(p[0]+y,p[1]+y,p[2]+y)}const s=n.directional||r.directional;if(e.uKeyColor){const f=s.enabled===!1?0:bt(s.intensity,r.directional.intensity);e.uKeyColor.value.set(...Bi(s.color,f,r.directional.color))}e.uKeyDir&&e.uKeyDir.value.set(...Uu(s.position,r.directional.position));const a=n.fill||_c;if(e.uFillColor){const f=a.enabled===!1?0:bt(a.intensity,_c.intensity);e.uFillColor.value.set(...Bi(a.color,f,_c.color))}e.uFillDir&&e.uFillDir.value.set(...Uu(a.position,_c.position));const l=n.point||r.point;if(e.uBounceColor){const f=l.enabled===!1?0:bt(l.intensity,r.point.intensity);e.uBounceColor.value.set(...Bi(l.color,f,r.point.color))}e.uBounceDir&&e.uBounceDir.value.set(...Uu(l.position,r.point.position));const c=n.rim||zu;if(e.uRimColor){const f=c.enabled===!1?0:bt(c.intensity,zu.intensity);e.uRimColor.value.set(...Bi(c.color,f,zu.color))}const u=t?.floor||{};e.uFloorEnabled&&(e.uFloorEnabled.value=u.mode==="none"?0:1),e.uFloorShadowOpacity&&(e.uFloorShadowOpacity.value=Math.min(Math.max(bt(u.shadowOpacity,r.floorShadowOpacity),0),1))}function FX(e,t,n,{theme:r=Ib,themeSettings:o=null,graphicsSettings:i=null,forceTransparent:s=!1}={}){const a=t?.uniforms;if(!a)return NT({theme:r,themeSettings:o});const l=NT({theme:r,themeSettings:o}),c=Ws(i),u=l.materials||{},f=dA(e,n?.material?.color);a.uUseProceduralColor.value=n?.colorSource&&c.modelColors&&u.overrideSourceColors!==!0?1:0;const m=nX(e,{sourceColor:u.overrideSourceColors===!0?null:f,materialSettings:u,fallbackColor:u.defaultColor||Cl.surface,forceFill:u.overrideSourceColors===!0});if(a.uSurfaceColor.value.set(...aX(m)),LX(a,l),n?.background?.color){const E=Ml(n.background.color,Cl.sceneBackground);return a.uBackgroundColor.value.set(...E),a.uBackgroundColorA.value.set(...E),a.uBackgroundColorB.value.set(...E),a.uBackgroundMode.value=0,a.uBackgroundAngle.value=Math.PI,a.uBackgroundAlpha.value=s||n.background.transparent?0:1,l}const p=l.background||{},b=lX(p.type),y=p.solidColor||eX(l,"sceneBackground",Cl.sceneBackground),x=b===1?p.linearStart:b===2?p.radialInner:y,S=b===1?p.linearEnd:b===2?p.radialOuter:y;return a.uBackgroundColor.value.set(...Ml(y,Cl.sceneBackground)),a.uBackgroundColorA.value.set(...Ml(x,y)),a.uBackgroundColorB.value.set(...Ml(S,y)),a.uBackgroundMode.value=b,a.uBackgroundAngle.value=cX(p.linearAngle,180),a.uBackgroundAlpha.value=s||p.type==="transparent"?0:1,l}function jX(e,t,n=null){const r=e?.uniforms;if(!r)return Ws(n);const o=Ws(n),i=Math.max(o.detail,.001),s=Math.sqrt(i);if(r.uHitEpsilon&&(r.uHitEpsilon.value=Math.max(bt(t?.epsilon,.001)/s,1e-6)),r.uNormalEpsilon&&(r.uNormalEpsilon.value=Math.max(bt(t?.normalEpsilon,.001)*o.normalSmoothing/s,1e-6)),r.uStepScale&&(r.uStepScale.value=Math.max(bt(t?.stepScale,1)/i,.01)),r.uMaxStep&&(r.uMaxStep.value=Math.max(bt(t?.maxStep,1)/i,1e-6)),r.uStepBudget){const a=Math.max(Math.floor(bt(t?.maxSteps,192)),1),l=Math.floor(bt(n?.stepBudget,a));r.uStepBudget.value=Math.max(Math.min(l,a),1)}return r.uShadowStrength&&(r.uShadowStrength.value=o.shadows?1:0),r.uAmbientOcclusionStrength&&(r.uAmbientOcclusionStrength.value=o.ambientOcclusion?1:0),r.uRimStrength&&(r.uRimStrength.value=o.rimLight?1:0),o}function zX(e,t){const n=e?.uniforms?.uPaintBackground;return n?(n.value=0,!0):!1}function BX(e,t,n,r){t.updateMatrixWorld(!0),e.uniforms.uOrthographic&&(e.uniforms.uOrthographic.value=t.isOrthographicCamera?1:0),e.uniforms.uResolution.value.set(Math.max(n,1),Math.max(r,1)),e.uniforms.uCameraPosition.value.copy(t.position),e.uniforms.uCameraWorld.value.copy(t.matrixWorld),e.uniforms.uProjectionInverse.value.copy(t.projectionMatrixInverse)}function VX(e,t){const n=new e.Scene,r=Sm(t),o=kX(e,t),i=new e.Mesh(new e.PlaneGeometry(2,2),o);return i.frustumCulled=!1,n.add(i),{scene:n,material:o,quad:i,shaderKey:tD(r),dispose(){i.geometry?.dispose?.(),o.dispose?.()}}}function nD(e){const t=e?.bounds?.min,n=e?.bounds?.max;return!Array.isArray(t)||!Array.isArray(n)||t.length<3||n.length<3||![...t.slice(0,3),...n.slice(0,3)].every(r=>Number.isFinite(Number(r)))?null:{min:t.slice(0,3).map(Number),max:n.slice(0,3).map(Number)}}function $X(e){const t=nD(e);if(!t)return"";const n=Math.max(Number(e?.radius)||1,1e-6),r=Math.max(n*.02,1e-6);return[...t.min,...t.max].map(o=>Math.round(o/r)).join(",")}const GX=25e5,UX=.5,HX=400;function WX({runtimeRef:e,viewerReadyTick:t=0,enabled:n=!1,model:r=null,themeSettings:o=null,graphicsSettings:i=null,dynamicRenderActive:s=!1,previewMode:a=!1,onModelBounds:l,onShaderError:c}){const u=h.useMemo(()=>Ws(i),[i]),f=h.useRef(u);f.current=u;const m=h.useRef(s===!0);m.current=s===!0;const p=h.useRef(a===!0);p.current=a===!0;const b=h.useRef(o);b.current=o;const y=h.useRef(r);y.current=r;const x=h.useRef(l);x.current=l;const S=h.useRef(c);S.current=c;const E=h.useRef(null),C=w=>m.current||p.current||w?.interactionState?.active===!0,A=w=>{if(w){if(w.quad?.removeFromParent?.(),w.pendingCompile){w.pendingCompile.then(()=>w.dispose?.());return}w.dispose?.()}},N=(w,_,I)=>{const R=E.current?.material;if(!R||!w?.THREE||!_)return;const O=I===void 0?C(w):I,F=eY(f.current,{interaction:O});FX(w.THREE,R,_,{themeSettings:b.current,graphicsSettings:F}),jX(R,_,F),E.current&&(E.current.appliedTier=O)};h.useEffect(()=>{const w=e.current;if(!w)return;const _=I=>{I&&(I.renderOnDemandOnly=!1,I.idleQualityDelayMs=0,I.onIdleQualityRestore=null,I.resolveExtraPixelRatioCap=null,I.refreshRenderQuality?.())};if(!n){_(w);return}return w.renderOnDemandOnly=!0,w.idleQualityDelayMs=HX,w.onIdleQualityRestore=()=>{N(e.current,y.current,!1)},w.resolveExtraPixelRatioCap=I=>{const R=I===!0||C(e.current),O=Qq(f.current,{interaction:R});if(!R)return O;const F=e.current?.renderer?.domElement,V=Math.max(F?.clientWidth||0,1),$=Math.max(F?.clientHeight||0,1),K=Math.sqrt(GX/(V*$));return Math.min(O,Math.max(K,UX))},w.refreshRenderQuality?.(),()=>_(e.current)},[n,u,e,t]),h.useEffect(()=>{const w=e.current;!n||!w||(w.refreshRenderQuality?.(),N(w,r),w.requestRender?.())},[s,a,n,t]),h.useEffect(()=>{const w=e.current;if(!n||!w?.THREE||!w?.scene||!r)return;const{THREE:_}=w;let I="";try{I=tD(r)}catch(U){S.current?.(U instanceof Error?U.message:String(U));return}const R=E.current;if(R&&R.shaderKey===I){DX(_,R.material,r),N(w,r),w.requestRender?.();return}let O=null;try{O=VX(_,r)}catch(U){S.current?.(U instanceof Error?U.message:String(U));return}A(R);const{quad:F,material:V}=O;F.frustumCulled=!1,zX(V),V.transparent=!0,V.depthTest=!1,V.depthWrite=!1,F.renderOrder=1e3;const $=new _.Vector2;F.onBeforeRender=(U,Y,D)=>{U.getDrawingBufferSize($),BX(V,D,$.x,$.y);const j=e.current,ee=C(j);E.current===O&&E.current.appliedTier!==ee&&N(j,y.current,ee)},F.visible=!1,w.scene.add(F),E.current=O,S.current?.(null),N(w,r);const K=()=>{E.current===O&&(F.visible=!0,w.requestRender?.())};if(typeof w.renderer?.compileAsync=="function"){const U=w.renderer.compileAsync(w.scene,w.camera).catch(()=>{});O.pendingCompile=U,U.then(()=>{O.pendingCompile=null,K()})}else K();w.requestRender?.()},[n,r,e,o,t]),h.useEffect(()=>{const w=e.current;!n||!w||(N(w,r),w.requestRender?.())},[n,r,u,o,t]),h.useEffect(()=>{const w=e.current;if(!n||!w||!r)return;const _=nD(r);if(_&&x.current?.(_,{refined:!1}),m.current)return;const I=$X(r);if(I&&w.implicitRefinedBoundsKey===I)return;w.implicitRefinedBoundsKey=I;const R=w.implicitRefineToken=(w.implicitRefineToken||0)+1,O=E.current;let F=!1;return Promise.resolve().then(async()=>(O?.material&&await fX(O.material,r),eD(r))).then(V=>{const $=e.current;F||$!==w||w.implicitRefineToken!==R||E.current!==O||(w.requestRender?.(),!(!V||m.current)&&x.current?.({min:[...V.min],max:[...V.max]},{refined:!0}))}).catch(()=>{!F&&e.current===w&&w.implicitRefinedBoundsKey===I&&(w.implicitRefinedBoundsKey="")}),()=>{F=!0}},[n,r,e,t]),h.useEffect(()=>{if(n)return;const w=E.current;w&&(E.current=null,A(w),e.current?.requestRender?.())},[n,e,t]),h.useEffect(()=>()=>{const w=E.current;w&&(E.current=null,A(w))},[])}function KX({drawingCanvasRef:e,drawingDraftRef:t,drawingStrokesRef:n,drawingChangeRef:r,drawingIdRef:o,drawingEnabled:i,drawingTool:s,meshData:a,previewMode:l,viewerReadyTick:c,renderDrawingOverlay:u,redrawDrawingCanvas:f,buildDrawingPoint:m,distanceToStrokeInPixels:p,strokeLengthInPixels:b,drawingToolNeedsTwoPoints:y,buildFillStrokeAtPoint:x,buildSurfaceLineAnchor:S,updateSurfaceLineAnchor:E,drawingEraseThresholdPx:C,drawingMinPointDistancePx:A,drawingMinStrokeLengthPx:N}){h.useEffect(()=>{const w=e.current;if(!w)return;if(!i||l||!a){t.current=null,u();return}const _={pointerId:null,erasing:!1},I=D=>{n.current=D,r.current?.(D),f(w,D,t.current)},R=D=>{if(!D){f(w,n.current,t.current);return}o.current+=1,I([...n.current,{id:`stroke-${o.current}`,...D}])},O=D=>{const j=w.width||1,ee=w.height||1;let X=-1,ve=1/0;for(let re=0;re<n.current.length;re+=1){const Be=p(D,n.current[re],j,ee);Be<ve&&(ve=Be,X=re)}if(X===-1||ve>C)return;const q=n.current.filter((re,Be)=>Be!==X);I(q)},F=D=>{t.current={id:"__draft__",tool:s,points:[D]},f(w,n.current,t.current)},V=D=>{const j=t.current;if(j){if(s===an.FREEHAND){const ee=j.points[j.points.length-1],X=(D.x-ee.x)*(w.width||1),ve=(D.y-ee.y)*(w.height||1);Math.hypot(X,ve)>=A&&(j.points=[...j.points,D])}else j.points=[j.points[0],D];f(w,n.current,j)}},$=()=>{const D=t.current;if(!D)return;t.current=null;const j=b(D,w.width||1,w.height||1);if(y(D.tool)&&(D.points.length<2||j<N)){f(w,n.current,null);return}if(j<N&&D.points.length>1){f(w,n.current,null);return}R({tool:D.tool,points:D.points.map(ee=>({x:ee.x,y:ee.y})),surfaceLine:D.surfaceLine||null})},K=D=>{if(D.button!==0)return;_.erasing=s===an.ERASE;const j=m(D,w);if(_.erasing){D.preventDefault(),D.stopPropagation(),_.pointerId=D.pointerId,w.setPointerCapture?.(D.pointerId),O(j);return}if(s===an.FILL){D.preventDefault(),D.stopPropagation(),R(x(j,n.current,w));return}if(s===an.SURFACE_LINE){const ee=S?.(D,w);if(!ee){f(w,n.current,null);return}D.preventDefault(),D.stopPropagation(),_.pointerId=D.pointerId,w.setPointerCapture?.(D.pointerId),t.current={id:"__draft__",tool:s,points:[ee.screenPoint,ee.screenPoint],surfaceLine:ee.surfaceLine},f(w,n.current,t.current);return}D.preventDefault(),D.stopPropagation(),_.pointerId=D.pointerId,w.setPointerCapture?.(D.pointerId),F(j)},U=D=>{if(_.pointerId!==D.pointerId)return;D.preventDefault(),D.stopPropagation();const j=m(D,w);if(_.erasing){O(j);return}if(s===an.SURFACE_LINE){const ee=t.current;if(!ee?.surfaceLine?.referenceId)return;const X=E?.(D,w,ee.surfaceLine);if(!X)return;ee.points=[ee.points[0],X.screenPoint],ee.surfaceLine=X.surfaceLine,f(w,n.current,ee);return}V(j)},Y=D=>{if(_.pointerId===D.pointerId){if(D.preventDefault(),D.stopPropagation(),w.releasePointerCapture?.(D.pointerId),_.pointerId=null,_.erasing){_.erasing=!1,f(w,n.current,null);return}$()}};return w.addEventListener("pointerdown",K),w.addEventListener("pointermove",U),w.addEventListener("pointerup",Y),w.addEventListener("pointercancel",Y),()=>{_.pointerId=null,_.erasing=!1,t.current=null,f(w,n.current,null),w.removeEventListener("pointerdown",K),w.removeEventListener("pointermove",U),w.removeEventListener("pointerup",Y),w.removeEventListener("pointercancel",Y)}},[m,x,S,p,e,r,t,i,C,o,A,N,n,s,y,a,l,f,u,b,E,c])}const qX=new Set(["plane","planar"]),rD=.999,YX=1e-6,zh=1e-9,JE={vertex:"Vertex",edge:"Edge",face:"Face",free:"Point"};function td(e){if(!Array.isArray(e)||e.length<3)return null;const t=Number(e[0]),n=Number(e[1]),r=Number(e[2]);if(!Number.isFinite(t)||!Number.isFinite(n)||!Number.isFinite(r))return null;const o=Math.hypot(t,n,r);return o>0?[t/o,n/o,r/o]:null}function C0(e,t){return!Wn(e)||!Wn(t)?null:[t[0]-e[0],t[1]-e[1],t[2]-e[2]]}function oD(e,t,n){return Math.min(Math.max(e,t),n)}function jc(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function Nf(e){if(e==null||e==="")return null;const t=Number(e);return Number.isFinite(t)?t:null}function Wn(e){return Array.isArray(e)&&e.length>=3&&Number.isFinite(e[0])&&Number.isFinite(e[1])&&Number.isFinite(e[2])}function XX(e,t,n,r){const o=Number(t?.x),i=Number(t?.y),s=Number(n);if(!Number.isFinite(o)||!Number.isFinite(i)||!Number.isFinite(s)||s<0||!Array.isArray(e)||typeof r!="function")return null;let a=null,l=1/0;for(const c of e){if(!Wn(c))continue;const u=r(c),f=Number(u?.x),m=Number(u?.y);if(!Number.isFinite(f)||!Number.isFinite(m))continue;const p=Math.hypot(o-f,i-m);p<l&&(l=p,a=c.slice(0,3))}return!a||l>s?null:{point:a,snapKind:"vertex",screenDistance:l}}function M0(e,t){const n=C0(e,t);if(!n)return null;const r=Math.hypot(n[0],n[1],n[2]);return r<zh?0:r}function ZX(e,t,n){if(!Wn(e)||!Wn(t)||!Wn(n))return null;const r=C0(t,n);if(!r)return null;const o=r[0]**2+r[1]**2+r[2]**2;if(o<=0)return t;const i=C0(t,e);if(!i)return null;const s=oD(jc(i,r)/o,0,1);return[t[0]+r[0]*s,t[1]+r[1]*s,t[2]+r[2]*s]}function hA(e){return(ArrayBuffer.isView(e)||Array.isArray(e))&&e.length>=6&&e.length%6===0}function JX(e,t){if(!hA(e)||!Wn(t))return null;let n=null,r=1/0;for(let o=0;o+5<e.length;o+=6){const i=ZX(t,[e[o],e[o+1],e[o+2]],[e[o+3],e[o+4],e[o+5]]);if(!i)continue;const s=M0(t,i);s!==null&&s<r&&(r=s,n=i)}return n}function TT(e){const t=e?.pickData;if(!t)return!1;const n=String(t.surfaceType||t.surface?.type||"").trim().toLowerCase();return!n||!qX.has(n)?!1:td(t.normal)!==null}const QX=.02;function JS(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function eZ(e){const t=[];for(let n=0;n+5<e.length;n+=6)n===0&&t.push([e[0],e[1],e[2]]),t.push([e[n+3],e[n+4],e[n+5]]);return t}function _T(e,t,n){const r=[t[0]-e[0],t[1]-e[1],t[2]-e[2]],o=[n[0]-e[0],n[1]-e[1],n[2]-e[2]],i=JS(r,o),s=jc(i,i);if(s<=zh)return null;const a=JS(o,i),l=JS(i,r),c=jc(r,r),u=jc(o,o),f=1/(2*s);return[e[0]+(c*a[0]+u*l[0])*f,e[1]+(c*a[1]+u*l[1])*f,e[2]+(c*a[2]+u*l[2])*f]}function iD(e){if(!hA(e))return null;const t=eZ(e);if(t.length<2)return null;const n=td([t[1][0]-t[0][0],t[1][1]-t[0][1],t[1][2]-t[0][2]]);if(!n)return null;if(t.every((l,c)=>{if(c===0)return!0;const u=td([l[0]-t[c-1][0],l[1]-t[c-1][1],l[2]-t[c-1][2]]);return!u||Math.abs(jc(u,n))>rD}))return{kind:"line",direction:n};if(t.length<3)return null;const o=_T(t[0],t[Math.floor(t.length/3)],t[Math.floor(t.length*2/3)])||_T(t[0],t[Math.floor(t.length/2)],t[t.length-1]);if(!o)return null;const i=t.map(l=>M0(o,l)).filter(l=>l!==null);if(!i.length)return null;const s=i.reduce((l,c)=>l+c,0)/i.length;return s>zh?(Math.max(...i)-Math.min(...i))/s>QX?{kind:"curve"}:{kind:"arc",radius:s,center:o}:null}function RT(e){return e?.geometry?.kind==="line"?td(e.geometry.direction):null}function PT({reference:e=null,hitPoint:t=null,referenceId:n="",edgeSegments:r=null,edgeGeometry:o,vertexPoint:i=null}={}){const s=Wn(t)?t.slice(0,3):null,a=e?.pickData||{},l=String(a.selectorType||e?.selectorType||"").trim().toLowerCase(),c=tZ({pickData:a,selectorType:l,hitPoint:s,edgeSegments:r,vertexPoint:i});if(!c)return null;const u=nZ({snapKind:c,hitPoint:s,edgeSegments:r,vertexPoint:i});return u?{referenceId:String(n||"").trim(),reference:e||null,snapKind:c,point:u,geometry:c==="edge"?o===void 0?iD(r):o:null}:null}function tZ({pickData:e=null,selectorType:t="",hitPoint:n=null,edgeSegments:r=null,vertexPoint:o=null}={}){if(!e)return Wn(n)?"free":null;const i=String(e.selectorType||t||"").trim().toLowerCase();return i==="vertex"&&Wn(o)?"vertex":hA(r)&&Wn(n)?"edge":i==="face"?"face":Wn(n)?"free":null}function nZ({snapKind:e="",hitPoint:t=null,edgeSegments:n=null,vertexPoint:r=null}={}){const o=String(e||"").trim();return o==="vertex"?Wn(r)?r.slice(0,3):null:o==="edge"?Wn(t)?JX(n,t):null:(o==="face"||o==="free")&&Wn(t)?t.slice(0,3):null}function sD(e,t){const n=Wn(e?.point)?e.point:null,r=Wn(t?.point)?t.point:null;if(!n||!r)return null;const o=M0(n,r);if(o===null)return null;const i={euclidean:o,perpendicular:null,centerDistance:null,angleDeg:null,delta:[r[0]-n[0],r[1]-n[1],r[2]-n[2]],unit:"mm"};if(e?.geometry?.kind==="arc"&&t?.geometry?.kind==="arc"){const a=M0(e.geometry.center,t.geometry.center);a!==null&&(i.centerDistance=a<zh?0:a)}const s=rZ(e,t);return s?(s.perpendicular!==null&&(i.perpendicular=s.perpendicular<zh?0:s.perpendicular),i.angleDeg=s.angleDeg,i):(i.angleDeg=oZ(e,t),i)}function rZ(e,t){if(e?.snapKind!=="face"||t?.snapKind!=="face"||!TT(e?.reference)||!TT(t?.reference))return null;const n=td(e.reference.pickData.normal),r=td(t.reference.pickData.normal);if(!n||!r||e.referenceId&&e.referenceId===t.referenceId)return null;const o=Math.abs(jc(n,r));if(o<rD)return{perpendicular:null,angleDeg:aD(o)};const i=C0(e.point,t.point);if(!i)return null;const s=Math.abs(jc(i,n));return s<=YX?null:{perpendicular:s,angleDeg:null}}function oZ(e,t){if(e?.snapKind!=="edge"||t?.snapKind!=="edge")return null;const n=RT(e),r=RT(t);return!n||!r?null:aD(Math.abs(jc(n,r)))}function aD(e){return Math.acos(oD(e,-1,1))*180/Math.PI}function iZ(e){if(e?.snapKind!=="edge"&&e?.snapKind!=="face")return null;const t=e?.reference,n=t?.pickData;if(!n)return null;const r=String(n.selectorType||t?.selectorType||"").trim().toLowerCase(),o=n.params||{};if(r==="edge"){const i=e.geometry||null,s=i?.kind==="arc"?Nf(i.radius):null;return OT({selectorType:"edge",typeLabel:sZ(i),length:Nf(n.length),radius:s,diameter:s===null?null:s*2,center:i?.kind==="arc"&&Wn(i.center)?i.center.slice(0,3):null})}if(r==="face"){const i=String(n.surfaceType||"").trim().toLowerCase(),s=Nf(o.radius);return OT({selectorType:"face",typeLabel:i||"face",area:Nf(n.area),radius:s,diameter:s===null?null:s*2,center:Wn(o.center)?o.center.slice(0,3):null})}return null}function sZ(e){return e?.kind==="line"?"line":e?.kind==="arc"?"circle":"edge"}function OT(e){const t={unit:"mm"};for(const[n,r]of Object.entries(e))r!=null&&(t[n]=r);return t.length!==void 0||t.area!==void 0||t.radius!==void 0||t.majorRadius!==void 0?t:null}function dx(e){return Number.isInteger(Number(e))?Number(e):2}function aZ(e){for(const t of e){const n=Nf(t);if(n!==null)return n}return null}function lZ(e,{precision:t=2}={}){if(!e||!Number.isFinite(Number(e.euclidean)))return"";const n=aZ([e.perpendicular,e.centerDistance,e.euclidean]);return n===null?"":`${n.toFixed(dx(t))} ${e.unit||"mm"}`}function cZ(e,{precision:t=1}={}){const n=Nf(e?.angleDeg);return n===null?"":`${n.toFixed(dx(t))}°`}function uZ(e,{precision:t=2}={}){if(!Array.isArray(e?.delta)||e.delta.length<3)return"";const n=e.delta.slice(0,3).map(i=>Number(i));if(!n.every(i=>Number.isFinite(i)))return"";const r=dx(t),o=i=>{const s=i.toFixed(r);return s===`-${0 .toFixed(r)}`?0 .toFixed(r):s};return`ΔX ${o(n[0])} ΔY ${o(n[1])} ΔZ ${o(n[2])}`}function dZ(e,{precision:t=2}={}){if(!e)return"";const n=dx(t),r=e.unit||"mm",o=[];return e.diameter!==void 0?o.push(`⌀ ${e.diameter.toFixed(n)} ${r}`):e.majorRadius!==void 0&&o.push(`R ${e.majorRadius.toFixed(n)} / ${(e.minorRadius??e.majorRadius).toFixed(n)} ${r}`),e.length!==void 0&&o.push(`L ${e.length.toFixed(n)} ${r}`),e.area!==void 0&&o.push(`A ${e.area.toFixed(n)} ${r}²`),o.join(" ")}function fZ(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function mZ(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function pZ(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function hZ(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function gZ(e){return td(e?.reference?.pickData?.normal)}function yZ(e,t,n){const r=e?.point,o=t?.point;if(!Wn(r)||!Wn(o))return null;const i=n?.perpendicular!==null&&n?.perpendicular!==void 0?gZ(e):null;if(!i)return{start:r,end:o};const s=hZ(fZ(o,r),i);return{start:r,end:mZ(r,pZ(i,s))}}function bh(e,t,n){if(!Array.isArray(e)||e.length<3||!t?.matrixWorldInverse||!t?.projectionMatrix)return null;const r=Number(e[0]),o=Number(e[1]),i=Number(e[2]);if(!Number.isFinite(r)||!Number.isFinite(o)||!Number.isFinite(i))return null;const s=new Ue(r,o,i).applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix);if(!Number.isFinite(s.x)||!Number.isFinite(s.y)||s.z>1)return null;const a=Number(n?.left)||0,l=Number(n?.top)||0,c=Number(n?.width)||1,u=Number(n?.height)||1;return{x:a+(s.x+1)*.5*c,y:l+(1-s.y)*.5*u}}const Nb="#f59e0b",bZ="#22d3ee",zy=Object.freeze(["#d59090","#90d5b2","#d590d5","#b2d590","#9090d5","#d5b290","#90d5d5","#d590b2","#90d590","#b290d5","#d5d590","#90b2d5"]);function lD(e){const t=Number(e);if(!Number.isFinite(t))return zy[0];const n=Math.trunc(t)%zy.length;return zy[n<0?n+zy.length:n]}const xZ=.7,cD="rgba(15, 23, 42, 0.92)",uD="600 8px ui-sans-serif, system-ui, -apple-system, 'Segoe UI', sans-serif",SZ=6,EZ=3,By=4;function QE(e,{precision:t=2}={}){const n=lZ(e,{precision:t});return n?e?.perpendicular!==null&&e?.perpendicular!==void 0?`⟂ ${n}`:e?.centerDistance!==null&&e?.centerDistance!==void 0?`C-C ${n}`:n:""}function kT(e,t,n=null,r=null,o=null,{offset:i=24,witnessOvershoot:s=5,arrowLength:a=8,arrowWidth:l=3.5}={}){const c=yZ(e,t,n);if(!c)return null;const u=bh(c.start,r,o),f=bh(c.end,r,o);if(!u||!f)return null;const m=f.x-u.x,p=f.y-u.y,b=Math.hypot(m,p);if(!(b>1e-6))return null;const y=m/b,x=p/b,S=-x,E=y,C=S*i,A=E*i,N={x:u.x,y:u.y},w={x:u.x+S*(i+s),y:u.y+E*(i+s)},_={x:f.x,y:f.y},I={x:f.x+S*(i+s),y:f.y+E*(i+s)},R={x:u.x+C,y:u.y+A},O={x:f.x+C,y:f.y+A},F=b<a*2.5,V=F?-1:1,$=F?1:-1,K={tip:R,left:{x:R.x+y*a*V+S*l,y:R.y+x*a*V+E*l},right:{x:R.x+y*a*V-S*l,y:R.y+x*a*V-E*l}},U={tip:O,left:{x:O.x+y*a*$+S*l,y:O.y+x*a*$+E*l},right:{x:O.x+y*a*$-S*l,y:O.y+x*a*$-E*l}},Y={x:(R.x+O.x)/2,y:(R.y+O.y)/2};return{rings:[u,f],witnesses:[[N,w],[_,I]],dimensionLine:[R,O],arrows:[K,U],ticks:[[{x:R.x-y*3,y:R.y-x*3},{x:R.x+y*3,y:R.y+x*3}],[{x:O.x-y*3,y:O.y-x*3},{x:O.x+y*3,y:O.y+x*3}]],label:Y}}function QS(e,t,n){e.beginPath(),e.moveTo(t.x,t.y),e.lineTo(n.x,n.y),e.stroke()}function DT(e,t,{color:n=bZ,alpha:r=1,lineWidth:o=2.2,witnessWidth:i=1.6,tickWidth:s=2.6,ringRadius:a=3.75,ringStrokeWidth:l=2,label:c="",labelColor:u="#ffffff",labelBackground:f=cD,bounds:m=null}={}){if(!e||!t)return;e.save(),e.globalAlpha=Math.max(0,Math.min(1,Number(r)||1)),e.strokeStyle=n,e.lineCap="round",e.lineJoin="round";for(const[x,S]of t.witnesses)e.lineWidth=i,QS(e,x,S);const[p,b]=t.dimensionLine;if(e.lineWidth=o,QS(e,p,b),Array.isArray(t.arrows)&&t.arrows.length){e.fillStyle=n;for(const x of t.arrows)x?.tip&&x?.left&&x?.right&&(e.beginPath(),e.moveTo(x.tip.x,x.tip.y),e.lineTo(x.left.x,x.left.y),e.lineTo(x.right.x,x.right.y),e.closePath(),e.fill())}else if(Array.isArray(t.ticks))for(const[x,S]of t.ticks)e.lineWidth=s,QS(e,x,S);for(const x of t.rings)e.beginPath(),e.arc(x.x,x.y,a,0,Math.PI*2),e.fillStyle="#ffffff",e.fill(),e.lineWidth=l,e.strokeStyle=n,e.stroke();const y=String(c||"").trim();if(y){e.font=uD;const x=e.measureText(y).width,S=SZ,E=EZ,C=x+S*2,A=11+E*2;let N=t.label.x-C/2,w=t.label.y-A/2;if(m&&Number(m.width)>0&&Number(m.height)>0){const I=By,R=Math.max(I,Number(m.width)-C-By),O=By,F=Math.max(O,Number(m.height)-A-By);N=Math.min(Math.max(N,I),R),w=Math.min(Math.max(w,O),F)}const _=5;e.beginPath(),typeof e.roundRect=="function"?e.roundRect(N,w,C,A,_):e.rect(N,w,C,A),e.fillStyle=f,e.fill(),e.strokeStyle=n,e.lineWidth=1,e.stroke(),e.fillStyle=u,e.textBaseline="middle",e.textAlign="center",e.fillText(y,N+C/2,w+A/2)}e.restore()}function LT(e,t,{now:n=null,color:r=Nb,baseRadius:o=4.5,periodMs:i=1e3,amplitude:s=1.2}={}){if(!e||!t)return;const a=Number.isFinite(n)?n:typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now(),l=o+2+Math.abs(Math.sin(a/i))*s;e.save(),e.globalAlpha=.35,e.strokeStyle=r,e.lineWidth=2,e.beginPath(),e.arc(t.x,t.y,l,0,Math.PI*2),e.stroke(),e.globalAlpha=1,e.fillStyle="#ffffff",e.beginPath(),e.arc(t.x,t.y,o,0,Math.PI*2),e.fill(),e.lineWidth=2,e.strokeStyle=r,e.stroke(),e.restore()}const dD="#f59e0b",wZ="#94a3b8";function FT(e,t,{snapKind:n="free",now:r=null}={}){if(!e||!t||!Number.isFinite(t.x)||!Number.isFinite(t.y))return;const o=n==="vertex"||n==="edge"||n==="face",i=o?dD:wZ,{x:s,y:a}=t;if(e.save(),e.lineWidth=1.6,e.strokeStyle=i,e.fillStyle=i,e.globalAlpha=o?.9:.7,e.beginPath(),e.moveTo(s-7,a),e.lineTo(s-2.5,a),e.moveTo(s+2.5,a),e.lineTo(s+7,a),e.moveTo(s,a-7),e.lineTo(s,a-2.5),e.moveTo(s,a+2.5),e.lineTo(s,a+7),e.stroke(),e.globalAlpha=1,n==="vertex")e.beginPath(),e.rect(s-3.5,a-3.5,7,7),e.fill();else if(n==="edge"){const l=Number.isFinite(r)?(Math.sin(r/500*Math.PI)+1)/2:.5;e.beginPath(),e.arc(s,a,3.6+l*.8,0,Math.PI*2),e.fill()}else n==="face"&&(e.beginPath(),e.moveTo(s,a-4.2),e.lineTo(s+4.2,a),e.lineTo(s,a+4.2),e.lineTo(s-4.2,a),e.closePath(),e.stroke());e.restore()}function vZ(e,t,n,{bounds:r=null,color:o=dD,background:i=cD,labelColor:s="#f8fafc"}={}){if(!e||!t||!n)return;e.save(),e.font=uD;const a=e.measureText(n).width+14,l=20;let c=t.x+14,u=t.y-l-10;r&&(c=Math.min(Math.max(c,4),Math.max(4,r.width-a-4)),u=Math.min(Math.max(u,4),Math.max(4,r.height-l-4))),e.beginPath(),typeof e.roundRect=="function"?e.roundRect(c,u,a,l,5):e.rect(c,u,a,l),e.fillStyle=i,e.fill(),e.strokeStyle=o,e.lineWidth=1,e.stroke(),e.fillStyle=s,e.textBaseline="middle",e.textAlign="left",e.fillText(n,c+7,u+l/2),e.restore()}const ew=20;let jT=0,zT=0;function AZ(){return jT+=1,`measurement-${jT}`}function CZ(){const e=zT;return zT+=1,e}function MZ(e,t,{createId:n=AZ,createSeriesIndex:r=CZ}={}){if(!t||!Wn(t?.point))return e||null;if(!e?.draft)return{draft:{anchor:t,hover:null},hover:t,measurements:e?.measurements||[]};const o=sD(e.draft.anchor,t);if(!o)return{draft:{anchor:t,hover:null},hover:t,measurements:e.measurements||[]};const i={id:n(),colorIndex:r(),pickA:e.draft.anchor,pickB:t,measurement:o};let s=[...e.measurements||[],i];return s.length>ew&&(s=s.slice(s.length-ew)),{draft:null,hover:e?.hover||null,measurements:s}}function IZ(e,t){const n=t&&Wn(t?.point)?t:null;if(!e?.draft){const r=e?.hover?.referenceId||"",o=n?.referenceId||"";return!e&&!n?e||null:e&&r===o&&(e.hover?.snapKind||"")===(n?.snapKind||"")?e:{draft:null,hover:n,measurements:e?.measurements||[]}}return{...e,hover:n,draft:{anchor:e.draft.anchor,hover:n}}}function NZ(e,t){if(!e||!t)return e||null;const n=(e.measurements||[]).filter(r=>r.id!==t);return n.length===(e.measurements||[]).length?e:{draft:e.draft||null,hover:e.hover||null,measurements:n}}function TZ(e){const t=e?.draft;return!t?.anchor||!t.hover?null:sD(t.anchor,t.hover)}function BT(e,{entryChanged:t=!1,toolActive:n=!0}={}){return!e||t?null:n?e:e.draft?{draft:null,hover:null,measurements:e.measurements||[]}:e}function _Z(e){return e?.draft?{draft:null,hover:e.hover||null,measurements:e.measurements||[]}:e||null}function RZ(e){return e&&(e.draft||e.hover)?{draft:e.draft||null,hover:e.hover||null,measurements:[]}:null}function PZ({measureCanvasRef:e,measureState:t,activeMeasurementId:n="",measureHoverRef:r=null,measureModeActive:o=!1,runtimeRef:i,mountRef:s,previewMode:a,viewerReadyTick:l}){const c=h.useRef(t);c.current=t;const u=h.useRef(n);u.current=n;const f=!!(!a&&(o||t?.measurements?.length||t?.draft?.anchor));h.useEffect(()=>{const m=e.current;if(!m)return;if(!f){const y=m.getContext("2d");y&&(y.setTransform(1,0,0,1,0,0),y.clearRect(0,0,m.width,m.height));return}let p=0;const b=y=>{const x=m.getContext("2d");if(!x){p=window.requestAnimationFrame(b);return}const S=i.current,E=typeof window<"u"&&window.devicePixelRatio||1,C=m.clientWidth||s.current?.clientWidth||1,A=m.clientHeight||s.current?.clientHeight||1,N=Math.round(C*E),w=Math.round(A*E);(m.width!==N||m.height!==w)&&(m.width=N,m.height=w),x.setTransform(E,0,0,E,0,0),x.clearRect(0,0,C,A);const _=c.current,I=S?.camera||null;if(_&&I&&!a){const R={left:0,top:0,width:C,height:A},O={width:C,height:A},F=u.current;for(const U of _.measurements||[]){const Y=kT(U?.pickA,U?.pickB,U?.measurement,I,R);if(!Y)continue;const D=U.id===F;DT(x,Y,{color:lD(U?.colorIndex),alpha:D?1:xZ,lineWidth:D?2.6:1.4,witnessWidth:D?1.6:1,ringRadius:D?4:3,label:D?QE(U.measurement):"",bounds:O})}const V=_.draft,$=V?.anchor;if($?.point){const U=bh($.point,I,R);U&&(LT(x,U,{now:y,color:Nb,baseRadius:6}),FT(x,U,{snapKind:$.snapKind||"vertex",now:y}))}if(V?.anchor&&V?.hover){const U=TZ(_),Y=kT(V.anchor,V.hover,U,I,R);if(Y){DT(x,Y,{color:Nb,alpha:.95,lineWidth:2.2,ringRadius:4,label:QE(U),bounds:O});const D=bh(V.hover.point,I,R);D&<(x,D,{now:y,color:Nb})}}const K=o?r?.current:null;if(K?.point){const U=bh(K.point,I,R);if(U){FT(x,U,{snapKind:K.snapKind,now:y});const Y=dZ(iZ(K)),j=[JE[K.snapKind]||"",Y].filter(Boolean).join(" ");j&&vZ(x,U,j,{bounds:O})}}}p=window.requestAnimationFrame(b)};return p=window.requestAnimationFrame(b),()=>{window.cancelAnimationFrame(p)}},[e,r,o,i,s,a,l,f])}function OZ(e,t,n){const r=Number(t),o=Number(n);if(!e||!Number.isFinite(r)||r<=0||!Number.isFinite(o)||o<=0)return null;if(e.isPerspectiveCamera){const i=(Number(e.fov)||0)*(Math.PI/180);return i>0&&i<Math.PI?2*o*Math.tan(i/2)/r:null}if(e.isOrthographicCamera){const i=Number(e.zoom)||1,s=Number(e.top),a=Number(e.bottom);return!(i>0)||!Number.isFinite(s)||!Number.isFinite(a)?null:Math.abs(s-a)/i/r}return null}function kZ({baseThreshold:e,thresholdScale:t=1,maxScreenDistancePx:n,camera:r,viewportHeightPx:o,distance:i}={}){const s=Math.max((Number(e)||0)*(Number(t)||0),0);if(!(s>0))return 0;const a=Number(n);if(!(a>0))return s;const l=OZ(r,o,i);return Number.isFinite(l)&&l>0?Math.min(s,l*a):s}const DZ=1200;function LZ({now:e=()=>Date.now(),suppressionMs:t=DZ}={}){let n=0;return{suppressNextContextMenu(){n=Math.max(n,e()+t)},consumeSuppression(){return e()>n?(n=0,!1):(n=0,!0)},clear(){n=0},isSuppressed(){return e()<=n}}}function FZ(e,{focusIds:t,hiddenIds:n}={}){if(!e?.mesh?.visible)return!1;const r=String(e?.partId||"").trim();return!(n instanceof Set&&n.has(r)||t instanceof Set&&t.size&&!t.has(r))}function jZ(e){return e?.object?.userData?.partId||null}const zZ=1,fD=.0015,mD=.02,VT=.75,$T=.08,tw=10,pD=tw,hD=6,gD=hD,BZ=pD,VZ=gD,GT=5,$Z=4,GZ=14,UZ=16,HZ=4,WZ=3,KZ=2,qZ=4,YZ=12,XZ=220;function ZZ(e,t){if(!Wn(e)||!t||t.length<16)return null;const n=e[0],r=e[1],o=e[2],i=t[3]*n+t[7]*r+t[11]*o+t[15];return!Number.isFinite(i)||Math.abs(i)<1e-12?null:[(t[0]*n+t[4]*r+t[8]*o+t[12])/i,(t[1]*n+t[5]*r+t[9]*o+t[13])/i,(t[2]*n+t[6]*r+t[10]*o+t[14])/i]}function JZ(e){const t=e?.face,n=e?.object?.geometry?.attributes?.position,r=e?.object?.matrixWorld?.elements;if(!t||!n||typeof n.getX!="function"||!r)return null;const o=[];for(const i of[t.a,t.b,t.c]){if(!Number.isInteger(i)||i<0||i>=n.count)return null;const s=[Number(n.getX(i)),Number(n.getY(i)),Number(n.getZ(i))],a=ZZ(s,r);if(!a)return null;o.push(a)}return o}const QZ=Object.freeze({selectorType:"vertex",pickData:Object.freeze({selectorType:"vertex"})});function UT(e){if(!e?.point)return null;const t=Number(e.point.x),n=Number(e.point.y),r=Number(e.point.z);return!Number.isFinite(t)||!Number.isFinite(n)||!Number.isFinite(r)?null:[t,n,r]}function eJ(e){const t=(e?.facePickGroup||e?.edgePickGroup||e?.modelGroup)?.position;return t?[t.x,t.y,t.z].map(n=>Number.isFinite(Number(n))?Number(n):0):[0,0,0]}function yD(e,t){if(!Wn(e))return null;const[n,r,o]=t||[0,0,0];return[e[0]-n,e[1]-r,e[2]-o]}function HT(e,t){if(!Wn(e))return null;const[n,r,o]=t||[0,0,0];return[e[0]+n,e[1]+r,e[2]+o]}function WT({reference:e=null,worldHitPoint:t=null,referenceId:n="",bypassTopology:r=!1,edgeSegments:o=null,edgeGeometry:i,vertexPoint:s=null,modelOffset:a=null}={}){const l=Wn(t)?t:null;if(r)return PT({reference:null,hitPoint:l,referenceId:""});const c=yD(l,a),u=PT({reference:e,hitPoint:c,referenceId:n||"",edgeSegments:o,edgeGeometry:i,vertexPoint:s});if(!u)return null;const f=HT(u.point,a);if(!f)return null;const m=Wn(u.geometry?.center)?{...u.geometry,center:HT(u.geometry.center,a)}:u.geometry;return{...u,point:f,geometry:m}}function KT(e,t=null){if(!e.length)return null;const n=e.map(r=>({intersection:r,screenDistance:typeof t=="function"?Number(t(r)):1/0,pickError:r.distanceToRay??r.distance??1/0,distance:r.distance??1/0,metric:r.object.userData.metric??1/0}));return n.sort((r,o)=>{const i=Number.isFinite(r.screenDistance)?r.screenDistance:1/0,s=Number.isFinite(o.screenDistance)?o.screenDistance:1/0;return Math.abs(i-s)>.25?i-s:Math.abs(r.pickError-o.pickError)>1e-4?r.pickError-o.pickError:Math.abs(r.distance-o.distance)>1e-4?r.distance-o.distance:r.metric-o.metric}),n[0].intersection}function e1(e){if(!Array.isArray(e)||!e.length)return[];const t=Number(e[0]?.distance);if(!Number.isFinite(t))return[];const n=Math.max(mD,t*fD);return e.filter(r=>Number(r?.distance)<=t+n)}function Vy(e){return new Set((Array.isArray(e)?e:[e]).map(t=>String(t||"").trim()).filter(Boolean))}function tJ(e,t){return e4(e?.activeClipPlane,t?.point)}function $y(e,t){return!e?.activeClipPlane||!Array.isArray(t)||!t.length?t:t.filter(n=>tJ(e,n))}function nJ({runtimeRef:e,mountRef:t,sceneMountRef:n=null,drawingCanvasRef:r=null,previewMode:o,pickMode:i,selectorRuntime:s,pickableFaces:a,pickableEdges:l,pickableVertices:c,hiddenPartIds:u,focusedPartId:f,onHoverReferenceChange:m,onActivateReference:p,onDoubleActivateReference:b,onContextReference:y,onMeasurePick:x,onMeasureHoverPoint:S,viewerReadyTick:E,suppressTopologyPicking:C=!1,allowMeshVertexSnap:A=!1}){const N=h.useRef(i),w=h.useRef(s),_=h.useRef(a),I=h.useRef(l),R=h.useRef(c),O=h.useRef(u),F=h.useRef(f),V=h.useRef(m),$=h.useRef(p),K=h.useRef(b),U=h.useRef(y),Y=h.useRef(x),D=h.useRef(S),j=h.useRef(A),ee=h.useRef(new Set),X=h.useRef(new Set),ve=h.useRef(new Set);N.current=i,w.current=s,_.current=a,I.current=l,R.current=c,O.current=u,F.current=f,V.current=m,$.current=p,K.current=b,U.current=y,Y.current=x,D.current=S,j.current=A===!0,ee.current=new Set((Array.isArray(a)?a:[]).map(q=>String(q?.id||"").trim()).filter(Boolean)),X.current=new Set((Array.isArray(l)?l:[]).map(q=>String(q?.id||"").trim()).filter(Boolean)),ve.current=new Set((Array.isArray(c)?c:[]).map(q=>String(q?.id||"").trim()).filter(Boolean)),h.useEffect(()=>{const q=t.current;if(!(!q||i!==Kr.MEASURE))return q.style.cursor="crosshair",()=>{q.style.cursor=""}},[t,i,o,E]),h.useEffect(()=>{const q=e.current;if(!q||!t.current||o){V.current?.("");return}const re=t.current,Be=n?.current||null,Me=r?.current||null,de=(typeof window.matchMedia=="function"?window.matchMedia("(pointer: coarse)"):null)?.matches??!1,me={active:!1,x:0,y:0,pointerType:"",referenceId:""},we={active:!1,x:0,y:0,pointerType:""},ce={active:!1,blocked:!1,moved:!1,startedInScene:!1,x:0,y:0,pointerType:""},Ee={rafId:0,x:0,y:0,lastX:NaN,lastY:NaN,hoveredReferenceId:"",measureTickEmitted:!1},Jt=!de;let mt=0;const je=LZ();function ye(k){const oe=Number(k?.buttons);return Number.isFinite(oe)?oe:0}function Ie(k){return(ye(k)&1)===1}function Je(k){return(ye(k)&2)===2}function et(k){return(ye(k)&3)===3}function Xt(){we.active=!1,we.pointerType=""}function st(){ce.active=!1,ce.blocked=!1,ce.moved=!1,ce.startedInScene=!1,ce.pointerType=""}function xt(){je.suppressNextContextMenu(),ce.blocked=!0,ce.moved=!0,me.active=!1,me.pointerType="",me.referenceId=""}function Xe(k,oe){const fe=re.getBoundingClientRect();q.pointer.x=(k-fe.left)/fe.width*2-1,q.pointer.y=-((oe-fe.top)/fe.height)*2+1,q.raycaster.setFromCamera(q.pointer,q.camera),q.raycaster?.params?.Line&&(q.raycaster.params.Line.threshold=q.edgePickThreshold||1),q.raycaster?.params?.Points&&(q.raycaster.params.Points.threshold=q.vertexPickThreshold||1)}function sn(k){if(!k?.clone||!q?.camera)return null;const oe=k.clone().project(q.camera);if(!Number.isFinite(oe.x)||!Number.isFinite(oe.y))return null;const fe=re.getBoundingClientRect();return{x:fe.left+(oe.x+1)*.5*fe.width,y:fe.top+(1-oe.y)*.5*fe.height}}function mn(k,oe,fe){const Fe=sn(k?.point);return Fe?Math.hypot(oe-Fe.x,fe-Fe.y):1/0}function ke(){return re.clientHeight||re.getBoundingClientRect().height||1}function St(k){const oe=Number(k?.[0]?.distance);if(Number.isFinite(oe)&&oe>0)return oe;const fe=q?.camera?.position?.distanceTo?.(q?.controls?.target);return Number.isFinite(fe)&&fe>0?fe:Number(q?.modelRadius||1)}function Rr(k,oe,fe,Fe){return kZ({baseThreshold:k,thresholdScale:oe,maxScreenDistancePx:fe,camera:q.camera,viewportHeightPx:ke(),distance:St(Fe)})}function yr(){const k=Vy(F.current),oe=Vy(O.current);return q.displayRecords.filter(fe=>FZ(fe,{focusIds:k,hiddenIds:oe})).map(fe=>fe.mesh)}function Qt(){const k=yr();return k.length?$y(q,q.raycaster.intersectObjects(k,!1)):[]}function uo(k){const oe=Vy(F.current),fe=Vy(O.current);for(const Fe of k){const qe=jZ(Fe);if(qe&&!fe.has(String(qe||"").trim())&&!(oe.size&&!oe.has(String(qe||"").trim())))return qe}return null}function Kn(k){const oe=Number(k?.faceIndex),fe=k?.object?.userData?.faceIds,Fe=Number.isInteger(oe)?Number(fe?.[oe]):NaN;if(!Number.isInteger(Fe))return null;const qe=w.current?.faceReferenceByRowIndex?.get?.(Fe)||null,Ye=String(qe?.id||"").trim(),ht=ee.current;return!Ye||ht.size&&!ht.has(Ye)?null:qe}function Qo(k){const oe=Number(k?.index),fe=k?.object?.userData?.edgeIds,Fe=Number.isInteger(oe)?Math.floor(oe/2):NaN,qe=Number.isInteger(Fe)?Number(fe?.[Fe]):NaN;if(!Number.isInteger(qe))return null;const Ye=w.current?.edgeReferenceByRowIndex?.get?.(qe)||null,ht=String(Ye?.id||"").trim(),Dn=X.current;return!ht||Dn.size&&!Dn.has(ht)?null:Ye}function _e(k){const oe=Number(k?.index),fe=k?.object?.userData?.vertexIds,Fe=Number.isInteger(oe)?Number(fe?.[oe]):NaN;if(!Number.isInteger(Fe))return null;const qe=w.current?.vertexReferenceByRowIndex?.get?.(Fe)||null,Ye=String(qe?.id||"").trim(),ht=ve.current;return!Ye||ht.size&&!ht.has(Ye)?null:qe}function Ot(k){if(!(Array.isArray(_.current)?_.current:[]).length)return null;for(const Ye of e1(k)){const ht=Kn(Ye);if(ht)return ht}if(!q.facePickMesh)return null;const oe=$y(q,q.raycaster.intersectObject(q.facePickMesh,!1));if(!oe.length)return null;const fe=e1(k);let Fe=oe;const qe=Number(fe[0]?.distance);if(Number.isFinite(qe)){const Ye=Math.max(mD,qe*fD);Fe=oe.filter(ht=>Number(ht?.distance)<=qe+Ye)}for(const Ye of Fe.length?Fe:oe){const ht=Kn(Ye);if(ht)return ht}return null}function Nn(k,oe,fe,{thresholdScale:Fe=1,maxScreenDistancePx:qe=tw}={}){if(!(Array.isArray(I.current)?I.current:[]).length||!q.edgePickLines)return null;const ht=Rr(q.edgePickThreshold||1,Fe,qe,k);q.raycaster?.params?.Line&&(q.raycaster.params.Line.threshold=ht);let Dn=$y(q,q.raycaster.intersectObject(q.edgePickLines,!1));const Rt=Number(k?.[0]?.distance);if(Number.isFinite(Rt)){const An=Math.max($T,ht*VT);Dn=Dn.filter(xn=>Number(xn?.distance)<=Rt+An)}const Xn=KT(Dn,An=>mn(An,oe,fe));if(!Xn)return null;const It=mn(Xn,oe,fe);if(Number.isFinite(It)&&It>qe)return null;const tt=Qo(Xn);return tt?{reference:tt,screenDistance:It}:null}function vn(k,oe,fe,{thresholdScale:Fe=1,maxScreenDistancePx:qe=GT}={}){if(!(Array.isArray(R.current)?R.current:[]).length||!q.vertexPickPoints)return null;const ht=Rr(q.vertexPickThreshold||1,Fe,qe,k);q.raycaster?.params?.Points&&(q.raycaster.params.Points.threshold=ht);let Dn=$y(q,q.raycaster.intersectObject(q.vertexPickPoints,!1));const Rt=Number(k?.[0]?.distance);if(Number.isFinite(Rt)){const An=Math.max($T,ht*VT);Dn=Dn.filter(xn=>Number(xn?.distance)<=Rt+An)}const Xn=KT(Dn,An=>mn(An,oe,fe));if(!Xn)return null;const It=mn(Xn,oe,fe);if(Number.isFinite(It)&&It>qe)return null;const tt=_e(Xn);return tt?{reference:tt,screenDistance:It}:null}function cn(k,oe){const fe=Array.isArray(k?.pickData?.adjacentSelectors)?k.pickData.adjacentSelectors:[];if(!fe.length)return!1;const Fe=String(oe?.displaySelector||"").trim(),qe=String(oe?.normalizedSelector||"").trim();return fe.includes(Fe)||fe.includes(qe)}function br(k,oe){const fe=Array.isArray(oe?.pickData?.adjacentSelectors)?oe.pickData.adjacentSelectors:[];if(!fe.length)return!1;const Fe=String(k?.displaySelector||"").trim(),qe=String(k?.normalizedSelector||"").trim();return fe.includes(Fe)||fe.includes(qe)}function Et(k,oe){const fe=Array.isArray(k?.pickData?.adjacentSelectors)?k.pickData.adjacentSelectors:[],Fe=Array.isArray(oe?.pickData?.adjacentSelectors)?oe.pickData.adjacentSelectors:[];if(!fe.length||!Fe.length)return!1;const qe=new Set(fe);return Fe.some(Ye=>qe.has(Ye))}function Zr(k,oe,fe,{hover:Fe=!1}={}){const qe=Array.isArray(_.current)?_.current:[],Ye=Array.isArray(I.current)?I.current:[],ht=Array.isArray(R.current)?R.current:[],Dn=qe.length>0,Rt=Ye.length>0,Xn=ht.length>0;if(!Dn&&!Rt&&!Xn)return null;const It=Ot(k),An=Nn(k,oe,fe,{thresholdScale:It?zZ:1,maxScreenDistancePx:Fe?It?gD:hD:It?pD:tw}),xn=vn(k,oe,fe,{maxScreenDistancePx:Fe?$Z:GT});if(xn){const Di=Fe?WZ:HZ,Bo=An&&br(An.reference,xn.reference),ui=It&&Et(It,xn.reference);if(!It&&!An||(Bo||ui)&&Number(xn.screenDistance)<=Di)return xn.reference.id}if(It&&An){const Di=Fe?VZ:BZ;return cn(It,An.reference)&&Number(An.screenDistance)<=Di?An.reference.id:It.id}return An?.reference?.id||It?.id||xn?.reference?.id||null}function en(k){const oe=w.current,fe=oe?.referenceMap?.get?.(k)||null;return fe||(Array.isArray(oe?.references)?oe.references:[]).find(Fe=>String(Fe?.id||"").trim()===String(k||"").trim())||null}let Pr={referenceId:"",segments:null,geometry:null};function te(k,oe){const fe=String(k?.pickData?.selectorType||k?.selectorType||"").trim().toLowerCase();if(fe==="vertex"){const Fe=k?.pickData?.center;return{edgeSegments:null,edgeGeometry:null,vertexPoint:Wn(Fe)?Fe.slice(0,3):null}}if(fe!=="edge")return{edgeSegments:null,edgeGeometry:null,vertexPoint:null};if(Pr.referenceId!==oe){const Fe=Uv(w.current,k);Pr={referenceId:oe,segments:Fe,geometry:iD(Fe)}}return{edgeSegments:Pr.segments,edgeGeometry:Pr.geometry,vertexPoint:null}}function We(k){return!Wn(k)||!q?.THREE?.Vector3?null:sn(new q.THREE.Vector3(k[0],k[1],k[2]))}function Re(k,oe,{hover:fe=!1,bypassTopology:Fe=!1}={}){Xe(k,oe);const qe=Qt(),Ye=e1(qe).find(xn=>UT(xn))||null,ht=UT(Ye),Dn=eJ(e.current);if(j.current&&!Fe){const xn=JZ(Ye),Bo=XX(xn,{x:k,y:oe},fe?GZ:UZ,We);return Bo?{pick:WT({reference:QZ,worldHitPoint:ht,referenceId:"",vertexPoint:yD(Bo.point,Dn),modelOffset:Dn}),referenceId:""}:{pick:null,referenceId:""}}const Rt=Fe?"":Zr(qe,k,oe,{hover:fe})||"",Xn=Rt?en(Rt):null,{edgeSegments:It,edgeGeometry:tt,vertexPoint:An}=Fe?{edgeSegments:null,edgeGeometry:null,vertexPoint:null}:te(Xn,Rt);return{pick:WT({reference:Xn,worldHitPoint:ht,referenceId:Rt,bypassTopology:Fe,edgeSegments:It,edgeGeometry:tt,vertexPoint:An,modelOffset:Dn}),referenceId:Rt}}function wt(k,oe,{hover:fe=!1,preferTopology:Fe=!1}={}){if(C)return null;Xe(k,oe);const qe=Qt(),Ye=N.current;if(Fe){const ht=Zr(qe,k,oe,{hover:fe});if(ht)return ht}return Ye===Kr.PARTS||Ye===Kr.ASSEMBLY?uo(qe):Ye===Kr.AUTO?Zr(qe,k,oe,{hover:fe})||uo(qe):Ye===Kr.MEASURE?Zr(qe,k,oe,{hover:fe}):null}function dt(k,oe,fe=""){return Ae(fe)?String(Ee.hoveredReferenceId||"").trim()||wt(k,oe,{hover:!0}):wt(k,oe)}function pt(k=""){return k==="touch"||k==="pen"||de}function at(k=""){return pt(k)?YZ:qZ}function Ae(k=""){return!pt(k)}function jt(k){return k instanceof Node?!!(Be?.contains(k)||Me&&(k===Me||Me.contains?.(k))):!1}function lt(k){return jt(k.target)}function nr(k){return lt(k)||ce.active||we.active}function rt(k){const oe=k||"",fe=N.current===Kr.MEASURE;re.style.cursor=fe?"crosshair":oe?"pointer":"",Ee.hoveredReferenceId!==oe&&(Ee.hoveredReferenceId=oe,V.current?.(oe))}function Tn(){Ee.rafId&&(window.cancelAnimationFrame(Ee.rafId),Ee.rafId=0),Ee.lastX=NaN,Ee.lastY=NaN,re.style.cursor=N.current===Kr.MEASURE?"crosshair":"";const k=Ee.measureTickEmitted;Ee.measureTickEmitted=!1,!(!Ee.hoveredReferenceId&&!k)&&(Ee.hoveredReferenceId="",V.current?.(""),k&&D.current?.(null))}function Ut(){mt&&(window.clearTimeout(mt),mt=0)}function xr(k,oe={}){$.current?.(k||"",oe)}function _n(k,oe={}){if(Ut(),!Jt){xr(k,oe);return}mt=window.setTimeout(()=>{mt=0,xr(k,oe)},XZ)}function qn(){if(Ee.rafId=0,q.interactionState.active||C){Tn();return}if(Ee.lastX=Ee.x,Ee.lastY=Ee.y,N.current===Kr.MEASURE){Ee.measureTickEmitted=!0;const k=Re(Ee.x,Ee.y,{hover:!0});D.current?.(k.pick),rt(k.referenceId||"");return}rt(wt(Ee.x,Ee.y,{hover:!0}))}function fo(k,oe){Ee.x=k,Ee.y=oe,!(Number.isFinite(Ee.lastX)&&Number.isFinite(Ee.lastY)&&Math.hypot(k-Ee.lastX,oe-Ee.lastY)<KZ)&&(Ee.rafId||(Ee.rafId=window.requestAnimationFrame(qn)))}function Vn(k){we.active=!0,we.x=k.clientX,we.y=k.clientY,we.pointerType=k.pointerType||""}function Ze(k){const oe=ce.active||ce.startedInScene,fe=oe&&ce.blocked,Fe=oe&&ce.moved;ce.active=!0,ce.blocked=fe,ce.moved=Fe,ce.startedInScene=!0,ce.x=k.clientX,ce.y=k.clientY,ce.pointerType=k.pointerType||""}function kn(k){if(!ce.startedInScene||ce.blocked||ce.moved||we.active||Ie(k)||et(k))return!1;const oe=at(ce.pointerType||k.pointerType);return Math.hypot(k.clientX-ce.x,k.clientY-ce.y)<=oe}function Sr(k,{suppressNativeContextMenu:oe=!0}={}){Ut(),oe&&je.suppressNextContextMenu();const fe=dt(k.clientX,k.clientY,k.pointerType||ce.pointerType||"")||"";U.current?.(fe||"",{clientX:k.clientX,clientY:k.clientY,multiSelect:!!k.shiftKey}),st()}function Er(k){if(!ce.startedInScene&&!je.isSuppressed()){ce.active=!1;return}if(kn(k)){Sr(k);return}je.suppressNextContextMenu(),st()}function ie(k){if(!ce.active)return;const oe=at(ce.pointerType||k.pointerType);Math.hypot(k.clientX-ce.x,k.clientY-ce.y)>oe&&(ce.blocked=!0,ce.moved=!0,xt())}function Mt(k){if(lt(k)){if(k.button===0){ce.active||Je(k)||et(k)?xt():Vn(k);return}k.button===2&&(Ze(k),(me.active||we.active||Ie(k)||et(k))&&xt())}}function un(k){if(lt(k)){if(k.button===0){ce.active||Je(k)||et(k)?xt():Vn(k);return}k.button===2&&(Ze(k),(me.active||we.active||Ie(k)||et(k))&&xt())}}function Ke(k){nr(k)&&(ie(k),(et(k)||we.active&&Je(k))&&xt())}function zt(k){nr(k)&&(ie(k),(et(k)||we.active&&Je(k))&&xt())}function Yn(k){k.button===0?Xt():k.button===2&&(ce.active=!1)}function kt(k){k.button===0?Xt():k.button===2&&Er(k)}function ae(k){if(!jt(k.target)){Tn();return}if(we.active&&!Ie(k)&&Xt(),(et(k)||we.active&&Je(k))&&xt(),ie(k),q.interactionState.active){Tn();return}const oe=at(me.pointerType||k.pointerType);if(me.active&&Math.hypot(k.clientX-me.x,k.clientY-me.y)>oe&&(me.active=!1),!Ae(k.pointerType)){Tn();return}fo(k.clientX,k.clientY)}function cr(){Tn(),(me.active||we.active||ce.active)&&xt(),me.active=!1,me.pointerType="",me.referenceId="",Xt()}function bn(k){if(k.button!==0){k.button===2&&jt(k.target)&&(Ze(k),(me.active||we.active||Ie(k)||et(k))&&xt());return}if(jt(k.target)){if(et(k)||Je(k)){xt();return}Vn(k),me.active=!0,me.x=k.clientX,me.y=k.clientY,me.pointerType=k.pointerType||"",me.referenceId=String(Ae(me.pointerType)?Ee.hoveredReferenceId||wt(k.clientX,k.clientY,{hover:!0})||"":wt(k.clientX,k.clientY)||"").trim()}}function Jr(k){if(k.button===0?Xt():k.button===2&&(ce.active=!1),k.button!==0||!me.active&&!jt(k.target))return;const oe=at(me.pointerType||k.pointerType),fe=Math.hypot(k.clientX-me.x,k.clientY-me.y);if(!me.active||fe>oe){me.active=!1,me.pointerType="",me.referenceId="";return}const Fe=String(me.referenceId||"").trim();if(me.active=!1,me.pointerType="",me.referenceId="",C)return;if(N.current===Kr.MEASURE){Y.current?.(Re(me.x,me.y,{bypassTopology:!!k.shiftKey}).pick);return}const qe=Fe||dt(k.clientX,k.clientY,k.pointerType||"");_n(qe||"",{multiSelect:!!k.shiftKey})}function rr(k){if(!jt(k.target)||(Ut(),C))return;const oe=dt(k.clientX,k.clientY,k.pointerType||"");K.current?.(oe||"",{multiSelect:!!k.shiftKey})}function Or(k){lt(k)&&(k.preventDefault(),k.stopPropagation(),Ut(),je.consumeSuppression(),ce.startedInScene||st())}return re.addEventListener("pointerdown",Mt,!0),re.addEventListener("pointermove",Ke,!0),re.addEventListener("pointerup",Yn,!0),document.addEventListener("mousedown",un,!0),document.addEventListener("mousemove",zt,!0),document.addEventListener("mouseup",kt,!0),document.addEventListener("contextmenu",Or,!0),re.addEventListener("pointermove",ae),re.addEventListener("pointerleave",cr),re.addEventListener("pointerdown",bn),re.addEventListener("pointerup",Jr),Jt&&re.addEventListener("dblclick",rr),()=>{re.removeEventListener("pointerdown",Mt,!0),re.removeEventListener("pointermove",Ke,!0),re.removeEventListener("pointerup",Yn,!0),document.removeEventListener("mousedown",un,!0),document.removeEventListener("mousemove",zt,!0),document.removeEventListener("mouseup",kt,!0),document.removeEventListener("contextmenu",Or,!0),re.removeEventListener("pointermove",ae),re.removeEventListener("pointerleave",cr),re.removeEventListener("pointerdown",bn),re.removeEventListener("pointerup",Jr),Jt&&re.removeEventListener("dblclick",rr),je.clear(),Ut(),Tn(),re.style.cursor=""}},[r,t,o,e,n,C,E])}const rJ="modulepreload",oJ=function(e){return"/"+e},qT={},Jo=function(t,n,r){let o=Promise.resolve();if(n&&n.length>0){let l=function(c){return Promise.all(c.map(u=>Promise.resolve(u).then(f=>({status:"fulfilled",value:f}),f=>({status:"rejected",reason:f}))))};document.getElementsByTagName("link");const s=document.querySelector("meta[property=csp-nonce]"),a=s?.nonce||s?.getAttribute("nonce");o=l(n.map(c=>{if(c=oJ(c),c in qT)return;qT[c]=!0;const u=c.endsWith(".css"),f=u?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${c}"]${f}`))return;const m=document.createElement("link");if(m.rel=u?"stylesheet":rJ,u||(m.as="script"),m.crossOrigin="",m.href=c,a&&m.setAttribute("nonce",a),document.head.appendChild(m),u)return new Promise((p,b)=>{m.addEventListener("load",p),m.addEventListener("error",()=>b(new Error(`Unable to preload CSS for ${c}`)))})}))}function i(s){const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=s,window.dispatchEvent(a),!a.defaultPrevented)throw s}return o.then(s=>{for(const a of s||[])a.status==="rejected"&&i(a.reason);return t().catch(i)})};function bD(e){return e instanceof Element?!!e.closest("input, textarea, select, [contenteditable=''], [contenteditable='true'], [role='textbox']"):!1}function xD({alpha:e=!0,antialias:t=!0,powerPreference:n="high-performance",preserveDrawingBuffer:r=!1,logarithmicDepthBuffer:o=!0}={}){return{alpha:e,antialias:t,powerPreference:n,preserveDrawingBuffer:r,logarithmicDepthBuffer:o}}function iJ(e={}){return{...xD(e),antialias:!1,powerPreference:"default",logarithmicDepthBuffer:!1}}function sJ(e,{allowFallback:t=!1,isRecoverableError:n=()=>!0,...r}={}){try{return new e.WebGLRenderer(xD(r))}catch(o){if(!t||!n(o))throw o;return new e.WebGLRenderer(iJ(r))}}function aJ({idlePixelRatioCap:e=2,interactionPixelRatioCap:t=1,preservePixelRatio:n=!1,screenSpaceLineMaterialCount:r=null,screenSpaceLineMaterials:o=null}={}){return n||(r!=null&&Number.isFinite(Number(r))?Number(r):Number(o?.size||0))>0?e:t}const lJ=1,cJ=60,uJ=60/cJ;function nw(e){const t=Number(e);return Number.isFinite(t)?t:null}function dJ(e,t){const n=nw(e),r=nw(t);return n===null||r===null||r<=0||n<=r?null:Math.min((n-r)/1e3,lJ)}function fJ(e,t,n){if(!e||typeof e.update!="function")return!1;if(!e.autoRotate)return n&&(n.orbitControlsLastTimestamp=0),e.update();const r=nw(t),o=dJ(r,n?.orbitControlsLastTimestamp);return n&&(n.orbitControlsLastTimestamp=r??0),o===null?e.update():e.update(o)}function mJ(e){return sJ(e,{allowFallback:!0,isRecoverableError:hk,logarithmicDepthBuffer:!1})}function pJ({mountRef:e,runtimeRef:t,previewModeRef:n,setError:r,setViewerReadyTick:o,viewerTheme:i,syncDrawingCanvasSize:s,renderDrawingOverlay:a,emitPerspectiveChange:l,setActiveViewPlaneFace:c,activeViewPlaneFaceRef:u,stepCameraTransition:f,stepKeyboardOrbit:m,getActiveViewPlaneFaceId:p,cancelCameraTransition:b,clearKeyboardOrbitState:y,isTrackpadLikeWheelEvent:x,isPinchWheelEvent:S,WHEEL_PINCH_DELTA_BOOST:E,getKeyboardOrbitCommand:C,getKeyboardOrbitAxes:A,applyOrbitDelta:N,getViewerThemeValue:w,getPixelRatioCap:_,applySceneBackground:I,applyCameraFrameInsets:R,frameInsetsRef:O,applyInitialPerspective:F,updateGridHelper:V,clearSceneGroup:$,disposeSceneObject:K,disposeTexture:U,syncViewPlaneOrientation:Y,BASE_VIEWER_THEME:D,DEFAULT_LIGHTING:j,DEFAULT_DAMPING_FACTOR:ee,DEFAULT_ZOOM_SPEED:X,COARSE_POINTER_ZOOM_SPEED:ve,INTERACTION_PIXEL_RATIO_CAP:q,IDLE_PIXEL_RATIO_CAP:re,INTERACTION_IDLE_DELAY_MS:Be,TRACKPAD_PINCH_ZOOM_SPEED:Me,COARSE_POINTER_PINCH_ZOOM_SPEED:He,ACCELERATED_WHEEL_ZOOM_SPEED:de,KEYBOARD_ORBIT_NUDGE_RAD:me,defaultGridRadius:we,sceneScaleMode:ce,floorMode:Ee,onManualCameraInteraction:Jt,onViewportResize:mt,onContextLost:je,onContextRestored:ye,onInitializationError:Ie,preserveInteractionPixelRatio:Je=!1,runtimeResetToken:et=0}){h.useEffect(()=>{t.current&&(t.current.preserveInteractionPixelRatio=Je===!0)},[Je,t,et]),h.useEffect(()=>{let Xt=!1,st=()=>{};async function xt(){const[Xe,{OrbitControls:sn},{Line2:mn},{LineGeometry:ke},{LineSegments2:St},{LineSegmentsGeometry:Rr},{LineMaterial:yr}]=await Promise.all([Jo(()=>import("./vendor-three-C9GQa7gb.js").then(Z=>Z.t),[]),Jo(()=>import("./vendor-three-C9GQa7gb.js").then(Z=>Z.O),[]),Jo(()=>import("./vendor-three-C9GQa7gb.js").then(Z=>Z.u),[]),Jo(()=>import("./vendor-three-C9GQa7gb.js").then(Z=>Z.s),[]),Jo(()=>import("./vendor-three-C9GQa7gb.js").then(Z=>Z.r),[]),Jo(()=>import("./vendor-three-C9GQa7gb.js").then(Z=>Z.p),[]),Jo(()=>import("./vendor-three-C9GQa7gb.js").then(Z=>Z.q),[])]);if(Xt||!e.current)return;const Qt=e.current,Kn=(typeof window.matchMedia=="function"?window.matchMedia("(pointer: coarse)"):null)?.matches??!1,Qo=()=>Kn?ve:X,_e=()=>Kn?He:Me,Ot=Qt.clientWidth||800,Nn=Qt.clientHeight||640,vn=new Xe.Scene,cn=(Z,pe=Ot,ft=Nn)=>{if(!Z)return;const ur=Math.max(pe,1)/Math.max(ft,1);if(Z.isPerspectiveCamera)Z.aspect=ur;else if(Z.isOrthographicCamera){const Cn=Math.max(Number(Z.userData?.cadHalfHeight)||120,.001);Z.left=-Cn*ur,Z.right=Cn*ur,Z.top=Cn,Z.bottom=-Cn}Z.updateProjectionMatrix?.()},br=new Xe.PerspectiveCamera(48,Ot/Nn,.1,5e4),Et=new Xe.OrthographicCamera(-120,120,120,-120,.1,5e4);Et.userData.cadHalfHeight=120;const Zr=br;Zr.up.set(0,0,1),Zr.position.set(180,-180,120),Et.up.copy(Zr.up),Et.position.copy(Zr.position),cn(br,Ot,Nn),cn(Et,Ot,Nn);const en=mJ(Xe),Pr=v7(en),te=Pr?1:re,We=Pr?1:q;en.outputColorSpace=Xe.SRGBColorSpace,en.toneMapping=Xe.ACESFilmicToneMapping,en.toneMappingExposure=w(i,"toneMappingExposure",j.toneMappingExposure),en.localClippingEnabled=!0,en.shadowMap.enabled=!Pr,en.shadowMap.type=Xe.PCFSoftShadowMap,en.shadowMap.autoUpdate=!1,en.setPixelRatio(_(te)),en.setSize(Ot,Nn),Qt.innerHTML="",Qt.appendChild(en.domElement);const Re=new sn(Zr,en.domElement);Re.enableDamping=!0,Re.dampingFactor=ee,Re.rotateSpeed=1,Re.panSpeed=1.35,Re.zoomSpeed=Qo(),"zoomToCursor"in Re&&(Re.zoomToCursor=!0);const wt=new Xe.HemisphereLight(w(i,"hemisphereSky",j.hemisphereSky),w(i,"hemisphereGround",j.hemisphereGround),w(i,"hemisphereIntensity",j.hemisphereIntensity));vn.add(wt);const dt=new Xe.AmbientLight("#ffffff",0);vn.add(dt);const pt=new Xe.DirectionalLight(w(i,"keyLightColor",j.keyLightColor),w(i,"keyLightIntensity",j.keyLightIntensity));pt.position.set(240,-150,340),pt.castShadow=!Pr,pt.shadow.mapSize.set(2048,2048),pt.shadow.bias=-25e-5,pt.shadow.normalBias=.024,vn.add(pt);const at=new Xe.DirectionalLight(w(i,"fillLightColor",j.fillLightColor),w(i,"fillLightIntensity",j.fillLightIntensity));at.position.set(120,80,210),vn.add(at);const Ae=new Xe.DirectionalLight(w(i,"rimLightColor",j.rimLightColor),w(i,"rimLightIntensity",j.rimLightIntensity));Ae.position.set(-260,240,180),vn.add(Ae);const jt=new Xe.SpotLight("#ffffff",0,0,Math.PI/6);jt.position.set(160,-120,140),jt.visible=!1,jt.castShadow=!1,jt.shadow.mapSize.set(1024,1024),jt.shadow.bias=-25e-5,jt.shadow.normalBias=.01,vn.add(jt),vn.add(jt.target);const lt=new Xe.PointLight("#ffffff",0,0);lt.position.set(-120,80,140),lt.visible=!1,lt.castShadow=!1,vn.add(lt);const nr=null,rt=new Xe.Group,Tn=new Xe.Group,Ut=new Xe.Group,xr=new Xe.Group,_n=new Xe.Group,qn=new Xe.Group;xr.visible=!1,_n.visible=!1,qn.visible=!1,vn.add(rt),vn.add(Tn),vn.add(Ut),vn.add(xr),vn.add(_n),vn.add(qn);const fo=new Xe.Raycaster,Vn=new Xe.Vector2,Ze={active:!1,pixelRatioCap:te,pixelRatio:_(te),renderQueued:!1,renderQueuedAt:0,renderFallbackTimerId:0,restoreTimerId:0,shadowsDirty:!0,interactionQuality:!1},kn={pressedKeys:new Set,directionCounts:{left:0,right:0,up:0,down:0},lastFrameTime:0},Sr=new Set,Er=()=>Sr.size+Number(t.current?.cadScene?.runtime?.screenSpaceLineMaterials?.size||0),ie=()=>{const Z=Qt.clientWidth||Ot,pe=Qt.clientHeight||Nn;for(const ft of Sr)ft?.resolution?.set?.(Z,pe);t.current?.cadScene?.runtime?.syncScreenSpaceLineMaterials?.(Z,pe)},Mt=Z=>{Z?.resolution?.set&&(Sr.add(Z),Z.resolution.set(Qt.clientWidth||Ot,Qt.clientHeight||Nn))},un=Z=>{Z&&Sr.delete(Z)},Ke=Z=>{Z.preventDefault(),y(kn),r("WebGL context was lost. Restoring CAD Viewer..."),je?.()},zt=()=>{Ze.shadowsDirty=!0,r(""),ye?.()},Yn=(Z,pe)=>{const ft=_(Z),ur=Number(t.current?.resolveExtraPixelRatioCap?.(pe));return Number.isFinite(ur)&&ur>0?Math.min(ft,ur):ft},kt=(Z,{force:pe=!1,interaction:ft=null}={})=>{const ur=ft===null?Ze.interactionQuality===!0:ft===!0;Ze.interactionQuality=ur;const Cn=Yn(Z,ur);!pe&&Math.abs(Ze.pixelRatioCap-Z)<1e-4&&Math.abs((Ze.pixelRatio||0)-Cn)<1e-4||(Ze.pixelRatioCap=Z,Ze.pixelRatio=Cn,en.setPixelRatio(Cn),en.setSize(Qt.clientWidth||Ot,Qt.clientHeight||Nn,!1),ie(),s(t.current),a())},ae=Z=>{const pe=Z?.camera;if(!pe?.isPerspectiveCamera||en.capabilities?.logarithmicDepthBuffer)return;const ft=Math.max(Number(Z?.modelRadius)||1,1e-6),ur=Math.max(ft,Number(Z?.gridConfig?.radius)||0),Cn=Z?.controls?.target||Re.target,Qr=Math.max(pe.position.distanceTo(Cn),ft*.001),Vo=Math.max(Qr-ft*4,Qr/250),ys=Math.max(Qr+ur*50,Vo*16);(Math.abs(Vo-pe.near)>pe.near*.1||Math.abs(ys-pe.far)>pe.far*.1)&&(pe.near=Vo,pe.far=ys,pe.updateProjectionMatrix())};let cr=0;const bn=()=>{if(Ze.renderQueued){const Z=typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now();if(Ze.renderQueuedAt&&Z-Ze.renderQueuedAt<120)return;window.cancelAnimationFrame(cr),Ze.renderQueued=!1,Ze.renderQueuedAt=0}Ze.renderQueued=!0,Ze.renderQueuedAt=typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now(),cr=window.requestAnimationFrame(Jr),Ze.renderFallbackTimerId&&window.clearTimeout(Ze.renderFallbackTimerId),Ze.renderFallbackTimerId=window.setTimeout(()=>{Ze.renderQueued&&(window.cancelAnimationFrame(cr),Jr(typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now()))},120),t.current&&(t.current.rafId=cr)};function Jr(Z){Ze.renderQueued=!1,Ze.renderQueuedAt=0,Ze.renderFallbackTimerId&&(window.clearTimeout(Ze.renderFallbackTimerId),Ze.renderFallbackTimerId=0);const pe=f(t.current,Z),ft=m(t.current,Z),ur=fJ(Re,Z,t.current);(pe||ft)&&l(t.current),ae(t.current),en.shadowMap.needsUpdate=Ze.shadowsDirty===!0,Ze.shadowsDirty=!1,en.render(vn,t.current?.camera||Zr);const Cn=!!t.current?.previewOrbitEnabled;if(!Cn){const Qr=p(t.current);Qr!==u.current&&(u.current=Qr,c(Qr)),Y(t.current)}(pe||ft||ur||Ze.active&&t.current?.renderOnDemandOnly!==!0||Cn)&&bn()}const rr=()=>{Ze.restoreTimerId&&(window.clearTimeout(Ze.restoreTimerId),Ze.restoreTimerId=0),Ze.active=!0,kt(aJ({idlePixelRatioCap:te,interactionPixelRatioCap:We,preservePixelRatio:t.current?.preserveInteractionPixelRatio===!0,screenSpaceLineMaterialCount:Er()}),{interaction:!0}),bn()},Or=()=>{Ze.restoreTimerId&&window.clearTimeout(Ze.restoreTimerId);const Z=Math.max(Number(t.current?.idleQualityDelayMs)||0,Be);Ze.restoreTimerId=window.setTimeout(()=>{Ze.restoreTimerId=0,Ze.active=!1,Re.enableDamping=!0,Re.dampingFactor=ee,Re.zoomSpeed=Qo();const pe=t.current?.onIdleQualityRestore;if(typeof pe=="function"){pe(),bn(),window.setTimeout(()=>{kt(te,{interaction:!1}),bn()},0);return}kt(te,{interaction:!1}),bn()},Z)},k=()=>{const Z=Qt.clientWidth||800,pe=Qt.clientHeight||640;kt(Ze.pixelRatioCap),en.setSize(Z,pe),cn(br,Z,pe),cn(Et,Z,pe),R?.(t.current,O?.current,{updateProjection:!1}),ie(),s(t.current),a(),t.current?.onViewportResize?.(),bn()};window.addEventListener("resize",k);const oe=typeof ResizeObserver=="function"?new ResizeObserver(()=>{k()}):null;oe?.observe(Qt);const fe=new Xe.Vector2,Fe=new Xe.Vector3,qe=new Xe.Vector3,Ye=new Xe.Vector3;let ht=!1;const Dn=Z=>{const pe=t.current,ft=pe?.modelBounds;return ft&&Array.isArray(ft.min)&&Array.isArray(ft.max)?(Z.set((Number(ft.min[0])+Number(ft.max[0]))/2,(Number(ft.min[1])+Number(ft.max[1]))/2,(Number(ft.min[2])+Number(ft.max[2]))/2),pe.modelGroup?.position&&Z.add(pe.modelGroup.position),Z):Z.copy(pe?.controls?.target||Z.set(0,0,0))},Rt=()=>{const Z=t.current,pe=Z?.camera,ft=Z?.controls;if(!pe?.isPerspectiveCamera||!ft?.target)return;pe.getWorldDirection(Fe);const ur=ys=>Math.max(qe.copy(ys).sub(pe.position).dot(Fe),0);let Cn=0;if(Z.raycaster&&Z.modelGroup){Z.raycaster.setFromCamera(fe,pe),Z.raycaster.firstHitOnly=!0;const ys=Z.raycaster.intersectObject(Z.modelGroup,!0);Z.raycaster.firstHitOnly=!1;const Sa=ys.find(_o=>_o?.point);Sa&&(Cn=ur(Sa.point))}Cn>0||(Cn=ur(Dn(Ye)));const Qr=Math.max(Number.isFinite(ft.minDistance)?ft.minDistance:0,1e-4),Vo=Number.isFinite(ft.maxDistance)&&ft.maxDistance>0?ft.maxDistance:Number.POSITIVE_INFINITY;Cn=Math.min(Math.max(Cn,Qr),Vo),ft.target.copy(pe.position).addScaledVector(Fe,Cn)};let Xn=null;const It=()=>{const Z=t.current;return!Z?.camera||!Z?.controls?.target?null:Z.camera.position.distanceTo(Z.controls.target)},tt=()=>{Xn=It(),b(t.current),rr()},An=()=>{ht&&(ht=!1,Rt()),l(t.current),bn()},xn=()=>{const Z=It();if(Number.isFinite(Xn)&&Number.isFinite(Z)){const pe=Math.max(Math.abs(Xn)*.002,1e-4);Math.abs(Z-Xn)>pe&&t.current?.onManualCameraInteraction?.("zoom")}Xn=null,Or()},Di=Z=>{t.current?.onManualCameraInteraction?.("wheel"),b(t.current),Re.enableDamping=!1,Re.zoomSpeed=S(Z)?_e()/E:x(Z)?_e():de;const pe=en.domElement.getBoundingClientRect();pe.width>0&&pe.height>0&&(fe.set((Z.clientX-pe.left)/pe.width*2-1,-((Z.clientY-pe.top)/pe.height)*2+1),ht=!0),rr()},Bo={passive:!0,capture:!0};Re.addEventListener("start",tt),Re.addEventListener("change",An),Re.addEventListener("end",xn),en.domElement.addEventListener("wheel",Di,Bo),en.domElement.addEventListener("webglcontextlost",Ke,!1),en.domElement.addEventListener("webglcontextrestored",zt,!1);const ui=Z=>{if(n.current||Z.defaultPrevented||Z.ctrlKey||Z.metaKey||Z.altKey||bD(Z.target))return;const pe=C(Z);if(pe){if(kn.pressedKeys.has(pe.keyId)){Z.preventDefault();return}kn.pressedKeys.add(pe.keyId),kn.directionCounts[pe.direction]+=1,kn.lastFrameTime=0,b(t.current),rr(),N(t.current,(pe.direction==="right"?1:pe.direction==="left"?-1:0)*me,(pe.direction==="down"?1:pe.direction==="up"?-1:0)*me),l(t.current),bn(),Z.preventDefault()}},gs=Z=>{const pe=C(Z);if(!pe||!kn.pressedKeys.delete(pe.keyId))return;kn.directionCounts[pe.direction]=Math.max(0,kn.directionCounts[pe.direction]-1);const ft=A(kn);!ft.azimuth&&!ft.polar&&(kn.lastFrameTime=0,Or()),Z.preventDefault()},di=()=>{kn.pressedKeys.size&&(y(kn),Or())},or=()=>{document.visibilityState!=="visible"&&di()};t.current={THREE:Xe,scene:vn,camera:Zr,perspectiveCamera:br,orthographicCamera:Et,projection:"perspective",syncCameraViewport:cn,renderer:en,softwareRendering:Pr,Line2:mn,LineGeometry:ke,LineSegments2:St,LineSegmentsGeometry:Rr,LineMaterial:yr,controls:Re,stageGroup:rt,modelGroup:Tn,edgesGroup:Ut,facePickGroup:xr,edgePickGroup:_n,vertexPickGroup:qn,facePickMesh:null,edgePickLines:null,vertexPickPoints:null,edgePickObjects:[],displayRecords:[],modelBounds:null,modelRadius:1,activeModelKey:"",sceneScaleMode:ce,raycaster:fo,pointer:Vn,hemisphereLight:wt,ambientLight:dt,keyLight:pt,fillLight:at,rimLight:Ae,spotLight:jt,pointLight:lt,axesHelper:nr,sceneBackgroundTexture:null,environmentTexture:null,environmentTextureUrl:"",gridConfig:null,gridHelper:null,floorMode:Ee,hasVisibleModel:!1,edgePickThreshold:1.5,vertexPickThreshold:.9,cameraTransition:null,previewOrbitEnabled:!1,orbitControlsLastTimestamp:0,preserveInteractionPixelRatio:Je===!0,interactionState:Ze,keyboardOrbitState:kn,onResize:k,resizeObserver:oe,rafId:cr,requestRender:()=>{Ze.shadowsDirty=!0,bn()},invalidateShadows:()=>{Ze.shadowsDirty=!0},beginInteraction:rr,scheduleIdleQuality:Or,renderOnDemandOnly:!1,idleQualityDelayMs:0,onIdleQualityRestore:null,resolveExtraPixelRatioCap:null,refreshRenderQuality:()=>{kt(Ze.pixelRatioCap,{force:!0})},applyCameraFrameInsets:R,frameInsetsRef:O,onManualCameraInteraction:Jt,onViewportResize:mt,registerScreenSpaceLineMaterial:Mt,unregisterScreenSpaceLineMaterial:un},s(t.current),a(),I(t.current,i),R?.(t.current,O?.current),F?.(t.current),window.addEventListener("keydown",ui),window.addEventListener("keyup",gs),window.addEventListener("blur",di),document.addEventListener("visibilitychange",or),bn(),V(t.current,i,we,0,ce,Ee),o(Z=>Z+1),st=()=>{const Z=t.current;Z&&(Z.interactionState.restoreTimerId&&window.clearTimeout(Z.interactionState.restoreTimerId),Z.interactionState.renderFallbackTimerId&&window.clearTimeout(Z.interactionState.renderFallbackTimerId),b(Z,{scheduleIdle:!1}),window.cancelAnimationFrame(Z.rafId),window.removeEventListener("resize",Z.onResize),Z.resizeObserver?.disconnect(),Z.controls.removeEventListener("start",tt),Z.controls.removeEventListener("change",An),Z.controls.removeEventListener("end",xn),Z.renderer.domElement.removeEventListener("wheel",Di,Bo),Z.renderer.domElement.removeEventListener("webglcontextlost",Ke,!1),Z.renderer.domElement.removeEventListener("webglcontextrestored",zt,!1),window.removeEventListener("keydown",ui),window.removeEventListener("keyup",gs),window.removeEventListener("blur",di),document.removeEventListener("visibilitychange",or),Z.controls.dispose(),$(Z.stageGroup),$(Z.modelGroup),$(Z.edgesGroup),$(Z.facePickGroup),$(Z.edgePickGroup),$(Z.vertexPickGroup),K(Z.gridHelper),K(Z.axesHelper),U(Z.sceneBackgroundTexture),U(Z.environmentTexture),Z.renderer.dispose(),Qt.contains(Z.renderer.domElement)&&Qt.removeChild(Z.renderer.domElement),t.current=null)}}return xt().catch(Xe=>{Xt||(r(tA(Xe)),Ie?.(Xe))}),()=>{Xt=!0,st()}},[et])}const ja=Object.freeze([0,0,1]),hJ=Math.PI/32,YT=Math.PI*.42,XT=.02,gJ=.994,gA=280,yJ=.9999,bJ=.02,xJ=.999,SJ=.999,fx=Object.freeze([2.1,-1.65,1.08]),EJ=Object.freeze({x:[1,0,0],y:[0,1,0],z:[0,0,1]}),yA=[{id:"z",label:"Z",title:"Jump to top view",direction:[0,0,1],up:[0,1,0]},{id:"zNeg",label:"-Z",title:"Jump to bottom view",direction:[0,0,-1],up:[0,1,0]},{id:"yNeg",label:"-Y",title:"Jump to front view",direction:[0,-1,0],up:ja},{id:"y",label:"Y",title:"Jump to back view",direction:[0,1,0],up:ja},{id:"x",label:"X",title:"Jump to right view",direction:[1,0,0],up:ja},{id:"xNeg",label:"-X",title:"Jump to left view",direction:[-1,0,0],up:ja}],wJ=Object.fromEntries(yA.map(e=>[e.id,e])),ZT={direction:fx,up:ja};function lo(e,t,n){return Math.min(Math.max(e,t),n)}function Gy(e,t=0){const n=Number(e);return Number.isFinite(n)?n:t}function vJ(e,t){let n=e;for(;n-t>Math.PI;)n-=Math.PI*2;for(;n-t<-Math.PI;)n+=Math.PI*2;return n}function AJ(e){return e<=0?0:e>=1?1:e<.5?4*e*e*e:1-(-2*e+2)**3/2}const CJ=10;function SD(e){return!!e?.ctrlKey}function MJ(e){return SD(e)||e.deltaMode===0&&Math.abs(e.deltaY)<20}function ED(e={}){const t=n=>{const r=Number(n);return Number.isFinite(r)?Math.max(0,r):0};return{top:t(e?.top),right:t(e?.right),bottom:t(e?.bottom),left:t(e?.left)}}function IJ({orthographic:e=!1,fov:t=48,aspect:n=1,height:r=1,framedHeight:o=1}={}){const i=Math.max(Gy(n,1),.001);if(e){const c=Math.max(Gy(r,1),1),u=Math.max(Gy(o,c),1);return 1/Math.min(i,1)*(c/u)}const s=Math.max(Gy(t,48),.001)*Math.PI/360,a=Math.atan(Math.tan(s)*i),l=Math.max(Math.min(s,a),.001);return 1/Math.sin(l)}function NJ(e){if(!e)return null;if(e.key==="ArrowLeft")return{direction:"left",keyId:"ArrowLeft"};if(e.key==="ArrowRight")return{direction:"right",keyId:"ArrowRight"};if(e.key==="ArrowUp")return{direction:"up",keyId:"ArrowUp"};if(e.key==="ArrowDown")return{direction:"down",keyId:"ArrowDown"};const t=String(e.key||"").toLowerCase();return t==="a"||e.code==="KeyA"?{direction:"left",keyId:e.code||"KeyA"}:t==="d"||e.code==="KeyD"?{direction:"right",keyId:e.code||"KeyD"}:t==="w"||e.code==="KeyW"?{direction:"up",keyId:e.code||"KeyW"}:t==="s"||e.code==="KeyS"?{direction:"down",keyId:e.code||"KeyS"}:null}function wD(e){return{azimuth:(e.directionCounts.right>0?1:0)-(e.directionCounts.left>0?1:0),polar:(e.directionCounts.down>0?1:0)-(e.directionCounts.up>0?1:0)}}function Bh(e){e&&(e.pressedKeys.clear(),e.directionCounts.left=0,e.directionCounts.right=0,e.directionCounts.up=0,e.directionCounts.down=0,e.lastFrameTime=0)}function vD(e,t,n){if(!e?.THREE||!e?.camera||!e?.controls||Math.abs(t)<1e-6&&Math.abs(n)<1e-6)return!1;const r=new e.THREE.Vector3().copy(e.camera.position).sub(e.controls.target),o=r.length();if(!Number.isFinite(o)||o<=1e-6)return!1;const i=new e.THREE.Vector3(...ja).normalize(),s=r.clone().divideScalar(o),a=Math.max(Number.isFinite(e.controls.minPolarAngle)?e.controls.minPolarAngle:0,XT),l=Math.min(Number.isFinite(e.controls.maxPolarAngle)?e.controls.maxPolarAngle:Math.PI,Math.PI-XT),c=Math.acos(lo(s.dot(i),-1,1)),f=lo(c+n,a,l)-c,m=Number.isFinite(e.controls.minAzimuthAngle)?e.controls.minAzimuthAngle:-1/0,p=Number.isFinite(e.controls.maxAzimuthAngle)?e.controls.maxAzimuthAngle:1/0;if(Number.isFinite(m)||Number.isFinite(p)){const b=Math.atan2(r.y,r.x);t=lo(vJ(b+t,b),m,p)-b}if(Math.abs(t)>1e-6&&r.applyAxisAngle(i,t),Math.abs(f)>1e-6){let b=new e.THREE.Vector3().crossVectors(i,r).normalize();b.lengthSq()<=1e-9&&(b=new e.THREE.Vector3(1,0,0)),r.applyAxisAngle(b,f)}return e.camera.position.copy(e.controls.target).add(r),e.camera.up.set(...ja),e.camera.lookAt(e.controls.target),!0}function TJ(e,t){const n=e?.keyboardOrbitState;if(!n)return!1;const r=wD(n);if(!r.azimuth&&!r.polar)return n.lastFrameTime=0,!1;if(!n.lastFrameTime)return n.lastFrameTime=t,!1;const o=lo((t-n.lastFrameTime)/1e3,0,.05);return n.lastFrameTime=t,vD(e,r.azimuth*YT*o,r.polar*YT*o)}function _J(e,t,n=1e-4){if(!e||!t)return!1;for(const r of["x","y","z"]){const o=e[r],i=t[r];if(!Array.isArray(o)||!Array.isArray(i)||o.length!==3||i.length!==3)return!1;for(let s=0;s<3;s+=1)if(Math.abs((o[s]||0)-(i[s]||0))>n)return!1}return!0}function RJ(e){if(!e?.THREE||!e?.camera)return null;const t=e.camera.quaternion.clone().invert(),n=(r,o,i)=>{const s=new e.THREE.Vector3(r,o,i).applyQuaternion(t);return[s.x,s.y,s.z]};return{x:n(1,0,0),y:n(0,1,0),z:n(0,0,1)}}function PJ(e){if(!e?.THREE||!e?.camera||!e?.controls)return"";const t=new e.THREE.Vector3().copy(e.camera.position).sub(e.controls.target);if(t.lengthSq()<1e-6)return"";t.normalize();let n="",r=-1/0;for(const o of yA){const i=new e.THREE.Vector3(...o.direction).normalize(),s=t.dot(i);s>r&&(r=s,n=o.id)}return r>=gJ?n:""}function OJ(e,t,{directionDotThreshold:n=xJ,upDotThreshold:r=SJ}={}){if(!e?.THREE||!e?.camera||!e?.controls||!t||!Array.isArray(t.direction)||!Array.isArray(t.up))return!1;const o=e.camera.position.clone().sub(e.controls.target),i=new e.THREE.Vector3(...t.direction),s=e.camera.up.clone(),a=new e.THREE.Vector3(...t.up);return o.lengthSq()<=1e-8||i.lengthSq()<=1e-8||s.lengthSq()<=1e-8||a.lengthSq()<=1e-8?!1:(o.normalize(),i.normalize(),s.normalize(),a.normalize(),o.dot(i)>=n&&s.dot(a)>=r)}function kJ({themeSettings:e={},displaySettings:t=null}={}){const n=Pi(e),r=$i(t);return{themeSettings:n,displaySettings:r,displayMode:r.mode,clipSettings:r.clip}}const DJ=2,LJ=1.25,FJ=140,xh=.14,JT=4.5,jJ=1.6,zJ=1e3,BJ=5,VJ=7,$J=2.4,I0=Object.freeze({EASE_IN_OUT_CUBIC:"ease-in-out-cubic",EASE_IN_OUT_SINE:"ease-in-out-sine"}),AD=Ju,GJ="cad-z-up-v1",UJ="cad-z-up-robot-framing-v2",HJ="7.5rem",WJ=10,KJ=800,qJ=.84,YJ={toneMappingExposure:1.08,hemisphereSky:"#d3dde6",hemisphereGround:"#090c16",hemisphereIntensity:1.62,keyLightColor:"#d6e0ea",keyLightIntensity:.82,fillLightColor:"#6b7f95",fillLightIntensity:.46,rimLightColor:"#6db6e8",rimLightIntensity:.04},XJ="#f59e0b",ZJ=1.35;function Nu(e){return String(e?.selectorType||"").trim()}function rw(e){return Nu(e)==="occurrence"?String(e?.normalizedSelector||e?.displaySelector||"").trim():String(e?.occurrenceId||"").trim()}function ow(e,t){const n=rw(e),r=String(t||"").trim();return!!(n&&r&&(n===r||n.startsWith(`${r}.`)))}function CD(e){return Nu(e)==="shape"?String(e?.normalizedSelector||e?.displaySelector||"").trim():String(e?.shapeId||"").trim()}function JJ(e,t,n=""){const r=CD(e),o=String(t||"").trim();if(!r||!o||r!==o)return!1;const i=String(n||"").trim();return!i||ow(e,i)}function QJ(e){const t=String(e||"").trim();if(!t.startsWith(Nh))return"";const n=t.slice(Nh.length),r=":occurrence:",o=n.lastIndexOf(r);return o>=0?n.slice(o+r.length).trim():""}function t1(e,t=1){return(Array.isArray(e)||ArrayBuffer.isView(e))&&e.length>=t&&e.length%t===0}function MD(e){return Array.isArray(e?.parts)?e.parts.filter(t=>Bn(t?.vertexCount)>0&&Bn(t?.triangleCount)>0):[]}function eQ(e){const t=MD(e),n=t.map(r=>String(r?.color||"").trim().toLowerCase()).filter(Boolean);return n.length?n.length!==t.length||new Set(n).size>1:!1}function tQ(e,t){return(e?.base||null)===(t?.base||null)&&(e?.runtime||null)===(t?.runtime||null)}function of(e,t){e(n=>tQ(n,t)?n:t)}function QT(e){const t=e?.current;!t?.rafId||typeof window>"u"||(window.cancelAnimationFrame(t.rafId),t.rafId=0)}function nQ(e,t){const n=t?.explodedViewMatrix?.elements;return!e?.Vector3||!n||n.length<16?e?.Vector3?new e.Vector3:null:new e.Vector3(Bn(n[12]),Bn(n[13]),Bn(n[14]))}function Hp(e,t=100){const n=Number(e);return Number.isFinite(n)?lo(n,WJ,KJ):t}function mx(e){if(!e?.camera?.position||!e?.controls?.target)return null;const t=e.camera.position.distanceTo(e.controls.target);return Number.isFinite(t)&&t>1e-6?t:null}function px(e){const t=e?.camera?.isOrthographicCamera?e.camera:e?.orthographicCamera;if(!t?.isOrthographicCamera)return null;const n=Number(t.userData?.cadHalfHeight);if(Number.isFinite(n)&&n>1e-6)return n;const r=Math.abs((Number(t.top)||0)-(Number(t.bottom)||0))/2;return Number.isFinite(r)&&r>1e-6?r:null}function iw(e,t,n){const r=Array.isArray(t?.min)?t.min:null,o=Array.isArray(t?.max)?t.max:null;return!e||!r||!o?0:ld(new e.Vector3(Bn(o[0])-Bn(r[0]),Bn(o[1])-Bn(r[1]),Bn(o[2])-Bn(r[2])).length()/2,n)}function rQ(e){const t=Number(e?.zoomBaseModelRadius),n=Number(e?.zoomFitModelRadius)>1e-6?Number(e.zoomFitModelRadius):Number(e?.modelRadius);return!Number.isFinite(t)||t<=1e-6||!Number.isFinite(n)||n<=1e-6?1:t/n}function Qf(e){const t=rQ(e);if(RD(e),e?.camera?.isOrthographicCamera){const r=px(e);return r&&(e.zoomBaseHalfHeight=r*t,e.zoomBaseHalfHeight)}const n=mx(e);return n&&(e.zoomBaseDistance=n*t,e.zoomBaseDistance)}function oQ(e){const t=e?.camera;if(!t)return 100;const n=Number.isFinite(Number(t.zoom))&&Number(t.zoom)>0?Number(t.zoom):1;if(t.isOrthographicCamera){const s=px(e);if(!s)return Hp(n*100);const a=Number(e.zoomBaseHalfHeight),l=Number.isFinite(a)&&a>1e-6?a:Qf(e)||s;return Hp(l/s*n*100)}const r=mx(e);if(!r)return Hp(n*100);const o=Number(e.zoomBaseDistance),i=Number.isFinite(o)&&o>1e-6?o:Qf(e)||r;return Hp(i/r*n*100)}function e_(e,t){if(!e?.THREE||!e?.camera||!e?.controls?.target)return!1;const n=Hp(t)/100,r=e.camera;if(Bu(e,{scheduleIdle:!1}),Bh(e.keyboardOrbitState),r.isOrthographicCamera){const o=px(e)||1,i=Number(e.zoomBaseHalfHeight),s=Number.isFinite(i)&&i>1e-6?i:o;e.zoomBaseHalfHeight=s,r.zoom=n*(o/s),r.updateProjectionMatrix?.(),em(e)}else{const o=e.controls.target,i=r.position.clone().sub(o),s=i.lengthSq()>1e-8?i.normalize():new e.THREE.Vector3(...fx).normalize(),a=mx(e)||s.length()||1,l=Number(e.zoomBaseDistance),c=Number.isFinite(l)&&l>1e-6?l:a;e.zoomBaseDistance=c;const u=Number.isFinite(Number(e.controls.minDistance))?Number(e.controls.minDistance):.01,f=Number.isFinite(Number(e.controls.maxDistance))&&Number(e.controls.maxDistance)>0?Number(e.controls.maxDistance):Number.POSITIVE_INFINITY,m=lo(c/n,u,f);r.position.copy(o.clone().add(s.multiplyScalar(m))),r.zoom=1,r.updateProjectionMatrix?.(),em(e)}return r.lookAt(e.controls.target),e.controls.update?.(),e.scheduleIdleQuality?.(),e.requestRender?.(),!0}function n1(e,t,n){if(!(!e?.THREE||!Array.isArray(e.displayRecords))){G9(e.THREE,t,n);for(const r of e.displayRecords)Sl(e.THREE,r);e.modelGroup?.updateMatrixWorld?.(!0),e.edgesGroup?.updateMatrixWorld?.(!0),e.topologyDisplayEdgeTransformByRecord===!0&&_E(e,e.displayRecords),e.requestRender?.()}}const iQ=Object.freeze({x:0,y:0,z:0});function sQ(e){return typeof window>"u"?1:Math.min(window.devicePixelRatio||1,e)}function ID(e,t=Xr.CAD){return hH(e,t)}function aQ(e,t=Xr.CAD){const n=Math.max(pH(t),ya(t).minModelRadius);return ID(e,t)/n}function yp(e,t={},n=1){e?.position?.set?.((Number(t.x)||0)*n,(Number(t.y)||0)*n,(Number(t.z)||0)*n)}function t_(e,t=1){const n=Number(e);return Number.isFinite(n)&&n>0?n*t:0}function lQ(e,t={},n,r=Xr.CAD){const o=aQ(n,r);yp(e?.keyLight,t.directional?.position,o),t.fill?.position&&yp(e?.fillLight,t.fill.position,o),t.rim?.position&&yp(e?.rimLight,t.rim.position,o),yp(e?.spotLight,t.spot?.position,o),yp(e?.pointLight,t.point?.position,o),e?.spotLight&&(e.spotLight.distance=t_(t.spot?.distance,o)),e?.pointLight&&(e.pointLight.distance=t_(t.point?.distance,o))}function Uy(e,t,n={},r,o,i=Xr.CAD){lQ(t,n,r,i),e&&o&&t?.keyLight?.shadow?.camera&&Vp(e,t,o,i)}function Hy(e,t,n,r,o=0,i=gr.STAGE,s=Xr.CAD){if(!e?.THREE||!e?.stageGroup||(Os(e.stageGroup),i!==gr.STAGE))return;const a=s,l=LW(r,a),c=ID(r,a);e.stageGroup.add(OW(e.THREE,t,n,l,o,0));const u=kW(e.THREE,n,c,l,o,a);u&&e.stageGroup.add(u);const f=DW(e.THREE,n,l,o);f&&e.stageGroup.add(f)}function jl(e,t={}){const n=e?.renderer?.domElement,r=Math.max(1,n?.clientWidth||n?.parentElement?.clientWidth||1),o=Math.max(1,n?.clientHeight||n?.parentElement?.clientHeight||1),i=ED(t),s=lo(i.left,0,Math.max(r-1,0)),a=lo(i.right,0,Math.max(r-s-1,0)),l=lo(i.top,0,Math.max(o-1,0)),c=lo(i.bottom,0,Math.max(o-l-1,0)),u=Math.max(1,r-s-a),f=Math.max(1,o-l-c),m=s+u/2,p=l+f/2;return{width:r,height:o,top:l,right:a,bottom:c,left:s,framedWidth:u,framedHeight:f,aspect:u/f,offsetNdcX:m/r*2-1,offsetNdcY:1-p/o*2}}function cQ(e,t={}){const n=e?.renderer?.domElement,r=jl(e,t),o=Math.max(1,n?.width||r.width),i=Math.max(1,n?.height||r.height),s=o/Math.max(r.width,1),a=i/Math.max(r.height,1),l=Math.round(r.left*s),c=Math.round(r.top*a),u=Math.round(r.right*s),f=Math.round(r.bottom*a);return{x:l,y:c,width:Math.max(1,o-l-u),height:Math.max(1,i-c-f)}}function Tu(e,t={},{updateProjection:n=!0}={}){const r=e?.camera;if(!r?.projectionMatrix?.elements)return;const o=jl(e,t),i=(o.right-o.left)/2,s=(o.bottom-o.top)/2;(Math.abs(i)>1e-6||Math.abs(s)>1e-6)&&typeof r.setViewOffset=="function"?r.setViewOffset(o.width,o.height,i,s,o.width,o.height):typeof r.clearViewOffset=="function"?r.clearViewOffset():n&&r.updateProjectionMatrix(),r.projectionMatrixInverse?.copy&&r.projectionMatrixInverse.copy(r.projectionMatrix).invert()}function em(e,{updateProjection:t=!1}={}){typeof e?.applyCameraFrameInsets=="function"&&e.applyCameraFrameInsets(e,e.frameInsetsRef?.current,{updateProjection:t})}function uQ(e,t,n,r=e.aspect){const o=Math.max(t*AD,ya(n).minModelRadius),i=e.fov*Math.PI/360,s=Math.atan(Math.tan(i)*Math.max(r,.001)),a=Math.max(Math.min(i,s),.001);return o/Math.sin(a)}function ND(e){return Bc(e?.projection||(e?.camera?.isOrthographicCamera?Vr.ORTHOGRAPHIC:Vr.PERSPECTIVE))}function n_(e,t,n){for(const r of[e?.perspectiveCamera,e?.orthographicCamera].filter(Boolean))r.near=t,r.far=n,r.updateProjectionMatrix?.()}function TD(e,t,n={},r=AD){const o=Math.max(e*r,ya(t).minModelRadius),i=Math.max(Number(n.aspect)||1,.001),s=Math.max(Number(n.height)||1,1),a=Math.max(Number(n.framedHeight)||s,1);return o/Math.min(i,1)*(s/a)}function rg(e,t,n=null){const r=e?.orthographicCamera;if(!r?.isOrthographicCamera)return!1;const o=n||jl(e,e?.frameInsetsRef?.current),i=Math.max(Number(t)||0,.001),s=Number(r.userData?.cadHalfHeight),a=Number(r.left),l=Number(r.right),c=Number(r.top),u=Number(r.bottom);return r.userData.cadHalfHeight=i,e.syncCameraViewport?.(r,o.width,o.height),Math.abs((Number.isFinite(s)?s:0)-i)>1e-6||Math.abs((Number.isFinite(a)?a:0)-Number(r.left))>1e-6||Math.abs((Number.isFinite(l)?l:0)-Number(r.right))>1e-6||Math.abs((Number.isFinite(c)?c:0)-Number(r.top))>1e-6||Math.abs((Number.isFinite(u)?u:0)-Number(r.bottom))>1e-6}function dQ(e,t,n,r=null){const o=r||jl(e,e?.frameInsetsRef?.current);return rg(e,TD(t,n,o),o)}function r_(e,t,n,r){const o=e?.camera,i=o?.isPerspectiveCamera?o:e?.perspectiveCamera||o,s=uQ(i,t,n,r.aspect);return o?.isOrthographicCamera?dQ(e,t,n,r):o?.updateProjectionMatrix?.(),Tu(e,e?.frameInsetsRef?.current,{updateProjection:!1}),s}function _D(e,t){const n=e?.camera,r=n?.isPerspectiveCamera?n:e?.perspectiveCamera||n;return IJ({orthographic:n?.isOrthographicCamera===!0,fov:Number(r?.fov)||48,aspect:t?.aspect,height:t?.height,framedHeight:t?.framedHeight})}function RD(e,t=null){if(!e?.camera)return;const n=t||jl(e,e.frameInsetsRef?.current);e.viewportFitScale=_D(e,n)}function fQ(e,t){if(!e||!Number.isFinite(t)||t<=0)return;const n=e.camera?.isOrthographicCamera?"zoomBaseHalfHeight":"zoomBaseDistance",r=Number(e[n]);Number.isFinite(r)&&r>1e-6&&(e[n]=r*t)}function o_(e,t=null){if(!e?.camera)return!1;const n=t||jl(e,e.frameInsetsRef?.current),r=Number(e.viewportFitScale),o=_D(e,n);if(e.viewportFitScale=o,!Number.isFinite(r)||r<=1e-6||!Number.isFinite(o)||o<=1e-6)return!1;const i=o/r;if(Math.abs(i-1)<1e-6)return!1;const s=e.camera;let a=i;if(s.isOrthographicCamera){const l=px(e);if(!l)return!1;const c=Math.max(l*i,.001);a=c/l,rg(e,c,n)}else{const l=e.controls?.target,c=mx(e);if(!l||!c)return!1;const u=Number.isFinite(Number(e.controls?.minDistance))?Number(e.controls.minDistance):.01,f=Number.isFinite(Number(e.controls?.maxDistance))&&Number(e.controls.maxDistance)>0?Number(e.controls.maxDistance):Number.POSITIVE_INFINITY;if(a=lo(c*i,u,f)/c,Math.abs(a-1)<1e-6)return!1;s.position.copy(l.clone().add(s.position.clone().sub(l).multiplyScalar(a))),s.lookAt(l)}if(fQ(e,a),em(e),e.controls){const l=e.controls.autoRotate;e.controls.autoRotate=!1,e.controls.update?.(),e.controls.autoRotate=l}return e.requestRender?.(),!0}function bA(e,t,{scheduleIdle:n=!0,requestRender:r=!0}={}){if(!e?.camera||!e?.controls)return!1;const o=Bc(t),i=o===Vr.ORTHOGRAPHIC?e.orthographicCamera:e.perspectiveCamera;if(!i)return!1;const s=e.camera,a=s?.isPerspectiveCamera&&e.controls?.target?s.position.distanceTo(e.controls.target)*Math.tan(Math.max(Number(s.fov)||48,.001)*Math.PI/360)/Math.max(Number(s.zoom)||1,.001):null;s!==i&&(i.position.copy(s.position),i.up.copy(s.up),i.near=s.near,i.far=s.far,i.zoom=Number.isFinite(s.zoom)&&s.zoom>0?s.zoom:1,e.camera=i,e.controls.object=i),e.projection=o;const l=jl(e,e.frameInsetsRef?.current);if(i.isOrthographicCamera&&s!==i){const u=Number(s?.userData?.cadHalfHeight),f=Number.isFinite(a)&&a>0?a:u;Number.isFinite(f)&&f>0?rg(e,f,l):e.syncCameraViewport?.(i,l.width,l.height)}else e.syncCameraViewport?.(i,l.width,l.height);Tu(e,e.frameInsetsRef?.current,{updateProjection:!1}),RD(e,l);const c=e.controls.autoRotate;return e.controls.autoRotate=!1,e.controls.update?.(),e.controls.autoRotate=c,n&&e.scheduleIdleQuality?.(),r&&e.requestRender?.(),!0}function mQ(e){return e<=0?0:e>=1?1:-(Math.cos(Math.PI*e)-1)/2}function pQ(e,t=I0.EASE_IN_OUT_CUBIC){return t===I0.EASE_IN_OUT_SINE?mQ(e):AJ(e)}function hQ(e){return!e?.camera||!e?.controls?null:{position:[e.camera.position.x,e.camera.position.y,e.camera.position.z],target:[e.controls.target.x,e.controls.target.y,e.controls.target.z],up:[e.camera.up.x,e.camera.up.y,e.camera.up.z],zoom:e.camera.zoom,projection:ND(e)}}function r1(e,{modelKey:t="",sceneScaleMode:n=""}={}){return ZG(hQ(e),{modelKey:t,sceneScaleMode:n,coordinateSystem:Tb(n)})}function Tb(e){return hm(e)===Xr.URDF?UJ:GJ}function Bu(e,{scheduleIdle:t=!0}={}){e?.cameraTransition&&(e.cameraTransition=null,e.controls&&(e.controls.enableDamping=!0,e.controls.dampingFactor=xh),t&&e.scheduleIdleQuality?.())}function Wp(e,t,{scheduleIdle:n=!0}={}){const r=sa(t);return!e?.camera||!e?.controls||!r?!1:(Bu(e,{scheduleIdle:!1}),Bh(e.keyboardOrbitState),Object.prototype.hasOwnProperty.call(r,"projection")&&bA(e,r.projection,{scheduleIdle:!1}),e.camera.position.set(...r.position),e.controls.target.set(...r.target),e.camera.up.set(...r.up),Number.isFinite(r.zoom)&&r.zoom>0&&(e.camera.zoom=r.zoom,e.camera.updateProjectionMatrix?.(),em(e)),e.camera.lookAt(e.controls.target),e.controls.update(),n&&e.scheduleIdleQuality?.(),e.requestRender?.(),!0)}function PD(e,t,{durationMs:n=gA,easing:r=I0.EASE_IN_OUT_CUBIC,orthographicHalfHeight:o=null,resetZoomBaselineOnComplete:i=!1}={}){const s=sa(t);if(!e?.THREE||!e?.camera||!e?.controls||!s)return!1;Bu(e,{scheduleIdle:!1}),Bh(e.keyboardOrbitState),Object.prototype.hasOwnProperty.call(s,"projection")&&bA(e,s.projection,{scheduleIdle:!1});const a=new e.THREE.Vector3(...s.position),l=new e.THREE.Vector3(...s.target),c=new e.THREE.Vector3(...s.up),u=Number.isFinite(s.zoom)&&s.zoom>0?s.zoom:e.camera.zoom,f=e.camera?.isOrthographicCamera?Number(e.camera.userData?.cadHalfHeight):null,m=e.camera?.isOrthographicCamera?Number(o):null;return![a.x,a.y,a.z,l.x,l.y,l.z,c.x,c.y,c.z,u].every(Number.isFinite)||c.lengthSq()<=1e-6?!1:(e.cameraTransition={startTime:performance.now(),durationMs:n,startPosition:e.camera.position.clone(),endPosition:a,startTarget:e.controls.target.clone(),endTarget:l,startUp:e.camera.up.clone(),endUp:c.normalize(),startZoom:e.camera.zoom,endZoom:u,startOrthographicHalfHeight:f,endOrthographicHalfHeight:m,resetZoomBaselineOnComplete:i,easing:r},e.controls.enableDamping=!1,e.beginInteraction?.(),e.requestRender?.(),!0)}function gQ(e){if(!Array.isArray(e)&&!ArrayBuffer.isView(e))return null;const t=Bn(e[0]),n=Bn(e[1]),r=Bn(e[2]);return{min:[t,n,r],max:[t,n,r]}}function yQ(e,t){const n=String(t||"").trim();return!n||!e?null:e.referenceMap?.get?.(n)||e.faceReferenceMap?.get?.(n)||e.edgeReferenceMap?.get?.(n)||e.referenceByDisplaySelector?.get?.(n)||e.referenceByNormalizedSelector?.get?.(n)||null}function bQ(e,t=[]){const n=[];for(const r of bl(t)){const o=yQ(e,r),i=o?.pickData?.bbox||o?.bbox||null,s=kh([i])||gQ(o?.pickData?.center||o?.center);s&&n.push(s)}return kh(n)}function xQ(e,t=[]){const n=new Map;if(!e?.Vector3)return n;for(const r of Array.isArray(t)?t:[]){const o=nQ(e,r);o?.isVector3&&o.lengthSq()>1e-12&&n.set(r,o)}return n}function SQ(e){const t=e?.controls,n=e?.camera;if(!t?.target||!n||!e?.THREE)return!1;const r=new e.THREE.Vector3().copy(n.position).sub(t.target);return t.target.set(0,0,0),n.position.copy(r),n.lookAt(t.target),t.update?.(),!0}function o1(e,t=null){return!e?.THREE?.Matrix4||!Array.isArray(e.displayRecords)||!e.displayRecords.length?e?.modelBounds||t:EO(e.THREE,e.displayRecords,e.modelBounds||t)}function EQ(e,t=[]){const n=bl(t);return!n.length||!Array.isArray(e?.displayRecords)?null:zW(e.displayRecords,{partIds:new Set(n),translationByRecord:xQ(e?.THREE,e.displayRecords)})}function Wy(e,t,n,{animate:r=!0,modelOffset:o=null,resetZoomBaseline:i=!1}={}){if(!e?.THREE||!e?.camera||!e?.controls)return!1;const s=kh([t]);if(!s)return!1;const a=jl(e,e.frameInsetsRef?.current),l=$W(e.THREE,{camera:e.camera,controls:e.controls,bounds:s,modelOffset:o,frameAspect:a.aspect,minRadius:ya(n).minModelRadius,padding:Ju,defaultDirection:fx,viewUp:e.camera.up?.toArray?.()||ja});if(!l)return!1;i&&(e.zoomFitModelRadius=iw(e.THREE,s,n));const c={position:l.position.toArray(),target:l.target.toArray(),up:l.up.toArray(),zoom:1,projection:ND(e)},u=e.camera.isOrthographicCamera?TD(l.radius,n,a,Ju):null;if(r)return PD(e,c,{durationMs:gA,easing:I0.EASE_IN_OUT_CUBIC,orthographicHalfHeight:u,resetZoomBaselineOnComplete:i});e.camera.isOrthographicCamera&&u&&rg(e,u,a);const f=Wp(e,c);return f&&(i&&Qf(e),e.onZoomChange?.(e)),f}function wQ(e,t){const n=e?.cameraTransition;if(!n||!e?.THREE||!e?.camera||!e?.controls)return!1;const r=Math.max(n.durationMs,1),o=lo((t-n.startTime)/r,0,1),i=pQ(o,n.easing),s=new e.THREE.Vector3().lerpVectors(n.startPosition,n.endPosition,i),a=new e.THREE.Vector3().lerpVectors(n.startTarget,n.endTarget,i),l=new e.THREE.Vector3().lerpVectors(n.startUp,n.endUp,i);e.camera.position.copy(s),e.controls.target.copy(a),l.lengthSq()>1e-6&&e.camera.up.copy(l.normalize());const c=Number(n.startOrthographicHalfHeight),u=Number(n.endOrthographicHalfHeight);let f=!1;if(e.camera?.isOrthographicCamera&&Number.isFinite(c)&&Number.isFinite(u)&&u>0){const m=c+(u-c)*i;rg(e,m),em(e),f=!0}return Number.isFinite(n.startZoom)&&Number.isFinite(n.endZoom)&&(e.camera.zoom=n.startZoom+(n.endZoom-n.startZoom)*i,e.camera.updateProjectionMatrix?.(),f||em(e)),e.camera.lookAt(a),o>=1?(n.resetZoomBaselineOnComplete&&Qf(e),e.onZoomChange?.(e),e.cameraTransition=null,e.controls.enableDamping=!0,e.controls.dampingFactor=xh,e.scheduleIdleQuality?.(),!1):!0}function i_(e,t){if(!e?.THREE||!e?.camera||!e?.controls||!t||!Array.isArray(t.direction)||t.direction.length!==3||!Array.isArray(t.up)||t.up.length!==3)return!1;const n=e.controls.target.clone(),r=new e.THREE.Vector3().copy(e.camera.position).sub(n),o=Math.max(e.controls.minDistance||1,1),i=r.length(),s=lo(Number.isFinite(i)&&i>1e-6?i:o,e.controls.minDistance||.01,e.controls.maxDistance||1/0),a=new e.THREE.Vector3(...t.direction);if(a.lengthSq()<1e-6)return!1;const l=new e.THREE.Vector3(...t.up);if(l.lengthSq()<1e-6)return!1;a.normalize(),l.normalize();const c=new e.THREE.Vector3(...ja).normalize();if(Math.abs(a.dot(c))>=yJ){let u=l.clone().addScaledVector(c,-l.dot(c));u.lengthSq()<1e-6&&(u=new e.THREE.Vector3(0,1,0).addScaledVector(c,-c.y)),u.lengthSq()<1e-6&&(u=new e.THREE.Vector3(1,0,0)),u.normalize();const f=a.dot(c)>=0?1:-1;a.addScaledVector(u,-f*bJ).normalize(),l.copy(c)}return e.cameraTransition={startTime:performance.now(),durationMs:gA,startPosition:e.camera.position.clone(),endPosition:n.clone().add(a.multiplyScalar(s)),startTarget:n.clone(),endTarget:n.clone(),startUp:e.camera.up.clone(),endUp:l},e.controls.enableDamping=!1,e.beginInteraction?.(),e.requestRender?.(),!0}function Vh(e){if(!e)return;for(;e.children?.length;)Vh(e.children[0]);typeof e.userData?.beforeDispose=="function"&&(e.userData.beforeDispose(e),delete e.userData.beforeDispose),e.parent?.remove(e),e.geometry?.userData?.cadSceneCachedGeometry!==!0&&e.geometry?.dispose?.();const t=Array.isArray(e.material)?e.material:[e.material];for(const n of t)n?.map?.dispose?.(),n?.alphaMap?.dispose?.(),n?.dispose?.()}function Os(e){for(;e.children.length;)Vh(e.children[0])}function sw(e=null,t=null){const n=Number.isFinite(Number(t?.edgeThickness))?Number(t.edgeThickness):tr.edgeThickness;return Number.isFinite(Number(e?.thickness))?lo(Number(e.thickness),.5,6):n}function i1(e=null,t=null){return Number.isFinite(Number(e?.highlightThickness))?lo(Number(e.highlightThickness),.5,6):Math.max(sw(e,t)*t8,2)}function s1(e=null){return Number.isFinite(Number(e?.highlightOpacity))?lo(Number(e.highlightOpacity),0,1):1}function a1(e=null){return String(e?.highlightColor||h0).trim()||h0}function l1(e,t){if(!e||!t||!Number.isFinite(Number(e.clientX))||!Number.isFinite(Number(e.clientY)))return!1;const n=t.getBoundingClientRect();return e.clientX>=n.left&&e.clientX<=n.right&&e.clientY>=n.top&&e.clientY<=n.bottom}function OD(e,t){if(!t)return;for(;t.children?.length;){const r=t.children[0];t.remove(r),OD(e,r)}typeof t.userData?.beforeDispose=="function"&&(t.userData.beforeDispose(t),delete t.userData.beforeDispose);const n=Array.isArray(t.material)?t.material:[t.material];if(t.userData?.disposeGeometry!==!1&&t.geometry?.dispose?.(),t.userData?.disposeMaterial!==!1)for(const r of n)r?.dispose?.()}function Co(e,t){for(t===e?.urdfPosePickerGuideGroup&&(e.urdfPosePickerHoverCellMesh=null,e.urdfPosePickerHoverCellOutline=null);t?.children?.length;){const n=t.children[t.children.length-1];n&&(t.remove(n),OD(e,n))}t&&(t.visible=!1)}function vQ(e){return String(Jh(e)?.token||"").trim()}function Kp(e){if(!Array.isArray(e)||e.length<3)return null;const t=e.slice(0,3).map(n=>Number(n));return t.every(n=>Number.isFinite(n))?t:null}function s_(e){if(!e||typeof e!="object")return null;const t=Kp(e.position);if(!t)return null;const n=e.axes&&typeof e.axes=="object"?e.axes:{};return{position:t,axes:{x:Kp(n.x),y:Kp(n.y),z:Kp(n.z)}}}function AQ(e){return[...new Set((Array.isArray(e)?e:[e]).map(t=>String(t||"").trim()).filter(Boolean))]}function CQ(e,t,n){const r=new Set(AQ(t)),o=String(n||"").trim();if(!r.size&&!o)return[];const i=[],s=new Set;for(const a of Array.isArray(e)?e:[]){const l=String(a?.id||"").trim();if(!l||s.has(l))continue;const c=r.has(l),u=o===l;if(!c&&!u)continue;const f=s_(a.fixedEndpoint),m=s_(a.movingEndpoint);!f&&!m||(s.add(l),i.push({id:l,fixed:f,moving:m,selected:c,hovered:u}))}return i}function MQ(e,t,{color:n,opacity:r,radius:o,renderOrder:i}){const s=new e.SphereGeometry(o,18,10),a=new e.MeshBasicMaterial({color:n,transparent:r<.999,opacity:r,depthTest:!1,depthWrite:!1,toneMapped:!1}),l=new e.Mesh(s,a);return l.position.set(t[0],t[1],t[2]),l.renderOrder=i,l}function a_(e,t,n,r){const o=Kp(n);if(!o)return;const i=Math.hypot(o[0],o[1],o[2]);if(i<=1e-8)return;const s=o.map(a=>a/i);e.push(t[0]-s[0]*r,t[1]-s[1]*r,t[2]-s[2]*r,t[0]+s[0]*r,t[1]+s[1]*r,t[2]+s[2]*r)}function IQ(e,t,n,{color:r,opacity:o,markerRadius:i,axisLength:s,lineWidth:a,renderOrder:l}){const c=n.fixed?.position||null,u=n.moving?.position||null,f=c||u;if(!f)return;const m=[];c&&u&&Math.hypot(c[0]-u[0],c[1]-u[1],c[2]-u[2])>Math.max(i*.25,.01)&&m.push(...c,...u);const p=n.fixed?.axes||n.moving?.axes||{};if(a_(m,f,p.z||[0,0,1],s),a_(m,f,p.x||[1,0,0],s*.62),m.length){const b=$u(e,m,{color:r,opacity:o,lineWidth:a,renderOrder:l,depthTest:!1,depthWrite:!1});b&&t.add(b)}t.add(MQ(e.THREE,f,{color:r,opacity:o,radius:i,renderOrder:l+1}))}function NQ(e,t,n,r=0,o=Xr.CAD,i=gr.STAGE,s={}){return XW(e,t,n,r,{disposeSceneObject:Vh,floorSettings:s}),qW(e,t,n,r,o,i,{disposeSceneObject:Vh,floorSettings:s})}const TQ=h.forwardRef(function({meshData:t,modelKey:n,renderFormat:r="",implicitModel:o=null,implicitGraphicsSettings:i=null,implicitDynamicRenderActive:s=!1,drawingThicknessScale:a=1,planMode:l=!1,bendAxisX:c=null,drawingBendLines:u=null,bendAnglesRad:f=null,drawingBends:m=null,drawingBendStyle:p="boxed",drawingBendRadiusMm:b=0,drawingKFactor:y=.5,drawingHiddenLayers:x=null,drawingOrientation:S=null,drawingMaterialColor:E=null,drawingGeometry:C=null,drawingIsDocument:A=!1,drawingThicknessMm:N=0,onCameraZoomPercentChange:w=null,perspective:_=null,perspectiveRef:I=null,projection:R=Vr.PERSPECTIVE,showEdges:O,recomputeNormals:F,theme:V=tr,themeSettings:$=null,floorModeOverride:K="",previewMode:U=!1,showViewPlane:Y=!0,viewPlaneOffsetRight:D=16,viewPlaneOffsetBottom:j=16,viewPlaneHeader:ee=null,compactViewPlane:X=!1,viewportFrameInsets:ve=null,isLoading:q=!1,pickMode:re=Kr.AUTO,panToolActive:Be=!1,renderPartsIndividually:Me=!1,scale:He="",sceneScaleMode:de=Xr.CAD,pickableParts:me=[],hiddenPartIds:we=[],selectedPartIds:ce=[],hoveredPartId:Ee="",assemblyMates:Jt=[],selectedMateIds:mt=[],hoveredMateId:je="",hoveredReferenceId:ye="",selectedReferenceIds:Ie=[],selectorRuntime:Je=null,displayEdgeRuntime:et=null,stepParameters:Xt=null,pickableFaces:st=[],pickableEdges:xt=[],pickableVertices:Xe=[],surfaceLineFaceId:sn="",focusedPartId:mn="",displaySettings:ke=null,drawingEnabled:St=!1,drawingTool:Rr=an.FREEHAND,drawingStrokes:yr=[],onDrawingStrokesChange:Qt,onPerspectiveChange:uo,onHoverReferenceChange:Kn,onActivateReference:Qo,onDoubleActivateReference:_e,onContextReference:Ot,onMeasurePick:Nn,onMeasureHoverPoint:vn,activeMeasurementId:cn="",measureState:br=null,measureModeActive:Et=!1,allowMeshVertexSnap:Zr=!1,onViewerAlertChange:en,onStepModuleTransformDetectedChange:Pr,urdfPosePicker:te=null},We){const Re=Xt,wt=!!Re?.animationState?.playing,dt=Dh(r)===Us.IMPLICIT,pt=dt?o:t,at=!!pt,Ae=hm(He||de),jt=Bc(R),lt=t?.geometrySource&&typeof t.geometrySource=="object"?t.geometrySource:t,nr=mH(Ae),rt=h.useMemo(()=>ED(ve),[ve?.top,ve?.right,ve?.bottom,ve?.left]),Tn=h.useRef(null),Ut=h.useRef(null),xr=h.useRef(null),_n=h.useRef(null),qn=h.useRef(null),fo=h.useRef(null),Vn=h.useRef(Array.isArray(yr)?yr:[]),Ze=h.useRef(Qt),kn=h.useRef(uo),Sr=h.useRef(en),Er=h.useRef(Pr),ie=h.useRef(te),Mt=h.useRef(!1),un=h.useRef(null),Ke=h.useRef(null),zt=h.useRef(jt),Yn=h.useRef(0),kt=h.useRef(0),ae=h.useRef(null),cr=h.useRef({rafId:0,progress:0,modelKey:"",enabled:!1,layout:null}),bn=h.useRef(rt),Jr=h.useRef(""),rr=h.useRef({modelKey:"",sceneScaleMode:"",offset:null,floorZ:null}),Or=h.useRef(Va(null)),k=h.useRef(Je),oe=h.useRef(et),fe=h.useRef([]),[Fe,qe]=h.useState(null),[Ye,ht]=h.useState(null),[Dn,Rt]=h.useState(!1),[Xn,It]=h.useState(""),[tt,An]=h.useState(0),[xn,Di]=h.useState(0),[Bo,ui]=h.useState(""),[gs,di]=h.useState(EJ),[or,Z]=h.useState(100),[pe,ft]=h.useState(null),[ur,Cn]=h.useState(!1),[Qr,Vo]=h.useState(0),[ys,Sa]=h.useState(0),_o=h.useRef(""),$o=h.useRef(!1),Ro=h.useRef(U),Ei=h.useRef(_),wi=h.useRef(n),mo=h.useRef(Ae),Kt=Fe?.base===Je?Fe.runtime:Je,Go=Ye?.base===et?Ye.runtime:et,ct=V||tr,vi=h.useMemo(()=>kJ({themeSettings:$,displaySettings:ke}),[$,ke]),ze=vi.themeSettings,qa=vi.displaySettings,Ce=vi.displayMode,Uo=qa.exploded,Ya=lo(Bn(Uo.amount,1),0,1),dd=h.useMemo(()=>MD(t).length,[t]),Ur=Uo.enabled&&dd>1,Po=Me||Ur,Oo=vu(r,"topology"),Sn=h.useMemo(()=>c4(qa),[qa]),pn=Fl(Ce),Ho=Q0(Ce),ei=ex(Ce),wr=h.useMemo(()=>AW({edgeColor:Sn?.color,themeSettings:ze,viewerTheme:ct}),[Sn,ze,ct]),Xa=h.useMemo(()=>{const v=Number.isFinite(Number(Sn?.opacity))?lo(Number(Sn.opacity),0,1):ct?.edgeOpacity??tr.edgeOpacity??qJ;return Math.max(v,.9)},[Sn,ct]),dr=h.useMemo(()=>{const v={...Sn,enabled:Ho?!0:Sn.enabled,depthTest:ei?!1:Sn.depthTest};return pn?{...v,color:wr,opacity:Xa}:v},[Sn,Ho,ei,wr,Xa,pn]),Mn=h.useMemo(()=>bl(mn),[mn]),Li=h.useMemo(()=>new Set(Mn),[Mn]),xo=h.useMemo(()=>new Set(bl(we)),[we]),qi=h.useMemo(()=>{const v=bl(we);if(!v.length)return dr;const z=[...new Set([...bl(dr?.excludePartIds),...v])];return{...dr,excludePartIds:z}},[we,dr]),zl=vi.clipSettings,hg=ze.floor||{},Am=hg.enabled===!0?gr.STAGE:gr.NONE,po=K?CW(K,Am):Am,eo=hg.followModel!==!1,Fi=h.useCallback((v,z,G,ne=0,se=Xr.CAD,Oe=gr.STAGE)=>NQ(v,z,G,ne,se,Oe,ze.floor),[ze.floor]),Bl=NW,Ai=O&&Oo&&d4(Ce,dr),kr=NS({edgesVisible:Ai,wireframeMode:pn,cadEdgeSource:Oo,displayEdgeRuntime:Go,selectorRuntime:Kt,edgeSettings:dr}),Ci=Ai&&!kr&&!Oo&&rW(t),ho=Ai&&!kr&&Oo,ti=oW({edgesVisible:Ai,topologyDisplayEdgesVisible:kr,displayEdgesVisible:Ci,wireframeMode:pn}),Za=!!(pn||Ai||kr||Ci||ho||ti),Yi=re===Kr.PARTS||re===Kr.ASSEMBLY||re===Kr.AUTO&&Array.isArray(me)&&me.length>0||Array.isArray(we)&&we.length>0||Mn.length>0,Ea=h.useRef({viewerTheme:ct,edgeSettings:dr,hiddenPartIds:Yi?we:[],hoveredPartId:Yi?Ee:"",focusedPartId:Yi?Mn:[],selectedPartIds:Yi?ce:[],showEdges:ti,displayMode:Ce});h.useLayoutEffect(()=>{Ea.current={viewerTheme:ct,edgeSettings:dr,hiddenPartIds:Yi?we:[],hoveredPartId:Yi?Ee:"",focusedPartId:Yi?Mn:[],selectedPartIds:Yi?ce:[],showEdges:ti,displayMode:Ce}},[Ce,ti,Mn,we,qi,Ee,Yi,ce,ct,dr]);const Xc=String(sn||"").trim(),bs=h.useCallback(v=>{const z=String(v?.partId||"").trim();return z&&xo.has(z)||!z&&xo.has("__model__")?!1:g8(v,Li)},[Li,xo]),xs=h.useMemo(()=>(Array.isArray(st)?st:[]).filter(bs),[st,bs]),Zc=h.useMemo(()=>(Array.isArray(xt)?xt:[]).filter(bs),[xt,bs]),fd=h.useMemo(()=>(Array.isArray(Xe)?Xe:[]).filter(bs),[Xe,bs]),Ja=h.useMemo(()=>{if(Kt?.referenceMap instanceof Map){const z=new Map;for(const[G,ne]of Kt.referenceMap.entries())bs(ne)&&z.set(G,ne);return z}const v=new Map;for(const z of[...xs,...Zc,...fd]){const G=String(z?.id||"").trim();G&&v.set(G,z)}return v},[Kt,Zc,xs,fd,bs]),Jc=h.useMemo(()=>new Set(xs.map(v=>String(v?.id||"").trim()).filter(Boolean)),[xs]),Qa=(v=ae.current)=>{const z=xr.current;if(!z)return null;const G=v?.renderer?.domElement,ne=G?.width||Ut.current?.clientWidth||1,se=G?.height||Ut.current?.clientHeight||1;return(z.width!==ne||z.height!==se)&&(z.width=ne,z.height=se),z},Ss=()=>{const v=Qa();v&&uN(v,Vn.current,fo.current)};Ei.current=_,wi.current=n,mo.current=Ae,h.useLayoutEffect(()=>{bn.current=rt;const v=ae.current;v&&(o_(v)&&(to(v),Xi(v)),Tu(v,rt),v.requestRender?.())},[rt.top,rt.right,rt.bottom,rt.left,tt]),h.useEffect(()=>{const v=ae.current,z=v?.controls,G=v?.THREE?.MOUSE,ne=v?.renderer?.domElement;if(!z?.mouseButtons||!G||(z.mouseButtons.LEFT=Be?G.PAN:G.ROTATE,!ne))return;if(!Be)return ne.style.cursor="",()=>{z.mouseButtons&&(z.mouseButtons.LEFT=G.ROTATE)};ne.style.cursor="grab";const se=()=>{ne.style.cursor="grab"},Oe=()=>{ne.style.cursor="grabbing"};return ne.addEventListener("pointerdown",Oe),window.addEventListener("pointerup",se),window.addEventListener("pointercancel",se),()=>{ne.removeEventListener("pointerdown",Oe),window.removeEventListener("pointerup",se),window.removeEventListener("pointercancel",se),ne.style.cursor="",z.mouseButtons&&(z.mouseButtons.LEFT=G.ROTATE)}},[Be,tt]);const Es=v=>{Yn.current+=1;try{return v()}finally{Yn.current=Math.max(0,Yn.current-1)}},to=h.useCallback((v=ae.current)=>{if(!v?.camera){Z(G=>G===100?G:100);return}const z=Math.round(oQ(v));Z(G=>Math.abs(G-z)<.5?G:z)},[]),wa=h.useRef(w);wa.current=w,h.useEffect(()=>{wa.current?.(or)},[or]);const Xi=(v=ae.current)=>{const z=wi.current;if(!H9(v,z))return;const G=r1(v,{modelKey:z,sceneScaleMode:mo.current});if(G){if(to(v),Yn.current>0){Ke.current=G;return}xP(Ke.current,G)||(Ke.current=G,kn.current?.(G))}},Qc=(v=ae.current)=>{if($o.current){if(v?.cameraTransition){Rt(!1);return}$o.current=!1}const z=v?.THREE?!OJ(v,ZT):!1;Rt(G=>G===z?G:z)},Wo=(v=ae.current)=>{const z=RJ(v);z&&(di(G=>_J(G,z)?G:z),Qc(v))},md=h.useCallback((v=ae.current)=>{const z=dS(I?I.current:void 0,Ei.current);return mS(z,{modelKey:wi.current,sceneScaleMode:mo.current,coordinateSystem:Tb(mo.current),requireModelKey:!0,requireSceneScaleMode:!0,requireCoordinateSystem:!0})?Es(()=>Wp(v,z,{scheduleIdle:!1})):!1},[I]),Vl=h.useCallback(()=>{const v=ae.current;o_(v)&&(to(v),Xi(v))},[to]),gg=h.useCallback(v=>{const z=ae.current;e_(z,v)&&(to(z),Xi(z),Wo(z))},[to,Wo]),qs=h.useCallback(({animate:v=!0}={})=>{const z=ae.current,G=Wy(z,o1(z,t?.bounds),mo.current,{animate:v,modelOffset:rr.current.offset,resetZoomBaseline:!0});return G&&!v&&(to(z),Xi(z),Wo(z)),G?!0:(SQ(z),e_(z,100)?(to(z),Xi(z),Wo(z),!0):!1)},[t?.bounds,to,Wo]),$l=h.useRef(""),Cx=h.useCallback((v,{refined:z=!1}={})=>{const G=ae.current;if(!G?.THREE||!G?.controls||!v)return;const{THREE:ne,controls:se}=G,Oe=mo.current,Te=()=>[...G.camera.position.toArray(),...se.target.toArray()].map(Nt=>Math.round(Number(Nt)*1e3)/1e3).join(","),{radius:xe}=Vp(ne,G,v,Oe);G.zoomBaseModelRadius=iw(ne,v,Oe),G.hasVisibleModel=!0,G.activeModelKey=wi.current||"";const Se=sp(v,iQ,Oe,{followModel:eo});Uy(ne,G,ze.lighting,xe,v,Oe),Fi(G,ct,xe,Se,Oe,po),ip(G),Hy(G,ct,ze,xe,G.gridFloorZ??0,po,Oe),n_(G,Math.max(xe/1200,.01),Math.max(xe*600,2e3)),Tu(G,bn.current,{updateProjection:!1}),se.minDistance=Math.max(xe/2200,.02),se.maxDistance=Math.max(xe*140,50);const it=wi.current||"",Rn=Jr.current!==it;if(!Rn&&!(z&&$l.current===Te())){G.requestRender();return}if(Rn){const Nt=dS(I?I.current:void 0,_),Zn=mS(Nt,{modelKey:it,sceneScaleMode:Oe,coordinateSystem:Tb(Oe),requireModelKey:!0,requireSceneScaleMode:!0,requireCoordinateSystem:!0})&&Es(()=>Wp(G,Nt,{scheduleIdle:!1}));if(Jr.current=it,Zn){G.zoomFitModelRadius=xe,Qf(G),to(G),$l.current="",G.requestRender();return}}Es(()=>{Wy(G,v,Oe,{animate:!1,resetZoomBaseline:!0})}),to(G),Xi(G),Wo(G),$l.current=Te(),G.requestRender()},[eo,ze,_,I,po,to,Wo,Fi,ct]),Gl=h.useCallback(v=>{if(!v){Sr.current?.(null),It("");return}It(v),Sr.current?.({severity:"error",compact:!0,title:"Implicit CAD shader failed",message:v})},[]),eu=(v,z,G="",ne=null)=>{const se=ae.current;if(!se?.raycaster||!se?.camera||!Kt?.faceReferenceByRowIndex)return null;const Oe=String(G||Xc).trim(),Te=z.getBoundingClientRect(),xe=Te.width||1,Se=Te.height||1;se.pointer.x=(v.clientX-Te.left)/xe*2-1,se.pointer.y=-((v.clientY-Te.top)/Se)*2+1,se.raycaster.setFromCamera(se.pointer,se.camera);const it=(se.displayRecords||[]).map(vt=>vt?.mesh).filter(vt=>vt?.visible&&vt.userData?.faceIds instanceof Uint32Array),Rn=it.length?se.raycaster.intersectObjects(it,!1):[],Nt=se.facePickMesh?se.raycaster.intersectObject(se.facePickMesh,!1):[],Zn=Rn.length?Rn.map(vt=>({intersection:vt,source:"model"})):Nt.map(vt=>({intersection:vt,source:"proxy"}));for(const{intersection:vt,source:$e}of Zn){const $n=Number(vt?.faceIndex),Dr=Number.isInteger($n)?Number(vt?.object?.userData?.faceIds?.[$n]):NaN;if(!Number.isInteger(Dr))continue;const Wt=Kt.faceReferenceByRowIndex.get(Dr)||null,tn=String(Wt?.id||"").trim();if(!tn)continue;if(Oe){if(tn!==Oe)continue}else if(Jc.size&&!Jc.has(tn))continue;const W=Wt?.pickData?.surface||{};if(a7.has(String(W.type||"").trim()))return null;const qt=$e==="model"&&se.modelGroup?se.modelGroup.worldToLocal(vt.point.clone()):vt.object.worldToLocal(vt.point.clone()),gt=[qt.x,qt.y,qt.z],ko=W.type==="CYLINDRICAL_SURFACE"&&Array.isArray(ne)?ne[0]/Math.max(Number(W.radius)||1,1):null,Dt=f7(W,gt,ko);return Dt?{screenPoint:tN(v,z),surfaceLine:{referenceId:tn,selector:String(Wt?.displaySelector||"").trim(),normalizedSelector:String(Wt?.normalizedSelector||"").trim(),faceToken:vQ(Wt?.copyText),partId:String(Wt?.partId||"").trim(),surfaceType:String(W.type||"").trim(),startPoint:gt,endPoint:gt,startUv:Dt,endUv:Dt}}:null}return null},Mx=(v,z,G)=>{const ne=String(G?.referenceId||"").trim();if(!ne)return null;const se=eu(v,z,ne,G?.startUv);return se?{screenPoint:se.screenPoint,surfaceLine:{...G,endPoint:se.surfaceLine.endPoint,endUv:se.surfaceLine.endUv}}:null},Ul=(v,z)=>!v?.raycaster||!v?.modelGroup||!z?.active?null:kO(v,z),Hl=v=>{const z=ie.current,G=ae.current,ne=G?.renderer?.domElement||Ut.current;if(!z?.active||Ro.current||!G?.raycaster||!G?.camera||!ne||!l1(v,ne))return G&&(G.urdfPosePickerPointerNdc=null,my(G,z),ne?.style&&Mt.current&&(ne.style.cursor="",Mt.current=!1),G.requestRender?.()),Cn(!1),ft(Se=>Se&&null),null;const se=ne.getBoundingClientRect(),Oe=se.width||1,Te=se.height||1;G.pointer.x=(v.clientX-se.left)/Oe*2-1,G.pointer.y=-((v.clientY-se.top)/Te)*2+1,G.urdfPosePickerPointerNdc={x:G.pointer.x,y:G.pointer.y},G.raycaster.setFromCamera(G.pointer,G.camera);const xe=Ul(G,z);return my(G,z),ne.style&&(ne.style.cursor=xe?.point?"pointer":"crosshair",Mt.current=!0),Cn(!!xe?.point),ft(Se=>{if(!xe?.point)return Se&&null;const it=xe.point;return Array.isArray(Se)&&Math.hypot(Se[0]-it[0],Se[1]-it[1],Se[2]-it[2])<.001?Se:it}),G.requestRender?.(),xe},yg=v=>{const z=ie.current,G=ae.current,ne=G?.renderer?.domElement||Ut.current;if(!z?.active||!G?.raycaster||!G?.camera||!G?.modelGroup||!ne)return!1;const se=ne.getBoundingClientRect(),Oe=se.width||1,Te=se.height||1;G.pointer.x=(v.clientX-se.left)/Oe*2-1,G.pointer.y=-((v.clientY-se.top)/Te)*2+1,G.urdfPosePickerPointerNdc={x:G.pointer.x,y:G.pointer.y},G.raycaster.setFromCamera(G.pointer,G.camera);const xe=Ul(G,z);return xe?(Cn(!0),ft(xe.point),z.onPickPoint?.({point:xe.point,source:xe.source}),!0):(Cn(!1),!1)},pd=v=>{const z=ie.current,ne=ae.current?.renderer?.domElement||Ut.current;!z?.active||Ro.current||v.button!==0||!l1(v,ne)||(un.current={pointerId:v.pointerId,x:v.clientX,y:v.clientY})},bg=v=>{Hl(v)},Cm=v=>{const z=un.current;un.current=null;const G=ie.current,se=ae.current?.renderer?.domElement||Ut.current;!G?.active||Ro.current||!z||z.pointerId!==v.pointerId||!l1(v,se)||Math.hypot(v.clientX-z.x,v.clientY-z.y)>8||yg(v)},Mm=()=>{const v=ae.current;un.current=null,v&&(v.urdfPosePickerPointerNdc=null,my(v,ie.current),v.renderer?.domElement?.style&&Mt.current&&(v.renderer.domElement.style.cursor="",Mt.current=!1),v.requestRender?.()),Cn(!1)},Im=()=>{const v=ae.current;un.current=null,v&&(v.urdfPosePickerPointerNdc=null,my(v,ie.current),v.renderer?.domElement?.style&&Mt.current&&(v.renderer.domElement.style.cursor="",Mt.current=!1),v.requestRender?.()),Cn(!1),ft(z=>z&&null)},hd=v=>{const z=ae.current,G=wJ[v];if(!z||!G)return!1;_o.current=G.id,ui(G.id);const ne=i_(z,G);return ne&&($o.current=!1,Rt(!0)),ne},gd=()=>{const v=ae.current;if(!v)return!1;_o.current="",ui("");const z=i_(v,ZT);return z&&($o.current=!0,Rt(!1)),z};h.useEffect(()=>{const v=ae.current,z=v?.controls;if(!z)return;const G=z.enableRotate,ne=z.mouseButtons?{...z.mouseButtons}:null;l&&(z.enableRotate=!1,z.mouseButtons&&(z.mouseButtons={...z.mouseButtons,LEFT:z5.PAN}));const se=v.originAxis,Oe=se?se.visible:null;return se&&l&&(se.visible=!1),z.update?.(),v.requestRender?.(),()=>{const Te=ae.current?.controls;if(!Te)return;Te.enableRotate=G,ne&&(Te.mouseButtons=ne);const xe=ae.current?.originAxis;xe&&Oe!==null&&(xe.visible=Oe),Te.update?.(),ae.current?.requestRender?.()}},[l,tt]),h.useEffect(()=>{const v=ae.current,z=v?.modelGroup,G=v?.dxfDrawingLines||null,ne=()=>{if(G){G.parent?.remove(G);for(const Nt of G.children||[])Nt.geometry?.dispose?.(),Nt.material?.dispose?.();v&&(v.dxfDrawingLines=null)}};if(!z||!A||!C?.geometry){ne();return}ne();const se=new Set(Array.isArray(x)?x:[]),Oe=6252405,Te=new Map((Array.isArray(C.layers)?C.layers:[]).map(Nt=>[Nt?.name,Number(Nt?.colorAci)===7?null:Nt?.colorHex])),{layers:xe}=uG(C);if(!xe.length)return;const Se=new $M;Se.userData.dxfDrawingLines=!0;for(const Nt of xe){if(se.has(Nt.name))continue;const Zn=Nt.positions,vt=new Float32Array(Zn.length);for(let Wt=0;Wt<Zn.length;Wt+=3)vt[Wt]=Zn[Wt],vt[Wt+1]=Zn[Wt+2],vt[Wt+2]=-Zn[Wt+1];const $e=new sy;$e.setAttribute("position",new bc(vt,3));const $n=Te.get(Nt.name),Dr=new oS($e,new GM({color:typeof $n=="string"&&$n?new iS($n):new iS(Oe),transparent:!1}));Dr.userData.dxfDrawingLayer=Nt.name,Se.add(Dr)}z.add(Se),v&&(v.dxfDrawingLines=Se);const it=dG({layers:xe}),Rn=it?{min:[it.min[0],it.min[2],-it.max[1]],max:[it.max[0],it.max[2],-it.min[1]]}:null;Rn&&v?.THREE&&(Vp(v.THREE,v,Rn,mo.current),v.hasVisibleModel=!0,qs({animate:!1})),v?.requestRender?.()},[A,C,x,tt]),h.useEffect(()=>{const v=ae.current,z=v?.modelGroup;if(!z)return;const G={bendLines:Array.isArray(u)&&u.length?u:null,bendAxesX:Array.isArray(c)?c:[],bendAnglesRad:Array.isArray(f)?f:[],thicknessScale:a},ne=S$(G),se=G.bendLines?G.bendLines.length:G.bendAxesX.length,Oe=qt=>{const gt=Math.trunc(Number(qt));return Number.isFinite(gt)?(gt%4+4)%4:0},Te={x:Oe(S?.x),y:Oe(S?.y),z:Oe(S?.z)},xe=Te.x!==0||Te.y!==0||Te.z!==0,Se=xe?new $r().makeRotationFromEuler(new B5(Te.x*Math.PI/2,Te.y*Math.PI/2,Te.z*Math.PI/2,"XYZ")):null,it=G.bendAnglesRad.some(qt=>qt!==0),Rn=new Set(Array.isArray(x)?x:[]),Nt=Array.isArray(C?.layers)?C.layers:[],Zn=Rn.size>0&&Nt.some(qt=>Rn.has(qt.name)&&qt.kind==="cut"),vt=qt=>Array.isArray(qt)?qt.filter(gt=>!Rn.has(gt?.layer)):[],$e=C?.geometry?Rn.size?{...C,geometry:{lines:vt(C.geometry.lines),arcs:vt(C.geometry.arcs),circles:vt(C.geometry.circles),texts:vt(C.geometry.texts)}}:C:null,$n=!!$e&&(p==="curved"&&se>0&&it||Zn),Dr=!!$e;if(!$n&&ne&&!xe&&!Dr&&!E&&!ae.current?.dxfTransformTouched)return;ae.current.dxfTransformTouched=$n||!ne||xe;let Wt=0,tn=0;const W=()=>{const qt=[],gt=new Set;if(z.traverse(Pe=>{if(Pe.userData?.dxfBendGuide||Pe.userData?.dxfCurvedPreview||Pe.userData?.dxfScoreOverlay||Pe.userData?.dxfTextMarking)return;const ge=Pe.geometry;let Tt=ge?.getAttribute?.("position");if(Tt&&!gt.has(ge)){if(gt.add(ge),!ge.userData.dxfFoldOriginal){ge.userData.dxfFoldOriginal=Float32Array.from(Tt.array);const dn=new bc(Float32Array.from(Tt.array),3);ge.setAttribute("position",dn),Tt=dn}E?Pe.userData.dxfMaterialTint=new iS(E):delete Pe.userData.dxfMaterialTint,qt.push({child:Pe,geometry:ge,original:ge.userData.dxfFoldOriginal,position:Tt})}}),!qt.length){(!ne||$n||Dr)&&tn<60&&(tn+=1,Wt=requestAnimationFrame(W));return}const ko=()=>{const Pe=ae.current?.dxfCurvedPreview;Pe&&(Pe.parent?.remove(Pe),Pe.geometry?.dispose?.(),ae.current.dxfCurvedPreview=null)};let Dt=null;if(Se&&qt.length){const Pe=qt[0].original;let ge=1/0,Tt=-1/0,dn=1/0,vr=-1/0;for(let En=0;En<Pe.length;En+=3){const wo=Pe[En],nn=Pe[En+1];wo<ge&&(ge=wo),wo>Tt&&(Tt=wo),nn<dn&&(dn=nn),nn>vr&&(vr=nn)}Dt=[(ge+Tt)/2,(dn+vr)/2,0]}const Le=Se?.elements||null,So=Pe=>{if(!Le||!Dt)return Pe;const ge=Le;for(let Tt=0;Tt<Pe.length;Tt+=3){const dn=Pe[Tt]-Dt[0],vr=Pe[Tt+1]-Dt[1],En=Pe[Tt+2]-Dt[2];Pe[Tt]=ge[0]*dn+ge[4]*vr+ge[8]*En+Dt[0],Pe[Tt+1]=ge[1]*dn+ge[5]*vr+ge[9]*En+Dt[1],Pe[Tt+2]=ge[2]*dn+ge[6]*vr+ge[10]*En+Dt[2]}return Pe},Ko=Pe=>{if(!Le||!Dt)return Pe;const ge=Le,Tt=Pe[0]-Dt[0],dn=Pe[1]-Dt[1],vr=Pe[2]-Dt[2];return[ge[0]*Tt+ge[4]*dn+ge[8]*vr+Dt[0],ge[1]*Tt+ge[5]*dn+ge[9]*vr+Dt[1],ge[2]*Tt+ge[6]*dn+ge[10]*vr+Dt[2]]};let vs=null,hn=null;if($n){const Pe=Array.isArray(m)?m.map(dn=>({angleDeg:dn?.angleDeg,direction:dn?.direction==="down"?"up":"down"})):[],ge=Math.max(Number(N)||0,.05);let Tt=null;try{Tt=iG($e,ge,Pe,{guideElevationSign:-1,bendInsideRadiusMm:b,bendKFactor:y})}catch{Tt=null}if(Tt){const dn=Tt.vertices,vr=new Float32Array(dn.length);for(let nn=0;nn<dn.length;nn+=3)vr[nn]=dn[nn],vr[nn+1]=dn[nn+2],vr[nn+2]=-dn[nn+1];So(vr);let En=ae.current?.dxfCurvedPreview||null;En&&En.parent!==z&&(En=null,ae.current.dxfCurvedPreview=null),En||(En=new $b(new sy,qt[0].child.material),En.userData.dxfCurvedPreview=!0,z.add(En),ae.current.dxfCurvedPreview=En),En.material=qt[0].child.material,En.geometry.setAttribute("position",new bc(vr,3)),En.geometry.setIndex(new bc(Tt.indices,1)),En.geometry.deleteAttribute("normal"),En.geometry.computeVertexNormals(),En.geometry.computeBoundingBox?.(),En.geometry.computeBoundingSphere?.();for(const{child:nn}of qt)nn.visible&&(nn.userData.dxfHiddenForCurved=!0,nn.visible=!1);const wo=Tt.guide_line_segments;if(wo?.length){vs=new Float32Array(wo.length);for(let nn=0;nn<wo.length;nn+=3)vs[nn]=wo[nn],vs[nn+1]=wo[nn+2],vs[nn+2]=-wo[nn+1]}hn=qt[0]?.original||null}}if(!$n||!ae.current?.dxfCurvedPreview){ko();for(const{child:Pe}of qt)Pe.userData.dxfHiddenForCurved&&(Pe.visible=!0,delete Pe.userData.dxfHiddenForCurved);for(const{geometry:Pe,original:ge,position:Tt}of qt)w$(ge,Tt.array,G),So(Tt.array),Tt.needsUpdate=!0,Pe.computeVertexNormals?.(),Pe.computeBoundingBox?.(),Pe.computeBoundingSphere?.(),(!hn||ge.length>hn.length)&&(hn=ge)}let ir=ae.current?.dxfBendGuideOverlay||null;ir&&ir.parent!==z&&(ir=null,ae.current.dxfBendGuideOverlay=null);const Kl=Rn.size>0&&Nt.some(Pe=>Rn.has(Pe.name)&&Pe.kind==="bend")?new Float32Array(0):vs||(hn&&se?A$(hn,G):new Float32Array(0));if(!Kl.length)ir&&(ir.parent?.remove(ir),ir.geometry?.dispose?.(),ir.material?.dispose?.(),ae.current.dxfBendGuideOverlay=null);else{if(!ir){const{yMin:Pe,yMax:ge}=J1(hn),Tt=Math.max(ge-Pe,1);ir=new oS(new sy,new V5({color:6252405,dashSize:Tt/24,gapSize:Tt/36,transparent:!0,opacity:.9,depthWrite:!1})),ir.userData.dxfBendGuide=!0,ir.frustumCulled=!1,z.add(ir),ae.current.dxfBendGuideOverlay=ir}ir.geometry.setAttribute("position",new bc(So(Kl),3)),ir.computeLineDistances(),ir.geometry.computeBoundingSphere?.()}const Hr=Z0(G),Mi=new Map(Nt.map(Pe=>[Pe.name,Pe.colorHex])),el=(hn?J1(hn):{zMax:.5}).zMax+.3/Math.max(Hr.scale,1e-6);let tl=[];if($e)try{for(const Pe of U$($e))for(let ge=0;ge<Pe.length-1;ge+=1){const Tt=Ac(Pe[ge][0],Pe[ge][1],el,Hr),dn=Ac(Pe[ge+1][0],Pe[ge+1][1],el,Hr);tl.push(Tt[0],Tt[1],Tt[2],dn[0],dn[1],dn[2])}}catch{tl=[]}let ue=ae.current?.dxfScoreOverlay||null;ue&&ue.parent!==z&&(ue=null,ae.current.dxfScoreOverlay=null),tl.length?(ue||(ue=new oS(new sy,new GM({color:9081763,transparent:!0,opacity:.95,depthWrite:!1})),ue.userData.dxfScoreOverlay=!0,ue.frustumCulled=!1,z.add(ue),ae.current.dxfScoreOverlay=ue),ue.geometry.setAttribute("position",new bc(So(Float32Array.from(tl)),3)),ue.geometry.computeBoundingSphere?.()):ue&&(ue.parent?.remove(ue),ue.geometry?.dispose?.(),ue.material?.dispose?.(),ae.current.dxfScoreOverlay=null);let Eo=ae.current?.dxfTextGroup||null;Eo&&Eo.parent!==z&&(Eo=null,ae.current.dxfTextGroup=null);const yd=Pe=>{for(const ge of[...Pe.children])Pe.remove(ge),ge.geometry?.dispose?.(),ge.material?.map?.dispose?.(),ge.material?.dispose?.()},ri=Array.isArray($e?.geometry?.texts)?$e.geometry.texts.filter(Pe=>String(Pe?.value||"").trim()):[];if(!ri.length)Eo&&(yd(Eo),Eo.parent?.remove(Eo),ae.current.dxfTextGroup=null);else if(typeof document<"u"){Eo||(Eo=new $M,Eo.userData.dxfTextMarking=!0,z.add(Eo),ae.current.dxfTextGroup=Eo),yd(Eo);for(const Pe of ri){const ge=String(Pe.value).trim(),Tt=Math.max(Number(Pe.heightMm)||2.5,.2),dn=Pe.position,vr=(Number(Pe.rotationDeg)||0)*Math.PI/180,En=[Math.cos(vr),Math.sin(vr)],wo=[-Math.sin(vr),Math.cos(vr)],nn=64,Lr=document.createElement("canvas"),bd=Lr.getContext("2d");if(!bd)continue;const Eg=`600 ${nn}px ui-sans-serif, system-ui, sans-serif`;bd.font=Eg;const nu=ge.split(`
|
||
`)[0],wg=Math.max(bd.measureText(nu).width,nn*.5);Lr.width=Math.ceil(wg)+8,Lr.height=Math.ceil(nn*1.35);const nl=Lr.getContext("2d");nl.font=Eg,nl.fillStyle=Mi.get(Pe.layer)||"#8a93a3",nl.textBaseline="alphabetic",nl.fillText(nu,4,nn);const vg=new $5(Lr);vg.colorSpace=G5;const qo=Tt*(Lr.width/nn),ql=Tt*(Lr.height/nn),As=[dn[0]+En[0]*(qo/2)+wo[0]*(ql*.22),dn[1]+En[1]*(qo/2)+wo[1]*(ql*.22)],ji=Ko(Ac(As[0],As[1],el,Hr)),rl=.5,ol=Ko(Ac(As[0]+En[0]*rl,As[1]+En[1]*rl,el,Hr)),ut=Ko(Ac(As[0]+wo[0]*rl,As[1]+wo[1]*rl,el,Hr)),xd=new Ue(ol[0]-ji[0],ol[1]-ji[1],ol[2]-ji[2]).normalize(),Yl=new Ue(ut[0]-ji[0],ut[1]-ji[1],ut[2]-ji[2]).normalize(),Yt=new Ue().crossVectors(xd,Yl).normalize(),be=new $b(new U5(qo,ql),new H5({map:vg,transparent:!0,depthWrite:!1,side:A2}));be.userData.dxfTextMarking=!0,be.position.set(ji[0],ji[1],ji[2]),be.quaternion.setFromRotationMatrix(new $r().makeBasis(xd,Yl,Yt)),be.renderOrder=2,Eo.add(be)}}v.requestRender?.()};return W(),()=>{cancelAnimationFrame(Wt)}},[c,u,f,m,p,b,y,x,S,E,C,N,a,t,tt]),h.useImperativeHandle(We,()=>({async captureScreenshot({filename:v="cad-screenshot.png",mode:z="download"}={}){const G=ae.current;if(!G?.renderer||!G?.scene||!G?.camera)throw new Error("CAD Viewer not ready");Ss();const ne=S7(G,xr.current,{backgroundColor:z==="clipboard"?b7(G.renderer.domElement):"",crop:cQ(G,bn.current)});if(z==="clipboard")return await $G(ne);const se=await ne;return qG(se,{filename:v})},activateViewPlaneFace(v){return hd(v)},applyZoomPercent(v){return gg(v)},resetView(){qs({animate:!1}),gd()},activateDefaultViewPlane(){return gd()},getPerspective(){return r1(ae.current,{modelKey:n,sceneScaleMode:Ae})},setPerspective(v,z={}){return z?.animate?PD(ae.current,v,z):Wp(ae.current,v)},resetZoom(){return qs({animate:!0})},zoomToFit({animate:v=!0}={}){const z=ae.current,G=Wy(z,o1(z,t?.bounds),mo.current,{animate:v,modelOffset:rr.current.offset,resetZoomBaseline:!0});return G&&!v&&(Xi(z),Wo(z)),G},zoomToFitSelection({partIds:v=[],referenceIds:z=[],fallbackToModel:G=!1,animate:ne=!0}={}){const se=ae.current,Oe=kh([bQ(Kt,z),EQ(se,v)])||(G?o1(se,t?.bounds):null),Te=Wy(se,Oe,mo.current,{animate:ne,modelOffset:rr.current.offset,resetZoomBaseline:!1});return Te&&!ne&&(Xi(se),Wo(se)),Te},focusViewPreset(v){return hd(v)}}),[Kt,t?.bounds,n,Ae,qs,to,Wo]),h.useEffect(()=>{Ro.current=U},[U]),h.useEffect(()=>{Ze.current=Qt},[Qt]),h.useEffect(()=>{kn.current=uo},[uo]),h.useEffect(()=>{const v=ae.current;if(v)return v.onZoomChange=to,to(v),()=>{v.onZoomChange===to&&(v.onZoomChange=null)}},[to,tt]),h.useEffect(()=>{Sr.current=en},[en]),h.useEffect(()=>{Er.current=Pr},[Pr]),h.useEffect(()=>{ie.current=te},[te]),h.useEffect(()=>{qe(null)},[n,Je]),h.useEffect(()=>{ht(null)},[n,et]),h.useEffect(()=>{k.current=Kt},[Kt]),h.useEffect(()=>{oe.current=Go},[Go]),h.useEffect(()=>{Or.current=zl;const v=ae.current;v?.THREE&&(Su(v,zl),v.requestRender?.())},[tt,t?.bounds,zl.axis,zl.enabled,zl.invert,zl.offset]),h.useEffect(()=>{if(te?.active)return;const v=ae.current;v&&(v.urdfPosePickerPointerNdc=null,v.renderer?.domElement?.style&&Mt.current&&(v.renderer.domElement.style.cursor="",Mt.current=!1)),Cn(!1),ft(null)},[te?.active]),h.useEffect(()=>{Vn.current=Array.isArray(yr)?yr:[],kt.current=Math.max(kt.current,j6(Vn.current)),Ss()},[yr]);const xg=h.useCallback(()=>{Jr.current="",Ke.current=null,$o.current=!1,Sr.current?.(null),Rt(!1),Di(v=>v+1)},[]),Nm=h.useCallback(v=>{Sr.current?.(A7(v))},[]);pJ({mountRef:Ut,runtimeRef:ae,previewModeRef:Ro,setError:It,setViewerReadyTick:An,viewerTheme:ct,syncDrawingCanvasSize:Qa,renderDrawingOverlay:Ss,emitPerspectiveChange:Xi,setActiveViewPlaneFace:ui,activeViewPlaneFaceRef:_o,stepCameraTransition:wQ,stepKeyboardOrbit:TJ,getActiveViewPlaneFaceId:PJ,cancelCameraTransition:Bu,clearKeyboardOrbitState:Bh,isTrackpadLikeWheelEvent:MJ,isPinchWheelEvent:SD,WHEEL_PINCH_DELTA_BOOST:CJ,getKeyboardOrbitCommand:NJ,getKeyboardOrbitAxes:wD,applyOrbitDelta:vD,getViewerThemeValue:DO,getPixelRatioCap:sQ,applySceneBackground:Bl,applyCameraFrameInsets:Tu,frameInsetsRef:bn,onViewportResize:Vl,applyInitialPerspective:md,updateGridHelper:Fi,clearSceneGroup:Os,disposeSceneObject:Vh,disposeTexture:ih,syncViewPlaneOrientation:Wo,BASE_VIEWER_THEME:tr,DEFAULT_LIGHTING:YJ,DEFAULT_DAMPING_FACTOR:xh,DEFAULT_ZOOM_SPEED:JT,COARSE_POINTER_ZOOM_SPEED:jJ,INTERACTION_PIXEL_RATIO_CAP:LJ,IDLE_PIXEL_RATIO_CAP:DJ,INTERACTION_IDLE_DELAY_MS:FJ,TRACKPAD_PINCH_ZOOM_SPEED:VJ,COARSE_POINTER_PINCH_ZOOM_SPEED:$J,ACCELERATED_WHEEL_ZOOM_SPEED:BJ,KEYBOARD_ORBIT_NUDGE_RAD:hJ,defaultGridRadius:nr,sceneScaleMode:Ae,floorMode:po,onInitializationError:Nm,onContextRestored:xg,preserveInteractionPixelRatio:Za,runtimeResetToken:xn}),WX({runtimeRef:ae,viewerReadyTick:tt,enabled:dt,model:o,themeSettings:ze,graphicsSettings:i,dynamicRenderActive:s,previewMode:U,onModelBounds:Cx,onShaderError:Gl}),h.useEffect(()=>{const v=ae.current;v&&(v.sceneScaleMode=Ae)},[Ae]),h.useEffect(()=>{const v=ae.current;if(!v)return;const z=zt.current;zt.current=jt,bA(v,jt,z!==jt?{scheduleIdle:!1,requestRender:!1}:void 0)&&(Xi(v),Wo(v))},[jt,tt]),h.useEffect(()=>{const v=ae.current;if(!v)return;Bl(v,ct,ze.background),v.renderer.toneMappingExposure=Math.max(ze.lighting.toneMappingExposure,.05),v.hemisphereLight.visible=ze.lighting.hemisphere.enabled,v.hemisphereLight.color.set(ze.lighting.hemisphere.skyColor),v.hemisphereLight.groundColor.set(ze.lighting.hemisphere.groundColor),v.hemisphereLight.intensity=ze.lighting.hemisphere.intensity,v.ambientLight.visible=ze.lighting.ambient.enabled,v.ambientLight.color.set(ze.lighting.ambient.color),v.ambientLight.intensity=ze.lighting.ambient.intensity,v.keyLight.visible=ze.lighting.directional.enabled,v.keyLight.color.set(ze.lighting.directional.color),v.keyLight.intensity=ze.lighting.directional.intensity;const z=ze.lighting.fill;v.fillLight.visible=z.enabled&&z.intensity>1e-4,v.fillLight.color.set(z.color),v.fillLight.intensity=Math.max(z.intensity,0);const G=ze.lighting.rim;v.rimLight.visible=G.enabled&&G.intensity>1e-4,v.rimLight.color.set(G.color),v.rimLight.intensity=Math.max(G.intensity,0),v.spotLight.visible=ze.lighting.spot.enabled,v.spotLight.color.set(ze.lighting.spot.color),v.spotLight.intensity=ze.lighting.spot.intensity,v.spotLight.angle=ze.lighting.spot.angle,v.pointLight.visible=ze.lighting.point.enabled,v.pointLight.color.set(ze.lighting.point.color),v.pointLight.intensity=ze.lighting.point.intensity,Uy(v.THREE,v,ze.lighting,v.modelRadius??v.gridRadius??nr,v.modelBounds,Ae),ip(v),v.keyLight.castShadow=v.keyLight.visible&&v.softwareRendering!==!0,v.spotLight.castShadow=!1;const ne={...ze.materials,envMapIntensity:ze.materials.envMapIntensity*(ze.environment.enabled?ze.environment.intensity:0)};for(const Te of v.displayRecords||[])QW(v.THREE,Te,ne,{displayMode:Ce});v.gridConfig=null;const se=eo?v.modelFloorZBelowModel:v.modelFloorZBase,Oe=Number.isFinite(se)?se:v.gridFloorZ??0;Fi(v,ct,v.gridRadius??nr,Oe,Ae,po),ip(v),v.hasVisibleModel?Hy(v,ct,ze,v.gridRadius??nr,Oe,po,Ae):Os(v.stageGroup),v.requestRender()},[nr,Ce,ze,Ae,po,eo,tt,ct,Fi]),h.useEffect(()=>{const v=ae.current;if(!v?.THREE||!v?.scene)return;let z=!1;const G=ze.environment,ne=()=>{v.scene.environment=null,ih(v.environmentTexture),v.environmentTexture=null,v.environmentTextureUrl=""},se=()=>{ne(),Bl(v,ct,ze.background),v.requestRender()};return(async()=>{if(!G.enabled){Sr.current?.(null),se();return}const Te=NI(G.presetId),xe=String(Te?.url||"").trim();if(!xe){Sr.current?.(null),se();return}if(!v.environmentTexture||v.environmentTextureUrl!==xe){const Se=new v.THREE.TextureLoader;typeof Se.setCrossOrigin=="function"&&Se.setCrossOrigin("anonymous");const it=await Se.loadAsync(xe);if(z){it.dispose?.();return}it.mapping=v.THREE.EquirectangularReflectionMapping,it.colorSpace=v.THREE.SRGBColorSpace,it.needsUpdate=!0,ih(v.environmentTexture),v.environmentTexture=it,v.environmentTextureUrl=xe}v.scene.environment=v.environmentTexture,Sr.current?.(null),v.scene.environmentRotation?.set&&v.scene.environmentRotation.set(0,G.rotationY,0),G.useAsBackground?(v.scene.background=v.environmentTexture,v.scene.backgroundRotation?.set&&v.scene.backgroundRotation.set(0,G.rotationY,0)):Bl(v,ct,ze.background),v.requestRender()})().catch(Te=>{z||(se(),Sr.current?.({severity:"warning",summary:"Environment unavailable",title:"Environment preset could not be loaded",message:`Failed to load ${String(NI(G.presetId)?.label||"the selected environment preset")}.`,resolution:"The viewer fell back to the current background settings. Check the network connection or choose another preset."}),console.error("Failed to apply environment texture",Te))}),()=>{z=!0}},[dt,tt,ct,ze.background,ze.environment]),h.useEffect(()=>{const v=ae.current;v&&(v.interactionState.restoreTimerId&&(window.clearTimeout(v.interactionState.restoreTimerId),v.interactionState.restoreTimerId=0),Bh(v.keyboardOrbitState),v.previewOrbitEnabled=!!U,v.orbitControlsLastTimestamp=0,v.controls.autoRotate=!!U,v.controls.autoRotateSpeed=uJ,v.controls.enabled=!0,v.controls.enableDamping=!0,v.controls.dampingFactor=xh,U?(Bu(v,{scheduleIdle:!1}),v.beginInteraction?.()):v.scheduleIdleQuality(),v.requestRender())},[U,tt]);const Wl=!!(te?.active&&!U),tu=Wl?ur?"pointer":"crosshair":void 0;h.useEffect(()=>{const v=ae.current;!te?.active||!v?.controls||(v.controls.enabled=!0,v.controls.enableDamping=!0,v.controls.dampingFactor=xh,v.requestRender())},[te?.active,tt]),h.useEffect(()=>{const z=ae.current?.renderer?.domElement;if(!Wl||!z)return;const G=se=>{Hl(se)},ne=()=>{Im()};return z.addEventListener("pointermove",G,{passive:!0}),z.addEventListener("pointerleave",ne),()=>{z.removeEventListener("pointermove",G),z.removeEventListener("pointerleave",ne)}},[Wl,tt]),h.useEffect(()=>{const v=ae.current;if(!v)return;const{THREE:z,modelGroup:G,edgesGroup:ne,facePickGroup:se,edgePickGroup:Oe,vertexPickGroup:Te}=v,xe=({preserveModelIdentity:ni=!1}={})=>{Bu(v),v.cadScene?.dispose?.(),v.cadScene=null,Os(v.stageGroup),Os(G),Os(ne),Os(se),Os(Oe),Os(Te),v.facePickMesh=null,v.edgePickLines=null,v.vertexPickPoints=null,v.edgePickObjects=[],v.topologyDisplayEdgeLine=null,v.topologyDisplayEdgeTransformByRecord=!1,v.displayRecords=[],ni||(v.hasVisibleModel=!1,v.activeModelKey=""),v.requestRender()};if(dt){xe({preserveModelIdentity:!0});return}if(q){xe(),It("");return}if(!t||!t1(t.vertices,3)||!t1(t.indices,3)){xe();return}xe();const{controls:Se}=v,Rn=ze.materials.cycleColors===!0&&Array.isArray(ze.materials.fillColors)&&ze.materials.fillColors.length>1&&Array.isArray(t?.parts)&&t.parts.length>0,Nt=!pn&&ze.materials?.overrideSourceColors!==!0&&eQ(t),{renderParts:Zn,parts:vt}=C6({meshData:t,renderPartsIndividually:Po,fillRotationParts:Rn,sourceColorParts:Nt,pickableParts:me,pickMode:re}),$e={...ze.materials,envMapIntensity:ze.materials.envMapIntensity*(ze.environment.enabled?ze.environment.intensity:0)},$n=Re?.definition?{...Re,selectorRuntime:Je}:null,Dr=pn?{...ze,edges:{...dr,enabled:!0}}:Ci||ho?{...ze,edges:{...dr}}:{...ze,edges:{enabled:!1}},Wt=A6(z,t,{theme:Dr,displayMode:Ce,applyDisplayModeEdgePolicy:!kr,scale:Ae,baseTheme:ct,materialSettings:$e,recomputeNormals:F,silhouette:kr&&Sn.silhouette===!0,parts:Zn?vt:[],renderPartsIndividually:Po,stepParameters:$n,parameterSetup:!1,edgeRendering:{mode:"screen-space",Line2:v.Line2,LineGeometry:v.LineGeometry,LineSegments2:v.LineSegments2,LineSegmentsGeometry:v.LineSegmentsGeometry,LineMaterial:v.LineMaterial,wireframeEdgeColor:wr},selection:Zn?Ea.current:{...Ea.current,hiddenPartIds:[],hoveredPartId:"",focusedPartId:[],selectedPartIds:[]},clip:Or.current,callbacks:{faceIdsForPart:ni=>eA(ni,Je),faceIdsForMesh:()=>fk(t,Je),onWarning:ni=>{Sr.current?.({severity:"warning",compact:!0,title:ni?.title||"CAD scene warning",message:ni?.message||"The CAD scene renderer reported a warning."})}}});G.add(Wt.modelGroup),ne.add(Wt.edgesGroup),v.cadScene=Wt,v.displayRecords=Wt.displayRecords,Sa(ni=>ni+1),v.hasVisibleModel=!0,v.activeModelKey=n||"";const tn=IS({selectorRuntime:Je,displayEdgeRuntime:et,displayRecords:$n?v.displayRecords:[],transformDisplayEdges:!1}),W=Ur||NN({transformDetected:tn.transformCount>0,topologyDisplayEdgesVisible:kr,displayEdgeRuntime:et,displayRecords:v.displayRecords}),qt=W?null:IS({selectorRuntime:null,displayEdgeRuntime:et,displayRecords:$n?v.displayRecords:[]}).transformedDisplayEdgeRuntime,gt=tn.transformedSelectorRuntime;of(qe,gt?{base:Je,runtime:gt}:null),of(ht,qt?{base:et,runtime:qt}:null),Er.current?.(tn.transformCount>0);const ko=tn.selectorRuntime,Dt=W?et:qt||tn.topologyRuntime;v.topologyDisplayEdgeTransformByRecord=W,by(v,Dt,{visible:kr,edgeSettings:qi,focusedPartIds:Mn,viewerTheme:ct,dimmedOpacity:Lp,transformByRecord:W,displayRecords:v.displayRecords,syncClip:ni=>Su(ni,Or.current)});const Le=Wt.bounds||t.bounds;v.zoomBaseModelRadius=iw(z,t.bounds,Ae);const So=Array.isArray(Le?.min)?Le.min:[0,0,0],Ko=Array.isArray(Le?.max)?Le.max:[0,0,0],vs=new z.Vector3((Bn(So[0])+Bn(Ko[0]))/2,(Bn(So[1])+Bn(Ko[1]))/2,(Bn(So[2])+Bn(Ko[2]))/2),hn=rr.current;(hn.modelKey!==n||hn.sceneScaleMode!==Ae||!hn.offset)&&(hn.modelKey=n||"",hn.sceneScaleMode=Ae,hn.offset=new z.Vector3(-vs.x,-vs.y,-vs.z),hn.floorZ=sp(Le,hn.offset),hn.floorZBelowModel=sp(Le,hn.offset,Ae,{followModel:!0}));const ir=hn.offset,Ys=eo?hn.floorZBelowModel:hn.floorZ,Kl=Number.isFinite(Number(Ys))?Number(Ys):sp(Le,ir,Ae,{followModel:eo});v.modelFloorZBase=Number(hn.floorZ),v.modelFloorZBelowModel=Number(hn.floorZBelowModel);const{radius:Hr}=Vp(z,v,Le,Ae);Uy(z,v,ze.lighting,Hr,Le,Ae),Fi(v,ct,Hr,Kl,Ae,po),ip(v),Hy(v,ct,ze,Hr,v.gridFloorZ??0,po,Ae),G.position.copy(ir),ne.position.copy(ir),se.position.copy(ir),Oe.position.copy(ir),Te.position.copy(ir),se.updateMatrixWorld(!0),Oe.updateMatrixWorld(!0),Te.updateMatrixWorld(!0),$S(v,ko,ir,{clearSceneGroup:Os}),e7(v),Su(v,Or.current);const Mi=Ea.current;if(py(z,v.displayRecords,Zn?Mi:{...Mi,hiddenPartIds:[],hoveredPartId:"",focusedPartId:[],selectedPartIds:[]}),G.updateMatrixWorld(!0),ne.updateMatrixWorld(!0),n_(v,Math.max(Hr/1200,.01),Math.max(Hr*600,2e3)),Tu(v,bn.current,{updateProjection:!1}),Se.minDistance=Math.max(Hr/2200,.02),Se.maxDistance=Math.max(Hr*140,50),Se.zoomSpeed=JT,v.edgePickThreshold=Math.max(Hr/320,.65),Jr.current!==(n||"")){const ni=dS(I?I.current:void 0,_),el=mS(ni,{modelKey:n,sceneScaleMode:Ae,coordinateSystem:Tb(Ae),requireModelKey:!0,requireSceneScaleMode:!0,requireCoordinateSystem:!0});Es(()=>{if(!el||!Wp(v,ni,{scheduleIdle:!1})){Bu(v);const tl=jl(v,bn.current),ue=v.camera,Eo=r_(v,Hr,Ae,tl),yd=new z.Vector3(...fx).normalize();ue.zoom=1,ue.up.set(...ja),r_(v,Hr,Ae,tl),Tu(v,bn.current,{updateProjection:!1}),ue.position.copy(yd.multiplyScalar(Eo)),Se.target.set(0,0,0),ue.lookAt(Se.target),Se.update(),v.requestRender()}}),v.zoomFitModelRadius=Hr,Qf(v),to(v),Jr.current=n||"",Ke.current=r1(v,{modelKey:n,sceneScaleMode:Ae})}It(""),v.requestRender()},[lt,n,_,I,Ci,ho,kr,F,dt,q,tt,re,Po,Ur,me,Je,et,Ce,Ae,po,eo,ct,ze.lighting,ze.materials,ze.environment,Sn,qi,dr,to,wr,Fi]),h.useEffect(()=>{const v=ae.current;if(!v?.THREE||q||!Po||!Array.isArray(t?.parts)||!Array.isArray(v.displayRecords)||!v.displayRecords.length)return;const z=new Map(t.parts.map(Te=>[String(Te?.id||""),Te]).filter(([Te])=>Te));let G=!1;for(const Te of v.displayRecords){const xe=z.get(String(Te?.partId||""));xe&&(Te.baseTransform=tO(t,xe,Po),Te.partBounds=xe.bounds,Te.partCenter=xO(v.THREE,xe.bounds),Sl(v.THREE,Te,v.modelRadius||1),G=!0)}if(!G)return;const{radius:ne}=Vp(v.THREE,v,t.bounds,Ae);Uy(v.THREE,v,ze.lighting,ne,t.bounds,Ae);const se=eo?rr.current.floorZBelowModel:rr.current.floorZ,Oe=Number.isFinite(Number(se))?Number(se):sp(t.bounds,v.modelGroup?.position,Ae,{followModel:eo});Fi(v,ct,ne,Oe,Ae,po),ip(v),Hy(v,ct,ze,ne,v.gridFloorZ??0,po,Ae),v.requestRender()},[t?.parts,t?.bounds,q,Po,Ae,ze,po,eo,ct,tt,Fi]),h.useEffect(()=>{const v=ae.current;v&&(py(v.THREE,v.displayRecords,Ea.current),v.requestRender())},[tt,Yi,ti,Mn,we,Ee,re,me,ce,ct,dr,Ce]),h.useEffect(()=>{const v=ae.current,z=Re?.definition||null,G=z?.module||null,ne=[];fe.current=ne;const se=()=>{for(;ne.length;){const xe=ne.pop();try{xe?.()}catch(Se){console.error("STEP parameter cleanup failed",Se)}}};if(!v?.THREE||!z||q||!t)return se;const Oe=s0(z,{meshData:t,selectorRuntime:k.current}),Te=Ph({runtime:v,stepModuleRuntime:Re,features:Oe,effects:l0(v.THREE,{meshData:t,features:Oe,runtime:v,effectsByPartId:new Map}),cleanup:xe=>{typeof xe=="function"&&ne.push(xe)}});try{G?.setup?.(Te)}catch(xe){Sr.current?.({severity:"warning",compact:!0,title:"STEP parameter setup failed",message:xe instanceof Error?xe.message:String(xe)}),console.error("STEP parameter setup failed",xe)}return()=>{se();try{G?.dispose?.(Te)}catch(xe){console.error("STEP parameter dispose failed",xe)}}},[tt,q,t,n,Je,Re?.definition,Re?.sourceUrl]),h.useEffect(()=>{const v=ae.current;if(!v?.THREE||!Array.isArray(v.displayRecords)||!v.displayRecords.length)return;const z=Re?.definition||null,G=z?.module||null;if(!z||q||!t){Er.current?.(!1),of(qe,null),of(ht,null),v.topologyDisplayEdgeTransformByRecord=Ur,nO(v.displayRecords);for(const $n of v.displayRecords)Sl(v.THREE,$n,v.modelRadius||1);py(v.THREE,v.displayRecords,Ea.current);const $e=NS({edgesVisible:Ai,wireframeMode:pn,cadEdgeSource:Oo,displayEdgeRuntime:et,selectorRuntime:Je,edgeSettings:dr});by(v,et||Je,{visible:$e,edgeSettings:qi,focusedPartIds:Mn,viewerTheme:ct,dimmedOpacity:Lp,transformByRecord:Ur,displayRecords:v.displayRecords,syncClip:$n=>Su($n,Or.current)}),v.requestRender?.();return}let ne=!1;const se=s0(z,{meshData:t,selectorRuntime:k.current}),Oe=new Map,Te=l0(v.THREE,{meshData:t,features:se,runtime:v,effectsByPartId:Oe,onTransformEffect:()=>{ne=!0}}),xe=Ph({runtime:v,stepModuleRuntime:Re,features:se,effects:Te,cleanup:$e=>{typeof $e=="function"&&fe.current.push($e)}});try{G?.update?.(xe),G?.render?.(xe)}catch($e){Sr.current?.({severity:"warning",compact:!0,title:"STEP parameter update failed",message:$e instanceof Error?$e.message:String($e)}),console.error("STEP parameter update failed",$e)}rO(v.THREE,v.displayRecords,Oe);const Se=Ur||NN({transformDetected:ne,topologyDisplayEdgesVisible:kr,displayEdgeRuntime:et,displayRecords:v.displayRecords}),it=IS({selectorRuntime:Je,displayEdgeRuntime:et,displayRecords:ne?v.displayRecords:[],transformDisplayEdges:!Se}),Rn=NS({edgesVisible:Ai,wireframeMode:pn,cadEdgeSource:Oo,displayEdgeRuntime:Se?et:it.displayEdgeRuntime,selectorRuntime:it.selectorRuntime,edgeSettings:dr});Er.current?.(it.transformCount>0);const Nt=it.transformedSelectorRuntime,Zn=Se?null:it.transformedDisplayEdgeRuntime;of(qe,Nt?{base:Je,runtime:Nt}:null),of(ht,Zn?{base:et,runtime:Zn}:null);for(const $e of v.displayRecords)Sl(v.THREE,$e,v.modelRadius||1);py(v.THREE,v.displayRecords,Ea.current),v.topologyDisplayEdgeTransformByRecord=Se,by(v,Se?et:it.topologyRuntime,{visible:Rn,edgeSettings:qi,focusedPartIds:Mn,viewerTheme:ct,dimmedOpacity:Lp,transformByRecord:Se,displayRecords:v.displayRecords,syncClip:$e=>Su($e,Or.current)}),v.modelGroup?.updateMatrixWorld?.(!0),v.edgesGroup?.updateMatrixWorld?.(!0);const vt=it.selectorRuntime;wt||(ZN(v,t,vt),$S(v,vt,rr.current.offset,{clearSceneGroup:Os})),v.requestRender?.()},[dr,Ai,pn,Oo,Mn,ti,tt,ct,we,qi,Ee,Ur,q,t,n,Yi,re,me,ce,Je,et,Re]),h.useEffect(()=>{const v=ae.current,z=cr.current;if(QT(cr),!v?.THREE||q||!Array.isArray(v.displayRecords)||!v.displayRecords.length){z.progress=0,z.modelKey="",z.enabled=!1,z.layout=null;return}const G=v.THREE,ne=n||"",se=z.modelKey!==ne,Oe=v.modelBounds||t?.bounds,Te=Ur?Ya:0,xe=z.enabled===!0;if(z.modelKey=ne,z.enabled=Ur,!Ur&&!xe){kN(v.displayRecords);for(const $e of v.displayRecords)Sl(G,$e);_E(v,v.displayRecords),Vo($e=>$e+1),v.requestRender?.(),z.progress=0,z.layout=null;return}const Se=B9(v.displayRecords,Oe);if(z.layout=Se,!Se.entries.length){kN(v.displayRecords);for(const $e of v.displayRecords)Sl(G,$e);_E(v,v.displayRecords),Vo($e=>$e+1),v.requestRender?.(),z.progress=0;return}const it=lo(Bn(z.progress,0),0,1);if(!(xe!==Ur&&!se&&Math.abs(Te-it)>1e-4)){z.progress=Te,n1(v,Se,Te),Vo($e=>$e+1);return}const Nt=zJ*(1+.35*Math.max(Se.levelCount-1,0)),Zn=typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now();n1(v,Se,it);const vt=$e=>{const $n=Number.isFinite(Number($e))?Number($e):Date.now(),Dr=lo(($n-Zn)/Nt,0,1),Wt=U9(Dr),tn=it+(Te-it)*Wt;z.progress=tn,n1(v,Se,tn),Dr<1?z.rafId=window.requestAnimationFrame(vt):(z.rafId=0,z.progress=Te,Vo(W=>W+1))};return z.rafId=window.requestAnimationFrame(vt),()=>{QT(cr)}},[Ur,Ya,Uo,q,t?.bounds,lt,n,Mn.length,ys,Ae,ze,tt]),h.useEffect(()=>{const v=ae.current;!v?.THREE||!v?.edgePickGroup||!v?.facePickGroup||!v?.vertexPickGroup||(ZN(v,t,Kt),$S(v,Kt,rr.current.offset,{clearSceneGroup:Os}),Su(v,Or.current))},[Kt,t,n,tt]),h.useEffect(()=>{const v=ae.current;if(!v?.THREE||!v?.edgesGroup)return;const z=v.topologyDisplayEdgeTransformByRecord===!0;by(v,z?et||Je:Go||Kt,{visible:kr,edgeSettings:qi,focusedPartIds:Mn,viewerTheme:ct,dimmedOpacity:Lp,transformByRecord:z,displayRecords:v.displayRecords,syncClip:G=>Su(G,Or.current)})},[Go,Kt,et,tt,ct,Mn,qi,Je,kr,dr]),h.useEffect(()=>{const v=ae.current;if(!v?.THREE||!v?.edgesGroup)return;const{THREE:z,edgesGroup:G}=v;(!v.surfaceLineGroup||v.surfaceLineGroup.parent!==G)&&(v.surfaceLineGroup=new z.Group,v.surfaceLineGroup.renderOrder=21,G.add(v.surfaceLineGroup));const ne=v.surfaceLineGroup;Co(v,ne);const se=(Array.isArray(yr)?yr:[]).filter(IO);if(!se.length)return()=>{Co(v,ne)};const Oe=Math.max(sw(Sn,ct)*1.6,1.8),Te=Math.max(v.modelRadius||0,1)*8e-4+.02;for(const xe of se){const Se=xe?.surfaceLine,it=String(Se?.referenceId||"").trim(),Rn=Ja.get(it)||Kt?.referenceMap?.get(it)||null;if(!Rn)continue;const Nt=h7(Rn,Se,{offset:Te});if(!Nt.length)continue;const Zn=$u(v,Nt,{color:F6,opacity:.98,lineWidth:Oe,renderOrder:22,depthTest:!0,depthWrite:!1});Zn&&ne.add(Zn)}return ne.visible=ne.children.length>0,v.requestRender(),()=>{Co(v,ne)}},[Kt,yr,Sn,Ja,tt,ct]),h.useEffect(()=>{const v=ae.current;if(!v?.THREE||!v?.edgesGroup)return;const{THREE:z,edgesGroup:G}=v;(!v.bendGuideGroup||v.bendGuideGroup.parent!==G)&&(v.bendGuideGroup=new z.Group,v.bendGuideGroup.renderOrder=15,G.add(v.bendGuideGroup));const ne=v.bendGuideGroup;if(Co(v,ne),q||!t||!t1(t.guide_line_segments,6))return()=>{Co(v,ne)};const se=$u(v,t.guide_line_segments,{color:XJ,opacity:.98,lineWidth:Math.max(sw(Sn,ct)*ZJ,1.4),renderOrder:16,depthTest:!1,depthWrite:!1});return se&&ne.add(se),ne.visible=ne.children.length>0,v.requestRender(),()=>{Co(v,ne)}},[q,t,n,Sn,tt,ct]),h.useEffect(()=>{const v=ae.current;if(!v?.THREE||!v?.edgesGroup)return;const{THREE:z,edgesGroup:G}=v;(!v.urdfPosePickerGuideGroup||v.urdfPosePickerGuideGroup.parent!==G)&&(v.urdfPosePickerGuideGroup=new z.Group,v.urdfPosePickerGuideGroup.renderOrder=28,G.add(v.urdfPosePickerGuideGroup));const ne=v.urdfPosePickerGuideGroup;if(Co(v,ne),!te?.active)return()=>{Co(v,ne)};if(!ma(v,te))return()=>{Co(v,ne)};const Oe=gW(v,te);Oe&&ne.add(Oe);const Te=yW(v,te);Te&&ne.add(Te);const xe=bW(v,te);return xe&&ne.add(xe),ne.visible=ne.children.length>0,v.requestRender(),()=>{Co(v,ne)}},[te?.active,te?.center,pe,ur,tt]),h.useEffect(()=>{const v=ae.current;if(!v?.THREE||!v?.edgesGroup)return;const{THREE:z,edgesGroup:G}=v;(!v.partHighlightGroup||v.partHighlightGroup.parent!==G)&&(v.partHighlightGroup=new z.Group,v.partHighlightGroup.renderOrder=22,G.add(v.partHighlightGroup));const ne=v.partHighlightGroup;Co(v,ne);const se=[],Oe=new Set,Te=xe=>{const Se=String(xe||"").trim();!Se||xo.has(Se)||Oe.has(Se)||(Oe.add(Se),se.push(Se))};for(const xe of bl(ce))Te(xe);for(const xe of bl(Ee))Te(xe);if(kr&&se.length){const xe={...qi,thickness:i1(Sn,ct),highlightPartIds:se,highlightColor:a1(Sn),highlightOpacity:s1(Sn),highlightRenderOrder:26},Se=v.topologyDisplayEdgeTransformByRecord===!0&&et?ZO(v,et,{edgeSettings:xe,viewerTheme:ct,displayRecords:v.displayRecords}):Dv(v,Go||Kt,xe,ct);Se&&ne.add(Se)}return ne.visible=ne.children.length>0,v.requestRender(),()=>{Co(v,ne)}},[Go,Kt,et,Sn,qi,xo,tt,ct,Ee,n,ce,kr,dr]),h.useEffect(()=>{const v=ae.current;if(!v?.THREE||!v?.edgesGroup)return;const{THREE:z,edgesGroup:G}=v;(!v.mateOverlayGroup||v.mateOverlayGroup.parent!==G)&&(v.mateOverlayGroup=new z.Group,v.mateOverlayGroup.renderOrder=27,G.add(v.mateOverlayGroup));const ne=v.mateOverlayGroup;if(Co(v,ne),q||!t)return()=>{Co(v,ne)};const se=CQ(Jt,mt,je);if(!se.length)return()=>{Co(v,ne)};const Oe=Number.isFinite(Number(v.modelRadius))&&Number(v.modelRadius)>0?Number(v.modelRadius):1,Te=a1(Sn),xe=s1(Sn),Se=lo(Oe*.012,.55,4.5),it=lo(Oe*.07,Se*3.2,18),Rn=Math.max(i1(Sn,ct),2.6);for(const Nt of se)IQ(v,ne,Nt,{color:Te,opacity:Nt.selected?xe:Math.min(xe,.82),markerRadius:Nt.hovered&&!Nt.selected?Se*.9:Se,axisLength:it,lineWidth:Nt.selected?Rn:Math.max(Rn*.86,2.2),renderOrder:Nt.selected?28:27});return ne.visible=ne.children.length>0,v.requestRender(),()=>{Co(v,ne)}},[Jt,Sn,je,q,t,n,mt,tt,ct]),h.useEffect(()=>{const v=ae.current;if(!v?.THREE||!v?.edgesGroup||!v?.modelGroup)return;const{THREE:z,edgesGroup:G,modelGroup:ne}=v;(!v.referenceHighlightGroup||v.referenceHighlightGroup.parent!==G)&&(v.referenceHighlightGroup=new z.Group,v.referenceHighlightGroup.renderOrder=25,G.add(v.referenceHighlightGroup));const se=v.referenceHighlightGroup;(!v.referenceFaceFillGroup||v.referenceFaceFillGroup.parent!==ne)&&(v.referenceFaceFillGroup=new z.Group,v.referenceFaceFillGroup.renderOrder=24,ne.add(v.referenceFaceFillGroup));const Oe=v.referenceFaceFillGroup;Co(v,se),Co(v,Oe);const Te=i1(Sn,ct),xe=Te,Se=a1(Sn),it=s1(Sn),Rn=Et?Math.max(.08,it*.35):it,Nt=new Map,Zn=Array.isArray(Kt?.references)?Kt.references:Kt?.referenceMap instanceof Map?[...Kt.referenceMap.values()]:[],vt=(Dr,{hovered:Wt=!1}={})=>{const tn=String(Dr||"").trim();if(!tn)return;const W=Nt.get(tn);if(W){W.hovered=W.hovered||Wt;return}Nt.set(tn,{hovered:Wt})},$e=(Dr,{hovered:Wt=!1}={})=>{const tn=String(Dr||"").trim(),W=Ja.get(tn)||Kt?.referenceMap?.get(tn)||null;if(!W){const gt=QJ(tn);if(gt)for(const ko of Zn){const Dt=Nu(ko);(Dt==="face"||Dt==="edge"||Dt==="vertex")&&ow(ko,gt)&&vt(ko?.id,{hovered:Wt})}return}const qt=Nu(W);if(qt==="occurrence"){const gt=rw(W);for(const ko of Zn){const Dt=Nu(ko);(Dt==="face"||Dt==="edge"||Dt==="vertex")&&ow(ko,gt)&&vt(ko?.id,{hovered:Wt})}return}if(qt==="shape"){const gt=CD(W),ko=rw(W);for(const Dt of Zn){const Le=Nu(Dt);(Le==="face"||Le==="edge"||Le==="vertex")&&JJ(Dt,gt,ko)&&vt(Dt?.id,{hovered:Wt})}return}vt(tn,{hovered:Wt})};for(const Dr of Array.isArray(Ie)?Ie:[])$e(Dr);const $n=String(ye||"").trim();$n&&$e($n,{hovered:!0});for(const[Dr,Wt]of Nt.entries()){const tn=Ja.get(Dr)||Kt?.referenceMap?.get(Dr)||null;if(!tn)continue;const W=Nu(tn);if(W!=="face"&&W!=="edge"&&W!=="vertex")continue;const qt=!!Wt?.hovered;if(W==="vertex"){const Dt=c8(v,z,tn,{color:e8,opacity:qt?.96:.88});Dt&&se.add(Dt);continue}const gt=Se,ko=W==="edge"?Uv(Kt,tn):l8(Kt,tn);if(ko?.length){const Dt=W==="edge"&&Kt?.edges?.[tn.rowIndex]?.visibilityClass||"",Le=qt?xe:Te,So=$u(v,ko,{color:gt,opacity:qt?Rn:it,lineWidth:Le,renderOrder:26,depthTest:W!=="edge",depthWrite:!1,depthBias:i0(Le,{visibilityClass:Dt})});if(So){const Ko=s8(v,tn);Ko&&(So.matrixAutoUpdate=!1,So.matrix.copy(Ko),So.matrixWorldNeedsUpdate=!0),se.add(So)}}if(W==="face"){const Dt=o8(v,z,tn)||r8(v,z,Kt,tn);if(Dt){const Le=qt?Rn:it,So=new z.MeshBasicMaterial({color:gt,transparent:Le<.999,opacity:Le,depthTest:!0,depthWrite:!1,polygonOffset:!0,polygonOffsetFactor:-2,polygonOffsetUnits:-2,side:z.DoubleSide,toneMapped:!1}),Ko=new z.Mesh(Dt,So);Ko.renderOrder=25,Oe.add(Ko)}}}return se.visible=se.children.length>0,Oe.visible=Oe.children.length>0,v.requestRender(),()=>{Co(v,se),Co(v,Oe)}},[Kt,Qr,ye,Ja,Ie,tt,ct,Sn,Et]),KX({drawingCanvasRef:xr,drawingDraftRef:fo,drawingStrokesRef:Vn,drawingChangeRef:Ze,drawingIdRef:kt,drawingEnabled:St,drawingTool:Rr,meshData:pt,previewMode:U,viewerReadyTick:tt,renderDrawingOverlay:Ss,redrawDrawingCanvas:uN,buildDrawingPoint:tN,distanceToStrokeInPixels:T6,strokeLengthInPixels:M6,drawingToolNeedsTwoPoints:N6,buildFillStrokeAtPoint:eW,buildSurfaceLineAnchor:eu,updateSurfaceLineAnchor:Mx,drawingEraseThresholdPx:O6,drawingMinPointDistancePx:R6,drawingMinStrokeLengthPx:P6});const ws=h.useRef(null),Tm=h.useCallback(v=>{qn.current=v||ws.current||null,vn?.(v)},[vn]),Sg=h.useCallback(v=>{v&&!ws.current?(ws.current=v,qn.current=v):v&&ws.current&&(ws.current=null),Nn?.(v)},[Nn]);return h.useEffect(()=>{Et||(qn.current=null,ws.current=null)},[Et]),h.useEffect(()=>{br?.draft?.anchor||(ws.current=null)},[br]),PZ({measureCanvasRef:_n,measureState:br,activeMeasurementId:cn,measureHoverRef:qn,measureModeActive:Et,runtimeRef:ae,mountRef:Ut,previewMode:U,viewerReadyTick:tt}),nJ({runtimeRef:ae,mountRef:Tn,sceneMountRef:Ut,drawingCanvasRef:xr,previewMode:U,pickMode:re,selectorRuntime:Kt,pickableFaces:xs,pickableEdges:Zc,pickableVertices:fd,hiddenPartIds:we,focusedPartId:Mn,onHoverReferenceChange:Kn,onActivateReference:Qo,onDoubleActivateReference:_e,onContextReference:Ot,onMeasurePick:Sg,onMeasureHoverPoint:Tm,viewerReadyTick:tt,suppressTopologyPicking:wt,allowMeshVertexSnap:Zr}),d.jsxs("div",{ref:Tn,className:"relative h-full w-full",style:tu?{cursor:tu}:void 0,onPointerDownCapture:pd,onPointerMoveCapture:bg,onPointerUpCapture:Cm,onPointerCancelCapture:Mm,onPointerLeave:Im,children:[d.jsx("div",{className:"h-full w-full",ref:Ut}),d.jsx("canvas",{ref:_n,className:"absolute inset-0 z-10 h-full w-full touch-none",style:{pointerEvents:"none"},"aria-hidden":"true"}),d.jsx("canvas",{ref:xr,className:"absolute inset-0 z-10 h-full w-full touch-none",style:{pointerEvents:St&&!U&&at?"auto":"none",cursor:St&&!U&&at?Rr===an.ERASE?"cell":Rr===an.FILL?"copy":"crosshair":"default"},"aria-hidden":"true"}),d.jsx($7,{showViewPlane:Y&&!l,previewMode:U,isLoading:q,meshData:pt,viewPlaneOffsetRight:D,viewPlaneOffsetBottom:j,viewPlaneSize:HJ,viewPlaneHeader:ee,compact:X,activeViewPlaneFace:Bo,viewPlaneFaces:yA,viewPlaneOrientation:gs,viewerTheme:ct,activateViewPlaneFace:hd,activateDefaultViewPlane:gd}),Xn?d.jsx("p",{className:"cad-glass-popover pointer-events-none absolute left-4 top-24 z-20 rounded-[10px] border border-[var(--ui-error-bg)] px-4 py-3 text-sm text-[var(--ui-error-text)] shadow-[var(--ui-shadow-soft)] sm:top-20",children:Xn}):null]})}),_Q=Xh("relative grid w-full gap-1 rounded-md border px-4 py-3 text-sm shadow-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5",{variants:{variant:{default:"bg-card text-card-foreground",destructive:"border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive",warning:"border-chart-5/45 bg-chart-5/10 text-foreground [&>svg]:text-chart-5"}},defaultVariants:{variant:"default"}});function Ky({className:e,variant:t,...n}){return d.jsx("div",{"data-slot":"alert",role:"alert",className:J(_Q({variant:t}),e),...n})}function RQ({className:e,...t}){return d.jsx("div",{"data-slot":"alert-title",className:J("col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight",e),...t})}function PQ({className:e,...t}){return d.jsx("div",{"data-slot":"alert-description",className:J("col-start-2 grid justify-items-start gap-1 text-muted-foreground text-sm [&_p]:leading-relaxed",e),...t})}function og({...e}){return d.jsx(U3,{"data-slot":"dropdown-menu",...e})}const ig=h.forwardRef(function({...t},n){return d.jsx($3,{ref:n,"data-slot":"dropdown-menu-trigger",...t})}),sg=h.forwardRef(function({className:t,sideOffset:n=4,...r},o){return d.jsx(d2,{children:d.jsx(G3,{ref:o,"data-slot":"dropdown-menu-content",sideOffset:n,className:J("cad-glass-popover z-50 min-w-32 origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95",t),...r})})});function ia({className:e,inset:t,variant:n="default",...r}){return d.jsx(H3,{"data-slot":"dropdown-menu-item","data-inset":t,"data-variant":n,className:J("relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive",e),...r})}function qy({className:e,...t}){return d.jsx(W3,{"data-slot":"dropdown-menu-separator",className:J("-mx-1 my-1 h-px bg-border",e),...t})}function kD({...e}){return d.jsx(K3,{"data-slot":"dropdown-menu-sub",...e})}function DD({className:e,inset:t,children:n,showChevron:r=!0,...o}){return d.jsxs(q3,{"data-slot":"dropdown-menu-sub-trigger","data-inset":t,className:J("flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden transition-colors data-[inset]:pl-8 focus:bg-accent focus:text-accent-foreground",e),...o,children:[n,r?d.jsx(fm,{className:"ml-auto size-4"}):null]})}function LD({className:e,...t}){return d.jsx(d2,{children:d.jsx(Y3,{"data-slot":"dropdown-menu-sub-content",className:J("cad-glass-popover z-50 min-w-32 origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg animate-in fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",e),...t})})}function ns({children:e}){return d.jsx("span",{className:"min-w-0 truncate",children:e})}function aw({Item:e,Separator:t,itemClassName:n="text-xs",selected:r=!1,isolated:o=!1,hidden:i=!1,actionCount:s=1,copyReferenceDisabled:a=!1,selectDisabled:l=!1,showIsolate:c=!0,isolateDisabled:u=!1,showExitAllIsolate:f=!1,exitAllIsolateDisabled:m=!1,showHideOther:p=!0,hideOtherDisabled:b=!1,hideAllDisabled:y=!0,hideAllLabel:x="Show all",showVisibility:S=!0,visibilityDisabled:E=!1,showCameraActions:C=!1,resetZoomDisabled:A=!1,zoomToFitDisabled:N=!1,showHideAll:w=!1,showExpandCollapse:_=!1,expandSelectedDisabled:I=!0,collapseSelectedDisabled:R=!0,expandAllDisabled:O=!0,collapseAllDisabled:F=!0,onCopyReference:V,onSelect:$,onIsolate:K,onExitAllIsolate:U,onHideOther:Y,onHideAll:D,onToggleVisibility:j,onResetZoom:ee,onZoomToFit:X,onExpandSelected:ve,onCollapseSelected:q,onExpandAll:re,onCollapseAll:Be}){const Me=r?"Deselect":"Select",He=o?"Exit isolate":"Isolate",de=i?"Reveal":"Hide";return d.jsxs(d.Fragment,{children:[d.jsx(e,{className:n,disabled:a,onSelect:V,children:d.jsx(ns,{children:"Copy Reference"})}),d.jsx(t,{}),d.jsx(e,{className:n,disabled:l,onSelect:$,children:d.jsx(ns,{children:Me})}),c?d.jsx(e,{className:n,disabled:u,onSelect:K,children:d.jsx(ns,{children:He})}):null,f?d.jsx(e,{className:n,disabled:m,onSelect:U,children:d.jsx(ns,{children:"Exit all isolates"})}):null,p||w||S?d.jsx(t,{}):null,p?d.jsx(e,{className:n,disabled:b,onSelect:Y,children:d.jsx(ns,{children:"Hide others"})}):null,w?d.jsx(e,{className:n,disabled:y,onSelect:D,children:d.jsx(ns,{children:x})}):null,S?d.jsx(e,{className:n,disabled:E,onSelect:j,children:d.jsx(ns,{children:de})}):null,C?d.jsxs(d.Fragment,{children:[d.jsx(t,{}),d.jsx(e,{className:n,disabled:A,onSelect:ee,children:d.jsx(ns,{children:"Reset Zoom"})}),d.jsx(e,{className:n,disabled:N,onSelect:X,children:d.jsx(ns,{children:"Zoom To Fit"})})]}):null,_?d.jsxs(d.Fragment,{children:[d.jsx(t,{}),d.jsx(e,{className:n,disabled:I,onSelect:ve,children:d.jsx(ns,{children:"Expand"})}),d.jsx(e,{className:n,disabled:R,onSelect:q,children:d.jsx(ns,{children:"Collapse"})}),d.jsx(e,{className:n,disabled:O,onSelect:re,children:d.jsx(ns,{children:"Expand all"})}),d.jsx(e,{className:n,disabled:F,onSelect:Be,children:d.jsx(ns,{children:"Collapse all"})})]}):null]})}function FD({...e}){return d.jsx(eB,{"data-slot":"popover",...e})}const OQ=h.forwardRef(function({...t},n){return d.jsx(X3,{ref:n,"data-slot":"popover-trigger",...t})}),kQ=h.forwardRef(function({...t},n){return d.jsx(Z3,{ref:n,"data-slot":"popover-anchor",...t})}),jD=h.forwardRef(function({className:t,align:n="center",sideOffset:r=4,glass:o=!0,...i},s){return d.jsx(J3,{children:d.jsx(Q3,{ref:s,"data-slot":"popover-content",align:n,sideOffset:r,className:J("z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",o&&"cad-glass-popover text-popover-foreground",t),...i})})}),xA="system",$h="light",wl="dark",DQ=xA,tm="cad-viewer:theme",LQ="cad-viewer:color-scheme",FQ=Object.freeze({"studio-light":$h,ivory:$h,graphite:wl,blueprint:wl,solarized:wl,terminal:wl,"candy-core":wl}),jQ=Object.freeze([{id:xA,label:"System"},{id:$h,label:"Light"},{id:wl,label:"Dark"}]),zQ=Object.freeze(Object.fromEntries(jQ.map(e=>[e.id,e])));function zD(e){const t=String(e||"").trim().toLowerCase(),n=FQ[t]||t;return zQ[n]?n:DQ}function BQ(e,{prefersDark:t=!1}={}){const n=zD(e);return n===xA?t?wl:$h:n}function VQ(e,t=document.documentElement,{prefersDark:n=!1}={}){if(!t)return;const r=zD(e),o=BQ(r,{prefersDark:n});t.dataset.themePreference=r,t.dataset.theme=o,t.classList.toggle("dark",o===wl),t.style.colorScheme=o}const N0=12,SA=1,lw=`cad-viewer:directory-session:v${SA}`,cw=280,uw=365,$Q=280;BP(_v.settings);function BD(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function Gh(e,t=""){return String(e??t)}function qp(e){return Array.isArray(e)?e.map(t=>String(t??"").trim()).filter(Boolean):[]}function EA(e){return[...new Set(qp(e))]}function VD(e){return Array.isArray(e)?EA(e):null}function GQ(e,t){const n=Number(e);return Number.isFinite(n)?n:t}function Df(e){const t=Number(e);return!Number.isFinite(t)||t<=0?null:Math.round(t)}function UQ(e,t=!1){return typeof e=="boolean"?e:t}function HQ(e){return typeof e=="boolean"?e:null}function WQ(e,t=uw){const n=Df(e),r=Df(t)||Df(uw);return!n||n===r?null:n}function KQ(e,t=cw){const n=Df(e),r=Df(t)||Df(cw);return!n||n===r?null:n}function wA(e){return X5(e)?$Q:uw}function sf(e){return Array.isArray(e)?[...e]:[]}function af(e,t){if(e===t)return!0;if(!Array.isArray(e)||!Array.isArray(t)||e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1)if(e[n]!==t[n])return!1;return!0}function l_(e){return{x:Number(e?.x)||0,y:Number(e?.y)||0}}function c_(e){return Array.isArray(e)?[Number(e[0])||0,Number(e[1])||0,Number(e[2])||0]:null}function u_(e){return Array.isArray(e)?[Number(e[0])||0,Number(e[1])||0]:null}function d_(e){const t=sa(e);if(!t)return null;const n=Number(t.zoom);return{position:t.position,target:t.target,up:t.up,zoom:Number.isFinite(n)&&n>0?n:1}}function $D(e){const t=Gh(e||an.FREEHAND);switch(t){case an.LINE:case an.ARROW:case an.DOUBLE_ARROW:case an.RECTANGLE:case an.CIRCLE:case an.FILL:case an.ERASE:case an.FREEHAND:return t;default:return an.FREEHAND}}function qQ(e){const t=Gh(e||Cr.REFERENCES);return t===Cr.DRAW||t===Cr.MEASURE||t===Cr.PAN?t:Cr.REFERENCES}function Yy(e,t,n){if(e===t)return!0;if(!Array.isArray(e)||!Array.isArray(t)||e.length<n||t.length<n)return!1;for(let r=0;r<n;r+=1)if(e[r]!==t[r])return!1;return!0}function YQ(e){return!e||typeof e!="object"?null:{referenceId:String(e.referenceId||""),selector:String(e.selector||""),normalizedSelector:String(e.normalizedSelector||""),faceToken:String(e.faceToken||""),partId:String(e.partId||""),surfaceType:String(e.surfaceType||""),startPoint:c_(e.startPoint),endPoint:c_(e.endPoint),startUv:u_(e.startUv),endUv:u_(e.endUv)}}function XQ(e,t){return e===t?!0:!e||!t?!1:e.referenceId===t.referenceId&&e.selector===t.selector&&e.normalizedSelector===t.normalizedSelector&&e.faceToken===t.faceToken&&e.partId===t.partId&&e.surfaceType===t.surfaceType&&Yy(e.startPoint,t.startPoint,3)&&Yy(e.endPoint,t.endPoint,3)&&Yy(e.startUv,t.startUv,2)&&Yy(e.endUv,t.endUv,2)}function f_(e,t){if(e===t)return!0;if(!Array.isArray(e)||!Array.isArray(t)||e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1)if(e[n]?.x!==t[n]?.x||e[n]?.y!==t[n]?.y)return!1;return!0}function ZQ(e){const t=Gh(e?.tool||an.FREEHAND);return t===an.SURFACE_LINE?null:{id:String(e?.id||""),tool:$D(t),points:Array.isArray(e?.points)?e.points.map(l_):[],fillPoints:Array.isArray(e?.fillPoints)?e.fillPoints.map(l_):[],guessed:e?.guessed===!0,surfaceLine:YQ(e?.surfaceLine)}}function Pa(e){return Array.isArray(e)?e.map(ZQ).filter(Boolean):[]}function vA(e,t){if(e===t)return!0;if(!Array.isArray(e)||!Array.isArray(t)||e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1)if(e[n]?.id!==t[n]?.id||e[n]?.tool!==t[n]?.tool||e[n]?.guessed!==t[n]?.guessed||!XQ(e[n]?.surfaceLine,t[n]?.surfaceLine)||!f_(e[n]?.points,t[n]?.points)||!f_(e[n]?.fillPoints,t[n]?.fillPoints))return!1;return!0}function Xy(e){return Array.isArray(e)?e.map(Pa):[]}function m_(e,t){if(e===t)return!0;if(!Array.isArray(e)||!Array.isArray(t)||e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1)if(!vA(e[n],t[n]))return!1;return!0}const GD=[{key:"renderFormat",defaultValue:Q.STEP,normalize:e=>I7(e)},{key:"dxfThicknessMm",defaultValue:0,normalize:e=>{const t=GQ(e,0);return t>0?t:0}},{key:"referenceQuery",defaultValue:"",normalize:Gh},{key:"selectedReferenceIds",defaultValue:[],normalize:qp,clone:sf,equals:af},{key:"selectedPartIds",defaultValue:[],normalize:qp,clone:sf,equals:af},{key:"inspectedAssemblyNodeId",defaultValue:"",normalize:e=>Gh(e).trim()},{key:"expandedAssemblyPartIds",defaultValue:[],normalize:qp,clone:sf,equals:af},{key:"expandedStepTreeNodeIds",defaultValue:[],normalize:EA,clone:sf,equals:af},{key:"fileSheetOpenSectionIds",defaultValue:null,normalize:VD,clone:e=>Array.isArray(e)?sf(e):null,equals:(e,t)=>Array.isArray(e)||Array.isArray(t)?af(e||[],t||[]):e===t},{key:"hiddenPartIds",defaultValue:[],normalize:qp,clone:sf,equals:af},{key:"camera",defaultValue:null,normalize:d_,clone:d_,equals:xP},{key:"drawingTool",defaultValue:an.FREEHAND,normalize:$D},{key:"tabToolMode",defaultValue:Cr.REFERENCES,normalize:qQ},{key:"drawingStrokes",defaultValue:[],normalize:Pa,clone:Pa,equals:vA},{key:"drawingUndoStack",defaultValue:[],normalize:Xy,clone:Xy,equals:m_},{key:"drawingRedoStack",defaultValue:[],normalize:Xy,clone:Xy,equals:m_}];function dw(e,t={}){const n={};for(const r of e){let o=BD(t||{},r.key)?t[r.key]:void 0;typeof o>"u"&&(o=r.defaultValue),n[r.key]=r.normalize?r.normalize(o,r.defaultValue):o}return n}function JQ(e,t={}){const n=dw(e,t),r={};for(const o of e){const i=n[o.key];r[o.key]=o.clone?o.clone(i):i}return r}function QQ(e,t={},n={}){for(const r of e){const o=dw([r],t)[r.key],i=dw([r],n)[r.key];if(!(r.equals||Object.is)(o,i))return!1}return!0}function eee(e){return String(e||"").trim()}function AA(e,t){try{const n=e.getItem(t);return n?JSON.parse(n):null}catch{return null}}function UD(e,t,n={}){typeof n.onWriteError=="function"&&n.onWriteError({key:e,error:t})}function Uh(e,t,n,r={}){try{return e.setItem(t,JSON.stringify(n)),!0}catch(o){return UD(t,o,r),!1}}function CA(e,t,n={}){try{return e.removeItem(t),!0}catch(r){return UD(t,r,n),!1}}function HD(){return typeof window<"u"?window.sessionStorage:null}function _b(e={},t={}){return{fileViewerOpen:UQ(e?.fileViewerOpen,!1),fileViewerExpandedDirectoryIds:VD(e?.fileViewerExpandedDirectoryIds),fileViewerWidthPx:KQ(e?.fileViewerWidthPx,t.defaultFileViewerWidthPx),fileSheetOpen:HQ(e?.fileSheetOpen),fileSheetWidthPx:WQ(e?.fileSheetWidthPx,t.defaultFileSheetWidthPx),theme:TA(e?.theme)}}function tee(e={},t={}){const n=_b(e,t),r={version:SA};return(n.fileViewerOpen||BD(e||{},"fileViewerOpen"))&&(r.fileViewerOpen=n.fileViewerOpen),Array.isArray(n.fileViewerExpandedDirectoryIds)&&(r.fileViewerExpandedDirectoryIds=n.fileViewerExpandedDirectoryIds),n.fileViewerWidthPx&&(r.fileViewerWidthPx=n.fileViewerWidthPx),typeof n.fileSheetOpen=="boolean"&&(r.fileSheetOpen=n.fileSheetOpen),n.fileSheetWidthPx&&(r.fileSheetWidthPx=n.fileSheetWidthPx),n.theme&&(r.theme=n.theme),Object.keys(r).length>1?r:null}function WD(e={}){const t=e.storage||HD();if(!t)return _b({},e);const n=AA(t,lw);return!n||n.version!==SA?_b({},e):_b(n,e)}function nee(e={},t={}){const n=t.storage||HD();if(!n)return!0;const r=tee(e,t);return r?Uh(n,lw,r,t):CA(n,lw,t)}const MA=1,IA=`cad-viewer:tutorial-tips:v${MA}`,p_="resetTips",ree=Object.freeze({COPY_REFERENCE:"copyReference"});function NA(){return typeof window<"u"?window.localStorage:null}function KD(e={}){const t=e.storage||NA();if(!t)return[];const n=AA(t,IA);return!n||n.version!==MA?[]:EA(n.seen)}function oee(e,t={}){const n=String(e||"").trim();return!!n&&KD(t).includes(n)}function iee(e,t={}){const n=t.storage||NA(),r=String(e||"").trim();if(!n||!r)return!1;const o=KD(t);return o.includes(r)?!0:Uh(n,IA,{version:MA,seen:[...o,r]},t)}function see(e={}){const t=e.storage||NA();return t?CA(t,IA,e):!1}function aee(e={}){if(typeof window>"u")return!1;let t;try{t=new URL(window.location.href)}catch{return!1}if(!t.searchParams.has(p_))return!1;see(e),t.searchParams.delete(p_);try{window.history.replaceState(window.history.state,"",`${t.pathname}${t.search}${t.hash}`)}catch{}return!0}function qD(e=ua,t=null,{prefersDark:n=!1}={}){const r=Qh(e)||ua,o=t?Pi(t):null;return{themeId:r===Pl&&!o?ua:r,custom:o,settings:W4(r,{custom:o,prefersDark:n})}}function YD(){if(typeof window>"u"||typeof window.matchMedia!="function")return!1;try{return window.matchMedia("(prefers-color-scheme: dark)").matches===!0}catch{return!1}}function hx(){if(typeof window>"u")return null;const e=AA(window.localStorage,tm);return e?.version===N0?e:null}function fw(e={}){const t=hx();return qD(t?.themeId,t?.custom,{prefersDark:e.prefersDark??YD()})}function lee(e,t={}){if(typeof window>"u")return!0;const n=hx(),r=n?.custom?Pi(n.custom):null,o=Qh(e)||ua,i=o===Pl&&!r?ua:o;return i===ua&&!r?CA(window.localStorage,tm,t):Uh(window.localStorage,tm,{version:N0,themeId:i,custom:r},t)}function cee(e,t={}){if(typeof window>"u")return!0;const n=Pi(e),r=zP(n);return r?Uh(window.localStorage,tm,{version:N0,themeId:r,custom:hx()?.custom||null},t):Uh(window.localStorage,tm,{version:N0,themeId:Pl,custom:n},t)}function h_(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function TA(e){if(!h_(e))return null;const t=Qh(e.themeId);if(!t)return null;const n=h_(e.custom)?Pi(e.custom):null;return t===Pl&&!n?null:{themeId:t,custom:n}}function uee(e={}){const t=TA(e);if(!t)return null;const n=hx(),r=Qh(n?.themeId)||ua,o=n?.custom?Pi(n.custom):null;return t.themeId===r&&JSON.stringify(t.custom)===JSON.stringify(o)?null:t}function dee(e={}){const t={prefersDark:e.prefersDark??YD()},n=TA(WD(e).theme);return n?qD(n.themeId,n.custom,t):fw(t)}function T0(e){return JQ(GD,e||{})}function XD(e,t){return QQ(GD,e||{},t||{})}function bp(e,t={}){const n=T0(t);return!n.inspectedAssemblyNodeId&&Array.isArray(t?.expandedAssemblyPartIds)&&(n.inspectedAssemblyNodeId=String(t.expandedAssemblyPartIds[t.expandedAssemblyPartIds.length-1]||"").trim()),{key:eee(e),...n}}function fee({tipId:e,active:t=!1,side:n="left",align:r="center",className:o,children:i}){const[s,a]=h.useState(!1),l=h.useRef(!1);h.useEffect(()=>{if(!(!e||l.current)){if(!t){a(!1);return}if(oee(e)){l.current=!0;return}a(!0)}},[t,e]);const c=()=>{l.current=!0,iee(e),a(!1)};return d.jsxs(FD,{open:s,children:[d.jsx(kQ,{asChild:!0,children:i}),d.jsx(jD,{side:n,align:r,sideOffset:8,collisionPadding:16,glass:!1,className:J("w-[min(44rem,calc(100vw-2rem))] border-transparent bg-foreground px-3 py-2.5 text-background shadow-lg shadow-black/25",o),onOpenAutoFocus:u=>u.preventDefault(),onCloseAutoFocus:u=>u.preventDefault(),onPointerDownOutside:u=>u.preventDefault(),onInteractOutside:u=>u.preventDefault(),onFocusOutside:u=>u.preventDefault(),onEscapeKeyDown:u=>u.preventDefault(),children:d.jsxs("div",{className:"flex items-start gap-2",children:[d.jsx(qB,{className:"mt-px size-4 shrink-0 text-background/70",strokeWidth:2,"aria-hidden":"true"}),d.jsxs("p",{className:"min-w-0 flex-1 text-[13px] leading-snug",children:['Copy references into prompts to edit specific parts of a STEP file, e.g. "Make the hole'," ",d.jsx("code",{className:"rounded-sm bg-background/20 px-1 py-0.5 font-mono text-[12px]",children:"bracket#o1.1"})," ",'twice as wide"']}),d.jsx(Gt,{type:"button",variant:"ghost",size:"icon-xs",className:"-mr-1 -mt-0.5 size-5 shrink-0 text-background/70 hover:bg-background/15 hover:text-background","aria-label":"Dismiss tip",title:"Dismiss",onClick:c,children:d.jsx(Kc,{className:"size-3.5",strokeWidth:2,"aria-hidden":"true"})})]})})]})}const _A=Object.freeze({}),mw=new Set;let _l={elapsedSec:0,parameterValues:_A};function mee(){for(const e of mw)e()}function ZD(e){return mw.add(e),()=>{mw.delete(e)}}function pee(e){const t=Number(e);return Number.isFinite(t)&&t>0?t:0}function hee(e){return e&&typeof e=="object"?e:_A}function RA(e){const t={elapsedSec:pee(e.elapsedSec),parameterValues:hee(e.parameterValues)};t.elapsedSec===_l.elapsedSec&&t.parameterValues===_l.parameterValues||(_l=t,mee())}function g_(){return _l}function y_(){return _l.elapsedSec}function c1({elapsedSec:e,parameterValues:t}){RA({elapsedSec:e,parameterValues:t===void 0?_l.parameterValues:t})}function u1(e){RA({elapsedSec:e,parameterValues:_l.parameterValues})}function fc({elapsedSec:e=0,parameterValues:t=_A}={}){RA({elapsedSec:e,parameterValues:t})}function d1(){return _l.elapsedSec}function b_(){return _l.parameterValues}function gee(){return h.useSyncExternalStore(ZD,g_,g_)}function yee(){return h.useSyncExternalStore(ZD,y_,y_)}function bee({panToolActive:e=!1,topologySelectionPending:t=!1,topologySelectionUnavailable:n=!1,topologySelectionDeferred:r=!1,topologyPickingActive:o=!1,viewerMode:i="",assemblyPickingActive:s=!1,focusedPartIds:a="",measureMode:l=!1}={}){return e||t||n||r?Kr.NONE:l?Kr.MEASURE:i==="assembly"&&!o&&(s||!String(a||"").trim())?Kr.ASSEMBLY:Kr.AUTO}const f1=Object.freeze([]),x_=Object.freeze({error:{label:"Error",borderClassName:"border-destructive/45",iconClassName:"border-destructive/45 bg-destructive/10 text-destructive dark:text-red-300",labelClassName:"text-destructive dark:text-red-300"},warning:{label:"Warning",borderClassName:"border-amber-500/45",iconClassName:"border-amber-500/55 bg-amber-500/10 text-amber-500 dark:text-amber-300",labelClassName:"text-amber-500 dark:text-amber-300"}});function is(e){const t=Number(e);return Number.isFinite(t)&&t>0?t:0}function xee(e){return e?.severity==="warning"?x_.warning:x_.error}function See(e,t){if(!e)return null;const n=8,r=typeof window<"u"?window.innerWidth:0,o=typeof window<"u"?window.innerHeight:0,i=is(t?.left)+n,s=is(t?.top)+n,a=r>0?Math.max(i,r-is(t?.right)-n):Number(e.x)||i,l=o>0?Math.max(s,o-is(t?.bottom)-n):Number(e.y)||s,c=Math.min(Math.max(Number(e.x)||i,i),a),u=Math.min(Math.max(Number(e.y)||s,s),l);return{position:"fixed",left:`${c}px`,top:`${u}px`,width:"1px",height:"1px"}}function Eee({menu:e,positionStyle:t,onClose:n,onCopyReference:r,onSelect:o,onFocus:i,onExitAllIsolate:s,onHideOther:a,onHideAll:l,onHide:c,onReveal:u,onResetZoom:f,onZoomToFit:m,onExpandSelected:p,onCollapseSelected:b,onExpandAll:y,onCollapseAll:x}){if(!e||!t)return null;const S="text-xs",E=w=>{w?.(e),n?.()},C=e.selected===!0,A=e.hidden===!0,N=e.focused===!0;return d.jsxs(og,{open:!0,onOpenChange:w=>{w||n?.()},children:[d.jsx(ig,{asChild:!0,children:d.jsx("button",{type:"button",tabIndex:-1,"aria-hidden":"true",className:"pointer-events-none fixed size-px opacity-0",style:t})}),d.jsx(sg,{align:"start",side:"bottom",sideOffset:4,className:"w-44",onContextMenu:w=>{w.preventDefault(),w.stopPropagation()},children:e.global===!0?d.jsxs(d.Fragment,{children:[e.showShowAll===!0?d.jsx(ia,{className:S,onSelect:()=>E(l),children:"Show all"}):null,e.showShowAll===!0&&e.showCameraActions!==!1?d.jsx(qy,{}):null,e.showCameraActions!==!1?d.jsxs(d.Fragment,{children:[d.jsx(ia,{className:S,disabled:e.resetZoomDisabled===!0,onSelect:()=>E(f),children:"Reset Zoom"}),d.jsx(ia,{className:S,disabled:e.zoomToFitDisabled===!0,onSelect:()=>E(m),children:"Zoom To Fit"})]}):null,e.showCameraActions!==!1&&e.showExpandCollapse===!0?d.jsx(qy,{}):null,e.showShowAll===!0&&e.showCameraActions===!1&&e.showExpandCollapse===!0?d.jsx(qy,{}):null,e.showExpandCollapse===!0?d.jsxs(d.Fragment,{children:[d.jsx(ia,{className:S,disabled:e.expandAllDisabled===!0,onSelect:()=>E(y),children:"Expand all"}),d.jsx(ia,{className:S,disabled:e.collapseAllDisabled===!0,onSelect:()=>E(x),children:"Collapse all"})]}):null]}):d.jsx(aw,{Item:ia,Separator:qy,itemClassName:S,selected:C,isolated:N,hidden:A,actionCount:e.actionCount,copyReferenceDisabled:!String(e.copyText||"").trim(),selectDisabled:e.selectDisabled===!0,showIsolate:e.showIsolate!==!1,isolateDisabled:e.isolateDisabled===!0,showExitAllIsolate:e.showExitAllIsolate===!0,exitAllIsolateDisabled:e.exitAllIsolateDisabled===!0,showHideOther:e.showHideOther!==!1,hideOtherDisabled:e.hideOtherDisabled===!0,showVisibility:e.showVisibility!==!1,showHideAll:e.showHideAll===!0,hideAllDisabled:e.hideAllDisabled===!0,hideAllLabel:String(e.hideAllLabel||"").trim()||"Show all",visibilityDisabled:e.visibilityDisabled===!0,showCameraActions:e.showCameraActions!==!1,resetZoomDisabled:e.resetZoomDisabled===!0,zoomToFitDisabled:e.zoomToFitDisabled===!0,showExpandCollapse:e.showExpandCollapse===!0,expandSelectedDisabled:e.expandSelectedDisabled!==!1,collapseSelectedDisabled:e.collapseSelectedDisabled!==!1,expandAllDisabled:e.expandAllDisabled!==!1,collapseAllDisabled:e.collapseAllDisabled!==!1,onCopyReference:()=>E(r),onSelect:()=>E(o),onIsolate:()=>E(i),onExitAllIsolate:()=>E(s),onHideOther:()=>E(a),onHideAll:()=>E(l),onToggleVisibility:()=>E(A?u:c),onResetZoom:()=>E(f),onZoomToFit:()=>E(m),onExpandSelected:()=>E(p),onCollapseSelected:()=>E(b),onExpandAll:()=>E(y),onCollapseAll:()=>E(x)})})]})}const S_="h-9 w-fit min-w-0 max-w-full sm:max-w-[min(28rem,calc(100%-16rem))] shrink overflow-hidden px-4 text-[12px] font-semibold max-sm:w-full max-sm:pr-32";function wee({viewerRef:e,renderFormat:t,renderPartsIndividually:n=!1,selectedMeshData:r,selectedImplicitModel:o,implicitDynamicRenderActive:i=!1,implicitGraphicsSettings:s=null,selectedKey:a,missingFileRef:l="",viewerServerInfo:c=null,viewerPerspective:u,viewerPerspectiveRef:f,themeSettings:m,previewMode:p,viewportFrameInsets:b,viewerLoading:y,viewerAlert:x,stepUpdateInProgress:S,referenceSelectionPending:E=!1,referenceSelectionUnavailable:C=!1,referenceSelectionDeferred:A=!1,drawingThicknessScale:N=1,planMode:w=!1,bendAxisX:_=null,drawingBendLines:I=null,bendAnglesRad:R=null,drawingBends:O=null,drawingBendStyle:F="boxed",drawingBendRadiusMm:V=0,drawingKFactor:$=.5,drawingHiddenLayers:K=null,drawingOrientation:U=null,drawingMaterialColor:Y=null,drawingGeometry:D=null,drawingIsDocument:j=!1,drawingThicknessMm:ee=0,onCameraZoomPercentChange:X=null,viewPlaneOffsetRight:ve=16,viewerMode:q,assemblyPickingActive:re=!1,assemblyParts:Be,hiddenPartIds:Me,selectedPartIds:He,hoveredPartId:de,assemblyMates:me=f1,selectedMateIds:we=f1,hoveredMateId:ce="",hoveredReferenceId:Ee,selectedReferenceIds:Jt,selectorRuntime:mt,displayEdgeRuntime:je,stepParameters:ye=null,pickableFaces:Ie,pickableEdges:Je,pickableVertices:et,focusedPartIds:Xt="",displaySettings:st=null,boundsAnimationActive:xt=!1,drawToolActive:Xe,drawingTool:sn,drawingStrokes:mn,handleDrawingStrokesChange:ke,handlePerspectiveChange:St,handleModelHoverChange:Rr,handleModelReferenceActivate:yr,handleModelReferenceDoubleActivate:Qt,handleModelReferenceContext:uo,onMeasurePick:Kn,onMeasureHoverPoint:Qo,activeMeasurementId:_e="",measureState:Ot=null,measureModeActive:Nn=!1,viewerContextMenu:vn=null,onViewerContextMenuClose:cn,onViewerContextMenuCopyReference:br,onViewerContextMenuSelect:Et,onViewerContextMenuFocus:Zr,onViewerContextMenuExitAllIsolate:en,onViewerContextMenuHideOther:Pr,onViewerContextMenuHideAll:te,onViewerContextMenuHide:We,onViewerContextMenuReveal:Re,onViewerContextMenuResetZoom:wt,onViewerContextMenuZoomToFit:dt,onViewerContextMenuExpandSelected:pt,onViewerContextMenuCollapseSelected:at,onViewerContextMenuExpandAll:Ae,onViewerContextMenuCollapseAll:jt,handleViewerAlertChange:lt,handleStepModuleTransformDetectedChange:nr,selectionCount:rt,copyButtonLabel:Tn,copyButtonCountLabel:Ut="",copyReferenceTipActive:xr=!1,panToolActive:_n=!1,handleCopySelection:qn,handleScreenshotCopy:fo,urdfPosePicker:Vn=null}){const Ze=gee(),kn=h.useMemo(()=>{if(!ye?.animationState?.playing)return ye;const Z=Ze?.parameterValues;return!Z||typeof Z!="object"?ye:{...ye,parameterValues:Z,animationState:{...ye.animationState,elapsedSec:Ze.elapsedSec}}},[ye,Ze]),Sr="Viewer error. See the Issues section for details.",Er=hs(t),ie=Dh(t)===Us.IMPLICIT,Mt=Mf(t,"draw"),un=Er.parts,Ke=Er.topology,zt=Er.displayModes&&!!st,Yn=w?Vr.ORTHOGRAPHIC:Er.themeProjection?Bc(m?.projection):Vr.PERSPECTIVE,kt=!!kn?.animationState?.playing,ae=!!(xt||kt),cr=String(l||"").trim(),bn=String(c?.rootPath||c?.directoryRoot||"").trim(),Jr=!!(cr&&bn&&cr.startsWith("/")&&!cr.startsWith(bn.endsWith("/")?bn:`${bn}/`)),rr=!!(E&&Ke),Or=!!(C&&Ke),k=!!(A&&r&&Ke),oe=!!Vn?.active,fe="Select target",Fe={left:`calc(${Math.max(Number(b?.left)||0,0)}px + 0.75rem)`,top:`calc(${Math.max(Number(b?.top)||0,0)}px + 0.75rem)`},qe=ie?!!o:!!r,Ye=Mt&&Xe?"screenshot":(un||Ke)&&rt>0?"selection":"",ht={bottom:"1rem"},Dn={left:`${is(b?.left)}px`,right:`${is(b?.right)}px`,top:`${is(b?.top)}px`,bottom:`${is(b?.bottom)}px`},Rt={left:`${is(b?.left)}px`,right:`${is(b?.right)}px`,bottom:`calc(${is(b?.bottom)}px + 1rem)`},Xn={...ht,left:`calc(${is(b?.left)}px + 1rem)`,right:`calc(${is(b?.right)}px + 1rem)`},It=h.useRef(null),[tt,An]=h.useState(!0),xn=Ye==="screenshot"?"Copy Screenshot":Tn;h.useLayoutEffect(()=>{const Z=It.current;if(!Z)return;const pe=()=>{An(Z.scrollWidth<=Z.clientWidth+1)};pe(),window.addEventListener("resize",pe);const ft=typeof ResizeObserver>"u"?null:new ResizeObserver(pe);return ft?.observe(Z),()=>{window.removeEventListener("resize",pe),ft?.disconnect()}},[xn]);const Di=tt||!Ut||Ye==="screenshot"?xn:Ut,Bo=Ye==="screenshot"?"Copy screenshot to clipboard":Tn,ui=Ye==="screenshot"?y||!qe:!1,gs=x&&x.blocking!==!1&&(x.blocking||x.severity!=="warning"||!qe)?x:null,di=xee(gs),or=h.useMemo(()=>See(vn,b),[vn,b]);return h.useEffect(()=>{if(!oe||typeof window>"u"||typeof document>"u")return;const Z=pe=>{pe.defaultPrevented||pe.key!=="Escape"&&pe.key!=="Esc"&&pe.code!=="Escape"||(pe.preventDefault(),pe.stopPropagation(),Vn?.onCancel?.())};return window.addEventListener("keydown",Z,!0),document.addEventListener("keydown",Z,!0),()=>{window.removeEventListener("keydown",Z,!0),document.removeEventListener("keydown",Z,!0)}},[Vn,oe]),d.jsxs("div",{className:"absolute inset-0",children:[d.jsx(TQ,{ref:e,meshData:r,implicitModel:ie?o:null,implicitGraphicsSettings:ie?s:null,implicitDynamicRenderActive:ie?i:!1,modelKey:a,renderFormat:t,drawingThicknessScale:N,planMode:w,bendAxisX:_,drawingBendLines:I,bendAnglesRad:R,drawingBends:O,drawingBendStyle:F,drawingBendRadiusMm:V,drawingKFactor:$,drawingHiddenLayers:K,drawingOrientation:U,drawingMaterialColor:Y,drawingGeometry:D,drawingIsDocument:j,drawingThicknessMm:ee,onCameraZoomPercentChange:X,perspective:u,projection:Yn,perspectiveRef:f,showEdges:!0,recomputeNormals:!1,themeSettings:m,displaySettings:zt?st:null,previewMode:p,showViewPlane:!p,scale:Er.sceneScale==="urdf"?Xr.URDF:Xr.CAD,viewPlaneOffsetRight:ve,viewPlaneOffsetBottom:"1rem",compactViewPlane:!1,viewportFrameInsets:b,isLoading:y,pickMode:!Ke&&!un&&!Nn?Kr.NONE:bee({panToolActive:_n,topologySelectionPending:rr,topologySelectionUnavailable:Or,topologySelectionDeferred:k,topologyPickingActive:!!(Ie?.length||Je?.length||et?.length),viewerMode:q,assemblyPickingActive:re,focusedPartIds:Xt,measureMode:Nn}),panToolActive:_n,renderPartsIndividually:Er.sceneScale==="urdf"?!0:n||!!kn?.definition,pickableParts:un?Be:f1,hiddenPartIds:un?Me:[],selectedPartIds:un?He:[],hoveredPartId:un?de:"",assemblyMates:un?me:[],selectedMateIds:un?we:[],hoveredMateId:un?ce:"",hoveredReferenceId:Ke?Ee:"",selectedReferenceIds:Ke?Jt:[],selectorRuntime:Ke?mt:null,displayEdgeRuntime:Ke?je:null,stepParameters:Er.params===Ic.SIDECAR?kn:null,pickableFaces:Ke?Ie:[],pickableEdges:Ke?Je:[],pickableVertices:Ke?et:[],focusedPartId:un?Xt:"",boundsAnimationActive:ae,drawingEnabled:Mt&&Xe,drawingTool:sn,drawingStrokes:Mt?mn:[],onDrawingStrokesChange:ke,onPerspectiveChange:St,onHoverReferenceChange:Rr,onActivateReference:yr,onDoubleActivateReference:Qt,onContextReference:uo,onMeasurePick:Kn,onMeasureHoverPoint:Qo,activeMeasurementId:_e,measureState:Ot,measureModeActive:Nn,allowMeshVertexSnap:!Ke,onViewerAlertChange:lt,onStepModuleTransformDetectedChange:nr,urdfPosePicker:Vn}),p?null:d.jsx(Eee,{menu:vn,positionStyle:or,onClose:cn,onCopyReference:br,onSelect:Et,onFocus:Zr,onExitAllIsolate:en,onHideOther:Pr,onHideAll:te,onHide:We,onReveal:Re,onResetZoom:wt,onZoomToFit:dt,onExpandSelected:pt,onCollapseSelected:at,onExpandAll:Ae,onCollapseAll:jt}),!p&&cr?d.jsx("div",{className:"pointer-events-none absolute z-30 flex min-w-0 items-center justify-center px-4 py-4",style:Dn,children:d.jsxs(Ky,{variant:"destructive",className:"cad-glass-popover pointer-events-auto w-full max-w-xl min-w-0 p-4 text-center shadow-lg",children:[d.jsx("p",{className:"col-start-1 text-[11px] font-semibold uppercase tracking-[0.16em] text-destructive",children:Jr?"Outside this viewer's root":"File does not exist"}),d.jsx(RQ,{className:"col-start-1 mt-1 line-clamp-none text-lg text-foreground",children:Jr?"Outside this viewer's root":"File does not exist"}),d.jsxs(PQ,{className:"col-start-1 mt-1 text-sm leading-6 text-muted-foreground",children:[d.jsx("code",{className:"rounded-md bg-muted px-2 py-1 text-xs text-foreground",children:cr}),Jr?d.jsxs("span",{className:"mt-2 block text-xs leading-5",children:["This viewer serves"," ",d.jsx("code",{className:"rounded bg-muted px-1 py-0.5 text-foreground",children:bn}),". The path above is outside it — most likely a viewer from another checkout is holding this port. Start one for this workspace on a free port instead."]}):null]})]})}):null,!p&&gs?d.jsx("div",{className:"pointer-events-none absolute z-30 flex min-w-0 items-center justify-center px-3 py-3 sm:px-4",style:Dn,children:d.jsxs("div",{role:"alert","aria-label":Sr,title:Sr,className:J("cad-glass-popover pointer-events-auto flex w-full max-w-sm min-w-0 flex-col items-center gap-2 rounded-md border px-4 py-3 text-center shadow-md",di.borderClassName),children:[d.jsx("span",{className:J("flex size-9 shrink-0 items-center justify-center rounded-full border",di.iconClassName),children:d.jsx(YB,{className:"size-5",strokeWidth:2,"aria-hidden":"true"})}),d.jsxs("div",{className:"min-w-0 max-w-full",children:[d.jsx("span",{className:J("text-[10px] font-medium uppercase tracking-[0.08em]",di.labelClassName),children:di.label}),d.jsx("div",{className:"mt-1 line-clamp-2 min-w-0 max-w-full break-words text-sm font-medium leading-5 text-foreground",children:x.title||x.summary||"Viewer issue"}),x.message?d.jsx("p",{className:"mt-1 line-clamp-3 min-w-0 max-w-full break-words text-xs leading-5 text-muted-foreground",children:x.message}):null,x.resolution?d.jsx("p",{className:"mt-1 line-clamp-2 min-w-0 max-w-full break-words text-xs leading-5 text-muted-foreground",children:x.resolution}):null]})]})}):null,!p&&S?d.jsx("div",{className:"pointer-events-none absolute z-20 flex justify-center px-4",style:Rt,children:d.jsx(Ky,{role:"status",className:"cad-glass-popover w-auto px-3 py-1.5 text-[11px] font-medium text-popover-foreground shadow-sm",children:"STEP changed. Updating/regenerating references..."})}):null,!p&&!S&&rr?d.jsx("div",{className:"pointer-events-none absolute z-20 flex justify-center px-4",style:Rt,children:d.jsx(Ky,{role:"status",className:"cad-glass-popover w-auto px-3 py-1.5 text-[11px] font-medium text-popover-foreground shadow-sm",children:"Preparing selectable topology..."})}):null,!p&&oe?d.jsx(Gt,{type:"button",variant:"outline",size:"icon-xs",className:"cad-glass-popover pointer-events-auto absolute z-30 size-6 rounded-md border-sidebar-border p-0 text-popover-foreground shadow-sm",style:Fe,onClick:()=>{Vn?.onCancel?.()},"aria-label":"Exit Select Pose",title:"Exit Select Pose",children:d.jsx(Kc,{className:"size-3.5",strokeWidth:2,"aria-hidden":"true"})}):null,!p&&oe?d.jsx("div",{className:"pointer-events-none absolute z-20 flex justify-center px-4",style:Rt,children:d.jsx(Ky,{role:"status",className:"cad-glass-popover w-auto px-3 py-1.5 text-[11px] font-medium text-popover-foreground shadow-sm",children:fe})}):null,!p&&Ye&&!S&&!rr&&!Or&&!k?d.jsxs("div",{className:"pointer-events-none absolute z-20 flex min-w-0 justify-center",style:Xn,children:[d.jsx("span",{"aria-hidden":"true",className:J("pointer-events-none invisible absolute left-0 top-0",S_),children:d.jsx("span",{ref:It,className:"block min-w-0 max-w-full truncate",children:xn})}),d.jsx(fee,{tipId:ree.COPY_REFERENCE,active:Ye!=="screenshot"&&xr,side:"top",align:"center",children:d.jsx(Gt,{type:"button",variant:"default",size:"sm",className:J("pointer-events-auto border border-primary/20 bg-primary/85 text-primary-foreground shadow-lg shadow-black/20 hover:bg-primary/75 focus-visible:ring-primary/35",S_),disabled:ui,onClick:()=>{if(Ye==="screenshot"){fo?.();return}qn()},title:Bo,children:d.jsx("span",{className:"block min-w-0 max-w-full truncate",children:Di})})})]}):null]})}function vee({...e}){return d.jsx(rB,{"data-slot":"collapsible",...e})}const Aee=h.forwardRef(function({...t},n){return d.jsx(tB,{ref:n,"data-slot":"collapsible-trigger",...t})}),Cee=h.forwardRef(function({...t},n){return d.jsx(nB,{ref:n,"data-slot":"collapsible-content",...t})});function ud({className:e,viewportClassName:t,scrollbars:n="vertical",type:r,scrollHideDelay:o,children:i,...s}){const a=Array.isArray(n)?n:[n].filter(Boolean),l=a.includes("horizontal"),c=a.includes("vertical"),u=l?"overflow-x-auto":"overflow-x-hidden",f=c?"overflow-y-auto":"overflow-y-hidden";return d.jsx("div",{"data-slot":"scroll-area",className:J("relative",e),...s,children:d.jsx("div",{"data-slot":"scroll-area-viewport",className:J("size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1",u,f,t),children:d.jsx("div",{className:J("min-w-full",l?"w-max":"w-full"),children:i})})})}function Ks(e){return String(e||"").trim()}function Mee(e){return Ks(e?.kind).toLowerCase()}function Iee(e){if(!e||typeof e!="object")return null;const t=Ks(e.url);return t?{url:t,hash:Ks(e.hash),bytes:Number.isFinite(Number(e.bytes))&&Number(e.bytes)>=0?Number(e.bytes):0}:null}function E_(e,t){const n=e?.relations?.[t];if(!n||typeof n!="object")return null;const r=Ks(n.url);return r?{url:r,hash:Ks(n.hash),bytes:Number.isFinite(Number(n.bytes))&&Number(n.bytes)>=0?Number(n.bytes):0}:null}function PA(e,t){const n=Ks(t).toLowerCase(),r=Mee(e),o=Nr(e);return n==="urdf"&&r==="srdf"?E_(e,"urdf"):n===r||n===o||o===Q.STEP&&["glb","topology","selectortopology","displayedgetopology"].includes(n)||r==="srdf"&&n==="srdf"?Iee(e):n===Q.GLB?E_(e,Q.GLB):null}function ar(e,t){return Ks(PA(e,t)?.url)}function Hn(e,t){return Ks(PA(e,t)?.hash)}function JD(e,t){const n=Number(PA(e,t)?.bytes);return Number.isFinite(n)&&n>=0?n:0}function OA(e){return ar(e,cd(e))}function pw(e){return Hn(e,cd(e))}function Nee(e){return JD(e,cd(e))}function kA(e){return ar(e,"topology")||ar(e,"glb")}function w_(e){return ar(e,"selectorTopology")||kA(e)}function v_(e){return ar(e,"displayEdgeTopology")||kA(e)}function Hh(e){return[Hn(e,"urdf"),Hn(e,"srdf"),Hn(e,"sdf")].filter(Boolean).join(":")}function QD(e){return String(e?.kind==="assembly"?Hn(e,"glb"):pw(e))}function Tee(e){return Hn(e,"selectorTopology")||Ks(e?.hash)}function bf(e){if(Nr(e)===Q.STEP)return!!(ar(e,"glb")&&Hn(e,"glb"));const t=cd(e);return!!(ar(e,t)&&Hn(e,t))}function Zy(e){return Ks(e?.kind).toLowerCase()===Q.SDF?!!(ar(e,"sdf")&&Hn(e,"sdf")):!!(ar(e,"urdf")&&Hn(e,"urdf"))}function m1(e){return!!(Nr(e)===Q.STEP&&ar(e,"glb")&&Hn(e,"selectorTopology"))}function A_(e){return!!(Nr(e)===Q.STEP&&ar(e,"glb")&&Hn(e,"displayEdgeTopology"))}function p1(e){return!!(ar(e,"dxf")&&Hn(e,"dxf"))}function eL(e){return Nr(e)===Q.DXF&&Ks(e?.drawingProfile)==="drawing"}function _ee(e){return!!(ar(e,"implicit")&&Hn(e,"implicit"))}function Ree(e){return Nr(e)===Q.STEP?Ks(e?.moduleUrl):""}const Pee=3,Oee=Object.freeze(["missing_glb","missing_step_topology","missing_edge_topology","missing_surface_edge_attributes","missing_selector_topology","missing_source_path","missing_step_hash","stale_step_artifact","unsupported_step_topology"]),kee=new Set(Oee),tL=/\.(step|stp)$/i;function nm(e){return String(e||"").trim().replace(/\\/g,"/").replace(/\/+$/,"")}function Dee(e){return e?Array.isArray(e)?e:typeof e!="string"&&typeof e[Symbol.iterator]=="function"?Array.from(e):[e]:[]}function nL(e,t){const n=nm(t);return n&&e.add(n),n}function Jy(e,t){const n=nL(e,t);if(!tL.test(n))return;const r=n.lastIndexOf("/"),o=r>=0?`${n.slice(0,r)}/`:"",i=r>=0?n.slice(r+1):n;e.add(`${o}.${i}.glb`)}function Lee(e,t){const n=nm(e),r=nm(t);return!!(n&&r&&n===r)}function C_(e,t){return t.some(n=>Lee(e,n))}function Fee(e){const t=Number(e?.failureCount||0);return Number.isFinite(t)&&t>0?Math.trunc(t):0}function jee(e=null,t=e?.artifact){const n=new Set;return Jy(n,e?.file),Jy(n,e?.rootRelativeFile),Jy(n,t?.stepPath),tL.test(nm(t?.sourcePath))&&Jy(n,t?.sourcePath),nL(n,t?.packagePath),[...n]}function hw({entry:e=null,artifact:t=e?.artifact,generationState:n=null,activeGenerationFiles:r=[]}={}){const o=jee(e,t);if(String(n?.status||"").trim().toLowerCase()==="loading"){const i=nm(n?.file);if(!i||o.length===0||C_(i,o))return!0}return Dee(r).map(nm).filter(Boolean).some(i=>C_(i,o))}function zee({entry:e=null,artifact:t=e?.artifact,sourceFormat:n=Q.STEP,generationAvailable:r=!0,generationState:o=null,activeGenerationFiles:i=[]}={}){const s={...e||{},artifact:t},a=hw({entry:s,artifact:t,generationState:o,activeGenerationFiles:i});return DA(s,n,{generationAvailable:r||a})?a?!0:Fee(o)<Pee:!1}function Bee(e,t){return t===Q.STEP&&e?.artifact?.ok===!1?e.artifact:null}function Vee(e,t){return t===Q.STEP&&e?.artifact?.ok===!1&&(e.artifact.stale===!0||String(e.artifact.error||"")==="stale_step_artifact")}function DA(e,t,{generationAvailable:n=!0}={}){return!n||t!==Q.STEP||e?.artifact?.ok?!1:kee.has(String(e?.artifact?.error||""))}function $ee(e,t,n={}){return t===Q.STEP&&e?.artifact?.ok===!1&&!DA(e,t,n)}function rL(e,{sourceFormat:t="",hasMesh:n=!0,hasDxf:r=!0,hasImplicit:o=!0,hasUrdf:i=!0,activeStepArtifactGenerationFile:s="",activeStepArtifactGenerationFiles:a=[],loadingFiles:l=[],stepArtifactGenerationAvailable:c=!0}={}){const u=String(t||"").trim().toLowerCase(),f=new Set([...Array.isArray(a)?a:a?[a]:[],...Array.isArray(s)?s:s?[s]:[]].map(O=>String(O||"").trim()).filter(Boolean)),p={[Mo.MESH]:n,[Mo.DRAWING]:r,[Mo.IMPLICIT]:o,[Mo.ROBOT]:i}[gf(u)]===!1,b=[...f],y=hw({entry:e,activeGenerationFiles:b}),E=DA(e,u,{generationAvailable:c||y}),C=Vee(e,u),A=String(e?.artifact?.error||"").trim(),N=!y&&$ee(e,u,{generationAvailable:c}),w=!!(E&&y),_=hw({entry:e,activeGenerationFiles:l});return{artifactBuildable:E,artifactGenerating:w,artifactStale:C,artifactWarning:N,loading:w||_,pending:p,sourceFormat:u,statusLabel:w?"generating artifact":_?"loading":N?C?"artifact stale":A==="missing_glb"?"artifacts missing":"artifact warning":E?"artifact generates on open":p?"pending":"ready"}}function oL(e){const t=String(e?.artifact?.sourceKind||"").trim().toLowerCase();if(t==="python")return t;const n=String(e?.sourceKind||e?.stepSourceKind||"").trim().toLowerCase();return n==="python"?n:""}function iL(e){if(String(e?.sourceKind||"").trim().toLowerCase()==="python")return!0;const t=String(e?.source?.sourcePath||e?.source?.file||e?.file||"").toLowerCase();return t.endsWith(".step.py")||t.endsWith(".dxf.py")}const Gee=[Mr.DXF,Mr.IMPLICIT,Mr.ROBOT,Mr.STL_MESH,Mr.THREE_MF_MESH,Mr.GLB_MESH,Mr.STEP];function Uee(e,{sourceFormat:t="",status:n={}}={}){const r=n||{};if(r.artifactGenerating||r.loading)return Mr.LOADING;const o=kl(e?.kind),i=new Set([oT(kl(t||e?.kind)),oT(o)]);return o==="srdf"&&i.add(Mr.ROBOT),Gee.find(s=>i.has(s))||Mr.STEP}const ag="https://github.com/earthtojake/text-to-cad",Hee="https://discord.gg/5FGB9DwJYU",Hc="npx skills add earthtojake/text-to-cad",Wee="Update the text-to-cad skills with `npx skills add earthtojake/text-to-cad`.";function Kee(e=""){return String(e??"").trim().replace(/\\/g,"/").replace(/^\/+/,"").replace(/\/+$/,"")}function sL(e="",t=ag){return _0(e)||_0(t)}function qee(e="",t=Hee){return _0(e)||_0(t)}function LA(e="",t=ag){const n=sL(e,t);if(!n)return"";try{const r=new URL(n);if(r.hostname.toLowerCase()!=="github.com")return n.replace(/\/+$/,"");const[,o="",i=""]=r.pathname.split("/");return!o||!i?n.replace(/\/+$/,""):new URL(`/${o}/${i}`,r.origin).href.replace(/\/+$/,"")}catch{return""}}function Yee(e="",t="",n=ag){const r=String(e||"").trim(),o=LA(t,n);return!r||!o?"":`${o}/releases/tag/${encodeURIComponent(r)}`}function Xee(e="",t=ag){const n=LA(e,t);return n?`${n}/releases/latest`:""}function Zee(e="",t=ag){const n=LA(e,t);if(!n)return"";try{const r=new URL(n);if(r.hostname.toLowerCase()!=="github.com")return"";const[,o="",i=""]=r.pathname.split("/"),s=decodeURIComponent(o),a=decodeURIComponent(i);return!s||!a?"":`https://api.github.com/repos/${encodeURIComponent(s)}/${encodeURIComponent(a)}/releases/latest`}catch{return""}}function aL(e="",t=""){const n=M_(e),r=M_(t);return!!(n&&r&&nte(r,n)>0)}function Jee(e="",t=""){return aL(e,t)}function Qee(e="",t=Hc){const n=tte(e);return/^npx\s+skills\s+(?:install|add)(?:\s+\S+)+$/iu.test(n)?n:String(t||"").trim()}function ete(e="",t=Hc){const n=String(e||""),r=[...Array.from(n.matchAll(/`([^`\r\n]*\bnpx\s+skills\s+(?:install|add)\b[^`\r\n]*)`/giu),o=>o[1]),...Array.from(n.matchAll(/(?:^|\n)\s*([^\r\n]*\bnpx\s+skills\s+(?:install|add)\b[^\r\n]*)/giu),o=>o[1])];for(const o of r){const i=Qee(o,"");if(i)return i}return String(t||"").trim()}function _0(e=""){const t=String(e??"").trim();if(!t)return"";const n=/^[a-z][a-z\d+.-]*:\/\//i.test(t)?t:`https://${t.replace(/^\/+/,"")}`;try{const r=new URL(n);return["http:","https:"].includes(r.protocol)?r.href:""}catch{return""}}function tte(e=""){return String(e||"").trim().replace(/^`+|`+$/g,"").replace(/^\s*(?:\$|>)\s*/u,"").replace(/\s+/gu," ")}function M_(e=""){const t=String(e??"").trim().replace(/^refs\/tags\//i,"").replace(/^v/i,"");if(!t)return null;const n=t.split("+")[0],[r="",...o]=n.split("-"),i=r.match(/^(\d+)(?:\.(\d+))?(?:\.(\d+))?$/u);return i?{parts:[Number(i[1]),Number(i[2]||0),Number(i[3]||0)],prerelease:o.join("-").split(".").filter(Boolean)}:null}function nte(e,t){for(let n=0;n<3;n+=1){const r=e.parts[n]-t.parts[n];if(r!==0)return r}return rte(e.prerelease,t.prerelease)}function rte(e,t){if(!e.length&&!t.length)return 0;if(!e.length)return 1;if(!t.length)return-1;const n=Math.max(e.length,t.length);for(let r=0;r<n;r+=1){const o=e[r],i=t[r];if(o===void 0)return-1;if(i===void 0)return 1;if(o===i)continue;const s=/^\d+$/u.test(o),a=/^\d+$/u.test(i);return s&&a?Number(o)-Number(i):s?-1:a?1:o.localeCompare(i)}return 0}const ote={},gw="file";function At(e){return String(e?.file||"").trim()}function _u(e){const t=At(e);return String(e?.rootRelativeFile||"").trim()||t}function lL(e){return _u(e).replace(/\.(step|stp|stl|3mf|glb|dxf|urdf|srdf|sdf)$/i,"")}function ite(e,{history:t="replace"}={}){const n=e.searchParams.toString(),r=`${e.pathname}${n?`?${n}`:""}${e.hash}`,o=`${window.location.pathname}${window.location.search}${window.location.hash}`;return r===o?!1:(t==="push"&&typeof window.history?.pushState=="function"?window.history.pushState({},"",r):window.history.replaceState({},"",r),!0)}function FA(e){return String(e||"").trim().replace(/\\/g,"/").replace(/\/+$/,"").replace(/^\/+/,"")}function Em(e){return FA(e)}function ste(e){const t=/\.([^.\/]+)$/.exec(String(e||"").trim());return t?`.${t[1]}`:""}function ate(e,t){const n=FA(e),r=String(t||"").trim();return!n||!r||n.toLowerCase().endsWith(r.toLowerCase())?n:`${n}${r}`}function lte(e){const t=new Set,n=s=>{const a=FA(s);a&&t.add(a)},r=_u(e);n(r);const o=lL(e),i=ste(r);return n(ate(o,i)),t}function cte(){return Kee(ote?.VIEWER_DEFAULT_FILE)||null}function Rb(){if(typeof window>"u")return null;const t=new URLSearchParams(window.location.search).get(gw);return(typeof t=="string"?Em(t):"")||null}function yw(e,t){const n=Em(t);return n&&e.find(r=>lte(r).has(n))||null}function ute({explicitFileParam:e="",matchingEntry:t=null,selectedEntry:n=null,catalogHydrated:r=!1,catalogRefreshing:o=!1}={}){return!Em(e)||n?!1:t?!0:!r||o}function dte({explicitFileParam:e="",matchingEntry:t=null,selectedEntry:n=null,catalogHydrated:r=!1,catalogRefreshing:o=!1}={}){const i=Em(e);return!i||n||t||!r||o?"":i}function fte(e,{defaultFile:t=cte()}={}){const n=Rb();if(n){const o=yw(e,n);return o?At(o):""}const r=yw(e,Em(t));return r?At(r):""}function xp(e,{history:t="replace"}={}){if(typeof window>"u")return;const n=Em(e),r=new URL(window.location.href);r.searchParams.delete("refs"),n?r.searchParams.set(gw,n):r.searchParams.delete(gw),ite(r,{history:t})}function cL(e,t){return String(e||"").localeCompare(String(t||""),void 0,{numeric:!0,sensitivity:"base"})}function mte(e){const t=At(e);if(!t)return"";const n=t.split("/");return n[n.length-1]||t}function pte(e){const t=e?.source,n=String(e?.sourcePath||(t&&typeof t=="object"?t.sourcePath||t.path||t.file:"")||"").trim();if(!n)return"";const r=n.split("/");return r[r.length-1]||""}function jA(e){const n=String(e?.rootRelativeFile||At(e)||"").trim().split("/").filter(Boolean);return n.pop(),n.join("/")}function uL(e){return pte(e)||mte(e)}function Ll(e){return uL(e)}function hte(e,t){const n=Ll(e).localeCompare(Ll(t),void 0,{numeric:!0,sensitivity:"base"});return n!==0?n:At(e).localeCompare(At(t),void 0,{numeric:!0,sensitivity:"base"})}function I_(e,t){return{id:e,name:t,entries:[],children:new Map}}function dL(e){return{id:e.id,name:e.name,entries:[...e.entries].sort(hte),directories:[...e.children.values()].map(dL).sort((t,n)=>cL(t.name,n.name))}}function N_(e,{rootName:t="Directory"}={}){const n=I_("",String(t||"Directory"));for(const r of e){const o=jA(r),i=o?o.split("/"):[];let s=n,a="";for(const l of i){a=a?`${a}/${l}`:l;const c=s.children.get(l)||I_(a,l);s.children.set(l,c),s=c}s.entries.push(r)}return dL(n)}function fL(e,t=[]){for(const n of e.directories||[])t.push(n.id),fL(n,t);return t}function gte(e,t){const n=String(t||"").trim();if(!e)return[];if(!n)return[e];const r=[],o=i=>{if(r.push(i),String(i.id||"")===n)return!0;for(const s of i.directories||[])if(o(s))return!0;return r.pop(),!1};return o(e)?r:[]}function gx(e){return[...(e.directories||[]).map(t=>({type:"directory",key:`directory:${t.id}`,label:t.name,value:t})),...(e.entries||[]).map(t=>({type:"entry",key:`entry:${At(t)}`,label:Ll(t),value:t}))].sort((t,n)=>{const r=cL(t.label,n.label);return r!==0?r:t.key.localeCompare(n.key,void 0,{numeric:!0,sensitivity:"base"})})}function yte(e){if(!e)return[];const t=String(e).split("/").filter(Boolean),n=[];let r="";for(const o of t)r=r?`${r}/${o}`:o,n.push(r);return n}const bte={[Mr.LOADING]:f2,[Mr.STEP]:iv,[Mr.STL_MESH]:t5,[Mr.THREE_MF_MESH]:e5,[Mr.GLB_MESH]:QB,[Mr.DXF]:JB,[Mr.ROBOT]:ZB,[Mr.IMPLICIT]:XB};function xte(e,t,n){return bte[Uee(e,{sourceFormat:t,status:n})]||iv}function zA({entry:e,sourceFormat:t="",status:n={},className:r,badgeClassName:o,spinning:i=!1}){const s=xte(e,t,n),a=iL(e),l=d.jsx(s,{className:J(r,i&&"animate-spin"),"aria-hidden":"true"});return a?d.jsxs("span",{className:"relative inline-flex shrink-0 items-center justify-center","aria-hidden":"true",children:[l,d.jsx("span",{className:J("absolute -bottom-1 -right-1 flex size-2.5 items-center justify-center rounded-[3px]","border border-sidebar bg-sidebar text-sidebar-foreground shadow-sm",o),children:d.jsx(n5,{className:"size-2",strokeWidth:2.5})})]}):l}function bw({...e}){return d.jsx(aB,{"data-slot":"context-menu",...e})}const xw=h.forwardRef(function({...t},n){return d.jsx(oB,{ref:n,"data-slot":"context-menu-trigger",...t})}),Sw=h.forwardRef(function({className:t,...n},r){return d.jsx(iB,{children:d.jsx(sB,{ref:r,"data-slot":"context-menu-content",className:J("cad-glass-popover z-50 min-w-44 origin-(--radix-context-menu-content-transform-origin) overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95",t),...n})})});function vl({className:e,inset:t,variant:n="default",...r}){return d.jsx(cB,{"data-slot":"context-menu-item","data-inset":t,"data-variant":n,className:J("relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden transition-colors data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-destructive focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive",e),...r})}function Ew({className:e,...t}){return d.jsx(lB,{"data-slot":"context-menu-separator",className:J("-mx-1 my-1 h-px bg-border",e),...t})}function lg(e){return String(e??"").trim()}function ci(e){return lg(e).replace(/\\/g,"/").replace(/^\/+/,"").replace(/\/+$/,"")}function T_(e){return lg(e).replace(/\\/g,"/").replace(/\/+$/,"")}function ww(e){return lg(e).replace(/[?#].*$/,"")}function Ste(e){const t=lg(e);if(!t)return"";try{return new URL(t,"http://cad.local").pathname}catch{return ww(t)}}function __(e,t){const n=T_(e),r=T_(t);return!n||!r||n===r?"":n.startsWith(`${r}/`)?n.slice(r.length+1):""}function vw(e,t=""){const n=ci(e),r=ci(t);return!n||!r?n:n===r?"":n.startsWith(`${r}/`)?n.slice(r.length+1):n}function R_(e,t=""){const n=ci(e),r=ci(t);if(!n||!r)return n;const o=r.split("/").filter(Boolean);if(o.pop(),!o.length)return n;const s=`/${o.join("/")}/`,a=`/${n}`,l=a.lastIndexOf(s);return l>=0?a.slice(l+1):n}function rm(e,t={},{anchorFile:n=""}={}){const r=lg(e);if(!r)return"";const o=__(ww(r),t?.rootPath);if(o)return ci(o);const i=__(ww(r),t?.directoryRoot);if(i)return R_(vw(i,t?.rootDir),n);const s=ci(Ste(r));return R_(vw(s,t?.rootDir),n)}function Sh(e){return ci(e).split("/").filter(Boolean).pop()||""}function Hu(e){const t=String(e||"").trim().replace(/\\/g,"/").replace(/\/+$/,"");return t.startsWith("/")?t:t.replace(/^\/+/,"")}function Ete(e){const t=ci(e).split("/").filter(Boolean);return t.pop(),t.join("/")}function wte(...e){return e.map(t=>ci(t)).filter(Boolean).join("/")}function mL(e){return Sh(e).replace(/\.(step|stp)$/i,".py")}function vte(e){const t=Ete(e),n=mL(e);return wte(t,n)}function Ate(e){return/\.(step|stp)$/i.test(ci(e))}function Cte(e){return Hu(e?.sourceFile)||Hu(e?.source?.file)||Hu(e?.source?.path)}function Mte(e){return Hu(e?.sourceDirectoryFile)||Hu(e?.source?.directoryFile)||Hu(e?.source?.sourcePath)}function Ite(e,t={}){return rm(e?.assetFile||e?.artifactFile||e?.artifact?.file,t,{anchorFile:e?.file})||rm(e?.url,t,{anchorFile:e?.file})}function Nte(e){return String(e||"").includes("\\")?"\\":"/"}function P_(e,t){const n=String(e||"").trim(),r=ci(t);if(!n||!r)return n||r;const o=Nte(n),i=n.replace(/[\\/]+$/,""),s=r.replace(/\//g,o);return`${i}${o}${s}`}function Tte(e,t){const n=ci(e),r=ci(t);return n?r?n===r||n.startsWith(`${r}/`):!0:!1}function _te(e,t){return Tte(e,t)?vw(e,t):""}function Rte(e,{stepSourceStatus:t=null,viewerServerInfo:n={}}={}){const r=At(e);if(!r)return{artifact:null,output:null,source:null};const o=rm(e?.file||r,n)||ci(e?.file||r),i=Sh(o),s=Ite(e,n),a=Sh(s),l=String(t?.sourceKind||oL(e)).trim().toLowerCase(),c=Hu(t?.sourcePath),u=Cte(e),f=Mte(e),m=l==="python"&&Ate(o)?vte(o):"",p=u||c||m,b=c||f,y=!!(n?.rootDir||n?.rootPath||n?.directoryRoot),x=p?y?rm(p,n,{anchorFile:o})||p:b?"":u||m:"",S=x||p?Sh(x||p)||mL(o):"";return{artifact:a?{asset:"artifact",fileRef:r,filename:a,label:a,rootRelativePath:s}:null,output:{asset:"output",fileRef:r,filename:i||"download",label:i||"download",rootRelativePath:o},source:S?{asset:"source",fileRef:r,filename:S,label:S,rootRelativePath:x,directoryRelativePath:b}:null}}function O_(e,t="output",n=""){const r=`/__cad/download?file=${encodeURIComponent(e)}&asset=${encodeURIComponent(t||"output")}`;if(!n)return r;try{return new URL(r,n).toString()}catch{return r}}function Pte(e,t="output",n=""){const r=`/__cad/reveal?file=${encodeURIComponent(e)}&asset=${encodeURIComponent(t||"output")}`;if(!n)return r;try{return new URL(r,n).toString()}catch{return r}}function Ote(e,t={}){const n=ci(t?.rootDir),r=ci(e?.directoryRelativePath),i=_te(r,n)||ci(e?.rootRelativePath),s=i?rm(i,t,{anchorFile:e?.fileRef}):"",a=s||r,l=s&&t?.rootPath?P_(t.rootPath,s):r&&t?.directoryRoot?P_(t.directoryRoot,r):"";return{path:l,filename:String(e?.filename||"").trim()||Sh(a||l),relativePath:a}}const kte=2e3,k_=1e4,Dte="dir",D_="file";function pL(e){return!e||typeof e!="object"?{schemaVersion:4,entries:[]}:{schemaVersion:4,entries:Array.isArray(e.entries)?e.entries:[]}}const R0=new Set;let Aw="",bo={manifest:pL(),revision:0,catalogHydrated:!1,catalogRefreshing:typeof window<"u",catalogError:"",activeDir:""},Qy=0,Sp=null,L_=!1;Aw=JSON.stringify(bo.manifest);function Cw(e,{hydrated:t=!0,refreshing:n=!1,error:r="",activeDir:o=bo.activeDir}={}){const i=pL(e),s=JSON.stringify(i),a=s!==Aw,l={manifest:a?i:bo.manifest,revision:bo.revision+1,catalogHydrated:t,catalogRefreshing:n,catalogError:r,activeDir:o};if(!(!a&&l.catalogHydrated===bo.catalogHydrated&&l.catalogRefreshing===bo.catalogRefreshing&&l.catalogError===bo.catalogError&&l.activeDir===bo.activeDir)){a&&(Aw=s),bo={...l};for(const c of R0)c()}}function Lte({refreshing:e=bo.catalogRefreshing,error:t=bo.catalogError,activeDir:n=bo.activeDir}={}){if(!(e===bo.catalogRefreshing&&t===bo.catalogError&&n===bo.activeDir)){bo={...bo,revision:bo.revision+1,catalogRefreshing:e,catalogError:t,activeDir:n};for(const r of R0)r()}}function Fte(e){if(typeof window>"u")return"";try{return String(new URL(window.location.href).searchParams.get(e)||"").trim()}catch{return""}}function BA(){if(typeof window>"u")return"";let e="";try{e=new URL(window.location.href).pathname}catch{return""}let t=e;try{t=decodeURIComponent(e)}catch{}const n=String(t||"").replace(/\/+$/,"");return n===""||n==="/"?"":n}function VA(e,{activeDir:t=BA(),includeFile:n=!1,params:r={}}={}){const o=new URL(e,"http://cad.local");if(t&&o.searchParams.set(Dte,t),n){const i=Fte(D_);i&&o.searchParams.set(D_,i)}for(const[i,s]of Object.entries(r)){const a=String(s??"").trim();a&&o.searchParams.set(i,a)}return`${o.pathname}${o.search}`}async function $A(e,t){try{const n=await e.json();return String(n?.error||n?.result?.error||n?.result?.validation?.error?.message||t).trim()||t}catch{return t}}async function jte(e,t,n,r){if(typeof AbortController!="function")return fetch(e,t);const o=new AbortController,i=setTimeout(()=>{o.abort()},n);try{return await fetch(e,{...t,signal:o.signal})}catch(s){throw s?.name==="AbortError"?new Error(r):s}finally{clearTimeout(i)}}async function Mw({markRefreshing:e=!bo.catalogHydrated}={}){if(typeof window>"u")return;if(Sp)return Sp;const t=++Qy,n=BA();return e&&Lte({refreshing:!0,error:"",activeDir:n}),Sp=(async()=>{try{const r=await jte(VA("/__cad/catalog",{activeDir:n,includeFile:!0}),{cache:"no-store"},k_,`Timed out loading CAD catalog after ${k_/1e3}s`);if(!r.ok)throw new Error(await $A(r,`Failed to read CAD catalog: ${r.status} ${r.statusText}`));const o=await r.json();t===Qy&&Cw(o,{hydrated:!0,refreshing:!1,error:"",activeDir:n})}catch(r){throw t===Qy&&Cw(bo.manifest,{hydrated:!0,refreshing:!1,error:r instanceof Error?r.message:String(r),activeDir:n}),r}finally{t===Qy&&(Sp=null)}})(),Sp}async function Iw(e,{signal:t}={}){if(typeof window>"u")return null;const n=String(e||"").trim();if(!n)throw new Error("Missing file");const r=await fetch(VA("/__cad/artifact",{params:{file:n}}),{method:"GET",cache:"no-store",signal:t});if(!r.ok)throw new Error(await $A(r,`Failed to check render artifact: ${r.status} ${r.statusText}`));return r.json()}async function zte(e,{force:t=!1,signal:n}={}){if(typeof window>"u")return null;const r=String(e||"").trim();if(!r)throw new Error("Missing file");const o=await fetch(VA("/__cad/artifact",{params:{file:r,...t?{force:"1"}:{}}}),{method:"POST",cache:"no-store",signal:n});if(!o.ok)throw new Error(await $A(o,`Failed to generate render artifact: ${o.status} ${o.statusText}`));const i=await o.json();return i?.catalog&&Cw(i.catalog),i}function F_(){return bo}function Bte(e){return R0.add(e),()=>{R0.delete(e)}}if(typeof window<"u"){const e=()=>{Mw({markRefreshing:!1}).catch(t=>{})};Mw().catch(t=>{}),L_||(L_=!0,window.setInterval(()=>{document.visibilityState!=="hidden"&&e()},kte),window.addEventListener("focus",e),document.addEventListener("visibilitychange",()=>{document.visibilityState!=="hidden"&&e()}))}const Vte=Object.freeze(["step","3mf","stl","glb"]),$te=Object.freeze(["dxf"]),Gte=Object.freeze(["stl","glb","3mf"]),j_=Object.freeze([]),Ute=Object.freeze({step:"STEP","3mf":"3MF",stl:"STL",glb:"GLB",dxf:"DXF"});function P0(e){const t=String(e||"").trim().toLowerCase();return Ute[t]||t.toUpperCase()}function Hte(e){return!(e?.source&&e.source.sourcePath)}function hL(e){const t=String(e||"").trim().toLowerCase();return t==="step"||t==="dxf"?`Download ${P0(t)}`:`Export ${P0(t)}`}function Wte(e){return String(e||"").trim().replace(/\\/g,"/")}function Kte(e){const t=String(e||"").trim().toLowerCase().replace(/^\./,"");return Vte.includes(t)||$te.includes(t)||Gte.includes(t)?t:""}async function qte({file:e,format:t}={}){const n=Wte(e),r=Kte(t);if(!n)throw new Error("Missing model file");if(!r)throw new Error(`Unsupported export format: ${t||"(missing)"}`);const o=await fetch(`/__cad/export?file=${encodeURIComponent(n)}&format=${encodeURIComponent(r)}`,{method:"POST"});let i=null;try{i=await o.json()}catch{i=null}if(i?.cancelled)return{cancelled:!0};if(!o.ok||!i?.ok)throw new Error(String(i?.error||`Export failed with HTTP ${o.status}`));return(i.catalogChanged||i.fallback)&&Mw({markRefreshing:!1}).catch(()=>{}),i}function GA(e){if(!e)return j_;const t=lx(e);return t==="dxf"&&e?.sourceKind!=="python"?j_:rT(t==="part"||t==="assembly"?"step":t)}function gL({entry:e,onRevealInExplorerView:t}){return typeof t!="function"?null:d.jsx(vl,{className:"text-xs",onSelect:()=>{t(e)},children:d.jsx("span",{className:"min-w-0 truncate",children:"Reveal in Explorer View"})})}function Yte({entry:e,asset:t,canRevealFileAssets:n,canCopyFileAssetLinks:r,canCopyFileAssetPaths:o,busyKey:i="",onRevealFileAsset:s,onRevealInExplorerView:a,onCopyFileAssetReference:l}){if(!t)return null;const c=`${t.fileRef}:${t.asset}`,u=i===c,f=typeof l=="function";return d.jsxs(d.Fragment,{children:[n?d.jsx(vl,{className:"text-xs",disabled:u,onSelect:()=>{s(e,t.asset,t)},children:d.jsx("span",{className:"min-w-0 truncate",children:"Reveal in Folder"})}):null,d.jsx(gL,{entry:e,onRevealInExplorerView:a}),o&&f?d.jsxs(d.Fragment,{children:[d.jsx(vl,{className:"text-xs",onSelect:()=>{l(e,t.asset,t,"filename")},children:d.jsx("span",{className:"min-w-0 truncate",children:"Copy Filename"})}),d.jsx(vl,{className:"text-xs",onSelect:()=>{l(e,t.asset,t,"path")},children:d.jsx("span",{className:"min-w-0 truncate",children:"Copy Path"})}),d.jsx(vl,{className:"text-xs",onSelect:()=>{l(e,t.asset,t,"relativePath")},children:d.jsx("span",{className:"min-w-0 truncate",children:"Copy Relative Path"})})]}):null,r&&f?d.jsx(vl,{className:"text-xs",onSelect:()=>{l(e,t.asset,t,"link")},children:d.jsx("span",{className:"min-w-0 truncate",children:"Copy Link"})}):null]})}function Xte({entry:e,busyKey:t="",onExportModelFile:n}){const r=GA(e);if(typeof n!="function"||!r.length)return null;const o=String(e?.file||e?.id||"").trim();return Hte(e),d.jsxs(d.Fragment,{children:[d.jsx(Ew,{}),r.map(i=>{const s=`${o}:export:${i}`;return d.jsx(vl,{className:"text-xs",disabled:t===s,onSelect:()=>{n(e,i)},children:d.jsx("span",{className:"min-w-0 truncate",children:hL(i)})},i)})]})}function Nw({entry:e,canRevealFileAssets:t=!1,canCopyFileAssetLinks:n=!1,canCopyFileAssetPaths:r=!1,busyKey:o="",onDownloadFileAsset:i,onExportModelFile:s,onRevealFileAsset:a,onRevealInExplorerView:l,onCopyFileAssetReference:c,children:u}){const f=e&&typeof l=="function",m=e&&typeof i=="function",p=e&&typeof s=="function"&&GA(e).length>0;if(!f&&!m&&!p)return u;const b=Rte(e);return!f&&!b.output&&!p?u:d.jsxs(bw,{modal:!1,children:[d.jsx(xw,{asChild:!0,children:u}),d.jsxs(Sw,{className:"w-64",children:[!b.output||!m?d.jsx(gL,{entry:e,onRevealInExplorerView:l}):null,b.output&&m?d.jsx(Yte,{entry:e,asset:b.output,canRevealFileAssets:t&&typeof a=="function",canCopyFileAssetLinks:n,canCopyFileAssetPaths:r,busyKey:o,onRevealFileAsset:a,onRevealInExplorerView:l,onCopyFileAssetReference:c}):null,d.jsx(Xte,{entry:e,busyKey:o,onExportModelFile:s})]})]})}const Zte=150,Ep="calc(100vw - 0.75rem)",z_="min(18rem, calc(100vw - 0.75rem))";function yL({entry:e,depth:t,selectedKey:n,onSelectEntry:r,entrySourceFormat:o,entryHasMesh:i,entryHasDxf:s,entryHasUrdf:a,activeGenerationFiles:l=[],activeStepArtifactGenerationFile:c="",loadingFiles:u=[],stepArtifactGenerationAvailable:f=!0,canRevealFileAssets:m=!1,canCopyFileAssetLinks:p=!1,canCopyFileAssetPaths:b=!1,fileAccessBusyKey:y="",onDownloadFileAsset:x,onExportModelFile:S,onRevealFileAsset:E,onRevealInExplorerView:C,onCopyFileAssetReference:A,nested:N=!1}){const{isMobile:w,setOpenMobile:_}=Zh(),I=At(e),R=I===n,O=Ll(e),F=o(e),V=rL(e,{sourceFormat:F,hasMesh:i(e),hasDxf:s(e),hasUrdf:a(e),activeStepArtifactGenerationFile:c,loadingFiles:u,stepArtifactGenerationAvailable:f}),$=[O,iL(e)?"Python-backed":"",V.statusLabel,e?.kind,String(e?.file||"")].filter(Boolean).join(" | "),K=d.jsxs(q2,{type:"button",isActive:R,size:"sm",title:$,className:J("min-w-0 w-full justify-start"),onClick:()=>{r(I),w&&_(!1)},tooltip:O,children:[d.jsx("span",{className:"relative flex size-4 shrink-0 items-center justify-center","aria-hidden":"true",children:d.jsx(zA,{entry:e,sourceFormat:F,status:V,className:"size-4",spinning:V.loading})}),d.jsx("span",{className:"block min-w-0 flex-1 max-w-full overflow-hidden text-ellipsis whitespace-nowrap",children:O})]});return d.jsx(Nw,{entry:e,canRevealFileAssets:m,canCopyFileAssetLinks:p,canCopyFileAssetPaths:b,busyKey:y,onDownloadFileAsset:x,onExportModelFile:S,onRevealFileAsset:E,onRevealInExplorerView:C,onCopyFileAssetReference:A,children:K})}function bL({directory:e,depth:t,queryActive:n,expandedDirectoryIds:r,onToggleDirectory:o,selectedKey:i,onSelectEntry:s,entrySourceFormat:a,entryHasMesh:l,entryHasDxf:c,entryHasUrdf:u,activeGenerationFiles:f=[],activeStepArtifactGenerationFile:m="",loadingFiles:p=[],stepArtifactGenerationAvailable:b=!0,canRevealFileAssets:y=!1,canCopyFileAssetLinks:x=!1,canCopyFileAssetPaths:S=!1,fileAccessBusyKey:E="",onDownloadFileAsset:C,onExportModelFile:A,onRevealFileAsset:N,onRevealInExplorerView:w,onCopyFileAssetReference:_,nested:I=!1}){const R=n||r.has(e.id),O=I?JM:K2;return d.jsx(vee,{asChild:!0,open:R,children:d.jsxs(O,{className:"min-w-0 w-full max-w-full",children:[d.jsx(Aee,{asChild:!0,children:d.jsxs(q2,{type:"button",size:"sm",title:e.name,"aria-disabled":n,className:J("group/directory min-w-0 w-full justify-start",n&&"cursor-default"),onClick:F=>{if(n){F.preventDefault();return}o(e.id)},children:[d.jsx(fm,{className:J("transition-transform",R&&"rotate-90"),"aria-hidden":"true"}),d.jsx("span",{className:"block min-w-0 flex-1 max-w-full overflow-hidden text-ellipsis whitespace-nowrap",children:e.name})]})}),d.jsx(Cee,{className:"min-w-0 w-full max-w-full",children:d.jsx(r$,{className:"min-w-0 w-full max-w-full",children:gx(e).map(F=>F.type==="directory"?d.jsx(bL,{directory:F.value,depth:t+1,queryActive:n,expandedDirectoryIds:r,onToggleDirectory:o,selectedKey:i,onSelectEntry:s,entrySourceFormat:a,entryHasMesh:l,entryHasDxf:c,entryHasUrdf:u,activeGenerationFiles:f,activeStepArtifactGenerationFile:m,loadingFiles:p,stepArtifactGenerationAvailable:b,canRevealFileAssets:y,canCopyFileAssetLinks:x,canCopyFileAssetPaths:S,fileAccessBusyKey:E,onDownloadFileAsset:C,onExportModelFile:A,onRevealFileAsset:N,onRevealInExplorerView:w,onCopyFileAssetReference:_,nested:!0},F.key):d.jsx(JM,{className:"min-w-0 w-full max-w-full",children:d.jsx(yL,{entry:F.value,depth:t+1,selectedKey:i,onSelectEntry:s,entrySourceFormat:a,entryHasMesh:l,entryHasDxf:c,entryHasUrdf:u,activeGenerationFiles:f,activeStepArtifactGenerationFile:m,loadingFiles:p,stepArtifactGenerationAvailable:b,canRevealFileAssets:y,canCopyFileAssetLinks:x,canCopyFileAssetPaths:S,fileAccessBusyKey:E,onDownloadFileAsset:C,onExportModelFile:A,onRevealFileAsset:N,onRevealInExplorerView:w,onCopyFileAssetReference:_,nested:!0})},F.key))})})]})})}function Jte({onStartResize:e}){const{isMobile:t,state:n}=Zh();return t||n!=="expanded"||typeof e!="function"?null:d.jsx(Gt,{type:"button",variant:"ghost",size:"sm","aria-label":"Resize file viewer sidebar",title:"Resize sidebar",onPointerDown:e,className:"group/sidebar-resize absolute inset-y-0 -right-1.5 z-30 flex h-auto w-3 cursor-col-resize touch-none items-stretch justify-center rounded-none px-0 py-0 hover:bg-transparent",children:d.jsx("span",{className:"w-px bg-transparent transition-colors group-hover/sidebar-resize:bg-ring group-focus-visible/sidebar-resize:bg-ring"})})}function Qte({query:e,onQueryChange:t,filteredEntries:n,catalogEntries:r,filteredEntriesTree:o,selectedKey:i,expandedDirectoryIds:s,onToggleDirectory:a,onSelectEntry:l,entrySourceFormat:c,entryHasMesh:u,entryHasDxf:f,entryHasUrdf:m,activeGenerationFiles:p=[],activeStepArtifactGenerationFile:b="",loadingFiles:y=[],stepArtifactGenerationAvailable:x=!0,canRevealFileAssets:S=!1,canCopyFileAssetLinks:E=!1,canCopyFileAssetPaths:C=!1,fileAccessBusyKey:A="",onDownloadFileAsset:N,onExportModelFile:w,onRevealFileAsset:_,onRevealInExplorerView:I,onCopyFileAssetReference:R,catalogHydrated:O=!1,catalogRefreshing:F=!1,catalogError:V="",resizable:$=!0,onStartResize:K}){const U=e.trim().length>0,Y=n.length>0,D=r.length>0,j=String(V||"").trim(),ee=!O||F&&!D;return d.jsxs(d.Fragment,{children:[d.jsx(ZV,{className:"gap-2",children:d.jsx(XV,{type:"search",placeholder:"Search files, ids, or paths...",value:e,onChange:X=>t(X.target.value),"aria-label":"Search CAD files",className:"h-7 text-xs md:text-xs"})}),d.jsx(JV,{children:d.jsx(ud,{className:"cad-file-viewer-scroll min-h-0 min-w-0 flex-1 overflow-x-hidden",type:"auto",children:d.jsx(QV,{children:d.jsx(e$,{children:Y?d.jsx(t$,{children:gx(o).map(X=>X.type==="directory"?d.jsx(bL,{directory:X.value,depth:0,queryActive:U,expandedDirectoryIds:s,onToggleDirectory:a,selectedKey:i,onSelectEntry:l,entrySourceFormat:c,entryHasMesh:u,entryHasDxf:f,entryHasUrdf:m,activeGenerationFiles:p,activeStepArtifactGenerationFile:b,loadingFiles:y,stepArtifactGenerationAvailable:x,canRevealFileAssets:S,canCopyFileAssetLinks:E,canCopyFileAssetPaths:C,fileAccessBusyKey:A,onDownloadFileAsset:N,onExportModelFile:w,onRevealFileAsset:_,onRevealInExplorerView:I,onCopyFileAssetReference:R},X.key):d.jsx(K2,{className:"min-w-0 w-full max-w-full",children:d.jsx(yL,{entry:X.value,depth:0,selectedKey:i,onSelectEntry:l,entrySourceFormat:c,entryHasMesh:u,entryHasDxf:f,entryHasUrdf:m,activeGenerationFiles:p,activeStepArtifactGenerationFile:b,loadingFiles:y,stepArtifactGenerationAvailable:x,canRevealFileAssets:S,canCopyFileAssetLinks:E,canCopyFileAssetPaths:C,fileAccessBusyKey:A,onDownloadFileAsset:N,onExportModelFile:w,onRevealFileAsset:_,onRevealInExplorerView:I,onCopyFileAssetReference:R})},X.key))}):j&&!D?d.jsxs("p",{className:"px-2 py-1 text-xs text-muted-foreground",children:["CAD catalog unavailable: ",j]}):ee?d.jsx("p",{className:"px-2 py-1 text-xs text-muted-foreground",children:"Loading CAD catalog..."}):D?d.jsx("p",{className:"px-2 py-1 text-xs text-muted-foreground",children:"No CAD entries match this filter."}):d.jsx("p",{className:"px-2 py-1 text-xs text-muted-foreground",children:"No CAD entries found."})})})})}),d.jsx(Jte,{onStartResize:$?K:null})]})}function ene({previewMode:e,query:t,onQueryChange:n,filteredEntries:r,catalogEntries:o,filteredEntriesTree:i,selectedKey:s,expandedDirectoryIds:a,onToggleDirectory:l,onSelectEntry:c,entrySourceFormat:u,entryHasMesh:f,entryHasDxf:m,entryHasUrdf:p,activeGenerationFiles:b=[],activeStepArtifactGenerationFile:y="",loadingFiles:x=[],stepArtifactGenerationAvailable:S=!0,canRevealFileAssets:E=!1,canCopyFileAssetLinks:C=!1,canCopyFileAssetPaths:A=!1,fileAccessBusyKey:N="",onDownloadFileAsset:w,onExportModelFile:_,onRevealFileAsset:I,onRevealInExplorerView:R,onCopyFileAssetReference:O,catalogHydrated:F=!1,catalogRefreshing:V=!1,catalogError:$="",resizable:K=!0,onStartResize:U}){const{isMobile:Y,state:D,openMobile:j,setOpenMobile:ee}=Zh();if(e)return null;const X=d.jsx(Qte,{query:t,onQueryChange:n,filteredEntries:r,catalogEntries:o,filteredEntriesTree:i,selectedKey:s,expandedDirectoryIds:a,onToggleDirectory:l,onSelectEntry:c,entrySourceFormat:u,entryHasMesh:f,entryHasDxf:m,entryHasUrdf:p,activeGenerationFiles:b,activeStepArtifactGenerationFile:y,loadingFiles:x,stepArtifactGenerationAvailable:S,canRevealFileAssets:E,canCopyFileAssetLinks:C,canCopyFileAssetPaths:A,fileAccessBusyKey:N,onDownloadFileAsset:w,onExportModelFile:_,onRevealFileAsset:I,onRevealInExplorerView:R,onCopyFileAssetReference:O,catalogHydrated:F,catalogRefreshing:V,catalogError:$,resizable:K,onStartResize:U});if(Y)return d.jsx(V2,{open:j,onOpenChange:ee,children:d.jsxs($2,{side:"left",showCloseButton:!1,className:"cad-glass-surface gap-0 p-0 text-sidebar-foreground",style:{width:z_,maxWidth:Ep},children:[d.jsxs(G2,{className:"sr-only",children:[d.jsx(U2,{children:"CAD Viewer"}),d.jsx(H2,{children:"Browse files in the CAD catalog."})]}),d.jsx("div",{className:"flex h-full min-h-0 w-full flex-col","aria-label":"CAD Viewer",children:X})]})});if(D!=="expanded")return null;const ve=`min(var(--sidebar-width), ${Ep})`,q=Y?{width:z_,maxWidth:Ep}:{width:ve,flexBasis:ve,minWidth:`min(${Zte}px, ${Ep})`,maxWidth:Ep};return d.jsx("aside",{className:J("cad-glass-surface pointer-events-auto z-30 flex h-full max-w-[calc(100vw_-_0.75rem)] flex-col border-r border-sidebar-border text-sidebar-foreground",Y?"absolute inset-y-0 left-0 shadow-xl":"relative shrink-0"),style:q,"aria-label":"CAD Viewer",children:X})}function tne({...e}){return d.jsx(bB,{"data-slot":"alert-dialog",...e})}h.forwardRef(function({...t},n){return d.jsx(uB,{ref:n,"data-slot":"alert-dialog-trigger",...t})});function nne({...e}){return d.jsx(yB,{"data-slot":"alert-dialog-portal",...e})}const rne=h.forwardRef(function({className:t,...n},r){return d.jsx(dB,{ref:r,"data-slot":"alert-dialog-overlay",className:J("fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0",t),...n})}),one=h.forwardRef(function({className:t,...n},r){return d.jsxs(nne,{children:[d.jsx(rne,{}),d.jsx(fB,{ref:r,"data-slot":"alert-dialog-content",className:J("cad-glass-popover fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-md border p-6 text-foreground shadow-lg duration-200 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 sm:max-w-lg",t),...n})]})});function ine({className:e,...t}){return d.jsx("div",{"data-slot":"alert-dialog-header",className:J("flex flex-col gap-2 text-center sm:text-left",e),...t})}function sne({className:e,...t}){return d.jsx("div",{"data-slot":"alert-dialog-footer",className:J("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",e),...t})}const ane=h.forwardRef(function({className:t,...n},r){return d.jsx(mB,{ref:r,"data-slot":"alert-dialog-title",className:J("text-lg font-semibold",t),...n})}),lne=h.forwardRef(function({className:t,...n},r){return d.jsx(pB,{ref:r,"data-slot":"alert-dialog-description",className:J("text-sm text-muted-foreground",t),...n})});h.forwardRef(function({className:t,...n},r){return d.jsx(hB,{ref:r,className:J(fv(),t),...n})});const cne=h.forwardRef(function({className:t,...n},r){return d.jsx(gB,{ref:r,className:J(fv({variant:"outline"}),t),...n})});h.forwardRef(function({...t},n){return d.jsx(i2,{ref:n,"data-slot":"dialog-trigger",...t})});function une({...e}){return d.jsx(l2,{"data-slot":"dialog-portal",...e})}h.forwardRef(function({...t},n){return d.jsx(W0,{ref:n,"data-slot":"dialog-close",...t})});const dne=h.forwardRef(function({className:t,...n},r){return d.jsx(s2,{ref:r,"data-slot":"dialog-overlay",className:J("fixed inset-0 z-50 bg-black/50 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0",t),...n})});h.forwardRef(function({className:t,children:n,showCloseButton:r=!0,...o},i){return d.jsxs(une,{children:[d.jsx(dne,{}),d.jsxs(a2,{ref:i,"data-slot":"dialog-content",className:J("cad-glass-popover fixed left-[50%] top-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-md border p-6 text-foreground shadow-lg duration-200 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 sm:max-w-lg",t),...o,children:[n,r?d.jsxs(W0,{"data-slot":"dialog-close",className:"absolute right-4 top-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none",children:[d.jsx(Kc,{className:"size-4"}),d.jsx("span",{className:"sr-only",children:"Close"})]}):null]})]})});h.forwardRef(function({className:t,...n},r){return d.jsx(c2,{ref:r,"data-slot":"dialog-title",className:J("text-lg font-semibold",t),...n})});h.forwardRef(function({className:t,...n},r){return d.jsx(u2,{ref:r,"data-slot":"dialog-description",className:J("text-sm text-muted-foreground",t),...n})});function ds({className:e,defaultValue:t,value:n,min:r=0,max:o=100,...i}){const s=h.useMemo(()=>Array.isArray(n)?n:Array.isArray(t)?t:[r],[t,r,n]);return d.jsxs(xB,{"data-slot":"slider",defaultValue:t,value:n,min:r,max:o,className:J("relative flex w-full touch-none items-center select-none data-[disabled]:opacity-50 data-[orientation=vertical]:h-full data-[orientation=vertical]:min-h-44 data-[orientation=vertical]:w-auto data-[orientation=vertical]:flex-col",e),...i,children:[d.jsx(SB,{"data-slot":"slider-track",className:J("relative grow overflow-hidden rounded-full bg-muted data-[orientation=horizontal]:h-1 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1"),children:d.jsx(EB,{"data-slot":"slider-range",className:J("absolute bg-primary data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full")})}),s.map((a,l)=>d.jsx(wB,{"data-slot":"slider-thumb",className:"relative z-10 block size-3.5 shrink-0 rounded-full border border-background bg-primary shadow-sm ring-1 ring-foreground/15 transition-[color,box-shadow] outline-none hover:ring-2 hover:ring-ring/25 focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50"},l))]})}const fne=Object.freeze([Object.freeze({value:$t.SOLID,label:"Solid",title:"Shaded with CAD edges",Icon:r5}),Object.freeze({value:$t.RENDERED,label:"Rendered",title:"Shaded material theme without edge overlay",Icon:o5}),Object.freeze({value:$t.TRANSPARENT,label:"X-Ray",title:"Transparent solids with visible CAD edges",Icon:sv}),Object.freeze({value:$t.HIDDEN_EDGES,label:"Hidden",title:"Shaded with hidden edges visible",Icon:av}),Object.freeze({value:$t.HIDDEN_LINES_REMOVED,label:"Lines",title:"Visible lines with hidden lines removed",Icon:i5}),Object.freeze({value:$t.UNSHADED,label:"Flat",title:"Unshaded flat color",Icon:m2}),Object.freeze({value:$t.WIREFRAME,label:"Wire",title:"Full wireframe",Icon:s5})]);function mne({className:e,strokeWidth:t=1.45}){return d.jsxs("svg",{className:e,viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",focusable:"false",children:[d.jsx("path",{d:"M12 3.5 20 8v8l-8 4.5L4 16V8l8-4.5Z",stroke:"currentColor",strokeWidth:t,strokeLinejoin:"round"}),d.jsx("path",{d:"M4 8l8 4.5L20 8M12 12.5v8",stroke:"currentColor",strokeWidth:t,strokeLinecap:"round",strokeLinejoin:"round"})]})}function pne({className:e,strokeWidth:t=1.45}){return d.jsxs("svg",{className:e,viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",focusable:"false",children:[d.jsx("path",{d:"M12 4.6 19.6 6.1l-2 10.1-5.6 4.2-5.6-4.2-2-10.1L12 4.6Z",stroke:"currentColor",strokeWidth:t,strokeLinejoin:"round"}),d.jsx("path",{d:"M4.4 6.1 12 9.2l7.6-3.1M12 9.2v11.2",stroke:"currentColor",strokeWidth:t,strokeLinecap:"round",strokeLinejoin:"round"})]})}const Bt=Object.freeze({FILE_STATUS:"status",STEP_TREE:"tree",STEP_MEASUREMENTS:"measurements",STEP_REFERENCE:"reference",STEP_PARAMETERS:"parameters",ROBOT_SDF:"sdf",ROBOT_MOTION:"motion",ROBOT_JOINTS:"joints",IMPLICIT_GRAPHICS:"graphics",DXF_MATERIAL:"material",DXF_BENDS:"bends",DXF_LAYERS:"dxfLayers",THEME_DISPLAY:"display",FILE_METADATA:"metadata"});function cg(e){return String(e||"").trim()}function Tw(e){return Array.isArray(e)?[...new Set(e.map(cg).filter(Boolean))]:[]}function B_(e,t={}){const n=cg(e),r=t.isSdf===!0||n==="sdf",o=t.showJoints!==!1,i=t.hasFileStatus?[Bt.FILE_STATUS]:[];switch(n){case"dxf":return[...i,Bt.DXF_MATERIAL,...t.hasDxfBendsPanel?[Bt.DXF_BENDS]:[],...t.hasDxfLayersPanel?[Bt.DXF_LAYERS]:[]];case"step":return[...i,Bt.STEP_TREE,Bt.STEP_REFERENCE,Bt.STEP_MEASUREMENTS,...t.hasStepModulePanel?[Bt.STEP_PARAMETERS]:[],Bt.THEME_DISPLAY];case"urdf":case"srdf":case"sdf":return[...i,...r?[Bt.ROBOT_SDF]:[],...t.motionEnabled?[Bt.ROBOT_MOTION]:[],...o?[Bt.ROBOT_JOINTS]:[]];case"mesh":return[...i,Bt.STEP_MEASUREMENTS];case"implicit":return[...i,...t.hasImplicitParameterPanel?[Bt.STEP_PARAMETERS]:[],Bt.IMPLICIT_GRAPHICS];default:return[]}}function hne(e,t={}){const n=cg(e),r=t.isSdf===!0||n==="sdf",o=t.showJoints!==!1;switch(n){case"dxf":return[...t.hasFileStatus?[Bt.FILE_STATUS]:[]];case"step":return[...t.hasFileStatus?[Bt.FILE_STATUS]:[],Bt.STEP_TREE];case"urdf":case"srdf":case"sdf":return[...t.hasFileStatus?[Bt.FILE_STATUS]:[],...r?[Bt.ROBOT_SDF]:[],...t.motionEnabled?[Bt.ROBOT_MOTION]:[],...o?[Bt.ROBOT_JOINTS]:[]];case"mesh":return[...t.hasFileStatus?[Bt.FILE_STATUS]:[],Bt.STEP_MEASUREMENTS];case"implicit":return[...t.hasFileStatus?[Bt.FILE_STATUS]:[],...t.hasImplicitParameterPanel?[Bt.STEP_PARAMETERS]:[]];default:return[]}}function ea(e,t){const n=new Set(Tw(t));return n.size?[...new Set(Tw(e).filter(r=>n.has(r)))]:[]}function gne(e,t,n){const r=cg(n),o=ea(e,t);return!r||!Tw(t).includes(r)||o.includes(r)?o:[...o,r]}function yne({isDesktop:e=!0,source:t="viewer"}={}){return e||cg(t)!=="viewer"}const xL=/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/,bne=["hex","rgb","hsl"];function li(e,t,n){const r=Number(e);return Number.isFinite(r)?Math.min(Math.max(r,t),n):t}function _w(e,t="#ffffff"){const n=String(e||"").trim();return xL.test(n)?n.length===4?`#${n[1]}${n[1]}${n[2]}${n[2]}${n[3]}${n[3]}`.toLowerCase():n.toLowerCase():t}function h1(e){return Math.round(li(e,0,255)).toString(16).padStart(2,"0")}function eb({r:e,g:t,b:n}){return`#${h1(e)}${h1(t)}${h1(n)}`.toLowerCase()}function xne(e){const t=_w(e);return{r:parseInt(t.slice(1,3),16),g:parseInt(t.slice(3,5),16),b:parseInt(t.slice(5,7),16)}}function Sne({r:e,g:t,b:n}){const r=li(e,0,255)/255,o=li(t,0,255)/255,i=li(n,0,255)/255,s=Math.max(r,o,i),a=Math.min(r,o,i),l=s-a;let c=0;return l!==0&&(s===r?c=(o-i)/l%6:s===o?c=(i-r)/l+2:c=(r-o)/l+4,c*=60,c<0&&(c+=360)),{h:c,s:s===0?0:l/s*100,v:s*100}}function V_({h:e,s:t,v:n}){const r=(Number(e)%360+360)%360,o=li(t,0,100)/100,i=li(n,0,100)/100,s=i*o,a=s*(1-Math.abs(r/60%2-1)),l=i-s;let c=0,u=0,f=0;return r<60?(c=s,u=a):r<120?(c=a,u=s):r<180?(u=s,f=a):r<240?(u=a,f=s):r<300?(c=a,f=s):(c=s,f=a),{r:(c+l)*255,g:(u+l)*255,b:(f+l)*255}}function Ene({r:e,g:t,b:n}){const r=li(e,0,255)/255,o=li(t,0,255)/255,i=li(n,0,255)/255,s=Math.max(r,o,i),a=Math.min(r,o,i),l=s-a;let c=0,u=0;const f=(s+a)/2;return l!==0&&(u=l/(1-Math.abs(2*f-1)),s===r?c=(o-i)/l%6:s===o?c=(i-r)/l+2:c=(r-o)/l+4,c*=60,c<0&&(c+=360)),{h:c,s:u*100,l:f*100}}function wne({h:e,s:t,l:n}){const r=(Number(e)%360+360)%360,o=li(t,0,100)/100,i=li(n,0,100)/100,s=(1-Math.abs(2*i-1))*o,a=s*(1-Math.abs(r/60%2-1)),l=i-s/2;let c=0,u=0,f=0;return r<60?(c=s,u=a):r<120?(c=a,u=s):r<180?(u=s,f=a):r<240?(u=a,f=s):r<300?(c=a,f=s):(c=s,f=a),{r:(c+l)*255,g:(u+l)*255,b:(f+l)*255}}function vne(e){const t=xne(e),n=Ene(t);return{rgb:t,hsl:{h:Math.round(n.h),s:Math.round(n.s),l:Math.round(n.l)},hsv:Sne(t)}}function lf({label:e,value:t,min:n,max:r,onChange:o}){return d.jsxs("label",{className:"min-w-0 space-y-1",children:[d.jsx("span",{className:"block text-[10px] font-medium uppercase tracking-[0.08em] text-muted-foreground",children:e}),d.jsx(ss,{type:"number",min:n,max:r,value:t,onChange:i=>o(li(i.currentTarget.value,n,r)),className:"h-7 px-1.5 text-[11px]"})]})}function Ane({value:e="#ffffff",onChange:t,opacity:n=1,onOpacityChange:r,className:o,swatchClassName:i,valueClassName:s,popoverAlign:a="start",showValue:l=!0,showOpacity:c=!1,disabled:u=!1,...f}){const m=_w(e),p=Number.isFinite(Number(n))?li(Number(n),0,1):1,[b,y]=h.useState("hex"),[x,S]=h.useState(m),[E,C]=h.useState(!1),A=h.useRef(null),N=h.useRef(null);h.useEffect(()=>{S(m)},[m]),h.useEffect(()=>{C(typeof window<"u"&&typeof window.EyeDropper=="function")},[]);const w=h.useMemo(()=>vne(m),[m]),_=w.hsv.h,I=`hsl(${_} 100% 50%)`,R=h.useCallback(j=>{const ee=_w(j,m);S(ee),ee!==m&&t?.(ee)},[m,t]),O=h.useCallback(j=>{const ee=A.current?.getBoundingClientRect();if(!ee||ee.width<=0||ee.height<=0)return;const X=li((j.clientX-ee.left)/ee.width*100,0,100),ve=li((1-(j.clientY-ee.top)/ee.height)*100,0,100);R(eb(V_({h:_,s:X,v:ve})))},[R,_]),F=h.useCallback(j=>{const ee=N.current?.getBoundingClientRect();if(!ee||ee.width<=0)return;const X=li((j.clientX-ee.left)/ee.width*360,0,360);R(eb(V_({h:X,s:w.hsv.s,v:w.hsv.v})))},[w.hsv.s,w.hsv.v,R]),V=j=>{A.current?.setPointerCapture(j.pointerId),O(j)},$=j=>{N.current?.setPointerCapture(j.pointerId),F(j)},K=j=>{if(!xL.test(String(j||"").trim())){S(m);return}R(j)},U=(j,ee)=>{R(eb({...w.rgb,[j]:ee}))},Y=(j,ee)=>{R(eb(wne({...w.hsl,[j]:ee})))},D=async()=>{if(E)try{const j=await new window.EyeDropper().open();j?.sRGBHex&&R(j.sRGBHex)}catch{}};return d.jsxs(FD,{children:[d.jsx(OQ,{asChild:!0,children:d.jsxs(Gt,{type:"button","data-slot":"color-picker-trigger",variant:"outline",size:"sm",disabled:u,className:J("h-7 w-auto max-w-full justify-start gap-1.5 px-1.5 text-[11px] font-medium",o),...f,children:[d.jsx("span",{className:J("size-4 shrink-0 rounded bg-clip-border shadow-[0_0_0_1px_rgba(15,23,42,0.24)] dark:shadow-[0_0_0_1px_rgba(255,255,255,0.24)]",i),style:{backgroundColor:m,opacity:c?p:void 0},"aria-hidden":"true"}),l?d.jsx("span",{className:J("truncate font-mono uppercase leading-none",s),children:m}):null]})}),d.jsxs(jD,{align:a,className:"w-64 space-y-3 p-3",children:[d.jsx("div",{ref:A,role:"slider",tabIndex:0,"aria-label":"Saturation and brightness","aria-valuetext":`${Math.round(w.hsv.s)}% saturation, ${Math.round(w.hsv.v)}% brightness`,className:"relative h-32 touch-none overflow-hidden rounded-md border shadow-inner outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50",style:{backgroundColor:I,backgroundImage:"linear-gradient(to top, #000, transparent), linear-gradient(to right, #fff, transparent)"},onPointerDown:V,onPointerMove:j=>{A.current?.hasPointerCapture(j.pointerId)&&O(j)},children:d.jsx("span",{className:"absolute size-3 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-white shadow-[0_0_0_1px_rgba(0,0,0,0.45)]",style:{left:`${w.hsv.s}%`,top:`${100-w.hsv.v}%`},"aria-hidden":"true"})}),d.jsx("div",{ref:N,role:"slider",tabIndex:0,"aria-label":"Hue","aria-valuemin":0,"aria-valuemax":360,"aria-valuenow":Math.round(_),className:"relative h-3 touch-none rounded-full border outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50",style:{background:"linear-gradient(90deg, #f00, #ff0, #0f0, #0ff, #00f, #f0f, #f00)"},onPointerDown:$,onPointerMove:j=>{N.current?.hasPointerCapture(j.pointerId)&&F(j)},children:d.jsx("span",{className:"absolute top-1/2 size-4 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-white shadow-[0_0_0_1px_rgba(0,0,0,0.45)]",style:{left:`${_/360*100}%`,backgroundColor:I},"aria-hidden":"true"})}),c?d.jsxs("div",{className:"space-y-1",children:[d.jsxs("div",{className:"flex items-center justify-between gap-2 text-[10px] font-medium uppercase tracking-[0.08em] text-muted-foreground",children:[d.jsx("span",{children:"Opacity"}),d.jsxs("span",{children:[Math.round(p*100),"%"]})]}),d.jsxs("div",{className:"flex items-center gap-1.5",children:[d.jsx(ss,{type:"number",min:0,max:100,step:1,value:Math.round(p*100),onChange:j=>{r?.(li(j.currentTarget.value,0,100)/100)},className:"h-7 px-1.5 text-[11px]","aria-label":"Color opacity"}),d.jsx("span",{className:"text-[10px] font-medium text-muted-foreground",children:"%"})]})]}):null,d.jsx("div",{className:"flex items-center gap-1 rounded-md bg-muted p-1",children:bne.map(j=>d.jsx(Gt,{type:"button",variant:b===j?"secondary":"ghost",size:"xs",className:"h-6 flex-1 px-2 text-[10px] uppercase",onClick:()=>y(j),children:j},j))}),b==="hex"?d.jsxs("div",{className:"flex gap-2",children:[d.jsx(ss,{value:x,onChange:j=>S(j.currentTarget.value),onBlur:j=>K(j.currentTarget.value),onKeyDown:j=>{j.key==="Enter"&&K(j.currentTarget.value)},className:"h-7 px-1.5 text-[11px] font-mono uppercase","aria-label":"Hex color"}),E?d.jsx(Gt,{type:"button",variant:"outline",size:"icon-sm",onClick:D,"aria-label":"Pick color from screen",title:"Pick color from screen",children:d.jsx(a5,{className:"h-3.5 w-3.5",strokeWidth:2,"aria-hidden":"true"})}):null]}):null,b==="rgb"?d.jsxs("div",{className:"grid grid-cols-3 gap-2",children:[d.jsx(lf,{label:"R",value:w.rgb.r,min:0,max:255,onChange:j=>U("r",j)}),d.jsx(lf,{label:"G",value:w.rgb.g,min:0,max:255,onChange:j=>U("g",j)}),d.jsx(lf,{label:"B",value:w.rgb.b,min:0,max:255,onChange:j=>U("b",j)})]}):null,b==="hsl"?d.jsxs("div",{className:"grid grid-cols-3 gap-2",children:[d.jsx(lf,{label:"H",value:w.hsl.h,min:0,max:360,onChange:j=>Y("h",j)}),d.jsx(lf,{label:"S",value:w.hsl.s,min:0,max:100,onChange:j=>Y("s",j)}),d.jsx(lf,{label:"L",value:w.hsl.l,min:0,max:100,onChange:j=>Y("l",j)})]}):null]})]})}function Pb({...e}){return d.jsx(CB,{"data-slot":"select",...e})}function Cne({...e}){return d.jsx(DB,{"data-slot":"select-group",...e})}function Ob({...e}){return d.jsx(MB,{"data-slot":"select-value",...e})}const kb=h.forwardRef(function({className:t,size:n="default",showIcon:r=!0,children:o,...i},s){return d.jsxs(vB,{ref:s,"data-slot":"select-trigger","data-size":n,className:J("flex w-full items-center justify-between gap-2 rounded-md border border-input bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[placeholder]:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 dark:bg-input/30 dark:hover:bg-input/50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),...i,children:[o,r?d.jsx(AB,{asChild:!0,children:d.jsx(lv,{className:"size-4 opacity-50"})}):null]})});function Db({className:e,children:t,position:n="popper",...r}){return d.jsx(IB,{children:d.jsxs(NB,{"data-slot":"select-content",className:J("cad-glass-popover relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-hidden rounded-md border border-border bg-popover text-popover-foreground shadow-md data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",n==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:n,...r,children:[d.jsx(Ine,{}),d.jsx(TB,{className:J("p-1",n==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1"),children:t}),d.jsx(Nne,{})]})})}function Mne({className:e,...t}){return d.jsx(LB,{"data-slot":"select-label",className:J("px-2 py-1.5 text-sm font-medium",e),...t})}function Lb({className:e,children:t,icon:n=null,...r}){return d.jsxs(_B,{"data-slot":"select-item",className:J("relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-none select-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),...r,children:[d.jsx("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:d.jsx(RB,{children:d.jsx(qu,{className:"size-4"})})}),n?d.jsx("span",{className:"flex h-3.5 shrink-0 items-center justify-center text-muted-foreground","aria-hidden":"true",children:n}):null,d.jsx(PB,{children:t})]})}function Ine({className:e,...t}){return d.jsx(OB,{"data-slot":"select-scroll-up-button",className:J("flex cursor-default items-center justify-center py-1",e),...t,children:d.jsx(l5,{className:"size-4"})})}function Nne({className:e,...t}){return d.jsx(kB,{"data-slot":"select-scroll-down-button",className:J("flex cursor-default items-center justify-center py-1",e),...t,children:d.jsx(lv,{className:"size-4"})})}function Tne({className:e,thumbClassName:t,...n}){return d.jsx(FB,{"data-slot":"switch",className:J("peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border border-transparent bg-input shadow-xs transition-all outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input dark:data-[state=unchecked]:bg-input/80",e),...n,children:d.jsx(jB,{"data-slot":"switch-thumb",className:J("pointer-events-none block size-4 rounded-full bg-background ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0",t)})})}const _ne=Xh("inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-[color,box-shadow] outline-none hover:bg-muted hover:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-transparent",outline:"border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:hover:bg-input/50"},size:{default:"h-9 min-w-9 px-2",sm:"h-8 min-w-8 px-1.5",lg:"h-10 min-w-10 px-2.5"}},defaultVariants:{variant:"default",size:"default"}}),SL=h.createContext({size:"default",variant:"default"});function Rne({className:e,variant:t,size:n,children:r,...o}){return d.jsx(zB,{"data-slot":"toggle-group","data-variant":t,"data-size":n,className:J("group/toggle-group flex w-fit items-center rounded-md data-[variant=outline]:shadow-xs",e),...o,children:d.jsx(SL.Provider,{value:{variant:t,size:n},children:r})})}function Pne({className:e,variant:t,size:n,...r}){const o=h.useContext(SL);return d.jsx(BB,{"data-slot":"toggle-group-item","data-variant":o.variant||t,"data-size":o.size||n,className:J(_ne({variant:o.variant||t,size:o.size||n}),"min-w-0 flex-1 shrink-0 rounded-none shadow-none first:rounded-l-md last:rounded-r-md focus:z-10 focus-visible:z-10 data-[variant=outline]:border-l-0 data-[variant=outline]:first:border-l",e),...r})}const One=365,EL=240,tb="min(28rem, calc(100vw - 0.75rem))",kne="min(24rem, calc(100vw - 0.75rem))",$_=["[&_[data-slot=input]]:!text-[11px]","[&_[data-slot=select-trigger]]:!text-[11px]","[&_[data-slot=color-picker-trigger]]:!text-[11px]"].join(" "),Dne="space-y-1 px-2",wL="space-y-3",Lne=`${wL} py-2`,Fne="space-y-1 px-2",jne="px-2",zne="text-xs font-medium text-sidebar-foreground",wm="block min-w-0 truncate text-[11px] font-medium leading-4 text-muted-foreground",Bne="px-2 text-[11px] leading-4 text-muted-foreground",vL="!h-7 px-2 !text-[11px] overflow-hidden [&_svg]:size-3.5 [&>span]:min-w-0 [&>span]:truncate",Fb=`${vL} w-full`,Vne=`${vL} w-fit min-w-20 max-w-44`,$ne="shrink-0 rounded bg-muted px-1.5 py-0.5 font-mono text-[10px] font-medium leading-none tabular-nums text-muted-foreground",Gne=["h-7 w-20 shrink-0 rounded-md border border-input bg-transparent px-2 py-1 text-right text-[11px] font-medium leading-none tabular-nums text-foreground shadow-xs outline-none","m-0 box-border min-w-0 theme-none transition-[color,box-shadow,border-color] placeholder:text-muted-foreground","focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:opacity-50 dark:bg-input/30"].join(" "),om="h-7 px-2 text-[11px] text-muted-foreground hover:text-foreground",Une="!h-7 px-2 text-[11px] !text-foreground",Hne="h-7 px-2 !text-[11px] font-medium leading-none tabular-nums text-foreground",Wne=["h-4 w-7 border shadow-none","data-[state=checked]:border-primary/75 data-[state=checked]:bg-primary","data-[state=unchecked]:!border-[rgb(115_125_140_/_0.52)] data-[state=unchecked]:!bg-[rgb(115_125_140_/_0.22)]","dark:data-[state=unchecked]:!border-[rgb(148_163_184_/_0.44)] dark:data-[state=unchecked]:!bg-[rgb(148_163_184_/_0.18)]"].join(" "),Kne=["!size-3 shadow-sm","data-[state=checked]:!translate-x-3 data-[state=checked]:!bg-background","data-[state=unchecked]:!translate-x-0 data-[state=unchecked]:!bg-[rgb(115_125_140)]","dark:data-[state=unchecked]:!bg-[rgb(148_163_184)]"].join(" "),qne=["text-muted-foreground hover:text-foreground","data-[state=on]:!bg-accent data-[state=on]:!text-foreground data-[state=on]:font-semibold","data-[state=on]:ring-1 data-[state=on]:ring-inset data-[state=on]:ring-border/80","data-[state=on]:hover:!bg-accent data-[state=on]:hover:!text-foreground"].join(" "),da=["h-4","[&_[data-slot=slider-track]]:h-px","[&_[data-slot=slider-track]]:rounded-none","[&_[data-slot=slider-track]]:bg-border","[&_[data-slot=slider-range]]:bg-primary","[&_[data-slot=slider-thumb]]:h-2.5","[&_[data-slot=slider-thumb]]:w-1.5","[&_[data-slot=slider-thumb]]:rounded-[1px]","[&_[data-slot=slider-thumb]]:border-primary","[&_[data-slot=slider-thumb]]:bg-background","[&_[data-slot=slider-thumb]]:shadow-none","[&_[data-slot=slider-thumb]]:ring-0","[&_[data-slot=slider-thumb]]:hover:border-primary/85","[&_[data-slot=slider-thumb]]:hover:ring-1","[&_[data-slot=slider-thumb]]:hover:ring-ring/25","[&_[data-slot=slider-thumb]]:focus-visible:ring-2","[&_[data-slot=slider-thumb]]:focus-visible:ring-ring/30"].join(" ");function Zo({title:e,trailing:t=null,children:n,className:r,contentClassName:o,hideFirstSeparator:i=!0}){const s=h.Children.toArray(n).length>0;return d.jsxs("div",{className:J("pb-4",i&&"first:pt-2 first:[&_.cad-sheet-subsection-separator]:hidden",r),children:[d.jsx("div",{className:"cad-sheet-subsection-separator mx-2 mb-4 h-px bg-border/60"}),e?d.jsxs("div",{className:J("flex min-h-5 min-w-0 items-center justify-between gap-2 px-2",s&&"pb-3"),children:[d.jsx("span",{className:J("min-w-0 truncate leading-4",zne),children:e}),t?d.jsx("span",{className:"flex shrink-0 items-center",children:t}):null]}):null,s?d.jsx("div",{className:J(wL,o),"data-file-sheet-row-stack":"",children:n}):null]})}function yx({children:e,className:t}){return d.jsx("div",{className:J(Lne,t),"data-file-sheet-section-body":"","data-file-sheet-row-stack":"",children:e})}function Wc({label:e,value:t,trailing:n,children:r,className:o,contentClassName:i,labelClassName:s,rowKind:a="control"}){const l=h.Children.toArray(r).length>0;return d.jsxs("div",{className:J(Dne,o),"data-file-sheet-control-row":"","data-file-sheet-row-kind":a,children:[e!=null||t!=null||n!=null?d.jsxs("div",{className:J("flex items-center justify-between gap-2",l?"min-h-4":"min-h-7"),children:[e!=null?d.jsx("span",{className:J(wm,s),children:e}):d.jsx("span",{}),n??(t!=null?d.jsx("span",{className:$ne,children:t}):null)]}):null,l?d.jsx("div",{className:J("min-w-0",i),children:r}):null]})}function ha(e,{fallback:t=0,min:n=-1/0,max:r=1/0,integer:o=!1}={}){const s=String(e??"").trim().match(/[+-]?(?:\d+\.?\d*|\.\d+)(?:e[+-]?\d+)?/i),a=Number.isFinite(Number(t))?Number(t):0,l=s?Number(s[0]):NaN,c=Number.isFinite(Number(n))?Number(n):-1/0,u=Number.isFinite(Number(r))?Number(r):1/0,f=Number.isFinite(l)?l:a,m=Math.min(Math.max(f,c),Math.max(c,u));return o?Math.round(m):m}function UA({value:e,onValueCommit:t,disabled:n=!1,ariaLabel:r,inputMode:o="decimal",className:i,style:s}){const a=h.useRef(null),l=String(e??""),[c,u]=h.useState(l),[f,m]=h.useState(!1),p=h.useRef(!1),b=h.useRef(!1),y=f?c:l;h.useEffect(()=>{f||u(l)},[l,f]),h.useEffect(()=>{!f||!b.current||(b.current=!1,a.current?.select?.())},[f,y]);const x=h.useRef(0),S=E=>{E?.select?.(),typeof window<"u"&&(window.cancelAnimationFrame?.(x.current),x.current=window.requestAnimationFrame?.(()=>{b.current!==!1&&E?.select?.()})||0)};return d.jsx("input",{ref:a,type:"text",inputMode:o,value:y,disabled:n,"data-editing":f?"true":"false",onChange:E=>{b.current=!1,typeof window<"u"&&window.cancelAnimationFrame?.(x.current),u(E.target.value)},onFocus:E=>{b.current=!0,m(!0),S(E.currentTarget)},onClick:E=>{b.current=!0,m(!0),S(E.currentTarget)},onMouseUp:E=>{E.preventDefault()},onBlur:()=>{if(m(!1),p.current){p.current=!1;return}t?.(c)},onKeyDown:E=>{E.key==="Enter"&&E.currentTarget.blur(),E.key==="Escape"&&(p.current=!0,u(l),E.currentTarget.blur())},className:J(Gne,i),style:{borderColor:f?"var(--ring)":void 0,...s},"aria-label":r})}function fs({label:e,value:t,trailing:n,onValueCommit:r,valueInputProps:o,children:i,className:s,contentClassName:a,labelClassName:l}){const c=n??(r?d.jsx(UA,{value:t,onValueCommit:r,...o}):null);return d.jsx(Wc,{label:c?null:e,value:null,className:J(Fne,s),contentClassName:J(c?"space-y-0":"space-y-1",a),labelClassName:l,rowKind:"slider",children:c?d.jsxs("div",{className:"grid min-w-0 grid-cols-[minmax(0,1fr)_auto] items-center gap-x-2","data-file-sheet-slider-input-row":"",children:[d.jsxs("div",{className:"min-w-0 pr-3",children:[e!=null?d.jsx("span",{className:J(wm,"block h-3 leading-3",l),children:e}):null,d.jsx("div",{className:J("min-w-0",e!=null&&"-mt-0.5"),children:i})]}),c]}):i})}function HA({label:e,description:t,children:n,className:r,labelClassName:o}){return d.jsxs("div",{className:J(jne,r),"data-file-sheet-control-row":"","data-file-sheet-row-kind":"inline",children:[d.jsxs("div",{className:"flex min-h-7 max-w-full items-center justify-between gap-2",children:[d.jsx("span",{className:J(wm,o),children:e}),d.jsx("span",{className:"shrink-0",children:n})]}),t?d.jsx("p",{className:"mt-0.5 max-w-[28rem] text-[11px] leading-4 text-muted-foreground",children:t}):null]})}function AL({checked:e,onCheckedChange:t,disabled:n=!1,ariaLabel:r,className:o}){return d.jsx(Tne,{checked:e,disabled:n,onCheckedChange:t,className:J(Wne,o),thumbClassName:Kne,"aria-label":r})}function Rc({label:e,checked:t,onCheckedChange:n,disabled:r=!1,description:o,className:i,labelClassName:s,ariaLabel:a}){return d.jsx(HA,{label:e,description:o,className:i,labelClassName:s,children:d.jsx(AL,{checked:t,onCheckedChange:n,disabled:r,ariaLabel:a||e})})}function Wu({children:e,tone:t="muted",className:n}){return d.jsx("p",{className:J(Bne,t==="error"&&"whitespace-pre-line text-destructive",n),children:e})}function ks({label:e,children:t,className:n}){return d.jsxs("label",{className:J("block min-w-0",n),children:[d.jsx("span",{className:wm,children:e}),d.jsx("div",{className:"mt-1 min-w-0",children:t})]})}function Yne({label:e,value:t,mono:n=!1}){const r=String(t??"");return d.jsxs("div",{className:"block min-w-0",children:[d.jsx("span",{className:wm,children:e}),d.jsx("div",{className:J("mt-1 min-h-7 truncate rounded-md border border-border/70 bg-muted/25 px-2 py-1 text-[11px] font-medium leading-4 text-foreground",n&&"font-mono tabular-nums"),title:r,children:r})]})}function mc({columns:e=2,children:t,className:n}){return d.jsx("div",{className:J("grid gap-2 px-2",n),style:{gridTemplateColumns:`repeat(${e}, minmax(0, 1fr))`},"data-file-sheet-field-grid":"",children:t})}function Lf({children:e,columns:t,className:n}){const r=Math.max(1,t||h.Children.count(e));return d.jsx("div",{className:J("grid gap-1.5 px-2",n),style:{gridTemplateColumns:`repeat(${r}, minmax(0, 1fr))`},"data-file-sheet-button-row":"",children:e})}function Xne({value:e,onChange:t,options:n,ariaLabel:r,fit:o=!1}){const i=Math.max(1,Math.min(n.length,n.length>4?3:4));return d.jsx(Rne,{type:"single",variant:"outline",size:"sm",value:e,onValueChange:s=>{s&&t(s)},className:J("min-h-7",o?"flex w-fit":"grid w-full min-w-0 auto-rows-[1.75rem]"),style:o?void 0:{gridTemplateColumns:`repeat(${i}, minmax(0, 1fr))`},"aria-label":r,children:n.map(s=>{const a=s.Icon;return d.jsxs(Pne,{value:s.value,disabled:s.disabled===!0,className:J("min-w-0 gap-1.5 !h-7 px-1.5 text-[11px]",o&&"!flex-none px-2",s.iconOnly&&"px-1",qne),title:s.title||s.label,"aria-label":s.label,children:[a?d.jsx(a,{className:"size-3",strokeWidth:2,"aria-hidden":"true"}):null,a&&s.iconOnly?null:d.jsx("span",{className:"truncate",children:s.label})]},s.value)})})}function la({label:e,value:t,onValueChange:n,options:r,ariaLabel:o,disabled:i=!1,placeholder:s,triggerContent:a,stacked:l=!1,className:c}){const u=d.jsxs(Pb,{value:t,onValueChange:n,disabled:i,children:[d.jsx(kb,{size:"sm",className:l?Fb:Vne,"aria-label":o||(typeof e=="string"?e:void 0),children:a??d.jsx(Ob,{placeholder:s})}),d.jsx(Db,{children:(()=>{const f=b=>d.jsx(Lb,{value:b.value,className:"text-xs",title:b.title,icon:b.icon,children:b.label},b.value),m=r.filter(b=>!b.group),p=[...new Set(r.map(b=>b.group).filter(Boolean))];return p.length?d.jsxs(d.Fragment,{children:[m.map(f),p.map(b=>d.jsxs(Cne,{children:[d.jsx(Mne,{className:"text-[10px] uppercase tracking-wide text-muted-foreground",children:b}),r.filter(y=>y.group===b).map(f)]},b))]}):r.map(f)})()})]});return l?d.jsx(Wc,{label:e,className:c,children:u}):d.jsx(HA,{label:e,className:c,children:u})}function Zne({label:e,value:t,onValueChange:n,options:r,ariaLabel:o,className:i}){const s=r.find(u=>u.value===t)||null,a=r.filter(u=>!u.group),l=[...new Set(r.map(u=>u.group).filter(Boolean))],c=u=>d.jsxs(ia,{className:"justify-between gap-2 text-xs",onSelect:()=>n?.(u.value),children:[d.jsx("span",{className:"min-w-0 truncate",children:u.label}),u.value===t?d.jsx(qu,{className:"size-3.5 shrink-0",strokeWidth:2,"aria-hidden":"true"}):null]},u.value);return d.jsx(HA,{label:e,className:i,children:d.jsxs(og,{children:[d.jsx(ig,{asChild:!0,children:d.jsxs("button",{type:"button","aria-label":o||(typeof e=="string"?e:void 0),className:J("flex !h-7 w-fit min-w-20 max-w-44 items-center justify-between gap-1 overflow-hidden","rounded-md border border-input bg-transparent px-2 !text-[11px] shadow-xs outline-none","focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 dark:bg-input/30"),children:[d.jsx("span",{className:"min-w-0 truncate",children:s?.label??""}),d.jsx(lv,{className:"size-3.5 shrink-0 opacity-60","aria-hidden":"true"})]})}),d.jsxs(sg,{align:"end",sideOffset:4,className:"w-52",children:[a.map(c),l.map(u=>d.jsxs(kD,{children:[d.jsx(DD,{className:"text-xs",children:u}),d.jsx(LD,{className:"max-h-80 w-56 overflow-y-auto",children:r.filter(f=>f.group===u).map(c)})]},u))]})]})})}function WA({value:e,onChange:t,className:n,swatchClassName:r,...o}){return d.jsx(Ane,{value:e,onChange:t,className:J(Une,"w-fit justify-start gap-1.5 px-1.5",n),swatchClassName:J("size-3.5",r),popoverAlign:"end",...o})}function Jne({label:e,value:t,onChange:n,disabled:r=!1,className:o,labelClassName:i}){return d.jsx(Wc,{label:e,trailing:d.jsx(WA,{value:t,onChange:n,disabled:r,"aria-label":typeof e=="string"?e:void 0}),className:o,labelClassName:i})}function Qne(e){const t=Number(e);return!Number.isFinite(t)||t<=0?One:Math.max(EL,t)}function ug({open:e,title:t,isDesktop:n,width:r,onOpenChange:o,onStartResize:i,bodyClassName:s,scrollBody:a=!0,children:l}){const c=`min(${Qne(r)}px, ${tb})`,u=n?{width:c,flexBasis:c,minWidth:`min(${EL}px, ${tb})`,maxWidth:tb}:{width:kne,maxWidth:tb},f=a?d.jsx(ud,{className:J("min-h-0 flex-1",$_,s),type:"auto",viewportClassName:"h-full",children:l}):d.jsx("div",{className:J("flex min-h-0 flex-1 flex-col",$_,s),children:l});return n?e?d.jsxs("aside",{className:J("cad-glass-surface pointer-events-auto z-30 flex h-full max-w-[calc(100vw_-_0.75rem)] flex-col border-l border-sidebar-border text-sidebar-foreground",n?"relative shrink-0":"absolute inset-y-0 right-0 shadow-xl"),style:u,"aria-label":t,children:[n&&typeof i=="function"?d.jsx("button",{type:"button","aria-label":`Resize ${t} sidebar`,title:"Resize sidebar",onPointerDown:i,className:"group/file-sheet-resize absolute inset-y-0 -left-1.5 z-30 flex h-auto w-3 cursor-col-resize touch-none items-stretch justify-center rounded-none px-0 py-0 hover:bg-transparent",children:d.jsx("span",{className:"w-px bg-transparent transition-colors group-hover/file-sheet-resize:bg-ring group-focus-visible/file-sheet-resize:bg-ring"})}):null,f]}):null:d.jsx(V2,{open:e,onOpenChange:o,children:d.jsxs($2,{side:"right",showCloseButton:!1,className:"cad-glass-surface gap-0 p-0 text-sidebar-foreground",style:u,"aria-label":t,children:[d.jsxs(G2,{className:"sr-only",children:[d.jsx(U2,{children:t}),d.jsx(H2,{children:"Inspect and adjust the selected file."})]}),f]})})}const ere=[{value:"solid",label:"Solid"},{value:"linear",label:"Linear"},{value:"radial",label:"Radial"},{value:"transparent",label:"Transparent"}],tre=[{value:Vr.ORTHOGRAPHIC,label:"Orthographic",title:"Parallel projection for CAD inspection",Icon:mne},{value:Vr.PERSPECTIVE,label:"Perspective",title:"Depth projection with vanishing lines",Icon:pne}],g1=[{value:"directional",label:"Key"},{value:"fill",label:"Fill"},{value:"rim",label:"Rim"},{value:"spot",label:"Spot"},{value:"point",label:"Point"}],y1=Object.freeze({fill:Pp,rim:Op}),nre=Object.freeze(["directional","spot","point"]),KA=da,CL=120,rre=Object.freeze(["x","y","z"]);function Wh(e,t,n){return Math.min(Math.max(e,t),n)}function jr(e,t=2){const n=Number(e);return Number.isFinite(n)?n.toFixed(t):"0"}function ore(e){const t=Number(e);return Number.isFinite(t)?Math.abs(t)>=100?t.toFixed(0):Math.abs(t)>=10?t.toFixed(1):t.toFixed(2):"0"}function G_({label:e,value:t,trailing:n,children:r,className:o,contentClassName:i}){return d.jsx(Wc,{label:e,value:t,trailing:n,className:o,contentClassName:i,children:r})}function os({title:e,toggle:t=null,trailing:n=null,children:r,className:o,hideFirstSeparator:i=!0}){return d.jsx(Zo,{title:e,trailing:t||n,className:o,hideFirstSeparator:i,children:r})}function cf({label:e,checked:t,onCheckedChange:n,disabled:r=!1}){return d.jsx(AL,{checked:t,onCheckedChange:n,disabled:r,ariaLabel:e})}function ire(e){try{const t=h.Children.only(e);return h.isValidElement(t)&&t.type===Ir?t.props:null}catch{return null}}function zr({label:e,value:t,children:n,onValueCommit:r,valueInputProps:o}){const i=ire(n),s=r||(i?.onChange?a=>{i.onChange(ha(a,{fallback:i.value,min:i.min,max:i.max}))}:null);return d.jsx(fs,{label:e,value:t,onValueCommit:s,valueInputProps:s?{ariaLabel:`${e} value`,...o}:o,children:n})}function wp({label:e,checked:t,onChange:n,disabled:r=!1,description:o}){return d.jsx(Rc,{label:e,checked:t,onCheckedChange:n,disabled:r,description:o})}function Ir({value:e,min:t,max:n,step:r=.01,onChange:o}){const i=Number.isFinite(Number(e))?Number(e):t,[s,a]=h.useState(i),l=h.useRef(null);h.useEffect(()=>{a(i)},[i]),h.useEffect(()=>()=>{l.current&&clearTimeout(l.current)},[]);const c=m=>{const p=Number(m);return Number.isFinite(p)?Wh(p,t,n):i},u=m=>{const p=c(m);l.current&&clearTimeout(l.current),Math.abs(p-i)>1e-9&&o(p)},f=m=>{const p=c(m);a(p),l.current&&clearTimeout(l.current),l.current=setTimeout(()=>{u(p)},CL)};return d.jsx(ds,{value:[s],min:t,max:n,step:r,onValueChange:m=>f(m[0]??s),onValueCommit:m=>u(m[0]??s),className:KA})}const sre=WA,O0=Jne;function U_(e,t){return t.reduce((n,r)=>n&&typeof n=="object"?n[r]:void 0,e)}function b1(e,t,n){let r=e;for(let o=0;o<t.length-1;o+=1){const i=t[o];(!r[i]||typeof r[i]!="object"||Array.isArray(r[i]))&&(r[i]={}),r=r[i]}r[t[t.length-1]]=n}function are(e={}){return{light:JSON.parse(JSON.stringify(e.light||{})),dark:JSON.parse(JSON.stringify(e.dark||{}))}}function ML(e={},t=ln.LIGHT){return e.colorMode===ln.DARK?ln.DARK:e.colorMode===ln.LIGHT?ln.LIGHT:t===ln.DARK?ln.DARK:ln.LIGHT}function H_(e={},t=[],n=ln.LIGHT){return U_(e.modeColors?.[n],t)||U_(e,t)||"#ffffff"}function lre({label:e,mode:t}){const n=t===ln.DARK,r=n?c5:u5,o=n?"dark":"light";return d.jsxs("span",{className:"inline-flex max-w-full items-center gap-1 align-bottom",title:`Uses the ${o} mode color`,children:[d.jsx("span",{className:"min-w-0 truncate",children:e}),d.jsx(r,{className:"size-2.5 shrink-0 text-muted-foreground/70",strokeWidth:2.25,"aria-hidden":"true"}),d.jsx("span",{className:"sr-only",children:`Uses the ${o} mode color`})]})}function rs({label:e,path:t,themeSettings:n,onChange:r,resolvedColorSchemeMode:o=ln.LIGHT}){const i=n.colorMode||ln.SYSTEM,s=ML(n,o);return i===ln.SYSTEM?d.jsx(O0,{label:d.jsx(lre,{label:e,mode:s}),value:H_(n,t,s),onChange:a=>r(t,a,s)}):d.jsx(O0,{label:e,value:H_(n,t,s),onChange:a=>r(t,a)})}function nb(e={}){return(Array.isArray(e.fillColors)&&e.fillColors.length?e.fillColors:[e.defaultColor||"#ffffff"]).slice(0,Rh)}function cre({colors:e,onChange:t}){const n=e.length?e:["#ffffff"],r=o=>{const i=o.filter(Boolean).slice(0,Rh);t(i.length?i:[n[0]||"#ffffff"])};return d.jsxs("div",{className:"flex flex-wrap justify-start gap-1.5","data-cad-fill-color-grid":"true",children:[n.map((o,i)=>d.jsxs("div",{className:"group relative transition-opacity",children:[d.jsx(sre,{value:o,swatchClassName:"size-3.5",onChange:s=>{const a=[...n];a[i]=s,r(a)},"aria-label":`Fill color ${i+1}`,title:`Fill color ${i+1}: ${o}`}),n.length>1?d.jsx(Gt,{type:"button",variant:"outline",size:"icon-xs",className:"absolute -right-1.5 -top-1.5 z-10 size-4 rounded-full border-border !bg-[rgb(245_247_250)] p-0 text-muted-foreground shadow-xs hover:!bg-[rgb(245_247_250)] hover:text-foreground dark:!bg-[rgb(12_15_22)] dark:hover:!bg-[rgb(12_15_22)]",onClick:()=>r(n.filter((s,a)=>a!==i)),"aria-label":`Remove color ${i+1}`,title:`Remove color ${i+1}`,children:d.jsx(Kc,{className:"h-2.5 w-2.5",strokeWidth:2.25,"aria-hidden":"true"})}):null]},i)),n.length<Rh?d.jsx(Gt,{type:"button",variant:"outline",size:"icon-sm",className:"size-7 rounded-md p-0 text-muted-foreground hover:text-foreground",onClick:()=>r([...n,n[n.length-1]||"#ffffff"]),"aria-label":"Add fill color",title:"Add fill color",children:d.jsx(p2,{className:"h-3.5 w-3.5",strokeWidth:2,"aria-hidden":"true"})}):null]})}function W_({preview:e=null}){return d.jsxs("span",{className:"inline-flex shrink-0 overflow-hidden rounded-[3px] border border-border/70","aria-hidden":"true",children:[d.jsx("span",{className:"block size-3.5",style:{background:e?.background||"var(--muted)"}}),d.jsx("span",{className:"block size-3.5 border-l border-border/70",style:{background:e?.modelColor||"var(--muted)"}})]})}function ure(e){const t=e?.background||{},n=e?.materials?.fillColors;return{background:(t.type==="radial"?`radial-gradient(circle at 42% 32%, ${t.radialInner} 0%, ${t.radialOuter} 78%)`:t.type==="linear"?`linear-gradient(${Number(t.linearAngle)||135}deg, ${t.linearStart} 0%, ${t.linearEnd} 100%)`:t.solidColor)||"",modelColor:(Array.isArray(n)?n[0]:"")||""}}function dre(){const[e,t]=h.useState(!1);return h.useEffect(()=>{if(typeof window>"u"||typeof window.matchMedia!="function")return;let n;try{n=window.matchMedia("(prefers-color-scheme: dark)")}catch{return}const r=()=>t(n.matches===!0);return r(),n.addEventListener?.("change",r),()=>n.removeEventListener?.("change",r)},[]),LP({prefersDark:e})}function fre({themeSettings:e,themeId:t=ua,onSelectTheme:n}){const r=dre(),o=jP(r),i=h.useMemo(()=>[{value:tx,label:"System",preview:o?.preview||null},...Hf.map(u=>({value:u.id,label:u.label,preview:u.preview||null}))],[o]),s=t===Pl,a=i.find(u=>u.value===t)||null,l=s?"Custom":a?.label||i[0].label,c=s?ure(e):a?.preview||i[0].preview;return d.jsx(os,{title:"Theme",children:d.jsx(la,{stacked:!0,label:"Preset",value:s?"":a?.value||i[0].value,onValueChange:u=>n?.(u),ariaLabel:"Theme preset",triggerContent:d.jsxs("span",{className:"flex min-w-0 items-center gap-2",children:[d.jsx(W_,{preview:c}),d.jsx("span",{className:"truncate",children:l})]}),options:i.map(u=>({value:u.value,label:u.label,icon:d.jsx(W_,{preview:u.preview})}))})})}function mre({value:e,onChange:t}){const n=Number.isFinite(Number(e?.x))?Number(e.x):0,r=Number.isFinite(Number(e?.z))?Number(e.z):0,[o,i]=h.useState({x:n,z:r}),s=h.useRef(o),a=h.useRef(null),l=o.x,c=o.z;h.useEffect(()=>{const x={x:n,z:r};s.current=x,i(x)},[n,r]),h.useEffect(()=>()=>{a.current&&clearTimeout(a.current)},[]);const u=h.useMemo(()=>{const x=Math.max(Math.abs(l),Math.abs(c),220);return Math.min(5e3,Math.ceil(x*1.2/20)*20)},[l,c]),f=(l+u)/(u*2)*100,m=(u-c)/(u*2)*100,p=(x,S)=>{a.current&&clearTimeout(a.current),x!==n&&t("x",x),S!==r&&t("z",S)},b=(x,S)=>{const E={x,z:S};s.current=E,i(E),a.current&&clearTimeout(a.current),a.current=setTimeout(()=>{p(x,S)},CL)},y=x=>{const S=x.currentTarget.getBoundingClientRect();if(S.width<=0||S.height<=0)return;const E=Wh((x.clientX-S.left)/S.width,0,1),C=Wh((x.clientY-S.top)/S.height,0,1),A=Math.round((E*2-1)*u),N=Math.round((1-C*2)*u);b(A,N)};return d.jsxs("div",{className:"space-y-2",children:[d.jsxs("div",{className:"relative h-28 w-full touch-none overflow-hidden rounded-md border bg-background",onPointerDown:x=>{x.currentTarget.setPointerCapture(x.pointerId),y(x)},onPointerMove:x=>{x.currentTarget.hasPointerCapture(x.pointerId)&&y(x)},onPointerUp:x=>{x.currentTarget.hasPointerCapture(x.pointerId)&&x.currentTarget.releasePointerCapture(x.pointerId),p(s.current.x,s.current.z)},children:[d.jsx("div",{className:"absolute inset-0 opacity-45",style:{backgroundImage:"radial-gradient(circle, rgba(154, 169, 188, 0.65) 1.5px, transparent 1.5px)",backgroundSize:"22px 22px"},"aria-hidden":"true"}),d.jsx("div",{className:"absolute inset-x-0 top-1/2 h-px bg-border","aria-hidden":"true"}),d.jsx("div",{className:"absolute inset-y-0 left-1/2 w-px bg-border","aria-hidden":"true"}),d.jsx("div",{className:"absolute size-4 -translate-x-1/2 -translate-y-1/2 rounded-full border border-primary bg-foreground shadow-xs",style:{left:`${f}%`,top:`${m}%`},"aria-hidden":"true"})]}),d.jsxs("div",{className:"flex items-center justify-between text-[10px] text-muted-foreground",children:[d.jsxs("span",{children:["X ",Math.round(l)]}),d.jsxs("span",{children:["Z ",Math.round(c)]}),d.jsxs("span",{children:["range ±",u]})]})]})}function pre(e){return(Array.isArray(e?.parts)?e.parts:[]).filter(n=>n&&(n.bounds||n.sourceBounds)&&String(n.id||n.occurrenceId||"").trim()).length}function hre({displaySettings:e,updateDisplaySettings:t,clipBounds:n=null}){const r=h.useMemo(()=>Va(e.clip),[e]),o=s=>{t?.(a=>{const l=$i(a);return{...l,clip:t4(l.clip,s)}})},i=(s,a)=>{const l=Number(a),c=Number.isFinite(l)?l:0;o({axis:s,offset:c,offsets:{[s]:c},enabled:c>0})};return d.jsx(os,{title:"Clip",children:rre.map(s=>{const a=r.offsets?.[s]??Yb.offsets[s],l={...r,axis:s,offset:a,offsets:{...r.offsets,[s]:a}},c=vP(n,s),u=Math.max(c.max-c.min,0),f=QG(n,l);return d.jsx(fs,{label:s.toUpperCase(),value:`${ore(f)} mm`,onValueCommit:m=>{const p=ha(m,{fallback:f,min:c.min,max:c.max});i(s,u>0?(p-c.min)/u:a)},valueInputProps:{disabled:!u,ariaLabel:`Clip ${s.toUpperCase()} position`},children:d.jsx(ds,{className:KA,value:[a],min:0,max:1,step:.001,disabled:!u,onValueChange:m=>{const p=Array.isArray(m)?m[0]:m;i(s,p)},"aria-label":`Clip ${s.toUpperCase()} axis`})},s)})})}function gre({displaySettings:e,updateDisplaySettings:t,explodeMeshData:n=null}){const r=h.useMemo(()=>MP(e.exploded),[e]),o=h.useMemo(()=>pre(n),[n]),i=!!n&&o<=1,s=r.enabled?r.amount:0,a=Math.round(s*100),l=c=>{const u=Wh(c,0,1);t?.(f=>({...$i(f),exploded:{amount:u,enabled:u>0}}))};return d.jsx(fs,{label:"Exploded",value:`${a}%`,onValueCommit:c=>{l(ha(c,{fallback:a,min:0,max:100})/100)},valueInputProps:{disabled:i,ariaLabel:"Exploded amount"},children:d.jsx(ds,{className:KA,value:[s],min:0,max:1,step:.01,disabled:i,onValueChange:c=>l(Array.isArray(c)?c[0]:c),"aria-label":"Exploded amount"})})}function yre({displaySettings:e,updateDisplaySettings:t,clipBounds:n=null,explodeMeshData:r=null}){const o=h.useMemo(()=>$i(e),[e]),i=s=>{t?.(a=>({...$i(a),...s}))};return d.jsxs("div",{className:"py-2","data-cad-display-settings-section":"true",children:[d.jsxs(os,{title:"View",children:[d.jsx(la,{label:"Mode",value:o.mode,onValueChange:s=>i({mode:s}),ariaLabel:"Display mode",options:fne}),d.jsx(gre,{displaySettings:o,updateDisplaySettings:t,explodeMeshData:r})]}),d.jsx(hre,{displaySettings:o,updateDisplaySettings:t,clipBounds:n})]})}function bre(e){return{id:Bt.THEME_DISPLAY,title:"Display",content:d.jsx(yre,{...e})}}function xre({themeSettings:e,themeId:t=ua,resolvedColorSchemeMode:n=ln.LIGHT,onSelectTheme:r,updateThemeSettings:o}){const[i,s]=h.useState("directional"),a=g1.find(A=>A.value===i)||g1[0],l=e.lighting[i]||y1[i]||{enabled:!1},c=A=>{o(N=>({...N,materials:{...N.materials,...A}}))},u=A=>{o(N=>({...N,background:{...N.background,...A}}))},f=A=>{o(N=>({...N,floor:{...N.floor,...A}}))},m=A=>{o(N=>{const w=N.floor||{};return{...N,floor:{...w,axis:{...w.axis||{},...A}}}})},p=A=>{o(N=>{const w=N.floor||{};return{...N,floor:{...w,grid:{...w.grid||{},...A}}}})},b=A=>{o(N=>({...N,environment:{...N.environment,...A}}))},y=A=>{o(N=>({...N,lighting:{...N.lighting,...A}}))},S={themeSettings:e,resolvedColorSchemeMode:n,onChange:(A,N,w="")=>{o(_=>{const I=Pi(_),R=are(I.modeColors),O={...I,modeColors:R};if(w===ln.LIGHT||w===ln.DARK)return b1(R[w],A,N),O;const F=ML(I,n);return b1(O,A,N),b1(R[F],A,N),O})}},E=(A,N)=>{o(w=>({...w,lighting:{...w.lighting,[A]:{...w.lighting[A]||y1[A],...N}}}))},C=(A,N,w)=>{o(_=>{const I=_.lighting[A]||y1[A]||{};return{..._,lighting:{..._.lighting,[A]:{...I,position:{...I.position,[N]:w}}}}})};return d.jsxs("div",{className:"py-2","data-cad-theme-settings-section":"true",children:[d.jsx(fre,{themeSettings:e,themeId:t,onSelectTheme:r}),d.jsxs(os,{title:"Render",children:[d.jsx(la,{label:"Projection",value:e.projection,onValueChange:A=>o(N=>({...N,projection:A})),options:tre.map(A=>({value:A.value,label:A.label,title:A.title,icon:d.jsx(A.Icon,{className:"size-3.5",strokeWidth:2,"aria-hidden":"true"})}))}),d.jsx(zr,{label:"Tone mapping",value:jr(e.lighting.toneMappingExposure),children:d.jsx(Ir,{value:e.lighting.toneMappingExposure,min:.05,max:6,step:.01,onChange:A=>y({toneMappingExposure:A})})})]}),d.jsxs(os,{title:"Surface",children:[e.materials.cycleColors===!0?d.jsx(G_,{label:"Colors",value:`${nb(e.materials).length}/${Rh}`,children:d.jsx(cre,{colors:nb(e.materials),onChange:A=>c({defaultColor:A[0],fillColors:A})})}):d.jsx(O0,{label:"Color",value:nb(e.materials)[0],onChange:A=>{const N=nb(e.materials);c({defaultColor:A,fillColors:[A,...N.slice(1)]})}}),d.jsx(wp,{label:"Cycle colors",checked:e.materials.cycleColors===!0,onChange:A=>c({cycleColors:A})}),d.jsx(wp,{label:"Override colors",checked:e.materials.overrideSourceColors===!0,onChange:A=>c({overrideSourceColors:A})}),d.jsx(zr,{label:"Roughness",value:jr(e.materials.roughness),children:d.jsx(Ir,{value:e.materials.roughness,min:0,max:1,step:.01,onChange:A=>c({roughness:A})})}),d.jsx(zr,{label:"Metalness",value:jr(e.materials.metalness),children:d.jsx(Ir,{value:e.materials.metalness,min:0,max:1,step:.01,onChange:A=>c({metalness:A})})}),d.jsx(zr,{label:"Clearcoat",value:jr(e.materials.clearcoat),children:d.jsx(Ir,{value:e.materials.clearcoat,min:0,max:1,step:.01,onChange:A=>c({clearcoat:A})})}),d.jsx(zr,{label:"Reflections",value:jr(e.materials.envMapIntensity),children:d.jsx(Ir,{value:e.materials.envMapIntensity,min:0,max:4,step:.01,onChange:A=>c({envMapIntensity:A})})})]}),d.jsxs(os,{title:"Color grading",children:[d.jsx(zr,{label:"Saturation",value:jr(e.materials.saturation),children:d.jsx(Ir,{value:e.materials.saturation,min:0,max:2.5,step:.01,onChange:A=>c({saturation:A})})}),d.jsx(zr,{label:"Contrast",value:jr(e.materials.contrast),children:d.jsx(Ir,{value:e.materials.contrast,min:0,max:2.5,step:.01,onChange:A=>c({contrast:A})})}),d.jsx(zr,{label:"Brightness",value:jr(e.materials.brightness),children:d.jsx(Ir,{value:e.materials.brightness,min:0,max:2,step:.01,onChange:A=>c({brightness:A})})})]}),d.jsxs(os,{title:"Backdrop",children:[d.jsx(la,{label:"Type",value:e.background.type,onValueChange:A=>u({type:A}),options:ere}),e.background.type==="solid"?d.jsx(rs,{label:"Color",path:["background","solidColor"],...S}):null,e.background.type==="linear"?d.jsxs(d.Fragment,{children:[d.jsx(rs,{label:"Start color",path:["background","linearStart"],...S}),d.jsx(rs,{label:"End color",path:["background","linearEnd"],...S}),d.jsx(zr,{label:"Angle",value:`${jr(e.background.linearAngle,0)}°`,children:d.jsx(Ir,{value:e.background.linearAngle,min:-360,max:360,step:1,onChange:A=>u({linearAngle:A})})})]}):null,e.background.type==="radial"?d.jsxs(d.Fragment,{children:[d.jsx(rs,{label:"Inner color",path:["background","radialInner"],...S}),d.jsx(rs,{label:"Outer color",path:["background","radialOuter"],...S})]}):null]}),d.jsx(os,{title:"Floor",toggle:d.jsx(cf,{label:"Enable floor",checked:e.floor?.enabled===!0,onCheckedChange:A=>f({enabled:A})}),children:e.floor?.enabled===!0?d.jsxs(d.Fragment,{children:[d.jsx(wp,{label:"Follow model",checked:e.floor?.followModel!==!1,onChange:A=>f({followModel:A})}),d.jsx(rs,{label:"Color",path:["floor","color"],...S}),d.jsx(zr,{label:"Roughness",value:jr(e.floor?.roughness??.72),children:d.jsx(Ir,{value:e.floor?.roughness??.72,min:0,max:1,step:.01,onChange:A=>f({roughness:A})})}),d.jsx(zr,{label:"Reflectivity",value:jr(e.floor?.reflectivity??.12),children:d.jsx(Ir,{value:e.floor?.reflectivity??.12,min:0,max:1,step:.01,onChange:A=>f({reflectivity:A})})}),d.jsx(zr,{label:"Shadow",value:jr(e.floor?.shadowOpacity??.45),children:d.jsx(Ir,{value:e.floor?.shadowOpacity??.45,min:0,max:1,step:.01,onChange:A=>f({shadowOpacity:A})})}),d.jsx(zr,{label:"Backdrop blend",value:jr(e.floor?.horizonBlend??0),children:d.jsx(Ir,{value:e.floor?.horizonBlend??0,min:0,max:1,step:.01,onChange:A=>f({horizonBlend:A})})})]}):null}),d.jsxs(os,{title:"Grid",toggle:d.jsx(cf,{label:"Enable grid",checked:e.floor?.grid?.enabled===!0,onCheckedChange:A=>p({enabled:A})}),children:[e.floor?.grid?.enabled===!0?d.jsxs(d.Fragment,{children:[d.jsx(rs,{label:"Center line",path:["floor","grid","centerColor"],...S}),d.jsx(rs,{label:"Cell line",path:["floor","grid","cellColor"],...S}),d.jsx(zr,{label:"Line opacity",value:jr(e.floor?.grid?.opacity??.18),children:d.jsx(Ir,{value:e.floor?.grid?.opacity??.18,min:0,max:1,step:.01,onChange:A=>p({opacity:A})})}),d.jsx(zr,{label:"Density",value:jr(e.floor?.grid?.density??1),children:d.jsx(Ir,{value:e.floor?.grid?.density??1,min:.25,max:4,step:.05,onChange:A=>p({density:A})})})]}):null,d.jsx(wp,{label:"Origin axis",checked:e.floor?.axis?.enabled===!0,onChange:A=>m({enabled:A})}),e.floor?.axis?.enabled===!0?d.jsxs(d.Fragment,{children:[d.jsx(rs,{label:"Axis color",path:["floor","axis","color"],...S}),d.jsx(zr,{label:"Axis opacity",value:jr(e.floor?.axis?.opacity??.5),children:d.jsx(Ir,{value:e.floor?.axis?.opacity??.5,min:0,max:1,step:.01,onChange:A=>m({opacity:A})})})]}):null]}),d.jsx(os,{title:"Environment",toggle:d.jsx(cf,{label:"Enable environment light",checked:e.environment.enabled,onCheckedChange:A=>b({enabled:A})}),children:e.environment.enabled?d.jsxs(d.Fragment,{children:[d.jsx(la,{label:"Map",value:e.environment.presetId,onValueChange:A=>b({presetId:A}),ariaLabel:"Environment map",options:t0.map(A=>({value:A.id,label:A.label}))}),d.jsx(zr,{label:"Intensity",value:jr(e.environment.intensity),children:d.jsx(Ir,{value:e.environment.intensity,min:0,max:4,step:.01,onChange:A=>b({intensity:A})})}),d.jsx(zr,{label:"Rotation",value:`${jr(e.environment.rotationY*180/Math.PI,0)}°`,onValueCommit:A=>{const N=ha(A,{fallback:e.environment.rotationY*180/Math.PI,min:-180,max:180});b({rotationY:N*Math.PI/180})},children:d.jsx(Ir,{value:e.environment.rotationY,min:-Math.PI,max:Math.PI,step:.01,onChange:A=>b({rotationY:A})})}),d.jsx(wp,{label:"Use as backdrop",checked:e.environment.useAsBackground,onChange:A=>b({useAsBackground:A})})]}):null}),d.jsxs(os,{title:"Lights",toggle:d.jsx(cf,{label:`Enable ${a.label.toLowerCase()} light`,checked:l.enabled,onCheckedChange:A=>E(i,{enabled:A})}),children:[d.jsx(la,{label:"Light",value:i,onValueChange:s,options:g1.map(A=>({value:A.value,label:A.label}))}),l.enabled?d.jsxs(d.Fragment,{children:[nre.includes(i)?d.jsx(rs,{label:"Color",path:["lighting",i,"color"],...S}):d.jsx(O0,{label:"Color",value:l.color,onChange:A=>E(i,{color:A})}),d.jsx(zr,{label:"Intensity",value:jr(l.intensity),children:d.jsx(Ir,{value:l.intensity,min:0,max:20,step:.01,onChange:A=>E(i,{intensity:A})})}),i==="spot"?d.jsx(zr,{label:"Angle",value:`${jr(l.angle*180/Math.PI,0)}°`,onValueCommit:A=>{const N=ha(A,{fallback:l.angle*180/Math.PI});E(i,{angle:Wh(N*Math.PI/180,.01,1.57)})},children:d.jsx(Ir,{value:l.angle,min:.01,max:1.57,step:.01,onChange:A=>E(i,{angle:A})})}):null,i==="spot"||i==="point"?d.jsx(zr,{label:"Distance",value:jr(l.distance,0),children:d.jsx(Ir,{value:l.distance,min:0,max:5e3,step:1,onChange:A=>E(i,{distance:A})})}):null,d.jsx(G_,{label:"Position (X/Z)",children:d.jsx(mre,{value:l.position,onChange:(A,N)=>C(i,A,N)})}),d.jsx(zr,{label:"Height (Y)",value:jr(l.position.y,0),children:d.jsx(Ir,{value:l.position.y,min:-5e3,max:5e3,step:1,onChange:A=>C(i,"y",A)})})]}):null]}),d.jsx(os,{title:"Ambient",toggle:d.jsx(cf,{label:"Enable ambient light",checked:e.lighting.ambient.enabled,onCheckedChange:A=>E("ambient",{enabled:A})}),children:e.lighting.ambient.enabled?d.jsxs(d.Fragment,{children:[d.jsx(rs,{label:"Color",path:["lighting","ambient","color"],...S}),d.jsx(zr,{label:"Intensity",value:jr(e.lighting.ambient.intensity),children:d.jsx(Ir,{value:e.lighting.ambient.intensity,min:0,max:20,step:.01,onChange:A=>E("ambient",{intensity:A})})})]}):null}),d.jsx(os,{title:"Hemisphere",toggle:d.jsx(cf,{label:"Enable hemisphere light",checked:e.lighting.hemisphere.enabled,onCheckedChange:A=>E("hemisphere",{enabled:A})}),children:e.lighting.hemisphere.enabled?d.jsxs(d.Fragment,{children:[d.jsx(rs,{label:"Sky color",path:["lighting","hemisphere","skyColor"],...S}),d.jsx(rs,{label:"Ground color",path:["lighting","hemisphere","groundColor"],...S}),d.jsx(zr,{label:"Intensity",value:jr(e.lighting.hemisphere.intensity),children:d.jsx(Ir,{value:e.lighting.hemisphere.intensity,min:0,max:20,step:.01,onChange:A=>E("hemisphere",{intensity:A})})})]}):null})]})}function Sre({open:e,isDesktop:t,width:n,onClose:r,onStartResize:o,themeSettings:i,themeId:s=ua,resolvedColorSchemeMode:a=ln.LIGHT,onSelectTheme:l,updateThemeSettings:c}){return d.jsx(ug,{open:e,title:"Theme",isDesktop:t,width:n,onOpenChange:u=>{u||r?.()},onStartResize:o,scrollBody:!1,children:d.jsx(ud,{className:"min-h-0 flex-1",viewportClassName:"h-full",children:d.jsx(xre,{themeSettings:i,themeId:s,resolvedColorSchemeMode:a,onSelectTheme:l,updateThemeSettings:c})})})}const IL="cad-viewer:file-sheet-tab-layout:v4",k0=.5,Ere=.2,wre=.8,No=Object.freeze({TOP:"top",BOTTOM:"bottom"}),vre=Object.freeze(new Set(["step","dxf"]));function dg(e){return String(e??"").trim()}function im(e){return Array.isArray(e)?[...new Set(e.map(dg).filter(Boolean))]:[]}function nd(e){return vre.has(dg(e))}function sm(e){const t=Number(e);return Number.isFinite(t)?Math.min(wre,Math.max(Ere,t)):k0}const Are=Object.freeze(new Set([Bt.STEP_TREE,Bt.DXF_MATERIAL]));function Cre(e,t,n){const r=n.get(t);for(let o=0;o<e.length;o+=1){const i=n.get(e[o]);if(i!=null&&i>r)return o}return e.length}function NL(e,t){return nd(e)?Are.has(dg(t))?No.TOP:No.BOTTOM:No.TOP}function K_(e,t){const n=im(t);if(!nd(e))return{split:!1,top:n,bottom:[],ratio:k0};let r=n.filter(s=>NL(e,s)===No.TOP),o=n.filter(s=>!r.includes(s));!r.length&&o.length&&(r=[o[0]],o=o.slice(1));const i=r.length>0&&o.length>0;return{split:i,top:i?r:n,bottom:i?o:[],ratio:k0}}function x1(e,t,n){const r=im(n);if(!r.length)return{split:!1,top:[],bottom:[],ratio:k0};if(!e||typeof e!="object")return K_(t,r);const o=new Set(r),i=new Set,s=m=>im(m).filter(p=>!o.has(p)||i.has(p)?!1:(i.add(p),!0));let a=s(e.top),l=nd(t)?s(e.bottom):[];const c=new Map(r.map((m,p)=>[m,p]));for(const m of r){if(i.has(m))continue;const p=NL(t,m)===No.TOP?a:l;p.splice(Cre(p,m,c),0,m),i.add(m)}const u=sm(e.ratio);if(!nd(t))return{split:!1,top:[...a,...l],bottom:[],ratio:u};const f=e.split!==!1;return f&&a.length>0&&l.length>0?{split:!0,top:a,bottom:l,ratio:u}:f?{...K_(t,r),ratio:u}:{split:!1,top:[...a,...l],bottom:[],ratio:u}}function Kh(e,t){return Array.isArray(e?.[t])?e[t]:[]}function q_(e,t,n,r,o){const i=dg(n);if(!i)return e;const s=r===No.BOTTOM?No.BOTTOM:No.TOP;let a=Kh(e,No.TOP).filter(m=>m!==i),l=Kh(e,No.BOTTOM).filter(m=>m!==i);const c=s===No.TOP?a:l,u=Number.isFinite(Number(o))?Math.min(Math.max(Math.trunc(Number(o)),0),c.length):c.length;c.splice(u,0,i);const f=sm(e?.ratio);return nd(t)?!a.length||!l.length?{split:!1,top:[...a,...l],bottom:[],ratio:f}:{split:!0,top:a,bottom:l,ratio:f}:{split:!1,top:[...a,...l],bottom:[],ratio:f}}function Mre(e,t){return{...e,ratio:sm(t)}}function S1(e,t){const n=im(t);let r="";for(const o of n)e.includes(o)&&(r=o);return r||e[0]||""}function Ire(e,t,n){const r=Kh(e,No.TOP),o=Kh(e,No.BOTTOM);if(!(e?.split===!0&&nd(t)&&r.length>0&&o.length>0)){const s=[...r,...o];return{split:!1,ratio:sm(e?.ratio),panes:[{pane:No.TOP,tabs:s,activeId:S1(s,n)}]}}return{split:!0,ratio:sm(e?.ratio),panes:[{pane:No.TOP,tabs:r,activeId:S1(r,n)},{pane:No.BOTTOM,tabs:o,activeId:S1(o,n)}]}}function E1(e,t,n,r,o){const i=dg(o);if(!i)return im(e);const s=new Set(Kh(t,r)),a=im(e).filter(l=>l===i||!s.has(l));return a.includes(i)&&a.splice(a.indexOf(i),1),a.push(i),a}function TL(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Nre(e){if(!e)return{};try{const t=e.getItem(IL);if(!t)return{};const n=JSON.parse(t);return TL(n)?n:{}}catch{return{}}}function Tre(e,t){if(e)try{e.setItem(IL,JSON.stringify(TL(t)?t:{}))}catch{}}function Y_(){try{return typeof window<"u"?window.localStorage:null}catch{return null}}function _re(e,t){const n=t.join("|"),r=h.useRef(t);r.current=t;const[o,i]=h.useState(()=>({}));h.useEffect(()=>{const l=Nre(Y_());l&&Object.keys(l).length&&i(l)},[]);const s=h.useMemo(()=>x1(o[e],e,t),[o,e,n]),a=h.useCallback(l=>{i(c=>{const u=r.current,f=x1(c[e],e,u),m=typeof l=="function"?l(f):l,p=x1(m,e,u),b={...c,[e]:p};return Tre(Y_(),b),b})},[e]);return[s,a]}function Rre({section:e,pane:t,active:n,dragging:r,onActivate:o,onDragStart:i,onDragEnd:s}){return d.jsx("button",{type:"button",role:"tab","aria-selected":n,title:e.titleAttr||void 0,"data-file-sheet-tab":e.id,draggable:!0,onClick:()=>o(t,e.id),onDragStart:a=>{a.dataTransfer.effectAllowed="move";try{a.dataTransfer.setData("text/plain",e.id)}catch{}i(e.id,t)},onDragEnd:s,className:J("group/file-sheet-tab relative -mb-px flex h-8 max-w-[12rem] shrink-0 cursor-pointer select-none items-center gap-1.5 whitespace-nowrap border-r border-sidebar-border/50 border-b-2 px-2 text-[11px] font-medium leading-none transition-colors",n?"border-b-primary bg-accent/40 text-foreground":"border-b-transparent text-muted-foreground hover:bg-accent/25 hover:text-foreground",r&&"opacity-40"),children:d.jsx("span",{className:"min-w-0 truncate",children:e.title})})}function Pre({pane:e,tabs:t,activeId:n,sectionsById:r,dragId:o,dropIndex:i,isDropPane:s,onActivate:a,onDragStartTab:l,onDragEndTab:c,onPaneDragOver:u,onPaneDrop:f,onPaneDragLeave:m}){const p=h.useRef(null),b=n?r.get(n):null;return d.jsxs("section",{className:"flex min-h-0 min-w-0 flex-1 flex-col","data-file-sheet-tab-pane":e,onDragOver:y=>u(y,e,p.current),onDrop:y=>f(y,e),onDragLeave:m,children:[d.jsxs("div",{role:"tablist","aria-orientation":"horizontal",ref:p,className:J("flex h-8 shrink-0 items-stretch overflow-x-auto border-b border-sidebar-border/70 [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",s&&"bg-accent/20"),children:[t.map((y,x)=>{const S=r.get(y);return S?d.jsxs("span",{className:"relative flex items-stretch",children:[s&&i===x?d.jsx("span",{className:"absolute inset-y-0 -left-px z-10 w-0.5 bg-primary","aria-hidden":"true"}):null,d.jsx(Rre,{section:S,pane:e,active:y===n,dragging:y===o,onActivate:a,onDragStart:l,onDragEnd:c})]},y):null}),s&&i>=t.length?d.jsx("span",{className:"relative flex items-stretch",children:d.jsx("span",{className:"absolute inset-y-0 left-0 z-10 w-0.5 bg-primary","aria-hidden":"true"})}):null]}),d.jsx(ud,{className:"min-h-0 flex-1",viewportClassName:"h-full","data-file-sheet-tab-panel":n||void 0,children:b?b.content:null})]})}function Ore(e,t){if(!e)return null;const n=e.querySelectorAll("[data-file-sheet-tab]");let r=0;for(const o of n){const i=o.getBoundingClientRect();if(t<i.left+i.width/2)return r;r+=1}return r}function bx({kind:e,sections:t,openSectionIds:n=[],onOpenSectionIdsChange:r}){const o=h.useMemo(()=>Array.isArray(t)?t.filter(Boolean):[],[t]),i=h.useMemo(()=>o.map(q=>q.id),[o]),s=h.useMemo(()=>{const q=new Map;for(const re of o)q.set(re.id,re);return q},[o]),[a,l]=_re(e,i),c=h.useMemo(()=>Ire(a,e,n),[a,e,n]),[u,f]=h.useState(""),m=h.useRef(""),[p,b]=h.useState(null),[y,x]=h.useState(!1),[S,E]=h.useState(null),C=h.useRef(null),A=h.useRef(!1),N=h.useCallback((q,re)=>{r?.(E1(n,a,e,q,re))},[a,e,r,n]),w=h.useCallback(q=>{m.current=q,f(q)},[]),_=h.useCallback(()=>{m.current="",f(""),b(null),x(!1)},[]),I=h.useCallback((q,re,Be)=>{if(!m.current)return;q.preventDefault(),q.dataTransfer.dropEffect="move",x(!1);const Me=Ore(Be,q.clientX);b({pane:re,index:Me??0})},[]),R=h.useCallback(q=>{q.currentTarget.contains(q.relatedTarget)||b(re=>re&&null)},[]),O=h.useCallback((q,re)=>{const Be=m.current;if(!Be)return;q.preventDefault();const Me=p&&p.pane===re?p.index:void 0,He=q_(a,e,Be,re,Me);l(He);const de=(He.bottom||[]).includes(Be)?No.BOTTOM:No.TOP;r?.(E1(n,He,e,de,Be)),_()},[a,_,p,e,r,n,l]),F=nd(e)&&i.length>1,V=h.useCallback(q=>{m.current&&(q.preventDefault(),q.stopPropagation(),q.dataTransfer.dropEffect="move",b(null),x(!0))},[]),$=h.useCallback(q=>{q.currentTarget.contains(q.relatedTarget)||x(!1)},[]),K=h.useCallback(q=>{const re=m.current;if(!re)return;q.preventDefault(),q.stopPropagation();const Be=q_(a,e,re,No.BOTTOM,0);l(Be),r?.(E1(n,Be,e,No.BOTTOM,re)),_()},[a,_,e,r,n,l]),U=h.useCallback(q=>{q.preventDefault(),A.current=!0,q.currentTarget.setPointerCapture?.(q.pointerId)},[]),Y=h.useCallback(q=>{if(!A.current||!C.current)return;const re=C.current.getBoundingClientRect();re.height<=0||E(sm((q.clientY-re.top)/re.height))},[]),D=h.useCallback(q=>{A.current&&(A.current=!1,q.currentTarget.releasePointerCapture?.(q.pointerId),E(re=>(re!=null&&l(Be=>Mre(Be,re)),null)))},[l]),j=q=>d.jsx(Pre,{pane:q.pane,tabs:q.tabs,activeId:q.activeId,sectionsById:s,dragId:u,dropIndex:p&&p.pane===q.pane?p.index:-1,isDropPane:!!u&&p?.pane===q.pane,onActivate:N,onDragStartTab:w,onDragEndTab:_,onPaneDragOver:I,onPaneDrop:O,onPaneDragLeave:R});if(!c.split)return d.jsxs("div",{className:"relative flex min-h-0 flex-1 flex-col",children:[j(c.panes[0]),F&&u?d.jsx("div",{"data-file-sheet-split-zone":"",onDragOver:V,onDragLeave:$,onDrop:K,className:J("absolute inset-x-0 bottom-0 z-20 flex h-1/2 items-center justify-center border-t-2 border-dashed transition-colors",y?"border-primary bg-primary/15":"border-sidebar-border/70 bg-background/30"),children:d.jsxs("span",{className:"pointer-events-none flex items-center gap-1.5 text-[11px] font-medium text-muted-foreground",children:[d.jsx(d5,{className:"size-3.5",strokeWidth:2,"aria-hidden":"true"}),"Drop here to split"]})}):null]});const ee=S??c.ratio,[X,ve]=c.panes;return d.jsxs("div",{ref:C,className:"flex min-h-0 flex-1 flex-col",children:[d.jsx("div",{className:"flex min-h-0 min-w-0 flex-col",style:{flex:`0 0 ${ee*100}%`},children:j(X)}),d.jsx("div",{role:"separator","aria-orientation":"horizontal","aria-label":"Resize tab panes",onPointerDown:U,onPointerMove:Y,onPointerUp:D,className:"relative z-10 h-px shrink-0 cursor-row-resize touch-none bg-sidebar-border transition-colors before:absolute before:inset-x-0 before:-top-[3px] before:h-[7px] before:content-[''] hover:bg-ring"}),d.jsx("div",{className:"flex min-h-0 min-w-0 flex-1 flex-col",children:j(ve)})]})}const kre=Xh("inline-flex w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-md border px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-colors [&>svg]:size-3",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground",secondary:"border-transparent bg-secondary text-secondary-foreground",destructive:"border-transparent bg-destructive text-white dark:bg-destructive/60","destructive-outline":"border-destructive/45 bg-destructive/10 text-destructive dark:border-red-400/40 dark:text-red-300",outline:"text-foreground",warning:"border-amber-500/45 bg-amber-500/10 text-amber-800 dark:text-amber-300","warning-outline":"border-amber-500/45 bg-amber-500/10 text-amber-800 dark:text-amber-300"}},defaultVariants:{variant:"default"}});function qA({className:e,variant:t,...n}){return d.jsx("span",{"data-slot":"badge",className:J(kre({variant:t}),e),...n})}const hr=Object.freeze({ERROR:"error",WARNING:"warning",INFO:"info"}),Dre=Object.freeze({[hr.ERROR]:3,[hr.WARNING]:2,[hr.INFO]:1}),Lre=/(?:^|\n)\s*Regenerate STEP artifacts[^\n]*(?=\n|$)/gi;function qr(e){return String(e||"").replace(Lre,"").trim()}function ls(e,t,{mono:n=!1}={}){const r=qr(t);return r?{label:e,value:r,mono:n}:null}function Fre(e,t={},n=""){const r=qr(e);return rm(r,t,{anchorFile:n})||r}function Ru(e,t,n={},r="",o={}){return ls(e,Fre(t,n,r),o)}function jre(e){return qr(e).toLowerCase()==="python"?"python":"step"}function zre(e,t){return Object.prototype.hasOwnProperty.call(e||{},t)}function xx(e,t=hr.INFO){const n=qr(e).toLowerCase();return n===hr.ERROR?hr.ERROR:n===hr.WARNING||n==="warn"?hr.WARNING:n===hr.INFO||n==="information"?hr.INFO:t}function D0(e){return Dre[xx(e,"")]||0}function YA(e){const t=xx(e,"");return t===hr.ERROR?"Error":t===hr.WARNING?"Warning":t===hr.INFO?"Info":""}function XA(e,t=0){if(!e||typeof e!="object")return null;const n=xx(e.level,hr.INFO),r=qr(e.title)||YA(n)||"Status",o=qr(e.message),i=qr(e.code),s=qr(e.source),a=Array.isArray(e.details)?e.details.map(l=>!l||typeof l!="object"?null:ls(l.label,l.value,{mono:l.mono===!0})).filter(Boolean):[];return{id:qr(e.id)||`${s||"status"}:${i||r}:${t}`,level:n,source:s,code:i,title:r,message:o,details:a}}function rd(e){if(!Array.isArray(e))return[];const t=new Set;return e.map(XA).filter(n=>{if(!n)return!1;const r=[n.level,n.title,n.message,n.details.map(o=>`${o.label}:${o.value}`).join("|")].join(`
|
||
`);return t.has(r)?!1:(t.add(r),!0)})}function ZA(e){return rd(e).filter(t=>t.level===hr.ERROR||t.level===hr.WARNING).sort((t,n)=>D0(n.level)-D0(t.level))}function Bre(e){return ZA(e).length>0}function _L(e){return rd(e).reduce((t,n)=>D0(n.level)>D0(t)?n.level:t,"")}function JA(e){return bf(e)}function Vre(e,t){const n=qr(e?.error);return e?.stale===!0||n==="stale_step_artifact"?"STEP artifact stale":n==="missing_glb"?"STEP artifact missing":JA(t)?"STEP artifact metadata warning":"STEP artifact unavailable"}function $re(e,t){return JA(t)?hr.WARNING:hr.ERROR}function RL(e){const t=qr(e?.error);return e?.stale===!0||t==="stale_step_artifact"?"Generated GLB doesn't match the hash of the STEP file.":t==="missing_glb"?"Generated GLB is missing.":t==="missing_step_topology"?"Generated GLB is missing STEP topology metadata.":t==="missing_selector_topology"?"Generated GLB is missing selector topology metadata.":t==="missing_edge_topology"?"Generated GLB is missing surface edge topology metadata.":t==="missing_surface_edge_attributes"?"Generated GLB is missing surface edge render attributes.":t==="unsupported_step_topology"?"Generated GLB topology metadata is unsupported.":t==="missing_source_path"?"Generated GLB metadata is missing its source path.":t==="missing_step_hash"?"Generated GLB is missing the hash of the STEP file.":"Generated STEP artifact is unavailable."}function Gre(e){return"STEP file missing"}function Ure(e){return hr.WARNING}function Hre(e,t){return e?.missing?jre(t?.sourceKind)==="python"?"STEP file was not generated for this Python script; only the render package is available.":"STEP file is missing from the directory.":qr(e?.message)||"STEP file is missing from the directory."}function Wre(e){return e?.status==="missing"?"Generator source missing":"Generated source warning"}function Kre(e){return e?.status==="missing"?"This file records a Python generator path, but that source file is not available.":qr(e?.message)||"Generated source metadata is incomplete."}function qre(e=null,{viewerServerInfo:t={}}={}){const n=e?.sourceStatus;return!n||n.ok!==!1?[]:rd([{id:"generated-source",level:hr.WARNING,source:"source-metadata",code:qr(n.status)||"source_identity",title:Wre(n),message:Kre(n),details:[Ru("File",e?.file,t,e?.file),ls("Source kind",n.sourceKind||e?.sourceKind),Ru("Python source",n.sourcePath||e?.source?.file,t,e?.file),ls("Raw message",n.message)].filter(Boolean)}])}function Yre({entry:e=null,stepSourceStatus:t=null,stepArtifactGenerationAvailable:n=!0,stepArtifactGenerationState:r=null,activeGenerationFiles:o=[],viewerServerInfo:i={}}={}){const s=[],a=zre(t,"artifact")?t?.artifact:e?.artifact;a?.ok===!1&&!zee({entry:e,artifact:a,generationAvailable:n,generationState:r,activeGenerationFiles:o})&&s.push({id:"step-artifact",level:$re(a,e),source:"catalog",code:qr(a.error)||"step_artifact_unavailable",title:Vre(a,e),message:RL(a),details:[ls("Code",a.error),Ru("STEP file",a.stepPath||a.sourcePath||e?.file,i,e?.file),Ru("Render package",a.packagePath,i,e?.file),Ru("CAD path",a.cadPath,i,e?.file),ls("Source kind",a.sourceKind),ls("Artifact hash",a.artifactHash,{mono:!0}),ls("Current hash",a.currentHash,{mono:!0}),ls("Raw message",a.message)].filter(Boolean)});const l=t?.step;return l?.missing&&s.push({id:"step-source",level:Ure(),source:"step-source-status",code:qr(l.status)||"missing",title:Gre(),message:Hre(l,t),details:[Ru("STEP file",t?.stepPath||t?.file,i,e?.file),ls("Source kind",t?.sourceKind),Ru("Python source",t?.sourcePath,i,e?.file)].filter(Boolean)}),rd(s)}function Xre(e){const t=XA(e);if(!t)return"";const n=["CAD Viewer issue",`Level: ${YA(t.level)||t.level}`,`Title: ${t.title}`];if(t.message&&n.push(`Description: ${t.message}`),t.source&&n.push(`Source: ${t.source}`),t.code&&n.push(`Code: ${t.code}`),t.details.length){n.push("","Details:");for(const r of t.details)n.push(`- ${r.label}: ${r.value}`)}return n.join(`
|
||
`)}function Zre(e=null){const t=e?.staticMetadata&&typeof e.staticMetadata=="object"?e.staticMetadata:{},n=Array.isArray(t.warnings)?t.warnings:[];return rd(n.map((r,o)=>({id:`sdf-warning:${o}`,level:hr.WARNING,source:"sdf-parser",code:"sdf_warning",title:"SDF warning",message:r})))}function Jre(e=null){if(!e||typeof e!="object")return null;const t=xx(e.severity,hr.ERROR);return XA({id:`viewer-alert:${qr(e.summary)||qr(e.title)||t}`,level:t,source:"viewer",code:"viewer_alert",title:qr(e.title)||qr(e.summary)||"Viewer issue",message:qr(e.message)||qr(e.summary),details:[ls("Summary",e.summary),ls("Resolution",e.resolution),ls("Command",e.command,{mono:!0})].filter(Boolean)})}function Qre({entry:e=null,fileSheetKind:t="",stepSourceStatus:n=null,stepArtifactGenerationAvailable:r=!0,stepArtifactGenerationState:o=null,activeGenerationFiles:i=[],urdfData:s=null,viewerAlert:a=null,viewerServerInfo:l=null}={}){if(!e)return[];const c=qr(t).toLowerCase(),u=[];u.push(...qre(e,{viewerServerInfo:l})),c==="step"&&u.push(...Yre({entry:e,stepSourceStatus:n,stepArtifactGenerationAvailable:r,stepArtifactGenerationState:o,activeGenerationFiles:i,viewerServerInfo:l})),c==="sdf"&&u.push(...Zre(s?.sdf||s));const f=Jre(a),m=f&&rd(u).some(p=>p.level===f.level&&p.title===f.title&&p.message===f.message);return f&&!m&&u.push(f),rd(u)}const X_=Object.freeze({[hr.ERROR]:{badgeVariant:"destructive-outline",borderClassName:"border-destructive/70"},[hr.WARNING]:{badgeVariant:"warning-outline",borderClassName:"border-amber-500/70"},[hr.INFO]:{badgeVariant:"outline",borderClassName:"border-border"}}),eoe="h-4 min-w-4 self-center rounded-sm px-1 text-[10px] font-medium leading-none",toe="h-4 self-center rounded-sm px-1.5 py-0 text-[10px] font-medium leading-none";function PL(e){return X_[e]||X_[hr.INFO]}function noe({items:e=[]}){const[t,n]=h.useState(()=>new Set),[r,o]=h.useState(""),i=ZA(e);if(h.useEffect(()=>{if(!r)return;const u=globalThis.setTimeout(()=>o(""),1400);return()=>globalThis.clearTimeout(u)},[r]),!i.length)return null;const s=u=>{n(f=>{const m=new Set(f);return m.has(u)?m.delete(u):m.add(u),m})},a=u=>{n(f=>{if(!f.has(u))return f;const m=new Set(f);return m.delete(u),m})},l=(u,f,m)=>{!m||u.key!=="Enter"&&u.key!==" "||(u.preventDefault(),s(f))},c=async(u,f)=>{u.preventDefault(),u.stopPropagation();try{await js(Xre(f)),o(f.id)}catch{o("")}};return d.jsx("ul",{className:"space-y-2 py-2 text-xs leading-5",children:i.map(u=>{const f=PL(u.level),m=Array.isArray(u.details)?u.details:[],p=m.length>0,b=t.has(u.id);return d.jsxs("li",{className:J("min-w-0 border-l-2",f.borderClassName),children:[d.jsxs("div",{role:p?"button":void 0,tabIndex:p?0:void 0,className:J("block min-w-0 rounded-md px-2 py-1 text-left",p&&"w-full cursor-pointer hover:bg-sidebar-accent/60 hover:text-sidebar-accent-foreground",!p&&"w-full"),onClick:()=>{p&&s(u.id)},onKeyDown:y=>l(y,u.id,p),"aria-expanded":p?b:void 0,children:[d.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[d.jsx(qA,{variant:f.badgeVariant,className:J("shrink-0",toe),children:YA(u.level)}),d.jsx("div",{className:"min-w-0 flex-1 truncate font-medium leading-4 text-sidebar-foreground",title:u.title,children:u.title}),d.jsx("span",{className:"ml-auto inline-flex h-5 shrink-0 items-center",children:d.jsx(Gt,{type:"button",variant:"ghost",size:"icon-xs",className:"size-5 rounded-sm text-muted-foreground hover:text-sidebar-foreground",onClick:y=>c(y,u),"aria-label":r===u.id?"Copied issue":"Copy issue for agent",title:r===u.id?"Copied":"Copy issue for agent",children:r===u.id?d.jsx(qu,{className:"size-3",strokeWidth:2.25,"aria-hidden":"true"}):d.jsx(Vf,{className:"size-3",strokeWidth:2.1,"aria-hidden":"true"})})})]}),u.message?d.jsx("div",{className:"mt-1 line-clamp-2 min-w-0 break-words text-[11px] font-normal leading-4 text-muted-foreground",children:u.message}):null]}),p&&b?d.jsxs("div",{className:"mt-2 space-y-2 pl-2",children:[d.jsx("dl",{className:"space-y-1 text-[11px] leading-4",children:m.map((y,x)=>d.jsxs("div",{className:"min-w-0",children:[d.jsx("dt",{className:"text-muted-foreground",children:y.label}),d.jsx("dd",{className:J("min-w-0 break-words text-sidebar-foreground",y.mono&&"break-all font-mono text-[10px] leading-4"),children:y.value})]},`${u.id}:${y.label}:${x}`))}),d.jsx(Gt,{type:"button",variant:"ghost",size:"xs",className:"h-auto rounded-sm px-0 py-0 text-[11px] font-medium text-muted-foreground hover:bg-transparent hover:text-sidebar-foreground",onClick:y=>{y.preventDefault(),y.stopPropagation(),a(u.id)},children:"Collapse"})]}):null]},u.id)})})}function Sx(e=[]){const t=ZA(e);if(!t.length)return null;const n=PL(_L(t));return{id:Bt.FILE_STATUS,title:d.jsxs("span",{className:"flex min-w-0 items-center gap-1.5",children:[d.jsx("span",{children:"Issues"}),d.jsx(qA,{variant:n.badgeVariant,className:eoe,children:t.length})]}),content:d.jsx(noe,{items:e})}}const roe="px-2 pb-1 pt-2 text-[10px] font-medium text-sidebar-foreground/45";function ooe(e){const t=JE[e?.pickA?.snapKind],n=JE[e?.pickB?.snapKind];return t&&n?`${t} → ${n}`:""}function OL({measurements:e=[],activeId:t="",onActivate:n=null,onDelete:r=null,onClear:o=null,measureModeActive:i=!1}){return e.length?d.jsxs("div",{className:"max-w-full overflow-hidden pb-2",children:[d.jsxs("div",{className:"flex items-center justify-between gap-2 pr-1",children:[d.jsxs("div",{className:roe,children:["Measurements",d.jsxs("span",{className:"ml-1.5 tabular-nums text-sidebar-foreground/35",children:[e.length,"/",ew]})]}),d.jsx("button",{type:"button",className:"rounded-sm px-1.5 py-0.5 text-[10px] text-sidebar-foreground/50 transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",onClick:()=>o?.(),children:"Clear"})]}),d.jsx("div",{className:"select-none space-y-px",role:"list",children:e.map((s,a)=>{const l=s.id===t,c=QE(s.measurement),u=cZ(s.measurement),f=uZ(s.measurement),m=ooe(s);return d.jsxs("div",{role:"listitem",tabIndex:0,title:[c,u,f,m].filter(Boolean).join(" · "),onClick:()=>n?.(s.id),onKeyDown:p=>{(p.key==="Enter"||p.key===" ")&&(p.preventDefault(),n?.(s.id))},className:J("group/measure-row flex h-7 min-w-0 w-full max-w-full cursor-pointer items-center gap-2 rounded-md px-2 outline-none transition-colors",l?"bg-sidebar-accent font-medium text-sidebar-accent-foreground":"text-sidebar-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:bg-sidebar-accent focus-visible:text-sidebar-accent-foreground"),children:[d.jsx("span",{"aria-hidden":"true",className:"size-2 shrink-0 rounded-full",style:{backgroundColor:lD(s.colorIndex)}}),d.jsxs("span",{className:"min-w-0 flex-1 truncate text-[11px] tabular-nums",children:[c,u?d.jsx("span",{className:"ml-1.5",children:u}):null,m?d.jsx("span",{className:"ml-1.5 text-[10px] font-normal text-current/45",children:m}):null]}),d.jsx("button",{type:"button","aria-label":`Delete measurement ${a+1}`,className:"grid size-4 shrink-0 place-items-center rounded-sm text-current/45 opacity-0 transition group-hover/measure-row:opacity-100 focus-visible:opacity-100 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",onClick:p=>{p.stopPropagation(),r?.(s.id)},children:d.jsx(Kc,{className:"size-3",strokeWidth:2,"aria-hidden":"true"})})]},s.id)})})]}):d.jsxs("div",{className:"flex min-h-[4.5rem] flex-col items-center justify-center gap-1.5 px-4 py-5 text-center",children:[d.jsx(h2,{className:"size-4 text-muted-foreground/45",strokeWidth:1.5,"aria-hidden":"true"}),d.jsx("p",{className:"text-[11px] text-muted-foreground",children:i?"Click two points on the model to measure":"Pick the Measure tool to start measuring"})]})}const ioe=[];function Z_({open:e,kind:t="mesh",title:n="Mesh",isDesktop:r,width:o,selectedEntry:i=null,onOpenChange:s,onStartResize:a,fileDownloadAvailable:l=!1,viewerServerInfo:c=null,localFileOpenAvailable:u=!1,fileAccessBusyKey:f="",onOpenFileAsset:m,suppressDynamicMetadataStatus:p=!1,statusItems:b=[],themeTabs:y=[],openSectionIds:x=[],onOpenSectionIdsChange:S,measurements:E=ioe,activeMeasurementId:C="",measureModeActive:A=!1,onMeasurementActivate:N=null,onMeasurementDelete:w=null,onMeasurementsClear:_=null}){const I=t==="mesh"?{id:Bt.STEP_MEASUREMENTS,title:"Measure",content:d.jsx(OL,{measurements:E,activeId:C,measureModeActive:A,onActivate:N,onDelete:w,onClear:_})}:null,R=[Sx(b),...I?[I]:[],...y];return d.jsx(ug,{open:e,title:n,isDesktop:r,width:o,onOpenChange:s,onStartResize:a,scrollBody:!1,children:d.jsx(bx,{kind:t,sections:R,openSectionIds:x,onOpenSectionIdsChange:S})})}const soe=1,aoe=0,Rw=25,Eh=0,kL=0,DL=180,loe=1,Pw=0,coe=Object.freeze(["up","down"]),uoe=Object.freeze(["boxed","curved"]),L0="curved",LL=20,F0=0,FL=.1,jL=.9,wh=.5,j0=Object.freeze([{value:"mm",label:"Millimetres",mmPerUnit:1,decimals:1,sliderStep:.1},{value:"cm",label:"Centimetres",mmPerUnit:10,decimals:2,sliderStep:.01},{value:"in",label:"Inches",mmPerUnit:25.4,decimals:2,sliderStep:.01},{value:"m",label:"Metres",mmPerUnit:1e3,decimals:4,sliderStep:1e-4}]),Ff="mm",z0=Object.freeze([{value:"none",label:"None",group:null,colorHex:null},{value:"1075-spring-steel",label:"1075 Spring Steel",group:"Metals",colorHex:"#9aa0a8"},{value:"2024-t3-aluminum",label:"2024 T3 Aluminum",group:"Metals",colorHex:"#d7dade"},{value:"4130-chromoly",label:"4130 Chromoly",group:"Metals",colorHex:"#9aa0a8"},{value:"5052-h32-aluminum",label:"5052 H32 Aluminum",group:"Metals",colorHex:"#d7dade"},{value:"6061-t6-aluminum",label:"6061 T6 Aluminum",group:"Metals",colorHex:"#d7dade"},{value:"7075-t6-aluminum",label:"7075 T6 Aluminum",group:"Metals",colorHex:"#d7dade"},{value:"a36-1008-mild-steel",label:"A36/1008 Mild Steel",group:"Metals",colorHex:"#9aa0a8"},{value:"ar400-steel",label:"AR400 Steel",group:"Metals",colorHex:"#9aa0a8"},{value:"ar500-steel",label:"AR500 Steel",group:"Metals",colorHex:"#9aa0a8"},{value:"brass",label:"Brass",group:"Metals",colorHex:"#c9a94f"},{value:"copper",label:"Copper",group:"Metals",colorHex:"#c47e5a"},{value:"g90-galvanized",label:"G90 Galvanized",group:"Metals",colorHex:"#c4cad1"},{value:"grade-2-titanium",label:"Grade 2 Titanium",group:"Metals",colorHex:"#b4b6bd"},{value:"grade-5-titanium",label:"Grade 5 Titanium",group:"Metals",colorHex:"#b4b6bd"},{value:"high-carbon-1095-steel",label:"High Carbon 1095 Steel",group:"Metals",colorHex:"#9aa0a8"},{value:"mic6-cast-aluminum-plate",label:"MIC6 Cast Aluminum Plate",group:"Metals",colorHex:"#d7dade"},{value:"stainless-steel-304-series",label:"Stainless Steel (304 Series)",group:"Metals",colorHex:"#c9cdd3"},{value:"stainless-steel-316-series",label:"Stainless Steel (316 Series)",group:"Metals",colorHex:"#c9cdd3"},{value:"stainless-steel-cpm-magnacut",label:"Stainless Steel Cpm Magnacut",group:"Metals",colorHex:"#c9cdd3"},{value:"abs-black",label:"ABS Black",group:"Plastics",colorHex:"#2e3238"},{value:"abs-white",label:"ABS White",group:"Plastics",colorHex:"#eceff1"},{value:"acrylic-black",label:"Acrylic Black",group:"Plastics",colorHex:"#2e3238"},{value:"acrylic-blue",label:"Acrylic Blue",group:"Plastics",colorHex:"#4a7fd4"},{value:"acrylic-clear",label:"Acrylic Clear",group:"Plastics",colorHex:"#dfe8ee"},{value:"acrylic-dark-grey",label:"Acrylic Dark Grey",group:"Plastics",colorHex:"#5a5f66"},{value:"acrylic-green",label:"Acrylic Green",group:"Plastics",colorHex:"#4d9e5f"},{value:"acrylic-light-grey",label:"Acrylic Light Grey",group:"Plastics",colorHex:"#b9bec6"},{value:"acrylic-mirror",label:"Acrylic Mirror",group:"Plastics",colorHex:"#dfe4ea"},{value:"acrylic-red",label:"Acrylic Red",group:"Plastics",colorHex:"#c94a42"},{value:"acrylic-white",label:"Acrylic White",group:"Plastics",colorHex:"#eceff1"},{value:"acrylic-yellow",label:"Acrylic Yellow",group:"Plastics",colorHex:"#e8c93e"},{value:"clear-polypropylene-sheet",label:"Clear Polypropylene Sheet",group:"Plastics",colorHex:"#dfe8ee"},{value:"delrin",label:"Delrin",group:"Plastics",colorHex:"#e8e6df"},{value:"hdpe-black",label:"HDPE Black",group:"Plastics",colorHex:"#2e3238"},{value:"hdpe-white",label:"HDPE White",group:"Plastics",colorHex:"#eceff1"},{value:"mylar-clear",label:"Mylar Clear",group:"Plastics",colorHex:"#dfe8ee"},{value:"polycarbonate-black",label:"Polycarbonate Black",group:"Plastics",colorHex:"#2e3238"},{value:"polycarbonate-clear",label:"Polycarbonate Clear",group:"Plastics",colorHex:"#dfe8ee"},{value:"polyethylene-foam",label:"Polyethylene Foam",group:"Plastics",colorHex:"#e5e2da"},{value:"uhmw-black",label:"UHMW Black",group:"Plastics",colorHex:"#2e3238"},{value:"uhmw-white",label:"UHMW White",group:"Plastics",colorHex:"#eceff1"},{value:"chipboard",label:"Chipboard",group:"Wood and MDF",colorHex:"#c9b291"},{value:"hardboard",label:"Hardboard",group:"Wood and MDF",colorHex:"#a9835a"},{value:"mdf",label:"MDF",group:"Wood and MDF",colorHex:"#c2a075"},{value:"plywood-birch",label:"Plywood Birch",group:"Wood and MDF",colorHex:"#d9b98a"},{value:"acm-black",label:"ACM Black",group:"Composites",colorHex:"#33363c"},{value:"acm-brushed-finish",label:"ACM Brushed Finish",group:"Composites",colorHex:"#c9cdd2"},{value:"acm-white",label:"ACM White",group:"Composites",colorHex:"#e9ecef"},{value:"carbon-fiber",label:"Carbon Fiber",group:"Composites",colorHex:"#33363c"},{value:"g10-black-fiberglass",label:"G10 Black Fiberglass",group:"Composites",colorHex:"#33363c"},{value:"phenolic-linen-le",label:"Phenolic Linen Le",group:"Composites",colorHex:"#a98d5f"},{value:"garlock-blue-gard-3200",label:"Garlock Blue Gard 3200",group:"Rubber and Gasket",colorHex:"#4a6fa8"},{value:"neoprene-rubber-50-60a-duro",label:"Neoprene Rubber (50 60A Duro)",group:"Rubber and Gasket",colorHex:"#33363a"},{value:"neoprene-rubber-60a-duro",label:"Neoprene Rubber (60A Duro)",group:"Rubber and Gasket",colorHex:"#33363a"},{value:"rubberized-cork",label:"Rubberized Cork",group:"Rubber and Gasket",colorHex:"#b08a5a"},{value:"synthetic-nitrile-rubber-nbr-buna-n",label:"Synthetic Nitrile Rubber (nbr, Buna N)",group:"Rubber and Gasket",colorHex:"#33363a"},{value:"vhb-double-sided-foam-adhesive-tape",label:"Vhb Double Sided Foam Adhesive Tape",group:"Rubber and Gasket",colorHex:"#33363a"},{value:"viton-rubber-fkm",label:"Viton Rubber (fkm)",group:"Rubber and Gasket",colorHex:"#33363a"}]),vh="none";function QA(e,t=vh){const n=String(e||"").trim().toLowerCase();return z0.some(r=>r.value===n)?n:t}function zL(e){return z0.find(t=>t.value===QA(e))||z0[0]}function B0(e,t=Ff){const n=String(e||"").trim().toLowerCase();return j0.some(r=>r.value===n)?n:t}function BL(e){return j0.find(t=>t.value===B0(e))||j0[0]}function jf(e,t){return(Number(e)||0)/t.mmPerUnit}function VL(e,t){return`${jf(e,t).toFixed(t.decimals)} ${t.value}`}function $L(e,t,n){const r=Number(String(e??"").replace(new RegExp(`\\s*${t.value}\\s*$`),""));return Number.isFinite(r)?r*t.mmPerUnit:n}function Ah(e,t=Eh){const n=Number(e);return!Number.isFinite(n)||n<0?t:Math.min(Rw,Math.max(aoe,n))}function V0(e,t=Pw){const n=Number(e);return Number.isFinite(n)?Math.min(DL,Math.max(kL,n)):t}function Ow(e,t="up"){const n=String(e||"").trim().toLowerCase();return coe.includes(n)?n:t}function kw(e,t=L0){const n=String(e||"").trim().toLowerCase();return uoe.includes(n)?n:t}function jb(e,t=F0){const n=Number(e);return!Number.isFinite(n)||n<0?t:Math.min(LL,n)}function zb(e,t=wh){const n=Number(e);return Number.isFinite(n)?Math.min(jL,Math.max(FL,n)):t}const J_=Object.freeze({x:0,y:0,z:0});function Q_(e){const t=n=>{const r=Math.trunc(Number(n));return Number.isFinite(r)?(r%4+4)%4:0};return{x:t(e?.x),y:t(e?.y),z:t(e?.z)}}function GL({label:e,onReset:t}){return t?d.jsx(Wc,{label:null,children:d.jsxs(Gt,{type:"button",variant:"outline",size:"sm",className:`${om} w-full justify-center`,onClick:()=>t(),"aria-label":e,title:"Reset",children:[d.jsx(Yu,{className:"h-3.5 w-3.5",strokeWidth:2,"aria-hidden":"true"}),d.jsx("span",{children:"Reset"})]})}):null}function doe({thicknessMm:e=Eh,onThicknessChange:t,units:n=Ff,onUnitsChange:r,material:o=vh,onMaterialChange:i,onReset:s}){const a=B0(n),l=BL(a),c=Ah(e),u=zL(o),f=m=>t?.(Ah($L(m,l,c),c));return d.jsxs(yx,{children:[d.jsxs(Zo,{children:[d.jsx(la,{label:"Units",value:a,onValueChange:m=>r?.(B0(m,a)),options:j0.map(({value:m,label:p})=>({value:m,label:p}))}),d.jsx(Zne,{label:"Material",value:u.value,onValueChange:m=>i?.(QA(m,u.value)),options:z0.map(({value:m,label:p,group:b})=>({value:m,label:p,group:b}))}),d.jsx(fs,{label:"Thickness",value:VL(c,l),onValueCommit:f,valueInputProps:{ariaLabel:"Thickness value",min:0,max:jf(Rw,l)},children:d.jsx(ds,{"aria-label":"Thickness",className:da,value:[jf(c,l)],min:0,max:jf(Rw,l),step:l.sliderStep,onValueChange:([m])=>t?.(Ah(m*l.mmPerUnit,c))})})]}),d.jsx(GL,{label:"Reset material settings",onReset:s})]})}function foe({bends:e=[],onBendChange:t,bendStyle:n=L0,onBendStyleChange:r,bendRadiusMm:o=F0,onBendRadiusChange:i,kFactor:s=wh,onKFactorChange:a,units:l=Ff,onRotateOrientation:c,onBendsReset:u,onOrientationReset:f}){const m=kw(n),p=jb(o),b=zb(s),y=BL(l);return d.jsxs(yx,{children:[d.jsxs(Zo,{title:"Bends",children:[e.map((x,S)=>{const E=V0(x?.angleDeg),C=Ow(x?.direction),A=N=>t?.(S,{angleDeg:V0(N,E)});return d.jsx(fs,{label:`Bend ${S+1}`,value:`${Math.round(E)}°`,trailing:d.jsxs("div",{className:"flex shrink-0 items-center gap-1.5",children:[d.jsx(UA,{ariaLabel:`Bend ${S+1} angle value`,value:`${Math.round(E)}°`,onValueCommit:A,className:"w-12"}),d.jsx(Xne,{fit:!0,ariaLabel:`Bend ${S+1} direction`,value:C,onChange:N=>t?.(S,{direction:Ow(N,C)}),options:[{value:"up",label:"Up",title:"Bend up",Icon:f5,iconOnly:!0},{value:"down",label:"Down",title:"Bend down",Icon:m5,iconOnly:!0}]})]}),children:d.jsx(ds,{"aria-label":`Bend ${S+1} angle`,className:da,value:[E],min:kL,max:DL,step:loe,onValueChange:([N])=>A(N)})},S)}),d.jsx(GL,{label:"Reset bend angles",onReset:u})]}),d.jsxs(Zo,{title:"Fold",children:[d.jsx(la,{label:"Corners",value:m,onValueChange:x=>r?.(kw(x,n)),options:[{value:"curved",label:"Curved"},{value:"boxed",label:"Boxed"}]}),m==="curved"?d.jsx(fs,{label:"Radius",value:p>0?VL(p,y):"Auto",onValueCommit:x=>i?.(jb($L(x,y,p),p)),valueInputProps:{ariaLabel:"Bend radius value",className:"w-16"},children:d.jsx(ds,{"aria-label":"Bend radius",className:da,value:[jf(p,y)],min:0,max:jf(LL,y),step:y.sliderStep,onValueChange:([x])=>i?.(jb(x*y.mmPerUnit,p))})}):null,m==="curved"?d.jsx(fs,{label:"K-factor",value:b.toFixed(2),onValueCommit:x=>a?.(zb(x,b)),valueInputProps:{ariaLabel:"K-factor value",className:"w-16"},children:d.jsx(ds,{"aria-label":"K-factor",className:da,value:[b],min:FL,max:jL,step:.01,onValueChange:([x])=>a?.(zb(x,b))})}):null]}),c?d.jsx(Zo,{title:"Orientation",children:d.jsxs(Lf,{columns:4,children:[["x","y","z"].map(x=>d.jsxs(Gt,{type:"button",variant:"outline",size:"sm",className:`${om} justify-center`,"aria-label":`Rotate model 90 degrees about ${x.toUpperCase()}`,title:`Rotate 90° about ${x.toUpperCase()}`,onClick:()=>c(x),children:[d.jsx(p5,{className:"h-3.5 w-3.5",strokeWidth:2,"aria-hidden":"true"}),d.jsxs("span",{children:[x.toUpperCase()," 90°"]})]},x)),d.jsxs(Gt,{type:"button",variant:"outline",size:"sm",className:`${om} justify-center`,"aria-label":"Reset model orientation",title:"Reset orientation",onClick:()=>f?.(),disabled:!f,children:[d.jsx(Yu,{className:"h-3.5 w-3.5",strokeWidth:2,"aria-hidden":"true"}),d.jsx("span",{children:"Reset"})]})]})}):null]})}function moe(e){return{id:Bt.DXF_MATERIAL,title:"Material",content:d.jsx(doe,{...e})}}function poe(e){return{id:Bt.DXF_BENDS,title:"Bends",content:d.jsx(foe,{...e})}}const hoe=Object.freeze({cut:"Cut",bend:"Bend",engrave:"Engrave",reference:"Reference"});function goe(e){return(Number(e?.pathCount)||0)+(Number(e?.circleCount)||0)+(Number(e?.textCount)||0)}function yoe(e){const t=hoe[String(e?.kind||"").toLowerCase()]||"Cut",n=goe(e);return n>0?`${t} · ${n}`:t}function boe({layers:e=[],hiddenLayers:t=[],onLayerVisibilityChange:n}){const r=new Set(Array.isArray(t)?t:[]);return e.length?d.jsx("div",{className:"max-w-full select-none space-y-px overflow-hidden pb-2",children:e.map(o=>{const i=r.has(o.name);return d.jsxs("div",{className:J("group/layer-row flex min-w-0 items-center gap-2 rounded-md px-2 py-1.5 text-[11px]","hover:bg-sidebar-accent/60",i&&"opacity-60"),children:[d.jsx("span",{className:"min-w-0 flex-1 truncate font-medium text-sidebar-foreground",children:o.name}),d.jsx("span",{className:"shrink-0 tabular-nums text-muted-foreground",children:yoe(o)}),d.jsx(Gt,{type:"button",variant:"ghost",size:"icon-sm",className:J("ml-1 size-6 shrink-0 text-muted-foreground hover:text-foreground",!i&&"opacity-0 group-hover/layer-row:opacity-100 focus-visible:opacity-100"),"aria-label":i?`Show layer ${o.name}`:`Hide layer ${o.name}`,title:i?"Show":"Hide",onClick:()=>n?.(o.name,i),children:i?d.jsx(sv,{className:"size-3",strokeWidth:1.8,"aria-hidden":"true"}):d.jsx(av,{className:"size-3",strokeWidth:1.8,"aria-hidden":"true"})})]},o.name)})}):d.jsx(yx,{children:d.jsx(Wu,{className:"py-1",children:"No layers in this drawing."})})}function xoe(e){return{id:Bt.DXF_LAYERS,title:"Layers",content:d.jsx(boe,{...e})}}function Soe(e){const t=Number(e);return Number.isFinite(t)?`${t.toFixed(2)}x`:"1.00x"}function Tf(e,t,n){e?.onSettingsChange?.(r=>({...Ws(r),[t]:n}))}function rb({label:e,settingKey:t,settings:n,runtime:r}){const o=Gp[t],i=n[t];return d.jsx(fs,{label:e,value:Soe(i),onValueCommit:s=>{Tf(r,t,ha(s,{fallback:i,min:o.min,max:o.max}))},valueInputProps:{ariaLabel:`${e} value`},children:d.jsx(ds,{className:da,value:[i],min:o.min,max:o.max,step:o.step,onValueChange:s=>Tf(r,t,s?.[0]??i),"aria-label":e})})}function Eoe({runtime:e=null,value:t="graphics",title:n="Graphics"}){const r=Ws(e?.settings),o=!!e?.model?.colorSource,i=tY(r,na);return d.jsxs(yx,{children:[rb({label:"Resolution",settingKey:"resolutionScale",settings:r,runtime:e}),rb({label:"Motion resolution",settingKey:"interactionResolutionScale",settings:r,runtime:e}),rb({label:"Ray detail",settingKey:"detail",settings:r,runtime:e}),rb({label:"Normal smoothing",settingKey:"normalSmoothing",settings:r,runtime:e}),d.jsx(Rc,{label:"Model colors",checked:r.modelColors&&o,disabled:!o,onCheckedChange:s=>Tf(e,"modelColors",s),ariaLabel:"Model colors"}),d.jsx(Rc,{label:"Soft shadows",checked:r.shadows,onCheckedChange:s=>Tf(e,"shadows",s),ariaLabel:"Soft shadows"}),d.jsx(Rc,{label:"Ambient occlusion",checked:r.ambientOcclusion,onCheckedChange:s=>Tf(e,"ambientOcclusion",s),ariaLabel:"Ambient occlusion"}),d.jsx(Rc,{label:"Rim light",checked:r.rimLight,onCheckedChange:s=>Tf(e,"rimLight",s),ariaLabel:"Rim light"}),d.jsx(Wc,{children:d.jsxs(Gt,{type:"button",variant:"outline",size:"sm",className:J(om,"w-full justify-center"),disabled:i,onClick:()=>e?.onSettingsChange?.(na),title:"Reset graphics",children:[d.jsx(Yu,{className:"h-3.5 w-3.5",strokeWidth:2,"aria-hidden":"true"}),d.jsx("span",{children:"Reset graphics"})]})})]})}const UL=.01,woe=1e-6,voe=1e3;function w1(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function eR(e,t=0){const n=Number(e);return Number.isFinite(n)?n:t}function Aoe(e){const t=Number(e);return Number.isFinite(t)&&t>0?t:0}function Coe(e){const t=Number(e);return Number.isFinite(t)?Number(t.toPrecision(12)):UL}function Moe(e,t="parameters"){const n=String(e??"").trim();if(!n)throw new Error(`Clipboard does not contain ${t}`);try{return JSON.parse(n)}catch{const r=n.indexOf("{"),o=n.lastIndexOf("}");if(r>=0&&o>r)return JSON.parse(n.slice(r,o+1));throw new Error(`${t} paste must be JSON`)}}function Ioe(e){const t=Aoe(e?.step),n=eR(e?.min,0),r=eR(e?.max,n),o=Math.abs(r-n),i=o>0?Math.max(10**Math.floor(Math.log10(o/voe)),woe):UL;return Coe(t>0?Math.min(t,i):i)}function Noe(e,t={}){const n=Array.isArray(e?.parameters)?e.parameters:[];if(!n.length)return"{}";const r=Jf(e,t),o=Object.fromEntries(n.map(i=>[i.id,r[i.id]]));return JSON.stringify(o,null,2)}function Toe(e,t,{label:n="parameters",unknownLabel:r="parameter"}={}){const o=w1(e?.parameterMap)?e.parameterMap:{},i=Moe(t,n),s=w1(i?.values)?i.values:i;if(!w1(s))throw new Error(`${n} paste must be a JSON object`);const a=[],l={};for(const[u,f]of Object.entries(s)){const m=String(u||"").trim();if(!m)continue;const p=o[m];if(!p){a.push(m);continue}l[m]=ed(p,f)}if(a.length)throw new Error(`Unknown ${r}${a.length===1?"":"s"}: ${a.join(", ")}`);const c=Object.keys(l).length;if(!c)throw new Error(`No known ${r}s found`);return{values:l,count:c}}const ob=om,HL=.1,WL=3;function tR(e){const t=Number(e);return Number.isFinite(t)?Math.abs(t)>=100?t.toFixed(0):Math.abs(t)>=10?t.toFixed(1):t.toFixed(2):"0"}function _oe(e){const t=Math.max(Number(e)||0,0);return`${t.toFixed(t>=10?1:2)}s`}function Roe(e,t=1){return ha(e,{fallback:t,min:HL,max:WL})}function Poe({animationState:e={},duration:t,enabled:n,onScrub:r,label:o="parameter"}){const i=Number(e.elapsedSec)||0;return d.jsx(fs,{label:"Time",value:_oe(i),onValueCommit:s=>{r?.(ha(s,{fallback:i,min:0,max:t}))},valueInputProps:{disabled:!n,ariaLabel:`${o} animation time value`},children:d.jsx(ds,{className:da,value:[i],min:0,max:t,step:.01,onValueChange:s=>r?.(s?.[0]??0),disabled:!n,"aria-label":`${o} animation time`})})}function Ooe({value:e="parameters",title:t="Parameters",runtime:n=null,label:r="parameter",loadingLabel:o="Loading parameters...",noParametersLabel:i="No parameters.",hideWhenEmpty:s=!1,showEnableToggle:a=!1,enableLabel:l="Enable",enableAriaLabel:c="",animationAriaLabel:u="Animation",resetTitle:f="Reset parameters",TimeControl:m=Poe}){const p=n?.definition||null,b=Array.isArray(p?.parameters)?p.parameters:[],y=Array.isArray(p?.animations)?p.animations:[],x=String(n?.status||"").trim(),S=String(n?.error||"").trim(),E=n?.parameterValues||{},C=n?.animationState||{},A=Math.max(Number(C.duration)||1,.001),N=n?.enabled!==!1;return KL(n,{hideWhenEmpty:s})?d.jsxs("div",{className:"py-2",children:[x==="loading"?d.jsx(Wu,{className:"py-2",children:o}):null,S?d.jsx(Wu,{tone:"error",className:"py-2",children:S}):null,p&&a?d.jsx(Zo,{title:"Module",children:d.jsx(Rc,{label:l,checked:N,onCheckedChange:w=>n?.onEnabledChange?.(w),ariaLabel:c||l})}):null,p&&y.length?d.jsxs(Zo,{title:"Animation",children:[y.length>1?d.jsx(la,{stacked:!0,label:"Clip",value:String(C.activeId||y[0]?.id||""),onValueChange:w=>n?.onAnimationSelect?.(w),disabled:!N,ariaLabel:u,options:y.map(w=>({value:w.id,label:w.label}))}):null,d.jsxs(Lf,{columns:2,children:[d.jsxs(Gt,{type:"button",variant:"outline",size:"sm",className:J(ob,"justify-center"),onClick:()=>n?.onAnimationPlayToggle?.(),disabled:!N,"aria-label":`${C.playing?"Pause":"Play"} ${r} animation`,title:`${C.playing?"Pause":"Play"} ${r} animation`,children:[C.playing?d.jsx(g2,{className:"h-3.5 w-3.5",strokeWidth:2,"aria-hidden":"true"}):d.jsx(y2,{className:"h-3.5 w-3.5",strokeWidth:2,"aria-hidden":"true"}),d.jsx("span",{children:C.playing?"Pause":"Play"})]}),d.jsxs(Gt,{type:"button",variant:"outline",size:"sm",className:J(ob,"justify-center"),onClick:()=>n?.onAnimationReset?.(),disabled:!N,"aria-label":`Restart ${r} animation`,title:"Restart",children:[d.jsx(Yu,{className:"h-3.5 w-3.5",strokeWidth:2,"aria-hidden":"true"}),d.jsx("span",{children:"Restart"})]})]}),d.jsx(Rc,{label:"Loop",checked:C.loopEnabled!==!1,onCheckedChange:w=>n?.onAnimationLoopToggle?.(w),disabled:!N,ariaLabel:"Loop animation playback"}),d.jsx(m,{animationState:C,duration:A,enabled:N,onScrub:n?.onAnimationScrub,label:r}),d.jsx(fs,{label:"Speed",value:`${tR(C.speed||1)}x`,onValueCommit:w=>{n?.onAnimationSpeedChange?.(Roe(w,C.speed||1))},valueInputProps:{disabled:!N,ariaLabel:`${r} animation speed value`},children:d.jsx(ds,{className:da,value:[Number(C.speed)||1],min:HL,max:WL,step:.1,onValueChange:w=>n?.onAnimationSpeedChange?.(w?.[0]??1),disabled:!N,"aria-label":`${r} animation speed`})})]}):null,p?d.jsxs(Zo,{title:t,children:[b.length?null:d.jsx(Wu,{children:i}),b.map(w=>{const _=E?.[w.id]??w.defaultValue,I=Ioe(w);return w.type==="boolean"?d.jsx(Rc,{label:w.label,checked:_===!0,onCheckedChange:R=>n?.onParameterChange?.(w.id,R),disabled:!N,ariaLabel:w.label},w.id):w.type==="enum"?d.jsx(la,{label:w.label,value:String(_??""),onValueChange:R=>n?.onParameterChange?.(w.id,R),disabled:!N,ariaLabel:w.label,options:w.options},w.id):w.type==="color"?d.jsx(Wc,{label:w.label,trailing:d.jsx(WA,{value:String(_||"#ffffff"),onChange:R=>n?.onParameterChange?.(w.id,R),disabled:!N,"aria-label":w.label})},w.id):w.type==="button"?d.jsx(Lf,{children:d.jsx(Gt,{type:"button",variant:"outline",size:"sm",className:J(ob,"justify-center"),onClick:()=>n?.onParameterChange?.(w.id,Number(_||0)+1),disabled:!N,children:w.label})},w.id):w.type==="string"?d.jsx(Wc,{label:w.label,trailing:d.jsx(UA,{value:String(_??""),onValueCommit:R=>n?.onParameterChange?.(w.id,R),disabled:!N,inputMode:"text",ariaLabel:`${w.label} value`,className:"w-40 max-w-[min(12rem,55vw)] text-left font-medium tabular-nums"})},w.id):d.jsx(fs,{label:w.label,value:`${tR(_)}${w.unit?` ${w.unit}`:""}`,onValueCommit:R=>{n?.onParameterChange?.(w.id,ha(R,{fallback:_,min:w.min,max:w.max}))},valueInputProps:{disabled:!N,ariaLabel:`${w.label} slider value`},children:d.jsx(ds,{className:da,value:[Number(_)||0],min:w.min,max:w.max,step:I,onValueChange:R=>n?.onParameterChange?.(w.id,R?.[0]??_),disabled:!N,"aria-label":w.label})},w.id)}),n?.onResetParameters?d.jsx(Lf,{children:d.jsxs(Gt,{type:"button",variant:"outline",size:"sm",className:J(ob,"justify-center"),onClick:()=>n.onResetParameters(),title:f,children:[d.jsx(Yu,{className:"h-3.5 w-3.5",strokeWidth:2,"aria-hidden":"true"}),d.jsx("span",{children:"Reset"})]})}):null]}):null]}):null}function KL(e,{hideWhenEmpty:t=!1}={}){const n=e?.definition||null,r=Array.isArray(n?.parameters)?n.parameters:[],o=Array.isArray(n?.animations)?n.animations:[],i=String(e?.status||"").trim(),s=String(e?.error||"").trim(),a=r.length>0||o.length>0;return t&&n&&!a&&i!=="loading"&&!s?!1:!!(n||i==="loading"||s)}function qL(e={}){return KL(e.runtime,{hideWhenEmpty:e.hideWhenEmpty})?{id:e.value||"parameters",title:e.title||"Parameters",content:d.jsx(Ooe,{...e})}:null}function koe({open:e,title:t="Implicit CAD",isDesktop:n,width:r,selectedEntry:o=null,onOpenChange:i,onStartResize:s,parameterRuntime:a=null,graphicsRuntime:l=null,fileDownloadAvailable:c=!1,viewerServerInfo:u=null,localFileOpenAvailable:f=!1,fileAccessBusyKey:m="",onOpenFileAsset:p,suppressDynamicMetadataStatus:b=!1,statusItems:y=[],themeTabs:x=[],openSectionIds:S=[],onOpenSectionIdsChange:E}){const C=[Sx(y),qL({runtime:a,label:"implicit parameter",loadingLabel:"Loading implicit parameters...",noParametersLabel:"No implicit parameters.",hideWhenEmpty:!0,animationAriaLabel:"Implicit animation"}),{id:"graphics",title:"Graphics",content:d.jsx(Eoe,{runtime:l})},...x];return d.jsx(ug,{open:e,title:t,isDesktop:n,width:r,onOpenChange:i,onStartResize:s,scrollBody:!1,children:d.jsx(bx,{kind:"implicit",sections:C,openSectionIds:S,onOpenSectionIdsChange:E})})}const Doe=Object.freeze({face:"Face",edge:"Edge",shape:"Solid",occurrence:"Component"}),Loe=Object.freeze({plane:"Planar",cylinder:"Cylindrical",cone:"Conical",sphere:"Spherical",torus:"Toroidal",spline:"Freeform",bspline:"Freeform",nurbs:"Freeform"}),Foe=Object.freeze({line:"Line",circle:"Circle",arc:"Arc",ellipse:"Ellipse",spline:"Spline",bspline:"Spline"}),joe=Object.freeze([{key:"X",className:"text-rose-500 dark:text-rose-400"},{key:"Y",className:"text-emerald-500 dark:text-emerald-400"},{key:"Z",className:"text-sky-500 dark:text-sky-400"}]),zoe=/^(.*?)\s+(area|length|volume)\s*=\s*([-\d.eE+]+)\s*$/;function v1(e){const t=String(e||"").trim();return t?t.charAt(0).toUpperCase()+t.slice(1):""}function Da(e,t=2){const n=Number(e);return Number.isFinite(n)?n.toLocaleString(void 0,{maximumFractionDigits:t}):"—"}function Boe(e){const t=String(e||"").trim(),n=t.match(zoe);return n?{subtype:n[1].trim(),measureKey:n[2],measureValue:Number(n[3])}:{subtype:t,measureKey:null,measureValue:null}}function YL(e){const t=e?.bbox||e?.boundingBox||null,n=Array.isArray(t?.min)?t.min:null,r=Array.isArray(t?.max)?t.max:null;if(!n||!r)return null;const o=[0,1,2].map(s=>Math.abs((Number(r[s])||0)-(Number(n[s])||0))),i=[0,1,2].map(s=>((Number(n[s])||0)+(Number(r[s])||0))/2);return o.some(s=>s>1e-9)?{dims:o,center:i}:null}function Voe(e){if(!e||typeof e!="object")return null;const t=e.radius??e.radius1??e.majorRadius??e.minorRadius,n=Number(t);return Number.isFinite(n)&&n>0?n:null}function $oe(e){return!!e&&!e.pickData&&(e.nodeType||Array.isArray(e.children))}function Goe({text:e,className:t}){const[n,r]=h.useState(!1),o=h.useRef(null);return h.useEffect(()=>()=>{o.current&&clearTimeout(o.current)},[]),e?d.jsx(Gt,{type:"button",variant:"ghost",size:"icon-xs",className:J("size-5 text-muted-foreground hover:text-foreground",t),"aria-label":"Copy reference",title:"Copy reference",onClick:()=>{js(e),r(!0),o.current&&clearTimeout(o.current),o.current=setTimeout(()=>r(!1),1200)},children:n?d.jsx(qu,{className:"size-3 text-emerald-500",strokeWidth:2.5,"aria-hidden":"true"}):d.jsx(Vf,{className:"size-3",strokeWidth:2,"aria-hidden":"true"})}):null}function XL({typeLabel:e,subtitle:t,selector:n,copyText:r}){return d.jsxs(d.Fragment,{children:[d.jsxs("div",{className:"flex items-center gap-2 px-2 pb-1.5 pt-1",children:[t?d.jsx("span",{className:"min-w-0 truncate text-[11px] font-medium text-sidebar-foreground",children:t}):null,d.jsx("span",{className:"shrink-0 rounded-sm bg-muted px-1 py-0.5 font-mono text-[10px] text-muted-foreground",children:e}),d.jsxs("span",{className:"ml-auto inline-flex shrink-0 items-center gap-1",children:[n?d.jsx("code",{className:"max-w-[8rem] truncate rounded-sm bg-muted px-1 py-0.5 font-mono text-[10px] text-muted-foreground",children:n}):null,d.jsx(Goe,{text:r})]})]}),d.jsx("div",{className:"mx-2 h-px bg-sidebar-border/60"})]})}function ka({label:e,children:t}){return d.jsxs("div",{className:"flex items-baseline gap-3 px-2 py-1",children:[d.jsx("span",{className:"w-[4.5rem] shrink-0 text-[11px] text-muted-foreground",children:e}),d.jsx("div",{className:"min-w-0 flex-1 text-[11px] text-sidebar-foreground",children:t})]})}function Ch({children:e}){return d.jsx("span",{className:"font-mono tabular-nums",children:e})}function Dw({vector:e,digits:t=2}){const n=Array.isArray(e)?e:[];return d.jsx("span",{className:"flex flex-wrap items-baseline gap-x-3 gap-y-0.5 font-mono tabular-nums",children:joe.map((r,o)=>d.jsxs("span",{className:"inline-flex items-baseline gap-1",children:[d.jsx("span",{className:J("text-[9px] font-semibold",r.className),children:r.key}),d.jsx("span",{children:Da(n[o],t)})]},r.key))})}function Uoe({reference:e}){const t=e.pickData||{},n=e.selectorType,r=Boe(e.summary);let o="";n==="face"?o=Loe[t.surfaceType]||v1(t.surfaceType||r.subtype):n==="edge"?o=Foe[r.subtype]||v1(r.subtype):o=v1(t.kind||r.subtype);const i=YL(t),s=Voe(t.params),a=r.measureKey==="area"?"Area":r.measureKey==="length"?"Length":r.measureKey==="volume"?"Volume":null,l=r.measureKey==="area"?"mm²":r.measureKey==="volume"?"mm³":"mm",c=Array.isArray(t.center)?t.center:i?.center,u=String(t.sourceName||t.name||e.occurrenceId||"").trim();return d.jsxs("div",{className:"flex min-w-0 flex-col",children:[d.jsx(XL,{typeLabel:Doe[n]||"Reference",subtitle:o,selector:String(e.displaySelector||e.normalizedSelector||"").trim(),copyText:e.copyText}),d.jsxs("div",{className:"flex flex-col py-0.5",children:[a&&Number.isFinite(r.measureValue)?d.jsx(ka,{label:a,children:d.jsx(Ch,{children:`${Da(r.measureValue)} ${l}`})}):null,s!=null?d.jsx(ka,{label:"Radius",children:d.jsx(Ch,{children:`${Da(s)} mm`})}):null,i?d.jsx(ka,{label:"Size",children:d.jsx(Ch,{children:`${Da(i.dims[0])} × ${Da(i.dims[1])} × ${Da(i.dims[2])} mm`})}):null,Array.isArray(c)?d.jsx(ka,{label:"Center",children:d.jsx(Dw,{vector:c})}):null,Array.isArray(t.normal)?d.jsx(ka,{label:"Normal",children:d.jsx(Dw,{vector:t.normal,digits:3})}):null,u?d.jsx(ka,{label:"Component",children:u}):null]})]})}function Hoe({node:e}){const t=String(e.nodeType||"").trim()==="assembly"||Array.isArray(e.children)&&e.children.length>0,n=String(e.name||e.displayName||"").trim(),r=String(e.displaySelector||e.occurrenceId||e.id||"").trim(),o=Array.isArray(e.leafPartIds)?e.leafPartIds.length:Array.isArray(e.children)?e.children.length:0,i=YL(e);return d.jsxs("div",{className:"flex min-w-0 flex-col",children:[d.jsx(XL,{typeLabel:t?"Subassembly":"Component",subtitle:n,selector:r,copyText:e.copyText||r}),d.jsxs("div",{className:"flex flex-col py-0.5",children:[t&&o>0?d.jsx(ka,{label:"Parts",children:d.jsx(Ch,{children:Da(o,0)})}):null,i?d.jsx(ka,{label:"Size",children:d.jsx(Ch,{children:`${Da(i.dims[0])} × ${Da(i.dims[1])} × ${Da(i.dims[2])} mm`})}):null,i?d.jsx(ka,{label:"Center",children:d.jsx(Dw,{vector:i.center})}):null,r?d.jsx(ka,{label:"Path",children:r}):null]})]})}function Woe({item:e}){return e?$oe(e)?d.jsx(Hoe,{node:e}):d.jsx(Uoe,{reference:e}):null}function Koe(e){return String(e?.id||e?.occurrenceId||e?.displaySelector||"").trim()}function qoe({references:e=[]}){const t=Array.isArray(e)?e.filter(Boolean):[],n=t.length,r=t.map(Koe).join("|"),[o,i]=h.useState(0);if(h.useEffect(()=>{i(n>0?n-1:0)},[r,n]),!n)return d.jsxs("div",{className:"flex min-h-[4.5rem] flex-col items-center justify-center gap-1.5 px-4 py-5 text-center",children:[d.jsx(h5,{className:"size-4 text-muted-foreground/45",strokeWidth:1.5,"aria-hidden":"true"}),d.jsx("p",{className:"text-[11px] text-muted-foreground",children:"Select geometry to inspect"})]});const s=Math.min(Math.max(o,0),n-1);return d.jsxs("div",{className:"flex min-w-0 flex-col pb-2",children:[n>1?d.jsxs("div",{className:"flex items-center justify-between gap-2 border-b border-sidebar-border/60 px-2 py-1",children:[d.jsxs("span",{className:"text-[11px] text-muted-foreground",children:[n," selected"]}),d.jsxs("div",{className:"inline-flex items-center gap-0.5",children:[d.jsx(Gt,{type:"button",variant:"ghost",size:"icon-xs",className:"size-5 text-muted-foreground hover:text-foreground","aria-label":"Previous element",title:"Previous element",onClick:()=>i(a=>(a-1+n)%n),children:d.jsx(g5,{className:"size-3.5",strokeWidth:2,"aria-hidden":"true"})}),d.jsxs("span",{className:"min-w-[2.75rem] text-center font-mono text-[11px] tabular-nums text-sidebar-foreground",children:[s+1," / ",n]}),d.jsx(Gt,{type:"button",variant:"ghost",size:"icon-xs",className:"size-5 text-muted-foreground hover:text-foreground","aria-label":"Next element",title:"Next element",onClick:()=>i(a=>(a+1)%n),children:d.jsx(fm,{className:"size-3.5",strokeWidth:2,"aria-hidden":"true"})})]})]}):null,d.jsx(Woe,{item:t[s]})]})}function Yoe({references:e=[]}={}){const t=Array.isArray(e)?e.filter(Boolean).length:0;return{id:Bt.STEP_REFERENCE,title:d.jsxs("span",{className:"flex min-w-0 items-center gap-1.5",children:[d.jsx("span",{children:"Reference"}),t>1?d.jsx("span",{className:"rounded-full bg-accent px-1.5 text-[10px] font-medium tabular-nums text-accent-foreground",children:t}):null]}),content:d.jsx(qoe,{references:e})}}const Xoe="grid h-5 w-5 shrink-0 place-items-center rounded-sm px-0 text-current/60 hover:bg-sidebar-accent/45 hover:text-sidebar-accent-foreground focus-visible:bg-sidebar-accent/45",Zoe="h-5 w-5 rounded-sm px-0 text-current/60 shadow-none hover:bg-sidebar-accent/45 hover:text-sidebar-accent-foreground focus-visible:bg-sidebar-accent/45 focus-visible:text-sidebar-accent-foreground",Joe="h-7 min-w-0 text-xs font-normal",nR="px-2 pb-1 pt-2 text-[10px] font-medium text-sidebar-foreground/45",eC="size-3.5 shrink-0 text-current/60",Qoe="grid h-5 w-5 shrink-0 place-items-center text-current/60",Lw=26,eie=14,ZL=156,rR="tree",tie=Bt.STEP_MEASUREMENTS,nie=[],rie=120;function oie(e){const t=Math.max(Number(e)||0,0);return`${t.toFixed(t>=10?1:2)}s`}function iie(e,t){const n=Array.isArray(e)?e.map(o=>String(o||"").trim()).filter(Boolean):[];if(!n.length)return!1;const r=new Set(Array.isArray(t)?t:[]);return n.every(o=>r.has(o))}function sie(e,t){const n=new Set,r=[];for(const o of Array.isArray(e)?e:[]){const i=Math.max(Number(o?.depth)||0,0);r.length=i;const a=i>0&&r[i-1]===!0||iie(o?.leafPartIds,t);r[i]=a,a&&n.add(String(o?.id||"").trim())}return n}function aie(e){return String(e?.id||e?.occurrenceId||"").trim()}function lie(e,t){const n=new Set((Array.isArray(t)?t:[]).map(i=>String(i||"").trim()).filter(Boolean));if(!n.size)return null;const r=new Set,o=[];for(const i of Array.isArray(e)?e:[]){const s=String(i?.id||"").trim(),a=Math.max(Number(i?.depth)||0,0);o.length=a;const c=a>0&&o[a-1]===!0||n.has(s);o[a]=c,c&&s&&r.add(s)}return r}function oR(e,{block:t="nearest"}={}){if(!e)return;const n=e.closest("[data-slot='scroll-area-viewport']");if(!n){e.scrollIntoView?.({block:t,behavior:"instant"});return}const r=e.getBoundingClientRect(),o=n.getBoundingClientRect();if(t==="center"){const s=r.top+r.height/2,a=o.top+o.height/2;n.scrollTop+=s-a;return}const i=o.top+rie;if(r.top<i){n.scrollTop+=r.top-i;return}r.bottom>o.bottom&&(n.scrollTop+=r.bottom-o.bottom)}function Fw(e){const t=String(e?.topologyType||"").trim();if(t)return t;const n=String(e?.nodeType||e?.node?.nodeType||"").trim();return n.startsWith("topology-")?n.slice(9):""}function cie(e){return String(e?.detail||e?.node?.detail||e?.summary||e?.node?.summary||"").trim()}function uie(e,t){const n=cie(e).toLowerCase(),r=String(e?.label||e?.node?.displayName||"").trim().toLowerCase(),o=`${n} ${r}`;if(t==="face")return/\bplane\b/.test(o)?"plane":/\bcylinder\b/.test(o)?"cylinder":/\bcone\b/.test(o)?"cone":/\bsphere\b/.test(o)?"sphere":/\btorus\b/.test(o)?"torus":/\bbspline\b|\bspline\b|\bbezier\b/.test(o)?"spline":"face";if(t==="edge")return/\bcircle\b/.test(o)?"circle":/\bellipse\b/.test(o)?"ellipse":/\bline\b/.test(o)?"line":/\bbspline\b|\bspline\b|\bbezier\b/.test(o)?"spline":"edge";if(t==="shape"){if(/\bsolid\b/.test(o))return"solid";if(/\bshell\b/.test(o))return"shell"}return t}function JL(e){const t=String(e||"").trim();return t?`${t.slice(0,1).toUpperCase()}${t.slice(1)}`:""}function die(e,t,n=""){const r=String(e?.label||e?.node?.displayName||"").trim(),o=String(t||"").trim(),i=String(n||"").trim();if(o){const l=JL(o),c=r.toLowerCase();return[l&&!c.startsWith(o.toLowerCase())?l:"",r,i].filter(Boolean).join(" ")}return[String(e?.nodeType||e?.node?.nodeType||"").trim()==="assembly"?"Assembly":"Component",r,i].filter(Boolean).join(" ")}function Pc(e,t){const n=String(t||"").trim();return n?`${e}: ${n}`:""}function QL(e){const t=String(e||"").trim().replace(/^#/,"");return t?`#${t}`:""}function fie(e,{topologyType:t="",topologyReferenceId:n="",detail:r="",disabledReason:o=""}={}){const i=String(e?.label||e?.node?.displayName||"").trim(),s=String(e?.nodeType||e?.node?.nodeType||"").trim(),a=t?JL(t):s==="assembly"?"Assembly":"Component",l=t?String(e?.node?.displaySelector||e?.displaySelector||n||"").trim():String(e?.node?.occurrenceId||e?.node?.id||e?.id||"").trim();return[Pc(a||"Item",i),Pc("Ref",QL(l)),Pc("Info",r),Pc("Status",o)].filter(Boolean).join(`
|
||
`)}function mie(e,t=""){return[Pc("Mate",e?.label),Pc("Ref",QL(e?.id)),Pc("Info",e?.detail),Pc("Status",t)].filter(Boolean).join(`
|
||
`)}function pie({depth:e}){const t=Math.min(Math.max(Math.trunc(Number(e)||0),0),Math.floor(ZL/Lw));return t<1?null:d.jsx("span",{className:"pointer-events-none absolute inset-y-0 left-0","aria-hidden":"true",children:Array.from({length:t}).map((n,r)=>d.jsx("span",{className:"absolute inset-y-0 border-l border-sidebar-border/65",style:{left:`${r*Lw+eie}px`}},r))})}function ul({children:e}){return d.jsx("svg",{className:eC,viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.45",strokeLinecap:"round",strokeLinejoin:"round",shapeRendering:"geometricPrecision","aria-hidden":"true",children:e})}function hie({row:e,type:t}){const n=String(t||"").trim(),r=uie(e,n),o=`relative ${eC}`;return n==="occurrence"?null:n==="shape"?r==="shell"?d.jsxs(ul,{children:[d.jsx("path",{d:"M4.5 4.5h7v7h-7z"}),d.jsx("path",{d:"M6.25 6.25h3.5v3.5h-3.5z"})]}):d.jsx("span",{className:o,"aria-hidden":"true",children:d.jsx("span",{className:"absolute left-[3px] top-[3px] size-2.5 rotate-45 rounded-[1px] border border-current"})}):n==="face"?r==="cylinder"?d.jsxs(ul,{children:[d.jsx("ellipse",{cx:"8",cy:"4",rx:"4",ry:"2"}),d.jsx("path",{d:"M4 4v8"}),d.jsx("path",{d:"M12 4v8"}),d.jsx("ellipse",{cx:"8",cy:"12",rx:"4",ry:"2"})]}):r==="cone"?d.jsxs(ul,{children:[d.jsx("path",{d:"M8 3 4 12"}),d.jsx("path",{d:"M8 3l4 9"}),d.jsx("path",{d:"M4 12c1.25 1.25 6.75 1.25 8 0"})]}):r==="sphere"?d.jsxs(ul,{children:[d.jsx("circle",{cx:"8",cy:"8",r:"5"}),d.jsx("path",{d:"M8 3c1.3 1.35 2 3.05 2 5s-.7 3.65-2 5"}),d.jsx("path",{d:"M3 8h10"})]}):r==="torus"?d.jsxs(ul,{children:[d.jsx("ellipse",{cx:"8",cy:"8",rx:"5.2",ry:"3.4"}),d.jsx("ellipse",{cx:"8",cy:"8",rx:"2.2",ry:"1.25"})]}):r==="spline"?d.jsxs(ul,{children:[d.jsx("path",{d:"M3 11.5c2.1-6.6 7.6 1 10-5.8"}),d.jsx("path",{d:"M3.5 12.7h8.8",opacity:"0.45"})]}):d.jsx("span",{className:o,"aria-hidden":"true",children:d.jsx("span",{className:"absolute inset-[3px] rounded-[1px] border border-current bg-current/15"})}):n==="edge"?r==="circle"?d.jsxs(ul,{children:[d.jsx("circle",{cx:"8",cy:"8",r:"4.6"}),d.jsx("circle",{cx:"8",cy:"8",r:"1.2",fill:"currentColor",stroke:"none",opacity:"0.25"})]}):r==="ellipse"?d.jsx(ul,{children:d.jsx("ellipse",{cx:"8",cy:"8",rx:"5.4",ry:"3.2"})}):r==="spline"?d.jsxs(ul,{children:[d.jsx("path",{d:"M2.8 10.6c2.1-5.8 5.2 2.8 10.4-4.8"}),d.jsx("circle",{cx:"2.8",cy:"10.6",r:"0.9",fill:"currentColor",stroke:"none"}),d.jsx("circle",{cx:"13.2",cy:"5.8",r:"0.9",fill:"currentColor",stroke:"none"})]}):d.jsxs("span",{className:o,"aria-hidden":"true",children:[d.jsx("span",{className:"absolute left-[2px] top-[7px] h-px w-3 rotate-[-28deg] rounded-full bg-current"}),d.jsx("span",{className:"absolute left-[1px] top-[8px] size-1 rounded-full bg-current"}),d.jsx("span",{className:"absolute right-[1px] top-[3px] size-1 rounded-full bg-current"})]}):null}function gie({row:e}){const t=Fw(e);if(t&&t!=="occurrence")return d.jsx(hie,{row:e,type:t});const r=String(e?.nodeType||e?.node?.nodeType||"").trim()==="assembly"?b5:iv;return d.jsx(r,{className:eC,strokeWidth:1.6,"aria-hidden":"true"})}function yie(e){return Array.isArray(e)?e.filter(t=>t&&typeof t=="object").map((t,n)=>{const r=`m${n+1}`,o=String(t.id||r).trim()||r,i=String(t.sourceLabel||t.name||"").trim(),s=String(t.label||"").trim(),a=i||(s&&s!==o?s:"")||o,l=String(t.type||t.relation||"mate").trim()||"mate",c=String(t.fixed||"").trim(),u=String(t.moving||"").trim(),f=c&&u?`${c} -> ${u}`:c||u,m=[o,l,f].filter(Boolean).join(" ");return{id:o,label:a,detail:m}}):[]}function bie({animationState:e,duration:t,enabled:n,onScrub:r,label:o="STEP"}){const i=yee(),s=e?.playing?i:Number(e?.elapsedSec)||0,a=Math.min(Math.max(s,0),t);return d.jsx(fs,{label:"Time",value:oie(a),onValueCommit:l=>{r?.(ha(l,{fallback:a,min:0,max:t}))},valueInputProps:{disabled:!n,ariaLabel:`${o} animation time value`},children:d.jsx(ds,{className:da,value:[a],min:0,max:t,step:.01,onValueChange:l=>r?.(l?.[0]??0),disabled:!n,"aria-label":`${o} animation time`})})}function xie({open:e,measurements:t=nie,activeMeasurementId:n="",measureModeActive:r=!1,onMeasurementActivate:o,onMeasurementDelete:i,onMeasurementsClear:s,isDesktop:a,width:l,onOpenChange:c,onStartResize:u,selectedEntry:f,viewerLoading:m,isAssemblyView:p=!1,stepTreeRoot:b,assemblyMates:y=[],expandedTreeNodeIds:x,loadableTreeNodeIds:S=[],selectedPartIds:E,selectedReferenceIds:C=[],selectedReferences:A=[],selectedMateIds:N=[],selectableNodeIds:w=null,activeTreeNodeId:_="",activeTreeNodeScrollKey:I="",hoveredPartId:R,hoveredReferenceId:O="",hoveredMateId:F="",hiddenPartIds:V,focusedNodeIds:$=[],onSelectTreeNode:K,onSelectReferenceNode:U,onSelectMateNode:Y,onCopyTreeNodeReference:D,onCopyMateNodeReference:j,onFocusTreeNode:ee,onUnfocusTreeNode:X,onExitAllIsolate:ve,onHideOtherTreeNode:q,onToggleTreeNode:re,onClearSelection:Be,onHoverTreeNode:Me,onHoverReferenceNode:He,onHoverMateNode:de,treeSelectionDisabled:me=!1,treeSelectionDisabledReason:we="",onTogglePartVisibility:ce,hideAllParts:Ee,showAllHiddenParts:Jt,stepModule:mt=null,fileDownloadAvailable:je=!1,viewerServerInfo:ye=null,localFileOpenAvailable:Ie=!1,fileAccessBusyKey:Je="",onOpenFileAsset:et,suppressDynamicMetadataStatus:Xt=!1,statusItems:st=[],themeTabs:xt=[],openSectionIds:Xe=[],onOpenSectionIdsChange:sn}){const mn=h.useRef(new Map),ke=h.useRef(""),St=Array.isArray(E)?E:[],Rr=h.useMemo(()=>new Set((Array.isArray(C)?C:[]).map(ie=>String(ie||"").trim()).filter(Boolean)),[C]),yr=String(Array.isArray(C)&&C[C.length-1]||"").trim(),Qt=h.useMemo(()=>new Set((Array.isArray(N)?N:[]).map(ie=>String(ie||"").trim()).filter(Boolean)),[N]),uo=Array.isArray(V)?V:[],Kn=h.useMemo(()=>new Set((Array.isArray($)?$:[]).map(ie=>String(ie||"").trim()).filter(Boolean)),[$]),Qo=String(O||"").trim(),_e=String(F||"").trim(),Ot=h.useMemo(()=>Array.isArray(w)?new Set(w.map(ie=>String(ie||"").trim()).filter(Boolean)):null,[w]),Nn=b,cn=Yr(Nn).length>0&&(p||aie(Nn)===Fs),br=h.useMemo(()=>yie(y),[y]),Et=h.useMemo(()=>vv(Nn,x,{omitRoot:cn,showAllRootChildren:!0}),[cn,x,Nn]),Zr=h.useMemo(()=>Et.map(ie=>String(ie?.id||"")).join(`
|
||
`),[Et]),en=h.useMemo(()=>sie(Et,uo),[uo,Et]),Pr=h.useMemo(()=>lie(Et,$),[$,Et]),te=p||cn?Et.length>0:Et.some(ie=>ie?.hasChildren),We=br.length>0,Re=We,wt=We,dt=h.useMemo(()=>yr&&Et.find(ie=>String(ie?.topologyReferenceId||"").trim()===yr)||null,[yr,Et]),pt=String(_||St[St.length-1]||"").trim(),at=String(dt?.id||pt||"").trim(),Ae=h.useMemo(()=>at&&Et.find(ie=>String(ie?.id||"").trim()===at||String(ie?.node?.selectionPartId||"").trim()===at)||null,[at,Et]),jt=Ae?.node?.visualOnly===!0?!1:!!Fw(Ae),lt=Kn.size>0,nr=p===!0,rt=Array.isArray(Xe)&&Xe.includes(rR),Tn=me?String(we||"Tree selection is disabled in the current parameter state.").trim():"",Ut=h.useMemo(()=>new Set((Array.isArray(x)?x:[]).map(ie=>String(ie||"").trim()).filter(Boolean)),[x]),xr=h.useMemo(()=>new Set((Array.isArray(S)?S:[]).map(ie=>String(ie||"").trim()).filter(Boolean)),[S]),_n=ie=>{const Mt=String(ie?.id||"").trim();return!!(ie?.hasChildren||Mt&&xr.has(Mt))},qn=h.useMemo(()=>{const ie=[],Mt=new Set;for(const un of Et){const Ke=String(un?.id||"").trim();!Ke||Mt.has(Ke)||_n(un)&&(Mt.add(Ke),ie.push(Ke))}return ie},[xr,Et]),fo=h.useMemo(()=>qn.filter(ie=>!Ut.has(ie)),[qn,Ut]),Vn=h.useMemo(()=>qn.filter(ie=>Ut.has(ie)),[qn,Ut]),Ze=h.useMemo(()=>{const ie=new Map;for(const Mt of Et){const un=String(Mt?.id||"").trim();un&&ie.set(un,Mt);const Ke=String(Mt?.node?.selectionPartId||"").trim();Ke&&!ie.has(Ke)&&ie.set(Ke,Mt)}return ie},[Et]),kn=(ie,Mt=1)=>{if(!Et.length)return;const un=Mt<0?-1:1;let Ke=Math.min(Math.max(Number(ie)||0,0),Et.length-1);for(;Ke>=0&&Ke<Et.length;){const zt=String(Et[Ke]?.id||"").trim(),Yn=zt?mn.current.get(zt):null;if(Yn&&Yn.getAttribute("aria-disabled")!=="true"){Yn.focus?.(),oR(Yn,{block:"nearest"});return}Ke+=un}};if(h.useEffect(()=>{const ie=String(I||"").trim();if(!ie||ie===ke.current||!at||!rt)return;const Mt=()=>{const Ke=mn.current.get(at);Ke&&(ke.current=ie,oR(Ke,{block:jt?"center":"nearest"}))};if(typeof window>"u"){Mt();return}const un=window.requestAnimationFrame(Mt);return()=>{window.cancelAnimationFrame(un)}},[at,jt,I,rt,Zr]),!f)return null;const Sr={id:tie,title:"Measure",content:d.jsx(OL,{measurements:t,activeId:n,measureModeActive:r,onActivate:o,onDelete:i,onClear:s})},Er=[{id:rR,title:"Tree",titleAttr:Tn||void 0,content:d.jsx("div",{className:"max-w-full overflow-hidden pb-2",children:d.jsxs("div",{className:"select-none space-y-px",role:"tree","aria-multiselectable":"true","aria-disabled":me,title:Tn||void 0,onClick:ie=>{me||ie.target===ie.currentTarget&&Be?.()},children:[Re?d.jsx("div",{className:nR,role:"presentation",children:"Instances"}):null,m&&!Et.length?d.jsx(Wu,{className:"py-1",children:"Loading STEP tree..."}):null,te?Et.map((ie,Mt)=>{const Ke=ie?.node?.visualOnly===!0?"":Fw(ie),zt=!!Ke,Yn=String(ie.id||"").trim(),kt=String(ie.node?.selectionPartId||ie.id||"").trim(),ae=String(ie.topologyReferenceId||"").trim(),cr=zt?String(ie.node?.partId||"").trim():"",bn=!!Ke&&ae&&typeof U=="function",Jr=String(ie.detail||"").trim(),rr=Ke?"":Jr,Or=die(ie,Ke,Jr),k=_n(ie),oe=!!ie.expanded,fe=zt?Rr.has(ae):St.includes(kt),Fe=zt&&cr&&(Pr?.has(cr)||Kn.has(cr)||Ot?.has(cr)),qe=!Pr||Pr.has(Yn)||Fe,Ye=!zt&&Kn.has(Yn),ht=(Ke==="shape"||Ke==="occurrence")&&Kn.has(String(ie.node?.partId||"").trim()),Dn=zt?bn&&qe&&!ht:!Ye&&(!Ot||Ot.has(kt)||fe),Rt=en.has(String(ie.id||"").trim()),Xn=lt&&!qe,It=me||Rt||!Dn,tt=fe&&!Rt&&!Ye&&!ht,An=!Rt&&!It&&(zt?ae&&Qo===ae:R===kt),xn=Tn||(Dn?"":ht?"Select a face or edge of this isolated component":zt?"":lt?"Exit isolate to select this node":"Select a parent assembly to inspect this node"),Bo=It&&!(!zt&&nr&&!me&&(Ye?typeof X=="function":typeof ce=="function")),ui=fie(ie,{topologyType:Ke,topologyReferenceId:ae,detail:Jr,disabledReason:xn}),gs=Math.min(Math.max(ie.depth,0)*Lw,ZL),di=Ce=>{const Uo=Ce.shiftKey;zt?U?.(ae,{multiSelect:Uo}):K?.(kt,{multiSelect:Uo})},or=()=>{if(!It){if(zt){ae&&He?.(ae);return}Me?.(kt)}},Z=()=>{if(zt){ae&&He?.("");return}It||Me?.("")},pe=Ce=>{if(It){Ce.preventDefault();return}di(Ce)},ft=Ce=>{if(!(Ce.target!==Ce.currentTarget||It)){if(Ce.key==="ArrowDown"){Ce.preventDefault(),kn(Mt+1,1);return}if(Ce.key==="ArrowUp"){Ce.preventDefault(),kn(Mt-1,-1);return}if(Ce.key==="Home"){Ce.preventDefault(),kn(0,1);return}if(Ce.key==="End"){Ce.preventDefault(),kn(Et.length-1,-1);return}if(Ce.key==="Enter"||Ce.key===" "){Ce.preventDefault(),di(Ce);return}if(k&&Ce.key==="ArrowRight"&&!oe){Ce.preventDefault(),re?.(ie.id);return}k&&Ce.key==="ArrowLeft"&&oe&&(Ce.preventDefault(),re?.(ie.id))}},ur=Ye?typeof X=="function":typeof ee=="function",Cn=me||!Dn&&!fe||Rt&&!fe,Qr=zt||me||!ur||!Ye&&!Dn&&!fe,Vo=!zt&<&&Kn.size>1&&typeof ve=="function",ys=zt||me||Rt||typeof q!="function",Sa=zt||me||(Rt?typeof Jt!="function":typeof Ee!="function"),_o=zt||Ye||!nr||typeof ce!="function",$o=zt?[]:St.map(Ce=>String(Ce||"").trim()).filter(Boolean),Ro=zt?[]:Array.from(new Set([...$o,kt].filter(Boolean))),Ei=Ro.map(Ce=>Ze.get(Ce)||null).filter(Boolean),wi=Ei.filter(Ce=>_n(Ce)&&!Ut.has(String(Ce.id||"").trim())).map(Ce=>String(Ce.id||"").trim()).filter(Boolean),mo=Ei.filter(Ce=>_n(Ce)&&Ut.has(String(Ce.id||"").trim())).map(Ce=>String(Ce.id||"").trim()).filter(Boolean),Kt=Ro.length||1,Go=wi.length<1||typeof re!="function",ct=mo.length<1||typeof re!="function",vi=fo.length<1||typeof re!="function",ze=Vn.length<1||typeof re!="function",qa=zt?ae:kt;return d.jsxs("div",{className:"relative min-w-0 max-w-full",children:[d.jsx(pie,{depth:ie.depth}),d.jsx("div",{className:"relative flex h-7 min-w-0 max-w-full items-center",style:gs>0?{marginLeft:`${gs}px`}:void 0,children:d.jsxs(bw,{modal:!1,children:[d.jsx(xw,{asChild:!0,children:d.jsxs("div",{ref:Ce=>{if(Ce){mn.current.set(ie.id,Ce),kt&&kt!==ie.id&&mn.current.set(kt,Ce);return}mn.current.delete(ie.id),kt&&kt!==ie.id&&mn.current.delete(kt)},role:"treeitem","aria-expanded":k?oe:void 0,"aria-selected":fe,"aria-label":Or,"data-step-tree-node-id":ie.id||void 0,"data-step-tree-node-type":ie.nodeType||void 0,"data-step-tree-topology-reference-id":ae||void 0,"data-selection-disabled":It?"true":void 0,"aria-disabled":Bo,tabIndex:It?-1:0,className:J("group/tree-row flex h-7 min-w-0 w-full max-w-full items-center gap-2 rounded-md px-2 outline-none transition-colors",It?"cursor-default text-sidebar-foreground/55":"cursor-pointer text-sidebar-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:bg-sidebar-accent focus-visible:text-sidebar-accent-foreground",tt?"bg-sidebar-accent font-medium text-sidebar-accent-foreground":An&&"bg-sidebar-accent text-sidebar-accent-foreground",(Rt||Xn)&&"opacity-45"),title:ui,onClick:pe,onKeyDown:ft,onMouseEnter:or,onMouseLeave:Z,children:[d.jsxs("div",{className:"flex min-w-0 flex-1 items-center gap-1.5 overflow-hidden",children:[k?d.jsx(Gt,{type:"button",variant:"ghost",size:"icon-sm",className:Xoe,onClick:Ce=>{Ce.stopPropagation(),re?.(ie.id)},"aria-label":oe?`Collapse ${ie.label}`:`Expand ${ie.label}`,title:oe?"Collapse":"Expand",children:d.jsx(fm,{className:J("size-3.5 transition-transform",oe&&"rotate-90"),strokeWidth:2,"aria-hidden":"true"})}):null,d.jsxs("div",{className:J(Joe,"flex min-w-0 flex-1 shrink touch-manipulation items-center justify-start gap-1.5 overflow-hidden px-0 text-left",It&&"text-sidebar-foreground/55"),children:[d.jsx(gie,{row:ie}),d.jsx("span",{className:"min-w-0 flex-1 overflow-hidden",children:d.jsxs("span",{className:"flex min-w-0 items-baseline gap-1.5 overflow-hidden text-xs font-medium leading-4",children:[d.jsx("span",{className:"min-w-0 truncate",children:ie.label}),rr?d.jsx("span",{className:"min-w-0 truncate text-[10px] font-normal text-current/50",children:rr}):null]})})]})]}),!zt&&nr?d.jsx(Gt,{type:"button",variant:"ghost",size:"icon-sm",className:J(Zoe,"ml-1 shrink-0",!Rt&&!tt&&!An&&!Ye&&"opacity-0 group-hover/tree-row:opacity-100 focus-visible:opacity-100",Rt&&"text-current/75",me&&"cursor-default text-current/35 hover:!bg-transparent hover:!text-current/35"),disabled:me||(Ye?typeof X!="function":typeof ce!="function"),"aria-label":Ye?`Exit isolate for ${ie.label}`:Rt?`Show ${ie.label}`:`Hide ${ie.label}`,title:Ye?"Exit isolate":Rt?"Show":"Hide",onClick:Ce=>{if(Ce.stopPropagation(),Ye){X?.(ie.id);return}ce?.(ie.id)},children:Ye?d.jsx(Kc,{className:"size-3",strokeWidth:2,"aria-hidden":"true"}):Rt?d.jsx(sv,{className:"size-3",strokeWidth:1.8,"aria-hidden":"true"}):d.jsx(av,{className:"size-3",strokeWidth:1.8,"aria-hidden":"true"})}):null]})}),d.jsx(Sw,{className:"w-44",children:d.jsx(aw,{Item:vl,Separator:Ew,selected:fe,isolated:Ye,hidden:Rt,actionCount:Kt,copyReferenceDisabled:!qa||typeof D!="function",selectDisabled:Cn,showIsolate:!zt,isolateDisabled:Qr,showExitAllIsolate:Vo,exitAllIsolateDisabled:me||!Vo,showHideOther:!zt,hideOtherDisabled:ys,hideAllDisabled:Sa,hideAllLabel:"Show all",showVisibility:!zt&&!Ye,visibilityDisabled:_o,showHideAll:!1,showExpandCollapse:k||Ei.some(Ce=>_n(Ce))||qn.length>0,expandSelectedDisabled:Go,collapseSelectedDisabled:ct,expandAllDisabled:vi,collapseAllDisabled:ze,onCopyReference:()=>{D?.(qa,{topology:zt})},onSelect:Ce=>{if(!zt&&fe&&$o.length>1){Be?.();return}di(Ce)},onIsolate:()=>{if(Ye){X?.(ie.id);return}ee?.(Ro)},onExitAllIsolate:()=>{ve?.()},onHideOther:()=>{q?.(Ro)},onHideAll:()=>{if(Rt){Jt?.();return}Ee?.()},onToggleVisibility:()=>{for(const Ce of Ro)ce?.(Ce)},onExpandSelected:()=>{for(const Ce of wi)re?.(Ce)},onCollapseSelected:()=>{for(const Ce of mo)re?.(Ce)},onExpandAll:()=>{for(const Ce of fo)re?.(Ce)},onCollapseAll:()=>{for(const Ce of Vn)re?.(Ce)}})})]})})]},ie.id)}):null,!te&&!m?d.jsx(Wu,{className:"py-1",children:"No assembly tree"}):null,wt?d.jsxs(d.Fragment,{children:[d.jsx("div",{className:nR,role:"presentation",children:"Mates"}),br.map(ie=>{const Mt=Qt.has(ie.id),un=_e===ie.id,Ke=me||typeof Y!="function",zt=mie(ie,Tn),Yn=kt=>{Y?.(ie.id,{multiSelect:kt?.shiftKey===!0})};return d.jsxs(bw,{modal:!1,children:[d.jsx(xw,{asChild:!0,children:d.jsxs("div",{role:"treeitem","aria-label":[ie.label,ie.detail].filter(Boolean).join(" "),"aria-selected":Mt,"aria-disabled":Ke,tabIndex:Ke?-1:0,className:J("flex h-7 min-w-0 max-w-full items-center gap-2 rounded-md px-2 text-xs outline-none transition-colors",Ke?"cursor-default text-sidebar-foreground/55":"cursor-pointer text-sidebar-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:bg-sidebar-accent focus-visible:text-sidebar-accent-foreground",Mt?"bg-sidebar-accent font-medium text-sidebar-accent-foreground":un&&"bg-sidebar-accent text-sidebar-accent-foreground"),title:zt,onClick:kt=>{if(Ke){kt.preventDefault();return}Yn(kt)},onKeyDown:kt=>{kt.target!==kt.currentTarget||Ke||(kt.key==="Enter"||kt.key===" ")&&(kt.preventDefault(),Yn(kt))},onMouseEnter:()=>{Ke||de?.(ie.id)},onMouseLeave:()=>{Ke||de?.("")},children:[d.jsx("span",{className:Qoe,"aria-hidden":"true",children:d.jsx(y5,{className:"size-3.5",strokeWidth:1.8})}),d.jsx("span",{className:"min-w-0 flex-1 truncate font-medium leading-4",children:ie.label})]})}),d.jsx(Sw,{className:"w-44",children:d.jsx(aw,{Item:vl,Separator:Ew,selected:Mt,copyReferenceDisabled:!ie.id||typeof j!="function",selectDisabled:Ke,showIsolate:!1,showHideOther:!1,showVisibility:!1,showHideAll:!1,showExpandCollapse:!1,onCopyReference:()=>{j?.(ie.id)},onSelect:Yn})})]},ie.id)})]}):null]})})},Yoe({references:A}),Sr,qL({runtime:mt,label:"STEP",loadingLabel:"Loading STEP module...",noParametersLabel:"No module parameters.",showEnableToggle:!0,enableAriaLabel:"Enable STEP module",animationAriaLabel:"STEP animation",resetTitle:"Reset STEP parameters",TimeControl:bie}),...xt,Sx(st)];return d.jsx(ug,{open:e,title:"STEP",isDesktop:a,width:l,onOpenChange:c,onStartResize:u,scrollBody:!1,children:d.jsx(bx,{kind:"step",sections:Er,openSectionIds:Xe,onOpenSectionIdsChange:sn})})}function Sie({...e}){return d.jsx(VB,{"data-slot":"toast-provider",...e})}function Eie({className:e,...t}){return d.jsx($B,{"data-slot":"toast",className:J("cad-glass-popover pointer-events-auto rounded-md border border-border px-4 py-2.5 text-xs font-medium text-popover-foreground shadow-lg shadow-black/10 outline-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:slide-out-to-right-2 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:slide-in-from-top-2",e),...t})}function wie({...e}){return d.jsx(GB,{"data-slot":"toast-title",...e})}function vie({className:e,...t}){return d.jsx(UB,{"data-slot":"toast-viewport",className:J("fixed right-4 top-4 z-50 flex max-h-screen w-[min(calc(100vw-2rem),22rem)] flex-col gap-2 outline-none",e),...t})}function Aie({copyStatus:e,screenshotStatus:t,persistenceStatus:n,motionErrorStatus:r,previewMode:o,onClear:i}){const s=r||e||t||n,a=!!r;return!s||o?null:d.jsxs(Sie,{duration:2200,swipeDirection:"right",children:[d.jsx(Eie,{open:!0,className:a?"border-destructive/40 text-destructive":void 0,onOpenChange:l=>{l||i?.()},children:d.jsx(wie,{children:s})}),d.jsx(vie,{})]})}const gl=Hne,uf=om,Cie=.001,Mie=3500;function iR(e,t){return Math.abs(Number(e)-Number(t))<=Cie}function $0(e){const t=String(e?.type||"").trim().toLowerCase();return t==="continuous"||t==="revolute"}function Iie(e){return $0(e)?"deg":"m"}function A1(e,t){const n=$0(t)?10:1e4,r=Math.round(Number(e)*n)/n,o=Number.isFinite(r)?r:0;return $0(t)?`${o}°`:`${o} m`}function C1(e,t="0"){const n=Number(e);if(!Number.isFinite(n))return t;const r=Math.round(n*1e3)/1e3;return String(Object.is(r,-0)?0:r)}function M1(e){const t=Number(e);if(!Number.isFinite(t))return"";const n=Math.round(t*1e4)/1e4;return String(Object.is(n,-0)?0:n)}function Nie(e,t){return!Array.isArray(e)||!Array.isArray(t)||e.length<3||t.length<3?!1:[0,1,2].every(n=>Math.abs(Number(e[n])-Number(t[n]))<=5e-4)}function ib(e,t,n,r){const o=Number.isFinite(Number(e))?Number(e):r;return Math.min(Math.max(o,t),Math.max(t,n))}const Tie=h.memo(function({joint:t,valueDeg:n,onValueChange:r}){const o=String(t?.name||"").trim(),i=Number.isFinite(Number(t?.minValueDeg))?Number(t.minValueDeg):-180,s=Number.isFinite(Number(t?.maxValueDeg))?Number(t.maxValueDeg):180,a=ib(n,i,s,0),l=Iie(t),c=$0(t)?1:.001,u=h.useRef(0),f=h.useRef(a),m=h.useRef(a),p=h.useRef(!1),b=h.useRef(0),[y,x]=h.useState(a),S=()=>{b.current&&typeof window<"u"&&window.clearTimeout(b.current),b.current=0},E=(w=m.current)=>{S(),p.current=!1;const _=ib(w,i,s,m.current);f.current=_,x(_)},C=w=>{f.current=w,p.current=!0,S(),typeof window<"u"&&(b.current=window.setTimeout(()=>{E()},Mie))};h.useEffect(()=>{if(m.current=a,p.current){iR(a,f.current)&&E(a);return}f.current=a,x(a)},[a]),h.useEffect(()=>()=>{u.current&&typeof cancelAnimationFrame=="function"&&cancelAnimationFrame(u.current),S()},[]);const A=(w,_={})=>{if(f.current=w,typeof requestAnimationFrame!="function"){r(t,w,_);return}u.current||(u.current=requestAnimationFrame(()=>{u.current=0,r(t,f.current,_)}))},N=(w,_={})=>{const I=ib(w,i,s,y);f.current=I,u.current&&typeof cancelAnimationFrame=="function"&&(cancelAnimationFrame(u.current),u.current=0),x(I),C(I),r(t,I,_)};return d.jsx(fs,{label:o||"Joint",value:A1(y,t),onValueCommit:w=>{N(ha(w,{fallback:y,min:i,max:s}))},valueInputProps:{ariaLabel:`${o||"Joint"} value in ${l}`},children:d.jsx(ds,{className:J(da,"min-w-0"),min:i,max:s,step:c,value:[y],onValueChange:w=>{const _=ib(w?.[0],i,s,y);iR(_,f.current)||(x(_),C(_),A(_,{scrub:!0}))},onValueCommit:w=>{N(w?.[0],{scrub:!0})},"aria-label":o||"Joint value",title:`${A1(i,t)} to ${A1(s,t)}`})})}),_ie=h.memo(function({axis:t,value:n,disabled:r,onValueChange:o}){const i=Number.isFinite(Number(n))?Number(n):0,[s,a]=h.useState(()=>M1(i));h.useEffect(()=>{a(M1(i))},[i]);const l=c=>{const u=Number(c),f=Number.isFinite(u)?u:i;a(M1(f)),o?.(f)};return d.jsx(ks,{label:t,children:d.jsx(ss,{type:"number",step:"0.001",inputMode:"decimal",disabled:r,value:s,onChange:c=>{a(c.target.value)},onFocus:c=>{c.currentTarget.select()},onMouseUp:c=>{c.preventDefault()},onBlur:()=>{l(s)},onKeyDown:c=>{c.key==="Enter"&&c.currentTarget.blur()},className:`${gl} text-right`,"aria-label":`Target ${t} coordinate`})})}),Yo=Yne;function Rie(e,t){return!e||typeof e!="object"?"":t.map(n=>String(e?.[n]||"").trim()).filter(Boolean).join(" / ")}function vp({title:e,items:t,fields:n}){const r=Array.isArray(t)?t.map(o=>Rie(o,n)).filter(Boolean):[];return r.length?d.jsxs("div",{className:"space-y-1.5 rounded-md border border-border/80 bg-background/40 p-2",children:[d.jsx("span",{className:wm,children:e}),d.jsxs("div",{className:"space-y-1",children:[r.slice(0,5).map((o,i)=>d.jsx("div",{className:"truncate text-[11px] font-medium leading-4 text-foreground",title:o,children:o},`${e}:${i}`)),r.length>5?d.jsxs("div",{className:"text-[11px] leading-4 text-muted-foreground",children:[r.length-5," more"]}):null]})]}):null}function Pie({open:e,title:t="URDF",sourceFormat:n="urdf",showJoints:r=!0,showMotion:o=!0,isDesktop:i,width:s,selectedEntry:a=null,onOpenChange:l,onStartResize:c,joints:u,groupStates:f,activeGroupStateId:m,jointValues:p,onJointValueChange:b,onGroupStateSelect:y,onCopyJointAngles:x,onResetPose:S,motion:E=null,sdf:C=null,fileDownloadAvailable:A=!1,viewerServerInfo:N=null,localFileOpenAvailable:w=!1,fileAccessBusyKey:_="",onOpenFileAsset:I,suppressDynamicMetadataStatus:R=!1,statusItems:O=[],themeTabs:F=[],openSectionIds:V=[],onOpenSectionIdsChange:$}){const K=String(n||"").trim().toLowerCase()==="sdf",U=Array.isArray(u)?u:[],Y=Array.isArray(f)?f:[],D=C?.info&&typeof C.info=="object"?C.info:{},j=D.staticMetadata&&typeof D.staticMetadata=="object"?D.staticMetadata:{},ee=Array.isArray(j.includes)?j.includes:[],X=Array.isArray(j.plugins)?j.plugins:[],ve=Array.isArray(j.sensors)?j.sensors:[],q=Array.isArray(j.lights)?j.lights:[],re=Array.isArray(j.physics)?j.physics:[],Be=Number.isFinite(Number(j.nestedModelCount))?Number(j.nestedModelCount):0,Me=!!(ee.length||X.length||ve.length||q.length||re.length),He=Array.isArray(E?.endEffectors)?E.endEffectors:[],de=Array.isArray(E?.planningGroups)?E.planningGroups:[],me=Array.isArray(E?.targetFrames)?E.targetFrames:[],we=o&&E?.serverLive===!0&&He.length>0,ce=String(E?.activeEndEffectorName||He[0]?.name||"").trim(),Ee=String(E?.activePlanningGroupName||de[0]?.name||"").trim(),Jt=String(E?.activeTargetFrameName||me[0]||"").trim(),mt=Array.isArray(E?.targetPosition)?E.targetPosition:[0,0,0],je=Array.isArray(E?.currentPosition)?E.currentPosition:null,ye=E?.moveit2&&typeof E.moveit2=="object"?E.moveit2:{},Ie=!!E?.solving,Je=E?.actionsEnabled!==!1,et=E?.serverLive?"connected":"offline",Xt=!!E?.selectPoseActive,st=je?Nie(mt,je):!0,xt=Y.some(ke=>String(ke?.id||"").trim()===m)?m:"__custom__",Xe=Y.find(ke=>String(ke?.id||"").trim()===xt),sn=xt==="__custom__"?"custom":String(Xe?.label||Xe?.name||xt),mn=[Sx(O),K?{id:"sdf",title:"SDF",content:d.jsxs("div",{children:[d.jsx(Zo,{title:"Document",children:d.jsxs(mc,{columns:2,children:[d.jsx(Yo,{label:"Version",value:String(D.version||"unknown")}),d.jsx(Yo,{label:"Document",value:String(D.documentKind||"model")}),D.worldName?d.jsx(Yo,{label:"World",value:String(D.worldName)}):null,d.jsx(Yo,{label:"Frame mode",value:D.nativeFrameSemantics?"native":"compat"}),d.jsx(Yo,{label:"Root link",value:String(D.rootLink||"")}),d.jsx(Yo,{label:"Model",value:String(D.modelName||t||"model")})]})}),d.jsx(Zo,{title:"Counts",children:d.jsxs(mc,{columns:3,children:[d.jsx(Yo,{label:"Links",value:String(D.linkCount??U.length)}),d.jsx(Yo,{label:"Joints",value:String(D.jointCount??u?.length??0)}),d.jsx(Yo,{label:"Frames",value:String(D.frameCount??0)}),d.jsx(Yo,{label:"Includes",value:String(ee.length)}),d.jsx(Yo,{label:"Plugins",value:String(X.length)}),d.jsx(Yo,{label:"Sensors",value:String(ve.length)}),d.jsx(Yo,{label:"Lights",value:String(q.length)}),d.jsx(Yo,{label:"Physics",value:String(re.length)}),d.jsx(Yo,{label:"Nested models",value:C1(Be)}),d.jsx(Yo,{label:"Unsupported geom.",value:`${C1(D.unsupportedVisualCount)} / ${C1(D.unsupportedCollisionCount)}`})]})}),Me?d.jsxs(Zo,{title:"Metadata",contentClassName:"px-2",children:[d.jsx(vp,{title:"Includes",items:ee,fields:["name","uri"]}),d.jsx(vp,{title:"Plugins",items:X,fields:["name","filename"]}),d.jsx(vp,{title:"Sensors",items:ve,fields:["name","type"]}),d.jsx(vp,{title:"Lights",items:q,fields:["name","type"]}),d.jsx(vp,{title:"Physics",items:re,fields:["name","type","default"]})]}):null]})}:null,we?{id:"motion",title:"MoveIt2",content:d.jsxs("div",{children:[d.jsx(Zo,{title:"Status",children:d.jsxs(mc,{columns:2,children:[d.jsx(Yo,{label:"SRDF",value:E?.srdf?.srdf||E?.srdf?.srdfHash||"linked"}),d.jsx(Yo,{label:"MoveIt2 server",value:et})]})}),d.jsxs(Zo,{title:"Target",children:[d.jsxs(mc,{columns:2,children:[d.jsx(ks,{label:"Planning group",children:d.jsxs(Pb,{value:Ee,disabled:Ie||de.length<=1,onValueChange:ke=>{E?.onMoveIt2SettingChange?.("activePlanningGroupName",ke)},children:[d.jsx(kb,{size:"sm",className:Fb,"aria-label":"Planning group",children:d.jsx(Ob,{placeholder:"Select group"})}),d.jsx(Db,{children:de.map(ke=>{const St=String(ke?.name||"").trim();return St?d.jsx(Lb,{value:St,className:"text-xs",children:St},St):null})})]})}),d.jsx(ks,{label:"End effector",children:d.jsxs(Pb,{value:ce,disabled:Ie||He.length<=1,onValueChange:ke=>{E?.onEndEffectorChange?.(ke)},children:[d.jsx(kb,{size:"sm",className:Fb,"aria-label":"End effector",children:d.jsx(Ob,{placeholder:"Select end effector"})}),d.jsx(Db,{children:He.map(ke=>{const St=String(ke?.name||"").trim();return St?d.jsx(Lb,{value:St,className:"text-xs",children:St},St):null})})]})}),d.jsx(ks,{label:"Target frame",children:d.jsxs(Pb,{value:Jt,disabled:Ie||me.length<=1,onValueChange:ke=>{E?.onMoveIt2SettingChange?.("targetFrame",ke)},children:[d.jsx(kb,{size:"sm",className:Fb,"aria-label":"Target frame",children:d.jsx(Ob,{placeholder:"Select frame"})}),d.jsx(Db,{children:me.map(ke=>{const St=String(ke||"").trim();return St?d.jsx(Lb,{value:St,className:"text-xs",children:St},St):null})})]})})]}),d.jsx(mc,{columns:3,children:["X","Y","Z"].map((ke,St)=>d.jsx(_ie,{axis:ke,value:mt[St],disabled:Ie,onValueChange:Rr=>{E?.onTargetPositionChange?.(St,Rr)}},ke))})]}),d.jsx(Zo,{title:"Solver",children:d.jsxs(mc,{columns:3,children:[d.jsx(ks,{label:"IK timeout",children:d.jsx(ss,{type:"number",step:"0.01",min:"0.001",value:ye.ikTimeout??.05,disabled:Ie,onChange:ke=>E?.onMoveIt2SettingChange?.("ikTimeout",ke.target.value),className:`${gl} text-right`,"aria-label":"IK timeout"})}),d.jsx(ks,{label:"IK attempts",children:d.jsx(ss,{type:"number",step:"1",min:"1",value:ye.ikAttempts??1,disabled:Ie,onChange:ke=>E?.onMoveIt2SettingChange?.("ikAttempts",ke.target.value),className:`${gl} text-right`,"aria-label":"IK attempts"})}),d.jsx(ks,{label:"Tolerance",children:d.jsx(ss,{type:"number",step:"0.001",min:"0.0001",value:ye.ikTolerance??.002,disabled:Ie,onChange:ke=>E?.onMoveIt2SettingChange?.("ikTolerance",ke.target.value),className:`${gl} text-right`,"aria-label":"IK tolerance"})})]})}),d.jsxs(Zo,{title:"Planning",children:[d.jsxs(mc,{columns:2,children:[d.jsx(ks,{label:"Planning pipeline",children:d.jsx(ss,{value:ye.planningPipeline??"ompl",disabled:Ie,onChange:ke=>E?.onMoveIt2SettingChange?.("planningPipeline",ke.target.value),className:gl,"aria-label":"Planning pipeline"})}),d.jsx(ks,{label:"Planner ID",children:d.jsx(ss,{value:ye.plannerId??"RRTConnectkConfigDefault",disabled:Ie,onChange:ke=>E?.onMoveIt2SettingChange?.("plannerId",ke.target.value),className:gl,"aria-label":"Planner ID"})})]}),d.jsxs(mc,{columns:3,children:[d.jsx(ks,{label:"Plan time",children:d.jsx(ss,{type:"number",step:"0.1",min:"0.1",value:ye.planningTime??1,disabled:Ie,onChange:ke=>E?.onMoveIt2SettingChange?.("planningTime",ke.target.value),className:`${gl} text-right`,"aria-label":"Plan time"})}),d.jsx(ks,{label:"Velocity",children:d.jsx(ss,{type:"number",step:"0.05",min:"0.01",max:"1",value:ye.maxVelocityScalingFactor??1,disabled:Ie,onChange:ke=>E?.onMoveIt2SettingChange?.("maxVelocityScalingFactor",ke.target.value),className:`${gl} text-right`,"aria-label":"Velocity scaling"})}),d.jsx(ks,{label:"Acceleration",children:d.jsx(ss,{type:"number",step:"0.05",min:"0.01",max:"1",value:ye.maxAccelerationScalingFactor??1,disabled:Ie,onChange:ke=>E?.onMoveIt2SettingChange?.("maxAccelerationScalingFactor",ke.target.value),className:`${gl} text-right`,"aria-label":"Acceleration scaling"})})]})]}),d.jsx(Zo,{title:"Actions",children:d.jsxs(Lf,{columns:2,children:[d.jsx(Gt,{type:"button",variant:Xt?"secondary":"outline",size:"sm",className:J(uf,"justify-center"),disabled:Ie||!Je,onClick:()=>{if(Xt){E?.onCancelSelectPose?.();return}E?.onSelectPose?.()},"aria-pressed":Xt,children:d.jsx("span",{children:"Select pose"})}),st?null:d.jsx(Gt,{type:"button",variant:"outline",size:"sm",className:J(uf,"justify-center"),disabled:Ie,onClick:()=>{E?.onUseCurrentPosition?.()},children:d.jsx("span",{children:"Reset"})}),d.jsx(Gt,{type:"button",variant:"default",size:"sm",className:J(uf,"justify-center"),disabled:Ie||!Je||st,onClick:()=>{E?.onSolve?.()},children:d.jsx("span",{children:Ie?"Solving...":"Solve pose"})}),d.jsx(Gt,{type:"button",variant:"default",size:"sm",className:J(uf,"justify-center"),disabled:Ie||!Je||st,onClick:()=>{E?.onPlan?.()},children:d.jsx("span",{children:Ie?"Planning...":"Plan to pose"})})]})})]})}:null,r?{id:"joints",title:"Joints",content:U.length?d.jsxs(d.Fragment,{children:[d.jsxs(Zo,{title:"Pose",children:[Y.length?d.jsx(la,{stacked:!0,label:"Group state",value:xt,onValueChange:ke=>{if(ke==="__custom__")return;const St=Y.find(Rr=>String(Rr?.id||"").trim()===ke);St&&y?.(St)},ariaLabel:"Group state",triggerContent:d.jsx("span",{className:"truncate",children:sn}),options:Y.map(ke=>({value:String(ke?.id||"").trim(),label:String(ke?.label||ke?.name||"").trim()||"State"}))}):null,d.jsxs(Lf,{children:[d.jsxs(Gt,{type:"button",variant:"outline",size:"sm",className:J(uf,"justify-center"),onClick:S,children:[d.jsx(Yu,{className:"h-3.5 w-3.5",strokeWidth:2,"aria-hidden":"true"}),d.jsx("span",{children:"Reset pose"})]}),d.jsxs(Gt,{type:"button",variant:"outline",size:"sm",className:J(uf,"justify-center"),onClick:()=>{x?.()},children:[d.jsx(Vf,{className:"h-3.5 w-3.5",strokeWidth:2,"aria-hidden":"true"}),d.jsx("span",{children:K?"Copy values":"Copy angles"})]})]})]}),d.jsx(Zo,{title:"Values",children:U.map(ke=>d.jsx(Tie,{joint:ke,valueDeg:p?.[ke.name]??ke?.defaultValueDeg??0,onValueChange:b},ke.name))})]}):d.jsx(Wu,{className:"py-2",children:"No movable joints."})}:null,...F];return d.jsx(ug,{open:e,title:t,isDesktop:i,width:s,onOpenChange:l,onStartResize:c,scrollBody:!1,children:d.jsx(bx,{kind:K?"sdf":n||"urdf",sections:mn,openSectionIds:V,onOpenSectionIdsChange:$})})}function Oie({command:e}){const t=String(e||"").trim(),[n,r]=h.useState(!1),[o,i]=h.useState("");if(h.useEffect(()=>{r(!1),i("")},[t]),h.useEffect(()=>{if(!n)return;const a=globalThis.setTimeout(()=>r(!1),1600);return()=>globalThis.clearTimeout(a)},[n]),!t)return null;async function s(){try{await js(t),r(!0),i("")}catch(a){r(!1),i(a instanceof Error?a.message:"Copy failed")}}return d.jsxs("div",{className:"mt-3 min-w-0 max-w-full",children:[d.jsxs("div",{className:"flex w-full min-w-0 max-w-full items-center gap-2 rounded-md bg-muted px-2.5 py-2",children:[d.jsx("code",{className:"block min-w-0 flex-1 truncate text-xs leading-5 text-foreground",title:t,children:t}),d.jsx(Gt,{type:"button",variant:"ghost",size:"icon-xs",className:"shrink-0 text-muted-foreground hover:text-foreground",onClick:s,"aria-label":n?"Copied rebuild command":"Copy rebuild command",title:n?"Copied":"Copy rebuild command",children:n?d.jsx(qu,{className:"size-3.5","aria-hidden":"true"}):d.jsx(Vf,{className:"size-3.5","aria-hidden":"true"})})]}),o?d.jsx("p",{className:"mt-1 text-xs text-destructive",children:o}):null]})}function kie({viewerAlertOpen:e,viewerAlert:t,previewMode:n,setViewerAlertOpen:r}){if(!t||n)return null;const o=t.severity==="warning",i=!!t.compact;return d.jsx(tne,{open:e,onOpenChange:r,children:d.jsxs(one,{className:i?"max-w-sm":"max-w-md",children:[d.jsxs(ine,{children:[d.jsx(qA,{variant:o?"warning":"destructive",className:"mb-1",children:o?"Warning":"Error"}),d.jsx(ane,{children:t.title}),d.jsxs(lne,{className:i?"leading-5 whitespace-pre-line":"space-y-3 leading-6",children:[d.jsx("span",{className:"block",children:t.message}),!i&&t.resolution?d.jsx("span",{className:"block text-muted-foreground/80",children:t.resolution}):null]})]}),d.jsx(Oie,{command:t.command}),d.jsx(sne,{children:d.jsx(cne,{"aria-label":"Close alert dialog",children:"Close"})})]})})}function Die({className:e,value:t,...n}){const r=Number.isFinite(t)?Math.min(100,Math.max(0,t)):null,o=r===null;return d.jsx(HB,{"data-slot":"progress",value:r,className:J("relative h-[3px] w-full overflow-hidden bg-primary/20",e),...n,children:d.jsx(WB,{"data-slot":"progress-indicator","data-indeterminate":o?"true":void 0,className:J("h-full bg-primary",o?"w-1/3 cad-progress-indeterminate":"w-full flex-1 transition-transform duration-200 ease-out"),style:o?void 0:{transform:`translateX(-${100-r}%)`}})})}const jw=400,I1=120;function zw(e,t=0){const n=Number(e);return Number.isFinite(n)?n:t}function N1(e){return Math.max(0,Math.round(zw(e,0)))}function G0(e){if(!e||typeof e!="object")return null;const t=String(e.phase||"").trim();if(!t)return null;const n=e.total===null||e.total===void 0?null:zw(e.total,0);return{phase:t,label:String(e.label||"").trim(),detail:String(e.detail||"").trim(),index:N1(e.index),count:N1(e.count),done:N1(e.done),total:n===null?null:Math.max(0,Math.round(n)),determinate:!!e.determinate&&Number(n)>0,updatedAt:zw(e.updatedAt,0)}}function Bw(e){if(!e)return null;const t=e.determinate&&e.total>0;return{label:e.label,ordinal:e.index>0&&e.count>0?`${e.index}/${e.count}`:"",detail:e.detail,determinate:t,percent:t?Math.round(e.done/e.total*100):null,counts:t?`${e.done}/${e.total}`:""}}const Lie="Loading";function Fie({viewerLoading:e,previewMode:t,progress:n=null}){if(!e||t)return null;const r=n?Bw(n):null,o=r?.label||Lie,i=r?.determinate?r.percent:null;return d.jsxs("div",{className:"pointer-events-none absolute inset-0 z-20 overflow-hidden",children:[d.jsx("div",{className:"cad-loading-overlay absolute inset-0"}),d.jsx("div",{className:"absolute inset-0 flex items-center justify-center px-4",children:d.jsxs("div",{role:"status","aria-live":"polite",className:"relative z-10 flex w-[22rem] max-w-[min(90vw,28rem)] flex-col gap-2 text-popover-foreground",children:[d.jsxs("div",{className:"flex items-baseline justify-between gap-4",children:[d.jsxs("span",{className:"truncate text-[11px] uppercase tracking-wider text-muted-foreground",children:[o,r?.detail?d.jsxs("span",{className:"normal-case tracking-normal text-muted-foreground/60",children:[" · ",r.detail]}):null]}),d.jsx("span",{className:"shrink-0 text-[11px] tabular-nums text-muted-foreground",children:r?.counts||""})]}),d.jsx(Die,{value:i,"aria-label":o})]})})]})}const jie="w-[min(15rem,calc(100vw-2rem))]";function zie({className:e,children:t}){return d.jsx("div",{className:J("cad-glass-surface pointer-events-auto flex min-h-0 flex-col overflow-hidden rounded-md border border-sidebar-border text-sidebar-foreground shadow-sm",e),children:t})}function Ti({label:e,active:t=!1,tooltipSide:n="bottom",className:r,children:o,...i}){return d.jsxs(mv,{children:[d.jsx(pv,{asChild:!0,children:d.jsx(Gt,{type:"button",variant:t?"secondary":"ghost",size:"icon-xs",className:J("size-6 rounded-sm text-sidebar-foreground/70 shadow-none transition hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 focus-visible:ring-ring/45 data-[variant=secondary]:bg-sidebar-accent data-[variant=secondary]:text-sidebar-accent-foreground data-[variant=secondary]:hover:bg-sidebar-accent",r),"aria-label":e,...i,children:o})}),d.jsx(hv,{side:n,sideOffset:6,children:e})]})}function Bie({className:e,layout:t="wrap",drawingToolOptions:n,drawingTool:r,handleSelectDrawingTool:o,handleUndoDrawing:i,handleRedoDrawing:s,handleClearDrawings:a,canUndoDrawing:l,canRedoDrawing:c,drawingStrokes:u}){const f=i,m=s,p=a,b=l,y=c,x=u.length,S=t==="scroll",E=d.jsxs("div",{className:J("flex gap-1",S?"w-max min-w-full flex-nowrap":"flex-wrap"),children:[n.map(({id:C,label:A,Icon:N})=>{const w=r===C;return d.jsx(Ti,{label:A,active:w,"aria-pressed":w,onClick:()=>o(C),children:d.jsx(N,{className:"size-3.5",strokeWidth:2,"aria-hidden":"true"})},C)}),d.jsx(Ti,{label:"Undo",onClick:f,disabled:!b,children:d.jsx(x5,{className:"size-3.5",strokeWidth:2,"aria-hidden":"true"})}),d.jsx(Ti,{label:"Redo",onClick:m,disabled:!y,children:d.jsx(S5,{className:"size-3.5",strokeWidth:2,"aria-hidden":"true"})}),d.jsx(Ti,{label:"Clear all",onClick:p,disabled:!x,children:d.jsx(E5,{className:"size-3.5",strokeWidth:2,"aria-hidden":"true"})})]});return d.jsx(zie,{className:J("p-1.5",e),children:d.jsx(q0,{delayDuration:250,children:S?d.jsx(ud,{className:"min-w-0 max-w-full",type:"auto",scrollbars:"horizontal",children:E}):E})})}const T1="grid size-6 shrink-0 place-items-center rounded-sm text-sidebar-foreground/70 transition hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/45 disabled:pointer-events-none disabled:opacity-50",Vie="6.875rem",sR=10,$ie=10,Gie=800;function aR(e,t=100){const n=Number(e);return Number.isFinite(n)?Math.min(Gie,Math.max($ie,n)):t}function sb(e){return`${Math.round(Number(e)||100)}%`}function Uie({zoomPercent:e,onZoomPercentChange:t,onZoomReset:n}){const[r,o]=h.useState(!1),[i,s]=h.useState(sb(e)),a=h.useRef(!1);h.useEffect(()=>{r||s(sb(e))},[r,e]);const l=()=>{const u=Number(String(i||"").replace(/%/g,"").trim());if(o(!1),!Number.isFinite(u)||u<=0){s(sb(100)),t?.(100);return}t?.(aR(u))},c=u=>{t?.(aR(Math.round(e)+u))};return d.jsxs("div",{className:"flex h-6 items-center gap-0.5",style:{width:Vie},"aria-label":"Zoom controls",onPointerDown:u=>{u.stopPropagation()},children:[d.jsx("button",{type:"button","aria-label":"Zoom out",title:"Zoom out",className:T1,onClick:u=>{u.stopPropagation(),c(-sR)},children:d.jsx(b2,{className:"size-3",strokeWidth:2.25,"aria-hidden":"true"})}),d.jsx("input",{type:"text",inputMode:"numeric","aria-label":"Zoom level percent",className:"h-6 w-8 min-w-0 rounded-sm border border-transparent bg-transparent px-0 text-center text-xs font-medium tabular-nums text-sidebar-foreground outline-none transition focus-visible:border-ring focus-visible:bg-sidebar-accent/40 focus-visible:ring-2 focus-visible:ring-ring/35",value:i,onFocus:u=>{const f=u.currentTarget;a.current=!0,o(!0),s(String(Math.round(e))),window.requestAnimationFrame(()=>{a.current&&(f.select(),a.current=!1)})},onMouseUp:u=>{a.current&&(u.preventDefault(),u.currentTarget.select(),a.current=!1)},onClick:u=>{String(u.currentTarget.value||"").includes("%")&&u.currentTarget.select()},onChange:u=>{a.current=!1,s(u.target.value)},onBlur:l,onKeyDown:u=>{u.key==="Enter"?(u.preventDefault(),l()):u.key==="Escape"&&(u.preventDefault(),o(!1),s(sb(e)),u.currentTarget.blur())}}),d.jsx("button",{type:"button","aria-label":"Zoom in",title:"Zoom in",className:T1,onClick:u=>{u.stopPropagation(),c(sR)},children:d.jsx(p2,{className:"size-3",strokeWidth:2.25,"aria-hidden":"true"})}),d.jsx("button",{type:"button","aria-label":"Reset view",title:"Reset view",className:T1,onClick:u=>{u.stopPropagation(),n?.()},children:d.jsx(Yu,{className:"size-3",strokeWidth:2.1,"aria-hidden":"true"})})]})}function Hie({selectedEntry:e,fileAccessBusyKey:t="",onExportModelFile:n,triggerClassName:r="",iconClassName:o="size-3",contentAlign:i="end",contentSide:s="bottom",contentSideOffset:a=6}){const l=GA(e);if(!e||!l.length||typeof n!="function")return null;const c=String(e?.kind||"").trim().toLowerCase()==="dxf",u=String(e?.file||e?.id||"").trim(),f=c?"Export drawing":"Export model";return d.jsxs(og,{children:[d.jsx(ig,{asChild:!0,children:d.jsxs("button",{type:"button","aria-label":f,title:f,className:r,onPointerDown:m=>{m.stopPropagation()},children:[d.jsx(w5,{className:o,strokeWidth:2,"aria-hidden":"true"}),d.jsx("span",{className:"sr-only",children:f})]})}),d.jsx(sg,{align:i,side:s,sideOffset:a,className:"w-max",children:l.map(m=>{const p=`${u}:export:${m}`;return d.jsx(ia,{className:"text-xs",disabled:t===p,onSelect:()=>{n(e,m)},children:d.jsx("span",{className:"min-w-0 truncate",children:hL(m)})},m)})})]})}const _1="cad-glass-surface border border-sidebar-border text-sidebar-foreground shadow-sm",Wie=2500;function Kie(e){const[t,n]=h.useState(!0),r=h.useRef(0),o=h.useRef(!1),i=h.useRef(e);i.current=e;const s=h.useCallback(()=>{typeof window>"u"||(window.clearTimeout(r.current),!(!i.current||o.current)&&(r.current=window.setTimeout(()=>n(!1),Wie)))},[]),a=h.useCallback(()=>{n(!0),s()},[s]);h.useEffect(()=>{if(typeof window>"u")return;if(!e){window.clearTimeout(r.current),o.current=!1,n(!0);return}a();const u=()=>a();return window.addEventListener("pointermove",u,{passive:!0}),window.addEventListener("pointerdown",u,{passive:!0}),()=>{window.clearTimeout(r.current),window.removeEventListener("pointermove",u),window.removeEventListener("pointerdown",u)}},[e,a]);const l=h.useCallback(()=>{o.current=!0,typeof window<"u"&&window.clearTimeout(r.current),n(!0)},[]),c=h.useCallback(()=>{o.current=!1,s()},[s]);return{toolbarHidden:e?!t:!1,onToolbarEnter:l,onToolbarLeave:c}}const qie="grid size-6 shrink-0 place-items-center rounded-sm text-sidebar-foreground/70 shadow-none transition hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/45 disabled:pointer-events-none disabled:opacity-50 data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground";function Yie({renderFormat:e,floatingCadToolbarPosition:t,zoomControlsVisible:n=!1,zoomPercent:r=100,onZoomPercentChange:o,onZoomReset:i,drawingViewToggle:s=!1,drawingViewMode:a="3d",onDrawingViewModeChange:l,previewMode:c=!1,toolbarHidden:u=!1,onToolbarEnter:f,onToolbarLeave:m,handleExitPreviewMode:p,selectionToolActive:b,referenceSelectionPending:y=!1,referenceSelectionUnavailable:x=!1,referenceSelectionDeferred:S=!1,urdfPosePickerAvailable:E=!1,urdfPosePickerActive:C=!1,handleToggleUrdfPosePicker:A,animationAvailable:N=!1,animationPlaying:w=!1,animationDisabled:_=!1,handleAnimationPlayToggle:I,drawToolActive:R,measureModeActive:O=!1,measureDisabled:F=!1,panToolActive:V,handleSelectTabToolMode:$,viewerLoading:K,selectedMeshData:U,selectedDxfData:Y,selectedImplicitModel:D,drawingToolOptions:j,drawingTool:ee,handleSelectDrawingTool:X,handleUndoDrawing:ve,handleRedoDrawing:q,handleClearDrawings:re,canUndoDrawing:Be,canRedoDrawing:Me,drawingStrokes:He,handleEnterPreviewMode:de,handleScreenshotCopy:me,selectedEntry:we,onExportModelFile:ce,fileAccessBusyKey:Ee=""}){const Jt=hs(e),mt=Dh(e)===Us.IMPLICIT?D:U,je=Mf(e,"select")||Mf(e,"pan")||Mf(e,"draw"),ye=K||!mt,Ie=K||!mt||y||x||S,Je=K||!mt||!E,et=y?"Preparing selection":"Select",Xt=Jt.animations&&N,st=K||!mt||_,xt=w?"Pause":"Play",Xe=Xt?d.jsx(Ti,{label:xt,active:w,onClick:I,disabled:st,"aria-pressed":w,children:w?d.jsx(g2,{className:"size-3",strokeWidth:2,"aria-hidden":"true"}):d.jsx(y2,{className:"size-3",strokeWidth:2,"aria-hidden":"true"})}):null,sn=d.jsx(Ti,{label:"Copy screenshot",onClick:()=>{me()},disabled:ye,children:d.jsx(I5,{className:"size-3",strokeWidth:2,"aria-hidden":"true"})}),mn=s?d.jsxs("div",{className:`${u?"pointer-events-none":"pointer-events-auto"} inline-flex h-8 w-fit items-center gap-0.5 rounded-md p-1 ${_1}`,onPointerEnter:f,onPointerLeave:m,children:[d.jsx(Ti,{label:"Top-down 2D view",active:a==="2d",onClick:()=>l?.("2d"),children:d.jsx("span",{className:"text-[10px] font-medium leading-none",children:"2D"})}),d.jsx(Ti,{label:"3D view",active:a!=="2d",onClick:()=>l?.("3d"),children:d.jsx("span",{className:"text-[10px] font-medium leading-none",children:"3D"})})]}):null,ke=n?d.jsx("div",{className:`${u?"pointer-events-none":"pointer-events-auto"} inline-flex h-8 w-fit items-center gap-0.5 rounded-md p-1 ${_1}`,onPointerEnter:f,onPointerLeave:m,children:d.jsx(Uie,{zoomPercent:r,onZoomPercentChange:o,onZoomReset:i})}):null;return d.jsxs("div",{className:`absolute z-20 flex flex-col items-end gap-1 transition-opacity duration-300 ${u?"opacity-0":"opacity-100"}`,style:t,children:[d.jsx(q0,{delayDuration:250,children:d.jsxs("div",{className:"flex w-fit items-center gap-1 self-end",children:[ke,mn,d.jsx("div",{className:`${u?"pointer-events-none":"pointer-events-auto"} inline-flex h-8 w-fit items-center gap-0.5 self-end rounded-md p-1 ${_1}`,onPointerEnter:f,onPointerLeave:m,children:c?d.jsxs(d.Fragment,{children:[Xe,sn,d.jsx(Ti,{label:"Exit orbit",onClick:p,children:d.jsx(Kc,{className:"size-3",strokeWidth:2,"aria-hidden":"true"})})]}):d.jsxs(d.Fragment,{children:[je?d.jsxs(d.Fragment,{children:[d.jsx(Ti,{label:et,active:S?!1:b,onClick:()=>$("references"),disabled:Ie,"aria-pressed":S?!1:b,children:d.jsx(v5,{className:"size-3",strokeWidth:2,"aria-hidden":"true"})}),d.jsx(Ti,{label:"Pan",active:V,onClick:()=>$("pan"),disabled:K||!mt,"aria-pressed":V,children:d.jsx(A5,{className:"size-3",strokeWidth:2,"aria-hidden":"true"})}),d.jsx(Ti,{label:"Measure",active:O,onClick:()=>$("measure"),disabled:F,"aria-pressed":O,children:d.jsx(h2,{className:"size-3",strokeWidth:2,"aria-hidden":"true"})}),d.jsx(Ti,{label:"Draw",active:R,onClick:()=>$("draw"),disabled:K||!mt,"aria-pressed":R,children:d.jsx(x2,{className:"size-3",strokeWidth:2,"aria-hidden":"true"})}),Xe]}):null,Jt.posePicker?d.jsx(Ti,{label:"Select Pose",active:C,onClick:A,disabled:Je,"aria-pressed":C,children:d.jsx(C5,{className:"size-3",strokeWidth:2,"aria-hidden":"true"})}):null,d.jsx(Ti,{label:"Orbit",onClick:de,disabled:ye,children:d.jsx(M5,{className:"size-3",strokeWidth:2,"aria-hidden":"true"})}),sn,d.jsx(Hie,{selectedEntry:we,onExportModelFile:ce,fileAccessBusyKey:Ee,triggerClassName:qie,iconClassName:"size-3",contentAlign:"end",contentSide:"bottom",contentSideOffset:6})]})})]})}),!c&&Mf(e,"draw")&&R?d.jsx(Bie,{className:jie,drawingToolOptions:j,drawingTool:ee,handleSelectDrawingTool:X,handleUndoDrawing:ve,handleRedoDrawing:q,handleClearDrawings:re,canUndoDrawing:Be,canRedoDrawing:Me,drawingStrokes:He}):null]})}function Xie({previewMode:e,selectedEntry:t,...n}){const{toolbarHidden:r,onToolbarEnter:o,onToolbarLeave:i}=Kie(e);return t?d.jsx(Yie,{selectedEntry:t,previewMode:e,toolbarHidden:r,onToolbarEnter:o,onToolbarLeave:i,...n}):null}function Zie({...e}){return d.jsx("nav",{"aria-label":"breadcrumb","data-slot":"breadcrumb",...e})}function lR({className:e,...t}){return d.jsx("ol",{"data-slot":"breadcrumb-list",className:J("flex flex-wrap items-center gap-1.5 text-sm break-words text-muted-foreground sm:gap-2.5",e),...t})}function cR({className:e,...t}){return d.jsx("li",{"data-slot":"breadcrumb-item",className:J("inline-flex items-center gap-1.5",e),...t})}function Jie({children:e,className:t,...n}){return d.jsx("li",{"data-slot":"breadcrumb-separator",role:"presentation","aria-hidden":"true",className:J("[&>svg]:size-3.5",t),...n,children:e??d.jsx(fm,{})})}function Qie(e){return!Array.isArray(e)||e.length<=4?(Array.isArray(e)?e:[]).map(t=>({type:"node",node:t})):[{type:"node",node:e[0]},{type:"ellipsis",label:"...",nodes:e.slice(1,-2)},...e.slice(-2).map(t=>({type:"node",node:t}))]}function ese(e){return e?.type==="directory"?e?.directory||e?.menuDirectory||null:e?.menuDirectory||null}function eF(e){return String(e?.id||e?.name||"Directory")}function tse(e,t){return!Array.isArray(e)||t<0||t>=e.length?null:t>0?e[t-1]:e[t]||null}function nse({directoryTree:e,selectedEntry:t,selectedFileLabel:n,selectedFileTitle:r}){if(!e)return t?[{type:"entry",label:n,title:r,entry:t,menuDirectory:null}]:[{type:"placeholder",label:n,title:r,menuDirectory:null}];if(!t)return[{type:"placeholder",label:n,title:r,menuDirectory:e}];const o=jA(t),i=gte(e,o),s=i.map((l,c)=>{const u=String(l?.id||"").trim();return u?{type:"directory",id:u,label:String(l?.name||"Folder"),title:eF(l),directory:l,menuDirectory:tse(i,c)}:null}).filter(Boolean),a=i[i.length-1]||e;return[...s,{type:"entry",label:n,title:r,entry:t,menuDirectory:a}]}const rse="0.4.21",ose={version:rse},uR={};function dR(e){return e==="dxf"?"DXF sheet":e==="urdf"?"URDF sheet":e==="srdf"?"SRDF sheet":e==="sdf"?"SDF sheet":e==="step"?"STEP sheet":e==="implicit"?"Implicit CAD sheet":"file sheet"}function ise(e,t){const n=typeof t=="function"?t(e):e?.kind||"";return String(n||"").trim().toLowerCase()}function sse(e,{entrySourceFormat:t,entryHasMesh:n,entryHasDxf:r,entryHasUrdf:o,activeStepArtifactGenerationFile:i="",stepArtifactGenerationAvailable:s=!0}){const a=ise(e,t),l=typeof r=="function"?r(e):!0,c=typeof o=="function"?o(e):!0,u=typeof n=="function"?n(e):!0;return rL(e,{sourceFormat:a,hasMesh:u,hasDxf:l,hasUrdf:c,activeStepArtifactGenerationFile:i,stepArtifactGenerationAvailable:s})}function tF({entry:e,selectedKey:t,onSelectEntry:n,sidebarLabelForEntry:r,entrySourceFormat:o,entryHasMesh:i,entryHasDxf:s,entryHasUrdf:a,activeStepArtifactGenerationFile:l="",stepArtifactGenerationAvailable:c=!0}){const u=At(e),f=u===t,m=typeof r=="function"?r(e):u,p=sse(e,{entrySourceFormat:o,entryHasMesh:i,entryHasDxf:s,entryHasUrdf:a,activeStepArtifactGenerationFile:l,stepArtifactGenerationAvailable:c}),{sourceFormat:b}=p,y=[m,p.statusLabel,e?.kind,String(e?.file||u)].filter(Boolean).join(" | ");return d.jsxs(ia,{"data-active":f,className:J("min-w-0 max-w-80 text-xs focus:bg-sidebar-accent focus:text-sidebar-accent-foreground","data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground"),title:y,disabled:!u||typeof n!="function","aria-current":f?"page":void 0,onSelect:()=>{u&&typeof n=="function"&&n(u)},children:[d.jsx(zA,{entry:e,sourceFormat:b,status:p,className:"size-3.5 shrink-0",spinning:p.loading}),d.jsx("span",{className:"block min-w-0 flex-1 truncate",children:m})]})}function nF({directory:e,selectedKey:t,onSelectEntry:n,sidebarLabelForEntry:r,entrySourceFormat:o,entryHasMesh:i,entryHasDxf:s,entryHasUrdf:a,activeStepArtifactGenerationFile:l="",stepArtifactGenerationAvailable:c=!0,canRevealFileAssets:u=!1,canCopyFileAssetLinks:f=!1,canCopyFileAssetPaths:m=!1,fileAccessBusyKey:p="",onDownloadFileAsset:b,onExportModelFile:y,onRevealFileAsset:x,onCopyFileAssetReference:S}){const E=gx(e);return E.length?E.map(C=>C.type==="directory"?d.jsx(rF,{directory:C.value,selectedKey:t,onSelectEntry:n,sidebarLabelForEntry:r,entrySourceFormat:o,entryHasMesh:i,entryHasDxf:s,entryHasUrdf:a,activeStepArtifactGenerationFile:l,stepArtifactGenerationAvailable:c,canRevealFileAssets:u,canCopyFileAssetLinks:f,canCopyFileAssetPaths:m,fileAccessBusyKey:p,onDownloadFileAsset:b,onExportModelFile:y,onRevealFileAsset:x,onCopyFileAssetReference:S},C.key):d.jsx(tF,{entry:C.value,selectedKey:t,onSelectEntry:n,sidebarLabelForEntry:r,entrySourceFormat:o,entryHasMesh:i,entryHasDxf:s,entryHasUrdf:a,activeStepArtifactGenerationFile:l,stepArtifactGenerationAvailable:c,canRevealFileAssets:u,canCopyFileAssetLinks:f,canCopyFileAssetPaths:m,fileAccessBusyKey:p,onDownloadFileAsset:b,onExportModelFile:y,onRevealFileAsset:x,onCopyFileAssetReference:S},C.key)):d.jsxs(ia,{disabled:!0,className:"max-w-80 text-xs",children:[d.jsx(S2,{className:"size-3.5 shrink-0","aria-hidden":"true"}),d.jsx("span",{className:"block min-w-0 truncate",children:String(e?.name||"Empty")})]})}function tC({children:e}){return d.jsx(ud,{className:"max-h-96 w-full",type:"auto",viewportClassName:"max-h-96",children:e})}function rF({directory:e,label:t="",title:n="",selectedKey:r,onSelectEntry:o,sidebarLabelForEntry:i,entrySourceFormat:s,entryHasMesh:a,entryHasDxf:l,entryHasUrdf:c,activeStepArtifactGenerationFile:u="",stepArtifactGenerationAvailable:f=!0,canRevealFileAssets:m=!1,canCopyFileAssetLinks:p=!1,canCopyFileAssetPaths:b=!1,fileAccessBusyKey:y="",onDownloadFileAsset:x,onExportModelFile:S,onRevealFileAsset:E,onCopyFileAssetReference:C}){const A=String(t||e?.name||"Folder"),N=String(n||eF(e));return d.jsxs(kD,{children:[d.jsxs(DD,{className:"min-w-0 max-w-80 text-xs",title:N,children:[d.jsx(S2,{className:"size-3.5 shrink-0","aria-hidden":"true"}),d.jsx("span",{className:"block min-w-0 flex-1 truncate",children:A})]}),d.jsx(LD,{className:"w-max max-w-80",children:d.jsx(tC,{children:d.jsx(nF,{directory:e,selectedKey:r,onSelectEntry:o,sidebarLabelForEntry:i,entrySourceFormat:s,entryHasMesh:a,entryHasDxf:l,entryHasUrdf:c,activeStepArtifactGenerationFile:u,stepArtifactGenerationAvailable:f,canRevealFileAssets:m,canCopyFileAssetLinks:p,canCopyFileAssetPaths:b,fileAccessBusyKey:y,onDownloadFileAsset:x,onExportModelFile:S,onRevealFileAsset:E,onCopyFileAssetReference:C})})})]})}function fR({node:e,current:t,selectedKey:n,onSelectEntry:r,sidebarLabelForEntry:o,entrySourceFormat:i,entryHasMesh:s,entryHasDxf:a,entryHasUrdf:l,activeStepArtifactGenerationFile:c="",stepArtifactGenerationAvailable:u=!0,selectedStepSourceStatus:f=null,canRevealFileAssets:m=!1,canCopyFileAssetLinks:p=!1,canCopyFileAssetPaths:b=!1,fileAccessBusyKey:y="",onDownloadFileAsset:x,onExportModelFile:S,onRevealFileAsset:E,onRevealInExplorerView:C,onCopyFileAssetReference:A,filenameLoadActivity:N}){const w=String(e?.label||""),_=String(e?.title||w),I=(e?.type==="directory"||e?.type==="placeholder"||e?.type==="entry")&&e?.menuDirectory||null;if(!(!!I&&gx(I).length>0)){const $=d.jsxs("span",{className:J("inline-flex min-w-0 items-center gap-2 text-xs font-medium",t?"max-w-[min(36rem,55vw)] text-foreground":"max-w-32"),title:_,children:[t&&e?.type==="entry"?d.jsx(mR,{activity:N}):null,d.jsx("span",{className:"block min-w-0 truncate",children:w})]});return e?.type!=="entry"||!e?.entry?$:d.jsx(Nw,{entry:e.entry,stepSourceStatus:f,canRevealFileAssets:m,canCopyFileAssetLinks:p,canCopyFileAssetPaths:b,busyKey:y,onDownloadFileAsset:x,onExportModelFile:S,onRevealFileAsset:E,onRevealInExplorerView:C,onCopyFileAssetReference:A,children:$})}const O=d.jsxs("button",{type:"button",className:J("inline-flex min-w-0 items-center gap-2 rounded-sm text-xs font-medium transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",t?"max-w-[min(36rem,55vw)] text-foreground":"max-w-32 text-muted-foreground"),"aria-label":`Browse ${w}`,"aria-current":t?"page":void 0,title:_,onPointerDown:$=>{$.button===1&&$.preventDefault()},children:[t&&e?.type==="entry"?d.jsx(mR,{activity:N}):null,d.jsx("span",{className:"block min-w-0 truncate",children:w})]}),F=d.jsx(ig,{asChild:!0,children:O}),V=e?.type==="entry"&&e?.entry?d.jsx(Nw,{entry:e.entry,stepSourceStatus:f,canRevealFileAssets:m,canCopyFileAssetLinks:p,canCopyFileAssetPaths:b,busyKey:y,onDownloadFileAsset:x,onExportModelFile:S,onRevealFileAsset:E,onRevealInExplorerView:C,onCopyFileAssetReference:A,children:F}):F;return d.jsxs(og,{children:[V,d.jsx(sg,{align:"start",sideOffset:6,className:"w-max max-w-80",children:d.jsx(tC,{children:d.jsx(nF,{directory:I,selectedKey:n,onSelectEntry:r,sidebarLabelForEntry:o,entrySourceFormat:i,entryHasMesh:s,entryHasDxf:a,entryHasUrdf:l,activeStepArtifactGenerationFile:c,stepArtifactGenerationAvailable:u,canRevealFileAssets:m,canCopyFileAssetLinks:p,canCopyFileAssetPaths:b,fileAccessBusyKey:y,onDownloadFileAsset:x,onExportModelFile:S,onRevealFileAsset:E,onCopyFileAssetReference:A})})})]})}function ase({nodes:e,selectedKey:t,onSelectEntry:n,sidebarLabelForEntry:r,entrySourceFormat:o,entryHasMesh:i,entryHasDxf:s,entryHasUrdf:a,activeStepArtifactGenerationFile:l="",stepArtifactGenerationAvailable:c=!0,canRevealFileAssets:u=!1,canCopyFileAssetLinks:f=!1,canCopyFileAssetPaths:m=!1,fileAccessBusyKey:p="",onDownloadFileAsset:b,onExportModelFile:y,onRevealFileAsset:x,onCopyFileAssetReference:S,title:E}){const C=Array.isArray(e)?e.filter(Boolean):[],A=C.map(N=>N.label).join(" / ")||E;return d.jsxs(og,{children:[d.jsx(ig,{asChild:!0,children:d.jsx("button",{type:"button",className:"inline-flex h-6 min-w-7 items-center justify-center rounded-md px-1.5 text-xs font-medium text-muted-foreground transition-colors hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring","aria-label":"Show collapsed path folders",title:A,children:d.jsx("span",{"aria-hidden":"true",children:"..."})})}),d.jsx(sg,{align:"start",sideOffset:6,className:"w-max max-w-80",children:d.jsx(tC,{children:C.map((N,w)=>{const _=ese(N);return N.type==="directory"&&_?d.jsx(rF,{directory:_,label:N.label,title:N.title,selectedKey:t,onSelectEntry:n,sidebarLabelForEntry:r,entrySourceFormat:o,entryHasMesh:i,entryHasDxf:s,entryHasUrdf:a,activeStepArtifactGenerationFile:l,stepArtifactGenerationAvailable:c,canRevealFileAssets:u,canCopyFileAssetLinks:f,canCopyFileAssetPaths:m,fileAccessBusyKey:p,onDownloadFileAsset:b,onExportModelFile:y,onRevealFileAsset:x,onCopyFileAssetReference:S},`${N.type}:${N.id}:${w}`):N.type==="entry"&&N.entry?d.jsx(tF,{entry:N.entry,selectedKey:t,onSelectEntry:n,sidebarLabelForEntry:r,entrySourceFormat:o,entryHasMesh:i,entryHasDxf:s,entryHasUrdf:a,activeStepArtifactGenerationFile:l,stepArtifactGenerationAvailable:c,canRevealFileAssets:u,canCopyFileAssetLinks:f,canCopyFileAssetPaths:m,fileAccessBusyKey:p,onDownloadFileAsset:b,onExportModelFile:y,onRevealFileAsset:x,onCopyFileAssetReference:S},`${N.type}:${At(N.entry)}:${w}`):d.jsx(ia,{disabled:!0,className:"max-w-80 text-xs",children:d.jsx("span",{className:"block min-w-0 truncate",children:N.label})},`${N.type}:${N.label}:${w}`)})})})]})}function mR({activity:e}){if(!e?.loading)return null;const t=String(e?.label||"").trim(),n=String(e?.title||t||"Loading").trim();return d.jsxs("span",{role:"status","aria-live":"polite",title:n,className:"inline-flex shrink-0 items-center",children:[d.jsx(f2,{className:"size-3 shrink-0 animate-spin text-muted-foreground","aria-hidden":"true"}),d.jsx("span",{className:"sr-only",children:n})]})}function lse(e){return d.jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",...e,children:d.jsx("path",{d:"M12 .5C5.65.5.5 5.65.5 12c0 5.09 3.29 9.4 7.86 10.92.58.1.79-.25.79-.56v-2.02c-3.2.7-3.87-1.37-3.87-1.37-.53-1.34-1.29-1.7-1.29-1.7-1.06-.73.08-.71.08-.71 1.17.08 1.79 1.2 1.79 1.2 1.04 1.78 2.73 1.27 3.4.97.1-.75.41-1.27.74-1.56-2.55-.29-5.24-1.28-5.24-5.68 0-1.25.45-2.28 1.2-3.08-.12-.29-.52-1.46.11-3.04 0 0 .98-.31 3.2 1.18A11.13 11.13 0 0 1 12 6.16c.99 0 1.98.13 2.91.39 2.22-1.49 3.2-1.18 3.2-1.18.63 1.58.23 2.75.11 3.04.75.8 1.2 1.83 1.2 3.08 0 4.41-2.69 5.39-5.25 5.67.42.36.79 1.08.79 2.17v3.03c0 .31.21.67.8.56A11.52 11.52 0 0 0 23.5 12C23.5 5.65 18.35.5 12 .5Z"})})}function cse(e){return d.jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",...e,children:d.jsx("path",{d:"M20.32 4.37a19.8 19.8 0 0 0-4.89-1.51.07.07 0 0 0-.07.03c-.21.38-.44.86-.61 1.25a18.27 18.27 0 0 0-5.49 0 12.64 12.64 0 0 0-.62-1.25.08.08 0 0 0-.07-.03 19.74 19.74 0 0 0-4.89 1.51.07.07 0 0 0-.03.03C.53 9.05-.32 13.58.1 18.06a.08.08 0 0 0 .03.06 19.9 19.9 0 0 0 5.99 3.03.08.08 0 0 0 .08-.03c.46-.63.87-1.3 1.23-1.99a.08.08 0 0 0-.04-.11 13.1 13.1 0 0 1-1.87-.89.08.08 0 0 1-.01-.13c.13-.09.25-.19.37-.29a.07.07 0 0 1 .08-.01c3.93 1.79 8.18 1.79 12.06 0a.07.07 0 0 1 .08.01c.12.1.25.2.37.29a.08.08 0 0 1-.01.13 12.3 12.3 0 0 1-1.87.89.08.08 0 0 0-.04.11c.36.7.77 1.36 1.23 1.99a.08.08 0 0 0 .08.03 19.84 19.84 0 0 0 6-3.03.08.08 0 0 0 .03-.05c.5-5.18-.84-9.67-3.55-13.66a.06.06 0 0 0-.02-.04ZM8.02 15.33c-1.18 0-2.16-1.09-2.16-2.42s.96-2.42 2.16-2.42c1.21 0 2.18 1.1 2.16 2.42 0 1.33-.96 2.42-2.16 2.42Zm7.98 0c-1.18 0-2.16-1.09-2.16-2.42s.96-2.42 2.16-2.42c1.21 0 2.18 1.1 2.16 2.42 0 1.33-.95 2.42-2.16 2.42Z"})})}const ab="size-7",lb="size-4",use="cad-viewer:latest-release:v1:",dse=360*60*1e3,fse=250,mse=700,Ec=Object.freeze({updateAvailable:!1,latestVersion:"",releaseUrl:"",installCommand:Hc,latestReleaseNewer:!1});function oF(e){return`${use}${e}`}function pse(e,t=Date.now()){if(!e||typeof window>"u"||!window.localStorage)return null;try{const n=window.localStorage.getItem(oF(e)),r=n?JSON.parse(n):null,o=Number(r?.expiresAt||0),i=String(r?.latestVersion||"").trim(),s=String(r?.releaseUrl||"").trim(),a=String(r?.installCommand||"").trim();return!i||o<=t?null:{latestVersion:i,releaseUrl:s,installCommand:a}}catch{return null}}function hse(e,t,n=Date.now()){if(!e||typeof window>"u"||!window.localStorage)return;const r=String(t?.latestVersion||"").trim();if(r)try{window.localStorage.setItem(oF(e),JSON.stringify({latestVersion:r,releaseUrl:String(t?.releaseUrl||"").trim(),installCommand:String(t?.installCommand||"").trim(),expiresAt:n+dse}))}catch{}}function gse(e,t=""){const n=String(e?.tag_name||"").trim();return n?{latestVersion:n,releaseUrl:String(e?.html_url||t||"").trim(),installCommand:ete(e?.body,Hc)}:null}function R1(e,t){const n=String(t?.latestVersion||"").trim(),r=String(t?.releaseUrl||"").trim(),o=String(t?.installCommand||Hc).trim();if(!n)return Ec;const i=aL(e,n);return{updateAvailable:Jee(e,n),latestVersion:n,releaseUrl:r,installCommand:o,latestReleaseNewer:i}}function yse({currentVersion:e,latestReleaseApiUrl:t,latestReleaseUrl:n,mockLatestVersion:r="",mockLatestReleaseUrl:o=""}){const[i,s]=h.useState(Ec);return h.useEffect(()=>{const a=String(e||"").trim(),l=String(t||"").trim(),c=String(r||"").trim();if(!a){s(Ec);return}if(c){s(R1(a,{latestVersion:c,releaseUrl:String(o||n||"").trim(),installCommand:Hc}));return}if(!l||typeof fetch!="function"){s(Ec);return}const u=pse(l);if(u){s(R1(a,u));return}s(Ec);const f=new AbortController;return fetch(l,{signal:f.signal,headers:{Accept:"application/vnd.github+json"}}).then(m=>{if(!m.ok)throw new Error(`GitHub latest release check failed with ${m.status}`);return m.json()}).then(m=>{if(f.signal.aborted)return;const p=gse(m,n);if(!p){u||s(Ec);return}hse(l,p),s(R1(a,p))}).catch(m=>{m?.name!=="AbortError"&&(u||s(Ec))}),()=>{f.abort()}},[e,t,n,o,r]),i}function P1({label:e,version:t,action:n=null}){const r=String(t||"").trim();return r?d.jsxs("div",{className:"flex min-w-0 flex-col items-start gap-1.5 px-0.5 text-left",children:[d.jsx("span",{className:"text-[11px] font-medium leading-none text-muted-foreground",children:e}),d.jsxs("div",{className:"flex min-w-0 items-center gap-2",children:[d.jsx("span",{className:"min-w-0 text-left font-mono text-[12px] leading-5 text-foreground tabular-nums",children:r}),n]})]}):null}function bse({version:e,releaseUrl:t,releaseCheck:n=Ec}){const r=String(e||"").trim(),[o,i]=h.useState(""),[s,a]=h.useState(""),l=h.useRef(!1);if(!r)return null;const c=!!n?.updateAvailable,u=c?String(n?.releaseUrl||t||"").trim():String(t||"").trim(),f=String(n?.latestVersion||"").trim(),m=!!n?.latestReleaseNewer,p=f&&m,b=p?String(n?.releaseUrl||"").trim():"",y=String(n?.installCommand||Hc).trim()||Hc,x=Wee,S=!!f&&!m,E=c?"Update CAD Viewer":u?`Open release ${r}`:`Version ${r}`,C=async w=>{if(w.preventDefault(),w.stopPropagation(),!l.current){l.current=!0,globalThis.setTimeout(()=>{l.current=!1},250);try{await js(y),i("copied"),globalThis.setTimeout(()=>{i("")},1600)}catch{i("failed")}}},A=async w=>{if(w.preventDefault(),w.stopPropagation(),!l.current){l.current=!0,globalThis.setTimeout(()=>{l.current=!1},250);try{await js(x),a("copied"),globalThis.setTimeout(()=>{a("")},1600)}catch{a("failed")}}},N=d.jsx(Gt,{asChild:!!u,variant:c?"default":"ghost",size:"xs",className:J("inline-flex rounded-sm px-2 text-xs font-medium leading-none",c?"h-6 px-2 text-[11px]":"h-7 text-muted-foreground tabular-nums hover:text-sidebar-foreground"),"aria-label":E,children:u?d.jsx("a",{href:u,target:"_blank",rel:"noreferrer",children:d.jsx("span",{className:"inline-flex items-center gap-1",children:c?d.jsx("span",{children:"Update"}):d.jsx("span",{children:r})})}):d.jsx("span",{className:"inline-flex items-center gap-1",children:c?d.jsx("span",{children:"Update"}):d.jsx("span",{children:r})})});return d.jsxs(mv,{delayDuration:c?fse:mse,children:[d.jsx(pv,{asChild:!0,children:N}),d.jsx(hv,{side:"bottom",sideOffset:6,className:"cad-glass-popover w-fit max-w-[calc(100vw-1rem)] border border-border bg-popover p-2 text-left text-popover-foreground shadow-lg shadow-black/10",arrowClassName:"bg-popover fill-popover",children:d.jsxs("div",{className:"inline-flex max-w-full flex-col gap-3",children:[p?d.jsxs("div",{className:"grid w-full min-w-0 grid-cols-2 gap-3",children:[d.jsx(P1,{label:"Current Version",version:r}),d.jsx(P1,{label:"Latest Version",version:f,action:b?d.jsx(Gt,{asChild:!0,variant:"default",size:"xs",className:"h-4 !min-h-0 rounded-sm !px-1.5 !py-0 text-[10px] font-medium leading-none","aria-label":`Update CAD Viewer to ${f}`,children:d.jsx("a",{href:b,target:"_blank",rel:"noreferrer",children:"Update"})}):null})]}):d.jsx(P1,{label:"Current Version",version:r}),d.jsxs("div",{className:"flex min-w-0 flex-col gap-1.5",children:[d.jsx("div",{className:"px-0.5 text-[11px] font-medium leading-none text-muted-foreground",children:"In your terminal"}),d.jsxs("div",{className:"flex h-8 min-w-0 items-center gap-2 rounded-sm border border-border/60 bg-muted/35 p-1 pl-2",children:[d.jsx("code",{className:"min-w-0 flex-1 whitespace-nowrap font-mono text-[11px] leading-5 text-foreground",children:y}),d.jsx(Gt,{type:"button",variant:"ghost",size:"icon",className:"inline-flex size-6 shrink-0 items-center justify-center rounded-sm border border-border text-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/50","aria-label":o==="copied"?"Install command copied":"Copy install command",onPointerDown:C,onClick:C,children:o==="copied"?d.jsx(qu,{className:"size-3","aria-hidden":"true"}):d.jsx(Vf,{className:"size-3","aria-hidden":"true"})})]})]}),d.jsxs("div",{className:"flex min-w-0 flex-col gap-1.5",children:[d.jsx("div",{className:"px-0.5 text-[11px] font-medium leading-none text-muted-foreground",children:"Or ask your agent"}),d.jsxs("div",{className:"flex min-h-8 min-w-0 items-center gap-2 rounded-sm border border-border/60 bg-muted/35 p-1 pl-2",children:[d.jsx("span",{className:"min-w-0 max-w-[15.5rem] flex-1 text-[11px] leading-4 text-foreground",children:x}),d.jsx(Gt,{type:"button",variant:"ghost",size:"icon",className:"inline-flex size-6 shrink-0 items-center justify-center rounded-sm border border-border text-foreground transition-colors hover:bg-accent hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/50","aria-label":s==="copied"?"Agent message copied":"Copy agent message",title:x,onPointerDown:A,onClick:A,children:s==="copied"?d.jsx(qu,{className:"size-3","aria-hidden":"true"}):d.jsx(Vf,{className:"size-3","aria-hidden":"true"})})]})]}),o==="failed"||s==="failed"?d.jsx("div",{className:"text-[11px] text-muted-foreground",children:"Copy failed"}):null,S?d.jsxs("div",{className:"flex items-center gap-1.5 px-0.5 text-[11px] font-medium text-muted-foreground",children:[d.jsx(T5,{className:"size-3 text-primary","aria-hidden":"true"}),d.jsx("span",{children:"You are up to date"})]}):null]})})]})}function xse({previewMode:e,sidebarLabelForEntry:t,directoryTree:n=null,selectedKey:r="",selectedEntry:o,onSelectEntry:i,entrySourceFormat:s,entryHasMesh:a,entryHasDxf:l,entryHasUrdf:c,activeStepArtifactGenerationFile:u="",stepArtifactGenerationAvailable:f=!0,filenameLoadActivity:m=null,selectedStepSourceStatus:p=null,canRevealFileAssets:b=!1,canCopyFileAssetLinks:y=!1,canCopyFileAssetPaths:x=!1,fileAccessBusyKey:S="",onDownloadFileAsset:E,onExportModelFile:C,onRevealFileAsset:A,onRevealInExplorerView:N,onCopyFileAssetReference:w,fileSheetKind:_="",fileSheetOpen:I=!1,onToggleFileSheet:R,themeEditing:O=!1,onToggleThemeEditor:F,navigationAvailable:V=!0}){const $=String(ose.version).trim(),K=qee(uR?.VIEWER_DISCORD_URL),U=sL(uR?.VIEWER_GITHUB_URL),Y=Yee($,U),D=Xee(U),j=e?"":Zee(U),ve=yse({currentVersion:$,latestReleaseApiUrl:j,latestReleaseUrl:D,mockLatestVersion:"",mockLatestReleaseUrl:""});if(e)return null;const q=o&&typeof t=="function"?t(o):"Select a file",re=o?String(o.file||o.id||q):q,Be=V||!!o,Me=nse({directoryTree:V?n:null,selectedEntry:o,selectedFileLabel:q,selectedFileTitle:re}),He=Qie(Me),de=Me[Me.length-1]||null,me="bg-accent text-accent-foreground",we=!!_&&typeof R=="function",ce=I?`Collapse ${dR(_)}`:`Expand ${dR(_)}`,Ee=O?"Close theme settings":"Open theme settings";return d.jsxs("header",{className:"cad-glass-surface pointer-events-auto flex h-11 shrink-0 items-center gap-2 border-b border-sidebar-border px-2 text-sidebar-foreground",children:[V?d.jsx(qV,{title:"Toggle CAD Viewer","aria-label":"Toggle CAD Viewer",className:"shrink-0"}):null,Be?d.jsx(Zie,{className:"min-w-0 overflow-hidden",children:d.jsxs(ud,{className:"h-8 min-w-0 whitespace-nowrap",type:"auto",viewportClassName:"overflow-y-hidden",scrollbars:"horizontal",children:[de?d.jsx(lR,{className:"flex h-8 min-w-full flex-nowrap gap-1.5 pr-2 text-xs sm:hidden",children:d.jsx(cR,{className:"min-w-0",children:d.jsx(fR,{node:de,current:!0,selectedKey:r,onSelectEntry:i,sidebarLabelForEntry:t,entrySourceFormat:s,entryHasMesh:a,entryHasDxf:l,entryHasUrdf:c,activeStepArtifactGenerationFile:u,stepArtifactGenerationAvailable:f,selectedStepSourceStatus:p,canRevealFileAssets:b,canCopyFileAssetLinks:y,canCopyFileAssetPaths:x,fileAccessBusyKey:S,onDownloadFileAsset:E,onExportModelFile:C,onRevealFileAsset:A,onRevealInExplorerView:N,onCopyFileAssetReference:w,filenameLoadActivity:m})})}):null,d.jsx(lR,{className:"hidden h-8 min-w-full w-max flex-nowrap gap-1.5 pr-2 text-xs sm:flex sm:gap-1.5",children:He.map((Jt,mt)=>d.jsxs(h.Fragment,{children:[d.jsx(cR,{className:"min-w-0",children:Jt.type==="ellipsis"?d.jsx(ase,{nodes:Jt.nodes,selectedKey:r,onSelectEntry:i,sidebarLabelForEntry:t,entrySourceFormat:s,entryHasMesh:a,entryHasDxf:l,entryHasUrdf:c,activeStepArtifactGenerationFile:u,stepArtifactGenerationAvailable:f,canRevealFileAssets:b,canCopyFileAssetLinks:y,canCopyFileAssetPaths:x,fileAccessBusyKey:S,onDownloadFileAsset:E,onExportModelFile:C,onRevealFileAsset:A,onCopyFileAssetReference:w,title:re}):d.jsx(fR,{node:Jt.node,current:mt===He.length-1,selectedKey:r,onSelectEntry:i,sidebarLabelForEntry:t,entrySourceFormat:s,entryHasMesh:a,entryHasDxf:l,entryHasUrdf:c,activeStepArtifactGenerationFile:u,stepArtifactGenerationAvailable:f,selectedStepSourceStatus:p,canRevealFileAssets:b,canCopyFileAssetLinks:y,canCopyFileAssetPaths:x,fileAccessBusyKey:S,onDownloadFileAsset:E,onExportModelFile:C,onRevealFileAsset:A,onRevealInExplorerView:N,onCopyFileAssetReference:w,filenameLoadActivity:m})}),mt<He.length-1?d.jsx(Jie,{className:"text-muted-foreground/60"}):null]},`${Jt.type}:${Jt.node?.type||""}:${Jt.node?.id||Jt.node?.label||mt}:${mt}`))})]})}):d.jsx("div",{className:"min-w-0"}),d.jsx("div",{className:"min-w-0 flex-1"}),d.jsx(q0,{delayDuration:250,children:d.jsxs("div",{className:"flex shrink-0 items-center gap-1.5",children:[d.jsx(bse,{version:$,releaseUrl:Y,releaseCheck:ve}),d.jsx(Gt,{asChild:!0,variant:"ghost",size:"icon-sm","aria-label":"Join the text-to-cad Discord",title:"Join the text-to-cad Discord",className:ab,children:d.jsx("a",{href:K,target:"_blank",rel:"noreferrer",children:d.jsx(cse,{className:lb})})}),U?d.jsx(Gt,{asChild:!0,variant:"ghost",size:"icon-sm","aria-label":"Open GitHub repository",title:"Open GitHub repository",className:ab,children:d.jsx("a",{href:U,target:"_blank",rel:"noreferrer",children:d.jsx(lse,{className:lb})})}):null,d.jsxs(Gt,{type:"button",variant:"ghost",size:"icon","aria-label":Ee,title:Ee,"aria-pressed":O,onClick:F,className:`${ab} ${O?me:""}`,children:[d.jsx(m2,{className:lb,strokeWidth:2,"aria-hidden":"true"}),d.jsx("span",{className:"sr-only",children:Ee})]}),we?d.jsxs(Gt,{type:"button",variant:"ghost",size:"icon","aria-label":ce,title:ce,"aria-pressed":I&&!O,onClick:R,className:`${ab} ${I&&!O?me:""}`,children:[d.jsx(N5,{className:lb}),d.jsx("span",{className:"sr-only",children:ce})]}):null]})})]})}const pR=6,Sse=["assembly","step","dxf","implicit","robot","mesh"];function Ese(e){if(e?.kind==="assembly")return"assembly";const t=hs(Nr(e));return t.content===Us.ROBOT||e?.kind==="srdf"?"robot":t.sheetKind}function wse(e,t){return e?.kind==="assembly"?"Assembly":e?.kind==="srdf"?"SRDF":Lh(t)||"STEP"}function vse(e){return String(e?.file||"").trim()}function Ase(e,t){return Ll(e).localeCompare(Ll(t),void 0,{numeric:!0,sensitivity:"base"})}function hR(e,t,n){const r=At(n);!r||t.has(r)||(t.add(r),e.push(n))}function Cse(e){const t=[...Array.isArray(e)?e:[]].sort(Ase),n=[],r=new Set;for(const o of Sse){const i=t.find(s=>Ese(s)===o);hR(n,r,i)}for(const o of t){if(n.length>=pR)break;hR(n,r,o)}return n.slice(0,pR)}function Mse({entries:e,onSelectEntry:t,catalogHydrated:n=!1,catalogRefreshing:r=!1,catalogError:o=""}){const i=Cse(e),s=i.length>0,a=String(o||"").trim(),l=!n||r&&!s;return d.jsx("div",{className:"pointer-events-none absolute inset-0 z-20 flex min-w-0 items-center justify-center px-4 py-6",children:d.jsxs("section",{className:"cad-glass-popover pointer-events-auto w-full max-w-2xl overflow-hidden rounded-md border border-sidebar-border text-popover-foreground shadow-xl shadow-black/10","aria-label":"CAD Viewer home",children:[d.jsx("div",{className:"border-b border-sidebar-border px-5 py-4 sm:px-6",children:d.jsx("h1",{className:"text-lg font-medium leading-6 text-foreground sm:text-xl",children:"Select a file"})}),d.jsx("div",{className:"divide-y divide-sidebar-border/70",children:s?i.map(u=>{const f=At(u),m=Nr(u),p=Ll(u)||f,b=vse(u),y=wse(u,m);return d.jsxs(Gt,{type:"button",variant:"ghost",className:"group h-auto w-full justify-start rounded-none px-5 py-3 text-left hover:bg-sidebar-accent/80 focus-visible:ring-inset has-[>svg]:px-5 sm:px-6 sm:has-[>svg]:px-6",onClick:()=>{f&&typeof t=="function"&&t(f)},title:b||p,children:[d.jsx(zA,{entry:u,sourceFormat:m,className:"size-4 shrink-0 text-muted-foreground group-hover:text-foreground"}),d.jsxs("span",{className:"min-w-0 flex-1",children:[d.jsx("span",{className:"block min-w-0 truncate text-sm font-medium text-foreground",children:p}),b?d.jsx("span",{className:"mt-0.5 block min-w-0 truncate text-[11px] font-normal text-muted-foreground",children:b}):null]}),d.jsx("span",{className:J("shrink-0 rounded-md border border-sidebar-border px-1.5 py-0.5 text-[10px] font-semibold uppercase leading-none text-muted-foreground","max-sm:hidden"),children:y}),d.jsx(fm,{className:"size-4 shrink-0 text-muted-foreground transition-transform group-hover:translate-x-0.5 group-hover:text-foreground","aria-hidden":"true"})]},f)}):a?d.jsxs("p",{className:"break-words px-5 py-5 text-sm text-muted-foreground sm:px-6",role:"status",children:["CAD catalog unavailable: ",a]}):l?d.jsx("p",{className:"px-5 py-5 text-sm text-muted-foreground sm:px-6",role:"status",children:"Loading CAD catalog..."}):d.jsx("p",{className:"px-5 py-5 text-sm text-muted-foreground sm:px-6",children:"No CAD entries found."})})]})})}const La="STEP_topology",Ex=2,iF="_CAD_EDGE_BARYCENTRIC",sF="_CAD_EDGE_CLASS",cb=Object.freeze({FEATURE:"feature",TANGENT:"tangent",SEAM:"seam",DEGENERATE:"degenerate",BOUNDARY:"boundary",NON_MANIFOLD:"nonManifold",UNKNOWN:"unknown"});Object.freeze([cb.FEATURE,cb.TANGENT,cb.SEAM,cb.DEGENERATE]);function nC(e){return Number(e)===Ex}const O1=1e3,Ise=Object.freeze(["_cad_edge_barycentric","_CAD_EDGE_BARYCENTRIC"]),Nse=Object.freeze(["_cad_edge_class","_CAD_EDGE_CLASS"]),Tse=Object.freeze([.72,.72,.72,1]),_se=1e-6;function aF(){return{min:[1/0,1/0,1/0],max:[-1/0,-1/0,-1/0]}}function gR(e,t,n,r){[t,n,r].every(Number.isFinite)&&(e.min[0]=Math.min(e.min[0],t),e.min[1]=Math.min(e.min[1],n),e.min[2]=Math.min(e.min[2],r),e.max[0]=Math.max(e.max[0],t),e.max[1]=Math.max(e.max[1],n),e.max[2]=Math.max(e.max[2],r))}function lF(e){return!e?.min?.every(Number.isFinite)||!e?.max?.every(Number.isFinite)?{min:[0,0,0],max:[0,0,0]}:{min:[...e.min],max:[...e.max]}}function cF(e){const t=e?.pbrMetallicRoughness?.baseColorFactor;return Array.isArray(t)?t:null}function Rse(e,t){return!Array.isArray(e)||!Array.isArray(t)?!1:t.every((n,r)=>Math.abs(Number(e[r]??(r===3?1:0))-n)<=_se)}function Pse(e){const t=e?.extras?.cadSourceColor;return t===!0||t===!1?t:null}function Ose(e){const t=e?.userData?.cadSourceColor;return t===!0||t===!1?t:null}function kse(e,t){return Rse(cF(e),Tse)&&t?.color?.getHexString?.()==="dddddd"}function Dse(e,t,{rawMaterial:n=null,stepTopology:r=!1}={}){if(!t||!e?.color)return null;const o=Ose(e)??Pse(n);return o===!1||r&&o!==!0&&kse(n,e)?null:{rgb:[e.color.r,e.color.g,e.color.b],hex:`#${e.color.getHexString()}`,opacity:Lse(e,n)}}function Lse(e,t=null){const n=Number(e?.opacity);if(Number.isFinite(n))return Math.min(Math.max(n,0),1);const r=cF(t)?.[3],o=Number(r);return Number.isFinite(o)?Math.min(Math.max(o,0),1):1}function Fse(e,t){if(Array.isArray(e)){const n=Number.isInteger(t?.materialIndex)?t.materialIndex:0;return e[n]||e[0]||null}return e||null}function jse(e){return Number.isInteger(e?.materialIndex)?e.materialIndex:0}function zse(e,t){return!Array.isArray(e)||e.length<=0?null:e[jse(t)]||e[0]||null}function Bse(e){const t=e?.elements;return!Array.isArray(t)&&!(t instanceof Float32Array)?!1:[1,0,0,0,0,0,-1,0,0,1,0,0,0,0,0,1].every((r,o)=>Math.abs(Number(t[o])-r)<1e-6)}function Vse(e,t){t?.updateWorldMatrix?.(!0,!0);const n=Array.isArray(t?.children)?t.children:[];return n.length!==1||!Bse(n[0]?.matrixWorld)?null:new e.Matrix4().copy(n[0].matrixWorld).invert()}function uF(e){let t=e||null;for(;t;){const r=String(t.userData?.cadOccurrenceId||"").trim();if(r)return r;t=t.parent||null}const n=String(e?.name||"").trim();return/^o\d+(?:\.\d+)*$/.test(n)?n:""}function $se(e){let t=!1;return e?.traverse?.(n=>{t||(t=!!String(n?.userData?.cadOccurrenceId||"").trim())}),t}function Gse(e,t){const n=e.x*O1,r=e.y*O1,o=e.z*O1;return t?{x:n,y:-o,z:r}:{x:n,y:r,z:o}}function dF(e,t){return e?e.getX(t):t}function yR(e,t){for(const n of t){const r=e?.getAttribute?.(n);if(r)return r}return null}function fF(e,t,n){for(let r=0;r<3;r+=1){const o=dF(t,n+r);if(o<0||o>=e.count)return!1}return!0}function Use(e,t,n,r){let o=0;for(let i=0;i<r;i+=3)fF(e,t,n+i)&&(o+=3);return o}function Hse(e,t,n,r,o,i,s,a=0,l=0,{rawMaterial:c=null,stepTopology:u=!1}={}){const f=t?.geometry,m=f?.getAttribute?.("position");if(!m||m.itemSize!==3||m.count<=0)return null;t.updateWorldMatrix?.(!0,!1);const p=t.matrixWorld?i?new e.Matrix4().multiplyMatrices(i,t.matrixWorld):new e.Matrix4().copy(t.matrixWorld):null,b=p?new e.Matrix3().getNormalMatrix(p):null,y=f.getAttribute("normal"),x=yR(f,Ise),S=yR(f,Nse),E=f.getIndex?.(),C=Math.max(0,Math.floor(Number(n?.start||0))),A=E?.count||m.count,N=Math.floor(Number(n?.count||A-C)),w=Math.max(0,Math.min(N,A-C)),_=w-w%3;if(_<=0)return null;const I=Use(m,E,C,_),R=Math.floor(I/3);if(I<=0||R<=0)return null;const O=Dse(r,o,{rawMaterial:c,stepTopology:u}),F=uF(t),V=String(F||t?.name||t?.parent?.name||`glb:${l}`).trim(),$=F||`glb:${l}`;return{mesh:t,positions:m,normals:y,surfaceEdgeBarycentric:x,surfaceEdgeClass:S,indexAttribute:E,sourceStart:C,triangleVertexCount:_,matrixWorld:p,normalMatrix:b,convertYUpToCad:s,id:$,occurrenceId:$,primitiveIndex:Math.max(0,Math.floor(Number(a)||0)),name:V||$,label:V||$,color:O?.hex||"",opacity:O?O.opacity:1,hasSourceColors:!!O,vertexCount:I,triangleCount:R}}function Wse(e,t,n,r){const o=aF(),i=new e.Vector3,s=new e.Vector3,a=r.vertexOffset,l=Math.floor(r.indexOffset/3);let c=0;for(let m=0;m<t.triangleVertexCount;m+=3)if(fF(t.positions,t.indexAttribute,t.sourceStart+m))for(let p=0;p<3;p+=1){const b=t.sourceStart+m+p,y=dF(t.indexAttribute,b),x=a+c,S=x*3;i.set(t.positions.getX(y),t.positions.getY(y),t.positions.getZ(y)),t.matrixWorld&&i.applyMatrix4(t.matrixWorld);const E=Gse(i,t.convertYUpToCad),C=E.x,A=E.y,N=E.z;if(n.vertices[S]=C,n.vertices[S+1]=A,n.vertices[S+2]=N,gR(o,C,A,N),gR(n.bounds,C,A,N),n.colors&&t.colorsAttribute&&y<t.colorsAttribute.count&&(n.colors[S]=t.colorsAttribute.getX(y),n.colors[S+1]=t.colorsAttribute.getY(y),n.colors[S+2]=t.colorsAttribute.getZ(y)),t.normals?.itemSize===3&&y<t.normals.count){s.set(t.normals.getX(y),t.normals.getY(y),t.normals.getZ(y)),t.normalMatrix&&s.applyMatrix3(t.normalMatrix).normalize();const w=t.convertYUpToCad?{x:s.x,y:-s.z,z:s.y}:s;n.normals[S]=w.x,n.normals[S+1]=w.y,n.normals[S+2]=w.z}n.surfaceEdgeBarycentric&&t.surfaceEdgeBarycentric?.itemSize===3&&y<t.surfaceEdgeBarycentric.count&&(n.surfaceEdgeBarycentric[S]=t.surfaceEdgeBarycentric.getX(y),n.surfaceEdgeBarycentric[S+1]=t.surfaceEdgeBarycentric.getY(y),n.surfaceEdgeBarycentric[S+2]=t.surfaceEdgeBarycentric.getZ(y)),n.surfaceEdgeClass&&t.surfaceEdgeClass?.itemSize===3&&y<t.surfaceEdgeClass.count&&(n.surfaceEdgeClass[S]=t.surfaceEdgeClass.getX(y),n.surfaceEdgeClass[S+1]=t.surfaceEdgeClass.getY(y),n.surfaceEdgeClass[S+2]=t.surfaceEdgeClass.getZ(y)),n.indices[r.indexOffset+c]=x,c+=1}const u=Math.floor(c/3),f={id:t.id,occurrenceId:t.occurrenceId,primitiveIndex:t.primitiveIndex,name:t.name,label:t.label,nodeType:"part",color:t.color,opacity:t.opacity,hasSourceColors:t.hasSourceColors,bounds:lF(o),vertexOffset:a,vertexCount:c,triangleOffset:l,triangleCount:u,edgeIndexOffset:0,edgeIndexCount:0};return r.vertexOffset+=c,r.indexOffset+=u*3,f}function Kse(e,t){const n=Array.isArray(t?.parser?.json?.materials)&&t.parser.json.materials.length>0,r=Array.isArray(t?.parser?.json?.materials)?t.parser.json.materials:[],o=Vse(e,t?.scene),i=!!t?.parser?.json?.extensions?.STEP_topology,s=!i&&!$se(t?.scene)&&!o,a=[],l=new Set;let c=0,u=0,f=!1;const m=new Map;t?.scene?.traverse?.(_=>{if(!_?.isMesh||!_.geometry)return;const I=uF(_)||String(_?.name||`glb:${a.length}`).trim(),R=m.get(I)||0,O=Array.isArray(_.geometry.groups)&&_.geometry.groups.length?_.geometry.groups:[null];O.forEach((F,V)=>{const $=Hse(e,_,F,Fse(_.material,F),n,o,s,R+V,a.length,{rawMaterial:zse(r,F),stepTopology:i});$&&($.colorsAttribute=_.geometry.getAttribute?.("color")||null,a.push($),c+=$.vertexCount,u+=$.triangleCount*3,f||=!!($.surfaceEdgeBarycentric&&$.surfaceEdgeClass),$.color&&l.add($.color.toLowerCase()))}),m.set(I,R+O.length)});const p=new Float32Array(c*3),b=new Uint32Array(u),y=new Float32Array(c*3),x=f?new Float32Array(c*3):null,S=f?new Uint8Array(c*3):null,E=[],C={vertices:p,indices:b,normals:y,surfaceEdgeBarycentric:x,surfaceEdgeClass:S,bounds:aF()},A=a.some(_=>_.colorsAttribute)?new Float32Array(c*3):null;C.colors=A;const N={vertexOffset:0,indexOffset:0};for(const _ of a)E.push(Wse(e,_,C,N));const w=A||new Float32Array(0);return{vertices:p,indices:b,normals:y,surfaceEdgeBarycentric:x||new Float32Array(0),surfaceEdgeClass:S||new Uint8Array(0),colors:w,edge_indices:new Uint32Array(0),bounds:lF(C.bounds),parts:E,has_source_colors:l.size>0,sourceColor:l.size===1?[...l][0]:""}}function qse(e,t,n){const r=new e;return t&&r.setMeshoptDecoder(t),new Promise((o,i)=>{r.parse(n,"",o,i)})}let k1=null;function Yse(){return k1||(k1=Jo(()=>import("./index-DtrvzEgX.js"),[]).then(async({MeshoptDecoder:e})=>(await e.ready,e)).catch(()=>null)),k1}async function Xse(e){const[t,{GLTFLoader:n},r]=await Promise.all([Jo(()=>import("./vendor-three-C9GQa7gb.js").then(i=>i.t),[]),Jo(()=>import("./vendor-three-C9GQa7gb.js").then(i=>i.w),[]),Yse()]),o=await qse(n,r,e);return Kse(t,o)}function Zse(e){e.computeBoundingBox();const t=e.boundingBox?.min,n=e.boundingBox?.max;return!t||!n?{min:[0,0,0],max:[0,0,0]}:{min:[t.x,t.y,t.z],max:[n.x,n.y,n.z]}}const Jse=Math.PI/4,Qse=1e4;function eae(e){return(e.getAttribute?.("position")?.count||0)/3<=Qse}function tae(e,t){const n=e.clone();n.deleteAttribute?.("normal");const r=typeof t=="function"&&eae(n)?t(n,Jse):n;return r!==n&&n.dispose?.(),r.getAttribute("normal")||r.computeVertexNormals?.(),r}function nae(e,t){const n=e.getIndex?.();if(n?.count>0)return new Uint32Array(n.array);const r=new Uint32Array(t);for(let o=0;o<t;o+=1)r[o]=o;return r}function rae(e,{toCreasedNormals:t}={}){const n=tae(e,t),r=e.getAttribute("position"),o=n.getAttribute("position"),i=n.getAttribute("normal");try{if(!r||r.itemSize!==3||!o||o.itemSize!==3)throw new Error("STL geometry is missing vertex positions");const s=o.count;return{vertices:new Float32Array(o.array),indices:nae(n,s),normals:i?.itemSize===3?new Float32Array(i.array):new Float32Array(o.array.length),colors:new Float32Array(0),edge_indices:new Uint32Array(0),bounds:Zse(e),parts:[],has_source_colors:!1,sourceColor:"",sourceFormat:"stl"}}finally{n.dispose?.()}}async function oae(e){const[{STLLoader:t},{toCreasedNormals:n}]=await Promise.all([Jo(()=>import("./vendor-three-C9GQa7gb.js").then(i=>i.x),[]),Jo(()=>import("./vendor-three-C9GQa7gb.js").then(i=>i.v),[])]),o=new t().parse(e);try{return rae(o,{toCreasedNormals:n})}finally{o.dispose?.()}}const iae=new Set(["default"]),sae=new Set(["#fafafb","#b6c4ce"]),bR=Object.freeze({rgb:[.4677837961,.5520114015,.6172065624],hex:"#b6c4ce"});function wx(e){if(!e?.length)return{min:[0,0,0],max:[0,0,0]};const t=[1/0,1/0,1/0],n=[-1/0,-1/0,-1/0];for(let r=0;r+2<e.length;r+=3){const o=Number(e[r]),i=Number(e[r+1]),s=Number(e[r+2]);!Number.isFinite(o)||!Number.isFinite(i)||!Number.isFinite(s)||(t[0]=Math.min(t[0],o),t[1]=Math.min(t[1],i),t[2]=Math.min(t[2],s),n[0]=Math.max(n[0],o),n[1]=Math.max(n[1],i),n[2]=Math.max(n[2],s))}return!t.every(Number.isFinite)||!n.every(Number.isFinite)?{min:[0,0,0],max:[0,0,0]}:{min:t,max:n}}function rC(e="",t=""){const n=String(e||"").trim().replace(/\\/g,"/");if(!n)return"";if(n.startsWith("/"))return n.replace(/^\/+/,"");const r=String(t||"").split("/");r.pop();const o=[...r,...n.split("/")],i=[];for(const s of o)if(!(!s||s===".")){if(s===".."){i.pop();continue}i.push(s)}return i.join("/")}function zf(e,t){return Array.from(e?.children||[]).filter(n=>n.localName===t)}function _f(e,t){return zf(e,t)[0]||null}function aae(e,t){if(!e?.attributes)return"";const n=e.getAttribute?.(t);if(n)return n;for(const r of Array.from(e.attributes))if(r.localName===t||String(r.name||"").split(":").pop()===t)return r.value||"";return""}function D1(e,t=0){const n=Number(e);return Number.isFinite(n)?n:t}function L1(e){const t=Number(e);return Number.isInteger(t)&&t>=0?t:-1}function mF(e,t){if(typeof DOMParser!="function")throw new Error("3MF XML parsing is unavailable in this environment");const n=new DOMParser().parseFromString(e,"application/xml");if(n.querySelector?.("parsererror"))throw new Error(`Invalid 3MF XML: ${t}`);return n}function xR(e,t){const n=String(t||"").trim().split(/\s+/).map(o=>Number(o));if(n.length!==12||n.some(o=>!Number.isFinite(o)))return null;const r=new e.Matrix4;return r.set(n[0],n[3],n[6],n[9],n[1],n[4],n[7],n[10],n[2],n[5],n[8],n[11],0,0,0,1),r}function lae(e){const t=[],n=_f(e,"vertices");for(const i of zf(n,"vertex"))t.push([D1(i.getAttribute("x")),D1(i.getAttribute("y")),D1(i.getAttribute("z"))]);const r=[],o=_f(e,"triangles");for(const i of zf(o,"triangle")){const s=[L1(i.getAttribute("v1")),L1(i.getAttribute("v2")),L1(i.getAttribute("v3"))];s.every(a=>a>=0)&&r.push(s)}return{vertices:t,triangles:r}}function cae(e,t,n){const r=mF(t,n),o=r.documentElement?.localName==="model"?r.documentElement:r.querySelector?.("model");if(!o)throw new Error(`3MF model part is missing a model node: ${n}`);const i=_f(o,"resources"),s=new Map;for(const c of zf(i,"object")){const u=String(c.getAttribute("id")||"").trim();if(!u)continue;const f=String(c.getAttribute("name")||c.getAttribute("partnumber")||"").trim(),m=_f(c,"mesh"),p=_f(c,"components"),b=[];for(const y of zf(p,"component")){const x=String(y.getAttribute("objectid")||"").trim();x&&b.push({objectId:x,path:rC(aae(y,"path"),n),transform:xR(e,y.getAttribute("transform"))})}s.set(u,{id:u,name:f,mesh:m?lae(m):null,components:b})}const a=[],l=_f(o,"build");for(const c of zf(l,"item")){const u=String(c.getAttribute("objectid")||"").trim();u&&a.push({objectId:u,transform:xR(e,c.getAttribute("transform"))})}return{path:n,objects:s,build:a}}function uae(e,t){const n=mF(e,t);return Array.from(n.querySelectorAll?.("Relationship")||[]).map(r=>({target:rC(r.getAttribute("Target")),type:String(r.getAttribute("Type")||"").trim()})).filter(r=>r.target)}function dae(e){if(!e?.color)return null;const t=`#${e.color.getHexString()}`.toLowerCase(),n=String(e.name||"").trim().toLowerCase();return iae.has(n)&&sae.has(t)?{rgb:bR.rgb,hex:bR.hex,generatedDefault:!0}:{rgb:[e.color.r,e.color.g,e.color.b],hex:t,generatedDefault:!1}}function fae(e,t){if(Array.isArray(e)){const n=Number.isInteger(t?.materialIndex)?t.materialIndex:0;return e[n]||e[0]||null}return e||null}function mae(e,t,n,r,o){const i=n?.geometry,s=i?.getAttribute?.("position");if(!s||s.itemSize!==3||s.count<=0)return;i.getAttribute("normal")||i.computeVertexNormals?.(),n.updateWorldMatrix?.(!0,!1);const a=n.matrixWorld||null,l=a?new e.Matrix3().getNormalMatrix(a):null,c=i.getAttribute("normal"),u=i.getIndex?.(),f=Math.max(0,Math.floor(Number(r?.start||0))),m=u?.count||s.count,p=Math.floor(Number(r?.count||m-f)),b=Math.max(0,Math.min(p,m-f)),y=b-b%3;if(y<=0)return;const x=dae(o),S=new e.Vector3,E=new e.Vector3,C=Math.floor(t.vertices.length/3),A=Math.floor(t.indices.length/3),N=[];for(let O=0;O<y;O+=1){const F=f+O,V=u?u.getX(F):F;if(V<0||V>=s.count)continue;const $=Math.floor(N.length/3);S.set(s.getX(V),s.getY(V),s.getZ(V)),a&&S.applyMatrix4(a),t.vertices.push(S.x,S.y,S.z),N.push(S.x,S.y,S.z),c?.itemSize===3&&V<c.count?(E.set(c.getX(V),c.getY(V),c.getZ(V)),l&&E.applyMatrix3(l).normalize(),t.normals.push(E.x,E.y,E.z)):t.normals.push(0,0,0),x&&t.colors.push(x.rgb[0],x.rgb[1],x.rgb[2]),t.indices.push(C+$)}const w=Math.floor(N.length/3),_=Math.floor(w/3);if(w<=0||_<=0)return;const I=String(n?.name||n?.parent?.name||`3mf:${t.parts.length}`).trim(),R=`3mf:${t.parts.length}`;t.parts.push({id:R,occurrenceId:R,name:I||R,label:I||R,nodeType:"part",color:x&&!x.generatedDefault?x.hex:"",bounds:wx(N),vertexOffset:C,vertexCount:w,triangleOffset:A,triangleCount:_,edgeIndexOffset:0,edgeIndexCount:0}),x?.hex&&!x.generatedDefault&&t.colorSet.add(x.hex.toLowerCase())}function pae(e,t){const n={vertices:[],indices:[],normals:[],colors:[],parts:[],colorSet:new Set};t?.updateWorldMatrix?.(!0,!0),t?.traverse?.(s=>{if(s?.isMesh&&s.geometry){const a=Array.isArray(s.geometry.groups)&&s.geometry.groups.length?s.geometry.groups:[null];for(const l of a)mae(e,n,s,l,fae(s.material,l))}});const r=new Float32Array(n.vertices),o=n.colors.length===n.vertices.length?new Float32Array(n.colors):new Float32Array(0),i=o.length===r.length&&o.length>0&&n.colorSet.size>0;return{vertices:r,indices:new Uint32Array(n.indices),normals:new Float32Array(n.normals),colors:i?o:new Float32Array(0),edge_indices:new Uint32Array(0),bounds:wx(r),parts:n.parts,has_source_colors:i,sourceColor:n.colorSet.size===1?[...n.colorSet][0]:""}}function hae(e,t,n,r,o){if(!n?.vertices?.length||!n?.triangles?.length)return;const i=Math.floor(t.vertices.length/3),s=Math.floor(t.indices.length/3),a=new e.Vector3,l=[new e.Vector3,new e.Vector3,new e.Vector3],c=new e.Vector3,u=new e.Vector3,f=new e.Vector3,m=[];for(const S of n.triangles){const E=S.map(C=>n.vertices[C]);if(!E.some(C=>!C)){for(let C=0;C<3;C+=1){const A=E[C];l[C].set(A[0],A[1],A[2]).applyMatrix4(r)}c.subVectors(l[1],l[0]),u.subVectors(l[2],l[0]),f.crossVectors(c,u).normalize(),(!Number.isFinite(f.x)||!Number.isFinite(f.y)||!Number.isFinite(f.z))&&f.set(0,0,0);for(const C of l){a.copy(C);const A=Math.floor(m.length/3);t.vertices.push(a.x,a.y,a.z),m.push(a.x,a.y,a.z),t.normals.push(f.x,f.y,f.z),t.indices.push(i+A)}}}const p=Math.floor(m.length/3),b=Math.floor(p/3);if(p<=0||b<=0)return;const y=`3mf:${t.parts.length}`,x=String(o||y).trim()||y;t.parts.push({id:y,occurrenceId:y,name:x,label:x,nodeType:"part",color:"",bounds:wx(m),vertexOffset:i,vertexCount:p,triangleOffset:s,triangleCount:b,edgeIndexOffset:0,edgeIndexCount:0})}function gae(e,t){for(const[n,r]of e)if(r.objects.has(t))return{modelPath:n,objectData:r.objects.get(t)};return null}function pF(e,t,n,r,o,i,s=[]){const a=`${r}#${o}`;if(s.includes(a))throw new Error(`3MF component cycle detected at ${a}`);let c=n.get(r)?.objects?.get(o)||null,u=r;if(!c){const f=gae(n,o);c=f?.objectData||null,u=f?.modelPath||r}if(!c)throw new Error(`3MF object ${o} is missing from ${r}`);if(c.mesh){hae(e,t,c.mesh,i,c.name||`${u}#${c.id}`);return}for(const f of c.components||[]){const m=f.path||u,p=i.clone();f.transform&&p.multiply(f.transform),pF(e,t,n,m,f.objectId,p,[...s,a])}}function yae(e){const t=new Float32Array(e.vertices);return{vertices:t,indices:new Uint32Array(e.indices),normals:new Float32Array(e.normals),colors:new Float32Array(0),edge_indices:new Uint32Array(0),bounds:wx(t),parts:e.parts,has_source_colors:!1,sourceColor:""}}async function bae(e,t){const n=await Jo(()=>import("./vendor-three-C9GQa7gb.js").then(x=>x.y),[]),r=new TextDecoder,o=n.unzipSync(new Uint8Array(t)),i=x=>{const S=rC(x),E=o[S];return E?r.decode(E):""},s=Object.keys(o).filter(x=>/^3D\/.*\.model$/i.test(x)).sort((x,S)=>{const E=/\/3dmodel\.model$/i.test(x)?1:0,C=/\/3dmodel\.model$/i.test(S)?1:0;return E-C||x.localeCompare(S)});if(!s.length)throw new Error("3MF package does not contain any 3D model parts");const a=new Map;for(const x of s){const S=i(x);S&&a.set(x,cae(e,S,x))}const l=i("_rels/.rels"),c=l?uae(l,"_rels/.rels").find(x=>/\.model$/i.test(x.target))?.target:"",u=a.has(c)?c:s.find(x=>a.get(x)?.build?.length)||s[0],f=a.get(u);if(!f)throw new Error("3MF package does not contain a readable build model");const m=new e.Matrix4,p={vertices:[],indices:[],normals:[],parts:[]},b=f.build.length?f.build:Array.from(f.objects.keys()).map(x=>({objectId:x,transform:null}));for(const x of b){const S=x.transform?x.transform.clone():m.clone();pF(e,p,a,u,x.objectId,S)}const y=yae(p);if(!y.indices.length)throw new Error("3MF package did not produce any triangles");return y}async function xae(e){const[t,{ThreeMFLoader:n}]=await Promise.all([Jo(()=>import("./vendor-three-C9GQa7gb.js").then(o=>o.t),[]),Jo(()=>import("./vendor-three-C9GQa7gb.js").then(o=>o._),[])]),r=new n;try{return pae(t,r.parse(e))}catch(o){try{return await bae(t,e)}catch{throw o}}}let dl=null,SR=1;const am=new Map;function ER(){if(typeof DOMException=="function")return new DOMException("The operation was aborted.","AbortError");const e=new Error("The operation was aborted.");return e.name="AbortError",e}function Sae(){return typeof Worker=="function"&&typeof URL=="function"}function Eae(e){for(const t of am.values())t.cleanup(),t.reject(e);am.clear()}function wae(){if(!Sae())return null;if(dl)return dl;try{dl=new Worker(new URL("/assets/glbMeshWorker-Dq88-fPX.js",import.meta.url),{type:"module"})}catch{return dl=null,null}return dl.addEventListener("message",e=>{const t=e.data||{},n=am.get(t.id);if(!n)return;if(am.delete(t.id),n.cleanup(),t.ok){n.resolve(t.meshData);return}const r=new Error(t.error?.message||"Failed to load GLB mesh in worker.");r.name=t.error?.name||"Error",n.reject(r)}),dl.addEventListener("error",e=>{const t=new Error(e?.message||"GLB mesh worker failed.");Eae(t),dl?.terminate?.(),dl=null}),dl}function vae(e,{signal:t}={}){const n=wae();if(!n)return null;if(t?.aborted)return Promise.reject(ER());const r=SR;return SR+=1,new Promise((o,i)=>{const s=()=>{t?.removeEventListener?.("abort",a)},a=()=>{am.delete(r),s(),n.postMessage({type:"cancel",id:r}),i(ER())};am.set(r,{resolve:o,reject:i,cleanup:s}),t?.addEventListener?.("abort",a,{once:!0}),n.postMessage({type:"loadGlb",id:r,url:e})})}let fl=null,wR=1;const lm=new Map;function vR(){if(typeof DOMException=="function")return new DOMException("The operation was aborted.","AbortError");const e=new Error("The operation was aborted.");return e.name="AbortError",e}function Aae(){return typeof Worker=="function"&&typeof URL=="function"}function Cae(e){for(const t of lm.values())t.cleanup(),t.reject(e);lm.clear()}function Mae(){if(!Aae())return null;if(fl)return fl;try{fl=new Worker(new URL("/assets/stlMeshWorker-FzV_wvq8.js",import.meta.url),{type:"module"})}catch{return fl=null,null}return fl.addEventListener("message",e=>{const t=e.data||{},n=lm.get(t.id);if(!n)return;if(lm.delete(t.id),n.cleanup(),t.ok){n.resolve(t.meshData);return}const r=new Error(t.error?.message||"Failed to load STL mesh in worker.");r.name=t.error?.name||"Error",n.reject(r)}),fl.addEventListener("error",e=>{const t=new Error(e?.message||"STL mesh worker failed.");Cae(t),fl?.terminate?.(),fl=null}),fl}function Iae(e,{signal:t}={}){const n=Mae();if(!n)return null;if(t?.aborted)return Promise.reject(vR());const r=wR;return wR+=1,new Promise((o,i)=>{const s=()=>{t?.removeEventListener?.("abort",a)},a=()=>{lm.delete(r),s(),n.postMessage({type:"cancel",id:r}),i(vR())};lm.set(r,{resolve:o,reject:i,cleanup:s}),t?.addEventListener?.("abort",a,{once:!0}),n.postMessage({type:"loadStl",id:r,url:e})})}let Vw="";const U0=new WeakMap;class Nae extends Error{constructor(t){super(t),this.name="RenderAssetSourceScopeError"}}function Tae(e){let t=U0.get(e);return t||(t=new Map,U0.set(e,t)),t}function hF(e,t,{occupied:n=e.has(t)}={}){const r=Tae(e),o=r.get(t);if(!n||o===void 0){r.set(t,Vw);return}if(o!==Vw)throw new Nae(`Render asset ${t} is cached for source ${o||"(unset)"} but was requested for (unset); refusing to reuse it. Two distinct sources produced the same render-asset URL.`)}function _ae(e,t){const n=U0.get(e)?.get(t);return n===void 0||n===Vw}function gF(e,t){U0.get(e)?.delete(t)}function fg(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function oC(e,t){return new Error(`Failed to fetch ${e}: ${t.status} ${t.statusText}`)}const AR=new Map,CR=new Map,Ap=new Map,Cp=new Map,$w=new Map,Gw=new Map,Uw=new Map,Hw=new Map,Ww=new Map,Rae=new Map,Kw=new Map,qw=new Map,Yw=new Map,Pae="version https://git-lfs.github.com/spec/v1",Oae=512;async function kae(e,{signal:t}={}){const n=await fetch(e,{signal:t});if(!n.ok)throw oC(e,n);return n.json()}async function Dae(e,{signal:t}={}){const n=await fetch(e,{signal:t});if(!n.ok)throw oC(e,n);return n.text()}async function Lae(e,{signal:t}={}){const n=await fetch(e,{signal:t});if(!n.ok)throw oC(e,n);return n.arrayBuffer()}async function Wa(e,t,n,{cachePending:r=!0}={}){if(!t)throw new Error("Missing asset cache key");if(hF(e,t),e.has(t)){const i=e.get(t);if(r||typeof i?.then!="function")return i}if(!r){const i=await n();return e.set(t,i),i}let o;return o=n().catch(i=>{throw e.get(t)===o&&(e.delete(t),gF(e,t)),i}),e.set(t,o),o}function Ka(e,t){if(!_ae(e,t))return null;const n=e.get(t);return n&&typeof n.then!="function"?n:null}function xa(e,t,n){return e.set(t,n),n}function Pu(e){return e instanceof DOMException&&e.name==="AbortError"}function Fae(e){const t=Number(e?.byteLength||0);if(!Number.isFinite(t)||t<=0)return null;const n=new TextDecoder("utf-8").decode(new Uint8Array(e,0,Math.min(t,Oae)));if(!n.startsWith(Pae))return null;const r=n.match(/^oid sha256:([0-9a-f]{64})\r?$/m)?.[1]||"",o=n.match(/^size ([0-9]+)\r?$/m)?.[1]||"",i=o?Number(o):null;return{oid:r,size:Number.isSafeInteger(i)?i:null}}function jae(e){const t=String(e||"").trim();if(!t)return"(unknown)";try{const n=typeof window<"u"&&window.location?.href?window.location.href:"http://localhost/",r=new URL(t,n);return decodeURIComponent(r.pathname||t)}catch{return t.split(/[?#]/)[0]||t}}function mg(e,t,n="Render asset"){const r=Fae(e);if(!r)return;const o=r.size!==null?` Expected LFS object size: ${r.size} bytes.`:"",i=r.oid?` sha256:${r.oid}.`:"";throw new Error(`${n} is a Git LFS pointer, not downloaded mesh data: ${jae(t)}.${i}${o} Fetch the LFS object for this file and reload the viewer.`)}function Xw(){if(typeof DOMException=="function")return new DOMException("The operation was aborted.","AbortError");const e=new Error("The operation was aborted.");return e.name="AbortError",e}function zae(e,t){return t?t.aborted?Promise.reject(Xw()):new Promise((n,r)=>{const o=()=>{t.removeEventListener?.("abort",i)},i=()=>{o(),r(Xw())};t.addEventListener?.("abort",i,{once:!0}),e.then(s=>{o(),n(s)},s=>{o(),r(s)})}):e}async function MR(e,{signal:t}={}){const n=await Wa(AR,e,()=>kae(e,{signal:t}),{cachePending:!t});return xa(AR,e,n)}async function iC(e,{signal:t}={}){const n=await Wa(CR,e,()=>Dae(e,{signal:t}),{cachePending:!t});return xa(CR,e,n)}async function pg(e,{signal:t}={}){if(!e)throw new Error("Missing asset cache key");if(t?.aborted)throw Xw();hF(Ap,e,{occupied:Ap.has(e)||Cp.has(e)});const n=Ka(Ap,e);if(n)return n;let r=Cp.get(e);return r||(r=Lae(e).then(o=>xa(Ap,e,o)).catch(o=>{throw gF(Ap,e),o}).finally(()=>{Cp.get(e)===r&&Cp.delete(e)}),Cp.set(e,r)),zae(r,t)}async function yF(e,{signal:t,preferWorker:n=!1}={}){const r=await Wa($w,e,async()=>{if(n){const i=vae(e,{signal:t});if(i)try{return await i}catch(s){if(t?.aborted||Pu(s))throw s}}const o=await pg(e,{signal:t});return mg(o,e,"GLB render asset"),Xse(o)},{cachePending:!t});return xa($w,e,r)}function bF(e){return Ka($w,e)}async function Bae(e,{signal:t}={}){const n=await Wa(Gw,e,async()=>{const r=Iae(e,{signal:t});if(r)try{return await r}catch(i){if(t?.aborted||Pu(i))throw i}const o=await pg(e,{signal:t});return mg(o,e,"STL render asset"),oae(o)},{cachePending:!t});return xa(Gw,e,n)}function Vae(e){return Ka(Gw,e)}async function $ae(e,{signal:t}={}){const n=await Wa(Uw,e,async()=>{const r=await pg(e,{signal:t});return mg(r,e,"3MF render asset"),xae(r)},{cachePending:!t});return xa(Uw,e,n)}function Gae(e){return Ka(Uw,e)}function xF(e){const t=new DataView(e);if(t.byteLength<20||t.getUint32(0,!0)!==1179937895||t.getUint32(4,!0)!==2)throw new Error("Invalid GLB topology container");const n=Math.min(t.getUint32(8,!0),t.byteLength);let r=12,o=null,i=null;for(;r+8<=n;){const s=t.getUint32(r,!0),a=t.getUint32(r+4,!0);if(r+=8,r+s>n)throw new Error("Invalid GLB chunk length");a===1313821514?o=JSON.parse(new TextDecoder("utf-8").decode(e.slice(r,r+s)).trim()):a===5130562&&(i={buffer:e,byteOffset:r,byteLength:s}),r+=s}if(!o||!i)throw new Error("GLB topology requires JSON and BIN chunks");return{json:o,bin:i}}function SF(e,t,n){const r=Number(n),o=Array.isArray(e?.bufferViews)?e.bufferViews[r]:null;if(!Number.isInteger(r)||!o||Number(o.buffer||0)!==0)return null;const i=t.byteOffset+Number(o.byteOffset||0),s=Number(o.byteLength||0);return!Number.isFinite(i)||!Number.isFinite(s)||s<0||i<t.byteOffset||i+s>t.byteOffset+t.byteLength?null:{byteOffset:i,byteLength:s}}function Uae(e,t){if(!fg(t))return null;const n=SF(e.json,e.bin,t.bufferView);if(!n)return null;const r=Number(t.count||0),o=Number(t.byteOffset||0);if(!Number.isFinite(r)||r<0||!Number.isFinite(o)||o<0)return null;const i=n.byteOffset+o;return t.dtype==="float32"?new Float32Array(e.bin.buffer,i,r):t.dtype==="uint32"?new Uint32Array(e.bin.buffer,i,r):null}function EF(e,t){const n=e?.buffers?.views;if(!fg(n))return{};const r={};for(const[o,i]of Object.entries(n)){const s=Uae(t,i);s&&(r[o]=s)}return r}function Hae(e){const t=Array.isArray(e?.json?.meshes)?e.json.meshes:[];let n=0;for(const r of t)for(const o of Array.isArray(r?.primitives)?r.primitives:[]){n+=1;const i=o?.attributes||{};if(i[iF]===void 0||i[sF]===void 0)return!1}return n>0}function wF(e){const t=e.json?.extensions?.[La];if(!fg(t))throw new Error(`GLB is missing ${La}`);if(!nC(t.schemaVersion))throw new Error(`Unsupported ${La} schemaVersion ${t.schemaVersion||"unknown"}; expected ${Ex}`);if(t.edgeView===void 0||t.edgeView===null)throw new Error(`${La} edgeView is not available`);if(!Hae(e))throw new Error(`${La} requires ${iF} and ${sF} on every STEP mesh primitive`);return t}function vF(e,t,n="utf-8"){const r=SF(e.json,e.bin,t);if(!r)return null;const o=new Uint8Array(e.bin.buffer,r.byteOffset,r.byteLength);return JSON.parse(new TextDecoder(String(n||"utf-8")).decode(o))}function Wae(e){const t=xF(e),n=wF(t),r=vF(t,n.selectorView,n.encoding);if(!fg(r))throw new Error(`${La} selectorView is not available`);if(!nC(r.schemaVersion))throw new Error(`Unsupported ${La} selector schemaVersion ${r.schemaVersion||"unknown"}; expected ${Ex}`);if(r?.buffers?.littleEndian===!1)throw new Error("Big-endian selector buffers are not supported");return{manifest:r,buffers:EF(r,t)}}function Kae(e){const t=xF(e),n=wF(t),r=vF(t,n.edgeView,n.encoding);if(!fg(r))throw new Error(`${La} edgeView is not available`);if(!nC(r.schemaVersion))throw new Error(`Unsupported ${La} edgeView schemaVersion ${r.schemaVersion||"unknown"}; expected ${Ex}`);if(String(r.profile||"")!=="surface-edges")throw new Error(`${La} edgeView has unsupported profile ${r.profile||"unknown"}`);if(r?.buffers?.littleEndian===!1)throw new Error("Big-endian edgeView buffers are not supported");return{manifest:r,buffers:EF(r,t)}}function qae(e){return Ka(Rae,e)}async function IR(e,{signal:t}={}){const n=e,r=await Wa(Hw,n,async()=>{const o=await pg(e,{signal:t});return mg(o,e,"GLB selector topology asset"),Wae(o)},{cachePending:!t});return xa(Hw,n,r)}function Yae(e){return Ka(Hw,e)}async function Xae(e,{signal:t}={}){const n=e,r=await Wa(Ww,n,async()=>{const o=await pg(e,{signal:t});return mg(o,e,"GLB display edge topology asset"),Kae(o)},{cachePending:!t});return xa(Ww,n,r)}function Zae(e){return Ka(Ww,e)}function AF(e){return String(e||"")}async function CF(e,{signal:t}={}){const n=AF(e),r=await Wa(Kw,n,async()=>{const[o,{parseUrdf:i}]=await Promise.all([iC(e,{signal:t}),Jo(()=>import("./parseUrdf-lbXYJY8h.js"),__vite__mapDeps([0,1,2,3,4]))]);return i(o,{sourceUrl:e})},{cachePending:!t});return xa(Kw,n,r)}function Jae(e){return Ka(Kw,AF(e))}function MF(e,t=""){return[e,t].filter(Boolean).join("::")}async function Qae(e,{signal:t,urdfUrl:n=""}={}){const r=MF(e,n),o=await Wa(qw,r,async()=>{const[i,s,{parseSrdf:a,motionFromSrdf:l}]=await Promise.all([iC(e,{signal:t}),CF(n,{signal:t}),Jo(()=>import("./parseSrdf-op4wxM2U.js"),[])]),c=a(i,{sourceUrl:e,urdfData:s});return{srdfData:c,urdfData:{...s,motion:l(c),srdf:c}}},{cachePending:!t});return xa(qw,r,o)}function ele(e,{urdfUrl:t=""}={}){return Ka(qw,MF(e,t))}function IF(e){return String(e||"")}async function tle(e,{signal:t}={}){const n=IF(e),r=await Wa(Yw,n,async()=>{const[o,{parseSdf:i}]=await Promise.all([iC(e,{signal:t}),Jo(()=>import("./parseSdf-BBt1QL9V.js"),__vite__mapDeps([5,1,2,3,4]))]);return i(o,{sourceUrl:e})},{cachePending:!t});return xa(Yw,n,r)}function nle(e){return Ka(Yw,IF(e))}const Au=new Map;function NF(e){return String(e||"").trim()}function rle(e){const t=String(e||"").trim();if(!t)throw new Error("Missing implicit CAD module URL");return t}async function ole(e,{signal:t}={}){const n=NF(e);if(!n)throw new Error("Missing implicit CAD module URL");if(t?.aborted)throw new DOMException("The operation was aborted.","AbortError");if(!Au.has(n)){let o;o=import(rle(n)).then(i=>{const s=Sm(i,{sourceUrl:n});return Au.get(n)===o&&Au.set(n,s),s}).catch(i=>{throw Au.delete(n),i}),Au.set(n,o)}const r=Au.get(n);return!r||typeof r.then!="function"||!t?r:new Promise((o,i)=>{const s=()=>{t.removeEventListener?.("abort",s),i(new DOMException("The operation was aborted.","AbortError"))};if(t.aborted){s();return}t.addEventListener?.("abort",s,{once:!0}),r.then(a=>{t.removeEventListener?.("abort",s),o(a)},a=>{t.removeEventListener?.("abort",s),i(a)})})}function ile(e){const t=Au.get(NF(e));return t&&typeof t.then!="function"?t:null}const H0=Object.freeze([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]);function sle(e){return!Array.isArray(e)||e.length!==16?[...H0]:e.map((t,n)=>Number.isFinite(Number(t))?Number(t):H0[n])}function ale(e){const t=e?.assembly?.root;return t&&typeof t=="object"?t:null}function Bb(e){if(!Array.isArray(e)||e.length<3)return null;const t=e.slice(0,3).map(n=>Number(n));return t.every(n=>Number.isFinite(n))?t:null}function lle(e){const t=Math.min(1,Math.max(0,Number(e)||0)),n=t<=.0031308?t*12.92:1.055*Math.pow(t,1/2.4)-.055;return Math.round(Math.min(1,Math.max(0,n))*255)}function cle(e){return!Array.isArray(e)||e.length<3?null:`#${e.slice(0,3).map(n=>lle(n).toString(16).padStart(2,"0")).join("")}`}function NR(e){if(!e||typeof e!="object")return null;const t={part:String(e.part||"").trim(),frame:String(e.frame||"").trim()},n=Bb(e.position),r=Bb(e.orientation);n&&(t.position=n),r&&(t.orientation=r);const o=e.axes&&typeof e.axes=="object"?e.axes:null;if(o){const i={};for(const s of["x","y","z"]){const a=Bb(o[s]);a&&(i[s]=a)}Object.keys(i).length&&(t.axes=i)}return t.position||t.orientation||t.part||t.frame?t:null}function ule(e){const t=e?.assemblyMates;return Array.isArray(t)?t.filter(n=>n&&typeof n=="object").map((n,r)=>{const o=String(n.id||`m${r+1}`).trim()||`m${r+1}`;return{id:o,label:String(n.label||o).trim()||o,sourceLabel:String(n.sourceLabel||n.name||"").trim(),type:String(n.type||n.relation||"mate").trim(),relation:String(n.relation||n.type||"mate").trim(),fixed:String(n.fixed||"").trim(),moving:String(n.moving||"").trim(),parameters:n.parameters&&typeof n.parameters=="object"?n.parameters:{},fixedEndpoint:NR(n.fixedEndpoint),movingEndpoint:NR(n.movingEndpoint)}}):[]}function TF(e){const t=[],n=e?[e]:[];for(;n.length;){const r=n.pop(),o=Array.isArray(r?.children)?r.children:[];if(o.length){for(let i=o.length-1;i>=0;i-=1)n.push(o[i]);continue}String(r?.nodeType||"").trim()==="part"&&t.push(r)}return t}function TR(e){const t=[],n=e?[e]:[];for(;n.length;){const r=n.pop();t.push(r);const o=Array.isArray(r?.children)?r.children:[];for(let i=o.length-1;i>=0;i-=1)n.push(o[i])}return t}function Oc(e,t){const n=String(t||"").trim();if(!e||!n||n==="root")return e||null;const r=[e];for(;r.length;){const o=r.pop();if(String(o?.id||"").trim()===n)return o;const i=Array.isArray(o?.children)?o.children:[];for(let s=i.length-1;s>=0;s-=1)r.push(i[s])}return null}function dle(e){return String(e?.id||"").trim()||"root"}function qh(e){return TF(e).map(t=>String(t?.id||"").trim()).filter(Boolean)}function fle(e){const t=new Map;for(const n of Array.isArray(e)?e:[]){const r=String(n?.id||"").trim();if(!r)continue;const o=Array.isArray(n?.leafPartIds)&&n.leafPartIds.length?n.leafPartIds:qh(n);for(const i of o){const s=String(i||"").trim();s&&t.set(s,r)}}return t}function mle(e,{pickPartIdMap:t,validLeafPartIds:n=[]}={}){const r=String(e||"").trim();if(!r)return"";const o=n instanceof Set?n:new Set((Array.isArray(n)?n:[]).map(s=>String(s||"").trim()).filter(Boolean)),i=t instanceof Map?String(t.get(r)||"").trim():"";return i||(o.size&&o.has(r)?r:i||r)}function ple(e,{assemblyPartMap:t,fallbackPartId:n="",validLeafPartIds:r=[]}={}){const o=String(e||"").trim(),i=r instanceof Set?r:new Set((Array.isArray(r)?r:[]).map(c=>String(c||"").trim()).filter(Boolean)),s=c=>!i.size||i.has(c),a=c=>{const u=new Set,f=[];for(const m of Array.isArray(c)?c:[]){const p=String(m||"").trim();!p||u.has(p)||!s(p)||(u.add(p),f.push(p))}return f};if(o){const c=t instanceof Map&&t.get(o)||null,u=a(c?qh(c):[o]);if(u.length)return u}const l=String(n||"").trim();return a([l])}function _R(e){return String(e?.occurrenceId||e?.id||"").trim()}function F1(e,t){return Math.max(0,Math.floor(Number(e?.[t])||0))}function hle(e,t,n,r,o,i){e[t]=n[0]*r+n[1]*o+n[2]*i+n[3],e[t+1]=n[4]*r+n[5]*o+n[6]*i+n[7],e[t+2]=n[8]*r+n[9]*o+n[10]*i+n[11]}function gle(e){return e[0]*(e[5]*e[10]-e[6]*e[9])-e[1]*(e[4]*e[10]-e[6]*e[8])+e[2]*(e[4]*e[9]-e[5]*e[8])}function yle(e,t){return e?typeof e.get=="function"?e.get(t)||null:e[t]||null:null}function ble(e,t){if(!e||!Array.isArray(e.min)||!Array.isArray(e.max)||!Array.isArray(t)||t.length!==16)return e||null;const[n,r,o]=e.min,[i,s,a]=e.max,l=[[n,r,o],[i,r,o],[n,s,o],[i,s,o],[n,r,a],[i,r,a],[n,s,a],[i,s,a]],c=[1/0,1/0,1/0],u=[-1/0,-1/0,-1/0],f=[0,0,0];for(const[m,p,b]of l){hle(f,0,t,m,p,b);for(let y=0;y<3;y+=1)f[y]<c[y]&&(c[y]=f[y]),f[y]>u[y]&&(u[y]=f[y])}return Number.isFinite(c[0])?{min:c,max:u}:e||null}function xle(e,t){const n=Array.isArray(e?.occurrences)?e.occurrences:[];if(!n.length)throw new Error("Assembly package descriptor has no occurrences");const r=[],o=[];for(const m of n){const p=String(m?.component||"").trim(),b=yle(t,p),y=Array.isArray(b?.parts)?b.parts:[];if(!b||!y.length){p&&o.push(p);continue}r.push({occurrence:m,componentMeshData:b,sourceParts:y})}if(!r.length)throw new Error("Assembly package matched no renderable component GLBs");const i=new Map;for(const m of r){const p=String(m.occurrence?.component||"").trim();p&&!i.has(p)&&i.set(p,m.componentMeshData)}let s=0,a=0;for(const m of i.values())s+=Math.floor((m?.vertices?.length||0)/3),a+=m?.indices?.length||0;const l=new Float32Array(s*3),c=new Float32Array(s*3),u=new Uint32Array(a);{let m=0,p=0;for(const b of i.values()){const y=b?.vertices||new Float32Array(0),x=b?.normals||new Float32Array(0),S=b?.indices||new Uint32Array(0);l.set(y,m*3),x.length===y.length&&c.set(x,m*3);for(let E=0;E<S.length;E+=1)u[p+E]=S[E]+m;m+=Math.floor(y.length/3),p+=S.length}}const f=[];for(const{occurrence:m,componentMeshData:p,sourceParts:b}of r){const y=sle(m?.transform),x=gle(y)<0,S=String(m?.id||"").trim(),E=String(m?.component||"").trim(),C=Bb(m?.color),A=m?.material&&typeof m.material=="object"&&!Array.isArray(m.material)?m.material:null,N=m?.color,w=Array.isArray(N)&&N.length>=4&&Number.isFinite(Number(N[3]))?Number(N[3]):null,_=w!==null&&w<.999?w:A&&Number.isFinite(Number(A.opacity))?Number(A.opacity):null,I=p?.vertices||new Float32Array(0),R=p?.colors||new Float32Array(0),O=R.length===I.length&&R.length>0,F=!C&&O,V=b.map(U=>({occurrenceId:S||_R(U),primitiveIndex:F1(U,"primitiveIndex"),triangleOffset:F1(U,"triangleOffset"),triangleCount:F1(U,"triangleCount")})),$=ble(p?.bounds,y),K=String(m?.name||S||E||_R(b[0])).trim();f.push({id:S||E,occurrenceId:S||E,componentId:E,name:K,label:K,nodeType:"part",transform:y,mirrored:x,bounds:$,sourceBounds:$,color:C&&cle(C)||b[0]?.color||null,material:A,opacity:_!==null?_:void 0,hasSourceColors:F,sourceMesh:p,sourceMeshKey:`${E}:${F?"src":"flat"}`,vertexCount:Math.floor(I.length/3),triangleCount:Math.floor((p?.indices?.length||0)/3),sourcePartRanges:V,edgeIndexOffset:0,edgeIndexCount:0})}return{vertices:l,indices:u,normals:c,colors:new Float32Array(0),surfaceEdgeBarycentric:new Float32Array(0),surfaceEdgeClass:new Float32Array(0),edge_indices:new Uint32Array(0),parts:f,assemblyRoot:Sle(e,f),bounds:Qu(f.map(m=>m.bounds)),assemblyMates:ule(e),missingComponentIds:o,partTransformsBaked:!1,has_source_colors:!1}}function _F(e,t){const r=(Array.isArray(e?.children)?e.children:[]).map(u=>_F(u,t)),o=String(e?.nodeType||"").trim()||(r.length?"subassembly":"part"),i=String(e?.id||"").trim(),s=String(e?.name||e?.label||i).trim(),a=Array.isArray(e?.leafPartIds)?e.leafPartIds.map(u=>String(u||"").trim()).filter(Boolean):[],l=a.length?a:r.length?r.flatMap(u=>u.leafPartIds):i?[i]:[],c={id:i,occurrenceId:i,name:s,label:s,nodeType:o,leafPartIds:l,children:r};if(o==="part"){const u=t.get(i);u&&(c.componentId=u.componentId,c.transform=u.transform,c.bounds=u.bounds,c.sourceBounds=u.sourceBounds,c.color=u.color)}else c.transform=[...H0],c.bounds=Qu(r.map(u=>u.bounds));return c}function Sle(e,t){if(String(e?.entryKind||"").trim()==="part")return null;const n=Array.isArray(t)?t:[],r=new Map(n.map(a=>[String(a.id),a])),o=e?.assembly?.root;if(o&&typeof o=="object")return _F(o,r);if(!n.length)return null;const i=n.map(a=>({id:a.id,occurrenceId:a.occurrenceId,componentId:a.componentId,name:a.name,label:a.label,nodeType:"part",transform:a.transform,bounds:a.bounds,sourceBounds:a.sourceBounds,color:a.color,leafPartIds:[a.id],children:[]})),s=String(e?.rootName||"").trim()||"assembly";return{id:s,name:s,label:s,nodeType:"assembly",transform:[...H0],bounds:Qu(i.map(a=>a.bounds)),leafPartIds:i.map(a=>a.id),children:i}}async function Zw(e,t,n){const r=Array.isArray(e)?e:[],o=Math.min(r.length,Math.max(1,Math.floor(Number(t)||1))),i=new Array(r.length);let s=0;async function a(){for(;s<r.length;){const l=s;s+=1,i[l]=await n(r[l],l)}}return await Promise.all(Array.from({length:o},()=>a())),i}const Ele="http://cad-viewer.local";function wle(e,t){const n=String(e).split("/");for(const o of String(t).split("/"))if(!(o===""||o===".")){if(o===".."){n.length>1&&n.pop();continue}n.push(o)}const r=n.join("/");return r.startsWith("/")?r:`/${r}`}function ub(e,t){const n=String(e||"").trim(),r=String(t||"").trim();if(!n||!r)return"";const o=new URL(n,Ele),i=o.searchParams.get("file");return i?(o.searchParams.set("file",wle(i,r)),`${o.pathname}${o.search}`):""}function RR(e){return e===Q.STL||e===Q.THREE_MF||e===Q.GLB?e:""}function vle(e){const t=RR(nT(e,{baseUrl:typeof window<"u"?window.location.href:""}));if(t)return t;try{const n=new URL(e,typeof window<"u"?window.location.href:"http://localhost/");for(const r of["file","path"]){const o=n.searchParams.get(r),i=RR(nT(o||"",{baseUrl:n.href}));if(i)return i}}catch{}return""}function Ale(e){return e===Q.STL||e===Q.THREE_MF||e===Q.GLB?e:Q.GLB}function RF(e,{fallback:t=Q.GLB}={}){return vle(e)||Ale(t)}function PF(e,t={}){const n=RF(e,t);return n===Q.STL?Vae(e):n===Q.THREE_MF?Gae(e):bF(e)}async function OF(e,t={}){const n=RF(e,t);return n===Q.STL?Bae(e,t):n===Q.THREE_MF?$ae(e,t):yF(e,t)}const kF=32*1024*1024,Cle=1e6,Mle=160*1024*1024;function Ile(e){return ArrayBuffer.isView(e)&&Number(e.byteLength)||0}function DF(e){return Nr(e)===Q.STEP?JD(e,"glb"):0}function Nle(e){return DF(e)>0}function LF(e){return DF(e)>=kF}function Tle(e){return Nr(e)===Q.GLB&&Nee(e)>=kF}function _le(e){return LF(e)||Tle(e)}function Rle(e){const t=Math.floor((Number(e?.indices?.length)||0)/3),n=Array.isArray(e?.parts)?e.parts.reduce((r,o)=>{const i=Number(o?.triangleCount);return r+(Number.isFinite(i)&&i>0?i:0)},0):0;return{triangleCount:Math.max(t,n),typedArrayBytes:[e?.vertices,e?.indices,e?.normals,e?.colors,e?.edge_indices,e?.surfaceEdgeBarycentric,e?.surfaceEdgeClass,e?.guide_line_segments].reduce((r,o)=>r+Ile(o),0)}}function Ple(e){const t=Rle(e);return t.triangleCount>=Cle||t.typedArrayBytes>=Mle}function FF(e){const t=At(e),n=Tee(e);return t&&n?`${t}:${n}`:""}function Ole(e){return Array.isArray(e)?e.filter(t=>t&&typeof t=="object").map(t=>({...t,id:String(t.id||"").trim(),label:String(t.label||t.id||"Reference").trim()||"Reference",summary:String(t.summary||t.shortSummary||"").trim(),shortSummary:String(t.shortSummary||t.summary||"").trim(),copyText:String(t.copyText||"").trim(),partId:String(t.partId||"").trim(),entityType:String(t.entityType||"").trim(),selectorType:String(t.selectorType||"").trim(),normalizedSelector:String(t.normalizedSelector||"").trim(),displaySelector:String(t.displaySelector||"").trim()})).filter(t=>t.id):[]}function kle(e,t=null,{copyCadPath:n,partId:r="",transform:o=null,remapOccurrenceId:i="",remapOccurrencePrefix:s=null,selectorRuntime:a=null,loadedTopologyKey:l=""}={}){const c=a||WO(t,{copyCadPath:n||vx(e),partId:r,transform:o,remapOccurrenceId:i,remapOccurrencePrefix:s}),u=Ole(c.references);return{fileRef:At(e),kind:e.kind,referenceHash:FF(e),stepRelPath:At(e),stepHash:String(c.stepHash||e?.hash||""),counts:{faces:Number(c.faces?.length||0),edges:Number(c.edges?.length||0)},parts:[],selectorRuntime:c,references:u,loadedTopologyKey:l,disabledReason:""}}function Dle(e,t,{singleComponentPart:n=!1}={}){const r=Array.isArray(e?.occurrences)?e.occurrences:[],o=new Set((Array.isArray(t)?t:[]).map(c=>String(c||"").trim()).filter(Boolean)),i=n?r:r.filter(c=>o.has(String(c?.id||"").trim())),s=[],a=new Set;for(const c of i){const u=String(c?.component||"").trim();u&&!a.has(u)&&(a.add(u),s.push(u))}const l=n?"*":[...o].sort().join("|");return{occurrencesToLoad:i,neededCids:s,loadedTopologyKey:l}}function PR(e){const t=String(e||"").trim(),n="assembly-part:";if(t.startsWith(n)){const r=t.slice(n.length).trim();return r?{partId:r}:null}if(t.startsWith("topology|")){const r=t.split("|"),o=String(r[1]||"").trim();return o?{partId:o}:null}return null}function OR(e,t=""){return`selector-ref::${String(t||"").trim()||"root"}`}function kR(e,t,n,r){if(!n)return null;let o=e.get(n);return o||(o={cadPath:r,selectors:[],seenSelectors:new Set},e.set(n,o),t.push({kind:"group",key:n}),o)}function Lle(e,t,n,r=""){const o=String(n||"").trim(),i=String(r||"").trim()||o;return!o||!i||e.has(i)?!1:(e.set(i,o),t.push({kind:"plain",key:i}),!0)}function Fle(e,t,n,r,o=""){const i=String(r||"").trim();if(!i)return 0;const s=Jh(i);if(!s)return Lle(t,n,i,o),0;const{cadPath:a,selectors:l}=s;if(!l.length){const f=kR(e,n,OR(a,"root"),a);return!f||f.seenSelectors.has("")?0:(f.seenSelectors.add(""),1)}const c=kR(e,n,OR(a,"selectors"),a);if(!c)return 0;let u=0;for(const f of l)c.seenSelectors.has(f)||(c.seenSelectors.add(f),c.selectors.push(f),u+=1);return u}function ca(e,{allowPlain:t=!1}={}){const n=String(e||"").trim();return n?n.includes("#")?n.split(/\s+/)[0]||"":t?n:"":""}function jle(e){const t=new Map,n=new Map,r=[];for(const i of e)Fle(t,n,r,String(i?.copyText||"").trim(),String(i?.id||"").trim());return{text:r.map(i=>{if(i.kind==="plain")return n.get(i.key)||"";const s=t.get(i.key);return s?zc({cadPath:s.cadPath,selectors:i.key.endsWith("::selectors")?Z1(s.selectors):[]}):""}).map(i=>ca(i,{allowPlain:!0})).filter(Boolean).join(`
|
||
`)}}function DR(e,t){const n=String(e||"").trim(),r=String(t||"").trim();return!n||!r||!n.includes("#")?n:n.startsWith("#")?`${r}${n}`:n}function vx(e){return String(e?.fileRefPrefix||"").trim()}function zle(e,t){const n=[e?.displaySelector,e?.occurrenceId,e?.sourceOccurrenceId,e?.sourceRootTargetOccurrenceId,e?.id].map(r=>{const o=String(r||"").trim();return X2(o)?o:""}).find(Boolean)||"";return n?zc({cadPath:vx(t),selector:n}):""}function j1(e){return e?{id:"step-entry:whole",copyText:zc({cadPath:vx(e)})}:null}function Ble(e){return String(e?.id||"").trim()}function jF(e,t){const n=Ble(e);return n?zc({cadPath:vx(t),selector:n}):""}function Mp({references:e=[],parts:t=[],mates:n=[],entry:r=null}={}){const o=Array.isArray(e)?[...e]:[],i=[];for(const l of t){const c=zle(l,r);if(!c){i.push(String(l?.name||l?.id||"part"));continue}const u=String(l?.id||l?.occurrenceId||"").trim();o.push({id:`assembly-part:${u}`,copyText:c})}for(const l of Array.isArray(n)?n:[]){const c=jF(l,r);c&&o.push({id:`assembly-mate:${String(l?.id||"").trim()}`,copyText:c})}const{text:s}=jle(o);return{lines:String(s||"").split(`
|
||
`).map(l=>ca(l,{allowPlain:!0})).filter(Boolean),copiedCount:o.length,missingPartNames:i}}function Vle(e,{limit:t=1}={}){const n=Array.isArray(e)?e:[],r=Math.max(1,Number(t)||1),o=n.map(s=>ca(s,{allowPlain:!0})).filter(Boolean);return o.length?`Copy ${o.slice(0,r).join(", ")}`:"Copy refs"}function $le(e){const t=Math.max(0,Math.floor(Number(e)||0));return t?`Copy ${t} ref${t===1?"":"s"}`:"Copy refs"}function df(e,t){if(e===t)return!0;if(!Array.isArray(e)||!Array.isArray(t)||e.length!==t.length)return!1;for(let n=0;n<e.length;n+=1)if(e[n]!==t[n])return!1;return!0}function jn(e){const t=new Set,n=[];for(const r of Array.isArray(e)?e:[]){const o=String(r||"").trim();!o||t.has(o)||(t.add(o),n.push(o))}return n}function z1(e,t,{multiSelect:n=!1}={}){const r=String(t||"").trim();if(!r)return[];const o=Array.isArray(e)?e:[];return n?o.includes(r)?o.filter(i=>i!==r):[...o,r]:o.length===1&&o[0]===r?[]:[r]}const LR=8;function B1(e){if(!Array.isArray(e)||e.length<3)return null;const t=e.slice(0,3).map(n=>Number(n));return t.every(n=>Number.isFinite(n))?t:null}function FR(e){if(!e||typeof e!="object")return null;const t={part:String(e.part||"").trim(),frame:String(e.frame||"").trim()},n=B1(e.position),r=B1(e.orientation);n&&(t.position=n),r&&(t.orientation=r);const o=e.axes&&typeof e.axes=="object"?e.axes:null;if(o){const i={};for(const s of["x","y","z"]){const a=B1(o[s]);a&&(i[s]=a)}Object.keys(i).length&&(t.axes=i)}return t.position||t.orientation||t.part||t.frame?t:null}function zF(e){const t=e?.assemblyMates;return Array.isArray(t)?t.filter(n=>n&&typeof n=="object").map((n,r)=>{const o=String(n.id||`m${r+1}`).trim()||`m${r+1}`;return{id:o,label:String(n.label||o).trim()||o,sourceLabel:String(n.sourceLabel||n.name||"").trim(),type:String(n.type||n.relation||"mate").trim(),relation:String(n.relation||n.type||"mate").trim(),fixed:String(n.fixed||"").trim(),moving:String(n.moving||"").trim(),parameters:n.parameters&&typeof n.parameters=="object"?n.parameters:{},fixedEndpoint:FR(n.fixedEndpoint),movingEndpoint:FR(n.movingEndpoint)}}):[]}function Ta(e){e.current?.abort(),e.current=null}function Gle(){if(typeof DOMException=="function")return new DOMException("The operation was aborted.","AbortError");const e=new Error("The operation was aborted.");return e.name="AbortError",e}function BF(){const e=typeof navigator<"u"?Number(navigator.hardwareConcurrency):0;return!Number.isFinite(e)||e<=0?LR:Math.max(2,Math.min(LR,e))}const jR=8;function Ule(){const e=typeof navigator<"u"?Number(navigator.hardwareConcurrency):0;return!Number.isFinite(e)||e<=0?jR:Math.max(4,Math.min(jR,Math.floor(e)))}function zR(e){return[...new Set((Array.isArray(e?.links)?e.links:[]).flatMap(t=>Array.isArray(t?.visuals)?t.visuals:[]).map(t=>String(t?.meshUrl||"").trim()).filter(Boolean))]}async function Hle(e,{signal:t,onProgress:n}={}){const r=e.length;let o=0;return n?.(o,r),Zw(e,BF(),async i=>{if(t?.aborted)throw Gle();const s=await OF(i,{signal:t,fallback:Q.STL});return o+=1,n?.(o,r),s})}function Wle(e){return PF(OA(e),{fallback:cd(e)})}function Kle(e,t){return OF(OA(e),{...t,fallback:cd(e),preferWorker:_le(e)})}function qle(e,t=null){return{...e,parts:null,assemblyRoot:ale(t),assemblyMates:zF(t)}}function Yle({entryHasMesh:e,entryHasReferences:t,entryHasDisplayEdges:n=()=>!1,buildNormalizedReferenceState:r}){const[o,i]=h.useState(null),[s,a]=h.useState(!1),[l,c]=h.useState(""),[u,f]=h.useState(""),[m,p]=h.useState(Ft.READY),[b,y]=h.useState(""),[x,S]=h.useState(null),[E,C]=h.useState(Ft.PENDING),[A,N]=h.useState(""),[w,_]=h.useState(""),[I,R]=h.useState(null),[O,F]=h.useState(Ft.PENDING),[V,$]=h.useState(""),[K,U]=h.useState(""),[Y,D]=h.useState(null),[j,ee]=h.useState(null),[X,ve]=h.useState(zn.IDLE),[q,re]=h.useState(""),[Be,Me]=h.useState(""),[He,de]=h.useState(null),[me,we]=h.useState(zn.IDLE),[ce,Ee]=h.useState(""),[Jt,mt]=h.useState(""),je=h.useRef(0),ye=h.useRef(0),Ie=h.useRef(0),Je=h.useRef(0),et=h.useRef(0),Xt=h.useRef(null),st=h.useRef(null),xt=h.useRef(null),Xe=h.useRef(null),sn=h.useRef(null),mn=h.useCallback(te=>QD(te),[]),ke=h.useCallback((te,We,Re)=>({file:te.file,kind:te.kind,meshHash:mn(te),meshData:{...Re,assemblyMates:zF(We)},assemblyStructureReady:!0,assemblyInteractionReady:!0,assemblyBackgroundError:""}),[mn]),St=h.useCallback((te,We,Re=null)=>{const wt=qle(We,Re);return{file:te.file,kind:te.kind,meshHash:mn(te),meshData:wt,assemblyStructureReady:!!wt.assemblyRoot,assemblyInteractionReady:!1,assemblyBackgroundError:""}},[mn]),Rr=h.useCallback(te=>{if(!e(te))return null;if(Nr(te)===Q.STEP){const Re=ar(te,"glb"),wt=kA(te),dt=bF(Re);return dt?qae(wt)?null:St(te,dt):null}const We=Wle(te);return We?{file:te.file,kind:te.kind,meshHash:pw(te),meshData:We}:null},[St,e]),yr=h.useCallback(te=>{if(!t(te))return null;const We=Yae(w_(te));return We?r(te,We):null},[r,t]),Qt=h.useCallback((te,We)=>({file:te.file,fileRef:String(te?.file||"").trim(),kind:te.kind,displayEdgeHash:Hn(te,"displayEdgeTopology"),displayEdgeRuntime:t9(We)}),[]),uo=h.useCallback(te=>{if(!n(te))return null;const We=Zae(v_(te));return We?Qt(te,We):null},[Qt,n]),Kn=h.useCallback(te=>{if(String(te?.kind||"").trim().toLowerCase()!==Q.IMPLICIT)return null;const We=ile(ar(te,"implicit"));return We?{file:te.file,kind:te.kind,implicitHash:Hn(te,"implicit"),model:We}:null},[]),Qo=h.useCallback(te=>{const We=String(te?.kind||"").trim().toLowerCase();if(!["urdf","srdf","sdf"].includes(We)||!ar(te,We==="sdf"?"sdf":"urdf"))return null;const wt=We==="srdf"?ele(ar(te,"srdf"),{urdfUrl:ar(te,"urdf")}):null,dt=We==="srdf"?wt?.urdfData:We==="sdf"?nle(ar(te,"sdf")):Jae(ar(te,"urdf"));if(!dt)return null;const pt=zR(dt),at=pt.map(jt=>PF(jt,{fallback:Q.STL})).filter(Boolean);if(at.length!==pt.length)return null;const Ae=new Map(pt.map((jt,lt)=>[jt,at[lt]]));return{file:te.file,kind:te.kind,urdfHash:Hh(te),urdfData:dt,meshesByUrl:Ae}},[]),_e=h.useCallback(()=>{je.current+=1,Ta(Xt),a(!1),c(""),f("")},[]),Ot=h.useCallback(()=>{ye.current+=1,Ta(st),_("")},[]),Nn=h.useCallback(()=>{Ie.current+=1,Ta(xt),U(""),D(null)},[]),vn=h.useCallback(()=>{Je.current+=1,Ta(Xe),Me("")},[]),cn=h.useCallback(()=>{et.current+=1,Ta(sn),mt("")},[]),br=h.useCallback(async te=>{_e();const We=je.current;if(!e(te)){i(null),p(Ft.PENDING),y("");return}const Re=Rr(te);if(Re&&(i(Re),p(Ft.READY),y(""),te?.kind!=="assembly"||Re.assemblyInteractionReady||Re.assemblyBackgroundError))return;const wt=new AbortController;Xt.current=wt,a(!0),c(String(te?.file||"").trim()),f(te?.kind==="assembly"?"loading assembly mesh":"loading mesh");const dt=te?.kind==="assembly"&&!!Re;let pt=dt;dt||(p(Ft.LOADING),y(""));try{if(Nr(te)===Q.STEP){const lt=ar(te,"glb");if(!lt)throw new Error(`STEP file is missing GLB asset: ${te.file||"(unknown)"}`);const nr=await MR(ub(lt,"assembly.json"),{signal:wt.signal}).catch(()=>null);if(nr&&nr.kind==="assembly-package"){f("loading components");const rt=Object.entries(nr.components||{}),Tn={};if(await Zw(rt,Ule(),async([xr,_n])=>{Tn[xr]=await yF(ub(lt,_n.glb),{signal:wt.signal,preferWorker:!0})}),We!==je.current)return;f("building assembly");const Ut=xle(nr,Tn);i(ke(te,nr,Ut)),p(Ft.READY),y("");return}throw new Error(`STEP file ${te.file||"(unknown)"} is not a component-GLB package; regenerate it to produce an assembly.json package.`)}if(!OA(te)){const lt=cd(te).toUpperCase();throw new Error(`${lt} entry is missing ${lt} asset: ${te.file||"(unknown)"}`)}const Ae=await Kle(te,{signal:wt.signal}),jt=pw(te);if(We!==je.current)return;f("building"),i({file:te.file,kind:te.kind,meshHash:jt,meshData:Ae}),p(Ft.READY)}catch(at){if(We!==je.current||Pu(at)||wt.signal.aborted)return;if(te?.kind==="assembly"&&pt){i(Ae=>!Ae||Ae.file!==te.file||Ae.meshHash!==mn(te)?Ae:{...Ae,assemblyBackgroundError:at instanceof Error?at.message:String(at)});return}p(Ft.ERROR),y(at instanceof Error?at.message:String(at))}finally{We===je.current&&(a(!1),c(""),f("")),Xt.current===wt&&(Xt.current=null)}},[St,_e,e,mn,Rr]),Et=h.useCallback(async(te,We=[])=>{vn();const Re=Je.current;if(!t(te)){ee(null),ve(zn.DISABLED),re("");return}const wt=yr(te);if(wt){ee(wt),ve(wt.disabledReason?zn.DISABLED:zn.READY),re(wt.disabledReason||"");return}const dt=new AbortController;Xe.current=dt,ve(zn.LOADING),re(""),Me("loading topology");try{const pt=ar(te,"glb"),at=pt?await MR(ub(pt,"assembly.json"),{signal:dt.signal}).catch(()=>null):null;if(at&&at.kind==="assembly-package"){const lt=String(te?.kind||"").trim()==="part",{occurrencesToLoad:nr,neededCids:rt,loadedTopologyKey:Tn}=Dle(at,We,{singleComponentPart:lt}),Ut={};if(await Zw(rt,BF(),async fo=>{const Vn=(at.components||{})[fo];Vn&&(Ut[fo]=await IR(ub(pt,Vn.glb),{signal:dt.signal}).catch(()=>null))}),Re!==Je.current)return;const xr=nr.map(fo=>{const Vn=Ut[String(fo?.component||"").trim()];if(!Vn)return null;const Ze=String(fo?.id||"").trim();return WO(Vn,{copyCadPath:String(te?.fileRefPrefix||""),partId:lt?"":Ze,transform:fo?.transform||null,remapOccurrenceId:Ze})}).filter(Boolean),_n=a9(xr),qn=r(te,null,{selectorRuntime:_n,loadedTopologyKey:Tn});ee(qn),ve(qn.disabledReason?zn.DISABLED:zn.READY),re(qn.disabledReason||"");return}const Ae=await IR(w_(te),{signal:dt.signal});if(Re!==Je.current)return;const jt=r(te,Ae);ee(jt),ve(jt.disabledReason?zn.DISABLED:zn.READY),re(jt.disabledReason||"")}catch(pt){if(Re!==Je.current||Pu(pt)||dt.signal.aborted)return;ve(zn.ERROR),re(pt instanceof Error?pt.message:String(pt))}finally{Xe.current===dt&&(Xe.current=null),Re===Je.current&&Me("")}},[r,vn,t,yr]),Zr=h.useCallback(async te=>{cn();const We=et.current;if(!n(te)){de(null),we(zn.DISABLED),Ee("");return}if(Nr(te)===Q.STEP){de(null),we(zn.DISABLED),Ee("");return}const Re=uo(te);if(Re){de(Re),we(zn.READY),Ee("");return}const wt=new AbortController;sn.current=wt,we(zn.LOADING),Ee(""),mt("loading edges");try{const dt=await Xae(v_(te),{signal:wt.signal});if(We!==et.current)return;de(Qt(te,dt)),we(zn.READY),Ee("")}catch(dt){if(We!==et.current||Pu(dt)||wt.signal.aborted)return;de(null),we(zn.ERROR),Ee(dt instanceof Error?dt.message:String(dt))}finally{sn.current===wt&&(sn.current=null),We===et.current&&mt("")}},[Qt,cn,n,uo]),en=h.useCallback(async te=>{Ot();const We=ye.current;if(String(te?.kind||"").trim().toLowerCase()!==Q.IMPLICIT){S(null),C(Ft.PENDING),N("");return}const Re=Kn(te);if(Re){S(Re),C(Ft.READY),N("");return}const wt=new AbortController;st.current=wt,C(Ft.LOADING),N(""),_("loading implicit CAD");try{const dt=await ole(ar(te,"implicit"),{signal:wt.signal});if(We!==ye.current)return;S({file:te.file,kind:te.kind,implicitHash:Hn(te,"implicit"),model:dt}),C(Ft.READY)}catch(dt){if(We!==ye.current||Pu(dt)||wt.signal.aborted)return;C(Ft.ERROR),N(dt instanceof Error?dt.message:String(dt))}finally{st.current===wt&&(st.current=null),We===ye.current&&_("")}},[Ot,Kn]),Pr=h.useCallback(async te=>{Nn();const We=Ie.current,Re=String(te?.kind||"").trim().toLowerCase();if(!["urdf","srdf","sdf"].includes(Re)){R(null),F(Ft.PENDING),$("");return}if(!ar(te,Re==="sdf"?"sdf":"urdf")){R(null),F(Ft.PENDING),$("");return}const dt=Qo(te);if(dt){R(dt),F(Ft.READY),$("");return}const pt=new AbortController;xt.current=pt,F(Ft.LOADING),$("");const at=Re==="sdf"?"Loading SDF":Re==="srdf"?"Loading SRDF":"Loading URDF";U(Re==="sdf"?"loading SDF":Re==="srdf"?"loading SRDF":"loading URDF"),D({phase:"robot",label:at,determinate:!1});try{const jt=(Re==="srdf"?await Qae(ar(te,"srdf"),{signal:pt.signal,urdfUrl:ar(te,"urdf")}):Re==="sdf"?{urdfData:await tle(ar(te,"sdf"),{signal:pt.signal})}:{urdfData:await CF(ar(te,"urdf"),{signal:pt.signal})}).urdfData,lt=zR(jt);U(lt.length?"loading meshes":"building robot"),D({phase:lt.length?"meshes":"robot",label:lt.length?"Loading meshes":"Building robot",done:0,total:lt.length||null,determinate:lt.length>0});const nr=await Hle(lt,{signal:pt.signal,onProgress:(Tn,Ut)=>{We===Ie.current&&Ut>0&&(U(`loading meshes ${Tn}/${Ut}`),D({phase:"meshes",label:"Loading meshes",done:Tn,total:Ut,determinate:!0}))}});if(We!==Ie.current)return;U("building robot"),D({phase:"robot",label:"Building robot",determinate:!1});const rt=new Map(lt.map((Tn,Ut)=>[Tn,nr[Ut]]));R({file:te.file,kind:te.kind,urdfHash:Hh(te),urdfData:jt,meshesByUrl:rt,complete:!0}),F(Ft.READY)}catch(Ae){if(We!==Ie.current||Pu(Ae)||pt.signal.aborted)return;F(Ft.ERROR),$(Ae instanceof Error?Ae.message:String(Ae))}finally{xt.current===pt&&(xt.current=null),We===Ie.current&&(U(""),D(null))}},[Nn,Qo]);return h.useEffect(()=>()=>{Ta(Xt),Ta(st),Ta(xt),Ta(Xe),Ta(sn)},[]),{meshState:o,setMeshState:i,meshLoadInProgress:s,meshLoadTargetFile:l,meshLoadStage:u,status:m,setStatus:p,error:b,setError:y,implicitState:x,setImplicitState:S,implicitStatus:E,setImplicitStatus:C,implicitError:A,setImplicitError:N,implicitLoadStage:w,urdfState:I,setUrdfState:R,urdfStatus:O,setUrdfStatus:F,urdfError:V,setUrdfError:$,urdfLoadStage:K,urdfLoadProgress:Y,referenceState:j,setReferenceState:ee,referenceStatus:X,setReferenceStatus:ve,referenceError:q,setReferenceError:re,referenceLoadStage:Be,displayEdgeState:He,setDisplayEdgeState:de,displayEdgeStatus:me,setDisplayEdgeStatus:we,displayEdgeError:ce,setDisplayEdgeError:Ee,displayEdgeLoadStage:Jt,getCachedMeshState:Rr,getCachedReferenceState:yr,getCachedDisplayEdgeState:uo,getCachedImplicitState:Kn,getCachedUrdfState:Qo,cancelMeshLoad:_e,cancelImplicitLoad:Ot,cancelUrdfLoad:Nn,cancelReferenceLoad:vn,cancelDisplayEdgeLoad:cn,loadMeshForEntry:br,loadImplicitForEntry:en,loadUrdfForEntry:Pr,loadReferencesForEntry:Et,loadDisplayEdgesForEntry:Zr}}const Xle="[data-slot='sidebar-wrapper']";function Zle(){return document.querySelector(Xle)}function V1(e){Zle()?.style.setProperty("--sidebar-width",`${e}px`)}function BR(e=1600){const t=Number(window.innerWidth);return Number.isFinite(t)&&t>0?t:e}function VR(e,t=0){const n=Number(e);return Number.isFinite(n)?Math.max(t,n):t}function db(e,t,n){const r=Number(e),o=Number(t),i=Number(n),s=Number.isFinite(o)&&o>0?o:0,a=Number.isFinite(i)&&i>0?Math.max(s,i):s,l=Number.isFinite(r)?r:s;return Math.min(Math.max(l,s),a)}function ff({viewportWidth:e,sidebarOpen:t=!1,sheetOpen:n=!1,sidebarWidth:r=0,sheetWidth:o=0,sidebarMinWidth:i=0,sheetMinWidth:s=0,sidebarMaxWidth:a=0,sheetMaxWidth:l=0}={}){if(!t&&!n)return{sidebarWidth:0,sheetWidth:0};const c=Number(a),u=Number(l);if(t&&!n)return{sidebarWidth:db(r,i,c),sheetWidth:0};if(!t&&n)return{sidebarWidth:0,sheetWidth:db(o,s,u)};const f=Math.max(0,Number(i)||0),m=Math.max(0,Number(s)||0);let p=db(r,f,c),b=db(o,m,u);return{sidebarWidth:p,sheetWidth:b}}function Jle({isDesktop:e,setLayoutMode:t,setSidebarOpen:n,setTabToolsOpen:r,setLayoutViewportWidth:o,clampSidebarWidth:i,clampTabToolsWidth:s,setSidebarWidth:a,setTabToolsWidth:l,panelResizeStateRef:c,tabToolsResizeStateRef:u,defaultSidebarWidth:f,sidebarMinWidth:m,tabToolsMinWidth:p,endPanelResize:b,endTabToolsResize:y}){h.useEffect(()=>{const x=()=>{const S=BR();t(K0(S))};return x(),window.addEventListener("resize",x),()=>{window.removeEventListener("resize",x)}},[t]),h.useEffect(()=>{if(!e)return;const x=()=>{o(S=>BR(S)),a(S=>VR(S,m)),l(S=>VR(S,p))};return x(),window.addEventListener("resize",x),()=>{window.removeEventListener("resize",x)}},[e,o,a,l,m,p]),h.useEffect(()=>{const x=E=>{const C=c.current;if(!C)return;const A=C.startWidth+(E.clientX-C.startX);if(A<m){V1(f),a(f),n(!1),b();return}const N=i(A);C.latestWidth=N,V1(N),a(N)},S=()=>{const E=c.current;if(!E)return;const C=Math.max(m,i(E.latestWidth??E.startWidth));V1(C),a(C),b()};return window.addEventListener("pointermove",x),window.addEventListener("pointerup",S),window.addEventListener("pointercancel",S),()=>{window.removeEventListener("pointermove",x),window.removeEventListener("pointerup",S),window.removeEventListener("pointercancel",S),u.current||(document.body.style.cursor="",document.body.style.userSelect="")}},[i,b,c,f,n,a,m,u]),h.useEffect(()=>{const x=E=>{const C=u.current;if(!C)return;const A=C.startWidth-(E.clientX-C.startX);if(A<p){l(p),r(!1),y();return}l(s(A))},S=()=>{u.current&&y()};return window.addEventListener("pointermove",x),window.addEventListener("pointerup",S),window.addEventListener("pointercancel",S),()=>{window.removeEventListener("pointermove",x),window.removeEventListener("pointerup",S),window.removeEventListener("pointercancel",S),c.current||(document.body.style.cursor="",document.body.style.userSelect="")}},[s,y,c,r,l,p,u])}function Qle({isAssemblyView:e,supportsPartSelection:t,assemblyPartsLoaded:n,selectedEntryHasReferences:r,setSelectedReferenceIds:o,selectedReferenceIdsRef:i,setHoveredListReferenceId:s,setHoveredModelReferenceId:a,assemblyParts:l,validAssemblyPartIds:c,validHiddenPartIds:u,selectedPartIdsRef:f,setSelectedPartIds:m,parseAssemblyPartReferenceSelectionId:p,setHiddenPartIds:b,setHoveredListPartId:y,setHoveredModelPartId:x}){h.useEffect(()=>{e||r||(i.current=[],o([]),s(""),a(""))},[e,r,i,s,a,o]),h.useEffect(()=>{if(!n)return;if(!t){f.current=[],m([]),b([]),y(""),x("");return}const S=new Set((Array.isArray(c)?c:l.map(C=>C.id)).map(C=>String(C||"").trim()).filter(Boolean)),E=new Set((Array.isArray(u)?u:[...S]).map(C=>String(C||"").trim()).filter(Boolean));f.current=f.current.filter(C=>S.has(C)),m(C=>C.filter(A=>S.has(A))),i.current=i.current.filter(C=>{const A=p(C);return!A||S.has(A.partId)}),o(C=>C.filter(A=>{const N=p(A);return!N||S.has(N.partId)})),b(C=>C.filter(A=>E.has(A))),y(C=>C&&!S.has(C)?"":C),x(C=>C&&!S.has(C)?"":C),s(C=>{const A=p(C);return A&&!S.has(A.partId)?"":C}),a(C=>{const A=p(C);return A&&!S.has(A.partId)?"":C})},[l,n,t,c,u,p,i,f,b,y,s,x,a,m,o])}function ece({selectedKey:e="",selectedKeyExists:t=!1,urlSelectionRequested:n=!1,nextSelectedKey:r=""}={}){return!(!n||!r||r===e)}function tce({key:e="",createTabRecord:t,initialSelectedTabSnapshot:n=null,fileSessionState:r=null}={}){const o=r?.slices?.tab||null;return t(e,o||n||{})}function nce({manifestEntries:e,cadFileParamForEntry:t=()=>"",cadDirectorySessionBootstrappedRef:n,setOpenTabs:r,applyTabRecord:o,selectedEntryKeyFromUrl:i,createTabRecord:s,initialSelectedTabSnapshot:a=null,upsertTabRecord:l,selectedEntry:c,defaultDocumentTitle:u,selectedKey:f,entryMap:m,buildActiveTabSnapshot:p,catalogEntries:b,manifestRevision:y=0,readCadParam:x=()=>null,activateEntryTab:S,resetActiveDirectory:E,writeCadParam:C,readEntrySessionState:A=()=>null,applyEntrySessionState:N=()=>{}}){const w=h.useRef(y),_=h.useRef(!1);h.useLayoutEffect(()=>{if(n.current)return;n.current=!0;const I=i(e);if(_.current=!!x()&&!I,I){const R=A(I),O=tce({key:I,createTabRecord:s,initialSelectedTabSnapshot:a,fileSessionState:R});r(F=>l(F,I,O)),o(O),N(I,R)}},[N,o,s,e,x,A,i,r,l,a,n]),h.useEffect(()=>{const I=uL(c);document.title=I?`${u} | ${I}`:u},[u,c]),h.useLayoutEffect(()=>{const I=!!x(),R=i(b),O=!!(f&&m.has(f));if(ece({selectedKey:f,selectedKeyExists:O,urlSelectionRequested:I,nextSelectedKey:R})){_.current=!1,S(R);return}if(O){r(F=>l(F,f,p()));return}if(!R){if(f){if(y===w.current&&!m.size)return;E()}return}R!==f&&S(R)},[S,p,b,m,y,x,E,i,f,r,l]),h.useEffect(()=>{const I=()=>{const R=i(b);if(R){S(R);return}E()};return window.addEventListener("popstate",I),()=>{window.removeEventListener("popstate",I)}},[S,b,E,i]),h.useEffect(()=>{if(c){C(t(c));return}if(!f){if(!!x()&&(i(b)||x()||_.current&&(y===w.current||!m.size)))return;C("")}},[b,t,y,x,c,i,f,C]),h.useEffect(()=>{f&&r(I=>l(I,f,p()))},[p,f,r,l])}function VF(){return new Map}function rce(e){const t=VF();for(const n of Array.isArray(e)?e:[])t.set(n.id,n);return t}function $R(e){const t=VF();for(const n of Array.isArray(e)?e:[])t.set(n.id,n);return t}function oce({selectedReferencesMatch:e,referenceState:t,isAssemblyView:n,supportsPartSelection:r,assemblyParts:o,assemblyPartMap:i,inspectedAssemblyNodeId:s,inspectedAssemblyPartTopologyReferences:a,selectedReferenceIds:l,selectedPartIds:c,hoveredListReferenceId:u,hoveredModelReferenceId:f,hoveredListPartId:m,hoveredModelPartId:p}){const b=e?Array.isArray(t?.references)?t.references:[]:[],y=h.useMemo(()=>r&&Array.isArray(o)?o:[],[o,r]),x=h.useMemo(()=>i instanceof Map?i:rce(y),[i,y]),S="".trim(),E=h.useMemo(()=>S?[S]:[],[S]),C=h.useMemo(()=>S&&x.get(S)||null,[S,x]),A=h.useMemo(()=>$R(b),[b]),N=n&&!!S&&String(C?.nodeType||"").trim()==="part"&&!(Array.isArray(C?.children)&&C.children.length>0),w=h.useMemo(()=>Array.isArray(a)?a:[],[a]),_=h.useMemo(()=>$R(N?w:b),[b,w,N]),I=String(C?.name||C?.displayName||"the selected part").trim(),R=h.useMemo(()=>l.map(K=>_.get(K)).filter(Boolean),[_,l]),O=h.useMemo(()=>c.map(K=>x.get(K)).filter(Boolean),[x,c]),F=u||f,V=F&&_.get(F)||null;return{currentReferences:b,assemblyParts:y,assemblyPartMap:x,inspectedAssemblyPartIds:E,inspectedAssemblyPartId:S,inspectedAssemblyPart:C,allReferences:b,mixedReferenceList:b,referenceMap:A,isInspectingAssemblyPart:N,activeReferenceMap:_,inspectedAssemblyPartReferences:w,inspectedAssemblyPartSourceLabel:I,selectedReferences:R,selectedParts:O,hoveredReferenceId:F,hoveredReference:V,hoveredPartId:m||p||"",visibleReferences:N?w:b,filteredReferences:N?w:b,filteredAssemblyParts:y}}function ice({copyStatus:e,screenshotStatus:t,setCopyStatus:n,setScreenshotStatus:r,previewMode:o,viewerAlertOpen:i,themeSheetOpen:s,tabToolsOpen:a,isDesktop:l,sidebarOpen:c,previewUiStateRef:u,tabToolMode:f,measureDraftActive:m=!1,onCancelMeasureDraft:p=null,drawingUndoStackRef:b,drawingRedoStackRef:y,handleUndoDrawing:x,handleRedoDrawing:S,setPreviewMode:E,setViewerAlertOpen:C,setThemeEditing:A,setTabToolsOpen:N,setSidebarOpen:w,setTabToolMode:_}){h.useEffect(()=>{if(!(e||t))return;const I=window.setTimeout(()=>{n(""),r("")},2200);return()=>window.clearTimeout(I)},[e,t,n,r]),h.useEffect(()=>{if(!(o||i||s||a||!l&&c||f===Cr.MEASURE))return;const I=R=>{if(!R.defaultPrevented&&!bD(R.target)&&!R.altKey&&(R.metaKey||R.ctrlKey)){const O=String(R.key||"").toLowerCase(),F=O==="y"||O==="z"&&R.shiftKey;if(O==="z"&&!R.shiftKey&&b.current.length){R.preventDefault(),x();return}if(F&&y.current.length){R.preventDefault(),S();return}}if(R.key==="Escape"){if(o){const O=u.current;u.current=null,E(!1),O&&(C(O.viewerAlertOpen),A(O.themeEditing),w(O.sidebarOpen),N(O.tabToolsOpen),_(O.tabToolMode));return}if(f===Cr.MEASURE){if(m){p?.();return}_(Cr.REFERENCES);return}C(!1),A(!1),N(!1),l||w(!1)}};return window.addEventListener("keydown",I),()=>{window.removeEventListener("keydown",I)}},[y,b,S,x,l,s,o,u,A,E,w,_,N,C,c,m,p,f,a,i])}function sce(e,t=null){return oL(t)==="python"?"":D7(Nr(t),e)}function GR(e,t,n,r=null){const o=At(e);if(!o)return null;const i=Nr(e),s=sce(o,e),a=!Ab(i),l=`Confirm the ${Lh(i)||"source file"} exists in the repo and reload the page.`,c=a?l:"Try reloading the page. If the problem persists, rebuild the render assets for this entry.",u=a?l:"Rebuild the CAD assets for this entry, then reload the page.";if(r?.status==="error"&&!t)return{severity:"error",summary:"Build failed",title:"Render artifact build failed",message:String(r.error||"").trim()||"The render artifact for this entry could not be built.",resolution:u,command:s};const f=Bee(e,i);if(f&&!t){const m=String(f.error||"").trim(),y=f.stale===!0||m==="stale_step_artifact"?"STEP artifact stale":m==="missing_glb"?"STEP artifact missing":"STEP artifact unavailable",x=JA(e);if(!x||!n)return{severity:x?"warning":"error",...x?{blocking:!1}:{},compact:!0,summary:y,title:y,message:RL(f),command:s}}return n?{severity:"error",summary:"Mesh load failed",title:"Failed to load render mesh",message:n,resolution:c,command:s}:!t&&eL(e)||t?null:{severity:"error",summary:"Mesh unavailable",title:"No mesh data is available",message:"The selected entry is listed in the CAD catalog but no renderable mesh data could be loaded for it.",resolution:u,command:s}}function ace(e,t,n){return e?n?{severity:"error",summary:"Implicit CAD load failed",title:"Failed to load implicit CAD module",message:n,resolution:"Check the exported GLSL distance function and reload the page."}:t?null:{severity:"error",summary:"Implicit CAD unavailable",title:"No implicit CAD model is available",message:"The selected entry is listed in the CAD catalog but the implicit CAD module did not load.",resolution:"Confirm the .implicit.js or .implicit.mjs file exists and exports an implicit.js/0.1.0 model."}:null}const od=1,$F="cad-viewer:file-session",lce="cad-viewer:file-session:index",cce="__root__";function GF(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function Gr(e,t=""){return String(e??t).trim()}function Ku(e,t=0){const n=Number(e);return Number.isFinite(n)?n:t}function sC(e,t=!1){return typeof e=="boolean"?e:t}function ps(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function $1(e,t){return JSON.stringify(e)===JSON.stringify(t)}function Jw(e){if(e==null)return null;if(typeof e=="string"||typeof e=="boolean")return e;if(typeof e=="number")return Number.isFinite(e)?e:0;if(Array.isArray(e))return e.map(Jw);if(!ps(e))return null;const t={};for(const[n,r]of Object.entries(e))t[String(n)]=Jw(r);return t}function UF(e,t){try{const n=e.getItem(t);return n?JSON.parse(n):null}catch{return null}}function HF(e,t,n={}){typeof n.onWriteError=="function"&&n.onWriteError({key:e,error:t})}function WF(e,t,n,r={}){try{return e.setItem(t,JSON.stringify(n)),!0}catch(o){return HF(t,o,r),!1}}function aC(e,t,n={}){try{return e.removeItem(t),!0}catch(r){return HF(t,r,n),!1}}function lC(){return typeof window<"u"?window.sessionStorage:null}function cC(e){return Gr(e)||cce}function Qw(e){return encodeURIComponent(Gr(e))}function uC(e,t){return[$F,`v${od}`,Qw(cC(e)),Qw(t)].join(":")}function KF(e){return[lce,`v${od}`,Qw(cC(e))].join(":")}function qF(e,t){const n=UF(e,KF(t));return!n||n.version!==od||!Array.isArray(n.files)?[]:[...new Set(n.files.map(r=>Gr(r)).filter(Boolean))]}function YF(e,t,n,r={}){const o=[...new Set((Array.isArray(n)?n:[]).map(s=>Gr(s)).filter(Boolean))].sort(),i=KF(t);return o.length?WF(e,i,{version:od,files:o},r):aC(e,i,r)}function uce(e,t,n,r={}){const o=Gr(n);if(!o)return!0;const i=qF(e,t);return i.includes(o)?!0:YF(e,t,[...i,o],r)}function XF(e){return Hh(e)}function dce(e){return[Hn(e,"stepModule"),Gr(e?.hash)].filter(Boolean).join(":")}function fce(e){return[Gr(e?.kind).toLowerCase(),Gr(e?.hash),Hn(e,"selectorTopology"),Hn(e,"topology"),Hn(e,"glb")].filter(Boolean).join(":")||Gr(e?.file)}function mce(e){return[Gr(e?.kind).toLowerCase(),Gr(e?.hash),Hn(e,"selectorTopology"),Hn(e,"topology"),Hn(e,"glb"),Hn(e,"stl"),Hn(e,"3mf"),Hn(e,"dxf"),XF(e)].filter(Boolean).join(":")||Gr(e?.file)}function ZF(e){return{tab:mce(e),stepModule:dce(e),urdf:XF(e),largeFile:fce(e)}}function pce(e){return ps(e)?$i(e):null}function hce(e){return ps(e)?{activeId:Gr(e.activeId),playing:!1,elapsedSec:Math.max(Ku(e.elapsedSec,0),0),speed:Math.min(Math.max(Ku(e.speed,1),.1),5),loopEnabled:sC(e.loopEnabled,!0)}:{activeId:"",playing:!1,elapsedSec:0,speed:1,loopEnabled:!0}}function gce(e){return ps(e)?{enabled:sC(e.enabled,!0),parameterValues:ps(e.parameterValues)?Jw(e.parameterValues):{},animationState:hce(e.animationState)}:null}function yce(e){return ps(e)?Object.fromEntries(Object.entries(e).map(([t,n])=>[Gr(t),Ku(n,0)]).filter(([t])=>t)):{}}function bce(e){if(!ps(e))return{};const t={};for(const[n,r]of Object.entries(e)){const o=Gr(n);!o||!Array.isArray(r)||(t[o]=[Ku(r[0],0),Ku(r[1],0),Ku(r[2],0)])}return t}function xce(e){if(!ps(e))return{};const t={};for(const r of["activePlanningGroupName","activeEndEffectorName","targetFrame","planningPipeline","plannerId"]){const o=Gr(e[r]);o&&(t[r]=o)}for(const r of["ikTimeout","ikAttempts","ikTolerance","planningTime","maxVelocityScalingFactor","maxAccelerationScalingFactor"])GF(e,r)&&(t[r]=Ku(e[r],0));const n=bce(e.targetsByEndEffector);return Object.keys(n).length&&(t.targetsByEndEffector=n),t}function Sce(e){return ps(e)?{jointValues:yce(e.jointValues),motionState:xce(e.motionState)}:null}function Ece(e){return ps(e)?{selectableTopologyEnabled:sC(e.selectableTopologyEnabled,!1)}:null}const JF=Object.freeze({display:{normalize:pce,equals:l4,signatureKey:"tab"},tab:{normalize:T0,equals:XD,signatureKey:"tab"},stepModule:{normalize:gce,equals:$1,signatureKey:"stepModule"},urdf:{normalize:Sce,equals:$1,signatureKey:"urdf"},largeFile:{normalize:Ece,equals:$1,signatureKey:"largeFile"}});function wce(e,t,n,r={}){const o=JF[e]?.signatureKey;if(!o||r.skipSignatureCheck===!0)return!0;const i=Gr(t?.[o]),s=Gr(n?.[o]);return!!(i&&s&&i===s)}function vce(e,t={}){if(!ps(e))return{};const n=t.currentSignatures||{},r=t.signatures||{},o={};for(const[i,s]of Object.entries(JF)){if(!GF(e,i)||!wce(i,r,n,t))continue;const a=s.normalize(e[i]);a!==null&&(o[i]=a)}return o}function Ace({fileKey:e="",entry:t=null,slices:n={}}={}){const r=Gr(e||t?.file);return dC({version:od,fileKey:r,signatures:ZF(t),slices:n},{fileKey:r,entry:t,skipSignatureCheck:!0})}function dC(e,t={}){if(!ps(e)||e.version!==od)return null;const n=Gr(e.fileKey||t.fileKey);if(!n||t.fileKey&&n!==Gr(t.fileKey))return null;const r=ps(e.signatures)?e.signatures:{},o=t.entry?ZF(t.entry):t.currentSignatures||r,i=vce(e.slices,{currentSignatures:o,signatures:r,skipSignatureCheck:t.skipSignatureCheck});return{version:od,fileKey:n,signatures:{...r},slices:i}}function G1(e,t,n=null,r={}){const o=r.storage||lC(),i=Gr(t||n?.file);return!o||!i?null:dC(UF(o,uC(e,i)),{fileKey:i,entry:n})}function Cce(e,t,n,r={}){const o=r.storage||lC(),i=Gr(t||n?.fileKey);if(!o||!i)return!0;const s=dC(n,{fileKey:i,skipSignatureCheck:!0}),a=uC(e,i);if(!s||!Object.keys(s.slices).length)return aC(o,a,r);const l=WF(o,a,s,r),c=uce(o,e,i,r);return l&&c}function Mce(e,t,n={}){const r=n.storage||lC();if(!r)return!0;const o=new Set((Array.isArray(t)?t:[]).map(l=>Gr(l)).filter(Boolean)),i=qF(r,e);let s=!0;const a=[];for(const l of i){if(o.has(l)){a.push(l);continue}s=aC(r,uC(e,l),n)&&s}return YF(r,e,a,n)&&s}const Yp=Object.freeze({COLOR_SCHEME:"colorScheme",THEME:"theme",IGNORE:"ignore"});function Ice(e){const t=String(e||"");return!t||t.startsWith($F)?Yp.IGNORE:t===LQ?Yp.COLOR_SCHEME:t===tm?Yp.THEME:Yp.IGNORE}function yo(e,t=0){const n=Number(e);return Number.isFinite(n)?n:t}function si(e,t,n){return Math.min(Math.max(yo(e,t),t),n)}function wc(e,t){const n=Object.keys(e||{}),r=Object.keys(t||{});return n.length!==r.length?!1:n.every(o=>Object.hasOwn(t||{},o)&&e?.[o]===t?.[o])}function xf(e,t){const n=Array.isArray(e?.animations)?e.animations:[];if(!n.length)return null;const r=String(t||"").trim();return n.find(o=>o.id===r)||n[0]||null}function Ip(e){const t=xf(e,"");return{activeId:t?.id||"",playing:!1,elapsedSec:0,speed:1,loopEnabled:t?.loop!==!1}}function ml(){return typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now()}function UR(e){return Array.isArray(e?.animations)&&e.animations.length>0}function Xp(e,t){const n=Array.isArray(e?.animations)?e.animations:[];if(!n.length)return null;const r=String(t||"").trim();return n.find(o=>o.id===r)||n[0]||null}const Nce=8,Tce=32,_ce=250;function Rce(e){const t=Number(e);return!Number.isFinite(t)||t<=Tce?Nce:Math.min(t*2,_ce)}function Pce({timeMs:e,publishedAtMs:t,publishCostMs:n}){return Number.isFinite(t)?e-t>=Rce(n):!0}function U1(e){return{activeId:Xp(e,"")?.id||"",playing:!1,elapsedSec:0,speed:1}}const Oce=840,Rf=240,Ax=.001;function id(e,t=0){const n=Number(e);return Number.isFinite(n)?n:t}function QF(e){return Math.min(Math.max(id(e,1),0),1)}function cm(e){return!e||typeof e!="object"?[]:Object.entries(e).map(([t,n])=>[String(t||"").trim(),id(n,0)]).filter(([t])=>t).sort(([t],[n])=>t.localeCompare(n))}function kce(e,t){return!t||!e?!1:e instanceof Set||e instanceof Map?e.has(t):!!e?.[t]}function Dce(e){const t=id(e,0),n=((t+180)%360+360)%360-180;return n===-180&&t>0?180:n}function ej(e,t,n,r){const o=id(t,0),i=id(n,o);return kce(r,e)?Dce(i-o):i-o}function Lce(e){const t=QF(e);return t*t*t*(t*(6*t-15)+10)}function Mh(e,t,n=Ax){const r=cm(e),o=cm(t);if(r.length!==o.length)return!1;for(let i=0;i<o.length;i+=1){const[s,a]=r[i],[l,c]=o[i];if(s!==l||Math.abs(a-c)>n)return!1}return!0}function Fce(e,t,n,r=Ax,o=null){const i=cm(t),s=new Map(cm(e)),a=Lce(n),l={};let c=!0;for(const[u,f]of i){const m=s.has(u)?s.get(u):f,p=ej(u,m,f,o),b=m+p*a;Math.abs(p*(1-a))<=r||a>=1?l[u]=f:(l[u]=b,c=!1)}return{values:l,done:c}}function jce(e,t,n,r=Rf,o=Ax,i=null){const s=cm(t),a=new Map(cm(e)),l=Math.max(id(n,0),0),c=Math.max(id(r,Rf),1),u=QF(1-Math.exp(-l/c)),f={};let m=!0;for(const[p,b]of s){const y=a.has(p)?a.get(p):b,x=ej(p,y,b,i),S=y+x*u;Math.abs(x*(1-u))<=o||u>=1?f[p]=b:(f[p]=S,m=!1)}return{values:f,done:m}}const zce=1e-6;function ev(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function fC(e,t=0){const n=Number(e);return Number.isFinite(n)?n:t}function tj(e){const t=String(e?.type||"fixed");return t==="continuous"||t==="revolute"}function mC(e,t){const n=fC(t,0);return tj(e)?n*180/Math.PI:n}function Bce(e,t){const n=fC(t,0);return tj(e)?n*Math.PI/180:n}function Vce(e,t){const n=Array.isArray(e?.joints)?e.joints:[],r=new Map(n.map(i=>[String(i?.name||""),i]).filter(([i])=>i)),o={};for(const[i,s]of Object.entries(t||{})){const a=String(i||"").trim(),l=r.get(a);a&&l&&(o[a]=Bce(l,s))}return o}function vc(e,t=[0,0,0]){const n=Array.isArray(e)?e:t;return[0,1,2].map(r=>fC(n[r],t[r]??0))}function $ce(e,t){const n=vc(e),r=vc(t);return Math.hypot(n[0]-r[0],n[1]-r[1],n[2]-r[2])}function tv(e,t,{native:n=!1}={}){if(!ev(t))throw new Error("MoveIt2 server response jointValuesByName must be an object");const r=Array.isArray(e?.joints)?e.joints:[],o=new Map(r.map(s=>[String(s?.name||""),s]).filter(([s])=>s)),i={};for(const[s,a]of Object.entries(t)){const l=String(s||"").trim();if(!l)throw new Error("MoveIt2 server response includes an empty joint name");const c=o.get(l);if(!c)throw new Error(`MoveIt2 server response references unknown joint ${l}`);const u=String(c?.type||"fixed");if(u==="fixed")throw new Error(`MoveIt2 server response cannot set fixed joint ${l}`);if(c?.mimic)throw new Error(`MoveIt2 server response cannot set mimic joint ${l}`);const f=Number(a);if(!Number.isFinite(f))throw new Error(`MoveIt2 server response joint ${l} must be a finite number`);const m=n?mC(c,f):f,p=Lc(c,m);if(u!=="continuous"&&Math.abs(p-m)>zce)throw new Error(`MoveIt2 server response joint ${l} must stay within joint limits`);i[l]=m}return i}function Gce(e,t){if(!ev(t))throw new Error("MoveIt2 server response trajectory must be an object");const r=(Array.isArray(t.jointNames)?t.jointNames:[]).map(a=>String(a||"").trim()).filter(Boolean);if(!r.length)throw new Error("MoveIt2 server response trajectory.jointNames must be a non-empty array");const o=Array.isArray(t.points)?t.points:[];if(!o.length)throw new Error("MoveIt2 server response trajectory.points must be a non-empty array");let i=-Number.EPSILON;const s=o.map((a,l)=>{if(!ev(a))throw new Error(`MoveIt2 server response trajectory point ${l+1} must be an object`);const c=Number(a.timeFromStartSec);if(!Number.isFinite(c)||c<0||c<i)throw new Error("MoveIt2 server response trajectory times must be finite, non-negative, and sorted");i=c;const u=Array.isArray(a.positions),f=u?a.positions.map(b=>Number(b)):[];if(u&&(f.length!==r.length||f.some(b=>!Number.isFinite(b))))throw new Error("MoveIt2 server response trajectory positions must match trajectory.jointNames");const m=u?f.map((b,y)=>{const x=(Array.isArray(e?.joints)?e.joints:[]).find(S=>String(S?.name||"")===r[y]);return mC(x,b)}):Array.isArray(a.positionsDeg)?a.positionsDeg.map(b=>Number(b)):[];if(m.length!==r.length||m.some(b=>!Number.isFinite(b)))throw new Error("MoveIt2 server response trajectory positions must match trajectory.jointNames");const p=Object.fromEntries(r.map((b,y)=>[b,m[y]]));return tv(e,p),{timeFromStartSec:c,positions:u?f:null,positionsDeg:m,positionsByName:u?Object.fromEntries(r.map((b,y)=>[b,f[y]])):null,positionsByNameDeg:p}});return{jointNames:r,points:s}}function Uce(e,t,n,r){const o=ME(e,t,n?.link,n?.frame);return o?{actualPosition:o,positionError:$ce(o,r)}:{actualPosition:null,positionError:Number.POSITIVE_INFINITY}}function io(e){return!e||typeof e!="object"?{}:Object.fromEntries(Object.entries(e).map(([t,n])=>[String(t||"").trim(),yo(n,0)]).filter(([t])=>t))}function nj(e,t){if(!t||typeof t!="object")return{};const n=Array.isArray(e?.joints)?e.joints:[],r=new Map(n.map(o=>[String(o?.name||""),o]).filter(([o])=>o));return Object.fromEntries(Object.entries(t).map(([o,i])=>{const s=String(o||"").trim(),a=r.get(s);return s&&a?[s,mC(a,i)]:null}).filter(Boolean))}function Hce(e){return(Array.isArray(e?.srdf?.groupStates)?e.srdf.groupStates:Array.isArray(e?.motion?.groupStates)?e.motion.groupStates:[]).reduce((n,r)=>{if(String(r?.name||"").trim().toLowerCase()!=="home")return n;const o=nj(e,r?.jointValuesByName||r?.jointValuesByNameRad);return{...n,...o}},{})}function Wce(e,t){const n=io(t),r=Object.keys(n);if(!r.length)return!1;const o=Object.fromEntries(r.map(i=>[i,e?.[i]]));return Mh(o,n)}function Kce(e,t,n={}){const r=Array.isArray(e)?e:[],o=io(t),i=io(n),s=new Set([...Object.keys(o),...Object.keys(i)]);let a=null,l=0;for(const c of r){const u=io(c?.jointValuesByName),f=Object.keys(u);if(!f.length||!Wce(o,u))continue;const m=[...s].filter(y=>!Object.hasOwn(u,y)),p=Object.fromEntries(m.map(y=>[y,o[y]??0])),b=Object.fromEntries(m.map(y=>[y,i[y]??0]));Mh(p,b)&&f.length>l&&(a=c,l=f.length)}return a}function qce(e,t,n={}){const r=Array.isArray(e?.points)?e.points:[];if(!r.length)return io(n);const o=r[0];if(t<=yo(o.timeFromStartSec,0))return{...io(n),...io(o.positionsByNameDeg)};for(let i=1;i<r.length;i+=1){const s=r[i-1],a=r[i],l=yo(s.timeFromStartSec,0),c=yo(a.timeFromStartSec,l);if(t>c)continue;const u=Math.max(c-l,1e-6),f=Math.min(Math.max((t-l)/u,0),1),m=io(s.positionsByNameDeg),p=io(a.positionsByNameDeg),b={};for(const[y,x]of Object.entries(p)){const S=Object.hasOwn(m,y)?m[y]:x;b[y]=S+(x-S)*f}return{...io(n),...b}}return{...io(n),...io(r[r.length-1].positionsByNameDeg)}}function Yce(e){const t=yo(e,0),n=Math.round(t*1e3)/1e3;return Object.is(n,-0)?0:n}function fb(){return{fileRef:"",originalPerspective:null}}function Xce(e){if(!Array.isArray(e)||e.length<3)return null;const t=[Number(e[0]),Number(e[1]),Number(e[2])];return t.every(Number.isFinite)?t:null}function Zce(e,t){const n=Array.isArray(e)?e:[];return JSON.stringify(Object.fromEntries(n.map(r=>{const o=String(r?.name||"").trim(),i=Yce(t?.[o]??r?.defaultValueDeg??0);return[o,i]}).filter(([r])=>r)),null,2)}function Zp(e){return String(e||"").replace(/\\/g,"/").split("/").filter(Boolean)}const Jce=[".step.py",".stp.py"];function Qce(e){const t=String(e||"").trim();for(const n of Jce)if(t.toLowerCase().endsWith(n))return t.slice(0,t.length-n.length);return t}function eue(e){const t=Zp(e);return t.length?(t[t.length-1]=Qce(t[t.length-1]),t.join("/")):""}function tue(e){const t=new Map,n=[],r=new Set;for(const a of Array.isArray(e)?e:[]){const l=Zp(a).join("/");if(!l||r.has(l))continue;r.add(l);const c=eue(l);n.push(c),t.has(c)||t.set(c,l)}const o=new Map,i=n.reduce((a,l)=>Math.max(a,Zp(l).length),0);for(let a=1;a<=i;a+=1){const l=new Map;for(const c of n){const u=Zp(c);if(u.length<a)continue;const f=u.slice(u.length-a).join("/");l.set(f,(l.get(f)||0)+1)}o.set(a,l)}const s=new Map;for(const a of n){const l=Zp(a);let c=a;for(let u=1;u<=l.length;u+=1){const f=l.slice(l.length-u).join("/");if((o.get(u)?.get(f)||0)===1){c=f;break}}s.set(t.get(a)||a,c)}return s}const pC={BASE_URL:"/",DEV:!1,MODE:"production",PROD:!0,SSR:!1},HR=6e4,nue="ws://127.0.0.1:8765/ws",rue=1,um=new Map;let Ds=null,nv="";function oue(){if(rj())return!0;const e=typeof import.meta<"u"?pC:null;return e&&typeof e=="object"&&Object.hasOwn(e,"DEV")?!!e.DEV:!0}function sd({enabled:e=oue()}={}){return!!e}function iue(e){const t=String(e||"").trim();return t||(typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():`moveit2-server-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`)}function WR({enabled:e=sd()}={}){if(!sd({enabled:e}))return"";const t=typeof import.meta<"u"?String(pC?.VIEWER_MOVEIT2_WS_URL||"").trim():"";return t||nue}function rj(){const e=typeof import.meta<"u"?String(pC?.VIEWER_MOVEIT2_WS_URL||"").trim():"";if(e)return e;if(typeof window>"u")return"";try{return String(new URL(window.location.href).searchParams.get("moveit2Ws")||"").trim()}catch{return""}}function oj({enabled:e=sd()}={}){if(!sd({enabled:e}))return"";if(typeof window>"u")return WR({enabled:e});const t=rj();return String(t||"").trim()||WR({enabled:e})}function sue(e){for(const[t,n]of um.entries())clearTimeout(n.timer),n.reject(new Error(e)),um.delete(t)}function H1(e="MoveIt2 server connection closed."){sue(e),Ds=null,nv=""}function aue(e,t){if(!t)throw new Error("MoveIt2 server requires browser WebSocket support.");return Ds&&nv===e&&Ds.readyState<=t.OPEN||(Ds&&(Ds.close(),H1("MoveIt2 server connection changed.")),Ds=new t(e),nv=e,Ds.addEventListener("message",n=>{let r;try{r=JSON.parse(String(n.data||""))}catch{return}const o=String(r?.id||"").trim(),i=um.get(o);if(i){if(um.delete(o),clearTimeout(i.timer),r?.ok===!1){i.reject(new Error(String(r?.error?.message||"MoveIt2 server request failed.")));return}i.resolve(r?.result??{})}}),Ds.addEventListener("close",()=>H1("MoveIt2 server connection closed.")),Ds.addEventListener("error",()=>{Ds?.readyState!==t.OPEN&&H1(`Could not connect to MoveIt2 server at ${e}.`)})),Ds}function lue(e,t,n,r){const o=e.constructor?.OPEN??1;if(e.readyState===o){e.send(t);return}const i=()=>{e.removeEventListener("open",i),e.send(t)};e.addEventListener("open",i)}function cue({timeoutMs:e=1e3,url:t=oj(),WebSocketImpl:n=globalThis.WebSocket,enabled:r=sd()}={}){const o=Math.max(Number(e)||1e3,1);return new Promise(i=>{if(!r||!t||!n){i(!1);return}let s=!1,a=null,l=0;const c=u=>{s||(s=!0,clearTimeout(l),a&&u&&a.close(),i(!!u))};l=setTimeout(()=>c(!1),o);try{a=new n(t)}catch{c(!1);return}a.addEventListener("open",()=>c(!0)),a.addEventListener("error",()=>c(!1)),a.addEventListener("close",()=>c(!1))})}function uue(e,t,{timeoutMs:n=HR,url:r=oj(),WebSocketImpl:o=globalThis.WebSocket,enabled:i=sd()}={}){const s=iue(t?.id),a=Math.max(Number(n)||HR,1);return new Promise((l,c)=>{if(!i||!r){c(new Error("MoveIt2 server connections are not enabled for this viewer session."));return}let u;try{u=aue(r,o)}catch(p){c(p);return}const f=setTimeout(()=>{um.delete(s),c(new Error(`MoveIt2 server request ${s} timed out.`))},a);um.set(s,{resolve:l,reject:c,timer:f});const m=JSON.stringify({id:s,type:e,protocolVersion:rue,payload:t});lue(u,m)})}const rv="ready",ov="error",ij="attach",due="build";function fue(e){const t=String(e?.state||"ready");return t===rv?rv:t===ov?ov:t==="generating"||e?.blocked?ij:due}function mue(e,t,n){const r=t?.runId?String(t.runId):null,o=r!==null&&e!==null&&r!==e;return{runId:r===null?e:r,progress:o?null:n||null,handedOff:o}}const W1={status:"ready",error:"",progress:null};function pue(e){return e?.name==="AbortError"||/abort/i.test(String(e?.message||""))}function hue(e,{enabled:t=!0,freshnessKey:n=""}={}){const r=String(t&&e||"").trim(),o=r?`${r}:${n}`:"",[i,s]=h.useState({key:"",status:"ready",error:"",progress:null}),a=h.useRef(0);return h.useEffect(()=>{if(!r)return;const l=a.current+=1,c=new AbortController,u=()=>l===a.current,f=A=>{u()&&s({key:o,progress:null,...A})};let m=0,p=!1;const b=()=>{m&&(window.clearTimeout(m),m=0)};let y=null;const x=A=>{if(!u())return;const N=mue(y,A,G0(A?.progress));y=N.runId,!(!N.progress&&!N.handedOff)&&s(w=>w.key===o?{...w,progress:N.progress}:w)},S=async()=>{if(!u()||c.signal.aborted)return;let A="";try{const N=await Iw(r,{signal:c.signal});A=String(N?.state||""),x(N)}catch{}if(p&&u()&&!c.signal.aborted&&A&&A!=="generating"){b(),C();return}u()&&!c.signal.aborted&&(m=window.setTimeout(S,jw))},E=A=>{y=A?.runId?String(A.runId):null,f({status:"generating",error:"",progress:G0(A?.progress)})};async function C(){try{const A=await Iw(r,{signal:c.signal});if(!u())return;const N=fue(A);if(N===rv){f(W1);return}if(N===ov){f({status:"error",error:String(A?.error||A?.reason||"Render artifact is unavailable.")});return}if(N===ij){p=!0,E(A),m=window.setTimeout(S,I1);return}p=!1,E(A),m=window.setTimeout(S,I1);const w=await zte(r,{signal:c.signal});if(b(),!u())return;if(w?.ok&&w.state==="generating"){p=!0,E(w),m=window.setTimeout(S,I1);return}f(w?.ok&&w.state==="ready"?W1:{status:"error",error:String(w?.error||"Failed to generate the render artifact.")})}catch(A){b(),u()&&!pue(A)&&!c.signal.aborted&&f({status:"error",error:A instanceof Error?A.message:String(A)})}}return C(),()=>{b(),c.abort()}},[r,o]),i.key===o?{status:i.status,error:i.error,progress:i.progress}:W1}function gue(e,t){const n=String(t||"").trim();if(!e||!n)return[];const r=String(e?.id||"").trim();if(n===r||n==="root")return[e];const o=[{node:e,path:[e]}];for(;o.length;){const{node:i,path:s}=o.pop();if(String(i?.id||"").trim()===n)return s;const a=Array.isArray(i?.children)?i.children:[];for(let l=a.length-1;l>=0;l-=1){const c=a[l];o.push({node:c,path:[...s,c]})}}return[]}function Ou(e,t,n){const r=String(t||"").trim(),o=String(n||"").trim();return!e||!r||!o?!1:gue(e,o).some(i=>String(i?.id||"").trim()===r)}function Vb(e,t,{rootId:n=""}={}){if(!e)return[];const r=String(n||e?.id||"").trim(),o=[],i=new Set;for(const a of Array.isArray(t)?t:[t]){const l=String(a||"").trim();!l||l===r||i.has(l)||!Oc(e,l)||(i.add(l),o.push(l))}const s=[];for(const a of o)if(!s.some(l=>Ou(e,l,a))){for(let l=s.length-1;l>=0;l-=1)Ou(e,a,s[l])&&s.splice(l,1);s.push(a)}return s}function yue(e,t,n,{referencePartId:r=null}={}){const o=new Set((Array.isArray(n)?n:[n]).map(s=>String(s||"").trim()).filter(Boolean));if(!o.size)return Array.isArray(e)?e:[];const i=typeof r=="function"?r:s=>String(s?.partId||"").trim();return(Array.isArray(e)?e:[]).map(s=>String(s||"").trim()).filter(s=>{if(!s)return!1;const a=t?.get?.(s)||null,l=String(a?.selectorType||"").trim();if(l!=="shape"&&l!=="occurrence")return!0;const c=String(i(a)||"").trim();return!c||!o.has(c)})}function bue(e,t,{rootId:n="",isolatedNodeIds:r=[]}={}){if(!e)return[];const o=String(n||e?.id||"").trim(),i=new Set((Array.isArray(t)?t:[t]).map(m=>String(m||"").trim()).filter(Boolean)),s=Vb(e,r,{rootId:o}),a=s.length?s.map(m=>Oc(e,m)).filter(Boolean):[e],l=[],c=new Set,u=m=>{const p=String(m||"").trim();!p||p===o||c.has(p)||(c.add(p),l.push(p))},f=(m,{forceChildren:p=!1}={})=>{if(!m)return;const b=String(m?.id||"").trim(),y=Array.isArray(m?.children)?m.children:[],x=b&&i.has(b);if(y.length&&(p||x||b===o)){for(const S of y)f(S);return}u(b)};for(const m of a)f(m,{forceChildren:!s.length||i.has(String(m?.id||"").trim())});return l}function xue(e){return Lh(e)||"STL"}function Sue(e){const t=String(e||"").trim();return t?`${t.slice(0,1).toUpperCase()}${t.slice(1)}`:""}const Eu="Generating artifacts",Np=Object.freeze([]),Eue=sd(),wue=Object.freeze([0,0,0]),pc=150,mf=520,mb=cw,wu=240,pf=448,vue=44,KR=36,qR=80,Aue=220,YR=Object.freeze({selectableTopologyEnabled:!1});function pb(e={}){return{selectableTopologyEnabled:e?.selectableTopologyEnabled===!0}}function vm(){if(typeof window>"u")return 1600;const e=Number(window.innerWidth);return Number.isFinite(e)&&e>0?e:1600}function Cue(){return K0(vm())}function Bf(e=vm()){return WD({defaultFileSheetWidthPx:wA(e)})}function Mue(){const e=Bf().fileSheetOpen;return typeof e=="boolean"?e:Z5(vm())}function Iue(){const e=vm();return Bf(e).fileSheetWidthPx||wA(e)}function Nue(){const e=vm();return Bf(e).fileSheetWidthPx!=null}function Vi(e){return String(e?.id||e?.occurrenceId||"").trim()}function Yh(e){const t=String(e||"").trim();return X2(t)?t:""}function sj(e){const t=String(e||"").trim();return t.startsWith(Nh)?Yh(t.split(":").pop()):""}function hC(e,{allowOpaque:t=!1}={}){const n=String(e||"").trim();if(!n)return"";if(n.startsWith("#"))return ca(n);const r=sj(n)||n;return!t&&!Yh(r)?"":`#${r}`}function Tue(e){for(const t of Array.isArray(e)?e:[]){const n=hC(t?.value,{allowOpaque:t?.allowOpaque===!0});if(n)return n}return""}function _ue(e){return[e?.displaySelector,e?.occurrenceId,e?.sourceOccurrenceId,e?.sourceRootTargetOccurrenceId,e?.id].map(Yh).find(Boolean)||""}function dm(e,t){const n=String(t||"").trim();if(!e||!n)return null;const r=[e];for(;r.length;){const o=r.pop();if(Vi(o)===n||_ue(o)===n||String(o?.name||"").trim()===n||String(o?.label||"").trim()===n||String(o?.displayName||"").trim()===n)return o;const i=Yr(o);for(let s=i.length-1;s>=0;s-=1)r.push(i[s])}return null}function Rue(e){const t=[],n=e?[e]:[];for(;n.length;){const r=n.pop(),o=Yr(r);for(let s=o.length-1;s>=0;s-=1)n.push(o[s]);const i=Vi(r);i&&String(r?.nodeType||"").trim()==="part"&&o.length===0&&t.push(i)}return jn(t)}function hb({assemblyPartMap:e,displayStepTreeRoot:t,stepTreeRoot:n,nodeId:r}){const o=String(r||"").trim();return o&&(e.get(o)||dm(t,o)||dm(n,o)||Oc(t,o)||Oc(n,o))||null}function Pue(e,t){const r=[Yh(t),e?.displaySelector,e?.occurrenceId,e?.sourceOccurrenceId,e?.sourceRootTargetOccurrenceId,e?.id].map(Yh).find(Boolean)||"";return r?{...e||{},id:String(e?.id||r).trim(),displaySelector:r,occurrenceId:r,name:String(e?.name||e?.label||e?.displayName||r).trim()}:null}function XR(e,t){const n=Pue(e,t),r=String(n?.occurrenceId||n?.id||t||"").trim();return r?{id:`assembly-part:${String(n?.id||r).trim()}`,copyText:zc({selector:r})}:null}function hc(e,t="selector-ref"){const n=hC(e);if(!n)return null;const r=n.slice(1);return{id:`${t}:${r}`,copyText:n}}function Jp(e,t,n="step-tree"){const o=String(e?.nodeType||"").trim().startsWith("topology-"),i=Tue(o?[{value:e?.displaySelector,allowOpaque:!0},{value:e?.topologyReferenceId,allowOpaque:!0},{value:t,allowOpaque:!1},{value:e?.id,allowOpaque:!1}]:[{value:e?.displaySelector,allowOpaque:!0},{value:e?.occurrenceId,allowOpaque:!0},{value:e?.sourceOccurrenceId,allowOpaque:!0},{value:e?.sourceRootTargetOccurrenceId,allowOpaque:!0},{value:t,allowOpaque:!1},{value:e?.id,allowOpaque:!1}]);if(!i)return null;const s=i.slice(1);return{id:`${n}:${s}`,copyText:i}}function Js(e,t,n){const r=String(t||"").trim();!r||!n||e.has(r)||e.set(r,n)}function Oue(e){const t=new Map;if(!e)return t;const n=[e];for(;n.length;){const r=n.pop(),o=Vi(r),i=Jp(r,o);i&&(Js(t,o,i),Js(t,r?.id,i),Js(t,r?.topologyReferenceId,i),Js(t,r?.displaySelector,i),Js(t,r?.occurrenceId,i),Js(t,r?.name,i),Js(t,r?.label,i),Js(t,r?.displayName,i),Js(t,sj(r?.id),i),Js(t,i.copyText,i),Js(t,i.copyText.slice(1),i));const s=Yr(r);for(let a=s.length-1;a>=0;a-=1)n.push(s[a])}return t}function K1(e,t){const n=[],r=new Set;for(const o of Array.isArray(e)?e:[]){const i=String(o||"").trim(),s=ca(t?.get(i)?.copyText)||hC(i);!s||r.has(s)||(r.add(s),n.push(s))}return n}function Tp(e,{selectedReferenceIds:t=[],selectedPartIds:n=[],selectedMateIds:r=[],copyReferenceMap:o=null}={}){const i=Array.isArray(e?.lines)?e.lines.map(a=>ca(a)).filter(Boolean):[];if(i.length)return{...e||{},lines:jn(i),copiedCount:e?.copiedCount||i.length};const s=jn([...K1(t,o),...K1(n,o),...K1(r,o)]);return{...e||{},lines:s,copiedCount:s.length||e?.copiedCount||0}}function ZR(e,t){if(!(e instanceof Map)||!t)return;const n=[t?.id,t?.normalizedSelector,t?.displaySelector].map(o=>String(o||"").trim()).filter(Boolean),r=ca(t?.copyText);if(r.startsWith("#")){n.push(r);for(const o of r.slice(1).split(",")){const i=String(o||"").trim();i&&n.push(i)}}for(const o of n)e.has(o)||e.set(o,t)}function aj(e,t){return Yr(e).length>0&&(t||Vi(e)===Fs)}function kue(e,{omitRoot:t=!1,expandedTreeNodeIds:n=[],loadableTreeNodeIds:r=[]}={}){if(!e)return[];const o=[],i=new Set,s=new Set((Array.isArray(r)?r:[]).map(l=>String(l||"").trim()).filter(Boolean)),a=vv(e,n,{omitRoot:t,showAllRootChildren:!0});for(const l of a){const c=l?.node||l,u=String(l?.id||"").trim()||Vi(c);!u||i.has(u)||(l?.hasChildren||Yr(c).length||s.has(u))&&(i.add(u),o.push(u))}return o}function JR({root:e,isAssemblyView:t=!1,expandedTreeNodeIds:n=[],loadableTreeNodeIds:r=[],actionNodeIds:o=[]}={}){const i=new Set((Array.isArray(n)?n:[]).map(p=>String(p||"").trim()).filter(Boolean)),a=jn((Array.isArray(o)?o:[]).map(p=>String(p||"").trim()).filter(Boolean)).map(p=>dm(e,p)).filter(Boolean),l=a.filter(p=>(Yr(p).length||r.includes(Vi(p)))&&!i.has(Vi(p))).map(p=>Vi(p)).filter(Boolean),c=a.filter(p=>(Yr(p).length||r.includes(Vi(p)))&&i.has(Vi(p))).map(p=>Vi(p)).filter(Boolean),u=kue(e,{omitRoot:aj(e,t),expandedTreeNodeIds:n,loadableTreeNodeIds:r}),f=u.filter(p=>!i.has(p)),m=u.filter(p=>i.has(p));return{collapsedActionNodeIds:l,expandedActionNodeIds:c,collapsedExpandableTreeNodeIds:f,expandedExpandableTreeNodeIds:m,showExpandCollapse:!!(a.some(p=>Yr(p).length)||u.length)}}function Due(e,t,{isAssemblyView:n=!1}={}){return e?jn(vv(e,t,{omitRoot:aj(e,n),showAllRootChildren:!0}).map(r=>String(r?.topologyReferenceId||"").trim()).filter(Boolean)):[]}function QR(e,t){const n=String(t||"").trim();if(!e||!n)return"";const r=[e];for(;r.length;){const o=r.pop();if(String(o?.topologyReferenceId||"").trim()===n)return Vi(o);const i=Yr(o);for(let s=i.length-1;s>=0;s-=1)r.push(i[s])}return""}function Lue(e,t){const n=String(t||"").trim(),r=Array.isArray(e?.children)?e.children:[];if(!n||!r.length)return"";for(const o of r){const i=String(o?.id||"").trim();if(i&&(i===n||qh(o).includes(n)))return i}return""}function Fue(e){const t=[],n=[...Yr(e)].reverse();for(;n.length;){const r=n.pop(),o=Vi(r),i=String(r?.nodeType||"").trim(),s=Yr(r);i.startsWith("topology-")&&o&&s.length&&r?.visualOnly!==!0&&t.push(o);for(let a=s.length-1;a>=0;a-=1)n.push(s[a])}return t}function jue(e,t,{expandSelf:n=!1,includeVisualOnlyAncestors:r=!0}={}){const o=String(t||"").trim();if(!e||!o)return[];const i=dm(e,o),s=kG(e,o).filter(a=>r?!0:dm(e,a)?.visualOnly!==!0);return n&&i&&Yr(i).length&&s.push(o,...Fue(i)),[...new Set(s.filter(Boolean))]}function q1(e,t){const n=String(t||"").trim(),r=dm(e,n);if(!r)return n?[n]:[];const o=[],i=[r];for(;i.length;){const s=i.pop(),a=Vi(s);a&&o.push(a);const l=Yr(s);for(let c=l.length-1;c>=0;c-=1)i.push(l[c])}return o}function Y1({definition:e,animation:t,elapsedSec:n,speed:r,parameterValues:o}){if(!e)return{};const i=yb(e,o);if(typeof t?.update!="function")return i;const s=Math.max(Number(t.duration)||1,.001),a=si(n,0,s),l=s>0?si(a/s,0,1):0,c={...i},u=(f,m)=>{const p=String(f||"").trim(),b=e.parameterMap?.[p];b&&(c[p]=ed(b,m))};try{t.update({elapsed:a,elapsedSec:a,duration:s,progress:l,cycle:s>0?a/s:0,loop:t.loop!==!1,params:i,set:u,speed:si(r,.1,5)})}catch(f){console.error("STEP animation update failed",f)}return c}function zue(e,t){return Object.is(e,t)?!0:e&&t&&typeof e=="object"&&typeof t=="object"&&!Array.isArray(e)&&!Array.isArray(t)?wc(e,t):!1}function hf(e,t,n){const r=e.current;return r&&wc(r,n)?r:(e.current=n,n)}function e2(e,t,n=""){const[r,o]=h.useState(e),i=h.useRef(e),s=h.useRef(e),a=h.useRef(n),l=h.useRef(0),c=h.useRef(0),u=h.useCallback(f=>{zue(s.current,f)||(s.current=f,o(f))},[]);return h.useEffect(()=>()=>{c.current&&(window.clearTimeout(c.current),c.current=0)},[]),h.useEffect(()=>{i.current=e;const f=typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now(),m=Math.max(Number(t)||0,0);if(a.current!==n){a.current=n,c.current&&(window.clearTimeout(c.current),c.current=0),l.current=f,s.current=e,o(e);return}if(m<=0||typeof window>"u"){l.current=f,u(e);return}const p=f-l.current;if(p>=m){c.current&&(window.clearTimeout(c.current),c.current=0),l.current=f,u(e);return}c.current||(c.current=window.setTimeout(()=>{c.current=0,l.current=typeof performance<"u"&&typeof performance.now=="function"?performance.now():Date.now(),u(i.current)},m-p))},[u,t,n,e]),r}function t2(e,t,n,r){if(!e||typeof t?.update!="function")return n;const o=Math.max(Number(t.duration)||1,.001),i=si(r,0,o),s=o>0?si(i/o,0,1):0,a=Jf(e,n),l={...a},c=(u,f)=>{const m=String(u||"").trim(),p=e.parameterMap?.[m];p&&(l[m]=ed(p,f))};return t.update({...a,elapsed:i,elapsedSec:i,duration:o,progress:s,cycle:o>0?i/o:0,t:i,loop:t.loop!==!1,params:a,set:c}),l}async function Bue(e,t){try{const n=await e.json();return String(n?.error||n?.message||t).trim()||t}catch{return t}}function Vue(e){if(!e)return e;const t={...e};if(delete t.url,delete t.hash,delete t.bytes,delete t.assets,t.relations?.glb){const n={...t.relations};delete n.glb,t.relations=n}return t}function $ue({manifestEntries:e=[],manifestRevision:t=0,catalogHydrated:n=!1,catalogRefreshing:r=!1,catalogError:o="",activeDir:i=""}){const s=Array.isArray(e)?e:[],a=s,l=Rb(),c=String(i||"").trim(),[u,f]=h.useState(""),m=h.useRef(null);if(!m.current){const g=Bf().fileViewerExpandedDirectoryIds;m.current={hasStoredState:Array.isArray(g),expandedDirectoryIds:Array.isArray(g)?g:[]}}const[p,b]=h.useState(()=>new Set(m.current.expandedDirectoryIds)),[y,x]=h.useState(()=>m.current.hasStoredState),[S,E]=h.useState([]),[C,A]=h.useState(null),N=String(C?.backend||"").trim().toLowerCase(),[w,_]=h.useState(""),[I,R]=h.useState(null),[O,F]=h.useState(0),[V,$]=h.useState([]),[K,U]=h.useState("2d"),[Y,D]=h.useState(""),[j,ee]=h.useState([]),[X,ve]=h.useState([]),[q,re]=h.useState(()=>pb(YR)),[Be,Me]=h.useState(""),[He,de]=h.useState(""),[me,we]=h.useState(""),[ce,Ee]=h.useState([]),[Jt,mt]=h.useState({}),[je,ye]=h.useState(""),[Ie,Je]=h.useState([]),[et,Xt]=h.useState(""),[st,xt]=h.useState([]),[Xe,sn]=h.useState([]),[mn,ke]=h.useState(null),[St,Rr]=h.useState(()=>$i()),[yr,Qt]=h.useState(""),[uo,Kn]=h.useState(""),[Qo,_e]=h.useState(""),[Ot,Nn]=h.useState(!1),[vn,cn]=h.useState(""),[br,Et]=h.useState(""),[Zr,en]=h.useState(""),[Pr,te]=h.useState(""),[We,Re]=h.useState(!1),[wt,dt]=h.useState(Cue),[pt,at]=h.useState(()=>Bf().fileViewerOpen),[Ae,jt]=h.useState(()=>Bf().fileViewerWidthPx||mb),[lt,nr]=h.useState(vm),rt=wt===Pf.DESKTOP,[Tn,Ut]=h.useState(Mue),[xr,_n]=h.useState(!1),[qn,fo]=h.useState(null),[Vn,Ze]=h.useState(()=>dee()),kn=Vn.settings,Sr=Vn.themeId,[Er,ie]=h.useState(!1),[Mt,un]=h.useState("3d"),[Ke,zt]=h.useState(100),[Yn,kt]=h.useState(Eh),[ae,cr]=h.useState([]),[bn,Jr]=h.useState(L0),[rr,Or]=h.useState(F0),[k,oe]=h.useState(wh),[fe,Fe]=h.useState([]),[qe,Ye]=h.useState(Ff),[ht,Dn]=h.useState(J_),[Rt,Xn]=h.useState(vh),It=h.useRef(new Map),[tt,An]=h.useState(null),xn=h.useMemo(()=>Rv(kn,{prefersDark:!1}),[kn]),Di=h.useMemo(()=>{const g=xn.edges;return g&&g.enabled===!0?Zu(g):Zu()},[xn]),Bo=h.useMemo(()=>BP(xn),[xn]),ui=Bo==="dark"?wl:$h,gs=h.useCallback(g=>{Rr(M=>$i(typeof g=="function"?g(M):g))},[]),di=h.useCallback(g=>{zl(M=>Ws(typeof g=="function"?g(M):g))},[]),[or,Z]=h.useState(!1),[pe,ft]=h.useState(Iue),[ur,Cn]=h.useState(Nue),[Qr,Vo]=h.useState(an.FREEHAND),[ys,Sa]=h.useState(null),[_o,$o]=h.useState(Cr.REFERENCES),[Ro,Ei]=h.useState([]),[wi,mo]=h.useState([]),[Kt,Go]=h.useState([]),[ct,vi]=h.useState({}),[ze,qa]=h.useState({}),[Ce,Uo]=h.useState({}),[Ya,dd]=h.useState({url:"",status:"idle",error:"",definition:null}),[Ur,Po]=h.useState({}),[Oo,Sn]=h.useState(!0),[pn,Ho]=h.useState({activeId:"",playing:!1,elapsedSec:0,speed:1,loopEnabled:!0}),ei=h.useRef(Ur),wr=h.useRef(pn),[Xa,dr]=h.useState({}),[Mn,Li]=h.useState({activeId:"",playing:!1,elapsedSec:0,speed:1,loopEnabled:!0}),xo=h.useRef(Mn),[qi,zl]=h.useState(()=>Ws()),[hg,Am]=h.useState(!1),po=h.useRef(0),[eo,Fi]=h.useState(fb),Bl=h.useRef(""),Ai=h.useRef({frameId:0,token:0}),kr=h.useRef({frameId:0,token:0,mode:"",fileRef:"",currentValues:null,targetValues:null,smoothingMs:Rf,lastTimestampMs:0}),Ci=h.useCallback(({key:g})=>{const M=String(g||"browser-storage");Bl.current!==M&&(Bl.current=M,en("Browser storage could not save the CAD Viewer session."))},[]),ho=h.useMemo(()=>{const g=new Map;for(const M of a)g.set(At(M),M);return g},[a]),ti=h.useMemo(()=>cC(c),[c]),{meshState:Za,setMeshState:Yi,meshLoadInProgress:Ea,meshLoadTargetFile:Xc,meshLoadStage:bs,status:xs,setStatus:Zc,error:fd,setError:Ja,implicitState:Jc,setImplicitState:Qa,implicitStatus:Ss,setImplicitStatus:Es,implicitError:to,setImplicitError:wa,implicitLoadStage:Xi,urdfState:Qc,setUrdfState:Wo,urdfStatus:md,setUrdfStatus:Vl,urdfError:gg,setUrdfError:qs,urdfLoadStage:$l,urdfLoadProgress:Cx,referenceState:Gl,setReferenceState:eu,referenceStatus:Mx,setReferenceStatus:Ul,setReferenceError:Hl,referenceLoadStage:yg,displayEdgeState:pd,setDisplayEdgeState:bg,setDisplayEdgeStatus:Cm,setDisplayEdgeError:Mm,getCachedMeshState:Im,getCachedReferenceState:hd,getCachedImplicitState:gd,getCachedUrdfState:xg,cancelMeshLoad:Nm,cancelImplicitLoad:Wl,cancelUrdfLoad:tu,cancelReferenceLoad:ws,cancelDisplayEdgeLoad:Tm,loadMeshForEntry:Sg,loadImplicitForEntry:v,loadUrdfForEntry:z,loadReferencesForEntry:G,loadDisplayEdgesForEntry:ne}=Yle({entryHasMesh:bf,entryHasReferences:m1,entryHasDisplayEdges:A_,buildNormalizedReferenceState:kle}),se=h.useMemo(()=>{const g=u.trim().toLowerCase();return g?a.filter(M=>Ll(M).toLowerCase().includes(g)||String(M.kind||"").toLowerCase().includes(g)||At(M).toLowerCase().includes(g)):a},[a,u]),Oe=h.useMemo(()=>N_(a),[a]),Te=h.useMemo(()=>N_(se),[se]),xe=h.useMemo(()=>fL(Oe),[Oe]),Se=ho.get(w)??null,it=l?yw(a,l):null,Rn=ute({explicitFileParam:l,matchingEntry:it,selectedEntry:Se,catalogHydrated:n,catalogRefreshing:r}),Nt=o?"":dte({explicitFileParam:l,matchingEntry:it,selectedEntry:Se,catalogHydrated:n,catalogRefreshing:r}),Zn=Nr(Se),vt=hue(Se?At(Se):"",{enabled:Ab(Zn),freshnessKey:`${Se?.hash||""}:${t}`}),$e=vt.status==="generating",$n=$e?vt.progress:null,Dr=$n||G0(Cx),Wt=h.useMemo(()=>$e&&Se?[At(Se)]:[],[$e,Se]),tn=h.useMemo(()=>tue(a.map(g=>_u(g))),[a]),W=h.useMemo(()=>{const g=!Se||vt.status==="ready"?Se:Vue(Se);if(!g)return g;const M=tn.get(_u(g))||"";return M?{...g,fileRefPrefix:M}:g},[Se,vt.status,tn]),qt=vt.status==="error"?{artifact:{ok:!1,error:"render_artifact_unavailable",message:vt.error||"Render artifact is unavailable.",stepPath:Se?At(Se):""}}:null,gt=Nr(W),Dt=gf(gt)!==Mo.MESH&&gf(gt)!==Mo.DRAWING?gt:gk(W),Le=tT(W),So=h.useMemo(()=>B_(Le).length>0,[Le]),Ko=C?C.stepArtifactGenerationAvailable!==!1:!0,vs=C?N||"local-fs":"",hn=vs==="local-fs",ir=vs==="local-fs"&&!!(C?.rootPath||C?.directoryRoot),Ys=!1,Kl=Dh(gt),Hr=vu(gt,"parts"),Mi=vu(gt,"topology"),ni=vu(gt,"measure"),el=vu(gt,"displayModes"),tl=WS(gt)===Ic.SIDECAR,ue=W?.kind==="assembly",Eo=Kl===Us.ROBOT,yd=!!(Eo&&(kr.current?.frameId||Ai.current?.frameId)),ri=tl?Ree(W):"",Pe=ri?lL(W):"",ge=Ya.url===ri?Ya.definition:null,Tt=UR(ge),dn=ri?Ya.url===ri?Ya.status:"loading":"idle",vr=Ya.url===ri?Ya.error:"",En=!!(ri&&dn==="loading"),wo=bf(W),nn=Zy(W),Lr=m1(W),bd=A_(W),Eg=p1(W),nu=_ee(W),wg=eL(W),nl=$e,vg=QD(W),qo=!!Za&&!!W&&Za.file===At(W)&&Za.meshHash===vg,ql=W?.kind==="assembly"&&qo&&!!Za?.assemblyStructureReady,As=W?.kind==="assembly"&&qo&&!!Za?.assemblyInteractionReady,ji=W?.kind==="assembly"&&qo&&!!Za?.assemblyBackgroundError,rl=!!Jc&&!!W&&Jc.file===At(W)&&Jc.implicitHash===Hn(W,"implicit"),ol=!!Qc&&!!W&&Qc.file===At(W)&&Qc.urdfHash===Hh(W),ut=ol?Qc.urdfData:null,xd=ol?Qc.meshesByUrl:null,Yl=rl?Jc.model:null,Yt=Yl?.definition||null,be=Kl===Us.ROBOT?At(W):"",ru=h.useMemo(()=>({...I8(ut),...Hce(ut)}),[ut]),gC=h.useMemo(()=>{if(!be)return{};const g=ct?.[be];return g&&typeof g=="object"?g:{}},[ct,be]),fr=h.useMemo(()=>({...ru,...gC}),[ru,gC]),Ix=h.useMemo(()=>{const g=ut?.motion,M=Array.isArray(g?.endEffectors)?g.endEffectors:[];return M.length?{...g,endEffectors:M}:null},[ut]),_m=h.useMemo(()=>{const g=Array.isArray(ut?.srdf?.groupStates)?ut.srdf.groupStates:Array.isArray(ut?.motion?.groupStates)?ut.motion.groupStates:[],T=g.map(P=>String(P?.name||"").trim()).filter(Boolean).reduce((P,L)=>P.set(L,(P.get(L)||0)+1),new Map);return g.map(P=>{const L=String(P?.name||"").trim(),B=String(P?.group||"").trim();if(!L||!B)return null;const H=nj(ut,P?.jointValuesByName||P?.jointValuesByNameRad);return{...P,id:`${B}/${L}`,label:T.get(L)>1?`${L} (${B})`:L,jointValuesByName:H}}).filter(Boolean)},[ut]),Ag=h.useMemo(()=>new Set((Array.isArray(ut?.joints)?ut.joints:[]).filter(g=>String(g?.type||"").trim()==="continuous").map(g=>String(g?.name||"").trim()).filter(Boolean)),[ut]),yC=h.useMemo(()=>Kce(_m,fr,ru)?.id||"",[ru,fr,_m]),Cg=be?String(ze?.[be]||"").trim():"",lj=h.useMemo(()=>Cg&&_m.some(g=>String(g?.id||"").trim()===Cg)?Cg:yC,[yC,_m,Cg]),bC=h.useMemo(()=>!Eue||!be||!Ix?.srdf?"":`${be}:${Hh(W)||""}`,[W,be,Ix]);h.useEffect(()=>{if(typeof window>"u")return;const g=new AbortController;let M=!0;const T=new URL("/__cad/server",window.location.href),P=BA(),L=Rb();return P&&T.searchParams.set("dir",P),L&&T.searchParams.set("file",L),fetch(`${T.pathname}${T.search}`,{cache:"no-store",signal:g.signal}).then(async B=>{if(!B.ok)throw new Error(`Failed to read CAD Viewer server info: ${B.status} ${B.statusText}`);return B.json()}).then(B=>{M&&A(B&&typeof B=="object"?B:{})}).catch(B=>{M&&B?.name!=="AbortError"&&A({})}),()=>{M=!1,g.abort()}},[c,l]),h.useEffect(()=>{let g=!0,M=0;const T=()=>{M&&(clearTimeout(M),M=0)};if(!bC)return Re(!1),()=>{g=!1,T()};Re(!1);const P=async()=>{const L=await cue({timeoutMs:750});g&&(Re(L),M=setTimeout(P,L?5e3:2e3))};return P(),()=>{g=!1,T()}},[bC]),h.useEffect(()=>{let g=!1;return ri?(dd({url:ri,status:"loading",error:"",definition:null}),Po({}),Sn(!0),Ho(Ip(null)),fc(),UU(ri,{cadPath:Pe}).then(M=>{if(g)return;const P=G1(ti,At(W),W)?.slices?.stepModule||null,L=Ip(M);dd({url:ri,status:"ready",error:"",definition:M});const B=yb(M,P?.parameterValues||M.defaultParameterValues),H=P?.animationState?{...L,...P.animationState,activeId:P.animationState.activeId||L.activeId,playing:!1}:L;ei.current=B,wr.current=H,Po(B),Sn(P?P.enabled!==!1:!0),Ho(H),fc({elapsedSec:H.elapsedSec,parameterValues:B})}).catch(M=>{g||(dd({url:ri,status:"error",error:M instanceof Error?M.message:String(M),definition:null}),Po({}),Sn(!0),Ho(Ip(null)),fc())}),()=>{g=!0}):(dd({url:"",status:"idle",error:"",definition:null}),Po({}),Sn(!0),Ho(Ip(null)),fc(),()=>{g=!0})},[ti,W,Pe,ri]),h.useEffect(()=>{if(!Yt||!W||gt!==Q.IMPLICIT){dr({});const L=U1(null);xo.current=L,Li(L);return}const M=G1(ti,At(W),W)?.slices?.implicit||null,T=U1(Yt);dr(Jf(Yt,M?.parameterValues||Yt.defaultParameterValues));const P=M?.animationState?{...T,...M.animationState,activeId:M.animationState.activeId||T.activeId,playing:!1}:T;xo.current=P,Li(P)},[ti,W,gt,Yt]);const ou=Ix,Sd=!!(We&&ou),vo=h.useMemo(()=>{if(!be)return{};const g=Ce?.[be];return g&&typeof g=="object"?g:{}},[be,Ce]),Mg=ou?.planningGroups||Np,xC=h.useMemo(()=>{const g=String(vo.activePlanningGroupName||"").trim();return g&&Mg.some(M=>String(M?.name||"").trim()===g)?g:String(Mg[0]?.name||"").trim()},[Mg,vo.activePlanningGroupName]),Xl=ou?.endEffectors||Np,wn=h.useMemo(()=>{const g=String(vo.activeEndEffectorName||"").trim();return g&&Xl.some(M=>String(M?.name||"").trim()===g)?g:String(Xl[0]?.name||"").trim()},[Xl,vo.activeEndEffectorName]),Zi=h.useMemo(()=>Xl.find(g=>String(g?.name||"").trim()===wn)||null,[wn,Xl]),Rm=h.useMemo(()=>Array.isArray(ut?.links)?ut.links.map(g=>String(g?.name||"").trim()).filter(Boolean):[],[ut]),zi=h.useMemo(()=>{const g=String(vo.targetFrame||"").trim();return g&&Rm.includes(g)?g:ut?.rootLink&&Rm.includes(ut.rootLink)?ut.rootLink:Rm[0]||""},[ut,vo.targetFrame,Rm]),fi=h.useMemo(()=>({planningGroup:xC,endEffector:wn,targetFrame:zi,ikTimeout:Math.max(yo(vo.ikTimeout,.05),.001),ikAttempts:Math.max(Math.round(yo(vo.ikAttempts,1)),1),ikTolerance:Math.max(yo(vo.ikTolerance,.002),1e-4),planningPipeline:String(vo.planningPipeline||"ompl").trim()||"ompl",plannerId:String(vo.plannerId||"RRTConnectkConfigDefault").trim()||"RRTConnectkConfigDefault",planningTime:Math.max(yo(vo.planningTime,1),.1),maxVelocityScalingFactor:Math.min(Math.max(yo(vo.maxVelocityScalingFactor,1),.01),1),maxAccelerationScalingFactor:Math.min(Math.max(yo(vo.maxAccelerationScalingFactor,1),.01),1)}),[wn,xC,vo,zi]),Ed=h.useMemo(()=>!ut||!Zi||!zi?null:ME(ut,fr,Zi.link,zi),[ut,Zi,fr,zi]),va=h.useMemo(()=>{const g=vo.targetsByEndEffector&&typeof vo.targetsByEndEffector=="object"?vo.targetsByEndEffector:{},M=wn?g[wn]:null;return vc(M,Ed||[0,0,0])},[Ed,wn,vo.targetsByEndEffector]),cj=!!(wn&&vo.solvingEndEffectorName===wn),Ig=be&&eo.fileRef===be?eo:null,iu=!!(be&&Sd&&Ig),Ng=h.useMemo(()=>{if(!ut||!xd)return{meshData:null,error:""};try{return{meshData:z8(ut,xd,{lightweight:!0}),error:""}}catch(g){return{meshData:null,error:g instanceof Error?g.message:String(g)}}},[ut,xd]),Tg=h.useMemo(()=>Array.isArray(ut?.joints)?ut.joints.filter(g=>String(g?.type||"")!=="fixed"&&!g?.mimic):[],[ut]),SC=h.useMemo(()=>{if(!ut||!Ng.meshData)return{meshData:null,error:Ng.error,linkWorldTransforms:new Map};try{return{...V8(ut,Ng.meshData,fr),error:""}}catch(g){return{meshData:null,error:g instanceof Error?g.message:String(g),linkWorldTransforms:new Map}}},[ut,fr,Ng]),no=Kl===Us.ROBOT?SC.meshData:qo?Za.meshData:null,Cs=h.useMemo(()=>xf(ge,pn.activeId),[ge,pn.activeId]),Pm=h.useMemo(()=>({...pn,activeId:Cs?.id||pn.activeId||"",duration:Cs?.duration||0,loop:Cs?.loop!==!1,loopEnabled:pn.loopEnabled??Cs?.loop!==!1}),[Cs,pn]),EC=h.useMemo(()=>!ge||!Oo?null:{definition:ge,parameterValues:yb(ge,Ur),animationState:Pm,cadPath:ge.cadPath||Pe,sourceUrl:ri},[Pm,Pe,ge,ri,Oo,Ur]),uj=h.useCallback(()=>{},[]),mi=!1,dj="";h.useEffect(()=>{ei.current=Ur},[Ur]),h.useEffect(()=>{wr.current=pn},[pn]);const fj=h.useCallback((g,M)=>{const T=String(g||"").trim(),P=ge?.parameterMap?.[T];P&&Po(L=>({...L,[T]:ed(P,M)}))},[ge]),wC=h.useCallback(g=>{Po(M=>({...M,...g}))},[]),vC=h.useCallback(()=>{if(!ge)return;const g=yb(ge,ge.defaultParameterValues),M=Ip(ge);ei.current=g,wr.current=M,Po(g),Ho(M),fc({elapsedSec:M.elapsedSec,parameterValues:g})},[ge]),mj=h.useCallback(g=>{const M=xf(ge,g),T={...wr.current,activeId:M?.id||"",playing:!1,elapsedSec:0,loopEnabled:M?.loop!==!1};wr.current=T,fc({elapsedSec:0,parameterValues:ei.current}),Ho(T)},[ge]),Nx=h.useCallback(()=>{const g=wr.current,M=xf(ge,g.activeId);if(!M)return;const T=Math.max(Number(M.duration)||0,.001);if(g.playing){const B=si(d1(),0,T),H=b_(),le=H&&typeof H=="object"&&Object.keys(H).length?H:ei.current;ei.current=le,Po(le),c1({elapsedSec:B,parameterValues:le});const he={...g,activeId:M.id,elapsedSec:B,playing:!1};wr.current=he,Ho(he);return}const P=g.elapsedSec>=T?0:si(g.elapsedSec,0,T);u1(P);const L={...g,activeId:M.id,elapsedSec:P,playing:!0};wr.current=L,Ho(L)},[ge]),pj=h.useCallback(()=>{const g=wr.current,M=xf(ge,g.activeId),T=ge&&M?Y1({definition:ge,animation:M,elapsedSec:0,speed:g.speed,parameterValues:ei.current}):ei.current;ei.current=T,Po(L=>wc(L,T)?L:T),fc({elapsedSec:0,parameterValues:T});const P={...g,elapsedSec:0,playing:!1};wr.current=P,Ho(P)},[ge]),hj=h.useCallback(g=>{const M=Math.max(Number(Cs?.duration)||1,.001),T=si(g,0,M);u1(T);const P={...wr.current,elapsedSec:T};wr.current=P,Ho(P)},[Cs]),gj=h.useCallback(g=>{const M={...wr.current,speed:si(g,.1,5)};wr.current=M,Ho(M)},[]),yj=h.useCallback(g=>{const M=wr.current,T=xf(ge,M.activeId),P=M.loopEnabled??T?.loop!==!1,B={...M,loopEnabled:typeof g=="boolean"?g:!P};wr.current=B,Ho(B)},[ge]),bj=h.useCallback(g=>{const M=g!==!1;if(Sn(M),!M){const T={...wr.current,playing:!1};wr.current=T,Ho(T)}},[]);h.useEffect(()=>{if(!ge||!Oo||!Cs||!pn.playing||typeof window>"u"||typeof window.requestAnimationFrame!="function")return;const g=ge,M=Cs,T=Math.max(Number(M.duration)||1,.001);let P=0,L=ml(),B=NaN,H=0,le=!1;u1(si(wr.current.elapsedSec,0,T));const he=Qe=>{const yt=wr.current;if(!yt.playing||yt.activeId!==M.id)return;if(le&&(H=Qe-B,le=!1),!Pce({timeMs:Qe,publishedAtMs:B,publishCostMs:H})){P=window.requestAnimationFrame(he);return}const _t=Math.max((Qe-L)/1e3,0);L=Qe,B=Qe,le=!0;const Pt=si(yt.speed,.1,5);let Lt=d1()+_t*Pt,Do=yt.playing;yt.loopEnabled??M.loop!==!1?Lt%=T:Lt>=T&&(Lt=T,Do=!1);const go=Y1({definition:g,animation:M,elapsedSec:Lt,speed:Pt,parameterValues:ei.current});if(c1({elapsedSec:Lt,parameterValues:go}),!Do){ei.current=go,Po(ic=>wc(ic,go)?ic:go);const Qi={...yt,elapsedSec:Lt,speed:Pt,playing:!1};wr.current=Qi,Ho(Qi);return}P=window.requestAnimationFrame(he)};return P=window.requestAnimationFrame(he),()=>{window.cancelAnimationFrame(P)}},[Cs,ge,Oo,pn.playing]),h.useEffect(()=>{const g=Cs;if(!ge||!Oo||typeof g?.update!="function"){fc({elapsedSec:0,parameterValues:ei.current});return}if(pn.playing)return;const M=Math.max(Number(g.duration)||1,.001),T=si(pn.elapsedSec,0,M),P=Y1({definition:ge,animation:g,elapsedSec:T,speed:pn.speed,parameterValues:ei.current});ei.current=P,Po(L=>wc(L,P)?L:P),c1({elapsedSec:T,parameterValues:P})},[Cs,ge,Oo,pn.elapsedSec,pn.playing,pn.speed]);const Ii=h.useMemo(()=>Xp(Yt,Mn.activeId),[Mn.activeId,Yt]),Om=h.useMemo(()=>({...Mn,activeId:Ii?.id||Mn.activeId||"",duration:Ii?.duration||0,loop:Ii?.loop!==!1,loopEnabled:Mn.loopEnabled??Ii?.loop!==!1}),[Mn,Ii]),Tx=e2(Xa,KR,w),_x=e2(Om,KR,w),AC=h.useMemo(()=>{if(!Yl)return{model:null,error:""};if(!Yt?.buildModel)return{model:Yl,error:""};try{return{model:Yt.buildModel(Tx,_x),error:""}}catch(g){return{model:null,error:g instanceof Error?g.message:String(g)}}},[_x,Tx,Yt,Yl]),wd=AC.model,vd=AC.error,km=Dh(gt)===Us.IMPLICIT?wd:no;h.useEffect(()=>{xo.current=Mn},[Mn]);const Zl=h.useCallback(()=>{typeof window>"u"||typeof window.setTimeout!="function"||(po.current&&window.clearTimeout(po.current),Am(!0),po.current=window.setTimeout(()=>{po.current=0,Am(!1)},Aue))},[]);h.useEffect(()=>()=>{po.current&&typeof window<"u"&&(window.clearTimeout(po.current),po.current=0)},[]);const xj=!wc(Xa,Tx)||Om.elapsedSec!==_x.elapsedSec,Sj=!!(Yl&&(Mn.playing||hg||xj)),Ej=h.useCallback((g,M)=>{const T=String(g||"").trim(),P=Yt?.parameterMap?.[T];if(!P)return;const L=ed(P,M);Zl(),dr(B=>B?.[T]===L?B:{...B,[T]:L})},[Zl,Yt]),CC=h.useCallback(g=>{Zl(),dr(M=>({...M,...g}))},[Zl]),MC=h.useCallback(()=>{if(!Yt)return;Zl(),dr(Jf(Yt,Yt.defaultParameterValues));const g=U1(Yt);xo.current=g,Li(g)},[Zl,Yt]),Ad=h.useMemo(()=>{switch(WS(gt)){case Ic.SIDECAR:return{label:"STEP",definition:ge,values:Ur,applyValues:wC,reset:vC};case Ic.MODULE:return{label:"implicit",definition:Yt,values:Xa,applyValues:CC,reset:MC};default:return null}},[CC,wC,MC,vC,Xa,gt,Yt,ge,Ur]),IC=h.useCallback(async()=>{cn("");const g=Ad;if(!g?.definition?.parameters?.length){_e(`No ${g?.label||"model"} parameters to copy`);return}try{await js(Noe(g.definition,g.values)),_e(`Copied ${g.label} parameters`)}catch(M){_e(M instanceof Error?M.message:"Clipboard write failed")}},[Ad]),NC=h.useCallback(async()=>{cn("");const g=Ad;if(!g?.definition?.parameters?.length){_e(`No ${g?.label||"model"} parameters to paste`);return}try{const M=await GG(),{values:T,count:P}=Toe(g.definition,M,{label:`${g.label} parameter`,unknownLabel:`${g.label} parameter`});g.applyValues(T),_e(`Pasted ${P} ${g.label} param${P===1?"":"s"}`)}catch(M){_e(M instanceof Error?M.message:"Clipboard paste failed")}},[Ad]),TC=h.useCallback(()=>{Ad?.reset()},[Ad]),wj=h.useCallback(g=>{const M=Xp(Yt,g);Li(T=>{const P={...T,activeId:M?.id||"",playing:!1,elapsedSec:0,loopEnabled:M?.loop!==!1};return hf(xo,T,P)})},[Yt]),Rx=h.useCallback(()=>{Li(g=>{const M=Xp(Yt,g.activeId);if(!M)return g;const T=Math.max(Number(M.duration)||0,.001),P=g.elapsedSec>=T?0:g.elapsedSec,L={...g,activeId:M.id,elapsedSec:P,playing:!g.playing};return hf(xo,g,L)})},[Yt]),vj=h.useCallback(()=>{Li(g=>{const M={...g,elapsedSec:0,playing:!1};return hf(xo,g,M)})},[]),Aj=h.useCallback(g=>{const M=Math.max(Number(Ii?.duration)||1,.001);Zl(),Li(T=>{const P={...T,elapsedSec:si(g,0,M)};return hf(xo,T,P)})},[Zl,Ii]),Cj=h.useCallback(g=>{Li(M=>{const T={...M,speed:si(g,.1,5)};return hf(xo,M,T)})},[]),Mj=h.useCallback(g=>{const M=Xp(Yt,xo.current.activeId);Li(T=>{const P=T.loopEnabled??M?.loop!==!1,B={...T,loopEnabled:typeof g=="boolean"?g:!P};return hf(xo,T,B)})},[Yt]),_g=h.useMemo(()=>{switch(WS(gt)){case Ic.SIDECAR:return{available:Tt,playing:Pm.playing,disabled:!Oo,onPlayToggle:Nx};case Ic.MODULE:return{available:UR(Yt),playing:Om.playing,disabled:!1,onPlayToggle:Rx};default:return null}},[Rx,Nx,gt,Om.playing,Yt,Pm.playing,Tt,Oo]);h.useEffect(()=>{if(!Yt||!Ii||!Mn.playing||typeof window>"u"||typeof window.setTimeout!="function")return;let g=ml(),M=0;const T=()=>{const P=ml(),L=Math.min(Math.max((P-g)/1e3,0),.25);g=P;const B=xo.current;if(B.playing&&B.activeId===Ii.id){const H=Math.max(Number(Ii.duration)||1,.001),le=si(B.speed,.1,5);let he=B.elapsedSec+L*le,Qe=B.playing;B.loopEnabled??Ii.loop!==!1?he%=H:he>=H&&(he=H,Qe=!1);const _t={...B,elapsedSec:he,speed:le,playing:Qe};xo.current=_t,Li(_t),dr(Pt=>{try{const Lt=t2(Yt,Ii,Pt,he);return wc(Pt,Lt)?Pt:Lt}catch(Lt){return console.error("Implicit parameter animation update failed",Lt),Pt}})}M=window.setTimeout(T,qR)};return M=window.setTimeout(T,qR),()=>{window.clearTimeout(M)}},[Mn.playing,Ii,Yt]),h.useEffect(()=>{const g=Ii;!Yt||typeof g?.update!="function"||dr(M=>{try{const T=t2(Yt,g,M,Mn.elapsedSec);return wc(M,T)?M:T}catch(T){return console.error("Implicit parameter animation update failed",T),M}})},[Mn.elapsedSec,Ii,Yt]);const fn=ql&&no?.assemblyRoot||null,Rg=ql&&Array.isArray(no?.assemblyMates)?no.assemblyMates:[],Jl=h.useMemo(()=>{const g=new Map;for(const M of Rg){const T=String(M?.id||"").trim();T&&g.set(T,M)}return g},[Rg]),Ln=h.useMemo(()=>Hr?yG({selectedEntry:W,assemblyRoot:fn,meshData:no}):null,[fn,Hr,W,no]),Pg=h.useMemo(()=>Array.isArray(no?.parts)?no.parts:TF(fn),[fn,no?.parts]),Dm=h.useMemo(()=>ue?Pg:Ln?[{id:Qp,label:Ln.displayName||Ln.name||"STEP part",name:Ln.displayName||Ln.name||"STEP part",nodeType:"part",bounds:no?.bounds||null}]:[],[Pg,ue,no?.bounds,Ln]);h.useMemo(()=>TR(fn),[fn]);const Og=h.useMemo(()=>TR(Ln),[Ln]),Lm=h.useMemo(()=>Og.map(g=>String(g?.id||"").trim()).filter(Boolean),[Og]),_C=h.useMemo(()=>new Set(Lm),[Lm]),Ql=h.useMemo(()=>dle(fn),[fn]),Fn=h.useMemo(()=>!ue||!fn||!Xe.length?[]:Vb(fn,Xe,{rootId:Ql}),[fn,Ql,Xe,ue]),su=h.useMemo(()=>Mi&&ue&&Lr?Rue(Ln):[],[ue,Mi,Lr,Ln]),RC=h.useMemo(()=>new Set(su),[su]),Xs=h.useMemo(()=>!Mi||!ue||!Lr?[]:jn(Ie.map(g=>String(g||"").trim()).filter(g=>g&&RC.has(g))),[Ie,ue,Mi,RC,Lr]),au=h.useMemo(()=>ue?bue(fn,Ie,{rootId:Ql,isolatedNodeIds:Fn}):[],[fn,Ql,Ie,Fn,ue,Xs]),PC=h.useMemo(()=>new Set(au),[au]),kg=h.useMemo(()=>au.length?au.map(g=>Oc(fn,g)).filter(Boolean).map(g=>({...g,leafPartIds:qh(g)})):[],[fn,au]),OC=h.useMemo(()=>fle(kg),[kg]),Px=ue?ql:Hr&&qo&&!!no,kC=Hr&&Px&&Dm.length>0,Ms=h.useMemo(()=>{const g=new Map;for(const M of Og)g.set(M.id,M);for(const M of Dm)g.set(M.id,M);return g},[Dm,Og]);h.useEffect(()=>{if(!ue||!fn){sn(g=>g.length?[]:g);return}sn(g=>{const M=Vb(fn,g,{rootId:Ql});return df(M,g)?g:M})},[fn,Ql,ue]);const Aa=h.useMemo(()=>Dm.map(g=>String(g?.id||"").trim()).filter(Boolean),[Dm]),Dg=h.useMemo(()=>new Set(Aa),[Aa]),Ca=h.useCallback(g=>mle(g,{pickPartIdMap:OC,validLeafPartIds:Dg}),[OC,Dg]),In=h.useCallback((g,M="")=>String(g||"").trim()===Fs?[Qp]:ple(g,{assemblyPartMap:Ms,fallbackPartId:M,validLeafPartIds:Dg}),[Ms,Dg]),Ox=h.useCallback((g,M="")=>In(g,M)[0]||"",[In]);h.useLayoutEffect(()=>{const g=new Set((Array.isArray(st)?st:[]).map(M=>String(M||"").trim()).filter(Boolean));g.size&&Je(M=>{let T=!1;const P=M.filter(L=>{const B=In(L).map(le=>String(le||"").trim()).filter(Boolean);return B.length>0&&B.every(le=>g.has(le))?(T=!0,!1):!0});return T?P:M})},[st,In]);const DC=SC.error,gn=gt,kx=!!W&&Ss!==Ft.ERROR&&(!rl||Ss===Ft.LOADING),Dx=!!W&&md!==Ft.ERROR&&(!ol||md===Ft.LOADING),Ij=Ab(gn)&&vt.status==="error",Lg=!!W&&!wg&&(nl||!Ij)&&xs!==Ft.ERROR&&(!qo||xs===Ft.LOADING||En),Ma={[Mo.IMPLICIT]:kx,[Mo.ROBOT]:Dx,[Mo.MESH]:Lg,[Mo.DRAWING]:Lg}[gf(gn)],Lx=Ma||$e||Rn,LC=h.useMemo(()=>Lx&&Se?[At(Se)]:[],[Lx,Se]),Fx=ue&&qo&&!Px&&!ji,FC=ue&&qo&&ql&&!As&&!ji,Nj=`Loading ${Lh(gn)} robot...`,jC=$e||Ab(gn)?"":{[Mo.IMPLICIT]:"Loading implicit CAD...",[Mo.ROBOT]:$l?`${Sue($l)}...`:Nj,[Mo.MESH]:`Loading ${Lh(gn)}...`,[Mo.DRAWING]:""}[gf(gn)],lu=$e?"Generating file...":jC||(Ot||nl?Eu:En?"Loading STEP module...":W&&!wo?Eu:"Loading CAD..."),zC=Array.isArray(W?.bendAxisX)?W.bendAxisX.length:0,Ao=gt===Q.DXF,Tj=Ao?Ah(Yn)/soe:1,ec=h.useMemo(()=>qn?.blocking?qn:!W||Ma||$e?null:gn===Q.IMPLICIT?ace(At(W),!!wd,Ss===Ft.ERROR?to:vd)||qn:GS(gn)?GR(W,!!no,md===Ft.ERROR?gg:DC)||qn:GR(W,!!no,xs===Ft.ERROR?fd:"",vt)||qn,[gn,fd,to,Ss,W,vt,$e,vd,wd,no,DC,xs,gg,md,Ma,qn]),_j=ec?[At(W),ec.severity,ec.summary,ec.title].join(":"):"",BC=!!(ue&&Xs.length>0&&au.length<1),Is=ue&&au.length>0,Rj=Is?"assembly":"part",Pj=Mf(gt,"draw")&&_o===Cr.DRAW,VC=_o===Cr.PAN,Oj=ce.length+j.length+X.length,Jn=h.useRef(j),pi=h.useRef(X),yn=h.useRef(ce),jx=h.useRef({fileRef:"",stepHash:""}),il=h.useRef(Ro),Fm=h.useRef(wi),jm=h.useRef(Kt),Ns=h.useRef(null),Fg=h.useRef(null),jg=h.useRef(null),Cd=h.useRef(0),$C=h.useRef(S),cu=h.useRef(null),zg=h.useRef(null),Bg=h.useRef(""),kj=h.useRef(!1);h.useEffect(()=>{$C.current=S},[S]);const uu=Tn,GC=h.useMemo(()=>[...p].sort((g,M)=>g.localeCompare(M,void 0,{numeric:!0,sensitivity:"base"})),[p]),zm=h.useMemo(()=>wA(lt),[lt]),Fr=h.useCallback(g=>{Ut(M=>typeof g=="function"?g(M):g)},[]),UC=h.useMemo(()=>uee(Vn),[Vn]);h.useEffect(()=>{nee({fileViewerOpen:pt,fileViewerExpandedDirectoryIds:y?GC:null,fileViewerWidthPx:Ae,fileSheetOpen:uu,fileSheetWidthPx:ur?pe:zm,theme:UC},{defaultFileSheetWidthPx:zm,onWriteError:Ci})},[zm,y,GC,ur,Ci,pt,Ae,uu,pe,UC]),h.useEffect(()=>{ur||ft(zm)},[zm,ur]);const Ts=rt&&!or&&(Er||uu&&!!Le&&So),Bm=pt&&!or,_s=rt&&Bm&&!or,Dj=h.useCallback(g=>{lee(g,{onWriteError:Ci}),Ze(fw())},[Ci]),Lj=h.useCallback(g=>{Ze(M=>{const T=typeof g=="function"?g(M.settings):g,P=Pi(T);cee(P,{onWriteError:Ci});const L=zP(P);return{themeId:L||Pl,custom:L?M.custom:P,settings:P}})},[Ci]),Fj=h.useCallback(()=>{ie(!1)},[]),HC=h.useRef(null);h.useEffect(()=>{if(!(!Ao||!w||HC.current!==w))try{window.sessionStorage?.setItem(`cadViewer.dxfSettings:${w}`,JSON.stringify({thicknessMm:Yn,bends:ae,bendStyle:bn,bendRadiusMm:rr,kFactor:k,hiddenLayers:fe,units:qe,orientation:ht,material:Rt}))}catch{}},[Ao,w,Yn,ae,bn,rr,k,fe,qe,ht,Rt]),h.useEffect(()=>{let g=null;if(Ao&&w)try{const M=window.sessionStorage?.getItem(`cadViewer.dxfSettings:${w}`);g=M?JSON.parse(M):null}catch{g=null}HC.current=w,kt(Ah(g?.thicknessMm,Eh)),Jr(kw(g?.bendStyle,L0)),Or(jb(g?.bendRadiusMm,F0)),oe(zb(g?.kFactor,wh)),Fe(Array.isArray(g?.hiddenLayers)?g.hiddenLayers.filter(M=>typeof M=="string"):[]),Ye(B0(g?.units,Ff)),Dn(Q_(g?.orientation)),Xn(QA(g?.material,vh)),cr(Array.from({length:zC},(M,T)=>({angleDeg:V0(g?.bends?.[T]?.angleDeg,Pw),direction:Ow(g?.bends?.[T]?.direction)})))},[w,zC,Ao]);const Md=Ao?String(W?.relations?.drawingGeometry?.url||""):"";h.useEffect(()=>{if(!Md){An(null);return}const g=It.current;if(g.has(Md)){An(g.get(Md));return}let M=!1;return fetch(Md).then(T=>T.ok?T.json():null).then(T=>{M||(T&&g.set(Md,T),An(T))}).catch(()=>{M||An(null)}),()=>{M=!0}},[Md]);const jj=h.useCallback((g,M)=>{cr(T=>T.map((P,L)=>L===g?{...P,...M}:P))},[]),zj=h.useCallback(()=>{kt(Eh),Ye(Ff),Xn(vh)},[]),Bj=h.useCallback(()=>{cr(g=>g.map(()=>({angleDeg:Pw,direction:"up"})))},[]),Vj=h.useCallback(()=>{Dn(J_)},[]),$j=h.useCallback(g=>{Dn(M=>{const T=Q_(M);return{...T,[g]:(T[g]+1)%4}})},[]),Gj=h.useCallback((g,M)=>{Fe(T=>{const P=T.filter(L=>L!==g);return M||P.push(g),P})},[]),Uj=h.useMemo(()=>{if(!tt?.geometry)return null;try{return iP(tt).map(g=>({start:g.start,end:g.end}))}catch{return null}},[tt]),Vg=h.useMemo(()=>Array.isArray(tt?.layers)?tt.layers:[],[tt]),Hj=h.useMemo(()=>ae.map(g=>V0(g.angleDeg)*Math.PI/180*(g.direction==="down"?-1:1)),[ae]),Wj=h.useCallback(g=>{const M=g==="2d"?"2d":"3d";if(un(M),M==="2d"){Ns.current?.activateViewPlaneFace?.("z");return}Ns.current?.activateDefaultViewPlane?.()},[]),Kj=h.useCallback(g=>{Ns.current?.applyZoomPercent?.(g)},[]),qj=h.useCallback(()=>{Ns.current?.resetView?.(),Mt==="2d"&&Ns.current?.activateViewPlaneFace?.("z")},[Mt]),Yj=h.useCallback(()=>{ie(g=>g?!1:(_n(!1),Fr(!1),!0))},[Fr]),Xj=h.useCallback(g=>{fo(g||null)},[]),Zj=h.useCallback(()=>{document.querySelector("[data-slot='sidebar-wrapper']")?.removeAttribute("data-sidebar-resizing"),jg.current=null,zg.current||(document.body.style.cursor="",document.body.style.userSelect="")},[]),Jj=h.useCallback(()=>{zg.current=null,jg.current||(document.body.style.cursor="",document.body.style.userSelect="")},[]),Qj=h.useCallback(g=>{if(g.button!==0||!rt||!Bm)return;g.preventDefault();const M=ff({viewportWidth:lt,sidebarOpen:_s,sheetOpen:Ts,sidebarWidth:Ae,sheetWidth:pe,sidebarMinWidth:pc,sheetMinWidth:wu,sidebarMaxWidth:mf,sheetMaxWidth:pf}).sidebarWidth;document.querySelector("[data-slot='sidebar-wrapper']")?.setAttribute("data-sidebar-resizing","true"),jg.current={startX:g.clientX,startWidth:M,latestWidth:M},document.body.style.cursor="col-resize",document.body.style.userSelect="none"},[Ts,_s,Bm,rt,lt,Ae,pe]),$g=h.useCallback(g=>{at(M=>{const T=typeof g=="function"?g(M):g;return T&&!rt&&Fr(!1),!M&&T&&jt(P=>{const L=Number(P);return Number.isFinite(L)&&L>=pc?P:mb}),T})},[rt,Fr]),Id=h.useCallback(g=>{if(g.button!==0||!Ts)return;g.preventDefault(),Cn(!0);const M=ff({viewportWidth:lt,sidebarOpen:_s,sheetOpen:Ts,sidebarWidth:Ae,sheetWidth:pe,sidebarMinWidth:pc,sheetMinWidth:wu,sidebarMaxWidth:mf,sheetMaxWidth:pf}).sheetWidth;zg.current={startX:g.clientX,startWidth:M},document.body.style.cursor="col-resize",document.body.style.userSelect="none"},[Ts,_s,lt,Ae,Cn,pe]),WC=h.useCallback(()=>{yn.current=[],Jn.current=[],Ee([]),ee([]),mt({}),ye(""),Me(""),de(""),Qt(""),Kn(""),_e("")},[]),Gg=h.useCallback((g,M,T=null)=>{if(!M)return g;const P=T?T0(T):null,L=g.findIndex(le=>le.key===M);if(L===-1)return P?[...g,bp(M,P)]:[...g,bp(M)];if(!P)return g;const B=g[L];if(XD(B,P))return g;const H=[...g];return H[L]={key:M,...P},H},[]),tc=h.useMemo(()=>$e?[]:Qre({entry:W,fileSheetKind:Le,stepSourceStatus:qt,urdfData:ut,viewerAlert:ec,stepArtifactGenerationAvailable:Ko,activeGenerationFiles:Wt,viewerServerInfo:C}),[Wt,W,Le,$e,Ko,qt,ut,ec,C]),KC=h.useMemo(()=>_L(tc),[tc]),qC=Bre(tc),Ug=h.useMemo(()=>({hasStepModulePanel:!!(ge||dn==="loading"||vr),hasImplicitParameterPanel:!!(Ss===Ft.LOADING||vd||Yt?.parameters?.length||Yt?.animations?.length),hasFileStatus:qC,hasDxfBendsPanel:Le==="dxf"&&ae.length>0,hasDxfLayersPanel:Le==="dxf"&&Vg.length>1,isSdf:Le==="sdf",motionEnabled:Le==="srdf"&&We&&Xl.length>0,showJoints:Le==="urdf"||Le==="srdf"||Le==="sdf"}),[Ss,Yt,vd,Le,qC,ge,vr,dn,We,Xl,ae,Vg]),ro=h.useMemo(()=>B_(Le,Ug),[Ug,Le]),du=h.useMemo(()=>hne(Le,Ug),[Ug,Le]),sl=h.useMemo(()=>ea(Array.isArray(I)?I:du,ro),[du,I,ro]),Vm=h.useCallback(g=>{R(ea(g,ro))},[ro]),YC=h.useCallback((g,{openSheet:M=!0}={})=>{const T=String(g||"").trim();return!T||!ro.includes(T)?!1:(M&&Fr(!0),R(P=>{const L=ea(Array.isArray(P)?P:sl,ro);return L.includes(T)?L:ea([...L,T],ro)}),!0)},[sl,ro,Fr]);h.useEffect(()=>{if(!Array.isArray(I))return;const g=ea(I,ro);df(g,I)||R(g)},[I,ro]),h.useEffect(()=>{KC===hr.ERROR&&R(g=>{const M=ea(Array.isArray(g)?g:du,ro),T=gne(M,ro,Bt.FILE_STATUS);return df(T,M)?g:T})},[du,ro,KC,w]),h.useEffect(()=>{if(Le!==Q.IMPLICIT)return;const g=Bt.STEP_PARAMETERS,M=Bt.IMPLICIT_GRAPHICS,T=ro.includes(g),P=ro.includes(M);!T&&!P||R(L=>{const B=ea(Array.isArray(L)?L:du,ro).filter(le=>le!==M),H=T&&!B.includes(g)?[...B,g]:B;return df(H,ea(Array.isArray(L)?L:du,ro))?L:ea(H,ro)})},[du,ro,Le,w]);const $m=h.useCallback(()=>T0({referenceQuery:Y,selectedReferenceIds:j,selectedPartIds:ce,inspectedAssemblyNodeId:"",expandedStepTreeNodeIds:Ie,fileSheetOpenSectionIds:sl,hiddenPartIds:st,camera:cu.current,drawingTool:Qr,tabToolMode:_o,drawingStrokes:Ro,drawingUndoStack:wi,drawingRedoStack:Kt}),[Qr,Kt,Ro,wi,sl,Ie,st,Y,ce,j,_o]),Gm=h.useCallback((g,M=null)=>{const T=String(g||"").trim();return T?G1(ti,T,M||ho.get(T)):null},[ho,ti]),XC=h.useCallback(g=>{const M=g||W,T=At(M),P=T&&ct?.[T]?ct[T]:{},L=T&&Ce?.[T]?Ce[T]:{},B=pn.playing?{...pn,elapsedSec:d1()}:pn,H=pn.playing?b_():Ur;return Ace({fileKey:T,entry:M,slices:{...Nr(M)===Q.STEP?{display:St}:{},tab:$m(),stepModule:{enabled:Oo,parameterValues:H,animationState:B},urdf:{jointValues:P,motionState:L},largeFile:{selectableTopologyEnabled:q.selectableTopologyEnabled}}})},[$m,St,Mn,Xa,ct,q,W,pn,Oo,Ur,Ce]),Nd=h.useCallback(()=>{if(!Cd.current||typeof window>"u"){Cd.current=0;return}window.clearTimeout(Cd.current),Cd.current=0},[]),Hg=h.useCallback(g=>{const M=At(g);return M?Cce(ti,M,XC(g),{onWriteError:Ci}):!0},[XC,ti,Ci]),Wg=h.useCallback(()=>(Nd(),W?Hg(W):!0),[Nd,W,Hg]),Kg=h.useCallback(()=>{!W||typeof window>"u"||(Nd(),Cd.current=window.setTimeout(()=>{Cd.current=0,Hg(W)},180))},[Nd,W,Hg]),zx=h.useCallback((g,M=null)=>{const T=String(g||"").trim();if(!T)return;const P=M||Gm(T);re(pb(P?.slices?.largeFile));const L=ho.get(T);Rr(Nr(L)===Q.STEP?$i(P?.slices?.display):$i());const B=P?.slices?.stepModule||null;B&&(Sn(B.enabled!==!1),Po(B.parameterValues||{}),Ho({activeId:String(B.animationState?.activeId||""),playing:!1,elapsedSec:Math.max(Number(B.animationState?.elapsedSec)||0,0),speed:si(B.animationState?.speed,.1,5)}));const H=P?.slices?.implicit||null;if(H){dr(H.parameterValues||{});const he={activeId:String(H.animationState?.activeId||""),playing:!1,elapsedSec:Math.max(Number(H.animationState?.elapsedSec)||0,0),speed:si(H.animationState?.speed,.1,5)};xo.current=he,Li(he)}const le=P?.slices?.urdf||null;le?(vi(he=>({...he,[T]:le.jointValues||{}})),Uo(he=>({...he,[T]:le.motionState||{}}))):(vi(he=>{if(!he?.[T])return he;const Qe={...he};return delete Qe[T],Qe}),Uo(he=>{if(!he?.[T])return he;const Qe={...he};return delete Qe[T],Qe}))},[ho,Gm]),ZC=h.useCallback(g=>{const M=String(g||"").trim(),T=tT(ho.get(M));return M&&T?`${M}:${T}`:""},[ho]),Bx=h.useCallback(g=>{const M=bp(g?.key||"",g||{}),T=sa(M.camera);Bg.current=ZC(M.key),D(M.referenceQuery),Jn.current=M.selectedReferenceIds,ee(M.selectedReferenceIds),pi.current=[],ve([]),yn.current=M.selectedPartIds,Ee(M.selectedPartIds),mt({}),ye(""),Je(M.expandedStepTreeNodeIds),R(M.fileSheetOpenSectionIds),xt(M.hiddenPartIds),sn([]),Me(""),de(""),we(""),Qt(""),Kn(""),_e(""),cn(""),$o(M.tabToolMode),Vo(M.drawingTool),cu.current=T,Sa(T),Ei(M.drawingStrokes),mo(M.drawingUndoStack),Go(M.drawingRedoStack),_(M.key)},[ZC]),ez=h.useCallback(()=>{Jn.current=[],pi.current=[],yn.current=[],ye(""),D(""),ee([]),ve([]),Ee([]),mt({}),Je([]),R(null),xt([]),sn([]),Rr($i()),re(pb(YR)),Me(""),de(""),we(""),Qt(""),Kn(""),_e(""),cn(""),Fr(!1),$o(Cr.REFERENCES),Vo(an.FREEHAND),cu.current=null,Sa(null),Ei([]),mo([]),Go([]),_("")},[Fr]),Um=h.useCallback(g=>{if(!g||!ho.has(g)||g===w)return;w&&Wg();const M=$C.current,T=ho.get(g),P=Gm(g,T),L=P?.slices?.tab||null,B=M.find(_t=>_t.key===g)||bp(g,{drawingTool:w?Qr:an.FREEHAND,tabToolMode:w?_o:Cr.REFERENCES,...L||{}}),H=T?Im(T):null,le=T?hd(T):null,he=T?xg(T):null,Qe=T?gd(T):null,yt=w?$m():null;E(_t=>{let Pt=_t;return w&&(Pt=Gg(Pt,w,yt)),Pt=Gg(Pt,g,B),Pt}),bf(T)?H&&(Yi(H),Zc(Ft.READY),Ja("")):(Zc(Ft.PENDING),Ja("")),m1(T)?le&&(eu(le),Ul(le.disabledReason?zn.DISABLED:zn.READY),Hl(le.disabledReason||"")):(eu(null),Ul(zn.DISABLED),Hl("")),Nr(T)!==Q.IMPLICIT?(Qa(null),Es(Ft.PENDING),wa("")):Qe?(Qa(Qe),Es(Ft.READY),wa("")):(Qa(null),Es(Ft.PENDING),wa("")),Zy(T)?he&&(Wo(he),Vl(Ft.READY),qs("")):(Wo(null),Vl(Ft.PENDING),qs("")),Bx(B),zx(g,P)},[zx,Bx,$m,Qr,ho,Wg,gd,Im,hd,xg,Gm,w,wa,Qa,Es,qs,Wo,Vl,_o,Gg]),tz=h.useCallback(g=>_u(g),[]);nce({manifestEntries:s,cadFileParamForEntry:tz,cadDirectorySessionBootstrappedRef:kj,setOpenTabs:E,applyTabRecord:Bx,selectedEntryKeyFromUrl:fte,createTabRecord:bp,initialSelectedTabSnapshot:{drawingTool:an.FREEHAND,tabToolMode:Cr.REFERENCES},upsertTabRecord:Gg,selectedEntry:W,defaultDocumentTitle:bk,selectedKey:w,entryMap:ho,buildActiveTabSnapshot:$m,catalogEntries:a,manifestRevision:t,readCadParam:Rb,activateEntryTab:Um,resetActiveDirectory:ez,writeCadParam:xp,readEntrySessionState:Gm,applyEntrySessionState:zx}),h.useEffect(()=>{if(!(pn.playing||Mn.playing))return Kg(),()=>{Nd()}},[Nd,Mn.playing,Kg,pn.playing]),h.useEffect(()=>{if(typeof window>"u")return;const g=()=>{Wg()};return window.addEventListener("pagehide",g),()=>{window.removeEventListener("pagehide",g)}},[Wg]),h.useEffect(()=>{VQ(ui,document.documentElement)},[ui]),h.useEffect(()=>(document.documentElement.dataset.glassTone=Bo,()=>{delete document.documentElement.dataset.glassTone}),[Bo]),h.useEffect(()=>(document.documentElement.style.setProperty("--cad-scene-backdrop",eU(xn)),()=>{document.documentElement.style.removeProperty("--cad-scene-backdrop")}),[xn]),h.useEffect(()=>{const g=M=>{if(Ice(M.key)!==Yp.IGNORE)try{Ze(fw())}catch(P){console.warn("Failed to sync theme from another tab",P)}};return window.addEventListener("storage",g),()=>{window.removeEventListener("storage",g)}},[]),h.useEffect(()=>{Jn.current=j},[j]),h.useEffect(()=>{pi.current=X},[X]),h.useEffect(()=>{yn.current=ce},[ce]),h.useEffect(()=>{if(!Fn.length||!ce.length)return;const g=new Set(Fn),M=ce.filter(T=>!g.has(String(T||"").trim()));M.length!==ce.length&&(yn.current=M,Ee(M),mt(T=>{const P=new Set(M),L={};for(const[B,H]of Object.entries(T||{}))P.has(B)&&(L[B]=H);return L}),_e(""))},[Fn,ce]),h.useEffect(()=>{const g=w&&Le?`${w}:${Le}`:"";if(!g){Bg.current="";return}Bg.current!==g&&(Bg.current=g)},[Le,w]),h.useEffect(()=>{const g=At(W),M=String(W?.hash||Hn(W,"topology")||"").trim();if(!g){jx.current={fileRef:"",stepHash:""},Nn(!1);return}const T=jx.current,P=T.fileRef===g;P&&!!T.stepHash&&!!M&&T.stepHash!==M?(WC(),Nn(!0)):P||Nn(!1),jx.current={fileRef:g,stepHash:M}},[WC,W]),h.useEffect(()=>{if(Ot){if(!W){Nn(!1);return}qo&&xs!==Ft.LOADING&&Nn(!1)}},[W,qo,xs,Ot]),h.useEffect(()=>{il.current=Ro},[Ro]),h.useEffect(()=>{Fm.current=wi},[wi]),h.useEffect(()=>{jm.current=Kt},[Kt]),h.useEffect(()=>{gn!==Q.STEP||!Lr||$o(g=>g!==Cr.DRAW||il.current.length?g:Cr.REFERENCES)},[gn,w,Lr]),h.useEffect(()=>{_n(!1)},[_j]),h.useEffect(()=>{fo(null)},[w]);const JC=h.useMemo(()=>ff({viewportWidth:lt,sidebarOpen:_s,sheetOpen:Ts,sidebarWidth:Ae,sheetWidth:pe,sidebarMinWidth:pc,sheetMinWidth:wu,sidebarMaxWidth:mf,sheetMaxWidth:pf}),[Ts,_s,lt,Ae,pe]),nz=h.useCallback(g=>ff({viewportWidth:lt,sidebarOpen:_s,sheetOpen:Ts,sidebarWidth:g,sheetWidth:pe,sidebarMinWidth:pc,sheetMinWidth:wu,sidebarMaxWidth:mf,sheetMaxWidth:pf}).sidebarWidth,[Ts,_s,lt,pe]),rz=h.useCallback(g=>ff({viewportWidth:lt,sidebarOpen:_s,sheetOpen:Ts,sidebarWidth:Ae,sheetWidth:g,sidebarMinWidth:pc,sheetMinWidth:wu,sidebarMaxWidth:mf,sheetMaxWidth:pf}).sheetWidth,[Ts,_s,lt,Ae]);Jle({isDesktop:rt,setLayoutMode:dt,setSidebarOpen:at,setTabToolsOpen:Fr,setLayoutViewportWidth:nr,clampSidebarWidth:nz,clampTabToolsWidth:rz,setSidebarWidth:jt,setTabToolsWidth:ft,panelResizeStateRef:jg,tabToolsResizeStateRef:zg,defaultSidebarWidth:mb,sidebarMinWidth:pc,tabToolsMinWidth:wu,endPanelResize:Zj,endTabToolsResize:Jj}),h.useEffect(()=>{!n||!a.length||Mce(ti,a.map(g=>At(g)),{onWriteError:Ci})},[a,n,ti,Ci]),h.useEffect(()=>{E(g=>{const M=g.filter(T=>ho.has(T.key));return M.length===g.length?g:M})},[ho]);const qg=h.useCallback(g=>{const M=jA(g);if(!M)return;const T=yte(M);T.length&&b(P=>{let L=!1;const B=new Set(P);for(const H of T)B.has(H)||(B.add(H),L=!0);return L?B:P})},[]);h.useEffect(()=>{!n&&!a.length||b(g=>{const M=new Set(g),T=new Set(xe);let P=!1;for(const L of g)T.has(L)||(M.delete(L),P=!0);return P?M:g})},[xe,a.length,n]),h.useEffect(()=>{m.current.hasStoredState||m.current.initialRevealDone||!W||(m.current.initialRevealDone=!0,x(!0),qg(W))},[qg,W]),h.useEffect(()=>{if(!W){Nm();return}if(gf(Dt)!==Mo.MESH){Nm();return}Ea&&Xc===At(W)||qo&&(!ue||As||ji)||Sg(W).catch(g=>{Zc(Ft.ERROR),Ja(g instanceof Error?g.message:String(g))})},[Nm,Dt,ue,Sg,Ea,Xc,ji,As,W,qo]),h.useEffect(()=>{if(!W){Wl();return}if(gn!==Q.IMPLICIT){Wl();return}if(!nu){Wl(),Qa(null),Es(Ft.PENDING),wa("");return}rl||v(W).catch(g=>{Es(Ft.ERROR),wa(g instanceof Error?g.message:String(g))})},[Wl,gn,v,W,nu,rl,wa,Qa,Es]),h.useEffect(()=>{if(!W){tu();return}if(!GS(gn)){tu();return}if(!nn){tu(),Wo(null),Vl(Ft.PENDING),qs("");return}ol||z(W).catch(g=>{Vl(Ft.ERROR),qs(g instanceof Error?g.message:String(g))})},[tu,gn,z,W,nn,ol,qs,Wo,Vl]);const oz=ue?Xs.slice().sort().join("|"):"*",Td=!!Gl&&!!W&&Lr&&Gl.fileRef===At(W)&&Gl.referenceHash===FF(W)&&(Gl.loadedTopologyKey||"*")===oz,iz=Td&&Gl?.selectorRuntime||null,Vx=!!pd&&!!W&&bd&&pd.fileRef===At(W)&&pd.displayEdgeHash===Hn(W,"displayEdgeTopology"),sz=Vx&&pd?.displayEdgeRuntime||null,$x=!ue&&ce.includes(Fs),Yg=gn===Q.STEP&&Lr&&!ue,az=gn===Q.STEP&&Lr&&ue&&Xs.length>0,QC=gn===Q.STEP&&bd&&!Fl(St.mode)&&(Q0(St.mode)||Di.enabled!==!1),lz=q.selectableTopologyEnabled===!0,cz=!!(LF(W)||qo&&Ple(no)),uz=!!(Yg&&!Nle(W)&&!qo),Hm=!!(Yg&&cz&&!lz&&!$x),dz=$x||Yg,eM=$x||az||Yg&&!Hm&&!uz;h.useEffect(()=>{if(!W){ws();return}if(!Lr){ws(),eu(null),Ul(zn.DISABLED),Hl("");return}if(!eM){ws(),eu(null),Ul(zn.IDLE),Hl("");return}Td||G(W,Xs).catch(g=>{Ul(zn.ERROR),Hl(g instanceof Error?g.message:String(g))})},[ws,ue,G,eM,Xs,W,Lr,Td]),h.useEffect(()=>{if(!W){Tm();return}if(!QC){Tm(),bg(null),Cm(zn.IDLE),Mm("");return}Vx||ne(W).catch(g=>{Cm(zn.ERROR),Mm(g instanceof Error?g.message:String(g))})},[Tm,ne,Vx,W,QC,Mm,bg,Cm]);const{currentReferences:Xg,activeReferenceMap:tM,selectedReferences:nM,selectedParts:rM,hoveredReferenceId:fz,hoveredPartId:_d,visibleReferences:oM}=oce({selectedReferencesMatch:Td,referenceState:Gl,isAssemblyView:ue,supportsPartSelection:kC,assemblyParts:kg,assemblyPartMap:Ms,inspectedAssemblyNodeId:"",inspectedAssemblyPartTopologyReferences:[],selectedReferenceIds:j,selectedPartIds:ce,hoveredListReferenceId:Be,hoveredModelReferenceId:He,hoveredListPartId:yr,hoveredModelPartId:uo}),mz=h.useMemo(()=>[...nM||[],...rM||[]],[nM,rM]);Qle({isAssemblyView:ue,supportsPartSelection:kC,assemblyPartsLoaded:Px,selectedEntryHasReferences:Lr,setSelectedReferenceIds:ee,selectedReferenceIdsRef:Jn,setHoveredListReferenceId:Me,setHoveredModelReferenceId:de,assemblyParts:kg,validAssemblyPartIds:Lm,validHiddenPartIds:Aa,selectedPartIdsRef:yn,setSelectedPartIds:Ee,parseAssemblyPartReferenceSelectionId:PR,setHiddenPartIds:xt,setHoveredListPartId:Qt,setHoveredModelPartId:Kn}),h.useEffect(()=>{const g=String(Ln?.id||"").trim();if(!g){Je(T=>T.length?[]:T);return}const M=new Set(Lm);Je(T=>{const P=T.filter(L=>M.has(L));return P.length===1&&P[0]===g&&!yn.current.length&&!Jn.current.length?[]:df(P,T)?T:P})},[w,Ln,Lm]);const Zg=h.useCallback(g=>String(g?.selectorType||"").trim()==="face",[]),Jg=h.useCallback(g=>String(g?.selectorType||"").trim()==="edge",[]),iM=h.useCallback(g=>String(g?.selectorType||"").trim()==="vertex",[]),nc=h.useCallback(g=>Zg(g)||Jg(g)||iM(g),[Jg,Zg,iM]),sM=h.useCallback(g=>{const M=String(g?.selectorType||"").trim();return M==="occurrence"||M==="shape"||M==="face"||M==="edge"||M==="vertex"},[]),Ji=h.useCallback(g=>{const M=String(g?.partId||"").trim();return M||PR(g?.id)?.partId||""},[]),Rd=h.useMemo(()=>!Mi||!ue||!Td?[]:RG(Ln,Xg),[Xg,ue,Mi,Td,Ln]),Wm=h.useMemo(()=>!ue||!Fn.length?[]:jn(Fn.flatMap(g=>[g,...In(g)]).map(g=>String(g||"").trim()).filter(Boolean)),[Fn,ue,In]),aM=h.useMemo(()=>{if(!ue||!Wm.length)return[];const g=new Set(Wm);return Rd.filter(M=>g.has(Ji(M))&&sM(M))},[Rd,Wm,ue,sM,Ji]),Qg=h.useMemo(()=>ue&&BC?aM:oM,[aM,BC,ue,oM]),lM=h.useMemo(()=>Mi?ue?Xs.length?Rd:[]:Xg:[],[Rd,Xg,ue,Mi,Xs]),sr=h.useMemo(()=>OG({root:Ln,references:lM,fallbackPartId:ue?"":Fs,topologyPartIds:ue?Xs:null}),[ue,Xs,Ln,lM]),pz=h.useMemo(()=>{if(!ue||!Fn.length)return null;const g=sr||Ln;return jn(Fn.flatMap(M=>q1(g,M)))},[sr,Fn,ue,Ln]),cM=h.useMemo(()=>Mi&&ue?Due(sr,Ie,{isAssemblyView:ue}):[],[sr,Ie,ue,Mi]),Gx=h.useMemo(()=>new Set(cM),[cM]),oi=h.useMemo(()=>Oue(sr),[sr]),Ux=iz,mr=h.useMemo(()=>{const g=new Map(tM);for(const M of Array.from(g.values()))ZR(g,M);for(const M of Qg)ZR(g,M);return g},[tM,Qg]);h.useEffect(()=>{if(!ue||!Fn.length||!j.length)return;const g=yue(j,mr,Fn,{referencePartId:Ji});df(g,j)||(Jn.current=g,ee(g),_e(""))},[mr,Fn,ue,Ji,j]);const ey=h.useCallback(g=>{const M=String(g||"").trim();if(!M)return[];const T=mr.get(M),P=String(T?.selectorType||"").trim();if(P!=="occurrence"&&P!=="shape")return[];const L=Ji(T);if(ue)return L?In(L):[];const B=L&&L!==Fs?L:Qp;return B?[B]:[]},[mr,ue,Ji,In]),ty=h.useMemo(()=>ue?Gx.size?Rd.filter(g=>Gx.has(String(g?.id||"").trim())):[]:Qg,[Rd,Qg,ue,mi,Gx]),uM=h.useMemo(()=>ty.filter(g=>Zg(g)),[Zg,ty]),dM=h.useMemo(()=>ty.filter(g=>Jg(g)),[Jg,ty]),fM=Np,fu=Mx,hz=!!(uM.length||dM.length||fM.length),Pd=ni&&_o===Cr.MEASURE&&!!no&&!Ma,[Hx,mu]=h.useState(null),[Wx,ny]=h.useState(""),gz=h.useCallback(g=>{mu(M=>MZ(M,g))},[]),yz=h.useCallback(g=>{mu(M=>IZ(M,g))},[]),mM=h.useCallback(g=>{mu(M=>NZ(M,g))},[]),bz=h.useCallback(()=>{mu(g=>_Z(g))},[]),pM=h.useCallback(()=>{mu(g=>RZ(g))},[]),Ia=Hx?.measurements||Np;h.useEffect(()=>{ny(g=>g&&Ia.some(M=>M.id===g)?g:Ia.length?Ia[Ia.length-1].id:"")},[Ia]),h.useEffect(()=>{mu(g=>BT(g,{entryChanged:!0}))},[w]),h.useEffect(()=>{mu(g=>BT(g,{toolActive:Pd}))},[Pd]);const hM=h.useRef(0);h.useEffect(()=>{const g=Ia.length,M=g>hM.current;hM.current=g,M&&(ny(Ia[g-1].id),ro.includes(Bt.STEP_MEASUREMENTS)&&(Fr(!0),R(T=>ea([...(Array.isArray(T)?T:[]).filter(P=>P!==Bt.STEP_MEASUREMENTS),Bt.STEP_MEASUREMENTS],ro))))},[Ia,ro,Fr]);const xz=Ma||!no||!ni,gM=ue&&Xs.length>0||dz,Kx=gn===Q.STEP&&Lr&&gM&&!Is&&!Hm&&(fu===zn.DISABLED||fu===zn.ERROR||fu===zn.READY&&!!Ux&&!hz),ry=gn===Q.STEP&&Lr&&gM&&!Is&&!Hm&&!Kx&&(Ot||fu===zn.IDLE||fu===zn.LOADING||!Ux),Sz=h.useMemo(()=>{if(!W)return null;if($e){const g=$n?Bw($n):null,M=g?.determinate?g.counts:"";return{loading:!0,label:M?`${Eu} ${M}`:Eu,title:g?[g.label,g.ordinal&&`phase ${g.ordinal}`,g.detail].filter(Boolean).join(" — "):"Generator script is running"}}if(gn===Q.IMPLICIT&&kx)return{loading:!0,label:nu?Xi||"loading implicit CAD":"loading",title:lu};if(GS(gn)&&Dx)return{loading:!0,label:nn?$l||(gn===Q.SDF?"loading SDF":"loading URDF"):"building",title:lu};if(gn===Q.STEP&&Ot)return{loading:!0,label:Eu,title:lu};if(gn===Q.STEP&&nl)return{loading:!0,label:Eu,title:lu};if(gn===Q.STEP&&En)return{loading:!0,label:"loading STEP module",title:lu};if([Q.STEP,Q.STL,Q.THREE_MF,Q.GLB].includes(gn)&&Lg){const g=Xc===At(W)?bs:"";return{loading:!0,label:wo?g||"loading mesh":"building",title:lu}}return gn===Q.STEP&&FC?{loading:!0,label:(Xc===At(W)?bs:"")||"loading meshes",title:"Loading assembly meshes"}:gn===Q.STEP&&fu===zn.LOADING?{loading:!0,label:yg||"loading topology",title:"Loading selectable topology"}:gn===Q.STEP&&ry?{loading:!0,label:"building topology",title:"Preparing selectable topology"}:Fx?{loading:!0,label:"building assembly",title:"Preparing assembly parts"}:null},[FC,Fx,gn,Xi,kx,bs,Xc,yg,ry,fu,W,Eg,nu,wo,nn,$e,$n,nl,En,Ot,Lg,$l,Dx,lu]),qx=h.useMemo(()=>jn(j.flatMap(g=>ey(g))),[ey,j]),Yx=h.useMemo(()=>jn([Be,He].flatMap(g=>ey(g))),[Be,He,ey]),Ez=h.useMemo(()=>{if(!ue)return qx;const g=new Set(Fn);return jn([...ce.flatMap(M=>{const T=String(M||"").trim();return g.has(T)?[]:In(T,Jt[T])}),...qx])},[Fn,ue,In,ce,Jt,qx]),wz=h.useMemo(()=>{const g=String(mn?.nodeId||"").trim();if(ue&&g){const B=String(mn?.renderPartId||"").trim(),H=In(g,B);return H.length?H:g}if(Yx.length)return Yx;if(!ue||!_d)return _d;const M=String(yr||"").trim();if(M){const B=In(M);return B.length?B:M}const T=String(uo||_d||"").trim(),P=Ca(T),L=In(P,T);return L.length?L:_d},[_d,yr,uo,Yx,ue,In,Ca,mn]),yM=String(mn?.referenceId||"").trim()||fz,vz=h.useMemo(()=>Wm,[Wm]),Az=h.useMemo(()=>st,[st]),Cz=h.useMemo(()=>!ue||!As?Np:Pg,[Pg,ue,As]),Od=h.useCallback(g=>{g&&Uo(M=>{const T=M?.[g];return T?.statusesByEndEffector?{...M,[g]:{...T,statusesByEndEffector:{}}}:M})},[]),kd=h.useCallback(g=>{const M=String(g||"").trim();M&&qa(T=>{if(!T?.[M])return T;const P={...T};return delete P[M],P})},[]),oy=h.useCallback(()=>{const g=Ai.current;g.token+=1,g.frameId&&typeof cancelAnimationFrame=="function"&&cancelAnimationFrame(g.frameId),g.frameId=0},[]),Km=h.useCallback(()=>{const g=kr.current;g.token+=1,g.frameId&&typeof cancelAnimationFrame=="function"&&cancelAnimationFrame(g.frameId),g.frameId=0,g.mode="",g.fileRef="",g.targetValues=null,g.currentValues=null,g.lastTimestampMs=0},[]),Rs=h.useCallback(()=>{oy(),Km()},[Km,oy]),rc=h.useCallback((g,M,T,P={})=>{const L=String(g||"").trim();if(!L)return;const B=io(M),H=io(T);if(Rs(),typeof requestAnimationFrame!="function"||Mh(B,H)){vi(Pt=>({...Pt,[L]:H}));return}const le=kr.current,he=le.token+1;le.token=he;const Qe=ml(),yt=Math.max(yo(P?.durationMs,Oce),1),_t=Pt=>{if(kr.current.token!==he)return;const Lt=Math.max(yo(Pt,ml())-Qe,0),Do=Math.min(Lt/yt,1),Zs=Fce(B,H,Do,void 0,Ag),go=Zs.done||Do>=1?H:{...B,...Zs.values};if(vi(Qi=>({...Qi,[L]:go})),Zs.done||Do>=1){kr.current.frameId=0;return}kr.current.frameId=requestAnimationFrame(_t)};le.frameId=requestAnimationFrame(_t)},[Rs,Ag]),bM=h.useCallback((g,M,T,P={})=>{const L=String(g||"").trim();if(!L)return;const B=io(M),H=io(T),le=Math.max(yo(P?.durationMs,Rf),1);if(oy(),typeof requestAnimationFrame!="function"||Mh(B,H)){Km(),vi(Pt=>({...Pt,[L]:H}));return}const he=kr.current;if(he.frameId&&he.mode==="follow"&&he.fileRef===L){he.targetValues=H,he.smoothingMs=le;return}Km();const Qe=kr.current,yt=Qe.token+1;Qe.token=yt,Qe.mode="follow",Qe.fileRef=L,Qe.currentValues=B,Qe.targetValues=H,Qe.smoothingMs=le,Qe.lastTimestampMs=ml();const _t=Pt=>{const Lt=kr.current;if(Lt.token!==yt)return;const Do=yo(Pt,ml()),Zs=Math.max(Do-yo(Lt.lastTimestampMs,Do),0);Lt.lastTimestampMs=Do;const go=io(Lt.currentValues),Qi=io(Lt.targetValues),ic=jce(go,Qi,Zs,Lt.smoothingMs,void 0,Ag),Ni=ic.done?Qi:{...go,...ic.values};if(Lt.currentValues=Ni,vi(nS=>({...nS,[L]:Ni})),ic.done||Mh(Ni,Qi)){Lt.frameId=0,Lt.mode="",Lt.fileRef="",Lt.currentValues=null,Lt.targetValues=null,Lt.lastTimestampMs=0;return}Lt.frameId=requestAnimationFrame(_t)};Qe.frameId=requestAnimationFrame(_t)},[Km,oy,Ag]),xM=h.useCallback((g,M,T,P)=>{const L=String(g||"").trim();if(!L)return;Rs();const B=Array.isArray(T?.points)?T.points:[],H=B.length?yo(B[B.length-1].timeFromStartSec,0):0;if(!B.length||H<=0||typeof requestAnimationFrame!="function"){vi(Lt=>({...Lt,[L]:io(P)}));return}const le=Ai.current,he=le.token+1;le.token=he;const Qe=io(M),yt=io(P),_t=ml(),Pt=Lt=>{if(Ai.current.token!==he)return;const Do=Math.max((yo(Lt,ml())-_t)/1e3,0),Zs=Do>=H,go=Zs?yt:qce(T,Do,Qe);if(vi(Qi=>({...Qi,[L]:go})),Zs){Ai.current.frameId=0;return}Ai.current.frameId=requestAnimationFrame(Pt)};le.frameId=requestAnimationFrame(Pt)},[Rs]);h.useEffect(()=>()=>{Rs()},[Rs]);const Dd=h.useCallback((g,M)=>{const T=String(g||"").trim();if(!T||!ut||!Zi||!wn||!zi||!M||typeof M!="object")return;const P=ME(ut,M,Zi.link,zi);if(!P)return;const L=vc(P);Uo(B=>{const H=B?.[T]&&typeof B[T]=="object"?B[T]:{},le=H.targetsByEndEffector&&typeof H.targetsByEndEffector=="object"?H.targetsByEndEffector:{},he=H.statusesByEndEffector&&typeof H.statusesByEndEffector=="object"?{...H.statusesByEndEffector}:{};return delete he[wn],{...B,[T]:{...H,targetsByEndEffector:{...le,[wn]:L},statusesByEndEffector:he}}})},[ut,Zi,wn,zi]),Mz=h.useCallback((g,M,T={})=>{const P=String(g?.name||"").trim();if(!be||!P)return;const L=Lc(g,M),B=yo(fr?.[P],g?.defaultValueDeg??0);if(Math.abs(L-B)<=Ax)return;const H={...fr,[P]:L};T?.scrub?bM(be,fr,H,{durationMs:Rf}):rc(be,fr,H,{durationMs:Rf}),kd(be),Dd(be,H),Od(be)},[rc,Od,kd,bM,be,fr,Dd]),Iz=h.useCallback(()=>{be&&(Rs(),kd(be),rc(be,fr,ru),Dd(be,ru),Od(be))},[rc,Rs,Od,kd,ru,be,fr,Dd]),Nz=h.useCallback(g=>{if(!be||!g?.jointValuesByName||typeof g.jointValuesByName!="object")return;Rs();const M=io(g.jointValuesByName);if(!Object.keys(M).length)return;const T={...fr,...M},P=String(g?.id||"").trim();P&&qa(L=>({...L,[be]:P})),rc(be,fr,T),Dd(be,T),Od(be)},[rc,Rs,Od,be,fr,Dd]),Tz=h.useCallback(g=>{if(!be)return;const M=String(g||"").trim();h.startTransition(()=>{Uo(T=>({...T,[be]:{...T?.[be]&&typeof T[be]=="object"?T[be]:{},activeEndEffectorName:M}}))})},[be]),_z=h.useCallback((g,M)=>{if(!be)return;const T=String(g||"").trim();T&&h.startTransition(()=>{Uo(P=>({...P,[be]:{...P?.[be]&&typeof P[be]=="object"?P[be]:{},[T]:M}}))})},[be]),Rz=h.useCallback((g,M)=>{if(!be||!wn)return;const T=Number(g);if(!Number.isInteger(T)||T<0||T>2)return;const P=yo(M,va[T]??0);h.startTransition(()=>{Uo(L=>{const B=L?.[be]&&typeof L[be]=="object"?L[be]:{},H=B.targetsByEndEffector&&typeof B.targetsByEndEffector=="object"?B.targetsByEndEffector:{},le=vc(H[wn],va);le[T]=P;const he=B.statusesByEndEffector&&typeof B.statusesByEndEffector=="object"?{...B.statusesByEndEffector}:{};return delete he[wn],{...L,[be]:{...B,targetsByEndEffector:{...H,[wn]:le},statusesByEndEffector:he}}})})},[be,wn,va]),Pz=h.useCallback(()=>{if(!be||!wn||!Ed)return;const g=vc(Ed);h.startTransition(()=>{Uo(M=>{const T=M?.[be]&&typeof M[be]=="object"?M[be]:{},P=T.targetsByEndEffector&&typeof T.targetsByEndEffector=="object"?T.targetsByEndEffector:{},L=T.statusesByEndEffector&&typeof T.statusesByEndEffector=="object"?{...T.statusesByEndEffector}:{};return delete L[wn],{...M,[be]:{...T,targetsByEndEffector:{...P,[wn]:g},statusesByEndEffector:L}}})})},[be,Ed,wn]),Ld=h.useCallback(async(g="srdf.solvePose",M=va)=>{if(!be||!ut||!Zi||!wn||!zi)return;const T=g==="srdf.planToPose"?"srdf.planToPose":"srdf.solvePose",P=vc(M),L=B=>{const H=String(B||"Motion request failed.");if(te(""),typeof window>"u"){te(H);return}window.setTimeout(()=>{te(H)},0)};if(te(""),!ou?.srdf){L("SRDF data is not loaded for this file.");return}if(!We){L("MoveIt2 server is offline.");return}Rs(),Uo(B=>{const H=B?.[be]&&typeof B[be]=="object"?B[be]:{};return{...B,[be]:{...H,solvingEndEffectorName:wn}}});try{const B=await uue(T,{dir:c,file:be,startJointValuesByName:Vce(ut,fr),startJointValuesByNameDeg:fr,target:{endEffector:wn,frame:zi,targetLink:Zi.link,xyz:P},moveit2:{planningGroup:fi.planningGroup,endEffector:fi.endEffector,targetLink:Zi.link,targetFrame:fi.targetFrame,ik:{positionOnly:!0,timeout:fi.ikTimeout,attempts:fi.ikAttempts,tolerance:fi.ikTolerance},planning:{pipeline:fi.planningPipeline,plannerId:fi.plannerId,planningTime:fi.planningTime,maxVelocityScalingFactor:fi.maxVelocityScalingFactor,maxAccelerationScalingFactor:fi.maxAccelerationScalingFactor}}});if(B?.ok===!1){L(String(B.message||"MoveIt2 server request failed."));return}const H=B?.trajectory?Gce(ut,B.trajectory):null,le=H?.points?.length?H.points[H.points.length-1].positionsByName:null,he=H?.points?.length?H.points[H.points.length-1].positionsByNameDeg:null,Qe=B?.jointValuesByName||le,yt=Qe?tv(ut,Qe,{native:!0}):tv(ut,B?.jointValuesByNameDeg||he),_t={...fr,...yt},Pt=Uce(ut,_t,{...Zi,frame:zi},P),Lt=fi.ikTolerance;kd(be),H?xM(be,fr,H,_t):rc(be,fr,_t),Pt.positionError>Lt&&L("Motion applied, but FK residual is outside tolerance.")}catch(B){L(B instanceof Error?B.message:String(B))}finally{Uo(B=>{const H=B?.[be]&&typeof B[be]=="object"?B[be]:{};if(H.solvingEndEffectorName!==wn)return B;const le={...H};return delete le.solvingEndEffectorName,{...B,[be]:le}})}},[rc,Rs,c,kd,We,xM,ut,be,ou,Zi,wn,zi,va,fi,fr]),Oz=h.useCallback(async()=>{await Ld("srdf.solvePose",va)},[Ld,va]),kz=h.useCallback(async()=>{await Ld("srdf.planToPose",va)},[Ld,va]),Fd=h.useCallback(g=>{const M=sa(g);return M?(Ns.current?.setPerspective?.(M,{animate:!0}),cu.current=M,Sa(M),!0):!1},[]),SM=h.useCallback(()=>{if(!be||!Sd)return;const g=sa(Ns.current?.getPerspective?.()||cu.current);Fi({fileRef:be,originalPerspective:g})},[be,Sd]),jd=h.useCallback(()=>{const g=eo.fileRef?eo.originalPerspective:null;Fi(fb()),Fd(g)},[Fd,eo.fileRef,eo.originalPerspective]),EM=h.useCallback(()=>{if(iu){jd();return}SM()},[SM,jd,iu]);h.useEffect(()=>{if(!iu||typeof window>"u")return;const g=M=>{M.defaultPrevented||M.key!=="Escape"&&M.key!=="Esc"&&M.code!=="Escape"||(M.preventDefault(),M.stopPropagation(),jd())};return window.addEventListener("keydown",g,!0),()=>{window.removeEventListener("keydown",g,!0)}},[jd,iu]);const wM=h.useCallback(g=>{!be||!wn||Uo(M=>{const T=M?.[be]&&typeof M[be]=="object"?M[be]:{},P=T.targetsByEndEffector&&typeof T.targetsByEndEffector=="object"?T.targetsByEndEffector:{},L=T.statusesByEndEffector&&typeof T.statusesByEndEffector=="object"?{...T.statusesByEndEffector}:{};return delete L[wn],{...M,[be]:{...T,targetsByEndEffector:{...P,[wn]:g},statusesByEndEffector:L}}})},[be,wn]),Dz=h.useCallback(async({point:g}={})=>{if(!be||!ut||!Zi||!wn)return;const M=Xce(g);if(!M||!Ig)return;const T=P8(ut,fr,M,zi);if(!T)return;const P=vc(T),L=Ig.originalPerspective;Fi(fb()),Fd(L),wM(P),await Ld("srdf.solvePose",P)},[wM,Ld,Fd,ut,be,Zi,wn,zi,fr,Ig]),Lz=h.useCallback(async()=>{if(cn(""),!Tg.length){_e("No movable joints are available");return}try{await js(Zce(Tg,fr)),_e(gt===Q.SDF?"Copied joint values":"Copied joint angles")}catch(g){_e(g instanceof Error?g.message:"Clipboard write failed")}},[Tg,gt,fr]);h.useEffect(()=>{if(eo.fileRef&&eo.fileRef!==be){const g=eo.originalPerspective;Fi(fb()),Fd(g)}},[Fd,be,eo.fileRef,eo.originalPerspective]);const zd=h.useMemo(()=>{const g=j.map(P=>oi.get(P)||mr.get(P)||hc(P,"topology")).filter(Boolean);if(!ue&&ce.includes(Fs)){const P=j1(W);P&&g.push(P)}const M=ce.map(P=>hc(P,"assembly-part")||oi.get(P)||Jp(hb({assemblyPartMap:Ms,displayStepTreeRoot:sr,stepTreeRoot:Ln,nodeId:P}),P,"assembly-part")).filter(Boolean),T=X.map(P=>Jl.get(P)).filter(Boolean);return Tp(Mp({references:[...g,...M],parts:[],mates:T,entry:W}),{selectedReferenceIds:j,selectedPartIds:ce,selectedMateIds:X,copyReferenceMap:oi})},[Ms,sr,mr,Jl,W,X,ce,j,oi,Ln]),qm=h.useMemo(()=>zd.lines.map(g=>ca(g)).map(g=>DR(g,W?.fileRefPrefix)).filter(Boolean),[zd.lines,W]),Fz=h.useMemo(()=>Vle(qm,{count:zd.copiedCount}),[qm,zd.copiedCount]),jz=h.useMemo(()=>$le(zd.copiedCount||qm.length),[zd.copiedCount,qm.length]),zz=qm.length>0,vM=h.useCallback((g,{expandSelf:M=!1,includeVisualOnlyAncestors:T=!0}={})=>{const P=String(g||"").trim(),L=sr||Ln;if(!P||!L)return;const B=jue(L,P,{expandSelf:M,includeVisualOnlyAncestors:T});B.length&&Je(H=>jn([...H,...B]))},[sr,Ln]),Na=h.useCallback((g,{expandSelf:M=!1,expandAncestors:T=!1,source:P="viewer"}={})=>{const L=String(g||"").trim();!L||Le!=="step"||(Xt(P==="viewer"?`${Date.now()}:${L}`:""),YC(Bt.STEP_TREE,{openSheet:yne({isDesktop:rt,source:P})}),(T||M)&&vM(L,{expandSelf:M}))},[vM,rt,YC,Le]),pu=h.useCallback((g,{multiSelect:M=!1,source:T="viewer"}={})=>{if(Ot||mi)return;T!=="viewer"&&Xt("");const P=String(g||"").trim(),L=mr.get(P),B=String(L?.selectorType||"").trim(),H=Ji(L);if(ue&&(B==="shape"||B==="occurrence")&&H&&Fn.includes(H)){const he=Jn.current.filter(Qe=>String(Qe||"").trim()!==P);he.length!==Jn.current.length&&(Jn.current=he,ee(he),_e(""));return}const le=!M&&(yn.current.length||pi.current.length)?P?[P]:[]:z1(Jn.current,P,{multiSelect:M});if(le.length&&!rt&&at(!1),ye(""),!M&&yn.current.length&&(yn.current=[],Ee([]),mt({})),!M&&pi.current.length&&(pi.current=[],ve([])),Jn.current=le,ee(le),le.includes(P)){const he=QR(sr,P);Na(he||H,{source:T})}},[sr,mr,Fn,rt,ue,Ji,Na,mi,Ot]),AM=h.useCallback(()=>{Jn.current=[],pi.current=[],ye(""),ee([]),ve([]),_e("")},[]);h.useCallback(()=>{Jn.current=[],pi.current=[],ye(""),ee([]),ve([]),Me(""),de(""),we(""),_e("")},[]);const Bz=h.useCallback(async()=>{if(cn(""),Ot){_e("STEP update in progress. Please wait.");return}const g=Jn.current.map(H=>oi.get(H)||mr.get(H)||hc(H,"topology")).filter(Boolean);if(!ue&&yn.current.includes(Fs)){const H=j1(W);H&&g.push(H)}const M=yn.current.map(H=>hc(H,"assembly-part")||oi.get(H)||Jp(hb({assemblyPartMap:Ms,displayStepTreeRoot:sr,stepTreeRoot:Ln,nodeId:H}),H,"assembly-part")).filter(Boolean),T=pi.current.map(H=>Jl.get(H)).filter(Boolean);if(!g.length&&!M.length&&!T.length){_e("Nothing selected");return}const P=Tp(Mp({references:[...g,...M],parts:[],mates:T,entry:W}),{selectedReferenceIds:Jn.current,selectedPartIds:yn.current,selectedMateIds:pi.current,copyReferenceMap:oi}),{lines:L,missingPartNames:B=[]}=P;if(!L.length){_e(B.length===1?`No selector ref is available for ${B[0]}`:"No selector refs are available for the selection");return}try{await js(L.map(he=>ca(he)).map(he=>DR(he,W?.fileRefPrefix)).filter(Boolean).join(`
|
||
`));const H=P.copiedCount||g.length+M.length+T.length-B.length,le=B.length?` (${B.length} unavailable)`:"";_e(`Copied ${H} ref${H===1?"":"s"}${le}`)}catch(H){_e(H instanceof Error?H.message:"Clipboard write failed")}},[Ms,sr,mr,Jl,W,cn,oi,Ln,Ot]),al=h.useCallback(g=>{const M=String(g||"").trim();if(!M)return;const P=Ie.includes(M)&&ue&&fn&&Fn.some(B=>Ou(fn,M,B)),L=P?new Set(q1(sr||Ln,M)):null;Je(B=>B.includes(M)?B.filter(H=>L?!L.has(H):H!==M):jn([...B,M])),P&&sn(B=>{const H=B.filter(le=>!Ou(fn,M,le));return H.length===B.length?B:H})},[fn,sr,Ie,Fn,ue,Ln]),Ym=h.useCallback(g=>{const M=String(g||"").trim();if(!M)return yn.current;const T=yn.current.filter(P=>String(P||"").trim()!==M);return T.length===yn.current.length?yn.current:(yn.current=T,Ee(T),mt(P=>{const L={...P};return delete L[M],L}),T)},[]),Bd=h.useCallback((g,{multiSelect:M=!1,renderPartId:T="",source:P="viewer"}={})=>{if(Ot||mi)return yn.current;P!=="viewer"&&Xt("");const L=String(g||"").trim();if(ue&&Fn.includes(L))return Ym(L);const B=yn.current.includes(L);if(ue&&!(P==="viewer"?PC:_C).has(L)&&!B)return yn.current;const le=!M&&(Jn.current.length||pi.current.length)?L?[L]:[]:z1(yn.current,g,{multiSelect:M});return le.length&&!rt&&at(!1),ye(""),!M&&Jn.current.length&&(Jn.current=[],ee([])),!M&&pi.current.length&&(pi.current=[],ve([])),yn.current=le,Ee(le),le.includes(L)&&Na(L,{source:P}),mt(he=>{const Qe={};for(const yt of le){const _t=String(yt||"").trim();if(!_t)continue;const Pt=_t===L?Ox(_t,T):Ox(_t,he[_t]);Pt&&(Qe[_t]=Pt)}return Qe}),le},[rt,ue,Fn,Ym,Na,Ox,_C,PC,mi,Ot]),Vz=h.useCallback((g,{multiSelect:M=!1}={})=>{const T=String(g||"").trim();Bd(T,{multiSelect:M,source:"tree"})},[Bd]),$z=h.useCallback((g,{multiSelect:M=!1}={})=>{const T=String(g||"").trim();T&&pu(T,{multiSelect:M,source:"tree"})},[pu]),CM=h.useCallback((g,{multiSelect:M=!1}={})=>{if(Ot||mi)return;Xt("");const T=String(g||"").trim();if(!T||!Jl.has(T))return;const P=!M&&(yn.current.length||Jn.current.length)?[T]:z1(pi.current,T,{multiSelect:M});P.length&&!rt&&at(!1),ye(""),!M&&yn.current.length&&(yn.current=[],Ee([]),mt({})),!M&&Jn.current.length&&(Jn.current=[],ee([])),pi.current=P,ve(P),_e("")},[rt,Jl,mi,Ot]),Gz=h.useCallback((g,{multiSelect:M=!1}={})=>{CM(g,{multiSelect:M})},[CM]),Ps=h.useCallback(()=>{Xt(""),yn.current=[],Jn.current=[],pi.current=[],ye(""),Ee([]),mt({}),ee([]),ve([]),Qt(""),Kn(""),Me(""),de(""),we(""),ke(null),_e("")},[]),oc=h.useCallback(g=>{const M=String(g||"").trim(),T=sr||Ln,P=new Set(q1(T,M));P.size&&Je(L=>L.filter(B=>!P.has(B)))},[sr,Ln]),Xm=h.useCallback(g=>{if(!ue||!fn)return;const M=jn((Array.isArray(g)?g:[g]).map(H=>String(H||"").trim()).filter(Boolean)),T=Vb(fn,M,{rootId:Ql}),P=T.map(H=>({id:H,node:Oc(fn,H)})).filter(({node:H})=>!!H);if(!P.length){sn(H=>H.length?[]:H);return}const L=P.flatMap(({node:H})=>qh(H)).map(H=>String(H||"").trim()).filter(Boolean),B=new Set(L);Ps(),sn(T),Je(H=>jn([...H,...T])),xt(H=>{if(!B.size)return H;const le=H.filter(he=>!B.has(String(he||"").trim()));return le.length===H.length?H:le});for(const H of T)Na(H,{expandSelf:!0,source:"tree"})},[fn,Ql,Ps,ue,Na]),hu=h.useCallback(()=>{for(const g of Fn)oc(g);sn(g=>g.length?[]:g)},[oc,Fn]),Xx=h.useCallback(g=>{const M=String(g||"").trim();if(!M){hu();return}oc(M),sn(T=>{const P=T.filter(L=>String(L||"").trim()!==M);return P.length===T.length?T:P})},[oc,hu]),ll=h.useCallback(()=>{Ps()},[Ps]);h.useEffect(()=>{},[ll,je,mi]);const Vd=h.useCallback((g,M="")=>{const T=new Set((Array.isArray(g)?g:[]).map(he=>String(he||"").trim()).filter(Boolean));if(!T.size)return;const P=String(M||"").trim(),L=yn.current.filter(he=>{const Qe=String(he||"").trim();return!Qe||P&&Ou(fn,P,Qe)?!1:!In(Qe).some(_t=>T.has(String(_t||"").trim()))}),B=L.length!==yn.current.length;B&&(yn.current=L,Ee(L),mt(he=>{const Qe=new Set(L),yt={};for(const[_t,Pt]of Object.entries(he||{}))Qe.has(_t)&&(yt[_t]=Pt);return yt}));const H=Jn.current.filter(he=>{const Qe=mr.get(he),yt=Ji(Qe);return!In(yt,yt).some(Pt=>T.has(String(Pt||"").trim()))}),le=H.length!==Jn.current.length;le&&(Jn.current=H,ee(H)),(B||le)&&(ye(""),_e(""))},[fn,mr,Ji,In]);h.useEffect(()=>{Vd(st)},[Vd,st]);const MM=h.useCallback(g=>{const M=String(g||"").trim(),T=In(g);T.length&&(oc(g),Vd(T,M),sn(P=>{const L=P.filter(B=>!Ou(fn,M,B));return L.length===P.length?P:L}),xt(P=>{const L=new Set(P);let B=!1;for(const H of T)!H||L.has(H)||(L.add(H),B=!0);return B?[...L]:P}))},[fn,oc,Vd,In]),IM=h.useCallback(g=>{const M=In(g);if(!M.length)return;const T=new Set(M);xt(P=>P.filter(L=>!T.has(L))),Na(g,{source:"viewer"})},[In,Na]),Uz=h.useCallback(g=>{const M=In(g);if(!M.length)return;const T=new Set(st);M.every(L=>T.has(L))||(oc(g),Vd(M,g),sn(L=>{const B=L.filter(H=>!Ou(fn,g,H));return B.length===L.length?L:B})),xt(L=>{const B=new Set(L);if(M.every(le=>B.has(le)))return L.filter(le=>!M.includes(le));for(const le of M)B.add(le);return[...B]})},[fn,oc,Vd,st,In]),NM=h.useCallback(()=>{const g=[...new Set(yn.current.map(M=>String(M||"").trim()).filter(Boolean))];g.length<1||(sn(M=>M.length?[]:M),xt(M=>{const T=[...M],P=new Set(M);let L=!1;for(const B of g.flatMap(H=>In(H)))!B||P.has(B)||(P.add(B),T.push(B),L=!0);return L?T:M}),Ps())},[Ps,In]),Hz=h.useCallback(()=>{const g=[...new Set(yn.current.map(T=>String(T||"").trim()).filter(Boolean).flatMap(T=>In(T)).map(T=>String(T||"").trim()).filter(Boolean))];if(!g.length)return;const M=new Set(g);sn(T=>T.length?[]:T),xt(Aa.filter(T=>!M.has(T))),Ps()},[Ps,In,Aa]),Zx=h.useCallback(g=>{const M=jn((Array.isArray(g)?g:[g]).map(L=>String(L||"").trim()).filter(Boolean));if(!M.length)return;const T=[...new Set(M.flatMap(L=>In(L)).map(L=>String(L||"").trim()).filter(Boolean))];if(!T.length)return;const P=new Set(T);sn(L=>L.length?[]:L),xt(Aa.filter(L=>!P.has(L))),Ps();for(const L of M)Na(L,{source:"tree"})},[Ps,In,Na,Aa]),Jx=h.useCallback(()=>{Aa.length&&(sn(g=>g.length?[]:g),xt(Aa),Ps())},[Ps,Aa]),Qx=h.useCallback(()=>{xt(g=>g.length?[]:g)},[]),Wz=h.useCallback(g=>{const M=String(g||"").trim(),T=mr.get(M)||null;if(T&&nc(T)){de(M),Kn("");return}if(Is){const P=M;if(!P){de(""),Kn("");return}de(""),Kn(Ca(P));return}de(M)},[mr,nc,Is,Ca,mi]),Kz=h.useCallback((g,{multiSelect:M=!1}={})=>{if(Ot||mi)return;const T=String(g||"").trim();if(!T){ll();return}const P=mr.get(T)||null;if(P&&nc(P)){pu(T,{multiSelect:M});return}if(Is){const L=T,B=Ca(L);if(!B){ll();return}Bd(B,{multiSelect:M,renderPartId:L});return}mr.has(T)&&pu(T,{multiSelect:M})},[ll,mr,nc,Ca,Ot,pu,Bd,Is,mi]),qz=h.useCallback(g=>{if(Ot||mi||!ue)return;const M=String(g||"").trim();if(!M){hu(),ll();return}if(!Is)return;const T=mr.get(M)||null;if(T&&nc(T))return;const P=Ca(M);if(P){Xm(P);const L=Oc(fn,P),B=Lue(L,M);de(""),Kn(B||P)}},[fn,ll,Xm,hu,mr,nc,Is,ue,Ca,mi,Ot]),Yz=h.useCallback(()=>{ke(null)},[]);h.useEffect(()=>{ke(null)},[w]);const iy=h.useCallback(({clientX:g=0,clientY:M=0}={})=>{if(!km){ke(null);return}const T=vu(gt,"parts"),P=T?JR({root:sr,isAssemblyView:ue,expandedTreeNodeIds:Ie,loadableTreeNodeIds:su,actionNodeIds:[]}):{showExpandCollapse:!1,collapsedExpandableTreeNodeIds:[]};ke({x:Number(g)||0,y:Number(M)||0,global:!0,label:"Viewer",hidden:!0,showShowAll:T&&st.length>0,showCameraActions:!0,fitWholeModel:!0,showExpandCollapse:T&&(P.showExpandCollapse||Ie.length>0),collapsedExpandableTreeNodeIds:P.collapsedExpandableTreeNodeIds,expandedExpandableTreeNodeIds:Ie,expandAllDisabled:P.collapsedExpandableTreeNodeIds.length<1,collapseAllDisabled:Ie.length<1})},[sr,Ie,st.length,ue,su,gt,km]),Xz=h.useCallback((g,{clientX:M=0,clientY:T=0}={})=>{if(Ot||mi){ke(null);return}const P=String(g||"").trim();if(!P){iy({clientX:M,clientY:T});return}const L=mr.get(P)||null;if(L&&nc(L)){const Ni=Jn.current.includes(P),nS=jn(Jn.current.map(es=>String(es||"").trim()).filter(Boolean)),Jm=jn([...nS,P]),zM=Jm.map(es=>oi.get(es)||mr.get(es)||hc(es,"topology")).filter(Boolean),rS=Jm,R3=jn(yn.current.map(es=>String(es||"").trim()).filter(Boolean).flatMap(es=>In(es,es))),BM=jn([...R3,...rS.map(es=>Ji(mr.get(es)||(es===P?L:null))).filter(Boolean)]),P3=rS.length>0||BM.length>0,{lines:O3}=Tp(Mp({references:zM.length?zM:[L],parts:[],entry:W}),{selectedReferenceIds:Jm,copyReferenceMap:oi});ke({x:Number(M)||0,y:Number(T)||0,referenceId:P,referenceIds:Jm,label:String(L?.label||L?.displayName||P).trim(),selected:Ni,hidden:!1,focused:!1,actionCount:Jm.length||1,copyText:O3.join(`
|
||
`),showIsolate:!1,showHideOther:!1,showVisibility:!1,showHideAll:!1,showCameraActions:!0,zoomToFitDisabled:!P3,fitReferenceIds:rS,fitPartIds:BM});return}if(!Is){iy({clientX:M,clientY:T});return}const B=Ca(P);if(!B){iy({clientX:M,clientY:T});return}const H=Ms.get(B)||Oc(fn,B)||null,le=String(H?.displayName||H?.name||H?.label||B).trim(),he=In(B,P),Qe=he.length>0&&he.every(Ni=>st.includes(Ni)),yt=Fn.includes(B),_t=yn.current.includes(B),Pt=jn([...yn.current.map(Ni=>String(Ni||"").trim()).filter(Boolean),B]),Lt=jn(Jn.current.map(Ni=>String(Ni||"").trim()).filter(Boolean)),Do=jn([...Pt.flatMap(Ni=>In(Ni,Ni===B?P:Ni))]),Zs=Lt.length>0||Do.length>0,go=JR({root:sr,isAssemblyView:ue,expandedTreeNodeIds:Ie,loadableTreeNodeIds:su,actionNodeIds:Pt}),Qi=oi.get(B)||Jp(H,B,"assembly-part")||XR(H,B)||hc(B,"assembly-part"),{lines:ic}=Tp(Mp({references:Qi?[Qi]:[],parts:[],entry:W}),{selectedPartIds:Pt,copyReferenceMap:oi});ke({x:Number(M)||0,y:Number(T)||0,nodeId:B,renderPartId:P,label:le,selected:_t,hidden:Qe,focused:yt,actionNodeIds:Pt,actionCount:Pt.length||1,copyText:ic[0]||"",selectDisabled:yt||!_t&&Qe,showIsolate:!0,isolateDisabled:!1,showExitAllIsolate:Fn.length>1,exitAllIsolateDisabled:Fn.length<2,showHideOther:!0,hideOtherDisabled:Qe,showVisibility:!yt,visibilityDisabled:yt,showHideAll:!1,hideAllDisabled:!1,hideAllLabel:"Show all",showCameraActions:!0,zoomToFitDisabled:!Zs,fitPartIds:Do,fitReferenceIds:Lt,showExpandCollapse:go.showExpandCollapse,collapsedActionNodeIds:go.collapsedActionNodeIds,expandedActionNodeIds:go.expandedActionNodeIds,collapsedExpandableTreeNodeIds:go.collapsedExpandableTreeNodeIds,expandedExpandableTreeNodeIds:go.expandedExpandableTreeNodeIds,expandSelectedDisabled:go.collapsedActionNodeIds.length<1,collapseSelectedDisabled:go.expandedActionNodeIds.length<1,expandAllDisabled:go.collapsedExpandableTreeNodeIds.length<1,collapseAllDisabled:go.expandedExpandableTreeNodeIds.length<1})},[Ms,fn,sr,Fn,mr,st,ue,nc,su,In,iy,Ca,W,oi,Ie,mi,Ot,Is]),Zz=h.useCallback(async g=>{const M=String(g?.copyText||"").split(`
|
||
`).map(T=>ca(T)).filter(Boolean).join(`
|
||
`);if(!M){_e("No selector ref is available for this node");return}try{await js(M),_e("Copied reference")}catch(T){_e(T instanceof Error?T.message:"Failed to copy reference")}},[]),Jz=h.useCallback(async(g,{topology:M=!1}={})=>{const T=String(g||"").trim();if(!T){_e("No selector ref is available for this node");return}const P=!M&&!ue&&T===Fs?j1(W):null,L=M&&(oi.get(T)||mr.get(T)||hc(T,"topology"))||null,B=!M&&!P?oi.get(T)||Jp(hb({assemblyPartMap:Ms,displayStepTreeRoot:sr,stepTreeRoot:Ln,nodeId:T}),T,"assembly-part")||XR(hb({assemblyPartMap:Ms,displayStepTreeRoot:sr,stepTreeRoot:Ln,nodeId:T}),T)||hc(T,"assembly-part"):null,{lines:H}=Tp(Mp({references:[...P?[P]:[],...L?[L]:[],...B?[B]:[]],parts:[],entry:W}),{selectedReferenceIds:M?[T]:[],selectedPartIds:M?[]:[T],copyReferenceMap:oi}),le=ca(H[0]);if(!le){_e("No selector ref is available for this node");return}try{await js(le),_e("Copied reference")}catch(he){_e(he instanceof Error?he.message:"Failed to copy reference")}},[Ms,sr,mr,ue,W,oi,Ln]),Qz=h.useCallback(async g=>{const M=String(g||"").trim(),T=M&&Jl.get(M)||null;if(!T){_e("No selector ref is available for this mate");return}const P=jF(T,W);if(!P){_e("No selector ref is available for this mate");return}try{await js(P),_e("Copied reference")}catch(L){_e(L instanceof Error?L.message:"Failed to copy reference")}},[Jl,W]),e3=h.useCallback(g=>{const M=String(g?.referenceId||"").trim();if(M){const L=jn((Array.isArray(g?.referenceIds)?g.referenceIds:[M]).map(B=>String(B||"").trim()).filter(Boolean));if(g?.selected===!0&&L.length>1){AM();return}pu(M,{multiSelect:!1});return}const T=String(g?.nodeId||"").trim();if(!T)return;if(Fn.includes(T)){Ym(T);return}const P=jn((Array.isArray(g?.actionNodeIds)?g.actionNodeIds:[T]).map(L=>String(L||"").trim()).filter(Boolean));if(g?.selected===!0){if(P.length>1){ll();return}Ym(T);return}Bd(T,{renderPartId:String(g?.renderPartId||"").trim(),source:"viewer"})},[ll,AM,Ym,Fn,Bd,pu]),t3=h.useCallback(g=>{const M=String(g?.nodeId||"").trim();if(!M)return;if(g?.focused===!0){Xx(M);return}const T=jn((Array.isArray(g?.actionNodeIds)?g.actionNodeIds:[M]).map(P=>String(P||"").trim()).filter(Boolean));Xm(T)},[Xm,Xx]),n3=h.useCallback(g=>{const M=String(g?.nodeId||"").trim();if(!M)return;const T=jn((Array.isArray(g?.actionNodeIds)?g.actionNodeIds:[M]).map(P=>String(P||"").trim()).filter(Boolean));if(g?.selected===!0&&T.length>1){NM();return}for(const P of T)MM(P)},[NM,MM]),r3=h.useCallback(g=>{const M=String(g?.nodeId||"").trim();if(!M)return;const T=jn((Array.isArray(g?.actionNodeIds)?g.actionNodeIds:[M]).map(P=>String(P||"").trim()).filter(Boolean));for(const P of T)IM(P)},[IM]),o3=h.useCallback(g=>{const M=String(g?.nodeId||"").trim();if(!M)return;const T=jn((Array.isArray(g?.actionNodeIds)?g.actionNodeIds:[M]).map(P=>String(P||"").trim()).filter(Boolean));Zx(T)},[Zx]),i3=h.useCallback(g=>{if(g?.hidden===!0){Qx();return}Jx()},[Jx,Qx]),s3=h.useCallback(()=>{Ns.current?.resetZoom?.()||_e("CAD Viewer camera not ready")},[]),a3=h.useCallback(g=>{const M=jn((Array.isArray(g?.fitPartIds)?g.fitPartIds:[]).map(L=>String(L||"").trim()).filter(Boolean)),T=jn((Array.isArray(g?.fitReferenceIds)?g.fitReferenceIds:[]).map(L=>String(L||"").trim()).filter(Boolean)),P=g?.fitWholeModel===!0;if(!P&&!M.length&&!T.length){_e("No geometry to fit");return}Ns.current?.zoomToFitSelection?.({partIds:M,referenceIds:T,fallbackToModel:P,animate:!0})||_e("No geometry to fit")},[]),l3=h.useCallback(g=>{for(const M of Array.isArray(g?.collapsedActionNodeIds)?g.collapsedActionNodeIds:[])al(M)},[al]),c3=h.useCallback(g=>{for(const M of Array.isArray(g?.expandedActionNodeIds)?g.expandedActionNodeIds:[])al(M)},[al]),u3=h.useCallback(g=>{for(const M of Array.isArray(g?.collapsedExpandableTreeNodeIds)?g.collapsedExpandableTreeNodeIds:[])al(M)},[al]),d3=h.useCallback(g=>{for(const M of Array.isArray(g?.expandedExpandableTreeNodeIds)?g.expandedExpandableTreeNodeIds:[])al(M)},[al]),eS=h.useCallback(g=>{const M=g?ho.get(g):null;M&&xp(_u(M),{history:"push"}),Um(g),rt||at(!1)},[Um,ho,rt,xp]),TM=h.useCallback(g=>{const M=At(g);!M||!ho.has(M)||(f(""),x(!0),qg(g),M!==w&&(xp(_u(g),{history:"push"}),Um(M)),$g(!0))},[Um,ho,qg,$g,w,xp]),f3=h.useCallback(g=>{_n(!1);const M=g===Cr.DRAW||g===Cr.MEASURE||g===Cr.PAN?g:Cr.REFERENCES;$o(M),M===Cr.DRAW&&Qr===an.SURFACE_LINE&&Vo(an.FREEHAND)},[Qr]);h.useCallback(()=>{!W||!Lr||(re(g=>{const M=pb(g);return M.selectableTopologyEnabled?M:{...M,selectableTopologyEnabled:!0}}),_n(!1),$o(Cr.REFERENCES))},[W,Lr]);const m3=h.useCallback(()=>{if(Le){if(_n(!1),Er){ie(!1),Fr(!0),rt||at(!1);return}Fr(g=>{const M=!g;return M&&!rt&&at(!1),M})}},[Er,rt,Le,Fr]),_M=h.useCallback((g,M="output",T=null)=>{const P=g?At(g):"",L=String(M||"output").trim()||"output";if(!P||typeof window>"u")return;const H=String(T?.downloadUrl||"").trim()||O_(P,L);_e(""),cn("");const le=String(T?.filename||"").trim();try{const he=aE(H,{filename:le});_e(he.message)}catch(he){_e(he instanceof Error?he.message:"Download failed")}},[]),RM=h.useCallback(async(g,M="output",T=null,P="path")=>{const L=g?At(g):"",B=String(M||"output").trim()||"output",H=String(P||"").trim();if(L){_e(""),cn("");try{let le="",he="Copied file reference";if(H==="link")le=String(T?.downloadUrl||"").trim()||O_(L,B,typeof window>"u"?C?.url:window.location.href),he="Copied link";else{const yt=Ote(T,C);H==="filename"?(le=yt.filename,he="Copied filename"):H==="relativePath"?(le=yt.relativePath,he="Copied relative path"):(le=yt.path,he="Copied path")}if(!le)throw new Error("No file reference is available to copy");await js(le);const Qe=String(T?.filename||"").trim();_e(Qe&&le!==Qe?`${he} for ${Qe}`:he)}catch(le){_e(le instanceof Error?le.message:"Failed to copy file reference")}}},[C]),gu=h.useCallback(async(g,M="output",T=null)=>{const P=g?At(g):"",L=String(M||"output").trim()||"output";if(!P||!hn||typeof window>"u")return;const B=Pte(P,L),H=`${P}:${L}`;_e(""),cn(""),Et(H);try{const le=await fetch(B,{method:"POST",cache:"no-store"});if(!le.ok)throw new Error(await Bue(le,`Failed to reveal file: ${le.status} ${le.statusText}`))}catch(le){_e(le instanceof Error?le.message:"Failed to reveal file")}finally{Et(le=>le===H?"":le)}},[hn]),tS=h.useCallback(async(g,M)=>{const T=g?At(g):"",P=String(M||"").trim().toLowerCase();if(!T||!P||typeof window>"u")return;const L=`${T}:export:${P}`;_e(""),cn(""),Et(L);const B=P0(P);let H=0,le=!1;const he=()=>{le=!0,H&&(window.clearTimeout(H),H=0)},Qe=async()=>{try{const yt=await Iw(T),_t=Bw(G0(yt?.progress));if(_t&&!le){const Pt=_t.detail?` · ${_t.detail}`:"",Lt=_t.counts?` ${_t.counts}`:"";_e(`Exporting ${B} — ${_t.label}${Pt}${Lt}`)}}catch{}le||(H=window.setTimeout(Qe,jw))};try{_e(`Exporting ${B}...`),H=window.setTimeout(Qe,jw);const yt=await qte({file:T,format:P});if(he(),yt?.cancelled){_e("");return}const _t=String(yt?.filename||"").trim(),Pt=String(yt?.downloadUrl||"").trim();if(Pt){const Lt=aE(Pt,{filename:_t});_e(Lt.message)}else{const Lt=String(yt?.path||"").trim(),Do=_t||P0(P);_e(Lt?`Exported ${Do} to ${Lt}`:`Exported ${Do}`)}}catch(yt){_e(yt instanceof Error?yt.message:"Export failed")}finally{he(),Et(yt=>yt===L?"":yt)}},[]),p3=h.useCallback(g=>{const M=Pa(g),T=il.current;vA(T,M)||(mo(P=>[...P,Pa(T)]),Go([]),Ei(M))},[]),h3=h.useCallback(g=>{$o(Cr.DRAW),Vo(g===an.SURFACE_LINE?an.FREEHAND:g)},[]),PM=h.useCallback(()=>{const g=Fm.current;if(!g.length)return;const M=Pa(g[g.length-1]),T=Pa(il.current);mo(g.slice(0,-1)),Go(P=>[...P,T]),Ei(M)},[]),OM=h.useCallback(()=>{const g=jm.current;if(!g.length)return;const M=Pa(g[g.length-1]),T=Pa(il.current);Go(g.slice(0,-1)),mo(P=>[...P,T]),Ei(M)},[]),g3=h.useCallback(()=>{il.current.length&&(mo(g=>[...g,Pa(il.current)]),Go([]),Ei([]))},[]),y3=h.useCallback(g=>{const M=sa(g);M&&(cu.current=M,Kg()),(il.current.length>0||Fm.current.some(P=>P.length>0)||jm.current.some(P=>P.length>0))&&(il.current=[],Fm.current=[],jm.current=[],Ei([]),mo([]),Go([]))},[Kg]);ice({copyStatus:Qo,screenshotStatus:vn,setCopyStatus:_e,setScreenshotStatus:cn,previewMode:or,viewerAlertOpen:xr,themeSheetOpen:!1,tabToolsOpen:uu,isDesktop:rt,sidebarOpen:pt,previewUiStateRef:Fg,tabToolMode:_o,measureDraftActive:!!Hx?.draft?.anchor,onCancelMeasureDraft:bz,drawingUndoStackRef:Fm,drawingRedoStackRef:jm,handleUndoDrawing:PM,handleRedoDrawing:OM,setPreviewMode:Z,setViewerAlertOpen:_n,setThemeEditing:ie,setTabToolsOpen:Fr,setSidebarOpen:at,setTabToolMode:$o});const kM=h.useCallback(async()=>{if(W)try{const g=`${At(W).replace(/[^a-zA-Z0-9._-]+/g,"-")}.png`;if(!Ns.current?.captureScreenshot)throw new Error("CAD Viewer not ready");await Ns.current.captureScreenshot({filename:g,mode:"clipboard"}),_e(""),cn("Copied screenshot to clipboard")}catch(g){_e(""),cn(g instanceof Error?g.message:"Clipboard copy failed")}},[W]),b3=h.useCallback(()=>{Ma||!km||or||(Fg.current={sidebarOpen:pt,tabToolsOpen:uu,tabToolMode:_o,themeEditing:Er,viewerAlertOpen:xr},_e(""),cn(""),Ei([]),mo([]),Go([]),_n(!1),ie(!1),at(!1),Fr(!1),Z(!0))},[or,pt,Fr,km,_o,uu,xr,Ma]),x3=h.useCallback(()=>{if(!or)return;const g=Fg.current;Fg.current=null,Z(!1),g&&(_n(g.viewerAlertOpen),ie(g.themeEditing),at(g.sidebarOpen),Fr(g.tabToolsOpen),$o(g.tabToolMode))},[or,at,$o,Fr,_n]),S3=g=>{x(!0),b(M=>{const T=new Set(M);return T.has(g)?T.delete(g):T.add(g),T})},E3=vu(gn,"topology")&&_o===Cr.REFERENCES,DM=Pj,w3=Oj,$d=String(j[j.length-1]||"").trim(),LM=h.useMemo(()=>$d?Ji(mr.get($d)):"",[$d,mr,Ji]),v3=h.useMemo(()=>$d?QR(sr,$d)||LM:"",[$d,LM,sr]),A3=ce[ce.length-1]||v3,C3=wi.length>0,M3=Kt.length>0,Gd=!!Le&&So&&uu&&!or&&!Er,FM=_s?JC.sidebarWidth:0,yu=Ts?JC.sheetWidth:0,I3=rt&&_s?FM:rt?ff({viewportWidth:lt,sidebarOpen:!0,sheetOpen:!1,sidebarWidth:Ae,sheetWidth:0,sidebarMinWidth:pc,sheetMinWidth:wu,sidebarMaxWidth:mf,sheetMaxWidth:pf}).sidebarWidth:mb,jM={top:or?0:vue,right:yu,bottom:0,left:FM},N3={top:"14px",right:"14px"},T3=[{id:an.FREEHAND,label:"Freehand",Icon:x2},{id:an.LINE,label:"Line",Icon:b2},{id:an.ARROW,label:"Arrow",Icon:_5},{id:an.DOUBLE_ARROW,label:"Expand",Icon:R5},{id:an.RECTANGLE,label:"Rectangle",Icon:P5},{id:an.CIRCLE,label:"Circle",Icon:O5},{id:an.FILL,label:"Fill",Icon:k5},{id:an.ERASE,label:"Erase",Icon:D5}],_3=St,Zm=[el?bre({displaySettings:St,updateDisplaySettings:gs,clipBounds:no?.bounds||null,explodeMeshData:no||null}):null].filter(Boolean);return d.jsxs(KV,{open:Bm,onOpenChange:$g,mobileOpen:Bm,onMobileOpenChange:$g,"data-glass-tone":Bo,style:{"--sidebar-width":`${I3}px`},className:"relative h-svh overflow-hidden bg-transparent",children:[d.jsx("div",{className:"fixed inset-0 z-0",children:d.jsx(wee,{viewerRef:Ns,renderFormat:gn,drawingThicknessScale:Tj,planMode:Ao&&Mt==="2d",bendAxisX:Ao&&W?.bendAxisX||null,drawingBendLines:Ao?Uj:null,bendAnglesRad:Ao?Hj:null,drawingBends:Ao?ae:null,drawingBendStyle:Ao?bn:"boxed",drawingBendRadiusMm:Ao?rr:0,drawingKFactor:Ao?k:wh,drawingHiddenLayers:Ao?fe:null,drawingOrientation:Ao?ht:null,drawingMaterialColor:Ao?zL(Rt).colorHex:null,drawingGeometry:Ao?tt:null,drawingIsDocument:wg,drawingThicknessMm:Ao?Yn:0,onCameraZoomPercentChange:zt,renderPartsIndividually:Eo||!!EC,stepParameters:EC,selectedMeshData:no,selectedKey:w,selectedImplicitModel:wd,implicitDynamicRenderActive:Sj,implicitGraphicsSettings:qi,missingFileRef:Nt,viewerServerInfo:C,viewerPerspective:ys,viewerPerspectiveRef:cu,themeSettings:xn,displaySettings:_3,previewMode:or,viewportFrameInsets:jM,viewerLoading:Ma,viewerAlert:ec,stepUpdateInProgress:gn===Q.STEP&&Ot,referenceSelectionPending:ry,referenceSelectionUnavailable:Kx,referenceSelectionDeferred:Hm,viewPlaneOffsetRight:jM.right+16,viewerMode:Rj,assemblyPickingActive:Is,assemblyParts:Cz,hiddenPartIds:Az,selectedPartIds:Ez,hoveredPartId:wz,assemblyMates:Rg,selectedMateIds:X,hoveredMateId:me,hoveredReferenceId:yM,selectedReferenceIds:j,selectorRuntime:Ux,displayEdgeRuntime:sz,pickableFaces:uM,pickableEdges:dM,pickableVertices:fM,focusedPartIds:vz,boundsAnimationActive:yd,drawToolActive:DM,measureModeActive:Pd,drawingTool:Qr,drawingStrokes:Ro,handleDrawingStrokesChange:p3,handlePerspectiveChange:y3,handleModelHoverChange:Wz,handleModelReferenceActivate:Kz,handleModelReferenceDoubleActivate:qz,handleModelReferenceContext:Xz,onMeasurePick:gz,onMeasureHoverPoint:yz,activeMeasurementId:Wx,measureState:Hx,viewerContextMenu:mn,onViewerContextMenuClose:Yz,onViewerContextMenuCopyReference:Zz,onViewerContextMenuSelect:e3,onViewerContextMenuFocus:t3,onViewerContextMenuExitAllIsolate:hu,onViewerContextMenuHideOther:o3,onViewerContextMenuHideAll:i3,onViewerContextMenuHide:n3,onViewerContextMenuReveal:r3,onViewerContextMenuResetZoom:s3,onViewerContextMenuZoomToFit:a3,onViewerContextMenuExpandSelected:l3,onViewerContextMenuCollapseSelected:c3,onViewerContextMenuExpandAll:u3,onViewerContextMenuCollapseAll:d3,handleViewerAlertChange:Xj,handleStepModuleTransformDetectedChange:uj,selectionCount:w3,copyButtonLabel:Fz,copyButtonCountLabel:jz,copyReferenceTipActive:zz,panToolActive:VC,handleCopySelection:Bz,handleScreenshotCopy:kM,urdfPosePicker:Eo&&Sd?{active:iu,center:wue,onPickPoint:Dz,onCancel:jd}:null})}),d.jsxs(YV,{className:"pointer-events-none relative z-10 h-svh min-w-0 overflow-hidden bg-transparent",children:[d.jsx(xse,{previewMode:or,sidebarLabelForEntry:Ll,directoryTree:Oe,selectedKey:w,selectedEntry:W,onSelectEntry:eS,entrySourceFormat:Nr,entryHasMesh:bf,entryHasDxf:p1,entryHasUrdf:Zy,activeStepArtifactGenerationFile:Wt,loadingFiles:LC,stepArtifactGenerationAvailable:Ko,filenameLoadActivity:Sz,selectedStepSourceStatus:qt,canRevealFileAssets:hn,canCopyFileAssetLinks:Ys,canCopyFileAssetPaths:ir,fileAccessBusyKey:br,onDownloadFileAsset:_M,onExportModelFile:tS,onRevealFileAsset:gu,onRevealInExplorerView:TM,onCopyFileAssetReference:RM,fileSheetKind:So?Le:"",fileSheetOpen:Gd,onToggleFileSheet:m3,themeEditing:Er,onToggleThemeEditor:Yj}),d.jsx("div",{className:"pointer-events-none relative min-h-0 flex-1 overflow-hidden",children:d.jsxs("div",{className:"flex h-full min-w-0",children:[d.jsx(ene,{previewMode:or,query:u,onQueryChange:f,filteredEntries:se,catalogEntries:a,filteredEntriesTree:Te,selectedKey:w,expandedDirectoryIds:p,onToggleDirectory:S3,onSelectEntry:eS,entrySourceFormat:Nr,entryHasMesh:bf,entryHasDxf:p1,entryHasUrdf:Zy,activeStepArtifactGenerationFile:Wt,loadingFiles:LC,stepArtifactGenerationAvailable:Ko,canRevealFileAssets:hn,canCopyFileAssetLinks:Ys,canCopyFileAssetPaths:ir,fileAccessBusyKey:br,onDownloadFileAsset:_M,onExportModelFile:tS,onRevealFileAsset:gu,onRevealInExplorerView:TM,onCopyFileAssetReference:RM,catalogHydrated:n,catalogRefreshing:r,catalogError:o,resizable:rt,onStartResize:Qj}),d.jsxs("div",{className:"pointer-events-none relative min-w-0 flex-1 overflow-hidden",children:[d.jsx(Xie,{previewMode:or,selectedEntry:W,renderFormat:gn,floatingCadToolbarPosition:N3,drawingViewToggle:Ao,drawingViewMode:Mt,onDrawingViewModeChange:Wj,zoomControlsVisible:!!km,zoomPercent:Ke,onZoomPercentChange:Kj,onZoomReset:qj,selectionToolActive:E3,referenceSelectionPending:ry,referenceSelectionUnavailable:Kx,referenceSelectionDeferred:Hm,urdfPosePickerAvailable:Sd,urdfPosePickerActive:iu,handleToggleUrdfPosePicker:EM,animationAvailable:!!_g?.available,animationPlaying:!!_g?.playing,animationDisabled:!!_g?.disabled,handleAnimationPlayToggle:_g?.onPlayToggle,drawToolActive:DM,measureModeActive:Pd,measureDisabled:xz,panToolActive:VC,handleSelectTabToolMode:f3,viewerLoading:Ma,selectedMeshData:no,selectedImplicitModel:wd,drawingToolOptions:T3,drawingTool:Qr,handleSelectDrawingTool:h3,handleUndoDrawing:PM,handleRedoDrawing:OM,handleClearDrawings:g3,canUndoDrawing:C3,canRedoDrawing:M3,drawingStrokes:Ro,handleEnterPreviewMode:b3,handleExitPreviewMode:x3,handleScreenshotCopy:kM,onExportModelFile:tS,fileAccessBusyKey:br}),!or&&!W&&!Nt&&!Rn?d.jsx(Mse,{entries:a,onSelectEntry:eS,catalogHydrated:n,catalogRefreshing:r,catalogError:o}):null,d.jsx(Fie,{viewerLoading:Lx,previewMode:or,progress:Dr})]}),Le==="step"?d.jsx(xie,{open:Gd,isDesktop:rt,width:yu||pe,onOpenChange:Fr,onStartResize:Id,selectedEntry:W,viewerLoading:Ma||Fx,isAssemblyView:ue,measurements:Ia,activeMeasurementId:Wx,measureModeActive:Pd,onMeasurementActivate:ny,onMeasurementDelete:mM,onMeasurementsClear:pM,stepTreeRoot:sr,assemblyMates:Rg,expandedTreeNodeIds:Ie,loadableTreeNodeIds:su,selectedPartIds:ce,selectedReferenceIds:j,selectedReferences:mz,selectedMateIds:X,selectableNodeIds:pz,activeTreeNodeId:A3,activeTreeNodeScrollKey:et,hoveredPartId:_d,hoveredReferenceId:yM,hoveredMateId:me,hiddenPartIds:st,focusedNodeIds:Fn,onSelectTreeNode:Vz,onSelectReferenceNode:$z,onSelectMateNode:Gz,onCopyTreeNodeReference:Jz,onCopyMateNodeReference:Qz,onFocusTreeNode:Xm,onUnfocusTreeNode:Xx,onExitAllIsolate:hu,onHideOtherTreeNode:Zx,onToggleTreeNode:al,onClearSelection:ll,onHoverTreeNode:Qt,onHoverReferenceNode:Me,onHoverMateNode:we,treeSelectionDisabled:mi,treeSelectionDisabledReason:dj,onTogglePartVisibility:Uz,hideOtherSelectedParts:Hz,hideAllParts:Jx,showAllHiddenParts:Qx,exitIsolate:hu,stepModule:{status:dn,error:vr,definition:ge,enabled:Oo,parameterValues:Ur,animationState:Pm,onParameterChange:fj,onResetParameters:TC,onAnimationSelect:mj,onAnimationPlayToggle:Nx,onAnimationReset:pj,onAnimationScrub:hj,onAnimationSpeedChange:gj,onAnimationLoopToggle:yj,onEnabledChange:bj,onCopyParams:IC,onPasteParams:NC},fileDownloadAvailable:Ys,viewerServerInfo:C,localFileOpenAvailable:hn,fileAccessBusyKey:br,onOpenFileAsset:gu,suppressDynamicMetadataStatus:$e,statusItems:tc,themeTabs:Zm,openSectionIds:sl,onOpenSectionIdsChange:Vm},`step:${w}`):null,Le==="urdf"||Le==="srdf"||Le==="sdf"?d.jsx(Pie,{open:Gd,title:Le==="srdf"?"SRDF":Le==="sdf"?"SDF":"URDF",sourceFormat:Le,showJoints:Le==="urdf"||Le==="srdf"||Le==="sdf",showMotion:Le==="srdf",isDesktop:rt,width:yu||pe,selectedEntry:W,onOpenChange:Fr,onStartResize:Id,joints:Tg,groupStates:_m,activeGroupStateId:lj,jointValues:fr,onJointValueChange:Mz,onGroupStateSelect:Nz,onCopyJointAngles:Lz,onResetPose:Iz,motion:Le==="srdf"&&ou?{srdf:ou.srdf,endEffectors:Xl,planningGroups:Mg,targetFrames:Rm,activeEndEffectorName:wn,activePlanningGroupName:fi.planningGroup,activeTargetFrameName:fi.targetFrame,targetPosition:va,currentPosition:Ed,solving:cj,serverLive:We,actionsEnabled:Sd,moveit2:fi,selectPoseActive:iu,onEndEffectorChange:Tz,onMoveIt2SettingChange:_z,onTargetPositionChange:Rz,onUseCurrentPosition:Pz,onSolve:Oz,onPlan:kz,onSelectPose:EM,onCancelSelectPose:jd}:null,sdf:Le==="sdf"?{info:ut?.sdf||null}:null,fileDownloadAvailable:Ys,viewerServerInfo:C,localFileOpenAvailable:hn,fileAccessBusyKey:br,onOpenFileAsset:gu,suppressDynamicMetadataStatus:$e,statusItems:tc,themeTabs:Zm,openSectionIds:sl,onOpenSectionIdsChange:Vm},`${Le}:${w}`):null,Le==="dxf"?d.jsx(Z_,{open:Gd,kind:"dxf",title:"DXF",isDesktop:rt,width:yu||pe,selectedEntry:W,onOpenChange:Fr,onStartResize:Id,fileDownloadAvailable:Ys,viewerServerInfo:C,localFileOpenAvailable:hn,fileAccessBusyKey:br,onOpenFileAsset:gu,suppressDynamicMetadataStatus:$e,statusItems:tc,themeTabs:[moe({thicknessMm:Yn,onThicknessChange:kt,units:qe,onUnitsChange:Ye,material:Rt,onMaterialChange:Xn,onReset:zj}),...ae.length>0?[poe({bends:ae,onBendChange:jj,bendStyle:bn,onBendStyleChange:Jr,bendRadiusMm:rr,onBendRadiusChange:Or,kFactor:k,onKFactorChange:oe,units:qe,onRotateOrientation:$j,onBendsReset:Bj,onOrientationReset:Vj})]:[],...Vg.length>1?[xoe({layers:Vg,hiddenLayers:fe,onLayerVisibilityChange:Gj})]:[],...Zm],openSectionIds:sl,onOpenSectionIdsChange:Vm},`dxf:${w}`):null,Le==="mesh"?d.jsx(Z_,{open:Gd,title:xue(gt),isDesktop:rt,width:yu||pe,selectedEntry:W,onOpenChange:Fr,onStartResize:Id,fileDownloadAvailable:Ys,viewerServerInfo:C,localFileOpenAvailable:hn,fileAccessBusyKey:br,onOpenFileAsset:gu,suppressDynamicMetadataStatus:$e,statusItems:tc,themeTabs:Zm,openSectionIds:sl,onOpenSectionIdsChange:Vm,measurements:Ia,activeMeasurementId:Wx,measureModeActive:Pd,onMeasurementActivate:ny,onMeasurementDelete:mM,onMeasurementsClear:pM},`mesh:${w}`):null,Le==="implicit"?d.jsx(koe,{open:Gd,title:"Implicit CAD",isDesktop:rt,width:yu||pe,selectedEntry:W,onOpenChange:Fr,onStartResize:Id,parameterRuntime:{status:Ss===Ft.LOADING?"loading":vd?"error":Yt?"ready":"idle",error:vd,definition:Yt,parameterValues:Xa,animationState:Om,onParameterChange:Ej,onResetParameters:TC,onAnimationSelect:wj,onAnimationPlayToggle:Rx,onAnimationReset:vj,onAnimationScrub:Aj,onAnimationSpeedChange:Cj,onAnimationLoopToggle:Mj,onCopyParams:IC,onPasteParams:NC},graphicsRuntime:{model:wd,settings:qi,onSettingsChange:di},fileDownloadAvailable:Ys,viewerServerInfo:C,localFileOpenAvailable:hn,fileAccessBusyKey:br,onOpenFileAsset:gu,suppressDynamicMetadataStatus:$e,statusItems:tc,themeTabs:Zm,openSectionIds:sl,onOpenSectionIdsChange:Vm},`implicit:${w}`):null,Er?d.jsx(Sre,{open:!0,isDesktop:rt,width:yu||pe,onClose:Fj,onStartResize:Id,themeSettings:kn,themeId:Sr,resolvedColorSchemeMode:ui,onSelectTheme:Dj,updateThemeSettings:Lj}):null]})}),d.jsx(Aie,{copyStatus:Qo,screenshotStatus:vn,persistenceStatus:Zr,motionErrorStatus:Pr,previewMode:or,onClear:()=>{_e(""),cn(""),en(""),te(""),Bl.current=""}}),d.jsx(kie,{viewerAlertOpen:xr,viewerAlert:ec,previewMode:or,setViewerAlertOpen:_n})]})]})}const Gue="/assets/favicon-C-31TkWB.ico",n2="root",r2="__cadViewerRoot";function Uue(){if(typeof document>"u")return;let e=document.querySelector('link[rel="icon"]');e||(e=document.createElement("link"),e.rel="icon",document.head.appendChild(e)),e.type="image/x-icon",e.href=`${Gue}?v=star-tile`}function Hue(){const e=document.getElementById(n2);if(!e)throw new Error(`Missing #${n2} mount point.`);Uue(),aee(),document.title=bk;const t=globalThis[r2],n=t?.element===e&&t?.root?t.root:k3.createRoot(e);globalThis[r2]={element:e,root:n},n.render(d.jsx(h.StrictMode,{children:d.jsx(Wue,{})}))}function Wue(){const{manifest:e,revision:t,catalogHydrated:n,catalogRefreshing:r,catalogError:o,activeDir:i}=h.useSyncExternalStore(Bte,F_,F_);return d.jsx($ue,{manifestRevision:t,manifestEntries:e.entries,catalogHydrated:n,catalogRefreshing:r,catalogError:o,activeDir:i})}Hue();export{$O as i,kf as m,Jue as p};
|
||
//# sourceMappingURL=index-CtivV2cL.js.map
|