brepjs-cad 0.149.0 → 0.151.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.151.0](https://github.com/andymai/brepjs/compare/brepjs-cad-v0.150.0...brepjs-cad-v0.151.0) (2026-08-17)
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.150.0](https://github.com/andymai/brepjs/compare/brepjs-cad-v0.149.1...brepjs-cad-v0.150.0) (2026-08-17)
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.149.0](https://github.com/andymai/brepjs/compare/brepjs-cad-v0.148.0...brepjs-cad-v0.149.0) (2026-08-17)
4
90
 
5
91
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "brepjs-cad",
3
- "version": "0.149.0",
3
+ "version": "0.151.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",
@@ -56,5 +56,5 @@ ${u.join(`
56
56
  </Types>`),c(`_rels/.rels`,`<?xml version="1.0" encoding="UTF-8"?>
57
57
  <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
58
58
  <Relationship Target="/3D/3dmodel.model" Id="rel0" Type="http://schemas.microsoft.com/3dmanufacturing/2013/01/3dmodel" />
59
- </Relationships>`),c(`3D/3dmodel.model`,s)])}function VX(e){let t=[],n=/([MmLlHhVvCcSsQqTtAaZz])([^MmLlHhVvCcSsQqTtAaZz]*)/g,r;for(;(r=n.exec(e))!==null;){let e=r[1]??``,n=(r[2]??``).trim(),i=[];if(n){let e=/[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/g,t;for(;(t=e.exec(n))!==null;)i.push(parseFloat(t[0]))}t.push({command:e,args:i})}return t}function HX(e){return[e[0],-e[1]]}function UX(e,t,n,r){let i=0;for(;i<e.length;){let a=(n?t.cx:0)+(e[i]??0),o=(n?t.cy:0)+(e[i+1]??0);i===0?(t.sx=a,t.sy=o):r.push(nR(HX([t.cx,t.cy]),HX([a,o]))),t.cx=a,t.cy=o,i+=2}}function WX(e,t,n,r){let i=0;for(;i<e.length;){let a=(n?t.cx:0)+(e[i]??0),o=(n?t.cy:0)+(e[i+1]??0);r.push(nR(HX([t.cx,t.cy]),HX([a,o]))),t.cx=a,t.cy=o,i+=2}}function GX(e,t,n,r){for(let i of e){let e=n?t.cx+i:i;r.push(nR(HX([t.cx,t.cy]),HX([e,t.cy]))),t.cx=e}}function KX(e,t,n,r){for(let i of e){let e=n?t.cy+i:i;r.push(nR(HX([t.cx,t.cy]),HX([t.cx,e]))),t.cy=e}}function qX(e,t,n,r){let i=0;for(;i+5<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=a+(e[i]??0),c=o+(e[i+1]??0),l=a+(e[i+2]??0),u=o+(e[i+3]??0),d=a+(e[i+4]??0),f=o+(e[i+5]??0);r.push(cR(HX([t.cx,t.cy]),[HX([s,c]),HX([l,u])],HX([d,f]))),t.prevControlX=l,t.prevControlY=u,t.cx=d,t.cy=f,i+=6}}function JX(e,t,n,r){let i=0;for(;i+3<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=t.lastCmd,c=s===`C`||s===`S`?2*t.cx-t.prevControlX:t.cx,l=s===`C`||s===`S`?2*t.cy-t.prevControlY:t.cy,u=a+(e[i]??0),d=o+(e[i+1]??0),f=a+(e[i+2]??0),p=o+(e[i+3]??0);r.push(cR(HX([t.cx,t.cy]),[HX([c,l]),HX([u,d])],HX([f,p]))),t.prevControlX=u,t.prevControlY=d,t.cx=f,t.cy=p,t.lastCmd=`S`,i+=4}}function YX(e,t,n,r){let i=0;for(;i+3<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=a+(e[i]??0),c=o+(e[i+1]??0),l=a+(e[i+2]??0),u=o+(e[i+3]??0);r.push(cR(HX([t.cx,t.cy]),[HX([s,c])],HX([l,u]))),t.prevControlX=s,t.prevControlY=c,t.cx=l,t.cy=u,i+=4}}function XX(e,t,n,r){let i=0;for(;i+1<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=t.lastCmd,c=s===`Q`||s===`T`?2*t.cx-t.prevControlX:t.cx,l=s===`Q`||s===`T`?2*t.cy-t.prevControlY:t.cy,u=a+(e[i]??0),d=o+(e[i+1]??0);r.push(cR(HX([t.cx,t.cy]),[HX([c,l])],HX([u,d]))),t.prevControlX=c,t.prevControlY=l,t.cx=u,t.cy=d,t.lastCmd=`T`,i+=2}}function ZX(e,t,n,r,i){let a=Math.max(n,r),o=i?1:-1,s=t+2*o*a,c=[e-o*a,t+o*a],l=[e+o*a,t+o*a];try{return[rR(HX([e,t]),HX(c),HX([e,s])),rR(HX([e,s]),HX(l),HX([e,t]))]}catch{return[]}}function QX(e,t,n,r,i,a,o,s){let c=.5,l=e+c*(n-e),u=t+c*(r-t),d=n-e,f=r-t,p=Math.sqrt(d*d+f*f),m=Math.max(i,a),h=p/2,g=h<m?m-Math.sqrt(m*m-h*h):m,_=(o===s?-1:1)*(s?1:-1),v=-f/p,y=d/p,b=l+_*g*v,x=u+_*g*y;try{return[rR(HX([e,t]),HX([b,x]),HX([n,r]))]}catch{return[nR(HX([e,t]),HX([n,r]))]}}function $X(e,t,n,r){let i=0;for(;i+6<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=Math.abs(e[i]??0),c=Math.abs(e[i+1]??0),l=(e[i+3]??0)!==0,u=(e[i+4]??0)!==0,d=a+(e[i+5]??0),f=o+(e[i+6]??0);if(s===0||c===0)r.push(nR(HX([t.cx,t.cy]),HX([d,f])));else{let e=d-t.cx,n=f-t.cy;Math.sqrt(e*e+n*n)<1e-10?r.push(...ZX(t.cx,t.cy,s,c,u)):r.push(...QX(t.cx,t.cy,d,f,s,c,l,u))}t.cx=d,t.cy=f,i+=7}}function eZ(e,t){(Math.abs(e.cx-e.sx)>1e-10||Math.abs(e.cy-e.sy)>1e-10)&&t.push(nR(HX([e.cx,e.cy]),HX([e.sx,e.sy]))),e.cx=e.sx,e.cy=e.sy}function tZ(e){let t=VX(e),n=[],r={cx:0,cy:0,sx:0,sy:0,prevControlX:0,prevControlY:0,lastCmd:``};for(let{command:e,args:i}of t){let t=e===e.toLowerCase(),a=e.toUpperCase();switch(a){case`M`:UX(i,r,t,n);break;case`L`:WX(i,r,t,n);break;case`H`:GX(i,r,t,n);break;case`V`:KX(i,r,t,n);break;case`C`:qX(i,r,t,n);break;case`S`:JX(i,r,t,n);break;case`Q`:YX(i,r,t,n);break;case`T`:XX(i,r,t,n);break;case`A`:$X(i,r,t,n);break;case`Z`:eZ(r,n)}a!==`S`&&a!==`T`&&(r.lastCmd=a)}return n}function nZ(e){try{let t=tZ(e);return t.length===0?z(yD(`SVG_EMPTY_PATH`,`SVG path produced no curves`)):R(new ER(t))}catch(e){return z(yD(`SVG_PARSE_FAILED`,`Failed to parse SVG path: ${e instanceof Error?e.message:String(e)}`))}}function rZ(e){try{let t=/\bd\s*=\s*(?:"([^"]*)"|'([^']*)')/,n=[],r=e.toLowerCase(),i=0;for(;i<r.length;){let a=r.indexOf(`<path `,i);if(a===-1)break;let o=e.indexOf(`>`,a);if(o===-1)break;let s=e.slice(a,o+1);i=o+1;let c=t.exec(s),l=c?.[1]??c?.[2];if(!l)continue;let u=nZ(l);u.ok&&n.push(u.value)}return n.length===0?z(yD(`SVG_NO_PATHS`,`No <path> elements found in SVG`)):R(n)}catch(e){return z(yD(`SVG_IMPORT_FAILED`,`Failed to import SVG: ${e instanceof Error?e.message:String(e)}`))}}function iZ(e,t){try{let n=F(),r=e.map(e=>({shape:e.shape.wrapped,name:e.name,color:e.color?[...e.color]:void 0}));return R(n.exportSTEPConfigured(r,t))}catch(e){return z(yD(H.STEP_EXPORT_CONFIGURED_FAILED,`Configured STEP export failed`,e))}}async function aZ(e){try{let t=await e.arrayBuffer(),n=F().importSTEP(t);if(n.length===0)return z(yD(`STEP_IMPORT_FAILED`,`STEP file contains no valid geometry`));for(let e=1;e<n.length;e++){let t=n[e];t&&F().dispose(t)}return R(I(n[0]))}catch(e){return z(yD(`STEP_IMPORT_FAILED`,`Failed to load STEP file`,e))}}async function oZ(e){try{let t=await e.arrayBuffer(),n=F().importSTL(t);return n.IsNull()?z(yD(`STL_IMPORT_FAILED`,`Failed to create solid from STL mesh`)):R(I(n))}catch(e){return z(yD(`STL_IMPORT_FAILED`,`Failed to load STL file`,e))}}async function sZ(e){try{let t=await e.arrayBuffer(),n=F().importIGES(t);if(n.length===0)return z(yD(`IGES_IMPORT_FAILED`,`IGES file contains no valid geometry`));for(let e=1;e<n.length;e++){let t=n[e];t&&F().dispose(t)}return R(I(n[0]))}catch(e){return z(yD(`IGES_IMPORT_FAILED`,`Failed to load IGES file`,e))}}function cZ(e,t,n={}){let r=fJ(e,t);return new sJ((typeof n.plane==`string`||n.plane===void 0?r.sketchOnPlane(n.plane,n.origin):r.sketchOnPlane(n.plane)).map(e=>Array.isArray(e)?new Wq(e.map(Gq)):Gq(e)))}function lZ(e,t){let n=t?.fontSize??1,r=uJ(t?.fontFamily);if(!r)return z(W(H.NO_FONT_LOADED,`No font loaded. Call loadFont() first.`,void 0,void 0,`Load a font with loadFont() before calling textMetrics()`));let i=r.getAdvanceWidth(e,n),a=n/r.unitsPerEm,o=r.ascender*a,s=r.descender*a;return R({width:i,height:o-s,ascender:o,descender:s})}function uZ(e){let t=e?.fontSize??1,n=uJ(e?.fontFamily);if(!n)return z(W(H.NO_FONT_LOADED,`No font loaded. Call loadFont() first.`,void 0,void 0,`Load a font with loadFont() before calling fontMetrics()`));let r=t/n.unitsPerEm,i=n.ascender*r,a=n.descender*r,o=(n.tables?.os2?.sTypoLineGap??0)*r;return R({ascender:i,descender:a,unitsPerEm:n.unitsPerEm,lineHeight:i-a+o})}function dZ(e){return e.type===`init`}function fZ(e){return e.type===`operation`}function pZ(e){return e.type===`dispose`}function mZ(e){return e.type===`batch`}function hZ(e){return e.success}function gZ(e){return!e.success}function _Z(){return{pending:new Map}}function vZ(e,t){let n=new Map(e.pending);return n.set(t.id,t),{pending:n}}function yZ(e,t){let n=e.pending.get(t);if(!n)return{queue:e,task:void 0};let r=new Map(e.pending);return r.delete(t),{queue:{pending:r},task:n}}function bZ(e){return e.pending.size}function xZ(e){return e.pending.size===0}function SZ(e,t){for(let n of e.pending.values())n.reject(t);return{pending:new Map}}function CZ(e,t){let n=t.data,r=e.get(n.id);if(r){if(e.delete(n.id),hZ(n)){let e={};n.resultBrep!==void 0&&(e.resultBrep=n.resultBrep),n.resultData!==void 0&&(e.resultData=n.resultData),r.resolve(e)}else r.reject(Error(n.error))}}function wZ(e){let{worker:t,wasmUrl:n}=e,r=new Map,i=!1;function a(){return crypto.randomUUID()}function o(e){CZ(r,e)}t.addEventListener(`message`,o);function s(e){return i?Promise.reject(Error(`WorkerClient has been disposed`)):new Promise((n,i)=>{r.set(e.id,{resolve:n,reject:i}),t.postMessage(e)})}return{async init(){await s({id:a(),type:`init`,...n===void 0?{}:{wasmUrl:n}})},async execute(e,t,n){return s({id:a(),type:`operation`,operation:e,shapesBrep:t,parameters:n})},executeBatch(e){let t=e.length;return s({id:a(),type:`batch`,operations:e}).then(e=>{let n=e.resultData;if(!Array.isArray(n)||n.length!==t)throw Error(`Invalid batch response: expected ${t} results`);return n})},dispose(){i=!0;for(let e of r.values())e.reject(Error(`WorkerClient disposed`));r.clear(),t.removeEventListener(`message`,o);let e={id:a(),type:`dispose`};t.postMessage(e)}}}function TZ(){return{operations:new Map}}function EZ(e,t,n){let r=new Map(e.operations);return r.set(t,n),{operations:r}}function DZ(e){return e instanceof Error?e.message:String(e)}function OZ(e,t,n,r){let i=e.operations.get(t);if(!i)return{success:!1,error:`Unknown operation: ${t}`};try{let e=i(n,r);return{success:!0,...e.resultBrep===void 0?{}:{resultBrep:e.resultBrep},...e.resultData===void 0?{}:{resultData:e.resultData}}}catch(e){return{success:!1,error:DZ(e)}}}function kZ(e,t){return t.success?{id:e,success:!0,...t.resultBrep===void 0?{}:{resultBrep:t.resultBrep},...t.resultData===void 0?{}:{resultData:t.resultData}}:{id:e,success:!1,error:t.error??`operation failed`}}function AZ(e,t){let n=globalThis;n.onmessage=async r=>{let i=r.data;if(dZ(i)){try{await t(i.wasmUrl);let e={id:i.id,success:!0};n.postMessage(e)}catch(e){let t={id:i.id,success:!1,error:DZ(e)};n.postMessage(t)}return}if(fZ(i)){let t=OZ(e,i.operation,i.shapesBrep,i.parameters);n.postMessage(kZ(i.id,t));return}if(mZ(i)){let t=i.operations.map(t=>OZ(e,t.operation,t.shapesBrep,t.params)),r={id:i.id,success:!0,resultData:t};n.postMessage(r);return}if(pZ(i)){let e={id:i.id,success:!0};n.postMessage(e),n.close?.()}}}function jZ(e){let{workers:t,wasmUrl:n}=e;if(t.length===0)throw Error(`createWorkerPool requires at least one worker`);let r=t.map(e=>({client:wZ({worker:e,...n===void 0?{}:{wasmUrl:n}}),inFlight:0})),i=!1;function a(){return r.reduce((e,t)=>t.inFlight<e.inFlight?t:e)}function o(e,t,n){if(i)return Promise.reject(Error(`WorkerPool has been disposed`));let r=a();return r.inFlight+=1,r.client.execute(e,t,n).finally(()=>{--r.inFlight})}function s(){if(!i){i=!0;for(let e of r)e.client.dispose()}}return{size:r.length,async init(){try{await Promise.all(r.map(e=>e.client.init()))}catch(e){throw s(),e}},execute:o,executeBatch(e){return Promise.all(e.map(e=>o(e.operation,e.shapesBrep,e.params)))},inFlight(){return r.map(e=>e.inFlight)},dispose:s}}var MZ=Object.defineProperty,NZ=(e,t)=>{let n={};for(var r in e)MZ(n,r,{get:e[r],enumerable:!0});return t||MZ(n,Symbol.toStringTag,{value:`Module`}),n};function PZ(e){return`projectEdges`in e}function FZ(e){return`sketchNew`in e&&`sketchDof`in e}var IZ=1,LZ=2;function RZ(e,t){t===`commonFace`&&e.SetGlue(IZ),t===`sameFace`&&e.SetGlue(LZ)}function zZ(e){return typeof e==`number`}function BZ(e){if(typeof e==`number`)return!0;if(typeof e==`object`&&e){let t=e;return`distances`in t&&Array.isArray(t.distances)&&`selectedFace`in t||`distance`in t&&`angle`in t&&`selectedFace`in t}return!1}function VZ(e){return typeof e==`number`?!0:Array.isArray(e)&&e.length===2?e.every(zZ):!1}function HZ(e,t){let n=n=>{let r=e.findAll(n);if(r.length===0)return[];let i=0,a=NO(cO(jk(r)),t);for(let e=1;e<r.length;e++){let n=NO(cO(Ak(r,e)),t);n<a&&(a=n,i=e)}return[Ak(r,i)]},r=e=>{let t=n(e);return t.length===0?z(bD(`FINDER_NOT_UNIQUE`,`Finder expected a unique match but found 0 element(s)`)):R(jk(t))};return{...e,findAll:n,findUnique:r}}function UZ(e){return kL(`vertex`,e,UZ,(t,n)=>({nearestTo:t=>HZ(UZ(e),t),atPosition:(e,t=1e-4)=>n(n=>NO(cO(n),e)<t),withinBox:(e,t)=>n(n=>{let r=cO(n);return r[0]>=e[0]-1e-6&&r[0]<=t[0]+1e-6&&r[1]>=e[1]-1e-6&&r[1]<=t[1]+1e-6&&r[2]>=e[2]-1e-6&&r[2]<=t[2]+1e-6}),atDistance:(e,t=[0,0,0],r=1e-4)=>n(n=>{let i=cO(n);return Math.abs(NO(i,t)-e)<r})}))}function WZ(){return UZ([])}var GZ=new Map,KZ=null,qZ=null;function JZ(e,t){GZ.set(e,t),KZ||=e,e===KZ&&(qZ=t)}function YZ(e){if(!e&&qZ)return qZ;let t=e??KZ;if(!t)throw Error(`brepjs voxel engine not initialized. Call initVoxel() (or registerVoxel()) before using voxel operations.`);let n=GZ.get(t);if(!n)throw Error(`brepjs: voxel engine '${t}' is not registered.`);return n}function XZ(){return KZ}function ZZ(e,t=`voxel`){JZ(t,e),KZ=t,qZ=e}function QZ(e){if(e.vertices.length%3!=0)return W(`VOXEL_INVALID_MESH`,`mesh.vertices length must be a multiple of 3 (flat xyz).`);if(e.triangles.length%3!=0)return W(`VOXEL_INVALID_MESH`,`mesh.triangles length must be a multiple of 3.`);let t=e.vertices.length/3;for(let n=0;n<e.triangles.length;n++){let r=e.triangles[n];if(r===void 0||r>=t)return W(`VOXEL_INVALID_TRIANGLE_INDEX`,`triangle index ${r} at position ${n} is out of range for ${t} vertices.`)}return null}function $Z(e,t){return QZ(e)||(t.length%3==0?null:W(`VOXEL_INVALID_QUERIES`,`queries length must be a multiple of 3 (flat xyz).`))}function eQ(e){try{return R(YZ(e))}catch(e){return z(_D(`VOXEL_NOT_INITIALIZED`,e instanceof Error?e.message:`voxel engine not initialized`,e))}}function tQ(e,t,n){let r=$Z(e,t);if(r)return z(r);let i=eQ(n);return B(i)?i:R(i.value.winding_numbers(e.vertices,e.triangles,t))}function nQ(e,t,n){let r=$Z(e,t);if(r)return z(r);let i=eQ(n);if(B(i))return i;let a=i.value.points_inside(e.vertices,e.triangles,t);return R(Array.from(a,e=>e===1))}var rQ=48,iQ=2;function aQ(e,t,n){let r=QZ(e);if(r)return z(r);if(e.vertices.length===0||e.triangles.length===0)return z(W(`VOXEL_EMPTY_MESH`,`repairMesh requires a non-empty triangle mesh.`));let i=t?.resolution??rQ,a=t?.padding??iQ;if(!Number.isInteger(i)||i<1)return z(W(`VOXEL_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`));if(!Number.isInteger(a)||a<1)return z(W(`VOXEL_INVALID_PADDING`,`padding must be an integer >= 1.`));let o=eQ(n);if(B(o))return o;try{try{var s=WT();let t=s.u(o.value.repair_mesh(e.vertices,e.triangles,i,a)),n=t.positions.length/3;return R({vertices:t.positions,normals:t.normals,triangles:t.indices,uvs:new Float32Array(n*2),faceGroups:[{start:0,count:t.indices.length/3,faceHash:0}]})}catch(e){s.e=e}finally{s.d()}}catch(e){return z(vD(`VOXEL_REPAIR_FAILED`,e instanceof Error?e.message:`voxel repair failed (grid too large?).`,e))}}var oQ=.001;function sQ(e,t=oQ){try{let n=bM(e,{tolerance:t});return n.vertices.length===0||n.triangles.length===0?z(vD(`VOXEL_SHAPE_MESH_EMPTY`,`shape tessellated to an empty triangle mesh.`)):R({vertices:n.vertices,triangles:n.triangles})}catch(e){return z(vD(`VOXEL_SHAPE_MESH_FAILED`,e instanceof Error?e.message:`failed to mesh shape for voxel op.`,e))}}var cQ=48,lQ=2,uQ={union:0,intersection:1,difference:2};function dQ(e){let t=e?.resolution??cQ,n=e?.padding??lQ;return!Number.isInteger(t)||t<1?z(W(`VOXEL_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(n)||n<1?z(W(`VOXEL_INVALID_PADDING`,`padding must be an integer >= 1.`)):R({resolution:t,padding:n})}function fQ(e){if(e.positions.length===0||e.indices.length===0)return z(vD(`VOXEL_DEGENERATE_RESULT`,`the voxel operation produced an empty mesh (over-shrunk offset or disjoint operands?).`));let t=e.positions.length/3;return R({vertices:e.positions,normals:e.normals,triangles:e.indices,uvs:new Float32Array(t*2),faceGroups:[{start:0,count:e.indices.length/3,faceHash:0}]})}function pQ(e,t,n,r){let i=QZ(e);if(i)return z(i);if(e.vertices.length===0||e.triangles.length===0)return z(W(`VOXEL_EMPTY_MESH`,`offsetMesh requires a non-empty triangle mesh.`));if(!Number.isFinite(t))return z(W(`VOXEL_INVALID_DISTANCE`,`distance must be a finite number.`));let a=dQ(n);if(B(a))return a;let o=eQ(r);if(B(o))return o;try{try{var s=WT();return fQ(s.u(o.value.offset_mesh(e.vertices,e.triangles,t,a.value.resolution,a.value.padding)))}catch(e){s.e=e}finally{s.d()}}catch(e){return z(vD(`VOXEL_OFFSET_FAILED`,e instanceof Error?e.message:`voxel offset failed (grid too large?).`,e))}}function mQ(e,t,n,r){let i=QZ(e);if(i)return z(i);if(e.vertices.length===0||e.triangles.length===0)return z(W(`VOXEL_EMPTY_MESH`,`shellMesh requires a non-empty triangle mesh.`));if(!Number.isFinite(t)||t<=0)return z(W(`VOXEL_INVALID_THICKNESS`,`thickness must be a finite number > 0.`));let a=dQ(n);if(B(a))return a;let o=eQ(r);if(B(o))return o;try{try{var s=WT();return fQ(s.u(o.value.shell_mesh(e.vertices,e.triangles,t,a.value.resolution,a.value.padding)))}catch(e){s.e=e}finally{s.d()}}catch(e){return z(vD(`VOXEL_SHELL_FAILED`,e instanceof Error?e.message:`voxel shell failed (grid too large?).`,e))}}function hQ(e,t,n,r,i){let a=QZ(e);if(a)return z(a);let o=QZ(t);if(o)return z(o);if(e.vertices.length===0||e.triangles.length===0)return z(W(`VOXEL_EMPTY_MESH`,`voxelBoolean requires a non-empty mesh for operand A.`));if(t.vertices.length===0||t.triangles.length===0)return z(W(`VOXEL_EMPTY_MESH`,`voxelBoolean requires a non-empty mesh for operand B.`));let s=uQ[n],c=dQ(r);if(B(c))return c;let l=eQ(i);if(B(l))return l;try{try{var u=WT();return fQ(u.u(l.value.voxel_boolean(e.vertices,e.triangles,t.vertices,t.triangles,s,c.value.resolution,c.value.padding)))}catch(e){u.e=e}finally{u.d()}}catch(e){return z(vD(`VOXEL_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel boolean failed (grid too large?).`,e))}}function gQ(e,t,n,r){let i=sQ(e);return B(i)?i:pQ(i.value,t,n,r)}function _Q(e,t,n,r){let i=sQ(e);return B(i)?i:mQ(i.value,t,n,r)}function vQ(e,t,n,r,i){let a=sQ(e);if(B(a))return a;let o=sQ(t);return B(o)?o:hQ(a.value,o.value,n,r,i)}var yQ=48,bQ=2,xQ={union:0,intersection:1,difference:2};function SQ(e){let t=e?.resolution??yQ,n=e?.padding??bQ;return!Number.isInteger(t)||t<1?z(W(`VOXEL_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(n)||n<1?z(W(`VOXEL_INVALID_PADDING`,`padding must be an integer >= 1.`)):R({resolution:t,padding:n})}function CQ(e){try{var t=WT();let n=e.contour(),{positions:r,normals:i,indices:a}=t.u({value:n,[Symbol.dispose](){n.free()}}).value;if(r.length===0||a.length===0)return z(vD(`VOXEL_DEGENERATE_RESULT`,`the voxel field contoured to an empty mesh (over-shrunk offset or disjoint operands?).`));let o=r.length/3;return R({vertices:r,normals:i,triangles:a,uvs:new Float32Array(o*2),faceGroups:[{start:0,count:a.length/3,faceHash:0}]})}catch(e){t.e=e}finally{t.d()}}function wQ(e){return{raw:e,delete(){e.free()}}}function TQ(e){return EQ(e)}function EQ(e){let t=rE(wQ(e)),n={get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()},boolean(e,t){return this.value.boolean(e.value,xQ[t]),n},offset(e){return this.value.offset(e),n},shell(e){return this.value.shell(e),n},reinit(){return this.value.reinit(),n},contour(){let e=CQ(this.value);if(B(e))throw Error(e.error.message);return e.value}};return n}function DQ(e){return!e.disposed}function OQ(){return z(W(`VOXEL_FIELD_DISPOSED`,`the voxel field handle has been disposed.`))}function kQ(e,t,n){let r=QZ(e);if(r)return z(r);if(e.vertices.length===0||e.triangles.length===0)return z(W(`VOXEL_EMPTY_MESH`,`voxelField requires a non-empty triangle mesh.`));let i=SQ(t);if(B(i))return i;let a=eQ(n);if(B(a))return a;try{return R(EQ(new a.value.VoxelField(e.vertices,e.triangles,i.value.resolution,i.value.padding)))}catch(e){return z(vD(`VOXEL_FIELD_VOXELIZE_FAILED`,e instanceof Error?e.message:`voxel field voxelization failed (grid too large or non-dense?).`,e))}}function AQ(e,t,n,r,i){let a=QZ(e);if(a)return z(a);let o=QZ(t);if(o)return z(o);if(e.vertices.length===0||e.triangles.length===0)return z(W(`VOXEL_EMPTY_MESH`,`voxelBooleanField requires a non-empty mesh for operand A.`));if(t.vertices.length===0||t.triangles.length===0)return z(W(`VOXEL_EMPTY_MESH`,`voxelBooleanField requires a non-empty mesh for operand B.`));let s=SQ(r);if(B(s))return s;let c=eQ(i);if(B(c))return c;try{return R(EQ(c.value.VoxelField.boolean_of(e.vertices,e.triangles,t.vertices,t.triangles,xQ[n],s.value.resolution,s.value.padding)))}catch(e){return z(vD(`VOXEL_FIELD_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel field boolean failed (grid too large or non-dense?).`,e))}}function jQ(e,t,n){if(!DQ(e)||!DQ(t))return OQ();try{return e.value.boolean(t.value,xQ[n]),R(e)}catch(e){return z(vD(`VOXEL_FIELD_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel field boolean failed (dim mismatch?).`,e))}}function MQ(e,t){if(!DQ(e))return OQ();if(!Number.isFinite(t))return z(W(`VOXEL_INVALID_DISTANCE`,`distance must be a finite number.`));try{return e.value.offset(t),R(e)}catch(e){return z(vD(`VOXEL_FIELD_OFFSET_FAILED`,e instanceof Error?e.message:`voxel field offset failed.`,e))}}function NQ(e,t){if(!DQ(e))return OQ();if(!Number.isFinite(t)||t<=0)return z(W(`VOXEL_INVALID_THICKNESS`,`thickness must be a finite number > 0.`));try{return e.value.shell(t),R(e)}catch(e){return z(vD(`VOXEL_FIELD_SHELL_FAILED`,e instanceof Error?e.message:`voxel field shell failed.`,e))}}function PQ(e){if(!DQ(e))return OQ();try{return e.value.reinit(),R(e)}catch(e){return z(vD(`VOXEL_FIELD_REINIT_FAILED`,e instanceof Error?e.message:`voxel field reinit failed.`,e))}}function FQ(e){if(!DQ(e))return OQ();try{return CQ(e.value)}catch(e){return z(vD(`VOXEL_FIELD_CONTOUR_FAILED`,e instanceof Error?e.message:`voxel field contour failed.`,e))}}function IQ(e,t,n){let r=sQ(e);return B(r)?r:kQ(r.value,t,n)}function LQ(e,t,n,r,i){let a=sQ(e);if(B(a))return a;let o=sQ(t);return B(o)?o:AQ(a.value,o.value,n,r,i)}var RQ=48,zQ=2;function BQ(e){try{return R(YZ(e))}catch(e){return z(_D(`VOXEL_NOT_INITIALIZED`,e instanceof Error?e.message:`voxel engine not initialized`,e))}}function VQ(e){let t=e?.resolution??RQ,n=e?.padding??zQ;return!Number.isInteger(t)||t<1?z(W(`SDF_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(n)||n<1?z(W(`SDF_INVALID_PADDING`,`padding must be an integer >= 1.`)):R({resolution:t,padding:n})}function HQ(e){return{raw:e,delete(){e.free()}}}var UQ={offsetField(e){return WQ(this.value.offset_field(e.value))},roundField(e){return WQ(this.value.round_field(e.value))},shellField(e){return WQ(this.value.shell_field(e.value))},smoothUnionField(e,t){return WQ(this.value.smooth_union_field(e.value,t.value))}};function WQ(e){let t=rE(HQ(e));return{get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()},union(e){return WQ(this.value.union(e.value))},intersection(e){return WQ(this.value.intersection(e.value))},difference(e){return WQ(this.value.difference(e.value))},smoothUnion(e,t){return WQ(this.value.smooth_union(e.value,t))},smoothIntersection(e,t){return WQ(this.value.smooth_intersection(e.value,t))},smoothDifference(e,t){return WQ(this.value.smooth_difference(e.value,t))},offset(e){return WQ(this.value.offset(e))},round(e){return WQ(this.value.round(e))},shell(e){return WQ(this.value.shell(e))},onion(e){return WQ(this.value.onion(e))},...UQ,translate(e,t,n){return WQ(this.value.translate(e,t,n))},rotate(e,t,n,r){return WQ(this.value.rotate(e,t,n,r))},scale(e){return WQ(this.value.scale(e))},rasterize(e){return GQ(this.value,e)},rasterizeIn(e,t){return KQ(this.value,e,t)}}}function GQ(e,t){let n=VQ(t);if(B(n))return n;try{return R(TQ(e.rasterize(n.value.resolution,n.value.padding)))}catch(e){return qQ(e)}}function KQ(e,t,n){let r=VQ(n);if(B(r))return r;let i=JQ(t);if(i)return z(i);try{return R(TQ(e.rasterize_in(t.min[0],t.min[1],t.min[2],t.max[0],t.max[1],t.max[2],r.value.resolution,r.value.padding)))}catch(e){return qQ(e)}}function qQ(e){return z(vD(`SDF_RASTERIZE_FAILED`,e instanceof Error?e.message:`SDF rasterization failed (grid too large?).`,e))}function JQ(e){if(![...e.min,...e.max].every(e=>Number.isFinite(e)))return W(`SDF_INVALID_BOUNDS`,`bounds must be finite numbers.`);for(let t=0;t<3;t++)if(e.max[t]<=e.min[t])return W(`SDF_INVALID_BOUNDS`,`bounds max must exceed min on every axis.`);return null}function YQ(e,t){let n=BQ(t);if(B(n))return n;try{return R(WQ(e(n.value)))}catch(e){return z(vD(`SDF_BUILD_FAILED`,e instanceof Error?e.message:`SDF primitive construction failed.`,e))}}function XQ(e,t){return YQ(t=>t.Sdf.sphere(e),t)}function ZQ(e,t,n,r){return YQ(r=>r.Sdf.box_(e,t,n),r)}function QQ(e,t,n,r,i){return YQ(i=>i.Sdf.rounded_box(e,t,n,r),i)}function $Q(e,t,n){return YQ(n=>n.Sdf.cylinder(e,t),n)}function e$(e,t,n){return YQ(n=>n.Sdf.cone(e,t),n)}function t$(e,t,n,r){return YQ(r=>r.Sdf.capsule(e[0],e[1],e[2],t[0],t[1],t[2],n),r)}function n$(e,t,n){return YQ(n=>n.Sdf.torus(e,t),n)}function r$(e,t,n){return YQ(n=>n.Sdf.plane(e[0],e[1],e[2],t),n)}function i$(e){if(e.length<2)return z(W(`SDF_INVALID_SPINE`,`sweep spine needs at least 2 points.`));let t=new Float64Array(e.length*3);for(let n=0;n<e.length;n++){let r=e[n];if(!r.every(e=>Number.isFinite(e)))return z(W(`SDF_INVALID_SPINE`,`sweep spine coordinates must be finite.`));t[n*3]=r[0],t[n*3+1]=r[1],t[n*3+2]=r[2]}return R(t)}function a$(e,t,n,r){let i=i$(e);if(B(i))return i;let a=n?.closed??!1;return YQ(e=>e.Sdf.sweep(i.value,t.value,a),r)}var o$={gyroid:0,schwarzP:1,diamond:2};function s$(e,t,n,r){let i=o$[e];return i===void 0?z(W(`SDF_INVALID_LATTICE_KIND`,`unknown lattice kind: ${e}`)):YQ(e=>e.Sdf.lattice(i,t.value,n.value),r)}function c$(e,t,n){return YQ(n=>n.Sdf.strut_lattice(e,t.value),n)}function l$(e){return{raw:e,delete(){e.free()}}}function u$(e){let t=rE(l$(e));return{get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()}}}function d$(e,t){let n=BQ(t);if(B(n))return n;try{return R(u$(e(n.value)))}catch(e){return z(vD(`SDF_FIELD_BUILD_FAILED`,e instanceof Error?e.message:`scalar field construction failed.`,e))}}function f$(e,t){return d$(t=>t.ScalarField.constant(e),t)}function p$(e,t,n,r,i,a){return d$(a=>a.ScalarField.axial_ramp(e,t,n,r,i),a)}function m$(e,t,n,r,i,a,o){return d$(o=>o.ScalarField.radial_ramp(e[0],e[1],e[2],t,n,r,i,a),o)}function h$(e,t,n,r){return d$(r=>r.ScalarField.from_sdf(e.value,t,n),r)}function g$(e,t,n,r){return d$(r=>r.ScalarField.clamp(e.value,t,n),r)}var _$={gyroid:0,schwarzP:1,diamond:2},v$=48,y$=2;function b$(e){let t=_$[e.type];if(t===void 0)return z(W(`LATTICE_INVALID_TYPE`,`lattice type must be one of gyroid, schwarzP, diamond (got '${e.type}').`));if(!(e.period>0))return z(W(`LATTICE_INVALID_PERIOD`,`period must be > 0.`));if(!(e.thickness>0))return z(W(`LATTICE_INVALID_THICKNESS`,`thickness must be > 0.`));let n=e.resolution??v$,r=e.padding??y$;return!Number.isInteger(n)||n<1?z(W(`LATTICE_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(r)||r<1?z(W(`LATTICE_INVALID_PADDING`,`padding must be an integer >= 1.`)):R({tag:t,period:e.period,thickness:e.thickness,resolution:n,padding:r})}function x$(e){let t=e.positions.length/3;return{vertices:e.positions,normals:e.normals,triangles:e.indices,uvs:new Float32Array(t*2),faceGroups:[{start:0,count:e.indices.length/3,faceHash:0}]}}function S$(e,t,n){let r=QZ(e);if(r)return z(r);if(e.vertices.length===0||e.triangles.length===0)return z(W(`LATTICE_EMPTY_MESH`,`latticeInfill requires a non-empty triangle mesh.`));let i=b$(t);if(B(i))return i;let a=eQ(n);if(B(a))return a;let{tag:o,period:s,thickness:c,resolution:l,padding:u}=i.value;try{try{var d=WT();return R(x$(d.u(a.value.lattice_infill(e.vertices,e.triangles,l,u,o,s,c))))}catch(e){d.e=e}finally{d.d()}}catch(e){return z(vD(`LATTICE_INFILL_FAILED`,e instanceof Error?e.message:`lattice infill failed (grid too large?).`,e))}}function C$(e,t,n){let r=sQ(e);return B(r)?r:S$(r.value,t,n)}function w$(e,t,n){for(let t=0;t<3;t++){let n=e.min[t],r=e.max[t];if(n===void 0||r===void 0||!(n<r))return z(W(`LATTICE_INVALID_BOUNDS`,`bounds.min must be strictly less than bounds.max on every axis (axis ${t}).`))}let r=b$(t);if(B(r))return r;let i=eQ(n);if(B(i))return i;let{tag:a,period:o,thickness:s,resolution:c,padding:l}=r.value,[u,d,f]=e.min,[p,m,h]=e.max;try{try{var g=WT();return R(x$(g.u(i.value.tpms_box(u,d,f,p,m,h,c,l,a,o,s))))}catch(e){g.e=e}finally{g.d()}}catch(e){return z(vD(`TPMS_LATTICE_FAILED`,e instanceof Error?e.message:`tpms lattice failed (grid too large?).`,e))}}var T$=14695981039346656037n,E$=1099511628211n,D$=18446744073709551615n;function O$(){return T$}function k$(e,t){return(e^BigInt(t&255))*E$&D$}function A$(e,t){let n=e;for(let e=0;e<t.length;e++)n=k$(n,t[e]??0);return n}var j$=new TextEncoder;function M$(e,t){return A$(e,j$.encode(t))}var N$=new ArrayBuffer(8),P$=new DataView(N$),F$=new Uint8Array(N$);function I$(e,t){return P$.setFloat64(0,Object.is(t,-0)?0:t),A$(e,F$)}function L$(e,t){let n=e,r=t&D$;for(let e=0;e<8;e++)n=k$(n,Number(r&255n)),r>>=8n;return n}function R$(e,t){let n=e,r=t|0;for(let e=0;e<4;e++)n=k$(n,r&255),r>>>=8;return n}function z$(e,t){return k$(e,+!!t)}function B$(e){return(e&D$).toString(16).padStart(16,`0`)}var V$=new Set;function H$(e){return M$(O$(),e)}function U$(e){return{kind:`NumLit`,value:e,structuralHash:I$(H$(`NumLit`),e),freeParams:V$}}function W$(e){let t=H$(`Vec3Lit`);for(let n of e)t=I$(t,n);return{kind:`Vec3Lit`,value:e,structuralHash:t,freeParams:V$}}function G$(e){let t=H$(`Vec2Lit`);for(let n of e)t=I$(t,n);return{kind:`Vec2Lit`,value:e,structuralHash:t,freeParams:V$}}function K$(e){return{kind:`Param`,name:e,structuralHash:M$(H$(`Param`),e),freeParams:new Set([e])}}function q$(e,t,n){let r=M$(H$(`BinOp`),e);return r=L$(r,t.structuralHash),r=L$(r,n.structuralHash),{kind:`BinOp`,op:e,a:t,b:n,structuralHash:r,freeParams:r1(t.freeParams,n.freeParams)}}function J$(e,t){let n=M$(H$(`UnaryOp`),e);return n=L$(n,t.structuralHash),{kind:`UnaryOp`,op:e,arg:t,structuralHash:n,freeParams:t.freeParams}}function Y$(e,t){let n=R$(H$(`Component`),t);return n=L$(n,e.structuralHash),{kind:`Component`,vec:e,index:t,structuralHash:n,freeParams:e.freeParams}}function X$(e,t){let n=R$(H$(`BuildVec`),e),r=new Set;for(let e of t){n=L$(n,e.structuralHash);for(let t of e.freeParams)r.add(t)}return{kind:`BuildVec`,dim:e,components:t,structuralHash:n,freeParams:r}}var Z$=(e,t)=>q$(`+`,e,t),Q$=(e,t)=>q$(`*`,e,t);function $$(e){return typeof e==`number`?U$(e):e}function e1(e,t){if(!Array.isArray(e))return e;let n=e;return n.every(e=>typeof e==`number`)?t===3?W$([n[0],n[1],n[2]]):G$([n[0],n[1]]):X$(t,n.map($$))}function t1(e){return e1(e,3)}function n1(e){return e1(e,2)}function r1(e,t){if(e.size===0)return t;if(t.size===0)return e;let n=new Set(e);for(let e of t)n.add(e);return n}function i1(e){return typeof e==`number`}function a1(e,t){return i1(e)?R(e):z(W(H.NULL_SHAPE_INPUT,`${t}: expected number, got ${Array.isArray(e)?`vector(${e.length})`:typeof e}`))}function o1(e,t,n){return Array.isArray(e)&&e.length===t?R(e):z(W(H.NULL_SHAPE_INPUT,`${n}: expected Vec${t}, got ${i1(e)?`number`:`vector(${e.length})`}`))}function s1(e,t){switch(e.kind){case`NumLit`:return R(e.value);case`Vec3Lit`:return R(e.value);case`Vec2Lit`:return R(e.value);case`Param`:{let n=t[e.name];return n===void 0?z(W(H.NULL_SHAPE_INPUT,`unbound param: ${e.name}`)):R(n)}case`BinOp`:return c1(e,t);case`UnaryOp`:return l1(e,t);case`Component`:return u1(e,t);case`BuildVec`:return d1(e,t)}}function c1(e,t){let n=s1(e.a,t);if(!n.ok)return n;let r=s1(e.b,t);if(!r.ok)return r;let i=a1(n.value,`BinOp(${e.op}).a`);if(!i.ok)return i;let a=a1(r.value,`BinOp(${e.op}).b`);if(!a.ok)return a;switch(e.op){case`+`:return R(i.value+a.value);case`-`:return R(i.value-a.value);case`*`:return R(i.value*a.value);case`/`:return a.value===0?z(W(H.NULL_SHAPE_INPUT,`BinOp(/): division by zero`)):R(i.value/a.value)}}function l1(e,t){let n=s1(e.arg,t);if(!n.ok)return n;let r=a1(n.value,`UnaryOp(${e.op})`);if(!r.ok)return r;let i=r.value;switch(e.op){case`neg`:return R(-i);case`sin`:return R(Math.sin(i));case`cos`:return R(Math.cos(i));case`sqrt`:return R(Math.sqrt(i));case`abs`:return R(Math.abs(i))}}function u1(e,t){let n=s1(e.vec,t);if(!n.ok)return n;if(i1(n.value))return z(W(H.NULL_SHAPE_INPUT,`Component: cannot index a scalar`));let r=n.value,i=r[e.index];return i===void 0?z(W(H.NULL_SHAPE_INPUT,`Component: index ${e.index} out of range for Vec${r.length}`)):R(i)}function d1(e,t){if(e.components.length!==e.dim)return z(W(H.NULL_SHAPE_INPUT,`BuildVec(${e.dim}): expected ${e.dim} components, got ${e.components.length}`));let n=[];for(let r of e.components){let e=s1(r,t);if(!e.ok)return e;let i=a1(e.value,`BuildVec.component`);if(!i.ok)return i;n.push(i.value)}return R(e.dim===2?[n[0],n[1]]:[n[0],n[1],n[2]])}function f1(e,t,n){let r=s1(e,t);return r.ok?a1(r.value,n):r}function p1(e,t,n){let r=s1(e,t);if(!r.ok)return r;let i=o1(r.value,3,n);if(!i.ok)return i;let[a,o,s]=i.value;return R([a,o,s])}function m1(e,t,n){let r=s1(e,t);if(!r.ok)return r;let i=o1(r.value,2,n);if(!i.ok)return i;let[a,o]=i.value;return R([a,o])}function h1(e,t){if(t.size===0)return Object.freeze({});let n={};for(let r of t){let t=e[r];t!==void 0&&(n[r]=t)}return Object.freeze(n)}function g1(e){return{kind:`Line`,to:n1(e)}}function _1(e,t,n){return{kind:`Arc`,to:n1(e),radius:$$(t),largeArc:n?.largeArc??!1,clockwise:n?.clockwise??!1}}function v1(e,t){return{kind:`Bezier`,controls:e.map(n1),to:n1(t)}}function y1(e,t,n){return{kind:`EllipseArc`,to:n1(e),radii:n1(t),rotation:$$(n?.rotation??0),largeArc:n?.largeArc??!1,clockwise:n?.clockwise??!1}}function b1(e,t){return{start:n1(e),segments:[...t]}}function x1(e,t){let n=R$(e,t.length),r=(e,t)=>L$(e,t.structuralHash);for(let e of t)if(n=M$(n,e.kind),n=r(n,e.to),e.kind===`Arc`)n=r(n,e.radius),n=z$(z$(n,e.largeArc),e.clockwise);else if(e.kind===`Bezier`){n=R$(n,e.controls.length);for(let t of e.controls)n=r(n,t)}else e.kind===`EllipseArc`&&(n=r(n,e.radii),n=r(n,e.rotation),n=z$(z$(n,e.largeArc),e.clockwise));return n}function S1(e){let t=[];for(let n of e)t.push(n.to),n.kind===`Arc`?t.push(n.radius):n.kind===`Bezier`?t.push(...n.controls):n.kind===`EllipseArc`&&t.push(n.radii,n.rotation);return t}function C1(e,t){return x1(L$(e,t.start.structuralHash),t.segments)}function w1(e){return[e.start,...S1(e.segments)]}function T1(e,t){return{start:t(e.start),segments:e.segments.map(e=>E1(e,t))}}function E1(e,t){switch(e.kind){case`Line`:return g1(t(e.to));case`Arc`:return _1(t(e.to),t(e.radius),{largeArc:e.largeArc,clockwise:e.clockwise});case`Bezier`:return v1(e.controls.map(t),t(e.to));case`EllipseArc`:return y1(t(e.to),t(e.radii),{rotation:t(e.rotation),largeArc:e.largeArc,clockwise:e.clockwise})}}var D1=new Set;function O1(e){return M$(O$(),e)}function k1(e,t){return L$(e,t.structuralHash)}function A1(e,t){return t===void 0?z$(e,!1):k1(z$(e,!0),t)}function j1(e,t){return t===void 0?z$(e,!1):I$(z$(e,!0),t)}function M1(...e){let t=new Set;for(let n of e)if(n)for(let e of n.freeParams)t.add(e);return t.size===0?D1:t}function N1(e,t,n){let r=$$(e),i=$$(t),a=$$(n),o=O1(`Box`);return o=k1(k1(k1(o,r),i),a),{kind:`Box`,x:r,y:i,z:a,structuralHash:o,freeParams:M1(r,i,a)}}function P1(e){let t=$$(e);return{kind:`Sphere`,radius:t,structuralHash:k1(O1(`Sphere`),t),freeParams:t.freeParams}}function F1(e,t){let n=$$(e),r=$$(t);return{kind:`Cylinder`,radius:n,height:r,structuralHash:k1(k1(O1(`Cylinder`),n),r),freeParams:M1(n,r)}}function I1(e,t,n){let r=$$(e),i=$$(t),a=$$(n),o=O1(`Cone`);return o=k1(k1(k1(o,r),i),a),{kind:`Cone`,radius1:r,radius2:i,height:a,structuralHash:o,freeParams:M1(r,i,a)}}function L1(e,t){let n=$$(e),r=$$(t);return{kind:`Torus`,majorRadius:n,minorRadius:r,structuralHash:k1(k1(O1(`Torus`),n),r),freeParams:M1(n,r)}}function R1(e){let t=e.map(t1),n=R$(O1(`Polygon`),t.length);for(let e of t)n=k1(n,e);return{kind:`Polygon`,points:t,structuralHash:n,freeParams:M1(...t)}}function z1(e){let t=$$(e);return{kind:`Circle`,radius:t,structuralHash:k1(O1(`Circle`),t),freeParams:t.freeParams}}function B1(e,t){let n=t1(e),r=t1(t);return{kind:`Line`,from:n,to:r,structuralHash:k1(k1(O1(`Line`),n),r),freeParams:M1(n,r)}}function V1(e){let t=t1(e);return{kind:`Vertex`,point:t,structuralHash:k1(O1(`Vertex`),t),freeParams:t.freeParams}}function H1(e){return{kind:`Empty`,output:e,structuralHash:M$(O1(`Empty`),e),freeParams:D1}}function U1(){return H1(`Solid`)}function W1(){return H1(`Face`)}function G1(){return H1(`Wire`)}function K1(e,t,n,r){return j1(k1(k1(O1(e),t),n),r)}function q1(e,t,n){return{kind:`Fuse`,a:e,b:t,tolerance:n,structuralHash:K1(`Fuse`,e,t,n),freeParams:M1(e,t)}}function J1(e,t,n){return{kind:`Cut`,a:e,b:t,tolerance:n,structuralHash:K1(`Cut`,e,t,n),freeParams:M1(e,t)}}function Y1(e,t,n){return{kind:`Intersect`,a:e,b:t,tolerance:n,structuralHash:K1(`Intersect`,e,t,n),freeParams:M1(e,t)}}function X1(e,t){let n=[...e],r=R$(O1(`FuseAll`),n.length);for(let e of n)r=k1(r,e);return r=j1(r,t),{kind:`FuseAll`,shapes:n,tolerance:t,structuralHash:r,freeParams:M1(...n)}}function Z1(e,t,n){let r=[...t],i=k1(O1(`CutAll`),e);i=R$(i,r.length);for(let e of r)i=k1(i,e);return i=j1(i,n),{kind:`CutAll`,base:e,tools:r,tolerance:n,structuralHash:i,freeParams:M1(e,...r)}}function Q1(e){return e===void 0?void 0:t1(e)}function $1(e,t){let n=t1(t);return{kind:`Translate`,target:e,vector:n,structuralHash:k1(k1(O1(`Translate`),e),n),freeParams:M1(e,n)}}function e0(e,t,n){let r=$$(t),i=Q1(n?.axis),a=Q1(n?.at),o=k1(k1(O1(`Rotate`),e),r);return o=A1(o,i),o=A1(o,a),{kind:`Rotate`,target:e,angle:r,axis:i,at:a,structuralHash:o,freeParams:M1(e,r,i,a)}}function t0(e,t,n){let r=$$(t),i=Q1(n?.center),a=k1(k1(O1(`Scale`),e),r);return a=A1(a,i),{kind:`Scale`,target:e,factor:r,center:i,structuralHash:a,freeParams:M1(e,r,i)}}function n0(e,t){let n=Q1(t?.normal),r=Q1(t?.at),i=k1(O1(`Mirror`),e);return i=A1(i,n),i=A1(i,r),{kind:`Mirror`,target:e,normal:n,at:r,structuralHash:i,freeParams:M1(e,n,r)}}function r0(e,t){let n=t1(t);return{kind:`Extrude`,profile:e,vector:n,structuralHash:k1(k1(O1(`Extrude`),e),n),freeParams:M1(e,n)}}function i0(e,t=[]){let n=[...t],r=C1(O1(`Profile`),e);r=R$(r,n.length);for(let e of n)r=C1(r,e);return{kind:`Profile`,outline:e,holes:n,structuralHash:r,freeParams:M1(...w1(e),...n.flatMap(e=>w1(e)))}}function a0(e,t,n){let r=n?.frenet??!1,i=k1(k1(O1(`Sweep`),e),t);return i=z$(i,r),{kind:`Sweep`,profile:e,spine:t,frenet:r,structuralHash:i,freeParams:M1(e,t)}}function o0(e,t){let n=n1(e),r=[...t],i=k1(O1(`Path`),n);return i=x1(i,r),{kind:`Path`,start:n,segments:r,structuralHash:i,freeParams:M1(n,...S1(r))}}function s0(e,t){let n=[...e],r=t?.ruled??!0,i=R$(O1(`Loft`),n.length);for(let e of n)i=k1(i,e);return i=z$(i,r),{kind:`Loft`,sections:n,ruled:r,structuralHash:i,freeParams:M1(...n)}}function c0(e,t=360,n){let r=$$(t),i=Q1(n?.axis),a=Q1(n?.at),o=k1(k1(O1(`Revolve`),e),r);return o=A1(o,i),o=A1(o,a),{kind:`Revolve`,profile:e,angle:r,axis:i,at:a,structuralHash:o,freeParams:M1(e,r,i,a)}}function l0(e){let t=[...e],n=R$(O1(`Compound`),t.length);for(let e of t)n=k1(n,e);return{kind:`Compound`,children:t,structuralHash:n,freeParams:M1(...t)}}function u0(e,t,n=!1){let r=t.map(e=>e.map(e=>[...e])),i=R$(z$(k1(O1(`Instance`),e),n),r.length);for(let e of r)for(let t of e.flat())i=I$(i,t);return{kind:`Instance`,source:e,placements:r,fuse:n,structuralHash:i,freeParams:M1(e)}}function d0(e){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:return`Solid`;case`Polygon`:return`Face`;case`Circle`:case`Line`:return`Edge`;case`Vertex`:return`Vertex`;case`Empty`:return e.output;case`Fuse`:case`Cut`:case`Intersect`:return d0(e.a);case`FuseAll`:return e.shapes[0]?d0(e.shapes[0]):`Solid`;case`CutAll`:return d0(e.base);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return d0(e.target);case`Extrude`:case`Revolve`:case`Loft`:case`Sweep`:return`Solid`;case`Profile`:return`Face`;case`Path`:return`Wire`;case`Compound`:return`Compound`;case`Instance`:return e.fuse?`Solid`:`Compound`}}function f0(e){let t=1/0,n=-1/0,r=1/0,i=-1/0;for(let[a,o]of e)t=Math.min(t,a),n=Math.max(n,a),r=Math.min(r,o),i=Math.max(i,o);let a=(t+n)/2,o=(r+i)/2,s=e.map(([e,t])=>[e-a,t-o]);return b1(s[0]??[0,0],s.slice(1).map(e=>g1(e)))}function p0(e,t=0,n=0){return b1([t-e,n],[_1([t+e,n],e),_1([t-e,n],e)])}function m0(e,t){let n=e/2,r=t/2;return i0(f0([[-n,-r],[n,-r],[n,r],[-n,r]]))}function h0(e){return i0(p0(e))}function g0(e){let t=e.overallWidth,n=e.overallDepth,r=e.flangeThickness,i=e.webThickness,a=(t-i)/2,o=(t+i)/2;return i0(f0([[0,0],[t,0],[t,r],[o,r],[o,n-r],[t,n-r],[t,n],[0,n],[0,n-r],[a,n-r],[a,r],[0,r]]))}function _0(e){let t=e.overallDepth,n=e.webThickness,r=e.bottomFlangeWidth,i=e.bottomFlangeThickness,a=e.topFlangeWidth,o=e.topFlangeThickness,s=Math.max(r,a)/2;return i0(f0([[s-r/2,0],[s+r/2,0],[s+r/2,i],[s+n/2,i],[s+n/2,t-o],[s+a/2,t-o],[s+a/2,t],[s-a/2,t],[s-a/2,t-o],[s-n/2,t-o],[s-n/2,i],[s-r/2,i]]))}function v0(e){let t=e.legThickness;return i0(f0([[0,0],[e.width,0],[e.width,t],[t,t],[t,e.depth],[0,e.depth]]))}function y0(e){let t=e.flangeWidth,n=e.depth,r=e.flangeThickness,i=e.webThickness;return i0(f0([[(t-i)/2,0],[(t+i)/2,0],[(t+i)/2,n-r],[t,n-r],[t,n],[0,n],[0,n-r],[(t-i)/2,n-r]]))}function b0(e){let t=e.flangeWidth,n=e.depth,r=e.flangeThickness,i=e.webThickness;return i0(f0([[0,0],[t,0],[t,r],[i,r],[i,n-r],[t,n-r],[t,n],[0,n]]))}function x0(e){let t=e.flangeWidth/2,n=e.depth/2,r=e.webThickness/2,i=e.flangeThickness;return i0(f0([[-t,-n],[r,-n],[r,n-i],[t,n-i],[t,n],[-r,n],[-r,-n+i],[-t,-n+i]]))}function S0(e){let t=e.width,n=e.depth,r=e.wallThickness,i=e.girth;return i0(f0([[0,0],[t,0],[t,i],[t-r,i],[t-r,r],[r,r],[r,n-r],[t-r,n-r],[t-r,n-i],[t,n-i],[t,n],[0,n]]))}function C0(e,t){let n=e;return i0(b1([-n,0],[y1([n,0],[n,t]),y1([-n,0],[n,t])]))}function w0(e){let t=e.bottomXDim/2,n=e.yDim/2,r=-e.topXDim/2+e.topXOffset,i=e.topXDim/2+e.topXOffset;return i0(b1([-t,-n],[g1([t,-n]),g1([i,n]),g1([r,n])]))}function T0(e){let t=e.xDim/2,n=e.yDim/2,r=e.wallThickness;return i0(f0([[-t,-n],[t,-n],[t,n],[-t,n]]),[f0([[-(t-r),-(n-r)],[t-r,-(n-r)],[t-r,n-r],[-(t-r),n-r]])])}function E0(e){return i0(p0(e.radius),[p0(e.radius-e.wallThickness)])}function D0(e){return i0(b1(e[0]??[0,0],e.slice(1).map(e=>g1(e))))}function O0(e,t){return i0(b1(e[0]??[0,0],e.slice(1).map(e=>g1(e))),t.map(e=>b1(e[0]??[0,0],e.slice(1).map(e=>g1(e)))))}function k0(e,t){let n=f1(e.x,t.env,`Box.x`);if(!n.ok)return n;let r=f1(e.y,t.env,`Box.y`);if(!r.ok)return r;let i=f1(e.z,t.env,`Box.z`);return i.ok?R(hj(n.value,r.value,i.value)):i}function A0(e,t){let n=f1(e.radius,t.env,`Sphere.radius`);return n.ok?R(_j(n.value)):n}function j0(e,t){let n=f1(e.radius,t.env,`Cylinder.radius`);if(!n.ok)return n;let r=f1(e.height,t.env,`Cylinder.height`);return r.ok?R(gj(n.value,r.value)):r}function M0(e,t){let n=f1(e.radius1,t.env,`Cone.radius1`);if(!n.ok)return n;let r=f1(e.radius2,t.env,`Cone.radius2`);if(!r.ok)return r;let i=f1(e.height,t.env,`Cone.height`);return i.ok?R(vj(n.value,r.value,i.value)):i}function N0(e,t){let n=f1(e.majorRadius,t.env,`Torus.majorRadius`);if(!n.ok)return n;let r=f1(e.minorRadius,t.env,`Torus.minorRadius`);return r.ok?R(yj(n.value,r.value)):r}function P0(e,t){let n=[];for(let r of e.points){let e=p1(r,t.env,`Polygon.point`);if(!e.ok)return e;n.push(e.value)}return Fj(n)}function F0(e,t){let n=f1(e.radius,t.env,`Circle.radius`);return n.ok?R(Sj(n.value)):n}function I0(e,t){let n=p1(e.from,t.env,`Line.from`);if(!n.ok)return n;let r=p1(e.to,t.env,`Line.to`);return r.ok?R(xj(n.value,r.value)):r}function L0(e,t){let n=p1(e.point,t.env,`Vertex.point`);return n.ok?R(Ij(n.value)):n}function R0(e){return z(vD(H.NULL_SHAPE_INPUT,`${e}: empty result has no kernel representation`))}function z0(e,t,n){let r=e.evalNode(t);return r.ok?FE(r.value)?R(r.value):z(hD(H.CSG_NOT_3D,`${n}: operand did not produce a 3D shape`)):r}function B0(e,t){return{unsafe:!0,fuzzyValue:e.tolerance??t.tolerance}}function V0(e,t){if(e.a.kind===`Empty`)return t.evalNode(e.b);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=z0(t,e.a,`Fuse.a`);if(!n.ok)return n;let r=z0(t,e.b,`Fuse.b`);return r.ok?DA(n.value,r.value,B0(e,t)):r}function H0(e,t){if(e.a.kind===`Empty`)return R0(`Cut`);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=z0(t,e.a,`Cut.a`);if(!n.ok)return n;let r=z0(t,e.b,`Cut.b`);return r.ok?OA(n.value,r.value,B0(e,t)):r}function U0(e,t){if(e.a.kind===`Empty`||e.b.kind===`Empty`)return R0(`Intersect`);let n=z0(t,e.a,`Intersect.a`);if(!n.ok)return n;let r=z0(t,e.b,`Intersect.b`);return r.ok?kA(n.value,r.value,B0(e,t)):r}function W0(e,t,n){let r=[];for(let i of t){let t=z0(e,i,n);if(!t.ok)return t;r.push(t.value)}return R(r)}function G0(e,t){let n=e.shapes.filter(e=>e.kind!==`Empty`);if(n.length===0)return R0(`FuseAll`);if(n.length===1&&n[0])return t.evalNode(n[0]);let r=W0(t,n,`FuseAll.operand`);return r.ok?jA(r.value,B0(e,t)):r}function K0(e,t){if(e.base.kind===`Empty`)return R0(`CutAll`);let n=e.tools.filter(e=>e.kind!==`Empty`);if(n.length===0)return t.evalNode(e.base);let r=z0(t,e.base,`CutAll.base`);if(!r.ok)return r;let i=W0(t,n,`CutAll.tool`);return i.ok?MA(r.value,i.value,B0(e,t)):i}function q0(e){return z(vD(H.NULL_SHAPE_INPUT,`${e}: cannot transform an Empty node`))}function J0(e,t,n,r){return e?p1(e,t,n):R(r)}function Y0(e,t){let n=F(),{handle:r,dispose:i}=n.composeTransform(t),a;try{a=LE(n.locate(e.wrapped,r))}finally{i()}return bA(e)&&wA(e,a),a}function X0(e,t){if(e.target.kind===`Empty`)return q0(`Translate`);let n=p1(e.vector,t.env,`Translate.vector`);if(!n.ok)return n;let r=t.evalNode(e.target);return r.ok?R(Y0(r.value,[{type:`translate`,x:n.value[0],y:n.value[1],z:n.value[2]}])):r}function Z0(e,t){if(e.target.kind===`Empty`)return q0(`Rotate`);let n=f1(e.angle,t.env,`Rotate.angle`);if(!n.ok)return n;let r=J0(e.axis,t.env,`Rotate.axis`,[0,0,1]);if(!r.ok)return r;let i=J0(e.at,t.env,`Rotate.at`,[0,0,0]);if(!i.ok)return i;let a=t.evalNode(e.target);return a.ok?R(Y0(a.value,[{type:`rotate`,angle:n.value,axis:r.value,center:i.value}])):a}function Q0(e,t){if(e.target.kind===`Empty`)return q0(`Scale`);let n=f1(e.factor,t.env,`Scale.factor`);if(!n.ok)return n;let r=J0(e.center,t.env,`Scale.center`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?R(oj(i.value,n.value,r.value)):i}function $0(e,t){if(e.target.kind===`Empty`)return q0(`Mirror`);let n=J0(e.normal,t.env,`Mirror.normal`,[1,0,0]);if(!n.ok)return n;let r=J0(e.at,t.env,`Mirror.at`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?R(aj(i.value,n.value,r.value)):i}function e2(e,t){let n=e.children.filter(e=>e.kind!==`Empty`);if(n.length===0)return z(vD(H.NULL_SHAPE_INPUT,`Compound: cannot materialize a compound with zero non-empty children`));let r=[];for(let e of n){let n=t.evalNode(e);if(!n.ok)return n;r.push(n.value)}return R(Lj(r))}function t2(){return z(vD(H.NULL_SHAPE_INPUT,`Empty: cannot materialize an Empty node directly — only valid as boolean/transform operand`))}function n2(e){return[[1,0,0,e[0]],[0,1,0,e[1]],[0,0,1,e[2]],[0,0,0,1]]}function r2(e){let t=e[0];return t!==void 0&&typeof t[0]==`number`}function i2(e,t,n){return{__instanced:!0,source:e,placements:t,grid:n,[Symbol.dispose](){e[Symbol.dispose]()}}}function a2(e){return typeof e==`object`&&!!e&&e.__instanced===!0}function o2(e,t){return i2(e,r2(t)?t.map(n2):t.map(e=>e.map(e=>[...e])))}function s2(e,t){let{cols:n,rows:r,pitchX:i,pitchY:a}=t;if(!Number.isInteger(n)||!Number.isInteger(r)||n<1||r<1)throw RangeError(`instanceGrid: cols and rows must be positive integers, got ${n}x${r}`);let o=[];for(let e=0;e<n;e++)for(let t=0;t<r;t++)o.push(n2([e*i,t*a,0]));return i2(e,o,{cols:n,rows:r,pitchX:i,pitchY:a})}function c2(e){return e.placements.length}function l2(e,t={}){let{source:n,placements:r,grid:i}=e;return r.length===0?z(W(`INSTANCE_EMPTY`,`materialize: instance has no placements`)):t.fuse?FE(n)?i?UF(n,[1,0,0],[0,1,0],i.cols,i.rows,i.pitchX,i.pitchY):u2(n,r,!0):z(W(`MATERIALIZE_NOT_3D`,`materialize({fuse:true}) requires a 3D source shape`)):u2(n,r,!1)}function u2(e,t,n){let r=[];for(let n of t){let t=dj(e,n);if(!t.ok){for(let e of r)e[Symbol.dispose]();return t}r.push(t.value)}let i=n?jA(r,{unsafe:!0}):R(tj(r));for(let e of r)(!i.ok||e!==i.value)&&e[Symbol.dispose]();return i}function d2(e,t){return{geometry:bM(e.source,t),instances:e.placements}}function f2(e,t){let n=t.evalNode(e.source);return n.ok?l2(o2(n.value,e.placements),{fuse:e.fuse}):n}function p2(e,t,n){let r=e.evalNode(t);if(!r.ok)return r;if(!jE(r.value))return z(hD(`CSG_NOT_FACE`,`${n}: node did not produce a Face`));let i=mO(r.value);return i.ok?_O(i.value)?R(i.value):z(hD(`CSG_NOT_FACE`,`${n}: face is not planar`)):z(hD(`CSG_NOT_FACE`,`${n}: ${i.error}`))}function m2(e,t){let n=p1(e.vector,t.env,`Extrude.vector`);if(!n.ok)return n;let r=p2(t,e.profile,`Extrude.profile`);return r.ok?Vq(r.value,n.value):r}function h2(e,t){let n=f1(e.angle,t.env,`Revolve.angle`);if(!n.ok)return n;if(n.value<=0)return z(W(`CSG_REVOLVE_ANGLE`,`Revolve.angle must be positive (degrees), got ${n.value}`));let r=Math.min(n.value,360),i=e.axis?p1(e.axis,t.env,`Revolve.axis`):R([0,0,1]);if(!i.ok)return i;let a=e.at?p1(e.at,t.env,`Revolve.at`):R([0,0,0]);if(!a.ok)return a;let o=p2(t,e.profile,`Revolve.profile`);return o.ok?Hq(o.value,a.value,i.value,r*Math.PI/180):o}function g2(e,t){try{var n=WT();if(e.sections.length<2)return z(W(`CSG_LOFT_SECTIONS`,`Loft requires at least 2 sections, got ${e.sections.length}`));let r=n.u(new iE),i=[];for(let[n,a]of e.sections.entries()){let e=p2(t,a,`Loft.sections[${n}]`);if(!e.ok)return e;let o=yk(e.value);r.register(o),i.push(o)}return qN(i,{ruled:e.ruled})}catch(e){n.e=e}finally{n.d()}}var _2=1e-9;function v2(e){return[e[0],e[1],0]}function y2(e){return z(W(`CSG_PATH_SEGMENT`,`contour segment: ${e}`))}function b2(e,t,n,r,i){let[a,o]=e,[s,c]=t,l=s-a,u=c-o,d=Math.hypot(l,u);if(d<_2)return y2(`Arc: coincident endpoints`);if(d>2*n+1e-6)return y2(`Arc: radius ${n} too small for chord ${d}`);let f=Math.sqrt(Math.max(0,n*n-d/2*(d/2))),p=l/d,m=u/d,h=i===r?1:-1,g=(a+s)/2+h*f*-m,_=(o+c)/2+h*f*p,v=Math.atan2(o-_,a-g),y=Math.atan2(c-_,s-g);if(i)for(;y>=v-_2;)y-=2*Math.PI;else for(;y<=v+_2;)y+=2*Math.PI;let b=(v+y)/2;return R([g+n*Math.cos(b),_+n*Math.sin(b)])}function x2(e,t,n,r,i,a){let o=!a,[s,c]=n;if(s<=0||c<=0)return y2(`EllipseArc: non-positive radius`);let l=Math.cos(r),u=Math.sin(r),d=(e[0]-t[0])/2,f=(e[1]-t[1])/2,p=l*d+u*f,m=-u*d+l*f,h=p*p/(s*s)+m*m/(c*c);if(h>1){let e=Math.sqrt(h);s*=e,c*=e}let g=s*s*c*c-s*s*m*m-c*c*p*p,_=s*s*m*m+c*c*p*p;if(_<_2)return y2(`EllipseArc: coincident endpoints`);let v=(i===o?-1:1)*Math.sqrt(Math.max(0,g/_)),y=v*(s*m/c),b=v*(-(c*p)/s),x=l*y-u*b+(e[0]+t[0])/2,S=u*y+l*b+(e[1]+t[1])/2,C=Math.atan2((m-b)/c,(p-y)/s),w=Math.atan2((-m-b)/c,(-p-y)/s)-C;!o&&w>0&&(w-=2*Math.PI),o&&w<0&&(w+=2*Math.PI);let ee=w>=0?C:C+w,te=w>=0?C+w:C;return R({center:[x,S],theta1:ee,theta2:te,rx:s,ry:c})}function S2(e,t,n){if(t.kind!==`EllipseArc`)return y2(`internal: not an ellipse segment`);let r=m1(t.to,n.env,`Path.EllipseArc.to`);if(!r.ok)return r;let i=m1(t.radii,n.env,`Path.EllipseArc.radii`);if(!i.ok)return i;let a=f1(t.rotation,n.env,`Path.EllipseArc.rotation`);if(!a.ok)return a;let o=a.value*Math.PI/180,s=x2(e,r.value,i.value,o,t.largeArc,t.clockwise);if(!s.ok)return s;let{center:c,theta1:l,theta2:u,rx:d,ry:f}=s.value,p,m;if(d>=f?(p=Bk(d,f,l,u,v2(c),[0,0,1]),m=o):(p=Bk(f,d,l-Math.PI/2,u-Math.PI/2,v2(c),[0,0,1]),m=o+Math.PI/2),!p.ok)return p;let h=p.value;if(Math.abs(m)>_2)try{var g=WT();let e=C2(g.u(h),m*180/Math.PI,c);if(!e.ok)return e;h=e.value}catch(e){g.e=e}finally{g.d()}if(t.clockwise)try{var _=WT();h=oM(_.u(h))}catch(e){_.e=e}finally{_.d()}return R(h)}function C2(e,t,n){let r=F(),{handle:i,dispose:a}=r.composeTransform([{type:`rotate`,angle:t,axis:[0,0,1],center:[n[0],n[1],0]}]);try{return R(LE(r.locate(e.wrapped,i)))}catch(e){return z(U(`CSG_PATH_ELLIPSE_ROTATE`,`Path: kernel cannot relocate ellipse-arc edges`,e,{operation:`evalPath`}))}finally{a()}}function w2(e,t){return m1(e.to,t.env,`Path.${e.kind}.to`)}function T2(e,t,n){switch(t.kind){case`Line`:{let r=w2(t,n);return r.ok?Math.hypot(r.value[0]-e[0],r.value[1]-e[1])<_2?y2(`Line: zero length`):R(Fk(v2(e),v2(r.value))):r}case`Arc`:{let r=w2(t,n);if(!r.ok)return r;let i=f1(t.radius,n.env,`Path.Arc.radius`);if(!i.ok)return i;let a=b2(e,r.value,i.value,t.largeArc,t.clockwise);return a.ok?R(zk(v2(e),v2(a.value),v2(r.value))):a}case`Bezier`:{let r=w2(t,n);if(!r.ok)return r;let i=[];for(let e of t.controls){let t=m1(e,n.env,`Path.Bezier.control`);if(!t.ok)return t;i.push(v2(t.value))}return Uk([v2(e),...i,v2(r.value)])}case`EllipseArc`:return S2(e,t,n)}}function E2(e,t,n,r,i,a){if(t.length===0)return z(W(`CSG_PATH_SEGMENT`,`${a}: at least one segment required`));let o=m1(e,n.env,`${a}.start`);if(!o.ok)return o;let s=[],c=o.value;for(let e of t){let t=T2(c,e,n);if(!t.ok)return t;r.register(t.value),s.push(t.value);let i=w2(e,n);if(!i.ok)return i;c=i.value}if(i&&Math.hypot(c[0]-o.value[0],c[1]-o.value[1])>_2){let e=Fk(v2(c),v2(o.value));r.register(e),s.push(e)}return Gk(s)}function D2(e,t){try{var n=WT();let r=n.u(new iE);return E2(e.start,e.segments,t,r,!1,`Path`)}catch(e){n.e=e}finally{n.d()}}function O2(e,t){try{var n=WT();let r=p2(t,e.profile,`Sweep.profile`);if(!r.ok)return r;let i=t.evalNode(e.spine);if(!i.ok)return i;let a=n.u(new iE),o;if(AE(i.value))o=i.value;else if(kE(i.value)){let e=Gk([i.value]);if(!e.ok)return e;a.register(e.value),o=e.value}else return z(hD(`CSG_SWEEP_SPINE`,`Sweep.spine: node did not produce a Wire or Edge`));let s=yk(r.value);a.register(s);let c=zN(s,o,{frenet:e.frenet});if(!c.ok)return c;if(Array.isArray(c.value)){for(let e of c.value)e[Symbol.dispose]();return z(hD(`CSG_SWEEP_SPINE`,`Sweep: unexpected shell-mode result`))}return R(c.value)}catch(e){n.e=e}finally{n.d()}}function k2(e,t){let n=pO(e);return n.ok?vO(n.value)?R(n.value):z(W(`CSG_PROFILE_CONTOUR`,`${t}: contour is not planar`)):z(W(`CSG_PROFILE_CONTOUR`,`${t}: ${n.error}`))}function A2(e,t){try{var n=WT();let r=n.u(new iE),i=(e,n)=>{let i=E2(e.start,e.segments,t,r,!0,n);return i.ok?(r.register(i.value),k2(i.value,n)):i},a=i(e.outline,`Profile.outline`);if(!a.ok)return a;let o=[];for(let[t,n]of e.holes.entries()){let e=i(n,`Profile.holes[${t}]`);if(!e.ok)return e;o.push(e.value)}return Mj(a.value,o.length>0?o:void 0)}catch(e){n.e=e}finally{n.d()}}function j2(e,t){switch(e.kind){case`Box`:return k0(e,t);case`Sphere`:return A0(e,t);case`Cylinder`:return j0(e,t);case`Cone`:return M0(e,t);case`Torus`:return N0(e,t);case`Polygon`:return P0(e,t);case`Circle`:return F0(e,t);case`Line`:return I0(e,t);case`Vertex`:return L0(e,t);case`Empty`:return t2();case`Fuse`:return V0(e,t);case`Cut`:return H0(e,t);case`Intersect`:return U0(e,t);case`FuseAll`:return G0(e,t);case`CutAll`:return K0(e,t);case`Translate`:return X0(e,t);case`Rotate`:return Z0(e,t);case`Scale`:return Q0(e,t);case`Mirror`:return $0(e,t);case`Compound`:return e2(e,t);case`Instance`:return f2(e,t);case`Extrude`:return m2(e,t);case`Revolve`:return h2(e,t);case`Loft`:return g2(e,t);case`Path`:return D2(e,t);case`Sweep`:return O2(e,t);case`Profile`:return A2(e,t)}}function M2(e,t){if(typeof t==`number`)return I$(z$(e,!1),t);let n=z$(e,!0);n=R$(n,t.length);for(let e of t)n=I$(n,e);return n}function N2(e,t){if(t.size===0)return O$();let n=h1(e,t),r=Object.keys(n).sort(),i=O$();for(let e of r){i=M$(i,e);let t=n[e];t!==void 0&&(i=M2(i,t))}return i}function P2(e,t,n,r){let i=N2(t,e.freeParams),a=r===void 0?`d`:I$(O$(),r).toString(16);return`${B$(e.structuralHash)}:${n}:${B$(i)}:${a}`}var F2=[1,0,0,0];function I2(e,t){let n=f1(e.angle,t,`evaluateMesh.peelRigid`);if(!n.ok)return null;let r=e.axis?p1(e.axis,t,`evaluateMesh.peelRigid`):R([0,0,1]);if(!r.ok)return null;let i=e.at?p1(e.at,t,`evaluateMesh.peelRigid`):R([0,0,0]);return i.ok?{angle:n.value,axis:r.value,center:i.value}:null}function L2(e,t){let n=e,r=F2,i=[0,0,0];for(;;)if(n.kind===`Translate`){let e=p1(n.vector,t,`evaluateMesh.peelRigid`);if(!e.ok)break;let a=LF(r,e.value);i=[i[0]+a[0],i[1]+a[1],i[2]+a[2]],n=n.target}else if(n.kind===`Rotate`){let e=I2(n,t);if(!e)break;let a=RF(e.axis,e.angle*Math.PI/180),o=BF(r,a),s=LF(r,e.center),c=LF(o,e.center);i=[i[0]+s[0]-c[0],i[1]+s[1]-c[1],i[2]+s[2]-c[2]],r=o,n=n.target}else break;return{inner:n,rot:r,trans:i}}function R2(e){return e[0]===1&&e[1]===0&&e[2]===0&&e[3]===0}function z2(e,t,n,r,i,a,o,s,c){for(let l=0;l<t.length;l+=3){let u=t[l]??0,d=t[l+1]??0,f=t[l+2]??0,p=2*(i*f-a*d),m=2*(a*u-r*f),h=2*(r*d-i*u);e[l]=u+n*p+(i*h-a*m)+o,e[l+1]=d+n*m+(a*p-r*h)+s,e[l+2]=f+n*h+(r*m-i*p)+c}}function B2(e,t,n){let[r,i,a]=n,o=R2(t);if(o&&r===0&&i===0&&a===0)return e;let s=e.vertices,c=new Float32Array(s.length);if(o){for(let e=0;e<s.length;e+=3)c[e]=(s[e]??0)+r,c[e+1]=(s[e+1]??0)+i,c[e+2]=(s[e+2]??0)+a;return{...e,vertices:c}}let[l,u,d,f]=t;z2(c,s,l,u,d,f,r,i,a);let p=e.normals,m=new Float32Array(p.length);return z2(m,p,l,u,d,f,0,0,0),{...e,vertices:c,normals:m}}function V2(e,t,n){let r=new Map,i=Math.min(t.length,n.length);for(let e=0;e<i;e++){let i=t[e],a=n[e];i!==void 0&&a!==void 0&&r.set(i,a)}return e.map(e=>({...e,faceId:r.get(e.faceId)??e.faceId}))}var H2=class{cache=new Map;refCounts=new Map;evaluating=!1;pendingKeys=[];kernelId;defaultTolerance;maxCacheEntries;maxMeshCacheEntries;meshCache=new Map;onStep;hits=0;misses=0;evictions=0;constructor(e={}){this.kernelId=e.kernel??NT()??`unregistered`,this.defaultTolerance=e.tolerance,e.onStep&&(this.onStep=e.onStep);let t=e.maxCacheEntries;if(t!==void 0&&(!Number.isInteger(t)||t<1))throw RangeError(`Evaluator: maxCacheEntries must be a positive integer, got ${String(t)}`);this.maxCacheEntries=t;let n=e.maxMeshCacheEntries;if(n!==void 0&&(!Number.isInteger(n)||n<1))throw RangeError(`Evaluator: maxMeshCacheEntries must be a positive integer, got ${String(n)}`);this.maxMeshCacheEntries=n}evaluate(e,t={}){if(this.maxCacheEntries!==void 0&&this.evaluating)throw Error(`Evaluator.evaluate() is not reentrant when maxCacheEntries is set — do not call it from an onStep callback.`);return PT(this.kernelId,()=>{this.evaluating=!0;let n=!1;try{let r=this.evaluateInner(e,t);return this.maxCacheEntries!==void 0&&r.ok&&this.trimCache(this.maxCacheEntries),n=r.ok,r}finally{!n&&this.maxCacheEntries!==void 0&&this.rollbackPending(),this.pendingKeys.length=0,this.evaluating=!1}})}evaluateMesh(e,t={},n={}){n.signal?.throwIfAborted();let r=n.cache??!0,i=ho(),a=n.tolerance??i.tolerance,o=n.angularTolerance??i.angularTolerance,s=`${P2(e,t,this.kernelId,this.defaultTolerance)}|${uM(a,o,n.skipNormals??!1,n.includeUVs??!1)}`;if(r){let r=this.meshCache.get(s);if(r!==void 0)return this.maxMeshCacheEntries!==void 0&&(this.meshCache.delete(s),this.meshCache.set(s,r)),R(r);let{inner:i,rot:a,trans:o}=L2(e,t);if(i!==e){let r=this.evaluateMesh(i,t,n);if(!r.ok)return r;let c=this.evaluate(i,t);if(!c.ok)return c;let l=WD(c.value).map(Wj),u=this.evaluate(e,t);if(!u.ok)return u;let d=WD(u.value).map(Wj),f=B2(r.value,a,o),p=V2(f.faceGroups,l,d),m=new Set(d);if(p.every(e=>m.has(e.faceId))){let e={...f,faceGroups:p};return this.meshCache.set(s,e),this.maxMeshCacheEntries!==void 0&&this.trimMeshCache(this.maxMeshCacheEntries),R(e)}}}let c=this.evaluate(e,t);if(!c.ok)return c;let l=PT(this.kernelId,()=>bM(c.value,n));return r&&(this.meshCache.set(s,l),this.maxMeshCacheEntries!==void 0&&this.trimMeshCache(this.maxMeshCacheEntries)),R(l)}evaluateInner(e,t){let n=P2(e,t,this.kernelId,this.defaultTolerance),r=this.cache.get(n);if(r!==void 0)return this.hits++,this.maxCacheEntries!==void 0&&(this.cache.delete(n),this.cache.set(n,r)),this.onStep?.({node:e,cacheKey:n,cacheHit:!0}),R(r);this.misses++;let i=j2(e,{env:t,tolerance:this.defaultTolerance,evalNode:e=>this.evaluateInner(e,t)});if(!i.ok)return i;let a=i.value;return this.refCounts.set(a,(this.refCounts.get(a)??0)+1),this.cache.set(n,a),this.maxCacheEntries!==void 0&&this.pendingKeys.push(n),this.onStep?.({node:e,cacheKey:n,cacheHit:!1}),i}releaseShape(e){let t=(this.refCounts.get(e)??1)-1;t<=0?(this.refCounts.delete(e),e[Symbol.dispose]()):this.refCounts.set(e,t)}trimCache(e){for(;this.cache.size>e;){let e=this.cache.keys().next();if(e.done)break;let t=e.value,n=this.cache.get(t);this.cache.delete(t),this.evictions++,n!==void 0&&this.releaseShape(n)}}trimMeshCache(e){for(;this.meshCache.size>e;){let e=this.meshCache.keys().next();if(e.done)break;this.meshCache.delete(e.value)}}rollbackPending(){for(let e of this.pendingKeys){let t=this.cache.get(e);t!==void 0&&(this.cache.delete(e),this.releaseShape(t))}}cacheStats(){return{hits:this.hits,misses:this.misses,entries:this.cache.size,evictions:this.evictions}}resetStats(){this.hits=0,this.misses=0,this.evictions=0}[Symbol.dispose](){for(let e of this.refCounts.keys())e[Symbol.dispose]();this.refCounts.clear(),this.cache.clear(),this.meshCache.clear()}};function U2(e,t){try{var n=WT();let r=t(n.u(new H2(e)));if(r instanceof Promise)throw Error(`withEvaluator() callback returned a Promise. Async code must construct an Evaluator directly and dispose it manually — borrowed shapes would otherwise be freed before the Promise resolves.`);return r}catch(e){n.e=e}finally{n.d()}}var W2=1;function G2(e){return{csgVersion:3,root:$2(e)}}function K2(e){switch(e.kind){case`NumLit`:return{kind:`NumLit`,value:e.value};case`Vec3Lit`:return{kind:`Vec3Lit`,value:[e.value[0],e.value[1],e.value[2]]};case`Vec2Lit`:return{kind:`Vec2Lit`,value:[e.value[0],e.value[1]]};case`Param`:return{kind:`Param`,name:e.name};case`BinOp`:return{kind:`BinOp`,op:e.op,a:K2(e.a),b:K2(e.b)};case`UnaryOp`:return{kind:`UnaryOp`,op:e.op,arg:K2(e.arg)};case`Component`:return{kind:`Component`,vec:K2(e.vec),index:e.index};case`BuildVec`:return{kind:`BuildVec`,dim:e.dim,components:e.components.map(K2)}}}function q2(e){switch(e.kind){case`Box`:return{kind:`Box`,x:K2(e.x),y:K2(e.y),z:K2(e.z)};case`Sphere`:return{kind:`Sphere`,radius:K2(e.radius)};case`Cylinder`:return{kind:`Cylinder`,radius:K2(e.radius),height:K2(e.height)};case`Cone`:return{kind:`Cone`,radius1:K2(e.radius1),radius2:K2(e.radius2),height:K2(e.height)};case`Torus`:return{kind:`Torus`,majorRadius:K2(e.majorRadius),minorRadius:K2(e.minorRadius)};case`Polygon`:return{kind:`Polygon`,points:e.points.map(K2)};case`Circle`:return{kind:`Circle`,radius:K2(e.radius)};case`Line`:return{kind:`Line`,from:K2(e.from),to:K2(e.to)};case`Vertex`:return{kind:`Vertex`,point:K2(e.point)};case`Empty`:return{kind:`Empty`,output:e.output};default:return}}function J2(e){switch(e.kind){case`Fuse`:case`Cut`:case`Intersect`:return{kind:e.kind,a:$2(e.a),b:$2(e.b),tolerance:e.tolerance};case`FuseAll`:return{kind:`FuseAll`,shapes:e.shapes.map($2),tolerance:e.tolerance};case`CutAll`:return{kind:`CutAll`,base:$2(e.base),tools:e.tools.map($2),tolerance:e.tolerance};default:return}}function Y2(e){return e?K2(e):void 0}function X2(e){switch(e.kind){case`Line`:return{kind:`Line`,to:K2(e.to)};case`Arc`:return{kind:`Arc`,to:K2(e.to),radius:K2(e.radius),largeArc:e.largeArc,clockwise:e.clockwise};case`Bezier`:return{kind:`Bezier`,controls:e.controls.map(K2),to:K2(e.to)};case`EllipseArc`:return{kind:`EllipseArc`,to:K2(e.to),radii:K2(e.radii),rotation:K2(e.rotation),largeArc:e.largeArc,clockwise:e.clockwise}}}function Z2(e){return{start:K2(e.start),segments:e.segments.map(X2)}}function Q2(e){switch(e.kind){case`Translate`:return{kind:`Translate`,target:$2(e.target),vector:K2(e.vector)};case`Rotate`:return{kind:`Rotate`,target:$2(e.target),angle:K2(e.angle),axis:Y2(e.axis),at:Y2(e.at)};case`Scale`:return{kind:`Scale`,target:$2(e.target),factor:K2(e.factor),center:Y2(e.center)};case`Mirror`:return{kind:`Mirror`,target:$2(e.target),normal:Y2(e.normal),at:Y2(e.at)};default:return}}function $2(e){return e.kind===`Extrude`?{kind:`Extrude`,profile:$2(e.profile),vector:K2(e.vector)}:e.kind===`Revolve`?{kind:`Revolve`,profile:$2(e.profile),angle:K2(e.angle),axis:Y2(e.axis),at:Y2(e.at)}:e.kind===`Loft`?{kind:`Loft`,sections:e.sections.map($2),ruled:e.ruled}:e.kind===`Path`?{kind:`Path`,start:K2(e.start),segments:e.segments.map(X2)}:e.kind===`Sweep`?{kind:`Sweep`,profile:$2(e.profile),spine:$2(e.spine),frenet:e.frenet}:e.kind===`Profile`?{kind:`Profile`,outline:Z2(e.outline),holes:e.holes.map(Z2)}:e.kind===`Compound`?{kind:`Compound`,children:e.children.map($2)}:e.kind===`Instance`?{kind:`Instance`,source:$2(e.source),placements:e.placements,fuse:e.fuse}:q2(e)??J2(e)??Q2(e)}function e4(e){return z(W(H.NULL_SHAPE_INPUT,`csg.fromJSON: ${e}`))}function t4(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function n4(e){return typeof e==`number`&&Number.isFinite(e)}function r4(e){return typeof e==`string`}function i4(e,t){if(!Array.isArray(e)||e.length!==3)return e4(`${t}: expected Vec3 array`);let[n,r,i]=e;return!n4(n)||!n4(r)||!n4(i)?e4(`${t}: Vec3 contains non-number`):R([n,r,i])}function a4(e,t){if(!Array.isArray(e)||e.length!==2)return e4(`${t}: expected Vec2 array`);let[n,r]=e;return!n4(n)||!n4(r)?e4(`${t}: Vec2 contains non-number`):R([n,r])}function o4(e){if(!t4(e))return e4(`input is not an object`);let t=e.csgVersion;if(typeof t!=`number`||!Number.isInteger(t)||t<W2||t>3)return e4(`unsupported csgVersion ${String(t)} (expected ${W2}..3)`);let n=e.root;return m4(n)}function s4(e){if(!t4(e))return e4(`expression: not an object`);let t=e.kind;switch(t){case`NumLit`:return n4(e.value)?R(U$(e.value)):e4(`NumLit.value`);case`Vec3Lit`:{let t=i4(e.value,`Vec3Lit.value`);return t.ok?R(W$(t.value)):t}case`Vec2Lit`:{let t=a4(e.value,`Vec2Lit.value`);return t.ok?R(G$(t.value)):t}case`Param`:return r4(e.name)?R(K$(e.name)):e4(`Param.name`);case`BinOp`:return c4(e);case`UnaryOp`:return l4(e);case`Component`:return u4(e);case`BuildVec`:return d4(e);default:return e4(`unknown expression kind: ${String(t)}`)}}function c4(e){let t=e.op;if(t!==`+`&&t!==`-`&&t!==`*`&&t!==`/`)return e4(`BinOp.op: ${String(t)}`);let n=s4(e.a);if(!n.ok)return n;let r=s4(e.b);return r.ok?R(q$(t,n.value,r.value)):r}function l4(e){let t=e.op;if(!r4(t)||![`neg`,`sin`,`cos`,`sqrt`,`abs`].includes(t))return e4(`UnaryOp.op: ${String(t)}`);let n=s4(e.arg);return n.ok?R(J$(t,n.value)):n}function u4(e){let t=e.index;if(t!==0&&t!==1&&t!==2)return e4(`Component.index: ${String(t)}`);let n=s4(e.vec);return n.ok?R(Y$(n.value,t)):n}function d4(e){let t=e.dim;if(t!==2&&t!==3)return e4(`BuildVec.dim: ${String(t)}`);let n=e.components;if(!Array.isArray(n))return e4(`BuildVec.components: not array`);if(n.length!==t)return e4(`BuildVec.components: expected ${t} components, got ${n.length}`);let r=[];for(let e of n){let t=s4(e);if(!t.ok)return t;r.push(t.value)}return R(X$(t,r))}function f4(e,t){if(!Array.isArray(e))return e4(`${t}: not array`);let n=[];for(let t of e){let e=m4(t);if(!e.ok)return e;n.push(e.value)}return R(n)}function p4(e){let t=e.tolerance;return t==null?R(void 0):n4(t)?R(t):e4(`tolerance: not a finite number`)}function m4(e){if(!t4(e))return e4(`node: not an object`);let t=e.kind;switch(t){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:return g4(t,e);case`Fuse`:case`Cut`:case`Intersect`:return w4(t,e);case`FuseAll`:case`CutAll`:return T4(t,e);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return E4(t,e);case`Compound`:return V4(e);case`Instance`:return U4(e);case`Extrude`:return M4(e);case`Revolve`:return N4(e);case`Loft`:return P4(e);case`Path`:return B4(e);case`Sweep`:return z4(e);case`Profile`:return R4(e);default:return e4(`unknown node kind: ${String(t)}`)}}function h4(e,t,n){let r=s4(e[t]);return r.ok?R(n(r.value)):r}function g4(e,t){switch(e){case`Box`:return _4(t);case`Sphere`:return h4(t,`radius`,P1);case`Cylinder`:return v4(t);case`Cone`:return y4(t);case`Torus`:return b4(t);case`Polygon`:return x4(t);case`Circle`:return h4(t,`radius`,z1);case`Line`:return S4(t);case`Vertex`:return h4(t,`point`,V1);case`Empty`:return C4(t)}return e4(`unhandled primitive: ${e}`)}function _4(e){let t=s4(e.x);if(!t.ok)return t;let n=s4(e.y);if(!n.ok)return n;let r=s4(e.z);return r.ok?R(N1(t.value,n.value,r.value)):r}function v4(e){let t=s4(e.radius);if(!t.ok)return t;let n=s4(e.height);return n.ok?R(F1(t.value,n.value)):n}function y4(e){let t=s4(e.radius1);if(!t.ok)return t;let n=s4(e.radius2);if(!n.ok)return n;let r=s4(e.height);return r.ok?R(I1(t.value,n.value,r.value)):r}function b4(e){let t=s4(e.majorRadius);if(!t.ok)return t;let n=s4(e.minorRadius);return n.ok?R(L1(t.value,n.value)):n}function x4(e){let t=e.points;if(!Array.isArray(t))return e4(`Polygon.points: not array`);let n=[];for(let e of t){let t=s4(e);if(!t.ok)return t;n.push(t.value)}return R(R1(n))}function S4(e){let t=s4(e.from);if(!t.ok)return t;let n=s4(e.to);return n.ok?R(B1(t.value,n.value)):n}function C4(e){let t=e.output;switch(t){case`Solid`:return R(U1());case`Face`:return R(W1());case`Wire`:return R(G1());default:return e4(`Empty.output: ${String(t)}`)}}function w4(e,t){let n=m4(t.a);if(!n.ok)return n;let r=m4(t.b);if(!r.ok)return r;let i=p4(t);if(!i.ok)return i;switch(e){case`Fuse`:return R(q1(n.value,r.value,i.value));case`Cut`:return R(J1(n.value,r.value,i.value));case`Intersect`:return R(Y1(n.value,r.value,i.value))}}function T4(e,t){let n=p4(t);if(!n.ok)return n;if(e===`FuseAll`){let e=f4(t.shapes,`FuseAll.shapes`);return e.ok?R(X1(e.value,n.value)):e}let r=m4(t.base);if(!r.ok)return r;let i=f4(t.tools,`CutAll.tools`);return i.ok?R(Z1(r.value,i.value,n.value)):i}function E4(e,t){let n=m4(t.target);if(!n.ok)return n;switch(e){case`Translate`:return D4(t,n.value);case`Rotate`:return k4(t,n.value);case`Scale`:return A4(t,n.value);case`Mirror`:return j4(t,n.value)}}function D4(e,t){let n=s4(e.vector);return n.ok?R($1(t,n.value)):n}function O4(e,t){if(e[t]===void 0)return R(void 0);let n=s4(e[t]);return n.ok?R(n.value):n}function k4(e,t){let n=s4(e.angle);if(!n.ok)return n;let r=O4(e,`axis`);if(!r.ok)return r;let i=O4(e,`at`);return i.ok?R(e0(t,n.value,{axis:r.value,at:i.value})):i}function A4(e,t){let n=s4(e.factor);if(!n.ok)return n;let r=O4(e,`center`);return r.ok?R(t0(t,n.value,{center:r.value})):r}function j4(e,t){let n=O4(e,`normal`);if(!n.ok)return n;let r=O4(e,`at`);return r.ok?R(n0(t,{normal:n.value,at:r.value})):r}function M4(e){let t=m4(e.profile);if(!t.ok)return t;let n=s4(e.vector);return n.ok?R(r0(t.value,n.value)):n}function N4(e){let t=m4(e.profile);if(!t.ok)return t;let n=s4(e.angle);if(!n.ok)return n;let r=O4(e,`axis`);if(!r.ok)return r;let i=O4(e,`at`);return i.ok?R(c0(t.value,n.value,{axis:r.value,at:i.value})):i}function P4(e){let t=f4(e.sections,`Loft.sections`);if(!t.ok)return t;let n=e.ruled;return n!==void 0&&typeof n!=`boolean`?e4(`Loft.ruled: not a boolean`):R(s0(t.value,{ruled:n}))}function F4(e,t){let n=e[t];return n===void 0?R(!1):typeof n==`boolean`?R(n):e4(`${t}: not a boolean`)}function I4(e){if(!t4(e))return e4(`segment: not an object`);let t=s4(e.to);if(!t.ok)return t;let n=e.kind;switch(n){case`Line`:return R(g1(t.value));case`Arc`:{let n=s4(e.radius);if(!n.ok)return n;let r=F4(e,`largeArc`);if(!r.ok)return r;let i=F4(e,`clockwise`);return i.ok?R(_1(t.value,n.value,{largeArc:r.value,clockwise:i.value})):i}case`Bezier`:{let n=e.controls;if(!Array.isArray(n))return e4(`Bezier.controls: not array`);let r=[];for(let e of n){let t=s4(e);if(!t.ok)return t;r.push(t.value)}return R(v1(r,t.value))}case`EllipseArc`:{let n=s4(e.radii);if(!n.ok)return n;let r=s4(e.rotation);if(!r.ok)return r;let i=F4(e,`largeArc`);if(!i.ok)return i;let a=F4(e,`clockwise`);return a.ok?R(y1(t.value,n.value,{rotation:r.value,largeArc:i.value,clockwise:a.value})):a}default:return e4(`unknown segment kind: ${String(n)}`)}}function L4(e,t){if(!t4(e))return e4(`${t}: not an object`);let n=s4(e.start);if(!n.ok)return n;let r=e.segments;if(!Array.isArray(r))return e4(`${t}.segments: not array`);let i=[];for(let e of r){let t=I4(e);if(!t.ok)return t;i.push(t.value)}return R(b1(n.value,i))}function R4(e){let t=L4(e.outline,`Profile.outline`);if(!t.ok)return t;let n=e.holes;if(n!==void 0&&!Array.isArray(n))return e4(`Profile.holes: not array`);let r=[];for(let[e,t]of(Array.isArray(n)?n:[]).entries()){let n=L4(t,`Profile.holes[${e}]`);if(!n.ok)return n;r.push(n.value)}return R(i0(t.value,r))}function z4(e){let t=m4(e.profile);if(!t.ok)return t;let n=m4(e.spine);if(!n.ok)return n;let r=F4(e,`frenet`);return r.ok?R(a0(t.value,n.value,{frenet:r.value})):r}function B4(e){let t=s4(e.start);if(!t.ok)return t;let n=e.segments;if(!Array.isArray(n))return e4(`Path.segments: not array`);let r=[];for(let e of n){let t=I4(e);if(!t.ok)return t;r.push(t.value)}return R(o0(t.value,r))}function V4(e){let t=f4(e.children,`Compound.children`);return t.ok?R(l0(t.value)):t}function H4(e){return Array.isArray(e)&&e.length===4&&e.every(e=>Array.isArray(e)&&e.length===4&&e.every(n4))}function U4(e){let t=m4(e.source);if(!t.ok)return t;let n=e.placements;return!Array.isArray(n)||!n.every(H4)?e4(`Instance.placements must be an array of 4x4 number matrices`):R(u0(t.value,n,e.fuse===!0))}function W4(e){return q4(e)}function G4(e){switch(e.kind){case`NumLit`:case`Vec3Lit`:case`Vec2Lit`:case`Param`:return e;case`BinOp`:{let t=G4(e.a),n=G4(e.b);if(t.kind===`NumLit`&&n.kind===`NumLit`)switch(e.op){case`+`:return U$(t.value+n.value);case`-`:return U$(t.value-n.value);case`*`:return U$(t.value*n.value);case`/`:return U$(t.value/n.value)}return t!==e.a||n!==e.b?q$(e.op,t,n):e}case`UnaryOp`:{let t=G4(e.arg);if(t.kind===`NumLit`){let n=t.value;switch(e.op){case`neg`:return U$(-n);case`sin`:return U$(Math.sin(n));case`cos`:return U$(Math.cos(n));case`sqrt`:return U$(Math.sqrt(n));case`abs`:return U$(Math.abs(n))}}return t===e.arg?e:J$(e.op,t)}case`Component`:{let t=G4(e.vec);return t.kind===`Vec3Lit`||t.kind===`Vec2Lit`&&(e.index===0||e.index===1)?U$(t.value[e.index]):t===e.vec?e:Y$(t,e.index)}case`BuildVec`:{let t=e.components.map(G4);return K4(e.dim,t)||(t.some((t,n)=>t!==e.components[n])?X$(e.dim,t):e)}}}function K4(e,t){if(t.length!==e)return;let n=[];for(let e of t){if(e.kind!==`NumLit`)return;n.push(e.value)}return e===2?G$([n[0],n[1]]):W$([n[0],n[1],n[2]])}function q4(e){switch(e.kind){case`Box`:return N1(G4(e.x),G4(e.y),G4(e.z));case`Sphere`:return P1(G4(e.radius));case`Cylinder`:return F1(G4(e.radius),G4(e.height));case`Cone`:return I1(G4(e.radius1),G4(e.radius2),G4(e.height));case`Torus`:return L1(G4(e.majorRadius),G4(e.minorRadius));case`Polygon`:return R1(e.points.map(G4));case`Circle`:return z1(G4(e.radius));case`Line`:return B1(G4(e.from),G4(e.to));case`Vertex`:return V1(G4(e.point));case`Empty`:return e;case`Fuse`:return Y4(e.a,e.b,e.tolerance);case`Cut`:return X4(e.a,e.b,e.tolerance);case`Intersect`:return Z4(e.a,e.b,e.tolerance);case`FuseAll`:return Q4(e.shapes,e.tolerance);case`CutAll`:return $4(e.base,e.tools,e.tolerance);case`Translate`:return e3(e.target,e.vector);case`Rotate`:return e0(q4(e.target),G4(e.angle),{axis:e.axis?G4(e.axis):void 0,at:e.at?G4(e.at):void 0});case`Scale`:return t0(q4(e.target),G4(e.factor),{center:e.center?G4(e.center):void 0});case`Mirror`:return n0(q4(e.target),{normal:e.normal?G4(e.normal):void 0,at:e.at?G4(e.at):void 0});case`Compound`:return l0(e.children.map(q4).filter(e=>e.kind!==`Empty`));case`Instance`:return u0(q4(e.source),e.placements,e.fuse);case`Extrude`:case`Revolve`:case`Loft`:case`Sweep`:case`Profile`:case`Path`:return J4(e)}}function J4(e){switch(e.kind){case`Extrude`:return r0(q4(e.profile),G4(e.vector));case`Revolve`:return c0(q4(e.profile),G4(e.angle),{axis:e.axis?G4(e.axis):void 0,at:e.at?G4(e.at):void 0});case`Loft`:return s0(e.sections.map(q4),{ruled:e.ruled});case`Sweep`:return a0(q4(e.profile),q4(e.spine),{frenet:e.frenet});case`Profile`:return i0(T1(e.outline,G4),e.holes.map(e=>T1(e,G4)));case`Path`:return o0(G4(e.start),e.segments.map(e=>E1(e,G4)))}}function Y4(e,t,n){let r=q4(e),i=q4(t);return r.kind===`Empty`?i:i.kind===`Empty`?r:q1(r,i,n)}function X4(e,t,n){let r=q4(e),i=q4(t);return i.kind===`Empty`||r.kind===`Empty`?r:J1(r,i,n)}function Z4(e,t,n){let r=q4(e),i=q4(t);return r.kind===`Empty`?r:i.kind===`Empty`?i:Y1(r,i,n)}function Q4(e,t){let n=e.map(q4).filter(e=>e.kind!==`Empty`);return n.length===0?U1():n.length===1?n[0]:X1(n,t)}function $4(e,t,n){let r=q4(e);if(r.kind===`Empty`)return r;let i=t.map(q4).filter(e=>e.kind!==`Empty`);return i.length===0?r:Z1(r,i,n)}function e3(e,t){let n=q4(e),r=G4(t);if(r.kind!==`Vec3Lit`)return $1(n,r);let[i,a,o]=r.value;if(i===0&&a===0&&o===0)return n;if(n.kind===`Translate`){let e=G4(n.vector);if(e.kind===`Vec3Lit`)return $1(n.target,[e.value[0]+i,e.value[1]+a,e.value[2]+o])}return $1(n,r)}function t3(e,t,n){return n3(e,t,n)}function n3(e,t,n){return t(e)?n:r3(e,t,n)}function r3(e,t,n){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:case`Path`:case`Profile`:return e;case`Fuse`:return q1(n3(e.a,t,n),n3(e.b,t,n),e.tolerance);case`Cut`:return J1(n3(e.a,t,n),n3(e.b,t,n),e.tolerance);case`Intersect`:return Y1(n3(e.a,t,n),n3(e.b,t,n),e.tolerance);case`FuseAll`:return X1(e.shapes.map(e=>n3(e,t,n)),e.tolerance);case`CutAll`:return Z1(n3(e.base,t,n),e.tools.map(e=>n3(e,t,n)),e.tolerance);case`Translate`:return $1(n3(e.target,t,n),e.vector);case`Rotate`:return e0(n3(e.target,t,n),e.angle,{axis:e.axis,at:e.at});case`Scale`:return t0(n3(e.target,t,n),e.factor,{center:e.center});case`Mirror`:return n0(n3(e.target,t,n),{normal:e.normal,at:e.at});case`Compound`:return l0(e.children.map(e=>n3(e,t,n)));case`Instance`:return u0(n3(e.source,t,n),e.placements,e.fuse);case`Extrude`:return r0(n3(e.profile,t,n),e.vector);case`Revolve`:return c0(n3(e.profile,t,n),e.angle,{axis:e.axis,at:e.at});case`Loft`:return s0(e.sections.map(e=>n3(e,t,n)),{ruled:e.ruled});case`Sweep`:return a0(n3(e.profile,t,n),n3(e.spine,t,n),{frenet:e.frenet})}}function i3(e,t){t(e);for(let n of a3(e))i3(n,t)}function a3(e){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:case`Path`:case`Profile`:return[];case`Fuse`:case`Cut`:case`Intersect`:return[e.a,e.b];case`FuseAll`:return e.shapes;case`CutAll`:return[e.base,...e.tools];case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return[e.target];case`Compound`:return e.children;case`Instance`:return[e.source];case`Extrude`:case`Revolve`:return[e.profile];case`Loft`:return e.sections;case`Sweep`:return[e.profile,e.spine]}}function o3(e){let t=0;return i3(e,()=>{t++}),t}var s3=1e-6;function c3(e){return[e[0]??0,e[1]??0]}function l3(e,t){return Math.hypot(e[0]-t[0],e[1]-t[1])<s3}function u3(e){return z(W(`BLUEPRINT_CONTOUR`,`blueprintToContour: ${e}`))}function d3(e){return c3(e.value((e.firstParameter+e.lastParameter)/2))}function f3(e,t,n){let[r,i]=e,[a,o]=t,[s,c]=n,l=2*(r*(o-c)+a*(c-i)+s*(i-o));if(Math.abs(l)<1e-12)return u3(`arc: collinear sample points`);let u=r*r+i*i,d=a*a+o*o,f=s*s+c*c,p=(u*(o-c)+d*(c-i)+f*(i-o))/l,m=(u*(s-a)+d*(r-s)+f*(a-r))/l,h=Math.hypot(r-p,i-m),g=(e,t)=>e[0]*t[1]-e[1]*t[0],_=g([a-r,o-i],[s-a,c-o])<0,v=[s-r,c-i];return R(_1(n,h,{largeArc:g(v,[a-r,o-i])*g(v,[p-r,m-i])>0,clockwise:_}))}function p3(e,t){let n=Math.cos(t),r=Math.sin(t);return[n*e[0]+r*e[1],-r*e[0]+n*e[1]]}function m3(e,t,n,r){let{a:i,b:a}=r,o=r.phi,s=p3(e,o),c=p3(t,o),l=p3(n,o),u=(s[0]-c[0])/2,d=(s[1]-c[1])/2,f=u*u/(i*i)+d*d/(a*a);if(f>1){let e=Math.sqrt(f);i*=e,a*=e}let p=i*i*a*a-i*i*d*d-a*a*u*u,m=i*i*d*d+a*a*u*u;if(m<1e-12)return u3(`ellipse: coincident endpoints`);let h=Math.sqrt(Math.max(0,p/m)),g=(s[0]+c[0])/2,_=(s[1]+c[1])/2,v=[[g+h*i*d/a,_-h*a*u/i],[g-h*i*d/a,_+h*a*u/i]],y=e=>{let t=(l[0]-e[0])/i,n=(l[1]-e[1])/a;return Math.abs(t*t+n*n-1)},b=y(v[0])<=y(v[1])?v[0]:v[1],x=e=>Math.atan2((e[1]-b[1])/a,(e[0]-b[0])/i),S=2*Math.PI,C=x(s),w=((x(l)-C)%S+S)%S,ee=((x(c)-C)%S+S)%S,te=w<ee,ne=te?ee:S-ee;return R(y1(t,[r.a,r.b],{rotation:o*180/Math.PI,largeArc:ne>Math.PI,clockwise:!te}))}function h3(e,t){let n=MT(),r=c3(e.firstPoint);if(e.geomType===`CIRCLE`){let i=n.getCurve2dCircleData(e.wrapped);if(!i)return u3(`circle: kernel returned no circle data`);let a=[2*i.cx-r[0],2*i.cy-r[1]],o=!i.isDirect;return t.push(_1(a,i.radius,{clockwise:o}),_1(r,i.radius,{clockwise:o})),R(r)}let i=n.getCurve2dEllipseData(e.wrapped);if(!i)return u3(`ellipse: kernel returned no ellipse data`);let a=c3(e.boundingBox.center),o=[2*a[0]-r[0],2*a[1]-r[1]],s=!i.isDirect,c=i.xAxisAngle*180/Math.PI,l=[i.majorRadius,i.minorRadius];return t.push(y1(o,l,{rotation:c,clockwise:s}),y1(r,l,{rotation:c,clockwise:s})),R(r)}function g3(e,t,n,r){let i=e.geomType;if(i===`LINE`)return R(g1(n));if(i===`CIRCLE`)return f3(t,d3(e),n);if(i===`BEZIER_CURVE`){let t=MT().getCurve2dBezierPoles(e.wrapped);if(!t)return u3(`bezier: kernel returned no poles`);let i=t.map(c3);r&&i.reverse();let a=i.slice(1,-1);return a.length===0?R(g1(n)):a.length>2?u3(`bezier: unsupported degree ${i.length-1}`):R(v1(a,n))}if(i===`ELLIPSE`){let r=MT().getCurve2dEllipseData(e.wrapped);return r?m3(t,n,d3(e),{a:r.majorRadius,b:r.minorRadius,phi:r.xAxisAngle}):u3(`ellipse: kernel returned no ellipse data`)}return u3(`unsupported curve type: ${i}`)}var _3=new Set([`LINE`,`CIRCLE`,`BEZIER_CURVE`,`ELLIPSE`]);function v3(e,t){let n=t?.tolerance??1e-4,r=e.curves[0];if(!r)return u3(`blueprint has no curves`);let i=c3(r.firstPoint),a=i,o=[];for(let t of e.curves){let e=_3.has(t.geomType)?[t]:tR([t],{tolerance:n,continuity:`C0`,maxSegments:300}),r=e[0]!==t;try{let t=e[0];e.length>1&&t!==void 0&&!l3(c3(t.firstPoint),a)&&!l3(c3(t.lastPoint),a)&&e.reverse();for(let t of e){let e=y3(t,a,o);if(!e.ok)return e;a=e.value}}finally{if(r)for(let t of e)t.delete()}}return R(b1(i,o))}function y3(e,t,n){let r=c3(e.firstPoint),i=c3(e.lastPoint);if(l3(r,i)&&(e.geomType===`CIRCLE`||e.geomType===`ELLIPSE`))return h3(e,n);let a,o;if(l3(r,t))a=i,o=!1;else if(l3(i,t))a=r,o=!0;else return u3(`curve is not chained to the current point (${e.geomType})`);let s=g3(e,t,a,o);return s.ok?(n.push(s.value),R(a)):s}function b3(e){return F().createVector3d(e[0],e[1],e[2])}function x3(e){return F().createPoint3d(e[0],e[1],e[2])}function S3(e){return F().createDirection3d(e[0],e[1],e[2])}function C3(e){return[e.X(),e.Y(),e.Z()]}function w3(e){return[e.X(),e.Y(),e.Z()]}function T3(e){return[e.X(),e.Y(),e.Z()]}function E3(e,t){let n=b3(e);try{return t(n)}finally{n.delete()}}function D3(e,t){let n=x3(e);try{return t(n)}finally{n.delete()}}function O3(e,t){let n=S3(e);try{return t(n)}finally{n.delete()}}var k3=.299,A3=.587,j3=.114;function M3(e,t={}){if(e.length<2)return z(W(H.SURFACE_GRID_TOO_SMALL,`surfaceFromGrid: need at least 2 rows, got ${e.length}`));let n=e.length,r=e[0]?.length??0;if(r<2)return z(W(H.SURFACE_GRID_TOO_SMALL,`surfaceFromGrid: need at least 2 columns, got ${r}`));for(let t=0;t<n;t++){let n=e[t];if(!n||n.length!==r)return z(W(H.SURFACE_GRID_JAGGED,`surfaceFromGrid: row ${t} has ${n?.length??0} columns, expected ${r}`))}let{width:i=r-1,depth:a=n-1,scaleZ:o=1}=t,s=i/(r-1),c=a/(n-1);try{return N3(e,n,r,s,c,o)}catch{}try{return P3(e,n,r,s,c,o)}catch(e){let t=e instanceof Error?e.message:String(e);return z(U(H.SURFACE_FAILED,`surfaceFromGrid failed: ${t}`,e))}}function N3(e,t,n,r,i,a){let o=[];for(let s=0;s<t;s++)for(let t=0;t<n;t++){let n=e[s],c=(n?n[t]??0:0)*a;o.push([t*r,s*i,c])}let s=I(F().bsplineSurface(o,t,n));return jE(s)?R(s):(L(s),z(U(H.SURFACE_FAILED,`B-spline surface did not produce a face`)))}function P3(e,t,n,r,i,a){let o=[];for(let s=0;s<t;s++)for(let t=0;t<n;t++){let n=e[s],c=(n?n[t]??0:0)*a;o.push([t*r,s*i,c])}let s=I(F().triangulatedSurface(o,t,n));return jE(s)||ME(s)?R(s):(L(s),z(U(H.SURFACE_FAILED,`surfaceFromGrid: unexpected shape type from sewing`)))}async function F3(e,t={}){let n=t.channel??`luminance`,r=Math.max(1,Math.round(t.downsample??1));if(typeof createImageBitmap!=`function`)return z(yD(H.SURFACE_FAILED,`surfaceFromImage requires createImageBitmap (not available in this environment)`));let i;try{i=await createImageBitmap(e)}catch(e){return z(yD(H.SURFACE_FAILED,`surfaceFromImage: failed to decode image — ${e instanceof Error?e.message:String(e)}`))}let a=i.width,o=i.height;if(a<2||o<2)return i.close(),z(W(H.SURFACE_GRID_TOO_SMALL,`surfaceFromImage: image too small (${a}x${o}), need at least 2x2`));if(typeof OffscreenCanvas!=`function`)return i.close(),z(yD(H.SURFACE_FAILED,`surfaceFromImage requires OffscreenCanvas (not available in this environment)`));let s=new OffscreenCanvas(a,o).getContext(`2d`);if(!s)return i.close(),z(yD(H.SURFACE_FAILED,`surfaceFromImage: could not get 2D canvas context`));s.drawImage(i,0,0),i.close();let c=s.getImageData(0,0,a,o).data,l=[];for(let e=0;e<o;e+=r){let t=[];for(let i=0;i<a;i+=r){let r=(e*a+i)*4,o=c[r]??0,s=c[r+1]??0,l=c[r+2]??0,u;switch(n){case`r`:u=o/255;break;case`g`:u=s/255;break;case`b`:u=l/255;break;default:u=(k3*o+A3*s+j3*l)/255}t.push(u)}l.push(t)}let u={};return t.width!==void 0&&(u.width=t.width),t.depth!==void 0&&(u.depth=t.depth),t.scaleZ!==void 0&&(u.scaleZ=t.scaleZ),M3(l,u)}function I3(e,t){return F().isNull(e.wrapped)?z(W(H.NULL_SHAPE_INPUT,`${t} is a null shape`)):R(void 0)}function L3(e,t={}){if(e.length===0)return z(W(H.HULL_EMPTY_INPUT,`hull: at least one shape is required`,void 0,void 0,`Provide one or more shapes to compute a convex hull`));for(let[t,n]of e.entries()){let e=I3(n,`hull: shapes[${t}]`);if(B(e))return e}let n=t.tolerance??.1;try{let t=F(),r=e.map(e=>e.wrapped),i=I(t.hull(r,n));return NE(i)?R(i):(L(i),z(U(H.HULL_NOT_3D,`Hull result is not a solid; input may be degenerate`)))}catch(e){let t=e instanceof Error?e.message:String(e);return t.includes(`coplanar`)||t.includes(`fewer than`)||t.includes(`degenerate`)?z(U(H.HULL_DEGENERATE,`Hull degenerate: ${t}`,e)):z(U(H.HULL_FAILED,`Hull operation failed: ${t}`,e))}}function R3(e){if(e.length<4)return z(W(H.HULL_EMPTY_INPUT,`convexHull: at least 4 points required, got ${e.length}`,void 0,void 0,`Provide 4 or more non-coplanar 3D points`));try{let t=F(),n=e.map(e=>({x:e[0],y:e[1],z:e[2]})),r=I(t.hullFromPoints(n,.1));return NE(r)?R(r):(L(r),z(U(H.HULL_NOT_3D,`convexHull result is not a solid; points may be coplanar`)))}catch(e){let t=e instanceof Error?e.message:String(e);return t.includes(`coplanar`)||t.includes(`fewer than`)||t.includes(`degenerate`)?z(U(H.HULL_DEGENERATE,`convexHull degenerate: ${t}`,e)):z(U(H.HULL_FAILED,`convexHull failed: ${t}`,e))}}function z3(e){let n=WD(e);if(n.length!==1)return null;let r=t(n,0);if(aO(r)!==`sphere`)return null;let i=F().area(r.wrapped);return Math.sqrt(i/(4*Math.PI))}function B3(e,t,n){try{let r=I(F().offset(e.wrapped,t,n));return FE(r)?R(r):(L(r),z(hD(H.MINKOWSKI_NOT_3D,`Minkowski sphere offset did not produce a 3D shape`)))}catch(e){let t=e instanceof Error?e.message:String(e);return z(U(H.MINKOWSKI_FAILED,`Minkowski sphere offset failed: ${t}`,e,{operation:`minkowski`,fastPath:`sphere`}))}}function V3(e,t,n){let r=F();try{let i=KD(e),a=KD(t);if(i.length===0||a.length===0)return z(U(H.MINKOWSKI_FAILED,`Minkowski sum: one or both shapes have no vertices`,void 0,{operation:`minkowski`}));let o=[];for(let e of i){let[t,n,i]=r.vertexPosition(e.wrapped);for(let e of a){let[a,s,c]=r.vertexPosition(e.wrapped);o.push({x:t+a,y:n+s,z:i+c})}}let s=I(r.hullFromPoints(o,n));return FE(s)?R(s):(L(s),z(hD(H.MINKOWSKI_NOT_3D,`Minkowski hull did not produce a 3D shape`)))}catch(e){let t=e instanceof Error?e.message:String(e);return z(U(H.MINKOWSKI_FAILED,`Minkowski general path failed: ${t}`,e,{operation:`minkowski`}))}}function H3(e,t,n={}){let{tolerance:r=1e-6}=n;if(F().isNull(e.wrapped))return z(W(H.NULL_SHAPE_INPUT,`minkowski: shape is a null shape`));if(F().isNull(t.wrapped))return z(W(H.MINKOWSKI_NULL_TOOL,`minkowski: tool is a null shape`));if(!FE(e)||!FE(t))return z(W(H.MINKOWSKI_NOT_3D,`minkowski: both shape and tool must be 3D`));let i=z3(t);return i===null?V3(e,t,r):B3(e,i,r)}function U3(e,t,n={}){let{tolerance:r=1e-6}=n;if(e.length<4)return z(W(H.POLYHEDRON_INSUFFICIENT_POINTS,`polyhedron: need at least 4 points, got ${e.length}`));if(t.length<4)return z(W(H.POLYHEDRON_INSUFFICIENT_FACES,`polyhedron: need at least 4 faces, got ${t.length}`));let i=[];for(let[n,r]of t.entries()){for(let t of r)if(t<0||t>=e.length)return z(W(H.POLYHEDRON_INVALID_INDEX,`polyhedron: face ${n} has out-of-range index ${t} (${e.length} points)`));if(r.length<3)continue;let t=r[0];for(let e=1;e<r.length-1;e++)i.push([t,r[e],r[e+1]])}try{let t=F(),n=e.map(([e,t,n])=>({x:e,y:t,z:n})),a=I(t.buildSolidFromFaces(n,i,r));return NE(a)?R(a):(L(a),z(U(H.POLYHEDRON_FAILED,`Polyhedron did not produce a solid`)))}catch(e){let t=e instanceof Error?e.message:String(e);return z(U(H.POLYHEDRON_FAILED,`Polyhedron failed: ${t}`,e))}}var W3=1e-10;function G3(e,t,n,r){return e*r-t*n}function K3(e,t,n,r){return e*n+t*r}function q3(e,t){return Math.sqrt(e*e+t*t)}function J3(e,t){let n=e[(t%e.length+e.length)%e.length];if(!n)throw Error(`Invalid polygon index ${t} for length ${e.length}`);return n}function Y3(e){let t=0;for(let n=0;n<e.length;n++){let r=J3(e,n),i=J3(e,n+1);t+=r.x*i.y-i.x*r.y}return t<0?[...e].reverse():e}function X3(e,t){let n=J3(e,t-1),r=J3(e,t),i=J3(e,t+1),a=r.x-n.x,o=r.y-n.y,s=q3(a,o),c=i.x-r.x,l=i.y-r.y,u=q3(c,l);if(s<W3||u<W3)return{dx:0,dy:0};let d=-o/s,f=a/s,p=-l/u,m=c/u,h=d+p,g=f+m,_=q3(h,g);if(_<W3)return{dx:d,dy:f};h/=_,g/=_;let v=K3(h,g,d,f),y=Math.abs(v)>W3?1/v:1;return{dx:h*y,dy:g*y}}function Z3(e){return!e.prev||!e.next?!1:G3(e.x-e.prev.x,e.y-e.prev.y,e.next.x-e.x,e.next.y-e.y)<-1e-10}function Q3(e){let t=e.map((t,n)=>{let r=X3(e,n);return{x:t.x,y:t.y,bx:r.dx,by:r.dy,origIdx:n,prev:null,next:null,active:!0}});for(let e=0;e<t.length;e++){let n=t[e],r=t[(e-1+t.length)%t.length],i=t[(e+1)%t.length];n&&r&&i&&(n.prev=r,n.next=i)}return t}function $3(e,t){let n=e;for(let e=0;e<t&&n;e++)n.active=!1,n=n.next}function e6(e){let t=1,n=e.next;for(;n!==e&&(t++,n=n.next,!(t>1e4)););return t}function t6(e,t){let n=e.bx-t.bx,r=e.by-t.by,i=t.x-e.x,a=t.y-e.y;if(Math.abs(n)<W3&&Math.abs(r)<W3)return null;let o;if(o=Math.abs(n)>Math.abs(r)?i/n:a/r,o<W3)return null;let s=Math.abs(n)>Math.abs(r)?r:n,c=Math.abs(n)>Math.abs(r)?a:i;if(Math.abs(s)>W3){let e=c/s;if(Math.abs(o-e)>1e-4*Math.max(1,Math.abs(o)))return null}return o}function n6(e,t,n){let r=n.x-t.x,i=n.y-t.y,a=q3(r,i);if(a<W3)return null;let o=-i/a,s=r/a,c=(e.x-t.x)*o+(e.y-t.y)*s,l=e.bx-(t.bx+n.bx)/2,u=e.by-(t.by+n.by)/2,d=l*o+u*s;if(Math.abs(d)<W3)return null;let f=-c/d;if(f<W3)return null;let p=e.x+f*e.bx,m=e.y+f*e.by,h=t.x+f*t.bx,g=t.y+f*t.by,_=n.x+f*n.bx,v=n.y+f*n.by,y=_-h,b=v-g,x=q3(y,b);if(x<W3)return f;let S=K3(p-h,m-g,y,b)/(x*x);return S<-.01||S>1.01?null:f}function r6(e){let t=[];for(let n of e){if(!n.active||!n.next)continue;let e=t6(n,n.next);if(e!==null&&e>W3){let r=n.x+e*n.bx,i=n.y+e*n.by;t.push({time:e,x:r,y:i,nodeA:n,nodeB:n.next,type:`edge`})}if(Z3(n)){let e=n.next.next,r=0;for(;e!==n.prev&&e!==n&&r<1e3;){let i=n6(n,e,e.next);if(i!==null&&i>W3){let r=n.x+i*n.bx,a=n.y+i*n.by;t.push({time:i,x:r,y:a,nodeA:n,nodeB:e,type:`split`})}e=e.next,r++}}}return t.sort((e,t)=>e.time-t.time),t}function i6(e){if(e.length<3)return R({nodes:[],faces:[]});try{return R(a6(e))}catch(e){return z(vD(H.STRAIGHT_SKELETON_FAILED,e instanceof Error?e.message:String(e),e))}}function a6(e){let t=Y3(e),n=t.length,r=[],i=Array.from({length:n},()=>[]),a=Q3(t),o=0,s=n*n*2;for(;o<s;){o++;let e=a.find(e=>e.active);if(!e)break;let t=e6(e);if(t<=3){if(t===3){let t=e,n=t.next,a=n.next,o=t6(t,n),s=o!==null&&o>W3?o:0,c=(t.x+n.x+a.x)/3+s*(t.bx+n.bx+a.bx)/3,l=(t.y+n.y+a.y)/3+s*(t.by+n.by+a.by)/3,u=r.length;r.push({x:c,y:l,height:s});let d=i[t.origIdx],f=i[n.origIdx],p=i[a.origIdx];d&&d.push(u),f&&f.push(u),p&&p.push(u),t.active=!1,n.active=!1,a.active=!1}else $3(e,t);continue}let n=a.filter(e=>e.active),s=r6(n);if(s.length===0){for(let e of n)e.active=!1;break}let c=s[0];if(!c)break;if(c.type===`edge`){let e=c.nodeA,t=c.nodeB;if(!e.active||!t.active)continue;let n=r.length;r.push({x:c.x,y:c.y,height:c.time});let a=i[e.origIdx],o=i[t.origIdx];a&&a.push(n),o&&o.push(n),e.x=c.x,e.y=c.y,e.next=t.next,t.next.prev=e,t.active=!1;let s=[],l=e;do s.push({x:l.x,y:l.y}),l=l.next;while(l!==e);let u=X3(s,0);e.bx=u.dx,e.by=u.dy}else{let e=c.nodeA,t=c.nodeB;if(!e.active||!t.active)continue;let n=r.length;r.push({x:c.x,y:c.y,height:c.time});let o=i[e.origIdx];o&&o.push(n);let s=i[t.origIdx];s&&s.push(n);let l={x:c.x,y:c.y,bx:0,by:0,origIdx:e.origIdx,prev:null,next:null,active:!0};a.push(l),e.x=c.x,e.y=c.y;let u=e.next,d=t.next;e.next=d,d.prev=e,l.next=u,u.prev=l,l.prev=t,t.next=l;let f=e=>{let t=[],n=e;do t.push({x:n.x,y:n.y}),n=n.next;while(n!==e);return t},p=X3(f(e),0);e.bx=p.dx,e.by=p.dy;let m=X3(f(l),0);l.bx=m.dx,l.by=m.dy}}let c=[];for(let e=0;e<n;e++){let a=(e+1)%n,o=[J3(t,e),J3(t,a)],s=[0,0],l=i[a],u=i[e];if(l)for(let e of l){let t=r[e];t&&(o.push({x:t.x,y:t.y}),s.push(t.height))}if(u)for(let e=u.length-1;e>=0;e--){let t=u[e];if(t===void 0)continue;let n=r[t];if(!n)continue;let i=o[o.length-1];i&&q3(n.x-i.x,n.y-i.y)>W3&&(o.push({x:n.x,y:n.y}),s.push(n.height))}o.length>=3&&c.push({vertices:o,heights:s})}let l=[];for(let e of r)l.some(t=>Math.abs(t.x-e.x)<.01&&Math.abs(t.y-e.y)<.01)||l.push(e);return{nodes:l,faces:c}}function o6(e){let t=UD(e).map(e=>{let t=Xj(e);return{x:t[0],y:t[1]}}),n=t[0],r=t[t.length-1];return t.length>1&&n&&r&&Math.abs(n.x-r.x)<1e-10&&Math.abs(n.y-r.y)<1e-10&&t.pop(),t}function s6(e){let t=[];for(let n=1;n<e-1;n++)t.push([0,n,n+1]);return t}function c6(e,t,n,r,i,a){return(n-e)*(a-t)-(r-t)*(i-e)}function l6(e,t,n,r,i,a,o,s){let c=c6(n,r,i,a,e,t),l=c6(i,a,o,s,e,t),u=c6(o,s,n,r,e,t);return!((c<0||l<0||u<0)&&(c>0||l>0||u>0))}function u6(e){let t=e.length;if(t<3)return[];if(t===3)return[[0,1,2]];let n=0;for(let r=0;r<t;r++){let i=e[r],a=e[(r+1)%t];i&&a&&(n+=i.x*a.y-a.x*i.y)}let r=[],i=Array.from({length:t},(e,t)=>t);n<0&&i.reverse();let a=(t,n,r)=>{let a=e[t],o=e[n],s=e[r];if(!a||!o||!s||c6(a.x,a.y,o.x,o.y,s.x,s.y)<=0)return!1;for(let c of i){if(c===t||c===n||c===r)continue;let i=e[c];if(i&&l6(i.x,i.y,a.x,a.y,o.x,o.y,s.x,s.y))return!1}return!0};for(;i.length>3;){let e=!1;for(let t=0;t<i.length;t++){let n=i[(t-1+i.length)%i.length],o=i[t],s=i[(t+1)%i.length];if(n!==void 0&&o!==void 0&&s!==void 0&&a(n,o,s)){r.push([n,o,s]),i.splice(t,1),e=!0;break}}if(!e)break}if(i.length===3){let[e,t,n]=i;e!==void 0&&t!==void 0&&n!==void 0&&r.push([e,t,n])}return r}function d6(e,t,n){let r=[];for(let i of e.faces){let e=i.vertices.map((e,n)=>[e.x,e.y,(i.heights[n]??0)*t]),a=s6(e.length);for(let[t,i,o]of a){let a=e[t],s=e[i],c=e[o];if(!a||!s||!c)continue;let l=s[0]-a[0],u=s[1]-a[1],d=s[2]-a[2],f=c[0]-a[0],p=c[1]-a[1],m=c[2]-a[2],h=u*m-d*p,g=d*f-l*m,_=l*p-u*f;if(h*h+g*g+_*_<1e-20)continue;let v=n.buildTriFace(a,s,c);v!==null&&r.push(v)}}return r}function f6(e,t){let n=(t?.angle??45)*CD,r=Math.tan(n);try{let t=o6(e);if(t.length<3)return z(U(H.ROOF_FAILED,`Wire must have at least 3 edges for roof generation`));let n=i6(t);if(!n.ok)return n;let i=n.value;if(i.faces.length===0)return z(U(H.ROOF_FAILED,`Straight skeleton computation produced no faces`));let a=F(),o=d6(i,r,a);for(let[e,n,r]of u6(t)){let i=t[e],s=t[n],c=t[r];if(!i||!s||!c)continue;let l=[i.x,i.y,0],u=[s.x,s.y,0],d=[c.x,c.y,0],f=a.buildTriFace(l,d,u);f!==null&&o.push(f)}if(o.length===0)return z(U(H.ROOF_FAILED,`No valid triangular faces could be built`));try{let e=a.sewAndSolidify(o,1e-6),t=a.fixShape(e);return t!==e&&a.dispose(e),R(TE(t))}catch(e){try{let t=TE(a.sew(o,1e-6));return fO(t)?R(t):z(U(H.ROOF_FAILED,`Sew fallback produced invalid solid`,e))}catch(e){return z(U(H.ROOF_FAILED,`Failed to sew roof faces`,e))}}finally{for(let e of o)a.dispose(e)}}catch(e){let t=e instanceof Error?e.message:String(e);return z(U(H.ROOF_FAILED,`Roof generation failed: ${t}`,e))}}var p6={coincident:3,concentric:4,distance:1,angle:1},m6=[1,0,0,0];function h6(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function g6(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function _6(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function v6(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 y6(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function b6(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function x6(e){return b6(v6(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function S6(e,t){let n=h6(LF(t.rotation,e.origin),t.position);return{type:e.type,origin:n,...e.normal?{normal:LF(t.rotation,e.normal)}:{},...e.direction?{direction:LF(t.rotation,e.direction)}:{}}}function C6(e,t,n){let r=e.normal??[0,0,1];return{position:y6(r,_6(r,g6(e.origin,t.origin))+n),rotation:m6}}function w6(e,t){let n=e.direction??[0,0,1],r=zF(t.direction??[0,0,1],n),i=LF(r,t.origin);return{position:g6(e.origin,i),rotation:r}}function T6(e,t,n){let r=b6(e.normal??[0,0,1]),i=b6(t.normal??[0,0,1]),a=Math.acos(Math.max(-1,Math.min(1,_6(i,r)))),o=v6(i,r);return{position:[0,0,0],rotation:RF(Math.hypot(o[0],o[1],o[2])<1e-9?x6(i):o,a-n)}}function E6(e,t,n){let r=g6(t,e),i=Math.hypot(r[0],r[1],r[2]);return{position:g6(h6(e,y6(i<1e-9?[1,0,0]:y6(r,1/i),n)),t),rotation:m6}}function D6(e,t,n,r){let i=b6(e);return{position:y6(i,_6(i,g6(t,n))-r),rotation:m6}}function O6(e,t,n){let r=b6(e.direction??[0,0,1]),i=h6(e.origin,y6(r,_6(r,g6(t,e.origin))));if(n===0)return{position:g6(i,t),rotation:m6};let a=g6(t,i),o=Math.hypot(a[0],a[1],a[2]);return{position:g6(h6(i,y6(o<1e-9?x6(r):y6(a,1/o),n)),t),rotation:m6}}function k6(e,t,n){let r=b6(t.direction??[0,0,1]),i=g6(t.origin,e),a=g6(i,y6(r,_6(r,i))),o=Math.hypot(a[0],a[1],a[2]);return n===0?{position:y6(a,-1),rotation:m6}:{position:g6(y6(o<1e-9?x6(r):y6(a,1/o),n),a),rotation:m6}}function A6(e,t,n){let r=b6(e.direction??[0,0,1]),i=zF(b6(t.direction??[0,0,1]),r),a=g6(LF(i,t.origin),e.origin),o=g6(a,y6(r,_6(r,a))),s=Math.hypot(o[0],o[1],o[2]);return{position:g6(y6(s<1e-9?x6(r):y6(o,1/s),n),o),rotation:i}}var j6=new Set([`plane-plane`,`plane-point`,`point-plane`,`point-point`,`axis-axis`,`axis-point`,`point-axis`]),M6={angle:`plane`,concentric:`axis`},N6=new Set([`coincident`,`distance`,`angle`,`concentric`]);function P6(e,t,n){let r=M6[e];return r?t===r&&n===r:j6.has(`${t}-${n}`)}function F6(e,t,n){switch(`${e.type}-${t.type}`){case`plane-plane`:case`plane-point`:return C6(e,t,n);case`point-plane`:return D6(t.normal??[0,0,1],e.origin,t.origin,n);case`point-point`:return E6(e.origin,t.origin,n);case`axis-axis`:return n===0?w6(e,t):A6(e,t,n);case`axis-point`:return O6(e,t.origin,n);case`point-axis`:return k6(e.origin,t,n);default:return null}}function I6(e,t,n){switch(e.type){case`concentric`:return w6(t,n);case`angle`:return T6(t,n,(e.value??0)*Math.PI/180);default:{let r=F6(t,n,e.type===`distance`?e.value??0:0);if(!r)throw Error(`solveMate: unsupported entity pair escaped filter: ${t.type}-${n.type}`);return r}}}function L6(e,t){let n=new Map;for(let t of e)n.set(t,{position:[0,0,0],rotation:m6});let r=[],i=t.filter(e=>N6.has(e.type)&&e.entityA&&e.entityB),a=new Set;for(let e of i)e.entityB&&a.add(e.entityB.node);let o=new Set;for(let t of e)a.has(t)||o.add(t);for(let e of t)e.type===`fixed`&&e.entityA&&o.add(e.entityA.node);let s=[];for(let e of i){if(!e.entityA||!e.entityB)continue;let t=e.entityA.entity.type,n=e.entityB.entity.type;if(!P6(e.type,t,n)){r.push(`${e.type}(${t}-${n})`);continue}s.push(e)}let c=!0;for(;c&&s.length>0;){c=!1;for(let e=s.length-1;e>=0;e--){let t=s[e];if(!t?.entityA||!t.entityB)continue;let r=t.entityA,i=t.entityB;if(!o.has(r.node)||(s.splice(e,1),c=!0,o.has(i.node)))continue;let a=n.get(r.node)??{position:[0,0,0],rotation:m6},l=S6(r.entity,a);n.set(i.node,I6(t,l,i.entity)),o.add(i.node)}}for(let e of s)r.push(`${e.type}(unanchored)`);return{transforms:n,dof:r.reduce((e,t)=>e+(p6[t]??p6[t.split(`(`)[0]??``]??0),0),converged:r.length===0,unsupported:r}}function R6(e){if(e.face){let t=_k(e.face);return t?{type:`axis`,origin:t.origin,direction:t.direction}:{type:`plane`,origin:gk(e.face),normal:hk(e.face)}}if(e.edge){if(Yj(e.edge)===`LINE`)return{type:`axis`,origin:Xj(e.edge),direction:$j(e.edge)};let t=tM(e.edge);return t?{type:`axis`,origin:t.origin,direction:t.direction}:null}return e.point?{type:`point`,origin:e.point}:null}function z6(e,t){let n=R6(e),r=R6(t);return!n||!r?z(W(H.ASSEMBLY_MATE_INVALID,`solveAssembly: could not extract geometry from mate entities`)):R({entityA:{node:e.node,entity:n},entityB:{node:t.node,entity:r}})}function B6(e){switch(e.type){case`fixed`:return R({type:`fixed`,entityA:{node:e.entity.node,entity:{type:`point`,origin:[0,0,0]}}});case`coincident`:{let t=z6(e.entityA,e.entityB);return t.ok?R({type:`coincident`,...t.value}):t}case`distance`:{let t=z6(e.entityA,e.entityB);return t.ok?R({type:`distance`,...t.value,value:e.distance}):t}case`angle`:{let t=z6(e.entityA,e.entityB);return t.ok?R({type:`angle`,...t.value,value:e.angle}):t}case`concentric`:{let t=z6(e.axisA,e.axisB);return t.ok?R({type:`concentric`,...t.value}):t}}}function V6(e,t){let n=e.mates??[];return{...e,mates:[...n,t]}}function H6(e){let t=e.mates;if(!t||t.length===0)return z(W(H.ASSEMBLY_MATE_INVALID,`solveAssembly: no mates defined`));try{let n=[];XF(e,e=>{n.push(e.name)});let r=[];for(let e of t){let t=B6(e);if(!t.ok)return t;r.push(t.value)}let i=L6(n,r);if(!i.converged){let e=i.unsupported.length>0?`Unsupported constraint types: ${i.unsupported.join(`, `)} (${i.dof} DOF unresolved)`:`Assembly constraint solver did not converge`;return z(U(H.ASSEMBLY_NOT_CONVERGED,e))}return R({transforms:i.transforms,dof:i.dof,converged:i.converged})}catch(e){let t=e instanceof Error?e.message:String(e);return z(U(H.ASSEMBLY_SOLVE_FAILED,`Assembly solve failed: ${t}`,e))}}function U6(e,t,n=1e-6){return F().isNull(e.wrapped)?z(W(H.NULL_SHAPE_INPUT,`checkInterference: first shape is a null shape`)):F().isNull(t.wrapped)?z(W(H.NULL_SHAPE_INPUT,`checkInterference: second shape is a null shape`)):nE(()=>{let r=F().distance(e.wrapped,t.wrapped);return R({hasInterference:r.value<=n,minDistance:r.value,pointOnShape1:r.point1,pointOnShape2:r.point2})})}function W6(e,n=1e-6){let r=[],i=e.map(e=>rO(e));return e.forEach((a,o)=>{for(let s=o+1;s<e.length;s++){if(G6(t(i,o),t(i,s),n))continue;let c=V(U6(a,t(e,s),n));c.hasInterference&&r.push({i:o,j:s,result:c})}}),r}function G6(e,t,n){return e.xMax+n<t.xMin||t.xMax+n<e.xMin||e.yMax+n<t.yMin||t.yMax+n<e.yMin||e.zMax+n<t.zMin||t.zMax+n<e.zMin}function K6(e){let t=e.split(/\r?\n/),n=[],r=!1,i;for(let e=0;e<t.length-1;e+=2){let a=t[e],o=t[e+1];if(a===void 0||o===void 0)continue;let s=parseInt(a.trim(),10),c=o.trim();if(!isNaN(s)){if(s===2&&c===`ENTITIES`){r=!0;continue}if(r){if(s===0){if(c===`ENDSEC`||c===`EOF`){i&&n.push(i);break}i&&n.push(i),i={type:c,layer:`0`,data:new Map};continue}i&&(s===8?i.layer=c:i.data.set(s,c))}}}return n}function q6(e,t,n=0){let r=e.get(t);if(r===void 0)return n;let i=parseFloat(r);return isNaN(i)?n:i}function J6(e){let{type:t,data:n}=e,r=F();if(t===`LINE`)return r.makeLineEdge([q6(n,10),q6(n,20),q6(n,30)],[q6(n,11),q6(n,21),q6(n,31)]);if(t===`CIRCLE`)return r.makeCircleEdge([q6(n,10),q6(n,20),q6(n,30)],[0,0,1],q6(n,40));if(t===`ARC`){let e=q6(n,50)*Math.PI/180,t=q6(n,51)*Math.PI/180;return r.makeCircleArc([q6(n,10),q6(n,20),q6(n,30)],[0,0,1],q6(n,40),e,t)}}async function Y6(e,t){let n;try{n=await e.text()}catch(e){return z(yD(H.DXF_IMPORT_FAILED,`Failed to read DXF blob`,e))}let r=K6(n),i=t?.layer===void 0?r:r.filter(e=>e.layer===t.layer);if(i.length===0)return R([]);let a=[];try{for(let e of i){let t=J6(e);t!==void 0&&a.push(t)}return a.length===0?R([]):R([SE(F().makeWire(a))])}catch(e){return z(yD(H.DXF_IMPORT_FAILED,`Failed to convert DXF entities to geometry`,e))}finally{for(let e of a)e.delete()}}function X6(e,t,n=1e-6){let r=F(),i=[];for(let[t,n,a]of e){let e=r.buildTriFace(t,n,a);e!==null&&i.push(e)}if(i.length===0)return z(yD(t,`No valid triangular faces could be built`));try{let e=I(r.sewAndSolidify(i,n));for(let e of i)r.dispose(e);return R(e)}catch{try{return R(LE(r.sew(i,n)))}catch(e){return z(yD(t,`Failed to sew triangular faces`,e))}}}function Z6(e){let t=e.split(/\s+/),n=parseFloat(t[1]??``),r=parseFloat(t[2]??``),i=parseFloat(t[3]??``);return isNaN(n)||isNaN(r)||isNaN(i)?null:[n,r,i]}function Q6(e){return e.split(/\s+/).slice(1).map(e=>parseInt(e.split(`/`)[0]??``,10)).filter(e=>!isNaN(e))}async function $6(e){let t=(await e.text()).split(`
60
- `),n=[],r=[];for(let e of t){let t=e.trim();if(t.startsWith(`v `)){let e=Z6(t);e&&n.push(e)}else if(t.startsWith(`f `)){let e=Q6(t);e.length>=3&&r.push(e)}}if(n.length===0||r.length===0)return z(yD(H.OBJ_IMPORT_FAILED,`OBJ file contains no valid geometry`));try{return e8(n,r)}catch(e){let t=e instanceof Error?e.message:String(e);return z(yD(H.OBJ_IMPORT_FAILED,`OBJ import failed: ${t}`,e))}}function e8(e,t){let n=[];for(let r of t)for(let t=1;t<r.length-1;t++){let i=r[0]??0,a=r[t]??0,o=r[t+1]??0,s=i>0?i-1:e.length+i,c=a>0?a-1:e.length+a,l=o>0?o-1:e.length+o,u=e[s],d=e[c],f=e[l];!u||!d||!f||n.push([u,d,f])}return X6(n,H.OBJ_IMPORT_FAILED)}function t8(e,t){let n=-1;for(let t=e.length-22;t>=0;t--)if(e[t]===80&&e[t+1]===75&&e[t+2]===5&&e[t+3]===6){n=t;break}if(n<0)return null;let r=new DataView(e.buffer,e.byteOffset,e.byteLength),i=r.getUint32(n+16,!0),a=i+r.getUint32(n+12,!0),o=i,s=new TextDecoder;for(;o<a&&r.getUint32(o,!0)===33639248;){let n=r.getUint16(o+28,!0),i=r.getUint16(o+30,!0),a=r.getUint16(o+32,!0),c=r.getUint32(o+42,!0);if(s.decode(e.subarray(o+46,o+46+n))===t){if(r.getUint16(c+8,!0)!==0)return null;let t=r.getUint16(c+26,!0),n=r.getUint16(c+28,!0),i=r.getUint32(c+18,!0),a=c+30+t+n;return e.subarray(a,a+i)}o+=46+n+i+a}return null}function n8(e){return e>=97&&e<=122||e>=65&&e<=90||e>=48&&e<=57||e===95}function r8(e){let t={},n=0;for(;n<e.length;){let r=e.indexOf(`="`,n);if(r<0)break;let i=r;for(;i>0&&n8(e.charCodeAt(i-1));)i--;if(i===r){n=r+2;continue}let a=e.slice(i,r),o=r+2,s=e.indexOf(`"`,o);if(s<0)break;t[a]=e.slice(o,s),n=s+1}return t}function i8(e,t){let n=[],r=`<${t} `,i=0;for(;i<e.length;){let t=e.indexOf(r,i);if(t<0)break;let a=e.indexOf(`>`,t);if(a<0)break;n.push(e.slice(t,a+1)),i=a+1}return n}function a8(e,t){let n=e.indexOf(`<${t}`);if(n<0)return null;let r=e.indexOf(`</${t}>`,n);return r<0?null:e.slice(n,r+t.length+3)}function o8(e){let t=e.startsWith(`#`)?e.slice(1):e;return[parseInt(t.slice(0,2),16)/255,parseInt(t.slice(2,4),16)/255,parseInt(t.slice(4,6),16)/255,t.length>=8?parseInt(t.slice(6,8),16)/255:1]}function s8(e){let t=new Map,n=0;for(;n<e.length;){let r=e.indexOf(`<colorgroup`,n);if(r<0)break;let i=e.indexOf(`</colorgroup>`,r);if(i<0)break;let a=e.slice(r,i+13);n=i+13;let o=e.indexOf(`>`,r);if(o<0)continue;let s=r8(e.slice(r,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of i8(a,`color`)){let t=r8(e).color;t!==void 0&&l.push(o8(t))}t.set(c,l)}let r=0;for(;r<e.length;){let n=e.indexOf(`<basematerials`,r);if(n<0)break;let i=e.indexOf(`</basematerials>`,n);if(i<0)break;let a=e.slice(n,i+16);r=i+16;let o=e.indexOf(`>`,n);if(o<0)continue;let s=r8(e.slice(n,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of i8(a,`base`)){let t=r8(e).displaycolor;t===void 0?l.push([0,0,0,1]):l.push(o8(t))}t.set(c,l)}return t}function c8(e){let t=[],n=[],r=[],i=s8(e);for(let n of i8(e,`vertex`)){let e=r8(n);e.x!==void 0&&e.y!==void 0&&e.z!==void 0&&t.push([parseFloat(e.x),parseFloat(e.y),parseFloat(e.z)])}let a=null,o=null,s=a8(e,`object`);if(s!==null){let e=s.indexOf(`>`);if(e>=0){let t=r8(s.slice(0,e+1));t.pid!==void 0&&(a=parseInt(t.pid,10)),t.pindex!==void 0&&(o=parseInt(t.pindex,10))}}for(let t of i8(e,`triangle`)){let e=r8(t);if(e.v1!==void 0&&e.v2!==void 0&&e.v3!==void 0){n.push([parseInt(e.v1,10),parseInt(e.v2,10),parseInt(e.v3,10)]);let t=null,s=e.pid??(a===null?void 0:String(a)),c=e.p1??(o===null?void 0:String(o));if(s!==void 0&&c!==void 0){let e=parseInt(s,10),n=parseInt(c,10),r=i.get(e);r!==void 0&&n<r.length&&(t=r[n]??null)}r.push(t)}}return{vertices:t,triangles:n,triangleColors:r}}function l8(e){let t=new Map;for(let n of e){if(n===null)continue;let e=n.join(`,`),r=t.get(e);r===void 0?t.set(e,{count:1,color:n}):r.count++}let n=null;for(let e of t.values())(n===null||e.count>n.count)&&(n=e);return n===null?null:n.color}function u8(e){let t=F(),n=e.vertices.map(([e,t,n])=>({x:e,y:t,z:n})),r=e.triangles;try{return R(I(t.buildSolidFromFaces(n,r,1e-6)))}catch{let t=[];for(let[n,r,i]of e.triangles){let a=e.vertices[n],o=e.vertices[r],s=e.vertices[i];!a||!o||!s||t.push([a,o,s])}return X6(t,H.THREEMF_IMPORT_FAILED)}}async function d8(e){try{let t=await e.arrayBuffer(),n=t8(new Uint8Array(t),`3D/3dmodel.model`);if(!n)return z(yD(H.THREEMF_IMPORT_FAILED,`3MF archive does not contain 3D/3dmodel.model (or uses unsupported compression)`));let r=c8(new TextDecoder().decode(n));if(r.vertices.length===0||r.triangles.length===0)return z(yD(H.THREEMF_IMPORT_FAILED,`3MF model contains no valid geometry`));let i=u8(r);if(i.ok){let e=l8(r.triangleColors);e!==null&&hA(i.value,e)}return i}catch(e){let t=e instanceof Error?e.message:String(e);return z(yD(H.THREEMF_IMPORT_FAILED,`3MF import failed: ${t}`,e))}}async function f8(e){try{let t=await e.arrayBuffer();return R(I(F().importGLB(t)))}catch(e){let t=e instanceof Error?e.message:String(e);return z(yD(H.GLB_IMPORT_FAILED,`Failed to import GLB: ${t}`,e))}}function $(e){return`__wrapped`in e?e.val:e}function p8(e){return $(e)}function m8(e,t){return rj($(e),t)}function h8(e,t){if(Array.isArray(e))throw Error(`${t}() expects an options object, e.g. ${t}(shape, { ... }), not an array of coordinates.`)}function g8(e,t,n){h8(n,`rotate`);let r=n?.at;return ij($(e),t,r,n?.axis)}function _8(e,t){h8(t,`mirror`);let n=t?.at;return aj($(e),t?.normal??[1,0,0],n)}function v8(e,t,n){return oj($(e),t,n?.center)}function y8(e){return Hj($(e))}function b8(e,t){return dj($(e),t)}function x8(e,t){return mj($(e),t)}function S8(e,t){return pj($(e),t)}function C8(e,t,n){return DA($(e),$(t),{...n,unsafe:!0})}function w8(e,t,n){return OA($(e),$(t),{...n,unsafe:!0})}function T8(e,t){return jA(e.map(e=>$(e)),{...t,unsafe:!0})}function E8(e,t,n){return MA($(e),t.map(e=>$(e)),{...n,unsafe:!0})}function D8(e,t,n){return kA($(e),$(t),{...n,unsafe:!0})}function O8(e,t,n){return FA($(e),t,n)}function k8(e,t,n){return VA($(e),t,n)}function A8(e,t){return HA($(e),t)}function j8(e,t,n){return UA($(e),t,n)}function M8(e,t){if(e!==void 0)return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(FL()).findAll(t)}function N8(e,t){return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(RL()).findAll(t)}function P8(e){return typeof e==`object`&&!Array.isArray(e)&&typeof e!=`function`?{mode:`distAngle`,distance:e.distance,angle:e.angle}:typeof e==`function`?{mode:`standard`,distance:t=>{let n=e(t);return n===null?null:typeof n==`object`&&!Array.isArray(n)?n.distance:n}}:{mode:`standard`,distance:e}}function F8(e,t,n){let r=$(e),i,a;return n===void 0?(i=void 0,a=t):(i=M8(t,r),a=n),yN(r,i,a)}function I8(e,t,n){let r=$(e),i,a;n===void 0?(i=void 0,a=t):(i=M8(t,r),a=n);let o=P8(a);return o.mode===`distAngle`?BM(r,[...i??UD(r)],o.distance,o.angle):bN(r,i,o.distance)}function L8(e,t,n,r){let i=$(e);return xN(i,N8(t,i),n,r?.tolerance)}function R8(e,t,n){return SN($(e),t,n?.tolerance)}function z8(e,t){return _N($(e),t)}function B8(e,t,n){let r=$(e);return wN(r,N8(t,r),n.pullDirection,n.neutralPlane,n.angle)}function V8(e){return AN($(e))}function H8(e){return Jj($(e))}function U8(e,t){return bM($(e),t)}function W8(e,t){return xM($(e),t)}function G8(e){return sO($(e))}function K8(e){return Uj($(e))}function q8(e){return ak(e)}function J8(e){return EN($(e))}function Y8(e){return Gj($(e))}function X8(e,t){return Vq($(e),typeof t==`number`?[0,0,t]:t)}function Z8(e,t){let n=t?.at??[0,0,0];return Hq($(e),n,t?.axis??[0,0,1],t?.angle??2*Math.PI)}function Q8(e,t){return qN(e.map(e=>$(e)),t)}function $8(e,n){if(n===void 0){let t=WD(e);if(t.length===0)return z(W(H.COMPOUND_NO_FACES,`compoundOps: shape has no faces`));let n=jk(t),r=gk(n)[2];for(let e=1;e<t.length;e++){let i=Ak(t,e),a=gk(i)[2];a>r&&(n=i,r=a)}return R(n)}if(typeof n==`function`){let r=n(RL()).findAll(e);return r.length===0?z(bD(H.COMPOUND_FACE_NOT_FOUND,`compoundOps: face finder matched no faces`)):R(t(r,0))}return R(n)}function e5(e){return`sketchOnPlane`in e&&typeof e.sketchOnPlane==`function`?{wire:e.sketchOnPlane(`XY`).wire,owned:!0}:{wire:e,owned:!1}}function t5(e,t){let n=$(e),{at:r,radius:i,axis:a}=t,o=a??[0,0,1];if(i<=0)return z(W(`DRILL_INVALID_RADIUS`,`Drill radius must be positive`));if(IO(o))return z(W(`DRILL_ZERO_AXIS`,`Drill axis cannot be zero`));let s=PO(o),c=r.length===2?[r[0],r[1],0]:[r[0],r[1],r[2]],l;if(t.depth!==void 0)l=JA(i,t.depth,c,s);else{let e=rO(n),t=[[e.xMin,e.yMin,e.zMin],[e.xMax,e.yMin,e.zMin],[e.xMin,e.yMax,e.zMin],[e.xMax,e.yMax,e.zMin],[e.xMin,e.yMin,e.zMax],[e.xMax,e.yMin,e.zMax],[e.xMin,e.yMax,e.zMax],[e.xMax,e.yMax,e.zMax]],r=1/0,a=-1/0;for(let e of t){let t=(e[0]-c[0])*s[0]+(e[1]-c[1])*s[1]+(e[2]-c[2])*s[2];t<r&&(r=t),t>a&&(a=t)}--r,a+=1,l=JA(i,a-r,[c[0]+s[0]*r,c[1]+s[1]*r,c[2]+s[2]*r],s)}try{return OA(n,l,{unsafe:!0})}finally{l[Symbol.dispose]()}}function n5(e,t){try{var n=WT();let r=$(e),{profile:i,depth:a}=t;if(a<=0)return z(W(`POCKET_INVALID_DEPTH`,`Pocket depth must be positive`));let o=$8(r,t.face);if(B(o))return o;let s=o.value,c=hk(s),l=gk(s),u=n.u(new iE),{wire:d,owned:f}=e5(i);f&&u.register(d);let p=Kk(d);if(B(p))return p;u.register(p.value);let m=Vq(u.register(rj(p.value,l)),DO(PO(c),-a));return B(m)?m:(u.register(m.value),OA(r,m.value,{unsafe:!0}))}catch(e){n.e=e}finally{n.d()}}function r5(e,t){try{var n=WT();let r=$(e),{profile:i,height:a}=t;if(a<=0)return z(W(`BOSS_INVALID_HEIGHT`,`Boss height must be positive`));let o=$8(r,t.face);if(B(o))return o;let s=o.value,c=hk(s),l=gk(s),u=n.u(new iE),{wire:d,owned:f}=e5(i);f&&u.register(d);let p=Kk(d);if(B(p))return p;u.register(p.value);let m=Vq(u.register(rj(p.value,l)),DO(PO(c),a));return B(m)?m:(u.register(m.value),DA(r,m.value,{unsafe:!0}))}catch(e){n.e=e}finally{n.d()}}function i5(e,t){try{var n=WT();let r=$(e),i=t?.normal??[1,0,0],a=t?.at;return IO(i)?z(W(`MIRROR_ZERO_NORMAL`,`Mirror plane normal cannot be zero`)):DA(r,n.u(aj(r,i,a)),{unsafe:!0})}catch(e){n.e=e}finally{n.d()}}function a5(e,t){let n=$(e),{xDir:r,xCount:i,xSpacing:a,yDir:o,yCount:s,ySpacing:c}=t;if(i<1||s<1)return z(W(`PATTERN_INVALID_COUNT`,`Pattern counts must be at least 1`));if(IO(r))return z(W(`PATTERN_ZERO_DIRECTION`,`X direction cannot be zero`));if(IO(o))return z(W(`PATTERN_ZERO_DIRECTION`,`Y direction cannot be zero`));if(i===1&&s===1)return R(n);let l=PO(r),u=PO(o),d=[n],f=[];for(let e=0;e<i;e++)for(let t=0;t<s;t++){if(e===0&&t===0)continue;let r=rj(n,[l[0]*a*e+u[0]*c*t,l[1]*a*e+u[1]*c*t,l[2]*a*e+u[2]*c*t]);d.push(r),f.push(r)}try{return jA(d,{unsafe:!0})}finally{for(let e of f)e[Symbol.dispose]()}}var o5=class extends Error{code;kind;suggestion;metadata;constructor(e){let t=e.suggestion?`${e.message}\nSuggestion: ${e.suggestion}`:e.message;super(t),this.name=`BrepError`,this.code=e.code,this.kind=e.kind,e.suggestion&&(this.suggestion=e.suggestion),e.metadata&&(this.metadata=e.metadata)}};function s5(e){if(B(e))throw new o5(e.error);return e.value}function c5(e){return e}function l5(e){return e}function u5(e){return e}function d5(e){return e}function f5(e){return{val:e,__wrapped:!0,translate:t=>S5(m8(e,t)),rotate:(t,n)=>S5(g8(e,t,n)),mirror:t=>S5(_8(e,t)),scale:(t,n)=>S5(v8(e,t,n)),applyMatrix:t=>S5(s5(b8(e,t))),moveX:t=>S5(m8(e,[t,0,0])),moveY:t=>S5(m8(e,[0,t,0])),moveZ:t=>S5(m8(e,[0,0,t])),rotateX:t=>S5(g8(e,t,{axis:[1,0,0]})),rotateY:t=>S5(g8(e,t,{axis:[0,1,0]})),rotateZ:t=>S5(g8(e,t,{axis:[0,0,1]})),bounds:()=>rO(e),describe:()=>G8(e),clone:()=>S5(s5(y8(e))),mesh:t=>U8(e,t),meshEdges:t=>W8(e,t),isValid:()=>J8(e),isEmpty:()=>Y8(e),heal:()=>S5(s5(V8(e))),simplify:()=>S5(s5(H8(e))),toBREP:()=>s5(K8(e)),apply:t=>S5(t(e)),applyResult:t=>S5(s5(t(e))),done:()=>e}}function p5(e){return{fuse:(t,n)=>C5(s5(C8(e,$(t),{...n,unsafe:!0}))),cut:(t,n)=>C5(s5(w8(e,$(t),{...n,unsafe:!0}))),intersect:(t,n)=>C5(s5(D8(e,$(t),{...n,unsafe:!0}))),fuseAll:(t,n)=>C5(d5(s5(jA([e,...t.map($)],{...n,unsafe:!0})))),cutAll:(t,n)=>C5(d5(s5(MA(e,t,{...n,unsafe:!0})))),section:(t,n)=>S5(s5(O8(e,t,n))),split:t=>S5(s5(A8(e,t))),slice:(t,n)=>s5(j8(e,t,n))}}function m5(e){return{fillet(...t){return t.length===1?C5(d5(s5(F8(c5(e),t[0])))):C5(d5(s5(F8(c5(e),t[0],t[1]))))},chamfer(...t){return t.length===1?C5(d5(s5(I8(c5(e),t[0])))):C5(d5(s5(I8(c5(e),t[0],t[1]))))},shell:(t,n,r)=>C5(d5(s5(L8(c5(e),t,n,r)))),offset:(t,n)=>C5(d5(s5(R8(c5(e),t,n)))),draft:(t,n)=>C5(d5(s5(B8(c5(e),t,n))))}}function h5(e){return{drill:t=>C5(s5(t5(e,t))),pocket:t=>C5(s5(n5(e,t))),boss:t=>C5(s5(r5(e,t))),mirrorJoin:t=>C5(s5(i5(e,t))),rectangularPattern:t=>C5(s5(a5(e,t)))}}function g5(e){return{volume:()=>s5(rP(e)),area:()=>s5(iP(e)),volumeProps:()=>s5(eP(e)),surfaceProps:()=>s5(tP(e))}}function _5(e){return{edges:()=>UD(e),faces:()=>WD(e),wires:()=>GD(e),vertices:()=>KD(e)}}function v5(e){return{linearPattern:(t,n,r)=>C5(d5(s5(VF(e,t,n,r)))),circularPattern:(t,n,r)=>C5(d5(s5(HF(e,t,n,r))))}}function y5(e){return{...f5(e),...p5(e),...m5(e),...h5(e),...g5(e),..._5(e),...v5(e)}}function b5(e){return{...f5(e),length:()=>eM(e),startPoint:()=>Xj(e),endPoint:()=>Zj(e),pointAt:t=>Qj(e,t),tangentAt:t=>$j(e,t),isClosed:()=>nM(e),sweep(t,n){if(!AE(e))throw Error(`sweep requires a Wire`);let r=s5(zN(u5(e),$(t),n));return C5(Array.isArray(r)?r[0]:r)}}}function x5(e){return{...f5(e),area:()=>s5(iP(e)),normalAt:t=>hk(e,t),center:()=>gk(e),surfaceType:()=>s5(sk(e)),outerWire:()=>yk(e),innerWires:()=>xk(e),extrude:t=>C5(s5(X8(l5(e),t))),revolve:t=>C5(s5(Z8(l5(e),t)))}}function S5(e){return FE(e)?y5(e):jE(e)?x5(e):kE(e)||AE(e)?b5(e):f5(e)}function C5(e){return y5(e)}function w5(e){if(e&&typeof e==`object`&&`face`in e&&typeof e.face==`function`&&`_defaultOrigin`in e)return x5(e.face());if(e&&typeof e==`object`&&`wrapped`in e)return jE(e)?x5(e):FE(e)?y5(e):kE(e)||AE(e)?b5(e):f5(e);throw Error(`shape() requires a Sketch or branded shape type`)}var T5=.25,E5=e=>Math.tan(e)-e;function D5(e,t,n,r){let i=e/Math.cos(t),a=n+r*(Math.tan(t)-t);return[i*Math.cos(a),i*Math.sin(a),0]}function O5(e,t,n,r,i){let a=[];for(let o=0;o<=r;o++){let s=.5-.5*Math.cos(o/r*Math.PI);a.push(D5(e,s*t,n,i))}return a}function k5(e){return Math.max(16,Math.round(8*Math.sqrt(e)))}function A5(e,t,n,r,i,a,o){let s=e*t/2,c=s*Math.cos(n),l=t*(1+r),u=t*(1+i-r),d=o?s-t*(1-r):s+l,f=o?s+t*(1+i+r):s-u,p=a/s,m=(Math.PI/2+2*r*Math.tan(n))/e+(o?p:-p),h=o?f:d;return{rPitch:s,rb:c,rTip:d,rRoot:f,alphaPitch:n,halfToothAngle:m,alphaTip:h<=c?0:Math.acos(Math.min(1,c/h)),toothPitch:2*Math.PI/e,isInternal:o}}function j5(e,t,n){if(t===0)return R(e);let r=E5(e)+2*t*Math.tan(e)/n,i,a;if(r>E5(e)?(i=e,a=Math.PI/2-1e-6):(i=1e-4,a=e),r>E5(a)||r<E5(i))return z(W(`GEAR_PA_OUT_OF_RANGE`,`working pressure angle out of range — target inv(αw)=${r.toFixed(4)} not in [${E5(i).toFixed(4)}, ${E5(a).toFixed(4)}]`,void 0,{target:r,invLo:E5(i),invHi:E5(a)}));for(let e=0;e<50;e++){let e=.5*(i+a);E5(e)<r?i=e:a=e}return R(.5*(i+a))}function M5(e,t,n,r,i){return j5(e,t+n,r+i)}function N5(e,t,n,r,i){return j5(e,n-t,i-r)}function P5(e,t,n,r,i){return(e+t)*n*Math.cos(r)/(2*Math.cos(i))}function F5(e,t,n,r){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(n))return z(W(`GEAR_NON_INTEGER_TEETH`,`tooth counts and planet count must be integers`));if(e<4||t<4||n<2)return z(W(`GEAR_TEETH_TOO_FEW`,`zs ≥ 4, zp ≥ 4, N ≥ 2 required`));if((2*e+2*t)%n!=0)return z(W(`GEAR_ASSEMBLY`,`(2·zs + 2·zp) must be divisible by N — got ${2*e+2*t} mod ${n} = ${(2*e+2*t)%n}`));let i=t+2+2*r,a=(e+t)*Math.sin(Math.PI/n);return a<=i?z(W(`GEAR_PLANET_COLLISION`,`planet tips would collide: (zs+zp)·sin(π/N) = ${a.toFixed(3)} ≤ planet tip = ${i.toFixed(3)}`)):R(void 0)}function I5(e,t,n,r,i,a,o,s){return(Math.sqrt(Math.max(0,e*e-t*t))+Math.sqrt(Math.max(0,n*n-r*r))-i*Math.sin(s))/(Math.PI*a*Math.cos(o))}function L5(e,t,n,r,i,a,o,s){return(Math.sqrt(Math.max(0,e*e-t*t))-Math.sqrt(Math.max(0,n*n-r*r))+i*Math.sin(s))/(Math.PI*a*Math.cos(o))}function R5(e,t){return 1-e*Math.sin(t)*Math.sin(t)/2}function z5(e,t,n){return Math.max(0,R5(e,t)-n)}function B5(e){return e<8?.2:.485-2.88/e}function V5(e,t,n,r){let i=e*1e3,a=B5(r);return a<=0||n<=0||t<=0?1/0:2*i/(r*t*t*n*a)}function H5(e,t,n=!1){let r=(1.4+6.5/e)*(20/(t*180/Math.PI))**.15;return n?r*.85:r}function U5(e,t,n,r,i,a=!1){return V5(e,t,n,r)*H5(r,i,a)}function W5(e){return e/2}function G5(e,t){return e+2*t}function K5(e){return e%2==0?Math.PI/e:0}function q5(e,t,n){return e*(1+t/n)+K5(n)}function J5(e={}){let t=e.moduleSize??3,n=e.sunTeeth??15,r=e.planetTeeth??12,i=e.numPlanets??3,a=(e.pressureAngleDeg??20)*Math.PI/180,o=e.sunShift??0,s=e.planetShift??0,c=F5(n,r,i,s);if(B(c))return c;let l=M5(a,o,s,n,r);if(B(l))return l;let u=P5(n,r,t,a,l.value),d=[];for(let e=0;e<i;e++){let t=e*2*Math.PI/i,a=q5(t,n,r);d.push({rotationDeg:a*180/Math.PI,position:[u*Math.cos(t),u*Math.sin(t),0]})}return R(d)}function Y5(e,t,n,r,i){let a=t*e.toothPitch,o=(t+1)%n*e.toothPitch,s=E5(e.alphaPitch),c=a-e.halfToothAngle-s,l=a+e.halfToothAngle+s,u=O5(e.rb,e.alphaTip,c,r,1),d=O5(e.rb,e.alphaTip,l,r,-1).reverse(),f=jk(u),p=Mk(u),m=jk(d),h=Mk(d),g=[],_=e=>{i.register(e),g.push(e)},v=e.isInternal?e.rb<e.rRoot:e.rb>e.rRoot;v&&_(Fk([e.rRoot*Math.cos(c),e.rRoot*Math.sin(c),0],f));let y=e.rPitch*1e-5,b=Hk(u,{tolerance:y});if(B(b))return b;_(b.value),_(zk(p,[e.rTip*Math.cos(a),e.rTip*Math.sin(a),0],m));let x=Hk(d,{tolerance:y});if(B(x))return x;_(x.value),v&&_(Fk(h,[e.rRoot*Math.cos(l),e.rRoot*Math.sin(l),0]));let S=o-e.halfToothAngle-s,C=.5*(l+S);return S<l&&(C+=Math.PI),_(zk(v?[e.rRoot*Math.cos(l),e.rRoot*Math.sin(l),0]:h,[e.rRoot*Math.cos(C),e.rRoot*Math.sin(C),0],v?[e.rRoot*Math.cos(S),e.rRoot*Math.sin(S),0]:[e.rb*Math.cos(S),e.rb*Math.sin(S),0])),R(g)}function X5(e){return Q5(e,!1)}function Z5(e){return Q5(e,!0)}function Q5(e,t){try{var n=WT();let{teeth:r,moduleSize:i,pressureAngle:a,shift:o,clearance:s,flankThinning:c,samples:l=k5(i)}=e;if(r<4)return z(W(`GEAR_TEETH_TOO_FEW`,`gear needs ≥ 4 teeth, got ${r}`));if(i<=0)return z(W(`GEAR_MODULE_NONPOSITIVE`,`module must be > 0, got ${i}`));let u=A5(r,i,a,o,s,c,t),d=n.u(new iE),f=[];for(let e=0;e<r;e++){let t=Y5(u,e,r,l,d);if(B(t))return t;f.push(...t.value)}let p=Gk(f);return B(p)?p:R(p.value)}catch(e){n.e=e}finally{n.d()}}function $5(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=T5,flankThinning:s=0,bore:c=0,samples:l}=e;if(r<=0)return z(W(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));if(l!==void 0&&(!Number.isInteger(l)||l<1))return z(W(`GEAR_SAMPLES_INVALID`,`samples must be a positive integer; got ${String(l)}`));let u=i*Math.PI/180,d=A5(t,n,u,a,o,s,!1);if(c>0&&c>=2*d.rRoot)return z(W(`GEAR_BORE_TOO_LARGE`,`bore diameter ${c.toFixed(2)} ≥ root diameter ${(2*d.rRoot).toFixed(2)} — would erase the gear teeth`));let f=X5({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(B(f))return f;let p=t7(t,u,a);return o7(f.value,r,c,d,p)}function e7(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=T5,flankThinning:s=0,ringWallThickness:c=2*e.moduleSize,samples:l}=e;if(r<=0)return z(W(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));if(c<=0)return z(W(`GEAR_WALL_NONPOSITIVE`,`ringWallThickness must be > 0`));if(l!==void 0&&(!Number.isInteger(l)||l<1))return z(W(`GEAR_SAMPLES_INVALID`,`samples must be a positive integer; got ${String(l)}`));let u=i*Math.PI/180,d=Z5({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(B(d))return d;let f=A5(t,n,u,a,o,s,!0),p=a7(f.rPitch+c);return B(p)?p:c7(p.value,d.value,r,f,[])}function t7(e,t,n){let r=z5(e,t,n);return r<=0?[]:[{code:`UNDERCUT_RISK`,severity:`warning`,message:`gear is undercut: increase shift by ${r.toFixed(3)} to avoid (z=${e})`,context:{deficit:r,teeth:e}}]}function n7(e){let t=i7(e);if(B(t))return t;let n=t.value,r=r7(n);if(B(r))return r;let{sun:i,planet:a,ring:o}=r.value,s=f7(n,i,a,o),c=u7(a.solid,n);a.solid.delete();let l=d7(o.solid,n.zr),u=p7(n,s);return R({sun:i.solid,planets:c,ring:l,ringTeeth:n.zr,workingPressureAngle:n.alphaW_sp,centerDistance:n.centerDistance,contactRatio:{sunPlanet:s.crSunPlanet,planetRing:s.crPlanetRing},undercutDeficit:{sun:s.undercutSun,planet:s.undercutPlanet},...s.lewisStress?{lewisStress:s.lewisStress}:{},...s.stressConcentrationFactor?{stressConcentrationFactor:s.stressConcentrationFactor}:{},diagnostics:u})}function r7(e){let t=e.samples===void 0?{}:{samples:e.samples},n={moduleSize:e.moduleSize,thickness:e.thickness,pressureAngleDeg:e.pressureAngleDeg,clearance:e.clearance,flankThinning:e.bHalf,...t},r=$5({...n,teeth:e.sunTeeth,shift:e.sunShift,bore:e.sunBore});if(B(r))return r;let i=$5({...n,teeth:e.planetTeeth,shift:e.planetShift,bore:e.planetBore});if(B(i))return r.value.solid.delete(),i;let a=e7({...n,teeth:e.zr,shift:e.ringShift,ringWallThickness:e.ringWallThickness});return B(a)?(r.value.solid.delete(),i.value.solid.delete(),a):R({sun:r.value,planet:i.value,ring:a.value})}function i7(e){let t=e.moduleSize??3,n=e.sunTeeth??15,r=e.planetTeeth??12,i=e.numPlanets??3,a=e.pressureAngleDeg??20,o=a*Math.PI/180,s=e.sunShift??0,c=e.planetShift??0,l=e.ringShift??0;if(e.thickness<=0)return z(W(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));let u=F5(n,r,i,c);if(B(u))return u;let d=G5(n,r),f=M5(o,s,c,n,r);if(B(f))return f;let p=N5(o,c,l,r,d);if(B(p))return p;let m=P5(n,r,t,o,f.value);return R({moduleSize:t,sunTeeth:n,planetTeeth:r,numPlanets:i,pressureAngleDeg:a,alpha:o,alphaW_sp:f.value,alphaW_pr:p.value,clearance:e.clearance??.25,bHalf:W5(e.backlash??0),sunShift:s,planetShift:c,ringShift:l,ringWallThickness:e.ringWallThickness??2*t,thickness:e.thickness,sunBore:e.sunBore??0,planetBore:e.planetBore??0,...e.appliedTorque===void 0?{}:{appliedTorque:e.appliedTorque},...e.samples===void 0?{}:{samples:e.samples},zr:d,centerDistance:m})}function a7(e){try{var t=WT();let n=Gk([t.u(new iE).register(Ik(e,[0,0,0],[0,0,1]))]);return B(n)?n:R(n.value)}catch(e){t.e=e}finally{t.d()}}function o7(e,t,n,r,i){try{var a=WT();let o=a.u(new iE);o.register(e);let s=Kk(e);if(B(s))return s;o.register(s.value);let c=Vq(s.value,[0,0,t]);if(B(c))return c;if(n<=0)return R(l7(c.value,r,i));let l=a.u(new iE);l.register(c.value);let u=s7(n/2);if(B(u))return u;l.register(u.value);let d=Vq(u.value,[0,0,t+1]);if(B(d))return d;l.register(d.value);let f=l.register(rj(d.value,[0,0,-.5])),p=OA(c.value,f);return B(p)?p:R(l7(p.value,r,i))}catch(e){a.e=e}finally{a.d()}}function s7(e){let t=a7(e);return B(t)?t:Kk(t.value)}function c7(e,t,n,r,i){let a=Kk(e,[t]);if(B(a))return a;let o=Vq(a.value,[0,0,n]);return B(o)?o:R(l7(o.value,r,i))}function l7(e,t,n=[]){return{solid:e,diagnostics:n,pitchDiameter:2*t.rPitch,baseDiameter:2*t.rb,tipDiameter:2*t.rTip,rootDiameter:2*t.rRoot}}function u7(e,t){let n=[];try{for(let r=0;r<t.numPlanets;r++){let i=r*2*Math.PI/t.numPlanets,a=ij(e,q5(i,t.sunTeeth,t.planetTeeth)*180/Math.PI);try{let e=[t.centerDistance*Math.cos(i),t.centerDistance*Math.sin(i),0];n.push(rj(a,e))}finally{a.delete()}}return n}catch(e){for(let e of n)e.delete();throw e}}function d7(e,t){let n=K5(t);if(n===0)return e;let r=ij(e,n*180/Math.PI);return e.delete(),r}function f7(e,t,n,r){let i={crSunPlanet:I5(t.tipDiameter/2,t.baseDiameter/2,n.tipDiameter/2,n.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_sp),crPlanetRing:L5(n.tipDiameter/2,n.baseDiameter/2,r.tipDiameter/2,r.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_pr),undercutSun:z5(e.sunTeeth,e.alpha,e.sunShift),undercutPlanet:z5(e.planetTeeth,e.alpha,e.planetShift)};if(e.appliedTorque!==void 0){let t=e.appliedTorque;i.lewisStress={sun:U5(t,e.moduleSize,e.thickness,e.sunTeeth,e.alpha),planet:U5(t*e.planetTeeth/e.sunTeeth,e.moduleSize,e.thickness,e.planetTeeth,e.alpha),ring:U5(t*e.zr/e.sunTeeth,e.moduleSize,e.thickness,e.zr,e.alpha,!0)},i.stressConcentrationFactor={sun:H5(e.sunTeeth,e.alpha),planet:H5(e.planetTeeth,e.alpha),ring:H5(e.zr,e.alpha,!0)}}return i}function p7(e,t){let n=[];t.crSunPlanet<1.2&&n.push({code:`CONTACT_RATIO_LOW_SUN_PLANET`,severity:`warning`,message:`sun-planet contact ratio ${t.crSunPlanet.toFixed(2)} is below 1.2 — may run unevenly`,context:{value:t.crSunPlanet}}),t.crPlanetRing<1.2&&n.push({code:`CONTACT_RATIO_LOW_PLANET_RING`,severity:`warning`,message:`planet-ring contact ratio ${t.crPlanetRing.toFixed(2)} is below 1.2 — may run unevenly`,context:{value:t.crPlanetRing}}),t.undercutSun>0&&n.push({code:`UNDERCUT_RISK_SUN`,severity:`warning`,message:`sun gear is undercut: increase sunShift by ${t.undercutSun.toFixed(3)} to avoid`,context:{deficit:t.undercutSun,sunTeeth:e.sunTeeth}}),t.undercutPlanet>0&&n.push({code:`UNDERCUT_RISK_PLANET`,severity:`warning`,message:`planet gear is undercut: increase planetShift by ${t.undercutPlanet.toFixed(3)} to avoid`,context:{deficit:t.undercutPlanet,planetTeeth:e.planetTeeth}});let r=Math.abs(e.sunShift)+Math.abs(e.planetShift)+Math.abs(e.ringShift);e.appliedTorque!==void 0&&r>.05&&n.push({code:`LEWIS_Y_SHIFT_UNCORRECTED`,severity:`info`,message:`Lewis stress uses unshifted Y(z) and K_f approximations; expect ±5% per 0.1 of profile shift`});let i=e.ringShift-(e.sunShift+2*e.planetShift);return Math.abs(i)>1e-6&&n.push({code:`PLANETARY_SHIFT_KINEMATIC_MISMATCH`,severity:`warning`,message:`ringShift should equal sunShift + 2·planetShift for both meshes to share working PA; off by ${i.toFixed(3)}`,context:{kinematicError:i,sunShift:e.sunShift,planetShift:e.planetShift,ringShift:e.ringShift}}),n}var m7=NZ({addHoles:()=>Vj,bezier:()=>Oj,box:()=>hj,bsplineApprox:()=>Dj,circle:()=>Sj,compound:()=>Lj,cone:()=>vj,cylinder:()=>gj,ellipse:()=>Cj,ellipseArc:()=>Ej,ellipsoid:()=>bj,face:()=>Mj,fill:()=>qk,filledFace:()=>Nj,helix:()=>wj,line:()=>xj,offsetFace:()=>zj,polygon:()=>Fj,polyhedron:()=>U3,sewShells:()=>Bj,solid:()=>Rj,sphere:()=>_j,subFace:()=>Pj,tangentArc:()=>kj,threePointArc:()=>Tj,torus:()=>yj,vertex:()=>Ij,wire:()=>Aj,wireLoop:()=>jj}),h7=NZ({checkBoolean:()=>eN,convexHull:()=>R3,cut:()=>w8,cutAll:()=>MA,cutAllBisect:()=>GM,fuse:()=>C8,fuseAll:()=>jA,fuseAllBisect:()=>YM,hull:()=>L3,intersect:()=>D8,minkowski:()=>H3,section:()=>O8,sectionToFace:()=>k8,slice:()=>j8,split:()=>A8}),g7=NZ({chamfer:()=>I8,draft:()=>B8,fillet:()=>F8,heal:()=>V8,offset:()=>R8,shell:()=>L8,simplify:()=>H8,thicken:()=>z8,variableFillet:()=>TN}),_7=NZ({applyMatrix:()=>b8,clone:()=>y8,composeTransforms:()=>fj,mirror:()=>_8,rotate:()=>g8,scale:()=>v8,transformCopy:()=>x8,translate:()=>m8}),v7=NZ({checkAllInterferences:()=>W6,checkInterference:()=>U6,createDistanceQuery:()=>cP,measureArea:()=>iP,measureCurvatureAt:()=>lP,measureCurvatureAtMid:()=>uP,measureDistance:()=>oP,measureDistanceProps:()=>sP,measureLength:()=>aP,measureLinearProps:()=>nP,measureSurfaceProps:()=>tP,measureVolume:()=>rP,measureVolumeProps:()=>eP}),y7=NZ({blueprintToDXF:()=>xX,exportAssemblySTEP:()=>WF,exportDXF:()=>bX,exportGlb:()=>sX,exportGltf:()=>oX,exportIGES:()=>DM,exportOBJ:()=>XY,exportSTEP:()=>TM,exportSTEPConfigured:()=>iZ,exportSTL:()=>EM,exportThreeMF:()=>BX,importDXF:()=>Y6,importGLB:()=>f8,importIGES:()=>sZ,importOBJ:()=>$6,importSTEP:()=>aZ,importSTL:()=>oZ,importSVG:()=>rZ,importSVGPathD:()=>nZ,importThreeMF:()=>d8}),b7=NZ({cornerFinder:()=>_z,edgeFinder:()=>FL,faceFinder:()=>RL,getSingleFace:()=>VL,vertexFinder:()=>WZ,wireFinder:()=>BL}),x7=NZ({complexExtrude:()=>VN,extrude:()=>X8,guidedSweep:()=>KN,loft:()=>Q8,multiSectionSweep:()=>GN,revolve:()=>Z8,roof:()=>f6,supportExtrude:()=>BN,surfaceFromGrid:()=>M3,surfaceFromImage:()=>F3,sweep:()=>zN,twistExtrude:()=>HN}),S7=NZ({circularPattern:()=>HF,linearPattern:()=>VF}),C7=NZ({CSG_VERSION:()=>3,Evaluator:()=>H2,add:()=>Z$,arbitraryClosedProfile:()=>D0,arbitraryProfileWithVoids:()=>O0,arcTo:()=>_1,asScalarExpr:()=>$$,asVec2Expr:()=>n1,asVec3Expr:()=>t1,asymmetricIProfile:()=>_0,bezierTo:()=>v1,binOp:()=>q$,box:()=>N1,buildVec:()=>X$,cShapeProfile:()=>S0,circle:()=>z1,circleHollowProfile:()=>E0,circularProfile:()=>h0,component:()=>Y$,compound:()=>l0,cone:()=>I1,contour:()=>b1,cut:()=>J1,cutAll:()=>Z1,cylinder:()=>F1,ellipseArcTo:()=>y1,ellipseProfile:()=>C0,emptyFace:()=>W1,emptySolid:()=>U1,emptyWire:()=>G1,extrude:()=>r0,foldExpr:()=>G4,forEachNode:()=>i3,fromJSON:()=>o4,fuse:()=>q1,fuseAll:()=>X1,iBeamProfile:()=>g0,instance:()=>u0,intersect:()=>Y1,lShapeProfile:()=>v0,line:()=>B1,lineTo:()=>g1,loft:()=>s0,mirror:()=>n0,mul:()=>Q$,nodeCount:()=>o3,numLit:()=>U$,optimize:()=>W4,outputKindOf:()=>d0,param:()=>K$,path:()=>o0,polygon:()=>R1,profile:()=>i0,rectangleHollowProfile:()=>T0,rectangularProfile:()=>m0,replaceNode:()=>t3,revolve:()=>c0,rotate:()=>e0,scale:()=>t0,sphere:()=>P1,sweep:()=>a0,tShapeProfile:()=>y0,toJSON:()=>G2,torus:()=>L1,translate:()=>$1,trapeziumProfile:()=>w0,uShapeProfile:()=>b0,unaryOp:()=>J$,vec2Lit:()=>G$,vec3Lit:()=>W$,vertex:()=>V1,withEvaluator:()=>U2,zShapeProfile:()=>x0});export{dz as BaseSketcher2d,fz as BlueprintSketcher,r as BrepBugError,H as BrepErrorCode,o5 as BrepWrapperError,Cy as BrepkitAdapter,Wq as CompoundSketch,o as DEFAULT_CAPABILITIES,CD as DEG2RAD,iE as DisposalScope,a as EXACT_BREP_CAPABILITIES,CJ as FaceSketcher,G as HASH_CODE_MAX,WE as OK,uo as OcctWasmAdapter,wD as RAD2DEG,oJ as Sketch,SJ as Sketcher,sJ as Sketches,KF as addChild,Vj as addHoles,hI as addJoint,V6 as addMate,XI as addStep,CP as adjacentFaces,$E as all,JE as andThen,RZ as applyGlue,b8 as applyMatrix,cM as approximateCurve,mE as as2D,pE as as3D,ZO as asTopo,RP as assignRoles,jN as autoHeal,Oj as bezier,v3 as blueprintToContour,xX as blueprintToDXF,WA as booleanPipeline,h7 as booleans,r5 as boss,hj as box,Dj as bsplineApprox,i as bug,yJ as cameraFromPlane,vJ as cameraLookAt,AP as captureHint,rk as cast,LE as castShape,RE as castShape3D,I8 as chamfer,BM as chamferDistAngleShape,lN as chamferWithEvolution,W6 as checkAllInterferences,eN as checkBoolean,U6 as checkInterference,Sj as circle,HF as circularPattern,vk as classifyPointOnFace,vM as clearMeshCache,y8 as clone,pO as closedWire,uD as collect,QF as collectShapes,gA as colorFaces,hA as colorShape,VN as complexExtrude,fj as composeTransforms,Lj as compound,rJ as compoundSketchExtrude,tJ as compoundSketchFace,aJ as compoundSketchLoft,iJ as compoundSketchRevolve,vD as computationError,i6 as computeStraightSkeleton,vj as cone,x7 as construction,R3 as convexHull,_z as cornerFinder,ZF as countNodes,MF as createAssembly,GF as createAssemblyNode,FY as createBlueprint,_J as createCamera,DE as createCompound,IY as createCompoundBlueprint,_F as createDerivedFaceRef,cP as createDistanceQuery,xE as createEdge,eF as createEdgeRef,CE as createFace,eE as createHandle,YI as createHistory,rE as createKernelHandle,yM as createMeshCache,WO as createNamedPlane,TZ as createOperationRegistry,HO as createPlane,zP as createRef,rL as createRegistry,wE as createShell,TE as createSolid,_Z as createTaskQueue,bE as createVertex,cF as createVertexRef,SE as createWire,wZ as createWorkerClient,AZ as createWorkerHandler,jZ as createWorkerPool,C7 as csg,mo as currentQuality,DY as curve2dBoundingBox,PY as curve2dDistanceFrom,OY as curve2dFirstPoint,NY as curve2dIsOnCurve,kY as curve2dLastPoint,jY as curve2dParameter,AY as curve2dSplitAt,MY as curve2dTangentAt,tM as curveAxis,Zj as curveEndPoint,nM as curveIsClosed,rM as curveIsPeriodic,eM as curveLength,iM as curvePeriod,Qj as curvePointAt,Xj as curveStartPoint,$j as curveTangentAt,w8 as cut,rB as cut2D,E8 as cutAll,GM as cutAllBisect,Kz as cutBlueprints,oN as cutWithEvolution,gj as cylinder,cI as cylindricalJoint,kP as defaultScorer,yZ as dequeueTask,G8 as describe,eY as deserializeDrawing,uL as deserializeHistory,ak as deserializeShape,tk as downcast,B8 as draft,nY as draw,sY as drawCircle,cY as drawEllipse,hY as drawFaceOutline,fY as drawParametricFunction,dY as drawPointsInterpolation,lY as drawPolysides,mY as drawProjection,iY as drawRectangle,rY as drawRoundedRectangle,aY as drawSingleCircle,oY as drawSingleEllipse,uY as drawText,xY as drawingChamfer,vY as drawingCut,bY as drawingFillet,_Y as drawingFuse,yY as drawingIntersect,gY as drawingToSketchOnPlane,t5 as drill,FL as edgeFinder,yP as edgesOfFace,Cj as ellipse,Ej as ellipseArc,bj as ellipsoid,vZ as enqueueTask,z as err,WF as exportAssemblySTEP,bX as exportDXF,sX as exportGlb,oX as exportGltf,DM as exportIGES,XY as exportOBJ,TM as exportSTEP,iZ as exportSTEPConfigured,EM as exportSTL,BX as exportThreeMF,WI as exportURDF,X8 as extrude,Uq as extrudeAll,Mj as face,_k as faceAxis,gk as faceCenter,RL as faceFinder,ck as faceGeomType,lk as faceOrientation,_P as facesOfEdge,vP as facesOfVertex,jQ as fieldBoolean,FQ as fieldContour,MQ as fieldOffset,PQ as fieldReinit,NQ as fieldShell,qk as fill,Nj as filledFace,F8 as fillet,cN as filletWithEvolution,iA as findFacesByTag,YF as findNode,QI as findStep,PN as fixSelfIntersection,MN as fixShape,YE as flatMap,nD as flatten,uk as flipFaceOrientation,oM as flipOrientation,uZ as fontMetrics,yI as forwardKinematics,q8 as fromBREP,T3 as fromKernelDir,w3 as fromKernelPnt,C3 as fromKernelVec,iD as fromNullable,C8 as fuse,tB as fuse2D,T8 as fuseAll,YM as fuseAllBisect,Gz as fuseBlueprints,aN as fuseWithEvolution,A5 as gearGeometry,XZ as getActiveVoxelId,rO as getBounds,LY as getBounds2D,YD as getCompSolids,Yj as getCurveType,JT as getDisposalStats,UD as getEdges,vA as getFaceColor,Ck as getFaceOrigins,aA as getFaceTags,WD as getFaces,uJ as getFont,Wj as getHashCode,$I as getHistoryShape,F as getKernel,FT as getKernelCapabilities,zT as getKernelTier,VM as getNurbsCurveData,HM as getNurbsSurfaceData,aM as getOrientation,RY as getOrientation2D,Co as getPerformanceStats,_A as getShapeColor,vE as getShapeKind,JD as getShells,VL as getSingleFace,qD as getSolids,sk as getSurfaceType,sA as getTagMetadata,KD as getVertices,YZ as getVoxel,GD as getWires,UF as gridPattern,KN as guidedSweep,V8 as heal,ON as healFace,DN as healSolid,kN as healWire,wj as helix,L3 as hull,Y6 as importDXF,f8 as importGLB,sZ as importIGES,$6 as importOBJ,aZ as importSTEP,oZ as importSTL,rZ as importSVG,nZ as importSVGPathD,d8 as importThreeMF,JI as importURDF,UT as init,AT as initFromManifold,VT as initFromOC,ZZ as initVoxel,xk as innerWires,o2 as instance,c2 as instanceCount,s2 as instanceGrid,d2 as instancedMesh,sM as interpolateCurve,D8 as intersect,iB as intersect2D,qz as intersectBlueprints,sN as intersectWithEvolution,HD as invalidateShapeCache,NI as inverseKinematics,y7 as io,yD as ioError,fE as is2D,dE as is3D,mZ as isBatchRequest,BZ as isChamferRadius,lO as isClosedWire,ik as isCompSolid,PE as isCompound,bF as isDerivedFaceRef,pZ as isDisposeRequest,kE as isEdge,xF as isEdgeRef,Y8 as isEmpty,qj as isEqualShape,B as isErr,gZ as isErrorResponse,jE as isFace,CF as isFaceRef,VZ as isFilletRadius,dZ as isInitRequest,zY as isInside2D,a2 as isInstanced,wF as isLineageRef,uE as isLive,dO as isManifoldShell,zZ as isNumber,GE as isOk,fZ as isOperationRequest,uO as isOrientedFace,_O as isPlanarFace,vO as isPlanarWire,mJ as isProjectionPlane,xZ as isQueueEmpty,Kj as isSameShape,IE as isShape1D,FE as isShape3D,ME as isShell,NE as isSolid,hZ as isSuccessResponse,J8 as isValid,fO as isValidSolid,OE as isVertex,SF as isVertexRef,AE as isWire,nO as iterCompSolids,XD as iterEdges,ZD as iterFaces,tO as iterShells,eO as iterSolids,$O as iterTopo,$D as iterVertices,QD as iterWires,FI as jointTrajectory,mI as jointTransform,RI as jointsFromDH,jD as kernelCall,MD as kernelCallRaw,ND as kernelCallScoped,U as kernelError,S$ as latticeInfill,C$ as latticeInfillShape,xj as line,VF as linearPattern,lJ as loadFont,S8 as locate,Q8 as loft,JN as loftAll,NJ as makeBaseBox,$5 as makeExternalGear,e7 as makeInternalGear,KO as makePlane,n7 as makePlanetaryGear,gJ as makeProjectedEdges,hO as manifoldShell,KE as map,rD as mapBoth,qE as mapErr,lD as match,l2 as materialize,iP as measureArea,lP as measureCurvatureAt,uP as measureCurvatureAtMid,oP as measureDistance,sP as measureDistanceProps,aP as measureLength,nP as measureLinearProps,tP as measureSurfaceProps,rP as measureVolume,eP as measureVolumeProps,v7 as measurement,bI as mechanismDOF,U8 as mesh,W8 as meshEdges,MM as meshLODs,PM as meshLODsProgressive,OM as meshMultiLOD,H3 as minkowski,_8 as mirror,WY as mirror2D,TY as mirrorDrawing,i5 as mirrorJoin,g7 as modifiers,cL as modifyStep,_D as moduleInitError,GN as multiSectionSweep,hk as normalAt,R8 as offset,zj as offsetFace,pQ as offsetMesh,gQ as offsetShape,lM as offsetWire2D,R as ok,XE as or,ZE as orElse,ez as organiseBlueprints,mO as orientedFace,yk as outerWire,S7 as patterns,bZ as pendingCount,pD as pipeline,YO as pivotPlane,yO as planarFace,lI as planarJoint,bO as planarWire,J5 as planetPlacements,n5 as pocket,fk as pointOnSurface,nQ as pointsInside,Fj as polygon,U3 as polyhedron,kJ as polysideInnerRadius,vz as polysidesBlueprint,dN as positionOnCurve,HT as prewarm,m7 as primitives,sI as prismaticJoint,bJ as projectEdges,mk as projectPointOnFace,b7 as query,bD as queryError,a5 as rectangularPattern,EZ as registerHandler,jT as registerKernel,RT as registerKernelTier,iL as registerOperation,nL as registerShape,JZ as registerVoxel,SZ as rejectAll,qF as removeChild,bk as removeHolesFromFace,aQ as repairMesh,sL as replayFrom,oL as replayHistory,YT as resetDisposalStats,wo as resetPerformanceStats,sj as resize,$ as resolve,p8 as resolve3D,vF as resolveDerivedFaceRef,wO as resolveDirection,tF as resolveEdgeRef,EF as resolveLineageRef,GO as resolvePlane,GP as resolveRef,OF as resolveRefIn,AF as resolveRefParams,lF as resolveVertexRef,EY as reverseCurve,oI as revoluteJoint,Z8 as revolve,f6 as roof,g8 as rotate,HY as rotate2D,CY as rotateDrawing,yz as roundedRectangleBlueprint,v8 as scale,UY as scale2D,wY as scaleDrawing,ZQ as sdfBox,t$ as sdfCapsule,e$ as sdfCone,$Q as sdfCylinder,p$ as sdfFieldAxialRamp,g$ as sdfFieldClamp,f$ as sdfFieldConst,h$ as sdfFieldFromSdf,m$ as sdfFieldRadialRamp,s$ as sdfLattice,r$ as sdfPlane,QQ as sdfRoundedBox,XQ as sdfSphere,c$ as sdfStrutLattice,a$ as sdfSweep,n$ as sdfTorus,O8 as section,k8 as sectionToFace,lL as serializeHistory,fI as setJointValue,dI as setJointValues,Sk as setShapeOrigin,oA as setTagMetadata,Bj as sewShells,w5 as shape,sQ as shapeToMeshInput,ek as shapeType,TP as sharedEdges,L8 as shell,mQ as shellMesh,_Q as shellShape,uN as shellWithEvolution,H8 as simplify,wJ as sketchCircle,TJ as sketchEllipse,Zq as sketchExtrude,Jq as sketchFace,AJ as sketchFaceOffset,MJ as sketchHelix,$q as sketchLoft,qY as sketchOnFace2D,KY as sketchOnPlane2D,jJ as sketchParametricFunction,OJ as sketchPolysides,EJ as sketchRectangle,Xq as sketchRevolve,DJ as sketchRoundedRectangle,Qq as sketchSweep,cZ as sketchText,Yq as sketchWires,gD as sketcherStateError,j8 as slice,Rj as solid,NN as solidFromShell,H6 as solveAssembly,_j as sphere,uI as sphericalJoint,A8 as split,eL as stepCount,tL as stepsFrom,GY as stretch2D,Pj as subFace,BN as supportExtrude,FZ as supportsConstraintSketch,PZ as supportsProjection,M3 as surfaceFromGrid,F3 as surfaceFromImage,zN as sweep,rA as tagFaces,kj as tangentArc,eD as tap,tD as tapErr,fJ as textBlueprints,lZ as textMetrics,z8 as thicken,dL as thread,Tj as threePointArc,K8 as toBREP,FM as toBufferGeometryData,IM as toGroupedBufferGeometryData,b3 as toKernelVec,RM as toLODGeometryData,zM as toLODGeometryLevels,LM as toLineGeometryData,BY as toSVGPathD,SO as toVec2,xO as toVec3,yj as torus,w$ as tpmsLattice,x8 as transformCopy,_7 as transforms,m8 as translate,VY as translate2D,SY as translateDrawing,JO as translatePlane,dD as tryCatch,fD as tryCatchAsync,HN as twistExtrude,hD as typeCastError,ZI as undoLast,xD as unsupportedError,V as unwrap,cD as unwrapErr,oD as unwrapOr,sD as unwrapOrElse,JF as updateNode,VP as updateRoles,dk as uvBounds,pk as uvCoordinates,gO as validSolid,F5 as validatePlanetary,W as validationError,TN as variableFillet,TO as vecAdd,LO as vecAngle,AO as vecCross,NO as vecDistance,kO as vecDot,FO as vecEquals,IO as vecIsZero,jO as vecLength,MO as vecLengthSq,OO as vecNegate,PO as vecNormalize,RO as vecProjectToPlane,VO as vecRepr,zO as vecRotate,DO as vecScale,EO as vecSub,Ij as vertex,WZ as vertexFinder,cO as vertexPosition,SP as verticesOfEdge,bP as verticesOfFace,hQ as voxelBoolean,AQ as voxelBooleanField,LQ as voxelBooleanFieldShapes,vQ as voxelBooleanShapes,kQ as voxelField,IQ as voxelFieldFromShape,XF as walkAssembly,tQ as windingNumbers,Aj as wire,BL as wireFinder,jj as wireLoop,xP as wiresOfFace,PT as withKernel,O3 as withKernelDir,D3 as withKernelPnt,E3 as withKernelVec,IT as withQuality,aE as withScope,cE as withScopeResult,lE as withScopeResultAsync,BT as withTier,QE as zipResults};
59
+ </Relationships>`),c(`3D/3dmodel.model`,s)])}function VX(e){let t=[],n=/([MmLlHhVvCcSsQqTtAaZz])([^MmLlHhVvCcSsQqTtAaZz]*)/g,r;for(;(r=n.exec(e))!==null;){let e=r[1]??``,n=(r[2]??``).trim(),i=[];if(n){let e=/[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/g,t;for(;(t=e.exec(n))!==null;)i.push(parseFloat(t[0]))}t.push({command:e,args:i})}return t}function HX(e){return[e[0],-e[1]]}function UX(e,t,n,r){let i=0;for(;i<e.length;){let a=(n?t.cx:0)+(e[i]??0),o=(n?t.cy:0)+(e[i+1]??0);i===0?(t.sx=a,t.sy=o):r.push(nR(HX([t.cx,t.cy]),HX([a,o]))),t.cx=a,t.cy=o,i+=2}}function WX(e,t,n,r){let i=0;for(;i<e.length;){let a=(n?t.cx:0)+(e[i]??0),o=(n?t.cy:0)+(e[i+1]??0);r.push(nR(HX([t.cx,t.cy]),HX([a,o]))),t.cx=a,t.cy=o,i+=2}}function GX(e,t,n,r){for(let i of e){let e=n?t.cx+i:i;r.push(nR(HX([t.cx,t.cy]),HX([e,t.cy]))),t.cx=e}}function KX(e,t,n,r){for(let i of e){let e=n?t.cy+i:i;r.push(nR(HX([t.cx,t.cy]),HX([t.cx,e]))),t.cy=e}}function qX(e,t,n,r){let i=0;for(;i+5<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=a+(e[i]??0),c=o+(e[i+1]??0),l=a+(e[i+2]??0),u=o+(e[i+3]??0),d=a+(e[i+4]??0),f=o+(e[i+5]??0);r.push(cR(HX([t.cx,t.cy]),[HX([s,c]),HX([l,u])],HX([d,f]))),t.prevControlX=l,t.prevControlY=u,t.cx=d,t.cy=f,i+=6}}function JX(e,t,n,r){let i=0;for(;i+3<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=t.lastCmd,c=s===`C`||s===`S`?2*t.cx-t.prevControlX:t.cx,l=s===`C`||s===`S`?2*t.cy-t.prevControlY:t.cy,u=a+(e[i]??0),d=o+(e[i+1]??0),f=a+(e[i+2]??0),p=o+(e[i+3]??0);r.push(cR(HX([t.cx,t.cy]),[HX([c,l]),HX([u,d])],HX([f,p]))),t.prevControlX=u,t.prevControlY=d,t.cx=f,t.cy=p,t.lastCmd=`S`,i+=4}}function YX(e,t,n,r){let i=0;for(;i+3<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=a+(e[i]??0),c=o+(e[i+1]??0),l=a+(e[i+2]??0),u=o+(e[i+3]??0);r.push(cR(HX([t.cx,t.cy]),[HX([s,c])],HX([l,u]))),t.prevControlX=s,t.prevControlY=c,t.cx=l,t.cy=u,i+=4}}function XX(e,t,n,r){let i=0;for(;i+1<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=t.lastCmd,c=s===`Q`||s===`T`?2*t.cx-t.prevControlX:t.cx,l=s===`Q`||s===`T`?2*t.cy-t.prevControlY:t.cy,u=a+(e[i]??0),d=o+(e[i+1]??0);r.push(cR(HX([t.cx,t.cy]),[HX([c,l])],HX([u,d]))),t.prevControlX=c,t.prevControlY=l,t.cx=u,t.cy=d,t.lastCmd=`T`,i+=2}}function ZX(e,t,n,r,i){let a=Math.max(n,r),o=i?1:-1,s=t+2*o*a,c=[e-o*a,t+o*a],l=[e+o*a,t+o*a];try{return[rR(HX([e,t]),HX(c),HX([e,s])),rR(HX([e,s]),HX(l),HX([e,t]))]}catch{return[]}}function QX(e,t,n,r,i,a,o,s){let c=.5,l=e+c*(n-e),u=t+c*(r-t),d=n-e,f=r-t,p=Math.sqrt(d*d+f*f),m=Math.max(i,a),h=p/2,g=h<m?m-Math.sqrt(m*m-h*h):m,_=(o===s?-1:1)*(s?1:-1),v=-f/p,y=d/p,b=l+_*g*v,x=u+_*g*y;try{return[rR(HX([e,t]),HX([b,x]),HX([n,r]))]}catch{return[nR(HX([e,t]),HX([n,r]))]}}function $X(e,t,n,r){let i=0;for(;i+6<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=Math.abs(e[i]??0),c=Math.abs(e[i+1]??0),l=(e[i+3]??0)!==0,u=(e[i+4]??0)!==0,d=a+(e[i+5]??0),f=o+(e[i+6]??0);if(s===0||c===0)r.push(nR(HX([t.cx,t.cy]),HX([d,f])));else{let e=d-t.cx,n=f-t.cy;Math.sqrt(e*e+n*n)<1e-10?r.push(...ZX(t.cx,t.cy,s,c,u)):r.push(...QX(t.cx,t.cy,d,f,s,c,l,u))}t.cx=d,t.cy=f,i+=7}}function eZ(e,t){(Math.abs(e.cx-e.sx)>1e-10||Math.abs(e.cy-e.sy)>1e-10)&&t.push(nR(HX([e.cx,e.cy]),HX([e.sx,e.sy]))),e.cx=e.sx,e.cy=e.sy}function tZ(e){let t=VX(e),n=[],r={cx:0,cy:0,sx:0,sy:0,prevControlX:0,prevControlY:0,lastCmd:``};for(let{command:e,args:i}of t){let t=e===e.toLowerCase(),a=e.toUpperCase();switch(a){case`M`:UX(i,r,t,n);break;case`L`:WX(i,r,t,n);break;case`H`:GX(i,r,t,n);break;case`V`:KX(i,r,t,n);break;case`C`:qX(i,r,t,n);break;case`S`:JX(i,r,t,n);break;case`Q`:YX(i,r,t,n);break;case`T`:XX(i,r,t,n);break;case`A`:$X(i,r,t,n);break;case`Z`:eZ(r,n)}a!==`S`&&a!==`T`&&(r.lastCmd=a)}return n}function nZ(e){try{let t=tZ(e);return t.length===0?z(yD(`SVG_EMPTY_PATH`,`SVG path produced no curves`)):R(new ER(t))}catch(e){return z(yD(`SVG_PARSE_FAILED`,`Failed to parse SVG path: ${e instanceof Error?e.message:String(e)}`))}}function rZ(e){try{let t=/\bd\s*=\s*(?:"([^"]*)"|'([^']*)')/,n=[],r=e.toLowerCase(),i=0;for(;i<r.length;){let a=r.indexOf(`<path `,i);if(a===-1)break;let o=e.indexOf(`>`,a);if(o===-1)break;let s=e.slice(a,o+1);i=o+1;let c=t.exec(s),l=c?.[1]??c?.[2];if(!l)continue;let u=nZ(l);u.ok&&n.push(u.value)}return n.length===0?z(yD(`SVG_NO_PATHS`,`No <path> elements found in SVG`)):R(n)}catch(e){return z(yD(`SVG_IMPORT_FAILED`,`Failed to import SVG: ${e instanceof Error?e.message:String(e)}`))}}function iZ(e,t){try{let n=F(),r=e.map(e=>({shape:e.shape.wrapped,name:e.name,color:e.color?[...e.color]:void 0}));return R(n.exportSTEPConfigured(r,t))}catch(e){return z(yD(H.STEP_EXPORT_CONFIGURED_FAILED,`Configured STEP export failed`,e))}}async function aZ(e){try{let t=await e.arrayBuffer(),n=F().importSTEP(t);if(n.length===0)return z(yD(`STEP_IMPORT_FAILED`,`STEP file contains no valid geometry`));for(let e=1;e<n.length;e++){let t=n[e];t&&F().dispose(t)}return R(I(n[0]))}catch(e){return z(yD(`STEP_IMPORT_FAILED`,`Failed to load STEP file`,e))}}async function oZ(e){try{let t=await e.arrayBuffer(),n=F().importSTL(t);return n.IsNull()?z(yD(`STL_IMPORT_FAILED`,`Failed to create solid from STL mesh`)):R(I(n))}catch(e){return z(yD(`STL_IMPORT_FAILED`,`Failed to load STL file`,e))}}async function sZ(e){try{let t=await e.arrayBuffer(),n=F().importIGES(t);if(n.length===0)return z(yD(`IGES_IMPORT_FAILED`,`IGES file contains no valid geometry`));for(let e=1;e<n.length;e++){let t=n[e];t&&F().dispose(t)}return R(I(n[0]))}catch(e){return z(yD(`IGES_IMPORT_FAILED`,`Failed to load IGES file`,e))}}function cZ(e,t,n={}){let r=fJ(e,t);return new sJ((typeof n.plane==`string`||n.plane===void 0?r.sketchOnPlane(n.plane,n.origin):r.sketchOnPlane(n.plane)).map(e=>Array.isArray(e)?new Wq(e.map(Gq)):Gq(e)))}function lZ(e,t){let n=t?.fontSize??1,r=uJ(t?.fontFamily);if(!r)return z(W(H.NO_FONT_LOADED,`No font loaded. Call loadFont() first.`,void 0,void 0,`Load a font with loadFont() before calling textMetrics()`));let i=r.getAdvanceWidth(e,n),a=n/r.unitsPerEm,o=r.ascender*a,s=r.descender*a;return R({width:i,height:o-s,ascender:o,descender:s})}function uZ(e){let t=e?.fontSize??1,n=uJ(e?.fontFamily);if(!n)return z(W(H.NO_FONT_LOADED,`No font loaded. Call loadFont() first.`,void 0,void 0,`Load a font with loadFont() before calling fontMetrics()`));let r=t/n.unitsPerEm,i=n.ascender*r,a=n.descender*r,o=(n.tables?.os2?.sTypoLineGap??0)*r;return R({ascender:i,descender:a,unitsPerEm:n.unitsPerEm,lineHeight:i-a+o})}function dZ(e){return e.type===`init`}function fZ(e){return e.type===`operation`}function pZ(e){return e.type===`dispose`}function mZ(e){return e.type===`batch`}function hZ(e){return e.success}function gZ(e){return!e.success}function _Z(){return{pending:new Map}}function vZ(e,t){let n=new Map(e.pending);return n.set(t.id,t),{pending:n}}function yZ(e,t){let n=e.pending.get(t);if(!n)return{queue:e,task:void 0};let r=new Map(e.pending);return r.delete(t),{queue:{pending:r},task:n}}function bZ(e){return e.pending.size}function xZ(e){return e.pending.size===0}function SZ(e,t){for(let n of e.pending.values())n.reject(t);return{pending:new Map}}function CZ(e,t){let n=t.data,r=e.get(n.id);if(r){if(e.delete(n.id),hZ(n)){let e={};n.resultBrep!==void 0&&(e.resultBrep=n.resultBrep),n.resultData!==void 0&&(e.resultData=n.resultData),r.resolve(e)}else r.reject(Error(n.error))}}function wZ(e){let{worker:t,wasmUrl:n}=e,r=new Map,i=!1;function a(){return crypto.randomUUID()}function o(e){CZ(r,e)}t.addEventListener(`message`,o);function s(e){return i?Promise.reject(Error(`WorkerClient has been disposed`)):new Promise((n,i)=>{r.set(e.id,{resolve:n,reject:i}),t.postMessage(e)})}return{async init(){await s({id:a(),type:`init`,...n===void 0?{}:{wasmUrl:n}})},async execute(e,t,n){return s({id:a(),type:`operation`,operation:e,shapesBrep:t,parameters:n})},executeBatch(e){let t=e.length;return s({id:a(),type:`batch`,operations:e}).then(e=>{let n=e.resultData;if(!Array.isArray(n)||n.length!==t)throw Error(`Invalid batch response: expected ${t} results`);return n})},dispose(){i=!0;for(let e of r.values())e.reject(Error(`WorkerClient disposed`));r.clear(),t.removeEventListener(`message`,o);let e={id:a(),type:`dispose`};t.postMessage(e)}}}function TZ(){return{operations:new Map}}function EZ(e,t,n){let r=new Map(e.operations);return r.set(t,n),{operations:r}}function DZ(e){return e instanceof Error?e.message:String(e)}function OZ(e,t,n,r){let i=e.operations.get(t);if(!i)return{success:!1,error:`Unknown operation: ${t}`};try{let e=i(n,r);return{success:!0,...e.resultBrep===void 0?{}:{resultBrep:e.resultBrep},...e.resultData===void 0?{}:{resultData:e.resultData}}}catch(e){return{success:!1,error:DZ(e)}}}function kZ(e,t){return t.success?{id:e,success:!0,...t.resultBrep===void 0?{}:{resultBrep:t.resultBrep},...t.resultData===void 0?{}:{resultData:t.resultData}}:{id:e,success:!1,error:t.error??`operation failed`}}function AZ(e,t){let n=globalThis;n.onmessage=async r=>{let i=r.data;if(dZ(i)){try{await t(i.wasmUrl);let e={id:i.id,success:!0};n.postMessage(e)}catch(e){let t={id:i.id,success:!1,error:DZ(e)};n.postMessage(t)}return}if(fZ(i)){let t=OZ(e,i.operation,i.shapesBrep,i.parameters);n.postMessage(kZ(i.id,t));return}if(mZ(i)){let t=i.operations.map(t=>OZ(e,t.operation,t.shapesBrep,t.params)),r={id:i.id,success:!0,resultData:t};n.postMessage(r);return}if(pZ(i)){let e={id:i.id,success:!0};n.postMessage(e),n.close?.()}}}function jZ(e){let{workers:t,wasmUrl:n}=e;if(t.length===0)throw Error(`createWorkerPool requires at least one worker`);let r=t.map(e=>({client:wZ({worker:e,...n===void 0?{}:{wasmUrl:n}}),inFlight:0})),i=!1;function a(){return r.reduce((e,t)=>t.inFlight<e.inFlight?t:e)}function o(e,t,n){if(i)return Promise.reject(Error(`WorkerPool has been disposed`));let r=a();return r.inFlight+=1,r.client.execute(e,t,n).finally(()=>{--r.inFlight})}function s(){if(!i){i=!0;for(let e of r)e.client.dispose()}}return{size:r.length,async init(){try{await Promise.all(r.map(e=>e.client.init()))}catch(e){throw s(),e}},execute:o,executeBatch(e){return Promise.all(e.map(e=>o(e.operation,e.shapesBrep,e.params)))},inFlight(){return r.map(e=>e.inFlight)},dispose:s}}var MZ=Object.defineProperty,NZ=(e,t)=>{let n={};for(var r in e)MZ(n,r,{get:e[r],enumerable:!0});return t||MZ(n,Symbol.toStringTag,{value:`Module`}),n};function PZ(e){return`projectEdges`in e}function FZ(e){return`sketchNew`in e&&`sketchDof`in e}var IZ=1,LZ=2;function RZ(e,t){t===`commonFace`&&e.SetGlue(IZ),t===`sameFace`&&e.SetGlue(LZ)}function zZ(e){return typeof e==`number`}function BZ(e){if(typeof e==`number`)return!0;if(typeof e==`object`&&e){let t=e;return`distances`in t&&Array.isArray(t.distances)&&`selectedFace`in t||`distance`in t&&`angle`in t&&`selectedFace`in t}return!1}function VZ(e){return typeof e==`number`?!0:Array.isArray(e)&&e.length===2?e.every(zZ):!1}function HZ(e,t){let n=n=>{let r=e.findAll(n);if(r.length===0)return[];let i=0,a=NO(cO(jk(r)),t);for(let e=1;e<r.length;e++){let n=NO(cO(Ak(r,e)),t);n<a&&(a=n,i=e)}return[Ak(r,i)]},r=e=>{let t=n(e);return t.length===0?z(bD(`FINDER_NOT_UNIQUE`,`Finder expected a unique match but found 0 element(s)`)):R(jk(t))};return{...e,findAll:n,findUnique:r}}function UZ(e){return kL(`vertex`,e,UZ,(t,n)=>({nearestTo:t=>HZ(UZ(e),t),atPosition:(e,t=1e-4)=>n(n=>NO(cO(n),e)<t),withinBox:(e,t)=>n(n=>{let r=cO(n);return r[0]>=e[0]-1e-6&&r[0]<=t[0]+1e-6&&r[1]>=e[1]-1e-6&&r[1]<=t[1]+1e-6&&r[2]>=e[2]-1e-6&&r[2]<=t[2]+1e-6}),atDistance:(e,t=[0,0,0],r=1e-4)=>n(n=>{let i=cO(n);return Math.abs(NO(i,t)-e)<r})}))}function WZ(){return UZ([])}var GZ=new Map,KZ=null,qZ=null;function JZ(e,t){GZ.set(e,t),KZ||=e,e===KZ&&(qZ=t)}function YZ(e){if(!e&&qZ)return qZ;let t=e??KZ;if(!t)throw Error(`brepjs voxel engine not initialized. Call initVoxel() (or registerVoxel()) before using voxel operations.`);let n=GZ.get(t);if(!n)throw Error(`brepjs: voxel engine '${t}' is not registered.`);return n}function XZ(){return KZ}function ZZ(e,t=`voxel`){JZ(t,e),KZ=t,qZ=e}function QZ(e){if(e.vertices.length%3!=0)return W(`VOXEL_INVALID_MESH`,`mesh.vertices length must be a multiple of 3 (flat xyz).`);if(e.triangles.length%3!=0)return W(`VOXEL_INVALID_MESH`,`mesh.triangles length must be a multiple of 3.`);let t=e.vertices.length/3;for(let n=0;n<e.triangles.length;n++){let r=e.triangles[n];if(r===void 0||r>=t)return W(`VOXEL_INVALID_TRIANGLE_INDEX`,`triangle index ${r} at position ${n} is out of range for ${t} vertices.`)}return null}function $Z(e,t){return QZ(e)||(t.length%3==0?null:W(`VOXEL_INVALID_QUERIES`,`queries length must be a multiple of 3 (flat xyz).`))}function eQ(e){try{return R(YZ(e))}catch(e){return z(_D(`VOXEL_NOT_INITIALIZED`,e instanceof Error?e.message:`voxel engine not initialized`,e))}}function tQ(e,t,n){let r=$Z(e,t);if(r)return z(r);let i=eQ(n);return B(i)?i:R(i.value.winding_numbers(e.vertices,e.triangles,t))}function nQ(e,t,n){let r=$Z(e,t);if(r)return z(r);let i=eQ(n);if(B(i))return i;let a=i.value.points_inside(e.vertices,e.triangles,t);return R(Array.from(a,e=>e===1))}var rQ=48,iQ=2;function aQ(e,t,n){let r=QZ(e);if(r)return z(r);if(e.vertices.length===0||e.triangles.length===0)return z(W(`VOXEL_EMPTY_MESH`,`repairMesh requires a non-empty triangle mesh.`));let i=t?.resolution??rQ,a=t?.padding??iQ;if(!Number.isInteger(i)||i<1)return z(W(`VOXEL_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`));if(!Number.isInteger(a)||a<1)return z(W(`VOXEL_INVALID_PADDING`,`padding must be an integer >= 1.`));let o=eQ(n);if(B(o))return o;try{try{var s=WT();let t=s.u(o.value.repair_mesh(e.vertices,e.triangles,i,a)),n=t.positions.length/3;return R({vertices:t.positions,normals:t.normals,triangles:t.indices,uvs:new Float32Array(n*2),faceGroups:[{start:0,count:t.indices.length/3,faceHash:0}]})}catch(e){s.e=e}finally{s.d()}}catch(e){return z(vD(`VOXEL_REPAIR_FAILED`,e instanceof Error?e.message:`voxel repair failed (grid too large?).`,e))}}var oQ=.001;function sQ(e,t=oQ){try{let n=bM(e,{tolerance:t});return n.vertices.length===0||n.triangles.length===0?z(vD(`VOXEL_SHAPE_MESH_EMPTY`,`shape tessellated to an empty triangle mesh.`)):R({vertices:n.vertices,triangles:n.triangles})}catch(e){return z(vD(`VOXEL_SHAPE_MESH_FAILED`,e instanceof Error?e.message:`failed to mesh shape for voxel op.`,e))}}var cQ=48,lQ=2,uQ={union:0,intersection:1,difference:2};function dQ(e){let t=e?.resolution??cQ,n=e?.padding??lQ;return!Number.isInteger(t)||t<1?z(W(`VOXEL_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(n)||n<1?z(W(`VOXEL_INVALID_PADDING`,`padding must be an integer >= 1.`)):R({resolution:t,padding:n})}function fQ(e){if(e.positions.length===0||e.indices.length===0)return z(vD(`VOXEL_DEGENERATE_RESULT`,`the voxel operation produced an empty mesh (over-shrunk offset or disjoint operands?).`));let t=e.positions.length/3;return R({vertices:e.positions,normals:e.normals,triangles:e.indices,uvs:new Float32Array(t*2),faceGroups:[{start:0,count:e.indices.length/3,faceHash:0}]})}function pQ(e,t,n,r){let i=QZ(e);if(i)return z(i);if(e.vertices.length===0||e.triangles.length===0)return z(W(`VOXEL_EMPTY_MESH`,`offsetMesh requires a non-empty triangle mesh.`));if(!Number.isFinite(t))return z(W(`VOXEL_INVALID_DISTANCE`,`distance must be a finite number.`));let a=dQ(n);if(B(a))return a;let o=eQ(r);if(B(o))return o;try{try{var s=WT();return fQ(s.u(o.value.offset_mesh(e.vertices,e.triangles,t,a.value.resolution,a.value.padding)))}catch(e){s.e=e}finally{s.d()}}catch(e){return z(vD(`VOXEL_OFFSET_FAILED`,e instanceof Error?e.message:`voxel offset failed (grid too large?).`,e))}}function mQ(e,t,n,r){let i=QZ(e);if(i)return z(i);if(e.vertices.length===0||e.triangles.length===0)return z(W(`VOXEL_EMPTY_MESH`,`shellMesh requires a non-empty triangle mesh.`));if(!Number.isFinite(t)||t<=0)return z(W(`VOXEL_INVALID_THICKNESS`,`thickness must be a finite number > 0.`));let a=dQ(n);if(B(a))return a;let o=eQ(r);if(B(o))return o;try{try{var s=WT();return fQ(s.u(o.value.shell_mesh(e.vertices,e.triangles,t,a.value.resolution,a.value.padding)))}catch(e){s.e=e}finally{s.d()}}catch(e){return z(vD(`VOXEL_SHELL_FAILED`,e instanceof Error?e.message:`voxel shell failed (grid too large?).`,e))}}function hQ(e,t,n,r,i){let a=QZ(e);if(a)return z(a);let o=QZ(t);if(o)return z(o);if(e.vertices.length===0||e.triangles.length===0)return z(W(`VOXEL_EMPTY_MESH`,`voxelBoolean requires a non-empty mesh for operand A.`));if(t.vertices.length===0||t.triangles.length===0)return z(W(`VOXEL_EMPTY_MESH`,`voxelBoolean requires a non-empty mesh for operand B.`));let s=uQ[n],c=dQ(r);if(B(c))return c;let l=eQ(i);if(B(l))return l;try{try{var u=WT();return fQ(u.u(l.value.voxel_boolean(e.vertices,e.triangles,t.vertices,t.triangles,s,c.value.resolution,c.value.padding)))}catch(e){u.e=e}finally{u.d()}}catch(e){return z(vD(`VOXEL_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel boolean failed (grid too large?).`,e))}}function gQ(e,t,n,r){let i=sQ(e);return B(i)?i:pQ(i.value,t,n,r)}function _Q(e,t,n,r){let i=sQ(e);return B(i)?i:mQ(i.value,t,n,r)}function vQ(e,t,n,r,i){let a=sQ(e);if(B(a))return a;let o=sQ(t);return B(o)?o:hQ(a.value,o.value,n,r,i)}var yQ=48,bQ=2,xQ={union:0,intersection:1,difference:2};function SQ(e){let t=e?.resolution??yQ,n=e?.padding??bQ;return!Number.isInteger(t)||t<1?z(W(`VOXEL_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(n)||n<1?z(W(`VOXEL_INVALID_PADDING`,`padding must be an integer >= 1.`)):R({resolution:t,padding:n})}function CQ(e){try{var t=WT();let n=e.contour(),{positions:r,normals:i,indices:a}=t.u({value:n,[Symbol.dispose](){n.free()}}).value;if(r.length===0||a.length===0)return z(vD(`VOXEL_DEGENERATE_RESULT`,`the voxel field contoured to an empty mesh (over-shrunk offset or disjoint operands?).`));let o=r.length/3;return R({vertices:r,normals:i,triangles:a,uvs:new Float32Array(o*2),faceGroups:[{start:0,count:a.length/3,faceHash:0}]})}catch(e){t.e=e}finally{t.d()}}function wQ(e){return{raw:e,delete(){e.free()}}}function TQ(e){return EQ(e)}function EQ(e){let t=rE(wQ(e)),n={get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()},boolean(e,t){return this.value.boolean(e.value,xQ[t]),n},offset(e){return this.value.offset(e),n},shell(e){return this.value.shell(e),n},reinit(){return this.value.reinit(),n},contour(){let e=CQ(this.value);if(B(e))throw Error(e.error.message);return e.value}};return n}function DQ(e){return!e.disposed}function OQ(){return z(W(`VOXEL_FIELD_DISPOSED`,`the voxel field handle has been disposed.`))}function kQ(e,t,n){let r=QZ(e);if(r)return z(r);if(e.vertices.length===0||e.triangles.length===0)return z(W(`VOXEL_EMPTY_MESH`,`voxelField requires a non-empty triangle mesh.`));let i=SQ(t);if(B(i))return i;let a=eQ(n);if(B(a))return a;try{return R(EQ(new a.value.VoxelField(e.vertices,e.triangles,i.value.resolution,i.value.padding)))}catch(e){return z(vD(`VOXEL_FIELD_VOXELIZE_FAILED`,e instanceof Error?e.message:`voxel field voxelization failed (grid too large or non-dense?).`,e))}}function AQ(e,t,n,r,i){let a=QZ(e);if(a)return z(a);let o=QZ(t);if(o)return z(o);if(e.vertices.length===0||e.triangles.length===0)return z(W(`VOXEL_EMPTY_MESH`,`voxelBooleanField requires a non-empty mesh for operand A.`));if(t.vertices.length===0||t.triangles.length===0)return z(W(`VOXEL_EMPTY_MESH`,`voxelBooleanField requires a non-empty mesh for operand B.`));let s=SQ(r);if(B(s))return s;let c=eQ(i);if(B(c))return c;try{return R(EQ(c.value.VoxelField.boolean_of(e.vertices,e.triangles,t.vertices,t.triangles,xQ[n],s.value.resolution,s.value.padding)))}catch(e){return z(vD(`VOXEL_FIELD_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel field boolean failed (grid too large or non-dense?).`,e))}}function jQ(e,t,n){if(!DQ(e)||!DQ(t))return OQ();try{return e.value.boolean(t.value,xQ[n]),R(e)}catch(e){return z(vD(`VOXEL_FIELD_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel field boolean failed (dim mismatch?).`,e))}}function MQ(e,t){if(!DQ(e))return OQ();if(!Number.isFinite(t))return z(W(`VOXEL_INVALID_DISTANCE`,`distance must be a finite number.`));try{return e.value.offset(t),R(e)}catch(e){return z(vD(`VOXEL_FIELD_OFFSET_FAILED`,e instanceof Error?e.message:`voxel field offset failed.`,e))}}function NQ(e,t){if(!DQ(e))return OQ();if(!Number.isFinite(t)||t<=0)return z(W(`VOXEL_INVALID_THICKNESS`,`thickness must be a finite number > 0.`));try{return e.value.shell(t),R(e)}catch(e){return z(vD(`VOXEL_FIELD_SHELL_FAILED`,e instanceof Error?e.message:`voxel field shell failed.`,e))}}function PQ(e){if(!DQ(e))return OQ();try{return e.value.reinit(),R(e)}catch(e){return z(vD(`VOXEL_FIELD_REINIT_FAILED`,e instanceof Error?e.message:`voxel field reinit failed.`,e))}}function FQ(e){if(!DQ(e))return OQ();try{return CQ(e.value)}catch(e){return z(vD(`VOXEL_FIELD_CONTOUR_FAILED`,e instanceof Error?e.message:`voxel field contour failed.`,e))}}function IQ(e,t,n){let r=sQ(e);return B(r)?r:kQ(r.value,t,n)}function LQ(e,t,n,r,i){let a=sQ(e);if(B(a))return a;let o=sQ(t);return B(o)?o:AQ(a.value,o.value,n,r,i)}var RQ=48,zQ=2;function BQ(e){try{return R(YZ(e))}catch(e){return z(_D(`VOXEL_NOT_INITIALIZED`,e instanceof Error?e.message:`voxel engine not initialized`,e))}}function VQ(e){let t=e?.resolution??RQ,n=e?.padding??zQ;return!Number.isInteger(t)||t<1?z(W(`SDF_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(n)||n<1?z(W(`SDF_INVALID_PADDING`,`padding must be an integer >= 1.`)):R({resolution:t,padding:n})}function HQ(e){return{raw:e,delete(){e.free()}}}var UQ={offsetField(e){return WQ(this.value.offset_field(e.value))},roundField(e){return WQ(this.value.round_field(e.value))},shellField(e){return WQ(this.value.shell_field(e.value))},smoothUnionField(e,t){return WQ(this.value.smooth_union_field(e.value,t.value))}};function WQ(e){let t=rE(HQ(e));return{get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()},union(e){return WQ(this.value.union(e.value))},intersection(e){return WQ(this.value.intersection(e.value))},difference(e){return WQ(this.value.difference(e.value))},smoothUnion(e,t){return WQ(this.value.smooth_union(e.value,t))},smoothIntersection(e,t){return WQ(this.value.smooth_intersection(e.value,t))},smoothDifference(e,t){return WQ(this.value.smooth_difference(e.value,t))},offset(e){return WQ(this.value.offset(e))},round(e){return WQ(this.value.round(e))},shell(e){return WQ(this.value.shell(e))},onion(e){return WQ(this.value.onion(e))},...UQ,translate(e,t,n){return WQ(this.value.translate(e,t,n))},rotate(e,t,n,r){return WQ(this.value.rotate(e,t,n,r))},scale(e){return WQ(this.value.scale(e))},rasterize(e){return GQ(this.value,e)},rasterizeIn(e,t){return KQ(this.value,e,t)}}}function GQ(e,t){let n=VQ(t);if(B(n))return n;try{return R(TQ(e.rasterize(n.value.resolution,n.value.padding)))}catch(e){return qQ(e)}}function KQ(e,t,n){let r=VQ(n);if(B(r))return r;let i=JQ(t);if(i)return z(i);try{return R(TQ(e.rasterize_in(t.min[0],t.min[1],t.min[2],t.max[0],t.max[1],t.max[2],r.value.resolution,r.value.padding)))}catch(e){return qQ(e)}}function qQ(e){return z(vD(`SDF_RASTERIZE_FAILED`,e instanceof Error?e.message:`SDF rasterization failed (grid too large?).`,e))}function JQ(e){if(![...e.min,...e.max].every(e=>Number.isFinite(e)))return W(`SDF_INVALID_BOUNDS`,`bounds must be finite numbers.`);for(let t=0;t<3;t++)if(e.max[t]<=e.min[t])return W(`SDF_INVALID_BOUNDS`,`bounds max must exceed min on every axis.`);return null}function YQ(e,t){let n=BQ(t);if(B(n))return n;try{return R(WQ(e(n.value)))}catch(e){return z(vD(`SDF_BUILD_FAILED`,e instanceof Error?e.message:`SDF primitive construction failed.`,e))}}function XQ(e,t){return YQ(t=>t.Sdf.sphere(e),t)}function ZQ(e,t,n,r){return YQ(r=>r.Sdf.box_(e,t,n),r)}function QQ(e,t,n,r,i){return YQ(i=>i.Sdf.rounded_box(e,t,n,r),i)}function $Q(e,t,n){return YQ(n=>n.Sdf.cylinder(e,t),n)}function e$(e,t,n){return YQ(n=>n.Sdf.cone(e,t),n)}function t$(e,t,n,r){return YQ(r=>r.Sdf.capsule(e[0],e[1],e[2],t[0],t[1],t[2],n),r)}function n$(e,t,n){return YQ(n=>n.Sdf.torus(e,t),n)}function r$(e,t,n){return YQ(n=>n.Sdf.plane(e[0],e[1],e[2],t),n)}function i$(e){if(e.length<2)return z(W(`SDF_INVALID_SPINE`,`sweep spine needs at least 2 points.`));let t=new Float64Array(e.length*3);for(let n=0;n<e.length;n++){let r=e[n];if(!r.every(e=>Number.isFinite(e)))return z(W(`SDF_INVALID_SPINE`,`sweep spine coordinates must be finite.`));t[n*3]=r[0],t[n*3+1]=r[1],t[n*3+2]=r[2]}return R(t)}function a$(e,t,n,r){let i=i$(e);if(B(i))return i;let a=n?.closed??!1;return YQ(e=>e.Sdf.sweep(i.value,t.value,a),r)}var o$={gyroid:0,schwarzP:1,diamond:2};function s$(e,t,n,r){let i=o$[e];return i===void 0?z(W(`SDF_INVALID_LATTICE_KIND`,`unknown lattice kind: ${e}`)):YQ(e=>e.Sdf.lattice(i,t.value,n.value),r)}function c$(e,t,n){return YQ(n=>n.Sdf.strut_lattice(e,t.value),n)}function l$(e){return{raw:e,delete(){e.free()}}}function u$(e){let t=rE(l$(e));return{get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()}}}function d$(e,t){let n=BQ(t);if(B(n))return n;try{return R(u$(e(n.value)))}catch(e){return z(vD(`SDF_FIELD_BUILD_FAILED`,e instanceof Error?e.message:`scalar field construction failed.`,e))}}function f$(e,t){return d$(t=>t.ScalarField.constant(e),t)}function p$(e,t,n,r,i,a){return d$(a=>a.ScalarField.axial_ramp(e,t,n,r,i),a)}function m$(e,t,n,r,i,a,o){return d$(o=>o.ScalarField.radial_ramp(e[0],e[1],e[2],t,n,r,i,a),o)}function h$(e,t,n,r){return d$(r=>r.ScalarField.from_sdf(e.value,t,n),r)}function g$(e,t,n,r){return d$(r=>r.ScalarField.clamp(e.value,t,n),r)}var _$={gyroid:0,schwarzP:1,diamond:2},v$=48,y$=2;function b$(e){let t=_$[e.type];if(t===void 0)return z(W(`LATTICE_INVALID_TYPE`,`lattice type must be one of gyroid, schwarzP, diamond (got '${e.type}').`));if(!(e.period>0))return z(W(`LATTICE_INVALID_PERIOD`,`period must be > 0.`));if(!(e.thickness>0))return z(W(`LATTICE_INVALID_THICKNESS`,`thickness must be > 0.`));let n=e.resolution??v$,r=e.padding??y$;return!Number.isInteger(n)||n<1?z(W(`LATTICE_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(r)||r<1?z(W(`LATTICE_INVALID_PADDING`,`padding must be an integer >= 1.`)):R({tag:t,period:e.period,thickness:e.thickness,resolution:n,padding:r})}function x$(e){let t=e.positions.length/3;return{vertices:e.positions,normals:e.normals,triangles:e.indices,uvs:new Float32Array(t*2),faceGroups:[{start:0,count:e.indices.length/3,faceHash:0}]}}function S$(e,t,n){let r=QZ(e);if(r)return z(r);if(e.vertices.length===0||e.triangles.length===0)return z(W(`LATTICE_EMPTY_MESH`,`latticeInfill requires a non-empty triangle mesh.`));let i=b$(t);if(B(i))return i;let a=eQ(n);if(B(a))return a;let{tag:o,period:s,thickness:c,resolution:l,padding:u}=i.value;try{try{var d=WT();return R(x$(d.u(a.value.lattice_infill(e.vertices,e.triangles,l,u,o,s,c))))}catch(e){d.e=e}finally{d.d()}}catch(e){return z(vD(`LATTICE_INFILL_FAILED`,e instanceof Error?e.message:`lattice infill failed (grid too large?).`,e))}}function C$(e,t,n){let r=sQ(e);return B(r)?r:S$(r.value,t,n)}function w$(e,t,n){for(let t=0;t<3;t++){let n=e.min[t],r=e.max[t];if(n===void 0||r===void 0||!(n<r))return z(W(`LATTICE_INVALID_BOUNDS`,`bounds.min must be strictly less than bounds.max on every axis (axis ${t}).`))}let r=b$(t);if(B(r))return r;let i=eQ(n);if(B(i))return i;let{tag:a,period:o,thickness:s,resolution:c,padding:l}=r.value,[u,d,f]=e.min,[p,m,h]=e.max;try{try{var g=WT();return R(x$(g.u(i.value.tpms_box(u,d,f,p,m,h,c,l,a,o,s))))}catch(e){g.e=e}finally{g.d()}}catch(e){return z(vD(`TPMS_LATTICE_FAILED`,e instanceof Error?e.message:`tpms lattice failed (grid too large?).`,e))}}var T$=14695981039346656037n,E$=1099511628211n,D$=18446744073709551615n;function O$(){return T$}function k$(e,t){return(e^BigInt(t&255))*E$&D$}function A$(e,t){let n=e;for(let e=0;e<t.length;e++)n=k$(n,t[e]??0);return n}var j$=new TextEncoder;function M$(e,t){return A$(e,j$.encode(t))}var N$=new ArrayBuffer(8),P$=new DataView(N$),F$=new Uint8Array(N$);function I$(e,t){return P$.setFloat64(0,Object.is(t,-0)?0:t),A$(e,F$)}function L$(e,t){let n=e,r=t&D$;for(let e=0;e<8;e++)n=k$(n,Number(r&255n)),r>>=8n;return n}function R$(e,t){let n=e,r=t|0;for(let e=0;e<4;e++)n=k$(n,r&255),r>>>=8;return n}function z$(e,t){return k$(e,+!!t)}function B$(e){return(e&D$).toString(16).padStart(16,`0`)}var V$=new Set;function H$(e){return M$(O$(),e)}function U$(e){return{kind:`NumLit`,value:e,structuralHash:I$(H$(`NumLit`),e),freeParams:V$}}function W$(e){let t=H$(`Vec3Lit`);for(let n of e)t=I$(t,n);return{kind:`Vec3Lit`,value:e,structuralHash:t,freeParams:V$}}function G$(e){let t=H$(`Vec2Lit`);for(let n of e)t=I$(t,n);return{kind:`Vec2Lit`,value:e,structuralHash:t,freeParams:V$}}function K$(e){return{kind:`Param`,name:e,structuralHash:M$(H$(`Param`),e),freeParams:new Set([e])}}function q$(e,t,n){let r=M$(H$(`BinOp`),e);return r=L$(r,t.structuralHash),r=L$(r,n.structuralHash),{kind:`BinOp`,op:e,a:t,b:n,structuralHash:r,freeParams:r1(t.freeParams,n.freeParams)}}function J$(e,t){let n=M$(H$(`UnaryOp`),e);return n=L$(n,t.structuralHash),{kind:`UnaryOp`,op:e,arg:t,structuralHash:n,freeParams:t.freeParams}}function Y$(e,t){let n=R$(H$(`Component`),t);return n=L$(n,e.structuralHash),{kind:`Component`,vec:e,index:t,structuralHash:n,freeParams:e.freeParams}}function X$(e,t){let n=R$(H$(`BuildVec`),e),r=new Set;for(let e of t){n=L$(n,e.structuralHash);for(let t of e.freeParams)r.add(t)}return{kind:`BuildVec`,dim:e,components:t,structuralHash:n,freeParams:r}}var Z$=(e,t)=>q$(`+`,e,t),Q$=(e,t)=>q$(`*`,e,t);function $$(e){return typeof e==`number`?U$(e):e}function e1(e,t){if(!Array.isArray(e))return e;let n=e;return n.every(e=>typeof e==`number`)?t===3?W$([n[0],n[1],n[2]]):G$([n[0],n[1]]):X$(t,n.map($$))}function t1(e){return e1(e,3)}function n1(e){return e1(e,2)}function r1(e,t){if(e.size===0)return t;if(t.size===0)return e;let n=new Set(e);for(let e of t)n.add(e);return n}function i1(e){return typeof e==`number`}function a1(e,t){return i1(e)?R(e):z(W(H.NULL_SHAPE_INPUT,`${t}: expected number, got ${Array.isArray(e)?`vector(${e.length})`:typeof e}`))}function o1(e,t,n){return Array.isArray(e)&&e.length===t?R(e):z(W(H.NULL_SHAPE_INPUT,`${n}: expected Vec${t}, got ${i1(e)?`number`:`vector(${e.length})`}`))}function s1(e,t){switch(e.kind){case`NumLit`:return R(e.value);case`Vec3Lit`:return R(e.value);case`Vec2Lit`:return R(e.value);case`Param`:{let n=t[e.name];return n===void 0?z(W(H.NULL_SHAPE_INPUT,`unbound param: ${e.name}`)):R(n)}case`BinOp`:return c1(e,t);case`UnaryOp`:return l1(e,t);case`Component`:return u1(e,t);case`BuildVec`:return d1(e,t)}}function c1(e,t){let n=s1(e.a,t);if(!n.ok)return n;let r=s1(e.b,t);if(!r.ok)return r;let i=a1(n.value,`BinOp(${e.op}).a`);if(!i.ok)return i;let a=a1(r.value,`BinOp(${e.op}).b`);if(!a.ok)return a;switch(e.op){case`+`:return R(i.value+a.value);case`-`:return R(i.value-a.value);case`*`:return R(i.value*a.value);case`/`:return a.value===0?z(W(H.NULL_SHAPE_INPUT,`BinOp(/): division by zero`)):R(i.value/a.value)}}function l1(e,t){let n=s1(e.arg,t);if(!n.ok)return n;let r=a1(n.value,`UnaryOp(${e.op})`);if(!r.ok)return r;let i=r.value;switch(e.op){case`neg`:return R(-i);case`sin`:return R(Math.sin(i));case`cos`:return R(Math.cos(i));case`sqrt`:return R(Math.sqrt(i));case`abs`:return R(Math.abs(i))}}function u1(e,t){let n=s1(e.vec,t);if(!n.ok)return n;if(i1(n.value))return z(W(H.NULL_SHAPE_INPUT,`Component: cannot index a scalar`));let r=n.value,i=r[e.index];return i===void 0?z(W(H.NULL_SHAPE_INPUT,`Component: index ${e.index} out of range for Vec${r.length}`)):R(i)}function d1(e,t){if(e.components.length!==e.dim)return z(W(H.NULL_SHAPE_INPUT,`BuildVec(${e.dim}): expected ${e.dim} components, got ${e.components.length}`));let n=[];for(let r of e.components){let e=s1(r,t);if(!e.ok)return e;let i=a1(e.value,`BuildVec.component`);if(!i.ok)return i;n.push(i.value)}return R(e.dim===2?[n[0],n[1]]:[n[0],n[1],n[2]])}function f1(e,t,n){let r=s1(e,t);return r.ok?a1(r.value,n):r}function p1(e,t,n){let r=s1(e,t);if(!r.ok)return r;let i=o1(r.value,3,n);if(!i.ok)return i;let[a,o,s]=i.value;return R([a,o,s])}function m1(e,t,n){let r=s1(e,t);if(!r.ok)return r;let i=o1(r.value,2,n);if(!i.ok)return i;let[a,o]=i.value;return R([a,o])}function h1(e,t){if(t.size===0)return Object.freeze({});let n={};for(let r of t){let t=e[r];t!==void 0&&(n[r]=t)}return Object.freeze(n)}function g1(e){return{kind:`Line`,to:n1(e)}}function _1(e,t,n){return{kind:`Arc`,to:n1(e),radius:$$(t),largeArc:n?.largeArc??!1,clockwise:n?.clockwise??!1}}function v1(e,t){return{kind:`Bezier`,controls:e.map(n1),to:n1(t)}}function y1(e,t,n){return{kind:`EllipseArc`,to:n1(e),radii:n1(t),rotation:$$(n?.rotation??0),largeArc:n?.largeArc??!1,clockwise:n?.clockwise??!1}}function b1(e,t){return{start:n1(e),segments:[...t]}}function x1(e,t){let n=R$(e,t.length),r=(e,t)=>L$(e,t.structuralHash);for(let e of t)if(n=M$(n,e.kind),n=r(n,e.to),e.kind===`Arc`)n=r(n,e.radius),n=z$(z$(n,e.largeArc),e.clockwise);else if(e.kind===`Bezier`){n=R$(n,e.controls.length);for(let t of e.controls)n=r(n,t)}else e.kind===`EllipseArc`&&(n=r(n,e.radii),n=r(n,e.rotation),n=z$(z$(n,e.largeArc),e.clockwise));return n}function S1(e){let t=[];for(let n of e)t.push(n.to),n.kind===`Arc`?t.push(n.radius):n.kind===`Bezier`?t.push(...n.controls):n.kind===`EllipseArc`&&t.push(n.radii,n.rotation);return t}function C1(e,t){return x1(L$(e,t.start.structuralHash),t.segments)}function w1(e){return[e.start,...S1(e.segments)]}function T1(e,t){return{start:t(e.start),segments:e.segments.map(e=>E1(e,t))}}function E1(e,t){switch(e.kind){case`Line`:return g1(t(e.to));case`Arc`:return _1(t(e.to),t(e.radius),{largeArc:e.largeArc,clockwise:e.clockwise});case`Bezier`:return v1(e.controls.map(t),t(e.to));case`EllipseArc`:return y1(t(e.to),t(e.radii),{rotation:t(e.rotation),largeArc:e.largeArc,clockwise:e.clockwise})}}var D1=new Set;function O1(e){return M$(O$(),e)}function k1(e,t){return L$(e,t.structuralHash)}function A1(e,t){return t===void 0?z$(e,!1):k1(z$(e,!0),t)}function j1(e,t){return t===void 0?z$(e,!1):I$(z$(e,!0),t)}function M1(...e){let t=new Set;for(let n of e)if(n)for(let e of n.freeParams)t.add(e);return t.size===0?D1:t}function N1(e,t,n){let r=$$(e),i=$$(t),a=$$(n),o=O1(`Box`);return o=k1(k1(k1(o,r),i),a),{kind:`Box`,x:r,y:i,z:a,structuralHash:o,freeParams:M1(r,i,a)}}function P1(e){let t=$$(e);return{kind:`Sphere`,radius:t,structuralHash:k1(O1(`Sphere`),t),freeParams:t.freeParams}}function F1(e,t){let n=$$(e),r=$$(t);return{kind:`Cylinder`,radius:n,height:r,structuralHash:k1(k1(O1(`Cylinder`),n),r),freeParams:M1(n,r)}}function I1(e,t,n){let r=$$(e),i=$$(t),a=$$(n),o=O1(`Cone`);return o=k1(k1(k1(o,r),i),a),{kind:`Cone`,radius1:r,radius2:i,height:a,structuralHash:o,freeParams:M1(r,i,a)}}function L1(e,t){let n=$$(e),r=$$(t);return{kind:`Torus`,majorRadius:n,minorRadius:r,structuralHash:k1(k1(O1(`Torus`),n),r),freeParams:M1(n,r)}}function R1(e){let t=e.map(t1),n=R$(O1(`Polygon`),t.length);for(let e of t)n=k1(n,e);return{kind:`Polygon`,points:t,structuralHash:n,freeParams:M1(...t)}}function z1(e){let t=$$(e);return{kind:`Circle`,radius:t,structuralHash:k1(O1(`Circle`),t),freeParams:t.freeParams}}function B1(e,t){let n=t1(e),r=t1(t);return{kind:`Line`,from:n,to:r,structuralHash:k1(k1(O1(`Line`),n),r),freeParams:M1(n,r)}}function V1(e){let t=t1(e);return{kind:`Vertex`,point:t,structuralHash:k1(O1(`Vertex`),t),freeParams:t.freeParams}}function H1(e){return{kind:`Empty`,output:e,structuralHash:M$(O1(`Empty`),e),freeParams:D1}}function U1(){return H1(`Solid`)}function W1(){return H1(`Face`)}function G1(){return H1(`Wire`)}function K1(e,t,n,r){return j1(k1(k1(O1(e),t),n),r)}function q1(e,t,n){return{kind:`Fuse`,a:e,b:t,tolerance:n,structuralHash:K1(`Fuse`,e,t,n),freeParams:M1(e,t)}}function J1(e,t,n){return{kind:`Cut`,a:e,b:t,tolerance:n,structuralHash:K1(`Cut`,e,t,n),freeParams:M1(e,t)}}function Y1(e,t,n){return{kind:`Intersect`,a:e,b:t,tolerance:n,structuralHash:K1(`Intersect`,e,t,n),freeParams:M1(e,t)}}function X1(e,t){let n=[...e],r=R$(O1(`FuseAll`),n.length);for(let e of n)r=k1(r,e);return r=j1(r,t),{kind:`FuseAll`,shapes:n,tolerance:t,structuralHash:r,freeParams:M1(...n)}}function Z1(e,t,n){let r=[...t],i=k1(O1(`CutAll`),e);i=R$(i,r.length);for(let e of r)i=k1(i,e);return i=j1(i,n),{kind:`CutAll`,base:e,tools:r,tolerance:n,structuralHash:i,freeParams:M1(e,...r)}}function Q1(e){return e===void 0?void 0:t1(e)}function $1(e,t){let n=t1(t);return{kind:`Translate`,target:e,vector:n,structuralHash:k1(k1(O1(`Translate`),e),n),freeParams:M1(e,n)}}function e0(e,t,n){let r=$$(t),i=Q1(n?.axis),a=Q1(n?.at),o=k1(k1(O1(`Rotate`),e),r);return o=A1(o,i),o=A1(o,a),{kind:`Rotate`,target:e,angle:r,axis:i,at:a,structuralHash:o,freeParams:M1(e,r,i,a)}}function t0(e,t,n){let r=$$(t),i=Q1(n?.center),a=k1(k1(O1(`Scale`),e),r);return a=A1(a,i),{kind:`Scale`,target:e,factor:r,center:i,structuralHash:a,freeParams:M1(e,r,i)}}function n0(e,t){let n=Q1(t?.normal),r=Q1(t?.at),i=k1(O1(`Mirror`),e);return i=A1(i,n),i=A1(i,r),{kind:`Mirror`,target:e,normal:n,at:r,structuralHash:i,freeParams:M1(e,n,r)}}function r0(e,t){let n=t1(t);return{kind:`Extrude`,profile:e,vector:n,structuralHash:k1(k1(O1(`Extrude`),e),n),freeParams:M1(e,n)}}function i0(e,t){let n=mA(t).map(e=>Math.min(1,Math.max(0,e))),r=k1(O1(`Color`),e);for(let e of n)r=I$(r,e);return{kind:`Color`,target:e,color:n,structuralHash:r,freeParams:e.freeParams}}function a0(e,t=[]){let n=[...t],r=C1(O1(`Profile`),e);r=R$(r,n.length);for(let e of n)r=C1(r,e);return{kind:`Profile`,outline:e,holes:n,structuralHash:r,freeParams:M1(...w1(e),...n.flatMap(e=>w1(e)))}}function o0(e,t,n){let r=n?.frenet??!1,i=k1(k1(O1(`Sweep`),e),t);return i=z$(i,r),{kind:`Sweep`,profile:e,spine:t,frenet:r,structuralHash:i,freeParams:M1(e,t)}}function s0(e,t){let n=n1(e),r=[...t],i=k1(O1(`Path`),n);return i=x1(i,r),{kind:`Path`,start:n,segments:r,structuralHash:i,freeParams:M1(n,...S1(r))}}function c0(e,t){let n=[...e],r=t?.ruled??!0,i=R$(O1(`Loft`),n.length);for(let e of n)i=k1(i,e);return i=z$(i,r),{kind:`Loft`,sections:n,ruled:r,structuralHash:i,freeParams:M1(...n)}}function l0(e,t=360,n){let r=$$(t),i=Q1(n?.axis),a=Q1(n?.at),o=k1(k1(O1(`Revolve`),e),r);return o=A1(o,i),o=A1(o,a),{kind:`Revolve`,profile:e,angle:r,axis:i,at:a,structuralHash:o,freeParams:M1(e,r,i,a)}}function u0(e){let t=[...e],n=R$(O1(`Compound`),t.length);for(let e of t)n=k1(n,e);return{kind:`Compound`,children:t,structuralHash:n,freeParams:M1(...t)}}function d0(e,t,n=!1){let r=t.map(e=>e.map(e=>[...e])),i=R$(z$(k1(O1(`Instance`),e),n),r.length);for(let e of r)for(let t of e.flat())i=I$(i,t);return{kind:`Instance`,source:e,placements:r,fuse:n,structuralHash:i,freeParams:M1(e)}}function f0(e){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:return`Solid`;case`Polygon`:return`Face`;case`Circle`:case`Line`:return`Edge`;case`Vertex`:return`Vertex`;case`Empty`:return e.output;case`Fuse`:case`Cut`:case`Intersect`:return f0(e.a);case`FuseAll`:return e.shapes[0]?f0(e.shapes[0]):`Solid`;case`CutAll`:return f0(e.base);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:case`Color`:return f0(e.target);case`Extrude`:case`Revolve`:case`Loft`:case`Sweep`:return`Solid`;case`Profile`:return`Face`;case`Path`:return`Wire`;case`Compound`:return`Compound`;case`Instance`:return e.fuse?`Solid`:`Compound`}}function p0(e){let t=1/0,n=-1/0,r=1/0,i=-1/0;for(let[a,o]of e)t=Math.min(t,a),n=Math.max(n,a),r=Math.min(r,o),i=Math.max(i,o);let a=(t+n)/2,o=(r+i)/2,s=e.map(([e,t])=>[e-a,t-o]);return b1(s[0]??[0,0],s.slice(1).map(e=>g1(e)))}function m0(e,t=0,n=0){return b1([t-e,n],[_1([t+e,n],e),_1([t-e,n],e)])}function h0(e,t){let n=e/2,r=t/2;return a0(p0([[-n,-r],[n,-r],[n,r],[-n,r]]))}function g0(e){return a0(m0(e))}function _0(e){let t=e.overallWidth,n=e.overallDepth,r=e.flangeThickness,i=e.webThickness,a=(t-i)/2,o=(t+i)/2;return a0(p0([[0,0],[t,0],[t,r],[o,r],[o,n-r],[t,n-r],[t,n],[0,n],[0,n-r],[a,n-r],[a,r],[0,r]]))}function v0(e){let t=e.overallDepth,n=e.webThickness,r=e.bottomFlangeWidth,i=e.bottomFlangeThickness,a=e.topFlangeWidth,o=e.topFlangeThickness,s=Math.max(r,a)/2;return a0(p0([[s-r/2,0],[s+r/2,0],[s+r/2,i],[s+n/2,i],[s+n/2,t-o],[s+a/2,t-o],[s+a/2,t],[s-a/2,t],[s-a/2,t-o],[s-n/2,t-o],[s-n/2,i],[s-r/2,i]]))}function y0(e){let t=e.legThickness;return a0(p0([[0,0],[e.width,0],[e.width,t],[t,t],[t,e.depth],[0,e.depth]]))}function b0(e){let t=e.flangeWidth,n=e.depth,r=e.flangeThickness,i=e.webThickness;return a0(p0([[(t-i)/2,0],[(t+i)/2,0],[(t+i)/2,n-r],[t,n-r],[t,n],[0,n],[0,n-r],[(t-i)/2,n-r]]))}function x0(e){let t=e.flangeWidth,n=e.depth,r=e.flangeThickness,i=e.webThickness;return a0(p0([[0,0],[t,0],[t,r],[i,r],[i,n-r],[t,n-r],[t,n],[0,n]]))}function S0(e){let t=e.flangeWidth/2,n=e.depth/2,r=e.webThickness/2,i=e.flangeThickness;return a0(p0([[-t,-n],[r,-n],[r,n-i],[t,n-i],[t,n],[-r,n],[-r,-n+i],[-t,-n+i]]))}function C0(e){let t=e.width,n=e.depth,r=e.wallThickness,i=e.girth;return a0(p0([[0,0],[t,0],[t,i],[t-r,i],[t-r,r],[r,r],[r,n-r],[t-r,n-r],[t-r,n-i],[t,n-i],[t,n],[0,n]]))}function w0(e,t){let n=e;return a0(b1([-n,0],[y1([n,0],[n,t]),y1([-n,0],[n,t])]))}function T0(e){let t=e.bottomXDim/2,n=e.yDim/2,r=-e.topXDim/2+e.topXOffset,i=e.topXDim/2+e.topXOffset;return a0(b1([-t,-n],[g1([t,-n]),g1([i,n]),g1([r,n])]))}function E0(e){let t=e.xDim/2,n=e.yDim/2,r=e.wallThickness;return a0(p0([[-t,-n],[t,-n],[t,n],[-t,n]]),[p0([[-(t-r),-(n-r)],[t-r,-(n-r)],[t-r,n-r],[-(t-r),n-r]])])}function D0(e){return a0(m0(e.radius),[m0(e.radius-e.wallThickness)])}function O0(e){return a0(b1(e[0]??[0,0],e.slice(1).map(e=>g1(e))))}function k0(e,t){return a0(b1(e[0]??[0,0],e.slice(1).map(e=>g1(e))),t.map(e=>b1(e[0]??[0,0],e.slice(1).map(e=>g1(e)))))}function A0(e,t){let n=f1(e.x,t.env,`Box.x`);if(!n.ok)return n;let r=f1(e.y,t.env,`Box.y`);if(!r.ok)return r;let i=f1(e.z,t.env,`Box.z`);return i.ok?R(hj(n.value,r.value,i.value)):i}function j0(e,t){let n=f1(e.radius,t.env,`Sphere.radius`);return n.ok?R(_j(n.value)):n}function M0(e,t){let n=f1(e.radius,t.env,`Cylinder.radius`);if(!n.ok)return n;let r=f1(e.height,t.env,`Cylinder.height`);return r.ok?R(gj(n.value,r.value)):r}function N0(e,t){let n=f1(e.radius1,t.env,`Cone.radius1`);if(!n.ok)return n;let r=f1(e.radius2,t.env,`Cone.radius2`);if(!r.ok)return r;let i=f1(e.height,t.env,`Cone.height`);return i.ok?R(vj(n.value,r.value,i.value)):i}function P0(e,t){let n=f1(e.majorRadius,t.env,`Torus.majorRadius`);if(!n.ok)return n;let r=f1(e.minorRadius,t.env,`Torus.minorRadius`);return r.ok?R(yj(n.value,r.value)):r}function F0(e,t){let n=[];for(let r of e.points){let e=p1(r,t.env,`Polygon.point`);if(!e.ok)return e;n.push(e.value)}return Fj(n)}function I0(e,t){let n=f1(e.radius,t.env,`Circle.radius`);return n.ok?R(Sj(n.value)):n}function L0(e,t){let n=p1(e.from,t.env,`Line.from`);if(!n.ok)return n;let r=p1(e.to,t.env,`Line.to`);return r.ok?R(xj(n.value,r.value)):r}function R0(e,t){let n=p1(e.point,t.env,`Vertex.point`);return n.ok?R(Ij(n.value)):n}function z0(e){return z(vD(H.NULL_SHAPE_INPUT,`${e}: empty result has no kernel representation`))}function B0(e,t,n){let r=e.evalNode(t);return r.ok?FE(r.value)?R(r.value):z(hD(H.CSG_NOT_3D,`${n}: operand did not produce a 3D shape`)):r}function V0(e,t){return{unsafe:!0,fuzzyValue:e.tolerance??t.tolerance}}function H0(e,t){if(e.a.kind===`Empty`)return t.evalNode(e.b);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=B0(t,e.a,`Fuse.a`);if(!n.ok)return n;let r=B0(t,e.b,`Fuse.b`);return r.ok?DA(n.value,r.value,V0(e,t)):r}function U0(e,t){if(e.a.kind===`Empty`)return z0(`Cut`);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=B0(t,e.a,`Cut.a`);if(!n.ok)return n;let r=B0(t,e.b,`Cut.b`);return r.ok?OA(n.value,r.value,V0(e,t)):r}function W0(e,t){if(e.a.kind===`Empty`||e.b.kind===`Empty`)return z0(`Intersect`);let n=B0(t,e.a,`Intersect.a`);if(!n.ok)return n;let r=B0(t,e.b,`Intersect.b`);return r.ok?kA(n.value,r.value,V0(e,t)):r}function G0(e,t,n){let r=[];for(let i of t){let t=B0(e,i,n);if(!t.ok)return t;r.push(t.value)}return R(r)}function K0(e,t){let n=e.shapes.filter(e=>e.kind!==`Empty`);if(n.length===0)return z0(`FuseAll`);if(n.length===1&&n[0])return t.evalNode(n[0]);let r=G0(t,n,`FuseAll.operand`);return r.ok?jA(r.value,V0(e,t)):r}function q0(e,t){if(e.base.kind===`Empty`)return z0(`CutAll`);let n=e.tools.filter(e=>e.kind!==`Empty`);if(n.length===0)return t.evalNode(e.base);let r=B0(t,e.base,`CutAll.base`);if(!r.ok)return r;let i=G0(t,n,`CutAll.tool`);return i.ok?MA(r.value,i.value,V0(e,t)):i}function J0(e){return z(vD(H.NULL_SHAPE_INPUT,`${e}: cannot transform an Empty node`))}function Y0(e,t,n,r){return e?p1(e,t,n):R(r)}function X0(e,t){let n=F(),{handle:r,dispose:i}=n.composeTransform(t),a;try{a=LE(n.locate(e.wrapped,r))}finally{i()}return bA(e)&&wA(e,a),a}function Z0(e,t){if(e.target.kind===`Empty`)return J0(`Translate`);let n=p1(e.vector,t.env,`Translate.vector`);if(!n.ok)return n;let r=t.evalNode(e.target);return r.ok?R(X0(r.value,[{type:`translate`,x:n.value[0],y:n.value[1],z:n.value[2]}])):r}function Q0(e,t){if(e.target.kind===`Empty`)return J0(`Rotate`);let n=f1(e.angle,t.env,`Rotate.angle`);if(!n.ok)return n;let r=Y0(e.axis,t.env,`Rotate.axis`,[0,0,1]);if(!r.ok)return r;let i=Y0(e.at,t.env,`Rotate.at`,[0,0,0]);if(!i.ok)return i;let a=t.evalNode(e.target);return a.ok?R(X0(a.value,[{type:`rotate`,angle:n.value,axis:r.value,center:i.value}])):a}function $0(e,t){if(e.target.kind===`Empty`)return J0(`Scale`);let n=f1(e.factor,t.env,`Scale.factor`);if(!n.ok)return n;let r=Y0(e.center,t.env,`Scale.center`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?R(oj(i.value,n.value,r.value)):i}function e2(e,t){if(e.target.kind===`Empty`)return J0(`Mirror`);let n=Y0(e.normal,t.env,`Mirror.normal`,[1,0,0]);if(!n.ok)return n;let r=Y0(e.at,t.env,`Mirror.at`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?R(aj(i.value,n.value,r.value)):i}function t2(e,t){let n=e.children.filter(e=>e.kind!==`Empty`);if(n.length===0)return z(vD(H.NULL_SHAPE_INPUT,`Compound: cannot materialize a compound with zero non-empty children`));let r=[];for(let e of n){let n=t.evalNode(e);if(!n.ok)return n;r.push(n.value)}return R(Lj(r))}function n2(){return z(vD(H.NULL_SHAPE_INPUT,`Empty: cannot materialize an Empty node directly — only valid as boolean/transform operand`))}function r2(e){return[[1,0,0,e[0]],[0,1,0,e[1]],[0,0,1,e[2]],[0,0,0,1]]}function i2(e){let t=e[0];return t!==void 0&&typeof t[0]==`number`}function a2(e,t,n){return{__instanced:!0,source:e,placements:t,grid:n,[Symbol.dispose](){e[Symbol.dispose]()}}}function o2(e){return typeof e==`object`&&!!e&&e.__instanced===!0}function s2(e,t){return a2(e,i2(t)?t.map(r2):t.map(e=>e.map(e=>[...e])))}function c2(e,t){let{cols:n,rows:r,pitchX:i,pitchY:a}=t;if(!Number.isInteger(n)||!Number.isInteger(r)||n<1||r<1)throw RangeError(`instanceGrid: cols and rows must be positive integers, got ${n}x${r}`);let o=[];for(let e=0;e<n;e++)for(let t=0;t<r;t++)o.push(r2([e*i,t*a,0]));return a2(e,o,{cols:n,rows:r,pitchX:i,pitchY:a})}function l2(e){return e.placements.length}function u2(e,t={}){let{source:n,placements:r,grid:i}=e;return r.length===0?z(W(`INSTANCE_EMPTY`,`materialize: instance has no placements`)):t.fuse?FE(n)?i?UF(n,[1,0,0],[0,1,0],i.cols,i.rows,i.pitchX,i.pitchY):d2(n,r,!0):z(W(`MATERIALIZE_NOT_3D`,`materialize({fuse:true}) requires a 3D source shape`)):d2(n,r,!1)}function d2(e,t,n){let r=[];for(let n of t){let t=dj(e,n);if(!t.ok){for(let e of r)e[Symbol.dispose]();return t}r.push(t.value)}let i=n?jA(r,{unsafe:!0}):R(tj(r));for(let e of r)(!i.ok||e!==i.value)&&e[Symbol.dispose]();return i}function f2(e,t){return{geometry:bM(e.source,t),instances:e.placements}}function p2(e,t){let n=t.evalNode(e.source);return n.ok?u2(s2(n.value,e.placements),{fuse:e.fuse}):n}function m2(e,t,n){let r=e.evalNode(t);if(!r.ok)return r;if(!jE(r.value))return z(hD(`CSG_NOT_FACE`,`${n}: node did not produce a Face`));let i=mO(r.value);return i.ok?_O(i.value)?R(i.value):z(hD(`CSG_NOT_FACE`,`${n}: face is not planar`)):z(hD(`CSG_NOT_FACE`,`${n}: ${i.error}`))}function h2(e,t){let n=p1(e.vector,t.env,`Extrude.vector`);if(!n.ok)return n;let r=m2(t,e.profile,`Extrude.profile`);return r.ok?Vq(r.value,n.value):r}function g2(e,t){let n=f1(e.angle,t.env,`Revolve.angle`);if(!n.ok)return n;if(n.value<=0)return z(W(`CSG_REVOLVE_ANGLE`,`Revolve.angle must be positive (degrees), got ${n.value}`));let r=Math.min(n.value,360),i=e.axis?p1(e.axis,t.env,`Revolve.axis`):R([0,0,1]);if(!i.ok)return i;let a=e.at?p1(e.at,t.env,`Revolve.at`):R([0,0,0]);if(!a.ok)return a;let o=m2(t,e.profile,`Revolve.profile`);return o.ok?Hq(o.value,a.value,i.value,r*Math.PI/180):o}function _2(e,t){try{var n=WT();if(e.sections.length<2)return z(W(`CSG_LOFT_SECTIONS`,`Loft requires at least 2 sections, got ${e.sections.length}`));let r=n.u(new iE),i=[];for(let[n,a]of e.sections.entries()){let e=m2(t,a,`Loft.sections[${n}]`);if(!e.ok)return e;let o=yk(e.value);r.register(o),i.push(o)}return qN(i,{ruled:e.ruled})}catch(e){n.e=e}finally{n.d()}}var v2=1e-9;function y2(e){return[e[0],e[1],0]}function b2(e){return z(W(`CSG_PATH_SEGMENT`,`contour segment: ${e}`))}function x2(e,t,n,r,i){let[a,o]=e,[s,c]=t,l=s-a,u=c-o,d=Math.hypot(l,u);if(d<v2)return b2(`Arc: coincident endpoints`);if(d>2*n+1e-6)return b2(`Arc: radius ${n} too small for chord ${d}`);let f=Math.sqrt(Math.max(0,n*n-d/2*(d/2))),p=l/d,m=u/d,h=i===r?1:-1,g=(a+s)/2+h*f*-m,_=(o+c)/2+h*f*p,v=Math.atan2(o-_,a-g),y=Math.atan2(c-_,s-g);if(i)for(;y>=v-v2;)y-=2*Math.PI;else for(;y<=v+v2;)y+=2*Math.PI;let b=(v+y)/2;return R([g+n*Math.cos(b),_+n*Math.sin(b)])}function S2(e,t,n,r,i,a){let o=!a,[s,c]=n;if(s<=0||c<=0)return b2(`EllipseArc: non-positive radius`);let l=Math.cos(r),u=Math.sin(r),d=(e[0]-t[0])/2,f=(e[1]-t[1])/2,p=l*d+u*f,m=-u*d+l*f,h=p*p/(s*s)+m*m/(c*c);if(h>1){let e=Math.sqrt(h);s*=e,c*=e}let g=s*s*c*c-s*s*m*m-c*c*p*p,_=s*s*m*m+c*c*p*p;if(_<v2)return b2(`EllipseArc: coincident endpoints`);let v=(i===o?-1:1)*Math.sqrt(Math.max(0,g/_)),y=v*(s*m/c),b=v*(-(c*p)/s),x=l*y-u*b+(e[0]+t[0])/2,S=u*y+l*b+(e[1]+t[1])/2,C=Math.atan2((m-b)/c,(p-y)/s),w=Math.atan2((-m-b)/c,(-p-y)/s)-C;!o&&w>0&&(w-=2*Math.PI),o&&w<0&&(w+=2*Math.PI);let ee=w>=0?C:C+w,te=w>=0?C+w:C;return R({center:[x,S],theta1:ee,theta2:te,rx:s,ry:c})}function C2(e,t,n){if(t.kind!==`EllipseArc`)return b2(`internal: not an ellipse segment`);let r=m1(t.to,n.env,`Path.EllipseArc.to`);if(!r.ok)return r;let i=m1(t.radii,n.env,`Path.EllipseArc.radii`);if(!i.ok)return i;let a=f1(t.rotation,n.env,`Path.EllipseArc.rotation`);if(!a.ok)return a;let o=a.value*Math.PI/180,s=S2(e,r.value,i.value,o,t.largeArc,t.clockwise);if(!s.ok)return s;let{center:c,theta1:l,theta2:u,rx:d,ry:f}=s.value,p,m;if(d>=f?(p=Bk(d,f,l,u,y2(c),[0,0,1]),m=o):(p=Bk(f,d,l-Math.PI/2,u-Math.PI/2,y2(c),[0,0,1]),m=o+Math.PI/2),!p.ok)return p;let h=p.value;if(Math.abs(m)>v2)try{var g=WT();let e=w2(g.u(h),m*180/Math.PI,c);if(!e.ok)return e;h=e.value}catch(e){g.e=e}finally{g.d()}if(t.clockwise)try{var _=WT();h=oM(_.u(h))}catch(e){_.e=e}finally{_.d()}return R(h)}function w2(e,t,n){let r=F(),{handle:i,dispose:a}=r.composeTransform([{type:`rotate`,angle:t,axis:[0,0,1],center:[n[0],n[1],0]}]);try{return R(LE(r.locate(e.wrapped,i)))}catch(e){return z(U(`CSG_PATH_ELLIPSE_ROTATE`,`Path: kernel cannot relocate ellipse-arc edges`,e,{operation:`evalPath`}))}finally{a()}}function T2(e,t){return m1(e.to,t.env,`Path.${e.kind}.to`)}function E2(e,t,n){switch(t.kind){case`Line`:{let r=T2(t,n);return r.ok?Math.hypot(r.value[0]-e[0],r.value[1]-e[1])<v2?b2(`Line: zero length`):R(Fk(y2(e),y2(r.value))):r}case`Arc`:{let r=T2(t,n);if(!r.ok)return r;let i=f1(t.radius,n.env,`Path.Arc.radius`);if(!i.ok)return i;let a=x2(e,r.value,i.value,t.largeArc,t.clockwise);return a.ok?R(zk(y2(e),y2(a.value),y2(r.value))):a}case`Bezier`:{let r=T2(t,n);if(!r.ok)return r;let i=[];for(let e of t.controls){let t=m1(e,n.env,`Path.Bezier.control`);if(!t.ok)return t;i.push(y2(t.value))}return Uk([y2(e),...i,y2(r.value)])}case`EllipseArc`:return C2(e,t,n)}}function D2(e,t,n,r,i,a){if(t.length===0)return z(W(`CSG_PATH_SEGMENT`,`${a}: at least one segment required`));let o=m1(e,n.env,`${a}.start`);if(!o.ok)return o;let s=[],c=o.value;for(let e of t){let t=E2(c,e,n);if(!t.ok)return t;r.register(t.value),s.push(t.value);let i=T2(e,n);if(!i.ok)return i;c=i.value}if(i&&Math.hypot(c[0]-o.value[0],c[1]-o.value[1])>v2){let e=Fk(y2(c),y2(o.value));r.register(e),s.push(e)}return Gk(s)}function O2(e,t){try{var n=WT();let r=n.u(new iE);return D2(e.start,e.segments,t,r,!1,`Path`)}catch(e){n.e=e}finally{n.d()}}function k2(e,t){try{var n=WT();let r=m2(t,e.profile,`Sweep.profile`);if(!r.ok)return r;let i=t.evalNode(e.spine);if(!i.ok)return i;let a=n.u(new iE),o;if(AE(i.value))o=i.value;else if(kE(i.value)){let e=Gk([i.value]);if(!e.ok)return e;a.register(e.value),o=e.value}else return z(hD(`CSG_SWEEP_SPINE`,`Sweep.spine: node did not produce a Wire or Edge`));let s=yk(r.value);a.register(s);let c=zN(s,o,{frenet:e.frenet});if(!c.ok)return c;if(Array.isArray(c.value)){for(let e of c.value)e[Symbol.dispose]();return z(hD(`CSG_SWEEP_SPINE`,`Sweep: unexpected shell-mode result`))}return R(c.value)}catch(e){n.e=e}finally{n.d()}}function A2(e,t){let n=pO(e);return n.ok?vO(n.value)?R(n.value):z(W(`CSG_PROFILE_CONTOUR`,`${t}: contour is not planar`)):z(W(`CSG_PROFILE_CONTOUR`,`${t}: ${n.error}`))}function j2(e,t){try{var n=WT();let r=n.u(new iE),i=(e,n)=>{let i=D2(e.start,e.segments,t,r,!0,n);return i.ok?(r.register(i.value),A2(i.value,n)):i},a=i(e.outline,`Profile.outline`);if(!a.ok)return a;let o=[];for(let[t,n]of e.holes.entries()){let e=i(n,`Profile.holes[${t}]`);if(!e.ok)return e;o.push(e.value)}return Mj(a.value,o.length>0?o:void 0)}catch(e){n.e=e}finally{n.d()}}function M2(e,t){let n=t.evalNode(e.target);if(!n.ok)return n;let r=F(),{handle:i,dispose:a}=r.composeTransform([{type:`translate`,x:0,y:0,z:0}]),o;try{o=I(r.locate(n.value.wrapped,i))}finally{a()}return bA(n.value)&&wA(n.value,o),R(hA(o,[...e.color]))}function N2(e,t){switch(e.kind){case`Box`:return A0(e,t);case`Sphere`:return j0(e,t);case`Cylinder`:return M0(e,t);case`Cone`:return N0(e,t);case`Torus`:return P0(e,t);case`Polygon`:return F0(e,t);case`Circle`:return I0(e,t);case`Line`:return L0(e,t);case`Vertex`:return R0(e,t);case`Empty`:return n2();case`Fuse`:return H0(e,t);case`Cut`:return U0(e,t);case`Intersect`:return W0(e,t);case`FuseAll`:return K0(e,t);case`CutAll`:return q0(e,t);case`Translate`:return Z0(e,t);case`Rotate`:return Q0(e,t);case`Scale`:return $0(e,t);case`Mirror`:return e2(e,t);case`Compound`:return t2(e,t);case`Instance`:return p2(e,t);case`Extrude`:return h2(e,t);case`Revolve`:return g2(e,t);case`Loft`:return _2(e,t);case`Path`:return O2(e,t);case`Sweep`:return k2(e,t);case`Profile`:return j2(e,t);case`Color`:return M2(e,t)}}function P2(e,t){if(typeof t==`number`)return I$(z$(e,!1),t);let n=z$(e,!0);n=R$(n,t.length);for(let e of t)n=I$(n,e);return n}function F2(e,t){if(t.size===0)return O$();let n=h1(e,t),r=Object.keys(n).sort(),i=O$();for(let e of r){i=M$(i,e);let t=n[e];t!==void 0&&(i=P2(i,t))}return i}function I2(e,t,n,r){let i=F2(t,e.freeParams),a=r===void 0?`d`:I$(O$(),r).toString(16);return`${B$(e.structuralHash)}:${n}:${B$(i)}:${a}`}var L2=[1,0,0,0];function R2(e,t){let n=f1(e.angle,t,`evaluateMesh.peelRigid`);if(!n.ok)return null;let r=e.axis?p1(e.axis,t,`evaluateMesh.peelRigid`):R([0,0,1]);if(!r.ok)return null;let i=e.at?p1(e.at,t,`evaluateMesh.peelRigid`):R([0,0,0]);return i.ok?{angle:n.value,axis:r.value,center:i.value}:null}function z2(e,t){let n=e,r=L2,i=[0,0,0];for(;;)if(n.kind===`Translate`){let e=p1(n.vector,t,`evaluateMesh.peelRigid`);if(!e.ok)break;let a=LF(r,e.value);i=[i[0]+a[0],i[1]+a[1],i[2]+a[2]],n=n.target}else if(n.kind===`Rotate`){let e=R2(n,t);if(!e)break;let a=RF(e.axis,e.angle*Math.PI/180),o=BF(r,a),s=LF(r,e.center),c=LF(o,e.center);i=[i[0]+s[0]-c[0],i[1]+s[1]-c[1],i[2]+s[2]-c[2]],r=o,n=n.target}else break;return{inner:n,rot:r,trans:i}}function B2(e){return e[0]===1&&e[1]===0&&e[2]===0&&e[3]===0}function V2(e,t,n,r,i,a,o,s,c){for(let l=0;l<t.length;l+=3){let u=t[l]??0,d=t[l+1]??0,f=t[l+2]??0,p=2*(i*f-a*d),m=2*(a*u-r*f),h=2*(r*d-i*u);e[l]=u+n*p+(i*h-a*m)+o,e[l+1]=d+n*m+(a*p-r*h)+s,e[l+2]=f+n*h+(r*m-i*p)+c}}function H2(e,t,n){let[r,i,a]=n,o=B2(t);if(o&&r===0&&i===0&&a===0)return e;let s=e.vertices,c=new Float32Array(s.length);if(o){for(let e=0;e<s.length;e+=3)c[e]=(s[e]??0)+r,c[e+1]=(s[e+1]??0)+i,c[e+2]=(s[e+2]??0)+a;return{...e,vertices:c}}let[l,u,d,f]=t;V2(c,s,l,u,d,f,r,i,a);let p=e.normals,m=new Float32Array(p.length);return V2(m,p,l,u,d,f,0,0,0),{...e,vertices:c,normals:m}}function U2(e,t,n){let r=new Map,i=Math.min(t.length,n.length);for(let e=0;e<i;e++){let i=t[e],a=n[e];i!==void 0&&a!==void 0&&r.set(i,a)}return e.map(e=>({...e,faceId:r.get(e.faceId)??e.faceId}))}var W2=class{cache=new Map;refCounts=new Map;evaluating=!1;pendingKeys=[];kernelId;defaultTolerance;maxCacheEntries;maxMeshCacheEntries;meshCache=new Map;onStep;hits=0;misses=0;evictions=0;constructor(e={}){this.kernelId=e.kernel??NT()??`unregistered`,this.defaultTolerance=e.tolerance,e.onStep&&(this.onStep=e.onStep);let t=e.maxCacheEntries;if(t!==void 0&&(!Number.isInteger(t)||t<1))throw RangeError(`Evaluator: maxCacheEntries must be a positive integer, got ${String(t)}`);this.maxCacheEntries=t;let n=e.maxMeshCacheEntries;if(n!==void 0&&(!Number.isInteger(n)||n<1))throw RangeError(`Evaluator: maxMeshCacheEntries must be a positive integer, got ${String(n)}`);this.maxMeshCacheEntries=n}evaluate(e,t={}){if(this.maxCacheEntries!==void 0&&this.evaluating)throw Error(`Evaluator.evaluate() is not reentrant when maxCacheEntries is set — do not call it from an onStep callback.`);return PT(this.kernelId,()=>{this.evaluating=!0;let n=!1;try{let r=this.evaluateInner(e,t);return this.maxCacheEntries!==void 0&&r.ok&&this.trimCache(this.maxCacheEntries),n=r.ok,r}finally{!n&&this.maxCacheEntries!==void 0&&this.rollbackPending(),this.pendingKeys.length=0,this.evaluating=!1}})}evaluateMesh(e,t={},n={}){n.signal?.throwIfAborted();let r=n.cache??!0,i=ho(),a=n.tolerance??i.tolerance,o=n.angularTolerance??i.angularTolerance,s=`${I2(e,t,this.kernelId,this.defaultTolerance)}|${uM(a,o,n.skipNormals??!1,n.includeUVs??!1)}`;if(r){let r=this.meshCache.get(s);if(r!==void 0)return this.maxMeshCacheEntries!==void 0&&(this.meshCache.delete(s),this.meshCache.set(s,r)),R(r);let{inner:i,rot:a,trans:o}=z2(e,t);if(i!==e){let r=this.evaluateMesh(i,t,n);if(!r.ok)return r;let c=this.evaluate(i,t);if(!c.ok)return c;let l=WD(c.value).map(Wj),u=this.evaluate(e,t);if(!u.ok)return u;let d=WD(u.value).map(Wj),f=H2(r.value,a,o),p=U2(f.faceGroups,l,d),m=new Set(d);if(p.every(e=>m.has(e.faceId))){let e={...f,faceGroups:p};return this.meshCache.set(s,e),this.maxMeshCacheEntries!==void 0&&this.trimMeshCache(this.maxMeshCacheEntries),R(e)}}}let c=this.evaluate(e,t);if(!c.ok)return c;let l=PT(this.kernelId,()=>bM(c.value,n));return r&&(this.meshCache.set(s,l),this.maxMeshCacheEntries!==void 0&&this.trimMeshCache(this.maxMeshCacheEntries)),R(l)}evaluateInner(e,t){let n=I2(e,t,this.kernelId,this.defaultTolerance),r=this.cache.get(n);if(r!==void 0)return this.hits++,this.maxCacheEntries!==void 0&&(this.cache.delete(n),this.cache.set(n,r)),this.onStep?.({node:e,cacheKey:n,cacheHit:!0}),R(r);this.misses++;let i=N2(e,{env:t,tolerance:this.defaultTolerance,evalNode:e=>this.evaluateInner(e,t)});if(!i.ok)return i;let a=i.value;return this.refCounts.set(a,(this.refCounts.get(a)??0)+1),this.cache.set(n,a),this.maxCacheEntries!==void 0&&this.pendingKeys.push(n),this.onStep?.({node:e,cacheKey:n,cacheHit:!1}),i}releaseShape(e){let t=(this.refCounts.get(e)??1)-1;t<=0?(this.refCounts.delete(e),e[Symbol.dispose]()):this.refCounts.set(e,t)}trimCache(e){for(;this.cache.size>e;){let e=this.cache.keys().next();if(e.done)break;let t=e.value,n=this.cache.get(t);this.cache.delete(t),this.evictions++,n!==void 0&&this.releaseShape(n)}}trimMeshCache(e){for(;this.meshCache.size>e;){let e=this.meshCache.keys().next();if(e.done)break;this.meshCache.delete(e.value)}}rollbackPending(){for(let e of this.pendingKeys){let t=this.cache.get(e);t!==void 0&&(this.cache.delete(e),this.releaseShape(t))}}cacheStats(){return{hits:this.hits,misses:this.misses,entries:this.cache.size,evictions:this.evictions}}resetStats(){this.hits=0,this.misses=0,this.evictions=0}[Symbol.dispose](){for(let e of this.refCounts.keys())e[Symbol.dispose]();this.refCounts.clear(),this.cache.clear(),this.meshCache.clear()}};function G2(e,t){try{var n=WT();let r=t(n.u(new W2(e)));if(r instanceof Promise)throw Error(`withEvaluator() callback returned a Promise. Async code must construct an Evaluator directly and dispose it manually — borrowed shapes would otherwise be freed before the Promise resolves.`);return r}catch(e){n.e=e}finally{n.d()}}var K2=1;function q2(e){return{csgVersion:4,root:t4(e)}}function J2(e){switch(e.kind){case`NumLit`:return{kind:`NumLit`,value:e.value};case`Vec3Lit`:return{kind:`Vec3Lit`,value:[e.value[0],e.value[1],e.value[2]]};case`Vec2Lit`:return{kind:`Vec2Lit`,value:[e.value[0],e.value[1]]};case`Param`:return{kind:`Param`,name:e.name};case`BinOp`:return{kind:`BinOp`,op:e.op,a:J2(e.a),b:J2(e.b)};case`UnaryOp`:return{kind:`UnaryOp`,op:e.op,arg:J2(e.arg)};case`Component`:return{kind:`Component`,vec:J2(e.vec),index:e.index};case`BuildVec`:return{kind:`BuildVec`,dim:e.dim,components:e.components.map(J2)}}}function Y2(e){switch(e.kind){case`Box`:return{kind:`Box`,x:J2(e.x),y:J2(e.y),z:J2(e.z)};case`Sphere`:return{kind:`Sphere`,radius:J2(e.radius)};case`Cylinder`:return{kind:`Cylinder`,radius:J2(e.radius),height:J2(e.height)};case`Cone`:return{kind:`Cone`,radius1:J2(e.radius1),radius2:J2(e.radius2),height:J2(e.height)};case`Torus`:return{kind:`Torus`,majorRadius:J2(e.majorRadius),minorRadius:J2(e.minorRadius)};case`Polygon`:return{kind:`Polygon`,points:e.points.map(J2)};case`Circle`:return{kind:`Circle`,radius:J2(e.radius)};case`Line`:return{kind:`Line`,from:J2(e.from),to:J2(e.to)};case`Vertex`:return{kind:`Vertex`,point:J2(e.point)};case`Empty`:return{kind:`Empty`,output:e.output};default:return}}function X2(e){switch(e.kind){case`Fuse`:case`Cut`:case`Intersect`:return{kind:e.kind,a:t4(e.a),b:t4(e.b),tolerance:e.tolerance};case`FuseAll`:return{kind:`FuseAll`,shapes:e.shapes.map(t4),tolerance:e.tolerance};case`CutAll`:return{kind:`CutAll`,base:t4(e.base),tools:e.tools.map(t4),tolerance:e.tolerance};default:return}}function Z2(e){return e?J2(e):void 0}function Q2(e){switch(e.kind){case`Line`:return{kind:`Line`,to:J2(e.to)};case`Arc`:return{kind:`Arc`,to:J2(e.to),radius:J2(e.radius),largeArc:e.largeArc,clockwise:e.clockwise};case`Bezier`:return{kind:`Bezier`,controls:e.controls.map(J2),to:J2(e.to)};case`EllipseArc`:return{kind:`EllipseArc`,to:J2(e.to),radii:J2(e.radii),rotation:J2(e.rotation),largeArc:e.largeArc,clockwise:e.clockwise}}}function $2(e){return{start:J2(e.start),segments:e.segments.map(Q2)}}function e4(e){switch(e.kind){case`Translate`:return{kind:`Translate`,target:t4(e.target),vector:J2(e.vector)};case`Rotate`:return{kind:`Rotate`,target:t4(e.target),angle:J2(e.angle),axis:Z2(e.axis),at:Z2(e.at)};case`Scale`:return{kind:`Scale`,target:t4(e.target),factor:J2(e.factor),center:Z2(e.center)};case`Mirror`:return{kind:`Mirror`,target:t4(e.target),normal:Z2(e.normal),at:Z2(e.at)};default:return}}function t4(e){return e.kind===`Extrude`?{kind:`Extrude`,profile:t4(e.profile),vector:J2(e.vector)}:e.kind===`Revolve`?{kind:`Revolve`,profile:t4(e.profile),angle:J2(e.angle),axis:Z2(e.axis),at:Z2(e.at)}:e.kind===`Loft`?{kind:`Loft`,sections:e.sections.map(t4),ruled:e.ruled}:e.kind===`Path`?{kind:`Path`,start:J2(e.start),segments:e.segments.map(Q2)}:e.kind===`Sweep`?{kind:`Sweep`,profile:t4(e.profile),spine:t4(e.spine),frenet:e.frenet}:e.kind===`Profile`?{kind:`Profile`,outline:$2(e.outline),holes:e.holes.map($2)}:e.kind===`Color`?{kind:`Color`,target:t4(e.target),color:[...e.color]}:e.kind===`Compound`?{kind:`Compound`,children:e.children.map(t4)}:e.kind===`Instance`?{kind:`Instance`,source:t4(e.source),placements:e.placements,fuse:e.fuse}:Y2(e)??X2(e)??e4(e)}function n4(e){return z(W(H.NULL_SHAPE_INPUT,`csg.fromJSON: ${e}`))}function r4(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function i4(e){return typeof e==`number`&&Number.isFinite(e)}function a4(e){return typeof e==`string`}function o4(e,t){if(!Array.isArray(e)||e.length!==3)return n4(`${t}: expected Vec3 array`);let[n,r,i]=e;return!i4(n)||!i4(r)||!i4(i)?n4(`${t}: Vec3 contains non-number`):R([n,r,i])}function s4(e,t){if(!Array.isArray(e)||e.length!==2)return n4(`${t}: expected Vec2 array`);let[n,r]=e;return!i4(n)||!i4(r)?n4(`${t}: Vec2 contains non-number`):R([n,r])}function c4(e){if(!r4(e))return n4(`input is not an object`);let t=e.csgVersion;if(typeof t!=`number`||!Number.isInteger(t)||t<K2||t>4)return n4(`unsupported csgVersion ${String(t)} (expected ${K2}..4)`);let n=e.root;return g4(n)}function l4(e){if(!r4(e))return n4(`expression: not an object`);let t=e.kind;switch(t){case`NumLit`:return i4(e.value)?R(U$(e.value)):n4(`NumLit.value`);case`Vec3Lit`:{let t=o4(e.value,`Vec3Lit.value`);return t.ok?R(W$(t.value)):t}case`Vec2Lit`:{let t=s4(e.value,`Vec2Lit.value`);return t.ok?R(G$(t.value)):t}case`Param`:return a4(e.name)?R(K$(e.name)):n4(`Param.name`);case`BinOp`:return u4(e);case`UnaryOp`:return d4(e);case`Component`:return f4(e);case`BuildVec`:return p4(e);default:return n4(`unknown expression kind: ${String(t)}`)}}function u4(e){let t=e.op;if(t!==`+`&&t!==`-`&&t!==`*`&&t!==`/`)return n4(`BinOp.op: ${String(t)}`);let n=l4(e.a);if(!n.ok)return n;let r=l4(e.b);return r.ok?R(q$(t,n.value,r.value)):r}function d4(e){let t=e.op;if(!a4(t)||![`neg`,`sin`,`cos`,`sqrt`,`abs`].includes(t))return n4(`UnaryOp.op: ${String(t)}`);let n=l4(e.arg);return n.ok?R(J$(t,n.value)):n}function f4(e){let t=e.index;if(t!==0&&t!==1&&t!==2)return n4(`Component.index: ${String(t)}`);let n=l4(e.vec);return n.ok?R(Y$(n.value,t)):n}function p4(e){let t=e.dim;if(t!==2&&t!==3)return n4(`BuildVec.dim: ${String(t)}`);let n=e.components;if(!Array.isArray(n))return n4(`BuildVec.components: not array`);if(n.length!==t)return n4(`BuildVec.components: expected ${t} components, got ${n.length}`);let r=[];for(let e of n){let t=l4(e);if(!t.ok)return t;r.push(t.value)}return R(X$(t,r))}function m4(e,t){if(!Array.isArray(e))return n4(`${t}: not array`);let n=[];for(let t of e){let e=g4(t);if(!e.ok)return e;n.push(e.value)}return R(n)}function h4(e){let t=e.tolerance;return t==null?R(void 0):i4(t)?R(t):n4(`tolerance: not a finite number`)}function g4(e){if(!r4(e))return n4(`node: not an object`);let t=e.kind;switch(t){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:return v4(t,e);case`Fuse`:case`Cut`:case`Intersect`:return E4(t,e);case`FuseAll`:case`CutAll`:return D4(t,e);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return O4(t,e);case`Compound`:return W4(e);case`Instance`:return K4(e);case`Extrude`:return P4(e);case`Revolve`:return F4(e);case`Loft`:return I4(e);case`Path`:return U4(e);case`Sweep`:return H4(e);case`Profile`:return V4(e);case`Color`:return B4(e);default:return n4(`unknown node kind: ${String(t)}`)}}function _4(e,t,n){let r=l4(e[t]);return r.ok?R(n(r.value)):r}function v4(e,t){switch(e){case`Box`:return y4(t);case`Sphere`:return _4(t,`radius`,P1);case`Cylinder`:return b4(t);case`Cone`:return x4(t);case`Torus`:return S4(t);case`Polygon`:return C4(t);case`Circle`:return _4(t,`radius`,z1);case`Line`:return w4(t);case`Vertex`:return _4(t,`point`,V1);case`Empty`:return T4(t)}return n4(`unhandled primitive: ${e}`)}function y4(e){let t=l4(e.x);if(!t.ok)return t;let n=l4(e.y);if(!n.ok)return n;let r=l4(e.z);return r.ok?R(N1(t.value,n.value,r.value)):r}function b4(e){let t=l4(e.radius);if(!t.ok)return t;let n=l4(e.height);return n.ok?R(F1(t.value,n.value)):n}function x4(e){let t=l4(e.radius1);if(!t.ok)return t;let n=l4(e.radius2);if(!n.ok)return n;let r=l4(e.height);return r.ok?R(I1(t.value,n.value,r.value)):r}function S4(e){let t=l4(e.majorRadius);if(!t.ok)return t;let n=l4(e.minorRadius);return n.ok?R(L1(t.value,n.value)):n}function C4(e){let t=e.points;if(!Array.isArray(t))return n4(`Polygon.points: not array`);let n=[];for(let e of t){let t=l4(e);if(!t.ok)return t;n.push(t.value)}return R(R1(n))}function w4(e){let t=l4(e.from);if(!t.ok)return t;let n=l4(e.to);return n.ok?R(B1(t.value,n.value)):n}function T4(e){let t=e.output;switch(t){case`Solid`:return R(U1());case`Face`:return R(W1());case`Wire`:return R(G1());default:return n4(`Empty.output: ${String(t)}`)}}function E4(e,t){let n=g4(t.a);if(!n.ok)return n;let r=g4(t.b);if(!r.ok)return r;let i=h4(t);if(!i.ok)return i;switch(e){case`Fuse`:return R(q1(n.value,r.value,i.value));case`Cut`:return R(J1(n.value,r.value,i.value));case`Intersect`:return R(Y1(n.value,r.value,i.value))}}function D4(e,t){let n=h4(t);if(!n.ok)return n;if(e===`FuseAll`){let e=m4(t.shapes,`FuseAll.shapes`);return e.ok?R(X1(e.value,n.value)):e}let r=g4(t.base);if(!r.ok)return r;let i=m4(t.tools,`CutAll.tools`);return i.ok?R(Z1(r.value,i.value,n.value)):i}function O4(e,t){let n=g4(t.target);if(!n.ok)return n;switch(e){case`Translate`:return k4(t,n.value);case`Rotate`:return j4(t,n.value);case`Scale`:return M4(t,n.value);case`Mirror`:return N4(t,n.value)}}function k4(e,t){let n=l4(e.vector);return n.ok?R($1(t,n.value)):n}function A4(e,t){if(e[t]===void 0)return R(void 0);let n=l4(e[t]);return n.ok?R(n.value):n}function j4(e,t){let n=l4(e.angle);if(!n.ok)return n;let r=A4(e,`axis`);if(!r.ok)return r;let i=A4(e,`at`);return i.ok?R(e0(t,n.value,{axis:r.value,at:i.value})):i}function M4(e,t){let n=l4(e.factor);if(!n.ok)return n;let r=A4(e,`center`);return r.ok?R(t0(t,n.value,{center:r.value})):r}function N4(e,t){let n=A4(e,`normal`);if(!n.ok)return n;let r=A4(e,`at`);return r.ok?R(n0(t,{normal:n.value,at:r.value})):r}function P4(e){let t=g4(e.profile);if(!t.ok)return t;let n=l4(e.vector);return n.ok?R(r0(t.value,n.value)):n}function F4(e){let t=g4(e.profile);if(!t.ok)return t;let n=l4(e.angle);if(!n.ok)return n;let r=A4(e,`axis`);if(!r.ok)return r;let i=A4(e,`at`);return i.ok?R(l0(t.value,n.value,{axis:r.value,at:i.value})):i}function I4(e){let t=m4(e.sections,`Loft.sections`);if(!t.ok)return t;let n=e.ruled;return n!==void 0&&typeof n!=`boolean`?n4(`Loft.ruled: not a boolean`):R(c0(t.value,{ruled:n}))}function L4(e,t){let n=e[t];return n===void 0?R(!1):typeof n==`boolean`?R(n):n4(`${t}: not a boolean`)}function R4(e){if(!r4(e))return n4(`segment: not an object`);let t=l4(e.to);if(!t.ok)return t;let n=e.kind;switch(n){case`Line`:return R(g1(t.value));case`Arc`:{let n=l4(e.radius);if(!n.ok)return n;let r=L4(e,`largeArc`);if(!r.ok)return r;let i=L4(e,`clockwise`);return i.ok?R(_1(t.value,n.value,{largeArc:r.value,clockwise:i.value})):i}case`Bezier`:{let n=e.controls;if(!Array.isArray(n))return n4(`Bezier.controls: not array`);let r=[];for(let e of n){let t=l4(e);if(!t.ok)return t;r.push(t.value)}return R(v1(r,t.value))}case`EllipseArc`:{let n=l4(e.radii);if(!n.ok)return n;let r=l4(e.rotation);if(!r.ok)return r;let i=L4(e,`largeArc`);if(!i.ok)return i;let a=L4(e,`clockwise`);return a.ok?R(y1(t.value,n.value,{rotation:r.value,largeArc:i.value,clockwise:a.value})):a}default:return n4(`unknown segment kind: ${String(n)}`)}}function z4(e,t){if(!r4(e))return n4(`${t}: not an object`);let n=l4(e.start);if(!n.ok)return n;let r=e.segments;if(!Array.isArray(r))return n4(`${t}.segments: not array`);let i=[];for(let e of r){let t=R4(e);if(!t.ok)return t;i.push(t.value)}return R(b1(n.value,i))}function B4(e){let t=g4(e.target);if(!t.ok)return t;let n=e.color;return!Array.isArray(n)||n.length!==4||!n.every(e=>i4(e)&&e>=0&&e<=1)?n4(`Color.color: expected an RGBA array of 4 numbers in [0, 1]`):R(i0(t.value,[n[0],n[1],n[2],n[3]]))}function V4(e){let t=z4(e.outline,`Profile.outline`);if(!t.ok)return t;let n=e.holes;if(n!==void 0&&!Array.isArray(n))return n4(`Profile.holes: not array`);let r=[];for(let[e,t]of(Array.isArray(n)?n:[]).entries()){let n=z4(t,`Profile.holes[${e}]`);if(!n.ok)return n;r.push(n.value)}return R(a0(t.value,r))}function H4(e){let t=g4(e.profile);if(!t.ok)return t;let n=g4(e.spine);if(!n.ok)return n;let r=L4(e,`frenet`);return r.ok?R(o0(t.value,n.value,{frenet:r.value})):r}function U4(e){let t=l4(e.start);if(!t.ok)return t;let n=e.segments;if(!Array.isArray(n))return n4(`Path.segments: not array`);let r=[];for(let e of n){let t=R4(e);if(!t.ok)return t;r.push(t.value)}return R(s0(t.value,r))}function W4(e){let t=m4(e.children,`Compound.children`);return t.ok?R(u0(t.value)):t}function G4(e){return Array.isArray(e)&&e.length===4&&e.every(e=>Array.isArray(e)&&e.length===4&&e.every(i4))}function K4(e){let t=g4(e.source);if(!t.ok)return t;let n=e.placements;return!Array.isArray(n)||!n.every(G4)?n4(`Instance.placements must be an array of 4x4 number matrices`):R(d0(t.value,n,e.fuse===!0))}function q4(e){return X4(e)}function J4(e){switch(e.kind){case`NumLit`:case`Vec3Lit`:case`Vec2Lit`:case`Param`:return e;case`BinOp`:{let t=J4(e.a),n=J4(e.b);if(t.kind===`NumLit`&&n.kind===`NumLit`)switch(e.op){case`+`:return U$(t.value+n.value);case`-`:return U$(t.value-n.value);case`*`:return U$(t.value*n.value);case`/`:return U$(t.value/n.value)}return t!==e.a||n!==e.b?q$(e.op,t,n):e}case`UnaryOp`:{let t=J4(e.arg);if(t.kind===`NumLit`){let n=t.value;switch(e.op){case`neg`:return U$(-n);case`sin`:return U$(Math.sin(n));case`cos`:return U$(Math.cos(n));case`sqrt`:return U$(Math.sqrt(n));case`abs`:return U$(Math.abs(n))}}return t===e.arg?e:J$(e.op,t)}case`Component`:{let t=J4(e.vec);return t.kind===`Vec3Lit`||t.kind===`Vec2Lit`&&(e.index===0||e.index===1)?U$(t.value[e.index]):t===e.vec?e:Y$(t,e.index)}case`BuildVec`:{let t=e.components.map(J4);return Y4(e.dim,t)||(t.some((t,n)=>t!==e.components[n])?X$(e.dim,t):e)}}}function Y4(e,t){if(t.length!==e)return;let n=[];for(let e of t){if(e.kind!==`NumLit`)return;n.push(e.value)}return e===2?G$([n[0],n[1]]):W$([n[0],n[1],n[2]])}function X4(e){switch(e.kind){case`Box`:return N1(J4(e.x),J4(e.y),J4(e.z));case`Sphere`:return P1(J4(e.radius));case`Cylinder`:return F1(J4(e.radius),J4(e.height));case`Cone`:return I1(J4(e.radius1),J4(e.radius2),J4(e.height));case`Torus`:return L1(J4(e.majorRadius),J4(e.minorRadius));case`Polygon`:return R1(e.points.map(J4));case`Circle`:return z1(J4(e.radius));case`Line`:return B1(J4(e.from),J4(e.to));case`Vertex`:return V1(J4(e.point));case`Empty`:return e;case`Fuse`:return Q4(e.a,e.b,e.tolerance);case`Cut`:return $4(e.a,e.b,e.tolerance);case`Intersect`:return e3(e.a,e.b,e.tolerance);case`FuseAll`:return t3(e.shapes,e.tolerance);case`CutAll`:return n3(e.base,e.tools,e.tolerance);case`Translate`:return r3(e.target,e.vector);case`Rotate`:return e0(X4(e.target),J4(e.angle),{axis:e.axis?J4(e.axis):void 0,at:e.at?J4(e.at):void 0});case`Scale`:return t0(X4(e.target),J4(e.factor),{center:e.center?J4(e.center):void 0});case`Mirror`:return n0(X4(e.target),{normal:e.normal?J4(e.normal):void 0,at:e.at?J4(e.at):void 0});case`Compound`:return u0(e.children.map(X4).filter(e=>e.kind!==`Empty`));case`Instance`:return d0(X4(e.source),e.placements,e.fuse);case`Extrude`:case`Revolve`:case`Loft`:case`Sweep`:case`Profile`:case`Path`:case`Color`:return Z4(e)}}function Z4(e){switch(e.kind){case`Extrude`:return r0(X4(e.profile),J4(e.vector));case`Revolve`:return l0(X4(e.profile),J4(e.angle),{axis:e.axis?J4(e.axis):void 0,at:e.at?J4(e.at):void 0});case`Loft`:return c0(e.sections.map(X4),{ruled:e.ruled});case`Sweep`:return o0(X4(e.profile),X4(e.spine),{frenet:e.frenet});case`Profile`:return a0(T1(e.outline,J4),e.holes.map(e=>T1(e,J4)));case`Path`:return s0(J4(e.start),e.segments.map(e=>E1(e,J4)));case`Color`:return i0(X4(e.target),[...e.color])}}function Q4(e,t,n){let r=X4(e),i=X4(t);return r.kind===`Empty`?i:i.kind===`Empty`?r:q1(r,i,n)}function $4(e,t,n){let r=X4(e),i=X4(t);return i.kind===`Empty`||r.kind===`Empty`?r:J1(r,i,n)}function e3(e,t,n){let r=X4(e),i=X4(t);return r.kind===`Empty`?r:i.kind===`Empty`?i:Y1(r,i,n)}function t3(e,t){let n=e.map(X4).filter(e=>e.kind!==`Empty`);return n.length===0?U1():n.length===1?n[0]:X1(n,t)}function n3(e,t,n){let r=X4(e);if(r.kind===`Empty`)return r;let i=t.map(X4).filter(e=>e.kind!==`Empty`);return i.length===0?r:Z1(r,i,n)}function r3(e,t){let n=X4(e),r=J4(t);if(r.kind!==`Vec3Lit`)return $1(n,r);let[i,a,o]=r.value;if(i===0&&a===0&&o===0)return n;if(n.kind===`Translate`){let e=J4(n.vector);if(e.kind===`Vec3Lit`)return $1(n.target,[e.value[0]+i,e.value[1]+a,e.value[2]+o])}return $1(n,r)}function i3(e,t,n){return a3(e,t,n)}function a3(e,t,n){return t(e)?n:o3(e,t,n)}function o3(e,t,n){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:case`Path`:case`Profile`:return e;case`Fuse`:return q1(a3(e.a,t,n),a3(e.b,t,n),e.tolerance);case`Cut`:return J1(a3(e.a,t,n),a3(e.b,t,n),e.tolerance);case`Intersect`:return Y1(a3(e.a,t,n),a3(e.b,t,n),e.tolerance);case`FuseAll`:return X1(e.shapes.map(e=>a3(e,t,n)),e.tolerance);case`CutAll`:return Z1(a3(e.base,t,n),e.tools.map(e=>a3(e,t,n)),e.tolerance);case`Translate`:return $1(a3(e.target,t,n),e.vector);case`Rotate`:return e0(a3(e.target,t,n),e.angle,{axis:e.axis,at:e.at});case`Scale`:return t0(a3(e.target,t,n),e.factor,{center:e.center});case`Mirror`:return n0(a3(e.target,t,n),{normal:e.normal,at:e.at});case`Compound`:return u0(e.children.map(e=>a3(e,t,n)));case`Instance`:return d0(a3(e.source,t,n),e.placements,e.fuse);case`Extrude`:return r0(a3(e.profile,t,n),e.vector);case`Revolve`:return l0(a3(e.profile,t,n),e.angle,{axis:e.axis,at:e.at});case`Loft`:return c0(e.sections.map(e=>a3(e,t,n)),{ruled:e.ruled});case`Sweep`:return o0(a3(e.profile,t,n),a3(e.spine,t,n),{frenet:e.frenet});case`Color`:return i0(a3(e.target,t,n),[...e.color])}}function s3(e,t){t(e);for(let n of c3(e))s3(n,t)}function c3(e){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:case`Path`:case`Profile`:return[];case`Fuse`:case`Cut`:case`Intersect`:return[e.a,e.b];case`FuseAll`:return e.shapes;case`CutAll`:return[e.base,...e.tools];case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:case`Color`:return[e.target];case`Compound`:return e.children;case`Instance`:return[e.source];case`Extrude`:case`Revolve`:return[e.profile];case`Loft`:return e.sections;case`Sweep`:return[e.profile,e.spine]}}function l3(e){let t=0;return s3(e,()=>{t++}),t}var u3=1e-6;function d3(e){return[e[0]??0,e[1]??0]}function f3(e,t){return Math.hypot(e[0]-t[0],e[1]-t[1])<u3}function p3(e){return z(W(`BLUEPRINT_CONTOUR`,`blueprintToContour: ${e}`))}function m3(e){return d3(e.value((e.firstParameter+e.lastParameter)/2))}function h3(e,t,n){let[r,i]=e,[a,o]=t,[s,c]=n,l=2*(r*(o-c)+a*(c-i)+s*(i-o));if(Math.abs(l)<1e-12)return p3(`arc: collinear sample points`);let u=r*r+i*i,d=a*a+o*o,f=s*s+c*c,p=(u*(o-c)+d*(c-i)+f*(i-o))/l,m=(u*(s-a)+d*(r-s)+f*(a-r))/l,h=Math.hypot(r-p,i-m),g=(e,t)=>e[0]*t[1]-e[1]*t[0],_=g([a-r,o-i],[s-a,c-o])<0,v=[s-r,c-i];return R(_1(n,h,{largeArc:g(v,[a-r,o-i])*g(v,[p-r,m-i])>0,clockwise:_}))}function g3(e,t){let n=Math.cos(t),r=Math.sin(t);return[n*e[0]+r*e[1],-r*e[0]+n*e[1]]}function _3(e,t,n,r){let{a:i,b:a}=r,o=r.phi,s=g3(e,o),c=g3(t,o),l=g3(n,o),u=(s[0]-c[0])/2,d=(s[1]-c[1])/2,f=u*u/(i*i)+d*d/(a*a);if(f>1){let e=Math.sqrt(f);i*=e,a*=e}let p=i*i*a*a-i*i*d*d-a*a*u*u,m=i*i*d*d+a*a*u*u;if(m<1e-12)return p3(`ellipse: coincident endpoints`);let h=Math.sqrt(Math.max(0,p/m)),g=(s[0]+c[0])/2,_=(s[1]+c[1])/2,v=[[g+h*i*d/a,_-h*a*u/i],[g-h*i*d/a,_+h*a*u/i]],y=e=>{let t=(l[0]-e[0])/i,n=(l[1]-e[1])/a;return Math.abs(t*t+n*n-1)},b=y(v[0])<=y(v[1])?v[0]:v[1],x=e=>Math.atan2((e[1]-b[1])/a,(e[0]-b[0])/i),S=2*Math.PI,C=x(s),w=((x(l)-C)%S+S)%S,ee=((x(c)-C)%S+S)%S,te=w<ee,ne=te?ee:S-ee;return R(y1(t,[r.a,r.b],{rotation:o*180/Math.PI,largeArc:ne>Math.PI,clockwise:!te}))}function v3(e,t){let n=MT(),r=d3(e.firstPoint);if(e.geomType===`CIRCLE`){let i=n.getCurve2dCircleData(e.wrapped);if(!i)return p3(`circle: kernel returned no circle data`);let a=[2*i.cx-r[0],2*i.cy-r[1]],o=!i.isDirect;return t.push(_1(a,i.radius,{clockwise:o}),_1(r,i.radius,{clockwise:o})),R(r)}let i=n.getCurve2dEllipseData(e.wrapped);if(!i)return p3(`ellipse: kernel returned no ellipse data`);let a=d3(e.boundingBox.center),o=[2*a[0]-r[0],2*a[1]-r[1]],s=!i.isDirect,c=i.xAxisAngle*180/Math.PI,l=[i.majorRadius,i.minorRadius];return t.push(y1(o,l,{rotation:c,clockwise:s}),y1(r,l,{rotation:c,clockwise:s})),R(r)}function y3(e,t,n,r){let i=e.geomType;if(i===`LINE`)return R(g1(n));if(i===`CIRCLE`)return h3(t,m3(e),n);if(i===`BEZIER_CURVE`){let t=MT().getCurve2dBezierPoles(e.wrapped);if(!t)return p3(`bezier: kernel returned no poles`);let i=t.map(d3);r&&i.reverse();let a=i.slice(1,-1);return a.length===0?R(g1(n)):a.length>2?p3(`bezier: unsupported degree ${i.length-1}`):R(v1(a,n))}if(i===`ELLIPSE`){let r=MT().getCurve2dEllipseData(e.wrapped);return r?_3(t,n,m3(e),{a:r.majorRadius,b:r.minorRadius,phi:r.xAxisAngle}):p3(`ellipse: kernel returned no ellipse data`)}return p3(`unsupported curve type: ${i}`)}var b3=new Set([`LINE`,`CIRCLE`,`BEZIER_CURVE`,`ELLIPSE`]);function x3(e,t){let n=t?.tolerance??1e-4,r=e.curves[0];if(!r)return p3(`blueprint has no curves`);let i=d3(r.firstPoint),a=i,o=[];for(let t of e.curves){let e=b3.has(t.geomType)?[t]:tR([t],{tolerance:n,continuity:`C0`,maxSegments:300}),r=e[0]!==t;try{let t=e[0];e.length>1&&t!==void 0&&!f3(d3(t.firstPoint),a)&&!f3(d3(t.lastPoint),a)&&e.reverse();for(let t of e){let e=S3(t,a,o);if(!e.ok)return e;a=e.value}}finally{if(r)for(let t of e)t.delete()}}return R(b1(i,o))}function S3(e,t,n){let r=d3(e.firstPoint),i=d3(e.lastPoint);if(f3(r,i)&&(e.geomType===`CIRCLE`||e.geomType===`ELLIPSE`))return v3(e,n);let a,o;if(f3(r,t))a=i,o=!1;else if(f3(i,t))a=r,o=!0;else return p3(`curve is not chained to the current point (${e.geomType})`);let s=y3(e,t,a,o);return s.ok?(n.push(s.value),R(a)):s}function C3(e){return F().createVector3d(e[0],e[1],e[2])}function w3(e){return F().createPoint3d(e[0],e[1],e[2])}function T3(e){return F().createDirection3d(e[0],e[1],e[2])}function E3(e){return[e.X(),e.Y(),e.Z()]}function D3(e){return[e.X(),e.Y(),e.Z()]}function O3(e){return[e.X(),e.Y(),e.Z()]}function k3(e,t){let n=C3(e);try{return t(n)}finally{n.delete()}}function A3(e,t){let n=w3(e);try{return t(n)}finally{n.delete()}}function j3(e,t){let n=T3(e);try{return t(n)}finally{n.delete()}}var M3=.299,N3=.587,P3=.114;function F3(e,t={}){if(e.length<2)return z(W(H.SURFACE_GRID_TOO_SMALL,`surfaceFromGrid: need at least 2 rows, got ${e.length}`));let n=e.length,r=e[0]?.length??0;if(r<2)return z(W(H.SURFACE_GRID_TOO_SMALL,`surfaceFromGrid: need at least 2 columns, got ${r}`));for(let t=0;t<n;t++){let n=e[t];if(!n||n.length!==r)return z(W(H.SURFACE_GRID_JAGGED,`surfaceFromGrid: row ${t} has ${n?.length??0} columns, expected ${r}`))}let{width:i=r-1,depth:a=n-1,scaleZ:o=1}=t,s=i/(r-1),c=a/(n-1);try{return I3(e,n,r,s,c,o)}catch{}try{return L3(e,n,r,s,c,o)}catch(e){let t=e instanceof Error?e.message:String(e);return z(U(H.SURFACE_FAILED,`surfaceFromGrid failed: ${t}`,e))}}function I3(e,t,n,r,i,a){let o=[];for(let s=0;s<t;s++)for(let t=0;t<n;t++){let n=e[s],c=(n?n[t]??0:0)*a;o.push([t*r,s*i,c])}let s=I(F().bsplineSurface(o,t,n));return jE(s)?R(s):(L(s),z(U(H.SURFACE_FAILED,`B-spline surface did not produce a face`)))}function L3(e,t,n,r,i,a){let o=[];for(let s=0;s<t;s++)for(let t=0;t<n;t++){let n=e[s],c=(n?n[t]??0:0)*a;o.push([t*r,s*i,c])}let s=I(F().triangulatedSurface(o,t,n));return jE(s)||ME(s)?R(s):(L(s),z(U(H.SURFACE_FAILED,`surfaceFromGrid: unexpected shape type from sewing`)))}async function R3(e,t={}){let n=t.channel??`luminance`,r=Math.max(1,Math.round(t.downsample??1));if(typeof createImageBitmap!=`function`)return z(yD(H.SURFACE_FAILED,`surfaceFromImage requires createImageBitmap (not available in this environment)`));let i;try{i=await createImageBitmap(e)}catch(e){return z(yD(H.SURFACE_FAILED,`surfaceFromImage: failed to decode image — ${e instanceof Error?e.message:String(e)}`))}let a=i.width,o=i.height;if(a<2||o<2)return i.close(),z(W(H.SURFACE_GRID_TOO_SMALL,`surfaceFromImage: image too small (${a}x${o}), need at least 2x2`));if(typeof OffscreenCanvas!=`function`)return i.close(),z(yD(H.SURFACE_FAILED,`surfaceFromImage requires OffscreenCanvas (not available in this environment)`));let s=new OffscreenCanvas(a,o).getContext(`2d`);if(!s)return i.close(),z(yD(H.SURFACE_FAILED,`surfaceFromImage: could not get 2D canvas context`));s.drawImage(i,0,0),i.close();let c=s.getImageData(0,0,a,o).data,l=[];for(let e=0;e<o;e+=r){let t=[];for(let i=0;i<a;i+=r){let r=(e*a+i)*4,o=c[r]??0,s=c[r+1]??0,l=c[r+2]??0,u;switch(n){case`r`:u=o/255;break;case`g`:u=s/255;break;case`b`:u=l/255;break;default:u=(M3*o+N3*s+P3*l)/255}t.push(u)}l.push(t)}let u={};return t.width!==void 0&&(u.width=t.width),t.depth!==void 0&&(u.depth=t.depth),t.scaleZ!==void 0&&(u.scaleZ=t.scaleZ),F3(l,u)}function z3(e,t){return F().isNull(e.wrapped)?z(W(H.NULL_SHAPE_INPUT,`${t} is a null shape`)):R(void 0)}function B3(e,t={}){if(e.length===0)return z(W(H.HULL_EMPTY_INPUT,`hull: at least one shape is required`,void 0,void 0,`Provide one or more shapes to compute a convex hull`));for(let[t,n]of e.entries()){let e=z3(n,`hull: shapes[${t}]`);if(B(e))return e}let n=t.tolerance??.1;try{let t=F(),r=e.map(e=>e.wrapped),i=I(t.hull(r,n));return NE(i)?R(i):(L(i),z(U(H.HULL_NOT_3D,`Hull result is not a solid; input may be degenerate`)))}catch(e){let t=e instanceof Error?e.message:String(e);return t.includes(`coplanar`)||t.includes(`fewer than`)||t.includes(`degenerate`)?z(U(H.HULL_DEGENERATE,`Hull degenerate: ${t}`,e)):z(U(H.HULL_FAILED,`Hull operation failed: ${t}`,e))}}function V3(e){if(e.length<4)return z(W(H.HULL_EMPTY_INPUT,`convexHull: at least 4 points required, got ${e.length}`,void 0,void 0,`Provide 4 or more non-coplanar 3D points`));try{let t=F(),n=e.map(e=>({x:e[0],y:e[1],z:e[2]})),r=I(t.hullFromPoints(n,.1));return NE(r)?R(r):(L(r),z(U(H.HULL_NOT_3D,`convexHull result is not a solid; points may be coplanar`)))}catch(e){let t=e instanceof Error?e.message:String(e);return t.includes(`coplanar`)||t.includes(`fewer than`)||t.includes(`degenerate`)?z(U(H.HULL_DEGENERATE,`convexHull degenerate: ${t}`,e)):z(U(H.HULL_FAILED,`convexHull failed: ${t}`,e))}}function H3(e){let n=WD(e);if(n.length!==1)return null;let r=t(n,0);if(aO(r)!==`sphere`)return null;let i=F().area(r.wrapped);return Math.sqrt(i/(4*Math.PI))}function U3(e,t,n){try{let r=I(F().offset(e.wrapped,t,n));return FE(r)?R(r):(L(r),z(hD(H.MINKOWSKI_NOT_3D,`Minkowski sphere offset did not produce a 3D shape`)))}catch(e){let t=e instanceof Error?e.message:String(e);return z(U(H.MINKOWSKI_FAILED,`Minkowski sphere offset failed: ${t}`,e,{operation:`minkowski`,fastPath:`sphere`}))}}function W3(e,t,n){let r=F();try{let i=KD(e),a=KD(t);if(i.length===0||a.length===0)return z(U(H.MINKOWSKI_FAILED,`Minkowski sum: one or both shapes have no vertices`,void 0,{operation:`minkowski`}));let o=[];for(let e of i){let[t,n,i]=r.vertexPosition(e.wrapped);for(let e of a){let[a,s,c]=r.vertexPosition(e.wrapped);o.push({x:t+a,y:n+s,z:i+c})}}let s=I(r.hullFromPoints(o,n));return FE(s)?R(s):(L(s),z(hD(H.MINKOWSKI_NOT_3D,`Minkowski hull did not produce a 3D shape`)))}catch(e){let t=e instanceof Error?e.message:String(e);return z(U(H.MINKOWSKI_FAILED,`Minkowski general path failed: ${t}`,e,{operation:`minkowski`}))}}function G3(e,t,n={}){let{tolerance:r=1e-6}=n;if(F().isNull(e.wrapped))return z(W(H.NULL_SHAPE_INPUT,`minkowski: shape is a null shape`));if(F().isNull(t.wrapped))return z(W(H.MINKOWSKI_NULL_TOOL,`minkowski: tool is a null shape`));if(!FE(e)||!FE(t))return z(W(H.MINKOWSKI_NOT_3D,`minkowski: both shape and tool must be 3D`));let i=H3(t);return i===null?W3(e,t,r):U3(e,i,r)}function K3(e,t,n={}){let{tolerance:r=1e-6}=n;if(e.length<4)return z(W(H.POLYHEDRON_INSUFFICIENT_POINTS,`polyhedron: need at least 4 points, got ${e.length}`));if(t.length<4)return z(W(H.POLYHEDRON_INSUFFICIENT_FACES,`polyhedron: need at least 4 faces, got ${t.length}`));let i=[];for(let[n,r]of t.entries()){for(let t of r)if(t<0||t>=e.length)return z(W(H.POLYHEDRON_INVALID_INDEX,`polyhedron: face ${n} has out-of-range index ${t} (${e.length} points)`));if(r.length<3)continue;let t=r[0];for(let e=1;e<r.length-1;e++)i.push([t,r[e],r[e+1]])}try{let t=F(),n=e.map(([e,t,n])=>({x:e,y:t,z:n})),a=I(t.buildSolidFromFaces(n,i,r));return NE(a)?R(a):(L(a),z(U(H.POLYHEDRON_FAILED,`Polyhedron did not produce a solid`)))}catch(e){let t=e instanceof Error?e.message:String(e);return z(U(H.POLYHEDRON_FAILED,`Polyhedron failed: ${t}`,e))}}var q3=1e-10;function J3(e,t,n,r){return e*r-t*n}function Y3(e,t,n,r){return e*n+t*r}function X3(e,t){return Math.sqrt(e*e+t*t)}function Z3(e,t){let n=e[(t%e.length+e.length)%e.length];if(!n)throw Error(`Invalid polygon index ${t} for length ${e.length}`);return n}function Q3(e){let t=0;for(let n=0;n<e.length;n++){let r=Z3(e,n),i=Z3(e,n+1);t+=r.x*i.y-i.x*r.y}return t<0?[...e].reverse():e}function $3(e,t){let n=Z3(e,t-1),r=Z3(e,t),i=Z3(e,t+1),a=r.x-n.x,o=r.y-n.y,s=X3(a,o),c=i.x-r.x,l=i.y-r.y,u=X3(c,l);if(s<q3||u<q3)return{dx:0,dy:0};let d=-o/s,f=a/s,p=-l/u,m=c/u,h=d+p,g=f+m,_=X3(h,g);if(_<q3)return{dx:d,dy:f};h/=_,g/=_;let v=Y3(h,g,d,f),y=Math.abs(v)>q3?1/v:1;return{dx:h*y,dy:g*y}}function e6(e){return!e.prev||!e.next?!1:J3(e.x-e.prev.x,e.y-e.prev.y,e.next.x-e.x,e.next.y-e.y)<-1e-10}function t6(e){let t=e.map((t,n)=>{let r=$3(e,n);return{x:t.x,y:t.y,bx:r.dx,by:r.dy,origIdx:n,prev:null,next:null,active:!0}});for(let e=0;e<t.length;e++){let n=t[e],r=t[(e-1+t.length)%t.length],i=t[(e+1)%t.length];n&&r&&i&&(n.prev=r,n.next=i)}return t}function n6(e,t){let n=e;for(let e=0;e<t&&n;e++)n.active=!1,n=n.next}function r6(e){let t=1,n=e.next;for(;n!==e&&(t++,n=n.next,!(t>1e4)););return t}function i6(e,t){let n=e.bx-t.bx,r=e.by-t.by,i=t.x-e.x,a=t.y-e.y;if(Math.abs(n)<q3&&Math.abs(r)<q3)return null;let o;if(o=Math.abs(n)>Math.abs(r)?i/n:a/r,o<q3)return null;let s=Math.abs(n)>Math.abs(r)?r:n,c=Math.abs(n)>Math.abs(r)?a:i;if(Math.abs(s)>q3){let e=c/s;if(Math.abs(o-e)>1e-4*Math.max(1,Math.abs(o)))return null}return o}function a6(e,t,n){let r=n.x-t.x,i=n.y-t.y,a=X3(r,i);if(a<q3)return null;let o=-i/a,s=r/a,c=(e.x-t.x)*o+(e.y-t.y)*s,l=e.bx-(t.bx+n.bx)/2,u=e.by-(t.by+n.by)/2,d=l*o+u*s;if(Math.abs(d)<q3)return null;let f=-c/d;if(f<q3)return null;let p=e.x+f*e.bx,m=e.y+f*e.by,h=t.x+f*t.bx,g=t.y+f*t.by,_=n.x+f*n.bx,v=n.y+f*n.by,y=_-h,b=v-g,x=X3(y,b);if(x<q3)return f;let S=Y3(p-h,m-g,y,b)/(x*x);return S<-.01||S>1.01?null:f}function o6(e){let t=[];for(let n of e){if(!n.active||!n.next)continue;let e=i6(n,n.next);if(e!==null&&e>q3){let r=n.x+e*n.bx,i=n.y+e*n.by;t.push({time:e,x:r,y:i,nodeA:n,nodeB:n.next,type:`edge`})}if(e6(n)){let e=n.next.next,r=0;for(;e!==n.prev&&e!==n&&r<1e3;){let i=a6(n,e,e.next);if(i!==null&&i>q3){let r=n.x+i*n.bx,a=n.y+i*n.by;t.push({time:i,x:r,y:a,nodeA:n,nodeB:e,type:`split`})}e=e.next,r++}}}return t.sort((e,t)=>e.time-t.time),t}function s6(e){if(e.length<3)return R({nodes:[],faces:[]});try{return R(c6(e))}catch(e){return z(vD(H.STRAIGHT_SKELETON_FAILED,e instanceof Error?e.message:String(e),e))}}function c6(e){let t=Q3(e),n=t.length,r=[],i=Array.from({length:n},()=>[]),a=t6(t),o=0,s=n*n*2;for(;o<s;){o++;let e=a.find(e=>e.active);if(!e)break;let t=r6(e);if(t<=3){if(t===3){let t=e,n=t.next,a=n.next,o=i6(t,n),s=o!==null&&o>q3?o:0,c=(t.x+n.x+a.x)/3+s*(t.bx+n.bx+a.bx)/3,l=(t.y+n.y+a.y)/3+s*(t.by+n.by+a.by)/3,u=r.length;r.push({x:c,y:l,height:s});let d=i[t.origIdx],f=i[n.origIdx],p=i[a.origIdx];d&&d.push(u),f&&f.push(u),p&&p.push(u),t.active=!1,n.active=!1,a.active=!1}else n6(e,t);continue}let n=a.filter(e=>e.active),s=o6(n);if(s.length===0){for(let e of n)e.active=!1;break}let c=s[0];if(!c)break;if(c.type===`edge`){let e=c.nodeA,t=c.nodeB;if(!e.active||!t.active)continue;let n=r.length;r.push({x:c.x,y:c.y,height:c.time});let a=i[e.origIdx],o=i[t.origIdx];a&&a.push(n),o&&o.push(n),e.x=c.x,e.y=c.y,e.next=t.next,t.next.prev=e,t.active=!1;let s=[],l=e;do s.push({x:l.x,y:l.y}),l=l.next;while(l!==e);let u=$3(s,0);e.bx=u.dx,e.by=u.dy}else{let e=c.nodeA,t=c.nodeB;if(!e.active||!t.active)continue;let n=r.length;r.push({x:c.x,y:c.y,height:c.time});let o=i[e.origIdx];o&&o.push(n);let s=i[t.origIdx];s&&s.push(n);let l={x:c.x,y:c.y,bx:0,by:0,origIdx:e.origIdx,prev:null,next:null,active:!0};a.push(l),e.x=c.x,e.y=c.y;let u=e.next,d=t.next;e.next=d,d.prev=e,l.next=u,u.prev=l,l.prev=t,t.next=l;let f=e=>{let t=[],n=e;do t.push({x:n.x,y:n.y}),n=n.next;while(n!==e);return t},p=$3(f(e),0);e.bx=p.dx,e.by=p.dy;let m=$3(f(l),0);l.bx=m.dx,l.by=m.dy}}let c=[];for(let e=0;e<n;e++){let a=(e+1)%n,o=[Z3(t,e),Z3(t,a)],s=[0,0],l=i[a],u=i[e];if(l)for(let e of l){let t=r[e];t&&(o.push({x:t.x,y:t.y}),s.push(t.height))}if(u)for(let e=u.length-1;e>=0;e--){let t=u[e];if(t===void 0)continue;let n=r[t];if(!n)continue;let i=o[o.length-1];i&&X3(n.x-i.x,n.y-i.y)>q3&&(o.push({x:n.x,y:n.y}),s.push(n.height))}o.length>=3&&c.push({vertices:o,heights:s})}let l=[];for(let e of r)l.some(t=>Math.abs(t.x-e.x)<.01&&Math.abs(t.y-e.y)<.01)||l.push(e);return{nodes:l,faces:c}}function l6(e){let t=UD(e).map(e=>{let t=Xj(e);return{x:t[0],y:t[1]}}),n=t[0],r=t[t.length-1];return t.length>1&&n&&r&&Math.abs(n.x-r.x)<1e-10&&Math.abs(n.y-r.y)<1e-10&&t.pop(),t}function u6(e){let t=[];for(let n=1;n<e-1;n++)t.push([0,n,n+1]);return t}function d6(e,t,n,r,i,a){return(n-e)*(a-t)-(r-t)*(i-e)}function f6(e,t,n,r,i,a,o,s){let c=d6(n,r,i,a,e,t),l=d6(i,a,o,s,e,t),u=d6(o,s,n,r,e,t);return!((c<0||l<0||u<0)&&(c>0||l>0||u>0))}function p6(e){let t=e.length;if(t<3)return[];if(t===3)return[[0,1,2]];let n=0;for(let r=0;r<t;r++){let i=e[r],a=e[(r+1)%t];i&&a&&(n+=i.x*a.y-a.x*i.y)}let r=[],i=Array.from({length:t},(e,t)=>t);n<0&&i.reverse();let a=(t,n,r)=>{let a=e[t],o=e[n],s=e[r];if(!a||!o||!s||d6(a.x,a.y,o.x,o.y,s.x,s.y)<=0)return!1;for(let c of i){if(c===t||c===n||c===r)continue;let i=e[c];if(i&&f6(i.x,i.y,a.x,a.y,o.x,o.y,s.x,s.y))return!1}return!0};for(;i.length>3;){let e=!1;for(let t=0;t<i.length;t++){let n=i[(t-1+i.length)%i.length],o=i[t],s=i[(t+1)%i.length];if(n!==void 0&&o!==void 0&&s!==void 0&&a(n,o,s)){r.push([n,o,s]),i.splice(t,1),e=!0;break}}if(!e)break}if(i.length===3){let[e,t,n]=i;e!==void 0&&t!==void 0&&n!==void 0&&r.push([e,t,n])}return r}function m6(e,t,n){let r=[];for(let i of e.faces){let e=i.vertices.map((e,n)=>[e.x,e.y,(i.heights[n]??0)*t]),a=u6(e.length);for(let[t,i,o]of a){let a=e[t],s=e[i],c=e[o];if(!a||!s||!c)continue;let l=s[0]-a[0],u=s[1]-a[1],d=s[2]-a[2],f=c[0]-a[0],p=c[1]-a[1],m=c[2]-a[2],h=u*m-d*p,g=d*f-l*m,_=l*p-u*f;if(h*h+g*g+_*_<1e-20)continue;let v=n.buildTriFace(a,s,c);v!==null&&r.push(v)}}return r}function h6(e,t){let n=(t?.angle??45)*CD,r=Math.tan(n);try{let t=l6(e);if(t.length<3)return z(U(H.ROOF_FAILED,`Wire must have at least 3 edges for roof generation`));let n=s6(t);if(!n.ok)return n;let i=n.value;if(i.faces.length===0)return z(U(H.ROOF_FAILED,`Straight skeleton computation produced no faces`));let a=F(),o=m6(i,r,a);for(let[e,n,r]of p6(t)){let i=t[e],s=t[n],c=t[r];if(!i||!s||!c)continue;let l=[i.x,i.y,0],u=[s.x,s.y,0],d=[c.x,c.y,0],f=a.buildTriFace(l,d,u);f!==null&&o.push(f)}if(o.length===0)return z(U(H.ROOF_FAILED,`No valid triangular faces could be built`));try{let e=a.sewAndSolidify(o,1e-6),t=a.fixShape(e);return t!==e&&a.dispose(e),R(TE(t))}catch(e){try{let t=TE(a.sew(o,1e-6));return fO(t)?R(t):z(U(H.ROOF_FAILED,`Sew fallback produced invalid solid`,e))}catch(e){return z(U(H.ROOF_FAILED,`Failed to sew roof faces`,e))}}finally{for(let e of o)a.dispose(e)}}catch(e){let t=e instanceof Error?e.message:String(e);return z(U(H.ROOF_FAILED,`Roof generation failed: ${t}`,e))}}var g6={coincident:3,concentric:4,distance:1,angle:1},_6=[1,0,0,0];function v6(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function y6(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function b6(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function x6(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 S6(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function C6(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function w6(e){return C6(x6(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function T6(e,t){let n=v6(LF(t.rotation,e.origin),t.position);return{type:e.type,origin:n,...e.normal?{normal:LF(t.rotation,e.normal)}:{},...e.direction?{direction:LF(t.rotation,e.direction)}:{}}}function E6(e,t,n){let r=e.normal??[0,0,1];return{position:S6(r,b6(r,y6(e.origin,t.origin))+n),rotation:_6}}function D6(e,t){let n=e.direction??[0,0,1],r=zF(t.direction??[0,0,1],n),i=LF(r,t.origin);return{position:y6(e.origin,i),rotation:r}}function O6(e,t,n){let r=C6(e.normal??[0,0,1]),i=C6(t.normal??[0,0,1]),a=Math.acos(Math.max(-1,Math.min(1,b6(i,r)))),o=x6(i,r);return{position:[0,0,0],rotation:RF(Math.hypot(o[0],o[1],o[2])<1e-9?w6(i):o,a-n)}}function k6(e,t,n){let r=y6(t,e),i=Math.hypot(r[0],r[1],r[2]);return{position:y6(v6(e,S6(i<1e-9?[1,0,0]:S6(r,1/i),n)),t),rotation:_6}}function A6(e,t,n,r){let i=C6(e);return{position:S6(i,b6(i,y6(t,n))-r),rotation:_6}}function j6(e,t,n){let r=C6(e.direction??[0,0,1]),i=v6(e.origin,S6(r,b6(r,y6(t,e.origin))));if(n===0)return{position:y6(i,t),rotation:_6};let a=y6(t,i),o=Math.hypot(a[0],a[1],a[2]);return{position:y6(v6(i,S6(o<1e-9?w6(r):S6(a,1/o),n)),t),rotation:_6}}function M6(e,t,n){let r=C6(t.direction??[0,0,1]),i=y6(t.origin,e),a=y6(i,S6(r,b6(r,i))),o=Math.hypot(a[0],a[1],a[2]);return n===0?{position:S6(a,-1),rotation:_6}:{position:y6(S6(o<1e-9?w6(r):S6(a,1/o),n),a),rotation:_6}}function N6(e,t,n){let r=C6(e.direction??[0,0,1]),i=zF(C6(t.direction??[0,0,1]),r),a=y6(LF(i,t.origin),e.origin),o=y6(a,S6(r,b6(r,a))),s=Math.hypot(o[0],o[1],o[2]);return{position:y6(S6(s<1e-9?w6(r):S6(o,1/s),n),o),rotation:i}}var P6=new Set([`plane-plane`,`plane-point`,`point-plane`,`point-point`,`axis-axis`,`axis-point`,`point-axis`]),F6={angle:`plane`,concentric:`axis`},I6=new Set([`coincident`,`distance`,`angle`,`concentric`]);function L6(e,t,n){let r=F6[e];return r?t===r&&n===r:P6.has(`${t}-${n}`)}function R6(e,t,n){switch(`${e.type}-${t.type}`){case`plane-plane`:case`plane-point`:return E6(e,t,n);case`point-plane`:return A6(t.normal??[0,0,1],e.origin,t.origin,n);case`point-point`:return k6(e.origin,t.origin,n);case`axis-axis`:return n===0?D6(e,t):N6(e,t,n);case`axis-point`:return j6(e,t.origin,n);case`point-axis`:return M6(e.origin,t,n);default:return null}}function z6(e,t,n){switch(e.type){case`concentric`:return D6(t,n);case`angle`:return O6(t,n,(e.value??0)*Math.PI/180);default:{let r=R6(t,n,e.type===`distance`?e.value??0:0);if(!r)throw Error(`solveMate: unsupported entity pair escaped filter: ${t.type}-${n.type}`);return r}}}function B6(e,t){let n=new Map;for(let t of e)n.set(t,{position:[0,0,0],rotation:_6});let r=[],i=t.filter(e=>I6.has(e.type)&&e.entityA&&e.entityB),a=new Set;for(let e of i)e.entityB&&a.add(e.entityB.node);let o=new Set;for(let t of e)a.has(t)||o.add(t);for(let e of t)e.type===`fixed`&&e.entityA&&o.add(e.entityA.node);let s=[];for(let e of i){if(!e.entityA||!e.entityB)continue;let t=e.entityA.entity.type,n=e.entityB.entity.type;if(!L6(e.type,t,n)){r.push(`${e.type}(${t}-${n})`);continue}s.push(e)}let c=!0;for(;c&&s.length>0;){c=!1;for(let e=s.length-1;e>=0;e--){let t=s[e];if(!t?.entityA||!t.entityB)continue;let r=t.entityA,i=t.entityB;if(!o.has(r.node)||(s.splice(e,1),c=!0,o.has(i.node)))continue;let a=n.get(r.node)??{position:[0,0,0],rotation:_6},l=T6(r.entity,a);n.set(i.node,z6(t,l,i.entity)),o.add(i.node)}}for(let e of s)r.push(`${e.type}(unanchored)`);return{transforms:n,dof:r.reduce((e,t)=>e+(g6[t]??g6[t.split(`(`)[0]??``]??0),0),converged:r.length===0,unsupported:r}}function V6(e){if(e.face){let t=_k(e.face);return t?{type:`axis`,origin:t.origin,direction:t.direction}:{type:`plane`,origin:gk(e.face),normal:hk(e.face)}}if(e.edge){if(Yj(e.edge)===`LINE`)return{type:`axis`,origin:Xj(e.edge),direction:$j(e.edge)};let t=tM(e.edge);return t?{type:`axis`,origin:t.origin,direction:t.direction}:null}return e.point?{type:`point`,origin:e.point}:null}function H6(e,t){let n=V6(e),r=V6(t);return!n||!r?z(W(H.ASSEMBLY_MATE_INVALID,`solveAssembly: could not extract geometry from mate entities`)):R({entityA:{node:e.node,entity:n},entityB:{node:t.node,entity:r}})}function U6(e){switch(e.type){case`fixed`:return R({type:`fixed`,entityA:{node:e.entity.node,entity:{type:`point`,origin:[0,0,0]}}});case`coincident`:{let t=H6(e.entityA,e.entityB);return t.ok?R({type:`coincident`,...t.value}):t}case`distance`:{let t=H6(e.entityA,e.entityB);return t.ok?R({type:`distance`,...t.value,value:e.distance}):t}case`angle`:{let t=H6(e.entityA,e.entityB);return t.ok?R({type:`angle`,...t.value,value:e.angle}):t}case`concentric`:{let t=H6(e.axisA,e.axisB);return t.ok?R({type:`concentric`,...t.value}):t}}}function W6(e,t){let n=e.mates??[];return{...e,mates:[...n,t]}}function G6(e){let t=e.mates;if(!t||t.length===0)return z(W(H.ASSEMBLY_MATE_INVALID,`solveAssembly: no mates defined`));try{let n=[];XF(e,e=>{n.push(e.name)});let r=[];for(let e of t){let t=U6(e);if(!t.ok)return t;r.push(t.value)}let i=B6(n,r);if(!i.converged){let e=i.unsupported.length>0?`Unsupported constraint types: ${i.unsupported.join(`, `)} (${i.dof} DOF unresolved)`:`Assembly constraint solver did not converge`;return z(U(H.ASSEMBLY_NOT_CONVERGED,e))}return R({transforms:i.transforms,dof:i.dof,converged:i.converged})}catch(e){let t=e instanceof Error?e.message:String(e);return z(U(H.ASSEMBLY_SOLVE_FAILED,`Assembly solve failed: ${t}`,e))}}function K6(e,t,n=1e-6){return F().isNull(e.wrapped)?z(W(H.NULL_SHAPE_INPUT,`checkInterference: first shape is a null shape`)):F().isNull(t.wrapped)?z(W(H.NULL_SHAPE_INPUT,`checkInterference: second shape is a null shape`)):nE(()=>{let r=F().distance(e.wrapped,t.wrapped);return R({hasInterference:r.value<=n,minDistance:r.value,pointOnShape1:r.point1,pointOnShape2:r.point2})})}function q6(e,n=1e-6){let r=[],i=e.map(e=>rO(e));return e.forEach((a,o)=>{for(let s=o+1;s<e.length;s++){if(J6(t(i,o),t(i,s),n))continue;let c=V(K6(a,t(e,s),n));c.hasInterference&&r.push({i:o,j:s,result:c})}}),r}function J6(e,t,n){return e.xMax+n<t.xMin||t.xMax+n<e.xMin||e.yMax+n<t.yMin||t.yMax+n<e.yMin||e.zMax+n<t.zMin||t.zMax+n<e.zMin}function Y6(e){let t=e.split(/\r?\n/),n=[],r=!1,i;for(let e=0;e<t.length-1;e+=2){let a=t[e],o=t[e+1];if(a===void 0||o===void 0)continue;let s=parseInt(a.trim(),10),c=o.trim();if(!isNaN(s)){if(s===2&&c===`ENTITIES`){r=!0;continue}if(r){if(s===0){if(c===`ENDSEC`||c===`EOF`){i&&n.push(i);break}i&&n.push(i),i={type:c,layer:`0`,data:new Map};continue}i&&(s===8?i.layer=c:i.data.set(s,c))}}}return n}function X6(e,t,n=0){let r=e.get(t);if(r===void 0)return n;let i=parseFloat(r);return isNaN(i)?n:i}function Z6(e){let{type:t,data:n}=e,r=F();if(t===`LINE`)return r.makeLineEdge([X6(n,10),X6(n,20),X6(n,30)],[X6(n,11),X6(n,21),X6(n,31)]);if(t===`CIRCLE`)return r.makeCircleEdge([X6(n,10),X6(n,20),X6(n,30)],[0,0,1],X6(n,40));if(t===`ARC`){let e=X6(n,50)*Math.PI/180,t=X6(n,51)*Math.PI/180;return r.makeCircleArc([X6(n,10),X6(n,20),X6(n,30)],[0,0,1],X6(n,40),e,t)}}async function Q6(e,t){let n;try{n=await e.text()}catch(e){return z(yD(H.DXF_IMPORT_FAILED,`Failed to read DXF blob`,e))}let r=Y6(n),i=t?.layer===void 0?r:r.filter(e=>e.layer===t.layer);if(i.length===0)return R([]);let a=[];try{for(let e of i){let t=Z6(e);t!==void 0&&a.push(t)}return a.length===0?R([]):R([SE(F().makeWire(a))])}catch(e){return z(yD(H.DXF_IMPORT_FAILED,`Failed to convert DXF entities to geometry`,e))}finally{for(let e of a)e.delete()}}function $6(e,t,n=1e-6){let r=F(),i=[];for(let[t,n,a]of e){let e=r.buildTriFace(t,n,a);e!==null&&i.push(e)}if(i.length===0)return z(yD(t,`No valid triangular faces could be built`));try{let e=I(r.sewAndSolidify(i,n));for(let e of i)r.dispose(e);return R(e)}catch{try{return R(LE(r.sew(i,n)))}catch(e){return z(yD(t,`Failed to sew triangular faces`,e))}}}function e8(e){let t=e.split(/\s+/),n=parseFloat(t[1]??``),r=parseFloat(t[2]??``),i=parseFloat(t[3]??``);return isNaN(n)||isNaN(r)||isNaN(i)?null:[n,r,i]}function t8(e){return e.split(/\s+/).slice(1).map(e=>parseInt(e.split(`/`)[0]??``,10)).filter(e=>!isNaN(e))}async function n8(e){let t=(await e.text()).split(`
60
+ `),n=[],r=[];for(let e of t){let t=e.trim();if(t.startsWith(`v `)){let e=e8(t);e&&n.push(e)}else if(t.startsWith(`f `)){let e=t8(t);e.length>=3&&r.push(e)}}if(n.length===0||r.length===0)return z(yD(H.OBJ_IMPORT_FAILED,`OBJ file contains no valid geometry`));try{return r8(n,r)}catch(e){let t=e instanceof Error?e.message:String(e);return z(yD(H.OBJ_IMPORT_FAILED,`OBJ import failed: ${t}`,e))}}function r8(e,t){let n=[];for(let r of t)for(let t=1;t<r.length-1;t++){let i=r[0]??0,a=r[t]??0,o=r[t+1]??0,s=i>0?i-1:e.length+i,c=a>0?a-1:e.length+a,l=o>0?o-1:e.length+o,u=e[s],d=e[c],f=e[l];!u||!d||!f||n.push([u,d,f])}return $6(n,H.OBJ_IMPORT_FAILED)}function i8(e,t){let n=-1;for(let t=e.length-22;t>=0;t--)if(e[t]===80&&e[t+1]===75&&e[t+2]===5&&e[t+3]===6){n=t;break}if(n<0)return null;let r=new DataView(e.buffer,e.byteOffset,e.byteLength),i=r.getUint32(n+16,!0),a=i+r.getUint32(n+12,!0),o=i,s=new TextDecoder;for(;o<a&&r.getUint32(o,!0)===33639248;){let n=r.getUint16(o+28,!0),i=r.getUint16(o+30,!0),a=r.getUint16(o+32,!0),c=r.getUint32(o+42,!0);if(s.decode(e.subarray(o+46,o+46+n))===t){if(r.getUint16(c+8,!0)!==0)return null;let t=r.getUint16(c+26,!0),n=r.getUint16(c+28,!0),i=r.getUint32(c+18,!0),a=c+30+t+n;return e.subarray(a,a+i)}o+=46+n+i+a}return null}function a8(e){return e>=97&&e<=122||e>=65&&e<=90||e>=48&&e<=57||e===95}function o8(e){let t={},n=0;for(;n<e.length;){let r=e.indexOf(`="`,n);if(r<0)break;let i=r;for(;i>0&&a8(e.charCodeAt(i-1));)i--;if(i===r){n=r+2;continue}let a=e.slice(i,r),o=r+2,s=e.indexOf(`"`,o);if(s<0)break;t[a]=e.slice(o,s),n=s+1}return t}function s8(e,t){let n=[],r=`<${t} `,i=0;for(;i<e.length;){let t=e.indexOf(r,i);if(t<0)break;let a=e.indexOf(`>`,t);if(a<0)break;n.push(e.slice(t,a+1)),i=a+1}return n}function c8(e,t){let n=e.indexOf(`<${t}`);if(n<0)return null;let r=e.indexOf(`</${t}>`,n);return r<0?null:e.slice(n,r+t.length+3)}function l8(e){let t=e.startsWith(`#`)?e.slice(1):e;return[parseInt(t.slice(0,2),16)/255,parseInt(t.slice(2,4),16)/255,parseInt(t.slice(4,6),16)/255,t.length>=8?parseInt(t.slice(6,8),16)/255:1]}function u8(e){let t=new Map,n=0;for(;n<e.length;){let r=e.indexOf(`<colorgroup`,n);if(r<0)break;let i=e.indexOf(`</colorgroup>`,r);if(i<0)break;let a=e.slice(r,i+13);n=i+13;let o=e.indexOf(`>`,r);if(o<0)continue;let s=o8(e.slice(r,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of s8(a,`color`)){let t=o8(e).color;t!==void 0&&l.push(l8(t))}t.set(c,l)}let r=0;for(;r<e.length;){let n=e.indexOf(`<basematerials`,r);if(n<0)break;let i=e.indexOf(`</basematerials>`,n);if(i<0)break;let a=e.slice(n,i+16);r=i+16;let o=e.indexOf(`>`,n);if(o<0)continue;let s=o8(e.slice(n,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of s8(a,`base`)){let t=o8(e).displaycolor;t===void 0?l.push([0,0,0,1]):l.push(l8(t))}t.set(c,l)}return t}function d8(e){let t=[],n=[],r=[],i=u8(e);for(let n of s8(e,`vertex`)){let e=o8(n);e.x!==void 0&&e.y!==void 0&&e.z!==void 0&&t.push([parseFloat(e.x),parseFloat(e.y),parseFloat(e.z)])}let a=null,o=null,s=c8(e,`object`);if(s!==null){let e=s.indexOf(`>`);if(e>=0){let t=o8(s.slice(0,e+1));t.pid!==void 0&&(a=parseInt(t.pid,10)),t.pindex!==void 0&&(o=parseInt(t.pindex,10))}}for(let t of s8(e,`triangle`)){let e=o8(t);if(e.v1!==void 0&&e.v2!==void 0&&e.v3!==void 0){n.push([parseInt(e.v1,10),parseInt(e.v2,10),parseInt(e.v3,10)]);let t=null,s=e.pid??(a===null?void 0:String(a)),c=e.p1??(o===null?void 0:String(o));if(s!==void 0&&c!==void 0){let e=parseInt(s,10),n=parseInt(c,10),r=i.get(e);r!==void 0&&n<r.length&&(t=r[n]??null)}r.push(t)}}return{vertices:t,triangles:n,triangleColors:r}}function f8(e){let t=new Map;for(let n of e){if(n===null)continue;let e=n.join(`,`),r=t.get(e);r===void 0?t.set(e,{count:1,color:n}):r.count++}let n=null;for(let e of t.values())(n===null||e.count>n.count)&&(n=e);return n===null?null:n.color}function p8(e){let t=F(),n=e.vertices.map(([e,t,n])=>({x:e,y:t,z:n})),r=e.triangles;try{return R(I(t.buildSolidFromFaces(n,r,1e-6)))}catch{let t=[];for(let[n,r,i]of e.triangles){let a=e.vertices[n],o=e.vertices[r],s=e.vertices[i];!a||!o||!s||t.push([a,o,s])}return $6(t,H.THREEMF_IMPORT_FAILED)}}async function m8(e){try{let t=await e.arrayBuffer(),n=i8(new Uint8Array(t),`3D/3dmodel.model`);if(!n)return z(yD(H.THREEMF_IMPORT_FAILED,`3MF archive does not contain 3D/3dmodel.model (or uses unsupported compression)`));let r=d8(new TextDecoder().decode(n));if(r.vertices.length===0||r.triangles.length===0)return z(yD(H.THREEMF_IMPORT_FAILED,`3MF model contains no valid geometry`));let i=p8(r);if(i.ok){let e=f8(r.triangleColors);e!==null&&hA(i.value,e)}return i}catch(e){let t=e instanceof Error?e.message:String(e);return z(yD(H.THREEMF_IMPORT_FAILED,`3MF import failed: ${t}`,e))}}async function h8(e){try{let t=await e.arrayBuffer();return R(I(F().importGLB(t)))}catch(e){let t=e instanceof Error?e.message:String(e);return z(yD(H.GLB_IMPORT_FAILED,`Failed to import GLB: ${t}`,e))}}function $(e){return`__wrapped`in e?e.val:e}function g8(e){return $(e)}function _8(e,t){return rj($(e),t)}function v8(e,t){if(Array.isArray(e))throw Error(`${t}() expects an options object, e.g. ${t}(shape, { ... }), not an array of coordinates.`)}function y8(e,t,n){v8(n,`rotate`);let r=n?.at;return ij($(e),t,r,n?.axis)}function b8(e,t){v8(t,`mirror`);let n=t?.at;return aj($(e),t?.normal??[1,0,0],n)}function x8(e,t,n){return oj($(e),t,n?.center)}function S8(e){return Hj($(e))}function C8(e,t){return dj($(e),t)}function w8(e,t){return mj($(e),t)}function T8(e,t){return pj($(e),t)}function E8(e,t,n){return DA($(e),$(t),{...n,unsafe:!0})}function D8(e,t,n){return OA($(e),$(t),{...n,unsafe:!0})}function O8(e,t){return jA(e.map(e=>$(e)),{...t,unsafe:!0})}function k8(e,t,n){return MA($(e),t.map(e=>$(e)),{...n,unsafe:!0})}function A8(e,t,n){return kA($(e),$(t),{...n,unsafe:!0})}function j8(e,t,n){return FA($(e),t,n)}function M8(e,t,n){return VA($(e),t,n)}function N8(e,t){return HA($(e),t)}function P8(e,t,n){return UA($(e),t,n)}function F8(e,t){if(e!==void 0)return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(FL()).findAll(t)}function I8(e,t){return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(RL()).findAll(t)}function L8(e){return typeof e==`object`&&!Array.isArray(e)&&typeof e!=`function`?{mode:`distAngle`,distance:e.distance,angle:e.angle}:typeof e==`function`?{mode:`standard`,distance:t=>{let n=e(t);return n===null?null:typeof n==`object`&&!Array.isArray(n)?n.distance:n}}:{mode:`standard`,distance:e}}function R8(e,t,n){let r=$(e),i,a;return n===void 0?(i=void 0,a=t):(i=F8(t,r),a=n),yN(r,i,a)}function z8(e,t,n){let r=$(e),i,a;n===void 0?(i=void 0,a=t):(i=F8(t,r),a=n);let o=L8(a);return o.mode===`distAngle`?BM(r,[...i??UD(r)],o.distance,o.angle):bN(r,i,o.distance)}function B8(e,t,n,r){let i=$(e);return xN(i,I8(t,i),n,r?.tolerance)}function V8(e,t,n){return SN($(e),t,n?.tolerance)}function H8(e,t){return _N($(e),t)}function U8(e,t,n){let r=$(e);return wN(r,I8(t,r),n.pullDirection,n.neutralPlane,n.angle)}function W8(e){return AN($(e))}function G8(e){return Jj($(e))}function K8(e,t){return bM($(e),t)}function q8(e,t){return xM($(e),t)}function J8(e){return sO($(e))}function Y8(e){return Uj($(e))}function X8(e){return ak(e)}function Z8(e){return EN($(e))}function Q8(e){return Gj($(e))}function $8(e,t){return Vq($(e),typeof t==`number`?[0,0,t]:t)}function e5(e,t){let n=t?.at??[0,0,0];return Hq($(e),n,t?.axis??[0,0,1],t?.angle??2*Math.PI)}function t5(e,t){return qN(e.map(e=>$(e)),t)}function n5(e,n){if(n===void 0){let t=WD(e);if(t.length===0)return z(W(H.COMPOUND_NO_FACES,`compoundOps: shape has no faces`));let n=jk(t),r=gk(n)[2];for(let e=1;e<t.length;e++){let i=Ak(t,e),a=gk(i)[2];a>r&&(n=i,r=a)}return R(n)}if(typeof n==`function`){let r=n(RL()).findAll(e);return r.length===0?z(bD(H.COMPOUND_FACE_NOT_FOUND,`compoundOps: face finder matched no faces`)):R(t(r,0))}return R(n)}function r5(e){return`sketchOnPlane`in e&&typeof e.sketchOnPlane==`function`?{wire:e.sketchOnPlane(`XY`).wire,owned:!0}:{wire:e,owned:!1}}function i5(e,t){let n=$(e),{at:r,radius:i,axis:a}=t,o=a??[0,0,1];if(i<=0)return z(W(`DRILL_INVALID_RADIUS`,`Drill radius must be positive`));if(IO(o))return z(W(`DRILL_ZERO_AXIS`,`Drill axis cannot be zero`));let s=PO(o),c=r.length===2?[r[0],r[1],0]:[r[0],r[1],r[2]],l;if(t.depth!==void 0)l=JA(i,t.depth,c,s);else{let e=rO(n),t=[[e.xMin,e.yMin,e.zMin],[e.xMax,e.yMin,e.zMin],[e.xMin,e.yMax,e.zMin],[e.xMax,e.yMax,e.zMin],[e.xMin,e.yMin,e.zMax],[e.xMax,e.yMin,e.zMax],[e.xMin,e.yMax,e.zMax],[e.xMax,e.yMax,e.zMax]],r=1/0,a=-1/0;for(let e of t){let t=(e[0]-c[0])*s[0]+(e[1]-c[1])*s[1]+(e[2]-c[2])*s[2];t<r&&(r=t),t>a&&(a=t)}--r,a+=1,l=JA(i,a-r,[c[0]+s[0]*r,c[1]+s[1]*r,c[2]+s[2]*r],s)}try{return OA(n,l,{unsafe:!0})}finally{l[Symbol.dispose]()}}function a5(e,t){try{var n=WT();let r=$(e),{profile:i,depth:a}=t;if(a<=0)return z(W(`POCKET_INVALID_DEPTH`,`Pocket depth must be positive`));let o=n5(r,t.face);if(B(o))return o;let s=o.value,c=hk(s),l=gk(s),u=n.u(new iE),{wire:d,owned:f}=r5(i);f&&u.register(d);let p=Kk(d);if(B(p))return p;u.register(p.value);let m=Vq(u.register(rj(p.value,l)),DO(PO(c),-a));return B(m)?m:(u.register(m.value),OA(r,m.value,{unsafe:!0}))}catch(e){n.e=e}finally{n.d()}}function o5(e,t){try{var n=WT();let r=$(e),{profile:i,height:a}=t;if(a<=0)return z(W(`BOSS_INVALID_HEIGHT`,`Boss height must be positive`));let o=n5(r,t.face);if(B(o))return o;let s=o.value,c=hk(s),l=gk(s),u=n.u(new iE),{wire:d,owned:f}=r5(i);f&&u.register(d);let p=Kk(d);if(B(p))return p;u.register(p.value);let m=Vq(u.register(rj(p.value,l)),DO(PO(c),a));return B(m)?m:(u.register(m.value),DA(r,m.value,{unsafe:!0}))}catch(e){n.e=e}finally{n.d()}}function s5(e,t){try{var n=WT();let r=$(e),i=t?.normal??[1,0,0],a=t?.at;return IO(i)?z(W(`MIRROR_ZERO_NORMAL`,`Mirror plane normal cannot be zero`)):DA(r,n.u(aj(r,i,a)),{unsafe:!0})}catch(e){n.e=e}finally{n.d()}}function c5(e,t){let n=$(e),{xDir:r,xCount:i,xSpacing:a,yDir:o,yCount:s,ySpacing:c}=t;if(i<1||s<1)return z(W(`PATTERN_INVALID_COUNT`,`Pattern counts must be at least 1`));if(IO(r))return z(W(`PATTERN_ZERO_DIRECTION`,`X direction cannot be zero`));if(IO(o))return z(W(`PATTERN_ZERO_DIRECTION`,`Y direction cannot be zero`));if(i===1&&s===1)return R(n);let l=PO(r),u=PO(o),d=[n],f=[];for(let e=0;e<i;e++)for(let t=0;t<s;t++){if(e===0&&t===0)continue;let r=rj(n,[l[0]*a*e+u[0]*c*t,l[1]*a*e+u[1]*c*t,l[2]*a*e+u[2]*c*t]);d.push(r),f.push(r)}try{return jA(d,{unsafe:!0})}finally{for(let e of f)e[Symbol.dispose]()}}var l5=class extends Error{code;kind;suggestion;metadata;constructor(e){let t=e.suggestion?`${e.message}\nSuggestion: ${e.suggestion}`:e.message;super(t),this.name=`BrepError`,this.code=e.code,this.kind=e.kind,e.suggestion&&(this.suggestion=e.suggestion),e.metadata&&(this.metadata=e.metadata)}};function u5(e){if(B(e))throw new l5(e.error);return e.value}function d5(e){return e}function f5(e){return e}function p5(e){return e}function m5(e){return e}function h5(e){return{val:e,__wrapped:!0,translate:t=>T5(_8(e,t)),rotate:(t,n)=>T5(y8(e,t,n)),mirror:t=>T5(b8(e,t)),scale:(t,n)=>T5(x8(e,t,n)),applyMatrix:t=>T5(u5(C8(e,t))),moveX:t=>T5(_8(e,[t,0,0])),moveY:t=>T5(_8(e,[0,t,0])),moveZ:t=>T5(_8(e,[0,0,t])),rotateX:t=>T5(y8(e,t,{axis:[1,0,0]})),rotateY:t=>T5(y8(e,t,{axis:[0,1,0]})),rotateZ:t=>T5(y8(e,t,{axis:[0,0,1]})),bounds:()=>rO(e),describe:()=>J8(e),clone:()=>T5(u5(S8(e))),mesh:t=>K8(e,t),meshEdges:t=>q8(e,t),isValid:()=>Z8(e),isEmpty:()=>Q8(e),heal:()=>T5(u5(W8(e))),simplify:()=>T5(u5(G8(e))),toBREP:()=>u5(Y8(e)),apply:t=>T5(t(e)),applyResult:t=>T5(u5(t(e))),done:()=>e}}function g5(e){return{fuse:(t,n)=>E5(u5(E8(e,$(t),{...n,unsafe:!0}))),cut:(t,n)=>E5(u5(D8(e,$(t),{...n,unsafe:!0}))),intersect:(t,n)=>E5(u5(A8(e,$(t),{...n,unsafe:!0}))),fuseAll:(t,n)=>E5(m5(u5(jA([e,...t.map($)],{...n,unsafe:!0})))),cutAll:(t,n)=>E5(m5(u5(MA(e,t,{...n,unsafe:!0})))),section:(t,n)=>T5(u5(j8(e,t,n))),split:t=>T5(u5(N8(e,t))),slice:(t,n)=>u5(P8(e,t,n))}}function _5(e){return{fillet(...t){return t.length===1?E5(m5(u5(R8(d5(e),t[0])))):E5(m5(u5(R8(d5(e),t[0],t[1]))))},chamfer(...t){return t.length===1?E5(m5(u5(z8(d5(e),t[0])))):E5(m5(u5(z8(d5(e),t[0],t[1]))))},shell:(t,n,r)=>E5(m5(u5(B8(d5(e),t,n,r)))),offset:(t,n)=>E5(m5(u5(V8(d5(e),t,n)))),draft:(t,n)=>E5(m5(u5(U8(d5(e),t,n))))}}function v5(e){return{drill:t=>E5(u5(i5(e,t))),pocket:t=>E5(u5(a5(e,t))),boss:t=>E5(u5(o5(e,t))),mirrorJoin:t=>E5(u5(s5(e,t))),rectangularPattern:t=>E5(u5(c5(e,t)))}}function y5(e){return{volume:()=>u5(rP(e)),area:()=>u5(iP(e)),volumeProps:()=>u5(eP(e)),surfaceProps:()=>u5(tP(e))}}function b5(e){return{edges:()=>UD(e),faces:()=>WD(e),wires:()=>GD(e),vertices:()=>KD(e)}}function x5(e){return{linearPattern:(t,n,r)=>E5(m5(u5(VF(e,t,n,r)))),circularPattern:(t,n,r)=>E5(m5(u5(HF(e,t,n,r))))}}function S5(e){return{...h5(e),...g5(e),..._5(e),...v5(e),...y5(e),...b5(e),...x5(e)}}function C5(e){return{...h5(e),length:()=>eM(e),startPoint:()=>Xj(e),endPoint:()=>Zj(e),pointAt:t=>Qj(e,t),tangentAt:t=>$j(e,t),isClosed:()=>nM(e),sweep(t,n){if(!AE(e))throw Error(`sweep requires a Wire`);let r=u5(zN(p5(e),$(t),n));return E5(Array.isArray(r)?r[0]:r)}}}function w5(e){return{...h5(e),area:()=>u5(iP(e)),normalAt:t=>hk(e,t),center:()=>gk(e),surfaceType:()=>u5(sk(e)),outerWire:()=>yk(e),innerWires:()=>xk(e),extrude:t=>E5(u5($8(f5(e),t))),revolve:t=>E5(u5(e5(f5(e),t)))}}function T5(e){return FE(e)?S5(e):jE(e)?w5(e):kE(e)||AE(e)?C5(e):h5(e)}function E5(e){return S5(e)}function D5(e){if(e&&typeof e==`object`&&`face`in e&&typeof e.face==`function`&&`_defaultOrigin`in e)return w5(e.face());if(e&&typeof e==`object`&&`wrapped`in e)return jE(e)?w5(e):FE(e)?S5(e):kE(e)||AE(e)?C5(e):h5(e);throw Error(`shape() requires a Sketch or branded shape type`)}var O5=.25,k5=e=>Math.tan(e)-e;function A5(e,t,n,r){let i=e/Math.cos(t),a=n+r*(Math.tan(t)-t);return[i*Math.cos(a),i*Math.sin(a),0]}function j5(e,t,n,r,i){let a=[];for(let o=0;o<=r;o++){let s=.5-.5*Math.cos(o/r*Math.PI);a.push(A5(e,s*t,n,i))}return a}function M5(e){return Math.max(16,Math.round(8*Math.sqrt(e)))}function N5(e,t,n,r,i,a,o){let s=e*t/2,c=s*Math.cos(n),l=t*(1+r),u=t*(1+i-r),d=o?s-t*(1-r):s+l,f=o?s+t*(1+i+r):s-u,p=a/s,m=(Math.PI/2+2*r*Math.tan(n))/e+(o?p:-p),h=o?f:d;return{rPitch:s,rb:c,rTip:d,rRoot:f,alphaPitch:n,halfToothAngle:m,alphaTip:h<=c?0:Math.acos(Math.min(1,c/h)),toothPitch:2*Math.PI/e,isInternal:o}}function P5(e,t,n){if(t===0)return R(e);let r=k5(e)+2*t*Math.tan(e)/n,i,a;if(r>k5(e)?(i=e,a=Math.PI/2-1e-6):(i=1e-4,a=e),r>k5(a)||r<k5(i))return z(W(`GEAR_PA_OUT_OF_RANGE`,`working pressure angle out of range — target inv(αw)=${r.toFixed(4)} not in [${k5(i).toFixed(4)}, ${k5(a).toFixed(4)}]`,void 0,{target:r,invLo:k5(i),invHi:k5(a)}));for(let e=0;e<50;e++){let e=.5*(i+a);k5(e)<r?i=e:a=e}return R(.5*(i+a))}function F5(e,t,n,r,i){return P5(e,t+n,r+i)}function I5(e,t,n,r,i){return P5(e,n-t,i-r)}function L5(e,t,n,r,i){return(e+t)*n*Math.cos(r)/(2*Math.cos(i))}function R5(e,t,n,r){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(n))return z(W(`GEAR_NON_INTEGER_TEETH`,`tooth counts and planet count must be integers`));if(e<4||t<4||n<2)return z(W(`GEAR_TEETH_TOO_FEW`,`zs ≥ 4, zp ≥ 4, N ≥ 2 required`));if((2*e+2*t)%n!=0)return z(W(`GEAR_ASSEMBLY`,`(2·zs + 2·zp) must be divisible by N — got ${2*e+2*t} mod ${n} = ${(2*e+2*t)%n}`));let i=t+2+2*r,a=(e+t)*Math.sin(Math.PI/n);return a<=i?z(W(`GEAR_PLANET_COLLISION`,`planet tips would collide: (zs+zp)·sin(π/N) = ${a.toFixed(3)} ≤ planet tip = ${i.toFixed(3)}`)):R(void 0)}function z5(e,t,n,r,i,a,o,s){return(Math.sqrt(Math.max(0,e*e-t*t))+Math.sqrt(Math.max(0,n*n-r*r))-i*Math.sin(s))/(Math.PI*a*Math.cos(o))}function B5(e,t,n,r,i,a,o,s){return(Math.sqrt(Math.max(0,e*e-t*t))-Math.sqrt(Math.max(0,n*n-r*r))+i*Math.sin(s))/(Math.PI*a*Math.cos(o))}function V5(e,t){return 1-e*Math.sin(t)*Math.sin(t)/2}function H5(e,t,n){return Math.max(0,V5(e,t)-n)}function U5(e){return e<8?.2:.485-2.88/e}function W5(e,t,n,r){let i=e*1e3,a=U5(r);return a<=0||n<=0||t<=0?1/0:2*i/(r*t*t*n*a)}function G5(e,t,n=!1){let r=(1.4+6.5/e)*(20/(t*180/Math.PI))**.15;return n?r*.85:r}function K5(e,t,n,r,i,a=!1){return W5(e,t,n,r)*G5(r,i,a)}function q5(e){return e/2}function J5(e,t){return e+2*t}function Y5(e){return e%2==0?Math.PI/e:0}function X5(e,t,n){return e*(1+t/n)+Y5(n)}function Z5(e={}){let t=e.moduleSize??3,n=e.sunTeeth??15,r=e.planetTeeth??12,i=e.numPlanets??3,a=(e.pressureAngleDeg??20)*Math.PI/180,o=e.sunShift??0,s=e.planetShift??0,c=R5(n,r,i,s);if(B(c))return c;let l=F5(a,o,s,n,r);if(B(l))return l;let u=L5(n,r,t,a,l.value),d=[];for(let e=0;e<i;e++){let t=e*2*Math.PI/i,a=X5(t,n,r);d.push({rotationDeg:a*180/Math.PI,position:[u*Math.cos(t),u*Math.sin(t),0]})}return R(d)}function Q5(e,t,n,r,i){let a=t*e.toothPitch,o=(t+1)%n*e.toothPitch,s=k5(e.alphaPitch),c=a-e.halfToothAngle-s,l=a+e.halfToothAngle+s,u=j5(e.rb,e.alphaTip,c,r,1),d=j5(e.rb,e.alphaTip,l,r,-1).reverse(),f=jk(u),p=Mk(u),m=jk(d),h=Mk(d),g=[],_=e=>{i.register(e),g.push(e)},v=e.isInternal?e.rb<e.rRoot:e.rb>e.rRoot;v&&_(Fk([e.rRoot*Math.cos(c),e.rRoot*Math.sin(c),0],f));let y=e.rPitch*1e-5,b=Hk(u,{tolerance:y});if(B(b))return b;_(b.value),_(zk(p,[e.rTip*Math.cos(a),e.rTip*Math.sin(a),0],m));let x=Hk(d,{tolerance:y});if(B(x))return x;_(x.value),v&&_(Fk(h,[e.rRoot*Math.cos(l),e.rRoot*Math.sin(l),0]));let S=o-e.halfToothAngle-s,C=.5*(l+S);return S<l&&(C+=Math.PI),_(zk(v?[e.rRoot*Math.cos(l),e.rRoot*Math.sin(l),0]:h,[e.rRoot*Math.cos(C),e.rRoot*Math.sin(C),0],v?[e.rRoot*Math.cos(S),e.rRoot*Math.sin(S),0]:[e.rb*Math.cos(S),e.rb*Math.sin(S),0])),R(g)}function $5(e){return t7(e,!1)}function e7(e){return t7(e,!0)}function t7(e,t){try{var n=WT();let{teeth:r,moduleSize:i,pressureAngle:a,shift:o,clearance:s,flankThinning:c,samples:l=M5(i)}=e;if(r<4)return z(W(`GEAR_TEETH_TOO_FEW`,`gear needs ≥ 4 teeth, got ${r}`));if(i<=0)return z(W(`GEAR_MODULE_NONPOSITIVE`,`module must be > 0, got ${i}`));let u=N5(r,i,a,o,s,c,t),d=n.u(new iE),f=[];for(let e=0;e<r;e++){let t=Q5(u,e,r,l,d);if(B(t))return t;f.push(...t.value)}let p=Gk(f);return B(p)?p:R(p.value)}catch(e){n.e=e}finally{n.d()}}function n7(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=O5,flankThinning:s=0,bore:c=0,samples:l}=e;if(r<=0)return z(W(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));if(l!==void 0&&(!Number.isInteger(l)||l<1))return z(W(`GEAR_SAMPLES_INVALID`,`samples must be a positive integer; got ${String(l)}`));let u=i*Math.PI/180,d=N5(t,n,u,a,o,s,!1);if(c>0&&c>=2*d.rRoot)return z(W(`GEAR_BORE_TOO_LARGE`,`bore diameter ${c.toFixed(2)} ≥ root diameter ${(2*d.rRoot).toFixed(2)} — would erase the gear teeth`));let f=$5({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(B(f))return f;let p=i7(t,u,a);return l7(f.value,r,c,d,p)}function r7(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=O5,flankThinning:s=0,ringWallThickness:c=2*e.moduleSize,samples:l}=e;if(r<=0)return z(W(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));if(c<=0)return z(W(`GEAR_WALL_NONPOSITIVE`,`ringWallThickness must be > 0`));if(l!==void 0&&(!Number.isInteger(l)||l<1))return z(W(`GEAR_SAMPLES_INVALID`,`samples must be a positive integer; got ${String(l)}`));let u=i*Math.PI/180,d=e7({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(B(d))return d;let f=N5(t,n,u,a,o,s,!0),p=c7(f.rPitch+c);return B(p)?p:d7(p.value,d.value,r,f,[])}function i7(e,t,n){let r=H5(e,t,n);return r<=0?[]:[{code:`UNDERCUT_RISK`,severity:`warning`,message:`gear is undercut: increase shift by ${r.toFixed(3)} to avoid (z=${e})`,context:{deficit:r,teeth:e}}]}function a7(e){let t=s7(e);if(B(t))return t;let n=t.value,r=o7(n);if(B(r))return r;let{sun:i,planet:a,ring:o}=r.value,s=h7(n,i,a,o),c=p7(a.solid,n);a.solid.delete();let l=m7(o.solid,n.zr),u=g7(n,s);return R({sun:i.solid,planets:c,ring:l,ringTeeth:n.zr,workingPressureAngle:n.alphaW_sp,centerDistance:n.centerDistance,contactRatio:{sunPlanet:s.crSunPlanet,planetRing:s.crPlanetRing},undercutDeficit:{sun:s.undercutSun,planet:s.undercutPlanet},...s.lewisStress?{lewisStress:s.lewisStress}:{},...s.stressConcentrationFactor?{stressConcentrationFactor:s.stressConcentrationFactor}:{},diagnostics:u})}function o7(e){let t=e.samples===void 0?{}:{samples:e.samples},n={moduleSize:e.moduleSize,thickness:e.thickness,pressureAngleDeg:e.pressureAngleDeg,clearance:e.clearance,flankThinning:e.bHalf,...t},r=n7({...n,teeth:e.sunTeeth,shift:e.sunShift,bore:e.sunBore});if(B(r))return r;let i=n7({...n,teeth:e.planetTeeth,shift:e.planetShift,bore:e.planetBore});if(B(i))return r.value.solid.delete(),i;let a=r7({...n,teeth:e.zr,shift:e.ringShift,ringWallThickness:e.ringWallThickness});return B(a)?(r.value.solid.delete(),i.value.solid.delete(),a):R({sun:r.value,planet:i.value,ring:a.value})}function s7(e){let t=e.moduleSize??3,n=e.sunTeeth??15,r=e.planetTeeth??12,i=e.numPlanets??3,a=e.pressureAngleDeg??20,o=a*Math.PI/180,s=e.sunShift??0,c=e.planetShift??0,l=e.ringShift??0;if(e.thickness<=0)return z(W(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));let u=R5(n,r,i,c);if(B(u))return u;let d=J5(n,r),f=F5(o,s,c,n,r);if(B(f))return f;let p=I5(o,c,l,r,d);if(B(p))return p;let m=L5(n,r,t,o,f.value);return R({moduleSize:t,sunTeeth:n,planetTeeth:r,numPlanets:i,pressureAngleDeg:a,alpha:o,alphaW_sp:f.value,alphaW_pr:p.value,clearance:e.clearance??.25,bHalf:q5(e.backlash??0),sunShift:s,planetShift:c,ringShift:l,ringWallThickness:e.ringWallThickness??2*t,thickness:e.thickness,sunBore:e.sunBore??0,planetBore:e.planetBore??0,...e.appliedTorque===void 0?{}:{appliedTorque:e.appliedTorque},...e.samples===void 0?{}:{samples:e.samples},zr:d,centerDistance:m})}function c7(e){try{var t=WT();let n=Gk([t.u(new iE).register(Ik(e,[0,0,0],[0,0,1]))]);return B(n)?n:R(n.value)}catch(e){t.e=e}finally{t.d()}}function l7(e,t,n,r,i){try{var a=WT();let o=a.u(new iE);o.register(e);let s=Kk(e);if(B(s))return s;o.register(s.value);let c=Vq(s.value,[0,0,t]);if(B(c))return c;if(n<=0)return R(f7(c.value,r,i));let l=a.u(new iE);l.register(c.value);let u=u7(n/2);if(B(u))return u;l.register(u.value);let d=Vq(u.value,[0,0,t+1]);if(B(d))return d;l.register(d.value);let f=l.register(rj(d.value,[0,0,-.5])),p=OA(c.value,f);return B(p)?p:R(f7(p.value,r,i))}catch(e){a.e=e}finally{a.d()}}function u7(e){let t=c7(e);return B(t)?t:Kk(t.value)}function d7(e,t,n,r,i){let a=Kk(e,[t]);if(B(a))return a;let o=Vq(a.value,[0,0,n]);return B(o)?o:R(f7(o.value,r,i))}function f7(e,t,n=[]){return{solid:e,diagnostics:n,pitchDiameter:2*t.rPitch,baseDiameter:2*t.rb,tipDiameter:2*t.rTip,rootDiameter:2*t.rRoot}}function p7(e,t){let n=[];try{for(let r=0;r<t.numPlanets;r++){let i=r*2*Math.PI/t.numPlanets,a=ij(e,X5(i,t.sunTeeth,t.planetTeeth)*180/Math.PI);try{let e=[t.centerDistance*Math.cos(i),t.centerDistance*Math.sin(i),0];n.push(rj(a,e))}finally{a.delete()}}return n}catch(e){for(let e of n)e.delete();throw e}}function m7(e,t){let n=Y5(t);if(n===0)return e;let r=ij(e,n*180/Math.PI);return e.delete(),r}function h7(e,t,n,r){let i={crSunPlanet:z5(t.tipDiameter/2,t.baseDiameter/2,n.tipDiameter/2,n.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_sp),crPlanetRing:B5(n.tipDiameter/2,n.baseDiameter/2,r.tipDiameter/2,r.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_pr),undercutSun:H5(e.sunTeeth,e.alpha,e.sunShift),undercutPlanet:H5(e.planetTeeth,e.alpha,e.planetShift)};if(e.appliedTorque!==void 0){let t=e.appliedTorque;i.lewisStress={sun:K5(t,e.moduleSize,e.thickness,e.sunTeeth,e.alpha),planet:K5(t*e.planetTeeth/e.sunTeeth,e.moduleSize,e.thickness,e.planetTeeth,e.alpha),ring:K5(t*e.zr/e.sunTeeth,e.moduleSize,e.thickness,e.zr,e.alpha,!0)},i.stressConcentrationFactor={sun:G5(e.sunTeeth,e.alpha),planet:G5(e.planetTeeth,e.alpha),ring:G5(e.zr,e.alpha,!0)}}return i}function g7(e,t){let n=[];t.crSunPlanet<1.2&&n.push({code:`CONTACT_RATIO_LOW_SUN_PLANET`,severity:`warning`,message:`sun-planet contact ratio ${t.crSunPlanet.toFixed(2)} is below 1.2 — may run unevenly`,context:{value:t.crSunPlanet}}),t.crPlanetRing<1.2&&n.push({code:`CONTACT_RATIO_LOW_PLANET_RING`,severity:`warning`,message:`planet-ring contact ratio ${t.crPlanetRing.toFixed(2)} is below 1.2 — may run unevenly`,context:{value:t.crPlanetRing}}),t.undercutSun>0&&n.push({code:`UNDERCUT_RISK_SUN`,severity:`warning`,message:`sun gear is undercut: increase sunShift by ${t.undercutSun.toFixed(3)} to avoid`,context:{deficit:t.undercutSun,sunTeeth:e.sunTeeth}}),t.undercutPlanet>0&&n.push({code:`UNDERCUT_RISK_PLANET`,severity:`warning`,message:`planet gear is undercut: increase planetShift by ${t.undercutPlanet.toFixed(3)} to avoid`,context:{deficit:t.undercutPlanet,planetTeeth:e.planetTeeth}});let r=Math.abs(e.sunShift)+Math.abs(e.planetShift)+Math.abs(e.ringShift);e.appliedTorque!==void 0&&r>.05&&n.push({code:`LEWIS_Y_SHIFT_UNCORRECTED`,severity:`info`,message:`Lewis stress uses unshifted Y(z) and K_f approximations; expect ±5% per 0.1 of profile shift`});let i=e.ringShift-(e.sunShift+2*e.planetShift);return Math.abs(i)>1e-6&&n.push({code:`PLANETARY_SHIFT_KINEMATIC_MISMATCH`,severity:`warning`,message:`ringShift should equal sunShift + 2·planetShift for both meshes to share working PA; off by ${i.toFixed(3)}`,context:{kinematicError:i,sunShift:e.sunShift,planetShift:e.planetShift,ringShift:e.ringShift}}),n}var _7=NZ({addHoles:()=>Vj,bezier:()=>Oj,box:()=>hj,bsplineApprox:()=>Dj,circle:()=>Sj,compound:()=>Lj,cone:()=>vj,cylinder:()=>gj,ellipse:()=>Cj,ellipseArc:()=>Ej,ellipsoid:()=>bj,face:()=>Mj,fill:()=>qk,filledFace:()=>Nj,helix:()=>wj,line:()=>xj,offsetFace:()=>zj,polygon:()=>Fj,polyhedron:()=>K3,sewShells:()=>Bj,solid:()=>Rj,sphere:()=>_j,subFace:()=>Pj,tangentArc:()=>kj,threePointArc:()=>Tj,torus:()=>yj,vertex:()=>Ij,wire:()=>Aj,wireLoop:()=>jj}),v7=NZ({checkBoolean:()=>eN,convexHull:()=>V3,cut:()=>D8,cutAll:()=>MA,cutAllBisect:()=>GM,fuse:()=>E8,fuseAll:()=>jA,fuseAllBisect:()=>YM,hull:()=>B3,intersect:()=>A8,minkowski:()=>G3,section:()=>j8,sectionToFace:()=>M8,slice:()=>P8,split:()=>N8}),y7=NZ({chamfer:()=>z8,draft:()=>U8,fillet:()=>R8,heal:()=>W8,offset:()=>V8,shell:()=>B8,simplify:()=>G8,thicken:()=>H8,variableFillet:()=>TN}),b7=NZ({applyMatrix:()=>C8,clone:()=>S8,composeTransforms:()=>fj,mirror:()=>b8,rotate:()=>y8,scale:()=>x8,transformCopy:()=>w8,translate:()=>_8}),x7=NZ({checkAllInterferences:()=>q6,checkInterference:()=>K6,createDistanceQuery:()=>cP,measureArea:()=>iP,measureCurvatureAt:()=>lP,measureCurvatureAtMid:()=>uP,measureDistance:()=>oP,measureDistanceProps:()=>sP,measureLength:()=>aP,measureLinearProps:()=>nP,measureSurfaceProps:()=>tP,measureVolume:()=>rP,measureVolumeProps:()=>eP}),S7=NZ({blueprintToDXF:()=>xX,exportAssemblySTEP:()=>WF,exportDXF:()=>bX,exportGlb:()=>sX,exportGltf:()=>oX,exportIGES:()=>DM,exportOBJ:()=>XY,exportSTEP:()=>TM,exportSTEPConfigured:()=>iZ,exportSTL:()=>EM,exportThreeMF:()=>BX,importDXF:()=>Q6,importGLB:()=>h8,importIGES:()=>sZ,importOBJ:()=>n8,importSTEP:()=>aZ,importSTL:()=>oZ,importSVG:()=>rZ,importSVGPathD:()=>nZ,importThreeMF:()=>m8}),C7=NZ({cornerFinder:()=>_z,edgeFinder:()=>FL,faceFinder:()=>RL,getSingleFace:()=>VL,vertexFinder:()=>WZ,wireFinder:()=>BL}),w7=NZ({complexExtrude:()=>VN,extrude:()=>$8,guidedSweep:()=>KN,loft:()=>t5,multiSectionSweep:()=>GN,revolve:()=>e5,roof:()=>h6,supportExtrude:()=>BN,surfaceFromGrid:()=>F3,surfaceFromImage:()=>R3,sweep:()=>zN,twistExtrude:()=>HN}),T7=NZ({circularPattern:()=>HF,linearPattern:()=>VF}),E7=NZ({CSG_VERSION:()=>4,Evaluator:()=>W2,add:()=>Z$,arbitraryClosedProfile:()=>O0,arbitraryProfileWithVoids:()=>k0,arcTo:()=>_1,asScalarExpr:()=>$$,asVec2Expr:()=>n1,asVec3Expr:()=>t1,asymmetricIProfile:()=>v0,bezierTo:()=>v1,binOp:()=>q$,box:()=>N1,buildVec:()=>X$,cShapeProfile:()=>C0,circle:()=>z1,circleHollowProfile:()=>D0,circularProfile:()=>g0,color:()=>i0,component:()=>Y$,compound:()=>u0,cone:()=>I1,contour:()=>b1,cut:()=>J1,cutAll:()=>Z1,cylinder:()=>F1,ellipseArcTo:()=>y1,ellipseProfile:()=>w0,emptyFace:()=>W1,emptySolid:()=>U1,emptyWire:()=>G1,extrude:()=>r0,foldExpr:()=>J4,forEachNode:()=>s3,fromJSON:()=>c4,fuse:()=>q1,fuseAll:()=>X1,iBeamProfile:()=>_0,instance:()=>d0,intersect:()=>Y1,lShapeProfile:()=>y0,line:()=>B1,lineTo:()=>g1,loft:()=>c0,mirror:()=>n0,mul:()=>Q$,nodeCount:()=>l3,numLit:()=>U$,optimize:()=>q4,outputKindOf:()=>f0,param:()=>K$,path:()=>s0,polygon:()=>R1,profile:()=>a0,rectangleHollowProfile:()=>E0,rectangularProfile:()=>h0,replaceNode:()=>i3,revolve:()=>l0,rotate:()=>e0,scale:()=>t0,sphere:()=>P1,sweep:()=>o0,tShapeProfile:()=>b0,toJSON:()=>q2,torus:()=>L1,translate:()=>$1,trapeziumProfile:()=>T0,uShapeProfile:()=>x0,unaryOp:()=>J$,vec2Lit:()=>G$,vec3Lit:()=>W$,vertex:()=>V1,withEvaluator:()=>G2,zShapeProfile:()=>S0});export{dz as BaseSketcher2d,fz as BlueprintSketcher,r as BrepBugError,H as BrepErrorCode,l5 as BrepWrapperError,Cy as BrepkitAdapter,Wq as CompoundSketch,o as DEFAULT_CAPABILITIES,CD as DEG2RAD,iE as DisposalScope,a as EXACT_BREP_CAPABILITIES,CJ as FaceSketcher,G as HASH_CODE_MAX,WE as OK,uo as OcctWasmAdapter,wD as RAD2DEG,oJ as Sketch,SJ as Sketcher,sJ as Sketches,KF as addChild,Vj as addHoles,hI as addJoint,W6 as addMate,XI as addStep,CP as adjacentFaces,$E as all,JE as andThen,RZ as applyGlue,C8 as applyMatrix,cM as approximateCurve,mE as as2D,pE as as3D,ZO as asTopo,RP as assignRoles,jN as autoHeal,Oj as bezier,x3 as blueprintToContour,xX as blueprintToDXF,WA as booleanPipeline,v7 as booleans,o5 as boss,hj as box,Dj as bsplineApprox,i as bug,yJ as cameraFromPlane,vJ as cameraLookAt,AP as captureHint,rk as cast,LE as castShape,RE as castShape3D,z8 as chamfer,BM as chamferDistAngleShape,lN as chamferWithEvolution,q6 as checkAllInterferences,eN as checkBoolean,K6 as checkInterference,Sj as circle,HF as circularPattern,vk as classifyPointOnFace,vM as clearMeshCache,S8 as clone,pO as closedWire,uD as collect,QF as collectShapes,gA as colorFaces,hA as colorShape,VN as complexExtrude,fj as composeTransforms,Lj as compound,rJ as compoundSketchExtrude,tJ as compoundSketchFace,aJ as compoundSketchLoft,iJ as compoundSketchRevolve,vD as computationError,s6 as computeStraightSkeleton,vj as cone,w7 as construction,V3 as convexHull,_z as cornerFinder,ZF as countNodes,MF as createAssembly,GF as createAssemblyNode,FY as createBlueprint,_J as createCamera,DE as createCompound,IY as createCompoundBlueprint,_F as createDerivedFaceRef,cP as createDistanceQuery,xE as createEdge,eF as createEdgeRef,CE as createFace,eE as createHandle,YI as createHistory,rE as createKernelHandle,yM as createMeshCache,WO as createNamedPlane,TZ as createOperationRegistry,HO as createPlane,zP as createRef,rL as createRegistry,wE as createShell,TE as createSolid,_Z as createTaskQueue,bE as createVertex,cF as createVertexRef,SE as createWire,wZ as createWorkerClient,AZ as createWorkerHandler,jZ as createWorkerPool,E7 as csg,mo as currentQuality,DY as curve2dBoundingBox,PY as curve2dDistanceFrom,OY as curve2dFirstPoint,NY as curve2dIsOnCurve,kY as curve2dLastPoint,jY as curve2dParameter,AY as curve2dSplitAt,MY as curve2dTangentAt,tM as curveAxis,Zj as curveEndPoint,nM as curveIsClosed,rM as curveIsPeriodic,eM as curveLength,iM as curvePeriod,Qj as curvePointAt,Xj as curveStartPoint,$j as curveTangentAt,D8 as cut,rB as cut2D,k8 as cutAll,GM as cutAllBisect,Kz as cutBlueprints,oN as cutWithEvolution,gj as cylinder,cI as cylindricalJoint,kP as defaultScorer,yZ as dequeueTask,J8 as describe,eY as deserializeDrawing,uL as deserializeHistory,ak as deserializeShape,tk as downcast,U8 as draft,nY as draw,sY as drawCircle,cY as drawEllipse,hY as drawFaceOutline,fY as drawParametricFunction,dY as drawPointsInterpolation,lY as drawPolysides,mY as drawProjection,iY as drawRectangle,rY as drawRoundedRectangle,aY as drawSingleCircle,oY as drawSingleEllipse,uY as drawText,xY as drawingChamfer,vY as drawingCut,bY as drawingFillet,_Y as drawingFuse,yY as drawingIntersect,gY as drawingToSketchOnPlane,i5 as drill,FL as edgeFinder,yP as edgesOfFace,Cj as ellipse,Ej as ellipseArc,bj as ellipsoid,vZ as enqueueTask,z as err,WF as exportAssemblySTEP,bX as exportDXF,sX as exportGlb,oX as exportGltf,DM as exportIGES,XY as exportOBJ,TM as exportSTEP,iZ as exportSTEPConfigured,EM as exportSTL,BX as exportThreeMF,WI as exportURDF,$8 as extrude,Uq as extrudeAll,Mj as face,_k as faceAxis,gk as faceCenter,RL as faceFinder,ck as faceGeomType,lk as faceOrientation,_P as facesOfEdge,vP as facesOfVertex,jQ as fieldBoolean,FQ as fieldContour,MQ as fieldOffset,PQ as fieldReinit,NQ as fieldShell,qk as fill,Nj as filledFace,R8 as fillet,cN as filletWithEvolution,iA as findFacesByTag,YF as findNode,QI as findStep,PN as fixSelfIntersection,MN as fixShape,YE as flatMap,nD as flatten,uk as flipFaceOrientation,oM as flipOrientation,uZ as fontMetrics,yI as forwardKinematics,X8 as fromBREP,O3 as fromKernelDir,D3 as fromKernelPnt,E3 as fromKernelVec,iD as fromNullable,E8 as fuse,tB as fuse2D,O8 as fuseAll,YM as fuseAllBisect,Gz as fuseBlueprints,aN as fuseWithEvolution,N5 as gearGeometry,XZ as getActiveVoxelId,rO as getBounds,LY as getBounds2D,YD as getCompSolids,Yj as getCurveType,JT as getDisposalStats,UD as getEdges,vA as getFaceColor,Ck as getFaceOrigins,aA as getFaceTags,WD as getFaces,uJ as getFont,Wj as getHashCode,$I as getHistoryShape,F as getKernel,FT as getKernelCapabilities,zT as getKernelTier,VM as getNurbsCurveData,HM as getNurbsSurfaceData,aM as getOrientation,RY as getOrientation2D,Co as getPerformanceStats,_A as getShapeColor,vE as getShapeKind,JD as getShells,VL as getSingleFace,qD as getSolids,sk as getSurfaceType,sA as getTagMetadata,KD as getVertices,YZ as getVoxel,GD as getWires,UF as gridPattern,KN as guidedSweep,W8 as heal,ON as healFace,DN as healSolid,kN as healWire,wj as helix,B3 as hull,Q6 as importDXF,h8 as importGLB,sZ as importIGES,n8 as importOBJ,aZ as importSTEP,oZ as importSTL,rZ as importSVG,nZ as importSVGPathD,m8 as importThreeMF,JI as importURDF,UT as init,AT as initFromManifold,VT as initFromOC,ZZ as initVoxel,xk as innerWires,s2 as instance,l2 as instanceCount,c2 as instanceGrid,f2 as instancedMesh,sM as interpolateCurve,A8 as intersect,iB as intersect2D,qz as intersectBlueprints,sN as intersectWithEvolution,HD as invalidateShapeCache,NI as inverseKinematics,S7 as io,yD as ioError,fE as is2D,dE as is3D,mZ as isBatchRequest,BZ as isChamferRadius,lO as isClosedWire,ik as isCompSolid,PE as isCompound,bF as isDerivedFaceRef,pZ as isDisposeRequest,kE as isEdge,xF as isEdgeRef,Q8 as isEmpty,qj as isEqualShape,B as isErr,gZ as isErrorResponse,jE as isFace,CF as isFaceRef,VZ as isFilletRadius,dZ as isInitRequest,zY as isInside2D,o2 as isInstanced,wF as isLineageRef,uE as isLive,dO as isManifoldShell,zZ as isNumber,GE as isOk,fZ as isOperationRequest,uO as isOrientedFace,_O as isPlanarFace,vO as isPlanarWire,mJ as isProjectionPlane,xZ as isQueueEmpty,Kj as isSameShape,IE as isShape1D,FE as isShape3D,ME as isShell,NE as isSolid,hZ as isSuccessResponse,Z8 as isValid,fO as isValidSolid,OE as isVertex,SF as isVertexRef,AE as isWire,nO as iterCompSolids,XD as iterEdges,ZD as iterFaces,tO as iterShells,eO as iterSolids,$O as iterTopo,$D as iterVertices,QD as iterWires,FI as jointTrajectory,mI as jointTransform,RI as jointsFromDH,jD as kernelCall,MD as kernelCallRaw,ND as kernelCallScoped,U as kernelError,S$ as latticeInfill,C$ as latticeInfillShape,xj as line,VF as linearPattern,lJ as loadFont,T8 as locate,t5 as loft,JN as loftAll,NJ as makeBaseBox,n7 as makeExternalGear,r7 as makeInternalGear,KO as makePlane,a7 as makePlanetaryGear,gJ as makeProjectedEdges,hO as manifoldShell,KE as map,rD as mapBoth,qE as mapErr,lD as match,u2 as materialize,iP as measureArea,lP as measureCurvatureAt,uP as measureCurvatureAtMid,oP as measureDistance,sP as measureDistanceProps,aP as measureLength,nP as measureLinearProps,tP as measureSurfaceProps,rP as measureVolume,eP as measureVolumeProps,x7 as measurement,bI as mechanismDOF,K8 as mesh,q8 as meshEdges,MM as meshLODs,PM as meshLODsProgressive,OM as meshMultiLOD,G3 as minkowski,b8 as mirror,WY as mirror2D,TY as mirrorDrawing,s5 as mirrorJoin,y7 as modifiers,cL as modifyStep,_D as moduleInitError,GN as multiSectionSweep,hk as normalAt,V8 as offset,zj as offsetFace,pQ as offsetMesh,gQ as offsetShape,lM as offsetWire2D,R as ok,XE as or,ZE as orElse,ez as organiseBlueprints,mO as orientedFace,yk as outerWire,T7 as patterns,bZ as pendingCount,pD as pipeline,YO as pivotPlane,yO as planarFace,lI as planarJoint,bO as planarWire,Z5 as planetPlacements,a5 as pocket,fk as pointOnSurface,nQ as pointsInside,Fj as polygon,K3 as polyhedron,kJ as polysideInnerRadius,vz as polysidesBlueprint,dN as positionOnCurve,HT as prewarm,_7 as primitives,sI as prismaticJoint,bJ as projectEdges,mk as projectPointOnFace,C7 as query,bD as queryError,c5 as rectangularPattern,EZ as registerHandler,jT as registerKernel,RT as registerKernelTier,iL as registerOperation,nL as registerShape,JZ as registerVoxel,SZ as rejectAll,qF as removeChild,bk as removeHolesFromFace,aQ as repairMesh,sL as replayFrom,oL as replayHistory,YT as resetDisposalStats,wo as resetPerformanceStats,sj as resize,$ as resolve,g8 as resolve3D,vF as resolveDerivedFaceRef,wO as resolveDirection,tF as resolveEdgeRef,EF as resolveLineageRef,GO as resolvePlane,GP as resolveRef,OF as resolveRefIn,AF as resolveRefParams,lF as resolveVertexRef,EY as reverseCurve,oI as revoluteJoint,e5 as revolve,h6 as roof,y8 as rotate,HY as rotate2D,CY as rotateDrawing,yz as roundedRectangleBlueprint,x8 as scale,UY as scale2D,wY as scaleDrawing,ZQ as sdfBox,t$ as sdfCapsule,e$ as sdfCone,$Q as sdfCylinder,p$ as sdfFieldAxialRamp,g$ as sdfFieldClamp,f$ as sdfFieldConst,h$ as sdfFieldFromSdf,m$ as sdfFieldRadialRamp,s$ as sdfLattice,r$ as sdfPlane,QQ as sdfRoundedBox,XQ as sdfSphere,c$ as sdfStrutLattice,a$ as sdfSweep,n$ as sdfTorus,j8 as section,M8 as sectionToFace,lL as serializeHistory,fI as setJointValue,dI as setJointValues,Sk as setShapeOrigin,oA as setTagMetadata,Bj as sewShells,D5 as shape,sQ as shapeToMeshInput,ek as shapeType,TP as sharedEdges,B8 as shell,mQ as shellMesh,_Q as shellShape,uN as shellWithEvolution,G8 as simplify,wJ as sketchCircle,TJ as sketchEllipse,Zq as sketchExtrude,Jq as sketchFace,AJ as sketchFaceOffset,MJ as sketchHelix,$q as sketchLoft,qY as sketchOnFace2D,KY as sketchOnPlane2D,jJ as sketchParametricFunction,OJ as sketchPolysides,EJ as sketchRectangle,Xq as sketchRevolve,DJ as sketchRoundedRectangle,Qq as sketchSweep,cZ as sketchText,Yq as sketchWires,gD as sketcherStateError,P8 as slice,Rj as solid,NN as solidFromShell,G6 as solveAssembly,_j as sphere,uI as sphericalJoint,N8 as split,eL as stepCount,tL as stepsFrom,GY as stretch2D,Pj as subFace,BN as supportExtrude,FZ as supportsConstraintSketch,PZ as supportsProjection,F3 as surfaceFromGrid,R3 as surfaceFromImage,zN as sweep,rA as tagFaces,kj as tangentArc,eD as tap,tD as tapErr,fJ as textBlueprints,lZ as textMetrics,H8 as thicken,dL as thread,Tj as threePointArc,Y8 as toBREP,FM as toBufferGeometryData,IM as toGroupedBufferGeometryData,C3 as toKernelVec,RM as toLODGeometryData,zM as toLODGeometryLevels,LM as toLineGeometryData,BY as toSVGPathD,SO as toVec2,xO as toVec3,yj as torus,w$ as tpmsLattice,w8 as transformCopy,b7 as transforms,_8 as translate,VY as translate2D,SY as translateDrawing,JO as translatePlane,dD as tryCatch,fD as tryCatchAsync,HN as twistExtrude,hD as typeCastError,ZI as undoLast,xD as unsupportedError,V as unwrap,cD as unwrapErr,oD as unwrapOr,sD as unwrapOrElse,JF as updateNode,VP as updateRoles,dk as uvBounds,pk as uvCoordinates,gO as validSolid,R5 as validatePlanetary,W as validationError,TN as variableFillet,TO as vecAdd,LO as vecAngle,AO as vecCross,NO as vecDistance,kO as vecDot,FO as vecEquals,IO as vecIsZero,jO as vecLength,MO as vecLengthSq,OO as vecNegate,PO as vecNormalize,RO as vecProjectToPlane,VO as vecRepr,zO as vecRotate,DO as vecScale,EO as vecSub,Ij as vertex,WZ as vertexFinder,cO as vertexPosition,SP as verticesOfEdge,bP as verticesOfFace,hQ as voxelBoolean,AQ as voxelBooleanField,LQ as voxelBooleanFieldShapes,vQ as voxelBooleanShapes,kQ as voxelField,IQ as voxelFieldFromShape,XF as walkAssembly,tQ as windingNumbers,Aj as wire,BL as wireFinder,jj as wireLoop,xP as wiresOfFace,PT as withKernel,j3 as withKernelDir,A3 as withKernelPnt,k3 as withKernelVec,IT as withQuality,aE as withScope,cE as withScopeResult,lE as withScopeResultAsync,BT as withTier,QE as zipResults};
@@ -4205,4 +4205,4 @@ No matching component was found for:
4205
4205
 
4206
4206
  gl_FragColor = vec4(lineColor, alpha);
4207
4207
  }
4208
- `;function Jy({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,Q.jsxs)(`mesh`,{rotation:[-Math.PI/2,0,0],position:[0,-.01,0],children:[(0,Q.jsx)(`planeGeometry`,{args:[o,o]}),(0,Q.jsx)(`shaderMaterial`,{ref:a,vertexShader:Ky,fragmentShader:qy,uniforms:{cellSize:{value:e},lineColor:{value:new K(t)},lineOpacity:{value:n},fadeStart:{value:r},fadeEnd:{value:i}},transparent:!0,depthWrite:!1,side:2,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:1})]})}function Yy(){return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`hemisphereLight`,{args:[`#ffffff`,`#1a1a2e`,.65]}),(0,Q.jsx)(`directionalLight`,{position:[-50,60,80],intensity:.85,color:`#fff8f0`}),(0,Q.jsx)(`directionalLight`,{position:[40,-40,30],intensity:.15,color:`#e0e8ff`})]})}function Xy({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,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(Yy,{}),(0,Q.jsx)(Gy,{}),(0,Q.jsx)(by,{makeDefault:!0,autoRotate:e,autoRotateSpeed:1.5,...s,...i}),n&&(0,Q.jsx)(Jy,{...r})]})}var Zy={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 Qy({data:e,view:t,fitSignal:n,projection:r,onFirstFrame:i}){let a=S_(e=>e.camera),o=S_(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=xy(e);t.computeBoundingSphere();let n=t.boundingSphere??new Bi(new G,1),r={center:n.center.clone(),radius:n.radius||1};return t.dispose(),r},[e]);return(0,v.useEffect)(()=>{let e=Zy[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 $y(){let e=S_(e=>e.camera),t=(0,v.useRef)([e.position.x,e.position.y,e.position.z]);return(0,Q.jsx)(yy,{makeDefault:!0,position:t.current,zoom:20,near:.1,far:2e3})}function eb(){let e=S_(e=>e.gl);return(0,v.useEffect)(()=>(e.localClippingEnabled=!0,()=>{e.localClippingEnabled=!1}),[e]),null}function tb({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,Q.jsx)(Ay,{onError:s,fallback:c,children:(0,Q.jsxs)(Uv,{frameloop:r?`always`:`demand`,gl:{preserveDrawingBuffer:!0},children:[(0,Q.jsx)(eb,{}),a===`orthographic`&&(0,Q.jsx)($y,{}),(0,Q.jsx)(Xy,{autoRotate:r,gridVisible:i}),(0,Q.jsx)(Qy,{data:e,view:t,fitSignal:n,projection:a,onFirstFrame:o}),l]})})}var nb=[`iso`,`front`,`top`,`right`],rb={solid:`Solid`,wireframe:`Wire`,xray:`X-ray`},ib={iso:`Iso`,front:`Front`,top:`Top`,right:`Right`};function ab({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,Q.jsxs)(`div`,{className:h,style:h?void 0:{...cb,gap:m?8:6},children:[(f||p)&&(0,Q.jsxs)(ob,{touch:m,children:[f&&(0,Q.jsx)(sb,{label:`Fit`,onClick:f,touch:m}),p&&(0,Q.jsx)(sb,{label:`Snap`,onClick:p,touch:m})]}),e&&t&&(0,Q.jsx)(ob,{touch:m,children:Object.keys(rb).map(n=>(0,Q.jsx)(sb,{label:rb[n],active:e===n,touch:m,onClick:()=>{t(n)}},n))}),(r||a||s||l)&&(0,Q.jsxs)(ob,{touch:m,children:[r&&(0,Q.jsx)(sb,{label:`Edges`,active:n,onClick:r,touch:m}),a&&(0,Q.jsx)(sb,{label:`Grid`,active:i,onClick:a,touch:m}),s&&(0,Q.jsx)(sb,{label:`Spin`,active:o,onClick:s,touch:m}),l&&(0,Q.jsx)(sb,{label:c===`orthographic`?`Ortho`:`Persp`,active:c===`orthographic`,touch:m,onClick:l})]}),d&&(0,Q.jsx)(ob,{touch:m,children:nb.map(e=>(0,Q.jsx)(sb,{label:ib[e],active:u===e,touch:m,onClick:()=>{d(e)}},e))})]})}function ob({children:e,touch:t}){return(0,Q.jsx)(`div`,{style:t?fb:lb,children:e})}function sb({label:e,active:t,onClick:n,touch:r}){return(0,Q.jsx)(`button`,{type:`button`,onClick:n,"aria-pressed":t,style:{...r?pb:ub,...t?db:null},children:e})}var cb={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`},lb={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)`},ub={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`},db={color:`#6ee7d7`,background:`rgba(45, 212, 191, 0.16)`,borderColor:`rgba(45, 212, 191, 0.3)`},fb={...lb,gap:6,padding:6},pb={...ub,padding:`9px 14px`,fontSize:13,borderRadius:6};function mb({dims:e,volume:t,area:n,triangles:r,valid:i,unit:a,className:o}){let s=a?` ${a}`:``,c=[];return e&&c.push((0,Q.jsx)(hb,{label:`Size`,value:`${gb(e[0])} × ${gb(e[1])} × ${gb(e[2])}${s}`},`size`)),t!==void 0&&c.push((0,Q.jsx)(hb,{label:`Volume`,value:`${gb(t)}${a?` ${a}³`:``}`},`vol`)),n!==void 0&&c.push((0,Q.jsx)(hb,{label:`Area`,value:`${gb(n)}${a?` ${a}²`:``}`},`area`)),r!==void 0&&c.push((0,Q.jsx)(hb,{label:`Triangles`,value:r.toLocaleString()},`tris`)),i!==void 0&&c.push((0,Q.jsx)(hb,{label:`Validity`,value:i?`valid`:`invalid`,valueColor:i?`#6ee7d7`:`#f0a0a0`},`valid`)),c.length===0?null:(0,Q.jsx)(`div`,{className:o,style:o?void 0:_b,children:c})}function hb({label:e,value:t,valueColor:n}){return(0,Q.jsxs)(`div`,{style:vb,children:[(0,Q.jsx)(`span`,{style:yb,children:e}),(0,Q.jsx)(`span`,{style:{...bb,...n?{color:n}:null},children:t})]})}function gb(e){return Number.isFinite(e)?Number.isInteger(e)?e.toLocaleString():Number(e.toFixed(2)).toLocaleString():`—`}var _b={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`},vb={display:`flex`,justifyContent:`space-between`,gap:16,fontSize:12,lineHeight:1.5},yb={color:`#7b8591`},bb={color:`#c8cdd3`,fontVariantNumeric:`tabular-nums`},xb={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 Sb(e){return xb[e]??`Surface`}function Cb(e){return Number.isFinite(e)?Number.isInteger(e)?e.toLocaleString():Number(e.toFixed(2)).toLocaleString():`—`}function wb({face:e,onClear:t,unit:n,className:r}){if(!e)return null;let[i,a,o]=e.normal;return(0,Q.jsxs)(`div`,{className:r,style:r?void 0:Eb,children:[(0,Q.jsxs)(`div`,{style:Db,children:[(0,Q.jsxs)(`span`,{style:Ob,children:[Sb(e.surfaceType),` face`]}),t&&(0,Q.jsx)(`button`,{type:`button`,onClick:t,"aria-label":`Clear selection`,style:kb,children:`✕`})]}),(0,Q.jsx)(Tb,{label:`Area`,value:`${Cb(e.area)}${n?` ${n}²`:``}`}),(0,Q.jsx)(Tb,{label:`Normal`,value:`${Cb(i)}, ${Cb(a)}, ${Cb(o)}`})]})}function Tb({label:e,value:t}){return(0,Q.jsxs)(`div`,{style:Ab,children:[(0,Q.jsx)(`span`,{style:jb,children:e}),(0,Q.jsx)(`span`,{style:Mb,children:t})]})}var Eb={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`},Db={display:`flex`,justifyContent:`space-between`,alignItems:`center`,gap:12,marginBottom:2},Ob={color:`#6ee7d7`,fontSize:12,fontWeight:600},kb={cursor:`pointer`,border:`none`,background:`transparent`,color:`#7b8591`,fontSize:12,lineHeight:1,padding:0},Ab={display:`flex`,justifyContent:`space-between`,gap:16,fontSize:12,lineHeight:1.5},jb={color:`#7b8591`},Mb={color:`#c8cdd3`,fontVariantNumeric:`tabular-nums`},Nb=[`x`,`y`,`z`];function Pb({enabled:e,onToggle:t,axis:n,onAxisChange:r,position:i,min:a,max:o,onPositionChange:s,flip:c,onToggleFlip:l,className:u}){return(0,Q.jsxs)(`div`,{className:u,style:u?void 0:Ib,children:[(0,Q.jsx)(Fb,{label:`Section`,active:e,onClick:t}),e&&(0,Q.jsxs)(Q.Fragment,{children:[Nb.map(e=>(0,Q.jsx)(Fb,{label:e.toUpperCase(),active:n===e,onClick:()=>{r(e)}},e)),(0,Q.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:{...zb,...a===o?{opacity:.4}:null}}),(0,Q.jsx)(Fb,{label:`Flip`,active:c,onClick:l})]})]})}function Fb({label:e,active:t,onClick:n}){return(0,Q.jsx)(`button`,{type:`button`,onClick:n,"aria-pressed":t,style:{...Lb,...t?Rb:null},children:e})}var Ib={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`},Lb={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`},Rb={color:`#6ee7d7`,background:`rgba(45, 212, 191, 0.16)`,borderColor:`rgba(45, 212, 191, 0.3)`},zb={width:160,accentColor:`#4ACECC`,margin:`0 4px`};function Bb(e){let t=new URLSearchParams(e),n=t.get(`file`);return n?{dir:t.get(`dir`),file:n}:null}function Vb(e){let t=e.lastIndexOf(`.`);return t===-1?``:e.slice(t).toLowerCase()}function Hb({inspect:e=!1}={}){let[t,n]=(0,v.useState)({status:`idle`});return(0,v.useEffect)(()=>{let t=Bb(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-CzqRO158.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:Vb(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 Ub=[`iso`,`front`,`top`,`right`],Wb=new Set;function Gb(e){return Ub.includes(e)}function Kb(e){return Wb.add(e),()=>Wb.delete(e)}function qb(e){for(let t of Wb)t(e)}function Jb(){globalThis.__ready=!0}function Yb(){let e=globalThis;e.__ready=!1,e.__renderView=e=>{Gb(e)&&qb({view:e})},e.__setScene=e=>{e&&Gb(e.view)&&qb(e)}}function Xb({marks:e}){return(0,Q.jsx)(Q.Fragment,{children:e.map((e,t)=>(0,Q.jsx)(ay,{position:[e.pos[0],e.pos[1],e.pos[2]],center:!0,children:(0,Q.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 Zb=new URLSearchParams(window.location.search),Qb=Zb.get(`ui`)!==`0`,$b=Zb.get(`dims`)===`1`;function ex(){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 tx(){let e=Hb({inspect:Qb}),[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`?Sy(e.data):null,[e]);(0,v.useEffect)(()=>Kb(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?[wy(S,w,E)]:void 0,[b,M,S,w,E]);return e.status===`error`?(0,Q.jsxs)(`div`,{style:{color:`#e88`,padding:16,fontFamily:`monospace`},children:[`error: `,e.error]}):e.status===`ready`?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(tb,{data:e.data,view:t,fitSignal:p,autoRotate:l,gridVisible:s,projection:d,onFirstFrame:Jb,children:[(0,Q.jsx)(ky,{data:e.data,viewMode:r,...ie?{clippingPlanes:ie}:{},...Qb?{onFacePick:ee,onFaceHover:j}:{}}),a&&r!==`wireframe`&&e.data.edges.length>0&&(0,Q.jsx)(Ny,{edges:e.data.edges,...ie?{clippingPlanes:ie}:{}}),Qb&&(0,Q.jsx)(Vy,{data:e.data,selectedFaceIds:h?[h.faceId]:[],hoverFaceId:_}),O.length>0&&(0,Q.jsx)(Xb,{marks:O})]}),Qb&&(0,Q.jsx)(wb,{face:h,onClear:()=>{g(null)}}),Qb&&(0,Q.jsx)(Pb,{enabled:b,onToggle:ne,axis:S,onAxisChange:re,position:w,min:N,max:P,onPositionChange:T,flip:E,onToggleFlip:()=>{D(e=>!e)}}),Qb&&(0,Q.jsx)(mb,{dims:Cy(e.data),volume:e.measurements.volume,area:e.measurements.area,triangles:e.data.index.length/3,valid:e.measurements.valid}),!Qb&&$b&&(0,Q.jsx)(mb,{dims:Cy(e.data)}),Qb&&(0,Q.jsx)(ab,{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:ex})]}):(0,Q.jsx)(`div`,{style:{color:`#9aa`,padding:16,fontFamily:`monospace`},children:`loading model…`})}Yb();var nx=document.getElementById(`root`);nx&&(0,y.createRoot)(nx).render((0,Q.jsx)(v.StrictMode,{children:(0,Q.jsx)(tx,{})}));
4208
+ `;function Jy({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,Q.jsxs)(`mesh`,{rotation:[-Math.PI/2,0,0],position:[0,-.01,0],children:[(0,Q.jsx)(`planeGeometry`,{args:[o,o]}),(0,Q.jsx)(`shaderMaterial`,{ref:a,vertexShader:Ky,fragmentShader:qy,uniforms:{cellSize:{value:e},lineColor:{value:new K(t)},lineOpacity:{value:n},fadeStart:{value:r},fadeEnd:{value:i}},transparent:!0,depthWrite:!1,side:2,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:1})]})}function Yy(){return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`hemisphereLight`,{args:[`#ffffff`,`#1a1a2e`,.65]}),(0,Q.jsx)(`directionalLight`,{position:[-50,60,80],intensity:.85,color:`#fff8f0`}),(0,Q.jsx)(`directionalLight`,{position:[40,-40,30],intensity:.15,color:`#e0e8ff`})]})}function Xy({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,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(Yy,{}),(0,Q.jsx)(Gy,{}),(0,Q.jsx)(by,{makeDefault:!0,autoRotate:e,autoRotateSpeed:1.5,...s,...i}),n&&(0,Q.jsx)(Jy,{...r})]})}var Zy={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 Qy({data:e,view:t,fitSignal:n,projection:r,onFirstFrame:i}){let a=S_(e=>e.camera),o=S_(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=xy(e);t.computeBoundingSphere();let n=t.boundingSphere??new Bi(new G,1),r={center:n.center.clone(),radius:n.radius||1};return t.dispose(),r},[e]);return(0,v.useEffect)(()=>{let e=Zy[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 $y(){let e=S_(e=>e.camera),t=(0,v.useRef)([e.position.x,e.position.y,e.position.z]);return(0,Q.jsx)(yy,{makeDefault:!0,position:t.current,zoom:20,near:.1,far:2e3})}function eb(){let e=S_(e=>e.gl);return(0,v.useEffect)(()=>(e.localClippingEnabled=!0,()=>{e.localClippingEnabled=!1}),[e]),null}function tb({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,Q.jsx)(Ay,{onError:s,fallback:c,children:(0,Q.jsxs)(Uv,{frameloop:r?`always`:`demand`,gl:{preserveDrawingBuffer:!0},children:[(0,Q.jsx)(eb,{}),a===`orthographic`&&(0,Q.jsx)($y,{}),(0,Q.jsx)(Xy,{autoRotate:r,gridVisible:i}),(0,Q.jsx)(Qy,{data:e,view:t,fitSignal:n,projection:a,onFirstFrame:o}),l]})})}var nb=[`iso`,`front`,`top`,`right`],rb={solid:`Solid`,wireframe:`Wire`,xray:`X-ray`},ib={iso:`Iso`,front:`Front`,top:`Top`,right:`Right`};function ab({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,Q.jsxs)(`div`,{className:h,style:h?void 0:{...cb,gap:m?8:6},children:[(f||p)&&(0,Q.jsxs)(ob,{touch:m,children:[f&&(0,Q.jsx)(sb,{label:`Fit`,onClick:f,touch:m}),p&&(0,Q.jsx)(sb,{label:`Snap`,onClick:p,touch:m})]}),e&&t&&(0,Q.jsx)(ob,{touch:m,children:Object.keys(rb).map(n=>(0,Q.jsx)(sb,{label:rb[n],active:e===n,touch:m,onClick:()=>{t(n)}},n))}),(r||a||s||l)&&(0,Q.jsxs)(ob,{touch:m,children:[r&&(0,Q.jsx)(sb,{label:`Edges`,active:n,onClick:r,touch:m}),a&&(0,Q.jsx)(sb,{label:`Grid`,active:i,onClick:a,touch:m}),s&&(0,Q.jsx)(sb,{label:`Spin`,active:o,onClick:s,touch:m}),l&&(0,Q.jsx)(sb,{label:c===`orthographic`?`Ortho`:`Persp`,active:c===`orthographic`,touch:m,onClick:l})]}),d&&(0,Q.jsx)(ob,{touch:m,children:nb.map(e=>(0,Q.jsx)(sb,{label:ib[e],active:u===e,touch:m,onClick:()=>{d(e)}},e))})]})}function ob({children:e,touch:t}){return(0,Q.jsx)(`div`,{style:t?fb:lb,children:e})}function sb({label:e,active:t,onClick:n,touch:r}){return(0,Q.jsx)(`button`,{type:`button`,onClick:n,"aria-pressed":t,style:{...r?pb:ub,...t?db:null},children:e})}var cb={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`},lb={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)`},ub={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`},db={color:`#6ee7d7`,background:`rgba(45, 212, 191, 0.16)`,borderColor:`rgba(45, 212, 191, 0.3)`},fb={...lb,gap:6,padding:6},pb={...ub,padding:`9px 14px`,fontSize:13,borderRadius:6};function mb({dims:e,volume:t,area:n,triangles:r,valid:i,unit:a,className:o}){let s=a?` ${a}`:``,c=[];return e&&c.push((0,Q.jsx)(hb,{label:`Size`,value:`${gb(e[0])} × ${gb(e[1])} × ${gb(e[2])}${s}`},`size`)),t!==void 0&&c.push((0,Q.jsx)(hb,{label:`Volume`,value:`${gb(t)}${a?` ${a}³`:``}`},`vol`)),n!==void 0&&c.push((0,Q.jsx)(hb,{label:`Area`,value:`${gb(n)}${a?` ${a}²`:``}`},`area`)),r!==void 0&&c.push((0,Q.jsx)(hb,{label:`Triangles`,value:r.toLocaleString()},`tris`)),i!==void 0&&c.push((0,Q.jsx)(hb,{label:`Validity`,value:i?`valid`:`invalid`,valueColor:i?`#6ee7d7`:`#f0a0a0`},`valid`)),c.length===0?null:(0,Q.jsx)(`div`,{className:o,style:o?void 0:_b,children:c})}function hb({label:e,value:t,valueColor:n}){return(0,Q.jsxs)(`div`,{style:vb,children:[(0,Q.jsx)(`span`,{style:yb,children:e}),(0,Q.jsx)(`span`,{style:{...bb,...n?{color:n}:null},children:t})]})}function gb(e){return Number.isFinite(e)?Number.isInteger(e)?e.toLocaleString():Number(e.toFixed(2)).toLocaleString():`—`}var _b={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`},vb={display:`flex`,justifyContent:`space-between`,gap:16,fontSize:12,lineHeight:1.5},yb={color:`#7b8591`},bb={color:`#c8cdd3`,fontVariantNumeric:`tabular-nums`},xb={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 Sb(e){return xb[e]??`Surface`}function Cb(e){return Number.isFinite(e)?Number.isInteger(e)?e.toLocaleString():Number(e.toFixed(2)).toLocaleString():`—`}function wb({face:e,onClear:t,unit:n,className:r}){if(!e)return null;let[i,a,o]=e.normal;return(0,Q.jsxs)(`div`,{className:r,style:r?void 0:Eb,children:[(0,Q.jsxs)(`div`,{style:Db,children:[(0,Q.jsxs)(`span`,{style:Ob,children:[Sb(e.surfaceType),` face`]}),t&&(0,Q.jsx)(`button`,{type:`button`,onClick:t,"aria-label":`Clear selection`,style:kb,children:`✕`})]}),(0,Q.jsx)(Tb,{label:`Area`,value:`${Cb(e.area)}${n?` ${n}²`:``}`}),(0,Q.jsx)(Tb,{label:`Normal`,value:`${Cb(i)}, ${Cb(a)}, ${Cb(o)}`})]})}function Tb({label:e,value:t}){return(0,Q.jsxs)(`div`,{style:Ab,children:[(0,Q.jsx)(`span`,{style:jb,children:e}),(0,Q.jsx)(`span`,{style:Mb,children:t})]})}var Eb={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`},Db={display:`flex`,justifyContent:`space-between`,alignItems:`center`,gap:12,marginBottom:2},Ob={color:`#6ee7d7`,fontSize:12,fontWeight:600},kb={cursor:`pointer`,border:`none`,background:`transparent`,color:`#7b8591`,fontSize:12,lineHeight:1,padding:0},Ab={display:`flex`,justifyContent:`space-between`,gap:16,fontSize:12,lineHeight:1.5},jb={color:`#7b8591`},Mb={color:`#c8cdd3`,fontVariantNumeric:`tabular-nums`},Nb=[`x`,`y`,`z`];function Pb({enabled:e,onToggle:t,axis:n,onAxisChange:r,position:i,min:a,max:o,onPositionChange:s,flip:c,onToggleFlip:l,className:u}){return(0,Q.jsxs)(`div`,{className:u,style:u?void 0:Ib,children:[(0,Q.jsx)(Fb,{label:`Section`,active:e,onClick:t}),e&&(0,Q.jsxs)(Q.Fragment,{children:[Nb.map(e=>(0,Q.jsx)(Fb,{label:e.toUpperCase(),active:n===e,onClick:()=>{r(e)}},e)),(0,Q.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:{...zb,...a===o?{opacity:.4}:null}}),(0,Q.jsx)(Fb,{label:`Flip`,active:c,onClick:l})]})]})}function Fb({label:e,active:t,onClick:n}){return(0,Q.jsx)(`button`,{type:`button`,onClick:n,"aria-pressed":t,style:{...Lb,...t?Rb:null},children:e})}var Ib={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`},Lb={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`},Rb={color:`#6ee7d7`,background:`rgba(45, 212, 191, 0.16)`,borderColor:`rgba(45, 212, 191, 0.3)`},zb={width:160,accentColor:`#4ACECC`,margin:`0 4px`};function Bb(e){let t=new URLSearchParams(e),n=t.get(`file`);return n?{dir:t.get(`dir`),file:n}:null}function Vb(e){let t=e.lastIndexOf(`.`);return t===-1?``:e.slice(t).toLowerCase()}function Hb({inspect:e=!1}={}){let[t,n]=(0,v.useState)({status:`idle`});return(0,v.useEffect)(()=>{let t=Bb(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-ClIsyYeQ.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:Vb(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 Ub=[`iso`,`front`,`top`,`right`],Wb=new Set;function Gb(e){return Ub.includes(e)}function Kb(e){return Wb.add(e),()=>Wb.delete(e)}function qb(e){for(let t of Wb)t(e)}function Jb(){globalThis.__ready=!0}function Yb(){let e=globalThis;e.__ready=!1,e.__renderView=e=>{Gb(e)&&qb({view:e})},e.__setScene=e=>{e&&Gb(e.view)&&qb(e)}}function Xb({marks:e}){return(0,Q.jsx)(Q.Fragment,{children:e.map((e,t)=>(0,Q.jsx)(ay,{position:[e.pos[0],e.pos[1],e.pos[2]],center:!0,children:(0,Q.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 Zb=new URLSearchParams(window.location.search),Qb=Zb.get(`ui`)!==`0`,$b=Zb.get(`dims`)===`1`;function ex(){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 tx(){let e=Hb({inspect:Qb}),[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`?Sy(e.data):null,[e]);(0,v.useEffect)(()=>Kb(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?[wy(S,w,E)]:void 0,[b,M,S,w,E]);return e.status===`error`?(0,Q.jsxs)(`div`,{style:{color:`#e88`,padding:16,fontFamily:`monospace`},children:[`error: `,e.error]}):e.status===`ready`?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(tb,{data:e.data,view:t,fitSignal:p,autoRotate:l,gridVisible:s,projection:d,onFirstFrame:Jb,children:[(0,Q.jsx)(ky,{data:e.data,viewMode:r,...ie?{clippingPlanes:ie}:{},...Qb?{onFacePick:ee,onFaceHover:j}:{}}),a&&r!==`wireframe`&&e.data.edges.length>0&&(0,Q.jsx)(Ny,{edges:e.data.edges,...ie?{clippingPlanes:ie}:{}}),Qb&&(0,Q.jsx)(Vy,{data:e.data,selectedFaceIds:h?[h.faceId]:[],hoverFaceId:_}),O.length>0&&(0,Q.jsx)(Xb,{marks:O})]}),Qb&&(0,Q.jsx)(wb,{face:h,onClear:()=>{g(null)}}),Qb&&(0,Q.jsx)(Pb,{enabled:b,onToggle:ne,axis:S,onAxisChange:re,position:w,min:N,max:P,onPositionChange:T,flip:E,onToggleFlip:()=>{D(e=>!e)}}),Qb&&(0,Q.jsx)(mb,{dims:Cy(e.data),volume:e.measurements.volume,area:e.measurements.area,triangles:e.data.index.length/3,valid:e.measurements.valid}),!Qb&&$b&&(0,Q.jsx)(mb,{dims:Cy(e.data)}),Qb&&(0,Q.jsx)(ab,{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:ex})]}):(0,Q.jsx)(`div`,{style:{color:`#9aa`,padding:16,fontFamily:`monospace`},children:`loading model…`})}Yb();var nx=document.getElementById(`root`);nx&&(0,y.createRoot)(nx).render((0,Q.jsx)(v.StrictMode,{children:(0,Q.jsx)(tx,{})}));
@@ -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-BEOYO234.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-D25rBEpA.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-BGvDoTnp.js"></script>
17
+ <script type="module" crossorigin src="./assets/index-CCL2dgUK.js"></script>
18
18
  </head>
19
19
  <body>
20
20
  <div id="root"></div>