brepjs-cad 0.72.0 → 0.74.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,77 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.74.0](https://github.com/andymai/brepjs/compare/brepjs-cad-v0.73.1...brepjs-cad-v0.74.0) (2026-07-16)
4
+
5
+
6
+ ### Features
7
+
8
+ * **brepjs-cad:** add airfoils.md feature recipe (swept fans/props/impellers) ([#1566](https://github.com/andymai/brepjs/issues/1566)) ([8c786db](https://github.com/andymai/brepjs/commit/8c786db69ead59edcdc9d0f8525e43324552e4db))
9
+ * **brepjs-cad:** aimed section cut for the design judge (Phase 3) ([#1543](https://github.com/andymai/brepjs/issues/1543)) ([40e5acd](https://github.com/andymai/brepjs/commit/40e5acd54318d768dc5a620403d17d43e358e698))
10
+ * **brepjs-cad:** decomposed, cross-checked design-judge rubric (Phase 1.5) ([#1539](https://github.com/andymai/brepjs/issues/1539)) ([8059b6d](https://github.com/andymai/brepjs/commit/8059b6d701ae5980e6bb11f51695aa102fe2bb43))
11
+ * **brepjs-cad:** deterministic body/interference metrics for the design judge (Phase 1) ([#1531](https://github.com/andymai/brepjs/issues/1531)) ([d296b54](https://github.com/andymai/brepjs/commit/d296b545f2d7084b861683d61b626ace4747a371))
12
+ * **brepjs-cad:** grade judge quality against a reference exemplar ([#1731](https://github.com/andymai/brepjs/issues/1731)) ([9d4aaeb](https://github.com/andymai/brepjs/commit/9d4aaeb8e4830c6be78668854730367194b6a9e5))
13
+ * **brepjs-cad:** kernel-anchored Set-of-Marks for the design judge ([#1545](https://github.com/andymai/brepjs/issues/1545)) ([2b6f5b4](https://github.com/andymai/brepjs/commit/2b6f5b436f2a73c96747cc71f83afc8715765cd0))
14
+ * **brepjs-cad:** reliable internal-bore detection for the design judge (keystone) ([#1542](https://github.com/andymai/brepjs/issues/1542)) ([0d780c3](https://github.com/andymai/brepjs/commit/0d780c3b73c2551dab2f04a6ff31bf9ec8cae2ab))
15
+ * **brepjs-cad:** surface fragmentation in verify --check (the [#1](https://github.com/andymai/brepjs/issues/1) design defect) ([#1560](https://github.com/andymai/brepjs/issues/1560)) ([45a4f6e](https://github.com/andymai/brepjs/commit/45a4f6e268331b7816cd9957fbdab4c0893b2000))
16
+ * **brepjs-cad:** xray internal-reveal shot for the design judge (Phase 2a) ([#1540](https://github.com/andymai/brepjs/issues/1540)) ([eca5bc9](https://github.com/andymai/brepjs/commit/eca5bc9ad20fc7947132d647952245cfe466a7f4))
17
+
18
+
19
+ ### Bug Fixes
20
+
21
+ * **brepjs-cad:** add a triangular-gusset recipe to the implement skill (bracket/enclosure eval) ([#1571](https://github.com/andymai/brepjs/issues/1571)) ([346d042](https://github.com/andymai/brepjs/commit/346d0423fefa3bd163f4075f69bf96d478543bf5))
22
+ * **brepjs-cad:** add the "realize the designed object" bar to the implement skill ([#1563](https://github.com/andymai/brepjs/issues/1563)) ([e150357](https://github.com/andymai/brepjs/commit/e1503570aaf271ebef1e39d48be9c70a5ffe8f03))
23
+ * **brepjs-cad:** bore detector misses full-cylinder through-holes ([#1551](https://github.com/andymai/brepjs/issues/1551)) ([#1586](https://github.com/andymai/brepjs/issues/1586)) ([b6d61eb](https://github.com/andymai/brepjs/commit/b6d61eb6d88e2e4a3aa1c55b78dc2e76315ebc02))
24
+ * **brepjs-cad:** close gear-teeth edge cases found by /eval-skill (ring, worm tip relief, GT2) ([#1548](https://github.com/andymai/brepjs/issues/1548)) ([4bd0494](https://github.com/andymai/brepjs/commit/4bd049401f3affcc3f38e3a31bb9520653a3e89c))
25
+ * **brepjs-cad:** code + hint the degenerate-edge (duplicate-vertex) verify failure ([#1550](https://github.com/andymai/brepjs/issues/1550)) ([502dffc](https://github.com/andymai/brepjs/commit/502dffc4a2ae495ae5c98b0c7966721abe0d5f48))
26
+ * **brepjs-cad:** correct spur-gear example flanks + add root fillet ([#1528](https://github.com/andymai/brepjs/issues/1528)) ([6971c6b](https://github.com/andymai/brepjs/commit/6971c6befa1fea36a8c2f3ee89c4aa20946020c7))
27
+ * **brepjs-cad:** exploded-joint legibility + disjoint-compound caveat (basics eval) ([#1565](https://github.com/andymai/brepjs/issues/1565)) ([9d06121](https://github.com/andymai/brepjs/commit/9d0612111a595e57fcfca6fd191ed9169fc2c062))
28
+ * **brepjs-cad:** handle brepjs/playground refs + summarize body relations in the digest ([#1547](https://github.com/andymai/brepjs/issues/1547)) ([b0acef0](https://github.com/andymai/brepjs/commit/b0acef0ad80cdd61f0d2683f1e6d0ece0cae028e))
29
+ * **brepjs-cad:** heal 6 implement-skill findings from the full-flywheel re-run ([#1568](https://github.com/andymai/brepjs/issues/1568)) ([f63bf3d](https://github.com/andymai/brepjs/commit/f63bf3d5a0aa638d06e11dd7e2c27e84dbf74746))
30
+ * **brepjs-cad:** heal implement + polish skills from clean-room eval ([#1526](https://github.com/andymai/brepjs/issues/1526)) ([0645e16](https://github.com/andymai/brepjs/commit/0645e163e1d8759c95406d0f9526d0aa3b5dd480))
31
+ * **brepjs-cad:** heal implement skill — deep-stack bounds extremes aren't datums ([#1529](https://github.com/andymai/brepjs/issues/1529)) ([5ed366f](https://github.com/andymai/brepjs/commit/5ed366f266b3e6e50ae4b54d5779aa05453e894a))
32
+ * **brepjs-cad:** heal implement skill from the eval flywheel (3 findings) ([#1552](https://github.com/andymai/brepjs/issues/1552)) ([51def82](https://github.com/andymai/brepjs/commit/51def82db4e0600e85f45e4dd828cc9caee58d15))
33
+ * **brepjs-cad:** heal implement skill from the full-corpus eval flywheel (4 findings) ([#1554](https://github.com/andymai/brepjs/issues/1554)) ([3cfc28e](https://github.com/andymai/brepjs/commit/3cfc28ed8b82c46330f1d75f1e98c13fd4d65a06))
34
+ * **brepjs-cad:** make blind-judge reference adaptation render multi-body parts at scale ([#1530](https://github.com/andymai/brepjs/issues/1530)) ([18d4523](https://github.com/andymai/brepjs/commit/18d4523c85e1b22496bb5c0b8fb382a1146429c6))
35
+ * **brepjs-cad:** polish skill — bosses on shells must fuse, or they float (eval finding) ([#1553](https://github.com/andymai/brepjs/issues/1553)) ([07cbf93](https://github.com/andymai/brepjs/commit/07cbf93e47fbf880df53bc2a1cee05bf0d17e2d5))
36
+ * **brepjs-cad:** teach worm-wheel and rack tooth recipes; fix gear-build contradiction ([#1544](https://github.com/andymai/brepjs/issues/1544)) ([b0da85f](https://github.com/andymai/brepjs/commit/b0da85f218d463e0f1ef0ca8760cec54b4814b02))
37
+ * **release:** unbreak Vercel — repin brepjs-cad to brepjs >=18.0.0 ([#1711](https://github.com/andymai/brepjs/issues/1711)) ([78c780a](https://github.com/andymai/brepjs/commit/78c780a3ab2fcc78f26b32029df72795582e145c))
38
+
39
+ ## [0.73.0](https://github.com/andymai/brepjs/compare/brepjs-cad-v0.72.0...brepjs-cad-v0.73.0) (2026-07-16)
40
+
41
+
42
+ ### Features
43
+
44
+ * **brepjs-cad:** add airfoils.md feature recipe (swept fans/props/impellers) ([#1566](https://github.com/andymai/brepjs/issues/1566)) ([8c786db](https://github.com/andymai/brepjs/commit/8c786db69ead59edcdc9d0f8525e43324552e4db))
45
+ * **brepjs-cad:** aimed section cut for the design judge (Phase 3) ([#1543](https://github.com/andymai/brepjs/issues/1543)) ([40e5acd](https://github.com/andymai/brepjs/commit/40e5acd54318d768dc5a620403d17d43e358e698))
46
+ * **brepjs-cad:** decomposed, cross-checked design-judge rubric (Phase 1.5) ([#1539](https://github.com/andymai/brepjs/issues/1539)) ([8059b6d](https://github.com/andymai/brepjs/commit/8059b6d701ae5980e6bb11f51695aa102fe2bb43))
47
+ * **brepjs-cad:** deterministic body/interference metrics for the design judge (Phase 1) ([#1531](https://github.com/andymai/brepjs/issues/1531)) ([d296b54](https://github.com/andymai/brepjs/commit/d296b545f2d7084b861683d61b626ace4747a371))
48
+ * **brepjs-cad:** grade judge quality against a reference exemplar ([#1731](https://github.com/andymai/brepjs/issues/1731)) ([9d4aaeb](https://github.com/andymai/brepjs/commit/9d4aaeb8e4830c6be78668854730367194b6a9e5))
49
+ * **brepjs-cad:** kernel-anchored Set-of-Marks for the design judge ([#1545](https://github.com/andymai/brepjs/issues/1545)) ([2b6f5b4](https://github.com/andymai/brepjs/commit/2b6f5b436f2a73c96747cc71f83afc8715765cd0))
50
+ * **brepjs-cad:** reliable internal-bore detection for the design judge (keystone) ([#1542](https://github.com/andymai/brepjs/issues/1542)) ([0d780c3](https://github.com/andymai/brepjs/commit/0d780c3b73c2551dab2f04a6ff31bf9ec8cae2ab))
51
+ * **brepjs-cad:** surface fragmentation in verify --check (the [#1](https://github.com/andymai/brepjs/issues/1) design defect) ([#1560](https://github.com/andymai/brepjs/issues/1560)) ([45a4f6e](https://github.com/andymai/brepjs/commit/45a4f6e268331b7816cd9957fbdab4c0893b2000))
52
+ * **brepjs-cad:** xray internal-reveal shot for the design judge (Phase 2a) ([#1540](https://github.com/andymai/brepjs/issues/1540)) ([eca5bc9](https://github.com/andymai/brepjs/commit/eca5bc9ad20fc7947132d647952245cfe466a7f4))
53
+
54
+
55
+ ### Bug Fixes
56
+
57
+ * **brepjs-cad:** add a triangular-gusset recipe to the implement skill (bracket/enclosure eval) ([#1571](https://github.com/andymai/brepjs/issues/1571)) ([346d042](https://github.com/andymai/brepjs/commit/346d0423fefa3bd163f4075f69bf96d478543bf5))
58
+ * **brepjs-cad:** add the "realize the designed object" bar to the implement skill ([#1563](https://github.com/andymai/brepjs/issues/1563)) ([e150357](https://github.com/andymai/brepjs/commit/e1503570aaf271ebef1e39d48be9c70a5ffe8f03))
59
+ * **brepjs-cad:** bore detector misses full-cylinder through-holes ([#1551](https://github.com/andymai/brepjs/issues/1551)) ([#1586](https://github.com/andymai/brepjs/issues/1586)) ([b6d61eb](https://github.com/andymai/brepjs/commit/b6d61eb6d88e2e4a3aa1c55b78dc2e76315ebc02))
60
+ * **brepjs-cad:** close gear-teeth edge cases found by /eval-skill (ring, worm tip relief, GT2) ([#1548](https://github.com/andymai/brepjs/issues/1548)) ([4bd0494](https://github.com/andymai/brepjs/commit/4bd049401f3affcc3f38e3a31bb9520653a3e89c))
61
+ * **brepjs-cad:** code + hint the degenerate-edge (duplicate-vertex) verify failure ([#1550](https://github.com/andymai/brepjs/issues/1550)) ([502dffc](https://github.com/andymai/brepjs/commit/502dffc4a2ae495ae5c98b0c7966721abe0d5f48))
62
+ * **brepjs-cad:** correct spur-gear example flanks + add root fillet ([#1528](https://github.com/andymai/brepjs/issues/1528)) ([6971c6b](https://github.com/andymai/brepjs/commit/6971c6befa1fea36a8c2f3ee89c4aa20946020c7))
63
+ * **brepjs-cad:** exploded-joint legibility + disjoint-compound caveat (basics eval) ([#1565](https://github.com/andymai/brepjs/issues/1565)) ([9d06121](https://github.com/andymai/brepjs/commit/9d0612111a595e57fcfca6fd191ed9169fc2c062))
64
+ * **brepjs-cad:** handle brepjs/playground refs + summarize body relations in the digest ([#1547](https://github.com/andymai/brepjs/issues/1547)) ([b0acef0](https://github.com/andymai/brepjs/commit/b0acef0ad80cdd61f0d2683f1e6d0ece0cae028e))
65
+ * **brepjs-cad:** heal 6 implement-skill findings from the full-flywheel re-run ([#1568](https://github.com/andymai/brepjs/issues/1568)) ([f63bf3d](https://github.com/andymai/brepjs/commit/f63bf3d5a0aa638d06e11dd7e2c27e84dbf74746))
66
+ * **brepjs-cad:** heal implement + polish skills from clean-room eval ([#1526](https://github.com/andymai/brepjs/issues/1526)) ([0645e16](https://github.com/andymai/brepjs/commit/0645e163e1d8759c95406d0f9526d0aa3b5dd480))
67
+ * **brepjs-cad:** heal implement skill — deep-stack bounds extremes aren't datums ([#1529](https://github.com/andymai/brepjs/issues/1529)) ([5ed366f](https://github.com/andymai/brepjs/commit/5ed366f266b3e6e50ae4b54d5779aa05453e894a))
68
+ * **brepjs-cad:** heal implement skill from the eval flywheel (3 findings) ([#1552](https://github.com/andymai/brepjs/issues/1552)) ([51def82](https://github.com/andymai/brepjs/commit/51def82db4e0600e85f45e4dd828cc9caee58d15))
69
+ * **brepjs-cad:** heal implement skill from the full-corpus eval flywheel (4 findings) ([#1554](https://github.com/andymai/brepjs/issues/1554)) ([3cfc28e](https://github.com/andymai/brepjs/commit/3cfc28ed8b82c46330f1d75f1e98c13fd4d65a06))
70
+ * **brepjs-cad:** make blind-judge reference adaptation render multi-body parts at scale ([#1530](https://github.com/andymai/brepjs/issues/1530)) ([18d4523](https://github.com/andymai/brepjs/commit/18d4523c85e1b22496bb5c0b8fb382a1146429c6))
71
+ * **brepjs-cad:** polish skill — bosses on shells must fuse, or they float (eval finding) ([#1553](https://github.com/andymai/brepjs/issues/1553)) ([07cbf93](https://github.com/andymai/brepjs/commit/07cbf93e47fbf880df53bc2a1cee05bf0d17e2d5))
72
+ * **brepjs-cad:** teach worm-wheel and rack tooth recipes; fix gear-build contradiction ([#1544](https://github.com/andymai/brepjs/issues/1544)) ([b0da85f](https://github.com/andymai/brepjs/commit/b0da85f218d463e0f1ef0ca8760cec54b4814b02))
73
+ * **release:** unbreak Vercel — repin brepjs-cad to brepjs >=18.0.0 ([#1711](https://github.com/andymai/brepjs/issues/1711)) ([78c780a](https://github.com/andymai/brepjs/commit/78c780a3ab2fcc78f26b32029df72795582e145c))
74
+
3
75
  ## [0.72.0](https://github.com/andymai/brepjs/compare/brepjs-cad-v0.71.1...brepjs-cad-v0.72.0) (2026-07-16)
4
76
 
5
77
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "brepjs-cad",
3
- "version": "0.72.0",
3
+ "version": "0.74.0",
4
4
  "description": "Brainstorm → design → author → verify → polish pipeline for parametric brepjs CAD, with the brep CLI",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -12,7 +12,7 @@ var e=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports);function
12
12
  `)){let t=e.trim();if(t.startsWith(`v `)){let e=t.slice(2).trim().split(/\s+/);r.push(Number(e[0]),Number(e[1]),Number(e[2]))}else if(t.startsWith(`f `)){let e=t.slice(2).trim().split(/\s+/).map(e=>{let t=e.split(`/`)[0]??``,n=Number(t);return n>0?n-1:r.length/3+n});for(let t=1;t+1<e.length;t++)i.push(e[0]??0,e[t]??0,e[t+1]??0)}}return tw(e,{vertProperties:Float32Array.from(r),triVerts:Uint32Array.from(i)})}function rw(e,t){let n=new Uint8Array(t),r=new TextDecoder().decode(n.subarray(0,Math.min(n.length,80))).trimStart().toLowerCase().startsWith(`solid`)&&ow(n),i=[];if(r){let e=new TextDecoder().decode(n).match(/vertex\s+(\S+)\s+(\S+)\s+(\S+)/g)??[];for(let t of e){let e=t.trim().split(/\s+/);i.push(Number(e[1]),Number(e[2]),Number(e[3]))}}else{let e=new DataView(t),n=e.getUint32(80,!0),r=84;for(let t=0;t<n;t++){r+=12;for(let t=0;t<3;t++)i.push(e.getFloat32(r,!0),e.getFloat32(r+4,!0),e.getFloat32(r+8,!0)),r+=12;r+=2}}let a=aw(i);return tw(e,{vertProperties:Float32Array.from(a.vertices),triVerts:Uint32Array.from(a.indices)})}var iw=1e6;function aw(e){let t=[],n=[],r=new Map;for(let i=0;i+2<e.length;i+=3){let a=e[i]??0,o=e[i+1]??0,s=e[i+2]??0,c=`${Math.round(a*iw)},${Math.round(o*iw)},${Math.round(s*iw)}`,l=r.get(c);l===void 0&&(l=t.length/3,r.set(c,l),t.push(a,o,s)),n.push(l)}return{vertices:t,indices:n}}function ow(e){return e.length<84?!0:84+new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(80,!0)*50!==e.length}var sw=1e-6;function cw(e,t){let n=H(t);if(n.replayable)return $S(n,e)}function lw(e,t){let n=KC(t),r=Math.floor(n.triVerts.length/3),i=[];for(let t=0;t<r;t++){let[r,a,o]=XC(n,t),s=e.buildTriFace(YC(n,r),YC(n,a),YC(n,o));s&&i.push(s)}if(i.length===0)throw Error(`manifold: cannot export — shape has no triangles to facet`);return e.sewAndSolidify(i,sw)}function uw(e){let t=Ly(`B-rep export`),n=cw(t,e);return n===void 0?(console.warn(`manifold: exact B-rep unavailable (non-replayable op-graph); exporting faceted approximation`),{occt:t,brep:lw(t,e)}):{occt:t,brep:n}}function dw(e,t,n,r){let i=t.mesh(n,{tolerance:.01,angularTolerance:.5});return tw(e,{vertProperties:Float32Array.from(i.vertices),triVerts:Uint32Array.from(i.triangles)},r)}var fw=1179937895,pw=2,mw=1313821514,hw=5130562,gw=5126,_w=5125,vw=5123,yw=5121,bw=34962,xw=34963,Sw=4;function Cw(e){return e+3&-4}function ww(e){let t=KC(e),n=t.numProp&&t.numProp>=3?t.numProp:3,r=Math.floor(t.vertProperties.length/n),i=t.triVerts.length,a=new Float32Array(r*3),o=1/0,s=1/0,c=1/0,l=-1/0,u=-1/0,d=-1/0;for(let e=0;e<r;e++){let r=t.vertProperties[e*n]??0,i=t.vertProperties[e*n+1]??0,f=t.vertProperties[e*n+2]??0;a[e*3]=r,a[e*3+1]=i,a[e*3+2]=f,r<o&&(o=r),i<s&&(s=i),f<c&&(c=f),r>l&&(l=r),i>u&&(u=i),f>d&&(d=f)}r===0&&(o=s=c=l=u=d=0);let f=Uint32Array.from(t.triVerts),p=a.byteLength,m=Cw(p),h=m+f.byteLength,g={asset:{version:`2.0`,generator:`brepjs manifold kernel`},scene:0,scenes:[{nodes:[0]}],nodes:[{mesh:0}],meshes:[{primitives:[{attributes:{POSITION:0},indices:1,mode:Sw}]}],accessors:[{bufferView:0,componentType:gw,count:r,type:`VEC3`,min:[o,s,c],max:[l,u,d]},{bufferView:1,componentType:_w,count:i,type:`SCALAR`}],bufferViews:[{buffer:0,byteOffset:0,byteLength:p,target:bw},{buffer:0,byteOffset:m,byteLength:f.byteLength,target:xw}],buffers:[{byteLength:h}]},_=new TextEncoder().encode(JSON.stringify(g)),v=Cw(_.length),y=Cw(h),b=20+v+8+y,x=new ArrayBuffer(b),S=new DataView(x),C=new Uint8Array(x);S.setUint32(0,fw,!0),S.setUint32(4,pw,!0),S.setUint32(8,b,!0);let w=12;S.setUint32(w,v,!0),S.setUint32(w+4,mw,!0),w+=8,C.set(_,w);for(let e=_.length;e<v;e++)C[w+e]=32;return w+=v,S.setUint32(w,y,!0),S.setUint32(w+4,hw,!0),w+=8,C.set(new Uint8Array(a.buffer,a.byteOffset,p),w),C.set(new Uint8Array(f.buffer,f.byteOffset,f.byteLength),w+m),x}function Tw(e,t){let n=new DataView(t);if(n.getUint32(0,!0)!==fw)throw Error(`manifold: importGLB — not a binary glTF (bad magic)`);let r=n.getUint32(8,!0),i,a,o=12;for(;o<r;){let e=n.getUint32(o,!0),r=n.getUint32(o+4,!0),s=new Uint8Array(t,o+8,e);r===mw?i=JSON.parse(new TextDecoder().decode(s)):r===hw&&(a=s),o+=8+e}if(!i||typeof i!=`object`||!a)throw Error(`manifold: importGLB — missing JSON or BIN chunk`);let s=i,c=s.meshes?.[0]?.primitives[0],l=s.accessors??[],u=s.bufferViews??[];if(!c||c.attributes.POSITION===void 0)throw Error(`manifold: importGLB — no POSITION attribute`);let d=l[c.attributes.POSITION];if(!d)throw Error(`manifold: importGLB — invalid POSITION accessor`);let f=u[d.bufferView];if(!f)throw Error(`manifold: importGLB — invalid POSITION bufferView`);let p=new Float32Array(a.buffer.slice(a.byteOffset+(f.byteOffset??0),a.byteOffset+(f.byteOffset??0)+d.count*3*4)),m;if(c.indices!==void 0){let e=l[c.indices];if(!e)throw Error(`manifold: importGLB — invalid indices accessor`);let t=u[e.bufferView];if(!t)throw Error(`manifold: importGLB — invalid indices bufferView`);let n=e.componentType===_w?4:e.componentType===vw?2:+(e.componentType===yw);if(n===0)throw Error(`manifold: importGLB — unsupported index component type ${e.componentType}`);let r=a.byteOffset+(t.byteOffset??0),i=new DataView(a.buffer,r,e.count*n);m=new Uint32Array(e.count);for(let t=0;t<e.count;t++){let e=t*n;m[t]=n===4?i.getUint32(e,!0):n===2?i.getUint16(e,!0):i.getUint8(e)}}else m=Uint32Array.from({length:d.count},(e,t)=>t);return tw(e,{vertProperties:p,triVerts:m},`importGLB`)}function Ew(e){return{exportSTL:(e,t)=>QC(e,t),exportOBJ:e=>$C(e),exportPLY:e=>ew(e),importSTL:t=>rw(e,typeof t==`string`?new TextEncoder().encode(t).buffer:t),importOBJ:t=>nw(e,t),exportSTEP:e=>Ly(`exportSTEP`).exportSTEP(e.map(e=>uw(e).brep)),exportIGES:e=>Ly(`exportIGES`).exportIGES(e.map(e=>uw(e).brep)),toBREP:e=>{let{occt:t,brep:n}=uw(e);return t.toBREP(n)},exportSTEPAssembly:(e,t)=>{let n=Ly(`exportSTEPAssembly`),r=e.map(e=>{let t={shape:uw(e.shape).brep,name:e.name};return e.color===void 0?t:{...t,color:e.color}});return n.exportSTEPAssembly(r,t)},createXCAFDocument:e=>{let t=Ly(`createXCAFDocument`),n=e.map(e=>{let t={shape:uw(e.shape).brep,name:e.name};return e.color===void 0?t:{...t,color:e.color}});return t.createXCAFDocument(n)},writeXCAFToSTEP:(e,t)=>Ly(`writeXCAFToSTEP`).writeXCAFToSTEP(e,t),exportSTEPConfigured:(e,t)=>{let n=Ly(`exportSTEPConfigured`),r=e.map(e=>{let t={shape:uw(e.shape).brep},n=e.name===void 0?t:{...t,name:e.name};return e.color===void 0?n:{...n,color:e.color}});return n.exportSTEPConfigured(r,t)},importSTEP:t=>{let n=Ly(`importSTEP`);return n.importSTEP(t).map(t=>dw(e,n,t,`importSTEP`))},importIGES:t=>{let n=Ly(`importIGES`);return n.importIGES(t).map(t=>dw(e,n,t,`importIGES`))},fromBREP:t=>{let n=Ly(`fromBREP`);return dw(e,n,n.fromBREP(t),`fromBREP`)},exportGLB:e=>ww(e),importGLB:t=>Tw(e,t),export3MF:()=>{throw Error(`manifold: 3MF IO is unsupported on the mesh kernel; export GLB/STL/OBJ or use a B-rep kernel`)},import3MF:()=>{throw Error(`manifold: 3MF IO is unsupported on the mesh kernel; export GLB/STL/OBJ or use a B-rep kernel`)}}}function Dw(e){return V(e).getMesh()}function Ow(e,t){let n=t*(e.numProp&&e.numProp>=3?e.numProp:3);return[e.vertProperties[n]??0,e.vertProperties[n+1]??0,e.vertProperties[n+2]??0]}function kw(e,t){let n=e;if(n&&n.__manifoldSub&&n.occt){let e=Iy();if(!e)throw Error(`manifold: sub-shape geometry query requires a registered occt kernel`);return t(n.occt,e)}let r=Py(e);if(!r)throw Error(`manifold: exact geometry query requires a manifold shape handle`);let i=Iy();if(!i)throw Error(`manifold: exact geometry query unsupported on manifold kernel; no B-rep kernel registered`);if(!r.node.replayable)throw Error(`manifold: exact geometry query unsupported; shape originates from a non-replayable op (raw mesh import or mesh boolean)`);let a=Ry.get(r.node);return a===void 0&&(a=$S(r.node,i),Ry.set(r.node,a)),t(a,i)}function Aw(e){let t=Py(e);if(!t)return;let n=t.node;return n.op===`profileEdge`?n.params?.curve:void 0}function jw(e){return{curveType:e=>{let t=Aw(e);return t?wb(t):PC(e)?e.curveType:kw(e,(e,t)=>t.curveType(e))},curveParameters:e=>{let t=Aw(e);if(t){let e=Tb(t);return[e.first,e.last]}return PC(e)?[0,e.length]:kw(e,(e,t)=>t.curveParameters(e))},curvePointAtParam:(e,t)=>{let n=Aw(e);return n?Eb(n,t):PC(e)?FC(e,t):kw(e,(e,n)=>n.curvePointAtParam(e,t))},curveTangent:(e,t)=>{let n=Aw(e);return n?{point:Eb(n,t),tangent:Db(n,t)}:PC(e)?{point:FC(e,t),tangent:IC(e,t)}:kw(e,(e,n)=>n.curveTangent(e,t))},curveIsClosed:e=>{let t=Aw(e);return t?kb(t):kw(e,(e,t)=>t.curveIsClosed(e))},curveIsPeriodic:e=>{let t=Aw(e);return t?Ab(t):kw(e,(e,t)=>t.curveIsPeriodic(e))},curvePeriod:e=>{let t=Aw(e);return t?jb(t):kw(e,(e,t)=>t.curvePeriod(e))},interpolatePoints:(e,t)=>Ly(`interpolatePoints`).interpolatePoints(e,t),approximatePoints:(e,t)=>Ly(`approximatePoints`).approximatePoints(e,t),curveDegreeElevate:(e,t)=>kw(e,(e,n)=>n.curveDegreeElevate(e,t)),curveKnotInsert:(e,t,n)=>kw(e,(e,r)=>r.curveKnotInsert(e,t,n)),curveKnotRemove:(e,t,n)=>kw(e,(e,r)=>r.curveKnotRemove(e,t,n)),curveSplit:(e,t)=>kw(e,(e,n)=>n.curveSplit(e,t)),createCurveAdaptor:e=>kw(e,(e,t)=>t.createCurveAdaptor(e)),getBezierPenultimatePole:e=>kw(e,(e,t)=>t.getBezierPenultimatePole(e)),getNurbsCurveData:e=>kw(e,(e,t)=>t.getNurbsCurveData?.(e)??null),vertexPosition:e=>NC(e)?e.point:Py(e)?Ow(Dw(e),0):kw(e,(e,t)=>t.vertexPosition(e)),surfaceType:e=>{if(wC(e))return`plane`;let t=Py(e);return t&&t.node.op===`profileFace`?`plane`:kw(e,(e,t)=>t.surfaceType(e))},uvBounds:e=>wC(e)?{uMin:0,uMax:1,vMin:0,vMax:1}:kw(e,(e,t)=>t.uvBounds(e)),outerWire:e=>kw(e,(e,t)=>t.outerWire(e)),surfaceNormal:(e,t,n)=>wC(e)?e.normal:kw(e,(e,r)=>r.surfaceNormal(e,t,n)),pointOnSurface:(e,t,n)=>kw(e,(e,r)=>r.pointOnSurface(e,t,n)),uvFromPoint:(e,t)=>kw(e,(e,n)=>n.uvFromPoint(e,t)),projectPointOnFace:(e,t)=>kw(e,(e,n)=>n.projectPointOnFace(e,t)),classifyPointOnFace:(e,t,n,r)=>kw(e,(e,i)=>i.classifyPointOnFace(e,t,n,r)),classifyPointRobust:(e,t,n)=>kw(e,(e,r)=>r.classifyPointRobust(e,t,n)),classifyPointWinding:(e,t,n)=>kw(e,(e,r)=>r.classifyPointWinding(e,t,n)),approximateSurfaceLspia:(e,t,n,r,i,a,o,s,c)=>Ly(`approximateSurfaceLspia`).approximateSurfaceLspia(e,t,n,r,i,a,o,s,c),untrimFace:(e,t,n)=>kw(e,(e,r)=>r.untrimFace(e,t,n)),getSurfaceCylinderData:e=>kw(e,(e,t)=>t.getSurfaceCylinderData(e)),getSurfaceAxis:e=>kw(e,(e,t)=>t.getSurfaceAxis(e)),reverseSurfaceU:e=>Ly(`reverseSurfaceU`).reverseSurfaceU(e),detectSmallFeatures:(e,t,n)=>kw(e,(e,r)=>r.detectSmallFeatures(e,t,n)),recognizeFeatures:(e,t)=>kw(e,(e,n)=>n.recognizeFeatures(e,t)),projectEdges:(e,t,n,r)=>kw(e,(e,i)=>i.projectEdges(e,t,n,r)),getNurbsSurfaceData:e=>kw(e,(e,t)=>t.getNurbsSurfaceData?.(e)??null)}}var Mw={hasErrors:!1,hasWarnings:!1,messages:[]};function Nw(){return{modified:new Map,generated:new Map,deleted:new Set}}function Pw(e){return{shape:e,evolution:Nw()}}function Fw(e){return{shape:e,evolution:Nw(),diagnostics:Mw}}function Iw(e){let t=_b(e),n=Yy(e),r=CS(e);return{translateWithHistory:(e,n,r,i)=>Pw(t.translate(e,n,r,i)),rotateWithHistory:(e,n,r,i,a,o)=>Pw(t.rotate(e,n,a,o)),mirrorWithHistory:(e,n,r)=>Pw(t.mirror(e,n,r)),scaleWithHistory:(e,n,r)=>Pw(t.scale(e,n,r)),generalTransformWithHistory:(e,n,r,i)=>Pw(t.generalTransform(e,n,r,i)),fuseWithHistory:(e,t,r,i,a)=>Fw(n.fuse(e,t,a)),cutWithHistory:(e,t,r,i,a)=>Fw(n.cut(e,t,a)),intersectWithHistory:(e,t,r,i,a)=>Fw(n.intersect(e,t,a)),filletWithHistory:(e,t,n)=>Pw(r.fillet(e,t,n)),chamferWithHistory:(e,t,n)=>Pw(r.chamfer(e,t,n)),shellWithHistory:(e,t,n,i,a,o)=>Pw(r.shell(e,t,n,o)),thickenWithHistory:(e,t)=>Pw(r.thicken(e,t)),offsetWithHistory:(e,t,n,i,a)=>Pw(r.offset(e,t,a)),draftWithHistory:(e,t,n,i,a)=>Pw(r.draft(e,t,n,i,a)),applyComposedTransformWithHistory:(e,n)=>Pw(t.transform(e,n))}}function Lw(e){let t=e?.manifold;if(!t||typeof t.isEmpty==`function`&&t.isEmpty())return!1;if(typeof t.status==`function`){let e=t.status(),n=typeof e==`number`?e:Number(e?.value??e);if(!Number.isNaN(n)&&n!==0)return!1}return!0}function Rw(e){return{isValid:e=>Lw(e),isValidStrict:e=>Lw(e),healSolid:e=>Lw(e)?e:null,healFace:e=>e,healWire:e=>e,mergeCoincidentVertices:()=>0,removeDegenerateEdges:()=>0,fixFaceOrientations:()=>0,fixShape:e=>e,fixSelfIntersection:e=>e}}var zw=.004;function Bw(e){return!!e&&typeof e==`object`&&e.__nativeC2d===!0}function Vw(e,t){return{__nativeC2d:!0,k:`line`,p1:e,p2:t}}function Hw(e,t,n,r,i){return{__nativeC2d:!0,k:`conic`,c:e,u:t,v:n,a0:r,a1:i}}function Uw(e,[t,n]){return[e.a*t+e.b*n+e.tx,e.c*t+e.d*n+e.ty]}function Ww(e,[t,n]){return[e.a*t+e.b*n,e.c*t+e.d*n]}function Gw(e,t){return{a:e.a*t.a+e.b*t.c,b:e.a*t.b+e.b*t.d,c:e.c*t.a+e.d*t.c,d:e.c*t.b+e.d*t.d,tx:e.a*t.tx+e.b*t.ty+e.tx,ty:e.c*t.tx+e.d*t.ty+e.ty}}function Kw(e,t){return e.k===`line`?Vw(Uw(t,e.p1),Uw(t,e.p2)):e.k===`bezier`?{__nativeC2d:!0,k:`bezier`,pts:e.pts.map(e=>Uw(t,e))}:Hw(Uw(t,e.c),Ww(t,e.u),Ww(t,e.v),e.a0,e.a1)}function qw(e,t){let n=e.map(e=>[e[0],e[1]]);for(let e=1;e<n.length;e++)for(let r=0;r<n.length-e;r++){let e=n[r]??[0,0],i=n[r+1]??[0,0];n[r]=[e[0]*(1-t)+i[0]*t,e[1]*(1-t)+i[1]*t]}return n[0]??[0,0]}function Jw(e,t){let n=Math.cos(t),r=Math.sin(t);return[e.c[0]+e.u[0]*n+e.v[0]*r,e.c[1]+e.u[1]*n+e.v[1]*r]}function Yw(e,t){let n=e.length-1;if(n<1)return[0,0];let r=[];for(let t=0;t<n;t++){let i=e[t]??[0,0],a=e[t+1]??[0,0];r.push([n*(a[0]-i[0]),n*(a[1]-i[1])])}return qw(r,t)}function Xw(e){let t=Math.abs(e.a1-e.a0),n=Math.hypot(e.u[0],e.u[1]),r=Math.hypot(e.v[0],e.v[1]),i=Math.max(n,r);if(i<=zw)return Math.max(2,Math.ceil(t/(2*Math.PI)*8));let a=2*Math.acos(Math.max(-1,1-zw/i));return Math.max(2,Math.ceil(t/a))}function Zw(e){if(e.k===`line`)return[e.p1,e.p2];if(e.k===`bezier`){let t=[];for(let n=0;n<=24;n++)t.push(qw(e.pts,n/24));return t}let t=e.a1-e.a0,n=Xw(e),r=[];for(let i=0;i<=n;i++){let a=e.a0+t*i/n,o=Math.cos(a),s=Math.sin(a);r.push([e.c[0]+e.u[0]*o+e.v[0]*s,e.c[1]+e.u[1]*o+e.v[1]*s])}return r}function Qw(e,t,n){let r=e[0],i=e[1],a=t[0],o=t[1],s=n[0],c=n[1],l=2*(r*(o-c)+a*(c-i)+s*(i-o));if(Math.abs(l)<1e-12)return Vw(e,n);let u=((r*r+i*i)*(o-c)+(a*a+o*o)*(c-i)+(s*s+c*c)*(i-o))/l,d=((r*r+i*i)*(s-a)+(a*a+o*o)*(r-s)+(s*s+c*c)*(a-r))/l,f=[u,d],p=Math.hypot(r-u,i-d),m=e=>Math.atan2(e[1]-d,e[0]-u),h=m(e),g=m(t),_=m(n),v=e=>(e%(2*Math.PI)+2*Math.PI)%(2*Math.PI),y=v(g-h),b=v(_-h);return _=y<=b?h+b:h-v(h-_),Hw(f,[p,0],[0,p],h,_)}function $w(e,t){let n={delete:()=>{},isEmpty:()=>!1};function r(e,...n){let r=t(),i=r?.[e];if(!i)throw Error(`manifold 2D: ${e} needs an OCCT kernel (none registered)`);return i.call(r,...n)}let i=e=>e;function a(e){let n=t();if(!n)throw Error(`manifold 2D: ${e} needs an OCCT kernel (none registered)`);return n}function o(e){if(!Bw(e))return e;let t=a(`toOcct`),n=i(e);if(n.k===`line`)return t.makeLine2d(n.p1[0],n.p1[1],n.p2[0],n.p2[1]);if(n.k===`bezier`)return t.makeBezier2d(n.pts);let r=Math.hypot(n.u[0],n.u[1]),o=Math.hypot(n.v[0],n.v[1]),s=Math.abs(Math.abs(n.a1-n.a0)-2*Math.PI)<1e-9,c=n.u[0]*n.v[1]-n.u[1]*n.v[0]>=0;if(Math.abs(r-o)<1e-9*Math.max(1,r)){if(s)return t.makeCircle2d(n.c[0],n.c[1],r,c);let e=Jw(n,n.a0),i=Jw(n,(n.a0+n.a1)/2),a=Jw(n,n.a1);return t.makeArc2dThreePoints(e[0],e[1],i[0],i[1],a[0],a[1])}let l=n.u[0]*n.v[0]+n.u[1]*n.v[1];if(Math.abs(l)<1e-9*Math.max(1,r*o)){let e=n.u[0]/r,i=n.u[1]/r;return s?t.makeEllipse2d(n.c[0],n.c[1],r,o,e,i,c):t.makeEllipseArc2d(n.c[0],n.c[1],r,o,n.a0,n.a1,e,i,c)}return t.makeBSpline2d(Zw(n).map(e=>[e[0],e[1]]))}let s={createPoint2d:(e,t)=>({x:e,y:t}),createDirection2d:(e,t)=>({x:e,y:t}),createVector2d:(e,t)=>({x:e,y:t}),createAxis2d:(e,t,n,r)=>({px:e,py:t,dx:n,dy:r}),wrapCurve2dHandle:e=>e,createCurve2dAdaptor:e=>e,makeLine2d:(e,t,n,r)=>Vw([e,t],[n,r]),makeCircle2d:(e,t,n,r=!0)=>Hw([e,t],[n,0],r?[0,n]:[0,-n],0,2*Math.PI),makeArc2dThreePoints:(e,t,n,r,i,a)=>Qw([e,t],[n,r],[i,a]),makeArc2dTangent:(e,t,n,r,i,a)=>{let o=Math.hypot(n,r)||1,s=-r/o,c=n/o,l=[i-e,a-t],u=s*l[0]+c*l[1];if(Math.abs(u)<1e-12)return Vw([e,t],[i,a]);let d=(l[0]*l[0]+l[1]*l[1])/(2*u),f=e+s*d,p=t+c*d,m=Math.hypot(e-f,t-p),h=Math.atan2(t-p,e-f),g=Math.atan2(a-p,i-f);s*n+c*r;let _=e=>(e%(2*Math.PI)+2*Math.PI)%(2*Math.PI),v=[-(t-p),e-f];return g=v[0]*n+v[1]*r>=0?h+_(g-h):h-_(h-g),Hw([f,p],[m,0],[0,m],h,g)},makeEllipse2d:(e,t,n,r,i=1,a=0,o=!0)=>{let s=Math.hypot(i,a)||1,c=i/s*n,l=a/s*n,u=-a/s*r*(o?1:-1),d=i/s*r*(o?1:-1);return Hw([e,t],[c,l],[u,d],0,2*Math.PI)},makeEllipseArc2d:(e,t,n,r,i,a,o=1,s=0,c=!0)=>{let l=Math.hypot(o,s)||1,u=o/l*n,d=s/l*n,f=-s/l*r*(c?1:-1),p=o/l*r*(c?1:-1);return Hw([e,t],[u,d],[f,p],i,a)},makeBezier2d:e=>({__nativeC2d:!0,k:`bezier`,pts:e.map(e=>[e[0],e[1]])}),evaluateCurve2d:(e,t)=>{let n=i(e);if(n.k===`line`){let e=n.p2[0]-n.p1[0],r=n.p2[1]-n.p1[1],i=Math.hypot(e,r)||1;return[n.p1[0]+e*t/i,n.p1[1]+r*t/i]}return n.k===`bezier`?qw(n.pts,t):[n.c[0]+n.u[0]*Math.cos(t)+n.v[0]*Math.sin(t),n.c[1]+n.u[1]*Math.cos(t)+n.v[1]*Math.sin(t)]},evaluateCurve2dD1:(e,t)=>{let n=i(e);if(n.k===`line`){let e=n.p2[0]-n.p1[0],r=n.p2[1]-n.p1[1],i=Math.hypot(e,r)||1;return{point:[n.p1[0]+e*t/i,n.p1[1]+r*t/i],tangent:[e/i,r/i]}}if(n.k===`bezier`)return{point:qw(n.pts,t),tangent:Yw(n.pts,t)};let r=Math.cos(t),a=Math.sin(t);return{point:[n.c[0]+n.u[0]*r+n.v[0]*a,n.c[1]+n.u[1]*r+n.v[1]*a],tangent:[-n.u[0]*a+n.v[0]*r,-n.u[1]*a+n.v[1]*r]}},getCurve2dBounds:e=>{let t=i(e);return t.k===`conic`?{first:t.a0,last:t.a1}:t.k===`line`?{first:0,last:Math.hypot(t.p2[0]-t.p1[0],t.p2[1]-t.p1[1])}:{first:0,last:1}},getCurve2dType:e=>{let t=i(e);return t.k===`line`?`LINE`:t.k===`bezier`?`BEZIER`:`CIRCLE`},reverseCurve2d:e=>{let t=i(e);if(t.k===`line`){let e=t.p1;t.p1=t.p2,t.p2=e}else if(t.k===`bezier`)t.pts.reverse();else{let e=t.a0;t.a0=t.a1,t.a1=e}},copyCurve2d:e=>structuredClone(i(e)),trimCurve2d:(e,t,n)=>{let r=i(e);if(r.k===`conic`)return Hw(r.c,r.u,r.v,t,n);if(r.k===`line`){let e=r.p2[0]-r.p1[0],i=r.p2[1]-r.p1[1],a=Math.hypot(e,i)||1;return Vw([r.p1[0]+e*t/a,r.p1[1]+i*t/a],[r.p1[0]+e*n/a,r.p1[1]+i*n/a])}return structuredClone(r)},createIdentityGTrsf2d:()=>({a:1,b:0,c:0,d:1,tx:0,ty:0}),createTranslationGTrsf2d:(e,t)=>({a:1,b:0,c:0,d:1,tx:e,ty:t}),createRotationGTrsf2d:(e,t,n)=>{let r=Math.cos(e),i=Math.sin(e);return{a:r,b:-i,c:i,d:r,tx:t-(r*t-i*n),ty:n-(i*t+r*n)}},createScaleGTrsf2d:(e,t,n)=>({a:e,b:0,c:0,d:e,tx:t-e*t,ty:n-e*n}),createMirrorGTrsf2d:(e,t,n,r=0,i=0,a=1,o=0)=>{if(n===`point`)return{a:-1,b:0,c:0,d:-1,tx:2*e,ty:2*t};let s=Math.hypot(a,o)||1,c=a/s,l=o/s,u=c*c-l*l,d=2*c*l;return{a:u,b:d,c:d,d:-u,tx:r-(u*r+d*i),ty:i-(d*r-u*i)}},createAffinityGTrsf2d:(e,t,n,r,i)=>{let a=Math.hypot(n,r)||1,o=n/a,s=r/a,c=-s,l=o,u=o*o+i*c*c,d=o*s+i*c*l,f=s*o+i*l*c,p=s*s+i*l*l;return{a:u,b:d,c:f,d:p,tx:e-(u*e+d*t),ty:t-(f*e+p*t)}},setGTrsf2dTranslationPart:(e,t,n)=>{let r=e;r.tx=t,r.ty=n},multiplyGTrsf2d:(e,t)=>{let n=Gw(e,t);Object.assign(e,n)},transformCurve2dGeneral:(e,t)=>Kw(i(e),t),translateCurve2d:(e,t,n)=>Kw(i(e),{a:1,b:0,c:0,d:1,tx:t,ty:n}),rotateCurve2d:(e,t,n,r)=>{let a=Math.cos(t),o=Math.sin(t);return Kw(i(e),{a,b:-o,c:o,d:a,tx:n-(a*n-o*r),ty:r-(o*n+a*r)})},scaleCurve2d:(e,t,n,r)=>Kw(i(e),{a:t,b:0,c:0,d:t,tx:n-t*n,ty:r-t*r}),mirrorCurve2dAtPoint:(e,t,n)=>Kw(i(e),{a:-1,b:0,c:0,d:-1,tx:2*t,ty:2*n}),mirrorCurve2dAcrossAxis:(e,t,n,r,a)=>{let o=Math.hypot(r,a)||1,s=r/o,c=a/o,l=s*s-c*c,u=2*s*c;return Kw(i(e),{a:l,b:u,c:u,d:-l,tx:t-(l*t+u*n),ty:n-(u*t-l*n)})},affinityTransform2d:(e,t,n,r,a,o)=>{let s=Math.hypot(r,a)||1,c=r/s,l=a/s,u=-l,d=c,f=c*c+o*u*u,p=c*l+o*u*d,m=l*c+o*d*u,h=l*l+o*d*d;return Kw(i(e),{a:f,b:p,c:m,d:h,tx:t-(f*t+p*n),ty:n-(m*t+h*n)})},createBoundingBox2d:()=>({min:[1/0,1/0],max:[-1/0,-1/0]}),addCurveToBBox2d:(e,t)=>{let n=e,r;if(Bw(t))r=Zw(i(t));else{let e=a(`addCurveToBBox2d`),{first:n,last:i}=e.getCurve2dBounds(t);r=[];for(let a=0;a<=32;a++)r.push(e.evaluateCurve2d(t,n+(i-n)*a/32))}for(let[e,t]of r)e<n.min[0]&&(n.min[0]=e),t<n.min[1]&&(n.min[1]=t),e>n.max[0]&&(n.max[0]=e),t>n.max[1]&&(n.max[1]=t)},getBBox2dBounds:e=>{let t=e;return{xMin:t.min[0],yMin:t.min[1],xMax:t.max[0],yMax:t.max[1]}},mergeBBox2d:(e,t)=>{let n=e,r=t;n.min[0]=Math.min(n.min[0],r.min[0]),n.min[1]=Math.min(n.min[1],r.min[1]),n.max[0]=Math.max(n.max[0],r.max[0]),n.max[1]=Math.max(n.max[1],r.max[1])},isBBox2dOut:(e,t)=>{let n=e,r=t;return n.max[0]<r.min[0]||n.min[0]>r.max[0]||n.max[1]<r.min[1]||n.min[1]>r.max[1]},isBBox2dOutPoint:(e,t,n)=>{let r=e;return t<r.min[0]||t>r.max[0]||n<r.min[1]||n>r.max[1]},getCurve2dCircleData:e=>{let t=i(e);if(t.k!==`conic`)return null;let n=Math.hypot(t.u[0],t.u[1]),r=Math.hypot(t.v[0],t.v[1]);return Math.abs(n-r)>1e-6?null:{cx:t.c[0],cy:t.c[1],radius:n,isDirect:!0}},liftCurve2dToPlane:(e,t,r,a)=>{let o=r[0],s=r[1],c=r[2],l=a[0],u=a[1],d=a[2],f=s*d-c*u,p=c*l-o*d,m=o*u-s*l,h=Zw(i(e)).map(([e,n])=>[t[0]+l*e+f*n,t[1]+u*e+p*n,t[2]+d*e+m*n]);return Ny(n,B(`profileEdge`,{pts:h},[]))},makeBSpline2d:(e,t)=>a(`makeBSpline2d`).makeBSpline2d(e,t),offsetCurve2d:(e,t)=>a(`offsetCurve2d`).offsetCurve2d(o(e),t),intersectCurves2d:(e,t,n)=>a(`intersectCurves2d`).intersectCurves2d(o(e),o(t),n),projectPointOnCurve2d:(e,t,n)=>a(`projectPointOnCurve2d`).projectPointOnCurve2d(o(e),t,n),distanceBetweenCurves2d:(e,t,n,r,i,s)=>a(`distanceBetweenCurves2d`).distanceBetweenCurves2d(o(e),o(t),n,r,i,s),approximateCurve2dAsBSpline:(e,t,n,r)=>a(`approximateCurve2dAsBSpline`).approximateCurve2dAsBSpline(o(e),t,n,r),decomposeBSpline2dToBeziers:e=>a(`decomposeBSpline2dToBeziers`).decomposeBSpline2dToBeziers(o(e)),serializeCurve2d:e=>a(`serializeCurve2d`).serializeCurve2d(o(e)),deserializeCurve2d:e=>a(`deserializeCurve2d`).deserializeCurve2d(e),splitCurve2d:(e,t)=>a(`splitCurve2d`).splitCurve2d(o(e),t),getCurve2dEllipseData:e=>a(`getCurve2dEllipseData`).getCurve2dEllipseData(o(e)),getCurve2dBezierPoles:e=>a(`getCurve2dBezierPoles`).getCurve2dBezierPoles(o(e)),getCurve2dBezierDegree:e=>a(`getCurve2dBezierDegree`).getCurve2dBezierDegree(o(e)),getCurve2dBSplineData:e=>a(`getCurve2dBSplineData`).getCurve2dBSplineData(o(e)),buildEdgeOnSurface:(e,t)=>a(`buildEdgeOnSurface`).buildEdgeOnSurface(o(e),t),extractSurfaceFromFace:e=>a(`extractSurfaceFromFace`).extractSurfaceFromFace(e),extractCurve2dFromEdge:(e,t)=>a(`extractCurve2dFromEdge`).extractCurve2dFromEdge(e,t),buildCurves3d:e=>{a(`buildCurves3d`).buildCurves3d(e)},fixWireOnFace:(e,t,n)=>a(`fixWireOnFace`).fixWireOnFace(e,t,n),fillSurface:(e,t)=>a(`fillSurface`).fillSurface(e,t)};for(let e of[`evaluateCurve2d`,`evaluateCurve2dD1`,`getCurve2dBounds`,`getCurve2dType`,`reverseCurve2d`,`copyCurve2d`,`trimCurve2d`,`transformCurve2dGeneral`,`translateCurve2d`,`rotateCurve2d`,`scaleCurve2d`,`mirrorCurve2dAtPoint`,`mirrorCurve2dAcrossAxis`,`affinityTransform2d`,`getCurve2dCircleData`,`liftCurve2dToPlane`]){let t=s[e];t&&(s[e]=((n,...i)=>Bw(n)?t(n,...i):r(e,n,...i)))}return s}var eT=`createPoint2d.createDirection2d.createVector2d.createAxis2d.wrapCurve2dHandle.createCurve2dAdaptor.makeLine2d.makeCircle2d.makeArc2dThreePoints.makeArc2dTangent.makeEllipse2d.makeEllipseArc2d.makeBezier2d.makeBSpline2d.evaluateCurve2d.evaluateCurve2dD1.getCurve2dBounds.getCurve2dType.trimCurve2d.reverseCurve2d.copyCurve2d.offsetCurve2d.translateCurve2d.rotateCurve2d.scaleCurve2d.mirrorCurve2dAtPoint.mirrorCurve2dAcrossAxis.affinityTransform2d.createIdentityGTrsf2d.createAffinityGTrsf2d.createTranslationGTrsf2d.createMirrorGTrsf2d.createRotationGTrsf2d.createScaleGTrsf2d.setGTrsf2dTranslationPart.multiplyGTrsf2d.transformCurve2dGeneral.intersectCurves2d.projectPointOnCurve2d.distanceBetweenCurves2d.approximateCurve2dAsBSpline.decomposeBSpline2dToBeziers.createBoundingBox2d.addCurveToBBox2d.getBBox2dBounds.mergeBBox2d.isBBox2dOut.isBBox2dOutPoint.getCurve2dCircleData.getCurve2dEllipseData.getCurve2dBezierPoles.getCurve2dBezierDegree.getCurve2dBSplineData.serializeCurve2d.deserializeCurve2d.splitCurve2d.liftCurve2dToPlane.buildEdgeOnSurface.extractSurfaceFromFace.extractCurve2dFromEdge.buildCurves3d.fixWireOnFace.fillSurface`.split(`.`);function tT(e){let t=Iy();if(!t)throw Error(`manifold: ${e} unsupported on manifold kernel; no B-rep kernel registered`);return t}function nT(e){let t={};for(let e of eT)t[e]=(...t)=>tT(e)[e](...t);let n=$w(e,()=>Iy());return Object.assign(t,n),t}function rT(e){return{sketchNew:()=>Ay(`sketchNew`),sketchAddPoint:()=>Ay(`sketchAddPoint`),sketchAddArc:()=>Ay(`sketchAddArc`),sketchAddConstraint:()=>Ay(`sketchAddConstraint`),sketchSolve:()=>Ay(`sketchSolve`),sketchDof:()=>Ay(`sketchDof`)}}function iT(e){return{projectEdges:()=>Ay(`projectEdges`)}}function aT(e){return{dispose(e){let t=Py(e);if(t){let e=Ry.get(t.node);e!==void 0&&(Iy()?.dispose(e),Ry.delete(t.node))}(e?.manifold)?.delete?.()},executeBatch:()=>Ay(`executeBatch`),checkpoint:()=>Ay(`checkpoint`),checkpointCount:()=>0,restoreCheckpoint:()=>Ay(`restoreCheckpoint`),discardCheckpoint:()=>Ay(`discardCheckpoint`)}}var oT={draft:30,standard:10,fine:3},sT=class{oc;kernelId=`manifold`;capabilities={exact:!1,brepExport:!1,exactMeasurement:!1,tessellationModel:`build-time`};setQuality(e){let t=this.oc;t.setCircularSegments?.(0),t.setMinCircularEdgeLength?.(0),t.setMinCircularAngle?.(oT[e])}constructor(e){this.oc=e,Object.assign(this,Wy(e),Yy(e),_b(e),wx(e),Xx(e),CS(e),jS(e),xC(e),GC(e),Ew(e),jw(e),Iw(e),Rw(e),nT(e),rT(e),iT(e),aT(e))}};function cT(e){return import(e)}function lT(e){return`projectEdges`in e}function uT(e){return`sketchNew`in e&&`sketchDof`in e}var dT=new Map,fT=null,pT=null;function mT(e){hT(`manifold`,new sT(e))}function hT(e,t){dT.set(e,t),fT||=e,e===fT&&(pT=t)}function U(e){if(!e&&pT)return pT;let t=e??fT;if(!t)throw Error(`brepjs kernel not initialized. Call initFromOC() or registerKernel() before using the library.`);let n=dT.get(t);if(!n)throw Error(`brepjs: kernel '${t}' is not registered.`);return n}function gT(e){let t=U(e);if(!Do(t))throw Error(`brepjs: current kernel does not support 2D operations.`);return t}function _T(){return fT}function vT(e,t){let n=fT;fT=e,pT=dT.get(e)??null;try{let e=t();if(e instanceof Promise)throw Error(`withKernel() callback returned a Promise. Async code must use getKernel(id) directly — the kernel override is restored synchronously in finally.`);return e}finally{fT=n,pT=n?dT.get(n)??null:null}}function yT(e){return U(e).capabilities}function bT(e,t){let n=wo();try{Eo(e),U().setQuality?.(e);let n=t();if(n instanceof Promise)throw Error(`withQuality() callback returned a Promise. Async code must read currentQuality()/getKernel() directly.`);return n}finally{Eo(n),U().setQuality?.(n)}}var xT=new Map;function ST(e,t){xT.set(e,t)}function CT(e){return xT.get(e)}function wT(e,t){let n=xT.get(e);if(!n)throw Error(`withTier: no tier registered for "${e}". Call registerKernelTier("${e}", { kernel, quality }) first.`);return vT(n.kernel,()=>bT(n.quality,t))}function TT(e){Uo(),rl(),Io(),Nc(),Pc(),Yc(),Xc();let t=new zf(e);hT(`occt`,t),fT=`occt`,pT=t}function ET(){let e=U(),t=e.makeBox(1,1,1);try{e.dispose(t)}catch{}}async function DT(){if(fT)return fT;try{let{OcctKernel:e}=await cT(`occt-wasm`),t=await e.init();return hT(`occt-wasm`,La.fromKernel(t)),`occt-wasm`}catch{}try{return TT(await(await cT(`brepjs-opencascade`)).default()),`occt`}catch{}try{let e=await cT(`brepkit-wasm`);return typeof e.default==`function`&&await e.default(),hT(`brepkit`,new ky(new e.BrepKernel)),`brepkit`}catch{}throw Error(`brepjs: no kernel package found. Install one of:
13
13
  npm install occt-wasm (recommended, default)
14
14
  npm install brepjs-opencascade
15
- npm install brepkit-wasm`)}function OT(){var e=typeof SuppressedError==`function`?SuppressedError:function(e,t){var n=Error();return n.name=`SuppressedError`,n.error=e,n.suppressed=t,n},t={},n=[];function r(e,t){if(t!=null){if(Object(t)!==t)throw TypeError(`using declarations can only be used with objects, functions, null, or undefined.`);if(e)var r=t[Symbol.asyncDispose||Symbol.for(`Symbol.asyncDispose`)];if(r===void 0&&(r=t[Symbol.dispose||Symbol.for(`Symbol.dispose`)],e))var i=r;if(typeof r!=`function`)throw TypeError(`Object is not disposable.`);i&&(r=function(){try{i.call(t)}catch(e){return Promise.reject(e)}}),n.push({v:t,d:r,a:e})}else e&&n.push({d:t,a:e});return t}return{e:t,u:r.bind(null,!1),a:r.bind(null,!0),d:function(){var r,i=this.e,a=0;function o(){for(;r=n.pop();)try{if(!r.a&&a===1)return a=0,n.push(r),Promise.resolve().then(o);if(r.d){var e=r.d.call(r.v);if(r.a)return a|=2,Promise.resolve(e).then(o,s)}else a|=1}catch(e){return s(e)}if(a===1)return i===t?Promise.resolve():Promise.reject(i);if(i!==t)throw i}function s(n){return i=i===t?n:new e(n,i),o()}return o()}}}var kT=Symbol;kT.dispose??=Symbol.for(`Symbol.dispose`),kT.asyncDispose??=Symbol.for(`Symbol.asyncDispose`);var AT=globalThis;AT.FinalizationRegistry||=(console.warn(`brepjs: FinalizationRegistry unavailable — garbage collection will not work`),class{register(e,t,n){}unregister(e){return!1}});var jT={liveHandles:0,peakHandles:0,gcCollected:0,scopeEnters:0,scopeExits:0};function MT(){return{...jT}}function NT(){jT.liveHandles=0,jT.peakHandles=0,jT.gcCollected=0,jT.scopeEnters=0,jT.scopeExits=0}function PT(){jT.liveHandles++,jT.liveHandles>jT.peakHandles&&(jT.peakHandles=jT.liveHandles)}function FT(){jT.liveHandles--}function IT(){jT.gcCollected++,jT.liveHandles--}var LT=new FinalizationRegistry(e=>{IT();try{e.delete()}catch{}});function RT(e){let t=U(),n=!1,r,i=()=>{if(r){for(let e of r)try{e()}catch{}r=void 0}},a=()=>{if(!n){n=!0,FT(),LT.unregister(o),i();try{t.dispose(e)}catch{}}},o={get wrapped(){if(n)throw Error(`Shape handle has been disposed`);return e},get disposed(){return n},[Symbol.dispose](){a()},delete(){a()},onDispose(e){if(n){e();return}(r??=[]).push(e)}};return PT(),LT.register(o,{delete:()=>{t.dispose(e)}},o),o}function zT(e){let t=!1,n={get value(){if(t)throw Error(`kernel handle has been disposed`);return e},get disposed(){return t},[Symbol.dispose](){if(!t){t=!0,FT(),LT.unregister(n);try{e.delete()}catch{}}}};return PT(),LT.register(n,e,n),n}var BT=class{handles=[];constructor(){jT.scopeEnters++}register(e){return this.handles.push(()=>{try{let t=e[Symbol.dispose];typeof t==`function`?t.call(e):e.delete()}catch{}}),e}track(e){return this.handles.push(()=>{try{e[Symbol.dispose]()}catch{}}),e}[Symbol.dispose](){jT.scopeExits++;for(let e=this.handles.length-1;e>=0;e--)this.handles[e]?.();this.handles.length=0}};function VT(e){try{var t=OT();return e(t.u(new BT))}catch(e){t.e=e}finally{t.d()}}function HT(e,t){LT.register(e,t,t)}function UT(e){LT.unregister(e)}function WT(e){try{var t=OT();return e(t.u(new BT))}catch(e){t.e=e}finally{t.d()}}async function GT(e){try{var t=OT();return await e(t.u(new BT))}catch(e){t.e=e}finally{t.d()}}function KT(e){return!e.disposed}function qT(e){return e.__is2D!==!0}function JT(e){return e.__is2D===!0}function YT(e){if(!qT(e))throw Error(`Expected 3D shape, got 2D`);return e}function XT(e){if(!JT(e))throw Error(`Expected 2D shape, got 3D`);return e}var ZT=new WeakMap;function QT(e,t){ZT.set(e,t)}function $T(e,t){let n=ZT.get(t);if(n!==void 0)return n;let r=e.shapeType(t);return ZT.set(t,r),r}function eE(e){return $T(U(),e.wrapped)}function tE(e){return U().curveIsClosed(e.wrapped)}function nE(e){return U().isValid(e.wrapped)}function rE(e){let t=U();if(!t.isValid(e.wrapped))return!1;let n=t.isValidStrict?.bind(t)??t.isValid.bind(t);try{let r=t.solidFromShell(e.wrapped),i=n(r);try{t.dispose(r)}catch{}return i}catch{return!1}}function iE(e){return U().isValid(e.wrapped)}function aE(e){return tE(e)?O(e):k(`Wire is not closed: start and end points do not coincide`)}function oE(e){return nE(e)?O(e):k(`Face orientation is inconsistent or face is invalid`)}function sE(e){return rE(e)?O(e):k(`Shell is not manifold: has free edges or is invalid`)}function cE(e){return iE(e)?O(e):k(`Solid failed BRepCheck validation`)}function lE(e){return U().surfaceType(e.wrapped)===`plane`}function uE(e){let t=U(),n=n=>{try{let r=t.makeFace(e.wrapped,n),i=t.surfaceType(r);try{t.dispose(r)}catch{}return i===`plane`}catch{return!1}};return n(!0)?!0:n(!1)}function dE(e){return lE(e)?O(e):k(`Face is not planar: underlying surface is not a geometric plane`)}function fE(e){return uE(e)?O(e):k(`Wire is not planar: edges do not lie in a common plane`)}function pE(e,t){return t===`2D`&&(e.__is2D=!0),e}function mE(e,t){return pE(RT(e),t)}function hE(e,t){return pE(RT(e),t)}function gE(e,t){return pE(RT(e),t)}function _E(e,t){return pE(RT(e),t)}function vE(e){return pE(RT(e))}function yE(e){return pE(RT(e))}function bE(e){return pE(RT(e))}function xE(e,t){return pE(RT(e),t)}function SE(e){return eE(e)===`vertex`}function CE(e){return eE(e)===`edge`}function wE(e){return eE(e)===`wire`}function TE(e){return eE(e)===`face`}function EE(e){return eE(e)===`shell`}function DE(e){return eE(e)===`solid`}function OE(e){return eE(e)===`compound`}function kE(e){let t=eE(e);return t===`shell`||t===`solid`||t===`compsolid`?!0:t===`compound`?qT(e):!1}function AE(e){let t=eE(e);return t===`edge`||t===`wire`}function jE(e,t){let n=U(),r=$T(n,e),i=n.downcast(e,r);return r===`vertex`?mE(i,t):r===`edge`?hE(i,t):r===`wire`?gE(i,t):r===`face`?_E(i,t):r===`shell`?vE(i):r===`solid`?yE(i):r===`compsolid`?bE(i):xE(i,t)}function ME(e){return jE(e)}function NE(e,t){t.wrapped!==e&&U().dispose(e)}function W(e,t){let n=jE(e,t);return NE(e,n),n}function PE(e,t){let n=e.wrapped;if(e[Symbol.dispose](),n!==t){let e=U();e.dispose(n),e.dispose(t)}}function FE(e){U().dispose(e.wrapped),e[Symbol.dispose]()}function IE(e,t,n){QT(e,t);let r=U().downcast(e,t);return t===`vertex`?mE(r,n):t===`edge`?hE(r,n):t===`wire`?gE(r,n):t===`face`?_E(r,n):t===`shell`?vE(r):t===`solid`?yE(r):t===`compsolid`?bE(r):xE(r,n)}function LE(e,t,n){let r=IE(e,t,n);return NE(e,r),r}function RE(e,t,n,r,i){let a={kind:e,code:t,message:n,cause:r};return i?{...a,suggestion:i}:a}var zE={KERNEL_OPERATION:(e,t,n,r)=>RE(`KERNEL_OPERATION`,e,t,n,r),VALIDATION:(e,t,n,r)=>RE(`VALIDATION`,e,t,n,r),TYPE_CAST:(e,t,n,r)=>RE(`TYPE_CAST`,e,t,n,r),SKETCHER_STATE:(e,t,n,r)=>RE(`SKETCHER_STATE`,e,t,n,r),MODULE_INIT:(e,t,n,r)=>RE(`MODULE_INIT`,e,t,n,r),COMPUTATION:(e,t,n,r)=>RE(`COMPUTATION`,e,t,n,r),IO:(e,t,n,r)=>RE(`IO`,e,t,n,r),QUERY:(e,t,n,r)=>RE(`QUERY`,e,t,n,r),UNSUPPORTED:(e,t,n,r)=>RE(`UNSUPPORTED`,e,t,n,r)};function BE(e,t,n,r=`KERNEL_OPERATION`){try{return O(W(e()))}catch(e){let i=e instanceof Error?e.message:String(e),a=r===`KERNEL_OPERATION`?po(i):i,o=fo(t);return k(zE[r](t,`${n}: ${a}`,e,o))}}function VE(e,t,n,r=`KERNEL_OPERATION`){try{return O(e())}catch(e){let i=e instanceof Error?e.message:String(e),a=r===`KERNEL_OPERATION`?po(i):i,o=fo(t);return k(zE[r](t,`${n}: ${a}`,e,o))}}function HE(e,t,n,r=`KERNEL_OPERATION`){try{var i=OT();let a=i.u(new BT);return BE(()=>e(a),t,n,r)}catch(e){i.e=e}finally{i.d()}}function UE(e,t){let n=U().iterShapes(e,t),r=Array(n.length);for(let e=0;e<n.length;e++)r[e]=LE(n[e],t);return r}var WE=new WeakMap;function GE(e){let t=WE.get(e);if(!t)return;WE.delete(e);let n=[t.edges,t.faces,t.wires,t.vertices,t.shells,t.solids,t.compSolids];for(let e of n)if(e)for(let t of e)t[Symbol.dispose]()}var KE=new WeakSet;function qE(e){let t=e.wrapped,n=WE.get(t);return n||(n={},WE.set(t,n)),KE.has(e)||(KE.add(e),e.onDispose(()=>{GE(t)})),n}function JE(e){return WE.get(e.wrapped)}function YE(e){GE(e.wrapped)}function XE(e){let t=qE(e);if(t.edges)return t.edges;let n=UE(e.wrapped,`edge`);return t.edges=n,n}function ZE(e){let t=qE(e);if(t.faces)return t.faces;let n=UE(e.wrapped,`face`);return t.faces=n,n}function QE(e){let t=qE(e);if(t.wires)return t.wires;let n=UE(e.wrapped,`wire`);return t.wires=n,n}function $E(e){let t=qE(e);if(t.vertices)return t.vertices;let n=UE(e.wrapped,`vertex`);return t.vertices=n,n}function eD(e){let t=qE(e);if(t.solids)return t.solids;let n=UE(e.wrapped,`solid`);return t.solids=n,n}function tD(e){let t=qE(e);if(t.shells)return t.shells;let n=UE(e.wrapped,`shell`);return t.shells=n,n}function nD(e){let t=qE(e);if(t.compSolids)return t.compSolids;let n=UE(e.wrapped,`compsolid`);return t.compSolids=n,n}function*rD(e){for(let t of U().iterShapes(e.wrapped,`edge`))yield LE(t,`edge`)}function*iD(e){for(let t of U().iterShapes(e.wrapped,`face`))yield LE(t,`face`)}function*aD(e){for(let t of U().iterShapes(e.wrapped,`wire`))yield LE(t,`wire`)}function*oD(e){for(let t of U().iterShapes(e.wrapped,`vertex`))yield LE(t,`vertex`)}function*sD(e){for(let t of U().iterShapes(e.wrapped,`solid`))yield LE(t,`solid`)}function*cD(e){for(let t of U().iterShapes(e.wrapped,`shell`))yield LE(t,`shell`)}function*lD(e){for(let t of U().iterShapes(e.wrapped,`compsolid`))yield LE(t,`compsolid`)}function uD(e){let t=qE(e);if(t.bounds)return t.bounds;let{min:n,max:r}=U().boundingBox(e.wrapped),i={xMin:n[0],xMax:r[0],yMin:n[1],yMax:r[1],zMin:n[2],zMax:r[2]};return t.bounds=i,i}function dD(e){return $T(U(),e.wrapped)}function fD(e){let t=qE(e);if(t.surfaceType!==void 0)return t.surfaceType;let n=U().surfaceType(e.wrapped);return t.surfaceType=n,n}function pD(e){let t=qE(e);if(t.isValid!==void 0)return t.isValid;let n=U().isValid(e.wrapped);return t.isValid=n,n}function mD(e){return{kind:dD(e),faceCount:ZE(e).length,edgeCount:XE(e).length,wireCount:QE(e).length,vertexCount:$E(e).length,valid:pD(e),bounds:uD(e)}}function hD(e){return U().vertexPosition(e.wrapped)}var G=2147483647,gD=Math.PI/180,_D=180/Math.PI;function vD(e){return e.length===2?[e[0],e[1],0]:[e[0],e[1],e[2]]}function yD(e){return[e[0],e[1]]}var bD={X:[1,0,0],Y:[0,1,0],Z:[0,0,1]};function xD(e){if(typeof e==`string`){let t=bD[e];if(!t)throw Error(`Unknown direction: ${e}`);return t}return e}function SD(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function CD(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function wD(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function TD(e){return[-e[0],-e[1],-e[2]]}function ED(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function DD(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 OD(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2])}function kD(e){return e[0]*e[0]+e[1]*e[1]+e[2]*e[2]}function AD(e,t){return OD(CD(e,t))}function jD(e){let t=OD(e);return t<1e-10?[0,0,0]:[e[0]/t,e[1]/t,e[2]/t]}function MD(e,t,n=1e-5){return Math.abs(e[0]-t[0])<n&&Math.abs(e[1]-t[1])<n&&Math.abs(e[2]-t[2])<n}function ND(e,t=1e-10){return kD(e)<t*t}function PD(e,t){let n=ED(e,t),r=OD(e),i=OD(t);if(r<1e-10||i<1e-10)return 0;let a=Math.max(-1,Math.min(1,n/(r*i)));return Math.acos(a)}function FD(e,t,n){let r=CD(e,t),i=kD(n);return i<1e-20?e:CD(e,wD(n,ED(r,n)/i))}function ID(e,t,n){let r=jD(t),i=Math.cos(n),a=Math.sin(n),o=ED(e,r),s=DD(r,e);return[e[0]*i+s[0]*a+r[0]*o*(1-i),e[1]*i+s[1]*a+r[1]*o*(1-i),e[2]*i+s[2]*a+r[2]*o*(1-i)]}var LD=e=>Math.round(e*1e3)/1e3;function RD(e){return`x: ${LD(e[0])}, y: ${LD(e[1])}, z: ${LD(e[2])}`}function zD(e,t=null,n=[0,0,1]){let r=jD(n);if(ND(r))throw Error(`Plane normal must be non-zero`);let i;if(t)i=jD(t);else{let[e,t,n]=r,a=Math.abs(e),o=Math.abs(t),s=Math.abs(n),c;c=a<=o&&a<=s?[1,0,0]:o<=s?[0,1,0]:[0,0,1];let l=c[1]*n-c[2]*t,u=c[2]*e-c[0]*n,d=c[0]*t-c[1]*e;i=Math.sqrt(l*l+u*u+d*d)>1e-12?jD([l,u,d]):[1,0,0]}if(ND(i))throw Error(`Plane xDir must be non-zero`);let a=jD(DD(r,i));return{origin:e,xDir:i,yDir:a,zDir:r}}var BD={XY:{xDir:[1,0,0],normal:[0,0,1]},YZ:{xDir:[0,1,0],normal:[1,0,0]},ZX:{xDir:[0,0,1],normal:[0,1,0]},XZ:{xDir:[1,0,0],normal:[0,-1,0]},YX:{xDir:[0,1,0],normal:[0,0,-1]},ZY:{xDir:[0,0,1],normal:[-1,0,0]},front:{xDir:[1,0,0],normal:[0,0,1]},back:{xDir:[-1,0,0],normal:[0,0,-1]},left:{xDir:[0,0,1],normal:[-1,0,0]},right:{xDir:[0,0,-1],normal:[1,0,0]},top:{xDir:[1,0,0],normal:[0,1,0]},bottom:{xDir:[1,0,0],normal:[0,-1,0]}};function VD(e,t=[0,0,0]){let n=BD[e];if(!n)return k(F(`UNKNOWN_PLANE`,`Could not find plane ${e}`));let r;return r=typeof t==`number`?wD(n.normal,t):vD(t),O(zD(r,n.xDir,n.normal))}function HD(e,t){return typeof e==`string`?VD(e,t):O(e)}function UD(e,t){return e&&typeof e!=`string`?{...e}:j(HD(e??`XY`,t))}function WD(e,t){let[n,r]=t;return SD(SD(e.origin,wD(e.xDir,n)),wD(e.yDir,r))}function GD(e,t){return{...e,origin:SD(e.origin,t)}}function KD(e,t,n=[1,0,0]){let r=t*gD,i=ID(e.zDir,n,r),a=ID(e.xDir,n,r),o=jD(DD(i,a));return{origin:e.origin,xDir:a,yDir:o,zDir:i}}var qD={compound:0,solidCompound:1,solid:2,shell:3,face:4,wire:5,edge:6,vertex:7,shape:8},JD=e=>qD[e],YD={vertex:`vertex`,edge:`edge`,wire:`wire`,face:`face`,shell:`shell`,solid:`solid`,solidCompound:`compsolid`,compound:`compound`,shape:`compound`},XD=function*(e,t){let n=U().iterShapes(e,YD[t]);for(let e of n)yield e},ZD=e=>U().isNull(e)?k(ho(`NULL_SHAPE`,`This shape has no type, it is null`)):O(e.ShapeType());function QD(e){if(U().isNull(e))return k(ho(`NULL_SHAPE`,`This shape has no type, it is null`));try{return O(U().downcast(e))}catch(e){return k(ho(`NO_WRAPPER`,`Could not find a wrapper for this shape type`,e))}}function $D(e){if(U().isNull(e))return k(ho(`NULL_SHAPE`,`Cannot copy a null shape`));try{return O(U().copyShape(e))}catch(e){return k(ho(`NO_WRAPPER`,`Could not copy this shape`,e))}}function eO(e){return U().isNull(e)?k(ho(`NULL_SHAPE`,`Cannot cast a null shape`)):O(jE(e))}function tO(e){return U().shapeType(e.wrapped)===`compsolid`}function nO(e){return eO(U().fromBREP(e))}var rO={plane:`PLANE`,cylinder:`CYLINDRE`,cone:`CONE`,sphere:`SPHERE`,torus:`TORUS`,bezier:`BEZIER_SURFACE`,bspline:`BSPLINE_SURFACE`,revolution:`REVOLUTION_SURFACE`,extrusion:`EXTRUSION_SURFACE`,offset:`OFFSET_SURFACE`,other:`OTHER_SURFACE`};function iO(e){return O(rO[fD(e)])}function aO(e){return j(iO(e))}function oO(e){return U().shapeOrientation(e.wrapped)===`forward`?`forward`:`backward`}function sO(e){return jE(U().reverseShape(e.wrapped))}function cO(e){return U().uvBounds(e.wrapped)}function lO(e,t,n){let r=cO(e),i=t*(r.uMax-r.uMin)+r.uMin,a=n*(r.vMax-r.vMin)+r.vMin;return U().pointOnSurface(e.wrapped,i,a)}function uO(e,t){let n=vD(t);return U().uvFromPoint(e.wrapped,n)||[0,0]}function dO(e,t){let n=vD(t);try{let t=n,r=U().uvFromPoint(e.wrapped,t);if(!r)return k(ho(`PROJECTION_FAILED`,`No projection found on the face`));let i=U().projectPointOnFace(e.wrapped,t),a=n[0]-i[0],o=n[1]-i[1],s=n[2]-i[2];return O({uv:r,point:i,distance:Math.sqrt(a*a+o*o+s*s)})}catch(e){return k(ho(`PROJECTION_FAILED`,`Point projection failed: ${e instanceof Error?e.message:String(e)}`))}}function fO(e,t){let n,r;if(t)[n,r]=uO(e,t);else{let t=cO(e);n=.5*(t.uMin+t.uMax),r=.5*(t.vMin+t.vMax)}return U().surfaceNormal(e.wrapped,n,r)}function pO(e){return U().surfaceCenterOfMass(e.wrapped)}function mO(e){return U().getSurfaceAxis(e.wrapped)}function hO(e,t,n=1e-6){let[r,i]=uO(e,t);return U().classifyPointOnFace(e.wrapped,r,i,n)}function gO(e){return jE(U().outerWire(e.wrapped))}function _O(e){return jE(U().removeHolesFromFace(e.wrapped))}function vO(e){let t=gO(e);return Array.from(XD(e.wrapped,`wire`)).map(e=>jE(j(QD(e)))).filter(e=>!U().isSame(e.wrapped,t.wrapped))}function yO(e,t){let n=qE(e),r=U(),i=new Map;for(let n of r.iterShapes(e.wrapped,`face`))i.set(r.hashCode(n,G),t),r.dispose(n);n.faceOrigins=i}function bO(e){return JE(e)?.faceOrigins}function xO(e,t,n){let r=new Map;for(let e of t){let t=bO(e);if(t)for(let[e,n]of t)r.set(e,n)}if(r.size===0)return;let i=new Map;for(let[t,n]of r){if(e.deleted.has(t))continue;let r=e.modified.get(t);if(r&&r.length>0)for(let e of r)i.set(e,n);else i.set(t,n);let a=e.generated.get(t);if(a)for(let e of a)i.has(e)||i.set(e,n)}if(i.size>0){let e=qE(n);e.faceOrigins=i}}var SO=100,CO=.985,wO=.1;function TO(e,t,n,r){let i=-1/0,a;for(let n of r){let r=e[0]*n.normal[0]+e[1]*n.normal[1]+e[2]*n.normal[2];if(r<.707)continue;let o=t[0]-n.centroid[0],s=t[1]-n.centroid[1],c=t[2]-n.centroid[2],l=o*o+s*s+c*c;if(l>SO)continue;let u=r-l/SO;u>i&&(i=u,a=n.origin)}if(a!==void 0)return a;if(!n)return;let o=1/0,s;for(let n of r){if(!n.planar)continue;let r=e[0]*n.normal[0]+e[1]*n.normal[1]+e[2]*n.normal[2];if(Math.abs(r)<CO)continue;let i=t[0]-n.centroid[0],a=t[1]-n.centroid[1],c=t[2]-n.centroid[2],l=i*n.normal[0]+a*n.normal[1]+c*n.normal[2];if(l*l>wO)continue;let u=Math.max(0,i*i+a*a+c*c-l*l);u<o&&(o=u,s=n.origin)}return s}function EO(e,t){let n=new Map;for(let t of e){let e=bO(t);if(e)for(let[t,r]of e)n.set(t,r)}if(n.size===0)return;let r=U(),i=new Map,a=ZE(t),o=[];for(let e of a){let t=r.hashCode(e.wrapped,G),a=n.get(t);a===void 0?o.push(e):i.set(t,a)}if(o.length>0){let t=[];for(let n of e){let e=bO(n);if(e)for(let i of ZE(n)){let n=r.hashCode(i.wrapped,G),a=e.get(n);if(a!==void 0)try{let e=r.uvBounds(i.wrapped),n=r.surfaceNormal(i.wrapped,.5*(e.uMin+e.uMax),.5*(e.vMin+e.vMax)),o=r.surfaceCenterOfMass(i.wrapped),s=r.surfaceType(i.wrapped)===`plane`;t.push({origin:a,normal:n,centroid:o,planar:s})}catch{}}}if(t.length>0)for(let e of o){let n=r.hashCode(e.wrapped,G);try{let a=r.uvBounds(e.wrapped),o=TO(r.surfaceNormal(e.wrapped,.5*(a.uMin+a.uMax),.5*(a.vMin+a.vMax)),r.surfaceCenterOfMass(e.wrapped),r.surfaceType(e.wrapped)===`plane`,t);o!==void 0&&i.set(n,o)}catch{}}}if(i.size>0){let e=qE(t);e.faceOrigins=i}}var DO=new WeakMap,OO=new WeakMap;function kO(e){return DO.has(e.wrapped)}function AO(e){let t=DO.get(e.wrapped);return t||(t=new Map,DO.set(e.wrapped,t)),t}function jO(e){let t=OO.get(e.wrapped);return t||(t=new Map,OO.set(e.wrapped,t)),t}function MO(e,t,n){let r=Array.isArray(t)?t:ZE(e).filter(t),i=AO(e),a=i.get(n)??new Set;for(let e of r)a.add(U().hashCode(e.wrapped,G));return i.set(n,a),e}function NO(e,t){let n=DO.get(e.wrapped);if(!n)return[];let r=n.get(t);if(!r||r.size===0)return[];let i=[];for(let t of ZE(e)){let e=U().hashCode(t.wrapped,G);r.has(e)&&i.push(t)}return i}function PO(e){let t=new Map,n=DO.get(e.wrapped);if(!n)return t;let r=ZE(e),i=new Map;for(let e of r)i.set(U().hashCode(e.wrapped,G),e);for(let[e,r]of n){let n=[];for(let e of r){let t=i.get(e);t&&n.push(t)}n.length>0&&t.set(e,n)}return t}function FO(e,t,n){return jO(e).set(t,n),e}function IO(e,t){return OO.get(e.wrapped)?.get(t)}function LO(e,t,n){let r=e.get(t)??new Set;r.add(n),e.set(t,r)}function RO(e,t,n){let r=AO(n);for(let i of t){let t=DO.get(i.wrapped);if(!t)continue;let a=new Map;for(let[e,n]of t)for(let t of n){let n=a.get(t)??[];n.push(e),a.set(t,n)}for(let[t,n]of a){if(e.deleted.has(t))continue;let i=e.modified.get(t),a=i&&i.length>0?i:[t];for(let e of a)for(let t of n)LO(r,t,e)}let o=OO.get(i.wrapped);if(o){let e=jO(n);for(let[t,n]of o)e.has(t)||e.set(t,n)}}}var zO=new WeakMap,BO=new WeakMap;function VO(e){return zO.has(e.wrapped)||BO.has(e.wrapped)}function HO(e){let t=BO.get(e.wrapped);return t||(t=new Map,BO.set(e.wrapped,t)),t}function UO(e){if(typeof e==`string`){let t=e.startsWith(`#`)?e.slice(1):e;return t.length===3&&(t=t.charAt(0)+t.charAt(0)+t.charAt(1)+t.charAt(1)+t.charAt(2)+t.charAt(2)),[parseInt(t.slice(0,2),16)/255,parseInt(t.slice(2,4),16)/255,parseInt(t.slice(4,6),16)/255,1]}return e.length===3?[e[0],e[1],e[2],1]:[e[0],e[1],e[2],e[3]]}function WO(e,t){return zO.set(e.wrapped,UO(t)),e}function GO(e,t,n){let r=UO(n),i=HO(e);for(let e of t)i.set(U().hashCode(e.wrapped,G),r);return e}function KO(e){return zO.get(e.wrapped)}function qO(e,t){let n=BO.get(e.wrapped);if(n)return n.get(U().hashCode(t.wrapped,G))}function JO(e,t,n){for(let e of t){let t=zO.get(e.wrapped);if(t){zO.set(n.wrapped,t);break}}let r=HO(n);for(let n of t){let t=BO.get(n.wrapped);if(!(!t||t.size===0))for(let[n,i]of t){if(e.deleted.has(n))continue;let t=e.modified.get(n);if(t&&t.length>0)for(let e of t)r.set(e,i);else r.set(n,i)}}}function YO(e){return bO(e)!==void 0||kO(e)||VO(e)}function XO(e){if(!e.some(YO))return[];let t=U(),n=[];for(let r of e){let e=t.iterShapes(r.wrapped,`face`);for(let r of e)n.push(t.hashCode(r,G)),t.dispose(r)}return n}function ZO(e,t,n){xO(e,t,n),RO(e,t,n),JO(e,t,n)}function QO(e,t){EO(e,t)}function $O(e,t){let n=U(),r=[...n.iterShapes(e.wrapped,`face`)],i=[...n.iterShapes(t.wrapped,`face`)];if(r.length!==i.length)return;let a=new Map;for(let e=0;e<r.length;e++){let t=r[e],o=i[e];t===void 0||o===void 0||a.set(n.hashCode(t,G),[n.hashCode(o,G)])}for(let e of r)n.dispose(e);for(let e of i)n.dispose(e);ZO({modified:a,generated:new Map,deleted:new Set},[e],t)}function ek(e,t){let n=XO([e]),{shape:r,evolution:i}=U().translateWithHistory(e.wrapped,t[0],t[1],t[2],n,G),a=W(r);return ZO(i,[e],a),a}function tk(e,t,n=[0,0,0],r=[0,0,1]){let i=XO([e]),{shape:a,evolution:o}=U().rotateWithHistory(e.wrapped,t*gD,i,G,r,n),s=W(a);return ZO(o,[e],s),s}function nk(e,t=[0,1,0],n=[0,0,0]){let r=XO([e]),{shape:i,evolution:a}=U().mirrorWithHistory(e.wrapped,n,t,r,G),o=W(i);return ZO(a,[e],o),o}function rk(e,t,n=[0,0,0]){let r=XO([e]),{shape:i,evolution:a}=U().scaleWithHistory(e.wrapped,n,t,r,G),o=W(i);return ZO(a,[e],o),o}function ik(e,t,n){let r=U().boundingBox(e.wrapped),i=[r.max[0]-r.min[0],r.max[1]-r.min[1],r.max[2]-r.min[2]],a=n?.auto===!0;function o(e,t,n){return e!==void 0&&t>1e-12?e/t:e===void 0&&a?n:1}let s=1;a&&(t[0]!==void 0&&i[0]>1e-12?s=t[0]/i[0]:t[1]!==void 0&&i[1]>1e-12?s=t[1]/i[1]:t[2]!==void 0&&i[2]>1e-12&&(s=t[2]/i[2]));let c=[o(t[0],i[0],s),o(t[1],i[1],s),o(t[2],i[2],s)];return Math.abs(c[0]-c[1])<1e-6&&Math.abs(c[1]-c[2])<1e-6?O(rk(e,c[0])):k(F(N.VALIDATION_FAILED,`resize: non-uniform scaling is not supported (WASM build lacks BRepBuilderAPI_GTransform).`,void 0,void 0,`Use auto: true to scale proportionally, or set all three dimensions to achieve uniform scaling.`))}function ak(e){if(`linear`in e)return O({linear:e.linear,translation:e.translation});let[t,n,r,i]=e,a=1e-10;return Math.abs(i[0])>a||Math.abs(i[1])>a||Math.abs(i[2])>a||Math.abs(i[3]-1)>a?k(F(N.VALIDATION_FAILED,`applyMatrix: invalid bottom row [${String(i[0])}, ${String(i[1])}, ${String(i[2])}, ${String(i[3])}]. Must be [0, 0, 0, 1] for an affine transform.`)):O({linear:[t[0],t[1],t[2],n[0],n[1],n[2],r[0],r[1],r[2]],translation:[t[3],n[3],r[3]]})}function ok(e){return e[0]*(e[4]*e[8]-e[5]*e[7])-e[1]*(e[3]*e[8]-e[5]*e[6])+e[2]*(e[3]*e[7]-e[4]*e[6])}function sk(e){let t=1e-8,n=e[0]*e[0]+e[3]*e[3]+e[6]*e[6],r=e[1]*e[1]+e[4]*e[4]+e[7]*e[7],i=e[2]*e[2]+e[5]*e[5]+e[8]*e[8],a=e[0]*e[1]+e[3]*e[4]+e[6]*e[7],o=e[0]*e[2]+e[3]*e[5]+e[6]*e[8],s=e[1]*e[2]+e[4]*e[5]+e[7]*e[8];return!(Math.abs(a)>t||Math.abs(o)>t||Math.abs(s)>t||Math.abs(n-r)>t||Math.abs(n-i)>t)}function ck(e,t){let n=ak(t);if(!n.ok)return n;let{linear:r,translation:i}=n.value,a=ok(r);if(Math.abs(a)<1e-12)return k(F(N.VALIDATION_FAILED,`applyMatrix: singular matrix (determinant ≈ 0). Cannot apply a non-invertible transform.`));if(sk(r)){let t=XO([e]),{shape:n,evolution:a}=U().generalTransformWithHistory(e.wrapped,r,i,!0,t,G),o=W(n);return ZO(a,[e],o),O(o)}let o=W(U().generalTransformNonOrthogonal(e.wrapped,r,i));return QO([e],o),O(o)}function lk(e){let t=e.map(e=>e.type===`translate`?{type:`translate`,x:e.v[0],y:e.v[1],z:e.v[2]}:{type:`rotate`,angle:e.angle,axis:e.axis,center:e.center}),{handle:n,dispose:r}=U().composeTransform(t);return{trsf:n,cleanup:r}}function uk(e,t){let{trsf:n,cleanup:r}=lk(`type`in t?[t]:t),i;try{i=W(U().locate(e.wrapped,n))}finally{r()}return YO(e)&&$O(e,i),i}function dk(e,t){let n=XO([e]),{shape:r,evolution:i}=U().applyComposedTransformWithHistory(e.wrapped,t.trsf,n,G),a=W(r);return ZO(i,[e],a),a}function fk(e){return BE(()=>U().copyShape(e.wrapped),N.CLONE_FAILED,`Failed to clone shape`)}function pk(e){return VE(()=>U().toBREP(e.wrapped),N.TO_BREP_FAILED,`Failed to serialize shape to BREP`)}function mk(e){return U().hashCode(e.wrapped,G)}function hk(e){return U().isNull(e.wrapped)}function gk(e,t){return U().isSame(e.wrapped,t.wrapped)}function _k(e,t){return U().isEqual(e.wrapped,t.wrapped)}function vk(e){return BE(()=>U().simplify(e.wrapped),N.SIMPLIFY_FAILED,`Failed to simplify shape`)}function yk(e){return U().curveType(e.wrapped)}function bk(e){let[t]=U().curveParameters(e.wrapped);return U().curvePointAtParam(e.wrapped,t)}function xk(e){let[,t]=U().curveParameters(e.wrapped);return U().curvePointAtParam(e.wrapped,t)}function Sk(e,t=.5){let[n,r]=U().curveParameters(e.wrapped),i=n+(r-n)*t;return U().curvePointAtParam(e.wrapped,i)}function Ck(e,t=.5){let[n,r]=U().curveParameters(e.wrapped),i=n+(r-n)*t;return U().curveTangent(e.wrapped,i).tangent}function wk(e){return U().length(e.wrapped)}function Tk(e){if(yk(e)!==`CIRCLE`)return null;let t=Sk(e,0),n=Sk(e,1/3),r=Sk(e,2/3),i=[n[0]-t[0],n[1]-t[1],n[2]-t[2]],a=[r[0]-t[0],r[1]-t[1],r[2]-t[2]],o=[i[1]*a[2]-i[2]*a[1],i[2]*a[0]-i[0]*a[2],i[0]*a[1]-i[1]*a[0]],s=o[0]*o[0]+o[1]*o[1]+o[2]*o[2];if(s<1e-18)return null;let c=i[0]*i[0]+i[1]*i[1]+i[2]*i[2],l=a[0]*a[0]+a[1]*a[1]+a[2]*a[2],u=[c*a[0]-l*i[0],c*a[1]-l*i[1],c*a[2]-l*i[2]],d=[u[1]*o[2]-u[2]*o[1],u[2]*o[0]-u[0]*o[2],u[0]*o[1]-u[1]*o[0]],f=1/(2*s),p=[t[0]+d[0]*f,t[1]+d[1]*f,t[2]+d[2]*f],m=Math.sqrt(s);return{origin:p,direction:[o[0]/m,o[1]/m,o[2]/m]}}function Ek(e){return U().curveIsClosed(e.wrapped)}function Dk(e){return U().curveIsPeriodic(e.wrapped)}function Ok(e){return U().curvePeriod(e.wrapped)}function kk(e){return U().shapeOrientation(e.wrapped)===`forward`?`forward`:`backward`}function Ak(e){return W(U().reverseShape(e.wrapped))}function jk(e,t={}){if(e.length<2)return k(ho(`INTERPOLATE_MIN_POINTS`,`Interpolation requires at least 2 points`));try{let n=W(U().interpolatePoints(e,t));return CE(n)?O(n):(FE(n),k(ho(`INTERPOLATE_NOT_EDGE`,`Interpolation did not produce an edge`)))}catch(e){return k(ho(`INTERPOLATE_FAILED`,`Interpolation failed: ${e instanceof Error?e.message:String(e)}`))}}function Mk(e,t={}){if(e.length<2)return k(ho(`APPROXIMATE_MIN_POINTS`,`Approximation requires at least 2 points`));try{let n=W(U().approximatePoints(e,t));return CE(n)?O(n):(FE(n),k(ho(`APPROXIMATE_NOT_EDGE`,`Approximation did not produce an edge`)))}catch(e){return k(ho(`APPROXIMATE_FAILED`,`Approximation failed: ${e instanceof Error?e.message:String(e)}`))}}function Nk(e,t,n=`arc`){let r=W(U().offsetWire2D(e.wrapped,t,{arc:`arc`,intersection:`intersection`,tangent:`tangent`,chamfer:`intersection`}[n]));return wE(r)?O(r):(FE(r),k(ho(`OFFSET_NOT_WIRE`,`Offset did not produce a Wire`)))}function Pk(e,t,n,r=!1){return`${e}:${t}:${n}:${r}`}function Fk(e,t){return`edge:${e}:${t}`}var Ik=new WeakMap,Lk=new WeakMap;function Rk(e,t){let n=Ik.get(e);if(n)return n.get(t)}function zk(e,t,n){let r=Ik.get(e);r||(r=new Map,Ik.set(e,r)),r.set(t,n)}function Bk(e,t){let n=Lk.get(e);if(n)return n.get(t)}function Vk(e,t,n){let r=Lk.get(e);r||(r=new Map,Lk.set(e,r)),r.set(t,n)}function Hk(){Ik=new WeakMap,Lk=new WeakMap}function Uk(){let e=new WeakMap,t=new WeakMap;return{getMesh(t,n){return e.get(t)?.get(n)},setMesh(t,n,r){let i=e.get(t);i||(i=new Map,e.set(t,i)),i.set(n,r)},getEdgeMesh(e,n){return t.get(e)?.get(n)},setEdgeMesh(e,n,r){let i=t.get(e);i||(i=new Map,t.set(e,i)),i.set(n,r)},clear(){e=new WeakMap,t=new WeakMap}}}function Wk(e,t={}){let n=To(),{tolerance:r=n.tolerance,angularTolerance:i=n.angularTolerance,skipNormals:a=!1,includeUVs:o=!1,cache:s=!0,signal:c}=t;c?.throwIfAborted();let l=Pk(r,i,a,o);if(s){let t=Rk(e.wrapped,l);if(t)return t}let u=U().mesh(e.wrapped,{tolerance:r,angularTolerance:i,skipNormals:a,includeUVs:o,...c?{signal:c}:{}}),d=bO(e),f={vertices:u.vertices,normals:u.normals,triangles:u.triangles,uvs:u.uvs,faceGroups:u.faceGroups.map(e=>({start:e.start,count:e.count,faceId:e.faceHash,origin:d?.get(e.faceHash)??0}))};return s&&zk(e.wrapped,l,f),f}function Gk(e,t={}){let n=To(),{tolerance:r=n.tolerance,angularTolerance:i=n.angularTolerance,cache:a=!0}=t,o=Fk(r,i);if(a){let t=Bk(e.wrapped,o);if(t)return t}let s=U().meshEdges(e.wrapped,r,i),c={lines:s.lines,edgeGroups:s.edgeGroups.map(e=>({start:e.start,count:e.count,edgeId:e.edgeHash}))};return a&&Vk(e.wrapped,o,c),c}function Kk(e,t){return e instanceof Error&&e.message.startsWith(`${t} export failed`)?vo(`${t}_EXPORT_FAILED`,`Failed to write ${t} file`,e):e instanceof WebAssembly.RuntimeError?vo(`${t}_EXPORT_CRASHED`,`${t} export crashed the kernel (${e.message}); the shape likely contains geometry the ${t} writer cannot serialize`,e):vo(`${t}_FILE_READ_ERROR`,`Failed to read exported ${t} file`,e)}function qk(e){let t;try{t=eD(e)}catch{return``}if(t.length<=1)return``;let n=[];return t.forEach((e,t)=>{try{uD(e)}catch(e){if(e instanceof TypeError)throw e;n.push(t)}}),n.length===0?`; could not localize the offending sub-solid among ${t.length} solids`:`; offending sub-solid${n.length>1?`s`:``} (of ${t.length}): index ${n.join(`, `)}`}function Jk(e,t){try{return uD(e),null}catch(n){if(n instanceof TypeError)throw n;return vo(`${t}_EXPORT_UNSERIALIZABLE`,`${t} export aborted: the shape contains degenerate geometry the ${t} writer cannot serialize (bounding-box evaluation failed); export was skipped to avoid crashing the kernel${qk(e)}`,n)}}function Yk(e){let t=Jk(e,`STEP`);if(t)return k(t);try{let t=U().exportSTEP([e.wrapped]);return O(new Blob([t],{type:`application/STEP`}))}catch(e){return k(Kk(e,`STEP`))}}function Xk(e,t={}){let n=To(),{tolerance:r=n.tolerance,angularTolerance:i=n.angularTolerance,binary:a=!1}=t,o=Jk(e,`STL`);if(o)return k(o);try{U().hasTriangulation(e.wrapped)||U().meshShape(e.wrapped,r,i);let t=U().exportSTL(e.wrapped,a,r,i);return O(new Blob([t],{type:`application/sla`}))}catch(e){return k(Kk(e,`STL`))}}function Zk(e){try{let t=U().exportIGES([e.wrapped]);return O(new Blob([t],{type:`application/iges`}))}catch(e){return k(vo(`IGES_EXPORT_FAILED`,`Failed to write IGES file`,e))}}function Qk(e,t){let n=t?.coarseTolerance??.5,r=t?.fineTolerance??.05,i=t?.angularTolerance??.5;return{coarse:Wk(e,{tolerance:n,angularTolerance:i}),fine:Wk(e,{tolerance:r,angularTolerance:i*.2})}}function $k(e){let t=uD(e),n=t.xMax-t.xMin,r=t.yMax-t.yMin,i=t.zMax-t.zMin;return Math.sqrt(n*n+r*r+i*i)||1}function eA(e,t){let n;if(t.tolerances&&t.tolerances.length>0)n=[...t.tolerances];else{let r=Math.max(1,Math.floor(t.levels??3)),i=t.spacing??4,a=(t.relativeTolerance??5e-4)*$k(e)||2**-52;n=[];for(let e=r-1;e>=0;e--)n.push(a*i**e)}return n.sort((e,t)=>t-e),n}function tA(e,t,n){return Math.min(e/t*n,1)}function nA(e,t={}){let n=t.angularTolerance??To().angularTolerance,r=t.cache??!0,i=eA(e,t),a=Math.min(...i);return i.map(i=>{let o=tA(i,a,n);return{tolerance:i,angularTolerance:o,mesh:Wk(e,{tolerance:i,angularTolerance:o,cache:r,...t.signal?{signal:t.signal}:{}})}})}function rA(){return new Promise(e=>{setTimeout(e,0)})}async function iA(e,t={}){let n=t.angularTolerance??To().angularTolerance,r=t.cache??!0,i=t.meshLevel??((e,n,i)=>Wk(e,{tolerance:n,angularTolerance:i,cache:r,...t.signal?{signal:t.signal}:{}})),a=eA(e,t),o=Math.min(...a),s=[];for(let[r,c]of a.entries()){if(t.signal?.aborted)break;let l=tA(c,o,n),u;try{u=await i(e,c,l)}catch(e){if(t.signal?.aborted)break;throw e}let d={tolerance:c,angularTolerance:l,mesh:u};if(s.push(d),t.onLevel?.(d,r),t.signal?.aborted||r===a.length-1)break;await rA()}return s}function aA(e,t,n){if(t<0||t>=e.length)throw Error(n??`Index ${t} out of bounds (length ${e.length})`);return e[t]}function oA(e,t){if(e.length===0)throw Error(t??`Expected non-empty array`);return e[0]}function sA(e,t){if(e.length===0)throw Error(t??`Expected non-empty array`);return e[e.length-1]}function cA(e){return Array.from(Array(e).keys())}function lA(e){return cA(Math.min(...e.map(e=>e.length))).map(t=>e.map(e=>e[t]))}function uA(e,t){return hE(U().makeLineEdge([...e],[...t]))}function dA(e,t=[0,0,0],n=[0,0,1]){return hE(U().makeCircleEdge([...t],[...n],e))}function fA(e,t,n=[0,0,0],r=[0,0,1],i){return t>e?k(F(`ELLIPSE_RADII`,`The minor radius must be smaller than the major one`)):O(hE(U().makeEllipseEdge([...n],[...r],e,t,i?[...i]:void 0)))}function pA(e,t,n,r=[0,0,0],i=[0,0,1],a=!1){return gE(U().makeHelixWire(e,t,n,[...r],[...i],a))}function mA(e,t,n){return hE(U().makeArcEdge([...e],[...t],[...n]))}function hA(e,t,n,r,i=[0,0,0],a=[0,0,1],o){return t>e?k(F(`ELLIPSE_RADII`,`The minor radius must be smaller than the major one`)):O(hE(U().makeEllipseArc([...i],[...a],e,t,n,r,o?[...o]:void 0)))}function gA(e,{tolerance:t=.001,smoothing:n=null,degMax:r=6,degMin:i=1}={}){try{let a=e.map(e=>[...e]);return O(hE(U().approximatePoints(a,{tolerance:t,degMin:i,degMax:r,smoothing:n})))}catch(e){return k(P(`BSPLINE_FAILED`,`B-spline approximation failed`,e))}}function _A(e,{periodic:t=!1,tolerance:n=1e-7}={}){try{let r=e.map(e=>[...e]);return O(hE(U().interpolatePoints(r,{periodic:t,tolerance:n})))}catch(e){return k(P(`BSPLINE_INTERP_FAILED`,`B-spline interpolation failed`,e))}}function vA(e){if(e.length<2)return k(F(`BEZIER_MIN_POINTS`,`Need at least 2 points for a Bezier curve, got ${e.length}`,void 0,{pointCount:e.length}));let t=e.map(e=>[...e]);return O(hE(U().makeBezierEdge(t)))}function yA(e,t,n){return hE(U().makeTangentArc([...e],[...t],[...n]))}function bA(e){try{return O(gE(U().makeWireFromMixed(e.map(e=>e.wrapped))))}catch(e){return k(P(`WIRE_BUILD_FAILED`,`Failed to build the wire: ${e instanceof Error?e.message:`unknown error`}`))}}function xA(e,t){try{let n=U().makeFace(e.wrapped,!0);if(t&&t.length>0){let e=TA(_E(n),t);return lE(e)?O(e):k(F(`FACE_NOT_PLANAR`,`makeFace produced a non-planar face — wire may not be truly planar`))}let r=_E(n);return lE(r)?O(r):k(F(`FACE_NOT_PLANAR`,`makeFace produced a non-planar face — wire may not be truly planar`))}catch(e){return k(P(`FACE_BUILD_FAILED`,`Failed to build the face. Your wire might be non planar.`,e))}}function SA(e){return xA(gO(e))}function CA(e,t){return _E(U().makeFaceOnSurface(e.wrapped,t.wrapped))}function wA(e){try{return Ha(eO(U().makeNonPlanarFace(e.wrapped)),e=>TE(e)?O(e):k(P(`FACE_BUILD_FAILED`,`Failed to create a non-planar face`)))}catch(e){return k(P(`FACE_BUILD_FAILED`,`Failed to create a non-planar face`,e))}}function TA(e,t){return _E(U().addHolesInFace(e.wrapped,t.map(e=>e.wrapped)))}function EA(e){try{var t=OT();if(e.length<3)return k(F(`POLYGON_MIN_POINTS`,`You need at least 3 points to make a polygon`));let n=[...e.slice(1),e[0]],r=t.u(new BT);return Ha(bA(lA([e,n]).map(([e,t])=>r.register(uA(e,t)))),e=>xA(r.register(e)))}catch(e){t.e=e}finally{t.d()}}function DA(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function OA(e,t,n,r,i){let a=jE(e);if(!kE(a)){let o=eE(a).toUpperCase();return NE(e,a),FE(a),k(ho(t,`${n}. Got ${o} instead.`,void 0,i?{diagnostics:i}:void 0,r))}return NE(e,a),O(a)}function kA(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a,unsafe:o,trackEvolution:s=!0}={}){if(i?.aborted)throw i.reason;let c=DA(e,`fuse: first operand`);if(A(c))return c;let l=DA(t,`fuse: second operand`);if(A(l))return l;if(!s)return OA(U().fuse(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`);let u=XO([e,t]),{shape:d,evolution:f,diagnostics:p}=U().fuseWithHistory(e.wrapped,t.wrapped,u,G,{optimisation:n,simplify:r,fuzzyValue:a});if(p.hasErrors){if(U().isNull(d))return U().dispose(d),console.warn(`brepjs: fuse history path produced null result; retrying without evolution tracking.`,p),OA(U().fuse(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`);console.warn(`brepjs: fuse reported OCCT warnings/errors but produced a shape. Continuing with result.`,p)}let m=OA(d,`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`,`Common causes: overlapping coplanar faces, zero-thickness geometry, or non-manifold input. Try autoHeal() on inputs first.`,p);return m.ok&&ZO(f,[e,t],m.value),m}function AA(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a,unsafe:o,trackEvolution:s=!0}={}){if(i?.aborted)throw i.reason;let c=DA(e,`cut: base`);if(A(c))return c;let l=DA(t,`cut: tool`);if(A(l))return l;if(!s)return OA(U().cut(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`CUT_NOT_3D`,`Cut did not produce a 3D shape`);let u=XO([e,t]),{shape:d,evolution:f,diagnostics:p}=U().cutWithHistory(e.wrapped,t.wrapped,u,G,{optimisation:n,simplify:r,fuzzyValue:a});if(p.hasErrors){if(U().isNull(d))return U().dispose(d),console.warn(`brepjs: cut history path produced null result; retrying without evolution tracking.`,p),OA(U().cut(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`CUT_NOT_3D`,`Cut did not produce a 3D shape`);console.warn(`brepjs: cut reported OCCT warnings/errors but produced a shape. Continuing with result.`,p)}let m=OA(d,`CUT_NOT_3D`,`Cut did not produce a 3D shape`,`Common causes: tool does not fully intersect the base, or produces a zero-thickness sliver. Ensure the tool extends through the shape.`,p);return m.ok&&ZO(f,[e,t],m.value),m}function jA(e,t,{simplify:n=!1,signal:r,fuzzyValue:i,unsafe:a,trackEvolution:o=!0}={}){if(r?.aborted)throw r.reason;let s=DA(e,`intersect: first operand`);if(A(s))return s;let c=DA(t,`intersect: second operand`);if(A(c))return c;if(!o)return OA(U().intersect(e.wrapped,t.wrapped,{simplify:n,fuzzyValue:i}),`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`);let l=XO([e,t]),{shape:u,evolution:d,diagnostics:f}=U().intersectWithHistory(e.wrapped,t.wrapped,l,G,{simplify:n,fuzzyValue:i});if(f.hasErrors){if(U().isNull(u))return U().dispose(u),console.warn(`brepjs: intersect history path produced null result; retrying without evolution tracking.`,f),OA(U().intersect(e.wrapped,t.wrapped,{simplify:n,fuzzyValue:i}),`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`);console.warn(`brepjs: intersect reported OCCT warnings/errors but produced a shape. Continuing with result.`,f)}let p=OA(u,`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`,`Shapes may not overlap. Verify they share a common volume before intersecting.`,f);return p.ok&&ZO(d,[e,t],p.value),p}function MA(e,t,n,r,i,a,o,s){if(o?.aborted)throw o.reason;let c=n-t;if(c===1)return O(aA(e,t));if(c===2)return kA(aA(e,t),aA(e,t+1),{optimisation:r,simplify:!1,trackEvolution:a,fuzzyValue:s,unsafe:!0,...o?{signal:o}:{}});let l=t+Math.ceil(c/2),u=MA(e,t,l,r,i,a,o,s);if(A(u))return u;let d=MA(e,l,n,r,i,a,o,s);return A(d)?d:kA(u.value,d.value,{optimisation:r,simplify:i,trackEvolution:a,fuzzyValue:s,unsafe:!0,...o?{signal:o}:{}})}function NA(e,{optimisation:t=`none`,simplify:n=!1,strategy:r=`native`,signal:i,fuzzyValue:a,unsafe:o,trackEvolution:s=!0}={}){if(i?.aborted)throw i.reason;if(e.length===0)return k(F(`FUSE_ALL_EMPTY`,`fuseAll requires at least one shape`));if(e.length===1)return O(oA(e));for(let t=0;t<e.length;t++){let n=DA(aA(e,t),`fuseAll: shape at index ${t}`);if(A(n))return n}if(r===`native`){let o=OA(U().fuseAll(e.map(e=>e.wrapped),{optimisation:t,simplify:n,strategy:r,fuzzyValue:a,...i?{signal:i}:{}}),`FUSE_ALL_NOT_3D`,`fuseAll did not produce a 3D shape`);return o.ok&&s&&QO(e,o.value),o}return MA(e,0,e.length,t,n,s,i,a)}function PA(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a,unsafe:o,trackEvolution:s=!0}={}){if(i?.aborted)throw i.reason;if(t.length===0)return O(e);let c=DA(e,`cutAll: base`);if(A(c))return c;for(let e=0;e<t.length;e++){let n=DA(aA(t,e),`cutAll: tool at index ${e}`);if(A(n))return n}let l=[e,...t],u=OA(U().cutAll(e.wrapped,t.map(e=>e.wrapped),{optimisation:n,simplify:r,fuzzyValue:a}),`CUT_ALL_NOT_3D`,`cutAll did not produce a 3D shape`);return u.ok&&s&&QO(l,u.value),u}function FA(e,t){let n=U(),r=wD(e.xDir,t),i=wD(e.yDir,t),a=wD(e.xDir,-t),o=wD(e.yDir,-t),s=e.origin,c=[...SD(SD(s,a),o)],l=[...SD(SD(s,r),o)],u=[...SD(SD(s,r),i)],d=[...SD(SD(s,a),i)],f=[n.makeLineEdge(c,l),n.makeLineEdge(l,u),n.makeLineEdge(u,d),n.makeLineEdge(d,c)],p=n.makeWire(f),m=n.makeFace(p,!0);for(let e of f)n.dispose(e);return n.dispose(p),m}function IA(e,t,{approximation:n=!0,planeSize:r=1e4}={}){if(U().isNull(e.wrapped))return k(F(N.NULL_SHAPE_INPUT,`section: shape is a null shape`));let i=FA(typeof t==`string`?j(HD(t)):t,r);try{return O(W(U().section(e.wrapped,i,n)))}catch(e){let n=e instanceof Error?e.message:String(e),r=typeof t==`string`?t:`custom`;return k(P(`SECTION_FAILED`,`Section with ${r} plane failed: ${n}`,e,{operation:`section`,plane:r},`The cutting plane may not intersect the shape. Verify plane position relative to shape bounds.`))}finally{U().dispose(i)}}function LA(e){let t=U(),n=new Map,r=new Map;for(let i of e){let e=$E(i),a=e[0]?t.hashCode(e[0].wrapped,G):-1,o=e.length>1&&e[1]?t.hashCode(e[1].wrapped,G):a;r.set(i,[a,o]);for(let e of[a,o]){let t=n.get(e)??[];t.push(i),n.set(e,t)}}return{vertexToEdges:n,edgeVertexHashes:r}}function RA(e,t,n){let r=t.vertexToEdges.get(e);if(r)for(let i of r){if(n.has(i))continue;let r=t.edgeVertexHashes.get(i);if(r)return n.add(i),{edge:i,nextTip:r[0]===e?r[1]:r[0]}}}function zA(e,t,n){n.add(e);let r=[e],i=t.edgeVertexHashes.get(e);if(!i)return r;let a=[i[1],i[0]];for(let e=0;e<2;e++){let i=a[e];if(i===void 0)continue;let o=RA(i,t,n);for(;o;)e===0?r.push(o.edge):r.unshift(o.edge),i=o.nextTip,o=RA(i,t,n)}return r}function BA(e){let t=U(),n=LA(e),r=new Set,i=[];for(let a of e){if(r.has(a))continue;let e=zA(a,n,r);try{let n=t.makeWire(e.map(e=>e.wrapped));i.push(W(n))}catch{}}return i}function VA(e){let t=U(),n=0,r=-1;for(let i=0;i<e.length;i++){let a=e[i];if(!a)continue;let o=t.boundingBox(a.wrapped),s=o.max[0]-o.min[0],c=o.max[1]-o.min[1],l=o.max[2]-o.min[2],u=s*s+c*c+l*l;u>r&&(r=u,n=i)}return n}function HA(e,t,n={}){let r=IA(e,t,n);if(!r.ok)return r;let i=QE(r.value);if(i.length===0){let e=XE(r.value);if(e.length===0)return k(P(`SECTION_FAILED`,`sectionToFace: section produced no geometry`,void 0,void 0,`The cutting plane may not intersect the shape. Verify plane position relative to shape bounds.`));i.push(...BA(e))}if(i.length===0)return k(P(`SECTION_FAILED`,`sectionToFace: section produced no usable geometry`,void 0,void 0,`The cutting plane may not intersect the shape. Verify plane position relative to shape bounds.`));let a=VA(i),o=aA(i,a),s=i.filter((e,t)=>t!==a);return xA(o,s.length>0?s:void 0)}function UA(e,t){if(t.length===0)return O(e);if(U().isNull(e.wrapped))return k(F(N.NULL_SHAPE_INPUT,`split: shape is a null shape`));for(let e=0;e<t.length;e++)if(U().isNull(aA(t,e).wrapped))return k(F(N.NULL_SHAPE_INPUT,`splitShape: tool at index ${e} is a null shape`));try{return O(W(U().split(e.wrapped,t.map(e=>e.wrapped))))}catch(e){let n=e instanceof Error?e.message:String(e);return k(P(`SPLIT_FAILED`,`Split operation failed on ${t.length} tool(s): ${n}`,e,{operation:`split`,toolCount:t.length},`The splitting tools may not intersect the shape. Ensure tools cross through the shape's interior.`))}}function WA(e,t,n={}){let r=[];for(let i of t){let t=IA(e,i,n);if(A(t))return t;r.push(t.value)}return O(r)}function GA(e,t,n){if(t.length===0)return O(e);let r=n?.optimisation===`commonFace`?1:n?.optimisation===`sameFace`?2:0,i=U(),a=t.map(e=>({op:e.op,tool:e.tool.wrapped}));try{let o=i.booleanPipeline?.(e.wrapped,a,{glueMode:r});if(o===void 0)return KA(e,t,n);if(o===null)return k(P(`BOOLEAN_PIPELINE_FAILED`,`Boolean pipeline returned null shape`));let s=W(o);return kE(s)?O(s):(FE(s),k(ho(`BOOLEAN_PIPELINE_NOT_3D`,`Pipeline result is not a 3D shape`)))}catch(e){return k(P(`BOOLEAN_PIPELINE_FAILED`,e instanceof Error?e.message:String(e)))}}function KA(e,t,n){let r=e,i={...n?.optimisation?{optimisation:n.optimisation}:{},unsafe:!0};for(let e of t){let t=e.op===`fuse`?kA(r,e.tool,i):e.op===`cut`?AA(r,e.tool,i):jA(r,e.tool,i);if(A(t))return t;r=j(t)}return O(r)}function qA(e){return W(U().sew(e.map(e=>e.wrapped)))}function JA(e,t=!1){let n=qA(e);return!t&&!EE(n)?k(ho(`WELD_NOT_SHELL`,`Could not make a shell from faces and shells`)):O(n)}function YA(e,t,n=[0,0,0],r=[0,0,1]){return yE(U().makeCylinder(e,t,[...n],[...r]))}function XA(e){return yE(U().makeSphere(e))}function ZA(e,t,n,r=[0,0,0],i=[0,0,1]){return yE(U().makeCone(e,t,n,[...r],[...i]))}function QA(e,t,n=[0,0,0],r=[0,0,1]){return yE(U().makeTorus(e,t,[...n],[...r]))}function $A(e,t,n){return yE(U().makeEllipsoid(e,t,n))}function ej(e){return mE(U().makeVertex(e[0],e[1],e[2]))}function tj(e,t,n=1e-6){return Ha(QD(U().offset(e.wrapped,t,n)),e=>Ha(eO(e),e=>kE(e)?O(e):k(ho(`OFFSET_NOT_3D`,`Could not offset to a 3d shape`))))}function nj(e){return xE(U().makeCompound(e.map(e=>e.wrapped)))}function rj(e){try{var t=OT();let n=t.u(qA(e)),r=W(U().solidFromShell(n.wrapped));return DE(r)?O(r):(FE(r),k(ho(`SOLID_BUILD_FAILED`,`Could not make a solid of faces and shells`)))}catch(e){t.e=e}finally{t.d()}}function ij(e){return{position:e.vertices,normal:e.normals,index:e.triangles}}function aj(e){return{position:e.vertices,normal:e.normals,index:e.triangles,groups:e.faceGroups.map((e,t)=>({start:e.start,count:e.count,materialIndex:t,faceId:e.faceId}))}}function oj(e){return{position:e.lines}}function sj(e,t){return{coarse:ij(e.coarse),fine:ij(e.fine),coarseDistance:t?.coarse??50,fineDistance:t?.fine??0}}function cj(e,t){let n=t?.step??50,r=t?.distances;if(r&&r.length!==e.length)throw Error(`toLODGeometryLevels: distances must have one entry per level (got ${r.length} for ${e.length} levels)`);let i=e.length-1;return e.map((e,t)=>({geometry:ij(e.mesh),distance:r?.[t]??(i-t)*n}))}function lj(e,t,n,r){if(t.length===0)return k(F(`CHAMFER_ANGLE_NO_EDGES`,`chamferDistAngle requires at least one edge`,void 0,{edgeCount:0}));if(n<=0)return k(F(`CHAMFER_ANGLE_BAD_DISTANCE`,`distance must be positive, got ${n}`,void 0,{distance:n}));if(r<=0||r>=90)return k(F(`CHAMFER_ANGLE_BAD_ANGLE`,`angleDeg must be in range (0, 90), got ${r}`,void 0,{angleDeg:r}));let i;try{let a=U(),o=t.map(e=>e.wrapped);i=a.chamferDistAngle(e.wrapped,o,n,r)}catch(e){return k(P(`CHAMFER_ANGLE_FAILED`,`chamferDistAngle kernel call failed: ${e instanceof Error?e.message:String(e)}`,e,{distance:n,angleDeg:r,edgeCount:t.length}))}let a=QD(i);if(A(a))return U().dispose(i),a;let o=W(a.value);return NE(i,o),kE(o)?O(o):(FE(o),k(ho(`CHAMFER_ANGLE_NOT_3D`,`chamferDistAngle did not produce a 3D shape`)))}function uj(e){let t=U();return t.getNurbsCurveData?t.getNurbsCurveData(e.wrapped):null}function dj(e){let t=U();return t.getNurbsSurfaceData?t.getNurbsSurfaceData(e.wrapped):null}var fj={cut:AA,cutAll:PA,fuse:kA,fuseAll:NA};function pj(e){return{totalInputs:e.totalInputs,batchAttempts:e.batchAttempts,batchSucceeded:e.batchSucceeded,singletonFallbacks:e.singletonFallbacks,failedInputs:[...e.failedInputs].sort((e,t)=>e-t)}}function mj(e,t,n={}){return hj(fj,e,t,n)}function hj(e,t,n,r={}){if(r.signal?.aborted)throw r.signal.reason;let i={totalInputs:n.length,batchAttempts:0,batchSucceeded:0,singletonFallbacks:0,failedInputs:new Set},a=gj(e,t,n,0,r,i);return A(a)?a:O({shape:a.value,telemetry:pj(i)})}function gj(e,t,n,r,i,a){if(n.length===0)return O(t);if(n.length===1)return _j(e,t,n,r,i,a);a.batchAttempts++;let o=Sj(()=>e.cutAll(t,n,i));if(o&&o.ok)return a.batchSucceeded++,o;if(i.signal?.aborted)throw i.signal.reason;let s=Math.floor(n.length/2),c=gj(e,t,n.slice(0,s),r,i,a);return c.ok?gj(e,c.value,n.slice(s),r+s,i,a):c}function _j(e,t,n,r,i,a){a.singletonFallbacks++;let o=oA(n),s=Sj(()=>e.cut(t,o,i));if(s&&s.ok)return s;if(i.signal?.aborted)throw i.signal.reason;return a.failedInputs.add(r),O(t)}function vj(e,t={}){return yj(fj,e,t)}function yj(e,t,n={}){if(n.signal?.aborted)throw n.signal.reason;if(t.length===0)return k(F(N.FUSE_ALL_EMPTY,`fuseAllBisect requires at least one shape`));let r={totalInputs:t.length,batchAttempts:0,batchSucceeded:0,singletonFallbacks:0,failedInputs:new Set},i=bj(e,t,0,n,r);return A(i)?i:O({shape:i.value,telemetry:pj(r)})}function bj(e,t,n,r,i){if(t.length===1)return O(oA(t));i.batchAttempts++;let a=Sj(()=>e.fuseAll(t,r));if(a&&a.ok)return i.batchSucceeded++,a;if(r.signal?.aborted)throw r.signal.reason;let o=Math.floor(t.length/2);return xj(e,bj(e,t.slice(0,o),n,r,i),bj(e,t.slice(o),n+o,r,i),t,n,o,r,i)}function xj(e,t,n,r,i,a,o,s){if(t.ok&&n.ok){s.singletonFallbacks++;let c=Sj(()=>e.fuse(t.value,n.value,o));if(c&&c.ok)return c;for(let e=a;e<r.length;e++)s.failedInputs.add(i+e);return t}if(t.ok){for(let e=a;e<r.length;e++)s.failedInputs.add(i+e);return t}if(n.ok){for(let e=0;e<a;e++)s.failedInputs.add(i+e);return n}return t}function Sj(e){try{return e()}catch{return null}}function Cj(e,t,n){return U().checkBoolean(e.wrapped,t.wrapped,n)}function wj(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function Tj(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function Ej(e,t,n,r){let i=jE(e);if(!kE(i)){let a=eE(i).toUpperCase();return NE(e,i),FE(i),k(ho(t,`${n}. Got ${a} instead.`,void 0,void 0,r))}return NE(e,i),O(i)}function Dj(e,t){let n=[],r=new Map;for(let i of e){let e=t(i)??0;typeof e==`number`&&e<=0||Array.isArray(e)&&(e[0]<=0||e[1]<=0)||(n.push(i),r.set(U().hashCode(i.wrapped,G),e))}return n.length===0?null:{edges:n,kernelParam:e=>r.get(U().hashCode(e,2147483647))??1}}function Oj(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a}={}){if(i?.aborted)throw i.reason;let o=wj(e,`fuseWithEvolution: first operand`);if(A(o))return o;let s=wj(t,`fuseWithEvolution: second operand`);if(A(s))return s;let c=XO([e,t]),{shape:l,evolution:u}=U().fuseWithHistory(e.wrapped,t.wrapped,c,G,{optimisation:n,simplify:r,fuzzyValue:a}),d=Ej(l,`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`,`Common causes: overlapping coplanar faces, zero-thickness geometry, or non-manifold input. Try autoHeal() on inputs first.`);return d.ok?(ZO(u,[e,t],d.value),O({shape:d.value,evolution:u})):d}function kj(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a}={}){if(i?.aborted)throw i.reason;let o=wj(e,`cutWithEvolution: base`);if(A(o))return o;let s=wj(t,`cutWithEvolution: tool`);if(A(s))return s;let c=XO([e,t]),{shape:l,evolution:u}=U().cutWithHistory(e.wrapped,t.wrapped,c,G,{optimisation:n,simplify:r,fuzzyValue:a}),d=Ej(l,`CUT_NOT_3D`,`Cut did not produce a 3D shape`,`Common causes: tool does not fully intersect the base, or produces a zero-thickness sliver. Ensure the tool extends through the shape.`);return d.ok?(ZO(u,[e,t],d.value),O({shape:d.value,evolution:u})):d}function Aj(e,t,{simplify:n=!1,signal:r,fuzzyValue:i}={}){if(r?.aborted)throw r.reason;let a=wj(e,`intersectWithEvolution: first operand`);if(A(a))return a;let o=wj(t,`intersectWithEvolution: second operand`);if(A(o))return o;let s=XO([e,t]),{shape:c,evolution:l}=U().intersectWithHistory(e.wrapped,t.wrapped,s,G,{simplify:n,fuzzyValue:i}),u=Ej(c,`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`,`Shapes may not overlap. Verify they share a common volume before intersecting.`);return u.ok?(ZO(l,[e,t],u.value),O({shape:u.value,evolution:l})):u}function jj(e,t,n){let r=Tj(e,`filletWithEvolution: shape`);if(A(r))return r;if(typeof n==`number`&&n<=0)return k(F(`INVALID_FILLET_RADIUS`,`Fillet radius must be positive`,void 0,void 0,`Provide a positive radius value greater than 0`));if(Array.isArray(n)&&(n[0]<=0||n[1]<=0))return k(F(`INVALID_FILLET_RADIUS`,`Fillet radii must both be positive`,void 0,void 0,`Both radius values must be greater than 0`));let i=t??XE(e);if(i.length===0)return k(F(N.FILLET_NO_EDGES,`No edges found for fillet`,void 0,void 0,`Check that the shape has edges, or adjust your edge finder criteria`));try{let t,r;if(typeof n==`function`){let e=Dj(i,n);if(!e)return k(F(N.FILLET_NO_EDGES,`No edges with positive radius for fillet`,void 0,void 0,`Check that the radius callback returns positive values`));t=e.edges,r=e.kernelParam}else t=[...i],r=n;let a=XO([e]),{shape:o,evolution:s}=U().filletWithHistory(e.wrapped,t.map(e=>e.wrapped),r,a,G),c=W(o);return kE(c)?(ZO(s,[e],c),O({shape:c,evolution:s})):(FE(c),k(P(N.FILLET_NOT_3D,`Fillet result is not a 3D shape`)))}catch(e){return k(P(`FILLET_FAILED`,`Fillet operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`fillet`,edgeCount:i.length,radius:n}))}}function Mj(e,t,n){let r=Tj(e,`chamferWithEvolution: shape`);if(A(r))return r;if(typeof n==`number`&&n<=0)return k(F(`INVALID_CHAMFER_DISTANCE`,`Chamfer distance must be positive`,void 0,void 0,`Provide a positive distance value greater than 0`));if(Array.isArray(n)&&(n[0]<=0||n[1]<=0))return k(F(`INVALID_CHAMFER_DISTANCE`,`Chamfer distances must both be positive`,void 0,void 0,`Both distance values must be greater than 0`));let i=t??XE(e);if(i.length===0)return k(F(N.CHAMFER_NO_EDGES,`No edges found for chamfer`));try{let t,r;if(typeof n==`function`){let e=Dj(i,n);if(!e)return k(F(N.CHAMFER_NO_EDGES,`No edges with positive distance for chamfer`));t=e.edges,r=e.kernelParam}else t=[...i],r=n;let a=XO([e]),{shape:o,evolution:s}=U().chamferWithHistory(e.wrapped,t.map(e=>e.wrapped),r,a,G),c=W(o);return kE(c)?(ZO(s,[e],c),O({shape:c,evolution:s})):(FE(c),k(P(N.CHAMFER_NOT_3D,`Chamfer result is not a 3D shape`)))}catch(e){return k(P(`CHAMFER_FAILED`,`Chamfer operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`chamfer`,edgeCount:i.length,distance:n}))}}function Nj(e,t,n,r=.001){let i=Tj(e,`shellWithEvolution: shape`);if(A(i))return i;if(n<=0)return k(F(`INVALID_THICKNESS`,`Shell thickness must be positive`));if(t.length===0)return k(F(`NO_FACES`,`At least one face must be specified for shell`));try{let i=XO([e]),{shape:a,evolution:o}=U().shellWithHistory(e.wrapped,t.map(e=>e.wrapped),n,i,G,r),s=W(a);return kE(s)?(ZO(o,[e],s),O({shape:s,evolution:o})):(FE(s),k(P(`SHELL_RESULT_NOT_3D`,`Shell result is not a 3D shape`)))}catch(e){return k(P(`SHELL_FAILED`,`Shell operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`shell`,faceCount:t.length,thickness:n}))}}function Pj(e,t,n){try{let r=W(U().positionOnCurve(e.wrapped,t.wrapped,n));return kE(r)?O(r):(FE(r),k(P(N.POSITION_ON_CURVE_FAILED,`positionOnCurve did not produce a 3D shape`)))}catch(e){return k(P(N.POSITION_ON_CURVE_FAILED,`Failed to position shape on curve at param ${n}`,e))}}function Fj(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function Ij(e,t){if(typeof e==`number`&&e<=0)return k(F(t.code,t.scalar,void 0,void 0,t.scalarHint));if(Array.isArray(e)&&(e[0]<=0||e[1]<=0))return k(F(t.code,t.pair,void 0,void 0,t.pairHint))}function Lj(e,t){let n=[],r=new Map;for(let i of e){let e=t(i)??0;typeof e==`number`&&e<=0||Array.isArray(e)&&(e[0]<=0||e[1]<=0)||(n.push(i),r.set(U().hashCode(i.wrapped,G),e))}return n.length===0?null:{edges:n,kernelParam:e=>{let t=r.get(U().hashCode(e,G));if(t===void 0)throw Error(`fillet/chamfer: edge hash not found — possible hash collision`);return t}}}function Rj(e,t,n,r,i){let a=W(t);return kE(a)?(ZO(e,n,a),O(a)):(FE(a),k(P(r,i)))}function zj(e,t){if(typeof t!=`function`)return{filteredFaces:[...e],kernelAngle:t};let n=[],r=new Map;for(let i of e){let e=t(i);e===null||e===0||Math.abs(e)>=90||(n.push(i),r.set(U().hashCode(i.wrapped,G),e))}return{filteredFaces:n,kernelAngle:e=>{let t=r.get(U().hashCode(e,G));if(t===void 0)throw Error(`draft: face hash not found — possible hash collision`);return t}}}function Bj(e,t){let n=Fj(e,`thicken: shape`);if(A(n))return n;try{let n=XO([e]),{shape:r,evolution:i}=U().thickenWithHistory(e.wrapped,t,n,G),a=W(r);return ZO(i,[e],a),O(a)}catch(e){return k(P(`THICKEN_FAILED`,`Thicken operation failed: ${e instanceof Error?e.message:String(e)}`,e))}}function Vj(e,t,n){let r=Fj(e,`fillet: shape`);if(A(r))return r;let i=Ij(n,{code:`INVALID_FILLET_RADIUS`,scalar:`Fillet radius must be positive`,pair:`Fillet radii must both be positive`,scalarHint:`Provide a positive radius value greater than 0`,pairHint:`Both radius values must be greater than 0`});if(i)return i;let a=t??XE(e);if(a.length===0)return k(F(N.FILLET_NO_EDGES,`No edges found for fillet`,void 0,void 0,`Check that the shape has edges, or adjust your edge finder criteria`));if(typeof n==`function`){let e=Lj(a,n);return e?O({filteredEdges:e.edges,kernelRadius:e.kernelParam,selectedCount:a.length}):k(F(N.FILLET_NO_EDGES,`No edges with positive radius for fillet`,void 0,void 0,`Check that the radius callback returns positive values`))}return O({filteredEdges:[...a],kernelRadius:n,selectedCount:a.length})}function Hj(e,t,n,{trackEvolution:r=!0}={}){let i=Vj(e,t,n);if(A(i))return i;let{filteredEdges:a,kernelRadius:o,selectedCount:s}=i.value;try{let t=a.map(e=>e.wrapped);if(!r){let n=W(U().fillet(e.wrapped,t,o));return kE(n)?O(n):k(P(N.FILLET_NOT_3D,`Fillet result is not a 3D shape`))}let n=XO([e]),{shape:i,evolution:s}=U().filletWithHistory(e.wrapped,t,o,n,G);return Rj(s,i,[e],N.FILLET_NOT_3D,`Fillet result is not a 3D shape`)}catch(e){return k(P(`FILLET_FAILED`,`Fillet operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`fillet`,edgeCount:s,radius:n}))}}function Uj(e,t,n){let r=Fj(e,`chamfer: shape`);if(A(r))return r;let i=Ij(n,{code:`INVALID_CHAMFER_DISTANCE`,scalar:`Chamfer distance must be positive`,pair:`Chamfer distances must both be positive`,scalarHint:`Provide a positive distance value greater than 0`,pairHint:`Both distance values must be greater than 0`});if(i)return i;let a=t??XE(e);if(a.length===0)return k(F(N.CHAMFER_NO_EDGES,`No edges found for chamfer`));try{let t,r;if(typeof n==`function`){let e=Lj(a,n);if(!e)return k(F(N.CHAMFER_NO_EDGES,`No edges with positive distance for chamfer`));t=e.edges,r=e.kernelParam}else t=[...a],r=n;let i=XO([e]),{shape:o,evolution:s}=U().chamferWithHistory(e.wrapped,t.map(e=>e.wrapped),r,i,G);return Rj(s,o,[e],N.CHAMFER_NOT_3D,`Chamfer result is not a 3D shape`)}catch(e){return k(P(`CHAMFER_FAILED`,`Chamfer operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`chamfer`,edgeCount:a.length,distance:n}))}}function Wj(e,t,n,r=.001,{trackEvolution:i=!0}={}){let a=Fj(e,`shell: shape`);if(A(a))return a;if(n<=0)return k(F(`INVALID_THICKNESS`,`Shell thickness must be positive`));if(t.length===0)return k(F(`NO_FACES`,`At least one face must be specified for shell`));try{if(!i){let i=W(U().shell(e.wrapped,t.map(e=>e.wrapped),n,r));return kE(i)?O(i):k(P(`SHELL_RESULT_NOT_3D`,`Shell result is not a 3D shape`))}let a=XO([e]),{shape:o,evolution:s}=U().shellWithHistory(e.wrapped,t.map(e=>e.wrapped),n,a,G,r),c=W(o);return kE(c)?(ZO(s,[e],c),O(c)):k(P(`SHELL_RESULT_NOT_3D`,`Shell result is not a 3D shape`))}catch(e){return k(P(`SHELL_FAILED`,`Shell operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`shell`,faceCount:t.length,thickness:n}))}}function Gj(e,t,n=1e-6){let r=Fj(e,`offset: shape`);if(A(r))return r;if(Math.abs(t)<1e-10)return k(F(`ZERO_OFFSET`,`Offset distance cannot be zero`));try{let r=XO([e]),{shape:i,evolution:a}=U().offsetWithHistory(e.wrapped,t,r,G,n),o=W(i);return kE(o)?(ZO(a,[e],o),O(o)):k(P(`OFFSET_RESULT_NOT_3D`,`Offset result is not a 3D shape`))}catch(e){return k(P(`OFFSET_FAILED`,`Offset operation failed: ${e instanceof Error?e.message:String(e)}`,e))}}function Kj(e,t,n){let r=Fj(e,`draft: shape`);if(A(r))return r;if(typeof n==`number`){if(Math.abs(n)<1e-10)return k(F(N.DRAFT_INVALID_ANGLE,`Draft angle cannot be zero`,void 0,void 0,`Provide a non-zero angle in degrees`));if(Math.abs(n)>=90)return k(F(N.DRAFT_INVALID_ANGLE,`Draft angle must be between -90 and 90 degrees (exclusive)`,void 0,void 0,`Typical draft angles are 1-5 degrees for injection molding`))}if(t.length===0)return k(F(N.DRAFT_NO_FACES,`No faces specified for draft`,void 0,void 0,`Select at least one face to apply the draft angle to`))}function qj(e,t,n,r,i){let a=Kj(e,t,i);if(a)return a;try{let{filteredFaces:a,kernelAngle:o}=zj(t,i);if(a.length===0)return k(F(N.DRAFT_NO_FACES,`No faces with valid draft angle`,void 0,void 0,`Check that the angle callback returns non-zero values between -90 and 90 degrees`));let s=XO([e]),{shape:c,evolution:l}=U().draftWithHistory(e.wrapped,a.map(e=>e.wrapped),[n[0],n[1],n[2]],[r[0],r[1],r[2]],o,s,G);return Rj(l,c,[e],N.DRAFT_NOT_3D,`Draft result is not a 3D shape`)}catch(e){let n=e instanceof Error?e.message:String(e);return k(P(N.DRAFT_FAILED,`Draft operation failed: ${n}`,e,{operation:`draft`,faceCount:t.length,angle:i}))}}function Jj(e,t,n){if(n.length===0)return k(F(N.VARIABLE_FILLET_FAILED,`radii must contain at least one radius spec`));for(let e of n)if(e.radius<=0)return k(F(N.VARIABLE_FILLET_FAILED,`All radius values must be positive`));let r=U();try{let i=JSON.stringify({edge:r.hashCode(t.wrapped,G),radii:n.map(e=>({param:e.param,radius:e.radius}))}),a=W(r.filletVariable(e.wrapped,i));return kE(a)?DE(a)?O(a):(FE(a),k(P(N.VARIABLE_FILLET_FAILED,`Variable-radius fillet did not produce a solid`))):(FE(a),k(P(N.VARIABLE_FILLET_FAILED,`Variable-radius fillet did not produce a 3D shape`)))}catch(e){return k(P(N.VARIABLE_FILLET_FAILED,`Variable-radius fillet failed`,e))}}function Yj(e){return pD(e)}function Xj(e){if(!DE(e))return k(F(`NOT_A_SOLID`,`Input shape is not a solid`));let t=Yj(e);try{let n=U().healSolid(e.wrapped);if(!n)return t?O(e):k(P(N.HEAL_NO_EFFECT,`Solid healing had no effect — shape is still invalid`));let r=W(n);return DE(r)?(YE(r),Yj(r)?O(r):(FE(r),k(P(`HEAL_SOLID_INCOMPLETE`,`Healed result is still invalid after ShapeFix_Solid`)))):(FE(r),k(P(`HEAL_RESULT_NOT_SOLID`,`Healed result is not a solid`)))}catch(e){return k(P(`HEAL_SOLID_FAILED`,`Solid healing failed`,e))}}function Zj(e){if(!TE(e))return k(F(`NOT_A_FACE`,`Input shape is not a face`));try{let t=W(U().healFace(e.wrapped));return TE(t)?O(t):(FE(t),k(P(`HEAL_RESULT_NOT_FACE`,`Healed result is not a face`)))}catch(e){return k(P(`HEAL_FACE_FAILED`,`Face healing failed`,e))}}function Qj(e,t){if(!wE(e))return k(F(`NOT_A_WIRE`,`Input shape is not a wire`));try{let n=W(U().healWire(e.wrapped,t?.wrapped));return wE(n)?O(n):(FE(n),k(P(`HEAL_RESULT_NOT_WIRE`,`Healed result is not a wire`)))}catch(e){return k(P(`HEAL_WIRE_FAILED`,`Wire healing failed`,e))}}function $j(e){return DE(e)?Xj(e):TE(e)?Zj(e):wE(e)?Qj(e):O(e)}function eM(e,t){let n=t?.fixWires!==!1,r=t?.fixFaces!==!1,i=t?.fixSolids!==!1,a=t?.fixSelfIntersection===!0,o=t?.sewTolerance,s=[],c=[];if(Yj(e))return O({shape:e,report:{isValid:!0,alreadyValid:!0,wiresHealed:0,facesHealed:0,solidHealed:!1,steps:[`Shape already valid`],diagnostics:[{name:`validation`,attempted:!0,succeeded:!0}]}});s.push(`Shape invalid — applying shape-level healing`);let l=QE(e).length,u=ZE(e).length,d=e,f=!1,p=t=>{let n=d;d=t,n!==e&&n.wrapped!==t.wrapped&&FE(n)};if(o!==void 0)try{p(W(U().sew([d.wrapped],o))),s.push(`Applied sewing with tolerance ${o}`),c.push({name:`sew`,attempted:!0,succeeded:!0,detail:`tolerance=${o}`})}catch(e){let t=e instanceof Error?e.message:String(e);s.push(`Sewing failed: ${t}`),c.push({name:`sew`,attempted:!0,succeeded:!1,detail:t})}if(a&&n){let e=QE(d),t=0;for(let n of e)try{U().fixSelfIntersection(n.wrapped),t++}catch{}s.push(`Self-intersection fix: ${t}/${e.length} wires`),c.push({name:`fixSelfIntersection`,attempted:!0,succeeded:t>0,detail:`${t}/${e.length} wires fixed`})}if(DE(d)&&i||TE(d)&&r||wE(d)&&n){let t=$j(d);za(t)?(p(t.value),DE(e)?(f=!0,s.push(`Applied ShapeFix_Solid`),c.push({name:`healSolid`,attempted:!0,succeeded:!0})):TE(e)?(s.push(`Applied ShapeFix_Face`),c.push({name:`healFace`,attempted:!0,succeeded:!0})):(s.push(`Applied ShapeFix_Wire`),c.push({name:`healWire`,attempted:!0,succeeded:!0}))):(s.push(`Shape-level healing failed`),c.push({name:`healShape`,attempted:!0,succeeded:!1}))}else c.push({name:`healShape`,attempted:!1,succeeded:!1,detail:`skipped by options`});let m=QE(d).length,h=ZE(d).length,g=Math.abs(m-l),_=Math.abs(h-u);g>0&&s.push(`Wire count changed by ${g}`),_>0&&s.push(`Face count changed by ${_}`);let v=Yj(d);return s.push(v?`Final validation: valid`:`Final validation: still invalid`),c.push({name:`finalValidation`,attempted:!0,succeeded:v}),O({shape:d,report:{isValid:v,alreadyValid:!1,wiresHealed:g,facesHealed:_,solidHealed:f,steps:s,diagnostics:c}})}function tM(e){try{return O(W(U().fixShape(e.wrapped)))}catch(e){return k(P(N.FIX_SHAPE_FAILED,`ShapeFix_Shape failed`,e))}}function nM(e){try{let t=W(U().solidFromShell(e.wrapped));return DE(t)?Yj(t)?O(t):(FE(t),k(P(N.SOLID_FROM_SHELL_FAILED,`solidFromShell produced an invalid solid`))):(FE(t),k(P(N.SOLID_FROM_SHELL_FAILED,`solidFromShell did not produce a solid`)))}catch(e){return k(P(N.SOLID_FROM_SHELL_FAILED,`Failed to create solid from shell`,e))}}function rM(e){try{let t=W(U().fixSelfIntersection(e.wrapped));return wE(t)?O(t):(FE(t),k(P(N.FIX_SELF_INTERSECTION_FAILED,`Result is not a wire`)))}catch(e){return k(P(N.FIX_SELF_INTERSECTION_FAILED,`Failed to fix wire self-intersection`,e))}}function iM(e,{profile:t,endFactor:n=1}){return e<1e-10?k(F(`INVALID_EXTRUSION_LENGTH`,`Extrusion length too small (< 1e-10)`)):t!==`s-curve`&&t!==`linear`?k(F(`UNSUPPORTED_PROFILE`,`Unsupported extrusion profile: ${String(t)}`)):O(U().buildExtrusionLaw(t,e,n).Trim(0,e,1e-6))}function aM(e,t){let n=U(),r=n.makeLineEdge([...e],[...t]),i=n.makeWire([r]);return n.dispose(r),W(i)}function oM(e,t,n,r,i,a=!1){return W(U().makeHelixWire(e,t,n,[...r],[...i],a))}function sM(e){let t=W(e.shape),n=W(e.firstShape),r=W(e.lastShape),i=()=>{FE(t),FE(n),FE(r)};return kE(t)?wE(n)?wE(r)?O([t,n,r]):(i(),k(ho(`SWEEP_END_NOT_WIRE`,`Sweep did not produce an end Wire`))):(i(),k(ho(`SWEEP_START_NOT_WIRE`,`Sweep did not produce a start Wire`))):(i(),k(ho(`SWEEP_NOT_3D`,`Sweep did not produce a 3D shape`)))}function cM(e,t,n={},r=!1){if(n.mode===`simple`&&!r){let n=W(U().simplePipe(e.wrapped,t.wrapped));return kE(n)?O(n):(FE(n),k(ho(`SWEEP_NOT_3D`,`Simple pipe did not produce a 3D shape`)))}let{frenet:i=!1,auxiliarySpine:a,law:o=null,transitionMode:s=`right`,withContact:c,support:l,forceProfileSpineOthogonality:u,tolerance:d,boundTolerance:f,angularTolerance:p,maxDegree:m,maxSegments:h}=n,g=U(),_=s===`round`?!0:!!u,v=g.sweepPipeShell(e.wrapped,t.wrapped,{transitionMode:s,contact:!!c,correction:_,frenet:i,shellMode:r,...a?.wrapped?{auxiliary:a.wrapped}:{},...o===null?{}:{law:o},...l===null?{}:{support:l},tolerance:d,boundTolerance:f,angularTolerance:p,maxDegree:m,maxSegments:h});if(r&&typeof v==`object`&&`firstShape`in v)return sM(v);let y=W(v);return kE(y)?O(y):(FE(y),k(ho(`SWEEP_NOT_3D`,`Sweep did not produce a 3D shape`)))}function lM(e,t,n,r){return cM(e,aM(t,SD(t,n)),{support:r})}function uM(e,t,n,r,i=!1){try{var a=OT();let o=OD(n);if(o<1e-10)return k(F(`ZERO_LENGTH_EXTRUSION`,`Extrusion vector cannot have zero length`));let s=SD(t,n),c=a.u(aM(t,s)),l=null;if(r){let e=iM(o,r);if(A(e))return e;l=e.value}return cM(e,c,{law:l},i)}catch(e){a.e=e}finally{a.d()}}function dM(e,t,n,r,i,a=!1){try{var o=OT();if(Math.abs(t)<1e-10)return k(F(`ZERO_TWIST_ANGLE`,`Twist angle cannot be zero`));let s=OD(r);if(s<1e-10)return k(F(`ZERO_LENGTH_EXTRUSION`,`Extrusion vector cannot have zero length`));let c=SD(n,r),l=o.u(aM(n,c)),u=t<0,d=360/Math.abs(t)*s,f=o.u(oM(d,s,1,n,r,u)),p=null;if(i){let e=iM(s,i);if(A(e))return e;p=e.value}return cM(e,l,{auxiliarySpine:f,law:p},a)}catch(e){o.e=e}finally{o.d()}}function fM(e){let t=e.map(e=>e.location);for(let e=0;e<t.length;e++){let n=t[e];if(n!==void 0&&(n<0||n>1))return F(N.MULTI_SWEEP_FAILED,`Section ${e} location ${n} is out of range [0, 1]`)}let n=t.filter(e=>e!==void 0);for(let e=1;e<n.length;e++)if((n[e]??0)<=(n[e-1]??0))return F(N.MULTI_SWEEP_FAILED,`Section locations must be strictly increasing`)}function pM(e,t,n){let[r,i]=n.curveParameters(t.wrapped),a=i-r,o=Array(e.length);for(let t=0;t<e.length;t++){let n=e[t]?.location;o[t]=n===void 0?NaN:r+n*a}let s=-1,c=r;for(let t=0;t<=e.length;t++){let n=t===e.length;if(!n&&!Number.isNaN(o[t]??NaN)||n){let e=n?i:o[t]??i,a=t-s-1;for(let t=1;t<=a;t++)o[s+t]=c+t/(a+1)*(e-c);n||(s=t,c=o[t]??r)}}for(let e=1;e<o.length;e++)if((o[e]??0)<=(o[e-1]??0))return k(F(N.MULTI_SWEEP_FAILED,`Computed section parameters are not strictly increasing at index ${e} (${o[e-1]?.toFixed(4)} >= ${o[e]?.toFixed(4)})`));return O(o)}function mM(e,t,n){if(e.length<2)return k(F(N.MULTI_SWEEP_INSUFFICIENT_SECTIONS,`Multi-section sweep requires at least 2 sections, got ${e.length}`));let{solid:r=!0,ruled:i=!1,tolerance:a=1e-6}=n??{},o=fM(e);if(o)return k(o);try{let n=U(),o=pM(e,t,n);if(A(o))return o;let s=o.value,c=[],l=[];try{for(let r=0;r<e.length;r++){let i=s[r],a=e[r];if(i===void 0||a===void 0)continue;let o=n.positionOnCurve(a.wire.wrapped,t.wrapped,i);c.push(o),l.push(n.downcast(o,`wire`))}let o=W(n.loftAdvanced(l,{solid:r,ruled:i,tolerance:a}));return kE(o)?O(o):(FE(o),k(ho(`MULTI_SWEEP_NOT_3D`,`Multi-section sweep did not produce a 3D shape`)))}finally{for(let e of l)n.dispose(e);for(let e of c)n.dispose(e)}}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.MULTI_SWEEP_FAILED,`Multi-section sweep failed: ${t}`,e,void 0,`Common causes: profile too large for path curvature, self-intersecting result, or discontinuous path. Try simplifying the profile or path.`))}}function hM(e,t,n,r={}){let{transition:i=`transformed`,solid:a=!0,tolerance:o}=r;try{let r=U(),s=!a,c=n.length>0?n[0]?.wrapped:void 0,l=r.sweepPipeShell(e.wrapped,t.wrapped,{transitionMode:i,...c?{auxiliary:c}:{},shellMode:s,...o===void 0?{}:{tolerance:o,boundTolerance:o}}),u=W(typeof l==`object`&&`shape`in l?l.shape:l);return kE(u)?O(u):(FE(u),k(ho(`GUIDED_SWEEP_NOT_3D`,`Guided sweep did not produce a 3D shape`)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.GUIDED_SWEEP_FAILED,`Guided sweep failed: ${t}`,e,void 0,`Common causes: profile too large for path curvature, self-intersecting result, or discontinuous path. Try simplifying the profile or path.`))}}function gM(e,t){if(U().isNull(e.wrapped))return k(F(N.NULL_SHAPE_INPUT,`extrude: face is a null shape`));if(OD(t)<1e-10)return k(F(`EXTRUDE_ZERO_VECTOR`,`extrude: extrusion vector has zero length`));try{let n=U(),r=OD(t),i=jD(t),a=n.extrude(e.wrapped,[...i],r),o=yE(n.downcast(a,`solid`));return NE(a,o),O(o)}catch(e){return k(P(`EXTRUDE_FAILED`,`Extrusion operation failed`,e,{operation:`extrude`,vectorLength:OD(t)}))}}function _M(e,t=[0,0,0],n=[0,0,1],r=2*Math.PI){if(U().isNull(e.wrapped))return k(F(N.NULL_SHAPE_INPUT,`revolve: face is a null shape`));try{let i=W(U().revolveVec(e.wrapped,[...t],[...n],r));return kE(i)?O(i):(FE(i),k(ho(`REVOLUTION_NOT_3D`,`Revolution did not produce a 3D shape`)))}catch(e){return k(P(`REVOLVE_FAILED`,`Revolution operation failed`,e,{operation:`revolve`,angle:r}))}}function vM(e){if(e.length===0)return O([]);let t=U(),n=[];for(let t=0;t<e.length;t++){let r=e[t];if(!r)continue;let i=typeof r.height==`number`?[0,0,r.height]:r.height,a=OD(i);if(a<1e-10)return k(F(`EXTRUDE_ALL_ZERO_VECTOR`,`extrudeAll: entry ${t} has zero-length extrusion vector`));let o=[...jD(i)];n.push({face:r.face.wrapped,direction:o,length:a})}try{return O((t.extrudeBatch?.(n)??n.map(e=>t.extrude(e.face,e.direction,e.length))).map(e=>{let n=yE(t.downcast(e,`solid`));return NE(e,n),n}))}catch(e){return k(P(`EXTRUDE_ALL_FAILED`,`Batch extrusion operation failed`,e))}}function yM(e,{ruled:t=!0,startPoint:n,endPoint:r,tolerance:i=1e-6}={},a=!1){if(e.length===0&&!n&&!r)return k(F(`LOFT_EMPTY`,`Loft requires at least one wire or start/end point`));let o=U(),s=n?o.makeVertex(...vD(n)):void 0,c=r?o.makeVertex(...vD(r)):void 0;try{let n=W(o.loftAdvanced(e.map(e=>e.wrapped),{solid:!a,ruled:t,tolerance:i,...s?{startVertex:s}:{},...c?{endVertex:c}:{}}));return kE(n)?O(n):(FE(n),k(ho(`LOFT_NOT_3D`,`Loft did not produce a 3D shape`)))}catch(e){return k(P(`LOFT_FAILED`,`Loft operation failed`,e,void 0,`Common causes: wire profiles with different edge counts, self-intersecting result, or profiles too far apart. Ensure profiles are compatible and ordered.`))}}function bM(e){if(e.length===0)return O([]);let t=U(),n=[],r=e.map(e=>{let r=e.startPoint?t.makeVertex(...vD(e.startPoint)):void 0,i=e.endPoint?t.makeVertex(...vD(e.endPoint)):void 0;return r&&n.push(r),i&&n.push(i),{wires:e.wires.map(e=>e.wrapped),solid:!0,ruled:e.ruled??!0,tolerance:e.tolerance??1e-6,startVertex:r,endVertex:i}});try{let e=t.loftBatch?.(r)??r.map(e=>t.loftAdvanced(e.wires,{solid:e.solid,ruled:e.ruled,tolerance:e.tolerance,startVertex:e.startVertex,endVertex:e.endVertex})),n=[];for(let t of e){let e=W(t);if(!kE(e))return FE(e),k(ho(`LOFT_ALL_NOT_3D`,`Batch loft entry did not produce a 3D shape`));n.push(e)}return O(n)}catch(e){return k(P(`LOFT_ALL_FAILED`,`Batch loft operation failed`,e))}finally{for(let e of n)t.dispose(e)}}var xM=new WeakMap;function SM(e,t){return xM.get(e)?.get(t)}function CM(e,t,n){let r=xM.get(e);r||(r=new Map,xM.set(e,r)),r.set(t,n)}function wM(e){return U().isNull(e.wrapped)}function TM(e){return k(F(N.NULL_SHAPE_INPUT,`${e}: shape is a null shape`))}function EM(e){let t=SM(e.wrapped,`volume`);if(t)return O(t);if(wM(e))return TM(`measureVolumeProps`);let n=U(),r=n.shapeType(e.wrapped);if(r!==`solid`&&r!==`compsolid`&&r!==`compound`){let t={mass:0,volume:0,centerOfMass:[0,0,0]};return CM(e.wrapped,`volume`,t),O(t)}let i=n.volume(e.wrapped),a=VE(()=>n.centerOfMass(e.wrapped),N.CENTER_OF_MASS_FAILED,`Failed to compute center of mass`);if(!a.ok)return a;let o={mass:i,volume:i,centerOfMass:a.value};return CM(e.wrapped,`volume`,o),O(o)}function DM(e){let t=SM(e.wrapped,`surface`);if(t)return O(t);if(wM(e))return TM(`measureSurfaceProps`);let n=U(),r=n.area(e.wrapped),i=VE(()=>n.centerOfMass(e.wrapped),N.CENTER_OF_MASS_FAILED,`Failed to compute center of mass`);if(!i.ok)return i;let a={mass:r,area:r,centerOfMass:i.value};return CM(e.wrapped,`surface`,a),O(a)}function OM(e){let t=SM(e.wrapped,`linear`);if(t)return O(t);if(wM(e))return TM(`measureLinearProps`);let n=U(),r=n.length(e.wrapped),i={mass:r,length:r,centerOfMass:n.linearCenterOfMass(e.wrapped)};return CM(e.wrapped,`linear`,i),O(i)}function kM(e){let t=EM(e);return t.ok?O(t.value.mass):t}function AM(e){let t=DM(e);return t.ok?O(t.value.mass):t}function jM(e){let t=OM(e);return t.ok?O(t.value.mass):t}function MM(e,t){return wM(e)||wM(t)?TM(`measureDistance`):O(U().distance(e.wrapped,t.wrapped).value)}function NM(e,t){if(wM(e)||wM(t))return TM(`measureDistanceProps`);let n=U().distance(e.wrapped,t.wrapped);return O({distance:n.value,point1:n.point1,point2:n.point2})}function PM(e){if(wM(e))return TM(`createDistanceQuery`);let t=U().createDistanceQuery(e.wrapped);return O({distanceTo(e){return wM(e)?TM(`createDistanceQuery.distanceTo`):O(t.distanceTo(e.wrapped).value)},dispose(){t.dispose()}})}function FM(e,t,n){if(wM(e))return TM(`measureCurvatureAt`);let r=U().surfaceCurvature(e.wrapped,t,n);return O({mean:r.mean,gaussian:r.gaussian,maxCurvature:r.max,minCurvature:r.min,maxDirection:r.maxDirection,minDirection:r.minDirection})}function IM(e){if(wM(e))return TM(`measureCurvatureAtMid`);let t=cO(e),n=(t.uMin+t.uMax)/2,r=(t.vMin+t.vMax)/2,i=U().surfaceCurvature(e.wrapped,n,r);return O({mean:i.mean,gaussian:i.gaussian,maxCurvature:i.max,minCurvature:i.min,maxDirection:i.maxDirection,minDirection:i.minDirection})}function LM(e,t){return e.map(e=>IE(e,t))}function RM(e,t){let n=U(),r=n.iterShapes(e,t),i=[],a=new Map;for(let e of r){let r=n.hashCode(e,G),o=a.get(r);if(o?.some(t=>n.isSame(t,e))){n.dispose(e);continue}let s=LE(e,t);i.push(s),o?o.push(s.wrapped):a.set(r,[s.wrapped])}return i}function zM(e){let t=U(),n=new Map;for(let r of e){let e=t.hashCode(r.wrapped,G),i=n.get(e);i?i.push(r):n.set(e,[r])}return n}function BM(e,t,n){let r=U();return e.get(n)?.find(e=>r.isSame(e.wrapped,t))}function VM(e){let t=qE(e);if(t.edgeToFaces)return t.edgeToFaces;let n=U(),r=ZE(e),i=zM(XE(e)),a=new Map;for(let e of r)for(let t of n.iterShapes(e.wrapped,`edge`)){let r=n.hashCode(t,G),o=BM(i,t,r);if(n.dispose(t),!o)continue;let s=a.get(r);s||(s=[],a.set(r,s)),s.some(t=>n.isSame(t.edge,o.wrapped)&&n.isSame(t.face,e.wrapped))||s.push({edge:o.wrapped,face:e.wrapped})}return t.edgeToFaces=a,a}function HM(e){let t=qE(e);if(t.vertexToFaces)return t.vertexToFaces;let n=U(),r=ZE(e),i=zM($E(e)),a=new Map;for(let e of r)for(let t of n.iterShapes(e.wrapped,`vertex`)){let r=n.hashCode(t,G),o=BM(i,t,r);if(n.dispose(t),!o)continue;let s=a.get(r);s||(s=[],a.set(r,s)),s.some(t=>n.isSame(t.vertex,o.wrapped)&&n.isSame(t.face,e.wrapped))||s.push({vertex:o.wrapped,face:e.wrapped})}return t.vertexToFaces=a,a}function UM(e,t){let n=U(),r=VM(e),i=n.hashCode(t.wrapped,G),a=r.get(i)??[],o=[],s=new Map;for(let e of a){if(!n.isSame(e.edge,t.wrapped))continue;let r=n.hashCode(e.face,G),i=s.get(r);i?i.some(t=>n.isSame(t,e.face))||(i.push(e.face),o.push(e.face)):(s.set(r,[e.face]),o.push(e.face))}return LM(o,`face`)}function WM(e,t){let n=U(),r=HM(e),i=n.hashCode(t.wrapped,G),a=r.get(i)??[],o=[],s=new Map;for(let e of a){if(!n.isSame(e.vertex,t.wrapped))continue;let r=n.hashCode(e.face,G),i=s.get(r);i?i.some(t=>n.isSame(t,e.face))||(i.push(e.face),o.push(e.face)):(s.set(r,[e.face]),o.push(e.face))}return LM(o,`face`)}function GM(e){return RM(e.wrapped,`edge`)}function KM(e){return RM(e.wrapped,`vertex`)}function qM(e){return RM(e.wrapped,`wire`)}function JM(e){return RM(e.wrapped,`vertex`)}function YM(e,t){let n=U(),r=VM(e),i=RM(t.wrapped,`edge`),a=[],o=new Map;for(let e of i){let i=n.hashCode(e.wrapped,G),s=r.get(i)??[];for(let e of s){if(n.isSame(e.face,t.wrapped))continue;let r=n.hashCode(e.face,G),i=o.get(r);i?i.some(t=>n.isSame(t,e.face))||(i.push(e.face),a.push(e.face)):(o.set(r,[e.face]),a.push(e.face))}}for(let e of i)e[Symbol.dispose]();return LM(a,`face`)}function XM(e,t){let n=U(),r=n.iterShapes(e.wrapped,`edge`),i=n.iterShapes(t.wrapped,`edge`),a=new Map;for(let e of i){let t=n.hashCode(e,G),r=a.get(t);r||(r=[],a.set(t,r)),r.push(e)}let o=[];for(let e of r)a.get(n.hashCode(e,2147483647))?.some(t=>n.isSame(e,t))?o.push(LE(e,`edge`)):n.dispose(e);for(let e of i)n.dispose(e);return o}function ZM(e,t){let n=0,r=aO(t);if(e.surfaceType!==void 0)if(r===e.surfaceType)n+=1;else return-1/0;if(e.normal!==void 0){let r=fO(t),i=e.normal[0]*r[0]+e.normal[1]*r[1]+e.normal[2]*r[2];if(i<.707)return-1/0;n+=i}if(e.centroid!==void 0){let r=pO(t),i=e.centroid[0]-r[0],a=e.centroid[1]-r[1],o=e.centroid[2]-r[2],s=i*i+a*a+o*o;if(s>100)return-1/0;n-=s/100}if(e.area!==void 0&&e.area>0){let r=AM(t);if(r.ok&&r.value>0){let t=Math.abs(Math.log(e.area/r.value));t>1&&(n-=t)}}return n}function QM(e){let t=aO(e),n=fO(e),r=pO(e),i=AM(e);return{entityType:`face`,surfaceType:t,normal:n,centroid:r,area:i.ok?i.value:void 0}}var $M=.9;function eN(e){if(e[2]>$M)return`box:top`;if(e[2]<-.9)return`box:bottom`;if(e[1]>$M)return`box:back`;if(e[1]<-.9)return`box:front`;if(e[0]>$M)return`box:right`;if(e[0]<-.9)return`box:left`}function tN(e,t){if(aO(t)!==`PLANE`)return;let n=fO(t)[2];if(n>$M)return`${e}:top`;if(n<-.9)return`${e}:bottom`}function nN(e){return aO(e)===`CYLINDRE`?`cylinder:lateral`:tN(`cylinder`,e)}function rN(e){return aO(e)===`CONE`?`cone:lateral`:tN(`cone`,e)}function iN(e){return aO(e)===`SPHERE`?`sphere:surface`:void 0}var aN={box:e=>eN(fO(e)),cylinder:nN,cone:rN,sphere:iN};function oN(e,t){let n=new Map,r=aN[t],i=U(),a=0;for(let o of i.iterShapes(e.wrapped,`face`)){let e=IE(o,`face`);try{let i=r?.(e),o=i!==void 0&&!n.has(i)?i:`${t}:face_${a}`;n.set(o,[mk(e)]),a++}finally{PE(e,o)}}return n}function sN(e,t,n){return{origin:e,role:t,hint:QM(n)}}function cN(e,t){let n=[];for(let r of e){if(t.deleted.has(r))continue;let e=t.modified.get(r),i=e&&e.length>0?e:[r];for(let e of i)n.includes(e)||n.push(e)}return n}function lN(e,t,n){let r=e.get(t);if(!r)return e;let i=new Map;for(let[e,t]of r){let r=cN(t,n);r.length>0&&i.set(e,r)}let a=new Map;for(let[n,r]of e)a.set(n,n===t?i:r);return a}var uN=.1,dN=.5;function fN(e,t,n){let r=-1/0,i,a=-1/0,o=[];for(let s of t){let t=n(e,s);t>dN&&o.push([s,t]),t>r?(a=r,r=t,i=s):t>a&&(a=t)}return i!==void 0&&r>dN?r-a<uN&&o.length>1?{kind:`ambiguous`,candidates:o.filter(([,e])=>e>=r-uN).map(([e])=>e)}:{kind:`match`,face:i}:{kind:`none`}}function pN(e,t,n,r){let i=ZE(n),a=r??ZM,o=t.get(e.origin)?.get(e.role);if(o!==void 0&&o.length>0){let t=i.filter(e=>o.includes(mk(e)));if(t.length===1){let[e]=t;if(e!==void 0)return{face:e,confidence:`exact`}}else if(t.length===0)return{ref:e,reason:`deleted`};else{let n=fN(e.hint,t,a);if(n.kind===`match`)return{face:n.face,confidence:`geometric-fallback`};if(n.kind===`ambiguous`)return{ref:e,reason:`ambiguous`,candidates:n.candidates}}}let s=fN(e.hint,i,a);return s.kind===`match`?{face:s.face,confidence:`geometric-fallback`}:s.kind===`ambiguous`?{ref:e,reason:`ambiguous`,candidates:s.candidates}:{ref:e,reason:`not-found`}}function mN(e,t){let n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return Math.sqrt(n*n+r*r+i*i)}function hN(e){if(e.length===0)return;let t=0,n=0,r=0;for(let i of e){let e=hD(i);t+=e[0],n+=e[1],r+=e[2]}let i=e.length;return[t/i,n/i,r/i]}function gN(e,t,n){let r=n.get(t);if(!r)return;let i=mk(e);for(let[e,t]of r)if(t.includes(i))return e}function _N(e,t,n,r){let i=r.get(t)?.get(n);return i===void 0||i.length===0?[]:ZE(e).filter(e=>i.includes(mk(e)))}function vN(e){let t=jM(e);return{entityType:`edge`,length:t.ok?t.value:void 0,midpoint:hN(JM(e))}}function yN(e){let t=new Set,n=[];for(let r of e){let e=mk(r);t.has(e)||(t.add(e),n.push(r))}return n}var bN=1e-6;function xN(e,t){if(t.length===void 0&&t.midpoint===void 0)return;let n,r=1/0,i=1/0;for(let a of e){let e=0;if(t.length!==void 0){let n=jM(a);n.ok&&(e+=Math.abs(n.value-t.length))}if(t.midpoint!==void 0){let n=hN(JM(a));n!==void 0&&(e+=mN(t.midpoint,n))}e<r?(i=r,r=e,n=a):e<i&&(i=e)}if(!(n===void 0||i-r<bN))return n}function SN(e,t,n,r){let[i,a]=UM(n,t);if(i===void 0||a===void 0)return;let o=gN(i,e,r),s=gN(a,e,r);if(!(o===void 0||s===void 0))return{origin:e,faceRoles:[o,s],hint:vN(t)}}function CN(e,t,n){let[r,i]=e.faceRoles,a=_N(n,e.origin,r,t),o=_N(n,e.origin,i,t);if(a.length===0||o.length===0)return{ref:e,reason:`not-found`};let s=[];for(let e of a)for(let t of o)s.push(...XM(e,t));let c=yN(s);if(c.length===1){let[e]=c;if(e!==void 0)return{edge:e,confidence:`exact`}}if(c.length>1){let t=xN(c,e.hint);return t===void 0?{ref:e,reason:`ambiguous`,candidates:c}:{edge:t,confidence:`geometric-fallback`}}return{ref:e,reason:`not-found`}}var wN=3,TN=1e-6;function EN(e,t){let n=new Set;for(let r of e)for(let e of KM(r)){let r=mk(e);n.add(r),t.has(r)||t.set(r,e)}return n}function DN(e,t){let n=new Set;for(let r of e)t.has(r)&&n.add(r);return n}function ON(e){let t=new Map,n;for(let r of e){let e=EN(r,t);n=n===void 0?e:DN(n,e)}if(n===void 0)return[];let r=[];for(let e of n){let n=t.get(e);n!==void 0&&r.push(n)}return r}function kN(e,t){if(t.position===void 0)return;let n,r=1/0,i=1/0;for(let a of e){let e=mN(hD(a),t.position);e<r?(i=r,r=e,n=a):e<i&&(i=e)}if(!(n===void 0||i-r<TN))return n}function AN(e,t,n,r){let i=WM(n,t);if(i.length<wN)return;let a=new Set;for(let t of i){let n=gN(t,e,r);n!==void 0&&a.add(n)}if(!(a.size<wN))return{origin:e,faceRoles:[...a].sort(),hint:{entityType:`vertex`,position:hD(t)}}}function jN(e,t,n){let r=[];for(let i of e.faceRoles){let a=_N(n,e.origin,i,t);if(a.length===0)return{ref:e,reason:`not-found`};r.push(a)}let i=ON(r);if(i.length===1){let[e]=i;if(e!==void 0)return{vertex:e,confidence:`exact`}}if(i.length>1){let t=kN(i,e.hint);return t===void 0?{ref:e,reason:`ambiguous`,candidates:i}:{vertex:t,confidence:`geometric-fallback`}}return{ref:e,reason:`not-found`}}var MN=.99,NN=.1,PN=1e-6;function FN(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function IN(e,t){return ZE(e).filter(e=>FN(fO(e),t)>MN)}function LN(e,t,n){let r=new Set([...t,...n].map(mk)),i=new Set;for(let n of t)for(let t of YM(e,n))i.add(mk(t));let a=[],o=new Set;for(let t of n)for(let n of YM(e,t)){let e=mk(n);r.has(e)||o.has(e)||!i.has(e)||(o.add(e),a.push(n))}return a}function RN(e,t){let n,r=1/0,i=1/0;for(let a of e){let e=mN(pO(a),t);e<r?(i=r,r=e,n=a):e<i&&(i=e)}if(!(n===void 0||i-r<PN))return n}function zN(e,t,n,r,i){let[a,o]=UM(r,n);if(a===void 0||o===void 0)return;let s=gN(a,e,i),c=gN(o,e,i);if(!(s===void 0||c===void 0))return{origin:e,op:t,betweenRoles:[s,c],hint:{entityType:`derived-face`,normalA:fO(a),normalB:fO(o),edgeMidpoint:hN(JM(n))}}}function BN(e,t,n){let r=_N(n,e.origin,e.betweenRoles[0],t);r.length===0&&(r=IN(n,e.hint.normalA));let i=_N(n,e.origin,e.betweenRoles[1],t);if(i.length===0&&(i=IN(n,e.hint.normalB)),r.length===0||i.length===0)return{ref:e,reason:`not-found`};let a=LN(n,r,i).filter(t=>FN(fO(t),e.hint.normalA)>NN&&FN(fO(t),e.hint.normalB)>NN);if(a.length===1){let[e]=a;if(e!==void 0)return{face:e,confidence:`geometric-fallback`}}if(a.length>1){let t=e.hint.edgeMidpoint&&RN(a,e.hint.edgeMidpoint);return t?{face:t,confidence:`geometric-fallback`}:{ref:e,reason:`ambiguous`,candidates:a}}return{ref:e,reason:`not-found`}}function VN(e){return typeof e==`object`&&!!e&&`origin`in e}function HN(e){return VN(e)&&`betweenRoles`in e&&`op`in e}function UN(e){return VN(e)&&Array.isArray(e.faceRoles)&&e.faceRoles.length===2}function WN(e){return VN(e)&&Array.isArray(e.faceRoles)&&e.faceRoles.length>=3}function GN(e){return VN(e)&&typeof e.role==`string`}function KN(e){return GN(e)||UN(e)||WN(e)||HN(e)}function qN(e,t){return t===void 0?{ok:!1,reason:e}:{ok:!1,reason:e,candidates:t}}function JN(e,t,n){if(HN(e)){let r=BN(e,t,n);return`face`in r?{ok:!0,entity:r.face}:qN(r.reason,r.candidates)}if(UN(e)){let r=CN(e,t,n);return`edge`in r?{ok:!0,entity:r.edge}:qN(r.reason,r.candidates)}if(WN(e)){let r=jN(e,t,n);return`vertex`in r?{ok:!0,entity:r.vertex}:qN(r.reason,r.candidates)}let r=pN(e,t,n);return`face`in r?{ok:!0,entity:r.face}:qN(r.reason,r.candidates)}function YN(e,t,n){let r=n.get(e.origin);if(r!==void 0)return r;let i=new Map([[e.origin,oN(t,e.origin)]]);return n.set(e.origin,i),i}function XN(e,t){return JN(e,YN(e,t,new Map),t)}function ZN(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t!==Object.prototype&&t!==null?!1:!(`wrapped`in e)}function QN(e,t){let n=new Map,r=e=>{if(KN(e)){let r=JN(e,YN(e,t,n),t);return r.ok?r.entity:e}if(Array.isArray(e))return e.map(r);if(ZN(e)){let t={};for(let[n,i]of Object.entries(e))t[n]=r(i);return t}return e},i={...e};for(let[t,n]of Object.entries(e))i[t]=r(n);return i}function $N(e,t,n,r){let i=yE(U().makeBox(e,t,n)),a=r?.at??(r?.centered?[0,0,0]:void 0);if(a)try{var o=OT();return ek(o.u(i),[a[0]-e/2,a[1]-t/2,a[2]-n/2])}catch(e){o.e=e}finally{o.d()}return i}function eP(e,t,n){let r=n?.at??[0,0,0],i=n?.axis??[0,0,1],a=YA(e,t,r,i);if(n?.centered)try{var o=OT();let e=[-i[0]*t*.5,-i[1]*t*.5,-i[2]*t*.5];return ek(o.u(a),e)}catch(e){o.e=e}finally{o.d()}return a}function tP(e,t){let n=XA(e);if(t?.at)try{var r=OT();return ek(r.u(n),t.at)}catch(e){r.e=e}finally{r.d()}return n}function nP(e,t,n,r){let i=r?.at??[0,0,0],a=r?.axis??[0,0,1],o=ZA(e,t,n,i,a);if(r?.centered)try{var s=OT();let e=[-a[0]*n*.5,-a[1]*n*.5,-a[2]*n*.5];return ek(s.u(o),e)}catch(e){s.e=e}finally{s.d()}return o}function rP(e,t,n){return QA(e,t,n?.at??[0,0,0],n?.axis??[0,0,1])}function iP(e,t,n,r){let i=$A(e,t,n);if(r?.at)try{var a=OT();return ek(a.u(i),r.at)}catch(e){a.e=e}finally{a.d()}return i}function aP(e,t){return uA(e,t)}function oP(e,t){let n=t?.axis??[0,0,1];return dA(e,t?.at??[0,0,0],n)}function sP(e,t,n){let r=n?.axis??[0,0,1];return fA(e,t,n?.at??[0,0,0],r,n?.xDir)}function cP(e,t,n,r){return pA(e,t,n,r?.at??[0,0,0],r?.axis??[0,0,1],r?.lefthand??!1)}function lP(e,t,n){return mA(e,t,n)}function uP(e,t,n,r,i){let a=i?.axis??[0,0,1];return hA(e,t,n*gD,r*gD,i?.at??[0,0,0],a,i?.xDir)}function dP(e,t){return gA(e,t)}function fP(e){return vA(e)}function pP(e,t,n){return yA(e,t,n)}function mP(e){return bA(e)}function hP(e){return Ha(bA(e),e=>tE(e)?O(e):k(F(`WIRE_NOT_CLOSED`,`Assembled wire is not closed: start and end points do not coincide`)))}function gP(e,t){return xA(e,t)}function _P(e){return wA(e)}function vP(e,t){return CA(e,t)}function yP(e){return EA(e)}function bP(e){return ej(e)}function xP(e){return nj(e)}function SP(e){return rj(e)}function CP(e,t,n){return tj(e,t,n)}function wP(e,t){return JA(e,t)}function TP(e,t){return TA(e,t)}function EP(){return`10000000-1000-4000-8000-100000000000`.replace(/[018]/g,e=>(Number(e)^crypto.getRandomValues(new Uint8Array(1))[0]&15>>Number(e)/4).toString(16))}function DP(e=[]){let t=e.map(({shape:e,name:t,color:n,alpha:r})=>{let i=n??`#f00`;i.indexOf(`#`)===0&&(i=i.slice(1)),i.length===3&&(i=i.replace(/([0-9a-f])/gi,`$1$1`));let a=parseInt(i.substring(0,2),16),o=parseInt(i.substring(2,4),16),s=parseInt(i.substring(4,6),16),c=Math.round((r??1)*255);return{shape:e.wrapped,name:t??EP(),color:[a,o,s,c]}});return zT(U().createXCAFDocument(t))}function OP(e=[],{unit:t,modelUnit:n}={}){let r=e=>{let t=e;return t.indexOf(`#`)===0&&(t=t.slice(1)),t.length===3&&(t=t.replace(/([0-9a-f])/gi,`$1$1`)),[parseInt(t.substring(0,2),16),parseInt(t.substring(2,4),16),parseInt(t.substring(4,6),16)]},i=U(),a=e.map(({shape:e,name:t,color:n,alpha:i})=>{let[a,o,s]=r(n??`#f00`);return{shape:e.wrapped,name:t??EP(),color:[a,o,s,Math.round((i??1)*255)]}}),o=i.createXCAFDocument(a);try{let e=i.writeXCAFToSTEP(o,{unit:t,modelUnit:n});return e?O(new Blob([e],{type:`application/STEP`})):k(vo(`STEP_EXPORT_FAILED`,`Failed to write STEP file`))}finally{o.delete()}}function kP(e,t,n,r,i){if(n<1)return k(F(`PATTERN_INVALID_COUNT`,`Pattern count must be at least 1`));if(n===1)return O(e);if(ND(t))return k(F(`PATTERN_ZERO_DIRECTION`,`Pattern direction cannot be zero`));let a=jD(t),o=U().linearPattern(e.wrapped,[...a],r,n).map(e=>W(e));try{return NA(o,{optimisation:`sameFace`,...i,unsafe:!0})}finally{for(let e of o)e[Symbol.dispose]()}}function AP(e,t,n,r=360,i=[0,0,0],a){if(n<1)return k(F(`PATTERN_INVALID_COUNT`,`Pattern count must be at least 1`));if(n===1)return O(e);if(ND(t))return k(F(`PATTERN_ZERO_AXIS`,`Pattern axis cannot be zero`));let o=r/n,s=U().circularPattern(e.wrapped,[...i],[...t],o,n).map(e=>W(e));try{return NA(s,{optimisation:`sameFace`,...a,unsafe:!0})}finally{for(let e of s)e[Symbol.dispose]()}}function jP(e,t,n,r,i,a,o,s){if(r<1||i<1)return k(F(`PATTERN_INVALID_COUNT`,`Grid pattern counts must be at least 1`));if(r===1&&i===1)return O(e);if(ND(t))return k(F(`PATTERN_ZERO_DIRECTION`,`Grid directionX cannot be zero`));if(ND(n))return k(F(`PATTERN_ZERO_DIRECTION`,`Grid directionY cannot be zero`));let c=U(),l=jD(t),u=jD(n);if(typeof c.gridPattern==`function`)return O(W(c.gridPattern(e.wrapped,[...l],[...u],a,o,r,i)));let d=kP(e,t,r,a,s);if(!d.ok)return d;let f=d.value,p=kP(f,n,i,o,s),m=p.ok&&p.value===f;return f!==e&&!m&&f[Symbol.dispose](),p}function MP(e,t={}){return{name:e,children:[],...t.shape===void 0?{}:{shape:t.shape},...t.translate===void 0?{}:{translate:t.translate},...t.rotate===void 0?{}:{rotate:t.rotate},...t.metadata===void 0?{}:{metadata:t.metadata}}}function NP(e,t){return{...e,children:[...e.children,t]}}function PP(e,t){let n=e.children.findIndex(e=>e.name===t);if(n===-1)return e;let r=[...e.children];return r.splice(n,1),{...e,children:r}}function FP(e,t){return{...e,...t.shape===void 0?{}:{shape:t.shape},...t.translate===void 0?{}:{translate:t.translate},...t.rotate===void 0?{}:{rotate:t.rotate},...t.metadata===void 0?{}:{metadata:t.metadata}}}function IP(e,t){if(e.name===t)return e;for(let n of e.children){let e=IP(n,t);if(e)return e}}function LP(e,t,n=0){t(e,n);for(let r of e.children)LP(r,t,n+1)}function RP(e){let t=1;for(let n of e.children)t+=RP(n);return t}function zP(e){let t=[];return LP(e,e=>{e.shape&&t.push(e.shape)}),t}function BP(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function VP(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 HP(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function UP(e){return HP(VP(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function WP(e,t){let[n,r,i,a]=e,o=2*(i*t[2]-a*t[1]),s=2*(a*t[0]-r*t[2]),c=2*(r*t[1]-i*t[0]);return[t[0]+n*o+(i*c-a*s),t[1]+n*s+(a*o-r*c),t[2]+n*c+(r*s-i*o)]}function GP(e,t){let n=t/2,r=Math.sin(n),i=HP(e);return[Math.cos(n),i[0]*r,i[1]*r,i[2]*r]}function KP(e,t){let n=HP(e),r=HP(t),i=BP(n,r);if(i>=.999999999)return[1,0,0,0];if(i<=-.999999999)return GP(UP(n),Math.PI);let a=VP(n,r),o=Math.hypot(1+i,a[0],a[1],a[2])||1;return[(1+i)/o,a[0]/o,a[1]/o,a[2]/o]}function qP(e,t){let[n,r,i,a]=e,[o,s,c,l]=t;return[n*o-r*s-i*c-a*l,n*s+r*o+i*l-a*c,n*c-r*l+i*o+a*s,n*l+r*c-i*s+a*o]}var JP=Math.PI/180;function YP(e,t,n){return Math.min(n,Math.max(t,e))}function XP(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function ZP(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 QP(e){return XP(ZP(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function $P(e,t,n,r,i){let a=n.min??r,o=n.max??i,s=Math.min(a,o),c=Math.max(a,o);return{kind:e,axis:XP(t),min:s,max:c,value:YP(n.value??0,s,c)}}function eF(e,t,n,r,i){let a=i[0]??{kind:`rotation`,axis:[0,0,1],min:0,max:0,value:0};return{type:e,parent:t,child:n,axis:{origin:r.origin,direction:XP(r.direction)},min:a.min,max:a.max,value:a.value,dofs:i}}function tF(e,t,n,r={}){return eF(`revolute`,e,t,n,[$P(`rotation`,n.direction,r,-180,180)])}function nF(e,t,n,r={}){return eF(`prismatic`,e,t,n,[$P(`translation`,n.direction,r,0,100)])}function rF(e,t,n,r={}){return eF(`cylindrical`,e,t,n,[$P(`rotation`,n.direction,r.rotation??{},-180,180),$P(`translation`,n.direction,r.translation??{},0,100)])}function iF(e,t,n,r={}){let i=XP(n.direction),a;if(r.uDirection){let e=r.uDirection,t=e[0]*i[0]+e[1]*i[1]+e[2]*i[2],n=[e[0]-t*i[0],e[1]-t*i[1],e[2]-t*i[2]];a=Math.hypot(n[0],n[1],n[2])<1e-9?QP(i):XP(n)}else a=QP(i);let o=XP(ZP(i,a));return eF(`planar`,e,t,{origin:n.origin,direction:i},[$P(`translation`,a,r.u??{},-100,100),$P(`translation`,o,r.v??{},-100,100),$P(`rotation`,i,r.rotation??{},-180,180)])}function aF(e,t,n,r={}){return eF(`spherical`,e,t,{origin:n,direction:[0,0,1]},[$P(`rotation`,[1,0,0],r.x??{},-180,180),$P(`rotation`,[0,1,0],r.y??{},-180,180),$P(`rotation`,[0,0,1],r.z??{},-180,180)])}function oF(e,t){let n=e.dofs.map((e,n)=>{let r=t[n];return r===void 0?e:{...e,value:YP(r,e.min,e.max)}}),r=n[0];return r?{...e,dofs:n,value:r.value}:{...e,dofs:n}}function sF(e,t){return oF(e,[t])}function cF(e,t,n){if(t.kind===`translation`)return{position:[t.axis[0]*n,t.axis[1]*n,t.axis[2]*n],rotation:[1,0,0,0]};let r=GP(t.axis,n*JP),i=WP(r,e);return{position:[e[0]-i[0],e[1]-i[1],e[2]-i[2]],rotation:r}}function lF(e,t=e.value){let n=Array.isArray(t)?t:void 0,r=n?void 0:t,i=e.axis.origin,a=dF;for(let t=0;t<e.dofs.length;t++){let o=e.dofs[t];if(!o)continue;let s=n?n[t]??o.value:t===0?r??o.value:o.value;a=fF(a,cF(i,o,YP(s,o.min,o.max)))}return a}function uF(e,t){let n=e.joints??[];return{...e,joints:[...n,t]}}var dF={position:[0,0,0],rotation:[1,0,0,0]};function fF(e,t){let n=WP(e.rotation,t.position);return{position:[e.position[0]+n[0],e.position[1]+n[1],e.position[2]+n[2]],rotation:qP(e.rotation,t.rotation)}}function pF(e){let t=[];return LP(e,e=>{e.joints&&t.push(...e.joints)}),t}function mF(e,t={}){let n=[],r=new Set;LP(e,e=>{r.add(e.name),e.joints&&n.push(...e.joints)});let i=new Map;for(let e of n)i.set(e.child,e),r.add(e.parent),r.add(e.child);let a=new Map;for(let e of r)i.has(e)||a.set(e,dF);let o=[...n],s=!0;for(;s&&o.length>0;){s=!1;for(let e=o.length-1;e>=0;e--){let n=o[e];if(!n)continue;let r=a.get(n.parent);if(!r||(o.splice(e,1),s=!0,a.has(n.child)))continue;let i=t[n.child]??n.value,c=n.offset?fF(lF(n,i),n.offset):lF(n,i);a.set(n.child,fF(r,c))}}for(let e of o)a.has(e.child)||a.set(e.child,dF);return a}function hF(e){return pF(e).reduce((e,t)=>e+t.dofs.length,0)}var gF={position:[0,0,0],rotation:[1,0,0,0]};function _F(e,t){let n=WP(e.rotation,t);return[n[0]+e.position[0],n[1]+e.position[1],n[2]+e.position[2]]}function vF(e){return[e[0],-e[1],-e[2],-e[3]]}function yF(e,t){let[n,r,i,a]=qP(t,vF(e)),o=Math.hypot(n,r,i,a)||1;n/=o,r/=o,i/=o,a/=o,n<0&&(n=-n,r=-r,i=-i,a=-a);let s=Math.hypot(r,i,a);if(s<1e-12)return[0,0,0];let c=2*Math.atan2(s,n)/s;return[r*c,i*c,a*c]}function bF(e,t){let n=[];LP(e,e=>{e.joints&&n.push(...e.joints)});let r=new Map;for(let e of n)r.set(e.child,e);let i=[],a=new Set,o=t;for(;o&&r.has(o)&&!a.has(o);){a.add(o);let e=r.get(o);if(!e)break;i.push(e),o=e.parent}return i.reverse()}function xF(e,t){return e[t]??0}function SF(e,t,n){let r=n+1,i=new Float64Array(n*r);for(let a=0;a<n;a++){for(let t=0;t<n;t++)i[a*r+t]=xF(e,a*n+t);i[a*r+n]=xF(t,a)}for(let e=0;e<n;e++){let t=e;for(let a=e+1;a<n;a++)Math.abs(xF(i,a*r+e))>Math.abs(xF(i,t*r+e))&&(t=a);if(Math.abs(xF(i,t*r+e))<1e-12)return null;if(t!==e)for(let n=e;n<r;n++){let a=xF(i,e*r+n);i[e*r+n]=xF(i,t*r+n),i[t*r+n]=a}let a=xF(i,e*r+e);for(let t=e;t<r;t++)i[e*r+t]=xF(i,e*r+t)/a;for(let t=0;t<n;t++){if(t===e)continue;let n=xF(i,t*r+e);if(n!==0)for(let a=e;a<r;a++)i[t*r+a]=xF(i,t*r+a)-n*xF(i,e*r+a)}}let a=new Float64Array(n);for(let e=0;e<n;e++)a[e]=xF(i,e*r+n);return a}function CF(e,t){let n=[],r=[],i=[],a=[];for(let o of e){let e=t?.[o.child];n.push({child:o.child,count:o.dofs.length}),o.dofs.forEach((t,n)=>{let o=(Array.isArray(e)?e[n]:n===0?e:void 0)??t.value;r.push(Math.min(t.max,Math.max(t.min,o))),i.push(t.min),a.push(t.max)})}return{segments:n,q:Float64Array.from(r),lo:Float64Array.from(i),hi:Float64Array.from(a)}}function wF(e,t){let n={},r=0;for(let i of e){let e=[];for(let n=0;n<i.count;n++)e.push(xF(t,r++));n[i.child]=e}return n}function TF(e,t,n,r,i){let a=_F(t,r);if(e[0]=n.position[0]-a[0],e[1]=n.position[1]-a[1],e[2]=n.position[2]-a[2],i===6&&n.rotation){let r=yF(t.rotation,n.rotation);e[3]=r[0],e[4]=r[1],e[5]=r[2]}let o=0;for(let t=0;t<i;t++)o+=xF(e,t)**2;return Math.sqrt(o)}function EF(e,t,n,r,i,a,o,s,c,l){let u=_F(o,s);for(let d=0;d<n;d++){let f=xF(t,d),p=f+c>xF(a,d)&&f-c>=xF(i,d)?-c:c;t[d]=f+p;let m=l(t);t[d]=f;let h=_F(m,s);if(e[d]=(h[0]-u[0])/p,e[n+d]=(h[1]-u[1])/p,e[2*n+d]=(h[2]-u[2])/p,r===6){let t=yF(o.rotation,m.rotation);e[3*n+d]=t[0]/p,e[4*n+d]=t[1]/p,e[5*n+d]=t[2]/p}}}function DF(e,t,n,r,i){let a=new Float64Array(r*r),o=i*i;for(let t=0;t<r;t++)for(let i=0;i<r;i++){let s=0;for(let r=0;r<n;r++)s+=xF(e,t*n+r)*xF(e,i*n+r);a[t*r+i]=s+(t===i?o:0)}let s=SF(a,t,r);if(!s)return null;let c=new Float64Array(n);for(let t=0;t<n;t++){let i=0;for(let a=0;a<r;a++)i+=xF(e,a*n+t)*xF(s,a);c[t]=i}return c}function OF(e,t,n,r={}){let i=r.maxIterations??200,a=r.tolerance??1e-5,o=r.damping??.05,s=r.tip??[0,0,0],c=n.rotation===void 0?3:6,{segments:l,q:u,lo:d,hi:f}=CF(bF(e,t),r.seed),p=u.length,m=n=>mF(e,wF(l,n)).get(t)??gF,h=new Float64Array(c),g=new Float64Array(c*p),_=m(u),v=TF(h,_,n,s,c),y=0;for(;y<i&&p>0&&v>a;y++){EF(g,u,p,c,d,f,_,s,1e-6,m);let e=DF(g,h,p,c,o);if(!e)break;for(let t=0;t<p;t++){let n=xF(u,t)+xF(e,t);u[t]=Math.min(xF(f,t),Math.max(xF(d,t),n))}_=m(u),v=TF(h,_,n,s,c)}return{values:wF(l,u),converged:v<=a,iterations:y,error:v}}function kF(e,t){return e.dofs.map((e,n)=>{let r=(Array.isArray(t)?t[n]:n===0?t:void 0)??e.value;return Math.min(e.max,Math.max(e.min,r))})}function AF(e,t,n,r){let i=[];LP(e,e=>{e.joints&&i.push(...e.joints)});let a=i.map(e=>({child:e.child,a:kF(e,t[e.child]),b:kF(e,n[e.child])})),o=Math.max(1,Math.floor(r)),s=[];for(let t=0;t<=o;t++){let n=t/o,r={};for(let e of a)r[e.child]=e.a.map((t,r)=>t+((e.b[r]??t)-t)*n);s.push({t:n,values:r,poses:mF(e,r)})}return s}var jF=Math.PI/180;function MF(e,t,n,r){let i=e*jF,a=r*jF,o=qP(GP([0,0,1],i),GP([1,0,0],a));return{position:[n*Math.cos(i),n*Math.sin(i),t],rotation:o}}function NF(e,t={}){let n=t.base??`base`,r=e.map((e,t)=>e.name??`link${t+1}`);return e.map((e,t)=>{let i=t===0?n:r[t-1]??`link${t}`,a=r[t]??`link${t+1}`,o=MF(e.theta,e.d,e.a,e.alpha),s={origin:[0,0,0],direction:[0,0,1]},c={...e.min===void 0?{}:{min:e.min},...e.max===void 0?{}:{max:e.max},...e.value===void 0?{}:{value:e.value}};return{...e.type===`prismatic`?nF(i,a,s,c):tF(i,a,s,c),offset:o}})}var PF=Math.PI/180,FF=180/Math.PI;function IF(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}function LF(e){return String(e===0?0:e)}function RF(e){return`${LF(e[0])} ${LF(e[1])} ${LF(e[2])}`}function zF(e,t={}){let n=t.name??`robot`,r=t.effort??0,i=t.velocity??0,a=t.meshes??{},o=[],s=[];LP(e,e=>{o.push(e.name),e.joints&&s.push(...e.joints)});for(let e of s){if(e.type!==`revolute`&&e.type!==`prismatic`)return k(F(N.VALIDATION_FAILED,`exportURDF: joint '${e.parent}->${e.child}' is '${e.type}'; URDF supports only revolute and prismatic joints`));if(e.offset)return k(F(N.VALIDATION_FAILED,`exportURDF: joint '${e.parent}->${e.child}' carries a fixed offset (e.g. a DH link) that URDF cannot represent as a single joint`))}let c=[`<?xml version="1.0"?>`,`<robot name="${IF(n)}">`];for(let e of o){let t=a[e];t?c.push(` <link name="${IF(e)}">`,` <visual><geometry><mesh filename="${IF(t)}"/></geometry></visual>`,` </link>`):c.push(` <link name="${IF(e)}"/>`)}for(let e of s){let t=e.type===`revolute`,n=t?e.min*PF:e.min,a=t?e.max*PF:e.max,o=e.type===`prismatic`?[0,0,0]:e.axis.origin;c.push(` <joint name="${IF(`${e.parent}_to_${e.child}`)}" type="${e.type}">`,` <parent link="${IF(e.parent)}"/>`,` <child link="${IF(e.child)}"/>`,` <origin xyz="${RF(o)}" rpy="0 0 0"/>`,` <axis xyz="${RF(e.axis.direction)}"/>`,` <limit lower="${LF(n)}" upper="${LF(a)}" effort="${LF(r)}" velocity="${LF(i)}"/>`,` </joint>`)}return c.push(`</robot>`,``),O(c.join(`
15
+ npm install brepkit-wasm`)}function OT(){var e=typeof SuppressedError==`function`?SuppressedError:function(e,t){var n=Error();return n.name=`SuppressedError`,n.error=e,n.suppressed=t,n},t={},n=[];function r(e,t){if(t!=null){if(Object(t)!==t)throw TypeError(`using declarations can only be used with objects, functions, null, or undefined.`);if(e)var r=t[Symbol.asyncDispose||Symbol.for(`Symbol.asyncDispose`)];if(r===void 0&&(r=t[Symbol.dispose||Symbol.for(`Symbol.dispose`)],e))var i=r;if(typeof r!=`function`)throw TypeError(`Object is not disposable.`);i&&(r=function(){try{i.call(t)}catch(e){return Promise.reject(e)}}),n.push({v:t,d:r,a:e})}else e&&n.push({d:t,a:e});return t}return{e:t,u:r.bind(null,!1),a:r.bind(null,!0),d:function(){var r,i=this.e,a=0;function o(){for(;r=n.pop();)try{if(!r.a&&a===1)return a=0,n.push(r),Promise.resolve().then(o);if(r.d){var e=r.d.call(r.v);if(r.a)return a|=2,Promise.resolve(e).then(o,s)}else a|=1}catch(e){return s(e)}if(a===1)return i===t?Promise.resolve():Promise.reject(i);if(i!==t)throw i}function s(n){return i=i===t?n:new e(n,i),o()}return o()}}}var kT=Symbol;kT.dispose??=Symbol.for(`Symbol.dispose`),kT.asyncDispose??=Symbol.for(`Symbol.asyncDispose`);var AT=globalThis;AT.FinalizationRegistry||=(console.warn(`brepjs: FinalizationRegistry unavailable — garbage collection will not work`),class{register(e,t,n){}unregister(e){return!1}});var jT={liveHandles:0,peakHandles:0,gcCollected:0,scopeEnters:0,scopeExits:0};function MT(){return{...jT}}function NT(){jT.liveHandles=0,jT.peakHandles=0,jT.gcCollected=0,jT.scopeEnters=0,jT.scopeExits=0}function PT(){jT.liveHandles++,jT.liveHandles>jT.peakHandles&&(jT.peakHandles=jT.liveHandles)}function FT(){jT.liveHandles--}function IT(){jT.gcCollected++,jT.liveHandles--}var LT=new FinalizationRegistry(e=>{IT();try{e.delete()}catch{}});function RT(e){let t=U(),n=!1,r,i=()=>{if(r){for(let e of r)try{e()}catch{}r=void 0}},a=()=>{if(!n){n=!0,FT(),LT.unregister(o),i();try{t.dispose(e)}catch{}}},o={get wrapped(){if(n)throw Error(`Shape handle has been disposed`);return e},get disposed(){return n},[Symbol.dispose](){a()},delete(){a()},onDispose(e){if(n){e();return}(r??=[]).push(e)}};return PT(),LT.register(o,{delete:()=>{t.dispose(e)}},o),o}function zT(e){let t=!1,n={get value(){if(t)throw Error(`kernel handle has been disposed`);return e},get disposed(){return t},[Symbol.dispose](){if(!t){t=!0,FT(),LT.unregister(n);try{e.delete()}catch{}}}};return PT(),LT.register(n,e,n),n}var BT=class{handles=[];constructor(){jT.scopeEnters++}register(e){return this.handles.push(()=>{try{let t=e[Symbol.dispose];typeof t==`function`?t.call(e):e.delete()}catch{}}),e}track(e){return this.handles.push(()=>{try{e[Symbol.dispose]()}catch{}}),e}[Symbol.dispose](){jT.scopeExits++;for(let e=this.handles.length-1;e>=0;e--)this.handles[e]?.();this.handles.length=0}};function VT(e){try{var t=OT();return e(t.u(new BT))}catch(e){t.e=e}finally{t.d()}}function HT(e,t){LT.register(e,t,t)}function UT(e){LT.unregister(e)}function WT(e){try{var t=OT();return e(t.u(new BT))}catch(e){t.e=e}finally{t.d()}}async function GT(e){try{var t=OT();return await e(t.u(new BT))}catch(e){t.e=e}finally{t.d()}}function KT(e){return!e.disposed}function qT(e){return e.__is2D!==!0}function JT(e){return e.__is2D===!0}function YT(e){if(!qT(e))throw Error(`Expected 3D shape, got 2D`);return e}function XT(e){if(!JT(e))throw Error(`Expected 2D shape, got 3D`);return e}var ZT=new WeakMap;function QT(e,t){ZT.set(e,t)}function $T(e,t){let n=ZT.get(t);if(n!==void 0)return n;let r=e.shapeType(t);return ZT.set(t,r),r}function eE(e){return $T(U(),e.wrapped)}function tE(e){return U().curveIsClosed(e.wrapped)}function nE(e){return U().isValid(e.wrapped)}function rE(e){let t=U();if(!t.isValid(e.wrapped))return!1;let n=t.isValidStrict?.bind(t)??t.isValid.bind(t);try{let r=t.solidFromShell(e.wrapped),i=n(r);try{t.dispose(r)}catch{}return i}catch{return!1}}function iE(e){return U().isValid(e.wrapped)}function aE(e){return tE(e)?O(e):k(`Wire is not closed: start and end points do not coincide`)}function oE(e){return nE(e)?O(e):k(`Face orientation is inconsistent or face is invalid`)}function sE(e){return rE(e)?O(e):k(`Shell is not manifold: has free edges or is invalid`)}function cE(e){return iE(e)?O(e):k(`Solid failed BRepCheck validation`)}function lE(e){return U().surfaceType(e.wrapped)===`plane`}function uE(e){let t=U(),n=n=>{try{let r=t.makeFace(e.wrapped,n),i=t.surfaceType(r);try{t.dispose(r)}catch{}return i===`plane`}catch{return!1}};return n(!0)?!0:n(!1)}function dE(e){return lE(e)?O(e):k(`Face is not planar: underlying surface is not a geometric plane`)}function fE(e){return uE(e)?O(e):k(`Wire is not planar: edges do not lie in a common plane`)}function pE(e,t){return t===`2D`&&(e.__is2D=!0),e}function mE(e,t){return pE(RT(e),t)}function hE(e,t){return pE(RT(e),t)}function gE(e,t){return pE(RT(e),t)}function _E(e,t){return pE(RT(e),t)}function vE(e){return pE(RT(e))}function yE(e){return pE(RT(e))}function bE(e){return pE(RT(e))}function xE(e,t){return pE(RT(e),t)}function SE(e){return eE(e)===`vertex`}function CE(e){return eE(e)===`edge`}function wE(e){return eE(e)===`wire`}function TE(e){return eE(e)===`face`}function EE(e){return eE(e)===`shell`}function DE(e){return eE(e)===`solid`}function OE(e){return eE(e)===`compound`}function kE(e){let t=eE(e);return t===`shell`||t===`solid`||t===`compsolid`?!0:t===`compound`?qT(e):!1}function AE(e){let t=eE(e);return t===`edge`||t===`wire`}function jE(e,t){let n=U(),r=$T(n,e),i=n.downcast(e,r);return r===`vertex`?mE(i,t):r===`edge`?hE(i,t):r===`wire`?gE(i,t):r===`face`?_E(i,t):r===`shell`?vE(i):r===`solid`?yE(i):r===`compsolid`?bE(i):xE(i,t)}function ME(e){return jE(e)}function NE(e,t){let n=e.id,r=t.wrapped.id;(n!==void 0&&r!==void 0?n===r:t.wrapped===e)||U().dispose(e)}function W(e,t){let n=jE(e,t);return NE(e,n),n}function PE(e,t){let n=e.wrapped;if(e[Symbol.dispose](),n!==t){let e=U();e.dispose(n),e.dispose(t)}}function FE(e){U().dispose(e.wrapped),e[Symbol.dispose]()}function IE(e,t,n){QT(e,t);let r=U().downcast(e,t);return t===`vertex`?mE(r,n):t===`edge`?hE(r,n):t===`wire`?gE(r,n):t===`face`?_E(r,n):t===`shell`?vE(r):t===`solid`?yE(r):t===`compsolid`?bE(r):xE(r,n)}function LE(e,t,n){let r=IE(e,t,n);return NE(e,r),r}function RE(e,t,n,r,i){let a={kind:e,code:t,message:n,cause:r};return i?{...a,suggestion:i}:a}var zE={KERNEL_OPERATION:(e,t,n,r)=>RE(`KERNEL_OPERATION`,e,t,n,r),VALIDATION:(e,t,n,r)=>RE(`VALIDATION`,e,t,n,r),TYPE_CAST:(e,t,n,r)=>RE(`TYPE_CAST`,e,t,n,r),SKETCHER_STATE:(e,t,n,r)=>RE(`SKETCHER_STATE`,e,t,n,r),MODULE_INIT:(e,t,n,r)=>RE(`MODULE_INIT`,e,t,n,r),COMPUTATION:(e,t,n,r)=>RE(`COMPUTATION`,e,t,n,r),IO:(e,t,n,r)=>RE(`IO`,e,t,n,r),QUERY:(e,t,n,r)=>RE(`QUERY`,e,t,n,r),UNSUPPORTED:(e,t,n,r)=>RE(`UNSUPPORTED`,e,t,n,r)};function BE(e,t,n,r=`KERNEL_OPERATION`){try{return O(W(e()))}catch(e){let i=e instanceof Error?e.message:String(e),a=r===`KERNEL_OPERATION`?po(i):i,o=fo(t);return k(zE[r](t,`${n}: ${a}`,e,o))}}function VE(e,t,n,r=`KERNEL_OPERATION`){try{return O(e())}catch(e){let i=e instanceof Error?e.message:String(e),a=r===`KERNEL_OPERATION`?po(i):i,o=fo(t);return k(zE[r](t,`${n}: ${a}`,e,o))}}function HE(e,t,n,r=`KERNEL_OPERATION`){try{var i=OT();let a=i.u(new BT);return BE(()=>e(a),t,n,r)}catch(e){i.e=e}finally{i.d()}}function UE(e,t){let n=U().iterShapes(e,t),r=Array(n.length);for(let e=0;e<n.length;e++)r[e]=LE(n[e],t);return r}var WE=new WeakMap;function GE(e){let t=WE.get(e);if(!t)return;WE.delete(e);let n=[t.edges,t.faces,t.wires,t.vertices,t.shells,t.solids,t.compSolids];for(let e of n)if(e)for(let t of e)t[Symbol.dispose]()}var KE=new WeakSet;function qE(e){let t=e.wrapped,n=WE.get(t);return n||(n={},WE.set(t,n)),KE.has(e)||(KE.add(e),e.onDispose(()=>{GE(t)})),n}function JE(e){return WE.get(e.wrapped)}function YE(e){GE(e.wrapped)}function XE(e){let t=qE(e);if(t.edges)return t.edges;let n=UE(e.wrapped,`edge`);return t.edges=n,n}function ZE(e){let t=qE(e);if(t.faces)return t.faces;let n=UE(e.wrapped,`face`);return t.faces=n,n}function QE(e){let t=qE(e);if(t.wires)return t.wires;let n=UE(e.wrapped,`wire`);return t.wires=n,n}function $E(e){let t=qE(e);if(t.vertices)return t.vertices;let n=UE(e.wrapped,`vertex`);return t.vertices=n,n}function eD(e){let t=qE(e);if(t.solids)return t.solids;let n=UE(e.wrapped,`solid`);return t.solids=n,n}function tD(e){let t=qE(e);if(t.shells)return t.shells;let n=UE(e.wrapped,`shell`);return t.shells=n,n}function nD(e){let t=qE(e);if(t.compSolids)return t.compSolids;let n=UE(e.wrapped,`compsolid`);return t.compSolids=n,n}function*rD(e){for(let t of U().iterShapes(e.wrapped,`edge`))yield LE(t,`edge`)}function*iD(e){for(let t of U().iterShapes(e.wrapped,`face`))yield LE(t,`face`)}function*aD(e){for(let t of U().iterShapes(e.wrapped,`wire`))yield LE(t,`wire`)}function*oD(e){for(let t of U().iterShapes(e.wrapped,`vertex`))yield LE(t,`vertex`)}function*sD(e){for(let t of U().iterShapes(e.wrapped,`solid`))yield LE(t,`solid`)}function*cD(e){for(let t of U().iterShapes(e.wrapped,`shell`))yield LE(t,`shell`)}function*lD(e){for(let t of U().iterShapes(e.wrapped,`compsolid`))yield LE(t,`compsolid`)}function uD(e){let t=qE(e);if(t.bounds)return t.bounds;let{min:n,max:r}=U().boundingBox(e.wrapped),i={xMin:n[0],xMax:r[0],yMin:n[1],yMax:r[1],zMin:n[2],zMax:r[2]};return t.bounds=i,i}function dD(e){return $T(U(),e.wrapped)}function fD(e){let t=qE(e);if(t.surfaceType!==void 0)return t.surfaceType;let n=U().surfaceType(e.wrapped);return t.surfaceType=n,n}function pD(e){let t=qE(e);if(t.isValid!==void 0)return t.isValid;let n=U().isValid(e.wrapped);return t.isValid=n,n}function mD(e){return{kind:dD(e),faceCount:ZE(e).length,edgeCount:XE(e).length,wireCount:QE(e).length,vertexCount:$E(e).length,valid:pD(e),bounds:uD(e)}}function hD(e){return U().vertexPosition(e.wrapped)}var G=2147483647,gD=Math.PI/180,_D=180/Math.PI;function vD(e){return e.length===2?[e[0],e[1],0]:[e[0],e[1],e[2]]}function yD(e){return[e[0],e[1]]}var bD={X:[1,0,0],Y:[0,1,0],Z:[0,0,1]};function xD(e){if(typeof e==`string`){let t=bD[e];if(!t)throw Error(`Unknown direction: ${e}`);return t}return e}function SD(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function CD(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function wD(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function TD(e){return[-e[0],-e[1],-e[2]]}function ED(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function DD(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 OD(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2])}function kD(e){return e[0]*e[0]+e[1]*e[1]+e[2]*e[2]}function AD(e,t){return OD(CD(e,t))}function jD(e){let t=OD(e);return t<1e-10?[0,0,0]:[e[0]/t,e[1]/t,e[2]/t]}function MD(e,t,n=1e-5){return Math.abs(e[0]-t[0])<n&&Math.abs(e[1]-t[1])<n&&Math.abs(e[2]-t[2])<n}function ND(e,t=1e-10){return kD(e)<t*t}function PD(e,t){let n=ED(e,t),r=OD(e),i=OD(t);if(r<1e-10||i<1e-10)return 0;let a=Math.max(-1,Math.min(1,n/(r*i)));return Math.acos(a)}function FD(e,t,n){let r=CD(e,t),i=kD(n);return i<1e-20?e:CD(e,wD(n,ED(r,n)/i))}function ID(e,t,n){let r=jD(t),i=Math.cos(n),a=Math.sin(n),o=ED(e,r),s=DD(r,e);return[e[0]*i+s[0]*a+r[0]*o*(1-i),e[1]*i+s[1]*a+r[1]*o*(1-i),e[2]*i+s[2]*a+r[2]*o*(1-i)]}var LD=e=>Math.round(e*1e3)/1e3;function RD(e){return`x: ${LD(e[0])}, y: ${LD(e[1])}, z: ${LD(e[2])}`}function zD(e,t=null,n=[0,0,1]){let r=jD(n);if(ND(r))throw Error(`Plane normal must be non-zero`);let i;if(t)i=jD(t);else{let[e,t,n]=r,a=Math.abs(e),o=Math.abs(t),s=Math.abs(n),c;c=a<=o&&a<=s?[1,0,0]:o<=s?[0,1,0]:[0,0,1];let l=c[1]*n-c[2]*t,u=c[2]*e-c[0]*n,d=c[0]*t-c[1]*e;i=Math.sqrt(l*l+u*u+d*d)>1e-12?jD([l,u,d]):[1,0,0]}if(ND(i))throw Error(`Plane xDir must be non-zero`);let a=jD(DD(r,i));return{origin:e,xDir:i,yDir:a,zDir:r}}var BD={XY:{xDir:[1,0,0],normal:[0,0,1]},YZ:{xDir:[0,1,0],normal:[1,0,0]},ZX:{xDir:[0,0,1],normal:[0,1,0]},XZ:{xDir:[1,0,0],normal:[0,-1,0]},YX:{xDir:[0,1,0],normal:[0,0,-1]},ZY:{xDir:[0,0,1],normal:[-1,0,0]},front:{xDir:[1,0,0],normal:[0,0,1]},back:{xDir:[-1,0,0],normal:[0,0,-1]},left:{xDir:[0,0,1],normal:[-1,0,0]},right:{xDir:[0,0,-1],normal:[1,0,0]},top:{xDir:[1,0,0],normal:[0,1,0]},bottom:{xDir:[1,0,0],normal:[0,-1,0]}};function VD(e,t=[0,0,0]){let n=BD[e];if(!n)return k(F(`UNKNOWN_PLANE`,`Could not find plane ${e}`));let r;return r=typeof t==`number`?wD(n.normal,t):vD(t),O(zD(r,n.xDir,n.normal))}function HD(e,t){return typeof e==`string`?VD(e,t):O(e)}function UD(e,t){return e&&typeof e!=`string`?{...e}:j(HD(e??`XY`,t))}function WD(e,t){let[n,r]=t;return SD(SD(e.origin,wD(e.xDir,n)),wD(e.yDir,r))}function GD(e,t){return{...e,origin:SD(e.origin,t)}}function KD(e,t,n=[1,0,0]){let r=t*gD,i=ID(e.zDir,n,r),a=ID(e.xDir,n,r),o=jD(DD(i,a));return{origin:e.origin,xDir:a,yDir:o,zDir:i}}var qD={compound:0,solidCompound:1,solid:2,shell:3,face:4,wire:5,edge:6,vertex:7,shape:8},JD=e=>qD[e],YD={vertex:`vertex`,edge:`edge`,wire:`wire`,face:`face`,shell:`shell`,solid:`solid`,solidCompound:`compsolid`,compound:`compound`,shape:`compound`},XD=function*(e,t){let n=U().iterShapes(e,YD[t]);for(let e of n)yield e},ZD=e=>U().isNull(e)?k(ho(`NULL_SHAPE`,`This shape has no type, it is null`)):O(e.ShapeType());function QD(e){if(U().isNull(e))return k(ho(`NULL_SHAPE`,`This shape has no type, it is null`));try{return O(U().downcast(e))}catch(e){return k(ho(`NO_WRAPPER`,`Could not find a wrapper for this shape type`,e))}}function $D(e){if(U().isNull(e))return k(ho(`NULL_SHAPE`,`Cannot copy a null shape`));try{return O(U().copyShape(e))}catch(e){return k(ho(`NO_WRAPPER`,`Could not copy this shape`,e))}}function eO(e){return U().isNull(e)?k(ho(`NULL_SHAPE`,`Cannot cast a null shape`)):O(jE(e))}function tO(e){return U().shapeType(e.wrapped)===`compsolid`}function nO(e){return eO(U().fromBREP(e))}var rO={plane:`PLANE`,cylinder:`CYLINDRE`,cone:`CONE`,sphere:`SPHERE`,torus:`TORUS`,bezier:`BEZIER_SURFACE`,bspline:`BSPLINE_SURFACE`,revolution:`REVOLUTION_SURFACE`,extrusion:`EXTRUSION_SURFACE`,offset:`OFFSET_SURFACE`,other:`OTHER_SURFACE`};function iO(e){return O(rO[fD(e)])}function aO(e){return j(iO(e))}function oO(e){return U().shapeOrientation(e.wrapped)===`forward`?`forward`:`backward`}function sO(e){return jE(U().reverseShape(e.wrapped))}function cO(e){return U().uvBounds(e.wrapped)}function lO(e,t,n){let r=cO(e),i=t*(r.uMax-r.uMin)+r.uMin,a=n*(r.vMax-r.vMin)+r.vMin;return U().pointOnSurface(e.wrapped,i,a)}function uO(e,t){let n=vD(t);return U().uvFromPoint(e.wrapped,n)||[0,0]}function dO(e,t){let n=vD(t);try{let t=n,r=U().uvFromPoint(e.wrapped,t);if(!r)return k(ho(`PROJECTION_FAILED`,`No projection found on the face`));let i=U().projectPointOnFace(e.wrapped,t),a=n[0]-i[0],o=n[1]-i[1],s=n[2]-i[2];return O({uv:r,point:i,distance:Math.sqrt(a*a+o*o+s*s)})}catch(e){return k(ho(`PROJECTION_FAILED`,`Point projection failed: ${e instanceof Error?e.message:String(e)}`))}}function fO(e,t){let n,r;if(t)[n,r]=uO(e,t);else{let t=cO(e);n=.5*(t.uMin+t.uMax),r=.5*(t.vMin+t.vMax)}return U().surfaceNormal(e.wrapped,n,r)}function pO(e){return U().surfaceCenterOfMass(e.wrapped)}function mO(e){return U().getSurfaceAxis(e.wrapped)}function hO(e,t,n=1e-6){let[r,i]=uO(e,t);return U().classifyPointOnFace(e.wrapped,r,i,n)}function gO(e){return jE(U().outerWire(e.wrapped))}function _O(e){return jE(U().removeHolesFromFace(e.wrapped))}function vO(e){let t=gO(e);return Array.from(XD(e.wrapped,`wire`)).map(e=>jE(j(QD(e)))).filter(e=>!U().isSame(e.wrapped,t.wrapped))}function yO(e,t){let n=qE(e),r=U(),i=new Map;for(let n of r.iterShapes(e.wrapped,`face`))i.set(r.hashCode(n,G),t),r.dispose(n);n.faceOrigins=i}function bO(e){return JE(e)?.faceOrigins}function xO(e,t,n){let r=new Map;for(let e of t){let t=bO(e);if(t)for(let[e,n]of t)r.set(e,n)}if(r.size===0)return;let i=new Map;for(let[t,n]of r){if(e.deleted.has(t))continue;let r=e.modified.get(t);if(r&&r.length>0)for(let e of r)i.set(e,n);else i.set(t,n);let a=e.generated.get(t);if(a)for(let e of a)i.has(e)||i.set(e,n)}if(i.size>0){let e=qE(n);e.faceOrigins=i}}var SO=100,CO=.985,wO=.1;function TO(e,t,n,r){let i=-1/0,a;for(let n of r){let r=e[0]*n.normal[0]+e[1]*n.normal[1]+e[2]*n.normal[2];if(r<.707)continue;let o=t[0]-n.centroid[0],s=t[1]-n.centroid[1],c=t[2]-n.centroid[2],l=o*o+s*s+c*c;if(l>SO)continue;let u=r-l/SO;u>i&&(i=u,a=n.origin)}if(a!==void 0)return a;if(!n)return;let o=1/0,s;for(let n of r){if(!n.planar)continue;let r=e[0]*n.normal[0]+e[1]*n.normal[1]+e[2]*n.normal[2];if(Math.abs(r)<CO)continue;let i=t[0]-n.centroid[0],a=t[1]-n.centroid[1],c=t[2]-n.centroid[2],l=i*n.normal[0]+a*n.normal[1]+c*n.normal[2];if(l*l>wO)continue;let u=Math.max(0,i*i+a*a+c*c-l*l);u<o&&(o=u,s=n.origin)}return s}function EO(e,t){let n=new Map;for(let t of e){let e=bO(t);if(e)for(let[t,r]of e)n.set(t,r)}if(n.size===0)return;let r=U(),i=new Map,a=ZE(t),o=[];for(let e of a){let t=r.hashCode(e.wrapped,G),a=n.get(t);a===void 0?o.push(e):i.set(t,a)}if(o.length>0){let t=[];for(let n of e){let e=bO(n);if(e)for(let i of ZE(n)){let n=r.hashCode(i.wrapped,G),a=e.get(n);if(a!==void 0)try{let e=r.uvBounds(i.wrapped),n=r.surfaceNormal(i.wrapped,.5*(e.uMin+e.uMax),.5*(e.vMin+e.vMax)),o=r.surfaceCenterOfMass(i.wrapped),s=r.surfaceType(i.wrapped)===`plane`;t.push({origin:a,normal:n,centroid:o,planar:s})}catch{}}}if(t.length>0)for(let e of o){let n=r.hashCode(e.wrapped,G);try{let a=r.uvBounds(e.wrapped),o=TO(r.surfaceNormal(e.wrapped,.5*(a.uMin+a.uMax),.5*(a.vMin+a.vMax)),r.surfaceCenterOfMass(e.wrapped),r.surfaceType(e.wrapped)===`plane`,t);o!==void 0&&i.set(n,o)}catch{}}}if(i.size>0){let e=qE(t);e.faceOrigins=i}}var DO=new WeakMap,OO=new WeakMap;function kO(e){return DO.has(e.wrapped)}function AO(e){let t=DO.get(e.wrapped);return t||(t=new Map,DO.set(e.wrapped,t)),t}function jO(e){let t=OO.get(e.wrapped);return t||(t=new Map,OO.set(e.wrapped,t)),t}function MO(e,t,n){let r=Array.isArray(t)?t:ZE(e).filter(t),i=AO(e),a=i.get(n)??new Set;for(let e of r)a.add(U().hashCode(e.wrapped,G));return i.set(n,a),e}function NO(e,t){let n=DO.get(e.wrapped);if(!n)return[];let r=n.get(t);if(!r||r.size===0)return[];let i=[];for(let t of ZE(e)){let e=U().hashCode(t.wrapped,G);r.has(e)&&i.push(t)}return i}function PO(e){let t=new Map,n=DO.get(e.wrapped);if(!n)return t;let r=ZE(e),i=new Map;for(let e of r)i.set(U().hashCode(e.wrapped,G),e);for(let[e,r]of n){let n=[];for(let e of r){let t=i.get(e);t&&n.push(t)}n.length>0&&t.set(e,n)}return t}function FO(e,t,n){return jO(e).set(t,n),e}function IO(e,t){return OO.get(e.wrapped)?.get(t)}function LO(e,t,n){let r=e.get(t)??new Set;r.add(n),e.set(t,r)}function RO(e,t,n){let r=AO(n);for(let i of t){let t=DO.get(i.wrapped);if(!t)continue;let a=new Map;for(let[e,n]of t)for(let t of n){let n=a.get(t)??[];n.push(e),a.set(t,n)}for(let[t,n]of a){if(e.deleted.has(t))continue;let i=e.modified.get(t),a=i&&i.length>0?i:[t];for(let e of a)for(let t of n)LO(r,t,e)}let o=OO.get(i.wrapped);if(o){let e=jO(n);for(let[t,n]of o)e.has(t)||e.set(t,n)}}}var zO=new WeakMap,BO=new WeakMap;function VO(e){return zO.has(e.wrapped)||BO.has(e.wrapped)}function HO(e){let t=BO.get(e.wrapped);return t||(t=new Map,BO.set(e.wrapped,t)),t}function UO(e){if(typeof e==`string`){let t=e.startsWith(`#`)?e.slice(1):e;return t.length===3&&(t=t.charAt(0)+t.charAt(0)+t.charAt(1)+t.charAt(1)+t.charAt(2)+t.charAt(2)),[parseInt(t.slice(0,2),16)/255,parseInt(t.slice(2,4),16)/255,parseInt(t.slice(4,6),16)/255,1]}return e.length===3?[e[0],e[1],e[2],1]:[e[0],e[1],e[2],e[3]]}function WO(e,t){return zO.set(e.wrapped,UO(t)),e}function GO(e,t,n){let r=UO(n),i=HO(e);for(let e of t)i.set(U().hashCode(e.wrapped,G),r);return e}function KO(e){return zO.get(e.wrapped)}function qO(e,t){let n=BO.get(e.wrapped);if(n)return n.get(U().hashCode(t.wrapped,G))}function JO(e,t,n){for(let e of t){let t=zO.get(e.wrapped);if(t){zO.set(n.wrapped,t);break}}let r=HO(n);for(let n of t){let t=BO.get(n.wrapped);if(!(!t||t.size===0))for(let[n,i]of t){if(e.deleted.has(n))continue;let t=e.modified.get(n);if(t&&t.length>0)for(let e of t)r.set(e,i);else r.set(n,i)}}}function YO(e){return bO(e)!==void 0||kO(e)||VO(e)}function XO(e){if(!e.some(YO))return[];let t=U(),n=[];for(let r of e){let e=t.iterShapes(r.wrapped,`face`);for(let r of e)n.push(t.hashCode(r,G)),t.dispose(r)}return n}function ZO(e,t,n){xO(e,t,n),RO(e,t,n),JO(e,t,n)}function QO(e,t){EO(e,t)}function $O(e,t){let n=U(),r=[...n.iterShapes(e.wrapped,`face`)],i=[...n.iterShapes(t.wrapped,`face`)];if(r.length!==i.length)return;let a=new Map;for(let e=0;e<r.length;e++){let t=r[e],o=i[e];t===void 0||o===void 0||a.set(n.hashCode(t,G),[n.hashCode(o,G)])}for(let e of r)n.dispose(e);for(let e of i)n.dispose(e);ZO({modified:a,generated:new Map,deleted:new Set},[e],t)}function ek(e,t){let n=XO([e]),{shape:r,evolution:i}=U().translateWithHistory(e.wrapped,t[0],t[1],t[2],n,G),a=W(r);return ZO(i,[e],a),a}function tk(e,t,n=[0,0,0],r=[0,0,1]){let i=XO([e]),{shape:a,evolution:o}=U().rotateWithHistory(e.wrapped,t*gD,i,G,r,n),s=W(a);return ZO(o,[e],s),s}function nk(e,t=[0,1,0],n=[0,0,0]){let r=XO([e]),{shape:i,evolution:a}=U().mirrorWithHistory(e.wrapped,n,t,r,G),o=W(i);return ZO(a,[e],o),o}function rk(e,t,n=[0,0,0]){let r=XO([e]),{shape:i,evolution:a}=U().scaleWithHistory(e.wrapped,n,t,r,G),o=W(i);return ZO(a,[e],o),o}function ik(e,t,n){let r=U().boundingBox(e.wrapped),i=[r.max[0]-r.min[0],r.max[1]-r.min[1],r.max[2]-r.min[2]],a=n?.auto===!0;function o(e,t,n){return e!==void 0&&t>1e-12?e/t:e===void 0&&a?n:1}let s=1;a&&(t[0]!==void 0&&i[0]>1e-12?s=t[0]/i[0]:t[1]!==void 0&&i[1]>1e-12?s=t[1]/i[1]:t[2]!==void 0&&i[2]>1e-12&&(s=t[2]/i[2]));let c=[o(t[0],i[0],s),o(t[1],i[1],s),o(t[2],i[2],s)];return Math.abs(c[0]-c[1])<1e-6&&Math.abs(c[1]-c[2])<1e-6?O(rk(e,c[0])):k(F(N.VALIDATION_FAILED,`resize: non-uniform scaling is not supported (WASM build lacks BRepBuilderAPI_GTransform).`,void 0,void 0,`Use auto: true to scale proportionally, or set all three dimensions to achieve uniform scaling.`))}function ak(e){if(`linear`in e)return O({linear:e.linear,translation:e.translation});let[t,n,r,i]=e,a=1e-10;return Math.abs(i[0])>a||Math.abs(i[1])>a||Math.abs(i[2])>a||Math.abs(i[3]-1)>a?k(F(N.VALIDATION_FAILED,`applyMatrix: invalid bottom row [${String(i[0])}, ${String(i[1])}, ${String(i[2])}, ${String(i[3])}]. Must be [0, 0, 0, 1] for an affine transform.`)):O({linear:[t[0],t[1],t[2],n[0],n[1],n[2],r[0],r[1],r[2]],translation:[t[3],n[3],r[3]]})}function ok(e){return e[0]*(e[4]*e[8]-e[5]*e[7])-e[1]*(e[3]*e[8]-e[5]*e[6])+e[2]*(e[3]*e[7]-e[4]*e[6])}function sk(e){let t=1e-8,n=e[0]*e[0]+e[3]*e[3]+e[6]*e[6],r=e[1]*e[1]+e[4]*e[4]+e[7]*e[7],i=e[2]*e[2]+e[5]*e[5]+e[8]*e[8],a=e[0]*e[1]+e[3]*e[4]+e[6]*e[7],o=e[0]*e[2]+e[3]*e[5]+e[6]*e[8],s=e[1]*e[2]+e[4]*e[5]+e[7]*e[8];return!(Math.abs(a)>t||Math.abs(o)>t||Math.abs(s)>t||Math.abs(n-r)>t||Math.abs(n-i)>t)}function ck(e,t){let n=ak(t);if(!n.ok)return n;let{linear:r,translation:i}=n.value,a=ok(r);if(Math.abs(a)<1e-12)return k(F(N.VALIDATION_FAILED,`applyMatrix: singular matrix (determinant ≈ 0). Cannot apply a non-invertible transform.`));if(sk(r)){let t=XO([e]),{shape:n,evolution:a}=U().generalTransformWithHistory(e.wrapped,r,i,!0,t,G),o=W(n);return ZO(a,[e],o),O(o)}let o=W(U().generalTransformNonOrthogonal(e.wrapped,r,i));return QO([e],o),O(o)}function lk(e){let t=e.map(e=>e.type===`translate`?{type:`translate`,x:e.v[0],y:e.v[1],z:e.v[2]}:{type:`rotate`,angle:e.angle,axis:e.axis,center:e.center}),{handle:n,dispose:r}=U().composeTransform(t);return{trsf:n,cleanup:r}}function uk(e,t){let{trsf:n,cleanup:r}=lk(`type`in t?[t]:t),i;try{i=W(U().locate(e.wrapped,n))}finally{r()}return YO(e)&&$O(e,i),i}function dk(e,t){let n=XO([e]),{shape:r,evolution:i}=U().applyComposedTransformWithHistory(e.wrapped,t.trsf,n,G),a=W(r);return ZO(i,[e],a),a}function fk(e){return BE(()=>U().copyShape(e.wrapped),N.CLONE_FAILED,`Failed to clone shape`)}function pk(e){return VE(()=>U().toBREP(e.wrapped),N.TO_BREP_FAILED,`Failed to serialize shape to BREP`)}function mk(e){return U().hashCode(e.wrapped,G)}function hk(e){return U().isNull(e.wrapped)}function gk(e,t){return U().isSame(e.wrapped,t.wrapped)}function _k(e,t){return U().isEqual(e.wrapped,t.wrapped)}function vk(e){return BE(()=>U().simplify(e.wrapped),N.SIMPLIFY_FAILED,`Failed to simplify shape`)}function yk(e){return U().curveType(e.wrapped)}function bk(e){let[t]=U().curveParameters(e.wrapped);return U().curvePointAtParam(e.wrapped,t)}function xk(e){let[,t]=U().curveParameters(e.wrapped);return U().curvePointAtParam(e.wrapped,t)}function Sk(e,t=.5){let[n,r]=U().curveParameters(e.wrapped),i=n+(r-n)*t;return U().curvePointAtParam(e.wrapped,i)}function Ck(e,t=.5){let[n,r]=U().curveParameters(e.wrapped),i=n+(r-n)*t;return U().curveTangent(e.wrapped,i).tangent}function wk(e){return U().length(e.wrapped)}function Tk(e){if(yk(e)!==`CIRCLE`)return null;let t=Sk(e,0),n=Sk(e,1/3),r=Sk(e,2/3),i=[n[0]-t[0],n[1]-t[1],n[2]-t[2]],a=[r[0]-t[0],r[1]-t[1],r[2]-t[2]],o=[i[1]*a[2]-i[2]*a[1],i[2]*a[0]-i[0]*a[2],i[0]*a[1]-i[1]*a[0]],s=o[0]*o[0]+o[1]*o[1]+o[2]*o[2];if(s<1e-18)return null;let c=i[0]*i[0]+i[1]*i[1]+i[2]*i[2],l=a[0]*a[0]+a[1]*a[1]+a[2]*a[2],u=[c*a[0]-l*i[0],c*a[1]-l*i[1],c*a[2]-l*i[2]],d=[u[1]*o[2]-u[2]*o[1],u[2]*o[0]-u[0]*o[2],u[0]*o[1]-u[1]*o[0]],f=1/(2*s),p=[t[0]+d[0]*f,t[1]+d[1]*f,t[2]+d[2]*f],m=Math.sqrt(s);return{origin:p,direction:[o[0]/m,o[1]/m,o[2]/m]}}function Ek(e){return U().curveIsClosed(e.wrapped)}function Dk(e){return U().curveIsPeriodic(e.wrapped)}function Ok(e){return U().curvePeriod(e.wrapped)}function kk(e){return U().shapeOrientation(e.wrapped)===`forward`?`forward`:`backward`}function Ak(e){return W(U().reverseShape(e.wrapped))}function jk(e,t={}){if(e.length<2)return k(ho(`INTERPOLATE_MIN_POINTS`,`Interpolation requires at least 2 points`));try{let n=W(U().interpolatePoints(e,t));return CE(n)?O(n):(FE(n),k(ho(`INTERPOLATE_NOT_EDGE`,`Interpolation did not produce an edge`)))}catch(e){return k(ho(`INTERPOLATE_FAILED`,`Interpolation failed: ${e instanceof Error?e.message:String(e)}`))}}function Mk(e,t={}){if(e.length<2)return k(ho(`APPROXIMATE_MIN_POINTS`,`Approximation requires at least 2 points`));try{let n=W(U().approximatePoints(e,t));return CE(n)?O(n):(FE(n),k(ho(`APPROXIMATE_NOT_EDGE`,`Approximation did not produce an edge`)))}catch(e){return k(ho(`APPROXIMATE_FAILED`,`Approximation failed: ${e instanceof Error?e.message:String(e)}`))}}function Nk(e,t,n=`arc`){let r=W(U().offsetWire2D(e.wrapped,t,{arc:`arc`,intersection:`intersection`,tangent:`tangent`,chamfer:`intersection`}[n]));return wE(r)?O(r):(FE(r),k(ho(`OFFSET_NOT_WIRE`,`Offset did not produce a Wire`)))}function Pk(e,t,n,r=!1){return`${e}:${t}:${n}:${r}`}function Fk(e,t){return`edge:${e}:${t}`}var Ik=new WeakMap,Lk=new WeakMap;function Rk(e,t){let n=Ik.get(e);if(n)return n.get(t)}function zk(e,t,n){let r=Ik.get(e);r||(r=new Map,Ik.set(e,r)),r.set(t,n)}function Bk(e,t){let n=Lk.get(e);if(n)return n.get(t)}function Vk(e,t,n){let r=Lk.get(e);r||(r=new Map,Lk.set(e,r)),r.set(t,n)}function Hk(){Ik=new WeakMap,Lk=new WeakMap}function Uk(){let e=new WeakMap,t=new WeakMap;return{getMesh(t,n){return e.get(t)?.get(n)},setMesh(t,n,r){let i=e.get(t);i||(i=new Map,e.set(t,i)),i.set(n,r)},getEdgeMesh(e,n){return t.get(e)?.get(n)},setEdgeMesh(e,n,r){let i=t.get(e);i||(i=new Map,t.set(e,i)),i.set(n,r)},clear(){e=new WeakMap,t=new WeakMap}}}function Wk(e,t={}){let n=To(),{tolerance:r=n.tolerance,angularTolerance:i=n.angularTolerance,skipNormals:a=!1,includeUVs:o=!1,cache:s=!0,signal:c}=t;c?.throwIfAborted();let l=Pk(r,i,a,o);if(s){let t=Rk(e.wrapped,l);if(t)return t}let u=U().mesh(e.wrapped,{tolerance:r,angularTolerance:i,skipNormals:a,includeUVs:o,...c?{signal:c}:{}}),d=bO(e),f={vertices:u.vertices,normals:u.normals,triangles:u.triangles,uvs:u.uvs,faceGroups:u.faceGroups.map(e=>({start:e.start,count:e.count,faceId:e.faceHash,origin:d?.get(e.faceHash)??0}))};return s&&zk(e.wrapped,l,f),f}function Gk(e,t={}){let n=To(),{tolerance:r=n.tolerance,angularTolerance:i=n.angularTolerance,cache:a=!0}=t,o=Fk(r,i);if(a){let t=Bk(e.wrapped,o);if(t)return t}let s=U().meshEdges(e.wrapped,r,i),c={lines:s.lines,edgeGroups:s.edgeGroups.map(e=>({start:e.start,count:e.count,edgeId:e.edgeHash}))};return a&&Vk(e.wrapped,o,c),c}function Kk(e,t){return e instanceof Error&&e.message.startsWith(`${t} export failed`)?vo(`${t}_EXPORT_FAILED`,`Failed to write ${t} file`,e):e instanceof WebAssembly.RuntimeError?vo(`${t}_EXPORT_CRASHED`,`${t} export crashed the kernel (${e.message}); the shape likely contains geometry the ${t} writer cannot serialize`,e):vo(`${t}_FILE_READ_ERROR`,`Failed to read exported ${t} file`,e)}function qk(e){let t;try{t=eD(e)}catch{return``}if(t.length<=1)return``;let n=[];return t.forEach((e,t)=>{try{uD(e)}catch(e){if(e instanceof TypeError)throw e;n.push(t)}}),n.length===0?`; could not localize the offending sub-solid among ${t.length} solids`:`; offending sub-solid${n.length>1?`s`:``} (of ${t.length}): index ${n.join(`, `)}`}function Jk(e,t){try{return uD(e),null}catch(n){if(n instanceof TypeError)throw n;return vo(`${t}_EXPORT_UNSERIALIZABLE`,`${t} export aborted: the shape contains degenerate geometry the ${t} writer cannot serialize (bounding-box evaluation failed); export was skipped to avoid crashing the kernel${qk(e)}`,n)}}function Yk(e){let t=Jk(e,`STEP`);if(t)return k(t);try{let t=U().exportSTEP([e.wrapped]);return O(new Blob([t],{type:`application/STEP`}))}catch(e){return k(Kk(e,`STEP`))}}function Xk(e,t={}){let n=To(),{tolerance:r=n.tolerance,angularTolerance:i=n.angularTolerance,binary:a=!1}=t,o=Jk(e,`STL`);if(o)return k(o);try{U().hasTriangulation(e.wrapped)||U().meshShape(e.wrapped,r,i);let t=U().exportSTL(e.wrapped,a,r,i);return O(new Blob([t],{type:`application/sla`}))}catch(e){return k(Kk(e,`STL`))}}function Zk(e){try{let t=U().exportIGES([e.wrapped]);return O(new Blob([t],{type:`application/iges`}))}catch(e){return k(vo(`IGES_EXPORT_FAILED`,`Failed to write IGES file`,e))}}function Qk(e,t){let n=t?.coarseTolerance??.5,r=t?.fineTolerance??.05,i=t?.angularTolerance??.5;return{coarse:Wk(e,{tolerance:n,angularTolerance:i}),fine:Wk(e,{tolerance:r,angularTolerance:i*.2})}}function $k(e){let t=uD(e),n=t.xMax-t.xMin,r=t.yMax-t.yMin,i=t.zMax-t.zMin;return Math.sqrt(n*n+r*r+i*i)||1}function eA(e,t){let n;if(t.tolerances&&t.tolerances.length>0)n=[...t.tolerances];else{let r=Math.max(1,Math.floor(t.levels??3)),i=t.spacing??4,a=(t.relativeTolerance??5e-4)*$k(e)||2**-52;n=[];for(let e=r-1;e>=0;e--)n.push(a*i**e)}return n.sort((e,t)=>t-e),n}function tA(e,t,n){return Math.min(e/t*n,1)}function nA(e,t={}){let n=t.angularTolerance??To().angularTolerance,r=t.cache??!0,i=eA(e,t),a=Math.min(...i);return i.map(i=>{let o=tA(i,a,n);return{tolerance:i,angularTolerance:o,mesh:Wk(e,{tolerance:i,angularTolerance:o,cache:r,...t.signal?{signal:t.signal}:{}})}})}function rA(){return new Promise(e=>{setTimeout(e,0)})}async function iA(e,t={}){let n=t.angularTolerance??To().angularTolerance,r=t.cache??!0,i=t.meshLevel??((e,n,i)=>Wk(e,{tolerance:n,angularTolerance:i,cache:r,...t.signal?{signal:t.signal}:{}})),a=eA(e,t),o=Math.min(...a),s=[];for(let[r,c]of a.entries()){if(t.signal?.aborted)break;let l=tA(c,o,n),u;try{u=await i(e,c,l)}catch(e){if(t.signal?.aborted)break;throw e}let d={tolerance:c,angularTolerance:l,mesh:u};if(s.push(d),t.onLevel?.(d,r),t.signal?.aborted||r===a.length-1)break;await rA()}return s}function aA(e,t,n){if(t<0||t>=e.length)throw Error(n??`Index ${t} out of bounds (length ${e.length})`);return e[t]}function oA(e,t){if(e.length===0)throw Error(t??`Expected non-empty array`);return e[0]}function sA(e,t){if(e.length===0)throw Error(t??`Expected non-empty array`);return e[e.length-1]}function cA(e){return Array.from(Array(e).keys())}function lA(e){return cA(Math.min(...e.map(e=>e.length))).map(t=>e.map(e=>e[t]))}function uA(e,t){return hE(U().makeLineEdge([...e],[...t]))}function dA(e,t=[0,0,0],n=[0,0,1]){return hE(U().makeCircleEdge([...t],[...n],e))}function fA(e,t,n=[0,0,0],r=[0,0,1],i){return t>e?k(F(`ELLIPSE_RADII`,`The minor radius must be smaller than the major one`)):O(hE(U().makeEllipseEdge([...n],[...r],e,t,i?[...i]:void 0)))}function pA(e,t,n,r=[0,0,0],i=[0,0,1],a=!1){return gE(U().makeHelixWire(e,t,n,[...r],[...i],a))}function mA(e,t,n){return hE(U().makeArcEdge([...e],[...t],[...n]))}function hA(e,t,n,r,i=[0,0,0],a=[0,0,1],o){return t>e?k(F(`ELLIPSE_RADII`,`The minor radius must be smaller than the major one`)):O(hE(U().makeEllipseArc([...i],[...a],e,t,n,r,o?[...o]:void 0)))}function gA(e,{tolerance:t=.001,smoothing:n=null,degMax:r=6,degMin:i=1}={}){try{let a=e.map(e=>[...e]);return O(hE(U().approximatePoints(a,{tolerance:t,degMin:i,degMax:r,smoothing:n})))}catch(e){return k(P(`BSPLINE_FAILED`,`B-spline approximation failed`,e))}}function _A(e,{periodic:t=!1,tolerance:n=1e-7}={}){try{let r=e.map(e=>[...e]);return O(hE(U().interpolatePoints(r,{periodic:t,tolerance:n})))}catch(e){return k(P(`BSPLINE_INTERP_FAILED`,`B-spline interpolation failed`,e))}}function vA(e){if(e.length<2)return k(F(`BEZIER_MIN_POINTS`,`Need at least 2 points for a Bezier curve, got ${e.length}`,void 0,{pointCount:e.length}));let t=e.map(e=>[...e]);return O(hE(U().makeBezierEdge(t)))}function yA(e,t,n){return hE(U().makeTangentArc([...e],[...t],[...n]))}function bA(e){try{return O(gE(U().makeWireFromMixed(e.map(e=>e.wrapped))))}catch(e){return k(P(`WIRE_BUILD_FAILED`,`Failed to build the wire: ${e instanceof Error?e.message:`unknown error`}`))}}function xA(e,t){try{let n=U().makeFace(e.wrapped,!0);if(t&&t.length>0){let e=TA(_E(n),t);return lE(e)?O(e):k(F(`FACE_NOT_PLANAR`,`makeFace produced a non-planar face — wire may not be truly planar`))}let r=_E(n);return lE(r)?O(r):k(F(`FACE_NOT_PLANAR`,`makeFace produced a non-planar face — wire may not be truly planar`))}catch(e){return k(P(`FACE_BUILD_FAILED`,`Failed to build the face. Your wire might be non planar.`,e))}}function SA(e){return xA(gO(e))}function CA(e,t){return _E(U().makeFaceOnSurface(e.wrapped,t.wrapped))}function wA(e){try{return Ha(eO(U().makeNonPlanarFace(e.wrapped)),e=>TE(e)?O(e):k(P(`FACE_BUILD_FAILED`,`Failed to create a non-planar face`)))}catch(e){return k(P(`FACE_BUILD_FAILED`,`Failed to create a non-planar face`,e))}}function TA(e,t){return _E(U().addHolesInFace(e.wrapped,t.map(e=>e.wrapped)))}function EA(e){try{var t=OT();if(e.length<3)return k(F(`POLYGON_MIN_POINTS`,`You need at least 3 points to make a polygon`));let n=[...e.slice(1),e[0]],r=t.u(new BT);return Ha(bA(lA([e,n]).map(([e,t])=>r.register(uA(e,t)))),e=>xA(r.register(e)))}catch(e){t.e=e}finally{t.d()}}function DA(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function OA(e,t,n,r,i){let a=jE(e);if(!kE(a)){let o=eE(a).toUpperCase();return NE(e,a),FE(a),k(ho(t,`${n}. Got ${o} instead.`,void 0,i?{diagnostics:i}:void 0,r))}return NE(e,a),O(a)}function kA(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a,unsafe:o,trackEvolution:s=!0}={}){if(i?.aborted)throw i.reason;let c=DA(e,`fuse: first operand`);if(A(c))return c;let l=DA(t,`fuse: second operand`);if(A(l))return l;if(!s)return OA(U().fuse(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`);let u=XO([e,t]),{shape:d,evolution:f,diagnostics:p}=U().fuseWithHistory(e.wrapped,t.wrapped,u,G,{optimisation:n,simplify:r,fuzzyValue:a});if(p.hasErrors){if(U().isNull(d))return U().dispose(d),console.warn(`brepjs: fuse history path produced null result; retrying without evolution tracking.`,p),OA(U().fuse(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`);console.warn(`brepjs: fuse reported OCCT warnings/errors but produced a shape. Continuing with result.`,p)}let m=OA(d,`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`,`Common causes: overlapping coplanar faces, zero-thickness geometry, or non-manifold input. Try autoHeal() on inputs first.`,p);return m.ok&&ZO(f,[e,t],m.value),m}function AA(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a,unsafe:o,trackEvolution:s=!0}={}){if(i?.aborted)throw i.reason;let c=DA(e,`cut: base`);if(A(c))return c;let l=DA(t,`cut: tool`);if(A(l))return l;if(!s)return OA(U().cut(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`CUT_NOT_3D`,`Cut did not produce a 3D shape`);let u=XO([e,t]),{shape:d,evolution:f,diagnostics:p}=U().cutWithHistory(e.wrapped,t.wrapped,u,G,{optimisation:n,simplify:r,fuzzyValue:a});if(p.hasErrors){if(U().isNull(d))return U().dispose(d),console.warn(`brepjs: cut history path produced null result; retrying without evolution tracking.`,p),OA(U().cut(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`CUT_NOT_3D`,`Cut did not produce a 3D shape`);console.warn(`brepjs: cut reported OCCT warnings/errors but produced a shape. Continuing with result.`,p)}let m=OA(d,`CUT_NOT_3D`,`Cut did not produce a 3D shape`,`Common causes: tool does not fully intersect the base, or produces a zero-thickness sliver. Ensure the tool extends through the shape.`,p);return m.ok&&ZO(f,[e,t],m.value),m}function jA(e,t,{simplify:n=!1,signal:r,fuzzyValue:i,unsafe:a,trackEvolution:o=!0}={}){if(r?.aborted)throw r.reason;let s=DA(e,`intersect: first operand`);if(A(s))return s;let c=DA(t,`intersect: second operand`);if(A(c))return c;if(!o)return OA(U().intersect(e.wrapped,t.wrapped,{simplify:n,fuzzyValue:i}),`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`);let l=XO([e,t]),{shape:u,evolution:d,diagnostics:f}=U().intersectWithHistory(e.wrapped,t.wrapped,l,G,{simplify:n,fuzzyValue:i});if(f.hasErrors){if(U().isNull(u))return U().dispose(u),console.warn(`brepjs: intersect history path produced null result; retrying without evolution tracking.`,f),OA(U().intersect(e.wrapped,t.wrapped,{simplify:n,fuzzyValue:i}),`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`);console.warn(`brepjs: intersect reported OCCT warnings/errors but produced a shape. Continuing with result.`,f)}let p=OA(u,`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`,`Shapes may not overlap. Verify they share a common volume before intersecting.`,f);return p.ok&&ZO(d,[e,t],p.value),p}function MA(e,t,n,r,i,a,o,s){if(o?.aborted)throw o.reason;let c=n-t;if(c===1)return O(aA(e,t));if(c===2)return kA(aA(e,t),aA(e,t+1),{optimisation:r,simplify:!1,trackEvolution:a,fuzzyValue:s,unsafe:!0,...o?{signal:o}:{}});let l=t+Math.ceil(c/2),u=MA(e,t,l,r,i,a,o,s);if(A(u))return u;let d=MA(e,l,n,r,i,a,o,s);return A(d)?d:kA(u.value,d.value,{optimisation:r,simplify:i,trackEvolution:a,fuzzyValue:s,unsafe:!0,...o?{signal:o}:{}})}function NA(e,{optimisation:t=`none`,simplify:n=!1,strategy:r=`native`,signal:i,fuzzyValue:a,unsafe:o,trackEvolution:s=!0}={}){if(i?.aborted)throw i.reason;if(e.length===0)return k(F(`FUSE_ALL_EMPTY`,`fuseAll requires at least one shape`));if(e.length===1)return O(oA(e));for(let t=0;t<e.length;t++){let n=DA(aA(e,t),`fuseAll: shape at index ${t}`);if(A(n))return n}if(r===`native`){let o=OA(U().fuseAll(e.map(e=>e.wrapped),{optimisation:t,simplify:n,strategy:r,fuzzyValue:a,...i?{signal:i}:{}}),`FUSE_ALL_NOT_3D`,`fuseAll did not produce a 3D shape`);return o.ok&&s&&QO(e,o.value),o}return MA(e,0,e.length,t,n,s,i,a)}function PA(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a,unsafe:o,trackEvolution:s=!0}={}){if(i?.aborted)throw i.reason;if(t.length===0)return O(e);let c=DA(e,`cutAll: base`);if(A(c))return c;for(let e=0;e<t.length;e++){let n=DA(aA(t,e),`cutAll: tool at index ${e}`);if(A(n))return n}let l=[e,...t],u=OA(U().cutAll(e.wrapped,t.map(e=>e.wrapped),{optimisation:n,simplify:r,fuzzyValue:a}),`CUT_ALL_NOT_3D`,`cutAll did not produce a 3D shape`);return u.ok&&s&&QO(l,u.value),u}function FA(e,t){let n=U(),r=wD(e.xDir,t),i=wD(e.yDir,t),a=wD(e.xDir,-t),o=wD(e.yDir,-t),s=e.origin,c=[...SD(SD(s,a),o)],l=[...SD(SD(s,r),o)],u=[...SD(SD(s,r),i)],d=[...SD(SD(s,a),i)],f=[n.makeLineEdge(c,l),n.makeLineEdge(l,u),n.makeLineEdge(u,d),n.makeLineEdge(d,c)],p=n.makeWire(f),m=n.makeFace(p,!0);for(let e of f)n.dispose(e);return n.dispose(p),m}function IA(e,t,{approximation:n=!0,planeSize:r=1e4}={}){if(U().isNull(e.wrapped))return k(F(N.NULL_SHAPE_INPUT,`section: shape is a null shape`));let i=FA(typeof t==`string`?j(HD(t)):t,r);try{return O(W(U().section(e.wrapped,i,n)))}catch(e){let n=e instanceof Error?e.message:String(e),r=typeof t==`string`?t:`custom`;return k(P(`SECTION_FAILED`,`Section with ${r} plane failed: ${n}`,e,{operation:`section`,plane:r},`The cutting plane may not intersect the shape. Verify plane position relative to shape bounds.`))}finally{U().dispose(i)}}function LA(e){let t=U(),n=new Map,r=new Map;for(let i of e){let e=$E(i),a=e[0]?t.hashCode(e[0].wrapped,G):-1,o=e.length>1&&e[1]?t.hashCode(e[1].wrapped,G):a;r.set(i,[a,o]);for(let e of[a,o]){let t=n.get(e)??[];t.push(i),n.set(e,t)}}return{vertexToEdges:n,edgeVertexHashes:r}}function RA(e,t,n){let r=t.vertexToEdges.get(e);if(r)for(let i of r){if(n.has(i))continue;let r=t.edgeVertexHashes.get(i);if(r)return n.add(i),{edge:i,nextTip:r[0]===e?r[1]:r[0]}}}function zA(e,t,n){n.add(e);let r=[e],i=t.edgeVertexHashes.get(e);if(!i)return r;let a=[i[1],i[0]];for(let e=0;e<2;e++){let i=a[e];if(i===void 0)continue;let o=RA(i,t,n);for(;o;)e===0?r.push(o.edge):r.unshift(o.edge),i=o.nextTip,o=RA(i,t,n)}return r}function BA(e){let t=U(),n=LA(e),r=new Set,i=[];for(let a of e){if(r.has(a))continue;let e=zA(a,n,r);try{let n=t.makeWire(e.map(e=>e.wrapped));i.push(W(n))}catch{}}return i}function VA(e){let t=U(),n=0,r=-1;for(let i=0;i<e.length;i++){let a=e[i];if(!a)continue;let o=t.boundingBox(a.wrapped),s=o.max[0]-o.min[0],c=o.max[1]-o.min[1],l=o.max[2]-o.min[2],u=s*s+c*c+l*l;u>r&&(r=u,n=i)}return n}function HA(e,t,n={}){let r=IA(e,t,n);if(!r.ok)return r;let i=QE(r.value);if(i.length===0){let e=XE(r.value);if(e.length===0)return k(P(`SECTION_FAILED`,`sectionToFace: section produced no geometry`,void 0,void 0,`The cutting plane may not intersect the shape. Verify plane position relative to shape bounds.`));i.push(...BA(e))}if(i.length===0)return k(P(`SECTION_FAILED`,`sectionToFace: section produced no usable geometry`,void 0,void 0,`The cutting plane may not intersect the shape. Verify plane position relative to shape bounds.`));let a=VA(i),o=aA(i,a),s=i.filter((e,t)=>t!==a);return xA(o,s.length>0?s:void 0)}function UA(e,t){if(t.length===0)return O(e);if(U().isNull(e.wrapped))return k(F(N.NULL_SHAPE_INPUT,`split: shape is a null shape`));for(let e=0;e<t.length;e++)if(U().isNull(aA(t,e).wrapped))return k(F(N.NULL_SHAPE_INPUT,`splitShape: tool at index ${e} is a null shape`));try{return O(W(U().split(e.wrapped,t.map(e=>e.wrapped))))}catch(e){let n=e instanceof Error?e.message:String(e);return k(P(`SPLIT_FAILED`,`Split operation failed on ${t.length} tool(s): ${n}`,e,{operation:`split`,toolCount:t.length},`The splitting tools may not intersect the shape. Ensure tools cross through the shape's interior.`))}}function WA(e,t,n={}){let r=[];for(let i of t){let t=IA(e,i,n);if(A(t))return t;r.push(t.value)}return O(r)}function GA(e,t,n){if(t.length===0)return O(e);let r=n?.optimisation===`commonFace`?1:n?.optimisation===`sameFace`?2:0,i=U(),a=t.map(e=>({op:e.op,tool:e.tool.wrapped}));try{let o=i.booleanPipeline?.(e.wrapped,a,{glueMode:r});if(o===void 0)return KA(e,t,n);if(o===null)return k(P(`BOOLEAN_PIPELINE_FAILED`,`Boolean pipeline returned null shape`));let s=W(o);return kE(s)?O(s):(FE(s),k(ho(`BOOLEAN_PIPELINE_NOT_3D`,`Pipeline result is not a 3D shape`)))}catch(e){return k(P(`BOOLEAN_PIPELINE_FAILED`,e instanceof Error?e.message:String(e)))}}function KA(e,t,n){let r=e,i={...n?.optimisation?{optimisation:n.optimisation}:{},unsafe:!0};for(let e of t){let t=e.op===`fuse`?kA(r,e.tool,i):e.op===`cut`?AA(r,e.tool,i):jA(r,e.tool,i);if(A(t))return t;r=j(t)}return O(r)}function qA(e){return W(U().sew(e.map(e=>e.wrapped)))}function JA(e,t=!1){let n=qA(e);return!t&&!EE(n)?k(ho(`WELD_NOT_SHELL`,`Could not make a shell from faces and shells`)):O(n)}function YA(e,t,n=[0,0,0],r=[0,0,1]){return yE(U().makeCylinder(e,t,[...n],[...r]))}function XA(e){return yE(U().makeSphere(e))}function ZA(e,t,n,r=[0,0,0],i=[0,0,1]){return yE(U().makeCone(e,t,n,[...r],[...i]))}function QA(e,t,n=[0,0,0],r=[0,0,1]){return yE(U().makeTorus(e,t,[...n],[...r]))}function $A(e,t,n){return yE(U().makeEllipsoid(e,t,n))}function ej(e){return mE(U().makeVertex(e[0],e[1],e[2]))}function tj(e,t,n=1e-6){return Ha(QD(U().offset(e.wrapped,t,n)),e=>Ha(eO(e),e=>kE(e)?O(e):k(ho(`OFFSET_NOT_3D`,`Could not offset to a 3d shape`))))}function nj(e){return xE(U().makeCompound(e.map(e=>e.wrapped)))}function rj(e){try{var t=OT();let n=t.u(qA(e)),r=W(U().solidFromShell(n.wrapped));return DE(r)?O(r):(FE(r),k(ho(`SOLID_BUILD_FAILED`,`Could not make a solid of faces and shells`)))}catch(e){t.e=e}finally{t.d()}}function ij(e){return{position:e.vertices,normal:e.normals,index:e.triangles}}function aj(e){return{position:e.vertices,normal:e.normals,index:e.triangles,groups:e.faceGroups.map((e,t)=>({start:e.start,count:e.count,materialIndex:t,faceId:e.faceId}))}}function oj(e){return{position:e.lines}}function sj(e,t){return{coarse:ij(e.coarse),fine:ij(e.fine),coarseDistance:t?.coarse??50,fineDistance:t?.fine??0}}function cj(e,t){let n=t?.step??50,r=t?.distances;if(r&&r.length!==e.length)throw Error(`toLODGeometryLevels: distances must have one entry per level (got ${r.length} for ${e.length} levels)`);let i=e.length-1;return e.map((e,t)=>({geometry:ij(e.mesh),distance:r?.[t]??(i-t)*n}))}function lj(e,t,n,r){if(t.length===0)return k(F(`CHAMFER_ANGLE_NO_EDGES`,`chamferDistAngle requires at least one edge`,void 0,{edgeCount:0}));if(n<=0)return k(F(`CHAMFER_ANGLE_BAD_DISTANCE`,`distance must be positive, got ${n}`,void 0,{distance:n}));if(r<=0||r>=90)return k(F(`CHAMFER_ANGLE_BAD_ANGLE`,`angleDeg must be in range (0, 90), got ${r}`,void 0,{angleDeg:r}));let i;try{let a=U(),o=t.map(e=>e.wrapped);i=a.chamferDistAngle(e.wrapped,o,n,r)}catch(e){return k(P(`CHAMFER_ANGLE_FAILED`,`chamferDistAngle kernel call failed: ${e instanceof Error?e.message:String(e)}`,e,{distance:n,angleDeg:r,edgeCount:t.length}))}let a=QD(i);if(A(a))return U().dispose(i),a;let o=W(a.value);return NE(i,o),kE(o)?O(o):(FE(o),k(ho(`CHAMFER_ANGLE_NOT_3D`,`chamferDistAngle did not produce a 3D shape`)))}function uj(e){let t=U();return t.getNurbsCurveData?t.getNurbsCurveData(e.wrapped):null}function dj(e){let t=U();return t.getNurbsSurfaceData?t.getNurbsSurfaceData(e.wrapped):null}var fj={cut:AA,cutAll:PA,fuse:kA,fuseAll:NA};function pj(e){return{totalInputs:e.totalInputs,batchAttempts:e.batchAttempts,batchSucceeded:e.batchSucceeded,singletonFallbacks:e.singletonFallbacks,failedInputs:[...e.failedInputs].sort((e,t)=>e-t)}}function mj(e,t,n={}){return hj(fj,e,t,n)}function hj(e,t,n,r={}){if(r.signal?.aborted)throw r.signal.reason;let i={totalInputs:n.length,batchAttempts:0,batchSucceeded:0,singletonFallbacks:0,failedInputs:new Set},a=gj(e,t,n,0,r,i);return A(a)?a:O({shape:a.value,telemetry:pj(i)})}function gj(e,t,n,r,i,a){if(n.length===0)return O(t);if(n.length===1)return _j(e,t,n,r,i,a);a.batchAttempts++;let o=Sj(()=>e.cutAll(t,n,i));if(o&&o.ok)return a.batchSucceeded++,o;if(i.signal?.aborted)throw i.signal.reason;let s=Math.floor(n.length/2),c=gj(e,t,n.slice(0,s),r,i,a);return c.ok?gj(e,c.value,n.slice(s),r+s,i,a):c}function _j(e,t,n,r,i,a){a.singletonFallbacks++;let o=oA(n),s=Sj(()=>e.cut(t,o,i));if(s&&s.ok)return s;if(i.signal?.aborted)throw i.signal.reason;return a.failedInputs.add(r),O(t)}function vj(e,t={}){return yj(fj,e,t)}function yj(e,t,n={}){if(n.signal?.aborted)throw n.signal.reason;if(t.length===0)return k(F(N.FUSE_ALL_EMPTY,`fuseAllBisect requires at least one shape`));let r={totalInputs:t.length,batchAttempts:0,batchSucceeded:0,singletonFallbacks:0,failedInputs:new Set},i=bj(e,t,0,n,r);return A(i)?i:O({shape:i.value,telemetry:pj(r)})}function bj(e,t,n,r,i){if(t.length===1)return O(oA(t));i.batchAttempts++;let a=Sj(()=>e.fuseAll(t,r));if(a&&a.ok)return i.batchSucceeded++,a;if(r.signal?.aborted)throw r.signal.reason;let o=Math.floor(t.length/2);return xj(e,bj(e,t.slice(0,o),n,r,i),bj(e,t.slice(o),n+o,r,i),t,n,o,r,i)}function xj(e,t,n,r,i,a,o,s){if(t.ok&&n.ok){s.singletonFallbacks++;let c=Sj(()=>e.fuse(t.value,n.value,o));if(c&&c.ok)return c;for(let e=a;e<r.length;e++)s.failedInputs.add(i+e);return t}if(t.ok){for(let e=a;e<r.length;e++)s.failedInputs.add(i+e);return t}if(n.ok){for(let e=0;e<a;e++)s.failedInputs.add(i+e);return n}return t}function Sj(e){try{return e()}catch{return null}}function Cj(e,t,n){return U().checkBoolean(e.wrapped,t.wrapped,n)}function wj(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function Tj(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function Ej(e,t,n,r){let i=jE(e);if(!kE(i)){let a=eE(i).toUpperCase();return NE(e,i),FE(i),k(ho(t,`${n}. Got ${a} instead.`,void 0,void 0,r))}return NE(e,i),O(i)}function Dj(e,t){let n=[],r=new Map;for(let i of e){let e=t(i)??0;typeof e==`number`&&e<=0||Array.isArray(e)&&(e[0]<=0||e[1]<=0)||(n.push(i),r.set(U().hashCode(i.wrapped,G),e))}return n.length===0?null:{edges:n,kernelParam:e=>r.get(U().hashCode(e,2147483647))??1}}function Oj(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a}={}){if(i?.aborted)throw i.reason;let o=wj(e,`fuseWithEvolution: first operand`);if(A(o))return o;let s=wj(t,`fuseWithEvolution: second operand`);if(A(s))return s;let c=XO([e,t]),{shape:l,evolution:u}=U().fuseWithHistory(e.wrapped,t.wrapped,c,G,{optimisation:n,simplify:r,fuzzyValue:a}),d=Ej(l,`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`,`Common causes: overlapping coplanar faces, zero-thickness geometry, or non-manifold input. Try autoHeal() on inputs first.`);return d.ok?(ZO(u,[e,t],d.value),O({shape:d.value,evolution:u})):d}function kj(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a}={}){if(i?.aborted)throw i.reason;let o=wj(e,`cutWithEvolution: base`);if(A(o))return o;let s=wj(t,`cutWithEvolution: tool`);if(A(s))return s;let c=XO([e,t]),{shape:l,evolution:u}=U().cutWithHistory(e.wrapped,t.wrapped,c,G,{optimisation:n,simplify:r,fuzzyValue:a}),d=Ej(l,`CUT_NOT_3D`,`Cut did not produce a 3D shape`,`Common causes: tool does not fully intersect the base, or produces a zero-thickness sliver. Ensure the tool extends through the shape.`);return d.ok?(ZO(u,[e,t],d.value),O({shape:d.value,evolution:u})):d}function Aj(e,t,{simplify:n=!1,signal:r,fuzzyValue:i}={}){if(r?.aborted)throw r.reason;let a=wj(e,`intersectWithEvolution: first operand`);if(A(a))return a;let o=wj(t,`intersectWithEvolution: second operand`);if(A(o))return o;let s=XO([e,t]),{shape:c,evolution:l}=U().intersectWithHistory(e.wrapped,t.wrapped,s,G,{simplify:n,fuzzyValue:i}),u=Ej(c,`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`,`Shapes may not overlap. Verify they share a common volume before intersecting.`);return u.ok?(ZO(l,[e,t],u.value),O({shape:u.value,evolution:l})):u}function jj(e,t,n){let r=Tj(e,`filletWithEvolution: shape`);if(A(r))return r;if(typeof n==`number`&&n<=0)return k(F(`INVALID_FILLET_RADIUS`,`Fillet radius must be positive`,void 0,void 0,`Provide a positive radius value greater than 0`));if(Array.isArray(n)&&(n[0]<=0||n[1]<=0))return k(F(`INVALID_FILLET_RADIUS`,`Fillet radii must both be positive`,void 0,void 0,`Both radius values must be greater than 0`));let i=t??XE(e);if(i.length===0)return k(F(N.FILLET_NO_EDGES,`No edges found for fillet`,void 0,void 0,`Check that the shape has edges, or adjust your edge finder criteria`));try{let t,r;if(typeof n==`function`){let e=Dj(i,n);if(!e)return k(F(N.FILLET_NO_EDGES,`No edges with positive radius for fillet`,void 0,void 0,`Check that the radius callback returns positive values`));t=e.edges,r=e.kernelParam}else t=[...i],r=n;let a=XO([e]),{shape:o,evolution:s}=U().filletWithHistory(e.wrapped,t.map(e=>e.wrapped),r,a,G),c=W(o);return kE(c)?(ZO(s,[e],c),O({shape:c,evolution:s})):(FE(c),k(P(N.FILLET_NOT_3D,`Fillet result is not a 3D shape`)))}catch(e){return k(P(`FILLET_FAILED`,`Fillet operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`fillet`,edgeCount:i.length,radius:n}))}}function Mj(e,t,n){let r=Tj(e,`chamferWithEvolution: shape`);if(A(r))return r;if(typeof n==`number`&&n<=0)return k(F(`INVALID_CHAMFER_DISTANCE`,`Chamfer distance must be positive`,void 0,void 0,`Provide a positive distance value greater than 0`));if(Array.isArray(n)&&(n[0]<=0||n[1]<=0))return k(F(`INVALID_CHAMFER_DISTANCE`,`Chamfer distances must both be positive`,void 0,void 0,`Both distance values must be greater than 0`));let i=t??XE(e);if(i.length===0)return k(F(N.CHAMFER_NO_EDGES,`No edges found for chamfer`));try{let t,r;if(typeof n==`function`){let e=Dj(i,n);if(!e)return k(F(N.CHAMFER_NO_EDGES,`No edges with positive distance for chamfer`));t=e.edges,r=e.kernelParam}else t=[...i],r=n;let a=XO([e]),{shape:o,evolution:s}=U().chamferWithHistory(e.wrapped,t.map(e=>e.wrapped),r,a,G),c=W(o);return kE(c)?(ZO(s,[e],c),O({shape:c,evolution:s})):(FE(c),k(P(N.CHAMFER_NOT_3D,`Chamfer result is not a 3D shape`)))}catch(e){return k(P(`CHAMFER_FAILED`,`Chamfer operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`chamfer`,edgeCount:i.length,distance:n}))}}function Nj(e,t,n,r=.001){let i=Tj(e,`shellWithEvolution: shape`);if(A(i))return i;if(n<=0)return k(F(`INVALID_THICKNESS`,`Shell thickness must be positive`));if(t.length===0)return k(F(`NO_FACES`,`At least one face must be specified for shell`));try{let i=XO([e]),{shape:a,evolution:o}=U().shellWithHistory(e.wrapped,t.map(e=>e.wrapped),n,i,G,r),s=W(a);return kE(s)?(ZO(o,[e],s),O({shape:s,evolution:o})):(FE(s),k(P(`SHELL_RESULT_NOT_3D`,`Shell result is not a 3D shape`)))}catch(e){return k(P(`SHELL_FAILED`,`Shell operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`shell`,faceCount:t.length,thickness:n}))}}function Pj(e,t,n){try{let r=W(U().positionOnCurve(e.wrapped,t.wrapped,n));return kE(r)?O(r):(FE(r),k(P(N.POSITION_ON_CURVE_FAILED,`positionOnCurve did not produce a 3D shape`)))}catch(e){return k(P(N.POSITION_ON_CURVE_FAILED,`Failed to position shape on curve at param ${n}`,e))}}function Fj(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function Ij(e,t){if(typeof e==`number`&&e<=0)return k(F(t.code,t.scalar,void 0,void 0,t.scalarHint));if(Array.isArray(e)&&(e[0]<=0||e[1]<=0))return k(F(t.code,t.pair,void 0,void 0,t.pairHint))}function Lj(e,t){let n=[],r=new Map;for(let i of e){let e=t(i)??0;typeof e==`number`&&e<=0||Array.isArray(e)&&(e[0]<=0||e[1]<=0)||(n.push(i),r.set(U().hashCode(i.wrapped,G),e))}return n.length===0?null:{edges:n,kernelParam:e=>{let t=r.get(U().hashCode(e,G));if(t===void 0)throw Error(`fillet/chamfer: edge hash not found — possible hash collision`);return t}}}function Rj(e,t,n,r,i){let a=W(t);return kE(a)?(ZO(e,n,a),O(a)):(FE(a),k(P(r,i)))}function zj(e,t){if(typeof t!=`function`)return{filteredFaces:[...e],kernelAngle:t};let n=[],r=new Map;for(let i of e){let e=t(i);e===null||e===0||Math.abs(e)>=90||(n.push(i),r.set(U().hashCode(i.wrapped,G),e))}return{filteredFaces:n,kernelAngle:e=>{let t=r.get(U().hashCode(e,G));if(t===void 0)throw Error(`draft: face hash not found — possible hash collision`);return t}}}function Bj(e,t){let n=Fj(e,`thicken: shape`);if(A(n))return n;try{let n=XO([e]),{shape:r,evolution:i}=U().thickenWithHistory(e.wrapped,t,n,G),a=W(r);return ZO(i,[e],a),O(a)}catch(e){return k(P(`THICKEN_FAILED`,`Thicken operation failed: ${e instanceof Error?e.message:String(e)}`,e))}}function Vj(e,t,n){let r=Fj(e,`fillet: shape`);if(A(r))return r;let i=Ij(n,{code:`INVALID_FILLET_RADIUS`,scalar:`Fillet radius must be positive`,pair:`Fillet radii must both be positive`,scalarHint:`Provide a positive radius value greater than 0`,pairHint:`Both radius values must be greater than 0`});if(i)return i;let a=t??XE(e);if(a.length===0)return k(F(N.FILLET_NO_EDGES,`No edges found for fillet`,void 0,void 0,`Check that the shape has edges, or adjust your edge finder criteria`));if(typeof n==`function`){let e=Lj(a,n);return e?O({filteredEdges:e.edges,kernelRadius:e.kernelParam,selectedCount:a.length}):k(F(N.FILLET_NO_EDGES,`No edges with positive radius for fillet`,void 0,void 0,`Check that the radius callback returns positive values`))}return O({filteredEdges:[...a],kernelRadius:n,selectedCount:a.length})}function Hj(e,t,n,{trackEvolution:r=!0}={}){let i=Vj(e,t,n);if(A(i))return i;let{filteredEdges:a,kernelRadius:o,selectedCount:s}=i.value;try{let t=a.map(e=>e.wrapped);if(!r){let n=W(U().fillet(e.wrapped,t,o));return kE(n)?O(n):k(P(N.FILLET_NOT_3D,`Fillet result is not a 3D shape`))}let n=XO([e]),{shape:i,evolution:s}=U().filletWithHistory(e.wrapped,t,o,n,G);return Rj(s,i,[e],N.FILLET_NOT_3D,`Fillet result is not a 3D shape`)}catch(e){return k(P(`FILLET_FAILED`,`Fillet operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`fillet`,edgeCount:s,radius:n}))}}function Uj(e,t,n){let r=Fj(e,`chamfer: shape`);if(A(r))return r;let i=Ij(n,{code:`INVALID_CHAMFER_DISTANCE`,scalar:`Chamfer distance must be positive`,pair:`Chamfer distances must both be positive`,scalarHint:`Provide a positive distance value greater than 0`,pairHint:`Both distance values must be greater than 0`});if(i)return i;let a=t??XE(e);if(a.length===0)return k(F(N.CHAMFER_NO_EDGES,`No edges found for chamfer`));try{let t,r;if(typeof n==`function`){let e=Lj(a,n);if(!e)return k(F(N.CHAMFER_NO_EDGES,`No edges with positive distance for chamfer`));t=e.edges,r=e.kernelParam}else t=[...a],r=n;let i=XO([e]),{shape:o,evolution:s}=U().chamferWithHistory(e.wrapped,t.map(e=>e.wrapped),r,i,G);return Rj(s,o,[e],N.CHAMFER_NOT_3D,`Chamfer result is not a 3D shape`)}catch(e){return k(P(`CHAMFER_FAILED`,`Chamfer operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`chamfer`,edgeCount:a.length,distance:n}))}}function Wj(e,t,n,r=.001,{trackEvolution:i=!0}={}){let a=Fj(e,`shell: shape`);if(A(a))return a;if(n<=0)return k(F(`INVALID_THICKNESS`,`Shell thickness must be positive`));if(t.length===0)return k(F(`NO_FACES`,`At least one face must be specified for shell`));try{if(!i){let i=W(U().shell(e.wrapped,t.map(e=>e.wrapped),n,r));return kE(i)?O(i):k(P(`SHELL_RESULT_NOT_3D`,`Shell result is not a 3D shape`))}let a=XO([e]),{shape:o,evolution:s}=U().shellWithHistory(e.wrapped,t.map(e=>e.wrapped),n,a,G,r),c=W(o);return kE(c)?(ZO(s,[e],c),O(c)):k(P(`SHELL_RESULT_NOT_3D`,`Shell result is not a 3D shape`))}catch(e){return k(P(`SHELL_FAILED`,`Shell operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`shell`,faceCount:t.length,thickness:n}))}}function Gj(e,t,n=1e-6){let r=Fj(e,`offset: shape`);if(A(r))return r;if(Math.abs(t)<1e-10)return k(F(`ZERO_OFFSET`,`Offset distance cannot be zero`));try{let r=XO([e]),{shape:i,evolution:a}=U().offsetWithHistory(e.wrapped,t,r,G,n),o=W(i);return kE(o)?(ZO(a,[e],o),O(o)):k(P(`OFFSET_RESULT_NOT_3D`,`Offset result is not a 3D shape`))}catch(e){return k(P(`OFFSET_FAILED`,`Offset operation failed: ${e instanceof Error?e.message:String(e)}`,e))}}function Kj(e,t,n){let r=Fj(e,`draft: shape`);if(A(r))return r;if(typeof n==`number`){if(Math.abs(n)<1e-10)return k(F(N.DRAFT_INVALID_ANGLE,`Draft angle cannot be zero`,void 0,void 0,`Provide a non-zero angle in degrees`));if(Math.abs(n)>=90)return k(F(N.DRAFT_INVALID_ANGLE,`Draft angle must be between -90 and 90 degrees (exclusive)`,void 0,void 0,`Typical draft angles are 1-5 degrees for injection molding`))}if(t.length===0)return k(F(N.DRAFT_NO_FACES,`No faces specified for draft`,void 0,void 0,`Select at least one face to apply the draft angle to`))}function qj(e,t,n,r,i){let a=Kj(e,t,i);if(a)return a;try{let{filteredFaces:a,kernelAngle:o}=zj(t,i);if(a.length===0)return k(F(N.DRAFT_NO_FACES,`No faces with valid draft angle`,void 0,void 0,`Check that the angle callback returns non-zero values between -90 and 90 degrees`));let s=XO([e]),{shape:c,evolution:l}=U().draftWithHistory(e.wrapped,a.map(e=>e.wrapped),[n[0],n[1],n[2]],[r[0],r[1],r[2]],o,s,G);return Rj(l,c,[e],N.DRAFT_NOT_3D,`Draft result is not a 3D shape`)}catch(e){let n=e instanceof Error?e.message:String(e);return k(P(N.DRAFT_FAILED,`Draft operation failed: ${n}`,e,{operation:`draft`,faceCount:t.length,angle:i}))}}function Jj(e,t,n){if(n.length===0)return k(F(N.VARIABLE_FILLET_FAILED,`radii must contain at least one radius spec`));for(let e of n)if(e.radius<=0)return k(F(N.VARIABLE_FILLET_FAILED,`All radius values must be positive`));let r=U();try{let i=JSON.stringify({edge:r.hashCode(t.wrapped,G),radii:n.map(e=>({param:e.param,radius:e.radius}))}),a=W(r.filletVariable(e.wrapped,i));return kE(a)?DE(a)?O(a):(FE(a),k(P(N.VARIABLE_FILLET_FAILED,`Variable-radius fillet did not produce a solid`))):(FE(a),k(P(N.VARIABLE_FILLET_FAILED,`Variable-radius fillet did not produce a 3D shape`)))}catch(e){return k(P(N.VARIABLE_FILLET_FAILED,`Variable-radius fillet failed`,e))}}function Yj(e){return pD(e)}function Xj(e){if(!DE(e))return k(F(`NOT_A_SOLID`,`Input shape is not a solid`));let t=Yj(e);try{let n=U().healSolid(e.wrapped);if(!n)return t?O(e):k(P(N.HEAL_NO_EFFECT,`Solid healing had no effect — shape is still invalid`));let r=W(n);return DE(r)?(YE(r),Yj(r)?O(r):(FE(r),k(P(`HEAL_SOLID_INCOMPLETE`,`Healed result is still invalid after ShapeFix_Solid`)))):(FE(r),k(P(`HEAL_RESULT_NOT_SOLID`,`Healed result is not a solid`)))}catch(e){return k(P(`HEAL_SOLID_FAILED`,`Solid healing failed`,e))}}function Zj(e){if(!TE(e))return k(F(`NOT_A_FACE`,`Input shape is not a face`));try{let t=W(U().healFace(e.wrapped));return TE(t)?O(t):(FE(t),k(P(`HEAL_RESULT_NOT_FACE`,`Healed result is not a face`)))}catch(e){return k(P(`HEAL_FACE_FAILED`,`Face healing failed`,e))}}function Qj(e,t){if(!wE(e))return k(F(`NOT_A_WIRE`,`Input shape is not a wire`));try{let n=W(U().healWire(e.wrapped,t?.wrapped));return wE(n)?O(n):(FE(n),k(P(`HEAL_RESULT_NOT_WIRE`,`Healed result is not a wire`)))}catch(e){return k(P(`HEAL_WIRE_FAILED`,`Wire healing failed`,e))}}function $j(e){return DE(e)?Xj(e):TE(e)?Zj(e):wE(e)?Qj(e):O(e)}function eM(e,t){let n=t?.fixWires!==!1,r=t?.fixFaces!==!1,i=t?.fixSolids!==!1,a=t?.fixSelfIntersection===!0,o=t?.sewTolerance,s=[],c=[];if(Yj(e))return O({shape:e,report:{isValid:!0,alreadyValid:!0,wiresHealed:0,facesHealed:0,solidHealed:!1,steps:[`Shape already valid`],diagnostics:[{name:`validation`,attempted:!0,succeeded:!0}]}});s.push(`Shape invalid — applying shape-level healing`);let l=QE(e).length,u=ZE(e).length,d=e,f=!1,p=t=>{let n=d;d=t,n!==e&&n.wrapped!==t.wrapped&&FE(n)};if(o!==void 0)try{p(W(U().sew([d.wrapped],o))),s.push(`Applied sewing with tolerance ${o}`),c.push({name:`sew`,attempted:!0,succeeded:!0,detail:`tolerance=${o}`})}catch(e){let t=e instanceof Error?e.message:String(e);s.push(`Sewing failed: ${t}`),c.push({name:`sew`,attempted:!0,succeeded:!1,detail:t})}if(a&&n){let e=QE(d),t=0;for(let n of e)try{U().fixSelfIntersection(n.wrapped),t++}catch{}s.push(`Self-intersection fix: ${t}/${e.length} wires`),c.push({name:`fixSelfIntersection`,attempted:!0,succeeded:t>0,detail:`${t}/${e.length} wires fixed`})}if(DE(d)&&i||TE(d)&&r||wE(d)&&n){let t=$j(d);za(t)?(p(t.value),DE(e)?(f=!0,s.push(`Applied ShapeFix_Solid`),c.push({name:`healSolid`,attempted:!0,succeeded:!0})):TE(e)?(s.push(`Applied ShapeFix_Face`),c.push({name:`healFace`,attempted:!0,succeeded:!0})):(s.push(`Applied ShapeFix_Wire`),c.push({name:`healWire`,attempted:!0,succeeded:!0}))):(s.push(`Shape-level healing failed`),c.push({name:`healShape`,attempted:!0,succeeded:!1}))}else c.push({name:`healShape`,attempted:!1,succeeded:!1,detail:`skipped by options`});let m=QE(d).length,h=ZE(d).length,g=Math.abs(m-l),_=Math.abs(h-u);g>0&&s.push(`Wire count changed by ${g}`),_>0&&s.push(`Face count changed by ${_}`);let v=Yj(d);return s.push(v?`Final validation: valid`:`Final validation: still invalid`),c.push({name:`finalValidation`,attempted:!0,succeeded:v}),O({shape:d,report:{isValid:v,alreadyValid:!1,wiresHealed:g,facesHealed:_,solidHealed:f,steps:s,diagnostics:c}})}function tM(e){try{return O(W(U().fixShape(e.wrapped)))}catch(e){return k(P(N.FIX_SHAPE_FAILED,`ShapeFix_Shape failed`,e))}}function nM(e){try{let t=W(U().solidFromShell(e.wrapped));return DE(t)?Yj(t)?O(t):(FE(t),k(P(N.SOLID_FROM_SHELL_FAILED,`solidFromShell produced an invalid solid`))):(FE(t),k(P(N.SOLID_FROM_SHELL_FAILED,`solidFromShell did not produce a solid`)))}catch(e){return k(P(N.SOLID_FROM_SHELL_FAILED,`Failed to create solid from shell`,e))}}function rM(e){try{let t=W(U().fixSelfIntersection(e.wrapped));return wE(t)?O(t):(FE(t),k(P(N.FIX_SELF_INTERSECTION_FAILED,`Result is not a wire`)))}catch(e){return k(P(N.FIX_SELF_INTERSECTION_FAILED,`Failed to fix wire self-intersection`,e))}}function iM(e,{profile:t,endFactor:n=1}){return e<1e-10?k(F(`INVALID_EXTRUSION_LENGTH`,`Extrusion length too small (< 1e-10)`)):t!==`s-curve`&&t!==`linear`?k(F(`UNSUPPORTED_PROFILE`,`Unsupported extrusion profile: ${String(t)}`)):O(U().buildExtrusionLaw(t,e,n).Trim(0,e,1e-6))}function aM(e,t){let n=U(),r=n.makeLineEdge([...e],[...t]),i=n.makeWire([r]);return n.dispose(r),W(i)}function oM(e,t,n,r,i,a=!1){return W(U().makeHelixWire(e,t,n,[...r],[...i],a))}function sM(e){let t=W(e.shape),n=W(e.firstShape),r=W(e.lastShape),i=()=>{FE(t),FE(n),FE(r)};return kE(t)?wE(n)?wE(r)?O([t,n,r]):(i(),k(ho(`SWEEP_END_NOT_WIRE`,`Sweep did not produce an end Wire`))):(i(),k(ho(`SWEEP_START_NOT_WIRE`,`Sweep did not produce a start Wire`))):(i(),k(ho(`SWEEP_NOT_3D`,`Sweep did not produce a 3D shape`)))}function cM(e,t,n={},r=!1){if(n.mode===`simple`&&!r){let n=W(U().simplePipe(e.wrapped,t.wrapped));return kE(n)?O(n):(FE(n),k(ho(`SWEEP_NOT_3D`,`Simple pipe did not produce a 3D shape`)))}let{frenet:i=!1,auxiliarySpine:a,law:o=null,transitionMode:s=`right`,withContact:c,support:l,forceProfileSpineOthogonality:u,tolerance:d,boundTolerance:f,angularTolerance:p,maxDegree:m,maxSegments:h}=n,g=U(),_=s===`round`?!0:!!u,v=g.sweepPipeShell(e.wrapped,t.wrapped,{transitionMode:s,contact:!!c,correction:_,frenet:i,shellMode:r,...a?.wrapped?{auxiliary:a.wrapped}:{},...o===null?{}:{law:o},...l===null?{}:{support:l},tolerance:d,boundTolerance:f,angularTolerance:p,maxDegree:m,maxSegments:h});if(r&&typeof v==`object`&&`firstShape`in v)return sM(v);let y=W(v);return kE(y)?O(y):(FE(y),k(ho(`SWEEP_NOT_3D`,`Sweep did not produce a 3D shape`)))}function lM(e,t,n,r){return cM(e,aM(t,SD(t,n)),{support:r})}function uM(e,t,n,r,i=!1){try{var a=OT();let o=OD(n);if(o<1e-10)return k(F(`ZERO_LENGTH_EXTRUSION`,`Extrusion vector cannot have zero length`));let s=SD(t,n),c=a.u(aM(t,s)),l=null;if(r){let e=iM(o,r);if(A(e))return e;l=e.value}return cM(e,c,{law:l},i)}catch(e){a.e=e}finally{a.d()}}function dM(e,t,n,r,i,a=!1){try{var o=OT();if(Math.abs(t)<1e-10)return k(F(`ZERO_TWIST_ANGLE`,`Twist angle cannot be zero`));let s=OD(r);if(s<1e-10)return k(F(`ZERO_LENGTH_EXTRUSION`,`Extrusion vector cannot have zero length`));let c=SD(n,r),l=o.u(aM(n,c)),u=t<0,d=360/Math.abs(t)*s,f=o.u(oM(d,s,1,n,r,u)),p=null;if(i){let e=iM(s,i);if(A(e))return e;p=e.value}return cM(e,l,{auxiliarySpine:f,law:p},a)}catch(e){o.e=e}finally{o.d()}}function fM(e){let t=e.map(e=>e.location);for(let e=0;e<t.length;e++){let n=t[e];if(n!==void 0&&(n<0||n>1))return F(N.MULTI_SWEEP_FAILED,`Section ${e} location ${n} is out of range [0, 1]`)}let n=t.filter(e=>e!==void 0);for(let e=1;e<n.length;e++)if((n[e]??0)<=(n[e-1]??0))return F(N.MULTI_SWEEP_FAILED,`Section locations must be strictly increasing`)}function pM(e,t,n){let[r,i]=n.curveParameters(t.wrapped),a=i-r,o=Array(e.length);for(let t=0;t<e.length;t++){let n=e[t]?.location;o[t]=n===void 0?NaN:r+n*a}let s=-1,c=r;for(let t=0;t<=e.length;t++){let n=t===e.length;if(!n&&!Number.isNaN(o[t]??NaN)||n){let e=n?i:o[t]??i,a=t-s-1;for(let t=1;t<=a;t++)o[s+t]=c+t/(a+1)*(e-c);n||(s=t,c=o[t]??r)}}for(let e=1;e<o.length;e++)if((o[e]??0)<=(o[e-1]??0))return k(F(N.MULTI_SWEEP_FAILED,`Computed section parameters are not strictly increasing at index ${e} (${o[e-1]?.toFixed(4)} >= ${o[e]?.toFixed(4)})`));return O(o)}function mM(e,t,n){if(e.length<2)return k(F(N.MULTI_SWEEP_INSUFFICIENT_SECTIONS,`Multi-section sweep requires at least 2 sections, got ${e.length}`));let{solid:r=!0,ruled:i=!1,tolerance:a=1e-6}=n??{},o=fM(e);if(o)return k(o);try{let n=U(),o=pM(e,t,n);if(A(o))return o;let s=o.value,c=[],l=[];try{for(let r=0;r<e.length;r++){let i=s[r],a=e[r];if(i===void 0||a===void 0)continue;let o=n.positionOnCurve(a.wire.wrapped,t.wrapped,i);c.push(o),l.push(n.downcast(o,`wire`))}let o=W(n.loftAdvanced(l,{solid:r,ruled:i,tolerance:a}));return kE(o)?O(o):(FE(o),k(ho(`MULTI_SWEEP_NOT_3D`,`Multi-section sweep did not produce a 3D shape`)))}finally{for(let e of l)n.dispose(e);for(let e of c)n.dispose(e)}}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.MULTI_SWEEP_FAILED,`Multi-section sweep failed: ${t}`,e,void 0,`Common causes: profile too large for path curvature, self-intersecting result, or discontinuous path. Try simplifying the profile or path.`))}}function hM(e,t,n,r={}){let{transition:i=`transformed`,solid:a=!0,tolerance:o}=r;try{let r=U(),s=!a,c=n.length>0?n[0]?.wrapped:void 0,l=r.sweepPipeShell(e.wrapped,t.wrapped,{transitionMode:i,...c?{auxiliary:c}:{},shellMode:s,...o===void 0?{}:{tolerance:o,boundTolerance:o}}),u=W(typeof l==`object`&&`shape`in l?l.shape:l);return kE(u)?O(u):(FE(u),k(ho(`GUIDED_SWEEP_NOT_3D`,`Guided sweep did not produce a 3D shape`)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.GUIDED_SWEEP_FAILED,`Guided sweep failed: ${t}`,e,void 0,`Common causes: profile too large for path curvature, self-intersecting result, or discontinuous path. Try simplifying the profile or path.`))}}function gM(e,t){if(U().isNull(e.wrapped))return k(F(N.NULL_SHAPE_INPUT,`extrude: face is a null shape`));if(OD(t)<1e-10)return k(F(`EXTRUDE_ZERO_VECTOR`,`extrude: extrusion vector has zero length`));try{let n=U(),r=OD(t),i=jD(t),a=n.extrude(e.wrapped,[...i],r),o=yE(n.downcast(a,`solid`));return NE(a,o),O(o)}catch(e){return k(P(`EXTRUDE_FAILED`,`Extrusion operation failed`,e,{operation:`extrude`,vectorLength:OD(t)}))}}function _M(e,t=[0,0,0],n=[0,0,1],r=2*Math.PI){if(U().isNull(e.wrapped))return k(F(N.NULL_SHAPE_INPUT,`revolve: face is a null shape`));try{let i=W(U().revolveVec(e.wrapped,[...t],[...n],r));return kE(i)?O(i):(FE(i),k(ho(`REVOLUTION_NOT_3D`,`Revolution did not produce a 3D shape`)))}catch(e){return k(P(`REVOLVE_FAILED`,`Revolution operation failed`,e,{operation:`revolve`,angle:r}))}}function vM(e){if(e.length===0)return O([]);let t=U(),n=[];for(let t=0;t<e.length;t++){let r=e[t];if(!r)continue;let i=typeof r.height==`number`?[0,0,r.height]:r.height,a=OD(i);if(a<1e-10)return k(F(`EXTRUDE_ALL_ZERO_VECTOR`,`extrudeAll: entry ${t} has zero-length extrusion vector`));let o=[...jD(i)];n.push({face:r.face.wrapped,direction:o,length:a})}try{return O((t.extrudeBatch?.(n)??n.map(e=>t.extrude(e.face,e.direction,e.length))).map(e=>{let n=yE(t.downcast(e,`solid`));return NE(e,n),n}))}catch(e){return k(P(`EXTRUDE_ALL_FAILED`,`Batch extrusion operation failed`,e))}}function yM(e,{ruled:t=!0,startPoint:n,endPoint:r,tolerance:i=1e-6}={},a=!1){if(e.length===0&&!n&&!r)return k(F(`LOFT_EMPTY`,`Loft requires at least one wire or start/end point`));let o=U(),s=n?o.makeVertex(...vD(n)):void 0,c=r?o.makeVertex(...vD(r)):void 0;try{let n=W(o.loftAdvanced(e.map(e=>e.wrapped),{solid:!a,ruled:t,tolerance:i,...s?{startVertex:s}:{},...c?{endVertex:c}:{}}));return kE(n)?O(n):(FE(n),k(ho(`LOFT_NOT_3D`,`Loft did not produce a 3D shape`)))}catch(e){return k(P(`LOFT_FAILED`,`Loft operation failed`,e,void 0,`Common causes: wire profiles with different edge counts, self-intersecting result, or profiles too far apart. Ensure profiles are compatible and ordered.`))}}function bM(e){if(e.length===0)return O([]);let t=U(),n=[],r=e.map(e=>{let r=e.startPoint?t.makeVertex(...vD(e.startPoint)):void 0,i=e.endPoint?t.makeVertex(...vD(e.endPoint)):void 0;return r&&n.push(r),i&&n.push(i),{wires:e.wires.map(e=>e.wrapped),solid:!0,ruled:e.ruled??!0,tolerance:e.tolerance??1e-6,startVertex:r,endVertex:i}});try{let e=t.loftBatch?.(r)??r.map(e=>t.loftAdvanced(e.wires,{solid:e.solid,ruled:e.ruled,tolerance:e.tolerance,startVertex:e.startVertex,endVertex:e.endVertex})),n=[];for(let t of e){let e=W(t);if(!kE(e))return FE(e),k(ho(`LOFT_ALL_NOT_3D`,`Batch loft entry did not produce a 3D shape`));n.push(e)}return O(n)}catch(e){return k(P(`LOFT_ALL_FAILED`,`Batch loft operation failed`,e))}finally{for(let e of n)t.dispose(e)}}var xM=new WeakMap;function SM(e,t){return xM.get(e)?.get(t)}function CM(e,t,n){let r=xM.get(e);r||(r=new Map,xM.set(e,r)),r.set(t,n)}function wM(e){return U().isNull(e.wrapped)}function TM(e){return k(F(N.NULL_SHAPE_INPUT,`${e}: shape is a null shape`))}function EM(e){let t=SM(e.wrapped,`volume`);if(t)return O(t);if(wM(e))return TM(`measureVolumeProps`);let n=U(),r=n.shapeType(e.wrapped);if(r!==`solid`&&r!==`compsolid`&&r!==`compound`){let t={mass:0,volume:0,centerOfMass:[0,0,0]};return CM(e.wrapped,`volume`,t),O(t)}let i=n.volume(e.wrapped),a=VE(()=>n.centerOfMass(e.wrapped),N.CENTER_OF_MASS_FAILED,`Failed to compute center of mass`);if(!a.ok)return a;let o={mass:i,volume:i,centerOfMass:a.value};return CM(e.wrapped,`volume`,o),O(o)}function DM(e){let t=SM(e.wrapped,`surface`);if(t)return O(t);if(wM(e))return TM(`measureSurfaceProps`);let n=U(),r=n.area(e.wrapped),i=VE(()=>n.centerOfMass(e.wrapped),N.CENTER_OF_MASS_FAILED,`Failed to compute center of mass`);if(!i.ok)return i;let a={mass:r,area:r,centerOfMass:i.value};return CM(e.wrapped,`surface`,a),O(a)}function OM(e){let t=SM(e.wrapped,`linear`);if(t)return O(t);if(wM(e))return TM(`measureLinearProps`);let n=U(),r=n.length(e.wrapped),i={mass:r,length:r,centerOfMass:n.linearCenterOfMass(e.wrapped)};return CM(e.wrapped,`linear`,i),O(i)}function kM(e){let t=EM(e);return t.ok?O(t.value.mass):t}function AM(e){let t=DM(e);return t.ok?O(t.value.mass):t}function jM(e){let t=OM(e);return t.ok?O(t.value.mass):t}function MM(e,t){return wM(e)||wM(t)?TM(`measureDistance`):O(U().distance(e.wrapped,t.wrapped).value)}function NM(e,t){if(wM(e)||wM(t))return TM(`measureDistanceProps`);let n=U().distance(e.wrapped,t.wrapped);return O({distance:n.value,point1:n.point1,point2:n.point2})}function PM(e){if(wM(e))return TM(`createDistanceQuery`);let t=U().createDistanceQuery(e.wrapped);return O({distanceTo(e){return wM(e)?TM(`createDistanceQuery.distanceTo`):O(t.distanceTo(e.wrapped).value)},dispose(){t.dispose()}})}function FM(e,t,n){if(wM(e))return TM(`measureCurvatureAt`);let r=U().surfaceCurvature(e.wrapped,t,n);return O({mean:r.mean,gaussian:r.gaussian,maxCurvature:r.max,minCurvature:r.min,maxDirection:r.maxDirection,minDirection:r.minDirection})}function IM(e){if(wM(e))return TM(`measureCurvatureAtMid`);let t=cO(e),n=(t.uMin+t.uMax)/2,r=(t.vMin+t.vMax)/2,i=U().surfaceCurvature(e.wrapped,n,r);return O({mean:i.mean,gaussian:i.gaussian,maxCurvature:i.max,minCurvature:i.min,maxDirection:i.maxDirection,minDirection:i.minDirection})}function LM(e,t){return e.map(e=>IE(e,t))}function RM(e,t){let n=U(),r=n.iterShapes(e,t),i=[],a=new Map;for(let e of r){let r=n.hashCode(e,G),o=a.get(r);if(o?.some(t=>n.isSame(t,e))){n.dispose(e);continue}let s=LE(e,t);i.push(s),o?o.push(s.wrapped):a.set(r,[s.wrapped])}return i}function zM(e){let t=U(),n=new Map;for(let r of e){let e=t.hashCode(r.wrapped,G),i=n.get(e);i?i.push(r):n.set(e,[r])}return n}function BM(e,t,n){let r=U();return e.get(n)?.find(e=>r.isSame(e.wrapped,t))}function VM(e){let t=qE(e);if(t.edgeToFaces)return t.edgeToFaces;let n=U(),r=ZE(e),i=zM(XE(e)),a=new Map;for(let e of r)for(let t of n.iterShapes(e.wrapped,`edge`)){let r=n.hashCode(t,G),o=BM(i,t,r);if(n.dispose(t),!o)continue;let s=a.get(r);s||(s=[],a.set(r,s)),s.some(t=>n.isSame(t.edge,o.wrapped)&&n.isSame(t.face,e.wrapped))||s.push({edge:o.wrapped,face:e.wrapped})}return t.edgeToFaces=a,a}function HM(e){let t=qE(e);if(t.vertexToFaces)return t.vertexToFaces;let n=U(),r=ZE(e),i=zM($E(e)),a=new Map;for(let e of r)for(let t of n.iterShapes(e.wrapped,`vertex`)){let r=n.hashCode(t,G),o=BM(i,t,r);if(n.dispose(t),!o)continue;let s=a.get(r);s||(s=[],a.set(r,s)),s.some(t=>n.isSame(t.vertex,o.wrapped)&&n.isSame(t.face,e.wrapped))||s.push({vertex:o.wrapped,face:e.wrapped})}return t.vertexToFaces=a,a}function UM(e,t){let n=U(),r=VM(e),i=n.hashCode(t.wrapped,G),a=r.get(i)??[],o=[],s=new Map;for(let e of a){if(!n.isSame(e.edge,t.wrapped))continue;let r=n.hashCode(e.face,G),i=s.get(r);i?i.some(t=>n.isSame(t,e.face))||(i.push(e.face),o.push(e.face)):(s.set(r,[e.face]),o.push(e.face))}return LM(o,`face`)}function WM(e,t){let n=U(),r=HM(e),i=n.hashCode(t.wrapped,G),a=r.get(i)??[],o=[],s=new Map;for(let e of a){if(!n.isSame(e.vertex,t.wrapped))continue;let r=n.hashCode(e.face,G),i=s.get(r);i?i.some(t=>n.isSame(t,e.face))||(i.push(e.face),o.push(e.face)):(s.set(r,[e.face]),o.push(e.face))}return LM(o,`face`)}function GM(e){return RM(e.wrapped,`edge`)}function KM(e){return RM(e.wrapped,`vertex`)}function qM(e){return RM(e.wrapped,`wire`)}function JM(e){return RM(e.wrapped,`vertex`)}function YM(e,t){let n=U(),r=VM(e),i=RM(t.wrapped,`edge`),a=[],o=new Map;for(let e of i){let i=n.hashCode(e.wrapped,G),s=r.get(i)??[];for(let e of s){if(n.isSame(e.face,t.wrapped))continue;let r=n.hashCode(e.face,G),i=o.get(r);i?i.some(t=>n.isSame(t,e.face))||(i.push(e.face),a.push(e.face)):(o.set(r,[e.face]),a.push(e.face))}}for(let e of i)e[Symbol.dispose]();return LM(a,`face`)}function XM(e,t){let n=U(),r=n.iterShapes(e.wrapped,`edge`),i=n.iterShapes(t.wrapped,`edge`),a=new Map;for(let e of i){let t=n.hashCode(e,G),r=a.get(t);r||(r=[],a.set(t,r)),r.push(e)}let o=[];for(let e of r)a.get(n.hashCode(e,2147483647))?.some(t=>n.isSame(e,t))?o.push(LE(e,`edge`)):n.dispose(e);for(let e of i)n.dispose(e);return o}function ZM(e,t){let n=0,r=aO(t);if(e.surfaceType!==void 0)if(r===e.surfaceType)n+=1;else return-1/0;if(e.normal!==void 0){let r=fO(t),i=e.normal[0]*r[0]+e.normal[1]*r[1]+e.normal[2]*r[2];if(i<.707)return-1/0;n+=i}if(e.centroid!==void 0){let r=pO(t),i=e.centroid[0]-r[0],a=e.centroid[1]-r[1],o=e.centroid[2]-r[2],s=i*i+a*a+o*o;if(s>100)return-1/0;n-=s/100}if(e.area!==void 0&&e.area>0){let r=AM(t);if(r.ok&&r.value>0){let t=Math.abs(Math.log(e.area/r.value));t>1&&(n-=t)}}return n}function QM(e){let t=aO(e),n=fO(e),r=pO(e),i=AM(e);return{entityType:`face`,surfaceType:t,normal:n,centroid:r,area:i.ok?i.value:void 0}}var $M=.9;function eN(e){if(e[2]>$M)return`box:top`;if(e[2]<-.9)return`box:bottom`;if(e[1]>$M)return`box:back`;if(e[1]<-.9)return`box:front`;if(e[0]>$M)return`box:right`;if(e[0]<-.9)return`box:left`}function tN(e,t){if(aO(t)!==`PLANE`)return;let n=fO(t)[2];if(n>$M)return`${e}:top`;if(n<-.9)return`${e}:bottom`}function nN(e){return aO(e)===`CYLINDRE`?`cylinder:lateral`:tN(`cylinder`,e)}function rN(e){return aO(e)===`CONE`?`cone:lateral`:tN(`cone`,e)}function iN(e){return aO(e)===`SPHERE`?`sphere:surface`:void 0}var aN={box:e=>eN(fO(e)),cylinder:nN,cone:rN,sphere:iN};function oN(e,t){let n=new Map,r=aN[t],i=U(),a=0;for(let o of i.iterShapes(e.wrapped,`face`)){let e=IE(o,`face`);try{let i=r?.(e),o=i!==void 0&&!n.has(i)?i:`${t}:face_${a}`;n.set(o,[mk(e)]),a++}finally{PE(e,o)}}return n}function sN(e,t,n){return{origin:e,role:t,hint:QM(n)}}function cN(e,t){let n=[];for(let r of e){if(t.deleted.has(r))continue;let e=t.modified.get(r),i=e&&e.length>0?e:[r];for(let e of i)n.includes(e)||n.push(e)}return n}function lN(e,t,n){let r=e.get(t);if(!r)return e;let i=new Map;for(let[e,t]of r){let r=cN(t,n);r.length>0&&i.set(e,r)}let a=new Map;for(let[n,r]of e)a.set(n,n===t?i:r);return a}var uN=.1,dN=.5;function fN(e,t,n){let r=-1/0,i,a=-1/0,o=[];for(let s of t){let t=n(e,s);t>dN&&o.push([s,t]),t>r?(a=r,r=t,i=s):t>a&&(a=t)}return i!==void 0&&r>dN?r-a<uN&&o.length>1?{kind:`ambiguous`,candidates:o.filter(([,e])=>e>=r-uN).map(([e])=>e)}:{kind:`match`,face:i}:{kind:`none`}}function pN(e,t,n,r){let i=ZE(n),a=r??ZM,o=t.get(e.origin)?.get(e.role);if(o!==void 0&&o.length>0){let t=i.filter(e=>o.includes(mk(e)));if(t.length===1){let[e]=t;if(e!==void 0)return{face:e,confidence:`exact`}}else if(t.length===0)return{ref:e,reason:`deleted`};else{let n=fN(e.hint,t,a);if(n.kind===`match`)return{face:n.face,confidence:`geometric-fallback`};if(n.kind===`ambiguous`)return{ref:e,reason:`ambiguous`,candidates:n.candidates}}}let s=fN(e.hint,i,a);return s.kind===`match`?{face:s.face,confidence:`geometric-fallback`}:s.kind===`ambiguous`?{ref:e,reason:`ambiguous`,candidates:s.candidates}:{ref:e,reason:`not-found`}}function mN(e,t){let n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return Math.sqrt(n*n+r*r+i*i)}function hN(e){if(e.length===0)return;let t=0,n=0,r=0;for(let i of e){let e=hD(i);t+=e[0],n+=e[1],r+=e[2]}let i=e.length;return[t/i,n/i,r/i]}function gN(e,t,n){let r=n.get(t);if(!r)return;let i=mk(e);for(let[e,t]of r)if(t.includes(i))return e}function _N(e,t,n,r){let i=r.get(t)?.get(n);return i===void 0||i.length===0?[]:ZE(e).filter(e=>i.includes(mk(e)))}function vN(e){let t=jM(e);return{entityType:`edge`,length:t.ok?t.value:void 0,midpoint:hN(JM(e))}}function yN(e){let t=new Set,n=[];for(let r of e){let e=mk(r);t.has(e)||(t.add(e),n.push(r))}return n}var bN=1e-6;function xN(e,t){if(t.length===void 0&&t.midpoint===void 0)return;let n,r=1/0,i=1/0;for(let a of e){let e=0;if(t.length!==void 0){let n=jM(a);n.ok&&(e+=Math.abs(n.value-t.length))}if(t.midpoint!==void 0){let n=hN(JM(a));n!==void 0&&(e+=mN(t.midpoint,n))}e<r?(i=r,r=e,n=a):e<i&&(i=e)}if(!(n===void 0||i-r<bN))return n}function SN(e,t,n,r){let[i,a]=UM(n,t);if(i===void 0||a===void 0)return;let o=gN(i,e,r),s=gN(a,e,r);if(!(o===void 0||s===void 0))return{origin:e,faceRoles:[o,s],hint:vN(t)}}function CN(e,t,n){let[r,i]=e.faceRoles,a=_N(n,e.origin,r,t),o=_N(n,e.origin,i,t);if(a.length===0||o.length===0)return{ref:e,reason:`not-found`};let s=[];for(let e of a)for(let t of o)s.push(...XM(e,t));let c=yN(s);if(c.length===1){let[e]=c;if(e!==void 0)return{edge:e,confidence:`exact`}}if(c.length>1){let t=xN(c,e.hint);return t===void 0?{ref:e,reason:`ambiguous`,candidates:c}:{edge:t,confidence:`geometric-fallback`}}return{ref:e,reason:`not-found`}}var wN=3,TN=1e-6;function EN(e,t){let n=new Set;for(let r of e)for(let e of KM(r)){let r=mk(e);n.add(r),t.has(r)||t.set(r,e)}return n}function DN(e,t){let n=new Set;for(let r of e)t.has(r)&&n.add(r);return n}function ON(e){let t=new Map,n;for(let r of e){let e=EN(r,t);n=n===void 0?e:DN(n,e)}if(n===void 0)return[];let r=[];for(let e of n){let n=t.get(e);n!==void 0&&r.push(n)}return r}function kN(e,t){if(t.position===void 0)return;let n,r=1/0,i=1/0;for(let a of e){let e=mN(hD(a),t.position);e<r?(i=r,r=e,n=a):e<i&&(i=e)}if(!(n===void 0||i-r<TN))return n}function AN(e,t,n,r){let i=WM(n,t);if(i.length<wN)return;let a=new Set;for(let t of i){let n=gN(t,e,r);n!==void 0&&a.add(n)}if(!(a.size<wN))return{origin:e,faceRoles:[...a].sort(),hint:{entityType:`vertex`,position:hD(t)}}}function jN(e,t,n){let r=[];for(let i of e.faceRoles){let a=_N(n,e.origin,i,t);if(a.length===0)return{ref:e,reason:`not-found`};r.push(a)}let i=ON(r);if(i.length===1){let[e]=i;if(e!==void 0)return{vertex:e,confidence:`exact`}}if(i.length>1){let t=kN(i,e.hint);return t===void 0?{ref:e,reason:`ambiguous`,candidates:i}:{vertex:t,confidence:`geometric-fallback`}}return{ref:e,reason:`not-found`}}var MN=.99,NN=.1,PN=1e-6;function FN(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function IN(e,t){return ZE(e).filter(e=>FN(fO(e),t)>MN)}function LN(e,t,n){let r=new Set([...t,...n].map(mk)),i=new Set;for(let n of t)for(let t of YM(e,n))i.add(mk(t));let a=[],o=new Set;for(let t of n)for(let n of YM(e,t)){let e=mk(n);r.has(e)||o.has(e)||!i.has(e)||(o.add(e),a.push(n))}return a}function RN(e,t){let n,r=1/0,i=1/0;for(let a of e){let e=mN(pO(a),t);e<r?(i=r,r=e,n=a):e<i&&(i=e)}if(!(n===void 0||i-r<PN))return n}function zN(e,t,n,r,i){let[a,o]=UM(r,n);if(a===void 0||o===void 0)return;let s=gN(a,e,i),c=gN(o,e,i);if(!(s===void 0||c===void 0))return{origin:e,op:t,betweenRoles:[s,c],hint:{entityType:`derived-face`,normalA:fO(a),normalB:fO(o),edgeMidpoint:hN(JM(n))}}}function BN(e,t,n){let r=_N(n,e.origin,e.betweenRoles[0],t);r.length===0&&(r=IN(n,e.hint.normalA));let i=_N(n,e.origin,e.betweenRoles[1],t);if(i.length===0&&(i=IN(n,e.hint.normalB)),r.length===0||i.length===0)return{ref:e,reason:`not-found`};let a=LN(n,r,i).filter(t=>FN(fO(t),e.hint.normalA)>NN&&FN(fO(t),e.hint.normalB)>NN);if(a.length===1){let[e]=a;if(e!==void 0)return{face:e,confidence:`geometric-fallback`}}if(a.length>1){let t=e.hint.edgeMidpoint&&RN(a,e.hint.edgeMidpoint);return t?{face:t,confidence:`geometric-fallback`}:{ref:e,reason:`ambiguous`,candidates:a}}return{ref:e,reason:`not-found`}}function VN(e){return typeof e==`object`&&!!e&&`origin`in e}function HN(e){return VN(e)&&`betweenRoles`in e&&`op`in e}function UN(e){return VN(e)&&Array.isArray(e.faceRoles)&&e.faceRoles.length===2}function WN(e){return VN(e)&&Array.isArray(e.faceRoles)&&e.faceRoles.length>=3}function GN(e){return VN(e)&&typeof e.role==`string`}function KN(e){return GN(e)||UN(e)||WN(e)||HN(e)}function qN(e,t){return t===void 0?{ok:!1,reason:e}:{ok:!1,reason:e,candidates:t}}function JN(e,t,n){if(HN(e)){let r=BN(e,t,n);return`face`in r?{ok:!0,entity:r.face}:qN(r.reason,r.candidates)}if(UN(e)){let r=CN(e,t,n);return`edge`in r?{ok:!0,entity:r.edge}:qN(r.reason,r.candidates)}if(WN(e)){let r=jN(e,t,n);return`vertex`in r?{ok:!0,entity:r.vertex}:qN(r.reason,r.candidates)}let r=pN(e,t,n);return`face`in r?{ok:!0,entity:r.face}:qN(r.reason,r.candidates)}function YN(e,t,n){let r=n.get(e.origin);if(r!==void 0)return r;let i=new Map([[e.origin,oN(t,e.origin)]]);return n.set(e.origin,i),i}function XN(e,t){return JN(e,YN(e,t,new Map),t)}function ZN(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t!==Object.prototype&&t!==null?!1:!(`wrapped`in e)}function QN(e,t){let n=new Map,r=e=>{if(KN(e)){let r=JN(e,YN(e,t,n),t);return r.ok?r.entity:e}if(Array.isArray(e))return e.map(r);if(ZN(e)){let t={};for(let[n,i]of Object.entries(e))t[n]=r(i);return t}return e},i={...e};for(let[t,n]of Object.entries(e))i[t]=r(n);return i}function $N(e,t,n,r){let i=yE(U().makeBox(e,t,n)),a=r?.at??(r?.centered?[0,0,0]:void 0);if(a)try{var o=OT();return ek(o.u(i),[a[0]-e/2,a[1]-t/2,a[2]-n/2])}catch(e){o.e=e}finally{o.d()}return i}function eP(e,t,n){let r=n?.at??[0,0,0],i=n?.axis??[0,0,1],a=YA(e,t,r,i);if(n?.centered)try{var o=OT();let e=[-i[0]*t*.5,-i[1]*t*.5,-i[2]*t*.5];return ek(o.u(a),e)}catch(e){o.e=e}finally{o.d()}return a}function tP(e,t){let n=XA(e);if(t?.at)try{var r=OT();return ek(r.u(n),t.at)}catch(e){r.e=e}finally{r.d()}return n}function nP(e,t,n,r){let i=r?.at??[0,0,0],a=r?.axis??[0,0,1],o=ZA(e,t,n,i,a);if(r?.centered)try{var s=OT();let e=[-a[0]*n*.5,-a[1]*n*.5,-a[2]*n*.5];return ek(s.u(o),e)}catch(e){s.e=e}finally{s.d()}return o}function rP(e,t,n){return QA(e,t,n?.at??[0,0,0],n?.axis??[0,0,1])}function iP(e,t,n,r){let i=$A(e,t,n);if(r?.at)try{var a=OT();return ek(a.u(i),r.at)}catch(e){a.e=e}finally{a.d()}return i}function aP(e,t){return uA(e,t)}function oP(e,t){let n=t?.axis??[0,0,1];return dA(e,t?.at??[0,0,0],n)}function sP(e,t,n){let r=n?.axis??[0,0,1];return fA(e,t,n?.at??[0,0,0],r,n?.xDir)}function cP(e,t,n,r){return pA(e,t,n,r?.at??[0,0,0],r?.axis??[0,0,1],r?.lefthand??!1)}function lP(e,t,n){return mA(e,t,n)}function uP(e,t,n,r,i){let a=i?.axis??[0,0,1];return hA(e,t,n*gD,r*gD,i?.at??[0,0,0],a,i?.xDir)}function dP(e,t){return gA(e,t)}function fP(e){return vA(e)}function pP(e,t,n){return yA(e,t,n)}function mP(e){return bA(e)}function hP(e){return Ha(bA(e),e=>tE(e)?O(e):k(F(`WIRE_NOT_CLOSED`,`Assembled wire is not closed: start and end points do not coincide`)))}function gP(e,t){return xA(e,t)}function _P(e){return wA(e)}function vP(e,t){return CA(e,t)}function yP(e){return EA(e)}function bP(e){return ej(e)}function xP(e){return nj(e)}function SP(e){return rj(e)}function CP(e,t,n){return tj(e,t,n)}function wP(e,t){return JA(e,t)}function TP(e,t){return TA(e,t)}function EP(){return`10000000-1000-4000-8000-100000000000`.replace(/[018]/g,e=>(Number(e)^crypto.getRandomValues(new Uint8Array(1))[0]&15>>Number(e)/4).toString(16))}function DP(e=[]){let t=e.map(({shape:e,name:t,color:n,alpha:r})=>{let i=n??`#f00`;i.indexOf(`#`)===0&&(i=i.slice(1)),i.length===3&&(i=i.replace(/([0-9a-f])/gi,`$1$1`));let a=parseInt(i.substring(0,2),16),o=parseInt(i.substring(2,4),16),s=parseInt(i.substring(4,6),16),c=Math.round((r??1)*255);return{shape:e.wrapped,name:t??EP(),color:[a,o,s,c]}});return zT(U().createXCAFDocument(t))}function OP(e=[],{unit:t,modelUnit:n}={}){let r=e=>{let t=e;return t.indexOf(`#`)===0&&(t=t.slice(1)),t.length===3&&(t=t.replace(/([0-9a-f])/gi,`$1$1`)),[parseInt(t.substring(0,2),16),parseInt(t.substring(2,4),16),parseInt(t.substring(4,6),16)]},i=U(),a=e.map(({shape:e,name:t,color:n,alpha:i})=>{let[a,o,s]=r(n??`#f00`);return{shape:e.wrapped,name:t??EP(),color:[a,o,s,Math.round((i??1)*255)]}}),o=i.createXCAFDocument(a);try{let e=i.writeXCAFToSTEP(o,{unit:t,modelUnit:n});return e?O(new Blob([e],{type:`application/STEP`})):k(vo(`STEP_EXPORT_FAILED`,`Failed to write STEP file`))}finally{o.delete()}}function kP(e,t,n,r,i){if(n<1)return k(F(`PATTERN_INVALID_COUNT`,`Pattern count must be at least 1`));if(n===1)return O(e);if(ND(t))return k(F(`PATTERN_ZERO_DIRECTION`,`Pattern direction cannot be zero`));let a=jD(t),o=U().linearPattern(e.wrapped,[...a],r,n).map(e=>W(e));try{return NA(o,{optimisation:`sameFace`,...i,unsafe:!0})}finally{for(let e of o)e[Symbol.dispose]()}}function AP(e,t,n,r=360,i=[0,0,0],a){if(n<1)return k(F(`PATTERN_INVALID_COUNT`,`Pattern count must be at least 1`));if(n===1)return O(e);if(ND(t))return k(F(`PATTERN_ZERO_AXIS`,`Pattern axis cannot be zero`));let o=r/n,s=U().circularPattern(e.wrapped,[...i],[...t],o,n).map(e=>W(e));try{return NA(s,{optimisation:`sameFace`,...a,unsafe:!0})}finally{for(let e of s)e[Symbol.dispose]()}}function jP(e,t,n,r,i,a,o,s){if(r<1||i<1)return k(F(`PATTERN_INVALID_COUNT`,`Grid pattern counts must be at least 1`));if(r===1&&i===1)return O(e);if(ND(t))return k(F(`PATTERN_ZERO_DIRECTION`,`Grid directionX cannot be zero`));if(ND(n))return k(F(`PATTERN_ZERO_DIRECTION`,`Grid directionY cannot be zero`));let c=U(),l=jD(t),u=jD(n);if(typeof c.gridPattern==`function`)return O(W(c.gridPattern(e.wrapped,[...l],[...u],a,o,r,i)));let d=kP(e,t,r,a,s);if(!d.ok)return d;let f=d.value,p=kP(f,n,i,o,s),m=p.ok&&p.value===f;return f!==e&&!m&&f[Symbol.dispose](),p}function MP(e,t={}){return{name:e,children:[],...t.shape===void 0?{}:{shape:t.shape},...t.translate===void 0?{}:{translate:t.translate},...t.rotate===void 0?{}:{rotate:t.rotate},...t.metadata===void 0?{}:{metadata:t.metadata}}}function NP(e,t){return{...e,children:[...e.children,t]}}function PP(e,t){let n=e.children.findIndex(e=>e.name===t);if(n===-1)return e;let r=[...e.children];return r.splice(n,1),{...e,children:r}}function FP(e,t){return{...e,...t.shape===void 0?{}:{shape:t.shape},...t.translate===void 0?{}:{translate:t.translate},...t.rotate===void 0?{}:{rotate:t.rotate},...t.metadata===void 0?{}:{metadata:t.metadata}}}function IP(e,t){if(e.name===t)return e;for(let n of e.children){let e=IP(n,t);if(e)return e}}function LP(e,t,n=0){t(e,n);for(let r of e.children)LP(r,t,n+1)}function RP(e){let t=1;for(let n of e.children)t+=RP(n);return t}function zP(e){let t=[];return LP(e,e=>{e.shape&&t.push(e.shape)}),t}function BP(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function VP(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 HP(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function UP(e){return HP(VP(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function WP(e,t){let[n,r,i,a]=e,o=2*(i*t[2]-a*t[1]),s=2*(a*t[0]-r*t[2]),c=2*(r*t[1]-i*t[0]);return[t[0]+n*o+(i*c-a*s),t[1]+n*s+(a*o-r*c),t[2]+n*c+(r*s-i*o)]}function GP(e,t){let n=t/2,r=Math.sin(n),i=HP(e);return[Math.cos(n),i[0]*r,i[1]*r,i[2]*r]}function KP(e,t){let n=HP(e),r=HP(t),i=BP(n,r);if(i>=.999999999)return[1,0,0,0];if(i<=-.999999999)return GP(UP(n),Math.PI);let a=VP(n,r),o=Math.hypot(1+i,a[0],a[1],a[2])||1;return[(1+i)/o,a[0]/o,a[1]/o,a[2]/o]}function qP(e,t){let[n,r,i,a]=e,[o,s,c,l]=t;return[n*o-r*s-i*c-a*l,n*s+r*o+i*l-a*c,n*c-r*l+i*o+a*s,n*l+r*c-i*s+a*o]}var JP=Math.PI/180;function YP(e,t,n){return Math.min(n,Math.max(t,e))}function XP(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function ZP(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 QP(e){return XP(ZP(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function $P(e,t,n,r,i){let a=n.min??r,o=n.max??i,s=Math.min(a,o),c=Math.max(a,o);return{kind:e,axis:XP(t),min:s,max:c,value:YP(n.value??0,s,c)}}function eF(e,t,n,r,i){let a=i[0]??{kind:`rotation`,axis:[0,0,1],min:0,max:0,value:0};return{type:e,parent:t,child:n,axis:{origin:r.origin,direction:XP(r.direction)},min:a.min,max:a.max,value:a.value,dofs:i}}function tF(e,t,n,r={}){return eF(`revolute`,e,t,n,[$P(`rotation`,n.direction,r,-180,180)])}function nF(e,t,n,r={}){return eF(`prismatic`,e,t,n,[$P(`translation`,n.direction,r,0,100)])}function rF(e,t,n,r={}){return eF(`cylindrical`,e,t,n,[$P(`rotation`,n.direction,r.rotation??{},-180,180),$P(`translation`,n.direction,r.translation??{},0,100)])}function iF(e,t,n,r={}){let i=XP(n.direction),a;if(r.uDirection){let e=r.uDirection,t=e[0]*i[0]+e[1]*i[1]+e[2]*i[2],n=[e[0]-t*i[0],e[1]-t*i[1],e[2]-t*i[2]];a=Math.hypot(n[0],n[1],n[2])<1e-9?QP(i):XP(n)}else a=QP(i);let o=XP(ZP(i,a));return eF(`planar`,e,t,{origin:n.origin,direction:i},[$P(`translation`,a,r.u??{},-100,100),$P(`translation`,o,r.v??{},-100,100),$P(`rotation`,i,r.rotation??{},-180,180)])}function aF(e,t,n,r={}){return eF(`spherical`,e,t,{origin:n,direction:[0,0,1]},[$P(`rotation`,[1,0,0],r.x??{},-180,180),$P(`rotation`,[0,1,0],r.y??{},-180,180),$P(`rotation`,[0,0,1],r.z??{},-180,180)])}function oF(e,t){let n=e.dofs.map((e,n)=>{let r=t[n];return r===void 0?e:{...e,value:YP(r,e.min,e.max)}}),r=n[0];return r?{...e,dofs:n,value:r.value}:{...e,dofs:n}}function sF(e,t){return oF(e,[t])}function cF(e,t,n){if(t.kind===`translation`)return{position:[t.axis[0]*n,t.axis[1]*n,t.axis[2]*n],rotation:[1,0,0,0]};let r=GP(t.axis,n*JP),i=WP(r,e);return{position:[e[0]-i[0],e[1]-i[1],e[2]-i[2]],rotation:r}}function lF(e,t=e.value){let n=Array.isArray(t)?t:void 0,r=n?void 0:t,i=e.axis.origin,a=dF;for(let t=0;t<e.dofs.length;t++){let o=e.dofs[t];if(!o)continue;let s=n?n[t]??o.value:t===0?r??o.value:o.value;a=fF(a,cF(i,o,YP(s,o.min,o.max)))}return a}function uF(e,t){let n=e.joints??[];return{...e,joints:[...n,t]}}var dF={position:[0,0,0],rotation:[1,0,0,0]};function fF(e,t){let n=WP(e.rotation,t.position);return{position:[e.position[0]+n[0],e.position[1]+n[1],e.position[2]+n[2]],rotation:qP(e.rotation,t.rotation)}}function pF(e){let t=[];return LP(e,e=>{e.joints&&t.push(...e.joints)}),t}function mF(e,t={}){let n=[],r=new Set;LP(e,e=>{r.add(e.name),e.joints&&n.push(...e.joints)});let i=new Map;for(let e of n)i.set(e.child,e),r.add(e.parent),r.add(e.child);let a=new Map;for(let e of r)i.has(e)||a.set(e,dF);let o=[...n],s=!0;for(;s&&o.length>0;){s=!1;for(let e=o.length-1;e>=0;e--){let n=o[e];if(!n)continue;let r=a.get(n.parent);if(!r||(o.splice(e,1),s=!0,a.has(n.child)))continue;let i=t[n.child]??n.value,c=n.offset?fF(lF(n,i),n.offset):lF(n,i);a.set(n.child,fF(r,c))}}for(let e of o)a.has(e.child)||a.set(e.child,dF);return a}function hF(e){return pF(e).reduce((e,t)=>e+t.dofs.length,0)}var gF={position:[0,0,0],rotation:[1,0,0,0]};function _F(e,t){let n=WP(e.rotation,t);return[n[0]+e.position[0],n[1]+e.position[1],n[2]+e.position[2]]}function vF(e){return[e[0],-e[1],-e[2],-e[3]]}function yF(e,t){let[n,r,i,a]=qP(t,vF(e)),o=Math.hypot(n,r,i,a)||1;n/=o,r/=o,i/=o,a/=o,n<0&&(n=-n,r=-r,i=-i,a=-a);let s=Math.hypot(r,i,a);if(s<1e-12)return[0,0,0];let c=2*Math.atan2(s,n)/s;return[r*c,i*c,a*c]}function bF(e,t){let n=[];LP(e,e=>{e.joints&&n.push(...e.joints)});let r=new Map;for(let e of n)r.set(e.child,e);let i=[],a=new Set,o=t;for(;o&&r.has(o)&&!a.has(o);){a.add(o);let e=r.get(o);if(!e)break;i.push(e),o=e.parent}return i.reverse()}function xF(e,t){return e[t]??0}function SF(e,t,n){let r=n+1,i=new Float64Array(n*r);for(let a=0;a<n;a++){for(let t=0;t<n;t++)i[a*r+t]=xF(e,a*n+t);i[a*r+n]=xF(t,a)}for(let e=0;e<n;e++){let t=e;for(let a=e+1;a<n;a++)Math.abs(xF(i,a*r+e))>Math.abs(xF(i,t*r+e))&&(t=a);if(Math.abs(xF(i,t*r+e))<1e-12)return null;if(t!==e)for(let n=e;n<r;n++){let a=xF(i,e*r+n);i[e*r+n]=xF(i,t*r+n),i[t*r+n]=a}let a=xF(i,e*r+e);for(let t=e;t<r;t++)i[e*r+t]=xF(i,e*r+t)/a;for(let t=0;t<n;t++){if(t===e)continue;let n=xF(i,t*r+e);if(n!==0)for(let a=e;a<r;a++)i[t*r+a]=xF(i,t*r+a)-n*xF(i,e*r+a)}}let a=new Float64Array(n);for(let e=0;e<n;e++)a[e]=xF(i,e*r+n);return a}function CF(e,t){let n=[],r=[],i=[],a=[];for(let o of e){let e=t?.[o.child];n.push({child:o.child,count:o.dofs.length}),o.dofs.forEach((t,n)=>{let o=(Array.isArray(e)?e[n]:n===0?e:void 0)??t.value;r.push(Math.min(t.max,Math.max(t.min,o))),i.push(t.min),a.push(t.max)})}return{segments:n,q:Float64Array.from(r),lo:Float64Array.from(i),hi:Float64Array.from(a)}}function wF(e,t){let n={},r=0;for(let i of e){let e=[];for(let n=0;n<i.count;n++)e.push(xF(t,r++));n[i.child]=e}return n}function TF(e,t,n,r,i){let a=_F(t,r);if(e[0]=n.position[0]-a[0],e[1]=n.position[1]-a[1],e[2]=n.position[2]-a[2],i===6&&n.rotation){let r=yF(t.rotation,n.rotation);e[3]=r[0],e[4]=r[1],e[5]=r[2]}let o=0;for(let t=0;t<i;t++)o+=xF(e,t)**2;return Math.sqrt(o)}function EF(e,t,n,r,i,a,o,s,c,l){let u=_F(o,s);for(let d=0;d<n;d++){let f=xF(t,d),p=f+c>xF(a,d)&&f-c>=xF(i,d)?-c:c;t[d]=f+p;let m=l(t);t[d]=f;let h=_F(m,s);if(e[d]=(h[0]-u[0])/p,e[n+d]=(h[1]-u[1])/p,e[2*n+d]=(h[2]-u[2])/p,r===6){let t=yF(o.rotation,m.rotation);e[3*n+d]=t[0]/p,e[4*n+d]=t[1]/p,e[5*n+d]=t[2]/p}}}function DF(e,t,n,r,i){let a=new Float64Array(r*r),o=i*i;for(let t=0;t<r;t++)for(let i=0;i<r;i++){let s=0;for(let r=0;r<n;r++)s+=xF(e,t*n+r)*xF(e,i*n+r);a[t*r+i]=s+(t===i?o:0)}let s=SF(a,t,r);if(!s)return null;let c=new Float64Array(n);for(let t=0;t<n;t++){let i=0;for(let a=0;a<r;a++)i+=xF(e,a*n+t)*xF(s,a);c[t]=i}return c}function OF(e,t,n,r={}){let i=r.maxIterations??200,a=r.tolerance??1e-5,o=r.damping??.05,s=r.tip??[0,0,0],c=n.rotation===void 0?3:6,{segments:l,q:u,lo:d,hi:f}=CF(bF(e,t),r.seed),p=u.length,m=n=>mF(e,wF(l,n)).get(t)??gF,h=new Float64Array(c),g=new Float64Array(c*p),_=m(u),v=TF(h,_,n,s,c),y=0;for(;y<i&&p>0&&v>a;y++){EF(g,u,p,c,d,f,_,s,1e-6,m);let e=DF(g,h,p,c,o);if(!e)break;for(let t=0;t<p;t++){let n=xF(u,t)+xF(e,t);u[t]=Math.min(xF(f,t),Math.max(xF(d,t),n))}_=m(u),v=TF(h,_,n,s,c)}return{values:wF(l,u),converged:v<=a,iterations:y,error:v}}function kF(e,t){return e.dofs.map((e,n)=>{let r=(Array.isArray(t)?t[n]:n===0?t:void 0)??e.value;return Math.min(e.max,Math.max(e.min,r))})}function AF(e,t,n,r){let i=[];LP(e,e=>{e.joints&&i.push(...e.joints)});let a=i.map(e=>({child:e.child,a:kF(e,t[e.child]),b:kF(e,n[e.child])})),o=Math.max(1,Math.floor(r)),s=[];for(let t=0;t<=o;t++){let n=t/o,r={};for(let e of a)r[e.child]=e.a.map((t,r)=>t+((e.b[r]??t)-t)*n);s.push({t:n,values:r,poses:mF(e,r)})}return s}var jF=Math.PI/180;function MF(e,t,n,r){let i=e*jF,a=r*jF,o=qP(GP([0,0,1],i),GP([1,0,0],a));return{position:[n*Math.cos(i),n*Math.sin(i),t],rotation:o}}function NF(e,t={}){let n=t.base??`base`,r=e.map((e,t)=>e.name??`link${t+1}`);return e.map((e,t)=>{let i=t===0?n:r[t-1]??`link${t}`,a=r[t]??`link${t+1}`,o=MF(e.theta,e.d,e.a,e.alpha),s={origin:[0,0,0],direction:[0,0,1]},c={...e.min===void 0?{}:{min:e.min},...e.max===void 0?{}:{max:e.max},...e.value===void 0?{}:{value:e.value}};return{...e.type===`prismatic`?nF(i,a,s,c):tF(i,a,s,c),offset:o}})}var PF=Math.PI/180,FF=180/Math.PI;function IF(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`)}function LF(e){return String(e===0?0:e)}function RF(e){return`${LF(e[0])} ${LF(e[1])} ${LF(e[2])}`}function zF(e,t={}){let n=t.name??`robot`,r=t.effort??0,i=t.velocity??0,a=t.meshes??{},o=[],s=[];LP(e,e=>{o.push(e.name),e.joints&&s.push(...e.joints)});for(let e of s){if(e.type!==`revolute`&&e.type!==`prismatic`)return k(F(N.VALIDATION_FAILED,`exportURDF: joint '${e.parent}->${e.child}' is '${e.type}'; URDF supports only revolute and prismatic joints`));if(e.offset)return k(F(N.VALIDATION_FAILED,`exportURDF: joint '${e.parent}->${e.child}' carries a fixed offset (e.g. a DH link) that URDF cannot represent as a single joint`))}let c=[`<?xml version="1.0"?>`,`<robot name="${IF(n)}">`];for(let e of o){let t=a[e];t?c.push(` <link name="${IF(e)}">`,` <visual><geometry><mesh filename="${IF(t)}"/></geometry></visual>`,` </link>`):c.push(` <link name="${IF(e)}"/>`)}for(let e of s){let t=e.type===`revolute`,n=t?e.min*PF:e.min,a=t?e.max*PF:e.max,o=e.type===`prismatic`?[0,0,0]:e.axis.origin;c.push(` <joint name="${IF(`${e.parent}_to_${e.child}`)}" type="${e.type}">`,` <parent link="${IF(e.parent)}"/>`,` <child link="${IF(e.child)}"/>`,` <origin xyz="${RF(o)}" rpy="0 0 0"/>`,` <axis xyz="${RF(e.axis.direction)}"/>`,` <limit lower="${LF(n)}" upper="${LF(a)}" effort="${LF(r)}" velocity="${LF(i)}"/>`,` </joint>`)}return c.push(`</robot>`,``),O(c.join(`
16
16
  `))}function BF(e,t){return RegExp(`\\b${t}\\s*=\\s*"([^"]*)"`).exec(e)?.[1]}function VF(e,t){if(!e)return t;let n=e.trim().split(/\s+/).map(Number);return[n[0]??0,n[1]??0,n[2]??0]}function HF(e,t){return WP(qP(qP(GP([0,0,1],t[2]),GP([0,1,0],t[1])),GP([1,0,0],t[0])),e)}function UF(e){let t=/<robot\b([^>]*)>/.exec(e);if(!t)return k(F(N.VALIDATION_FAILED,`importURDF: no <robot> element found`));let n=BF(t[1]??``,`name`)??`robot`,r=[],i=/<link\b([^>]*?)(?:\/>|>)/g;for(let t=i.exec(e);t;t=i.exec(e)){let e=BF(t[1]??``,`name`);e&&r.push(e)}let a=[],o=/<joint\b([^>]*)>([\s\S]*?)<\/joint>/g;for(let t=o.exec(e);t;t=o.exec(e)){let e=t[1]??``,n=t[2]??``,r=BF(e,`type`)??`fixed`;if(r===`fixed`||r===`floating`||r===`planar`)continue;let i=/<parent\b([^>]*?)\/?>/.exec(n),o=/<child\b([^>]*?)\/?>/.exec(n),s=BF(i?.[1]??``,`link`),c=BF(o?.[1]??``,`link`);if(!s||!c)return k(F(N.VALIDATION_FAILED,`importURDF: joint missing parent/child link (${BF(e,`name`)??`unnamed`})`));let l=/<origin\b([^>]*?)\/?>/.exec(n),u=/<axis\b([^>]*?)\/?>/.exec(n),d=/<limit\b([^>]*?)\/?>/.exec(n),f=VF(BF(l?.[1]??``,`xyz`),[0,0,0]),p=VF(BF(l?.[1]??``,`rpy`),[0,0,0]),m=HF(VF(BF(u?.[1]??``,`xyz`),[1,0,0]),p),h=Number(BF(d?.[1]??``,`lower`)??NaN),g=Number(BF(d?.[1]??``,`upper`)??NaN);if(r===`prismatic`){let e=Number.isFinite(h)&&Number.isFinite(g)?{min:h,max:g}:{};a.push(nF(s,c,{origin:f,direction:m},e))}else if(r===`revolute`||r===`continuous`){let e=r===`continuous`||!Number.isFinite(h)||!Number.isFinite(g)?{min:-180,max:180}:{min:h*FF,max:g*FF};a.push(tF(s,c,{origin:f,direction:m},e))}else return k(F(N.VALIDATION_FAILED,`importURDF: joint '${BF(e,`name`)??`unnamed`}' has unrecognized type '${r}'`))}return O({name:n,links:r,joints:a})}function WF(){return{steps:[],shapes:new Map}}function GF(e,t,n){let r={...t,timestamp:Date.now()},i=new Map(e.shapes);return i.set(t.outputId,n),{steps:[...e.steps,r],shapes:i}}function KF(e){if(e.steps.length===0)return e;let t=e.steps.slice(0,-1),n=new Set;for(let e of t){n.add(e.outputId);for(let t of e.inputIds)n.add(t)}let r=new Map;for(let[t,i]of e.shapes)n.has(t)&&r.set(t,i);return{steps:t,shapes:r}}function qF(e,t){return e.steps.find(e=>e.id===t)}function JF(e,t){return e.shapes.get(t)}function YF(e){return e.steps.length}function XF(e,t){let n=e.steps.findIndex(e=>e.id===t);return n===-1?[]:e.steps.slice(n)}function ZF(e,t,n){let r=new Map(e.shapes);return r.set(t,n),{...e,shapes:r}}function QF(){return{operations:new Map}}function $F(e,t,n){let r=new Map(e.operations);return r.set(t,n),{operations:r}}function eI(e,t){let[n,r]=t;return n!==void 0&&r===void 0&&kE(n)?QN(e,n):{...e}}function tI(e,t){let n=new Set(e.steps.map(e=>e.outputId)),r={steps:[],shapes:new Map};for(let[t,i]of e.shapes)n.has(t)||(r=ZF(r,t,i));for(let n of e.steps){let e=t.operations.get(n.type);if(!e)return k(I(`REPLAY_UNKNOWN_OP`,`Unknown operation type: ${n.type}`));let i=[];for(let e of n.inputIds){let t=r.shapes.get(e);if(!t)return k(I(`REPLAY_MISSING_INPUT`,`Missing input shape: ${e} for step ${n.id}`));i.push(t)}try{let t=e(i,eI(n.parameters,i));r=GF(r,{id:n.id,type:n.type,parameters:n.parameters,inputIds:n.inputIds,outputId:n.outputId},t)}catch(e){return k(I(`REPLAY_STEP_FAILED`,`Step ${n.id} (${n.type}) failed: ${e instanceof Error?e.message:String(e)}`))}}return O(r)}function nI(e,t,n){let r=e.steps.findIndex(e=>e.id===t);if(r===-1)return k(I(`REPLAY_STEP_NOT_FOUND`,`Step not found: ${t}`));let i=new Map(e.shapes);for(let t=r;t<e.steps.length;t++){let n=e.steps[t];n&&i.delete(n.outputId)}let a={steps:e.steps.slice(0,r),shapes:i};for(let t=r;t<e.steps.length;t++){let r=e.steps[t];if(!r)continue;let i=n.operations.get(r.type);if(!i)return k(I(`REPLAY_UNKNOWN_OP`,`Unknown operation type: ${r.type}`));let o=[];for(let e of r.inputIds){let t=a.shapes.get(e);if(!t)return k(I(`REPLAY_MISSING_INPUT`,`Missing input shape: ${e} for step ${r.id}`));o.push(t)}try{let e=i(o,eI(r.parameters,o));a=GF(a,{id:r.id,type:r.type,parameters:r.parameters,inputIds:r.inputIds,outputId:r.outputId},e)}catch(e){return k(I(`REPLAY_STEP_FAILED`,`Step ${r.id} (${r.type}) failed: ${e instanceof Error?e.message:String(e)}`))}}return O(a)}function rI(e,t,n,r){return e.steps.findIndex(e=>e.id===t)===-1?k(I(`MODIFY_STEP_NOT_FOUND`,`Step not found: ${t}`)):nI({steps:e.steps.map(e=>e.id===t?{...e,parameters:n}:e),shapes:e.shapes},t,r)}function iI(e){let t={};for(let[n,r]of e.shapes){let e=pk(r);if(!e.ok)return k(I(`SERIALIZE_SHAPE_FAILED`,`Failed to serialize shape "${n}": ${e.error.message}`));t[n]=e.value}return O({steps:e.steps,shapes:t})}function aI(e){let t=new Map;for(let[n,r]of Object.entries(e.shapes))try{let e=nO(r);if(!e.ok)return k(I(`DESERIALIZE_SHAPE_FAILED`,`Failed to deserialize shape "${n}": ${e.error.message}`));t.set(n,e.value)}catch(e){return k(I(`DESERIALIZE_SHAPE_FAILED`,`Failed to deserialize shape "${n}": ${e instanceof Error?e.message:String(e)}`))}return O({steps:e.steps,shapes:t})}function oI(e){try{var t=OT();let{radius:n,pitch:r,height:i,depth:a=.6*r,toothHalfWidth:o=.42*r,crest:s=0,sectionsPerTurn:c=20,lefthand:l=!1,inward:u=!1}=e;if(!(n>0))return k(F(`THREAD_INVALID_RADIUS`,`radius must be > 0`));if(!(r>0))return k(F(`THREAD_INVALID_PITCH`,`pitch must be > 0`));if(!(i>0))return k(F(`THREAD_INVALID_HEIGHT`,`height must be > 0`));if(!(a>0))return k(F(`THREAD_INVALID_DEPTH`,`depth must be > 0`));if(s<0||s>=o)return k(F(`THREAD_INVALID_CREST`,`crest must be >= 0 and < toothHalfWidth`));if(c<3)return k(F(`THREAD_TOO_FEW_SECTIONS`,`sectionsPerTurn must be >= 3`));let d=i/r,f=Math.max(2,Math.round(d*c)),p=l?-1:1,m=u?-a:a,h=u?.3:-.3,g=o,_=t.u(new BT),v=[];for(let e=0;e<=f;e++){let t=p*e*2*Math.PI/c,i=r*Math.abs(t)/(2*Math.PI),a=n*Math.cos(t),o=n*Math.sin(t),l=Math.cos(t),u=Math.sin(t),d=(e,t)=>[a+e*l,o+e*u,i+t],f=s>0?[d(h,-g),d(m,-s),d(m,s),d(h,g)]:[d(h,-g),d(m,0),d(h,g)],y=mP(f.map((e,t)=>_.register(aP(e,f[(t+1)%f.length]))));if(!za(y))return y;v.push(_.register(y.value))}return yM(v,{ruled:!0})}catch(e){t.e=e}finally{t.d()}}var sI=1e-9,cI=1e-8,lI=1e-6,uI=([e,t],[n,r],i=lI)=>Math.abs(e-n)<=i&&Math.abs(t-r)<=i,dI=([e,t],[n,r])=>[e+n,t+r],fI=([e,t],[n,r])=>[e-n,t-r],pI=([e,t],n)=>[e*n,t*n],mI=([e,t],[n,r]=[0,0])=>Math.sqrt((e-n)**2+(t-r)**2),hI=([e,t],[n,r]=[0,0])=>(e-n)**2+(t-r)**2;function gI([e,t],[n,r]){return e*r-t*n}var _I=([e,t],[n,r]=[0,0])=>Math.atan2(r*e-t*n,e*n+t*r),vI=([e,t],[n,r]=[0,0])=>Math.atan2(r-t,n-e),yI=(e,t,n=[0,0])=>{let[r,i]=e,[a,o]=n,s=r-a,c=i-o,l=Math.sin(t),u=Math.cos(t),d=s*u-c*l,f=s*l+c*u;return[d+a,f+o]};function bI([e,t]){let n=Math.sqrt(e*e+t*t);return n<1e-12?[0,0]:[e/n,t/n]}var xI=(e,t)=>[Math.cos(t)*e,Math.sin(t)*e],SI=([e,t])=>[Math.sqrt(e*e+t*t),Math.atan2(t,e)],CI=([e,t])=>{let n=bI([e,t]);return n[0]===0&&n[1]===0&&M(`normalize2d`,`Cannot normalize zero-length vector`),n};function wI(e,t){let n,r=0;for(let i=0;i<e.length;i++){let a=e[i];if(t(a))if(r++,r===1)n=a;else break}return r===1?O(n):k(yo(`FINDER_NOT_UNIQUE`,`Finder expected a unique match but found ${r===0?0:`2+`} element(s)`))}function TI(e,t,n,r){let i=e=>n([...t,e]),a=e=>t.every(t=>t(e));function o(t){switch(e){case`edge`:return XE(t);case`face`:return ZE(t);case`wire`:return QE(t);case`vertex`:return $E(t)}}let s=e=>{let n=o(e);return t.length===0?n.slice():n.filter(a)},c=()=>TI(e,[],n,r),l={_filters:t,_topoKind:e,when:e=>i(e),inList:e=>{let t=new Map;for(let n of e){let e=mk(n),r=t.get(e);r?r.push(n):t.set(e,[n])}return i(e=>{let n=t.get(mk(e));return!!n&&n.some(t=>gk(t,e))})},not:e=>{let t=e(c());return i(e=>!t.shouldKeep(e))},either:e=>{let t=e.map(e=>e(c()));return i(e=>t.some(t=>t.shouldKeep(e)))},findAll:e=>s(e),findUnique:e=>wI(o(e),a),shouldKeep:a,and:e=>i(t=>e.shouldKeep(t)),or:e=>{let t=a;return n([n=>t(n)||e.shouldKeep(n)])},negate:()=>{let e=a;return n([t=>!e(t)])}},u=r(l,i);return{...l,...u}}var EI={X:[1,0,0],Y:[0,1,0],Z:[0,0,1]};function DI(e){return typeof e==`string`?EI[e]??[0,0,1]:e}function OI(e,t,n){let r=U(),i=r.makeVertex(t[0],t[1],t[2]);return t=>{let a=r.distance(i,t.wrapped).value;return Math.abs(a-e)<n}}function kI(e,t){let n=jD(DI(e));return e=>{let r=U(),[i,a]=r.curveParameters(e.wrapped),o=(i+a)/2,{tangent:s}=r.curveTangent(e.wrapped,o),c=jD(s),l=Math.acos(Math.min(1,Math.abs(ED(c,n))));return Math.abs(l-gD*t)<1e-6}}function AI(e){return TI(`edge`,e,AI,(t,n)=>({inDirection:(e=`Z`,t=0)=>n(kI(e,t)),ofLength:(e,t=.001)=>n(n=>Math.abs(wk(n)-e)<t),ofCurveType:e=>n(t=>yk(t)===e),parallelTo:(t=`Z`)=>AI(e).inDirection(t,0),atDistance:(e,t=[0,0,0])=>n(OI(e,t,1e-6))}))}function jI(){return AI([])}function MI(e,t){let n=jD(DI(e));return e=>{let r=fO(e),i=Math.acos(Math.min(1,Math.abs(ED(jD(r),n))));return Math.abs(i-gD*t)<1e-6}}function NI(e){return TI(`face`,e,NI,(t,n)=>({inDirection:(e=`Z`,t=0)=>n(MI(e,t)),parallelTo:(t=`Z`)=>NI(e).inDirection(t,0),ofSurfaceType:e=>n(t=>{let n=iO(t);return za(n)&&n.value===e}),ofArea:(e,t=.001)=>n(n=>{let r=AM(n);return za(r)&&Math.abs(r.value-e)<t}),atDistance:(e,t=[0,0,0])=>n(OI(e,t,1e-6))}))}function PI(){return NI([])}function FI(e){return TI(`wire`,e,FI,(e,t)=>({isClosed:()=>t(e=>Ek(e)),isOpen:()=>t(e=>!Ek(e)),ofEdgeCount:e=>t(t=>XE(t).length===e)}))}function II(){return FI([])}function LI(e,t){return typeof e==`object`&&`_topoKind`in e?e.findUnique(t):typeof e!=`function`&&TE(e)?O(e):e(PI()).findUnique(t)}function RI(e){return Array.isArray(e)&&e.length===2&&typeof e[0]==`number`&&typeof e[1]==`number`}function zI(e,t){let n=10**t,r=t<0?e:.01/n+e;return Math.round(r*n)/n}function BI(e){return Math.round(e*100)/100}function VI(e){return Math.round(e*1e5)/1e5}var HI=([e,t])=>`(${BI(e)},${BI(t)})`,UI=(e,t=1e-9)=>{let n=e;return Math.abs(e)<t&&(n=0),n.toFixed(-Math.log10(t))},WI=(e,t=1e-9)=>Array.from(new Map(e.map(([e,n])=>[`[${UI(e,t)},${UI(n,t)}]`,[e,n]])).values()),GI=class{_wrapped;_deleted=!1;constructor(e){this._wrapped=e??gT().createBoundingBox2d(),HT(this,this._wrapped)}get wrapped(){if(this._deleted)throw Error(`This object has been deleted`);return this._wrapped}delete(){this._deleted||(this._deleted=!0,UT(this._wrapped),typeof this._wrapped.delete==`function`&&this._wrapped.delete())}[Symbol.dispose](){this.delete()}get repr(){let[e,t]=this.bounds;return`${HI(e)} - ${HI(t)}`}get bounds(){let{xMin:e,yMin:t,xMax:n,yMax:r}=gT().getBBox2dBounds(this.wrapped);return[[e,t],[n,r]]}get center(){let[[e,t],[n,r]]=this.bounds;return[e+(n-e)/2,t+(r-t)/2]}get width(){let[[e],[t]]=this.bounds;return Math.abs(t-e)}get height(){let[[,e],[,t]]=this.bounds;return Math.abs(t-e)}outsidePoint(e=1){let[t,n]=this.bounds,r=n[0]-t[0],i=n[1]-t[1];return[n[0]+r/100*e,n[1]+i/100*e*.9]}add(e){gT().mergeBBox2d(this.wrapped,e.wrapped)}isOut(e){return gT().isBBox2dOut(this.wrapped,e.wrapped)}containsPoint(e){return!gT().isBBox2dOutPoint(this.wrapped,e[0],e[1])}};function KI(e){return new qI(U().deserializeCurve2d(e))}var qI=class e{_wrapped;_deleted=!1;_boundingBox;_firstPoint=null;_lastPoint=null;_firstParameter=null;_lastParameter=null;constructor(e){this._wrapped=U().wrapCurve2dHandle(e),this._boundingBox=null,typeof this._wrapped.delete==`function`&&HT(this,this._wrapped)}get wrapped(){if(this._deleted)throw Error(`This object has been deleted`);return this._wrapped}delete(){this._deleted||(this._deleted=!0,typeof this._wrapped.delete==`function`&&(UT(this._wrapped),this._wrapped.delete()))}[Symbol.dispose](){this.delete()}get boundingBox(){if(this._boundingBox)return this._boundingBox;let e=U(),t=e.createBoundingBox2d();return e.addCurveToBBox2d(t,this.wrapped,1e-6),this._boundingBox=new GI(t),this._boundingBox}get repr(){return`${this.geomType} ${HI(this.firstPoint)} - ${HI(this.lastPoint)}`}serialize(){return U().serializeCurve2d(this.wrapped)}value(e){return U().evaluateCurve2d(this.wrapped,e)}get firstPoint(){return this._firstPoint===null&&(this._firstPoint=this.value(this.firstParameter)),this._firstPoint}get lastPoint(){return this._lastPoint===null&&(this._lastPoint=this.value(this.lastParameter)),this._lastPoint}get firstParameter(){return this._firstParameter===null&&(this._firstParameter=U().getCurve2dBounds(this.wrapped).first),this._firstParameter}get lastParameter(){return this._lastParameter===null&&(this._lastParameter=U().getCurve2dBounds(this.wrapped).last),this._lastParameter}get geomType(){return U().getCurve2dType(this.wrapped)}clone(){let t=new e(U().copyCurve2d(this.wrapped));return t._firstPoint=this._firstPoint,t._lastPoint=this._lastPoint,t._firstParameter=this._firstParameter,t._lastParameter=this._lastParameter,t}reverse(){U().reverseCurve2d(this.wrapped);let e=this._firstPoint;this._firstPoint=this._lastPoint,this._lastPoint=e;let t=this._firstParameter;this._firstParameter=this._lastParameter,this._lastParameter=t}distanceFromPoint(e){let t=U().projectPointOnCurve2d(this.wrapped,e[0],e[1]),n=t?t.distance:1/0;return Math.min(n,mI(e,this.firstPoint),mI(e,this.lastPoint))}distanceFromCurve(e){let t;try{t=U().distanceBetweenCurves2d(this.wrapped,e.wrapped,this.firstParameter,this.lastParameter,e.firstParameter,e.lastParameter)}catch{t=1/0}return Math.min(t,this.distanceFromPoint(e.firstPoint),this.distanceFromPoint(e.lastPoint),e.distanceFromPoint(this.firstPoint),e.distanceFromPoint(this.lastPoint))}distanceFrom(e){return RI(e)?this.distanceFromPoint(e):this.distanceFromCurve(e)}isOnCurve(e){return this.distanceFromPoint(e)<1e-9}parameter(e,t=1e-9){let n,r,i=!1;try{let t=U().projectPointOnCurve2d(this.wrapped,e[0],e[1]);t?(n=t.distance,r=t.param):i=!0}catch{i=!0}return i?uI(e,this.firstPoint,t)?O(this.firstParameter):uI(e,this.lastPoint,t)?O(this.lastParameter):k(I(`PARAMETER_NOT_FOUND`,`Failed to find parameter`)):n===void 0||r===void 0?k(I(`PARAMETER_NOT_FOUND`,`Failed to find parameter`)):n>t?k(I(`POINT_NOT_ON_CURVE`,`Point ${HI(e)} not on curve ${this.repr}, ${n.toFixed(9)}`)):O(r)}tangentAt(e){let t;if(Array.isArray(e))t=j(this.parameter(e));else{let n=U().getCurve2dBounds(this.wrapped);t=(n.last-n.first)*e+n.first}return U().evaluateCurve2dD1(this.wrapped,t).tangent}splitAt(n,r=1e-9){let i=n.map(e=>RI(e)?j(this.parameter(e,r)):e);i=Array.from(new Map(i.map(e=>[zI(e,-Math.log10(r)),e])).values()).sort((e,t)=>e-t);let a=this.firstParameter,o=this.lastParameter;return a>o&&i.reverse(),Math.abs(t(i,0)-a)<r*100&&(i=i.slice(1)),!i.length||(Math.abs(t(i,i.length-1)-o)<r*100&&(i=i.slice(0,-1)),!i.length)?[this]:U().splitCurve2d(this.wrapped,i).map(t=>new e(t))}},JI=(e,t=1e-4,n=`C0`,r=200)=>new qI(gT().approximateCurve2dAsBSpline(e.wrapped,t,n,r)),YI=e=>(e.geomType!==`BSPLINE_CURVE`&&M(`BSplineToBezier`,`You can only convert a Bspline`),gT().decomposeBSpline2dToBeziers(e.wrapped).map(e=>new qI(e)));function XI(e,t={tolerance:1e-4,continuity:`C0`,maxSegments:300}){let n=gT();return e.flatMap(e=>{let r=e.geomType;if(r===`ELLIPSE`||r===`CIRCLE`&&uI(e.firstPoint,e.lastPoint))return e.splitAt([.5]);if([`LINE`,`ELLIPSE`,`CIRCLE`].includes(r))return e;if(r===`BEZIER_CURVE`){let t=n.getCurve2dBezierDegree(e.wrapped);if(t!==null&&[1,2,3].includes(t))return e}return XI(YI(r===`BSPLINE_CURVE`?e:JI(e,t.tolerance,t.continuity,t.maxSegments)),t)})}var ZI=(e,t)=>{let n=new qI(U().makeLine2d(e[0],e[1],t[0],t[1]));return uI(n.firstPoint,e)||n.reverse(),n},QI=(e,t,n)=>{let r=new qI(U().makeArc2dThreePoints(e[0],e[1],t[0],t[1],n[0],n[1]));if(!uI(r.firstPoint,e)){let e=U().trimCurve2d(r.wrapped,r.lastParameter,r.firstParameter);r.delete(),r=new qI(e)}return r},$I=(e,t,n)=>{let r=new qI(U().makeArc2dTangent(e[0],e[1],t[0],t[1],n[0],n[1]));if(!uI(r.firstPoint,e)){let e=U().trimCurve2d(r.wrapped,r.lastParameter,r.firstParameter);r.delete(),r=new qI(e)}return r},eL=(e,t=[0,0])=>new qI(U().makeCircle2d(t[0],t[1],e,!0)),tL=(e,t,n=[1,0],r=[0,0],i=!0)=>new qI(U().makeEllipse2d(r[0],r[1],e,t,n[0],n[1],i)),nL=(e,t,n,r,i=[0,0],a,o=!0)=>new qI(U().makeEllipseArc2d(i[0],i[1],e,t,n,r,a[0],a[1],o)),rL=(e,t,n)=>{let r=[[e[0],e[1]],...t.map(e=>[e[0],e[1]]),[n[0],n[1]]];return new qI(U().makeBezier2d(r))};function iL(e,{tolerance:t=.001,smoothing:n=null,degMax:r=3,degMin:i=1}={}){try{let a=e.map(e=>[e[0],e[1]]);return O(new qI(U().makeBSpline2d(a,{tolerance:t,smoothing:n,degMax:r,degMin:i,continuity:`C2`})))}catch(e){return k(I(`BSPLINE_2D_FAILED`,`B-spline approximation failed`,e))}}var aL=(e,t,n,r=!1)=>{let i=pI(dI(e,t),.5),a=mI(n,e)*(r?-1:1);return QI(e,dI(pI(CI(fI(i,n)),a),n),t)},oL=(e,n)=>{let r=gT(),i=e.geomType,[a,o]=n,s=`${VI(a)} ${VI(o)}`;if(i===`LINE`)return`L ${s}`;if(i===`BEZIER_CURVE`){let n=r.getCurve2dBezierPoles(e.wrapped);n||M(`adaptedCurveToPathElem`,`Expected Bezier poles`);let i=n.length-1;if(i===1)return`L ${s}`;if(i===2){let[e,r]=t(n,1);return`Q ${BI(e)} ${BI(r)} ${s}`}if(i===3){let[e,r]=t(n,1),[i,a]=t(n,2);return`C ${BI(e)} ${BI(r)} ${BI(i)} ${BI(a)} ${s}`}}if(i===`CIRCLE`){let t=r.getCurve2dCircleData(e.wrapped);t||M(`adaptedCurveToPathElem`,`Expected circle data`);let{radius:n,isDirect:i}=t,c=r.getCurve2dBounds(e.wrapped),l=(c.last-c.first)*_D,u=l===360?`${VI(a)} ${VI(o+1e-4)}`:s;return`A ${n} ${n} 0 ${Math.abs(l)>180?`1`:`0`} ${i?`1`:`0`} ${u}`}if(i===`ELLIPSE`){let t=r.getCurve2dEllipseData(e.wrapped);t||M(`adaptedCurveToPathElem`,`Expected ellipse data`);let{majorRadius:n,minorRadius:i,xAxisAngle:c,isDirect:l}=t,u=r.getCurve2dBounds(e.wrapped),d=(u.last-u.first)*_D,f=d===360?`${VI(a)} ${VI(o+1e-4)}`:s,p=180-c*_D;return`A ${VI(n)} ${VI(i)} ${VI(p)} ${Math.abs(d)>180?`1`:`0`} ${l?`1`:`0`} ${f}`}M(`adaptedCurveToPathElem`,`Unsupported curve type: ${i}`)},sL=e=>{let t=U(),n=t.createBoundingBox2d();return e.forEach(e=>{t.addCurveToBBox2d(n,e.wrapped,1e-6)}),new GI(n)};function cL(e,t){let n=U();return e.map(e=>hE(n.liftCurve2dToPlane(e.wrapped,[...t.origin],[...t.zDir],[...t.xDir])))}var lL=(e,t)=>{let n=U();return e.map(e=>hE(n.buildEdgeOnSurface(e.wrapped,t)))},uL=(e,t)=>{let n=U();return e.map(e=>t?new qI(n.transformCurve2dGeneral(e.wrapped,t)):e.clone())},dL=(e,t,n=[0,0])=>U().createAffinityGTrsf2d(n[0],n[1],-t[1],t[0],e),fL=e=>U().createTranslationGTrsf2d(e[0],e[1]),pL=(e,t=[0,0],n=`center`)=>n===`center`?U().createMirrorGTrsf2d(e[0],e[1],`point`):U().createMirrorGTrsf2d(0,0,`axis`,t[0],t[1],e[0],e[1]),mL=(e,t=[0,0])=>U().createRotationGTrsf2d(e,t[0],t[1]),hL=(e,t=[0,0])=>U().createScaleGTrsf2d(e,t[0],t[1]);function gL(e,t,n=`original`){let r=U(),i=r.extractSurfaceFromFace(t.wrapped),a=cO(t),o=null;if(n===`original`&&aO(t)!==`PLANE`){if(aO(t)!==`CYLINDRE`)return k(F(`UNSUPPORTED_FACE_TYPE`,`Only planar and cylindrical faces can be unwrapped for sketching`));let e=r.getSurfaceCylinderData(i);if(!e)return k(F(`UNSUPPORTED_FACE_TYPE`,`Could not extract cylinder data from face surface`));e.isDirect||(i=r.reverseSurfaceU(i)),o=dL(1/e.radius,[1,0])}if(n===`bounds`){o=r.createIdentityGTrsf2d();try{r.setGTrsf2dTranslationPart(o,0,0);let e=r.createAffinityGTrsf2d(0,0,0,1,a.uMax-a.uMin);if(r.multiplyGTrsf2d(o,e),e.delete(),a.uMin!==0){let e=r.createIdentityGTrsf2d();r.setGTrsf2dTranslationPart(e,-a.uMin,0),r.multiplyGTrsf2d(o,e),e.delete()}let t=r.createAffinityGTrsf2d(0,0,1,0,a.vMax-a.vMin);if(r.multiplyGTrsf2d(o,t),t.delete(),a.vMin!==0){let e=r.createIdentityGTrsf2d();r.setGTrsf2dTranslationPart(e,0,-a.vMin),r.multiplyGTrsf2d(o,e),e.delete()}}catch(e){throw o.delete(),e}}let s=lL(uL(e,o),i);return o&&o.delete(),O(s)}function _L(e,t){let n=U(),r=new qI(n.extractCurve2dFromEdge(e.wrapped,t.wrapped));return kk(e)===`backward`&&n.reverseCurve2d(r.wrapped),r}var vL=(e,t=1)=>`${e.bounds[0][0]-t} ${-e.bounds[1][1]-t} ${e.width+2*t} ${e.height+2*t}`,yL=(e,t,n=1)=>`<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="${vL(t,n)}" fill="none" stroke="black" stroke-width="0.6%" vector-effect="non-scaling-stroke">
17
17
  ${e}
18
18
  </svg>`;function bL(e){let t=e.map(e=>e.wrapped);return gE(U().makeWire(t))}var xL=class e{curves;_boundingBox;_orientation;_guessedOrientation;constructor(e){e.length===0&&M(`Blueprint`,`requires at least one curve — use createBlueprint() for Result-based validation`),this.curves=e,this._boundingBox=null,this._orientation=null,this._guessedOrientation=null}delete(){this.curves.forEach(e=>{e.delete()}),this._boundingBox&&this._boundingBox.delete()}[Symbol.dispose](){this.delete()}clone(){return new e(this.curves.map(e=>e.clone()))}get repr(){return[`Blueprint`,...this.curves.map(e=>e.repr)].join(`
@@ -4205,4 +4205,4 @@ No matching component was found for:
4205
4205
 
4206
4206
  gl_FragColor = vec4(lineColor, alpha);
4207
4207
  }
4208
- `;function ib({cellSize:e=10,lineColor:t=`#888898`,lineOpacity:n=.1,fadeStart:r=50,fadeEnd:i=200}){let a=(0,v.useRef)(null),o=i*2.5;return(0,v.useEffect)(()=>()=>{a.current?.dispose()},[]),(0,$.jsxs)(`mesh`,{rotation:[-Math.PI/2,0,0],position:[0,-.01,0],children:[(0,$.jsx)(`planeGeometry`,{args:[o,o]}),(0,$.jsx)(`shaderMaterial`,{ref:a,vertexShader:nb,fragmentShader:rb,uniforms:{cellSize:{value:e},lineColor:{value:new q(t)},lineOpacity:{value:n},fadeStart:{value:r},fadeEnd:{value:i}},transparent:!0,depthWrite:!1,side:2,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:1})]})}function ab(){return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`hemisphereLight`,{args:[`#ffffff`,`#1a1a2e`,.65]}),(0,$.jsx)(`directionalLight`,{position:[-50,60,80],intensity:.85,color:`#fff8f0`}),(0,$.jsx)(`directionalLight`,{position:[40,-40,30],intensity:.15,color:`#e0e8ff`})]})}function ob({autoRotate:e=!1,target:t,gridVisible:n=!0,gridProps:r,controlsProps:i,controlsRef:a,onControlsStart:o}){let s={...a?{ref:a}:{},...t?{target:t}:{},...o?{onStart:o}:{}};return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(ab,{}),(0,$.jsx)(tb,{}),(0,$.jsx)(Ay,{makeDefault:!0,autoRotate:e,autoRotateSpeed:1.5,...s,...i}),n&&(0,$.jsx)(ib,{...r})]})}var sb={iso:new G(.6,.5,.6),front:new G(0,.3,1),top:new G(0,1,-.01),right:new G(1,.3,0)};function cb({data:e,view:t,fitSignal:n,projection:r,onFirstFrame:i}){let a=k_(e=>e.camera),o=k_(e=>e.invalidate),s=(0,v.useRef)(!1),c=(0,v.useRef)(i);c.current=i;let{center:l,radius:u}=(0,v.useMemo)(()=>{let t=jy(e);t.computeBoundingSphere();let n=t.boundingSphere??new zi(new G,1),r={center:n.center.clone(),radius:n.radius||1};return t.dispose(),r},[e]);return(0,v.useEffect)(()=>{let e=sb[t].clone().normalize();a.position.copy(l).addScaledVector(e,u*3),a.near=u/100,a.far=u*100;let n=a;if(n.isOrthographicCamera){let e=Math.min(n.right-n.left,n.top-n.bottom);e>0&&u>0&&(n.zoom=e/(u*2.4))}a.lookAt(l),a.updateProjectionMatrix(),o(),s.current||(s.current=!0,c.current?.())},[a,o,l,u,t,n,r]),null}function lb(){let e=k_(e=>e.camera);return(0,$.jsx)(ky,{makeDefault:!0,position:(0,v.useRef)([e.position.x,e.position.y,e.position.z]).current,zoom:20,near:.1,far:2e3})}function ub(){let e=k_(e=>e.gl);return(0,v.useEffect)(()=>(e.localClippingEnabled=!0,()=>{e.localClippingEnabled=!1}),[e]),null}function db({data:e,view:t=`iso`,fitSignal:n,autoRotate:r=!1,gridVisible:i=!0,projection:a=`perspective`,onFirstFrame:o,onError:s,errorFallback:c,children:l}){return(0,$.jsx)(By,{onError:s,fallback:c,children:(0,$.jsxs)(Qv,{frameloop:r?`always`:`demand`,gl:{preserveDrawingBuffer:!0},children:[(0,$.jsx)(ub,{}),a===`orthographic`&&(0,$.jsx)(lb,{}),(0,$.jsx)(ob,{autoRotate:r,gridVisible:i}),(0,$.jsx)(cb,{data:e,view:t,fitSignal:n,projection:a,onFirstFrame:o}),l]})})}var fb=[`iso`,`front`,`top`,`right`],pb={solid:`Solid`,wireframe:`Wire`,xray:`X-ray`},mb={iso:`Iso`,front:`Front`,top:`Top`,right:`Right`};function hb({viewMode:e,onViewModeChange:t,showEdges:n,onToggleEdges:r,showGrid:i,onToggleGrid:a,autoRotate:o,onToggleAutoRotate:s,projection:c,onToggleProjection:l,activeView:u,onView:d,onFit:f,onScreenshot:p,touch:m=!1,className:h}){return(0,$.jsxs)(`div`,{className:h,style:h?void 0:{...vb,gap:m?8:6},children:[(f||p)&&(0,$.jsxs)(gb,{touch:m,children:[f&&(0,$.jsx)(_b,{label:`Fit`,onClick:f,touch:m}),p&&(0,$.jsx)(_b,{label:`Snap`,onClick:p,touch:m})]}),e&&t&&(0,$.jsx)(gb,{touch:m,children:Object.keys(pb).map(n=>(0,$.jsx)(_b,{label:pb[n],active:e===n,touch:m,onClick:()=>{t(n)}},n))}),(r||a||s||l)&&(0,$.jsxs)(gb,{touch:m,children:[r&&(0,$.jsx)(_b,{label:`Edges`,active:n,onClick:r,touch:m}),a&&(0,$.jsx)(_b,{label:`Grid`,active:i,onClick:a,touch:m}),s&&(0,$.jsx)(_b,{label:`Spin`,active:o,onClick:s,touch:m}),l&&(0,$.jsx)(_b,{label:c===`orthographic`?`Ortho`:`Persp`,active:c===`orthographic`,touch:m,onClick:l})]}),d&&(0,$.jsx)(gb,{touch:m,children:fb.map(e=>(0,$.jsx)(_b,{label:mb[e],active:u===e,touch:m,onClick:()=>{d(e)}},e))})]})}function gb({children:e,touch:t}){return(0,$.jsx)(`div`,{style:t?Sb:yb,children:e})}function _b({label:e,active:t,onClick:n,touch:r}){return(0,$.jsx)(`button`,{type:`button`,onClick:n,"aria-pressed":t,style:{...r?Cb:bb,...t?xb:null},children:e})}var vb={position:`absolute`,top:12,right:12,zIndex:10,display:`flex`,flexDirection:`column`,gap:6,pointerEvents:`none`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},yb={display:`flex`,flexDirection:`column`,gap:4,padding:4,borderRadius:8,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(255, 255, 255, 0.08)`},bb={cursor:`pointer`,pointerEvents:`auto`,padding:`4px 10px`,borderRadius:5,fontSize:12,fontWeight:500,lineHeight:1.2,color:`#9aa3ad`,background:`rgba(255, 255, 255, 0.04)`,border:`1px solid transparent`,transition:`color 120ms, background 120ms`},xb={color:`#6ee7d7`,background:`rgba(45, 212, 191, 0.16)`,borderColor:`rgba(45, 212, 191, 0.3)`},Sb={...yb,gap:6,padding:6},Cb={...bb,padding:`9px 14px`,fontSize:13,borderRadius:6};function wb({dims:e,volume:t,area:n,triangles:r,valid:i,unit:a,className:o}){let s=a?` ${a}`:``,c=[];return e&&c.push((0,$.jsx)(Tb,{label:`Size`,value:`${Eb(e[0])} × ${Eb(e[1])} × ${Eb(e[2])}${s}`},`size`)),t!==void 0&&c.push((0,$.jsx)(Tb,{label:`Volume`,value:`${Eb(t)}${a?` ${a}³`:``}`},`vol`)),n!==void 0&&c.push((0,$.jsx)(Tb,{label:`Area`,value:`${Eb(n)}${a?` ${a}²`:``}`},`area`)),r!==void 0&&c.push((0,$.jsx)(Tb,{label:`Triangles`,value:r.toLocaleString()},`tris`)),i!==void 0&&c.push((0,$.jsx)(Tb,{label:`Validity`,value:i?`valid`:`invalid`,valueColor:i?`#6ee7d7`:`#f0a0a0`},`valid`)),c.length===0?null:(0,$.jsx)(`div`,{className:o,style:o?void 0:Db,children:c})}function Tb({label:e,value:t,valueColor:n}){return(0,$.jsxs)(`div`,{style:Ob,children:[(0,$.jsx)(`span`,{style:kb,children:e}),(0,$.jsx)(`span`,{style:{...Ab,...n?{color:n}:null},children:t})]})}function Eb(e){return Number.isFinite(e)?Number.isInteger(e)?e.toLocaleString():Number(e.toFixed(2)).toLocaleString():`—`}var Db={position:`absolute`,left:12,bottom:12,zIndex:10,display:`flex`,flexDirection:`column`,gap:2,padding:`8px 10px`,borderRadius:8,minWidth:150,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(255, 255, 255, 0.08)`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},Ob={display:`flex`,justifyContent:`space-between`,gap:16,fontSize:12,lineHeight:1.5},kb={color:`#7b8591`},Ab={color:`#c8cdd3`,fontVariantNumeric:`tabular-nums`},jb={PLANE:`Planar`,CYLINDER:`Cylindrical`,CONE:`Conical`,SPHERE:`Spherical`,TORUS:`Toroidal`,BEZIER_SURFACE:`Bézier`,BSPLINE_SURFACE:`B-spline`,REVOLUTION_SURFACE:`Revolved`,EXTRUSION_SURFACE:`Extruded`,OFFSET_SURFACE:`Offset`,OTHER_SURFACE:`Surface`};function Mb(e){return jb[e]??`Surface`}function Nb(e){return Number.isFinite(e)?Number.isInteger(e)?e.toLocaleString():Number(e.toFixed(2)).toLocaleString():`—`}function Pb({face:e,onClear:t,unit:n,className:r}){if(!e)return null;let[i,a,o]=e.normal;return(0,$.jsxs)(`div`,{className:r,style:r?void 0:Ib,children:[(0,$.jsxs)(`div`,{style:Lb,children:[(0,$.jsxs)(`span`,{style:Rb,children:[Mb(e.surfaceType),` face`]}),t&&(0,$.jsx)(`button`,{type:`button`,onClick:t,"aria-label":`Clear selection`,style:zb,children:`✕`})]}),(0,$.jsx)(Fb,{label:`Area`,value:`${Nb(e.area)}${n?` ${n}²`:``}`}),(0,$.jsx)(Fb,{label:`Normal`,value:`${Nb(i)}, ${Nb(a)}, ${Nb(o)}`})]})}function Fb({label:e,value:t}){return(0,$.jsxs)(`div`,{style:Bb,children:[(0,$.jsx)(`span`,{style:Vb,children:e}),(0,$.jsx)(`span`,{style:Hb,children:t})]})}var Ib={position:`absolute`,left:12,top:12,zIndex:10,display:`flex`,flexDirection:`column`,gap:2,padding:`8px 10px`,borderRadius:8,minWidth:170,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(74, 206, 204, 0.3)`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},Lb={display:`flex`,justifyContent:`space-between`,alignItems:`center`,gap:12,marginBottom:2},Rb={color:`#6ee7d7`,fontSize:12,fontWeight:600},zb={cursor:`pointer`,border:`none`,background:`transparent`,color:`#7b8591`,fontSize:12,lineHeight:1,padding:0},Bb={display:`flex`,justifyContent:`space-between`,gap:16,fontSize:12,lineHeight:1.5},Vb={color:`#7b8591`},Hb={color:`#c8cdd3`,fontVariantNumeric:`tabular-nums`},Ub=[`x`,`y`,`z`];function Wb({enabled:e,onToggle:t,axis:n,onAxisChange:r,position:i,min:a,max:o,onPositionChange:s,flip:c,onToggleFlip:l,className:u}){return(0,$.jsxs)(`div`,{className:u,style:u?void 0:Kb,children:[(0,$.jsx)(Gb,{label:`Section`,active:e,onClick:t}),e&&(0,$.jsxs)($.Fragment,{children:[Ub.map(e=>(0,$.jsx)(Gb,{label:e.toUpperCase(),active:n===e,onClick:()=>{r(e)}},e)),(0,$.jsx)(`input`,{type:`range`,min:a,max:o,step:(o-a)/200||.01,value:i,disabled:a===o,onChange:e=>{s(Number(e.target.value))},"aria-label":`Section position`,style:{...Yb,...a===o?{opacity:.4}:null}}),(0,$.jsx)(Gb,{label:`Flip`,active:c,onClick:l})]})]})}function Gb({label:e,active:t,onClick:n}){return(0,$.jsx)(`button`,{type:`button`,onClick:n,"aria-pressed":t,style:{...qb,...t?Jb:null},children:e})}var Kb={position:`absolute`,bottom:12,left:`50%`,transform:`translateX(-50%)`,zIndex:10,display:`flex`,alignItems:`center`,gap:4,padding:4,borderRadius:8,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(255, 255, 255, 0.08)`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},qb={cursor:`pointer`,padding:`4px 10px`,borderRadius:5,fontSize:12,fontWeight:500,lineHeight:1.2,color:`#9aa3ad`,background:`rgba(255, 255, 255, 0.04)`,border:`1px solid transparent`},Jb={color:`#6ee7d7`,background:`rgba(45, 212, 191, 0.16)`,borderColor:`rgba(45, 212, 191, 0.3)`},Yb={width:160,accentColor:`#4ACECC`,margin:`0 4px`};function Xb(e){let t=new URLSearchParams(e),n=t.get(`file`);return n?{dir:t.get(`dir`),file:n}:null}function Zb(e){let t=e.lastIndexOf(`.`);return t===-1?``:e.slice(t).toLowerCase()}function Qb({inspect:e=!1}={}){let[t,n]=(0,v.useState)({status:`idle`});return(0,v.useEffect)(()=>{let t=Xb(window.location.search);if(!t){n({status:`error`,error:`missing ?file= parameter`});return}if(!t.dir){n({status:`error`,error:`missing ?dir= parameter`});return}n({status:`loading`});let r=new Worker(new URL(``+new URL(`kernelWorker-Cm0z17MP.js`,import.meta.url).href,``+import.meta.url),{type:`module`}),i=!1;r.addEventListener(`message`,e=>{i||(e.data.type===`loaded`?n({status:`ready`,data:e.data.meshData,measurements:e.data.measurements}):n({status:`error`,error:e.data.error}))});let a=`/__model/${t.file.split(`/`).map(encodeURIComponent).join(`/`)}?dir=${encodeURIComponent(t.dir)}`;return fetch(a).then(e=>{if(!e.ok)throw Error(`fetch ${t.file}: ${e.status}`);return e.arrayBuffer()}).then(n=>{let i={type:`load`,bytes:n,ext:Zb(t.file),inspect:e};r.postMessage(i,[n])}).catch(e=>{i||n({status:`error`,error:e instanceof Error?e.message:String(e)})}),()=>{i=!0,r.terminate()}},[e]),t}var $b=[`iso`,`front`,`top`,`right`],ex=new Set;function tx(e){return $b.includes(e)}function nx(e){return ex.add(e),()=>ex.delete(e)}function rx(e){for(let t of ex)t(e)}function ix(){globalThis.__ready=!0}function ax(){let e=globalThis;e.__ready=!1,e.__renderView=e=>{tx(e)&&rx({view:e})},e.__setScene=e=>{e&&tx(e.view)&&rx(e)}}function ox({marks:e}){return(0,$.jsx)($.Fragment,{children:e.map((e,t)=>(0,$.jsx)(my,{position:[e.pos[0],e.pos[1],e.pos[2]],center:!0,children:(0,$.jsx)(`div`,{style:{background:`#ffcc00`,color:`#000`,font:`700 13px monospace`,padding:`1px 5px`,borderRadius:4,border:`1px solid #000`,whiteSpace:`nowrap`,pointerEvents:`none`},children:e.label})},`${e.label}-${t}`))})}var sx=new URLSearchParams(window.location.search),cx=sx.get(`ui`)!==`0`,lx=sx.get(`dims`)===`1`;function ux(){let e=document.querySelector(`canvas`);if(!e)return;let t=e.toDataURL(`image/png`),n=document.createElement(`a`);n.href=t,n.download=`brepjs-view.png`,n.click()}function dx(){let e=Qb({inspect:cx}),[t,n]=(0,v.useState)(`iso`),[r,i]=(0,v.useState)(`solid`),[a,o]=(0,v.useState)(!0),[s,c]=(0,v.useState)(!0),[l,u]=(0,v.useState)(!1),[d,f]=(0,v.useState)(`perspective`),[p,m]=(0,v.useState)(0),[h,g]=(0,v.useState)(null),[_,y]=(0,v.useState)(null),[b,x]=(0,v.useState)(!1),[S,C]=(0,v.useState)(`x`),[w,T]=(0,v.useState)(0),[E,D]=(0,v.useState)(!1),[O,k]=(0,v.useState)([]),A=(0,v.useCallback)(()=>{m(e=>e+1)},[]),ee=(0,v.useCallback)(e=>{g(e)},[]),j=(0,v.useCallback)(e=>{y(e?e.faceId:null)},[]),M=(0,v.useMemo)(()=>e.status===`ready`?My(e.data):null,[e]);(0,v.useEffect)(()=>nx(e=>{if(n(e.view),i(e.viewMode??`solid`),e.section&&M){let t=e.section.axis===`x`?0:e.section.axis===`y`?1:2;C(e.section.axis),T(M.min[t]+e.section.frac*(M.max[t]-M.min[t])),x(!0)}else x(!1);k(e.marks??[])}),[M]);let te=S===`x`?0:S===`y`?1:2,N=M?M.min[te]:0,P=M?M.max[te]:1,F=(0,v.useCallback)(e=>{if(!M)return 0;let t=e===`x`?0:e===`y`?1:2;return(M.min[t]+M.max[t])/2},[M]),ne=(0,v.useCallback)(()=>{x(e=>(e||T(F(S)),!e))},[F,S]),re=(0,v.useCallback)(e=>{C(e),T(F(e))},[F]),ie=(0,v.useMemo)(()=>b&&M?[Py(S,w,E)]:void 0,[b,M,S,w,E]);return e.status===`error`?(0,$.jsxs)(`div`,{style:{color:`#e88`,padding:16,fontFamily:`monospace`},children:[`error: `,e.error]}):e.status===`ready`?(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(db,{data:e.data,view:t,fitSignal:p,autoRotate:l,gridVisible:s,projection:d,onFirstFrame:ix,children:[(0,$.jsx)(zy,{data:e.data,viewMode:r,...ie?{clippingPlanes:ie}:{},...cx?{onFacePick:ee,onFaceHover:j}:{}}),a&&r!==`wireframe`&&e.data.edges.length>0&&(0,$.jsx)(Uy,{edges:e.data.edges,...ie?{clippingPlanes:ie}:{}}),cx&&(0,$.jsx)(Zy,{data:e.data,selectedFaceIds:h?[h.faceId]:[],hoverFaceId:_}),O.length>0&&(0,$.jsx)(ox,{marks:O})]}),cx&&(0,$.jsx)(Pb,{face:h,onClear:()=>{g(null)}}),cx&&(0,$.jsx)(Wb,{enabled:b,onToggle:ne,axis:S,onAxisChange:re,position:w,min:N,max:P,onPositionChange:T,flip:E,onToggleFlip:()=>{D(e=>!e)}}),cx&&(0,$.jsx)(wb,{dims:Ny(e.data),volume:e.measurements.volume,area:e.measurements.area,triangles:e.data.index.length/3,valid:e.measurements.valid}),!cx&&lx&&(0,$.jsx)(wb,{dims:Ny(e.data)}),cx&&(0,$.jsx)(hb,{viewMode:r,onViewModeChange:i,showEdges:a,onToggleEdges:()=>{o(e=>!e)},showGrid:s,onToggleGrid:()=>{c(e=>!e)},autoRotate:l,onToggleAutoRotate:()=>{u(e=>!e)},projection:d,onToggleProjection:()=>{f(e=>e===`perspective`?`orthographic`:`perspective`)},activeView:t,onView:n,onFit:A,onScreenshot:ux})]}):(0,$.jsx)(`div`,{style:{color:`#9aa`,padding:16,fontFamily:`monospace`},children:`loading model…`})}ax();var fx=document.getElementById(`root`);fx&&(0,y.createRoot)(fx).render((0,$.jsx)(v.StrictMode,{children:(0,$.jsx)(dx,{})}));
4208
+ `;function ib({cellSize:e=10,lineColor:t=`#888898`,lineOpacity:n=.1,fadeStart:r=50,fadeEnd:i=200}){let a=(0,v.useRef)(null),o=i*2.5;return(0,v.useEffect)(()=>()=>{a.current?.dispose()},[]),(0,$.jsxs)(`mesh`,{rotation:[-Math.PI/2,0,0],position:[0,-.01,0],children:[(0,$.jsx)(`planeGeometry`,{args:[o,o]}),(0,$.jsx)(`shaderMaterial`,{ref:a,vertexShader:nb,fragmentShader:rb,uniforms:{cellSize:{value:e},lineColor:{value:new q(t)},lineOpacity:{value:n},fadeStart:{value:r},fadeEnd:{value:i}},transparent:!0,depthWrite:!1,side:2,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:1})]})}function ab(){return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`hemisphereLight`,{args:[`#ffffff`,`#1a1a2e`,.65]}),(0,$.jsx)(`directionalLight`,{position:[-50,60,80],intensity:.85,color:`#fff8f0`}),(0,$.jsx)(`directionalLight`,{position:[40,-40,30],intensity:.15,color:`#e0e8ff`})]})}function ob({autoRotate:e=!1,target:t,gridVisible:n=!0,gridProps:r,controlsProps:i,controlsRef:a,onControlsStart:o}){let s={...a?{ref:a}:{},...t?{target:t}:{},...o?{onStart:o}:{}};return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(ab,{}),(0,$.jsx)(tb,{}),(0,$.jsx)(Ay,{makeDefault:!0,autoRotate:e,autoRotateSpeed:1.5,...s,...i}),n&&(0,$.jsx)(ib,{...r})]})}var sb={iso:new G(.6,.5,.6),front:new G(0,.3,1),top:new G(0,1,-.01),right:new G(1,.3,0)};function cb({data:e,view:t,fitSignal:n,projection:r,onFirstFrame:i}){let a=k_(e=>e.camera),o=k_(e=>e.invalidate),s=(0,v.useRef)(!1),c=(0,v.useRef)(i);c.current=i;let{center:l,radius:u}=(0,v.useMemo)(()=>{let t=jy(e);t.computeBoundingSphere();let n=t.boundingSphere??new zi(new G,1),r={center:n.center.clone(),radius:n.radius||1};return t.dispose(),r},[e]);return(0,v.useEffect)(()=>{let e=sb[t].clone().normalize();a.position.copy(l).addScaledVector(e,u*3),a.near=u/100,a.far=u*100;let n=a;if(n.isOrthographicCamera){let e=Math.min(n.right-n.left,n.top-n.bottom);e>0&&u>0&&(n.zoom=e/(u*2.4))}a.lookAt(l),a.updateProjectionMatrix(),o(),s.current||(s.current=!0,c.current?.())},[a,o,l,u,t,n,r]),null}function lb(){let e=k_(e=>e.camera);return(0,$.jsx)(ky,{makeDefault:!0,position:(0,v.useRef)([e.position.x,e.position.y,e.position.z]).current,zoom:20,near:.1,far:2e3})}function ub(){let e=k_(e=>e.gl);return(0,v.useEffect)(()=>(e.localClippingEnabled=!0,()=>{e.localClippingEnabled=!1}),[e]),null}function db({data:e,view:t=`iso`,fitSignal:n,autoRotate:r=!1,gridVisible:i=!0,projection:a=`perspective`,onFirstFrame:o,onError:s,errorFallback:c,children:l}){return(0,$.jsx)(By,{onError:s,fallback:c,children:(0,$.jsxs)(Qv,{frameloop:r?`always`:`demand`,gl:{preserveDrawingBuffer:!0},children:[(0,$.jsx)(ub,{}),a===`orthographic`&&(0,$.jsx)(lb,{}),(0,$.jsx)(ob,{autoRotate:r,gridVisible:i}),(0,$.jsx)(cb,{data:e,view:t,fitSignal:n,projection:a,onFirstFrame:o}),l]})})}var fb=[`iso`,`front`,`top`,`right`],pb={solid:`Solid`,wireframe:`Wire`,xray:`X-ray`},mb={iso:`Iso`,front:`Front`,top:`Top`,right:`Right`};function hb({viewMode:e,onViewModeChange:t,showEdges:n,onToggleEdges:r,showGrid:i,onToggleGrid:a,autoRotate:o,onToggleAutoRotate:s,projection:c,onToggleProjection:l,activeView:u,onView:d,onFit:f,onScreenshot:p,touch:m=!1,className:h}){return(0,$.jsxs)(`div`,{className:h,style:h?void 0:{...vb,gap:m?8:6},children:[(f||p)&&(0,$.jsxs)(gb,{touch:m,children:[f&&(0,$.jsx)(_b,{label:`Fit`,onClick:f,touch:m}),p&&(0,$.jsx)(_b,{label:`Snap`,onClick:p,touch:m})]}),e&&t&&(0,$.jsx)(gb,{touch:m,children:Object.keys(pb).map(n=>(0,$.jsx)(_b,{label:pb[n],active:e===n,touch:m,onClick:()=>{t(n)}},n))}),(r||a||s||l)&&(0,$.jsxs)(gb,{touch:m,children:[r&&(0,$.jsx)(_b,{label:`Edges`,active:n,onClick:r,touch:m}),a&&(0,$.jsx)(_b,{label:`Grid`,active:i,onClick:a,touch:m}),s&&(0,$.jsx)(_b,{label:`Spin`,active:o,onClick:s,touch:m}),l&&(0,$.jsx)(_b,{label:c===`orthographic`?`Ortho`:`Persp`,active:c===`orthographic`,touch:m,onClick:l})]}),d&&(0,$.jsx)(gb,{touch:m,children:fb.map(e=>(0,$.jsx)(_b,{label:mb[e],active:u===e,touch:m,onClick:()=>{d(e)}},e))})]})}function gb({children:e,touch:t}){return(0,$.jsx)(`div`,{style:t?Sb:yb,children:e})}function _b({label:e,active:t,onClick:n,touch:r}){return(0,$.jsx)(`button`,{type:`button`,onClick:n,"aria-pressed":t,style:{...r?Cb:bb,...t?xb:null},children:e})}var vb={position:`absolute`,top:12,right:12,zIndex:10,display:`flex`,flexDirection:`column`,gap:6,pointerEvents:`none`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},yb={display:`flex`,flexDirection:`column`,gap:4,padding:4,borderRadius:8,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(255, 255, 255, 0.08)`},bb={cursor:`pointer`,pointerEvents:`auto`,padding:`4px 10px`,borderRadius:5,fontSize:12,fontWeight:500,lineHeight:1.2,color:`#9aa3ad`,background:`rgba(255, 255, 255, 0.04)`,border:`1px solid transparent`,transition:`color 120ms, background 120ms`},xb={color:`#6ee7d7`,background:`rgba(45, 212, 191, 0.16)`,borderColor:`rgba(45, 212, 191, 0.3)`},Sb={...yb,gap:6,padding:6},Cb={...bb,padding:`9px 14px`,fontSize:13,borderRadius:6};function wb({dims:e,volume:t,area:n,triangles:r,valid:i,unit:a,className:o}){let s=a?` ${a}`:``,c=[];return e&&c.push((0,$.jsx)(Tb,{label:`Size`,value:`${Eb(e[0])} × ${Eb(e[1])} × ${Eb(e[2])}${s}`},`size`)),t!==void 0&&c.push((0,$.jsx)(Tb,{label:`Volume`,value:`${Eb(t)}${a?` ${a}³`:``}`},`vol`)),n!==void 0&&c.push((0,$.jsx)(Tb,{label:`Area`,value:`${Eb(n)}${a?` ${a}²`:``}`},`area`)),r!==void 0&&c.push((0,$.jsx)(Tb,{label:`Triangles`,value:r.toLocaleString()},`tris`)),i!==void 0&&c.push((0,$.jsx)(Tb,{label:`Validity`,value:i?`valid`:`invalid`,valueColor:i?`#6ee7d7`:`#f0a0a0`},`valid`)),c.length===0?null:(0,$.jsx)(`div`,{className:o,style:o?void 0:Db,children:c})}function Tb({label:e,value:t,valueColor:n}){return(0,$.jsxs)(`div`,{style:Ob,children:[(0,$.jsx)(`span`,{style:kb,children:e}),(0,$.jsx)(`span`,{style:{...Ab,...n?{color:n}:null},children:t})]})}function Eb(e){return Number.isFinite(e)?Number.isInteger(e)?e.toLocaleString():Number(e.toFixed(2)).toLocaleString():`—`}var Db={position:`absolute`,left:12,bottom:12,zIndex:10,display:`flex`,flexDirection:`column`,gap:2,padding:`8px 10px`,borderRadius:8,minWidth:150,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(255, 255, 255, 0.08)`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},Ob={display:`flex`,justifyContent:`space-between`,gap:16,fontSize:12,lineHeight:1.5},kb={color:`#7b8591`},Ab={color:`#c8cdd3`,fontVariantNumeric:`tabular-nums`},jb={PLANE:`Planar`,CYLINDER:`Cylindrical`,CONE:`Conical`,SPHERE:`Spherical`,TORUS:`Toroidal`,BEZIER_SURFACE:`Bézier`,BSPLINE_SURFACE:`B-spline`,REVOLUTION_SURFACE:`Revolved`,EXTRUSION_SURFACE:`Extruded`,OFFSET_SURFACE:`Offset`,OTHER_SURFACE:`Surface`};function Mb(e){return jb[e]??`Surface`}function Nb(e){return Number.isFinite(e)?Number.isInteger(e)?e.toLocaleString():Number(e.toFixed(2)).toLocaleString():`—`}function Pb({face:e,onClear:t,unit:n,className:r}){if(!e)return null;let[i,a,o]=e.normal;return(0,$.jsxs)(`div`,{className:r,style:r?void 0:Ib,children:[(0,$.jsxs)(`div`,{style:Lb,children:[(0,$.jsxs)(`span`,{style:Rb,children:[Mb(e.surfaceType),` face`]}),t&&(0,$.jsx)(`button`,{type:`button`,onClick:t,"aria-label":`Clear selection`,style:zb,children:`✕`})]}),(0,$.jsx)(Fb,{label:`Area`,value:`${Nb(e.area)}${n?` ${n}²`:``}`}),(0,$.jsx)(Fb,{label:`Normal`,value:`${Nb(i)}, ${Nb(a)}, ${Nb(o)}`})]})}function Fb({label:e,value:t}){return(0,$.jsxs)(`div`,{style:Bb,children:[(0,$.jsx)(`span`,{style:Vb,children:e}),(0,$.jsx)(`span`,{style:Hb,children:t})]})}var Ib={position:`absolute`,left:12,top:12,zIndex:10,display:`flex`,flexDirection:`column`,gap:2,padding:`8px 10px`,borderRadius:8,minWidth:170,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(74, 206, 204, 0.3)`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},Lb={display:`flex`,justifyContent:`space-between`,alignItems:`center`,gap:12,marginBottom:2},Rb={color:`#6ee7d7`,fontSize:12,fontWeight:600},zb={cursor:`pointer`,border:`none`,background:`transparent`,color:`#7b8591`,fontSize:12,lineHeight:1,padding:0},Bb={display:`flex`,justifyContent:`space-between`,gap:16,fontSize:12,lineHeight:1.5},Vb={color:`#7b8591`},Hb={color:`#c8cdd3`,fontVariantNumeric:`tabular-nums`},Ub=[`x`,`y`,`z`];function Wb({enabled:e,onToggle:t,axis:n,onAxisChange:r,position:i,min:a,max:o,onPositionChange:s,flip:c,onToggleFlip:l,className:u}){return(0,$.jsxs)(`div`,{className:u,style:u?void 0:Kb,children:[(0,$.jsx)(Gb,{label:`Section`,active:e,onClick:t}),e&&(0,$.jsxs)($.Fragment,{children:[Ub.map(e=>(0,$.jsx)(Gb,{label:e.toUpperCase(),active:n===e,onClick:()=>{r(e)}},e)),(0,$.jsx)(`input`,{type:`range`,min:a,max:o,step:(o-a)/200||.01,value:i,disabled:a===o,onChange:e=>{s(Number(e.target.value))},"aria-label":`Section position`,style:{...Yb,...a===o?{opacity:.4}:null}}),(0,$.jsx)(Gb,{label:`Flip`,active:c,onClick:l})]})]})}function Gb({label:e,active:t,onClick:n}){return(0,$.jsx)(`button`,{type:`button`,onClick:n,"aria-pressed":t,style:{...qb,...t?Jb:null},children:e})}var Kb={position:`absolute`,bottom:12,left:`50%`,transform:`translateX(-50%)`,zIndex:10,display:`flex`,alignItems:`center`,gap:4,padding:4,borderRadius:8,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(255, 255, 255, 0.08)`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},qb={cursor:`pointer`,padding:`4px 10px`,borderRadius:5,fontSize:12,fontWeight:500,lineHeight:1.2,color:`#9aa3ad`,background:`rgba(255, 255, 255, 0.04)`,border:`1px solid transparent`},Jb={color:`#6ee7d7`,background:`rgba(45, 212, 191, 0.16)`,borderColor:`rgba(45, 212, 191, 0.3)`},Yb={width:160,accentColor:`#4ACECC`,margin:`0 4px`};function Xb(e){let t=new URLSearchParams(e),n=t.get(`file`);return n?{dir:t.get(`dir`),file:n}:null}function Zb(e){let t=e.lastIndexOf(`.`);return t===-1?``:e.slice(t).toLowerCase()}function Qb({inspect:e=!1}={}){let[t,n]=(0,v.useState)({status:`idle`});return(0,v.useEffect)(()=>{let t=Xb(window.location.search);if(!t){n({status:`error`,error:`missing ?file= parameter`});return}if(!t.dir){n({status:`error`,error:`missing ?dir= parameter`});return}n({status:`loading`});let r=new Worker(new URL(``+new URL(`kernelWorker-BN_e9_-u.js`,import.meta.url).href,``+import.meta.url),{type:`module`}),i=!1;r.addEventListener(`message`,e=>{i||(e.data.type===`loaded`?n({status:`ready`,data:e.data.meshData,measurements:e.data.measurements}):n({status:`error`,error:e.data.error}))});let a=`/__model/${t.file.split(`/`).map(encodeURIComponent).join(`/`)}?dir=${encodeURIComponent(t.dir)}`;return fetch(a).then(e=>{if(!e.ok)throw Error(`fetch ${t.file}: ${e.status}`);return e.arrayBuffer()}).then(n=>{let i={type:`load`,bytes:n,ext:Zb(t.file),inspect:e};r.postMessage(i,[n])}).catch(e=>{i||n({status:`error`,error:e instanceof Error?e.message:String(e)})}),()=>{i=!0,r.terminate()}},[e]),t}var $b=[`iso`,`front`,`top`,`right`],ex=new Set;function tx(e){return $b.includes(e)}function nx(e){return ex.add(e),()=>ex.delete(e)}function rx(e){for(let t of ex)t(e)}function ix(){globalThis.__ready=!0}function ax(){let e=globalThis;e.__ready=!1,e.__renderView=e=>{tx(e)&&rx({view:e})},e.__setScene=e=>{e&&tx(e.view)&&rx(e)}}function ox({marks:e}){return(0,$.jsx)($.Fragment,{children:e.map((e,t)=>(0,$.jsx)(my,{position:[e.pos[0],e.pos[1],e.pos[2]],center:!0,children:(0,$.jsx)(`div`,{style:{background:`#ffcc00`,color:`#000`,font:`700 13px monospace`,padding:`1px 5px`,borderRadius:4,border:`1px solid #000`,whiteSpace:`nowrap`,pointerEvents:`none`},children:e.label})},`${e.label}-${t}`))})}var sx=new URLSearchParams(window.location.search),cx=sx.get(`ui`)!==`0`,lx=sx.get(`dims`)===`1`;function ux(){let e=document.querySelector(`canvas`);if(!e)return;let t=e.toDataURL(`image/png`),n=document.createElement(`a`);n.href=t,n.download=`brepjs-view.png`,n.click()}function dx(){let e=Qb({inspect:cx}),[t,n]=(0,v.useState)(`iso`),[r,i]=(0,v.useState)(`solid`),[a,o]=(0,v.useState)(!0),[s,c]=(0,v.useState)(!0),[l,u]=(0,v.useState)(!1),[d,f]=(0,v.useState)(`perspective`),[p,m]=(0,v.useState)(0),[h,g]=(0,v.useState)(null),[_,y]=(0,v.useState)(null),[b,x]=(0,v.useState)(!1),[S,C]=(0,v.useState)(`x`),[w,T]=(0,v.useState)(0),[E,D]=(0,v.useState)(!1),[O,k]=(0,v.useState)([]),A=(0,v.useCallback)(()=>{m(e=>e+1)},[]),ee=(0,v.useCallback)(e=>{g(e)},[]),j=(0,v.useCallback)(e=>{y(e?e.faceId:null)},[]),M=(0,v.useMemo)(()=>e.status===`ready`?My(e.data):null,[e]);(0,v.useEffect)(()=>nx(e=>{if(n(e.view),i(e.viewMode??`solid`),e.section&&M){let t=e.section.axis===`x`?0:e.section.axis===`y`?1:2;C(e.section.axis),T(M.min[t]+e.section.frac*(M.max[t]-M.min[t])),x(!0)}else x(!1);k(e.marks??[])}),[M]);let te=S===`x`?0:S===`y`?1:2,N=M?M.min[te]:0,P=M?M.max[te]:1,F=(0,v.useCallback)(e=>{if(!M)return 0;let t=e===`x`?0:e===`y`?1:2;return(M.min[t]+M.max[t])/2},[M]),ne=(0,v.useCallback)(()=>{x(e=>(e||T(F(S)),!e))},[F,S]),re=(0,v.useCallback)(e=>{C(e),T(F(e))},[F]),ie=(0,v.useMemo)(()=>b&&M?[Py(S,w,E)]:void 0,[b,M,S,w,E]);return e.status===`error`?(0,$.jsxs)(`div`,{style:{color:`#e88`,padding:16,fontFamily:`monospace`},children:[`error: `,e.error]}):e.status===`ready`?(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(db,{data:e.data,view:t,fitSignal:p,autoRotate:l,gridVisible:s,projection:d,onFirstFrame:ix,children:[(0,$.jsx)(zy,{data:e.data,viewMode:r,...ie?{clippingPlanes:ie}:{},...cx?{onFacePick:ee,onFaceHover:j}:{}}),a&&r!==`wireframe`&&e.data.edges.length>0&&(0,$.jsx)(Uy,{edges:e.data.edges,...ie?{clippingPlanes:ie}:{}}),cx&&(0,$.jsx)(Zy,{data:e.data,selectedFaceIds:h?[h.faceId]:[],hoverFaceId:_}),O.length>0&&(0,$.jsx)(ox,{marks:O})]}),cx&&(0,$.jsx)(Pb,{face:h,onClear:()=>{g(null)}}),cx&&(0,$.jsx)(Wb,{enabled:b,onToggle:ne,axis:S,onAxisChange:re,position:w,min:N,max:P,onPositionChange:T,flip:E,onToggleFlip:()=>{D(e=>!e)}}),cx&&(0,$.jsx)(wb,{dims:Ny(e.data),volume:e.measurements.volume,area:e.measurements.area,triangles:e.data.index.length/3,valid:e.measurements.valid}),!cx&&lx&&(0,$.jsx)(wb,{dims:Ny(e.data)}),cx&&(0,$.jsx)(hb,{viewMode:r,onViewModeChange:i,showEdges:a,onToggleEdges:()=>{o(e=>!e)},showGrid:s,onToggleGrid:()=>{c(e=>!e)},autoRotate:l,onToggleAutoRotate:()=>{u(e=>!e)},projection:d,onToggleProjection:()=>{f(e=>e===`perspective`?`orthographic`:`perspective`)},activeView:t,onView:n,onFit:A,onScreenshot:ux})]}):(0,$.jsx)(`div`,{style:{color:`#9aa`,padding:16,fontFamily:`monospace`},children:`loading model…`})}ax();var fx=document.getElementById(`root`);fx&&(0,y.createRoot)(fx).render((0,$.jsx)(v.StrictMode,{children:(0,$.jsx)(dx,{})}));
@@ -1 +1 @@
1
- function e(e,t,n={}){let r={position:e.vertices,normal:e.normals,index:e.triangles,edges:t,faceGroups:e.faceGroups.map(e=>({start:e.start,count:e.count,faceId:e.faceId}))};return n.color&&(r.color=n.color),r}function t(e,t){let r={valid:n(()=>e.isValid(t))??!1},i=n(()=>e.measureVolume(t));i&&e.isOk(i)&&typeof i.value==`number`&&i.value>0&&(r.volume=i.value);let a=n(()=>e.measureArea(t));return a&&e.isOk(a)&&typeof a.value==`number`&&a.value>0&&(r.area=a.value),r}function n(e){try{return e()}catch{return}}function r(e,t){switch(t.replace(/^\./,``).toLowerCase()){case`step`:case`stp`:return e.importSTEP;case`stl`:return e.importSTL;case`iges`:case`igs`:return e.importIGES;case`3mf`:return e.importThreeMF;case`glb`:case`gltf`:return e.importGLB;case`obj`:return e.importOBJ;default:throw Error(`unsupported file extension: ${t}`)}}function i(e,t){let n;try{n=e.getFaces(t)}catch(e){return console.warn(`[brepjs-cad] getFaces threw; faces unselectable`,e),[]}let r=[];for(let t of n)try{let n=e.getSurfaceType(t),i=e.isOk(n)&&n.value?n.value:`OTHER_SURFACE`,a=e.measureArea(t),o=e.isOk(a)&&typeof a.value==`number`?a.value:NaN;r.push({faceId:e.getHashCode(t),surfaceType:i,area:o,normal:e.normalAt(t)})}catch(e){console.warn(`[brepjs-cad] face metadata threw; skipping face`,e)}return r}async function a(n,a,o,s=!1){let c=await r(n,o)(a);if(!n.isOk(c)){let e=c.error;throw Error(`import failed: ${typeof e==`string`?e:JSON.stringify(e)}`)}let l=c.value,u=e(n.mesh(l),n.meshEdges(l).lines);return s&&(u.faceInfos=i(n,l)),{meshData:u,measurements:t(n,l)}}function o(e,t){t?self.postMessage(e,t):self.postMessage(e)}let s=null;function c(){return s||=l().catch(e=>{throw s=null,e}),s}async function l(){let e=new URL(`./`,self.location.origin).href,t=await fetch(`${e}wasm/occt-wasm.js`);if(!t.ok)throw Error(`failed to load occt-wasm.js: ${t.status}`);let n=URL.createObjectURL(new Blob([await t.text()],{type:`application/javascript`})),r=await import(n);URL.revokeObjectURL(n);let i=await r.default({locateFile:t=>t.endsWith(`.wasm`)?`${e}wasm/occt-wasm.wasm`:t}),a=await import(`./brepjs-279pWbTF.js`),o=new i.OcctKernel;return a.registerKernel(`occt-wasm`,new a.OcctWasmAdapter(i,o)),a}function u(e){return[e.position.buffer,e.normal.buffer,e.index.buffer,e.edges.buffer]}async function d(e){try{let{meshData:t,measurements:n}=await a(await c(),new Blob([e.bytes]),e.ext,e.inspect??!1);o({type:`loaded`,meshData:t,measurements:n},u(t))}catch(e){o({type:`error`,error:e instanceof Error?e.message:String(e)})}}self.addEventListener(`message`,e=>{e.data.type===`load`&&d(e.data)});
1
+ function e(e,t,n={}){let r={position:e.vertices,normal:e.normals,index:e.triangles,edges:t,faceGroups:e.faceGroups.map(e=>({start:e.start,count:e.count,faceId:e.faceId}))};return n.color&&(r.color=n.color),r}function t(e,t){let r={valid:n(()=>e.isValid(t))??!1},i=n(()=>e.measureVolume(t));i&&e.isOk(i)&&typeof i.value==`number`&&i.value>0&&(r.volume=i.value);let a=n(()=>e.measureArea(t));return a&&e.isOk(a)&&typeof a.value==`number`&&a.value>0&&(r.area=a.value),r}function n(e){try{return e()}catch{return}}function r(e,t){switch(t.replace(/^\./,``).toLowerCase()){case`step`:case`stp`:return e.importSTEP;case`stl`:return e.importSTL;case`iges`:case`igs`:return e.importIGES;case`3mf`:return e.importThreeMF;case`glb`:case`gltf`:return e.importGLB;case`obj`:return e.importOBJ;default:throw Error(`unsupported file extension: ${t}`)}}function i(e,t){let n;try{n=e.getFaces(t)}catch(e){return console.warn(`[brepjs-cad] getFaces threw; faces unselectable`,e),[]}let r=[];for(let t of n)try{let n=e.getSurfaceType(t),i=e.isOk(n)&&n.value?n.value:`OTHER_SURFACE`,a=e.measureArea(t),o=e.isOk(a)&&typeof a.value==`number`?a.value:NaN;r.push({faceId:e.getHashCode(t),surfaceType:i,area:o,normal:e.normalAt(t)})}catch(e){console.warn(`[brepjs-cad] face metadata threw; skipping face`,e)}return r}async function a(n,a,o,s=!1){let c=await r(n,o)(a);if(!n.isOk(c)){let e=c.error;throw Error(`import failed: ${typeof e==`string`?e:JSON.stringify(e)}`)}let l=c.value,u=e(n.mesh(l),n.meshEdges(l).lines);return s&&(u.faceInfos=i(n,l)),{meshData:u,measurements:t(n,l)}}function o(e,t){t?self.postMessage(e,t):self.postMessage(e)}let s=null;function c(){return s||=l().catch(e=>{throw s=null,e}),s}async function l(){let e=new URL(`./`,self.location.origin).href,t=await fetch(`${e}wasm/occt-wasm.js`);if(!t.ok)throw Error(`failed to load occt-wasm.js: ${t.status}`);let n=URL.createObjectURL(new Blob([await t.text()],{type:`application/javascript`})),r=await import(n);URL.revokeObjectURL(n);let i=await r.default({locateFile:t=>t.endsWith(`.wasm`)?`${e}wasm/occt-wasm.wasm`:t}),a=await import(`./brepjs-BASg6QFK.js`),o=new i.OcctKernel;return a.registerKernel(`occt-wasm`,new a.OcctWasmAdapter(i,o)),a}function u(e){return[e.position.buffer,e.normal.buffer,e.index.buffer,e.edges.buffer]}async function d(e){try{let{meshData:t,measurements:n}=await a(await c(),new Blob([e.bytes]),e.ext,e.inspect??!1);o({type:`loaded`,meshData:t,measurements:n},u(t))}catch(e){o({type:`error`,error:e instanceof Error?e.message:String(e)})}}self.addEventListener(`message`,e=>{e.data.type===`load`&&d(e.data)});
@@ -14,7 +14,7 @@
14
14
  background: #1a1d21;
15
15
  }
16
16
  </style>
17
- <script type="module" crossorigin src="./assets/index-Drxnizk9.js"></script>
17
+ <script type="module" crossorigin src="./assets/index-D1JLFMvF.js"></script>
18
18
  </head>
19
19
  <body>
20
20
  <div id="root"></div>