Files
earthtojake--text-to-cad/skills/cad-viewer/scripts/viewer/dist/assets/index-CtivV2cL.js
T
github-actions[bot] d6856b5a76 Publish 0.4.21 from develop to main
Source ref: develop
Source commit: 1ad217cfec
Target branch: main
Previous target: 02ecd59dd1
Release base: 02ecd59dd1
Previous source: 290ecd21a0

Included commits since previous source:
1ad217cf Merge pull request #306 from earthtojake/release/0.4.21
0409d80a Release 0.4.21
0cbb1b01 Merge pull request #265 from knewnothing-git/add-dfam-check-skill
757591ac fix(dfam-check): carry p05_mm through per_body
f666a97d fix(dfam-check): guard degenerate meshes, cover advertised formats
cb6f984b fix(dfam-check): address maintainer review on #265
a63a4325 test(dfam-check): verify measurements against known-by-construction parts
27f92ee9 feat(dfam-check): measure meshes against per-process DfAM limits
2026-08-21 03:07:38 +00:00

1007 lines
1.0 MiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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&&LT(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&&lt&&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