brepjs-cad 0.122.0 → 0.124.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,91 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.124.0](https://github.com/andymai/brepjs/compare/brepjs-cad-v0.123.1...brepjs-cad-v0.124.0) (2026-08-09)
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
+ * **core:** bump occt-wasm to 3.7.0 with borrowed adjacency handles ([#1821](https://github.com/andymai/brepjs/issues/1821)) ([4b76974](https://github.com/andymai/brepjs/commit/4b76974833f2d9900740fffcec2dd589de952ff9))
38
+ * **deps:** clear all remaining OSV findings to get main green ([#1917](https://github.com/andymai/brepjs/issues/1917)) ([2456ef4](https://github.com/andymai/brepjs/commit/2456ef40860129a59027d055978c002004104925))
39
+ * **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))
40
+
41
+
42
+ ### Reverts
43
+
44
+ * restore brepjs-cad brepjs dep floor — "*" did not fix the release churn ([#1854](https://github.com/andymai/brepjs/issues/1854)) ([194caba](https://github.com/andymai/brepjs/commit/194cabaa6c7196ee38a3b3ddaa68a881909ae263))
45
+
46
+ ## [0.123.0](https://github.com/andymai/brepjs/compare/brepjs-cad-v0.122.0...brepjs-cad-v0.123.0) (2026-08-09)
47
+
48
+
49
+ ### Features
50
+
51
+ * **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))
52
+ * **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))
53
+ * **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))
54
+ * **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))
55
+ * **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))
56
+ * **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))
57
+ * **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))
58
+ * **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))
59
+ * **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))
60
+
61
+
62
+ ### Bug Fixes
63
+
64
+ * **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))
65
+ * **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))
66
+ * **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))
67
+ * **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))
68
+ * **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))
69
+ * **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))
70
+ * **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))
71
+ * **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))
72
+ * **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))
73
+ * **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))
74
+ * **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))
75
+ * **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))
76
+ * **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))
77
+ * **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))
78
+ * **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))
79
+ * **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))
80
+ * **core:** bump occt-wasm to 3.7.0 with borrowed adjacency handles ([#1821](https://github.com/andymai/brepjs/issues/1821)) ([4b76974](https://github.com/andymai/brepjs/commit/4b76974833f2d9900740fffcec2dd589de952ff9))
81
+ * **deps:** clear all remaining OSV findings to get main green ([#1917](https://github.com/andymai/brepjs/issues/1917)) ([2456ef4](https://github.com/andymai/brepjs/commit/2456ef40860129a59027d055978c002004104925))
82
+ * **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))
83
+
84
+
85
+ ### Reverts
86
+
87
+ * restore brepjs-cad brepjs dep floor — "*" did not fix the release churn ([#1854](https://github.com/andymai/brepjs/issues/1854)) ([194caba](https://github.com/andymai/brepjs/commit/194cabaa6c7196ee38a3b3ddaa68a881909ae263))
88
+
3
89
  ## [0.122.0](https://github.com/andymai/brepjs/compare/brepjs-cad-v0.121.1...brepjs-cad-v0.122.0) (2026-08-09)
4
90
 
5
91
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "brepjs-cad",
3
- "version": "0.122.0",
3
+ "version": "0.124.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",
@@ -6,7 +6,7 @@ var e=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports);function
6
6
  `)+`
7
7
  `).buffer}function ei(e,t){return e.toBREP(E(t))}function ti(e,t){return D(e,e.fromBREP(t))}function ni(e,t,n){let r=e.xcafNewDocument();for(let t of n){let n=e.xcafAddShape(r,E(t.shape));if(t.name&&e.xcafSetName(r,n,t.name),t.color){let[i,a,o]=t.color;e.xcafSetColor(r,n,i/255,a/255,o/255)}}return T(`compound`,r)}function ri(e,t,n){let r=E(t),i=e.xcafGetRootLabels(r),a=(()=>{try{return i.size()>0}finally{i.delete()}})();try{return a?e.xcafExportSTEP(r):``}finally{e.xcafClose(r)}}function ii(e,t,n,r){if(n.length===0)return``;let i=ni(e,t,n.map(e=>({shape:e.shape,name:e.name??``,color:e.color})));try{return ri(e,i)}finally{i.delete()}}function ai(e,t,n,r){return T(`vertex`,e.makeVertex(t,n,r))}function oi(e,t){throw Pe(t)?Error(`occt-wasm: makeEdge from curve handle is not implemented`):Error(`occt-wasm: makeEdge is not implemented`)}function si(e,t,n){let r=Ie(t,n.map(E));try{return T(`wire`,e.makeWire(r))}finally{r.delete()}}function ci(e,t,n){let r=[],i=new Set(n.map(e=>E(e)));for(let t of n){let n=e.getSubShapes(E(t),`edge`);try{let e=n.size();for(let t=0;t<e;t++)r.push(n.get(t))}finally{n.delete()}}let a=Ie(t,r);try{return T(`wire`,e.makeWire(a))}finally{a.delete();for(let t of r)i.has(t)||e.release(t)}}function li(e,t,n){return T(`face`,e.makeFace(E(t)))}function ui(e,t,n){return T(`edge`,e.makeLineEdge(t[0],t[1],t[2],n[0],n[1],n[2]))}function di(e,t,n,r){return T(`edge`,e.makeCircleEdge(t[0],t[1],t[2],n[0],n[1],n[2],r))}function fi(e,t,n,r,i,a){return T(`edge`,e.makeCircleArc(t[0],t[1],t[2],n[0],n[1],n[2],r,i,a))}function pi(e,t,n,r){return T(`edge`,e.makeArcEdge(t[0],t[1],t[2],n[0],n[1],n[2],r[0],r[1],r[2]))}function mi(e,t,n,r,i){return T(`edge`,e.makeEllipseEdge(t[0],t[1],t[2],n[0],n[1],n[2],r,i))}function hi(e,t,n,r,i,a,o){return T(`edge`,e.makeEllipseArc(t[0],t[1],t[2],n[0],n[1],n[2],r,i,a,o))}function gi(e,t,n){let r=[];for(let e of n)r.push(e[0],e[1],e[2]);let i=Re(t,r);try{return T(`edge`,e.makeBezierEdge(i))}finally{i.delete()}}function _i(e,t,n,r){let[i,a,o]=t,[s,c,l]=n,[u,d,f]=r;return T(`edge`,e.makeTangentArc(i,a,o,s,c,l,u,d,f))}function vi(e,t,n,r,i,a){let o=i?i[0]:0,s=i?i[1]:0,c=i?i[2]:0,l=a?a[0]:0,u=a?a[1]:0,d=a?a[2]:1,f=e.makeHelixWire(o,s,c,l,u,d,t,n,r);return e.buildCurves3d(f),T(`wire`,f)}function yi(e,t,n){let r=Ie(t,n.map(E));try{return T(`compound`,e.makeCompound(r))}finally{r.delete()}}function bi(e,t){return T(`solid`,e.solidFromShell(E(t)))}function xi(e,t,n,r,i){let a=[];for(let[t,i,o]of r){let r=n[t],s=n[i],c=n[o];!r||!s||!c||a.push(e.buildTriFace(r.x,r.y,r.z,s.x,s.y,s.z,c.x,c.y,c.z))}let o=Ie(t,a);try{let t=e.sewAndSolidify(o,i),n=e.fixFaceOrientations(t);return n!==t&&e.release(t),D(e,n)}finally{o.delete();for(let t of a)e.release(t)}}function Si(e,t){return T(`face`,e.makeNonPlanarFace(E(t)))}function Ci(e,t,n,r){let i=Ie(t,r.map(E));try{return T(`face`,e.addHolesInFace(E(n),i))}finally{i.delete()}}function wi(e,t,n){let r=e.getSubShapes(E(n),`wire`),i=(()=>{try{return r.size()-1}finally{r.delete()}})(),a=[];for(let e=0;e<i;e++)a.push(e);let o=Le(t,a);try{return T(`face`,e.removeHolesFromFace(E(n),o))}finally{o.delete()}}function Ti(e,t,n){let r=E(t);return T(`face`,e.makeFaceOnSurface(r,E(n)))}function Ei(e,t,n,r,i){let a=new t.VectorDouble;for(let[e,t,r]of n)a.push_back(e),a.push_back(t),a.push_back(r);try{return T(`face`,e.bsplineSurface(a,r,i))}finally{a.delete()}}function Di(e,t,n,r,i){let a=[];for(let t=0;t<r-1;t++)for(let r=0;r<i-1;r++){let o=t*i+r,s=(t+1)*i+r,c=t*i+(r+1),l=(t+1)*i+(r+1),u=n[o],d=n[s],f=n[c],p=n[l];u&&d&&f&&a.push(e.buildTriFace(u[0],u[1],u[2],d[0],d[1],d[2],f[0],f[1],f[2])),d&&p&&f&&a.push(e.buildTriFace(d[0],d[1],d[2],p[0],p[1],p[2],f[0],f[1],f[2]))}let o=Ie(t,a);try{return D(e,e.sewAndSolidify(o,.001))}finally{o.delete();for(let t of a)e.release(t)}}function Oi(e,t,n,r){let i=e.buildTriFace(t[0],t[1],t[2],n[0],n[1],n[2],r[0],r[1],r[2]);return i===0?null:T(`face`,i)}function ki(e,t,n,r){let i=Ie(t,n.map(E));try{let t=e.sewAndSolidify(i,r),n=e.fixFaceOrientations(t);return n!==t&&e.release(t),T(`solid`,n)}finally{i.delete()}}function Ai(e,t,n){return{x:e,y:t,z:n,__type:`point3d`,delete:Ne}}function ji(e,t,n){return{x:e,y:t,z:n,__type:`direction3d`,delete:Ne}}function Mi(e,t,n){return{x:e,y:t,z:n,__type:`vector3d`,delete:Ne}}function Ni(e,t,n,r,i,a){return{origin:{x:e,y:t,z:n},direction:{x:r,y:i,z:a},__type:`axis1`,delete:Ne}}function Pi(e,t,n,r,i,a,o,s,c){return{origin:{x:e,y:t,z:n},zDir:{x:r,y:i,z:a},xDir:o===void 0?void 0:{x:o,y:s,z:c},__type:`axis2`,delete:Ne}}function Fi(e,t,n,r,i,a,o,s,c){return{origin:{x:e,y:t,z:n},zDir:{x:r,y:i,z:a},xDir:o===void 0?void 0:{x:o,y:s,z:c},__type:`axis3`,delete:Ne}}function Ii(e){return e}function Li(e){return e}function Ri(e,t){return{x:e,y:t}}function zi(e,t){let n=Math.sqrt(e*e+t*t);if(n<1e-15)throw Error(`occt-wasm: createDirection2d called with zero-length vector`);return{x:e/n,y:t/n}}function Bi(e,t){return{x:e,y:t}}function Vi(e,t,n,r){return{px:e,py:t,dx:n,dy:r,delete(){}}}function Hi(e){return e}function Ui(e,t,n,r){return Li(te(e,t,n,r))}function Wi(e,t,n,r){return Li(ne(e,t,n,r))}function Gi(e,t,n,r,i,a){let o=2*(e*(r-a)+n*(a-t)+i*(t-r));if(Math.abs(o)<1e-12)return Li(te(e,t,i,a));let s=((e*e+t*t)*(r-a)+(n*n+r*r)*(a-t)+(i*i+a*a)*(t-r))/o,c=((e*e+t*t)*(i-n)+(n*n+r*r)*(e-i)+(i*i+a*a)*(n-e))/o,l=Math.sqrt((e-s)**2+(t-c)**2),u=Math.atan2(t-c,e-s),d=Math.atan2(r-c,n-s),f=Math.atan2(a-c,i-s),p=d-u;p<0&&(p+=2*Math.PI);let m=f-u;m<0&&(m+=2*Math.PI);let h=p<m,g=ne(s,c,l,h);if(!h){let e=-u,t=-f;return t<e-1e-9&&(t+=2*Math.PI),Li({__bk2d:`trimmed`,basis:g,tStart:e,tEnd:t})}let _=f;return _<u-1e-9&&(_+=2*Math.PI),Li({__bk2d:`trimmed`,basis:g,tStart:u,tEnd:_})}function Ki(e,t,n,r,i,a){let o=Math.sqrt(n*n+r*r),s=o>0?n/o:0,c=o>0?r/o:0,l=e-i,u=t-a,d=2*(u*s-l*c);if(Math.abs(d)<1e-12)return Li(te(e,t,i,a));let f=-(l*l+u*u)/d,p=e-f*c,m=t+f*s,h=Math.abs(f),g=Math.atan2(t-m,e-p),_=Math.atan2(a-m,i-p),v=-(t-m)/h,y=(e-p)/h,b=v*s+y*c>0,x=ne(p,m,h,b);if(!b){let e=-g,t=-_;return t<e-1e-9&&(t+=2*Math.PI),Li({__bk2d:`trimmed`,basis:x,tStart:e,tEnd:t})}let S=_;return S<g-1e-9&&(S+=2*Math.PI),Li({__bk2d:`trimmed`,basis:x,tStart:g,tEnd:S})}function qi(e,t,n,r,i,a,o){return Li(ae(e,t,n,r,i??1,a??0,o??!0))}function Ji(e,t,n,r,i,a,o,s,c){return Li({...ae(e,t,n,r,o??1,s??0,c??!0),__bk2d:`ellipse`,startAngle:i,endAngle:a})}function Yi(e){return Li(oe(e))}function Xi(e,t){let n=e,r=n.length,i=Math.max(1,Math.min(t?.degMax??3,r-1)),a=[0],o=[i+1],s=r-i-1;for(let e=1;e<=s;e++)a.push(e/(s+1)),o.push(1);return a.push(1),o.push(i+1),Li({__bk2d:`bspline`,poles:n,knots:a,multiplicities:o,degree:i,isPeriodic:!1})}function Zi(e,t){return S(Ii(e),t)}function Qi(e,t){return{point:S(Ii(e),t),tangent:C(Ii(e),t)}}function $i(e){return w(Ii(e))}function ea(e){let t=Ii(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return ee(t)}function ta(e,t,n){return Li({__bk2d:`trimmed`,basis:Ii(e),tStart:t,tEnd:n})}function na(e){return Li(JSON.parse(JSON.stringify(Ii(e))))}function ra(e,t){let n=Ii(e),r=w(n),i=[];for(let e=0;e<=20;e++){let a=r.first+(r.last-r.first)*e/20,[o,s]=S(n,a),[c,l]=C(n,a),u=Math.sqrt(c*c+l*l)||1;i.push([o-l/u*t,s+c/u*t])}return Li(oe(i.length<=25?i:i.filter((e,t)=>t%2==0||t===i.length-1)))}function ia(e,t,n){return Li(se(Ii(e),t,n))}function aa(e,t,n,r){return Li(ce(Ii(e),t,n,r))}function oa(e,t,n,r){return Li(le(Ii(e),t,n,r))}function sa(e,t,n){return Li(ue(Ii(e),t,n))}function ca(e,t,n,r,i){return Li(de(Ii(e),t,n,r,i))}function la(e,t,n,r,i,a){let o=Math.sqrt(r*r+i*i);if(o<1e-15)return e;let s=-i/o,c=r/o,l=a-1,u=1+l*s*s,d=l*s*c,f=l*c*s,p=1+l*c*c,m=t-u*t-d*n,h=n-f*t-p*n,g=Ii(e),_=w(g),v=[];for(let e=0;e<=20;e++){let[t,n]=S(g,_.first+(_.last-_.first)*e/20);v.push([u*t+d*n+m,f*t+p*n+h])}return Li(oe(v))}function ua(e,t,n,r,i,a){return la(e,t,n,r,i,a)}function da(){return{type:`identity2d`,delete(){}}}function fa(e,t,n,r,i){return{type:`affinity2d`,axOriginX:e,axOriginY:t,axDirX:n,axDirY:r,ratio:i,delete(){}}}function pa(e,t){return{type:`translate2d`,dx:e,dy:t,delete(){}}}function ma(e,t,n,r,i,a,o){return{type:`mirror2d`,cx:e,cy:t,mode:n,originX:r,originY:i,dirX:a,dirY:o,delete(){}}}function ha(e,t,n){return{type:`rotate2d`,angle:e,cx:t,cy:n,delete(){}}}function ga(e,t,n){return{type:`scale2d`,sx:e,sy:e,cx:t,cy:n,delete(){}}}function _a(e,t,n){let r=e;r.dx=(Number(r.dx)||0)+t,r.dy=(Number(r.dy)||0)+n}function va(e,t){let n=e,r=t;n.dx=(Number(n.dx)||0)+(Number(r.dx)||0),n.dy=(Number(n.dy)||0)+(Number(r.dy)||0),r.type===`scale2d`&&(n.type=`scale2d`,n.sx=r.sx,n.sy=r.sy)}function ya(e,t){let n=t;return n.type===`translate2d`?ia(e,Number(n.dx)||0,Number(n.dy)||0):n.type===`rotate2d`?aa(e,Number(n.angle)||0,Number(n.cx)||0,Number(n.cy)||0):n.type===`scale2d`?oa(e,Number(n.sx)||1,Number(n.cx)||0,Number(n.cy)||0):n.type===`mirror2d`?sa(e,Number(n.ox)||0,Number(n.oy)||0):n.type===`affinity2d`?la(e,Number(n.axOriginX)||0,Number(n.axOriginY)||0,Number(n.axDirX)||0,Number(n.axDirY)||0,Number(n.ratio)||1):Number(n.dx)||Number(n.dy)?ia(e,Number(n.dx)||0,Number(n.dy)||0):e}function ba(e,t,n){let r=fe(Ii(e),Ii(t),n);return{points:r.points,segments:r.segments.map(e=>Li(e))}}function xa(e,t,n){let r=Ii(e),i=w(r),a=(e,r,i)=>{if(e.__bk2d===`line`){let a=(t-e.ox)*e.dx+(n-e.oy)*e.dy,o=Math.max(r,Math.min(i,a)),[s,c]=S(e,o);return{param:o,distance:Math.sqrt((s-t)**2+(c-n)**2)}}let a=r,o=1/0;for(let s=0;s<=200;s++){let c=r+(i-r)*s/200,[l,u]=S(e,c),d=(l-t)**2+(u-n)**2;d<o&&(o=d,a=c)}return{param:a,distance:Math.sqrt(o)}};if(r.__bk2d===`trimmed`){let e=r.tStart,t=r.tEnd,n=a(r.basis,e,t);if(!n)return null;let i=t-e,o=i>1e-15?(n.param-e)/i:0;return{param:Math.max(0,Math.min(1,o)),distance:n.distance}}return a(r,i.first,i.last)}function Sa(e,t,n,r,i,a){let o=1/0;for(let s=0;s<=20;s++){let c=n+(r-n)*(s/20),[l,u]=S(Ii(e),c);for(let e=0;e<=20;e++){let n=i+(a-i)*(e/20),[r,s]=S(Ii(t),n),c=Math.sqrt((r-l)**2+(s-u)**2);c<o&&(o=c)}}return o}function Ca(e,t){let n=Ii(e),r=w(n),i=Math.min(Math.max(t+1,10),100),a=[];for(let e=0;e<i;e++){let t=r.first+(r.last-r.first)*e/(i-1);a.push(S(n,t))}let o=Math.min(3,i-1),s=a.length,c=[],l=[],u=s-o-1;c.push(0),l.push(o+1);for(let e=1;e<=u;e++)c.push(e/(u+1)),l.push(1);return c.push(1),l.push(o+1),Li({__bk2d:`bspline`,poles:a,knots:c,multiplicities:l,degree:o,isPeriodic:!1})}function wa(e){let t=Ii(e);for(;t.__bk2d===`trimmed`;)t=t.basis;if(t.__bk2d!==`bspline`)return[e];let n=t.poles,r=t.degree,i=[];for(let e=0;e<t.knots.length;e++){let n=t.knots[e]??0,r=t.multiplicities[e]??0;for(let e=0;e<r;e++)i.push(n)}let a=n.length-1+r+1;if(r<1||i.length!==a+1)return[Li(oe(n))];let o=e=>[e[0],e[1]],s=[],c=r,l=r+1,u=[];for(let e=0;e<=r;e++)u[e]=o(n[e]);let d=[];for(;l<a;){let e=l;for(;l<a&&i[l+1]===i[l];)l++;let t=l-e+1;if(t<r){let e=i[l]-i[c],n=[];for(let a=r;a>t;a--)n[a-t-1]=e/(i[c+a]-i[c]);let s=r-t;for(let e=1;e<=s;e++){let i=s-e,c=t+e;for(let e=r;e>=c;e--){let t=n[e-c],r=u[e],i=u[e-1];u[e]=[t*r[0]+(1-t)*i[0],t*r[1]+(1-t)*i[1]]}l<a&&(d[i]=o(u[r]))}}if(s.push(u),l<a){for(let e=r-t;e<=r;e++)d[e]=o(n[l-r+e]);u=d,d=[],c=l,l++}}return s.map(e=>Li(oe(e)))}function Ta(){return Ce()}function Ea(e,t,n){we(e,Ii(t),n)}function Da(e){return{xMin:e.xMin,yMin:e.yMin,xMax:e.xMax,yMax:e.yMax}}function Oa(e,t){e.xMin=Math.min(e.xMin,t.xMin),e.yMin=Math.min(e.yMin,t.yMin),e.xMax=Math.max(e.xMax,t.xMax),e.yMax=Math.max(e.yMax,t.yMax)}function ka(e,t){return e.xMax<t.xMin||e.xMin>t.xMax||e.yMax<t.yMin||e.yMin>t.yMax}function Aa(e,t,n){return t<e.xMin||t>e.xMax||n<e.yMin||n>e.yMax}function ja(e){let t=Ii(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return t.__bk2d===`circle`?{cx:t.cx,cy:t.cy,radius:t.radius,isDirect:t.sense}:null}function Ma(e){let t=Ii(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return t.__bk2d===`ellipse`?{majorRadius:t.majorRadius,minorRadius:t.minorRadius,xAxisAngle:t.xDirAngle,isDirect:t.sense}:null}function Na(e){let t=Ii(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return t.__bk2d===`bezier`?t.poles:null}function Pa(e){let t=Ii(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return t.__bk2d===`bezier`?t.poles.length-1:null}function Fa(e){return xe(Ii(e))}function Ia(e){return Li(Se(e))}function La(e,t){let n=w(Ii(e)),r=[n.first,...t.sort((e,t)=>e-t),n.last],i=[];for(let t=0;t<r.length-1;t++){let a=r[t]??n.first,o=r[t+1]??n.last;i.push(ta(e,a,o))}return i}function Ra(e,t,n,r,i,a){let o=Ii(n),[s,c,l]=r,[u,d,f]=i,[p,m,h]=a,g=d*h-f*m,_=f*p-u*h,v=u*m-d*p,y=(e,t)=>[s+e*p+t*g,c+e*m+t*_,l+e*h+t*v],b=o.__bk2d;if(b===`line`){let t=w(o),[n,r]=S(o,t.first),[i,a]=S(o,t.last),s=y(n,r),c=y(i,a);return T(`edge`,e.makeLineEdge(s[0],s[1],s[2],c[0],c[1],c[2]))}if(b===`trimmed`){let t=o;if(t.basis&&t.basis.__bk2d===`line`){let[t,n]=S(o,0),[r,i]=S(o,1),a=y(t,n),s=y(r,i);return T(`edge`,e.makeLineEdge(a[0],a[1],a[2],s[0],s[1],s[2]))}if(t.basis&&t.basis.__bk2d===`circle`){let t=w(o),[n,r]=S(o,t.first),[i,a]=S(o,(t.first+t.last)/2),[s,c]=S(o,t.last),l=y(n,r),u=y(i,a),d=y(s,c);return T(`edge`,e.makeArcEdge(l[0],l[1],l[2],u[0],u[1],u[2],d[0],d[1],d[2]))}}if(b===`circle`){let t=o;if(t.cx!==void 0&&t.radius!==void 0){let[n,r,i]=y(t.cx,t.cy);return T(`edge`,e.makeCircleEdge(n,r,i,u,d,f,t.radius))}let n=w(o),[r,i]=S(o,n.first),[a,s]=S(o,(n.first+n.last)/2),[c,l]=S(o,n.last),p=y(r,i),m=y(a,s),h=y(c,l);return T(`edge`,e.makeArcEdge(p[0],p[1],p[2],m[0],m[1],m[2],h[0],h[1],h[2]))}let x=w(o),C=(x.last-x.first)/24,ee=[];for(let e=0;e<=24;e++){let[t,n]=S(o,x.first+e*C),[r,i,a]=y(t,n);ee.push(r,i,a)}let te=new t.VectorDouble;for(let e of ee)te.push_back(e);try{return T(`edge`,e.interpolatePoints(te,!1))}finally{te.delete()}}function za(e,t,n,r){let i=Ii(n),a=w(i),o=E(r),s=new t.VectorDouble;for(let t=0;t<=30;t++){let[n,r]=S(i,a.first+(a.last-a.first)*t/30),c=e.pointOnSurface(o,n,r);try{s.push_back(c.get(0)),s.push_back(c.get(1)),s.push_back(c.get(2))}finally{c.delete()}}try{return T(`edge`,e.interpolatePoints(s,!1))}finally{s.delete()}}function Ba(e){return e}function Va(e,t,n){let[r,i]=Vt(e,t),a=[];for(let o=0;o<=60;o++){let s=yn(e,n,Ht(e,t,r+(i-r)*o/60));s&&a.push(s)}if(a.length<2)throw Error(`occt-wasm: extractCurve2dFromEdge could not project the edge onto the face surface`);return Xi(a)}function Ha(e,t){e.buildCurves3d(E(t))}function Ua(e,t,n,r){return T(`wire`,e.fixWireOnFace(E(t),E(n),r))}function Wa(e){try{let t=ze(e.modified),n=ze(e.generated),r=ze(e.deleted),i=e=>{let t=new Map,n=0;for(;n+1<e.length;){let r=e[n]??0,i=e[n+1]??0;n+=2;let a=[];for(let t=0;t<i&&n<e.length;t++,n++)a.push(e[n]??0);t.set(r,a)}return t};return{id:e.resultId,evolution:{modified:i(t),generated:i(n),deleted:new Set(r)}}}finally{e.delete()}}function Ga(e,t,n,r,i,a,o,s){let c=Le(t,o);try{let{id:t,evolution:o}=Wa(e.translateWithHistory(E(n),r,i,a,c,s));return{shape:D(e,t),evolution:o}}finally{c.delete()}}function Ka(e,t,n,r,i,a,o,s){let c=o??[0,0,1],l=s??[0,0,0],u=Le(t,i);try{let{id:t,evolution:i}=Wa(e.rotateWithHistory(E(n),l[0],l[1],l[2],c[0],c[1],c[2],r,u,a));return{shape:D(e,t),evolution:i}}finally{u.delete()}}function qa(e,t,n,r,i,a,o){let s=Le(t,a);try{let{id:t,evolution:a}=Wa(e.mirrorWithHistory(E(n),r[0],r[1],r[2],i[0],i[1],i[2],s,o));return{shape:D(e,t),evolution:a}}finally{s.delete()}}function Ja(e,t,n,r,i,a,o){let s=Le(t,a);try{let{id:t,evolution:a}=Wa(e.scaleWithHistory(E(n),r[0],r[1],r[2],i,s,o));return{shape:D(e,t),evolution:a}}finally{s.delete()}}function Ya(e,t,n,r,i,a){let o=e(t,n,r,i),s=new Map;for(let e of a)s.set(e,[e]);return{shape:o,evolution:{modified:s,generated:new Map,deleted:new Set}}}function Xa(e,t,n,r,i,a,o){let s=Le(t,i);try{let{id:t,evolution:i}=Wa(e.fuseWithHistory(E(n),E(r),s,a));return{shape:D(e,t),evolution:i,diagnostics:{hasErrors:!1,hasWarnings:!1,messages:[]}}}finally{s.delete()}}function Za(e,t,n,r,i,a,o){let s=Le(t,i),c;try{c=Ge(e,r);let{id:t,evolution:i}=Wa(e.cutWithHistory(E(n),c.id,s,a));return{shape:D(e,t),evolution:i,diagnostics:{hasErrors:!1,hasWarnings:!1,messages:[]}}}finally{s.delete(),c?.dispose()}}function Qa(e,t,n,r,i,a,o){let s=Le(t,i),c;try{c=Ge(e,r);let{id:t,evolution:i}=Wa(e.intersectWithHistory(E(n),c.id,s,a));return{shape:D(e,t),evolution:i,diagnostics:{hasErrors:!1,hasWarnings:!1,messages:[]}}}finally{s.delete(),c?.dispose()}}function $a(e,t,n,r,i,a,o){let s=Ve(r,i),c=Ie(t,r.map(E)),l=Le(t,a);try{let{id:t,evolution:r}=Wa(e.filletWithHistory(E(n),c,s,l,o));return{shape:D(e,t),evolution:r}}finally{c.delete(),l.delete()}}function eo(e,t,n,r,i,a,o){let s=Ve(r,i),c=Ie(t,r.map(E)),l=Le(t,a);try{let{id:t,evolution:r}=Wa(e.chamferWithHistory(E(n),c,s,l,o));return{shape:D(e,t),evolution:r}}finally{c.delete(),l.delete()}}function to(e,t,n,r,i,a,o,s){let c=Ie(t,r.map(E)),l=Le(t,a);try{let{id:t,evolution:r}=Wa(e.shellWithHistory(E(n),c,i,s??.001,l,o));return{shape:D(e,t),evolution:r}}finally{c.delete(),l.delete()}}function no(e,t,n,r,i,a){let o=Le(t,i);try{let{id:t,evolution:i}=Wa(e.thickenWithHistory(E(n),r,.001,o,a));return{shape:D(e,t),evolution:i}}finally{o.delete()}}function ro(e,t,n,r,i,a,o){let s=Le(t,i);try{let{id:t,evolution:i}=Wa(e.offsetWithHistory(E(n),r,o??1e-6,s,a));return{shape:D(e,t),evolution:i}}finally{s.delete()}}function io(e,t,n,r,i){let[a,o,s]=r,c=E(t);for(let t of n){let n=(typeof i==`number`?i:i(t))*Math.PI/180;c=e.draft(c,E(t),n,a,o,s)}return{shape:D(e,c),evolution:{modified:new Map,generated:new Map,deleted:new Set}}}function ao(e,t,n,r,i,a,o){let s=e(r,i),c=t(s,`face`),l=new Map,u=Math.min(a.length,c.length);for(let e=0;e<u;e++){let t=c[e],r=a[e];t!==void 0&&r!==void 0&&l.set(r,[n(t,o)])}return{shape:s,evolution:{modified:l,generated:new Map,deleted:new Set}}}function oo(e,t,n,r){if(n.length<4)throw Error(`hullFromPoints: need at least 4 points`);let{points:i,faces:a}=x(n,r);if(a.length<4)throw Error(`hullFromPoints: degenerate hull (fewer than 4 faces)`);return xi(e,t,[...i],[...a],r)}function so(e,t,n,r){let i=Math.max(r,1),a=[];for(let r of n){let n=e.tessellate(E(r),i,i*.5);try{let e=n.positionCount,r=n.getPositionsPtr()>>2;for(let n=0;n<e;n+=3)a.push({x:t.HEAPF32[r+n]??0,y:t.HEAPF32[r+n+1]??0,z:t.HEAPF32[r+n+2]??0})}finally{n.delete()}}return a}function co(e,t,n,r){if(n.length===0)throw Error(`hull: no shapes provided`);let i=so(e,t,n,r);if(i.length<4)throw Error(`hull: fewer than 4 vertices extracted from input shapes`);return oo(e,t,i,r)}function lo(e){throw new c(`occt-wasm: ${e} is not yet implemented`)}var uo=class e{oc;kernelId=`occt-wasm`;capabilities=a;Module;k;owner;constructor(e,t,n){this.Module=e,this.k=Ue(t,e),this.oc=We(e,this.k),this.owner=n}static fromKernel(t){let n=t.getRawModule(),r=t.getRawKernel();return new e(n,r,t)}get retainedKernelOwner(){return this.owner}dispose(e){Pe(e)?this.k.release(e.id):typeof e.delete==`function`&&e.delete()}executeBatch(e){lo(`executeBatch`)}openCheckpoints=[];checkpoint(){let e=this.k.checkpoint();return this.openCheckpoints.push(e),e}checkpointCount(){return this.openCheckpoints.length}restoreCheckpoint(e){let t=this.openCheckpoints.lastIndexOf(e);if(t===-1)throw new r(`occtWasmAdapter.restoreCheckpoint`,`checkpoint ${e} is not open — releaseSince would erase unrelated live handles`);this.k.releaseSince(e),this.openCheckpoints.length=t}discardCheckpoint(e){this.closeCheckpoint(e)}closeCheckpoint(e){let t=this.openCheckpoints.lastIndexOf(e);t!==-1&&(this.openCheckpoints.length=t)}makeBox(e,t,n){return nt(this.k,e,t,n)}makeCylinder(e,t,n,r){return rt(this.k,e,t,n,r)}makeSphere(e,t){return it(this.k,e,t)}makeCone(e,t,n,r,i){return at(this.k,e,t,n,r,i)}makeTorus(e,t,n,r){return ot(this.k,e,t,n,r)}makeEllipsoid(e,t,n){return st(this.k,e,t,n)}makeBoxFromCorners(e,t){return ct(this.k,e,t)}makeRectangle(e,t){return lt(this.k,e,t)}fuse(e,t,n){return Ke(this.k,e,t,n)}cut(e,t,n){return qe(this.k,e,t,n)}intersect(e,t,n){return Je(this.k,e,t,n)}section(e,t,n){return Ye(this.k,e,t,n)}fuseAll(e,t){return Xe(this.k,this.Module,e,t)}cutAll(e,t,n){return Ze(this.k,this.Module,e,t,n)}split(e,t){return Qe(this.k,this.Module,e,t)}checkBoolean(e,t,n){return $e(this.k,e,t,n)}meshBoolean(e,t,n,r,i,a){return et(e,t,n,r,i,a)}makeVertex(e,t,n){return ai(this.k,e,t,n)}makeEdge(e,t,n){return oi(this.k,e)}makeWire(e){return si(this.k,this.Module,e)}makeFace(e,t){return li(this.k,e,t)}makeLineEdge(e,t){return ui(this.k,e,t)}makeCircleEdge(e,t,n){return di(this.k,e,t,n)}makeCircleArc(e,t,n,r,i){return fi(this.k,e,t,n,r,i)}makeArcEdge(e,t,n){return pi(this.k,e,t,n)}makeEllipseEdge(e,t,n,r,i){return mi(this.k,e,t,n,r)}makeEllipseArc(e,t,n,r,i,a,o){return hi(this.k,e,t,n,r,i,a)}makeBezierEdge(e){return gi(this.k,this.Module,e)}makeTangentArc(e,t,n){return _i(this.k,e,t,n)}makeHelixWire(e,t,n,r,i,a){return vi(this.k,e,t,n,r,i)}makeWireFromMixed(e){return ci(this.k,this.Module,e)}makeCompound(e){return yi(this.k,this.Module,e)}solidFromShell(e){return bi(this.k,e)}hull(e,t){return co(this.k,this.Module,e,t)}hullFromPoints(e,t){return oo(this.k,this.Module,e,t)}buildSolidFromFaces(e,t,n){return xi(this.k,this.Module,e,t,n)}makeNonPlanarFace(e){return Si(this.k,e)}addHolesInFace(e,t){return Ci(this.k,this.Module,e,t)}removeHolesFromFace(e){return wi(this.k,this.Module,e)}makeFaceOnSurface(e,t){return Ti(this.k,e,t)}bsplineSurface(e,t,n){return Ei(this.k,this.Module,e,t,n)}triangulatedSurface(e,t,n){return Di(this.k,this.Module,e,t,n)}buildTriFace(e,t,n){return Oi(this.k,e,t,n)}sewAndSolidify(e,t){return ki(this.k,this.Module,e,t)}createPoint3d(e,t,n){return Ai(e,t,n)}createDirection3d(e,t,n){return ji(e,t,n)}createVector3d(e,t,n){return Mi(e,t,n)}createAxis1(e,t,n,r,i,a){return Ni(e,t,n,r,i,a)}createAxis2(e,t,n,r,i,a,o,s,c){return Pi(e,t,n,r,i,a,o,s,c)}createAxis3(e,t,n,r,i,a,o,s,c){return Fi(e,t,n,r,i,a,o,s,c)}extrude(e,t,n){return mr(this.k,e,t,n)}revolve(e,t,n){return hr(this.k,e,t,n)}loft(e,t,n,r){return gr(this.k,this.Module,e,t,n,r)}sweep(e,t,n){return _r(this.k,e,t,n)}simplePipe(e,t){return vr(this.k,e,t)}helicalSweep(e,t,n,r,i,a){throw Error(`helicalSweep on occt-wasm requires profile positioning+orientation logic not yet implemented; brepkit has a native implementation`)}sweepWithOptions(e,t,n,r,i){lo(`sweepWithOptions`)}sweepPipeShell(e,t,n){return br(this.k,e,t,n)}loftAdvanced(e,t){return Tr(this.k,this.Module,e,t)}buildExtrusionLaw(e,t,n){return Er(this.k,e,t,n)}revolveVec(e,t,n,r){return Dr(this.k,e,t,n,r)}draftPrism(e,t,n,r,i,a){return Or(this.k,e,t,n,r,i,a)}fillet(e,t,n){return Un(this.k,this.Module,e,t,n)}chamfer(e,t,n){return Wn(this.k,this.Module,e,t,n)}chamferDistAngle(e,t,n,r){return Gn(this.k,this.Module,e,t,n,r)}shell(e,t,n,r){return Kn(this.k,this.Module,e,t,n,r)}thicken(e,t){return qn(this.k,e,t)}offset(e,t,n){return Jn(this.k,e,t,n)}filletVariable(e,t){return Xn(this.k,e,t)}draft(e,t,n,r,i){return Zn(this.k,e,t,n,r,i)}defeature(e,t){return Qn(this.k,this.Module,e,t)}offsetWire2D(e,t,n){return $n(this.k,e,t,n)}simplify(e){return er(this.k,e)}reverseShape(e){return tr(this.k,e)}composeTransform(e){return kr(e)}transform(e,t){return jr(this.k,this.Module,e,t)}locate(e,t){return Mr(this.k,this.Module,e,t)}translate(e,t,n,r){return Nr(this.k,e,t,n,r)}rotate(e,t,n,r){return Pr(this.k,e,t,n,r)}mirror(e,t,n){return Fr(this.k,e,t,n)}scale(e,t,n){return Ir(this.k,e,t,n)}generalTransform(e,t,n,r){return Lr(this.k,this.Module,e,t,n,r)}generalTransformNonOrthogonal(e,t,n){return Lr(this.k,this.Module,e,t,n,!1)}positionOnCurve(e,t,n){return Rr(this.k,this.Module,e,t,n)}linearPattern(e,t,n,r){return zr(this.k,e,t,n,r)}circularPattern(e,t,n,r,i){return Br(this.k,e,t,n,r,i)}transformBatch(e){return Vr(this.k,e)}translateWithHistory(e,t,n,r,i,a){return Ga(this.k,this.Module,e,t,n,r,i,a)}rotateWithHistory(e,t,n,r,i,a){return Ka(this.k,this.Module,e,t,n,r,i,a)}mirrorWithHistory(e,t,n,r,i){return qa(this.k,this.Module,e,t,n,r,i)}scaleWithHistory(e,t,n,r,i){return Ja(this.k,this.Module,e,t,n,r,i)}generalTransformWithHistory(e,t,n,r,i,a){return Ya((e,t,n,r)=>this.generalTransform(e,t,n,r),e,t,n,r,i)}fuseWithHistory(e,t,n,r,i){return Xa(this.k,this.Module,e,t,n,r,i)}cutWithHistory(e,t,n,r,i){return Za(this.k,this.Module,e,t,n,r,i)}intersectWithHistory(e,t,n,r,i){return Qa(this.k,this.Module,e,t,n,r,i)}filletWithHistory(e,t,n,r,i){return $a(this.k,this.Module,e,t,n,r,i)}chamferWithHistory(e,t,n,r,i){return eo(this.k,this.Module,e,t,n,r,i)}shellWithHistory(e,t,n,r,i,a){return to(this.k,this.Module,e,t,n,r,i,a)}thickenWithHistory(e,t,n,r){return no(this.k,this.Module,e,t,n,r)}offsetWithHistory(e,t,n,r,i){return ro(this.k,this.Module,e,t,n,r,i)}draftWithHistory(e,t,n,r,i,a,o){return io(this.k,e,t,n,i)}applyComposedTransformWithHistory(e,t,n,r){return ao((e,t)=>this.transform(e,t),(e,t)=>this.iterShapes(e,t),(e,t)=>this.hashCode(e,t),e,t,n,r)}mesh(e,t){return Pt(this.k,this.Module,e,t)}meshEdges(e,t,n){return It(this.k,this.Module,e,t,n)}hasTriangulation(e){return Lt(this.k,e)}meshShape(e,t,n){Rt(this.k,e,t,n)}exportSTEP(e){return Wr(this.k,this.makeCompound.bind(this),e)}exportSTL(e,t,n,r){return Gr(this.mesh.bind(this),e,t,n,r)}importSTEP(e){return Kr(this.k,e)}importSTL(e){return qr(this.k,this.Module,e)}exportIGES(e){return Jr(this.k,this.makeCompound.bind(this),e)}importIGES(e){return Yr(this.k,e)}exportSTEPAssembly(e,t){return Xr(this.k,this.Module,e,t)}export3MF(e,t){throw Error(`export3MF is only available with the brepkit kernel`)}exportGLB(e,t){return Zr(this.mesh.bind(this),e,t)}exportOBJ(e,t){return Qr(this.mesh.bind(this),e,t)}exportPLY(e,t){return $r(this.mesh.bind(this),e,t)}import3MF(e){throw Error(`import3MF is only available with the brepkit kernel`)}importOBJ(e){throw Error(`importOBJ is only available with the brepkit kernel`)}importGLB(e){throw Error(`importGLB is only available with the brepkit kernel`)}toBREP(e){return ei(this.k,e)}fromBREP(e){return ti(this.k,e)}createXCAFDocument(e){return ni(this.k,this.Module,e)}writeXCAFToSTEP(e,t){return ri(this.k,e,t)}exportSTEPConfigured(e,t){return ii(this.k,this.Module,e,t)}volume(e){return Cn(this.k,e)}area(e){return wn(this.k,e)}length(e){return Tn(this.k,e)}centerOfMass(e){return En(this.k,e)}linearCenterOfMass(e){return Dn(this.k,e)}boundingBox(e){return On(this.k,e)}distance(e,t){return Pn(this.k,this.Module,e,t)}surfaceCurvature(e,t,n){return Vn(this.k,e,t,n)}surfaceCenterOfMass(e){return kn(this.k,e)}measureBulk(e,t){return An(this.k,e,t)}createDistanceQuery(e){return jn(this.k,e)}iterShapes(e,t){return ut(this.k,e,t)}iterShapeList(e,t){throw Error(`iterShapeList is not applicable to occt-wasm: the arena model has no TopTools_ListOfShape handles`)}shapeType(e){return dt(this.k,e)}isSame(e,t){return ft(this.k,e,t)}isEqual(e,t){return pt(this.k,e,t)}downcast(e,t){return mt(this.k,e,t)}copyShape(e){return ht(this.k,e)}hashCode(e,t){return gt(this.k,e,t)}subShapeCount(e,t){return bt(this.k,e,t)}subShapeHashes(e,t,n){return xt(this.k,e,t,n)}isNull(e){return _t(this.k,e)}shapeOrientation(e){return vt(this.k,e)}edgeToFaceMap(e){return yt(this.k,e)}sharedEdges(e,t){return St(this.k,e,t)}adjacentFaces(e,t){return Ct(this.k,e,t)}sew(e,t){return wt(this.k,this.Module,e,t)}curveType(e){return Bt(this.k,e)}curveParameters(e){return Vt(this.k,e)}curvePointAtParam(e,t){return Ht(this.k,e,t)}curveTangent(e,t){return Ut(this.k,e,t)}curveIsClosed(e){return Wt(this.k,e)}curveIsPeriodic(e){return Gt(this.k,e)}curvePeriod(e){return Kt(this.k,e)}interpolatePoints(e,t){return qt(this.k,this.Module,e,t)}approximatePoints(e,t){return Jt(this.k,this.Module,e,t)}curveDegreeElevate(e,t){return Yt(this.k,e,t)}curveKnotInsert(e,t,n){return Xt(this.k,e,t,n)}curveKnotRemove(e,t,n){return Zt(this.k,e,t,n)}curveSplit(e,t){return Qt(this.k,e,t)}getBezierPenultimatePole(e){return $t(this.k,e)}createCurveAdaptor(e){lo(`createCurveAdaptor`)}vertexPosition(e){return tn(this.k,e)}surfaceType(e){return nn(this.k,e)}uvBounds(e){return rn(this.k,e)}outerWire(e){return an(this.k,e)}surfaceNormal(e,t,n){return sn(this.k,e,t,n)}pointOnSurface(e,t,n){return cn(this.k,e,t,n)}uvFromPoint(e,t){return yn(this.k,e,t)}projectPointOnFace(e,t){return bn(this.k,e,t)}classifyPointOnFace(e,t,n,r){return xn(this.k,e,t,n,r)}classifyPointRobust(e,t,n){lo(`classifyPointRobust`)}classifyPointWinding(e,t,n){lo(`classifyPointWinding`)}approximateSurfaceLspia(e,t,n,r,i,a,o,s,c){lo(`approximateSurfaceLspia`)}untrimFace(e,t,n){lo(`untrimFace`)}getSurfaceCylinderData(e){return vn(this.k,e)}getSurfaceAxis(e){return _n(this.k,e)}reverseSurfaceU(e){return on(this.k,e)}detectSmallFeatures(e,t,n){lo(`detectSmallFeatures`)}recognizeFeatures(e,t){lo(`recognizeFeatures`)}projectEdges(e,t,n,r){return Sn(this.k,this.Module,e,t,n,r)}isValid(e){return Et(this.k,e)}healSolid(e){return Dt(this.k,e)}healFace(e){return Ot(this.k,e)}healWire(e,t){return kt(this.k,e,t)}mergeCoincidentVertices(e,t){return At(this.k,e,t)}removeDegenerateEdges(e,t){return jt(this.k,e,t)}fixFaceOrientations(e){return Mt(this.k,e)}fixShape(e){return Nt(this.k,e)}fixSelfIntersection(e){return kt(this.k,e)}createPoint2d(e,t){return Ri(e,t)}createDirection2d(e,t){return zi(e,t)}createVector2d(e,t){return Bi(e,t)}createAxis2d(e,t,n,r){return Vi(e,t,n,r)}wrapCurve2dHandle(e){return Hi(e)}createCurve2dAdaptor(e){lo(`createCurve2dAdaptor`)}makeLine2d(e,t,n,r){return Ui(e,t,n,r)}makeCircle2d(e,t,n,r){return Wi(e,t,n,r)}makeArc2dThreePoints(e,t,n,r,i,a){return Gi(e,t,n,r,i,a)}makeArc2dTangent(e,t,n,r,i,a){return Ki(e,t,n,r,i,a)}makeEllipse2d(e,t,n,r,i,a,o){return qi(e,t,n,r,i,a,o)}makeEllipseArc2d(e,t,n,r,i,a,o,s,c){return Ji(e,t,n,r,i,a,o,s,c)}makeBezier2d(e){return Yi(e)}makeBSpline2d(e,t){return Xi(e)}evaluateCurve2d(e,t){return Zi(e,t)}evaluateCurve2dD1(e,t){return Qi(e,t)}getCurve2dBounds(e){return $i(e)}getCurve2dType(e){return ea(e)}trimCurve2d(e,t,n){return ta(e,t,n)}reverseCurve2d(e){}copyCurve2d(e){return na(e)}offsetCurve2d(e,t){return ra(e,t)}translateCurve2d(e,t,n){return ia(e,t,n)}rotateCurve2d(e,t,n,r){return aa(e,t,n,r)}scaleCurve2d(e,t,n,r){return oa(e,t,n,r)}mirrorCurve2dAtPoint(e,t,n){return sa(e,t,n)}mirrorCurve2dAcrossAxis(e,t,n,r,i){return ca(e,t,n,r,i)}affinityTransform2d(e,t,n,r,i,a){return ua(e,t,n,r,i,a)}createIdentityGTrsf2d(){return da()}createAffinityGTrsf2d(e,t,n,r,i){return fa(e,t,n,r,i)}createTranslationGTrsf2d(e,t){return pa(e,t)}createMirrorGTrsf2d(e,t,n,r,i,a,o){return ma(e,t,n,r,i,a,o)}createRotationGTrsf2d(e,t,n){return ha(e,t,n)}createScaleGTrsf2d(e,t,n){return ga(e,t,n)}setGTrsf2dTranslationPart(e,t,n){_a(e,t,n)}multiplyGTrsf2d(e,t){va(e,t)}transformCurve2dGeneral(e,t){return ya(e,t)}intersectCurves2d(e,t,n){return ba(e,t,n)}projectPointOnCurve2d(e,t,n){return xa(e,t,n)}distanceBetweenCurves2d(e,t,n,r,i,a){return Sa(e,t,n,r,i,a)}approximateCurve2dAsBSpline(e,t,n,r){return Ca(e,r)}decomposeBSpline2dToBeziers(e){return wa(e)}createBoundingBox2d(){return Ta()}addCurveToBBox2d(e,t,n){Ea(e,t,n)}getBBox2dBounds(e){return Da(e)}mergeBBox2d(e,t){Oa(e,t)}isBBox2dOut(e,t){return ka(e,t)}isBBox2dOutPoint(e,t,n){return Aa(e,t,n)}getCurve2dCircleData(e){return ja(e)}getCurve2dEllipseData(e){return Ma(e)}getCurve2dBezierPoles(e){return Na(e)}getCurve2dBezierDegree(e){return Pa(e)}getCurve2dBSplineData(e){lo(`getCurve2dBSplineData`)}serializeCurve2d(e){return Fa(e)}deserializeCurve2d(e){return Ia(e)}splitCurve2d(e,t){return La(e,t)}liftCurve2dToPlane(e,t,n,r){return Ra(this.k,this.Module,e,t,n,r)}buildEdgeOnSurface(e,t){return za(this.k,this.Module,e,t)}extractSurfaceFromFace(e){return Ba(e)}extractCurve2dFromEdge(e,t){return Va(this.k,e,t)}buildCurves3d(e){Ha(this.k,e)}fixWireOnFace(e,t,n){return Ua(this.k,e,t,n)}fillSurface(e,t){lo(`fillSurface`)}getNurbsCurveData(e){return en(this.k,e)}},fo={draft:{tolerance:.01,angularTolerance:.5},standard:{tolerance:.001,angularTolerance:.1},fine:{tolerance:1e-4,angularTolerance:.05}},po=`standard`;function mo(){return po}function ho(e=po){return fo[e]}function go(e){po=e}function _o(e){return`makeLine2d`in e}var vo=[`boolean`,`loft`,`extrude`,`shell`,`fillet`,`mesh`,`edgeMesh`,`transform`],yo=Object.create(null),bo=Object.create(null);function xo(){for(let e of vo)yo[e]=0,bo[e]=0}xo();function So(e){let t=performance.now();return()=>{yo[e]=(yo[e]??0)+(performance.now()-t),bo[e]=(bo[e]??0)+1}}function Co(){let e={};for(let t of vo)e[t]={totalMs:yo[t]??0,count:bo[t]??0};return e}function wo(){xo()}var To;function Eo(){To=void 0}function Do(e){return To??=typeof e.BooleanBatch==`function`,To}function Oo(e){return e===`commonFace`?1:e===`sameFace`?2:0}function ko(e,t,n={}){if(!Do(e))return null;let r=So(`boolean`),i=new e.BooleanBatch;try{for(let e of t)i.addShape(e);return i.fuseAll(Oo(n.optimisation),!!n.simplify,n.fuzzyValue??0)}finally{i.delete(),r()}}function Ao(e,t,n,r={}){if(!Do(e))return null;if(n.length===0)return t;let i=So(`boolean`),a=new e.BooleanBatch;try{for(let e of n)a.addShape(e);return a.cutAll(t,Oo(r.optimisation),!!r.simplify,r.fuzzyValue??0)}finally{a.delete(),i()}}var jo=2147483647,Mo;function No(){Mo=void 0}function Po(e){return Mo??=typeof e.MeasurementExtractor?.extract==`function`,Mo}function Fo(e,t,n=!1){if(Po(e)){let r=e.MeasurementExtractor.extract(t,n);try{let t=r.getDataPtr()/8,n=r.getDataSize(),i=e.HEAPF64.slice(t,t+n);return{volume:i[0]??0,area:i[1]??0,length:i[2]??0,centerOfMass:[i[3]??0,i[4]??0,i[5]??0],boundingBox:{min:[i[6]??0,i[7]??0,i[8]??0],max:[i[9]??0,i[10]??0,i[11]??0]}}}finally{r.delete()}}return{volume:Io(e,t),area:Lo(e,t),length:n?Ro(e,t):0,centerOfMass:zo(e,t),boundingBox:Vo(e,t)}}function Io(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.VolumeProperties_1(t,n,!0,!1,!1);let r=n.Mass();return n.delete(),r}function Lo(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.SurfaceProperties_2(t,n,1e-7,!0);let r=n.Mass();return n.delete(),r}function Ro(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.LinearProperties(t,n,!0,!1);let r=n.Mass();return n.delete(),r}function zo(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.VolumeProperties_1(t,n,!0,!1,!1);let r=n.CentreOfMass(),i=[r.X(),r.Y(),r.Z()];return r.delete(),n.delete(),i}function Bo(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.LinearProperties(t,n,!0,!1);let r=n.CentreOfMass(),i=[r.X(),r.Y(),r.Z()];return r.delete(),n.delete(),i}function Vo(e,t){let n=new e.Bnd_Box;e.BRepBndLib.Add(t,n,!0);let r={min:[n.GetXMin(),n.GetYMin(),n.GetZMin()],max:[n.GetXMax(),n.GetYMax(),n.GetZMax()]};return n.delete(),r}function Ho(e,t,n){let r=new e.BRepExtrema_DistShapeShape_1;r.LoadS1(t),r.LoadS2(n);let i=new e.Message_ProgressRange_1;if(r.Perform(i),!r.IsDone())throw i.delete(),r.delete(),Error(`BRepExtrema_DistShapeShape failed`);let a=r.Value(),o=r.PointOnShape1(1),s=r.PointOnShape2(1),c={value:a,point1:[o.X(),o.Y(),o.Z()],point2:[s.X(),s.Y(),s.Z()]};return o.delete(),s.delete(),i.delete(),r.delete(),c}function Uo(e,t,n,r,i=1e-6){if(!e.BRepClass_FaceClassifier)throw Error(`BRepClass_FaceClassifier not available in this WASM build`);let a=new e.gp_Pnt2d_3(n,r),o=new e.BRepClass_FaceClassifier_3(t,a,i),s=o.State();a.delete(),o.delete();let c=e.TopAbs_State;return s===c.TopAbs_IN?`in`:s===c.TopAbs_ON?`on`:`out`}function Wo(e){return{volume:t=>Io(e,t),area:t=>Lo(e,t),length:t=>Ro(e,t),centerOfMass:t=>zo(e,t),linearCenterOfMass:t=>Bo(e,t),boundingBox:t=>Vo(e,t),distance:(t,n)=>Ho(e,t,n),classifyPointOnFace:(t,n,r,i)=>Uo(e,t,n,r,i),measureBulk:(t,n)=>Fo(e,t,n)}}var Go={vertex:7,edge:6,wire:5,face:4,shell:3,solid:2,compsolid:1,compound:0};function Ko(e,t,n){let r=e.TopologyExtractor.extract(t,Go[n]),i=r.getShapesCount(),a=[];for(let e=0;e<i;e++)a.push(r.getShape(e));return r.delete(),a}var qo=new WeakMap;function Jo(e,t,n){let r=qo.get(e);if(!r){let t=e.TopAbs_ShapeEnum;r={vertex:t.TopAbs_VERTEX,edge:t.TopAbs_EDGE,wire:t.TopAbs_WIRE,face:t.TopAbs_FACE,shell:t.TopAbs_SHELL,solid:t.TopAbs_SOLID,compsolid:t.TopAbs_COMPSOLID,compound:t.TopAbs_COMPOUND},qo.set(e,r)}let i=new e.TopExp_Explorer_2(t,r[n],e.TopAbs_ShapeEnum.TopAbs_SHAPE),a=[],o=new Map;for(;i.More();){let t=i.Current(),n=e.shapeHashCode(t,jo),r=o.get(n);r?r.some(e=>e.IsSame(t))||(r.push(t),a.push(t)):(o.set(n,[t]),a.push(t)),i.Next()}return i.delete(),a}function Yo(e,t,n){return e.TopologyExtractor?Ko(e,t,n):Jo(e,t,n)}var Xo=new WeakMap;function Zo(e){let t=Xo.get(e);if(!t){let n=e.TopAbs_ShapeEnum;t=new Map([[n.TopAbs_VERTEX,`vertex`],[n.TopAbs_EDGE,`edge`],[n.TopAbs_WIRE,`wire`],[n.TopAbs_FACE,`face`],[n.TopAbs_SHELL,`shell`],[n.TopAbs_SOLID,`solid`],[n.TopAbs_COMPSOLID,`compsolid`],[n.TopAbs_COMPOUND,`compound`]]),Xo.set(e,t)}return t}function Qo(e,t){if(t.IsNull())throw Error(`Cannot determine shape type: shape is null`);let n=Zo(e).get(t.ShapeType());if(!n)throw Error(`Unknown shape type enum value`);return n}function $o(e,t){let n=new e.BRepCheck_Analyzer(t,!0,!1,!1),r=n.IsValid_2();return n.delete(),r}function es(e,t,n=1e-6){let r=new e.BRepBuilderAPI_Sewing(n,!0,!0,!0,!1);for(let e of t)r.Add(e);let i=new e.Message_ProgressRange_1;r.Perform(i);let a=r.SewedShape();return i.delete(),r.delete(),a}function ts(e,t,n){if(e.TopTools_ListIteratorOfListOfShape){let r=new e.TopTools_ListIteratorOfListOfShape(t);for(;r.More();)n(r.Value()),r.Next();r.delete()}else{let r=new e.TopTools_ListOfShape_3(t);for(;r.Size()>0;)n(r.First_1()),r.RemoveFirst();r.delete()}}function ns(e,t){return e.IsSame(t)}function rs(e,t){return e.IsEqual(t)}function is(e){return{iterShapes:(t,n)=>Yo(e,t,n),iterShapeList:(t,n)=>{ts(e,t,n)},shapeType:t=>Qo(e,t),isSame:(e,t)=>ns(e,t),isEqual:(e,t)=>rs(e,t),isValid:t=>$o(e,t),sew:(t,n)=>es(e,t,n)}}var as=.001;function os(e,t,n){n===`commonFace`&&t.SetGlue(e.BOPAlgo_GlueEnum.BOPAlgo_GlueShift),n===`sameFace`&&t.SetGlue(e.BOPAlgo_GlueEnum.BOPAlgo_GlueFull)}function ss(e,t){e.SetRunParallel(!0),e.SetUseOBB?.(!0),t!==void 0&&t>0&&e.SetFuzzyValue?.(t)}function cs(e,t){if(t.length<3)return 0;let n=t[0];if(!n)return 0;let r=new e.Bnd_Box;if(e.BRepBndLib.Add(n,r,!0),r.IsVoid())return r.delete(),0;let i=r.CornerMin(),a=r.CornerMax(),o=a.X()-i.X(),s=a.Y()-i.Y(),c=a.Z()-i.Z();return i.delete(),a.delete(),r.delete(),Math.sqrt(o*o+s*s+c*c)>1?1e-5:0}function ls(e,t){let n=new e.TopoDS_Builder,r=new e.TopoDS_Compound;n.MakeCompound(r);for(let e of t)n.Add(r,e);return n.delete(),r}function us(e,t,n,r={}){let i=So(`boolean`);try{let{optimisation:i,simplify:a=!1,fuzzyValue:o}=r,s=new e.Message_ProgressRange_1,c=new e.BRepAlgoAPI_Fuse_3(t,n,s);os(e,c,i),ss(c,o),c.Build(s),a&&c.SimplifyResult(!0,!0,as);let l=c.Shape();return c.delete(),s.delete(),l}finally{i()}}function ds(e,t,n,r={}){let i=So(`boolean`);try{let{optimisation:i,simplify:a=!1,fuzzyValue:o}=r,s=new e.Message_ProgressRange_1,c=new e.BRepAlgoAPI_Cut_3(t,n,s);os(e,c,i),ss(c,o),c.Build(s),a&&c.SimplifyResult(!0,!0,as);let l=c.Shape();return c.delete(),s.delete(),l}finally{i()}}function fs(e,t,n,r={}){let i=So(`boolean`);try{let{optimisation:i,simplify:a=!1,fuzzyValue:o}=r,s=new e.Message_ProgressRange_1,c=new e.BRepAlgoAPI_Common_3(t,n,s);os(e,c,i),ss(c,o),c.Build(s),a&&c.SimplifyResult(!0,!0,as);let l=c.Shape();return c.delete(),s.delete(),l}finally{i()}}function ps(e,t,n,r=!0){let i=new e.Message_ProgressRange_1,a=new e.BRepAlgoAPI_Section_3(t,n,!1);if(a.Approximation(r),ss(a),a.Build(i),!a.IsDone())throw a.delete(),i.delete(),Error(`BRepAlgoAPI_Section build failed`);let o=a.Shape();return a.delete(),i.delete(),o}function ms(e,t,n={}){let r=ko(e,t,n);if(r!==null)return r;let i=So(`boolean`);try{let{optimisation:r,simplify:i=!1}=n,a=n.fuzzyValue??cs(e,t),o=new e.TopTools_ListOfShape_1;for(let e of t)o.Append_1(e);let s=new e.BRepAlgoAPI_BuilderAlgo_1;s.SetArguments(o),os(e,s,r),ss(s,a);let c=new e.Message_ProgressRange_1;s.Build(c);let l=s.Shape();if(i){let t=new e.ShapeUpgrade_UnifySameDomain_2(l,!0,!0,!1);t.Build(),l=t.Shape(),t.delete()}return o.delete(),s.delete(),c.delete(),l}finally{i()}}function hs(e,n,r,i,a){a.signal?.throwIfAborted();let o=i-r;if(o===1)return t(n,r);if(o===2)return us(e,n[r],n[r+1],{...a,simplify:!1});let s=r+Math.ceil(o/2);return us(e,hs(e,n,r,s,a),hs(e,n,s,i,a),{...a,simplify:!1})}function gs(e,t,n={}){let r=hs(e,t,0,t.length,n);if(n.simplify){let t=new e.ShapeUpgrade_UnifySameDomain_2(r,!0,!0,!1);t.Build();let n=t.Shape();return t.delete(),n}return r}function _s(e,n,r={}){if(n.length===0)throw Error(`fuseAll requires at least one shape`);if(n.length===1)return t(n,0);let{strategy:i=`native`}=r;return i===`pairwise`?gs(e,n,r):ms(e,n,r)}function vs(e,t,n){if(!e.BRepAlgoAPI_Splitter)throw Error(`BRepAlgoAPI_Splitter not available in this WASM build`);let r=new e.TopTools_ListOfShape_1;r.Append_1(t);let i=new e.TopTools_ListOfShape_1;for(let e of n)i.Append_1(e);let a=new e.BRepAlgoAPI_Splitter;a.SetArguments(r),a.SetTools(i),ss(a);let o=new e.Message_ProgressRange_1;a.Build(o);let s=a.Shape();return a.delete(),o.delete(),r.delete(),i.delete(),s}function ys(e,t,n,r={}){if(n.length===0)return t;let i=Ao(e,t,n,r);if(i!==null)return i;let a=ls(e,n),o=ds(e,t,a,r);return a.delete(),o}function bs(e,t,n,r,i){let a=[];return t.IsNull()&&a.push({operand:`base`,issue:`null-shape`,message:`Base shape is null`}),n.IsNull()&&a.push({operand:`tool`,issue:`null-shape`,message:`Tool shape is null`}),a.length>0?{valid:!1,issues:a}:(i(t)||a.push({operand:`base`,issue:`not-valid`,message:`Base shape fails BRepCheck validation. Try autoHeal() first.`}),i(n)||a.push({operand:`tool`,issue:`not-valid`,message:`Tool shape fails BRepCheck validation. Try autoHeal() first.`}),{valid:a.length===0,issues:a})}function xs(e){return{fuse:(t,n,r)=>us(e,t,n,r),cut:(t,n,r)=>ds(e,t,n,r),intersect:(t,n,r)=>fs(e,t,n,r),section:(t,n,r)=>ps(e,t,n,r),fuseAll:(t,n)=>_s(e,t,n),cutAll:(t,n,r)=>ys(e,t,n,r),split:(t,n)=>vs(e,t,n),checkBoolean:(t,n,r)=>bs(e,t,n,r,t=>$o(e,t))}}var Ss={fuse:0,cut:1,intersect:2};function Cs(e,t,n,r={}){let{glueMode:i=0,fuzzyValue:a=0}=r;if(typeof e.BooleanPipeline==`function`){let r=new e.BooleanPipeline;try{for(let e of n)r.addStep(Ss[e.op],e.tool);let e=r.execute(t,i,a);return e.IsNull()?null:e}finally{r.delete()}}}function ws(e){return{booleanPipeline:(t,n,r)=>Cs(e,t,n,r)??null}}function Ts(e,t,n,r){let i=new e.gp_Pnt_3(t,n,r),a=new e.BRepBuilderAPI_MakeVertex(i),o=a.Vertex();return a.delete(),i.delete(),o}function Es(e,t,n,r){let i=n!==void 0&&r!==void 0?new e.BRepBuilderAPI_MakeEdge_24(t,n,r):new e.BRepBuilderAPI_MakeEdge_24(t),a=i.Edge();return i.delete(),a}function Ds(e,t){let n=new e.BRepBuilderAPI_MakeWire_1;for(let e of t)n.Add_1(e);let r=new e.Message_ProgressRange_1;n.Build(r);let i=n.Wire();return n.delete(),r.delete(),i}function Os(e,t,n=!0){if(n){let n=new e.BRepBuilderAPI_MakeFace_15(t,!1),r=n.Face();return n.delete(),r}let r=new e.BRepOffsetAPI_MakeFilling(3,15,2,!1,1e-5,1e-4,.01,.1,8,9),i=Yo(e,t,`edge`);for(let t of i)r.Add_1(t,e.GeomAbs_Shape.GeomAbs_C0,!0);let a=new e.Message_ProgressRange_1;r.Build(a);let o=r.Shape();return r.delete(),a.delete(),o}function ks(e,t,n,r){let i=new e.BRepPrimAPI_MakeBox_2(t,n,r),a=i.Solid();return i.delete(),a}function As(e,t,n,r=[0,0,0],i=[0,0,1]){let a=new e.gp_Pnt_3(...r),o=new e.gp_Dir_5(...i),s=new e.gp_Ax2_4(a,o),c=new e.BRepPrimAPI_MakeCylinder_3(s,t,n),l=c.Shape();return c.delete(),s.delete(),a.delete(),o.delete(),l}function js(e,t,n=[0,0,0]){if(n[0]===0&&n[1]===0&&n[2]===0){let n=new e.BRepPrimAPI_MakeSphere_1(t),r=n.Shape();return n.delete(),r}let r=new e.gp_Pnt_3(...n),i=new e.BRepPrimAPI_MakeSphere_2(r,t),a=i.Shape();return i.delete(),r.delete(),a}function Ms(e,t,n,r,i=[0,0,0],a=[0,0,1]){let o=new e.gp_Pnt_3(...i),s=new e.gp_Dir_5(...a),c=new e.gp_Ax2_4(o,s),l=new e.BRepPrimAPI_MakeCone_3(c,t,n,r),u=l.Shape();return l.delete(),c.delete(),o.delete(),s.delete(),u}function Ns(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.BRepBuilderAPI_MakeEdge_3(i,a),c=new e.BRepBuilderAPI_MakeEdge_3(a,o),l=new e.BRepBuilderAPI_MakeEdge_3(o,i),u=new e.BRepBuilderAPI_MakeWire_1;u.Add_1(s.Edge()),u.Add_1(c.Edge()),u.Add_1(l.Edge());let d=null;if(u.IsDone()){let t=new e.BRepBuilderAPI_MakeFace_15(u.Wire(),!1);t.IsDone()&&(d=t.Face()),t.delete()}return u.delete(),s.delete(),c.delete(),l.delete(),i.delete(),a.delete(),o.delete(),d}function Ps(e,t){let n=new e.BRepBuilderAPI_MakeWire_1;for(let r of t){let t=r.ShapeType();t===e.TopAbs_ShapeEnum.TopAbs_EDGE?n.Add_1(r):t===e.TopAbs_ShapeEnum.TopAbs_WIRE&&n.Add_2(r)}let r=new e.Message_ProgressRange_1;n.Build(r);let i=n.Wire();return n.delete(),r.delete(),i}function Fs(e,t,n,r=[0,0,0],i=[0,0,1]){let a=new e.gp_Pnt_3(...r),o=new e.gp_Dir_5(...i),s=new e.gp_Ax2_4(a,o),c=new e.BRepPrimAPI_MakeTorus_5(s,t,n),l=c.Shape();return c.delete(),s.delete(),a.delete(),o.delete(),l}function Is(e){return{makeVertex:(t,n,r)=>Ts(e,t,n,r),makeEdge:(t,n,r)=>Es(e,t,n,r),makeWire:t=>Ds(e,t),makeWireFromMixed:t=>Ps(e,t),makeFace:(t,n)=>Os(e,t,n),makeBox:(t,n,r)=>ks(e,t,n,r),makeCylinder:(t,n,r,i)=>As(e,t,n,r,i),makeSphere:(t,n)=>js(e,t,n),makeCone:(t,n,r,i,a)=>Ms(e,t,n,r,i,a),makeTorus:(t,n,r,i)=>Fs(e,t,n,r,i),buildTriFace:(t,n,r)=>Ns(e,t,n,r)}}function Ls(e,t){let n=e[t];if(n===void 0)throw Error(`Index ${t} out of bounds`);return n}function Rs(e,t,n){let r=[],i=Math.max(n,1);for(let n of t){new e.BRepMesh_IncrementalMeshWrapper(n,i,!1,i*.5,!1).delete();let t=new e.TopExp_Explorer_2(n,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;t.More();){let n=e.TopoDS_Cast.Face(t.Current()),i=new e.TopLoc_Location_1,a=e.BRep_Tool_Triangulation(n,i,0);if(!a.IsNull()){let e=i.Transformation(),t=a.get().NbNodes();for(let n=1;n<=t;n++){let t=a.get().Node(n),i=t.Transformed(e);r.push({x:i.X(),y:i.Y(),z:i.Z()}),i.delete(),t.delete()}e.delete()}i.delete(),t.Next()}t.delete()}return r}function zs(e,t,n){let{faces:r,points:i}=t,a=[];for(let[t,n,o]of r){let r=Ls(i,t),s=Ls(i,n),c=Ls(i,o),l=Ns(e,[r.x,r.y,r.z],[s.x,s.y,s.z],[c.x,c.y,c.z]);l!==null&&a.push(l)}if(a.length<4)throw Error(`hull: only ${a.length} faces built, need at least 4 for a solid`);let o=Math.max(n,1e-4),s=new e.BRepBuilderAPI_Sewing(o,!0,!0,!0,!1);for(let e of a)s.Add(e);let c=new e.Message_ProgressRange_1;s.Perform(c),c.delete();let l=s.SewedShape();s.delete();let u=new e.TopExp_Explorer_2(l,e.TopAbs_ShapeEnum.TopAbs_SHELL,e.TopAbs_ShapeEnum.TopAbs_SHAPE);if(u.More()){let t=e.TopoDS_Cast.Shell(u.Current());u.delete();let n=new e.BRepBuilderAPI_MakeSolid_1;n.Add(t);let r=new e.Message_ProgressRange_1;if(n.Build(r),r.delete(),n.IsDone()){let r=n.Solid();n.delete(),t.delete();let i=new e.GProp_GProps_1;e.BRepGProp.VolumeProperties_1(r,i,!1,!1,!1);let a=i.Mass();return i.delete(),a<0&&r.Complement(),r}return t.delete(),n.delete(),l}return u.delete(),l}function Bs(e,t,n){if(t.length===0)throw Error(`hull: no shapes provided`);let r=Rs(e,t,n);if(r.length<4)throw Error(`hull: fewer than 4 vertices extracted from input shapes`);let i=x(r,n);if(i.faces.length<4)throw Error(`hull: degenerate hull (fewer than 4 faces)`);return zs(e,i,n)}function Vs(e,t,n,r){return zs(e,{points:t,faces:n},r)}function Hs(e,t,n){if(t.length<4)throw Error(`hullFromPoints: fewer than 4 points`);let r=x(t,n);if(r.faces.length<4)throw Error(`hullFromPoints: degenerate hull (fewer than 4 faces)`);return zs(e,r,n)}function Us(e){return{hull:(t,n)=>Bs(e,t,n),hullFromPoints:(t,n)=>Hs(e,t,n),buildSolidFromFaces:(t,n,r)=>Vs(e,t,n,r)}}function Ws(e,t,n){let r=new e.gp_Pnt_3(t[0],t[1],t[2]),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.BRepBuilderAPI_MakeEdge_3(r,i),o=a.Edge();return a.delete(),r.delete(),i.delete(),o}function Gs(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Dir_5(n[0],n[1],n[2]),o=new e.gp_Ax2_4(i,a),s=new e.gp_Circ_2(o,r),c=new e.BRepBuilderAPI_MakeEdge_8(s),l=c.Edge();return c.delete(),s.delete(),o.delete(),a.delete(),i.delete(),l}function Ks(e,t,n,r,i,a){let o=new e.gp_Pnt_3(t[0],t[1],t[2]),s=new e.gp_Dir_5(n[0],n[1],n[2]),c=new e.gp_Ax2_4(o,s),l=new e.gp_Circ_2(c,r),u=new e.BRepBuilderAPI_MakeEdge_9(l,i,a),d=u.Edge();return u.delete(),l.delete(),c.delete(),s.delete(),o.delete(),d}function qs(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.GC_MakeArcOfCircle_4(i,a,o).Value().get(),c=new e.Handle_Geom_Curve_2(s),l=new e.BRepBuilderAPI_MakeEdge_24(c),u=l.Edge();return l.delete(),c.delete(),i.delete(),a.delete(),o.delete(),u}function Js(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Vec_4(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.GC_MakeArcOfCircle_5(i,a,o).Value().get(),c=new e.Handle_Geom_Curve_2(s),l=new e.BRepBuilderAPI_MakeEdge_24(c),u=l.Edge();return l.delete(),c.delete(),i.delete(),a.delete(),o.delete(),u}function Ys(e,t,n,r,i,a){let o=new e.gp_Pnt_3(t[0],t[1],t[2]),s=new e.gp_Dir_5(n[0],n[1],n[2]),c;if(a){let t=new e.gp_Dir_5(a[0],a[1],a[2]);c=new e.gp_Ax2_2(o,s,t),t.delete()}else c=new e.gp_Ax2_4(o,s);let l=new e.gp_Elips_2(c,r,i),u=new e.BRepBuilderAPI_MakeEdge_12(l),d=u.Edge();return u.delete(),l.delete(),c.delete(),s.delete(),o.delete(),d}function Xs(e,t,n,r,i,a,o,s){let c=new e.gp_Pnt_3(t[0],t[1],t[2]),l=new e.gp_Dir_5(n[0],n[1],n[2]),u;if(s){let t=new e.gp_Dir_5(s[0],s[1],s[2]);u=new e.gp_Ax2_2(c,l,t),t.delete()}else u=new e.gp_Ax2_4(c,l);let d=new e.gp_Elips_2(u,r,i),f=new e.BRepBuilderAPI_MakeEdge_13(d,a,o),p=f.Edge();return f.delete(),d.delete(),u.delete(),l.delete(),c.delete(),p}function Zs(e,n){let r=new e.TColgp_Array1OfPnt_2(1,n.length);for(let i=0;i<n.length;i++){let a=t(n,i),o=new e.gp_Pnt_3(a[0],a[1],a[2]);r.SetValue_1(i+1,o),o.delete()}let i=new e.Geom_BezierCurve_1(r),a=new e.Handle_Geom_Curve_2(i),o=new e.BRepBuilderAPI_MakeEdge_24(a),s=o.Edge();return o.delete(),a.delete(),r.delete(),s}function Qs(e,t,n,r,i=[0,0,0],a=[0,0,1],o=!1){let s=e.HelixWireBuilder;if(typeof s?.build==`function`){let e=s.build(r,t,n,i[0],i[1],i[2],a[0],a[1],a[2],o);if(!e.IsNull())return e}let c=n/t,l=o?-2*Math.PI:2*Math.PI,u=new e.gp_Pnt_3(i[0],i[1],i[2]),d=new e.gp_Dir_5(a[0],a[1],a[2]),f=new e.gp_Ax3_5(u,d),p=new e.Geom_CylindricalSurface_1(f,r);f.delete();let m=new e.gp_Pnt2d_3(0,0),h=new e.gp_Dir2d_5(l,t),g=new e.Geom2d_Line_3(m,h),_=g.Value(0),v=g.Value(c*Math.sqrt((2*Math.PI)**2+t**2)),y=new e.GCE2d_MakeSegment_1(_,v),b=new e.Handle_Geom2d_Curve_2(y.Value().get()),x=new e.Handle_Geom_Surface_2(p),S=new e.BRepBuilderAPI_MakeEdge_30(b,x),C=S.Edge();e.BRepLib.BuildCurves3d_2(C);let w=new e.BRepBuilderAPI_MakeWire_2(C),ee=w.Wire();return w.delete(),S.delete(),b.delete(),x.delete(),_.delete(),v.delete(),g.delete(),m.delete(),h.delete(),d.delete(),u.delete(),ee}function $s(e,t,n,r){let i=Math.sqrt(t*n/r),a=t/i,o=n/i,s=new e.gp_Pnt_3(0,0,0),c=new e.gp_Dir_5(0,1,0),l=new e.gp_Ax1_2(s,c),u=new e.gp_Dir_5(0,0,1),d=new e.gp_Ax1_2(s,u),f=new e.gp_Dir_5(1,0,0),p=new e.gp_Ax1_2(s,f),m=new e.gp_GTrsf_1;m.SetAffinity_1(l,a);let h=new e.gp_GTrsf_1;h.SetAffinity_1(d,i);let g=new e.gp_GTrsf_1;return g.SetAffinity_1(p,o),m.Multiply(h),m.Multiply(g),h.delete(),g.delete(),l.delete(),d.delete(),p.delete(),c.delete(),u.delete(),f.delete(),s.delete(),{transform:m,applyToPoint(t){let n=t.XYZ();m.Transforms_1(n);let r=new e.gp_Pnt_2(n);return n.delete(),r}}}function ec(e,t,n,r){let i=new e.gp_Sphere_1;i.SetRadius(1);let a=new e.Geom_SphericalSurface_2(i),o=e.GeomConvert.SurfaceToBSplineSurface(a.UReversed()).get();i.delete(),a.delete();try{let i=$s(e,t,n,r),a=o.NbUPoles(),s=o.NbVPoles();for(let t=1;t<=a;t++)for(let n=1;n<=s;n++){let r=e.bsplineSurfacePole(o,t,n),a=i.applyToPoint(r);o.SetPole_1(t,n,a),r.delete(),a.delete()}i.transform.delete();let c=new e.BRepBuilderAPI_MakeShell_2(o.UReversed(),!1),l=c.Shell();c.delete();let u=new e.ShapeFix_Solid_1,d=u.SolidFromShell(l);return u.delete(),d}finally{o.delete()}}function tc(e,t){let n=new e.TopoDS_Builder,r=new e.TopoDS_Compound;n.MakeCompound(r);for(let e of t)n.Add(r,e);return n.delete(),r}function nc(e,t,n){let r=new e.gp_Pnt_3(t[0],t[1],t[2]),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.BRepPrimAPI_MakeBox_4(r,i),o=a.Solid();return a.delete(),r.delete(),i.delete(),o}function rc(e,t){let n=new e.ShapeFix_Solid_1,r=n.SolidFromShell(e.TopoDS_Cast.Shell(t));return n.delete(),r}function ic(e,t){return e.BRepToolsWrapper.Write(t)}function ac(e,t){return e.BRepToolsWrapper.Read(t)}function oc(e,t,n={}){let r=n.unit??`MM`;e.Interface_Static.SetCVal(`xstep.cascade.unit`,r),e.Interface_Static.SetCVal(`write.step.unit`,r),e.Interface_Static.SetIVal(`write.surfacecurve.mode`,0),e.Interface_Static.SetIVal(`write.precision.mode`,0),e.Interface_Static.SetIVal(`write.step.assembly`,2),e.Interface_Static.SetIVal(`write.step.schema`,5),new e.STEPCAFControl_Writer_1().delete();let i=new e.TCollection_ExtendedString_2(`XmlOcaf`,!0),a=new e.TDocStd_Document(i);i.delete();let o=a.Main(),s=e.XCAFDoc_DocumentTool.ShapeTool(o).get(),c=e.XCAFDoc_DocumentTool.ColorTool(o).get();e.XCAFDoc_ShapeTool.SetAutoNaming(!1);for(let n of t){let t=s.AddShape(n.shape,!1,!0),r=new e.TCollection_ExtendedString_2(n.name,!0);if(e.TDataStd_Name.Set_1(t,r),r.delete(),n.color){let[r,i,a,o]=n.color,s=new e.Quantity_ColorRGBA_5(r/255,i/255,a/255,o/255);c.SetColor_6(t,s,e.XCAFDoc_ColorType.XCAFDoc_ColorSurf),s.delete()}}let l=new e.XSControl_WorkSession,u=new e.Handle_XSControl_WorkSession_2(l),d=new e.STEPCAFControl_Writer_2(u,!1),f=new e.Handle_TDocStd_Document_2(a),p=new e.Message_ProgressRange_1;d.Transfer_1(f,e.STEPControl_StepModelType.STEPControl_AsIs,null,p),p.delete();let m=`assembly_export_${Date.now()}.step`,h=d.Write_1(m),g=``;if(h===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+m);g=new TextDecoder().decode(t),e.FS.unlink(`/`+m)}return d.delete(),u.delete(),f.delete(),a.delete(),g}function sc(e,t){try{t.delete()}catch{}}function cc(e,t,n){let r=Ws(e,[0,0,0],[t,0,0]),i=Ws(e,[t,0,0],[t,n,0]),a=Ws(e,[t,n,0],[0,n,0]),o=Ws(e,[0,n,0],[0,0,0]),s=new e.BRepBuilderAPI_MakeWire_1;s.Add_1(r),s.Add_1(i),s.Add_1(a),s.Add_1(o);let c=s.Wire();s.delete(),r.delete(),i.delete(),a.delete(),o.delete();let l=new e.BRepBuilderAPI_MakeFace_15(c,!1),u=l.Face();return l.delete(),u}function lc(e,t,n,r){return new e.gp_Pnt_3(t,n,r)}function uc(e,t,n,r){return new e.gp_Dir_5(t,n,r)}function dc(e,t,n,r){return new e.gp_Vec_4(t,n,r)}function fc(e,t,n,r,i,a,o){let s=new e.gp_Pnt_3(t,n,r),c=new e.gp_Dir_5(i,a,o),l=new e.gp_Ax1_2(s,c);return s.delete(),c.delete(),l}function pc(e,t,n,r,i,a,o,s,c,l){let u=new e.gp_Pnt_3(t,n,r),d=new e.gp_Dir_5(i,a,o),f;if(s!==void 0&&c!==void 0&&l!==void 0){let t=new e.gp_Dir_5(s,c,l);f=new e.gp_Ax2_2(u,d,t),t.delete()}else f=new e.gp_Ax2_4(u,d);return u.delete(),d.delete(),f}function mc(e,t,n,r,i,a,o,s,c,l){let u=new e.gp_Pnt_3(t,n,r),d=new e.gp_Dir_5(i,a,o),f;if(s!==void 0&&c!==void 0&&l!==void 0){let t=new e.gp_Dir_5(s,c,l);f=new e.gp_Ax3_3(u,d,t),t.delete()}else f=new e.gp_Ax3_5(u,d);return u.delete(),d.delete(),f}function hc(e){return{makeLineEdge:(t,n)=>Ws(e,t,n),makeCircleEdge:(t,n,r)=>Gs(e,t,n,r),makeCircleArc:(t,n,r,i,a)=>Ks(e,t,n,r,i,a),makeArcEdge:(t,n,r)=>qs(e,t,n,r),makeEllipseEdge:(t,n,r,i,a)=>Ys(e,t,n,r,i,a),makeEllipseArc:(t,n,r,i,a,o,s)=>Xs(e,t,n,r,i,a,o,s),makeBezierEdge:t=>Zs(e,t),makeTangentArc:(t,n,r)=>Js(e,t,n,r),makeHelixWire:(t,n,r,i,a,o)=>Qs(e,t,n,r,i,a,o),makeCompound:t=>tc(e,t),makeBoxFromCorners:(t,n)=>nc(e,t,n),makeRectangle:(t,n)=>cc(e,t,n),solidFromShell:t=>rc(e,t),makeEllipsoid:(t,n,r)=>ec(e,t,n,r),toBREP:t=>ic(e,t),fromBREP:t=>ac(e,t),exportSTEPAssembly:(t,n)=>oc(e,t,n??{}),dispose:t=>{sc(e,t)},createPoint3d:(t,n,r)=>lc(e,t,n,r),createDirection3d:(t,n,r)=>uc(e,t,n,r),createVector3d:(t,n,r)=>dc(e,t,n,r),createAxis1:(t,n,r,i,a,o)=>fc(e,t,n,r,i,a,o),createAxis2:(t,n,r,i,a,o,s,c,l)=>pc(e,t,n,r,i,a,o,s,c,l),createAxis3:(t,n,r,i,a,o,s,c,l)=>mc(e,t,n,r,i,a,o,s,c,l)}}function gc(e,t,n,r){let i=So(`extrude`);try{let i=new e.gp_Vec_4(n[0]*r,n[1]*r,n[2]*r),a=new e.BRepPrimAPI_MakePrism_1(t,i,!1,!0),o=a.Shape();return a.delete(),i.delete(),o}finally{i()}}function _c(e,t,n,r){let i=new e.BRepPrimAPI_MakeRevol_1(t,n,r,!1),a=i.Shape();return i.delete(),a}function vc(e,t,n=!1,r,i){let a=So(`loft`);try{let a=new e.BRepOffsetAPI_ThruSections(!0,n,1e-6);r&&a.AddVertex(r);for(let e of t)a.AddWire(e);i&&a.AddVertex(i);let o=new e.Message_ProgressRange_1;a.Build(o);let s=a.Shape();return a.delete(),o.delete(),s}finally{a()}}function yc(e,t,n,r={}){let{transitionMode:i}=r,a=new e.BRepOffsetAPI_MakePipeShell(n);typeof a.SetIsBuildHistory==`function`&&a.SetIsBuildHistory(!1),i!==void 0&&a.SetTransitionMode(i),a.Add_1(t,!1,!1);let o=new e.Message_ProgressRange_1;if(a.Build(o),o.delete(),!a.IsDone())throw a.delete(),Error(`Sweep build failed (IsDone=false)`);a.MakeSolid();let s=a.Shape();return a.delete(),s}function bc(e,t,n){let r=new e.BRepOffsetAPI_MakePipe_1(n,t),i=new e.Message_ProgressRange_1;r.Build(i),i.delete();let a=r.Shape();if(a.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_SHELL){let t=new e.BRepBuilderAPI_MakeSolid_1,n=e.TopoDS_Cast.Shell(a);t.Add(n);let i=new e.Message_ProgressRange_1;t.Build(i),i.delete();let o=a;if(t.IsDone()){let n=t.Solid(),r=new e.BRepCheck_Analyzer(n,!0,!1,!1);r.IsValid_2()?o=n:n.delete(),r.delete()}return n.delete(),t.delete(),r.delete(),o}return r.delete(),a}var xc,Sc;function Cc(){xc=void 0}function wc(){Sc=void 0}function Tc(e){return xc??=typeof e.LoftBatch==`function`,xc}function Ec(e){return Sc??=typeof e.ExtrudeBatch==`function`,Sc}function Dc(e,t){if(t.length===0)return[];if(Tc(e)){let n=So(`loft`),r=new e.LoftBatch;try{for(let e of t){let t=r.beginLoft(e.solid??!0,e.ruled??!1,e.tolerance??1e-6);e.startVertex&&r.setStartVertex(t,e.startVertex);for(let n of e.wires)r.addWire(t,n);e.endVertex&&r.setEndVertex(t,e.endVertex)}let e=r.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{r.delete(),n()}}return t.map(t=>vc(e,t.wires,t.ruled??!1,t.startVertex,t.endVertex))}function Oc(e,t){if(t.length===0)return[];if(Ec(e)){let n=So(`extrude`),r=new e.ExtrudeBatch;try{for(let e of t)r.addExtrude(e.face,e.direction[0]*e.length,e.direction[1]*e.length,e.direction[2]*e.length);let e=r.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{r.delete(),n()}}return t.map(t=>gc(e,t.face,t.direction,t.length))}function kc(e){return{extrude:(t,n,r)=>gc(e,t,n,r),revolve:(t,n,r)=>_c(e,t,n,r),loft:(t,n,r,i)=>vc(e,t,n,r,i),sweep:(t,n,r)=>yc(e,t,n,r??{}),simplePipe:(t,n)=>bc(e,t,n),loftBatch:t=>Dc(e,t),extrudeBatch:t=>Oc(e,t)}}function Ac(e,t,n,r){let i=So(`fillet`);try{let i=new e.BRepFilletAPI_MakeFillet(t,e.ChFi3d_FilletShape.ChFi3d_Rational);for(let t of n){let n=typeof r==`function`?r(t):r,a=e.TopoDS_Cast.Edge(t);if(typeof n==`number`)n>0&&i.Add_2(n,a);else{let[e,t]=n;e>0&&t>0&&i.Add_3(e,t,a)}}let a=i.Shape();return i.delete(),a}finally{i()}}function jc(e,t,n,r){let i=new e.BRepFilletAPI_MakeChamfer(t),a=null;function o(){if(a)return a;a=new Map;let n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;n.More();){let t=e.TopoDS_Cast.Face(n.Current()),r=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_EDGE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;r.More();){let n=e.shapeHashCode(r.Current(),2147483647);a.has(n)||a.set(n,t),r.Next()}r.delete(),n.Next()}return n.delete(),a}function s(t){return o().get(e.shapeHashCode(t,2147483647))??null}for(let t of n){let n=typeof r==`function`?r(t):r,a=e.TopoDS_Cast.Edge(t);if(typeof n==`number`)n>0&&i.Add_2(n,a);else{let[e,r]=n;if(e>0&&r>0){let n=s(t);n&&i.Add_3(e,r,a,n)}}}let c=i.Shape();return i.delete(),c}function Mc(e,t,n,r,i=.001){let a=So(`shell`);try{let a=new e.TopTools_ListOfShape_1;for(let e of n)a.Append_1(e);let o=new e.Message_ProgressRange_1,s=new e.BRepOffsetAPI_MakeThickSolid;s.MakeThickSolidByJoin(t,a,-r,i,e.BRepOffset_Mode.BRepOffset_Skin,!1,!1,e.GeomAbs_JoinType.GeomAbs_Arc,!1,o);let c=s.Shape();return s.delete(),a.delete(),o.delete(),c}finally{a()}}function Nc(e,t,n){let r=new e.BRepOffsetAPI_MakeThickSolid;r.MakeThickSolidBySimple(t,n);let i=new e.Message_ProgressRange_1;r.Build(i);let a=r.Shape();return r.delete(),i.delete(),a}function Pc(e,t,n,r,i){let a=new e.BRepFilletAPI_MakeChamfer(t),o=i*Math.PI/180,s=new Map,c=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;c.More();){let t=e.TopoDS_Cast.Face(c.Current()),n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_EDGE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;n.More();){let r=e.shapeHashCode(n.Current(),2147483647);s.has(r)||s.set(r,t),n.Next()}n.delete(),c.Next()}c.delete();for(let t of n){let n=s.get(e.shapeHashCode(t,2147483647))??null;n&&r>0&&a.AddDA(r,o,e.TopoDS_Cast.Edge(t),n)}let l=a.Shape();return a.delete(),l}function Fc(e,t,n,r){let i;i=typeof r==`string`?{arc:e.GeomAbs_JoinType.GeomAbs_Arc,intersection:e.GeomAbs_JoinType.GeomAbs_Intersection,tangent:e.GeomAbs_JoinType.GeomAbs_Tangent}[r]??e.GeomAbs_JoinType.GeomAbs_Arc:r??e.GeomAbs_JoinType.GeomAbs_Arc;let a=new e.BRepOffsetAPI_MakeOffset_3(t,i,!1);a.Perform(n,0);let o=a.Shape();return a.delete(),o}function Ic(e,t,n,r=1e-6){let i=new e.Message_ProgressRange_1,a=new e.BRepOffsetAPI_MakeOffsetShape;a.PerformByJoin(t,n,r,e.BRepOffset_Mode.BRepOffset_Skin,!1,!1,e.GeomAbs_JoinType.GeomAbs_Arc,!1,i);let o=a.Shape();return a.delete(),i.delete(),o}var Lc,Rc;function zc(){Lc=void 0}function Bc(){Rc=void 0}function Vc(e){return Lc??=typeof e.ShellBatch==`function`,Lc}function Hc(e){return Rc??=typeof e.FilletBatch==`function`,Rc}function Uc(e,t){if(t.length===0)return[];if(Vc(e)){let n=So(`shell`),r=new e.ShellBatch;try{for(let e of t){let t=r.beginShell(e.shape,e.thickness,e.tolerance??.001);for(let n of e.faces)r.addFaceToRemove(t,n)}let e=r.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{r.delete(),n()}}return t.map(t=>Mc(e,t.shape,t.faces,t.thickness,t.tolerance??.001))}function Wc(e,t){if(t.length===0)return[];if(Hc(e)){let n=So(`fillet`),r=new e.FilletBatch;try{for(let e of t){let t=r.beginFillet(e.shape);for(let n of e.edges)n.r2===void 0?r.addEdge(t,n.edge,n.radius):r.addEdgeVariable(t,n.edge,n.radius,n.r2)}let e=r.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{r.delete(),n()}}return t.map(t=>{let n=t.edges.map(e=>e.edge);return Ac(e,t.shape,n,e=>{let n=t.edges.find(t=>t.edge===e);return n?n.r2===void 0?n.radius:[n.radius,n.r2]:0})})}function Gc(e){return{fillet:(t,n,r)=>Ac(e,t,n,r),chamfer:(t,n,r)=>jc(e,t,n,r),chamferDistAngle:(t,n,r,i)=>Pc(e,t,n,r,i),shell:(t,n,r,i)=>Mc(e,t,n,r,i),thicken:(t,n)=>Nc(e,t,n),offset:(t,n,r)=>Ic(e,t,n,r),offsetWire2D:(t,n,r)=>Fc(e,t,n,r),shellBatch:t=>Uc(e,t),filletBatch:t=>Wc(e,t)}}var Kc;function qc(){Kc=void 0}function Jc(e){return Kc??=typeof e.TransformBatch==`function`,Kc}function Yc(e,t){if(t.length===0)return[];let n=So(`transform`);try{if(Jc(e)){let n=new e.TransformBatch;try{for(let e of t)switch(e.type){case`translate`:n.addTranslate(e.shape,e.x,e.y,e.z);break;case`rotate`:n.addRotate(e.shape,e.angle*Math.PI/180,...e.axis,...e.center);break;case`scale`:n.addScale(e.shape,...e.center,e.factor);break;case`mirror`:n.addMirror(e.shape,...e.origin,...e.normal);break}let e=n.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{n.delete()}}return t.map(t=>{switch(t.type){case`translate`:return Qc(e,t.shape,t.x,t.y,t.z);case`rotate`:return $c(e,t.shape,t.angle,[...t.axis],[...t.center]);case`scale`:return tl(e,t.shape,[...t.center],t.factor);case`mirror`:return el(e,t.shape,[...t.origin],[...t.normal])}})}finally{n()}}function Xc(e,t,n){let r=new e.BRepBuilderAPI_Transform_2(t,n,!0,!1),i=r.ModifiedShape(t);return r.delete(),i}function Zc(e,t,n){let r=new e.BRepBuilderAPI_Transform_2(t,n,!1,!1);try{return r.ModifiedShape(t)}finally{r.delete()}}function Qc(e,t,n,r,i){let a=new e.gp_Trsf_1,o=new e.gp_Vec_4(n,r,i);a.SetTranslation_1(o);let s=Xc(e,t,a);return a.delete(),o.delete(),s}function $c(e,t,n,r=[0,0,1],i=[0,0,0]){let a=new e.gp_Trsf_1,o=new e.gp_Pnt_3(...i),s=new e.gp_Dir_5(...r),c=new e.gp_Ax1_2(o,s);a.SetRotation_1(c,n*Math.PI/180);let l=Xc(e,t,a);return a.delete(),c.delete(),o.delete(),s.delete(),l}function el(e,t,n,r){let i=new e.gp_Trsf_1,a=new e.gp_Pnt_3(...n),o=new e.gp_Dir_5(...r),s=new e.gp_Ax2_4(a,o);i.SetMirror_3(s);let c=Xc(e,t,i);return i.delete(),s.delete(),a.delete(),o.delete(),c}function tl(e,t,n,r){let i=new e.gp_Trsf_1,a=new e.gp_Pnt_3(...n);i.SetScale(a,r);let o=Xc(e,t,i);return i.delete(),a.delete(),o}function nl(e,t,n,r,i){if(i){let i=new e.gp_Trsf_1;i.SetValues(n[0],n[1],n[2],r[0],n[3],n[4],n[5],r[1],n[6],n[7],n[8],r[2]);let a=new e.BRepBuilderAPI_Transform_2(t,i,!0,!1),o=a.ModifiedShape(t);return a.delete(),i.delete(),o}let a=new e.gp_GTrsf_1;for(let e=0;e<3;e++)for(let t=0;t<3;t++)a.SetValue(e+1,t+1,n[e*3+t]);let o=new e.gp_XYZ_2(r[0],r[1],r[2]);a.SetTranslationPart(o),o.delete();let s=new e.BRepBuilderAPI_GTransform_2(t,a,!0),c=s.ModifiedShape(t);return s.delete(),a.delete(),c}function rl(e,t){let n=new e.ShapeUpgrade_UnifySameDomain_2(t,!0,!0,!1);n.Build();let r=n.Shape();return n.delete(),r}function il(e){return{transform:(t,n)=>Xc(e,t,n),locate:(t,n)=>Zc(e,t,n),translate:(t,n,r,i)=>Qc(e,t,n,r,i),rotate:(t,n,r,i)=>$c(e,t,n,r,i),mirror:(t,n,r)=>el(e,t,n,r),scale:(t,n,r)=>tl(e,t,n,r),transformBatch:t=>Yc(e,t),generalTransform:(t,n,r,i)=>nl(e,t,n,r,i),simplify:t=>rl(e,t)}}function al(e,t,n){if(n===0)return new Float32Array;let r=t/4;return e.slice(r,r+n)}function ol(e,t,n){let r=So(`mesh`);try{let r=e.MeshExtractor.extract(t,n.tolerance,n.angularTolerance,!!n.skipNormals,!!n.includeUVs),i=r.getVerticesSize(),a=r.getNormalsSize(),o=r.getTrianglesSize(),s=r.getFaceGroupsSize(),c=r.getUvsSize(),l=al(e.HEAPF32,r.getVerticesPtr(),i),u=n.skipNormals||a===0?new Float32Array:al(e.HEAPF32,r.getNormalsPtr(),a),d=r.getTrianglesPtr()/4,f=e.HEAPU32.slice(d,d+o),p=c>0?al(e.HEAPF32,r.getUvsPtr(),c):new Float32Array,m=[];if(s>0){let t=r.getFaceGroupsPtr()/4,n=e.HEAP32.slice(t,t+s);for(let e=0;e<n.length;e+=3)m.push({start:n[e],count:n[e+1],faceHash:n[e+2]})}return r.delete(),{vertices:l,normals:u,triangles:f,uvs:p,faceGroups:m}}finally{r()}}function sl(e,t,n,r){let i=So(`edgeMesh`);try{let i=e.EdgeMeshExtractor.extract(t,n,r),a=i.getLinesSize(),o=i.getEdgeGroupsSize(),s=al(e.HEAPF32,i.getLinesPtr(),a),c=[];if(o>0){let t=i.getEdgeGroupsPtr()/4,n=e.HEAP32.slice(t,t+o);for(let e=0;e<n.length;e+=3)c.push({start:n[e],count:n[e+1],edgeHash:n[e+2]})}return i.delete(),{lines:s,edgeGroups:c}}finally{i()}}function cl(e){return{mesh:(t,n)=>ol(e,t,n),meshEdges:(t,n,r)=>sl(e,t,n,r)}}var ll=0;function ul(e,t){return`${e}_${++ll}.${t}`}function dl(e,t){let n=e.StepStreamIO;if(typeof n?.exportSTEP==`function`&&t.length===1)return n.exportSTEP(t[0],5);let r=new e.STEPControl_Writer_1;e.Interface_Static.SetIVal(`write.step.schema`,5),r.Model(!0).delete();let i=new e.Message_ProgressRange_1;for(let n of t)r.Transfer_1(n,e.STEPControl_StepModelType.STEPControl_AsIs,!0,i);let a=ul(`_export`,`step`),o=r.Write(a);if(r.delete(),i.delete(),o===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+a);return e.FS.unlink(`/`+a),new TextDecoder().decode(t)}throw Error(`STEP export failed: writer did not complete successfully`)}function fl(e,t,n=!1){let r=ul(`_export`,`stl`);if(e.StlAPI.Write(t,r,!n)){let t=e.FS.readFile(`/`+r);return e.FS.unlink(`/`+r),n?t.buffer:new TextDecoder().decode(t)}throw Error(`STL export failed: StlAPI.Write returned false`)}function pl(e,t){let n=new e.IGESControl_Writer_1;for(let e of t)n.AddShape(e);n.ComputeModel();let r=ul(`_export`,`iges`),i=n.Write_2(r);if(n.delete(),i){let t=e.FS.readFile(`/`+r);return e.FS.unlink(`/`+r),new TextDecoder().decode(t)}throw Error(`IGES export failed: writer did not complete successfully`)}function ml(e,t){let n=typeof t==`string`?t:new TextDecoder().decode(new Uint8Array(t)),r=e.StepStreamIO;if(typeof r?.importSTEP==`function`){let e=r.importSTEP(n);if(e.IsNull())throw Error(`Failed to import STEP file: stream reader could not parse the input data`);return[e]}let i=ul(`_import`,`step`),a=new TextEncoder().encode(n);e.FS.writeFile(`/`+i,a);let o=new e.STEPControl_Reader_1;if(o.ReadFile(i)){e.FS.unlink(`/`+i);let t=new e.Message_ProgressRange_1;o.TransferRoots(t),t.delete();let n=o.OneShape();return o.delete(),[n]}throw e.FS.unlink(`/`+i),o.delete(),Error(`Failed to import STEP file: reader could not parse the input data`)}function hl(e,t){let n=ul(`_import`,`stl`),r=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);e.FS.writeFile(`/`+n,r);let i=new e.StlAPI_Reader,a=new e.TopoDS_Shape;if(i.Read_1(a,`/`+n)){e.FS.unlink(`/`+n);let t=new e.ShapeUpgrade_UnifySameDomain_2(a,!0,!0,!1);t.Build();let r=t.Shape(),o=new e.BRepBuilderAPI_MakeSolid_1;o.Add(e.TopoDS_Cast.Shell(r));let s=o.Solid();return a.delete(),t.delete(),o.delete(),i.delete(),s}throw e.FS.unlink(`/`+n),a.delete(),i.delete(),Error(`Failed to import STL file: reader could not parse the input data`)}function gl(e,t){let n=ul(`_import`,`iges`),r=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);e.FS.writeFile(`/`+n,r);let i=new e.IGESControl_Reader_1;if(i.ReadFile(n)===e.IFSelect_ReturnStatus.IFSelect_RetDone){e.FS.unlink(`/`+n);let t=new e.Message_ProgressRange_1;i.TransferRoots(t),t.delete();let r=i.OneShape();return i.delete(),[r]}throw e.FS.unlink(`/`+n),i.delete(),Error(`Failed to import IGES file: reader could not parse the input data`)}function _l(e){return{exportSTEP:t=>dl(e,t),exportSTL:(t,n)=>fl(e,t,n),importSTEP:t=>ml(e,t),importSTL:t=>hl(e,t),exportIGES:t=>pl(e,t),importIGES:t=>gl(e,t)}}function vl(e,t){let n=e.BRep_Tool.Pnt(t),r=[n.X(),n.Y(),n.Z()];return n.delete(),r}function yl(e){let t=e.GeomAbs_SurfaceType;return new Map([[t.GeomAbs_Plane,`plane`],[t.GeomAbs_Cylinder,`cylinder`],[t.GeomAbs_Cone,`cone`],[t.GeomAbs_Sphere,`sphere`],[t.GeomAbs_Torus,`torus`],[t.GeomAbs_BezierSurface,`bezier`],[t.GeomAbs_BSplineSurface,`bspline`],[t.GeomAbs_SurfaceOfRevolution,`revolution`],[t.GeomAbs_SurfaceOfExtrusion,`extrusion`],[t.GeomAbs_OffsetSurface,`offset`],[t.GeomAbs_OtherSurface,`other`]])}var bl=new WeakMap;function xl(e,t){let n=bl.get(e);n||(n=yl(e),bl.set(e,n));let r=new e.BRepAdaptor_Surface_2(t,!1),i=r.GetType();return r.delete(),n.get(i)??`other`}function Sl(e,t){let n=e.BRepTools.UVBounds_1(t);return{uMin:n.UMin,uMax:n.UMax,vMin:n.VMin,vMax:n.VMax}}function Cl(e,t){return e.BRepTools.OuterWire(t)}function wl(e,t,n,r){let i=new e.BRepGProp_Face_2(t,!1),a=new e.gp_Pnt_1,o=new e.gp_Vec_1;i.Normal(n,r,a,o);let s=[o.X(),o.Y(),o.Z()];return i.delete(),a.delete(),o.delete(),s}function Tl(e,t,n,r){let i=new e.BRepAdaptor_Surface_2(t,!1),a=new e.gp_Pnt_1;i.D0(n,r,a);let o=[a.X(),a.Y(),a.Z()];return i.delete(),a.delete(),o}function El(e,t,n){let r=e.BRep_Tool.Surface_2(t),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.GeomAPI_ProjectPointOnSurf_2(i,r,e.Extrema_ExtAlgo.Extrema_ExtAlgo_Grad),o=null;if(a.NbPoints()>0){let e=a.LowerDistanceParameters();o=[e.U,e.V]}return a.delete(),i.delete(),o}function Dl(e,t,n){let r=e.BRep_Tool.Surface_2(t),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.GeomAPI_ProjectPointOnSurf_2(i,r,e.Extrema_ExtAlgo.Extrema_ExtAlgo_Grad),o;if(a.NbPoints()>0){let e=a.NearestPoint();o=[e.X(),e.Y(),e.Z()],e.delete()}else o=n;return a.delete(),i.delete(),o}function Ol(e,t,n){let r=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),i=new e.gp_Pnt_1,a=new e.gp_Vec_1;r.D1(n,i,a);let o={point:[i.X(),i.Y(),i.Z()],tangent:[a.X(),a.Y(),a.Z()]};return r.delete(),i.delete(),a.delete(),o}function kl(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=[n.FirstParameter(),n.LastParameter()];return n.delete(),r}function Al(e,t,n){let r=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),i=r.Value(n),a=[i.X(),i.Y(),i.Z()];return i.delete(),r.delete(),a}function jl(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=n.IsClosed();return n.delete(),r}function Ml(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=n.IsPeriodic();return n.delete(),r}function Nl(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=n.Period();return n.delete(),r}function Pl(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=n.GetType();return n.delete(),{0:`LINE`,1:`CIRCLE`,2:`ELLIPSE`,3:`HYPERBOLA`,4:`PARABOLA`,5:`BEZIER_CURVE`,6:`BSPLINE_CURVE`,7:`OFFSET_CURVE`,8:`OTHER_CURVE`}[typeof r==`number`?r:Number(r?.value??r)]??`OTHER_CURVE`}function Fl(e,t){let n=t.Orientation_1(),r=e.TopAbs_Orientation;return n===r.TopAbs_FORWARD?`forward`:n===r.TopAbs_REVERSED?`reversed`:n===r.TopAbs_INTERNAL?`internal`:`external`}function Il(e,t,n){switch(n??Ll(e,t)){case`vertex`:return e.TopoDS_Cast.Vertex(t);case`edge`:return e.TopoDS_Cast.Edge(t);case`wire`:return e.TopoDS_Cast.Wire(t);case`face`:return e.TopoDS_Cast.Face(t);case`shell`:return e.TopoDS_Cast.Shell(t);case`solid`:return e.TopoDS_Cast.Solid(t);case`compsolid`:return e.TopoDS_Cast.CompSolid(t);default:return e.TopoDS_Cast.Compound(t)}}function Ll(e,t){let n=t.ShapeType(),r=e.TopAbs_ShapeEnum;return n===r.TopAbs_VERTEX?`vertex`:n===r.TopAbs_EDGE?`edge`:n===r.TopAbs_WIRE?`wire`:n===r.TopAbs_FACE?`face`:n===r.TopAbs_SHELL?`shell`:n===r.TopAbs_SOLID?`solid`:n===r.TopAbs_COMPSOLID?`compsolid`:`compound`}function Rl(e,t,n){return e.shapeHashCode(t,n)}function zl(e,t){return t.IsNull()}function Bl(e,t){return t.Reversed()}function Vl(e,t){let n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE),r=new e.TopLoc_Location_1,i=!1;for(;n.More();){let t=e.TopoDS_Cast.Face(n.Current());if(!e.BRep_Tool_Triangulation(t,r,0).IsNull()){i=!0;break}n.Next()}return n.delete(),r.delete(),i}function Hl(e,t,n,r){new e.BRepMesh_IncrementalMeshWrapper(t,n,!1,r,!1).delete()}function Ul(e,t){let n=new e.BRepAdaptor_Curve_2(t);try{let e=n.Bezier().get(),t=e.NbPoles();if(t<2)return null;let r=e.Pole(t-1),i=[r.X(),r.Y(),r.Z()];return r.delete(),i}catch{return null}finally{n.delete()}}function Wl(e,t){return t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t)}function Gl(e,t){let n=t.get();if(typeof n.Cylinder!=`function`)return null;let r=n.Cylinder(),i={radius:r.Radius(),isDirect:r.Direct()};return r.delete(),i}function Kl(e,t){let n=null;try{if(t===7)return e.AxeOfRevolution();if(t===1)n=e.Cylinder();else if(t===2)n=e.Cone();else if(t===4)n=e.Torus();else return null;let r=n.Axis();return n.delete(),r}catch{return n?.delete?.(),null}}function ql(e,t){let n=new e.BRepAdaptor_Surface_2(t,!1);try{let e=n.GetType(),t=Kl(n,typeof e==`number`?e:Number(e?.value??e));if(!t)return null;let r=null,i=null;try{return r=t.Location(),i=t.Direction(),{origin:[r.X(),r.Y(),r.Z()],direction:[i.X(),i.Y(),i.Z()]}}finally{r?.delete?.(),i?.delete?.(),t.delete()}}finally{n.delete()}}function Jl(e,t){return t.get().UReversed()}function Yl(e){return{vertexPosition:t=>vl(e,t),surfaceType:t=>xl(e,t),uvBounds:t=>Sl(e,t),outerWire:t=>Cl(e,t),surfaceNormal:(t,n,r)=>wl(e,t,n,r),pointOnSurface:(t,n,r)=>Tl(e,t,n,r),uvFromPoint:(t,n)=>El(e,t,n),projectPointOnFace:(t,n)=>Dl(e,t,n),curveTangent:(t,n)=>Ol(e,t,n),curveParameters:t=>kl(e,t),shapeOrientation:t=>Fl(e,t),downcast:(t,n)=>Il(e,t,n),copyShape:t=>Il(e,t),hashCode:(t,n)=>Rl(e,t,n),isNull:t=>zl(e,t),hasTriangulation:t=>Vl(e,t),meshShape:(t,n,r)=>{Hl(e,t,n,r)},getBezierPenultimatePole:t=>Ul(e,t),createCurveAdaptor:t=>Wl(e,t),reverseShape:t=>Bl(e,t),curvePointAtParam:(t,n)=>Al(e,t,n),curveIsClosed:t=>jl(e,t),curveIsPeriodic:t=>Ml(e,t),curvePeriod:t=>Nl(e,t),curveType:t=>Pl(e,t),getSurfaceCylinderData:t=>Gl(e,t),getSurfaceAxis:t=>ql(e,t),reverseSurfaceU:t=>Jl(e,t)}}function Xl(e,t){let n=new e.BRepAdaptor_Curve_2(t);try{let t=n.GetType(),r=typeof t==`number`?t:Number(t?.value??t),i=e.GeomAbs_CurveType,a=typeof i.GeomAbs_BSplineCurve==`number`?i.GeomAbs_BSplineCurve:Number(i.GeomAbs_BSplineCurve?.value??i.GeomAbs_BSplineCurve),o=typeof i.GeomAbs_BezierCurve==`number`?i.GeomAbs_BezierCurve:Number(i.GeomAbs_BezierCurve?.value??i.GeomAbs_BezierCurve);if(r!==a&&r!==o)return null;let s=n.BSpline(),c=s.get(),l=c.Degree(),u=c.NbPoles(),d=c.NbKnots(),f=c.IsPeriodic(),p=c.IsRational(),m=[];for(let e=1;e<=u;e++){let t=c.Pole(e);m.push([t.X(),t.Y(),t.Z()]),t.delete()}let h=[];for(let e=1;e<=u;e++)h.push(c.Weight(e));let g=[],_=[];for(let e=1;e<=d;e++)g.push(c.Knot(e)),_.push(c.Multiplicity(e));let v={degree:l,poles:m,weights:h,knots:g,multiplicities:_,isPeriodic:f,isRational:p};return s.delete(),v}catch{return null}finally{n.delete()}}function Zl(e,t){let n=new e.BRepAdaptor_Surface_2(t,!1);try{let t=n.GetType(),r=typeof t==`number`?t:Number(t?.value??t),i=e.GeomAbs_SurfaceType;if(r!==(typeof i.GeomAbs_BSplineSurface==`number`?i.GeomAbs_BSplineSurface:Number(i.GeomAbs_BSplineSurface?.value??i.GeomAbs_BSplineSurface)))return null;let a=n.BSpline(),o=a.get(),s=o.UDegree(),c=o.VDegree(),l=o.NbUPoles(),u=o.NbVPoles(),d=o.IsUPeriodic(),f=o.IsVPeriodic(),p=o.IsURational()||o.IsVRational(),m=[],h=[];for(let e=1;e<=l;e++){let t=[],n=[];for(let r=1;r<=u;r++){let i=o.Pole(e,r);t.push([i.X(),i.Y(),i.Z()]),i.delete(),n.push(o.Weight(e,r))}m.push(t),h.push(n)}let g=o.NbUKnots(),_=[],v=[];for(let e=1;e<=g;e++)_.push(o.UKnot(e)),v.push(o.UMultiplicity(e));let y=o.NbVKnots(),b=[],x=[];for(let e=1;e<=y;e++)b.push(o.VKnot(e)),x.push(o.VMultiplicity(e));let S={degreeU:s,degreeV:c,nbPolesU:l,nbPolesV:u,poles:m,weights:h,knotsU:_,knotsV:b,multiplicitiesU:v,multiplicitiesV:x,isPeriodicU:d,isPeriodicV:f,isRational:p};return a.delete(),S}catch{return null}finally{n.delete()}}function Ql(e){return{getNurbsCurveData:t=>Xl(e,t),getNurbsSurfaceData:t=>Zl(e,t)}}function $l(e,t,n={}){let{tolerance:r=1e-8}=n,i=new e.TColgp_Array1OfPnt_2(1,t.length),a=new e.gp_Pnt_1,o=1;for(let e of t)a.SetCoord_2(e[0],e[1],e[2]),i.SetValue_1(o++,a);a.delete();let s=new e.GeomAPI_PointsToBSpline_2(i,3,8,e.GeomAbs_Shape.GeomAbs_C2,r);if(i.delete(),!s.IsDone())throw s.delete(),Error(`Interpolation failed — GeomAPI_PointsToBSpline did not converge`);let c=s.Curve(),l=new e.Handle_Geom_Curve_2(c.get()),u=new e.BRepBuilderAPI_MakeEdge_24(l),d=u.Edge();return u.delete(),s.delete(),d}function eu(e,t,n={}){let{tolerance:r=.001,degMin:i=1,degMax:a=6,smoothing:o=null}=n,s=new e.TColgp_Array1OfPnt_2(1,t.length),c=new e.gp_Pnt_1,l=1;for(let e of t)c.SetCoord_2(e[0],e[1],e[2]),s.SetValue_1(l++,c);c.delete();let u;if(u=o?new e.GeomAPI_PointsToBSpline_5(s,o[0],o[1],o[2],a,e.GeomAbs_Shape.GeomAbs_C2,r):new e.GeomAPI_PointsToBSpline_2(s,i,a,e.GeomAbs_Shape.GeomAbs_C2,r),s.delete(),!u.IsDone())throw u.delete(),Error(`Approximation failed — GeomAPI_PointsToBSpline did not converge`);let d=u.Curve(),f=new e.Handle_Geom_Curve_2(d.get()),p=new e.BRepBuilderAPI_MakeEdge_24(f),m=p.Edge();return p.delete(),u.delete(),m}function tu(e){return{interpolatePoints:(t,n)=>$l(e,t,n??{}),approximatePoints:(t,n)=>eu(e,t,n??{})}}function nu(e,t){let n=new e.ShapeFix_Solid_2(t),r=new e.Message_ProgressRange_1;n.Perform(r),r.delete();let i=n.Solid();return n.delete(),i.IsNull()?null:i}function ru(e,t){let n=new e.ShapeFix_Face_2(t);n.Perform();let r=n.Face();return n.delete(),r}function iu(e,t,n){let r;n?r=new e.ShapeFix_Wire_2(t,n,1e-6):(r=new e.ShapeFix_Wire_1,r.Load_1(t)),r.Perform();let i=r.Wire();return r.delete(),i}function au(e){return{healSolid:t=>nu(e,t),healFace:t=>ru(e,t),healWire:(t,n)=>iu(e,t,n)}}var ou={modified:new Map,generated:new Map,deleted:new Set};function su(e,t,n){let r=new Map;if(n===0)return r;let i=e.slice(t/4,t/4+n),a=0;for(;a+1<i.length;){let e=i[a++],t=i[a++];if(t<0||a+t>i.length)break;let n=[];for(let e=0;e<t;e++)n.push(i[a++]);r.set(e,n)}return r}function cu(e,t){try{let n=su(e.HEAP32,t.getModifiedPtr(),t.getModifiedSize()),r=su(e.HEAP32,t.getGeneratedPtr(),t.getGeneratedSize()),i=new Set,a=t.getDeletedSize();if(a>0){let n=t.getDeletedPtr()/4,r=e.HEAP32.slice(n,n+a);for(let e=0;e<r.length;e++)i.add(r[e])}return{modified:n,generated:r,deleted:i}}finally{t.delete()}}function lu(e,t,n){let r=[];if(t.Size()===0)return r;if(e.TopTools_ListIteratorOfListOfShape){let i=new e.TopTools_ListIteratorOfListOfShape(t);for(;i.More();)r.push(e.shapeHashCode(i.Value(),n)),i.Next();i.delete()}else{let i=new e.TopTools_ListOfShape_3(t);for(;i.Size()>0;)r.push(e.shapeHashCode(i.First_1(),n)),i.RemoveFirst();i.delete()}return r}function uu(e,t,n,r,i){if(r.length===0)return ou;let a=Array.isArray(n)?n:[n];if(e.EvolutionExtractor){let n,r,o;if(a.length===1)n=a[0];else{r=new e.TopoDS_Builder,o=new e.TopoDS_Compound,r.MakeCompound(o);for(let e of a)r.Add(o,e);n=o}let s;try{s=e.EvolutionExtractor.extract(t,n,i)}catch{}finally{r?.delete(),o?.delete()}if(s!==void 0)return cu(e,s)}let o=new Map,s=new Map,c=new Set,l=new Set(r),u=new Map;for(let t of a){let n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;n.More();){let t=n.Current(),r=e.shapeHashCode(t,i);l.has(r)&&u.set(r,t),n.Next()}n.delete()}for(let[n,r]of u){if(t.IsDeleted?.(r)){c.add(n);continue}let a=t.Modified(r);a.Size()>0&&o.set(n,lu(e,a,i));let l=t.Generated(r);l.Size()>0&&s.set(n,lu(e,l,i))}return{modified:o,generated:s,deleted:c}}function du(e,t,n,r,i){let a=new e.BRepBuilderAPI_Transform_2(t,n,!0,!1),o=a.Shape(),s=r.length===0?ou:uu(e,a,t,r,i);return a.delete(),{shape:o,evolution:s}}function fu(e,t,n,r,i,a,o){return a&&t.SimplifyResult(!0,!0,.001),{shape:t.Shape(),evolution:uu(e,t,n,r,i),diagnostics:o??{hasErrors:!1,hasWarnings:!1,messages:[]}}}function pu(e,t,n,r,i){return{shape:t.Shape(),evolution:uu(e,t,n,r,i)}}function mu(e,t,n,r,i,a,o){let s=new e.gp_Trsf_1,c=new e.gp_Vec_4(n,r,i);s.SetTranslation_1(c),c.delete();let l=du(e,t,s,a,o);return s.delete(),l}function hu(e,t,n,r,i,a=[0,0,1],o=[0,0,0]){let s=new e.gp_Trsf_1,c=new e.gp_Pnt_3(o[0],o[1],o[2]),l=new e.gp_Dir_5(a[0],a[1],a[2]),u=new e.gp_Ax1_2(c,l);s.SetRotation_1(u,n),c.delete(),l.delete(),u.delete();let d=du(e,t,s,r,i);return s.delete(),d}function gu(e,t,n,r,i,a){let o=new e.gp_Trsf_1,s=new e.gp_Pnt_3(n[0],n[1],n[2]),c=new e.gp_Dir_5(r[0],r[1],r[2]),l=new e.gp_Ax2_4(s,c);o.SetMirror_3(l),s.delete(),c.delete(),l.delete();let u=du(e,t,o,i,a);return o.delete(),u}function _u(e,t,n,r,i,a){let o=new e.gp_Trsf_1,s=new e.gp_Pnt_3(n[0],n[1],n[2]);o.SetScale(s,r),s.delete();let c=du(e,t,o,i,a);return o.delete(),c}function vu(e,t,n,r,i,a,o){let s=new e.gp_Trsf_1;s.SetValues(n[0],n[1],n[2],r[0],n[3],n[4],n[5],r[1],n[6],n[7],n[8],r[2]);let c=du(e,t,s,a,o);return s.delete(),c}function yu(e){return{hasErrors:e.HasErrors(),hasWarnings:e.HasWarnings(),messages:[]}}function bu(e,t,n,r,i,a={}){let o=new e.Message_ProgressRange_1,s=new e.BRepAlgoAPI_Fuse_3(t,n,o);os(e,s,a.optimisation),ss(s,a.fuzzyValue),s.Build(o);let c=yu(s),l=fu(e,s,[t,n],r,i,a.simplify??!1,c);return s.delete(),o.delete(),l}function xu(e,t,n,r,i,a={}){let o=new e.Message_ProgressRange_1,s=new e.BRepAlgoAPI_Cut_3(t,n,o);os(e,s,a.optimisation),ss(s,a.fuzzyValue),s.Build(o);let c=yu(s),l=fu(e,s,[t,n],r,i,a.simplify??!1,c);return s.delete(),o.delete(),l}function Su(e,t,n,r,i,a={}){let o=new e.Message_ProgressRange_1,s=new e.BRepAlgoAPI_Common_3(t,n,o);os(e,s,a.optimisation),ss(s,a.fuzzyValue),s.Build(o);let c=yu(s),l=fu(e,s,[t,n],r,i,a.simplify??!1,c);return s.delete(),o.delete(),l}function Cu(e,t,n,r,i,a){let o=new e.BRepFilletAPI_MakeFillet(t,e.ChFi3d_FilletShape.ChFi3d_Rational);for(let t of n){let n=typeof r==`function`?r(t):r;Array.isArray(n)?o.Add_3(n[0],n[1],e.TopoDS_Cast.Edge(t)):o.Add_2(n,e.TopoDS_Cast.Edge(t))}let s=new e.Message_ProgressRange_1;o.Build(s),s.delete();let c=pu(e,o,t,i,a);return o.delete(),c}function wu(e,t,n,r,i,a){let o=new e.BRepFilletAPI_MakeChamfer(t),s=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE),c=new Map;for(;s.More();){let t=e.TopoDS_Cast.Face(s.Current()),n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_EDGE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;n.More();)c.set(e.shapeHashCode(n.Current(),a),t),n.Next();n.delete(),s.Next()}s.delete();for(let t of n){let n=typeof r==`function`?r(t):r,i=c.get(e.shapeHashCode(t,a));if(Array.isArray(n)&&i)o.Add_3(n[0],n[1],e.TopoDS_Cast.Edge(t),i);else{let r=Array.isArray(n)?n[0]:n;o.Add_2(r,e.TopoDS_Cast.Edge(t))}}let l=new e.Message_ProgressRange_1;o.Build(l),l.delete();let u=pu(e,o,t,i,a);return o.delete(),u}function Tu(e,t,n,r,i,a,o=.001){let s=new e.BRepOffsetAPI_MakeThickSolid,c=new e.TopTools_ListOfShape_1;for(let e of n)c.Append_1(e);let l=new e.Message_ProgressRange_1;s.MakeThickSolidByJoin(t,c,-r,o,e.BRepOffset_Mode.BRepOffset_Skin,!1,!1,e.GeomAbs_JoinType.GeomAbs_Arc,!1,l),l.delete(),c.delete();let u=pu(e,s,t,i,a);return s.delete(),u}function Eu(e,t,n,r,i){let a=new e.BRepOffsetAPI_MakeThickSolid;a.MakeThickSolidBySimple(t,n);let o=new e.Message_ProgressRange_1;a.Build(o),o.delete();let s=pu(e,a,t,r,i);return a.delete(),s}function Du(e,t,n,r,i,a=1e-6){let o=new e.BRepOffsetAPI_MakeOffsetShape,s=new e.Message_ProgressRange_1;o.PerformByJoin(t,n,a,e.BRepOffset_Mode.BRepOffset_Skin,!1,!1,e.GeomAbs_JoinType.GeomAbs_Arc,!1,s),s.delete();let c=pu(e,o,t,r,i);return o.delete(),c}function Ou(e,t,n,r,i,a,o,s){if(!e.BRepOffsetAPI_DraftAngle)throw Error(`BRepOffsetAPI_DraftAngle not available in this WASM build. Rebuild brepjs-opencascade with the updated build config.`);let[c,l,u]=r,[d,f,p]=i,m=new e.gp_Dir_5(c,l,u),h=new e.gp_Pnt_3(d,f,p),g=new e.gp_Pln_3(h,m),_=new e.BRepOffsetAPI_DraftAngle_2(t);try{for(let t of n){let n=(typeof a==`function`?a(t):a)*Math.PI/180;_.Add(e.TopoDS_Cast.Face(t),m,n,g,!0)}let r=new e.Message_ProgressRange_1;return _.Build(r),r.delete(),pu(e,_,t,o,s)}finally{_.delete(),g.delete(),h.delete(),m.delete()}}function ku(e){return{translateWithHistory:(t,n,r,i,a,o)=>mu(e,t,n,r,i,a,o),rotateWithHistory:(t,n,r,i,a,o)=>hu(e,t,n,r,i,a,o),mirrorWithHistory:(t,n,r,i,a)=>gu(e,t,n,r,i,a),scaleWithHistory:(t,n,r,i,a)=>_u(e,t,n,r,i,a),generalTransformWithHistory:(t,n,r,i,a,o)=>vu(e,t,n,r,i,a,o),fuseWithHistory:(t,n,r,i,a)=>bu(e,t,n,r,i,a),cutWithHistory:(t,n,r,i,a)=>xu(e,t,n,r,i,a),intersectWithHistory:(t,n,r,i,a)=>Su(e,t,n,r,i,a),filletWithHistory:(t,n,r,i,a)=>Cu(e,t,n,r,i,a),chamferWithHistory:(t,n,r,i,a)=>wu(e,t,n,r,i,a),shellWithHistory:(t,n,r,i,a,o)=>Tu(e,t,n,r,i,a,o),thickenWithHistory:(t,n,r,i)=>Eu(e,t,n,r,i),offsetWithHistory:(t,n,r,i,a)=>Du(e,t,n,r,i,a),draftWithHistory:(t,n,r,i,a,o,s)=>Ou(e,t,n,r,i,a,o,s)}}function Au(e,t,n,r){let i=new e.gp_GTrsf_1;for(let e=0;e<3;e++)for(let t=0;t<3;t++)i.SetValue(e+1,t+1,n[e*3+t]);let a=new e.gp_XYZ_2(r[0],r[1],r[2]);i.SetTranslationPart(a),a.delete();let o=new e.BRepBuilderAPI_GTransform_2(t,i,!0),s=o.Shape();return o.delete(),i.delete(),s}function ju(e,t){let n=new e.gp_Trsf_1;for(let r of t){let t=new e.gp_Trsf_1;if(r.type===`translate`){let n=new e.gp_Vec_4(r.x,r.y,r.z);t.SetTranslation_1(n),n.delete()}else{let n=r.axis??[0,0,1],i=r.center??[0,0,0],a=new e.gp_Pnt_3(i[0],i[1],i[2]),o=new e.gp_Dir_5(n[0],n[1],n[2]),s=new e.gp_Ax1_2(a,o);t.SetRotation_1(s,r.angle*Math.PI/180),s.delete(),o.delete(),a.delete()}n.PreMultiply(t),t.delete()}return{handle:n,dispose:()=>n.delete()}}function Mu(e,t,n,r,i){return du(e,t,n,r,i)}function Nu(e,t){if(!t)return;let n=e.BRepBuilderAPI_TransitionMode;switch(t){case`transformed`:return n.BRepBuilderAPI_Transformed;case`round`:return n.BRepBuilderAPI_RoundCorner;case`right`:return n.BRepBuilderAPI_RightCorner}}function Pu(e,t,n,r={}){let i=new e.BRepOffsetAPI_MakePipeShell(n);typeof i.SetIsBuildHistory==`function`&&i.SetIsBuildHistory(!1),r.tolerance!==void 0&&i.SetTolerance(r.tolerance,r.boundTolerance??r.tolerance,r.angularTolerance??1e-7),r.maxDegree!==void 0&&i.SetMaxDegree(r.maxDegree),r.maxSegments!==void 0&&i.SetMaxSegments(r.maxSegments);let a=Nu(e,r.transitionMode);a!==void 0&&i.SetTransitionMode(a),r.support?i.SetMode_4(r.support):r.frenet&&i.SetMode_1(!0),r.auxiliary&&i.SetMode_5(r.auxiliary,!1,e.BRepFill_TypeOfContact.BRepFill_NoContact);let o=!!r.contact,s=!!r.correction;r.law?i.SetLaw_1(t,r.law,o,s):i.Add_1(t,o,s);let c=new e.Message_ProgressRange_1;if(i.Build(c),c.delete(),!i.IsDone())throw i.delete(),Error(`Sweep pipe shell build failed (IsDone=false)`);if(r.shellMode){let e=i.Shape(),t=i.FirstShape(),n=i.LastShape();return i.delete(),{shape:e,firstShape:t,lastShape:n}}i.MakeSolid();let l=i.Shape();return i.delete(),l}function Fu(e,t,n={}){let r=n.solid??!0,i=n.ruled??!1,a=new e.BRepOffsetAPI_ThruSections(r,i,n.tolerance??1e-6);n.startVertex&&a.AddVertex(n.startVertex);for(let e of t)a.AddWire(e);n.endVertex&&a.AddVertex(n.endVertex);let o=new e.Message_ProgressRange_1;a.Build(o),o.delete();let s=a.Shape();return a.delete(),s}function Iu(e,t,n,r){if(t===`linear`){let t=new e.Law_Linear;return t.Set(0,1,n,r),t}let i=new e.Law_S;return i.Set_1(0,1,n,r),i}function Lu(e,t,n,r,i){let a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Dir_5(r[0],r[1],r[2]),s=new e.gp_Ax1_2(a,o),c=new e.BRepPrimAPI_MakeRevol_1(t,s,i,!1),l=c.Shape();return c.delete(),s.delete(),o.delete(),a.delete(),l}function Ru(e,t,n,r,i){let a=[],o=new e.gp_Trsf_1;for(let s=0;s<i;s++){let i=n[0]*r*s,c=n[1]*r*s,l=n[2]*r*s,u=new e.gp_Vec_4(i,c,l);o.SetTranslation_1(u),u.delete();let d=new e.BRepBuilderAPI_Transform_2(t,o,!0,!1);a.push(d.Shape()),d.delete()}return o.delete(),a}function zu(e,t,n,r,i,a){let o=[],s=new e.gp_Pnt_3(n[0],n[1],n[2]),c=new e.gp_Dir_5(r[0],r[1],r[2]),l=new e.gp_Ax1_2(s,c),u=new e.gp_Trsf_1;for(let n=0;n<a;n++){let r=i*n*Math.PI/180;u.SetRotation_1(l,r);let a=new e.BRepBuilderAPI_Transform_2(t,u,!0,!1);o.push(a.Shape()),a.delete()}return u.delete(),l.delete(),c.delete(),s.delete(),o}function Bu(e,t,n,r){let i=n.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(n,!1):new e.BRepAdaptor_Curve_2(n),a=new e.gp_Pnt_1,o=new e.gp_Vec_1;try{i.D1(r,a,o);let n=new e.gp_Dir_2(o),s=new(e.gp_Ax3_5??e.gp_Ax3_4)(a,n),c=new e.gp_Trsf_1;c.SetTransformation_2(s),c.Invert();let l=new e.BRepBuilderAPI_Transform_2(t,c,!0,!1),u=l.Shape();return l.delete(),c.delete(),s.delete(),n.delete(),u}finally{o.delete(),a.delete(),i.delete()}}function Vu(e,t){let n=new e.BRepOffsetAPI_MakeFilling(3,15,2,!1,1e-5,1e-4,.01,.1,8,9),r=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_EDGE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;r.More();){let t=e.TopoDS_Cast.Edge(r.Current());n.Add_1(t,e.GeomAbs_Shape.GeomAbs_C0,!0),r.Next()}r.delete();let i=new e.Message_ProgressRange_1;n.Build(i),i.delete();let a=n.Shape();return n.delete(),a}function Hu(e,t,n){let r=new e.BRepBuilderAPI_MakeFace_2(t);for(let e of n)r.Add(e);let i=r.Face();r.delete();let a=new e.ShapeFix_Face_2(i);a.FixOrientation_1(),a.Perform();let o=a.Face();return a.delete(),o}function Uu(e,t){let n=e.BRepTools.OuterWire(t),r=e.BRep_Tool.Surface_2(t);try{let t=new e.BRepBuilderAPI_MakeFace_21(r,n,!0),i=t.Face();t.delete();let a=new e.ShapeFix_Face_2(i);a.FixOrientation_1(),a.Perform();let o=a.Face();return a.delete(),o}finally{r.delete(),n.delete()}}function Wu(e,t,n){let r=t,i=!1;try{t.ShapeType!==void 0&&(r=e.BRep_Tool.Surface_2(t),i=!0)}catch{}let a=new e.BRepBuilderAPI_MakeFace_21(r,n,!0),o=a.Face();return a.delete(),i&&r.delete(),o}function Gu(e,n,r,i){let a=new e.TColgp_Array2OfPnt_2(1,r,1,i);for(let o=0;o<r;o++)for(let r=0;r<i;r++){let s=t(n,o*i+r),c=new e.gp_Pnt_3(s[0],s[1],s[2]);a.SetValue_1(o+1,r+1,c),c.delete()}let o=new e.GeomAPI_PointsToBSplineSurface_2(a,3,8,e.GeomAbs_Shape.GeomAbs_C2,.001),s=o.Surface();a.delete();let c=new e.BRepBuilderAPI_MakeFace_8(s,1e-6),l=c.Face();return c.delete(),o.delete(),l}function Ku(e,n,r,i){let a=new e.BRepBuilderAPI_Sewing(1e-6,!0,!0,!0,!1);for(let o=0;o<r-1;o++)for(let r=0;r<i-1;r++){let s=o*i+r,c=(o+1)*i+r,l=o*i+(r+1),u=(o+1)*i+(r+1),d=t(n,s),f=t(n,c),p=t(n,l),m=t(n,u),h=qu(e,d,f,p);a.Add(h);let g=qu(e,f,m,p);a.Add(g)}let o=new e.Message_ProgressRange_1;a.Perform(o),o.delete();let s=a.SewedShape();return a.delete(),s}function qu(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.BRepBuilderAPI_MakeEdge_3(i,a),c=new e.BRepBuilderAPI_MakeEdge_3(a,o),l=new e.BRepBuilderAPI_MakeEdge_3(o,i),u=new e.BRepBuilderAPI_MakeWire_4(s.Edge(),c.Edge(),l.Edge()),d=u.Wire(),f=new e.BRepBuilderAPI_MakeFace_15(d,!0),p=f.Face();return f.delete(),u.delete(),l.delete(),c.delete(),s.delete(),o.delete(),a.delete(),i.delete(),p}function Ju(e,t,n){let r=new e.BRepBuilderAPI_Sewing(n,!0,!0,!0,!1);for(let e of t)r.Add(e);let i=new e.Message_ProgressRange_1;r.Perform(i),i.delete();let a=r.SewedShape();r.delete();let o=new e.ShapeFix_Solid_1;try{let t=e.TopoDS_Cast.Shell(a);return o.SolidFromShell(t)}catch{return a}finally{o.delete()}}function Yu(e,t){let n=new e.ShapeFix_Shape_1(t),r=new e.Message_ProgressRange_1;n.Perform(r);let i=n.Shape();return r.delete(),n.delete(),i}function Xu(e,t){let n=new e.ShapeFix_Wire_1;n.Load_1(t),n.FixSelfIntersection();let r=n.Wire();return n.delete(),r}function Zu(){return{gaussian:0,mean:0,max:0,min:0,maxDirection:[1,0,0],minDirection:[0,1,0]}}function Qu(e,t,n,r,i,a){let o=e*n-t*t;if(Math.abs(o)<1e-15)return null;let s=(e*a-2*t*i+n*r)/(2*o),c=(r*a-i*i)/o,l=Math.sqrt(Math.max(0,s*s-c)),u=s+l,d=s-l,f=(n*i-t*a)/o,p=(e*i-t*r)/o,m=(n*r-t*i)/o,h,g;return Math.abs(f)>1e-15?(h=f,g=u-m):Math.abs(p)>1e-15?(h=u-(e*a-t*i)/o,g=p):(h=1,g=0),{mean:s,gaussian:c,k1:u,k2:d,du1:h,dv1:g}}function $u(e,t,n,r){let i=new e.BRepAdaptor_Surface_2(t,!1),a=new e.gp_Pnt_1,o=new e.gp_Vec_1,s=new e.gp_Vec_1,c=new e.gp_Vec_1,l=new e.gp_Vec_1,u=new e.gp_Vec_1;i.D2(n,r,a,o,s,c,l,u);let d=o.Dot(o),f=o.Dot(s),p=s.Dot(s),m=o.Crossed(s),h=m.Magnitude(),g=Zu();if(h>=1e-15){m.Divide(h);let e=Qu(d,f,p,c.Dot(m),u.Dot(m),l.Dot(m));e&&(g={gaussian:e.gaussian,mean:e.mean,max:e.k1,min:e.k2,maxDirection:ed(o,s,e.du1,e.dv1),minDirection:ed(o,s,-e.dv1,e.du1)})}return a.delete(),o.delete(),s.delete(),c.delete(),l.delete(),u.delete(),m.delete(),i.delete(),g}function ed(e,t,n,r){let i=n*e.X()+r*t.X(),a=n*e.Y()+r*t.Y(),o=n*e.Z()+r*t.Z(),s=Math.sqrt(i*i+a*a+o*o);return s<1e-15?[1,0,0]:[i/s,a/s,o/s]}function td(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.SurfaceProperties_2(t,n,1e-7,!0);let r=n.CentreOfMass(),i=[r.X(),r.Y(),r.Z()];return r.delete(),n.delete(),i}function nd(e,t){let n=new e.BRepExtrema_DistShapeShape_1;return n.LoadS1(t),{distanceTo(t){n.LoadS2(t);let r=new e.Message_ProgressRange_1;if(n.Perform(r),r.delete(),!n.IsDone())throw Error(`BRepExtrema_DistShapeShape failed`);let i=n.Value(),a=n.PointOnShape1(1),o=n.PointOnShape2(1),s={value:i,point1:[a.X(),a.Y(),a.Z()],point2:[o.X(),o.Y(),o.Z()]};return a.delete(),o.delete(),s},dispose(){n.delete()}}}function rd(e,t,n,r,i){let a=new e.HLRBRep_Algo_1;a.Add_2(t,0);let o=new e.gp_Pnt_3(n[0],n[1],n[2]),s=new e.gp_Dir_5(r[0],r[1],r[2]),c;if(i){let t=new e.gp_Dir_5(i[0],i[1],i[2]);c=new e.gp_Ax2_2(o,s,t),t.delete()}else c=new e.gp_Ax2_4(o,s);let l=new e.HLRAlgo_Projector_2(c);a.Projector_1(l),a.Update(),a.Hide_1();let u=new e.Handle_HLRBRep_Algo_2(a),d=new e.HLRBRep_HLRToShape(u),f={visible:{outline:d.OutLineVCompound_1(),smooth:d.Rg1LineVCompound_1(),sharp:d.VCompound_1()},hidden:{outline:d.OutLineHCompound_1(),smooth:d.Rg1LineHCompound_1(),sharp:d.HCompound_1()}};for(let t of[f.visible,f.hidden])for(let n of[t.outline,t.smooth,t.sharp])n.IsNull()||e.BRepLib.BuildCurves3d_2(n);return d.delete(),u.delete(),l.delete(),c.delete(),s.delete(),o.delete(),f}function id(e,t,n,r,i,a,o){let s=a*Math.PI/180,c=+!!o,l=new e.BRepFeat_MakeDPrism(t,n,r,s,c,!0);if(i!==null){let t=new e.Message_ProgressRange_1;l.Perform_1(i,t),t.delete()}else l.PerformThruAll();let u=l.Shape();return l.delete(),u}function ad(e,t){let n=new e.TCollection_ExtendedString_2(`XmlOcaf`,!0),r=new e.TDocStd_Document(n);n.delete(),e.XCAFDoc_ShapeTool.SetAutoNaming(!1);let i=r.Main(),a=e.XCAFDoc_DocumentTool.ShapeTool(i).get(),o=e.XCAFDoc_DocumentTool.ColorTool(i).get();for(let n of t){let t=a.NewShape();a.SetShape(t,n.shape);let r=new e.TCollection_ExtendedString_2(n.name,!0);if(e.TDataStd_Name.Set_1(t,r),r.delete(),n.color){let[r,i,a,s]=n.color,c=new e.Quantity_ColorRGBA_5(r/255,i/255,a/255,s/255);o.SetColor_3(t,c,e.XCAFDoc_ColorType.XCAFDoc_ColorSurf),c.delete()}}return a.UpdateAssemblies(),r}function od(e,t,n={}){if(n.unit||n.modelUnit){new e.STEPCAFControl_Writer_1().delete();let t=(n.modelUnit??n.unit??`MM`).toUpperCase(),r=(n.unit??n.modelUnit??`MM`).toUpperCase();e.Interface_Static.SetCVal(`xstep.cascade.unit`,t),e.Interface_Static.SetCVal(`write.step.unit`,r)}let r=new e.XSControl_WorkSession,i=new e.Handle_XSControl_WorkSession_2(r),a=new e.STEPCAFControl_Writer_2(i,!1);a.SetColorMode(!0),a.SetLayerMode(!0),a.SetNameMode(!0),e.Interface_Static.SetIVal(`write.surfacecurve.mode`,!0),e.Interface_Static.SetIVal(`write.precision.mode`,0),e.Interface_Static.SetIVal(`write.step.assembly`,2),e.Interface_Static.SetIVal(`write.step.schema`,5);let o=new e.Handle_TDocStd_Document_2(t),s=new e.Message_ProgressRange_1;a.Transfer_1(o,e.STEPControl_StepModelType.STEPControl_AsIs,null,s),s.delete();let c=ul(`_xcaf_export`,`step`),l=a.Write(c),u=``;if(l===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+c);u=new TextDecoder().decode(t),e.FS.unlink(`/`+c)}return a.delete(),i.delete(),u}function sd(e,t){new e.STEPCAFControl_Writer_1().delete();let n=new e.TCollection_ExtendedString_2(`XmlOcaf`,!0),r=new e.TDocStd_Document(n);n.delete();let i=r.Main(),a=e.XCAFDoc_DocumentTool.ShapeTool(i).get(),o=e.XCAFDoc_DocumentTool.ColorTool(i).get();e.XCAFDoc_ShapeTool.SetAutoNaming(!1);for(let n of t){let t=a.AddShape(n.shape,!1,!0);if(n.name){let r=new e.TCollection_ExtendedString_2(n.name,!0);e.TDataStd_Name.Set_1(t,r),r.delete()}if(n.color){let[r,i,a,s]=n.color,c=new e.Quantity_ColorRGBA_5(r/255,i/255,a/255,s/255);o.SetColor_3(t,c,e.XCAFDoc_ColorType.XCAFDoc_ColorSurf),c.delete()}}let s=new e.XSControl_WorkSession,c=new e.Handle_XSControl_WorkSession_2(s),l=new e.STEPCAFControl_Writer_2(c,!1),u=new e.Handle_TDocStd_Document_2(r),d=new e.Message_ProgressRange_1;l.Transfer_1(u,e.STEPControl_StepModelType.STEPControl_AsIs,null,d),d.delete();let f=ul(`_step_cfg_export`,`step`),p=l.Write(f),m=``;if(p===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+f);m=new TextDecoder().decode(t),e.FS.unlink(`/`+f)}return l.delete(),c.delete(),u.delete(),r.delete(),m}function cd(e,t){let n=new e.STEPControl_Writer_1;n.Model(!0).delete();let r=new e.Message_ProgressRange_1;for(let i of t)n.Transfer(i.shape,e.STEPControl_StepModelType.STEPControl_AsIs,!0,r);let i=ul(`_step_cfg_export`,`step`),a=n.Write(i);if(n.delete(),r.delete(),a===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+i);return e.FS.unlink(`/`+i),new TextDecoder().decode(t)}throw Error(`STEP configured export failed: writer did not complete successfully`)}function ld(e,t,n={}){let r=n.unit??`MM`,i=n.modelUnit??r,a=n.schema??5;return e.Interface_Static.SetCVal(`xstep.cascade.unit`,i),e.Interface_Static.SetCVal(`write.step.unit`,r),e.Interface_Static.SetIVal(`write.surfacecurve.mode`,!0),e.Interface_Static.SetIVal(`write.precision.mode`,0),e.Interface_Static.SetIVal(`write.step.assembly`,2),e.Interface_Static.SetIVal(`write.step.schema`,a),t.some(e=>e.name||e.color)?sd(e,t):cd(e,t)}function ud(e){return{composeTransform:t=>ju(e,t),applyComposedTransformWithHistory:(t,n,r,i)=>Mu(e,t,n,r,i),sweepPipeShell:(t,n,r)=>Pu(e,t,n,r??{}),loftAdvanced:(t,n)=>Fu(e,t,n??{}),buildExtrusionLaw:(t,n,r)=>Iu(e,t,n,r),revolveVec:(t,n,r,i)=>Lu(e,t,n,r,i),positionOnCurve:(t,n,r)=>Bu(e,t,n,r),linearPattern:(t,n,r,i)=>Ru(e,t,n,r,i),circularPattern:(t,n,r,i,a)=>zu(e,t,n,r,i,a),makeNonPlanarFace:t=>Vu(e,t),addHolesInFace:(t,n)=>Hu(e,t,n),removeHolesFromFace:t=>Uu(e,t),makeFaceOnSurface:(t,n)=>Wu(e,t,n),bsplineSurface:(t,n,r)=>Gu(e,t,n,r),triangulatedSurface:(t,n,r)=>Ku(e,t,n,r),sewAndSolidify:(t,n)=>Ju(e,t,n),fixShape:t=>Yu(e,t),fixSelfIntersection:t=>Xu(e,t),surfaceCurvature:(t,n,r)=>$u(e,t,n,r),surfaceCenterOfMass:t=>td(e,t),createDistanceQuery:t=>nd(e,t),projectEdges:(t,n,r,i)=>rd(e,t,n,r,i),draftPrism:(t,n,r,i,a,o)=>id(e,t,n,r,i,a,o),generalTransformNonOrthogonal:(t,n,r)=>Au(e,t,n,r),createXCAFDocument:t=>ad(e,t),writeXCAFToSTEP:(t,n)=>od(e,t,n??{}),exportSTEPConfigured:(t,n)=>ld(e,t,n??{})}}var dd=()=>{};function fd(e){return e}function pd(e){let t=fd(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return t}function md(e){return e}function hd(e,t){return{x:e,y:t}}function gd(e,t){let n=Math.sqrt(e*e+t*t);if(n<1e-15)throw Error(`occt: createDirection2d called with zero-length vector`);return{x:e/n,y:t/n}}function _d(e,t){return{x:e,y:t}}function vd(e,t,n,r){return{px:e,py:t,dx:n,dy:r,delete:dd}}function yd(e){return e}function bd(e){return e}function xd(e,t,n,r){return te(e,t,n,r)}function Sd(e,t,n,r){return ne(e,t,n,r)}function Cd(e,t,n,r,i,a,o){return ae(e,t,n,r,i,a,o)}function wd(e,t,n,r,i,a,o,s,c){return{__bk2d:`trimmed`,basis:ae(e,t,n,r,o,s,c),tStart:i,tEnd:a}}function Td(e){return oe(e)}function Ed(e,t){let n=e.length,r=Math.min(3,n-1),i=[],a=[];i.push(0),a.push(r+1);let o=n-r-1;for(let e=1;e<=o;e++)i.push(e/(o+1)),a.push(1);return i.push(1),a.push(r+1),{__bk2d:`bspline`,poles:[...e],knots:i,multiplicities:a,degree:r,isPeriodic:!1}}function Dd(e,t){return S(fd(e),t)}function Od(e,t){return{point:S(fd(e),t),tangent:C(fd(e),t)}}function kd(e){return w(fd(e))}function Ad(e){return ee(pd(e))}function jd(e,t,n){return{__bk2d:`trimmed`,basis:fd(e),tStart:t,tEnd:n}}function Md(e){return JSON.parse(JSON.stringify(e))}function Nd(e,t){let n=fd(e),r=w(n),i=[];for(let e=0;e<=30;e++){let a=r.first+(r.last-r.first)*e/30,[o,s]=S(n,a),[c,l]=C(n,a),u=Math.sqrt(c*c+l*l);u>1e-12?i.push([o-l/u*t,s+c/u*t]):i.push([o,s])}return Ed(i)}function Pd(e,t,n){return se(fd(e),t,n)}function Fd(e,t,n,r){return ce(fd(e),t,n,r)}function Id(e,t,n,r){return le(fd(e),t,n,r)}function Ld(e,t,n){return ue(fd(e),t,n)}function Rd(e,t,n,r,i){return de(fd(e),t,n,r,i)}function zd(e,t,n,r,i,a){return Yd(e,Hd(t,n,r,i,a))}function Bd(e,t,n){return{m:e,tx:t,ty:n,delete:dd}}function Vd(){return Bd([1,0,0,0,1,0,0,0,1],0,0)}function Hd(e,n,r,i,a){let o=Math.sqrt(r*r+i*i);if(o<1e-15)return Vd();let s=-i/o,c=r/o,l=a-1,u=[1+l*s*s,l*s*c,0,l*c*s,1+l*c*c,0,0,0,1];return Bd(u,e-t(u,0)*e-t(u,1)*n,n-t(u,3)*e-t(u,4)*n)}function Ud(e,t){return Bd([1,0,0,0,1,0,0,0,1],e,t)}function Wd(e,n,r,i,a,o,s){if(r===`axis`&&o!==void 0&&s!==void 0){let r=Math.sqrt(o*o+s*s),c=o/r,l=s/r,u=[2*c*c-1,2*c*l,0,2*c*l,2*l*l-1,0,0,0,1],d=i??e,f=a??n;return Bd(u,d-t(u,0)*d-t(u,1)*f,f-t(u,3)*d-t(u,4)*f)}return Bd([-1,0,0,0,-1,0,0,0,1],2*e,2*n)}function Gd(e,t,n){let r=Math.cos(e),i=Math.sin(e);return Bd([r,-i,0,i,r,0,0,0,1],t-r*t+i*n,n-i*t-r*n)}function Kd(e,t,n){return Bd([e,0,0,0,e,0,0,0,1],t*(1-e),n*(1-e))}function qd(e,t,n){e.tx=t,e.ty=n}function Jd(e,n){let r=e.m,i=n.m,a=e=>t(r,e),o=e=>t(i,e);e.m=[a(0)*o(0)+a(1)*o(3)+a(2)*o(6),a(0)*o(1)+a(1)*o(4)+a(2)*o(7),a(0)*o(2)+a(1)*o(5)+a(2)*o(8),a(3)*o(0)+a(4)*o(3)+a(5)*o(6),a(3)*o(1)+a(4)*o(4)+a(5)*o(7),a(3)*o(2)+a(4)*o(5)+a(5)*o(8),a(6)*o(0)+a(7)*o(3)+a(8)*o(6),a(6)*o(1)+a(7)*o(4)+a(8)*o(7),a(6)*o(2)+a(7)*o(5)+a(8)*o(8)];let s=e.tx,c=e.ty,l=Number(n.tx)||0,u=Number(n.ty)||0;e.tx=a(0)*l+a(1)*u+s,e.ty=a(3)*l+a(4)*u+c}function Yd(e,n){let r=fd(e),i=n.m??[1,0,0,0,1,0,0,0,1],a=Number(n.tx)||0,o=Number(n.ty)||0,s=t(i,0),c=t(i,1),l=t(i,3),u=t(i,4);if(Math.abs(s-1)<1e-12&&Math.abs(u-1)<1e-12&&Math.abs(c)<1e-12&&Math.abs(l)<1e-12)return se(r,a,o);let d=w(r),f=[];for(let e=0;e<=20;e++){let[t,n]=S(r,d.first+(d.last-d.first)*e/20);f.push([s*t+c*n+a,l*t+u*n+o])}return oe(f)}function Xd(e,t,n){let r=fe(fd(e),fd(t),n),i=r.segments.map(e=>Object.assign(e,{delete(){}}));return{points:r.points,segments:i}}function Zd(e,t,n){let r=fd(e),i=w(r);if(r.__bk2d===`line`){let e=t-r.ox,a=n-r.oy,o=Math.max(i.first,Math.min(i.last,e*r.dx+a*r.dy)),[s,c]=S(r,o);return{param:o,distance:Math.sqrt((s-t)**2+(c-n)**2)}}if(r.__bk2d===`circle`){let e=Math.atan2(n-r.cy,t-r.cx),i=r.sense?e:-e;for(;i<0;)i+=2*Math.PI;for(;i>2*Math.PI;)i-=2*Math.PI;let[a,o]=S(r,i);return{param:i,distance:Math.sqrt((a-t)**2+(o-n)**2)}}if(!isFinite(i.first)||!isFinite(i.last))return null;let a=i.first,o=1/0,s=(i.last-i.first)/200;for(let e=0;e<=200;e++){let c=i.first+e*s,[l,u]=S(r,c),d=(l-t)**2+(u-n)**2;d<o&&(o=d,a=c)}for(let e=0;e<10;e++){let[e,o]=S(r,a),[s,c]=C(r,a),l=(e-t)*s+(o-n)*c,u=s*s+c*c;if(u<1e-20)break;let d=l/u,f=Math.max(i.first,Math.min(i.last,a-d));if(Math.abs(f-a)<1e-14)break;a=f}let[c,l]=S(r,a);return{param:a,distance:Math.sqrt((c-t)**2+(l-n)**2)}}function Qd(e,t,n,r,i,a){let o=fd(e),s=fd(t),c=n,l=i,u=1/0;for(let e=0;e<=50;e++){let t=n+(r-n)*e/50,[d,f]=S(o,t);for(let e=0;e<=50;e++){let n=i+(a-i)*e/50,[r,o]=S(s,n),p=(r-d)**2+(o-f)**2;p<u&&(u=p,c=t,l=n)}}let d=c,f=l;for(let c=0;c<20;c++){let[c,l]=S(s,f),u=Zd(e,c,l);if(u){let e=Math.max(n,Math.min(r,u.param)),t=Math.abs(e-d)<1e-12;if(d=e,t)break}let[p,m]=S(o,d),h=Zd(t,p,m);if(h){let e=Math.max(i,Math.min(a,h.param)),t=Math.abs(e-f)<1e-12;if(f=e,t)break}}let[p,m]=S(o,d),[h,g]=S(s,f);return Math.sqrt((h-p)**2+(g-m)**2)}function $d(e,n,r,i){let a=fd(e),o=w(a),s=Math.max(3,{C0:1,C1:2,C2:3,C3:4}[r]??4),c=Math.max(100,i*10),l=[],u=1/0;for(let e=0;e<3&&u>n;e++){l=[];for(let e=0;e<=c;e++){let t=o.first+(o.last-o.first)*e/c;l.push(S(a,t))}u=0;for(let e=0;e<c;e++){let[n,r]=S(a,o.first+(o.last-o.first)*(e+.5)/c),i=t(l,e),s=t(l,e+1),d=(i[0]+s[0])/2,f=(i[1]+s[1])/2,p=Math.sqrt((n-d)**2+(r-f)**2);p>u&&(u=p)}u>n&&(c=Math.min(c*2,500))}return Ed(l,{degMax:s})}function ef(e){let n=pd(e);if(n.__bk2d===`bezier`)return[e];if(n.__bk2d!==`bspline`)return ef($d(e,1e-6,`C2`,10));let r=w(fd(e)),i=r.first,a=r.last,o=[];for(let e of n.knots)e>i+1e-12&&e<a-1e-12&&o.push(e);let s=[i,...o,a],c=[];for(let e=0;e<s.length-1;e++){let r=t(s,e),i=t(s,e+1),a=i-r;if(a<1e-15)continue;let o=S(n,r),l=S(n,i),u=C(n,r),d=C(n,i),f=a/3,p={__bk2d:`bezier`,poles:[o,[o[0]+u[0]*f,o[1]+u[1]*f],[l[0]-d[0]*f,l[1]-d[1]*f],l]};c.push(p)}return c.length>0?c:[e]}function tf(){return Ce()}function nf(e,t,n){we(md(e),fd(t),n)}function rf(e){let t=md(e);return{xMin:t.xMin,yMin:t.yMin,xMax:t.xMax,yMax:t.yMax}}function af(e,t){let n=md(e),r=md(t);n.xMin=Math.min(n.xMin,r.xMin),n.yMin=Math.min(n.yMin,r.yMin),n.xMax=Math.max(n.xMax,r.xMax),n.yMax=Math.max(n.yMax,r.yMax)}function of(e,t){let n=md(e),r=md(t);return n.xMax<r.xMin||r.xMax<n.xMin||n.yMax<r.yMin||r.yMax<n.yMin}function sf(e,t,n){let r=md(e);return t<r.xMin||t>r.xMax||n<r.yMin||n>r.yMax}function cf(e){let t=pd(e);return t.__bk2d===`circle`?{cx:t.cx,cy:t.cy,radius:t.radius,isDirect:t.sense}:null}function lf(e){let t=pd(e);return t.__bk2d===`ellipse`?{majorRadius:t.majorRadius,minorRadius:t.minorRadius,xAxisAngle:t.xDirAngle,isDirect:t.sense}:null}function uf(e){let t=pd(e);return t.__bk2d===`bezier`?[...t.poles]:null}function df(e){let t=pd(e);return t.__bk2d===`bezier`?t.poles.length-1:null}function ff(e){let t=pd(e);return t.__bk2d===`bspline`?{poles:[...t.poles],knots:[...t.knots],multiplicities:[...t.multiplicities],degree:t.degree,isPeriodic:t.isPeriodic}:null}function pf(e){return xe(fd(e))}function mf(e){return Se(e)}function hf(e,t){let n=fd(e),r=w(n),i=[r.first,...[...t].sort((e,t)=>e-t),r.last],a=[];for(let e=0;e<i.length-1;e++)a.push({__bk2d:`trimmed`,basis:n,tStart:i[e],tEnd:i[e+1]});return a}function gf(e,t,n){let r=new e.gp_Pnt_3(t[0],t[1],t[2]),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.BRepBuilderAPI_MakeEdge_3(r,i),o=a.Edge();return a.delete(),r.delete(),i.delete(),o}function _f(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.GC_MakeArcOfCircle_4(i,a,o).Value().get(),c=new e.Handle_Geom_Curve_2(s),l=new e.BRepBuilderAPI_MakeEdge_24(c),u=l.Edge();return l.delete(),c.delete(),i.delete(),a.delete(),o.delete(),u}function vf(e,n){let r=new e.TColgp_Array1OfPnt_2(1,n.length),i=new e.gp_Pnt_1;for(let e=0;e<n.length;e++){let a=t(n,e);i.SetCoord_2(a[0],a[1],a[2]),r.SetValue_1(e+1,i)}i.delete();let a=new e.GeomAPI_PointsToBSpline_2(r,3,8,e.GeomAbs_Shape.GeomAbs_C2,1e-6);if(r.delete(),!a.IsDone())throw a.delete(),Error(`Interpolation failed — GeomAPI_PointsToBSpline did not converge`);let o=a.Curve(),s=new e.Handle_Geom_Curve_2(o.get()),c=new e.BRepBuilderAPI_MakeEdge_24(s),l=c.Edge();return c.delete(),a.delete(),l}function yf(e,n,r,i,a){let o=fd(n),s=[i[1]*a[2]-i[2]*a[1],i[2]*a[0]-i[0]*a[2],i[0]*a[1]-i[1]*a[0]],c=(e,t)=>[r[0]+e*a[0]+t*s[0],r[1]+e*a[1]+t*s[1],r[2]+e*a[2]+t*s[2]];if(o.__bk2d===`line`)return gf(e,c(o.ox,o.oy),c(o.ox+o.dx*o.len,o.oy+o.dy*o.len));if(o.__bk2d===`circle`||o.__bk2d===`trimmed`){let t=o;for(;t.__bk2d===`trimmed`;)t=t.basis;if(t.__bk2d===`circle`){let n=t,r=c(n.cx,n.cy),a=n.sense?i:[-i[0],-i[1],-i[2]];if(o.__bk2d===`circle`){let t=new e.gp_Pnt_3(r[0],r[1],r[2]),i=new e.gp_Dir_5(a[0],a[1],a[2]),o=new e.gp_Ax2_4(t,i),s=new e.gp_Circ_2(o,n.radius),c=new e.BRepBuilderAPI_MakeEdge_8(s),l=c.Edge();return c.delete(),s.delete(),o.delete(),i.delete(),t.delete(),l}let s=w(o),[l,u]=S(o,s.first),[d,f]=S(o,(s.first+s.last)/2),[p,m]=S(o,s.last);return _f(e,c(l,u),c(d,f),c(p,m))}}if(o.__bk2d===`bezier`||o.__bk2d===`bspline`){let n=o.poles.map(([e,t])=>c(e,t));return n.length===2?gf(e,t(n,0),t(n,1)):vf(e,n)}let l=w(o),u=[];for(let e=0;e<=60;e++){let[t,n]=S(o,l.first+(l.last-l.first)*e/60);u.push(c(t,n))}return vf(e,u)}function bf(e,t,n){let r=fd(t),i=w(r),a=[];for(let e=0;e<=60;e++){let[t,o]=S(r,i.first+(i.last-i.first)*e/60),s=n.get().Value(t,o);a.push([s.X(),s.Y(),s.Z()]),s.delete()}return vf(e,a)}function xf(e,t){return e.BRep_Tool.Surface_2(t)}function Sf(e,t,n){let r=new e.BRepAdaptor_Curve2d_2(t,n),i=Number(r.FirstParameter()),a=Number(r.LastParameter()),o=[];for(let e=0;e<=30;e++){let t=i+(a-i)*e/30,n=r.Value(t);o.push([n.X(),n.Y()]),n.delete()}return r.delete(),Ed(o)}function Cf(e,t){e.BRepLib.BuildCurves3d_2(t)}function wf(e,t,n,r){let i=new e.ShapeFix_Wire_2(t,n,r);i.FixEdgeCurves();let a=i.Wire();return i.delete(),a}function Tf(e,t,n={}){let{order:r=3,nbPtsOnCur:i=15,nbIter:a=2,tol3d:o=1e-5,tol2d:s=1e-4,maxDeg:c=8,maxSeg:l=9}=n,u=new e.BRepOffsetAPI_MakeFilling(r,i,a,!1,o,s,.01,.1,c,l);for(let n=0;n<t.length;n++){let r=Yo(e,t[n],`edge`);for(let t of r)u.Add_1(t,e.GeomAbs_Shape.GeomAbs_C0,n===0)}let d=new e.Message_ProgressRange_1;u.Build(d);let f=u.Shape();return u.delete(),d.delete(),f}function Ef(e){return{wrapCurve2dHandle:e=>yd(e),createCurve2dAdaptor:e=>bd(e),createPoint2d:(e,t)=>hd(e,t),createDirection2d:(e,t)=>gd(e,t),createVector2d:(e,t)=>_d(e,t),createAxis2d:(e,t,n,r)=>vd(e,t,n,r),makeLine2d:(e,t,n,r)=>xd(e,t,n,r),makeCircle2d:(e,t,n,r)=>Sd(e,t,n,r),makeArc2dThreePoints:(e,t,n,r,i,a)=>re(e,t,n,r,i,a),makeArc2dTangent:(e,t,n,r,i,a)=>ie(e,t,n,r,i,a),makeEllipse2d:(e,t,n,r,i,a,o)=>Cd(e,t,n,r,i,a,o),makeEllipseArc2d:(e,t,n,r,i,a,o,s,c)=>wd(e,t,n,r,i,a,o,s,c),makeBezier2d:e=>Td(e),makeBSpline2d:(e,t)=>Ed(e,t),evaluateCurve2d:(e,t)=>Dd(e,t),evaluateCurve2dD1:(e,t)=>Od(e,t),getCurve2dBounds:e=>kd(e),getCurve2dType:e=>Ad(e),trimCurve2d:(e,t,n)=>jd(e,t,n),reverseCurve2d:e=>{},copyCurve2d:e=>Md(e),offsetCurve2d:(e,t)=>Nd(e,t),translateCurve2d:(e,t,n)=>Pd(e,t,n),rotateCurve2d:(e,t,n,r)=>Fd(e,t,n,r),scaleCurve2d:(e,t,n,r)=>Id(e,t,n,r),mirrorCurve2dAtPoint:(e,t,n)=>Ld(e,t,n),mirrorCurve2dAcrossAxis:(e,t,n,r,i)=>Rd(e,t,n,r,i),affinityTransform2d:(e,t,n,r,i,a)=>zd(e,t,n,r,i,a),createIdentityGTrsf2d:()=>Vd(),createAffinityGTrsf2d:(e,t,n,r,i)=>Hd(e,t,n,r,i),createTranslationGTrsf2d:(e,t)=>Ud(e,t),createMirrorGTrsf2d:(e,t,n,r,i,a,o)=>Wd(e,t,n,r,i,a,o),createRotationGTrsf2d:(e,t,n)=>Gd(e,t,n),createScaleGTrsf2d:(e,t,n)=>Kd(e,t,n),setGTrsf2dTranslationPart:(e,t,n)=>{qd(e,t,n)},multiplyGTrsf2d:(e,t)=>{Jd(e,t)},transformCurve2dGeneral:(e,t)=>Yd(e,t),intersectCurves2d:(e,t,n)=>Xd(e,t,n),projectPointOnCurve2d:(e,t,n)=>Zd(e,t,n),distanceBetweenCurves2d:(e,t,n,r,i,a)=>Qd(e,t,n,r,i,a),approximateCurve2dAsBSpline:(e,t,n,r)=>$d(e,t,n,r),decomposeBSpline2dToBeziers:e=>ef(e),createBoundingBox2d:()=>tf(),addCurveToBBox2d:(e,t,n)=>{nf(e,t,n)},getBBox2dBounds:e=>rf(e),mergeBBox2d:(e,t)=>{af(e,t)},isBBox2dOut:(e,t)=>of(e,t),isBBox2dOutPoint:(e,t,n)=>sf(e,t,n),getCurve2dCircleData:e=>cf(e),getCurve2dEllipseData:e=>lf(e),getCurve2dBezierPoles:e=>uf(e),getCurve2dBezierDegree:e=>df(e),getCurve2dBSplineData:e=>ff(e),serializeCurve2d:e=>pf(e),deserializeCurve2d:e=>mf(e),splitCurve2d:(e,t)=>hf(e,t),liftCurve2dToPlane:(t,n,r,i)=>yf(e,t,n,r,i),buildEdgeOnSurface:(t,n)=>bf(e,t,n),extractSurfaceFromFace:t=>xf(e,t),extractCurve2dFromEdge:(t,n)=>Sf(e,t,n),buildCurves3d:t=>{Cf(e,t)},fixWireOnFace:(t,n,r)=>wf(e,t,n,r),fillSurface:(t,n)=>Tf(e,t,n)}}function Df(){let e=e=>()=>{throw new c(`${e} is only available with the brepkit kernel`)};return{export3MF:e(`export3MF`),exportGLB:e(`exportGLB`),exportOBJ:e(`exportOBJ`),exportPLY:e(`exportPLY`),import3MF:e(`import3MF`),importOBJ:e(`importOBJ`),importGLB:e(`importGLB`),filletVariable:e(`filletVariable`),helicalSweep:e(`helicalSweep`),sweepWithOptions:e(`sweepWithOptions`),defeature:e(`defeature`),detectSmallFeatures:e(`detectSmallFeatures`),recognizeFeatures:e(`recognizeFeatures`),meshBoolean:(()=>{throw new c(`meshBoolean is only available with the brepkit kernel`)}),edgeToFaceMap:e(`edgeToFaceMap`),sharedEdges:e(`sharedEdges`),adjacentFaces:e(`adjacentFaces`),curveDegreeElevate:e(`curveDegreeElevate`),curveKnotInsert:e(`curveKnotInsert`),curveKnotRemove:e(`curveKnotRemove`),curveSplit:e(`curveSplit`),approximateSurfaceLspia:e(`approximateSurfaceLspia`),untrimFace:e(`untrimFace`),mergeCoincidentVertices:e(`mergeCoincidentVertices`),removeDegenerateEdges:e(`removeDegenerateEdges`),fixFaceOrientations:e(`fixFaceOrientations`),classifyPointRobust:e(`classifyPointRobust`),classifyPointWinding:e(`classifyPointWinding`),executeBatch:e(`executeBatch`),checkpoint:e(`checkpoint`),checkpointCount:e(`checkpointCount`),restoreCheckpoint:e(`restoreCheckpoint`),discardCheckpoint:e(`discardCheckpoint`)}}function Of(e){return{draft:(t,n,r,i,a)=>Ou(e,t,n,r,i,a,[],1).shape}}var kf=class{oc;kernelId=`occt`;capabilities=a;constructor(e){this.oc=e,Object.assign(this,xs(e),ws(e),Us(e),Is(e),hc(e),kc(e),Gc(e),il(e),cl(e),_l(e),Wo(e),is(e),Yl(e),Ql(e),tu(e),au(e),ku(e),ud(e),Ef(e),Of(e),Df())}},Af=()=>{};function jf(e){return typeof e==`object`&&!!e&&e.__brepkit}function Mf(e,t){return{__brepkit:!0,type:e,id:t,delete:Af,HashCode(e){return t%e},IsNull(){return!1}}}function O(e){return Mf(`solid`,e)}function Nf(e){return Mf(`face`,e)}function Pf(e){return Mf(`edge`,e)}function Ff(e){return Mf(`wire`,e)}function If(e){return Mf(`shell`,e)}function Lf(e){let t=Mf(`compound`,e);return $f.has(e)?{...t,delete:()=>$f.delete(e)}:t}function Rf(e){return Mf(`vertex`,e)}function k(e,t){if(!jf(e))throw Error(`brepkit: expected a BrepkitHandle, got `+typeof e);if(t&&e.type!==t)throw Error(`brepkit: expected ${t} handle, got ${e.type}`);return e.id}function A(e){return Array.from(e)}function zf(e,t){if(!jf(e))throw Error(`brepkit: expected a BrepkitHandle, got `+typeof e);if(e.type!==`solid`)throw Error(`brepkit: ${t} requires a solid, got ${e.type}. Consider using makeCompound() to combine shapes first.`);return e.id}function Bf(e,t,n){if(!jf(t))throw Error(`brepkit: expected a BrepkitHandle, got `+typeof t);if(t.type===`solid`)return[t.id];if(t.type===`compound`){let r=A(e.getCompoundSolids(t.id));if(r.length>0)return r;throw Error(`brepkit: ${n} received a compound with no solids.`)}throw Error(`brepkit: ${n} requires a solid or compound of solids, got ${t.type}.`)}function Vf(e,t,n,r,i,a){let o=e-r,s=t-i,c=n-a;return Math.sqrt(o*o+s*s+c*c)}function Hf(e){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}function Uf(e,t,n){return[1,0,0,e,0,1,0,t,0,0,1,n,0,0,0,1]}function Wf(e,t){if(!Array.isArray(e)||e.length<3)return t;let[n,r,i]=e;return typeof n==`number`&&typeof r==`number`&&typeof i==`number`&&Number.isFinite(n)&&Number.isFinite(r)&&Number.isFinite(i)?[n,r,i]:t}function Gf(e,t=[0,0,1],n=[0,0,0]){let r=Wf(t,[0,0,1]),i=r[0]===0&&r[1]===0&&r[2]===0?[0,0,1]:r,a=Wf(n,[0,0,0]),o=e*Math.PI/180,s=Math.cos(o),c=Math.sin(o),l=1-s,u=Math.sqrt(i[0]**2+i[1]**2+i[2]**2),[d,f,p]=[i[0]/u,i[1]/u,i[2]/u],m=l*d*d+s,h=l*d*f-c*p,g=l*d*p+c*f,_=l*f*d+c*p,v=l*f*f+s,y=l*f*p-c*d,b=l*p*d-c*f,x=l*p*f+c*d,S=l*p*p+s,[C,w,ee]=a;return[m,h,g,C-(m*C+h*w+g*ee),_,v,y,w-(_*C+v*w+y*ee),b,x,S,ee-(b*C+x*w+S*ee),0,0,0,1]}function Kf(e,t){let[n,r,i]=Wf(e,[0,0,0]);return[t,0,0,n*(1-t),0,t,0,r*(1-t),0,0,t,i*(1-t),0,0,0,1]}function qf(e,n){let r=n=>t(e,n);return[r(0),r(1),r(2),n[0],r(3),r(4),r(5),n[1],r(6),r(7),r(8),n[2],0,0,0,1]}function Jf(e,t){let[n,r,i]=e,a=Math.sqrt(t[0]**2+t[1]**2+t[2]**2),o=t[0]/a,s=t[1]/a,c=t[2]/a,l=2*(n*o+r*s+i*c);return[1-2*o*o,-2*o*s,-2*o*c,l*o,-2*s*o,1-2*s*s,-2*s*c,l*s,-2*c*o,-2*c*s,1-2*c*c,l*c,0,0,0,1]}function Yf(e,t){let n=Array(16).fill(0);for(let r=0;r<4;r++)for(let i=0;i<4;i++)for(let a=0;a<4;a++)n[r*4+i]=n[r*4+i]+e[r*4+a]*t[a*4+i];return n}var Xf=.01,Zf=9e5;function Qf(){return Zf++}var $f=new Map,ep=new Set;function tp(e,t){ep.has(e)||(ep.add(e),console.warn(`brepkit: ${t}`))}function np(e){return e.optimisation!==void 0||e.strategy!==void 0||e.fuzzyValue!==void 0}function rp(e){return e}function ip(e){let t=e;for(;t.__bk2d===`trimmed`;)t=t.basis;return t}function ap(e){return e}function op(e,t){if(typeof t!=`function`)return t;let n;for(let r of e){let e;try{e=t(r)}catch{throw Error(`brepkit does not support variable draft with multiple distinct angles. Use the OCCT kernel for per-face angle variation, or use a uniform angle.`)}if(n===void 0)n=e;else if(e!==n)throw Error(`brepkit does not support variable draft with multiple distinct angles. Use the OCCT kernel for per-face angle variation, or use a uniform angle.`)}if(n===void 0)throw Error(`draft: no faces provided`);return n}function sp(e,t,n){let r=$f.get(t);return r?r.flatMap(t=>t.type===n?[t]:hp(e,t,n)):n===`solid`?A(e.getCompoundSolids(t)).map(O):n===`face`||n===`edge`||n===`vertex`||n===`wire`?A(e.getCompoundSolids(t)).map(O).flatMap(t=>hp(e,t,n)):[]}function cp(e,t,n,r){switch(r){case`solid`:return[t];case`shell`:return A(e.getSolidShells(n)).map(If);case`face`:return A(e.getSolidFaces(n)).map(Nf);case`edge`:return A(e.getSolidEdges(n)).map(Pf);case`vertex`:return A(e.getSolidVertices(n)).map(Rf);case`wire`:return A(e.getSolidFaces(n)).flatMap(t=>A(e.getFaceWires(t)).map(Ff));default:return[]}}function lp(e,t,n){let r=A(e.getShellFaces(t)).map(Nf),i=new Set,a=[];for(let t of r)for(let r of hp(e,t,n)){let e=k(r);i.has(e)||(i.add(e),a.push(r))}return a}function up(e,t,n,r){return r===`shell`?[t]:r===`face`?A(e.getShellFaces(n)).map(Nf):r===`edge`||r===`vertex`?lp(e,n,r):[]}function dp(e,t,n,r){return r===`face`?[t]:r===`edge`?A(e.getFaceEdges(n)).map(Pf):r===`vertex`?A(e.getFaceVertices(n)).map(Rf):r===`wire`?A(e.getFaceWires(n)).map(Ff):[]}function fp(e,n){let r=A(e.getWireEdges(n)),i=new Set,a=[];for(let n of r){let r=e.getEdgeVertices(n),o=[[t(r,0),t(r,1),t(r,2)],[t(r,3),t(r,4),t(r,5)]];for(let[t,n,r]of o){let o=`${t},${n},${r}`;i.has(o)||(i.add(o),a.push(Rf(e.makeVertex(t,n,r))))}}return a}function pp(e,t,n,r){return r===`wire`?[t]:r===`edge`?A(e.getWireEdges(n)).map(Pf):r===`vertex`?fp(e,n):[]}function mp(e,n,r,i){if(i===`edge`)return[n];if(i===`vertex`){let n=e.getEdgeVertices(r),i=e.makeVertex(t(n,0),t(n,1),t(n,2)),a=e.makeVertex(t(n,3),t(n,4),t(n,5));return[Rf(i),Rf(a)]}return[]}function hp(e,t,n){let r=k(t);switch(t.type){case`compound`:return sp(e,r,n);case`solid`:return cp(e,t,r,n);case`shell`:return up(e,t,r,n);case`face`:return dp(e,t,r,n);case`wire`:return pp(e,t,r,n);case`edge`:return mp(e,t,r,n);default:return[]}}function gp(e,t,n){if(Array.isArray(t))for(let e of t)n(e)}function _p(e,t){if(jf(t))return t.type;throw Error(`brepkit: cannot determine shape type of non-brepkit handle`)}function vp(e,t,n){return jf(t)&&jf(n)&&t.id===n.id&&t.type===n.type}function yp(e,t,n){return vp(e,t,n)}function bp(e,t,n){return t}function xp(e,t,n){return jf(t)?t.id%n:0}function Sp(e,t){return!t||!jf(t)}function Cp(e,t){let n=k(t);return e.getShapeOrientation(n)}function wp(e,t){let n=zf(t,`edgeToFaceMap`);return e.edgeToFaceMap(n)}function Tp(e,t,n){let r=k(t,`face`),i=k(n,`face`);return Array.from(e.sharedEdges(r,i)).map(e=>Pf(e))}function Ep(e,t,n){let r=zf(t,`adjacentFaces`),i=k(n,`face`);return Array.from(e.adjacentFaces(r,i)).map(e=>Nf(e))}function Dp(e,t){let n=t;return n.type===`face`?[n.id]:n.type===`solid`?A(e.getSolidFaces(n.id)):n.type===`shell`?A(e.getShellFaces(n.id)):[]}function Op(e,t,n){let r=t.flatMap(t=>Dp(e,t)),i=n??1e-7;try{return If(e.weldShellsAndFaces(r,i))}catch(e){console.warn(`brepkit: weldShellsAndFaces failed, falling back to sewFaces:`,e)}return If(e.sewFaces(r,i))}function kp(e){return{iterShapes:(t,n)=>hp(e,t,n),iterShapeList:(t,n)=>{gp(e,t,n)},shapeType:t=>_p(e,t),isSame:(t,n)=>vp(e,t,n),isEqual:(t,n)=>yp(e,t,n),downcast:(t,n)=>bp(e,t,n),copyShape:t=>bp(e,t),hashCode:(t,n)=>xp(e,t,n),isNull:t=>Sp(e,t),shapeOrientation:t=>Cp(e,t),edgeToFaceMap:t=>wp(e,t),sharedEdges:(t,n)=>Tp(e,t,n),adjacentFaces:(t,n)=>Ep(e,t,n),sew:(t,n)=>Op(e,t,n)}}function Ap(e,t){return n(e.getVertexPosition(k(t,`vertex`)))}function jp(e,t){return e.getSurfaceType(k(t,`face`))}function Mp(e,n){let r=e.getSurfaceDomain(k(n,`face`));return{uMin:t(r,0),uMax:t(r,1),vMin:t(r,2),vMax:t(r,3)}}function Np(e,t){return Ff(e.getFaceOuterWire(k(t,`face`)))}function Pp(e,t,r,i){return n(e.evaluateSurfaceNormal(k(t,`face`),r,i))}function Fp(e,t,r,i){return n(e.evaluateSurface(k(t,`face`),r,i))}function Ip(e,n,r){try{let i=e.projectPointOnSurface(k(n,`face`),r[0],r[1],r[2]);return[t(i,0),t(i,1)]}catch(e){return console.warn(`brepkit: uvFromPoint failed:`,e),null}}function Lp(e,t,r){return n(e.projectPointOnSurface(k(t,`face`),r[0],r[1],r[2]),2)}function Rp(e,r,i){let a=r,o,s=i;if(a.type===`wire`){let n=A(e.getWireEdges(a.id));o=t(n,n.length-1);let r=0;for(let a of n){let n=e.getEdgeCurveParameters(a),c=t(n,1)-t(n,0);if(i<=r+c||a===o){o=a,s=Math.min(t(n,0)+(i-r),t(n,1));break}r+=c}}else o=k(r,`edge`);let c=e.evaluateEdgeCurveD1(o,s);return{point:n(c,0),tangent:n(c,3)}}function zp(e,n){let r=n;if(r.type===`wire`){let n=A(e.getWireEdges(r.id));if(n.length===0)return[0,0];let i=0;for(let r of n){let n=e.getEdgeCurveParameters(r);i+=t(n,1)-t(n,0)}return[0,i]}let i=e.getEdgeCurveParameters(k(n,`edge`));return[t(i,0),t(i,1)]}function Bp(e,r,i){let a=r;if(a.type===`wire`){let r=A(e.getWireEdges(a.id)),o=0;for(let a of r){let s=e.getEdgeCurveParameters(a),c=t(s,1)-t(s,0);if(i<=o+c||a===r[r.length-1]){let r=t(s,0)+(i-o);return n(e.evaluateEdgeCurve(a,Math.min(r,t(s,1))))}o+=c}return n(e.evaluateEdgeCurve(t(r,0),i))}return n(e.evaluateEdgeCurve(k(r,`edge`),i))}function Vp(e,r){let i=r;if(i.type===`wire`){let r=A(e.getWireEdges(i.id));if(r.length===0)return!1;if(r.length===1)return Hp(e.getEdgeVertices(t(r,0)));let a=[];for(let t of r){let r=e.getEdgeVertices(t);a.push(n(r,0)),a.push(n(r,3))}let o=[];for(let e of a){let t=o.findIndex(t=>Vf(t[0],t[1],t[2],e[0],e[1],e[2])<1e-7);t>=0?o.splice(t,1):o.push(e)}return o.length===0}return Hp(e.getEdgeVertices(k(r,`edge`)))}function Hp(e){return Vf(t(e,0),t(e,1),t(e,2),t(e,3),t(e,4),t(e,5))<1e-7}function Up(e,t){let n=t;try{if(n.type===`edge`||n.type===`wire`&&A(e.getWireEdges(n.id)).length===1)return Vp(e,t)}catch{}return!1}function Wp(e,t){try{if(Up(e,t)){let n=zp(e,t);return n[1]-n[0]}}catch{}return 0}function Gp(e,t){if(t.type===`wire`){let n=hp(e,t,`edge`)[0];return n?e.getEdgeCurveType(k(n,`edge`)):`LINE`}return e.getEdgeCurveType(k(t,`edge`))}function Kp(e,t,n){let r=k(t,`edge`);return Pf(e.curveDegreeElevate(r,n))}function qp(e,t,n,r){let i=k(t,`edge`);return Pf(e.curveKnotInsert(i,n,r))}function Jp(e,t,n,r){let i=k(t,`edge`);return Pf(e.curveKnotRemove(i,n,r))}function Yp(e,n,r){let i=k(n,`edge`),a=e.curveSplit(i,r);return[Pf(t(a,0)),Pf(t(a,1))]}function Xp(e,t,n,r,i,a,o,s,c,l){return Nf(e.approximateSurfaceLspia(t,n,r,i,a,o,s,c,l))}function Zp(e,t,n,r){let i=k(t,`face`);return Nf(e.untrimFace(i,n,r))}function Qp(e,t){return t}function $p(e,t){let r=km(e,t);return!r||r.controlPoints.length<6?null:n(r.controlPoints,r.controlPoints.length-6)}function em(e,t){if(jf(t)&&t.type===`face`){let n=t.id,r=JSON.parse(e.getAnalyticSurfaceParams(n));if(r.type===`cylinder`)return{radius:r.radius,isDirect:!0}}return null}function tm(e,t){let n=JSON.parse(e.getAnalyticSurfaceParams(k(t,`face`))),r=n.type===`cylinder`?n.origin:n.type===`cone`?n.apex:null;if(!r||!n.axis)return null;let[i,a,o]=r,[s,c,l]=n.axis,u=Math.hypot(s,c,l);return u<1e-12?null:{origin:[i,a,o],direction:[s/u,c/u,l/u]}}function nm(e,t){return t}function rm(e,n,r,i,a){a!==void 0&&tp(`classify-tolerance`,`classifyPointOnFace() tolerance parameter is not supported; brepkit uses domain-based classification.`);let o=k(n,`face`),s=e.getSurfaceDomain(o);return r<t(s,0)||r>t(s,1)||i<t(s,2)||i>t(s,3)?`out`:`in`}function im(e,t,n,r){let i=zf(t,`classifyPointRobust`);return e.classifyPointRobust(i,n[0],n[1],n[2],r)}function am(e,t,n,r){let i=zf(t,`classifyPointWinding`);return e.classifyPointWinding(i,n[0],n[1],n[2],r)}function om(e,t,n,r){let i=zf(t,`detectSmallFeatures`);return Array.from(e.detectSmallFeatures(i,n,r)).map(e=>Nf(e))}function sm(e,t,n){let r=zf(t,`recognizeFeatures`);return e.recognizeFeatures(r,n)}function cm(e,t,r,i,a){let o=k(t),[s,c,l]=r,[u,d,f]=i,[p,m,h]=a??[1,0,0],g=.1;try{let t=e.boundingBox(o),[r,i,a]=n(t,0),[s,c,l]=n(t,3),u=Vf(r,i,a,s,c,l);u>0&&(g=Math.max(u*.001,1e-6))}catch{}let _=e.projectEdges(o,s,c,l,u,d,f,p,m,h,!0,g),v;try{v=JSON.parse(_)}catch{v={visible:[],hidden:[]}}let y=t=>{let n=[];for(let r of t)for(let t=0;t+3<r.length;t+=2){let i=r[t],a=r[t+1],o=r[t+2],s=r[t+3];i===void 0||a===void 0||o===void 0||s===void 0||i===o&&a===s||n.push(Pf(e.makeLineEdge(i,a,0,o,s,0)))}let r=Qf();return $f.set(r,n),Lf(r)},b=()=>{let e=Qf();return $f.set(e,[]),Lf(e)};return{visible:{outline:y(v.visible),smooth:b(),sharp:b()},hidden:{outline:y(v.hidden),smooth:b(),sharp:b()}}}function lm(e,t){let n=k(t,`edge`),r=e.getNurbsCurveData(n);if(!r)return null;let i=JSON.parse(r);return{degree:i.degree,poles:i.controlPoints,weights:i.weights,knots:i.distinctKnots,multiplicities:i.multiplicities,isPeriodic:i.periodic,isRational:i.rational}}function um(e,t){return JSON.parse(e.getNurbsSurfaceDataParity(k(t,`face`)))}function dm(e){return{vertexPosition:t=>Ap(e,t),surfaceType:t=>jp(e,t),uvBounds:t=>Mp(e,t),outerWire:t=>Np(e,t),surfaceNormal:(t,n,r)=>Pp(e,t,n,r),pointOnSurface:(t,n,r)=>Fp(e,t,n,r),uvFromPoint:(t,n)=>Ip(e,t,n),projectPointOnFace:(t,n)=>Lp(e,t,n),curveTangent:(t,n)=>Rp(e,t,n),curveParameters:t=>zp(e,t),curvePointAtParam:(t,n)=>Bp(e,t,n),curveIsClosed:t=>Vp(e,t),curveIsPeriodic:t=>Up(e,t),curvePeriod:t=>Wp(e,t),curveType:t=>Gp(e,t),curveDegreeElevate:(t,n)=>Kp(e,t,n),curveKnotInsert:(t,n,r)=>qp(e,t,n,r),curveKnotRemove:(t,n,r)=>Jp(e,t,n,r),curveSplit:(t,n)=>Yp(e,t,n),approximateSurfaceLspia:(t,n,r,i,a,o,s,c,l)=>Xp(e,t,n,r,i,a,o,s,c,l),untrimFace:(t,n,r)=>Zp(e,t,n,r),createCurveAdaptor:t=>Qp(e,t),getBezierPenultimatePole:t=>$p(e,t),getSurfaceCylinderData:t=>em(e,t),getSurfaceAxis:t=>tm(e,t),reverseSurfaceU:t=>nm(e,t),classifyPointOnFace:(t,n,r,i)=>rm(e,t,n,r,i),classifyPointRobust:(t,n,r)=>im(e,t,n,r),classifyPointWinding:(t,n,r)=>am(e,t,n,r),detectSmallFeatures:(t,n,r)=>om(e,t,n,r),recognizeFeatures:(t,n)=>sm(e,t,n),projectEdges:(t,n,r,i)=>cm(e,t,n,r,i),getNurbsCurveData:t=>lm(e,t),getNurbsSurfaceData:t=>um(e,t)}}function fm(e,t,n){if(Array.isArray(n)&&n.length===16)return Tm(e,t,n);throw Error(`brepkit: transform expects a 16-element matrix array`)}function pm(e,t,n,r,i){return Tm(e,t,Uf(n,r,i))}function mm(e,t,n,r,i){return Tm(e,t,Gf(n,r,i))}function hm(e,t,n,r){let i=t;return i.type===`solid`?O(e.mirror(i.id,n[0],n[1],n[2],r[0],r[1],r[2])):Tm(e,t,Jf(n,r))}function gm(e,t,n,r){return Tm(e,t,Kf(n,r))}function _m(e,t,n,r,i){return Tm(e,t,qf(n,r))}function vm(e,t,n,r){return Tm(e,t,qf(n,r))}function ym(e,t,n,r){let{point:i,tangent:a}=Rp(e,n,r),[o,s,c]=a,l=Math.sqrt(o*o+s*s+c*c);if(l<1e-12)return pm(e,t,i[0],i[1],i[2]);let u=o/l,d=s/l,f=c/l,p=t;if(Math.abs(f+1)<1e-10)p=mm(e,p,180,[1,0,0]);else if(Math.abs(f-1)>1e-10){let t=[-d,u,0],n=180/Math.PI*Math.acos(Math.max(-1,Math.min(1,f)));p=mm(e,p,n,t)}return pm(e,p,i[0],i[1],i[2])}function bm(e,t,n,r,i){let a=[t];for(let o=1;o<i;o++){let i=r*o;a.push(pm(e,t,n[0]*i,n[1]*i,n[2]*i))}return a}function xm(e,t,n,r,i,a){let o=[t];for(let s=1;s<a;s++)o.push(mm(e,t,i*s,r,n));return o}function Sm(e,t,n,r,i,a,o,s){return Lf(e.gridPattern(zf(t,`gridPattern`),n[0],n[1],n[2],r[0],r[1],r[2],i,a,o,s))}function Cm(e,t){return t.map(t=>{switch(t.type){case`translate`:return pm(e,t.shape,t.x,t.y,t.z);case`rotate`:return mm(e,t.shape,t.angle,t.axis,t.center);case`scale`:return gm(e,t.shape,t.center,t.factor);case`mirror`:return hm(e,t.shape,t.origin,t.normal)}})}function wm(e){return{transform:(t,n)=>fm(e,t,n),locate:(t,n)=>fm(e,t,n),translate:(t,n,r,i)=>pm(e,t,n,r,i),rotate:(t,n,r,i)=>mm(e,t,n,r,i),mirror:(t,n,r)=>hm(e,t,n,r),scale:(t,n,r)=>gm(e,t,n,r),generalTransform:(t,n,r,i)=>_m(e,t,n,r,i),generalTransformNonOrthogonal:(t,n,r)=>vm(e,t,n,r),positionOnCurve:(t,n,r)=>ym(e,t,n,r),linearPattern:(t,n,r,i)=>bm(e,t,n,r,i),circularPattern:(t,n,r,i,a)=>xm(e,t,n,r,i,a),gridPattern:(t,n,r,i,a,o,s)=>Sm(e,t,n,r,i,a,o,s),transformBatch:t=>Cm(e,t)}}function Tm(e,t,n){let r=t;if(!jf(t))throw Error(`brepkit: applyMatrix requires a BrepkitHandle`);switch(r.type){case`solid`:{let t=e.copySolid(r.id);return e.transformSolid(t,n),O(t)}case`face`:{if(typeof e.copyFace!=`function`)throw Error(`brepkit: applyMatrix for faces requires copyFace/transformFace WASM exports`);let t=e.copyFace(r.id);return e.transformFace(t,n),Nf(t)}case`wire`:{if(typeof e.copyWire!=`function`||typeof e.transformWire!=`function`)throw Error(`brepkit: applyMatrix for wires requires copyWire/transformWire WASM exports`);let t=e.copyWire(r.id);return e.transformWire(t,n),Ff(t)}case`edge`:{if(typeof e.copyEdge!=`function`||typeof e.transformEdge!=`function`)throw Error(`brepkit: applyMatrix for edges requires copyEdge/transformEdge WASM exports`);let t=e.copyEdge(r.id);return e.transformEdge(t,n),Pf(t)}case`vertex`:{let t=e.getVertexPosition(r.id),i=n,[a,o,s]=[t[0]??0,t[1]??0,t[2]??0];return Rf(e.makeVertex((i[0]??0)*a+(i[1]??0)*o+(i[2]??0)*s+(i[3]??0),(i[4]??0)*a+(i[5]??0)*o+(i[6]??0)*s+(i[7]??0),(i[8]??0)*a+(i[9]??0)*o+(i[10]??0)*s+(i[11]??0)))}case`compound`:{let t=$f.get(r.id);if(t){let r=t.map(t=>Tm(e,t,n)),i=Qf();return $f.set(i,r),Lf(i)}let i=A(e.getCompoundSolids(r.id)).map(t=>{let r=e.copySolid(t);return e.transformSolid(r,n),r});return Lf(e.makeCompound(i))}default:throw Error(`brepkit: applyMatrix does not support '${r.type}' shapes`)}}function Em(e,t){return!!(e&&(e[0]!==0||e[1]!==0||e[2]!==0)||t&&(t[0]!==0||t[1]!==0||t[2]!==1))}function Dm(e,t,n,r){let i=t;if(r&&(r[0]!==0||r[1]!==0||r[2]!==1)){let[t,n,a]=r,o=Math.sqrt(t*t+n*n+a*a),s=t/o,c=n/o,l=a/o;if(Math.abs(l+1)<1e-10)i=mm(e,i,180,[1,0,0]);else if(Math.abs(l-1)>1e-10){let t=[-c,s,0],n=180/Math.PI*Math.acos(Math.max(-1,Math.min(1,l)));i=mm(e,i,n,t)}}return n&&(n[0]!==0||n[1]!==0||n[2]!==0)&&(i=pm(e,i,n[0],n[1],n[2])),i}function Om(e,t){let r,i=t;if(i.type===`solid`||i.type===`compound`){let n=hp(e,t,`face`);if(n.length===0)throw Error(`brepkit: extractPlaneFromFace: no faces found`);let i=n[0];if(!i)throw Error(`brepkit: extractPlaneFromFace: no faces found`);let a=k(i,`face`),o=0;for(let t of n){let n=k(t,`face`);try{let t=e.faceArea(n,Xf);t>o&&(o=t,a=n)}catch{}}r=a}else r=k(t,`face`);let a=n(e.getFaceNormal(r)),o=e.tessellateFace(r,1).positions;return o.length>=3?{point:n(o),normal:a}:{point:[0,0,0],normal:a}}function km(e,n){let r=n;if(r.type!==`edge`)return null;let i=e.getEdgeNurbsData(r.id);if(i){let e=JSON.parse(i);return{degree:e.degree,knots:e.knots,controlPoints:e.controlPoints,weights:e.weights}}let a=e.getEdgeVertices(r.id);return{degree:1,knots:[0,0,1,1],controlPoints:[t(a,0),t(a,1),t(a,2),t(a,3),t(a,4),t(a,5)],weights:[1,1]}}function Am(e,t){if(!jf(t))return!1;if(t.type!==`solid`)return!0;try{return e.validateSolidRelaxed(t.id)===0}catch(e){return console.warn(`brepkit: isValid check failed:`,e),!1}}function jm(e,t){if(!jf(t))return!1;if(t.type!==`solid`)return!0;try{return e.validateSolid(t.id)===0}catch(e){return console.warn(`brepkit: isValidStrict check failed:`,e),!1}}function Mm(e,t){let n=t;if(n.type!==`solid`)throw Error(`brepkit: healSolid requires a solid, got ${n.type}. Consider using makeCompound() to combine shapes first.`);try{let n=e.repairSolid(k(t));return n>0&&console.warn(`brepkit: repairSolid left ${n} error(s) on solid.`),t}catch(n){try{return e.healSolid(k(t)),t}catch(e){return console.warn(`brepkit: healSolid failed (repairSolid error:`,n,`, healSolid error:`,e,`)`),null}}}function Nm(e,t){return t}function Pm(e,t,n){return t}function Fm(e,t,n){let r=zf(t,`mergeCoincidentVertices`);return e.mergeCoincidentVertices(r,n)}function Im(e,t,n){let r=zf(t,`removeDegenerateEdges`);return e.removeDegenerateEdges(r,n)}function Lm(e,t){let n=zf(t,`fixFaceOrientations`);return e.fixFaceOrientations(n)}function Rm(e,t){let n=t;return n.type===`solid`&&e.healSolid(n.id),t}function zm(e,t){return t}function Bm(e,t){if(!jf(t)||t.type!==`solid`)return null;try{return typeof e.validateSolidDetails==`function`?e.validateSolidDetails(t.id):null}catch{return null}}function Vm(e){return{isValid:t=>Am(e,t),isValidStrict:t=>jm(e,t),healSolid:t=>Mm(e,t),healFace:t=>Nm(e,t),healWire:(t,n)=>Pm(e,t,n),fixShape:t=>Rm(e,t),fixSelfIntersection:t=>zm(e,t),mergeCoincidentVertices:(t,n)=>Fm(e,t,n),removeDegenerateEdges:(t,n)=>Im(e,t,n),fixFaceOrientations:t=>Lm(e,t),validationDetails:t=>Bm(e,t)}}function Hm(e){if(!(e instanceof Error))return!1;let t=e.message;return t.startsWith(`empty result:`)||t.includes(`produced empty result`)||t.includes(`produces empty result`)}function Um(e,t){return t.type===`compound`&&A(e.getCompoundSolids(t.id)).length===0}function Wm(e){return Lf(e.makeCompound([]))}function Gm(e,t,n,r,i){if(i?.simplify){if(t===`fuse`&&typeof e.fuseWithOptions==`function`)return e.fuseWithOptions(n,r,!0);if(t===`cut`&&typeof e.cutWithOptions==`function`)return e.cutWithOptions(n,r,!0);if(t===`intersect`&&typeof e.intersectWithOptions==`function`)return e.intersectWithOptions(n,r,!0);tp(`boolean-simplify`,`BooleanOptions.simplify needs brepkit-wasm >= 3.2; ignored on this kernel.`)}return e[t](n,r)}function Km(e,t,n,r){if(r&&np(r)&&tp(`boolean-options`,`BooleanOptions (optimisation, strategy, fuzzyValue) not supported; ignored.`),Um(e,t))return n;if(Um(e,n))return t;let i=zf(t,`fuse`),a=n;if(a.type===`compound`){let t=A(e.getCompoundSolids(a.id)),n=i;for(let i of t)n=Gm(e,`fuse`,n,i,r);return O(n)}return O(Gm(e,`fuse`,i,zf(n,`fuse`),r))}function qm(e,t,n,r){if(r&&np(r)&&tp(`boolean-options`,`BooleanOptions (optimisation, strategy, fuzzyValue) not supported; ignored.`),Um(e,t))return Wm(e);if(Um(e,n))return t;let i=zf(t,`cut`),a=n;if(a.type===`compound`){let t=A(e.getCompoundSolids(a.id)),n=i;for(let i of t)try{n=Gm(e,`cut`,n,i,r)}catch(t){if(Hm(t))return Wm(e);throw t}return O(n)}try{return O(Gm(e,`cut`,i,zf(n,`cut`),r))}catch(t){if(Hm(t))return Wm(e);throw t}}function Jm(e,t,n,r){if(r&&np(r)&&tp(`boolean-options`,`BooleanOptions (optimisation, strategy, fuzzyValue) not supported; ignored.`),Um(e,t)||Um(e,n))return Wm(e);try{return O(Gm(e,`intersect`,zf(t,`intersect`),zf(n,`intersect`),r))}catch(t){if(Hm(t))return Wm(e);throw t}}function Ym(e,n,r,i){let{point:a,normal:o}=Om(e,r),s=jf(n)&&n.type===`solid`?n.id:k(n,`solid`),c=A(e.section(s,a[0],a[1],a[2],o[0],o[1],o[2]));if(c.length===0)return Lf(e.makeCompound([]));let l=[];for(let n=0;n<c.length;n++){let r=A(e.getFaceWires(t(c,n)));for(let e=0;e<r.length;e++)l.push(Ff(t(r,e)))}let[u]=l;if(l.length===1&&u!==void 0)return u;let d=Qf();return $f.set(d,l),Lf(d)}function Xm(e,n,r){if(n.length===0)throw Error(`brepkit: fuseAll requires at least one shape`);if(n.length===1)return t(n,0);if(e.compoundFuse){let t=[];for(let r of n){let n=r;n.type===`compound`?t.push(...A(e.getCompoundSolids(n.id))):t.push(zf(r,`fuseAll`))}if(t.length===0)throw Error(`brepkit: fuseAll resolved to zero solid IDs`);return O(e.compoundFuse(new Uint32Array(t)))}let i=[...n];for(;i.length>1;){let t=[];for(let n=0;n<i.length;n+=2)n+1<i.length?t.push(Km(e,i[n],i[n+1],r)):t.push(i[n]);i=t}return t(i,0)}function Zm(e,t,n,r){if(n.length===0)return t;if(n.length===1)return qm(e,t,n[0],r);let i=zf(t,`cutAll`),a=[];for(let t of n){let n=t;n.type===`compound`?a.push(...A(e.getCompoundSolids(n.id))):a.push(zf(t,`cutAll`))}return a.length===0?t:O(e.compoundCut(i,new Uint32Array(a)))}function Qm(e,t,n){if(n.length===0)throw Error(`brepkit: split requires at least one tool`);let{point:r,normal:i}=Om(e,n[0]),a=A(e.split(k(t,`solid`),r[0],r[1],r[2],i[0],i[1],i[2]));return Lf(e.makeCompound(a))}function $m(e,t,n,r,i,a,o){let s=e.meshBoolean(t,n,r,i,a,o);return{vertices:new Float32Array(s.positions),normals:new Float32Array(s.normals),triangles:new Uint32Array(s.indices),uvs:new Float32Array,faceGroups:[{start:0,count:s.indices.length,faceHash:0}]}}function eh(e,t,n,r,i){let a=[];return(!jf(t)||t.IsNull())&&a.push({operand:`base`,issue:`null-shape`,message:`Base shape is null`}),(!jf(n)||n.IsNull())&&a.push({operand:`tool`,issue:`null-shape`,message:`Tool shape is null`}),a.length>0?{valid:!1,issues:a}:(i(t)||a.push({operand:`base`,issue:`not-valid`,message:`Base shape fails BRepCheck validation. Try autoHeal() first.`}),i(n)||a.push({operand:`tool`,issue:`not-valid`,message:`Tool shape fails BRepCheck validation. Try autoHeal() first.`}),{valid:a.length===0,issues:a})}function th(e,n,r){let i=[];for(let r of n){let n=r;if(n.type===`solid`){let r=A(e.getSolidVertices(n.id));for(let n of r){let r=e.getVertexPosition(n);i.push(t(r,0),t(r,1),t(r,2))}}else if(n.type===`vertex`){let r=e.getVertexPosition(n.id);i.push(t(r,0),t(r,1),t(r,2))}}if(i.length<12)throw Error(`brepkit: hull requires enough points`);return O(e.convexHull(i))}function nh(e,t,n){if(t.length<4)throw Error(`brepkit: hull needs at least 4 points`);let r=[];for(let e of t)r.push(e.x,e.y,e.z);return O(e.convexHull(r))}function rh(e,n,r,i){let a=new Float64Array(n.length*3);for(let e=0;e<n.length;e++){let r=t(n,e);a[e*3]=r.x,a[e*3+1]=r.y,a[e*3+2]=r.z}let o=new Uint32Array(r.length*3);for(let e=0;e<r.length;e++){let n=t(r,e);o[e*3]=n[0],o[e*3+1]=n[1],o[e*3+2]=n[2]}return O(e.importIndexedMesh(a,o))}function ih(e){return{fuse:(t,n,r)=>Km(e,t,n,r),cut:(t,n,r)=>qm(e,t,n,r),intersect:(t,n,r)=>Jm(e,t,n,r),section:(t,n,r)=>Ym(e,t,n,r),fuseAll:(t,n)=>Xm(e,t,n),cutAll:(t,n,r)=>Zm(e,t,n,r),split:(t,n)=>Qm(e,t,n),meshBoolean:(t,n,r,i,a,o)=>$m(e,t,n,r,i,a,o),checkBoolean:(t,n,r)=>eh(e,t,n,r,t=>Am(e,t)),hull:(t,n)=>th(e,t,n),hullFromPoints:(t,n)=>nh(e,t,n),buildSolidFromFaces:(t,n,r)=>rh(e,t,n,r)}}function ah(e,t,n,r){return Rf(e.makeVertex(t,n,r))}function oh(e,t,n,r){if(t&&typeof t==`object`&&`origin`in t&&`direction`in t){let{origin:i,direction:a}=t,o=n??0,s=r??1;return gh(e,[i[0]+a[0]*o,i[1]+a[1]*o,i[2]+a[2]*o],[i[0]+a[0]*s,i[1]+a[1]*s,i[2]+a[2]*s])}if(jf(t)&&t.type===`edge`)return t;throw Error(`brepkit: makeEdge requires a curve with origin/direction, or an edge handle`)}function sh(e,t){let n=[];for(let r of t){let t=r;if(t.type===`wire`)for(let r of A(e.getWireEdges(t.id)))n.push(r);else n.push(k(r,`edge`))}return Ff(e.makeWire(n,!0))}function ch(e,t,n){let r=t,i=r.type===`edge`?e.makeWire([r.id],!0):k(t,`wire`);return Nf(n?e.makePlanarFaceFromWire(i):e.makeFaceFromWire(i))}function lh(e,t,n,r){return O(e.makeBox(t,n,r))}function uh(e,t,n){return Nf(e.makeRectangle(t,n))}function dh(e,t,n,r,i){let a=O(e.makeCylinder(t,n));return Em(r,i)?Dm(e,a,r,i):a}function fh(e,t,n){let r=O(e.makeSphere(t,32));return n&&(n[0]!==0||n[1]!==0||n[2]!==0)?pm(e,r,n[0],n[1],n[2]):r}function ph(e,t,n,r,i,a){let o=O(e.makeCone(t,n,r));return Em(i,a)?Dm(e,o,i,a):o}function mh(e,t,n,r,i){let a=O(e.makeTorus(t,n,32));return Em(r,i)?Dm(e,a,r,i):a}function hh(e,t,n,r){let i=Math.max(t,n,r);return _m(e,fh(e,i),[t/i,0,0,0,n/i,0,0,0,r/i],[0,0,0],!1)}function gh(e,t,n){return Pf(e.makeLineEdge(t[0],t[1],t[2],n[0],n[1],n[2]))}function _h(e,t,n,r){let i=Math.sqrt(n[0]**2+n[1]**2+n[2]**2);return Pf(e.makeCircleEdge(t[0],t[1],t[2],n[0]/i,n[1]/i,n[2]/i,r))}function vh(e,t,n,r,i,a){let o=a-i,s=1e-9;if(o>s&&o<2*Math.PI-s){let o=Math.hypot(n[0],n[1],n[2]),s=[n[0]/o,n[1]/o,n[2]/o],c=Math.abs(s[0])<.9?[1,0,0]:[0,1,0],l=[s[1]*c[2]-s[2]*c[1],s[2]*c[0]-s[0]*c[2],s[0]*c[1]-s[1]*c[0]],u=Math.hypot(l[0],l[1],l[2]),d=[l[0]/u,l[1]/u,l[2]/u],f=[s[1]*d[2]-s[2]*d[1],s[2]*d[0]-s[0]*d[2],s[0]*d[1]-s[1]*d[0]],p=e=>{let n=Math.cos(e),i=Math.sin(e);return[t[0]+r*(n*d[0]+i*f[0]),t[1]+r*(n*d[1]+i*f[1]),t[2]+r*(n*d[2]+i*f[2])]},m=p(i),h=p(a);return Pf(e.makeCircleArc3d(m[0],m[1],m[2],h[0],h[1],h[2],t[0],t[1],t[2],s[0],s[1],s[2]))}return Kh(e,t,n,r,i,a)}function yh(e,t,n,r,i,a){let o=2*(e*(r-a)+n*(a-t)+i*(t-r));return Math.abs(o)<1e-12?null:[((e**2+t**2)*(r-a)+(n**2+r**2)*(a-t)+(i**2+a**2)*(t-r))/o,((e**2+t**2)*(i-n)+(n**2+r**2)*(e-i)+(i**2+a**2)*(n-e))/o]}function bh(e,t,n,r){let 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=Math.sqrt(o[0]**2+o[1]**2+o[2]**2);if(s<1e-12)return gh(e,t,r);let c=[o[0]/s,o[1]/s,o[2]/s],l=Math.sqrt(i[0]**2+i[1]**2+i[2]**2),u=[i[0]/l,i[1]/l,i[2]/l],d=[c[1]*u[2]-c[2]*u[1],c[2]*u[0]-c[0]*u[2],c[0]*u[1]-c[1]*u[0]],f=e=>{let n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return[n*u[0]+r*u[1]+i*u[2],n*d[0]+r*d[1]+i*d[2]]},[p,m]=f(t),[h,g]=f(n),[_,v]=f(r),y=yh(p,m,h,g,_,v);if(!y)return gh(e,t,r);let[b,x]=y,S=[t[0]+b*u[0]+x*d[0],t[1]+b*u[1]+x*d[1],t[2]+b*u[2]+x*d[2]];return Pf(e.makeCircleArc3d(t[0],t[1],t[2],r[0],r[1],r[2],S[0],S[1],S[2],c[0],c[1],c[2]))}function xh(e,t,n,r,i,a){let o=Math.sqrt(n[0]**2+n[1]**2+n[2]**2);if(a!==void 0){let s=Math.sqrt(a[0]**2+a[1]**2+a[2]**2);return Pf(e.makeEllipseEdgeWithRef(t[0],t[1],t[2],n[0]/o,n[1]/o,n[2]/o,r,i,a[0]/s,a[1]/s,a[2]/s))}return Pf(e.makeEllipseEdge(t[0],t[1],t[2],n[0]/o,n[1]/o,n[2]/o,r,i))}function Sh(e,t,n,r,i,a,o,s){return qh(e,t,n,r,i,a,o,s)}function Ch(e,n){if(n.length<2)throw Error(`brepkit: bezier requires at least 2 points`);let r=n.length-1,i=n.length,a=[...Array(r+1).fill(0),...Array(r+1).fill(1)],o=Array(i).fill(1),s=n.flatMap(([e,t,n])=>[e,t,n]),c=t(n,0),l=t(n,i-1);return Pf(e.makeNurbsEdge(c[0],c[1],c[2],l[0],l[1],l[2],r,a,s,o))}function wh(e,t,n,r){return Pf(e.makeTangentArc3d(t[0],t[1],t[2],n[0],n[1],n[2],r[0],r[1],r[2]))}function Th(e,t,n,r,i,a,o){let s=n/t,c=Math.max(4,Math.ceil(s*16)),l=i?.[0]??0,u=i?.[1]??0,d=i?.[2]??0,f=o?-1:1,p=[];for(let e=0;e<=c;e++){let t=e/c,i=f*2*Math.PI*s*t;p.push([l+r*Math.cos(i),u+r*Math.sin(i),d+n*t])}return sh(e,[Rh(e,p)])}function Eh(e,t){let n=[];for(let r of t){let t=r;if(t.type===`edge`)n.push(t.id);else if(t.type===`wire`)for(let r of A(e.getWireEdges(t.id)))n.push(r)}if(n.length===0)throw Error(`brepkit: makeWireFromMixed requires at least one edge`);return Ff(e.makeWire(n,!1))}function Dh(e,t){let n=t.filter(jf);if(n.length===0)throw Error(`brepkit: makeCompound requires at least one shape`);if(n.every(e=>e.type===`solid`))return Lf(e.makeCompound(n.map(e=>e.id)));let r=Qf();return $f.set(r,n),Lf(r)}function Oh(e,t,n){let r=lh(e,Math.abs(n[0]-t[0]),Math.abs(n[1]-t[1]),Math.abs(n[2]-t[2])),i=Math.min(t[0],n[0]),a=Math.min(t[1],n[1]),o=Math.min(t[2],n[2]);return i!==0||a!==0||o!==0?pm(e,r,i,a,o):r}function kh(e,t){let n=t;if(n.type===`solid`)return t;if(n.type===`shell`){try{return e.getSolidFaces(n.id),O(n.id)}catch{}return O(e.solidFromShell(n.id))}return O(e.solidFromShell(k(t,`shell`)))}function Ah(e,t){return ch(e,t,!1)}function jh(e,t,n){let r=n.map(e=>k(e,`wire`));return Nf(e.addHolesToFace(k(t,`face`),r))}function Mh(e,t){return Nf(e.removeHolesFromFace(k(t,`face`)))}function Nh(e,t,n){return ch(e,n,!1)}function Ph(e,t,n,r){let i=[];for(let[e,n,r]of t)i.push(e,n,r);let a=Math.min(3,n-1),o=Math.min(3,r-1);try{return Nf(e.interpolateSurface(i,n,r,a,o))}catch{return Fh(e,t,n,r)}}function Fh(e,n,r,i){let a=[];for(let o=0;o<r-1;o++)for(let r=0;r<i-1;r++){let s=o*i+r,c=(o+1)*i+r,l=o*i+(r+1),u=(o+1)*i+(r+1),d=Ih(e,t(n,s),t(n,c),t(n,l));d&&a.push(d);let f=Ih(e,t(n,c),t(n,u),t(n,l));f&&a.push(f)}if(a.length===0)throw Error(`brepkit: no valid faces in surface grid`);return Op(e,a,1e-6)}function Ih(e,t,n,r){let i=n[0]-t[0],a=n[1]-t[1],o=n[2]-t[2],s=r[0]-t[0],c=r[1]-t[1],l=r[2]-t[2],u=a*l-o*c,d=o*s-i*l,f=i*c-a*s;if(Math.sqrt(u*u+d*d+f*f)<1e-12)return null;try{return ch(e,sh(e,[gh(e,t,n),gh(e,n,r),gh(e,r,t)]))}catch(e){return console.warn(`brepkit: makeNonPlanarFace failed:`,e),null}}function Lh(e,t,n){let r=t.map(e=>k(e,`face`));return O(e.sewFaces(r,n))}function Rh(e,n,r){if(r?.tolerance!==void 0&&tp(`interpolate-tolerance`,`interpolatePoints() tolerance parameter is not supported; brepkit uses chord-length parameterisation.`),n.length<2)throw Error(`brepkit: need at least 2 points`);if(n.length===2)return gh(e,t(n,0),t(n,1));let i=Math.min(3,n.length-1),a=n.flatMap(([e,t,n])=>[e,t,n]);return Pf(e.interpolatePoints(a,i))}function zh(e,t,n){let r=n?.degMax??3,i=n?.tolerance??1e-6,a=[];for(let e of t)a.push(e[0],e[1],e[2]);let o=Math.max(r+1,Math.min(t.length,Math.ceil(t.length*.7)));return Pf(e.approximateCurveLspia(a,r,o,i,100))}function Bh(e,t,n,r){return{x:t,y:n,z:r}}function Vh(e,t,n,r){let i=Math.sqrt(t*t+n*n+r*r);return{x:t/i,y:n/i,z:r/i}}function Hh(e,t,n,r){return{x:t,y:n,z:r}}function Uh(e,t,n,r,i,a,o){return{origin:[t,n,r],direction:[i,a,o]}}function Wh(e,t,n,r,i,a,o,s,c,l){return{origin:[t,n,r],z:[i,a,o],x:s===void 0?void 0:[s,c,l]}}function Gh(e,t,n,r,i,a,o,s,c,l){return{origin:[t,n,r],z:[i,a,o],x:s===void 0?void 0:[s,c,l]}}function Kh(e,n,r,i,a,o){let s=Math.sqrt(r[0]**2+r[1]**2+r[2]**2),c=[r[0]/s,r[1]/s,r[2]/s],l=Math.abs(c[0])<.9?[1,0,0]:[0,1,0],u=[c[1]*l[2]-c[2]*l[1],c[2]*l[0]-c[0]*l[2],c[0]*l[1]-c[1]*l[0]],d=Math.sqrt(u[0]**2+u[1]**2+u[2]**2),f=[u[0]/d,u[1]/d,u[2]/d],p=[c[1]*f[2]-c[2]*f[1],c[2]*f[0]-c[0]*f[2],c[0]*f[1]-c[1]*f[0]],m=Math.ceil(Math.abs(o-a)/(Math.PI/2)),h=(o-a)/m,g=[],_=[];for(let e=0;e<=m;e++){let t=a+e*h,r=Math.cos(t),o=Math.sin(t),s=n[0]+i*(r*f[0]+o*p[0]),c=n[1]+i*(r*f[1]+o*p[1]),l=n[2]+i*(r*f[2]+o*p[2]);if(e>0){let t=a+(e-.5)*h,r=Math.cos(t),o=Math.sin(t),s=i/Math.cos(h/2),c=n[0]+s*(r*f[0]+o*p[0]),l=n[1]+s*(r*f[1]+o*p[1]),u=n[2]+s*(r*f[2]+o*p[2]);g.push(c,l,u),_.push(Math.cos(h/2))}g.push(s,c,l),_.push(1)}let v=[,,,].fill(0);for(let e=1;e<m;e++)v.push(e,e);v.push(...[,,,].fill(m));let y=t(v,v.length-1);for(let e=0;e<v.length;e++)v[e]=t(v,e)/y;let b=t(g,0),x=t(g,1),S=t(g,2),C=t(g,g.length-3),w=t(g,g.length-2),ee=t(g,g.length-1);return Pf(e.makeNurbsEdge(b,x,S,C,w,ee,2,v,g,_))}function qh(e,n,r,i,a,o,s,c){let l=Math.sqrt(r[0]**2+r[1]**2+r[2]**2),u=[r[0]/l,r[1]/l,r[2]/l],d;if(c){let e=Math.sqrt(c[0]**2+c[1]**2+c[2]**2);d=[c[0]/e,c[1]/e,c[2]/e]}else{let e=Math.abs(u[0])<.9?[1,0,0]:[0,1,0],t=[u[1]*e[2]-u[2]*e[1],u[2]*e[0]-u[0]*e[2],u[0]*e[1]-u[1]*e[0]],n=Math.sqrt(t[0]**2+t[1]**2+t[2]**2);d=[t[0]/n,t[1]/n,t[2]/n]}let f=[u[1]*d[2]-u[2]*d[1],u[2]*d[0]-u[0]*d[2],u[0]*d[1]-u[1]*d[0]],p=Math.ceil(Math.abs(s-o)/(Math.PI/2)),m=(s-o)/p,h=[],g=[];for(let e=0;e<=p;e++){let t=o+e*m,r=Math.cos(t),s=Math.sin(t),c=n[0]+i*r*d[0]+a*s*f[0],l=n[1]+i*r*d[1]+a*s*f[1],u=n[2]+i*r*d[2]+a*s*f[2];if(e>0){let t=o+(e-.5)*m,r=Math.cos(t),s=Math.sin(t),c=1/Math.cos(m/2),l=n[0]+i*c*r*d[0]+a*c*s*f[0],u=n[1]+i*c*r*d[1]+a*c*s*f[1],p=n[2]+i*c*r*d[2]+a*c*s*f[2];h.push(l,u,p),g.push(Math.cos(m/2))}h.push(c,l,u),g.push(1)}let _=[,,,].fill(0);for(let e=1;e<p;e++)_.push(e,e);_.push(...[,,,].fill(p));let v=t(_,_.length-1);for(let e=0;e<_.length;e++)_[e]=t(_,e)/v;let y=t(h,0),b=t(h,1),x=t(h,2),S=t(h,h.length-3),C=t(h,h.length-2),w=t(h,h.length-1);return Pf(e.makeNurbsEdge(y,b,x,S,C,w,2,_,h,g))}function Jh(e){return{makeVertex:(t,n,r)=>ah(e,t,n,r),makeEdge:(t,n,r)=>oh(e,t,n,r),makeWire:t=>sh(e,t),makeWireFromMixed:t=>Eh(e,t),makeFace:(t,n)=>ch(e,t,n),makeBox:(t,n,r)=>lh(e,t,n,r),makeRectangle:(t,n)=>uh(e,t,n),makeCylinder:(t,n,r,i)=>dh(e,t,n,r,i),makeSphere:(t,n)=>fh(e,t,n),makeCone:(t,n,r,i,a)=>ph(e,t,n,r,i,a),makeTorus:(t,n,r,i)=>mh(e,t,n,r,i),makeEllipsoid:(t,n,r)=>hh(e,t,n,r),makeLineEdge:(t,n)=>gh(e,t,n),makeCircleEdge:(t,n,r)=>_h(e,t,n,r),makeCircleArc:(t,n,r,i,a)=>vh(e,t,n,r,i,a),makeArcEdge:(t,n,r)=>bh(e,t,n,r),makeEllipseEdge:(t,n,r,i,a)=>xh(e,t,n,r,i,a),makeEllipseArc:(t,n,r,i,a,o,s)=>Sh(e,t,n,r,i,a,o,s),makeBezierEdge:t=>Ch(e,t),makeTangentArc:(t,n,r)=>wh(e,t,n,r),makeHelixWire:(t,n,r,i,a,o)=>Th(e,t,n,r,i,a,o),makeCompound:t=>Dh(e,t),makeBoxFromCorners:(t,n)=>Oh(e,t,n),solidFromShell:t=>kh(e,t),makeNonPlanarFace:t=>Ah(e,t),addHolesInFace:(t,n)=>jh(e,t,n),removeHolesFromFace:t=>Mh(e,t),makeFaceOnSurface:(t,n)=>Nh(e,t,n),bsplineSurface:(t,n,r)=>Ph(e,t,n,r),triangulatedSurface:(t,n,r)=>Fh(e,t,n,r),buildTriFace:(t,n,r)=>Ih(e,t,n,r),sewAndSolidify:(t,n)=>Lh(e,t,n),interpolatePoints:(t,n)=>Rh(e,t,n),approximatePoints:(t,n)=>zh(e,t,n),createPoint3d:(t,n,r)=>Bh(e,t,n,r),createDirection3d:(t,n,r)=>Vh(e,t,n,r),createVector3d:(t,n,r)=>Hh(e,t,n,r),createAxis1:(t,n,r,i,a,o)=>Uh(e,t,n,r,i,a,o),createAxis2:(t,n,r,i,a,o,s,c,l)=>Wh(e,t,n,r,i,a,o,s,c,l),createAxis3:(t,n,r,i,a,o,s,c,l)=>Gh(e,t,n,r,i,a,o,s,c,l)}}function Yh(e,t,n,r){let i=zf(t,`fillet`),a=n.map(e=>k(e,`edge`));if(typeof r==`number`)return O(e.fillet(i,a,r));let o=[];for(let[e,t]of n.entries()){let n=a[e]??0,i;i=typeof r==`function`?r(t):r;let[s,c]=Array.isArray(i)?i:[i,i];o.push({edge:n,startRadius:s,endRadius:c})}return O(e.filletVariable(i,JSON.stringify(o)))}function Xh(e,t,n,r){let i=zf(t,`chamfer`),a=n.map(e=>k(e,`edge`));if(typeof r==`number`)return O(e.chamfer(i,a,r));if(Array.isArray(r)){let[t,n]=r;return typeof e.chamferAsymmetric==`function`?O(e.chamferAsymmetric(i,a,t,n)):(tp(`chamfer-asymmetric`,`chamferAsymmetric not available; using averaged distance.`),O(e.chamfer(i,a,(t+n)/2)))}let o=new Map;for(let[e,t]of n.entries()){let n=r(t),i=a[e];if(i===void 0)continue;let[s,c]=Array.isArray(n)?n:[n,n],l=`${s},${c}`,u=o.get(l);u?u.ids.push(i):o.set(l,{ids:[i],d1:s,d2:c})}let s=i;for(let t of o.values())t.d1===t.d2?s=e.chamfer(s,t.ids,t.d1):typeof e.chamferAsymmetric==`function`?s=e.chamferAsymmetric(s,t.ids,t.d1,t.d2):(tp(`chamfer-callback`,`chamferAsymmetric not available; asymmetric edges use averaged distance.`),s=e.chamfer(s,t.ids,(t.d1+t.d2)/2));return O(s)}function Zh(e,t,n,r,i){let a=r*Math.tan(i*Math.PI/180),o=zf(t,`chamferDistAngle`),s=n.map(e=>k(e,`edge`));return typeof e.chamferAsymmetric==`function`?O(e.chamferAsymmetric(o,s,r,a)):(tp(`chamfer-dist-angle`,`chamferAsymmetric not available; using averaged distance.`),O(e.chamfer(o,s,(r+a)/2)))}function Qh(e,n){let r=A(e.getFaceVertices(n));if(r.length<1)return null;let i=0,a=0,o=0;for(let n of r){let r=e.getVertexPosition(n);i+=t(r,0),a+=t(r,1),o+=t(r,2)}let s=r.length;return{x:i/s,y:a/s,z:o/s}}function $h(e,t,n){try{let r=e.getFaceNormal(t),i=-1,a=-2;for(let t of n)try{let n=e.getFaceNormal(t),o=(r[0]??0)*(n[0]??0)+(r[1]??0)*(n[1]??0)+(r[2]??0)*(n[2]??0);o>a&&(a=o,i=t)}catch{}if(i>=0&&a>.99)return i}catch{}return null}function eg(e,t,n){try{let r=Qh(e,t);if(r===null)return null;let i=-1,a=1/0;for(let t of n)try{let n=Qh(e,t);if(n===null)continue;let o=Math.sqrt((r.x-n.x)**2+(r.y-n.y)**2+(r.z-n.z)**2);o<a&&(a=o,i=t)}catch{}if(i>=0&&a<.001)return i}catch{}return null}function tg(e,t,n,r){if(r.has(t))return t;let i=$h(e,t,n);if(i!==null)return i;let a=eg(e,t,n);return a===null?t:a}function ng(e,t,n,r,i){i!==void 0&&tp(`shell-tolerance`,`shell() tolerance parameter is not supported; brepkit uses its own internal tolerance.`);let a=zf(t,`shell`),o=A(e.getSolidFaces(a)),s=new Set(o),c=n.map(t=>tg(e,k(t,`face`),o,s));return O(e.shell(a,r,c))}function rg(e,t,n){let r=t;if(r.type===`face`)return O(e.thicken(r.id,n));throw Error(`brepkit: thicken() requires a face`)}function ig(e,t,n,r){r!==void 0&&tp(`offset-tolerance`,`offset() tolerance parameter is not supported; brepkit uses its own internal tolerance.`);let i=t;if(i.type===`face`)return O(e.thicken(i.id,n));let a=zf(t,`offset`);return O(e.offsetSolidV2(a,n))}function ag(e,t,n){let r=zf(t,`filletVariable`);return O(e.filletVariable(r,n))}function og(e,t,n,r,i,a){let o=zf(t,`draft`),s=n.map(e=>k(e,`face`));return O(e.draft(o,s,r[0],r[1],r[2],i[0],i[1],i[2],a))}function sg(e,t,n){let r=zf(t,`defeature`),i=n.map(e=>k(e,`face`));return O(e.defeature(r,i))}function cg(e){switch(e){case`arc`:case`tangent`:return`arc`;case`intersection`:return`intersection`;default:return`intersection`}}function lg(e,n,r,i){if(typeof e.offsetWire2DWithJoin==`function`)return Ff(e.offsetWire2DWithJoin(k(n,`wire`),r,cg(i)));let a=hp(e,n,`edge`);if(a.length===0)return n;let o=[];for(let n of a){let r=e.getEdgeVertices(k(n,`edge`));o.push(t(r,0),t(r,1))}if(o.length<6)return n;let s=e.offsetPolygon2d(o,r,1e-10),c=[];for(let e=0;e<s.length;e+=2)c.push(t(s,e),t(s,e+1),0);return Ff(e.makePolygonWire(c))}function ug(e,t){if(t.type===`solid`)try{e.healSolid(k(t))}catch(e){console.warn(`brepkit: healing failed in simplify:`,e)}return t}function dg(e,t){let n=t,r=e.reverseShape(n.id);return Mf(n.type,r)}function fg(e){return{fillet:(t,n,r)=>Yh(e,t,n,r),chamfer:(t,n,r)=>Xh(e,t,n,r),chamferDistAngle:(t,n,r,i)=>Zh(e,t,n,r,i),shell:(t,n,r,i)=>ng(e,t,n,r,i),thicken:(t,n)=>rg(e,t,n),offset:(t,n,r)=>ig(e,t,n,r),filletVariable:(t,n)=>ag(e,t,n),draft:(t,n,r,i,a)=>og(e,t,n,r,i,op(n,a)),defeature:(t,n)=>sg(e,t,n),offsetWire2D:(t,n,r)=>lg(e,t,n,r),simplify:t=>ug(e,t),reverseShape:t=>dg(e,t)}}function pg(e,t){let n=JSON.parse(e),r=n.evolution;if(!r||typeof r.modified!=`object`||typeof r.generated!=`object`)throw Error(`brepkit: invalid evolution JSON structure`);let i=O(n.solid),a=e=>{let n=new Map;for(let[r,i]of Object.entries(e)){let e=Number(r)%t,a=i.map(e=>e%t),o=n.get(e);o?o.push(...a):n.set(e,a)}return n},o=a(r.modified),s=a(r.generated),c=new Set;for(let e of r.deleted)c.add(e%t);return{shape:i,evolution:{modified:o,generated:s,deleted:c}}}function mg(e,t){let n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return n*n+r*r+i*i}function hg(e,n){try{let r=e.tessellateFace(n,1).positions;if(r.length<3)return[0,0,0];let i=0,a=0,o=0,s=r.length/3;for(let e=0;e<r.length;e+=3)i+=t(r,e),a+=t(r,e+1),o+=t(r,e+2);return[i/s,a/s,o/s]}catch{return[0,0,0]}}function gg(e,t,n){try{return{hash:n,normal:e.getFaceNormal(t),centroid:hg(e,t)}}catch{return{hash:n,normal:[0,0,0],centroid:hg(e,t)}}}var _g=.707,vg=100,yg=.05;function bg(e,n){let r=-1/0,i=[];for(let a=0;a<n.length;a++){let o=t(n,a),s=(e.normal[0]??0)*(o.normal[0]??0)+(e.normal[1]??0)*(o.normal[1]??0)+(e.normal[2]??0)*(o.normal[2]??0);if(s<_g)continue;let c=mg(e.centroid,o.centroid);if(c>vg)continue;let l=s-c/vg;l>r&&(r=l),i.push({idx:a,score:l})}return{matches:i,bestScore:r}}function xg(e,t){let n=1/0,r;for(let i of t){let t=mg(e.centroid,i.centroid);t<n&&(n=t,r=i)}return r}function Sg(e,n,r,i,a,o,s,c){let l=n;if(l.type!==`solid`)return;let u=A(e.getSolidFaces(l.id)),d=Math.min(u.length,r.length),f=[];for(let n=0;n<d;n++){let i=t(u,n);f.push(gg(e,i,r[n]??i%a))}let p=i.map(t=>gg(e,t,t%a)),m=new Set;for(let e of p){let{matches:n,bestScore:r}=bg(e,f);if(n.length>0){for(let i of n)if(i.score>=r-yg){let n=t(f,i.idx),r=o.get(n.hash)??[];r.push(e.hash),o.set(n.hash,r),m.add(i.idx)}}else{let t=xg(e,f);if(t){let n=s.get(t.hash)??[];n.push(e.hash),s.set(t.hash,n)}}}for(let e=0;e<f.length;e++)m.has(e)||c.add(t(f,e).hash)}function Cg(e,t,n,r,i,a,o,s){let c=new Set(s),l=new Map(a);Sg(e,t,n,r,i,a,o,s),s.clear();for(let e of c)s.add(e);for(let e of n){let t=!l.has(e)&&a.has(e)&&(a.get(e)?.length??0)>0,n=o.has(e)&&(o.get(e)?.length??0)>0;!t&&!n&&s.add(e)}}function wg(e,n,r,i,a,o){let s=n.filter(e=>!r.has(e));s.length>0&&e.length>0&&a.set(t(e,0),s);for(let t of e)i.has(t)||o.add(t)}function Tg(e,n,r,i,a,o,s,c,l){let u=new Set(i);if(r.some(e=>u.has(e))){let t=new Set(r);for(let e of r)u.has(e)&&o.set(e,[e]);let d=i.filter(e=>!t.has(e)),f=n.filter(e=>!u.has(e%a));l&&d.length>0&&f.length>0?Cg(e,l,d,f,a,o,s,c):wg(i,r,u,t,s,c)}else if(l)Sg(e,l,i,n,a,o,s,c);else{for(let e=0;e<i.length&&e<r.length;e++)o.set(t(i,e),[t(r,e)]);r.length>i.length&&i.length>0&&s.set(t(i,0),r.slice(i.length))}}function Eg(e,n,r,i,a,o){let s=n,c=new Map,l=new Map,u=new Set;if(s.type===`solid`){let n=A(e.getSolidFaces(s.id)),d=n.map(e=>e%i);if(a)for(let e=0;e<r.length&&e<d.length;e++)c.set(t(r,e),[t(d,e)]);else Tg(e,n,d,r,i,c,l,u,o)}return{shape:n,evolution:{modified:c,generated:l,deleted:u}}}function Dg(e,t,n,r,i){for(let[a,o]of e){let s=[];for(let e of o){r.add(e);let i=t.get(e);i?s.push(...i):n.has(e)||s.push(e)}s.length>0?e.set(a,s):(e.delete(a),i?.add(a))}}function Og(e,t){let n=new Set;Dg(t.combinedModified,e.evolution.modified,e.evolution.deleted,n,t.combinedDeleted),Dg(t.combinedGenerated,e.evolution.modified,e.evolution.deleted,n);for(let[r,i]of e.evolution.modified)t.combinedModified.has(r)||n.has(r)||t.combinedModified.set(r,[...i]);for(let[r,i]of e.evolution.generated){if(n.has(r))continue;let e=t.combinedGenerated.get(r)??[];t.combinedGenerated.set(r,[...e,...i])}for(let n of e.evolution.deleted)t.inputFaceHashSet.has(n)&&t.combinedDeleted.add(n)}function kg(e,t,n,r,i,a){let o=A(e.getCompoundSolids(n)),s=t,c={combinedModified:new Map,combinedGenerated:new Map,combinedDeleted:new Set,inputFaceHashSet:new Set(r)};for(let e of o){let t=s;if(t.type!==`solid`)break;let n=pg(a(t.id,e),i);s=n.shape,Og(n,c)}return{shape:s,accum:c}}function Ag(e,t,n,r,i,a,o,s,c){let l={hasErrors:!1,hasWarnings:!1,messages:[]},u=t,d=n;if(r.length>0&&u.type===`solid`){if(d.type===`solid`)try{return{...pg(o(u.id,d.id),i),diagnostics:l}}catch(e){if(!Hm(e))throw e}if(d.type===`compound`){let{shape:n,accum:a}=kg(e,t,d.id,r,i,o);return{shape:n,evolution:{modified:a.combinedModified,generated:a.combinedGenerated,deleted:a.combinedDeleted},diagnostics:l}}}return{...Eg(e,s(t,n,a),r,i,!1,t),diagnostics:l}}function jg(e,t,n,r,i,a,o){return Eg(e,pm(e,t,n,r,i),a,o,!0)}function Mg(e,t,n,r,i,a,o){return Eg(e,mm(e,t,n*180/Math.PI,a,o),r,i,!0)}function Ng(e,t,n,r,i,a){return Eg(e,hm(e,t,n,r),i,a,!0)}function Pg(e,t,n,r,i,a){return Eg(e,gm(e,t,n,r),i,a,!0)}function Fg(e,t,n,r,i,a,o){return Eg(e,_m(e,t,n,r,i),a,o,!0)}function Ig(e,t,n,r,i,a){return Ag(e,t,n,r,i,a,(t,n)=>e.fuseWithEvolution(t,n),(t,n,r)=>Km(e,t,n,r),`fuseWithHistory`)}function Lg(e,t,n,r,i,a){return Ag(e,t,n,r,i,a,(t,n)=>e.cutWithEvolution(t,n),(t,n,r)=>qm(e,t,n,r),`cutWithHistory`)}function Rg(e,t,n,r,i,a){return Ag(e,t,n,r,i,a,(t,n)=>e.intersectWithEvolution(t,n),(t,n,r)=>Jm(e,t,n,r),`intersectWithHistory`)}function zg(e,t,n,r,i,a){return Eg(e,Yh(e,t,n,r),i,a,!1,t)}function Bg(e,t,n,r,i,a){return Eg(e,Xh(e,t,n,r),i,a,!1,t)}function Vg(e,t,n,r,i,a,o){return Eg(e,ng(e,t,n,r,o),i,a,!1,t)}function Hg(e,t,n,r,i){return Eg(e,rg(e,t,n),r,i,!1,t)}function Ug(e,t,n,r,i,a){return Eg(e,ig(e,t,n,a),r,i,!1,t)}function Wg(e,t,n,r,i,a,o,s){return Eg(e,og(e,t,n,r,i,a),o,s,!1,t)}function Gg(e,t,n,r,i){return Eg(e,Tm(e,t,n),r,i,!0)}function Kg(e,t){let n=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];for(let e of t)n=Yf(e.type===`translate`?Uf(e.x,e.y,e.z):Gf(e.angle,e.axis,e.center),n);return{handle:n,dispose:()=>{}}}function qg(e){return{translateWithHistory:(t,n,r,i,a,o)=>jg(e,t,n,r,i,a,o),rotateWithHistory:(t,n,r,i,a,o)=>Mg(e,t,n,r,i,a,o),mirrorWithHistory:(t,n,r,i,a)=>Ng(e,t,n,r,i,a),scaleWithHistory:(t,n,r,i,a)=>Pg(e,t,n,r,i,a),generalTransformWithHistory:(t,n,r,i,a,o)=>Fg(e,t,n,r,i,a,o),fuseWithHistory:(t,n,r,i,a)=>Ig(e,t,n,r,i,a),cutWithHistory:(t,n,r,i,a)=>Lg(e,t,n,r,i,a),intersectWithHistory:(t,n,r,i,a)=>Rg(e,t,n,r,i,a),filletWithHistory:(t,n,r,i,a)=>zg(e,t,n,r,i,a),chamferWithHistory:(t,n,r,i,a)=>Bg(e,t,n,r,i,a),shellWithHistory:(t,n,r,i,a,o)=>Vg(e,t,n,r,i,a,o),thickenWithHistory:(t,n,r,i)=>Hg(e,t,n,r,i),offsetWithHistory:(t,n,r,i,a)=>Ug(e,t,n,r,i,a),draftWithHistory:(t,n,r,i,a,o,s)=>Wg(e,t,n,r,i,op(n,a),o,s),applyComposedTransformWithHistory:(t,n,r,i)=>Gg(e,t,n,r,i),composeTransform:t=>Kg(e,t)}}function Jg(e,t,n){let r=k(t),i=t,a=n.tolerance||.01,o=n.angularTolerance>0?n.angularTolerance:void 0,s;if(i.type===`solid`)s=Zg(e,r,a,!!n.includeUVs,o);else if(i.type===`face`)s=n_(e,r,a,0,o);else throw Error(`brepkit: cannot mesh shape of type '${i.type}'`);return n.skipNormals&&(s.normals=new Float32Array),n.includeUVs||(s.uvs=new Float32Array),s}function Yg(e,r,i,a){let o=r;if(o.type!==`solid`)return{lines:new Float32Array,edgeGroups:[]};let s=a>0?a:void 0,c=e.meshEdgesAll(o.id,i,s),l=c.positions,u=c.offsets,d=c.edgeCount,f=[],p=[];for(let e=0;e<d;e++){let r=t(u,e),i=((e+1<d?t(u,e+1):l.length)-r)/3,a=f.length/3;for(let e=0;e+1<i;e++){let t=r+e*3,[i,a,o]=n(l,t),[s,c,u]=n(l,t+3);i===s&&a===c&&o===u||f.push(i,a,o,s,c,u)}p.push({start:a,count:f.length/3-a,edgeHash:e})}return{lines:new Float32Array(f),edgeGroups:p}}function Xg(e,t){return!1}function Zg(e,t,n,r,i){try{return Qg(e,t,n,r,i)}catch(r){return console.warn(`brepkit: tessellateSolidGrouped failed (solidId=${t}), falling back to per-face:`,r),t_(e,t,n,i)}}function Qg(e,t,n,r,i){return typeof e.tessellateSolidGroupedBinary==`function`?$g(e,t,n,r,i,e.tessellateSolidGroupedBinary(t,n,i)):e_(e,t,n,r,i)}function $g(e,n,r,i,a,o){let s=o.positions,c=o.normals,l=o.indices,u=o.faceOffsets,d=A(e.getSolidFaces(n)),f=u.length-1;if(f!==d.length)throw Error(`faceOffsets/faceIds length mismatch: ${f} groups vs ${d.length} faces`);let p=[];for(let e=0;e<u.length-1;e++){let n=t(u,e),r=t(u,e+1)-n;r!==0&&p.push({start:n,count:r,faceHash:d[e]??0})}let m=new Float32Array;if(i){let t=s.length/3*2;try{let i=e.tessellateSolidUV(n,r,a),o=JSON.parse(i);m=o.uvs.length===t?new Float32Array(o.uvs):new Float32Array(t)}catch{m=new Float32Array(t)}}return{vertices:s,normals:c,triangles:l,uvs:m,faceGroups:p}}function e_(e,n,r,i,a){let o=e.tessellateSolidGrouped(n,r,a),s=JSON.parse(o),c=A(e.getSolidFaces(n)),l=s.faceOffsets.length-1;if(l!==c.length)throw Error(`faceOffsets/faceIds length mismatch: ${l} groups vs ${c.length} faces`);let u=[];for(let e=0;e<s.faceOffsets.length-1;e++){let n=t(s.faceOffsets,e),r=t(s.faceOffsets,e+1)-n;r!==0&&u.push({start:n,count:r,faceHash:c[e]??0})}let d=new Float32Array;if(i){let t=s.positions.length/3*2;try{let i=e.tessellateSolidUV(n,r,a),o=JSON.parse(i);d=o.uvs.length===t?new Float32Array(o.uvs):new Float32Array(t)}catch{d=new Float32Array(t)}}return{vertices:new Float32Array(s.positions),normals:new Float32Array(s.normals),triangles:new Uint32Array(s.indices),uvs:d,faceGroups:u}}function t_(e,t,n,r){let i=A(e.getSolidFaces(t)),a=[],o=[],s=[],c=[],l=[],u=0;for(let t of i)try{let i=e.tessellateFace(t,n,r),d=i.positions,f=i.normals,p=i.indices,m=d.length/3;if(m===0)continue;let h=s.length;for(let e of d)a.push(e);for(let e of f)o.push(e);for(let e of p)s.push(e+u);for(let e=0;e<m;e++)c.push(0,0);l.push({start:h,count:p.length,faceHash:t}),u+=m}catch(e){console.warn(`brepkit: face tessellation failed (faceId=${t}):`,e)}return{vertices:new Float32Array(a),normals:new Float32Array(o),triangles:new Uint32Array(s),uvs:new Float32Array(c),faceGroups:l}}function n_(e,t,n,r,i){let a=e.tessellateFace(t,n,i),o=a.positions,s=a.normals,c=a.indices,l=o.length/3,u=[];for(let e=0;e<l;e++)u.push(0,0);return{vertices:new Float32Array(o),normals:new Float32Array(s),triangles:new Uint32Array(c),uvs:new Float32Array(u),faceGroups:[{start:0,count:c.length,faceHash:r}]}}function r_(e){return{mesh:(t,n)=>Jg(e,t,n),meshEdges:(t,n,r)=>Yg(e,t,n,r),hasTriangulation:t=>Xg(e,t),meshShape:(e,t,n)=>{}}}function i_(e,t){if(t.length===0)return``;let n=[];for(let r of t){let t=Bf(e,r,`exportSTEP`);for(let r of t){let t=e.exportStep(r);n.push(new TextDecoder().decode(t))}}return n.join(`
8
8
  `)}function a_(e,n,r,i=De,a=Oe){let{vertices:o,triangles:s}=Jg(e,O(t(Bf(e,n,`exportSTL`),0)),{tolerance:i,angularTolerance:a,skipNormals:!0});return r?je(o,s):Me(o,s)}function o_(e,t){let n=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);return A(e.importStep(n)).map(O)}function s_(e,t){let n=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);return O(e.importStl(n))}function c_(e,t){if(t.length===0)return``;let n=[];for(let r of t){let t=Bf(e,r,`exportIGES`);for(let r of t){let t=e.exportIges(r);n.push(new TextDecoder().decode(t))}}return n.join(`
9
- `)}function l_(e,t){let n=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);return A(e.importIges(n)).map(O)}function u_(e,t,n){return t.length===0?``:i_(e,t.map(e=>e.shape))}function d_(e,t,n){let r=zf(t,`export3MF`);return Hf(e.export3mf(r,n))}function f_(e,t,n){let r=zf(t,`exportGLB`);return Hf(e.exportGlb(r,n))}function p_(e,t,n){let r=zf(t,`exportOBJ`);return Hf(e.exportObj(r,n))}function m_(e,t,n){let r=zf(t,`exportPLY`);return Hf(e.exportPly(r,n))}function h_(e,t){return A(e.import3mf(new Uint8Array(t))).map(e=>O(e))}function g_(e,t){return O(e.importObj(new Uint8Array(t)))}function __(e,t){return O(e.importGlb(new Uint8Array(t)))}function v_(e,t){let n=t;return n.type===`solid`?e.toBREP(n.id):(tp(`brep-non-solid`,`toBREP for non-solid shapes uses STEP format.`),i_(e,[t]))}function y_(e,t){if(typeof e.fromBREP==`function`&&t.trimStart().startsWith(`{`))return O(e.fromBREP(t));let n=o_(e,t)[0];if(!n)throw Error(`brepkit: fromBREP produced no shapes`);return n}function b_(e,t){return{__brepkit_xcaf:!0,shapes:t,delete:Af}}function x_(e,t,n){return t&&t.__brepkit_xcaf&&Array.isArray(t.shapes)?i_(e,t.shapes.map(e=>e.shape)):``}function S_(e,t,n){return i_(e,t.map(e=>e.shape))}function C_(e){return{exportSTEP:t=>i_(e,t),exportSTL:(t,n,r,i)=>a_(e,t,n,r,i),importSTEP:t=>o_(e,t),importSTL:t=>s_(e,t),exportIGES:t=>c_(e,t),importIGES:t=>l_(e,t),exportSTEPAssembly:(t,n)=>u_(e,t,n),export3MF:(t,n)=>d_(e,t,n),exportGLB:(t,n)=>f_(e,t,n),exportOBJ:(t,n)=>p_(e,t,n),exportPLY:(t,n)=>m_(e,t,n),import3MF:t=>h_(e,t),importOBJ:t=>g_(e,t),importGLB:t=>__(e,t),toBREP:t=>v_(e,t),fromBREP:t=>y_(e,t),createXCAFDocument:t=>b_(e,t),writeXCAFToSTEP:(t,n)=>x_(e,t,n),exportSTEPConfigured:(t,n)=>S_(e,t,n)}}function w_(e,t){return{x:e,y:t}}function T_(e,t){let n=Math.sqrt(e*e+t*t);if(n<1e-15)throw Error(`brepkit: createDirection2d called with zero-length vector`);return{x:e/n,y:t/n}}function E_(e,t){return{x:e,y:t}}function D_(e,t,n,r){return{px:e,py:t,dx:n,dy:r,delete:Af}}function O_(e){return e}function k_(e){return e}function A_(e,t,n,r){return te(e,t,n,r)}function j_(e,t,n,r){return ne(e,t,n,r)}function M_(e,t,n,r,i,a,o){return ae(e,t,n,r,i,a,o)}function N_(e,t,n,r,i,a,o,s,c){let l=ae(e,t,n,r,o,s,c),u=c!==!1,d=u?i:-i,f=u?a:-a;return f<d-1e-9&&(f+=2*Math.PI),{__bk2d:`trimmed`,basis:l,tStart:d,tEnd:f}}function P_(e){return oe(e)}function F_(e,t){let n=e.length,r=Math.min(3,n-1),i=[],a=[];i.push(0),a.push(r+1);let o=n-r-1;for(let e=1;e<=o;e++)i.push(e/(o+1)),a.push(1);return i.push(1),a.push(r+1),{__bk2d:`bspline`,poles:[...e],knots:i,multiplicities:a,degree:r,isPeriodic:!1}}function I_(e,t){return S(rp(e),t)}function L_(e,t){return{point:S(rp(e),t),tangent:C(rp(e),t)}}function R_(e){return w(rp(e))}function z_(e){return ee(ip(e))}function B_(e,t,n){return{__bk2d:`trimmed`,basis:rp(e),tStart:t,tEnd:n}}function V_(e){let t=e;switch(t.__bk2d){case`line`:{let e=t;e.ox+=e.dx*e.len,e.oy+=e.dy*e.len,e.dx=-e.dx,e.dy=-e.dy;break}case`circle`:case`ellipse`:{let e=t;e.sense=!e.sense;break}case`trimmed`:{let e=t;[e.tStart,e.tEnd]=[e.tEnd,e.tStart];break}case`bezier`:{let e=t;e.poles=[...e.poles].reverse();break}case`bspline`:{let e=t;e.poles=[...e.poles].reverse();let n=e.knots[0],r=e.knots[e.knots.length-1];n!==void 0&&r!==void 0&&(e.knots=e.knots.map(e=>n+r-e).reverse()),Array.isArray(e.weights)&&(e.weights=[...e.weights].reverse());break}default:break}}function H_(e){return JSON.parse(JSON.stringify(e))}function U_(e,t){let n=rp(e),r=w(n),i=[];for(let e=0;e<=30;e++){let a=r.first+(r.last-r.first)*e/30,[o,s]=S(n,a),[c,l]=C(n,a),u=Math.sqrt(c*c+l*l);u>1e-12?i.push([o-l/u*t,s+c/u*t]):i.push([o,s])}return F_(i)}function W_(e,t,n){return se(rp(e),t,n)}function G_(e,t,n,r){return ce(rp(e),t,n,r)}function K_(e,t,n,r){return le(rp(e),t,n,r)}function q_(e,t,n){return ue(rp(e),t,n)}function J_(e,t,n,r,i){return de(rp(e),t,n,r,i)}function Y_(e,t,n,r,i,a){return av(e,Q_(t,n,r,i,a))}function X_(e,t,n){return{m:e,tx:t,ty:n,delete:Af}}function Z_(){return X_([1,0,0,0,1,0,0,0,1],0,0)}function Q_(e,n,r,i,a){let o=Math.sqrt(r*r+i*i);if(o<1e-15)return Z_();let s=-i/o,c=r/o,l=a-1,u=[1+l*s*s,l*s*c,0,l*c*s,1+l*c*c,0,0,0,1];return X_(u,e-t(u,0)*e-t(u,1)*n,n-t(u,3)*e-t(u,4)*n)}function $_(e,t){return X_([1,0,0,0,1,0,0,0,1],e,t)}function ev(e,n,r,i,a,o,s){if(r===`axis`&&o!==void 0&&s!==void 0){let r=Math.sqrt(o*o+s*s),c=o/r,l=s/r,u=[2*c*c-1,2*c*l,0,2*c*l,2*l*l-1,0,0,0,1],d=i??e,f=a??n;return X_(u,d-t(u,0)*d-t(u,1)*f,f-t(u,3)*d-t(u,4)*f)}return X_([-1,0,0,0,-1,0,0,0,1],2*e,2*n)}function tv(e,t,n){let r=Math.cos(e),i=Math.sin(e);return X_([r,-i,0,i,r,0,0,0,1],t-r*t+i*n,n-i*t-r*n)}function nv(e,t,n){return X_([e,0,0,0,e,0,0,0,1],t*(1-e),n*(1-e))}function rv(e,t,n){e.tx=t,e.ty=n}function iv(e,n){let r=e.m,i=n.m,a=e=>t(r,e),o=e=>t(i,e);e.m=[a(0)*o(0)+a(1)*o(3)+a(2)*o(6),a(0)*o(1)+a(1)*o(4)+a(2)*o(7),a(0)*o(2)+a(1)*o(5)+a(2)*o(8),a(3)*o(0)+a(4)*o(3)+a(5)*o(6),a(3)*o(1)+a(4)*o(4)+a(5)*o(7),a(3)*o(2)+a(4)*o(5)+a(5)*o(8),a(6)*o(0)+a(7)*o(3)+a(8)*o(6),a(6)*o(1)+a(7)*o(4)+a(8)*o(7),a(6)*o(2)+a(7)*o(5)+a(8)*o(8)];let s=e.tx,c=e.ty,l=Number(n.tx)||0,u=Number(n.ty)||0;e.tx=a(0)*l+a(1)*u+s,e.ty=a(3)*l+a(4)*u+c}function av(e,n){let r=rp(e),i=n.m??[1,0,0,0,1,0,0,0,1],a=Number(n.tx)||0,o=Number(n.ty)||0,s=t(i,0),c=t(i,1),l=t(i,3),u=t(i,4);if(Math.abs(s-1)<1e-12&&Math.abs(u-1)<1e-12&&Math.abs(c)<1e-12&&Math.abs(l)<1e-12)return se(r,a,o);let d=w(r),f=[];for(let e=0;e<=20;e++){let[t,n]=S(r,d.first+(d.last-d.first)*e/20);f.push([s*t+c*n+a,l*t+u*n+o])}return oe(f)}function ov(e,t,n){let r=fe(rp(e),rp(t),n),i=r.segments.map(e=>Object.assign(e,{delete(){}}));return{points:r.points,segments:i}}function sv(e,t,n){let r=rp(e),i=w(r);if(r.__bk2d===`line`){let e=t-r.ox,a=n-r.oy,o=Math.max(i.first,Math.min(i.last,e*r.dx+a*r.dy)),[s,c]=S(r,o);return{param:o,distance:Math.sqrt((s-t)**2+(c-n)**2)}}if(r.__bk2d===`circle`){let e=Math.atan2(n-r.cy,t-r.cx),i=r.sense?e:-e;for(;i<0;)i+=2*Math.PI;for(;i>2*Math.PI;)i-=2*Math.PI;let[a,o]=S(r,i);return{param:i,distance:Math.sqrt((a-t)**2+(o-n)**2)}}if(!isFinite(i.first)||!isFinite(i.last))return null;let a=i.first,o=1/0,s=(i.last-i.first)/200;for(let e=0;e<=200;e++){let c=i.first+e*s,[l,u]=S(r,c),d=(l-t)**2+(u-n)**2;d<o&&(o=d,a=c)}for(let e=0;e<10;e++){let[e,o]=S(r,a),[s,c]=C(r,a),l=(e-t)*s+(o-n)*c,u=s*s+c*c;if(u<1e-20)break;let d=l/u,f=Math.max(i.first,Math.min(i.last,a-d));if(Math.abs(f-a)<1e-14)break;a=f}let[c,l]=S(r,a);return{param:a,distance:Math.sqrt((c-t)**2+(l-n)**2)}}function cv(e,t,n,r,i,a){let o=rp(e),s=rp(t),c=n,l=i,u=1/0;for(let e=0;e<=50;e++){let t=n+(r-n)*e/50,[d,f]=S(o,t);for(let e=0;e<=50;e++){let n=i+(a-i)*e/50,[r,o]=S(s,n),p=(r-d)**2+(o-f)**2;p<u&&(u=p,c=t,l=n)}}let d=c,f=l;for(let c=0;c<20;c++){let[c,l]=S(s,f),u=sv(e,c,l);if(u){let e=Math.max(n,Math.min(r,u.param)),t=Math.abs(e-d)<1e-12;if(d=e,t)break}let[p,m]=S(o,d),h=sv(t,p,m);if(h){let e=Math.max(i,Math.min(a,h.param)),t=Math.abs(e-f)<1e-12;if(f=e,t)break}}let[p,m]=S(o,d),[h,g]=S(s,f);return Math.sqrt((h-p)**2+(g-m)**2)}function lv(e,n,r,i){let a=rp(e),o=w(a),s=Math.max(3,{C0:1,C1:2,C2:3,C3:4}[r]??4),c=Math.max(100,i*10),l=[],u=1/0;for(let e=0;e<3&&u>n;e++){l=[];for(let e=0;e<=c;e++){let t=o.first+(o.last-o.first)*e/c;l.push(S(a,t))}u=0;for(let e=0;e<c;e++){let[n,r]=S(a,o.first+(o.last-o.first)*(e+.5)/c),i=t(l,e),s=t(l,e+1),d=(i[0]+s[0])/2,f=(i[1]+s[1])/2,p=Math.sqrt((n-d)**2+(r-f)**2);p>u&&(u=p)}u>n&&(c=Math.min(c*2,500))}return F_(l,{degMax:s})}function uv(e){let n=ip(e);if(n.__bk2d===`bezier`)return[e];if(n.__bk2d!==`bspline`)return uv(lv(e,1e-6,`C2`,10));let r=w(rp(e)),i=r.first,a=r.last,o=[];for(let e of n.knots)e>i+1e-12&&e<a-1e-12&&o.push(e);let s=[i,...o,a],c=[];for(let e=0;e<s.length-1;e++){let r=t(s,e),i=t(s,e+1),a=i-r;if(a<1e-15)continue;let o=S(n,r),l=S(n,i),u=C(n,r),d=C(n,i),f=a/3,p={__bk2d:`bezier`,poles:[o,[o[0]+u[0]*f,o[1]+u[1]*f],[l[0]-d[0]*f,l[1]-d[1]*f],l]};c.push(p)}return c.length>0?c:[e]}function dv(){return Ce()}function fv(e,t,n){we(ap(e),rp(t),n)}function pv(e){let t=ap(e);return{xMin:t.xMin,yMin:t.yMin,xMax:t.xMax,yMax:t.yMax}}function mv(e,t){let n=ap(e),r=ap(t);n.xMin=Math.min(n.xMin,r.xMin),n.yMin=Math.min(n.yMin,r.yMin),n.xMax=Math.max(n.xMax,r.xMax),n.yMax=Math.max(n.yMax,r.yMax)}function hv(e,t){let n=ap(e),r=ap(t);return n.xMax<r.xMin||r.xMax<n.xMin||n.yMax<r.yMin||r.yMax<n.yMin}function gv(e,t,n){let r=ap(e);return t<r.xMin||t>r.xMax||n<r.yMin||n>r.yMax}function _v(e){let t=ip(e);return t.__bk2d===`circle`?{cx:t.cx,cy:t.cy,radius:t.radius,isDirect:t.sense}:null}function vv(e){let t=ip(e);return t.__bk2d===`ellipse`?{majorRadius:t.majorRadius,minorRadius:t.minorRadius,xAxisAngle:t.xDirAngle,isDirect:t.sense}:null}function yv(e){let t=ip(e);return t.__bk2d===`bezier`?[...t.poles]:null}function bv(e){let t=ip(e);return t.__bk2d===`bezier`?t.poles.length-1:null}function xv(e){let t=ip(e);return t.__bk2d===`bspline`?{poles:[...t.poles],knots:[...t.knots],multiplicities:[...t.multiplicities],degree:t.degree,isPeriodic:t.isPeriodic}:null}function Sv(e){return xe(rp(e))}function Cv(e){return Se(e)}function wv(e,t){let n=rp(e),r=w(n),i=[r.first,...[...t].sort((e,t)=>e-t),r.last],a=[];for(let e=0;e<i.length-1;e++)a.push({__bk2d:`trimmed`,basis:n,tStart:i[e],tEnd:i[e+1]});return a}function Tv(e,n,r,i,a){let o=rp(n),s=[i[1]*a[2]-i[2]*a[1],i[2]*a[0]-i[0]*a[2],i[0]*a[1]-i[1]*a[0]],c=(e,t)=>[r[0]+e*a[0]+t*s[0],r[1]+e*a[1]+t*s[1],r[2]+e*a[2]+t*s[2]];if(o.__bk2d===`line`)return gh(e,c(o.ox,o.oy),c(o.ox+o.dx*o.len,o.oy+o.dy*o.len));if(o.__bk2d===`circle`||o.__bk2d===`trimmed`){let n=o;for(;n.__bk2d===`trimmed`;)n=n.basis;if(n.__bk2d===`circle`){let r=n,a=c(r.cx,r.cy),s=r.sense?i:[-i[0],-i[1],-i[2]],l=w(o),u;u=o.__bk2d===`trimmed`?Math.abs(o.tEnd-o.tStart):2*Math.PI;let d=u>Math.PI?4:u>Math.PI/2?2:1,f=(l.last-l.first)/d,p=[];for(let t=0;t<d;t++){let[n,r]=S(o,l.first+t*f),[i,u]=S(o,l.first+(t+1)*f);p.push(e.makeCircleArc3d(...c(n,r),...c(i,u),...a,...s))}return p.length===1?Pf(t(p,0)):Ff(e.makeWire(p,!1))}if(n.__bk2d===`ellipse`){let r=n,l=c(r.cx,r.cy),u=Math.cos(r.xDirAngle),d=Math.sin(r.xDirAngle),f=[u*a[0]+d*s[0],u*a[1]+d*s[1],u*a[2]+d*s[2]],p=w(o),m=p.last-p.first,h=m*1e-4,[g,_]=S(o,p.first),[v,y]=S(o,p.first+h),b=(g-r.cx)*(y-r.cy)-(_-r.cy)*(v-r.cx)>=0?i:[-i[0],-i[1],-i[2]],x=o.__bk2d===`trimmed`?Math.abs(o.tEnd-o.tStart):2*Math.PI,C=x>Math.PI?4:x>Math.PI/2?2:1,ee=m/C,te=[];for(let t=0;t<C;t++){let[n,i]=S(o,p.first+t*ee),[a,s]=S(o,p.first+(t+1)*ee);te.push(e.makeEllipseArc3d(...c(n,i),...c(a,s),...l,...b,...f,r.majorRadius,r.minorRadius))}return te.length===1?Pf(t(te,0)):Ff(e.makeWire(te,!1))}}if(o.__bk2d===`bezier`||o.__bk2d===`bspline`){let n=o.poles.map(([e,t])=>c(e,t));if(n.length===2)return gh(e,t(n,0),t(n,1));let r=Math.min(3,n.length-1),i=n.flatMap(([e,t,n])=>[e,t,n]);return Pf(e.interpolatePoints(i,r))}let l=w(o),u=[];for(let e=0;e<=100;e++){let[t,n]=S(o,l.first+(l.last-l.first)*e/100);u.push(c(t,n))}return Rh(e,u)}function Ev(e,t,r){if(!jf(r))throw Error(`brepkit: buildEdgeOnSurface requires a face handle as surface`);let i=k(r,`face`),a=rp(t),o=w(a),s=e.getSurfaceType(i)===`plane`?50:100,c=[];for(let t=0;t<=s;t++){let[r,l]=S(a,o.first+(o.last-o.first)*t/s);c.push(n(e.evaluateSurface(i,r,l)))}return Rh(e,c)}function Dv(e){return e}function Ov(e,n,r,i){let a=0;for(;e.length<r;){let o=[];for(let r=0;r<e.length-1;r++){let a=t(e,r),s=t(e,r+1),c=(a.t+s.t)/2,l=n(c),u=(a.uv[0]+s.uv[0])/2,d=(a.uv[1]+s.uv[1])/2;Math.sqrt((l[0]-u)**2+(l[1]-d)**2)>i&&o.push({index:r+1,t:c,uv:l})}if(o.length===0)break;let s=r-e.length;for(let n=o.length-1;n>=0&&s>0;n--){let r=t(o,n);e.splice(r.index,0,{t:r.t,uv:r.uv}),s--}if(a++,a>3)break}}function kv(e,n,r){let i=k(n,`edge`),a=k(r,`face`),o=e.getEdgeCurveParameters(i),s=o[0]??0,c=o[1]??1,l=[];for(let e=0;e<=20;e++)l.push(s+(c-s)*e/20);let u=n=>{let r=e.evaluateEdgeCurve(i,n),o=e.projectPointOnSurface(a,t(r,0),t(r,1),t(r,2));return[t(o,0),t(o,1)]},d=l.map(e=>({t:e,uv:u(e)}));Ov(d,u,80,.05);let f=d.map(e=>e.uv);if(f.length>=2)return F_(f);let p=e.getEdgeVertices(i);if(p.length>=6){let n=e.projectPointOnSurface(a,t(p,0),t(p,1),t(p,2)),r=e.projectPointOnSurface(a,t(p,3),t(p,4),t(p,5));return te(t(n,0),t(n,1),t(r,0),t(r,1))}throw Error(`brepkit: extractCurve2dFromEdge: degenerate edge (${p.length} coords)`)}function Av(e,t,n){return e}function jv(e,n,r){if(n.length>=1){let r=hp(e,n[0],`edge`);if(r.length===4){let n=[],i=[];for(let a of r){let r=k(a,`edge`),o=e.getEdgeCurveParameters(r),s=t(o,0),c=t(o,1),l=[];for(let n=0;n<=10;n++){let i=s+(c-s)*n/10,a=e.evaluateEdgeCurve(r,i);l.push(t(a,0),t(a,1),t(a,2))}n.push(...l),i.push(11)}try{return Nf(e.fillCoonsPatch(n,i))}catch(e){console.warn(`brepkit: Coons patch failed, falling back:`,e)}}}let i=n[0];if(!i)throw Error(`fillSurface: no wires provided`);return Ah(e,i)}function Mv(e){return{createPoint2d:(e,t)=>w_(e,t),createDirection2d:(e,t)=>T_(e,t),createVector2d:(e,t)=>E_(e,t),createAxis2d:(e,t,n,r)=>D_(e,t,n,r),wrapCurve2dHandle:e=>O_(e),createCurve2dAdaptor:e=>k_(e),makeLine2d:(e,t,n,r)=>A_(e,t,n,r),makeCircle2d:(e,t,n,r)=>j_(e,t,n,r),makeArc2dThreePoints:(e,t,n,r,i,a)=>re(e,t,n,r,i,a),makeArc2dTangent:(e,t,n,r,i,a)=>ie(e,t,n,r,i,a),makeEllipse2d:(e,t,n,r,i,a,o)=>M_(e,t,n,r,i,a,o),makeEllipseArc2d:(e,t,n,r,i,a,o,s,c)=>N_(e,t,n,r,i,a,o,s,c),makeBezier2d:e=>P_(e),makeBSpline2d:(e,t)=>F_(e,t),evaluateCurve2d:(e,t)=>I_(e,t),evaluateCurve2dD1:(e,t)=>L_(e,t),getCurve2dBounds:e=>R_(e),getCurve2dType:e=>z_(e),trimCurve2d:(e,t,n)=>B_(e,t,n),reverseCurve2d:e=>{V_(e)},copyCurve2d:e=>H_(e),offsetCurve2d:(e,t)=>U_(e,t),translateCurve2d:(e,t,n)=>W_(e,t,n),rotateCurve2d:(e,t,n,r)=>G_(e,t,n,r),scaleCurve2d:(e,t,n,r)=>K_(e,t,n,r),mirrorCurve2dAtPoint:(e,t,n)=>q_(e,t,n),mirrorCurve2dAcrossAxis:(e,t,n,r,i)=>J_(e,t,n,r,i),affinityTransform2d:(e,t,n,r,i,a)=>Y_(e,t,n,r,i,a),createIdentityGTrsf2d:()=>Z_(),createAffinityGTrsf2d:(e,t,n,r,i)=>Q_(e,t,n,r,i),createTranslationGTrsf2d:(e,t)=>$_(e,t),createMirrorGTrsf2d:(e,t,n,r,i,a,o)=>ev(e,t,n,r,i,a,o),createRotationGTrsf2d:(e,t,n)=>tv(e,t,n),createScaleGTrsf2d:(e,t,n)=>nv(e,t,n),setGTrsf2dTranslationPart:(e,t,n)=>{rv(e,t,n)},multiplyGTrsf2d:(e,t)=>{iv(e,t)},transformCurve2dGeneral:(e,t)=>av(e,t),intersectCurves2d:(e,t,n)=>ov(e,t,n),projectPointOnCurve2d:(e,t,n)=>sv(e,t,n),distanceBetweenCurves2d:(e,t,n,r,i,a)=>cv(e,t,n,r,i,a),approximateCurve2dAsBSpline:(e,t,n,r)=>lv(e,t,n,r),decomposeBSpline2dToBeziers:e=>uv(e),createBoundingBox2d:()=>dv(),addCurveToBBox2d:(e,t,n)=>{fv(e,t,n)},getBBox2dBounds:e=>pv(e),mergeBBox2d:(e,t)=>{mv(e,t)},isBBox2dOut:(e,t)=>hv(e,t),isBBox2dOutPoint:(e,t,n)=>gv(e,t,n),getCurve2dCircleData:e=>_v(e),getCurve2dEllipseData:e=>vv(e),getCurve2dBezierPoles:e=>yv(e),getCurve2dBezierDegree:e=>bv(e),getCurve2dBSplineData:e=>xv(e),serializeCurve2d:e=>Sv(e),deserializeCurve2d:e=>Cv(e),splitCurve2d:(e,t)=>wv(e,t),liftCurve2dToPlane:(t,n,r,i)=>Tv(e,t,n,r,i),buildEdgeOnSurface:(t,n)=>Ev(e,t,n),extractSurfaceFromFace:e=>Dv(e),extractCurve2dFromEdge:(t,n)=>kv(e,t,n),buildCurves3d:e=>{},fixWireOnFace:(e,t,n)=>Av(e,t,n),fillSurface:(t,n)=>jv(e,t,n)}}function Nv(e,t){let n=t;if(n.type===`solid`)return e.volume(k(t),Xf);if(n.type===`compound`){let n=hp(e,t,`solid`),r=0;for(let t of n)r+=e.volume(k(t),Xf);return r}return 0}function Pv(e,t){let n=t;if(n.type===`face`)return e.faceArea(k(t),Xf);if(n.type===`solid`)return e.surfaceArea(k(t),Xf);if(n.type===`compound`){let n=hp(e,t,`face`),r=0;for(let t of n)r+=e.faceArea(k(t),Xf);return r}return 0}function Fv(e,t){let n=t;if(n.type===`edge`)return e.edgeLength(k(t));if(n.type===`face`)return e.facePerimeter(k(t));if(n.type===`wire`)return e.wireLength(n.id);throw Error(`brepkit: length() requires an edge, wire, or face`)}function Iv(e,n){let r=e.getEdgeVertices(n);return[(t(r,0)+t(r,3))/2,(t(r,1)+t(r,4))/2,(t(r,2)+t(r,5))/2]}function Lv(e,t){let r=t;if(r.type===`solid`)return n(e.centerOfMass(k(t),Xf));if(r.type===`face`){let n=Mp(e,t);return Fp(e,t,(n.uMin+n.uMax)/2,(n.vMin+n.vMax)/2)}if(r.type===`edge`)return Iv(e,r.id);if(r.type===`vertex`)return Ap(e,t);let i=hp(e,t,`vertex`);if(i.length>0){let t=0,n=0,r=0;for(let a of i){let i=Ap(e,a);t+=i[0],n+=i[1],r+=i[2]}return[t/i.length,n/i.length,r/i.length]}return[0,0,0]}function Rv(e,t){let n=t;return n.type===`edge`?Iv(e,n.id):Lv(e,t)}function zv(e,t){let r=t;if(r.type===`solid`){let r=e.boundingBox(k(t));return{min:n(r,0),max:n(r,3)}}if(r.type===`vertex`){let n=Ap(e,t);return{min:[...n],max:[...n]}}let i=hp(e,t,`vertex`);if(i.length===0)return{min:[0,0,0],max:[0,0,0]};let a=Ap(e,i[0]),o=a[0],s=a[1],c=a[2],l=a[0],u=a[1],d=a[2];for(let t=1;t<i.length;t++){let n=Ap(e,i[t]);n[0]<o&&(o=n[0]),n[0]>l&&(l=n[0]),n[1]<s&&(s=n[1]),n[1]>u&&(u=n[1]),n[2]<c&&(c=n[2]),n[2]>d&&(d=n[2])}return{min:[o,s,c],max:[l,u,d]}}function Bv(e,r,i){let a=r,o=i;if(a.type===`solid`&&o.type===`solid`){let r=e.solidToSolidDistance(a.id,o.id);return{value:t(r,0),point1:n(r,1),point2:n(r,4)}}if(a.type===`vertex`&&(o.type===`solid`||o.type===`face`||o.type===`edge`)){let r=n(e.getVertexPosition(a.id)),i=o.type===`solid`?e.pointToSolidDistance(r[0],r[1],r[2],o.id):o.type===`face`?e.pointToFaceDistance(r[0],r[1],r[2],o.id):e.pointToEdgeDistance(r[0],r[1],r[2],o.id);return{value:t(i,0),point1:r,point2:n(i,1)}}let s=r=>{if(r.type===`vertex`)return n(e.getVertexPosition(r.id));if(r.type===`solid`){let n=e.boundingBox(r.id);return[(t(n,0)+t(n,3))/2,(t(n,1)+t(n,4))/2,(t(n,2)+t(n,5))/2]}return[0,0,0]},c=s(a),l=s(o),u=l[0]-c[0],d=l[1]-c[1],f=l[2]-c[2];return{value:Math.sqrt(u*u+d*d+f*f),point1:c,point2:l}}function Vv(e,r,i,a){let o=k(r,`face`),s=e.measureCurvatureAtSurface(o,i,a);if(s.length<8)throw Error(`brepkit: measureCurvatureAtSurface returned ${s.length} values, expected 8`);let c=t(s,0),l=t(s,1);return{gaussian:c*l,mean:(c+l)/2,max:Math.max(c,l),min:Math.min(c,l),maxDirection:n(s,2),minDirection:n(s,5)}}function Hv(e,n){let r=e.tessellateFace(k(n,`face`),.1),i=r.positions,a=r.indices,o=0,s=0,c=0,l=0;for(let e=0;e<a.length;e+=3){let n=t(a,e)*3,r=t(a,e+1)*3,u=t(a,e+2)*3,d=t(i,n),f=t(i,n+1),p=t(i,n+2),m=t(i,r),h=t(i,r+1),g=t(i,r+2),_=t(i,u),v=t(i,u+1),y=t(i,u+2),b=(d+m+_)/3,x=(f+h+v)/3,S=(p+g+y)/3,C=m-d,w=h-f,ee=g-p,te=_-d,ne=v-f,re=y-p,ie=.5*Math.sqrt((w*re-ee*ne)**2+(ee*te-C*re)**2+(C*ne-w*te)**2);o+=b*ie,s+=x*ie,c+=S*ie,l+=ie}return l<1e-30?[0,0,0]:[o/l,s/l,c/l]}function Uv(e,t){let n=n=>Bv(e,t,n);return{distanceTo(e){return n(e)},dispose(){}}}function Wv(e,t,n=!1){let r=t,i=r.type===`edge`||r.type===`wire`||r.type===`face`;return{volume:Nv(e,t),area:Pv(e,t),length:n&&i?Fv(e,t):0,centerOfMass:Lv(e,t),boundingBox:zv(e,t)}}function Gv(e){return{volume:t=>Nv(e,t),area:t=>Pv(e,t),length:t=>Fv(e,t),centerOfMass:t=>Lv(e,t),linearCenterOfMass:t=>Rv(e,t),boundingBox:t=>zv(e,t),distance:(t,n)=>Bv(e,t,n),surfaceCurvature:(t,n,r)=>Vv(e,t,n,r),surfaceCenterOfMass:t=>Hv(e,t),createDistanceQuery:t=>Uv(e,t),measureBulk:(t,n)=>Wv(e,t,n)}}function Kv(e){return e.sketchNew()}function qv(e,t,n,r,i){return e.sketchAddPoint(t,n,r,i)}function Jv(e,t,n){e.sketchAddConstraint(t,n)}function Yv(e,t,n,r){return e.sketchSolve(t,n,r)}function Xv(e,t,n,r,i){return e.sketchAddArc(t,n,r,i)}function Zv(e,t){let n=e.sketchDof(t);return typeof n==`string`?n:String(n)}function Qv(e){return{sketchNew:()=>Kv(e),sketchAddPoint:(t,n,r,i)=>qv(e,t,n,r,i),sketchAddArc:(t,n,r,i)=>Xv(e,t,n,r,i),sketchAddConstraint:(t,n)=>{Jv(e,t,n)},sketchSolve:(t,n,r)=>Yv(e,t,n,r),sketchDof:t=>Zv(e,t)}}function $v(e,t,n,r){return O(e.extrude(k(t,`face`),n[0],n[1],n[2],r))}function ey(e,t,n,r){if(n&&typeof n==`object`&&`origin`in n&&`direction`in n){let{origin:i,direction:a}=n,o=180/Math.PI*r;return o>360&&(o=360),O(e.revolve(k(t,`face`),i[0],i[1],i[2],a[0],a[1],a[2],o))}throw Error(`brepkit: revolve requires axis with origin and direction`)}function ty(e,t,n,r,i){let a=180/Math.PI*i;return a>360&&(a=360),O(e.revolve(k(t,`face`),n[0],n[1],n[2],r[0],r[1],r[2],a))}function ny(e,t,n,r,i){(n!==void 0||r!==void 0||i!==void 0)&&tp(`loft-options`,`Loft options (ruled, startShape, endShape) not supported; ignored.`);let a=t.map(t=>{let n=t;return n.type===`wire`?e.makeFaceFromWire(n.id):k(t,`face`)});return O(e.loft(a))}function ry(e){switch(e){case 0:return`rmf`;case 1:return`rightCorner`;case 2:return`roundCorner`;default:return}}function iy(e,t,n,r){let i=r?.transitionMode===void 0?void 0:ry(r.transitionMode),a=t,o=a.type===`wire`?e.makeFaceFromWire(a.id):k(t,`face`);if(n.type===`wire`){let t=hp(e,n,`edge`).map(e=>k(e,`edge`));if(i&&t.length===1){let n=t[0];if(n!==void 0)return O(e.sweepWithOptions(o,n,i,[],0,`transformed`))}return i&&t.length>1&&tp(`sweep-transition-multi-edge`,`Sweep transition mode not supported for multi-edge wires; ignored.`),O(e.sweepAlongEdges(o,t))}if(i){let t=k(n,`edge`);return O(e.sweepWithOptions(o,t,i,[],0,`transformed`))}let s=km(e,n);if(!s)throw Error(`brepkit: sweep spine must be an edge or wire`);return O(e.sweep(o,s.degree,s.knots,s.controlPoints,s.weights))}function ay(e,t,n){let r=t,i=r.type===`wire`?e.makeFaceFromWire(r.id):k(t,`face`);if(n.type===`wire`){let t=hp(e,n,`edge`).map(e=>k(e,`edge`));return O(e.sweepAlongEdges(i,t))}let a=km(e,n);if(!a)throw Error(`brepkit: pipe spine must be an edge or wire`);return O(e.pipe(i,a.degree,a.knots,a.controlPoints,a.weights))}function oy(e,t,n,r,i,a,o){let s=k(t,`face`);return O(e.helicalSweep(s,n[0],n[1],n[2],r[0],r[1],r[2],i,a,o))}function sy(e,t,n,r,i,a){let o=k(t,`face`),s=k(n,`edge`);return O(e.sweepWithOptions(o,s,r,i,a,`transformed`))}function cy(e){switch(e){case`right`:return`rightCorner`;case`round`:return`roundCorner`;case`transformed`:return`rmf`;default:return}}function ly(e,t,n){return n?{shape:e,firstShape:t,lastShape:t}:e}function uy(e,t,n,r){try{return O(e.sweepWithOptions(t,n,r,[],0,`transformed`))}catch(e){console.warn(`brepkit: sweepWithOptions failed, falling back to sweepSmooth/simplePipe:`,e);return}}function dy(e,t){try{if(t.type!==`wire`)return{edgeId:k(t,`edge`)};let n=hp(e,t,`edge`);if(n.length===1){let e=n[0];return e?{edgeId:k(e,`edge`)}:void 0}tp(`sweepPipeShell-transition-multi-edge`,`sweepPipeShell transition mode not supported for multi-edge wires; ignored.`);return}catch(e){console.warn(`brepkit: resolveContactModeEdge failed for unexpected spine type, falling through:`,e);return}}function fy(e,t,n,r){let i=dy(e,n);if(i)return uy(e,t,i.edgeId,r)}function py(e,t,n){let r=km(e,n);if(!(!r||r.degree<=1))try{return O(e.sweepSmooth(t,r.degree,r.knots,r.controlPoints,r.weights))}catch(e){console.warn(`brepkit: sweepSmooth failed, falling back to simplePipe:`,e);return}}function my(e,t,n,r){let i=t,a=i.type===`wire`?e.makeFaceFromWire(i.id):k(t,`face`),o=!!(r&&r.shellMode),s=r?.transitionMode,c=s?cy(s):void 0;if(c){let r=fy(e,a,n,c);if(r)return ly(r,t,o)}return ly(py(e,a,n)||ay(e,t,n),t,o)}function hy(e,t,n){let r=t.map(t=>{let n=t;return n.type===`wire`?e.makeFaceFromWire(n.id):k(t,`face`)});try{let t={};if(n?.ruled!==void 0&&(t.ruled=n.ruled),n?.solid!==void 0&&(t.solid=n.solid),n?.tolerance!==void 0&&(t.tolerance=n.tolerance),n?.startVertex){let r=e.getVertexPosition(k(n.startVertex,`vertex`));t.startPoint=[r[0],r[1],r[2]]}if(n?.endVertex){let r=e.getVertexPosition(k(n.endVertex,`vertex`));t.endPoint=[r[0],r[1],r[2]]}return O(e.loftWithOptions(r,JSON.stringify(t)))}catch(e){console.warn(`brepkit: loftWithOptions failed, falling back to smooth/basic loft:`,e)}if(!n?.ruled)try{return O(e.loftSmooth(r))}catch(e){console.warn(`brepkit: loftSmooth failed, falling back to basic loft:`,e)}return ny(e,t)}function gy(e,t,n,r){let i={type:`extrusionLaw`,profile:t,length:n,endFactor:r,Trim(e,t,n){return i},delete:Af};return i}function _y(e,t,n,r,i,a,o){if(i!==null){let r=$v(e,n,Pp(e,n,0,0),i);return o?Km(e,t,r):r}return t}function vy(e){return{extrude:(t,n,r)=>$v(e,t,n,r),revolve:(t,n,r)=>ey(e,t,n,r),revolveVec:(t,n,r,i)=>ty(e,t,n,r,i),loft:(t,n,r,i)=>ny(e,t,n,r,i),sweep:(t,n,r)=>iy(e,t,n,r),simplePipe:(t,n)=>ay(e,t,n),helicalSweep:(t,n,r,i,a,o)=>oy(e,t,n,r,i,a,o),sweepWithOptions:(t,n,r,i,a)=>sy(e,t,n,r,i,a),sweepPipeShell:(t,n,r)=>my(e,t,n,r),loftAdvanced:(t,n)=>hy(e,t,n),buildExtrusionLaw:(t,n,r)=>gy(e,t,n,r),draftPrism:(t,n,r,i,a,o)=>_y(e,t,n,r,i,a,o)}}function yy(e){return{dispose:()=>{},executeBatch:t=>e.executeBatch(t),checkpoint:()=>e.checkpoint(),checkpointCount:()=>e.checkpointCount(),restoreCheckpoint:t=>{e.restore(t)},discardCheckpoint:t=>{e.discardCheckpoint(t)}}}var by=class{oc;kernelId=`brepkit`;capabilities=a;bk;constructor(e){this.bk=e,this.oc=e;let t=this.bk;Object.assign(this,ih(t),Jh(t),vy(t),fg(t),wm(t),r_(t),C_(t),Gv(t),kp(t),dm(t),Vm(t),qg(t),Qv(t),Mv(t),yy(t))}};function xy(e){throw Error(`manifold: ${e} is not implemented`)}var Sy=new Set(`makeBox.makeBoxWithCorners.makeCylinder.makeSphere.makeCone.makeTorus.makeEllipsoid.makeFuse.makeCut.makeCommon.translateShape.rotateShape.scaleShape.mirrorShape.transformShape.generalTransform.generalTransformNonOrthogonal.gridPattern.extrude.revolve.revolveVec.loft.loftAdvanced.sweep.simplePipe.sweepWithOptions.sweepPipeShell.helicalSweep.draftPrism.fillet.chamfer.chamferDistAngle.shell.thicken.offset.filletVariable.draft.defeature.simplify.reverseShape.hull.hullFromPoints.sewAndSolidify.profileEdge.profileWire.profileFace`.split(`.`));function Cy(e){return Sy.has(e)}function j(e,t,n){return{op:e,params:t,inputs:n,replayable:Cy(e)&&n.every(e=>e.replayable)}}function M(e,t){return{manifold:e,node:t}}function N(e){return e.manifold}function wy(e){return typeof e?.translate==`function`?e.translate([0,0,0]):e}function P(e){return e.node}function Ty(e){if(e&&typeof e==`object`&&`manifold`in e&&`node`in e)return e}var Ey=[`occt`,`occt-wasm`];function Dy(){for(let e of Ey)try{return F(e)}catch{}}function Oy(e){let t=Dy();if(!t)throw new c(`manifold: ${e} requires a registered occt kernel; none is available`);return t}var ky=new WeakMap,Ay=[0,0,0],jy=[0,0,1];function My(e){return Math.hypot(e[0],e[1],e[2])}function Ny(e){let t=My(e);return t===0?[...jy]:[e[0]/t,e[1]/t,e[2]/t]}function Py(e){let[t,n,r]=Ny(e);return[0,180/Math.PI*Math.atan2(Math.hypot(t,n),r),180/Math.PI*Math.atan2(n,t)]}function Fy(e){let t=e.Manifold;function n(e,t,n){let r=e;return n[0]===0&&n[1]===0&&n[2]>0||(r=r.rotate(Py(n))),(t[0]!==0||t[1]!==0||t[2]!==0)&&(r=r.translate(t)),r}return{makeBox:(e,n,r)=>M(t.cube([e,n,r],!1),j(`makeBox`,{width:e,height:n,depth:r},[])),makeBoxFromCorners:(e,n)=>{let r=[Math.abs(n[0]-e[0]),Math.abs(n[1]-e[1]),Math.abs(n[2]-e[2])],i=[Math.min(e[0],n[0]),Math.min(e[1],n[1]),Math.min(e[2],n[2])];return M(t.cube(r,!1).translate(i),j(`makeBoxWithCorners`,{p1:e,p2:n},[]))},makeCylinder:(e,r,i=Ay,a=jy)=>M(n(t.cylinder(r,e,e,0,!1),i,a),j(`makeCylinder`,{radius:e,height:r,center:i,direction:a},[])),makeSphere:(e,n=Ay)=>{let r=t.sphere(e,0);return(n[0]!==0||n[1]!==0||n[2]!==0)&&(r=r.translate(n)),M(r,j(`makeSphere`,{radius:e,center:n},[]))},makeCone:(e,r,i,a=Ay,o=jy)=>M(n(t.cylinder(i,e,r,0,!1),a,o),j(`makeCone`,{radius1:e,radius2:r,height:i,center:a,direction:o},[])),makeTorus:(r,i,a=Ay,o=jy)=>{let s=Math.max(3,e.getCircularSegments(i)),c=[];for(let e=0;e<s;e++){let t=e/s*Math.PI*2;c.push([r+i*Math.cos(t),i*Math.sin(t)])}return M(n(t.revolve([c],0),a,o),j(`makeTorus`,{majorRadius:r,minorRadius:i,center:a,direction:o},[]))},makeEllipsoid:(e,n,r)=>M(t.sphere(1,0).scale([e,n,r]),j(`makeEllipsoid`,{aLength:e,bLength:n,cLength:r},[])),makeRectangle:()=>xy(`makeRectangle`)}}function Iy(e){return e}function Ly(e,t,n){switch(n){case`cut`:case`subtract`:case`difference`:return e.subtract(t);case`intersect`:case`common`:case`intersection`:return e.intersect(t);default:return e.add(t)}}function Ry(e){let t=P(Iy(e)).params,n=t.normal,r=t.origin;if(!n||!r)throw Error(`manifold: section/split plane must carry normal+origin params`);return{normal:n,offset:n[0]*r[0]+n[1]*r[1]+n[2]*r[2]}}function zy(e){let t=new Uint32Array(e.triVerts),n=e.vertProperties.length/3,r=new Float32Array(n*3);for(let t=0;t<n;t++)r[t*3]=e.vertProperties[t*3]??0,r[t*3+1]=e.vertProperties[t*3+1]??0,r[t*3+2]=e.vertProperties[t*3+2]??0;return{vertices:r,normals:new Float32Array,triangles:t,uvs:new Float32Array,faceGroups:[{start:0,count:t.length,faceHash:0}]}}function By(e){let t=e.Manifold;function n(e,t,n){let r=Iy(e),i=Iy(t);return M(N(r).add(N(i)),j(`makeFuse`,{},[P(r),P(i)]))}function r(e,t,n){let r=Iy(e),i=Iy(t);return M(N(r).subtract(N(i)),j(`makeCut`,{},[P(r),P(i)]))}function i(e,t,n){let r=Iy(e),i=Iy(t);return M(N(r).intersect(N(i)),j(`makeCommon`,{},[P(r),P(i)]))}function a(e,n){if(e.length===0)throw Error(`manifold: fuseAll requires at least one shape`);let r=e.map(Iy),[i]=r;if(i===void 0)throw Error(`manifold: fuseAll requires at least one shape`);return r.length===1?i:M(t.union(r.map(N)),j(`makeFuse`,{},r.map(P)))}function o(e,n,r){let i=Iy(e);if(n.length===0)return i;let a=n.map(Iy);return M(t.difference([N(i),...a.map(N)]),j(`makeCut`,{},[P(i),...a.map(P)]))}function s(e,t,n){let r=Iy(e),{normal:i,offset:a}=Ry(t),[o]=N(r).splitByPlane(i,a);return M(o,j(`section`,{normal:i,offset:a},[P(r),P(Iy(t))]))}function c(e,n){let r=Iy(e),[i]=n;if(i===void 0)throw Error(`manifold: split requires at least one tool`);let a=Iy(i),{normal:o,offset:s}=Ry(i),[c,l]=N(r).splitByPlane(o,s);return M(t.union([c,l]),j(`split`,{normal:o,offset:s},[P(r),P(a)]))}function l(e,t,n){let r=[],i=Iy(e),a=Iy(t);return(N(i)===void 0||N(i).isEmpty())&&r.push({operand:`base`,issue:`null-shape`,message:`Base shape is empty`}),(N(a)===void 0||N(a).isEmpty())&&r.push({operand:`tool`,issue:`null-shape`,message:`Tool shape is empty`}),{valid:r.length===0,issues:r}}function u(n,r,i,a,o,s){let c=new e.Mesh({numProp:3,vertProperties:new Float32Array(n),triVerts:new Uint32Array(r)}),l=new e.Mesh({numProp:3,vertProperties:new Float32Array(i),triVerts:new Uint32Array(a)});return zy(Ly(t.ofMesh(c),t.ofMesh(l),o).getMesh())}return{fuse:n,cut:r,intersect:i,section:s,fuseAll:a,cutAll:o,split:c,checkBoolean:l,meshBoolean:u}}function Vy(e){return e}function Hy(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}function Uy(e){let t=Math.hypot(e[0],e[1],e[2]);return t<1e-12?[0,0,1]:[e[0]/t,e[1]/t,e[2]/t]}function Wy(e,t,n){let r=Hy();return r[12]=e,r[13]=t,r[14]=n,r}function Gy(e,t,n){let r=e,[i,a,o]=Uy(t),s=Math.cos(r),c=Math.sin(r),l=1-s,u=l*i*i+s,d=l*i*a+c*o,f=l*i*o-c*a,p=l*i*a-c*o,m=l*a*a+s,h=l*a*o+c*i,g=l*i*o+c*a,_=l*a*o-c*i,v=l*o*o+s,y=Hy();return y[0]=u,y[1]=d,y[2]=f,y[4]=p,y[5]=m,y[6]=h,y[8]=g,y[9]=_,y[10]=v,y[12]=n[0]-(u*n[0]+p*n[1]+g*n[2]),y[13]=n[1]-(d*n[0]+m*n[1]+_*n[2]),y[14]=n[2]-(f*n[0]+h*n[1]+v*n[2]),y}function Ky(e,t){let n=Hy();return n[0]=t,n[5]=t,n[10]=t,n[12]=e[0]*(1-t),n[13]=e[1]*(1-t),n[14]=e[2]*(1-t),n}function qy(e,t){let[n,r,i]=Uy(t),a=1-2*n*n,o=1-2*r*r,s=1-2*i*i,c=-2*n*r,l=-2*n*i,u=-2*r*i,d=Hy();d[0]=a,d[1]=c,d[2]=l,d[4]=c,d[5]=o,d[6]=u,d[8]=l,d[9]=u,d[10]=s;let f=e[0]*n+e[1]*r+e[2]*i;return d[12]=2*f*n,d[13]=2*f*r,d[14]=2*f*i,d}function Jy(e,t){let n=Hy();return n[0]=e[0],n[1]=e[3],n[2]=e[6],n[4]=e[1],n[5]=e[4],n[6]=e[7],n[8]=e[2],n[9]=e[5],n[10]=e[8],n[12]=t[0],n[13]=t[1],n[14]=t[2],n}function Yy(e,t,n,r,i){return M(e.transform(t),j(n,r,[i]))}function Xy(e,t,n,r){let i=Vy(e);return Yy(N(i),Wy(t,n,r),`translateShape`,{x:t,y:n,z:r},P(i))}function Zy(e,t,n=[0,0,1],r=[0,0,0]){let i=Vy(e);return Yy(N(i),Gy(t,n,r),`rotateShape`,{angle:t,axis:n,center:r},P(i))}function Qy(e,t,n){let r=Vy(e);return Yy(N(r),qy(t,n),`mirrorShape`,{origin:t,normal:n},P(r))}function $y(e,t,n){let r=Vy(e);return Yy(N(r),Ky(t,n),`scaleShape`,{center:t,factor:n},P(r))}function eb(e,t){if(!Array.isArray(t)||t.length!==16)throw Error(`manifold: transform expects a 16-element column-major matrix`);let n=Vy(e);return Yy(N(n),t,`transformShape`,{matrix:[...t]},P(n))}function tb(e,t,n,r){let i=Vy(e);return Yy(N(i),Jy(t,n),`generalTransform`,{linear:t,translation:n,isOrthogonal:r},P(i))}function nb(e,t,n){let r=Vy(e);return Yy(N(r),Jy(t,n),`generalTransformNonOrthogonal`,{linear:t,translation:n},P(r))}function rb(e){let t=Hy();for(let n of e)t=lb(n.type===`translate`?Wy(n.x,n.y,n.z):Gy(n.angle*Math.PI/180,n.axis??[0,0,1],n.center??[0,0,0]),t);return{handle:t,dispose:()=>{}}}function ib(e,t,n,r){let i=[e];for(let a=1;a<r;a++){let r=n*a;i.push(Xy(e,t[0]*r,t[1]*r,t[2]*r))}return i}function ab(e,t,n,r,i){let a=[e];for(let o=1;o<i;o++)a.push(Zy(e,r*o*Math.PI/180,n,t));return a}function ob(e,t,n,r,i,a,o,s){let c=Vy(t),l=[],u=[];for(let e=0;e<o;e++)for(let t=0;t<s;t++){let o=n[0]*i*e+r[0]*a*t,s=n[1]*i*e+r[1]*a*t,d=n[2]*i*e+r[2]*a*t;l.push(N(c).transform(Wy(o,s,d))),u.push(P(c))}return M(l.length===1?l[0]:e.Manifold.union(l),j(`gridPattern`,{directionX:n,directionY:r,spacingX:i,spacingY:a,countX:o,countY:s},u))}function sb(e){return e.map(e=>{switch(e.type){case`translate`:return Xy(e.shape,e.x,e.y,e.z);case`rotate`:return Zy(e.shape,e.angle*Math.PI/180,e.axis,e.center);case`scale`:return $y(e.shape,e.center,e.factor);case`mirror`:return Qy(e.shape,e.origin,e.normal)}})}function cb(e){return{composeTransform:rb,transform:eb,locate:eb,translate:Xy,rotate:Zy,mirror:Qy,scale:$y,generalTransform:tb,generalTransformNonOrthogonal:nb,positionOnCurve:()=>xy(`positionOnCurve`),linearPattern:ib,circularPattern:ab,gridPattern:(t,n,r,i,a,o,s)=>ob(e,t,n,r,i,a,o,s),transformBatch:sb}}function lb(e,t){let n=Hy();for(let r=0;r<4;r++)for(let i=0;i<4;i++){let a=0;for(let n=0;n<4;n++){let o=e[n*4+i]??0,s=t[r*4+n]??0;a+=o*s}n[r*4+i]=a}return n}var ub=2*Math.PI,db=e=>Math.hypot(e[0],e[1],e[2]),fb=(e,t)=>[e[0]-t[0],e[1]-t[1],e[2]-t[2]];function pb(e){return db(fb(e.p2,e.p1))}function mb(e,t){let n=e.map(e=>[e[0],e[1],e[2]]);for(let e=1;e<n.length;e++)for(let r=0;r<n.length-e;r++){let e=n[r]??[0,0,0],i=n[r+1]??[0,0,0];n[r]=[e[0]*(1-t)+i[0]*t,e[1]*(1-t)+i[1]*t,e[2]*(1-t)+i[2]*t]}return n[0]??[0,0,0]}function hb(e){return e.k===`line`?`LINE`:e.k===`bezier`?`BEZIER`:e.k===`helix`?`BSPLINE`:Math.abs(e.rx-e.ry)<1e-9*Math.max(1,e.rx)?`CIRCLE`:`ELLIPSE`}function gb(e){return e.k===`line`?{first:0,last:pb(e)}:e.k===`conic`?{first:e.a0,last:e.a1}:e.k===`helix`?{first:0,last:ub*e.turns}:{first:0,last:1}}function _b(e,t){if(e.k===`line`){let n=t/(pb(e)||1);return[e.p1[0]+(e.p2[0]-e.p1[0])*n,e.p1[1]+(e.p2[1]-e.p1[1])*n,e.p1[2]+(e.p2[2]-e.p1[2])*n]}if(e.k===`bezier`)return mb(e.points,t);if(e.k===`helix`){let n=Math.cos(t),r=Math.sin(t),i=e.pitch*t/ub;return[e.center[0]+e.radius*(n*e.x[0]+r*e.y[0])+i*e.axis[0],e.center[1]+e.radius*(n*e.x[1]+r*e.y[1])+i*e.axis[1],e.center[2]+e.radius*(n*e.x[2]+r*e.y[2])+i*e.axis[2]]}let n=Math.cos(t),r=Math.sin(t);return[e.center[0]+e.rx*n*e.x[0]+e.ry*r*e.y[0],e.center[1]+e.rx*n*e.x[1]+e.ry*r*e.y[1],e.center[2]+e.rx*n*e.x[2]+e.ry*r*e.y[2]]}function vb(e,t){let n;if(e.k===`line`)n=fb(e.p2,e.p1);else if(e.k===`bezier`){let r=mb(e.points,Math.max(0,t-1e-4));n=fb(mb(e.points,Math.min(1,t+1e-4)),r)}else if(e.k===`helix`){let r=Math.cos(t),i=Math.sin(t),a=e.pitch/ub;n=[e.radius*(-i*e.x[0]+r*e.y[0])+a*e.axis[0],e.radius*(-i*e.x[1]+r*e.y[1])+a*e.axis[1],e.radius*(-i*e.x[2]+r*e.y[2])+a*e.axis[2]]}else{let r=Math.cos(t),i=Math.sin(t);n=[-e.rx*i*e.x[0]+e.ry*r*e.y[0],-e.rx*i*e.x[1]+e.ry*r*e.y[1],-e.rx*i*e.x[2]+e.ry*r*e.y[2]]}let r=db(n)||1;return[n[0]/r,n[1]/r,n[2]/r]}function yb(e){if(e.k===`line`)return pb(e);if(e.k===`helix`){let t=ub*e.radius;return e.turns*Math.sqrt(t*t+e.pitch*e.pitch)}if(e.k===`conic`){let t=Math.abs(e.a1-e.a0);if(Math.abs(e.rx-e.ry)<1e-9*Math.max(1,e.rx))return e.rx*t;if(Math.abs(t-ub)<1e-9){let t=e.rx,n=e.ry,r=(t-n)*(t-n)/((t+n)*(t+n));return Math.PI*(t+n)*(1+3*r/(10+Math.sqrt(4-3*r)))}return Cb(t=>_b(e,t),e.a0,e.a1,256)}return Cb(t=>_b(e,t),0,1,128)}function bb(e){return e.k===`conic`&&Math.abs(Math.abs(e.a1-e.a0)-ub)<1e-9}function xb(e){return bb(e)}function Sb(e){return e.k===`conic`?ub:0}function Cb(e,t,n,r){let i=0,a=e(t);for(let o=1;o<=r;o++){let s=e(t+(n-t)*o/r);i+=db(fb(s,a)),a=s}return i}function wb(e){return e}function Tb(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function Eb(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 Db(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function Ob(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function kb(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function Ab(e){return Math.hypot(e[0],e[1],e[2])}function jb(e){let t=Ab(e);return t<1e-12?[0,0,1]:[e[0]/t,e[1]/t,e[2]/t]}function Mb(e){return jb(Eb(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function Nb(e){let t=jb(e),n=Mb(t);return{xAxis:n,yAxis:jb(Eb(t,n))}}function Pb(e){let t=0;for(let n=0;n<e.length;n++){let r=e[n]??[0,0],i=e[(n+1)%e.length]??[0,0];t+=r[0]*i[1]-i[0]*r[1]}return t/2}function Fb(e){return Pb(e)<0?[...e].reverse():e}function Ib(e){return Pb(e)>0?[...e].reverse():e}function Lb(e){return e.node?.params}function Rb(e){let t=wb(e),n=Lb(t),r=n?.outline??n?.polygon??n?.points;if(r&&r.length>=3){let e=n?.origin??[0,0,0],t=Fb(r.map(e=>[e[0],e[1]])),i=(n?.holes)?.filter(e=>e.length>=3).map(e=>Ib(e.map(e=>[e[0],e[1]])));if(n?.xAxis&&n.yAxis)return{outline:t,holes:i,origin:e,xAxis:n.xAxis,yAxis:n.yAxis};let{xAxis:a,yAxis:o}=Nb(n?.normal??[0,0,1]);return{outline:t,holes:i,origin:e,xAxis:a,yAxis:o}}return zb(t)}function zb(e){let t=N(e)?.getMesh?.();if(!t)throw Error(`manifold: profile carries no recorded outline and no mesh to derive one`);let n=t.numProp,r=Math.floor(t.vertProperties.length/n),i=[],a=0;for(let e=0;e<r;e++)i.push([t.vertProperties[e*n]??0,t.vertProperties[e*n+1]??0]),a+=t.vertProperties[e*n+2]??0;a/=Math.max(1,r);let o=Bb(i);return{outline:Fb(o.length>=3?o:[[-.5,-.5],[.5,-.5],[0,.5]]),origin:[0,0,a],xAxis:[1,0,0],yAxis:[0,1,0]}}function Bb(e){let t=[...e].sort((e,t)=>e[0]===t[0]?e[1]-t[1]:e[0]-t[0]);if(t.length<3)return[...t];let n=(e,t,n)=>(t[0]-e[0])*(n[1]-e[1])-(t[1]-e[1])*(n[0]-e[0]),r=[];for(let e of t){for(;r.length>=2&&n(r[r.length-2]??e,r[r.length-1]??e,e)<=0;)r.pop();r.push(e)}let i=[];for(let e=t.length-1;e>=0;e--){let r=t[e]??[0,0];for(;i.length>=2&&n(i[i.length-2]??r,i[i.length-1]??r,r)<=0;)i.pop();i.push(r)}return r.pop(),i.pop(),[...r,...i]}function Vb(e){let t=[];for(let n=1;n+1<e;n++)t.push(0,n,n+1);return t}function Hb(e,t){let n=e.length;if(n<2||t<=n)return e.map(e=>[e[0],e[1]]);let r=[],i=0;for(let t=0;t<n;t++){let a=e[t]??[0,0],o=e[(t+1)%n]??[0,0],s=Math.hypot(o[0]-a[0],o[1]-a[1]);r.push(s),i+=s}if(i===0)return e.map(e=>[e[0],e[1]]);let a=t-n,o=r.map(e=>a*e/i),s=o.map(e=>Math.floor(e)),c=s.reduce((e,t)=>e+t,0),l=o.map((e,t)=>({i:t,f:e-Math.floor(e)})).sort((e,t)=>t.f-e.f);for(let e=0;c<a;e++,c++){let t=l[e%l.length]?.i??0;s[t]=(s[t]??0)+1}let u=[];for(let t=0;t<n;t++){let r=e[t]??[0,0],i=e[(t+1)%n]??[0,0];u.push([r[0],r[1]]);let a=s[t]??0;for(let e=1;e<=a;e++){let t=e/(a+1);u.push([r[0]+(i[0]-r[0])*t,r[1]+(i[1]-r[1])*t])}}return u}function Ub(e,t,n=1){return e.outline.map(e=>{let r=e[0]*n,i=e[1]*n;return[t.origin[0]+t.xAxis[0]*r+t.yAxis[0]*i,t.origin[1]+t.xAxis[1]*r+t.yAxis[1]*i,t.origin[2]+t.xAxis[2]*r+t.yAxis[2]*i]})}function Wb(e,t){if(t.length<2)throw Error(`manifold: skinning requires at least two rings`);let n=t[0]?.length??0;if(n<3)throw Error(`manifold: skinning requires rings of at least three points`);let r=[];for(let e of t){if(e.length!==n)throw Error(`manifold: skinning requires all rings to share a vertex count`);for(let t of e)r.push(t[0],t[1],t[2])}let i=Kb(t.length,n),a=new e.Mesh({numProp:3,vertProperties:Float32Array.from(r),triVerts:Uint32Array.from(i)});return Gb(e,new e.Manifold(a))}function Gb(e,t){if(typeof t.volume!=`function`||t.volume()>=0)return t;let n=t.getMesh(),r=n.triVerts;for(let e=0;e+2<r.length;e+=3){let t=r[e+1]??0;r[e+1]=r[e+2]??0,r[e+2]=t}let i=new e.Mesh({numProp:n.numProp,vertProperties:n.vertProperties,triVerts:r}),a=new e.Manifold(i);return typeof t.delete==`function`&&t.delete(),a}function Kb(e,t){let n=[];for(let r=0;r+1<e;r++){let e=r*t,i=(r+1)*t;for(let r=0;r<t;r++){let a=(r+1)%t;n.push(e+r,e+a,i+a),n.push(e+r,i+a,i+r)}}let r=Vb(t);for(let e=0;e<r.length;e+=3)n.push(r[e]??0,r[e+2]??0,r[e+1]??0);let i=(e-1)*t,a=Vb(t);for(let e=0;e<a.length;e+=3)n.push(i+(a[e]??0),i+(a[e+1]??0),i+(a[e+2]??0));return n}function qb(e,t){let n=[];if(e.length===0)return n;let r=t=>{let n=e[Math.max(0,t-1)]??e[t]??[0,0,0];return jb(Db(e[Math.min(e.length-1,t+1)]??e[t]??[0,0,0],n))},i=r(0),a=jb(Db(t,kb(i,Tb(t,i))));Ab(a)<1e-9&&(a=Mb(i)),n.push({origin:e[0]??[0,0,0],xAxis:a,yAxis:jb(Eb(i,a)),tangent:i});for(let t=1;t<e.length;t++){let o=e[t-1]??[0,0,0],s=e[t]??[0,0,0],c=Db(s,o),l=Tb(c,c),u=a;if(l>1e-18){let e=Db(a,kb(c,2/l*Tb(c,a))),n=Db(i,kb(c,2/l*Tb(c,i))),o=Db(r(t),n),s=Tb(o,o);u=s>1e-18?Db(e,kb(o,2/s*Tb(o,e))):e}let d=r(t),f=jb(Db(u,kb(d,Tb(u,d)))),p=jb(Eb(d,f));n.push({origin:s,xAxis:f,yAxis:p,tangent:d}),i=d,a=f}return n}var Jb=24,Yb=24,Xb=null;function Zb(e){let t=Xb?Xb(Math.max(Math.abs(e),1e-6)):Jb;return Math.max(Jb,t)}var Qb=[0,0,0],$b=1e-6,ex={delete:()=>{},isEmpty:()=>!1};function tx(e,t){return e[t]??Qb}function nx(e,t=1){return Math.max(2,Math.ceil(Math.abs(e)/(2*Math.PI)*Zb(t)))}function rx(e){return jb(Eb(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function ix(e,t,n,r,i,a){let o=jb(t),s=a?jb(a):rx(o),c=jb(Eb(o,s)),l=i-r,u=nx(l,n),d=[];for(let t=0;t<=u;t++){let i=r+l*t/u;d.push(Ob(e,Ob(kb(s,n*Math.cos(i)),kb(c,n*Math.sin(i)))))}return d}function ax(e,t,n){let r=Db(t,e),i=Db(n,e),a=Eb(r,i);if(Ab(a)<1e-12)return[e,t,n];let o=jb(a),s=Tb(r,r),c=Tb(i,i),l=Tb(r,i),u=2*(s*c-l*l);if(Math.abs(u)<1e-18)return[e,t,n];let d=c*(s-l)/u,f=s*(c-l)/u,p=Ob(e,Ob(kb(r,d),kb(i,f))),m=Ab(Db(e,p)),h=jb(Db(e,p)),g=jb(Eb(o,h)),_=(e=>Math.atan2(Tb(Db(e,p),g),Tb(Db(e,p),h)))(n);return _<0&&(_+=2*Math.PI),ix(p,o,m,0,_,h)}function ox(e){let t=[];for(let n=0;n<=Yb;n++){let r=n/Yb,i=e.map(e=>[...e]);for(let e=1;e<i.length;e++)for(let t=0;t<i.length-e;t++){let e=tx(i,t),n=tx(i,t+1);i[t]=[e[0]*(1-r)+n[0]*r,e[1]*(1-r)+n[1]*r,e[2]*(1-r)+n[2]*r]}t.push(tx(i,0))}return t}function sx(e){let t=0,n=0,r=0;for(let i=0;i<e.length;i++){let a=tx(e,i),o=tx(e,(i+1)%e.length);t+=(a[1]-o[1])*(a[2]+o[2]),n+=(a[2]-o[2])*(a[0]+o[0]),r+=(a[0]-o[0])*(a[1]+o[1])}let i=[t,n,r];return Ab(i)<1e-12?[0,0,1]:jb(i)}function cx(e,t){return Ab(Db(e,t))<$b}function lx(e){let t=e[0];if(!t)return[];let n=[...t];for(let t=1;t<e.length;t++){let r=e[t]??[];if(r.length===0)continue;let i=tx(n,n.length-1),a=cx(tx(r,0),i),o=cx(tx(r,r.length-1),i);!a&&o&&(r=[...r].reverse());let s=cx(tx(r,0),i);for(let e=+!!s;e<r.length;e++)n.push(tx(r,e))}return n.length>1&&cx(tx(n,0),tx(n,n.length-1))&&n.pop(),n}function ux(e){let t=sx(e),n=tx(e,0),r=e.length>1?jb(Db(tx(e,1),n)):rx(t);r=jb(Db(r,kb(t,Tb(r,t)))),Ab(r)<1e-9&&(r=rx(t));let i=jb(Eb(t,r));return{outline:Fb(e.map(e=>{let t=Db(e,n);return[Tb(t,r),Tb(t,i)]})),origin:n,xAxis:r,yAxis:i}}var dx=12;function fx(e,t){let[n,r]=e.curveParameters(t),i=dx;try{e.curveType(t)===`line`&&(i=1)}catch{}let a=[];for(let o=0;o<=i;o++)a.push(e.curvePointAtParam(t,n+(r-n)*o/i));return a}function px(e,t){return lx(e.iterShapes(t,`edge`).map(t=>fx(e,t)))}function mx(e){let t=e.getCircularSegments;typeof t==`function`&&(Xb=e=>t(e));function n(e,t){return M(ex,j(`profileEdge`,t?{pts:e,curve:t}:{pts:e},[]))}function r(e,t){let n=jb(e),r=t?jb(t):rx(n);return{x:r,y:jb(Eb(n,r))}}function i(e,t,n){let r=Db(t,e),i=Db(n,e),a=Eb(r,i);if(Ab(a)<1e-12)return;let o=jb(a),s=Tb(r,r),c=Tb(i,i),l=Tb(r,i),u=2*(s*c-l*l);if(Math.abs(u)<1e-18)return;let d=c*(s-l)/u,f=s*(c-l)/u,p=Ob(e,Ob(kb(r,d),kb(i,f))),m=Ab(Db(e,p)),h=jb(Db(e,p)),g=jb(Eb(o,h)),_=Math.atan2(Tb(Db(n,p),g),Tb(Db(n,p),h));return _<0&&(_+=2*Math.PI),{k:`conic`,center:p,x:h,y:g,rx:m,ry:m,a0:0,a1:_}}function a(e){let t=Ty(e);if(t){let e=t.node.params;return e?.ring??e?.pts??[]}let n=Dy();return n?fx(n,e):[]}function o(e){let t=[];for(let n of e){let e=Ty(n);e&&t.push(P(e))}return t}function s(e){let t=lx(e.map(e=>a(e)));return M(ex,j(`profileWire`,{ring:t,...t.length>=3?ux(t):void 0},o(e)))}function c(e,t){let{outline:n,origin:r,xAxis:i,yAxis:a}=ux(e);return M(ex,j(`profileFace`,{outline:n,origin:r,xAxis:i,yAxis:a},t?[t]:[]))}function l(e){let t=Ty(e);if(t){let e=t.node.params?.ring??[];if(e.length>=3)return c(e,P(t))}let n=Dy();return c(n?px(n,e):[],t?P(t):void 0)}function u(e,t){let n=Ty(e),r=n?.node?.params??{},i=r.origin??Qb,a=r.xAxis??[1,0,0],s=r.yAxis??[0,1,0],c=e=>{let t=Db(e,i);return[Tb(t,a),Tb(t,s)]},l=[];for(let e of t){let t=Ty(e),n;if(t)n=t.node.params?.ring??[];else{let t=Dy();n=t?px(t,e):[]}n.length>=3&&l.push(n.map(c))}let u=[...r.holes??[],...l],d=n?[P(n),...o(t)]:o(t);return M(ex,j(`profileFace`,{outline:r.outline??[],holes:u,origin:i,xAxis:a,yAxis:s},d))}function d(e,t,n,r,i){let a=jb(t),o=i?jb(i):rx(a),s=jb(Eb(a,o)),c=[],l=Zb(Math.max(n,r));for(let t=0;t<=l;t++){let i=2*Math.PI*t/l;c.push(Ob(e,Ob(kb(o,n*Math.cos(i)),kb(s,r*Math.sin(i)))))}return c}return{makeVertex:(e,t,r)=>n([[e,t,r]]),makeLineEdge:(e,t)=>n([e,t],{k:`line`,p1:e,p2:t}),makeCircleEdge:(e,t,i)=>{let{x:a,y:o}=r(t);return n(ix(e,t,i,0,2*Math.PI),{k:`conic`,center:e,x:a,y:o,rx:i,ry:i,a0:0,a1:2*Math.PI})},makeCircleArc:(e,t,i,a,o)=>{let{x:s,y:c}=r(t);return n(ix(e,t,i,a,o),{k:`conic`,center:e,x:s,y:c,rx:i,ry:i,a0:a,a1:o})},makeArcEdge:(e,t,r)=>n(ax(e,t,r),i(e,t,r)),makeEllipseEdge:(e,t,i,a,o)=>{let{x:s,y:c}=r(t,o);return n(d(e,t,i,a,o),{k:`conic`,center:e,x:s,y:c,rx:i,ry:a,a0:0,a1:2*Math.PI})},makeBezierEdge:e=>n(ox(e),{k:`bezier`,points:e.map(e=>[...e])}),makeTangentArc:(e,t,r)=>n([e,r],{k:`line`,p1:e,p2:r}),makeHelixWire:(e,t,r,i=[0,0,0],a=[0,0,1],o=!1)=>{let s=jb(a),c=rx(s),l=jb(Eb(s,c)),u=o?kb(l,-1):l,d=e===0?0:t/e,f={k:`helix`,center:i,axis:s,x:c,y:u,radius:r,pitch:e,turns:d},p=Math.max(8,Math.ceil(d*Jb)),m=[];for(let e=0;e<=p;e++)m.push(_b(f,2*Math.PI*d*e/p));return n(m,f)},makeWire:e=>s(e),makeWireFromMixed:e=>s(e),makeFace:l,addHolesInFace:u,makePolygonFace:e=>c(e)}}function hx(e){let t=e.Manifold,n=mx(e);function r(e,n){let r=e.map(e=>[e.x,e.y,e.z]);return M(t.hull(r),j(`hullFromPoints`,{points:r,tolerance:n},[]))}function i(e,n){let r=e.map(e=>N(e));return M(t.hull(r),j(`hull`,{tolerance:n},e.map(e=>P(e))))}function a(e){let n=e.map(e=>N(e)),r=n[0];if(!r)throw Error(`manifold: makeCompound requires at least one input shape`);return M(n.length===1?r:t.union(n),j(`makeCompound`,{},e.map(e=>P(e))))}function o(e,t){let n=e[0];return n||xy(`sewAndSolidify (no input faces on manifold kernel)`),M(N(n),j(`sewAndSolidify`,{tolerance:t},e.map(e=>P(e))))}return{makeVertex:(e,t,r)=>n.makeVertex(e,t,r),makeEdge:()=>xy(`makeEdge`),makeWire:e=>n.makeWire(e),makeFace:(e,t)=>n.makeFace(e,t),makeLineEdge:(e,t)=>n.makeLineEdge(e,t),makeCircleEdge:(e,t,r)=>n.makeCircleEdge(e,t,r),makeCircleArc:(e,t,r,i,a)=>n.makeCircleArc(e,t,r,i,a),makeArcEdge:(e,t,r)=>n.makeArcEdge(e,t,r),makeEllipseEdge:(e,t,r,i,a)=>n.makeEllipseEdge(e,t,r,i,a),makeEllipseArc:()=>xy(`makeEllipseArc`),makeBezierEdge:e=>n.makeBezierEdge(e),makeTangentArc:(e,t,r)=>n.makeTangentArc(e,t,r),makeHelixWire:(e,t,r,i,a,o)=>n.makeHelixWire(e,t,r,i,a,o),makeWireFromMixed:e=>n.makeWireFromMixed(e),makeCompound:a,solidFromShell:()=>xy(`solidFromShell`),hull:i,hullFromPoints:r,buildSolidFromFaces:()=>xy(`buildSolidFromFaces`),makeNonPlanarFace:()=>xy(`makeNonPlanarFace`),addHolesInFace:(e,t)=>n.addHolesInFace(e,t),removeHolesFromFace:()=>xy(`removeHolesFromFace`),makeFaceOnSurface:()=>xy(`makeFaceOnSurface`),bsplineSurface:(e,t,n)=>Oy(`bsplineSurface`).bsplineSurface(e,t,n),triangulatedSurface:(e,t,n)=>Oy(`triangulatedSurface`).triangulatedSurface(e,t,n),buildTriFace:()=>xy(`buildTriFace`),sewAndSolidify:o,createPoint3d:()=>xy(`createPoint3d`),createDirection3d:()=>xy(`createDirection3d`),createVector3d:()=>xy(`createVector3d`),createAxis1:()=>xy(`createAxis1`),createAxis2:()=>xy(`createAxis2`),createAxis3:()=>xy(`createAxis3`)}}var gx=Math.PI/180;function _x(e){return e}function vx(e){let t=180/Math.PI*e;return t>360?360:t}function yx(e){let t=e;if(t&&typeof t.X==`function`&&typeof t.Y==`function`&&typeof t.Z==`function`)return[t.X(),t.Y(),t.Z()]}function bx(e){if(e&&typeof e==`object`){let t=e;if(`origin`in t&&`direction`in t)return{origin:t.origin,direction:t.direction};let n=e;if(typeof n.Location==`function`&&typeof n.Direction==`function`){let e=yx(n.Location()),t=yx(n.Direction());if(e&&t)return{origin:e,direction:t}}}}function xx(e){return e.outline.map(e=>[e[0],e[1]])}function Sx(e){return{outline:e.outline,origin:e.origin,xAxis:e.xAxis,yAxis:e.yAxis}}function Cx(e){return{origin:e.origin,xAxis:e.xAxis,yAxis:e.yAxis,tangent:jb(Eb(e.xAxis,e.yAxis))}}function wx(e){let t=0;for(let n of e.outline)t=Math.max(t,Math.hypot(n[0],n[1]));return t||1}function Tx(e){let t=N(e)?.getMesh?.();if(!t)return[];let n=t.numProp,r=Math.floor(t.vertProperties.length/n),i=[];for(let e=0;e<r;e++)i.push([t.vertProperties[e*n]??0,t.vertProperties[e*n+1]??0,t.vertProperties[e*n+2]??0]);return i}function Ex(e,t){let n=_x(e),r=n.node?.params,i=r?.path??r?.points;if(i&&i.length>=2)return i.map(e=>[e[0],e[1],e[2]]);let a=Tx(n);if(a.length>=2)return a;let o=[],s=Math.max(2,t);for(let e=0;e<s;e++)o.push([0,0,e/(s-1)]);return o}function Dx(e){return e?.node??j(`spine`,{},[])}function Ox(e,t,n){let r=t.xAxis,i=t.yAxis,a=t.origin,o=[r[0],r[1],r[2],0,i[0],i[1],i[2],0,n[0],n[1],n[2],0,a[0],a[1],a[2],1];return e.transform(o)}function kx(e,t,n){let r=jb(n);return e.outline.map(n=>{let i=Db(Ob(e.origin,Ob(kb(e.xAxis,n[0]),kb(e.yAxis,n[1]))),t),a=i[0]*r[0]+i[1]*r[1]+i[2]*r[2];return[Ab(Db(i,kb(r,a))),a]})}function Ax(e,t,n){let r=e,i=jb(n);if(!(Math.abs(i[0])<1e-9&&Math.abs(i[2])<1e-9&&i[1]>0)){let e=Math.acos(Math.max(-1,Math.min(1,i[1])))*(180/Math.PI),t=Eb([0,1,0],i);Ab(t)<1e-9&&(t=[1,0,0]),t=jb(t),r=r.rotate([t[0]*e,t[1]*e,t[2]*e])}return(t[0]!==0||t[1]!==0||t[2]!==0)&&(r=r.translate([t[0],t[1],t[2]])),r}function jx(e,t,n,r,i){let a=jb(t),{xAxis:o,yAxis:s}=Nb(a),c=i*2*Math.PI,l=Math.max(8,Math.ceil(Math.abs(i)*24)),u=r*i,d=[];for(let t=0;t<=l;t++){let r=t/l,i=c*r,f=Ob(kb(o,n*Math.cos(i)),kb(s,n*Math.sin(i)));d.push(Ob(e,Ob(f,kb(a,u*r))))}return d}function Mx(e){if(e.length!==0)return t=>{let n=t*(e.length-1),r=Math.floor(n),i=Math.min(e.length-1,r+1),a=n-r;return(e[r]??1)*(1-a)+(e[i]??1)*a}}function Nx(e,t,n,r){let i=Rb(t),a=jb([n[0],n[1],n[2]]),o=Ab([n[0]*r,n[1]*r,n[2]*r]),s=[xx(i),...(i.holes??[]).map(e=>e.map(e=>[e[0],e[1]]))];return M(Ox(Gb(e,e.Manifold.extrude(s,o)),i,a),j(`extrude`,{outline:i.outline,holes:i.holes,origin:i.origin,xAxis:i.xAxis,yAxis:i.yAxis,direction:[n[0],n[1],n[2]],length:r},[P(_x(t))]))}function Px(e,t,n,r,i,a,o){let s=Rb(t),c=vx(i),l=kx(s,n,r);return M(Ax(e.Manifold.revolve([l],0,c),n,r),j(a,o,[P(_x(t))]))}function Fx(e,t){let n=e.length;if(n===0||t.length!==n)return e;let r=0,i=1/0;for(let a=0;a<n;a++){let o=0;for(let r=0;r<n&&o<i;r++){let i=e[(r+a)%n]??[0,0,0],s=t[r]??[0,0,0],c=i[0]-s[0],l=i[1]-s[1],u=i[2]-s[2];o+=c*c+l*l+u*u}o<i&&(i=o,r=a)}if(r===0)return e;let a=[];for(let t=0;t<n;t++)a.push(e[(t+r)%n]??[0,0,0]);return a}function Ix(e,t,n,r){if(t.length<2)throw Error(`manifold: loft requires at least two profiles`);let i=t.map(Rb),a=i.reduce((e,t)=>Math.max(e,t.outline.length),0),o=i.map(e=>Ub({...e,outline:Hb(e.outline,a)},Cx(e)));for(let e=1;e<o.length;e++)o[e]=Fx(o[e]??[],o[e-1]??[]);return M(Wb(e,o),j(n,{sections:i.map(Sx),...r},t.map(e=>P(_x(e)))))}function Lx(e,t,n,r,i,a,o){let s=Rb(t),c=qb(n,s.xAxis),l=c.length;return M(Wb(e,c.map((e,t)=>{let n=o?o(l>1?t/(l-1):0):1;return Ub(s,e,n)})),j(i,{section:Sx(s),path:n.map(e=>[e[0],e[1],e[2]]),...a},[P(_x(t)),r]))}function Rx(e,t,n,r,i,a){if(r===null)return t;let o=Rb(n),s=jb(Eb(o.xAxis,o.yAxis)),c=Math.tan(i*gx),l={origin:Ob(o.origin,kb(s,r)),xAxis:o.xAxis,yAxis:o.yAxis,tangent:s},u=1+c*r/wx(o),d=Wb(e,[Ub(o,Cx(o),1),Ub(o,l,u)]),f=j(`draftPrism`,{outline:o.outline,origin:o.origin,xAxis:o.xAxis,yAxis:o.yAxis,height:r,angleDeg:i,fuse:a},[P(_x(n))]);if(a){let e=_x(t);return M(N(e).add(d),j(`makeFuse`,{},[P(e),f]))}return M(d,f)}function zx(e){return{revolve:(t,n,r)=>{let i=bx(n);if(!i)throw Error(`manifold: revolve could not read the axis; pass {origin,direction}, a gp_Ax1, or use revolveVec`);let{origin:a,direction:o}=i;return Px(e,t,a,o,r,`revolve`,{...Sx(Rb(t)),axisOrigin:[a[0],a[1],a[2]],axisDirection:[o[0],o[1],o[2]],angleDeg:vx(r)})},revolveVec:(t,n,r,i)=>Px(e,t,n,r,i,`revolveVec`,{...Sx(Rb(t)),center:[n[0],n[1],n[2]],direction:[r[0],r[1],r[2]],angleDeg:vx(i)})}}function Bx(e){return{sweep:(t,n,r)=>{let i={};return r?.transitionMode!==void 0&&(i.transitionMode=r.transitionMode),Lx(e,t,Ex(n,16),Dx(n),`sweep`,i)},simplePipe:(t,n)=>Lx(e,t,Ex(n,16),Dx(n),`simplePipe`,{}),sweepWithOptions:(t,n,r,i,a)=>Lx(e,t,Ex(n,Math.max(2,a||16)),Dx(n),`sweepWithOptions`,{contactMode:r,scaleValues:[...i],segments:a},Mx(i)),sweepPipeShell:(t,n,r)=>{let i={};r?.transitionMode!==void 0&&(i.transitionMode=r.transitionMode);let a=Lx(e,t,Ex(n,16),Dx(n),`sweepPipeShell`,i);return r?.shellMode?{shape:a,firstShape:t,lastShape:t}:a},helicalSweep:(t,n,r,i,a,o)=>Lx(e,t,jx(n,r,i,a,o),Dx(t),`helicalSweep`,{axisOrigin:[n[0],n[1],n[2]],axisDirection:[r[0],r[1],r[2]],radius:i,pitch:a,turns:o})}}function Vx(e){return{extrude:(t,n,r)=>Nx(e,t,n,r),...zx(e),loft:(t,n)=>Ix(e,t,`loft`,{ruled:n??!1}),loftAdvanced:(t,n)=>Ix(e,t,`loftAdvanced`,{solid:n?.solid??!0,ruled:n?.ruled??!1,tolerance:n?.tolerance}),...Bx(e),draftPrism:(t,n,r,i,a,o)=>Rx(e,t,n,i,a,o),buildExtrusionLaw:(e,t,n)=>({type:`extrusionLaw`,profile:e,length:t,endFactor:n}),loftBatch:()=>xy(`loftBatch`),extrudeBatch:t=>t.map(t=>Nx(e,t.face,t.direction,t.length))}}var Hx=16;function Ux(e,t,n){if(!(n>0))return wy(t);let r=Kx(e,n);return r===void 0||typeof t?.minkowskiDifference!=`function`||typeof t?.minkowskiSum!=`function`?wy(t):t.minkowskiDifference(r).minkowskiSum(r)}function Wx(e,t,n){if(n===0)return wy(t);let r=Kx(e,Math.abs(n));return r===void 0?wy(t):n>0?typeof t?.minkowskiSum==`function`?t.minkowskiSum(r):wy(t):typeof t?.minkowskiDifference==`function`?t.minkowskiDifference(r):wy(t)}function Gx(e,t,n,r){if(n===0)return wy(t);if(r)return Wx(e,t,Math.abs(n));let i=Wx(e,t,-Math.abs(n));return typeof t?.subtract==`function`?t.subtract(i):wy(t)}function Kx(e,t){let n=e?.Manifold;if(typeof n?.sphere==`function`)return n.sphere(t,Hx)}function qx(e){return e}function Jx(e){let t=e;if(t!=null){if(typeof t.index==`number`)return t.index;if(typeof t.id==`number`)return t.id}}function Yx(e){let{min:t,max:n}=e;if(!(t===void 0||n===void 0||t.length<3||n.length<3))return[((t[0]??0)+(n[0]??0))/2,((t[1]??0)+(n[1]??0))/2,((t[2]??0)+(n[2]??0))/2]}function Xx(e){let t=e;if(t?.box!==void 0)return Yx(t.box);let n=(e?.manifold)?.boundingBox?.();return n===void 0?void 0:Yx(n)}function Zx(e){let t=e.length;if(t===0)return{kind:`all`,count:t};let n=[];for(let t of e){let e=Xx(t);if(e===void 0){n.length=0;break}n.push(e)}if(n.length===t)return{kind:`witness`,count:t,points:n};let r=[];for(let t of e){let e=Jx(t);if(e===void 0){r.length=0;break}r.push(e)}return r.length===t?{kind:`index`,count:t,indices:r}:{kind:`all`,count:t}}function Qx(e){return typeof e==`function`&&xy(`fillet (per-edge radius callback)`),e}function $x(e){return typeof e==`number`?e:e[0]}function eS(e){let t=e.match(/[-+]?\d*\.?\d+/);return t?Number(t[0]):0}function tS(e,t,n,r,i){let a=qx(n),o=Qx(i),s=Zx(r);return M(Ux(e,N(a),$x(o)),j(t,{radius:o,selection:s},[P(a)]))}function nS(e,t,n,r,i){let a=qx(t),o=Zx(n);return M(Ux(e,N(a),r),j(`chamferDistAngle`,{distance:r,angleDeg:i,selection:o},[P(a)]))}function rS(e,t,n){let r=t.node;if(r?.op!==`extrude`)return;let i=r.params??{},a=i.outline,o=i.origin,s=i.direction,c=i.length;if(!a||a.length<3||!o||!s||typeof c!=`number`)return;let l=Math.abs(n);try{let n=new e.CrossSection([a.map(e=>[e[0],e[1]])]).offset(-l);if(typeof n.isEmpty==`function`&&n.isEmpty())return;let r=e.Manifold.extrude(n,c),i=Math.hypot(s[0],s[1],s[2])||1,u=Math.abs(s[0])<1e-9&&Math.abs(s[1])<1e-9&&s[2]>0,d=r;if(!u){let e=Math.atan2(Math.hypot(s[0],s[1]),s[2])*(180/Math.PI),t=Math.atan2(s[1],s[0])*(180/Math.PI);d=d.rotate([0,e,t])}return d=d.translate([o[0]+s[0]/i*l,o[1]+s[1]/i*l,o[2]+s[2]/i*l]),Gb(e,N(t).subtract(d))}catch{return}}function iS(e,t,n,r,i){let a=qx(t),o=Zx(n);return M(rS(e,a,r)??Gx(e,N(a),r,!1),j(`shell`,i===void 0?{thickness:r,selection:o}:{thickness:r,selection:o,tolerance:i},[P(a)]))}function aS(e,t,n){let r=qx(t);return M(Gx(e,N(r),n,!0),j(`thicken`,{thickness:n},[P(r)]))}function oS(e,t,n,r){let i=qx(t);return M(Wx(e,N(i),n),j(`offset`,r===void 0?{distance:n}:{distance:n,tolerance:r},[P(i)]))}function sS(e,t,n){let r=qx(t);return M(Ux(e,N(r),eS(n)),j(`filletVariable`,{spec:n},[P(r)]))}function cS(e,t,n,r,i){typeof i==`function`&&xy(`draft (per-face angle callback)`);let a=qx(e),o=Zx(t);return M(wy(N(a)),j(`draft`,{pullDirection:n,neutralPlane:r,angleDeg:i,selection:o},[P(a)]))}function lS(e,t){let n=qx(e),r=Zx(t);return M(wy(N(n)),j(`defeature`,{selection:r},[P(n)]))}function uS(e){let t=qx(e),n=N(t);return M(typeof n?.simplify==`function`?n.simplify():wy(n),j(`simplify`,{},[P(t)]))}function dS(e){let t=qx(e),n=N(t);return M(typeof n?.mirror==`function`?n.mirror([1,0,0]):wy(n),j(`reverseShape`,{},[P(t)]))}function fS(e,t){let n=qx(t.shape),r=Zx(t.edges.map(e=>e.edge)),i=t.edges.map(e=>e.r2===void 0?e.radius:[e.radius,e.r2]),a=t.edges[0]?.radius??0;return M(Ux(e,N(n),a),j(`fillet`,{radii:i,selection:r},[P(n)]))}function pS(e){return{fillet:(t,n,r)=>tS(e,`fillet`,t,n,r),chamfer:(t,n,r)=>tS(e,`chamfer`,t,n,r),chamferDistAngle:(t,n,r,i)=>nS(e,t,n,r,i),shell:(t,n,r,i)=>iS(e,t,n,r,i),thicken:(t,n)=>aS(e,t,n),offset:(t,n,r)=>oS(e,t,n,r),filletVariable:(t,n)=>sS(e,t,n),draft:(e,t,n,r,i)=>cS(e,t,n,r,i),defeature:(e,t)=>lS(e,t),offsetWire2D:()=>xy(`offsetWire2D`),simplify:e=>uS(e),reverseShape:e=>dS(e),shellBatch:t=>t.map(t=>iS(e,t.shape,t.faces,t.thickness,t.tolerance)),filletBatch:t=>t.map(t=>fS(e,t))}}function mS(e){return N(e).getMesh()}function hS(e){let t=e.numProp,n=e.vertProperties.length/t;if(t===3)return new Float32Array(e.vertProperties);let r=new Float32Array(n*3);for(let i=0;i<n;i++)r[i*3]=e.vertProperties[i*t]??0,r[i*3+1]=e.vertProperties[i*t+1]??0,r[i*3+2]=e.vertProperties[i*t+2]??0;return r}function gS(e,t){let n=new Float32Array(e.length);for(let r=0;r<t.length;r+=3){let i=(t[r]??0)*3,a=(t[r+1]??0)*3,o=(t[r+2]??0)*3,s=e[i]??0,c=e[i+1]??0,l=e[i+2]??0,u=(e[a]??0)-s,d=(e[a+1]??0)-c,f=(e[a+2]??0)-l,p=(e[o]??0)-s,m=(e[o+1]??0)-c,h=(e[o+2]??0)-l,g=d*h-f*m,_=f*p-u*h,v=u*m-d*p;for(let e of[i,a,o])n[e]=(n[e]??0)+g,n[e+1]=(n[e+1]??0)+_,n[e+2]=(n[e+2]??0)+v}for(let e=0;e<n.length;e+=3){let t=n[e]??0,r=n[e+1]??0,i=n[e+2]??0,a=Math.sqrt(t*t+r*r+i*i);a>1e-12&&(n[e]=t/a,n[e+1]=r/a,n[e+2]=i/a)}return n}function _S(e){let t=e.triVerts.length/3,{runIndex:n,runOriginalID:r}=e;if(!n||!r||n.length<2)return[{start:0,count:e.triVerts.length,faceHash:0}];let i=[];for(let e=0;e+1<n.length;e++){let a=n[e]??0,o=(n[e+1]??t*3)-a;o!==0&&i.push({start:a,count:o,faceHash:r[e]??0})}return i}function vS(e,t){let n=mS(e),r=hS(n),i=new Uint32Array(n.triVerts);return{vertices:r,normals:t.skipNormals?new Float32Array:gS(r,i),triangles:i,uvs:t.includeUVs?new Float32Array(r.length/3*2):new Float32Array,faceGroups:_S(n)}}function yS(e,t,n){let r=mS(e),i=hS(r),a=r.triVerts,o=[],s=[],c=new Set,l=i.length/3,u=e=>{o.push(i[e*3]??0,i[e*3+1]??0,i[e*3+2]??0)};for(let e=0;e<a.length;e+=3){let t=a[e]??0,n=a[e+1]??0,r=a[e+2]??0;for(let[e,i]of[[t,n],[n,r],[r,t]]){let t=Math.min(e,i),n=Math.max(e,i),r=t*l+n;if(c.has(r))continue;c.add(r);let a=o.length/3;u(t),u(n),s.push({start:a,count:2,edgeHash:r})}}return{lines:new Float32Array(o),edgeGroups:s}}function bS(e){return!0}function xS(e){return{mesh:(e,t)=>vS(e,t),meshEdges:(e,t,n)=>yS(e,t,n),hasTriangulation:e=>bS(e),meshShape:(e,t,n)=>{}}}function SS(e,t=[0,0,0]){return Array.isArray(e)&&e.length>=3?[Number(e[0]),Number(e[1]),Number(e[2])]:[...t]}function CS(e,t=0){return typeof e==`number`?e:t}function wS(e,t=``){return typeof e==`string`?e:t}function TS(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function ES(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function DS(e,t,n,r){return TS(t,TS(ES(n,e[0]),ES(r,e[1])))}function OS(e,t){let n=t.outline??[];if(n.length<3)throw Error(`manifold replay: profile outline needs at least three points`);let r=SS(t.origin),i=SS(t.xAxis,[1,0,0]),a=SS(t.yAxis,[0,1,0]),o=n.map(e=>DS(e,r,i,a)),s=[];for(let t=0;t<o.length;t++){let n=o[t]??r,i=o[(t+1)%o.length]??r;s.push(e.makeLineEdge([n[0],n[1],n[2]],[i[0],i[1],i[2]]))}let c=e.makeWire(s),l=e.makeFace(c,!0);for(let t of s)e.dispose(t);return l}function kS(e,t){return OS(e,t)}function AS(e,t){let n=e.boundingBox(t);return[(n.min[0]+n.max[0])/2,(n.min[1]+n.max[1])/2,(n.min[2]+n.max[2])/2]}function jS(e,t){let n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return n*n+r*r+i*i}function MS(e,t,n,r){let i=e.iterShapes(t,r);if(!n||n.kind===`all`)return i;if(n.kind===`witness`){let t=n.points??[],r=i.map(t=>AS(e,t)),a=[],o=new Set;for(let e of t){let t=-1,n=1/0;for(let a=0;a<i.length;a++){if(o.has(a))continue;let i=jS(e,r[a]??[0,0,0]);i<n&&(n=i,t=a)}let s=i[t];t>=0&&s!==void 0&&(o.add(t),a.push(s))}return a}if(n.kind===`index`){let e=n.indices??[],t=[];for(let n of e){let e=i[n];e!==void 0&&t.push(e)}return t}let a=n.regions??[],o=e=>a.some(t=>e[0]>=t.min[0]&&e[0]<=t.max[0]&&e[1]>=t.min[1]&&e[1]<=t.max[1]&&e[2]>=t.min[2]&&e[2]<=t.max[2]);return i.filter(t=>o(AS(e,t)))}function NS(e){let t=e.selection;return t===void 0?void 0:t}function PS(e){let t=e[0];if(t===void 0)throw Error(`manifold replay: op requires an input shape`);return t}function FS(e,t,n){return e.createAxis1(t[0],t[1],t[2],n[0],n[1],n[2])}function IS(e,t){return(n,r)=>{let i=OS(n,r),a=SS(r[e]),o=SS(r[t],[0,0,1]),s=CS(r.angleDeg,360);return n.revolve(i,FS(n,a,o),Math.PI/180*s)}}var LS={makeBox:(e,t)=>e.makeBox(CS(t.width),CS(t.height),CS(t.depth)),makeBoxWithCorners:(e,t)=>e.makeBoxFromCorners(SS(t.p1),SS(t.p2)),makeCylinder:(e,t)=>e.makeCylinder(CS(t.radius),CS(t.height),SS(t.center),SS(t.direction,[0,0,1])),makeSphere:(e,t)=>e.makeSphere(CS(t.radius),SS(t.center)),makeCone:(e,t)=>e.makeCone(CS(t.radius1),CS(t.radius2),CS(t.height),SS(t.center),SS(t.direction,[0,0,1])),makeTorus:(e,t)=>e.makeTorus(CS(t.majorRadius),CS(t.minorRadius),SS(t.center),SS(t.direction,[0,0,1])),makeEllipsoid:(e,t)=>e.makeEllipsoid(CS(t.aLength),CS(t.bLength),CS(t.cLength)),makeFuse:(e,t,n)=>{if(n.length<2)return PS(n);let r=PS(n);for(let t of n.slice(1))r=e.fuse(r,t);return r},makeCut:(e,t,n)=>{let r=PS(n);return e.cutAll(r,n.slice(1))},makeCommon:(e,t,n)=>{let r=PS(n);for(let t of n.slice(1))r=e.intersect(r,t);return r},translateShape:(e,t,n)=>e.translate(PS(n),CS(t.x),CS(t.y),CS(t.z)),rotateShape:(e,t,n)=>e.rotate(PS(n),CS(t.angle),SS(t.axis,[0,0,1]),SS(t.center)),scaleShape:(e,t,n)=>e.scale(PS(n),SS(t.center),CS(t.factor,1)),mirrorShape:(e,t,n)=>e.mirror(PS(n),SS(t.origin),SS(t.normal,[1,0,0])),transformShape:(e,t,n)=>e.transform(PS(n),t.matrix),generalTransform:(e,t,n)=>e.generalTransform(PS(n),t.linear,SS(t.translation),!!t.isOrthogonal),generalTransformNonOrthogonal:(e,t,n)=>e.generalTransformNonOrthogonal(PS(n),t.linear,SS(t.translation)),gridPattern:(e,t,n)=>{if(typeof e.gridPattern!=`function`)throw Error(`manifold replay: target kernel lacks gridPattern`);return e.gridPattern(PS(n),SS(t.directionX),SS(t.directionY),CS(t.spacingX),CS(t.spacingY),CS(t.countX,1),CS(t.countY,1))},profileEdge:(e,t)=>{let n=t.pts??[],r=n[0]??[0,0,0],i=n.length>1?n[n.length-1]??r:[r[0]+.001,r[1],r[2]];return e.makeLineEdge([r[0],r[1],r[2]],[i[0],i[1],i[2]])},profileWire:(e,t)=>{let n=t.ring??[],r=[];for(let t=0;t<n.length;t++){let i=n[t]??[0,0,0],a=n[(t+1)%n.length]??i;r.push(e.makeLineEdge([i[0],i[1],i[2]],[a[0],a[1],a[2]]))}let i=e.makeWire(r);for(let t of r)e.dispose(t);return i},profileFace:(e,t)=>OS(e,t),extrude:(e,t)=>{let n=OS(e,t);return e.extrude(n,SS(t.direction,[0,0,1]),CS(t.length,1))},revolve:IS(`axisOrigin`,`axisDirection`),revolveVec:IS(`center`,`direction`),loft:(e,t)=>{let n=(t.sections??[]).map(t=>RS(e,t));return e.loft(n,!!t.ruled)},loftAdvanced:(e,t)=>{let n=(t.sections??[]).map(t=>RS(e,t)),r={solid:t.solid!==!1,ruled:!!t.ruled};return typeof t.tolerance==`number`&&(r.tolerance=t.tolerance),e.loftAdvanced(n,r)},sweep:(e,t)=>e.sweep(zS(e,t),BS(e,t)),simplePipe:(e,t)=>e.simplePipe(zS(e,t),BS(e,t)),sweepWithOptions:(e,t)=>e.sweepWithOptions(zS(e,t),BS(e,t),wS(t.contactMode),t.scaleValues??[],CS(t.segments,0)),sweepPipeShell:(e,t)=>{let n=e.sweepPipeShell(zS(e,t),BS(e,t));return VS(n)?n.shape:n},helicalSweep:(e,t)=>e.helicalSweep(zS(e,t),SS(t.axisOrigin),SS(t.axisDirection,[0,0,1]),CS(t.radius),CS(t.pitch),CS(t.turns,1)),draftPrism:(e,t)=>{let n=OS(e,t);return e.draftPrism(n,n,n,CS(t.height),CS(t.angleDeg),!!t.fuse)},fillet:(e,t,n)=>{let r=PS(n),i=MS(e,r,NS(t),`edge`),a=t.radii,o=t.radius;if(a&&a.length>1){let t=new Map;for(let e=0;e<i.length;e++){let n=i[e],r=a[e]??a[a.length-1];n!==void 0&&r!==void 0&&t.set(n,r)}return e.fillet(r,i,e=>t.get(e)??0)}let s=a?.[0]??o;return e.fillet(r,i,s??0)},chamfer:(e,t,n)=>{let r=PS(n),i=MS(e,r,NS(t),`edge`);return e.chamfer(r,i,t.radius)},chamferDistAngle:(e,t,n)=>{let r=PS(n),i=MS(e,r,NS(t),`edge`);return e.chamferDistAngle(r,i,CS(t.distance),CS(t.angleDeg))},shell:(e,t,n)=>{let r=PS(n),i=MS(e,r,NS(t),`face`);return typeof t.tolerance==`number`?e.shell(r,i,CS(t.thickness),t.tolerance):e.shell(r,i,CS(t.thickness))},thicken:(e,t,n)=>e.thicken(PS(n),CS(t.thickness)),offset:(e,t,n)=>typeof t.tolerance==`number`?e.offset(PS(n),CS(t.distance),t.tolerance):e.offset(PS(n),CS(t.distance)),filletVariable:(e,t,n)=>e.filletVariable(PS(n),wS(t.spec)),draft:(e,t,n)=>{let r=PS(n),i=MS(e,r,NS(t),`face`);return e.draft(r,i,SS(t.pullDirection,[0,0,1]),SS(t.neutralPlane),CS(t.angleDeg))},defeature:(e,t,n)=>{let r=PS(n),i=MS(e,r,NS(t),`face`);return e.defeature(r,i)},simplify:(e,t,n)=>e.simplify(PS(n)),reverseShape:(e,t,n)=>e.reverseShape(PS(n)),hull:(e,t,n)=>e.hull([...n],CS(t.tolerance)),hullFromPoints:(e,t)=>{let n=t.points??[];return e.hullFromPoints(n.map(e=>({x:e[0],y:e[1],z:e[2]})),CS(t.tolerance))},sewAndSolidify:(e,t,n)=>e.sewAndSolidify([...n],CS(t.tolerance))};function RS(e,t){let n=kS(e,t);return e.iterShapes(n,`wire`)[0]??n}function zS(e,t){let n=t.section;return n?kS(e,n):OS(e,t)}function BS(e,t){let n=t.path??[];if(n.length<2)throw Error(`manifold replay: sweep spine needs at least two path points`);let r=[];for(let t=0;t+1<n.length;t++){let i=n[t]??[0,0,0],a=n[t+1]??[0,0,0];r.push(e.makeLineEdge([i[0],i[1],i[2]],[a[0],a[1],a[2]]))}let i=e.makeWire(r);for(let t of r)e.dispose(t);return i}function VS(e){return typeof e==`object`&&!!e&&`shape`in e&&`firstShape`in e&&`lastShape`in e}function HS(e,t,n,r){let i=n.get(e);if(i!==void 0)return i;if(!e.replayable)throw Error(`manifold replay: op '${e.op}' is not replayable (raw-mesh origin or unsupported)`);let a=LS[e.op];if(!a)throw Error(`manifold replay: no replay handler for op '${e.op}'`);let o=e.inputs.map(e=>HS(e,t,n,r)),s=a(t,e.params,o);return n.set(e,s),r.add(s),s}function US(e,t,n=new Map){let r=new Set,i=HS(e,t,n,r);for(let e of r)e!==i&&t.dispose(e);return i}function WS(e){return N(e)}function GS(e){let t=e?.node?.params;if(!t)return;let n=t.pts??t.ring;if(n&&n.length)return n;let r=t.outline;if(r&&r.length){let e=t.origin??[0,0,0],n=t.xAxis??[1,0,0],i=t.yAxis??[0,1,0];return r.map(t=>[e[0]+n[0]*t[0]+i[0]*t[1],e[1]+n[1]*t[0]+i[1]*t[1],e[2]+n[2]*t[0]+i[2]*t[1]])}}function KS(e){let t=[1/0,1/0,1/0],n=[-1/0,-1/0,-1/0];for(let r of e)for(let e=0;e<3;e++){let i=r[e]??0;i<(t[e]??1/0)&&(t[e]=i),i>(n[e]??-1/0)&&(n[e]=i)}return{min:t,max:n}}function qS(e){let t=e;if(t&&t.__manifoldSub&&t.box)return t.box;let n=GS(e);return n?KS(n):WS(e).boundingBox()}function JS(e){return WS(e)?.getMesh?.()}function YS(e,t){let n=t*e.numProp;return[e.vertProperties[n]??0,e.vertProperties[n+1]??0,e.vertProperties[n+2]??0]}function XS(e,t){let n=t*3;return[e.triVerts[n]??0,e.triVerts[n+1]??0,e.triVerts[n+2]??0]}function ZS(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 QS(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function $S(e){let t=qS(e);return[(t.min[0]+t.max[0])/2,(t.min[1]+t.max[1])/2,(t.min[2]+t.max[2])/2]}function eC(e){let t=Math.floor(e.vertProperties.length/e.numProp);if(t===0)return[0,0,0];let n=[0,0,0];for(let r=0;r<t;r++){let t=YS(e,r);n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}return[n[0]/t,n[1]/t,n[2]/t]}function tC(e){let t=JS(e);if(!t)return $S(e);let n=Math.floor(t.triVerts.length/3),r=0,i=[0,0,0];for(let e=0;e<n;e++){let[n,a,o]=XS(t,e),s=YS(t,n),c=YS(t,a),l=YS(t,o),u=QS(s,ZS(c,l))/6;r+=u,i[0]+=(s[0]+c[0]+l[0])/4*u,i[1]+=(s[1]+c[1]+l[1])/4*u,i[2]+=(s[2]+c[2]+l[2])/4*u}return Math.abs(r)<1e-12?eC(t):[i[0]/r,i[1]/r,i[2]/r]}function nC(e){let t=JS(e);if(!t)return $S(e);let n=Math.floor(t.triVerts.length/3),r=0,i=[0,0,0];for(let e=0;e<n;e++){let[n,a,o]=XS(t,e),s=YS(t,n),c=YS(t,a),l=YS(t,o),u=ZS([c[0]-s[0],c[1]-s[1],c[2]-s[2]],[l[0]-s[0],l[1]-s[1],l[2]-s[2]]),d=Math.hypot(u[0],u[1],u[2])/2;r+=d,i[0]+=(s[0]+c[0]+l[0])/3*d,i[1]+=(s[1]+c[1]+l[1])/3*d,i[2]+=(s[2]+c[2]+l[2])/3*d}return r<1e-12?eC(t):[i[0]/r,i[1]/r,i[2]/r]}function rC(e){return WS(e).volume()}function iC(e){let t=e;return t&&t.__nativeFace&&typeof t.area==`number`?t.area:WS(e).surfaceArea()}function aC(e){let t=e;if(t&&t.__manifoldSub&&t.box)return{min:[...t.box.min],max:[...t.box.max]};let n=qS(e);return{min:[...n.min],max:[...n.max]}}function oC(e){return tC(e)}function sC(e,t){let n=(e,t,n,r)=>{if(t<n)return[t,n];if(r<e)return[e,r];let i=(Math.max(e,n)+Math.min(t,r))/2;return[i,i]},[r,i]=n(e.min[0],e.max[0],t.min[0],t.max[0]),[a,o]=n(e.min[1],e.max[1],t.min[1],t.max[1]),[s,c]=n(e.min[2],e.max[2],t.min[2],t.max[2]),l=i-r,u=o-a,d=c-s;return{value:Math.sqrt(l*l+u*u+d*d),point1:[r,a,s],point2:[i,o,c]}}function cC(e,t){return sC(qS(e),qS(t))}function lC(e,t=!1){return{volume:rC(e),area:iC(e),length:0,centerOfMass:oC(e),boundingBox:aC(e)}}function uC(e,t,n){let r=Dy();if(!r)throw new c(`manifold: surfaceCurvature requires a registered occt kernel; none is available`);let i=Ty(e);if(!i)return r.surfaceCurvature(e,t,n);if(!i.node.replayable)throw Error(`manifold: surfaceCurvature unsupported; shape originates from a non-replayable op (raw mesh import or mesh boolean)`);let a=ky.get(i.node)??(()=>{let e=US(i.node,r);return ky.set(i.node,e),e})();return r.surfaceCurvature(a,t,n)}function dC(e){return{volume:e=>rC(e),area:e=>iC(e),length:e=>{let t=e;if(t&&t.__nativeEdge&&typeof t.length==`number`)return t.length;let n=Ty(e)?.node;return n?.op===`profileEdge`&&n.params?.curve?yb(n.params.curve):xy(`length`)},centerOfMass:e=>oC(e),linearCenterOfMass:e=>oC(e),boundingBox:e=>aC(e),distance:(e,t)=>cC(e,t),surfaceCurvature:(e,t,n)=>uC(e,t,n),surfaceCenterOfMass:e=>nC(e),measureBulk:(e,t)=>lC(e,t),createDistanceQuery:e=>({distanceTo:t=>cC(e,t),dispose:()=>{}})}}function fC(e,t){let{runIndex:n,runOriginalID:r}=e;if(!n||!r)return 0;let i=t*3;for(let e=0;e<r.length;e++){let t=n[e]??0,a=n[e+1]??2**53-1;if(i>=t&&i<a)return r[e]??0}return 0}function pC(e){let t=e,n=t.triVerts,r=t.vertProperties,i=t.numProp||3,a=t.faceID,o=n.length/3,s=e=>{let t=e*i;return[r[t]??0,r[t+1]??0,r[t+2]??0]},c=new Map;for(let e=0;e<o;e++){let t=a?a[e]??e:e,n=c.get(t);n||(n=[],c.set(t,n)),n.push(e)}let l=[];for(let[e,r]of c){let i=0,a=0,o=0,c=0,u=0,d=0,f=0,p=1/0,m=1/0,h=1/0,g=-1/0,_=-1/0,v=-1/0,y=new Float32Array(r.length*9),b=0;for(let e of r){let t=s(n[e*3]??0),r=s(n[e*3+1]??0),l=s(n[e*3+2]??0),x=r[0]-t[0],S=r[1]-t[1],C=r[2]-t[2],w=l[0]-t[0],ee=l[1]-t[1],te=l[2]-t[2],ne=S*te-C*ee,re=C*w-x*te,ie=x*ee-S*w;i+=ne,a+=re,o+=ie;let ae=.5*Math.hypot(ne,re,ie);f+=ae;let oe=(t[0]+r[0]+l[0])/3,se=(t[1]+r[1]+l[1])/3,ce=(t[2]+r[2]+l[2])/3;c+=ae*oe,u+=ae*se,d+=ae*ce;for(let e of[t,r,l])e[0]<p&&(p=e[0]),e[1]<m&&(m=e[1]),e[2]<h&&(h=e[2]),e[0]>g&&(g=e[0]),e[1]>_&&(_=e[1]),e[2]>v&&(v=e[2]),y[b++]=e[0],y[b++]=e[1],y[b++]=e[2]}let x=Math.hypot(i,a,o)||1,S=[i/x,a/x,o/x],C=f>0?[c/f,u/f,d/f]:[0,0,0];l.push({__nativeFace:!0,faceId:e,originId:fC(t,r[0]??0),normal:S,center:C,area:f,min:[p,m,h],max:[g,_,v],tris:y})}return l}function mC(e){return!!e&&typeof e==`object`&&e.__nativeFace===!0}var hC=Math.cos(45*Math.PI/180),gC=(e,t)=>e<t?e*1e9+t:t*1e9+e,_C=(e,t)=>e<t?`${e},${t}`:`${t},${e}`;function vC(e){let t=e,n=t.triVerts,r=t.vertProperties,i=t.numProp||3,a=t.faceID,o=n.length/3;if(!a)return[];let s=e=>{let t=e*i;return[r[t]??0,r[t+1]??0,r[t+2]??0]},c=e=>{let t=s(n[e*3]??0),r=s(n[e*3+1]??0),i=s(n[e*3+2]??0),a=r[0]-t[0],o=r[1]-t[1],c=r[2]-t[2],l=i[0]-t[0],u=i[1]-t[1],d=i[2]-t[2],f=o*d-c*u,p=c*l-a*d,m=a*u-o*l,h=Math.hypot(f,p,m)||1;return[f/h,p/h,m/h]},l=new Map;for(let e=0;e<o;e++){let t=n[e*3]??0,r=n[e*3+1]??0,i=n[e*3+2]??0,o=a[e]??e,s=c(e);for(let[e,n]of[[t,r],[r,i],[i,t]]){let t=gC(e,n),r=l.get(t);r||(r={v:[e,n],faces:[],nrm:[]},l.set(t,r)),r.faces.push(o),r.nrm.push(s)}}let u=new Map;for(let{v:e,faces:t,nrm:n}of l.values()){if(t.length!==2)continue;let[r,i]=t;if(r===i)continue;let[a,o]=n;if(a[0]*o[0]+a[1]*o[1]+a[2]*o[2]>hC)continue;let s=_C(r,i),c=u.get(s);c||(c={faces:r<i?[r,i]:[i,r],segs:[]},u.set(s,c)),c.segs.push(e)}let d=[];for(let{faces:e,segs:t}of u.values())for(let n of yC(t))d.push(bC(e,n,s));return d}function yC(e){let t=new Map,n=new Set,r=(e,n)=>{let r=t.get(e);r||(r=[],t.set(e,r)),r.push(n)};e.forEach(([e,t],n)=>{r(e,n),r(t,n)});let i=(t,n)=>{let r=e[t]??[n,n];return r[0]===n?r[1]:r[0]},a=[];for(let r=0;r<e.length;r++){if(n.has(r))continue;n.add(r);let o=e[r]??[0,0],s=[o[0],o[1]];for(let r=0;r<e.length;r++){let e=s[s.length-1]??0,r=(t.get(e)??[]).find(e=>!n.has(e));if(r===void 0)break;n.add(r),s.push(i(r,e))}for(let r=0;r<e.length;r++){let e=s[0]??0,r=(t.get(e)??[]).find(e=>!n.has(e));if(r===void 0)break;n.add(r),s.unshift(i(r,e))}a.push(s)}return a}function bC(e,t,n){let r=t.length,i=new Float32Array(r*3),a=new Float32Array(r),o=1/0,s=1/0,c=1/0,l=-1/0,u=-1/0,d=-1/0,f=0,p=null;for(let e=0;e<r;e++){let r=n(t[e]??0);i[e*3]=r[0],i[e*3+1]=r[1],i[e*3+2]=r[2],p&&(f+=Math.hypot(r[0]-p[0],r[1]-p[1],r[2]-p[2])),a[e]=f,p=r,r[0]<o&&(o=r[0]),r[1]<s&&(s=r[1]),r[2]<c&&(c=r[2]),r[0]>l&&(l=r[0]),r[1]>u&&(u=r[1]),r[2]>d&&(d=r[2])}return{__nativeEdge:!0,faces:e,pts:i,arc:a,length:f,min:[o,s,c],max:[l,u,d],curveType:xC(i)?`LINE`:`CIRCLE`}}function xC(e){let t=e.length/3;if(t<=2)return!0;let n=e[0]??0,r=e[1]??0,i=e[2]??0,a=e[(t-1)*3]??0,o=e[(t-1)*3+1]??0,s=e[(t-1)*3+2]??0,c=a-n,l=o-r,u=s-i,d=Math.hypot(c,l,u)||1;c/=d,l/=d,u/=d;for(let a=1;a<t-1;a++){let t=(e[a*3]??0)-n,o=(e[a*3+1]??0)-r,s=(e[a*3+2]??0)-i,f=t*c+o*l+s*u,p=t-f*c,m=o-f*l,h=s-f*u;if(Math.hypot(p,m,h)>1e-6*Math.max(1,d))return!1}return!0}function SC(e){let t=e,n=t.triVerts,r=t.vertProperties,i=t.numProp||3,a=t.faceID;if(!a)return[];let o=n.length/3,s=new Map;for(let e=0;e<o;e++){let t=a[e]??e;for(let r=0;r<3;r++){let i=n[e*3+r]??0,a=s.get(i);a||(a=new Set,s.set(i,a)),a.add(t)}}let c=[];for(let[e,t]of s){if(t.size<3)continue;let n=e*i;c.push({__nativeVertex:!0,point:[r[n]??0,r[n+1]??0,r[n+2]??0]})}return c}function CC(e){return!!e&&typeof e==`object`&&e.__nativeVertex===!0}function wC(e){return!!e&&typeof e==`object`&&e.__nativeEdge===!0}function TC(e,t){let{pts:n,arc:r}=e,i=r.length;if(i===0)return[0,0,0];if(t<=0)return[n[0]??0,n[1]??0,n[2]??0];if(t>=e.length)return[n[(i-1)*3]??0,n[(i-1)*3+1]??0,n[(i-1)*3+2]??0];let a=1;for(;a<i&&(r[a]??0)<t;)a++;let o=r[a-1]??0,s=r[a]??o,c=s>o?(t-o)/(s-o):0,l=(a-1)*3,u=a*3;return[(n[l]??0)+((n[u]??0)-(n[l]??0))*c,(n[l+1]??0)+((n[u+1]??0)-(n[l+1]??0))*c,(n[l+2]??0)+((n[u+2]??0)-(n[l+2]??0))*c]}function EC(e,t){let{pts:n,arc:r}=e,i=r.length;if(i<2)return[1,0,0];let a=1;for(;a<i-1&&(r[a]??0)<t;)a++;let o=(a-1)*3,s=a*3,c=(n[s]??0)-(n[o]??0),l=(n[s+1]??0)-(n[o+1]??0),u=(n[s+2]??0)-(n[o+2]??0),d=Math.hypot(c,l,u)||1;return[c/d,l/d,u/d]}function DC(e,t){let n=Ty(e);if(!n)throw Error(`manifold: ${t} requires a manifold shape handle`);if(!n.node.replayable)throw Error(`manifold: ${t} unsupported; shape originates from a non-replayable op (raw mesh import or mesh boolean)`);let r=Oy(t),i=ky.get(n.node);if(i!==void 0)return{occt:r,brep:i};let a=US(n.node,r);return ky.set(n.node,a),{occt:r,brep:a}}function OC(e){if(Ty(e))return`solid`;let{occt:t,brep:n}=DC(e,`shapeType`);return t.shapeType(n)}function kC(e,t){let n=Ty(e),r=Ty(t);return!n||!r?!1:n.manifold===r.manifold}function AC(e,t){if(!Ty(e))return 0;let{occt:n,brep:r}=DC(e,`hashCode`);return n.hashCode(r,t)}function jC(e){let t=Ty(e);return!t||!N(t)}function MC(e,t){let n=Ty(e);if(!n)return[];if(t===`solid`)return[e];if(t===`vertex`){let e=N(n);return e&&typeof e.getMesh==`function`?SC(e.getMesh()).map((e,t)=>({...e,__manifoldSub:!0,index:t,box:{min:e.point,max:e.point},parent:n.node,subType:`vertex`})):[]}if(t!==`edge`&&t!==`face`)return[];if(t===`face`){let e=N(n);if(e&&typeof e.getMesh==`function`)return pC(e.getMesh()).map((e,t)=>({...e,__manifoldSub:!0,index:t,box:{min:e.min,max:e.max},parent:n.node,subType:`face`}))}if(t===`edge`){let e=N(n);if(e&&typeof e.getMesh==`function`)return vC(e.getMesh()).map((e,t)=>({...e,__manifoldSub:!0,index:t,box:{min:e.min,max:e.max},parent:n.node,subType:`edge`}))}if(!n.node.replayable)return[];let r=Dy();if(!r)return[];let i=ky.get(n.node)??(()=>{let e=US(n.node,r);return ky.set(n.node,e),e})();return r.iterShapes(i,t).map((e,i)=>({__manifoldSub:!0,index:i,box:r.boundingBox(e),occt:e,parent:n.node,subType:t}))}function NC(e){let{occt:t,brep:n}=DC(e,`edgeToFaceMap`);return t.edgeToFaceMap(n)}function PC(e,t){let{occt:n,brep:r}=DC(e,`adjacentFaces`);return n.adjacentFaces(r,t)}function FC(e){return{iterShapes:MC,iterShapeList:(e,t)=>{Oy(`iterShapeList`).iterShapeList(e,t)},shapeType:OC,isSame:kC,isEqual:kC,downcast:e=>e,copyShape:e=>{let t=Ty(e);return t?M(wy(N(t)),j(`translateShape`,{x:0,y:0,z:0},[t.node])):e},hashCode:AC,isNull:jC,shapeOrientation:e=>`forward`,edgeToFaceMap:NC,sharedEdges:(e,t)=>Oy(`sharedEdges`).sharedEdges(e,t),adjacentFaces:PC,sew:()=>{throw Error(`manifold: sew is unsupported on the mesh kernel; use a B-rep kernel`)}}}function IC(e){return N(e).getMesh()}function LC(e){return e.numProp&&e.numProp>=3?e.numProp:3}function RC(e){return Math.floor(e.vertProperties.length/LC(e))}function zC(e,t){let n=t*LC(e);return[e.vertProperties[n]??0,e.vertProperties[n+1]??0,e.vertProperties[n+2]??0]}function BC(e,t){let n=t*3;return[e.triVerts[n]??0,e.triVerts[n+1]??0,e.triVerts[n+2]??0]}function VC(e,t,n){let r=t[0]-e[0],i=t[1]-e[1],a=t[2]-e[2],o=n[0]-e[0],s=n[1]-e[1],c=n[2]-e[2],l=i*c-a*s,u=a*o-r*c,d=r*s-i*o,f=Math.hypot(l,u,d)||1;return[l/f,u/f,d/f]}function HC(e,t){let n=IC(e),r=Math.floor(n.triVerts.length/3);if(t){let e=new ArrayBuffer(84+r*50),t=new DataView(e);t.setUint32(80,r,!0);let i=84;for(let e=0;e<r;e++){let[r,a,o]=BC(n,e),s=zC(n,r),c=zC(n,a),l=zC(n,o),u=VC(s,c,l);t.setFloat32(i,u[0],!0),t.setFloat32(i+4,u[1],!0),t.setFloat32(i+8,u[2],!0),i+=12;for(let e of[s,c,l])t.setFloat32(i,e[0],!0),t.setFloat32(i+4,e[1],!0),t.setFloat32(i+8,e[2],!0),i+=12;t.setUint16(i,0,!0),i+=2}return e}let i=[`solid manifold`];for(let e=0;e<r;e++){let[t,r,a]=BC(n,e),o=zC(n,t),s=zC(n,r),c=zC(n,a),l=VC(o,s,c);i.push(` facet normal ${l[0]} ${l[1]} ${l[2]}`),i.push(` outer loop`);for(let e of[o,s,c])i.push(` vertex ${e[0]} ${e[1]} ${e[2]}`);i.push(` endloop`),i.push(` endfacet`)}return i.push(`endsolid manifold`),i.join(`
9
+ `)}function l_(e,t){let n=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);return A(e.importIges(n)).map(O)}function u_(e,t,n){return t.length===0?``:i_(e,t.map(e=>e.shape))}function d_(e,t,n){let r=zf(t,`export3MF`);return Hf(e.export3mf(r,n))}function f_(e,t,n){let r=zf(t,`exportGLB`);return Hf(e.exportGlb(r,n))}function p_(e,t,n){let r=zf(t,`exportOBJ`);return Hf(e.exportObj(r,n))}function m_(e,t,n){let r=zf(t,`exportPLY`);return Hf(e.exportPly(r,n))}function h_(e,t){return A(e.import3mf(new Uint8Array(t))).map(e=>O(e))}function g_(e,t){return O(e.importObj(new Uint8Array(t)))}function __(e,t){return O(e.importGlb(new Uint8Array(t)))}function v_(e,t){let n=t;return n.type===`solid`?e.toBREP(n.id):(tp(`brep-non-solid`,`toBREP for non-solid shapes uses STEP format.`),i_(e,[t]))}function y_(e,t){if(typeof e.fromBREP==`function`&&t.trimStart().startsWith(`{`))return O(e.fromBREP(t));let n=o_(e,t)[0];if(!n)throw Error(`brepkit: fromBREP produced no shapes`);return n}function b_(e,t){return{__brepkit_xcaf:!0,shapes:t,delete:Af}}function x_(e,t,n){return t&&t.__brepkit_xcaf&&Array.isArray(t.shapes)?i_(e,t.shapes.map(e=>e.shape)):``}function S_(e,t,n){return i_(e,t.map(e=>e.shape))}function C_(e){return{exportSTEP:t=>i_(e,t),exportSTL:(t,n,r,i)=>a_(e,t,n,r,i),importSTEP:t=>o_(e,t),importSTL:t=>s_(e,t),exportIGES:t=>c_(e,t),importIGES:t=>l_(e,t),exportSTEPAssembly:(t,n)=>u_(e,t,n),export3MF:(t,n)=>d_(e,t,n),exportGLB:(t,n)=>f_(e,t,n),exportOBJ:(t,n)=>p_(e,t,n),exportPLY:(t,n)=>m_(e,t,n),import3MF:t=>h_(e,t),importOBJ:t=>g_(e,t),importGLB:t=>__(e,t),toBREP:t=>v_(e,t),fromBREP:t=>y_(e,t),createXCAFDocument:t=>b_(e,t),writeXCAFToSTEP:(t,n)=>x_(e,t,n),exportSTEPConfigured:(t,n)=>S_(e,t,n)}}function w_(e,t){return{x:e,y:t}}function T_(e,t){let n=Math.sqrt(e*e+t*t);if(n<1e-15)throw Error(`brepkit: createDirection2d called with zero-length vector`);return{x:e/n,y:t/n}}function E_(e,t){return{x:e,y:t}}function D_(e,t,n,r){return{px:e,py:t,dx:n,dy:r,delete:Af}}function O_(e){return e}function k_(e){return e}function A_(e,t,n,r){return te(e,t,n,r)}function j_(e,t,n,r){return ne(e,t,n,r)}function M_(e,t,n,r,i,a,o){return ae(e,t,n,r,i,a,o)}function N_(e,t,n,r,i,a,o,s,c){let l=ae(e,t,n,r,o,s,c),u=c!==!1,d=u?i:-i,f=u?a:-a;return f<d-1e-9&&(f+=2*Math.PI),{__bk2d:`trimmed`,basis:l,tStart:d,tEnd:f}}function P_(e){return oe(e)}function F_(e,t){let n=e.length,r=Math.min(3,n-1),i=[],a=[];i.push(0),a.push(r+1);let o=n-r-1;for(let e=1;e<=o;e++)i.push(e/(o+1)),a.push(1);return i.push(1),a.push(r+1),{__bk2d:`bspline`,poles:[...e],knots:i,multiplicities:a,degree:r,isPeriodic:!1}}function I_(e,t){return S(rp(e),t)}function L_(e,t){return{point:S(rp(e),t),tangent:C(rp(e),t)}}function R_(e){return w(rp(e))}function z_(e){return ee(ip(e))}function B_(e,t,n){return{__bk2d:`trimmed`,basis:rp(e),tStart:t,tEnd:n}}function V_(e){let t=e;switch(t.__bk2d){case`line`:{let e=t;e.ox+=e.dx*e.len,e.oy+=e.dy*e.len,e.dx=-e.dx,e.dy=-e.dy;break}case`circle`:case`ellipse`:{let e=t;e.sense=!e.sense;break}case`trimmed`:{let e=t;[e.tStart,e.tEnd]=[e.tEnd,e.tStart];break}case`bezier`:{let e=t;e.poles=[...e.poles].reverse();break}case`bspline`:{let e=t;e.poles=[...e.poles].reverse();let n=e.knots[0],r=e.knots[e.knots.length-1];n!==void 0&&r!==void 0&&(e.knots=e.knots.map(e=>n+r-e).reverse()),Array.isArray(e.weights)&&(e.weights=[...e.weights].reverse());break}default:break}}function H_(e){return JSON.parse(JSON.stringify(e))}function U_(e,t){let n=rp(e),r=w(n),i=[];for(let e=0;e<=30;e++){let a=r.first+(r.last-r.first)*e/30,[o,s]=S(n,a),[c,l]=C(n,a),u=Math.sqrt(c*c+l*l);u>1e-12?i.push([o-l/u*t,s+c/u*t]):i.push([o,s])}return F_(i)}function W_(e,t,n){return se(rp(e),t,n)}function G_(e,t,n,r){return ce(rp(e),t,n,r)}function K_(e,t,n,r){return le(rp(e),t,n,r)}function q_(e,t,n){return ue(rp(e),t,n)}function J_(e,t,n,r,i){return de(rp(e),t,n,r,i)}function Y_(e,t,n,r,i,a){return av(e,Q_(t,n,r,i,a))}function X_(e,t,n){return{m:e,tx:t,ty:n,delete:Af}}function Z_(){return X_([1,0,0,0,1,0,0,0,1],0,0)}function Q_(e,n,r,i,a){let o=Math.sqrt(r*r+i*i);if(o<1e-15)return Z_();let s=-i/o,c=r/o,l=a-1,u=[1+l*s*s,l*s*c,0,l*c*s,1+l*c*c,0,0,0,1];return X_(u,e-t(u,0)*e-t(u,1)*n,n-t(u,3)*e-t(u,4)*n)}function $_(e,t){return X_([1,0,0,0,1,0,0,0,1],e,t)}function ev(e,n,r,i,a,o,s){if(r===`axis`&&o!==void 0&&s!==void 0){let r=Math.sqrt(o*o+s*s),c=o/r,l=s/r,u=[2*c*c-1,2*c*l,0,2*c*l,2*l*l-1,0,0,0,1],d=i??e,f=a??n;return X_(u,d-t(u,0)*d-t(u,1)*f,f-t(u,3)*d-t(u,4)*f)}return X_([-1,0,0,0,-1,0,0,0,1],2*e,2*n)}function tv(e,t,n){let r=Math.cos(e),i=Math.sin(e);return X_([r,-i,0,i,r,0,0,0,1],t-r*t+i*n,n-i*t-r*n)}function nv(e,t,n){return X_([e,0,0,0,e,0,0,0,1],t*(1-e),n*(1-e))}function rv(e,t,n){e.tx=t,e.ty=n}function iv(e,n){let r=e.m,i=n.m,a=e=>t(r,e),o=e=>t(i,e);e.m=[a(0)*o(0)+a(1)*o(3)+a(2)*o(6),a(0)*o(1)+a(1)*o(4)+a(2)*o(7),a(0)*o(2)+a(1)*o(5)+a(2)*o(8),a(3)*o(0)+a(4)*o(3)+a(5)*o(6),a(3)*o(1)+a(4)*o(4)+a(5)*o(7),a(3)*o(2)+a(4)*o(5)+a(5)*o(8),a(6)*o(0)+a(7)*o(3)+a(8)*o(6),a(6)*o(1)+a(7)*o(4)+a(8)*o(7),a(6)*o(2)+a(7)*o(5)+a(8)*o(8)];let s=e.tx,c=e.ty,l=Number(n.tx)||0,u=Number(n.ty)||0;e.tx=a(0)*l+a(1)*u+s,e.ty=a(3)*l+a(4)*u+c}function av(e,n){let r=rp(e),i=n.m??[1,0,0,0,1,0,0,0,1],a=Number(n.tx)||0,o=Number(n.ty)||0,s=t(i,0),c=t(i,1),l=t(i,3),u=t(i,4);if(Math.abs(s-1)<1e-12&&Math.abs(u-1)<1e-12&&Math.abs(c)<1e-12&&Math.abs(l)<1e-12)return se(r,a,o);let d=w(r),f=[];for(let e=0;e<=20;e++){let[t,n]=S(r,d.first+(d.last-d.first)*e/20);f.push([s*t+c*n+a,l*t+u*n+o])}return oe(f)}function ov(e,t,n){let r=fe(rp(e),rp(t),n),i=r.segments.map(e=>Object.assign(e,{delete(){}}));return{points:r.points,segments:i}}function sv(e,t,n){let r=rp(e),i=w(r);if(r.__bk2d===`line`){let e=t-r.ox,a=n-r.oy,o=Math.max(i.first,Math.min(i.last,e*r.dx+a*r.dy)),[s,c]=S(r,o);return{param:o,distance:Math.sqrt((s-t)**2+(c-n)**2)}}if(r.__bk2d===`circle`){let e=Math.atan2(n-r.cy,t-r.cx),i=r.sense?e:-e;for(;i<0;)i+=2*Math.PI;for(;i>2*Math.PI;)i-=2*Math.PI;let[a,o]=S(r,i);return{param:i,distance:Math.sqrt((a-t)**2+(o-n)**2)}}if(!isFinite(i.first)||!isFinite(i.last))return null;let a=i.first,o=1/0,s=(i.last-i.first)/200;for(let e=0;e<=200;e++){let c=i.first+e*s,[l,u]=S(r,c),d=(l-t)**2+(u-n)**2;d<o&&(o=d,a=c)}for(let e=0;e<10;e++){let[e,o]=S(r,a),[s,c]=C(r,a),l=(e-t)*s+(o-n)*c,u=s*s+c*c;if(u<1e-20)break;let d=l/u,f=Math.max(i.first,Math.min(i.last,a-d));if(Math.abs(f-a)<1e-14)break;a=f}let[c,l]=S(r,a);return{param:a,distance:Math.sqrt((c-t)**2+(l-n)**2)}}function cv(e,t,n,r,i,a){let o=rp(e),s=rp(t),c=n,l=i,u=1/0;for(let e=0;e<=50;e++){let t=n+(r-n)*e/50,[d,f]=S(o,t);for(let e=0;e<=50;e++){let n=i+(a-i)*e/50,[r,o]=S(s,n),p=(r-d)**2+(o-f)**2;p<u&&(u=p,c=t,l=n)}}let d=c,f=l;for(let c=0;c<20;c++){let[c,l]=S(s,f),u=sv(e,c,l);if(u){let e=Math.max(n,Math.min(r,u.param)),t=Math.abs(e-d)<1e-12;if(d=e,t)break}let[p,m]=S(o,d),h=sv(t,p,m);if(h){let e=Math.max(i,Math.min(a,h.param)),t=Math.abs(e-f)<1e-12;if(f=e,t)break}}let[p,m]=S(o,d),[h,g]=S(s,f);return Math.sqrt((h-p)**2+(g-m)**2)}function lv(e,n,r,i){let a=rp(e),o=w(a),s=Math.max(3,{C0:1,C1:2,C2:3,C3:4}[r]??4),c=Math.max(100,i*10),l=[],u=1/0;for(let e=0;e<3&&u>n;e++){l=[];for(let e=0;e<=c;e++){let t=o.first+(o.last-o.first)*e/c;l.push(S(a,t))}u=0;for(let e=0;e<c;e++){let[n,r]=S(a,o.first+(o.last-o.first)*(e+.5)/c),i=t(l,e),s=t(l,e+1),d=(i[0]+s[0])/2,f=(i[1]+s[1])/2,p=Math.sqrt((n-d)**2+(r-f)**2);p>u&&(u=p)}u>n&&(c=Math.min(c*2,500))}return F_(l,{degMax:s})}function uv(e){let n=ip(e);if(n.__bk2d===`bezier`)return[e];if(n.__bk2d!==`bspline`)return uv(lv(e,1e-6,`C2`,10));let r=w(rp(e)),i=r.first,a=r.last,o=[];for(let e of n.knots)e>i+1e-12&&e<a-1e-12&&o.push(e);let s=[i,...o,a],c=[];for(let e=0;e<s.length-1;e++){let r=t(s,e),i=t(s,e+1),a=i-r;if(a<1e-15)continue;let o=S(n,r),l=S(n,i),u=C(n,r),d=C(n,i),f=a/3,p={__bk2d:`bezier`,poles:[o,[o[0]+u[0]*f,o[1]+u[1]*f],[l[0]-d[0]*f,l[1]-d[1]*f],l]};c.push(p)}return c.length>0?c:[e]}function dv(){return Ce()}function fv(e,t,n){we(ap(e),rp(t),n)}function pv(e){let t=ap(e);return{xMin:t.xMin,yMin:t.yMin,xMax:t.xMax,yMax:t.yMax}}function mv(e,t){let n=ap(e),r=ap(t);n.xMin=Math.min(n.xMin,r.xMin),n.yMin=Math.min(n.yMin,r.yMin),n.xMax=Math.max(n.xMax,r.xMax),n.yMax=Math.max(n.yMax,r.yMax)}function hv(e,t){let n=ap(e),r=ap(t);return n.xMax<r.xMin||r.xMax<n.xMin||n.yMax<r.yMin||r.yMax<n.yMin}function gv(e,t,n){let r=ap(e);return t<r.xMin||t>r.xMax||n<r.yMin||n>r.yMax}function _v(e){let t=ip(e);return t.__bk2d===`circle`?{cx:t.cx,cy:t.cy,radius:t.radius,isDirect:t.sense}:null}function vv(e){let t=ip(e);return t.__bk2d===`ellipse`?{majorRadius:t.majorRadius,minorRadius:t.minorRadius,xAxisAngle:t.xDirAngle,isDirect:t.sense}:null}function yv(e){let t=ip(e);return t.__bk2d===`bezier`?[...t.poles]:null}function bv(e){let t=ip(e);return t.__bk2d===`bezier`?t.poles.length-1:null}function xv(e){let t=ip(e);return t.__bk2d===`bspline`?{poles:[...t.poles],knots:[...t.knots],multiplicities:[...t.multiplicities],degree:t.degree,isPeriodic:t.isPeriodic}:null}function Sv(e){return xe(rp(e))}function Cv(e){return Se(e)}function wv(e,t){let n=rp(e),r=w(n),i=[r.first,...[...t].sort((e,t)=>e-t),r.last],a=[];for(let e=0;e<i.length-1;e++)a.push({__bk2d:`trimmed`,basis:n,tStart:i[e],tEnd:i[e+1]});return a}function Tv(e,n,r,i,a){let o=rp(n),s=[i[1]*a[2]-i[2]*a[1],i[2]*a[0]-i[0]*a[2],i[0]*a[1]-i[1]*a[0]],c=(e,t)=>[r[0]+e*a[0]+t*s[0],r[1]+e*a[1]+t*s[1],r[2]+e*a[2]+t*s[2]];if(o.__bk2d===`line`)return gh(e,c(o.ox,o.oy),c(o.ox+o.dx*o.len,o.oy+o.dy*o.len));if(o.__bk2d===`circle`||o.__bk2d===`trimmed`){let n=o;for(;n.__bk2d===`trimmed`;)n=n.basis;if(n.__bk2d===`circle`){let r=n,a=c(r.cx,r.cy),s=r.sense?i:[-i[0],-i[1],-i[2]],l=w(o),u;u=o.__bk2d===`trimmed`?Math.abs(o.tEnd-o.tStart):2*Math.PI;let d=u>Math.PI?4:u>Math.PI/2?2:1,f=(l.last-l.first)/d,p=[];for(let t=0;t<d;t++){let[n,r]=S(o,l.first+t*f),[i,u]=S(o,l.first+(t+1)*f);p.push(e.makeCircleArc3d(...c(n,r),...c(i,u),...a,...s))}return p.length===1?Pf(t(p,0)):Ff(e.makeWire(p,!1))}if(n.__bk2d===`ellipse`){let r=n,l=c(r.cx,r.cy),u=Math.cos(r.xDirAngle),d=Math.sin(r.xDirAngle),f=[u*a[0]+d*s[0],u*a[1]+d*s[1],u*a[2]+d*s[2]],p=w(o),m=p.last-p.first,h=m*1e-4,[g,_]=S(o,p.first),[v,y]=S(o,p.first+h),b=(g-r.cx)*(y-r.cy)-(_-r.cy)*(v-r.cx)>=0?i:[-i[0],-i[1],-i[2]],x=o.__bk2d===`trimmed`?Math.abs(o.tEnd-o.tStart):2*Math.PI,C=x>Math.PI?4:x>Math.PI/2?2:1,ee=m/C,te=[];for(let t=0;t<C;t++){let[n,i]=S(o,p.first+t*ee),[a,s]=S(o,p.first+(t+1)*ee);te.push(e.makeEllipseArc3d(...c(n,i),...c(a,s),...l,...b,...f,r.majorRadius,r.minorRadius))}return te.length===1?Pf(t(te,0)):Ff(e.makeWire(te,!1))}}if(o.__bk2d===`bezier`||o.__bk2d===`bspline`){let n=o.poles.map(([e,t])=>c(e,t));if(n.length===2)return gh(e,t(n,0),t(n,1));let r=Math.min(3,n.length-1),i=n.flatMap(([e,t,n])=>[e,t,n]);return Pf(e.interpolatePoints(i,r))}let l=w(o),u=[];for(let e=0;e<=100;e++){let[t,n]=S(o,l.first+(l.last-l.first)*e/100);u.push(c(t,n))}return Rh(e,u)}function Ev(e,t,r){if(!jf(r))throw Error(`brepkit: buildEdgeOnSurface requires a face handle as surface`);let i=k(r,`face`),a=rp(t),o=w(a),s=e.getSurfaceType(i)===`plane`?50:100,c=[];for(let t=0;t<=s;t++){let[r,l]=S(a,o.first+(o.last-o.first)*t/s);c.push(n(e.evaluateSurface(i,r,l)))}return Rh(e,c)}function Dv(e){return e}function Ov(e,n,r,i){let a=0;for(;e.length<r;){let o=[];for(let r=0;r<e.length-1;r++){let a=t(e,r),s=t(e,r+1),c=(a.t+s.t)/2,l=n(c),u=(a.uv[0]+s.uv[0])/2,d=(a.uv[1]+s.uv[1])/2;Math.sqrt((l[0]-u)**2+(l[1]-d)**2)>i&&o.push({index:r+1,t:c,uv:l})}if(o.length===0)break;let s=r-e.length;for(let n=o.length-1;n>=0&&s>0;n--){let r=t(o,n);e.splice(r.index,0,{t:r.t,uv:r.uv}),s--}if(a++,a>3)break}}function kv(e,n,r){let i=k(n,`edge`),a=k(r,`face`),o=e.getEdgeCurveParameters(i),s=o[0]??0,c=o[1]??1,l=[];for(let e=0;e<=20;e++)l.push(s+(c-s)*e/20);let u=n=>{let r=e.evaluateEdgeCurve(i,n),o=e.projectPointOnSurface(a,t(r,0),t(r,1),t(r,2));return[t(o,0),t(o,1)]},d=l.map(e=>({t:e,uv:u(e)}));Ov(d,u,80,.05);let f=d.map(e=>e.uv);if(f.length>=2)return F_(f);let p=e.getEdgeVertices(i);if(p.length>=6){let n=e.projectPointOnSurface(a,t(p,0),t(p,1),t(p,2)),r=e.projectPointOnSurface(a,t(p,3),t(p,4),t(p,5));return te(t(n,0),t(n,1),t(r,0),t(r,1))}throw Error(`brepkit: extractCurve2dFromEdge: degenerate edge (${p.length} coords)`)}function Av(e,t,n){return e}function jv(e,n,r){if(n.length>=1){let r=hp(e,n[0],`edge`);if(r.length===4){let n=[],i=[];for(let a of r){let r=k(a,`edge`),o=e.getEdgeCurveParameters(r),s=t(o,0),c=t(o,1),l=[];for(let n=0;n<=10;n++){let i=s+(c-s)*n/10,a=e.evaluateEdgeCurve(r,i);l.push(t(a,0),t(a,1),t(a,2))}n.push(...l),i.push(11)}try{return Nf(e.fillCoonsPatch(n,i))}catch(e){console.warn(`brepkit: Coons patch failed, falling back:`,e)}}}let i=n[0];if(!i)throw Error(`fillSurface: no wires provided`);return Ah(e,i)}function Mv(e){return{createPoint2d:(e,t)=>w_(e,t),createDirection2d:(e,t)=>T_(e,t),createVector2d:(e,t)=>E_(e,t),createAxis2d:(e,t,n,r)=>D_(e,t,n,r),wrapCurve2dHandle:e=>O_(e),createCurve2dAdaptor:e=>k_(e),makeLine2d:(e,t,n,r)=>A_(e,t,n,r),makeCircle2d:(e,t,n,r)=>j_(e,t,n,r),makeArc2dThreePoints:(e,t,n,r,i,a)=>re(e,t,n,r,i,a),makeArc2dTangent:(e,t,n,r,i,a)=>ie(e,t,n,r,i,a),makeEllipse2d:(e,t,n,r,i,a,o)=>M_(e,t,n,r,i,a,o),makeEllipseArc2d:(e,t,n,r,i,a,o,s,c)=>N_(e,t,n,r,i,a,o,s,c),makeBezier2d:e=>P_(e),makeBSpline2d:(e,t)=>F_(e,t),evaluateCurve2d:(e,t)=>I_(e,t),evaluateCurve2dD1:(e,t)=>L_(e,t),getCurve2dBounds:e=>R_(e),getCurve2dType:e=>z_(e),trimCurve2d:(e,t,n)=>B_(e,t,n),reverseCurve2d:e=>{V_(e)},copyCurve2d:e=>H_(e),offsetCurve2d:(e,t)=>U_(e,t),translateCurve2d:(e,t,n)=>W_(e,t,n),rotateCurve2d:(e,t,n,r)=>G_(e,t,n,r),scaleCurve2d:(e,t,n,r)=>K_(e,t,n,r),mirrorCurve2dAtPoint:(e,t,n)=>q_(e,t,n),mirrorCurve2dAcrossAxis:(e,t,n,r,i)=>J_(e,t,n,r,i),affinityTransform2d:(e,t,n,r,i,a)=>Y_(e,t,n,r,i,a),createIdentityGTrsf2d:()=>Z_(),createAffinityGTrsf2d:(e,t,n,r,i)=>Q_(e,t,n,r,i),createTranslationGTrsf2d:(e,t)=>$_(e,t),createMirrorGTrsf2d:(e,t,n,r,i,a,o)=>ev(e,t,n,r,i,a,o),createRotationGTrsf2d:(e,t,n)=>tv(e,t,n),createScaleGTrsf2d:(e,t,n)=>nv(e,t,n),setGTrsf2dTranslationPart:(e,t,n)=>{rv(e,t,n)},multiplyGTrsf2d:(e,t)=>{iv(e,t)},transformCurve2dGeneral:(e,t)=>av(e,t),intersectCurves2d:(e,t,n)=>ov(e,t,n),projectPointOnCurve2d:(e,t,n)=>sv(e,t,n),distanceBetweenCurves2d:(e,t,n,r,i,a)=>cv(e,t,n,r,i,a),approximateCurve2dAsBSpline:(e,t,n,r)=>lv(e,t,n,r),decomposeBSpline2dToBeziers:e=>uv(e),createBoundingBox2d:()=>dv(),addCurveToBBox2d:(e,t,n)=>{fv(e,t,n)},getBBox2dBounds:e=>pv(e),mergeBBox2d:(e,t)=>{mv(e,t)},isBBox2dOut:(e,t)=>hv(e,t),isBBox2dOutPoint:(e,t,n)=>gv(e,t,n),getCurve2dCircleData:e=>_v(e),getCurve2dEllipseData:e=>vv(e),getCurve2dBezierPoles:e=>yv(e),getCurve2dBezierDegree:e=>bv(e),getCurve2dBSplineData:e=>xv(e),serializeCurve2d:e=>Sv(e),deserializeCurve2d:e=>Cv(e),splitCurve2d:(e,t)=>wv(e,t),liftCurve2dToPlane:(t,n,r,i)=>Tv(e,t,n,r,i),buildEdgeOnSurface:(t,n)=>Ev(e,t,n),extractSurfaceFromFace:e=>Dv(e),extractCurve2dFromEdge:(t,n)=>kv(e,t,n),buildCurves3d:e=>{},fixWireOnFace:(e,t,n)=>Av(e,t,n),fillSurface:(t,n)=>jv(e,t,n)}}function Nv(e,t){let n=t;if(n.type===`solid`)return e.volume(k(t),Xf);if(n.type===`compound`){let n=hp(e,t,`solid`),r=0;for(let t of n)r+=e.volume(k(t),Xf);return r}return 0}function Pv(e,t){let n=t;if(n.type===`face`)return e.faceArea(k(t),Xf);if(n.type===`solid`)return e.surfaceArea(k(t),Xf);if(n.type===`compound`){let n=hp(e,t,`face`),r=0;for(let t of n)r+=e.faceArea(k(t),Xf);return r}return 0}function Fv(e,t){let n=t;if(n.type===`edge`)return e.edgeLength(k(t));if(n.type===`face`)return e.facePerimeter(k(t));if(n.type===`wire`)return e.wireLength(n.id);throw Error(`brepkit: length() requires an edge, wire, or face`)}function Iv(e,n){let r=e.getEdgeVertices(n);return[(t(r,0)+t(r,3))/2,(t(r,1)+t(r,4))/2,(t(r,2)+t(r,5))/2]}function Lv(e,t){let r=t;if(r.type===`solid`)return n(e.centerOfMass(k(t),Xf));if(r.type===`face`){let n=Mp(e,t);return Fp(e,t,(n.uMin+n.uMax)/2,(n.vMin+n.vMax)/2)}if(r.type===`edge`)return Iv(e,r.id);if(r.type===`vertex`)return Ap(e,t);let i=hp(e,t,`vertex`);if(i.length>0){let t=0,n=0,r=0;for(let a of i){let i=Ap(e,a);t+=i[0],n+=i[1],r+=i[2]}return[t/i.length,n/i.length,r/i.length]}return[0,0,0]}function Rv(e,t){let n=t;return n.type===`edge`?Iv(e,n.id):Lv(e,t)}function zv(e,t){let r=t;if(r.type===`solid`){let r=e.boundingBox(k(t));return{min:n(r,0),max:n(r,3)}}if(r.type===`vertex`){let n=Ap(e,t);return{min:[...n],max:[...n]}}let i=hp(e,t,`vertex`);if(i.length===0)return{min:[0,0,0],max:[0,0,0]};let a=Ap(e,i[0]),o=a[0],s=a[1],c=a[2],l=a[0],u=a[1],d=a[2];for(let t=1;t<i.length;t++){let n=Ap(e,i[t]);n[0]<o&&(o=n[0]),n[0]>l&&(l=n[0]),n[1]<s&&(s=n[1]),n[1]>u&&(u=n[1]),n[2]<c&&(c=n[2]),n[2]>d&&(d=n[2])}return{min:[o,s,c],max:[l,u,d]}}function Bv(e,r,i){let a=r,o=i;if(a.type===`solid`&&o.type===`solid`){let r=e.solidToSolidDistance(a.id,o.id);return{value:t(r,0),point1:n(r,1),point2:n(r,4)}}if(a.type===`vertex`&&(o.type===`solid`||o.type===`face`||o.type===`edge`)){let r=n(e.getVertexPosition(a.id)),i=o.type===`solid`?e.pointToSolidDistance(r[0],r[1],r[2],o.id):o.type===`face`?e.pointToFaceDistance(r[0],r[1],r[2],o.id):e.pointToEdgeDistance(r[0],r[1],r[2],o.id);return{value:t(i,0),point1:r,point2:n(i,1)}}let s=r=>{if(r.type===`vertex`)return n(e.getVertexPosition(r.id));if(r.type===`solid`){let n=e.boundingBox(r.id);return[(t(n,0)+t(n,3))/2,(t(n,1)+t(n,4))/2,(t(n,2)+t(n,5))/2]}return[0,0,0]},c=s(a),l=s(o),u=l[0]-c[0],d=l[1]-c[1],f=l[2]-c[2];return{value:Math.sqrt(u*u+d*d+f*f),point1:c,point2:l}}function Vv(e,r,i,a){let o=k(r,`face`),s=e.measureCurvatureAtSurface(o,i,a);if(s.length<8)throw Error(`brepkit: measureCurvatureAtSurface returned ${s.length} values, expected 8`);let c=t(s,0),l=t(s,1);return{gaussian:c*l,mean:(c+l)/2,max:Math.max(c,l),min:Math.min(c,l),maxDirection:n(s,2),minDirection:n(s,5)}}function Hv(e,n){let r=e.tessellateFace(k(n,`face`),.1),i=r.positions,a=r.indices,o=0,s=0,c=0,l=0;for(let e=0;e<a.length;e+=3){let n=t(a,e)*3,r=t(a,e+1)*3,u=t(a,e+2)*3,d=t(i,n),f=t(i,n+1),p=t(i,n+2),m=t(i,r),h=t(i,r+1),g=t(i,r+2),_=t(i,u),v=t(i,u+1),y=t(i,u+2),b=(d+m+_)/3,x=(f+h+v)/3,S=(p+g+y)/3,C=m-d,w=h-f,ee=g-p,te=_-d,ne=v-f,re=y-p,ie=.5*Math.sqrt((w*re-ee*ne)**2+(ee*te-C*re)**2+(C*ne-w*te)**2);o+=b*ie,s+=x*ie,c+=S*ie,l+=ie}return l<1e-30?[0,0,0]:[o/l,s/l,c/l]}function Uv(e,t){let n=n=>Bv(e,t,n);return{distanceTo(e){return n(e)},dispose(){}}}function Wv(e,t,n=!1){let r=t,i=r.type===`edge`||r.type===`wire`||r.type===`face`;return{volume:Nv(e,t),area:Pv(e,t),length:n&&i?Fv(e,t):0,centerOfMass:Lv(e,t),boundingBox:zv(e,t)}}function Gv(e){return{volume:t=>Nv(e,t),area:t=>Pv(e,t),length:t=>Fv(e,t),centerOfMass:t=>Lv(e,t),linearCenterOfMass:t=>Rv(e,t),boundingBox:t=>zv(e,t),distance:(t,n)=>Bv(e,t,n),surfaceCurvature:(t,n,r)=>Vv(e,t,n,r),surfaceCenterOfMass:t=>Hv(e,t),createDistanceQuery:t=>Uv(e,t),measureBulk:(t,n)=>Wv(e,t,n)}}function Kv(e){return e.sketchNew()}function qv(e,t,n,r,i){return e.sketchAddPoint(t,n,r,i)}function Jv(e,t,n){e.sketchAddConstraint(t,n)}function Yv(e,t,n,r){return e.sketchSolve(t,n,r)}function Xv(e,t,n,r,i){return e.sketchAddArc(t,n,r,i)}function Zv(e,t){let n=e.sketchDof(t);return typeof n==`string`?n:String(n)}function Qv(e){return{sketchNew:()=>Kv(e),sketchAddPoint:(t,n,r,i)=>qv(e,t,n,r,i),sketchAddArc:(t,n,r,i)=>Xv(e,t,n,r,i),sketchAddConstraint:(t,n)=>{Jv(e,t,n)},sketchSolve:(t,n,r)=>Yv(e,t,n,r),sketchDof:t=>Zv(e,t)}}function $v(e,t,n,r){return O(e.extrude(k(t,`face`),n[0],n[1],n[2],r))}function ey(e,t,n,r){if(n&&typeof n==`object`&&`origin`in n&&`direction`in n){let{origin:i,direction:a}=n,o=180/Math.PI*r;return o>360&&(o=360),O(e.revolve(k(t,`face`),i[0],i[1],i[2],a[0],a[1],a[2],o))}throw Error(`brepkit: revolve requires axis with origin and direction`)}function ty(e,t,n,r,i){let a=180/Math.PI*i;return a>360&&(a=360),O(e.revolve(k(t,`face`),n[0],n[1],n[2],r[0],r[1],r[2],a))}function ny(e,t,n,r,i){(n!==void 0||r!==void 0||i!==void 0)&&tp(`loft-options`,`Loft options (ruled, startShape, endShape) not supported; ignored.`);let a=t.map(t=>{let n=t;return n.type===`wire`?e.makeFaceFromWire(n.id):k(t,`face`)});return O(e.loft(a))}function ry(e){switch(e){case 0:return`rmf`;case 1:return`rightCorner`;case 2:return`roundCorner`;default:return}}function iy(e,t,n,r){let i=r?.transitionMode===void 0?void 0:ry(r.transitionMode),a=t,o=a.type===`wire`?e.makeFaceFromWire(a.id):k(t,`face`);if(n.type===`wire`){let t=hp(e,n,`edge`).map(e=>k(e,`edge`));if(i&&t.length===1){let n=t[0];if(n!==void 0)return O(e.sweepWithOptions(o,n,i,[],0,`transformed`))}return i&&t.length>1&&tp(`sweep-transition-multi-edge`,`Sweep transition mode not supported for multi-edge wires; ignored.`),O(e.sweepAlongEdges(o,t))}if(i){let t=k(n,`edge`);return O(e.sweepWithOptions(o,t,i,[],0,`transformed`))}let s=km(e,n);if(!s)throw Error(`brepkit: sweep spine must be an edge or wire`);return O(e.sweep(o,s.degree,s.knots,s.controlPoints,s.weights))}function ay(e,t,n){let r=t,i=r.type===`wire`?e.makeFaceFromWire(r.id):k(t,`face`);if(n.type===`wire`){let t=hp(e,n,`edge`).map(e=>k(e,`edge`));return O(e.sweepAlongEdges(i,t))}let a=km(e,n);if(!a)throw Error(`brepkit: pipe spine must be an edge or wire`);return O(e.pipe(i,a.degree,a.knots,a.controlPoints,a.weights))}function oy(e,t,n,r,i,a,o){let s=k(t,`face`);return O(e.helicalSweep(s,n[0],n[1],n[2],r[0],r[1],r[2],i,a,o))}function sy(e,t,n,r,i,a){let o=k(t,`face`),s=k(n,`edge`);return O(e.sweepWithOptions(o,s,r,i,a,`transformed`))}function cy(e){switch(e){case`right`:return`rightCorner`;case`round`:return`roundCorner`;case`transformed`:return`rmf`;default:return}}function ly(e,t,n){return n?{shape:e,firstShape:t,lastShape:t}:e}function uy(e,t,n,r){try{return O(e.sweepWithOptions(t,n,r,[],0,`transformed`))}catch(e){console.warn(`brepkit: sweepWithOptions failed, falling back to sweepSmooth/simplePipe:`,e);return}}function dy(e,t){try{if(t.type!==`wire`)return{edgeId:k(t,`edge`)};let n=hp(e,t,`edge`);if(n.length===1){let e=n[0];return e?{edgeId:k(e,`edge`)}:void 0}tp(`sweepPipeShell-transition-multi-edge`,`sweepPipeShell transition mode not supported for multi-edge wires; ignored.`);return}catch(e){console.warn(`brepkit: resolveContactModeEdge failed for unexpected spine type, falling through:`,e);return}}function fy(e,t,n,r){let i=dy(e,n);if(i)return uy(e,t,i.edgeId,r)}function py(e,t,n){let r=km(e,n);if(!(!r||r.degree<=1))try{return O(e.sweepSmooth(t,r.degree,r.knots,r.controlPoints,r.weights))}catch(e){console.warn(`brepkit: sweepSmooth failed, falling back to simplePipe:`,e);return}}function my(e,t,n,r){let i=t,a=i.type===`wire`?e.makeFaceFromWire(i.id):k(t,`face`),o=!!(r&&r.shellMode),s=r?.transitionMode,c=s?cy(s):void 0;if(c){let r=fy(e,a,n,c);if(r)return ly(r,t,o)}return ly(py(e,a,n)||ay(e,t,n),t,o)}function hy(e,t,n){let r=t.map(t=>{let n=t;return n.type===`wire`?e.makeFaceFromWire(n.id):k(t,`face`)});try{let t={};if(n?.ruled!==void 0&&(t.ruled=n.ruled),n?.solid!==void 0&&(t.solid=n.solid),n?.tolerance!==void 0&&(t.tolerance=n.tolerance),n?.startVertex){let r=e.getVertexPosition(k(n.startVertex,`vertex`));t.startPoint=[r[0],r[1],r[2]]}if(n?.endVertex){let r=e.getVertexPosition(k(n.endVertex,`vertex`));t.endPoint=[r[0],r[1],r[2]]}return O(e.loftWithOptions(r,JSON.stringify(t)))}catch(e){console.warn(`brepkit: loftWithOptions failed, falling back to smooth/basic loft:`,e)}if(!n?.ruled)try{return O(e.loftSmooth(r))}catch(e){console.warn(`brepkit: loftSmooth failed, falling back to basic loft:`,e)}return ny(e,t)}function gy(e,t,n,r){let i={type:`extrusionLaw`,profile:t,length:n,endFactor:r,Trim(e,t,n){return i},delete:Af};return i}function _y(e,t,n,r,i,a,o){if(i!==null){let r=$v(e,n,Pp(e,n,0,0),i);return o?Km(e,t,r):r}return t}function vy(e){return{extrude:(t,n,r)=>$v(e,t,n,r),revolve:(t,n,r)=>ey(e,t,n,r),revolveVec:(t,n,r,i)=>ty(e,t,n,r,i),loft:(t,n,r,i)=>ny(e,t,n,r,i),sweep:(t,n,r)=>iy(e,t,n,r),simplePipe:(t,n)=>ay(e,t,n),helicalSweep:(t,n,r,i,a,o)=>oy(e,t,n,r,i,a,o),sweepWithOptions:(t,n,r,i,a)=>sy(e,t,n,r,i,a),sweepPipeShell:(t,n,r)=>my(e,t,n,r),loftAdvanced:(t,n)=>hy(e,t,n),buildExtrusionLaw:(t,n,r)=>gy(e,t,n,r),draftPrism:(t,n,r,i,a,o)=>_y(e,t,n,r,i,a,o)}}function yy(e){return{dispose:()=>{},executeBatch:t=>e.executeBatch(t),checkpoint:()=>e.checkpoint(),checkpointCount:()=>e.checkpointCount(),restoreCheckpoint:t=>{e.restore(t)},discardCheckpoint:t=>{e.discardCheckpoint(t)}}}var by=class{oc;kernelId=`brepkit`;capabilities=a;bk;constructor(e){this.bk=e,this.oc=e;let t=this.bk;Object.assign(this,ih(t),Jh(t),vy(t),fg(t),wm(t),r_(t),C_(t),Gv(t),kp(t),dm(t),Vm(t),qg(t),Qv(t),Mv(t),yy(t))}};function xy(e){throw Error(`manifold: ${e} is not implemented`)}var Sy=new Set(`makeBox.makeBoxWithCorners.makeCylinder.makeSphere.makeCone.makeTorus.makeEllipsoid.makeFuse.makeCut.makeCommon.translateShape.rotateShape.scaleShape.mirrorShape.transformShape.generalTransform.generalTransformNonOrthogonal.gridPattern.extrude.revolve.revolveVec.loft.loftAdvanced.sweep.simplePipe.sweepWithOptions.sweepPipeShell.helicalSweep.draftPrism.fillet.chamfer.chamferDistAngle.shell.thicken.offset.filletVariable.draft.defeature.simplify.reverseShape.hull.hullFromPoints.sewAndSolidify.profileEdge.profileWire.profileFace`.split(`.`));function Cy(e){return Sy.has(e)}function j(e,t,n){return{op:e,params:t,inputs:n,replayable:Cy(e)&&n.every(e=>e.replayable)}}function M(e,t){return{manifold:e,node:t}}function N(e){return e.manifold}function wy(e){return typeof e?.translate==`function`?e.translate([0,0,0]):e}function P(e){return e.node}function Ty(e){if(e&&typeof e==`object`&&`manifold`in e&&`node`in e)return e}var Ey=[`occt`,`occt-wasm`];function Dy(){for(let e of Ey)try{return F(e)}catch{}}function Oy(e){let t=Dy();if(!t)throw new c(`manifold: ${e} requires a registered occt kernel; none is available`);return t}var ky=new WeakMap,Ay=[0,0,0],jy=[0,0,1];function My(e){return Math.hypot(e[0],e[1],e[2])}function Ny(e){let t=My(e);return t===0?[...jy]:[e[0]/t,e[1]/t,e[2]/t]}function Py(e){let[t,n,r]=Ny(e);return[0,180/Math.PI*Math.atan2(Math.hypot(t,n),r),180/Math.PI*Math.atan2(n,t)]}function Fy(e){let t=e.Manifold;function n(e,t,n){let r=e;return n[0]===0&&n[1]===0&&n[2]>0||(r=r.rotate(Py(n))),(t[0]!==0||t[1]!==0||t[2]!==0)&&(r=r.translate(t)),r}return{makeBox:(e,n,r)=>M(t.cube([e,n,r],!1),j(`makeBox`,{width:e,height:n,depth:r},[])),makeBoxFromCorners:(e,n)=>{let r=[Math.abs(n[0]-e[0]),Math.abs(n[1]-e[1]),Math.abs(n[2]-e[2])],i=[Math.min(e[0],n[0]),Math.min(e[1],n[1]),Math.min(e[2],n[2])];return M(t.cube(r,!1).translate(i),j(`makeBoxWithCorners`,{p1:e,p2:n},[]))},makeCylinder:(e,r,i=Ay,a=jy)=>M(n(t.cylinder(r,e,e,0,!1),i,a),j(`makeCylinder`,{radius:e,height:r,center:i,direction:a},[])),makeSphere:(e,n=Ay)=>{let r=t.sphere(e,0);return(n[0]!==0||n[1]!==0||n[2]!==0)&&(r=r.translate(n)),M(r,j(`makeSphere`,{radius:e,center:n},[]))},makeCone:(e,r,i,a=Ay,o=jy)=>M(n(t.cylinder(i,e,r,0,!1),a,o),j(`makeCone`,{radius1:e,radius2:r,height:i,center:a,direction:o},[])),makeTorus:(r,i,a=Ay,o=jy)=>{let s=Math.max(3,e.getCircularSegments(i)),c=[];for(let e=0;e<s;e++){let t=e/s*Math.PI*2;c.push([r+i*Math.cos(t),i*Math.sin(t)])}return M(n(t.revolve([c],0),a,o),j(`makeTorus`,{majorRadius:r,minorRadius:i,center:a,direction:o},[]))},makeEllipsoid:(e,n,r)=>M(t.sphere(1,0).scale([e,n,r]),j(`makeEllipsoid`,{aLength:e,bLength:n,cLength:r},[])),makeRectangle:()=>xy(`makeRectangle`)}}function Iy(e){return e}function Ly(e,t,n){switch(n){case`cut`:case`subtract`:case`difference`:return e.subtract(t);case`intersect`:case`common`:case`intersection`:return e.intersect(t);default:return e.add(t)}}function Ry(e){let t=P(Iy(e)).params,n=t.normal,r=t.origin;if(!n||!r)throw Error(`manifold: section/split plane must carry normal+origin params`);return{normal:n,offset:n[0]*r[0]+n[1]*r[1]+n[2]*r[2]}}function zy(e){let t=new Uint32Array(e.triVerts),n=e.vertProperties.length/3,r=new Float32Array(n*3);for(let t=0;t<n;t++)r[t*3]=e.vertProperties[t*3]??0,r[t*3+1]=e.vertProperties[t*3+1]??0,r[t*3+2]=e.vertProperties[t*3+2]??0;return{vertices:r,normals:new Float32Array,triangles:t,uvs:new Float32Array,faceGroups:[{start:0,count:t.length,faceHash:0}]}}function By(e){let t=e.Manifold;function n(e,t,n){let r=Iy(e),i=Iy(t);return M(N(r).add(N(i)),j(`makeFuse`,{},[P(r),P(i)]))}function r(e,t,n){let r=Iy(e),i=Iy(t);return M(N(r).subtract(N(i)),j(`makeCut`,{},[P(r),P(i)]))}function i(e,t,n){let r=Iy(e),i=Iy(t);return M(N(r).intersect(N(i)),j(`makeCommon`,{},[P(r),P(i)]))}function a(e,n){if(e.length===0)throw Error(`manifold: fuseAll requires at least one shape`);let r=e.map(Iy),[i]=r;if(i===void 0)throw Error(`manifold: fuseAll requires at least one shape`);return r.length===1?i:M(t.union(r.map(N)),j(`makeFuse`,{},r.map(P)))}function o(e,n,r){let i=Iy(e);if(n.length===0)return i;let a=n.map(Iy);return M(t.difference([N(i),...a.map(N)]),j(`makeCut`,{},[P(i),...a.map(P)]))}function s(e,t,n){let r=Iy(e),{normal:i,offset:a}=Ry(t),[o]=N(r).splitByPlane(i,a);return M(o,j(`section`,{normal:i,offset:a},[P(r),P(Iy(t))]))}function c(e,n){let r=Iy(e),[i]=n;if(i===void 0)throw Error(`manifold: split requires at least one tool`);let a=Iy(i),{normal:o,offset:s}=Ry(i),[c,l]=N(r).splitByPlane(o,s);return M(t.union([c,l]),j(`split`,{normal:o,offset:s},[P(r),P(a)]))}function l(e,t,n){let r=[],i=Iy(e),a=Iy(t);return(N(i)===void 0||N(i).isEmpty())&&r.push({operand:`base`,issue:`null-shape`,message:`Base shape is empty`}),(N(a)===void 0||N(a).isEmpty())&&r.push({operand:`tool`,issue:`null-shape`,message:`Tool shape is empty`}),{valid:r.length===0,issues:r}}function u(n,r,i,a,o,s){let c=new e.Mesh({numProp:3,vertProperties:new Float32Array(n),triVerts:new Uint32Array(r)}),l=new e.Mesh({numProp:3,vertProperties:new Float32Array(i),triVerts:new Uint32Array(a)});return zy(Ly(t.ofMesh(c),t.ofMesh(l),o).getMesh())}return{fuse:n,cut:r,intersect:i,section:s,fuseAll:a,cutAll:o,split:c,checkBoolean:l,meshBoolean:u}}function Vy(e){return e}function Hy(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}function Uy(e){let t=Math.hypot(e[0],e[1],e[2]);return t<1e-12?[0,0,1]:[e[0]/t,e[1]/t,e[2]/t]}function Wy(e,t,n){let r=Hy();return r[12]=e,r[13]=t,r[14]=n,r}function Gy(e,t,n){let r=e,[i,a,o]=Uy(t),s=Math.cos(r),c=Math.sin(r),l=1-s,u=l*i*i+s,d=l*i*a+c*o,f=l*i*o-c*a,p=l*i*a-c*o,m=l*a*a+s,h=l*a*o+c*i,g=l*i*o+c*a,_=l*a*o-c*i,v=l*o*o+s,y=Hy();return y[0]=u,y[1]=d,y[2]=f,y[4]=p,y[5]=m,y[6]=h,y[8]=g,y[9]=_,y[10]=v,y[12]=n[0]-(u*n[0]+p*n[1]+g*n[2]),y[13]=n[1]-(d*n[0]+m*n[1]+_*n[2]),y[14]=n[2]-(f*n[0]+h*n[1]+v*n[2]),y}function Ky(e,t){let n=Hy();return n[0]=t,n[5]=t,n[10]=t,n[12]=e[0]*(1-t),n[13]=e[1]*(1-t),n[14]=e[2]*(1-t),n}function qy(e,t){let[n,r,i]=Uy(t),a=1-2*n*n,o=1-2*r*r,s=1-2*i*i,c=-2*n*r,l=-2*n*i,u=-2*r*i,d=Hy();d[0]=a,d[1]=c,d[2]=l,d[4]=c,d[5]=o,d[6]=u,d[8]=l,d[9]=u,d[10]=s;let f=e[0]*n+e[1]*r+e[2]*i;return d[12]=2*f*n,d[13]=2*f*r,d[14]=2*f*i,d}function Jy(e,t){let n=Hy();return n[0]=e[0],n[1]=e[3],n[2]=e[6],n[4]=e[1],n[5]=e[4],n[6]=e[7],n[8]=e[2],n[9]=e[5],n[10]=e[8],n[12]=t[0],n[13]=t[1],n[14]=t[2],n}function Yy(e,t,n,r,i){return M(e.transform(t),j(n,r,[i]))}function Xy(e,t,n,r){let i=Vy(e);return Yy(N(i),Wy(t,n,r),`translateShape`,{x:t,y:n,z:r},P(i))}function Zy(e,t,n=[0,0,1],r=[0,0,0]){let i=Vy(e);return Yy(N(i),Gy(t,n,r),`rotateShape`,{angle:t,axis:n,center:r},P(i))}function Qy(e,t,n){let r=Vy(e);return Yy(N(r),qy(t,n),`mirrorShape`,{origin:t,normal:n},P(r))}function $y(e,t,n){let r=Vy(e);return Yy(N(r),Ky(t,n),`scaleShape`,{center:t,factor:n},P(r))}function eb(e,t){if(!Array.isArray(t)||t.length!==16)throw Error(`manifold: transform expects a 16-element column-major matrix`);let n=Vy(e);return Yy(N(n),t,`transformShape`,{matrix:[...t]},P(n))}function tb(e,t,n,r){let i=Vy(e);return Yy(N(i),Jy(t,n),`generalTransform`,{linear:t,translation:n,isOrthogonal:r},P(i))}function nb(e,t,n){let r=Vy(e);return Yy(N(r),Jy(t,n),`generalTransformNonOrthogonal`,{linear:t,translation:n},P(r))}function rb(e){let t=Hy();for(let n of e)t=lb(n.type===`translate`?Wy(n.x,n.y,n.z):Gy(n.angle*Math.PI/180,n.axis??[0,0,1],n.center??[0,0,0]),t);return{handle:t,dispose:()=>{}}}function ib(e,t,n,r){let i=[e];for(let a=1;a<r;a++){let r=n*a;i.push(Xy(e,t[0]*r,t[1]*r,t[2]*r))}return i}function ab(e,t,n,r,i){let a=[e];for(let o=1;o<i;o++)a.push(Zy(e,r*o*Math.PI/180,n,t));return a}function ob(e,t,n,r,i,a,o,s){let c=Vy(t),l=[],u=[];for(let e=0;e<o;e++)for(let t=0;t<s;t++){let o=n[0]*i*e+r[0]*a*t,s=n[1]*i*e+r[1]*a*t,d=n[2]*i*e+r[2]*a*t;l.push(N(c).transform(Wy(o,s,d))),u.push(P(c))}return M(l.length===1?l[0]:e.Manifold.union(l),j(`gridPattern`,{directionX:n,directionY:r,spacingX:i,spacingY:a,countX:o,countY:s},u))}function sb(e){return e.map(e=>{switch(e.type){case`translate`:return Xy(e.shape,e.x,e.y,e.z);case`rotate`:return Zy(e.shape,e.angle*Math.PI/180,e.axis,e.center);case`scale`:return $y(e.shape,e.center,e.factor);case`mirror`:return Qy(e.shape,e.origin,e.normal)}})}function cb(e){return{composeTransform:rb,transform:eb,locate:eb,translate:Xy,rotate:Zy,mirror:Qy,scale:$y,generalTransform:tb,generalTransformNonOrthogonal:nb,positionOnCurve:()=>xy(`positionOnCurve`),linearPattern:ib,circularPattern:ab,gridPattern:(t,n,r,i,a,o,s)=>ob(e,t,n,r,i,a,o,s),transformBatch:sb}}function lb(e,t){let n=Hy();for(let r=0;r<4;r++)for(let i=0;i<4;i++){let a=0;for(let n=0;n<4;n++){let o=e[n*4+i]??0,s=t[r*4+n]??0;a+=o*s}n[r*4+i]=a}return n}var ub=2*Math.PI,db=e=>Math.hypot(e[0],e[1],e[2]),fb=(e,t)=>[e[0]-t[0],e[1]-t[1],e[2]-t[2]];function pb(e){return db(fb(e.p2,e.p1))}function mb(e,t){let n=e.map(e=>[e[0],e[1],e[2]]);for(let e=1;e<n.length;e++)for(let r=0;r<n.length-e;r++){let e=n[r]??[0,0,0],i=n[r+1]??[0,0,0];n[r]=[e[0]*(1-t)+i[0]*t,e[1]*(1-t)+i[1]*t,e[2]*(1-t)+i[2]*t]}return n[0]??[0,0,0]}function hb(e){return e.k===`line`?`LINE`:e.k===`bezier`?`BEZIER`:e.k===`helix`?`BSPLINE`:Math.abs(e.rx-e.ry)<1e-9*Math.max(1,e.rx)?`CIRCLE`:`ELLIPSE`}function gb(e){return e.k===`line`?{first:0,last:pb(e)}:e.k===`conic`?{first:e.a0,last:e.a1}:e.k===`helix`?{first:0,last:ub*e.turns}:{first:0,last:1}}function _b(e,t){if(e.k===`line`){let n=t/(pb(e)||1);return[e.p1[0]+(e.p2[0]-e.p1[0])*n,e.p1[1]+(e.p2[1]-e.p1[1])*n,e.p1[2]+(e.p2[2]-e.p1[2])*n]}if(e.k===`bezier`)return mb(e.points,t);if(e.k===`helix`){let n=Math.cos(t),r=Math.sin(t),i=e.pitch*t/ub;return[e.center[0]+e.radius*(n*e.x[0]+r*e.y[0])+i*e.axis[0],e.center[1]+e.radius*(n*e.x[1]+r*e.y[1])+i*e.axis[1],e.center[2]+e.radius*(n*e.x[2]+r*e.y[2])+i*e.axis[2]]}let n=Math.cos(t),r=Math.sin(t);return[e.center[0]+e.rx*n*e.x[0]+e.ry*r*e.y[0],e.center[1]+e.rx*n*e.x[1]+e.ry*r*e.y[1],e.center[2]+e.rx*n*e.x[2]+e.ry*r*e.y[2]]}function vb(e,t){let n;if(e.k===`line`)n=fb(e.p2,e.p1);else if(e.k===`bezier`){let r=mb(e.points,Math.max(0,t-1e-4));n=fb(mb(e.points,Math.min(1,t+1e-4)),r)}else if(e.k===`helix`){let r=Math.cos(t),i=Math.sin(t),a=e.pitch/ub;n=[e.radius*(-i*e.x[0]+r*e.y[0])+a*e.axis[0],e.radius*(-i*e.x[1]+r*e.y[1])+a*e.axis[1],e.radius*(-i*e.x[2]+r*e.y[2])+a*e.axis[2]]}else{let r=Math.cos(t),i=Math.sin(t);n=[-e.rx*i*e.x[0]+e.ry*r*e.y[0],-e.rx*i*e.x[1]+e.ry*r*e.y[1],-e.rx*i*e.x[2]+e.ry*r*e.y[2]]}let r=db(n)||1;return[n[0]/r,n[1]/r,n[2]/r]}function yb(e){if(e.k===`line`)return pb(e);if(e.k===`helix`){let t=ub*e.radius;return e.turns*Math.sqrt(t*t+e.pitch*e.pitch)}if(e.k===`conic`){let t=Math.abs(e.a1-e.a0);if(Math.abs(e.rx-e.ry)<1e-9*Math.max(1,e.rx))return e.rx*t;if(Math.abs(t-ub)<1e-9){let t=e.rx,n=e.ry,r=(t-n)*(t-n)/((t+n)*(t+n));return Math.PI*(t+n)*(1+3*r/(10+Math.sqrt(4-3*r)))}return Cb(t=>_b(e,t),e.a0,e.a1,256)}return Cb(t=>_b(e,t),0,1,128)}function bb(e){return e.k===`conic`&&Math.abs(Math.abs(e.a1-e.a0)-ub)<1e-9}function xb(e){return bb(e)}function Sb(e){return e.k===`conic`?ub:0}function Cb(e,t,n,r){let i=0,a=e(t);for(let o=1;o<=r;o++){let s=e(t+(n-t)*o/r);i+=db(fb(s,a)),a=s}return i}function wb(e){return e}function Tb(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function Eb(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 Db(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function Ob(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function kb(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function Ab(e){return Math.hypot(e[0],e[1],e[2])}function jb(e){let t=Ab(e);return t<1e-12?[0,0,1]:[e[0]/t,e[1]/t,e[2]/t]}function Mb(e){return jb(Eb(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function Nb(e){let t=jb(e),n=Mb(t);return{xAxis:n,yAxis:jb(Eb(t,n))}}function Pb(e){let t=0;for(let n=0;n<e.length;n++){let r=e[n]??[0,0],i=e[(n+1)%e.length]??[0,0];t+=r[0]*i[1]-i[0]*r[1]}return t/2}function Fb(e){return Pb(e)<0?[...e].reverse():e}function Ib(e){return Pb(e)>0?[...e].reverse():e}function Lb(e){return e.node?.params}function Rb(e){let t=wb(e),n=Lb(t),r=n?.outline??n?.polygon??n?.points;if(r&&r.length>=3){let e=n?.origin??[0,0,0],t=Fb(r.map(e=>[e[0],e[1]])),i=(n?.holes)?.filter(e=>e.length>=3).map(e=>Ib(e.map(e=>[e[0],e[1]])));if(n?.xAxis&&n.yAxis)return{outline:t,holes:i,origin:e,xAxis:n.xAxis,yAxis:n.yAxis};let{xAxis:a,yAxis:o}=Nb(n?.normal??[0,0,1]);return{outline:t,holes:i,origin:e,xAxis:a,yAxis:o}}return zb(t)}function zb(e){let t=N(e)?.getMesh?.();if(!t)throw Error(`manifold: profile carries no recorded outline and no mesh to derive one`);let n=t.numProp,r=Math.floor(t.vertProperties.length/n),i=[],a=0;for(let e=0;e<r;e++)i.push([t.vertProperties[e*n]??0,t.vertProperties[e*n+1]??0]),a+=t.vertProperties[e*n+2]??0;a/=Math.max(1,r);let o=Bb(i);return{outline:Fb(o.length>=3?o:[[-.5,-.5],[.5,-.5],[0,.5]]),origin:[0,0,a],xAxis:[1,0,0],yAxis:[0,1,0]}}function Bb(e){let t=[...e].sort((e,t)=>e[0]===t[0]?e[1]-t[1]:e[0]-t[0]);if(t.length<3)return[...t];let n=(e,t,n)=>(t[0]-e[0])*(n[1]-e[1])-(t[1]-e[1])*(n[0]-e[0]),r=[];for(let e of t){for(;r.length>=2&&n(r[r.length-2]??e,r[r.length-1]??e,e)<=0;)r.pop();r.push(e)}let i=[];for(let e=t.length-1;e>=0;e--){let r=t[e]??[0,0];for(;i.length>=2&&n(i[i.length-2]??r,i[i.length-1]??r,r)<=0;)i.pop();i.push(r)}return r.pop(),i.pop(),[...r,...i]}function Vb(e){let t=[];for(let n=1;n+1<e;n++)t.push(0,n,n+1);return t}function Hb(e,t){let n=e.length;if(n<2||t<=n)return e.map(e=>[e[0],e[1]]);let r=[],i=0;for(let t=0;t<n;t++){let a=e[t]??[0,0],o=e[(t+1)%n]??[0,0],s=Math.hypot(o[0]-a[0],o[1]-a[1]);r.push(s),i+=s}if(i===0)return e.map(e=>[e[0],e[1]]);let a=t-n,o=r.map(e=>a*e/i),s=o.map(e=>Math.floor(e)),c=s.reduce((e,t)=>e+t,0),l=o.map((e,t)=>({i:t,f:e-Math.floor(e)})).sort((e,t)=>t.f-e.f);for(let e=0;c<a;e++,c++){let t=l[e%l.length]?.i??0;s[t]=(s[t]??0)+1}let u=[];for(let t=0;t<n;t++){let r=e[t]??[0,0],i=e[(t+1)%n]??[0,0];u.push([r[0],r[1]]);let a=s[t]??0;for(let e=1;e<=a;e++){let t=e/(a+1);u.push([r[0]+(i[0]-r[0])*t,r[1]+(i[1]-r[1])*t])}}return u}function Ub(e,t,n=1){return e.outline.map(e=>{let r=e[0]*n,i=e[1]*n;return[t.origin[0]+t.xAxis[0]*r+t.yAxis[0]*i,t.origin[1]+t.xAxis[1]*r+t.yAxis[1]*i,t.origin[2]+t.xAxis[2]*r+t.yAxis[2]*i]})}function Wb(e,t){if(t.length<2)throw Error(`manifold: skinning requires at least two rings`);let n=t[0]?.length??0;if(n<3)throw Error(`manifold: skinning requires rings of at least three points`);let r=[];for(let e of t){if(e.length!==n)throw Error(`manifold: skinning requires all rings to share a vertex count`);for(let t of e)r.push(t[0],t[1],t[2])}let i=Kb(t.length,n),a=new e.Mesh({numProp:3,vertProperties:Float32Array.from(r),triVerts:Uint32Array.from(i)});return Gb(e,new e.Manifold(a))}function Gb(e,t){if(typeof t.volume!=`function`||t.volume()>=0)return t;let n=t.getMesh(),r=n.triVerts;for(let e=0;e+2<r.length;e+=3){let t=r[e+1]??0;r[e+1]=r[e+2]??0,r[e+2]=t}let i=new e.Mesh({numProp:n.numProp,vertProperties:n.vertProperties,triVerts:r}),a=new e.Manifold(i);return typeof t.delete==`function`&&t.delete(),a}function Kb(e,t){let n=[];for(let r=0;r+1<e;r++){let e=r*t,i=(r+1)*t;for(let r=0;r<t;r++){let a=(r+1)%t;n.push(e+r,e+a,i+a),n.push(e+r,i+a,i+r)}}let r=Vb(t);for(let e=0;e<r.length;e+=3)n.push(r[e]??0,r[e+2]??0,r[e+1]??0);let i=(e-1)*t,a=Vb(t);for(let e=0;e<a.length;e+=3)n.push(i+(a[e]??0),i+(a[e+1]??0),i+(a[e+2]??0));return n}function qb(e,t){let n=[];if(e.length===0)return n;let r=t=>{let n=e[Math.max(0,t-1)]??e[t]??[0,0,0];return jb(Db(e[Math.min(e.length-1,t+1)]??e[t]??[0,0,0],n))},i=r(0),a=jb(Db(t,kb(i,Tb(t,i))));Ab(a)<1e-9&&(a=Mb(i)),n.push({origin:e[0]??[0,0,0],xAxis:a,yAxis:jb(Eb(i,a)),tangent:i});for(let t=1;t<e.length;t++){let o=e[t-1]??[0,0,0],s=e[t]??[0,0,0],c=Db(s,o),l=Tb(c,c),u=a;if(l>1e-18){let e=Db(a,kb(c,2/l*Tb(c,a))),n=Db(i,kb(c,2/l*Tb(c,i))),o=Db(r(t),n),s=Tb(o,o);u=s>1e-18?Db(e,kb(o,2/s*Tb(o,e))):e}let d=r(t),f=jb(Db(u,kb(d,Tb(u,d)))),p=jb(Eb(d,f));n.push({origin:s,xAxis:f,yAxis:p,tangent:d}),i=d,a=f}return n}var Jb=24,Yb=24,Xb=null;function Zb(e){let t=Xb?Xb(Math.max(Math.abs(e),1e-6)):Jb;return Math.max(Jb,t)}var Qb=[0,0,0],$b=1e-6,ex={delete:()=>{},isEmpty:()=>!1};function tx(e,t){return e[t]??Qb}function nx(e,t=1){return Math.max(2,Math.ceil(Math.abs(e)/(2*Math.PI)*Zb(t)))}function rx(e){return jb(Eb(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function ix(e,t,n,r,i,a){let o=jb(t),s=a?jb(a):rx(o),c=jb(Eb(o,s)),l=i-r,u=nx(l,n),d=[];for(let t=0;t<=u;t++){let i=r+l*t/u;d.push(Ob(e,Ob(kb(s,n*Math.cos(i)),kb(c,n*Math.sin(i)))))}return d}function ax(e,t,n){let r=Db(t,e),i=Db(n,e),a=Eb(r,i);if(Ab(a)<1e-12)return[e,t,n];let o=jb(a),s=Tb(r,r),c=Tb(i,i),l=Tb(r,i),u=2*(s*c-l*l);if(Math.abs(u)<1e-18)return[e,t,n];let d=c*(s-l)/u,f=s*(c-l)/u,p=Ob(e,Ob(kb(r,d),kb(i,f))),m=Ab(Db(e,p)),h=jb(Db(e,p)),g=jb(Eb(o,h)),_=(e=>Math.atan2(Tb(Db(e,p),g),Tb(Db(e,p),h)))(n);return _<0&&(_+=2*Math.PI),ix(p,o,m,0,_,h)}function ox(e){let t=[];for(let n=0;n<=Yb;n++){let r=n/Yb,i=e.map(e=>[...e]);for(let e=1;e<i.length;e++)for(let t=0;t<i.length-e;t++){let e=tx(i,t),n=tx(i,t+1);i[t]=[e[0]*(1-r)+n[0]*r,e[1]*(1-r)+n[1]*r,e[2]*(1-r)+n[2]*r]}t.push(tx(i,0))}return t}function sx(e){let t=0,n=0,r=0;for(let i=0;i<e.length;i++){let a=tx(e,i),o=tx(e,(i+1)%e.length);t+=(a[1]-o[1])*(a[2]+o[2]),n+=(a[2]-o[2])*(a[0]+o[0]),r+=(a[0]-o[0])*(a[1]+o[1])}let i=[t,n,r];return Ab(i)<1e-12?[0,0,1]:jb(i)}function cx(e,t){return Ab(Db(e,t))<$b}function lx(e){let t=e[0];if(!t)return[];let n=[...t];for(let t=1;t<e.length;t++){let r=e[t]??[];if(r.length===0)continue;let i=tx(n,n.length-1),a=cx(tx(r,0),i),o=cx(tx(r,r.length-1),i);!a&&o&&(r=[...r].reverse());let s=cx(tx(r,0),i);for(let e=+!!s;e<r.length;e++)n.push(tx(r,e))}return n.length>1&&cx(tx(n,0),tx(n,n.length-1))&&n.pop(),n}function ux(e){let t=sx(e),n=tx(e,0),r=e.length>1?jb(Db(tx(e,1),n)):rx(t);r=jb(Db(r,kb(t,Tb(r,t)))),Ab(r)<1e-9&&(r=rx(t));let i=jb(Eb(t,r));return{outline:Fb(e.map(e=>{let t=Db(e,n);return[Tb(t,r),Tb(t,i)]})),origin:n,xAxis:r,yAxis:i}}var dx=12;function fx(e,t){let[n,r]=e.curveParameters(t),i=dx;try{e.curveType(t)===`line`&&(i=1)}catch{}let a=[];for(let o=0;o<=i;o++)a.push(e.curvePointAtParam(t,n+(r-n)*o/i));return a}function px(e,t){return lx(e.iterShapes(t,`edge`).map(t=>fx(e,t)))}function mx(e){let t=e.getCircularSegments;typeof t==`function`&&(Xb=e=>t(e));function n(e,t){return M(ex,j(`profileEdge`,t?{pts:e,curve:t}:{pts:e},[]))}function r(e,t){let n=jb(e),r=t?jb(t):rx(n);return{x:r,y:jb(Eb(n,r))}}function i(e,t,n){let r=Db(t,e),i=Db(n,e),a=Eb(r,i);if(Ab(a)<1e-12)return;let o=jb(a),s=Tb(r,r),c=Tb(i,i),l=Tb(r,i),u=2*(s*c-l*l);if(Math.abs(u)<1e-18)return;let d=c*(s-l)/u,f=s*(c-l)/u,p=Ob(e,Ob(kb(r,d),kb(i,f))),m=Ab(Db(e,p)),h=jb(Db(e,p)),g=jb(Eb(o,h)),_=Math.atan2(Tb(Db(n,p),g),Tb(Db(n,p),h));return _<0&&(_+=2*Math.PI),{k:`conic`,center:p,x:h,y:g,rx:m,ry:m,a0:0,a1:_}}function a(e){let t=Ty(e);if(t){let e=t.node.params;return e?.ring??e?.pts??[]}let n=Dy();return n?fx(n,e):[]}function o(e){let t=[];for(let n of e){let e=Ty(n);e&&t.push(P(e))}return t}function s(e){let t=lx(e.map(e=>a(e)));return M(ex,j(`profileWire`,{ring:t,...t.length>=3?ux(t):void 0},o(e)))}function c(e,t){let{outline:n,origin:r,xAxis:i,yAxis:a}=ux(e);return M(ex,j(`profileFace`,{outline:n,origin:r,xAxis:i,yAxis:a},t?[t]:[]))}function l(e){let t=Ty(e);if(t){let e=t.node.params?.ring??[];if(e.length>=3)return c(e,P(t))}let n=Dy();return c(n?px(n,e):[],t?P(t):void 0)}function u(e,t){let n=Ty(e),r=n?.node?.params??{},i=r.origin??Qb,a=r.xAxis??[1,0,0],s=r.yAxis??[0,1,0],c=e=>{let t=Db(e,i);return[Tb(t,a),Tb(t,s)]},l=[];for(let e of t){let t=Ty(e),n;if(t)n=t.node.params?.ring??[];else{let t=Dy();n=t?px(t,e):[]}n.length>=3&&l.push(n.map(c))}let u=[...r.holes??[],...l],d=n?[P(n),...o(t)]:o(t);return M(ex,j(`profileFace`,{outline:r.outline??[],holes:u,origin:i,xAxis:a,yAxis:s},d))}function d(e,t,n,r,i){let a=jb(t),o=i?jb(i):rx(a),s=jb(Eb(a,o)),c=[],l=Zb(Math.max(n,r));for(let t=0;t<=l;t++){let i=2*Math.PI*t/l;c.push(Ob(e,Ob(kb(o,n*Math.cos(i)),kb(s,r*Math.sin(i)))))}return c}return{makeVertex:(e,t,r)=>n([[e,t,r]]),makeLineEdge:(e,t)=>n([e,t],{k:`line`,p1:e,p2:t}),makeCircleEdge:(e,t,i)=>{let{x:a,y:o}=r(t);return n(ix(e,t,i,0,2*Math.PI),{k:`conic`,center:e,x:a,y:o,rx:i,ry:i,a0:0,a1:2*Math.PI})},makeCircleArc:(e,t,i,a,o)=>{let{x:s,y:c}=r(t);return n(ix(e,t,i,a,o),{k:`conic`,center:e,x:s,y:c,rx:i,ry:i,a0:a,a1:o})},makeArcEdge:(e,t,r)=>n(ax(e,t,r),i(e,t,r)),makeEllipseEdge:(e,t,i,a,o)=>{let{x:s,y:c}=r(t,o);return n(d(e,t,i,a,o),{k:`conic`,center:e,x:s,y:c,rx:i,ry:a,a0:0,a1:2*Math.PI})},makeBezierEdge:e=>n(ox(e),{k:`bezier`,points:e.map(e=>[...e])}),makeTangentArc:(e,t,r)=>n([e,r],{k:`line`,p1:e,p2:r}),makeHelixWire:(e,t,r,i=[0,0,0],a=[0,0,1],o=!1)=>{let s=jb(a),c=rx(s),l=jb(Eb(s,c)),u=o?kb(l,-1):l,d=e===0?0:t/e,f={k:`helix`,center:i,axis:s,x:c,y:u,radius:r,pitch:e,turns:d},p=Math.max(8,Math.ceil(d*Jb)),m=[];for(let e=0;e<=p;e++)m.push(_b(f,2*Math.PI*d*e/p));return n(m,f)},makeWire:e=>s(e),makeWireFromMixed:e=>s(e),makeFace:l,addHolesInFace:u,makePolygonFace:e=>c(e)}}function hx(e){let t=e.Manifold,n=mx(e);function r(e,n){let r=e.map(e=>[e.x,e.y,e.z]);return M(t.hull(r),j(`hullFromPoints`,{points:r,tolerance:n},[]))}function i(e,n){let r=e.map(e=>N(e));return M(t.hull(r),j(`hull`,{tolerance:n},e.map(e=>P(e))))}function a(e){let n=e.map(e=>N(e)),r=n[0];if(!r)throw Error(`manifold: makeCompound requires at least one input shape`);return M(n.length===1?r:t.union(n),j(`makeCompound`,{},e.map(e=>P(e))))}function o(e,t){let n=e[0];return n||xy(`sewAndSolidify (no input faces on manifold kernel)`),M(N(n),j(`sewAndSolidify`,{tolerance:t},e.map(e=>P(e))))}return{makeVertex:(e,t,r)=>n.makeVertex(e,t,r),makeEdge:()=>xy(`makeEdge`),makeWire:e=>n.makeWire(e),makeFace:(e,t)=>n.makeFace(e,t),makeLineEdge:(e,t)=>n.makeLineEdge(e,t),makeCircleEdge:(e,t,r)=>n.makeCircleEdge(e,t,r),makeCircleArc:(e,t,r,i,a)=>n.makeCircleArc(e,t,r,i,a),makeArcEdge:(e,t,r)=>n.makeArcEdge(e,t,r),makeEllipseEdge:(e,t,r,i,a)=>n.makeEllipseEdge(e,t,r,i,a),makeEllipseArc:()=>xy(`makeEllipseArc`),makeBezierEdge:e=>n.makeBezierEdge(e),makeTangentArc:(e,t,r)=>n.makeTangentArc(e,t,r),makeHelixWire:(e,t,r,i,a,o)=>n.makeHelixWire(e,t,r,i,a,o),makeWireFromMixed:e=>n.makeWireFromMixed(e),makeCompound:a,solidFromShell:()=>xy(`solidFromShell`),hull:i,hullFromPoints:r,buildSolidFromFaces:()=>xy(`buildSolidFromFaces`),makeNonPlanarFace:()=>xy(`makeNonPlanarFace`),addHolesInFace:(e,t)=>n.addHolesInFace(e,t),removeHolesFromFace:()=>xy(`removeHolesFromFace`),makeFaceOnSurface:()=>xy(`makeFaceOnSurface`),bsplineSurface:(e,t,n)=>Oy(`bsplineSurface`).bsplineSurface(e,t,n),triangulatedSurface:(e,t,n)=>Oy(`triangulatedSurface`).triangulatedSurface(e,t,n),buildTriFace:()=>xy(`buildTriFace`),sewAndSolidify:o,createPoint3d:()=>xy(`createPoint3d`),createDirection3d:()=>xy(`createDirection3d`),createVector3d:()=>xy(`createVector3d`),createAxis1:()=>xy(`createAxis1`),createAxis2:()=>xy(`createAxis2`),createAxis3:()=>xy(`createAxis3`)}}var gx=Math.PI/180;function _x(e){return e}function vx(e){let t=180/Math.PI*e;return t>360?360:t}function yx(e){let t=e;if(t&&typeof t.X==`function`&&typeof t.Y==`function`&&typeof t.Z==`function`)return[t.X(),t.Y(),t.Z()]}function bx(e){if(e&&typeof e==`object`){let t=e;if(`origin`in t&&`direction`in t)return{origin:t.origin,direction:t.direction};let n=e;if(typeof n.Location==`function`&&typeof n.Direction==`function`){let e=yx(n.Location()),t=yx(n.Direction());if(e&&t)return{origin:e,direction:t}}}}function xx(e){return e.outline.map(e=>[e[0],e[1]])}function Sx(e){return{outline:e.outline,origin:e.origin,xAxis:e.xAxis,yAxis:e.yAxis}}function Cx(e){return{origin:e.origin,xAxis:e.xAxis,yAxis:e.yAxis,tangent:jb(Eb(e.xAxis,e.yAxis))}}function wx(e){let t=0;for(let n of e.outline)t=Math.max(t,Math.hypot(n[0],n[1]));return t||1}function Tx(e){let t=N(e)?.getMesh?.();if(!t)return[];let n=t.numProp,r=Math.floor(t.vertProperties.length/n),i=[];for(let e=0;e<r;e++)i.push([t.vertProperties[e*n]??0,t.vertProperties[e*n+1]??0,t.vertProperties[e*n+2]??0]);return i}function Ex(e,t){let n=_x(e),r=n.node?.params,i=r?.path??r?.points??r?.ring;if(i&&i.length>=2)return i.map(e=>[e[0],e[1],e[2]]);let a=Tx(n);if(a.length>=2)return a;let o=[],s=Math.max(2,t);for(let e=0;e<s;e++)o.push([0,0,e/(s-1)]);return o}function Dx(e){return e?.node??j(`spine`,{},[])}function Ox(e,t,n){let r=t.xAxis,i=t.yAxis,a=t.origin,o=[r[0],r[1],r[2],0,i[0],i[1],i[2],0,n[0],n[1],n[2],0,a[0],a[1],a[2],1];return e.transform(o)}function kx(e,t,n){let r=jb(n);return e.outline.map(n=>{let i=Db(Ob(e.origin,Ob(kb(e.xAxis,n[0]),kb(e.yAxis,n[1]))),t),a=i[0]*r[0]+i[1]*r[1]+i[2]*r[2];return[Ab(Db(i,kb(r,a))),a]})}function Ax(e,t,n){let r=e,i=jb(n);if(!(Math.abs(i[0])<1e-9&&Math.abs(i[2])<1e-9&&i[1]>0)){let e=Math.acos(Math.max(-1,Math.min(1,i[1])))*(180/Math.PI),t=Eb([0,1,0],i);Ab(t)<1e-9&&(t=[1,0,0]),t=jb(t),r=r.rotate([t[0]*e,t[1]*e,t[2]*e])}return(t[0]!==0||t[1]!==0||t[2]!==0)&&(r=r.translate([t[0],t[1],t[2]])),r}function jx(e,t,n,r,i){let a=jb(t),{xAxis:o,yAxis:s}=Nb(a),c=i*2*Math.PI,l=Math.max(8,Math.ceil(Math.abs(i)*24)),u=r*i,d=[];for(let t=0;t<=l;t++){let r=t/l,i=c*r,f=Ob(kb(o,n*Math.cos(i)),kb(s,n*Math.sin(i)));d.push(Ob(e,Ob(f,kb(a,u*r))))}return d}function Mx(e){if(e.length!==0)return t=>{let n=t*(e.length-1),r=Math.floor(n),i=Math.min(e.length-1,r+1),a=n-r;return(e[r]??1)*(1-a)+(e[i]??1)*a}}function Nx(e,t,n,r){let i=Rb(t),a=jb([n[0],n[1],n[2]]),o=Ab([n[0]*r,n[1]*r,n[2]*r]),s=[xx(i),...(i.holes??[]).map(e=>e.map(e=>[e[0],e[1]]))];return M(Ox(Gb(e,e.Manifold.extrude(s,o)),i,a),j(`extrude`,{outline:i.outline,holes:i.holes,origin:i.origin,xAxis:i.xAxis,yAxis:i.yAxis,direction:[n[0],n[1],n[2]],length:r},[P(_x(t))]))}function Px(e,t,n,r,i,a,o){let s=Rb(t),c=vx(i),l=kx(s,n,r);return M(Ax(e.Manifold.revolve([l],0,c),n,r),j(a,o,[P(_x(t))]))}function Fx(e,t){let n=e.length;if(n===0||t.length!==n)return e;let r=0,i=1/0;for(let a=0;a<n;a++){let o=0;for(let r=0;r<n&&o<i;r++){let i=e[(r+a)%n]??[0,0,0],s=t[r]??[0,0,0],c=i[0]-s[0],l=i[1]-s[1],u=i[2]-s[2];o+=c*c+l*l+u*u}o<i&&(i=o,r=a)}if(r===0)return e;let a=[];for(let t=0;t<n;t++)a.push(e[(t+r)%n]??[0,0,0]);return a}function Ix(e,t,n,r){if(t.length<2)throw Error(`manifold: loft requires at least two profiles`);let i=t.map(Rb),a=i.reduce((e,t)=>Math.max(e,t.outline.length),0),o=i.map(e=>Ub({...e,outline:Hb(e.outline,a)},Cx(e)));for(let e=1;e<o.length;e++)o[e]=Fx(o[e]??[],o[e-1]??[]);return M(Wb(e,o),j(n,{sections:i.map(Sx),...r},t.map(e=>P(_x(e)))))}function Lx(e,t,n,r,i,a,o){let s=Rb(t),c=qb(n,s.xAxis),l=c.length;return M(Wb(e,c.map((e,t)=>{let n=o?o(l>1?t/(l-1):0):1;return Ub(s,e,n)})),j(i,{section:Sx(s),path:n.map(e=>[e[0],e[1],e[2]]),...a},[P(_x(t)),r]))}function Rx(e,t,n,r,i,a){if(r===null)return t;let o=Rb(n),s=jb(Eb(o.xAxis,o.yAxis)),c=Math.tan(i*gx),l={origin:Ob(o.origin,kb(s,r)),xAxis:o.xAxis,yAxis:o.yAxis,tangent:s},u=1+c*r/wx(o),d=Wb(e,[Ub(o,Cx(o),1),Ub(o,l,u)]),f=j(`draftPrism`,{outline:o.outline,origin:o.origin,xAxis:o.xAxis,yAxis:o.yAxis,height:r,angleDeg:i,fuse:a},[P(_x(n))]);if(a){let e=_x(t);return M(N(e).add(d),j(`makeFuse`,{},[P(e),f]))}return M(d,f)}function zx(e){return{revolve:(t,n,r)=>{let i=bx(n);if(!i)throw Error(`manifold: revolve could not read the axis; pass {origin,direction}, a gp_Ax1, or use revolveVec`);let{origin:a,direction:o}=i;return Px(e,t,a,o,r,`revolve`,{...Sx(Rb(t)),axisOrigin:[a[0],a[1],a[2]],axisDirection:[o[0],o[1],o[2]],angleDeg:vx(r)})},revolveVec:(t,n,r,i)=>Px(e,t,n,r,i,`revolveVec`,{...Sx(Rb(t)),center:[n[0],n[1],n[2]],direction:[r[0],r[1],r[2]],angleDeg:vx(i)})}}function Bx(e){return{sweep:(t,n,r)=>{let i={};return r?.transitionMode!==void 0&&(i.transitionMode=r.transitionMode),Lx(e,t,Ex(n,16),Dx(n),`sweep`,i)},simplePipe:(t,n)=>Lx(e,t,Ex(n,16),Dx(n),`simplePipe`,{}),sweepWithOptions:(t,n,r,i,a)=>Lx(e,t,Ex(n,Math.max(2,a||16)),Dx(n),`sweepWithOptions`,{contactMode:r,scaleValues:[...i],segments:a},Mx(i)),sweepPipeShell:(t,n,r)=>{let i={};r?.transitionMode!==void 0&&(i.transitionMode=r.transitionMode);let a=Lx(e,t,Ex(n,16),Dx(n),`sweepPipeShell`,i);return r?.shellMode?{shape:a,firstShape:t,lastShape:t}:a},helicalSweep:(t,n,r,i,a,o)=>Lx(e,t,jx(n,r,i,a,o),Dx(t),`helicalSweep`,{axisOrigin:[n[0],n[1],n[2]],axisDirection:[r[0],r[1],r[2]],radius:i,pitch:a,turns:o})}}function Vx(e){return{extrude:(t,n,r)=>Nx(e,t,n,r),...zx(e),loft:(t,n)=>Ix(e,t,`loft`,{ruled:n??!1}),loftAdvanced:(t,n)=>Ix(e,t,`loftAdvanced`,{solid:n?.solid??!0,ruled:n?.ruled??!1,tolerance:n?.tolerance}),...Bx(e),draftPrism:(t,n,r,i,a,o)=>Rx(e,t,n,i,a,o),buildExtrusionLaw:(e,t,n)=>{let r={type:`extrusionLaw`,profile:e,length:t,endFactor:n,Trim:(e,t,n)=>({...r,trimFirst:e,trimLast:t}),delete:()=>{}};return r},loftBatch:()=>xy(`loftBatch`),extrudeBatch:t=>t.map(t=>Nx(e,t.face,t.direction,t.length))}}var Hx=16;function Ux(e,t,n){if(!(n>0))return wy(t);let r=Kx(e,n);return r===void 0||typeof t?.minkowskiDifference!=`function`||typeof t?.minkowskiSum!=`function`?wy(t):t.minkowskiDifference(r).minkowskiSum(r)}function Wx(e,t,n){if(n===0)return wy(t);let r=Kx(e,Math.abs(n));return r===void 0?wy(t):n>0?typeof t?.minkowskiSum==`function`?t.minkowskiSum(r):wy(t):typeof t?.minkowskiDifference==`function`?t.minkowskiDifference(r):wy(t)}function Gx(e,t,n,r){if(n===0)return wy(t);if(r)return Wx(e,t,Math.abs(n));let i=Wx(e,t,-Math.abs(n));return typeof t?.subtract==`function`?t.subtract(i):wy(t)}function Kx(e,t){let n=e?.Manifold;if(typeof n?.sphere==`function`)return n.sphere(t,Hx)}function qx(e){return e}function Jx(e){let t=e;if(t!=null){if(typeof t.index==`number`)return t.index;if(typeof t.id==`number`)return t.id}}function Yx(e){let{min:t,max:n}=e;if(!(t===void 0||n===void 0||t.length<3||n.length<3))return[((t[0]??0)+(n[0]??0))/2,((t[1]??0)+(n[1]??0))/2,((t[2]??0)+(n[2]??0))/2]}function Xx(e){let t=e;if(t?.box!==void 0)return Yx(t.box);let n=(e?.manifold)?.boundingBox?.();return n===void 0?void 0:Yx(n)}function Zx(e){let t=e.length;if(t===0)return{kind:`all`,count:t};let n=[];for(let t of e){let e=Xx(t);if(e===void 0){n.length=0;break}n.push(e)}if(n.length===t)return{kind:`witness`,count:t,points:n};let r=[];for(let t of e){let e=Jx(t);if(e===void 0){r.length=0;break}r.push(e)}return r.length===t?{kind:`index`,count:t,indices:r}:{kind:`all`,count:t}}function Qx(e){return typeof e==`function`&&xy(`fillet (per-edge radius callback)`),e}function $x(e){return typeof e==`number`?e:e[0]}function eS(e){let t=e.match(/[-+]?\d*\.?\d+/);return t?Number(t[0]):0}function tS(e,t,n,r,i){let a=qx(n),o=Qx(i),s=Zx(r);return M(Ux(e,N(a),$x(o)),j(t,{radius:o,selection:s},[P(a)]))}function nS(e,t,n,r,i){let a=qx(t),o=Zx(n);return M(Ux(e,N(a),r),j(`chamferDistAngle`,{distance:r,angleDeg:i,selection:o},[P(a)]))}function rS(e,t,n){let r=t.node;if(r?.op!==`extrude`)return;let i=r.params??{},a=i.outline,o=i.origin,s=i.direction,c=i.length;if(!a||a.length<3||!o||!s||typeof c!=`number`)return;let l=Math.abs(n);try{let n=new e.CrossSection([a.map(e=>[e[0],e[1]])]).offset(-l);if(typeof n.isEmpty==`function`&&n.isEmpty())return;let r=e.Manifold.extrude(n,c),i=Math.hypot(s[0],s[1],s[2])||1,u=Math.abs(s[0])<1e-9&&Math.abs(s[1])<1e-9&&s[2]>0,d=r;if(!u){let e=Math.atan2(Math.hypot(s[0],s[1]),s[2])*(180/Math.PI),t=Math.atan2(s[1],s[0])*(180/Math.PI);d=d.rotate([0,e,t])}return d=d.translate([o[0]+s[0]/i*l,o[1]+s[1]/i*l,o[2]+s[2]/i*l]),Gb(e,N(t).subtract(d))}catch{return}}function iS(e,t,n,r,i){let a=qx(t),o=Zx(n);return M(rS(e,a,r)??Gx(e,N(a),r,!1),j(`shell`,i===void 0?{thickness:r,selection:o}:{thickness:r,selection:o,tolerance:i},[P(a)]))}function aS(e,t,n){let r=qx(t);return M(Gx(e,N(r),n,!0),j(`thicken`,{thickness:n},[P(r)]))}function oS(e,t,n,r){let i=qx(t);return M(Wx(e,N(i),n),j(`offset`,r===void 0?{distance:n}:{distance:n,tolerance:r},[P(i)]))}function sS(e,t,n){let r=qx(t);return M(Ux(e,N(r),eS(n)),j(`filletVariable`,{spec:n},[P(r)]))}function cS(e,t,n,r,i){typeof i==`function`&&xy(`draft (per-face angle callback)`);let a=qx(e),o=Zx(t);return M(wy(N(a)),j(`draft`,{pullDirection:n,neutralPlane:r,angleDeg:i,selection:o},[P(a)]))}function lS(e,t){let n=qx(e),r=Zx(t);return M(wy(N(n)),j(`defeature`,{selection:r},[P(n)]))}function uS(e){let t=qx(e),n=N(t);return M(typeof n?.simplify==`function`?n.simplify():wy(n),j(`simplify`,{},[P(t)]))}function dS(e){let t=qx(e),n=N(t);return M(typeof n?.mirror==`function`?n.mirror([1,0,0]):wy(n),j(`reverseShape`,{},[P(t)]))}function fS(e,t){let n=qx(t.shape),r=Zx(t.edges.map(e=>e.edge)),i=t.edges.map(e=>e.r2===void 0?e.radius:[e.radius,e.r2]),a=t.edges[0]?.radius??0;return M(Ux(e,N(n),a),j(`fillet`,{radii:i,selection:r},[P(n)]))}function pS(e){return{fillet:(t,n,r)=>tS(e,`fillet`,t,n,r),chamfer:(t,n,r)=>tS(e,`chamfer`,t,n,r),chamferDistAngle:(t,n,r,i)=>nS(e,t,n,r,i),shell:(t,n,r,i)=>iS(e,t,n,r,i),thicken:(t,n)=>aS(e,t,n),offset:(t,n,r)=>oS(e,t,n,r),filletVariable:(t,n)=>sS(e,t,n),draft:(e,t,n,r,i)=>cS(e,t,n,r,i),defeature:(e,t)=>lS(e,t),offsetWire2D:()=>xy(`offsetWire2D`),simplify:e=>uS(e),reverseShape:e=>dS(e),shellBatch:t=>t.map(t=>iS(e,t.shape,t.faces,t.thickness,t.tolerance)),filletBatch:t=>t.map(t=>fS(e,t))}}function mS(e){return N(e).getMesh()}function hS(e){let t=e.numProp,n=e.vertProperties.length/t;if(t===3)return new Float32Array(e.vertProperties);let r=new Float32Array(n*3);for(let i=0;i<n;i++)r[i*3]=e.vertProperties[i*t]??0,r[i*3+1]=e.vertProperties[i*t+1]??0,r[i*3+2]=e.vertProperties[i*t+2]??0;return r}function gS(e,t){let n=new Float32Array(e.length);for(let r=0;r<t.length;r+=3){let i=(t[r]??0)*3,a=(t[r+1]??0)*3,o=(t[r+2]??0)*3,s=e[i]??0,c=e[i+1]??0,l=e[i+2]??0,u=(e[a]??0)-s,d=(e[a+1]??0)-c,f=(e[a+2]??0)-l,p=(e[o]??0)-s,m=(e[o+1]??0)-c,h=(e[o+2]??0)-l,g=d*h-f*m,_=f*p-u*h,v=u*m-d*p;for(let e of[i,a,o])n[e]=(n[e]??0)+g,n[e+1]=(n[e+1]??0)+_,n[e+2]=(n[e+2]??0)+v}for(let e=0;e<n.length;e+=3){let t=n[e]??0,r=n[e+1]??0,i=n[e+2]??0,a=Math.sqrt(t*t+r*r+i*i);a>1e-12&&(n[e]=t/a,n[e+1]=r/a,n[e+2]=i/a)}return n}function _S(e){let t=e.triVerts.length/3,{runIndex:n,runOriginalID:r}=e;if(!n||!r||n.length<2)return[{start:0,count:e.triVerts.length,faceHash:0}];let i=[];for(let e=0;e+1<n.length;e++){let a=n[e]??0,o=(n[e+1]??t*3)-a;o!==0&&i.push({start:a,count:o,faceHash:r[e]??0})}return i}function vS(e,t){let n=mS(e),r=hS(n),i=new Uint32Array(n.triVerts);return{vertices:r,normals:t.skipNormals?new Float32Array:gS(r,i),triangles:i,uvs:t.includeUVs?new Float32Array(r.length/3*2):new Float32Array,faceGroups:_S(n)}}function yS(e,t,n){let r=mS(e),i=hS(r),a=r.triVerts,o=[],s=[],c=new Set,l=i.length/3,u=e=>{o.push(i[e*3]??0,i[e*3+1]??0,i[e*3+2]??0)};for(let e=0;e<a.length;e+=3){let t=a[e]??0,n=a[e+1]??0,r=a[e+2]??0;for(let[e,i]of[[t,n],[n,r],[r,t]]){let t=Math.min(e,i),n=Math.max(e,i),r=t*l+n;if(c.has(r))continue;c.add(r);let a=o.length/3;u(t),u(n),s.push({start:a,count:2,edgeHash:r})}}return{lines:new Float32Array(o),edgeGroups:s}}function bS(e){return!0}function xS(e){return{mesh:(e,t)=>vS(e,t),meshEdges:(e,t,n)=>yS(e,t,n),hasTriangulation:e=>bS(e),meshShape:(e,t,n)=>{}}}function SS(e,t=[0,0,0]){return Array.isArray(e)&&e.length>=3?[Number(e[0]),Number(e[1]),Number(e[2])]:[...t]}function CS(e,t=0){return typeof e==`number`?e:t}function wS(e,t=``){return typeof e==`string`?e:t}function TS(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function ES(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function DS(e,t,n,r){return TS(t,TS(ES(n,e[0]),ES(r,e[1])))}function OS(e,t){let n=t.outline??[];if(n.length<3)throw Error(`manifold replay: profile outline needs at least three points`);let r=SS(t.origin),i=SS(t.xAxis,[1,0,0]),a=SS(t.yAxis,[0,1,0]),o=n.map(e=>DS(e,r,i,a)),s=[];for(let t=0;t<o.length;t++){let n=o[t]??r,i=o[(t+1)%o.length]??r;s.push(e.makeLineEdge([n[0],n[1],n[2]],[i[0],i[1],i[2]]))}let c=e.makeWire(s),l=e.makeFace(c,!0);for(let t of s)e.dispose(t);return l}function kS(e,t){return OS(e,t)}function AS(e,t){let n=e.boundingBox(t);return[(n.min[0]+n.max[0])/2,(n.min[1]+n.max[1])/2,(n.min[2]+n.max[2])/2]}function jS(e,t){let n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return n*n+r*r+i*i}function MS(e,t,n,r){let i=e.iterShapes(t,r);if(!n||n.kind===`all`)return i;if(n.kind===`witness`){let t=n.points??[],r=i.map(t=>AS(e,t)),a=[],o=new Set;for(let e of t){let t=-1,n=1/0;for(let a=0;a<i.length;a++){if(o.has(a))continue;let i=jS(e,r[a]??[0,0,0]);i<n&&(n=i,t=a)}let s=i[t];t>=0&&s!==void 0&&(o.add(t),a.push(s))}return a}if(n.kind===`index`){let e=n.indices??[],t=[];for(let n of e){let e=i[n];e!==void 0&&t.push(e)}return t}let a=n.regions??[],o=e=>a.some(t=>e[0]>=t.min[0]&&e[0]<=t.max[0]&&e[1]>=t.min[1]&&e[1]<=t.max[1]&&e[2]>=t.min[2]&&e[2]<=t.max[2]);return i.filter(t=>o(AS(e,t)))}function NS(e){let t=e.selection;return t===void 0?void 0:t}function PS(e){let t=e[0];if(t===void 0)throw Error(`manifold replay: op requires an input shape`);return t}function FS(e,t,n){return e.createAxis1(t[0],t[1],t[2],n[0],n[1],n[2])}function IS(e,t){return(n,r)=>{let i=OS(n,r),a=SS(r[e]),o=SS(r[t],[0,0,1]),s=CS(r.angleDeg,360);return n.revolve(i,FS(n,a,o),Math.PI/180*s)}}var LS={makeBox:(e,t)=>e.makeBox(CS(t.width),CS(t.height),CS(t.depth)),makeBoxWithCorners:(e,t)=>e.makeBoxFromCorners(SS(t.p1),SS(t.p2)),makeCylinder:(e,t)=>e.makeCylinder(CS(t.radius),CS(t.height),SS(t.center),SS(t.direction,[0,0,1])),makeSphere:(e,t)=>e.makeSphere(CS(t.radius),SS(t.center)),makeCone:(e,t)=>e.makeCone(CS(t.radius1),CS(t.radius2),CS(t.height),SS(t.center),SS(t.direction,[0,0,1])),makeTorus:(e,t)=>e.makeTorus(CS(t.majorRadius),CS(t.minorRadius),SS(t.center),SS(t.direction,[0,0,1])),makeEllipsoid:(e,t)=>e.makeEllipsoid(CS(t.aLength),CS(t.bLength),CS(t.cLength)),makeFuse:(e,t,n)=>{if(n.length<2)return PS(n);let r=PS(n);for(let t of n.slice(1))r=e.fuse(r,t);return r},makeCut:(e,t,n)=>{let r=PS(n);return e.cutAll(r,n.slice(1))},makeCommon:(e,t,n)=>{let r=PS(n);for(let t of n.slice(1))r=e.intersect(r,t);return r},translateShape:(e,t,n)=>e.translate(PS(n),CS(t.x),CS(t.y),CS(t.z)),rotateShape:(e,t,n)=>e.rotate(PS(n),CS(t.angle),SS(t.axis,[0,0,1]),SS(t.center)),scaleShape:(e,t,n)=>e.scale(PS(n),SS(t.center),CS(t.factor,1)),mirrorShape:(e,t,n)=>e.mirror(PS(n),SS(t.origin),SS(t.normal,[1,0,0])),transformShape:(e,t,n)=>e.transform(PS(n),t.matrix),generalTransform:(e,t,n)=>e.generalTransform(PS(n),t.linear,SS(t.translation),!!t.isOrthogonal),generalTransformNonOrthogonal:(e,t,n)=>e.generalTransformNonOrthogonal(PS(n),t.linear,SS(t.translation)),gridPattern:(e,t,n)=>{if(typeof e.gridPattern!=`function`)throw Error(`manifold replay: target kernel lacks gridPattern`);return e.gridPattern(PS(n),SS(t.directionX),SS(t.directionY),CS(t.spacingX),CS(t.spacingY),CS(t.countX,1),CS(t.countY,1))},profileEdge:(e,t)=>{let n=t.pts??[],r=n[0]??[0,0,0],i=n.length>1?n[n.length-1]??r:[r[0]+.001,r[1],r[2]];return e.makeLineEdge([r[0],r[1],r[2]],[i[0],i[1],i[2]])},profileWire:(e,t)=>{let n=t.ring??[],r=[];for(let t=0;t<n.length;t++){let i=n[t]??[0,0,0],a=n[(t+1)%n.length]??i;r.push(e.makeLineEdge([i[0],i[1],i[2]],[a[0],a[1],a[2]]))}let i=e.makeWire(r);for(let t of r)e.dispose(t);return i},profileFace:(e,t)=>OS(e,t),extrude:(e,t)=>{let n=OS(e,t);return e.extrude(n,SS(t.direction,[0,0,1]),CS(t.length,1))},revolve:IS(`axisOrigin`,`axisDirection`),revolveVec:IS(`center`,`direction`),loft:(e,t)=>{let n=(t.sections??[]).map(t=>RS(e,t));return e.loft(n,!!t.ruled)},loftAdvanced:(e,t)=>{let n=(t.sections??[]).map(t=>RS(e,t)),r={solid:t.solid!==!1,ruled:!!t.ruled};return typeof t.tolerance==`number`&&(r.tolerance=t.tolerance),e.loftAdvanced(n,r)},sweep:(e,t)=>e.sweep(zS(e,t),BS(e,t)),simplePipe:(e,t)=>e.simplePipe(zS(e,t),BS(e,t)),sweepWithOptions:(e,t)=>e.sweepWithOptions(zS(e,t),BS(e,t),wS(t.contactMode),t.scaleValues??[],CS(t.segments,0)),sweepPipeShell:(e,t)=>{let n=e.sweepPipeShell(zS(e,t),BS(e,t));return VS(n)?n.shape:n},helicalSweep:(e,t)=>e.helicalSweep(zS(e,t),SS(t.axisOrigin),SS(t.axisDirection,[0,0,1]),CS(t.radius),CS(t.pitch),CS(t.turns,1)),draftPrism:(e,t)=>{let n=OS(e,t);return e.draftPrism(n,n,n,CS(t.height),CS(t.angleDeg),!!t.fuse)},fillet:(e,t,n)=>{let r=PS(n),i=MS(e,r,NS(t),`edge`),a=t.radii,o=t.radius;if(a&&a.length>1){let t=new Map;for(let e=0;e<i.length;e++){let n=i[e],r=a[e]??a[a.length-1];n!==void 0&&r!==void 0&&t.set(n,r)}return e.fillet(r,i,e=>t.get(e)??0)}let s=a?.[0]??o;return e.fillet(r,i,s??0)},chamfer:(e,t,n)=>{let r=PS(n),i=MS(e,r,NS(t),`edge`);return e.chamfer(r,i,t.radius)},chamferDistAngle:(e,t,n)=>{let r=PS(n),i=MS(e,r,NS(t),`edge`);return e.chamferDistAngle(r,i,CS(t.distance),CS(t.angleDeg))},shell:(e,t,n)=>{let r=PS(n),i=MS(e,r,NS(t),`face`);return typeof t.tolerance==`number`?e.shell(r,i,CS(t.thickness),t.tolerance):e.shell(r,i,CS(t.thickness))},thicken:(e,t,n)=>e.thicken(PS(n),CS(t.thickness)),offset:(e,t,n)=>typeof t.tolerance==`number`?e.offset(PS(n),CS(t.distance),t.tolerance):e.offset(PS(n),CS(t.distance)),filletVariable:(e,t,n)=>e.filletVariable(PS(n),wS(t.spec)),draft:(e,t,n)=>{let r=PS(n),i=MS(e,r,NS(t),`face`);return e.draft(r,i,SS(t.pullDirection,[0,0,1]),SS(t.neutralPlane),CS(t.angleDeg))},defeature:(e,t,n)=>{let r=PS(n),i=MS(e,r,NS(t),`face`);return e.defeature(r,i)},simplify:(e,t,n)=>e.simplify(PS(n)),reverseShape:(e,t,n)=>e.reverseShape(PS(n)),hull:(e,t,n)=>e.hull([...n],CS(t.tolerance)),hullFromPoints:(e,t)=>{let n=t.points??[];return e.hullFromPoints(n.map(e=>({x:e[0],y:e[1],z:e[2]})),CS(t.tolerance))},sewAndSolidify:(e,t,n)=>e.sewAndSolidify([...n],CS(t.tolerance))};function RS(e,t){let n=kS(e,t);return e.iterShapes(n,`wire`)[0]??n}function zS(e,t){let n=t.section;return n?kS(e,n):OS(e,t)}function BS(e,t){let n=t.path??[];if(n.length<2)throw Error(`manifold replay: sweep spine needs at least two path points`);let r=[];for(let t=0;t+1<n.length;t++){let i=n[t]??[0,0,0],a=n[t+1]??[0,0,0];r.push(e.makeLineEdge([i[0],i[1],i[2]],[a[0],a[1],a[2]]))}let i=e.makeWire(r);for(let t of r)e.dispose(t);return i}function VS(e){return typeof e==`object`&&!!e&&`shape`in e&&`firstShape`in e&&`lastShape`in e}function HS(e,t,n,r){let i=n.get(e);if(i!==void 0)return i;if(!e.replayable)throw Error(`manifold replay: op '${e.op}' is not replayable (raw-mesh origin or unsupported)`);let a=LS[e.op];if(!a)throw Error(`manifold replay: no replay handler for op '${e.op}'`);let o=e.inputs.map(e=>HS(e,t,n,r)),s=a(t,e.params,o);return n.set(e,s),r.add(s),s}function US(e,t,n=new Map){let r=new Set,i=HS(e,t,n,r);for(let e of r)e!==i&&t.dispose(e);return i}function WS(e){return N(e)}function GS(e){let t=e?.node?.params;if(!t)return;let n=t.pts??t.ring;if(n&&n.length)return n;let r=t.outline;if(r&&r.length){let e=t.origin??[0,0,0],n=t.xAxis??[1,0,0],i=t.yAxis??[0,1,0];return r.map(t=>[e[0]+n[0]*t[0]+i[0]*t[1],e[1]+n[1]*t[0]+i[1]*t[1],e[2]+n[2]*t[0]+i[2]*t[1]])}}function KS(e){let t=[1/0,1/0,1/0],n=[-1/0,-1/0,-1/0];for(let r of e)for(let e=0;e<3;e++){let i=r[e]??0;i<(t[e]??1/0)&&(t[e]=i),i>(n[e]??-1/0)&&(n[e]=i)}return{min:t,max:n}}function qS(e){let t=e;if(t&&t.__manifoldSub&&t.box)return t.box;let n=GS(e);return n?KS(n):WS(e).boundingBox()}function JS(e){return WS(e)?.getMesh?.()}function YS(e,t){let n=t*e.numProp;return[e.vertProperties[n]??0,e.vertProperties[n+1]??0,e.vertProperties[n+2]??0]}function XS(e,t){let n=t*3;return[e.triVerts[n]??0,e.triVerts[n+1]??0,e.triVerts[n+2]??0]}function ZS(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 QS(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function $S(e){let t=qS(e);return[(t.min[0]+t.max[0])/2,(t.min[1]+t.max[1])/2,(t.min[2]+t.max[2])/2]}function eC(e){let t=Math.floor(e.vertProperties.length/e.numProp);if(t===0)return[0,0,0];let n=[0,0,0];for(let r=0;r<t;r++){let t=YS(e,r);n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}return[n[0]/t,n[1]/t,n[2]/t]}function tC(e){let t=JS(e);if(!t)return $S(e);let n=Math.floor(t.triVerts.length/3),r=0,i=[0,0,0];for(let e=0;e<n;e++){let[n,a,o]=XS(t,e),s=YS(t,n),c=YS(t,a),l=YS(t,o),u=QS(s,ZS(c,l))/6;r+=u,i[0]+=(s[0]+c[0]+l[0])/4*u,i[1]+=(s[1]+c[1]+l[1])/4*u,i[2]+=(s[2]+c[2]+l[2])/4*u}return Math.abs(r)<1e-12?eC(t):[i[0]/r,i[1]/r,i[2]/r]}function nC(e){let t=JS(e);if(!t)return $S(e);let n=Math.floor(t.triVerts.length/3),r=0,i=[0,0,0];for(let e=0;e<n;e++){let[n,a,o]=XS(t,e),s=YS(t,n),c=YS(t,a),l=YS(t,o),u=ZS([c[0]-s[0],c[1]-s[1],c[2]-s[2]],[l[0]-s[0],l[1]-s[1],l[2]-s[2]]),d=Math.hypot(u[0],u[1],u[2])/2;r+=d,i[0]+=(s[0]+c[0]+l[0])/3*d,i[1]+=(s[1]+c[1]+l[1])/3*d,i[2]+=(s[2]+c[2]+l[2])/3*d}return r<1e-12?eC(t):[i[0]/r,i[1]/r,i[2]/r]}function rC(e){return WS(e).volume()}function iC(e){let t=e;return t&&t.__nativeFace&&typeof t.area==`number`?t.area:WS(e).surfaceArea()}function aC(e){let t=e;if(t&&t.__manifoldSub&&t.box)return{min:[...t.box.min],max:[...t.box.max]};let n=qS(e);return{min:[...n.min],max:[...n.max]}}function oC(e){return tC(e)}function sC(e,t){let n=(e,t,n,r)=>{if(t<n)return[t,n];if(r<e)return[e,r];let i=(Math.max(e,n)+Math.min(t,r))/2;return[i,i]},[r,i]=n(e.min[0],e.max[0],t.min[0],t.max[0]),[a,o]=n(e.min[1],e.max[1],t.min[1],t.max[1]),[s,c]=n(e.min[2],e.max[2],t.min[2],t.max[2]),l=i-r,u=o-a,d=c-s;return{value:Math.sqrt(l*l+u*u+d*d),point1:[r,a,s],point2:[i,o,c]}}function cC(e,t){return sC(qS(e),qS(t))}function lC(e,t=!1){return{volume:rC(e),area:iC(e),length:0,centerOfMass:oC(e),boundingBox:aC(e)}}function uC(e,t,n){let r=Dy();if(!r)throw new c(`manifold: surfaceCurvature requires a registered occt kernel; none is available`);let i=Ty(e);if(!i)return r.surfaceCurvature(e,t,n);if(!i.node.replayable)throw Error(`manifold: surfaceCurvature unsupported; shape originates from a non-replayable op (raw mesh import or mesh boolean)`);let a=ky.get(i.node)??(()=>{let e=US(i.node,r);return ky.set(i.node,e),e})();return r.surfaceCurvature(a,t,n)}function dC(e){return{volume:e=>rC(e),area:e=>iC(e),length:e=>{let t=e;if(t&&t.__nativeEdge&&typeof t.length==`number`)return t.length;let n=Ty(e)?.node;return n?.op===`profileEdge`&&n.params?.curve?yb(n.params.curve):xy(`length`)},centerOfMass:e=>oC(e),linearCenterOfMass:e=>oC(e),boundingBox:e=>aC(e),distance:(e,t)=>cC(e,t),surfaceCurvature:(e,t,n)=>uC(e,t,n),surfaceCenterOfMass:e=>nC(e),measureBulk:(e,t)=>lC(e,t),createDistanceQuery:e=>({distanceTo:t=>cC(e,t),dispose:()=>{}})}}function fC(e,t){let{runIndex:n,runOriginalID:r}=e;if(!n||!r)return 0;let i=t*3;for(let e=0;e<r.length;e++){let t=n[e]??0,a=n[e+1]??2**53-1;if(i>=t&&i<a)return r[e]??0}return 0}function pC(e){let t=e,n=t.triVerts,r=t.vertProperties,i=t.numProp||3,a=t.faceID,o=n.length/3,s=e=>{let t=e*i;return[r[t]??0,r[t+1]??0,r[t+2]??0]},c=new Map;for(let e=0;e<o;e++){let t=a?a[e]??e:e,n=c.get(t);n||(n=[],c.set(t,n)),n.push(e)}let l=[];for(let[e,r]of c){let i=0,a=0,o=0,c=0,u=0,d=0,f=0,p=1/0,m=1/0,h=1/0,g=-1/0,_=-1/0,v=-1/0,y=new Float32Array(r.length*9),b=0;for(let e of r){let t=s(n[e*3]??0),r=s(n[e*3+1]??0),l=s(n[e*3+2]??0),x=r[0]-t[0],S=r[1]-t[1],C=r[2]-t[2],w=l[0]-t[0],ee=l[1]-t[1],te=l[2]-t[2],ne=S*te-C*ee,re=C*w-x*te,ie=x*ee-S*w;i+=ne,a+=re,o+=ie;let ae=.5*Math.hypot(ne,re,ie);f+=ae;let oe=(t[0]+r[0]+l[0])/3,se=(t[1]+r[1]+l[1])/3,ce=(t[2]+r[2]+l[2])/3;c+=ae*oe,u+=ae*se,d+=ae*ce;for(let e of[t,r,l])e[0]<p&&(p=e[0]),e[1]<m&&(m=e[1]),e[2]<h&&(h=e[2]),e[0]>g&&(g=e[0]),e[1]>_&&(_=e[1]),e[2]>v&&(v=e[2]),y[b++]=e[0],y[b++]=e[1],y[b++]=e[2]}let x=Math.hypot(i,a,o)||1,S=[i/x,a/x,o/x],C=f>0?[c/f,u/f,d/f]:[0,0,0];l.push({__nativeFace:!0,faceId:e,originId:fC(t,r[0]??0),normal:S,center:C,area:f,min:[p,m,h],max:[g,_,v],tris:y})}return l}function mC(e){return!!e&&typeof e==`object`&&e.__nativeFace===!0}var hC=Math.cos(45*Math.PI/180),gC=(e,t)=>e<t?e*1e9+t:t*1e9+e,_C=(e,t)=>e<t?`${e},${t}`:`${t},${e}`;function vC(e){let t=e,n=t.triVerts,r=t.vertProperties,i=t.numProp||3,a=t.faceID,o=n.length/3;if(!a)return[];let s=e=>{let t=e*i;return[r[t]??0,r[t+1]??0,r[t+2]??0]},c=e=>{let t=s(n[e*3]??0),r=s(n[e*3+1]??0),i=s(n[e*3+2]??0),a=r[0]-t[0],o=r[1]-t[1],c=r[2]-t[2],l=i[0]-t[0],u=i[1]-t[1],d=i[2]-t[2],f=o*d-c*u,p=c*l-a*d,m=a*u-o*l,h=Math.hypot(f,p,m)||1;return[f/h,p/h,m/h]},l=new Map;for(let e=0;e<o;e++){let t=n[e*3]??0,r=n[e*3+1]??0,i=n[e*3+2]??0,o=a[e]??e,s=c(e);for(let[e,n]of[[t,r],[r,i],[i,t]]){let t=gC(e,n),r=l.get(t);r||(r={v:[e,n],faces:[],nrm:[]},l.set(t,r)),r.faces.push(o),r.nrm.push(s)}}let u=new Map;for(let{v:e,faces:t,nrm:n}of l.values()){if(t.length!==2)continue;let[r,i]=t;if(r===i)continue;let[a,o]=n;if(a[0]*o[0]+a[1]*o[1]+a[2]*o[2]>hC)continue;let s=_C(r,i),c=u.get(s);c||(c={faces:r<i?[r,i]:[i,r],segs:[]},u.set(s,c)),c.segs.push(e)}let d=[];for(let{faces:e,segs:t}of u.values())for(let n of yC(t))d.push(bC(e,n,s));return d}function yC(e){let t=new Map,n=new Set,r=(e,n)=>{let r=t.get(e);r||(r=[],t.set(e,r)),r.push(n)};e.forEach(([e,t],n)=>{r(e,n),r(t,n)});let i=(t,n)=>{let r=e[t]??[n,n];return r[0]===n?r[1]:r[0]},a=[];for(let r=0;r<e.length;r++){if(n.has(r))continue;n.add(r);let o=e[r]??[0,0],s=[o[0],o[1]];for(let r=0;r<e.length;r++){let e=s[s.length-1]??0,r=(t.get(e)??[]).find(e=>!n.has(e));if(r===void 0)break;n.add(r),s.push(i(r,e))}for(let r=0;r<e.length;r++){let e=s[0]??0,r=(t.get(e)??[]).find(e=>!n.has(e));if(r===void 0)break;n.add(r),s.unshift(i(r,e))}a.push(s)}return a}function bC(e,t,n){let r=t.length,i=new Float32Array(r*3),a=new Float32Array(r),o=1/0,s=1/0,c=1/0,l=-1/0,u=-1/0,d=-1/0,f=0,p=null;for(let e=0;e<r;e++){let r=n(t[e]??0);i[e*3]=r[0],i[e*3+1]=r[1],i[e*3+2]=r[2],p&&(f+=Math.hypot(r[0]-p[0],r[1]-p[1],r[2]-p[2])),a[e]=f,p=r,r[0]<o&&(o=r[0]),r[1]<s&&(s=r[1]),r[2]<c&&(c=r[2]),r[0]>l&&(l=r[0]),r[1]>u&&(u=r[1]),r[2]>d&&(d=r[2])}return{__nativeEdge:!0,faces:e,pts:i,arc:a,length:f,min:[o,s,c],max:[l,u,d],curveType:xC(i)?`LINE`:`CIRCLE`}}function xC(e){let t=e.length/3;if(t<=2)return!0;let n=e[0]??0,r=e[1]??0,i=e[2]??0,a=e[(t-1)*3]??0,o=e[(t-1)*3+1]??0,s=e[(t-1)*3+2]??0,c=a-n,l=o-r,u=s-i,d=Math.hypot(c,l,u)||1;c/=d,l/=d,u/=d;for(let a=1;a<t-1;a++){let t=(e[a*3]??0)-n,o=(e[a*3+1]??0)-r,s=(e[a*3+2]??0)-i,f=t*c+o*l+s*u,p=t-f*c,m=o-f*l,h=s-f*u;if(Math.hypot(p,m,h)>1e-6*Math.max(1,d))return!1}return!0}function SC(e){let t=e,n=t.triVerts,r=t.vertProperties,i=t.numProp||3,a=t.faceID;if(!a)return[];let o=n.length/3,s=new Map;for(let e=0;e<o;e++){let t=a[e]??e;for(let r=0;r<3;r++){let i=n[e*3+r]??0,a=s.get(i);a||(a=new Set,s.set(i,a)),a.add(t)}}let c=[];for(let[e,t]of s){if(t.size<3)continue;let n=e*i;c.push({__nativeVertex:!0,point:[r[n]??0,r[n+1]??0,r[n+2]??0]})}return c}function CC(e){return!!e&&typeof e==`object`&&e.__nativeVertex===!0}function wC(e){return!!e&&typeof e==`object`&&e.__nativeEdge===!0}function TC(e,t){let{pts:n,arc:r}=e,i=r.length;if(i===0)return[0,0,0];if(t<=0)return[n[0]??0,n[1]??0,n[2]??0];if(t>=e.length)return[n[(i-1)*3]??0,n[(i-1)*3+1]??0,n[(i-1)*3+2]??0];let a=1;for(;a<i&&(r[a]??0)<t;)a++;let o=r[a-1]??0,s=r[a]??o,c=s>o?(t-o)/(s-o):0,l=(a-1)*3,u=a*3;return[(n[l]??0)+((n[u]??0)-(n[l]??0))*c,(n[l+1]??0)+((n[u+1]??0)-(n[l+1]??0))*c,(n[l+2]??0)+((n[u+2]??0)-(n[l+2]??0))*c]}function EC(e,t){let{pts:n,arc:r}=e,i=r.length;if(i<2)return[1,0,0];let a=1;for(;a<i-1&&(r[a]??0)<t;)a++;let o=(a-1)*3,s=a*3,c=(n[s]??0)-(n[o]??0),l=(n[s+1]??0)-(n[o+1]??0),u=(n[s+2]??0)-(n[o+2]??0),d=Math.hypot(c,l,u)||1;return[c/d,l/d,u/d]}function DC(e,t){let n=Ty(e);if(!n)throw Error(`manifold: ${t} requires a manifold shape handle`);if(!n.node.replayable)throw Error(`manifold: ${t} unsupported; shape originates from a non-replayable op (raw mesh import or mesh boolean)`);let r=Oy(t),i=ky.get(n.node);if(i!==void 0)return{occt:r,brep:i};let a=US(n.node,r);return ky.set(n.node,a),{occt:r,brep:a}}function OC(e){if(Ty(e))return`solid`;let{occt:t,brep:n}=DC(e,`shapeType`);return t.shapeType(n)}function kC(e,t){let n=Ty(e),r=Ty(t);return!n||!r?!1:n.manifold===r.manifold}function AC(e,t){if(!Ty(e))return 0;let{occt:n,brep:r}=DC(e,`hashCode`);return n.hashCode(r,t)}function jC(e){let t=Ty(e);return!t||!N(t)}function MC(e,t){let n=Ty(e);if(!n)return[];if(t===`solid`)return[e];if(t===`vertex`){let e=N(n);return e&&typeof e.getMesh==`function`?SC(e.getMesh()).map((e,t)=>({...e,__manifoldSub:!0,index:t,box:{min:e.point,max:e.point},parent:n.node,subType:`vertex`})):[]}if(t!==`edge`&&t!==`face`)return[];if(t===`face`){let e=N(n);if(e&&typeof e.getMesh==`function`)return pC(e.getMesh()).map((e,t)=>({...e,__manifoldSub:!0,index:t,box:{min:e.min,max:e.max},parent:n.node,subType:`face`}))}if(t===`edge`){let e=N(n);if(e&&typeof e.getMesh==`function`)return vC(e.getMesh()).map((e,t)=>({...e,__manifoldSub:!0,index:t,box:{min:e.min,max:e.max},parent:n.node,subType:`edge`}))}if(!n.node.replayable)return[];let r=Dy();if(!r)return[];let i=ky.get(n.node)??(()=>{let e=US(n.node,r);return ky.set(n.node,e),e})();return r.iterShapes(i,t).map((e,i)=>({__manifoldSub:!0,index:i,box:r.boundingBox(e),occt:e,parent:n.node,subType:t}))}function NC(e){let{occt:t,brep:n}=DC(e,`edgeToFaceMap`);return t.edgeToFaceMap(n)}function PC(e,t){let{occt:n,brep:r}=DC(e,`adjacentFaces`);return n.adjacentFaces(r,t)}function FC(e){return{iterShapes:MC,iterShapeList:(e,t)=>{Oy(`iterShapeList`).iterShapeList(e,t)},shapeType:OC,isSame:kC,isEqual:kC,downcast:e=>e,copyShape:e=>{let t=Ty(e);return t?M(wy(N(t)),j(`translateShape`,{x:0,y:0,z:0},[t.node])):e},hashCode:AC,isNull:jC,shapeOrientation:e=>`forward`,edgeToFaceMap:NC,sharedEdges:(e,t)=>Oy(`sharedEdges`).sharedEdges(e,t),adjacentFaces:PC,sew:()=>{throw Error(`manifold: sew is unsupported on the mesh kernel; use a B-rep kernel`)}}}function IC(e){return N(e).getMesh()}function LC(e){return e.numProp&&e.numProp>=3?e.numProp:3}function RC(e){return Math.floor(e.vertProperties.length/LC(e))}function zC(e,t){let n=t*LC(e);return[e.vertProperties[n]??0,e.vertProperties[n+1]??0,e.vertProperties[n+2]??0]}function BC(e,t){let n=t*3;return[e.triVerts[n]??0,e.triVerts[n+1]??0,e.triVerts[n+2]??0]}function VC(e,t,n){let r=t[0]-e[0],i=t[1]-e[1],a=t[2]-e[2],o=n[0]-e[0],s=n[1]-e[1],c=n[2]-e[2],l=i*c-a*s,u=a*o-r*c,d=r*s-i*o,f=Math.hypot(l,u,d)||1;return[l/f,u/f,d/f]}function HC(e,t){let n=IC(e),r=Math.floor(n.triVerts.length/3);if(t){let e=new ArrayBuffer(84+r*50),t=new DataView(e);t.setUint32(80,r,!0);let i=84;for(let e=0;e<r;e++){let[r,a,o]=BC(n,e),s=zC(n,r),c=zC(n,a),l=zC(n,o),u=VC(s,c,l);t.setFloat32(i,u[0],!0),t.setFloat32(i+4,u[1],!0),t.setFloat32(i+8,u[2],!0),i+=12;for(let e of[s,c,l])t.setFloat32(i,e[0],!0),t.setFloat32(i+4,e[1],!0),t.setFloat32(i+8,e[2],!0),i+=12;t.setUint16(i,0,!0),i+=2}return e}let i=[`solid manifold`];for(let e=0;e<r;e++){let[t,r,a]=BC(n,e),o=zC(n,t),s=zC(n,r),c=zC(n,a),l=VC(o,s,c);i.push(` facet normal ${l[0]} ${l[1]} ${l[2]}`),i.push(` outer loop`);for(let e of[o,s,c])i.push(` vertex ${e[0]} ${e[1]} ${e[2]}`);i.push(` endloop`),i.push(` endfacet`)}return i.push(`endsolid manifold`),i.join(`
10
10
  `)}function UC(e){let t=IC(e),n=RC(t),r=Math.floor(t.triVerts.length/3),i=[`# exported by brepjs manifold kernel`];for(let e=0;e<n;e++){let n=zC(t,e);i.push(`v ${n[0]} ${n[1]} ${n[2]}`)}for(let e=0;e<r;e++){let[n,r,a]=BC(t,e);i.push(`f ${n+1} ${r+1} ${a+1}`)}return new TextEncoder().encode(i.join(`
11
11
  `)).buffer}function WC(e){let t=IC(e),n=RC(t),r=Math.floor(t.triVerts.length/3),i=`ply\nformat binary_little_endian 1.0\nelement vertex ${n}\nproperty float x\nproperty float y\nproperty float z\nelement face ${r}\nproperty list uchar uint vertex_indices\nend_header\n`,a=new TextEncoder().encode(i),o=new ArrayBuffer(n*12+r*13),s=new DataView(o),c=0;for(let e=0;e<n;e++){let n=zC(t,e);s.setFloat32(c,n[0],!0),s.setFloat32(c+4,n[1],!0),s.setFloat32(c+8,n[2],!0),c+=12}for(let e=0;e<r;e++){let[n,r,i]=BC(t,e);s.setUint8(c,3),c+=1,s.setUint32(c,n,!0),s.setUint32(c+4,r,!0),s.setUint32(c+8,i,!0),c+=12}let l=new Uint8Array(a.length+o.byteLength);return l.set(a,0),l.set(new Uint8Array(o),a.length),l.buffer}function GC(e,t,n=`importMesh`){let r=new e.Mesh({numProp:3,vertProperties:t.vertProperties,triVerts:t.triVerts});return M(new e.Manifold(r),j(n,{},[]))}function KC(e,t){let n=new TextDecoder().decode(new Uint8Array(t)),r=[],i=[];for(let e of n.split(`
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 GC(e,{vertProperties:Float32Array.from(r),triVerts:Uint32Array.from(i)})}function qC(e,t){let n=new Uint8Array(t),r=new TextDecoder().decode(n.subarray(0,Math.min(n.length,80))).trimStart().toLowerCase().startsWith(`solid`)&&XC(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=YC(i);return GC(e,{vertProperties:Float32Array.from(a.vertices),triVerts:Uint32Array.from(a.indices)})}var JC=1e6;function YC(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*JC)},${Math.round(o*JC)},${Math.round(s*JC)}`,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 XC(e){return e.length<84||84+new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(80,!0)*50!==e.length}var ZC=1e-6;function QC(e,t){let n=P(t);if(n.replayable)return US(n,e)}function $C(e,t){let n=IC(t),r=Math.floor(n.triVerts.length/3),i=[];for(let t=0;t<r;t++){let[r,a,o]=BC(n,t),s=e.buildTriFace(zC(n,r),zC(n,a),zC(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,ZC)}function ew(e){let t=Oy(`B-rep export`),n=QC(t,e);return n===void 0?(console.warn(`manifold: exact B-rep unavailable (non-replayable op-graph); exporting faceted approximation`),{occt:t,brep:$C(t,e)}):{occt:t,brep:n}}function tw(e,t,n,r){let i=t.mesh(n,{tolerance:.01,angularTolerance:.5});return GC(e,{vertProperties:Float32Array.from(i.vertices),triVerts:Uint32Array.from(i.triangles)},r)}var nw=1179937895,rw=2,iw=1313821514,aw=5130562,ow=5126,sw=5125,cw=5123,lw=5121,uw=34962,dw=34963,fw=4;function pw(e){return e+3&-4}function mw(e){let t=IC(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=pw(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:fw}]}],accessors:[{bufferView:0,componentType:ow,count:r,type:`VEC3`,min:[o,s,c],max:[l,u,d]},{bufferView:1,componentType:sw,count:i,type:`SCALAR`}],bufferViews:[{buffer:0,byteOffset:0,byteLength:p,target:uw},{buffer:0,byteOffset:m,byteLength:f.byteLength,target:dw}],buffers:[{byteLength:h}]},_=new TextEncoder().encode(JSON.stringify(g)),v=pw(_.length),y=pw(h),b=20+v+8+y,x=new ArrayBuffer(b),S=new DataView(x),C=new Uint8Array(x);S.setUint32(0,nw,!0),S.setUint32(4,rw,!0),S.setUint32(8,b,!0);let w=12;S.setUint32(w,v,!0),S.setUint32(w+4,iw,!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,aw,!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 hw(e,t){let n=new DataView(t);if(n.getUint32(0,!0)!==nw)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===iw?i=JSON.parse(new TextDecoder().decode(s)):r===aw&&(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===sw?4:e.componentType===cw?2:+(e.componentType===lw);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 GC(e,{vertProperties:p,triVerts:m},`importGLB`)}function gw(e){return{exportSTL:(e,t)=>HC(e,t),exportOBJ:e=>UC(e),exportPLY:e=>WC(e),importSTL:t=>qC(e,typeof t==`string`?new TextEncoder().encode(t).buffer:t),importOBJ:t=>KC(e,t),exportSTEP:e=>Oy(`exportSTEP`).exportSTEP(e.map(e=>ew(e).brep)),exportIGES:e=>Oy(`exportIGES`).exportIGES(e.map(e=>ew(e).brep)),toBREP:e=>{let{occt:t,brep:n}=ew(e);return t.toBREP(n)},exportSTEPAssembly:(e,t)=>{let n=Oy(`exportSTEPAssembly`),r=e.map(e=>{let t={shape:ew(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=Oy(`createXCAFDocument`),n=e.map(e=>{let t={shape:ew(e.shape).brep,name:e.name};return e.color===void 0?t:{...t,color:e.color}});return t.createXCAFDocument(n)},writeXCAFToSTEP:(e,t)=>Oy(`writeXCAFToSTEP`).writeXCAFToSTEP(e,t),exportSTEPConfigured:(e,t)=>{let n=Oy(`exportSTEPConfigured`),r=e.map(e=>{let t={shape:ew(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=Oy(`importSTEP`);return n.importSTEP(t).map(t=>tw(e,n,t,`importSTEP`))},importIGES:t=>{let n=Oy(`importIGES`);return n.importIGES(t).map(t=>tw(e,n,t,`importIGES`))},fromBREP:t=>{let n=Oy(`fromBREP`);return tw(e,n,n.fromBREP(t),`fromBREP`)},exportGLB:e=>mw(e),importGLB:t=>hw(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 _w(e){return N(e).getMesh()}function vw(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 yw(e,t){let n=e;if(n&&n.__manifoldSub&&n.occt){let e=Dy();if(!e)throw new c(`manifold: sub-shape geometry query requires a registered occt kernel`);return t(n.occt,e)}let r=Ty(e);if(!r)throw Error(`manifold: exact geometry query requires a manifold shape handle`);let i=Dy();if(!i)throw new c(`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=ky.get(r.node);return a===void 0&&(a=US(r.node,i),ky.set(r.node,a)),t(a,i)}function bw(e){let t=Ty(e);if(!t)return;let n=t.node;return n.op===`profileEdge`?n.params?.curve:void 0}function xw(e){return{curveType:e=>{let t=bw(e);return t?hb(t):wC(e)?e.curveType:yw(e,(e,t)=>t.curveType(e))},curveParameters:e=>{let t=bw(e);if(t){let e=gb(t);return[e.first,e.last]}return wC(e)?[0,e.length]:yw(e,(e,t)=>t.curveParameters(e))},curvePointAtParam:(e,t)=>{let n=bw(e);return n?_b(n,t):wC(e)?TC(e,t):yw(e,(e,n)=>n.curvePointAtParam(e,t))},curveTangent:(e,t)=>{let n=bw(e);return n?{point:_b(n,t),tangent:vb(n,t)}:wC(e)?{point:TC(e,t),tangent:EC(e,t)}:yw(e,(e,n)=>n.curveTangent(e,t))},curveIsClosed:e=>{let t=bw(e);return t?bb(t):yw(e,(e,t)=>t.curveIsClosed(e))},curveIsPeriodic:e=>{let t=bw(e);return t?xb(t):yw(e,(e,t)=>t.curveIsPeriodic(e))},curvePeriod:e=>{let t=bw(e);return t?Sb(t):yw(e,(e,t)=>t.curvePeriod(e))},interpolatePoints:(e,t)=>Oy(`interpolatePoints`).interpolatePoints(e,t),approximatePoints:(e,t)=>Oy(`approximatePoints`).approximatePoints(e,t),curveDegreeElevate:(e,t)=>yw(e,(e,n)=>n.curveDegreeElevate(e,t)),curveKnotInsert:(e,t,n)=>yw(e,(e,r)=>r.curveKnotInsert(e,t,n)),curveKnotRemove:(e,t,n)=>yw(e,(e,r)=>r.curveKnotRemove(e,t,n)),curveSplit:(e,t)=>yw(e,(e,n)=>n.curveSplit(e,t)),createCurveAdaptor:e=>yw(e,(e,t)=>t.createCurveAdaptor(e)),getBezierPenultimatePole:e=>yw(e,(e,t)=>t.getBezierPenultimatePole(e)),getNurbsCurveData:e=>yw(e,(e,t)=>t.getNurbsCurveData?.(e)??null),vertexPosition:e=>CC(e)?e.point:Ty(e)?vw(_w(e),0):yw(e,(e,t)=>t.vertexPosition(e)),surfaceType:e=>{if(mC(e))return`plane`;let t=Ty(e);return t&&t.node.op===`profileFace`?`plane`:yw(e,(e,t)=>t.surfaceType(e))},uvBounds:e=>mC(e)?{uMin:0,uMax:1,vMin:0,vMax:1}:yw(e,(e,t)=>t.uvBounds(e)),outerWire:e=>yw(e,(e,t)=>t.outerWire(e)),surfaceNormal:(e,t,n)=>mC(e)?e.normal:yw(e,(e,r)=>r.surfaceNormal(e,t,n)),pointOnSurface:(e,t,n)=>yw(e,(e,r)=>r.pointOnSurface(e,t,n)),uvFromPoint:(e,t)=>yw(e,(e,n)=>n.uvFromPoint(e,t)),projectPointOnFace:(e,t)=>yw(e,(e,n)=>n.projectPointOnFace(e,t)),classifyPointOnFace:(e,t,n,r)=>yw(e,(e,i)=>i.classifyPointOnFace(e,t,n,r)),classifyPointRobust:(e,t,n)=>yw(e,(e,r)=>r.classifyPointRobust(e,t,n)),classifyPointWinding:(e,t,n)=>yw(e,(e,r)=>r.classifyPointWinding(e,t,n)),approximateSurfaceLspia:(e,t,n,r,i,a,o,s,c)=>Oy(`approximateSurfaceLspia`).approximateSurfaceLspia(e,t,n,r,i,a,o,s,c),untrimFace:(e,t,n)=>yw(e,(e,r)=>r.untrimFace(e,t,n)),getSurfaceCylinderData:e=>yw(e,(e,t)=>t.getSurfaceCylinderData(e)),getSurfaceAxis:e=>yw(e,(e,t)=>t.getSurfaceAxis(e)),reverseSurfaceU:e=>Oy(`reverseSurfaceU`).reverseSurfaceU(e),detectSmallFeatures:(e,t,n)=>yw(e,(e,r)=>r.detectSmallFeatures(e,t,n)),recognizeFeatures:(e,t)=>yw(e,(e,n)=>n.recognizeFeatures(e,t)),projectEdges:(e,t,n,r)=>yw(e,(e,i)=>i.projectEdges(e,t,n,r)),getNurbsSurfaceData:e=>yw(e,(e,t)=>t.getNurbsSurfaceData?.(e)??null)}}var Sw={hasErrors:!1,hasWarnings:!1,messages:[]};function Cw(){return{modified:new Map,generated:new Map,deleted:new Set}}function ww(e){return{shape:e,evolution:Cw()}}function Tw(e){return{shape:e,evolution:Cw(),diagnostics:Sw}}function Ew(e){let t=cb(e),n=By(e),r=pS(e);return{translateWithHistory:(e,n,r,i)=>ww(t.translate(e,n,r,i)),rotateWithHistory:(e,n,r,i,a,o)=>ww(t.rotate(e,n,a,o)),mirrorWithHistory:(e,n,r)=>ww(t.mirror(e,n,r)),scaleWithHistory:(e,n,r)=>ww(t.scale(e,n,r)),generalTransformWithHistory:(e,n,r,i)=>ww(t.generalTransform(e,n,r,i)),fuseWithHistory:(e,t,r,i,a)=>Tw(n.fuse(e,t,a)),cutWithHistory:(e,t,r,i,a)=>Tw(n.cut(e,t,a)),intersectWithHistory:(e,t,r,i,a)=>Tw(n.intersect(e,t,a)),filletWithHistory:(e,t,n)=>ww(r.fillet(e,t,n)),chamferWithHistory:(e,t,n)=>ww(r.chamfer(e,t,n)),shellWithHistory:(e,t,n,i,a,o)=>ww(r.shell(e,t,n,o)),thickenWithHistory:(e,t)=>ww(r.thicken(e,t)),offsetWithHistory:(e,t,n,i,a)=>ww(r.offset(e,t,a)),draftWithHistory:(e,t,n,i,a)=>ww(r.draft(e,t,n,i,a)),applyComposedTransformWithHistory:(e,n)=>ww(t.transform(e,n))}}function Dw(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 Ow(e){return{isValid:e=>Dw(e),isValidStrict:e=>Dw(e),healSolid:e=>Dw(e)?e:null,healFace:e=>e,healWire:e=>e,mergeCoincidentVertices:()=>0,removeDegenerateEdges:()=>0,fixFaceOrientations:()=>0,fixShape:e=>e,fixSelfIntersection:e=>e}}var kw=.004;function Aw(e){return!!e&&typeof e==`object`&&e.__nativeC2d===!0}function jw(e,t){return{__nativeC2d:!0,k:`line`,p1:e,p2:t}}function Mw(e,t,n,r,i){return{__nativeC2d:!0,k:`conic`,c:e,u:t,v:n,a0:r,a1:i}}function Nw(e,[t,n]){return[e.a*t+e.b*n+e.tx,e.c*t+e.d*n+e.ty]}function Pw(e,[t,n]){return[e.a*t+e.b*n,e.c*t+e.d*n]}function Fw(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 Iw(e,t){return e.k===`line`?jw(Nw(t,e.p1),Nw(t,e.p2)):e.k===`bezier`?{__nativeC2d:!0,k:`bezier`,pts:e.pts.map(e=>Nw(t,e))}:Mw(Nw(t,e.c),Pw(t,e.u),Pw(t,e.v),e.a0,e.a1)}function Lw(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 Rw(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 zw(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 Lw(r,t)}function Bw(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<=kw)return Math.max(2,Math.ceil(t/(2*Math.PI)*8));let a=2*Math.acos(Math.max(-1,1-kw/i));return Math.max(2,Math.ceil(t/a))}function Vw(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(Lw(e.pts,n/24));return t}let t=e.a1-e.a0,n=Bw(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 Hw(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 jw(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-_),Mw(f,[p,0],[0,p],h,_)}function Uw(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(!Aw(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=Rw(n,n.a0),i=Rw(n,(n.a0+n.a1)/2),a=Rw(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(Vw(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)=>jw([e,t],[n,r]),makeCircle2d:(e,t,n,r=!0)=>Mw([e,t],[n,0],r?[0,n]:[0,-n],0,2*Math.PI),makeArc2dThreePoints:(e,t,n,r,i,a)=>Hw([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 jw([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),Mw([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 Mw([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 Mw([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`?Lw(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:Lw(n.pts,t),tangent:zw(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 Mw(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 jw([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=Fw(e,t);Object.assign(e,n)},transformCurve2dGeneral:(e,t)=>Iw(i(e),t),translateCurve2d:(e,t,n)=>Iw(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 Iw(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)=>Iw(i(e),{a:t,b:0,c:0,d:t,tx:n-t*n,ty:r-t*r}),mirrorCurve2dAtPoint:(e,t,n)=>Iw(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 Iw(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 Iw(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(Aw(t))r=Vw(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=Vw(i(e)).map(([e,n])=>[t[0]+l*e+f*n,t[1]+u*e+p*n,t[2]+d*e+m*n]);return M(n,j(`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)=>Aw(n)?t(n,...i):r(e,n,...i)))}return s}var Ww=`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 Gw(e){let t=Dy();if(!t)throw Error(`manifold: ${e} unsupported on manifold kernel; no B-rep kernel registered`);return t}function Kw(e){let t={};for(let e of Ww)t[e]=(...t)=>Gw(e)[e](...t);let n=Uw(e,()=>Dy());return Object.assign(t,n),t}function qw(e){return{sketchNew:()=>xy(`sketchNew`),sketchAddPoint:()=>xy(`sketchAddPoint`),sketchAddArc:()=>xy(`sketchAddArc`),sketchAddConstraint:()=>xy(`sketchAddConstraint`),sketchSolve:()=>xy(`sketchSolve`),sketchDof:()=>xy(`sketchDof`)}}function Jw(e){return{projectEdges:()=>xy(`projectEdges`)}}function Yw(e){return{dispose(e){let t=Ty(e);if(t){let e=ky.get(t.node);e!==void 0&&(Dy()?.dispose(e),ky.delete(t.node))}(e?.manifold)?.delete?.()},executeBatch:()=>xy(`executeBatch`),checkpoint:()=>xy(`checkpoint`),checkpointCount:()=>0,restoreCheckpoint:()=>xy(`restoreCheckpoint`),discardCheckpoint:()=>xy(`discardCheckpoint`)}}var Xw={draft:30,standard:10,fine:3},Zw=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?.(Xw[e])}constructor(e){this.oc=e,Object.assign(this,Fy(e),By(e),cb(e),hx(e),Vx(e),pS(e),xS(e),dC(e),FC(e),gw(e),xw(e),Ew(e),Ow(e),Kw(e),qw(e),Jw(e),Yw(e))}};function Qw(e){return import(e)}var $w=new Map,eT=null,tT=null;function nT(e){rT(`manifold`,new Zw(e))}function rT(e,t){$w.set(e,t),eT||=e,e===eT&&(tT=t)}function F(e){if(!e&&tT)return tT;let t=e??eT;if(!t)throw Error(`brepjs kernel not initialized. Call initFromOC() or registerKernel() before using the library.`);let n=$w.get(t);if(!n)throw Error(`brepjs: kernel '${t}' is not registered.`);return n}function iT(e){let t=F(e);if(!_o(t))throw Error(`brepjs: current kernel does not support 2D operations.`);return t}function aT(){return eT}function oT(e,t){let n=eT;eT=e,tT=$w.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{eT=n,tT=n?$w.get(n)??null:null}}function sT(e){return F(e).capabilities}function cT(e,t){let n=mo();try{go(e),F().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{go(n),F().setQuality?.(n)}}var lT=new Map;function uT(e,t){lT.set(e,t)}function dT(e){return lT.get(e)}function fT(e,t){let n=lT.get(e);if(!n)throw Error(`withTier: no tier registered for "${e}". Call registerKernelTier("${e}", { kernel, quality }) first.`);return oT(n.kernel,()=>cT(n.quality,t))}function pT(e){No(),qc(),Eo(),Cc(),wc(),zc(),Bc();let t=new kf(e);rT(`occt`,t),eT=`occt`,tT=t}function mT(){let e=F(),t=e.makeBox(1,1,1);try{e.dispose(t)}catch{}}async function hT(){if(eT)return eT;try{let{OcctKernel:e}=await Qw(`occt-wasm`),t=await e.init();return rT(`occt-wasm`,uo.fromKernel(t)),`occt-wasm`}catch{}try{return pT(await(await Qw(`brepjs-opencascade`)).default()),`occt`}catch{}try{let e=await Qw(`brepkit-wasm`);return typeof e.default==`function`&&await e.default(),rT(`brepkit`,new by(new e.BrepKernel)),`brepkit`}catch{}throw Error(`brepjs: no kernel package found. Install one of:
@@ -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-BjD9xM32.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-CWOSy7-f.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-BQdEtemX.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-CH0AAh94.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-Bp-fC6Jb.js"></script>
17
+ <script type="module" crossorigin src="./assets/index-B6O0QvIV.js"></script>
18
18
  </head>
19
19
  <body>
20
20
  <div id="root"></div>