brepjs-cad 0.69.0 → 0.71.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,77 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.71.0](https://github.com/andymai/brepjs/compare/brepjs-cad-v0.70.0...brepjs-cad-v0.71.0) (2026-07-16)
4
+
5
+
6
+ ### Features
7
+
8
+ * **brepjs-cad:** add airfoils.md feature recipe (swept fans/props/impellers) ([#1566](https://github.com/andymai/brepjs/issues/1566)) ([8c786db](https://github.com/andymai/brepjs/commit/8c786db69ead59edcdc9d0f8525e43324552e4db))
9
+ * **brepjs-cad:** aimed section cut for the design judge (Phase 3) ([#1543](https://github.com/andymai/brepjs/issues/1543)) ([40e5acd](https://github.com/andymai/brepjs/commit/40e5acd54318d768dc5a620403d17d43e358e698))
10
+ * **brepjs-cad:** decomposed, cross-checked design-judge rubric (Phase 1.5) ([#1539](https://github.com/andymai/brepjs/issues/1539)) ([8059b6d](https://github.com/andymai/brepjs/commit/8059b6d701ae5980e6bb11f51695aa102fe2bb43))
11
+ * **brepjs-cad:** deterministic body/interference metrics for the design judge (Phase 1) ([#1531](https://github.com/andymai/brepjs/issues/1531)) ([d296b54](https://github.com/andymai/brepjs/commit/d296b545f2d7084b861683d61b626ace4747a371))
12
+ * **brepjs-cad:** grade judge quality against a reference exemplar ([#1731](https://github.com/andymai/brepjs/issues/1731)) ([9d4aaeb](https://github.com/andymai/brepjs/commit/9d4aaeb8e4830c6be78668854730367194b6a9e5))
13
+ * **brepjs-cad:** kernel-anchored Set-of-Marks for the design judge ([#1545](https://github.com/andymai/brepjs/issues/1545)) ([2b6f5b4](https://github.com/andymai/brepjs/commit/2b6f5b436f2a73c96747cc71f83afc8715765cd0))
14
+ * **brepjs-cad:** reliable internal-bore detection for the design judge (keystone) ([#1542](https://github.com/andymai/brepjs/issues/1542)) ([0d780c3](https://github.com/andymai/brepjs/commit/0d780c3b73c2551dab2f04a6ff31bf9ec8cae2ab))
15
+ * **brepjs-cad:** surface fragmentation in verify --check (the [#1](https://github.com/andymai/brepjs/issues/1) design defect) ([#1560](https://github.com/andymai/brepjs/issues/1560)) ([45a4f6e](https://github.com/andymai/brepjs/commit/45a4f6e268331b7816cd9957fbdab4c0893b2000))
16
+ * **brepjs-cad:** xray internal-reveal shot for the design judge (Phase 2a) ([#1540](https://github.com/andymai/brepjs/issues/1540)) ([eca5bc9](https://github.com/andymai/brepjs/commit/eca5bc9ad20fc7947132d647952245cfe466a7f4))
17
+
18
+
19
+ ### Bug Fixes
20
+
21
+ * **brepjs-cad:** add a triangular-gusset recipe to the implement skill (bracket/enclosure eval) ([#1571](https://github.com/andymai/brepjs/issues/1571)) ([346d042](https://github.com/andymai/brepjs/commit/346d0423fefa3bd163f4075f69bf96d478543bf5))
22
+ * **brepjs-cad:** add the "realize the designed object" bar to the implement skill ([#1563](https://github.com/andymai/brepjs/issues/1563)) ([e150357](https://github.com/andymai/brepjs/commit/e1503570aaf271ebef1e39d48be9c70a5ffe8f03))
23
+ * **brepjs-cad:** bore detector misses full-cylinder through-holes ([#1551](https://github.com/andymai/brepjs/issues/1551)) ([#1586](https://github.com/andymai/brepjs/issues/1586)) ([b6d61eb](https://github.com/andymai/brepjs/commit/b6d61eb6d88e2e4a3aa1c55b78dc2e76315ebc02))
24
+ * **brepjs-cad:** close gear-teeth edge cases found by /eval-skill (ring, worm tip relief, GT2) ([#1548](https://github.com/andymai/brepjs/issues/1548)) ([4bd0494](https://github.com/andymai/brepjs/commit/4bd049401f3affcc3f38e3a31bb9520653a3e89c))
25
+ * **brepjs-cad:** code + hint the degenerate-edge (duplicate-vertex) verify failure ([#1550](https://github.com/andymai/brepjs/issues/1550)) ([502dffc](https://github.com/andymai/brepjs/commit/502dffc4a2ae495ae5c98b0c7966721abe0d5f48))
26
+ * **brepjs-cad:** correct spur-gear example flanks + add root fillet ([#1528](https://github.com/andymai/brepjs/issues/1528)) ([6971c6b](https://github.com/andymai/brepjs/commit/6971c6befa1fea36a8c2f3ee89c4aa20946020c7))
27
+ * **brepjs-cad:** exploded-joint legibility + disjoint-compound caveat (basics eval) ([#1565](https://github.com/andymai/brepjs/issues/1565)) ([9d06121](https://github.com/andymai/brepjs/commit/9d0612111a595e57fcfca6fd191ed9169fc2c062))
28
+ * **brepjs-cad:** handle brepjs/playground refs + summarize body relations in the digest ([#1547](https://github.com/andymai/brepjs/issues/1547)) ([b0acef0](https://github.com/andymai/brepjs/commit/b0acef0ad80cdd61f0d2683f1e6d0ece0cae028e))
29
+ * **brepjs-cad:** heal 6 implement-skill findings from the full-flywheel re-run ([#1568](https://github.com/andymai/brepjs/issues/1568)) ([f63bf3d](https://github.com/andymai/brepjs/commit/f63bf3d5a0aa638d06e11dd7e2c27e84dbf74746))
30
+ * **brepjs-cad:** heal implement + polish skills from clean-room eval ([#1526](https://github.com/andymai/brepjs/issues/1526)) ([0645e16](https://github.com/andymai/brepjs/commit/0645e163e1d8759c95406d0f9526d0aa3b5dd480))
31
+ * **brepjs-cad:** heal implement skill — deep-stack bounds extremes aren't datums ([#1529](https://github.com/andymai/brepjs/issues/1529)) ([5ed366f](https://github.com/andymai/brepjs/commit/5ed366f266b3e6e50ae4b54d5779aa05453e894a))
32
+ * **brepjs-cad:** heal implement skill from the eval flywheel (3 findings) ([#1552](https://github.com/andymai/brepjs/issues/1552)) ([51def82](https://github.com/andymai/brepjs/commit/51def82db4e0600e85f45e4dd828cc9caee58d15))
33
+ * **brepjs-cad:** heal implement skill from the full-corpus eval flywheel (4 findings) ([#1554](https://github.com/andymai/brepjs/issues/1554)) ([3cfc28e](https://github.com/andymai/brepjs/commit/3cfc28ed8b82c46330f1d75f1e98c13fd4d65a06))
34
+ * **brepjs-cad:** make blind-judge reference adaptation render multi-body parts at scale ([#1530](https://github.com/andymai/brepjs/issues/1530)) ([18d4523](https://github.com/andymai/brepjs/commit/18d4523c85e1b22496bb5c0b8fb382a1146429c6))
35
+ * **brepjs-cad:** polish skill — bosses on shells must fuse, or they float (eval finding) ([#1553](https://github.com/andymai/brepjs/issues/1553)) ([07cbf93](https://github.com/andymai/brepjs/commit/07cbf93e47fbf880df53bc2a1cee05bf0d17e2d5))
36
+ * **brepjs-cad:** teach worm-wheel and rack tooth recipes; fix gear-build contradiction ([#1544](https://github.com/andymai/brepjs/issues/1544)) ([b0da85f](https://github.com/andymai/brepjs/commit/b0da85f218d463e0f1ef0ca8760cec54b4814b02))
37
+ * **release:** unbreak Vercel — repin brepjs-cad to brepjs >=18.0.0 ([#1711](https://github.com/andymai/brepjs/issues/1711)) ([78c780a](https://github.com/andymai/brepjs/commit/78c780a3ab2fcc78f26b32029df72795582e145c))
38
+
39
+ ## [0.70.0](https://github.com/andymai/brepjs/compare/brepjs-cad-v0.69.1...brepjs-cad-v0.70.0) (2026-07-16)
40
+
41
+
42
+ ### Features
43
+
44
+ * **brepjs-cad:** add airfoils.md feature recipe (swept fans/props/impellers) ([#1566](https://github.com/andymai/brepjs/issues/1566)) ([8c786db](https://github.com/andymai/brepjs/commit/8c786db69ead59edcdc9d0f8525e43324552e4db))
45
+ * **brepjs-cad:** aimed section cut for the design judge (Phase 3) ([#1543](https://github.com/andymai/brepjs/issues/1543)) ([40e5acd](https://github.com/andymai/brepjs/commit/40e5acd54318d768dc5a620403d17d43e358e698))
46
+ * **brepjs-cad:** decomposed, cross-checked design-judge rubric (Phase 1.5) ([#1539](https://github.com/andymai/brepjs/issues/1539)) ([8059b6d](https://github.com/andymai/brepjs/commit/8059b6d701ae5980e6bb11f51695aa102fe2bb43))
47
+ * **brepjs-cad:** deterministic body/interference metrics for the design judge (Phase 1) ([#1531](https://github.com/andymai/brepjs/issues/1531)) ([d296b54](https://github.com/andymai/brepjs/commit/d296b545f2d7084b861683d61b626ace4747a371))
48
+ * **brepjs-cad:** grade judge quality against a reference exemplar ([#1731](https://github.com/andymai/brepjs/issues/1731)) ([9d4aaeb](https://github.com/andymai/brepjs/commit/9d4aaeb8e4830c6be78668854730367194b6a9e5))
49
+ * **brepjs-cad:** kernel-anchored Set-of-Marks for the design judge ([#1545](https://github.com/andymai/brepjs/issues/1545)) ([2b6f5b4](https://github.com/andymai/brepjs/commit/2b6f5b436f2a73c96747cc71f83afc8715765cd0))
50
+ * **brepjs-cad:** reliable internal-bore detection for the design judge (keystone) ([#1542](https://github.com/andymai/brepjs/issues/1542)) ([0d780c3](https://github.com/andymai/brepjs/commit/0d780c3b73c2551dab2f04a6ff31bf9ec8cae2ab))
51
+ * **brepjs-cad:** surface fragmentation in verify --check (the [#1](https://github.com/andymai/brepjs/issues/1) design defect) ([#1560](https://github.com/andymai/brepjs/issues/1560)) ([45a4f6e](https://github.com/andymai/brepjs/commit/45a4f6e268331b7816cd9957fbdab4c0893b2000))
52
+ * **brepjs-cad:** xray internal-reveal shot for the design judge (Phase 2a) ([#1540](https://github.com/andymai/brepjs/issues/1540)) ([eca5bc9](https://github.com/andymai/brepjs/commit/eca5bc9ad20fc7947132d647952245cfe466a7f4))
53
+
54
+
55
+ ### Bug Fixes
56
+
57
+ * **brepjs-cad:** add a triangular-gusset recipe to the implement skill (bracket/enclosure eval) ([#1571](https://github.com/andymai/brepjs/issues/1571)) ([346d042](https://github.com/andymai/brepjs/commit/346d0423fefa3bd163f4075f69bf96d478543bf5))
58
+ * **brepjs-cad:** add the "realize the designed object" bar to the implement skill ([#1563](https://github.com/andymai/brepjs/issues/1563)) ([e150357](https://github.com/andymai/brepjs/commit/e1503570aaf271ebef1e39d48be9c70a5ffe8f03))
59
+ * **brepjs-cad:** bore detector misses full-cylinder through-holes ([#1551](https://github.com/andymai/brepjs/issues/1551)) ([#1586](https://github.com/andymai/brepjs/issues/1586)) ([b6d61eb](https://github.com/andymai/brepjs/commit/b6d61eb6d88e2e4a3aa1c55b78dc2e76315ebc02))
60
+ * **brepjs-cad:** close gear-teeth edge cases found by /eval-skill (ring, worm tip relief, GT2) ([#1548](https://github.com/andymai/brepjs/issues/1548)) ([4bd0494](https://github.com/andymai/brepjs/commit/4bd049401f3affcc3f38e3a31bb9520653a3e89c))
61
+ * **brepjs-cad:** code + hint the degenerate-edge (duplicate-vertex) verify failure ([#1550](https://github.com/andymai/brepjs/issues/1550)) ([502dffc](https://github.com/andymai/brepjs/commit/502dffc4a2ae495ae5c98b0c7966721abe0d5f48))
62
+ * **brepjs-cad:** correct spur-gear example flanks + add root fillet ([#1528](https://github.com/andymai/brepjs/issues/1528)) ([6971c6b](https://github.com/andymai/brepjs/commit/6971c6befa1fea36a8c2f3ee89c4aa20946020c7))
63
+ * **brepjs-cad:** exploded-joint legibility + disjoint-compound caveat (basics eval) ([#1565](https://github.com/andymai/brepjs/issues/1565)) ([9d06121](https://github.com/andymai/brepjs/commit/9d0612111a595e57fcfca6fd191ed9169fc2c062))
64
+ * **brepjs-cad:** handle brepjs/playground refs + summarize body relations in the digest ([#1547](https://github.com/andymai/brepjs/issues/1547)) ([b0acef0](https://github.com/andymai/brepjs/commit/b0acef0ad80cdd61f0d2683f1e6d0ece0cae028e))
65
+ * **brepjs-cad:** heal 6 implement-skill findings from the full-flywheel re-run ([#1568](https://github.com/andymai/brepjs/issues/1568)) ([f63bf3d](https://github.com/andymai/brepjs/commit/f63bf3d5a0aa638d06e11dd7e2c27e84dbf74746))
66
+ * **brepjs-cad:** heal implement + polish skills from clean-room eval ([#1526](https://github.com/andymai/brepjs/issues/1526)) ([0645e16](https://github.com/andymai/brepjs/commit/0645e163e1d8759c95406d0f9526d0aa3b5dd480))
67
+ * **brepjs-cad:** heal implement skill — deep-stack bounds extremes aren't datums ([#1529](https://github.com/andymai/brepjs/issues/1529)) ([5ed366f](https://github.com/andymai/brepjs/commit/5ed366f266b3e6e50ae4b54d5779aa05453e894a))
68
+ * **brepjs-cad:** heal implement skill from the eval flywheel (3 findings) ([#1552](https://github.com/andymai/brepjs/issues/1552)) ([51def82](https://github.com/andymai/brepjs/commit/51def82db4e0600e85f45e4dd828cc9caee58d15))
69
+ * **brepjs-cad:** heal implement skill from the full-corpus eval flywheel (4 findings) ([#1554](https://github.com/andymai/brepjs/issues/1554)) ([3cfc28e](https://github.com/andymai/brepjs/commit/3cfc28ed8b82c46330f1d75f1e98c13fd4d65a06))
70
+ * **brepjs-cad:** make blind-judge reference adaptation render multi-body parts at scale ([#1530](https://github.com/andymai/brepjs/issues/1530)) ([18d4523](https://github.com/andymai/brepjs/commit/18d4523c85e1b22496bb5c0b8fb382a1146429c6))
71
+ * **brepjs-cad:** polish skill — bosses on shells must fuse, or they float (eval finding) ([#1553](https://github.com/andymai/brepjs/issues/1553)) ([07cbf93](https://github.com/andymai/brepjs/commit/07cbf93e47fbf880df53bc2a1cee05bf0d17e2d5))
72
+ * **brepjs-cad:** teach worm-wheel and rack tooth recipes; fix gear-build contradiction ([#1544](https://github.com/andymai/brepjs/issues/1544)) ([b0da85f](https://github.com/andymai/brepjs/commit/b0da85f218d463e0f1ef0ca8760cec54b4814b02))
73
+ * **release:** unbreak Vercel — repin brepjs-cad to brepjs >=18.0.0 ([#1711](https://github.com/andymai/brepjs/issues/1711)) ([78c780a](https://github.com/andymai/brepjs/commit/78c780a3ab2fcc78f26b32029df72795582e145c))
74
+
3
75
  ## [0.69.0](https://github.com/andymai/brepjs/compare/brepjs-cad-v0.68.0...brepjs-cad-v0.69.0) (2026-07-16)
4
76
 
5
77
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "brepjs-cad",
3
- "version": "0.69.0",
3
+ "version": "0.71.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",
@@ -57,4 +57,4 @@ ${u.join(`
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
59
  </Relationships>`),c(`3D/3dmodel.model`,s)])}function OY(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 kY(e){return[e[0],-e[1]]}function AY(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(ZI(kY([t.cx,t.cy]),kY([a,o]))),t.cx=a,t.cy=o,i+=2}}function jY(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(ZI(kY([t.cx,t.cy]),kY([a,o]))),t.cx=a,t.cy=o,i+=2}}function MY(e,t,n,r){for(let i of e){let e=n?t.cx+i:i;r.push(ZI(kY([t.cx,t.cy]),kY([e,t.cy]))),t.cx=e}}function NY(e,t,n,r){for(let i of e){let e=n?t.cy+i:i;r.push(ZI(kY([t.cx,t.cy]),kY([t.cx,e]))),t.cy=e}}function PY(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(rL(kY([t.cx,t.cy]),[kY([s,c]),kY([l,u])],kY([d,f]))),t.prevControlX=l,t.prevControlY=u,t.cx=d,t.cy=f,i+=6}}function FY(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(rL(kY([t.cx,t.cy]),[kY([c,l]),kY([u,d])],kY([f,p]))),t.prevControlX=u,t.prevControlY=d,t.cx=f,t.cy=p,t.lastCmd=`S`,i+=4}}function IY(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(rL(kY([t.cx,t.cy]),[kY([s,c])],kY([l,u]))),t.prevControlX=s,t.prevControlY=c,t.cx=l,t.cy=u,i+=4}}function LY(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(rL(kY([t.cx,t.cy]),[kY([c,l])],kY([u,d]))),t.prevControlX=c,t.prevControlY=l,t.cx=u,t.cy=d,t.lastCmd=`T`,i+=2}}function RY(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[QI(kY([e,t]),kY(c),kY([e,s])),QI(kY([e,s]),kY(l),kY([e,t]))]}catch{return[]}}function zY(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[QI(kY([e,t]),kY([b,x]),kY([n,r]))]}catch{return[ZI(kY([e,t]),kY([n,r]))]}}function BY(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(ZI(kY([t.cx,t.cy]),kY([d,f])));else{let e=d-t.cx,n=f-t.cy;Math.sqrt(e*e+n*n)<1e-10?r.push(...RY(t.cx,t.cy,s,c,u)):r.push(...zY(t.cx,t.cy,d,f,s,c,l,u))}t.cx=d,t.cy=f,i+=7}}function VY(e,t){(Math.abs(e.cx-e.sx)>1e-10||Math.abs(e.cy-e.sy)>1e-10)&&t.push(ZI(kY([e.cx,e.cy]),kY([e.sx,e.sy]))),e.cx=e.sx,e.cy=e.sy}function HY(e){let t=OY(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`:AY(i,r,t,n);break;case`L`:jY(i,r,t,n);break;case`H`:MY(i,r,t,n);break;case`V`:NY(i,r,t,n);break;case`C`:PY(i,r,t,n);break;case`S`:FY(i,r,t,n);break;case`Q`:IY(i,r,t,n);break;case`T`:LY(i,r,t,n);break;case`A`:BY(i,r,t,n);break;case`Z`:VY(r,n);break}a!==`S`&&a!==`T`&&(r.lastCmd=a)}return n}function UY(e){try{let t=HY(e);return t.length===0?k(yo(`SVG_EMPTY_PATH`,`SVG path produced no curves`)):O(new xL(t))}catch(e){return k(yo(`SVG_PARSE_FAILED`,`Failed to parse SVG path: ${e instanceof Error?e.message:String(e)}`))}}function WY(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=UY(l);u.ok&&n.push(u.value)}return n.length===0?k(yo(`SVG_NO_PATHS`,`No <path> elements found in SVG`)):O(n)}catch(e){return k(yo(`SVG_IMPORT_FAILED`,`Failed to import SVG: ${e instanceof Error?e.message:String(e)}`))}}function GY(e,t){try{let n=U(),r=e.map(e=>({shape:e.shape.wrapped,name:e.name,color:e.color?[...e.color]:void 0}));return O(n.exportSTEPConfigured(r,t))}catch(e){return k(yo(N.STEP_EXPORT_CONFIGURED_FAILED,`Configured STEP export failed`,e))}}async function KY(e){try{let t=await e.arrayBuffer(),n=U().importSTEP(t);return n.length===0?k(yo(`STEP_IMPORT_FAILED`,`STEP file contains no valid geometry`)):O(jE(n[0]))}catch(e){return k(yo(`STEP_IMPORT_FAILED`,`Failed to load STEP file`,e))}}async function qY(e){try{let t=await e.arrayBuffer(),n=U().importSTL(t);return n.IsNull()?k(yo(`STL_IMPORT_FAILED`,`Failed to create solid from STL mesh`)):O(jE(n))}catch(e){return k(yo(`STL_IMPORT_FAILED`,`Failed to load STL file`,e))}}async function JY(e){try{let t=await e.arrayBuffer(),n=U().importIGES(t);return n.length===0?k(yo(`IGES_IMPORT_FAILED`,`IGES file contains no valid geometry`)):O(jE(n[0]))}catch(e){return k(yo(`IGES_IMPORT_FAILED`,`Failed to load IGES file`,e))}}function YY(e,t,n={}){let r=$K(e,t);return new JK((typeof n.plane==`string`||n.plane===void 0?r.sketchOnPlane(n.plane,n.origin):r.sketchOnPlane(n.plane)).map(e=>Array.isArray(e)?new jK(e.map(MK)):MK(e)))}function XY(e,t){let n=t?.fontSize??1,r=ZK(t?.fontFamily);if(!r)return k(F(N.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 O({width:i,height:o-s,ascender:o,descender:s})}function ZY(e){let t=e?.fontSize??1,n=ZK(e?.fontFamily);if(!n)return k(F(N.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 O({ascender:i,descender:a,unitsPerEm:n.unitsPerEm,lineHeight:i-a+o})}function QY(e){return e.type===`init`}function $Y(e){return e.type===`operation`}function eX(e){return e.type===`dispose`}function tX(e){return e.type===`batch`}function nX(e){return e.success}function rX(e){return!e.success}function iX(){return{pending:new Map}}function aX(e,t){let n=new Map(e.pending);return n.set(t.id,t),{pending:n}}function oX(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 sX(e){return e.pending.size}function cX(e){return e.pending.size===0}function lX(e,t){for(let n of e.pending.values())n.reject(t);return{pending:new Map}}function uX(e,t){let n=t.data,r=e.get(n.id);if(r)if(e.delete(n.id),nX(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 dX(e){let{worker:t,wasmUrl:n}=e,r=new Map,i=!1;function a(){return crypto.randomUUID()}function o(e){uX(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 fX(){return{operations:new Map}}function pX(e,t,n){let r=new Map(e.operations);return r.set(t,n),{operations:r}}function mX(e){return e instanceof Error?e.message:String(e)}function hX(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:mX(e)}}}function gX(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 _X(e,t){let n=globalThis;n.onmessage=async r=>{let i=r.data;if(QY(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:mX(e)};n.postMessage(t)}return}if($Y(i)){let t=hX(e,i.operation,i.shapesBrep,i.parameters);n.postMessage(gX(i.id,t));return}if(tX(i)){let t=i.operations.map(t=>hX(e,t.operation,t.shapesBrep,t.params)),r={id:i.id,success:!0,resultData:t};n.postMessage(r);return}if(eX(i)){let e={id:i.id,success:!0};n.postMessage(e),n.close?.()}}}function vX(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:dX({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 yX=Object.defineProperty,bX=(e,t)=>{let n={};for(var r in e)yX(n,r,{get:e[r],enumerable:!0});return t||yX(n,Symbol.toStringTag,{value:`Module`}),n},xX=1,SX=2;function CX(e,t){t===`commonFace`&&e.SetGlue(xX),t===`sameFace`&&e.SetGlue(SX)}function wX(e){return typeof e==`number`}function TX(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 EX(e){return typeof e==`number`?!0:Array.isArray(e)&&e.length===2?e.every(wX):!1}function DX(e,t){let n=n=>{let r=e.findAll(n);if(r.length===0)return[];let i=0,a=AD(hD(oA(r)),t);for(let e=1;e<r.length;e++){let n=AD(hD(aA(r,e)),t);n<a&&(a=n,i=e)}return[aA(r,i)]},r=e=>{let t=n(e);return t.length===0?k(bo(`FINDER_NOT_UNIQUE`,`Finder expected a unique match but found 0 element(s)`)):O(oA(t))};return{...e,findAll:n,findUnique:r}}function OX(e){return TI(`vertex`,e,OX,(t,n)=>({nearestTo:t=>DX(OX(e),t),atPosition:(e,t=1e-4)=>n(n=>AD(hD(n),e)<t),withinBox:(e,t)=>n(n=>{let r=hD(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=hD(n);return Math.abs(AD(i,t)-e)<r})}))}function kX(){return OX([])}var AX=new Map,jX=null,MX=null;function NX(e,t){AX.set(e,t),jX||=e,e===jX&&(MX=t)}function PX(e){if(!e&&MX)return MX;let t=e??jX;if(!t)throw Error(`brepjs voxel engine not initialized. Call initVoxel() (or registerVoxel()) before using voxel operations.`);let n=AX.get(t);if(!n)throw Error(`brepjs: voxel engine '${t}' is not registered.`);return n}function FX(){return jX}function IX(e,t=`voxel`){NX(t,e),jX=t,MX=e}function LX(e){if(e.vertices.length%3!=0)return F(`VOXEL_INVALID_MESH`,`mesh.vertices length must be a multiple of 3 (flat xyz).`);if(e.triangles.length%3!=0)return F(`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 F(`VOXEL_INVALID_TRIANGLE_INDEX`,`triangle index ${r} at position ${n} is out of range for ${t} vertices.`)}return null}function RX(e,t){return LX(e)||(t.length%3==0?null:F(`VOXEL_INVALID_QUERIES`,`queries length must be a multiple of 3 (flat xyz).`))}function zX(e){try{return O(PX(e))}catch(e){return k(_o(`VOXEL_NOT_INITIALIZED`,e instanceof Error?e.message:`voxel engine not initialized`,e))}}function BX(e,t,n){let r=RX(e,t);if(r)return k(r);let i=zX(n);return A(i)?i:O(i.value.winding_numbers(e.vertices,e.triangles,t))}function VX(e,t,n){let r=RX(e,t);if(r)return k(r);let i=zX(n);if(A(i))return i;let a=i.value.points_inside(e.vertices,e.triangles,t);return O(Array.from(a,e=>e===1))}var HX=48,UX=2;function WX(e,t,n){let r=LX(e);if(r)return k(r);if(e.vertices.length===0||e.triangles.length===0)return k(F(`VOXEL_EMPTY_MESH`,`repairMesh requires a non-empty triangle mesh.`));let i=t?.resolution??HX,a=t?.padding??UX;if(!Number.isInteger(i)||i<1)return k(F(`VOXEL_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`));if(!Number.isInteger(a)||a<1)return k(F(`VOXEL_INVALID_PADDING`,`padding must be an integer >= 1.`));let o=zX(n);if(A(o))return o;try{try{var s=OT();let t=s.u(o.value.repair_mesh(e.vertices,e.triangles,i,a)),n=t.positions.length/3;return O({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 k(vo(`VOXEL_REPAIR_FAILED`,e instanceof Error?e.message:`voxel repair failed (grid too large?).`,e))}}var GX=.001;function KX(e,t=GX){try{let n=Wk(e,{tolerance:t});return n.vertices.length===0||n.triangles.length===0?k(vo(`VOXEL_SHAPE_MESH_EMPTY`,`shape tessellated to an empty triangle mesh.`)):O({vertices:n.vertices,triangles:n.triangles})}catch(e){return k(vo(`VOXEL_SHAPE_MESH_FAILED`,e instanceof Error?e.message:`failed to mesh shape for voxel op.`,e))}}var qX=48,JX=2,YX={union:0,intersection:1,difference:2};function XX(e){let t=e?.resolution??qX,n=e?.padding??JX;return!Number.isInteger(t)||t<1?k(F(`VOXEL_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(n)||n<1?k(F(`VOXEL_INVALID_PADDING`,`padding must be an integer >= 1.`)):O({resolution:t,padding:n})}function ZX(e){if(e.positions.length===0||e.indices.length===0)return k(vo(`VOXEL_DEGENERATE_RESULT`,`the voxel operation produced an empty mesh (over-shrunk offset or disjoint operands?).`));let t=e.positions.length/3;return O({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 QX(e,t,n,r){let i=LX(e);if(i)return k(i);if(e.vertices.length===0||e.triangles.length===0)return k(F(`VOXEL_EMPTY_MESH`,`offsetMesh requires a non-empty triangle mesh.`));if(!Number.isFinite(t))return k(F(`VOXEL_INVALID_DISTANCE`,`distance must be a finite number.`));let a=XX(n);if(A(a))return a;let o=zX(r);if(A(o))return o;try{try{var s=OT();return ZX(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 k(vo(`VOXEL_OFFSET_FAILED`,e instanceof Error?e.message:`voxel offset failed (grid too large?).`,e))}}function $X(e,t,n,r){let i=LX(e);if(i)return k(i);if(e.vertices.length===0||e.triangles.length===0)return k(F(`VOXEL_EMPTY_MESH`,`shellMesh requires a non-empty triangle mesh.`));if(!Number.isFinite(t)||t<=0)return k(F(`VOXEL_INVALID_THICKNESS`,`thickness must be a finite number > 0.`));let a=XX(n);if(A(a))return a;let o=zX(r);if(A(o))return o;try{try{var s=OT();return ZX(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 k(vo(`VOXEL_SHELL_FAILED`,e instanceof Error?e.message:`voxel shell failed (grid too large?).`,e))}}function eZ(e,t,n,r,i){let a=LX(e);if(a)return k(a);let o=LX(t);if(o)return k(o);if(e.vertices.length===0||e.triangles.length===0)return k(F(`VOXEL_EMPTY_MESH`,`voxelBoolean requires a non-empty mesh for operand A.`));if(t.vertices.length===0||t.triangles.length===0)return k(F(`VOXEL_EMPTY_MESH`,`voxelBoolean requires a non-empty mesh for operand B.`));let s=YX[n],c=XX(r);if(A(c))return c;let l=zX(i);if(A(l))return l;try{try{var u=OT();return ZX(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 k(vo(`VOXEL_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel boolean failed (grid too large?).`,e))}}function tZ(e,t,n,r){let i=KX(e);return A(i)?i:QX(i.value,t,n,r)}function nZ(e,t,n,r){let i=KX(e);return A(i)?i:$X(i.value,t,n,r)}function rZ(e,t,n,r,i){let a=KX(e);if(A(a))return a;let o=KX(t);return A(o)?o:eZ(a.value,o.value,n,r,i)}var iZ=48,aZ=2,oZ={union:0,intersection:1,difference:2};function sZ(e){let t=e?.resolution??iZ,n=e?.padding??aZ;return!Number.isInteger(t)||t<1?k(F(`VOXEL_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(n)||n<1?k(F(`VOXEL_INVALID_PADDING`,`padding must be an integer >= 1.`)):O({resolution:t,padding:n})}function cZ(e){try{var t=OT();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 k(vo(`VOXEL_DEGENERATE_RESULT`,`the voxel field contoured to an empty mesh (over-shrunk offset or disjoint operands?).`));let o=r.length/3;return O({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 lZ(e){return{raw:e,delete(){e.free()}}}function uZ(e){return dZ(e)}function dZ(e){let t=zT(lZ(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,oZ[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=cZ(this.value);if(A(e))throw Error(e.error.message);return e.value}};return n}function fZ(e){return!e.disposed}function pZ(){return k(F(`VOXEL_FIELD_DISPOSED`,`the voxel field handle has been disposed.`))}function mZ(e,t,n){let r=LX(e);if(r)return k(r);if(e.vertices.length===0||e.triangles.length===0)return k(F(`VOXEL_EMPTY_MESH`,`voxelField requires a non-empty triangle mesh.`));let i=sZ(t);if(A(i))return i;let a=zX(n);if(A(a))return a;try{return O(dZ(new a.value.VoxelField(e.vertices,e.triangles,i.value.resolution,i.value.padding)))}catch(e){return k(vo(`VOXEL_FIELD_VOXELIZE_FAILED`,e instanceof Error?e.message:`voxel field voxelization failed (grid too large or non-dense?).`,e))}}function hZ(e,t,n,r,i){let a=LX(e);if(a)return k(a);let o=LX(t);if(o)return k(o);if(e.vertices.length===0||e.triangles.length===0)return k(F(`VOXEL_EMPTY_MESH`,`voxelBooleanField requires a non-empty mesh for operand A.`));if(t.vertices.length===0||t.triangles.length===0)return k(F(`VOXEL_EMPTY_MESH`,`voxelBooleanField requires a non-empty mesh for operand B.`));let s=sZ(r);if(A(s))return s;let c=zX(i);if(A(c))return c;try{return O(dZ(c.value.VoxelField.boolean_of(e.vertices,e.triangles,t.vertices,t.triangles,oZ[n],s.value.resolution,s.value.padding)))}catch(e){return k(vo(`VOXEL_FIELD_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel field boolean failed (grid too large or non-dense?).`,e))}}function gZ(e,t,n){if(!fZ(e)||!fZ(t))return pZ();try{return e.value.boolean(t.value,oZ[n]),O(e)}catch(e){return k(vo(`VOXEL_FIELD_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel field boolean failed (dim mismatch?).`,e))}}function _Z(e,t){if(!fZ(e))return pZ();if(!Number.isFinite(t))return k(F(`VOXEL_INVALID_DISTANCE`,`distance must be a finite number.`));try{return e.value.offset(t),O(e)}catch(e){return k(vo(`VOXEL_FIELD_OFFSET_FAILED`,e instanceof Error?e.message:`voxel field offset failed.`,e))}}function vZ(e,t){if(!fZ(e))return pZ();if(!Number.isFinite(t)||t<=0)return k(F(`VOXEL_INVALID_THICKNESS`,`thickness must be a finite number > 0.`));try{return e.value.shell(t),O(e)}catch(e){return k(vo(`VOXEL_FIELD_SHELL_FAILED`,e instanceof Error?e.message:`voxel field shell failed.`,e))}}function yZ(e){if(!fZ(e))return pZ();try{return e.value.reinit(),O(e)}catch(e){return k(vo(`VOXEL_FIELD_REINIT_FAILED`,e instanceof Error?e.message:`voxel field reinit failed.`,e))}}function bZ(e){if(!fZ(e))return pZ();try{return cZ(e.value)}catch(e){return k(vo(`VOXEL_FIELD_CONTOUR_FAILED`,e instanceof Error?e.message:`voxel field contour failed.`,e))}}function xZ(e,t,n){let r=KX(e);return A(r)?r:mZ(r.value,t,n)}function SZ(e,t,n,r,i){let a=KX(e);if(A(a))return a;let o=KX(t);return A(o)?o:hZ(a.value,o.value,n,r,i)}var CZ=48,wZ=2;function TZ(e){try{return O(PX(e))}catch(e){return k(_o(`VOXEL_NOT_INITIALIZED`,e instanceof Error?e.message:`voxel engine not initialized`,e))}}function EZ(e){let t=e?.resolution??CZ,n=e?.padding??wZ;return!Number.isInteger(t)||t<1?k(F(`SDF_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(n)||n<1?k(F(`SDF_INVALID_PADDING`,`padding must be an integer >= 1.`)):O({resolution:t,padding:n})}function DZ(e){return{raw:e,delete(){e.free()}}}var OZ={offsetField(e){return kZ(this.value.offset_field(e.value))},roundField(e){return kZ(this.value.round_field(e.value))},shellField(e){return kZ(this.value.shell_field(e.value))},smoothUnionField(e,t){return kZ(this.value.smooth_union_field(e.value,t.value))}};function kZ(e){let t=zT(DZ(e));return{get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()},union(e){return kZ(this.value.union(e.value))},intersection(e){return kZ(this.value.intersection(e.value))},difference(e){return kZ(this.value.difference(e.value))},smoothUnion(e,t){return kZ(this.value.smooth_union(e.value,t))},smoothIntersection(e,t){return kZ(this.value.smooth_intersection(e.value,t))},smoothDifference(e,t){return kZ(this.value.smooth_difference(e.value,t))},offset(e){return kZ(this.value.offset(e))},round(e){return kZ(this.value.round(e))},shell(e){return kZ(this.value.shell(e))},onion(e){return kZ(this.value.onion(e))},...OZ,translate(e,t,n){return kZ(this.value.translate(e,t,n))},rotate(e,t,n,r){return kZ(this.value.rotate(e,t,n,r))},scale(e){return kZ(this.value.scale(e))},rasterize(e){return AZ(this.value,e)},rasterizeIn(e,t){return jZ(this.value,e,t)}}}function AZ(e,t){let n=EZ(t);if(A(n))return n;try{return O(uZ(e.rasterize(n.value.resolution,n.value.padding)))}catch(e){return MZ(e)}}function jZ(e,t,n){let r=EZ(n);if(A(r))return r;let i=NZ(t);if(i)return k(i);try{return O(uZ(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 MZ(e)}}function MZ(e){return k(vo(`SDF_RASTERIZE_FAILED`,e instanceof Error?e.message:`SDF rasterization failed (grid too large?).`,e))}function NZ(e){if(![...e.min,...e.max].every(e=>Number.isFinite(e)))return F(`SDF_INVALID_BOUNDS`,`bounds must be finite numbers.`);for(let t=0;t<3;t++)if(e.max[t]<=e.min[t])return F(`SDF_INVALID_BOUNDS`,`bounds max must exceed min on every axis.`);return null}function PZ(e,t){let n=TZ(t);if(A(n))return n;try{return O(kZ(e(n.value)))}catch(e){return k(vo(`SDF_BUILD_FAILED`,e instanceof Error?e.message:`SDF primitive construction failed.`,e))}}function FZ(e,t){return PZ(t=>t.Sdf.sphere(e),t)}function IZ(e,t,n,r){return PZ(r=>r.Sdf.box_(e,t,n),r)}function LZ(e,t,n,r,i){return PZ(i=>i.Sdf.rounded_box(e,t,n,r),i)}function RZ(e,t,n){return PZ(n=>n.Sdf.cylinder(e,t),n)}function zZ(e,t,n){return PZ(n=>n.Sdf.cone(e,t),n)}function BZ(e,t,n,r){return PZ(r=>r.Sdf.capsule(e[0],e[1],e[2],t[0],t[1],t[2],n),r)}function VZ(e,t,n){return PZ(n=>n.Sdf.torus(e,t),n)}function HZ(e,t,n){return PZ(n=>n.Sdf.plane(e[0],e[1],e[2],t),n)}function UZ(e){if(e.length<2)return k(F(`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 k(F(`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 O(t)}function WZ(e,t,n,r){let i=UZ(e);if(A(i))return i;let a=n?.closed??!1;return PZ(e=>e.Sdf.sweep(i.value,t.value,a),r)}var GZ={gyroid:0,schwarzP:1,diamond:2};function KZ(e,t,n,r){let i=GZ[e];return i===void 0?k(F(`SDF_INVALID_LATTICE_KIND`,`unknown lattice kind: ${e}`)):PZ(e=>e.Sdf.lattice(i,t.value,n.value),r)}function qZ(e,t,n){return PZ(n=>n.Sdf.strut_lattice(e,t.value),n)}function JZ(e){return{raw:e,delete(){e.free()}}}function YZ(e){let t=zT(JZ(e));return{get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()}}}function XZ(e,t){let n=TZ(t);if(A(n))return n;try{return O(YZ(e(n.value)))}catch(e){return k(vo(`SDF_FIELD_BUILD_FAILED`,e instanceof Error?e.message:`scalar field construction failed.`,e))}}function ZZ(e,t){return XZ(t=>t.ScalarField.constant(e),t)}function QZ(e,t,n,r,i,a){return XZ(a=>a.ScalarField.axial_ramp(e,t,n,r,i),a)}function $Z(e,t,n,r,i,a,o){return XZ(o=>o.ScalarField.radial_ramp(e[0],e[1],e[2],t,n,r,i,a),o)}function eQ(e,t,n,r){return XZ(r=>r.ScalarField.from_sdf(e.value,t,n),r)}function tQ(e,t,n,r){return XZ(r=>r.ScalarField.clamp(e.value,t,n),r)}var nQ={gyroid:0,schwarzP:1,diamond:2},rQ=48,iQ=2;function aQ(e){let t=nQ[e.type];if(t===void 0)return k(F(`LATTICE_INVALID_TYPE`,`lattice type must be one of gyroid, schwarzP, diamond (got '${e.type}').`));if(!(e.period>0))return k(F(`LATTICE_INVALID_PERIOD`,`period must be > 0.`));if(!(e.thickness>0))return k(F(`LATTICE_INVALID_THICKNESS`,`thickness must be > 0.`));let n=e.resolution??rQ,r=e.padding??iQ;return!Number.isInteger(n)||n<1?k(F(`LATTICE_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(r)||r<1?k(F(`LATTICE_INVALID_PADDING`,`padding must be an integer >= 1.`)):O({tag:t,period:e.period,thickness:e.thickness,resolution:n,padding:r})}function oQ(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 sQ(e,t,n){let r=LX(e);if(r)return k(r);if(e.vertices.length===0||e.triangles.length===0)return k(F(`LATTICE_EMPTY_MESH`,`latticeInfill requires a non-empty triangle mesh.`));let i=aQ(t);if(A(i))return i;let a=zX(n);if(A(a))return a;let{tag:o,period:s,thickness:c,resolution:l,padding:u}=i.value;try{try{var d=OT();return O(oQ(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 k(vo(`LATTICE_INFILL_FAILED`,e instanceof Error?e.message:`lattice infill failed (grid too large?).`,e))}}function cQ(e,t,n){let r=KX(e);return A(r)?r:sQ(r.value,t,n)}function lQ(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 k(F(`LATTICE_INVALID_BOUNDS`,`bounds.min must be strictly less than bounds.max on every axis (axis ${t}).`))}let r=aQ(t);if(A(r))return r;let i=zX(n);if(A(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=OT();return O(oQ(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 k(vo(`TPMS_LATTICE_FAILED`,e instanceof Error?e.message:`tpms lattice failed (grid too large?).`,e))}}function uQ(e){return U().createVector3d(e[0],e[1],e[2])}function dQ(e){return U().createPoint3d(e[0],e[1],e[2])}function fQ(e){return U().createDirection3d(e[0],e[1],e[2])}function pQ(e){return[e.X(),e.Y(),e.Z()]}function mQ(e){return[e.X(),e.Y(),e.Z()]}function hQ(e){return[e.X(),e.Y(),e.Z()]}function gQ(e,t){let n=uQ(e);try{return t(n)}finally{n.delete()}}function _Q(e,t){let n=dQ(e);try{return t(n)}finally{n.delete()}}function vQ(e,t){let n=fQ(e);try{return t(n)}finally{n.delete()}}var yQ=.299,bQ=.587,xQ=.114;function SQ(e,t={}){if(e.length<2)return k(F(N.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 k(F(N.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 k(F(N.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 CQ(e,n,r,s,c,o)}catch{}try{return wQ(e,n,r,s,c,o)}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.SURFACE_FAILED,`surfaceFromGrid failed: ${t}`,e))}}function CQ(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=W(U().bsplineSurface(o,t,n));return TE(s)?O(s):(FE(s),k(P(N.SURFACE_FAILED,`B-spline surface did not produce a face`)))}function wQ(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=W(U().triangulatedSurface(o,t,n));return TE(s)||EE(s)?O(s):(FE(s),k(P(N.SURFACE_FAILED,`surfaceFromGrid: unexpected shape type from sewing`)))}async function TQ(e,t={}){let n=t.channel??`luminance`,r=Math.max(1,Math.round(t.downsample??1));if(typeof createImageBitmap!=`function`)return k(yo(N.SURFACE_FAILED,`surfaceFromImage requires createImageBitmap (not available in this environment)`));let i;try{i=await createImageBitmap(e)}catch(e){return k(yo(N.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(),k(F(N.SURFACE_GRID_TOO_SMALL,`surfaceFromImage: image too small (${a}x${o}), need at least 2x2`));if(typeof OffscreenCanvas!=`function`)return i.close(),k(yo(N.SURFACE_FAILED,`surfaceFromImage requires OffscreenCanvas (not available in this environment)`));let s=new OffscreenCanvas(a,o).getContext(`2d`);if(!s)return i.close(),k(yo(N.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=(yQ*o+bQ*s+xQ*l)/255;break}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),SQ(l,u)}function EQ(e,t){return U().isNull(e.wrapped)?k(F(N.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function DQ(e,t={}){if(e.length===0)return k(F(N.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=EQ(n,`hull: shapes[${t}]`);if(A(e))return e}let n=t.tolerance??.1;try{let t=U(),r=e.map(e=>e.wrapped),i=W(t.hull(r,n));return DE(i)?O(i):(FE(i),k(P(N.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`)?k(P(N.HULL_DEGENERATE,`Hull degenerate: ${t}`,e)):k(P(N.HULL_FAILED,`Hull operation failed: ${t}`,e))}}function OQ(e){if(e.length<4)return k(F(N.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=U(),n=e.map(e=>({x:e[0],y:e[1],z:e[2]})),r=W(t.hullFromPoints(n,.1));return DE(r)?O(r):(FE(r),k(P(N.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`)?k(P(N.HULL_DEGENERATE,`convexHull degenerate: ${t}`,e)):k(P(N.HULL_FAILED,`convexHull failed: ${t}`,e))}}function kQ(e){let n=ZE(e);if(n.length!==1)return null;let r=t(n,0);if(fD(r)!==`sphere`)return null;let i=U().area(r.wrapped);return Math.sqrt(i/(4*Math.PI))}function AQ(e,t,n){try{let r=W(U().offset(e.wrapped,t,n));return kE(r)?O(r):(FE(r),k(ho(N.MINKOWSKI_NOT_3D,`Minkowski sphere offset did not produce a 3D shape`)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.MINKOWSKI_FAILED,`Minkowski sphere offset failed: ${t}`,e,{operation:`minkowski`,fastPath:`sphere`}))}}function jQ(e,t,n){let r=U();try{let i=$E(e),a=$E(t);if(i.length===0||a.length===0)return k(P(N.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=W(r.hullFromPoints(o,n));return kE(s)?O(s):(FE(s),k(ho(N.MINKOWSKI_NOT_3D,`Minkowski hull did not produce a 3D shape`)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.MINKOWSKI_FAILED,`Minkowski general path failed: ${t}`,e,{operation:`minkowski`}))}}function MQ(e,t,n={}){let{tolerance:r=1e-6}=n;if(U().isNull(e.wrapped))return k(F(N.NULL_SHAPE_INPUT,`minkowski: shape is a null shape`));if(U().isNull(t.wrapped))return k(F(N.MINKOWSKI_NULL_TOOL,`minkowski: tool is a null shape`));if(!kE(e)||!kE(t))return k(F(N.MINKOWSKI_NOT_3D,`minkowski: both shape and tool must be 3D`));let i=kQ(t);return i===null?jQ(e,t,r):AQ(e,i,r)}function NQ(e,t,n={}){let{tolerance:r=1e-6}=n;if(e.length<4)return k(F(N.POLYHEDRON_INSUFFICIENT_POINTS,`polyhedron: need at least 4 points, got ${e.length}`));if(t.length<4)return k(F(N.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 k(F(N.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=U(),n=e.map(([e,t,n])=>({x:e,y:t,z:n})),a=W(t.buildSolidFromFaces(n,i,r));return DE(a)?O(a):(FE(a),k(P(N.POLYHEDRON_FAILED,`Polyhedron did not produce a solid`)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.POLYHEDRON_FAILED,`Polyhedron failed: ${t}`,e))}}var PQ=1e-10;function FQ(e,t,n,r){return e*r-t*n}function IQ(e,t,n,r){return e*n+t*r}function LQ(e,t){return Math.sqrt(e*e+t*t)}function RQ(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 zQ(e){let t=0;for(let n=0;n<e.length;n++){let r=RQ(e,n),i=RQ(e,n+1);t+=r.x*i.y-i.x*r.y}return t<0?[...e].reverse():e}function BQ(e,t){let n=RQ(e,t-1),r=RQ(e,t),i=RQ(e,t+1),a=r.x-n.x,o=r.y-n.y,s=LQ(a,o),c=i.x-r.x,l=i.y-r.y,u=LQ(c,l);if(s<PQ||u<PQ)return{dx:0,dy:0};let d=-o/s,f=a/s,p=-l/u,m=c/u,h=d+p,g=f+m,_=LQ(h,g);if(_<PQ)return{dx:d,dy:f};h/=_,g/=_;let v=IQ(h,g,d,f),y=Math.abs(v)>PQ?1/v:1;return{dx:h*y,dy:g*y}}function VQ(e){return!e.prev||!e.next?!1:FQ(e.x-e.prev.x,e.y-e.prev.y,e.next.x-e.x,e.next.y-e.y)<-1e-10}function HQ(e){let t=e.map((t,n)=>{let r=BQ(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 UQ(e,t){let n=e;for(let e=0;e<t&&n;e++)n.active=!1,n=n.next}function WQ(e){let t=1,n=e.next;for(;n!==e&&(t++,n=n.next,!(t>1e4)););return t}function GQ(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)<PQ&&Math.abs(r)<PQ)return null;let o;if(o=Math.abs(n)>Math.abs(r)?i/n:a/r,o<PQ)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)>PQ){let e=c/s;if(Math.abs(o-e)>1e-4*Math.max(1,Math.abs(o)))return null}return o}function KQ(e,t,n){let r=n.x-t.x,i=n.y-t.y,a=LQ(r,i);if(a<PQ)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)<PQ)return null;let f=-c/d;if(f<PQ)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=LQ(y,b);if(x<PQ)return f;let S=IQ(p-h,m-g,y,b)/(x*x);return S<-.01||S>1.01?null:f}function qQ(e){let t=[];for(let n of e){if(!n.active||!n.next)continue;let e=GQ(n,n.next);if(e!==null&&e>PQ){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(VQ(n)){let e=n.next.next,r=0;for(;e!==n.prev&&e!==n&&r<1e3;){let i=KQ(n,e,e.next);if(i!==null&&i>PQ){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 JQ(e){if(e.length<3)return O({nodes:[],faces:[]});try{return O(YQ(e))}catch(e){return k(vo(N.STRAIGHT_SKELETON_FAILED,e instanceof Error?e.message:String(e),e))}}function YQ(e){let t=zQ(e),n=t.length,r=[],i=Array.from({length:n},()=>[]),a=HQ(t),o=0,s=n*n*2;for(;o<s;){o++;let e=a.find(e=>e.active);if(!e)break;let t=WQ(e);if(t<=3){if(t===3){let t=e,n=t.next,a=n.next,o=GQ(t,n),s=o!==null&&o>PQ?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 UQ(e,t);continue}let n=a.filter(e=>e.active),s=qQ(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=BQ(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=BQ(f(e),0);e.bx=p.dx,e.by=p.dy;let m=BQ(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=[RQ(t,e),RQ(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&&LQ(n.x-i.x,n.y-i.y)>PQ&&(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 XQ(e){let t=XE(e).map(e=>{let t=bk(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 ZQ(e){let t=[];for(let n=1;n<e-1;n++)t.push([0,n,n+1]);return t}function QQ(e,t,n,r,i,a){return(n-e)*(a-t)-(r-t)*(i-e)}function $Q(e,t,n,r,i,a,o,s){let c=QQ(n,r,i,a,e,t),l=QQ(i,a,o,s,e,t),u=QQ(o,s,n,r,e,t);return!((c<0||l<0||u<0)&&(c>0||l>0||u>0))}function e$(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||QQ(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&&$Q(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 t$(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=ZQ(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 n$(e,t){let n=(t?.angle??45)*gD,r=Math.tan(n);try{let t=XQ(e);if(t.length<3)return k(P(N.ROOF_FAILED,`Wire must have at least 3 edges for roof generation`));let n=JQ(t);if(!n.ok)return n;let i=n.value;if(i.faces.length===0)return k(P(N.ROOF_FAILED,`Straight skeleton computation produced no faces`));let a=U(),o=t$(i,r,a);for(let[e,n,r]of e$(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 k(P(N.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),O(yE(t))}catch(e){try{let t=yE(a.sew(o,1e-6));return iE(t)?O(t):k(P(N.ROOF_FAILED,`Sew fallback produced invalid solid`,e))}catch(e){return k(P(N.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 k(P(N.ROOF_FAILED,`Roof generation failed: ${t}`,e))}}function r$(e){return[[1,0,0,e[0]],[0,1,0,e[1]],[0,0,1,e[2]],[0,0,0,1]]}function i$(e){let t=e[0];return t!==void 0&&typeof t[0]==`number`}function a$(e,t,n){return{__instanced:!0,source:e,placements:t,grid:n,[Symbol.dispose](){e[Symbol.dispose]()}}}function o$(e){return typeof e==`object`&&!!e&&e.__instanced===!0}function s$(e,t){return a$(e,i$(t)?t.map(r$):t.map(e=>e.map(e=>[...e])))}function c$(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(r$([e*i,t*a,0]));return a$(e,o,{cols:n,rows:r,pitchX:i,pitchY:a})}function l$(e){return e.placements.length}function u$(e,t={}){let{source:n,placements:r,grid:i}=e;return r.length===0?k(F(`INSTANCE_EMPTY`,`materialize: instance has no placements`)):t.fuse?kE(n)?i?jP(n,[1,0,0],[0,1,0],i.cols,i.rows,i.pitchX,i.pitchY):d$(n,r,!0):k(F(`MATERIALIZE_NOT_3D`,`materialize({fuse:true}) requires a 3D source shape`)):d$(n,r,!1)}function d$(e,t,n){let r=[];for(let n of t){let t=ck(e,n);if(!t.ok){for(let e of r)e[Symbol.dispose]();return t}r.push(t.value)}let i=n?NA(r,{unsafe:!0}):O(nj(r));for(let e of r)(!i.ok||e!==i.value)&&e[Symbol.dispose]();return i}function f$(e,t){return{geometry:Wk(e.source,t),instances:e.placements}}var p$={coincident:3,concentric:4,distance:1,angle:1},m$=[1,0,0,0];function h$(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function g$(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function _$(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function v$(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 y$(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function b$(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function x$(e){return b$(v$(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function S$(e,t){let n=h$(WP(t.rotation,e.origin),t.position);return{type:e.type,origin:n,...e.normal?{normal:WP(t.rotation,e.normal)}:{},...e.direction?{direction:WP(t.rotation,e.direction)}:{}}}function C$(e,t,n){let r=e.normal??[0,0,1];return{position:y$(r,_$(r,g$(e.origin,t.origin))+n),rotation:m$}}function w$(e,t){let n=e.direction??[0,0,1],r=KP(t.direction??[0,0,1],n),i=WP(r,t.origin);return{position:g$(e.origin,i),rotation:r}}function T$(e,t,n){let r=b$(e.normal??[0,0,1]),i=b$(t.normal??[0,0,1]),a=Math.acos(Math.max(-1,Math.min(1,_$(i,r)))),o=v$(i,r);return{position:[0,0,0],rotation:GP(Math.hypot(o[0],o[1],o[2])<1e-9?x$(i):o,a-n)}}function E$(e,t,n){let r=g$(t,e),i=Math.hypot(r[0],r[1],r[2]);return{position:g$(h$(e,y$(i<1e-9?[1,0,0]:y$(r,1/i),n)),t),rotation:m$}}function D$(e,t,n,r){let i=b$(e);return{position:y$(i,_$(i,g$(t,n))-r),rotation:m$}}function O$(e,t,n){let r=b$(e.direction??[0,0,1]),i=h$(e.origin,y$(r,_$(r,g$(t,e.origin))));if(n===0)return{position:g$(i,t),rotation:m$};let a=g$(t,i),o=Math.hypot(a[0],a[1],a[2]);return{position:g$(h$(i,y$(o<1e-9?x$(r):y$(a,1/o),n)),t),rotation:m$}}function k$(e,t,n){let r=b$(t.direction??[0,0,1]),i=g$(t.origin,e),a=g$(i,y$(r,_$(r,i))),o=Math.hypot(a[0],a[1],a[2]);return n===0?{position:y$(a,-1),rotation:m$}:{position:g$(y$(o<1e-9?x$(r):y$(a,1/o),n),a),rotation:m$}}function A$(e,t,n){let r=b$(e.direction??[0,0,1]),i=KP(b$(t.direction??[0,0,1]),r),a=g$(WP(i,t.origin),e.origin),o=g$(a,y$(r,_$(r,a))),s=Math.hypot(o[0],o[1],o[2]);return{position:g$(y$(s<1e-9?x$(r):y$(o,1/s),n),o),rotation:i}}var j$=new Set([`plane-plane`,`plane-point`,`point-plane`,`point-point`,`axis-axis`,`axis-point`,`point-axis`]),M$={angle:`plane`,concentric:`axis`},N$=new Set([`coincident`,`distance`,`angle`,`concentric`]);function P$(e,t,n){let r=M$[e];return r?t===r&&n===r:j$.has(`${t}-${n}`)}function F$(e,t,n){switch(`${e.type}-${t.type}`){case`plane-plane`:case`plane-point`:return C$(e,t,n);case`point-plane`:return D$(t.normal??[0,0,1],e.origin,t.origin,n);case`point-point`:return E$(e.origin,t.origin,n);case`axis-axis`:return n===0?w$(e,t):A$(e,t,n);case`axis-point`:return O$(e,t.origin,n);case`point-axis`:return k$(e.origin,t,n);default:return null}}function I$(e,t,n){switch(e.type){case`concentric`:return w$(t,n);case`angle`:return T$(t,n,(e.value??0)*Math.PI/180);default:{let r=F$(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 L$(e,t){let n=new Map;for(let t of e)n.set(t,{position:[0,0,0],rotation:m$});let r=[],i=t.filter(e=>N$.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(!P$(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:m$},l=S$(r.entity,a);n.set(i.node,I$(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+(p$[t]??p$[t.split(`(`)[0]??``]??0),0),converged:r.length===0,unsupported:r}}function R$(e){if(e.face){let t=mO(e.face);return t?{type:`axis`,origin:t.origin,direction:t.direction}:{type:`plane`,origin:pO(e.face),normal:fO(e.face)}}if(e.edge){if(yk(e.edge)===`LINE`)return{type:`axis`,origin:bk(e.edge),direction:Ck(e.edge)};let t=Tk(e.edge);return t?{type:`axis`,origin:t.origin,direction:t.direction}:null}return e.point?{type:`point`,origin:e.point}:null}function z$(e,t){let n=R$(e),r=R$(t);return!n||!r?k(F(N.ASSEMBLY_MATE_INVALID,`solveAssembly: could not extract geometry from mate entities`)):O({entityA:{node:e.node,entity:n},entityB:{node:t.node,entity:r}})}function B$(e){switch(e.type){case`fixed`:return O({type:`fixed`,entityA:{node:e.entity.node,entity:{type:`point`,origin:[0,0,0]}}});case`coincident`:{let t=z$(e.entityA,e.entityB);return t.ok?O({type:`coincident`,...t.value}):t}case`distance`:{let t=z$(e.entityA,e.entityB);return t.ok?O({type:`distance`,...t.value,value:e.distance}):t}case`angle`:{let t=z$(e.entityA,e.entityB);return t.ok?O({type:`angle`,...t.value,value:e.angle}):t}case`concentric`:{let t=z$(e.axisA,e.axisB);return t.ok?O({type:`concentric`,...t.value}):t}}}function V$(e,t){let n=e.mates??[];return{...e,mates:[...n,t]}}function H$(e){let t=e.mates;if(!t||t.length===0)return k(F(N.ASSEMBLY_MATE_INVALID,`solveAssembly: no mates defined`));try{let n=[];LP(e,e=>{n.push(e.name)});let r=[];for(let e of t){let t=B$(e);if(!t.ok)return t;r.push(t.value)}let i=L$(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 k(P(N.ASSEMBLY_NOT_CONVERGED,e))}return O({transforms:i.transforms,dof:i.dof,converged:i.converged})}catch(e){let t=e instanceof Error?e.message:String(e);return k(P(N.ASSEMBLY_SOLVE_FAILED,`Assembly solve failed: ${t}`,e))}}function U$(e,t,n=1e-6){if(U().isNull(e.wrapped))return k(F(N.NULL_SHAPE_INPUT,`checkInterference: first shape is a null shape`));if(U().isNull(t.wrapped))return k(F(N.NULL_SHAPE_INPUT,`checkInterference: second shape is a null shape`));let r=U().distance(e.wrapped,t.wrapped);return O({hasInterference:r.value<=n,minDistance:r.value,pointOnShape1:r.point1,pointOnShape2:r.point2})}function W$(e,n=1e-6){let r=[],i=e.map(e=>uD(e));return e.forEach((a,o)=>{for(let s=o+1;s<e.length;s++){if(G$(t(i,o),t(i,s),n))continue;let c=j(U$(a,t(e,s),n));c.hasInterference&&r.push({i:o,j:s,result:c})}}),r}function G$(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 K$(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 q$(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 J$(e){let{type:t,data:n}=e,r=U();if(t===`LINE`)return r.makeLineEdge([q$(n,10),q$(n,20),q$(n,30)],[q$(n,11),q$(n,21),q$(n,31)]);if(t===`CIRCLE`)return r.makeCircleEdge([q$(n,10),q$(n,20),q$(n,30)],[0,0,1],q$(n,40));if(t===`ARC`){let e=q$(n,50)*Math.PI/180,t=q$(n,51)*Math.PI/180;return r.makeCircleArc([q$(n,10),q$(n,20),q$(n,30)],[0,0,1],q$(n,40),e,t)}}async function Y$(e,t){let n;try{n=await e.text()}catch(e){return k(yo(N.DXF_IMPORT_FAILED,`Failed to read DXF blob`,e))}let r=K$(n),i=t?.layer===void 0?r:r.filter(e=>e.layer===t.layer);if(i.length===0)return O([]);let a=[];try{for(let e of i){let t=J$(e);t!==void 0&&a.push(t)}return a.length===0?O([]):O([gE(U().makeWire(a))])}catch(e){return k(yo(N.DXF_IMPORT_FAILED,`Failed to convert DXF entities to geometry`,e))}finally{for(let e of a)e.delete()}}function X$(e,t,n=1e-6){let r=U(),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 k(yo(t,`No valid triangular faces could be built`));try{return O(jE(r.sewAndSolidify(i,n)))}catch{try{return O(jE(r.sew(i,n)))}catch(e){return k(yo(t,`Failed to sew triangular faces`,e))}}}function Z$(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 Q$(e){return e.split(/\s+/).slice(1).map(e=>parseInt(e.split(`/`)[0]??``,10)).filter(e=>!isNaN(e))}async function $$(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=Z$(t);e&&n.push(e)}else if(t.startsWith(`f `)){let e=Q$(t);e.length>=3&&r.push(e)}}if(n.length===0||r.length===0)return k(yo(N.OBJ_IMPORT_FAILED,`OBJ file contains no valid geometry`));try{return e1(n,r)}catch(e){let t=e instanceof Error?e.message:String(e);return k(yo(N.OBJ_IMPORT_FAILED,`OBJ import failed: ${t}`,e))}}function e1(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 X$(n,N.OBJ_IMPORT_FAILED)}function t1(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 n1(e){return e>=97&&e<=122||e>=65&&e<=90||e>=48&&e<=57||e===95}function r1(e){let t={},n=0;for(;n<e.length;){let r=e.indexOf(`="`,n);if(r<0)break;let i=r;for(;i>0&&n1(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 i1(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 a1(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 o1(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 s1(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=r1(e.slice(r,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of i1(a,`color`)){let t=r1(e).color;t!==void 0&&l.push(o1(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=r1(e.slice(n,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of i1(a,`base`)){let t=r1(e).displaycolor;t===void 0?l.push([0,0,0,1]):l.push(o1(t))}t.set(c,l)}return t}function c1(e){let t=[],n=[],r=[],i=s1(e);for(let n of i1(e,`vertex`)){let e=r1(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=a1(e,`object`);if(s!==null){let e=s.indexOf(`>`);if(e>=0){let t=r1(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 i1(e,`triangle`)){let e=r1(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 l1(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 u1(e){let t=U(),n=e.vertices.map(([e,t,n])=>({x:e,y:t,z:n})),r=e.triangles;try{return O(jE(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 X$(t,N.THREEMF_IMPORT_FAILED)}}async function d1(e){try{let t=await e.arrayBuffer(),n=t1(new Uint8Array(t),`3D/3dmodel.model`);if(!n)return k(yo(N.THREEMF_IMPORT_FAILED,`3MF archive does not contain 3D/3dmodel.model (or uses unsupported compression)`));let r=c1(new TextDecoder().decode(n));if(r.vertices.length===0||r.triangles.length===0)return k(yo(N.THREEMF_IMPORT_FAILED,`3MF model contains no valid geometry`));let i=u1(r);if(i.ok){let e=l1(r.triangleColors);e!==null&&WO(i.value,e)}return i}catch(e){let t=e instanceof Error?e.message:String(e);return k(yo(N.THREEMF_IMPORT_FAILED,`3MF import failed: ${t}`,e))}}async function f1(e){try{let t=await e.arrayBuffer();return O(jE(U().importGLB(t)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(yo(N.GLB_IMPORT_FAILED,`Failed to import GLB: ${t}`,e))}}function $(e){return`__wrapped`in e?e.val:e}function p1(e){return $(e)}function m1(e,t){return ek($(e),t)}function h1(e,t,n){let r=n?.at;return tk($(e),t,r,n?.axis)}function g1(e,t){let n=t?.at;return nk($(e),t?.normal??[1,0,0],n)}function _1(e,t,n){return rk($(e),t,n?.center)}function v1(e){return fk($(e))}function y1(e,t){return ck($(e),t)}function b1(e,t){return dk($(e),t)}function x1(e,t){return uk($(e),t)}function S1(e,t,n){return kA($(e),$(t),{...n,unsafe:!0})}function C1(e,t,n){return AA($(e),$(t),{...n,unsafe:!0})}function w1(e,t){return NA(e.map(e=>$(e)),{...t,unsafe:!0})}function T1(e,t,n){return PA($(e),t.map(e=>$(e)),{...n,unsafe:!0})}function E1(e,t,n){return jA($(e),$(t),{...n,unsafe:!0})}function D1(e,t,n){return IA($(e),t,n)}function O1(e,t,n){return HA($(e),t,n)}function k1(e,t){return UA($(e),t)}function A1(e,t,n){return WA($(e),t,n)}function j1(e,t){if(e!==void 0)return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(jI()).findAll(t)}function M1(e,t){return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(PI()).findAll(t)}function N1(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 P1(e,t,n){let r=$(e),i,a;return n===void 0?(i=void 0,a=t):(i=j1(t,r),a=n),Hj(r,i,a)}function F1(e,t,n){let r=$(e),i,a;n===void 0?(i=void 0,a=t):(i=j1(t,r),a=n);let o=N1(a);return o.mode===`distAngle`?lj(r,[...i??XE(r)],o.distance,o.angle):Uj(r,i,o.distance)}function I1(e,t,n,r){let i=$(e);return Wj(i,M1(t,i),n,r?.tolerance)}function L1(e,t,n){return Gj($(e),t,n?.tolerance)}function R1(e,t){return Bj($(e),t)}function z1(e,t,n){let r=$(e);return qj(r,M1(t,r),n.pullDirection,n.neutralPlane,n.angle)}function B1(e){return $j($(e))}function V1(e){return vk($(e))}function H1(e,t){return Wk($(e),t)}function U1(e,t){return Gk($(e),t)}function W1(e){return mD($(e))}function G1(e){return pk($(e))}function K1(e){return nO(e)}function q1(e){return Yj($(e))}function J1(e){return hk($(e))}function Y1(e,t){return gM($(e),typeof t==`number`?[0,0,t]:t)}function X1(e,t){let n=t?.at??[0,0,0];return _M($(e),n,t?.axis??[0,0,1],t?.angle??2*Math.PI)}function Z1(e,t){return yM(e.map(e=>$(e)),t)}function Q1(e,n){if(n===void 0){let t=ZE(e);if(t.length===0)return k(F(N.COMPOUND_NO_FACES,`compoundOps: shape has no faces`));let n=oA(t),r=pO(n)[2];for(let e=1;e<t.length;e++){let i=aA(t,e),a=pO(i)[2];a>r&&(n=i,r=a)}return O(n)}if(typeof n==`function`){let r=n(PI()).findAll(e);return r.length===0?k(bo(N.COMPOUND_FACE_NOT_FOUND,`compoundOps: face finder matched no faces`)):O(t(r,0))}return O(n)}function $1(e){return`sketchOnPlane`in e&&typeof e.sketchOnPlane==`function`?{wire:e.sketchOnPlane(`XY`).wire,owned:!0}:{wire:e,owned:!1}}function e0(e,t){let n=$(e),{at:r,radius:i,axis:a}=t,o=a??[0,0,1];if(i<=0)return k(F(`DRILL_INVALID_RADIUS`,`Drill radius must be positive`));if(ND(o))return k(F(`DRILL_ZERO_AXIS`,`Drill axis cannot be zero`));let s=jD(o),c=r.length===2?[r[0],r[1],0]:[r[0],r[1],r[2]],l;if(t.depth!==void 0)l=YA(i,t.depth,c,s);else{let e=uD(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=YA(i,a-r,[c[0]+s[0]*r,c[1]+s[1]*r,c[2]+s[2]*r],s)}try{return AA(n,l,{unsafe:!0})}finally{l[Symbol.dispose]()}}function t0(e,t){try{var n=OT();let r=$(e),{profile:i,depth:a}=t;if(a<=0)return k(F(`POCKET_INVALID_DEPTH`,`Pocket depth must be positive`));let o=Q1(r,t.face);if(A(o))return o;let s=o.value,c=fO(s),l=pO(s),u=n.u(new BT),{wire:d,owned:f}=$1(i);f&&u.register(d);let p=xA(d);if(A(p))return p;u.register(p.value);let m=gM(u.register(ek(p.value,l)),wD(jD(c),-a));return A(m)?m:(u.register(m.value),AA(r,m.value,{unsafe:!0}))}catch(e){n.e=e}finally{n.d()}}function n0(e,t){try{var n=OT();let r=$(e),{profile:i,height:a}=t;if(a<=0)return k(F(`BOSS_INVALID_HEIGHT`,`Boss height must be positive`));let o=Q1(r,t.face);if(A(o))return o;let s=o.value,c=fO(s),l=pO(s),u=n.u(new BT),{wire:d,owned:f}=$1(i);f&&u.register(d);let p=xA(d);if(A(p))return p;u.register(p.value);let m=gM(u.register(ek(p.value,l)),wD(jD(c),a));return A(m)?m:(u.register(m.value),kA(r,m.value,{unsafe:!0}))}catch(e){n.e=e}finally{n.d()}}function r0(e,t){try{var n=OT();let r=$(e),i=t?.normal??[1,0,0],a=t?.at;return ND(i)?k(F(`MIRROR_ZERO_NORMAL`,`Mirror plane normal cannot be zero`)):kA(r,n.u(nk(r,i,a)),{unsafe:!0})}catch(e){n.e=e}finally{n.d()}}function i0(e,t){let n=$(e),{xDir:r,xCount:i,xSpacing:a,yDir:o,yCount:s,ySpacing:c}=t;if(i<1||s<1)return k(F(`PATTERN_INVALID_COUNT`,`Pattern counts must be at least 1`));if(ND(r))return k(F(`PATTERN_ZERO_DIRECTION`,`X direction cannot be zero`));if(ND(o))return k(F(`PATTERN_ZERO_DIRECTION`,`Y direction cannot be zero`));if(i===1&&s===1)return O(n);let l=jD(r),u=jD(o),d=[n];for(let e=0;e<i;e++)for(let t=0;t<s;t++){if(e===0&&t===0)continue;let r=[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(ek(n,r))}return NA(d,{unsafe:!0})}var a0=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 o0(e){if(A(e))throw new a0(e.error);return e.value}function s0(e){return e}function c0(e){return e}function l0(e){return e}function u0(e){return e}function d0(e){return{val:e,__wrapped:!0,translate:t=>x0(m1(e,t)),rotate:(t,n)=>x0(h1(e,t,n)),mirror:t=>x0(g1(e,t)),scale:(t,n)=>x0(_1(e,t,n)),applyMatrix:t=>x0(o0(y1(e,t))),moveX:t=>x0(m1(e,[t,0,0])),moveY:t=>x0(m1(e,[0,t,0])),moveZ:t=>x0(m1(e,[0,0,t])),rotateX:t=>x0(h1(e,t,{axis:[1,0,0]})),rotateY:t=>x0(h1(e,t,{axis:[0,1,0]})),rotateZ:t=>x0(h1(e,t,{axis:[0,0,1]})),bounds:()=>uD(e),describe:()=>W1(e),clone:()=>x0(o0(v1(e))),mesh:t=>H1(e,t),meshEdges:t=>U1(e,t),isValid:()=>q1(e),isEmpty:()=>J1(e),heal:()=>x0(o0(B1(e))),simplify:()=>x0(o0(V1(e))),toBREP:()=>o0(G1(e)),apply:t=>x0(t(e)),applyResult:t=>x0(o0(t(e))),done:()=>e}}function f0(e){return{fuse:(t,n)=>S0(o0(S1(e,$(t),{...n,unsafe:!0}))),cut:(t,n)=>S0(o0(C1(e,$(t),{...n,unsafe:!0}))),intersect:(t,n)=>S0(o0(E1(e,$(t),{...n,unsafe:!0}))),fuseAll:(t,n)=>S0(u0(o0(NA([e,...t.map($)],{...n,unsafe:!0})))),cutAll:(t,n)=>S0(u0(o0(PA(e,t,{...n,unsafe:!0})))),section:(t,n)=>x0(o0(D1(e,t,n))),split:t=>x0(o0(k1(e,t))),slice:(t,n)=>o0(A1(e,t,n))}}function p0(e){return{fillet(...t){return t.length===1?S0(u0(o0(P1(s0(e),t[0])))):S0(u0(o0(P1(s0(e),t[0],t[1]))))},chamfer(...t){return t.length===1?S0(u0(o0(F1(s0(e),t[0])))):S0(u0(o0(F1(s0(e),t[0],t[1]))))},shell:(t,n,r)=>S0(u0(o0(I1(s0(e),t,n,r)))),offset:(t,n)=>S0(u0(o0(L1(s0(e),t,n)))),draft:(t,n)=>S0(u0(o0(z1(s0(e),t,n))))}}function m0(e){return{drill:t=>S0(o0(e0(e,t))),pocket:t=>S0(o0(t0(e,t))),boss:t=>S0(o0(n0(e,t))),mirrorJoin:t=>S0(o0(r0(e,t))),rectangularPattern:t=>S0(o0(i0(e,t)))}}function h0(e){return{volume:()=>o0(kM(e)),area:()=>o0(AM(e)),volumeProps:()=>o0(EM(e)),surfaceProps:()=>o0(DM(e))}}function g0(e){return{edges:()=>XE(e),faces:()=>ZE(e),wires:()=>QE(e),vertices:()=>$E(e)}}function _0(e){return{linearPattern:(t,n,r)=>S0(u0(o0(kP(e,t,n,r)))),circularPattern:(t,n,r)=>S0(u0(o0(AP(e,t,n,r))))}}function v0(e){return{...d0(e),...f0(e),...p0(e),...m0(e),...h0(e),...g0(e),..._0(e)}}function y0(e){return{...d0(e),length:()=>wk(e),startPoint:()=>bk(e),endPoint:()=>xk(e),pointAt:t=>Sk(e,t),tangentAt:t=>Ck(e,t),isClosed:()=>Ek(e),sweep(t,n){if(!wE(e))throw Error(`sweep requires a Wire`);let r=o0(cM(l0(e),$(t),n));return S0(Array.isArray(r)?r[0]:r)}}}function b0(e){return{...d0(e),area:()=>o0(AM(e)),normalAt:t=>fO(e,t),center:()=>pO(e),surfaceType:()=>o0(iO(e)),outerWire:()=>gO(e),innerWires:()=>vO(e),extrude:t=>S0(o0(Y1(c0(e),t))),revolve:t=>S0(o0(X1(c0(e),t)))}}function x0(e){return kE(e)?v0(e):TE(e)?b0(e):CE(e)||wE(e)?y0(e):d0(e)}function S0(e){return v0(e)}function C0(e){if(e&&typeof e==`object`&&`face`in e&&typeof e.face==`function`&&`_defaultOrigin`in e)return b0(e.face());if(e&&typeof e==`object`&&`wrapped`in e)return TE(e)?b0(e):kE(e)?v0(e):CE(e)||wE(e)?y0(e):d0(e);throw Error(`shape() requires a Sketch or branded shape type`)}var w0=.25,T0=e=>Math.tan(e)-e;function E0(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 D0(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(E0(e,s*t,n,i))}return a}function O0(e){return Math.max(16,Math.round(8*Math.sqrt(e)))}function k0(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 A0(e,t,n){if(t===0)return O(e);let r=T0(e)+2*t*Math.tan(e)/n,i,a;if(r>T0(e)?(i=e,a=Math.PI/2-1e-6):(i=1e-4,a=e),r>T0(a)||r<T0(i))return k(F(`GEAR_PA_OUT_OF_RANGE`,`working pressure angle out of range — target inv(αw)=${r.toFixed(4)} not in [${T0(i).toFixed(4)}, ${T0(a).toFixed(4)}]`,void 0,{target:r,invLo:T0(i),invHi:T0(a)}));for(let e=0;e<50;e++){let e=.5*(i+a);T0(e)<r?i=e:a=e}return O(.5*(i+a))}function j0(e,t,n,r,i){return A0(e,t+n,r+i)}function M0(e,t,n,r,i){return A0(e,n-t,i-r)}function N0(e,t,n,r,i){return(e+t)*n*Math.cos(r)/(2*Math.cos(i))}function P0(e,t,n,r){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(n))return k(F(`GEAR_NON_INTEGER_TEETH`,`tooth counts and planet count must be integers`));if(e<4||t<4||n<2)return k(F(`GEAR_TEETH_TOO_FEW`,`zs ≥ 4, zp ≥ 4, N ≥ 2 required`));if((2*e+2*t)%n!=0)return k(F(`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?k(F(`GEAR_PLANET_COLLISION`,`planet tips would collide: (zs+zp)·sin(π/N) = ${a.toFixed(3)} ≤ planet tip = ${i.toFixed(3)}`)):O(void 0)}function F0(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 I0(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 L0(e,t){return 1-e*Math.sin(t)*Math.sin(t)/2}function R0(e,t,n){return Math.max(0,L0(e,t)-n)}function z0(e){return e<8?.2:.485-2.88/e}function B0(e,t,n,r){let i=e*1e3,a=z0(r);return a<=0||n<=0||t<=0?1/0:2*i/(r*t*t*n*a)}function V0(e,t,n=!1){let r=(1.4+6.5/e)*(20/(t*180/Math.PI))**.15;return n?r*.85:r}function H0(e,t,n,r,i,a=!1){return B0(e,t,n,r)*V0(r,i,a)}function U0(e){return e/2}function W0(e,t){return e+2*t}function G0(e){return e%2==0?Math.PI/e:0}function K0(e,t,n){return e*(1+t/n)+G0(n)}function q0(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=P0(n,r,i,s);if(A(c))return c;let l=j0(a,o,s,n,r);if(A(l))return l;let u=N0(n,r,t,a,l.value),d=[];for(let e=0;e<i;e++){let t=e*2*Math.PI/i,a=K0(t,n,r);d.push({rotationDeg:a*180/Math.PI,position:[u*Math.cos(t),u*Math.sin(t),0]})}return O(d)}function J0(e,t,n,r,i){let a=t*e.toothPitch,o=(t+1)%n*e.toothPitch,s=T0(e.alphaPitch),c=a-e.halfToothAngle-s,l=a+e.halfToothAngle+s,u=D0(e.rb,e.alphaTip,c,r,1),d=D0(e.rb,e.alphaTip,l,r,-1).reverse(),f=oA(u),p=sA(u),m=oA(d),h=sA(d),g=[],_=e=>{i.register(e),g.push(e)},v=e.isInternal?e.rb<e.rRoot:e.rb>e.rRoot;v&&_(uA([e.rRoot*Math.cos(c),e.rRoot*Math.sin(c),0],f));let y=e.rPitch*1e-5,b=_A(u,{tolerance:y});if(A(b))return b;_(b.value),_(mA(p,[e.rTip*Math.cos(a),e.rTip*Math.sin(a),0],m));let x=_A(d,{tolerance:y});if(A(x))return x;_(x.value),v&&_(uA(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),_(mA(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])),O(g)}function Y0(e){return Z0(e,!1)}function X0(e){return Z0(e,!0)}function Z0(e,t){try{var n=OT();let{teeth:r,moduleSize:i,pressureAngle:a,shift:o,clearance:s,flankThinning:c,samples:l=O0(i)}=e;if(r<4)return k(F(`GEAR_TEETH_TOO_FEW`,`gear needs ≥ 4 teeth, got ${r}`));if(i<=0)return k(F(`GEAR_MODULE_NONPOSITIVE`,`module must be > 0, got ${i}`));let u=k0(r,i,a,o,s,c,t),d=n.u(new BT),f=[];for(let e=0;e<r;e++){let t=J0(u,e,r,l,d);if(A(t))return t;f.push(...t.value)}let p=bA(f);return A(p)?p:O(p.value)}catch(e){n.e=e}finally{n.d()}}function Q0(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=w0,flankThinning:s=0,bore:c=0,samples:l}=e;if(r<=0)return k(F(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));if(l!==void 0&&(!Number.isInteger(l)||l<1))return k(F(`GEAR_SAMPLES_INVALID`,`samples must be a positive integer; got ${String(l)}`));let u=i*Math.PI/180,d=k0(t,n,u,a,o,s,!1);if(c>0&&c>=2*d.rRoot)return k(F(`GEAR_BORE_TOO_LARGE`,`bore diameter ${c.toFixed(2)} ≥ root diameter ${(2*d.rRoot).toFixed(2)} — would erase the gear teeth`));let f=Y0({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(A(f))return f;let p=e2(t,u,a);return a2(f.value,r,c,d,p)}function $0(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=w0,flankThinning:s=0,ringWallThickness:c=2*e.moduleSize,samples:l}=e;if(r<=0)return k(F(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));if(c<=0)return k(F(`GEAR_WALL_NONPOSITIVE`,`ringWallThickness must be > 0`));if(l!==void 0&&(!Number.isInteger(l)||l<1))return k(F(`GEAR_SAMPLES_INVALID`,`samples must be a positive integer; got ${String(l)}`));let u=i*Math.PI/180,d=X0({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(A(d))return d;let f=k0(t,n,u,a,o,s,!0),p=i2(f.rPitch+c);return A(p)?p:s2(p.value,d.value,r,f,[])}function e2(e,t,n){let r=R0(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 t2(e){let t=r2(e);if(A(t))return t;let n=t.value,r=n2(n);if(A(r))return r;let{sun:i,planet:a,ring:o}=r.value,s=d2(n,i,a,o),c=l2(a.solid,n);a.solid.delete();let l=u2(o.solid,n.zr),u=f2(n,s);return O({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 n2(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=Q0({...n,teeth:e.sunTeeth,shift:e.sunShift,bore:e.sunBore});if(A(r))return r;let i=Q0({...n,teeth:e.planetTeeth,shift:e.planetShift,bore:e.planetBore});if(A(i))return r.value.solid.delete(),i;let a=$0({...n,teeth:e.zr,shift:e.ringShift,ringWallThickness:e.ringWallThickness});return A(a)?(r.value.solid.delete(),i.value.solid.delete(),a):O({sun:r.value,planet:i.value,ring:a.value})}function r2(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 k(F(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));let u=P0(n,r,i,c);if(A(u))return u;let d=W0(n,r),f=j0(o,s,c,n,r);if(A(f))return f;let p=M0(o,c,l,r,d);if(A(p))return p;let m=N0(n,r,t,o,f.value);return O({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:U0(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 i2(e){try{var t=OT();let n=bA([t.u(new BT).register(dA(e,[0,0,0],[0,0,1]))]);return A(n)?n:O(n.value)}catch(e){t.e=e}finally{t.d()}}function a2(e,t,n,r,i){try{var a=OT();let o=a.u(new BT);o.register(e);let s=xA(e);if(A(s))return s;o.register(s.value);let c=gM(s.value,[0,0,t]);if(A(c))return c;if(n<=0)return O(c2(c.value,r,i));let l=a.u(new BT);l.register(c.value);let u=o2(n/2);if(A(u))return u;l.register(u.value);let d=gM(u.value,[0,0,t+1]);if(A(d))return d;l.register(d.value);let f=l.register(ek(d.value,[0,0,-.5])),p=AA(c.value,f);return A(p)?p:O(c2(p.value,r,i))}catch(e){a.e=e}finally{a.d()}}function o2(e){let t=i2(e);return A(t)?t:xA(t.value)}function s2(e,t,n,r,i){let a=xA(e,[t]);if(A(a))return a;let o=gM(a.value,[0,0,n]);return A(o)?o:O(c2(o.value,r,i))}function c2(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 l2(e,t){let n=[];try{for(let r=0;r<t.numPlanets;r++){let i=r*2*Math.PI/t.numPlanets,a=tk(e,K0(i,t.sunTeeth,t.planetTeeth)*180/Math.PI);try{let e=[t.centerDistance*Math.cos(i),t.centerDistance*Math.sin(i),0];n.push(ek(a,e))}finally{a.delete()}}return n}catch(e){for(let e of n)e.delete();throw e}}function u2(e,t){let n=G0(t);if(n===0)return e;let r=tk(e,n*180/Math.PI);return e.delete(),r}function d2(e,t,n,r){let i={crSunPlanet:F0(t.tipDiameter/2,t.baseDiameter/2,n.tipDiameter/2,n.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_sp),crPlanetRing:I0(n.tipDiameter/2,n.baseDiameter/2,r.tipDiameter/2,r.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_pr),undercutSun:R0(e.sunTeeth,e.alpha,e.sunShift),undercutPlanet:R0(e.planetTeeth,e.alpha,e.planetShift)};if(e.appliedTorque!==void 0){let t=e.appliedTorque;i.lewisStress={sun:H0(t,e.moduleSize,e.thickness,e.sunTeeth,e.alpha),planet:H0(t*e.planetTeeth/e.sunTeeth,e.moduleSize,e.thickness,e.planetTeeth,e.alpha),ring:H0(t*e.zr/e.sunTeeth,e.moduleSize,e.thickness,e.zr,e.alpha,!0)},i.stressConcentrationFactor={sun:V0(e.sunTeeth,e.alpha),planet:V0(e.planetTeeth,e.alpha),ring:V0(e.zr,e.alpha,!0)}}return i}function f2(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 p2=bX({addHoles:()=>TP,bezier:()=>fP,box:()=>$N,bsplineApprox:()=>dP,circle:()=>oP,compound:()=>xP,cone:()=>nP,cylinder:()=>eP,ellipse:()=>sP,ellipseArc:()=>uP,ellipsoid:()=>iP,face:()=>gP,fill:()=>SA,filledFace:()=>_P,helix:()=>cP,line:()=>aP,offsetFace:()=>CP,polygon:()=>yP,polyhedron:()=>NQ,sewShells:()=>wP,solid:()=>SP,sphere:()=>tP,subFace:()=>vP,tangentArc:()=>pP,threePointArc:()=>lP,torus:()=>rP,vertex:()=>bP,wire:()=>mP,wireLoop:()=>hP}),m2=bX({checkBoolean:()=>Cj,convexHull:()=>OQ,cut:()=>C1,cutAll:()=>PA,cutAllBisect:()=>mj,fuse:()=>S1,fuseAll:()=>NA,fuseAllBisect:()=>vj,hull:()=>DQ,intersect:()=>E1,minkowski:()=>MQ,section:()=>D1,sectionToFace:()=>O1,slice:()=>A1,split:()=>k1}),h2=bX({chamfer:()=>F1,draft:()=>z1,fillet:()=>P1,heal:()=>B1,offset:()=>L1,shell:()=>I1,simplify:()=>V1,thicken:()=>R1,variableFillet:()=>Jj}),g2=bX({applyMatrix:()=>y1,clone:()=>v1,composeTransforms:()=>lk,mirror:()=>g1,rotate:()=>h1,scale:()=>_1,transformCopy:()=>b1,translate:()=>m1}),_2=bX({checkAllInterferences:()=>W$,checkInterference:()=>U$,createDistanceQuery:()=>PM,measureArea:()=>AM,measureCurvatureAt:()=>FM,measureCurvatureAtMid:()=>IM,measureDistance:()=>MM,measureDistanceProps:()=>NM,measureLength:()=>jM,measureLinearProps:()=>OM,measureSurfaceProps:()=>DM,measureVolume:()=>kM,measureVolumeProps:()=>EM}),v2=bX({blueprintToDXF:()=>cY,exportAssemblySTEP:()=>OP,exportDXF:()=>sY,exportGlb:()=>JJ,exportGltf:()=>qJ,exportIGES:()=>Zk,exportOBJ:()=>LJ,exportSTEP:()=>Yk,exportSTEPConfigured:()=>GY,exportSTL:()=>Xk,exportThreeMF:()=>DY,importDXF:()=>Y$,importGLB:()=>f1,importIGES:()=>JY,importOBJ:()=>$$,importSTEP:()=>KY,importSTL:()=>qY,importSVG:()=>WY,importSVGPathD:()=>UY,importThreeMF:()=>d1}),y2=bX({cornerFinder:()=>sR,edgeFinder:()=>jI,faceFinder:()=>PI,getSingleFace:()=>LI,vertexFinder:()=>kX,wireFinder:()=>II}),b2=bX({complexExtrude:()=>uM,extrude:()=>Y1,guidedSweep:()=>hM,loft:()=>Z1,multiSectionSweep:()=>mM,revolve:()=>X1,roof:()=>n$,supportExtrude:()=>lM,surfaceFromGrid:()=>SQ,surfaceFromImage:()=>TQ,sweep:()=>cM,twistExtrude:()=>dM}),x2=bX({circularPattern:()=>AP,linearPattern:()=>kP}),S2=14695981039346656037n,C2=1099511628211n,w2=18446744073709551615n;function T2(){return S2}function E2(e,t){return(e^BigInt(t&255))*C2&w2}function D2(e,t){let n=e;for(let e=0;e<t.length;e++)n=E2(n,t[e]??0);return n}var O2=new TextEncoder;function k2(e,t){return D2(e,O2.encode(t))}var A2=new ArrayBuffer(8),j2=new DataView(A2),M2=new Uint8Array(A2);function N2(e,t){return j2.setFloat64(0,Object.is(t,-0)?0:t),D2(e,M2)}function P2(e,t){let n=e,r=t&w2;for(let e=0;e<8;e++)n=E2(n,Number(r&255n)),r>>=8n;return n}function F2(e,t){let n=e,r=t|0;for(let e=0;e<4;e++)n=E2(n,r&255),r>>>=8;return n}function I2(e,t){return E2(e,+!!t)}function L2(e){return(e&w2).toString(16).padStart(16,`0`)}var R2=new Set;function z2(e){return k2(T2(),e)}function B2(e){return{kind:`NumLit`,value:e,structuralHash:N2(z2(`NumLit`),e),freeParams:R2}}function V2(e){let t=z2(`Vec3Lit`);for(let n of e)t=N2(t,n);return{kind:`Vec3Lit`,value:e,structuralHash:t,freeParams:R2}}function H2(e){let t=z2(`Vec2Lit`);for(let n of e)t=N2(t,n);return{kind:`Vec2Lit`,value:e,structuralHash:t,freeParams:R2}}function U2(e){return{kind:`Param`,name:e,structuralHash:k2(z2(`Param`),e),freeParams:new Set([e])}}function W2(e,t,n){let r=k2(z2(`BinOp`),e);return r=P2(r,t.structuralHash),r=P2(r,n.structuralHash),{kind:`BinOp`,op:e,a:t,b:n,structuralHash:r,freeParams:e4(t.freeParams,n.freeParams)}}function G2(e,t){let n=k2(z2(`UnaryOp`),e);return n=P2(n,t.structuralHash),{kind:`UnaryOp`,op:e,arg:t,structuralHash:n,freeParams:t.freeParams}}function K2(e,t){let n=F2(z2(`Component`),t);return n=P2(n,e.structuralHash),{kind:`Component`,vec:e,index:t,structuralHash:n,freeParams:e.freeParams}}function q2(e,t){let n=F2(z2(`BuildVec`),e),r=new Set;for(let e of t){n=P2(n,e.structuralHash);for(let t of e.freeParams)r.add(t)}return{kind:`BuildVec`,dim:e,components:t,structuralHash:n,freeParams:r}}var J2=(e,t)=>W2(`+`,e,t),Y2=(e,t)=>W2(`*`,e,t);function X2(e){return typeof e==`number`?B2(e):e}function Z2(e,t){if(!Array.isArray(e))return e;let n=e;return n.every(e=>typeof e==`number`)?t===3?V2([n[0],n[1],n[2]]):H2([n[0],n[1]]):q2(t,n.map(X2))}function Q2(e){return Z2(e,3)}function $2(e){return Z2(e,2)}function e4(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 t4(e){return typeof e==`number`}function n4(e,t){return t4(e)?O(e):k(F(N.NULL_SHAPE_INPUT,`${t}: expected number, got ${Array.isArray(e)?`vector(${e.length})`:typeof e}`))}function r4(e,t,n){return Array.isArray(e)&&e.length===t?O(e):k(F(N.NULL_SHAPE_INPUT,`${n}: expected Vec${t}, got ${t4(e)?`number`:`vector(${e.length})`}`))}function i4(e,t){switch(e.kind){case`NumLit`:return O(e.value);case`Vec3Lit`:return O(e.value);case`Vec2Lit`:return O(e.value);case`Param`:{let n=t[e.name];return n===void 0?k(F(N.NULL_SHAPE_INPUT,`unbound param: ${e.name}`)):O(n)}case`BinOp`:return a4(e,t);case`UnaryOp`:return o4(e,t);case`Component`:return s4(e,t);case`BuildVec`:return c4(e,t)}}function a4(e,t){let n=i4(e.a,t);if(!n.ok)return n;let r=i4(e.b,t);if(!r.ok)return r;let i=n4(n.value,`BinOp(${e.op}).a`);if(!i.ok)return i;let a=n4(r.value,`BinOp(${e.op}).b`);if(!a.ok)return a;switch(e.op){case`+`:return O(i.value+a.value);case`-`:return O(i.value-a.value);case`*`:return O(i.value*a.value);case`/`:return a.value===0?k(F(N.NULL_SHAPE_INPUT,`BinOp(/): division by zero`)):O(i.value/a.value)}}function o4(e,t){let n=i4(e.arg,t);if(!n.ok)return n;let r=n4(n.value,`UnaryOp(${e.op})`);if(!r.ok)return r;let i=r.value;switch(e.op){case`neg`:return O(-i);case`sin`:return O(Math.sin(i));case`cos`:return O(Math.cos(i));case`sqrt`:return O(Math.sqrt(i));case`abs`:return O(Math.abs(i))}}function s4(e,t){let n=i4(e.vec,t);if(!n.ok)return n;if(t4(n.value))return k(F(N.NULL_SHAPE_INPUT,`Component: cannot index a scalar`));let r=n.value,i=r[e.index];return i===void 0?k(F(N.NULL_SHAPE_INPUT,`Component: index ${e.index} out of range for Vec${r.length}`)):O(i)}function c4(e,t){if(e.components.length!==e.dim)return k(F(N.NULL_SHAPE_INPUT,`BuildVec(${e.dim}): expected ${e.dim} components, got ${e.components.length}`));let n=[];for(let r of e.components){let e=i4(r,t);if(!e.ok)return e;let i=n4(e.value,`BuildVec.component`);if(!i.ok)return i;n.push(i.value)}return O(e.dim===2?[n[0],n[1]]:[n[0],n[1],n[2]])}function l4(e,t,n){let r=i4(e,t);return r.ok?n4(r.value,n):r}function u4(e,t,n){let r=i4(e,t);if(!r.ok)return r;let i=r4(r.value,3,n);if(!i.ok)return i;let[a,o,s]=i.value;return O([a,o,s])}function d4(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)}var f4=new Set;function p4(e){return k2(T2(),e)}function m4(e,t){return P2(e,t.structuralHash)}function h4(e,t){return t===void 0?I2(e,!1):m4(I2(e,!0),t)}function g4(e,t){return t===void 0?I2(e,!1):N2(I2(e,!0),t)}function _4(...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?f4:t}function v4(e,t,n){let r=X2(e),i=X2(t),a=X2(n),o=p4(`Box`);return o=m4(m4(m4(o,r),i),a),{kind:`Box`,x:r,y:i,z:a,structuralHash:o,freeParams:_4(r,i,a)}}function y4(e){let t=X2(e);return{kind:`Sphere`,radius:t,structuralHash:m4(p4(`Sphere`),t),freeParams:t.freeParams}}function b4(e,t){let n=X2(e),r=X2(t);return{kind:`Cylinder`,radius:n,height:r,structuralHash:m4(m4(p4(`Cylinder`),n),r),freeParams:_4(n,r)}}function x4(e,t,n){let r=X2(e),i=X2(t),a=X2(n),o=p4(`Cone`);return o=m4(m4(m4(o,r),i),a),{kind:`Cone`,radius1:r,radius2:i,height:a,structuralHash:o,freeParams:_4(r,i,a)}}function S4(e,t){let n=X2(e),r=X2(t);return{kind:`Torus`,majorRadius:n,minorRadius:r,structuralHash:m4(m4(p4(`Torus`),n),r),freeParams:_4(n,r)}}function C4(e){let t=e.map(Q2),n=F2(p4(`Polygon`),t.length);for(let e of t)n=m4(n,e);return{kind:`Polygon`,points:t,structuralHash:n,freeParams:_4(...t)}}function w4(e){let t=X2(e);return{kind:`Circle`,radius:t,structuralHash:m4(p4(`Circle`),t),freeParams:t.freeParams}}function T4(e,t){let n=Q2(e),r=Q2(t);return{kind:`Line`,from:n,to:r,structuralHash:m4(m4(p4(`Line`),n),r),freeParams:_4(n,r)}}function E4(e){let t=Q2(e);return{kind:`Vertex`,point:t,structuralHash:m4(p4(`Vertex`),t),freeParams:t.freeParams}}function D4(e){return{kind:`Empty`,output:e,structuralHash:k2(p4(`Empty`),e),freeParams:f4}}function O4(){return D4(`Solid`)}function k4(){return D4(`Face`)}function A4(){return D4(`Wire`)}function j4(e,t,n,r){return g4(m4(m4(p4(e),t),n),r)}function M4(e,t,n){return{kind:`Fuse`,a:e,b:t,tolerance:n,structuralHash:j4(`Fuse`,e,t,n),freeParams:_4(e,t)}}function N4(e,t,n){return{kind:`Cut`,a:e,b:t,tolerance:n,structuralHash:j4(`Cut`,e,t,n),freeParams:_4(e,t)}}function P4(e,t,n){return{kind:`Intersect`,a:e,b:t,tolerance:n,structuralHash:j4(`Intersect`,e,t,n),freeParams:_4(e,t)}}function F4(e,t){let n=F2(p4(`FuseAll`),e.length);for(let t of e)n=m4(n,t);return n=g4(n,t),{kind:`FuseAll`,shapes:e,tolerance:t,structuralHash:n,freeParams:_4(...e)}}function I4(e,t,n){let r=m4(p4(`CutAll`),e);r=F2(r,t.length);for(let e of t)r=m4(r,e);return r=g4(r,n),{kind:`CutAll`,base:e,tools:t,tolerance:n,structuralHash:r,freeParams:_4(e,...t)}}function L4(e){return e===void 0?void 0:Q2(e)}function R4(e,t){let n=Q2(t);return{kind:`Translate`,target:e,vector:n,structuralHash:m4(m4(p4(`Translate`),e),n),freeParams:_4(e,n)}}function z4(e,t,n){let r=X2(t),i=L4(n?.axis),a=L4(n?.at),o=m4(m4(p4(`Rotate`),e),r);return o=h4(o,i),o=h4(o,a),{kind:`Rotate`,target:e,angle:r,axis:i,at:a,structuralHash:o,freeParams:_4(e,r,i,a)}}function B4(e,t,n){let r=X2(t),i=L4(n?.center),a=m4(m4(p4(`Scale`),e),r);return a=h4(a,i),{kind:`Scale`,target:e,factor:r,center:i,structuralHash:a,freeParams:_4(e,r,i)}}function V4(e,t){let n=L4(t?.normal),r=L4(t?.at),i=m4(p4(`Mirror`),e);return i=h4(i,n),i=h4(i,r),{kind:`Mirror`,target:e,normal:n,at:r,structuralHash:i,freeParams:_4(e,n,r)}}function H4(e){let t=F2(p4(`Compound`),e.length);for(let n of e)t=m4(t,n);return{kind:`Compound`,children:e,structuralHash:t,freeParams:_4(...e)}}function U4(e,t,n=!1){let r=t.map(e=>e.map(e=>[...e])),i=F2(I2(m4(p4(`Instance`),e),n),r.length);for(let e of r)for(let t of e.flat())i=N2(i,t);return{kind:`Instance`,source:e,placements:r,fuse:n,structuralHash:i,freeParams:_4(e)}}function W4(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 W4(e.a);case`FuseAll`:return e.shapes[0]?W4(e.shapes[0]):`Solid`;case`CutAll`:return W4(e.base);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return W4(e.target);case`Compound`:return`Compound`;case`Instance`:return e.fuse?`Solid`:`Compound`}}function G4(e,t){let n=l4(e.x,t.env,`Box.x`);if(!n.ok)return n;let r=l4(e.y,t.env,`Box.y`);if(!r.ok)return r;let i=l4(e.z,t.env,`Box.z`);return i.ok?O($N(n.value,r.value,i.value)):i}function K4(e,t){let n=l4(e.radius,t.env,`Sphere.radius`);return n.ok?O(tP(n.value)):n}function q4(e,t){let n=l4(e.radius,t.env,`Cylinder.radius`);if(!n.ok)return n;let r=l4(e.height,t.env,`Cylinder.height`);return r.ok?O(eP(n.value,r.value)):r}function J4(e,t){let n=l4(e.radius1,t.env,`Cone.radius1`);if(!n.ok)return n;let r=l4(e.radius2,t.env,`Cone.radius2`);if(!r.ok)return r;let i=l4(e.height,t.env,`Cone.height`);return i.ok?O(nP(n.value,r.value,i.value)):i}function Y4(e,t){let n=l4(e.majorRadius,t.env,`Torus.majorRadius`);if(!n.ok)return n;let r=l4(e.minorRadius,t.env,`Torus.minorRadius`);return r.ok?O(rP(n.value,r.value)):r}function X4(e,t){let n=[];for(let r of e.points){let e=u4(r,t.env,`Polygon.point`);if(!e.ok)return e;n.push(e.value)}return yP(n)}function Z4(e,t){let n=l4(e.radius,t.env,`Circle.radius`);return n.ok?O(oP(n.value)):n}function Q4(e,t){let n=u4(e.from,t.env,`Line.from`);if(!n.ok)return n;let r=u4(e.to,t.env,`Line.to`);return r.ok?O(aP(n.value,r.value)):r}function $4(e,t){let n=u4(e.point,t.env,`Vertex.point`);return n.ok?O(bP(n.value)):n}function e3(e){return k(vo(N.NULL_SHAPE_INPUT,`${e}: empty result has no kernel representation`))}function t3(e,t,n){let r=e.evalNode(t);return r.ok?kE(r.value)?O(r.value):k(ho(N.CSG_NOT_3D,`${n}: operand did not produce a 3D shape`)):r}function n3(e,t){return{unsafe:!0,fuzzyValue:e.tolerance??t.tolerance}}function r3(e,t){if(e.a.kind===`Empty`)return t.evalNode(e.b);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=t3(t,e.a,`Fuse.a`);if(!n.ok)return n;let r=t3(t,e.b,`Fuse.b`);return r.ok?kA(n.value,r.value,n3(e,t)):r}function i3(e,t){if(e.a.kind===`Empty`)return e3(`Cut`);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=t3(t,e.a,`Cut.a`);if(!n.ok)return n;let r=t3(t,e.b,`Cut.b`);return r.ok?AA(n.value,r.value,n3(e,t)):r}function a3(e,t){if(e.a.kind===`Empty`||e.b.kind===`Empty`)return e3(`Intersect`);let n=t3(t,e.a,`Intersect.a`);if(!n.ok)return n;let r=t3(t,e.b,`Intersect.b`);return r.ok?jA(n.value,r.value,n3(e,t)):r}function o3(e,t,n){let r=[];for(let i of t){let t=t3(e,i,n);if(!t.ok)return t;r.push(t.value)}return O(r)}function s3(e,t){let n=e.shapes.filter(e=>e.kind!==`Empty`);if(n.length===0)return e3(`FuseAll`);if(n.length===1&&n[0])return t.evalNode(n[0]);let r=o3(t,n,`FuseAll.operand`);return r.ok?NA(r.value,n3(e,t)):r}function c3(e,t){if(e.base.kind===`Empty`)return e3(`CutAll`);let n=e.tools.filter(e=>e.kind!==`Empty`);if(n.length===0)return t.evalNode(e.base);let r=t3(t,e.base,`CutAll.base`);if(!r.ok)return r;let i=o3(t,n,`CutAll.tool`);return i.ok?PA(r.value,i.value,n3(e,t)):i}function l3(e){return k(vo(N.NULL_SHAPE_INPUT,`${e}: cannot transform an Empty node`))}function u3(e,t,n,r){return e?u4(e,t,n):O(r)}function d3(e,t){let n=U(),{handle:r,dispose:i}=n.composeTransform(t),a;try{a=jE(n.locate(e.wrapped,r))}finally{i()}return YO(e)&&$O(e,a),a}function f3(e,t){if(e.target.kind===`Empty`)return l3(`Translate`);let n=u4(e.vector,t.env,`Translate.vector`);if(!n.ok)return n;let r=t.evalNode(e.target);return r.ok?O(d3(r.value,[{type:`translate`,x:n.value[0],y:n.value[1],z:n.value[2]}])):r}function p3(e,t){if(e.target.kind===`Empty`)return l3(`Rotate`);let n=l4(e.angle,t.env,`Rotate.angle`);if(!n.ok)return n;let r=u3(e.axis,t.env,`Rotate.axis`,[0,0,1]);if(!r.ok)return r;let i=u3(e.at,t.env,`Rotate.at`,[0,0,0]);if(!i.ok)return i;let a=t.evalNode(e.target);return a.ok?O(d3(a.value,[{type:`rotate`,angle:n.value,axis:r.value,center:i.value}])):a}function m3(e,t){if(e.target.kind===`Empty`)return l3(`Scale`);let n=l4(e.factor,t.env,`Scale.factor`);if(!n.ok)return n;let r=u3(e.center,t.env,`Scale.center`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?O(rk(i.value,n.value,r.value)):i}function h3(e,t){if(e.target.kind===`Empty`)return l3(`Mirror`);let n=u3(e.normal,t.env,`Mirror.normal`,[1,0,0]);if(!n.ok)return n;let r=u3(e.at,t.env,`Mirror.at`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?O(nk(i.value,n.value,r.value)):i}function g3(e,t){let n=e.children.filter(e=>e.kind!==`Empty`);if(n.length===0)return k(vo(N.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 O(xP(r))}function _3(){return k(vo(N.NULL_SHAPE_INPUT,`Empty: cannot materialize an Empty node directly — only valid as boolean/transform operand`))}function v3(e,t){let n=t.evalNode(e.source);return n.ok?u$(s$(n.value,e.placements),{fuse:e.fuse}):n}function y3(e,t){switch(e.kind){case`Box`:return G4(e,t);case`Sphere`:return K4(e,t);case`Cylinder`:return q4(e,t);case`Cone`:return J4(e,t);case`Torus`:return Y4(e,t);case`Polygon`:return X4(e,t);case`Circle`:return Z4(e,t);case`Line`:return Q4(e,t);case`Vertex`:return $4(e,t);case`Empty`:return _3();case`Fuse`:return r3(e,t);case`Cut`:return i3(e,t);case`Intersect`:return a3(e,t);case`FuseAll`:return s3(e,t);case`CutAll`:return c3(e,t);case`Translate`:return f3(e,t);case`Rotate`:return p3(e,t);case`Scale`:return m3(e,t);case`Mirror`:return h3(e,t);case`Compound`:return g3(e,t);case`Instance`:return v3(e,t)}}function b3(e,t){if(typeof t==`number`)return N2(I2(e,!1),t);let n=I2(e,!0);n=F2(n,t.length);for(let e of t)n=N2(n,e);return n}function x3(e,t){if(t.size===0)return T2();let n=d4(e,t),r=Object.keys(n).sort(),i=T2();for(let e of r){i=k2(i,e);let t=n[e];t!==void 0&&(i=b3(i,t))}return i}function S3(e,t,n,r){let i=x3(t,e.freeParams),a=r===void 0?`d`:N2(T2(),r).toString(16);return`${L2(e.structuralHash)}:${n}:${L2(i)}:${a}`}var C3=[1,0,0,0];function w3(e,t){let n=l4(e.angle,t,`evaluateMesh.peelRigid`);if(!n.ok)return null;let r=e.axis?u4(e.axis,t,`evaluateMesh.peelRigid`):O([0,0,1]);if(!r.ok)return null;let i=e.at?u4(e.at,t,`evaluateMesh.peelRigid`):O([0,0,0]);return i.ok?{angle:n.value,axis:r.value,center:i.value}:null}function T3(e,t){let n=e,r=C3,i=[0,0,0];for(;;)if(n.kind===`Translate`){let e=u4(n.vector,t,`evaluateMesh.peelRigid`);if(!e.ok)break;let a=WP(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=w3(n,t);if(!e)break;let a=GP(e.axis,e.angle*Math.PI/180),o=qP(r,a),s=WP(r,e.center),c=WP(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 E3(e){return e[0]===1&&e[1]===0&&e[2]===0&&e[3]===0}function D3(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 O3(e,t,n){let[r,i,a]=n,o=E3(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;D3(c,s,l,u,d,f,r,i,a);let p=e.normals,m=new Float32Array(p.length);return D3(m,p,l,u,d,f,0,0,0),{...e,vertices:c,normals:m}}function k3(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 A3=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??_T()??`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 vT(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=Eo(),a=n.tolerance??i.tolerance,o=n.angularTolerance??i.angularTolerance,s=`${S3(e,t,this.kernelId,this.defaultTolerance)}|${Pk(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)),O(r);let{inner:i,rot:a,trans:o}=T3(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=ZE(c.value).map(mk),u=this.evaluate(e,t);if(!u.ok)return u;let d=ZE(u.value).map(mk),f=O3(r.value,a,o),p=k3(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),O(e)}}}let c=this.evaluate(e,t);if(!c.ok)return c;let l=vT(this.kernelId,()=>Wk(c.value,n));return r&&(this.meshCache.set(s,l),this.maxMeshCacheEntries!==void 0&&this.trimMeshCache(this.maxMeshCacheEntries)),O(l)}evaluateInner(e,t){let n=S3(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}),O(r);this.misses++;let i=y3(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 j3(e,t){try{var n=OT();let r=t(n.u(new A3(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()}}function M3(e){return{csgVersion:1,root:R3(e)}}function N3(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:N3(e.a),b:N3(e.b)};case`UnaryOp`:return{kind:`UnaryOp`,op:e.op,arg:N3(e.arg)};case`Component`:return{kind:`Component`,vec:N3(e.vec),index:e.index};case`BuildVec`:return{kind:`BuildVec`,dim:e.dim,components:e.components.map(N3)}}}function P3(e){switch(e.kind){case`Box`:return{kind:`Box`,x:N3(e.x),y:N3(e.y),z:N3(e.z)};case`Sphere`:return{kind:`Sphere`,radius:N3(e.radius)};case`Cylinder`:return{kind:`Cylinder`,radius:N3(e.radius),height:N3(e.height)};case`Cone`:return{kind:`Cone`,radius1:N3(e.radius1),radius2:N3(e.radius2),height:N3(e.height)};case`Torus`:return{kind:`Torus`,majorRadius:N3(e.majorRadius),minorRadius:N3(e.minorRadius)};case`Polygon`:return{kind:`Polygon`,points:e.points.map(N3)};case`Circle`:return{kind:`Circle`,radius:N3(e.radius)};case`Line`:return{kind:`Line`,from:N3(e.from),to:N3(e.to)};case`Vertex`:return{kind:`Vertex`,point:N3(e.point)};case`Empty`:return{kind:`Empty`,output:e.output};default:return}}function F3(e){switch(e.kind){case`Fuse`:case`Cut`:case`Intersect`:return{kind:e.kind,a:R3(e.a),b:R3(e.b),tolerance:e.tolerance};case`FuseAll`:return{kind:`FuseAll`,shapes:e.shapes.map(R3),tolerance:e.tolerance};case`CutAll`:return{kind:`CutAll`,base:R3(e.base),tools:e.tools.map(R3),tolerance:e.tolerance};default:return}}function I3(e){return e?N3(e):void 0}function L3(e){switch(e.kind){case`Translate`:return{kind:`Translate`,target:R3(e.target),vector:N3(e.vector)};case`Rotate`:return{kind:`Rotate`,target:R3(e.target),angle:N3(e.angle),axis:I3(e.axis),at:I3(e.at)};case`Scale`:return{kind:`Scale`,target:R3(e.target),factor:N3(e.factor),center:I3(e.center)};case`Mirror`:return{kind:`Mirror`,target:R3(e.target),normal:I3(e.normal),at:I3(e.at)};default:return}}function R3(e){return e.kind===`Compound`?{kind:`Compound`,children:e.children.map(R3)}:e.kind===`Instance`?{kind:`Instance`,source:R3(e.source),placements:e.placements,fuse:e.fuse}:P3(e)??F3(e)??L3(e)}function z3(e){return k(F(N.NULL_SHAPE_INPUT,`csg.fromJSON: ${e}`))}function B3(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function V3(e){return typeof e==`number`&&Number.isFinite(e)}function H3(e){return typeof e==`string`}function U3(e,t){if(!Array.isArray(e)||e.length!==3)return z3(`${t}: expected Vec3 array`);let[n,r,i]=e;return!V3(n)||!V3(r)||!V3(i)?z3(`${t}: Vec3 contains non-number`):O([n,r,i])}function W3(e,t){if(!Array.isArray(e)||e.length!==2)return z3(`${t}: expected Vec2 array`);let[n,r]=e;return!V3(n)||!V3(r)?z3(`${t}: Vec2 contains non-number`):O([n,r])}function G3(e){if(!B3(e))return z3(`input is not an object`);let t=e.csgVersion;if(t!==1)return z3(`unsupported csgVersion ${String(t)} (expected 1)`);let n=e.root;return $3(n)}function K3(e){if(!B3(e))return z3(`expression: not an object`);let t=e.kind;switch(t){case`NumLit`:return V3(e.value)?O(B2(e.value)):z3(`NumLit.value`);case`Vec3Lit`:{let t=U3(e.value,`Vec3Lit.value`);return t.ok?O(V2(t.value)):t}case`Vec2Lit`:{let t=W3(e.value,`Vec2Lit.value`);return t.ok?O(H2(t.value)):t}case`Param`:return H3(e.name)?O(U2(e.name)):z3(`Param.name`);case`BinOp`:return q3(e);case`UnaryOp`:return J3(e);case`Component`:return Y3(e);case`BuildVec`:return X3(e);default:return z3(`unknown expression kind: ${String(t)}`)}}function q3(e){let t=e.op;if(t!==`+`&&t!==`-`&&t!==`*`&&t!==`/`)return z3(`BinOp.op: ${String(t)}`);let n=K3(e.a);if(!n.ok)return n;let r=K3(e.b);return r.ok?O(W2(t,n.value,r.value)):r}function J3(e){let t=e.op;if(!H3(t)||![`neg`,`sin`,`cos`,`sqrt`,`abs`].includes(t))return z3(`UnaryOp.op: ${String(t)}`);let n=K3(e.arg);return n.ok?O(G2(t,n.value)):n}function Y3(e){let t=e.index;if(t!==0&&t!==1&&t!==2)return z3(`Component.index: ${String(t)}`);let n=K3(e.vec);return n.ok?O(K2(n.value,t)):n}function X3(e){let t=e.dim;if(t!==2&&t!==3)return z3(`BuildVec.dim: ${String(t)}`);let n=e.components;if(!Array.isArray(n))return z3(`BuildVec.components: not array`);if(n.length!==t)return z3(`BuildVec.components: expected ${t} components, got ${n.length}`);let r=[];for(let e of n){let t=K3(e);if(!t.ok)return t;r.push(t.value)}return O(q2(t,r))}function Z3(e,t){if(!Array.isArray(e))return z3(`${t}: not array`);let n=[];for(let t of e){let e=$3(t);if(!e.ok)return e;n.push(e.value)}return O(n)}function Q3(e){let t=e.tolerance;return t==null?O(void 0):V3(t)?O(t):z3(`tolerance: not a finite number`)}function $3(e){if(!B3(e))return z3(`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 t6(t,e);case`Fuse`:case`Cut`:case`Intersect`:return l6(t,e);case`FuseAll`:case`CutAll`:return u6(t,e);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return d6(t,e);case`Compound`:return _6(e);case`Instance`:return y6(e);default:return z3(`unknown node kind: ${String(t)}`)}}function e6(e,t,n){let r=K3(e[t]);return r.ok?O(n(r.value)):r}function t6(e,t){switch(e){case`Box`:return n6(t);case`Sphere`:return e6(t,`radius`,y4);case`Cylinder`:return r6(t);case`Cone`:return i6(t);case`Torus`:return a6(t);case`Polygon`:return o6(t);case`Circle`:return e6(t,`radius`,w4);case`Line`:return s6(t);case`Vertex`:return e6(t,`point`,E4);case`Empty`:return c6(t)}return z3(`unhandled primitive: ${e}`)}function n6(e){let t=K3(e.x);if(!t.ok)return t;let n=K3(e.y);if(!n.ok)return n;let r=K3(e.z);return r.ok?O(v4(t.value,n.value,r.value)):r}function r6(e){let t=K3(e.radius);if(!t.ok)return t;let n=K3(e.height);return n.ok?O(b4(t.value,n.value)):n}function i6(e){let t=K3(e.radius1);if(!t.ok)return t;let n=K3(e.radius2);if(!n.ok)return n;let r=K3(e.height);return r.ok?O(x4(t.value,n.value,r.value)):r}function a6(e){let t=K3(e.majorRadius);if(!t.ok)return t;let n=K3(e.minorRadius);return n.ok?O(S4(t.value,n.value)):n}function o6(e){let t=e.points;if(!Array.isArray(t))return z3(`Polygon.points: not array`);let n=[];for(let e of t){let t=K3(e);if(!t.ok)return t;n.push(t.value)}return O(C4(n))}function s6(e){let t=K3(e.from);if(!t.ok)return t;let n=K3(e.to);return n.ok?O(T4(t.value,n.value)):n}function c6(e){let t=e.output;switch(t){case`Solid`:return O(O4());case`Face`:return O(k4());case`Wire`:return O(A4());default:return z3(`Empty.output: ${String(t)}`)}}function l6(e,t){let n=$3(t.a);if(!n.ok)return n;let r=$3(t.b);if(!r.ok)return r;let i=Q3(t);if(!i.ok)return i;switch(e){case`Fuse`:return O(M4(n.value,r.value,i.value));case`Cut`:return O(N4(n.value,r.value,i.value));case`Intersect`:return O(P4(n.value,r.value,i.value))}}function u6(e,t){let n=Q3(t);if(!n.ok)return n;if(e===`FuseAll`){let e=Z3(t.shapes,`FuseAll.shapes`);return e.ok?O(F4(e.value,n.value)):e}let r=$3(t.base);if(!r.ok)return r;let i=Z3(t.tools,`CutAll.tools`);return i.ok?O(I4(r.value,i.value,n.value)):i}function d6(e,t){let n=$3(t.target);if(!n.ok)return n;switch(e){case`Translate`:return f6(t,n.value);case`Rotate`:return m6(t,n.value);case`Scale`:return h6(t,n.value);case`Mirror`:return g6(t,n.value)}}function f6(e,t){let n=K3(e.vector);return n.ok?O(R4(t,n.value)):n}function p6(e,t){if(e[t]===void 0)return O(void 0);let n=K3(e[t]);return n.ok?O(n.value):n}function m6(e,t){let n=K3(e.angle);if(!n.ok)return n;let r=p6(e,`axis`);if(!r.ok)return r;let i=p6(e,`at`);return i.ok?O(z4(t,n.value,{axis:r.value,at:i.value})):i}function h6(e,t){let n=K3(e.factor);if(!n.ok)return n;let r=p6(e,`center`);return r.ok?O(B4(t,n.value,{center:r.value})):r}function g6(e,t){let n=p6(e,`normal`);if(!n.ok)return n;let r=p6(e,`at`);return r.ok?O(V4(t,{normal:n.value,at:r.value})):r}function _6(e){let t=Z3(e.children,`Compound.children`);return t.ok?O(H4(t.value)):t}function v6(e){return Array.isArray(e)&&e.length===4&&e.every(e=>Array.isArray(e)&&e.length===4&&e.every(V3))}function y6(e){let t=$3(e.source);if(!t.ok)return t;let n=e.placements;return!Array.isArray(n)||!n.every(v6)?z3(`Instance.placements must be an array of 4x4 number matrices`):O(U4(t.value,n,e.fuse===!0))}function b6(e){return C6(e)}function x6(e){switch(e.kind){case`NumLit`:case`Vec3Lit`:case`Vec2Lit`:case`Param`:return e;case`BinOp`:{let t=x6(e.a),n=x6(e.b);if(t.kind===`NumLit`&&n.kind===`NumLit`)switch(e.op){case`+`:return B2(t.value+n.value);case`-`:return B2(t.value-n.value);case`*`:return B2(t.value*n.value);case`/`:return B2(t.value/n.value)}return t!==e.a||n!==e.b?W2(e.op,t,n):e}case`UnaryOp`:{let t=x6(e.arg);if(t.kind===`NumLit`){let n=t.value;switch(e.op){case`neg`:return B2(-n);case`sin`:return B2(Math.sin(n));case`cos`:return B2(Math.cos(n));case`sqrt`:return B2(Math.sqrt(n));case`abs`:return B2(Math.abs(n))}}return t===e.arg?e:G2(e.op,t)}case`Component`:{let t=x6(e.vec);return t.kind===`Vec3Lit`||t.kind===`Vec2Lit`&&(e.index===0||e.index===1)?B2(t.value[e.index]):t===e.vec?e:K2(t,e.index)}case`BuildVec`:{let t=e.components.map(x6);return S6(e.dim,t)||(t.some((t,n)=>t!==e.components[n])?q2(e.dim,t):e)}}}function S6(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?H2([n[0],n[1]]):V2([n[0],n[1],n[2]])}function C6(e){switch(e.kind){case`Box`:return v4(x6(e.x),x6(e.y),x6(e.z));case`Sphere`:return y4(x6(e.radius));case`Cylinder`:return b4(x6(e.radius),x6(e.height));case`Cone`:return x4(x6(e.radius1),x6(e.radius2),x6(e.height));case`Torus`:return S4(x6(e.majorRadius),x6(e.minorRadius));case`Polygon`:return C4(e.points.map(x6));case`Circle`:return w4(x6(e.radius));case`Line`:return T4(x6(e.from),x6(e.to));case`Vertex`:return E4(x6(e.point));case`Empty`:return e;case`Fuse`:return w6(e.a,e.b,e.tolerance);case`Cut`:return T6(e.a,e.b,e.tolerance);case`Intersect`:return E6(e.a,e.b,e.tolerance);case`FuseAll`:return D6(e.shapes,e.tolerance);case`CutAll`:return O6(e.base,e.tools,e.tolerance);case`Translate`:return k6(e.target,e.vector);case`Rotate`:return z4(C6(e.target),x6(e.angle),{axis:e.axis?x6(e.axis):void 0,at:e.at?x6(e.at):void 0});case`Scale`:return B4(C6(e.target),x6(e.factor),{center:e.center?x6(e.center):void 0});case`Mirror`:return V4(C6(e.target),{normal:e.normal?x6(e.normal):void 0,at:e.at?x6(e.at):void 0});case`Compound`:return H4(e.children.map(C6).filter(e=>e.kind!==`Empty`));case`Instance`:return U4(C6(e.source),e.placements,e.fuse)}}function w6(e,t,n){let r=C6(e),i=C6(t);return r.kind===`Empty`?i:i.kind===`Empty`?r:M4(r,i,n)}function T6(e,t,n){let r=C6(e),i=C6(t);return i.kind===`Empty`||r.kind===`Empty`?r:N4(r,i,n)}function E6(e,t,n){let r=C6(e),i=C6(t);return r.kind===`Empty`?r:i.kind===`Empty`?i:P4(r,i,n)}function D6(e,t){let n=e.map(C6).filter(e=>e.kind!==`Empty`);return n.length===0?O4():n.length===1?n[0]:F4(n,t)}function O6(e,t,n){let r=C6(e);if(r.kind===`Empty`)return r;let i=t.map(C6).filter(e=>e.kind!==`Empty`);return i.length===0?r:I4(r,i,n)}function k6(e,t){let n=C6(e),r=x6(t);if(r.kind!==`Vec3Lit`)return R4(n,r);let[i,a,o]=r.value;if(i===0&&a===0&&o===0)return n;if(n.kind===`Translate`){let e=x6(n.vector);if(e.kind===`Vec3Lit`)return R4(n.target,[e.value[0]+i,e.value[1]+a,e.value[2]+o])}return R4(n,r)}function A6(e,t,n){return j6(e,t,n)}function j6(e,t,n){return t(e)?n:M6(e,t,n)}function M6(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`:return e;case`Fuse`:return M4(j6(e.a,t,n),j6(e.b,t,n),e.tolerance);case`Cut`:return N4(j6(e.a,t,n),j6(e.b,t,n),e.tolerance);case`Intersect`:return P4(j6(e.a,t,n),j6(e.b,t,n),e.tolerance);case`FuseAll`:return F4(e.shapes.map(e=>j6(e,t,n)),e.tolerance);case`CutAll`:return I4(j6(e.base,t,n),e.tools.map(e=>j6(e,t,n)),e.tolerance);case`Translate`:return R4(j6(e.target,t,n),e.vector);case`Rotate`:return z4(j6(e.target,t,n),e.angle,{axis:e.axis,at:e.at});case`Scale`:return B4(j6(e.target,t,n),e.factor,{center:e.center});case`Mirror`:return V4(j6(e.target,t,n),{normal:e.normal,at:e.at});case`Compound`:return H4(e.children.map(e=>j6(e,t,n)));case`Instance`:return U4(j6(e.source,t,n),e.placements,e.fuse)}}function N6(e,t){t(e);for(let n of P6(e))N6(n,t)}function P6(e){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`: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]}}function F6(e){let t=0;return N6(e,()=>{t++}),t}var I6=bX({CSG_VERSION:()=>1,Evaluator:()=>A3,add:()=>J2,asScalarExpr:()=>X2,asVec2Expr:()=>$2,asVec3Expr:()=>Q2,binOp:()=>W2,box:()=>v4,buildVec:()=>q2,circle:()=>w4,component:()=>K2,compound:()=>H4,cone:()=>x4,cut:()=>N4,cutAll:()=>I4,cylinder:()=>b4,emptyFace:()=>k4,emptySolid:()=>O4,emptyWire:()=>A4,foldExpr:()=>x6,forEachNode:()=>N6,fromJSON:()=>G3,fuse:()=>M4,fuseAll:()=>F4,instance:()=>U4,intersect:()=>P4,line:()=>T4,mirror:()=>V4,mul:()=>Y2,nodeCount:()=>F6,numLit:()=>B2,optimize:()=>b6,outputKindOf:()=>W4,param:()=>U2,polygon:()=>C4,replaceNode:()=>A6,rotate:()=>z4,scale:()=>B4,sphere:()=>y4,toJSON:()=>M3,torus:()=>S4,translate:()=>R4,unaryOp:()=>G2,vec2Lit:()=>H2,vec3Lit:()=>V2,vertex:()=>E4,withEvaluator:()=>j3});export{tR as BaseSketcher2d,nR as BlueprintSketcher,co as BrepBugError,N as BrepErrorCode,a0 as BrepWrapperError,Ay as BrepkitAdapter,jK as CompoundSketch,i as DEFAULT_CAPABILITIES,gD as DEG2RAD,BT as DisposalScope,r as EXACT_BREP_CAPABILITIES,uq as FaceSketcher,G as HASH_CODE_MAX,Ra as OK,La as OcctWasmAdapter,_D as RAD2DEG,qK as Sketch,lq as Sketcher,JK as Sketches,NP as addChild,TP as addHoles,uF as addJoint,V$ as addMate,GF as addStep,YM as adjacentFaces,qa as all,Ha as andThen,CX as applyGlue,y1 as applyMatrix,Mk as approximateCurve,XT as as2D,YT as as3D,JD as asTopo,oN as assignRoles,eM as autoHeal,fP as bezier,cY as blueprintToDXF,GA as booleanPipeline,m2 as booleans,n0 as boss,$N as box,dP as bsplineApprox,M as bug,oq as cameraFromPlane,aq as cameraLookAt,QM as captureHint,eO as cast,jE as castShape,ME as castShape3D,F1 as chamfer,lj as chamferDistAngleShape,Mj as chamferWithEvolution,W$ as checkAllInterferences,Cj as checkBoolean,U$ as checkInterference,oP as circle,AP as circularPattern,hO as classifyPointOnFace,Hk as clearMeshCache,v1 as clone,aE as closedWire,io as collect,zP as collectShapes,GO as colorFaces,WO as colorShape,uM as complexExtrude,lk as composeTransforms,xP as compound,WK as compoundSketchExtrude,HK as compoundSketchFace,KK as compoundSketchLoft,GK as compoundSketchRevolve,vo as computationError,JQ as computeStraightSkeleton,nP as cone,b2 as construction,OQ as convexHull,sR as cornerFinder,RP as countNodes,DP as createAssembly,MP as createAssemblyNode,SJ as createBlueprint,iq as createCamera,xE as createCompound,CJ as createCompoundBlueprint,zN as createDerivedFaceRef,PM as createDistanceQuery,hE as createEdge,SN as createEdgeRef,_E as createFace,RT as createHandle,WF as createHistory,zT as createKernelHandle,Uk as createMeshCache,VD as createNamedPlane,fX as createOperationRegistry,zD as createPlane,sN as createRef,QF as createRegistry,vE as createShell,yE as createSolid,iX as createTaskQueue,mE as createVertex,AN as createVertexRef,gE as createWire,dX as createWorkerClient,_X as createWorkerHandler,vX as createWorkerPool,I6 as csg,To as currentQuality,mJ as curve2dBoundingBox,xJ as curve2dDistanceFrom,hJ as curve2dFirstPoint,bJ as curve2dIsOnCurve,gJ as curve2dLastPoint,vJ as curve2dParameter,_J as curve2dSplitAt,yJ as curve2dTangentAt,Tk as curveAxis,xk as curveEndPoint,Ek as curveIsClosed,Dk as curveIsPeriodic,wk as curveLength,Ok as curvePeriod,Sk as curvePointAt,bk as curveStartPoint,Ck as curveTangentAt,C1 as cut,qR as cut2D,T1 as cutAll,mj as cutAllBisect,IR as cutBlueprints,kj as cutWithEvolution,eP as cylinder,rF as cylindricalJoint,ZM as defaultScorer,oX as dequeueTask,W1 as describe,Vq as deserializeDrawing,aI as deserializeHistory,nO as deserializeShape,QD as downcast,z1 as draft,Uq as draw,Jq as drawCircle,Yq as drawEllipse,nJ as drawFaceOutline,$q as drawParametricFunction,Qq as drawPointsInterpolation,Xq as drawPolysides,tJ as drawProjection,Gq as drawRectangle,Wq as drawRoundedRectangle,Kq as drawSingleCircle,qq as drawSingleEllipse,Zq as drawText,cJ as drawingChamfer,aJ as drawingCut,sJ as drawingFillet,iJ as drawingFuse,oJ as drawingIntersect,rJ as drawingToSketchOnPlane,e0 as drill,jI as edgeFinder,GM as edgesOfFace,sP as ellipse,uP as ellipseArc,iP as ellipsoid,aX as enqueueTask,k as err,OP as exportAssemblySTEP,sY as exportDXF,JJ as exportGlb,qJ as exportGltf,Zk as exportIGES,LJ as exportOBJ,Yk as exportSTEP,GY as exportSTEPConfigured,Xk as exportSTL,DY as exportThreeMF,zF as exportURDF,Y1 as extrude,vM as extrudeAll,gP as face,mO as faceAxis,pO as faceCenter,PI as faceFinder,aO as faceGeomType,oO as faceOrientation,UM as facesOfEdge,WM as facesOfVertex,gZ as fieldBoolean,bZ as fieldContour,_Z as fieldOffset,yZ as fieldReinit,vZ as fieldShell,SA as fill,_P as filledFace,P1 as fillet,jj as filletWithEvolution,NO as findFacesByTag,IP as findNode,qF as findStep,rM as fixSelfIntersection,tM as fixShape,Ua as flatMap,Xa as flatten,sO as flipFaceOrientation,Ak as flipOrientation,ZY as fontMetrics,mF as forwardKinematics,K1 as fromBREP,hQ as fromKernelDir,mQ as fromKernelPnt,pQ as fromKernelVec,Qa as fromNullable,S1 as fuse,GR as fuse2D,w1 as fuseAll,vj as fuseAllBisect,FR as fuseBlueprints,Oj as fuseWithEvolution,k0 as gearGeometry,FX as getActiveVoxelId,uD as getBounds,wJ as getBounds2D,nD as getCompSolids,yk as getCurveType,MT as getDisposalStats,XE as getEdges,qO as getFaceColor,bO as getFaceOrigins,PO as getFaceTags,ZE as getFaces,ZK as getFont,mk as getHashCode,JF as getHistoryShape,U as getKernel,yT as getKernelCapabilities,CT as getKernelTier,uj as getNurbsCurveData,dj as getNurbsSurfaceData,kk as getOrientation,TJ as getOrientation2D,Po as getPerformanceStats,KO as getShapeColor,eE as getShapeKind,tD as getShells,LI as getSingleFace,eD as getSolids,iO as getSurfaceType,IO as getTagMetadata,$E as getVertices,PX as getVoxel,QE as getWires,jP as gridPattern,hM as guidedSweep,B1 as heal,Zj as healFace,Xj as healSolid,Qj as healWire,cP as helix,DQ as hull,Y$ as importDXF,f1 as importGLB,JY as importIGES,$$ as importOBJ,KY as importSTEP,qY as importSTL,WY as importSVG,UY as importSVGPathD,d1 as importThreeMF,UF as importURDF,DT as init,mT as initFromManifold,TT as initFromOC,IX as initVoxel,vO as innerWires,s$ as instance,l$ as instanceCount,c$ as instanceGrid,f$ as instancedMesh,jk as interpolateCurve,E1 as intersect,JR as intersect2D,LR as intersectBlueprints,Aj as intersectWithEvolution,YE as invalidateShapeCache,OF as inverseKinematics,v2 as io,yo as ioError,JT as is2D,qT as is3D,tX as isBatchRequest,TX as isChamferRadius,tE as isClosedWire,tO as isCompSolid,OE as isCompound,HN as isDerivedFaceRef,eX as isDisposeRequest,CE as isEdge,UN as isEdgeRef,J1 as isEmpty,_k as isEqualShape,A as isErr,rX as isErrorResponse,TE as isFace,GN as isFaceRef,EX as isFilletRadius,QY as isInitRequest,EJ as isInside2D,o$ as isInstanced,KN as isLineageRef,KT as isLive,rE as isManifoldShell,wX as isNumber,za as isOk,$Y as isOperationRequest,nE as isOrientedFace,lE as isPlanarFace,uE as isPlanarWire,tq as isProjectionPlane,cX as isQueueEmpty,gk as isSameShape,AE as isShape1D,kE as isShape3D,EE as isShell,DE as isSolid,nX as isSuccessResponse,q1 as isValid,iE as isValidSolid,SE as isVertex,WN as isVertexRef,wE as isWire,lD as iterCompSolids,rD as iterEdges,iD as iterFaces,cD as iterShells,sD as iterSolids,XD as iterTopo,oD as iterVertices,aD as iterWires,AF as jointTrajectory,lF as jointTransform,NF as jointsFromDH,BE as kernelCall,VE as kernelCallRaw,HE as kernelCallScoped,P as kernelError,sQ as latticeInfill,cQ as latticeInfillShape,aP as line,kP as linearPattern,XK as loadFont,x1 as locate,Z1 as loft,bM as loftAll,bq as makeBaseBox,Q0 as makeExternalGear,$0 as makeInternalGear,UD as makePlane,t2 as makePlanetaryGear,rq as makeProjectedEdges,sE as manifoldShell,Ba as map,Za as mapBoth,Va as mapErr,ro as match,u$ as materialize,AM as measureArea,FM as measureCurvatureAt,IM as measureCurvatureAtMid,MM as measureDistance,NM as measureDistanceProps,jM as measureLength,OM as measureLinearProps,DM as measureSurfaceProps,kM as measureVolume,EM as measureVolumeProps,_2 as measurement,hF as mechanismDOF,H1 as mesh,U1 as meshEdges,nA as meshLODs,iA as meshLODsProgressive,Qk as meshMultiLOD,MQ as minkowski,g1 as mirror,jJ as mirror2D,fJ as mirrorDrawing,r0 as mirrorJoin,h2 as modifiers,rI as modifyStep,_o as moduleInitError,mM as multiSectionSweep,fO as normalAt,L1 as offset,CP as offsetFace,QX as offsetMesh,tZ as offsetShape,Nk as offsetWire2D,O as ok,Wa as or,Ga as orElse,GL as organiseBlueprints,oE as orientedFace,gO as outerWire,x2 as patterns,sX as pendingCount,so as pipeline,KD as pivotPlane,dE as planarFace,iF as planarJoint,fE as planarWire,q0 as planetPlacements,t0 as pocket,lO as pointOnSurface,VX as pointsInside,yP as polygon,NQ as polyhedron,gq as polysideInnerRadius,cR as polysidesBlueprint,Pj as positionOnCurve,ET as prewarm,p2 as primitives,nF as prismaticJoint,sq as projectEdges,dO as projectPointOnFace,y2 as query,bo as queryError,i0 as rectangularPattern,pX as registerHandler,hT as registerKernel,ST as registerKernelTier,$F as registerOperation,ZF as registerShape,NX as registerVoxel,lX as rejectAll,PP as removeChild,_O as removeHolesFromFace,WX as repairMesh,nI as replayFrom,tI as replayHistory,NT as resetDisposalStats,Fo as resetPerformanceStats,ik as resize,$ as resolve,p1 as resolve3D,BN as resolveDerivedFaceRef,xD as resolveDirection,CN as resolveEdgeRef,JN as resolveLineageRef,HD as resolvePlane,pN as resolveRef,XN as resolveRefIn,QN as resolveRefParams,jN as resolveVertexRef,pJ as reverseCurve,tF as revoluteJoint,X1 as revolve,n$ as roof,h1 as rotate,kJ as rotate2D,uJ as rotateDrawing,lR as roundedRectangleBlueprint,_1 as scale,AJ as scale2D,dJ as scaleDrawing,IZ as sdfBox,BZ as sdfCapsule,zZ as sdfCone,RZ as sdfCylinder,QZ as sdfFieldAxialRamp,tQ as sdfFieldClamp,ZZ as sdfFieldConst,eQ as sdfFieldFromSdf,$Z as sdfFieldRadialRamp,KZ as sdfLattice,HZ as sdfPlane,LZ as sdfRoundedBox,FZ as sdfSphere,qZ as sdfStrutLattice,WZ as sdfSweep,VZ as sdfTorus,D1 as section,O1 as sectionToFace,iI as serializeHistory,sF as setJointValue,oF as setJointValues,yO as setShapeOrigin,FO as setTagMetadata,wP as sewShells,C0 as shape,KX as shapeToMeshInput,ZD as shapeType,XM as sharedEdges,I1 as shell,$X as shellMesh,nZ as shellShape,Nj as shellWithEvolution,V1 as simplify,dq as sketchCircle,fq as sketchEllipse,RK as sketchExtrude,FK as sketchFace,_q as sketchFaceOffset,yq as sketchHelix,BK as sketchLoft,PJ as sketchOnFace2D,NJ as sketchOnPlane2D,vq as sketchParametricFunction,hq as sketchPolysides,pq as sketchRectangle,LK as sketchRevolve,mq as sketchRoundedRectangle,zK as sketchSweep,YY as sketchText,IK as sketchWires,go as sketcherStateError,A1 as slice,SP as solid,nM as solidFromShell,H$ as solveAssembly,tP as sphere,aF as sphericalJoint,k1 as split,YF as stepCount,XF as stepsFrom,MJ as stretch2D,vP as subFace,lM as supportExtrude,uT as supportsConstraintSketch,lT as supportsProjection,SQ as surfaceFromGrid,TQ as surfaceFromImage,cM as sweep,MO as tagFaces,pP as tangentArc,Ja as tap,Ya as tapErr,$K as textBlueprints,XY as textMetrics,R1 as thicken,oI as thread,lP as threePointArc,G1 as toBREP,ij as toBufferGeometryData,aj as toGroupedBufferGeometryData,uQ as toKernelVec,sj as toLODGeometryData,cj as toLODGeometryLevels,oj as toLineGeometryData,DJ as toSVGPathD,yD as toVec2,vD as toVec3,rP as torus,lQ as tpmsLattice,b1 as transformCopy,g2 as transforms,m1 as translate,OJ as translate2D,lJ as translateDrawing,GD as translatePlane,ao as tryCatch,oo as tryCatchAsync,dM as twistExtrude,ho as typeCastError,KF as undoLast,xo as unsupportedError,j as unwrap,no as unwrapErr,eo as unwrapOr,to as unwrapOrElse,FP as updateNode,lN as updateRoles,cO as uvBounds,uO as uvCoordinates,cE as validSolid,P0 as validatePlanetary,F as validationError,Jj as variableFillet,SD as vecAdd,PD as vecAngle,DD as vecCross,AD as vecDistance,ED as vecDot,MD as vecEquals,ND as vecIsZero,OD as vecLength,kD as vecLengthSq,TD as vecNegate,jD as vecNormalize,FD as vecProjectToPlane,RD as vecRepr,ID as vecRotate,wD as vecScale,CD as vecSub,bP as vertex,kX as vertexFinder,hD as vertexPosition,JM as verticesOfEdge,KM as verticesOfFace,eZ as voxelBoolean,hZ as voxelBooleanField,SZ as voxelBooleanFieldShapes,rZ as voxelBooleanShapes,mZ as voxelField,xZ as voxelFieldFromShape,LP as walkAssembly,BX as windingNumbers,mP as wire,II as wireFinder,hP as wireLoop,qM as wiresOfFace,vT as withKernel,vQ as withKernelDir,_Q as withKernelPnt,gQ as withKernelVec,bT as withQuality,VT as withScope,WT as withScopeResult,GT as withScopeResultAsync,wT as withTier,Ka as zipResults};
60
+ `),n=[],r=[];for(let e of t){let t=e.trim();if(t.startsWith(`v `)){let e=Z$(t);e&&n.push(e)}else if(t.startsWith(`f `)){let e=Q$(t);e.length>=3&&r.push(e)}}if(n.length===0||r.length===0)return k(yo(N.OBJ_IMPORT_FAILED,`OBJ file contains no valid geometry`));try{return e1(n,r)}catch(e){let t=e instanceof Error?e.message:String(e);return k(yo(N.OBJ_IMPORT_FAILED,`OBJ import failed: ${t}`,e))}}function e1(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 X$(n,N.OBJ_IMPORT_FAILED)}function t1(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 n1(e){return e>=97&&e<=122||e>=65&&e<=90||e>=48&&e<=57||e===95}function r1(e){let t={},n=0;for(;n<e.length;){let r=e.indexOf(`="`,n);if(r<0)break;let i=r;for(;i>0&&n1(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 i1(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 a1(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 o1(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 s1(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=r1(e.slice(r,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of i1(a,`color`)){let t=r1(e).color;t!==void 0&&l.push(o1(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=r1(e.slice(n,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of i1(a,`base`)){let t=r1(e).displaycolor;t===void 0?l.push([0,0,0,1]):l.push(o1(t))}t.set(c,l)}return t}function c1(e){let t=[],n=[],r=[],i=s1(e);for(let n of i1(e,`vertex`)){let e=r1(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=a1(e,`object`);if(s!==null){let e=s.indexOf(`>`);if(e>=0){let t=r1(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 i1(e,`triangle`)){let e=r1(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 l1(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 u1(e){let t=U(),n=e.vertices.map(([e,t,n])=>({x:e,y:t,z:n})),r=e.triangles;try{return O(jE(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 X$(t,N.THREEMF_IMPORT_FAILED)}}async function d1(e){try{let t=await e.arrayBuffer(),n=t1(new Uint8Array(t),`3D/3dmodel.model`);if(!n)return k(yo(N.THREEMF_IMPORT_FAILED,`3MF archive does not contain 3D/3dmodel.model (or uses unsupported compression)`));let r=c1(new TextDecoder().decode(n));if(r.vertices.length===0||r.triangles.length===0)return k(yo(N.THREEMF_IMPORT_FAILED,`3MF model contains no valid geometry`));let i=u1(r);if(i.ok){let e=l1(r.triangleColors);e!==null&&WO(i.value,e)}return i}catch(e){let t=e instanceof Error?e.message:String(e);return k(yo(N.THREEMF_IMPORT_FAILED,`3MF import failed: ${t}`,e))}}async function f1(e){try{let t=await e.arrayBuffer();return O(jE(U().importGLB(t)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(yo(N.GLB_IMPORT_FAILED,`Failed to import GLB: ${t}`,e))}}function $(e){return`__wrapped`in e?e.val:e}function p1(e){return $(e)}function m1(e,t){return ek($(e),t)}function h1(e,t,n){let r=n?.at;return tk($(e),t,r,n?.axis)}function g1(e,t){let n=t?.at;return nk($(e),t?.normal??[1,0,0],n)}function _1(e,t,n){return rk($(e),t,n?.center)}function v1(e){return fk($(e))}function y1(e,t){return ck($(e),t)}function b1(e,t){return dk($(e),t)}function x1(e,t){return uk($(e),t)}function S1(e,t,n){return kA($(e),$(t),{...n,unsafe:!0})}function C1(e,t,n){return AA($(e),$(t),{...n,unsafe:!0})}function w1(e,t){return NA(e.map(e=>$(e)),{...t,unsafe:!0})}function T1(e,t,n){return PA($(e),t.map(e=>$(e)),{...n,unsafe:!0})}function E1(e,t,n){return jA($(e),$(t),{...n,unsafe:!0})}function D1(e,t,n){return IA($(e),t,n)}function O1(e,t,n){return HA($(e),t,n)}function k1(e,t){return UA($(e),t)}function A1(e,t,n){return WA($(e),t,n)}function j1(e,t){if(e!==void 0)return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(jI()).findAll(t)}function M1(e,t){return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(PI()).findAll(t)}function N1(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 P1(e,t,n){let r=$(e),i,a;return n===void 0?(i=void 0,a=t):(i=j1(t,r),a=n),Hj(r,i,a)}function F1(e,t,n){let r=$(e),i,a;n===void 0?(i=void 0,a=t):(i=j1(t,r),a=n);let o=N1(a);return o.mode===`distAngle`?lj(r,[...i??XE(r)],o.distance,o.angle):Uj(r,i,o.distance)}function I1(e,t,n,r){let i=$(e);return Wj(i,M1(t,i),n,r?.tolerance)}function L1(e,t,n){return Gj($(e),t,n?.tolerance)}function R1(e,t){return Bj($(e),t)}function z1(e,t,n){let r=$(e);return qj(r,M1(t,r),n.pullDirection,n.neutralPlane,n.angle)}function B1(e){return $j($(e))}function V1(e){return vk($(e))}function H1(e,t){return Wk($(e),t)}function U1(e,t){return Gk($(e),t)}function W1(e){return mD($(e))}function G1(e){return pk($(e))}function K1(e){return nO(e)}function q1(e){return Yj($(e))}function J1(e){return hk($(e))}function Y1(e,t){return gM($(e),typeof t==`number`?[0,0,t]:t)}function X1(e,t){let n=t?.at??[0,0,0];return _M($(e),n,t?.axis??[0,0,1],t?.angle??2*Math.PI)}function Z1(e,t){return yM(e.map(e=>$(e)),t)}function Q1(e,n){if(n===void 0){let t=ZE(e);if(t.length===0)return k(F(N.COMPOUND_NO_FACES,`compoundOps: shape has no faces`));let n=oA(t),r=pO(n)[2];for(let e=1;e<t.length;e++){let i=aA(t,e),a=pO(i)[2];a>r&&(n=i,r=a)}return O(n)}if(typeof n==`function`){let r=n(PI()).findAll(e);return r.length===0?k(bo(N.COMPOUND_FACE_NOT_FOUND,`compoundOps: face finder matched no faces`)):O(t(r,0))}return O(n)}function $1(e){return`sketchOnPlane`in e&&typeof e.sketchOnPlane==`function`?{wire:e.sketchOnPlane(`XY`).wire,owned:!0}:{wire:e,owned:!1}}function e0(e,t){let n=$(e),{at:r,radius:i,axis:a}=t,o=a??[0,0,1];if(i<=0)return k(F(`DRILL_INVALID_RADIUS`,`Drill radius must be positive`));if(ND(o))return k(F(`DRILL_ZERO_AXIS`,`Drill axis cannot be zero`));let s=jD(o),c=r.length===2?[r[0],r[1],0]:[r[0],r[1],r[2]],l;if(t.depth!==void 0)l=YA(i,t.depth,c,s);else{let e=uD(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=YA(i,a-r,[c[0]+s[0]*r,c[1]+s[1]*r,c[2]+s[2]*r],s)}try{return AA(n,l,{unsafe:!0})}finally{l[Symbol.dispose]()}}function t0(e,t){try{var n=OT();let r=$(e),{profile:i,depth:a}=t;if(a<=0)return k(F(`POCKET_INVALID_DEPTH`,`Pocket depth must be positive`));let o=Q1(r,t.face);if(A(o))return o;let s=o.value,c=fO(s),l=pO(s),u=n.u(new BT),{wire:d,owned:f}=$1(i);f&&u.register(d);let p=xA(d);if(A(p))return p;u.register(p.value);let m=gM(u.register(ek(p.value,l)),wD(jD(c),-a));return A(m)?m:(u.register(m.value),AA(r,m.value,{unsafe:!0}))}catch(e){n.e=e}finally{n.d()}}function n0(e,t){try{var n=OT();let r=$(e),{profile:i,height:a}=t;if(a<=0)return k(F(`BOSS_INVALID_HEIGHT`,`Boss height must be positive`));let o=Q1(r,t.face);if(A(o))return o;let s=o.value,c=fO(s),l=pO(s),u=n.u(new BT),{wire:d,owned:f}=$1(i);f&&u.register(d);let p=xA(d);if(A(p))return p;u.register(p.value);let m=gM(u.register(ek(p.value,l)),wD(jD(c),a));return A(m)?m:(u.register(m.value),kA(r,m.value,{unsafe:!0}))}catch(e){n.e=e}finally{n.d()}}function r0(e,t){try{var n=OT();let r=$(e),i=t?.normal??[1,0,0],a=t?.at;return ND(i)?k(F(`MIRROR_ZERO_NORMAL`,`Mirror plane normal cannot be zero`)):kA(r,n.u(nk(r,i,a)),{unsafe:!0})}catch(e){n.e=e}finally{n.d()}}function i0(e,t){let n=$(e),{xDir:r,xCount:i,xSpacing:a,yDir:o,yCount:s,ySpacing:c}=t;if(i<1||s<1)return k(F(`PATTERN_INVALID_COUNT`,`Pattern counts must be at least 1`));if(ND(r))return k(F(`PATTERN_ZERO_DIRECTION`,`X direction cannot be zero`));if(ND(o))return k(F(`PATTERN_ZERO_DIRECTION`,`Y direction cannot be zero`));if(i===1&&s===1)return O(n);let l=jD(r),u=jD(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=ek(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 NA(d,{unsafe:!0})}finally{for(let e of f)e[Symbol.dispose]()}}var a0=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 o0(e){if(A(e))throw new a0(e.error);return e.value}function s0(e){return e}function c0(e){return e}function l0(e){return e}function u0(e){return e}function d0(e){return{val:e,__wrapped:!0,translate:t=>x0(m1(e,t)),rotate:(t,n)=>x0(h1(e,t,n)),mirror:t=>x0(g1(e,t)),scale:(t,n)=>x0(_1(e,t,n)),applyMatrix:t=>x0(o0(y1(e,t))),moveX:t=>x0(m1(e,[t,0,0])),moveY:t=>x0(m1(e,[0,t,0])),moveZ:t=>x0(m1(e,[0,0,t])),rotateX:t=>x0(h1(e,t,{axis:[1,0,0]})),rotateY:t=>x0(h1(e,t,{axis:[0,1,0]})),rotateZ:t=>x0(h1(e,t,{axis:[0,0,1]})),bounds:()=>uD(e),describe:()=>W1(e),clone:()=>x0(o0(v1(e))),mesh:t=>H1(e,t),meshEdges:t=>U1(e,t),isValid:()=>q1(e),isEmpty:()=>J1(e),heal:()=>x0(o0(B1(e))),simplify:()=>x0(o0(V1(e))),toBREP:()=>o0(G1(e)),apply:t=>x0(t(e)),applyResult:t=>x0(o0(t(e))),done:()=>e}}function f0(e){return{fuse:(t,n)=>S0(o0(S1(e,$(t),{...n,unsafe:!0}))),cut:(t,n)=>S0(o0(C1(e,$(t),{...n,unsafe:!0}))),intersect:(t,n)=>S0(o0(E1(e,$(t),{...n,unsafe:!0}))),fuseAll:(t,n)=>S0(u0(o0(NA([e,...t.map($)],{...n,unsafe:!0})))),cutAll:(t,n)=>S0(u0(o0(PA(e,t,{...n,unsafe:!0})))),section:(t,n)=>x0(o0(D1(e,t,n))),split:t=>x0(o0(k1(e,t))),slice:(t,n)=>o0(A1(e,t,n))}}function p0(e){return{fillet(...t){return t.length===1?S0(u0(o0(P1(s0(e),t[0])))):S0(u0(o0(P1(s0(e),t[0],t[1]))))},chamfer(...t){return t.length===1?S0(u0(o0(F1(s0(e),t[0])))):S0(u0(o0(F1(s0(e),t[0],t[1]))))},shell:(t,n,r)=>S0(u0(o0(I1(s0(e),t,n,r)))),offset:(t,n)=>S0(u0(o0(L1(s0(e),t,n)))),draft:(t,n)=>S0(u0(o0(z1(s0(e),t,n))))}}function m0(e){return{drill:t=>S0(o0(e0(e,t))),pocket:t=>S0(o0(t0(e,t))),boss:t=>S0(o0(n0(e,t))),mirrorJoin:t=>S0(o0(r0(e,t))),rectangularPattern:t=>S0(o0(i0(e,t)))}}function h0(e){return{volume:()=>o0(kM(e)),area:()=>o0(AM(e)),volumeProps:()=>o0(EM(e)),surfaceProps:()=>o0(DM(e))}}function g0(e){return{edges:()=>XE(e),faces:()=>ZE(e),wires:()=>QE(e),vertices:()=>$E(e)}}function _0(e){return{linearPattern:(t,n,r)=>S0(u0(o0(kP(e,t,n,r)))),circularPattern:(t,n,r)=>S0(u0(o0(AP(e,t,n,r))))}}function v0(e){return{...d0(e),...f0(e),...p0(e),...m0(e),...h0(e),...g0(e),..._0(e)}}function y0(e){return{...d0(e),length:()=>wk(e),startPoint:()=>bk(e),endPoint:()=>xk(e),pointAt:t=>Sk(e,t),tangentAt:t=>Ck(e,t),isClosed:()=>Ek(e),sweep(t,n){if(!wE(e))throw Error(`sweep requires a Wire`);let r=o0(cM(l0(e),$(t),n));return S0(Array.isArray(r)?r[0]:r)}}}function b0(e){return{...d0(e),area:()=>o0(AM(e)),normalAt:t=>fO(e,t),center:()=>pO(e),surfaceType:()=>o0(iO(e)),outerWire:()=>gO(e),innerWires:()=>vO(e),extrude:t=>S0(o0(Y1(c0(e),t))),revolve:t=>S0(o0(X1(c0(e),t)))}}function x0(e){return kE(e)?v0(e):TE(e)?b0(e):CE(e)||wE(e)?y0(e):d0(e)}function S0(e){return v0(e)}function C0(e){if(e&&typeof e==`object`&&`face`in e&&typeof e.face==`function`&&`_defaultOrigin`in e)return b0(e.face());if(e&&typeof e==`object`&&`wrapped`in e)return TE(e)?b0(e):kE(e)?v0(e):CE(e)||wE(e)?y0(e):d0(e);throw Error(`shape() requires a Sketch or branded shape type`)}var w0=.25,T0=e=>Math.tan(e)-e;function E0(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 D0(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(E0(e,s*t,n,i))}return a}function O0(e){return Math.max(16,Math.round(8*Math.sqrt(e)))}function k0(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 A0(e,t,n){if(t===0)return O(e);let r=T0(e)+2*t*Math.tan(e)/n,i,a;if(r>T0(e)?(i=e,a=Math.PI/2-1e-6):(i=1e-4,a=e),r>T0(a)||r<T0(i))return k(F(`GEAR_PA_OUT_OF_RANGE`,`working pressure angle out of range — target inv(αw)=${r.toFixed(4)} not in [${T0(i).toFixed(4)}, ${T0(a).toFixed(4)}]`,void 0,{target:r,invLo:T0(i),invHi:T0(a)}));for(let e=0;e<50;e++){let e=.5*(i+a);T0(e)<r?i=e:a=e}return O(.5*(i+a))}function j0(e,t,n,r,i){return A0(e,t+n,r+i)}function M0(e,t,n,r,i){return A0(e,n-t,i-r)}function N0(e,t,n,r,i){return(e+t)*n*Math.cos(r)/(2*Math.cos(i))}function P0(e,t,n,r){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(n))return k(F(`GEAR_NON_INTEGER_TEETH`,`tooth counts and planet count must be integers`));if(e<4||t<4||n<2)return k(F(`GEAR_TEETH_TOO_FEW`,`zs ≥ 4, zp ≥ 4, N ≥ 2 required`));if((2*e+2*t)%n!=0)return k(F(`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?k(F(`GEAR_PLANET_COLLISION`,`planet tips would collide: (zs+zp)·sin(π/N) = ${a.toFixed(3)} ≤ planet tip = ${i.toFixed(3)}`)):O(void 0)}function F0(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 I0(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 L0(e,t){return 1-e*Math.sin(t)*Math.sin(t)/2}function R0(e,t,n){return Math.max(0,L0(e,t)-n)}function z0(e){return e<8?.2:.485-2.88/e}function B0(e,t,n,r){let i=e*1e3,a=z0(r);return a<=0||n<=0||t<=0?1/0:2*i/(r*t*t*n*a)}function V0(e,t,n=!1){let r=(1.4+6.5/e)*(20/(t*180/Math.PI))**.15;return n?r*.85:r}function H0(e,t,n,r,i,a=!1){return B0(e,t,n,r)*V0(r,i,a)}function U0(e){return e/2}function W0(e,t){return e+2*t}function G0(e){return e%2==0?Math.PI/e:0}function K0(e,t,n){return e*(1+t/n)+G0(n)}function q0(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=P0(n,r,i,s);if(A(c))return c;let l=j0(a,o,s,n,r);if(A(l))return l;let u=N0(n,r,t,a,l.value),d=[];for(let e=0;e<i;e++){let t=e*2*Math.PI/i,a=K0(t,n,r);d.push({rotationDeg:a*180/Math.PI,position:[u*Math.cos(t),u*Math.sin(t),0]})}return O(d)}function J0(e,t,n,r,i){let a=t*e.toothPitch,o=(t+1)%n*e.toothPitch,s=T0(e.alphaPitch),c=a-e.halfToothAngle-s,l=a+e.halfToothAngle+s,u=D0(e.rb,e.alphaTip,c,r,1),d=D0(e.rb,e.alphaTip,l,r,-1).reverse(),f=oA(u),p=sA(u),m=oA(d),h=sA(d),g=[],_=e=>{i.register(e),g.push(e)},v=e.isInternal?e.rb<e.rRoot:e.rb>e.rRoot;v&&_(uA([e.rRoot*Math.cos(c),e.rRoot*Math.sin(c),0],f));let y=e.rPitch*1e-5,b=_A(u,{tolerance:y});if(A(b))return b;_(b.value),_(mA(p,[e.rTip*Math.cos(a),e.rTip*Math.sin(a),0],m));let x=_A(d,{tolerance:y});if(A(x))return x;_(x.value),v&&_(uA(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),_(mA(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])),O(g)}function Y0(e){return Z0(e,!1)}function X0(e){return Z0(e,!0)}function Z0(e,t){try{var n=OT();let{teeth:r,moduleSize:i,pressureAngle:a,shift:o,clearance:s,flankThinning:c,samples:l=O0(i)}=e;if(r<4)return k(F(`GEAR_TEETH_TOO_FEW`,`gear needs ≥ 4 teeth, got ${r}`));if(i<=0)return k(F(`GEAR_MODULE_NONPOSITIVE`,`module must be > 0, got ${i}`));let u=k0(r,i,a,o,s,c,t),d=n.u(new BT),f=[];for(let e=0;e<r;e++){let t=J0(u,e,r,l,d);if(A(t))return t;f.push(...t.value)}let p=bA(f);return A(p)?p:O(p.value)}catch(e){n.e=e}finally{n.d()}}function Q0(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=w0,flankThinning:s=0,bore:c=0,samples:l}=e;if(r<=0)return k(F(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));if(l!==void 0&&(!Number.isInteger(l)||l<1))return k(F(`GEAR_SAMPLES_INVALID`,`samples must be a positive integer; got ${String(l)}`));let u=i*Math.PI/180,d=k0(t,n,u,a,o,s,!1);if(c>0&&c>=2*d.rRoot)return k(F(`GEAR_BORE_TOO_LARGE`,`bore diameter ${c.toFixed(2)} ≥ root diameter ${(2*d.rRoot).toFixed(2)} — would erase the gear teeth`));let f=Y0({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(A(f))return f;let p=e2(t,u,a);return a2(f.value,r,c,d,p)}function $0(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=w0,flankThinning:s=0,ringWallThickness:c=2*e.moduleSize,samples:l}=e;if(r<=0)return k(F(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));if(c<=0)return k(F(`GEAR_WALL_NONPOSITIVE`,`ringWallThickness must be > 0`));if(l!==void 0&&(!Number.isInteger(l)||l<1))return k(F(`GEAR_SAMPLES_INVALID`,`samples must be a positive integer; got ${String(l)}`));let u=i*Math.PI/180,d=X0({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(A(d))return d;let f=k0(t,n,u,a,o,s,!0),p=i2(f.rPitch+c);return A(p)?p:s2(p.value,d.value,r,f,[])}function e2(e,t,n){let r=R0(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 t2(e){let t=r2(e);if(A(t))return t;let n=t.value,r=n2(n);if(A(r))return r;let{sun:i,planet:a,ring:o}=r.value,s=d2(n,i,a,o),c=l2(a.solid,n);a.solid.delete();let l=u2(o.solid,n.zr),u=f2(n,s);return O({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 n2(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=Q0({...n,teeth:e.sunTeeth,shift:e.sunShift,bore:e.sunBore});if(A(r))return r;let i=Q0({...n,teeth:e.planetTeeth,shift:e.planetShift,bore:e.planetBore});if(A(i))return r.value.solid.delete(),i;let a=$0({...n,teeth:e.zr,shift:e.ringShift,ringWallThickness:e.ringWallThickness});return A(a)?(r.value.solid.delete(),i.value.solid.delete(),a):O({sun:r.value,planet:i.value,ring:a.value})}function r2(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 k(F(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));let u=P0(n,r,i,c);if(A(u))return u;let d=W0(n,r),f=j0(o,s,c,n,r);if(A(f))return f;let p=M0(o,c,l,r,d);if(A(p))return p;let m=N0(n,r,t,o,f.value);return O({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:U0(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 i2(e){try{var t=OT();let n=bA([t.u(new BT).register(dA(e,[0,0,0],[0,0,1]))]);return A(n)?n:O(n.value)}catch(e){t.e=e}finally{t.d()}}function a2(e,t,n,r,i){try{var a=OT();let o=a.u(new BT);o.register(e);let s=xA(e);if(A(s))return s;o.register(s.value);let c=gM(s.value,[0,0,t]);if(A(c))return c;if(n<=0)return O(c2(c.value,r,i));let l=a.u(new BT);l.register(c.value);let u=o2(n/2);if(A(u))return u;l.register(u.value);let d=gM(u.value,[0,0,t+1]);if(A(d))return d;l.register(d.value);let f=l.register(ek(d.value,[0,0,-.5])),p=AA(c.value,f);return A(p)?p:O(c2(p.value,r,i))}catch(e){a.e=e}finally{a.d()}}function o2(e){let t=i2(e);return A(t)?t:xA(t.value)}function s2(e,t,n,r,i){let a=xA(e,[t]);if(A(a))return a;let o=gM(a.value,[0,0,n]);return A(o)?o:O(c2(o.value,r,i))}function c2(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 l2(e,t){let n=[];try{for(let r=0;r<t.numPlanets;r++){let i=r*2*Math.PI/t.numPlanets,a=tk(e,K0(i,t.sunTeeth,t.planetTeeth)*180/Math.PI);try{let e=[t.centerDistance*Math.cos(i),t.centerDistance*Math.sin(i),0];n.push(ek(a,e))}finally{a.delete()}}return n}catch(e){for(let e of n)e.delete();throw e}}function u2(e,t){let n=G0(t);if(n===0)return e;let r=tk(e,n*180/Math.PI);return e.delete(),r}function d2(e,t,n,r){let i={crSunPlanet:F0(t.tipDiameter/2,t.baseDiameter/2,n.tipDiameter/2,n.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_sp),crPlanetRing:I0(n.tipDiameter/2,n.baseDiameter/2,r.tipDiameter/2,r.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_pr),undercutSun:R0(e.sunTeeth,e.alpha,e.sunShift),undercutPlanet:R0(e.planetTeeth,e.alpha,e.planetShift)};if(e.appliedTorque!==void 0){let t=e.appliedTorque;i.lewisStress={sun:H0(t,e.moduleSize,e.thickness,e.sunTeeth,e.alpha),planet:H0(t*e.planetTeeth/e.sunTeeth,e.moduleSize,e.thickness,e.planetTeeth,e.alpha),ring:H0(t*e.zr/e.sunTeeth,e.moduleSize,e.thickness,e.zr,e.alpha,!0)},i.stressConcentrationFactor={sun:V0(e.sunTeeth,e.alpha),planet:V0(e.planetTeeth,e.alpha),ring:V0(e.zr,e.alpha,!0)}}return i}function f2(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 p2=bX({addHoles:()=>TP,bezier:()=>fP,box:()=>$N,bsplineApprox:()=>dP,circle:()=>oP,compound:()=>xP,cone:()=>nP,cylinder:()=>eP,ellipse:()=>sP,ellipseArc:()=>uP,ellipsoid:()=>iP,face:()=>gP,fill:()=>SA,filledFace:()=>_P,helix:()=>cP,line:()=>aP,offsetFace:()=>CP,polygon:()=>yP,polyhedron:()=>NQ,sewShells:()=>wP,solid:()=>SP,sphere:()=>tP,subFace:()=>vP,tangentArc:()=>pP,threePointArc:()=>lP,torus:()=>rP,vertex:()=>bP,wire:()=>mP,wireLoop:()=>hP}),m2=bX({checkBoolean:()=>Cj,convexHull:()=>OQ,cut:()=>C1,cutAll:()=>PA,cutAllBisect:()=>mj,fuse:()=>S1,fuseAll:()=>NA,fuseAllBisect:()=>vj,hull:()=>DQ,intersect:()=>E1,minkowski:()=>MQ,section:()=>D1,sectionToFace:()=>O1,slice:()=>A1,split:()=>k1}),h2=bX({chamfer:()=>F1,draft:()=>z1,fillet:()=>P1,heal:()=>B1,offset:()=>L1,shell:()=>I1,simplify:()=>V1,thicken:()=>R1,variableFillet:()=>Jj}),g2=bX({applyMatrix:()=>y1,clone:()=>v1,composeTransforms:()=>lk,mirror:()=>g1,rotate:()=>h1,scale:()=>_1,transformCopy:()=>b1,translate:()=>m1}),_2=bX({checkAllInterferences:()=>W$,checkInterference:()=>U$,createDistanceQuery:()=>PM,measureArea:()=>AM,measureCurvatureAt:()=>FM,measureCurvatureAtMid:()=>IM,measureDistance:()=>MM,measureDistanceProps:()=>NM,measureLength:()=>jM,measureLinearProps:()=>OM,measureSurfaceProps:()=>DM,measureVolume:()=>kM,measureVolumeProps:()=>EM}),v2=bX({blueprintToDXF:()=>cY,exportAssemblySTEP:()=>OP,exportDXF:()=>sY,exportGlb:()=>JJ,exportGltf:()=>qJ,exportIGES:()=>Zk,exportOBJ:()=>LJ,exportSTEP:()=>Yk,exportSTEPConfigured:()=>GY,exportSTL:()=>Xk,exportThreeMF:()=>DY,importDXF:()=>Y$,importGLB:()=>f1,importIGES:()=>JY,importOBJ:()=>$$,importSTEP:()=>KY,importSTL:()=>qY,importSVG:()=>WY,importSVGPathD:()=>UY,importThreeMF:()=>d1}),y2=bX({cornerFinder:()=>sR,edgeFinder:()=>jI,faceFinder:()=>PI,getSingleFace:()=>LI,vertexFinder:()=>kX,wireFinder:()=>II}),b2=bX({complexExtrude:()=>uM,extrude:()=>Y1,guidedSweep:()=>hM,loft:()=>Z1,multiSectionSweep:()=>mM,revolve:()=>X1,roof:()=>n$,supportExtrude:()=>lM,surfaceFromGrid:()=>SQ,surfaceFromImage:()=>TQ,sweep:()=>cM,twistExtrude:()=>dM}),x2=bX({circularPattern:()=>AP,linearPattern:()=>kP}),S2=14695981039346656037n,C2=1099511628211n,w2=18446744073709551615n;function T2(){return S2}function E2(e,t){return(e^BigInt(t&255))*C2&w2}function D2(e,t){let n=e;for(let e=0;e<t.length;e++)n=E2(n,t[e]??0);return n}var O2=new TextEncoder;function k2(e,t){return D2(e,O2.encode(t))}var A2=new ArrayBuffer(8),j2=new DataView(A2),M2=new Uint8Array(A2);function N2(e,t){return j2.setFloat64(0,Object.is(t,-0)?0:t),D2(e,M2)}function P2(e,t){let n=e,r=t&w2;for(let e=0;e<8;e++)n=E2(n,Number(r&255n)),r>>=8n;return n}function F2(e,t){let n=e,r=t|0;for(let e=0;e<4;e++)n=E2(n,r&255),r>>>=8;return n}function I2(e,t){return E2(e,+!!t)}function L2(e){return(e&w2).toString(16).padStart(16,`0`)}var R2=new Set;function z2(e){return k2(T2(),e)}function B2(e){return{kind:`NumLit`,value:e,structuralHash:N2(z2(`NumLit`),e),freeParams:R2}}function V2(e){let t=z2(`Vec3Lit`);for(let n of e)t=N2(t,n);return{kind:`Vec3Lit`,value:e,structuralHash:t,freeParams:R2}}function H2(e){let t=z2(`Vec2Lit`);for(let n of e)t=N2(t,n);return{kind:`Vec2Lit`,value:e,structuralHash:t,freeParams:R2}}function U2(e){return{kind:`Param`,name:e,structuralHash:k2(z2(`Param`),e),freeParams:new Set([e])}}function W2(e,t,n){let r=k2(z2(`BinOp`),e);return r=P2(r,t.structuralHash),r=P2(r,n.structuralHash),{kind:`BinOp`,op:e,a:t,b:n,structuralHash:r,freeParams:e4(t.freeParams,n.freeParams)}}function G2(e,t){let n=k2(z2(`UnaryOp`),e);return n=P2(n,t.structuralHash),{kind:`UnaryOp`,op:e,arg:t,structuralHash:n,freeParams:t.freeParams}}function K2(e,t){let n=F2(z2(`Component`),t);return n=P2(n,e.structuralHash),{kind:`Component`,vec:e,index:t,structuralHash:n,freeParams:e.freeParams}}function q2(e,t){let n=F2(z2(`BuildVec`),e),r=new Set;for(let e of t){n=P2(n,e.structuralHash);for(let t of e.freeParams)r.add(t)}return{kind:`BuildVec`,dim:e,components:t,structuralHash:n,freeParams:r}}var J2=(e,t)=>W2(`+`,e,t),Y2=(e,t)=>W2(`*`,e,t);function X2(e){return typeof e==`number`?B2(e):e}function Z2(e,t){if(!Array.isArray(e))return e;let n=e;return n.every(e=>typeof e==`number`)?t===3?V2([n[0],n[1],n[2]]):H2([n[0],n[1]]):q2(t,n.map(X2))}function Q2(e){return Z2(e,3)}function $2(e){return Z2(e,2)}function e4(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 t4(e){return typeof e==`number`}function n4(e,t){return t4(e)?O(e):k(F(N.NULL_SHAPE_INPUT,`${t}: expected number, got ${Array.isArray(e)?`vector(${e.length})`:typeof e}`))}function r4(e,t,n){return Array.isArray(e)&&e.length===t?O(e):k(F(N.NULL_SHAPE_INPUT,`${n}: expected Vec${t}, got ${t4(e)?`number`:`vector(${e.length})`}`))}function i4(e,t){switch(e.kind){case`NumLit`:return O(e.value);case`Vec3Lit`:return O(e.value);case`Vec2Lit`:return O(e.value);case`Param`:{let n=t[e.name];return n===void 0?k(F(N.NULL_SHAPE_INPUT,`unbound param: ${e.name}`)):O(n)}case`BinOp`:return a4(e,t);case`UnaryOp`:return o4(e,t);case`Component`:return s4(e,t);case`BuildVec`:return c4(e,t)}}function a4(e,t){let n=i4(e.a,t);if(!n.ok)return n;let r=i4(e.b,t);if(!r.ok)return r;let i=n4(n.value,`BinOp(${e.op}).a`);if(!i.ok)return i;let a=n4(r.value,`BinOp(${e.op}).b`);if(!a.ok)return a;switch(e.op){case`+`:return O(i.value+a.value);case`-`:return O(i.value-a.value);case`*`:return O(i.value*a.value);case`/`:return a.value===0?k(F(N.NULL_SHAPE_INPUT,`BinOp(/): division by zero`)):O(i.value/a.value)}}function o4(e,t){let n=i4(e.arg,t);if(!n.ok)return n;let r=n4(n.value,`UnaryOp(${e.op})`);if(!r.ok)return r;let i=r.value;switch(e.op){case`neg`:return O(-i);case`sin`:return O(Math.sin(i));case`cos`:return O(Math.cos(i));case`sqrt`:return O(Math.sqrt(i));case`abs`:return O(Math.abs(i))}}function s4(e,t){let n=i4(e.vec,t);if(!n.ok)return n;if(t4(n.value))return k(F(N.NULL_SHAPE_INPUT,`Component: cannot index a scalar`));let r=n.value,i=r[e.index];return i===void 0?k(F(N.NULL_SHAPE_INPUT,`Component: index ${e.index} out of range for Vec${r.length}`)):O(i)}function c4(e,t){if(e.components.length!==e.dim)return k(F(N.NULL_SHAPE_INPUT,`BuildVec(${e.dim}): expected ${e.dim} components, got ${e.components.length}`));let n=[];for(let r of e.components){let e=i4(r,t);if(!e.ok)return e;let i=n4(e.value,`BuildVec.component`);if(!i.ok)return i;n.push(i.value)}return O(e.dim===2?[n[0],n[1]]:[n[0],n[1],n[2]])}function l4(e,t,n){let r=i4(e,t);return r.ok?n4(r.value,n):r}function u4(e,t,n){let r=i4(e,t);if(!r.ok)return r;let i=r4(r.value,3,n);if(!i.ok)return i;let[a,o,s]=i.value;return O([a,o,s])}function d4(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)}var f4=new Set;function p4(e){return k2(T2(),e)}function m4(e,t){return P2(e,t.structuralHash)}function h4(e,t){return t===void 0?I2(e,!1):m4(I2(e,!0),t)}function g4(e,t){return t===void 0?I2(e,!1):N2(I2(e,!0),t)}function _4(...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?f4:t}function v4(e,t,n){let r=X2(e),i=X2(t),a=X2(n),o=p4(`Box`);return o=m4(m4(m4(o,r),i),a),{kind:`Box`,x:r,y:i,z:a,structuralHash:o,freeParams:_4(r,i,a)}}function y4(e){let t=X2(e);return{kind:`Sphere`,radius:t,structuralHash:m4(p4(`Sphere`),t),freeParams:t.freeParams}}function b4(e,t){let n=X2(e),r=X2(t);return{kind:`Cylinder`,radius:n,height:r,structuralHash:m4(m4(p4(`Cylinder`),n),r),freeParams:_4(n,r)}}function x4(e,t,n){let r=X2(e),i=X2(t),a=X2(n),o=p4(`Cone`);return o=m4(m4(m4(o,r),i),a),{kind:`Cone`,radius1:r,radius2:i,height:a,structuralHash:o,freeParams:_4(r,i,a)}}function S4(e,t){let n=X2(e),r=X2(t);return{kind:`Torus`,majorRadius:n,minorRadius:r,structuralHash:m4(m4(p4(`Torus`),n),r),freeParams:_4(n,r)}}function C4(e){let t=e.map(Q2),n=F2(p4(`Polygon`),t.length);for(let e of t)n=m4(n,e);return{kind:`Polygon`,points:t,structuralHash:n,freeParams:_4(...t)}}function w4(e){let t=X2(e);return{kind:`Circle`,radius:t,structuralHash:m4(p4(`Circle`),t),freeParams:t.freeParams}}function T4(e,t){let n=Q2(e),r=Q2(t);return{kind:`Line`,from:n,to:r,structuralHash:m4(m4(p4(`Line`),n),r),freeParams:_4(n,r)}}function E4(e){let t=Q2(e);return{kind:`Vertex`,point:t,structuralHash:m4(p4(`Vertex`),t),freeParams:t.freeParams}}function D4(e){return{kind:`Empty`,output:e,structuralHash:k2(p4(`Empty`),e),freeParams:f4}}function O4(){return D4(`Solid`)}function k4(){return D4(`Face`)}function A4(){return D4(`Wire`)}function j4(e,t,n,r){return g4(m4(m4(p4(e),t),n),r)}function M4(e,t,n){return{kind:`Fuse`,a:e,b:t,tolerance:n,structuralHash:j4(`Fuse`,e,t,n),freeParams:_4(e,t)}}function N4(e,t,n){return{kind:`Cut`,a:e,b:t,tolerance:n,structuralHash:j4(`Cut`,e,t,n),freeParams:_4(e,t)}}function P4(e,t,n){return{kind:`Intersect`,a:e,b:t,tolerance:n,structuralHash:j4(`Intersect`,e,t,n),freeParams:_4(e,t)}}function F4(e,t){let n=F2(p4(`FuseAll`),e.length);for(let t of e)n=m4(n,t);return n=g4(n,t),{kind:`FuseAll`,shapes:e,tolerance:t,structuralHash:n,freeParams:_4(...e)}}function I4(e,t,n){let r=m4(p4(`CutAll`),e);r=F2(r,t.length);for(let e of t)r=m4(r,e);return r=g4(r,n),{kind:`CutAll`,base:e,tools:t,tolerance:n,structuralHash:r,freeParams:_4(e,...t)}}function L4(e){return e===void 0?void 0:Q2(e)}function R4(e,t){let n=Q2(t);return{kind:`Translate`,target:e,vector:n,structuralHash:m4(m4(p4(`Translate`),e),n),freeParams:_4(e,n)}}function z4(e,t,n){let r=X2(t),i=L4(n?.axis),a=L4(n?.at),o=m4(m4(p4(`Rotate`),e),r);return o=h4(o,i),o=h4(o,a),{kind:`Rotate`,target:e,angle:r,axis:i,at:a,structuralHash:o,freeParams:_4(e,r,i,a)}}function B4(e,t,n){let r=X2(t),i=L4(n?.center),a=m4(m4(p4(`Scale`),e),r);return a=h4(a,i),{kind:`Scale`,target:e,factor:r,center:i,structuralHash:a,freeParams:_4(e,r,i)}}function V4(e,t){let n=L4(t?.normal),r=L4(t?.at),i=m4(p4(`Mirror`),e);return i=h4(i,n),i=h4(i,r),{kind:`Mirror`,target:e,normal:n,at:r,structuralHash:i,freeParams:_4(e,n,r)}}function H4(e){let t=F2(p4(`Compound`),e.length);for(let n of e)t=m4(t,n);return{kind:`Compound`,children:e,structuralHash:t,freeParams:_4(...e)}}function U4(e,t,n=!1){let r=t.map(e=>e.map(e=>[...e])),i=F2(I2(m4(p4(`Instance`),e),n),r.length);for(let e of r)for(let t of e.flat())i=N2(i,t);return{kind:`Instance`,source:e,placements:r,fuse:n,structuralHash:i,freeParams:_4(e)}}function W4(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 W4(e.a);case`FuseAll`:return e.shapes[0]?W4(e.shapes[0]):`Solid`;case`CutAll`:return W4(e.base);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return W4(e.target);case`Compound`:return`Compound`;case`Instance`:return e.fuse?`Solid`:`Compound`}}function G4(e,t){let n=l4(e.x,t.env,`Box.x`);if(!n.ok)return n;let r=l4(e.y,t.env,`Box.y`);if(!r.ok)return r;let i=l4(e.z,t.env,`Box.z`);return i.ok?O($N(n.value,r.value,i.value)):i}function K4(e,t){let n=l4(e.radius,t.env,`Sphere.radius`);return n.ok?O(tP(n.value)):n}function q4(e,t){let n=l4(e.radius,t.env,`Cylinder.radius`);if(!n.ok)return n;let r=l4(e.height,t.env,`Cylinder.height`);return r.ok?O(eP(n.value,r.value)):r}function J4(e,t){let n=l4(e.radius1,t.env,`Cone.radius1`);if(!n.ok)return n;let r=l4(e.radius2,t.env,`Cone.radius2`);if(!r.ok)return r;let i=l4(e.height,t.env,`Cone.height`);return i.ok?O(nP(n.value,r.value,i.value)):i}function Y4(e,t){let n=l4(e.majorRadius,t.env,`Torus.majorRadius`);if(!n.ok)return n;let r=l4(e.minorRadius,t.env,`Torus.minorRadius`);return r.ok?O(rP(n.value,r.value)):r}function X4(e,t){let n=[];for(let r of e.points){let e=u4(r,t.env,`Polygon.point`);if(!e.ok)return e;n.push(e.value)}return yP(n)}function Z4(e,t){let n=l4(e.radius,t.env,`Circle.radius`);return n.ok?O(oP(n.value)):n}function Q4(e,t){let n=u4(e.from,t.env,`Line.from`);if(!n.ok)return n;let r=u4(e.to,t.env,`Line.to`);return r.ok?O(aP(n.value,r.value)):r}function $4(e,t){let n=u4(e.point,t.env,`Vertex.point`);return n.ok?O(bP(n.value)):n}function e3(e){return k(vo(N.NULL_SHAPE_INPUT,`${e}: empty result has no kernel representation`))}function t3(e,t,n){let r=e.evalNode(t);return r.ok?kE(r.value)?O(r.value):k(ho(N.CSG_NOT_3D,`${n}: operand did not produce a 3D shape`)):r}function n3(e,t){return{unsafe:!0,fuzzyValue:e.tolerance??t.tolerance}}function r3(e,t){if(e.a.kind===`Empty`)return t.evalNode(e.b);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=t3(t,e.a,`Fuse.a`);if(!n.ok)return n;let r=t3(t,e.b,`Fuse.b`);return r.ok?kA(n.value,r.value,n3(e,t)):r}function i3(e,t){if(e.a.kind===`Empty`)return e3(`Cut`);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=t3(t,e.a,`Cut.a`);if(!n.ok)return n;let r=t3(t,e.b,`Cut.b`);return r.ok?AA(n.value,r.value,n3(e,t)):r}function a3(e,t){if(e.a.kind===`Empty`||e.b.kind===`Empty`)return e3(`Intersect`);let n=t3(t,e.a,`Intersect.a`);if(!n.ok)return n;let r=t3(t,e.b,`Intersect.b`);return r.ok?jA(n.value,r.value,n3(e,t)):r}function o3(e,t,n){let r=[];for(let i of t){let t=t3(e,i,n);if(!t.ok)return t;r.push(t.value)}return O(r)}function s3(e,t){let n=e.shapes.filter(e=>e.kind!==`Empty`);if(n.length===0)return e3(`FuseAll`);if(n.length===1&&n[0])return t.evalNode(n[0]);let r=o3(t,n,`FuseAll.operand`);return r.ok?NA(r.value,n3(e,t)):r}function c3(e,t){if(e.base.kind===`Empty`)return e3(`CutAll`);let n=e.tools.filter(e=>e.kind!==`Empty`);if(n.length===0)return t.evalNode(e.base);let r=t3(t,e.base,`CutAll.base`);if(!r.ok)return r;let i=o3(t,n,`CutAll.tool`);return i.ok?PA(r.value,i.value,n3(e,t)):i}function l3(e){return k(vo(N.NULL_SHAPE_INPUT,`${e}: cannot transform an Empty node`))}function u3(e,t,n,r){return e?u4(e,t,n):O(r)}function d3(e,t){let n=U(),{handle:r,dispose:i}=n.composeTransform(t),a;try{a=jE(n.locate(e.wrapped,r))}finally{i()}return YO(e)&&$O(e,a),a}function f3(e,t){if(e.target.kind===`Empty`)return l3(`Translate`);let n=u4(e.vector,t.env,`Translate.vector`);if(!n.ok)return n;let r=t.evalNode(e.target);return r.ok?O(d3(r.value,[{type:`translate`,x:n.value[0],y:n.value[1],z:n.value[2]}])):r}function p3(e,t){if(e.target.kind===`Empty`)return l3(`Rotate`);let n=l4(e.angle,t.env,`Rotate.angle`);if(!n.ok)return n;let r=u3(e.axis,t.env,`Rotate.axis`,[0,0,1]);if(!r.ok)return r;let i=u3(e.at,t.env,`Rotate.at`,[0,0,0]);if(!i.ok)return i;let a=t.evalNode(e.target);return a.ok?O(d3(a.value,[{type:`rotate`,angle:n.value,axis:r.value,center:i.value}])):a}function m3(e,t){if(e.target.kind===`Empty`)return l3(`Scale`);let n=l4(e.factor,t.env,`Scale.factor`);if(!n.ok)return n;let r=u3(e.center,t.env,`Scale.center`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?O(rk(i.value,n.value,r.value)):i}function h3(e,t){if(e.target.kind===`Empty`)return l3(`Mirror`);let n=u3(e.normal,t.env,`Mirror.normal`,[1,0,0]);if(!n.ok)return n;let r=u3(e.at,t.env,`Mirror.at`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?O(nk(i.value,n.value,r.value)):i}function g3(e,t){let n=e.children.filter(e=>e.kind!==`Empty`);if(n.length===0)return k(vo(N.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 O(xP(r))}function _3(){return k(vo(N.NULL_SHAPE_INPUT,`Empty: cannot materialize an Empty node directly — only valid as boolean/transform operand`))}function v3(e,t){let n=t.evalNode(e.source);return n.ok?u$(s$(n.value,e.placements),{fuse:e.fuse}):n}function y3(e,t){switch(e.kind){case`Box`:return G4(e,t);case`Sphere`:return K4(e,t);case`Cylinder`:return q4(e,t);case`Cone`:return J4(e,t);case`Torus`:return Y4(e,t);case`Polygon`:return X4(e,t);case`Circle`:return Z4(e,t);case`Line`:return Q4(e,t);case`Vertex`:return $4(e,t);case`Empty`:return _3();case`Fuse`:return r3(e,t);case`Cut`:return i3(e,t);case`Intersect`:return a3(e,t);case`FuseAll`:return s3(e,t);case`CutAll`:return c3(e,t);case`Translate`:return f3(e,t);case`Rotate`:return p3(e,t);case`Scale`:return m3(e,t);case`Mirror`:return h3(e,t);case`Compound`:return g3(e,t);case`Instance`:return v3(e,t)}}function b3(e,t){if(typeof t==`number`)return N2(I2(e,!1),t);let n=I2(e,!0);n=F2(n,t.length);for(let e of t)n=N2(n,e);return n}function x3(e,t){if(t.size===0)return T2();let n=d4(e,t),r=Object.keys(n).sort(),i=T2();for(let e of r){i=k2(i,e);let t=n[e];t!==void 0&&(i=b3(i,t))}return i}function S3(e,t,n,r){let i=x3(t,e.freeParams),a=r===void 0?`d`:N2(T2(),r).toString(16);return`${L2(e.structuralHash)}:${n}:${L2(i)}:${a}`}var C3=[1,0,0,0];function w3(e,t){let n=l4(e.angle,t,`evaluateMesh.peelRigid`);if(!n.ok)return null;let r=e.axis?u4(e.axis,t,`evaluateMesh.peelRigid`):O([0,0,1]);if(!r.ok)return null;let i=e.at?u4(e.at,t,`evaluateMesh.peelRigid`):O([0,0,0]);return i.ok?{angle:n.value,axis:r.value,center:i.value}:null}function T3(e,t){let n=e,r=C3,i=[0,0,0];for(;;)if(n.kind===`Translate`){let e=u4(n.vector,t,`evaluateMesh.peelRigid`);if(!e.ok)break;let a=WP(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=w3(n,t);if(!e)break;let a=GP(e.axis,e.angle*Math.PI/180),o=qP(r,a),s=WP(r,e.center),c=WP(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 E3(e){return e[0]===1&&e[1]===0&&e[2]===0&&e[3]===0}function D3(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 O3(e,t,n){let[r,i,a]=n,o=E3(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;D3(c,s,l,u,d,f,r,i,a);let p=e.normals,m=new Float32Array(p.length);return D3(m,p,l,u,d,f,0,0,0),{...e,vertices:c,normals:m}}function k3(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 A3=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??_T()??`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 vT(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=Eo(),a=n.tolerance??i.tolerance,o=n.angularTolerance??i.angularTolerance,s=`${S3(e,t,this.kernelId,this.defaultTolerance)}|${Pk(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)),O(r);let{inner:i,rot:a,trans:o}=T3(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=ZE(c.value).map(mk),u=this.evaluate(e,t);if(!u.ok)return u;let d=ZE(u.value).map(mk),f=O3(r.value,a,o),p=k3(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),O(e)}}}let c=this.evaluate(e,t);if(!c.ok)return c;let l=vT(this.kernelId,()=>Wk(c.value,n));return r&&(this.meshCache.set(s,l),this.maxMeshCacheEntries!==void 0&&this.trimMeshCache(this.maxMeshCacheEntries)),O(l)}evaluateInner(e,t){let n=S3(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}),O(r);this.misses++;let i=y3(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 j3(e,t){try{var n=OT();let r=t(n.u(new A3(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()}}function M3(e){return{csgVersion:1,root:R3(e)}}function N3(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:N3(e.a),b:N3(e.b)};case`UnaryOp`:return{kind:`UnaryOp`,op:e.op,arg:N3(e.arg)};case`Component`:return{kind:`Component`,vec:N3(e.vec),index:e.index};case`BuildVec`:return{kind:`BuildVec`,dim:e.dim,components:e.components.map(N3)}}}function P3(e){switch(e.kind){case`Box`:return{kind:`Box`,x:N3(e.x),y:N3(e.y),z:N3(e.z)};case`Sphere`:return{kind:`Sphere`,radius:N3(e.radius)};case`Cylinder`:return{kind:`Cylinder`,radius:N3(e.radius),height:N3(e.height)};case`Cone`:return{kind:`Cone`,radius1:N3(e.radius1),radius2:N3(e.radius2),height:N3(e.height)};case`Torus`:return{kind:`Torus`,majorRadius:N3(e.majorRadius),minorRadius:N3(e.minorRadius)};case`Polygon`:return{kind:`Polygon`,points:e.points.map(N3)};case`Circle`:return{kind:`Circle`,radius:N3(e.radius)};case`Line`:return{kind:`Line`,from:N3(e.from),to:N3(e.to)};case`Vertex`:return{kind:`Vertex`,point:N3(e.point)};case`Empty`:return{kind:`Empty`,output:e.output};default:return}}function F3(e){switch(e.kind){case`Fuse`:case`Cut`:case`Intersect`:return{kind:e.kind,a:R3(e.a),b:R3(e.b),tolerance:e.tolerance};case`FuseAll`:return{kind:`FuseAll`,shapes:e.shapes.map(R3),tolerance:e.tolerance};case`CutAll`:return{kind:`CutAll`,base:R3(e.base),tools:e.tools.map(R3),tolerance:e.tolerance};default:return}}function I3(e){return e?N3(e):void 0}function L3(e){switch(e.kind){case`Translate`:return{kind:`Translate`,target:R3(e.target),vector:N3(e.vector)};case`Rotate`:return{kind:`Rotate`,target:R3(e.target),angle:N3(e.angle),axis:I3(e.axis),at:I3(e.at)};case`Scale`:return{kind:`Scale`,target:R3(e.target),factor:N3(e.factor),center:I3(e.center)};case`Mirror`:return{kind:`Mirror`,target:R3(e.target),normal:I3(e.normal),at:I3(e.at)};default:return}}function R3(e){return e.kind===`Compound`?{kind:`Compound`,children:e.children.map(R3)}:e.kind===`Instance`?{kind:`Instance`,source:R3(e.source),placements:e.placements,fuse:e.fuse}:P3(e)??F3(e)??L3(e)}function z3(e){return k(F(N.NULL_SHAPE_INPUT,`csg.fromJSON: ${e}`))}function B3(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function V3(e){return typeof e==`number`&&Number.isFinite(e)}function H3(e){return typeof e==`string`}function U3(e,t){if(!Array.isArray(e)||e.length!==3)return z3(`${t}: expected Vec3 array`);let[n,r,i]=e;return!V3(n)||!V3(r)||!V3(i)?z3(`${t}: Vec3 contains non-number`):O([n,r,i])}function W3(e,t){if(!Array.isArray(e)||e.length!==2)return z3(`${t}: expected Vec2 array`);let[n,r]=e;return!V3(n)||!V3(r)?z3(`${t}: Vec2 contains non-number`):O([n,r])}function G3(e){if(!B3(e))return z3(`input is not an object`);let t=e.csgVersion;if(t!==1)return z3(`unsupported csgVersion ${String(t)} (expected 1)`);let n=e.root;return $3(n)}function K3(e){if(!B3(e))return z3(`expression: not an object`);let t=e.kind;switch(t){case`NumLit`:return V3(e.value)?O(B2(e.value)):z3(`NumLit.value`);case`Vec3Lit`:{let t=U3(e.value,`Vec3Lit.value`);return t.ok?O(V2(t.value)):t}case`Vec2Lit`:{let t=W3(e.value,`Vec2Lit.value`);return t.ok?O(H2(t.value)):t}case`Param`:return H3(e.name)?O(U2(e.name)):z3(`Param.name`);case`BinOp`:return q3(e);case`UnaryOp`:return J3(e);case`Component`:return Y3(e);case`BuildVec`:return X3(e);default:return z3(`unknown expression kind: ${String(t)}`)}}function q3(e){let t=e.op;if(t!==`+`&&t!==`-`&&t!==`*`&&t!==`/`)return z3(`BinOp.op: ${String(t)}`);let n=K3(e.a);if(!n.ok)return n;let r=K3(e.b);return r.ok?O(W2(t,n.value,r.value)):r}function J3(e){let t=e.op;if(!H3(t)||![`neg`,`sin`,`cos`,`sqrt`,`abs`].includes(t))return z3(`UnaryOp.op: ${String(t)}`);let n=K3(e.arg);return n.ok?O(G2(t,n.value)):n}function Y3(e){let t=e.index;if(t!==0&&t!==1&&t!==2)return z3(`Component.index: ${String(t)}`);let n=K3(e.vec);return n.ok?O(K2(n.value,t)):n}function X3(e){let t=e.dim;if(t!==2&&t!==3)return z3(`BuildVec.dim: ${String(t)}`);let n=e.components;if(!Array.isArray(n))return z3(`BuildVec.components: not array`);if(n.length!==t)return z3(`BuildVec.components: expected ${t} components, got ${n.length}`);let r=[];for(let e of n){let t=K3(e);if(!t.ok)return t;r.push(t.value)}return O(q2(t,r))}function Z3(e,t){if(!Array.isArray(e))return z3(`${t}: not array`);let n=[];for(let t of e){let e=$3(t);if(!e.ok)return e;n.push(e.value)}return O(n)}function Q3(e){let t=e.tolerance;return t==null?O(void 0):V3(t)?O(t):z3(`tolerance: not a finite number`)}function $3(e){if(!B3(e))return z3(`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 t6(t,e);case`Fuse`:case`Cut`:case`Intersect`:return l6(t,e);case`FuseAll`:case`CutAll`:return u6(t,e);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return d6(t,e);case`Compound`:return _6(e);case`Instance`:return y6(e);default:return z3(`unknown node kind: ${String(t)}`)}}function e6(e,t,n){let r=K3(e[t]);return r.ok?O(n(r.value)):r}function t6(e,t){switch(e){case`Box`:return n6(t);case`Sphere`:return e6(t,`radius`,y4);case`Cylinder`:return r6(t);case`Cone`:return i6(t);case`Torus`:return a6(t);case`Polygon`:return o6(t);case`Circle`:return e6(t,`radius`,w4);case`Line`:return s6(t);case`Vertex`:return e6(t,`point`,E4);case`Empty`:return c6(t)}return z3(`unhandled primitive: ${e}`)}function n6(e){let t=K3(e.x);if(!t.ok)return t;let n=K3(e.y);if(!n.ok)return n;let r=K3(e.z);return r.ok?O(v4(t.value,n.value,r.value)):r}function r6(e){let t=K3(e.radius);if(!t.ok)return t;let n=K3(e.height);return n.ok?O(b4(t.value,n.value)):n}function i6(e){let t=K3(e.radius1);if(!t.ok)return t;let n=K3(e.radius2);if(!n.ok)return n;let r=K3(e.height);return r.ok?O(x4(t.value,n.value,r.value)):r}function a6(e){let t=K3(e.majorRadius);if(!t.ok)return t;let n=K3(e.minorRadius);return n.ok?O(S4(t.value,n.value)):n}function o6(e){let t=e.points;if(!Array.isArray(t))return z3(`Polygon.points: not array`);let n=[];for(let e of t){let t=K3(e);if(!t.ok)return t;n.push(t.value)}return O(C4(n))}function s6(e){let t=K3(e.from);if(!t.ok)return t;let n=K3(e.to);return n.ok?O(T4(t.value,n.value)):n}function c6(e){let t=e.output;switch(t){case`Solid`:return O(O4());case`Face`:return O(k4());case`Wire`:return O(A4());default:return z3(`Empty.output: ${String(t)}`)}}function l6(e,t){let n=$3(t.a);if(!n.ok)return n;let r=$3(t.b);if(!r.ok)return r;let i=Q3(t);if(!i.ok)return i;switch(e){case`Fuse`:return O(M4(n.value,r.value,i.value));case`Cut`:return O(N4(n.value,r.value,i.value));case`Intersect`:return O(P4(n.value,r.value,i.value))}}function u6(e,t){let n=Q3(t);if(!n.ok)return n;if(e===`FuseAll`){let e=Z3(t.shapes,`FuseAll.shapes`);return e.ok?O(F4(e.value,n.value)):e}let r=$3(t.base);if(!r.ok)return r;let i=Z3(t.tools,`CutAll.tools`);return i.ok?O(I4(r.value,i.value,n.value)):i}function d6(e,t){let n=$3(t.target);if(!n.ok)return n;switch(e){case`Translate`:return f6(t,n.value);case`Rotate`:return m6(t,n.value);case`Scale`:return h6(t,n.value);case`Mirror`:return g6(t,n.value)}}function f6(e,t){let n=K3(e.vector);return n.ok?O(R4(t,n.value)):n}function p6(e,t){if(e[t]===void 0)return O(void 0);let n=K3(e[t]);return n.ok?O(n.value):n}function m6(e,t){let n=K3(e.angle);if(!n.ok)return n;let r=p6(e,`axis`);if(!r.ok)return r;let i=p6(e,`at`);return i.ok?O(z4(t,n.value,{axis:r.value,at:i.value})):i}function h6(e,t){let n=K3(e.factor);if(!n.ok)return n;let r=p6(e,`center`);return r.ok?O(B4(t,n.value,{center:r.value})):r}function g6(e,t){let n=p6(e,`normal`);if(!n.ok)return n;let r=p6(e,`at`);return r.ok?O(V4(t,{normal:n.value,at:r.value})):r}function _6(e){let t=Z3(e.children,`Compound.children`);return t.ok?O(H4(t.value)):t}function v6(e){return Array.isArray(e)&&e.length===4&&e.every(e=>Array.isArray(e)&&e.length===4&&e.every(V3))}function y6(e){let t=$3(e.source);if(!t.ok)return t;let n=e.placements;return!Array.isArray(n)||!n.every(v6)?z3(`Instance.placements must be an array of 4x4 number matrices`):O(U4(t.value,n,e.fuse===!0))}function b6(e){return C6(e)}function x6(e){switch(e.kind){case`NumLit`:case`Vec3Lit`:case`Vec2Lit`:case`Param`:return e;case`BinOp`:{let t=x6(e.a),n=x6(e.b);if(t.kind===`NumLit`&&n.kind===`NumLit`)switch(e.op){case`+`:return B2(t.value+n.value);case`-`:return B2(t.value-n.value);case`*`:return B2(t.value*n.value);case`/`:return B2(t.value/n.value)}return t!==e.a||n!==e.b?W2(e.op,t,n):e}case`UnaryOp`:{let t=x6(e.arg);if(t.kind===`NumLit`){let n=t.value;switch(e.op){case`neg`:return B2(-n);case`sin`:return B2(Math.sin(n));case`cos`:return B2(Math.cos(n));case`sqrt`:return B2(Math.sqrt(n));case`abs`:return B2(Math.abs(n))}}return t===e.arg?e:G2(e.op,t)}case`Component`:{let t=x6(e.vec);return t.kind===`Vec3Lit`||t.kind===`Vec2Lit`&&(e.index===0||e.index===1)?B2(t.value[e.index]):t===e.vec?e:K2(t,e.index)}case`BuildVec`:{let t=e.components.map(x6);return S6(e.dim,t)||(t.some((t,n)=>t!==e.components[n])?q2(e.dim,t):e)}}}function S6(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?H2([n[0],n[1]]):V2([n[0],n[1],n[2]])}function C6(e){switch(e.kind){case`Box`:return v4(x6(e.x),x6(e.y),x6(e.z));case`Sphere`:return y4(x6(e.radius));case`Cylinder`:return b4(x6(e.radius),x6(e.height));case`Cone`:return x4(x6(e.radius1),x6(e.radius2),x6(e.height));case`Torus`:return S4(x6(e.majorRadius),x6(e.minorRadius));case`Polygon`:return C4(e.points.map(x6));case`Circle`:return w4(x6(e.radius));case`Line`:return T4(x6(e.from),x6(e.to));case`Vertex`:return E4(x6(e.point));case`Empty`:return e;case`Fuse`:return w6(e.a,e.b,e.tolerance);case`Cut`:return T6(e.a,e.b,e.tolerance);case`Intersect`:return E6(e.a,e.b,e.tolerance);case`FuseAll`:return D6(e.shapes,e.tolerance);case`CutAll`:return O6(e.base,e.tools,e.tolerance);case`Translate`:return k6(e.target,e.vector);case`Rotate`:return z4(C6(e.target),x6(e.angle),{axis:e.axis?x6(e.axis):void 0,at:e.at?x6(e.at):void 0});case`Scale`:return B4(C6(e.target),x6(e.factor),{center:e.center?x6(e.center):void 0});case`Mirror`:return V4(C6(e.target),{normal:e.normal?x6(e.normal):void 0,at:e.at?x6(e.at):void 0});case`Compound`:return H4(e.children.map(C6).filter(e=>e.kind!==`Empty`));case`Instance`:return U4(C6(e.source),e.placements,e.fuse)}}function w6(e,t,n){let r=C6(e),i=C6(t);return r.kind===`Empty`?i:i.kind===`Empty`?r:M4(r,i,n)}function T6(e,t,n){let r=C6(e),i=C6(t);return i.kind===`Empty`||r.kind===`Empty`?r:N4(r,i,n)}function E6(e,t,n){let r=C6(e),i=C6(t);return r.kind===`Empty`?r:i.kind===`Empty`?i:P4(r,i,n)}function D6(e,t){let n=e.map(C6).filter(e=>e.kind!==`Empty`);return n.length===0?O4():n.length===1?n[0]:F4(n,t)}function O6(e,t,n){let r=C6(e);if(r.kind===`Empty`)return r;let i=t.map(C6).filter(e=>e.kind!==`Empty`);return i.length===0?r:I4(r,i,n)}function k6(e,t){let n=C6(e),r=x6(t);if(r.kind!==`Vec3Lit`)return R4(n,r);let[i,a,o]=r.value;if(i===0&&a===0&&o===0)return n;if(n.kind===`Translate`){let e=x6(n.vector);if(e.kind===`Vec3Lit`)return R4(n.target,[e.value[0]+i,e.value[1]+a,e.value[2]+o])}return R4(n,r)}function A6(e,t,n){return j6(e,t,n)}function j6(e,t,n){return t(e)?n:M6(e,t,n)}function M6(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`:return e;case`Fuse`:return M4(j6(e.a,t,n),j6(e.b,t,n),e.tolerance);case`Cut`:return N4(j6(e.a,t,n),j6(e.b,t,n),e.tolerance);case`Intersect`:return P4(j6(e.a,t,n),j6(e.b,t,n),e.tolerance);case`FuseAll`:return F4(e.shapes.map(e=>j6(e,t,n)),e.tolerance);case`CutAll`:return I4(j6(e.base,t,n),e.tools.map(e=>j6(e,t,n)),e.tolerance);case`Translate`:return R4(j6(e.target,t,n),e.vector);case`Rotate`:return z4(j6(e.target,t,n),e.angle,{axis:e.axis,at:e.at});case`Scale`:return B4(j6(e.target,t,n),e.factor,{center:e.center});case`Mirror`:return V4(j6(e.target,t,n),{normal:e.normal,at:e.at});case`Compound`:return H4(e.children.map(e=>j6(e,t,n)));case`Instance`:return U4(j6(e.source,t,n),e.placements,e.fuse)}}function N6(e,t){t(e);for(let n of P6(e))N6(n,t)}function P6(e){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`: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]}}function F6(e){let t=0;return N6(e,()=>{t++}),t}var I6=bX({CSG_VERSION:()=>1,Evaluator:()=>A3,add:()=>J2,asScalarExpr:()=>X2,asVec2Expr:()=>$2,asVec3Expr:()=>Q2,binOp:()=>W2,box:()=>v4,buildVec:()=>q2,circle:()=>w4,component:()=>K2,compound:()=>H4,cone:()=>x4,cut:()=>N4,cutAll:()=>I4,cylinder:()=>b4,emptyFace:()=>k4,emptySolid:()=>O4,emptyWire:()=>A4,foldExpr:()=>x6,forEachNode:()=>N6,fromJSON:()=>G3,fuse:()=>M4,fuseAll:()=>F4,instance:()=>U4,intersect:()=>P4,line:()=>T4,mirror:()=>V4,mul:()=>Y2,nodeCount:()=>F6,numLit:()=>B2,optimize:()=>b6,outputKindOf:()=>W4,param:()=>U2,polygon:()=>C4,replaceNode:()=>A6,rotate:()=>z4,scale:()=>B4,sphere:()=>y4,toJSON:()=>M3,torus:()=>S4,translate:()=>R4,unaryOp:()=>G2,vec2Lit:()=>H2,vec3Lit:()=>V2,vertex:()=>E4,withEvaluator:()=>j3});export{tR as BaseSketcher2d,nR as BlueprintSketcher,co as BrepBugError,N as BrepErrorCode,a0 as BrepWrapperError,Ay as BrepkitAdapter,jK as CompoundSketch,i as DEFAULT_CAPABILITIES,gD as DEG2RAD,BT as DisposalScope,r as EXACT_BREP_CAPABILITIES,uq as FaceSketcher,G as HASH_CODE_MAX,Ra as OK,La as OcctWasmAdapter,_D as RAD2DEG,qK as Sketch,lq as Sketcher,JK as Sketches,NP as addChild,TP as addHoles,uF as addJoint,V$ as addMate,GF as addStep,YM as adjacentFaces,qa as all,Ha as andThen,CX as applyGlue,y1 as applyMatrix,Mk as approximateCurve,XT as as2D,YT as as3D,JD as asTopo,oN as assignRoles,eM as autoHeal,fP as bezier,cY as blueprintToDXF,GA as booleanPipeline,m2 as booleans,n0 as boss,$N as box,dP as bsplineApprox,M as bug,oq as cameraFromPlane,aq as cameraLookAt,QM as captureHint,eO as cast,jE as castShape,ME as castShape3D,F1 as chamfer,lj as chamferDistAngleShape,Mj as chamferWithEvolution,W$ as checkAllInterferences,Cj as checkBoolean,U$ as checkInterference,oP as circle,AP as circularPattern,hO as classifyPointOnFace,Hk as clearMeshCache,v1 as clone,aE as closedWire,io as collect,zP as collectShapes,GO as colorFaces,WO as colorShape,uM as complexExtrude,lk as composeTransforms,xP as compound,WK as compoundSketchExtrude,HK as compoundSketchFace,KK as compoundSketchLoft,GK as compoundSketchRevolve,vo as computationError,JQ as computeStraightSkeleton,nP as cone,b2 as construction,OQ as convexHull,sR as cornerFinder,RP as countNodes,DP as createAssembly,MP as createAssemblyNode,SJ as createBlueprint,iq as createCamera,xE as createCompound,CJ as createCompoundBlueprint,zN as createDerivedFaceRef,PM as createDistanceQuery,hE as createEdge,SN as createEdgeRef,_E as createFace,RT as createHandle,WF as createHistory,zT as createKernelHandle,Uk as createMeshCache,VD as createNamedPlane,fX as createOperationRegistry,zD as createPlane,sN as createRef,QF as createRegistry,vE as createShell,yE as createSolid,iX as createTaskQueue,mE as createVertex,AN as createVertexRef,gE as createWire,dX as createWorkerClient,_X as createWorkerHandler,vX as createWorkerPool,I6 as csg,To as currentQuality,mJ as curve2dBoundingBox,xJ as curve2dDistanceFrom,hJ as curve2dFirstPoint,bJ as curve2dIsOnCurve,gJ as curve2dLastPoint,vJ as curve2dParameter,_J as curve2dSplitAt,yJ as curve2dTangentAt,Tk as curveAxis,xk as curveEndPoint,Ek as curveIsClosed,Dk as curveIsPeriodic,wk as curveLength,Ok as curvePeriod,Sk as curvePointAt,bk as curveStartPoint,Ck as curveTangentAt,C1 as cut,qR as cut2D,T1 as cutAll,mj as cutAllBisect,IR as cutBlueprints,kj as cutWithEvolution,eP as cylinder,rF as cylindricalJoint,ZM as defaultScorer,oX as dequeueTask,W1 as describe,Vq as deserializeDrawing,aI as deserializeHistory,nO as deserializeShape,QD as downcast,z1 as draft,Uq as draw,Jq as drawCircle,Yq as drawEllipse,nJ as drawFaceOutline,$q as drawParametricFunction,Qq as drawPointsInterpolation,Xq as drawPolysides,tJ as drawProjection,Gq as drawRectangle,Wq as drawRoundedRectangle,Kq as drawSingleCircle,qq as drawSingleEllipse,Zq as drawText,cJ as drawingChamfer,aJ as drawingCut,sJ as drawingFillet,iJ as drawingFuse,oJ as drawingIntersect,rJ as drawingToSketchOnPlane,e0 as drill,jI as edgeFinder,GM as edgesOfFace,sP as ellipse,uP as ellipseArc,iP as ellipsoid,aX as enqueueTask,k as err,OP as exportAssemblySTEP,sY as exportDXF,JJ as exportGlb,qJ as exportGltf,Zk as exportIGES,LJ as exportOBJ,Yk as exportSTEP,GY as exportSTEPConfigured,Xk as exportSTL,DY as exportThreeMF,zF as exportURDF,Y1 as extrude,vM as extrudeAll,gP as face,mO as faceAxis,pO as faceCenter,PI as faceFinder,aO as faceGeomType,oO as faceOrientation,UM as facesOfEdge,WM as facesOfVertex,gZ as fieldBoolean,bZ as fieldContour,_Z as fieldOffset,yZ as fieldReinit,vZ as fieldShell,SA as fill,_P as filledFace,P1 as fillet,jj as filletWithEvolution,NO as findFacesByTag,IP as findNode,qF as findStep,rM as fixSelfIntersection,tM as fixShape,Ua as flatMap,Xa as flatten,sO as flipFaceOrientation,Ak as flipOrientation,ZY as fontMetrics,mF as forwardKinematics,K1 as fromBREP,hQ as fromKernelDir,mQ as fromKernelPnt,pQ as fromKernelVec,Qa as fromNullable,S1 as fuse,GR as fuse2D,w1 as fuseAll,vj as fuseAllBisect,FR as fuseBlueprints,Oj as fuseWithEvolution,k0 as gearGeometry,FX as getActiveVoxelId,uD as getBounds,wJ as getBounds2D,nD as getCompSolids,yk as getCurveType,MT as getDisposalStats,XE as getEdges,qO as getFaceColor,bO as getFaceOrigins,PO as getFaceTags,ZE as getFaces,ZK as getFont,mk as getHashCode,JF as getHistoryShape,U as getKernel,yT as getKernelCapabilities,CT as getKernelTier,uj as getNurbsCurveData,dj as getNurbsSurfaceData,kk as getOrientation,TJ as getOrientation2D,Po as getPerformanceStats,KO as getShapeColor,eE as getShapeKind,tD as getShells,LI as getSingleFace,eD as getSolids,iO as getSurfaceType,IO as getTagMetadata,$E as getVertices,PX as getVoxel,QE as getWires,jP as gridPattern,hM as guidedSweep,B1 as heal,Zj as healFace,Xj as healSolid,Qj as healWire,cP as helix,DQ as hull,Y$ as importDXF,f1 as importGLB,JY as importIGES,$$ as importOBJ,KY as importSTEP,qY as importSTL,WY as importSVG,UY as importSVGPathD,d1 as importThreeMF,UF as importURDF,DT as init,mT as initFromManifold,TT as initFromOC,IX as initVoxel,vO as innerWires,s$ as instance,l$ as instanceCount,c$ as instanceGrid,f$ as instancedMesh,jk as interpolateCurve,E1 as intersect,JR as intersect2D,LR as intersectBlueprints,Aj as intersectWithEvolution,YE as invalidateShapeCache,OF as inverseKinematics,v2 as io,yo as ioError,JT as is2D,qT as is3D,tX as isBatchRequest,TX as isChamferRadius,tE as isClosedWire,tO as isCompSolid,OE as isCompound,HN as isDerivedFaceRef,eX as isDisposeRequest,CE as isEdge,UN as isEdgeRef,J1 as isEmpty,_k as isEqualShape,A as isErr,rX as isErrorResponse,TE as isFace,GN as isFaceRef,EX as isFilletRadius,QY as isInitRequest,EJ as isInside2D,o$ as isInstanced,KN as isLineageRef,KT as isLive,rE as isManifoldShell,wX as isNumber,za as isOk,$Y as isOperationRequest,nE as isOrientedFace,lE as isPlanarFace,uE as isPlanarWire,tq as isProjectionPlane,cX as isQueueEmpty,gk as isSameShape,AE as isShape1D,kE as isShape3D,EE as isShell,DE as isSolid,nX as isSuccessResponse,q1 as isValid,iE as isValidSolid,SE as isVertex,WN as isVertexRef,wE as isWire,lD as iterCompSolids,rD as iterEdges,iD as iterFaces,cD as iterShells,sD as iterSolids,XD as iterTopo,oD as iterVertices,aD as iterWires,AF as jointTrajectory,lF as jointTransform,NF as jointsFromDH,BE as kernelCall,VE as kernelCallRaw,HE as kernelCallScoped,P as kernelError,sQ as latticeInfill,cQ as latticeInfillShape,aP as line,kP as linearPattern,XK as loadFont,x1 as locate,Z1 as loft,bM as loftAll,bq as makeBaseBox,Q0 as makeExternalGear,$0 as makeInternalGear,UD as makePlane,t2 as makePlanetaryGear,rq as makeProjectedEdges,sE as manifoldShell,Ba as map,Za as mapBoth,Va as mapErr,ro as match,u$ as materialize,AM as measureArea,FM as measureCurvatureAt,IM as measureCurvatureAtMid,MM as measureDistance,NM as measureDistanceProps,jM as measureLength,OM as measureLinearProps,DM as measureSurfaceProps,kM as measureVolume,EM as measureVolumeProps,_2 as measurement,hF as mechanismDOF,H1 as mesh,U1 as meshEdges,nA as meshLODs,iA as meshLODsProgressive,Qk as meshMultiLOD,MQ as minkowski,g1 as mirror,jJ as mirror2D,fJ as mirrorDrawing,r0 as mirrorJoin,h2 as modifiers,rI as modifyStep,_o as moduleInitError,mM as multiSectionSweep,fO as normalAt,L1 as offset,CP as offsetFace,QX as offsetMesh,tZ as offsetShape,Nk as offsetWire2D,O as ok,Wa as or,Ga as orElse,GL as organiseBlueprints,oE as orientedFace,gO as outerWire,x2 as patterns,sX as pendingCount,so as pipeline,KD as pivotPlane,dE as planarFace,iF as planarJoint,fE as planarWire,q0 as planetPlacements,t0 as pocket,lO as pointOnSurface,VX as pointsInside,yP as polygon,NQ as polyhedron,gq as polysideInnerRadius,cR as polysidesBlueprint,Pj as positionOnCurve,ET as prewarm,p2 as primitives,nF as prismaticJoint,sq as projectEdges,dO as projectPointOnFace,y2 as query,bo as queryError,i0 as rectangularPattern,pX as registerHandler,hT as registerKernel,ST as registerKernelTier,$F as registerOperation,ZF as registerShape,NX as registerVoxel,lX as rejectAll,PP as removeChild,_O as removeHolesFromFace,WX as repairMesh,nI as replayFrom,tI as replayHistory,NT as resetDisposalStats,Fo as resetPerformanceStats,ik as resize,$ as resolve,p1 as resolve3D,BN as resolveDerivedFaceRef,xD as resolveDirection,CN as resolveEdgeRef,JN as resolveLineageRef,HD as resolvePlane,pN as resolveRef,XN as resolveRefIn,QN as resolveRefParams,jN as resolveVertexRef,pJ as reverseCurve,tF as revoluteJoint,X1 as revolve,n$ as roof,h1 as rotate,kJ as rotate2D,uJ as rotateDrawing,lR as roundedRectangleBlueprint,_1 as scale,AJ as scale2D,dJ as scaleDrawing,IZ as sdfBox,BZ as sdfCapsule,zZ as sdfCone,RZ as sdfCylinder,QZ as sdfFieldAxialRamp,tQ as sdfFieldClamp,ZZ as sdfFieldConst,eQ as sdfFieldFromSdf,$Z as sdfFieldRadialRamp,KZ as sdfLattice,HZ as sdfPlane,LZ as sdfRoundedBox,FZ as sdfSphere,qZ as sdfStrutLattice,WZ as sdfSweep,VZ as sdfTorus,D1 as section,O1 as sectionToFace,iI as serializeHistory,sF as setJointValue,oF as setJointValues,yO as setShapeOrigin,FO as setTagMetadata,wP as sewShells,C0 as shape,KX as shapeToMeshInput,ZD as shapeType,XM as sharedEdges,I1 as shell,$X as shellMesh,nZ as shellShape,Nj as shellWithEvolution,V1 as simplify,dq as sketchCircle,fq as sketchEllipse,RK as sketchExtrude,FK as sketchFace,_q as sketchFaceOffset,yq as sketchHelix,BK as sketchLoft,PJ as sketchOnFace2D,NJ as sketchOnPlane2D,vq as sketchParametricFunction,hq as sketchPolysides,pq as sketchRectangle,LK as sketchRevolve,mq as sketchRoundedRectangle,zK as sketchSweep,YY as sketchText,IK as sketchWires,go as sketcherStateError,A1 as slice,SP as solid,nM as solidFromShell,H$ as solveAssembly,tP as sphere,aF as sphericalJoint,k1 as split,YF as stepCount,XF as stepsFrom,MJ as stretch2D,vP as subFace,lM as supportExtrude,uT as supportsConstraintSketch,lT as supportsProjection,SQ as surfaceFromGrid,TQ as surfaceFromImage,cM as sweep,MO as tagFaces,pP as tangentArc,Ja as tap,Ya as tapErr,$K as textBlueprints,XY as textMetrics,R1 as thicken,oI as thread,lP as threePointArc,G1 as toBREP,ij as toBufferGeometryData,aj as toGroupedBufferGeometryData,uQ as toKernelVec,sj as toLODGeometryData,cj as toLODGeometryLevels,oj as toLineGeometryData,DJ as toSVGPathD,yD as toVec2,vD as toVec3,rP as torus,lQ as tpmsLattice,b1 as transformCopy,g2 as transforms,m1 as translate,OJ as translate2D,lJ as translateDrawing,GD as translatePlane,ao as tryCatch,oo as tryCatchAsync,dM as twistExtrude,ho as typeCastError,KF as undoLast,xo as unsupportedError,j as unwrap,no as unwrapErr,eo as unwrapOr,to as unwrapOrElse,FP as updateNode,lN as updateRoles,cO as uvBounds,uO as uvCoordinates,cE as validSolid,P0 as validatePlanetary,F as validationError,Jj as variableFillet,SD as vecAdd,PD as vecAngle,DD as vecCross,AD as vecDistance,ED as vecDot,MD as vecEquals,ND as vecIsZero,OD as vecLength,kD as vecLengthSq,TD as vecNegate,jD as vecNormalize,FD as vecProjectToPlane,RD as vecRepr,ID as vecRotate,wD as vecScale,CD as vecSub,bP as vertex,kX as vertexFinder,hD as vertexPosition,JM as verticesOfEdge,KM as verticesOfFace,eZ as voxelBoolean,hZ as voxelBooleanField,SZ as voxelBooleanFieldShapes,rZ as voxelBooleanShapes,mZ as voxelField,xZ as voxelFieldFromShape,LP as walkAssembly,BX as windingNumbers,mP as wire,II as wireFinder,hP as wireLoop,qM as wiresOfFace,vT as withKernel,vQ as withKernelDir,_Q as withKernelPnt,gQ as withKernelVec,bT as withQuality,VT as withScope,WT as withScopeResult,GT as withScopeResultAsync,wT as withTier,Ka 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 ib({cellSize:e=10,lineColor:t=`#888898`,lineOpacity:n=.1,fadeStart:r=50,fadeEnd:i=200}){let a=(0,v.useRef)(null),o=i*2.5;return(0,v.useEffect)(()=>()=>{a.current?.dispose()},[]),(0,$.jsxs)(`mesh`,{rotation:[-Math.PI/2,0,0],position:[0,-.01,0],children:[(0,$.jsx)(`planeGeometry`,{args:[o,o]}),(0,$.jsx)(`shaderMaterial`,{ref:a,vertexShader:nb,fragmentShader:rb,uniforms:{cellSize:{value:e},lineColor:{value:new q(t)},lineOpacity:{value:n},fadeStart:{value:r},fadeEnd:{value:i}},transparent:!0,depthWrite:!1,side:2,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:1})]})}function ab(){return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`hemisphereLight`,{args:[`#ffffff`,`#1a1a2e`,.65]}),(0,$.jsx)(`directionalLight`,{position:[-50,60,80],intensity:.85,color:`#fff8f0`}),(0,$.jsx)(`directionalLight`,{position:[40,-40,30],intensity:.15,color:`#e0e8ff`})]})}function ob({autoRotate:e=!1,target:t,gridVisible:n=!0,gridProps:r,controlsProps:i,controlsRef:a,onControlsStart:o}){let s={...a?{ref:a}:{},...t?{target:t}:{},...o?{onStart:o}:{}};return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(ab,{}),(0,$.jsx)(tb,{}),(0,$.jsx)(Ay,{makeDefault:!0,autoRotate:e,autoRotateSpeed:1.5,...s,...i}),n&&(0,$.jsx)(ib,{...r})]})}var sb={iso:new G(.6,.5,.6),front:new G(0,.3,1),top:new G(0,1,-.01),right:new G(1,.3,0)};function cb({data:e,view:t,fitSignal:n,projection:r,onFirstFrame:i}){let a=k_(e=>e.camera),o=k_(e=>e.invalidate),s=(0,v.useRef)(!1),c=(0,v.useRef)(i);c.current=i;let{center:l,radius:u}=(0,v.useMemo)(()=>{let t=jy(e);t.computeBoundingSphere();let n=t.boundingSphere??new zi(new G,1),r={center:n.center.clone(),radius:n.radius||1};return t.dispose(),r},[e]);return(0,v.useEffect)(()=>{let e=sb[t].clone().normalize();a.position.copy(l).addScaledVector(e,u*3),a.near=u/100,a.far=u*100;let n=a;if(n.isOrthographicCamera){let e=Math.min(n.right-n.left,n.top-n.bottom);e>0&&u>0&&(n.zoom=e/(u*2.4))}a.lookAt(l),a.updateProjectionMatrix(),o(),s.current||(s.current=!0,c.current?.())},[a,o,l,u,t,n,r]),null}function lb(){let e=k_(e=>e.camera);return(0,$.jsx)(ky,{makeDefault:!0,position:(0,v.useRef)([e.position.x,e.position.y,e.position.z]).current,zoom:20,near:.1,far:2e3})}function ub(){let e=k_(e=>e.gl);return(0,v.useEffect)(()=>(e.localClippingEnabled=!0,()=>{e.localClippingEnabled=!1}),[e]),null}function db({data:e,view:t=`iso`,fitSignal:n,autoRotate:r=!1,gridVisible:i=!0,projection:a=`perspective`,onFirstFrame:o,onError:s,errorFallback:c,children:l}){return(0,$.jsx)(By,{onError:s,fallback:c,children:(0,$.jsxs)(Qv,{frameloop:r?`always`:`demand`,gl:{preserveDrawingBuffer:!0},children:[(0,$.jsx)(ub,{}),a===`orthographic`&&(0,$.jsx)(lb,{}),(0,$.jsx)(ob,{autoRotate:r,gridVisible:i}),(0,$.jsx)(cb,{data:e,view:t,fitSignal:n,projection:a,onFirstFrame:o}),l]})})}var fb=[`iso`,`front`,`top`,`right`],pb={solid:`Solid`,wireframe:`Wire`,xray:`X-ray`},mb={iso:`Iso`,front:`Front`,top:`Top`,right:`Right`};function hb({viewMode:e,onViewModeChange:t,showEdges:n,onToggleEdges:r,showGrid:i,onToggleGrid:a,autoRotate:o,onToggleAutoRotate:s,projection:c,onToggleProjection:l,activeView:u,onView:d,onFit:f,onScreenshot:p,touch:m=!1,className:h}){return(0,$.jsxs)(`div`,{className:h,style:h?void 0:{...vb,gap:m?8:6},children:[(f||p)&&(0,$.jsxs)(gb,{touch:m,children:[f&&(0,$.jsx)(_b,{label:`Fit`,onClick:f,touch:m}),p&&(0,$.jsx)(_b,{label:`Snap`,onClick:p,touch:m})]}),e&&t&&(0,$.jsx)(gb,{touch:m,children:Object.keys(pb).map(n=>(0,$.jsx)(_b,{label:pb[n],active:e===n,touch:m,onClick:()=>{t(n)}},n))}),(r||a||s||l)&&(0,$.jsxs)(gb,{touch:m,children:[r&&(0,$.jsx)(_b,{label:`Edges`,active:n,onClick:r,touch:m}),a&&(0,$.jsx)(_b,{label:`Grid`,active:i,onClick:a,touch:m}),s&&(0,$.jsx)(_b,{label:`Spin`,active:o,onClick:s,touch:m}),l&&(0,$.jsx)(_b,{label:c===`orthographic`?`Ortho`:`Persp`,active:c===`orthographic`,touch:m,onClick:l})]}),d&&(0,$.jsx)(gb,{touch:m,children:fb.map(e=>(0,$.jsx)(_b,{label:mb[e],active:u===e,touch:m,onClick:()=>{d(e)}},e))})]})}function gb({children:e,touch:t}){return(0,$.jsx)(`div`,{style:t?Sb:yb,children:e})}function _b({label:e,active:t,onClick:n,touch:r}){return(0,$.jsx)(`button`,{type:`button`,onClick:n,"aria-pressed":t,style:{...r?Cb:bb,...t?xb:null},children:e})}var vb={position:`absolute`,top:12,right:12,zIndex:10,display:`flex`,flexDirection:`column`,gap:6,pointerEvents:`none`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},yb={display:`flex`,flexDirection:`column`,gap:4,padding:4,borderRadius:8,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(255, 255, 255, 0.08)`},bb={cursor:`pointer`,pointerEvents:`auto`,padding:`4px 10px`,borderRadius:5,fontSize:12,fontWeight:500,lineHeight:1.2,color:`#9aa3ad`,background:`rgba(255, 255, 255, 0.04)`,border:`1px solid transparent`,transition:`color 120ms, background 120ms`},xb={color:`#6ee7d7`,background:`rgba(45, 212, 191, 0.16)`,borderColor:`rgba(45, 212, 191, 0.3)`},Sb={...yb,gap:6,padding:6},Cb={...bb,padding:`9px 14px`,fontSize:13,borderRadius:6};function wb({dims:e,volume:t,area:n,triangles:r,valid:i,unit:a,className:o}){let s=a?` ${a}`:``,c=[];return e&&c.push((0,$.jsx)(Tb,{label:`Size`,value:`${Eb(e[0])} × ${Eb(e[1])} × ${Eb(e[2])}${s}`},`size`)),t!==void 0&&c.push((0,$.jsx)(Tb,{label:`Volume`,value:`${Eb(t)}${a?` ${a}³`:``}`},`vol`)),n!==void 0&&c.push((0,$.jsx)(Tb,{label:`Area`,value:`${Eb(n)}${a?` ${a}²`:``}`},`area`)),r!==void 0&&c.push((0,$.jsx)(Tb,{label:`Triangles`,value:r.toLocaleString()},`tris`)),i!==void 0&&c.push((0,$.jsx)(Tb,{label:`Validity`,value:i?`valid`:`invalid`,valueColor:i?`#6ee7d7`:`#f0a0a0`},`valid`)),c.length===0?null:(0,$.jsx)(`div`,{className:o,style:o?void 0:Db,children:c})}function Tb({label:e,value:t,valueColor:n}){return(0,$.jsxs)(`div`,{style:Ob,children:[(0,$.jsx)(`span`,{style:kb,children:e}),(0,$.jsx)(`span`,{style:{...Ab,...n?{color:n}:null},children:t})]})}function Eb(e){return Number.isFinite(e)?Number.isInteger(e)?e.toLocaleString():Number(e.toFixed(2)).toLocaleString():`—`}var Db={position:`absolute`,left:12,bottom:12,zIndex:10,display:`flex`,flexDirection:`column`,gap:2,padding:`8px 10px`,borderRadius:8,minWidth:150,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(255, 255, 255, 0.08)`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},Ob={display:`flex`,justifyContent:`space-between`,gap:16,fontSize:12,lineHeight:1.5},kb={color:`#7b8591`},Ab={color:`#c8cdd3`,fontVariantNumeric:`tabular-nums`},jb={PLANE:`Planar`,CYLINDER:`Cylindrical`,CONE:`Conical`,SPHERE:`Spherical`,TORUS:`Toroidal`,BEZIER_SURFACE:`Bézier`,BSPLINE_SURFACE:`B-spline`,REVOLUTION_SURFACE:`Revolved`,EXTRUSION_SURFACE:`Extruded`,OFFSET_SURFACE:`Offset`,OTHER_SURFACE:`Surface`};function Mb(e){return jb[e]??`Surface`}function Nb(e){return Number.isFinite(e)?Number.isInteger(e)?e.toLocaleString():Number(e.toFixed(2)).toLocaleString():`—`}function Pb({face:e,onClear:t,unit:n,className:r}){if(!e)return null;let[i,a,o]=e.normal;return(0,$.jsxs)(`div`,{className:r,style:r?void 0:Ib,children:[(0,$.jsxs)(`div`,{style:Lb,children:[(0,$.jsxs)(`span`,{style:Rb,children:[Mb(e.surfaceType),` face`]}),t&&(0,$.jsx)(`button`,{type:`button`,onClick:t,"aria-label":`Clear selection`,style:zb,children:`✕`})]}),(0,$.jsx)(Fb,{label:`Area`,value:`${Nb(e.area)}${n?` ${n}²`:``}`}),(0,$.jsx)(Fb,{label:`Normal`,value:`${Nb(i)}, ${Nb(a)}, ${Nb(o)}`})]})}function Fb({label:e,value:t}){return(0,$.jsxs)(`div`,{style:Bb,children:[(0,$.jsx)(`span`,{style:Vb,children:e}),(0,$.jsx)(`span`,{style:Hb,children:t})]})}var Ib={position:`absolute`,left:12,top:12,zIndex:10,display:`flex`,flexDirection:`column`,gap:2,padding:`8px 10px`,borderRadius:8,minWidth:170,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(74, 206, 204, 0.3)`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},Lb={display:`flex`,justifyContent:`space-between`,alignItems:`center`,gap:12,marginBottom:2},Rb={color:`#6ee7d7`,fontSize:12,fontWeight:600},zb={cursor:`pointer`,border:`none`,background:`transparent`,color:`#7b8591`,fontSize:12,lineHeight:1,padding:0},Bb={display:`flex`,justifyContent:`space-between`,gap:16,fontSize:12,lineHeight:1.5},Vb={color:`#7b8591`},Hb={color:`#c8cdd3`,fontVariantNumeric:`tabular-nums`},Ub=[`x`,`y`,`z`];function Wb({enabled:e,onToggle:t,axis:n,onAxisChange:r,position:i,min:a,max:o,onPositionChange:s,flip:c,onToggleFlip:l,className:u}){return(0,$.jsxs)(`div`,{className:u,style:u?void 0:Kb,children:[(0,$.jsx)(Gb,{label:`Section`,active:e,onClick:t}),e&&(0,$.jsxs)($.Fragment,{children:[Ub.map(e=>(0,$.jsx)(Gb,{label:e.toUpperCase(),active:n===e,onClick:()=>{r(e)}},e)),(0,$.jsx)(`input`,{type:`range`,min:a,max:o,step:(o-a)/200||.01,value:i,disabled:a===o,onChange:e=>{s(Number(e.target.value))},"aria-label":`Section position`,style:{...Yb,...a===o?{opacity:.4}:null}}),(0,$.jsx)(Gb,{label:`Flip`,active:c,onClick:l})]})]})}function Gb({label:e,active:t,onClick:n}){return(0,$.jsx)(`button`,{type:`button`,onClick:n,"aria-pressed":t,style:{...qb,...t?Jb:null},children:e})}var Kb={position:`absolute`,bottom:12,left:`50%`,transform:`translateX(-50%)`,zIndex:10,display:`flex`,alignItems:`center`,gap:4,padding:4,borderRadius:8,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(255, 255, 255, 0.08)`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},qb={cursor:`pointer`,padding:`4px 10px`,borderRadius:5,fontSize:12,fontWeight:500,lineHeight:1.2,color:`#9aa3ad`,background:`rgba(255, 255, 255, 0.04)`,border:`1px solid transparent`},Jb={color:`#6ee7d7`,background:`rgba(45, 212, 191, 0.16)`,borderColor:`rgba(45, 212, 191, 0.3)`},Yb={width:160,accentColor:`#4ACECC`,margin:`0 4px`};function Xb(e){let t=new URLSearchParams(e),n=t.get(`file`);return n?{dir:t.get(`dir`),file:n}:null}function Zb(e){let t=e.lastIndexOf(`.`);return t===-1?``:e.slice(t).toLowerCase()}function Qb({inspect:e=!1}={}){let[t,n]=(0,v.useState)({status:`idle`});return(0,v.useEffect)(()=>{let t=Xb(window.location.search);if(!t){n({status:`error`,error:`missing ?file= parameter`});return}if(!t.dir){n({status:`error`,error:`missing ?dir= parameter`});return}n({status:`loading`});let r=new Worker(new URL(``+new URL(`kernelWorker-DYCflCJ2.js`,import.meta.url).href,``+import.meta.url),{type:`module`}),i=!1;r.addEventListener(`message`,e=>{i||(e.data.type===`loaded`?n({status:`ready`,data:e.data.meshData,measurements:e.data.measurements}):n({status:`error`,error:e.data.error}))});let a=`/__model/${t.file.split(`/`).map(encodeURIComponent).join(`/`)}?dir=${encodeURIComponent(t.dir)}`;return fetch(a).then(e=>{if(!e.ok)throw Error(`fetch ${t.file}: ${e.status}`);return e.arrayBuffer()}).then(n=>{let i={type:`load`,bytes:n,ext:Zb(t.file),inspect:e};r.postMessage(i,[n])}).catch(e=>{i||n({status:`error`,error:e instanceof Error?e.message:String(e)})}),()=>{i=!0,r.terminate()}},[e]),t}var $b=[`iso`,`front`,`top`,`right`],ex=new Set;function tx(e){return $b.includes(e)}function nx(e){return ex.add(e),()=>ex.delete(e)}function rx(e){for(let t of ex)t(e)}function ix(){globalThis.__ready=!0}function ax(){let e=globalThis;e.__ready=!1,e.__renderView=e=>{tx(e)&&rx({view:e})},e.__setScene=e=>{e&&tx(e.view)&&rx(e)}}function ox({marks:e}){return(0,$.jsx)($.Fragment,{children:e.map((e,t)=>(0,$.jsx)(my,{position:[e.pos[0],e.pos[1],e.pos[2]],center:!0,children:(0,$.jsx)(`div`,{style:{background:`#ffcc00`,color:`#000`,font:`700 13px monospace`,padding:`1px 5px`,borderRadius:4,border:`1px solid #000`,whiteSpace:`nowrap`,pointerEvents:`none`},children:e.label})},`${e.label}-${t}`))})}var sx=new URLSearchParams(window.location.search),cx=sx.get(`ui`)!==`0`,lx=sx.get(`dims`)===`1`;function ux(){let e=document.querySelector(`canvas`);if(!e)return;let t=e.toDataURL(`image/png`),n=document.createElement(`a`);n.href=t,n.download=`brepjs-view.png`,n.click()}function dx(){let e=Qb({inspect:cx}),[t,n]=(0,v.useState)(`iso`),[r,i]=(0,v.useState)(`solid`),[a,o]=(0,v.useState)(!0),[s,c]=(0,v.useState)(!0),[l,u]=(0,v.useState)(!1),[d,f]=(0,v.useState)(`perspective`),[p,m]=(0,v.useState)(0),[h,g]=(0,v.useState)(null),[_,y]=(0,v.useState)(null),[b,x]=(0,v.useState)(!1),[S,C]=(0,v.useState)(`x`),[w,T]=(0,v.useState)(0),[E,D]=(0,v.useState)(!1),[O,k]=(0,v.useState)([]),A=(0,v.useCallback)(()=>{m(e=>e+1)},[]),ee=(0,v.useCallback)(e=>{g(e)},[]),j=(0,v.useCallback)(e=>{y(e?e.faceId:null)},[]),M=(0,v.useMemo)(()=>e.status===`ready`?My(e.data):null,[e]);(0,v.useEffect)(()=>nx(e=>{if(n(e.view),i(e.viewMode??`solid`),e.section&&M){let t=e.section.axis===`x`?0:e.section.axis===`y`?1:2;C(e.section.axis),T(M.min[t]+e.section.frac*(M.max[t]-M.min[t])),x(!0)}else x(!1);k(e.marks??[])}),[M]);let te=S===`x`?0:S===`y`?1:2,N=M?M.min[te]:0,P=M?M.max[te]:1,F=(0,v.useCallback)(e=>{if(!M)return 0;let t=e===`x`?0:e===`y`?1:2;return(M.min[t]+M.max[t])/2},[M]),ne=(0,v.useCallback)(()=>{x(e=>(e||T(F(S)),!e))},[F,S]),re=(0,v.useCallback)(e=>{C(e),T(F(e))},[F]),ie=(0,v.useMemo)(()=>b&&M?[Py(S,w,E)]:void 0,[b,M,S,w,E]);return e.status===`error`?(0,$.jsxs)(`div`,{style:{color:`#e88`,padding:16,fontFamily:`monospace`},children:[`error: `,e.error]}):e.status===`ready`?(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(db,{data:e.data,view:t,fitSignal:p,autoRotate:l,gridVisible:s,projection:d,onFirstFrame:ix,children:[(0,$.jsx)(zy,{data:e.data,viewMode:r,...ie?{clippingPlanes:ie}:{},...cx?{onFacePick:ee,onFaceHover:j}:{}}),a&&r!==`wireframe`&&e.data.edges.length>0&&(0,$.jsx)(Uy,{edges:e.data.edges,...ie?{clippingPlanes:ie}:{}}),cx&&(0,$.jsx)(Zy,{data:e.data,selectedFaceIds:h?[h.faceId]:[],hoverFaceId:_}),O.length>0&&(0,$.jsx)(ox,{marks:O})]}),cx&&(0,$.jsx)(Pb,{face:h,onClear:()=>{g(null)}}),cx&&(0,$.jsx)(Wb,{enabled:b,onToggle:ne,axis:S,onAxisChange:re,position:w,min:N,max:P,onPositionChange:T,flip:E,onToggleFlip:()=>{D(e=>!e)}}),cx&&(0,$.jsx)(wb,{dims:Ny(e.data),volume:e.measurements.volume,area:e.measurements.area,triangles:e.data.index.length/3,valid:e.measurements.valid}),!cx&&lx&&(0,$.jsx)(wb,{dims:Ny(e.data)}),cx&&(0,$.jsx)(hb,{viewMode:r,onViewModeChange:i,showEdges:a,onToggleEdges:()=>{o(e=>!e)},showGrid:s,onToggleGrid:()=>{c(e=>!e)},autoRotate:l,onToggleAutoRotate:()=>{u(e=>!e)},projection:d,onToggleProjection:()=>{f(e=>e===`perspective`?`orthographic`:`perspective`)},activeView:t,onView:n,onFit:A,onScreenshot:ux})]}):(0,$.jsx)(`div`,{style:{color:`#9aa`,padding:16,fontFamily:`monospace`},children:`loading model…`})}ax();var fx=document.getElementById(`root`);fx&&(0,y.createRoot)(fx).render((0,$.jsx)(v.StrictMode,{children:(0,$.jsx)(dx,{})}));
4208
+ `;function ib({cellSize:e=10,lineColor:t=`#888898`,lineOpacity:n=.1,fadeStart:r=50,fadeEnd:i=200}){let a=(0,v.useRef)(null),o=i*2.5;return(0,v.useEffect)(()=>()=>{a.current?.dispose()},[]),(0,$.jsxs)(`mesh`,{rotation:[-Math.PI/2,0,0],position:[0,-.01,0],children:[(0,$.jsx)(`planeGeometry`,{args:[o,o]}),(0,$.jsx)(`shaderMaterial`,{ref:a,vertexShader:nb,fragmentShader:rb,uniforms:{cellSize:{value:e},lineColor:{value:new q(t)},lineOpacity:{value:n},fadeStart:{value:r},fadeEnd:{value:i}},transparent:!0,depthWrite:!1,side:2,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:1})]})}function ab(){return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`hemisphereLight`,{args:[`#ffffff`,`#1a1a2e`,.65]}),(0,$.jsx)(`directionalLight`,{position:[-50,60,80],intensity:.85,color:`#fff8f0`}),(0,$.jsx)(`directionalLight`,{position:[40,-40,30],intensity:.15,color:`#e0e8ff`})]})}function ob({autoRotate:e=!1,target:t,gridVisible:n=!0,gridProps:r,controlsProps:i,controlsRef:a,onControlsStart:o}){let s={...a?{ref:a}:{},...t?{target:t}:{},...o?{onStart:o}:{}};return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(ab,{}),(0,$.jsx)(tb,{}),(0,$.jsx)(Ay,{makeDefault:!0,autoRotate:e,autoRotateSpeed:1.5,...s,...i}),n&&(0,$.jsx)(ib,{...r})]})}var sb={iso:new G(.6,.5,.6),front:new G(0,.3,1),top:new G(0,1,-.01),right:new G(1,.3,0)};function cb({data:e,view:t,fitSignal:n,projection:r,onFirstFrame:i}){let a=k_(e=>e.camera),o=k_(e=>e.invalidate),s=(0,v.useRef)(!1),c=(0,v.useRef)(i);c.current=i;let{center:l,radius:u}=(0,v.useMemo)(()=>{let t=jy(e);t.computeBoundingSphere();let n=t.boundingSphere??new zi(new G,1),r={center:n.center.clone(),radius:n.radius||1};return t.dispose(),r},[e]);return(0,v.useEffect)(()=>{let e=sb[t].clone().normalize();a.position.copy(l).addScaledVector(e,u*3),a.near=u/100,a.far=u*100;let n=a;if(n.isOrthographicCamera){let e=Math.min(n.right-n.left,n.top-n.bottom);e>0&&u>0&&(n.zoom=e/(u*2.4))}a.lookAt(l),a.updateProjectionMatrix(),o(),s.current||(s.current=!0,c.current?.())},[a,o,l,u,t,n,r]),null}function lb(){let e=k_(e=>e.camera);return(0,$.jsx)(ky,{makeDefault:!0,position:(0,v.useRef)([e.position.x,e.position.y,e.position.z]).current,zoom:20,near:.1,far:2e3})}function ub(){let e=k_(e=>e.gl);return(0,v.useEffect)(()=>(e.localClippingEnabled=!0,()=>{e.localClippingEnabled=!1}),[e]),null}function db({data:e,view:t=`iso`,fitSignal:n,autoRotate:r=!1,gridVisible:i=!0,projection:a=`perspective`,onFirstFrame:o,onError:s,errorFallback:c,children:l}){return(0,$.jsx)(By,{onError:s,fallback:c,children:(0,$.jsxs)(Qv,{frameloop:r?`always`:`demand`,gl:{preserveDrawingBuffer:!0},children:[(0,$.jsx)(ub,{}),a===`orthographic`&&(0,$.jsx)(lb,{}),(0,$.jsx)(ob,{autoRotate:r,gridVisible:i}),(0,$.jsx)(cb,{data:e,view:t,fitSignal:n,projection:a,onFirstFrame:o}),l]})})}var fb=[`iso`,`front`,`top`,`right`],pb={solid:`Solid`,wireframe:`Wire`,xray:`X-ray`},mb={iso:`Iso`,front:`Front`,top:`Top`,right:`Right`};function hb({viewMode:e,onViewModeChange:t,showEdges:n,onToggleEdges:r,showGrid:i,onToggleGrid:a,autoRotate:o,onToggleAutoRotate:s,projection:c,onToggleProjection:l,activeView:u,onView:d,onFit:f,onScreenshot:p,touch:m=!1,className:h}){return(0,$.jsxs)(`div`,{className:h,style:h?void 0:{...vb,gap:m?8:6},children:[(f||p)&&(0,$.jsxs)(gb,{touch:m,children:[f&&(0,$.jsx)(_b,{label:`Fit`,onClick:f,touch:m}),p&&(0,$.jsx)(_b,{label:`Snap`,onClick:p,touch:m})]}),e&&t&&(0,$.jsx)(gb,{touch:m,children:Object.keys(pb).map(n=>(0,$.jsx)(_b,{label:pb[n],active:e===n,touch:m,onClick:()=>{t(n)}},n))}),(r||a||s||l)&&(0,$.jsxs)(gb,{touch:m,children:[r&&(0,$.jsx)(_b,{label:`Edges`,active:n,onClick:r,touch:m}),a&&(0,$.jsx)(_b,{label:`Grid`,active:i,onClick:a,touch:m}),s&&(0,$.jsx)(_b,{label:`Spin`,active:o,onClick:s,touch:m}),l&&(0,$.jsx)(_b,{label:c===`orthographic`?`Ortho`:`Persp`,active:c===`orthographic`,touch:m,onClick:l})]}),d&&(0,$.jsx)(gb,{touch:m,children:fb.map(e=>(0,$.jsx)(_b,{label:mb[e],active:u===e,touch:m,onClick:()=>{d(e)}},e))})]})}function gb({children:e,touch:t}){return(0,$.jsx)(`div`,{style:t?Sb:yb,children:e})}function _b({label:e,active:t,onClick:n,touch:r}){return(0,$.jsx)(`button`,{type:`button`,onClick:n,"aria-pressed":t,style:{...r?Cb:bb,...t?xb:null},children:e})}var vb={position:`absolute`,top:12,right:12,zIndex:10,display:`flex`,flexDirection:`column`,gap:6,pointerEvents:`none`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},yb={display:`flex`,flexDirection:`column`,gap:4,padding:4,borderRadius:8,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(255, 255, 255, 0.08)`},bb={cursor:`pointer`,pointerEvents:`auto`,padding:`4px 10px`,borderRadius:5,fontSize:12,fontWeight:500,lineHeight:1.2,color:`#9aa3ad`,background:`rgba(255, 255, 255, 0.04)`,border:`1px solid transparent`,transition:`color 120ms, background 120ms`},xb={color:`#6ee7d7`,background:`rgba(45, 212, 191, 0.16)`,borderColor:`rgba(45, 212, 191, 0.3)`},Sb={...yb,gap:6,padding:6},Cb={...bb,padding:`9px 14px`,fontSize:13,borderRadius:6};function wb({dims:e,volume:t,area:n,triangles:r,valid:i,unit:a,className:o}){let s=a?` ${a}`:``,c=[];return e&&c.push((0,$.jsx)(Tb,{label:`Size`,value:`${Eb(e[0])} × ${Eb(e[1])} × ${Eb(e[2])}${s}`},`size`)),t!==void 0&&c.push((0,$.jsx)(Tb,{label:`Volume`,value:`${Eb(t)}${a?` ${a}³`:``}`},`vol`)),n!==void 0&&c.push((0,$.jsx)(Tb,{label:`Area`,value:`${Eb(n)}${a?` ${a}²`:``}`},`area`)),r!==void 0&&c.push((0,$.jsx)(Tb,{label:`Triangles`,value:r.toLocaleString()},`tris`)),i!==void 0&&c.push((0,$.jsx)(Tb,{label:`Validity`,value:i?`valid`:`invalid`,valueColor:i?`#6ee7d7`:`#f0a0a0`},`valid`)),c.length===0?null:(0,$.jsx)(`div`,{className:o,style:o?void 0:Db,children:c})}function Tb({label:e,value:t,valueColor:n}){return(0,$.jsxs)(`div`,{style:Ob,children:[(0,$.jsx)(`span`,{style:kb,children:e}),(0,$.jsx)(`span`,{style:{...Ab,...n?{color:n}:null},children:t})]})}function Eb(e){return Number.isFinite(e)?Number.isInteger(e)?e.toLocaleString():Number(e.toFixed(2)).toLocaleString():`—`}var Db={position:`absolute`,left:12,bottom:12,zIndex:10,display:`flex`,flexDirection:`column`,gap:2,padding:`8px 10px`,borderRadius:8,minWidth:150,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(255, 255, 255, 0.08)`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},Ob={display:`flex`,justifyContent:`space-between`,gap:16,fontSize:12,lineHeight:1.5},kb={color:`#7b8591`},Ab={color:`#c8cdd3`,fontVariantNumeric:`tabular-nums`},jb={PLANE:`Planar`,CYLINDER:`Cylindrical`,CONE:`Conical`,SPHERE:`Spherical`,TORUS:`Toroidal`,BEZIER_SURFACE:`Bézier`,BSPLINE_SURFACE:`B-spline`,REVOLUTION_SURFACE:`Revolved`,EXTRUSION_SURFACE:`Extruded`,OFFSET_SURFACE:`Offset`,OTHER_SURFACE:`Surface`};function Mb(e){return jb[e]??`Surface`}function Nb(e){return Number.isFinite(e)?Number.isInteger(e)?e.toLocaleString():Number(e.toFixed(2)).toLocaleString():`—`}function Pb({face:e,onClear:t,unit:n,className:r}){if(!e)return null;let[i,a,o]=e.normal;return(0,$.jsxs)(`div`,{className:r,style:r?void 0:Ib,children:[(0,$.jsxs)(`div`,{style:Lb,children:[(0,$.jsxs)(`span`,{style:Rb,children:[Mb(e.surfaceType),` face`]}),t&&(0,$.jsx)(`button`,{type:`button`,onClick:t,"aria-label":`Clear selection`,style:zb,children:`✕`})]}),(0,$.jsx)(Fb,{label:`Area`,value:`${Nb(e.area)}${n?` ${n}²`:``}`}),(0,$.jsx)(Fb,{label:`Normal`,value:`${Nb(i)}, ${Nb(a)}, ${Nb(o)}`})]})}function Fb({label:e,value:t}){return(0,$.jsxs)(`div`,{style:Bb,children:[(0,$.jsx)(`span`,{style:Vb,children:e}),(0,$.jsx)(`span`,{style:Hb,children:t})]})}var Ib={position:`absolute`,left:12,top:12,zIndex:10,display:`flex`,flexDirection:`column`,gap:2,padding:`8px 10px`,borderRadius:8,minWidth:170,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(74, 206, 204, 0.3)`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},Lb={display:`flex`,justifyContent:`space-between`,alignItems:`center`,gap:12,marginBottom:2},Rb={color:`#6ee7d7`,fontSize:12,fontWeight:600},zb={cursor:`pointer`,border:`none`,background:`transparent`,color:`#7b8591`,fontSize:12,lineHeight:1,padding:0},Bb={display:`flex`,justifyContent:`space-between`,gap:16,fontSize:12,lineHeight:1.5},Vb={color:`#7b8591`},Hb={color:`#c8cdd3`,fontVariantNumeric:`tabular-nums`},Ub=[`x`,`y`,`z`];function Wb({enabled:e,onToggle:t,axis:n,onAxisChange:r,position:i,min:a,max:o,onPositionChange:s,flip:c,onToggleFlip:l,className:u}){return(0,$.jsxs)(`div`,{className:u,style:u?void 0:Kb,children:[(0,$.jsx)(Gb,{label:`Section`,active:e,onClick:t}),e&&(0,$.jsxs)($.Fragment,{children:[Ub.map(e=>(0,$.jsx)(Gb,{label:e.toUpperCase(),active:n===e,onClick:()=>{r(e)}},e)),(0,$.jsx)(`input`,{type:`range`,min:a,max:o,step:(o-a)/200||.01,value:i,disabled:a===o,onChange:e=>{s(Number(e.target.value))},"aria-label":`Section position`,style:{...Yb,...a===o?{opacity:.4}:null}}),(0,$.jsx)(Gb,{label:`Flip`,active:c,onClick:l})]})]})}function Gb({label:e,active:t,onClick:n}){return(0,$.jsx)(`button`,{type:`button`,onClick:n,"aria-pressed":t,style:{...qb,...t?Jb:null},children:e})}var Kb={position:`absolute`,bottom:12,left:`50%`,transform:`translateX(-50%)`,zIndex:10,display:`flex`,alignItems:`center`,gap:4,padding:4,borderRadius:8,background:`rgba(26, 29, 33, 0.7)`,backdropFilter:`blur(6px)`,border:`1px solid rgba(255, 255, 255, 0.08)`,fontFamily:`ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif`},qb={cursor:`pointer`,padding:`4px 10px`,borderRadius:5,fontSize:12,fontWeight:500,lineHeight:1.2,color:`#9aa3ad`,background:`rgba(255, 255, 255, 0.04)`,border:`1px solid transparent`},Jb={color:`#6ee7d7`,background:`rgba(45, 212, 191, 0.16)`,borderColor:`rgba(45, 212, 191, 0.3)`},Yb={width:160,accentColor:`#4ACECC`,margin:`0 4px`};function Xb(e){let t=new URLSearchParams(e),n=t.get(`file`);return n?{dir:t.get(`dir`),file:n}:null}function Zb(e){let t=e.lastIndexOf(`.`);return t===-1?``:e.slice(t).toLowerCase()}function Qb({inspect:e=!1}={}){let[t,n]=(0,v.useState)({status:`idle`});return(0,v.useEffect)(()=>{let t=Xb(window.location.search);if(!t){n({status:`error`,error:`missing ?file= parameter`});return}if(!t.dir){n({status:`error`,error:`missing ?dir= parameter`});return}n({status:`loading`});let r=new Worker(new URL(``+new URL(`kernelWorker-CKttjghz.js`,import.meta.url).href,``+import.meta.url),{type:`module`}),i=!1;r.addEventListener(`message`,e=>{i||(e.data.type===`loaded`?n({status:`ready`,data:e.data.meshData,measurements:e.data.measurements}):n({status:`error`,error:e.data.error}))});let a=`/__model/${t.file.split(`/`).map(encodeURIComponent).join(`/`)}?dir=${encodeURIComponent(t.dir)}`;return fetch(a).then(e=>{if(!e.ok)throw Error(`fetch ${t.file}: ${e.status}`);return e.arrayBuffer()}).then(n=>{let i={type:`load`,bytes:n,ext:Zb(t.file),inspect:e};r.postMessage(i,[n])}).catch(e=>{i||n({status:`error`,error:e instanceof Error?e.message:String(e)})}),()=>{i=!0,r.terminate()}},[e]),t}var $b=[`iso`,`front`,`top`,`right`],ex=new Set;function tx(e){return $b.includes(e)}function nx(e){return ex.add(e),()=>ex.delete(e)}function rx(e){for(let t of ex)t(e)}function ix(){globalThis.__ready=!0}function ax(){let e=globalThis;e.__ready=!1,e.__renderView=e=>{tx(e)&&rx({view:e})},e.__setScene=e=>{e&&tx(e.view)&&rx(e)}}function ox({marks:e}){return(0,$.jsx)($.Fragment,{children:e.map((e,t)=>(0,$.jsx)(my,{position:[e.pos[0],e.pos[1],e.pos[2]],center:!0,children:(0,$.jsx)(`div`,{style:{background:`#ffcc00`,color:`#000`,font:`700 13px monospace`,padding:`1px 5px`,borderRadius:4,border:`1px solid #000`,whiteSpace:`nowrap`,pointerEvents:`none`},children:e.label})},`${e.label}-${t}`))})}var sx=new URLSearchParams(window.location.search),cx=sx.get(`ui`)!==`0`,lx=sx.get(`dims`)===`1`;function ux(){let e=document.querySelector(`canvas`);if(!e)return;let t=e.toDataURL(`image/png`),n=document.createElement(`a`);n.href=t,n.download=`brepjs-view.png`,n.click()}function dx(){let e=Qb({inspect:cx}),[t,n]=(0,v.useState)(`iso`),[r,i]=(0,v.useState)(`solid`),[a,o]=(0,v.useState)(!0),[s,c]=(0,v.useState)(!0),[l,u]=(0,v.useState)(!1),[d,f]=(0,v.useState)(`perspective`),[p,m]=(0,v.useState)(0),[h,g]=(0,v.useState)(null),[_,y]=(0,v.useState)(null),[b,x]=(0,v.useState)(!1),[S,C]=(0,v.useState)(`x`),[w,T]=(0,v.useState)(0),[E,D]=(0,v.useState)(!1),[O,k]=(0,v.useState)([]),A=(0,v.useCallback)(()=>{m(e=>e+1)},[]),ee=(0,v.useCallback)(e=>{g(e)},[]),j=(0,v.useCallback)(e=>{y(e?e.faceId:null)},[]),M=(0,v.useMemo)(()=>e.status===`ready`?My(e.data):null,[e]);(0,v.useEffect)(()=>nx(e=>{if(n(e.view),i(e.viewMode??`solid`),e.section&&M){let t=e.section.axis===`x`?0:e.section.axis===`y`?1:2;C(e.section.axis),T(M.min[t]+e.section.frac*(M.max[t]-M.min[t])),x(!0)}else x(!1);k(e.marks??[])}),[M]);let te=S===`x`?0:S===`y`?1:2,N=M?M.min[te]:0,P=M?M.max[te]:1,F=(0,v.useCallback)(e=>{if(!M)return 0;let t=e===`x`?0:e===`y`?1:2;return(M.min[t]+M.max[t])/2},[M]),ne=(0,v.useCallback)(()=>{x(e=>(e||T(F(S)),!e))},[F,S]),re=(0,v.useCallback)(e=>{C(e),T(F(e))},[F]),ie=(0,v.useMemo)(()=>b&&M?[Py(S,w,E)]:void 0,[b,M,S,w,E]);return e.status===`error`?(0,$.jsxs)(`div`,{style:{color:`#e88`,padding:16,fontFamily:`monospace`},children:[`error: `,e.error]}):e.status===`ready`?(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(db,{data:e.data,view:t,fitSignal:p,autoRotate:l,gridVisible:s,projection:d,onFirstFrame:ix,children:[(0,$.jsx)(zy,{data:e.data,viewMode:r,...ie?{clippingPlanes:ie}:{},...cx?{onFacePick:ee,onFaceHover:j}:{}}),a&&r!==`wireframe`&&e.data.edges.length>0&&(0,$.jsx)(Uy,{edges:e.data.edges,...ie?{clippingPlanes:ie}:{}}),cx&&(0,$.jsx)(Zy,{data:e.data,selectedFaceIds:h?[h.faceId]:[],hoverFaceId:_}),O.length>0&&(0,$.jsx)(ox,{marks:O})]}),cx&&(0,$.jsx)(Pb,{face:h,onClear:()=>{g(null)}}),cx&&(0,$.jsx)(Wb,{enabled:b,onToggle:ne,axis:S,onAxisChange:re,position:w,min:N,max:P,onPositionChange:T,flip:E,onToggleFlip:()=>{D(e=>!e)}}),cx&&(0,$.jsx)(wb,{dims:Ny(e.data),volume:e.measurements.volume,area:e.measurements.area,triangles:e.data.index.length/3,valid:e.measurements.valid}),!cx&&lx&&(0,$.jsx)(wb,{dims:Ny(e.data)}),cx&&(0,$.jsx)(hb,{viewMode:r,onViewModeChange:i,showEdges:a,onToggleEdges:()=>{o(e=>!e)},showGrid:s,onToggleGrid:()=>{c(e=>!e)},autoRotate:l,onToggleAutoRotate:()=>{u(e=>!e)},projection:d,onToggleProjection:()=>{f(e=>e===`perspective`?`orthographic`:`perspective`)},activeView:t,onView:n,onFit:A,onScreenshot:ux})]}):(0,$.jsx)(`div`,{style:{color:`#9aa`,padding:16,fontFamily:`monospace`},children:`loading model…`})}ax();var fx=document.getElementById(`root`);fx&&(0,y.createRoot)(fx).render((0,$.jsx)(v.StrictMode,{children:(0,$.jsx)(dx,{})}));
@@ -1 +1 @@
1
- function e(e,t,n={}){let r={position:e.vertices,normal:e.normals,index:e.triangles,edges:t,faceGroups:e.faceGroups.map(e=>({start:e.start,count:e.count,faceId:e.faceId}))};return n.color&&(r.color=n.color),r}function t(e,t){let r={valid:n(()=>e.isValid(t))??!1},i=n(()=>e.measureVolume(t));i&&e.isOk(i)&&typeof i.value==`number`&&i.value>0&&(r.volume=i.value);let a=n(()=>e.measureArea(t));return a&&e.isOk(a)&&typeof a.value==`number`&&a.value>0&&(r.area=a.value),r}function n(e){try{return e()}catch{return}}function r(e,t){switch(t.replace(/^\./,``).toLowerCase()){case`step`:case`stp`:return e.importSTEP;case`stl`:return e.importSTL;case`iges`:case`igs`:return e.importIGES;case`3mf`:return e.importThreeMF;case`glb`:case`gltf`:return e.importGLB;case`obj`:return e.importOBJ;default:throw Error(`unsupported file extension: ${t}`)}}function i(e,t){let n;try{n=e.getFaces(t)}catch(e){return console.warn(`[brepjs-cad] getFaces threw; faces unselectable`,e),[]}let r=[];for(let t of n)try{let n=e.getSurfaceType(t),i=e.isOk(n)&&n.value?n.value:`OTHER_SURFACE`,a=e.measureArea(t),o=e.isOk(a)&&typeof a.value==`number`?a.value:NaN;r.push({faceId:e.getHashCode(t),surfaceType:i,area:o,normal:e.normalAt(t)})}catch(e){console.warn(`[brepjs-cad] face metadata threw; skipping face`,e)}return r}async function a(n,a,o,s=!1){let c=await r(n,o)(a);if(!n.isOk(c)){let e=c.error;throw Error(`import failed: ${typeof e==`string`?e:JSON.stringify(e)}`)}let l=c.value,u=e(n.mesh(l),n.meshEdges(l).lines);return s&&(u.faceInfos=i(n,l)),{meshData:u,measurements:t(n,l)}}function o(e,t){t?self.postMessage(e,t):self.postMessage(e)}let s=null;function c(){return s||=l().catch(e=>{throw s=null,e}),s}async function l(){let e=new URL(`./`,self.location.origin).href,t=await fetch(`${e}wasm/occt-wasm.js`);if(!t.ok)throw Error(`failed to load occt-wasm.js: ${t.status}`);let n=URL.createObjectURL(new Blob([await t.text()],{type:`application/javascript`})),r=await import(n);URL.revokeObjectURL(n);let i=await r.default({locateFile:t=>t.endsWith(`.wasm`)?`${e}wasm/occt-wasm.wasm`:t}),a=await import(`./brepjs-BpjW9cl9.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-DRZUKZQ0.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-YQJjMk33.js"></script>
17
+ <script type="module" crossorigin src="./assets/index-B9QtGHVy.js"></script>
18
18
  </head>
19
19
  <body>
20
20
  <div id="root"></div>